.NET Framework 类库

  『江西樟树·仅此一仙』制作
.NET Framework 类库 (节选版)

.NET Framework 类库是类、接口和值类型的库，提供对系统功能的访问，且被设计为构建 .NET Framework 应用程序、组件和控件的基础。

.NET Framework 类库提供了下列命名空间，并在此参考文档中详细介绍。

Microsoft.Win32

提供两种类型的类：处理由操作系统引发的事件的类和对系统注册表进行操作的类。

System

包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、特性和处理异常的基础类和基类。其他类提供支持下列操作的服务：数据类型转换，方法参数操作，数学计算，远程和本地程序调用，应用程序环境管理以及对托管和非托管应用程序的监管。

System.Collections

包含定义各种对象集合（如列表、队列、位数组、哈希表和字典）的接口和类。

System.Data

包含组成大部分 ADO.NET 结构的类。ADO.NET 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。

System.Data.Common

包含由 .NET Framework 数据提供程序共享的类。.NET Framework 数据提供程序描述用于在托管空间中访问数据源（如数据库）的类的集合。

System.Data.Linq

包含支持在 LINQ to SQL 应用程序中与关系数据库进行交互的类。

System.Data.Linq.Mapping

包含用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。

System.Data.Mapping

提供用于存储数据映射信息的类型。

System.Data.Metadata.Edm

包含一组类型，这些类型表示模型中由实体框架使用的概念，以及一组帮助应用程序使用元数据的类。

System.Data.Objects

包含可访问对象服务的核心功能的类。

System.Data.Objects.DataClasses

包含以下这些类：Entity Data Model (EDM) 中定义的类型的基类、由导航属性返回的类型的基类，以及用于定义将公共语言运行时 (CLR) 对象映射到概念模型中类型的特性的类。

System.Data.Sql

包含支持特定于 SQL Server 的功能的类。此类的 API 扩展已添加到 SQL Server 的 .NET Framework 数据提供程序 ( System.Data.SqlClient) 中。

System.Data.SqlClient

包含封装 SQL Server .NET Framework 数据提供程序的类。SQL Server .NET Framework 数据提供程序描述了用于在托管空间中访问 SQL Server 数据库的类集合。

System.IO

包含允许对数据流和文件进行同步和异步读写的类型。

System.Linq

包含支持使用语言集成查询 (LINQ) 的查询的类和接口。

System.Web

提供启用浏览器/服务器通信的类和接口。


Microsoft.Win32 命名空间

Microsoft.Win32 命名空间

The Microsoft.Win32 namespace provides two types of classes: those that handle events raised by the operating system and those that manipulate the system registry.

 | 类 | 说明
公共类 | CommonDialog | 用于显示通用 Win32 对话框的抽象基类。
公共类 | FileDialog | 一个抽象基类，用于封装文件对话框（包括 OpenFileDialog 和 SaveFileDialog）的通用功能。
公共类 | FileDialogCustomPlace | 表示 FileDialog 自定义空间列表中的项。
公共类 | FileDialogCustomPlaces | 为文件对话框中的自定义空间定义已知文件夹。
公共类 | IntranetZoneCredentialPolicy | 定义凭据策略，该凭据策略将用于使用 WebRequest 及其派生类发出的资源请求。
公共类 | OpenFileDialog | 表示一个通用对话框，用户可以使用此对话框来指定一个或多个要打开的文件的文件名。
公共类 | PowerModeChangedEventArgs | 为 PowerModeChanged 事件提供数据。
公共类 | Registry | 提供表示 Windows 注册表中的根项的 RegistryKey 对象，并提供访问项/值对的 static 方法。
公共类 | RegistryKey | 表示 Windows 注册表中的项级节点。此类是注册表封装。 表示 Windows 注册表中的项级节点。此类是注册表封装。
公共类 | SaveFileDialog | 表示一个通用对话框，用户可以使用此对话框来指定一个要将文件另存为的文件名。在部分信任情况下执行的应用程序不能使用 SaveFileDialog。 表示一个通用对话框，用户可以使用此对话框来指定一个要将文件另存为的文件名。在部分信任情况下执行的应用程序不能使用 SaveFileDialog。
公共类 | SessionEndedEventArgs | 为 SessionEnded 事件提供数据。
公共类 | SessionEndingEventArgs | 为 SessionEnding 事件提供数据。
公共类 | SessionSwitchEventArgs | 为 SessionSwitch 事件提供数据。
公共类 | SystemEvents | 提供对系统事件通知的访问。此类不能被继承。 提供对系统事件通知的访问。此类不能被继承。
公共类 | TimerElapsedEventArgs | 为 TimerElapsed 事件提供数据。
公共类 | UserPreferenceChangedEventArgs | 为 UserPreferenceChanged 事件提供数据。
公共类 | UserPreferenceChangingEventArgs | 为 UserPreferenceChanging 事件提供数据。
 | 委托 | 说明
公共委托 | PowerModeChangedEventHandler | 表示将处理 PowerModeChanged 事件的方法。
公共委托 | SessionEndedEventHandler | 表示将处理 SessionEnded 事件的方法。
公共委托 | SessionEndingEventHandler | 表示将处理来自操作系统的 SessionEnding 事件的方法。
公共委托 | SessionSwitchEventHandler | 表示将处理 SessionSwitch 事件的方法。
公共委托 | TimerElapsedEventHandler | 表示将处理 TimerElapsed 事件的方法。
公共委托 | UserPreferenceChangedEventHandler | 表示将处理 UserPreferenceChanged 事件的方法。
公共委托 | UserPreferenceChangingEventHandler | 表示将处理 UserPreferenceChanging 事件的方法。
 | 枚举 | 说明
公共枚举 | PowerModes | 为操作系统报告的电源模式事件定义标识符。
公共枚举 | RegistryHive | 表示外部计算机上的顶级节点的可能值。
公共枚举 | RegistryKeyPermissionCheck | 指定在打开注册表项并访问它们的名称/值对时是否执行安全检查。
公共枚举 | RegistryOptions | 指定在创建注册表项时使用的选项。
公共枚举 | RegistryValueKind | 指定在注册表中存储值时所用的数据类型，或标识注册表中某个值的数据类型。
公共枚举 | RegistryValueOptions | 指定从注册表项检索名称/值对时的可选行为。
公共枚举 | RegistryView | 指定要在 64 位操作系统上针对的注册表视图。
公共枚举 | SessionEndReasons | 定义表示当前登录会话的结束方式的标识符。
公共枚举 | SessionSwitchReason | 定义用于表示会话切换事件类型的标识符。
公共枚举 | UserPreferenceCategory | 定义表示用户首选项类别的标识符。


CommonDialog 类

CommonDialog 类
成员

用于显示通用 Win32 对话框的抽象基类。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
<UIPermissionAttribute(SecurityAction.InheritanceDemand, Window := UIPermissionWindow.AllWindows)> _
Public MustInherit Class CommonDialog
[UIPermissionAttribute(SecurityAction.InheritanceDemand, Window = UIPermissionWindow.AllWindows)]
public abstract class CommonDialog
[UIPermissionAttribute(SecurityAction::InheritanceDemand, Window = UIPermissionWindow::AllWindows)]
public ref class CommonDialog abstract
[<AbstractClassAttribute>]
[<UIPermissionAttribute(SecurityAction.InheritanceDemand, Window = UIPermissionWindow.AllWindows)>]
type CommonDialog =  class end

Microsoft.Win32 Microsoft.Win32..::.CommonDialogCommonDialog

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

CommonDialog 成员
Microsoft.Win32 命名空间


CommonDialog 成员

CommonDialog 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CommonDialog 类

用于显示通用 Win32 对话框的抽象基类。

CommonDialog 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

CommonDialog 类
Microsoft.Win32 命名空间


CommonDialog 构造函数

CommonDialog 构造函数
CommonDialog 类

在由派生类的构造函数调用时，提供基类值的初始化。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Protected Sub New
protected CommonDialog()
protected:
CommonDialog()
new : unit -> CommonDialog

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

CommonDialog 类
CommonDialog 成员
Microsoft.Win32 命名空间


CommonDialog 方法

CommonDialog 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CommonDialog 类

CommonDialog 类型公开以下成员。

名称 说明
页首

参考

CommonDialog 类
Microsoft.Win32 命名空间


CommonDialog ..::.CheckPermissionsToShowDialog 方法

CommonDialog
.
.
::
.
CheckPermissionsToShowDialog 方法
CommonDialog 类

确定是否有足够的权限来显示对话框。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Protected Overridable Sub CheckPermissionsToShowDialog
protected virtual void CheckPermissionsToShowDialog()
protected:
virtual void CheckPermissionsToShowDialog()
abstract CheckPermissionsToShowDialog : unit -> unit
override CheckPermissionsToShowDialog : unit -> unit
异常 | 条件
SecurityException | 如果没有足够的权限来显示对话框。
  • UIPermission

    用于执行此方法，而不引发异常。关联枚举：AllWindows 用于执行此方法，而不引发异常。关联枚举：AllWindows

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

CommonDialog 类
CommonDialog 成员
Microsoft.Win32 命名空间


CommonDialog ..::.HookProc 方法

CommonDialog
.
.
::
.
HookProc 方法
CommonDialog 类

定义要重写的通用对话框挂钩过程，以便向通用对话框添加特定功能。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Protected Overridable Function HookProc ( _
    hwnd As IntPtr, _
    msg As Integer, _
    wParam As IntPtr, _
    lParam As IntPtr _
) As IntPtr
protected virtual IntPtr HookProc(
    IntPtr hwnd,
    int msg,
    IntPtr wParam,
    IntPtr lParam
)
protected:
virtual IntPtr HookProc(
    IntPtr hwnd,
    int msg,
    IntPtr wParam,
    IntPtr lParam
)
abstract HookProc :
        hwnd:IntPtr *
        msg:int *
        wParam:IntPtr *
        lParam:IntPtr -> IntPtr
override HookProc :
        hwnd:IntPtr *
        msg:int *
        wParam:IntPtr *
        lParam:IntPtr -> IntPtr

参数

hwnd
类型： System IntPtr
Win32 对话框的窗口句柄。
msg
类型： System Int32
要由 Win32 对话框处理的 Windows 消息。
wParam
类型： System IntPtr
用于对话框操作的参数。
lParam
类型： System IntPtr
用于对话框操作的参数。

返回值

类型： System IntPtr
始终返回 Zero。

HookProc 处理对话框初始化，在此过程中，将对话框窗口相对于屏幕居中显示，并将焦点设置到默认的控件。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

CommonDialog 类
CommonDialog 成员
Microsoft.Win32 命名空间


CommonDialog ..::.Reset 方法

CommonDialog
.
.
::
.
Reset 方法
CommonDialog 类

在派生类中进行重写时，将通用对话框的属性重置为其默认值。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public MustOverride Sub Reset
public abstract void Reset()
public:
virtual void Reset() abstract
abstract Reset : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

CommonDialog 类
CommonDialog 成员
Microsoft.Win32 命名空间


CommonDialog ..::.RunDialog 方法

CommonDialog
.
.
::
.
RunDialog 方法
CommonDialog 类

在派生类中进行重写时，将被调用以显示 Win32 通用对话框的特定类型。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Protected MustOverride Function RunDialog ( _
    hwndOwner As IntPtr _
) As Boolean
protected abstract bool RunDialog(
    IntPtr hwndOwner
)
protected:
virtual bool RunDialog(
    IntPtr hwndOwner
) abstract
abstract RunDialog :
        hwndOwner:IntPtr -> bool

参数

hwndOwner
类型： System IntPtr
对话框所在的窗口的句柄。

返回值

类型： System Boolean
如果用户单击显示的对话框（例如 OpenFileDialog 和 SaveFileDialog）中的“确定”按钮，则返回 true，否则返回 false。 如果用户单击显示的对话框（例如 OpenFileDialog 和 SaveFileDialog）中的“确定”按钮，则返回 true，否则返回 false。

最终显示的对话框将分配给一个所有者窗口，该窗口由 hwndOwner 参数指定。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

CommonDialog 类
CommonDialog 成员
Microsoft.Win32 命名空间


CommonDialog ..::.ShowDialog 方法

CommonDialog
.
.
::
.
ShowDialog 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CommonDialog 类

显示通用对话框。

名称 说明
页首

在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。由于 RunDialog 需要所有者窗口，因此 ShowDialog 会尝试按照以下的优先级顺序分配一个窗口： 在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。由于 RunDialog 需要所有者窗口，因此 ShowDialog 会尝试按照以下的优先级顺序分配一个窗口：

  • 当前应用程序的活动窗口。

  • 当前应用程序的停放窗口。

  • 内部生成的隐藏窗口。

  • UIPermission

    用于执行此方法，而不引发异常。关联枚举：AllWindows 用于执行此方法，而不引发异常。关联枚举：AllWindows

参考

CommonDialog 类
CommonDialog 成员
Microsoft.Win32 命名空间


CommonDialog ..::.ShowDialog 方法

CommonDialog
.
.
::
.
ShowDialog 方法
CommonDialog 类

显示通用对话框。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Overridable Function ShowDialog As Nullable(Of Boolean)
public virtual Nullable<bool> ShowDialog()
public:
virtual Nullable<bool> ShowDialog()
abstract ShowDialog : unit -> Nullable<bool>
override ShowDialog : unit -> Nullable<bool>

返回值

类型： System Nullable
<
(Of
<
(
Boolean
>
)
>
)

如果用户单击显示的对话框的“确定”按钮（例如（例如 OpenFileDialog 和 SaveFileDialog）中的“确定”按钮，则返回 true，否则返回 false。 如果用户单击显示的对话框的“确定”按钮（例如（例如 OpenFileDialog 和 SaveFileDialog）中的“确定”按钮，则返回 true，否则返回 false。

在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。

  • UIPermission

    用于执行此方法，而不引发异常。关联枚举：AllWindows 用于执行此方法，而不引发异常。关联枚举：AllWindows

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

CommonDialog 类
CommonDialog 成员
ShowDialog 重载
Microsoft.Win32 命名空间


CommonDialog ..::.ShowDialog 方法 (Window)

CommonDialog
.
.
::
.
ShowDialog 方法 (Window)
CommonDialog 类

显示通用对话框。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Function ShowDialog ( _
    owner As Window _
) As Nullable(Of Boolean)
public Nullable<bool> ShowDialog(
    Window owner
)
public:
Nullable<bool> ShowDialog(
    Window^ owner
)
member ShowDialog :
        owner:Window -> Nullable<bool>

参数

owner
类型： System.Windows Window
对话框所在的窗口的句柄。

返回值

类型： System Nullable
<
(Of
<
(
Boolean
>
)
>
)

如果用户单击显示的对话框的“确定”按钮（例如（例如 OpenFileDialog 和 SaveFileDialog）中的“确定”按钮，则返回 true，否则返回 false。 如果用户单击显示的对话框的“确定”按钮（例如（例如 OpenFileDialog 和 SaveFileDialog）中的“确定”按钮，则返回 true，否则返回 false。

在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。此外，最终显示的对话框将分配给一个所有者窗口，该窗口由 owner 参数指定。 在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。此外，最终显示的对话框将分配给一个所有者窗口，该窗口由 owner 参数指定。

  • UIPermission

    用于执行此方法，而不引发异常。关联枚举：AllWindows 用于执行此方法，而不引发异常。关联枚举：AllWindows

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

CommonDialog 类
CommonDialog 成员
ShowDialog 重载
Microsoft.Win32 命名空间
Owner


CommonDialog 属性

CommonDialog 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CommonDialog 类

CommonDialog 类型公开以下成员。

名称 说明
页首

参考

CommonDialog 类
Microsoft.Win32 命名空间


CommonDialog ..::.Tag 属性

CommonDialog
.
.
::
.
Tag 属性
CommonDialog 类

获取或设置与对话框关联的对象。这将提供向对话框附加任意对象的能力。 获取或设置与对话框关联的对象。这将提供向对话框附加任意对象的能力。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property Tag As Object
    Get
    Set
public Object Tag { get; set; }
public:
property Object^ Tag {
    Object^ get ();
    void set (Object^ value);
}
member Tag : Object with get, set

<object>
  <object.Tag>
    <Object .../>
  </object.Tag>
</object>

属性值

类型： System Object
附加到对话框或与对话框关联的 Object。

请参见

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

CommonDialog 类
CommonDialog 成员
Microsoft.Win32 命名空间


FileDialog 类

FileDialog 类
成员

一个抽象基类，用于封装文件对话框（包括 OpenFileDialog 和 SaveFileDialog）的通用功能。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public MustInherit Class FileDialog _
    Inherits CommonDialog
public abstract class FileDialog : CommonDialog
public ref class FileDialog abstract : public CommonDialog
[<AbstractClassAttribute>]
type FileDialog =
    class
        inherit CommonDialog
    end

Microsoft.Win32 Microsoft.Win32..::.FileDialogFileDialog

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 成员
Microsoft.Win32 命名空间


FileDialog 成员

FileDialog 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialog 类

一个抽象基类，用于封装文件对话框（包括 OpenFileDialog 和 SaveFileDialog）的通用功能。

FileDialog 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

FileDialog 类
Microsoft.Win32 命名空间


FileDialog 构造函数

FileDialog 构造函数
FileDialog 类

初始化 FileDialog 类的一个新实例。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Protected Sub New
protected FileDialog()
protected:
FileDialog()
new : unit -> FileDialog

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog 方法

FileDialog 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialog 类

FileDialog 类型公开以下成员。

名称 说明
页首

参考

FileDialog 类
Microsoft.Win32 命名空间


FileDialog ..::.HookProc 方法

FileDialog
.
.
::
.
HookProc 方法
FileDialog 类

定义要重写的通用文件对话框挂钩过程，以便向文件对话框添加通用功能。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Protected Overrides Function HookProc ( _
    hwnd As IntPtr, _
    msg As Integer, _
    wParam As IntPtr, _
    lParam As IntPtr _
) As IntPtr
protected override IntPtr HookProc(
    IntPtr hwnd,
    int msg,
    IntPtr wParam,
    IntPtr lParam
)
protected:
virtual IntPtr HookProc(
    IntPtr hwnd,
    int msg,
    IntPtr wParam,
    IntPtr lParam
) override
abstract HookProc :
        hwnd:IntPtr *
        msg:int *
        wParam:IntPtr *
        lParam:IntPtr -> IntPtr
override HookProc :
        hwnd:IntPtr *
        msg:int *
        wParam:IntPtr *
        lParam:IntPtr -> IntPtr

参数

hwnd
类型： System IntPtr
Win32 对话框的窗口句柄。
msg
类型： System Int32
要由 Win32 对话框进行处理的消息。
wParam
类型： System IntPtr
用于对话框操作的参数。
lParam
类型： System IntPtr
用于对话框操作的参数。

返回值

类型： System IntPtr
返回 Zero 以指示成功；否则返回非零值以指示失败。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.OnFileOk 方法

FileDialog
.
.
::
.
OnFileOk 方法
FileDialog 类

引发 FileOk 事件。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Protected Sub OnFileOk ( _
    e As CancelEventArgs _
)
protected void OnFileOk(
    CancelEventArgs e
)
protected:
void OnFileOk(
    CancelEventArgs^ e
)
member OnFileOk :
        e:CancelEventArgs -> unit

参数

e
类型： System.ComponentModel CancelEventArgs
一个包含事件数据的 CancelEventArgs。

OnFileOk 引发 FileOk 事件。

从 FileDialog 派生的类型可能会重写 OnFileOk。如果需要引发 FileOk，则重写的方法必须在基类上调用 OnFileOk。 从 FileDialog 派生的类型可能会重写 OnFileOk。如果需要引发 FileOk，则重写的方法必须在基类上调用 OnFileOk。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.Reset 方法

FileDialog
.
.
::
.
Reset 方法
FileDialog 类

将文件对话框的所有属性设置回其初始值。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Overrides Sub Reset
public override void Reset()
public:
virtual void Reset() override
abstract Reset : unit -> unit
override Reset : unit -> unit

对实现者的说明

从 FileDialog 派生的类应调用 Reset 以便为 FileDialog 提供机会来重置自身。

  • FileIOPermission

    用于重置对话框用户界面。关联的枚举：Unrestricted 用于重置对话框用户界面。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.RunDialog 方法

FileDialog
.
.
::
.
RunDialog 方法
FileDialog 类

调用 RunDialog 以在派生类中显示文件对话框，如 OpenFileDialog 和 SaveFileDialog。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Protected Overrides Function RunDialog ( _
    hwndOwner As IntPtr _
) As Boolean
protected override bool RunDialog(
    IntPtr hwndOwner
)
protected:
virtual bool RunDialog(
    IntPtr hwndOwner
) override
abstract RunDialog :
        hwndOwner:IntPtr -> bool
override RunDialog :
        hwndOwner:IntPtr -> bool

参数

hwndOwner
类型： System IntPtr
对话框所在的窗口的句柄。

返回值

类型： System Boolean
如果用户单击显示的对话框（例如 OpenFileDialog 和 SaveFileDialog）的“确定”按钮，则为 true；否则为 false。

最终显示的对话框将分配给一个所有者窗口，该窗口由 hwndOwner 参数指定。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.ShowDialog 方法

FileDialog
.
.
::
.
ShowDialog 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialog 类

显示通用对话框。

名称 说明
页首

在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。由于 RunDialog 需要所有者窗口，因此 ShowDialog 会尝试按照以下的优先级顺序分配一个窗口： 在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。由于 RunDialog 需要所有者窗口，因此 ShowDialog 会尝试按照以下的优先级顺序分配一个窗口：

  • 当前应用程序的活动窗口。

  • 当前应用程序的停放窗口。

  • 内部生成的隐藏窗口。

  • UIPermission

    用于执行此方法，而不引发异常。关联枚举：AllWindows 用于执行此方法，而不引发异常。关联枚举：AllWindows

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.ToString 方法

FileDialog
.
.
::
.
ToString 方法
FileDialog 类

返回表示文件对话框的字符串。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
FileDialog 的 String 表示形式，其中包含从 OpenFileDialog 或 SaveFileDialog 选择的任何文件的完整路径名。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog 属性

FileDialog 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialog 类

FileDialog 类型公开以下成员。

名称 说明
页首

参考

FileDialog 类
Microsoft.Win32 命名空间


FileDialog ..::.AddExtension 属性

FileDialog
.
.
::
.
AddExtension 属性
FileDialog 类

获取或设置一个值，该值指示如果用户省略扩展名，文件对话框是否自动在文件名中添加扩展名。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property AddExtension As Boolean
    Get
    Set
public bool AddExtension { get; set; }
public:
property bool AddExtension {
    bool get ();
    void set (bool value);
}
member AddExtension : bool with get, set

<object AddExtension="bool" .../>

属性值

类型： System Boolean
如果添加扩展名，则为 true；否则为 false。默认值为 true。 如果添加扩展名，则为 true；否则为 false。默认值为 true。
  • FileIOPermission

    用于设置扩展名行为。关联的枚举：Unrestricted 用于设置扩展名行为。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.CheckFileExists 属性

FileDialog
.
.
::
.
CheckFileExists 属性
FileDialog 类

获取或设置一个值，该值指示如果用户指定不存在的文件名，文件对话框是否显示警告。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Overridable Property CheckFileExists As Boolean
    Get
    Set
public virtual bool CheckFileExists { get; set; }
public:
virtual property bool CheckFileExists {
    bool get ();
    void set (bool value);
}
abstract CheckFileExists : bool with get, set
override CheckFileExists : bool with get, set
<object CheckFileExists="bool" .../>

属性值

类型： System Boolean
如果显示警告，则为 true；否则为 false。此基类中的默认设置为 false。 如果显示警告，则为 true；否则为 false。此基类中的默认设置为 false。

OpenFileDialog 类在其构造函数中，将此属性设置为 true。

  • FileIOPermission

    用于重置对话框用户界面。关联的枚举：Unrestricted 用于重置对话框用户界面。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.CheckPathExists 属性

FileDialog
.
.
::
.
CheckPathExists 属性
FileDialog 类

获取或设置一个值，该值指定如果用户键入无效的路径和文件名，是否显示警告。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property CheckPathExists As Boolean
    Get
    Set
public bool CheckPathExists { get; set; }
public:
property bool CheckPathExists {
    bool get ();
    void set (bool value);
}
member CheckPathExists : bool with get, set

<object CheckPathExists="bool" .../>

属性值

类型： System Boolean
如果显示警告，则为 true；否则为 false。默认值为 true。 如果显示警告，则为 true；否则为 false。默认值为 true。
  • FileIOPermission

    用于设置此属性。关联的枚举：Unrestricted 用于设置此属性。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.CustomPlaces 属性

FileDialog
.
.
::
.
CustomPlaces 属性
FileDialog 类

获取或设置文件对话框的自定义空间的列表。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Property CustomPlaces As IList(Of FileDialogCustomPlace)
    Get
    Set
public IList<FileDialogCustomPlace> CustomPlaces { get; set; }
public:
property IList<FileDialogCustomPlace^>^ CustomPlaces {
    IList<FileDialogCustomPlace^>^ get ();
    void set (IList<FileDialogCustomPlace^>^ value);
}
member CustomPlaces : IList<FileDialogCustomPlace> with get, set

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
FileDialogCustomPlace
>
)
>
)

自定义空间的列表。

在 Windows Vista 中启动，打开和保存文件对话框左侧有“收藏夹链接”面板，允许用户快速定位到不同位置。这些链接称为自定义位置。此属性允许您修改您的应用程序使用文件对话框时显示的列表。 在 Windows Vista 中启动，打开和保存文件对话框左侧有“收藏夹链接”面板，允许用户快速定位到不同位置。这些链接称为自定义位置。此属性允许您修改您的应用程序使用文件对话框时显示的列表。 在 Windows Vista 中启动，打开和保存文件对话框左侧有“收藏夹链接”面板，允许用户快速定位到不同位置。这些链接称为自定义位置。此属性允许您修改您的应用程序使用文件对话框时显示的列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.DefaultExt 属性

FileDialog
.
.
::
.
DefaultExt 属性
FileDialog 类

获取或设置一个值，该值指定用来筛选显示的文件列表的默认扩展名字符串。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property DefaultExt As String
    Get
    Set
public string DefaultExt { get; set; }
public:
property String^ DefaultExt {
    String^ get ();
    void set (String^ value);
}
member DefaultExt : string with get, set

<object DefaultExt="string" .../>

属性值

类型： System String
默认扩展名字符串。默认值为 Empty。 默认扩展名字符串。默认值为 Empty。

默认情况下，AddExtension 属性会尝试根据 Filter 属性来确定用于筛选显示的文件列表的扩展名。如果无法根据 Filter 属性确定扩展名，则改为使用 DefaultExt。 默认情况下，AddExtension 属性会尝试根据 Filter 属性来确定用于筛选显示的文件列表的扩展名。如果无法根据 Filter 属性确定扩展名，则改为使用 DefaultExt。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.DereferenceLinks 属性

FileDialog
.
.
::
.
DereferenceLinks 属性
FileDialog 类

获取或设置一个值，该值指示文件对话框是返回快捷方式引用的文件的位置，还是返回快捷方式文件 (.lnk) 的位置。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property DereferenceLinks As Boolean
    Get
    Set
public bool DereferenceLinks { get; set; }
public:
property bool DereferenceLinks {
    bool get ();
    void set (bool value);
}
member DereferenceLinks : bool with get, set

<object DereferenceLinks="bool" .../>

属性值

类型： System Boolean
true 返回引用的位置；false 返回快捷方式位置。默认值为 false。 true 返回引用的位置；false 返回快捷方式位置。默认值为 false。
  • FileIOPermission

    用于设置取消引用行为。关联的枚举：Unrestricted 用于设置取消引用行为。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.FileName 属性

FileDialog
.
.
::
.
FileName 属性
FileDialog 类

获取或设置一个字符串，其中包含在文件对话框中选定的文件的完整路径。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property FileName As String
    Get
    Set
public string FileName { get; set; }
public:
property String^ FileName {
    String^ get ();
    void set (String^ value);
}
member FileName : string with get, set

<object FileName="string" .../>

属性值

类型： System String
一个 String，表示文件对话框中选定的文件的完整路径。默认值为 Empty。 一个 String，表示文件对话框中选定的文件的完整路径。默认值为 Empty。

如果选定了多个文件名（FileNames 的长度大于 1），则 FileName 包含第一个选定的文件名。如果未选定任何文件名，则此属性包含 Empty 而不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 如果选定了多个文件名（FileNames 的长度大于 1），则 FileName 包含第一个选定的文件名。如果未选定任何文件名，则此属性包含 Empty 而不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

  • FileIOPermission

    用于获取或设置对话框中的路径。关联的枚举：Unrestricted 用于获取或设置对话框中的路径。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间
SafeFileName


FileDialog ..::.FileNames 属性

FileDialog
.
.
::
.
FileNames 属性
FileDialog 类

获取一个数组，其中包含与每个选定文件一一对应的文件名。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public ReadOnly Property FileNames As String()
    Get
public string[] FileNames { get; }
public:
property array<String^>^ FileNames {
    array<String^>^ get ();
}
member FileNames : string[]

属性值

类型：
array<
System String
>
[]
()
[]

一个 String 数组，其中包含与每个选定文件一一对应的文件名。默认值是一个由值为 Empty 的单个项组成的数组。 一个 String 数组，其中包含与每个选定文件一一对应的文件名。默认值是一个由值为 Empty 的单个项组成的数组。
  • FileIOPermission

    用于从对话框中获取路径集合。关联的枚举：Unrestricted 用于从对话框中获取路径集合。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间
SafeFileNames


FileDialog ..::.Filter 属性

FileDialog
.
.
::
.
Filter 属性
FileDialog 类

获取或设置筛选器字符串，该字符串确定在 OpenFileDialog 或 SaveFileDialog 中显示的文件类型。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property Filter As String
    Get
    Set
public string Filter { get; set; }
public:
property String^ Filter {
    String^ get ();
    void set (String^ value);
}
member Filter : string with get, set

<object Filter="string" .../>

属性值

类型： System String
一个包含筛选器的 String。默认值为 Empty，这意味着，不应用任何筛选器并显示所有文件类型。 一个包含筛选器的 String。默认值为 Empty，这意味着，不应用任何筛选器并显示所有文件类型。
异常 | 条件
ArgumentException | 筛选器字符串无效。

如果 Filter 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 Empty，则显示所有文件，并且总是显示文件夹。

通过设置 Filter 属性，可以指定要显示的文件类型的子集。每个文件类型可以表示一个特定的文件类型，如下所示： 通过设置 Filter 属性，可以指定要显示的文件类型的子集。每个文件类型可以表示一个特定的文件类型，如下所示：

  • Word 文档 (*.doc)

  • Excel 工作表 (*.xls)

  • PowerPoint 演示文稿 (*.ppt)

此外，一个文件类型可以表示一组相关文件类型，如下所示：

  • Office 文件（*.doc、*.xls、*.ppt）

  • 所有文件 (*.*)

若要指定显示的文件类型的子集，请为 Filter 属性设置一个字符串值（即筛选器字符串），该字符串值指定一个或多个作为筛选依据的文件类型。下面的示例演示了应采用的筛选器字符串格式： 若要指定显示的文件类型的子集，请为 Filter 属性设置一个字符串值（即筛选器字符串），该字符串值指定一个或多个作为筛选依据的文件类型。下面的示例演示了应采用的筛选器字符串格式：

FileType1[[|FileType2]...[|FileTypeN]]

可使用下列格式来说明每个文件类型：

Label|Extension1[[;Extension2]...[;ExtensionN]]

标签 (Lable) 部分是一个可读的字符串值，用于说明文件类型，如下所示：

  • “Word Documents”

  • “Excel Worksheets”

  • “PowerPoint Presentations”

  • “Office Files”

  • “All Files”

每个文件类型必须通过至少一个扩展名 (Extension) 来说明。如果使用多个扩展名，则每个扩展名必须以分号 (;) 分隔。例如： 每个文件类型必须通过至少一个扩展名 (Extension) 来说明。如果使用多个扩展名，则每个扩展名必须以分号 (;) 分隔。例如： 每个文件类型必须通过至少一个扩展名 (Extension) 来说明。如果使用多个扩展名，则每个扩展名必须以分号 (;) 分隔。例如：

  • “*.doc”

  • “*.xls;”

  • “*.ppt”

  • “*.doc;*.xls;*.ppt”

  • “*.*”

以下是有效的 Filter 字符串值的完整示例：

  • Word Documents|*.doc

  • Excel Worksheets|*.xls

  • PowerPoint Presentations|*.ppt

  • Office Files|*.doc;*.xls;*.ppt

  • All Files|*.*

  • Word Documents|*.doc|Excel Worksheets|*.xls|PowerPoint Presentations|*.ppt|Office Files|*.doc;*.xls;*.ppt|All Files|*.*

包括在筛选器中的每个文件类型作为一个单独项添加到 OpenFileDialog 或 SaveFileDialog 中的“文件类型:”下拉列表中，如下图中所示。

用户可以从此列表中选择要作为筛选依据的文件类型。默认情况下，显示 OpenFileDialog 或 SaveFileDialog 时将选定列表中的第一项（例如，第一个文件类型）。若指定要选择另一个文件类型，请在（通过调用 ShowDialog）显示 OpenFileDialog 或 SaveFileDialog 之前设置 FilterIndex 属性。 用户可以从此列表中选择要作为筛选依据的文件类型。默认情况下，显示 OpenFileDialog 或 SaveFileDialog 时将选定列表中的第一项（例如，第一个文件类型）。若指定要选择另一个文件类型，请在（通过调用 ShowDialog）显示 OpenFileDialog 或 SaveFileDialog 之前设置 FilterIndex 属性。 用户可以从此列表中选择要作为筛选依据的文件类型。默认情况下，显示 OpenFileDialog 或 SaveFileDialog 时将选定列表中的第一项（例如，第一个文件类型）。若指定要选择另一个文件类型，请在（通过调用 ShowDialog）显示 OpenFileDialog 或 SaveFileDialog 之前设置 FilterIndex 属性。

下面的示例演示几种可通过使用 Filter 属性设置的筛选器字符串类型。

Imports Microsoft.Win32

...

Dim dlg As New OpenFileDialog()

' Show all files
dlg.Filter = String.Empty

dlg.ShowDialog()

using Microsoft.Win32;

...

OpenFileDialog dlg = new OpenFileDialog();

// Show all files
dlg.Filter = string.Empty;

dlg.ShowDialog();

Imports Microsoft.Win32

...

Dim dlg As New OpenFileDialog()

' Show all files
dlg.Filter = Nothing

dlg.ShowDialog()

using Microsoft.Win32;

...

OpenFileDialog dlg = new OpenFileDialog();

// Show all files
dlg.Filter = null;

dlg.ShowDialog();

Imports Microsoft.Win32

...

Dim dlg As New OpenFileDialog()

' Filter by Word Documents
dlg.Filter = "Word Documents|*.doc"

dlg.ShowDialog()

using Microsoft.Win32;

...

OpenFileDialog dlg = new OpenFileDialog();

// Filter by Word Documents
dlg.Filter = "Word Documents|*.doc";

dlg.ShowDialog();

Imports Microsoft.Win32

...

Dim dlg As New OpenFileDialog()

' Filter by Excel Worksheets
dlg.Filter = "Excel Worksheets|*.xls"

dlg.ShowDialog()

using Microsoft.Win32;

...

OpenFileDialog dlg = new OpenFileDialog();

// Filter by Excel Worksheets
dlg.Filter = "Excel Worksheets|*.xls";

dlg.ShowDialog();

Imports Microsoft.Win32

...

Dim dlg As New OpenFileDialog()

' Filter by PowerPoint Presentations
dlg.Filter = "PowerPoint Presentations|*.ppt"

dlg.ShowDialog()

using Microsoft.Win32;

...

OpenFileDialog dlg = new OpenFileDialog();

// Filter by PowerPoint Presentations
dlg.Filter = "PowerPoint Presentations|*.ppt";

dlg.ShowDialog();

Imports Microsoft.Win32

...

Dim dlg As New OpenFileDialog()

' Filter by Office Files
dlg.Filter = "Office Files|*.doc;*.xls;*.ppt"

dlg.ShowDialog()

using Microsoft.Win32;

...

OpenFileDialog dlg = new OpenFileDialog();

// Filter by Office Files
dlg.Filter = "Office Files|*.doc;*.xls;*.ppt";

dlg.ShowDialog();

Imports Microsoft.Win32

...

Dim dlg As New OpenFileDialog()

' Filter by All Files
dlg.Filter = "All Files|*.*"

dlg.ShowDialog()

using Microsoft.Win32;

...

OpenFileDialog dlg = new OpenFileDialog();

// Filter by All Files
dlg.Filter = "All Files|*.*";

dlg.ShowDialog();

Imports Microsoft.Win32

...

Dim dlg As New OpenFileDialog()

' Filter by Word Documents OR Excel Worksheets OR PowerPoint Presentations
'           OR Office Files
'           OR All Files
dlg.Filter = "Word Documents|*.doc|Excel Worksheets|*.xls|PowerPoint Presentations|*.ppt" & "|Office Files|*.doc;*.xls;*.ppt" & "|All Files|*.*"

dlg.ShowDialog()

using Microsoft.Win32;

...

OpenFileDialog dlg = new OpenFileDialog();

// Filter by Word Documents OR Excel Worksheets OR PowerPoint Presentations
//           OR Office Files
//           OR All Files
dlg.Filter = "Word Documents|*.doc|Excel Worksheets|*.xls|PowerPoint Presentations|*.ppt" +
             "|Office Files|*.doc;*.xls;*.ppt" +
             "|All Files|*.*";

dlg.ShowDialog();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间
FileName
FilterIndex


FileDialog ..::.FilterIndex 属性

FileDialog
.
.
::
.
FilterIndex 属性
FileDialog 类

获取或设置文件对话框中当前选定的筛选器的索引。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property FilterIndex As Integer
    Get
    Set
public int FilterIndex { get; set; }
public:
property int FilterIndex {
    int get ();
    void set (int value);
}
member FilterIndex : int with get, set

<object FilterIndex="int" .../>

属性值

类型： System Int32
一个 Int32，表示选定的筛选器的索引。默认值为 1。 一个 Int32，表示选定的筛选器的索引。默认值为 1。

由于与基础 Win32 API 的兼容性要求，此索引是从 1 开始的，而不是从 0 开始的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.InitialDirectory 属性

FileDialog
.
.
::
.
InitialDirectory 属性
FileDialog 类

获取或设置文件对话框显示的初始目录。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property InitialDirectory As String
    Get
    Set
public string InitialDirectory { get; set; }
public:
property String^ InitialDirectory {
    String^ get ();
    void set (String^ value);
}
member InitialDirectory : string with get, set

<object InitialDirectory="string" .../>

属性值

类型： System String
一个包含初始目录的 String。默认值为 Empty。 一个包含初始目录的 String。默认值为 Empty。

如果没有设置初始目录，则此属性将包含 Empty，而非 null 字符串。

  • FileIOPermission

    用于设置初始目录值。关联的枚举：Unrestricted 用于设置初始目录值。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.Options 属性

FileDialog
.
.
::
.
Options 属性
FileDialog 类

获取 Win32 通用文件对话框标志，文件对话框使用这些标志来进行初始化。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Protected ReadOnly Property Options As Integer
    Get
protected int Options { get; }
protected:
property int Options {
    int get ();
}
member Options : int

属性值

类型： System Int32
一个包含 Win32 通用文件对话框标志的 Int32，文件对话框使用这些标志来进行初始化。

此值用于显示具有当前属性值集的文件对话框。实际选项将在特定对话框上作为属性公开，但在此级别未作为公共标志值记录，因而此属性主要在内部使用，而且是在实现派生类 OpenFileDialog 和 SaveFileDialog 时使用。 此值用于显示具有当前属性值集的文件对话框。实际选项将在特定对话框上作为属性公开，但在此级别未作为公共标志值记录，因而此属性主要在内部使用，而且是在实现派生类 OpenFileDialog 和 SaveFileDialog 时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间

其他资源

OPENFILENAME


FileDialog ..::.RestoreDirectory 属性

FileDialog
.
.
::
.
RestoreDirectory 属性
FileDialog 类

不实现此属性。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property RestoreDirectory As Boolean
    Get
    Set
public bool RestoreDirectory { get; set; }
public:
property bool RestoreDirectory {
    bool get ();
    void set (bool value);
}
member RestoreDirectory : bool with get, set

<object RestoreDirectory="bool" .../>

属性值

类型： System Boolean
未实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.SafeFileName 属性

FileDialog
.
.
::
.
SafeFileName 属性
FileDialog 类

获取一个字符串，其中仅包含选定文件的文件名。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public ReadOnly Property SafeFileName As String
    Get
public string SafeFileName { get; }
public:
property String^ SafeFileName {
    String^ get ();
}
member SafeFileName : string

属性值

类型： System String
一个 String，其中仅包含选定文件的文件名。默认值为 Empty，当未选定文件或选定目录时也为此值。 一个 String，其中仅包含选定文件的文件名。默认值为 Empty，当未选定文件或选定目录时也为此值。

此值是移除了所有路径信息的 FileName。移除路径可使该值适合在部分信任的应用程序中使用，因为该值可以阻止应用程序发现有关本地文件系统的信息。 此值是移除了所有路径信息的 FileName。移除路径可使该值适合在部分信任的应用程序中使用，因为该值可以阻止应用程序发现有关本地文件系统的信息。

如果选定了多个文件名（SafeFileNames 的长度大于 1），则此属性仅包含第一个选定的文件名。

请参见 Safe File Upload from an XBAP Sample。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.SafeFileNames 属性

FileDialog
.
.
::
.
SafeFileNames 属性
FileDialog 类

获取一个数组，其中包含与每个选定文件一一对应的安全文件名。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public ReadOnly Property SafeFileNames As String()
    Get
public string[] SafeFileNames { get; }
public:
property array<String^>^ SafeFileNames {
    array<String^>^ get ();
}
member SafeFileNames : string[]

属性值

类型：
array<
System String
>
[]
()
[]

一个 String 数组，其中包含与每个选定文件一一个对应的安全文件名。默认值是一个由值为 Empty 的单个项组成的数组。 一个 String 数组，其中包含与每个选定文件一一个对应的安全文件名。默认值是一个由值为 Empty 的单个项组成的数组。

请参见 SafeFileName。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.Title 属性

FileDialog
.
.
::
.
Title 属性
FileDialog 类

获取或设置在文件对话框的标题栏中显示的文本。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property Title As String
    Get
    Set
public string Title { get; set; }
public:
property String^ Title {
    String^ get ();
    void set (String^ value);
}
member Title : string with get, set

<object Title="string" .../>

属性值

类型： System String
一个 String，表示在文件对话框的标题栏中显示的文本。默认值为 Empty。 一个 String，表示在文件对话框的标题栏中显示的文本。默认值为 Empty。

如果 Title 为 null 或 Empty，则使用默认的本地化值，例如，“另存为”或“打开”。

  • FileIOPermission

    用于设置对话框标题。关联的枚举：Unrestricted 用于设置对话框标题。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog ..::.ValidateNames 属性

FileDialog
.
.
::
.
ValidateNames 属性
FileDialog 类

获取或设置一个值，该值指示对话框是否只接受有效的 Win32 文件名。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property ValidateNames As Boolean
    Get
    Set
public bool ValidateNames { get; set; }
public:
property bool ValidateNames {
    bool get ();
    void set (bool value);
}
member ValidateNames : bool with get, set

<object ValidateNames="bool" .../>

属性值

类型： System Boolean
如果在提供无效文件名时将显示警告，则为 true；否则为 false。默认值为 false。 如果在提供无效文件名时将显示警告，则为 true；否则为 false。默认值为 false。
  • FileIOPermission

    用于设置验证行为。关联枚举：Unrestricted 用于设置验证行为。关联枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialog 事件

FileDialog 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialog 类

FileDialog 类型公开以下成员。

名称 说明
页首

参考

FileDialog 类
Microsoft.Win32 命名空间


FileDialog ..::.FileOk 事件

FileDialog
.
.
::
.
FileOk 事件
FileDialog 类

当用户通过单击 OpenFileDialog 的“打开”按钮或 SaveFileDialog 的“保存”按钮选择某个文件名时发生。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Event FileOk As CancelEventHandler
public event CancelEventHandler FileOk
public:
 event CancelEventHandler^ FileOk {
    void add (CancelEventHandler^ value);
    void remove (CancelEventHandler^ value);
}
member FileOk : IEvent<CancelEventHandler,
    CancelEventArgs>

<object FileOk="CancelEventHandler" .../>

在用户选择某个文件名之后但在关闭对话框之前引发 FileOk，这样可允许您处理选定内容。如果需要，通过将 CancelEventArgs 参数的 Cancel 属性设置为 true，可以取消用户的选定内容。 在用户选择某个文件名之后但在关闭对话框之前引发 FileOk，这样可允许您处理选定内容。如果需要，通过将 CancelEventArgs 参数的 Cancel 属性设置为 true，可以取消用户的选定内容。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialog 类
FileDialog 成员
Microsoft.Win32 命名空间


FileDialogCustomPlace 类

FileDialogCustomPlace 类
成员

表示 FileDialog 自定义空间列表中的项。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public NotInheritable Class FileDialogCustomPlace
public sealed class FileDialogCustomPlace
public ref class FileDialogCustomPlace sealed
[<SealedAttribute>]
type FileDialogCustomPlace =  class end

在 Windows Vista 中启动，打开和保存文件对话框左侧有“收藏夹链接”面板，允许用户快速定位到不同位置。这些链接称为自定义位置。此类允许您修改您的应用程序使用文件对话框时显示的列表。 有关自定义空间的已知文件夹的列表，请参见 FileDialogCustomPlaces。 在 Windows Vista 中启动，打开和保存文件对话框左侧有“收藏夹链接”面板，允许用户快速定位到不同位置。这些链接称为自定义位置。此类允许您修改您的应用程序使用文件对话框时显示的列表。 有关自定义空间的已知文件夹的列表，请参见 FileDialogCustomPlaces。 在 Windows Vista 中启动，打开和保存文件对话框左侧有“收藏夹链接”面板，允许用户快速定位到不同位置。这些链接称为自定义位置。此类允许您修改您的应用程序使用文件对话框时显示的列表。 有关自定义空间的已知文件夹的列表，请参见 FileDialogCustomPlaces。

Microsoft.Win32 Microsoft.Win32..::.FileDialogCustomPlaceFileDialogCustomPlace
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlace 成员
Microsoft.Win32 命名空间
CustomPlaces


FileDialogCustomPlace 成员

FileDialogCustomPlace 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialogCustomPlace 类

表示 FileDialog 自定义空间列表中的项。

FileDialogCustomPlace 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

FileDialogCustomPlace 类
Microsoft.Win32 命名空间


FileDialogCustomPlace 构造函数

FileDialogCustomPlace 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialogCustomPlace 类

初始化 FileDialogCustomPlace 类的新实例。

名称 说明
页首

参考

FileDialogCustomPlace 类
FileDialogCustomPlace 成员
Microsoft.Win32 命名空间


FileDialogCustomPlace 构造函数 (Guid)

FileDialogCustomPlace 构造函数 (Guid)
FileDialogCustomPlace 类

使用指定的已知文件夹 GUID 初始化 FileDialogCustomPlace 类的新实例。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Sub New ( _
    knownFolder As Guid _
)
public FileDialogCustomPlace(
    Guid knownFolder
)
public:
FileDialogCustomPlace(
    Guid knownFolder
)
new :
        knownFolder:Guid -> FileDialogCustomPlace

参数

knownFolder
类型： System Guid
已知文件夹的 GUID。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlace 类
FileDialogCustomPlace 成员
FileDialogCustomPlace 重载
Microsoft.Win32 命名空间


FileDialogCustomPlace 构造函数 (String)

FileDialogCustomPlace 构造函数 (String)
FileDialogCustomPlace 类

使用指定的路径初始化 FileDialogCustomPlace 类的新实例。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Sub New ( _
    path As String _
)
public FileDialogCustomPlace(
    string path
)
public:
FileDialogCustomPlace(
    String^ path
)
new :
        path:string -> FileDialogCustomPlace

参数

path
类型： System String
文件夹的路径。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlace 类
FileDialogCustomPlace 成员
FileDialogCustomPlace 重载
Microsoft.Win32 命名空间


FileDialogCustomPlace 方法

FileDialogCustomPlace 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialogCustomPlace 类

FileDialogCustomPlace 类型公开以下成员。

名称 说明
页首

参考

FileDialogCustomPlace 类
Microsoft.Win32 命名空间


FileDialogCustomPlace 属性

FileDialogCustomPlace 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialogCustomPlace 类

FileDialogCustomPlace 类型公开以下成员。

名称 说明
页首

参考

FileDialogCustomPlace 类
Microsoft.Win32 命名空间


FileDialogCustomPlace ..::.KnownFolder 属性

FileDialogCustomPlace
.
.
::
.
KnownFolder 属性
FileDialogCustomPlace 类

获取自定义空间的已知文件夹的 GUID。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Property KnownFolder As Guid
    Get
    Private Set
public Guid KnownFolder { get; private set; }
public:
property Guid KnownFolder {
    Guid get ();
    private: void set (Guid value);
}
member KnownFolder : Guid with get, private set

属性值

类型： System Guid
已知文件夹的 GUID。

GUID 与已知文件夹相关联。有关已知文件夹的列表，请参见 FileDialogCustomPlaces。 GUID 与已知文件夹相关联。有关已知文件夹的列表，请参见 FileDialogCustomPlaces。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlace 类
FileDialogCustomPlace 成员
Microsoft.Win32 命名空间


FileDialogCustomPlace ..::.Path 属性

FileDialogCustomPlace
.
.
::
.
Path 属性
FileDialogCustomPlace 类

获取自定义空间的文件路径。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Property Path As String
    Get
    Private Set
public string Path { get; private set; }
public:
property String^ Path {
    String^ get ();
    private: void set (String^ value);
}
member Path : string with get, private set

属性值

类型： System String
自定义空间的路径。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlace 类
FileDialogCustomPlace 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces 类

FileDialogCustomPlaces 类
成员

为文件对话框中的自定义空间定义已知文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public NotInheritable Class FileDialogCustomPlaces
public static class FileDialogCustomPlaces
public ref class FileDialogCustomPlaces abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type FileDialogCustomPlaces =  class end

在 Windows Vista 中开始提供自定义空间。

Microsoft.Win32 Microsoft.Win32..::.FileDialogCustomPlacesFileDialogCustomPlaces
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间
CustomPlaces
FileDialogCustomPlace


FileDialogCustomPlaces 成员

FileDialogCustomPlaces 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialogCustomPlaces 类

为文件对话框中的自定义空间定义已知文件夹。

FileDialogCustomPlaces 类型公开以下成员。

名称 说明
页首

参考

FileDialogCustomPlaces 类
Microsoft.Win32 命名空间


FileDialogCustomPlaces 属性

FileDialogCustomPlaces 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileDialogCustomPlaces 类

FileDialogCustomPlaces 类型公开以下成员。

名称 说明
页首

参考

FileDialogCustomPlaces 类
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Contacts 属性

FileDialogCustomPlaces
.
.
::
.
Contacts 属性
FileDialogCustomPlaces 类

获取当前用户的“联系人”文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Contacts As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Contacts { get; }
public:
static property FileDialogCustomPlace^ Contacts {
    FileDialogCustomPlace^ get ();
}
static member Contacts : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
当前用户的“联系人”文件夹。

此文件夹的 GUID 是 56784854-C6CB-462b-8169-88E350ACB882。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Cookies 属性

FileDialogCustomPlaces
.
.
::
.
Cookies 属性
FileDialogCustomPlaces 类

获取当前用户的 Internet Cookie 文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Cookies As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Cookies { get; }
public:
static property FileDialogCustomPlace^ Cookies {
    FileDialogCustomPlace^ get ();
}
static member Cookies : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
当前用户的 Internet Cookie 文件夹。

此文件夹的 GUID 是 2B0F765D-C0E9-4171-908E-08A611B84FF6。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Desktop 属性

FileDialogCustomPlaces
.
.
::
.
Desktop 属性
FileDialogCustomPlaces 类

获取当前用户用于存储桌面上的文件的文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Desktop As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Desktop { get; }
public:
static property FileDialogCustomPlace^ Desktop {
    FileDialogCustomPlace^ get ();
}
static member Desktop : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
当前用户用于存储桌面上的文件的文件夹。

此文件夹的 GUID 是 B4BFCC3A-DB2C-424C-B029-7FE99A87C641。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Documents 属性

FileDialogCustomPlaces
.
.
::
.
Documents 属性
FileDialogCustomPlaces 类

获取当前用户的“文档”文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Documents As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Documents { get; }
public:
static property FileDialogCustomPlace^ Documents {
    FileDialogCustomPlace^ get ();
}
static member Documents : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
当前用户的“文档”文件夹。

此文件夹的 GUID 是 FDD39AD0-238F-46AF-ADB4-6C85480369C7。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Favorites 属性

FileDialogCustomPlaces
.
.
::
.
Favorites 属性
FileDialogCustomPlaces 类

获取当前用户的“收藏夹”文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Favorites As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Favorites { get; }
public:
static property FileDialogCustomPlace^ Favorites {
    FileDialogCustomPlace^ get ();
}
static member Favorites : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
当前用户的“收藏夹”文件夹。

此文件夹的 GUID 是 1777F761-68AD-4D8A-87BD-30B759FA33DD。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.LocalApplicationData 属性

FileDialogCustomPlaces
.
.
::
.
LocalApplicationData 属性
FileDialogCustomPlaces 类

获取包含当前非漫游用户使用的应用程序特定数据的文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property LocalApplicationData As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace LocalApplicationData { get; }
public:
static property FileDialogCustomPlace^ LocalApplicationData {
    FileDialogCustomPlace^ get ();
}
static member LocalApplicationData : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
包含当前非漫游用户使用的应用程序特定数据的文件夹。

此文件夹的 GUID 是 F1B32785-6FBA-4FCF-9D55-7B8E7F157091。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Music 属性

FileDialogCustomPlaces
.
.
::
.
Music 属性
FileDialogCustomPlaces 类

获取当前用户的“音乐”文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Music As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Music { get; }
public:
static property FileDialogCustomPlace^ Music {
    FileDialogCustomPlace^ get ();
}
static member Music : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
当前用户的“音乐”文件夹。

此文件夹的 GUID 是 4BD8D571-6D19-48D3-BE97-422220080E43。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Pictures 属性

FileDialogCustomPlaces
.
.
::
.
Pictures 属性
FileDialogCustomPlaces 类

获取当前用户的“图片”文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Pictures As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Pictures { get; }
public:
static property FileDialogCustomPlace^ Pictures {
    FileDialogCustomPlace^ get ();
}
static member Pictures : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
当前用户的“图片”文件夹。

此文件夹的 GUID 是 33E28130-4E1E-4676-835A-98395C3BC3BB。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.ProgramFiles 属性

FileDialogCustomPlaces
.
.
::
.
ProgramFiles 属性
FileDialogCustomPlaces 类

获取 Program Files 文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property ProgramFiles As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace ProgramFiles { get; }
public:
static property FileDialogCustomPlace^ ProgramFiles {
    FileDialogCustomPlace^ get ();
}
static member ProgramFiles : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
Program Files 文件夹。

此文件夹的 GUID 是 905E63B6-C1BF-494E-B29C-65B732D3D21A。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.ProgramFilesCommon 属性

FileDialogCustomPlaces
.
.
::
.
ProgramFilesCommon 属性
FileDialogCustomPlaces 类

获取包含应用程序间共享的组件的文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property ProgramFilesCommon As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace ProgramFilesCommon { get; }
public:
static property FileDialogCustomPlace^ ProgramFilesCommon {
    FileDialogCustomPlace^ get ();
}
static member ProgramFilesCommon : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
包含应用程序间共享的组件的文件夹。

此文件夹的 GUID 是 F7F1ED05-9F6D-47A2-AAAE-29D317C6F066。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Programs 属性

FileDialogCustomPlaces
.
.
::
.
Programs 属性
FileDialogCustomPlaces 类

获取包含当前用户的程序组的文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Programs As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Programs { get; }
public:
static property FileDialogCustomPlace^ Programs {
    FileDialogCustomPlace^ get ();
}
static member Programs : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
包含当前用户的程序组的文件夹。

此文件夹的 GUID 是 A77F5D77-2E2B-44C3-A6A2-ABA601054A51。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.RoamingApplicationData 属性

FileDialogCustomPlaces
.
.
::
.
RoamingApplicationData 属性
FileDialogCustomPlaces 类

获取包含当前漫游用户的应用程序特定数据的文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property RoamingApplicationData As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace RoamingApplicationData { get; }
public:
static property FileDialogCustomPlace^ RoamingApplicationData {
    FileDialogCustomPlace^ get ();
}
static member RoamingApplicationData : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
包含当前漫游用户的应用程序特定数据的文件夹。

此文件夹的 GUID 是 3EB685DB-65F9-4CF6-A03A-E3EF65729F3D。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.SendTo 属性

FileDialogCustomPlaces
.
.
::
.
SendTo 属性
FileDialogCustomPlaces 类

获取包含当前用户的“发送到”菜单项的文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property SendTo As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace SendTo { get; }
public:
static property FileDialogCustomPlace^ SendTo {
    FileDialogCustomPlace^ get ();
}
static member SendTo : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
包含当前用户的“发送到”菜单项的文件夹。

此文件夹的 GUID 是 8983036C-27C0-404B-8F08-102D10DCFD74。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.StartMenu 属性

FileDialogCustomPlaces
.
.
::
.
StartMenu 属性
FileDialogCustomPlaces 类

获取包含当前用户的“开始”菜单项的文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property StartMenu As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace StartMenu { get; }
public:
static property FileDialogCustomPlace^ StartMenu {
    FileDialogCustomPlace^ get ();
}
static member StartMenu : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
包含当前用户的“开始”菜单项的文件夹。

此文件夹的 GUID 是 625B53C3-AB48-4EC1-BA1F-A1EF4146FC19。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Startup 属性

FileDialogCustomPlaces
.
.
::
.
Startup 属性
FileDialogCustomPlaces 类

获取与当前用户的“启动”程序组对应的文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Startup As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Startup { get; }
public:
static property FileDialogCustomPlace^ Startup {
    FileDialogCustomPlace^ get ();
}
static member Startup : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
与当前用户的“启动”程序组对应的文件夹。

此文件夹的 GUID 是 B97D20BB-F46A-4C97-BA10-5E3608430854。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.System 属性

FileDialogCustomPlaces
.
.
::
.
System 属性
FileDialogCustomPlaces 类

获取 System 文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property System As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace System { get; }
public:
static property FileDialogCustomPlace^ System {
    FileDialogCustomPlace^ get ();
}
static member System : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
System 文件夹。

此文件夹的 GUID 是 1AC14E77-02E7-4E5D-B744-2EB1AE5198B7。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


FileDialogCustomPlaces ..::.Templates 属性

FileDialogCustomPlaces
.
.
::
.
Templates 属性
FileDialogCustomPlaces 类

获取包含当前用户的文档模板的文件夹。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Shared ReadOnly Property Templates As FileDialogCustomPlace
    Get
public static FileDialogCustomPlace Templates { get; }
public:
static property FileDialogCustomPlace^ Templates {
    FileDialogCustomPlace^ get ();
}
static member Templates : FileDialogCustomPlace

属性值

类型： Microsoft.Win32 FileDialogCustomPlace
包含当前用户的文档模板的文件夹。

此文件夹的 GUID 是 A63293E8-664E-48DB-A079-DF759E0509F7。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

FileDialogCustomPlaces 类
FileDialogCustomPlaces 成员
Microsoft.Win32 命名空间


IntranetZoneCredentialPolicy 类

IntranetZoneCredentialPolicy 类
成员

定义凭据策略，该凭据策略将用于使用 WebRequest 及其派生类发出的资源请求。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Class IntranetZoneCredentialPolicy _
    Implements ICredentialPolicy
public class IntranetZoneCredentialPolicy : ICredentialPolicy
public ref class IntranetZoneCredentialPolicy : ICredentialPolicy
type IntranetZoneCredentialPolicy =
    class
        interface ICredentialPolicy
    end

此策略使凭据仅在请求的资源与发出请求的客户端处于同一个域时才会发送。对于许多应用程序而言，这都是最佳策略，因为它可以防止随着对于 Intranet 以外资源的请求发送网络凭据。 此策略使凭据仅在请求的资源与发出请求的客户端处于同一个域时才会发送。对于许多应用程序而言，这都是最佳策略，因为它可以防止随着对于 Intranet 以外资源的请求发送网络凭据。

说明 说明

仅当 WebRequest 或与该请求关联的 WebProxy 含有不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的凭据时，才会调用 ICredentialPolicy 策略。对于不指定凭据的请求，设置该策略不起任何作用。 仅当 WebRequest 或与该请求关联的 WebProxy 含有不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的凭据时，才会调用 ICredentialPolicy 策略。对于不指定凭据的请求，设置该策略不起任何作用。

使用 AuthenticationManager..::.CredentialPolicy 属性设置 IntranetZoneCredentialPolicy 策略。为请求处理身份验证的 IAuthenticationModule 将先调用 ShouldSendCredential 方法，然后再执行身份验证。如果请求的资源与客户端不在同一个域中，则 ShouldSendCredential 方法将返回 false，并且不执行身份验证。 使用 AuthenticationManager..::.CredentialPolicy 属性设置 IntranetZoneCredentialPolicy 策略。为请求处理身份验证的 IAuthenticationModule 将先调用 ShouldSendCredential 方法，然后再执行身份验证。如果请求的资源与客户端不在同一个域中，则 ShouldSendCredential 方法将返回 false，并且不执行身份验证。 使用 AuthenticationManager..::.CredentialPolicy 属性设置 IntranetZoneCredentialPolicy 策略。为请求处理身份验证的 IAuthenticationModule 将先调用 ShouldSendCredential 方法，然后再执行身份验证。如果请求的资源与客户端不在同一个域中，则 ShouldSendCredential 方法将返回 false，并且不执行身份验证。

该策略影响当前应用程序域中所有具有非空凭据的 WebRequest 实例。无法根据单个请求重写策略。 该策略影响当前应用程序域中所有具有非空凭据的 WebRequest 实例。无法根据单个请求重写策略。

下面的代码示例演示如何创建 IntranetZoneCredentialPolicy 的实例，并使用它为应用程序域设置凭据策略。

 public static void UseIntranetCredentialPolicy()
{
    IntranetZoneCredentialPolicy  policy = new IntranetZoneCredentialPolicy();
    AuthenticationManager.CredentialPolicy = policy;
}

static void UseIntranetCredentialPolicy()
{
   IntranetZoneCredentialPolicy^ policy = gcnew IntranetZoneCredentialPolicy;
   AuthenticationManager::CredentialPolicy = policy;
}

Microsoft.Win32 Microsoft.Win32..::.IntranetZoneCredentialPolicyIntranetZoneCredentialPolicy
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

IntranetZoneCredentialPolicy 成员
Microsoft.Win32 命名空间


IntranetZoneCredentialPolicy 成员

IntranetZoneCredentialPolicy 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntranetZoneCredentialPolicy 类

定义凭据策略，该凭据策略将用于使用 WebRequest 及其派生类发出的资源请求。

IntranetZoneCredentialPolicy 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IntranetZoneCredentialPolicy 类
Microsoft.Win32 命名空间


IntranetZoneCredentialPolicy 构造函数

IntranetZoneCredentialPolicy 构造函数
IntranetZoneCredentialPolicy 类

初始化 IntranetZoneCredentialPolicy 类的新实例。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Sub New
public IntranetZoneCredentialPolicy()
public:
IntranetZoneCredentialPolicy()
new : unit -> IntranetZoneCredentialPolicy

应用程序使用此构造函数创建可用来设置 CredentialPolicy 属性的对象。

下面的代码示例演示如何创建此类的实例。

 public static void UseIntranetCredentialPolicy()
{
    IntranetZoneCredentialPolicy  policy = new IntranetZoneCredentialPolicy();
    AuthenticationManager.CredentialPolicy = policy;
}

static void UseIntranetCredentialPolicy()
{
   IntranetZoneCredentialPolicy^ policy = gcnew IntranetZoneCredentialPolicy;
   AuthenticationManager::CredentialPolicy = policy;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

IntranetZoneCredentialPolicy 类
IntranetZoneCredentialPolicy 成员
Microsoft.Win32 命名空间


IntranetZoneCredentialPolicy 方法

IntranetZoneCredentialPolicy 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntranetZoneCredentialPolicy 类

IntranetZoneCredentialPolicy 类型公开以下成员。

名称 说明
页首

参考

IntranetZoneCredentialPolicy 类
Microsoft.Win32 命名空间


IntranetZoneCredentialPolicy ..::.ShouldSendCredential 方法

IntranetZoneCredentialPolicy
.
.
::
.
ShouldSendCredential 方法
IntranetZoneCredentialPolicy 类

返回一个 Boolean，该值指示客户端的凭据是否随使用 WebRequest 发出的资源请求一起发送。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Overridable Function ShouldSendCredential ( _
    challengeUri As Uri, _
    request As WebRequest, _
    credential As NetworkCredential, _
    authModule As IAuthenticationModule _
) As Boolean
public virtual bool ShouldSendCredential(
    Uri challengeUri,
    WebRequest request,
    NetworkCredential credential,
    IAuthenticationModule authModule
)
public:
virtual bool ShouldSendCredential(
    Uri^ challengeUri,
    WebRequest^ request,
    NetworkCredential^ credential,
    IAuthenticationModule^ authModule
)
abstract ShouldSendCredential :
        challengeUri:Uri *
        request:WebRequest *
        credential:NetworkCredential *
        authModule:IAuthenticationModule -> bool
override ShouldSendCredential :
        challengeUri:Uri *
        request:WebRequest *
        credential:NetworkCredential *
        authModule:IAuthenticationModule -> bool

参数

challengeUri
类型： System Uri
将接收请求的 Uri。
request
类型： System.Net WebRequest
表示所请求资源的 WebRequest。
credential
类型： System.Net NetworkCredential
在该方法返回 true 时，将随请求一起发送的 NetworkCredential。
authModule
类型： System.Net IAuthenticationModule
在要求身份验证时，将执行身份验证的 IAuthenticationModule。

返回值

类型： System Boolean
如果所请求的资源与发出请求的客户端在同一个域中，则为 true；否则为 false。

实现

应用程序不直接调用此方法；它由负责执行服务器身份验证的 IAuthenticationModule 调用。如果该方法返回 false，IAuthenticationModule 将不向服务器验证客户端的身份。 应用程序不直接调用此方法；它由负责执行服务器身份验证的 IAuthenticationModule 调用。如果该方法返回 false，IAuthenticationModule 将不向服务器验证客户端的身份。

只为指定凭据或使用指定凭据的 WebProxy 对象的请求调用该方法。

下面的代码示例演示了：从 IntranetZoneCredentialPolicy 中进行派生，以允许为使用“安全超文本传输协议”(HTTPS) 和基本身份验证的请求发送凭据。使用 HTTPS 和基本身份验证时，通过网络发送的用户密码都是经过加密的。 下面的代码示例演示了：从 IntranetZoneCredentialPolicy 中进行派生，以允许为使用“安全超文本传输协议”(HTTPS) 和基本身份验证的请求发送凭据。使用 HTTPS 和基本身份验证时，通过网络发送的用户密码都是经过加密的。

// The following class allows credentials to be sent if they are for requests for resources
// in the same domain, or if the request uses the HTTPSscheme and basic authentication is
// required.

       public class HttpsBasicCredentialPolicy: IntranetZoneCredentialPolicy
    {
        public HttpsBasicCredentialPolicy()
        {
        }

        public override bool ShouldSendCredential(Uri challengeUri,
            WebRequest request,
            NetworkCredential credential,
            IAuthenticationModule authModule)
        {
            Console.WriteLine("Checking custom credential policy for HTTPS and basic.");
            bool answer = base.ShouldSendCredential(challengeUri, request, credential, authModule);

            if (answer == true)
            {
                Console.WriteLine("Sending credential for intranet resource.");
                return answer;
            }
            // Determine whether the base implementation returned false for basic and HTTPS.
            if (request.RequestUri.Scheme == Uri.UriSchemeHttps &&
                authModule.AuthenticationType == "Basic")
            {
                Console.WriteLine("Sending credential for HTTPS and basic.");
                return true;
            }
            return false;
        }
    }

// The following class allows credentials to be sent if they are for requests for resources
// in the same domain, or if the request uses the HTTPSscheme and basic authentication is
// required.
public ref class HttpsBasicCredentialPolicy: public IntranetZoneCredentialPolicy
{
public:
   HttpsBasicCredentialPolicy(){}

   virtual bool ShouldSendCredential( Uri^ challengeUri, WebRequest^ request, NetworkCredential^ credential, IAuthenticationModule^ authModule ) override
   {
      Console::WriteLine( L"Checking custom credential policy for HTTPS and basic." );
      bool answer = IntranetZoneCredentialPolicy::ShouldSendCredential( challengeUri, request, credential, authModule );
      if ( answer == true )
      {
         Console::WriteLine( L"Sending credential for intranet resource." );
         return answer;
      }

      // Determine whether the base implementation returned false for basic and HTTPS.
      if ( request->RequestUri->Scheme == Uri::UriSchemeHttps && authModule->AuthenticationType->Equals( L"Basic" ) )
      {
         Console::WriteLine( L"Sending credential for HTTPS and basic." );
         return true;
      }

      return false;
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

IntranetZoneCredentialPolicy 类
IntranetZoneCredentialPolicy 成员
Microsoft.Win32 命名空间


OpenFileDialog 类

OpenFileDialog 类
成员

表示一个通用对话框，用户可以使用此对话框来指定一个或多个要打开的文件的文件名。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public NotInheritable Class OpenFileDialog _
    Inherits FileDialog
public sealed class OpenFileDialog : FileDialog
public ref class OpenFileDialog sealed : public FileDialog
[<SealedAttribute>]
type OpenFileDialog =
    class
        inherit FileDialog
    end
<OpenFileDialog .../>

Microsoft.Win32 Microsoft.Win32..::.OpenFileDialogOpenFileDialog
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

OpenFileDialog 成员
Microsoft.Win32 命名空间


OpenFileDialog 成员

OpenFileDialog 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OpenFileDialog 类

表示一个通用对话框，用户可以使用此对话框来指定一个或多个要打开的文件的文件名。

OpenFileDialog 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OpenFileDialog 类
Microsoft.Win32 命名空间


OpenFileDialog 构造函数

OpenFileDialog 构造函数
OpenFileDialog 类

初始化 OpenFileDialog 类的一个新实例。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Sub New
public OpenFileDialog()
public:
OpenFileDialog()
new : unit -> OpenFileDialog

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

OpenFileDialog 类
OpenFileDialog 成员
Microsoft.Win32 命名空间


OpenFileDialog 方法

OpenFileDialog 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OpenFileDialog 类

OpenFileDialog 类型公开以下成员。

名称 说明
页首

参考

OpenFileDialog 类
Microsoft.Win32 命名空间


OpenFileDialog ..::.OpenFile 方法

OpenFileDialog
.
.
::
.
OpenFile 方法
OpenFileDialog 类

为用户使用 OpenFileDialog 选定的文件打开只读流。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Function OpenFile As Stream
public Stream OpenFile()
public:
Stream^ OpenFile()
member OpenFile : unit -> Stream

返回值

类型： System.IO Stream
一个新的 Stream，其中包含选定的文件。
异常 | 条件
InvalidOperationException | 在对话框中未选定任何文件。

无论是否在对话框中选中“只读”复选框，该文件都以只读权限（Open、Read 和 Read）打开。由于文件以不能覆盖或写入的方式打开，因此，应用程序在部分信任限制下执行时可以安全地加载一个文件。 无论是否在对话框中选中“只读”复选框，该文件都以只读权限（Open、Read 和 Read）打开。由于文件以不能覆盖或写入的方式打开，因此，应用程序在部分信任限制下执行时可以安全地加载一个文件。

如果选定了多个文件，则打开第一个选定的文件。

  • FileDialogPermission

    用于创建文件流。关联枚举：Open 用于创建文件流。关联枚举：Open

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

OpenFileDialog 类
OpenFileDialog 成员
Microsoft.Win32 命名空间
SafeFileName

其他资源

Safe File Upload from an XBAP Sample


OpenFileDialog ..::.OpenFiles 方法

OpenFileDialog
.
.
::
.
OpenFiles 方法
OpenFileDialog 类

创建一个数组，其中包含与用户使用 OpenFileDialog 选定的每个文件一一对应的只读流。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Function OpenFiles As Stream()
public Stream[] OpenFiles()
public:
array<Stream^>^ OpenFiles()
member OpenFiles : unit -> Stream[]

返回值

类型：
array<
System.IO Stream
>
[]
()
[]

由多个新的 Stream 对象构成的数组，这些对象包含选定的文件。
异常 | 条件
InvalidOperationException | 在对话框中未选定任何文件。

无论是否在对话框中选中“只读”复选框，每个文件都以只读权限（Open、Read 和 Read）打开。由于每个文件都以不能覆盖或写入的方式打开，因此，应用程序在部分信任限制下执行时可以安全地加载一个或多个文件。 无论是否在对话框中选中“只读”复选框，每个文件都以只读权限（Open、Read 和 Read）打开。由于每个文件都以不能覆盖或写入的方式打开，因此，应用程序在部分信任限制下执行时可以安全地加载一个或多个文件。

  • FileDialogPermission

    用于创建文件流数组。关联枚举：Open 用于创建文件流数组。关联枚举：Open

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

OpenFileDialog 类
OpenFileDialog 成员
Microsoft.Win32 命名空间


OpenFileDialog ..::.Reset 方法

OpenFileDialog
.
.
::
.
Reset 方法
OpenFileDialog 类

将所有 OpenFileDialog 属性重置为其默认值。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Overrides Sub Reset
public override void Reset()
public:
virtual void Reset() override
abstract Reset : unit -> unit
override Reset : unit -> unit

对实现者的说明

此类是密封类，因此不能重写此方法。

  • FileIOPermission

    用于重置对话框。关联枚举：Unrestricted 用于重置对话框。关联枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

OpenFileDialog 类
OpenFileDialog 成员
Microsoft.Win32 命名空间


OpenFileDialog ..::.ShowDialog 方法

OpenFileDialog
.
.
::
.
ShowDialog 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OpenFileDialog 类

显示通用对话框。

名称 说明
页首

在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。由于 RunDialog 需要所有者窗口，因此 ShowDialog 会尝试按照以下的优先级顺序分配一个窗口： 在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。由于 RunDialog 需要所有者窗口，因此 ShowDialog 会尝试按照以下的优先级顺序分配一个窗口：

  • 当前应用程序的活动窗口。

  • 当前应用程序的停放窗口。

  • 内部生成的隐藏窗口。

  • UIPermission

    用于执行此方法，而不引发异常。关联枚举：AllWindows 用于执行此方法，而不引发异常。关联枚举：AllWindows

参考

OpenFileDialog 类
OpenFileDialog 成员
Microsoft.Win32 命名空间


OpenFileDialog 属性

OpenFileDialog 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OpenFileDialog 类

OpenFileDialog 类型公开以下成员。

名称 说明
页首

参考

OpenFileDialog 类
Microsoft.Win32 命名空间


OpenFileDialog ..::.Multiselect 属性

OpenFileDialog
.
.
::
.
Multiselect 属性
OpenFileDialog 类

获取或设置一个选项，该选项指示 OpenFileDialog 是否允许用户选择多个文件。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property Multiselect As Boolean
    Get
    Set
public bool Multiselect { get; set; }
public:
property bool Multiselect {
    bool get ();
    void set (bool value);
}
member Multiselect : bool with get, set

<object Multiselect="bool" .../>

属性值

类型： System Boolean
如果允许多重选择，则为 true；否则为 false。默认值为 false。 如果允许多重选择，则为 true；否则为 false。默认值为 false。
  • FileIOPermission

    用于更改对话框用户界面行为。关联枚举：Unrestricted 用于更改对话框用户界面行为。关联枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

OpenFileDialog 类
OpenFileDialog 成员
Microsoft.Win32 命名空间


OpenFileDialog ..::.ReadOnlyChecked 属性

OpenFileDialog
.
.
::
.
ReadOnlyChecked 属性
OpenFileDialog 类

获取或设置一个值，该值指示是否选中 OpenFileDialog 显示的只读复选框。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property ReadOnlyChecked As Boolean
    Get
    Set
public bool ReadOnlyChecked { get; set; }
public:
property bool ReadOnlyChecked {
    bool get ();
    void set (bool value);
}
member ReadOnlyChecked : bool with get, set

<object ReadOnlyChecked="bool" .../>

属性值

类型： System Boolean
如果选中该复选框，则为 true；否则为 false。默认值为 false。 如果选中该复选框，则为 true；否则为 false。默认值为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

OpenFileDialog 类
OpenFileDialog 成员
Microsoft.Win32 命名空间


OpenFileDialog ..::.ShowReadOnly 属性

OpenFileDialog
.
.
::
.
ShowReadOnly 属性
OpenFileDialog 类

获取或设置一个值，该值指示 OpenFileDialog 是否包含只读复选框。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property ShowReadOnly As Boolean
    Get
    Set
public bool ShowReadOnly { get; set; }
public:
property bool ShowReadOnly {
    bool get ();
    void set (bool value);
}
member ShowReadOnly : bool with get, set

<object ShowReadOnly="bool" .../>

属性值

类型： System Boolean
如果显示该复选框，则为 true；否则为 false。默认值为 false。 如果显示该复选框，则为 true；否则为 false。默认值为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

OpenFileDialog 类
OpenFileDialog 成员
Microsoft.Win32 命名空间


OpenFileDialog 事件

OpenFileDialog 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OpenFileDialog 类

OpenFileDialog 类型公开以下成员。

名称 说明
页首

参考

OpenFileDialog 类
Microsoft.Win32 命名空间


PowerModeChangedEventArgs 类

PowerModeChangedEventArgs 类
成员

为 PowerModeChanged 事件提供数据。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
<PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")> _
<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name := "FullTrust")> _
Public Class PowerModeChangedEventArgs _
    Inherits EventArgs
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public class PowerModeChangedEventArgs : EventArgs
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
[PermissionSetAttribute(SecurityAction::LinkDemand, Name = L"FullTrust")]
[PermissionSetAttribute(SecurityAction::InheritanceDemand, Name = L"FullTrust")]
public ref class PowerModeChangedEventArgs : public EventArgs
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
[<PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")>]
[<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")>]
type PowerModeChangedEventArgs =
    class
        inherit EventArgs
    end

当用户挂起或恢复使用操作系统时，或者当出现系统电源状态通知时，会引发 PowerModeChanged 事件。会在以下情形下出现系统电源状态通知：当系统检测到电源不足或正在充电时，或者当交流电源和直流电源之间相互转换时。 当用户挂起或恢复使用操作系统时，或者当出现系统电源状态通知时，会引发 PowerModeChanged 事件。会在以下情形下出现系统电源状态通知：当系统检测到电源不足或正在充电时，或者当交流电源和直流电源之间相互转换时。

PowerModeChangedEventArgs 的 Mode 属性指示已出现的电源模式事件的类型。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Microsoft.Win32 Microsoft.Win32..::.PowerModeChangedEventArgsPowerModeChangedEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

PowerModeChangedEventArgs 成员
Microsoft.Win32 命名空间
PowerModeChanged
PowerModes


PowerModeChangedEventArgs 成员

PowerModeChangedEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PowerModeChangedEventArgs 类

为 PowerModeChanged 事件提供数据。

PowerModeChangedEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

PowerModeChangedEventArgs 类
Microsoft.Win32 命名空间


PowerModeChangedEventArgs 构造函数

PowerModeChangedEventArgs 构造函数
PowerModeChangedEventArgs 类

使用指定的电源模式事件类型初始化 PowerModeChangedEventArgs 类的新实例。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Sub New ( _
    mode As PowerModes _
)
public PowerModeChangedEventArgs(
    PowerModes mode
)
public:
PowerModeChangedEventArgs(
    PowerModes mode
)
new :
        mode:PowerModes -> PowerModeChangedEventArgs

参数

mode
类型： Microsoft.Win32 PowerModes
PowerModes 值之一，该值表示电源模式事件的类型。

此构造函数可用于创建一个指示电源模式事件类型的 PowerModeChangedEventArgs。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

PowerModeChangedEventArgs 类
PowerModeChangedEventArgs 成员
Microsoft.Win32 命名空间
PowerModes


PowerModeChangedEventArgs 方法

PowerModeChangedEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PowerModeChangedEventArgs 类

PowerModeChangedEventArgs 类型公开以下成员。

名称 说明
页首

参考

PowerModeChangedEventArgs 类
Microsoft.Win32 命名空间


PowerModeChangedEventArgs 属性

PowerModeChangedEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PowerModeChangedEventArgs 类

PowerModeChangedEventArgs 类型公开以下成员。

名称 说明
页首

参考

PowerModeChangedEventArgs 类
Microsoft.Win32 命名空间


PowerModeChangedEventArgs ..::.Mode 属性

PowerModeChangedEventArgs
.
.
::
.
Mode 属性
PowerModeChangedEventArgs 类

获取一个指示已出现的电源模式事件的类型的标识符。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public ReadOnly Property Mode As PowerModes
    Get
public PowerModes Mode { get; }
public:
property PowerModes Mode {
    PowerModes get ();
}
member Mode : PowerModes

属性值

类型： Microsoft.Win32 PowerModes
PowerModes 值之一。

此属性指示正在出现的电源模式转换的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

PowerModeChangedEventArgs 类
PowerModeChangedEventArgs 成员
Microsoft.Win32 命名空间
PowerModes


PowerModeChangedEventHandler 委托

PowerModeChangedEventHandler 委托

表示将处理 PowerModeChanged 事件的方法。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Delegate Sub PowerModeChangedEventHandler ( _
    sender As Object, _
    e As PowerModeChangedEventArgs _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public delegate void PowerModeChangedEventHandler(
    Object sender,
    PowerModeChangedEventArgs e
)
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public delegate void PowerModeChangedEventHandler(
    Object^ sender,
    PowerModeChangedEventArgs^ e
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type PowerModeChangedEventHandler =
    delegate of
        sender:Object *
        e:PowerModeChangedEventArgs -> unit

参数

sender
类型： System Object
事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
e
类型： Microsoft.Win32 PowerModeChangedEventArgs
包含事件数据的 PowerModeChangedEventArgs。

当创建 PowerModeChangedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 PowerModeChangedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 PowerModeChangedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 PowerModeChangedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
PowerModeChangedEventArgs
PowerModes
PowerModeChanged
SystemEvents


PowerModes 枚举

PowerModes 枚举

为操作系统报告的电源模式事件定义标识符。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Enumeration PowerModes
public enum PowerModes
public enum class PowerModes
type PowerModes
成员名称 | 说明
Resume | 操作系统即将从挂起状态继续。
StatusChange | 一个电源模式状态的通知事件已由操作系统引发。这可能指示电池电力不足或正在充电、电源正由交流电转换为电池或相反，或系统电源状态的其他更改。 一个电源模式状态的通知事件已由操作系统引发。这可能指示电池电力不足或正在充电、电源正由交流电转换为电池或相反，或系统电源状态的其他更改。
Suspend | 操作系统即将挂起。

此枚举定义表示电源模式更改或电源模式事件的类型的标识符。PowerModeChangedEventArgs 使用该枚举值指示 PowerModeChanged 事件的类型。 此枚举定义表示电源模式更改或电源模式事件的类型的标识符。PowerModeChangedEventArgs 使用该枚举值指示 PowerModeChanged 事件的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
PowerModeChangedEventArgs
PowerModeChanged
SystemEvents


Registry 类

Registry 类
成员

提供表示 Windows 注册表中的根项的 RegistryKey 对象，并提供访问项/值对的 static 方法。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public NotInheritable Class Registry
[ComVisibleAttribute(true)]
public static class Registry
[ComVisibleAttribute(true)]
public ref class Registry abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
type Registry =  class end

此类提供在运行 Windows 的计算机上的注册表中找到的标准根项集。注册表是一个存储设备，包含有关应用程序、用户和默认系统设置的信息。例如，应用程序可使用注册表来存储在应用程序关闭后需要保留的信息，并可在应用程序重新加载时访问这些信息。例如，可以存储颜色首选项、屏幕位置或窗口大小。通过将信息存储在注册表中的不同位置，可以为各位用户分别控制这些数据。 此类提供在运行 Windows 的计算机上的注册表中找到的标准根项集。注册表是一个存储设备，包含有关应用程序、用户和默认系统设置的信息。例如，应用程序可使用注册表来存储在应用程序关闭后需要保留的信息，并可在应用程序重新加载时访问这些信息。例如，可以存储颜色首选项、屏幕位置或窗口大小。通过将信息存储在注册表中的不同位置，可以为各位用户分别控制这些数据。 此类提供在运行 Windows 的计算机上的注册表中找到的标准根项集。注册表是一个存储设备，包含有关应用程序、用户和默认系统设置的信息。例如，应用程序可使用注册表来存储在应用程序关闭后需要保留的信息，并可在应用程序重新加载时访问这些信息。例如，可以存储颜色首选项、屏幕位置或窗口大小。通过将信息存储在注册表中的不同位置，可以为各位用户分别控制这些数据。 此类提供在运行 Windows 的计算机上的注册表中找到的标准根项集。注册表是一个存储设备，包含有关应用程序、用户和默认系统设置的信息。例如，应用程序可使用注册表来存储在应用程序关闭后需要保留的信息，并可在应用程序重新加载时访问这些信息。例如，可以存储颜色首选项、屏幕位置或窗口大小。通过将信息存储在注册表中的不同位置，可以为各位用户分别控制这些数据。 此类提供在运行 Windows 的计算机上的注册表中找到的标准根项集。注册表是一个存储设备，包含有关应用程序、用户和默认系统设置的信息。例如，应用程序可使用注册表来存储在应用程序关闭后需要保留的信息，并可在应用程序重新加载时访问这些信息。例如，可以存储颜色首选项、屏幕位置或窗口大小。通过将信息存储在注册表中的不同位置，可以为各位用户分别控制这些数据。

由 Registry 类公开的基或根 RegistryKey 实例描绘注册表中的子项和值的基本存储机制。所有的项都是只读的，因为注册表依赖于它们的存在。由 Registry 公开的项有： 由 Registry 类公开的基或根 RegistryKey 实例描绘注册表中的子项和值的基本存储机制。所有的项都是只读的，因为注册表依赖于它们的存在。由 Registry 公开的项有： 由 Registry 类公开的基或根 RegistryKey 实例描绘注册表中的子项和值的基本存储机制。所有的项都是只读的，因为注册表依赖于它们的存在。由 Registry 公开的项有：

CurrentUser

存储有关用户首选项的信息。

LocalMachine

存储本地计算机的配置信息。

ClassesRoot

存储有关类型（和类）及其属性的信息。

Users

存储有关默认用户配置的信息。

PerformanceData

存储软件组件的性能信息。

CurrentConfig

存储非用户特定的硬件信息。

DynData

存储动态数据。

一旦标识了希望在其下存储/检索注册表中信息的根项后，可以使用 RegistryKey 类添加或移除子项和操作给定项的值。

硬件设备可以使用即插即用接口将信息自动放在注册表中。安装设备驱动程序的软件可以通过向标准 API 写入将信息放在注册表中。 硬件设备可以使用即插即用接口将信息自动放在注册表中。安装设备驱动程序的软件可以通过向标准 API 写入将信息放在注册表中。

获取和设置值的静态方法

在 .NET Framework 2.0 版中，Registry 类还包含从注册表项设置和检索值的 staticGetValue 和 SetValue 方法。每次使用这两种方法时，它们都会打开和关闭注册表项，所以，当您访问大量值时，使用这两种方法不如使用 RegistryKey 类中的类似方法。 在 .NET Framework 2.0 版中，Registry 类还包含从注册表项设置和检索值的 staticGetValue 和 SetValue 方法。每次使用这两种方法时，它们都会打开和关闭注册表项，所以，当您访问大量值时，使用这两种方法不如使用 RegistryKey 类中的类似方法。

RegistryKey 类还提供了可用来为注册表项设置 Windows 访问控制安全性的方法、可用来在检索值之前测试值的数据类型的方法以及删除项的方法。

本节包含两个代码示例。第一个示例阐释根项，第二个示例阐释 staticGetValue 和 SetValue 方法。 本节包含两个代码示例。第一个示例阐释根项，第二个示例阐释 staticGetValue 和 SetValue 方法。

示例 1

下面的代码示例演示如何检索 HKEY_USERS 项的子项，以及如何将检索到的子项的名称输出到屏幕上。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的代码示例演示如何检索 HKEY_USERS 项的子项，以及如何将检索到的子项的名称输出到屏幕上。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的代码示例演示如何检索 HKEY_USERS 项的子项，以及如何将检索到的子项的名称输出到屏幕上。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。

Imports System
Imports Microsoft.Win32

Class Reg

    Public Shared Sub Main()

        ' Create a RegistryKey, which will access the HKEY_USERS
        ' key in the registry of this machine.
        Dim rk As RegistryKey = Registry.Users

        ' Print out the keys.
        PrintKeys(rk)
    End Sub

    Shared Sub PrintKeys(rkey As RegistryKey)

        ' Retrieve all the subkeys for the specified key.
        Dim names As String() = rkey.GetSubKeyNames()

        Dim icount As Integer = 0

        Console.WriteLine("Subkeys of " & rkey.Name)
        Console.WriteLine("-----------------------------------------------")

        ' Print the contents of the array to the console.
        Dim s As String
        For Each s In  names
            Console.WriteLine(s)

            ' The following code puts a limit on the number
            ' of keys displayed.  Comment it out to print the
            ' complete list.
            icount += 1
            If icount >= 10 Then
                Exit For
            End If
        Next s
    End Sub
End Class

using System;
using Microsoft.Win32;

class Reg {
    public static void Main() {

        // Create a RegistryKey, which will access the HKEY_USERS
        // key in the registry of this machine.
        RegistryKey rk = Registry.Users;

        // Print out the keys.
        PrintKeys(rk);
    }

    static void PrintKeys(RegistryKey rkey) {

        // Retrieve all the subkeys for the specified key.
        String [] names = rkey.GetSubKeyNames();

        int icount = 0;

        Console.WriteLine("Subkeys of " + rkey.Name);
        Console.WriteLine("-----------------------------------------------");

        // Print the contents of the array to the console.
        foreach (String s in names) {
            Console.WriteLine(s);

            // The following code puts a limit on the number
            // of keys displayed.  Comment it out to print the
            // complete list.
            icount++;
            if (icount >= 10)
                break;
        }
    }
}

using namespace System;
using namespace Microsoft::Win32;
void PrintKeys( RegistryKey ^ rkey )
{

   // Retrieve all the subkeys for the specified key.
   array<String^>^names = rkey->GetSubKeyNames();
   int icount = 0;
   Console::WriteLine( "Subkeys of {0}", rkey->Name );
   Console::WriteLine( "-----------------------------------------------" );

   // Print the contents of the array to the console.
   System::Collections::IEnumerator^ enum0 = names->GetEnumerator();
   while ( enum0->MoveNext() )
   {
      String^ s = safe_cast<String^>(enum0->Current);
      Console::WriteLine( s );

      // The following code puts a limit on the number
      // of keys displayed.  Comment it out to print the
      // complete list.
      icount++;
      if ( icount >= 10 )
            break;
   }
}

int main()
{

   // Create a RegistryKey, which will access the HKEY_USERS
   // key in the registry of this machine.
   RegistryKey ^ rk = Registry::Users;

   // Print out the keys.
   PrintKeys( rk );
}

示例 2

下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。 下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。

Imports System
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' The name of the key must include a valid root.
        Const userRoot As String = "HKEY_CURRENT_USER"
        Const subkey As String = "RegistrySetValueExample"
        Const keyName As String = userRoot & "\" & subkey

        ' Integer values can be stored without specifying the
        ' registry data type, but Long values will be stored
        ' as strings unless you specify the type. Note that
        ' the integer is stored in the default name/value
        ' pair.
        Registry.SetValue(keyName, "", 5280)
        Registry.SetValue(keyName, "TestLong", 12345678901234, _
            RegistryValueKind.QWord)

        ' Strings with expandable environment variables are
        ' stored as ordinary strings unless you specify the
        ' data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%")
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%", _
            RegistryValueKind.ExpandString)

        ' Arrays of strings are stored automatically as
        ' MultiString. Similarly, arrays of Byte are stored
        ' automatically as Binary.
        Dim strings() As String = {"One", "Two", "Three"}
        Registry.SetValue(keyName, "TestArray", strings)

        ' Your default value is returned if the name/value pair
        ' does not exist.
        Dim noSuch As String = _
            Registry.GetValue(keyName, "NoSuchName", _
            "Return this default if NoSuchName does not exist.")
        Console.WriteLine(vbCrLf & "NoSuchName: {0}", noSuch)

        ' Retrieve the Integer and Long values, specifying
        ' numeric default values in case the name/value pairs
        ' do not exist. The Integer value is retrieved from the
        ' default (nameless) name/value pair for the key.
        Dim tInteger As Integer = _
            Registry.GetValue(keyName, "", -1)
        Console.WriteLine("(Default): {0}", tInteger)
        Dim tLong As Long = Registry.GetValue(keyName, _
             "TestLong", Long.MinValue)
        Console.WriteLine("TestLong: {0}", tLong)

        ' When retrieving a MultiString value, you can specify
        ' an array for the default return value. The value is
        ' declared inline, but could also be declared as:
        ' Dim default() As String = {"Default value."}
        '
        Dim tArray() As String = _
            Registry.GetValue(keyName, "TestArray", _
            New String() {"Default if TestArray does not exist."})
        For i As Integer = 0 To tArray.Length - 1
            Console.WriteLine("TestArray({0}): {1}", i, tArray(i))
        Next

        ' A string with embedded environment variables is not
        ' expanded if it was stored as an ordinary string.
        Dim tExpand As String = Registry.GetValue(keyName, _
             "TestExpand", "Default if TestExpand does not exist.")
        Console.WriteLine("TestExpand: {0}", tExpand)

        ' A string stored as ExpandString is expanded.
        Dim tExpand2 As String = Registry.GetValue(keyName, _
             "TestExpand2", "Default if TestExpand2 does not exist.")
        Console.WriteLine("TestExpand2: {0}...", _
            tExpand2.Substring(0, 40))

        Console.WriteLine(vbCrLf & _
            "Use the registry editor to examine the key.")
        Console.WriteLine("Press the Enter key to delete the key.")
        Console.ReadLine()
        Registry.CurrentUser.DeleteSubKey(subkey)
    End Sub
End Class
'
' This code example produces output similar to the following:
'
'NoSuchName: Return this default if NoSuchName does not exist.
'(Default): 5280
'TestLong: 12345678901234
'TestArray(0): One
'TestArray(1): Two
'TestArray(2): Three
'TestExpand: My path: %path%
'TestExpand2: My path: D:\Program Files\Microsoft.NET\...
'
'Use the registry editor to examine the key.
'Press the Enter key to delete the key.

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // The name of the key must include a valid root.
        const string userRoot = "HKEY_CURRENT_USER";
        const string subkey = "RegistrySetValueExample";
        const string keyName = userRoot + "\\" + subkey;

        // An int value can be stored without specifying the
        // registry data type, but long values will be stored
        // as strings unless you specify the type. Note that
        // the int is stored in the default name/value
        // pair.
        Registry.SetValue(keyName, "", 5280);
        Registry.SetValue(keyName, "TestLong", 12345678901234,
            RegistryValueKind.QWord);

        // Strings with expandable environment variables are
        // stored as ordinary strings unless you specify the
        // data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%");
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%",
            RegistryValueKind.ExpandString);

        // Arrays of strings are stored automatically as
        // MultiString. Similarly, arrays of Byte are stored
        // automatically as Binary.
        string[] strings = {"One", "Two", "Three"};
        Registry.SetValue(keyName, "TestArray", strings);

        // Your default value is returned if the name/value pair
        // does not exist.
        string noSuch = (string) Registry.GetValue(keyName,
            "NoSuchName",
            "Return this default if NoSuchName does not exist.");
        Console.WriteLine("\r\nNoSuchName: {0}", noSuch);

        // Retrieve the int and long values, specifying
        // numeric default values in case the name/value pairs
        // do not exist. The int value is retrieved from the
        // default (nameless) name/value pair for the key.
        int tInteger = (int) Registry.GetValue(keyName, "", -1);
        Console.WriteLine("(Default): {0}", tInteger);
        long tLong = (long) Registry.GetValue(keyName, "TestLong",
            long.MinValue);
        Console.WriteLine("TestLong: {0}", tLong);

        // When retrieving a MultiString value, you can specify
        // an array for the default return value.
        string[] tArray = (string[]) Registry.GetValue(keyName,
            "TestArray",
            new string[] {"Default if TestArray does not exist."});
        for(int i=0; i<tArray.Length; i++)
        {
            Console.WriteLine("TestArray({0}): {1}", i, tArray[i]);
        }

        // A string with embedded environment variables is not
        // expanded if it was stored as an ordinary string.
        string tExpand = (string) Registry.GetValue(keyName,
             "TestExpand",
             "Default if TestExpand does not exist.");
        Console.WriteLine("TestExpand: {0}", tExpand);

        // A string stored as ExpandString is expanded.
        string tExpand2 = (string) Registry.GetValue(keyName,
            "TestExpand2",
            "Default if TestExpand2 does not exist.");
        Console.WriteLine("TestExpand2: {0}...",
            tExpand2.Substring(0, 40));

        Console.WriteLine("\r\nUse the registry editor to examine the key.");
        Console.WriteLine("Press the Enter key to delete the key.");
        Console.ReadLine();
        Registry.CurrentUser.DeleteSubKey(subkey);
    }
}
//
// This code example produces output similar to the following:
//
//NoSuchName: Return this default if NoSuchName does not exist.
//(Default): 5280
//TestLong: 12345678901234
//TestArray(0): One
//TestArray(1): Two
//TestArray(2): Three
//TestExpand: My path: %path%
//TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
//Use the registry editor to examine the key.
//Press the Enter key to delete the key.

using namespace System;
using namespace Microsoft::Win32;

int main()
{
    // The name of the key must include a valid root.
    String^ userRoot = "HKEY_CURRENT_USER";
    String^ subKey = "RegistrySetValueExample2";
    String^ keyName = String::Concat(userRoot, "\\", subKey);

    // An int value can be stored without specifying the
    // registry data type, but Int64 values will be stored
    // as strings unless you specify the type. Note that
    // the int is stored in the default name/value
    // pair.
    Registry::SetValue(keyName, "", 5280);
    Registry::SetValue(keyName, "TestInt64", 12345678901234,
        RegistryValueKind::QWord);

    // Strings with expandable environment variables are
    // stored as ordinary strings unless you specify the
    // data type.
    Registry::SetValue(keyName, "TestExpand", "My path: %path%");
    Registry::SetValue(keyName, "TestExpand2", "My path: %path%",
        RegistryValueKind::ExpandString);

    // Arrays of strings are stored automatically as
    // MultiString. Similarly, arrays of Byte are stored
    // automatically as Binary.
    array<String^>^ strings  = {"One", "Two", "Three"};
    Registry::SetValue(keyName, "TestArray", strings);

    // Your default value is returned if the name/value pair
    // does not exist.
    String^ noSuch = (String^)Registry::GetValue(keyName,
        "NoSuchName",
        "Return this default if NoSuchName does not exist.");
    Console::WriteLine("\r\nNoSuchName: {0}", noSuch);

    // Retrieve the int and Int64 values, specifying
    // numeric default values in case the name/value pairs
    // do not exist. The int value is retrieved from the
    // default (nameless) name/value pair for the key.
    int testInteger = (int)Registry::GetValue(keyName, "", -1);
    Console::WriteLine("(Default): {0}", testInteger);
    long long testInt64 = (long long)Registry::GetValue(keyName,
        "TestInt64", System::Int64::MinValue);
    Console::WriteLine("TestInt64: {0}", testInt64);

    // When retrieving a MultiString value, you can specify
    // an array for the default return value.
    array<String^>^ testArray = (array<String^>^)Registry::GetValue(
        keyName, "TestArray",
        gcnew array<String^> {"Default if TestArray does not exist."});
    for (int i = 0; i < testArray->Length; i++)
    {
        Console::WriteLine("TestArray({0}): {1}", i, testArray[i]);
    }

    // A string with embedded environment variables is not
    // expanded if it was stored as an ordinary string.
    String^ testExpand = (String^)Registry::GetValue(keyName,
        "TestExpand", "Default if TestExpand does not exist.");
    Console::WriteLine("TestExpand: {0}", testExpand);

    // A string stored as ExpandString is expanded.
    String^ testExpand2 = (String^)Registry::GetValue(keyName,
        "TestExpand2", "Default if TestExpand2 does not exist.");
    Console::WriteLine(
        "TestExpand2: {0}...", testExpand2->Substring(0, 40));
    Console::WriteLine(
        "\r\nUse the registry editor to examine the key.");
    Console::WriteLine("Press the Enter key to delete the key.");
    Console::ReadLine();
    Registry::CurrentUser->DeleteSubKey(subKey);
}
//
// This code example produces output similar to the following:
//
// NoSuchName: Return this default if NoSuchName does not exist.
// (Default): 5280
// TestInt64: 12345678901234
// TestArray(0): One
// TestArray(1): Two
// TestArray(2): Three
// TestExpand: My path: %path%
// TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
// Use the registry editor to examine the key.
// Press the Enter key to delete the key.

Microsoft.Win32 Microsoft.Win32..::.RegistryRegistry
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 成员
Microsoft.Win32 命名空间
RegistryHive
RegistryKey


Registry 成员

Registry 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Registry 类

提供表示 Windows 注册表中的根项的 RegistryKey 对象，并提供访问项/值对的 static 方法。

Registry 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Registry 类
Microsoft.Win32 命名空间


Registry 字段

Registry 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Registry 类

Registry 类型公开以下成员。

名称 说明
页首

参考

Registry 类
Microsoft.Win32 命名空间


Registry ..::.ClassesRoot 字段

Registry
.
.
::
.
ClassesRoot 字段
Registry 类

定义文档的类型（或类）以及与那些类型关联的属性。该字段读取 Windows 注册表基项 HKEY_CLASSES_ROOT。 定义文档的类型（或类）以及与那些类型关联的属性。该字段读取 Windows 注册表基项 HKEY_CLASSES_ROOT。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly ClassesRoot As RegistryKey
public static readonly RegistryKey ClassesRoot
public:
static initonly RegistryKey^ ClassesRoot
static val ClassesRoot: RegistryKey

常规应用程序和 OLE 应用程序都使用存储在此项下的数据。此项还通过存储 DDE 和 OLE 支持信息，提供与 Windows 3.1 注册数据库的向后兼容性。文件查看器和用户界面扩展将它们的 OLE 类标识符存储在此项中，并且在此项中注册处理服务器。 常规应用程序和 OLE 应用程序都使用存储在此项下的数据。此项还通过存储 DDE 和 OLE 支持信息，提供与 Windows 3.1 注册数据库的向后兼容性。文件查看器和用户界面扩展将它们的 OLE 类标识符存储在此项中，并且在此项中注册处理服务器。 常规应用程序和 OLE 应用程序都使用存储在此项下的数据。此项还通过存储 DDE 和 OLE 支持信息，提供与 Windows 3.1 注册数据库的向后兼容性。文件查看器和用户界面扩展将它们的 OLE 类标识符存储在此项中，并且在此项中注册处理服务器。

下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。

Imports System
Imports Microsoft.Win32

Class Reg

    Public Shared Sub Main()

        ' Create a RegistryKey, which will access the HKEY_CLASSES_ROOT
        ' key in the registry of this machine.
        Dim rk As RegistryKey = Registry.ClassesRoot

        ' Print out the keys.
        PrintKeys(rk)
    End Sub

    Shared Sub PrintKeys(rkey As RegistryKey)

        ' Retrieve all the subkeys for the specified key.
        Dim names As String() = rkey.GetSubKeyNames()

        Dim icount As Integer = 0

        Console.WriteLine("Subkeys of " & rkey.Name)
        Console.WriteLine("-----------------------------------------------")

        ' Print the contents of the array to the console.
        Dim s As String
        For Each s In  names
            Console.WriteLine(s)

            ' The following code puts a limit on the number
            ' of keys displayed.  Comment it out to print the
            ' complete list.
            icount += 1
            If icount >= 10 Then
                Exit For
            End If
        Next s
    End Sub
End Class

using System;
using Microsoft.Win32;

class Reg {
    public static void Main() {

        // Create a RegistryKey, which will access the HKEY_CLASSES_ROOT
        // key in the registry of this machine.
        RegistryKey rk = Registry.ClassesRoot;

        // Print out the keys.
        PrintKeys(rk);
    }

    static void PrintKeys(RegistryKey rkey) {

        // Retrieve all the subkeys for the specified key.
        String [] names = rkey.GetSubKeyNames();

        int icount = 0;

        Console.WriteLine("Subkeys of " + rkey.Name);
        Console.WriteLine("-----------------------------------------------");

        // Print the contents of the array to the console.
        foreach (String s in names) {
            Console.WriteLine(s);

            // The following code puts a limit on the number
            // of keys displayed.  Comment it out to print the
            // complete list.
            icount++;
            if (icount >= 10)
                break;
        }
    }
}

using namespace System;
using namespace Microsoft::Win32;
void PrintKeys( RegistryKey ^ rkey )
{

   // Retrieve all the subkeys for the specified key.
   array<String^>^names = rkey->GetSubKeyNames();
   int icount = 0;
   Console::WriteLine( "Subkeys of {0}", rkey->Name );
   Console::WriteLine( "-----------------------------------------------" );

   // Print the contents of the array to the console.
   System::Collections::IEnumerator^ enum0 = names->GetEnumerator();
   while ( enum0->MoveNext() )
   {
      String^ s = safe_cast<String^>(enum0->Current);
      Console::WriteLine( s );

      // The following code puts a limit on the number
      // of keys displayed.  Comment it out to print the
      // complete list.
      icount++;
      if ( icount >= 10 )
            break;
   }
}

int main()
{

   // Create a RegistryKey, which will access the HKEY_CLASSES_ROOT
   // key in the registry of this machine.
   RegistryKey ^ rk = Registry::ClassesRoot;

   // Print out the keys.
   PrintKeys( rk );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 类
Registry 成员
Microsoft.Win32 命名空间


Registry ..::.CurrentConfig 字段

Registry
.
.
::
.
CurrentConfig 字段
Registry 类

包含有关非用户特定的硬件的配置信息。该字段读取 Windows 注册表基项 HKEY_CURRENT_CONFIG。 包含有关非用户特定的硬件的配置信息。该字段读取 Windows 注册表基项 HKEY_CURRENT_CONFIG。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly CurrentConfig As RegistryKey
public static readonly RegistryKey CurrentConfig
public:
static initonly RegistryKey^ CurrentConfig
static val CurrentConfig: RegistryKey

该成员映射到 LocalMachine 中的子项。

一个使用该成员的示例是这样一个应用程序，它根据系统是否附加到网络，为其数据存储不同的服务器名称。

下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。

Imports System
Imports Microsoft.Win32

Class Reg

    Public Shared Sub Main()

        ' Create a RegistryKey, which will access the HKEY_CURRENT_CONFIG
        ' key in the registry of this machine.
        Dim rk As RegistryKey = Registry.CurrentConfig

        ' Print out the keys.
        PrintKeys(rk)
    End Sub

    Shared Sub PrintKeys(rkey As RegistryKey)

        ' Retrieve all the subkeys for the specified key.
        Dim names As String() = rkey.GetSubKeyNames()

        Dim icount As Integer = 0

        Console.WriteLine("Subkeys of " & rkey.Name)
        Console.WriteLine("-----------------------------------------------")

        ' Print the contents of the array to the console.
        Dim s As String
        For Each s In  names
            Console.WriteLine(s)

            ' The following code puts a limit on the number
            ' of keys displayed.  Comment it out to print the
            ' complete list.
            icount += 1
            If icount >= 10 Then
                Exit For
            End If
        Next s
    End Sub
End Class

using System;
using Microsoft.Win32;

class Reg {
    public static void Main() {

        // Create a RegistryKey, which will access the HKEY_CURRENT_CONFIG
        // key in the registry of this machine.
        RegistryKey rk = Registry.CurrentConfig;

        // Print out the keys.
        PrintKeys(rk);
    }

    static void PrintKeys(RegistryKey rkey) {

        // Retrieve all the subkeys for the specified key.
        String [] names = rkey.GetSubKeyNames();

        int icount = 0;

        Console.WriteLine("Subkeys of " + rkey.Name);
        Console.WriteLine("-----------------------------------------------");

        // Print the contents of the array to the console.
        foreach (String s in names) {
            Console.WriteLine(s);

            // The following code puts a limit on the number
            // of keys displayed.  Comment it out to print the
            // complete list.
            icount++;
            if (icount >= 10)
                break;
        }
    }
}

using namespace System;
using namespace Microsoft::Win32;
void PrintKeys( RegistryKey ^ rkey )
{

   // Retrieve all the subkeys for the specified key.
   array<String^>^names = rkey->GetSubKeyNames();
   int icount = 0;
   Console::WriteLine( "Subkeys of {0}", rkey->Name );
   Console::WriteLine( "-----------------------------------------------" );

   // Print the contents of the array to the console.
   System::Collections::IEnumerator^ enum0 = names->GetEnumerator();
   while ( enum0->MoveNext() )
   {
      String^ s = safe_cast<String^>(enum0->Current);
      Console::WriteLine( s );

      // The following code puts a limit on the number
      // of keys displayed.  Comment it out to print the
      // complete list.
      icount++;
      if ( icount >= 10 )
            break;
   }
}

int main()
{

   // Create a RegistryKey, which will access the HKEY_CURRENT_CONFIG
   // key in the registry of this machine.
   RegistryKey ^ rk = Registry::CurrentConfig;

   // Print out the keys.
   PrintKeys( rk );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 类
Registry 成员
Microsoft.Win32 命名空间


Registry ..::.CurrentUser 字段

Registry
.
.
::
.
CurrentUser 字段
Registry 类

包含有关当前用户首选项的信息。该字段读取 Windows 注册表基项 HKEY_CURRENT_USER 包含有关当前用户首选项的信息。该字段读取 Windows 注册表基项 HKEY_CURRENT_USER

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly CurrentUser As RegistryKey
public static readonly RegistryKey CurrentUser
public:
static initonly RegistryKey^ CurrentUser
static val CurrentUser: RegistryKey

存储在此项中的信息包括环境变量的设置和有关程序组、颜色、打印机、网络连接和应用程序首选项的数据。此项使建立当前用户的设置更容易。在此项中，软件供应商存储要在其应用程序中使用的当前用户特定的首选项。例如，Microsoft 为其要使用的应用程序创建 HKEY_CURRENT_USER\Software\Microsoft 项，每个应用程序都在 Microsoft 项下创建自己的子项。 存储在此项中的信息包括环境变量的设置和有关程序组、颜色、打印机、网络连接和应用程序首选项的数据。此项使建立当前用户的设置更容易。在此项中，软件供应商存储要在其应用程序中使用的当前用户特定的首选项。例如，Microsoft 为其要使用的应用程序创建 HKEY_CURRENT_USER\Software\Microsoft 项，每个应用程序都在 Microsoft 项下创建自己的子项。 存储在此项中的信息包括环境变量的设置和有关程序组、颜色、打印机、网络连接和应用程序首选项的数据。此项使建立当前用户的设置更容易。在此项中，软件供应商存储要在其应用程序中使用的当前用户特定的首选项。例如，Microsoft 为其要使用的应用程序创建 HKEY_CURRENT_USER\Software\Microsoft 项，每个应用程序都在 Microsoft 项下创建自己的子项。 存储在此项中的信息包括环境变量的设置和有关程序组、颜色、打印机、网络连接和应用程序首选项的数据。此项使建立当前用户的设置更容易。在此项中，软件供应商存储要在其应用程序中使用的当前用户特定的首选项。例如，Microsoft 为其要使用的应用程序创建 HKEY_CURRENT_USER\Software\Microsoft 项，每个应用程序都在 Microsoft 项下创建自己的子项。

下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。

Imports System
Imports Microsoft.Win32

Class Reg

    Public Shared Sub Main()

        ' Create a RegistryKey, which will access the HKEY_CURRENT_USER
        ' key in the registry of this machine.
        Dim rk As RegistryKey = Registry.CurrentUser

        ' Print out the keys.
        PrintKeys(rk)
    End Sub

    Shared Sub PrintKeys(rkey As RegistryKey)

        ' Retrieve all the subkeys for the specified key.
        Dim names As String() = rkey.GetSubKeyNames()

        Dim icount As Integer = 0

        Console.WriteLine("Subkeys of " & rkey.Name)
        Console.WriteLine("-----------------------------------------------")

        ' Print the contents of the array to the console.
        Dim s As String
        For Each s In  names
            Console.WriteLine(s)

            ' The following code puts a limit on the number
            ' of keys displayed.  Comment it out to print the
            ' complete list.
            icount += 1
            If icount >= 10 Then
                Exit For
            End If
        Next s
    End Sub
End Class

using System;
using Microsoft.Win32;

class Reg {
    public static void Main() {

        // Create a RegistryKey, which will access the HKEY_CURRENT_USER
        // key in the registry of this machine.
        RegistryKey rk = Registry.CurrentUser;

        // Print out the keys.
        PrintKeys(rk);
    }

    static void PrintKeys(RegistryKey rkey) {

        // Retrieve all the subkeys for the specified key.
        String [] names = rkey.GetSubKeyNames();

        int icount = 0;

        Console.WriteLine("Subkeys of " + rkey.Name);
        Console.WriteLine("-----------------------------------------------");

        // Print the contents of the array to the console.
        foreach (String s in names) {
            Console.WriteLine(s);

            // The following code puts a limit on the number
            // of keys displayed.  Comment it out to print the
            // complete list.
            icount++;
            if (icount >= 10)
                break;
        }
    }
}

using namespace System;
using namespace Microsoft::Win32;
void PrintKeys( RegistryKey ^ rkey )
{

   // Retrieve all the subkeys for the specified key.
   array<String^>^names = rkey->GetSubKeyNames();
   int icount = 0;
   Console::WriteLine( "Subkeys of {0}", rkey->Name );
   Console::WriteLine( "-----------------------------------------------" );

   // Print the contents of the array to the console.
   System::Collections::IEnumerator^ enum0 = names->GetEnumerator();
   while ( enum0->MoveNext() )
   {
      String^ s = safe_cast<String^>(enum0->Current);
      Console::WriteLine( s );

      // The following code puts a limit on the number
      // of keys displayed.  Comment it out to print the
      // complete list.
      icount++;
      if ( icount >= 10 )
            break;
   }
}

int main()
{

   // Create a RegistryKey, which will access the HKEY_CURRENT_USER
   // key in the registry of this machine.
   RegistryKey ^ rk = Registry::CurrentUser;

   // Print out the keys.
   PrintKeys( rk );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 类
Registry 成员
Microsoft.Win32 命名空间


Registry ..::.DynData 字段

Registry
.
.
::
.
DynData 字段
Registry 类

注意：此 API 现在已过时。

包含动态注册表数据。该字段读取 Windows 注册表基项 HKEY_DYN_DATA。 包含动态注册表数据。该字段读取 Windows 注册表基项 HKEY_DYN_DATA。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("The DynData registry key only works on Win9x, which is no longer supported by the CLR.  On NT-based operating systems, use the PerformanceData registry key instead.")> _
Public Shared ReadOnly DynData As RegistryKey
[ObsoleteAttribute("The DynData registry key only works on Win9x, which is no longer supported by the CLR.  On NT-based operating systems, use the PerformanceData registry key instead.")]
public static readonly RegistryKey DynData
[ObsoleteAttribute(L"The DynData registry key only works on Win9x, which is no longer supported by the CLR.  On NT-based operating systems, use the PerformanceData registry key instead.")]
public:
static initonly RegistryKey^ DynData
[<ObsoleteAttribute("The DynData registry key only works on Win9x, which is no longer supported by the CLR.  On NT-based operating systems, use the PerformanceData registry key instead.")>]
static val DynData: RegistryKey
异常 | 条件
ObjectDisposedException | 操作系统不支持动态数据，即操作系统非 Windows 98、Windows 98 Second Edition 或 Windows Millennium Edition。

Windows 98/Windows Me 注册表既支持静态数据（存储在磁盘上的注册表中），也支持动态数据（更改频繁的数据，如性能统计信息）。该动态数据区域是一种机制，允许虚拟设备驱动程序 (VxD) 向可以以本地方式和远程方式运行的 Win32 应用程序提供实时数据。它还允许系统监视器提供有关远程 Windows 98/Windows Me 系统的性能统计信息。 Windows 98/Windows Me 注册表既支持静态数据（存储在磁盘上的注册表中），也支持动态数据（更改频繁的数据，如性能统计信息）。该动态数据区域是一种机制，允许虚拟设备驱动程序 (VxD) 向可以以本地方式和远程方式运行的 Win32 应用程序提供实时数据。它还允许系统监视器提供有关远程 Windows 98/Windows Me 系统的性能统计信息。 Windows 98/Windows Me 注册表既支持静态数据（存储在磁盘上的注册表中），也支持动态数据（更改频繁的数据，如性能统计信息）。该动态数据区域是一种机制，允许虚拟设备驱动程序 (VxD) 向可以以本地方式和远程方式运行的 Win32 应用程序提供实时数据。它还允许系统监视器提供有关远程 Windows 98/Windows Me 系统的性能统计信息。

VxD 不局限于性能数据。它们可以提供希望有效地从 Ring 0 传递到 Ring 3 的任何数据而不会独占 CPU。注册表通过存储指向返回一个值（或多个值）的函数的指针来支持动态数据。当注册表调用查询与动态项关联的值时，会调用该函数以返回所需的一个或多个值。 VxD 不局限于性能数据。它们可以提供希望有效地从 Ring 0 传递到 Ring 3 的任何数据而不会独占 CPU。注册表通过存储指向返回一个值（或多个值）的函数的指针来支持动态数据。当注册表调用查询与动态项关联的值时，会调用该函数以返回所需的一个或多个值。 VxD 不局限于性能数据。它们可以提供希望有效地从 Ring 0 传递到 Ring 3 的任何数据而不会独占 CPU。注册表通过存储指向返回一个值（或多个值）的函数的指针来支持动态数据。当注册表调用查询与动态项关联的值时，会调用该函数以返回所需的一个或多个值。 VxD 不局限于性能数据。它们可以提供希望有效地从 Ring 0 传递到 Ring 3 的任何数据而不会独占 CPU。注册表通过存储指向返回一个值（或多个值）的函数的指针来支持动态数据。当注册表调用查询与动态项关联的值时，会调用该函数以返回所需的一个或多个值。

说明 说明

Microsoft Windows 95 中引入了动态项以处理动态注册表数据。它们只在 Windows 98/Windows Me 中受支持。 Microsoft Windows 95 中引入了动态项以处理动态注册表数据。它们只在 Windows 98/Windows Me 中受支持。

下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。请注意，该示例可能不返回任何结果，因为可能没有可用的动态数据，或者您运行的可能不是 Windows 98/ME。使用此项可能会导致其他系统出错。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。请注意，该示例可能不返回任何结果，因为可能没有可用的动态数据，或者您运行的可能不是 Windows 98/ME。使用此项可能会导致其他系统出错。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。请注意，该示例可能不返回任何结果，因为可能没有可用的动态数据，或者您运行的可能不是 Windows 98/ME。使用此项可能会导致其他系统出错。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。请注意，该示例可能不返回任何结果，因为可能没有可用的动态数据，或者您运行的可能不是 Windows 98/ME。使用此项可能会导致其他系统出错。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。请注意，该示例可能不返回任何结果，因为可能没有可用的动态数据，或者您运行的可能不是 Windows 98/ME。使用此项可能会导致其他系统出错。

Imports System
Imports Microsoft.Win32

Class Reg

    Public Shared Sub Main()

        ' Create a RegistryKey, which will access the HKEY_DYN_DATA
        ' key in the registry of this machine.
        Dim rk As RegistryKey = Registry.DynData

        ' Print out the keys.
        PrintKeys(rk)
    End Sub

    Shared Sub PrintKeys(rkey As RegistryKey)

        ' Retrieve all the subkeys for the specified key.
        Dim names As String()
        Try
            names = rkey.GetSubKeyNames()
        Catch ex As System.IO.IOException
            Console.WriteLine("HKEY_DYN_DATA is not available on this machine.")
            Exit Sub
        End Try

        Dim icount As Integer = 0

        Console.WriteLine("Subkeys of " & rkey.Name)
        Console.WriteLine("-----------------------------------------------")

        ' Print the contents of the array to the console.
        Dim s As String
        For Each s In  names
            Console.WriteLine(s)

            ' The following code puts a limit on the number
            ' of keys displayed.  Comment it out to print the
            ' complete list.
            icount += 1
            If icount >= 10 Then
                Exit For
            End If
        Next s
    End Sub
End Class

using System;
using Microsoft.Win32;

class Reg {
    public static void Main() {

        // Create a RegistryKey, which will access the HKEY_DYN_DATA
        // key in the registry of this machine.
        RegistryKey rk = Registry.DynData;

        // Print out the keys.
        PrintKeys(rk);
    }

    static void PrintKeys(RegistryKey rkey) {

        // Retrieve all the subkeys for the specified key.
        String [] names;
        try {
            names = rkey.GetSubKeyNames();
        }
        catch (System.IO.IOException e) {
            Console.WriteLine("HKEY_DYN_DATA is not available on this machine.");
            return;
        }

        int icount = 0;

        Console.WriteLine("Subkeys of " + rkey.Name);
        Console.WriteLine("-----------------------------------------------");

        // Print the contents of the array to the console.
        foreach (String s in names) {
            Console.WriteLine(s);

            // The following code puts a limit on the number
            // of keys displayed.  Comment it out to print the
            // complete list.
            icount++;
            if (icount >= 10)
                break;
        }
    }
}

using namespace System;
using namespace Microsoft::Win32;
void PrintKeys( RegistryKey ^ rkey )
{

   // Retrieve all the subkeys for the specified key.
   array<String^>^names;
   try
   {
      names = rkey->GetSubKeyNames();
   }
   catch ( System::IO::IOException^ )
   {
      Console::WriteLine( "HKEY_DYN_DATA is not available on this machine." );
      return;
   }

   int icount = 0;
   Console::WriteLine( "Subkeys of {0}", rkey->Name );
   Console::WriteLine( "-----------------------------------------------" );

   // Print the contents of the array to the console.
   System::Collections::IEnumerator^ enum0 = names->GetEnumerator();
   while ( enum0->MoveNext() )
   {
      String^ s = safe_cast<String^>(enum0->Current);
      Console::WriteLine( s );

      // The following code puts a limit on the number
      // of keys displayed.  Comment it out to print the
      // complete list.
      icount++;
      if ( icount >= 10 )
            break;
   }
}

int main()
{

   // Create a RegistryKey, which will access the HKEY_DYN_DATA
   // key in the registry of this machine.
   RegistryKey ^ rk = Registry::DynData;

   // Print out the keys.
   PrintKeys( rk );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

Registry 类
Registry 成员
Microsoft.Win32 命名空间


Registry ..::.LocalMachine 字段

Registry
.
.
::
.
LocalMachine 字段
Registry 类

包含本地计算机的配置数据。该字段读取 Windows 注册表基项 HKEY_LOCAL_MACHINE。 包含本地计算机的配置数据。该字段读取 Windows 注册表基项 HKEY_LOCAL_MACHINE。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly LocalMachine As RegistryKey
public static readonly RegistryKey LocalMachine
public:
static initonly RegistryKey^ LocalMachine
static val LocalMachine: RegistryKey

LocalMachine 包含 5 个项：

硬件

描述计算机中的物理硬件、设备驱动程序使用该硬件的方式，以及链接核心模式驱动程序与用户模式代码的映射及相关数据。每次启动系统时都会重新创建此项中的所有数据。Description 子项描述实际的计算机硬件。DeviceMap 子项以特定于具体驱动程序类别的格式包含杂项数据。ResourceMap 子项描述什么设备驱动程序需要什么硬件资源。Windows NT 诊断程序 (Winmsdp.exe) 可以以容易阅读的形式报告它的内容。 描述计算机中的物理硬件、设备驱动程序使用该硬件的方式，以及链接核心模式驱动程序与用户模式代码的映射及相关数据。每次启动系统时都会重新创建此项中的所有数据。Description 子项描述实际的计算机硬件。DeviceMap 子项以特定于具体驱动程序类别的格式包含杂项数据。ResourceMap 子项描述什么设备驱动程序需要什么硬件资源。Windows NT 诊断程序 (Winmsdp.exe) 可以以容易阅读的形式报告它的内容。 描述计算机中的物理硬件、设备驱动程序使用该硬件的方式，以及链接核心模式驱动程序与用户模式代码的映射及相关数据。每次启动系统时都会重新创建此项中的所有数据。Description 子项描述实际的计算机硬件。DeviceMap 子项以特定于具体驱动程序类别的格式包含杂项数据。ResourceMap 子项描述什么设备驱动程序需要什么硬件资源。Windows NT 诊断程序 (Winmsdp.exe) 可以以容易阅读的形式报告它的内容。 描述计算机中的物理硬件、设备驱动程序使用该硬件的方式，以及链接核心模式驱动程序与用户模式代码的映射及相关数据。每次启动系统时都会重新创建此项中的所有数据。Description 子项描述实际的计算机硬件。DeviceMap 子项以特定于具体驱动程序类别的格式包含杂项数据。ResourceMap 子项描述什么设备驱动程序需要什么硬件资源。Windows NT 诊断程序 (Winmsdp.exe) 可以以容易阅读的形式报告它的内容。 描述计算机中的物理硬件、设备驱动程序使用该硬件的方式，以及链接核心模式驱动程序与用户模式代码的映射及相关数据。每次启动系统时都会重新创建此项中的所有数据。Description 子项描述实际的计算机硬件。DeviceMap 子项以特定于具体驱动程序类别的格式包含杂项数据。ResourceMap 子项描述什么设备驱动程序需要什么硬件资源。Windows NT 诊断程序 (Winmsdp.exe) 可以以容易阅读的形式报告它的内容。 描述计算机中的物理硬件、设备驱动程序使用该硬件的方式，以及链接核心模式驱动程序与用户模式代码的映射及相关数据。每次启动系统时都会重新创建此项中的所有数据。Description 子项描述实际的计算机硬件。DeviceMap 子项以特定于具体驱动程序类别的格式包含杂项数据。ResourceMap 子项描述什么设备驱动程序需要什么硬件资源。Windows NT 诊断程序 (Winmsdp.exe) 可以以容易阅读的形式报告它的内容。

SAM

用户与组帐户以及 Windows 2000 Server 中的域的安全信息的目录服务数据库（SAM 即 Security Account Manager（安全帐户管理器），称为目录服务数据库）。

安全性

包含本地安全策略，如特定的用户权利。此项仅由 Windows 2000 安全子系统使用。 包含本地安全策略，如特定的用户权利。此项仅由 Windows 2000 安全子系统使用。

软件

每台计算机的软件数据库。此项包含有关本地计算机上安装的软件的数据，以及各种杂项配置数据项。 每台计算机的软件数据库。此项包含有关本地计算机上安装的软件的数据，以及各种杂项配置数据项。

System

控制系统启动、设备驱动程序加载、Windows 2000 服务和操作系统行为。

按照约定，如果 CurrentUser 中和 LocalMachine 中存在相似的数据，则 CurrentUser 中的数据优先。但是，此项中的值还可以扩展（而不是替换）Registry.LocalMachine 中的数据。此外，如果某些项（如设备驱动程序加载项）在 Registry.LocalMachine 以外发生，则这些项毫无意义。 按照约定，如果 CurrentUser 中和 LocalMachine 中存在相似的数据，则 CurrentUser 中的数据优先。但是，此项中的值还可以扩展（而不是替换）Registry.LocalMachine 中的数据。此外，如果某些项（如设备驱动程序加载项）在 Registry.LocalMachine 以外发生，则这些项毫无意义。 按照约定，如果 CurrentUser 中和 LocalMachine 中存在相似的数据，则 CurrentUser 中的数据优先。但是，此项中的值还可以扩展（而不是替换）Registry.LocalMachine 中的数据。此外，如果某些项（如设备驱动程序加载项）在 Registry.LocalMachine 以外发生，则这些项毫无意义。

下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。

Imports System
Imports Microsoft.Win32

Class Reg

    Public Shared Sub Main()

        ' Create a RegistryKey, which will access the HKEY_LOCAL_MACHINE
        ' key in the registry of this machine.
        Dim rk As RegistryKey = Registry.LocalMachine

        ' Print out the keys.
        PrintKeys(rk)
    End Sub

    Shared Sub PrintKeys(rkey As RegistryKey)

        ' Retrieve all the subkeys for the specified key.
        Dim names As String() = rkey.GetSubKeyNames()

        Dim icount As Integer = 0

        Console.WriteLine("Subkeys of " & rkey.Name)
        Console.WriteLine("-----------------------------------------------")

        ' Print the contents of the array to the console.
        Dim s As String
        For Each s In  names
            Console.WriteLine(s)

            ' The following code puts a limit on the number
            ' of keys displayed.  Comment it out to print the
            ' complete list.
            icount += 1
            If icount >= 10 Then
                Exit For
            End If
        Next s
    End Sub
End Class

using System;
using Microsoft.Win32;

class Reg {
    public static void Main() {

        // Create a RegistryKey, which will access the HKEY_LOCAL_MACHINE
        // key in the registry of this machine.
         RegistryKey rk = Registry.LocalMachine;

        // Print out the keys.
        PrintKeys(rk);
    }

    static void PrintKeys(RegistryKey rkey) {

        // Retrieve all the subkeys for the specified key.
        String [] names = rkey.GetSubKeyNames();

        int icount = 0;

        Console.WriteLine("Subkeys of " + rkey.Name);
        Console.WriteLine("-----------------------------------------------");

        // Print the contents of the array to the console.
        foreach (String s in names) {
            Console.WriteLine(s);

            // The following code puts a limit on the number
            // of keys displayed.  Comment it out to print the
            // complete list.
            icount++;
            if (icount >= 10)
                break;
        }
    }
}

using namespace System;
using namespace Microsoft::Win32;
void PrintKeys( RegistryKey ^ rkey )
{

   // Retrieve all the subkeys for the specified key.
   array<String^>^names = rkey->GetSubKeyNames();
   int icount = 0;
   Console::WriteLine( "Subkeys of {0}", rkey->Name );
   Console::WriteLine( "-----------------------------------------------" );

   // Print the contents of the array to the console.
   System::Collections::IEnumerator^ enum0 = names->GetEnumerator();
   while ( enum0->MoveNext() )
   {
      String^ s = safe_cast<String^>(enum0->Current);
      Console::WriteLine( s );

      // The following code puts a limit on the number
      // of keys displayed.  Comment it out to print the
      // complete list.
      icount++;
      if ( icount >= 10 )
            break;
   }
}

int main()
{

   // Create a RegistryKey, which will access the HKEY_LOCAL_MACHINE
   // key in the registry of this machine.
   RegistryKey ^ rk = Registry::LocalMachine;

   // Print out the keys.
   PrintKeys( rk );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 类
Registry 成员
Microsoft.Win32 命名空间


Registry ..::.PerformanceData 字段

Registry
.
.
::
.
PerformanceData 字段
Registry 类

包含软件组件的性能信息。该字段读取 Windows 注册表基项 HKEY_PERFORMANCE_DATA。 包含软件组件的性能信息。该字段读取 Windows 注册表基项 HKEY_PERFORMANCE_DATA。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly PerformanceData As RegistryKey
public static readonly RegistryKey PerformanceData
public:
static initonly RegistryKey^ PerformanceData
static val PerformanceData: RegistryKey

每个软件组件为它的对象创建项、在安装时为计数器创建项，并在执行时写入计数器数据。可以使用 RegistryKey 函数，像访问任何其他注册表数据那样访问这些数据。 每个软件组件为它的对象创建项、在安装时为计数器创建项，并在执行时写入计数器数据。可以使用 RegistryKey 函数，像访问任何其他注册表数据那样访问这些数据。

虽然使用注册表来收集性能数据，但数据并不存储在注册表数据库中。相反，使用此项访问注册表会使系统从适当的系统对象管理器收集数据。 虽然使用注册表来收集性能数据，但数据并不存储在注册表数据库中。相反，使用此项访问注册表会使系统从适当的系统对象管理器收集数据。

若要从本地系统获取性能数据，请用 Registry.PerformanceData 项调用 GetValue 方法。第一次调用将打开此项（不需要首先显式打开此项）。不过，在完成获取性能数据后，务必要使用 Close 方法关闭此项的句柄。当软件组件的性能数据正在被使用时，用户无法安装或移除软件组件。 若要从本地系统获取性能数据，请用 Registry.PerformanceData 项调用 GetValue 方法。第一次调用将打开此项（不需要首先显式打开此项）。不过，在完成获取性能数据后，务必要使用 Close 方法关闭此项的句柄。当软件组件的性能数据正在被使用时，用户无法安装或移除软件组件。 若要从本地系统获取性能数据，请用 Registry.PerformanceData 项调用 GetValue 方法。第一次调用将打开此项（不需要首先显式打开此项）。不过，在完成获取性能数据后，务必要使用 Close 方法关闭此项的句柄。当软件组件的性能数据正在被使用时，用户无法安装或移除软件组件。 若要从本地系统获取性能数据，请用 Registry.PerformanceData 项调用 GetValue 方法。第一次调用将打开此项（不需要首先显式打开此项）。不过，在完成获取性能数据后，务必要使用 Close 方法关闭此项的句柄。当软件组件的性能数据正在被使用时，用户无法安装或移除软件组件。

若要从远程系统获取性能数据，则必须用远程系统的计算机名和 Registry.PerformanceData 项调用 OpenRemoteBaseKey 方法。该调用检索表示远程系统性能数据的项。若要检索数据，请使用此项而不是 Registry.PerformanceData 项调用 GetValue。 若要从远程系统获取性能数据，则必须用远程系统的计算机名和 Registry.PerformanceData 项调用 OpenRemoteBaseKey 方法。该调用检索表示远程系统性能数据的项。若要检索数据，请使用此项而不是 Registry.PerformanceData 项调用 GetValue。 若要从远程系统获取性能数据，则必须用远程系统的计算机名和 Registry.PerformanceData 项调用 OpenRemoteBaseKey 方法。该调用检索表示远程系统性能数据的项。若要检索数据，请使用此项而不是 Registry.PerformanceData 项调用 GetValue。

说明 说明

在 Windows Server 2003 上，用户必须至少属于 Performance Monitor Users 组才能访问此基项的子项。

下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。注意，该示例通常可能不返回结果，原因是可能没有性能数据。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。注意，该示例通常可能不返回结果，原因是可能没有性能数据。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。注意，该示例通常可能不返回结果，原因是可能没有性能数据。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。注意，该示例通常可能不返回结果，原因是可能没有性能数据。

Imports System
Imports Microsoft.Win32

Class Reg

    Public Shared Sub Main()

        ' Create a RegistryKey, which will access the HKEY_PERFORMANCE_DATA
        ' key in the registry of this machine.
        Dim rk As RegistryKey = Registry.PerformanceData

        ' Print out the keys.
        PrintKeys(rk)
    End Sub

    Shared Sub PrintKeys(rkey As RegistryKey)

        ' Retrieve all the subkeys for the specified key.
        Dim names As String() = rkey.GetSubKeyNames()

        Dim icount As Integer = 0

        Console.WriteLine("Subkeys of " & rkey.Name)
        Console.WriteLine("-----------------------------------------------")

        ' Print the contents of the array to the console.
        Dim s As String
        For Each s In  names
            Console.WriteLine(s)

            ' The following code puts a limit on the number
            ' of keys displayed.  Comment it out to print the
            ' complete list.
            icount += 1
            If icount >= 10 Then
                Exit For
            End If
        Next s
    End Sub
End Class

using System;
using Microsoft.Win32;

class Reg {
    public static void Main() {

        // Create a RegistryKey, which will access the HKEY_PERFORMANCE_DATA
        // key in the registry of this machine.
        RegistryKey rk = Registry.PerformanceData;

        // Print out the keys.
        PrintKeys(rk);
    }

    static void PrintKeys(RegistryKey rkey) {

        // Retrieve all the subkeys for the specified key.
        String [] names = rkey.GetSubKeyNames();

        int icount = 0;

        Console.WriteLine("Subkeys of " + rkey.Name);
        Console.WriteLine("-----------------------------------------------");

        // Print the contents of the array to the console.
        foreach (String s in names) {
            Console.WriteLine(s);

            // The following code puts a limit on the number
            // of keys displayed.  Comment it out to print the
            // complete list.
            icount++;
            if (icount >= 10)
                break;
        }
    }
}

using namespace System;
using namespace Microsoft::Win32;
void PrintKeys( RegistryKey ^ rkey )
{

   // Retrieve all the subkeys for the specified key.
   array<String^>^names = rkey->GetSubKeyNames();
   int icount = 0;
   Console::WriteLine( "Subkeys of {0}", rkey->Name );
   Console::WriteLine( "-----------------------------------------------" );

   // Print the contents of the array to the console.
   System::Collections::IEnumerator^ enum0 = names->GetEnumerator();
   while ( enum0->MoveNext() )
   {
      String^ s = safe_cast<String^>(enum0->Current);
      Console::WriteLine( s );

      // The following code puts a limit on the number
      // of keys displayed.  Comment it out to print the
      // complete list.
      icount++;
      if ( icount >= 10 )
            break;
   }
}

int main()
{

   // Create a RegistryKey, which will access the HKEY_PERFORMANCE_DATA
   // key in the registry of this machine.
   RegistryKey ^ rk = Registry::PerformanceData;

   // Print out the keys.
   PrintKeys( rk );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 类
Registry 成员
Microsoft.Win32 命名空间


Registry ..::.Users 字段

Registry
.
.
::
.
Users 字段
Registry 类

包含有关默认用户配置的信息。该字段读取 Windows 注册表基项 HKEY_USERS。 包含有关默认用户配置的信息。该字段读取 Windows 注册表基项 HKEY_USERS。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Users As RegistryKey
public static readonly RegistryKey Users
public:
static initonly RegistryKey^ Users
static val Users: RegistryKey

此项为每个计算机用户包含一个分支。为本地计算机上的新用户和默认当前用户（如果没有更改首选项）提供了默认配置。由于 Windows 98/ME 还支持 Registry.Users，应用程序可以象在 Windows 2000 中一样访问用户特定的信息。每个用户的信息存储在单独的文件中，该文件可以本地存储或存储在网络服务器上。Windows 98/ME 可以将此文件复制到用户的当前系统，以便设置可以随用户从一台计算机移动到另一台计算机。 此项为每个计算机用户包含一个分支。为本地计算机上的新用户和默认当前用户（如果没有更改首选项）提供了默认配置。由于 Windows 98/ME 还支持 Registry.Users，应用程序可以象在 Windows 2000 中一样访问用户特定的信息。每个用户的信息存储在单独的文件中，该文件可以本地存储或存储在网络服务器上。Windows 98/ME 可以将此文件复制到用户的当前系统，以便设置可以随用户从一台计算机移动到另一台计算机。 此项为每个计算机用户包含一个分支。为本地计算机上的新用户和默认当前用户（如果没有更改首选项）提供了默认配置。由于 Windows 98/ME 还支持 Registry.Users，应用程序可以象在 Windows 2000 中一样访问用户特定的信息。每个用户的信息存储在单独的文件中，该文件可以本地存储或存储在网络服务器上。Windows 98/ME 可以将此文件复制到用户的当前系统，以便设置可以随用户从一台计算机移动到另一台计算机。 此项为每个计算机用户包含一个分支。为本地计算机上的新用户和默认当前用户（如果没有更改首选项）提供了默认配置。由于 Windows 98/ME 还支持 Registry.Users，应用程序可以象在 Windows 2000 中一样访问用户特定的信息。每个用户的信息存储在单独的文件中，该文件可以本地存储或存储在网络服务器上。Windows 98/ME 可以将此文件复制到用户的当前系统，以便设置可以随用户从一台计算机移动到另一台计算机。 此项为每个计算机用户包含一个分支。为本地计算机上的新用户和默认当前用户（如果没有更改首选项）提供了默认配置。由于 Windows 98/ME 还支持 Registry.Users，应用程序可以象在 Windows 2000 中一样访问用户特定的信息。每个用户的信息存储在单独的文件中，该文件可以本地存储或存储在网络服务器上。Windows 98/ME 可以将此文件复制到用户的当前系统，以便设置可以随用户从一台计算机移动到另一台计算机。

下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。 下面的示例说明如何检索此项的子项，以及如何将它们的名称输出到屏幕。使用 OpenSubKey 方法创建相关的特定子项的实例。然后可使用 RegistryKey 中的其他操作操作该项。

Imports System
Imports Microsoft.Win32

Class Reg

    Public Shared Sub Main()

        ' Create a RegistryKey, which will access the HKEY_USERS
        ' key in the registry of this machine.
        Dim rk As RegistryKey = Registry.Users

        ' Print out the keys.
        PrintKeys(rk)
    End Sub

    Shared Sub PrintKeys(rkey As RegistryKey)

        ' Retrieve all the subkeys for the specified key.
        Dim names As String() = rkey.GetSubKeyNames()

        Dim icount As Integer = 0

        Console.WriteLine("Subkeys of " & rkey.Name)
        Console.WriteLine("-----------------------------------------------")

        ' Print the contents of the array to the console.
        Dim s As String
        For Each s In  names
            Console.WriteLine(s)

            ' The following code puts a limit on the number
            ' of keys displayed.  Comment it out to print the
            ' complete list.
            icount += 1
            If icount >= 10 Then
                Exit For
            End If
        Next s
    End Sub
End Class

using System;
using Microsoft.Win32;

class Reg {
    public static void Main() {

        // Create a RegistryKey, which will access the HKEY_USERS
        // key in the registry of this machine.
        RegistryKey rk = Registry.Users;

        // Print out the keys.
        PrintKeys(rk);
    }

    static void PrintKeys(RegistryKey rkey) {

        // Retrieve all the subkeys for the specified key.
        String [] names = rkey.GetSubKeyNames();

        int icount = 0;

        Console.WriteLine("Subkeys of " + rkey.Name);
        Console.WriteLine("-----------------------------------------------");

        // Print the contents of the array to the console.
        foreach (String s in names) {
            Console.WriteLine(s);

            // The following code puts a limit on the number
            // of keys displayed.  Comment it out to print the
            // complete list.
            icount++;
            if (icount >= 10)
                break;
        }
    }
}

using namespace System;
using namespace Microsoft::Win32;
void PrintKeys( RegistryKey ^ rkey )
{

   // Retrieve all the subkeys for the specified key.
   array<String^>^names = rkey->GetSubKeyNames();
   int icount = 0;
   Console::WriteLine( "Subkeys of {0}", rkey->Name );
   Console::WriteLine( "-----------------------------------------------" );

   // Print the contents of the array to the console.
   System::Collections::IEnumerator^ enum0 = names->GetEnumerator();
   while ( enum0->MoveNext() )
   {
      String^ s = safe_cast<String^>(enum0->Current);
      Console::WriteLine( s );

      // The following code puts a limit on the number
      // of keys displayed.  Comment it out to print the
      // complete list.
      icount++;
      if ( icount >= 10 )
            break;
   }
}

int main()
{

   // Create a RegistryKey, which will access the HKEY_USERS
   // key in the registry of this machine.
   RegistryKey ^ rk = Registry::Users;

   // Print out the keys.
   PrintKeys( rk );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 类
Registry 成员
Microsoft.Win32 命名空间


Registry 方法

Registry 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Registry 类

Registry 类型公开以下成员。

名称 说明
页首

参考

Registry 类
Microsoft.Win32 命名空间


Registry ..::.GetValue 方法

Registry
.
.
::
.
GetValue 方法
Registry 类

检索与指定的注册表项中的指定名称关联的值。如果在指定的项中未找到该名称，则返回您提供的默认值；或者，如果指定的项不存在，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 检索与指定的注册表项中的指定名称关联的值。如果在指定的项中未找到该名称，则返回您提供的默认值；或者，如果指定的项不存在，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetValue ( _
    keyName As String, _
    valueName As String, _
    defaultValue As Object _
) As Object
public static Object GetValue(
    string keyName,
    string valueName,
    Object defaultValue
)
public:
static Object^ GetValue(
    String^ keyName,
    String^ valueName,
    Object^ defaultValue
)
static member GetValue :
        keyName:string *
        valueName:string *
        defaultValue:Object -> Object

参数

keyName
类型： System String
以有效注册表根（如“HKEY_CURRENT_USER”）开头的键的完整注册表路径。
valueName
类型： System String
名称/值对的名称。
defaultValue
类型： System Object
当 valueName 不存在时返回的值。

返回值

类型： System Object
如果由 keyName 指定的子项不存在，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）；否则，返回与 valueName 关联的值；或者，如果未找到 valueName，则返回 defaultValue。
异常 | 条件
SecurityException | 该用户没有读取注册表项所需的权限。
IOException | 包含指定值的 RegistryKey 已标记为删除。
ArgumentException | keyName 未以有效注册表根开头。

字符串 valueName 不区分大小写。

说明 说明

注册表项可以含有一个与任何名称均无关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要检索这个未命名的值，请为 valuName 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可以含有一个与任何名称均无关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要检索这个未命名的值，请为 valuName 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可以含有一个与任何名称均无关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要检索这个未命名的值，请为 valuName 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。

有效的根名称有 HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_CLASSES_ROOT、HKEY_USERS、HKEY_PERFORMANCE_DATA、HKEY_CURRENT_CONFIG 和 HKEY_DYN_DATA。例如，在 Visual Basic 中，字符串“HKEY_CURRENT_USER\MyTestKey”访问 HKEY_CURRENT_USER 根下的子项“MyTestKey”的项/值对。 有效的根名称有 HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_CLASSES_ROOT、HKEY_USERS、HKEY_PERFORMANCE_DATA、HKEY_CURRENT_CONFIG 和 HKEY_DYN_DATA。例如，在 Visual Basic 中，字符串“HKEY_CURRENT_USER\MyTestKey”访问 HKEY_CURRENT_USER 根下的子项“MyTestKey”的项/值对。

当 GetValue 方法检索可扩展字符串值 (RegistryValueKind..::.ExpandString) 时，它使用本地环境中的数据扩展环境字符串。如果某个包含环境变量的可扩展引用的值已存储为字符串 (RegistryValueKind..::.String)，而不是可扩展字符串 (RegistryValueKind..::.ExpandString)，则 GetValue 不会扩展该值。可以通过调用 Environment..::.ExpandEnvironmentVariables 方法扩展检索到的此类字符串。 当 GetValue 方法检索可扩展字符串值 (RegistryValueKind..::.ExpandString) 时，它使用本地环境中的数据扩展环境字符串。如果某个包含环境变量的可扩展引用的值已存储为字符串 (RegistryValueKind..::.String)，而不是可扩展字符串 (RegistryValueKind..::.ExpandString)，则 GetValue 不会扩展该值。可以通过调用 Environment..::.ExpandEnvironmentVariables 方法扩展检索到的此类字符串。 当 GetValue 方法检索可扩展字符串值 (RegistryValueKind..::.ExpandString) 时，它使用本地环境中的数据扩展环境字符串。如果某个包含环境变量的可扩展引用的值已存储为字符串 (RegistryValueKind..::.String)，而不是可扩展字符串 (RegistryValueKind..::.ExpandString)，则 GetValue 不会扩展该值。可以通过调用 Environment..::.ExpandEnvironmentVariables 方法扩展检索到的此类字符串。

说明 说明

从 HKEY_PERFORMANCE_DATA 检索数据的推荐方式是使用 PerformanceCounter 类，而不是使用 RegistryKey..::.GetValue 方法。

每次使用 GetValue 和 SetValue 方法时，它们都打开和关闭注册表项，因此，如果访问大量值，使用这两种方法就不如使用 RegistryKey 类的方法。

RegistryKey 还提供了可用来将访问控制列表 (ACL) 添加给注册表项的方法、在检索某个值之前测试其数据类型的方法和删除项的方法。

下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。 下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。

Imports System
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' The name of the key must include a valid root.
        Const userRoot As String = "HKEY_CURRENT_USER"
        Const subkey As String = "RegistrySetValueExample"
        Const keyName As String = userRoot & "\" & subkey

        ' Integer values can be stored without specifying the
        ' registry data type, but Long values will be stored
        ' as strings unless you specify the type. Note that
        ' the integer is stored in the default name/value
        ' pair.
        Registry.SetValue(keyName, "", 5280)
        Registry.SetValue(keyName, "TestLong", 12345678901234, _
            RegistryValueKind.QWord)

        ' Strings with expandable environment variables are
        ' stored as ordinary strings unless you specify the
        ' data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%")
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%", _
            RegistryValueKind.ExpandString)

        ' Arrays of strings are stored automatically as
        ' MultiString. Similarly, arrays of Byte are stored
        ' automatically as Binary.
        Dim strings() As String = {"One", "Two", "Three"}
        Registry.SetValue(keyName, "TestArray", strings)

        ' Your default value is returned if the name/value pair
        ' does not exist.
        Dim noSuch As String = _
            Registry.GetValue(keyName, "NoSuchName", _
            "Return this default if NoSuchName does not exist.")
        Console.WriteLine(vbCrLf & "NoSuchName: {0}", noSuch)

        ' Retrieve the Integer and Long values, specifying
        ' numeric default values in case the name/value pairs
        ' do not exist. The Integer value is retrieved from the
        ' default (nameless) name/value pair for the key.
        Dim tInteger As Integer = _
            Registry.GetValue(keyName, "", -1)
        Console.WriteLine("(Default): {0}", tInteger)
        Dim tLong As Long = Registry.GetValue(keyName, _
             "TestLong", Long.MinValue)
        Console.WriteLine("TestLong: {0}", tLong)

        ' When retrieving a MultiString value, you can specify
        ' an array for the default return value. The value is
        ' declared inline, but could also be declared as:
        ' Dim default() As String = {"Default value."}
        '
        Dim tArray() As String = _
            Registry.GetValue(keyName, "TestArray", _
            New String() {"Default if TestArray does not exist."})
        For i As Integer = 0 To tArray.Length - 1
            Console.WriteLine("TestArray({0}): {1}", i, tArray(i))
        Next

        ' A string with embedded environment variables is not
        ' expanded if it was stored as an ordinary string.
        Dim tExpand As String = Registry.GetValue(keyName, _
             "TestExpand", "Default if TestExpand does not exist.")
        Console.WriteLine("TestExpand: {0}", tExpand)

        ' A string stored as ExpandString is expanded.
        Dim tExpand2 As String = Registry.GetValue(keyName, _
             "TestExpand2", "Default if TestExpand2 does not exist.")
        Console.WriteLine("TestExpand2: {0}...", _
            tExpand2.Substring(0, 40))

        Console.WriteLine(vbCrLf & _
            "Use the registry editor to examine the key.")
        Console.WriteLine("Press the Enter key to delete the key.")
        Console.ReadLine()
        Registry.CurrentUser.DeleteSubKey(subkey)
    End Sub
End Class
'
' This code example produces output similar to the following:
'
'NoSuchName: Return this default if NoSuchName does not exist.
'(Default): 5280
'TestLong: 12345678901234
'TestArray(0): One
'TestArray(1): Two
'TestArray(2): Three
'TestExpand: My path: %path%
'TestExpand2: My path: D:\Program Files\Microsoft.NET\...
'
'Use the registry editor to examine the key.
'Press the Enter key to delete the key.

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // The name of the key must include a valid root.
        const string userRoot = "HKEY_CURRENT_USER";
        const string subkey = "RegistrySetValueExample";
        const string keyName = userRoot + "\\" + subkey;

        // An int value can be stored without specifying the
        // registry data type, but long values will be stored
        // as strings unless you specify the type. Note that
        // the int is stored in the default name/value
        // pair.
        Registry.SetValue(keyName, "", 5280);
        Registry.SetValue(keyName, "TestLong", 12345678901234,
            RegistryValueKind.QWord);

        // Strings with expandable environment variables are
        // stored as ordinary strings unless you specify the
        // data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%");
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%",
            RegistryValueKind.ExpandString);

        // Arrays of strings are stored automatically as
        // MultiString. Similarly, arrays of Byte are stored
        // automatically as Binary.
        string[] strings = {"One", "Two", "Three"};
        Registry.SetValue(keyName, "TestArray", strings);

        // Your default value is returned if the name/value pair
        // does not exist.
        string noSuch = (string) Registry.GetValue(keyName,
            "NoSuchName",
            "Return this default if NoSuchName does not exist.");
        Console.WriteLine("\r\nNoSuchName: {0}", noSuch);

        // Retrieve the int and long values, specifying
        // numeric default values in case the name/value pairs
        // do not exist. The int value is retrieved from the
        // default (nameless) name/value pair for the key.
        int tInteger = (int) Registry.GetValue(keyName, "", -1);
        Console.WriteLine("(Default): {0}", tInteger);
        long tLong = (long) Registry.GetValue(keyName, "TestLong",
            long.MinValue);
        Console.WriteLine("TestLong: {0}", tLong);

        // When retrieving a MultiString value, you can specify
        // an array for the default return value.
        string[] tArray = (string[]) Registry.GetValue(keyName,
            "TestArray",
            new string[] {"Default if TestArray does not exist."});
        for(int i=0; i<tArray.Length; i++)
        {
            Console.WriteLine("TestArray({0}): {1}", i, tArray[i]);
        }

        // A string with embedded environment variables is not
        // expanded if it was stored as an ordinary string.
        string tExpand = (string) Registry.GetValue(keyName,
             "TestExpand",
             "Default if TestExpand does not exist.");
        Console.WriteLine("TestExpand: {0}", tExpand);

        // A string stored as ExpandString is expanded.
        string tExpand2 = (string) Registry.GetValue(keyName,
            "TestExpand2",
            "Default if TestExpand2 does not exist.");
        Console.WriteLine("TestExpand2: {0}...",
            tExpand2.Substring(0, 40));

        Console.WriteLine("\r\nUse the registry editor to examine the key.");
        Console.WriteLine("Press the Enter key to delete the key.");
        Console.ReadLine();
        Registry.CurrentUser.DeleteSubKey(subkey);
    }
}
//
// This code example produces output similar to the following:
//
//NoSuchName: Return this default if NoSuchName does not exist.
//(Default): 5280
//TestLong: 12345678901234
//TestArray(0): One
//TestArray(1): Two
//TestArray(2): Three
//TestExpand: My path: %path%
//TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
//Use the registry editor to examine the key.
//Press the Enter key to delete the key.

using namespace System;
using namespace Microsoft::Win32;

int main()
{
    // The name of the key must include a valid root.
    String^ userRoot = "HKEY_CURRENT_USER";
    String^ subKey = "RegistrySetValueExample2";
    String^ keyName = String::Concat(userRoot, "\\", subKey);

    // An int value can be stored without specifying the
    // registry data type, but Int64 values will be stored
    // as strings unless you specify the type. Note that
    // the int is stored in the default name/value
    // pair.
    Registry::SetValue(keyName, "", 5280);
    Registry::SetValue(keyName, "TestInt64", 12345678901234,
        RegistryValueKind::QWord);

    // Strings with expandable environment variables are
    // stored as ordinary strings unless you specify the
    // data type.
    Registry::SetValue(keyName, "TestExpand", "My path: %path%");
    Registry::SetValue(keyName, "TestExpand2", "My path: %path%",
        RegistryValueKind::ExpandString);

    // Arrays of strings are stored automatically as
    // MultiString. Similarly, arrays of Byte are stored
    // automatically as Binary.
    array<String^>^ strings  = {"One", "Two", "Three"};
    Registry::SetValue(keyName, "TestArray", strings);

    // Your default value is returned if the name/value pair
    // does not exist.
    String^ noSuch = (String^)Registry::GetValue(keyName,
        "NoSuchName",
        "Return this default if NoSuchName does not exist.");
    Console::WriteLine("\r\nNoSuchName: {0}", noSuch);

    // Retrieve the int and Int64 values, specifying
    // numeric default values in case the name/value pairs
    // do not exist. The int value is retrieved from the
    // default (nameless) name/value pair for the key.
    int testInteger = (int)Registry::GetValue(keyName, "", -1);
    Console::WriteLine("(Default): {0}", testInteger);
    long long testInt64 = (long long)Registry::GetValue(keyName,
        "TestInt64", System::Int64::MinValue);
    Console::WriteLine("TestInt64: {0}", testInt64);

    // When retrieving a MultiString value, you can specify
    // an array for the default return value.
    array<String^>^ testArray = (array<String^>^)Registry::GetValue(
        keyName, "TestArray",
        gcnew array<String^> {"Default if TestArray does not exist."});
    for (int i = 0; i < testArray->Length; i++)
    {
        Console::WriteLine("TestArray({0}): {1}", i, testArray[i]);
    }

    // A string with embedded environment variables is not
    // expanded if it was stored as an ordinary string.
    String^ testExpand = (String^)Registry::GetValue(keyName,
        "TestExpand", "Default if TestExpand does not exist.");
    Console::WriteLine("TestExpand: {0}", testExpand);

    // A string stored as ExpandString is expanded.
    String^ testExpand2 = (String^)Registry::GetValue(keyName,
        "TestExpand2", "Default if TestExpand2 does not exist.");
    Console::WriteLine(
        "TestExpand2: {0}...", testExpand2->Substring(0, 40));
    Console::WriteLine(
        "\r\nUse the registry editor to examine the key.");
    Console::WriteLine("Press the Enter key to delete the key.");
    Console::ReadLine();
    Registry::CurrentUser->DeleteSubKey(subKey);
}
//
// This code example produces output similar to the following:
//
// NoSuchName: Return this default if NoSuchName does not exist.
// (Default): 5280
// TestInt64: 12345678901234
// TestArray(0): One
// TestArray(1): Two
// TestArray(2): Three
// TestExpand: My path: %path%
// TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
// Use the registry editor to examine the key.
// Press the Enter key to delete the key.
  • RegistryPermission

    用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read 用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read

  • EnvironmentPermission

    以读取类型为 REG_EXPAND_SZ 的注册表项。关联的枚举：PermissionState..::.Unrestricted 以读取类型为 REG_EXPAND_SZ 的注册表项。关联的枚举：PermissionState..::.Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 类
Registry 成员
Microsoft.Win32 命名空间


Registry ..::.SetValue 方法

Registry
.
.
::
.
SetValue 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Registry 类

设置注册表项中的名称/值对的值。

名称 说明
页首

下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。 下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。

Imports System
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' The name of the key must include a valid root.
        Const userRoot As String = "HKEY_CURRENT_USER"
        Const subkey As String = "RegistrySetValueExample"
        Const keyName As String = userRoot & "\" & subkey

        ' Integer values can be stored without specifying the
        ' registry data type, but Long values will be stored
        ' as strings unless you specify the type. Note that
        ' the integer is stored in the default name/value
        ' pair.
        Registry.SetValue(keyName, "", 5280)
        Registry.SetValue(keyName, "TestLong", 12345678901234, _
            RegistryValueKind.QWord)

        ' Strings with expandable environment variables are
        ' stored as ordinary strings unless you specify the
        ' data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%")
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%", _
            RegistryValueKind.ExpandString)

        ' Arrays of strings are stored automatically as
        ' MultiString. Similarly, arrays of Byte are stored
        ' automatically as Binary.
        Dim strings() As String = {"One", "Two", "Three"}
        Registry.SetValue(keyName, "TestArray", strings)

        ' Your default value is returned if the name/value pair
        ' does not exist.
        Dim noSuch As String = _
            Registry.GetValue(keyName, "NoSuchName", _
            "Return this default if NoSuchName does not exist.")
        Console.WriteLine(vbCrLf & "NoSuchName: {0}", noSuch)

        ' Retrieve the Integer and Long values, specifying
        ' numeric default values in case the name/value pairs
        ' do not exist. The Integer value is retrieved from the
        ' default (nameless) name/value pair for the key.
        Dim tInteger As Integer = _
            Registry.GetValue(keyName, "", -1)
        Console.WriteLine("(Default): {0}", tInteger)
        Dim tLong As Long = Registry.GetValue(keyName, _
             "TestLong", Long.MinValue)
        Console.WriteLine("TestLong: {0}", tLong)

        ' When retrieving a MultiString value, you can specify
        ' an array for the default return value. The value is
        ' declared inline, but could also be declared as:
        ' Dim default() As String = {"Default value."}
        '
        Dim tArray() As String = _
            Registry.GetValue(keyName, "TestArray", _
            New String() {"Default if TestArray does not exist."})
        For i As Integer = 0 To tArray.Length - 1
            Console.WriteLine("TestArray({0}): {1}", i, tArray(i))
        Next

        ' A string with embedded environment variables is not
        ' expanded if it was stored as an ordinary string.
        Dim tExpand As String = Registry.GetValue(keyName, _
             "TestExpand", "Default if TestExpand does not exist.")
        Console.WriteLine("TestExpand: {0}", tExpand)

        ' A string stored as ExpandString is expanded.
        Dim tExpand2 As String = Registry.GetValue(keyName, _
             "TestExpand2", "Default if TestExpand2 does not exist.")
        Console.WriteLine("TestExpand2: {0}...", _
            tExpand2.Substring(0, 40))

        Console.WriteLine(vbCrLf & _
            "Use the registry editor to examine the key.")
        Console.WriteLine("Press the Enter key to delete the key.")
        Console.ReadLine()
        Registry.CurrentUser.DeleteSubKey(subkey)
    End Sub
End Class
'
' This code example produces output similar to the following:
'
'NoSuchName: Return this default if NoSuchName does not exist.
'(Default): 5280
'TestLong: 12345678901234
'TestArray(0): One
'TestArray(1): Two
'TestArray(2): Three
'TestExpand: My path: %path%
'TestExpand2: My path: D:\Program Files\Microsoft.NET\...
'
'Use the registry editor to examine the key.
'Press the Enter key to delete the key.

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // The name of the key must include a valid root.
        const string userRoot = "HKEY_CURRENT_USER";
        const string subkey = "RegistrySetValueExample";
        const string keyName = userRoot + "\\" + subkey;

        // An int value can be stored without specifying the
        // registry data type, but long values will be stored
        // as strings unless you specify the type. Note that
        // the int is stored in the default name/value
        // pair.
        Registry.SetValue(keyName, "", 5280);
        Registry.SetValue(keyName, "TestLong", 12345678901234,
            RegistryValueKind.QWord);

        // Strings with expandable environment variables are
        // stored as ordinary strings unless you specify the
        // data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%");
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%",
            RegistryValueKind.ExpandString);

        // Arrays of strings are stored automatically as
        // MultiString. Similarly, arrays of Byte are stored
        // automatically as Binary.
        string[] strings = {"One", "Two", "Three"};
        Registry.SetValue(keyName, "TestArray", strings);

        // Your default value is returned if the name/value pair
        // does not exist.
        string noSuch = (string) Registry.GetValue(keyName,
            "NoSuchName",
            "Return this default if NoSuchName does not exist.");
        Console.WriteLine("\r\nNoSuchName: {0}", noSuch);

        // Retrieve the int and long values, specifying
        // numeric default values in case the name/value pairs
        // do not exist. The int value is retrieved from the
        // default (nameless) name/value pair for the key.
        int tInteger = (int) Registry.GetValue(keyName, "", -1);
        Console.WriteLine("(Default): {0}", tInteger);
        long tLong = (long) Registry.GetValue(keyName, "TestLong",
            long.MinValue);
        Console.WriteLine("TestLong: {0}", tLong);

        // When retrieving a MultiString value, you can specify
        // an array for the default return value.
        string[] tArray = (string[]) Registry.GetValue(keyName,
            "TestArray",
            new string[] {"Default if TestArray does not exist."});
        for(int i=0; i<tArray.Length; i++)
        {
            Console.WriteLine("TestArray({0}): {1}", i, tArray[i]);
        }

        // A string with embedded environment variables is not
        // expanded if it was stored as an ordinary string.
        string tExpand = (string) Registry.GetValue(keyName,
             "TestExpand",
             "Default if TestExpand does not exist.");
        Console.WriteLine("TestExpand: {0}", tExpand);

        // A string stored as ExpandString is expanded.
        string tExpand2 = (string) Registry.GetValue(keyName,
            "TestExpand2",
            "Default if TestExpand2 does not exist.");
        Console.WriteLine("TestExpand2: {0}...",
            tExpand2.Substring(0, 40));

        Console.WriteLine("\r\nUse the registry editor to examine the key.");
        Console.WriteLine("Press the Enter key to delete the key.");
        Console.ReadLine();
        Registry.CurrentUser.DeleteSubKey(subkey);
    }
}
//
// This code example produces output similar to the following:
//
//NoSuchName: Return this default if NoSuchName does not exist.
//(Default): 5280
//TestLong: 12345678901234
//TestArray(0): One
//TestArray(1): Two
//TestArray(2): Three
//TestExpand: My path: %path%
//TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
//Use the registry editor to examine the key.
//Press the Enter key to delete the key.

using namespace System;
using namespace Microsoft::Win32;

int main()
{
    // The name of the key must include a valid root.
    String^ userRoot = "HKEY_CURRENT_USER";
    String^ subKey = "RegistrySetValueExample2";
    String^ keyName = String::Concat(userRoot, "\\", subKey);

    // An int value can be stored without specifying the
    // registry data type, but Int64 values will be stored
    // as strings unless you specify the type. Note that
    // the int is stored in the default name/value
    // pair.
    Registry::SetValue(keyName, "", 5280);
    Registry::SetValue(keyName, "TestInt64", 12345678901234,
        RegistryValueKind::QWord);

    // Strings with expandable environment variables are
    // stored as ordinary strings unless you specify the
    // data type.
    Registry::SetValue(keyName, "TestExpand", "My path: %path%");
    Registry::SetValue(keyName, "TestExpand2", "My path: %path%",
        RegistryValueKind::ExpandString);

    // Arrays of strings are stored automatically as
    // MultiString. Similarly, arrays of Byte are stored
    // automatically as Binary.
    array<String^>^ strings  = {"One", "Two", "Three"};
    Registry::SetValue(keyName, "TestArray", strings);

    // Your default value is returned if the name/value pair
    // does not exist.
    String^ noSuch = (String^)Registry::GetValue(keyName,
        "NoSuchName",
        "Return this default if NoSuchName does not exist.");
    Console::WriteLine("\r\nNoSuchName: {0}", noSuch);

    // Retrieve the int and Int64 values, specifying
    // numeric default values in case the name/value pairs
    // do not exist. The int value is retrieved from the
    // default (nameless) name/value pair for the key.
    int testInteger = (int)Registry::GetValue(keyName, "", -1);
    Console::WriteLine("(Default): {0}", testInteger);
    long long testInt64 = (long long)Registry::GetValue(keyName,
        "TestInt64", System::Int64::MinValue);
    Console::WriteLine("TestInt64: {0}", testInt64);

    // When retrieving a MultiString value, you can specify
    // an array for the default return value.
    array<String^>^ testArray = (array<String^>^)Registry::GetValue(
        keyName, "TestArray",
        gcnew array<String^> {"Default if TestArray does not exist."});
    for (int i = 0; i < testArray->Length; i++)
    {
        Console::WriteLine("TestArray({0}): {1}", i, testArray[i]);
    }

    // A string with embedded environment variables is not
    // expanded if it was stored as an ordinary string.
    String^ testExpand = (String^)Registry::GetValue(keyName,
        "TestExpand", "Default if TestExpand does not exist.");
    Console::WriteLine("TestExpand: {0}", testExpand);

    // A string stored as ExpandString is expanded.
    String^ testExpand2 = (String^)Registry::GetValue(keyName,
        "TestExpand2", "Default if TestExpand2 does not exist.");
    Console::WriteLine(
        "TestExpand2: {0}...", testExpand2->Substring(0, 40));
    Console::WriteLine(
        "\r\nUse the registry editor to examine the key.");
    Console::WriteLine("Press the Enter key to delete the key.");
    Console::ReadLine();
    Registry::CurrentUser->DeleteSubKey(subKey);
}
//
// This code example produces output similar to the following:
//
// NoSuchName: Return this default if NoSuchName does not exist.
// (Default): 5280
// TestInt64: 12345678901234
// TestArray(0): One
// TestArray(1): Two
// TestArray(2): Three
// TestExpand: My path: %path%
// TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
// Use the registry editor to examine the key.
// Press the Enter key to delete the key.

参考

Registry 类
Registry 成员
Microsoft.Win32 命名空间


Registry ..::.SetValue 方法 (String, String, Object)

Registry
.
.
::
.
SetValue 方法 (String, String, Object)
Registry 类

设置指定的注册表项的指定名称/值对。如果指定的项不存在，则创建该项。 设置指定的注册表项的指定名称/值对。如果指定的项不存在，则创建该项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SetValue ( _
    keyName As String, _
    valueName As String, _
    value As Object _
)
public static void SetValue(
    string keyName,
    string valueName,
    Object value
)
public:
static void SetValue(
    String^ keyName,
    String^ valueName,
    Object^ value
)
static member SetValue :
        keyName:string *
        valueName:string *
        value:Object -> unit

参数

keyName
类型： System String
以有效注册表根（如“HKEY_CURRENT_USER”）开头的键的完整注册表路径。
valueName
类型： System String
名称/值对的名称。
value
类型： System Object
要存储的值。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | keyName 未以有效注册表根开头。 - 或 - keyName 的长度超过了允许的最大长度（255 个字符）。
UnauthorizedAccessException | RegistryKey 是只读的，因此无法对其写入；例如，它是根级节点。
SecurityException | 用户没有创建或修改注册表项所需的权限。

从 .NET Framework 4 版 开始，valueName 参数不再限于最多 255 个字符，但是 keyName 参数继续适用 255 个字符的限制。

由于注册表中的每个项都可以存储很多值，因此必须使用 valueName 参数指定您希望设置的特定值。

说明 说明

注册表项可以含有一个与任何名称均无关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置这个未命名的值，请为 valueName 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可以含有一个与任何名称均无关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置这个未命名的值，请为 valueName 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可以含有一个与任何名称均无关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置这个未命名的值，请为 valueName 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。

如果该项中不存在 valueName，则会创建它并会将关联值设置为 value。

如果 keyName 指定的子项不存在，则会在指定的根下创建该子项。例如，在 Visual Basic 中，字符串“HKEY_CURRENT_USER\MyTestKey”在 HKEY_CURRENT_USER 根下创建子项“MyTestKey”。字符串“HKEY_CURRENT_USER\MyTestKey\Key2\Key3”创建嵌套子项“MyTestKey”、“MyTestKey\Key2”和“MyTestKey\Key2\Key3”。 如果 keyName 指定的子项不存在，则会在指定的根下创建该子项。例如，在 Visual Basic 中，字符串“HKEY_CURRENT_USER\MyTestKey”在 HKEY_CURRENT_USER 根下创建子项“MyTestKey”。字符串“HKEY_CURRENT_USER\MyTestKey\Key2\Key3”创建嵌套子项“MyTestKey”、“MyTestKey\Key2”和“MyTestKey\Key2\Key3”。 如果 keyName 指定的子项不存在，则会在指定的根下创建该子项。例如，在 Visual Basic 中，字符串“HKEY_CURRENT_USER\MyTestKey”在 HKEY_CURRENT_USER 根下创建子项“MyTestKey”。字符串“HKEY_CURRENT_USER\MyTestKey\Key2\Key3”创建嵌套子项“MyTestKey”、“MyTestKey\Key2”和“MyTestKey\Key2\Key3”。

有效的根名称包括 HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_CLASSES_ROOT、HKEY_USERS、HKEY_PERFORMANCE_DATA、HKEY_CURRENT_CONFIG 和 HKEY_DYN_DATA。

说明 说明

每次调用 SetValue 方法时，它都打开一个注册表项，设置值，然后关闭该项。如果您需要修改大量值，RegistryKey..::.SetValue 方法可提供更好的性能。RegistryKey 类还提供了可用来将访问控制列表 (ACL) 添加给注册表项的方法、在检索某个值之前测试其数据类型的方法和删除项的方法。 每次调用 SetValue 方法时，它都打开一个注册表项，设置值，然后关闭该项。如果您需要修改大量值，RegistryKey..::.SetValue 方法可提供更好的性能。RegistryKey 类还提供了可用来将访问控制列表 (ACL) 添加给注册表项的方法、在检索某个值之前测试其数据类型的方法和删除项的方法。 每次调用 SetValue 方法时，它都打开一个注册表项，设置值，然后关闭该项。如果您需要修改大量值，RegistryKey..::.SetValue 方法可提供更好的性能。RegistryKey 类还提供了可用来将访问控制列表 (ACL) 添加给注册表项的方法、在检索某个值之前测试其数据类型的方法和删除项的方法。

此 SetValue 的重载将 64 位整数存储为字符串 (RegistryValueKind..::.String)。若要将 64 位数字存储为 RegistryValueKind..::.QWord 值，请使用 SetValue(String, String, Object, RegistryValueKind) 方法重载。 此 SetValue 的重载将 64 位整数存储为字符串 (RegistryValueKind..::.String)。若要将 64 位数字存储为 RegistryValueKind..::.QWord 值，请使用 SetValue(String, String, Object, RegistryValueKind) 方法重载。

此 SetValue 的重载将所有字符串值都存储为 RegistryValueKind..::.String 对象，即使它们包含对环境变量的可扩展引用也是如此。若要将字符串值存储为可扩展字符串 (RegistryValueKind..::.ExpandString)，请使用 SetValue(String, String, Object, RegistryValueKind) 方法重载。 此 SetValue 的重载将所有字符串值都存储为 RegistryValueKind..::.String 对象，即使它们包含对环境变量的可扩展引用也是如此。若要将字符串值存储为可扩展字符串 (RegistryValueKind..::.ExpandString)，请使用 SetValue(String, String, Object, RegistryValueKind) 方法重载。

此重载等效于使用 RegistryValueKind..::.Unknown 调用 SetValue(String, String, Object, RegistryValueKind) 方法重载。

说明 说明

在 Windows 98 和 Windows Millennium Edition (Windows Me) 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。 在 Windows 98 和 Windows Millennium Edition (Windows Me) 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。 在 Windows 98 和 Windows Millennium Edition (Windows Me) 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。

下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。 下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。

Imports System
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' The name of the key must include a valid root.
        Const userRoot As String = "HKEY_CURRENT_USER"
        Const subkey As String = "RegistrySetValueExample"
        Const keyName As String = userRoot & "\" & subkey

        ' Integer values can be stored without specifying the
        ' registry data type, but Long values will be stored
        ' as strings unless you specify the type. Note that
        ' the integer is stored in the default name/value
        ' pair.
        Registry.SetValue(keyName, "", 5280)
        Registry.SetValue(keyName, "TestLong", 12345678901234, _
            RegistryValueKind.QWord)

        ' Strings with expandable environment variables are
        ' stored as ordinary strings unless you specify the
        ' data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%")
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%", _
            RegistryValueKind.ExpandString)

        ' Arrays of strings are stored automatically as
        ' MultiString. Similarly, arrays of Byte are stored
        ' automatically as Binary.
        Dim strings() As String = {"One", "Two", "Three"}
        Registry.SetValue(keyName, "TestArray", strings)

        ' Your default value is returned if the name/value pair
        ' does not exist.
        Dim noSuch As String = _
            Registry.GetValue(keyName, "NoSuchName", _
            "Return this default if NoSuchName does not exist.")
        Console.WriteLine(vbCrLf & "NoSuchName: {0}", noSuch)

        ' Retrieve the Integer and Long values, specifying
        ' numeric default values in case the name/value pairs
        ' do not exist. The Integer value is retrieved from the
        ' default (nameless) name/value pair for the key.
        Dim tInteger As Integer = _
            Registry.GetValue(keyName, "", -1)
        Console.WriteLine("(Default): {0}", tInteger)
        Dim tLong As Long = Registry.GetValue(keyName, _
             "TestLong", Long.MinValue)
        Console.WriteLine("TestLong: {0}", tLong)

        ' When retrieving a MultiString value, you can specify
        ' an array for the default return value. The value is
        ' declared inline, but could also be declared as:
        ' Dim default() As String = {"Default value."}
        '
        Dim tArray() As String = _
            Registry.GetValue(keyName, "TestArray", _
            New String() {"Default if TestArray does not exist."})
        For i As Integer = 0 To tArray.Length - 1
            Console.WriteLine("TestArray({0}): {1}", i, tArray(i))
        Next

        ' A string with embedded environment variables is not
        ' expanded if it was stored as an ordinary string.
        Dim tExpand As String = Registry.GetValue(keyName, _
             "TestExpand", "Default if TestExpand does not exist.")
        Console.WriteLine("TestExpand: {0}", tExpand)

        ' A string stored as ExpandString is expanded.
        Dim tExpand2 As String = Registry.GetValue(keyName, _
             "TestExpand2", "Default if TestExpand2 does not exist.")
        Console.WriteLine("TestExpand2: {0}...", _
            tExpand2.Substring(0, 40))

        Console.WriteLine(vbCrLf & _
            "Use the registry editor to examine the key.")
        Console.WriteLine("Press the Enter key to delete the key.")
        Console.ReadLine()
        Registry.CurrentUser.DeleteSubKey(subkey)
    End Sub
End Class
'
' This code example produces output similar to the following:
'
'NoSuchName: Return this default if NoSuchName does not exist.
'(Default): 5280
'TestLong: 12345678901234
'TestArray(0): One
'TestArray(1): Two
'TestArray(2): Three
'TestExpand: My path: %path%
'TestExpand2: My path: D:\Program Files\Microsoft.NET\...
'
'Use the registry editor to examine the key.
'Press the Enter key to delete the key.

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // The name of the key must include a valid root.
        const string userRoot = "HKEY_CURRENT_USER";
        const string subkey = "RegistrySetValueExample";
        const string keyName = userRoot + "\\" + subkey;

        // An int value can be stored without specifying the
        // registry data type, but long values will be stored
        // as strings unless you specify the type. Note that
        // the int is stored in the default name/value
        // pair.
        Registry.SetValue(keyName, "", 5280);
        Registry.SetValue(keyName, "TestLong", 12345678901234,
            RegistryValueKind.QWord);

        // Strings with expandable environment variables are
        // stored as ordinary strings unless you specify the
        // data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%");
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%",
            RegistryValueKind.ExpandString);

        // Arrays of strings are stored automatically as
        // MultiString. Similarly, arrays of Byte are stored
        // automatically as Binary.
        string[] strings = {"One", "Two", "Three"};
        Registry.SetValue(keyName, "TestArray", strings);

        // Your default value is returned if the name/value pair
        // does not exist.
        string noSuch = (string) Registry.GetValue(keyName,
            "NoSuchName",
            "Return this default if NoSuchName does not exist.");
        Console.WriteLine("\r\nNoSuchName: {0}", noSuch);

        // Retrieve the int and long values, specifying
        // numeric default values in case the name/value pairs
        // do not exist. The int value is retrieved from the
        // default (nameless) name/value pair for the key.
        int tInteger = (int) Registry.GetValue(keyName, "", -1);
        Console.WriteLine("(Default): {0}", tInteger);
        long tLong = (long) Registry.GetValue(keyName, "TestLong",
            long.MinValue);
        Console.WriteLine("TestLong: {0}", tLong);

        // When retrieving a MultiString value, you can specify
        // an array for the default return value.
        string[] tArray = (string[]) Registry.GetValue(keyName,
            "TestArray",
            new string[] {"Default if TestArray does not exist."});
        for(int i=0; i<tArray.Length; i++)
        {
            Console.WriteLine("TestArray({0}): {1}", i, tArray[i]);
        }

        // A string with embedded environment variables is not
        // expanded if it was stored as an ordinary string.
        string tExpand = (string) Registry.GetValue(keyName,
             "TestExpand",
             "Default if TestExpand does not exist.");
        Console.WriteLine("TestExpand: {0}", tExpand);

        // A string stored as ExpandString is expanded.
        string tExpand2 = (string) Registry.GetValue(keyName,
            "TestExpand2",
            "Default if TestExpand2 does not exist.");
        Console.WriteLine("TestExpand2: {0}...",
            tExpand2.Substring(0, 40));

        Console.WriteLine("\r\nUse the registry editor to examine the key.");
        Console.WriteLine("Press the Enter key to delete the key.");
        Console.ReadLine();
        Registry.CurrentUser.DeleteSubKey(subkey);
    }
}
//
// This code example produces output similar to the following:
//
//NoSuchName: Return this default if NoSuchName does not exist.
//(Default): 5280
//TestLong: 12345678901234
//TestArray(0): One
//TestArray(1): Two
//TestArray(2): Three
//TestExpand: My path: %path%
//TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
//Use the registry editor to examine the key.
//Press the Enter key to delete the key.

using namespace System;
using namespace Microsoft::Win32;

int main()
{
    // The name of the key must include a valid root.
    String^ userRoot = "HKEY_CURRENT_USER";
    String^ subKey = "RegistrySetValueExample2";
    String^ keyName = String::Concat(userRoot, "\\", subKey);

    // An int value can be stored without specifying the
    // registry data type, but Int64 values will be stored
    // as strings unless you specify the type. Note that
    // the int is stored in the default name/value
    // pair.
    Registry::SetValue(keyName, "", 5280);
    Registry::SetValue(keyName, "TestInt64", 12345678901234,
        RegistryValueKind::QWord);

    // Strings with expandable environment variables are
    // stored as ordinary strings unless you specify the
    // data type.
    Registry::SetValue(keyName, "TestExpand", "My path: %path%");
    Registry::SetValue(keyName, "TestExpand2", "My path: %path%",
        RegistryValueKind::ExpandString);

    // Arrays of strings are stored automatically as
    // MultiString. Similarly, arrays of Byte are stored
    // automatically as Binary.
    array<String^>^ strings  = {"One", "Two", "Three"};
    Registry::SetValue(keyName, "TestArray", strings);

    // Your default value is returned if the name/value pair
    // does not exist.
    String^ noSuch = (String^)Registry::GetValue(keyName,
        "NoSuchName",
        "Return this default if NoSuchName does not exist.");
    Console::WriteLine("\r\nNoSuchName: {0}", noSuch);

    // Retrieve the int and Int64 values, specifying
    // numeric default values in case the name/value pairs
    // do not exist. The int value is retrieved from the
    // default (nameless) name/value pair for the key.
    int testInteger = (int)Registry::GetValue(keyName, "", -1);
    Console::WriteLine("(Default): {0}", testInteger);
    long long testInt64 = (long long)Registry::GetValue(keyName,
        "TestInt64", System::Int64::MinValue);
    Console::WriteLine("TestInt64: {0}", testInt64);

    // When retrieving a MultiString value, you can specify
    // an array for the default return value.
    array<String^>^ testArray = (array<String^>^)Registry::GetValue(
        keyName, "TestArray",
        gcnew array<String^> {"Default if TestArray does not exist."});
    for (int i = 0; i < testArray->Length; i++)
    {
        Console::WriteLine("TestArray({0}): {1}", i, testArray[i]);
    }

    // A string with embedded environment variables is not
    // expanded if it was stored as an ordinary string.
    String^ testExpand = (String^)Registry::GetValue(keyName,
        "TestExpand", "Default if TestExpand does not exist.");
    Console::WriteLine("TestExpand: {0}", testExpand);

    // A string stored as ExpandString is expanded.
    String^ testExpand2 = (String^)Registry::GetValue(keyName,
        "TestExpand2", "Default if TestExpand2 does not exist.");
    Console::WriteLine(
        "TestExpand2: {0}...", testExpand2->Substring(0, 40));
    Console::WriteLine(
        "\r\nUse the registry editor to examine the key.");
    Console::WriteLine("Press the Enter key to delete the key.");
    Console::ReadLine();
    Registry::CurrentUser->DeleteSubKey(subKey);
}
//
// This code example produces output similar to the following:
//
// NoSuchName: Return this default if NoSuchName does not exist.
// (Default): 5280
// TestInt64: 12345678901234
// TestArray(0): One
// TestArray(1): Two
// TestArray(2): Three
// TestExpand: My path: %path%
// TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
// Use the registry editor to examine the key.
// Press the Enter key to delete the key.
  • RegistryPermission

    如果指定的注册表项存在，则修改该项，或者，如果注册表项还不存在，则创建该项。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create 如果指定的注册表项存在，则修改该项，或者，如果注册表项还不存在，则创建该项。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 类
Registry 成员
SetValue 重载
Microsoft.Win32 命名空间


Registry ..::.SetValue 方法 (String, String, Object, RegistryValueKind)

Registry
.
.
::
.
SetValue 方法 (String, String, Object, RegistryValueKind)
Registry 类

通过使用指定的注册表数据类型，设置该指定的注册表项的名称/值对。如果指定的项不存在，则创建该项。 通过使用指定的注册表数据类型，设置该指定的注册表项的名称/值对。如果指定的项不存在，则创建该项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SetValue ( _
    keyName As String, _
    valueName As String, _
    value As Object, _
    valueKind As RegistryValueKind _
)
public static void SetValue(
    string keyName,
    string valueName,
    Object value,
    RegistryValueKind valueKind
)
public:
static void SetValue(
    String^ keyName,
    String^ valueName,
    Object^ value,
    RegistryValueKind valueKind
)
static member SetValue :
        keyName:string *
        valueName:string *
        value:Object *
        valueKind:RegistryValueKind -> unit

参数

keyName
类型： System String
以有效注册表根（如“HKEY_CURRENT_USER”）开头的键的完整注册表路径。
valueName
类型： System String
名称/值对的名称。
value
类型： System Object
要存储的值。
valueKind
类型： Microsoft.Win32 RegistryValueKind
在存储数据时使用的注册表数据类型。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | keyName 未以有效注册表根开头。 - 或 - keyName 的长度超过了允许的最大长度（255 个字符）。 - 或 - value 的类型与 valueKind 指定的注册表数据类型不匹配，因此，未能正确转换该数据。
UnauthorizedAccessException | RegistryKey 是只读的，因此无法对其写入（例如，它是根级节点，或者未用写访问权限打开该项）。
SecurityException | 用户没有创建或修改注册表项所需的权限。

从 .NET Framework 4 版 开始，valueName 参数不再限于最多 255 个字符，但是 keyName 参数继续适用 255 个字符的限制。

由于注册表中的每个项都可以存储很多值，因此必须使用 valueName 参数指定您希望设置的特定值。

说明 说明

注册表项可以含有一个与任何名称均无关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置这个未命名的值，请为 valueName 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可以含有一个与任何名称均无关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置这个未命名的值，请为 valueName 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可以含有一个与任何名称均无关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置这个未命名的值，请为 valueName 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。

如果该项中不存在 valueName，则会创建它并会将关联值设置为 value。

如果 keyName 指定的子项不存在，则会在指定的根下创建该子项。例如，在 Visual Basic 中，字符串“HKEY_CURRENT_USER\MyTestKey”在 HKEY_CURRENT_USER 根下创建子项“MyTestKey”。字符串“HKEY_CURRENT_USER\MyTestKey\Key2\Key3”创建嵌套子项“MyTestKey”、“MyTestKey\Key2”和“MyTestKey\Key2\Key3”。 如果 keyName 指定的子项不存在，则会在指定的根下创建该子项。例如，在 Visual Basic 中，字符串“HKEY_CURRENT_USER\MyTestKey”在 HKEY_CURRENT_USER 根下创建子项“MyTestKey”。字符串“HKEY_CURRENT_USER\MyTestKey\Key2\Key3”创建嵌套子项“MyTestKey”、“MyTestKey\Key2”和“MyTestKey\Key2\Key3”。 如果 keyName 指定的子项不存在，则会在指定的根下创建该子项。例如，在 Visual Basic 中，字符串“HKEY_CURRENT_USER\MyTestKey”在 HKEY_CURRENT_USER 根下创建子项“MyTestKey”。字符串“HKEY_CURRENT_USER\MyTestKey\Key2\Key3”创建嵌套子项“MyTestKey”、“MyTestKey\Key2”和“MyTestKey\Key2\Key3”。

有效的根名称包括 HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_CLASSES_ROOT、HKEY_USERS、HKEY_PERFORMANCE_DATA、HKEY_CURRENT_CONFIG 和 HKEY_DYN_DATA。

说明 说明

每次调用 SetValue 方法时，它都打开一个注册表项，设置值，然后关闭该项。如果您需要修改大量值，RegistryKey..::.SetValue 方法可提供更好的性能。RegistryKey 类还提供了可用来将访问控制列表 (ACL) 添加给注册表项的方法、在检索某个值之前测试其数据类型的方法和删除项的方法。 每次调用 SetValue 方法时，它都打开一个注册表项，设置值，然后关闭该项。如果您需要修改大量值，RegistryKey..::.SetValue 方法可提供更好的性能。RegistryKey 类还提供了可用来将访问控制列表 (ACL) 添加给注册表项的方法、在检索某个值之前测试其数据类型的方法和删除项的方法。 每次调用 SetValue 方法时，它都打开一个注册表项，设置值，然后关闭该项。如果您需要修改大量值，RegistryKey..::.SetValue 方法可提供更好的性能。RegistryKey 类还提供了可用来将访问控制列表 (ACL) 添加给注册表项的方法、在检索某个值之前测试其数据类型的方法和删除项的方法。

如果指定的 value 类型与指定的 valueKind 不匹配，且无法转换数据，则会发生 ArgumentException。例如，您可以将 System..::.Int64 存储为 RegistryValueKind..::.DWord，但仅当它的值小于 System..::.Int32 的最大值时才可以这样做。不能将单个字符串值存储为 RegistryValueKind..::.MultiString。 如果指定的 value 类型与指定的 valueKind 不匹配，且无法转换数据，则会发生 ArgumentException。例如，您可以将 System..::.Int64 存储为 RegistryValueKind..::.DWord，但仅当它的值小于 System..::.Int32 的最大值时才可以这样做。不能将单个字符串值存储为 RegistryValueKind..::.MultiString。 如果指定的 value 类型与指定的 valueKind 不匹配，且无法转换数据，则会发生 ArgumentException。例如，您可以将 System..::.Int64 存储为 RegistryValueKind..::.DWord，但仅当它的值小于 System..::.Int32 的最大值时才可以这样做。不能将单个字符串值存储为 RegistryValueKind..::.MultiString。

说明 说明

如果为 RegistryValueKind..::.DWord 或 RegistryValueKind..::.QWord 传递已装箱的值，则使用固定区域性执行转换。
说明 说明

在 Windows 98 和 Windows Millennium Edition (Windows Me) 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。 在 Windows 98 和 Windows Millennium Edition (Windows Me) 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。 在 Windows 98 和 Windows Millennium Edition (Windows Me) 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。

下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。 下面的代码示例将多种数据类型的值存储在一个示例键中并同时创建该键，然后检索并显示这些值。该示例演示如何存储和检索默认的（无名称）名称/值对，以及当名称/值对不存在时如何使用 defaultValue。

Imports System
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' The name of the key must include a valid root.
        Const userRoot As String = "HKEY_CURRENT_USER"
        Const subkey As String = "RegistrySetValueExample"
        Const keyName As String = userRoot & "\" & subkey

        ' Integer values can be stored without specifying the
        ' registry data type, but Long values will be stored
        ' as strings unless you specify the type. Note that
        ' the integer is stored in the default name/value
        ' pair.
        Registry.SetValue(keyName, "", 5280)
        Registry.SetValue(keyName, "TestLong", 12345678901234, _
            RegistryValueKind.QWord)

        ' Strings with expandable environment variables are
        ' stored as ordinary strings unless you specify the
        ' data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%")
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%", _
            RegistryValueKind.ExpandString)

        ' Arrays of strings are stored automatically as
        ' MultiString. Similarly, arrays of Byte are stored
        ' automatically as Binary.
        Dim strings() As String = {"One", "Two", "Three"}
        Registry.SetValue(keyName, "TestArray", strings)

        ' Your default value is returned if the name/value pair
        ' does not exist.
        Dim noSuch As String = _
            Registry.GetValue(keyName, "NoSuchName", _
            "Return this default if NoSuchName does not exist.")
        Console.WriteLine(vbCrLf & "NoSuchName: {0}", noSuch)

        ' Retrieve the Integer and Long values, specifying
        ' numeric default values in case the name/value pairs
        ' do not exist. The Integer value is retrieved from the
        ' default (nameless) name/value pair for the key.
        Dim tInteger As Integer = _
            Registry.GetValue(keyName, "", -1)
        Console.WriteLine("(Default): {0}", tInteger)
        Dim tLong As Long = Registry.GetValue(keyName, _
             "TestLong", Long.MinValue)
        Console.WriteLine("TestLong: {0}", tLong)

        ' When retrieving a MultiString value, you can specify
        ' an array for the default return value. The value is
        ' declared inline, but could also be declared as:
        ' Dim default() As String = {"Default value."}
        '
        Dim tArray() As String = _
            Registry.GetValue(keyName, "TestArray", _
            New String() {"Default if TestArray does not exist."})
        For i As Integer = 0 To tArray.Length - 1
            Console.WriteLine("TestArray({0}): {1}", i, tArray(i))
        Next

        ' A string with embedded environment variables is not
        ' expanded if it was stored as an ordinary string.
        Dim tExpand As String = Registry.GetValue(keyName, _
             "TestExpand", "Default if TestExpand does not exist.")
        Console.WriteLine("TestExpand: {0}", tExpand)

        ' A string stored as ExpandString is expanded.
        Dim tExpand2 As String = Registry.GetValue(keyName, _
             "TestExpand2", "Default if TestExpand2 does not exist.")
        Console.WriteLine("TestExpand2: {0}...", _
            tExpand2.Substring(0, 40))

        Console.WriteLine(vbCrLf & _
            "Use the registry editor to examine the key.")
        Console.WriteLine("Press the Enter key to delete the key.")
        Console.ReadLine()
        Registry.CurrentUser.DeleteSubKey(subkey)
    End Sub
End Class
'
' This code example produces output similar to the following:
'
'NoSuchName: Return this default if NoSuchName does not exist.
'(Default): 5280
'TestLong: 12345678901234
'TestArray(0): One
'TestArray(1): Two
'TestArray(2): Three
'TestExpand: My path: %path%
'TestExpand2: My path: D:\Program Files\Microsoft.NET\...
'
'Use the registry editor to examine the key.
'Press the Enter key to delete the key.

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // The name of the key must include a valid root.
        const string userRoot = "HKEY_CURRENT_USER";
        const string subkey = "RegistrySetValueExample";
        const string keyName = userRoot + "\\" + subkey;

        // An int value can be stored without specifying the
        // registry data type, but long values will be stored
        // as strings unless you specify the type. Note that
        // the int is stored in the default name/value
        // pair.
        Registry.SetValue(keyName, "", 5280);
        Registry.SetValue(keyName, "TestLong", 12345678901234,
            RegistryValueKind.QWord);

        // Strings with expandable environment variables are
        // stored as ordinary strings unless you specify the
        // data type.
        Registry.SetValue(keyName, "TestExpand", "My path: %path%");
        Registry.SetValue(keyName, "TestExpand2", "My path: %path%",
            RegistryValueKind.ExpandString);

        // Arrays of strings are stored automatically as
        // MultiString. Similarly, arrays of Byte are stored
        // automatically as Binary.
        string[] strings = {"One", "Two", "Three"};
        Registry.SetValue(keyName, "TestArray", strings);

        // Your default value is returned if the name/value pair
        // does not exist.
        string noSuch = (string) Registry.GetValue(keyName,
            "NoSuchName",
            "Return this default if NoSuchName does not exist.");
        Console.WriteLine("\r\nNoSuchName: {0}", noSuch);

        // Retrieve the int and long values, specifying
        // numeric default values in case the name/value pairs
        // do not exist. The int value is retrieved from the
        // default (nameless) name/value pair for the key.
        int tInteger = (int) Registry.GetValue(keyName, "", -1);
        Console.WriteLine("(Default): {0}", tInteger);
        long tLong = (long) Registry.GetValue(keyName, "TestLong",
            long.MinValue);
        Console.WriteLine("TestLong: {0}", tLong);

        // When retrieving a MultiString value, you can specify
        // an array for the default return value.
        string[] tArray = (string[]) Registry.GetValue(keyName,
            "TestArray",
            new string[] {"Default if TestArray does not exist."});
        for(int i=0; i<tArray.Length; i++)
        {
            Console.WriteLine("TestArray({0}): {1}", i, tArray[i]);
        }

        // A string with embedded environment variables is not
        // expanded if it was stored as an ordinary string.
        string tExpand = (string) Registry.GetValue(keyName,
             "TestExpand",
             "Default if TestExpand does not exist.");
        Console.WriteLine("TestExpand: {0}", tExpand);

        // A string stored as ExpandString is expanded.
        string tExpand2 = (string) Registry.GetValue(keyName,
            "TestExpand2",
            "Default if TestExpand2 does not exist.");
        Console.WriteLine("TestExpand2: {0}...",
            tExpand2.Substring(0, 40));

        Console.WriteLine("\r\nUse the registry editor to examine the key.");
        Console.WriteLine("Press the Enter key to delete the key.");
        Console.ReadLine();
        Registry.CurrentUser.DeleteSubKey(subkey);
    }
}
//
// This code example produces output similar to the following:
//
//NoSuchName: Return this default if NoSuchName does not exist.
//(Default): 5280
//TestLong: 12345678901234
//TestArray(0): One
//TestArray(1): Two
//TestArray(2): Three
//TestExpand: My path: %path%
//TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
//Use the registry editor to examine the key.
//Press the Enter key to delete the key.

using namespace System;
using namespace Microsoft::Win32;

int main()
{
    // The name of the key must include a valid root.
    String^ userRoot = "HKEY_CURRENT_USER";
    String^ subKey = "RegistrySetValueExample2";
    String^ keyName = String::Concat(userRoot, "\\", subKey);

    // An int value can be stored without specifying the
    // registry data type, but Int64 values will be stored
    // as strings unless you specify the type. Note that
    // the int is stored in the default name/value
    // pair.
    Registry::SetValue(keyName, "", 5280);
    Registry::SetValue(keyName, "TestInt64", 12345678901234,
        RegistryValueKind::QWord);

    // Strings with expandable environment variables are
    // stored as ordinary strings unless you specify the
    // data type.
    Registry::SetValue(keyName, "TestExpand", "My path: %path%");
    Registry::SetValue(keyName, "TestExpand2", "My path: %path%",
        RegistryValueKind::ExpandString);

    // Arrays of strings are stored automatically as
    // MultiString. Similarly, arrays of Byte are stored
    // automatically as Binary.
    array<String^>^ strings  = {"One", "Two", "Three"};
    Registry::SetValue(keyName, "TestArray", strings);

    // Your default value is returned if the name/value pair
    // does not exist.
    String^ noSuch = (String^)Registry::GetValue(keyName,
        "NoSuchName",
        "Return this default if NoSuchName does not exist.");
    Console::WriteLine("\r\nNoSuchName: {0}", noSuch);

    // Retrieve the int and Int64 values, specifying
    // numeric default values in case the name/value pairs
    // do not exist. The int value is retrieved from the
    // default (nameless) name/value pair for the key.
    int testInteger = (int)Registry::GetValue(keyName, "", -1);
    Console::WriteLine("(Default): {0}", testInteger);
    long long testInt64 = (long long)Registry::GetValue(keyName,
        "TestInt64", System::Int64::MinValue);
    Console::WriteLine("TestInt64: {0}", testInt64);

    // When retrieving a MultiString value, you can specify
    // an array for the default return value.
    array<String^>^ testArray = (array<String^>^)Registry::GetValue(
        keyName, "TestArray",
        gcnew array<String^> {"Default if TestArray does not exist."});
    for (int i = 0; i < testArray->Length; i++)
    {
        Console::WriteLine("TestArray({0}): {1}", i, testArray[i]);
    }

    // A string with embedded environment variables is not
    // expanded if it was stored as an ordinary string.
    String^ testExpand = (String^)Registry::GetValue(keyName,
        "TestExpand", "Default if TestExpand does not exist.");
    Console::WriteLine("TestExpand: {0}", testExpand);

    // A string stored as ExpandString is expanded.
    String^ testExpand2 = (String^)Registry::GetValue(keyName,
        "TestExpand2", "Default if TestExpand2 does not exist.");
    Console::WriteLine(
        "TestExpand2: {0}...", testExpand2->Substring(0, 40));
    Console::WriteLine(
        "\r\nUse the registry editor to examine the key.");
    Console::WriteLine("Press the Enter key to delete the key.");
    Console::ReadLine();
    Registry::CurrentUser->DeleteSubKey(subKey);
}
//
// This code example produces output similar to the following:
//
// NoSuchName: Return this default if NoSuchName does not exist.
// (Default): 5280
// TestInt64: 12345678901234
// TestArray(0): One
// TestArray(1): Two
// TestArray(2): Three
// TestExpand: My path: %path%
// TestExpand2: My path: D:\Program Files\Microsoft.NET\...
//
// Use the registry editor to examine the key.
// Press the Enter key to delete the key.
  • RegistryPermission

    如果指定的注册表项存在，则修改该项，或者，如果注册表项还不存在，则创建该项。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create 如果指定的注册表项存在，则修改该项，或者，如果注册表项还不存在，则创建该项。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Registry 类
Registry 成员
SetValue 重载
Microsoft.Win32 命名空间


RegistryHive 枚举

RegistryHive 枚举

表示外部计算机上的顶级节点的可能值。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration RegistryHive
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum RegistryHive
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class RegistryHive
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type RegistryHive
成员名称 | 说明
ClassesRoot | 表示另一个计算机上的 HKEY_CLASSES_ROOT 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。 表示另一个计算机上的 HKEY_CLASSES_ROOT 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。
CurrentUser | 表示另一个计算机上的 HKEY_CURRENT_USER 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。 表示另一个计算机上的 HKEY_CURRENT_USER 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。
LocalMachine | 表示另一个计算机上的 HKEY_LOCAL_MACHINE 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。 表示另一个计算机上的 HKEY_LOCAL_MACHINE 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。
Users | 表示另一个计算机上的 HKEY_USERS 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。 表示另一个计算机上的 HKEY_USERS 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。
PerformanceData | 表示另一个计算机上的 HKEY_PERFORMANCE_DATA 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。 表示另一个计算机上的 HKEY_PERFORMANCE_DATA 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。
CurrentConfig | 表示另一个计算机上的 HKEY_CURRENT_CONFIG 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。 表示另一个计算机上的 HKEY_CURRENT_CONFIG 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。
DynData | 表示另一个计算机上的 HKEY_DYN_DATA 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。 表示另一个计算机上的 HKEY_DYN_DATA 基项。此值可传递给 OpenRemoteBaseKey 方法，以远程打开此节点。

RegistryHive 值由 OpenRemoteBaseKey 方法用来表示外部（远程）计算机上的请求的项的顶级节点。可以用 OpenRemoteBaseKey 方法打开的节点必须是这些顶级 RegistryKeys 之一。只要用户具有适当的权限，就可以使用 RegistryKey 中的方法进一步访问已标识节点的子项。 RegistryHive 值由 OpenRemoteBaseKey 方法用来表示外部（远程）计算机上的请求的项的顶级节点。可以用 OpenRemoteBaseKey 方法打开的节点必须是这些顶级 RegistryKeys 之一。只要用户具有适当的权限，就可以使用 RegistryKey 中的方法进一步访问已标识节点的子项。 RegistryHive 值由 OpenRemoteBaseKey 方法用来表示外部（远程）计算机上的请求的项的顶级节点。可以用 OpenRemoteBaseKey 方法打开的节点必须是这些顶级 RegistryKeys 之一。只要用户具有适当的权限，就可以使用 RegistryKey 中的方法进一步访问已标识节点的子项。

下面的代码示例说明如何在远程计算机上打开一个注册表项并枚举该项的值。远程计算机必须运行远程注册表服务。调用该程序时，将远程计算机的名称指定为一个命令行参数。 下面的代码示例说明如何在远程计算机上打开一个注册表项并枚举该项的值。远程计算机必须运行远程注册表服务。调用该程序时，将远程计算机的名称指定为一个命令行参数。 下面的代码示例说明如何在远程计算机上打开一个注册表项并枚举该项的值。远程计算机必须运行远程注册表服务。调用该程序时，将远程计算机的名称指定为一个命令行参数。

Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Security.Permissions
Imports Microsoft.Win32

<Assembly: RegistryPermissionAttribute( _
    SecurityAction.RequestMinimum, _
    Read := "HKEY_CURRENT_USER\Environment")>
<Assembly: SecurityPermissionAttribute( _
    SecurityAction.RequestMinimum, UnmanagedCode := True)>

Public Class RemoteKey

    Shared Sub Main(commandLineArgs As String())

        Dim environmentKey As RegistryKey

        ' Check that an argument was specified when the
        ' program was invoked.
        If commandLineArgs.Length = 0 Then
            Console.WriteLine("Error: The name of the remote " & _
                "computer must be specified as input on the " & _
                "command line.")
            Return
        End If

        Try
            ' Open HKEY_CURRENT_USER\Environment on a remote computer.
            environmentKey = RegistryKey.OpenRemoteBaseKey( _
                RegistryHive.CurrentUser, _
                commandLineArgs(0)).OpenSubKey("Environment")
        Catch ex As IOException
            Console.WriteLine("{0}: {1}", _
                ex.GetType().Name, ex.Message)
            Return
        End Try

        ' Print the values.
        Console.WriteLine("\nThere are {0} values For {1}.", _
            environmentKey.ValueCount.ToString(), environmentKey.Name)

        For Each valueName As String In environmentKey.GetValueNames()
            Console.WriteLine("{0,-20}: {1}", valueName, _
                environmentKey.GetValue(valueName).ToString())
        Next

        ' Close the registry key.
        environmentKey.Close()

    End Sub
End Class

using System;
using System.IO;
using System.Security.Permissions;
using Microsoft.Win32;

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
    Read = @"HKEY_CURRENT_USER\Environment")]
[assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum,
    UnmanagedCode = true)]

class RemoteKey
{
    static void Main(string[] args)
    {
        RegistryKey environmentKey;
        string remoteName;

        // Check that an argument was specified when the
        // program was invoked.
        if(args.Length == 0)
        {
            Console.WriteLine("Error: The name of the remote " +
                "computer must be specified when the program is " +
                "invoked.");
            return;
        }
        else
        {
            remoteName = args[0];
        }

        try
        {
            // Open HKEY_CURRENT_USER\Environment
            // on a remote computer.
            environmentKey = RegistryKey.OpenRemoteBaseKey(
                RegistryHive.CurrentUser, remoteName).OpenSubKey(
                "Environment");
        }
        catch(IOException e)
        {
            Console.WriteLine("{0}: {1}",
                e.GetType().Name, e.Message);
            return;
        }

        // Print the values.
        Console.WriteLine("\nThere are {0} values for {1}.",
            environmentKey.ValueCount.ToString(),
            environmentKey.Name);
        foreach(string valueName in environmentKey.GetValueNames())
        {
            Console.WriteLine("{0,-20}: {1}", valueName,
                environmentKey.GetValue(valueName).ToString());
        }

        // Close the registry key.
        environmentKey.Close();
    }
}

using namespace System;
using namespace System::IO;
using namespace System::Security::Permissions;
using namespace Microsoft::Win32;

[assembly:RegistryPermissionAttribute(SecurityAction::RequestMinimum,
Read="HKEY_CURRENT_USER\\Environment")];
[assembly:SecurityPermissionAttribute(SecurityAction::RequestMinimum,
UnmanagedCode=true)];
int main( int argc, char *argv[] )
{
   RegistryKey ^ environmentKey;

   // Check that an argument was specified when the
   // program was invoked.
   if ( argc == 1 )
   {
      Console::WriteLine( "Error: The name of the remote computer "
      "must be specified as input on the command line." );
      return  -1;
   }

   try
   {

      // Open HKEY_CURRENT_USER\Environment on a remote computer.
      environmentKey = RegistryKey::OpenRemoteBaseKey( RegistryHive::CurrentUser, gcnew String(argv[ 1 ]) )->OpenSubKey( "Environment" );
   }
   catch ( IOException^ e )
   {
      Console::WriteLine(  "{0}: {1}", e->GetType()->Name, e->Message );
      return  -1;
   }

   // Print the values.
   Console::WriteLine( "\nThere are {0} values for {1}.", environmentKey->ValueCount.ToString(), environmentKey->Name );
   array<String^>^valueNames = environmentKey->GetValueNames();
   for ( int i = 0; i < environmentKey->ValueCount; i++ )
   {
      Console::WriteLine(  "{0,-20}: {1}", valueNames[ i ], environmentKey->GetValue( valueNames[ i ] )->ToString() );

   }

   // Close the registry key.
   environmentKey->Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
OpenRemoteBaseKey
RegistryKey


RegistryKey 类

RegistryKey 类
成员

表示 Windows 注册表中的项级节点。此类是注册表封装。 表示 Windows 注册表中的项级节点。此类是注册表封装。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public NotInheritable Class RegistryKey _
    Inherits MarshalByRefObject _
    Implements IDisposable
[ComVisibleAttribute(true)]
public sealed class RegistryKey : MarshalByRefObject,
    IDisposable
[ComVisibleAttribute(true)]
public ref class RegistryKey sealed : public MarshalByRefObject,
    IDisposable
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
type RegistryKey =
    class
        inherit MarshalByRefObject
        interface IDisposable
    end

要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。

注册表充当计算机上操作系统和应用程序的中央信息储存库。注册表根据存储在其中的元素的逻辑顺序，以分层形式组织（有关该层次结构中的基级项，请参见 Registry）。在注册表中存储信息时，请根据存储的信息类型选择适当的位置。一定要避免损坏由其他应用程序创建的信息，原因是这样会导致那些应用程序出现意外的行为，并且还会对您自己的应用程序带来不利影响。 注册表充当计算机上操作系统和应用程序的中央信息储存库。注册表根据存储在其中的元素的逻辑顺序，以分层形式组织（有关该层次结构中的基级项，请参见 Registry）。在注册表中存储信息时，请根据存储的信息类型选择适当的位置。一定要避免损坏由其他应用程序创建的信息，原因是这样会导致那些应用程序出现意外的行为，并且还会对您自己的应用程序带来不利影响。 注册表充当计算机上操作系统和应用程序的中央信息储存库。注册表根据存储在其中的元素的逻辑顺序，以分层形式组织（有关该层次结构中的基级项，请参见 Registry）。在注册表中存储信息时，请根据存储的信息类型选择适当的位置。一定要避免损坏由其他应用程序创建的信息，原因是这样会导致那些应用程序出现意外的行为，并且还会对您自己的应用程序带来不利影响。 注册表充当计算机上操作系统和应用程序的中央信息储存库。注册表根据存储在其中的元素的逻辑顺序，以分层形式组织（有关该层次结构中的基级项，请参见 Registry）。在注册表中存储信息时，请根据存储的信息类型选择适当的位置。一定要避免损坏由其他应用程序创建的信息，原因是这样会导致那些应用程序出现意外的行为，并且还会对您自己的应用程序带来不利影响。

注册表项是注册表中的基本组织单位，好比是 Windows 资源管理器中的文件夹。每个具体的注册表项都可以有子项，就像文件夹下可以有子文件夹一样。只要用户具有相应的权限，且注册表项不是基项或基项的下一级项，就可以删除该注册表项。每个注册表项也可带有与其相关联的多个值（一个值就好比是一个文件），它们用于存储信息，例如，有关计算机上安装的应用程序的信息。每个值存储特定的信息，可按需要对其进行检索或更新。例如，可以为您的公司创建一个 RegistryKey（在项 HKEY_LOCAL_MACHINE\Software 下），然后为您的公司创建的每个应用程序创建一个子项。每个子项保存特定于该应用程序的信息，如颜色设置、屏幕位置和大小或者可识别的文件扩展名。 注册表项是注册表中的基本组织单位，好比是 Windows 资源管理器中的文件夹。每个具体的注册表项都可以有子项，就像文件夹下可以有子文件夹一样。只要用户具有相应的权限，且注册表项不是基项或基项的下一级项，就可以删除该注册表项。每个注册表项也可带有与其相关联的多个值（一个值就好比是一个文件），它们用于存储信息，例如，有关计算机上安装的应用程序的信息。每个值存储特定的信息，可按需要对其进行检索或更新。例如，可以为您的公司创建一个 RegistryKey（在项 HKEY_LOCAL_MACHINE\Software 下），然后为您的公司创建的每个应用程序创建一个子项。每个子项保存特定于该应用程序的信息，如颜色设置、屏幕位置和大小或者可识别的文件扩展名。 注册表项是注册表中的基本组织单位，好比是 Windows 资源管理器中的文件夹。每个具体的注册表项都可以有子项，就像文件夹下可以有子文件夹一样。只要用户具有相应的权限，且注册表项不是基项或基项的下一级项，就可以删除该注册表项。每个注册表项也可带有与其相关联的多个值（一个值就好比是一个文件），它们用于存储信息，例如，有关计算机上安装的应用程序的信息。每个值存储特定的信息，可按需要对其进行检索或更新。例如，可以为您的公司创建一个 RegistryKey（在项 HKEY_LOCAL_MACHINE\Software 下），然后为您的公司创建的每个应用程序创建一个子项。每个子项保存特定于该应用程序的信息，如颜色设置、屏幕位置和大小或者可识别的文件扩展名。 注册表项是注册表中的基本组织单位，好比是 Windows 资源管理器中的文件夹。每个具体的注册表项都可以有子项，就像文件夹下可以有子文件夹一样。只要用户具有相应的权限，且注册表项不是基项或基项的下一级项，就可以删除该注册表项。每个注册表项也可带有与其相关联的多个值（一个值就好比是一个文件），它们用于存储信息，例如，有关计算机上安装的应用程序的信息。每个值存储特定的信息，可按需要对其进行检索或更新。例如，可以为您的公司创建一个 RegistryKey（在项 HKEY_LOCAL_MACHINE\Software 下），然后为您的公司创建的每个应用程序创建一个子项。每个子项保存特定于该应用程序的信息，如颜色设置、屏幕位置和大小或者可识别的文件扩展名。 注册表项是注册表中的基本组织单位，好比是 Windows 资源管理器中的文件夹。每个具体的注册表项都可以有子项，就像文件夹下可以有子文件夹一样。只要用户具有相应的权限，且注册表项不是基项或基项的下一级项，就可以删除该注册表项。每个注册表项也可带有与其相关联的多个值（一个值就好比是一个文件），它们用于存储信息，例如，有关计算机上安装的应用程序的信息。每个值存储特定的信息，可按需要对其进行检索或更新。例如，可以为您的公司创建一个 RegistryKey（在项 HKEY_LOCAL_MACHINE\Software 下），然后为您的公司创建的每个应用程序创建一个子项。每个子项保存特定于该应用程序的信息，如颜色设置、屏幕位置和大小或者可识别的文件扩展名。 注册表项是注册表中的基本组织单位，好比是 Windows 资源管理器中的文件夹。每个具体的注册表项都可以有子项，就像文件夹下可以有子文件夹一样。只要用户具有相应的权限，且注册表项不是基项或基项的下一级项，就可以删除该注册表项。每个注册表项也可带有与其相关联的多个值（一个值就好比是一个文件），它们用于存储信息，例如，有关计算机上安装的应用程序的信息。每个值存储特定的信息，可按需要对其进行检索或更新。例如，可以为您的公司创建一个 RegistryKey（在项 HKEY_LOCAL_MACHINE\Software 下），然后为您的公司创建的每个应用程序创建一个子项。每个子项保存特定于该应用程序的信息，如颜色设置、屏幕位置和大小或者可识别的文件扩展名。 注册表项是注册表中的基本组织单位，好比是 Windows 资源管理器中的文件夹。每个具体的注册表项都可以有子项，就像文件夹下可以有子文件夹一样。只要用户具有相应的权限，且注册表项不是基项或基项的下一级项，就可以删除该注册表项。每个注册表项也可带有与其相关联的多个值（一个值就好比是一个文件），它们用于存储信息，例如，有关计算机上安装的应用程序的信息。每个值存储特定的信息，可按需要对其进行检索或更新。例如，可以为您的公司创建一个 RegistryKey（在项 HKEY_LOCAL_MACHINE\Software 下），然后为您的公司创建的每个应用程序创建一个子项。每个子项保存特定于该应用程序的信息，如颜色设置、屏幕位置和大小或者可识别的文件扩展名。

注意，存储在注册表中的信息可由其他应用程序和用户使用，因此不要用注册表存储安全数据或关键的应用程序信息。

警告说明 警告

在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。 在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。

在 .NET Framework 4 版 中开始，注册表项的长度不再限于 255 个字符。

下面的代码示例演示如何在 HKEY_CURRENT_USER 下创建一个子项，处理相应的内容，然后删除该子项。

Imports Microsoft.VisualBasic
Imports System
Imports System.Security.Permissions
Imports Microsoft.Win32

Public Class RegKey
    Shared Sub Main()

        ' Create a subkey named Test9999 under HKEY_CURRENT_USER.
        Dim test9999 As RegistryKey = _
            Registry.CurrentUser.CreateSubKey("Test9999")

        ' Create two subkeys under HKEY_CURRENT_USER\Test9999.
        test9999.CreateSubKey("TestName").Close()
        Dim testSettings As RegistryKey = _
            test9999.CreateSubKey("TestSettings")

        ' Create data for the TestSettings subkey.
        testSettings.SetValue("Language", "French")
        testSettings.SetValue("Level", "Intermediate")
        testSettings.SetValue("ID", 123)
        testSettings.Close()

        ' Print the information from the Test9999 subkey.
        Console.WriteLine("There are {0} subkeys under Test9999.", _
            test9999.SubKeyCount.ToString())
        For Each subKeyName As String In test9999.GetSubKeyNames()
            Dim tempKey As RegistryKey = _
                test9999.OpenSubKey(subKeyName)
            Console.WriteLine(vbCrLf & "There are {0} values for " & _
                "{1}.", tempKey.ValueCount.ToString(), tempKey.Name)
            For Each valueName As String In tempKey.GetValueNames()
                Console.WriteLine("{0,-8}: {1}", valueName, _
                    tempKey.GetValue(valueName).ToString())
            Next
        Next

        ' Delete the ID value.
        testSettings = test9999.OpenSubKey("TestSettings", True)
        testSettings.DeleteValue("id")

        ' Verify the deletion.
        Console.WriteLine(CType(testSettings.GetValue( _
            "id", "ID not found."), String))
        testSettings.Close()

        ' Delete or close the new subkey.
        Console.Write(vbCrLf & "Delete newly created " & _
            "registry key? (Y/N) ")
        If Char.ToUpper(Convert.ToChar(Console.Read())) = "Y"C Then
            Registry.CurrentUser.DeleteSubKeyTree("Test9999")
            Console.WriteLine(vbCrLf & "Registry key {0} deleted.", _
                test9999.Name)
        Else
            Console.WriteLine(vbCrLf & "Registry key {0} closed.", _
                test9999.ToString())
            test9999.Close()
        End If

    End Sub
End Class

using System;
using System.Security.Permissions;
using Microsoft.Win32;

class RegKey
{
    static void Main()
    {
        // Create a subkey named Test9999 under HKEY_CURRENT_USER.
        RegistryKey test9999 =
            Registry.CurrentUser.CreateSubKey("Test9999");
        // Create two subkeys under HKEY_CURRENT_USER\Test9999. The
        // keys are disposed when execution exits the using statement.
        using(RegistryKey
            testName = test9999.CreateSubKey("TestName"),
            testSettings = test9999.CreateSubKey("TestSettings"))
        {
            // Create data for the TestSettings subkey.
            testSettings.SetValue("Language", "French");
            testSettings.SetValue("Level", "Intermediate");
            testSettings.SetValue("ID", 123);
        }

        // Print the information from the Test9999 subkey.
        Console.WriteLine("There are {0} subkeys under {1}.",
            test9999.SubKeyCount.ToString(), test9999.Name);
        foreach(string subKeyName in test9999.GetSubKeyNames())
        {
            using(RegistryKey
                tempKey = test9999.OpenSubKey(subKeyName))
            {
                Console.WriteLine("\nThere are {0} values for {1}.",
                    tempKey.ValueCount.ToString(), tempKey.Name);
                foreach(string valueName in tempKey.GetValueNames())
                {
                    Console.WriteLine("{0,-8}: {1}", valueName,
                        tempKey.GetValue(valueName).ToString());
                }
            }
        }

        using(RegistryKey
            testSettings = test9999.OpenSubKey("TestSettings", true))
        {
            // Delete the ID value.
            testSettings.DeleteValue("id");

            // Verify the deletion.
            Console.WriteLine((string)testSettings.GetValue(
                "id", "ID not found."));
        }

        // Delete or close the new subkey.
        Console.Write("\nDelete newly created registry key? (Y/N) ");
        if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
        {
            Registry.CurrentUser.DeleteSubKeyTree("Test9999");
            Console.WriteLine("\nRegistry key {0} deleted.",
                test9999.Name);
        }
        else
        {
            Console.WriteLine("\nRegistry key {0} closed.",
                test9999.ToString());
            test9999.Close();
        }
    }
}

using namespace System;
using namespace System::Security::Permissions;
using namespace Microsoft::Win32;

int main()
{
   // Create a subkey named Test9999 under HKEY_CURRENT_USER.
   RegistryKey ^ test9999 = Registry::CurrentUser->CreateSubKey( "Test9999" );

   // Create two subkeys under HKEY_CURRENT_USER\Test9999.
   test9999->CreateSubKey( "TestName" )->Close();
   RegistryKey ^ testSettings = test9999->CreateSubKey( "TestSettings" );

   // Create data for the TestSettings subkey.
   testSettings->SetValue( "Language", "French" );
   testSettings->SetValue( "Level", "Intermediate" );
   testSettings->SetValue( "ID", 123 );
   testSettings->Close();

   // Print the information from the Test9999 subkey.
   Console::WriteLine( "There are {0} subkeys under Test9999.", test9999->SubKeyCount.ToString() );
   array<String^>^subKeyNames = test9999->GetSubKeyNames();
   for ( int i = 0; i < subKeyNames->Length; i++ )
   {
      RegistryKey ^ tempKey = test9999->OpenSubKey( subKeyNames[ i ] );
      Console::WriteLine( "\nThere are {0} values for {1}.", tempKey->ValueCount.ToString(), tempKey->Name );
      array<String^>^valueNames = tempKey->GetValueNames();
      for ( int j = 0; j < valueNames->Length; j++ )
      {
         Console::WriteLine( "{0,-8}: {1}", valueNames[ j ], tempKey->GetValue( valueNames[ j ] )->ToString() );

      }
   }

   // Delete the ID value.
   testSettings = test9999->OpenSubKey( "TestSettings", true );
   testSettings->DeleteValue( "id" );

   // Verify the deletion.
   Console::WriteLine( dynamic_cast<String^>(testSettings->GetValue(  "id", "ID not found." )) );
   testSettings->Close();

   // Delete or close the new subkey.
   Console::Write( "\nDelete newly created registry key? (Y/N) " );
   if ( Char::ToUpper( Convert::ToChar( Console::Read() ) ) == 'Y' )
   {
      Registry::CurrentUser->DeleteSubKeyTree( "Test9999" );
      Console::WriteLine( "\nRegistry key {0} deleted.", test9999->Name );
   }
   else
   {
      Console::WriteLine( "\nRegistry key {0} closed.", test9999->ToString() );
      test9999->Close();
   }
}

Microsoft.Win32 Microsoft.Win32..::.RegistryKeyRegistryKey
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 成员
Microsoft.Win32 命名空间
Registry
RegistryHive


RegistryKey 成员

RegistryKey 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

表示 Windows 注册表中的项级节点。此类是注册表封装。 表示 Windows 注册表中的项级节点。此类是注册表封装。

RegistryKey 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

RegistryKey 类
Microsoft.Win32 命名空间


RegistryKey 方法

RegistryKey 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

RegistryKey 类型公开以下成员。

名称 说明
页首

参考

RegistryKey 类
Microsoft.Win32 命名空间


RegistryKey ..::.Close 方法

RegistryKey
.
.
::
.
Close 方法
RegistryKey 类

关闭该项，如果该项的内容已修改，则将该项刷新到磁盘。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Close
public void Close()
public:
void Close()
member Close : unit -> unit

对系统项调用此方法不会产生任何效果，原因是系统项永远都不会关闭。

如果对已经关闭的 RegistryKey 的实例调用此方法，则它不执行任何操作。

此代码示例摘自一个为 RegistryKey 类提供的更大示例。

' Delete or close the new subkey.
Console.Write(vbCrLf & "Delete newly created " & _
    "registry key? (Y/N) ")
If Char.ToUpper(Convert.ToChar(Console.Read())) = "Y"C Then
    Registry.CurrentUser.DeleteSubKeyTree("Test9999")
    Console.WriteLine(vbCrLf & "Registry key {0} deleted.", _
        test9999.Name)
Else
    Console.WriteLine(vbCrLf & "Registry key {0} closed.", _
        test9999.ToString())
    test9999.Close()
End If

// Delete or close the new subkey.
Console.Write("\nDelete newly created registry key? (Y/N) ");
if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
{
    Registry.CurrentUser.DeleteSubKeyTree("Test9999");
    Console.WriteLine("\nRegistry key {0} deleted.",
        test9999.Name);
}
else
{
    Console.WriteLine("\nRegistry key {0} closed.",
        test9999.ToString());
    test9999.Close();
}

// Delete or close the new subkey.
Console::Write( "\nDelete newly created registry key? (Y/N) " );
if ( Char::ToUpper( Convert::ToChar( Console::Read() ) ) == 'Y' )
{
   Registry::CurrentUser->DeleteSubKeyTree( "Test9999" );
   Console::WriteLine( "\nRegistry key {0} deleted.", test9999->Name );
}
else
{
   Console::WriteLine( "\nRegistry key {0} closed.", test9999->ToString() );
   test9999->Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间
Flush


RegistryKey ..::.CreateSubKey 方法

RegistryKey
.
.
::
.
CreateSubKey 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

创建一个新子项或打开一个现有子项。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.CreateSubKey 方法 (String)

RegistryKey
.
.
::
.
CreateSubKey 方法 (String)
RegistryKey 类

创建一个新子项或打开一个现有子项以进行写访问。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateSubKey ( _
    subkey As String _
) As RegistryKey
public RegistryKey CreateSubKey(
    string subkey
)
public:
RegistryKey^ CreateSubKey(
    String^ subkey
)
member CreateSubKey :
        subkey:string -> RegistryKey

参数

subkey
类型： System String
要创建或打开的子项的名称或路径。此字符串不区分大小写。 要创建或打开的子项的名称或路径。此字符串不区分大小写。

返回值

类型： Microsoft.Win32 RegistryKey
新创建的子项，如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果为 subkey 指定了零长度字符串，则返回当前的 RegistryKey 对象。 新创建的子项，如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果为 subkey 指定了零长度字符串，则返回当前的 RegistryKey 对象。
异常 | 条件
ArgumentNullException | subkey 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 用户没有创建或打开该注册表项所需的权限。
ObjectDisposedException | 调用此方法时所针对的 RegistryKey 已关闭（无法访问已关闭的项）。
UnauthorizedAccessException | 无法写入 RegistryKey；例如，它不是作为可写入项打开的，或者用户没有必需的访问权限。
IOException | 嵌套级别超过 510。 - 或 - 发生系统错误，例如，删除了项，或者尝试在 LocalMachine 根中创建项。

为了执行此操作，用户必须在注册表层次结构中的该级别及其下面级别上具有权限。

警告说明 警告

在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。 在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。

下面的代码示例演示如何在 HKEY_CURRENT_USER 下创建一个子项，处理相应的内容，然后删除该子项。

Imports Microsoft.VisualBasic
Imports System
Imports System.Security.Permissions
Imports Microsoft.Win32

Public Class RegKey
    Shared Sub Main()

        ' Create a subkey named Test9999 under HKEY_CURRENT_USER.
        Dim test9999 As RegistryKey = _
            Registry.CurrentUser.CreateSubKey("Test9999")

        ' Create two subkeys under HKEY_CURRENT_USER\Test9999.
        test9999.CreateSubKey("TestName").Close()
        Dim testSettings As RegistryKey = _
            test9999.CreateSubKey("TestSettings")

        ' Create data for the TestSettings subkey.
        testSettings.SetValue("Language", "French")
        testSettings.SetValue("Level", "Intermediate")
        testSettings.SetValue("ID", 123)
        testSettings.Close()

        ' Print the information from the Test9999 subkey.
        Console.WriteLine("There are {0} subkeys under Test9999.", _
            test9999.SubKeyCount.ToString())
        For Each subKeyName As String In test9999.GetSubKeyNames()
            Dim tempKey As RegistryKey = _
                test9999.OpenSubKey(subKeyName)
            Console.WriteLine(vbCrLf & "There are {0} values for " & _
                "{1}.", tempKey.ValueCount.ToString(), tempKey.Name)
            For Each valueName As String In tempKey.GetValueNames()
                Console.WriteLine("{0,-8}: {1}", valueName, _
                    tempKey.GetValue(valueName).ToString())
            Next
        Next

        ' Delete the ID value.
        testSettings = test9999.OpenSubKey("TestSettings", True)
        testSettings.DeleteValue("id")

        ' Verify the deletion.
        Console.WriteLine(CType(testSettings.GetValue( _
            "id", "ID not found."), String))
        testSettings.Close()

        ' Delete or close the new subkey.
        Console.Write(vbCrLf & "Delete newly created " & _
            "registry key? (Y/N) ")
        If Char.ToUpper(Convert.ToChar(Console.Read())) = "Y"C Then
            Registry.CurrentUser.DeleteSubKeyTree("Test9999")
            Console.WriteLine(vbCrLf & "Registry key {0} deleted.", _
                test9999.Name)
        Else
            Console.WriteLine(vbCrLf & "Registry key {0} closed.", _
                test9999.ToString())
            test9999.Close()
        End If

    End Sub
End Class

using System;
using System.Security.Permissions;
using Microsoft.Win32;

class RegKey
{
    static void Main()
    {
        // Create a subkey named Test9999 under HKEY_CURRENT_USER.
        RegistryKey test9999 =
            Registry.CurrentUser.CreateSubKey("Test9999");
        // Create two subkeys under HKEY_CURRENT_USER\Test9999. The
        // keys are disposed when execution exits the using statement.
        using(RegistryKey
            testName = test9999.CreateSubKey("TestName"),
            testSettings = test9999.CreateSubKey("TestSettings"))
        {
            // Create data for the TestSettings subkey.
            testSettings.SetValue("Language", "French");
            testSettings.SetValue("Level", "Intermediate");
            testSettings.SetValue("ID", 123);
        }

        // Print the information from the Test9999 subkey.
        Console.WriteLine("There are {0} subkeys under {1}.",
            test9999.SubKeyCount.ToString(), test9999.Name);
        foreach(string subKeyName in test9999.GetSubKeyNames())
        {
            using(RegistryKey
                tempKey = test9999.OpenSubKey(subKeyName))
            {
                Console.WriteLine("\nThere are {0} values for {1}.",
                    tempKey.ValueCount.ToString(), tempKey.Name);
                foreach(string valueName in tempKey.GetValueNames())
                {
                    Console.WriteLine("{0,-8}: {1}", valueName,
                        tempKey.GetValue(valueName).ToString());
                }
            }
        }

        using(RegistryKey
            testSettings = test9999.OpenSubKey("TestSettings", true))
        {
            // Delete the ID value.
            testSettings.DeleteValue("id");

            // Verify the deletion.
            Console.WriteLine((string)testSettings.GetValue(
                "id", "ID not found."));
        }

        // Delete or close the new subkey.
        Console.Write("\nDelete newly created registry key? (Y/N) ");
        if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
        {
            Registry.CurrentUser.DeleteSubKeyTree("Test9999");
            Console.WriteLine("\nRegistry key {0} deleted.",
                test9999.Name);
        }
        else
        {
            Console.WriteLine("\nRegistry key {0} closed.",
                test9999.ToString());
            test9999.Close();
        }
    }
}

using namespace System;
using namespace System::Security::Permissions;
using namespace Microsoft::Win32;

int main()
{
   // Create a subkey named Test9999 under HKEY_CURRENT_USER.
   RegistryKey ^ test9999 = Registry::CurrentUser->CreateSubKey( "Test9999" );

   // Create two subkeys under HKEY_CURRENT_USER\Test9999.
   test9999->CreateSubKey( "TestName" )->Close();
   RegistryKey ^ testSettings = test9999->CreateSubKey( "TestSettings" );

   // Create data for the TestSettings subkey.
   testSettings->SetValue( "Language", "French" );
   testSettings->SetValue( "Level", "Intermediate" );
   testSettings->SetValue( "ID", 123 );
   testSettings->Close();

   // Print the information from the Test9999 subkey.
   Console::WriteLine( "There are {0} subkeys under Test9999.", test9999->SubKeyCount.ToString() );
   array<String^>^subKeyNames = test9999->GetSubKeyNames();
   for ( int i = 0; i < subKeyNames->Length; i++ )
   {
      RegistryKey ^ tempKey = test9999->OpenSubKey( subKeyNames[ i ] );
      Console::WriteLine( "\nThere are {0} values for {1}.", tempKey->ValueCount.ToString(), tempKey->Name );
      array<String^>^valueNames = tempKey->GetValueNames();
      for ( int j = 0; j < valueNames->Length; j++ )
      {
         Console::WriteLine( "{0,-8}: {1}", valueNames[ j ], tempKey->GetValue( valueNames[ j ] )->ToString() );

      }
   }

   // Delete the ID value.
   testSettings = test9999->OpenSubKey( "TestSettings", true );
   testSettings->DeleteValue( "id" );

   // Verify the deletion.
   Console::WriteLine( dynamic_cast<String^>(testSettings->GetValue(  "id", "ID not found." )) );
   testSettings->Close();

   // Delete or close the new subkey.
   Console::Write( "\nDelete newly created registry key? (Y/N) " );
   if ( Char::ToUpper( Convert::ToChar( Console::Read() ) ) == 'Y' )
   {
      Registry::CurrentUser->DeleteSubKeyTree( "Test9999" );
      Console::WriteLine( "\nRegistry key {0} deleted.", test9999->Name );
   }
   else
   {
      Console::WriteLine( "\nRegistry key {0} closed.", test9999->ToString() );
      test9999->Close();
   }
}
  • RegistryPermission

    表示修改已存在的指定注册表项的能力，或者表示创建尚未存在的注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create 表示修改已存在的指定注册表项的能力，或者表示创建尚未存在的注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
CreateSubKey 重载
Microsoft.Win32 命名空间
DeleteSubKey
OpenSubKey


RegistryKey ..::.CreateSubKey 方法 (String, RegistryKeyPermissionCheck)

RegistryKey
.
.
::
.
CreateSubKey 方法 (String, RegistryKeyPermissionCheck)
RegistryKey 类

使用指定的权限检查选项创建一个新子项或打开一个现有子项以进行写访问。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function CreateSubKey ( _
    subkey As String, _
    permissionCheck As RegistryKeyPermissionCheck _
) As RegistryKey
[ComVisibleAttribute(false)]
public RegistryKey CreateSubKey(
    string subkey,
    RegistryKeyPermissionCheck permissionCheck
)
[ComVisibleAttribute(false)]
public:
RegistryKey^ CreateSubKey(
    String^ subkey,
    RegistryKeyPermissionCheck permissionCheck
)
[<ComVisibleAttribute(false)>]
member CreateSubKey :
        subkey:string *
        permissionCheck:RegistryKeyPermissionCheck -> RegistryKey

参数

subkey
类型： System String
要创建或打开的子项的名称或路径。此字符串不区分大小写。 要创建或打开的子项的名称或路径。此字符串不区分大小写。
permissionCheck
类型： Microsoft.Win32 RegistryKeyPermissionCheck
用于指定打开该项是进行读取还是读取/写入访问的枚举值之一。

返回值

类型： Microsoft.Win32 RegistryKey
新创建的子项，如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果为 subkey 指定了零长度字符串，则返回当前的 RegistryKey 对象。 新创建的子项，如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果为 subkey 指定了零长度字符串，则返回当前的 RegistryKey 对象。
异常 | 条件
ArgumentNullException | subkey 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 用户没有创建或打开该注册表项所需的权限。
ArgumentException | permissionCheck 包含无效值。
ObjectDisposedException | 调用此方法时所针对的 RegistryKey 已关闭（无法访问已关闭的项）。
UnauthorizedAccessException | 无法写入 RegistryKey；例如，它不是作为可写入项打开的，或者用户没有必需的访问权限。
IOException | 嵌套级别超过 510。 - 或 - 发生系统错误，例如，删除了项，或者尝试在 LocalMachine 根中创建项。

为了执行此操作，用户必须在注册表层次结构中的该级别及其下面级别上具有权限。

警告说明 警告

在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。 在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。

要使用 OpenSubKey 方法，您必须拥有 RegistryKey 类的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。 要使用 OpenSubKey 方法，您必须拥有 RegistryKey 类的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。

  • RegistryPermission

    表示修改已存在的指定注册表项的能力，或者表示创建尚未存在的注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create 表示修改已存在的指定注册表项的能力，或者表示创建尚未存在的注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
CreateSubKey 重载
Microsoft.Win32 命名空间
DeleteSubKey
OpenSubKey


RegistryKey ..::.CreateSubKey 方法 (String, RegistryKeyPermissionCheck, RegistryOptions)

RegistryKey
.
.
::
.
CreateSubKey 方法 (String, RegistryKeyPermissionCheck, RegistryOptions)
RegistryKey 类

使用指定的权限检查和注册表选项，创建或打开一个用于写访问的子项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function CreateSubKey ( _
    subkey As String, _
    permissionCheck As RegistryKeyPermissionCheck, _
    options As RegistryOptions _
) As RegistryKey
[ComVisibleAttribute(false)]
public RegistryKey CreateSubKey(
    string subkey,
    RegistryKeyPermissionCheck permissionCheck,
    RegistryOptions options
)
[ComVisibleAttribute(false)]
public:
RegistryKey^ CreateSubKey(
    String^ subkey,
    RegistryKeyPermissionCheck permissionCheck,
    RegistryOptions options
)
[<ComVisibleAttribute(false)>]
member CreateSubKey :
        subkey:string *
        permissionCheck:RegistryKeyPermissionCheck *
        options:RegistryOptions -> RegistryKey

参数

subkey
类型： System String
要创建或打开的子项的名称或路径。
permissionCheck
类型： Microsoft.Win32 RegistryKeyPermissionCheck
用于指定打开该项是进行读取还是读取/写入访问的枚举值之一。
options
类型： Microsoft.Win32 RegistryOptions
要使用的注册表选项；例如，用于创建可变键的注册表选项。

返回值

类型： Microsoft.Win32 RegistryKey
新创建的子项，如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | subkey 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ObjectDisposedException | 当前的 RegistryKey 对象已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 无法写入当前 RegistryKey 对象；例如，它未作为可写入项打开，或用户不具有所需的访问权限。
IOException | 嵌套级别超过 510。 - 或 - 发生系统错误，例如，删除了项，或者尝试在 LocalMachine 根中创建项。
SecurityException | 用户没有创建或打开该注册表项所需的权限。

若要获得当前 RegistryKey 对象，请为 subkey 指定空字符串 ("")。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
CreateSubKey 重载
Microsoft.Win32 命名空间


RegistryKey ..::.CreateSubKey 方法 (String, RegistryKeyPermissionCheck, RegistrySecurity)

RegistryKey
.
.
::
.
CreateSubKey 方法 (String, RegistryKeyPermissionCheck, RegistrySecurity)
RegistryKey 类

使用指定的权限检查选项和注册表安全性创建一个新子项或打开一个现有子项以进行写访问。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function CreateSubKey ( _
    subkey As String, _
    permissionCheck As RegistryKeyPermissionCheck, _
    registrySecurity As RegistrySecurity _
) As RegistryKey
[ComVisibleAttribute(false)]
public RegistryKey CreateSubKey(
    string subkey,
    RegistryKeyPermissionCheck permissionCheck,
    RegistrySecurity registrySecurity
)
[ComVisibleAttribute(false)]
public:
RegistryKey^ CreateSubKey(
    String^ subkey,
    RegistryKeyPermissionCheck permissionCheck,
    RegistrySecurity^ registrySecurity
)
[<ComVisibleAttribute(false)>]
member CreateSubKey :
        subkey:string *
        permissionCheck:RegistryKeyPermissionCheck *
        registrySecurity:RegistrySecurity -> RegistryKey

参数

subkey
类型： System String
要创建或打开的子项的名称或路径。此字符串不区分大小写。 要创建或打开的子项的名称或路径。此字符串不区分大小写。
permissionCheck
类型： Microsoft.Win32 RegistryKeyPermissionCheck
用于指定打开该项是进行读取还是读取/写入访问的枚举值之一。
registrySecurity
类型： System.Security.AccessControl RegistrySecurity
新项的访问控制安全性。

返回值

类型： Microsoft.Win32 RegistryKey
新创建的子项，如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果为 subkey 指定了零长度字符串，则返回当前的 RegistryKey 对象。 新创建的子项，如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果为 subkey 指定了零长度字符串，则返回当前的 RegistryKey 对象。
异常 | 条件
ArgumentNullException | subkey 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 用户没有创建或打开该注册表项所需的权限。
ArgumentException | permissionCheck 包含无效值。
ObjectDisposedException | 调用此方法时所针对的 RegistryKey 已关闭（无法访问已关闭的项）。
UnauthorizedAccessException | 无法写入当前 RegistryKey；例如，它未作为可写入项打开，或用户不具有必要的访问权限。
IOException | 嵌套级别超过 510。 - 或 - 发生系统错误，例如，删除了项，或者尝试在 LocalMachine 根中创建项。

CreateSubKey 方法创建注册表项，此注册表项具有由 registrySecurity 参数指定的访问控制。返回的 RegistryKey 对象表示注册表项，但该对象不受 registrySecurity 参数中指定的访问控制限制。 CreateSubKey 方法创建注册表项，此注册表项具有由 registrySecurity 参数指定的访问控制。返回的 RegistryKey 对象表示注册表项，但该对象不受 registrySecurity 参数中指定的访问控制限制。

如果 permissionCheck 为 RegistryKeyPermissionCheck..::.ReadWriteSubTree，则打开该项进行读/写访问。如果 permissionCheck 为 RegistryKeyPermissionCheck..::.ReadSubTree，则打开该项进行读取访问。 如果 permissionCheck 为 RegistryKeyPermissionCheck..::.ReadWriteSubTree，则打开该项进行读/写访问。如果 permissionCheck 为 RegistryKeyPermissionCheck..::.ReadSubTree，则打开该项进行读取访问。

为了向后兼容，如果 permissionCheck 为 RegistryKeyPermissionCheck..::.Default 并且父项也有 RegistryKeyPermissionCheck..::.Default，则打开该项进行读写。如果父项具有任何其他设置，则由父项的设置控制读/写状态。 为了向后兼容，如果 permissionCheck 为 RegistryKeyPermissionCheck..::.Default 并且父项也有 RegistryKeyPermissionCheck..::.Default，则打开该项进行读写。如果父项具有任何其他设置，则由父项的设置控制读/写状态。

为了执行此操作，用户必须在注册表层次结构中的该级别及其下面级别上具有权限。

警告说明 警告

在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。 在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。

要使用 OpenSubKey 方法，您必须拥有 RegistryKey 类的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。 要使用 OpenSubKey 方法，您必须拥有 RegistryKey 类的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。

  • RegistryPermission

    表示修改已存在的指定注册表项的能力，或者表示创建尚未存在的注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create 表示修改已存在的指定注册表项的能力，或者表示创建尚未存在的注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
CreateSubKey 重载
Microsoft.Win32 命名空间
DeleteSubKey
OpenSubKey


RegistryKey ..::.CreateSubKey 方法 (String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity)

RegistryKey
.
.
::
.
CreateSubKey 方法 (String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity)
RegistryKey 类

使用指定的权限检查选项、注册表选项和注册表安全性，创建或打开一个用于写访问的子项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function CreateSubKey ( _
    subkey As String, _
    permissionCheck As RegistryKeyPermissionCheck, _
    registryOptions As RegistryOptions, _
    registrySecurity As RegistrySecurity _
) As RegistryKey
[ComVisibleAttribute(false)]
public RegistryKey CreateSubKey(
    string subkey,
    RegistryKeyPermissionCheck permissionCheck,
    RegistryOptions registryOptions,
    RegistrySecurity registrySecurity
)
[ComVisibleAttribute(false)]
public:
RegistryKey^ CreateSubKey(
    String^ subkey,
    RegistryKeyPermissionCheck permissionCheck,
    RegistryOptions registryOptions,
    RegistrySecurity^ registrySecurity
)
[<ComVisibleAttribute(false)>]
member CreateSubKey :
        subkey:string *
        permissionCheck:RegistryKeyPermissionCheck *
        registryOptions:RegistryOptions *
        registrySecurity:RegistrySecurity -> RegistryKey

参数

subkey
类型： System String
要创建或打开的子项的名称或路径。
permissionCheck
类型： Microsoft.Win32 RegistryKeyPermissionCheck
用于指定打开该项是进行读取还是读取/写入访问的枚举值之一。
registryOptions
类型： Microsoft.Win32 RegistryOptions
要使用的注册表选项。
registrySecurity
类型： System.Security.AccessControl RegistrySecurity
新子项的访问控制安全性。

返回值

类型： Microsoft.Win32 RegistryKey
新创建的子项，如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | subkey 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ObjectDisposedException | 当前的 RegistryKey 对象被关闭。无法访问已关闭的项。 当前的 RegistryKey 对象被关闭。无法访问已关闭的项。
UnauthorizedAccessException | 无法写入当前 RegistryKey 对象；例如，它未作为可写入项打开，或用户不具有所需的访问权限。
IOException | 嵌套级别超过 510。 - 或 - 发生系统错误，例如，删除了项，或者尝试在 LocalMachine 根中创建项。
SecurityException | 用户没有创建或打开该注册表项所需的权限。

若要获得当前 RegistryKey 对象，请为 subkey 指定空字符串 ("")。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
CreateSubKey 重载
Microsoft.Win32 命名空间


RegistryKey ..::.DeleteSubKey 方法

RegistryKey
.
.
::
.
DeleteSubKey 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

删除指定的子项。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.DeleteSubKey 方法 (String)

RegistryKey
.
.
::
.
DeleteSubKey 方法 (String)
RegistryKey 类

删除指定的子项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub DeleteSubKey ( _
    subkey As String _
)
public void DeleteSubKey(
    string subkey
)
public:
void DeleteSubKey(
    String^ subkey
)
member DeleteSubKey :
        subkey:string -> unit

参数

subkey
类型： System String
要删除的子项的名称。此字符串不区分大小写。 要删除的子项的名称。此字符串不区分大小写。
异常 | 条件
InvalidOperationException | subkey 有子级子项
ArgumentException | subkey 参数未指定有效的注册表项
ArgumentNullException | subkey 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 用户没有删除该项所需的权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 用户没有必需的注册表权限。

若要删除子级子项，请使用 DeleteSubKeyTree。

删除注册表项时要小心。

下面的示例演示如何使用 DeleteSubKey。

Imports System
Imports Microsoft.Win32

Public Class RegKeyDel
    Public Shared Sub Main()
        ' Create a subkey named Test9999 under HKEY_CURRENT_USER.
        Dim test9999 As RegistryKey = _
            Registry.CurrentUser.CreateSubKey("Test9999")
        ' Create two subkeys under HKEY_CURRENT_USER\Test9999. The
        ' keys are disposed when execution exits the using statement.
        Dim testName As RegistryKey = test9999.CreateSubKey("TestName")
        Dim testSettings As RegistryKey = test9999.CreateSubKey("TestSettings")

        ' Create data for the TestSettings subkey.
        testSettings.SetValue("Language", "French")
        testSettings.SetValue("Level", "Intermediate")
        testSettings.SetValue("ID", 123)

        ' delete the subkey "TestName"
        test9999.DeleteSubKey("TestName")
        ' delete everything under and including "Test9999"
        Registry.CurrentUser.DeleteSubKeyTree("Test9999")
    End Sub
End Class

using System;
using Microsoft.Win32;

class RegKeyDel
{
    static void Main()
    {
        // Create a subkey named Test9999 under HKEY_CURRENT_USER.
        RegistryKey test9999 =
            Registry.CurrentUser.CreateSubKey("Test9999");
        // Create two subkeys under HKEY_CURRENT_USER\Test9999. The
        // keys are disposed when execution exits the using statement.
        RegistryKey testName = test9999.CreateSubKey("TestName");
        RegistryKey testSettings = test9999.CreateSubKey("TestSettings");

        // Create data for the TestSettings subkey.
        testSettings.SetValue("Language", "French");
        testSettings.SetValue("Level", "Intermediate");
        testSettings.SetValue("ID", 123);

        // delete the subkey "TestName"
        test9999.DeleteSubKey("TestName");
        // delete everything under and including "Test9999"
        Registry.CurrentUser.DeleteSubKeyTree("Test9999");
    }
}

using namespace System;
using namespace Microsoft::Win32;

public ref class RegKeyDel
{
public:
    static void Main()
    {
        // Create a subkey named Test9999 under HKEY_CURRENT_USER.
        RegistryKey^ test9999 =
            Registry::CurrentUser->CreateSubKey("Test9999");
        // Create two subkeys under HKEY_CURRENT_USER\Test9999. The
        // keys are disposed when execution exits the using statement.
        RegistryKey^ testName = test9999->CreateSubKey("TestName");
        RegistryKey^ testSettings = test9999->CreateSubKey("TestSettings");

        // Create data for the TestSettings subkey.
        testSettings->SetValue("Language", "French");
        testSettings->SetValue("Level", "Intermediate");
        testSettings->SetValue("ID", 123);

        // delete the subkey "TestName"
        test9999->DeleteSubKey("TestName");
        // delete everything under and including "Test9999"
        Registry::CurrentUser->DeleteSubKeyTree("Test9999");
    }
};

int main()
{
    RegKeyDel::Main();
}
  • RegistryPermission

    表示修改指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write 表示修改指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
DeleteSubKey 重载
Microsoft.Win32 命名空间
DeleteSubKeyTree
CreateSubKey
DeleteValue
GetSubKeyNames


RegistryKey ..::.DeleteSubKey 方法 (String, Boolean)

RegistryKey
.
.
::
.
DeleteSubKey 方法 (String, Boolean)
RegistryKey 类

删除指定的子项，并指定在找不到该子项时是否引发异常。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub DeleteSubKey ( _
    subkey As String, _
    throwOnMissingSubKey As Boolean _
)
public void DeleteSubKey(
    string subkey,
    bool throwOnMissingSubKey
)
public:
void DeleteSubKey(
    String^ subkey,
    bool throwOnMissingSubKey
)
member DeleteSubKey :
        subkey:string *
        throwOnMissingSubKey:bool -> unit

参数

subkey
类型： System String
要删除的子项的名称。此字符串不区分大小写。 要删除的子项的名称。此字符串不区分大小写。
throwOnMissingSubKey
类型： System Boolean
指示在找不到指定子项的情况下是否引发异常。如果该参数为 true，并且指定的子项不存在，则引发异常。如果该参数为 false，并且指定的子项不存在，则不执行任何操作。 指示在找不到指定子项的情况下是否引发异常。如果该参数为 true，并且指定的子项不存在，则引发异常。如果该参数为 false，并且指定的子项不存在，则不执行任何操作。 指示在找不到指定子项的情况下是否引发异常。如果该参数为 true，并且指定的子项不存在，则引发异常。如果该参数为 false，并且指定的子项不存在，则不执行任何操作。
异常 | 条件
InvalidOperationException | subkey 有子级子项。
ArgumentException | subkey 未指定有效的注册表项，并且 throwOnMissingSubKey 为 true。
ArgumentNullException | subkey 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 用户没有删除该项所需的权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 用户没有必需的注册表权限。

若要删除子级子项，请使用 DeleteSubKeyTree。

删除注册表项时要小心。

  • RegistryPermission

    表示修改指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write 表示修改指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
DeleteSubKey 重载
Microsoft.Win32 命名空间
DeleteSubKeyTree
CreateSubKey
DeleteValue
GetSubKeyNames


RegistryKey ..::.DeleteSubKeyTree 方法

RegistryKey
.
.
::
.
DeleteSubKeyTree 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

使用可选的异常处理方以递归方式删除一个子项以及任何子级子项。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.DeleteSubKeyTree 方法 (String)

RegistryKey
.
.
::
.
DeleteSubKeyTree 方法 (String)
RegistryKey 类

递归删除子项和任何子级子项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub DeleteSubKeyTree ( _
    subkey As String _
)
public void DeleteSubKeyTree(
    string subkey
)
public:
void DeleteSubKeyTree(
    String^ subkey
)
member DeleteSubKeyTree :
        subkey:string -> unit

参数

subkey
类型： System String
要删除的子项。此字符串不区分大小写。 要删除的子项。此字符串不区分大小写。
异常 | 条件
ArgumentNullException | subkey 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 尝试删除根配置单元。 - 或 - subkey 未指定有效的注册表子项。
IOException | 出现 I/O 错误。
SecurityException | 用户没有删除该项所需的权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 用户没有必需的注册表权限。

必须具有适当权限才能删除子项及其目录树。

警告说明 警告

删除特定的项将移除目录树中该项下的所有项。并且不提供任何警告。如果想仅在子项没有子级子项时才删除该子项，请使用 DeleteSubKey 方法。 删除特定的项将移除目录树中该项下的所有项。并且不提供任何警告。如果想仅在子项没有子级子项时才删除该子项，请使用 DeleteSubKey 方法。 删除特定的项将移除目录树中该项下的所有项。并且不提供任何警告。如果想仅在子项没有子级子项时才删除该子项，请使用 DeleteSubKey 方法。

此代码示例摘自一个为 RegistryKey 类提供的更大示例。

' Delete or close the new subkey.
Console.Write(vbCrLf & "Delete newly created " & _
    "registry key? (Y/N) ")
If Char.ToUpper(Convert.ToChar(Console.Read())) = "Y"C Then
    Registry.CurrentUser.DeleteSubKeyTree("Test9999")
    Console.WriteLine(vbCrLf & "Registry key {0} deleted.", _
        test9999.Name)
Else
    Console.WriteLine(vbCrLf & "Registry key {0} closed.", _
        test9999.ToString())
    test9999.Close()
End If

// Delete or close the new subkey.
Console.Write("\nDelete newly created registry key? (Y/N) ");
if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
{
    Registry.CurrentUser.DeleteSubKeyTree("Test9999");
    Console.WriteLine("\nRegistry key {0} deleted.",
        test9999.Name);
}
else
{
    Console.WriteLine("\nRegistry key {0} closed.",
        test9999.ToString());
    test9999.Close();
}

// Delete or close the new subkey.
Console::Write( "\nDelete newly created registry key? (Y/N) " );
if ( Char::ToUpper( Convert::ToChar( Console::Read() ) ) == 'Y' )
{
   Registry::CurrentUser->DeleteSubKeyTree( "Test9999" );
   Console::WriteLine( "\nRegistry key {0} deleted.", test9999->Name );
}
else
{
   Console::WriteLine( "\nRegistry key {0} closed.", test9999->ToString() );
   test9999->Close();
}
  • RegistryPermission

    表示修改指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write 表示修改指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
DeleteSubKeyTree 重载
Microsoft.Win32 命名空间
DeleteSubKey
CreateSubKey
DeleteValue
GetSubKeyNames
SubKeyCount


RegistryKey ..::.DeleteSubKeyTree 方法 (String, Boolean)

RegistryKey
.
.
::
.
DeleteSubKeyTree 方法 (String, Boolean)
RegistryKey 类

以递归方式删除指定的子项和任何子级子项，并指定在找不到子项时是否引发异常。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Sub DeleteSubKeyTree ( _
    subkey As String, _
    throwOnMissingSubKey As Boolean _
)
[ComVisibleAttribute(false)]
public void DeleteSubKeyTree(
    string subkey,
    bool throwOnMissingSubKey
)
[ComVisibleAttribute(false)]
public:
void DeleteSubKeyTree(
    String^ subkey,
    bool throwOnMissingSubKey
)
[<ComVisibleAttribute(false)>]
member DeleteSubKeyTree :
        subkey:string *
        throwOnMissingSubKey:bool -> unit

参数

subkey
类型： System String
要删除的子项的名称。此字符串不区分大小写。 要删除的子项的名称。此字符串不区分大小写。
throwOnMissingSubKey
类型： System Boolean
指示在找不到指定子项的情况下是否引发异常。如果该参数为 true，并且指定的子项不存在，则引发异常。如果该参数为 false，并且指定的子项不存在，则不执行任何操作。 指示在找不到指定子项的情况下是否引发异常。如果该参数为 true，并且指定的子项不存在，则引发异常。如果该参数为 false，并且指定的子项不存在，则不执行任何操作。 指示在找不到指定子项的情况下是否引发异常。如果该参数为 true，并且指定的子项不存在，则引发异常。如果该参数为 false，并且指定的子项不存在，则不执行任何操作。
异常 | 条件
ArgumentException | 尝试删除树的根配置单元。 - 或 - subkey 未指定有效的注册表子项，并且 throwOnMissingSubKey 为 true。
ArgumentNullException | subkey 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ObjectDisposedException | RegistryKey 已关闭（无法访问已关闭的项）。
UnauthorizedAccessException | 用户没有必需的注册表权限。
SecurityException | 用户没有删除该项所需的权限。
  • RegistryPermission

    表示修改指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write 表示修改指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Write

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
DeleteSubKeyTree 重载
Microsoft.Win32 命名空间


RegistryKey ..::.DeleteValue 方法

RegistryKey
.
.
::
.
DeleteValue 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

从此项中删除指定的值，并在找不到该值时引发异常。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.DeleteValue 方法 (String)

RegistryKey
.
.
::
.
DeleteValue 方法 (String)
RegistryKey 类

从此项中删除指定值。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub DeleteValue ( _
    name As String _
)
public void DeleteValue(
    string name
)
public:
void DeleteValue(
    String^ name
)
member DeleteValue :
        name:string -> unit

参数

name
类型： System String
要删除的值的名称。
异常 | 条件
ArgumentException | name 不是对值的有效引用。
SecurityException | 用户没有删除该值所需的权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 正在处理的 RegistryKey 为只读。

在 Windows 95、Windows 98、Windows 98 Second Edition 和 Windows Millennium Edition 上，为 name 参数指定空字符串不会删除默认值。

此代码示例摘自一个为 RegistryKey 类提供的更大示例。

' Delete the ID value.
testSettings = test9999.OpenSubKey("TestSettings", True)
testSettings.DeleteValue("id")

' Verify the deletion.
Console.WriteLine(CType(testSettings.GetValue( _
    "id", "ID not found."), String))
testSettings.Close()

using(RegistryKey
    testSettings = test9999.OpenSubKey("TestSettings", true))
{
    // Delete the ID value.
    testSettings.DeleteValue("id");

    // Verify the deletion.
    Console.WriteLine((string)testSettings.GetValue(
        "id", "ID not found."));
}

// Delete the ID value.
testSettings = test9999->OpenSubKey( "TestSettings", true );
testSettings->DeleteValue( "id" );

// Verify the deletion.
Console::WriteLine( dynamic_cast<String^>(testSettings->GetValue(  "id", "ID not found." )) );
testSettings->Close();
  • RegistryPermission

    用于删除指定注册表项的功能。关联的枚举：RegistryPermissionAccess..::.Write 用于删除指定注册表项的功能。关联的枚举：RegistryPermissionAccess..::.Write

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
DeleteValue 重载
Microsoft.Win32 命名空间
DeleteSubKey
OpenSubKey
GetValue
GetValueNames
ValueCount


RegistryKey ..::.DeleteValue 方法 (String, Boolean)

RegistryKey
.
.
::
.
DeleteValue 方法 (String, Boolean)
RegistryKey 类

从此项中删除指定的值，并指定在找不到该值时是否引发异常。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub DeleteValue ( _
    name As String, _
    throwOnMissingValue As Boolean _
)
public void DeleteValue(
    string name,
    bool throwOnMissingValue
)
public:
void DeleteValue(
    String^ name,
    bool throwOnMissingValue
)
member DeleteValue :
        name:string *
        throwOnMissingValue:bool -> unit

参数

name
类型： System String
要删除的值的名称。
throwOnMissingValue
类型： System Boolean
指示在找不到指定值的情况下是否引发异常。如果该参数为 true，并且指定的值不存在，则引发异常。如果该参数为 false，并且指定的值不存在，则不执行任何操作。 指示在找不到指定值的情况下是否引发异常。如果该参数为 true，并且指定的值不存在，则引发异常。如果该参数为 false，并且指定的值不存在，则不执行任何操作。 指示在找不到指定值的情况下是否引发异常。如果该参数为 true，并且指定的值不存在，则引发异常。如果该参数为 false，并且指定的值不存在，则不执行任何操作。
异常 | 条件
ArgumentException | name 不是对值的有效引用，并且 throwOnMissingValue 为 true。 - 或 - name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 用户没有删除该值所需的权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 正在处理的 RegistryKey 为只读。

如果 throwOnMissingValue 为 false，则没有方法通知删除是否已成功完成（除非随后尝试访问刚被删除的值）。因此，以这种方式从注册表中删除值时要小心。 如果 throwOnMissingValue 为 false，则没有方法通知删除是否已成功完成（除非随后尝试访问刚被删除的值）。因此，以这种方式从注册表中删除值时要小心。

在 Windows 95、Windows 98、Windows 98 Second Edition 和 Windows Millennium Edition 上，为 name 参数指定空字符串不会删除默认值。

  • RegistryPermission

    用于删除指定注册表项的功能。关联的枚举：RegistryPermissionAccess..::.Write 用于删除指定注册表项的功能。关联的枚举：RegistryPermissionAccess..::.Write

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
DeleteValue 重载
Microsoft.Win32 命名空间
DeleteSubKey
OpenSubKey
GetValue
GetValueNames
ValueCount


RegistryKey ..::.Dispose 方法

RegistryKey
.
.
::
.
Dispose 方法
RegistryKey 类

释放由 RegistryKey 类的当前实例使用的所有资源。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Dispose
public void Dispose()
public:
virtual void Dispose() sealed
abstract Dispose : unit -> unit
override Dispose : unit -> unit

实现

使用完 RegistryKey 后调用 Dispose。Dispose 方法使 RegistryKey 处于不可用状态。调用 Dispose 后，必须释放对 RegistryKey 的所有引用，这样垃圾回收器才能回收 RegistryKey 占用的内存。 使用完 RegistryKey 后调用 Dispose。Dispose 方法使 RegistryKey 处于不可用状态。调用 Dispose 后，必须释放对 RegistryKey 的所有引用，这样垃圾回收器才能回收 RegistryKey 占用的内存。 使用完 RegistryKey 后调用 Dispose。Dispose 方法使 RegistryKey 处于不可用状态。调用 Dispose 后，必须释放对 RegistryKey 的所有引用，这样垃圾回收器才能回收 RegistryKey 占用的内存。

有关更多信息，请参见清理非托管资源和 实现 Dispose 方法。

说明 说明

释放对 RegistryKey 的最后一个引用之前，始终应先调用 Dispose。否则，在垃圾回收器调用 RegistryKey 对象的 Finalize 方法之前，该对象所使用的资源将不会被释放。 释放对 RegistryKey 的最后一个引用之前，始终应先调用 Dispose。否则，在垃圾回收器调用 RegistryKey 对象的 Finalize 方法之前，该对象所使用的资源将不会被释放。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.Flush 方法

RegistryKey
.
.
::
.
Flush 方法
RegistryKey 类

将指定的打开注册表项的全部特性写到注册表中。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Flush
public void Flush()
public:
void Flush()
member Flush : unit -> unit

写出对项的更改不必调用 Flush。注册表使用其惰性刷新器时，将注册表更改刷新到磁盘。惰性刷新按系统指定的时间间隔自动定期发生。系统关闭时，注册表更改也会刷新到磁盘。 写出对项的更改不必调用 Flush。注册表使用其惰性刷新器时，将注册表更改刷新到磁盘。惰性刷新按系统指定的时间间隔自动定期发生。系统关闭时，注册表更改也会刷新到磁盘。 写出对项的更改不必调用 Flush。注册表使用其惰性刷新器时，将注册表更改刷新到磁盘。惰性刷新按系统指定的时间间隔自动定期发生。系统关闭时，注册表更改也会刷新到磁盘。 写出对项的更改不必调用 Flush。注册表使用其惰性刷新器时，将注册表更改刷新到磁盘。惰性刷新按系统指定的时间间隔自动定期发生。系统关闭时，注册表更改也会刷新到磁盘。

与 Close 不同，Flush 函数仅在所有数据都已写入注册表时才返回。

Flush 函数还可能写出部分或全部其他项。过度调用此函数会对应用程序的性能产生负面影响。 Flush 函数还可能写出部分或全部其他项。过度调用此函数会对应用程序的性能产生负面影响。

只有当应用程序必须完全确定注册表更改记录于磁盘上时，才应调用 Flush。一般情况下，很少需要使用 Flush。 只有当应用程序必须完全确定注册表更改记录于磁盘上时，才应调用 Flush。一般情况下，很少需要使用 Flush。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间
Close


RegistryKey ..::.FromHandle 方法

RegistryKey
.
.
::
.
FromHandle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

根据指定的句柄创建注册表项。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.FromHandle 方法 (SafeRegistryHandle)

RegistryKey
.
.
::
.
FromHandle 方法 (SafeRegistryHandle)
RegistryKey 类

根据指定的句柄创建注册表项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
<SecurityPermissionAttribute(SecurityAction.Demand, Flags := SecurityPermissionFlag.UnmanagedCode)> _
Public Shared Function FromHandle ( _
    handle As SafeRegistryHandle _
) As RegistryKey
[ComVisibleAttribute(false)]
[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public static RegistryKey FromHandle(
    SafeRegistryHandle handle
)
[ComVisibleAttribute(false)]
[SecurityPermissionAttribute(SecurityAction::Demand, Flags = SecurityPermissionFlag::UnmanagedCode)]
public:
static RegistryKey^ FromHandle(
    SafeRegistryHandle^ handle
)
[<ComVisibleAttribute(false)>]
[<SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)>]
static member FromHandle :
        handle:SafeRegistryHandle -> RegistryKey

参数

handle
类型： Microsoft.Win32.SafeHandles SafeRegistryHandle
注册表项的句柄。

返回值

类型： Microsoft.Win32 RegistryKey
注册表项。
异常 | 条件
ArgumentNullException | handle 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
UnauthorizedAccessException | 用户没有必需的注册表权限。
SecurityException | 用户没有执行此操作所需的权限。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
FromHandle 重载
Microsoft.Win32 命名空间


RegistryKey ..::.FromHandle 方法 (SafeRegistryHandle, RegistryView)

RegistryKey
.
.
::
.
FromHandle 方法 (SafeRegistryHandle, RegistryView)
RegistryKey 类

利用指定的句柄和注册表视图设置创建注册表项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
<SecurityPermissionAttribute(SecurityAction.Demand, Flags := SecurityPermissionFlag.UnmanagedCode)> _
Public Shared Function FromHandle ( _
    handle As SafeRegistryHandle, _
    view As RegistryView _
) As RegistryKey
[ComVisibleAttribute(false)]
[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public static RegistryKey FromHandle(
    SafeRegistryHandle handle,
    RegistryView view
)
[ComVisibleAttribute(false)]
[SecurityPermissionAttribute(SecurityAction::Demand, Flags = SecurityPermissionFlag::UnmanagedCode)]
public:
static RegistryKey^ FromHandle(
    SafeRegistryHandle^ handle,
    RegistryView view
)
[<ComVisibleAttribute(false)>]
[<SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)>]
static member FromHandle :
        handle:SafeRegistryHandle *
        view:RegistryView -> RegistryKey

参数

handle
类型： Microsoft.Win32.SafeHandles SafeRegistryHandle
注册表项的句柄。
view
类型： Microsoft.Win32 RegistryView
要使用的注册表视图。

返回值

类型： Microsoft.Win32 RegistryKey
注册表项。
异常 | 条件
ArgumentException | view 无效。
ArgumentNullException | handle 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
UnauthorizedAccessException | 用户没有必需的注册表权限。
SecurityException | 用户没有执行此操作所需的权限。

此方法的 view 参数在后续操作中使用，如打开子项。

如果 view 是 Registry64，但是该计算机运行在 32 位操作系统上，则返回的键将使用 Registry32 视图。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
FromHandle 重载
Microsoft.Win32 命名空间


RegistryKey ..::.GetAccessControl 方法

RegistryKey
.
.
::
.
GetAccessControl 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

返回当前注册表项的访问控制安全性。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.GetAccessControl 方法

RegistryKey
.
.
::
.
GetAccessControl 方法
RegistryKey 类

返回当前注册表项的访问控制安全性。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetAccessControl As RegistrySecurity
public RegistrySecurity GetAccessControl()
public:
RegistrySecurity^ GetAccessControl()
member GetAccessControl : unit -> RegistrySecurity

返回值

类型： System.Security.AccessControl RegistrySecurity
一个对象，该对象描述针对由当前 RegistryKey 表示的注册表项的访问控制权限。
异常 | 条件
SecurityException | 用户没有必要的权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
InvalidOperationException | 当前项已被删除。

此方法重载等同于用以下标志的按位组合调用 GetAccessControl(AccessControlSections) 方法重载：AccessControlSections..::.Access、AccessControlSections..::.Owner 和 AccessControlSections..::.Group。该重载可用于搜索其他权限。 此方法重载等同于用以下标志的按位组合调用 GetAccessControl(AccessControlSections) 方法重载：AccessControlSections..::.Access、AccessControlSections..::.Owner 和 AccessControlSections..::.Group。该重载可用于搜索其他权限。

用户必须具有 RegistryRights..::.ReadPermissions 权限才能调用此方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
GetAccessControl 重载
Microsoft.Win32 命名空间


RegistryKey ..::.GetAccessControl 方法 (AccessControlSections)

RegistryKey
.
.
::
.
GetAccessControl 方法 (AccessControlSections)
RegistryKey 类

返回当前注册表项的访问控制安全性的指定部分。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetAccessControl ( _
    includeSections As AccessControlSections _
) As RegistrySecurity
public RegistrySecurity GetAccessControl(
    AccessControlSections includeSections
)
public:
RegistrySecurity^ GetAccessControl(
    AccessControlSections includeSections
)
member GetAccessControl :
        includeSections:AccessControlSections -> RegistrySecurity

参数

includeSections
类型： System.Security.AccessControl AccessControlSections
枚举值的按位组合，它指定要获取的安全信息类型。

返回值

类型： System.Security.AccessControl RegistrySecurity
一个对象，该对象描述针对由当前 RegistryKey 表示的注册表项的访问控制权限。
异常 | 条件
SecurityException | 用户没有必要的权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
InvalidOperationException | 当前项已被删除。

要请求当前授予用户的访问权限，请指定以下标志的按位组合：AccessControlSections..::.Access、AccessControlSections..::.Owner 和 AccessControlSections..::.Group。另外，也可使用 GetAccessControl()()() 方法重载，它正好指定该值组合。 要请求当前授予用户的访问权限，请指定以下标志的按位组合：AccessControlSections..::.Access、AccessControlSections..::.Owner 和 AccessControlSections..::.Group。另外，也可使用 GetAccessControl()()() 方法重载，它正好指定该值组合。

用户必须具有 RegistryRights..::.ReadPermissions 权限才能调用此方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
GetAccessControl 重载
Microsoft.Win32 命名空间


RegistryKey ..::.GetSubKeyNames 方法

RegistryKey
.
.
::
.
GetSubKeyNames 方法
RegistryKey 类

检索包含所有子项名称的字符串数组。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetSubKeyNames As String()
public string[] GetSubKeyNames()
public:
array<String^>^ GetSubKeyNames()
member GetSubKeyNames : unit -> string[]

返回值

类型：
array<
System String
>
[]
()
[]

包含当前项的子项名称的字符串数组。
异常 | 条件
SecurityException | 用户没有读取该项所需的权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 用户没有必需的注册表权限。
IOException | 发生系统错误，例如，当前项已被删除。

此方法不递归查找名称。它返回从中调用它的基级上的名称。 此方法不递归查找名称。它返回从中调用它的基级上的名称。

此代码示例摘自一个为 RegistryKey 类提供的更大示例。

' Print the information from the Test9999 subkey.
Console.WriteLine("There are {0} subkeys under Test9999.", _
    test9999.SubKeyCount.ToString())
For Each subKeyName As String In test9999.GetSubKeyNames()
    Dim tempKey As RegistryKey = _
        test9999.OpenSubKey(subKeyName)
    Console.WriteLine(vbCrLf & "There are {0} values for " & _
        "{1}.", tempKey.ValueCount.ToString(), tempKey.Name)
    For Each valueName As String In tempKey.GetValueNames()
        Console.WriteLine("{0,-8}: {1}", valueName, _
            tempKey.GetValue(valueName).ToString())
    Next
Next

// Print the information from the Test9999 subkey.
Console.WriteLine("There are {0} subkeys under {1}.",
    test9999.SubKeyCount.ToString(), test9999.Name);
foreach(string subKeyName in test9999.GetSubKeyNames())
{
    using(RegistryKey
        tempKey = test9999.OpenSubKey(subKeyName))
    {
        Console.WriteLine("\nThere are {0} values for {1}.",
            tempKey.ValueCount.ToString(), tempKey.Name);
        foreach(string valueName in tempKey.GetValueNames())
        {
            Console.WriteLine("{0,-8}: {1}", valueName,
                tempKey.GetValue(valueName).ToString());
        }
    }
}

// Print the information from the Test9999 subkey.
Console::WriteLine( "There are {0} subkeys under Test9999.", test9999->SubKeyCount.ToString() );
array<String^>^subKeyNames = test9999->GetSubKeyNames();
for ( int i = 0; i < subKeyNames->Length; i++ )
{
   RegistryKey ^ tempKey = test9999->OpenSubKey( subKeyNames[ i ] );
   Console::WriteLine( "\nThere are {0} values for {1}.", tempKey->ValueCount.ToString(), tempKey->Name );
   array<String^>^valueNames = tempKey->GetValueNames();
   for ( int j = 0; j < valueNames->Length; j++ )
   {
      Console::WriteLine( "{0,-8}: {1}", valueNames[ j ], tempKey->GetValue( valueNames[ j ] )->ToString() );

   }
}
  • RegistryPermission

    用于读取注册表的功能。关联的枚举：RegistryPermissionAccess..::.Read 用于读取注册表的功能。关联的枚举：RegistryPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间
SubKeyCount
GetValueNames


RegistryKey ..::.GetValue 方法

RegistryKey
.
.
::
.
GetValue 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

检索与指定名称关联的值。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.GetValue 方法 (String)

RegistryKey
.
.
::
.
GetValue 方法 (String)
RegistryKey 类

检索与指定名称关联的值。如果注册表中不存在名称/值对，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 检索与指定名称关联的值。如果注册表中不存在名称/值对，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetValue ( _
    name As String _
) As Object
public Object GetValue(
    string name
)
public:
Object^ GetValue(
    String^ name
)
member GetValue :
        name:string -> Object

参数

name
类型： System String
要检索的值的名称。此字符串不区分大小写。 要检索的值的名称。此字符串不区分大小写。

返回值

类型： System Object
与 name 关联的值；如果未找到 name，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
SecurityException | 该用户没有读取注册表项所需的权限。
ObjectDisposedException | 包含指定值的 RegistryKey 已关闭（无法访问关闭的项）。
IOException | 包含指定值的 RegistryKey 已标记为删除。
UnauthorizedAccessException | 用户没有必需的注册表权限。
说明 说明

注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索这个未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索这个未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索这个未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。

当 GetValue 方法检索可扩展字符串值 (RegistryValueKind..::.ExpandString) 时，它使用本地环境中的数据扩展环境字符串。要从远程计算机上的注册表检索可展开字符串的值，请使用 GetValue(String, Object, RegistryValueOptions) 方法重载指明不想展开环境字符串。 当 GetValue 方法检索可扩展字符串值 (RegistryValueKind..::.ExpandString) 时，它使用本地环境中的数据扩展环境字符串。要从远程计算机上的注册表检索可展开字符串的值，请使用 GetValue(String, Object, RegistryValueOptions) 方法重载指明不想展开环境字符串。

说明 说明

如果某个包含环境变量的可扩展引用的值已存储为字符串 (RegistryValueKind..::.String)，而不是可扩展字符串 (RegistryValueKind..::.ExpandString)，则 GetValue 不会扩展该值。可以通过调用 ExpandEnvironmentVariables 方法扩展检索到的此类字符串。 如果某个包含环境变量的可扩展引用的值已存储为字符串 (RegistryValueKind..::.String)，而不是可扩展字符串 (RegistryValueKind..::.ExpandString)，则 GetValue 不会扩展该值。可以通过调用 ExpandEnvironmentVariables 方法扩展检索到的此类字符串。
说明 说明

建议使用 PerformanceCounter 类（而不是 RegistryKey..::.GetValue 方法）从 PerformanceData 项检索数据。

GetValue 不支持读取 REG_NONE 或 REG_LINK 类型的值。在这两种情况下，均会返回默认值 (nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）)，而不是实际值。 GetValue 不支持读取 REG_NONE 或 REG_LINK 类型的值。在这两种情况下，均会返回默认值 (nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）)，而不是实际值。

下面的代码示例创建一个测试项，并向该项添加不同数据类型的值。然后，此示例使用 GetValueKind 方法检索相应的注册表数据类型，以读取名称/值对并将其显示在控制台中。 下面的代码示例创建一个测试项，并向该项添加不同数据类型的值。然后，此示例使用 GetValueKind 方法检索相应的注册表数据类型，以读取名称/值对并将其显示在控制台中。

Imports System
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueKindExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistryValueKindExample")

        ' Create name/value pairs.
        ' This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord)

        ' The following SetValue calls have the same effect as using the
        ' SetValue overload that does not specify RegistryValueKind.
        '
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord)
        rk.SetValue("MultipleStringValue", New String() {"One", "Two", "Three"}, RegistryValueKind.MultiString)
        rk.SetValue("BinaryValue", New Byte() {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary)
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String)

        ' This overload supports setting expandable string values. Compare
        ' the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString)

        ' Display all name/value pairs stored in the test key, with each
        ' registry data type in parentheses.
        '
        Dim valueNames As String() = rk.GetValueNames()
        Dim s As String
        For Each s In  valueNames
            Dim rvk As RegistryValueKind = rk.GetValueKind(s)
            Select Case rvk
                Case RegistryValueKind.MultiString
                    Dim values As String() = CType(rk.GetValue(s), String())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To values.Length - 1
                        If i <> 0 Then Console.Write(",")
                        Console.Write(" ""{0}""", values(i))
                    Next i
                    Console.WriteLine()

                Case RegistryValueKind.Binary
                    Dim bytes As Byte() = CType(rk.GetValue(s), Byte())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To bytes.Length - 1
                        ' Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes(i))
                    Next i
                    Console.WriteLine()

                Case Else
                    Console.WriteLine(vbCrLf & " {0} ({1}) = {2}", s, rvk, rk.GetValue(s))
            End Select
        Next s
    End Sub 'Main
End Class 'Example

'
'This code example produces the following output (some output is omitted):
'
' QuadWordValue (QWord) = 42
'
' DWordValue (DWord) = 42
'
' MultipleStringValue (MultiString) = "One", "Two", "Three"
'
' BinaryValue (Binary) = 0A 2B 2C 2D 0E FF
'
' StringValue (String) = The path is %PATH%
'
' ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
' [***The remainder of this output is omitted.***]

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueKindExample", false);
        RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryValueKindExample");

        // Create name/value pairs.

        // This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord);

        // The following SetValue calls have the same effect as using the
        // SetValue overload that does not specify RegistryValueKind.
        //
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord);
        rk.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"}, RegistryValueKind.MultiString);
        rk.SetValue("BinaryValue", new byte[] {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary);
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String);

        // This overload supports setting expandable string values. Compare
        // the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString);

        // Display all name/value pairs stored in the test key, with each
        // registry data type in parentheses.
        //
        string[] valueNames = rk.GetValueNames();
        foreach (string s in valueNames)
        {
            RegistryValueKind rvk = rk.GetValueKind(s);
            switch (rvk)
            {
                case RegistryValueKind.MultiString :
                    string[] values = (string[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < values.Length; i++)
                    {
                        if (i != 0) Console.Write(",");
                        Console.Write(" \"{0}\"", values[i]);
                    }
                    Console.WriteLine();
                    break;

                case RegistryValueKind.Binary :
                    byte[] bytes = (byte[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        // Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes[i]);
                    }
                    Console.WriteLine();
                    break;

                default :
                    Console.WriteLine("\r\n {0} ({1}) = {2}", s, rvk, rk.GetValue(s));
                    break;
            }
        }
    }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/

using namespace System;
using namespace Microsoft::Win32;
int main()
{

   // Delete and recreate the test key.
   Registry::CurrentUser->DeleteSubKey( "RegistryValueKindExample", false );
   RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( "RegistryValueKindExample" );

   // Create name/value pairs.
   // This overload supports QWord (long) values.
   rk->SetValue( "QuadWordValue", 42, RegistryValueKind::QWord );

   // The following SetValue calls have the same effect as using the
   // SetValue overload that does not specify RegistryValueKind.
   //
   rk->SetValue( "DWordValue", 42, RegistryValueKind::DWord );
   rk->SetValue( "MultipleStringValue", gcnew array<String^>{
      "One","Two","Three"
   }, RegistryValueKind::MultiString );
   rk->SetValue( "BinaryValue", gcnew array<Byte>{
      10,43,44,45,14,255
   }, RegistryValueKind::Binary );
   rk->SetValue( "StringValue", "The path is %PATH%", RegistryValueKind::String );

   // This overload supports setting expandable string values. Compare
   // the output from this value with the previous string value.
   rk->SetValue( "ExpandedStringValue", "The path is %PATH%", RegistryValueKind::ExpandString );

   // Display all the name/value pairs stored in the test key, with the
   // registry data type in parentheses.
   //
   array<String^>^valueNames = rk->GetValueNames();
   System::Collections::IEnumerator^ myEnum = valueNames->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      RegistryValueKind rvk = rk->GetValueKind( s );
      switch ( rvk )
      {
         case RegistryValueKind::MultiString:
         {
            array<String^>^values = (array<String^>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < values->Length; i++ )
            {
               if (i != 0) Console::Write(",");
               Console::Write( " \"{0}\"", values[ i ] );

            }
            Console::WriteLine();
            break;
         }
         case RegistryValueKind::Binary:
         {
            array<Byte>^bytes = (array<Byte>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < bytes->Length; i++ )
            {

               // Display each byte as two hexadecimal digits.
               Console::Write( " {0:X2}", bytes[ i ] );

            }
            Console::WriteLine();
            break;
         }
         default:
            Console::WriteLine( "\r\n {0} ({1}) = {2}", s, rvk, rk->GetValue( s ) );
            break;
      }
   }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/
  • RegistryPermission

    用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read 用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read

  • EnvironmentPermission

    以读取类型为 REG_EXPAND_SZ 的注册表项。关联的枚举：PermissionState..::.Unrestricted 以读取类型为 REG_EXPAND_SZ 的注册表项。关联的枚举：PermissionState..::.Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
GetValue 重载
Microsoft.Win32 命名空间
GetValueNames
SetValue
DeleteValue
ValueCount
GetSubKeyNames


RegistryKey ..::.GetValue 方法 (String, Object)

RegistryKey
.
.
::
.
GetValue 方法 (String, Object)
RegistryKey 类

检索与指定名称关联的值。如果未找到名称，则返回您提供的默认值。 检索与指定名称关联的值。如果未找到名称，则返回您提供的默认值。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetValue ( _
    name As String, _
    defaultValue As Object _
) As Object
public Object GetValue(
    string name,
    Object defaultValue
)
public:
Object^ GetValue(
    String^ name,
    Object^ defaultValue
)
member GetValue :
        name:string *
        defaultValue:Object -> Object

参数

name
类型： System String
要检索的值的名称。此字符串不区分大小写。 要检索的值的名称。此字符串不区分大小写。
defaultValue
类型： System Object
当 name 不存在时返回的值。

返回值

类型： System Object
与 name 关联的值，不展开嵌入的任何环境变量；如果未找到 name，则为 defaultValue。
异常 | 条件
SecurityException | 该用户没有读取注册表项所需的权限。
ObjectDisposedException | 包含指定值的 RegistryKey 已关闭（无法访问关闭的项）。
IOException | 包含指定值的 RegistryKey 已标记为删除。
UnauthorizedAccessException | 用户没有必需的注册表权限。

GetValue 的这一重载可用来处理尚不存在名称的情况，例如，第一次运行应用程序时。每次调用此重载时，都应使用 defaultValue 参数指定不存在 name 时返回的值。 GetValue 的这一重载可用来处理尚不存在名称的情况，例如，第一次运行应用程序时。每次调用此重载时，都应使用 defaultValue 参数指定不存在 name 时返回的值。

说明 说明

注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索这个未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索这个未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索这个未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。

当 GetValue 方法检索可扩展字符串值 (RegistryValueKind..::.ExpandString) 时，它使用本地环境中的数据扩展环境字符串。要从远程计算机上的注册表检索可展开的字符串值，请使用 GetValue 重载指明不想展开环境字符串。 当 GetValue 方法检索可扩展字符串值 (RegistryValueKind..::.ExpandString) 时，它使用本地环境中的数据扩展环境字符串。要从远程计算机上的注册表检索可展开的字符串值，请使用 GetValue 重载指明不想展开环境字符串。

说明 说明

如果包含对环境变量的可展开引用的值是作为字符串 (RegistryValueKind..::.String) 而不是可展开的字符串 (RegistryValueKind..::.ExpandString) 存储的，那么 GetValue 方法不会对它进行展开。可以通过调用 ExpandEnvironmentVariables 方法扩展检索到的此类字符串。 如果包含对环境变量的可展开引用的值是作为字符串 (RegistryValueKind..::.String) 而不是可展开的字符串 (RegistryValueKind..::.ExpandString) 存储的，那么 GetValue 方法不会对它进行展开。可以通过调用 ExpandEnvironmentVariables 方法扩展检索到的此类字符串。
说明 说明

建议使用 PerformanceCounter 类（而不是 RegistryKey..::.GetValue 方法）从 PerformanceData 项检索数据。

GetValue 不支持读取 REG_NONE 或 REG_LINK 类型的值。在这两种情况下，均会返回默认值 (nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）)，而不是实际值。 GetValue 不支持读取 REG_NONE 或 REG_LINK 类型的值。在这两种情况下，均会返回默认值 (nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）)，而不是实际值。

下面的代码示例创建一个带值的测试项，并检索该值。接着，该示例尝试检索测试项中不存在的值；在此情况下，GetValue 方法返回指定的默认值。 下面的代码示例创建一个带值的测试项，并检索该值。接着，该示例尝试检索测试项中不存在的值；在此情况下，GetValue 方法返回指定的默认值。

Imports System
Imports Microsoft.Win32

Public Class RegGetDef
    Public Shared Sub Main()
        ' Create a reference to a valid key.  In order for this code to
        ' work, the indicated key must have been created previously.
        ' The key name is not case-sensitive.
        Dim rk As RegistryKey = Registry.LocalMachine.OpenSubKey("Software\myTestKey", false)

        ' Get the value from the specified name/value pair in the key.
        Dim valueName As String = "myTestValue"

        Console.WriteLine("Retrieving registry value ...")
        Console.WriteLine()
        Dim o As Object = rk.GetValue(valueName)
        Console.WriteLine("Object Type = " + o.GetType().FullName)
        Console.WriteLine()
        Select Case rk.GetValueKind(valueName)
            Case RegistryValueKind.String
            Case RegistryValueKind.ExpandString
                Console.WriteLine("Value = " + o)
            Case RegistryValueKind.Binary
                For Each b As Byte In CType(o,Byte())
                    Console.Write("{0:x2} ", b)
                Next b
                Console.WriteLine()
            Case RegistryValueKind.DWord
                Console.WriteLine("Value = " + Convert.ToString(CType(o,Int32)))
            Case RegistryValueKind.QWord
                Console.WriteLine("Value = " + Convert.ToString(CType(o,Int64)))
            Case RegistryValueKind.MultiString
                For Each s As String In CType(o,String())
                    Console.Write("[{0:s}], ", s)
                Next s
                Console.WriteLine()
            Case Else
                Console.WriteLine("Value = (Unknown)")
        End Select

        ' Attempt to retrieve a value that does not exist; the specified
        ' default value is returned.
        Dim Def As String = rk.GetValue("notavalue", "The default to return")
        Console.WriteLine()
        Console.WriteLine(def)

        rk.Close()
    End Sub
End Class
'
' Output:
' Retrieving registry value ...
'
' Object Type = System.String
'
' Value = testData
'
'The default to return

using System;
using Microsoft.Win32;

class RegGetDef
{
    public static void Main()
    {
        // Create a reference to a valid key.  In order for this code to
        // work, the indicated key must have been created previously.
        // The key name is not case-sensitive.
        RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software\\myTestKey", false);
        // Get the value from the specified name/value pair in the key.

        string valueName = "myTestValue";

        Console.WriteLine("Retrieving registry value ...");
        Console.WriteLine();
        object o = rk.GetValue(valueName);
        Console.WriteLine("Object Type = " + o.GetType().FullName);
        Console.WriteLine();
        switch (rk.GetValueKind(valueName))
        {
            case RegistryValueKind.String:
            case RegistryValueKind.ExpandString:
                Console.WriteLine("Value = " + o);
                break;
            case RegistryValueKind.Binary:
                foreach (byte b in (byte[])o)
                {
                    Console.Write("{0:x2} ", b);
                }
                Console.WriteLine();
                break;
            case RegistryValueKind.DWord:
                Console.WriteLine("Value = " + Convert.ToString((Int32)o));
                break;
            case RegistryValueKind.QWord:
                Console.WriteLine("Value = " + Convert.ToString((Int64)o));
                break;
            case RegistryValueKind.MultiString:
                foreach (string s in (string[])o)
                {
                    Console.Write("[{0:s}], ", s);
                }
                Console.WriteLine();
                break;
            default:
                Console.WriteLine("Value = (Unknown)");
                break;
        }

        // Attempt to retrieve a value that does not exist; the specified
        // default value is returned.
        string def = (string)rk.GetValue("notavalue", "The default to return");
        Console.WriteLine();
        Console.WriteLine(def);

        rk.Close();
    }
}
/*
Output:
Retrieving registry value ...

Object Type = System.String

Value = testData

The default to return
*/

using namespace System;
using namespace Microsoft::Win32;

public ref class RegGetDef
{
public:
    static void Main()
    {
        // Create a reference to a valid key.  In order for this code to
        // work, the indicated key must have been created previously.
        // The key name is not case-sensitive.
        RegistryKey^ rk = Registry::LocalMachine->OpenSubKey("Software\\myTestKey", false);
        // Get the value from the specified name/value pair in the key.
        String^ valueName = "myTestValue";

        Console::WriteLine("Retrieving registry value ...");
        Console::WriteLine();
        Object^ o = rk->GetValue(valueName);
        Console::WriteLine("Object Type = " + o->GetType()->FullName);
        Console::WriteLine();
        switch (rk->GetValueKind(valueName))
        {
            case RegistryValueKind::String:
            case RegistryValueKind::ExpandString:
                Console::WriteLine("Value = " + o);
                break;
            case RegistryValueKind::Binary:
                for each (Byte^ b in (array<Byte^>^)o)
                {
                    Console::Write("{0:x2} ", b);
                }
                Console::WriteLine();
                break;
            case RegistryValueKind::DWord:
                Console::WriteLine("Value = " + Convert::ToString((Int32^)o));
                break;
            case RegistryValueKind::QWord:
                Console::WriteLine("Value = " + Convert::ToString((Int64^)o));
                break;
            case RegistryValueKind::MultiString:
                for each (String^ s in (array<String^>^)o)
                {
                    Console::Write("[{0:s}], ", s);
                }
                Console::WriteLine();
                break;
            default:
                Console::WriteLine("Value = (Unknown)");
                break;
        }

        // Attempt to retrieve a value that does not exist; the specified
        // default value is returned.
        String^ def = (String^)rk->GetValue("notavalue", "The default to return");
        Console::WriteLine();
        Console::WriteLine(def);

        rk->Close();
    }
};

int main()
{
    RegGetDef::Main();
}
/*
Output:
Retrieving registry value ...

Object Type = System.String

Value = testData

The default to return
*/
  • RegistryPermission

    用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read 用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read

  • EnvironmentPermission

    以读取类型为 REG_EXPAND_SZ 的注册表项。关联的枚举：PermissionState..::.Unrestricted 以读取类型为 REG_EXPAND_SZ 的注册表项。关联的枚举：PermissionState..::.Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
GetValue 重载
Microsoft.Win32 命名空间
GetValueNames
SetValue
DeleteValue
ValueCount
GetSubKeyNames


RegistryKey ..::.GetValue 方法 (String, Object, RegistryValueOptions)

RegistryKey
.
.
::
.
GetValue 方法 (String, Object, RegistryValueOptions)
RegistryKey 类

检索与指定的名称和检索选项关联的值。如果未找到名称，则返回您提供的默认值。 检索与指定的名称和检索选项关联的值。如果未找到名称，则返回您提供的默认值。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function GetValue ( _
    name As String, _
    defaultValue As Object, _
    options As RegistryValueOptions _
) As Object
[ComVisibleAttribute(false)]
public Object GetValue(
    string name,
    Object defaultValue,
    RegistryValueOptions options
)
[ComVisibleAttribute(false)]
public:
Object^ GetValue(
    String^ name,
    Object^ defaultValue,
    RegistryValueOptions options
)
[<ComVisibleAttribute(false)>]
member GetValue :
        name:string *
        defaultValue:Object *
        options:RegistryValueOptions -> Object

参数

name
类型： System String
要检索的值的名称。此字符串不区分大小写。 要检索的值的名称。此字符串不区分大小写。
defaultValue
类型： System Object
当 name 不存在时返回的值。
options
类型： Microsoft.Win32 RegistryValueOptions
枚举值之一，它指定对所检索值的可选处理方式。

返回值

类型： System Object
与 name 关联的值，按指定的 options 对其进行处理；如果未找到 name，则为 defaultValue。
异常 | 条件
SecurityException | 该用户没有读取注册表项所需的权限。
ObjectDisposedException | 包含指定值的 RegistryKey 已关闭（无法访问关闭的项）。
IOException | 包含指定值的 RegistryKey 已标记为删除。
ArgumentException | options 不是有效的 RegistryValueOptions 值；例如，无效值将强制转换为 RegistryValueOptions。
UnauthorizedAccessException | 用户没有必需的注册表权限。

此重载用于指定对所检索值的特殊处理方式。例如，在检索类型为 RegistryValueKind..::.ExpandString 的注册表值时，可以指定 RegistryValueOptions..::.DoNotExpandEnvironmentNames，以便只检索字符串，而不展开嵌入的环境变量。 此重载用于指定对所检索值的特殊处理方式。例如，在检索类型为 RegistryValueKind..::.ExpandString 的注册表值时，可以指定 RegistryValueOptions..::.DoNotExpandEnvironmentNames，以便只检索字符串，而不展开嵌入的环境变量。

使用 defaultValue 参数可指定 name 不存在时返回的值。

说明 说明

注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索这个未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索这个未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索这个未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。

GetValue 不支持读取 REG_NONE 或 REG_LINK 类型的值。在这两种情况下，均会返回默认值 (nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）)，而不是实际值。 GetValue 不支持读取 REG_NONE 或 REG_LINK 类型的值。在这两种情况下，均会返回默认值 (nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）)，而不是实际值。

下面的代码示例创建一个测试项，添加带有嵌入式环境变量的值，然后在扩展和非扩展两种形式下检索该值。

Imports System
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueOptionsExample", False)
        Dim rk As RegistryKey = _
            Registry.CurrentUser.CreateSubKey("RegistryValueOptionsExample")

        ' Add a value that contains an environment variable.
        rk.SetValue("ExpandValue", "The path is %PATH%", _
            RegistryValueKind.ExpandString)

        ' Retrieve the value, first without expanding the environment
        ' variable and then expanding it.
        Console.WriteLine("Unexpanded: ""{0}""", _
            rk.GetValue("ExpandValue", "No Value", _
            RegistryValueOptions.DoNotExpandEnvironmentNames))
        Console.WriteLine("Expanded: ""{0}""", rk.GetValue("ExpandValue"))
    End Sub 'Main
End Class 'Example

using System;
using Microsoft.Win32;
using Microsoft.VisualBasic;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueOptionsExample", false);
        RegistryKey rk =
            Registry.CurrentUser.CreateSubKey("RegistryValueOptionsExample");

        // Add a value that contains an environment variable.
        rk.SetValue("ExpandValue", "The path is %PATH%", RegistryValueKind.ExpandString);

        // Retrieve the value, first without expanding the environment
        // variable and then expanding it.
        Console.WriteLine("Unexpanded: \"{0}\"",
            rk.GetValue("ExpandValue", "No Value",
            RegistryValueOptions.DoNotExpandEnvironmentNames));
        Console.WriteLine("Expanded: \"{0}\"", rk.GetValue("ExpandValue"));
    } //Main
} //Example

#using <Microsoft.VisualBasic.dll>

using namespace System;
using namespace Microsoft::Win32;
using namespace Microsoft::VisualBasic;

int main()
{
    // Delete and recreate the test key.
    Registry::CurrentUser->DeleteSubKey( L"RegistryValueOptionsExample", false );
    RegistryKey ^ rk =
        Registry::CurrentUser->CreateSubKey( L"RegistryValueOptionsExample" );

    // Add a value that contains an environment variable.
    rk->SetValue( L"ExpandValue", L"The path is %PATH%",
        RegistryValueKind::ExpandString );

    // Retrieve the value, first without expanding the environment
    // variable and then expanding it.
    Console::WriteLine( L"Unexpanded: \"{0}\"",
                        rk->GetValue( L"ExpandValue",
                        L"No Value",
                        RegistryValueOptions::DoNotExpandEnvironmentNames ) );
    Console::WriteLine( L"Expanded: \"{0}\"", rk->GetValue( L"ExpandValue" ) );

    return 0;
} //Main
  • RegistryPermission

    用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read 用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read

  • EnvironmentPermission

    以读取类型为 REG_EXPAND_SZ 的注册表项。关联的枚举：PermissionState..::.Unrestricted 以读取类型为 REG_EXPAND_SZ 的注册表项。关联的枚举：PermissionState..::.Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
GetValue 重载
Microsoft.Win32 命名空间
RegistryValueOptions
GetValueNames
SetValue
DeleteValue
ValueCount
GetSubKeyNames


RegistryKey ..::.GetValueKind 方法

RegistryKey
.
.
::
.
GetValueKind 方法
RegistryKey 类

检索与指定名称关联的值的注册表数据类型。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function GetValueKind ( _
    name As String _
) As RegistryValueKind
[ComVisibleAttribute(false)]
public RegistryValueKind GetValueKind(
    string name
)
[ComVisibleAttribute(false)]
public:
RegistryValueKind GetValueKind(
    String^ name
)
[<ComVisibleAttribute(false)>]
member GetValueKind :
        name:string -> RegistryValueKind

参数

name
类型： System String
要检索其注册表数据类型的值的名称。此字符串不区分大小写。 要检索其注册表数据类型的值的名称。此字符串不区分大小写。

返回值

类型： Microsoft.Win32 RegistryValueKind
与 name 关联的值的注册表数据类型。
异常 | 条件
SecurityException | 该用户没有读取注册表项所需的权限。
ObjectDisposedException | 包含指定值的 RegistryKey 已关闭（无法访问关闭的项）。
IOException | 包含指定值的子项不存在。 - 或 - 由 name 指定的名称/值对不存在。 在 Windows 95、Windows 98 或 Windows Millennium Edition 中不引发此异常。
UnauthorizedAccessException | 用户没有必需的注册表权限。
说明 说明

注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索此未命名的值的注册表数据类型，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索此未命名的值的注册表数据类型，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。要检索此未命名的值的注册表数据类型，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。

有关所支持的注册表数据类型的说明，请参见 RegistryValueKind 枚举。

下面的代码示例创建一个测试项，并向该项添加不同数据类型的值。然后，此示例使用 GetValueKind 方法检索相应的注册表数据类型，以读取名称/值对并将其显示在控制台中。 下面的代码示例创建一个测试项，并向该项添加不同数据类型的值。然后，此示例使用 GetValueKind 方法检索相应的注册表数据类型，以读取名称/值对并将其显示在控制台中。

Imports System
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueKindExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistryValueKindExample")

        ' Create name/value pairs.
        ' This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord)

        ' The following SetValue calls have the same effect as using the
        ' SetValue overload that does not specify RegistryValueKind.
        '
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord)
        rk.SetValue("MultipleStringValue", New String() {"One", "Two", "Three"}, RegistryValueKind.MultiString)
        rk.SetValue("BinaryValue", New Byte() {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary)
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String)

        ' This overload supports setting expandable string values. Compare
        ' the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString)

        ' Display all name/value pairs stored in the test key, with each
        ' registry data type in parentheses.
        '
        Dim valueNames As String() = rk.GetValueNames()
        Dim s As String
        For Each s In  valueNames
            Dim rvk As RegistryValueKind = rk.GetValueKind(s)
            Select Case rvk
                Case RegistryValueKind.MultiString
                    Dim values As String() = CType(rk.GetValue(s), String())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To values.Length - 1
                        If i <> 0 Then Console.Write(",")
                        Console.Write(" ""{0}""", values(i))
                    Next i
                    Console.WriteLine()

                Case RegistryValueKind.Binary
                    Dim bytes As Byte() = CType(rk.GetValue(s), Byte())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To bytes.Length - 1
                        ' Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes(i))
                    Next i
                    Console.WriteLine()

                Case Else
                    Console.WriteLine(vbCrLf & " {0} ({1}) = {2}", s, rvk, rk.GetValue(s))
            End Select
        Next s
    End Sub 'Main
End Class 'Example

'
'This code example produces the following output (some output is omitted):
'
' QuadWordValue (QWord) = 42
'
' DWordValue (DWord) = 42
'
' MultipleStringValue (MultiString) = "One", "Two", "Three"
'
' BinaryValue (Binary) = 0A 2B 2C 2D 0E FF
'
' StringValue (String) = The path is %PATH%
'
' ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
' [***The remainder of this output is omitted.***]

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueKindExample", false);
        RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryValueKindExample");

        // Create name/value pairs.

        // This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord);

        // The following SetValue calls have the same effect as using the
        // SetValue overload that does not specify RegistryValueKind.
        //
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord);
        rk.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"}, RegistryValueKind.MultiString);
        rk.SetValue("BinaryValue", new byte[] {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary);
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String);

        // This overload supports setting expandable string values. Compare
        // the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString);

        // Display all name/value pairs stored in the test key, with each
        // registry data type in parentheses.
        //
        string[] valueNames = rk.GetValueNames();
        foreach (string s in valueNames)
        {
            RegistryValueKind rvk = rk.GetValueKind(s);
            switch (rvk)
            {
                case RegistryValueKind.MultiString :
                    string[] values = (string[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < values.Length; i++)
                    {
                        if (i != 0) Console.Write(",");
                        Console.Write(" \"{0}\"", values[i]);
                    }
                    Console.WriteLine();
                    break;

                case RegistryValueKind.Binary :
                    byte[] bytes = (byte[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        // Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes[i]);
                    }
                    Console.WriteLine();
                    break;

                default :
                    Console.WriteLine("\r\n {0} ({1}) = {2}", s, rvk, rk.GetValue(s));
                    break;
            }
        }
    }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/

using namespace System;
using namespace Microsoft::Win32;
int main()
{

   // Delete and recreate the test key.
   Registry::CurrentUser->DeleteSubKey( "RegistryValueKindExample", false );
   RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( "RegistryValueKindExample" );

   // Create name/value pairs.
   // This overload supports QWord (long) values.
   rk->SetValue( "QuadWordValue", 42, RegistryValueKind::QWord );

   // The following SetValue calls have the same effect as using the
   // SetValue overload that does not specify RegistryValueKind.
   //
   rk->SetValue( "DWordValue", 42, RegistryValueKind::DWord );
   rk->SetValue( "MultipleStringValue", gcnew array<String^>{
      "One","Two","Three"
   }, RegistryValueKind::MultiString );
   rk->SetValue( "BinaryValue", gcnew array<Byte>{
      10,43,44,45,14,255
   }, RegistryValueKind::Binary );
   rk->SetValue( "StringValue", "The path is %PATH%", RegistryValueKind::String );

   // This overload supports setting expandable string values. Compare
   // the output from this value with the previous string value.
   rk->SetValue( "ExpandedStringValue", "The path is %PATH%", RegistryValueKind::ExpandString );

   // Display all the name/value pairs stored in the test key, with the
   // registry data type in parentheses.
   //
   array<String^>^valueNames = rk->GetValueNames();
   System::Collections::IEnumerator^ myEnum = valueNames->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      RegistryValueKind rvk = rk->GetValueKind( s );
      switch ( rvk )
      {
         case RegistryValueKind::MultiString:
         {
            array<String^>^values = (array<String^>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < values->Length; i++ )
            {
               if (i != 0) Console::Write(",");
               Console::Write( " \"{0}\"", values[ i ] );

            }
            Console::WriteLine();
            break;
         }
         case RegistryValueKind::Binary:
         {
            array<Byte>^bytes = (array<Byte>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < bytes->Length; i++ )
            {

               // Display each byte as two hexadecimal digits.
               Console::Write( " {0:X2}", bytes[ i ] );

            }
            Console::WriteLine();
            break;
         }
         default:
            Console::WriteLine( "\r\n {0} ({1}) = {2}", s, rvk, rk->GetValue( s ) );
            break;
      }
   }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/
  • RegistryPermission

    用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read 用于从注册表中读取内容。关联的枚举：RegistryPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间
GetValueNames
GetValue
SetValue
RegistryValueKind


RegistryKey ..::.GetValueNames 方法

RegistryKey
.
.
::
.
GetValueNames 方法
RegistryKey 类

检索包含与此项关联的所有值名称的字符串数组。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetValueNames As String()
public string[] GetValueNames()
public:
array<String^>^ GetValueNames()
member GetValueNames : unit -> string[]

返回值

类型：
array<
System String
>
[]
()
[]

包含当前项的值名称的字符串数组。
异常 | 条件
SecurityException | 该用户没有读取注册表项所需的权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 用户没有必需的注册表权限。
IOException | 发生系统错误；例如，当前项已被删除。

如果未找到此项的值名称，则返回一个空数组。

注册表项可以有一个默认值，也即，其中的名称为空字符串 ("") 的名称/值对。如果为注册表项设置了默认值，则 GetValueNames 方法返回的数组包含该空字符串。 注册表项可以有一个默认值，也即，其中的名称为空字符串 ("") 的名称/值对。如果为注册表项设置了默认值，则 GetValueNames 方法返回的数组包含该空字符串。

此代码示例摘自一个为 RegistryKey 类提供的更大示例。

' Print the information from the Test9999 subkey.
Console.WriteLine("There are {0} subkeys under Test9999.", _
    test9999.SubKeyCount.ToString())
For Each subKeyName As String In test9999.GetSubKeyNames()
    Dim tempKey As RegistryKey = _
        test9999.OpenSubKey(subKeyName)
    Console.WriteLine(vbCrLf & "There are {0} values for " & _
        "{1}.", tempKey.ValueCount.ToString(), tempKey.Name)
    For Each valueName As String In tempKey.GetValueNames()
        Console.WriteLine("{0,-8}: {1}", valueName, _
            tempKey.GetValue(valueName).ToString())
    Next
Next

// Print the information from the Test9999 subkey.
Console.WriteLine("There are {0} subkeys under {1}.",
    test9999.SubKeyCount.ToString(), test9999.Name);
foreach(string subKeyName in test9999.GetSubKeyNames())
{
    using(RegistryKey
        tempKey = test9999.OpenSubKey(subKeyName))
    {
        Console.WriteLine("\nThere are {0} values for {1}.",
            tempKey.ValueCount.ToString(), tempKey.Name);
        foreach(string valueName in tempKey.GetValueNames())
        {
            Console.WriteLine("{0,-8}: {1}", valueName,
                tempKey.GetValue(valueName).ToString());
        }
    }
}

// Print the information from the Test9999 subkey.
Console::WriteLine( "There are {0} subkeys under Test9999.", test9999->SubKeyCount.ToString() );
array<String^>^subKeyNames = test9999->GetSubKeyNames();
for ( int i = 0; i < subKeyNames->Length; i++ )
{
   RegistryKey ^ tempKey = test9999->OpenSubKey( subKeyNames[ i ] );
   Console::WriteLine( "\nThere are {0} values for {1}.", tempKey->ValueCount.ToString(), tempKey->Name );
   array<String^>^valueNames = tempKey->GetValueNames();
   for ( int j = 0; j < valueNames->Length; j++ )
   {
      Console::WriteLine( "{0,-8}: {1}", valueNames[ j ], tempKey->GetValue( valueNames[ j ] )->ToString() );

   }
}
  • RegistryPermission

    用于读取注册表的功能。关联的枚举：RegistryPermissionAccess..::.Read 用于读取注册表的功能。关联的枚举：RegistryPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间
GetValue
GetSubKeyNames


RegistryKey ..::.MemberwiseClone 方法

RegistryKey
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.OpenBaseKey 方法

RegistryKey
.
.
::
.
OpenBaseKey 方法
RegistryKey 类

打开一个新的 RegistryKey，它使用指定的视图在本地计算机上表示请求的项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function OpenBaseKey ( _
    hKey As RegistryHive, _
    view As RegistryView _
) As RegistryKey
[ComVisibleAttribute(false)]
public static RegistryKey OpenBaseKey(
    RegistryHive hKey,
    RegistryView view
)
[ComVisibleAttribute(false)]
public:
static RegistryKey^ OpenBaseKey(
    RegistryHive hKey,
    RegistryView view
)
[<ComVisibleAttribute(false)>]
static member OpenBaseKey :
        hKey:RegistryHive *
        view:RegistryView -> RegistryKey

参数

hKey
类型： Microsoft.Win32 RegistryHive
要打开的 HKEY。
view
类型： Microsoft.Win32 RegistryView
要使用的注册表视图。

返回值

类型： Microsoft.Win32 RegistryKey
请求的注册表项。
异常 | 条件
ArgumentException | hKey 或 view 无效。
UnauthorizedAccessException | 用户没有必需的注册表权限。
SecurityException | 用户没有执行此操作所需的权限。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.OpenRemoteBaseKey 方法

RegistryKey
.
.
::
.
OpenRemoteBaseKey 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

打开一个新的 T:Microsoft.Win32.RegistryKey，它使用指定的注册表视图选项在远程计算机上表示请求的项。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.OpenRemoteBaseKey 方法 (RegistryHive, String)

RegistryKey
.
.
::
.
OpenRemoteBaseKey 方法 (RegistryHive, String)
RegistryKey 类

打开一个新的 RegistryKey，它表示远程计算机上的请求的项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function OpenRemoteBaseKey ( _
    hKey As RegistryHive, _
    machineName As String _
) As RegistryKey
public static RegistryKey OpenRemoteBaseKey(
    RegistryHive hKey,
    string machineName
)
public:
static RegistryKey^ OpenRemoteBaseKey(
    RegistryHive hKey,
    String^ machineName
)
static member OpenRemoteBaseKey :
        hKey:RegistryHive *
        machineName:string -> RegistryKey

参数

hKey
类型： Microsoft.Win32 RegistryHive
要从 RegistryHive 枚举中打开的 HKEY。
machineName
类型： System String
远程计算机。

返回值

类型： Microsoft.Win32 RegistryKey
请求的注册表项。
异常 | 条件
ArgumentException | hKey 无效。
IOException | machineName 未找到。
ArgumentNullException | machineName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 用户不具有执行该操作的适当权限。
UnauthorizedAccessException | 用户没有必需的注册表权限。

如果 machineName 为 String..::.Empty，则打开本地计算机注册表。请求的项必须是远程计算机上的根项，并由适当的 RegistryHive 值标识。 如果 machineName 为 String..::.Empty，则打开本地计算机注册表。请求的项必须是远程计算机上的根项，并由适当的 RegistryHive 值标识。

为了能够远程打开项，服务器和客户机必须同时运行远程注册表服务并启用远程管理。

下面的代码示例说明如何在远程计算机上打开一个注册表项并枚举该项的值。该远程计算机必须运行远程注册表服务。调用该程序时，将远程计算机的名称指定为一个命令行参数。 下面的代码示例说明如何在远程计算机上打开一个注册表项并枚举该项的值。该远程计算机必须运行远程注册表服务。调用该程序时，将远程计算机的名称指定为一个命令行参数。 下面的代码示例说明如何在远程计算机上打开一个注册表项并枚举该项的值。该远程计算机必须运行远程注册表服务。调用该程序时，将远程计算机的名称指定为一个命令行参数。

Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Security.Permissions
Imports Microsoft.Win32

<Assembly: RegistryPermissionAttribute( _
    SecurityAction.RequestMinimum, _
    Read := "HKEY_CURRENT_USER\Environment")>
<Assembly: SecurityPermissionAttribute( _
    SecurityAction.RequestMinimum, UnmanagedCode := True)>

Public Class RemoteKey

    Shared Sub Main(commandLineArgs As String())

        Dim environmentKey As RegistryKey

        ' Check that an argument was specified when the
        ' program was invoked.
        If commandLineArgs.Length = 0 Then
            Console.WriteLine("Error: The name of the remote " & _
                "computer must be specified as input on the " & _
                "command line.")
            Return
        End If

        Try
            ' Open HKEY_CURRENT_USER\Environment on a remote computer.
            environmentKey = RegistryKey.OpenRemoteBaseKey( _
                RegistryHive.CurrentUser, _
                commandLineArgs(0)).OpenSubKey("Environment")
        Catch ex As IOException
            Console.WriteLine("{0}: {1}", _
                ex.GetType().Name, ex.Message)
            Return
        End Try

        ' Print the values.
        Console.WriteLine("\nThere are {0} values For {1}.", _
            environmentKey.ValueCount.ToString(), environmentKey.Name)

        For Each valueName As String In environmentKey.GetValueNames()
            Console.WriteLine("{0,-20}: {1}", valueName, _
                environmentKey.GetValue(valueName).ToString())
        Next

        ' Close the registry key.
        environmentKey.Close()

    End Sub
End Class

using System;
using System.IO;
using System.Security.Permissions;
using Microsoft.Win32;

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
    Read = @"HKEY_CURRENT_USER\Environment")]
[assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum,
    UnmanagedCode = true)]

class RemoteKey
{
    static void Main(string[] args)
    {
        RegistryKey environmentKey;
        string remoteName;

        // Check that an argument was specified when the
        // program was invoked.
        if(args.Length == 0)
        {
            Console.WriteLine("Error: The name of the remote " +
                "computer must be specified when the program is " +
                "invoked.");
            return;
        }
        else
        {
            remoteName = args[0];
        }

        try
        {
            // Open HKEY_CURRENT_USER\Environment
            // on a remote computer.
            environmentKey = RegistryKey.OpenRemoteBaseKey(
                RegistryHive.CurrentUser, remoteName).OpenSubKey(
                "Environment");
        }
        catch(IOException e)
        {
            Console.WriteLine("{0}: {1}",
                e.GetType().Name, e.Message);
            return;
        }

        // Print the values.
        Console.WriteLine("\nThere are {0} values for {1}.",
            environmentKey.ValueCount.ToString(),
            environmentKey.Name);
        foreach(string valueName in environmentKey.GetValueNames())
        {
            Console.WriteLine("{0,-20}: {1}", valueName,
                environmentKey.GetValue(valueName).ToString());
        }

        // Close the registry key.
        environmentKey.Close();
    }
}

using namespace System;
using namespace System::IO;
using namespace System::Security::Permissions;
using namespace Microsoft::Win32;

[assembly:RegistryPermissionAttribute(SecurityAction::RequestMinimum,
Read="HKEY_CURRENT_USER\\Environment")];
[assembly:SecurityPermissionAttribute(SecurityAction::RequestMinimum,
UnmanagedCode=true)];
int main( int argc, char *argv[] )
{
   RegistryKey ^ environmentKey;

   // Check that an argument was specified when the
   // program was invoked.
   if ( argc == 1 )
   {
      Console::WriteLine( "Error: The name of the remote computer "
      "must be specified as input on the command line." );
      return  -1;
   }

   try
   {

      // Open HKEY_CURRENT_USER\Environment on a remote computer.
      environmentKey = RegistryKey::OpenRemoteBaseKey( RegistryHive::CurrentUser, gcnew String(argv[ 1 ]) )->OpenSubKey( "Environment" );
   }
   catch ( IOException^ e )
   {
      Console::WriteLine(  "{0}: {1}", e->GetType()->Name, e->Message );
      return  -1;
   }

   // Print the values.
   Console::WriteLine( "\nThere are {0} values for {1}.", environmentKey->ValueCount.ToString(), environmentKey->Name );
   array<String^>^valueNames = environmentKey->GetValueNames();
   for ( int i = 0; i < environmentKey->ValueCount; i++ )
   {
      Console::WriteLine(  "{0,-20}: {1}", valueNames[ i ], environmentKey->GetValue( valueNames[ i ] )->ToString() );

   }

   // Close the registry key.
   environmentKey->Close();
}
  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
OpenRemoteBaseKey 重载
Microsoft.Win32 命名空间
RegistryHive
OpenSubKey


RegistryKey ..::.OpenRemoteBaseKey 方法 (RegistryHive, String, RegistryView)

RegistryKey
.
.
::
.
OpenRemoteBaseKey 方法 (RegistryHive, String, RegistryView)
RegistryKey 类

打开一个新的注册表项，它使用指定的视图在远程计算机上表示请求的项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function OpenRemoteBaseKey ( _
    hKey As RegistryHive, _
    machineName As String, _
    view As RegistryView _
) As RegistryKey
[ComVisibleAttribute(false)]
public static RegistryKey OpenRemoteBaseKey(
    RegistryHive hKey,
    string machineName,
    RegistryView view
)
[ComVisibleAttribute(false)]
public:
static RegistryKey^ OpenRemoteBaseKey(
    RegistryHive hKey,
    String^ machineName,
    RegistryView view
)
[<ComVisibleAttribute(false)>]
static member OpenRemoteBaseKey :
        hKey:RegistryHive *
        machineName:string *
        view:RegistryView -> RegistryKey

参数

hKey
类型： Microsoft.Win32 RegistryHive
要从 RegistryHive 枚举中打开的 HKEY。
machineName
类型： System String
远程计算机。
view
类型： Microsoft.Win32 RegistryView
要使用的注册表视图。

返回值

类型： Microsoft.Win32 RegistryKey
请求的注册表项。
异常 | 条件
ArgumentException | hKey 或 view 无效。
IOException | machineName 未找到。
ArgumentNullException | machineName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentNullException | machineName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
UnauthorizedAccessException | 用户没有必需的注册表权限。
SecurityException | 用户不具有执行该操作所需的权限。

如果 machineName 为 String..::.Empty，则打开本地计算机注册表。请求的项必须是远程计算机上的根项，并由适当的 RegistryHive 值标识。 如果 machineName 为 String..::.Empty，则打开本地计算机注册表。请求的项必须是远程计算机上的根项，并由适当的 RegistryHive 值标识。

为了能够远程打开项，服务器和客户机必须同时运行远程注册表服务并启用远程管理。

在 64 位版本的 Windows 上，针对 32 位和 64 位应用程序分别存储在注册表的不同部分中。32 位应用程序具有 32 位视图，而 64 位应用程序具有 64 位视图。如果 view 是 Registry64，但是远程计算机运行在 32 位操作系统上，则返回的键将使用 Registry32 视图。 在 64 位版本的 Windows 上，针对 32 位和 64 位应用程序分别存储在注册表的不同部分中。32 位应用程序具有 32 位视图，而 64 位应用程序具有 64 位视图。如果 view 是 Registry64，但是远程计算机运行在 32 位操作系统上，则返回的键将使用 Registry32 视图。 在 64 位版本的 Windows 上，针对 32 位和 64 位应用程序分别存储在注册表的不同部分中。32 位应用程序具有 32 位视图，而 64 位应用程序具有 64 位视图。如果 view 是 Registry64，但是远程计算机运行在 32 位操作系统上，则返回的键将使用 Registry32 视图。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
OpenRemoteBaseKey 重载
Microsoft.Win32 命名空间


RegistryKey ..::.OpenSubKey 方法

RegistryKey
.
.
::
.
OpenSubKey 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

检索指定的子项。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.OpenSubKey 方法 (String)

RegistryKey
.
.
::
.
OpenSubKey 方法 (String)
RegistryKey 类

以只读方式检索子项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Function OpenSubKey ( _
    name As String _
) As RegistryKey
public RegistryKey OpenSubKey(
    string name
)
public:
RegistryKey^ OpenSubKey(
    String^ name
)
member OpenSubKey :
        name:string -> RegistryKey

参数

name
类型： System String
要以只读方式打开的子项的名称或路径。

返回值

类型： Microsoft.Win32 RegistryKey
请求的子项；如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ObjectDisposedException | RegistryKey 已关闭（无法访问已关闭的项）。
SecurityException | 用户没有读取注册表项所需的权限。

必须先打开项才能用其他方法和属性对其进行操作。要修改项，必须用适当的 OpenSubKey 方法重载打开所需的项，该重载应能允许指定写访问，例如，OpenSubKey(String, RegistryKeyPermissionCheck) 重载或 OpenSubKey(String, Boolean) 重载。 必须先打开项才能用其他方法和属性对其进行操作。要修改项，必须用适当的 OpenSubKey 方法重载打开所需的项，该重载应能允许指定写访问，例如，OpenSubKey(String, RegistryKeyPermissionCheck) 重载或 OpenSubKey(String, Boolean) 重载。

如果找不到指定的子项，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

要使用 OpenSubKey 方法，您必须拥有 RegistryKey 的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。 要使用 OpenSubKey 方法，您必须拥有 RegistryKey 的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。

下面的代码示例创建一个测试项并使用 OpenSubKey 方法将其打开，以演示该方法的两种重载。

Imports System
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryOpenSubKeyExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample")
        rk.Close

        ' Obtain an instance of RegistryKey for the CurrentUser registry
        ' root.
        Dim rkCurrentUser As RegistryKey = Registry.CurrentUser

        ' Obtain the test key (read-only) and display it.
        Dim rkTest As RegistryKey = rkCurrentUser.OpenSubKey("RegistryOpenSubKeyExample")
        Console.WriteLine("Test key: {0}", rkTest)
        rkTest.Close
        rkCurrentUser.Close

        ' Obtain the test key in one step, using the CurrentUser registry
        ' root.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample")
        Console.WriteLine("Test key: {0}", rkTest)
        rkTest.Close

        ' Obtain the test key in read/write mode.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample", True)
        rkTest.SetValue("TestName", "TestValue")
        Console.WriteLine("Test value for TestName: {0}", rkTest.GetValue("TestName"))
        rkTest.Close
    End Sub 'Main
End Class 'Example

using System;
using Microsoft.Win32;
using Microsoft.VisualBasic;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryOpenSubKeyExample", false);
        RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample");
        rk.Close();

        // Obtain an instance of RegistryKey for the CurrentUser registry
        // root.
        RegistryKey rkCurrentUser = Registry.CurrentUser;

        // Obtain the test key (read-only) and display it.
        RegistryKey rkTest = rkCurrentUser.OpenSubKey("RegistryOpenSubKeyExample");
        Console.WriteLine("Test key: {0}", rkTest);
        rkTest.Close();
        rkCurrentUser.Close();

        // Obtain the test key in one step, using the CurrentUser registry
        // root.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample");
        Console.WriteLine("Test key: {0}", rkTest);
        rkTest.Close();

        // Open the test key in read/write mode.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample", true);
        rkTest.SetValue("TestName", "TestValue");
        Console.WriteLine("Test value for TestName: {0}", rkTest.GetValue("TestName"));
        rkTest.Close();
    } //Main
} //Example

#using <Microsoft.VisualBasic.dll>

using namespace System;
using namespace Microsoft::Win32;
using namespace Microsoft::VisualBasic;

int main()
{
    // Delete and recreate the test key.
    Registry::CurrentUser->DeleteSubKey( L"RegistryOpenSubKeyExample", false );
    RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( L"RegistryOpenSubKeyExample" );
    rk->Close();

    // Obtain an instance of RegistryKey for the CurrentUser registry
    // root.
    RegistryKey ^ rkCurrentUser = Registry::CurrentUser;

    // Obtain the test key (read-only) and display it.
    RegistryKey ^ rkTest = rkCurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample" );
    Console::WriteLine( L"Test key: {0}", rkTest );
    rkTest->Close();
    rkCurrentUser->Close();

    // Obtain the test key in one step, using the CurrentUser registry
    // root.
    rkTest = Registry::CurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample" );
    Console::WriteLine( L"Test key: {0}", rkTest );
    rkTest->Close();

    // Open the test key in read/write mode.
    rkTest = Registry::CurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample", true );
    rkTest->SetValue( L"TestName", L"TestValue" );
    Console::WriteLine( L"Test value for TestName: {0}", rkTest->GetValue( L"TestName" ) );
    rkTest->Close();

    return 0;
} //Main
  • RegistryPermission

    表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read 表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
OpenSubKey 重载
Microsoft.Win32 命名空间
CreateSubKey
DeleteSubKey
DeleteSubKeyTree
GetSubKeyNames
OpenRemoteBaseKey
SubKeyCount
Registry


RegistryKey ..::.OpenSubKey 方法 (String, RegistryKeyPermissionCheck)

RegistryKey
.
.
::
.
OpenSubKey 方法 (String, RegistryKeyPermissionCheck)
RegistryKey 类

检索指定的子项以进行读取或读/写访问。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function OpenSubKey ( _
    name As String, _
    permissionCheck As RegistryKeyPermissionCheck _
) As RegistryKey
[ComVisibleAttribute(false)]
public RegistryKey OpenSubKey(
    string name,
    RegistryKeyPermissionCheck permissionCheck
)
[ComVisibleAttribute(false)]
public:
RegistryKey^ OpenSubKey(
    String^ name,
    RegistryKeyPermissionCheck permissionCheck
)
[<ComVisibleAttribute(false)>]
member OpenSubKey :
        name:string *
        permissionCheck:RegistryKeyPermissionCheck -> RegistryKey

参数

name
类型： System String
要创建或打开的子项的名称或路径。
permissionCheck
类型： Microsoft.Win32 RegistryKeyPermissionCheck
用于指定打开该项是进行读取还是读取/写入访问的枚举值之一。

返回值

类型： Microsoft.Win32 RegistryKey
请求的子项；如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | permissionCheck 包含无效值。
ObjectDisposedException | RegistryKey 已关闭（无法访问已关闭的项）。
SecurityException | 用户没有读取注册表项所需的权限。

如果请求的项不存在，此方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而不是引发异常。

如果 permissionCheck 为 RegistryKeyPermissionCheck..::.ReadWriteSubTree，则打开该项进行读写；如果 permissionCheck 为 RegistryKeyPermissionCheck..::.ReadSubTree 或 RegistryKeyPermissionCheck..::.Default，除非用 RegistryKeyPermissionCheck..::.ReadWriteSubTree 打开父项，否则以只读方式打开该项。

要使用 OpenSubKey 方法，您必须拥有 RegistryKey 类的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。 要使用 OpenSubKey 方法，您必须拥有 RegistryKey 类的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。

下面的代码示例创建包含 100 个项/值对的子项，并关闭该子项。该示例用 Default 打开子项，记录读取所有值所用的时间，然后关闭子项。该示例用 ReadSubTree 打开子项，并记录读取所有值所用的时间。最后，该示例以百分比的形式计算并显示性能上的改进。 下面的代码示例创建包含 100 个项/值对的子项，并关闭该子项。该示例用 Default 打开子项，记录读取所有值所用的时间，然后关闭子项。该示例用 ReadSubTree 打开子项，并记录读取所有值所用的时间。最后，该示例以百分比的形式计算并显示性能上的改进。 下面的代码示例创建包含 100 个项/值对的子项，并关闭该子项。该示例用 Default 打开子项，记录读取所有值所用的时间，然后关闭子项。该示例用 ReadSubTree 打开子项，并记录读取所有值所用的时间。最后，该示例以百分比的形式计算并显示性能上的改进。 下面的代码示例创建包含 100 个项/值对的子项，并关闭该子项。该示例用 Default 打开子项，记录读取所有值所用的时间，然后关闭子项。该示例用 ReadSubTree 打开子项，并记录读取所有值所用的时间。最后，该示例以百分比的形式计算并显示性能上的改进。

Imports System
Imports Microsoft.Win32
Imports System.Diagnostics

Public Class Example

    Public Shared Sub Main()

        Const LIMIT As Integer = 100
        Dim cu As RegistryKey = Registry.CurrentUser
        Const testKey As String = "RegistryKeyPermissionCheckExample"

        Console.WriteLine("Generating {0} key/value pairs.", LIMIT)
        Dim rk As RegistryKey = cu.CreateSubKey(testKey)

        For i As Integer = 0 To LIMIT
            rk.SetValue("Key" & i, i)
        Next i

        rk.Close()

        Dim s As New Stopwatch()

        ' On the default setting, security is checked every time
        ' a key/value pair is read.
        rk = cu.OpenSubKey(testKey, _
            RegistryKeyPermissionCheck.Default)

        s.Start()
        For i As Integer = 0 To LIMIT
            rk.GetValue("Key" & i, i)
        Next i
        s.Stop()
        rk.Close()
        Dim delta1 As Long = s.ElapsedTicks

        s.Reset()

        ' When the key is opened with ReadSubTree, security is
        ' not checked when the values are read.
        rk = cu.OpenSubKey(testKey, _
            RegistryKeyPermissionCheck.ReadSubTree)

        s.Start()
        For i As Integer = 0 To LIMIT
            rk.GetValue("Key" & i, i)
        Next i
        s.Stop()
        rk.Close()
        Dim delta2 As Long = s.ElapsedTicks

        Dim faster As Double = _
            CDbl(delta1 - delta2) * 100.0 / CDbl(delta1)
        Console.WriteLine("ReadSubTree is {0}% faster for {1} values.", _
            faster.ToString("0.0"), LIMIT)

        cu.DeleteSubKey(testKey)

    End Sub
End Class

' This code example produces output similar to the following:
'
'Generating 100 key/value pairs.
'ReadSubTree is 23.4% faster for 100 values.
'

using System;
using Microsoft.Win32;
using System.Diagnostics;

public class Example
{
    public static void Main()
    {
        const int LIMIT = 100;
        RegistryKey cu = Registry.CurrentUser;
        const string testKey = "RegistryKeyPermissionCheckExample";

        Console.WriteLine("Generating {0} key/value pairs.", LIMIT);
        RegistryKey rk = cu.CreateSubKey(testKey);
        for (int i = 0; i < LIMIT; i++)
        {
            rk.SetValue("Key" + i, i);
        }

        rk.Close();

        Stopwatch s = new Stopwatch();

        // On the default setting, security is checked every time
        // a key/value pair is read.
        rk = cu.OpenSubKey(testKey, RegistryKeyPermissionCheck.Default);

        s.Start();
        for (int i = 0; i < LIMIT; i++)
        {
            rk.GetValue("Key" + i, i);
        }
        s.Stop();
        rk.Close();
        long delta1 = s.ElapsedTicks;

        s.Reset();

        // When the key is opened with ReadSubTree, security is
        // not checked when the values are read.
        rk = cu.OpenSubKey(testKey, RegistryKeyPermissionCheck.ReadSubTree);

        s.Start();
        for (int i = 0; i < LIMIT; i++)
        {
            rk.GetValue("Key" + i, i);
        }
        s.Stop();
        rk.Close();
        long delta2 = s.ElapsedTicks;

        double faster = (double) (delta1 - delta2) / (double) delta1;
        Console.WriteLine("ReadSubTree is {0}% faster for {1} values.",
            (faster * 100).ToString("0.0"), LIMIT);

        cu.DeleteSubKey(testKey);
    }
}

/* This code example produces output similar to the following:

Generating 100 key/value pairs.
ReadSubTree is 23.4% faster for 100 values.
 */
  • RegistryPermission

    表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read 表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
OpenSubKey 重载
Microsoft.Win32 命名空间
CreateSubKey
DeleteSubKey
DeleteSubKeyTree
GetSubKeyNames
OpenRemoteBaseKey
SubKeyCount
Registry


RegistryKey ..::.OpenSubKey 方法 (String, Boolean)

RegistryKey
.
.
::
.
OpenSubKey 方法 (String, Boolean)
RegistryKey 类

检索指定的子项，并指定是否将写访问权限应用于该项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Function OpenSubKey ( _
    name As String, _
    writable As Boolean _
) As RegistryKey
public RegistryKey OpenSubKey(
    string name,
    bool writable
)
public:
RegistryKey^ OpenSubKey(
    String^ name,
    bool writable
)
member OpenSubKey :
        name:string *
        writable:bool -> RegistryKey

参数

name
类型： System String
要打开的子项的名称或路径。
writable
类型： System Boolean
如果需要项的写访问权限，则设置为 true。

返回值

类型： Microsoft.Win32 RegistryKey
请求的子项；如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ObjectDisposedException | RegistryKey 已关闭（无法访问已关闭的项）。
SecurityException | 用户没有在指定模式下访问注册表项所需的权限。

如果请求的项不存在，此方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而不是引发异常。

如果 writable 为 true，则此项将打开以进行读写，否则，此项将以只读方式打开。

要使用 OpenSubKey 方法，您必须拥有 RegistryKey 方法的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。 要使用 OpenSubKey 方法，您必须拥有 RegistryKey 方法的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。

下面的代码示例创建一个测试项并使用 OpenSubKey 方法将其打开，以演示该方法的两种重载。

Imports System
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryOpenSubKeyExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample")
        rk.Close

        ' Obtain an instance of RegistryKey for the CurrentUser registry
        ' root.
        Dim rkCurrentUser As RegistryKey = Registry.CurrentUser

        ' Obtain the test key (read-only) and display it.
        Dim rkTest As RegistryKey = rkCurrentUser.OpenSubKey("RegistryOpenSubKeyExample")
        Console.WriteLine("Test key: {0}", rkTest)
        rkTest.Close
        rkCurrentUser.Close

        ' Obtain the test key in one step, using the CurrentUser registry
        ' root.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample")
        Console.WriteLine("Test key: {0}", rkTest)
        rkTest.Close

        ' Obtain the test key in read/write mode.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample", True)
        rkTest.SetValue("TestName", "TestValue")
        Console.WriteLine("Test value for TestName: {0}", rkTest.GetValue("TestName"))
        rkTest.Close
    End Sub 'Main
End Class 'Example

using System;
using Microsoft.Win32;
using Microsoft.VisualBasic;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryOpenSubKeyExample", false);
        RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample");
        rk.Close();

        // Obtain an instance of RegistryKey for the CurrentUser registry
        // root.
        RegistryKey rkCurrentUser = Registry.CurrentUser;

        // Obtain the test key (read-only) and display it.
        RegistryKey rkTest = rkCurrentUser.OpenSubKey("RegistryOpenSubKeyExample");
        Console.WriteLine("Test key: {0}", rkTest);
        rkTest.Close();
        rkCurrentUser.Close();

        // Obtain the test key in one step, using the CurrentUser registry
        // root.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample");
        Console.WriteLine("Test key: {0}", rkTest);
        rkTest.Close();

        // Open the test key in read/write mode.
        rkTest = Registry.CurrentUser.OpenSubKey("RegistryOpenSubKeyExample", true);
        rkTest.SetValue("TestName", "TestValue");
        Console.WriteLine("Test value for TestName: {0}", rkTest.GetValue("TestName"));
        rkTest.Close();
    } //Main
} //Example

#using <Microsoft.VisualBasic.dll>

using namespace System;
using namespace Microsoft::Win32;
using namespace Microsoft::VisualBasic;

int main()
{
    // Delete and recreate the test key.
    Registry::CurrentUser->DeleteSubKey( L"RegistryOpenSubKeyExample", false );
    RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( L"RegistryOpenSubKeyExample" );
    rk->Close();

    // Obtain an instance of RegistryKey for the CurrentUser registry
    // root.
    RegistryKey ^ rkCurrentUser = Registry::CurrentUser;

    // Obtain the test key (read-only) and display it.
    RegistryKey ^ rkTest = rkCurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample" );
    Console::WriteLine( L"Test key: {0}", rkTest );
    rkTest->Close();
    rkCurrentUser->Close();

    // Obtain the test key in one step, using the CurrentUser registry
    // root.
    rkTest = Registry::CurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample" );
    Console::WriteLine( L"Test key: {0}", rkTest );
    rkTest->Close();

    // Open the test key in read/write mode.
    rkTest = Registry::CurrentUser->OpenSubKey( L"RegistryOpenSubKeyExample", true );
    rkTest->SetValue( L"TestName", L"TestValue" );
    Console::WriteLine( L"Test value for TestName: {0}", rkTest->GetValue( L"TestName" ) );
    rkTest->Close();

    return 0;
} //Main
  • RegistryPermission

    表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read 表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
OpenSubKey 重载
Microsoft.Win32 命名空间
CreateSubKey
DeleteSubKey
DeleteSubKeyTree
GetSubKeyNames
OpenRemoteBaseKey
SubKeyCount
Registry


RegistryKey ..::.OpenSubKey 方法 (String, RegistryKeyPermissionCheck, RegistryRights)

RegistryKey
.
.
::
.
OpenSubKey 方法 (String, RegistryKeyPermissionCheck, RegistryRights)
RegistryKey 类

检索指定的子项以进行读取或读/写访问，请求指定的访问权限。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function OpenSubKey ( _
    name As String, _
    permissionCheck As RegistryKeyPermissionCheck, _
    rights As RegistryRights _
) As RegistryKey
[ComVisibleAttribute(false)]
public RegistryKey OpenSubKey(
    string name,
    RegistryKeyPermissionCheck permissionCheck,
    RegistryRights rights
)
[ComVisibleAttribute(false)]
public:
RegistryKey^ OpenSubKey(
    String^ name,
    RegistryKeyPermissionCheck permissionCheck,
    RegistryRights rights
)
[<ComVisibleAttribute(false)>]
member OpenSubKey :
        name:string *
        permissionCheck:RegistryKeyPermissionCheck *
        rights:RegistryRights -> RegistryKey

参数

name
类型： System String
要创建或打开的子项的名称或路径。
permissionCheck
类型： Microsoft.Win32 RegistryKeyPermissionCheck
用于指定打开该项是进行读取还是读取/写入访问的枚举值之一。
rights
类型： System.Security.AccessControl RegistryRights
枚举值的按位组合，它指定所需的安全访问。

返回值

类型： Microsoft.Win32 RegistryKey
请求的子项；如果操作失败，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | permissionCheck 包含无效值。
ObjectDisposedException | RegistryKey 已关闭（无法访问已关闭的项）。
SecurityException | rights 包含无效的注册表权限值。 - 或 - 用户没有所要求的权限。

如果请求的项不存在，此方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而不是引发异常。

如果 permissionCheck 为 RegistryKeyPermissionCheck..::.ReadWriteSubTree，则打开该项进行读写；如果 permissionCheck 为 RegistryKeyPermissionCheck..::.ReadSubTree 或 RegistryKeyPermissionCheck..::.Default，除非用 RegistryKeyPermissionCheck..::.ReadWriteSubTree 打开父项，否则以只读方式打开该项。

为 permissionCheck 指定的访问权限的优先级比为 rights 指定的访问权限的优先级高。例如，如果为 permissionCheck 指定 RegistryKeyPermissionCheck..::.ReadSubTree，为 rights 指定 RegistryRights..::.WriteKey，那么尝试写入子项时将引发异常。 为 permissionCheck 指定的访问权限的优先级比为 rights 指定的访问权限的优先级高。例如，如果为 permissionCheck 指定 RegistryKeyPermissionCheck..::.ReadSubTree，为 rights 指定 RegistryRights..::.WriteKey，那么尝试写入子项时将引发异常。

要使用 OpenSubKey 方法，您必须拥有 RegistryKey 类的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。 要使用 OpenSubKey 方法，您必须拥有 RegistryKey 类的实例。要获取 RegistryKey 的实例，请使用 Registry 类的静态成员之一。

  • RegistryPermission

    表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read 表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
OpenSubKey 重载
Microsoft.Win32 命名空间
CreateSubKey
DeleteSubKey
DeleteSubKeyTree
GetSubKeyNames
OpenRemoteBaseKey
SubKeyCount
Registry


RegistryKey ..::.SetAccessControl 方法

RegistryKey
.
.
::
.
SetAccessControl 方法
RegistryKey 类

向现有注册表项应用 Windows 访问控制安全性。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetAccessControl ( _
    registrySecurity As RegistrySecurity _
)
public void SetAccessControl(
    RegistrySecurity registrySecurity
)
public:
void SetAccessControl(
    RegistrySecurity^ registrySecurity
)
member SetAccessControl :
        registrySecurity:RegistrySecurity -> unit

参数

registrySecurity
类型： System.Security.AccessControl RegistrySecurity
要应用于当前子项的访问控制安全性。
异常 | 条件
UnauthorizedAccessException | 当前的 RegistryKey 对象表示一个具有访问控制安全性的项，并且调用方没有 RegistryRights..::.ChangePermissions 权限。
ArgumentNullException | registrySecurity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。

要修改注册表项的权限，请使用 GetAccessControl 方法获取表示现有 Windows 访问控制安全性的 RegistrySecurity 对象，修改该 RegistrySecurity 对象，然后使用 SetAccessControl 方法更新该项的安全性。

警告说明 警告

为 registrySecurity 指定的 RegistrySecurity 对象替代注册表项的现有安全性。要为新用户添加权限，请使用 GetAccessControl 方法获取现有的访问控制安全性，然后对它进行修改。 为 registrySecurity 指定的 RegistrySecurity 对象替代注册表项的现有安全性。要为新用户添加权限，请使用 GetAccessControl 方法获取现有的访问控制安全性，然后对它进行修改。

下面的代码示例创建一个测试项。允许当前用户拥有 ReadKey 和 Delete 权限，但禁止当前用户拥有 ChangePermissions 和 WriteKey 权限。此后对注册表项进行的操作尝试是否成功将取决于这些权限。 下面的代码示例创建一个测试项。允许当前用户拥有 ReadKey 和 Delete 权限，但禁止当前用户拥有 ChangePermissions 和 WriteKey 权限。此后对注册表项进行的操作尝试是否成功将取决于这些权限。 下面的代码示例创建一个测试项。允许当前用户拥有 ReadKey 和 Delete 权限，但禁止当前用户拥有 ChangePermissions 和 WriteKey 权限。此后对注册表项进行的操作尝试是否成功将取决于这些权限。

在删除该注册表项之前，代码将暂停。您可以切换到注册表编辑器，验证在使用注册表编辑器访问该项时是否应用了相同的访问权限。（在以没有管理员权限的本地用户身份使用 RunAs 从命令行运行注册表编辑器和代码示例时，这种做法最有效。注册表编辑器始终允许管理员更改权限，即使系统拒绝特定管理员拥有此类权限时也如此。如果定义了名为 TestUser 的本地用户，运行命令 runas /user:TestUser cmd 将会打开一个命令窗口，您可从该窗口运行注册表编辑器和代码示例。） 在删除该注册表项之前，代码将暂停。您可以切换到注册表编辑器，验证在使用注册表编辑器访问该项时是否应用了相同的访问权限。（在以没有管理员权限的本地用户身份使用 RunAs 从命令行运行注册表编辑器和代码示例时，这种做法最有效。注册表编辑器始终允许管理员更改权限，即使系统拒绝特定管理员拥有此类权限时也如此。如果定义了名为 TestUser 的本地用户，运行命令 runas /user:TestUser cmd 将会打开一个命令窗口，您可从该窗口运行注册表编辑器和代码示例。） 在删除该注册表项之前，代码将暂停。您可以切换到注册表编辑器，验证在使用注册表编辑器访问该项时是否应用了相同的访问权限。（在以没有管理员权限的本地用户身份使用 RunAs 从命令行运行注册表编辑器和代码示例时，这种做法最有效。注册表编辑器始终允许管理员更改权限，即使系统拒绝特定管理员拥有此类权限时也如此。如果定义了名为 TestUser 的本地用户，运行命令 runas /user:TestUser cmd 将会打开一个命令窗口，您可从该窗口运行注册表编辑器和代码示例。） 在删除该注册表项之前，代码将暂停。您可以切换到注册表编辑器，验证在使用注册表编辑器访问该项时是否应用了相同的访问权限。（在以没有管理员权限的本地用户身份使用 RunAs 从命令行运行注册表编辑器和代码示例时，这种做法最有效。注册表编辑器始终允许管理员更改权限，即使系统拒绝特定管理员拥有此类权限时也如此。如果定义了名为 TestUser 的本地用户，运行命令 runas /user:TestUser cmd 将会打开一个命令窗口，您可从该窗口运行注册表编辑器和代码示例。） 在删除该注册表项之前，代码将暂停。您可以切换到注册表编辑器，验证在使用注册表编辑器访问该项时是否应用了相同的访问权限。（在以没有管理员权限的本地用户身份使用 RunAs 从命令行运行注册表编辑器和代码示例时，这种做法最有效。注册表编辑器始终允许管理员更改权限，即使系统拒绝特定管理员拥有此类权限时也如此。如果定义了名为 TestUser 的本地用户，运行命令 runas /user:TestUser cmd 将会打开一个命令窗口，您可从该窗口运行注册表编辑器和代码示例。）

Imports System
Imports System.Reflection
Imports System.Security
Imports System.Security.AccessControl
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' Delete the example key if it exists.
        Try
            Registry.CurrentUser.DeleteSubKey("RegistryRightsExample")
            Console.WriteLine("Example key has been deleted.")
        Catch ex As ArgumentException
            ' ArgumentException is thrown if the key does not exist. In
            ' this case, there is no reason to display a message.
        Catch ex As Exception
            Console.WriteLine("Unable to delete the example key: {0}", ex)
            Return
        End Try

        Dim user As String = Environment.UserDomainName & "\" & Environment.UserName

        Dim rs As New RegistrySecurity()

        ' Allow the current user to read and delete the key.
        '
        rs.AddAccessRule(new RegistryAccessRule(user, _
            RegistryRights.ReadKey Or RegistryRights.Delete, _
            InheritanceFlags.None, _
            PropagationFlags.None, _
            AccessControlType.Allow))

        ' Prevent the current user from writing or changing the
        ' permission set of the key. Note that if Delete permission
        ' were not allowed in the previous access rule, denying
        ' WriteKey permission would prevent the user from deleting the
        ' key.
        rs.AddAccessRule(new RegistryAccessRule(user, _
            RegistryRights.WriteKey Or RegistryRights.ChangePermissions, _
            InheritanceFlags.None, _
            PropagationFlags.None, _
            AccessControlType.Deny))

        ' Create the example key with registry security.
        Dim rk As RegistryKey = Nothing
        Try
            rk = Registry.CurrentUser.CreateSubKey("RegistryRightsExample", _
                RegistryKeyPermissionCheck.Default, rs)
            Console.WriteLine(vbCrLf & "Example key created.")
            rk.SetValue("ValueName", "StringValue")
        Catch ex As Exception
            Console.WriteLine(vbCrLf & "Unable to create the example key: {0}", ex)
        End Try

        If rk IsNot Nothing Then rk.Close()

        rk = Registry.CurrentUser

        Dim rk2 As RegistryKey

        ' Open the key with read access.
        rk2 = rk.OpenSubKey("RegistryRightsExample", False)
        Console.WriteLine(vbCrLf & "Retrieved value: {0}", rk2.GetValue("ValueName"))
        rk2.Close()

        ' Attempt to open the key with write access.
        Try
            rk2 = rk.OpenSubKey("RegistryRightsExample", True)
        Catch ex As SecurityException
            Console.WriteLine(vbCrLf & "Unable to write to the example key." _
                & " Caught SecurityException: {0}", ex.Message)
        End Try
        If rk2 IsNot Nothing Then rk2.Close()

        ' Attempt to change permissions for the key.
        Try
            rs = New RegistrySecurity()
            rs.AddAccessRule(new RegistryAccessRule(user, _
                RegistryRights.WriteKey, _
                InheritanceFlags.None, _
                PropagationFlags.None, _
                AccessControlType.Allow))
            rk2 = rk.OpenSubKey("RegistryRightsExample", False)
            rk2.SetAccessControl(rs)
            Console.WriteLine(vbCrLf & "Example key permissions were changed.")
        Catch ex As UnauthorizedAccessException
            Console.WriteLine(vbCrLf & "Unable to change permissions for the example key." _
                & " Caught UnauthorizedAccessException: {0}", ex.Message)
        End Try
        If rk2 IsNot Nothing Then rk2.Close()

        Console.WriteLine(vbCrLf & "Press Enter to delete the example key.")
        Console.ReadLine()

        Try
            rk.DeleteSubKey("RegistryRightsExample")
            Console.WriteLine("Example key was deleted.")
        Catch ex As Exception
            Console.WriteLine("Unable to delete the example key: {0}", ex)
        End Try

        rk.Close()
    End Sub
End Class

' This code produces the following output:
'
'Example key created.
'
'Retrieved value: StringValue
'
'Unable to write to the example key. Caught SecurityException: Requested registry access is not allowed.
'
'Unable to change permissions for the example key. Caught UnauthorizedAccessException: Cannot write to the registry key.
'
'Press Enter to delete the example key.
'
'Example key was deleted.

using System;
using System.Reflection;
using System.Security;
using System.Security.AccessControl;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // Delete the example key if it exists.
        try
        {
            Registry.CurrentUser.DeleteSubKey("RegistryRightsExample");
            Console.WriteLine("Example key has been deleted.");
        }
        catch (ArgumentException)
        {
            // ArgumentException is thrown if the key does not exist. In
            // this case, there is no reason to display a message.
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unable to delete the example key: {0}", ex);
            return;
        }

        string user = Environment.UserDomainName + "\\" + Environment.UserName;

        RegistrySecurity rs = new RegistrySecurity();

        // Allow the current user to read and delete the key.
        //
        rs.AddAccessRule(new RegistryAccessRule(user,
            RegistryRights.ReadKey | RegistryRights.Delete,
            InheritanceFlags.None,
            PropagationFlags.None,
            AccessControlType.Allow));

        // Prevent the current user from writing or changing the
        // permission set of the key. Note that if Delete permission
        // were not allowed in the previous access rule, denying
        // WriteKey permission would prevent the user from deleting the
        // key.
        rs.AddAccessRule(new RegistryAccessRule(user,
            RegistryRights.WriteKey | RegistryRights.ChangePermissions,
            InheritanceFlags.None,
            PropagationFlags.None,
            AccessControlType.Deny));

        // Create the example key with registry security.
        RegistryKey rk = null;
        try
        {
            rk = Registry.CurrentUser.CreateSubKey("RegistryRightsExample",
                RegistryKeyPermissionCheck.Default, rs);
            Console.WriteLine("\r\nExample key created.");
            rk.SetValue("ValueName", "StringValue");
        }
        catch (Exception ex)
        {
            Console.WriteLine("\r\nUnable to create the example key: {0}", ex);
        }
        if (rk != null) rk.Close();

        rk = Registry.CurrentUser;

        RegistryKey rk2;

        // Open the key with read access.
        rk2 = rk.OpenSubKey("RegistryRightsExample", false);
        Console.WriteLine("\r\nRetrieved value: {0}", rk2.GetValue("ValueName"));
        rk2.Close();

        // Attempt to open the key with write access.
        try
        {
            rk2 = rk.OpenSubKey("RegistryRightsExample", true);
        }
        catch (SecurityException ex)
        {
            Console.WriteLine("\nUnable to write to the example key." +
                " Caught SecurityException: {0}", ex.Message);
        }
        if (rk2 != null) rk2.Close();

        // Attempt to change permissions for the key.
        try
        {
            rs = new RegistrySecurity();
            rs.AddAccessRule(new RegistryAccessRule(user,
                RegistryRights.WriteKey,
                InheritanceFlags.None,
                PropagationFlags.None,
                AccessControlType.Allow));
            rk2 = rk.OpenSubKey("RegistryRightsExample", false);
            rk2.SetAccessControl(rs);
            Console.WriteLine("\r\nExample key permissions were changed.");
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine("\nUnable to change permissions for the example key." +
                " Caught UnauthorizedAccessException: {0}", ex.Message);
        }
        if (rk2 != null) rk2.Close();

        Console.WriteLine("\r\nPress Enter to delete the example key.");
        Console.ReadLine();

        try
        {
            rk.DeleteSubKey("RegistryRightsExample");
            Console.WriteLine("Example key was deleted.");
        }
        catch(Exception ex)
        {
            Console.WriteLine("Unable to delete the example key: {0}", ex);
        }

        rk.Close();
    }
}

/* This code example produces the following output:

Example key created.

Retrieved value: StringValue

Unable to write to the example key. Caught SecurityException: Requested registry access is not allowed.

Unable to change permissions for the example key. Caught UnauthorizedAccessException: Cannot write to the registry key.

Press Enter to delete the example key.

Example key was deleted.
 */

using namespace System;
using namespace System::Reflection;
using namespace Microsoft::Win32;
using namespace System::Security::AccessControl;
using namespace System::Security;

int main()
{
    // Delete the example key if it exists.
    try
    {
        Registry::CurrentUser->DeleteSubKey("RegistryRightsExample");
        Console::WriteLine("Example key has been deleted.");
    }
    catch (ArgumentException^)
    {
        // ArgumentException is thrown if the key does not exist. In
        // this case, there is no reason to display a message.
    }
    catch (InvalidOperationException^ ex)
    {
        Console::WriteLine(
            "{0}Unable to delete key: it appears to have child subkeys:{0}{1}",
            Environment::NewLine, ex);
        return 0;
    }
    catch (SecurityException^ ex)
    {
        Console::WriteLine("{0}You do not have the permissions required " +
            "to delete this key:{0}{1}", Environment::NewLine, ex);
        return 0;
    }

    String^ user = Environment::UserDomainName + "\\" + Environment::UserName;

    RegistrySecurity^ regSecurity = gcnew RegistrySecurity();

    // Allow the current user to read and delete the key.
    //
    regSecurity->AddAccessRule(gcnew RegistryAccessRule(user,
        RegistryRights::ReadKey | RegistryRights::Delete,
        InheritanceFlags::None,
        PropagationFlags::None,
        AccessControlType::Allow));

    // Prevent the current user from writing or changing the
    // permission set of the key. Note that if Delete permission
    // were not allowed in the previous access rule, denying
    // WriteKey permission would prevent the user from deleting the
    // key.
    regSecurity->AddAccessRule(gcnew RegistryAccessRule(user,
        RegistryRights::WriteKey | RegistryRights::ChangePermissions,
        InheritanceFlags::None,
        PropagationFlags::None,
        AccessControlType::Deny));

    // Create the example key with registry security.
    RegistryKey^ createdKey = nullptr;
    try
    {
        createdKey = Registry::CurrentUser->CreateSubKey(
            "RegistryRightsExample", RegistryKeyPermissionCheck::Default,
            regSecurity);
        Console::WriteLine("{0}Example key created.", Environment::NewLine);
        createdKey->SetValue("ValueName", "StringValue");
    }
    catch (SecurityException^ ex)
    {
        Console::WriteLine("{0}You do not have the permissions required " +
            "to create the example key:{0}{1}", Environment::NewLine, ex);
        return 0;
    }
    if (createdKey != nullptr)
    {
        createdKey->Close();
    }

    RegistryKey^ openedKey;

    // Open the key with read access.
    openedKey = Registry::CurrentUser->OpenSubKey("RegistryRightsExample",
        false);
    Console::WriteLine("{0}Retrieved value: {1}",
        Environment::NewLine, openedKey->GetValue("ValueName"));
    openedKey->Close();

    // Attempt to open the key with write access.
    try
    {
        openedKey = Registry::CurrentUser->OpenSubKey("RegistryRightsExample",
            true);
    }
    catch (SecurityException^ ex)
    {
        Console::WriteLine("{0}You do not have the permissions required " +
            "to write to the example key:{0}{1}", Environment::NewLine, ex);
    }
    if (openedKey != nullptr)
    {
        openedKey->Close();
    }

    // Attempt to change permissions for the key.
    try
    {
        regSecurity = gcnew RegistrySecurity();
        regSecurity->AddAccessRule(gcnew RegistryAccessRule(user,
            RegistryRights::WriteKey,
            InheritanceFlags::None,
            PropagationFlags::None,
            AccessControlType::Allow));
        openedKey = Registry::CurrentUser->OpenSubKey("RegistryRightsExample",
            false);
        openedKey->SetAccessControl(regSecurity);
        Console::WriteLine("{0}Example key permissions were changed.",
            Environment::NewLine);
    }
    catch (UnauthorizedAccessException^ ex)
    {
        Console::WriteLine("{0}You are not authorized to change " +
            "permissions for the example key:{0}{1}", Environment::NewLine, ex);
    }
    if (openedKey != nullptr)
    {
        openedKey->Close();
    }

    Console::WriteLine("{0}Press Enter to delete the example key.",
        Environment::NewLine);
    Console::ReadLine();

    try
    {
        Registry::CurrentUser->DeleteSubKey("RegistryRightsExample");
        Console::WriteLine("Example key was deleted.");
    }
    catch(SecurityException^ ex)
    {
        Console::WriteLine("{0}You do not have the permissions required to "
            + "delete the example key:{0}{1}", Environment::NewLine, ex);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.SetValue 方法

RegistryKey
.
.
::
.
SetValue 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

设置注册表项中的名称/值对的值。从所存储数据的类型或指定的 RegistryValueKind 确定注册表数据类型，具体取决于重载。 设置注册表项中的名称/值对的值。从所存储数据的类型或指定的 RegistryValueKind 确定注册表数据类型，具体取决于重载。

名称 说明
页首

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.SetValue 方法 (String, Object)

RegistryKey
.
.
::
.
SetValue 方法 (String, Object)
RegistryKey 类

设置指定的名称/值对。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetValue ( _
    name As String, _
    value As Object _
)
public void SetValue(
    string name,
    Object value
)
public:
void SetValue(
    String^ name,
    Object^ value
)
member SetValue :
        name:string *
        value:Object -> unit

参数

name
类型： System String
要存储的值的名称。
value
类型： System Object
要存储的数据。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | value 不是受支持的数据类型。
ObjectDisposedException | 包含指定值的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | RegistryKey 只读，因此无法写入；例如，项不是用写访问权限打开的。 - 或 - RegistryKey 对象表示根级别节点，操作系统为 Windows Millennium Edition 或 Windows 98。
SecurityException | 用户没有创建或修改注册表项所需的权限。
IOException | RegistryKey 对象表示根级别节点，操作系统为 Windows 2000、Windows XP 或 Windows Server 2003。

由于注册表中的每个项都可以存储很多值，因此必须使用 name 参数指定要设置的特定值。

说明 说明

注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置此未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置此未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置此未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。

要在项中设置值，必须使用写访问权限打开该项。使用写访问权限打开一个项后，即可更改该项中的任何名称/值对。 要在项中设置值，必须使用写访问权限打开该项。使用写访问权限打开一个项后，即可更改该项中的任何名称/值对。

如果指定的 name 在项中不存在，则将创建它，并且将关联的值设置为 value。

SetValue 的这一重载将 64 位整数存储为字符串 (RegistryValueKind..::.String)。要将 64 位数字存储为 RegistryValueKind..::.QWord 值，请使用指定 RegistryValueKind 的 SetValue(String, Object, RegistryValueKind) 重载。 SetValue 的这一重载将 64 位整数存储为字符串 (RegistryValueKind..::.String)。要将 64 位数字存储为 RegistryValueKind..::.QWord 值，请使用指定 RegistryValueKind 的 SetValue(String, Object, RegistryValueKind) 重载。

SetValue 的这一重载将所有字符串值存储为 RegistryValueKind..::.String，即使它们包含对环境变量的可展开的引用时也如此。要将字符串值另存为可展开的字符串 (RegistryValueKind..::.ExpandString)，请使用指定 RegistryValueKind 的 SetValue(String, Object, RegistryValueKind) 重载。 SetValue 的这一重载将所有字符串值存储为 RegistryValueKind..::.String，即使它们包含对环境变量的可展开的引用时也如此。要将字符串值另存为可展开的字符串 (RegistryValueKind..::.ExpandString)，请使用指定 RegistryValueKind 的 SetValue(String, Object, RegistryValueKind) 重载。

此方法重载将 32 位整数以外的其他 Numeric 类型存储为字符串。枚举元素存储为包含元素名称的字符串。 此方法重载将 32 位整数以外的其他 Numeric 类型存储为字符串。枚举元素存储为包含元素名称的字符串。

警告说明 警告

在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。 在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。
说明 说明

在 Windows 98 和 Windows Millennium Edition 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。 在 Windows 98 和 Windows Millennium Edition 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。 在 Windows 98 和 Windows Millennium Edition 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。

下面的代码示例演示 SetValue 方法在设置值时如何确定注册表数据类型。下面的示例创建一个测试项，并向该项添加不同数据类型的值。然后，此示例使用 GetValueKind 方法显示相应的注册表数据类型，以读取名称/值对并将其显示在控制台中。 下面的代码示例演示 SetValue 方法在设置值时如何确定注册表数据类型。下面的示例创建一个测试项，并向该项添加不同数据类型的值。然后，此示例使用 GetValueKind 方法显示相应的注册表数据类型，以读取名称/值对并将其显示在控制台中。 下面的代码示例演示 SetValue 方法在设置值时如何确定注册表数据类型。下面的示例创建一个测试项，并向该项添加不同数据类型的值。然后，此示例使用 GetValueKind 方法显示相应的注册表数据类型，以读取名称/值对并将其显示在控制台中。

Imports System
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistrySetValueExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistrySetValueExample")

        ' Create name/value pairs.
        ' Numeric values that cannot be interpreted as DWord (int) values
        ' are stored as strings.
        rk.SetValue("LargeNumberValue1", CType(42, Long))
        rk.SetValue("LargeNumberValue2", 42000000000)

        rk.SetValue("DWordValue", 42)
        rk.SetValue("MultipleStringValue", New String() {"One", "Two", "Three"})
        rk.SetValue("BinaryValue", New Byte() {10, 43, 44, 45, 14, 255})

        ' This overload of SetValue does not support expanding strings. Use
        ' the overload that allows you to specify RegistryValueKind.
        rk.SetValue("StringValue", "The path is %PATH%")

        ' Display all name/value pairs stored in the test key, with each
        ' registry data type in parentheses.
        '
        Dim valueNames As String() = rk.GetValueNames()
        Dim s As String
        For Each s In  valueNames
            Dim rvk As RegistryValueKind = rk.GetValueKind(s)
            Select Case rvk
                Case RegistryValueKind.MultiString
                    Dim values As String() = CType(rk.GetValue(s), String())
                    Console.Write(vbCrLf + " {0} ({1}) = ""{2}""", s, rvk, values(0))
                    Dim i As Integer
                    For i = 1 To values.Length - 1
                        Console.Write(", ""{0}""", values(i))
                    Next i
                    Console.WriteLine()

                Case RegistryValueKind.Binary
                    Dim bytes As Byte() = CType(rk.GetValue(s), Byte())
                    Console.Write(vbCrLf + " {0} ({1}) = {2:X2}", s, rvk, bytes(0))
                    Dim i As Integer
                    For i = 1 To bytes.Length - 1
                        ' Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes(i))
                    Next i
                    Console.WriteLine()

                Case Else
                    Console.WriteLine(vbCrLf + " {0} ({1}) = {2}", s, rvk, rk.GetValue(s))
            End Select
        Next s
    End Sub 'Main
End Class 'Example

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistrySetValueExample", false);
        RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistrySetValueExample");

        // Create name/value pairs.

        // Numeric values that cannot be interpreted as DWord (int) values
        // are stored as strings.
        rk.SetValue("LargeNumberValue1", (long) 42);
        rk.SetValue("LargeNumberValue2", 42000000000);

        rk.SetValue("DWordValue", 42);
        rk.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"});
        rk.SetValue("BinaryValue", new byte[] {10, 43, 44, 45, 14, 255});

        // This overload of SetValue does not support expanding strings. Use
        // the overload that allows you to specify RegistryValueKind.
        rk.SetValue("StringValue", "The path is %PATH%");

        // Display all name/value pairs stored in the test key, with each
        // registry data type in parentheses.
        //
        string[] valueNames = rk.GetValueNames();
        foreach (string s in valueNames)
        {
            RegistryValueKind rvk = rk.GetValueKind(s);
            switch (rvk)
            {
                case RegistryValueKind.MultiString :
                    string[] values = (string[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) = \"{2}\"", s, rvk, values[0]);
                    for (int i = 1; i < values.Length; i++)
                    {
                        Console.Write(", \"{0}\"", values[i]);
                    }
                    Console.WriteLine();
                    break;

                case RegistryValueKind.Binary :
                    byte[] bytes = (byte[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) = {2:X2}", s, rvk, bytes[0]);
                    for (int i = 1; i < bytes.Length; i++)
                    {
                        // Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes[i]);
                    }
                    Console.WriteLine();
                    break;

                default :
                    Console.WriteLine("\r\n {0} ({1}) = {2}", s, rvk, rk.GetValue(s));
                    break;
            }
        }
    }
}

using namespace System;
using namespace Microsoft::Win32;
int main()
{

   // Delete and recreate the test key.
   Registry::CurrentUser->DeleteSubKey( "RegistrySetValueExample", false );
   RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( "RegistrySetValueExample" );

   // Create name/value pairs.
   // Numeric values that cannot be interpreted as DWord (int) values
   // are stored as strings.
   rk->SetValue( "LargeNumberValue1", (long)42 );
   rk->SetValue( "LargeNumberValue2", 42000000000 );
   rk->SetValue( "DWordValue", 42 );
   array<String^>^temp0 = {"One","Two","Three"};
   rk->SetValue( "MultipleStringValue", temp0 );
   array<Byte>^temp1 = {10,43,44,45,14,255};
   rk->SetValue( "BinaryValue", temp1 );

   // This overload of SetValue does not support expanding strings. Use
   // the overload that allows you to specify RegistryValueKind.
   rk->SetValue( "StringValue", "The path is %PATH%" );

   // Display all the name/value pairs stored in the test key, with
   // the registry data type in parentheses.
   //
   array<String^>^valueNames = rk->GetValueNames();
   System::Collections::IEnumerator^ myEnum = valueNames->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      RegistryValueKind rvk = rk->GetValueKind( s );
      switch ( rvk )
      {
         case RegistryValueKind::MultiString:
         {
            array<String^>^values = (array<String^>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) = \"{2}\"", s, rvk, values[ 0 ] );
            for ( int i = 1; i < values->Length; i++ )
            {
               Console::Write( ", \"{0}\"", values[ i ] );

            }
            Console::WriteLine();
            break;
         }
         case RegistryValueKind::Binary:
         {
            array<Byte>^bytes = (array<Byte>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) = {2:X2}", s, rvk, bytes[ 0 ] );
            for ( int i = 1; i < bytes->Length; i++ )
            {

               // Display each byte as two hexadecimal digits.
               Console::Write( " {0:X2}", bytes[ i ] );

            }
            Console::WriteLine();
            break;
         }
         default:
            Console::WriteLine( "\r\n {0} ({1}) = {2}", s, rvk, rk->GetValue( s ) );
            break;
      }
   }
}
  • RegistryPermission

    如果指定的注册表项存在，则修改该项，或者，如果注册表项还不存在，则创建该项。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create 如果指定的注册表项存在，则修改该项，或者，如果注册表项还不存在，则创建该项。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
SetValue 重载
Microsoft.Win32 命名空间
GetValue
GetValueKind
ValueCount


RegistryKey ..::.SetValue 方法 (String, Object, RegistryValueKind)

RegistryKey
.
.
::
.
SetValue 方法 (String, Object, RegistryValueKind)
RegistryKey 类

使用指定的注册表数据类型设置注册表项中的名称/值对的值。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Sub SetValue ( _
    name As String, _
    value As Object, _
    valueKind As RegistryValueKind _
)
[ComVisibleAttribute(false)]
public void SetValue(
    string name,
    Object value,
    RegistryValueKind valueKind
)
[ComVisibleAttribute(false)]
public:
void SetValue(
    String^ name,
    Object^ value,
    RegistryValueKind valueKind
)
[<ComVisibleAttribute(false)>]
member SetValue :
        name:string *
        value:Object *
        valueKind:RegistryValueKind -> unit

参数

name
类型： System String
要存储的值的名称。
value
类型： System Object
要存储的数据。
valueKind
类型： Microsoft.Win32 RegistryValueKind
在存储数据时使用的注册表数据类型。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | value 的类型与 valueKind 指定的注册表数据类型不匹配，因此，未能正确转换该数据。
ObjectDisposedException | 包含指定值的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | RegistryKey 只读，因此无法写入；例如，项不是用写访问权限打开的。 - 或 - RegistryKey 对象表示根级别节点，操作系统为 Windows Millennium Edition 或 Windows 98。
SecurityException | 用户没有创建或修改注册表项所需的权限。
IOException | RegistryKey 对象表示根级别节点，操作系统为 Windows 2000、Windows XP 或 Windows Server 2003。

由于注册表中的每个项都可以存储很多值，因此必须使用 name 参数指定要设置的特定值。

说明 说明

注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置此未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置此未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。 注册表项可具有不与任何名称相关联的值。当在注册表编辑器中显示此未命名的值时，将显示字符串“(Default)”，而不是显示一个名称。若要设置此未命名的值，请为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。

要在项中设置值，必须使用写访问权限打开该项。使用写访问权限打开一个项后，即可更改该项中的任何名称/值对。 要在项中设置值，必须使用写访问权限打开该项。使用写访问权限打开一个项后，即可更改该项中的任何名称/值对。

如果指定的 name 在项中不存在，则将创建它，并且将关联的值设置为 value。

说明 说明

指定注册表数据类型 Unknown 等同于使用 SetValue 重载。

如果指定的 value 类型与指定的 valueKind 不匹配，且无法转换数据，则会发生 ArgumentException。例如，您可以将 System..::.Int64 存储为 RegistryValueKind..::.DWord，但仅当它的值小于 System..::.Int32 的最大值时才可以这样做。不能将单个字符串值存储为 RegistryValueKind..::.MultiString。 如果指定的 value 类型与指定的 valueKind 不匹配，且无法转换数据，则会发生 ArgumentException。例如，您可以将 System..::.Int64 存储为 RegistryValueKind..::.DWord，但仅当它的值小于 System..::.Int32 的最大值时才可以这样做。不能将单个字符串值存储为 RegistryValueKind..::.MultiString。 如果指定的 value 类型与指定的 valueKind 不匹配，且无法转换数据，则会发生 ArgumentException。例如，您可以将 System..::.Int64 存储为 RegistryValueKind..::.DWord，但仅当它的值小于 System..::.Int32 的最大值时才可以这样做。不能将单个字符串值存储为 RegistryValueKind..::.MultiString。

说明 说明

如果为 RegistryValueKind..::.DWord 或 RegistryValueKind..::.QWord 传递已装箱的值，则使用固定区域性执行转换。
警告说明 警告

在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。 在公开 RegistryKey 对象时不要采用一种可能会导致恶意程序创建成千上万的无意义的子项或键/值对的方式。例如，不允许调用方输入任意键或值。
说明 说明

在 Windows 98 和 Windows Millennium Edition 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。 在 Windows 98 和 Windows Millennium Edition 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。 在 Windows 98 和 Windows Millennium Edition 中注册表不是 Unicode，并不是所有的 Unicode 字符对所有的代码页都有效。对当前代码页无效的 Unicode 字符由与其最相近的项替换。不引发异常。

下面的代码示例创建一个测试项并使用 SetValue 方法存储多个值，为每个值指定注册表数据类型。然后，此示例使用 GetValueKind 方法显示相应的注册表数据类型，以读取名称/值对并将其显示在控制台中。 下面的代码示例创建一个测试项并使用 SetValue 方法存储多个值，为每个值指定注册表数据类型。然后，此示例使用 GetValueKind 方法显示相应的注册表数据类型，以读取名称/值对并将其显示在控制台中。

Imports System
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueKindExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistryValueKindExample")

        ' Create name/value pairs.
        ' This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord)

        ' The following SetValue calls have the same effect as using the
        ' SetValue overload that does not specify RegistryValueKind.
        '
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord)
        rk.SetValue("MultipleStringValue", New String() {"One", "Two", "Three"}, RegistryValueKind.MultiString)
        rk.SetValue("BinaryValue", New Byte() {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary)
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String)

        ' This overload supports setting expandable string values. Compare
        ' the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString)

        ' Display all name/value pairs stored in the test key, with each
        ' registry data type in parentheses.
        '
        Dim valueNames As String() = rk.GetValueNames()
        Dim s As String
        For Each s In  valueNames
            Dim rvk As RegistryValueKind = rk.GetValueKind(s)
            Select Case rvk
                Case RegistryValueKind.MultiString
                    Dim values As String() = CType(rk.GetValue(s), String())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To values.Length - 1
                        If i <> 0 Then Console.Write(",")
                        Console.Write(" ""{0}""", values(i))
                    Next i
                    Console.WriteLine()

                Case RegistryValueKind.Binary
                    Dim bytes As Byte() = CType(rk.GetValue(s), Byte())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To bytes.Length - 1
                        ' Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes(i))
                    Next i
                    Console.WriteLine()

                Case Else
                    Console.WriteLine(vbCrLf & " {0} ({1}) = {2}", s, rvk, rk.GetValue(s))
            End Select
        Next s
    End Sub 'Main
End Class 'Example

'
'This code example produces the following output (some output is omitted):
'
' QuadWordValue (QWord) = 42
'
' DWordValue (DWord) = 42
'
' MultipleStringValue (MultiString) = "One", "Two", "Three"
'
' BinaryValue (Binary) = 0A 2B 2C 2D 0E FF
'
' StringValue (String) = The path is %PATH%
'
' ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
' [***The remainder of this output is omitted.***]

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueKindExample", false);
        RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryValueKindExample");

        // Create name/value pairs.

        // This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord);

        // The following SetValue calls have the same effect as using the
        // SetValue overload that does not specify RegistryValueKind.
        //
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord);
        rk.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"}, RegistryValueKind.MultiString);
        rk.SetValue("BinaryValue", new byte[] {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary);
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String);

        // This overload supports setting expandable string values. Compare
        // the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString);

        // Display all name/value pairs stored in the test key, with each
        // registry data type in parentheses.
        //
        string[] valueNames = rk.GetValueNames();
        foreach (string s in valueNames)
        {
            RegistryValueKind rvk = rk.GetValueKind(s);
            switch (rvk)
            {
                case RegistryValueKind.MultiString :
                    string[] values = (string[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < values.Length; i++)
                    {
                        if (i != 0) Console.Write(",");
                        Console.Write(" \"{0}\"", values[i]);
                    }
                    Console.WriteLine();
                    break;

                case RegistryValueKind.Binary :
                    byte[] bytes = (byte[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        // Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes[i]);
                    }
                    Console.WriteLine();
                    break;

                default :
                    Console.WriteLine("\r\n {0} ({1}) = {2}", s, rvk, rk.GetValue(s));
                    break;
            }
        }
    }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/

using namespace System;
using namespace Microsoft::Win32;
int main()
{

   // Delete and recreate the test key.
   Registry::CurrentUser->DeleteSubKey( "RegistryValueKindExample", false );
   RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( "RegistryValueKindExample" );

   // Create name/value pairs.
   // This overload supports QWord (long) values.
   rk->SetValue( "QuadWordValue", 42, RegistryValueKind::QWord );

   // The following SetValue calls have the same effect as using the
   // SetValue overload that does not specify RegistryValueKind.
   //
   rk->SetValue( "DWordValue", 42, RegistryValueKind::DWord );
   rk->SetValue( "MultipleStringValue", gcnew array<String^>{
      "One","Two","Three"
   }, RegistryValueKind::MultiString );
   rk->SetValue( "BinaryValue", gcnew array<Byte>{
      10,43,44,45,14,255
   }, RegistryValueKind::Binary );
   rk->SetValue( "StringValue", "The path is %PATH%", RegistryValueKind::String );

   // This overload supports setting expandable string values. Compare
   // the output from this value with the previous string value.
   rk->SetValue( "ExpandedStringValue", "The path is %PATH%", RegistryValueKind::ExpandString );

   // Display all the name/value pairs stored in the test key, with the
   // registry data type in parentheses.
   //
   array<String^>^valueNames = rk->GetValueNames();
   System::Collections::IEnumerator^ myEnum = valueNames->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      RegistryValueKind rvk = rk->GetValueKind( s );
      switch ( rvk )
      {
         case RegistryValueKind::MultiString:
         {
            array<String^>^values = (array<String^>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < values->Length; i++ )
            {
               if (i != 0) Console::Write(",");
               Console::Write( " \"{0}\"", values[ i ] );

            }
            Console::WriteLine();
            break;
         }
         case RegistryValueKind::Binary:
         {
            array<Byte>^bytes = (array<Byte>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < bytes->Length; i++ )
            {

               // Display each byte as two hexadecimal digits.
               Console::Write( " {0:X2}", bytes[ i ] );

            }
            Console::WriteLine();
            break;
         }
         default:
            Console::WriteLine( "\r\n {0} ({1}) = {2}", s, rvk, rk->GetValue( s ) );
            break;
      }
   }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/
  • RegistryPermission

    如果指定的注册表项存在，则修改该项，或者，如果注册表项还不存在，则创建该项。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create 如果指定的注册表项存在，则修改该项，或者，如果注册表项还不存在，则创建该项。关联的枚举：RegistryPermissionAccess..::.Write、RegistryPermissionAccess..::.Create

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
SetValue 重载
Microsoft.Win32 命名空间
GetValueKind
GetValue
ValueCount
RegistryValueKind


RegistryKey ..::.ToString 方法

RegistryKey
.
.
::
.
ToString 方法
RegistryKey 类

检索此项的字符串表示形式。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
表示此项的字符串。如果指定的项无效（找不到），则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 表示此项的字符串。如果指定的项无效（找不到），则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ObjectDisposedException | 访问的 RegistryKey 已关闭（无法访问关闭的项）。

返回值包括指定项的注册表路径和此项的十六进制值。注册表路径包括指定项的绝对根，总是从注册表的一个基项（例如 HKEY_LOCAL_MACHINE）开始。 返回值包括指定项的注册表路径和此项的十六进制值。注册表路径包括指定项的绝对根，总是从注册表的一个基项（例如 HKEY_LOCAL_MACHINE）开始。

此代码示例摘自一个为 RegistryKey 类提供的更大示例。

' Delete or close the new subkey.
Console.Write(vbCrLf & "Delete newly created " & _
    "registry key? (Y/N) ")
If Char.ToUpper(Convert.ToChar(Console.Read())) = "Y"C Then
    Registry.CurrentUser.DeleteSubKeyTree("Test9999")
    Console.WriteLine(vbCrLf & "Registry key {0} deleted.", _
        test9999.Name)
Else
    Console.WriteLine(vbCrLf & "Registry key {0} closed.", _
        test9999.ToString())
    test9999.Close()
End If

// Delete or close the new subkey.
Console.Write("\nDelete newly created registry key? (Y/N) ");
if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
{
    Registry.CurrentUser.DeleteSubKeyTree("Test9999");
    Console.WriteLine("\nRegistry key {0} deleted.",
        test9999.Name);
}
else
{
    Console.WriteLine("\nRegistry key {0} closed.",
        test9999.ToString());
    test9999.Close();
}

// Delete or close the new subkey.
Console::Write( "\nDelete newly created registry key? (Y/N) " );
if ( Char::ToUpper( Convert::ToChar( Console::Read() ) ) == 'Y' )
{
   Registry::CurrentUser->DeleteSubKeyTree( "Test9999" );
   Console::WriteLine( "\nRegistry key {0} deleted.", test9999->Name );
}
else
{
   Console::WriteLine( "\nRegistry key {0} closed.", test9999->ToString() );
   test9999->Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间
Name


RegistryKey 属性

RegistryKey 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RegistryKey 类

RegistryKey 类型公开以下成员。

名称 说明
页首

参考

RegistryKey 类
Microsoft.Win32 命名空间


RegistryKey ..::.Handle 属性

RegistryKey
.
.
::
.
Handle 属性
RegistryKey 类

获取一个 SafeRegistryHandle 对象，该对象表示当前 RegistryKey 对象封装的注册表项。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public ReadOnly Property Handle As SafeRegistryHandle
    Get
[ComVisibleAttribute(false)]
public SafeRegistryHandle Handle { get; }
[ComVisibleAttribute(false)]
public:
property SafeRegistryHandle^ Handle {
    SafeRegistryHandle^ get ();
}
[<ComVisibleAttribute(false)>]
member Handle : SafeRegistryHandle

属性值

类型： Microsoft.Win32.SafeHandles SafeRegistryHandle
注册表项的句柄。
异常 | 条件
ObjectDisposedException | 注册表项已关闭。无法访问已关闭的项。 注册表项已关闭。无法访问已关闭的项。
UnauthorizedAccessException | 用户没有必需的注册表权限。
IOException | 发生系统错误，例如，删除了当前项。
SecurityException | 用户没有读取注册表项所需的权限。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

  • SecurityPermission

    表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示访问作为远程项的指定注册表项的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.Name 属性

RegistryKey
.
.
::
.
Name 属性
RegistryKey 类

检索项的名称。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Name As String
    Get
public string Name { get; }
public:
property String^ Name {
    String^ get ();
}
member Name : string

属性值

类型： System String
项的绝对（限定）名称。
异常 | 条件
ObjectDisposedException | RegistryKey 已关闭（无法访问已关闭的项）。

项的名称包括该项在注册表中的绝对路径，总是从基项（例如 HKEY_LOCAL_MACHINE）开始。

此代码示例摘自一个为 RegistryKey 类提供的更大示例。

' Delete or close the new subkey.
Console.Write(vbCrLf & "Delete newly created " & _
    "registry key? (Y/N) ")
If Char.ToUpper(Convert.ToChar(Console.Read())) = "Y"C Then
    Registry.CurrentUser.DeleteSubKeyTree("Test9999")
    Console.WriteLine(vbCrLf & "Registry key {0} deleted.", _
        test9999.Name)
Else
    Console.WriteLine(vbCrLf & "Registry key {0} closed.", _
        test9999.ToString())
    test9999.Close()
End If

// Delete or close the new subkey.
Console.Write("\nDelete newly created registry key? (Y/N) ");
if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
{
    Registry.CurrentUser.DeleteSubKeyTree("Test9999");
    Console.WriteLine("\nRegistry key {0} deleted.",
        test9999.Name);
}
else
{
    Console.WriteLine("\nRegistry key {0} closed.",
        test9999.ToString());
    test9999.Close();
}

// Delete or close the new subkey.
Console::Write( "\nDelete newly created registry key? (Y/N) " );
if ( Char::ToUpper( Convert::ToChar( Console::Read() ) ) == 'Y' )
{
   Registry::CurrentUser->DeleteSubKeyTree( "Test9999" );
   Console::WriteLine( "\nRegistry key {0} deleted.", test9999->Name );
}
else
{
   Console::WriteLine( "\nRegistry key {0} closed.", test9999->ToString() );
   test9999->Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间
ToString


RegistryKey ..::.SubKeyCount 属性

RegistryKey
.
.
::
.
SubKeyCount 属性
RegistryKey 类

检索当前项的子项数目。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property SubKeyCount As Integer
    Get
public int SubKeyCount { get; }
public:
property int SubKeyCount {
    int get ();
}
member SubKeyCount : int

属性值

类型： System Int32
当前项的子项的数目。
异常 | 条件
SecurityException | 用户没有该项的读取权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 用户没有必需的注册表权限。
IOException | 发生系统错误，例如，当前项已被删除。

该属性不对名称进行递归计数。它只返回从中调用它的基级上的名称计数。 该属性不对名称进行递归计数。它只返回从中调用它的基级上的名称计数。

此代码示例摘自一个为 RegistryKey 类提供的更大示例。

' Print the information from the Test9999 subkey.
Console.WriteLine("There are {0} subkeys under Test9999.", _
    test9999.SubKeyCount.ToString())
For Each subKeyName As String In test9999.GetSubKeyNames()
    Dim tempKey As RegistryKey = _
        test9999.OpenSubKey(subKeyName)
    Console.WriteLine(vbCrLf & "There are {0} values for " & _
        "{1}.", tempKey.ValueCount.ToString(), tempKey.Name)
    For Each valueName As String In tempKey.GetValueNames()
        Console.WriteLine("{0,-8}: {1}", valueName, _
            tempKey.GetValue(valueName).ToString())
    Next
Next

// Print the information from the Test9999 subkey.
Console.WriteLine("There are {0} subkeys under {1}.",
    test9999.SubKeyCount.ToString(), test9999.Name);
foreach(string subKeyName in test9999.GetSubKeyNames())
{
    using(RegistryKey
        tempKey = test9999.OpenSubKey(subKeyName))
    {
        Console.WriteLine("\nThere are {0} values for {1}.",
            tempKey.ValueCount.ToString(), tempKey.Name);
        foreach(string valueName in tempKey.GetValueNames())
        {
            Console.WriteLine("{0,-8}: {1}", valueName,
                tempKey.GetValue(valueName).ToString());
        }
    }
}

// Print the information from the Test9999 subkey.
Console::WriteLine( "There are {0} subkeys under Test9999.", test9999->SubKeyCount.ToString() );
array<String^>^subKeyNames = test9999->GetSubKeyNames();
for ( int i = 0; i < subKeyNames->Length; i++ )
{
   RegistryKey ^ tempKey = test9999->OpenSubKey( subKeyNames[ i ] );
   Console::WriteLine( "\nThere are {0} values for {1}.", tempKey->ValueCount.ToString(), tempKey->Name );
   array<String^>^valueNames = tempKey->GetValueNames();
   for ( int j = 0; j < valueNames->Length; j++ )
   {
      Console::WriteLine( "{0,-8}: {1}", valueNames[ j ], tempKey->GetValue( valueNames[ j ] )->ToString() );

   }
}
  • RegistryPermission

    表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read 表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间
GetSubKeyNames


RegistryKey ..::.ValueCount 属性

RegistryKey
.
.
::
.
ValueCount 属性
RegistryKey 类

检索项中值的计数。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ValueCount As Integer
    Get
public int ValueCount { get; }
public:
property int ValueCount {
    int get ();
}
member ValueCount : int

属性值

类型： System Int32
项中的名称/值对的数目。
异常 | 条件
SecurityException | 用户没有该项的读取权限。
ObjectDisposedException | 要操作的 RegistryKey 已关闭（无法访问关闭的项）。
UnauthorizedAccessException | 用户没有必需的注册表权限。
IOException | 发生系统错误，例如，当前项已被删除。

每个注册表项具有一个不与任何名称相关联的默认值。可使用 SetValue 方法设置这个未命名的值，并为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。如果从未设置过默认值，则不会将它计入 ValueCount 属性返回的总计数中；但是，一旦设置默认值，它将始终计入其中。 每个注册表项具有一个不与任何名称相关联的默认值。可使用 SetValue 方法设置这个未命名的值，并为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。如果从未设置过默认值，则不会将它计入 ValueCount 属性返回的总计数中；但是，一旦设置默认值，它将始终计入其中。 每个注册表项具有一个不与任何名称相关联的默认值。可使用 SetValue 方法设置这个未命名的值，并为 name 指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")。如果从未设置过默认值，则不会将它计入 ValueCount 属性返回的总计数中；但是，一旦设置默认值，它将始终计入其中。

此代码示例摘自一个为 RegistryKey 类提供的更大示例。

' Print the information from the Test9999 subkey.
Console.WriteLine("There are {0} subkeys under Test9999.", _
    test9999.SubKeyCount.ToString())
For Each subKeyName As String In test9999.GetSubKeyNames()
    Dim tempKey As RegistryKey = _
        test9999.OpenSubKey(subKeyName)
    Console.WriteLine(vbCrLf & "There are {0} values for " & _
        "{1}.", tempKey.ValueCount.ToString(), tempKey.Name)
    For Each valueName As String In tempKey.GetValueNames()
        Console.WriteLine("{0,-8}: {1}", valueName, _
            tempKey.GetValue(valueName).ToString())
    Next
Next

// Print the information from the Test9999 subkey.
Console.WriteLine("There are {0} subkeys under {1}.",
    test9999.SubKeyCount.ToString(), test9999.Name);
foreach(string subKeyName in test9999.GetSubKeyNames())
{
    using(RegistryKey
        tempKey = test9999.OpenSubKey(subKeyName))
    {
        Console.WriteLine("\nThere are {0} values for {1}.",
            tempKey.ValueCount.ToString(), tempKey.Name);
        foreach(string valueName in tempKey.GetValueNames())
        {
            Console.WriteLine("{0,-8}: {1}", valueName,
                tempKey.GetValue(valueName).ToString());
        }
    }
}

// Print the information from the Test9999 subkey.
Console::WriteLine( "There are {0} subkeys under Test9999.", test9999->SubKeyCount.ToString() );
array<String^>^subKeyNames = test9999->GetSubKeyNames();
for ( int i = 0; i < subKeyNames->Length; i++ )
{
   RegistryKey ^ tempKey = test9999->OpenSubKey( subKeyNames[ i ] );
   Console::WriteLine( "\nThere are {0} values for {1}.", tempKey->ValueCount.ToString(), tempKey->Name );
   array<String^>^valueNames = tempKey->GetValueNames();
   for ( int j = 0; j < valueNames->Length; j++ )
   {
      Console::WriteLine( "{0,-8}: {1}", valueNames[ j ], tempKey->GetValue( valueNames[ j ] )->ToString() );

   }
}
  • RegistryPermission

    表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read 表示读取指定注册表项的能力。关联的枚举：RegistryPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKey ..::.View 属性

RegistryKey
.
.
::
.
View 属性
RegistryKey 类

获取用于创建注册表项的视图。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public ReadOnly Property View As RegistryView
    Get
[ComVisibleAttribute(false)]
public RegistryView View { get; }
[ComVisibleAttribute(false)]
public:
property RegistryView View {
    RegistryView get ();
}
[<ComVisibleAttribute(false)>]
member View : RegistryView

属性值

类型： Microsoft.Win32 RegistryView
用于创建注册表项的视图。
- 或 -
如果未使用视图，则为 Default。

在 64 位版本的 Windows 上，针对 32 位和 64 位应用程序分别存储在注册表的不同部分中。32 位应用程序具有 32 位视图，而 64 位应用程序具有 64 位视图。 在 64 位版本的 Windows 上，针对 32 位和 64 位应用程序分别存储在注册表的不同部分中。32 位应用程序具有 32 位视图，而 64 位应用程序具有 64 位视图。

不要假定该视图始终对应于 RegistryKey 的实际视图。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

RegistryKey 类
RegistryKey 成员
Microsoft.Win32 命名空间


RegistryKeyPermissionCheck 枚举

RegistryKeyPermissionCheck 枚举

指定在打开注册表项并访问它们的名称/值对时是否执行安全检查。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Enumeration RegistryKeyPermissionCheck
public enum RegistryKeyPermissionCheck
public enum class RegistryKeyPermissionCheck
type RegistryKeyPermissionCheck
成员名称 | 说明
Default | 注册表项继承其父项的模式。除非用 ReadSubTree 或 ReadWriteSubTree 模式打开父项，否则会在尝试访问子项或值时执行安全检查。 注册表项继承其父项的模式。除非用 ReadSubTree 或 ReadWriteSubTree 模式打开父项，否则会在尝试访问子项或值时执行安全检查。
ReadSubTree | 在访问子项或值时，不执行安全检查。除非用 ReadSubTree 或 ReadWriteSubTree 打开父项，否则会在尝试打开当前项时执行安全检查。 在访问子项或值时，不执行安全检查。除非用 ReadSubTree 或 ReadWriteSubTree 打开父项，否则会在尝试打开当前项时执行安全检查。
ReadWriteSubTree | 在访问子项或值时，不执行安全检查。除非用 ReadWriteSubTree 打开父项，否则会在尝试打开当前项时执行安全检查。 在访问子项或值时，不执行安全检查。除非用 ReadWriteSubTree 打开父项，否则会在尝试打开当前项时执行安全检查。

当应用程序在一组子项中保存或检索大量注册表设置时，将执行许多冗余安全检查。该枚举指定何时忽略对项执行的安全检查。 当应用程序在一组子项中保存或检索大量注册表设置时，将执行许多冗余安全检查。该枚举指定何时忽略对项执行的安全检查。

下表显示根据父项和当前项的不同打开方式，会在什么时候执行安全检查。

父项的打开方式 | 当前项的打开方式 | 结果
Default | Default | 在访问当前项中的任何值或尝试访问子项时，将执行安全检查。这是 .NET Framework 1.0 和 1.1 版中的行为。 在访问当前项中的任何值或尝试访问子项时，将执行安全检查。这是 .NET Framework 1.0 和 1.1 版中的行为。
Default | ReadSubTree | 在尝试打开当前项时，将执行安全检查。
Default | ReadWriteSubTree | 在尝试打开当前项时，将执行安全检查。
ReadSubTree | Default 或 ReadSubTree | 在打开当前项或其值时，不执行安全检查。
ReadSubTree | ReadWriteSubTree | 在尝试打开当前项时，将执行安全检查。
ReadWriteSubTree | 任意 | 在打开当前项或其值时，不执行安全检查。

下面的代码示例创建包含 100 个项/值对的子项，并关闭该子项。该示例用 Default 打开子项，并记录读取所有值所用的时间。接着，该示例用 ReadSubTree打开子项，并记录读取所有值所用的时间。最后，该示例以百分比的形式计算并显示性能上的改进。 下面的代码示例创建包含 100 个项/值对的子项，并关闭该子项。该示例用 Default 打开子项，并记录读取所有值所用的时间。接着，该示例用 ReadSubTree打开子项，并记录读取所有值所用的时间。最后，该示例以百分比的形式计算并显示性能上的改进。 下面的代码示例创建包含 100 个项/值对的子项，并关闭该子项。该示例用 Default 打开子项，并记录读取所有值所用的时间。接着，该示例用 ReadSubTree打开子项，并记录读取所有值所用的时间。最后，该示例以百分比的形式计算并显示性能上的改进。 下面的代码示例创建包含 100 个项/值对的子项，并关闭该子项。该示例用 Default 打开子项，并记录读取所有值所用的时间。接着，该示例用 ReadSubTree打开子项，并记录读取所有值所用的时间。最后，该示例以百分比的形式计算并显示性能上的改进。

Imports System
Imports Microsoft.Win32
Imports System.Diagnostics

Public Class Example

    Public Shared Sub Main()

        Const LIMIT As Integer = 100
        Dim cu As RegistryKey = Registry.CurrentUser
        Const testKey As String = "RegistryKeyPermissionCheckExample"

        Console.WriteLine("Generating {0} key/value pairs.", LIMIT)
        Dim rk As RegistryKey = cu.CreateSubKey(testKey)

        For i As Integer = 0 To LIMIT
            rk.SetValue("Key" & i, i)
        Next i

        rk.Close()

        Dim s As New Stopwatch()

        ' On the default setting, security is checked every time
        ' a key/value pair is read.
        rk = cu.OpenSubKey(testKey, _
            RegistryKeyPermissionCheck.Default)

        s.Start()
        For i As Integer = 0 To LIMIT
            rk.GetValue("Key" & i, i)
        Next i
        s.Stop()
        rk.Close()
        Dim delta1 As Long = s.ElapsedTicks

        s.Reset()

        ' When the key is opened with ReadSubTree, security is
        ' not checked when the values are read.
        rk = cu.OpenSubKey(testKey, _
            RegistryKeyPermissionCheck.ReadSubTree)

        s.Start()
        For i As Integer = 0 To LIMIT
            rk.GetValue("Key" & i, i)
        Next i
        s.Stop()
        rk.Close()
        Dim delta2 As Long = s.ElapsedTicks

        Dim faster As Double = _
            CDbl(delta1 - delta2) * 100.0 / CDbl(delta1)
        Console.WriteLine("ReadSubTree is {0}% faster for {1} values.", _
            faster.ToString("0.0"), LIMIT)

        cu.DeleteSubKey(testKey)

    End Sub
End Class

' This code example produces output similar to the following:
'
'Generating 100 key/value pairs.
'ReadSubTree is 23.4% faster for 100 values.
'

using System;
using Microsoft.Win32;
using System.Diagnostics;

public class Example
{
    public static void Main()
    {
        const int LIMIT = 100;
        RegistryKey cu = Registry.CurrentUser;
        const string testKey = "RegistryKeyPermissionCheckExample";

        Console.WriteLine("Generating {0} key/value pairs.", LIMIT);
        RegistryKey rk = cu.CreateSubKey(testKey);
        for (int i = 0; i < LIMIT; i++)
        {
            rk.SetValue("Key" + i, i);
        }

        rk.Close();

        Stopwatch s = new Stopwatch();

        // On the default setting, security is checked every time
        // a key/value pair is read.
        rk = cu.OpenSubKey(testKey, RegistryKeyPermissionCheck.Default);

        s.Start();
        for (int i = 0; i < LIMIT; i++)
        {
            rk.GetValue("Key" + i, i);
        }
        s.Stop();
        rk.Close();
        long delta1 = s.ElapsedTicks;

        s.Reset();

        // When the key is opened with ReadSubTree, security is
        // not checked when the values are read.
        rk = cu.OpenSubKey(testKey, RegistryKeyPermissionCheck.ReadSubTree);

        s.Start();
        for (int i = 0; i < LIMIT; i++)
        {
            rk.GetValue("Key" + i, i);
        }
        s.Stop();
        rk.Close();
        long delta2 = s.ElapsedTicks;

        double faster = (double) (delta1 - delta2) / (double) delta1;
        Console.WriteLine("ReadSubTree is {0}% faster for {1} values.",
            (faster * 100).ToString("0.0"), LIMIT);

        cu.DeleteSubKey(testKey);
    }
}

/* This code example produces output similar to the following:

Generating 100 key/value pairs.
ReadSubTree is 23.4% faster for 100 values.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间


RegistryOptions 枚举

RegistryOptions 枚举

指定在创建注册表项时使用的选项。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<FlagsAttribute> _
Public Enumeration RegistryOptions
[FlagsAttribute]
public enum RegistryOptions
[FlagsAttribute]
public enum class RegistryOptions
[<FlagsAttribute>]
type RegistryOptions
成员名称 | 说明
None | 不可变的项。这是默认选项。 不可变的项。这是默认选项。
Volatile | 可变的键。此信息存储在内存中，并且在卸载相应的注册表配置单元时不保留此信息。 可变的键。此信息存储在内存中，并且在卸载相应的注册表配置单元时不保留此信息。

可以创建一个仅在内存中可用的注册表项，在重新启动计算机时，此项不会保留。这称为可变键。可以使用采用了 options 参数的 RegistryKey..::.CreateSubKey 方法重载来指定需要创建可变的或不可变的项。
可以创建一个仅在内存中可用的注册表项，在重新启动计算机时，此项不会保留。这称为可变键。可以使用采用了 options 参数的 RegistryKey..::.CreateSubKey 方法重载来指定需要创建可变的或不可变的项。
可以创建一个仅在内存中可用的注册表项，在重新启动计算机时，此项不会保留。这称为可变键。可以使用采用了 options 参数的 RegistryKey..::.CreateSubKey 方法重载来指定需要创建可变的或不可变的项。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间


RegistryValueKind 枚举

RegistryValueKind 枚举

指定在注册表中存储值时所用的数据类型，或标识注册表中某个值的数据类型。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Enumeration RegistryValueKind
[ComVisibleAttribute(true)]
public enum RegistryValueKind
[ComVisibleAttribute(true)]
public enum class RegistryValueKind
[<ComVisibleAttribute(true)>]
type RegistryValueKind
成员名称 | 说明
String | 一个以 NULL 结尾的字符串。此值与 Win32 API 注册表数据类型 REG_SZ 等效。 一个以 NULL 结尾的字符串。此值与 Win32 API 注册表数据类型 REG_SZ 等效。
ExpandString | 一个以 NULL 结尾的字符串，该字符串中包含对环境变量（如 %PATH%）的未展开的引用。当检索值时，该引用将会展开。此值与 Win32 API 注册表数据类型 REG_EXPAND_SZ 等效。 一个以 NULL 结尾的字符串，该字符串中包含对环境变量（如 %PATH%）的未展开的引用。当检索值时，该引用将会展开。此值与 Win32 API 注册表数据类型 REG_EXPAND_SZ 等效。
Binary | 任意格式的二进制数据。此值与 Win32 API 注册表数据类型 REG_BINARY 等效。 任意格式的二进制数据。此值与 Win32 API 注册表数据类型 REG_BINARY 等效。
DWord | 一个 32 位二进制数。此值与 Win32 API 注册表数据类型 REG_DWORD 等效。 一个 32 位二进制数。此值与 Win32 API 注册表数据类型 REG_DWORD 等效。
MultiString | 一个以 NULL 结尾的字符串数组，以两个空字符结束。此值与 Win32 API 注册表数据类型 REG_MULTI_SZ 等效。 一个以 NULL 结尾的字符串数组，以两个空字符结束。此值与 Win32 API 注册表数据类型 REG_MULTI_SZ 等效。
QWord | 一个 64 位二进制数。此值与 Win32 API 注册表数据类型 REG_QWORD 等效。 一个 64 位二进制数。此值与 Win32 API 注册表数据类型 REG_QWORD 等效。
Unknown | 一个不受支持的注册表数据类型。例如，不支持 Microsoft Win32 API 注册表数据类型 REG_RESOURCE_LIST。使用此值指定 SetValue 方法应在存储名称/值对时确定适当的注册表数据类型。 一个不受支持的注册表数据类型。例如，不支持 Microsoft Win32 API 注册表数据类型 REG_RESOURCE_LIST。使用此值指定 SetValue 方法应在存储名称/值对时确定适当的注册表数据类型。 一个不受支持的注册表数据类型。例如，不支持 Microsoft Win32 API 注册表数据类型 REG_RESOURCE_LIST。使用此值指定 SetValue 方法应在存储名称/值对时确定适当的注册表数据类型。
None | 无数据类型。

RegistryValueKind 枚举定义受支持的注册表数据类型集以及不受支持的类型 (Unknown) 使用的值。在 .NET Framework 4 版中启动时，您可以指定不使用包含 None 值的数据类型。 RegistryValueKind 枚举定义受支持的注册表数据类型集以及不受支持的类型 (Unknown) 使用的值。在 .NET Framework 4 版中启动时，您可以指定不使用包含 None 值的数据类型。

检索注册表项的值前，请使用 RegistryKey..::.GetValueKind 方法确定该值的数据类型。设置注册表项的值时，请使用 SetValue 方法显式地指定注册表数据类型。 检索注册表项的值前，请使用 RegistryKey..::.GetValueKind 方法确定该值的数据类型。设置注册表项的值时，请使用 SetValue 方法显式地指定注册表数据类型。

下面的代码示例通过使用 RegistryValueKind 指定注册表数据类型，创建一个注册表项并为其设置若干值。之后该示例使用 RegistryKey..::.GetValueKind 检查注册表数据类型，以检索和显示这些值。 下面的代码示例通过使用 RegistryValueKind 指定注册表数据类型，创建一个注册表项并为其设置若干值。之后该示例使用 RegistryKey..::.GetValueKind 检查注册表数据类型，以检索和显示这些值。

Imports System
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueKindExample", False)
        Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("RegistryValueKindExample")

        ' Create name/value pairs.
        ' This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord)

        ' The following SetValue calls have the same effect as using the
        ' SetValue overload that does not specify RegistryValueKind.
        '
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord)
        rk.SetValue("MultipleStringValue", New String() {"One", "Two", "Three"}, RegistryValueKind.MultiString)
        rk.SetValue("BinaryValue", New Byte() {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary)
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String)

        ' This overload supports setting expandable string values. Compare
        ' the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString)

        ' Display all name/value pairs stored in the test key, with each
        ' registry data type in parentheses.
        '
        Dim valueNames As String() = rk.GetValueNames()
        Dim s As String
        For Each s In  valueNames
            Dim rvk As RegistryValueKind = rk.GetValueKind(s)
            Select Case rvk
                Case RegistryValueKind.MultiString
                    Dim values As String() = CType(rk.GetValue(s), String())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To values.Length - 1
                        If i <> 0 Then Console.Write(",")
                        Console.Write(" ""{0}""", values(i))
                    Next i
                    Console.WriteLine()

                Case RegistryValueKind.Binary
                    Dim bytes As Byte() = CType(rk.GetValue(s), Byte())
                    Console.Write(vbCrLf & " {0} ({1}) =", s, rvk)
                    For i As Integer = 0 To bytes.Length - 1
                        ' Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes(i))
                    Next i
                    Console.WriteLine()

                Case Else
                    Console.WriteLine(vbCrLf & " {0} ({1}) = {2}", s, rvk, rk.GetValue(s))
            End Select
        Next s
    End Sub 'Main
End Class 'Example

'
'This code example produces the following output (some output is omitted):
'
' QuadWordValue (QWord) = 42
'
' DWordValue (DWord) = 42
'
' MultipleStringValue (MultiString) = "One", "Two", "Three"
'
' BinaryValue (Binary) = 0A 2B 2C 2D 0E FF
'
' StringValue (String) = The path is %PATH%
'
' ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
' [***The remainder of this output is omitted.***]

using System;
using Microsoft.Win32;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueKindExample", false);
        RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryValueKindExample");

        // Create name/value pairs.

        // This overload supports QWord (long) values.
        rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord);

        // The following SetValue calls have the same effect as using the
        // SetValue overload that does not specify RegistryValueKind.
        //
        rk.SetValue("DWordValue", 42, RegistryValueKind.DWord);
        rk.SetValue("MultipleStringValue", new string[] {"One", "Two", "Three"}, RegistryValueKind.MultiString);
        rk.SetValue("BinaryValue", new byte[] {10, 43, 44, 45, 14, 255}, RegistryValueKind.Binary);
        rk.SetValue("StringValue", "The path is %PATH%", RegistryValueKind.String);

        // This overload supports setting expandable string values. Compare
        // the output from this value with the previous string value.
        rk.SetValue("ExpandedStringValue", "The path is %PATH%", RegistryValueKind.ExpandString);

        // Display all name/value pairs stored in the test key, with each
        // registry data type in parentheses.
        //
        string[] valueNames = rk.GetValueNames();
        foreach (string s in valueNames)
        {
            RegistryValueKind rvk = rk.GetValueKind(s);
            switch (rvk)
            {
                case RegistryValueKind.MultiString :
                    string[] values = (string[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < values.Length; i++)
                    {
                        if (i != 0) Console.Write(",");
                        Console.Write(" \"{0}\"", values[i]);
                    }
                    Console.WriteLine();
                    break;

                case RegistryValueKind.Binary :
                    byte[] bytes = (byte[]) rk.GetValue(s);
                    Console.Write("\r\n {0} ({1}) =", s, rvk);
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        // Display each byte as two hexadecimal digits.
                        Console.Write(" {0:X2}", bytes[i]);
                    }
                    Console.WriteLine();
                    break;

                default :
                    Console.WriteLine("\r\n {0} ({1}) = {2}", s, rvk, rk.GetValue(s));
                    break;
            }
        }
    }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/

using namespace System;
using namespace Microsoft::Win32;
int main()
{

   // Delete and recreate the test key.
   Registry::CurrentUser->DeleteSubKey( "RegistryValueKindExample", false );
   RegistryKey ^ rk = Registry::CurrentUser->CreateSubKey( "RegistryValueKindExample" );

   // Create name/value pairs.
   // This overload supports QWord (long) values.
   rk->SetValue( "QuadWordValue", 42, RegistryValueKind::QWord );

   // The following SetValue calls have the same effect as using the
   // SetValue overload that does not specify RegistryValueKind.
   //
   rk->SetValue( "DWordValue", 42, RegistryValueKind::DWord );
   rk->SetValue( "MultipleStringValue", gcnew array<String^>{
      "One","Two","Three"
   }, RegistryValueKind::MultiString );
   rk->SetValue( "BinaryValue", gcnew array<Byte>{
      10,43,44,45,14,255
   }, RegistryValueKind::Binary );
   rk->SetValue( "StringValue", "The path is %PATH%", RegistryValueKind::String );

   // This overload supports setting expandable string values. Compare
   // the output from this value with the previous string value.
   rk->SetValue( "ExpandedStringValue", "The path is %PATH%", RegistryValueKind::ExpandString );

   // Display all the name/value pairs stored in the test key, with the
   // registry data type in parentheses.
   //
   array<String^>^valueNames = rk->GetValueNames();
   System::Collections::IEnumerator^ myEnum = valueNames->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      RegistryValueKind rvk = rk->GetValueKind( s );
      switch ( rvk )
      {
         case RegistryValueKind::MultiString:
         {
            array<String^>^values = (array<String^>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < values->Length; i++ )
            {
               if (i != 0) Console::Write(",");
               Console::Write( " \"{0}\"", values[ i ] );

            }
            Console::WriteLine();
            break;
         }
         case RegistryValueKind::Binary:
         {
            array<Byte>^bytes = (array<Byte>^)rk->GetValue( s );
            Console::Write( "\r\n {0} ({1}) =", s, rvk );
            for ( int i = 0; i < bytes->Length; i++ )
            {

               // Display each byte as two hexadecimal digits.
               Console::Write( " {0:X2}", bytes[ i ] );

            }
            Console::WriteLine();
            break;
         }
         default:
            Console::WriteLine( "\r\n {0} ({1}) = {2}", s, rvk, rk->GetValue( s ) );
            break;
      }
   }
}
/*

This code example produces the following output:
 QuadWordValue (QWord) = 42

 DWordValue (DWord) = 42

 MultipleStringValue (MultiString) =, "One", "Two", "Three"

 BinaryValue (Binary) = 0A 2B 2C 2D 0E FF

 StringValue (String) = The path is %PATH%

 ExpandedStringValue (ExpandString) = The path is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
 [***The remainder of this output is omitted.***]

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
GetValueKind
SetValue


RegistryValueOptions 枚举

RegistryValueOptions 枚举

指定从注册表项检索名称/值对时的可选行为。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
<FlagsAttribute> _
Public Enumeration RegistryValueOptions
[FlagsAttribute]
public enum RegistryValueOptions
[FlagsAttribute]
public enum class RegistryValueOptions
[<FlagsAttribute>]
type RegistryValueOptions
成员名称 | 说明
None | 未指定可选行为。
DoNotExpandEnvironmentNames | 检索类型为 RegistryValueKind..::.ExpandString 的值，而不扩展它的嵌入式环境变量。

在 RegistryKey..::.GetValue(String, Object, RegistryValueOptions) 方法重载中使用 DoNotExpandEnvironmentNames 标志。

下面的代码示例创建一个测试项，添加带有嵌入式环境变量的值，然后在扩展和非扩展两种形式下检索该值。

Imports System
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueOptionsExample", False)
        Dim rk As RegistryKey = _
            Registry.CurrentUser.CreateSubKey("RegistryValueOptionsExample")

        ' Add a value that contains an environment variable.
        rk.SetValue("ExpandValue", "The path is %PATH%", _
            RegistryValueKind.ExpandString)

        ' Retrieve the value, first without expanding the environment
        ' variable and then expanding it.
        Console.WriteLine("Unexpanded: ""{0}""", _
            rk.GetValue("ExpandValue", "No Value", _
            RegistryValueOptions.DoNotExpandEnvironmentNames))
        Console.WriteLine("Expanded: ""{0}""", rk.GetValue("ExpandValue"))
    End Sub 'Main
End Class 'Example

using System;
using Microsoft.Win32;
using Microsoft.VisualBasic;

public class Example
{
    public static void Main()
    {
        // Delete and recreate the test key.
        Registry.CurrentUser.DeleteSubKey("RegistryValueOptionsExample", false);
        RegistryKey rk =
            Registry.CurrentUser.CreateSubKey("RegistryValueOptionsExample");

        // Add a value that contains an environment variable.
        rk.SetValue("ExpandValue", "The path is %PATH%", RegistryValueKind.ExpandString);

        // Retrieve the value, first without expanding the environment
        // variable and then expanding it.
        Console.WriteLine("Unexpanded: \"{0}\"",
            rk.GetValue("ExpandValue", "No Value",
            RegistryValueOptions.DoNotExpandEnvironmentNames));
        Console.WriteLine("Expanded: \"{0}\"", rk.GetValue("ExpandValue"));
    } //Main
} //Example

#using <Microsoft.VisualBasic.dll>

using namespace System;
using namespace Microsoft::Win32;
using namespace Microsoft::VisualBasic;

int main()
{
    // Delete and recreate the test key.
    Registry::CurrentUser->DeleteSubKey( L"RegistryValueOptionsExample", false );
    RegistryKey ^ rk =
        Registry::CurrentUser->CreateSubKey( L"RegistryValueOptionsExample" );

    // Add a value that contains an environment variable.
    rk->SetValue( L"ExpandValue", L"The path is %PATH%",
        RegistryValueKind::ExpandString );

    // Retrieve the value, first without expanding the environment
    // variable and then expanding it.
    Console::WriteLine( L"Unexpanded: \"{0}\"",
                        rk->GetValue( L"ExpandValue",
                        L"No Value",
                        RegistryValueOptions::DoNotExpandEnvironmentNames ) );
    Console::WriteLine( L"Expanded: \"{0}\"", rk->GetValue( L"ExpandValue" ) );

    return 0;
} //Main

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间


RegistryView 枚举

RegistryView 枚举

指定要在 64 位操作系统上针对的注册表视图。

命名空间： Microsoft.Win32
程序集： mscorlib（在 mscorlib.dll 中）
Public Enumeration RegistryView
public enum RegistryView
public enum class RegistryView
type RegistryView
成员名称 | 说明
Default | 默认视图。
Registry64 | 64 位视图。
Registry32 | 32 位视图。

在64 位版本的 Windows 上，针对 32 位和 64 位应用程序分别存储在注册表的不同部分中。32 位应用程序具有 32 位视图，而 64 位应用程序具有 64 位视图。 在64 位版本的 Windows 上，针对 32 位和 64 位应用程序分别存储在注册表的不同部分中。32 位应用程序具有 32 位视图，而 64 位应用程序具有 64 位视图。

在使用 OpenBaseKey 和 OpenRemoteBaseKey(RegistryHive, String, RegistryView) 方法以及 RegistryKey 对象上的 FromHandle 属性时，可以指定注册表视图。

如果在 32 位操作系统上请求 64 位视图，返回的键都将在 32 位视图中。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间


SaveFileDialog 类

SaveFileDialog 类
成员

表示一个通用对话框，用户可以使用此对话框来指定一个要将文件另存为的文件名。在部分信任情况下执行的应用程序不能使用 SaveFileDialog。 表示一个通用对话框，用户可以使用此对话框来指定一个要将文件另存为的文件名。在部分信任情况下执行的应用程序不能使用 SaveFileDialog。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public NotInheritable Class SaveFileDialog _
    Inherits FileDialog
public sealed class SaveFileDialog : FileDialog
public ref class SaveFileDialog sealed : public FileDialog
[<SealedAttribute>]
type SaveFileDialog =
    class
        inherit FileDialog
    end
<SaveFileDialog .../>

Microsoft.Win32 Microsoft.Win32..::.SaveFileDialogSaveFileDialog
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

SaveFileDialog 成员
Microsoft.Win32 命名空间


SaveFileDialog 成员

SaveFileDialog 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SaveFileDialog 类

表示一个通用对话框，用户可以使用此对话框来指定一个要将文件另存为的文件名。在部分信任情况下执行的应用程序不能使用 SaveFileDialog。 表示一个通用对话框，用户可以使用此对话框来指定一个要将文件另存为的文件名。在部分信任情况下执行的应用程序不能使用 SaveFileDialog。

SaveFileDialog 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SaveFileDialog 类
Microsoft.Win32 命名空间


SaveFileDialog 构造函数

SaveFileDialog 构造函数
SaveFileDialog 类

初始化 SaveFileDialog 类的一个新实例。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Sub New
public SaveFileDialog()
public:
SaveFileDialog()
new : unit -> SaveFileDialog

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

SaveFileDialog 类
SaveFileDialog 成员
Microsoft.Win32 命名空间


SaveFileDialog 方法

SaveFileDialog 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SaveFileDialog 类

SaveFileDialog 类型公开以下成员。

名称 说明
页首

参考

SaveFileDialog 类
Microsoft.Win32 命名空间


SaveFileDialog ..::.OpenFile 方法

SaveFileDialog
.
.
::
.
OpenFile 方法
SaveFileDialog 类

为用户使用 SaveFileDialog 选定的文件名创建读/写文件流。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Function OpenFile As Stream
public Stream OpenFile()
public:
Stream^ OpenFile()
member OpenFile : unit -> Stream

返回值

类型： System.IO Stream
一个新的 Stream，其中包含选定的文件。
异常 | 条件
InvalidOperationException | 在对话框中未选定任何文件。

返回的文件流以读/写访问权限（Create 和 ReadWrite）打开。

  • UIPermission

    用于设置此对话框选项。关联枚举：AllWindows 用于设置此对话框选项。关联枚举：AllWindows

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

SaveFileDialog 类
SaveFileDialog 成员
Microsoft.Win32 命名空间
SafeFileName

其他资源

Safe File Upload from an XBAP Sample


SaveFileDialog ..::.Reset 方法

SaveFileDialog
.
.
::
.
Reset 方法
SaveFileDialog 类

将所有 SaveFileDialog 属性重置为其默认值。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
Public Overrides Sub Reset
public override void Reset()
public:
virtual void Reset() override
abstract Reset : unit -> unit
override Reset : unit -> unit

对实现者的说明

此类是密封类，因此不能重写此方法。

  • UIPermission

    用于设置此对话框选项。关联枚举：AllWindows 用于设置此对话框选项。关联枚举：AllWindows

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

SaveFileDialog 类
SaveFileDialog 成员
Microsoft.Win32 命名空间


SaveFileDialog ..::.ShowDialog 方法

SaveFileDialog
.
.
::
.
ShowDialog 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SaveFileDialog 类

显示通用对话框。

名称 说明
页首

在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。由于 RunDialog 需要所有者窗口，因此 ShowDialog 会尝试按照以下的优先级顺序分配一个窗口： 在调用 RunDialog 之前，ShowDialog 为所有通用对话框执行初始化任务。由于 RunDialog 需要所有者窗口，因此 ShowDialog 会尝试按照以下的优先级顺序分配一个窗口：

  • 当前应用程序的活动窗口。

  • 当前应用程序的停放窗口。

  • 内部生成的隐藏窗口。

  • UIPermission

    用于执行此方法，而不引发异常。关联枚举：AllWindows 用于执行此方法，而不引发异常。关联枚举：AllWindows

参考

SaveFileDialog 类
SaveFileDialog 成员
Microsoft.Win32 命名空间


SaveFileDialog 属性

SaveFileDialog 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SaveFileDialog 类

SaveFileDialog 类型公开以下成员。

名称 说明
页首

参考

SaveFileDialog 类
Microsoft.Win32 命名空间


SaveFileDialog ..::.CreatePrompt 属性

SaveFileDialog
.
.
::
.
CreatePrompt 属性
SaveFileDialog 类

获取或设置一个值，该值指示如果用户指定一个不存在的文件，SaveFileDialog 是否提示用户以允许创建文件。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property CreatePrompt As Boolean
    Get
    Set
public bool CreatePrompt { get; set; }
public:
property bool CreatePrompt {
    bool get ();
    void set (bool value);
}
member CreatePrompt : bool with get, set

<object CreatePrompt="bool" .../>

属性值

类型： System Boolean
如果对话框应在保存到一个以前不存在的文件名之前进行提示，则为 true，否则为 false。默认为 false。 如果对话框应在保存到一个以前不存在的文件名之前进行提示，则为 true，否则为 false。默认为 false。
  • UIPermission

    用于设置此对话框选项。关联枚举：AllWindows 用于设置此对话框选项。关联枚举：AllWindows

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

SaveFileDialog 类
SaveFileDialog 成员
Microsoft.Win32 命名空间


SaveFileDialog ..::.OverwritePrompt 属性

SaveFileDialog
.
.
::
.
OverwritePrompt 属性
SaveFileDialog 类

获取或设置一个值，该值指示如果用户指定的文件名已存在，SaveFileDialog 是否显示警告。

命名空间： Microsoft.Win32
程序集： PresentationFramework（在 PresentationFramework.dll 中）
用于 XAML 的 XMLNS：未映射到 xmlns。
Public Property OverwritePrompt As Boolean
    Get
    Set
public bool OverwritePrompt { get; set; }
public:
property bool OverwritePrompt {
    bool get ();
    void set (bool value);
}
member OverwritePrompt : bool with get, set

<object OverwritePrompt="bool" .../>

属性值

类型： System Boolean
如果对话框应在用一个以前已有的文件名进行保存之前进行提示，则为 true，否则为 false。默认值为 true。 如果对话框应在用一个以前已有的文件名进行保存之前进行提示，则为 true，否则为 false。默认值为 true。
  • UIPermission

    用于设置此对话框选项。关联枚举：AllWindows 用于设置此对话框选项。关联枚举：AllWindows

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0

.NET Framework Client Profile

受以下版本支持：4

参考

SaveFileDialog 类
SaveFileDialog 成员
Microsoft.Win32 命名空间


SaveFileDialog 事件

SaveFileDialog 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SaveFileDialog 类

SaveFileDialog 类型公开以下成员。

名称 说明
页首

参考

SaveFileDialog 类
Microsoft.Win32 命名空间


SessionEndedEventArgs 类

SessionEndedEventArgs 类
成员

为 SessionEnded 事件提供数据。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name := "FullTrust")> _
Public Class SessionEndedEventArgs _
    Inherits EventArgs
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public class SessionEndedEventArgs : EventArgs
[PermissionSetAttribute(SecurityAction::LinkDemand, Name = L"FullTrust")]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
[PermissionSetAttribute(SecurityAction::InheritanceDemand, Name = L"FullTrust")]
public ref class SessionEndedEventArgs : public EventArgs
[<PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
[<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")>]
type SessionEndedEventArgs =
    class
        inherit EventArgs
    end

当用户注销或关闭系统时引发 SessionEnded 事件。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Microsoft.Win32 Microsoft.Win32..::.SessionEndedEventArgsSessionEndedEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionEndedEventArgs 成员
Microsoft.Win32 命名空间
SystemEvents
SessionEnded


SessionEndedEventArgs 成员

SessionEndedEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SessionEndedEventArgs 类

为 SessionEnded 事件提供数据。

SessionEndedEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SessionEndedEventArgs 类
Microsoft.Win32 命名空间


SessionEndedEventArgs 构造函数

SessionEndedEventArgs 构造函数
SessionEndedEventArgs 类

初始化 SessionEndedEventArgs 类的新实例。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Sub New ( _
    reason As SessionEndReasons _
)
public SessionEndedEventArgs(
    SessionEndReasons reason
)
public:
SessionEndedEventArgs(
    SessionEndReasons reason
)
new :
        reason:SessionEndReasons -> SessionEndedEventArgs

参数

reason
类型： Microsoft.Win32 SessionEndReasons
指示会话结束方式的 SessionEndReasons 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionEndedEventArgs 类
SessionEndedEventArgs 成员
Microsoft.Win32 命名空间
SessionEndReasons


SessionEndedEventArgs 方法

SessionEndedEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SessionEndedEventArgs 类

SessionEndedEventArgs 类型公开以下成员。

名称 说明
页首

参考

SessionEndedEventArgs 类
Microsoft.Win32 命名空间


SessionEndedEventArgs 属性

SessionEndedEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SessionEndedEventArgs 类

SessionEndedEventArgs 类型公开以下成员。

名称 说明
页首

参考

SessionEndedEventArgs 类
Microsoft.Win32 命名空间


SessionEndedEventArgs ..::.Reason 属性

SessionEndedEventArgs
.
.
::
.
Reason 属性
SessionEndedEventArgs 类

获取指示会话结束方式的标识符。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public ReadOnly Property Reason As SessionEndReasons
    Get
public SessionEndReasons Reason { get; }
public:
property SessionEndReasons Reason {
    SessionEndReasons get ();
}
member Reason : SessionEndReasons

属性值

类型： Microsoft.Win32 SessionEndReasons
指示会话结束方式的 SessionEndReasons 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionEndedEventArgs 类
SessionEndedEventArgs 成员
Microsoft.Win32 命名空间
SessionEndReasons


SessionEndedEventHandler 委托

SessionEndedEventHandler 委托

表示将处理 SessionEnded 事件的方法。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Delegate Sub SessionEndedEventHandler ( _
    sender As Object, _
    e As SessionEndedEventArgs _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public delegate void SessionEndedEventHandler(
    Object sender,
    SessionEndedEventArgs e
)
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public delegate void SessionEndedEventHandler(
    Object^ sender,
    SessionEndedEventArgs^ e
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type SessionEndedEventHandler =
    delegate of
        sender:Object *
        e:SessionEndedEventArgs -> unit

参数

sender
类型： System Object
事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
e
类型： Microsoft.Win32 SessionEndedEventArgs
包含事件数据的 SessionEndedEventArgs。

当创建 SessionEndedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 SessionEndedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 SessionEndedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 SessionEndedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
SessionEndedEventArgs
SessionEnded
SystemEvents


SessionEndingEventArgs 类

SessionEndingEventArgs 类
成员

为 SessionEnding 事件提供数据。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name := "FullTrust")> _
<PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Class SessionEndingEventArgs _
    Inherits EventArgs
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class SessionEndingEventArgs : EventArgs
[PermissionSetAttribute(SecurityAction::InheritanceDemand, Name = L"FullTrust")]
[PermissionSetAttribute(SecurityAction::LinkDemand, Name = L"FullTrust")]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public ref class SessionEndingEventArgs : public EventArgs
[<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")>]
[<PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type SessionEndingEventArgs =
    class
        inherit EventArgs
    end

当用户尝试注销或关闭系统时引发 SessionEnding 事件。

有时，可以取消这个 SessionEnding 事件。将 SessionEndingEventArgs 的 Cancel 属性设置为 false 将请求会话继续而不是结束。此请求并不保证会话不会结束。 有时，可以取消这个 SessionEnding 事件。将 SessionEndingEventArgs 的 Cancel 属性设置为 false 将请求会话继续而不是结束。此请求并不保证会话不会结束。 有时，可以取消这个 SessionEnding 事件。将 SessionEndingEventArgs 的 Cancel 属性设置为 false 将请求会话继续而不是结束。此请求并不保证会话不会结束。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Microsoft.Win32 Microsoft.Win32..::.SessionEndingEventArgsSessionEndingEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionEndingEventArgs 成员
Microsoft.Win32 命名空间
SessionEndingEventArgs
SystemEvents
SessionEnding


SessionEndingEventArgs 成员

SessionEndingEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SessionEndingEventArgs 类

为 SessionEnding 事件提供数据。

SessionEndingEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SessionEndingEventArgs 类
Microsoft.Win32 命名空间


SessionEndingEventArgs 构造函数

SessionEndingEventArgs 构造函数
SessionEndingEventArgs 类

使用指定的值（该值指明正在发生的会话关闭事件的类型）初始化 SessionEndingEventArgs 类的新实例。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Sub New ( _
    reason As SessionEndReasons _
)
public SessionEndingEventArgs(
    SessionEndReasons reason
)
public:
SessionEndingEventArgs(
    SessionEndReasons reason
)
new :
        reason:SessionEndReasons -> SessionEndingEventArgs

参数

reason
类型： Microsoft.Win32 SessionEndReasons
指定会话结束方式的 SessionEndReasons 之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionEndingEventArgs 类
SessionEndingEventArgs 成员
Microsoft.Win32 命名空间


SessionEndingEventArgs 方法

SessionEndingEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SessionEndingEventArgs 类

SessionEndingEventArgs 类型公开以下成员。

名称 说明
页首

参考

SessionEndingEventArgs 类
Microsoft.Win32 命名空间


SessionEndingEventArgs 属性

SessionEndingEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SessionEndingEventArgs 类

SessionEndingEventArgs 类型公开以下成员。

名称 说明
页首

参考

SessionEndingEventArgs 类
Microsoft.Win32 命名空间


SessionEndingEventArgs ..::.Cancel 属性

SessionEndingEventArgs
.
.
::
.
Cancel 属性
SessionEndingEventArgs 类

获取或设置一个值，该值指示是否取消用户请求以结束会话。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Property Cancel As Boolean
    Get
    Set
public bool Cancel { get; set; }
public:
property bool Cancel {
    bool get ();
    void set (bool value);
}
member Cancel : bool with get, set

属性值

类型： System Boolean
true 取消用户请求以结束会话；否则为 false。

设置为 true 时，此属性请求会话继续运行。它不保证会话不会结束。 设置为 true 时，此属性请求会话继续运行。它不保证会话不会结束。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionEndingEventArgs 类
SessionEndingEventArgs 成员
Microsoft.Win32 命名空间


SessionEndingEventArgs ..::.Reason 属性

SessionEndingEventArgs
.
.
::
.
Reason 属性
SessionEndingEventArgs 类

获取会话结束的原因。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public ReadOnly Property Reason As SessionEndReasons
    Get
public SessionEndReasons Reason { get; }
public:
property SessionEndReasons Reason {
    SessionEndReasons get ();
}
member Reason : SessionEndReasons

属性值

类型： Microsoft.Win32 SessionEndReasons
指定会话结束方式的 SessionEndReasons 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionEndingEventArgs 类
SessionEndingEventArgs 成员
Microsoft.Win32 命名空间


SessionEndingEventHandler 委托

SessionEndingEventHandler 委托

表示将处理来自操作系统的 SessionEnding 事件的方法。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Delegate Sub SessionEndingEventHandler ( _
    sender As Object, _
    e As SessionEndingEventArgs _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public delegate void SessionEndingEventHandler(
    Object sender,
    SessionEndingEventArgs e
)
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public delegate void SessionEndingEventHandler(
    Object^ sender,
    SessionEndingEventArgs^ e
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type SessionEndingEventHandler =
    delegate of
        sender:Object *
        e:SessionEndingEventArgs -> unit

参数

sender
类型： System Object
事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
e
类型： Microsoft.Win32 SessionEndingEventArgs
包含事件数据的 SessionEndingEventArgs。

当创建 SessionEndingEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 SessionEndingEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 SessionEndingEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 SessionEndingEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
SessionEndingEventArgs
SessionEnding
SystemEvents


SessionEndReasons 枚举

SessionEndReasons 枚举

定义表示当前登录会话的结束方式的标识符。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Enumeration SessionEndReasons
public enum SessionEndReasons
public enum class SessionEndReasons
type SessionEndReasons
成员名称 | 说明
Logoff | 用户正在注销并结束当前用户会话。操作系统继续运行。 用户正在注销并结束当前用户会话。操作系统继续运行。
SystemShutdown | 操作系统正在关闭。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
SystemEvents


SessionSwitchEventArgs 类

SessionSwitchEventArgs 类
成员

为 SessionSwitch 事件提供数据。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name := "FullTrust")> _
Public Class SessionSwitchEventArgs _
    Inherits EventArgs
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public class SessionSwitchEventArgs : EventArgs
[PermissionSetAttribute(SecurityAction::LinkDemand, Name = L"FullTrust")]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
[PermissionSetAttribute(SecurityAction::InheritanceDemand, Name = L"FullTrust")]
public ref class SessionSwitchEventArgs : public EventArgs
[<PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
[<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")>]
type SessionSwitchEventArgs =
    class
        inherit EventArgs
    end

当前用户更改时引发 SessionSwitch 事件。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Microsoft.Win32 Microsoft.Win32..::.SessionSwitchEventArgsSessionSwitchEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionSwitchEventArgs 成员
Microsoft.Win32 命名空间
SessionSwitchEventHandler
SessionSwitch
SystemEvents


SessionSwitchEventArgs 成员

SessionSwitchEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SessionSwitchEventArgs 类

为 SessionSwitch 事件提供数据。

SessionSwitchEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SessionSwitchEventArgs 类
Microsoft.Win32 命名空间


SessionSwitchEventArgs 构造函数

SessionSwitchEventArgs 构造函数
SessionSwitchEventArgs 类

使用指定的会话更改事件类型标识符初始化 SessionSwitchEventArgs 类的新实例。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Sub New ( _
    reason As SessionSwitchReason _
)
public SessionSwitchEventArgs(
    SessionSwitchReason reason
)
public:
SessionSwitchEventArgs(
    SessionSwitchReason reason
)
new :
        reason:SessionSwitchReason -> SessionSwitchEventArgs

参数

reason
类型： Microsoft.Win32 SessionSwitchReason
SessionSwitchReason，它指示会话更改事件的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionSwitchEventArgs 类
SessionSwitchEventArgs 成员
Microsoft.Win32 命名空间
SessionSwitchReason


SessionSwitchEventArgs 方法

SessionSwitchEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SessionSwitchEventArgs 类

SessionSwitchEventArgs 类型公开以下成员。

名称 说明
页首

参考

SessionSwitchEventArgs 类
Microsoft.Win32 命名空间


SessionSwitchEventArgs 属性

SessionSwitchEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SessionSwitchEventArgs 类

SessionSwitchEventArgs 类型公开以下成员。

名称 说明
页首

参考

SessionSwitchEventArgs 类
Microsoft.Win32 命名空间


SessionSwitchEventArgs ..::.Reason 属性

SessionSwitchEventArgs
.
.
::
.
Reason 属性
SessionSwitchEventArgs 类

获取指示会话更改事件类型的标识符。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public ReadOnly Property Reason As SessionSwitchReason
    Get
public SessionSwitchReason Reason { get; }
public:
property SessionSwitchReason Reason {
    SessionSwitchReason get ();
}
member Reason : SessionSwitchReason

属性值

类型： Microsoft.Win32 SessionSwitchReason
指示会话更改事件类型的 SessionSwitchReason。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

SessionSwitchEventArgs 类
SessionSwitchEventArgs 成员
Microsoft.Win32 命名空间
SessionSwitchReason


SessionSwitchEventHandler 委托

SessionSwitchEventHandler 委托

表示将处理 SessionSwitch 事件的方法。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Delegate Sub SessionSwitchEventHandler ( _
    sender As Object, _
    e As SessionSwitchEventArgs _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public delegate void SessionSwitchEventHandler(
    Object sender,
    SessionSwitchEventArgs e
)
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public delegate void SessionSwitchEventHandler(
    Object^ sender,
    SessionSwitchEventArgs^ e
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type SessionSwitchEventHandler =
    delegate of
        sender:Object *
        e:SessionSwitchEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： Microsoft.Win32 SessionSwitchEventArgs
一个指明会话更改事件类型的 SessionSwitchEventArgs。

当创建 SessionSwitchEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 SessionSwitchEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 SessionSwitchEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 SessionSwitchEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
SessionSwitchEventArgs
SessionSwitch
SystemEvents


SessionSwitchReason 枚举

SessionSwitchReason 枚举

定义用于表示会话切换事件类型的标识符。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Enumeration SessionSwitchReason
public enum SessionSwitchReason
public enum class SessionSwitchReason
type SessionSwitchReason
成员名称 | 说明
ConsoleConnect | 会话已与控制台建立连接。
ConsoleDisconnect | 会话已与控制台断开连接。
RemoteConnect | 会话已与远程连接建立连接。
RemoteDisconnect | 会话已与远程连接断开连接。
SessionLogon | 用户已登录到会话。
SessionLogoff | 用户已从会话注销。
SessionLock | 会话已被锁定。
SessionUnlock | 会话已被解除锁定。
SessionRemoteControl | 会话已将其状态更改为远程控制状态或从远程控制状态更改为当前的状态。

SessionSwitchEventArgs 类使用 SessionSwitchReason 类表示会话切换事件的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
SessionSwitchEventArgs
SessionSwitchEventHandler
SessionSwitch
SystemEvents


SystemEvents 类

SystemEvents 类
成员

提供对系统事件通知的访问。此类不能被继承。 提供对系统事件通知的访问。此类不能被继承。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public NotInheritable Class SystemEvents
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class SystemEvents
[PermissionSetAttribute(SecurityAction::LinkDemand, Name = L"FullTrust")]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public ref class SystemEvents sealed
[<SealedAttribute>]
[<PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type SystemEvents =  class end

SystemEvents 类提供对特定类型的系统事件进行响应的能力。

引发系统事件时，会使用监视系统事件的线程调用附加到该事件的所有委托。因此，应使来自事件处理程序的所有调用都是线程安全的。如果需要调用未公开为此类成员的系统事件，可以使用 InvokeOnEventsThread 方法。 引发系统事件时，会使用监视系统事件的线程调用附加到该事件的所有委托。因此，应使来自事件处理程序的所有调用都是线程安全的。如果需要调用未公开为此类成员的系统事件，可以使用 InvokeOnEventsThread 方法。 引发系统事件时，会使用监视系统事件的线程调用附加到该事件的所有委托。因此，应使来自事件处理程序的所有调用都是线程安全的。如果需要调用未公开为此类成员的系统事件，可以使用 InvokeOnEventsThread 方法。

警告说明 警告

不要对引发系统事件处理程序的线程执行耗时的处理，因为这可能会妨碍其他应用程序的工作。
说明 说明

Windows Vista 上可能不会引发某些系统事件。请确保应用程序在 Windows Vista 上按预期工作。 Windows Vista 上可能不会引发某些系统事件。请确保应用程序在 Windows Vista 上按预期工作。
说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

本部分包含两个示例。第一个示例演示如何在普通应用程序中使用系统事件，第二个示例演示如何在 Windows 服务中使用系统事件。 本部分包含两个示例。第一个示例演示如何在普通应用程序中使用系统事件，第二个示例演示如何在 Windows 服务中使用系统事件。

示例 1

下面的代码示例注册对某些系统事件的关注，然后等待这些事件中的任意一个发生。如果用户更改了显示分辨率，就会发生输出显示。 下面的代码示例注册对某些系统事件的关注，然后等待这些事件中的任意一个发生。如果用户更改了显示分辨率，就会发生输出显示。

Imports System
Imports Microsoft.Win32
Imports System.Windows.Forms

Friend Class Form1
    Inherits System.Windows.Forms.Form

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Set the SystemEvents class to receive event notification
        'when a user preference changes, the palette changes, or
        'when display settings change.
        AddHandler SystemEvents.UserPreferenceChanging, _
        AddressOf SystemEvents_UserPreferenceChanging

        AddHandler SystemEvents.PaletteChanged, _
        AddressOf SystemEvents_PaletteChanged

        AddHandler SystemEvents.DisplaySettingsChanged, _
        AddressOf SystemEvents_DisplaySettingsChanged

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If (components IsNot Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    Private components As System.ComponentModel.IContainer

    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

        Me.SuspendLayout()

        '
        'Form1
        '
        Me.ClientSize = New System.Drawing.Size(648, 398)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)

    End Sub

    ' This method is called when a user preference changes.
    Private Sub SystemEvents_UserPreferenceChanging( _
    ByVal sender As Object, _
    ByVal e As UserPreferenceChangingEventArgs)

        MessageBox.Show("UserPreferenceChanging: " & _
        e.Category.ToString())
    End Sub

    ' This method is called when the palette changes.
    Private Sub SystemEvents_PaletteChanged( _
    ByVal sender As Object, _
    ByVal e As EventArgs)

        MessageBox.Show("PaletteChanged")

    End Sub

    ' This method is called when the display settings change.
    Private Sub SystemEvents_DisplaySettingsChanged( _
    ByVal sender As Object, _
    ByVal e As EventArgs)

        MessageBox.Show("The display settings changed.")

    End Sub

End Class

using System;
using Microsoft.Win32;

public sealed class App
{
    static void Main()
    {
        // Set the SystemEvents class to receive event notification when a user
        // preference changes, the palette changes, or when display settings change.
        SystemEvents.UserPreferenceChanging += new
            UserPreferenceChangingEventHandler(SystemEvents_UserPreferenceChanging);
        SystemEvents.PaletteChanged += new
            EventHandler(SystemEvents_PaletteChanged);
        SystemEvents.DisplaySettingsChanged += new
            EventHandler(SystemEvents_DisplaySettingsChanged);

        // For demonstration purposes, this application sits idle waiting for events.
        Console.WriteLine("This application is waiting for system events.");
        Console.WriteLine("Press <Enter> to terminate this application.");
        Console.ReadLine();
    }

    // This method is called when a user preference changes.
    static void SystemEvents_UserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e)
    {
        Console.WriteLine("The user preference is changing. Category={0}", e.Category);
    }

    // This method is called when the palette changes.
    static void SystemEvents_PaletteChanged(object sender, EventArgs e)
    {
        Console.WriteLine("The palette changed.");
    }

    // This method is called when the display settings change.
    static void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
    {
        Console.WriteLine("The display settings changed.");
    }
}

// This code produces the following output.
//
//  This app is waiting for system events.
//  Press <Enter> to terminate this application.
//  Display Settings changed.
//  User preference is changing. Category=General

#using <System.dll>

using namespace System;
using namespace Microsoft::Win32;

// This method is called when a user preference changes.
void SystemEvents_UserPreferenceChanging(Object^ sender,
     UserPreferenceChangingEventArgs^ e)
 {
     Console::WriteLine("The user preference is changing. Category={0}",
         e->Category);
 }

// This method is called when the palette changes.
void SystemEvents_PaletteChanged(Object^ sender, EventArgs^ e)
{
    Console::WriteLine("The palette changed.");
}

// This method is called when the display settings change.
void SystemEvents_DisplaySettingsChanged(Object^ sender,
    EventArgs^ e)
{
    Console::WriteLine("The display settings changed.");
}

int main()
{
    // Set the SystemEvents class to receive event notification
    // when a user preference changes, the palette changes, or
    // when display settings change.
    SystemEvents::UserPreferenceChanging += gcnew
        UserPreferenceChangingEventHandler(
        SystemEvents_UserPreferenceChanging);
    SystemEvents::PaletteChanged += gcnew
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents::DisplaySettingsChanged += gcnew
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle
    // waiting for events.
    Console::WriteLine("This application is waiting for system events.");
    Console::WriteLine("Press <Enter> to terminate this application.");
    Console::ReadLine();
}

// This code produces the following output.
//
//  This app is waiting for system events.
//  Press <Enter> to terminate this application.
//  Display Settings changed.
//  User preference is changing. Category=General

示例 2

下面的代码示例演示一个非常简单的处理 TimeChanged 和 UserPreferenceChanged 事件的 Windows 服务。该示例包含一个名为 SimpleService 的服务、一个名为 HiddenForm 的窗体和一个安装程序。该窗体提供系统事件所需的消息循环。 下面的代码示例演示一个非常简单的处理 TimeChanged 和 UserPreferenceChanged 事件的 Windows 服务。该示例包含一个名为 SimpleService 的服务、一个名为 HiddenForm 的窗体和一个安装程序。该窗体提供系统事件所需的消息循环。 下面的代码示例演示一个非常简单的处理 TimeChanged 和 UserPreferenceChanged 事件的 Windows 服务。该示例包含一个名为 SimpleService 的服务、一个名为 HiddenForm 的窗体和一个安装程序。该窗体提供系统事件所需的消息循环。

说明 说明

服务没有消息循环，除非允许它们与桌面交互。如果隐藏窗体未提供消息循环（如本例所示），则服务必须以本地系统帐户运行，并且需要手动干预才能启用与桌面的交互。也就是说，管理员必须手动选中服务属性对话框的“登录”选项卡上的“允许服务与桌面交互”复选框。这种情况下，会自动提供消息循环。此选项只在以本地系统帐户运行服务的情况下才可用。不能以编程方式启用与桌面的交互。 服务没有消息循环，除非允许它们与桌面交互。如果隐藏窗体未提供消息循环（如本例所示），则服务必须以本地系统帐户运行，并且需要手动干预才能启用与桌面的交互。也就是说，管理员必须手动选中服务属性对话框的“登录”选项卡上的“允许服务与桌面交互”复选框。这种情况下，会自动提供消息循环。此选项只在以本地系统帐户运行服务的情况下才可用。不能以编程方式启用与桌面的交互。 服务没有消息循环，除非允许它们与桌面交互。如果隐藏窗体未提供消息循环（如本例所示），则服务必须以本地系统帐户运行，并且需要手动干预才能启用与桌面的交互。也就是说，管理员必须手动选中服务属性对话框的“登录”选项卡上的“允许服务与桌面交互”复选框。这种情况下，会自动提供消息循环。此选项只在以本地系统帐户运行服务的情况下才可用。不能以编程方式启用与桌面的交互。 服务没有消息循环，除非允许它们与桌面交互。如果隐藏窗体未提供消息循环（如本例所示），则服务必须以本地系统帐户运行，并且需要手动干预才能启用与桌面的交互。也就是说，管理员必须手动选中服务属性对话框的“登录”选项卡上的“允许服务与桌面交互”复选框。这种情况下，会自动提供消息循环。此选项只在以本地系统帐户运行服务的情况下才可用。不能以编程方式启用与桌面的交互。 服务没有消息循环，除非允许它们与桌面交互。如果隐藏窗体未提供消息循环（如本例所示），则服务必须以本地系统帐户运行，并且需要手动干预才能启用与桌面的交互。也就是说，管理员必须手动选中服务属性对话框的“登录”选项卡上的“允许服务与桌面交互”复选框。这种情况下，会自动提供消息循环。此选项只在以本地系统帐户运行服务的情况下才可用。不能以编程方式启用与桌面的交互。 服务没有消息循环，除非允许它们与桌面交互。如果隐藏窗体未提供消息循环（如本例所示），则服务必须以本地系统帐户运行，并且需要手动干预才能启用与桌面的交互。也就是说，管理员必须手动选中服务属性对话框的“登录”选项卡上的“允许服务与桌面交互”复选框。这种情况下，会自动提供消息循环。此选项只在以本地系统帐户运行服务的情况下才可用。不能以编程方式启用与桌面的交互。

本例中的服务启动一个线程，该线程运行 HiddenForm 的一个实例。事件在窗体中挂钩并得到处理。事件必须在窗体的加载事件中挂钩，以确保首先完全加载窗体；否则不会引发事件。 本例中的服务启动一个线程，该线程运行 HiddenForm 的一个实例。事件在窗体中挂钩并得到处理。事件必须在窗体的加载事件中挂钩，以确保首先完全加载窗体；否则不会引发事件。 本例中的服务启动一个线程，该线程运行 HiddenForm 的一个实例。事件在窗体中挂钩并得到处理。事件必须在窗体的加载事件中挂钩，以确保首先完全加载窗体；否则不会引发事件。

说明 说明

本示例提供了所有必需的代码，包括通常由 Visual Studio 设计器生成的窗体初始化代码。如果要在 Visual Studio 中开发服务，则可以省略第二个分部类，使用“属性”窗口将隐藏窗体的高度和宽度设置为零，将边框样式设置为 FormBorderStyle..::.None，将窗口状态设置为 FormWindowState..::.Minimized。 本示例提供了所有必需的代码，包括通常由 Visual Studio 设计器生成的窗体初始化代码。如果要在 Visual Studio 中开发服务，则可以省略第二个分部类，使用“属性”窗口将隐藏窗体的高度和宽度设置为零，将边框样式设置为 FormBorderStyle..::.None，将窗口状态设置为 FormWindowState..::.Minimized。

运行示例：

  1. 从命令行编译代码。源文件的名称无关紧要。 从命令行编译代码。源文件的名称无关紧要。

  2. 使用Installutil.exe（安装程序工具） 实用工具从命令行安装服务。例如，如果源文件名为 example.cs 或 example.vb，则使用命令 InstallUtil example.exe。只有管理员才能安装服务。 使用Installutil.exe（安装程序工具） 实用工具从命令行安装服务。例如，如果源文件名为 example.cs 或 example.vb，则使用命令 InstallUtil example.exe。只有管理员才能安装服务。 使用Installutil.exe（安装程序工具） 实用工具从命令行安装服务。例如，如果源文件名为 example.cs 或 example.vb，则使用命令 InstallUtil example.exe。只有管理员才能安装服务。

  3. 使用服务控制台启动服务。

  4. 更改系统时间，或者更改用户首选项，如鼠标属性。

  5. 查看事件查看器的“应用程序”类别中的消息。

  6. 使用服务控制台停止服务。

  7. 使用 /u 选项从命令行卸载服务。例如，InstallUtil /u example.exe。 使用 /u 选项从命令行卸载服务。例如，InstallUtil /u example.exe。

Imports System
Imports System.ServiceProcess
Imports System.Threading
Imports System.Windows.Forms
Imports System.Diagnostics
Imports Microsoft.Win32
Imports System.ComponentModel
Imports System.Configuration.Install

Namespace SimpleServiceVb
    Public Class SimpleService
        Inherits ServiceBase

        Shared Sub Main(ByVal args() As String)
            ServiceBase.Run(New SimpleService())
        End Sub

        Protected Overrides Sub OnStart(ByVal args() As String)
            EventLog.WriteEntry("SimpleService", "Starting SimpleService")
            Dim t As New Thread(AddressOf RunMessagePump)
            t.Start()
        End Sub

        Sub RunMessagePump()
            EventLog.WriteEntry("SimpleService.MessagePump", _
                "Starting SimpleService Message Pump")
            Application.Run(New HiddenForm())
        End Sub

        Protected Overrides Sub OnStop()
            Application.Exit()
        End Sub
    End Class

    Partial Class HiddenForm
        Inherits Form

        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub HiddenForm_Load(ByVal sender As Object, ByVal e As EventArgs)
            AddHandler SystemEvents.TimeChanged, AddressOf SystemEvents_TimeChanged
            AddHandler SystemEvents.UserPreferenceChanged, AddressOf SystemEvents_UPCChanged
        End Sub

        Private Sub HiddenForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
            RemoveHandler SystemEvents.TimeChanged, New EventHandler(AddressOf SystemEvents_TimeChanged)
            RemoveHandler SystemEvents.UserPreferenceChanged, _
                New UserPreferenceChangedEventHandler(AddressOf SystemEvents_UPCChanged)
        End Sub

        Private Sub SystemEvents_TimeChanged(ByVal sender As Object, ByVal e As EventArgs)
            EventLog.WriteEntry("SimpleService.TimeChanged", _
                "Time changed; it is now " & DateTime.Now.ToLongTimeString())
        End Sub

        Private Sub SystemEvents_UPCChanged(ByVal sender As Object, ByVal e As UserPreferenceChangedEventArgs)
            EventLog.WriteEntry("SimpleService.UserPreferenceChanged", e.Category.ToString())
        End Sub
    End Class

    Partial Class HiddenForm

        Private components As System.ComponentModel.IContainer = Nothing

        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing AndAlso Not (components Is Nothing) Then
                components.Dispose()
            End If
            MyBase.Dispose(disposing)
        End Sub

        Private Sub InitializeComponent()
            Me.SuspendLayout()
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(0, 0)
            Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
            Me.Name = "HiddenForm"
            Me.Text = "HiddenForm"
            Me.WindowState = System.Windows.Forms.FormWindowState.Minimized
            AddHandler Me.Load, AddressOf Me.HiddenForm_Load
            AddHandler Me.FormClosing, AddressOf Me.HiddenForm_FormClosing
            Me.ResumeLayout(False)
        End Sub
    End Class

    <RunInstaller(True)> _
    Public Class SimpleInstaller
        Inherits Installer

        Private serviceInstaller As ServiceInstaller
        Private processInstaller As ServiceProcessInstaller

        Public Sub New()
            processInstaller = New ServiceProcessInstaller()
            serviceInstaller = New ServiceInstaller()

            ' Service will run under system account
            processInstaller.Account = ServiceAccount.LocalSystem

            ' Service will have Start Type of Manual
            serviceInstaller.StartType = ServiceStartMode.Automatic

            serviceInstaller.ServiceName = "Simple Service"

            Installers.Add(serviceInstaller)
            Installers.Add(processInstaller)
        End Sub
    End Class
End Namespace

using System;
using System.ServiceProcess;
using System.Threading;
using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Win32;
using System.ComponentModel;
using System.Configuration.Install;

namespace SimpleServiceCs
{
    public class SimpleService : ServiceBase
    {
        static void Main(string[] args)
        {
            ServiceBase.Run(new SimpleService());
        }

        protected override void OnStart(string[] args)
        {
            EventLog.WriteEntry("SimpleService", "Starting SimpleService");
            new Thread(RunMessagePump).Start();
        }

        void RunMessagePump()
        {
            EventLog.WriteEntry("SimpleService.MessagePump", "Starting SimpleService Message Pump");
            Application.Run(new HiddenForm());
        }

        protected override void OnStop()
        {
            Application.Exit();
        }
    }

    public partial class HiddenForm : Form
    {
        public HiddenForm()
        {
            InitializeComponent();
        }

        private void HiddenForm_Load(object sender, EventArgs e)
        {
            SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);
            SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UPCChanged);
        }

        private void HiddenForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            SystemEvents.TimeChanged -= new EventHandler(SystemEvents_TimeChanged);
            SystemEvents.UserPreferenceChanged -= new UserPreferenceChangedEventHandler(SystemEvents_UPCChanged);
        }

        private void SystemEvents_TimeChanged(object sender, EventArgs e)
        {
            EventLog.WriteEntry("SimpleService.TimeChanged", "Time changed; it is now " +
                DateTime.Now.ToLongTimeString());
        }

        private void SystemEvents_UPCChanged(object sender, UserPreferenceChangedEventArgs e)
        {
            EventLog.WriteEntry("SimpleService.UserPreferenceChanged", e.Category.ToString());
        }
    }

    partial class HiddenForm
    {
        private System.ComponentModel.IContainer components = null;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(0, 0);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Name = "HiddenForm";
            this.Text = "HiddenForm";
            this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
            this.Load += new System.EventHandler(this.HiddenForm_Load);
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.HiddenForm_FormClosing);
            this.ResumeLayout(false);

        }
    }

    [RunInstaller(true)]
    public class SimpleInstaller : Installer
    {
        private ServiceInstaller serviceInstaller;
        private ServiceProcessInstaller processInstaller;

        public SimpleInstaller()
        {
            processInstaller = new ServiceProcessInstaller();
            serviceInstaller = new ServiceInstaller();

            // Service will run under system account
            processInstaller.Account = ServiceAccount.LocalSystem;

            // Service will have Start Type of Manual
            serviceInstaller.StartType = ServiceStartMode.Automatic;

            serviceInstaller.ServiceName = "Simple Service";

            Installers.Add(serviceInstaller);
            Installers.Add(processInstaller);
        }
    }
}
  • NamedPermissionSet

    用于对系统资源进行完全访问。要求值：LinkDemand。关联状态：FullTrust 用于对系统资源进行完全访问。要求值：LinkDemand。关联状态：FullTrust 用于对系统资源进行完全访问。要求值：LinkDemand。关联状态：FullTrust

Microsoft.Win32 Microsoft.Win32..::.SystemEventsSystemEvents
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 成员
Microsoft.Win32 命名空间
PowerModeChangedEventHandler
SessionEndedEventHandler
SessionEndingEventHandler
SessionSwitchEventHandler
TimerElapsedEventHandler
UserPreferenceChangedEventHandler
UserPreferenceChangingEventHandler


SystemEvents 成员

SystemEvents 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SystemEvents 类

提供对系统事件通知的访问。此类不能被继承。 提供对系统事件通知的访问。此类不能被继承。

SystemEvents 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

SystemEvents 类
Microsoft.Win32 命名空间


SystemEvents 方法

SystemEvents 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SystemEvents 类

SystemEvents 类型公开以下成员。

名称 说明
页首

参考

SystemEvents 类
Microsoft.Win32 命名空间


SystemEvents ..::.CreateTimer 方法

SystemEvents
.
.
::
.
CreateTimer 方法
SystemEvents 类

创建一个与系统事件窗口相关联的新窗口计时器。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Function CreateTimer ( _
    interval As Integer _
) As IntPtr
public static IntPtr CreateTimer(
    int interval
)
public:
static IntPtr CreateTimer(
    int interval
)
static member CreateTimer :
        interval:int -> IntPtr

参数

interval
类型： System Int32
指定计时器通知之间的间隔（以毫秒为单位）。

返回值

类型： System IntPtr
新计时器的 ID。
异常 | 条件
ArgumentException | 间隔小于或等于零。
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功，或创建计时器的尝试未成功。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间


SystemEvents ..::.InvokeOnEventsThread 方法

SystemEvents
.
.
::
.
InvokeOnEventsThread 方法
SystemEvents 类

使用侦听系统事件的线程调用指定的委托。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Sub InvokeOnEventsThread ( _
    method As Delegate _
)
public static void InvokeOnEventsThread(
    Delegate method
)
public:
static void InvokeOnEventsThread(
    Delegate^ method
)
static member InvokeOnEventsThread :
        method:Delegate -> unit

参数

method
类型： System Delegate
要使用侦听系统事件的线程调用的委托。
异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。

需要对 SystemEvents 类未另行公开的系统事件进行处理时，可以随时使用此方法。

调用此方法时，会使用应用程序正在使用的线程调用指定的委托以处理系统事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间


SystemEvents ..::.KillTimer 方法

SystemEvents
.
.
::
.
KillTimer 方法
SystemEvents 类

终止由给定 ID 指定的计时器。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Sub KillTimer ( _
    timerId As IntPtr _
)
public static void KillTimer(
    IntPtr timerId
)
public:
static void KillTimer(
    IntPtr timerId
)
static member KillTimer :
        timerId:IntPtr -> unit

参数

timerId
类型： System IntPtr
要终止的计时器的 ID。
异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功，或终止计时器的尝试未成功。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间


SystemEvents 事件

SystemEvents 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SystemEvents 类

SystemEvents 类型公开以下成员。

名称 说明
页首

参考

SystemEvents 类
Microsoft.Win32 命名空间


SystemEvents ..::.DisplaySettingsChanged 事件

SystemEvents
.
.
::
.
DisplaySettingsChanged 事件
SystemEvents 类

当用户更改显示设置时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event DisplaySettingsChanged As EventHandler
public static event EventHandler DisplaySettingsChanged
public:
static  event EventHandler^ DisplaySettingsChanged {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
member DisplaySettingsChanged : IEvent<EventHandler,
    EventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

下面的代码示例演示如何监视 DisplaySettingsChanged 事件。此代码示例摘自一个为 SystemEvents 类提供的更大示例。 下面的代码示例演示如何监视 DisplaySettingsChanged 事件。此代码示例摘自一个为 SystemEvents 类提供的更大示例。

'Set the SystemEvents class to receive event notification
'when a user preference changes, the palette changes, or
'when display settings change.
AddHandler SystemEvents.UserPreferenceChanging, _
AddressOf SystemEvents_UserPreferenceChanging

AddHandler SystemEvents.PaletteChanged, _
AddressOf SystemEvents_PaletteChanged

AddHandler SystemEvents.DisplaySettingsChanged, _
AddressOf SystemEvents_DisplaySettingsChanged

static void Main()
{
    // Set the SystemEvents class to receive event notification when a user
    // preference changes, the palette changes, or when display settings change.
    SystemEvents.UserPreferenceChanging += new
        UserPreferenceChangingEventHandler(SystemEvents_UserPreferenceChanging);
    SystemEvents.PaletteChanged += new
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents.DisplaySettingsChanged += new
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle waiting for events.
    Console.WriteLine("This application is waiting for system events.");
    Console.WriteLine("Press <Enter> to terminate this application.");
    Console.ReadLine();
}

int main()
{
    // Set the SystemEvents class to receive event notification
    // when a user preference changes, the palette changes, or
    // when display settings change.
    SystemEvents::UserPreferenceChanging += gcnew
        UserPreferenceChangingEventHandler(
        SystemEvents_UserPreferenceChanging);
    SystemEvents::PaletteChanged += gcnew
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents::DisplaySettingsChanged += gcnew
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle
    // waiting for events.
    Console::WriteLine("This application is waiting for system events.");
    Console::WriteLine("Press <Enter> to terminate this application.");
    Console::ReadLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
DisplaySettingsChanging


SystemEvents ..::.DisplaySettingsChanging 事件

SystemEvents
.
.
::
.
DisplaySettingsChanging 事件
SystemEvents 类

更改显示设置时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event DisplaySettingsChanging As EventHandler
public static event EventHandler DisplaySettingsChanging
public:
static  event EventHandler^ DisplaySettingsChanging {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
member DisplaySettingsChanging : IEvent<EventHandler,
    EventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
DisplaySettingsChanged


SystemEvents ..::.EventsThreadShutdown 事件

SystemEvents
.
.
::
.
EventsThreadShutdown 事件
SystemEvents 类

在侦听系统事件的线程终止前发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event EventsThreadShutdown As EventHandler
public static event EventHandler EventsThreadShutdown
public:
static  event EventHandler^ EventsThreadShutdown {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
member EventsThreadShutdown : IEvent<EventHandler,
    EventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。

此事件在侦听系统事件的线程即将终止时引发。系统事件委托是使用侦听系统事件的线程调用的。 此事件在侦听系统事件的线程即将终止时引发。系统事件委托是使用侦听系统事件的线程调用的。

警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间


SystemEvents ..::.InstalledFontsChanged 事件

SystemEvents
.
.
::
.
InstalledFontsChanged 事件
SystemEvents 类

当用户在系统中添加或移除字体时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event InstalledFontsChanged As EventHandler
public static event EventHandler InstalledFontsChanged
public:
static  event EventHandler^ InstalledFontsChanged {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
member InstalledFontsChanged : IEvent<EventHandler,
    EventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间


SystemEvents ..::.LowMemory 事件

SystemEvents
.
.
::
.
LowMemory 事件
SystemEvents 类

注意：此 API 现在已过时。

当系统用完可用 RAM 时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<ObsoleteAttribute("This event has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")> _
<BrowsableAttribute(False)> _
Public Shared Event LowMemory As EventHandler
[ObsoleteAttribute("This event has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
[BrowsableAttribute(false)]
public static event EventHandler LowMemory
[ObsoleteAttribute(L"This event has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
[BrowsableAttribute(false)]
public:
static  event EventHandler^ LowMemory {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
[<ObsoleteAttribute("This event has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")>]
[<BrowsableAttribute(false)>]
member LowMemory : IEvent<EventHandler,
    EventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。

此事件包装 WM_COMPACTING 消息。如果系统检测到压缩内存所用的时间超过了 12.5% 的系统时间（30 到 60 秒间隔），则将此消息发送到所有顶级窗口。这指示系统内存不足。 此事件包装 WM_COMPACTING 消息。如果系统检测到压缩内存所用的时间超过了 12.5% 的系统时间（30 到 60 秒间隔），则将此消息发送到所有顶级窗口。这指示系统内存不足。 此事件包装 WM_COMPACTING 消息。如果系统检测到压缩内存所用的时间超过了 12.5% 的系统时间（30 到 60 秒间隔），则将此消息发送到所有顶级窗口。这指示系统内存不足。

说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

对调用者的说明

提供此消息只是为了与基于 16 位 Windows 的应用程序保持兼容。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间


SystemEvents ..::.PaletteChanged 事件

SystemEvents
.
.
::
.
PaletteChanged 事件
SystemEvents 类

当用户切换到使用其他调色板的应用程序时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event PaletteChanged As EventHandler
public static event EventHandler PaletteChanged
public:
static  event EventHandler^ PaletteChanged {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
member PaletteChanged : IEvent<EventHandler,
    EventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

下面的代码示例演示如何监视 PaletteChanged 事件。此代码示例摘自一个为 SystemEvents 类提供的更大示例。 下面的代码示例演示如何监视 PaletteChanged 事件。此代码示例摘自一个为 SystemEvents 类提供的更大示例。

'Set the SystemEvents class to receive event notification
'when a user preference changes, the palette changes, or
'when display settings change.
AddHandler SystemEvents.UserPreferenceChanging, _
AddressOf SystemEvents_UserPreferenceChanging

AddHandler SystemEvents.PaletteChanged, _
AddressOf SystemEvents_PaletteChanged

AddHandler SystemEvents.DisplaySettingsChanged, _
AddressOf SystemEvents_DisplaySettingsChanged

static void Main()
{
    // Set the SystemEvents class to receive event notification when a user
    // preference changes, the palette changes, or when display settings change.
    SystemEvents.UserPreferenceChanging += new
        UserPreferenceChangingEventHandler(SystemEvents_UserPreferenceChanging);
    SystemEvents.PaletteChanged += new
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents.DisplaySettingsChanged += new
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle waiting for events.
    Console.WriteLine("This application is waiting for system events.");
    Console.WriteLine("Press <Enter> to terminate this application.");
    Console.ReadLine();
}

int main()
{
    // Set the SystemEvents class to receive event notification
    // when a user preference changes, the palette changes, or
    // when display settings change.
    SystemEvents::UserPreferenceChanging += gcnew
        UserPreferenceChangingEventHandler(
        SystemEvents_UserPreferenceChanging);
    SystemEvents::PaletteChanged += gcnew
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents::DisplaySettingsChanged += gcnew
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle
    // waiting for events.
    Console::WriteLine("This application is waiting for system events.");
    Console::WriteLine("Press <Enter> to terminate this application.");
    Console::ReadLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间


SystemEvents ..::.PowerModeChanged 事件

SystemEvents
.
.
::
.
PowerModeChanged 事件
SystemEvents 类

当用户挂起或继续系统时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event PowerModeChanged As PowerModeChangedEventHandler
public static event PowerModeChangedEventHandler PowerModeChanged
public:
static  event PowerModeChangedEventHandler^ PowerModeChanged {
    void add (PowerModeChangedEventHandler^ value);
    void remove (PowerModeChangedEventHandler^ value);
}
member PowerModeChanged : IEvent<PowerModeChangedEventHandler,
    PowerModeChangedEventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
PowerModeChangedEventArgs
PowerModeChangedEventHandler
PowerModes


SystemEvents ..::.SessionEnded 事件

SystemEvents
.
.
::
.
SessionEnded 事件
SystemEvents 类

当用户注销或关闭系统时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event SessionEnded As SessionEndedEventHandler
public static event SessionEndedEventHandler SessionEnded
public:
static  event SessionEndedEventHandler^ SessionEnded {
    void add (SessionEndedEventHandler^ value);
    void remove (SessionEndedEventHandler^ value);
}
member SessionEnded : IEvent<SessionEndedEventHandler,
    SessionEndedEventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
SessionEndedEventArgs
SessionEndedEventHandler
SessionEndReasons


SystemEvents ..::.SessionEnding 事件

SystemEvents
.
.
::
.
SessionEnding 事件
SystemEvents 类

当用户尝试注销或关闭系统时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event SessionEnding As SessionEndingEventHandler
public static event SessionEndingEventHandler SessionEnding
public:
static  event SessionEndingEventHandler^ SessionEnding {
    void add (SessionEndingEventHandler^ value);
    void remove (SessionEndingEventHandler^ value);
}
member SessionEnding : IEvent<SessionEndingEventHandler,
    SessionEndingEventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。

这是一个可取消的事件。将 Cancel 属性设置为 true 将请求会话继续运行。它不保证会话不会结束。 这是一个可取消的事件。将 Cancel 属性设置为 true 将请求会话继续运行。它不保证会话不会结束。 这是一个可取消的事件。将 Cancel 属性设置为 true 将请求会话继续运行。它不保证会话不会结束。

如果您在 Windows 窗体中正使用 SessionEnding 来检测系统注销或重新启动过程，则没有特定的办法能够确定在此事件之前是否将激发 Closing 事件。

若要在激发 Closing 之前执行一些特殊任务，您需要确保在 Closing 之前激发 SessionEnding。为此，需要通过重写 WndProc 函数在该窗体中捕获 WM_QUERYENDSESSION。此示例演示如何执行此操作。 若要在激发 Closing 之前执行一些特殊任务，您需要确保在 Closing 之前激发 SessionEnding。为此，需要通过重写 WndProc 函数在该窗体中捕获 WM_QUERYENDSESSION。此示例演示如何执行此操作。 若要在激发 Closing 之前执行一些特殊任务，您需要确保在 Closing 之前激发 SessionEnding。为此，需要通过重写 WndProc 函数在该窗体中捕获 WM_QUERYENDSESSION。此示例演示如何执行此操作。

Private Shared WM_QUERYENDSESSION As Integer = &H11
 Private Shared systemShutdown As Boolean = False
 Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
     If m.Msg = WM_QUERYENDSESSION Then
         MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot")
         systemShutdown = True
     End If
     ' If this is WM_QUERYENDSESSION, the closing event should be raised in the base WndProc.MyBase.WndProc(m)
 End Sub 'WndProc
 Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
     If (systemShutdown) Then
     ' Reset the variable because the user might cancel the shutdown.systemShutdown = False
         If (System.Windows.Forms.DialogResult.Yes = _
                 MessageBox.Show("My application", "Do you want to save your work before logging off?", MessageBoxButtons.YesNo)) Then
                 e.Cancel = True
         Else
                 e.Cancel = False
         End If
     End If
 End Sub
private static int WM_QUERYENDSESSION = 0x11;
private static bool systemShutdown = false;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg==WM_QUERYENDSESSION)
    {
        MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
        systemShutdown = true;
    }

    // If this is WM_QUERYENDSESSION, the closing event should be
    // raised in the base WndProc.base.WndProc(ref m);

} //WndProc

private void Form1_Closing(
    System.Object sender,
    System.ComponentModel.CancelEventArgs e)
{
    if (systemShutdown)
        // Reset the variable because the user might cancel the
        // shutdown.{
        systemShutdown = false;
        if (DialogResult.Yes==MessageBox.Show("My application",
            "Do you want to save your work before logging off?",
            MessageBoxButtons.YesNo))
        {
            e.Cancel = true;
        }
        else
        {
            e.Cancel = false;
        }
    }
}
重要说明 重要事项

控制台应用程序不会引发 SessionEnding 事件。
说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
SessionEndingEventArgs
SessionEndingEventHandler
SessionEndReasons


SystemEvents ..::.SessionSwitch 事件

SystemEvents
.
.
::
.
SessionSwitch 事件
SystemEvents 类

更改当前登录的用户时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event SessionSwitch As SessionSwitchEventHandler
public static event SessionSwitchEventHandler SessionSwitch
public:
static  event SessionSwitchEventHandler^ SessionSwitch {
    void add (SessionSwitchEventHandler^ value);
    void remove (SessionSwitchEventHandler^ value);
}
member SessionSwitch : IEvent<SessionSwitchEventHandler,
    SessionSwitchEventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
SessionSwitchEventHandler


SystemEvents ..::.TimeChanged 事件

SystemEvents
.
.
::
.
TimeChanged 事件
SystemEvents 类

当用户更改系统时钟上的时间时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event TimeChanged As EventHandler
public static event EventHandler TimeChanged
public:
static  event EventHandler^ TimeChanged {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
member TimeChanged : IEvent<EventHandler,
    EventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
Now


SystemEvents ..::.TimerElapsed 事件

SystemEvents
.
.
::
.
TimerElapsed 事件
SystemEvents 类

在窗口计时器间隔过期时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event TimerElapsed As TimerElapsedEventHandler
public static event TimerElapsedEventHandler TimerElapsed
public:
static  event TimerElapsedEventHandler^ TimerElapsed {
    void add (TimerElapsedEventHandler^ value);
    void remove (TimerElapsedEventHandler^ value);
}
member TimerElapsed : IEvent<TimerElapsedEventHandler,
    TimerElapsedEventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
TimerElapsedEventArgs
TimerElapsedEventHandler


SystemEvents ..::.UserPreferenceChanged 事件

SystemEvents
.
.
::
.
UserPreferenceChanged 事件
SystemEvents 类

在用户首选项更改后发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event UserPreferenceChanged As UserPreferenceChangedEventHandler
public static event UserPreferenceChangedEventHandler UserPreferenceChanged
public:
static  event UserPreferenceChangedEventHandler^ UserPreferenceChanged {
    void add (UserPreferenceChangedEventHandler^ value);
    void remove (UserPreferenceChangedEventHandler^ value);
}
member UserPreferenceChanged : IEvent<UserPreferenceChangedEventHandler,
    UserPreferenceChangedEventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
UserPreferenceChangedEventArgs
UserPreferenceChangedEventHandler
UserPreferenceCategory


SystemEvents ..::.UserPreferenceChanging 事件

SystemEvents
.
.
::
.
UserPreferenceChanging 事件
SystemEvents 类

当用户首选项更改时发生。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Shared Event UserPreferenceChanging As UserPreferenceChangingEventHandler
public static event UserPreferenceChangingEventHandler UserPreferenceChanging
public:
static  event UserPreferenceChangingEventHandler^ UserPreferenceChanging {
    void add (UserPreferenceChangingEventHandler^ value);
    void remove (UserPreferenceChangingEventHandler^ value);
}
member UserPreferenceChanging : IEvent<UserPreferenceChangingEventHandler,
    UserPreferenceChangingEventArgs>

异常 | 条件
InvalidOperationException | 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。 当前上下文不支持系统事件通知。例如，服务器进程可能不支持全局系统事件通知。
ExternalException | 创建系统事件窗口线程的尝试未成功。
说明 说明

只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。 只有在消息泵运行时，才会引发此事件。在 Windows 服务中，除非使用隐藏窗体或者手动启动消息泵，否则不会引发此事件。有关演示如何在 Windows 服务中使用隐藏窗体来处理系统事件的代码示例，请参见 SystemEvents 类。
警告说明 警告

因为这是一个静态事件，所以释放应用程序时必须分离事件处理程序，否则会导致内存泄漏。

下面的代码示例演示如何监视 UserPreferenceChanging 事件。此代码示例摘自一个为 SystemEvents 类提供的更大示例。 下面的代码示例演示如何监视 UserPreferenceChanging 事件。此代码示例摘自一个为 SystemEvents 类提供的更大示例。

'Set the SystemEvents class to receive event notification
'when a user preference changes, the palette changes, or
'when display settings change.
AddHandler SystemEvents.UserPreferenceChanging, _
AddressOf SystemEvents_UserPreferenceChanging

AddHandler SystemEvents.PaletteChanged, _
AddressOf SystemEvents_PaletteChanged

AddHandler SystemEvents.DisplaySettingsChanged, _
AddressOf SystemEvents_DisplaySettingsChanged

static void Main()
{
    // Set the SystemEvents class to receive event notification when a user
    // preference changes, the palette changes, or when display settings change.
    SystemEvents.UserPreferenceChanging += new
        UserPreferenceChangingEventHandler(SystemEvents_UserPreferenceChanging);
    SystemEvents.PaletteChanged += new
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents.DisplaySettingsChanged += new
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle waiting for events.
    Console.WriteLine("This application is waiting for system events.");
    Console.WriteLine("Press <Enter> to terminate this application.");
    Console.ReadLine();
}

int main()
{
    // Set the SystemEvents class to receive event notification
    // when a user preference changes, the palette changes, or
    // when display settings change.
    SystemEvents::UserPreferenceChanging += gcnew
        UserPreferenceChangingEventHandler(
        SystemEvents_UserPreferenceChanging);
    SystemEvents::PaletteChanged += gcnew
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents::DisplaySettingsChanged += gcnew
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle
    // waiting for events.
    Console::WriteLine("This application is waiting for system events.");
    Console::WriteLine("Press <Enter> to terminate this application.");
    Console::ReadLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemEvents 类
SystemEvents 成员
Microsoft.Win32 命名空间
UserPreferenceChangingEventArgs
UserPreferenceChangingEventHandler
UserPreferenceCategory


TimerElapsedEventArgs 类

TimerElapsedEventArgs 类
成员

为 TimerElapsed 事件提供数据。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name := "FullTrust")> _
<PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Class TimerElapsedEventArgs _
    Inherits EventArgs
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class TimerElapsedEventArgs : EventArgs
[PermissionSetAttribute(SecurityAction::InheritanceDemand, Name = L"FullTrust")]
[PermissionSetAttribute(SecurityAction::LinkDemand, Name = L"FullTrust")]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public ref class TimerElapsedEventArgs : public EventArgs
[<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")>]
[<PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type TimerElapsedEventArgs =
    class
        inherit EventArgs
    end

当窗口计时器间隔过期时引发 TimerElapsed 事件。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Microsoft.Win32 Microsoft.Win32..::.TimerElapsedEventArgsTimerElapsedEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TimerElapsedEventArgs 成员
Microsoft.Win32 命名空间
TimerElapsedEventHandler
TimerElapsed
SystemEvents


TimerElapsedEventArgs 成员

TimerElapsedEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimerElapsedEventArgs 类

为 TimerElapsed 事件提供数据。

TimerElapsedEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TimerElapsedEventArgs 类
Microsoft.Win32 命名空间


TimerElapsedEventArgs 构造函数

TimerElapsedEventArgs 构造函数
TimerElapsedEventArgs 类

初始化 TimerElapsedEventArgs 类的新实例。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Sub New ( _
    timerId As IntPtr _
)
public TimerElapsedEventArgs(
    IntPtr timerId
)
public:
TimerElapsedEventArgs(
    IntPtr timerId
)
new :
        timerId:IntPtr -> TimerElapsedEventArgs

参数

timerId
类型： System IntPtr
计时器的 ID 号。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TimerElapsedEventArgs 类
TimerElapsedEventArgs 成员
Microsoft.Win32 命名空间
TimerElapsedEventHandler
TimerElapsed
SystemEvents


TimerElapsedEventArgs 方法

TimerElapsedEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimerElapsedEventArgs 类

TimerElapsedEventArgs 类型公开以下成员。

名称 说明
页首

参考

TimerElapsedEventArgs 类
Microsoft.Win32 命名空间


TimerElapsedEventArgs 属性

TimerElapsedEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimerElapsedEventArgs 类

TimerElapsedEventArgs 类型公开以下成员。

名称 说明
页首

参考

TimerElapsedEventArgs 类
Microsoft.Win32 命名空间


TimerElapsedEventArgs ..::.TimerId 属性

TimerElapsedEventArgs
.
.
::
.
TimerId 属性
TimerElapsedEventArgs 类

获取计时器的 ID 号。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public ReadOnly Property TimerId As IntPtr
    Get
public IntPtr TimerId { get; }
public:
property IntPtr TimerId {
    IntPtr get ();
}
member TimerId : IntPtr

属性值

类型： System IntPtr
计时器的 ID 号。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TimerElapsedEventArgs 类
TimerElapsedEventArgs 成员
Microsoft.Win32 命名空间


TimerElapsedEventHandler 委托

TimerElapsedEventHandler 委托

表示将处理 TimerElapsed 事件的方法。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Delegate Sub TimerElapsedEventHandler ( _
    sender As Object, _
    e As TimerElapsedEventArgs _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public delegate void TimerElapsedEventHandler(
    Object sender,
    TimerElapsedEventArgs e
)
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public delegate void TimerElapsedEventHandler(
    Object^ sender,
    TimerElapsedEventArgs^ e
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type TimerElapsedEventHandler =
    delegate of
        sender:Object *
        e:TimerElapsedEventArgs -> unit

参数

sender
类型： System Object
事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
e
类型： Microsoft.Win32 TimerElapsedEventArgs
包含事件数据的 TimerElapsedEventArgs。

当创建 TimerElapsedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 TimerElapsedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 TimerElapsedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 TimerElapsedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
TimerElapsedEventArgs
TimerElapsed
SystemEvents


UserPreferenceCategory 枚举

UserPreferenceCategory 枚举

定义表示用户首选项类别的标识符。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Enumeration UserPreferenceCategory
public enum UserPreferenceCategory
public enum class UserPreferenceCategory
type UserPreferenceCategory
成员名称 | 说明
Accessibility | 指示与供残障人士使用的系统辅助功能关联的用户首选项。
Color | 指示与系统颜色关联的用户首选项。此类别包括像窗口或菜单的默认颜色这样的选项。 指示与系统颜色关联的用户首选项。此类别包括像窗口或菜单的默认颜色这样的选项。
Desktop | 指示与系统桌面关联的用户首选项。此类别包括桌面的背景图像或背景图像布局。 指示与系统桌面关联的用户首选项。此类别包括桌面的背景图像或背景图像布局。
General | 指示不与任何其他类别关联的用户首选项。
Icon | 指示图标设置的用户首选项，包括图标高度和图标间距。
Keyboard | 指示键盘设置的用户首选项，例如，按下键的重复速率和延迟时间。
Menu | 指示菜单设置的用户首选项，例如，菜单延迟和文本对齐方式。
Mouse | 指示鼠标设置的用户首选项，例如，双击时间和鼠标灵敏度。
Policy | 指示策略设置的用户首选项，例如，用户权限和访问级别。
Power | 指示系统电源设置的用户首选项。此类别包括电源功能设置，例如，系统自动进入低能模式之前的空闲时间。 指示系统电源设置的用户首选项。此类别包括电源功能设置，例如，系统自动进入低能模式之前的空闲时间。
Screensaver | 指示与屏幕保护程序关联的用户首选项。
Window | 指示与系统窗口的尺寸和特性关联的用户首选项。
Locale | 指示对于区域设置（如字符编码和区域性字符串）的用户首选项更改。
VisualStyle | 指示与视觉样式关联的用户首选项，例如，启用或禁用视觉样式，以及从一种视觉样式切换到另一种视觉样式。

UserPreferenceCategory 提供可表示用户首选项类别的标识符。

使用 Windows 控制面板、计算机管理控制台或使用适当的 API 通过编程的方式可以更改这些类别中的某些用户首选项。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
UserPreferenceChangedEventArgs
UserPreferenceChangedEventHandler
UserPreferenceChangingEventArgs
UserPreferenceChangingEventHandler
UserPreferenceChanging
UserPreferenceChanged
SystemEvents


UserPreferenceChangedEventArgs 类

UserPreferenceChangedEventArgs 类
成员

为 UserPreferenceChanged 事件提供数据。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name := "FullTrust")> _
Public Class UserPreferenceChangedEventArgs _
    Inherits EventArgs
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public class UserPreferenceChangedEventArgs : EventArgs
[PermissionSetAttribute(SecurityAction::LinkDemand, Name = L"FullTrust")]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
[PermissionSetAttribute(SecurityAction::InheritanceDemand, Name = L"FullTrust")]
public ref class UserPreferenceChangedEventArgs : public EventArgs
[<PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
[<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")>]
type UserPreferenceChangedEventArgs =
    class
        inherit EventArgs
    end

当用户首选项更改时发生 UserPreferenceChanged 事件。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Microsoft.Win32 Microsoft.Win32..::.UserPreferenceChangedEventArgsUserPreferenceChangedEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UserPreferenceChangedEventArgs 成员
Microsoft.Win32 命名空间
UserPreferenceChangedEventHandler
UserPreferenceCategory
UserPreferenceChanged
SystemEvents


UserPreferenceChangedEventArgs 成员

UserPreferenceChangedEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UserPreferenceChangedEventArgs 类

为 UserPreferenceChanged 事件提供数据。

UserPreferenceChangedEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UserPreferenceChangedEventArgs 类
Microsoft.Win32 命名空间


UserPreferenceChangedEventArgs 构造函数

UserPreferenceChangedEventArgs 构造函数
UserPreferenceChangedEventArgs 类

使用指定的用户首选项类别标识符初始化 UserPreferenceChangedEventArgs 类的新实例。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Sub New ( _
    category As UserPreferenceCategory _
)
public UserPreferenceChangedEventArgs(
    UserPreferenceCategory category
)
public:
UserPreferenceChangedEventArgs(
    UserPreferenceCategory category
)
new :
        category:UserPreferenceCategory -> UserPreferenceChangedEventArgs

参数

category
类型： Microsoft.Win32 UserPreferenceCategory
用于指示已更改的用户首选项类别的 UserPreferenceCategory 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UserPreferenceChangedEventArgs 类
UserPreferenceChangedEventArgs 成员
Microsoft.Win32 命名空间
UserPreferenceChangedEventHandler
UserPreferenceCategory
UserPreferenceChanged
SystemEvents


UserPreferenceChangedEventArgs 方法

UserPreferenceChangedEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UserPreferenceChangedEventArgs 类

UserPreferenceChangedEventArgs 类型公开以下成员。

名称 说明
页首

参考

UserPreferenceChangedEventArgs 类
Microsoft.Win32 命名空间


UserPreferenceChangedEventArgs 属性

UserPreferenceChangedEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UserPreferenceChangedEventArgs 类

UserPreferenceChangedEventArgs 类型公开以下成员。

名称 说明
页首

参考

UserPreferenceChangedEventArgs 类
Microsoft.Win32 命名空间


UserPreferenceChangedEventArgs ..::.Category 属性

UserPreferenceChangedEventArgs
.
.
::
.
Category 属性
UserPreferenceChangedEventArgs 类

获取已更改的用户首选项的类别。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public ReadOnly Property Category As UserPreferenceCategory
    Get
public UserPreferenceCategory Category { get; }
public:
property UserPreferenceCategory Category {
    UserPreferenceCategory get ();
}
member Category : UserPreferenceCategory

属性值

类型： Microsoft.Win32 UserPreferenceCategory
用于指示已更改的用户首选项类别的 UserPreferenceCategory 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UserPreferenceChangedEventArgs 类
UserPreferenceChangedEventArgs 成员
Microsoft.Win32 命名空间
UserPreferenceChangedEventHandler
UserPreferenceCategory


UserPreferenceChangedEventHandler 委托

UserPreferenceChangedEventHandler 委托

表示将处理 UserPreferenceChanged 事件的方法。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Delegate Sub UserPreferenceChangedEventHandler ( _
    sender As Object, _
    e As UserPreferenceChangedEventArgs _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public delegate void UserPreferenceChangedEventHandler(
    Object sender,
    UserPreferenceChangedEventArgs e
)
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public delegate void UserPreferenceChangedEventHandler(
    Object^ sender,
    UserPreferenceChangedEventArgs^ e
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type UserPreferenceChangedEventHandler =
    delegate of
        sender:Object *
        e:UserPreferenceChangedEventArgs -> unit

参数

sender
类型： System Object
事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
e
类型： Microsoft.Win32 UserPreferenceChangedEventArgs
包含事件数据的 UserPreferenceChangedEventArgs。

当创建 UserPreferenceChangedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 UserPreferenceChangedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 UserPreferenceChangedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 UserPreferenceChangedEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
UserPreferenceChangedEventArgs
UserPreferenceChanged
SystemEvents


UserPreferenceChangingEventArgs 类

UserPreferenceChangingEventArgs 类
成员

为 UserPreferenceChanging 事件提供数据。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name := "FullTrust")> _
<PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Class UserPreferenceChangingEventArgs _
    Inherits EventArgs
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class UserPreferenceChangingEventArgs : EventArgs
[PermissionSetAttribute(SecurityAction::InheritanceDemand, Name = L"FullTrust")]
[PermissionSetAttribute(SecurityAction::LinkDemand, Name = L"FullTrust")]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public ref class UserPreferenceChangingEventArgs : public EventArgs
[<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")>]
[<PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type UserPreferenceChangingEventArgs =
    class
        inherit EventArgs
    end

在将要应用对用户首选项的更改时，发生 UserPreferenceChanging 事件。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示如何使用 UserPreferenceChangingEventArgs 类型来监视 UserPreferenceChanging 事件。此代码示例摘自一个为 SystemEvents 类提供的更大的示例。 下面的代码示例演示如何使用 UserPreferenceChangingEventArgs 类型来监视 UserPreferenceChanging 事件。此代码示例摘自一个为 SystemEvents 类提供的更大的示例。

Imports System
Imports Microsoft.Win32
Imports System.Windows.Forms

Friend Class Form1
    Inherits System.Windows.Forms.Form

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Set the SystemEvents class to receive event notification
        'when a user preference changes, the palette changes, or
        'when display settings change.
        AddHandler SystemEvents.UserPreferenceChanging, _
        AddressOf SystemEvents_UserPreferenceChanging

        AddHandler SystemEvents.PaletteChanged, _
        AddressOf SystemEvents_PaletteChanged

        AddHandler SystemEvents.DisplaySettingsChanged, _
        AddressOf SystemEvents_DisplaySettingsChanged

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If (components IsNot Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    Private components As System.ComponentModel.IContainer

    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

        Me.SuspendLayout()

        '
        'Form1
        '
        Me.ClientSize = New System.Drawing.Size(648, 398)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)

    End Sub

    ' This method is called when a user preference changes.
    Private Sub SystemEvents_UserPreferenceChanging( _
    ByVal sender As Object, _
    ByVal e As UserPreferenceChangingEventArgs)

        MessageBox.Show("UserPreferenceChanging: " & _
        e.Category.ToString())
    End Sub

    ' This method is called when the palette changes.
    Private Sub SystemEvents_PaletteChanged( _
    ByVal sender As Object, _
    ByVal e As EventArgs)

        MessageBox.Show("PaletteChanged")

    End Sub

    ' This method is called when the display settings change.
    Private Sub SystemEvents_DisplaySettingsChanged( _
    ByVal sender As Object, _
    ByVal e As EventArgs)

        MessageBox.Show("The display settings changed.")

    End Sub

End Class

using System;
using Microsoft.Win32;

public sealed class App
{
    static void Main()
    {
        // Set the SystemEvents class to receive event notification when a user
        // preference changes, the palette changes, or when display settings change.
        SystemEvents.UserPreferenceChanging += new
            UserPreferenceChangingEventHandler(SystemEvents_UserPreferenceChanging);
        SystemEvents.PaletteChanged += new
            EventHandler(SystemEvents_PaletteChanged);
        SystemEvents.DisplaySettingsChanged += new
            EventHandler(SystemEvents_DisplaySettingsChanged);

        // For demonstration purposes, this application sits idle waiting for events.
        Console.WriteLine("This application is waiting for system events.");
        Console.WriteLine("Press <Enter> to terminate this application.");
        Console.ReadLine();
    }

    // This method is called when a user preference changes.
    static void SystemEvents_UserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e)
    {
        Console.WriteLine("The user preference is changing. Category={0}", e.Category);
    }

    // This method is called when the palette changes.
    static void SystemEvents_PaletteChanged(object sender, EventArgs e)
    {
        Console.WriteLine("The palette changed.");
    }

    // This method is called when the display settings change.
    static void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
    {
        Console.WriteLine("The display settings changed.");
    }
}

// This code produces the following output.
//
//  This app is waiting for system events.
//  Press <Enter> to terminate this application.
//  Display Settings changed.
//  User preference is changing. Category=General

#using <System.dll>

using namespace System;
using namespace Microsoft::Win32;

// This method is called when a user preference changes.
void SystemEvents_UserPreferenceChanging(Object^ sender,
     UserPreferenceChangingEventArgs^ e)
 {
     Console::WriteLine("The user preference is changing. Category={0}",
         e->Category);
 }

// This method is called when the palette changes.
void SystemEvents_PaletteChanged(Object^ sender, EventArgs^ e)
{
    Console::WriteLine("The palette changed.");
}

// This method is called when the display settings change.
void SystemEvents_DisplaySettingsChanged(Object^ sender,
    EventArgs^ e)
{
    Console::WriteLine("The display settings changed.");
}

int main()
{
    // Set the SystemEvents class to receive event notification
    // when a user preference changes, the palette changes, or
    // when display settings change.
    SystemEvents::UserPreferenceChanging += gcnew
        UserPreferenceChangingEventHandler(
        SystemEvents_UserPreferenceChanging);
    SystemEvents::PaletteChanged += gcnew
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents::DisplaySettingsChanged += gcnew
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle
    // waiting for events.
    Console::WriteLine("This application is waiting for system events.");
    Console::WriteLine("Press <Enter> to terminate this application.");
    Console::ReadLine();
}

// This code produces the following output.
//
//  This app is waiting for system events.
//  Press <Enter> to terminate this application.
//  Display Settings changed.
//  User preference is changing. Category=General

Microsoft.Win32 Microsoft.Win32..::.UserPreferenceChangingEventArgsUserPreferenceChangingEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UserPreferenceChangingEventArgs 成员
Microsoft.Win32 命名空间
UserPreferenceChangingEventHandler
UserPreferenceCategory
UserPreferenceChanging
SystemEvents


UserPreferenceChangingEventArgs 成员

UserPreferenceChangingEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UserPreferenceChangingEventArgs 类

为 UserPreferenceChanging 事件提供数据。

UserPreferenceChangingEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UserPreferenceChangingEventArgs 类
Microsoft.Win32 命名空间


UserPreferenceChangingEventArgs 构造函数

UserPreferenceChangingEventArgs 构造函数
UserPreferenceChangingEventArgs 类

使用指定的用户首选项类别标识符初始化 UserPreferenceChangingEventArgs 类的新实例。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public Sub New ( _
    category As UserPreferenceCategory _
)
public UserPreferenceChangingEventArgs(
    UserPreferenceCategory category
)
public:
UserPreferenceChangingEventArgs(
    UserPreferenceCategory category
)
new :
        category:UserPreferenceCategory -> UserPreferenceChangingEventArgs

参数

category
类型： Microsoft.Win32 UserPreferenceCategory
指示正在更改的用户首选项类别的 UserPreferenceCategory 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UserPreferenceChangingEventArgs 类
UserPreferenceChangingEventArgs 成员
Microsoft.Win32 命名空间
UserPreferenceChangingEventHandler
UserPreferenceCategory
UserPreferenceChanging
SystemEvents


UserPreferenceChangingEventArgs 方法

UserPreferenceChangingEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UserPreferenceChangingEventArgs 类

UserPreferenceChangingEventArgs 类型公开以下成员。

名称 说明
页首

参考

UserPreferenceChangingEventArgs 类
Microsoft.Win32 命名空间


UserPreferenceChangingEventArgs 属性

UserPreferenceChangingEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UserPreferenceChangingEventArgs 类

UserPreferenceChangingEventArgs 类型公开以下成员。

名称 说明
页首

参考

UserPreferenceChangingEventArgs 类
Microsoft.Win32 命名空间


UserPreferenceChangingEventArgs ..::.Category 属性

UserPreferenceChangingEventArgs
.
.
::
.
Category 属性
UserPreferenceChangingEventArgs 类

获取正在更改的用户首选项的类别。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
Public ReadOnly Property Category As UserPreferenceCategory
    Get
public UserPreferenceCategory Category { get; }
public:
property UserPreferenceCategory Category {
    UserPreferenceCategory get ();
}
member Category : UserPreferenceCategory

属性值

类型： Microsoft.Win32 UserPreferenceCategory
指示正在更改的用户首选项类别的 UserPreferenceCategory 值之一。

下面的代码示例演示如何使用 UserPreferenceChangingEventArgs 类型来监视 UserPreferenceChanging 事件。此代码示例摘自一个为 SystemEvents 类提供的更大的示例。 下面的代码示例演示如何使用 UserPreferenceChangingEventArgs 类型来监视 UserPreferenceChanging 事件。此代码示例摘自一个为 SystemEvents 类提供的更大的示例。

Imports System
Imports Microsoft.Win32
Imports System.Windows.Forms

Friend Class Form1
    Inherits System.Windows.Forms.Form

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Set the SystemEvents class to receive event notification
        'when a user preference changes, the palette changes, or
        'when display settings change.
        AddHandler SystemEvents.UserPreferenceChanging, _
        AddressOf SystemEvents_UserPreferenceChanging

        AddHandler SystemEvents.PaletteChanged, _
        AddressOf SystemEvents_PaletteChanged

        AddHandler SystemEvents.DisplaySettingsChanged, _
        AddressOf SystemEvents_DisplaySettingsChanged

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If (components IsNot Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    Private components As System.ComponentModel.IContainer

    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

        Me.SuspendLayout()

        '
        'Form1
        '
        Me.ClientSize = New System.Drawing.Size(648, 398)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)

    End Sub

    ' This method is called when a user preference changes.
    Private Sub SystemEvents_UserPreferenceChanging( _
    ByVal sender As Object, _
    ByVal e As UserPreferenceChangingEventArgs)

        MessageBox.Show("UserPreferenceChanging: " & _
        e.Category.ToString())
    End Sub

    ' This method is called when the palette changes.
    Private Sub SystemEvents_PaletteChanged( _
    ByVal sender As Object, _
    ByVal e As EventArgs)

        MessageBox.Show("PaletteChanged")

    End Sub

    ' This method is called when the display settings change.
    Private Sub SystemEvents_DisplaySettingsChanged( _
    ByVal sender As Object, _
    ByVal e As EventArgs)

        MessageBox.Show("The display settings changed.")

    End Sub

End Class

using System;
using Microsoft.Win32;

public sealed class App
{
    static void Main()
    {
        // Set the SystemEvents class to receive event notification when a user
        // preference changes, the palette changes, or when display settings change.
        SystemEvents.UserPreferenceChanging += new
            UserPreferenceChangingEventHandler(SystemEvents_UserPreferenceChanging);
        SystemEvents.PaletteChanged += new
            EventHandler(SystemEvents_PaletteChanged);
        SystemEvents.DisplaySettingsChanged += new
            EventHandler(SystemEvents_DisplaySettingsChanged);

        // For demonstration purposes, this application sits idle waiting for events.
        Console.WriteLine("This application is waiting for system events.");
        Console.WriteLine("Press <Enter> to terminate this application.");
        Console.ReadLine();
    }

    // This method is called when a user preference changes.
    static void SystemEvents_UserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e)
    {
        Console.WriteLine("The user preference is changing. Category={0}", e.Category);
    }

    // This method is called when the palette changes.
    static void SystemEvents_PaletteChanged(object sender, EventArgs e)
    {
        Console.WriteLine("The palette changed.");
    }

    // This method is called when the display settings change.
    static void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
    {
        Console.WriteLine("The display settings changed.");
    }
}

// This code produces the following output.
//
//  This app is waiting for system events.
//  Press <Enter> to terminate this application.
//  Display Settings changed.
//  User preference is changing. Category=General

#using <System.dll>

using namespace System;
using namespace Microsoft::Win32;

// This method is called when a user preference changes.
void SystemEvents_UserPreferenceChanging(Object^ sender,
     UserPreferenceChangingEventArgs^ e)
 {
     Console::WriteLine("The user preference is changing. Category={0}",
         e->Category);
 }

// This method is called when the palette changes.
void SystemEvents_PaletteChanged(Object^ sender, EventArgs^ e)
{
    Console::WriteLine("The palette changed.");
}

// This method is called when the display settings change.
void SystemEvents_DisplaySettingsChanged(Object^ sender,
    EventArgs^ e)
{
    Console::WriteLine("The display settings changed.");
}

int main()
{
    // Set the SystemEvents class to receive event notification
    // when a user preference changes, the palette changes, or
    // when display settings change.
    SystemEvents::UserPreferenceChanging += gcnew
        UserPreferenceChangingEventHandler(
        SystemEvents_UserPreferenceChanging);
    SystemEvents::PaletteChanged += gcnew
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents::DisplaySettingsChanged += gcnew
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle
    // waiting for events.
    Console::WriteLine("This application is waiting for system events.");
    Console::WriteLine("Press <Enter> to terminate this application.");
    Console::ReadLine();
}

// This code produces the following output.
//
//  This app is waiting for system events.
//  Press <Enter> to terminate this application.
//  Display Settings changed.
//  User preference is changing. Category=General

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UserPreferenceChangingEventArgs 类
UserPreferenceChangingEventArgs 成员
Microsoft.Win32 命名空间
UserPreferenceChangingEventHandler
UserPreferenceCategory


UserPreferenceChangingEventHandler 委托

UserPreferenceChangingEventHandler 委托

表示将处理 UserPreferenceChanging 事件的方法。

命名空间： Microsoft.Win32
程序集： System（在 System.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Delegate Sub UserPreferenceChangingEventHandler ( _
    sender As Object, _
    e As UserPreferenceChangingEventArgs _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public delegate void UserPreferenceChangingEventHandler(
    Object sender,
    UserPreferenceChangingEventArgs e
)
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public delegate void UserPreferenceChangingEventHandler(
    Object^ sender,
    UserPreferenceChangingEventArgs^ e
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type UserPreferenceChangingEventHandler =
    delegate of
        sender:Object *
        e:UserPreferenceChangingEventArgs -> unit

参数

sender
类型： System Object
事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 事件源。当 SystemEvents 类引发此事件时，此对象总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
e
类型： Microsoft.Win32 UserPreferenceChangingEventArgs
包含事件数据的 UserPreferenceChangedEventArgs。

当创建 UserPreferenceChangingEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 UserPreferenceChangingEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 UserPreferenceChangingEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 UserPreferenceChangingEventHandler 委托时，将标识处理事件的方法。若要使事件与事件处理方法相关联，请将委托的实例添加到该事件中。除非移除委托，否则每当事件发生时都会调用该事件处理方法。有关事件处理程序委托的更多信息，请参见 事件和委托。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示如何使用 UserPreferenceChangingEventHandler 类型来监视 UserPreferenceChanging 事件。此代码示例摘自一个为 SystemEvents 类提供的更大的示例。 下面的代码示例演示如何使用 UserPreferenceChangingEventHandler 类型来监视 UserPreferenceChanging 事件。此代码示例摘自一个为 SystemEvents 类提供的更大的示例。

Imports System
Imports Microsoft.Win32
Imports System.Windows.Forms

Friend Class Form1
    Inherits System.Windows.Forms.Form

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Set the SystemEvents class to receive event notification
        'when a user preference changes, the palette changes, or
        'when display settings change.
        AddHandler SystemEvents.UserPreferenceChanging, _
        AddressOf SystemEvents_UserPreferenceChanging

        AddHandler SystemEvents.PaletteChanged, _
        AddressOf SystemEvents_PaletteChanged

        AddHandler SystemEvents.DisplaySettingsChanged, _
        AddressOf SystemEvents_DisplaySettingsChanged

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If (components IsNot Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    Private components As System.ComponentModel.IContainer

    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

        Me.SuspendLayout()

        '
        'Form1
        '
        Me.ClientSize = New System.Drawing.Size(648, 398)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)

    End Sub

    ' This method is called when a user preference changes.
    Private Sub SystemEvents_UserPreferenceChanging( _
    ByVal sender As Object, _
    ByVal e As UserPreferenceChangingEventArgs)

        MessageBox.Show("UserPreferenceChanging: " & _
        e.Category.ToString())
    End Sub

    ' This method is called when the palette changes.
    Private Sub SystemEvents_PaletteChanged( _
    ByVal sender As Object, _
    ByVal e As EventArgs)

        MessageBox.Show("PaletteChanged")

    End Sub

    ' This method is called when the display settings change.
    Private Sub SystemEvents_DisplaySettingsChanged( _
    ByVal sender As Object, _
    ByVal e As EventArgs)

        MessageBox.Show("The display settings changed.")

    End Sub

End Class

using System;
using Microsoft.Win32;

public sealed class App
{
    static void Main()
    {
        // Set the SystemEvents class to receive event notification when a user
        // preference changes, the palette changes, or when display settings change.
        SystemEvents.UserPreferenceChanging += new
            UserPreferenceChangingEventHandler(SystemEvents_UserPreferenceChanging);
        SystemEvents.PaletteChanged += new
            EventHandler(SystemEvents_PaletteChanged);
        SystemEvents.DisplaySettingsChanged += new
            EventHandler(SystemEvents_DisplaySettingsChanged);

        // For demonstration purposes, this application sits idle waiting for events.
        Console.WriteLine("This application is waiting for system events.");
        Console.WriteLine("Press <Enter> to terminate this application.");
        Console.ReadLine();
    }

    // This method is called when a user preference changes.
    static void SystemEvents_UserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e)
    {
        Console.WriteLine("The user preference is changing. Category={0}", e.Category);
    }

    // This method is called when the palette changes.
    static void SystemEvents_PaletteChanged(object sender, EventArgs e)
    {
        Console.WriteLine("The palette changed.");
    }

    // This method is called when the display settings change.
    static void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
    {
        Console.WriteLine("The display settings changed.");
    }
}

// This code produces the following output.
//
//  This app is waiting for system events.
//  Press <Enter> to terminate this application.
//  Display Settings changed.
//  User preference is changing. Category=General

#using <System.dll>

using namespace System;
using namespace Microsoft::Win32;

// This method is called when a user preference changes.
void SystemEvents_UserPreferenceChanging(Object^ sender,
     UserPreferenceChangingEventArgs^ e)
 {
     Console::WriteLine("The user preference is changing. Category={0}",
         e->Category);
 }

// This method is called when the palette changes.
void SystemEvents_PaletteChanged(Object^ sender, EventArgs^ e)
{
    Console::WriteLine("The palette changed.");
}

// This method is called when the display settings change.
void SystemEvents_DisplaySettingsChanged(Object^ sender,
    EventArgs^ e)
{
    Console::WriteLine("The display settings changed.");
}

int main()
{
    // Set the SystemEvents class to receive event notification
    // when a user preference changes, the palette changes, or
    // when display settings change.
    SystemEvents::UserPreferenceChanging += gcnew
        UserPreferenceChangingEventHandler(
        SystemEvents_UserPreferenceChanging);
    SystemEvents::PaletteChanged += gcnew
        EventHandler(SystemEvents_PaletteChanged);
    SystemEvents::DisplaySettingsChanged += gcnew
        EventHandler(SystemEvents_DisplaySettingsChanged);

    // For demonstration purposes, this application sits idle
    // waiting for events.
    Console::WriteLine("This application is waiting for system events.");
    Console::WriteLine("Press <Enter> to terminate this application.");
    Console::ReadLine();
}

// This code produces the following output.
//
//  This app is waiting for system events.
//  Press <Enter> to terminate this application.
//  Display Settings changed.
//  User preference is changing. Category=General

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Microsoft.Win32 命名空间
UserPreferenceChangingEventArgs
UserPreferenceChanging
SystemEvents


System 命名空间

System 命名空间

包含允许您将 URI 与 URI 模板和 URI 模板组进行匹配的类。

 | 类 | 说明
公共类 | AccessViolationException | 在尝试读写受保护内存时引发的异常。
公共类 | ActivationContext | 标识当前应用程序的激活上下文。无法继承此类。 标识当前应用程序的激活上下文。无法继承此类。
公共类 | Activator | 包含特定的方法，用以在本地或从远程创建对象类型，或获取对现有远程对象的引用。此类不能被继承。 包含特定的方法，用以在本地或从远程创建对象类型，或获取对现有远程对象的引用。此类不能被继承。
公共类 | AggregateException | 表示在应用程序执行期间发生的一个或多个错误。
公共类 | AppDomain | 表示应用程序域，它是一个应用程序在其中执行的独立环境。此类不能被继承。 表示应用程序域，它是一个应用程序在其中执行的独立环境。此类不能被继承。
公共类 | AppDomainManager | 提供非托管宿主的等效托管宿主。
公共类 | AppDomainSetup | 表示可以添加到 AppDomain 的实例的程序集绑定信息。
公共类 | AppDomainUnloadedException | 在尝试访问已卸载的应用程序域时引发的异常。
公共类 | ApplicationException | 发生非致命应用程序错误时引发的异常。
公共类 | ApplicationId | 所含信息用于唯一标识基于清单的应用程序。无法继承此类。 所含信息用于唯一标识基于清单的应用程序。无法继承此类。
公共类 | ApplicationIdentity | 提供唯一标识清单激活的应用程序的能力。无法继承此类。 提供唯一标识清单激活的应用程序的能力。无法继承此类。
公共类 | ArgumentException | 在向方法提供的其中一个参数无效时引发的异常。
公共类 | ArgumentNullException | 当将空引用（在 Visual Basic 中为 Nothing）传递给不接受它作为有效参数的方法时引发的异常。
公共类 | ArgumentOutOfRangeException | 当参数值超出调用的方法所定义的允许取值范围时引发的异常。
公共类 | ArithmeticException | 因算术运算、类型转换或转换操作中的错误而引发的异常。
公共类 | Array | 提供创建、操作、搜索和排序数组的方法，因而在公共语言运行时中用作所有数组的基类。
公共类 | ArrayTypeMismatchException | 当尝试在数组中存储类型不正确的元素时引发的异常。
公共类 | AssemblyLoadEventArgs | 为 AssemblyLoad 事件提供数据。
公共类 | Attribute | 表示自定义特性的基类。
公共类 | AttributeUsageAttribute | 指定另一特性类的用法。无法继承此类。 指定另一特性类的用法。无法继承此类。
公共类 | BadImageFormatException | 当动态链接库 (DLL) 或可执行程序的文件映像无效时引发的异常。
公共类 | BitConverter | 将基础数据类型与字节数组相互转换。
公共类 | Buffer | 操作基元类型的数组。
公共类 | CannotUnloadAppDomainException | 卸载应用程序域的尝试失败时引发的异常。
公共类 | CharEnumerator | 支持循环访问 String 对象并读取它的各个字符。无法继承此类。 支持循环访问 String 对象并读取它的各个字符。无法继承此类。
公共类 | CLSCompliantAttribute | 指示程序元素是否符合公共语言规范 (CLS)。无法继承此类。 指示程序元素是否符合公共语言规范 (CLS)。无法继承此类。
公共类 | Console | 表示控制台应用程序的标准输入流、输出流和错误流。此类不能被继承。 表示控制台应用程序的标准输入流、输出流和错误流。此类不能被继承。
公共类 | ConsoleCancelEventArgs | 为 Console..::.CancelKeyPress 事件提供数据。无法继承此类。 为 Console..::.CancelKeyPress 事件提供数据。无法继承此类。
公共类 | ContextBoundObject | 定义所有上下文绑定类的基类。
公共类 | ContextMarshalException | 在尝试将对象封送过上下文边界失败时引发的异常。
公共类 | ContextStaticAttribute | 指示静态字段的值是特定上下文的唯一值。
公共类 | Convert | 将一个基本数据类型转换为另一个基本数据类型。
公共类 | DataMisalignedException | 在从不是数据大小倍数的地址读取数据单元或将数据单元写入此类地址时引发的异常。无法继承此类。 在从不是数据大小倍数的地址读取数据单元或将数据单元写入此类地址时引发的异常。无法继承此类。
公共类 | DBNull | 表示不存在的值。无法继承此类。 表示不存在的值。无法继承此类。
公共类 | Delegate | 表示委托，委托是一种数据结构，它引用静态方法或引用类实例及该类的实例方法。
公共类 | DivideByZeroException | 尝试用零除整数值或十进制数值时引发的异常。
公共类 | DllNotFoundException | 当未找到在 DLL 导入中指定的 DLL 时所引发的异常。
公共类 | DuplicateWaitObjectException | 当对象在同步对象数组中不止一次出现时引发的异常。
公共类 | EntryPointNotFoundException | 因不存在项方法而导致加载类的尝试失败时引发的异常。
公共类 | Enum | 为枚举提供基类。
公共类 | Environment | 提供有关当前环境和平台的信息以及操作它们的方法。此类不能被继承。 提供有关当前环境和平台的信息以及操作它们的方法。此类不能被继承。
公共类 | EventArgs | EventArgs 是包含事件数据的类的基类。
公共类 | Exception | 表示在应用程序执行期间发生的错误。
公共类 | ExecutionEngineException | 已过时。 当公共语言运行时的执行引擎中发生内部错误时引发的异常。此类不能被继承。 当公共语言运行时的执行引擎中发生内部错误时引发的异常。此类不能被继承。
公共类 | FieldAccessException | 当尝试非法访问类中的私有字段或受保护字段时引发的异常。
公共类 | FileStyleUriParser | 基于 File 方案的可自定义分析器。
公共类 | FlagsAttribute | 指示可以将枚举作为位域（即一组标志）处理。
公共类 | FormatException | 当参数格式不符合调用的方法的参数规范时引发的异常。
公共类 | FtpStyleUriParser | 基于文件传输协议 (FTP) 方案的可自定义分析器。
公共类 | GC | 控制系统垃圾回收器（一种自动回收未使用内存的服务）。
公共类 | GenericUriParser | 用于分层 URI 的可自定义分析器。
公共类 | GopherStyleUriParser | 基于 Gopher 方案的可自定义分析器。
公共类 | HttpStyleUriParser | 基于 HTTP 方案的可自定义分析器。
公共类 | IndexOutOfRangeException | 尝试访问索引超出数组界限的数组元素时引发的异常。无法继承此类。 尝试访问索引超出数组界限的数组元素时引发的异常。无法继承此类。
公共类 | InsufficientExecutionStackException | 执行堆栈不足，大多数方法无法执行时所引发的异常。
公共类 | InsufficientMemoryException | 当检测到没有足够的可用内存时引发的异常。无法继承此类。 当检测到没有足够的可用内存时引发的异常。无法继承此类。
公共类 | InvalidCastException | 因无效类型转换或显式转换引发的异常。
公共类 | InvalidOperationException | 当方法调用对于对象的当前状态无效时引发的异常。
公共类 | InvalidProgramException | 当程序包含无效 Microsoft 中间语言 (MSIL) 或元数据时将引发的异常。这通常表示生成程序的编译器中有 bug。 当程序包含无效 Microsoft 中间语言 (MSIL) 或元数据时将引发的异常。这通常表示生成程序的编译器中有 bug。
公共类 | InvalidTimeZoneException | 时区信息无效时引发的异常。
公共类 | Lazy T | 提供对延迟初始化的支持。
公共类 | Lazy T, TMetadata | 提供对对象及其关联的元数据的延迟间接引用，以供 Managed Extensibility Framework 使用。
公共类 | LdapStyleUriParser | 基于 轻型目录访问协议 (LDAP) 方案的可自定义分析器。
公共类 | LoaderOptimizationAttribute | 用于为可执行应用程序的主方法设置默认的加载程序优化策略。
公共类 | LocalDataStoreSlot | 封装内存槽以存储本地数据。无法继承此类。 封装内存槽以存储本地数据。无法继承此类。
公共类 | MarshalByRefObject | 允许在支持远程处理的应用程序中跨应用程序域边界访问对象。
公共类 | Math | 为三角函数、对数函数和其他通用数学函数提供常数和静态方法。
公共类 | MemberAccessException | 访问类成员的尝试失败时引发的异常。
公共类 | MethodAccessException | 存在想要访问某个方法（如访问部分可信代码中的私有方法）的无效尝试时，所引发的异常。
公共类 | MissingFieldException | 尝试动态访问不存在的字段时引发的异常。
公共类 | MissingMemberException | 尝试动态访问不存在的类成员时引发的异常。
公共类 | MissingMethodException | 尝试动态访问不存在的方法时引发的异常。
公共类 | MTAThreadAttribute | 指示应用程序的 COM 线程模型为多线程单元 (MTA)。
公共类 | MulticastDelegate | 表示多路广播委托；即，其调用列表中可以拥有多个元素的委托。
公共类 | MulticastNotSupportedException | 尝试组合两个基于 Delegate 类型而非 MulticastDelegate 类型的委托时引发的异常。无法继承此类。 尝试组合两个基于 Delegate 类型而非 MulticastDelegate 类型的委托时引发的异常。无法继承此类。
公共类 | NetPipeStyleUriParser | 基于“Indigo”系统的 NetPipe 方案的分析器。
公共类 | NetTcpStyleUriParser | 基于“Indigo”系统的 NetTcp 方案的分析器。
公共类 | NewsStyleUriParser | 基于使用网络新闻传输协议 (NNTP) 的新闻方案的可自定义分析器。
公共类 | NonSerializedAttribute | 指示可序列化类的某个字段不应被序列化。无法继承此类。 指示可序列化类的某个字段不应被序列化。无法继承此类。
公共类 | NotFiniteNumberException | 当浮点值为正无穷大、负无穷大或非数字 (NaN) 时引发的异常。
公共类 | NotImplementedException | 在无法实现请求的方法或操作时引发的异常。
公共类 | NotSupportedException | 当调用的方法不受支持，或尝试读取、查找或写入不支持调用功能的流时引发的异常。
公共类 | Nullable | 支持可为其分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的值类型，如引用类型。无法继承此类。 支持可为其分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的值类型，如引用类型。无法继承此类。
公共类 | NullReferenceException | 尝试取消引用空对象引用时引发的异常。
公共类 | Object | 支持 .NET Framework 类层次结构中的所有类，并为派生类提供低级别服务。这是 .NET Framework 中所有类的最终基类；它是类型层次结构的根。 支持 .NET Framework 类层次结构中的所有类，并为派生类提供低级别服务。这是 .NET Framework 中所有类的最终基类；它是类型层次结构的根。
公共类 | ObjectDisposedException | 对已释放的对象执行操作时所引发的异常。
公共类 | ObsoleteAttribute | 标记不再使用的程序元素。无法继承此类。 标记不再使用的程序元素。无法继承此类。
公共类 | OperatingSystem | 表示有关操作系统的信息，如版本和平台标识符。此类不能被继承。 表示有关操作系统的信息，如版本和平台标识符。此类不能被继承。
公共类 | OperationCanceledException | 取消线程正在执行的操作时在线程中引发的异常。
公共类 | OutOfMemoryException | 没有足够的内存继续执行程序时引发的异常。
公共类 | OverflowException | 在选中的上下文中所进行的算术运算、类型转换或转换操作导致溢出时引发的异常。
公共类 | ParamArrayAttribute | 指示方法在调用中将允许参数的数目可变。此类不能被继承。 指示方法在调用中将允许参数的数目可变。此类不能被继承。
公共类 | PlatformNotSupportedException | 当功能未在特定平台上运行时所引发的异常。
公共类 | Random | 表示伪随机数生成器，一种能够产生满足某些随机性统计要求的数字序列的设备。
公共类 | RankException | 将维数错误的数组传递给方法时引发的异常。
公共类 | ResolveEventArgs | 为加载程序解析事件（如 TypeResolve、ResourceResolve、ReflectionOnlyAssemblyResolve 和 AssemblyResolve 事件）提供数据。
公共类 | SerializableAttribute | 指示一个类可以序列化。无法继承此类。 指示一个类可以序列化。无法继承此类。
公共类 | StackOverflowException | 因包含的嵌套方法调用过多而导致执行堆栈溢出时引发的异常。无法继承此类。 因包含的嵌套方法调用过多而导致执行堆栈溢出时引发的异常。无法继承此类。
公共类 | STAThreadAttribute | 指示应用程序的 COM 线程模型是单线程单元 (STA)。
公共类 | String | 表示文本，即一系列 Unicode 字符。
公共类 | StringComparer | 表示一种字符串比较操作，该操作使用特定的大小写以及基于区域性的比较规则或序号比较规则。
公共类 | SystemException | 为 System 命名空间中的预定义异常定义基类。
公共类 | ThreadStaticAttribute | 指示静态字段的值对于每个线程都是唯一的。
公共类 | TimeoutException | 给进程或操作分配的时间过期时引发的异常。
公共类 | TimeZone | 表示时区。
公共类 | TimeZoneInfo | 表示世界上的任何时区。
公共类 | TimeZoneInfo AdjustmentRule | 提供有关时区调整（如与夏时制之间的转换）的信息。
公共类 | TimeZoneNotFoundException | 找不到时区时引发的异常。
公共类 | Tuple | 提供用于创建元组对象的静态方法。
公共类 | Tuple T1 | 表示 1 元组，即单一实例。
公共类 | Tuple T1, T2 | 表示 2 元组，即二元组。
公共类 | Tuple T1, T2, T3 | 表示 3 元组，即三元组。
公共类 | Tuple T1, T2, T3, T4 | 表示 4 元组，即四元组。
公共类 | Tuple T1, T2, T3, T4, T5 | 表示 5 元组，即五元组。
公共类 | Tuple T1, T2, T3, T4, T5, T6 | 表示 6 元组，即六元组。
公共类 | Tuple T1, T2, T3, T4, T5, T6, T7 | 表示 7 元组，即七元组。
公共类 | Tuple T1, T2, T3, T4, T5, T6, T7, TRest | 表示 n 元组，其中 n 为 8 或更大。
公共类 | Type | 表示类型声明：类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义，以及开放或封闭构造的泛型类型。
公共类 | TypeAccessException | 当方法尝试使用它无权访问的类型时引发的异常。
公共类 | TypeInitializationException | 作为由类初始值设定项引发的异常周围的包装引发的异常。此类不能被继承。 作为由类初始值设定项引发的异常周围的包装引发的异常。此类不能被继承。
公共类 | TypeLoadException | 类型加载失败发生时引发的异常。
公共类 | TypeUnloadedException | 尝试访问已卸载的类时引发的异常。
公共类 | UnauthorizedAccessException | 当操作系统因 I/O 错误或指定类型的安全错误而拒绝访问时所引发的异常。
公共类 | UnhandledExceptionEventArgs | 为以下情况下引发的事件提供数据：存在一个不是在任何应用程序域中处理的异常。
公共类 | Uri | 提供统一资源标识符 (URI) 的对象表示形式和对 URI 各部分的轻松访问。
公共类 | UriBuilder | 为统一资源标识符 (URI) 提供自定义构造函数，并修改 Uri 类的 URI。
公共类 | UriFormatException | 当检测到无效的统一资源标识符 (URI) 时引发的异常。
公共类 | UriParser | 分析新的 URI 方案。这是一个抽象类。 分析新的 URI 方案。这是一个抽象类。
公共类 | UriTemplate | 一个表示统一资源标识符 (URI) 模板的类。
公共类 | UriTemplateEquivalenceComparer | 一个用于比较 UriTemplate 实例以确定结构（而非引用）等效性的类。
公共类 | UriTemplateMatch | 一个类，表示对 UriTemplate 实例执行匹配操作的结果。
公共类 | UriTemplateMatchException | 表示将 Uri 与 UriTemplateTable 匹配时发生的错误。
公共类 | UriTemplateTable | 一个表示一组关联 UriTemplate 对象的类。
公共类 | UriTypeConverter | 将 String 类型转换为 Uri 类型，反之亦然。
公共类 | ValueType | 提供值类型的基类。
公共类 | Version | 表示公共语言运行时程序集的版本号。此类不能被继承。 表示公共语言运行时程序集的版本号。此类不能被继承。
公共类 | WeakReference | 表示弱引用，即在引用对象的同时仍然允许垃圾回收来回收该对象。
 | 结构 | 说明
公共结构 | ArgIterator | 表示变长参数列表；即采用可变数量的参数的函数的参数。
公共结构 | ArraySegment T | 分隔一维数组的一部分。
公共结构 | Boolean | 表示布尔值。
公共结构 | Byte | 表示一个 8 位无符号整数。
公共结构 | Char | 表示一个 Unicode 字符。
公共结构 | ConsoleKeyInfo | 描述按下的控制台键，包括控制台键表示的字符以及 Shift、Alt 和 Ctrl 修改键的状态。
公共结构 | DateTime | 表示时间上的一刻，通常以日期和当天的时间表示。
公共结构 | DateTimeOffset | 表示一个时间点，通常以相对于协调世界时 (UTC) 的日期和时间来表示。
公共结构 | Decimal | 表示十进制数。
公共结构 | Double | 表示一个双精度浮点数。
公共结构 | Guid | 表示全局唯一标识符 (GUID)。
公共结构 | Int16 | 表示 16 位有符号的整数。
公共结构 | Int32 | 表示 32 位有符号的整数。
公共结构 | Int64 | 表示 64 位有符号的整数。
公共结构 | IntPtr | 用于表示指针或句柄的平台特定类型。
公共结构 | ModuleHandle | 表示模块的运行时句柄。
公共结构 | Nullable T | 表示基础类型为值类型的对象，值类型与引用类型一样也可以分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
公共结构 | RuntimeArgumentHandle | 引用变长参数列表。
公共结构 | RuntimeFieldHandle | 使用内部元数据标记表示一个字段。
公共结构 | RuntimeMethodHandle | RuntimeMethodHandle 是方法的内部元数据表示形式的句柄。
公共结构 | RuntimeTypeHandle | 表示使用内部元数据标记的类型。
公共结构 | SByte | 表示 8 位有符号整数。
公共结构 | Single | 表示一个单精度浮点数字。
公共结构 | TimeSpan | 表示一个时间间隔。
公共结构 | TimeZoneInfo TransitionTime | 提供有关特定时区中特定时间更改（例如从夏时制更改为标准时间，或者从标准时间更改为夏时制）的信息。
公共结构 | TypedReference | 描述既包含指向某位置的托管指针，也包含该位置可能存储的类型的运行时表示形式的对象。
公共结构 | UInt16 | 表示 16 位无符号整数。
公共结构 | UInt32 | 表示 32 位无符号整数。
公共结构 | UInt64 | 表示 64 位无符号整数。
公共结构 | UIntPtr | 用于表示指针或句柄的平台特定类型。
公共结构 | Void | 为不返回值的方法指定返回值类型。
 | 接口 | 说明
公共接口 | _AppDomain | 向非托管代码公开 System..::.AppDomain 类的公共成员。
公共接口 | IAppDomainSetup | 表示可以添加到 AppDomain 的实例的程序集绑定信息。
公共接口 | IAsyncResult | 表示异步操作的状态。
公共接口 | ICloneable | 支持克隆，即用与现有实例相同的值创建类的新实例。
公共接口 | IComparable | 定义一种特定于类型的通用比较方法，值类型或类通过实现此方法对其实例进行排序。
公共接口 | IComparable T | 定义由值类型或类实现的通用的比较方法，以为排序实例创建类型特定的比较方法。
公共接口 | IConvertible | 定义特定的方法，这些方法将实现引用或值类型的值转换为具有等效值的公共语言运行时类型。
公共接口 | ICustomFormatter | 定义一种方法，它支持自定义设置对象的值的格式。
公共接口 | IDisposable | 定义一种释放分配的资源的方法。
公共接口 | IEquatable T | 定义一个通用的方法，由值类型或类实现以创建类型特定的方法，用于确定实例间的相等性。
公共接口 | IFormatProvider | 提供用于检索控制格式化的对象的机制。
公共接口 | IFormattable | 提供将对象的值格式化为字符串表示形式的功能。
公共接口 | IObservable T | 定义基于推送的通知的提供程序。
公共接口 | IObserver T | 提供用于接收基于推送的通知的机制。
公共接口 | IServiceProvider | 定义一种检索服务对象的机制，服务对象是为其他对象提供自定义支持的对象。
 | 委托 | 说明
公共委托 | Action | 封装一个方法，该方法不具有参数并且不返回值。
公共委托 | Action T | 封装一个方法，该方法只有一个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 | 封装一个方法，该方法具有 10 个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 | 封装一个方法，该方法具有 11 个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 | 封装一个方法，该方法具有 12 个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 | 封装一个方法，该方法具有 13 个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 | 封装一个方法，该方法具有 14 个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 | 封装一个方法，该方法具有 15 个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 | 封装一个方法，该方法具有 16 个参数并且不返回值。
公共委托 | Action T1, T2 | 封装一个方法，该方法具有两个参数并且不返回值。
公共委托 | Action T1, T2, T3 | 封装一个方法，该方法具有三个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4 | 封装一个方法，该方法具有四个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5 | 封装一个方法，该方法具有五个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6 | 封装一个方法，该方法具有六个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7 | 封装一个方法，该方法具有七个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7, T8 | 封装一个方法，该方法具有八个参数并且不返回值。
公共委托 | Action T1, T2, T3, T4, T5, T6, T7, T8, T9 | 封装一个方法，该方法具有九个参数并且不返回值。
公共委托 | AppDomainInitializer | 表示在应用程序域初始化时要调用的回调方法。
公共委托 | AssemblyLoadEventHandler | 表示处理 AppDomain 的 AssemblyLoad 事件的方法。
公共委托 | AsyncCallback | 引用在相应异步操作完成时调用的方法。
公共委托 | Comparison T | 表示比较同一类型的两个对象的方法。
公共委托 | ConsoleCancelEventHandler | 表示将要处理 System..::.Console 的 CancelKeyPress 事件的方法。
公共委托 | Converter TInput, TOutput | 表示将对象从一种类型转换为另一种类型的方法。
公共委托 | CrossAppDomainDelegate | 由 DoCallBack 使用，用于跨应用程序域的调用。
公共委托 | EventHandler | 表示将处理不包含事件数据的事件的方法。
公共委托 | EventHandler TEventArgs | 表示将处理事件的方法。
公共委托 | Func TResult | 封装一个不具有参数但却返回 TResult 参数指定的类型值的方法。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult | 封装一个方法，该方法具有九个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult | 封装一个方法，该方法具有 10 个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult | 封装一个方法，该方法具有 11 个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult | 封装一个方法，该方法具有 12 个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult | 封装一个方法，该方法具有 13 个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult | 封装一个方法，该方法具有 14 个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult | 封装一个方法，该方法具有 15 个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult | 封装一个方法，该方法具有 16 个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T, TResult | 封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。
公共委托 | Func T1, T2, TResult | 封装一个具有两个参数并返回 TResult 参数指定的类型值的方法。
公共委托 | Func T1, T2, T3, TResult | 封装一个具有三个参数并返回 TResult 参数指定的类型值的方法。
公共委托 | Func T1, T2, T3, T4, TResult | 封装一个具有四个参数并返回 TResult 参数指定的类型值的方法。
公共委托 | Func T1, T2, T3, T4, T5, TResult | 封装一个方法，该方法具有五个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, TResult | 封装一个方法，该方法有六个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, TResult | 封装一个函数，该方法具有三个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Func T1, T2, T3, T4, T5, T6, T7, T8, TResult | 封装一个方法，该方法具有八个参数，并返回 TResult 参数所指定的类型的值。
公共委托 | Predicate T | 表示定义一组条件并确定指定对象是否符合这些条件的方法。
公共委托 | ResolveEventHandler | 表示处理 AppDomain 的 AppDomain..::.TypeResolve、AppDomain..::.ResourceResolve 或 AssemblyResolve 事件的方法。
公共委托 | UnhandledExceptionEventHandler | 表示将处理事件的方法，该事件由应用程序域不处理的异常引发。
 | 枚举 | 说明
公共枚举 | ActivationContext ContextForm | 指示清单激活的应用程序的上下文。
公共枚举 | AppDomainManagerInitializationOptions | 指定在初始化一个新域时自定义应用程序域管理器应采取的操作。
公共枚举 | AttributeTargets | 指定可以对它们应用特性的应用程序元素。
公共枚举 | Base64FormattingOptions | 指定相关的 Convert..::.ToBase64CharArray 和 Convert..::.ToBase64String 方法是否在其输出中插入分行符。
公共枚举 | ConsoleColor | 指定定义控制台前景色和背景色的常数。
公共枚举 | ConsoleKey | 指定控制台上的标准键。
公共枚举 | ConsoleModifiers | 表示键盘上的 Shift、Alt 和 Ctrl 修改键。
公共枚举 | ConsoleSpecialKey | 指定能够中断当前进程的修改键和控制台键的组合。
公共枚举 | DateTimeKind | 指定 DateTime 对象是表示本地时间、协调通用时间 (UTC)，还是既不指定为本地时间，也不指定为 UTC。
公共枚举 | DayOfWeek | 指定一周的某天。
公共枚举 | Environment SpecialFolder | 指定用于检索系统特殊文件夹的目录路径的枚举常数。
公共枚举 | Environment SpecialFolderOption | 指定用于获取特殊文件夹路径的选项。
公共枚举 | EnvironmentVariableTarget | 指定在 Set 或 Get 操作中存储或检索环境变量的位置。
公共枚举 | GCCollectionMode | 指定强制执行的垃圾回收的行为。
公共枚举 | GCNotificationStatus | 提供针对下一次完整垃圾回收通知的当前注册的相关信息。
公共枚举 | GenericUriParserOptions | 指定 UriParser 的选项。
公共枚举 | LoaderOptimization | 一个枚举，它与 LoaderOptimizationAttribute 类一起使用为可执行文件指定加载程序优化。
公共枚举 | MidpointRounding | 指定数学舍入方法应如何处理两个数字间的中间值。
公共枚举 | PlatformID | 标识程序集所支持的操作系统（或平台）。
公共枚举 | StringComparison | 指定 String..::.Compare 和 String..::.Equals 方法的某些重载要使用的区域、大小写和排序规则。
公共枚举 | StringSplitOptions | 指定适用的 String..::.Split 方法重载包含还是省略返回值中的空子字符串。
公共枚举 | TypeCode | 指定对象的类型。
公共枚举 | UriComponents | 指定 Uri 的各个部分。
公共枚举 | UriFormat | 控制 URI 信息的转义方式。
公共枚举 | UriHostNameType | 为 Uri..::.CheckHostName 方法定义主机名类型。
公共枚举 | UriIdnScope | 提供 System.Configuration 命名空间中的 System.Configuration..::.IdnElement 的配置设置的可能值。
公共枚举 | UriKind | 定义 Uri..::.IsWellFormedUriString(String, UriKind) 的 Uri 的类型和几种 Uri..::.Uri 方法。
公共枚举 | UriPartial | 为 Uri..::.GetLeftPart 方法定义 URI 的各部分。


_AppDomain 接口

_AppDomain 接口
成员

向非托管代码公开 System..::.AppDomain 类的公共成员。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<GuidAttribute("05F696DC-2B29-3663-AD8B-C4389CF2A713")> _
<CLSCompliantAttribute(False)> _
<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _
<ComVisibleAttribute(True)> _
Public Interface _AppDomain
[GuidAttribute("05F696DC-2B29-3663-AD8B-C4389CF2A713")]
[CLSCompliantAttribute(false)]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
[ComVisibleAttribute(true)]
public interface _AppDomain
[GuidAttribute(L"05F696DC-2B29-3663-AD8B-C4389CF2A713")]
[CLSCompliantAttribute(false)]
[InterfaceTypeAttribute(ComInterfaceType::InterfaceIsIUnknown)]
[ComVisibleAttribute(true)]
public interface class _AppDomain
[<GuidAttribute("05F696DC-2B29-3663-AD8B-C4389CF2A713")>]
[<CLSCompliantAttribute(false)>]
[<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)>]
[<ComVisibleAttribute(true)>]
type _AppDomain =  interface end

此接口保留可由非托管 COM 对象访问的 System..::.AppDomain 类成员的 vtable 顺序。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 成员
System 命名空间


_AppDomain 成员

_AppDomain 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
_AppDomain 接口

向非托管代码公开 System..::.AppDomain 类的公共成员。

_AppDomain 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

_AppDomain 接口
System 命名空间


_AppDomain 方法

_AppDomain 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
_AppDomain 接口

_AppDomain 类型公开以下成员。

名称 说明
页首

参考

_AppDomain 接口
System 命名空间


_AppDomain ..::.AppendPrivatePath 方法

_AppDomain
.
.
::
.
AppendPrivatePath 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.AppendPrivatePath 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub AppendPrivatePath ( _
    path As String _
)
void AppendPrivatePath(
    string path
)
void AppendPrivatePath(
    String^ path
)
abstract AppendPrivatePath :
        path:string -> unit

参数

path
类型： System String
要追加到专用路径的目录名称。

请参见 AppDomain..::.AppendPrivatePath 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.ClearPrivatePath 方法

_AppDomain
.
.
::
.
ClearPrivatePath 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ClearPrivatePath 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub ClearPrivatePath
void ClearPrivatePath()
void ClearPrivatePath()
abstract ClearPrivatePath : unit -> unit

请参见 AppDomain..::.ClearPrivatePath 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.ClearShadowCopyPath 方法

_AppDomain
.
.
::
.
ClearShadowCopyPath 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ClearShadowCopyPath 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub ClearShadowCopyPath
void ClearShadowCopyPath()
void ClearShadowCopyPath()
abstract ClearShadowCopyPath : unit -> unit

请参见 AppDomain..::.ClearShadowCopyPath 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.CreateInstance 方法

_AppDomain
.
.
::
.
CreateInstance 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.CreateInstance 方法的版本无关的访问。

名称 说明
页首

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.CreateInstance 方法 (String, String)

_AppDomain
.
.
::
.
CreateInstance 方法 (String, String)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.CreateInstance 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function CreateInstance ( _
    assemblyName As String, _
    typeName As String _
) As ObjectHandle
ObjectHandle CreateInstance(
    string assemblyName,
    string typeName
)
ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName
)
abstract CreateInstance :
        assemblyName:string *
        typeName:string -> ObjectHandle

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。 一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。

请参见 AppDomain..::.CreateInstance 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
CreateInstance 重载
System 命名空间


_AppDomain ..::.CreateInstance 方法 (String, String, array<Object >[]()[])

_AppDomain
.
.
::
.
CreateInstance 方法 (String, String,
array<
Object
>
[]
()
[]
)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.CreateInstance(String, String, array<Object>[]()[]) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function CreateInstance ( _
    assemblyName As String, _
    typeName As String, _
    activationAttributes As Object() _
) As ObjectHandle
ObjectHandle CreateInstance(
    string assemblyName,
    string typeName,
    Object[] activationAttributes
)
ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName,
    array<Object^>^ activationAttributes
)
abstract CreateInstance :
        assemblyName:string *
        typeName:string *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。 一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。

参见 AppDomain..::.CreateInstance(String, String, array<Object>[]()[]) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
CreateInstance 重载
System 命名空间


_AppDomain ..::.CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

_AppDomain
.
.
::
.
CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.CreateInstance(String, String, Boolean, BindingFlags, Binder, array<Object>[]()[], CultureInfo, array<Object>[]()[], Evidence) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function CreateInstance ( _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityAttributes As Evidence _
) As ObjectHandle
ObjectHandle CreateInstance(
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityAttributes
)
ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityAttributes
)
abstract CreateInstance :
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> ObjectHandle

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityAttributes
类型： System.Security.Policy Evidence
用于授权创建 typeName 的信息。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。 一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。

参见 AppDomain..::.CreateInstance(String, String, Boolean, BindingFlags, Binder, array<Object>[]()[], CultureInfo, array<Object>[]()[], Evidence) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
CreateInstance 重载
System 命名空间


_AppDomain ..::.CreateInstanceFrom 方法

_AppDomain
.
.
::
.
CreateInstanceFrom 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.CreateInstanceFrom 方法的版本无关的访问。

名称 说明
页首

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.CreateInstanceFrom 方法 (String, String)

_AppDomain
.
.
::
.
CreateInstanceFrom 方法 (String, String)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.CreateInstanceFrom(String, String) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String _
) As ObjectHandle
ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName
)
ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName
)
abstract CreateInstanceFrom :
        assemblyFile:string *
        typeName:string -> ObjectHandle

参数

assemblyFile
类型： System String
文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。 文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。 一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。

参见 AppDomain..::.CreateInstanceFrom(String, String) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
CreateInstanceFrom 重载
System 命名空间


_AppDomain ..::.CreateInstanceFrom 方法 (String, String, array<Object >[]()[])

_AppDomain
.
.
::
.
CreateInstanceFrom 方法 (String, String,
array<
Object
>
[]
()
[]
)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.CreateInstanceFrom(String, String, array<Object>[]()[]) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String, _
    activationAttributes As Object() _
) As ObjectHandle
ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName,
    Object[] activationAttributes
)
ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName,
    array<Object^>^ activationAttributes
)
abstract CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyFile
类型： System String
文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。 文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。 一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。

参见 AppDomain..::.CreateInstanceFrom(String, String, array<Object>[]()[]) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
CreateInstanceFrom 重载
System 命名空间


_AppDomain ..::.CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

_AppDomain
.
.
::
.
CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, array<Object>[]()[], CultureInfo, array<Object>[]()[], Evidence) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityAttributes As Evidence _
) As ObjectHandle
ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityAttributes
)
ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityAttributes
)
abstract CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> ObjectHandle

参数

assemblyFile
类型： System String
文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。 文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityAttributes
类型： System.Security.Policy Evidence
用于授权创建 typeName 的信息。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。 一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。

参见 AppDomain..::.CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, array<Object>[]()[], CultureInfo, array<Object>[]()[], Evidence) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
CreateInstanceFrom 重载
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly 方法的版本无关的访问。

名称 说明
页首

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess)

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess _
) As AssemblyBuilder
AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access
)
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access
)
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
动态程序集的访问模式。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

参见 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, Evidence)

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, Evidence)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    evidence As Evidence _
) As AssemblyBuilder
AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    Evidence evidence
)
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    Evidence^ evidence
)
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        evidence:Evidence -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

参见 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String)

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String _
) As AssemblyBuilder
AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir
)
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir
)
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

参见 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence)

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    evidence As Evidence _
) As AssemblyBuilder
AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    Evidence evidence
)
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    Evidence^ evidence
)
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

参见 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet)

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet _
) As AssemblyBuilder
AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions
)
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions
)
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

参见 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet)

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    evidence As Evidence, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet _
) As AssemblyBuilder
AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    Evidence evidence,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions
)
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    Evidence^ evidence,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions
)
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

参见 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, PermissionSet, PermissionSet, PermissionSet)

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, PermissionSet, PermissionSet, PermissionSet)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, PermissionSet, PermissionSet, PermissionSet) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet _
) As AssemblyBuilder
AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions
)
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions
)
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

参见 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, PermissionSet, PermissionSet, PermissionSet) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet)

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    evidence As Evidence, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet _
) As AssemblyBuilder
AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    Evidence evidence,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions
)
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    Evidence^ evidence,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions
)
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

参见 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


_AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean)

_AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    evidence As Evidence, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet, _
    isSynchronized As Boolean _
) As AssemblyBuilder
AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    Evidence evidence,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions,
    bool isSynchronized
)
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    Evidence^ evidence,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions,
    bool isSynchronized
)
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet *
        isSynchronized:bool -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存动态程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存动态程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。
isSynchronized
类型： System Boolean
若要在动态程序集中同步模块、类型和成员的创建，则为 true；否则为 false。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

参见 AppDomain..::.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


_AppDomain ..::.DoCallBack 方法

_AppDomain
.
.
::
.
DoCallBack 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DoCallBack 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub DoCallBack ( _
    theDelegate As CrossAppDomainDelegate _
)
void DoCallBack(
    CrossAppDomainDelegate theDelegate
)
void DoCallBack(
    CrossAppDomainDelegate^ theDelegate
)
abstract DoCallBack :
        theDelegate:CrossAppDomainDelegate -> unit

参数

theDelegate
类型： System CrossAppDomainDelegate
指定要调用的方法的委托。

请参见 AppDomain..::.DoCallBack 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.Equals 方法

_AppDomain
.
.
::
.
Equals 方法
_AppDomain 接口

为 COM 对象提供对继承的 Object..::.Equals 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Equals ( _
    other As Object _
) As Boolean
bool Equals(
    Object other
)
bool Equals(
    Object^ other
)
abstract Equals :
        other:Object -> bool

参数

other
类型： System Object
要与当前 Object 进行比较的 Object。

返回值

类型： System Boolean
如果指定的 Object 等于当前的 Object，则为 true；否则为 false。

请参见 Object..::.Equals 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.ExecuteAssembly 方法

_AppDomain
.
.
::
.
ExecuteAssembly 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ExecuteAssembly 方法的版本无关的访问。

名称 说明
页首

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.ExecuteAssembly 方法 (String)

_AppDomain
.
.
::
.
ExecuteAssembly 方法 (String)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ExecuteAssembly(String) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ExecuteAssembly ( _
    assemblyFile As String _
) As Integer
int ExecuteAssembly(
    string assemblyFile
)
int ExecuteAssembly(
    String^ assemblyFile
)
abstract ExecuteAssembly :
        assemblyFile:string -> int

参数

assemblyFile
类型： System String
包含要执行程序集的文件的名称。

返回值

类型： System Int32
程序集的入口点返回的值。

参见 AppDomain..::.ExecuteAssembly(String) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
ExecuteAssembly 重载
System 命名空间


_AppDomain ..::.ExecuteAssembly 方法 (String, Evidence)

_AppDomain
.
.
::
.
ExecuteAssembly 方法 (String, Evidence)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ExecuteAssembly(String, Evidence) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ExecuteAssembly ( _
    assemblyFile As String, _
    assemblySecurity As Evidence _
) As Integer
int ExecuteAssembly(
    string assemblyFile,
    Evidence assemblySecurity
)
int ExecuteAssembly(
    String^ assemblyFile,
    Evidence^ assemblySecurity
)
abstract ExecuteAssembly :
        assemblyFile:string *
        assemblySecurity:Evidence -> int

参数

assemblyFile
类型： System String
包含要执行程序集的文件的名称。
assemblySecurity
类型： System.Security.Policy Evidence
用于加载程序集的证据。

返回值

类型： System Int32
程序集的入口点返回的值。

参见 AppDomain..::.ExecuteAssembly(String, Evidence) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
ExecuteAssembly 重载
System 命名空间


_AppDomain ..::.ExecuteAssembly 方法 (String, Evidence, array<String >[]()[])

_AppDomain
.
.
::
.
ExecuteAssembly 方法 (String, Evidence,
array<
String
>
[]
()
[]
)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ExecuteAssembly(String, Evidence, array<String>[]()[]) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ExecuteAssembly ( _
    assemblyFile As String, _
    assemblySecurity As Evidence, _
    args As String() _
) As Integer
int ExecuteAssembly(
    string assemblyFile,
    Evidence assemblySecurity,
    string[] args
)
int ExecuteAssembly(
    String^ assemblyFile,
    Evidence^ assemblySecurity,
    array<String^>^ args
)
abstract ExecuteAssembly :
        assemblyFile:string *
        assemblySecurity:Evidence *
        args:string[] -> int

参数

assemblyFile
类型： System String
包含要执行程序集的文件的名称。
assemblySecurity
类型： System.Security.Policy Evidence
为程序集提供的证据。
args
类型：
array<
System String
>
[]
()
[]

程序集的入口点的实参。

返回值

类型： System Int32
程序集的入口点返回的值。

参见 AppDomain..::.ExecuteAssembly(String, Evidence, array<String>[]()[]) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
ExecuteAssembly 重载
System 命名空间


_AppDomain ..::.GetAssemblies 方法

_AppDomain
.
.
::
.
GetAssemblies 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.GetAssemblies 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function GetAssemblies As Assembly()
Assembly[] GetAssemblies()
array<Assembly^>^ GetAssemblies()
abstract GetAssemblies : unit -> Assembly[]

返回值

类型：
array<
System.Reflection Assembly
>
[]
()
[]

此应用程序域中的程序集的数组。

请参见 AppDomain..::.GetAssemblies 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.GetData 方法

_AppDomain
.
.
::
.
GetData 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.GetData 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function GetData ( _
    name As String _
) As Object
Object GetData(
    string name
)
Object^ GetData(
    String^ name
)
abstract GetData :
        name:string -> Object

参数

name
类型： System String
预定义应用程序域属性的名称，或已定义的应用程序域属性的名称。

返回值

类型： System Object
name 属性的值。

请参见 AppDomain..::.GetData 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.GetHashCode 方法

_AppDomain
.
.
::
.
GetHashCode 方法
_AppDomain 接口

为 COM 对象提供对继承的 Object..::.GetHashCode 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function GetHashCode As Integer
int GetHashCode()
int GetHashCode()
abstract GetHashCode : unit -> int

返回值

类型： System Int32
当前 Object 的哈希代码。

请参见 Object..::.GetHashCode 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.GetIDsOfNames 方法

_AppDomain
.
.
::
.
GetIDsOfNames 方法
_AppDomain 接口

将一组名称映射为对应的一组调度标识符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub GetIDsOfNames ( _
    ByRef riid As Guid, _
    rgszNames As IntPtr, _
    cNames As UInteger, _
    lcid As UInteger, _
    rgDispId As IntPtr _
)
void GetIDsOfNames(
    ref Guid riid,
    IntPtr rgszNames,
    uint cNames,
    uint lcid,
    IntPtr rgDispId
)
void GetIDsOfNames(
    [InAttribute] Guid% riid,
    IntPtr rgszNames,
    unsigned int cNames,
    unsigned int lcid,
    IntPtr rgDispId
)
abstract GetIDsOfNames :
        riid:Guid byref *
        rgszNames:IntPtr *
        cNames:uint32 *
        lcid:uint32 *
        rgDispId:IntPtr -> unit

参数

riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
rgszNames
类型： System IntPtr
要映射的名称的传入数组。
cNames
类型： System UInt32
要映射的名称的计数。
lcid
类型： System UInt32
要在其中解释名称的区域设置上下文。
rgDispId
类型： System IntPtr
调用方分配的数组，用于接收与名称对应的 ID。
异常 | 条件
NotImplementedException | 使用 COM IDispatch 接口在后期绑定调用此方法。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.GetLifetimeService 方法

_AppDomain
.
.
::
.
GetLifetimeService 方法
_AppDomain 接口

为 COM 对象提供对继承的 MarshalByRefObject..::.GetLifetimeService 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function GetLifetimeService As Object
Object GetLifetimeService()
Object^ GetLifetimeService()
abstract GetLifetimeService : unit -> Object

返回值

类型： System Object
ILease 类型的对象，用于控制此实例的生存期策略。

请参见 MarshalByRefObject..::.GetLifetimeService 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.GetType 方法

_AppDomain
.
.
::
.
GetType 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.GetType 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function GetType As Type
Type GetType()
Type^ GetType()
abstract GetType : unit -> Type

返回值

类型： System Type
一个 Type，表示当前实例的类型。

请参见 AppDomain..::.GetType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.GetTypeInfo 方法

_AppDomain
.
.
::
.
GetTypeInfo 方法
_AppDomain 接口

检索对象的类型信息，然后可以使用该信息获取接口的类型信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub GetTypeInfo ( _
    iTInfo As UInteger, _
    lcid As UInteger, _
    ppTInfo As IntPtr _
)
void GetTypeInfo(
    uint iTInfo,
    uint lcid,
    IntPtr ppTInfo
)
void GetTypeInfo(
    unsigned int iTInfo,
    unsigned int lcid,
    IntPtr ppTInfo
)
abstract GetTypeInfo :
        iTInfo:uint32 *
        lcid:uint32 *
        ppTInfo:IntPtr -> unit

参数

iTInfo
类型： System UInt32
要返回的类型信息。
lcid
类型： System UInt32
类型信息的区域设置标识符。
ppTInfo
类型： System IntPtr
接收一个指针，指向请求的类型信息对象。
异常 | 条件
NotImplementedException | 使用 COM IDispatch 接口在后期绑定调用此方法。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.GetTypeInfoCount 方法

_AppDomain
.
.
::
.
GetTypeInfoCount 方法
_AppDomain 接口

检索对象提供的类型信息接口的数量（0 或 1）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub GetTypeInfoCount ( _
    <OutAttribute> ByRef pcTInfo As UInteger _
)
void GetTypeInfoCount(
    out uint pcTInfo
)
void GetTypeInfoCount(
    [OutAttribute] unsigned int% pcTInfo
)
abstract GetTypeInfoCount :
        pcTInfo:uint32 byref -> unit

参数

pcTInfo
类型： System UInt32 %
指向一个位置，该位置接收对象提供的类型信息接口的数量。
异常 | 条件
NotImplementedException | 使用 COM IDispatch 接口在后期绑定调用此方法。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.InitializeLifetimeService 方法

_AppDomain
.
.
::
.
InitializeLifetimeService 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.InitializeLifetimeService 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function InitializeLifetimeService As Object
Object InitializeLifetimeService()
Object^ InitializeLifetimeService()
abstract InitializeLifetimeService : unit -> Object

返回值

类型： System Object
始终为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

请参见 AppDomain..::.InitializeLifetimeService 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.Invoke 方法

_AppDomain
.
.
::
.
Invoke 方法
_AppDomain 接口

提供对某一对象公开的属性和方法的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub Invoke ( _
    dispIdMember As UInteger, _
    ByRef riid As Guid, _
    lcid As UInteger, _
    wFlags As Short, _
    pDispParams As IntPtr, _
    pVarResult As IntPtr, _
    pExcepInfo As IntPtr, _
    puArgErr As IntPtr _
)
void Invoke(
    uint dispIdMember,
    ref Guid riid,
    uint lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
)
void Invoke(
    unsigned int dispIdMember,
    [InAttribute] Guid% riid,
    unsigned int lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
)
abstract Invoke :
        dispIdMember:uint32 *
        riid:Guid byref *
        lcid:uint32 *
        wFlags:int16 *
        pDispParams:IntPtr *
        pVarResult:IntPtr *
        pExcepInfo:IntPtr *
        puArgErr:IntPtr -> unit

参数

dispIdMember
类型： System UInt32
标识成员。
riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
lcid
类型： System UInt32
要在其中解释参数的区域设置上下文。
wFlags
类型： System Int16
描述调用的上下文的标志。
pDispParams
类型： System IntPtr
指向一个结构的指针，该结构包含一个参数数组、一个命名参数的 DISPID 参数数组和数组中元素数的计数。
pVarResult
类型： System IntPtr
指向要存储结果的位置的指针。
pExcepInfo
类型： System IntPtr
指向一个包含异常信息的结构的指针。
puArgErr
类型： System IntPtr
第一个出错参数的索引。
异常 | 条件
NotImplementedException | 使用 COM IDispatch 接口在后期绑定调用此方法。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.Load 方法

_AppDomain
.
.
::
.
Load 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.Load 方法的版本无关的访问。

名称 说明
页首

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.Load 方法 (AssemblyName)

_AppDomain
.
.
::
.
Load 方法 (AssemblyName)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.Load(AssemblyName) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Load ( _
    assemblyRef As AssemblyName _
) As Assembly
Assembly Load(
    AssemblyName assemblyRef
)
Assembly^ Load(
    AssemblyName^ assemblyRef
)
abstract Load :
        assemblyRef:AssemblyName -> Assembly

参数

assemblyRef
类型： System.Reflection AssemblyName
描述要加载的程序集的对象。

返回值

类型： System.Reflection Assembly
加载的程序集。

参见 AppDomain..::.Load(AssemblyName) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
Load 重载
System 命名空间


_AppDomain ..::.Load 方法 ( array<Byte >[]()[])

_AppDomain
.
.
::
.
Load 方法 (
array<
Byte
>
[]
()
[]
)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.Load(array<Byte>[]()[]) 方法重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Load ( _
    rawAssembly As Byte() _
) As Assembly
Assembly Load(
    byte[] rawAssembly
)
Assembly^ Load(
    array<unsigned char>^ rawAssembly
)
abstract Load :
        rawAssembly:byte[] -> Assembly

参数

rawAssembly
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它是包含已发出程序集的基于 COFF 的图像。

返回值

类型： System.Reflection Assembly
加载的程序集。

参见 AppDomain..::.Load(array<Byte>[]()[]) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
Load 重载
System 命名空间


_AppDomain ..::.Load 方法 (String)

_AppDomain
.
.
::
.
Load 方法 (String)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.Load(String) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Load ( _
    assemblyString As String _
) As Assembly
Assembly Load(
    string assemblyString
)
Assembly^ Load(
    String^ assemblyString
)
abstract Load :
        assemblyString:string -> Assembly

参数

assemblyString
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。

返回值

类型： System.Reflection Assembly
加载的程序集。

参见 AppDomain..::.Load(String) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
Load 重载
System 命名空间


_AppDomain ..::.Load 方法 (AssemblyName, Evidence)

_AppDomain
.
.
::
.
Load 方法 (AssemblyName, Evidence)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.Load(AssemblyName, Evidence) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Load ( _
    assemblyRef As AssemblyName, _
    assemblySecurity As Evidence _
) As Assembly
Assembly Load(
    AssemblyName assemblyRef,
    Evidence assemblySecurity
)
Assembly^ Load(
    AssemblyName^ assemblyRef,
    Evidence^ assemblySecurity
)
abstract Load :
        assemblyRef:AssemblyName *
        assemblySecurity:Evidence -> Assembly

参数

assemblyRef
类型： System.Reflection AssemblyName
描述要加载的程序集的对象。
assemblySecurity
类型： System.Security.Policy Evidence
用于加载程序集的证据。

返回值

类型： System.Reflection Assembly
加载的程序集。

参见 AppDomain..::.Load(AssemblyName, Evidence) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
Load 重载
System 命名空间


_AppDomain ..::.Load 方法 ( array<Byte >[]()[], array<Byte >[]()[])

_AppDomain
.
.
::
.
Load 方法 (
array<
Byte
>
[]
()
[]
,
array<
Byte
>
[]
()
[]
)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.Load(array<Byte>[]()[], array<Byte>[]()[]) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Load ( _
    rawAssembly As Byte(), _
    rawSymbolStore As Byte() _
) As Assembly
Assembly Load(
    byte[] rawAssembly,
    byte[] rawSymbolStore
)
Assembly^ Load(
    array<unsigned char>^ rawAssembly,
    array<unsigned char>^ rawSymbolStore
)
abstract Load :
        rawAssembly:byte[] *
        rawSymbolStore:byte[] -> Assembly

参数

rawAssembly
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它是包含已发出程序集的基于 COFF 的图像。
rawSymbolStore
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它包含表示程序集符号的原始字节。

返回值

类型： System.Reflection Assembly
加载的程序集。

参见 AppDomain..::.Load(array<Byte>[]()[], array<Byte>[]()[]) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
Load 重载
System 命名空间


_AppDomain ..::.Load 方法 (String, Evidence)

_AppDomain
.
.
::
.
Load 方法 (String, Evidence)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.Load(String, Evidence) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Load ( _
    assemblyString As String, _
    assemblySecurity As Evidence _
) As Assembly
Assembly Load(
    string assemblyString,
    Evidence assemblySecurity
)
Assembly^ Load(
    String^ assemblyString,
    Evidence^ assemblySecurity
)
abstract Load :
        assemblyString:string *
        assemblySecurity:Evidence -> Assembly

参数

assemblyString
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
assemblySecurity
类型： System.Security.Policy Evidence
用于加载程序集的证据。

返回值

类型： System.Reflection Assembly
加载的程序集。

参见 AppDomain..::.Load(String, Evidence) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
Load 重载
System 命名空间


_AppDomain ..::.Load 方法 ( array<Byte >[]()[], array<Byte >[]()[], Evidence)

_AppDomain
.
.
::
.
Load 方法 (
array<
Byte
>
[]
()
[]
,
array<
Byte
>
[]
()
[]
, Evidence)
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.Load(array<Byte>[]()[], array<Byte>[]()[], Evidence) 方法的重载的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Load ( _
    rawAssembly As Byte(), _
    rawSymbolStore As Byte(), _
    securityEvidence As Evidence _
) As Assembly
Assembly Load(
    byte[] rawAssembly,
    byte[] rawSymbolStore,
    Evidence securityEvidence
)
Assembly^ Load(
    array<unsigned char>^ rawAssembly,
    array<unsigned char>^ rawSymbolStore,
    Evidence^ securityEvidence
)
abstract Load :
        rawAssembly:byte[] *
        rawSymbolStore:byte[] *
        securityEvidence:Evidence -> Assembly

参数

rawAssembly
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它是包含已发出程序集的基于 COFF 的图像。
rawSymbolStore
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它包含表示程序集符号的原始字节。
securityEvidence
类型： System.Security.Policy Evidence
用于加载程序集的证据。

返回值

类型： System.Reflection Assembly
加载的程序集。

参见 AppDomain..::.Load(array<Byte>[]()[], array<Byte>[]()[], Evidence) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
Load 重载
System 命名空间


_AppDomain ..::.SetAppDomainPolicy 方法

_AppDomain
.
.
::
.
SetAppDomainPolicy 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.SetAppDomainPolicy 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub SetAppDomainPolicy ( _
    domainPolicy As PolicyLevel _
)
void SetAppDomainPolicy(
    PolicyLevel domainPolicy
)
void SetAppDomainPolicy(
    PolicyLevel^ domainPolicy
)
abstract SetAppDomainPolicy :
        domainPolicy:PolicyLevel -> unit

参数

domainPolicy
类型： System.Security.Policy PolicyLevel
安全策略级别。

请参见 AppDomain..::.SetAppDomainPolicy 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.SetCachePath 方法

_AppDomain
.
.
::
.
SetCachePath 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.SetCachePath 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub SetCachePath ( _
    s As String _
)
void SetCachePath(
    string s
)
void SetCachePath(
    String^ s
)
abstract SetCachePath :
        s:string -> unit

参数

s
类型： System String
到影像副本位置的完全限定路径。

请参见 AppDomain..::.SetCachePath 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.SetData 方法

_AppDomain
.
.
::
.
SetData 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.SetData 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub SetData ( _
    name As String, _
    data As Object _
)
void SetData(
    string name,
    Object data
)
void SetData(
    String^ name,
    Object^ data
)
abstract SetData :
        name:string *
        data:Object -> unit

参数

name
类型： System String
要创建或更改的用户定义应用程序域属性的名称。
data
类型： System Object
属性的值。

请参见 AppDomain..::.SetData 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.SetPrincipalPolicy 方法

_AppDomain
.
.
::
.
SetPrincipalPolicy 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.SetPrincipalPolicy 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub SetPrincipalPolicy ( _
    policy As PrincipalPolicy _
)
void SetPrincipalPolicy(
    PrincipalPolicy policy
)
void SetPrincipalPolicy(
    PrincipalPolicy policy
)
abstract SetPrincipalPolicy :
        policy:PrincipalPolicy -> unit

参数

policy
类型： System.Security.Principal PrincipalPolicy
PrincipalPolicy 值之一，指定要附加到线程的主体对象类型。

请参见 AppDomain..::.SetPrincipalPolicy 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.SetShadowCopyPath 方法

_AppDomain
.
.
::
.
SetShadowCopyPath 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.SetShadowCopyPath 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub SetShadowCopyPath ( _
    s As String _
)
void SetShadowCopyPath(
    string s
)
void SetShadowCopyPath(
    String^ s
)
abstract SetShadowCopyPath :
        s:string -> unit

参数

s
类型： System String
目录名列表，每一个名称用分号隔开。

请参见 AppDomain..::.SetShadowCopyPath 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.SetThreadPrincipal 方法

_AppDomain
.
.
::
.
SetThreadPrincipal 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.SetThreadPrincipal 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub SetThreadPrincipal ( _
    principal As IPrincipal _
)
void SetThreadPrincipal(
    IPrincipal principal
)
void SetThreadPrincipal(
    IPrincipal^ principal
)
abstract SetThreadPrincipal :
        principal:IPrincipal -> unit

参数

principal
类型： System.Security.Principal IPrincipal
要附加到线程的主体对象。

请参见 AppDomain..::.SetThreadPrincipal 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.ToString 方法

_AppDomain
.
.
::
.
ToString 方法
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ToString 方法的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToString As String
string ToString()
String^ ToString()
abstract ToString : unit -> string

返回值

类型： System String
一个字符串，通过连接字符串“Name:”、应用程序域的友好名称以及上下文策略的字符串表示或字符串“There are no context policies”而成。

请参见 AppDomain..::.ToString 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain 属性

_AppDomain 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
_AppDomain 接口

_AppDomain 类型公开以下成员。

名称 说明
页首

参考

_AppDomain 接口
System 命名空间


_AppDomain ..::.BaseDirectory 属性

_AppDomain
.
.
::
.
BaseDirectory 属性
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.BaseDirectory 属性的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property BaseDirectory As String
    Get
string BaseDirectory { get; }
property String^ BaseDirectory {
    String^ get ();
}
abstract BaseDirectory : string

属性值

类型： System String
基目录，由程序集冲突解决程序用来探测程序集。

参见 AppDomain..::.BaseDirectory 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.DynamicDirectory 属性

_AppDomain
.
.
::
.
DynamicDirectory 属性
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DynamicDirectory 属性的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property DynamicDirectory As String
    Get
string DynamicDirectory { get; }
property String^ DynamicDirectory {
    String^ get ();
}
abstract DynamicDirectory : string

属性值

类型： System String
获取目录，它由程序集冲突解决程序用来探测动态创建的程序集。

参见 AppDomain..::.DynamicDirectory 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.Evidence 属性

_AppDomain
.
.
::
.
Evidence 属性
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.Evidence 属性的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property Evidence As Evidence
    Get
Evidence Evidence { get; }
property Evidence^ Evidence {
    Evidence^ get ();
}
abstract Evidence : Evidence

属性值

类型： System.Security.Policy Evidence
获取与此应用程序域相关联的 Evidence，它用作安全策略的输入。

参见 AppDomain..::.Evidence 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.FriendlyName 属性

_AppDomain
.
.
::
.
FriendlyName 属性
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.FriendlyName 属性的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property FriendlyName As String
    Get
string FriendlyName { get; }
property String^ FriendlyName {
    String^ get ();
}
abstract FriendlyName : string

属性值

类型： System String
此应用程序域的友好名称。

参见 AppDomain..::.FriendlyName 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.RelativeSearchPath 属性

_AppDomain
.
.
::
.
RelativeSearchPath 属性
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.RelativeSearchPath 属性的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property RelativeSearchPath As String
    Get
string RelativeSearchPath { get; }
property String^ RelativeSearchPath {
    String^ get ();
}
abstract RelativeSearchPath : string

属性值

类型： System String
基目录下的路径，在此程序集冲突解决程序应探测专用程序集。

参见 AppDomain..::.RelativeSearchPath 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.ShadowCopyFiles 属性

_AppDomain
.
.
::
.
ShadowCopyFiles 属性
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ShadowCopyFiles 属性的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property ShadowCopyFiles As Boolean
    Get
bool ShadowCopyFiles { get; }
property bool ShadowCopyFiles {
    bool get ();
}
abstract ShadowCopyFiles : bool

属性值

类型： System Boolean
如果应用程序域配置为影像副本文件，则为 true；否则为 false。

参见 AppDomain..::.ShadowCopyFiles 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain 事件

_AppDomain 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
_AppDomain 接口

_AppDomain 类型公开以下成员。

名称 说明
页首

参考

_AppDomain 接口
System 命名空间


_AppDomain ..::.AssemblyLoad 事件

_AppDomain
.
.
::
.
AssemblyLoad 事件
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.AssemblyLoad 事件的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Event AssemblyLoad As AssemblyLoadEventHandler
event AssemblyLoadEventHandler AssemblyLoad
 event AssemblyLoadEventHandler^ AssemblyLoad {
    void add (AssemblyLoadEventHandler^ value);
    void remove (AssemblyLoadEventHandler^ value);
}
abstract AssemblyLoad : IEvent<AssemblyLoadEventHandler,
    AssemblyLoadEventArgs>

参见 AppDomain..::.AssemblyLoad 事件。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.AssemblyResolve 事件

_AppDomain
.
.
::
.
AssemblyResolve 事件
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.AssemblyResolve 事件的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Event AssemblyResolve As ResolveEventHandler
event ResolveEventHandler AssemblyResolve
 event ResolveEventHandler^ AssemblyResolve {
    void add (ResolveEventHandler^ value);
    void remove (ResolveEventHandler^ value);
}
abstract AssemblyResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>

参见 AppDomain..::.AssemblyResolve 事件。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.DomainUnload 事件

_AppDomain
.
.
::
.
DomainUnload 事件
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.DomainUnload 事件的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Event DomainUnload As EventHandler
event EventHandler DomainUnload
 event EventHandler^ DomainUnload {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
abstract DomainUnload : IEvent<EventHandler,
    EventArgs>

参见 AppDomain..::.DomainUnload 事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.ProcessExit 事件

_AppDomain
.
.
::
.
ProcessExit 事件
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ProcessExit 事件的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Event ProcessExit As EventHandler
event EventHandler ProcessExit
 event EventHandler^ ProcessExit {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
abstract ProcessExit : IEvent<EventHandler,
    EventArgs>

参见 AppDomain..::.ProcessExit 事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.ResourceResolve 事件

_AppDomain
.
.
::
.
ResourceResolve 事件
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.ResourceResolve 事件的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Event ResourceResolve As ResolveEventHandler
event ResolveEventHandler ResourceResolve
 event ResolveEventHandler^ ResourceResolve {
    void add (ResolveEventHandler^ value);
    void remove (ResolveEventHandler^ value);
}
abstract ResourceResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>

参见 AppDomain..::.ResourceResolve 事件。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.TypeResolve 事件

_AppDomain
.
.
::
.
TypeResolve 事件
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.TypeResolve 事件的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Event TypeResolve As ResolveEventHandler
event ResolveEventHandler TypeResolve
 event ResolveEventHandler^ TypeResolve {
    void add (ResolveEventHandler^ value);
    void remove (ResolveEventHandler^ value);
}
abstract TypeResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>

参见 AppDomain..::.ToString 事件。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


_AppDomain ..::.UnhandledException 事件

_AppDomain
.
.
::
.
UnhandledException 事件
_AppDomain 接口

为 COM 对象提供对 AppDomain..::.UnhandledException 事件的版本无关的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Event UnhandledException As UnhandledExceptionEventHandler
event UnhandledExceptionEventHandler UnhandledException
 event UnhandledExceptionEventHandler^ UnhandledException {
    void add (UnhandledExceptionEventHandler^ value);
    void remove (UnhandledExceptionEventHandler^ value);
}
abstract UnhandledException : IEvent<UnhandledExceptionEventHandler,
    UnhandledExceptionEventArgs>

参见 AppDomain..::.UnhandledException 事件。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

_AppDomain 接口
_AppDomain 成员
System 命名空间


AccessViolationException 类

AccessViolationException 类
成员

在尝试读写受保护内存时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class AccessViolationException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class AccessViolationException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class AccessViolationException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type AccessViolationException =
    class
        inherit SystemException
    end

当非托管或不安全代码尝试读写未分配或不具有访问权限的内存空间时，就会产生访问冲突。这种情况通常因为指针具有错误的值而发生。并非所有通过错误指针的读写操作都会引发访问冲突，所以访问冲突通常指示已经通过错误指针进行多次读写操作，并且内存内容可能已损坏。因此，访问冲突几乎总是指示存在严重的编程错误。在 .NET Framework 2.0 版中，AccessViolationException 清楚地标识了这些错误。 当非托管或不安全代码尝试读写未分配或不具有访问权限的内存空间时，就会产生访问冲突。这种情况通常因为指针具有错误的值而发生。并非所有通过错误指针的读写操作都会引发访问冲突，所以访问冲突通常指示已经通过错误指针进行多次读写操作，并且内存内容可能已损坏。因此，访问冲突几乎总是指示存在严重的编程错误。在 .NET Framework 2.0 版中，AccessViolationException 清楚地标识了这些错误。 当非托管或不安全代码尝试读写未分配或不具有访问权限的内存空间时，就会产生访问冲突。这种情况通常因为指针具有错误的值而发生。并非所有通过错误指针的读写操作都会引发访问冲突，所以访问冲突通常指示已经通过错误指针进行多次读写操作，并且内存内容可能已损坏。因此，访问冲突几乎总是指示存在严重的编程错误。在 .NET Framework 2.0 版中，AccessViolationException 清楚地标识了这些错误。 当非托管或不安全代码尝试读写未分配或不具有访问权限的内存空间时，就会产生访问冲突。这种情况通常因为指针具有错误的值而发生。并非所有通过错误指针的读写操作都会引发访问冲突，所以访问冲突通常指示已经通过错误指针进行多次读写操作，并且内存内容可能已损坏。因此，访问冲突几乎总是指示存在严重的编程错误。在 .NET Framework 2.0 版中，AccessViolationException 清楚地标识了这些错误。 当非托管或不安全代码尝试读写未分配或不具有访问权限的内存空间时，就会产生访问冲突。这种情况通常因为指针具有错误的值而发生。并非所有通过错误指针的读写操作都会引发访问冲突，所以访问冲突通常指示已经通过错误指针进行多次读写操作，并且内存内容可能已损坏。因此，访问冲突几乎总是指示存在严重的编程错误。在 .NET Framework 2.0 版中，AccessViolationException 清楚地标识了这些错误。

在完全由可验证托管代码组成的程序中，所有引用都有效或者为空，因而不会产生访问冲突。AccessViolationException 只在可验证托管代码与非托管代码或非安全托管代码交互时才会引发。 在完全由可验证托管代码组成的程序中，所有引用都有效或者为空，因而不会产生访问冲突。AccessViolationException 只在可验证托管代码与非托管代码或非安全托管代码交互时才会引发。

版本信息

此异常是 .NET Framework 2.0 版中新增的异常。在 .NET Framework 较早版本中，非托管代码或非安全托管代码中的访问冲突用托管代码中的 NullReferenceException 表示。当在可验证托管代码中取消空引用时，也会引发 NullReferenceException，这种情况的引发与数据损坏无关，且在 1.0 版或 1.1 版中无法区分这两种情况。 此异常是 .NET Framework 2.0 版中新增的异常。在 .NET Framework 较早版本中，非托管代码或非安全托管代码中的访问冲突用托管代码中的 NullReferenceException 表示。当在可验证托管代码中取消空引用时，也会引发 NullReferenceException，这种情况的引发与数据损坏无关，且在 1.0 版或 1.1 版中无法区分这两种情况。 此异常是 .NET Framework 2.0 版中新增的异常。在 .NET Framework 较早版本中，非托管代码或非安全托管代码中的访问冲突用托管代码中的 NullReferenceException 表示。当在可验证托管代码中取消空引用时，也会引发 NullReferenceException，这种情况的引发与数据损坏无关，且在 1.0 版或 1.1 版中无法区分这两种情况。

管理员可以允许所选择的应用程序恢复为 .NET Framework 1.1 版的行为。将下一行置于应用程序配置文件的 <runtime> 元素 节中： 管理员可以允许所选择的应用程序恢复为 .NET Framework 1.1 版的行为。将下一行置于应用程序配置文件的 <runtime> 元素 节中：

<legacyNullReferenceExceptionPolicy enabled = "1"/>

System System..::.AccessViolationExceptionAccessViolationException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AccessViolationException 成员
System 命名空间

其他资源

处理和引发异常


AccessViolationException 成员

AccessViolationException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AccessViolationException 类

在尝试读写受保护内存时引发的异常。

AccessViolationException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

AccessViolationException 类
System 命名空间


AccessViolationException 构造函数

AccessViolationException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AccessViolationException 类

初始化 AccessViolationException 类的新实例。

名称 说明
页首

参考

AccessViolationException 类
AccessViolationException 成员
System 命名空间


AccessViolationException 构造函数

AccessViolationException 构造函数
AccessViolationException 类

使用由系统提供的用来描述错误的消息初始化 AccessViolationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public AccessViolationException()
public:
AccessViolationException()
new : unit -> AccessViolationException

此构造函数将新实例的 Message 属性初始化为由系统提供的用来描述错误的消息，如“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”此消息将考虑当前系统区域性。 此构造函数将新实例的 Message 属性初始化为由系统提供的用来描述错误的消息，如“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”此消息将考虑当前系统区域性。

下表显示 AccessViolationException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AccessViolationException 类
AccessViolationException 成员
AccessViolationException 重载
System 命名空间

其他资源

处理和引发异常


AccessViolationException 构造函数 (String)

AccessViolationException 构造函数 (String)
AccessViolationException 类

使用描述错误的指定消息初始化 AccessViolationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public AccessViolationException(
    string message
)
public:
AccessViolationException(
    String^ message
)
new :
        message:string -> AccessViolationException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 AccessViolationException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AccessViolationException 类
AccessViolationException 成员
AccessViolationException 重载
System 命名空间

其他资源

处理和引发异常


AccessViolationException 构造函数 (SerializationInfo, StreamingContext)

AccessViolationException 构造函数 (SerializationInfo, StreamingContext)
AccessViolationException 类

用序列化数据初始化 AccessViolationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected AccessViolationException(
    SerializationInfo info,
    StreamingContext context
)
protected:
AccessViolationException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> AccessViolationException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的 SerializationInfo。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 XML and SOAP Serialization。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 XML and SOAP Serialization。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AccessViolationException 类
AccessViolationException 成员
AccessViolationException 重载
System 命名空间

其他资源

XML and SOAP Serialization


AccessViolationException 构造函数 (String, Exception)

AccessViolationException 构造函数 (String, Exception)
AccessViolationException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 AccessViolationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public AccessViolationException(
    string message,
    Exception innerException
)
public:
AccessViolationException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> AccessViolationException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 AccessViolationException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AccessViolationException 类
AccessViolationException 成员
AccessViolationException 重载
System 命名空间

其他资源

处理和引发异常


AccessViolationException 方法

AccessViolationException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AccessViolationException 类

AccessViolationException 类型公开以下成员。

名称 说明
页首

参考

AccessViolationException 类
System 命名空间


AccessViolationException 属性

AccessViolationException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AccessViolationException 类

AccessViolationException 类型公开以下成员。

名称 说明
页首

参考

AccessViolationException 类
System 命名空间


AccessViolationException 事件

AccessViolationException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AccessViolationException 类

AccessViolationException 类型公开以下成员。

名称 说明
页首

参考

AccessViolationException 类
System 命名空间


Action 委托

Action 委托

封装一个方法，该方法不具有参数并且不返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub Action
public delegate void Action()
public delegate void Action()
type Action =
    delegate of unit -> unit

可以使用此委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法不得具有参数，并且不得返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用此委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法不得具有参数，并且不得返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用此委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法不得具有参数，并且不得返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用此委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法不得具有参数，并且不得返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用此委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法不得具有参数，并且不得返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用此委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法不得具有参数，并且不得返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用无参数并返回值的方法，请改用泛型 Func<(Of <(TResult>)>) 委托。

在使用 Action 委托时，不必显式定义一个封装无参数过程的委托。例如，以下代码显式声明了一个名为 ShowValue 的委托，并将对 Name.DisplayToWindow 实例方法的引用分配给其委托实例。 在使用 Action 委托时，不必显式定义一个封装无参数过程的委托。例如，以下代码显式声明了一个名为 ShowValue 的委托，并将对 Name.DisplayToWindow 实例方法的引用分配给其委托实例。

Public Delegate Sub ShowValue

Public Class Name
   Private instanceName As String

   Public Sub New(name As String)
      Me.instanceName = name
   End Sub

   Public Sub DisplayToConsole()
      Console.WriteLine(Me.instanceName)
   End Sub

   Public Sub DisplayToWindow()
      MsgBox(Me.instanceName)
   End Sub
End Class

Public Module testDelegate
   Public Sub Main()
      Dim testName As New Name("Koani")
      Dim showMethod As ShowValue = AddressOf testName.DisplayToWindow
      showMethod
   End Sub
End Module

using System;
using System.Windows.Forms;

public delegate void ShowValue();

public class Name
{
   private string instanceName;

   public Name(string name)
   {
      this.instanceName = name;
   }

   public void DisplayToConsole()
   {
      Console.WriteLine(this.instanceName);
   }

   public void DisplayToWindow()
   {
      MessageBox.Show(this.instanceName);
   }
}

public class testTestDelegate
{
   public static void Main()
   {
      Name testName = new Name("Koani");
      ShowValue showMethod = testName.DisplayToWindow;
      showMethod();
   }
}

以下示例简化了此代码，它所用的方法是实例化 Action 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Public Class Name
   Private instanceName As String

   Public Sub New(name As String)
      Me.instanceName = name
   End Sub

   Public Sub DisplayToConsole()
      Console.WriteLine(Me.instanceName)
   End Sub

   Public Sub DisplayToWindow()
      MsgBox(Me.instanceName)
   End Sub
End Class

Public Module testDelegate
   Public Sub Main()
      Dim testName As New Name("Koani")
      Dim showMethod As Action = AddressOf testName.DisplayToWindow
      showMethod
   End Sub
End Module

using System;
using System.Windows.Forms;

public class Name
{
   private string instanceName;

   public Name(string name)
   {
      this.instanceName = name;
   }

   public void DisplayToConsole()
   {
      Console.WriteLine(this.instanceName);
   }

   public void DisplayToWindow()
   {
      MessageBox.Show(this.instanceName);
   }
}

public class testTestDelegate
{
   public static void Main()
   {
      Name testName = new Name("Koani");
      Action showMethod = testName.DisplayToWindow;
      showMethod();
   }
}

您也可以按照以下示例所演示的那样在 C# 中将 Action 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您也可以按照以下示例所演示的那样在 C# 中将 Action 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;
using System.Windows.Forms;

public class Name
{
   private string instanceName;

   public Name(string name)
   {
      this.instanceName = name;
   }

   public void DisplayToConsole()
   {
      Console.WriteLine(this.instanceName);
   }

   public void DisplayToWindow()
   {
      MessageBox.Show(this.instanceName);
   }
}

public class Anonymous
{
   public static void Main()
   {
      Name testName = new Name("Koani");
      Action showMethod = delegate() { testName.DisplayToWindow();} ;
      showMethod();
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。）

Public Class Name
   Private instanceName As String

   Public Sub New(name As String)
      Me.instanceName = name
   End Sub

   Public Function DisplayToConsole() As Integer
      Console.WriteLine(Me.instanceName)
      Return 0
   End Function

   Public Function DisplayToWindow() As Integer
      Return MsgBox(Me.instanceName)
   End Function
End Class

Module LambdaExpression
   Public Sub Main()
      Dim name1 As New Name("Koani")
      Dim methodCall As Action = Function() name1.DisplayToWindow()
      methodCall()
   End Sub
End Module

using System;
using System.Windows.Forms;

public class Name
{
   private string instanceName;

   public Name(string name)
   {
      this.instanceName = name;
   }

   public void DisplayToConsole()
   {
      Console.WriteLine(this.instanceName);
   }

   public void DisplayToWindow()
   {
      MessageBox.Show(this.instanceName);
   }
}

public class LambdaExpression
{
   public static void Main()
   {
      Name testName = new Name("Koani");
      Action showMethod = () => testName.DisplayToWindow();
      showMethod();
   }
}
说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action 委托一起使用，则必须丢弃该返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action 委托一起使用，则必须丢弃该返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

XNA Framework

受以下版本支持：3.0

参考

System 命名空间
Func TResult


Action <(Of <(T >)>) 委托

Action
<
(Of
<
(
T
>
)
>
)
委托

封装一个方法，该方法只有一个参数并且不返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub Action(Of In T) ( _
    obj As T _
)
public delegate void Action<in T>(
    T obj
)

generic<typename T>
public delegate void Action(
    T obj
)
type Action =
    delegate of
        obj:'T -> unit

类型参数

inInininTT

此委托封装的方法的参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

obj
类型：T
此委托封装的方法的参数。

可以使用 Action<(Of <(T>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有一个通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有一个通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有一个通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有一个通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有一个通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有一个通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有一个参数并返回值的方法，请改用泛型 Func<(Of <(T, TResult>)>) 委托。

在使用 Action<(Of <(T>)>) 委托时，不必显式定义一个封装只有一个参数的方法的委托。例如，以下代码显式声明了一个名为 DisplayMessage 的委托，并将对 WriteLine 方法或 ShowWindowsMessage 方法的引用分配给其委托实例。 在使用 Action<(Of <(T>)>) 委托时，不必显式定义一个封装只有一个参数的方法的委托。例如，以下代码显式声明了一个名为 DisplayMessage 的委托，并将对 WriteLine 方法或 ShowWindowsMessage 方法的引用分配给其委托实例。

Delegate Sub DisplayMessage(message As String)

Module TestCustomDelegate
   Public Sub Main
      Dim messageTarget As DisplayMessage

      If Environment.GetCommandLineArgs().Length > 1 Then
         messageTarget = AddressOf ShowWindowsMessage
      Else
         messageTarget = AddressOf Console.WriteLine
      End If
      messageTarget("Hello, World!")
   End Sub

   Private Sub ShowWindowsMessage(message As String)
      MsgBox(message)
   End Sub
End Module

using System;
using System.Windows.Forms;

delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
   public static void Main()
   {
      DisplayMessage messageTarget;

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);
   }
}

以下示例简化了此代码，它所用的方法是实例化 Action<(Of <(T>)>) 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Module TestAction1
   Public Sub Main
      Dim messageTarget As Action(Of String)

      If Environment.GetCommandLineArgs().Length > 1 Then
         messageTarget = AddressOf ShowWindowsMessage
      Else
         messageTarget = AddressOf Console.WriteLine
      End If
      messageTarget("Hello, World!")
   End Sub

   Private Sub ShowWindowsMessage(message As String)
      MsgBox(message)
   End Sub
End Module

using System;
using System.Windows.Forms;

public class TestAction1
{
   public static void Main()
   {
      Action<string> messageTarget;

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);
   }
}

您也可以按照以下示例所演示的那样在 C# 中将 Action<(Of <(T>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您也可以按照以下示例所演示的那样在 C# 中将 Action<(Of <(T>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;
using System.Windows.Forms;

public class TestAnonMethod
{
   public static void Main()
   {
      Action<string> messageTarget;

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = delegate(string s) { ShowWindowsMessage(s); };
      else
         messageTarget = delegate(string s) { Console.WriteLine(s); };

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action<(Of <(T>)>) 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action<(Of <(T>)>) 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。）

Imports System.Windows.Forms

Public Module TestLambdaExpression
   Public Sub Main()
      Dim messageTarget As Action(Of String)

      If Environment.GetCommandLineArgs().Length > 1 Then
         messageTarget = Function(s) ShowWindowsMessage(s)
      Else
         messageTarget = Function(s) ShowConsoleMessage(s)
      End If
      messageTarget("Hello, World!")
   End Sub

   Private Function ShowWindowsMessage(message As String) As Integer
      Return MessageBox.Show(message)
   End Function

   Private Function ShowConsoleMessage(message As String) As Integer
      Console.WriteLine(message)
      Return 0
   End Function
End Module

using System;
using System.Windows.Forms;

public class TestLambdaExpression
{
   public static void Main()
   {
      Action<string> messageTarget;

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = s => ShowWindowsMessage(s);
      else
         messageTarget = s => Console.WriteLine(s);

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);
   }
}
说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action<(Of <(T>)>) 委托一起使用，则必须丢弃该返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action<(Of <(T>)>) 委托一起使用，则必须丢弃该返回值。

ForEach 和 ForEach<(Of <(T>)>) 方法都采用 Action<(Of <(T>)>) 委托作为参数。通过使用由委托封装的方法，可以对数组或列表中的每个元素执行操作。此示例使用 ForEach 方法提供说明。 ForEach 和 ForEach<(Of <(T>)>) 方法都采用 Action<(Of <(T>)>) 委托作为参数。通过使用由委托封装的方法，可以对数组或列表中的每个元素执行操作。此示例使用 ForEach 方法提供说明。 ForEach 和 ForEach<(Of <(T>)>) 方法都采用 Action<(Of <(T>)>) 委托作为参数。通过使用由委托封装的方法，可以对数组或列表中的每个元素执行操作。此示例使用 ForEach 方法提供说明。

下面的示例演示如何使用 Action<(Of <(T>)>) 委托来打印 List<(Of <(T>)>) 对象的内容。在此示例中，使用 Print 方法将列表的内容显示到控制台上。此外，C# 示例还演示如何使用匿名方法将内容显示到控制台上。请注意该示例不显式声明 Action<(Of <(T>)>) 变量。相反，它传递方法的引用，该方法采用单个参数而且不将值返回至 List<(Of <(T>)>)..::.ForEach 方法，其单个参数是一个 Action<(Of <(T>)>) 委托。同样，在 C# 示例 中，Action<(Of <(T>)>) 委托不被显式地实例化，因为匿名方法的签名匹配 List<(Of <(T>)>)..::.ForEach 方法所期望的 Action<(Of <(T>)>) 委托的签名。 下面的示例演示如何使用 Action<(Of <(T>)>) 委托来打印 List<(Of <(T>)>) 对象的内容。在此示例中，使用 Print 方法将列表的内容显示到控制台上。此外，C# 示例还演示如何使用匿名方法将内容显示到控制台上。请注意该示例不显式声明 Action<(Of <(T>)>) 变量。相反，它传递方法的引用，该方法采用单个参数而且不将值返回至 List<(Of <(T>)>)..::.ForEach 方法，其单个参数是一个 Action<(Of <(T>)>) 委托。同样，在 C# 示例 中，Action<(Of <(T>)>) 委托不被显式地实例化，因为匿名方法的签名匹配 List<(Of <(T>)>)..::.ForEach 方法所期望的 Action<(Of <(T>)>) 委托的签名。 下面的示例演示如何使用 Action<(Of <(T>)>) 委托来打印 List<(Of <(T>)>) 对象的内容。在此示例中，使用 Print 方法将列表的内容显示到控制台上。此外，C# 示例还演示如何使用匿名方法将内容显示到控制台上。请注意该示例不显式声明 Action<(Of <(T>)>) 变量。相反，它传递方法的引用，该方法采用单个参数而且不将值返回至 List<(Of <(T>)>)..::.ForEach 方法，其单个参数是一个 Action<(Of <(T>)>) 委托。同样，在 C# 示例 中，Action<(Of <(T>)>) 委托不被显式地实例化，因为匿名方法的签名匹配 List<(Of <(T>)>)..::.ForEach 方法所期望的 Action<(Of <(T>)>) 委托的签名。 下面的示例演示如何使用 Action<(Of <(T>)>) 委托来打印 List<(Of <(T>)>) 对象的内容。在此示例中，使用 Print 方法将列表的内容显示到控制台上。此外，C# 示例还演示如何使用匿名方法将内容显示到控制台上。请注意该示例不显式声明 Action<(Of <(T>)>) 变量。相反，它传递方法的引用，该方法采用单个参数而且不将值返回至 List<(Of <(T>)>)..::.ForEach 方法，其单个参数是一个 Action<(Of <(T>)>) 委托。同样，在 C# 示例 中，Action<(Of <(T>)>) 委托不被显式地实例化，因为匿名方法的签名匹配 List<(Of <(T>)>)..::.ForEach 方法所期望的 Action<(Of <(T>)>) 委托的签名。 下面的示例演示如何使用 Action<(Of <(T>)>) 委托来打印 List<(Of <(T>)>) 对象的内容。在此示例中，使用 Print 方法将列表的内容显示到控制台上。此外，C# 示例还演示如何使用匿名方法将内容显示到控制台上。请注意该示例不显式声明 Action<(Of <(T>)>) 变量。相反，它传递方法的引用，该方法采用单个参数而且不将值返回至 List<(Of <(T>)>)..::.ForEach 方法，其单个参数是一个 Action<(Of <(T>)>) 委托。同样，在 C# 示例 中，Action<(Of <(T>)>) 委托不被显式地实例化，因为匿名方法的签名匹配 List<(Of <(T>)>)..::.ForEach 方法所期望的 Action<(Of <(T>)>) 委托的签名。 下面的示例演示如何使用 Action<(Of <(T>)>) 委托来打印 List<(Of <(T>)>) 对象的内容。在此示例中，使用 Print 方法将列表的内容显示到控制台上。此外，C# 示例还演示如何使用匿名方法将内容显示到控制台上。请注意该示例不显式声明 Action<(Of <(T>)>) 变量。相反，它传递方法的引用，该方法采用单个参数而且不将值返回至 List<(Of <(T>)>)..::.ForEach 方法，其单个参数是一个 Action<(Of <(T>)>) 委托。同样，在 C# 示例 中，Action<(Of <(T>)>) 委托不被显式地实例化，因为匿名方法的签名匹配 List<(Of <(T>)>)..::.ForEach 方法所期望的 Action<(Of <(T>)>) 委托的签名。

Imports System
Imports System.Collections.Generic

Class Program
    Shared Sub Main()
        Dim names As New List(Of String)
        names.Add("Bruce")
        names.Add("Alfred")
        names.Add("Tim")
        names.Add("Richard")

        ' Display the contents of the list using the Print method.
        names.ForEach(AddressOf Print)
    End Sub

    Shared Sub Print(ByVal s As String)
        Console.WriteLine(s)
    End Sub
End Class

' This code will produce output similar to the following:
' Bruce
' Alfred
' Tim
' Richard

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<String> names = new List<String>();
        names.Add("Bruce");
        names.Add("Alfred");
        names.Add("Tim");
        names.Add("Richard");

        // Display the contents of the list using the Print method.
        names.ForEach(Print);

        // The following demonstrates the anonymous method feature of C#
        // to display the contents of the list to the console.
        names.ForEach(delegate(String name)
        {
            Console.WriteLine(name);
        });
    }

    private static void Print(string s)
    {
        Console.WriteLine(s);
    }
}
/* This code will produce output similar to the following:
 * Bruce
 * Alfred
 * Tim
 * Richard
 * Bruce
 * Alfred
 * Tim
 * Richard
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间
Func T, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
>
)
>
)
委托

封装一个方法，该方法具有 10 个参数并且不返回值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 10 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 10 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 10 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 10 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 10 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 10 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有 10 个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
>
)
>
)
委托

封装一个方法，该方法具有 11 个参数并且不返回值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 11 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 11 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 11 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 11 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 11 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 11 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有 11 个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
>
)
>
)
委托

封装一个方法，该方法具有 12 个参数并且不返回值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 12 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 12 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 12 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 12 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 12 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 12 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有 12 个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
>
)
>
)
委托

封装一个方法，该方法具有 13 个参数并且不返回值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, In T13) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12, _
    arg13 As T13 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 *
        arg13:'T13 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

inInininT13T13

此委托封装的方法的第十三个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。
arg13
类型：T13
此委托封装的方法的第十三个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 13 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 13 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 13 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 13 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 13 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 13 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有 13 个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
>
)
>
)
委托

封装一个方法，该方法具有 14 个参数并且不返回值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, In T13, In T14) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12, _
    arg13 As T13, _
    arg14 As T14 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 *
        arg13:'T13 *
        arg14:'T14 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

inInininT13T13

此委托封装的方法的第十三个参数的类型。

inInininT14T14

此委托封装的方法的第十四个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。
arg13
类型：T13
此委托封装的方法的第十三个参数。
arg14
类型：T14
此委托封装的方法的第十四个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 14 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 14 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 14 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 14 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 14 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 14 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有 14 个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
>
)
>
)
委托

封装一个方法，该方法具有 15 个参数并且不返回值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, In T13, In T14, In T15) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12, _
    arg13 As T13, _
    arg14 As T14, _
    arg15 As T15 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14,
    T15 arg15
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14,
    T15 arg15
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 *
        arg13:'T13 *
        arg14:'T14 *
        arg15:'T15 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

inInininT13T13

此委托封装的方法的第十三个参数的类型。

inInininT14T14

此委托封装的方法的第十四个参数的类型。

inInininT15T15

此委托封装的方法的第十五个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。
arg13
类型：T13
此委托封装的方法的第十三个参数。
arg14
类型：T14
此委托封装的方法的第十四个参数。
arg15
类型：T15
此委托封装的方法的第十五个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 15 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 15 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 15 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 15 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 15 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 15 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有 15 个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
>
)
>
)
委托

封装一个方法，该方法具有 16 个参数并且不返回值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, In T13, In T14, In T15, In T16) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12, _
    arg13 As T13, _
    arg14 As T14, _
    arg15 As T15, _
    arg16 As T16 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14,
    T15 arg15,
    T16 arg16
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14,
    T15 arg15,
    T16 arg16
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 *
        arg13:'T13 *
        arg14:'T14 *
        arg15:'T15 *
        arg16:'T16 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

inInininT13T13

此委托封装的方法的第十三个参数的类型。

inInininT14T14

此委托封装的方法的第十四个参数的类型。

inInininT15T15

此委托封装的方法的第十五个参数的类型。

inInininT16T16

此委托封装的方法的第十六个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。
arg13
类型：T13
此委托封装的方法的第十三个参数。
arg14
类型：T14
此委托封装的方法的第十四个参数。
arg15
类型：T15
此委托封装的方法的第十五个参数。
arg16
类型：T16
此委托封装的方法的第十六个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 16 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 16 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 16 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 16 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 16 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 16 个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有 16 个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult


Action <(Of <(T1, T2 >)>) 委托

Action
<
(Of
<
(
T1, T2
>
)
>
)
委托

封装一个方法，该方法具有两个参数并且不返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub Action(Of In T1, In T2) ( _
    arg1 As T1, _
    arg2 As T2 _
)
public delegate void Action<in T1, in T2>(
    T1 arg1,
    T2 arg2
)

generic<typename T1, typename T2>
public delegate void Action(
    T1 arg1,
    T2 arg2
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。

可以使用 Action<(Of <(T1, T2>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有两个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有两个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有两个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有两个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有两个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有两个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有两个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, TResult>)>) 委托。

在使用 Action<(Of <(T1, T2>)>) 委托时，不必显式定义一个封装具有两个参数的方法的委托。例如，以下代码显式声明了一个名为 ConcatStrings 的委托。然后，它将对两个方法中的任何一个方法的引用分配给其委托实例。其中一个方法将两个字符串写入控制台；另一个方法将两个字符串写入文件。 在使用 Action<(Of <(T1, T2>)>) 委托时，不必显式定义一个封装具有两个参数的方法的委托。例如，以下代码显式声明了一个名为 ConcatStrings 的委托。然后，它将对两个方法中的任何一个方法的引用分配给其委托实例。其中一个方法将两个字符串写入控制台；另一个方法将两个字符串写入文件。 在使用 Action<(Of <(T1, T2>)>) 委托时，不必显式定义一个封装具有两个参数的方法的委托。例如，以下代码显式声明了一个名为 ConcatStrings 的委托。然后，它将对两个方法中的任何一个方法的引用分配给其委托实例。其中一个方法将两个字符串写入控制台；另一个方法将两个字符串写入文件。 在使用 Action<(Of <(T1, T2>)>) 委托时，不必显式定义一个封装具有两个参数的方法的委托。例如，以下代码显式声明了一个名为 ConcatStrings 的委托。然后，它将对两个方法中的任何一个方法的引用分配给其委托实例。其中一个方法将两个字符串写入控制台；另一个方法将两个字符串写入文件。

Imports System.IO

Delegate Sub ConcatStrings(string1 As String, string2 As String)

Module TestDelegate
   Public Sub Main()

      Dim message1 As String = "The first line of a message."
      Dim message2 As String = "The second line of a message."
      Dim concat As ConcatStrings

      If Environment.GetCommandLineArgs().Length > 1 Then
         concat = AddressOf WriteToFile
      Else
         concat = AddressOf WriteToConsole
      End If
      concat(message1, message2)
   End Sub

   Private Sub WriteToConsole(string1 As String, string2 As String)
      Console.WriteLine("{0}{1}{2}", string1, vbCrLf, string2)
   End Sub

   Private Sub WriteToFile(string1 As String, string2 As String)
      Dim writer As StreamWriter = Nothing
      Try
         writer = New StreamWriter(Environment.GetCommandLineArgs(1), False)
         writer.WriteLine("{0}{1}{2}", string1, vbCrLf, string2)
      Catch
         Console.WriteLine("File write operation failed...")
      Finally
         If writer IsNot Nothing Then writer.Close
      End Try
   End Sub
End Module

using System;
using System.IO;

delegate void ConcatStrings(string string1, string string2);

public class TestDelegate
{
   public static void Main()
   {
      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      ConcatStrings concat;

      if (Environment.GetCommandLineArgs().Length > 1)
         concat = WriteToFile;
      else
         concat = WriteToConsole;

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      Console.WriteLine("{0}\n{1}", string1, string2);
   }

   private static void WriteToFile(string string1, string string2)
   {
      StreamWriter writer = null;
      try
      {
         writer = new StreamWriter(Environment.GetCommandLineArgs()[1], false);
         writer.WriteLine("{0}\n{1}", string1, string2);
      }
      catch
      {
         Console.WriteLine("File write operation failed...");
      }
      finally
      {
         if (writer != null) writer.Close();
      }
   }
}

以下示例简化了此代码，它所用的方法是实例化 Action<(Of <(T1, T2>)>) 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Imports System.IO

Module TestAction2
   Public Sub Main()

      Dim message1 As String = "The first line of a message."
      Dim message2 As String = "The second line of a message."
      Dim concat As Action(Of String, String)

      If Environment.GetCommandLineArgs().Length > 1 Then
         concat = AddressOf WriteToFile
      Else
         concat = AddressOf WriteToConsole
      End If
      concat(message1, message2)
   End Sub

   Private Sub WriteToConsole(string1 As String, string2 As String)
      Console.WriteLine("{0}{1}{2}", string1, vbCrLf, string2)
   End Sub

   Private Sub WriteToFile(string1 As String, string2 As String)
      Dim writer As StreamWriter = Nothing
      Try
         writer = New StreamWriter(Environment.GetCommandLineArgs(1), False)
         writer.WriteLine("{0}{1}{2}", string1, vbCrLf, string2)
      Catch
         Console.WriteLine("File write operation failed...")
      Finally
         If writer IsNot Nothing Then writer.Close
      End Try
   End Sub
End Module

using System;
using System.IO;

public class TestAction2
{
   public static void Main()
   {
      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      Action<string, string> concat;

      if (Environment.GetCommandLineArgs().Length > 1)
         concat = WriteToFile;
      else
         concat = WriteToConsole;

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      Console.WriteLine("{0}\n{1}", string1, string2);
   }

   private static void WriteToFile(string string1, string string2)
   {
      StreamWriter writer = null;
      try
      {
         writer = new StreamWriter(Environment.GetCommandLineArgs()[1], false);
         writer.WriteLine("{0}\n{1}", string1, string2);
      }
      catch
      {
         Console.WriteLine("File write operation failed...");
      }
      finally
      {
         if (writer != null) writer.Close();
      }
   }
}

您也可以按照以下示例所演示的那样在 C# 中将 Action<(Of <(T1, T2>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您也可以按照以下示例所演示的那样在 C# 中将 Action<(Of <(T1, T2>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;
using System.IO;

public class TestAnonymousMethod
{
   public static void Main()
   {
      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      Action<string, string> concat;

      if (Environment.GetCommandLineArgs().Length > 1)
         concat = delegate(string s1, string s2) { WriteToFile(s1, s2); };
      else
         concat = delegate(string s1, string s2) { WriteToConsole(s1, s2);} ;

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      Console.WriteLine("{0}\n{1}", string1, string2);
   }

   private static void WriteToFile(string string1, string string2)
   {
      StreamWriter writer = null;
      try
      {
         writer = new StreamWriter(Environment.GetCommandLineArgs()[1], false);
         writer.WriteLine("{0}\n{1}", string1, string2);
      }
      catch
      {
         Console.WriteLine("File write operation failed...");
      }
      finally
      {
         if (writer != null) writer.Close();
      }
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action<(Of <(T1, T2>)>) 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action<(Of <(T1, T2>)>) 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。）

Imports System.IO

Public Module TestLambdaExpression

   Public Sub Main()
      Dim message1 As String = "The first line of a message."
      Dim message2 As String = "The second line of a message."
      Dim concat As Action(Of String, String)

      If Environment.GetCommandLineArgs().Length > 1 Then
         concat = Function(s1, s2) WriteToFile(s1, s2)
      Else
         concat = Function(s1, s2) WriteToConsole(s1, s2)
      End If

      concat(message1, message2)
   End Sub

   Private Function WriteToConsole(string1 As String, string2 As String) As Integer
      Dim message As String = String.Format("{0}{1}{2}", string1, vbCrLf, string2)
      Console.WriteLine(message)
      Return message.Length
   End Function

   Private Function WriteToFile(string1 As String, string2 As String) As Integer
      Dim writer As StreamWriter = Nothing
      Dim message As String = String.Format("{0}{1}{2}", string1, vbCrLf, string2)
      Dim charsWritten As Integer
      Try
         writer = New StreamWriter(Environment.GetCommandLineArgs()(1), False)
         writer.WriteLine(message)
      Catch
         Console.WriteLine("File write operation failed...")
      Finally
         If writer IsNot Nothing Then
            writer.Close()
            charsWritten = message.Length
         Else
            charsWritten = 0
         End If
      End Try
      Return charsWritten
   End Function
End Module

using System;
using System.IO;

public class TestLambdaExpression
{
   public static void Main()
   {
      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      Action<string, string> concat;

      if (Environment.GetCommandLineArgs().Length > 1)
         concat = (s1, s2) => WriteToFile(s1, s2);
      else
         concat = (s1, s2) => WriteToConsole(s1, s2);

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      Console.WriteLine("{0}\n{1}", string1, string2);
   }

   private static void WriteToFile(string string1, string string2)
   {
      StreamWriter writer = null;
      try
      {
         writer = new StreamWriter(Environment.GetCommandLineArgs()[1], false);
         writer.WriteLine("{0}\n{1}", string1, string2);
      }
      catch
      {
         Console.WriteLine("File write operation failed...");
      }
      finally
      {
         if (writer != null) writer.Close();
      }
   }
}
说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action<(Of <(T1, T2>)>) 委托一起使用，则必须丢弃该返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action<(Of <(T1, T2>)>) 委托一起使用，则必须丢弃该返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

XNA Framework

受以下版本支持：3.0

参考

System 命名空间
Func T1, T2, TResult


Action <(Of <(T1, T2, T3 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3
>
)
>
)
委托

封装一个方法，该方法具有三个参数并且不返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3 _
)
public delegate void Action<in T1, in T2, in T3>(
    T1 arg1,
    T2 arg2,
    T3 arg3
)

generic<typename T1, typename T2, typename T3>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。

可以使用 Action<(Of <(T1, T2, T3>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有三个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有三个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有三个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有三个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有三个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有三个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有三个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, TResult>)>) 委托。

在使用 Action<(Of <(T1, T2, T3>)>) 委托时，不必显式定义一个封装具有三个参数的方法的委托。例如，以下代码显式声明了一个名为 StringCopy 的委托，并将对 CopyStrings 方法的引用分配给其委托实例。 在使用 Action<(Of <(T1, T2, T3>)>) 委托时，不必显式定义一个封装具有三个参数的方法的委托。例如，以下代码显式声明了一个名为 StringCopy 的委托，并将对 CopyStrings 方法的引用分配给其委托实例。

Delegate Sub StringCopy(stringArray1() As String, _
                        stringArray2() As String, _
                        indexToStart As Integer)

Module TestDelegate
   Public Sub Main()
      Dim ordinals() As String = {"First", "Second", "Third", "Fourth", "Fifth"}
      Dim copiedOrdinals(ordinals.Length - 1) As String
      Dim copyOperation As StringCopy = AddressOf CopyStrings
      copyOperation(ordinals, copiedOrdinals, 3)
      For Each ordinal As String In copiedOrdinals
         Console.WriteLine(ordinal)
      Next
   End Sub

   Private Sub CopyStrings(source() As String, target() As String, startPos As Integer)
      If source.Length <> target.Length Then
         Throw New IndexOutOfRangeException("The source and target arrays must have the same number of elements.")
      End If
      For ctr As Integer = startPos to source.Length - 1
         target(ctr) = String.Copy(source(ctr))
      Next
   End Sub
End Module

using System;

delegate void StringCopy(string[] stringArray1,
                         string[] stringArray2,
                         int indexToStart);

public class TestDelegate
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];
      StringCopy copyOperation = CopyStrings;
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      if (source.Length != target.Length)
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }

}

以下示例简化了此代码，它所用的方法是实例化 Action<(Of <(T1, T2, T3>)>) 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Module TestAction3
   Public Sub Main()
      Dim ordinals() As String = {"First", "Second", "Third", "Fourth", "Fifth"}
      Dim copiedOrdinals(ordinals.Length - 1) As String
      Dim copyOperation As Action(Of String(), String(), Integer) = AddressOf CopyStrings
      copyOperation(ordinals, copiedOrdinals, 3)
      For Each ordinal As String In copiedOrdinals
         Console.WriteLine(ordinal)
      Next
   End Sub

   Private Sub CopyStrings(source() As String, target() As String, startPos As Integer)
      If source.Length <> target.Length Then
         Throw New IndexOutOfRangeException("The source and target arrays must have the same number of elements.")
      End If
      For ctr As Integer = startPos to source.Length - 1
         target(ctr) = String.Copy(source(ctr))
      Next
   End Sub
End Module

using System;

public class TestAction3
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];
      Action<string[], string[], int> copyOperation = CopyStrings;
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      if (source.Length != target.Length)
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

您也可以按照以下示例所演示的那样在 C# 中将 Action<(Of <(T1, T2, T3>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您也可以按照以下示例所演示的那样在 C# 中将 Action<(Of <(T1, T2, T3>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;

public class TestAnon
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];
      Action<string[], string[], int> copyOperation = delegate(string[] s1,
                                                               string[] s2,
                                                               int pos)
                                      { CopyStrings(s1, s2, pos); };
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      if (source.Length != target.Length)
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action<(Of <(T1, T2, T3>)>) 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action<(Of <(T1, T2, T3>)>) 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。）

Public Module TestLambda
   Public Sub Main()
      Dim ordinals() As String = {"First", "Second", "Third", "Fourth", "Fifth"}
      Dim copiedOrdinals(ordinals.Length - 1) As String
      Dim copyOperation As Action(Of String(), String(), Integer) = _
                           Function(s1, s2, pos) CopyStrings(s1, s2, pos)
      copyOperation(ordinals, copiedOrdinals, 3)
      For Each ordinal As String In copiedOrdinals
         If String.IsNullOrEmpty(ordinal) Then
            Console.WriteLine("<None>")
         Else
            Console.WriteLine(ordinal)
         End If
      Next
   End Sub

   Private Function CopyStrings(source() As String, target() As String, startPos As Integer) As Integer
      If source.Length <> target.Length Then
         Throw New IndexOutOfRangeException("The source and target arrays must have the same number of elements.")
      End If

      For ctr As Integer = startPos To source.Length - 1
         target(ctr) = String.Copy(source(ctr))
      Next
      Return source.Length - startPos
   End Function
End Module
' The example displays the following output:
'       <None>
'       <None>
'       <None>
'       Fourth
'       Fifth

using System;

public class TestLambda
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];
      Action<string[], string[], int> copyOperation = (s1, s2, pos) =>
                                      CopyStrings(s1, s2, pos);
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(ordinal == string.Empty ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      if (source.Length != target.Length)
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}
说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action<(Of <(T1, T2, T3>)>) 委托一起使用，则必须丢弃该返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action<(Of <(T1, T2, T3>)>) 委托一起使用，则必须丢弃该返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

XNA Framework

受以下版本支持：3.0

参考

System 命名空间
Func T1, T2, T3, TResult


Action <(Of <(T1, T2, T3, T4 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
委托

封装一个方法，该方法具有四个参数并且不返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4 _
)
public delegate void Action<in T1, in T2, in T3, in T4>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4
)

generic<typename T1, typename T2, typename T3, typename T4>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。

可以使用 Action<(Of <(T1, T2, T3, T4>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有四个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有四个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有四个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有四个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有四个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有四个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。此属性也可以是返回一个将被忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有四个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, TResult>)>) 委托。

在使用 Action<(Of <(T1, T2, T3, T4>)>) 委托时，不必显式定义一个封装具有四个参数的方法的委托。例如，以下代码显式声明了一个名为 StringCopy 的委托，并将对 CopyStrings 方法的引用分配给其委托实例。 在使用 Action<(Of <(T1, T2, T3, T4>)>) 委托时，不必显式定义一个封装具有四个参数的方法的委托。例如，以下代码显式声明了一个名为 StringCopy 的委托，并将对 CopyStrings 方法的引用分配给其委托实例。

Delegate Sub StringCopy(stringArray1() As String, _
                        stringArray2() As String, _
                        indexToStart As Integer, _
                        numberToCopy As Integer)

Module TestDelegate
   Public Sub Main()
      Dim ordinals() As String = {"First", "Second", "Third", "Fourth", _
                                  "Fifth", "Sixth", "Seventh", "Eighth", _
                                  "Ninth", "Tenth"}
      Dim copiedOrdinals(ordinals.Length - 1) As String
      Dim copyOperation As StringCopy = AddressOf CopyStrings
      copyOperation(ordinals, copiedOrdinals, 3, 5)
      For Each ordinal As String In copiedOrdinals
         Console.WriteLine(ordinal)
      Next
   End Sub

   Private Sub CopyStrings(source() As String, target() As String, _
                           startPos As Integer, number As Integer)
      If source.Length <> target.Length Then
         Throw New IndexOutOfRangeException("The source and target arrays" & _
                   " must have the same number of elements.")
      End If
      For ctr As Integer = startPos to startpos + number  - 1
         target(ctr) = String.Copy(source(ctr))
      Next
   End Sub
End Module

using System;

delegate void StringCopy(string[] stringArray1,
                         string[] stringArray2,
                         int indexToStart,
                         int numberToCopy);

public class TestDelegate
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth",
                           "Sixth", "Seventh", "Eighth", "Ninth", "Tenth"};
      string[] copiedOrdinals = new string[ordinals.Length];
      StringCopy copyOperation = CopyStrings;
      copyOperation(ordinals, copiedOrdinals, 3, 5);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target,
                                   int startPos, int number)
   {
      if (source.Length != target.Length)
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= startPos + number - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

以下示例简化了此代码，它所用的方法是实例化 Action<(Of <(T1, T2, T3, T4>)>) 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Module TestAction4
   Public Sub Main()
      Dim ordinals() As String = {"First", "Second", "Third", "Fourth", _
                                  "Fifth", "Sixth", "Seventh", "Eighth", _
                                  "Ninth", "Tenth"}
      Dim copiedOrdinals(ordinals.Length - 1) As String
      Dim copyOperation As Action(Of String(), String(), Integer, Integer) = _
                           AddressOf CopyStrings
      copyOperation(ordinals, copiedOrdinals, 3, 5)
      For Each ordinal As String In copiedOrdinals
         Console.WriteLine(ordinal)
      Next
   End Sub

   Private Sub CopyStrings(source() As String, target() As String, _
                           startPos As Integer, number As Integer)
      If source.Length <> target.Length Then
         Throw New IndexOutOfRangeException("The source and target arrays" & _
                   " must have the same number of elements.")
      End If
      For ctr As Integer = startPos to startpos + number  - 1
         target(ctr) = String.Copy(source(ctr))
      Next
   End Sub
End Module

using System;

public class TestAction4
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth",
                           "Sixth", "Seventh", "Eighth", "Ninth", "Tenth"};
      string[] copiedOrdinals = new string[ordinals.Length];
      Action<string[], string[], int, int> copyOperation = CopyStrings;
      copyOperation(ordinals, copiedOrdinals, 3, 5);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target,
                                   int startPos, int number)
   {
      if (source.Length != target.Length)
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= startPos + number - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

您也可以按照以下示例所演示的那样在 C# 中将 Action<(Of <(T1, T2, T3, T4>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您也可以按照以下示例所演示的那样在 C# 中将 Action<(Of <(T1, T2, T3, T4>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;

public class TestAnonymousMethod
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth",
                           "Sixth", "Seventh", "Eighth", "Ninth", "Tenth"};
      string[] copiedOrdinals = new string[ordinals.Length];
      Action<string[], string[], int, int> copyOperation =
                                           delegate(string[] s1, string[] s2,
                                           int pos, int num)
                                { CopyStrings(s1, s2, pos, num); };
      copyOperation(ordinals, copiedOrdinals, 3, 5);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target,
                                   int startPos, int number)
   {
      if (source.Length != target.Length)
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= startPos + number - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action<(Of <(T1, T2, T3, T4>)>) 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action<(Of <(T1, T2, T3, T4>)>) 委托实例。（有关 lambda 表达式的简介，请参见 Lambda 表达式（C# 编程指南）。）

Public Module TestLambdaExpression
   Public Sub Main()
      Dim ordinals() As String = {"First", "Second", "Third", "Fourth", "Fifth", _
                           "Sixth", "Seventh", "Eighth", "Ninth", "Tenth"}
      Dim copiedOrdinals(ordinals.Length - 1) As String
      Dim copyOperation As Action(Of String(), String(), Integer, Integer) = _
                           Function(s1, s2, pos, num) CopyStrings(s1, s2, pos, num)
      copyOperation(ordinals, copiedOrdinals, 3, 5)
      For Each ordinal As String In copiedOrdinals
         If String.IsNullOrEmpty(ordinal) Then
            Console.WriteLine("<None>")
         Else
            Console.WriteLine(ordinal)
         End If
      Next
   End Sub

   Private Function CopyStrings(source() As String, target() As String, _
                                startPos As Integer, number As Integer) As Integer
      If source.Length <> target.Length Then
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.")
      End If

      For ctr As Integer = startPos To startPos + number - 1
         target(ctr) = String.Copy(source(ctr))
      Next
      Return number
   End Function
End Module
' The example displays the following output:
'       <None>
'       <None>
'       <None>
'       Fourth
'       Fifth
'       Sixth
'       Seventh
'       Eighth
'       <None>
'       <None>

using System;

public class TestLambdaExpression
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth",
                           "Sixth", "Seventh", "Eighth", "Ninth", "Tenth"};
      string[] copiedOrdinals = new string[ordinals.Length];
      Action<string[], string[], int, int> copyOperation = (s1, s2, pos, num)
                                           => CopyStrings(s1, s2, pos, num);
      copyOperation(ordinals, copiedOrdinals, 3, 5);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target,
                                   int startPos, int number)
   {
      if (source.Length != target.Length)
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= startPos + number - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}
说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action<(Of <(T1, T2, T3, T4>)>) 委托一起使用，则必须丢弃该返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果 lambda 表达式与 Action<(Of <(T1, T2, T3, T4>)>) 委托一起使用，则必须丢弃该返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

XNA Framework

受以下版本支持：3.0

参考

System 命名空间
Func T1, T2, T3, T4, TResult


Action <(Of <(T1, T2, T3, T4, T5 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
委托

封装一个方法，该方法具有五个参数并且不返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有五个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有五个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有五个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有五个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有五个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有五个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有五个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
委托

封装一个方法，该方法具有六个参数并且不返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有六个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有六个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有六个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有六个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有六个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有六个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有六个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
委托

封装一个方法，该方法具有七个参数并且不返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有七个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有七个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有七个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有七个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有七个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有七个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有七个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7, T8 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8
>
)
>
)
委托

封装一个方法，该方法具有八个参数并且不返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有八个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有八个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有八个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有八个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有八个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有八个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有八个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, T8, TResult


Action <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9 >)>) 委托

Action
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9
>
)
>
)
委托

封装一个方法，该方法具有九个参数并且不返回值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Sub Action(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9 _
)
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
public delegate void Action(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9
)
type Action =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 -> unit

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。

可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有九个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有九个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有九个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有九个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有九个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。 可以使用 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托以参数形式传递方法，而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有九个均通过值传递给它的参数，并且不能返回值。（在 C# 中，该方法必须返回 void。在 Visual Basic 中，必须通过 Sub…End Sub 结构来定义它。它也可以是返回已忽略的值的方法。）通常，这种方法用于执行某个操作。

说明 说明

若要引用具有九个参数并返回值的方法，请改用泛型 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>)>) 委托。

也可以将 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托与匿名方法和 lambda 表达式一起使用。

说明 说明

Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托一起使用，则必须丢弃返回值。 Visual Basic 要求 lambda 表达式返回值。因此，如果要将 lambda 表达式与 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托一起使用，则必须丢弃返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Func T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult


ActivationContext 类

ActivationContext 类
成员

标识当前应用程序的激活上下文。无法继承此类。 标识当前应用程序的激活上下文。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(False)> _
Public NotInheritable Class ActivationContext _
    Implements IDisposable, ISerializable
[SerializableAttribute]
[ComVisibleAttribute(false)]
public sealed class ActivationContext : IDisposable,
    ISerializable
[SerializableAttribute]
[ComVisibleAttribute(false)]
public ref class ActivationContext sealed : IDisposable,
    ISerializable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(false)>]
type ActivationContext =
    class
        interface IDisposable
        interface ISerializable
    end

ActivationContext 类包含一个 ApplicationIdentity，并提供对应用程序清单的仅限于内部的访问。激活上下文在基于清单的激活期间使用，以设置域策略和提供基于应用程序的安全模型。有关更多信息，请参见 ApplicationSecurityManager 类。 ActivationContext 类包含一个 ApplicationIdentity，并提供对应用程序清单的仅限于内部的访问。激活上下文在基于清单的激活期间使用，以设置域策略和提供基于应用程序的安全模型。有关更多信息，请参见 ApplicationSecurityManager 类。 ActivationContext 类包含一个 ApplicationIdentity，并提供对应用程序清单的仅限于内部的访问。激活上下文在基于清单的激活期间使用，以设置域策略和提供基于应用程序的安全模型。有关更多信息，请参见 ApplicationSecurityManager 类。

下面的代码示例演示如何使用 ActivationContext 对象获取基于清单的应用程序的 ApplicationIdentity。为使结果正确，请将此代码示例作为基于清单的应用程序执行。 下面的代码示例演示如何使用 ActivationContext 对象获取基于清单的应用程序的 ApplicationIdentity。为使结果正确，请将此代码示例作为基于清单的应用程序执行。

Imports System
Imports System.Collections
Imports System.Text
Imports System.Security.Policy
Imports System.Reflection
Imports System.Security
Imports System.Security.Permissions

Public Class Program
    Inherits MarshalByRefObject

    <SecurityPermission(SecurityAction.LinkDemand, ControlDomainPolicy:=True)> _
    Public Shared Sub Main(ByVal args() As String)
        Dim ac As ActivationContext = AppDomain.CurrentDomain.ActivationContext
        Dim ai As ApplicationIdentity = ac.Identity
        Console.WriteLine("Full name = " + ai.FullName)
        Console.WriteLine("Code base = " + ai.CodeBase)
        Console.Read()

    End Sub 'Main

    <SecurityPermission(SecurityAction.LinkDemand, ControlDomainPolicy:=True)> _
    Public Sub Run()
        Main(New String() {})
        Console.ReadLine()

    End Sub 'Run
End Class 'Program

using System;
using System.Collections;
using System.Text;
using System.Security.Policy;
using System.Reflection;
using System.Security;
using System.Security.Permissions;

namespace ActivationContextSample
{
    public class Program : MarshalByRefObject
    {
        [SecurityPermission(SecurityAction.LinkDemand, ControlDomainPolicy=true)]
        public static void Main(string[] args)
        {
            ActivationContext ac = AppDomain.CurrentDomain.ActivationContext;
            ApplicationIdentity ai = ac.Identity;
            Console.WriteLine("Full name = " + ai.FullName);
            Console.WriteLine("Code base = " + ai.CodeBase);

            Console.Read();
        }
        [SecurityPermission(SecurityAction.LinkDemand, ControlDomainPolicy=true)]
        public void Run()
        {
            Main(new string[] { });
            Console.ReadLine();
        }
    }
}

System System..::.ActivationContextActivationContext
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ActivationContext 成员
System 命名空间

其他资源

发布 ClickOnce 应用程序


ActivationContext 成员

ActivationContext 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ActivationContext 类

标识当前应用程序的激活上下文。无法继承此类。 标识当前应用程序的激活上下文。无法继承此类。

ActivationContext 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ActivationContext 类
System 命名空间


ActivationContext 方法

ActivationContext 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ActivationContext 类

ActivationContext 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ActivationContext 类
System 命名空间


ActivationContext ..::.CreatePartialActivationContext 方法

ActivationContext
.
.
::
.
CreatePartialActivationContext 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ActivationContext 类

初始化 ActivationContext 类的新实例。

名称 说明
页首

参考

ActivationContext 类
ActivationContext 成员
System 命名空间


ActivationContext ..::.CreatePartialActivationContext 方法 (ApplicationIdentity)

ActivationContext
.
.
::
.
CreatePartialActivationContext 方法 (ApplicationIdentity)
ActivationContext 类

使用指定的应用程序标识初始化 ActivationContext 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreatePartialActivationContext ( _
    identity As ApplicationIdentity _
) As ActivationContext
public static ActivationContext CreatePartialActivationContext(
    ApplicationIdentity identity
)
public:
static ActivationContext^ CreatePartialActivationContext(
    ApplicationIdentity^ identity
)
static member CreatePartialActivationContext :
        identity:ApplicationIdentity -> ActivationContext

参数

identity
类型： System ApplicationIdentity
一个对象，用于标识应用程序。

返回值

类型： System ActivationContext
具有指定应用程序标识的对象。
异常 | 条件
ArgumentNullException | identity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 在 identity 中没有指定部署标识或应用程序标识。

CreatePartialActivationContext 方法调用内部构造函数来创建新的激活上下文。在 .NET Framework 版本 2.0 中，ActivationContext 类的实现是为既不完全安装在存储区中也不完全包含在文件夹中的应用程序设计的。此方法为将来的版本提供了向后兼容性，在将来的版本中，公共构造函数会提供完整的激活上下文。 CreatePartialActivationContext 方法调用内部构造函数来创建新的激活上下文。在 .NET Framework 版本 2.0 中，ActivationContext 类的实现是为既不完全安装在存储区中也不完全包含在文件夹中的应用程序设计的。此方法为将来的版本提供了向后兼容性，在将来的版本中，公共构造函数会提供完整的激活上下文。 CreatePartialActivationContext 方法调用内部构造函数来创建新的激活上下文。在 .NET Framework 版本 2.0 中，ActivationContext 类的实现是为既不完全安装在存储区中也不完全包含在文件夹中的应用程序设计的。此方法为将来的版本提供了向后兼容性，在将来的版本中，公共构造函数会提供完整的激活上下文。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ActivationContext 类
ActivationContext 成员
CreatePartialActivationContext 重载
System 命名空间


ActivationContext ..::.CreatePartialActivationContext 方法 (ApplicationIdentity, array<String >[]()[])

ActivationContext
.
.
::
.
CreatePartialActivationContext 方法 (ApplicationIdentity,
array<
String
>
[]
()
[]
)
ActivationContext 类

使用指定的应用程序标识和清单路径数组来初始化 ActivationContext 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreatePartialActivationContext ( _
    identity As ApplicationIdentity, _
    manifestPaths As String() _
) As ActivationContext
public static ActivationContext CreatePartialActivationContext(
    ApplicationIdentity identity,
    string[] manifestPaths
)
public:
static ActivationContext^ CreatePartialActivationContext(
    ApplicationIdentity^ identity,
    array<String^>^ manifestPaths
)
static member CreatePartialActivationContext :
        identity:ApplicationIdentity *
        manifestPaths:string[] -> ActivationContext

参数

identity
类型： System ApplicationIdentity
一个对象，用于标识应用程序。
manifestPaths
类型：
array<
System String
>
[]
()
[]

应用程序的清单路径的字符串数组。

返回值

类型： System ActivationContext
具有指定应用程序标识和清单路径数组的对象。
异常 | 条件
ArgumentNullException | identity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - manifestPaths 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 在 identity 中没有指定部署标识或应用程序标识。 - 或 - identity 与清单中的标识不匹配。 - 或 - identity 没有与清单路径相同的组件数量。

CreatePartialActivationContext 方法调用内部构造函数来创建新的激活上下文。在 .NET Framework 版本 2.0 中，ActivationContext 类的实现是为既不完全安装在存储区中也不完全包含在文件夹中的应用程序设计的。此方法为将来的版本提供了向后兼容性，在将来的版本中，公共构造函数会提供完整的激活上下文。 CreatePartialActivationContext 方法调用内部构造函数来创建新的激活上下文。在 .NET Framework 版本 2.0 中，ActivationContext 类的实现是为既不完全安装在存储区中也不完全包含在文件夹中的应用程序设计的。此方法为将来的版本提供了向后兼容性，在将来的版本中，公共构造函数会提供完整的激活上下文。 CreatePartialActivationContext 方法调用内部构造函数来创建新的激活上下文。在 .NET Framework 版本 2.0 中，ActivationContext 类的实现是为既不完全安装在存储区中也不完全包含在文件夹中的应用程序设计的。此方法为将来的版本提供了向后兼容性，在将来的版本中，公共构造函数会提供完整的激活上下文。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ActivationContext 类
ActivationContext 成员
CreatePartialActivationContext 重载
System 命名空间


ActivationContext ..::.Dispose 方法

ActivationContext
.
.
::
.
Dispose 方法
ActivationContext 类

释放由 ActivationContext 使用的所有资源。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Dispose
public void Dispose()
public:
virtual void Dispose() sealed
abstract Dispose : unit -> unit
override Dispose : unit -> unit

实现

使用完 ActivationContext 后调用 Dispose。Dispose 方法使 ActivationContext 处于不可用状态。调用 Dispose 后，必须释放对 ActivationContext 的所有引用，这样垃圾回收器才能回收 ActivationContext 占用的内存。有关更多信息，请参见清理非托管资源和实现 Dispose 方法。 使用完 ActivationContext 后调用 Dispose。Dispose 方法使 ActivationContext 处于不可用状态。调用 Dispose 后，必须释放对 ActivationContext 的所有引用，这样垃圾回收器才能回收 ActivationContext 占用的内存。有关更多信息，请参见清理非托管资源和实现 Dispose 方法。 使用完 ActivationContext 后调用 Dispose。Dispose 方法使 ActivationContext 处于不可用状态。调用 Dispose 后，必须释放对 ActivationContext 的所有引用，这样垃圾回收器才能回收 ActivationContext 占用的内存。有关更多信息，请参见清理非托管资源和实现 Dispose 方法。 使用完 ActivationContext 后调用 Dispose。Dispose 方法使 ActivationContext 处于不可用状态。调用 Dispose 后，必须释放对 ActivationContext 的所有引用，这样垃圾回收器才能回收 ActivationContext 占用的内存。有关更多信息，请参见清理非托管资源和实现 Dispose 方法。

说明 说明

释放对 ActivationContext 的最后一个引用之前，始终应先调用 Dispose。否则，在垃圾回收器调用 ActivationContext 对象的 Finalize 方法之前，正在使用的资源不会被释放。 释放对 ActivationContext 的最后一个引用之前，始终应先调用 Dispose。否则，在垃圾回收器调用 ActivationContext 对象的 Finalize 方法之前，正在使用的资源不会被释放。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ActivationContext 类
ActivationContext 成员
System 命名空间


ActivationContext ..::.ISerializable ..::.GetObjectData 方法

ActivationContext
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
ActivationContext 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

使用将目标对象序列化所需的数据填充 SerializationInfo。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
private:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
private override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要填充数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
此序列化的结构。

实现

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ActivationContext 类
ActivationContext 成员
System 命名空间


ActivationContext 属性

ActivationContext 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ActivationContext 类

ActivationContext 类型公开以下成员。

名称 说明
页首

参考

ActivationContext 类
System 命名空间


ActivationContext ..::.ApplicationManifestBytes 属性

ActivationContext
.
.
::
.
ApplicationManifestBytes 属性
ActivationContext 类

获取当前应用程序的 ClickOnce 应用程序清单。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ApplicationManifestBytes As Byte()
    Get
public byte[] ApplicationManifestBytes { get; }
public:
property array<unsigned char>^ ApplicationManifestBytes {
    array<unsigned char>^ get ();
}
member ApplicationManifestBytes : byte[]

属性值

类型：
array<
System Byte
>
[]
()
[]

一个字节数组，它包含与此 ActivationContext 关联的应用程序的 ClickOnce 应用程序清单。

如果激活上下文为 Loose（意味着应用程序未安装在 ClickOnce 存储区中），则从临时下载文件夹中读取部署清单。如果激活上下文为 StoreBounded（意味着应用程序安装在 ClickOnce 存储区中），则从 ClickOnce 存储区中读取部署清单。有关部署清单的更多信息，请参见 ClickOnce 部署清单。 如果激活上下文为 Loose（意味着应用程序未安装在 ClickOnce 存储区中），则从临时下载文件夹中读取部署清单。如果激活上下文为 StoreBounded（意味着应用程序安装在 ClickOnce 存储区中），则从 ClickOnce 存储区中读取部署清单。有关部署清单的更多信息，请参见 ClickOnce 部署清单。 如果激活上下文为 Loose（意味着应用程序未安装在 ClickOnce 存储区中），则从临时下载文件夹中读取部署清单。如果激活上下文为 StoreBounded（意味着应用程序安装在 ClickOnce 存储区中），则从 ClickOnce 存储区中读取部署清单。有关部署清单的更多信息，请参见 ClickOnce 部署清单。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ActivationContext 类
ActivationContext 成员
System 命名空间


ActivationContext ..::.DeploymentManifestBytes 属性

ActivationContext
.
.
::
.
DeploymentManifestBytes 属性
ActivationContext 类

获取当前应用程序的 ClickOnce 部署清单。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DeploymentManifestBytes As Byte()
    Get
public byte[] DeploymentManifestBytes { get; }
public:
property array<unsigned char>^ DeploymentManifestBytes {
    array<unsigned char>^ get ();
}
member DeploymentManifestBytes : byte[]

属性值

类型：
array<
System Byte
>
[]
()
[]

一个字节数组，它包含与此 ActivationContext 关联的应用程序的 ClickOnce 部署清单。

如果激活上下文为 Loose（意味着应用程序未安装在 ClickOnce 存储区中），则从临时下载文件夹中读取部署清单。如果激活上下文为 StoreBounded（意味着应用程序安装在 ClickOnce 存储区中），则从 ClickOnce 存储区中读取部署清单。有关部署清单的更多信息，请参见 ClickOnce 部署清单。 如果激活上下文为 Loose（意味着应用程序未安装在 ClickOnce 存储区中），则从临时下载文件夹中读取部署清单。如果激活上下文为 StoreBounded（意味着应用程序安装在 ClickOnce 存储区中），则从 ClickOnce 存储区中读取部署清单。有关部署清单的更多信息，请参见 ClickOnce 部署清单。 如果激活上下文为 Loose（意味着应用程序未安装在 ClickOnce 存储区中），则从临时下载文件夹中读取部署清单。如果激活上下文为 StoreBounded（意味着应用程序安装在 ClickOnce 存储区中），则从 ClickOnce 存储区中读取部署清单。有关部署清单的更多信息，请参见 ClickOnce 部署清单。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ActivationContext 类
ActivationContext 成员
System 命名空间


ActivationContext ..::.Form 属性

ActivationContext
.
.
::
.
Form 属性
ActivationContext 类

获取当前应用程序的窗体或存储区上下文。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Form As ActivationContext..::..ContextForm
    Get
public ActivationContext..::..ContextForm Form { get; }
public:
property ActivationContext..::..ContextForm Form {
    ActivationContext..::..ContextForm get ();
}
member Form : ActivationContext..::..ContextForm

属性值

类型： System ActivationContext ContextForm
枚举值之一。

基于清单的应用程序可能未安装在 ClickOnce 存储区中。不在存储区中的应用程序，如在 Visual Studio 中执行的清单激活的应用程序，可归到 Loose 一类中。包含在存储区中的应用程序可归到 StoreBounded 一类中。 基于清单的应用程序可能未安装在 ClickOnce 存储区中。不在存储区中的应用程序，如在 Visual Studio 中执行的清单激活的应用程序，可归到 Loose 一类中。包含在存储区中的应用程序可归到 StoreBounded 一类中。 基于清单的应用程序可能未安装在 ClickOnce 存储区中。不在存储区中的应用程序，如在 Visual Studio 中执行的清单激活的应用程序，可归到 Loose 一类中。包含在存储区中的应用程序可归到 StoreBounded 一类中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ActivationContext 类
ActivationContext 成员
System 命名空间


ActivationContext ..::.Identity 属性

ActivationContext
.
.
::
.
Identity 属性
ActivationContext 类

获取当前应用程序的应用程序标识。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Identity As ApplicationIdentity
    Get
public ApplicationIdentity Identity { get; }
public:
property ApplicationIdentity^ Identity {
    ApplicationIdentity^ get ();
}
member Identity : ApplicationIdentity

属性值

类型： System ApplicationIdentity
ApplicationIdentity 对象，用于标识当前应用程序。

ApplicationIdentity 通过一个应用程序的全名和位置来唯一地标识该应用程序。

下面的代码示例演示如何使用 ActivationContext 对象获取基于清单的应用程序的 ApplicationIdentity。此代码示例摘自一个为 ActivationContext 类提供的更大的示例。 下面的代码示例演示如何使用 ActivationContext 对象获取基于清单的应用程序的 ApplicationIdentity。此代码示例摘自一个为 ActivationContext 类提供的更大的示例。

Dim ac As ActivationContext = AppDomain.CurrentDomain.ActivationContext
Dim ai As ApplicationIdentity = ac.Identity

ActivationContext ac = AppDomain.CurrentDomain.ActivationContext;
ApplicationIdentity ai = ac.Identity;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ActivationContext 类
ActivationContext 成员
System 命名空间


ActivationContext ..::.ContextForm 枚举

ActivationContext
.
.
::
.
ContextForm 枚举
ActivationContext 类

指示清单激活的应用程序的上下文。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Enumeration ContextForm
public enum ContextForm
public enum class ContextForm
type ContextForm
成员名称 | 说明
Loose | 应用程序不在 ClickOnce 存储区中。
StoreBounded | 应用程序包含在 ClickOnce 存储区中。

此枚举的值指定应用程序是否已加载到 ClickOnce 存储区。未在 ClickOnce 存储区中安装的清单激活的应用程序可归到 Loose 一类中。不在存储区中的应用程序的一个示例是在 Visual Studio 中执行的清单激活的应用程序。 此枚举的值指定应用程序是否已加载到 ClickOnce 存储区。未在 ClickOnce 存储区中安装的清单激活的应用程序可归到 Loose 一类中。不在存储区中的应用程序的一个示例是在 Visual Studio 中执行的清单激活的应用程序。 此枚举的值指定应用程序是否已加载到 ClickOnce 存储区。未在 ClickOnce 存储区中安装的清单激活的应用程序可归到 Loose 一类中。不在存储区中的应用程序的一个示例是在 Visual Studio 中执行的清单激活的应用程序。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间

其他资源

发布 ClickOnce 应用程序


Activator 类

Activator 类
成员

包含特定的方法，用以在本地或从远程创建对象类型，或获取对现有远程对象的引用。此类不能被继承。 包含特定的方法，用以在本地或从远程创建对象类型，或获取对现有远程对象的引用。此类不能被继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public NotInheritable Class Activator _
    Implements _Activator
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public sealed class Activator : _Activator
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
public ref class Activator sealed : _Activator
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
type Activator =
    class
        interface _Activator
    end

CreateInstance 方法通过调用与指定参数匹配程度最高的构造函数来创建在程序集中定义的类型的实例。如果没有指定任何参数，则将调用不带任何参数的构造函数（即默认构造函数）。 CreateInstance 方法通过调用与指定参数匹配程度最高的构造函数来创建在程序集中定义的类型的实例。如果没有指定任何参数，则将调用不带任何参数的构造函数（即默认构造函数）。

您必须具有足够的权限才能搜索和调用构造函数，否则将引发异常。默认情况下，在搜索构造函数的过程中只考虑公共构造函数。如果找不到任何构造函数或默认构造函数，则将引发异常。 您必须具有足够的权限才能搜索和调用构造函数，否则将引发异常。默认情况下，在搜索构造函数的过程中只考虑公共构造函数。如果找不到任何构造函数或默认构造函数，则将引发异常。 您必须具有足够的权限才能搜索和调用构造函数，否则将引发异常。默认情况下，在搜索构造函数的过程中只考虑公共构造函数。如果找不到任何构造函数或默认构造函数，则将引发异常。

联编程序参数指定一个对象，该对象在程序集中搜索合适的构造函数。您可以指定自己的联编程序和搜索条件。如果未指定任何联编程序，则使用默认联编程序。有关更多信息，请参见 System.Reflection..::.Binder 和 System.Reflection..::.BindingFlags 类。
联编程序参数指定一个对象，该对象在程序集中搜索合适的构造函数。您可以指定自己的联编程序和搜索条件。如果未指定任何联编程序，则使用默认联编程序。有关更多信息，请参见 System.Reflection..::.Binder 和 System.Reflection..::.BindingFlags 类。
联编程序参数指定一个对象，该对象在程序集中搜索合适的构造函数。您可以指定自己的联编程序和搜索条件。如果未指定任何联编程序，则使用默认联编程序。有关更多信息，请参见 System.Reflection..::.Binder 和 System.Reflection..::.BindingFlags 类。
联编程序参数指定一个对象，该对象在程序集中搜索合适的构造函数。您可以指定自己的联编程序和搜索条件。如果未指定任何联编程序，则使用默认联编程序。有关更多信息，请参见 System.Reflection..::.Binder 和 System.Reflection..::.BindingFlags 类。

证据参数会影响构造函数的安全策略和权限。有关更多信息，请参见 System.Security.Policy..::.Evidence 类。 证据参数会影响构造函数的安全策略和权限。有关更多信息，请参见 System.Security.Policy..::.Evidence 类。

类型的实例可以在本地或远程站点上创建。如果从远程创建类型，一个激活特性参数将指定远程站点的 URI。在到达远程站点之前，创建实例的调用可能会通过中间站点进行传递。其他激活特性可以修改该调用在远程和中间站点上进行操作所处的环境（或上下文）。 类型的实例可以在本地或远程站点上创建。如果从远程创建类型，一个激活特性参数将指定远程站点的 URI。在到达远程站点之前，创建实例的调用可能会通过中间站点进行传递。其他激活特性可以修改该调用在远程和中间站点上进行操作所处的环境（或上下文）。 类型的实例可以在本地或远程站点上创建。如果从远程创建类型，一个激活特性参数将指定远程站点的 URI。在到达远程站点之前，创建实例的调用可能会通过中间站点进行传递。其他激活特性可以修改该调用在远程和中间站点上进行操作所处的环境（或上下文）。 类型的实例可以在本地或远程站点上创建。如果从远程创建类型，一个激活特性参数将指定远程站点的 URI。在到达远程站点之前，创建实例的调用可能会通过中间站点进行传递。其他激活特性可以修改该调用在远程和中间站点上进行操作所处的环境（或上下文）。

如果在本地创建实例，将返回对该对象的引用。如果从远程创建实例，将返回对代理的引用。通过代理，远程对象可以像本地对象一样进行操作。 如果在本地创建实例，将返回对该对象的引用。如果从远程创建实例，将返回对代理的引用。通过代理，远程对象可以像本地对象一样进行操作。 如果在本地创建实例，将返回对该对象的引用。如果从远程创建实例，将返回对代理的引用。通过代理，远程对象可以像本地对象一样进行操作。

GetObject 方法创建当前运行的远程对象、由服务器激活的已知对象或 XML Web services 的代理。您可以指定连接介质（即通道）。有关更多信息，请参见 System.Runtime.Remoting.Channels..::.ChannelServices 类。 GetObject 方法创建当前运行的远程对象、由服务器激活的已知对象或 XML Web services 的代理。您可以指定连接介质（即通道）。有关更多信息，请参见 System.Runtime.Remoting.Channels..::.ChannelServices 类。 GetObject 方法创建当前运行的远程对象、由服务器激活的已知对象或 XML Web services 的代理。您可以指定连接介质（即通道）。有关更多信息，请参见 System.Runtime.Remoting.Channels..::.ChannelServices 类。

程序集包含类型定义。CreateInstance 方法从当前所运行的程序集创建类型的实例。CreateInstanceFrom 方法从包含程序集的文件创建实例。CreateComInstanceFrom 方法从包含程序集的文件创建 COM 对象的实例。 程序集包含类型定义。CreateInstance 方法从当前所运行的程序集创建类型的实例。CreateInstanceFrom 方法从包含程序集的文件创建实例。CreateComInstanceFrom 方法从包含程序集的文件创建 COM 对象的实例。 程序集包含类型定义。CreateInstance 方法从当前所运行的程序集创建类型的实例。CreateInstanceFrom 方法从包含程序集的文件创建实例。CreateComInstanceFrom 方法从包含程序集的文件创建 COM 对象的实例。 程序集包含类型定义。CreateInstance 方法从当前所运行的程序集创建类型的实例。CreateInstanceFrom 方法从包含程序集的文件创建实例。CreateComInstanceFrom 方法从包含程序集的文件创建 COM 对象的实例。

下面的示例显示如何在运行时使用 Activator 类来动态构造对象。

Imports System.Reflection
Imports System.Text

Module Module1
    Sub Main()
        ' Create an instance of the StringBuilder type using
        ' Activator.CreateInstance.
        Dim o As Object = Activator.CreateInstance(GetType(StringBuilder))

        ' Append a string into the StringBuilder object and display the
        ' StringBuilder.
        Dim sb As StringBuilder = CType(o, StringBuilder)
        sb.Append("Hello, there.")
        Console.WriteLine(sb)

        ' Create an instance of the SomeType class that is defined in this assembly.
        Dim oh As System.Runtime.Remoting.ObjectHandle = _
            Activator.CreateInstanceFrom(Assembly.GetEntryAssembly().CodeBase, _
                                         GetType(SomeType).FullName)

        ' Call an instance method defined by the SomeType type using this object.
        Dim st As SomeType = CType(oh.Unwrap(), SomeType)

        st.DoSomething(5)
    End Sub

    Class SomeType
        Public Sub DoSomething(ByVal x As Int32)
            Console.WriteLine("100 / {0} = {1}", x, 100 \ x)
        End Sub
    End Class
End Module

' This code produces the following output:
'
' Hello, there.
' 100 / 5 = 20

using System;
using System.Reflection;
using System.Text;

public class SomeType
{
    public void DoSomething(int x)
    {
        Console.WriteLine("100 / {0} = {1}", x, 100 / x);
    }
}

public class Example
{
    static void Main()
    {
        // Create an instance of the StringBuilder type using
        // Activator.CreateInstance.
        Object o = Activator.CreateInstance(typeof(StringBuilder));

        // Append a string into the StringBuilder object and display the
        // StringBuilder.
        StringBuilder sb = (StringBuilder) o;
        sb.Append("Hello, there.");
        Console.WriteLine(sb);

        // Create an instance of the SomeType class that is defined in this
        // assembly.
        System.Runtime.Remoting.ObjectHandle oh =
            Activator.CreateInstanceFrom(Assembly.GetEntryAssembly().CodeBase,
                                         typeof(SomeType).FullName);

        // Call an instance method defined by the SomeType type using this object.
        SomeType st = (SomeType) oh.Unwrap();

        st.DoSomething(5);
    }
}

/* This code produces the following output:

Hello, there.
100 / 5 = 20
 */

using namespace System;
using namespace System::Reflection;
using namespace System::Text;

public ref class SomeType
{
public:
    void DoSomething(int x)
    {
        Console::WriteLine("100 / {0} = {1}", x, 100 / x);
    }
};

void main()
{
    // Create an instance of the StringBuilder type using
    // Activator.CreateInstance.
    Object^ o = Activator::CreateInstance(StringBuilder::typeid);

    // Append a string into the StringBuilder object and display the
    // StringBuilder.
    StringBuilder^ sb = (StringBuilder^) o;
    sb->Append("Hello, there.");
    Console::WriteLine(sb);

    // Create an instance of the SomeType class that is defined in this
    // assembly.
    System::Runtime::Remoting::ObjectHandle^ oh =
        Activator::CreateInstanceFrom(Assembly::GetEntryAssembly()->CodeBase,
                                      SomeType::typeid->FullName);

    // Call an instance method defined by the SomeType type using this object.
    SomeType^ st = (SomeType^) oh->Unwrap();

    st->DoSomething(5);
};

/* This code produces the following output:

Hello, there.
100 / 5 = 20
 */

System System..::.ActivatorActivator
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Activator 成员
System 命名空间

其他资源

.NET Remoting Overview


Activator 成员

Activator 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Activator 类

包含特定的方法，用以在本地或从远程创建对象类型，或获取对现有远程对象的引用。此类不能被继承。 包含特定的方法，用以在本地或从远程创建对象类型，或获取对现有远程对象的引用。此类不能被继承。

Activator 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Activator 类
System 命名空间


Activator 方法

Activator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Activator 类

Activator 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Activator 类
System 命名空间


Activator ..::._Activator ..::.GetIDsOfNames 方法

Activator
.
.
::
.
_Activator
.
.
::
.
GetIDsOfNames 方法
Activator 类

将一组名称映射为对应的一组调度标识符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetIDsOfNames ( _
    ByRef riid As Guid, _
    rgszNames As IntPtr, _
    cNames As UInteger, _
    lcid As UInteger, _
    rgDispId As IntPtr _
) Implements _Activator.GetIDsOfNames
void _Activator.GetIDsOfNames(
    ref Guid riid,
    IntPtr rgszNames,
    uint cNames,
    uint lcid,
    IntPtr rgDispId
)
private:
virtual void GetIDsOfNames(
    [InAttribute] Guid% riid,
    IntPtr rgszNames,
    unsigned int cNames,
    unsigned int lcid,
    IntPtr rgDispId
) sealed = _Activator::GetIDsOfNames
private abstract GetIDsOfNames :
        riid:Guid byref *
        rgszNames:IntPtr *
        cNames:uint32 *
        lcid:uint32 *
        rgDispId:IntPtr -> unit
private override GetIDsOfNames :
        riid:Guid byref *
        rgszNames:IntPtr *
        cNames:uint32 *
        lcid:uint32 *
        rgDispId:IntPtr -> unit

参数

riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
rgszNames
类型： System IntPtr
要映射的名称的传入数组。
cNames
类型： System UInt32
要映射的名称的计数。
lcid
类型： System UInt32
要在其中解释名称的区域设置上下文。
rgDispId
类型： System IntPtr
调用方分配的数组，用于接收与名称对应的 ID。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，因此不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，因此不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
System 命名空间


Activator ..::._Activator ..::.GetTypeInfo 方法

Activator
.
.
::
.
_Activator
.
.
::
.
GetTypeInfo 方法
Activator 类

检索对象的类型信息，然后可以使用该信息获取接口的类型信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetTypeInfo ( _
    iTInfo As UInteger, _
    lcid As UInteger, _
    ppTInfo As IntPtr _
) Implements _Activator.GetTypeInfo
void _Activator.GetTypeInfo(
    uint iTInfo,
    uint lcid,
    IntPtr ppTInfo
)
private:
virtual void GetTypeInfo(
    unsigned int iTInfo,
    unsigned int lcid,
    IntPtr ppTInfo
) sealed = _Activator::GetTypeInfo
private abstract GetTypeInfo :
        iTInfo:uint32 *
        lcid:uint32 *
        ppTInfo:IntPtr -> unit
private override GetTypeInfo :
        iTInfo:uint32 *
        lcid:uint32 *
        ppTInfo:IntPtr -> unit

参数

iTInfo
类型： System UInt32
要返回的类型信息。
lcid
类型： System UInt32
类型信息的区域设置标识符。
ppTInfo
类型： System IntPtr
一个 IntPtr 对象，该对象接收指向请求的类型信息对象的指针。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，因此不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，因此不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
System 命名空间


Activator ..::._Activator ..::.GetTypeInfoCount 方法

Activator
.
.
::
.
_Activator
.
.
::
.
GetTypeInfoCount 方法
Activator 类

检索对象提供的类型信息接口的数量（0 或 1）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetTypeInfoCount ( _
    <OutAttribute> ByRef pcTInfo As UInteger _
) Implements _Activator.GetTypeInfoCount
void _Activator.GetTypeInfoCount(
    out uint pcTInfo
)
private:
virtual void GetTypeInfoCount(
    [OutAttribute] unsigned int% pcTInfo
) sealed = _Activator::GetTypeInfoCount
private abstract GetTypeInfoCount :
        pcTInfo:uint32 byref -> unit
private override GetTypeInfoCount :
        pcTInfo:uint32 byref -> unit

参数

pcTInfo
类型： System UInt32 %
此方法返回一个指针，其指向的位置用于接收对象提供的类型信息接口的个数。该参数未经初始化即被传递。 此方法返回一个指针，其指向的位置用于接收对象提供的类型信息接口的个数。该参数未经初始化即被传递。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，因此不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，因此不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
System 命名空间


Activator ..::._Activator ..::.Invoke 方法

Activator
.
.
::
.
_Activator
.
.
::
.
Invoke 方法
Activator 类

提供对某一对象公开的属性和方法的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Invoke ( _
    dispIdMember As UInteger, _
    ByRef riid As Guid, _
    lcid As UInteger, _
    wFlags As Short, _
    pDispParams As IntPtr, _
    pVarResult As IntPtr, _
    pExcepInfo As IntPtr, _
    puArgErr As IntPtr _
) Implements _Activator.Invoke
void _Activator.Invoke(
    uint dispIdMember,
    ref Guid riid,
    uint lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
)
private:
virtual void Invoke(
    unsigned int dispIdMember,
    [InAttribute] Guid% riid,
    unsigned int lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
) sealed = _Activator::Invoke
private abstract Invoke :
        dispIdMember:uint32 *
        riid:Guid byref *
        lcid:uint32 *
        wFlags:int16 *
        pDispParams:IntPtr *
        pVarResult:IntPtr *
        pExcepInfo:IntPtr *
        puArgErr:IntPtr -> unit
private override Invoke :
        dispIdMember:uint32 *
        riid:Guid byref *
        lcid:uint32 *
        wFlags:int16 *
        pDispParams:IntPtr *
        pVarResult:IntPtr *
        pExcepInfo:IntPtr *
        puArgErr:IntPtr -> unit

参数

dispIdMember
类型： System UInt32
一个用于标识成员的调度标识符。
riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
lcid
类型： System UInt32
要在其中解释参数的区域设置上下文。
wFlags
类型： System Int16
描述调用的上下文的标志。
pDispParams
类型： System IntPtr
指向一个结构的指针，该结构包含一个参数数组、一个命名参数的 DISPID 参数数组和数组元素的计数。
pVarResult
类型： System IntPtr
指向要存储结果的位置的指针。
pExcepInfo
类型： System IntPtr
指向一个包含异常信息的结构的指针。
puArgErr
类型： System IntPtr
第一个出错参数的索引。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，因此不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，因此不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
System 命名空间


Activator ..::.CreateComInstanceFrom 方法

Activator
.
.
::
.
CreateComInstanceFrom 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Activator 类

创建指定名称的 COM 对象的实例。

名称 说明
页首

参考

Activator 类
Activator 成员
System 命名空间


Activator ..::.CreateComInstanceFrom 方法 (String, String)

Activator
.
.
::
.
CreateComInstanceFrom 方法 (String, String)
Activator 类

使用指定的程序集文件和与指定参数匹配程度最高的构造函数来创建指定名称的 COM 对象的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateComInstanceFrom ( _
    assemblyName As String, _
    typeName As String _
) As ObjectHandle
public static ObjectHandle CreateComInstanceFrom(
    string assemblyName,
    string typeName
)
public:
static ObjectHandle^ CreateComInstanceFrom(
    String^ assemblyName,
    String^ typeName
)
static member CreateComInstanceFrom :
        assemblyName:string *
        typeName:string -> ObjectHandle

参数

assemblyName
类型： System String
包含某程序集的文件的名称，将在该程序集内查找名为 typeName 的类型。
typeName
类型： System String
首选类型的名称。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 或 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TypeLoadException | 实例不能通过 COM 来创建。 - 或 - 在 assemblyName 中找不到 typename。
MissingMethodException | 未找到匹配的构造函数。
FileNotFoundException | 未找到 assemblyName，或者尝试加载的模块没有指定文件扩展名。
MemberAccessException | 无法创建抽象类的实例。 - 或 - 用后期绑定机制调用该成员。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
ArgumentException | assemblyName 是空字符串 ("")。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

必须以显式方式或默认方式对 COM 类型应用值为 true 的 System.Runtime.InteropServices..::.ComVisibleAttribute 特性，这样，CreateComInstanceFrom 方法才能创建该类型的实例；否则，会引发 TypeLoadException。

有关所调用方法可以引发的其他异常的信息，请参见 Assembly..::.LoadFrom 和 CreateInstance 方法的“异常”节。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • ReflectionPermission

    用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateComInstanceFrom 重载
System 命名空间


Activator ..::.CreateComInstanceFrom 方法 (String, String, array<Byte >[]()[], AssemblyHashAlgorithm)

Activator
.
.
::
.
CreateComInstanceFrom 方法 (String, String,
array<
Byte
>
[]
()
[]
, AssemblyHashAlgorithm)
Activator 类

使用命名的程序集文件和默认构造函数，创建指定名称的 COM 对象的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateComInstanceFrom ( _
    assemblyName As String, _
    typeName As String, _
    hashValue As Byte(), _
    hashAlgorithm As AssemblyHashAlgorithm _
) As ObjectHandle
public static ObjectHandle CreateComInstanceFrom(
    string assemblyName,
    string typeName,
    byte[] hashValue,
    AssemblyHashAlgorithm hashAlgorithm
)
public:
static ObjectHandle^ CreateComInstanceFrom(
    String^ assemblyName,
    String^ typeName,
    array<unsigned char>^ hashValue,
    AssemblyHashAlgorithm hashAlgorithm
)
static member CreateComInstanceFrom :
        assemblyName:string *
        typeName:string *
        hashValue:byte[] *
        hashAlgorithm:AssemblyHashAlgorithm -> ObjectHandle

参数

assemblyName
类型： System String
包含某程序集的文件的名称，将在该程序集内查找名为 typeName 的类型。
typeName
类型： System String
首选类型的名称。
hashValue
类型：
array<
System Byte
>
[]
()
[]

计算所得的哈希代码的值。
hashAlgorithm
类型： System.Configuration.Assemblies AssemblyHashAlgorithm
用于哈希文件和生成强名称的哈希算法。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 或 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | assemblyName 是空字符串 ("")。
PathTooLongException | 用两个不同的证据将一个程序集或模块加载了两次，或者程序集的名称比 MAX_PATH 字符长。
FileNotFoundException | 未找到 assemblyName，或者尝试加载的模块没有指定文件扩展名。
FileLoadException | assemblyName 已找到，但是不能加载。
BadImageFormatException | assemblyName 不是有效程序集。
SecurityException | 在没有必需的 WebPermission 的情况下，指定了不以“file://”开始的基本代码。
TypeLoadException | 实例不能通过 COM 来创建。 - 或 - 在 assemblyName 中找不到 typename。
MissingMethodException | 未找到匹配的构造函数。
MemberAccessException | 无法创建抽象类的实例。 - 或 - 用后期绑定机制调用该成员。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

必须以显式方式或默认方式对 COM 类型应用值为 true 的 System.Runtime.InteropServices..::.ComVisibleAttribute 特性，这样，CreateComInstanceFrom 方法才能创建该类型的实例；否则，会引发 TypeLoadException。

有关所调用方法可以引发的其他异常的信息，请参见 Assembly..::.LoadFrom 和 CreateInstance 方法的“异常”节。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • FileIOPermission

    用于读取以“file://”开头的 URI。关联的枚举：FileIOPermissionAccess..::.Read 用于读取以“file://”开头的 URI。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    用于读取不以“file://”开头的 URI。

  • ReflectionPermission

    用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateComInstanceFrom 重载
System 命名空间


Activator ..::.CreateInstance 方法

Activator
.
.
::
.
CreateInstance 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Activator 类

使用与指定参数匹配程度最高的构造函数创建指定类型的实例。

名称 说明
页首

参考

Activator 类
Activator 成员
System 命名空间


Activator ..::.CreateInstance <(Of <(T >)>) 方法

Activator
.
.
::
.
CreateInstance
<
(Of
<
(
T
>
)
>
)
方法
Activator 类

使用无参数构造函数，创建指定泛型类型参数所指定类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance(Of T) As T
public static T CreateInstance<T>()

public:
generic<typename T>
static T CreateInstance()
static member CreateInstance : unit -> 'T

类型参数

T

要创建的类型。

返回值

类型：T
对新创建对象的引用。
异常 | 条件
MissingMethodException | 为 T 指定的类型没有无参数构造函数。

编译器使用 CreateInstance 泛型方法实现由类型参数指定的类型的实例化。例如，在下面的泛型方法中，new T()（在 C++ 中为 gcnew T()）的实现使用 CreateInstance 泛型方法。 编译器使用 CreateInstance 泛型方法实现由类型参数指定的类型的实例化。例如，在下面的泛型方法中，new T()（在 C++ 中为 gcnew T()）的实现使用 CreateInstance 泛型方法。

Public Shared Function Factory(Of T As New)() As T
    Return New T()
End Function

public static T Factory<T>() where T:new()
{
    return new T();
}

public:
    generic <typename T> where T:gcnew()
    static T Bar()
    {
        return gcnew T();
    }

通常情况下，在应用程序代码中无需使用 CreateInstance，因为在编译时类型必须是已知的。如果编译时类型已知，则可以使用正常的实例化语法（在 C# 中为 new 运算符，在 Visual Basic 中为 New，在 C++ 中为 gcnew）。 通常情况下，在应用程序代码中无需使用 CreateInstance，因为在编译时类型必须是已知的。如果编译时类型已知，则可以使用正常的实例化语法（在 C# 中为 new 运算符，在 Visual Basic 中为 New，在 C++ 中为 gcnew）。

不存在带参数列表的 CreateInstance 泛型方法的重载，因为 CreateInstance 的非泛型重载已经提供了后期绑定构造函数决策。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间


Activator ..::.CreateInstance 方法 (ActivationContext)

Activator
.
.
::
.
CreateInstance 方法 (ActivationContext)
Activator 类

创建类型的一个实例，该类型由指定的 ActivationContext 对象指定。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    activationContext As ActivationContext _
) As ObjectHandle
public static ObjectHandle CreateInstance(
    ActivationContext activationContext
)
public:
static ObjectHandle^ CreateInstance(
    ActivationContext^ activationContext
)
static member CreateInstance :
        activationContext:ActivationContext -> ObjectHandle

参数

activationContext
类型： System ActivationContext
一个激活上下文对象，用于指定要创建的对象。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的对象则必须解包的句柄。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

激活上下文在基于清单的激活期间使用，以设置域策略和提供基于应用程序的安全模型。ActivationContext 类包含一个 ApplicationIdentity 对象，该对象提供对应用程序清单的访问。有关更多信息，请参见 ApplicationSecurityManager 类。 激活上下文在基于清单的激活期间使用，以设置域策略和提供基于应用程序的安全模型。ActivationContext 类包含一个 ApplicationIdentity 对象，该对象提供对应用程序清单的访问。有关更多信息，请参见 ApplicationSecurityManager 类。 激活上下文在基于清单的激活期间使用，以设置域策略和提供基于应用程序的安全模型。ActivationContext 类包含一个 ApplicationIdentity 对象，该对象提供对应用程序清单的访问。有关更多信息，请参见 ApplicationSecurityManager 类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间
ActivationContext
ApplicationIdentity
ApplicationSecurityManager


Activator ..::.CreateInstance 方法 (Type)

Activator
.
.
::
.
CreateInstance 方法 (Type)
Activator 类

使用指定类型的默认构造函数来创建该类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    type As Type _
) As Object
public static Object CreateInstance(
    Type type
)
public:
static Object^ CreateInstance(
    Type^ type
)
static member CreateInstance :
        type:Type -> Object

参数

type
类型： System Type
要创建的对象的类型。

返回值

类型： System Object
对新创建对象的引用。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不是 RuntimeType。 - 或 - type 是一个开放式泛型类型（即，ContainsGenericParameters 属性返回 true）。
NotSupportedException | type 不能为 TypeBuilder。 - 或 - 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - 包含 type 的程序集是动态程序集，使用 AssemblyBuilderAccess..::.Save 创建。
TargetInvocationException | 被调用的构造函数引发异常。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
MissingMethodException | 找不到匹配的公共构造函数。
COMException | type 是一个 COM 对象，但用于获取类型的类标识符无效，或被标识的类未注册。
TypeLoadException | type 不是有效的类型。

要调用的构造函数必须是可访问的。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。

下面的代码示例演示如何调用 CreateInstance(Type) 方法。此代码示例摘自一个为 Activator 类提供的更大示例。 下面的代码示例演示如何调用 CreateInstance(Type) 方法。此代码示例摘自一个为 Activator 类提供的更大示例。

' Create an instance of the StringBuilder type using
' Activator.CreateInstance.
Dim o As Object = Activator.CreateInstance(GetType(StringBuilder))

' Append a string into the StringBuilder object and display the
' StringBuilder.
Dim sb As StringBuilder = CType(o, StringBuilder)
sb.Append("Hello, there.")
Console.WriteLine(sb)

// Create an instance of the StringBuilder type using
// Activator.CreateInstance.
Object o = Activator.CreateInstance(typeof(StringBuilder));

// Append a string into the StringBuilder object and display the
// StringBuilder.
StringBuilder sb = (StringBuilder) o;
sb.Append("Hello, there.");
Console.WriteLine(sb);

// Create an instance of the StringBuilder type using
// Activator.CreateInstance.
Object^ o = Activator::CreateInstance(StringBuilder::typeid);

// Append a string into the StringBuilder object and display the
// StringBuilder.
StringBuilder^ sb = (StringBuilder^) o;
sb->Append("Hello, there.");
Console::WriteLine(sb);
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间


Activator ..::.CreateInstance 方法 (ActivationContext, array<String >[]()[])

Activator
.
.
::
.
CreateInstance 方法 (ActivationContext,
array<
String
>
[]
()
[]
)
Activator 类

创建类型的一个实例，该类型由指定的 ActivationContext 对象指定，并由指定的自定义激活数据激活。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    activationContext As ActivationContext, _
    activationCustomData As String() _
) As ObjectHandle
public static ObjectHandle CreateInstance(
    ActivationContext activationContext,
    string[] activationCustomData
)
public:
static ObjectHandle^ CreateInstance(
    ActivationContext^ activationContext,
    array<String^>^ activationCustomData
)
static member CreateInstance :
        activationContext:ActivationContext *
        activationCustomData:string[] -> ObjectHandle

参数

activationContext
类型： System ActivationContext
一个激活上下文对象，用于指定要创建的对象。
activationCustomData
类型：
array<
System String
>
[]
()
[]

一个包含自定义激活数据的 Unicode 字符串数组。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的对象则必须解包的句柄。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

激活上下文在基于清单的激活期间使用，以设置域策略和提供基于应用程序的安全模型。ActivationContext 类包含一个 ApplicationIdentity 对象，该对象提供对应用程序清单的访问。有关更多信息，请参见 ApplicationSecurityManager 类。 激活上下文在基于清单的激活期间使用，以设置域策略和提供基于应用程序的安全模型。ActivationContext 类包含一个 ApplicationIdentity 对象，该对象提供对应用程序清单的访问。有关更多信息，请参见 ApplicationSecurityManager 类。 激活上下文在基于清单的激活期间使用，以设置域策略和提供基于应用程序的安全模型。ActivationContext 类包含一个 ApplicationIdentity 对象，该对象提供对应用程序清单的访问。有关更多信息，请参见 ApplicationSecurityManager 类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间
ActivationContext
ApplicationIdentity
ApplicationSecurityManager


Activator ..::.CreateInstance 方法 (String, String)

Activator
.
.
::
.
CreateInstance 方法 (String, String)
Activator 类

使用命名的程序集和默认构造函数，创建名称已指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    assemblyName As String, _
    typeName As String _
) As ObjectHandle
public static ObjectHandle CreateInstance(
    string assemblyName,
    string typeName
)
public:
static ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName
)
static member CreateInstance :
        assemblyName:string *
        typeName:string -> ObjectHandle

参数

assemblyName
类型： System String
将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。 将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。
typeName
类型： System String
首选类型的名称。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 找不到匹配的公共构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
NotSupportedException | 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

使用 ObjectHandle..::.Unwrap 解包返回值。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间


Activator ..::.CreateInstance 方法 (Type, Boolean)

Activator
.
.
::
.
CreateInstance 方法 (Type, Boolean)
Activator 类

使用指定类型的默认构造函数来创建该类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    type As Type, _
    nonPublic As Boolean _
) As Object
public static Object CreateInstance(
    Type type,
    bool nonPublic
)
public:
static Object^ CreateInstance(
    Type^ type,
    bool nonPublic
)
static member CreateInstance :
        type:Type *
        nonPublic:bool -> Object

参数

type
类型： System Type
要创建的对象的类型。
nonPublic
类型： System Boolean
如果公共或非公共默认构造函数可以匹配，则为 true；如果只有公共默认构造函数可以匹配，则为 false。

返回值

类型： System Object
对新创建对象的引用。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不是 RuntimeType。 - 或 - type 是一个开放式泛型类型（即，ContainsGenericParameters 属性返回 true）。
NotSupportedException | type 不能为 TypeBuilder。 - 或 - 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - 包含 type 的程序集是动态程序集，使用 AssemblyBuilderAccess..::.Save 创建。
TargetInvocationException | 被调用的构造函数引发异常。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
MissingMethodException | 找不到匹配的公共构造函数。
COMException | type 是一个 COM 对象，但用于获取类型的类标识符无效，或被标识的类未注册。
TypeLoadException | type 不是有效的类型。
说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型和成员的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型和成员。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型和成员的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型和成员。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间


Activator ..::.CreateInstance 方法 (Type, array<Object >[]()[])

Activator
.
.
::
.
CreateInstance 方法 (Type,
array<
Object
>
[]
()
[]
)
Activator 类

使用与指定参数匹配程度最高的构造函数创建指定类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    type As Type, _
    ParamArray args As Object() _
) As Object
public static Object CreateInstance(
    Type type,
    params Object[] args
)
public:
static Object^ CreateInstance(
    Type^ type,
    ... array<Object^>^ args
)
static member CreateInstance :
        type:Type *
        args:Object[] -> Object

参数

type
类型： System Type
要创建的对象的类型。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。

返回值

类型： System Object
对新创建对象的引用。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不是 RuntimeType。 - 或 - type 是一个开放式泛型类型（即，ContainsGenericParameters 属性返回 true）。
NotSupportedException | type 不能为 TypeBuilder。 - 或 - 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - 包含 type 的程序集是动态程序集，使用 AssemblyBuilderAccess..::.Save 创建。 - 或 - 与 args 匹配程度最高的构造函数具有 varargs 参数。
TargetInvocationException | 被调用的构造函数引发异常。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
MissingMethodException | 找不到匹配的公共构造函数。
COMException | type 是一个 COM 对象，但用于获取类型的类标识符无效，或被标识的类未注册。
TypeLoadException | type 不是有效的类型。

要调用的构造函数必须是可访问的，并且必须提供与指定参数列表匹配程度最高的匹配项。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间


Activator ..::.CreateInstance 方法 (AppDomain, String, String)

Activator
.
.
::
.
CreateInstance 方法 (AppDomain, String, String)
Activator 类

使用命名的程序集和默认构造函数，来创建其名称在指定的远程域中指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    domain As AppDomain, _
    assemblyName As String, _
    typeName As String _
) As ObjectHandle
public static ObjectHandle CreateInstance(
    AppDomain domain,
    string assemblyName,
    string typeName
)
public:
static ObjectHandle^ CreateInstance(
    AppDomain^ domain,
    String^ assemblyName,
    String^ typeName
)
static member CreateInstance :
        domain:AppDomain *
        assemblyName:string *
        typeName:string -> ObjectHandle

参数

domain
类型： System AppDomain
在其中创建名为 typeName 的类型的远程域。
assemblyName
类型： System String
将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。 将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。
typeName
类型： System String
首选类型的名称。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 或 domain 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 找不到匹配的公共构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类型的实例。 - 或 - 用后期绑定机制调用该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
NotSupportedException | 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

当主机需要在具有受限安全权限的应用程序域中执行代码时，请使用 CreateInstance。

使用 ObjectHandle..::.Unwrap 解包返回值。

说明 说明

此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。 此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间


Activator ..::.CreateInstance 方法 (String, String, array<Object >[]()[])

Activator
.
.
::
.
CreateInstance 方法 (String, String,
array<
Object
>
[]
()
[]
)
Activator 类

使用命名的程序集和默认构造函数，创建名称已指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    assemblyName As String, _
    typeName As String, _
    activationAttributes As Object() _
) As ObjectHandle
public static ObjectHandle CreateInstance(
    string assemblyName,
    string typeName,
    Object[] activationAttributes
)
public:
static ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName,
    array<Object^>^ activationAttributes
)
static member CreateInstance :
        assemblyName:string *
        typeName:string *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyName
类型： System String
将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。 将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。
typeName
类型： System String
首选类型的名称。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 找不到匹配的公共构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
NotSupportedException | 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。 - 或 - activationAttributes 不是 UrlAttribute。 数组。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
TargetInvocationException | 尝试在 activationAttributes 中指定的目标中进行远程激活时发生错误。

使用 ObjectHandle..::.Unwrap 解包返回值。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且非公共类型的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且非公共类型的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstance 方法 (Type, array<Object >[]()[], array<Object >[]()[])

Activator
.
.
::
.
CreateInstance 方法 (Type,
array<
Object
>
[]
()
[]
,
array<
Object
>
[]
()
[]
)
Activator 类

使用与指定参数匹配程度最高的构造函数创建指定类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    type As Type, _
    args As Object(), _
    activationAttributes As Object() _
) As Object
public static Object CreateInstance(
    Type type,
    Object[] args,
    Object[] activationAttributes
)
public:
static Object^ CreateInstance(
    Type^ type,
    array<Object^>^ args,
    array<Object^>^ activationAttributes
)
static member CreateInstance :
        type:Type *
        args:Object[] *
        activationAttributes:Object[] -> Object

参数

type
类型： System Type
要创建的对象的类型。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System Object
对新创建对象的引用。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不是 RuntimeType。 - 或 - type 是一个开放式泛型类型（即，ContainsGenericParameters 属性返回 true）。
NotSupportedException | type 不能为 TypeBuilder。 - 或 - 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。 - 或 - 包含 type 的程序集是动态程序集，使用 AssemblyBuilderAccess..::.Save 创建。 - 或 - 与 args 匹配程度最高的构造函数具有 varargs 参数。
TargetInvocationException | 被调用的构造函数引发异常。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
MissingMethodException | 找不到匹配的公共构造函数。
COMException | type 是一个 COM 对象，但用于获取类型的类标识符无效，或被标识的类未注册。
TypeLoadException | type 不是有效的类型。

要调用的构造函数必须是可访问的，并且必须提供与指定参数列表匹配程度最高的匹配项。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstance 方法 (Type, BindingFlags, Binder, array<Object >[]()[], CultureInfo)

Activator
.
.
::
.
CreateInstance 方法 (Type, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo)
Activator 类

使用与指定参数匹配程度最高的构造函数创建指定类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    type As Type, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo _
) As Object
public static Object CreateInstance(
    Type type,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture
)
public:
static Object^ CreateInstance(
    Type^ type,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture
)
static member CreateInstance :
        type:Type *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo -> Object

参数

type
类型： System Type
要创建的对象的类型。
bindingAttr
类型： System.Reflection BindingFlags
影响 type 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 type 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 type 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 type 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 type 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 type 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。

返回值

类型： System Object
对新创建对象的引用。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不是 RuntimeType。 - 或 - type 是一个开放式泛型类型（即，ContainsGenericParameters 属性返回 true）。
NotSupportedException | type 不能为 TypeBuilder。 - 或 - 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - 包含 type 的程序集是动态程序集，使用 AssemblyBuilderAccess..::.Save 创建。 - 或 - 与 args 匹配程度最高的构造函数具有 varargs 参数。
TargetInvocationException | 被调用的构造函数引发异常。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
MissingMethodException | 未找到匹配的构造函数。
COMException | type 是一个 COM 对象，但用于获取类型的类标识符无效，或被标识的类未注册。
TypeLoadException | type 不是有效的类型。

要调用的构造函数必须提供在指定联编程序和绑定特性约束下，与指定参数列表匹配程度最高的匹配项。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型和成员的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型和成员。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型和成员的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型和成员。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间


Activator ..::.CreateInstance 方法 (Type, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[])

Activator
.
.
::
.
CreateInstance 方法 (Type, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
)
Activator 类

使用与指定参数匹配程度最高的构造函数创建指定类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    type As Type, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object() _
) As Object
public static Object CreateInstance(
    Type type,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes
)
public:
static Object^ CreateInstance(
    Type^ type,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes
)
static member CreateInstance :
        type:Type *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] -> Object

参数

type
类型： System Type
要创建的对象的类型。
bindingAttr
类型： System.Reflection BindingFlags
影响 type 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 type 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 type 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 type 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 type 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 type 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System Object
对新创建对象的引用。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不是 RuntimeType。 - 或 - type 是一个开放式泛型类型（即，ContainsGenericParameters 属性返回 true）。
NotSupportedException | type 不能为 TypeBuilder。 - 或 - 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。 - 或 - 包含 type 的程序集是动态程序集，使用 AssemblyBuilderAccess..::.Save 创建。 - 或 - 与 args 匹配程度最高的构造函数具有 varargs 参数。
TargetInvocationException | 被调用的构造函数引发异常。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
MissingMethodException | 未找到匹配的构造函数。
COMException | type 是一个 COM 对象，但用于获取类型的类标识符无效，或被标识的类未注册。
TypeLoadException | type 不是有效的类型。

要调用的构造函数必须提供在指定联编程序和绑定特性约束下，与指定参数列表匹配程度最高的匹配项。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且非公共类型和成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型和成员。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且非公共类型和成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共类型和成员。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence

  • ReflectionPermission

    用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[])

Activator
.
.
::
.
CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
)
Activator 类

使用指定的程序集和与指定参数匹配程度最高的构造函数来创建指定名称的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object() _
) As ObjectHandle
public static ObjectHandle CreateInstance(
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes
)
public:
static ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes
)
static member CreateInstance :
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyName
类型： System String
将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。 将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。
typeName
类型： System String
首选类型的名称。
ignoreCase
类型： System Boolean
使用 true 指定对 typeName 的搜索不区分大小写；使用 false 则指定搜索区分大小写。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
NotSupportedException | 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。 - 或 - 与 args 匹配程度最高的构造函数具有 varargs 参数。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

使用 ObjectHandle..::.Unwrap 解包返回值。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型和成员的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型和成员。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型和成员的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型和成员。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstance 方法 (AppDomain, String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[])

Activator
.
.
::
.
CreateInstance 方法 (AppDomain, String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
)
Activator 类

使用命名的程序集和最匹配所指定参数的构造函数，来创建其名称在指定的远程域中指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    domain As AppDomain, _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object() _
) As ObjectHandle
public static ObjectHandle CreateInstance(
    AppDomain domain,
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes
)
public:
static ObjectHandle^ CreateInstance(
    AppDomain^ domain,
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes
)
static member CreateInstance :
        domain:AppDomain *
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] -> ObjectHandle

参数

domain
类型： System AppDomain
在其中创建名为 typeName 的类型的域。
assemblyName
类型： System String
将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。 将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。
typeName
类型： System String
首选类型的名称。
ignoreCase
类型： System Boolean
使用 true 指定对 typeName 的搜索不区分大小写；使用 false 则指定搜索区分大小写。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | domain 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
NotSupportedException | 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。 - 或 - 与 args 匹配程度最高的构造函数具有 varargs 参数。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

当主机需要在具有受限安全权限的应用程序域中执行代码时，请使用 CreateInstance。

使用 ObjectHandle..::.Unwrap 解包返回值。

说明 说明

此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。 此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

Activator
.
.
::
.
CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
Activator 类

注意：此 API 现在已过时。 非过时替代项是 CreateInstance(String, String, Boolean, BindingFlags, Binder, Object , CultureInfo, Object )。

使用指定的程序集和与指定参数匹配程度最高的构造函数来创建指定名称的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Shared Function CreateInstance ( _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityInfo As Evidence _
) As ObjectHandle
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public static ObjectHandle CreateInstance(
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityInfo
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
static ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityInfo
)
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
static member CreateInstance :
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityInfo:Evidence -> ObjectHandle

参数

assemblyName
类型： System String
将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。 将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。
typeName
类型： System String
首选类型的名称。
ignoreCase
类型： System Boolean
使用 true 指定对 typeName 的搜索不区分大小写；使用 false 则指定搜索区分大小写。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityInfo
类型： System.Security.Policy Evidence
用于做出安全策略决策和授予代码权限的信息。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
NotSupportedException | 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。 - 或 - 与 args 匹配程度最高的构造函数具有 varargs 参数。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

使用 ObjectHandle..::.Unwrap 解包返回值。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型和成员的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型和成员。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已使用 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志授予调用方 ReflectionPermission，并且包含非公共类型和成员的程序集的授予集限制为调用方的授予集或其子集，则此方法可用于创建非公共类型和成员。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstance 方法 (AppDomain, String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

Activator
.
.
::
.
CreateInstance 方法 (AppDomain, String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
Activator 类

注意：此 API 现在已过时。 非过时替代项是 CreateInstance(AppDomain, String, String, Boolean, BindingFlags, Binder, Object , CultureInfo, Object )。

使用命名的程序集和最匹配所指定参数的构造函数，来创建其名称在指定的远程域中指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Shared Function CreateInstance ( _
    domain As AppDomain, _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityAttributes As Evidence _
) As ObjectHandle
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public static ObjectHandle CreateInstance(
    AppDomain domain,
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityAttributes
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
static ObjectHandle^ CreateInstance(
    AppDomain^ domain,
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityAttributes
)
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
static member CreateInstance :
        domain:AppDomain *
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> ObjectHandle

参数

domain
类型： System AppDomain
在其中创建名为 typeName 的类型的域。
assemblyName
类型： System String
将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。 将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则搜索正在执行的程序集。
typeName
类型： System String
首选类型的名称。
ignoreCase
类型： System Boolean
使用 true 指定对 typeName 的搜索不区分大小写；使用 false 则指定搜索区分大小写。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityAttributes
类型： System.Security.Policy Evidence
用于做出安全策略决策和授予代码权限的信息。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | domain 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
InvalidComObjectException | COM 类型不是通过 GetTypeFromProgID 或 GetTypeFromCLSID 获得的。
NotSupportedException | 不支持创建 TypedReference、ArgIterator、Void 和 RuntimeArgumentHandle 类型或者由这些类型组成的数组。 - 或 - activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。 - 或 - 与 args 匹配程度最高的构造函数具有 varargs 参数。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

当主机需要在具有受限安全权限的应用程序域中执行代码时，请使用 CreateInstance。

使用 ObjectHandle..::.Unwrap 解包返回值。

说明 说明

此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。 此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

Activator 类
Activator 成员
CreateInstance 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstanceFrom 方法

Activator
.
.
::
.
CreateInstanceFrom 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Activator 类

使用指定的程序集文件和与指定参数匹配程度最高的构造函数来创建指定名称的类型的实例。

名称 说明
页首

参考

Activator 类
Activator 成员
System 命名空间


Activator ..::.CreateInstanceFrom 方法 (String, String)

Activator
.
.
::
.
CreateInstanceFrom 方法 (String, String)
Activator 类

使用命名的程序集文件和默认构造函数，创建名称已指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String _
) As ObjectHandle
public static ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName
)
public:
static ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName
)
static member CreateInstanceFrom :
        assemblyFile:string *
        typeName:string -> ObjectHandle

参数

assemblyFile
类型： System String
包含某程序集的文件的名称，将在该程序集内查找名为 typeName 的类型。
typeName
类型： System String
首选类型的名称。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 找不到匹配的公共构造函数。
TypeLoadException | 在 assemblyFile 中找不到 typename。
FileNotFoundException | 未找到 assemblyFile。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
SecurityException | 调用方确实具有所需的 FileIOPermission。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

有关所调用方法可以引发的其他异常的信息，请参见 Assembly..::.LoadFrom 和 CreateInstance 方法的“异常”节。

下面的代码示例演示如何调用 CreateInstanceFrom 方法。此代码示例摘自一个为 Activator 类提供的更大示例。 下面的代码示例演示如何调用 CreateInstanceFrom 方法。此代码示例摘自一个为 Activator 类提供的更大示例。

' Create an instance of the SomeType class that is defined in this assembly.
Dim oh As System.Runtime.Remoting.ObjectHandle = _
    Activator.CreateInstanceFrom(Assembly.GetEntryAssembly().CodeBase, _
                                 GetType(SomeType).FullName)

' Call an instance method defined by the SomeType type using this object.
Dim st As SomeType = CType(oh.Unwrap(), SomeType)

st.DoSomething(5)

// Create an instance of the SomeType class that is defined in this
// assembly.
System.Runtime.Remoting.ObjectHandle oh =
    Activator.CreateInstanceFrom(Assembly.GetEntryAssembly().CodeBase,
                                 typeof(SomeType).FullName);

// Call an instance method defined by the SomeType type using this object.
SomeType st = (SomeType) oh.Unwrap();

st.DoSomething(5);

// Create an instance of the SomeType class that is defined in this
// assembly.
System::Runtime::Remoting::ObjectHandle^ oh =
    Activator::CreateInstanceFrom(Assembly::GetEntryAssembly()->CodeBase,
                                  SomeType::typeid->FullName);

// Call an instance method defined by the SomeType type using this object.
SomeType^ st = (SomeType^) oh->Unwrap();

st->DoSomething(5);
  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • FileIOPermission

    表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read 表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read

  • ReflectionPermission

    用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstanceFrom 重载
System 命名空间


Activator ..::.CreateInstanceFrom 方法 (AppDomain, String, String)

Activator
.
.
::
.
CreateInstanceFrom 方法 (AppDomain, String, String)
Activator 类

使用命名的程序集文件和默认构造函数，来创建其名称在指定的远程域中指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstanceFrom ( _
    domain As AppDomain, _
    assemblyFile As String, _
    typeName As String _
) As ObjectHandle
public static ObjectHandle CreateInstanceFrom(
    AppDomain domain,
    string assemblyFile,
    string typeName
)
public:
static ObjectHandle^ CreateInstanceFrom(
    AppDomain^ domain,
    String^ assemblyFile,
    String^ typeName
)
static member CreateInstanceFrom :
        domain:AppDomain *
        assemblyFile:string *
        typeName:string -> ObjectHandle

参数

domain
类型： System AppDomain
在其中创建名为 typeName 的类型的远程域。
assemblyFile
类型： System String
包含某程序集的文件的名称，将在该程序集内查找名为 typeName 的类型。
typeName
类型： System String
首选类型的名称。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | domain 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 找不到匹配的公共构造函数。
TypeLoadException | 在 assemblyFile 中找不到 typename。
FileNotFoundException | 未找到 assemblyFile。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
SecurityException | 调用方确实具有所需的 FileIOPermission。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。

当主机需要在具有受限安全权限的应用程序域中执行代码时，请使用 CreateInstanceFrom。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

说明 说明

此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。 此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。

有关所调用方法可以引发的其他异常的信息，请参见 Assembly..::.LoadFrom 和 CreateInstance 方法的“异常”节。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • FileIOPermission

    表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read 表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstanceFrom 重载
System 命名空间


Activator ..::.CreateInstanceFrom 方法 (String, String, array<Object >[]()[])

Activator
.
.
::
.
CreateInstanceFrom 方法 (String, String,
array<
Object
>
[]
()
[]
)
Activator 类

使用命名的程序集文件和默认构造函数，创建名称已指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String, _
    activationAttributes As Object() _
) As ObjectHandle
public static ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName,
    Object[] activationAttributes
)
public:
static ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName,
    array<Object^>^ activationAttributes
)
static member CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyFile
类型： System String
包含某程序集的文件的名称，将在该程序集内查找名为 typeName 的类型。
typeName
类型： System String
首选类型的名称。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 找不到匹配的公共构造函数。
TypeLoadException | 在 assemblyFile 中找不到 typename。
FileNotFoundException | 未找到 assemblyFile。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
NotSupportedException | activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。
SecurityException | 调用方确实具有所需的 FileIOPermission。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

有关所调用方法可以引发的其他异常的信息，请参见 Assembly..::.LoadFrom 和 CreateInstance 方法的“异常”节。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • FileIOPermission

    表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read 表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read

  • ReflectionPermission

    用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型的授予集限制为调用方的授予集或其子集时，访问非公共类型。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 用于访问非公共类型，而无论其授予集是什么。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstanceFrom 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[])

Activator
.
.
::
.
CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
)
Activator 类

使用指定的程序集文件和与指定参数匹配程度最高的构造函数来创建指定名称的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object() _
) As ObjectHandle
public static ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes
)
public:
static ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes
)
static member CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyFile
类型： System String
包含某程序集的文件的名称，将在该程序集内查找名为 typeName 的类型。
typeName
类型： System String
首选类型的名称。
ignoreCase
类型： System Boolean
使用 true 指定对 typeName 的搜索不区分大小写；使用 false 则指定搜索区分大小写。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyFile 中找不到 typename。
FileNotFoundException | 未找到 assemblyFile。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
SecurityException | 调用方没有所要求的 FileIOPermission。
NotSupportedException | activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

有关所调用方法可以引发的其他异常的信息，请参见 Assembly..::.LoadFrom 和 CreateInstance 方法的“异常”节。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • FileIOPermission

    表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read 表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read

  • ReflectionPermission

    用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstanceFrom 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstanceFrom 方法 (AppDomain, String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[])

Activator
.
.
::
.
CreateInstanceFrom 方法 (AppDomain, String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
)
Activator 类

使用命名的程序集文件和最匹配所指定参数的构造函数，来创建其名称在指定的远程域中指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstanceFrom ( _
    domain As AppDomain, _
    assemblyFile As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object() _
) As ObjectHandle
public static ObjectHandle CreateInstanceFrom(
    AppDomain domain,
    string assemblyFile,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes
)
public:
static ObjectHandle^ CreateInstanceFrom(
    AppDomain^ domain,
    String^ assemblyFile,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes
)
static member CreateInstanceFrom :
        domain:AppDomain *
        assemblyFile:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] -> ObjectHandle

参数

domain
类型： System AppDomain
在其中创建名为 typeName 的类型的远程域。
assemblyFile
类型： System String
包含某程序集的文件的名称，将在该程序集内查找名为 typeName 的类型。
typeName
类型： System String
首选类型的名称。
ignoreCase
类型： System Boolean
使用 true 指定对 typeName 的搜索不区分大小写；使用 false 则指定搜索区分大小写。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | domain 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyFile 中找不到 typename。
FileNotFoundException | 未找到 assemblyFile。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
SecurityException | 调用方确实具有所需的 FileIOPermission。
NotSupportedException | activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - assemblyName 是针对晚于当前加载版本的公共语言运行时版本编译的。

当主机需要在具有受限安全权限的应用程序域中执行代码时，请使用 CreateInstanceFrom。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

有关所调用方法可以引发的其他异常的信息，请参见 Assembly..::.LoadFrom 和 CreateInstance 方法的“异常”节。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence

  • FileIOPermission

    表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read 表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read

  • ReflectionPermission

    用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
CreateInstanceFrom 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

Activator
.
.
::
.
CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
Activator 类

注意：此 API 现在已过时。 非过时替代项是 CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object , CultureInfo, Object )。

使用指定的程序集文件和与指定参数匹配程度最高的构造函数来创建指定名称的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Shared Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityInfo As Evidence _
) As ObjectHandle
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public static ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityInfo
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
static ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityInfo
)
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
static member CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityInfo:Evidence -> ObjectHandle

参数

assemblyFile
类型： System String
包含某程序集的文件的名称，将在该程序集内查找名为 typeName 的类型。
typeName
类型： System String
首选类型的名称。
ignoreCase
类型： System Boolean
使用 true 指定对 typeName 的搜索不区分大小写；使用 false 则指定搜索区分大小写。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityInfo
类型： System.Security.Policy Evidence
用于做出安全策略决策和授予代码权限的信息。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyFile 中找不到 typename。
FileNotFoundException | 未找到 assemblyFile。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
SecurityException | 调用方没有所要求的 FileIOPermission。
NotSupportedException | activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

有关所调用方法可以引发的其他异常的信息，请参见 Assembly..::.LoadFrom 和 CreateInstance 方法的“异常”节。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • FileIOPermission

    表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read 表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read

  • ReflectionPermission

    用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

Activator 类
Activator 成员
CreateInstanceFrom 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.CreateInstanceFrom 方法 (AppDomain, String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

Activator
.
.
::
.
CreateInstanceFrom 方法 (AppDomain, String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
Activator 类

注意：此 API 现在已过时。 非过时替代项是 CreateInstanceFrom(AppDomain, String, String, Boolean, BindingFlags, Binder, Object , CultureInfo, Object )。

使用命名的程序集文件和最匹配所指定参数的构造函数，来创建其名称在指定的远程域中指定的类型的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use Evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Shared Function CreateInstanceFrom ( _
    domain As AppDomain, _
    assemblyFile As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityAttributes As Evidence _
) As ObjectHandle
[ObsoleteAttribute("Methods which use Evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public static ObjectHandle CreateInstanceFrom(
    AppDomain domain,
    string assemblyFile,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityAttributes
)
[ObsoleteAttribute(L"Methods which use Evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
static ObjectHandle^ CreateInstanceFrom(
    AppDomain^ domain,
    String^ assemblyFile,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityAttributes
)
[<ObsoleteAttribute("Methods which use Evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
static member CreateInstanceFrom :
        domain:AppDomain *
        assemblyFile:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> ObjectHandle

参数

domain
类型： System AppDomain
在其中创建名为 typeName 的类型的远程域。
assemblyFile
类型： System String
包含某程序集的文件的名称，将在该程序集内查找名为 typeName 的类型。
typeName
类型： System String
首选类型的名称。
ignoreCase
类型： System Boolean
使用 true 指定对 typeName 的搜索不区分大小写；使用 false 则指定搜索区分大小写。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。 使用 bindingAttr 和 args 来查找和标识 typeName 构造函数的对象。如果 binder 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。 与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则调用不带任何参数的构造函数（默认构造函数）。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常为包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityAttributes
类型： System.Security.Policy Evidence
用于做出安全策略决策和授予代码权限的信息。

返回值

类型： System.Runtime.Remoting ObjectHandle
要访问新创建的实例则必须解包的句柄。
异常 | 条件
ArgumentNullException | domain 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyFile 中找不到 typename。
FileNotFoundException | 未找到 assemblyFile。
MethodAccessException | 调用方没有调用此构造函数的权限。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
TargetInvocationException | 通过反射调用的构造函数引发了异常。
SecurityException | 调用方确实具有所需的 FileIOPermission。
NotSupportedException | activationAttributes 不是空数组，并且正创建的类型未从 MarshalByRefObject 派生。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。 当前加载的是 2.0 或更高版本的公共语言运行时 (CLR)，而 assemblyName 是用高于当前加载版本的 CLR 版本编译的。请注意，.NET Framework 2.0 版、3.0 版和 3.5 版都使用 CLR 2.0 版。

当主机需要在具有受限安全权限的应用程序域中执行代码时，请使用 CreateInstanceFrom。

使用 ObjectHandle..::.Unwrap 方法解包返回值。

说明 说明

此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。 此方法使用 SecurityAction..::.LinkDemand 来要求直接调用方具有完全信任。有关使用 LinkDemand 成员的重要限制，请参见 Demand 和 LinkDemand。

有关所调用方法可以引发的其他异常的信息，请参见 Assembly..::.LoadFrom 和 CreateInstance 方法的“异常”节。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence

  • FileIOPermission

    表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read 表示搜索目录路径和读取目录内容的能力。关联枚举：FileIOPermissionAccess..::.PathDiscovery 和 FileIOPermissionAccess..::.Read

  • ReflectionPermission

    用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共类型和成员的授予集限制为调用方的授予集或其子集时，访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共类型和成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

Activator 类
Activator 成员
CreateInstanceFrom 重载
System 命名空间

其他资源

.NET Remoting Overview


Activator ..::.GetObject 方法

Activator
.
.
::
.
GetObject 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Activator 类

为已知对象或 XML Web services 创建一个代理。

名称 说明
页首

参考

Activator 类
Activator 成员
System 命名空间


Activator ..::.GetObject 方法 (Type, String)

Activator
.
.
::
.
GetObject 方法 (Type, String)
Activator 类

为指定类型和 URL 所指示的已知对象创建一个代理。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetObject ( _
    type As Type, _
    url As String _
) As Object
public static Object GetObject(
    Type type,
    string url
)
public:
static Object^ GetObject(
    Type^ type,
    String^ url
)
static member GetObject :
        type:Type *
        url:string -> Object

参数

type
类型： System Type
希望连接到的已知对象的类型。
url
类型： System String
已知对象的 URL。

返回值

类型： System Object
一个代理，它指向由所请求的已知对象服务的终结点。
异常 | 条件
ArgumentNullException | type 或 url 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RemotingException | type 未通过引用进行封送。 - 或 - type 是一个接口。
MemberAccessException | 用后期绑定机制调用该成员。

调用代理向远程对象发送消息。对代理调用方法之前，不向网络发送消息。 调用代理向远程对象发送消息。对代理调用方法之前，不向网络发送消息。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
GetObject 重载
System 命名空间
WellKnownObjectMode
RemotingConfiguration


Activator ..::.GetObject 方法 (Type, String, Object)

Activator
.
.
::
.
GetObject 方法 (Type, String, Object)
Activator 类

为指定类型、URL 和通道数据所指示的已知对象创建一个代理。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetObject ( _
    type As Type, _
    url As String, _
    state As Object _
) As Object
public static Object GetObject(
    Type type,
    string url,
    Object state
)
public:
static Object^ GetObject(
    Type^ type,
    String^ url,
    Object^ state
)
static member GetObject :
        type:Type *
        url:string *
        state:Object -> Object

参数

type
类型： System Type
希望连接到的已知对象的类型。
url
类型： System String
已知对象的 URL。
state
类型： System Object
通道特定的数据或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Object
一个代理，它指向由所请求的已知对象服务的终结点。
异常 | 条件
ArgumentNullException | type 或 url 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RemotingException | type 未通过引用进行封送。 - 或 - type 是一个接口。
MemberAccessException | 用后期绑定机制调用该成员。

调用代理向远程对象发送消息。对代理调用方法之前，不向网络发送消息。 调用代理向远程对象发送消息。对代理调用方法之前，不向网络发送消息。

state 参数向通道传送信息，该参数将传递到 IChannelSender..::.CreateMessageSink 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Activator 类
Activator 成员
GetObject 重载
System 命名空间
WellKnownObjectMode
RemotingConfiguration


AggregateException 类

AggregateException 类
成员

表示在应用程序执行期间发生的一个或多个错误。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class AggregateException _
    Inherits Exception
[SerializableAttribute]
public class AggregateException : Exception
[SerializableAttribute]
public ref class AggregateException : public Exception
[<SerializableAttribute>]
type AggregateException =
    class
        inherit Exception
    end

AggregateException 用于将多个失败合并到一个可引发的异常对象。它广泛用于 任务并行库 和 并行 LINQ (PLINQ) 中。有关示例，请参见 如何：处理由任务引发的异常 和 如何：处理 PLINQ 查询中的异常。 AggregateException 用于将多个失败合并到一个可引发的异常对象。它广泛用于 任务并行库 和 并行 LINQ (PLINQ) 中。有关示例，请参见 如何：处理由任务引发的异常 和 如何：处理 PLINQ 查询中的异常。 AggregateException 用于将多个失败合并到一个可引发的异常对象。它广泛用于 任务并行库 和 并行 LINQ (PLINQ) 中。有关示例，请参见 如何：处理由任务引发的异常 和 如何：处理 PLINQ 查询中的异常。

System System..::.AggregateExceptionAggregateException

AggregateException 的所有公共且受保护的成员都是线程安全的，可从多个线程同时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 成员
System 命名空间


AggregateException 成员

AggregateException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AggregateException 类

表示在应用程序执行期间发生的一个或多个错误。

AggregateException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

AggregateException 类
System 命名空间


AggregateException 构造函数

AggregateException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AggregateException 类

名称 说明
页首

参考

AggregateException 类
AggregateException 成员
System 命名空间


AggregateException 构造函数

AggregateException 构造函数
AggregateException 类

使用由系统提供的用来描述错误的消息初始化 AggregateException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public AggregateException()
public:
AggregateException()
new : unit -> AggregateException

此构造函数将新实例的 Message 属性初始化为由系统提供的用来描述错误的消息，如“DefaultMessageDisplayedByParameterlessCtorWriterMustSupply”。此消息考虑到了当前系统区域性。

下表显示 InsufficientMemoryException 实例的初始属性值。

Property | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
AggregateException 重载
System 命名空间

其他资源

处理和引发异常
如何：处理由任务引发的异常


AggregateException 构造函数 (IEnumerable <(Of <(Exception >)>))

AggregateException 构造函数 (IEnumerable
<
(Of
<
(
Exception
>
)
>
)
)
AggregateException 类

使用对导致此异常的内部异常的引用来初始化 AggregateException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    innerExceptions As IEnumerable(Of Exception) _
)
public AggregateException(
    IEnumerable<Exception> innerExceptions
)
public:
AggregateException(
    IEnumerable<Exception^>^ innerExceptions
)
new :
        innerExceptions:IEnumerable<Exception> -> AggregateException

参数

innerExceptions
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Exception
>
)
>
)

导致当前异常的异常。
异常 | 条件
ArgumentNullException | innerExceptions 参数为 null。
ArgumentException | innerExceptions 的元素为 Null。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
AggregateException 重载
System 命名空间


AggregateException 构造函数 ( array<Exception >[]()[])

AggregateException 构造函数 (
array<
Exception
>
[]
()
[]
)
AggregateException 类

使用对导致此异常的内部异常的引用来初始化 AggregateException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    ParamArray innerExceptions As Exception() _
)
public AggregateException(
    params Exception[] innerExceptions
)
public:
AggregateException(
    ... array<Exception^>^ innerExceptions
)
new :
        innerExceptions:Exception[] -> AggregateException

参数

innerExceptions
类型：
array<
System Exception
>
[]
()
[]

导致当前异常的异常。
异常 | 条件
ArgumentNullException | innerExceptions 参数为 null。
ArgumentException | innerExceptions 的元素为 Null。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
AggregateException 重载
System 命名空间


AggregateException 构造函数 (String)

AggregateException 构造函数 (String)
AggregateException 类

使用指定的错误描述消息初始化 AggregateException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public AggregateException(
    string message
)
public:
AggregateException(
    String^ message
)
new :
        message:string -> AggregateException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 AggregateException 实例的初始属性值。

Property | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
AggregateException 重载
System 命名空间

其他资源

处理和引发异常
如何：处理由任务引发的异常


AggregateException 构造函数 (SerializationInfo, StreamingContext)

AggregateException 构造函数 (SerializationInfo, StreamingContext)
AggregateException 类

使用序列化数据初始化 AggregateException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected AggregateException(
    SerializationInfo info,
    StreamingContext context
)
protected:
AggregateException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> AggregateException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。
异常 | 条件
ArgumentNullException | info 参数为 null。
SerializationException | 异常未能正确进行反序列化。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见XML and SOAP Serialization。 在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见XML and SOAP Serialization。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
AggregateException 重载
System 命名空间

其他资源

XML and SOAP Serialization


AggregateException 构造函数 (String, IEnumerable <(Of <(Exception >)>))

AggregateException 构造函数 (String, IEnumerable
<
(Of
<
(
Exception
>
)
>
)
)
AggregateException 类

使用指定的错误消息和对导致此异常的内部异常的引用来初始化 AggregateException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerExceptions As IEnumerable(Of Exception) _
)
public AggregateException(
    string message,
    IEnumerable<Exception> innerExceptions
)
public:
AggregateException(
    String^ message,
    IEnumerable<Exception^>^ innerExceptions
)
new :
        message:string *
        innerExceptions:IEnumerable<Exception> -> AggregateException

参数

message
类型： System String
解释异常原因的错误消息。
innerExceptions
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Exception
>
)
>
)

导致当前异常的异常。
异常 | 条件
ArgumentNullException | innerExceptions 参数为 null。
ArgumentException | innerExceptions 的元素为 Null。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
AggregateException 重载
System 命名空间


AggregateException 构造函数 (String, Exception)

AggregateException 构造函数 (String, Exception)
AggregateException 类

使用指定的错误消息和对导致此异常的内部异常的引用来初始化 AggregateException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public AggregateException(
    string message,
    Exception innerException
)
public:
AggregateException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> AggregateException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。
异常 | 条件
ArgumentNullException | innerException 参数为 null。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 AggregateException 实例的初始属性值。

Property | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
AggregateException 重载
System 命名空间

其他资源

处理和引发异常
如何：处理由任务引发的异常


AggregateException 构造函数 (String, array<Exception >[]()[])

AggregateException 构造函数 (String,
array<
Exception
>
[]
()
[]
)
AggregateException 类

使用指定的错误消息和对导致此异常的内部异常的引用来初始化 AggregateException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    ParamArray innerExceptions As Exception() _
)
public AggregateException(
    string message,
    params Exception[] innerExceptions
)
public:
AggregateException(
    String^ message,
    ... array<Exception^>^ innerExceptions
)
new :
        message:string *
        innerExceptions:Exception[] -> AggregateException

参数

message
类型： System String
解释异常原因的错误消息。
innerExceptions
类型：
array<
System Exception
>
[]
()
[]

导致当前异常的异常。
异常 | 条件
ArgumentNullException | innerExceptions 参数为 null。
ArgumentException | innerExceptions 的元素为 Null。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
AggregateException 重载
System 命名空间

其他资源

如何：处理由任务引发的异常


AggregateException 方法

AggregateException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AggregateException 类

AggregateException 类型公开以下成员。

名称 说明
页首

参考

AggregateException 类
System 命名空间


AggregateException ..::.Flatten 方法

AggregateException
.
.
::
.
Flatten 方法
AggregateException 类

将 AggregateException 实例平展入单个新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Flatten As AggregateException
public AggregateException Flatten()
public:
AggregateException^ Flatten()
member Flatten : unit -> AggregateException

返回值

类型： System AggregateException
一个新的平展 AggregateException。

如果任何内部异常本身是 AggregateException 的实例，此方法将以递归方式平面化所有这些异常。在新的 AggregateException 返回的内部异常将是以提供的 AggregateException 实例为根的异常树中所有内部异常的联合。 如果任何内部异常本身是 AggregateException 的实例，此方法将以递归方式平面化所有这些异常。在新的 AggregateException 返回的内部异常将是以提供的 AggregateException 实例为根的异常树中所有内部异常的联合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
System 命名空间

其他资源

如何：处理由任务引发的异常


AggregateException ..::.GetBaseException 方法

AggregateException
.
.
::
.
GetBaseException 方法
AggregateException 类

返回 AggregateException，它是此异常的根本原因。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetBaseException As Exception
public override Exception GetBaseException()
public:
virtual Exception^ GetBaseException() override
abstract GetBaseException : unit -> Exception
override GetBaseException : unit -> Exception

返回值

类型： System Exception
返回 AggregateException，它是此异常的根本原因。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
System 命名空间


AggregateException ..::.GetObjectData 方法

AggregateException
.
.
::
.
GetObjectData 方法
AggregateException 类

使用序列化数据初始化 AggregateException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

实现

异常 | 条件
ArgumentNullException | info 参数为 null。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见XML and SOAP Serialization。 在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见XML and SOAP Serialization。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
System 命名空间

其他资源

XML and SOAP Serialization


AggregateException ..::.Handle 方法

AggregateException
.
.
::
.
Handle 方法
AggregateException 类

对此 AggregateException 所包含的每个 Exception 调用处理程序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Handle ( _
    predicate As Func(Of Exception, Boolean) _
)
public void Handle(
    Func<Exception, bool> predicate
)
public:
void Handle(
    Func<Exception^, bool>^ predicate
)
member Handle :
        predicate:Func<Exception, bool> -> unit

参数

predicate
类型： System Func
<
(Of
<
(
Exception, Boolean
>
)
>
)

要对每个异常执行的谓词。该谓词接受作为参数来处理 Exception，并返回指示异常是否已处理的布尔值。 要对每个异常执行的谓词。该谓词接受作为参数来处理 Exception，并返回指示异常是否已处理的布尔值。
异常 | 条件
ArgumentNullException | predicate 参数为 null。
AggregateException | 未处理此 AggregateException 包含的异常。

predicate 的每个调用返回 true 或 false 以指示 Exception 是否已处理。在所有调用后，如果任何异常未处理，所有未处理的异常将放入将引发的新 AggregateException 中。否则，只是返回 Handle 方法。如果 predicate 的任何调用引发了异常，将暂停处理更多的异常并立即照原样传播引发的异常。 predicate 的每个调用返回 true 或 false 以指示 Exception 是否已处理。在所有调用后，如果任何异常未处理，所有未处理的异常将放入将引发的新 AggregateException 中。否则，只是返回 Handle 方法。如果 predicate 的任何调用引发了异常，将暂停处理更多的异常并立即照原样传播引发的异常。 predicate 的每个调用返回 true 或 false 以指示 Exception 是否已处理。在所有调用后，如果任何异常未处理，所有未处理的异常将放入将引发的新 AggregateException 中。否则，只是返回 Handle 方法。如果 predicate 的任何调用引发了异常，将暂停处理更多的异常并立即照原样传播引发的异常。 predicate 的每个调用返回 true 或 false 以指示 Exception 是否已处理。在所有调用后，如果任何异常未处理，所有未处理的异常将放入将引发的新 AggregateException 中。否则，只是返回 Handle 方法。如果 predicate 的任何调用引发了异常，将暂停处理更多的异常并立即照原样传播引发的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
System 命名空间


AggregateException ..::.ToString 方法

AggregateException
.
.
::
.
ToString 方法
AggregateException 类

创建并返回当前 AggregateException 的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前异常的字符串表示形式。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
System 命名空间


AggregateException 属性

AggregateException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AggregateException 类

AggregateException 类型公开以下成员。

名称 说明
页首

参考

AggregateException 类
System 命名空间


AggregateException ..::.InnerExceptions 属性

AggregateException
.
.
::
.
InnerExceptions 属性
AggregateException 类

获取导致当前异常的 Exception 实例的只读集合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property InnerExceptions As ReadOnlyCollection(Of Exception)
    Get
public ReadOnlyCollection<Exception> InnerExceptions { get; }
public:
property ReadOnlyCollection<Exception^>^ InnerExceptions {
    ReadOnlyCollection<Exception^>^ get ();
}
member InnerExceptions : ReadOnlyCollection<Exception>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
Exception
>
)
>
)

返回导致当前异常的 Exception 实例的只读集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AggregateException 类
AggregateException 成员
System 命名空间

其他资源

如何：处理由任务引发的异常


AggregateException 事件

AggregateException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AggregateException 类

AggregateException 类型公开以下成员。

名称 说明
页首

参考

AggregateException 类
System 命名空间


AppDomain 类

AppDomain 类
成员

表示应用程序域，它是一个应用程序在其中执行的独立环境。此类不能被继承。 表示应用程序域，它是一个应用程序在其中执行的独立环境。此类不能被继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public NotInheritable Class AppDomain _
    Inherits MarshalByRefObject _
    Implements _AppDomain, IEvidenceFactory
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public sealed class AppDomain : MarshalByRefObject,
    _AppDomain, IEvidenceFactory
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
public ref class AppDomain sealed : public MarshalByRefObject,
    _AppDomain, IEvidenceFactory
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
type AppDomain =
    class
        inherit MarshalByRefObject
        interface _AppDomain
        interface IEvidenceFactory
    end

应用程序域（由 AppDomain 对象表示）为执行托管代码提供隔离、卸载和安全边界。

  • 使用应用程序域隔离可能终止进程的任务。如果正在执行任务的 AppDomain 的状态变得不稳定，则可以卸载 AppDomain，但不会影响进程。当进程必须不重新启动而长时间运行时，这一点很重要。还可使用应用程序域隔离不应共享数据的任务。 使用应用程序域隔离可能终止进程的任务。如果正在执行任务的 AppDomain 的状态变得不稳定，则可以卸载 AppDomain，但不会影响进程。当进程必须不重新启动而长时间运行时，这一点很重要。还可使用应用程序域隔离不应共享数据的任务。 使用应用程序域隔离可能终止进程的任务。如果正在执行任务的 AppDomain 的状态变得不稳定，则可以卸载 AppDomain，但不会影响进程。当进程必须不重新启动而长时间运行时，这一点很重要。还可使用应用程序域隔离不应共享数据的任务。 使用应用程序域隔离可能终止进程的任务。如果正在执行任务的 AppDomain 的状态变得不稳定，则可以卸载 AppDomain，但不会影响进程。当进程必须不重新启动而长时间运行时，这一点很重要。还可使用应用程序域隔离不应共享数据的任务。

  • 如果程序集被加载到默认应用程序域中，则当进程运行时将无法从内存中卸载该程序集。但是，如果打开另一个应用程序域来加载和执行程序集，则卸载该应用程序域时也会同时卸载程序集。使用此技术最小化长时间运行的进程的工作集，这些进程偶尔会使用大型 DLL。 如果程序集被加载到默认应用程序域中，则当进程运行时将无法从内存中卸载该程序集。但是，如果打开另一个应用程序域来加载和执行程序集，则卸载该应用程序域时也会同时卸载程序集。使用此技术最小化长时间运行的进程的工作集，这些进程偶尔会使用大型 DLL。 如果程序集被加载到默认应用程序域中，则当进程运行时将无法从内存中卸载该程序集。但是，如果打开另一个应用程序域来加载和执行程序集，则卸载该应用程序域时也会同时卸载程序集。使用此技术最小化长时间运行的进程的工作集，这些进程偶尔会使用大型 DLL。

多个应用程序域可以在一个进程中运行；但是，在应用程序域和线程之间没有一对一的关联。多个线程可以属于一个应用程序域，尽管给定的线程并不局限于一个应用程序域，但在任何给定时间，线程都在一个应用程序域中执行。 多个应用程序域可以在一个进程中运行；但是，在应用程序域和线程之间没有一对一的关联。多个线程可以属于一个应用程序域，尽管给定的线程并不局限于一个应用程序域，但在任何给定时间，线程都在一个应用程序域中执行。

使用 CreateDomain 方法创建应用程序域。AppDomain 实例用于加载和执行程序集 （Assembly)。当不再使用 AppDomain 时，可以将它卸载。 使用 CreateDomain 方法创建应用程序域。AppDomain 实例用于加载和执行程序集 （Assembly)。当不再使用 AppDomain 时，可以将它卸载。 使用 CreateDomain 方法创建应用程序域。AppDomain 实例用于加载和执行程序集 （Assembly)。当不再使用 AppDomain 时，可以将它卸载。

AppDomain 类实现一组事件，这些事件使应用程序可以在加载程序集、要卸载应用程序域或引发未经处理的异常时进行响应。

有关使用应用程序域的更多信息，请参见 应用程序域。

此类实现 MarshalByRefObject、_AppDomain 和 IEvidenceFactory 接口。

在任何情况下都不应创建 AppDomain 对象的可远程控制的包装。这样做可发布对该 AppDomain 的远程引用，将诸如 CreateInstance 方法向远程访问公开，并有效损坏该 AppDomain 的代码访问安全性。连接到远程 AppDomain 的恶意客户端可以获得对 AppDomain 本身可访问的所有资源的访问权。您不应为任何以下类型创建可远程控制的包装：扩展 MarshalByRefObject 的类型和实现恶意客户端可用来绕过安全系统的方法的类型。 在任何情况下都不应创建 AppDomain 对象的可远程控制的包装。这样做可发布对该 AppDomain 的远程引用，将诸如 CreateInstance 方法向远程访问公开，并有效损坏该 AppDomain 的代码访问安全性。连接到远程 AppDomain 的恶意客户端可以获得对 AppDomain 本身可访问的所有资源的访问权。您不应为任何以下类型创建可远程控制的包装：扩展 MarshalByRefObject 的类型和实现恶意客户端可用来绕过安全系统的方法的类型。 在任何情况下都不应创建 AppDomain 对象的可远程控制的包装。这样做可发布对该 AppDomain 的远程引用，将诸如 CreateInstance 方法向远程访问公开，并有效损坏该 AppDomain 的代码访问安全性。连接到远程 AppDomain 的恶意客户端可以获得对 AppDomain 本身可访问的所有资源的访问权。您不应为任何以下类型创建可远程控制的包装：扩展 MarshalByRefObject 的类型和实现恶意客户端可用来绕过安全系统的方法的类型。 在任何情况下都不应创建 AppDomain 对象的可远程控制的包装。这样做可发布对该 AppDomain 的远程引用，将诸如 CreateInstance 方法向远程访问公开，并有效损坏该 AppDomain 的代码访问安全性。连接到远程 AppDomain 的恶意客户端可以获得对 AppDomain 本身可访问的所有资源的访问权。您不应为任何以下类型创建可远程控制的包装：扩展 MarshalByRefObject 的类型和实现恶意客户端可用来绕过安全系统的方法的类型。

警告说明 警告

AppDomainSetup..::.DisallowCodeDownload 属性的默认值为 false。此设置对于服务是不安全的。若要防止服务下载部分受信任的代码，请将此属性设置为 true。 AppDomainSetup..::.DisallowCodeDownload 属性的默认值为 false。此设置对于服务是不安全的。若要防止服务下载部分受信任的代码，请将此属性设置为 true。 AppDomainSetup..::.DisallowCodeDownload 属性的默认值为 false。此设置对于服务是不安全的。若要防止服务下载部分受信任的代码，请将此属性设置为 true。

此示例显示如何创建新的 AppDomain，在该新建 AppDomain 中实例化类型，以及与该类型的对象通信。此外，此示例还显示如何卸载导致对象被垃圾回收的 AppDomain。 此示例显示如何创建新的 AppDomain，在该新建 AppDomain 中实例化类型，以及与该类型的对象通信。此外，此示例还显示如何卸载导致对象被垃圾回收的 AppDomain。

Imports System
Imports System.Reflection
Imports System.Threading

Module Module1
    Sub Main()

        ' Get and display the friendly name of the default AppDomain.
        Dim callingDomainName As String = Thread.GetDomain().FriendlyName
        Console.WriteLine(callingDomainName)

        ' Get and display the full name of the EXE assembly.
        Dim exeAssembly As String = [Assembly].GetEntryAssembly().FullName
        Console.WriteLine(exeAssembly)

        ' Construct and initialize settings for a second AppDomain.
        Dim ads As New AppDomainSetup()
        ads.ApplicationBase = _
            System.Environment.CurrentDirectory
        ads.DisallowBindingRedirects = False
        ads.DisallowCodeDownload = True
        ads.ConfigurationFile = _
            AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

        ' Create the second AppDomain.
        Dim ad2 As AppDomain = AppDomain.CreateDomain("AD #2", Nothing, ads)

        ' Create an instance of MarshalbyRefType in the second AppDomain.
        ' A proxy to the object is returned.
        Dim mbrt As MarshalByRefType = CType( _
            ad2.CreateInstanceAndUnwrap(exeAssembly, _
                 GetType(MarshalByRefType).FullName), MarshalByRefType)

        ' Call a method on the object via the proxy, passing the default
        ' AppDomain's friendly name in as a parameter.
        mbrt.SomeMethod(callingDomainName)

        ' Unload the second AppDomain. This deletes its object and
        ' invalidates the proxy object.
        AppDomain.Unload(ad2)
        Try
            ' Call the method again. Note that this time it fails because
            ' the second AppDomain was unloaded.
            mbrt.SomeMethod(callingDomainName)
            Console.WriteLine("Sucessful call.")
        Catch e As AppDomainUnloadedException
            Console.WriteLine("Failed call; this is expected.")
        End Try

    End Sub
End Module

' Because this class is derived from MarshalByRefObject, a proxy
' to a MarshalByRefType object can be returned across an AppDomain
' boundary.
Public Class MarshalByRefType
    Inherits MarshalByRefObject

    '  Call this method via a proxy.
    Public Sub SomeMethod(ByVal callingDomainName As String)

        ' Get this AppDomain's settings and display some of them.
        Dim ads As AppDomainSetup = AppDomain.CurrentDomain.SetupInformation
        Console.WriteLine("AppName={0}, AppBase={1}, ConfigFile={2}", _
            ads.ApplicationName, ads.ApplicationBase, ads.ConfigurationFile)

        ' Display the name of the calling AppDomain and the name
        ' of the second domain.
        ' NOTE: The application's thread has transitioned between
        ' AppDomains.
        Console.WriteLine("Calling from '{0}' to '{1}'.", _
            callingDomainName, Thread.GetDomain().FriendlyName)
    End Sub
End Class

'This code produces output similar to the following:
'
' AppDomainX.exe
' AppDomainX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
' AppName=, AppBase=C:\AppDomain\bin, ConfigFile=C:\AppDomain\bin\AppDomainX.exe.config
' Calling from 'AppDomainX.exe' to 'AD #2'.
' Failed call; this is expected.

using System;
using System.Reflection;
using System.Threading;

class Module1
{
    public static void Main()
    {
        // Get and display the friendly name of the default AppDomain.
        string callingDomainName = Thread.GetDomain().FriendlyName;
        Console.WriteLine(callingDomainName);

        // Get and display the full name of the EXE assembly.
        string exeAssembly = Assembly.GetEntryAssembly().FullName;
        Console.WriteLine(exeAssembly);

        // Construct and initialize settings for a second AppDomain.
        AppDomainSetup ads = new AppDomainSetup();
        ads.ApplicationBase =
            System.Environment.CurrentDirectory;
        ads.DisallowBindingRedirects = false;
        ads.DisallowCodeDownload = true;
        ads.ConfigurationFile =
            AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

        // Create the second AppDomain.
        AppDomain ad2 = AppDomain.CreateDomain("AD #2", null, ads);

        // Create an instance of MarshalbyRefType in the second AppDomain.
        // A proxy to the object is returned.
        MarshalByRefType mbrt =
            (MarshalByRefType) ad2.CreateInstanceAndUnwrap(
                exeAssembly,
                typeof(MarshalByRefType).FullName
            );

        // Call a method on the object via the proxy, passing the
        // default AppDomain's friendly name in as a parameter.
        mbrt.SomeMethod(callingDomainName);

        // Unload the second AppDomain. This deletes its object and
        // invalidates the proxy object.
        AppDomain.Unload(ad2);
        try
        {
            // Call the method again. Note that this time it fails
            // because the second AppDomain was unloaded.
            mbrt.SomeMethod(callingDomainName);
            Console.WriteLine("Sucessful call.");
        }
        catch(AppDomainUnloadedException)
        {
            Console.WriteLine("Failed call; this is expected.");
        }
    }
}

// Because this class is derived from MarshalByRefObject, a proxy
// to a MarshalByRefType object can be returned across an AppDomain
// boundary.
public class MarshalByRefType : MarshalByRefObject
{
    //  Call this method via a proxy.
    public void SomeMethod(string callingDomainName)
    {
        // Get this AppDomain's settings and display some of them.
        AppDomainSetup ads = AppDomain.CurrentDomain.SetupInformation;
        Console.WriteLine("AppName={0}, AppBase={1}, ConfigFile={2}",
            ads.ApplicationName,
            ads.ApplicationBase,
            ads.ConfigurationFile
        );

        // Display the name of the calling AppDomain and the name
        // of the second domain.
        // NOTE: The application's thread has transitioned between
        // AppDomains.
        Console.WriteLine("Calling from '{0}' to '{1}'.",
            callingDomainName,
            Thread.GetDomain().FriendlyName
        );
    }
}

/* This code produces output similar to the following:

AppDomainX.exe
AppDomainX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
AppName=, AppBase=C:\AppDomain\bin, ConfigFile=C:\AppDomain\bin\AppDomainX.exe.config
Calling from 'AppDomainX.exe' to 'AD #2'.
Failed call; this is expected.
 */

using namespace System;
using namespace System::Reflection;
using namespace System::Threading;
using namespace System::Security::Policy;

// Because this class is derived from MarshalByRefObject, a proxy
// to a MarshalByRefType object can be returned across an AppDomain
// boundary.
ref class MarshalByRefType : MarshalByRefObject
{
public:
    //  Call this method via a proxy.
    void SomeMethod(String^ callingDomainName)
    {
        // Get this AppDomain's settings and display some of them.
        AppDomainSetup^ ads = AppDomain::CurrentDomain->SetupInformation;
        Console::WriteLine("AppName={0}, AppBase={1}, ConfigFile={2}",
            ads->ApplicationName,
            ads->ApplicationBase,
            ads->ConfigurationFile
        );

        // Display the name of the calling AppDomain and the name
        // of the second domain.
        // NOTE: The application's thread has transitioned between
        // AppDomains.
        Console::WriteLine("Calling from '{0}' to '{1}'.",
            callingDomainName,
            Thread::GetDomain()->FriendlyName
        );
    };
};

void main()
{
    // Get and display the friendly name of the default AppDomain.
    String^ callingDomainName = Thread::GetDomain()->FriendlyName;
    Console::WriteLine(callingDomainName);

    // Get and display the full name of the EXE assembly.
    String^ exeAssembly = Assembly::GetEntryAssembly()->FullName;
    Console::WriteLine(exeAssembly);

    // Construct and initialize settings for a second AppDomain.
    AppDomainSetup^ ads = gcnew AppDomainSetup();
    ads->ApplicationBase =
        System::Environment::CurrentDirectory;
    ads->DisallowBindingRedirects = false;
    ads->DisallowCodeDownload = true;
    ads->ConfigurationFile =
        AppDomain::CurrentDomain->SetupInformation->ConfigurationFile;

    // Create the second AppDomain.
    AppDomain^ ad2 = AppDomain::CreateDomain("AD #2",
        AppDomain::CurrentDomain->Evidence, ads);

    // Create an instance of MarshalbyRefType in the second AppDomain.
    // A proxy to the object is returned.
    MarshalByRefType^ mbrt =
        (MarshalByRefType^) ad2->CreateInstanceAndUnwrap(
            exeAssembly,
            MarshalByRefType::typeid->FullName
        );

    // Call a method on the object via the proxy, passing the
    // default AppDomain's friendly name in as a parameter.
    mbrt->SomeMethod(callingDomainName);

    // Unload the second AppDomain. This deletes its object and
    // invalidates the proxy object.
    AppDomain::Unload(ad2);
    try
    {
        // Call the method again. Note that this time it fails
        // because the second AppDomain was unloaded.
        mbrt->SomeMethod(callingDomainName);
        Console::WriteLine("Sucessful call.");
    }
    catch(AppDomainUnloadedException^)
    {
        Console::WriteLine("Failed call; this is expected.");
    }
}

/* This code produces output similar to the following:

AppDomainX.exe
AppDomainX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
AppName=, AppBase=C:\AppDomain\bin, ConfigFile=C:\AppDomain\bin\AppDomainX.exe.config
Calling from 'AppDomainX.exe' to 'AD #2'.
Failed call; this is expected.
 */

System System..::.AppDomainAppDomain
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 成员
System 命名空间

其他资源

如何：配置应用程序域
如何：创建应用程序域
如何：将程序集加载到应用程序域中
如何：卸载应用程序域


AppDomain 成员

AppDomain 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

表示应用程序域，它是一个应用程序在其中执行的独立环境。此类不能被继承。 表示应用程序域，它是一个应用程序在其中执行的独立环境。此类不能被继承。

AppDomain 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

AppDomain 类
System 命名空间


AppDomain 方法

AppDomain 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

AppDomain 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

AppDomain 类
System 命名空间


AppDomain ..::._AppDomain ..::.GetIDsOfNames 方法

AppDomain
.
.
::
.
_AppDomain
.
.
::
.
GetIDsOfNames 方法
AppDomain 类

将一组名称映射为对应的一组调度标识符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetIDsOfNames ( _
    ByRef riid As Guid, _
    rgszNames As IntPtr, _
    cNames As UInteger, _
    lcid As UInteger, _
    rgDispId As IntPtr _
) Implements _AppDomain.GetIDsOfNames
void _AppDomain.GetIDsOfNames(
    ref Guid riid,
    IntPtr rgszNames,
    uint cNames,
    uint lcid,
    IntPtr rgDispId
)
private:
virtual void GetIDsOfNames(
    [InAttribute] Guid% riid,
    IntPtr rgszNames,
    unsigned int cNames,
    unsigned int lcid,
    IntPtr rgDispId
) sealed = _AppDomain::GetIDsOfNames
private abstract GetIDsOfNames :
        riid:Guid byref *
        rgszNames:IntPtr *
        cNames:uint32 *
        lcid:uint32 *
        rgDispId:IntPtr -> unit
private override GetIDsOfNames :
        riid:Guid byref *
        rgszNames:IntPtr *
        cNames:uint32 *
        lcid:uint32 *
        rgDispId:IntPtr -> unit

参数

riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
rgszNames
类型： System IntPtr
要映射的名称的传入数组。
cNames
类型： System UInt32
要映射的名称的计数。
lcid
类型： System UInt32
要在其中解释名称的区域设置上下文。
rgDispId
类型： System IntPtr
调用方分配的数组，用于接收与名称对应的 ID。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::._AppDomain ..::.GetTypeInfo 方法

AppDomain
.
.
::
.
_AppDomain
.
.
::
.
GetTypeInfo 方法
AppDomain 类

检索对象的类型信息，然后可以使用该信息获取接口的类型信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetTypeInfo ( _
    iTInfo As UInteger, _
    lcid As UInteger, _
    ppTInfo As IntPtr _
) Implements _AppDomain.GetTypeInfo
void _AppDomain.GetTypeInfo(
    uint iTInfo,
    uint lcid,
    IntPtr ppTInfo
)
private:
virtual void GetTypeInfo(
    unsigned int iTInfo,
    unsigned int lcid,
    IntPtr ppTInfo
) sealed = _AppDomain::GetTypeInfo
private abstract GetTypeInfo :
        iTInfo:uint32 *
        lcid:uint32 *
        ppTInfo:IntPtr -> unit
private override GetTypeInfo :
        iTInfo:uint32 *
        lcid:uint32 *
        ppTInfo:IntPtr -> unit

参数

iTInfo
类型： System UInt32
要返回的类型信息。
lcid
类型： System UInt32
类型信息的区域设置标识符。
ppTInfo
类型： System IntPtr
接收一个指针，指向请求的类型信息对象。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::._AppDomain ..::.GetTypeInfoCount 方法

AppDomain
.
.
::
.
_AppDomain
.
.
::
.
GetTypeInfoCount 方法
AppDomain 类

检索对象提供的类型信息接口的数量（0 或 1）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetTypeInfoCount ( _
    <OutAttribute> ByRef pcTInfo As UInteger _
) Implements _AppDomain.GetTypeInfoCount
void _AppDomain.GetTypeInfoCount(
    out uint pcTInfo
)
private:
virtual void GetTypeInfoCount(
    [OutAttribute] unsigned int% pcTInfo
) sealed = _AppDomain::GetTypeInfoCount
private abstract GetTypeInfoCount :
        pcTInfo:uint32 byref -> unit
private override GetTypeInfoCount :
        pcTInfo:uint32 byref -> unit

参数

pcTInfo
类型： System UInt32 %
指向一个位置，该位置接收对象提供的类型信息接口的数量。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::._AppDomain ..::.Invoke 方法

AppDomain
.
.
::
.
_AppDomain
.
.
::
.
Invoke 方法
AppDomain 类

提供对某一对象公开的属性和方法的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Invoke ( _
    dispIdMember As UInteger, _
    ByRef riid As Guid, _
    lcid As UInteger, _
    wFlags As Short, _
    pDispParams As IntPtr, _
    pVarResult As IntPtr, _
    pExcepInfo As IntPtr, _
    puArgErr As IntPtr _
) Implements _AppDomain.Invoke
void _AppDomain.Invoke(
    uint dispIdMember,
    ref Guid riid,
    uint lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
)
private:
virtual void Invoke(
    unsigned int dispIdMember,
    [InAttribute] Guid% riid,
    unsigned int lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
) sealed = _AppDomain::Invoke
private abstract Invoke :
        dispIdMember:uint32 *
        riid:Guid byref *
        lcid:uint32 *
        wFlags:int16 *
        pDispParams:IntPtr *
        pVarResult:IntPtr *
        pExcepInfo:IntPtr *
        puArgErr:IntPtr -> unit
private override Invoke :
        dispIdMember:uint32 *
        riid:Guid byref *
        lcid:uint32 *
        wFlags:int16 *
        pDispParams:IntPtr *
        pVarResult:IntPtr *
        pExcepInfo:IntPtr *
        puArgErr:IntPtr -> unit

参数

dispIdMember
类型： System UInt32
标识成员。
riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
lcid
类型： System UInt32
要在其中解释参数的区域设置上下文。
wFlags
类型： System Int16
描述调用的上下文的标志。
pDispParams
类型： System IntPtr
指向一个结构的指针，该结构包含一个参数数组、一个命名参数的 DISPID 参数数组和数组中元素数的计数。
pVarResult
类型： System IntPtr
指向要存储结果的位置的指针。
pExcepInfo
类型： System IntPtr
指向一个包含异常信息的结构的指针。
puArgErr
类型： System IntPtr
第一个出错参数的索引。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.AppendPrivatePath 方法

AppDomain
.
.
::
.
AppendPrivatePath 方法
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 PrivateBinPath。

将指定的目录名追加到专用路径列表。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("AppDomain.AppendPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub AppendPrivatePath ( _
    path As String _
)
[ObsoleteAttribute("AppDomain.AppendPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public void AppendPrivatePath(
    string path
)
[ObsoleteAttribute(L"AppDomain.AppendPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public:
virtual void AppendPrivatePath(
    String^ path
) sealed
[<ObsoleteAttribute("AppDomain.AppendPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract AppendPrivatePath :
        path:string -> unit
[<ObsoleteAttribute("AppDomain.AppendPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
override AppendPrivatePath :
        path:string -> unit

参数

path
类型： System String
要追加到专用路径的目录名称。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

不建议使用此属性，因为它可能会在程序集加载之后更改这些程序集的探测路径。改用 AppDomainSetup..::.PrivateBinPath 属性。 不建议使用此属性，因为它可能会在程序集加载之后更改这些程序集的探测路径。改用 AppDomainSetup..::.PrivateBinPath 属性。

专用路径（或相对搜索路径）是指相对于基目录的路径，在此程序集冲突解决程序探测专用程序集。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ApplyPolicy 方法

AppDomain
.
.
::
.
ApplyPolicy 方法
AppDomain 类

返回应用策略后的程序集显示名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function ApplyPolicy ( _
    assemblyName As String _
) As String
[ComVisibleAttribute(false)]
public string ApplyPolicy(
    string assemblyName
)
[ComVisibleAttribute(false)]
public:
String^ ApplyPolicy(
    String^ assemblyName
)
[<ComVisibleAttribute(false)>]
member ApplyPolicy :
        assemblyName:string -> string

参数

assemblyName
类型： System String
程序集显示名称，采用 Assembly..::.FullName 属性提供的格式。

返回值

类型： System String
包含应用策略后的程序集显示名称的字符串。

ApplyPolicy 方法接受一个程序集显示名称，然后返回应用策略后的显示名称。这在需要使用策略加载程序集时很有用，因为只反射上下文不能应用策略。 ApplyPolicy 方法接受一个程序集显示名称，然后返回应用策略后的显示名称。这在需要使用策略加载程序集时很有用，因为只反射上下文不能应用策略。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ClearPrivatePath 方法

AppDomain
.
.
::
.
ClearPrivatePath 方法
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 PrivateBinPath。

将指定专用程序集位置的路径重置为空字符串 ("")。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("AppDomain.ClearPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub ClearPrivatePath
[ObsoleteAttribute("AppDomain.ClearPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public void ClearPrivatePath()
[ObsoleteAttribute(L"AppDomain.ClearPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public:
virtual void ClearPrivatePath() sealed
[<ObsoleteAttribute("AppDomain.ClearPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract ClearPrivatePath : unit -> unit
[<ObsoleteAttribute("AppDomain.ClearPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
override ClearPrivatePath : unit -> unit

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

专用路径是相对于基目录的路径，公共语言运行时搜索该路径，以定位专用程序集。

有关更多信息，请参见AppDomainSetup..::.PrivateBinPath。

下面的代码示例演示了如何使用 ClearPrivatePath 方法从加载程序集时要搜索的专用路径列表中移除所有项。

此方法现已过时，不应当用于新的开发工作。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object

Class ADAppendPrivatePath

   Public Shared Sub Main()
      'Create evidence for new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      'Create the new application domain.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence)

      'Display the current relative search path.
      Console.WriteLine("Relative search path is: " & domain.RelativeSearchPath)

      'Append the relative path.
      Dim Newpath As [String] = "www.code.microsoft.com"
      domain.AppendPrivatePath(Newpath)

      'Display the new relative search path.
      Console.WriteLine("Relative search path is: " & domain.RelativeSearchPath)

      'Clear the private search path.
      domain.ClearPrivatePath()

      'Display the new relative search path.
      Console.WriteLine("Relative search path is now: " & domain.RelativeSearchPath)

      AppDomain.Unload(domain)
   End Sub 'Main
End Class 'ADAppendPrivatePath

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object

class ADAppendPrivatePath
{
    public static void Main()
    {
        //Create evidence for new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;

        //Create the new application domain.
        AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence);

        //Display the current relative search path.
        Console.WriteLine("Relative search path is: " + domain.RelativeSearchPath);

        //Append the relative path.
        String Newpath = "www.code.microsoft.com";
        domain.AppendPrivatePath(Newpath);

        //Display the new relative search path.
        Console.WriteLine("Relative search path is: " + domain.RelativeSearchPath);

        //Clear the private search path.
        domain.ClearPrivatePath();

        //Display the new relative search path.
        Console.WriteLine("Relative search path is now: " + domain.RelativeSearchPath);

        AppDomain.Unload(domain);
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for evidence Object
int main()
{

   //Create evidence for new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   //Create the new application domain.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence );

   //Display the current relative search path.
   Console::WriteLine( "Relative search path is: {0}", domain->RelativeSearchPath );

   //Append the relative path.
   String^ Newpath = "www.code.microsoft.com";
   domain->AppendPrivatePath( Newpath );

   //Display the new relative search path.
   Console::WriteLine( "Relative search path is: {0}", domain->RelativeSearchPath );

   //Clear the private search path.
   domain->ClearPrivatePath();

   //Display the new relative search path.
   Console::WriteLine( "Relative search path is now: {0}", domain->RelativeSearchPath );
   AppDomain::Unload( domain );
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
System 命名空间
String Empty


AppDomain ..::.ClearShadowCopyPath 方法

AppDomain
.
.
::
.
ClearShadowCopyPath 方法
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ShadowCopyDirectories。

将包含影像复制的程序集的目录列表重置为空字符串 ("")。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("AppDomain.ClearShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub ClearShadowCopyPath
[ObsoleteAttribute("AppDomain.ClearShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public void ClearShadowCopyPath()
[ObsoleteAttribute(L"AppDomain.ClearShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public:
virtual void ClearShadowCopyPath() sealed
[<ObsoleteAttribute("AppDomain.ClearShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract ClearShadowCopyPath : unit -> unit
[<ObsoleteAttribute("AppDomain.ClearShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
override ClearShadowCopyPath : unit -> unit

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

影像副本路径是目录列表，在这些目录中存储影像复制的程序集。

有关更多信息，请参见AppDomainSetup..::.ShadowCopyDirectories和 影像复制程序集。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
System 命名空间
String Empty

其他资源

影像复制程序集


AppDomain ..::.CreateComInstanceFrom 方法

AppDomain
.
.
::
.
CreateComInstanceFrom 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

创建指定 COM 类型的新实例。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.CreateComInstanceFrom 方法 (String, String)

AppDomain
.
.
::
.
CreateComInstanceFrom 方法 (String, String)
AppDomain 类

创建指定 COM 类型的新实例。形参指定文件的名称，该文件包含含有类型和类型名称的程序集。 创建指定 COM 类型的新实例。形参指定文件的名称，该文件包含含有类型和类型名称的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateComInstanceFrom ( _
    assemblyName As String, _
    typeName As String _
) As ObjectHandle
public ObjectHandle CreateComInstanceFrom(
    string assemblyName,
    string typeName
)
public:
ObjectHandle^ CreateComInstanceFrom(
    String^ assemblyName,
    String^ typeName
)
member CreateComInstanceFrom :
        assemblyName:string *
        typeName:string -> ObjectHandle

参数

assemblyName
类型： System String
文件的名称，该文件包含定义所请求的类型的程序集。
typeName
类型： System String
所请求类型的名称。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。 一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。
异常 | 条件
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TypeLoadException | 无法加载该类型。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
MissingMethodException | 未找到公共无形参构造函数。
FileNotFoundException | assemblyName 未找到。
MemberAccessException | typeName 是抽象类。 - 或 - 用后期绑定机制调用该成员。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
ArgumentException | assemblyName 为空字符串 ("")。
BadImageFormatException | assemblyName 不是有效程序集。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
NullReferenceException | 所引用的 COM 对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

使用此方法可远程创建对象，而无需本地加载该类型。

返回值需要打开包装才能访问实际对象。

必须以显式方式或默认方式对 COM 类型应用值为 true 的 System.Runtime.InteropServices..::.ComVisibleAttribute 特性，这样，此方法才能创建该类型的实例；否则，会引发 TypeLoadException。

下面的示例演示

Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

<ComVisible(True)> _
Class MyComVisibleType

   Public Sub New()
      Console.WriteLine("MyComVisibleType instantiated!")
   End Sub 'New

End Class 'MyComVisibleType

<ComVisible(False)> _
Class MyComNonVisibleType

   Public Sub New()
      Console.WriteLine("MyComNonVisibleType instantiated!")
   End Sub 'New

End Class 'MyComNonVisibleType

Module Test

   Sub Main()
      CreateComInstance("MyComNonVisibleType")   ' Fail!
      CreateComInstance("MyComVisibleType")      ' OK!
   End Sub 'Main

   Sub CreateComInstance(typeName As String)
      Try
         Dim currentDomain As AppDomain = AppDomain.CurrentDomain
         Dim assemblyName As String = currentDomain.FriendlyName
         currentDomain.CreateComInstanceFrom(assemblyName, typeName)
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'CreateComInstance

End Module 'Test

using System;
using System.Reflection;
using System.Runtime.InteropServices;

[ComVisible(true)]
class MyComVisibleType {
   public MyComVisibleType() {
      Console.WriteLine("MyComVisibleType instantiated!");
   }
}

[ComVisible(false)]
class MyComNonVisibleType {
   public MyComNonVisibleType() {
      Console.WriteLine("MyComNonVisibleType instantiated!");
   }
}

class Test {
   public static void Main() {
      CreateComInstance("MyComNonVisibleType");   // Fail!
      CreateComInstance("MyComVisibleType");      // OK!
   }

   static void CreateComInstance(string typeName) {
      try {
         AppDomain currentDomain = AppDomain.CurrentDomain;
         string assemblyName = currentDomain.FriendlyName;
         currentDomain.CreateComInstanceFrom(assemblyName, typeName);
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::InteropServices;

[ComVisible(true)]
public ref class MyComVisibleType
{
public:
   MyComVisibleType()
   {
      Console::WriteLine( "MyComVisibleType instantiated!" );
   }

};

[ComVisible(false)]
public ref class MyComNonVisibleType
{
public:
   MyComNonVisibleType()
   {
      Console::WriteLine( "MyComNonVisibleType instantiated!" );
   }

};

void CreateComInstance( String^ typeName )
{
   try
   {
      AppDomain^ currentDomain = AppDomain::CurrentDomain;
      String^ assemblyName = currentDomain->FriendlyName;
      currentDomain->CreateComInstanceFrom( assemblyName, typeName );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

int main()
{
   CreateComInstance( "MyComNonVisibleType" ); // Fail!
   CreateComInstance( "MyComVisibleType" ); // OK!
}
  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateComInstanceFrom 重载
System 命名空间
Activator CreateComInstanceFrom


AppDomain ..::.CreateComInstanceFrom 方法 (String, String, array<Byte >[]()[], AssemblyHashAlgorithm)

AppDomain
.
.
::
.
CreateComInstanceFrom 方法 (String, String,
array<
Byte
>
[]
()
[]
, AssemblyHashAlgorithm)
AppDomain 类

创建指定 COM 类型的新实例。形参指定文件的名称，该文件包含含有类型和类型名称的程序集。 创建指定 COM 类型的新实例。形参指定文件的名称，该文件包含含有类型和类型名称的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateComInstanceFrom ( _
    assemblyFile As String, _
    typeName As String, _
    hashValue As Byte(), _
    hashAlgorithm As AssemblyHashAlgorithm _
) As ObjectHandle
public ObjectHandle CreateComInstanceFrom(
    string assemblyFile,
    string typeName,
    byte[] hashValue,
    AssemblyHashAlgorithm hashAlgorithm
)
public:
ObjectHandle^ CreateComInstanceFrom(
    String^ assemblyFile,
    String^ typeName,
    array<unsigned char>^ hashValue,
    AssemblyHashAlgorithm hashAlgorithm
)
member CreateComInstanceFrom :
        assemblyFile:string *
        typeName:string *
        hashValue:byte[] *
        hashAlgorithm:AssemblyHashAlgorithm -> ObjectHandle

参数

assemblyFile
类型： System String
文件的名称，该文件包含定义所请求的类型的程序集。
typeName
类型： System String
所请求类型的名称。
hashValue
类型：
array<
System Byte
>
[]
()
[]

表示计算所得的哈希代码的值。
hashAlgorithm
类型： System.Configuration.Assemblies AssemblyHashAlgorithm
表示程序集清单使用的哈希算法。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。 一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。
异常 | 条件
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TypeLoadException | 无法加载该类型。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
MissingMethodException | 未找到公共无形参构造函数。
FileNotFoundException | assemblyFile 未找到。
MemberAccessException | typeName 是抽象类。 - 或 - 用后期绑定机制调用该成员。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
ArgumentException | assemblyFile 是空字符串 ("")。
BadImageFormatException | assemblyFile 不是有效程序集。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
NullReferenceException | 所引用的 COM 对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

使用此方法可远程创建对象，而无需本地加载该类型。

返回值需要打开包装才能访问实际对象。

必须以显式方式或默认方式对 COM 类型应用值为 true 的 System.Runtime.InteropServices..::.ComVisibleAttribute 特性，这样，此方法才能创建该类型的实例；否则，会引发 TypeLoadException。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateComInstanceFrom 重载
System 命名空间
Activator CreateComInstanceFrom


AppDomain ..::.CreateDomain 方法

AppDomain
.
.
::
.
CreateDomain 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

创建新的应用程序域。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.CreateDomain 方法 (String)

AppDomain
.
.
::
.
CreateDomain 方法 (String)
AppDomain 类

使用指定的名称新建应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDomain ( _
    friendlyName As String _
) As AppDomain
public static AppDomain CreateDomain(
    string friendlyName
)
public:
static AppDomain^ CreateDomain(
    String^ friendlyName
)
static member CreateDomain :
        friendlyName:string -> AppDomain

参数

friendlyName
类型： System String
域的友好名称。

返回值

类型： System AppDomain
新创建的应用程序域。
异常 | 条件
ArgumentNullException | friendlyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

friendlyName 形参用于以含义更明确的形式标识域。此字符串应适于在用户界面中显示。 friendlyName 形参用于以含义更明确的形式标识域。此字符串应适于在用户界面中显示。

此方法重载使用来自默认应用程序域的 AppDomainSetup 信息。

下面的示例演示通常如何使用 CreateDomain 重载之一创建域。

' Set up the AppDomainSetup
Dim setup As New AppDomainSetup()
setup.ApplicationBase = "(some directory)"
setup.ConfigurationFile = "(some file)"

' Set up the Evidence
Dim baseEvidence As Evidence = AppDomain.CurrentDomain.Evidence
Dim evidence As New Evidence(baseEvidence)
evidence.AddAssembly("(some assembly)")
evidence.AddHost("(some host)")

' Create the AppDomain
Dim newDomain As AppDomain = AppDomain.CreateDomain("newDomain", evidence, setup)

// Set up the AppDomainSetup
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = "(some directory)";
setup.ConfigurationFile = "(some file)";

// Set up the Evidence
Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
Evidence evidence = new Evidence(baseEvidence);
evidence.AddAssembly("(some assembly)");
evidence.AddHost("(some host)");

// Create the AppDomain
AppDomain newDomain = AppDomain.CreateDomain("newDomain", evidence, setup);

// Set up the AppDomainSetup
AppDomainSetup^ setup = gcnew AppDomainSetup;
setup->ApplicationBase = "(some directory)";
setup->ConfigurationFile = "(some file)";

// Set up the Evidence
Evidence^ baseEvidence = AppDomain::CurrentDomain->Evidence;
Evidence^ evidence = gcnew Evidence( baseEvidence );
evidence->AddAssembly( "(some assembly)" );
evidence->AddHost( "(some host)" );

// Create the AppDomain
AppDomain^ newDomain = AppDomain::CreateDomain( "newDomain", evidence, setup );
  • SecurityPermission

    表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 类
AppDomain 成员
CreateDomain 重载
System 命名空间
FriendlyName


AppDomain ..::.CreateDomain 方法 (String, Evidence)

AppDomain
.
.
::
.
CreateDomain 方法 (String, Evidence)
AppDomain 类

使用所提供的证据创建具有给定名称的新应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDomain ( _
    friendlyName As String, _
    securityInfo As Evidence _
) As AppDomain
public static AppDomain CreateDomain(
    string friendlyName,
    Evidence securityInfo
)
public:
static AppDomain^ CreateDomain(
    String^ friendlyName,
    Evidence^ securityInfo
)
static member CreateDomain :
        friendlyName:string *
        securityInfo:Evidence -> AppDomain

参数

friendlyName
类型： System String
域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。
securityInfo
类型： System.Security.Policy Evidence
确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。 确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。

返回值

类型： System AppDomain
新创建的应用程序域。
异常 | 条件
ArgumentNullException | friendlyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法重载使用来自默认应用程序域的 AppDomainSetup 信息。

如果没有提供 securityInfo，则使用来自当前应用程序域的证据。

重要说明 重要事项

不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。 不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。 不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。

下面的示例演示通常如何使用 CreateDomain 重载之一创建域。

' Set up the AppDomainSetup
Dim setup As New AppDomainSetup()
setup.ApplicationBase = "(some directory)"
setup.ConfigurationFile = "(some file)"

' Set up the Evidence
Dim baseEvidence As Evidence = AppDomain.CurrentDomain.Evidence
Dim evidence As New Evidence(baseEvidence)
evidence.AddAssembly("(some assembly)")
evidence.AddHost("(some host)")

' Create the AppDomain
Dim newDomain As AppDomain = AppDomain.CreateDomain("newDomain", evidence, setup)

// Set up the AppDomainSetup
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = "(some directory)";
setup.ConfigurationFile = "(some file)";

// Set up the Evidence
Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
Evidence evidence = new Evidence(baseEvidence);
evidence.AddAssembly("(some assembly)");
evidence.AddHost("(some host)");

// Create the AppDomain
AppDomain newDomain = AppDomain.CreateDomain("newDomain", evidence, setup);

// Set up the AppDomainSetup
AppDomainSetup^ setup = gcnew AppDomainSetup;
setup->ApplicationBase = "(some directory)";
setup->ConfigurationFile = "(some file)";

// Set up the Evidence
Evidence^ baseEvidence = AppDomain::CurrentDomain->Evidence;
Evidence^ evidence = gcnew Evidence( baseEvidence );
evidence->AddAssembly( "(some assembly)" );
evidence->AddHost( "(some host)" );

// Create the AppDomain
AppDomain^ newDomain = AppDomain::CreateDomain( "newDomain", evidence, setup );
  • SecurityPermission

    表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 类
AppDomain 成员
CreateDomain 重载
System 命名空间


AppDomain ..::.CreateDomain 方法 (String, Evidence, AppDomainSetup)

AppDomain
.
.
::
.
CreateDomain 方法 (String, Evidence, AppDomainSetup)
AppDomain 类

使用指定的名称、证据和应用程序域设置信息创建新的应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain := True)> _
Public Shared Function CreateDomain ( _
    friendlyName As String, _
    securityInfo As Evidence, _
    info As AppDomainSetup _
) As AppDomain
[SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain = true)]
public static AppDomain CreateDomain(
    string friendlyName,
    Evidence securityInfo,
    AppDomainSetup info
)
[SecurityPermissionAttribute(SecurityAction::Demand, ControlAppDomain = true)]
public:
static AppDomain^ CreateDomain(
    String^ friendlyName,
    Evidence^ securityInfo,
    AppDomainSetup^ info
)
[<SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain = true)>]
static member CreateDomain :
        friendlyName:string *
        securityInfo:Evidence *
        info:AppDomainSetup -> AppDomain

参数

friendlyName
类型： System String
域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。
securityInfo
类型： System.Security.Policy Evidence
确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。 确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。
info
类型： System AppDomainSetup
包含应用程序域初始化信息的对象。

返回值

类型： System AppDomain
新创建的应用程序域。
异常 | 条件
ArgumentNullException | friendlyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果没有提供 info，此方法重载将使用来自默认应用程序域的 AppDomainSetup 信息。

如果没有提供 securityInfo，则使用来自当前应用程序域的证据。

重要说明 重要事项

不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。 不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。 不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。

下面的示例演示通常如何使用 CreateDomain 重载之一创建域。

' Set up the AppDomainSetup
Dim setup As New AppDomainSetup()
setup.ApplicationBase = "(some directory)"
setup.ConfigurationFile = "(some file)"

' Set up the Evidence
Dim baseEvidence As Evidence = AppDomain.CurrentDomain.Evidence
Dim evidence As New Evidence(baseEvidence)
evidence.AddAssembly("(some assembly)")
evidence.AddHost("(some host)")

' Create the AppDomain
Dim newDomain As AppDomain = AppDomain.CreateDomain("newDomain", evidence, setup)

// Set up the AppDomainSetup
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = "(some directory)";
setup.ConfigurationFile = "(some file)";

// Set up the Evidence
Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
Evidence evidence = new Evidence(baseEvidence);
evidence.AddAssembly("(some assembly)");
evidence.AddHost("(some host)");

// Create the AppDomain
AppDomain newDomain = AppDomain.CreateDomain("newDomain", evidence, setup);

// Set up the AppDomainSetup
AppDomainSetup^ setup = gcnew AppDomainSetup;
setup->ApplicationBase = "(some directory)";
setup->ConfigurationFile = "(some file)";

// Set up the Evidence
Evidence^ baseEvidence = AppDomain::CurrentDomain->Evidence;
Evidence^ evidence = gcnew Evidence( baseEvidence );
evidence->AddAssembly( "(some assembly)" );
evidence->AddHost( "(some host)" );

// Create the AppDomain
AppDomain^ newDomain = AppDomain::CreateDomain( "newDomain", evidence, setup );
  • SecurityPermission

    以便能够创建和操作 AppDomain。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
以便能够创建和操作 AppDomain。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
以便能够创建和操作 AppDomain。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateDomain 重载
System 命名空间


AppDomain ..::.CreateDomain 方法 (String, Evidence, AppDomainSetup, PermissionSet, array<StrongName >[]()[])

AppDomain
.
.
::
.
CreateDomain 方法 (String, Evidence, AppDomainSetup, PermissionSet,
array<
StrongName
>
[]
()
[]
)
AppDomain 类

使用指定的名称、证据、应用程序域设置信息、默认权限集和一组完全受信任的程序集创建新的应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDomain ( _
    friendlyName As String, _
    securityInfo As Evidence, _
    info As AppDomainSetup, _
    grantSet As PermissionSet, _
    ParamArray fullTrustAssemblies As StrongName() _
) As AppDomain
public static AppDomain CreateDomain(
    string friendlyName,
    Evidence securityInfo,
    AppDomainSetup info,
    PermissionSet grantSet,
    params StrongName[] fullTrustAssemblies
)
public:
static AppDomain^ CreateDomain(
    String^ friendlyName,
    Evidence^ securityInfo,
    AppDomainSetup^ info,
    PermissionSet^ grantSet,
    ... array<StrongName^>^ fullTrustAssemblies
)
static member CreateDomain :
        friendlyName:string *
        securityInfo:Evidence *
        info:AppDomainSetup *
        grantSet:PermissionSet *
        fullTrustAssemblies:StrongName[] -> AppDomain

参数

friendlyName
类型： System String
域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见 FriendlyName 的说明。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见 FriendlyName 的说明。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见 FriendlyName 的说明。
securityInfo
类型： System.Security.Policy Evidence
确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。 确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。
info
类型： System AppDomainSetup
包含应用程序域初始化信息的对象。
grantSet
类型： System.Security PermissionSet
一个默认权限集，被授予加载到新应用程序域的所有无特定权限的程序集。
fullTrustAssemblies
类型：
array<
System.Security.Policy StrongName
>
[]
()
[]

一组强名称，表示在新应用程序域中被认为完全受信任的程序集。

返回值

类型： System AppDomain
新创建的应用程序域。
异常 | 条件
ArgumentNullException | friendlyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 应用程序域为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - ApplicationBase 属性在为 info 提供的 AppDomainSetup 对象上没有设置。

必须设置您为 info 提供的 AppDomainSetup 对象的 ApplicationBase 属性。否则会引发异常。 必须设置您为 info 提供的 AppDomainSetup 对象的 ApplicationBase 属性。否则会引发异常。

如果没有提供 securityInfo，则使用来自当前应用程序域的证据。

为 grantSet 和 fullTrustAssemblies 提供的信息被用来为新应用程序域创建 ApplicationTrust 对象。

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • SecurityPermission

    表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateDomain 重载
System 命名空间


AppDomain ..::.CreateDomain 方法 (String, Evidence, String, String, Boolean)

AppDomain
.
.
::
.
CreateDomain 方法 (String, Evidence, String, String, Boolean)
AppDomain 类

使用证据、应用程序基路径、相对搜索路径和指定是否向应用程序域中加载程序集的影像副本的形参创建具有给定名称的新应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDomain ( _
    friendlyName As String, _
    securityInfo As Evidence, _
    appBasePath As String, _
    appRelativeSearchPath As String, _
    shadowCopyFiles As Boolean _
) As AppDomain
public static AppDomain CreateDomain(
    string friendlyName,
    Evidence securityInfo,
    string appBasePath,
    string appRelativeSearchPath,
    bool shadowCopyFiles
)
public:
static AppDomain^ CreateDomain(
    String^ friendlyName,
    Evidence^ securityInfo,
    String^ appBasePath,
    String^ appRelativeSearchPath,
    bool shadowCopyFiles
)
static member CreateDomain :
        friendlyName:string *
        securityInfo:Evidence *
        appBasePath:string *
        appRelativeSearchPath:string *
        shadowCopyFiles:bool -> AppDomain

参数

friendlyName
类型： System String
域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。
securityInfo
类型： System.Security.Policy Evidence
确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。 确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。
appBasePath
类型： System String
基目录，由程序集冲突解决程序用来探测程序集。有关更多信息，请参见BaseDirectory。 基目录，由程序集冲突解决程序用来探测程序集。有关更多信息，请参见BaseDirectory。
appRelativeSearchPath
类型： System String
相对于基目录的路径，在此程序集冲突解决程序应探测专用程序集。有关更多信息，请参见RelativeSearchPath。 相对于基目录的路径，在此程序集冲突解决程序应探测专用程序集。有关更多信息，请参见RelativeSearchPath。
shadowCopyFiles
类型： System Boolean
如果为 true，则向此应用程序域中加载程序集的影像副本。有关更多信息，请参见 ShadowCopyFiles 和影像复制程序集。 如果为 true，则向此应用程序域中加载程序集的影像副本。有关更多信息，请参见 ShadowCopyFiles 和影像复制程序集。

返回值

类型： System AppDomain
新创建的应用程序域。
异常 | 条件
ArgumentNullException | friendlyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果没有提供 securityInfo，则使用来自当前应用程序域的证据。

重要说明 重要事项

不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。 不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。 不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。

下面的示例演示通常如何使用 CreateDomain 重载之一创建域。

' Set up the AppDomainSetup
Dim setup As New AppDomainSetup()
setup.ApplicationBase = "(some directory)"
setup.ConfigurationFile = "(some file)"

' Set up the Evidence
Dim baseEvidence As Evidence = AppDomain.CurrentDomain.Evidence
Dim evidence As New Evidence(baseEvidence)
evidence.AddAssembly("(some assembly)")
evidence.AddHost("(some host)")

' Create the AppDomain
Dim newDomain As AppDomain = AppDomain.CreateDomain("newDomain", evidence, setup)

// Set up the AppDomainSetup
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = "(some directory)";
setup.ConfigurationFile = "(some file)";

// Set up the Evidence
Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
Evidence evidence = new Evidence(baseEvidence);
evidence.AddAssembly("(some assembly)");
evidence.AddHost("(some host)");

// Create the AppDomain
AppDomain newDomain = AppDomain.CreateDomain("newDomain", evidence, setup);

// Set up the AppDomainSetup
AppDomainSetup^ setup = gcnew AppDomainSetup;
setup->ApplicationBase = "(some directory)";
setup->ConfigurationFile = "(some file)";

// Set up the Evidence
Evidence^ baseEvidence = AppDomain::CurrentDomain->Evidence;
Evidence^ evidence = gcnew Evidence( baseEvidence );
evidence->AddAssembly( "(some assembly)" );
evidence->AddHost( "(some host)" );

// Create the AppDomain
AppDomain^ newDomain = AppDomain::CreateDomain( "newDomain", evidence, setup );
  • SecurityPermission

    表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateDomain 重载
System 命名空间


AppDomain ..::.CreateDomain 方法 (String, Evidence, String, String, Boolean, AppDomainInitializer, array<String >[]()[])

AppDomain
.
.
::
.
CreateDomain 方法 (String, Evidence, String, String, Boolean, AppDomainInitializer,
array<
String
>
[]
()
[]
)
AppDomain 类

使用证据、应用程序基路径、相对搜索路径和指定是否向应用程序域中加载程序集的影像副本的形参创建具有给定名称的新应用程序域。指定在初始化应用程序域时调用的回调方法，以及传递回调方法的字符串实参数组。 使用证据、应用程序基路径、相对搜索路径和指定是否向应用程序域中加载程序集的影像副本的形参创建具有给定名称的新应用程序域。指定在初始化应用程序域时调用的回调方法，以及传递回调方法的字符串实参数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDomain ( _
    friendlyName As String, _
    securityInfo As Evidence, _
    appBasePath As String, _
    appRelativeSearchPath As String, _
    shadowCopyFiles As Boolean, _
    adInit As AppDomainInitializer, _
    adInitArgs As String() _
) As AppDomain
public static AppDomain CreateDomain(
    string friendlyName,
    Evidence securityInfo,
    string appBasePath,
    string appRelativeSearchPath,
    bool shadowCopyFiles,
    AppDomainInitializer adInit,
    string[] adInitArgs
)
public:
static AppDomain^ CreateDomain(
    String^ friendlyName,
    Evidence^ securityInfo,
    String^ appBasePath,
    String^ appRelativeSearchPath,
    bool shadowCopyFiles,
    AppDomainInitializer^ adInit,
    array<String^>^ adInitArgs
)
static member CreateDomain :
        friendlyName:string *
        securityInfo:Evidence *
        appBasePath:string *
        appRelativeSearchPath:string *
        shadowCopyFiles:bool *
        adInit:AppDomainInitializer *
        adInitArgs:string[] -> AppDomain

参数

friendlyName
类型： System String
域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。 域的友好名称。此友好名称可在用户界面中显示以标识域。有关更多信息，请参见FriendlyName。
securityInfo
类型： System.Security.Policy Evidence
确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。 确定代码标识的证据，该代码在应用程序域中运行。传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 以使用当前应用程序域的证据。
appBasePath
类型： System String
基目录，由程序集冲突解决程序用来探测程序集。有关更多信息，请参见BaseDirectory。 基目录，由程序集冲突解决程序用来探测程序集。有关更多信息，请参见BaseDirectory。
appRelativeSearchPath
类型： System String
相对于基目录的路径，在此程序集冲突解决程序应探测专用程序集。有关更多信息，请参见RelativeSearchPath。 相对于基目录的路径，在此程序集冲突解决程序应探测专用程序集。有关更多信息，请参见RelativeSearchPath。
shadowCopyFiles
类型： System Boolean
如果为 true，则将程序集的影像副本加载到应用程序域中。有关更多信息，请参见 ShadowCopyFiles 和影像复制程序集。 如果为 true，则将程序集的影像副本加载到应用程序域中。有关更多信息，请参见 ShadowCopyFiles 和影像复制程序集。
adInit
类型： System AppDomainInitializer
AppDomainInitializer 委托，表示初始化新的 AppDomain 对象时调用的回调方法。
adInitArgs
类型：
array<
System String
>
[]
()
[]

字符串实参数组，在初始化新的 AppDomain 对象时传递给由 adInit 表示的回调。

返回值

类型： System AppDomain
新创建的应用程序域。
异常 | 条件
ArgumentNullException | friendlyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

adInit 表示的方法在新创建的应用程序域的上下文中执行。

如果没有提供 securityInfo，则使用来自当前应用程序域的证据。

重要说明 重要事项

不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。 不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。 不要使用此方法重载创建沙盒应用程序域。从 .NET Framework 4 版 开始，为 securityInfo 提供的证据不再影响应用程序域的授权集。使用 CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建沙盒应用程序域。
  • SecurityPermission

    表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
表示创建和操作应用程序域的能力。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateDomain 重载
System 命名空间


AppDomain ..::.CreateInstance 方法

AppDomain
.
.
::
.
CreateInstance 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

创建在指定程序集中定义的指定类型的新实例。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.CreateInstance 方法 (String, String)

AppDomain
.
.
::
.
CreateInstance 方法 (String, String)
AppDomain 类

创建在指定程序集中定义的指定类型的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstance ( _
    assemblyName As String, _
    typeName As String _
) As ObjectHandle
public ObjectHandle CreateInstance(
    string assemblyName,
    string typeName
)
public:
virtual ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName
) sealed
abstract CreateInstance :
        assemblyName:string *
        typeName:string -> ObjectHandle
override CreateInstance :
        assemblyName:string *
        typeName:string -> ObjectHandle

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。 一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MissingMethodException | 找不到匹配的公共构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
NullReferenceException | 此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法调用 typeName 的默认构造函数。

有关 assemblyName 的格式，请参见 AssemblyName。

如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。 如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。 如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。

  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstance 重载
System 命名空间
Activator CreateInstance


AppDomain ..::.CreateInstance 方法 (String, String, array<Object >[]()[])

AppDomain
.
.
::
.
CreateInstance 方法 (String, String,
array<
Object
>
[]
()
[]
)
AppDomain 类

创建在指定程序集中定义的指定类型的新实例。形参指定激活特性数组。 创建在指定程序集中定义的指定类型的新实例。形参指定激活特性数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstance ( _
    assemblyName As String, _
    typeName As String, _
    activationAttributes As Object() _
) As ObjectHandle
public ObjectHandle CreateInstance(
    string assemblyName,
    string typeName,
    Object[] activationAttributes
)
public:
virtual ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName,
    array<Object^>^ activationAttributes
) sealed
abstract CreateInstance :
        assemblyName:string *
        typeName:string *
        activationAttributes:Object[] -> ObjectHandle
override CreateInstance :
        assemblyName:string *
        typeName:string *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。 一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MissingMethodException | 找不到匹配的公共构造函数。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
TypeLoadException | 在 assemblyName 中找不到 typename。
NullReferenceException | 此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法调用 typeName 的默认构造函数。

有关 assemblyName 的格式，请参见 AssemblyName。

如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。 如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。 如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstance 重载
System 命名空间
Activator CreateInstance


AppDomain ..::.CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[])

AppDomain
.
.
::
.
CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
)
AppDomain 类

创建在指定程序集中定义的指定类型的新实例。形参指定联编程序、绑定标志、构造函数实参、用于解释实参的特定于区域性的信息，以及可选激活特性。 创建在指定程序集中定义的指定类型的新实例。形参指定联编程序、绑定标志、构造函数实参、用于解释实参的特定于区域性的信息，以及可选激活特性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstance ( _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object() _
) As ObjectHandle
public ObjectHandle CreateInstance(
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes
)
public:
ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes
)
member CreateInstance :
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。 一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。
异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - assemblyName 使用比当前加载的版本更高的公共语言运行时版本编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MissingMethodException | 未找到匹配的构造函数。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
TypeLoadException | 在 assemblyName 中找不到 typename。
NullReferenceException | 此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

有关 assemblyName 的格式，请参见 AssemblyName。

如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。 如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。 如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstance 重载
System 命名空间
Activator CreateInstance


AppDomain ..::.CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

AppDomain
.
.
::
.
CreateInstance 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 CreateInstance(String, String, Boolean, BindingFlags, Binder, Object , CultureInfo, Object )。

创建在指定程序集中定义的指定类型的新实例。形参指定联编程序、绑定标志、构造函数实参、特定于区域性的信息，这些信息用于解释实参、激活特性和授权，以创建类型。 创建在指定程序集中定义的指定类型的新实例。形参指定联编程序、绑定标志、构造函数实参、特定于区域性的信息，这些信息用于解释实参、激活特性和授权，以创建类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function CreateInstance ( _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityAttributes As Evidence _
) As ObjectHandle
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public ObjectHandle CreateInstance(
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityAttributes
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual ObjectHandle^ CreateInstance(
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityAttributes
) sealed
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract CreateInstance :
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> ObjectHandle
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override CreateInstance :
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> ObjectHandle

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityAttributes
类型： System.Security.Policy Evidence
用于授权创建 typeName 的信息。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。 一个对象，该对象是 typeName 指定的新实例的包装。返回值需要打开包装才能访问真实对象。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
MissingMethodException | 未找到匹配的构造函数。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。 - 或 - securityAttributes 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，securityAttributes 应该为 null. securityAttributes 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，securityAttributes 应该为 null.
TypeLoadException | 在 assemblyName 中找不到 typename。
NullReferenceException | 此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

有关 assemblyName 的格式，请参见 AssemblyName。

如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。 如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。 如果尝试在并非当前应用程序域的目标应用程序域上调用 CreateInstance，则将导致在目标应用程序域中成功加载程序集。因为 Assembly 不是 MarshalByRefObject，所以当此方法尝试将所加载程序集的 Assembly 返回到当前应用程序域时，公共语言运行时会尝试将该程序集加载到当前应用程序域中，并且加载可能会失败。如果两个应用程序域的路径设置不同，那么加载到当前应用程序域中的程序集可能与第一个加载的程序集不同。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
CreateInstance 重载
System 命名空间
Activator CreateInstance


AppDomain ..::.CreateInstanceAndUnwrap 方法

AppDomain
.
.
::
.
CreateInstanceAndUnwrap 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

创建指定类型的新实例。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.CreateInstanceAndUnwrap 方法 (String, String)

AppDomain
.
.
::
.
CreateInstanceAndUnwrap 方法 (String, String)
AppDomain 类

创建指定类型的新实例。形参指定定义类型的程序集以及类型的名称。 创建指定类型的新实例。形参指定定义类型的程序集以及类型的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstanceAndUnwrap ( _
    assemblyName As String, _
    typeName As String _
) As Object
public Object CreateInstanceAndUnwrap(
    string assemblyName,
    string typeName
)
public:
Object^ CreateInstanceAndUnwrap(
    String^ assemblyName,
    String^ typeName
)
member CreateInstanceAndUnwrap :
        assemblyName:string *
        typeName:string -> Object

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。

返回值

类型： System Object
typeName 所指定对象的实例。
异常 | 条件
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 找不到匹配的公共构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

这是合并 CreateInstance 和 ObjectHandle..::.Unwrap 的便捷方法。此方法调用 typeName 的默认构造函数。 这是合并 CreateInstance 和 ObjectHandle..::.Unwrap 的便捷方法。此方法调用 typeName 的默认构造函数。

有关 assemblyName 的格式，请参见 AssemblyName。有关 typeName 的格式，请参见 Type..::.FullName 属性。 有关 assemblyName 的格式，请参见 AssemblyName。有关 typeName 的格式，请参见 Type..::.FullName 属性。

说明 说明

如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。

下面的代码示例演示在另一个应用程序域中执行代码的最简单方法。该示例定义一个从 MarshalByRefObject 继承的名为 Worker 的类。Worker 类定义的方法显示应用程序域的名称，所定义的方法在该域中执行。该示例在默认应用程序域和新的应用程序域中创建 Worker 的实例。 下面的代码示例演示在另一个应用程序域中执行代码的最简单方法。该示例定义一个从 MarshalByRefObject 继承的名为 Worker 的类。Worker 类定义的方法显示应用程序域的名称，所定义的方法在该域中执行。该示例在默认应用程序域和新的应用程序域中创建 Worker 的实例。 下面的代码示例演示在另一个应用程序域中执行代码的最简单方法。该示例定义一个从 MarshalByRefObject 继承的名为 Worker 的类。Worker 类定义的方法显示应用程序域的名称，所定义的方法在该域中执行。该示例在默认应用程序域和新的应用程序域中创建 Worker 的实例。 下面的代码示例演示在另一个应用程序域中执行代码的最简单方法。该示例定义一个从 MarshalByRefObject 继承的名为 Worker 的类。Worker 类定义的方法显示应用程序域的名称，所定义的方法在该域中执行。该示例在默认应用程序域和新的应用程序域中创建 Worker 的实例。

说明 说明

必须将包含 Worker 的程序集既加载到默认应用程序域又加载到新应用程序域中，但是它可以加载仅在新应用程序域中存在的其他程序集。

Imports System
Imports System.Reflection

Public Class Worker
    Inherits MarshalByRefObject

    Public Sub PrintDomain()
        Console.WriteLine("Object is executing in AppDomain ""{0}""", _
            AppDomain.CurrentDomain.FriendlyName)
    End Sub
End Class

Class Example

    Public Shared Sub Main()

        ' Create an ordinary instance in the current AppDomain
        Dim localWorker As New Worker()
        localWorker.PrintDomain()

        ' Create a new application domain, create an instance
        ' of Worker in the application domain, and execute code
        ' there.
        Dim ad As AppDomain = AppDomain.CreateDomain("New domain")
        Dim remoteWorker As Worker = CType( _
            ad.CreateInstanceAndUnwrap( _
                [Assembly].GetExecutingAssembly().FullName, _
                "Worker"), _
            Worker)
        remoteWorker.PrintDomain()

    End Sub
End Class

' This code produces output similar to the following:
'
'Object is executing in AppDomain "source.exe"
'Object is executing in AppDomain "New domain"

using System;
using System.Reflection;

public class Worker : MarshalByRefObject
{
    public void PrintDomain()
    {
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName);
    }
}

class Example
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        Worker localWorker = new Worker();
        localWorker.PrintDomain();

        // Create a new application domain, create an instance
        // of Worker in the application domain, and execute code
        // there.
        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
            Assembly.GetExecutingAssembly().FullName,
            "Worker");
        remoteWorker.PrintDomain();
    }
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */

using namespace System;
using namespace System::Reflection;

public ref class Worker : MarshalByRefObject
{
public:
    void PrintDomain()
    {
        Console::WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain::CurrentDomain->FriendlyName);
    }
};

void main()
{
    // Create an ordinary instance in the current AppDomain
    Worker^ localWorker = gcnew Worker();
    localWorker->PrintDomain();

    // Create a new application domain, create an instance
    // of Worker in the application domain, and execute code
    // there.
    AppDomain^ ad = AppDomain::CreateDomain("New domain");
    Worker^ remoteWorker = (Worker^) ad->CreateInstanceAndUnwrap(
        Assembly::GetExecutingAssembly()->FullName,
        "Worker");
    remoteWorker->PrintDomain();
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */
  • FileIOPermissionAccess

    用于在基本代码由配置文件提供的情况下访问程序集的位置。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于在基本代码由配置文件提供的情况下访问程序集的位置。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    用于读取包含程序集清单的文件，或者从非清单文件模块创建类型。关联的枚举：FileIOPermissionAccess..::.Read 用于读取包含程序集清单的文件，或者从非清单文件模块创建类型。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstanceAndUnwrap 重载
System 命名空间
CreateInstance


AppDomain ..::.CreateInstanceAndUnwrap 方法 (String, String, array<Object >[]()[])

AppDomain
.
.
::
.
CreateInstanceAndUnwrap 方法 (String, String,
array<
Object
>
[]
()
[]
)
AppDomain 类

创建指定类型的新实例。形参指定定义类型的程序集、类型的名称和激活特性的数组。 创建指定类型的新实例。形参指定定义类型的程序集、类型的名称和激活特性的数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstanceAndUnwrap ( _
    assemblyName As String, _
    typeName As String, _
    activationAttributes As Object() _
) As Object
public Object CreateInstanceAndUnwrap(
    string assemblyName,
    string typeName,
    Object[] activationAttributes
)
public:
Object^ CreateInstanceAndUnwrap(
    String^ assemblyName,
    String^ typeName,
    array<Object^>^ activationAttributes
)
member CreateInstanceAndUnwrap :
        assemblyName:string *
        typeName:string *
        activationAttributes:Object[] -> Object

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System Object
typeName 所指定对象的实例。
异常 | 条件
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 找不到匹配的公共构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

这是合并 CreateInstance 和 ObjectHandle..::.Unwrap 的便捷方法。此方法调用 typeName 的默认构造函数。 这是合并 CreateInstance 和 ObjectHandle..::.Unwrap 的便捷方法。此方法调用 typeName 的默认构造函数。

有关 assemblyName 的格式，请参见 AssemblyName。有关 typeName 的格式，请参见 Type..::.FullName 属性。 有关 assemblyName 的格式，请参见 AssemblyName。有关 typeName 的格式，请参见 Type..::.FullName 属性。

说明 说明

如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。

Imports System
Imports System.IO
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Runtime.Remoting

Class ADDyno

   Public Shared Function CreateADynamicAssembly(ByRef myNewDomain As AppDomain, executableNameNoExe As String) As Type

      Dim executableName As String = executableNameNoExe + ".exe"

      Dim myAsmName As New AssemblyName()
      myAsmName.Name = executableNameNoExe
      myAsmName.CodeBase = Environment.CurrentDirectory

      Dim myAsmBuilder As AssemblyBuilder = myNewDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave)
      Console.WriteLine("-- Dynamic Assembly instantiated.")

      Dim myModBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe, executableName)

      Dim myTypeBuilder As TypeBuilder = myModBuilder.DefineType(executableNameNoExe, TypeAttributes.Public, GetType(MarshalByRefObject))

      Dim myFCMethod As MethodBuilder = myTypeBuilder.DefineMethod("CountLocalFiles", MethodAttributes.Public Or MethodAttributes.Static, Nothing, New Type() {})

      Dim currentDirGetMI As MethodInfo = GetType(Environment).GetProperty("CurrentDirectory").GetGetMethod()
      Dim writeLine0objMI As MethodInfo = GetType(Console).GetMethod("WriteLine", New Type() {GetType(String)})
      Dim writeLine2objMI As MethodInfo = GetType(Console).GetMethod("WriteLine", New Type() {GetType(String), GetType(Object), GetType(Object)})
      Dim getFilesMI As MethodInfo = GetType(Directory).GetMethod("GetFiles", New Type() {GetType(String)})

      myFCMethod.InitLocals = True

      Dim myFCIL As ILGenerator = myFCMethod.GetILGenerator()

      Console.WriteLine("-- Generating MSIL method body...")
      Dim v0 As LocalBuilder = myFCIL.DeclareLocal(GetType(String))
      Dim v1 As LocalBuilder = myFCIL.DeclareLocal(GetType(Integer))
      Dim v2 As LocalBuilder = myFCIL.DeclareLocal(GetType(String))
      Dim v3 As LocalBuilder = myFCIL.DeclareLocal(GetType(String()))

      Dim evalForEachLabel As Label = myFCIL.DefineLabel()
      Dim topOfForEachLabel As Label = myFCIL.DefineLabel()

      ' Build the method body.
      myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, Nothing)
      myFCIL.Emit(OpCodes.Stloc_S, v0)
      myFCIL.Emit(OpCodes.Ldc_I4_0)
      myFCIL.Emit(OpCodes.Stloc_S, v1)
      myFCIL.Emit(OpCodes.Ldstr, "---")
      myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing)
      myFCIL.Emit(OpCodes.Ldloc_S, v0)
      myFCIL.EmitCall(OpCodes.Call, getFilesMI, Nothing)
      myFCIL.Emit(OpCodes.Stloc_S, v3)

      myFCIL.Emit(OpCodes.Br_S, evalForEachLabel)

      ' foreach loop starts here.
      myFCIL.MarkLabel(topOfForEachLabel)

      ' Load array of strings and index, store value at index for output.
      myFCIL.Emit(OpCodes.Ldloc_S, v3)
      myFCIL.Emit(OpCodes.Ldloc_S, v1)
      myFCIL.Emit(OpCodes.Ldelem_Ref)
      myFCIL.Emit(OpCodes.Stloc_S, v2)

      myFCIL.Emit(OpCodes.Ldloc_S, v2)
      myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing)

      ' Increment counter by one.
      myFCIL.Emit(OpCodes.Ldloc_S, v1)
      myFCIL.Emit(OpCodes.Ldc_I4_1)
      myFCIL.Emit(OpCodes.Add)
      myFCIL.Emit(OpCodes.Stloc_S, v1)

      ' Determine if end of file list array has been reached.
      myFCIL.MarkLabel(evalForEachLabel)
      myFCIL.Emit(OpCodes.Ldloc_S, v1)
      myFCIL.Emit(OpCodes.Ldloc_S, v3)
      myFCIL.Emit(OpCodes.Ldlen)
      myFCIL.Emit(OpCodes.Conv_I4)
      myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel)
      'foreach loop end here.
      myFCIL.Emit(OpCodes.Ldstr, "---")
      myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing)
      myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}.")
      myFCIL.Emit(OpCodes.Ldloc_S, v1)
      myFCIL.Emit(OpCodes.Box, GetType(Integer))
      myFCIL.Emit(OpCodes.Ldloc_S, v0)
      myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, Nothing)

      myFCIL.Emit(OpCodes.Ret)

      Dim myType As Type = myTypeBuilder.CreateType()

      myAsmBuilder.SetEntryPoint(myFCMethod)
      myAsmBuilder.Save(executableName)
      Console.WriteLine("-- Method generated, type completed, and assembly saved to disk.")

      Return myType
   End Function 'CreateADynamicAssembly

   Public Shared Sub Main()

      Dim executableName As String = Nothing
      Dim domainDir As String

      Console.Write("Enter a name for the file counting assembly: ")
      Dim executableNameNoExe As String = Console.ReadLine()
      executableName = executableNameNoExe + ".exe"
      Console.WriteLine("---")

      domainDir = Environment.CurrentDirectory

      Dim curDomain As AppDomain = Thread.GetDomain()

      ' Create a new AppDomain, with the current directory as the base.
      Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory)
      Dim mySetupInfo As New AppDomainSetup()
      mySetupInfo.ApplicationBase = domainDir
      mySetupInfo.ApplicationName = executableNameNoExe
      mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain

      Dim myDomain As AppDomain = AppDomain.CreateDomain(executableNameNoExe, Nothing, mySetupInfo)

      Console.WriteLine("Creating a new AppDomain '{0}'...", executableNameNoExe)

      Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory)
      Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles)

      Console.WriteLine("---")
      Dim myFCType As Type = CreateADynamicAssembly(curDomain, executableNameNoExe)

      Console.WriteLine("Loading '{0}' from '{1}'...", executableName, myDomain.BaseDirectory.ToString())

      Dim bFlags As BindingFlags = BindingFlags.Public Or BindingFlags.CreateInstance Or BindingFlags.Instance

      Dim myObjInstance As [Object] = myDomain.CreateInstanceAndUnwrap(executableNameNoExe, executableNameNoExe, False, bFlags, Nothing, Nothing, Nothing, Nothing, Nothing)

      Console.WriteLine("Executing method 'CountLocalFiles' in {0}...", myObjInstance.ToString())

      myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, Nothing, myObjInstance, New Object() {})
   End Sub 'Main
End Class 'ADDyno

using System;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.Remoting;

class ADDyno

{

   public static Type CreateADynamicAssembly(ref AppDomain myNewDomain,
                         string executableNameNoExe)
   {

    string executableName = executableNameNoExe + ".exe";

    AssemblyName myAsmName = new AssemblyName();
    myAsmName.Name = executableNameNoExe;
    myAsmName.CodeBase = Environment.CurrentDirectory;

    AssemblyBuilder myAsmBuilder = myNewDomain.DefineDynamicAssembly(myAsmName,
                        AssemblyBuilderAccess.RunAndSave);
    Console.WriteLine("-- Dynamic Assembly instantiated.");

    ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe,
                                      executableName);

    TypeBuilder myTypeBuilder = myModBuilder.DefineType(executableNameNoExe,
                        TypeAttributes.Public,
                        typeof(MarshalByRefObject));

    MethodBuilder myFCMethod = myTypeBuilder.DefineMethod("CountLocalFiles",
                        MethodAttributes.Public |
                        MethodAttributes.Static,
                        null,
                        new Type[] {  });

    MethodInfo currentDirGetMI = typeof(Environment).GetProperty("CurrentDirectory").GetGetMethod();
    MethodInfo writeLine0objMI = typeof(Console).GetMethod("WriteLine",
                     new Type[] { typeof(string) });
    MethodInfo writeLine2objMI = typeof(Console).GetMethod("WriteLine",
                     new Type[] { typeof(string), typeof(object), typeof(object) });
    MethodInfo getFilesMI = typeof(Directory).GetMethod("GetFiles",
                new Type[] { typeof(string) });

    myFCMethod.InitLocals = true;

    ILGenerator myFCIL = myFCMethod.GetILGenerator();

    Console.WriteLine("-- Generating MSIL method body...");
    LocalBuilder v0 = myFCIL.DeclareLocal(typeof(string));
    LocalBuilder v1 = myFCIL.DeclareLocal(typeof(int));
    LocalBuilder v2 = myFCIL.DeclareLocal(typeof(string));
    LocalBuilder v3 = myFCIL.DeclareLocal(typeof(string[]));

    Label evalForEachLabel = myFCIL.DefineLabel();
    Label topOfForEachLabel = myFCIL.DefineLabel();

    // Build the method body.

    myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, null);
    myFCIL.Emit(OpCodes.Stloc_S, v0);
    myFCIL.Emit(OpCodes.Ldc_I4_0);
    myFCIL.Emit(OpCodes.Stloc_S, v1);
    myFCIL.Emit(OpCodes.Ldstr, "---");
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);
    myFCIL.Emit(OpCodes.Ldloc_S, v0);
    myFCIL.EmitCall(OpCodes.Call, getFilesMI, null);
    myFCIL.Emit(OpCodes.Stloc_S, v3);

    myFCIL.Emit(OpCodes.Br_S, evalForEachLabel);

    // foreach loop starts here.
    myFCIL.MarkLabel(topOfForEachLabel);

        // Load array of strings and index, store value at index for output.
    myFCIL.Emit(OpCodes.Ldloc_S, v3);
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldelem_Ref);
    myFCIL.Emit(OpCodes.Stloc_S, v2);

    myFCIL.Emit(OpCodes.Ldloc_S, v2);
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);

    // Increment counter by one.
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldc_I4_1);
    myFCIL.Emit(OpCodes.Add);
    myFCIL.Emit(OpCodes.Stloc_S, v1);

    // Determine if end of file list array has been reached.
    myFCIL.MarkLabel(evalForEachLabel);
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldloc_S, v3);
    myFCIL.Emit(OpCodes.Ldlen);
    myFCIL.Emit(OpCodes.Conv_I4);
    myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel);
    //foreach loop end here.

    myFCIL.Emit(OpCodes.Ldstr, "---");
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);
    myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}.");
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Box, typeof(int));
    myFCIL.Emit(OpCodes.Ldloc_S, v0);
    myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, null);

    myFCIL.Emit(OpCodes.Ret);

    Type myType = myTypeBuilder.CreateType();

    myAsmBuilder.SetEntryPoint(myFCMethod);
    myAsmBuilder.Save(executableName);
    Console.WriteLine("-- Method generated, type completed, and assembly saved to disk.");

    return myType;

   }

   public static void Main()
   {

    string domainDir, executableName = null;

    Console.Write("Enter a name for the file counting assembly: ");
    string executableNameNoExe = Console.ReadLine();
    executableName = executableNameNoExe + ".exe";
    Console.WriteLine("---");

    domainDir = Environment.CurrentDirectory;

    AppDomain curDomain = Thread.GetDomain();

    // Create a new AppDomain, with the current directory as the base.

    Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory);
    AppDomainSetup mySetupInfo = new AppDomainSetup();
    mySetupInfo.ApplicationBase = domainDir;
    mySetupInfo.ApplicationName = executableNameNoExe;
    mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain;

    AppDomain myDomain = AppDomain.CreateDomain(executableNameNoExe,
                    null, mySetupInfo);

    Console.WriteLine("Creating a new AppDomain '{0}'...",
                    executableNameNoExe);

    Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory);
    Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles);

    Console.WriteLine("---");
    Type myFCType = CreateADynamicAssembly(ref curDomain,
                     executableNameNoExe);

    Console.WriteLine("Loading '{0}' from '{1}'...", executableName,
              myDomain.BaseDirectory.ToString());

    BindingFlags bFlags = (BindingFlags.Public | BindingFlags.CreateInstance |
                   BindingFlags.Instance);

    Object myObjInstance = myDomain.CreateInstanceAndUnwrap(executableNameNoExe,
                executableNameNoExe, false, bFlags,
                null, null, null, null, null);

    Console.WriteLine("Executing method 'CountLocalFiles' in {0}...",
               myObjInstance.ToString());

    myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, null,
                myObjInstance, new object[] { });

   }

}

using namespace System;
using namespace System::IO;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Runtime::Remoting;

ref class ADDyno
{
public:
   static Type^ CreateADynamicAssembly( interior_ptr<AppDomain^> myNewDomain, String^ executableNameNoExe )
   {
      String^ executableName = String::Concat( executableNameNoExe, ".exe" );
      AssemblyName^ myAsmName = gcnew AssemblyName;
      myAsmName->Name = executableNameNoExe;
      myAsmName->CodeBase = Environment::CurrentDirectory;
      AssemblyBuilder^ myAsmBuilder = ( *myNewDomain)->DefineDynamicAssembly( myAsmName, AssemblyBuilderAccess::RunAndSave );
      Console::WriteLine( "-- Dynamic Assembly instantiated." );
      ModuleBuilder^ myModBuilder = myAsmBuilder->DefineDynamicModule( executableNameNoExe, executableName );
      TypeBuilder^ myTypeBuilder = myModBuilder->DefineType( executableNameNoExe, TypeAttributes::Public, MarshalByRefObject::typeid );
      array<Type^>^temp0 = nullptr;
      MethodBuilder^ myFCMethod = myTypeBuilder->DefineMethod( "CountLocalFiles", static_cast<MethodAttributes>(MethodAttributes::Public | MethodAttributes::Static), nullptr, temp0 );
      MethodInfo^ currentDirGetMI = Environment::typeid->GetProperty( "CurrentDirectory" )->GetGetMethod();
      array<Type^>^temp1 = {String::typeid};
      MethodInfo^ writeLine0objMI = Console::typeid->GetMethod( "WriteLine", temp1 );
      array<Type^>^temp2 = {String::typeid,Object::typeid,Object::typeid};
      MethodInfo^ writeLine2objMI = Console::typeid->GetMethod( "WriteLine", temp2 );
      array<Type^>^temp3 = {String::typeid};
      MethodInfo^ getFilesMI = Directory::typeid->GetMethod( "GetFiles", temp3 );
      myFCMethod->InitLocals = true;
      ILGenerator^ myFCIL = myFCMethod->GetILGenerator();
      Console::WriteLine( "-- Generating MSIL method body..." );
      LocalBuilder^ v0 = myFCIL->DeclareLocal( String::typeid );
      LocalBuilder^ v1 = myFCIL->DeclareLocal( int::typeid );
      LocalBuilder^ v2 = myFCIL->DeclareLocal( String::typeid );
      LocalBuilder^ v3 = myFCIL->DeclareLocal( array<String^>::typeid );
      Label evalForEachLabel = myFCIL->DefineLabel();
      Label topOfForEachLabel = myFCIL->DefineLabel();

      // Build the method body.
      myFCIL->EmitCall( OpCodes::Call, currentDirGetMI, nullptr );
      myFCIL->Emit( OpCodes::Stloc_S, v0 );
      myFCIL->Emit( OpCodes::Ldc_I4_0 );
      myFCIL->Emit( OpCodes::Stloc_S, v1 );
      myFCIL->Emit( OpCodes::Ldstr, "---" );
      myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr );
      myFCIL->Emit( OpCodes::Ldloc_S, v0 );
      myFCIL->EmitCall( OpCodes::Call, getFilesMI, nullptr );
      myFCIL->Emit( OpCodes::Stloc_S, v3 );
      myFCIL->Emit( OpCodes::Br_S, evalForEachLabel );

      // foreach loop starts here.
      myFCIL->MarkLabel( topOfForEachLabel );

      // Load array of strings and index, store value at index for output.
      myFCIL->Emit( OpCodes::Ldloc_S, v3 );
      myFCIL->Emit( OpCodes::Ldloc_S, v1 );
      myFCIL->Emit( OpCodes::Ldelem_Ref );
      myFCIL->Emit( OpCodes::Stloc_S, v2 );
      myFCIL->Emit( OpCodes::Ldloc_S, v2 );
      myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr );

      // Increment counter by one.
      myFCIL->Emit( OpCodes::Ldloc_S, v1 );
      myFCIL->Emit( OpCodes::Ldc_I4_1 );
      myFCIL->Emit( OpCodes::Add );
      myFCIL->Emit( OpCodes::Stloc_S, v1 );

      // Determine if end of file list array has been reached.
      myFCIL->MarkLabel( evalForEachLabel );
      myFCIL->Emit( OpCodes::Ldloc_S, v1 );
      myFCIL->Emit( OpCodes::Ldloc_S, v3 );
      myFCIL->Emit( OpCodes::Ldlen );
      myFCIL->Emit( OpCodes::Conv_I4 );
      myFCIL->Emit( OpCodes::Blt_S, topOfForEachLabel );

      //foreach loop end here.
      myFCIL->Emit( OpCodes::Ldstr, "---" );
      myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr );
      myFCIL->Emit( OpCodes::Ldstr, "There are {0} files in {1}." );
      myFCIL->Emit( OpCodes::Ldloc_S, v1 );
      myFCIL->Emit( OpCodes::Box, int::typeid );
      myFCIL->Emit( OpCodes::Ldloc_S, v0 );
      myFCIL->EmitCall( OpCodes::Call, writeLine2objMI, nullptr );
      myFCIL->Emit( OpCodes::Ret );
      Type^ myType = myTypeBuilder->CreateType();
      myAsmBuilder->SetEntryPoint( myFCMethod );
      myAsmBuilder->Save( executableName );
      Console::WriteLine( "-- Method generated, type completed, and assembly saved to disk." );
      return myType;
   }
};

int main()
{
   String^ domainDir;
   String^ executableName = nullptr;
   Console::Write( "Enter a name for the file counting assembly: " );
   String^ executableNameNoExe = Console::ReadLine();
   executableName = String::Concat( executableNameNoExe, ".exe" );
   Console::WriteLine( "---" );
   domainDir = Environment::CurrentDirectory;
   AppDomain^ curDomain = Thread::GetDomain();

   // Create a new AppDomain, with the current directory as the base.
   Console::WriteLine( "Current Directory: {0}", Environment::CurrentDirectory );
   AppDomainSetup^ mySetupInfo = gcnew AppDomainSetup;
   mySetupInfo->ApplicationBase = domainDir;
   mySetupInfo->ApplicationName = executableNameNoExe;
   mySetupInfo->LoaderOptimization = LoaderOptimization::SingleDomain;
   AppDomain^ myDomain = AppDomain::CreateDomain( executableNameNoExe, nullptr, mySetupInfo );
   Console::WriteLine( "Creating a new AppDomain '{0}'...", executableNameNoExe );
   Console::WriteLine( "-- Base Directory = '{0}'", myDomain->BaseDirectory );
   Console::WriteLine( "-- Shadow Copy? = '{0}'", myDomain->ShadowCopyFiles );
   Console::WriteLine( "---" );
   Type^ myFCType = ADDyno::CreateADynamicAssembly(  &curDomain, executableNameNoExe );
   Console::WriteLine( "Loading '{0}' from '{1}'...", executableName, myDomain->BaseDirectory );
   BindingFlags bFlags = static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::CreateInstance | BindingFlags::Instance);
   Object^ myObjInstance = myDomain->CreateInstanceAndUnwrap( executableNameNoExe, executableNameNoExe, false, bFlags, nullptr, nullptr, nullptr, nullptr, nullptr );
   Console::WriteLine( "Executing method 'CountLocalFiles' in {0}...", myObjInstance );
   array<Object^>^temp4 = nullptr;
   myFCType->InvokeMember( "CountLocalFiles", BindingFlags::InvokeMethod, nullptr, myObjInstance, temp4 );
}
  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstanceAndUnwrap 重载
System 命名空间
CreateInstance


AppDomain ..::.CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[])

AppDomain
.
.
::
.
CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
)
AppDomain 类

创建在指定的程序集中定义的指定类型的新实例，指定是否忽略类型名称的大小写，并指定绑定特性和用于选择要创建的类型的联编程序、构造函数的参数、区域性以及激活特性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstanceAndUnwrap ( _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object() _
) As Object
public Object CreateInstanceAndUnwrap(
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes
)
public:
Object^ CreateInstanceAndUnwrap(
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes
)
member CreateInstanceAndUnwrap :
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] -> Object

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
用于控制类型强制的特定于区域性的对象。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 用于控制类型强制的特定于区域性的对象。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System Object
typeName 所指定对象的实例。
异常 | 条件
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - assemblyName 使用比当前加载的版本更高的公共语言运行时版本编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

这是合并 CreateInstance 和 ObjectHandle..::.Unwrap 的便捷方法。

有关 assemblyName 的格式，请参见 AssemblyName。有关 typeName 的格式，请参见 Type..::.FullName 属性。 有关 assemblyName 的格式，请参见 AssemblyName。有关 typeName 的格式，请参见 Type..::.FullName 属性。

说明 说明

如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。

下面的示例演示如何使用 ignoreCase 形参。

Imports System
Imports System.Reflection

Module Test

   Sub Main()
      InstantiateINT32(False)	' Failed!
      InstantiateINT32(True)	' OK!
   End Sub 'Main

   Sub InstantiateINT32(ignoreCase As Boolean)
      Try
         Dim currentDomain As AppDomain = AppDomain.CurrentDomain
         Dim instance As Object = currentDomain.CreateInstanceAndUnwrap( _
            "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", _
            "SYSTEM.INT32", _
            ignoreCase, _
            BindingFlags.Default, _
            Nothing, _
            Nothing, _
            Nothing, _
            Nothing, _
            Nothing  _
         )
         Console.WriteLine(instance.GetType())
      Catch e As TypeLoadException
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateINT32

End Module 'Test

using System;
using System.Reflection;

class Test {

   static void Main() {
      InstantiateINT32(false);     // Failed!
      InstantiateINT32(true);      // OK!
   }

   static void InstantiateINT32(bool ignoreCase) {
      try {
         AppDomain currentDomain = AppDomain.CurrentDomain;
         object instance = currentDomain.CreateInstanceAndUnwrap(
            "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
            "SYSTEM.INT32",
            ignoreCase,
            BindingFlags.Default,
            null,
            null,
            null,
            null,
            null
         );
         Console.WriteLine(instance.GetType());
      } catch (TypeLoadException e) {
         Console.WriteLine(e.Message);
      }
   }
}

using namespace System;
using namespace System::Reflection;
static void InstantiateINT32( bool ignoreCase )
{
   try
   {
      AppDomain^ currentDomain = AppDomain::CurrentDomain;
      Object^ instance = currentDomain->CreateInstanceAndUnwrap(
         "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
         "SYSTEM.INT32",
         ignoreCase,
         BindingFlags::Default,
         nullptr,
         nullptr,
         nullptr,
         nullptr,
         nullptr );
      Console::WriteLine( instance->GetType() );
   }
   catch ( TypeLoadException^ e )
   {
      Console::WriteLine( e->Message );
   }

}

int main()
{
   InstantiateINT32( false ); // Failed!
   InstantiateINT32( true ); // OK!
}
  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • ReflectionPermission

    表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstanceAndUnwrap 重载
System 命名空间
CreateInstance


AppDomain ..::.CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

AppDomain
.
.
::
.
CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object , CultureInfo, Object )。

创建指定类型的新实例。形参指定类型的名称以及查找和创建该类型的方式。 创建指定类型的新实例。形参指定类型的名称以及查找和创建该类型的方式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function CreateInstanceAndUnwrap ( _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityAttributes As Evidence _
) As Object
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public Object CreateInstanceAndUnwrap(
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityAttributes
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
Object^ CreateInstanceAndUnwrap(
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityAttributes
)
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
member CreateInstanceAndUnwrap :
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> Object

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它使用反射启用绑定、实参类型的强制、成员的调用和 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
用于控制类型强制的特定于区域性的对象。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 用于控制类型强制的特定于区域性的对象。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityAttributes
类型： System.Security.Policy Evidence
用于授权创建 typeName 的信息。

返回值

类型： System Object
typeName 所指定对象的实例。
异常 | 条件
ArgumentNullException | assemblyName 或 typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MissingMethodException | 未找到匹配的构造函数。
TypeLoadException | 在 assemblyName 中找不到 typename。
FileNotFoundException | 未找到 assemblyName。
MethodAccessException | 调用方没有调用此构造函数的权限。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

这是合并 CreateInstance 和 ObjectHandle..::.Unwrap 的便捷方法。

有关 assemblyName 的格式，请参见 AssemblyName。有关 typeName 的格式，请参见 Type..::.FullName 属性。 有关 assemblyName 的格式，请参见 AssemblyName。有关 typeName 的格式，请参见 Type..::.FullName 属性。

说明 说明

如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。 如果对 CreateInstanceAndUnwrap 返回的 T1 类型对象的 M 方法进行早期绑定调用，而该方法对当前程序集或包含 T1 的程序集以外的程序集 C 中的 T2 类型对象的方法进行早期绑定调用，则程序集 C 将加载到当前应用程序域中。即使对 T1.M() 的早期绑定调用在 DynamicMethod 的函数体或其他动态生成的代码中进行，仍将发生此加载。如果当前域是默认域，则在进程结束前无法卸载程序集 C。如果当前域稍后尝试加载程序集 C，则加载可能失败。

下面的示例演示如何使用 ignoreCase 形参。

Imports System
Imports System.Reflection

Module Test

   Sub Main()
      InstantiateINT32(False)	' Failed!
      InstantiateINT32(True)	' OK!
   End Sub 'Main

   Sub InstantiateINT32(ignoreCase As Boolean)
      Try
         Dim currentDomain As AppDomain = AppDomain.CurrentDomain
         Dim instance As Object = currentDomain.CreateInstanceAndUnwrap( _
            "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", _
            "SYSTEM.INT32", _
            ignoreCase, _
            BindingFlags.Default, _
            Nothing, _
            Nothing, _
            Nothing, _
            Nothing, _
            Nothing  _
         )
         Console.WriteLine(instance.GetType())
      Catch e As TypeLoadException
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateINT32

End Module 'Test

using System;
using System.Reflection;

class Test {

   static void Main() {
      InstantiateINT32(false);     // Failed!
      InstantiateINT32(true);      // OK!
   }

   static void InstantiateINT32(bool ignoreCase) {
      try {
         AppDomain currentDomain = AppDomain.CurrentDomain;
         object instance = currentDomain.CreateInstanceAndUnwrap(
            "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
            "SYSTEM.INT32",
            ignoreCase,
            BindingFlags.Default,
            null,
            null,
            null,
            null,
            null
         );
         Console.WriteLine(instance.GetType());
      } catch (TypeLoadException e) {
         Console.WriteLine(e.Message);
      }
   }
}

using namespace System;
using namespace System::Reflection;
static void InstantiateINT32( bool ignoreCase )
{
   try
   {
      AppDomain^ currentDomain = AppDomain::CurrentDomain;
      Object^ instance = currentDomain->CreateInstanceAndUnwrap(
         "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
         "SYSTEM.INT32",
         ignoreCase,
         BindingFlags::Default,
         nullptr,
         nullptr,
         nullptr,
         nullptr,
         nullptr );
      Console::WriteLine( instance->GetType() );
   }
   catch ( TypeLoadException^ e )
   {
      Console::WriteLine( e->Message );
   }

}

int main()
{
   InstantiateINT32( false ); // Failed!
   InstantiateINT32( true ); // OK!
}
  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

  • SecurityPermission

    表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 表示在创建委托实例时调用非托管代码的能力。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • ReflectionPermission

    表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 表示对所有类型成员的调用操作的能力。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
CreateInstanceAndUnwrap 重载
System 命名空间
CreateInstance


AppDomain ..::.CreateInstanceFrom 方法

AppDomain
.
.
::
.
CreateInstanceFrom 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

创建在指定程序集文件中定义的指定类型的新实例。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.CreateInstanceFrom 方法 (String, String)

AppDomain
.
.
::
.
CreateInstanceFrom 方法 (String, String)
AppDomain 类

创建在指定程序集文件中定义的指定类型的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String _
) As ObjectHandle
public ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName
)
public:
virtual ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName
) sealed
abstract CreateInstanceFrom :
        assemblyFile:string *
        typeName:string -> ObjectHandle
override CreateInstanceFrom :
        assemblyFile:string *
        typeName:string -> ObjectHandle

参数

assemblyFile
类型： System String
文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。 文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。 一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。

实现

异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | 未找到 assemblyFile。
TypeLoadException | 在 assemblyFile 中找不到 typeName。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
MissingMethodException | 未找到无形参的公共构造函数。
MethodAccessException | 调用方的权限不足以调用此构造函数。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，assemblyFile 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
NullReferenceException | 此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

调用 typeName 的默认构造函数。

有关更多信息，请参见 Activator..::.CreateInstanceFrom 方法。

如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。

  • 如果以前曾将同一程序集的另一版本加载到调用应用程序域，或者调用应用程序域的加载路径与目标应用程序域的加载路径不同，则会发生 MissingMethodException 这样的异常。

  • 如果调用应用程序域对实例类型进行早期绑定调用，则尝试强制转换实例时会引发 InvalidCastException。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstanceFrom 重载
System 命名空间
Activator CreateInstanceFrom


AppDomain ..::.CreateInstanceFrom 方法 (String, String, array<Object >[]()[])

AppDomain
.
.
::
.
CreateInstanceFrom 方法 (String, String,
array<
Object
>
[]
()
[]
)
AppDomain 类

创建在指定程序集文件中定义的指定类型的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String, _
    activationAttributes As Object() _
) As ObjectHandle
public ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName,
    Object[] activationAttributes
)
public:
virtual ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName,
    array<Object^>^ activationAttributes
) sealed
abstract CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        activationAttributes:Object[] -> ObjectHandle
override CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyFile
类型： System String
文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。 文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。 一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。

实现

异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | 未找到 assemblyFile。
TypeLoadException | 在 assemblyFile 中找不到 typeName。
MethodAccessException | 调用方的权限不足以调用此构造函数。
MissingMethodException | 找不到匹配的公共构造函数。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，assemblyFile 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
NullReferenceException | 此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

调用 typeName 的默认构造函数。

有关更多信息，请参见 Activator..::.CreateInstanceFrom 方法。

如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。

  • 如果以前曾将同一程序集的另一版本加载到调用应用程序域，或者调用应用程序域的加载路径与目标应用程序域的加载路径不同，则会发生 MissingMethodException 这样的异常。

  • 如果调用应用程序域对实例类型进行早期绑定调用，则尝试强制转换实例时会引发 InvalidCastException。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstanceFrom 重载
System 命名空间
Activator CreateInstanceFrom


AppDomain ..::.CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[])

AppDomain
.
.
::
.
CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
)
AppDomain 类

创建在指定程序集文件中定义的指定类型的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object() _
) As ObjectHandle
public ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes
)
public:
ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes
)
member CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] -> ObjectHandle

参数

assemblyFile
类型： System String
文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。 文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。 一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。
异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileNotFoundException | 未找到 assemblyFile。
TypeLoadException | 在 assemblyFile 中找不到 typeName。
MissingMethodException | 找不到匹配的公共构造函数。
MethodAccessException | 调用方的权限不足以调用此构造函数。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - assemblyFile 使用比当前加载的版本更高的公共语言运行时版本编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
NullReferenceException | 此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

有关更多信息，请参见 Activator..::.CreateInstanceFrom 方法。

如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。

  • 如果以前曾将同一程序集的另一版本加载到调用应用程序域，或者调用应用程序域的加载路径与目标应用程序域的加载路径不同，则会发生 MissingMethodException 这样的异常。

  • 如果调用应用程序域对实例类型进行早期绑定调用，则尝试强制转换实例时会引发 InvalidCastException。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstanceFrom 重载
System 命名空间
Activator CreateInstanceFrom


AppDomain ..::.CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

AppDomain
.
.
::
.
CreateInstanceFrom 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object , CultureInfo, Object )。

创建在指定程序集文件中定义的指定类型的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function CreateInstanceFrom ( _
    assemblyFile As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityAttributes As Evidence _
) As ObjectHandle
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public ObjectHandle CreateInstanceFrom(
    string assemblyFile,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityAttributes
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual ObjectHandle^ CreateInstanceFrom(
    String^ assemblyFile,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityAttributes
) sealed
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> ObjectHandle
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override CreateInstanceFrom :
        assemblyFile:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> ObjectHandle

参数

assemblyFile
类型： System String
文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。 文件的名称（包括路径），该文件包含定义所请求类型的程序集。该程序集是使用 LoadFrom 方法加载的。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityAttributes
类型： System.Security.Policy Evidence
用于授权创建 typeName 的信息。

返回值

类型： System.Runtime.Remoting ObjectHandle
一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。 一个对象，它是新实例的包装，或者如果找不到 typeName，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。返回值需要打开包装才能访问真实对象。

实现

异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。 - 或 - securityAttributes 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，securityAttributes 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 securityAttributes 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，securityAttributes 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileNotFoundException | 未找到 assemblyFile。
TypeLoadException | 在 assemblyFile 中找不到 typeName。
MissingMethodException | 找不到匹配的公共构造函数。
MethodAccessException | 调用方的权限不足以调用此构造函数。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，assemblyFile 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
NullReferenceException | 此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

有关更多信息，请参见 Activator..::.CreateInstanceFrom 方法。

如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。 如果使用 CreateInstanceFrom 方法在目标应用程序域（不是在其中执行调用操作的应用程序域）中创建实例，程序集将加载到目标应用程序域。但是，如果该实例是在调用应用程序域中解包的，则以某些方式使用解包的实例会导致程序集加载到调用应用程序域中。例如，对该实例进行解包后，可能会请求该实例的类型信息，以便调用其后期绑定方法。将程序集加载到调用应用程序域时，会发生异常。

  • 如果以前曾将同一程序集的另一版本加载到调用应用程序域，或者调用应用程序域的加载路径与目标应用程序域的加载路径不同，则会发生 MissingMethodException 这样的异常。

  • 如果调用应用程序域对实例类型进行早期绑定调用，则尝试强制转换实例时会引发 InvalidCastException。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
CreateInstanceFrom 重载
System 命名空间
Activator CreateInstanceFrom


AppDomain ..::.CreateInstanceFromAndUnwrap 方法

AppDomain
.
.
::
.
CreateInstanceFromAndUnwrap 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

创建在指定程序集文件中定义的指定类型的新实例。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.CreateInstanceFromAndUnwrap 方法 (String, String)

AppDomain
.
.
::
.
CreateInstanceFromAndUnwrap 方法 (String, String)
AppDomain 类

创建在指定程序集文件中定义的指定类型的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstanceFromAndUnwrap ( _
    assemblyName As String, _
    typeName As String _
) As Object
public Object CreateInstanceFromAndUnwrap(
    string assemblyName,
    string typeName
)
public:
Object^ CreateInstanceFromAndUnwrap(
    String^ assemblyName,
    String^ typeName
)
member CreateInstanceFromAndUnwrap :
        assemblyName:string *
        typeName:string -> Object

参数

assemblyName
类型： System String
定义所请求类型的程序集的文件名和路径。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。

返回值

类型： System Object
请求的对象，或者如果找不到 typeName 则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileNotFoundException | 未找到 assemblyName。
TypeLoadException | 在 assemblyName 中找不到 typeName。
MissingMethodException | 未找到无形参的公共构造函数。
MethodAccessException | 调用方的权限不足以调用此构造函数。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

这是合并 CreateInstanceFrom 和 ObjectHandle..::.Unwrap 的便捷方法。此方法调用 typeName 的默认构造函数。 这是合并 CreateInstanceFrom 和 ObjectHandle..::.Unwrap 的便捷方法。此方法调用 typeName 的默认构造函数。

有关更多信息，请参见 Activator..::.CreateInstanceFrom 方法。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstanceFromAndUnwrap 重载
System 命名空间
Activator CreateInstanceFrom


AppDomain ..::.CreateInstanceFromAndUnwrap 方法 (String, String, array<Object >[]()[])

AppDomain
.
.
::
.
CreateInstanceFromAndUnwrap 方法 (String, String,
array<
Object
>
[]
()
[]
)
AppDomain 类

创建在指定程序集文件中定义的指定类型的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstanceFromAndUnwrap ( _
    assemblyName As String, _
    typeName As String, _
    activationAttributes As Object() _
) As Object
public Object CreateInstanceFromAndUnwrap(
    string assemblyName,
    string typeName,
    Object[] activationAttributes
)
public:
Object^ CreateInstanceFromAndUnwrap(
    String^ assemblyName,
    String^ typeName,
    array<Object^>^ activationAttributes
)
member CreateInstanceFromAndUnwrap :
        assemblyName:string *
        typeName:string *
        activationAttributes:Object[] -> Object

参数

assemblyName
类型： System String
定义所请求类型的程序集的文件名和路径。
typeName
类型： System String
所请求类型的完全限定名，包括命名空间而不是程序集（请参见 Type..::.FullName 属性）。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System Object
请求的对象，或者如果找不到 typeName 则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileNotFoundException | 未找到 assemblyName。
TypeLoadException | 在 assemblyName 中找不到 typeName。
MissingMethodException | 未找到无形参的公共构造函数。
MethodAccessException | 调用方的权限不足以调用此构造函数。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

这是合并 CreateInstanceFrom 和 ObjectHandle..::.Unwrap 的便捷方法。此方法调用 typeName 的默认构造函数。 这是合并 CreateInstanceFrom 和 ObjectHandle..::.Unwrap 的便捷方法。此方法调用 typeName 的默认构造函数。

有关更多信息，请参见 Activator..::.CreateInstanceFrom 方法。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstanceFromAndUnwrap 重载
System 命名空间
Activator CreateInstanceFrom


AppDomain ..::.CreateInstanceFromAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[])

AppDomain
.
.
::
.
CreateInstanceFromAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
)
AppDomain 类

创建在指定的程序集文件中定义的指定类型的新实例，指定是否忽略类型名称的大小写，并指定绑定特性和用于选择要创建的类型的联编程序、构造函数的参数、区域性以及激活特性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CreateInstanceFromAndUnwrap ( _
    assemblyFile As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object() _
) As Object
public Object CreateInstanceFromAndUnwrap(
    string assemblyFile,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes
)
public:
Object^ CreateInstanceFromAndUnwrap(
    String^ assemblyFile,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes
)
member CreateInstanceFromAndUnwrap :
        assemblyFile:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] -> Object

参数

assemblyFile
类型： System String
定义所请求类型的程序集的文件名和路径。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。

返回值

类型： System Object
请求的对象，或者如果找不到 typeName 则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileNotFoundException | 未找到 assemblyName。
TypeLoadException | 在 assemblyName 中找不到 typeName。
MissingMethodException | 找不到匹配的公共构造函数。
MethodAccessException | 调用方的权限不足以调用此构造函数。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - assemblyName 使用比当前加载的版本更高的公共语言运行时版本编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

这是合并 CreateInstanceFrom 和 ObjectHandle..::.Unwrap 的便捷方法。

有关更多信息，请参见 Activator..::.CreateInstanceFrom 方法。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
CreateInstanceFromAndUnwrap 重载
System 命名空间
Activator CreateInstanceFrom


AppDomain ..::.CreateInstanceFromAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, array<Object >[]()[], CultureInfo, array<Object >[]()[], Evidence)

AppDomain
.
.
::
.
CreateInstanceFromAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder,
array<
Object
>
[]
()
[]
, CultureInfo,
array<
Object
>
[]
()
[]
, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 CreateInstanceFromAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object , CultureInfo, Object )。

创建在指定程序集文件中定义的指定类型的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFromAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function CreateInstanceFromAndUnwrap ( _
    assemblyName As String, _
    typeName As String, _
    ignoreCase As Boolean, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    args As Object(), _
    culture As CultureInfo, _
    activationAttributes As Object(), _
    securityAttributes As Evidence _
) As Object
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFromAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public Object CreateInstanceFromAndUnwrap(
    string assemblyName,
    string typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder binder,
    Object[] args,
    CultureInfo culture,
    Object[] activationAttributes,
    Evidence securityAttributes
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFromAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
Object^ CreateInstanceFromAndUnwrap(
    String^ assemblyName,
    String^ typeName,
    bool ignoreCase,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Object^>^ args,
    CultureInfo^ culture,
    array<Object^>^ activationAttributes,
    Evidence^ securityAttributes
)
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFromAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
member CreateInstanceFromAndUnwrap :
        assemblyName:string *
        typeName:string *
        ignoreCase:bool *
        bindingAttr:BindingFlags *
        binder:Binder *
        args:Object[] *
        culture:CultureInfo *
        activationAttributes:Object[] *
        securityAttributes:Evidence -> Object

参数

assemblyName
类型： System String
定义所请求类型的程序集的文件名和路径。
typeName
类型： System String
Type..::.FullName 属性返回的所请求类型的完全限定名称，包含命名空间而不是程序集。
ignoreCase
类型： System Boolean
一个布尔值，指示是否执行区分大小写的搜索。
bindingAttr
类型： System.Reflection BindingFlags
影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。 影响 typeName 构造函数搜索的零个或多个位标志的组合。如果 bindingAttr 为零，则对公共构造函数进行区分大小写的搜索。
binder
类型： System.Reflection Binder
一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。 一个对象，它启用绑定、对实参类型的强制、对成员的调用，以及通过反射对 MemberInfo 对象的检索。如果 binder 为 null，则使用默认联编程序。
args
类型：
array<
System Object
>
[]
()
[]

要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。 要传递给构造函数的实参。此实参数组必须在数量、顺序和类型方面与要调用的构造函数的形参匹配。如果默认的构造函数是首选构造函数，则 args 必须为空数组或 Null。
culture
类型： System.Globalization CultureInfo
区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。 区域性特定的信息，这些信息控制将 args 强制转换为 typeName 构造函数所声明的正式类型。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前线程的 CultureInfo。
activationAttributes
类型：
array<
System Object
>
[]
()
[]

包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。 包含一个或多个可以参与激活的特性的数组。通常是包含单个 UrlAttribute 对象的数组。UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明，请参见Client Activation。
securityAttributes
类型： System.Security.Policy Evidence
用于授权创建 typeName 的信息。

返回值

类型： System Object
请求的对象，或者如果找不到 typeName 则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileNotFoundException | 未找到 assemblyName。
TypeLoadException | 在 assemblyName 中找不到 typeName。
MissingMethodException | 找不到匹配的公共构造函数。
MethodAccessException | 调用方的权限不足以调用此构造函数。
BadImageFormatException | assemblyName 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

这是合并 CreateInstanceFrom 和 ObjectHandle..::.Unwrap 的便捷方法。

有关更多信息，请参见 Activator..::.CreateInstanceFrom 方法。

  • FileIOPermissionAccess

    表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 表示访问程序集的位置的能力。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

  • FileIOPermissionAccess

    表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read 表示读取包含程序集清单的文件的能力。关联的枚举：FileIOPermissionAccess..::.Read

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
CreateInstanceFromAndUnwrap 重载
System 命名空间
Activator CreateInstanceFrom


AppDomain ..::.DefineDynamicAssembly 方法

AppDomain
.
.
::
.
DefineDynamicAssembly 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

在当前应用程序域中定义动态程序集。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess)
AppDomain 类

以指定名称和访问模式定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess _
) As AssemblyBuilder
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access
)
public:
virtual AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access
) sealed
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess -> AssemblyBuilder
override DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
动态程序集的访问模式。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。

下面的示例演示 DefineDynamicAssembly 方法和 AssemblyResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyDynamicType(currentDomain)   'Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub 'Main

   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyDynamicType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler

   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   static void InstantiateMyDynamicType( AppDomain^ domain )
   {
      try
      {

         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }

   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      return DefineDynamicAssembly( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {

      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew AssemblyName;
      assemblyName->Name = "MyDynamicAssembly";
      AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Run );
      ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyDynamicModule" );
      TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyDynamicType", TypeAttributes::Public );
      ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, IEnumerable <(Of <(CustomAttributeBuilder >)>))

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, IEnumerable
<
(Of
<
(
CustomAttributeBuilder
>
)
>
)
)
AppDomain 类

使用指定的名称、访问模式和自定义特性定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    assemblyAttributes As IEnumerable(Of CustomAttributeBuilder) _
) As AssemblyBuilder
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    IEnumerable<CustomAttributeBuilder> assemblyAttributes
)
public:
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    IEnumerable<CustomAttributeBuilder^>^ assemblyAttributes
)
member DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        assemblyAttributes:IEnumerable<CustomAttributeBuilder> -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
动态程序集的访问模式。
assemblyAttributes
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
CustomAttributeBuilder
>
)
>
)

要应用于程序集的可枚举特性列表；如果无特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System.Reflection.Emit AssemblyBuilder
一个 AssemblyBuilder 对象，它表示新的动态程序集。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或者包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

使用此方法重载指定除非在创建动态程序集时已应用，否则无法正常使用的特性。例如，如果在创建动态程序集后添加了安全特性（如 SecurityTransparentAttribute 和 SecurityCriticalAttribute），则这些特性无法正常使用。 使用此方法重载指定除非在创建动态程序集时已应用，否则无法正常使用的特性。例如，如果在创建动态程序集后添加了安全特性（如 SecurityTransparentAttribute 和 SecurityCriticalAttribute），则这些特性无法正常使用。

此方法只应用于在当前应用程序域中定义动态程序集。有关此限制的更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关此限制的更多信息，请参见 Load(AssemblyName) 方法重载。

.NET Framework 3.5 版 中引入了此方法重载。

下面的代码示例演示如何创建包含 SecurityTransparentAttribute 的动态程序集。必须将该特性指定为 CustomAttributeBuilder 对象数组的元素。 下面的代码示例演示如何创建包含 SecurityTransparentAttribute 的动态程序集。必须将该特性指定为 CustomAttributeBuilder 对象数组的元素。

创建 CustomAttributeBuilder 的第一步是获取该特性的构造函数。构造函数没有形参，因此调用 GetConstructor 方法，调用时以 Type 对象的空数组表示形参类型。第二步是将得到的 ConstructorInfo 对象传递给 CustomAttributeBuilder 类的构造函数，同时以 Object 类型的空数组表示实参。 创建 CustomAttributeBuilder 的第一步是获取该特性的构造函数。构造函数没有形参，因此调用 GetConstructor 方法，调用时以 Type 对象的空数组表示形参类型。第二步是将得到的 ConstructorInfo 对象传递给 CustomAttributeBuilder 类的构造函数，同时以 Object 类型的空数组表示实参。 创建 CustomAttributeBuilder 的第一步是获取该特性的构造函数。构造函数没有形参，因此调用 GetConstructor 方法，调用时以 Type 对象的空数组表示形参类型。第二步是将得到的 ConstructorInfo 对象传递给 CustomAttributeBuilder 类的构造函数，同时以 Object 类型的空数组表示实参。

然后将得到的 CustomAttributeBuilder 作为数组的唯一元素传递给 DefineDynamicAssembly 方法。

代码示例在新的动态程序集内定义一个模块和一个类型，然后显示程序集的特性。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Security

Module Example

    Sub Main()

        ' Create a CustomAttributeBuilder for the assembly attribute.
        '
        ' SecurityTransparentAttribute has a parameterless constructor,
        ' which is retrieved by passing an array of empty types for the
        ' constructor's parameter types. The CustomAttributeBuilder is
        ' then created by passing the ConstructorInfo and an empty array
        ' of objects to represent the parameters.
        '
        Dim transparentCtor As ConstructorInfo = _
            GetType(SecurityTransparentAttribute).GetConstructor( _
                Type.EmptyTypes)
        Dim transparent As New CustomAttributeBuilder( _
            transparentCtor, _
            New Object() {} )

        ' Create a dynamic assembly Imports the attribute. The attribute is
        ' passed as an array with one element.
        Dim aName As New AssemblyName("EmittedAssembly")
        Dim ab As AssemblyBuilder = _
            AppDomain.CurrentDomain.DefineDynamicAssembly( _
                aName, _
                AssemblyBuilderAccess.Run, _
                New CustomAttributeBuilder() { transparent } )

        Dim mb As ModuleBuilder = ab.DefineDynamicModule( aName.Name )
        Dim tb As TypeBuilder = mb.DefineType( _
            "MyDynamicType", _
            TypeAttributes.Public )
        tb.CreateType()

        Console.WriteLine("{0}" & vbLf & "Assembly attributes:", ab)
        For Each attr As Attribute In ab.GetCustomAttributes(True)
            Console.WriteLine(vbTab & "{0}", attr)
        Next
    End Sub
End Module

' This code example produces the following output:
'
'EmittedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
'Assembly attributes:
'        System.Security.SecurityTransparentAttribute

using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Security;

class Example
{
    static void Main()
    {
        // Create a CustomAttributeBuilder for the assembly attribute.
        //
        // SecurityTransparentAttribute has a parameterless constructor,
        // which is retrieved by passing an array of empty types for the
        // constructor's parameter types. The CustomAttributeBuilder is
        // then created by passing the ConstructorInfo and an empty array
        // of objects to represent the parameters.
        //
        ConstructorInfo transparentCtor =
            typeof(SecurityTransparentAttribute).GetConstructor(
                Type.EmptyTypes);
        CustomAttributeBuilder transparent = new CustomAttributeBuilder(
            transparentCtor,
            new Object[] {} );

        // Create a dynamic assembly using the attribute. The attribute is
        // passed as an array with one element.
        AssemblyName aName = new AssemblyName("EmittedAssembly");
        AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(
            aName,
            AssemblyBuilderAccess.Run,
            new CustomAttributeBuilder[] { transparent } );

        ModuleBuilder mb = ab.DefineDynamicModule( aName.Name );
        TypeBuilder tb = mb.DefineType(
            "MyDynamicType",
            TypeAttributes.Public );
        tb.CreateType();

        Console.WriteLine("{0}\nAssembly attributes:", ab);
        foreach (Attribute attr in ab.GetCustomAttributes(true))
        {
            Console.WriteLine("\t{0}", attr);
        }
    }
}

/* This code example produces the following output:

EmittedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Assembly attributes:
        System.Security.SecurityTransparentAttribute
 */

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Security;

void main()
{
    // Create a CustomAttributeBuilder for the assembly attribute.
    //
    // SecurityTransparentAttribute has a parameterless constructor,
    // which is retrieved by passing an array of empty types for the
    // constructor's parameter types. The CustomAttributeBuilder is
    // then created by passing the ConstructorInfo and an empty array
    // of objects to represent the parameters.
    //
    ConstructorInfo^ transparentCtor =
        SecurityTransparentAttribute::typeid->GetConstructor(
            Type::EmptyTypes);
    CustomAttributeBuilder^ transparent = gcnew CustomAttributeBuilder(
        transparentCtor,
        gcnew array<Object^> {} );

    // Create a dynamic assembly using the attribute. The attribute is
    // passed as an array with one element.
    AssemblyName^ aName = gcnew AssemblyName("EmittedAssembly");
    AssemblyBuilder^ ab = AppDomain::CurrentDomain->DefineDynamicAssembly(
        aName,
        AssemblyBuilderAccess::Run,
        gcnew array<CustomAttributeBuilder^> { transparent } );

    ModuleBuilder^ mb = ab->DefineDynamicModule( aName->Name );
    TypeBuilder^ tb = mb->DefineType(
        "MyDynamicType",
        TypeAttributes::Public );
    tb->CreateType();

    Console::WriteLine("{0}\nAssembly attributes:", ab);
    for each (Attribute^ attr in ab->GetCustomAttributes(true))
    {
        Console::WriteLine("\t{0}", attr);
    }
};

/* This code example produces the following output:

EmittedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Assembly attributes:
        System.Security.SecurityTransparentAttribute
 */

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间
SetCustomAttribute


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, Evidence)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)。

使用指定名称、访问模式和证据定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    evidence As Evidence _
) As AssemblyBuilder
[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    Evidence evidence
)
[ObsoleteAttribute(L"Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    Evidence^ evidence
) sealed
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        evidence:Evidence -> AssemblyBuilder
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        evidence:Evidence -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。

如果将动态 Assembly 保存到磁盘上，后面的加载将基于与保存 Assembly 的位置关联的策略获取授权。

此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。

下面的示例演示 DefineDynamicAssembly 方法和 AssemblyResolve 事件。

首先，代码示例尝试通过调用具有无效程序集名称的 CreateInstance 方法创建 MyDynamicType 实例，并捕捉导致的异常。

然后代码示例为 AssemblyResolve 事件添加事件处理程序，并再次尝试创建 MyDynamicType 实例。在调用 CreateInstance 的过程中，对于无效程序集会引发 AssemblyResolve 事件。事件处理程序创建一个包含 MyDynamicType 类型的动态程序集、为该类型赋予无形参构造函数，并返回新的动态程序集。然后，对 CreateInstance 的调用成功完成，且 MyDynamicType 的构造函数在控制台上显示一条消息。 然后代码示例为 AssemblyResolve 事件添加事件处理程序，并再次尝试创建 MyDynamicType 实例。在调用 CreateInstance 的过程中，对于无效程序集会引发 AssemblyResolve 事件。事件处理程序创建一个包含 MyDynamicType 类型的动态程序集、为该类型赋予无形参构造函数，并返回新的动态程序集。然后，对 CreateInstance 的调用成功完成，且 MyDynamicType 的构造函数在控制台上显示一条消息。 然后代码示例为 AssemblyResolve 事件添加事件处理程序，并再次尝试创建 MyDynamicType 实例。在调用 CreateInstance 的过程中，对于无效程序集会引发 AssemblyResolve 事件。事件处理程序创建一个包含 MyDynamicType 类型的动态程序集、为该类型赋予无形参构造函数，并返回新的动态程序集。然后，对 CreateInstance 的调用成功完成，且 MyDynamicType 的构造函数在控制台上显示一条消息。 然后代码示例为 AssemblyResolve 事件添加事件处理程序，并再次尝试创建 MyDynamicType 实例。在调用 CreateInstance 的过程中，对于无效程序集会引发 AssemblyResolve 事件。事件处理程序创建一个包含 MyDynamicType 类型的动态程序集、为该类型赋予无形参构造函数，并返回新的动态程序集。然后，对 CreateInstance 的调用成功完成，且 MyDynamicType 的构造函数在控制台上显示一条消息。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyDynamicType(currentDomain)   'Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub 'Main

   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyDynamicType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler

   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   static void InstantiateMyDynamicType( AppDomain^ domain )
   {
      try
      {

         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }

   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      return DefineDynamicAssembly( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {

      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew AssemblyName;
      assemblyName->Name = "MyDynamicAssembly";
      AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Run );
      ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyDynamicModule" );
      TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyDynamicType", TypeAttributes::Public );
      ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}
  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String)
AppDomain 类

使用指定名称、访问模式和存储目录定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String _
) As AssemblyBuilder
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir
)
public:
virtual AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir
) sealed
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string -> AssemblyBuilder
override DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。

下面的示例演示 DefineDynamicAssembly 方法和 AssemblyResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyDynamicType(currentDomain)   'Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub 'Main

   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyDynamicType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler

   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   static void InstantiateMyDynamicType( AppDomain^ domain )
   {
      try
      {

         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }

   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      return DefineDynamicAssembly( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {

      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew AssemblyName;
      assemblyName->Name = "MyDynamicAssembly";
      AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Run );
      ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyDynamicModule" );
      TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyDynamicType", TypeAttributes::Public );
      ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, IEnumerable <(Of <(CustomAttributeBuilder >)>), SecurityContextSource)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, IEnumerable
<
(Of
<
(
CustomAttributeBuilder
>
)
>
)
, SecurityContextSource)
AppDomain 类

定义具有指定名称、访问模式和自定义特性的动态程序集，并将指定源用于动态程序集的安全上下文。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    assemblyAttributes As IEnumerable(Of CustomAttributeBuilder), _
    securityContextSource As SecurityContextSource _
) As AssemblyBuilder
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    IEnumerable<CustomAttributeBuilder> assemblyAttributes,
    SecurityContextSource securityContextSource
)
public:
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    IEnumerable<CustomAttributeBuilder^>^ assemblyAttributes,
    SecurityContextSource securityContextSource
)
member DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        assemblyAttributes:IEnumerable<CustomAttributeBuilder> *
        securityContextSource:SecurityContextSource -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
动态程序集的访问模式。
assemblyAttributes
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
CustomAttributeBuilder
>
)
>
)

要应用于程序集的可枚举特性列表，或者无特性时为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
securityContextSource
类型： System.Security SecurityContextSource
安全上下文的源。

返回值

类型： System.Reflection.Emit AssemblyBuilder
新的动态程序集。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或者包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
ArgumentOutOfRangeException | securityContextSource 的值不是枚举值之一。

使用此方法重载指定除非在创建动态程序集时已应用，否则无法正常使用的特性。例如，如果在创建动态程序集后添加了安全特性（如 SecurityTransparentAttribute 和 SecurityCriticalAttribute），则这些特性无法正常使用。 使用此方法重载指定除非在创建动态程序集时已应用，否则无法正常使用的特性。例如，如果在创建动态程序集后添加了安全特性（如 SecurityTransparentAttribute 和 SecurityCriticalAttribute），则这些特性无法正常使用。

此方法只应用于在当前应用程序域中定义动态程序集。有关此限制的更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关此限制的更多信息，请参见 Load(AssemblyName) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String)。

使用指定名称、访问模式、存储目录和证据定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")> _
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    evidence As Evidence _
) As AssemblyBuilder
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    Evidence evidence
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public:
virtual AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    Evidence^ evidence
) sealed
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")>]
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence -> AssemblyBuilder
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")>]
override DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。

如果将动态 Assembly 保存到磁盘上，后面的加载将基于与保存 Assembly 的位置关联的策略获取授权。

此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。

下面的示例演示 DefineDynamicAssembly 方法和 AssemblyResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyDynamicType(currentDomain)   'Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub 'Main

   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyDynamicType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler

   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   static void InstantiateMyDynamicType( AppDomain^ domain )
   {
      try
      {

         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }

   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      return DefineDynamicAssembly( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {

      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew AssemblyName;
      assemblyName->Name = "MyDynamicAssembly";
      AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Run );
      ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyDynamicModule" );
      TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyDynamicType", TypeAttributes::Public );
      ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}
  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)。

使用指定名称、访问模式和权限请求定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet _
) As AssemblyBuilder
[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions
)
[ObsoleteAttribute(L"Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions
) sealed
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

不使用为 requiredPermissions、optionalPermissions 和 refusedPermissions 指定的权限请求，除非动态程序集已保存并且重新加载到内存中。若要为从不保存到磁盘的瞬态程序集指定权限请求，请使用指定证据和所请求权限的 DefineDynamicAssembly 方法重载，并提供一个 Evidence 对象。 不使用为 requiredPermissions、optionalPermissions 和 refusedPermissions 指定的权限请求，除非动态程序集已保存并且重新加载到内存中。若要为从不保存到磁盘的瞬态程序集指定权限请求，请使用指定证据和所请求权限的 DefineDynamicAssembly 方法重载，并提供一个 Evidence 对象。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。

此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。

说明 说明

在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。 在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。

下面的示例演示 DefineDynamicAssembly 方法和 AssemblyResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyDynamicType(currentDomain)   'Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub 'Main

   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyDynamicType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler

   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   static void InstantiateMyDynamicType( AppDomain^ domain )
   {
      try
      {

         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }

   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      return DefineDynamicAssembly( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {

      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew AssemblyName;
      assemblyName->Name = "MyDynamicAssembly";
      AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Run );
      ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyDynamicModule" );
      TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyDynamicType", TypeAttributes::Public );
      ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable <(Of <(CustomAttributeBuilder >)>))

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable
<
(Of
<
(
CustomAttributeBuilder
>
)
>
)
)
AppDomain 类

使用指定名称、访问模式、存储目录和同步选项定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    isSynchronized As Boolean, _
    assemblyAttributes As IEnumerable(Of CustomAttributeBuilder) _
) As AssemblyBuilder
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    bool isSynchronized,
    IEnumerable<CustomAttributeBuilder> assemblyAttributes
)
public:
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    bool isSynchronized,
    IEnumerable<CustomAttributeBuilder^>^ assemblyAttributes
)
member DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        isSynchronized:bool *
        assemblyAttributes:IEnumerable<CustomAttributeBuilder> -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存动态程序集的目录的名称。如果 dir 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前目录。 保存动态程序集的目录的名称。如果 dir 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前目录。
isSynchronized
类型： System Boolean
若要在动态程序集中同步模块、类型和成员的创建，则为 true；否则为 false。
assemblyAttributes
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
CustomAttributeBuilder
>
)
>
)

要应用于程序集的可枚举特性列表；如果无特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System.Reflection.Emit AssemblyBuilder
一个 AssemblyBuilder 对象，它表示新的动态程序集。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或者包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

使用此方法重载指定除非在创建动态程序集时已应用，否则无法正常使用的特性。例如，如果在创建动态程序集后添加了安全特性（如 SecurityTransparentAttribute 和 SecurityCriticalAttribute），则这些特性无法正常使用。 使用此方法重载指定除非在创建动态程序集时已应用，否则无法正常使用的特性。例如，如果在创建动态程序集后添加了安全特性（如 SecurityTransparentAttribute 和 SecurityCriticalAttribute），则这些特性无法正常使用。

如果 isSynchronized 为 true，则将同步所得 AssemblyBuilder 的下列方法：DefineDynamicModule、DefineResource、AddResourceFile、GetDynamicModule、SetEntryPoint 和 Save。如果在不同线程上调用这些方法中的两个，则一个方法完成前另一个方法将一直阻止。 如果 isSynchronized 为 true，则将同步所得 AssemblyBuilder 的下列方法：DefineDynamicModule、DefineResource、AddResourceFile、GetDynamicModule、SetEntryPoint 和 Save。如果在不同线程上调用这些方法中的两个，则一个方法完成前另一个方法将一直阻止。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间
SetCustomAttribute


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)。

使用指定名称、访问模式、证据和权限请求定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    evidence As Evidence, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet _
) As AssemblyBuilder
[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    Evidence evidence,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions
)
[ObsoleteAttribute(L"Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    Evidence^ evidence,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions
) sealed
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

仅当还提供了 evidence，或者动态程序集被保存并且重新加载到内存中时，才使用为 requiredPermissions、optionalPermissions 和 refusedPermissions 指定的权限请求。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。

只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。

如果将动态 Assembly 保存到磁盘上，后面的加载将基于与保存 Assembly 的位置关联的策略获取授权。

此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。

说明 说明

在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。 在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。

下面的示例演示 DefineDynamicAssembly 方法和 AssemblyResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyDynamicType(currentDomain)   'Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub 'Main

   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyDynamicType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler

   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   static void InstantiateMyDynamicType( AppDomain^ domain )
   {
      try
      {

         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }

   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      return DefineDynamicAssembly( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {

      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew AssemblyName;
      assemblyName->Name = "MyDynamicAssembly";
      AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Run );
      ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyDynamicModule" );
      TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyDynamicType", TypeAttributes::Public );
      ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}
  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, PermissionSet, PermissionSet, PermissionSet)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, PermissionSet, PermissionSet, PermissionSet)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String)。

使用指定名称、访问模式、存储目录和权限请求定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet _
) As AssemblyBuilder
[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions
)
[ObsoleteAttribute(L"Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions
) sealed
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

不使用为 requiredPermissions、optionalPermissions 和 refusedPermissions 指定的权限请求，除非动态程序集已保存并且重新加载到内存中。若要为从不保存到磁盘的瞬态程序集指定权限请求，请使用指定证据和所请求权限的 DefineDynamicAssembly 方法重载，并提供一个 Evidence 对象。 不使用为 requiredPermissions、optionalPermissions 和 refusedPermissions 指定的权限请求，除非动态程序集已保存并且重新加载到内存中。若要为从不保存到磁盘的瞬态程序集指定权限请求，请使用指定证据和所请求权限的 DefineDynamicAssembly 方法重载，并提供一个 Evidence 对象。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您使用指定证据和权限的 DefineDynamicAssembly 方法重载，提供希望动态程序集所具有的证据以及在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。

此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。

说明 说明

在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。 在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。

下面的示例演示 DefineDynamicAssembly 方法和 AssemblyResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyDynamicType(currentDomain)   'Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub 'Main

   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyDynamicType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler

   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   static void InstantiateMyDynamicType( AppDomain^ domain )
   {
      try
      {

         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }

   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      return DefineDynamicAssembly( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {

      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew AssemblyName;
      assemblyName->Name = "MyDynamicAssembly";
      AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Run );
      ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyDynamicModule" );
      TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyDynamicType", TypeAttributes::Public );
      ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String)。

使用指定名称、访问模式、存储目录、证据和权限请求定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  Please see http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")> _
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    evidence As Evidence, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet _
) As AssemblyBuilder
[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  Please see http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    Evidence evidence,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions
)
[ObsoleteAttribute(L"Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  Please see http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public:
virtual AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    Evidence^ evidence,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions
) sealed
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  Please see http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")>]
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  Please see http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")>]
override DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

仅当还提供了 evidence，或者动态程序集被保存并且重新加载到内存中时，才使用为 requiredPermissions、optionalPermissions 和 refusedPermissions 指定的权限请求。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。

只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须提供空的 evidence。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。

如果将动态 Assembly 保存到磁盘上，后面的加载将基于与保存 Assembly 的位置关联的策略获取授权。

此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。 此方法只应用于在当前应用程序域中定义动态程序集。有关更多信息，请参见 Load(AssemblyName) 方法重载。

说明 说明

在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。 在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。

下面的示例演示 DefineDynamicAssembly 方法和 AssemblyResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyDynamicType(currentDomain)   'Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub 'Main

   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyDynamicType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler

   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   static void InstantiateMyDynamicType( AppDomain^ domain )
   {
      try
      {

         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }

   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      return DefineDynamicAssembly( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {

      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew AssemblyName;
      assemblyName->Name = "MyDynamicAssembly";
      AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Run );
      ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyDynamicModule" );
      TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyDynamicType", TypeAttributes::Public );
      ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}
  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean)

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable CustomAttributeBuilder )。

使用指定名称、访问模式、存储目录、证据、权限请求和同步选项定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    evidence As Evidence, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet, _
    isSynchronized As Boolean _
) As AssemblyBuilder
[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    Evidence evidence,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions,
    bool isSynchronized
)
[ObsoleteAttribute(L"Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    Evidence^ evidence,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions,
    bool isSynchronized
) sealed
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet *
        isSynchronized:bool -> AssemblyBuilder
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet *
        isSynchronized:bool -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存动态程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。 保存动态程序集的目录的名称。如果 dir 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），目录将默认为当前目录。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。
isSynchronized
类型： System Boolean
若要在动态程序集中同步模块、类型和成员的创建，则为 true；否则为 false。

返回值

类型： System.Reflection.Emit AssemblyBuilder
表示创建的动态程序集。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

仅当还提供了 evidence，或者动态程序集被保存并且重新加载到内存中时，才使用为 requiredPermissions、optionalPermissions 和 refusedPermissions 指定的权限请求。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 中包括 SecurityPermissionFlag..::.SkipVerification。在 refusedPermissions 参数中包括 SkipVerification 可以确保验证 MSIL。这个技术的局限性在于，当与要求完全信任的代码一起使用时，它会导致引发 SecurityException。

只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须为 evidence 形参提供 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须为 evidence 形参提供 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须为 evidence 形参提供 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供其 evidence。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须为 evidence 形参提供 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），运行时将权限集（即，当前授予集和拒绝集）从调用方的 Assembly 复制到正在定义的动态 Assembly，并将策略标记为已解析。

如果将动态 Assembly 保存到磁盘上，后面的加载将基于与保存 Assembly 的位置关联的策略获取授权。

如果 isSynchronized 为 true，则将同步所得 AssemblyBuilder 的下列方法：DefineDynamicModule、DefineResource、AddResourceFile、GetDynamicModule、SetEntryPoint 和 Save。如果这些方法中的两个在不同线程上调用，则一个方法完成前另一个方法将一直阻止。 如果 isSynchronized 为 true，则将同步所得 AssemblyBuilder 的下列方法：DefineDynamicModule、DefineResource、AddResourceFile、GetDynamicModule、SetEntryPoint 和 Save。如果这些方法中的两个在不同线程上调用，则一个方法完成前另一个方法将一直阻止。

说明 说明

在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。 在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。请参见 Emitting Declarative Security Attributes。

下面的示例演示 DefineDynamicAssembly 方法和 AssemblyResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyDynamicType(currentDomain)   'Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub 'Main

   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyDynamicType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler

   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   static void InstantiateMyDynamicType( AppDomain^ domain )
   {
      try
      {

         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }

   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      return DefineDynamicAssembly( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {

      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew AssemblyName;
      assemblyName->Name = "MyDynamicAssembly";
      AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Run );
      ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyDynamicModule" );
      TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyDynamicType", TypeAttributes::Public );
      ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}
  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间


AppDomain ..::.DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable <(Of <(CustomAttributeBuilder >)>))

AppDomain
.
.
::
.
DefineDynamicAssembly 方法 (AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable
<
(Of
<
(
CustomAttributeBuilder
>
)
>
)
)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable CustomAttributeBuilder )。

使用指定的名称、访问模式、存储目录、证据、权限请求、同步选项和自定义特性定义动态程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function DefineDynamicAssembly ( _
    name As AssemblyName, _
    access As AssemblyBuilderAccess, _
    dir As String, _
    evidence As Evidence, _
    requiredPermissions As PermissionSet, _
    optionalPermissions As PermissionSet, _
    refusedPermissions As PermissionSet, _
    isSynchronized As Boolean, _
    assemblyAttributes As IEnumerable(Of CustomAttributeBuilder) _
) As AssemblyBuilder
[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
    AssemblyName name,
    AssemblyBuilderAccess access,
    string dir,
    Evidence evidence,
    PermissionSet requiredPermissions,
    PermissionSet optionalPermissions,
    PermissionSet refusedPermissions,
    bool isSynchronized,
    IEnumerable<CustomAttributeBuilder> assemblyAttributes
)
[ObsoleteAttribute(L"Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
AssemblyBuilder^ DefineDynamicAssembly(
    AssemblyName^ name,
    AssemblyBuilderAccess access,
    String^ dir,
    Evidence^ evidence,
    PermissionSet^ requiredPermissions,
    PermissionSet^ optionalPermissions,
    PermissionSet^ refusedPermissions,
    bool isSynchronized,
    IEnumerable<CustomAttributeBuilder^>^ assemblyAttributes
)
[<ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
member DefineDynamicAssembly :
        name:AssemblyName *
        access:AssemblyBuilderAccess *
        dir:string *
        evidence:Evidence *
        requiredPermissions:PermissionSet *
        optionalPermissions:PermissionSet *
        refusedPermissions:PermissionSet *
        isSynchronized:bool *
        assemblyAttributes:IEnumerable<CustomAttributeBuilder> -> AssemblyBuilder

参数

name
类型： System.Reflection AssemblyName
动态程序集的唯一标识。
access
类型： System.Reflection.Emit AssemblyBuilderAccess
访问动态程序集所采用的模式。
dir
类型： System String
保存动态程序集的目录的名称。如果 dir 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前目录。 保存动态程序集的目录的名称。如果 dir 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前目录。
evidence
类型： System.Security.Policy Evidence
为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。 为动态程序集提供的证据。该证据始终作为最后一组用于策略解析的证据来使用。
requiredPermissions
类型： System.Security PermissionSet
必需的权限请求。
optionalPermissions
类型： System.Security PermissionSet
可选权限请求。
refusedPermissions
类型： System.Security PermissionSet
被拒绝的权限请求。
isSynchronized
类型： System Boolean
若要在动态程序集中同步模块、类型和成员的创建，则为 true；否则为 false。
assemblyAttributes
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
CustomAttributeBuilder
>
)
>
)

要应用于程序集的可枚举特性列表；如果无特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System.Reflection.Emit AssemblyBuilder
一个 AssemblyBuilder 对象，它表示新的动态程序集。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 的 Name 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - name 的 Name 属性以空白开始，或者包含正斜杠或反斜杠。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

使用此方法重载指定除非在创建动态程序集时已应用，否则无法正常使用的特性。例如，如果在创建动态程序集后添加了安全特性（如 SecurityTransparentAttribute 和 SecurityCriticalAttribute），则这些特性无法正常使用。 使用此方法重载指定除非在创建动态程序集时已应用，否则无法正常使用的特性。例如，如果在创建动态程序集后添加了安全特性（如 SecurityTransparentAttribute 和 SecurityCriticalAttribute），则这些特性无法正常使用。

仅当还提供了 evidence 形参，或者动态程序集被保存并且重新加载到内存中时，才使用为 requiredPermissions、optionalPermissions 和 refusedPermissions 形参指定的权限请求。

说明 说明

在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 参数中包括 SecurityPermissionFlag..::.SkipVerification 标志。包含此标志可确保将验证 Microsoft 中间语言 (MSIL)。此技术将检测是否无意间生成了不可验证的代码，而这种代码很难检测到。此技术的局限性是将它与需要完全信任的代码一起使用时，它还会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 参数中包括 SecurityPermissionFlag..::.SkipVerification 标志。包含此标志可确保将验证 Microsoft 中间语言 (MSIL)。此技术将检测是否无意间生成了不可验证的代码，而这种代码很难检测到。此技术的局限性是将它与需要完全信任的代码一起使用时，它还会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 参数中包括 SecurityPermissionFlag..::.SkipVerification 标志。包含此标志可确保将验证 Microsoft 中间语言 (MSIL)。此技术将检测是否无意间生成了不可验证的代码，而这种代码很难检测到。此技术的局限性是将它与需要完全信任的代码一起使用时，它还会导致引发 SecurityException。 在开发用于发出动态程序集的代码过程中，建议您在 refusedPermissions 参数中包括 SecurityPermissionFlag..::.SkipVerification 标志。包含此标志可确保将验证 Microsoft 中间语言 (MSIL)。此技术将检测是否无意间生成了不可验证的代码，而这种代码很难检测到。此技术的局限性是将它与需要完全信任的代码一起使用时，它还会导致引发 SecurityException。

只有完全受信任的调用方可以在定义动态 Assembly 时提供证据。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须为 evidence 形参提供 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则运行时会将权限集（即当前授予集和拒绝集）从调用方的程序集复制到正在定义的动态程序集，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供证据。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须为 evidence 形参提供 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则运行时会将权限集（即当前授予集和拒绝集）从调用方的程序集复制到正在定义的动态程序集，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供证据。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须为 evidence 形参提供 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则运行时会将权限集（即当前授予集和拒绝集）从调用方的程序集复制到正在定义的动态程序集，并将策略标记为已解析。 只有完全受信任的调用方可以在定义动态 Assembly 时提供证据。运行时将通过安全策略映射 Evidence 来确定授予的权限。部分受信任的调用方必须为 evidence 形参提供 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 evidence 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则运行时会将权限集（即当前授予集和拒绝集）从调用方的程序集复制到正在定义的动态程序集，并将策略标记为已解析。

如果将动态程序集保存到磁盘上，后面的加载将基于与保存动态程序集的位置关联的策略获取授权。

如果 isSynchronized 为 true，则将同步所得 AssemblyBuilder 的下列方法：DefineDynamicModule、DefineResource、AddResourceFile、GetDynamicModule、SetEntryPoint 和 Save。如果在不同线程上调用这些方法中的两个，则一个方法完成前另一个方法将一直阻止。 如果 isSynchronized 为 true，则将同步所得 AssemblyBuilder 的下列方法：DefineDynamicModule、DefineResource、AddResourceFile、GetDynamicModule、SetEntryPoint 和 Save。如果在不同线程上调用这些方法中的两个，则一个方法完成前另一个方法将一直阻止。

说明 说明

在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。有关这些特性的更多信息，请参见 Emitting Declarative Security Attributes。 在 .NET Framework 1.0、1.1 和 2.0 版中，通过使用 requiredPermissions、optionalPermissions 和 refusedPermissions 参数应用于动态程序集的声明性安全特性以旧的 XML 元数据格式存储。有关这些特性的更多信息，请参见 Emitting Declarative Security Attributes。

.NET Framework 3.5 版 中引入了此方法重载。

  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5 SP1、3.0 SP1、2.0 SP1
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
DefineDynamicAssembly 重载
System 命名空间
SetCustomAttribute


AppDomain ..::.DoCallBack 方法

AppDomain
.
.
::
.
DoCallBack 方法
AppDomain 类

在另一个应用程序域中执行代码，该应用程序域由指定的委托标识。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub DoCallBack ( _
    callBackDelegate As CrossAppDomainDelegate _
)
public void DoCallBack(
    CrossAppDomainDelegate callBackDelegate
)
public:
virtual void DoCallBack(
    CrossAppDomainDelegate^ callBackDelegate
) sealed
abstract DoCallBack :
        callBackDelegate:CrossAppDomainDelegate -> unit
override DoCallBack :
        callBackDelegate:CrossAppDomainDelegate -> unit

参数

callBackDelegate
类型： System CrossAppDomainDelegate
指定要调用的方法的委托。

实现

异常 | 条件
ArgumentNullException | callBackDelegate 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

callBackDelegate 可指定按值封送、MarshalByRefObject 或 ContextBoundObject。

下面的示例演示如何使用静态 DoCallBack 方法。

Public Module PingPong

   Private greetings As String = "PONG!"

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

      greetings = "PING!"

      MyCallBack()
      otherDomain.DoCallBack(AddressOf MyCallBack)

      ' Output:
      '   PING! from default domain
      '   PONG! from otherDomain
   End Sub 'Main

   Sub MyCallBack()
      Dim name As String = AppDomain.CurrentDomain.FriendlyName
      Console.WriteLine(greetings + " from " + name)
   End Sub 'MyCallBack

End Module 'PingPong

static string greetings = "PONG!";

public static void Main() {
   AppDomain currentDomain = AppDomain.CurrentDomain;
   AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

   greetings = "PING!";

   MyCallBack();
   otherDomain.DoCallBack(new CrossAppDomainDelegate(MyCallBack));

   // Output:
   //   PING! from default domain
   //   PONG! from otherDomain
}

static public void MyCallBack() {
   string name = AppDomain.CurrentDomain.FriendlyName;
   Console.WriteLine(greetings + " from " + name);
}

public ref class PingPong
{
private:
   static String^ greetings = "PONG!";

public:
   static void MyCallBack()
   {
      String^ name = AppDomain::CurrentDomain->FriendlyName;
      Console::WriteLine(  "{0} from {1}", greetings, name );
   }

   static void Ping()
   {
      AppDomain^ currentDomain = AppDomain::CurrentDomain;
      AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
      greetings = "PING!";
      MyCallBack();
      otherDomain->DoCallBack( gcnew CrossAppDomainDelegate( MyCallBack ) );

      // Output:
      //   PING! from default domain
      //   PONG! from otherDomain
   }

};

int main()
{
   PingPong::Ping();
}

下面的示例演示如何通过值使用 DoCallBack 方法。

<Serializable> _
Public Class PingPong

   Private greetings As String = "PING!"

   Public Shared Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

      Dim pp As New PingPong()
      pp.MyCallBack()
      pp.greetings = "PONG!"
      otherDomain.DoCallBack(AddressOf pp.MyCallBack)

      ' Output:
      '   PING! from default domain
      '   PONG! from otherDomain
   End Sub 'Main

   Public Sub MyCallBack()
      Dim name As String = AppDomain.CurrentDomain.FriendlyName
      Console.WriteLine(greetings + " from " + name)
   End Sub 'MyCallBack

End Class 'PingPong

[Serializable]
public class PingPong {
   private string greetings = "PING!";

   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

      PingPong pp = new PingPong();
      pp.MyCallBack();
      pp.greetings = "PONG!";
      otherDomain.DoCallBack(new CrossAppDomainDelegate(pp.MyCallBack));

      // Output:
      //   PING! from default domain
      //   PONG! from otherDomain
   }

   public void MyCallBack() {
      string name = AppDomain.CurrentDomain.FriendlyName;
      Console.WriteLine(greetings + " from " + name);
   }
}

[Serializable]
public ref class PingPong
{
private:
   String^ greetings;

public:
   PingPong()
   {
      greetings = "PING!";
   }

   void MyCallBack()
   {
      String^ name = AppDomain::CurrentDomain->FriendlyName;
      Console::WriteLine(  "{0} from {1}", greetings, name );
   }

   static void Ping()
   {
      AppDomain^ currentDomain = AppDomain::CurrentDomain;
      AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
      PingPong^ pp = gcnew PingPong;
      pp->MyCallBack();
      pp->greetings = "PONG!";
      otherDomain->DoCallBack( gcnew CrossAppDomainDelegate( pp, &PingPong::MyCallBack ) );

      // Output:
      //   PING! from default domain
      //   PONG! from otherDomain
   }

};

int main()
{
   PingPong::Ping();
}

下面的示例演示如何通过引用使用 DoCallBack 方法。

Public Class PingPong
   Inherits MarshalByRefObject

   Private greetings As String = "PING!"

   Public Shared Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

      Dim pp As New PingPong()
      otherDomain.DoCallBack(AddressOf pp.MyCallBack)
      pp.MyCallBack()

      ' Output:
      '   PING! from default domain
      '   PONG! from default domain
   End Sub 'Main

   Public Sub MyCallBack()
      Dim name As String = AppDomain.CurrentDomain.FriendlyName
      Console.WriteLine((greetings + " from " + name))
      greetings = "PONG!"
   End Sub 'MyCallBack

End Class 'PingPong

public class PingPong : MarshalByRefObject {
   private string greetings = "PING!";

   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

      PingPong pp = new PingPong();
      otherDomain.DoCallBack(new CrossAppDomainDelegate(pp.MyCallBack));
      pp.MyCallBack();

      // Output:
      //   PING! from default domain
      //   PONG! from default domain
   }

   public void MyCallBack() {
      string name = AppDomain.CurrentDomain.FriendlyName;
      Console.WriteLine(greetings + " from " + name);
      greetings = "PONG!";
   }
}

public ref class PingPong: public MarshalByRefObject
{
private:
   String^ greetings;

public:
   PingPong()
   {
      greetings = "PING!";
   }

   void MyCallBack()
   {
      String^ name = AppDomain::CurrentDomain->FriendlyName;
      Console::WriteLine( "{0} from {1}", greetings, name );
      greetings = "PONG!";
   }

   static void Ping()
   {
      AppDomain^ currentDomain = AppDomain::CurrentDomain;
      AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
      PingPong^ pp = gcnew PingPong;
      otherDomain->DoCallBack( gcnew CrossAppDomainDelegate( pp, &PingPong::MyCallBack ) );
      pp->MyCallBack();

      // Output:
      //   PING! from default domain
      //   PONG! from default domain
   }

};

int main()
{
   PingPong::Ping();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ExecuteAssembly 方法

AppDomain
.
.
::
.
ExecuteAssembly 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

执行指定文件中包含的程序集。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ExecuteAssembly 方法 (String)

AppDomain
.
.
::
.
ExecuteAssembly 方法 (String)
AppDomain 类

执行指定文件中包含的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ExecuteAssembly ( _
    assemblyFile As String _
) As Integer
public int ExecuteAssembly(
    string assemblyFile
)
public:
virtual int ExecuteAssembly(
    String^ assemblyFile
) sealed
abstract ExecuteAssembly :
        assemblyFile:string -> int
override ExecuteAssembly :
        assemblyFile:string -> int

参数

assemblyFile
类型： System String
包含要执行程序集的文件的名称。

返回值

类型： System Int32
程序集的入口点返回的值。

实现

异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyFile 未找到。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，assemblyFile 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。 此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。

若要创建要加载和执行的 AppDomain，请使用 CreateDomain 方法。

下面的示例演示如何对两个不同的域使用 ExecuteAssembly 的重载之一。

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

      currentDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on otherDomain"
   End Sub 'Main

End Module 'Test

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

      currentDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on otherDomain"
   }
}

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
   currentDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on [default]"
   otherDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on otherDomain"
}
  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于读取不以“file://”开头的 URI。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 类
AppDomain 成员
ExecuteAssembly 重载
System 命名空间


AppDomain ..::.ExecuteAssembly 方法 (String, Evidence)

AppDomain
.
.
::
.
ExecuteAssembly 方法 (String, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ExecuteAssembly(String)。

使用指定的证据执行指定文件中包含的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function ExecuteAssembly ( _
    assemblyFile As String, _
    assemblySecurity As Evidence _
) As Integer
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public int ExecuteAssembly(
    string assemblyFile,
    Evidence assemblySecurity
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual int ExecuteAssembly(
    String^ assemblyFile,
    Evidence^ assemblySecurity
) sealed
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract ExecuteAssembly :
        assemblyFile:string *
        assemblySecurity:Evidence -> int
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override ExecuteAssembly :
        assemblyFile:string *
        assemblySecurity:Evidence -> int

参数

assemblyFile
类型： System String
包含要执行程序集的文件的名称。
assemblySecurity
类型： System.Security.Policy Evidence
用于加载程序集的证据。

返回值

类型： System Int32
程序集的入口点返回的值。

实现

异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyFile 未找到。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，assemblyFile 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

ExecuteAssembly 方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。 此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。

下面的示例演示如何对两个不同的域使用 ExecuteAssembly 的重载之一。

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

      currentDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on otherDomain"
   End Sub 'Main

End Module 'Test

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

      currentDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on otherDomain"
   }
}

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
   currentDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on [default]"
   otherDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on otherDomain"
}
  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于读取不以“file://”开头的 URI。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
ExecuteAssembly 重载
System 命名空间


AppDomain ..::.ExecuteAssembly 方法 (String, array<String >[]()[])

AppDomain
.
.
::
.
ExecuteAssembly 方法 (String,
array<
String
>
[]
()
[]
)
AppDomain 类

使用指定的参数执行指定文件中包含的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ExecuteAssembly ( _
    assemblyFile As String, _
    args As String() _
) As Integer
public int ExecuteAssembly(
    string assemblyFile,
    string[] args
)
public:
int ExecuteAssembly(
    String^ assemblyFile,
    array<String^>^ args
)
member ExecuteAssembly :
        assemblyFile:string *
        args:string[] -> int

参数

assemblyFile
类型： System String
包含要执行程序集的文件的名称。
args
类型：
array<
System String
>
[]
()
[]

程序集的入口点的实参。

返回值

类型： System Int32
程序集的入口点返回的值。
异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyFile 未找到。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - assemblyFile 使用比当前加载的版本更高的公共语言运行时版本编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。 此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。

下面的示例演示如何对两个不同的域使用 ExecuteAssembly 的重载之一。

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

      currentDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on otherDomain"
   End Sub 'Main

End Module 'Test

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

      currentDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on otherDomain"
   }
}

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
   currentDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on [default]"
   otherDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on otherDomain"
}
  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于读取不以“file://”开头的 URI。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
ExecuteAssembly 重载
System 命名空间


AppDomain ..::.ExecuteAssembly 方法 (String, Evidence, array<String >[]()[])

AppDomain
.
.
::
.
ExecuteAssembly 方法 (String, Evidence,
array<
String
>
[]
()
[]
)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ExecuteAssembly(String, String )。

使用指定的证据和实参执行指定文件中包含的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function ExecuteAssembly ( _
    assemblyFile As String, _
    assemblySecurity As Evidence, _
    args As String() _
) As Integer
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public int ExecuteAssembly(
    string assemblyFile,
    Evidence assemblySecurity,
    string[] args
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual int ExecuteAssembly(
    String^ assemblyFile,
    Evidence^ assemblySecurity,
    array<String^>^ args
) sealed
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract ExecuteAssembly :
        assemblyFile:string *
        assemblySecurity:Evidence *
        args:string[] -> int
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override ExecuteAssembly :
        assemblyFile:string *
        assemblySecurity:Evidence *
        args:string[] -> int

参数

assemblyFile
类型： System String
包含要执行程序集的文件的名称。
assemblySecurity
类型： System.Security.Policy Evidence
为程序集提供的证据。
args
类型：
array<
System String
>
[]
()
[]

程序集的入口点的实参。

返回值

类型： System Int32
程序集的入口点返回的值。

实现

异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyFile 未找到。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，assemblyFile 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
NotSupportedException | assemblySecurity 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，assemblySecurity 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 assemblySecurity 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，assemblySecurity 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。 此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。

下面的示例演示如何对两个不同的域使用 ExecuteAssembly 的重载之一。

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

      currentDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on otherDomain"
   End Sub 'Main

End Module 'Test

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

      currentDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on otherDomain"
   }
}

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
   currentDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on [default]"
   otherDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on otherDomain"
}
  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于读取不以“file://”开头的 URI。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 类
AppDomain 成员
ExecuteAssembly 重载
System 命名空间


AppDomain ..::.ExecuteAssembly 方法 (String, array<String >[]()[], array<Byte >[]()[], AssemblyHashAlgorithm)

AppDomain
.
.
::
.
ExecuteAssembly 方法 (String,
array<
String
>
[]
()
[]
,
array<
Byte
>
[]
()
[]
, AssemblyHashAlgorithm)
AppDomain 类

使用指定的参数、哈希值和哈希算法执行指定文件中包含的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ExecuteAssembly ( _
    assemblyFile As String, _
    args As String(), _
    hashValue As Byte(), _
    hashAlgorithm As AssemblyHashAlgorithm _
) As Integer
public int ExecuteAssembly(
    string assemblyFile,
    string[] args,
    byte[] hashValue,
    AssemblyHashAlgorithm hashAlgorithm
)
public:
int ExecuteAssembly(
    String^ assemblyFile,
    array<String^>^ args,
    array<unsigned char>^ hashValue,
    AssemblyHashAlgorithm hashAlgorithm
)
member ExecuteAssembly :
        assemblyFile:string *
        args:string[] *
        hashValue:byte[] *
        hashAlgorithm:AssemblyHashAlgorithm -> int

参数

assemblyFile
类型： System String
包含要执行程序集的文件的名称。
args
类型：
array<
System String
>
[]
()
[]

程序集的入口点的实参。
hashValue
类型：
array<
System Byte
>
[]
()
[]

表示计算所得的哈希代码的值。
hashAlgorithm
类型： System.Configuration.Assemblies AssemblyHashAlgorithm
表示程序集清单使用的哈希算法。

返回值

类型： System Int32
程序集的入口点返回的值。
异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyFile 未找到。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - assemblyFile 使用比当前加载的版本更高的公共语言运行时版本编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。 此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。

下面的示例演示如何对两个不同的域使用 ExecuteAssembly 的重载之一。

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

      currentDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on otherDomain"
   End Sub 'Main

End Module 'Test

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

      currentDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on otherDomain"
   }
}

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
   currentDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on [default]"
   otherDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on otherDomain"
}
  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于读取不以“file://”开头的 URI。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
ExecuteAssembly 重载
System 命名空间


AppDomain ..::.ExecuteAssembly 方法 (String, Evidence, array<String >[]()[], array<Byte >[]()[], AssemblyHashAlgorithm)

AppDomain
.
.
::
.
ExecuteAssembly 方法 (String, Evidence,
array<
String
>
[]
()
[]
,
array<
Byte
>
[]
()
[]
, AssemblyHashAlgorithm)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ExecuteAssembly(String, String , Byte , AssemblyHashAlgorithm)。

使用指定的证据、参数、哈希值和哈希算法执行指定文件中包含的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function ExecuteAssembly ( _
    assemblyFile As String, _
    assemblySecurity As Evidence, _
    args As String(), _
    hashValue As Byte(), _
    hashAlgorithm As AssemblyHashAlgorithm _
) As Integer
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public int ExecuteAssembly(
    string assemblyFile,
    Evidence assemblySecurity,
    string[] args,
    byte[] hashValue,
    AssemblyHashAlgorithm hashAlgorithm
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
int ExecuteAssembly(
    String^ assemblyFile,
    Evidence^ assemblySecurity,
    array<String^>^ args,
    array<unsigned char>^ hashValue,
    AssemblyHashAlgorithm hashAlgorithm
)
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
member ExecuteAssembly :
        assemblyFile:string *
        assemblySecurity:Evidence *
        args:string[] *
        hashValue:byte[] *
        hashAlgorithm:AssemblyHashAlgorithm -> int

参数

assemblyFile
类型： System String
包含要执行程序集的文件的名称。
assemblySecurity
类型： System.Security.Policy Evidence
为程序集提供的证据。
args
类型：
array<
System String
>
[]
()
[]

程序集的入口点的实参。
hashValue
类型：
array<
System Byte
>
[]
()
[]

表示计算所得的哈希代码的值。
hashAlgorithm
类型： System.Configuration.Assemblies AssemblyHashAlgorithm
表示程序集清单使用的哈希算法。

返回值

类型： System Int32
程序集的入口点返回的值。
异常 | 条件
ArgumentNullException | assemblyFile 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyFile 未找到。
BadImageFormatException | assemblyFile 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，assemblyFile 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
NotSupportedException | assemblySecurity 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，assemblySecurity 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 assemblySecurity 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，assemblySecurity 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。 此方法使用 LoadFile 方法加载程序集。还可以使用 ExecuteAssemblyByName 方法执行程序集，该方法使用 Load 方法加载程序集。

下面的示例演示如何对两个不同的域使用 ExecuteAssembly 的重载之一。

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")

      currentDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe")
      ' Prints "MyExecutable running on otherDomain"
   End Sub 'Main

End Module 'Test

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

      currentDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on [default]"

      otherDomain.ExecuteAssembly("MyExecutable.exe");
      // Prints "MyExecutable running on otherDomain"
   }
}

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
   currentDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on [default]"
   otherDomain->ExecuteAssembly( "MyExecutable.exe" );

   // Prints S"MyExecutable running on otherDomain"
}
  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于读取不以“file://”开头的 URI。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
ExecuteAssembly 重载
System 命名空间


AppDomain ..::.ExecuteAssemblyByName 方法

AppDomain
.
.
::
.
ExecuteAssemblyByName 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

执行程序集。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ExecuteAssemblyByName 方法 (String)

AppDomain
.
.
::
.
ExecuteAssemblyByName 方法 (String)
AppDomain 类

在给定其显示名称的情况下执行程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ExecuteAssemblyByName ( _
    assemblyName As String _
) As Integer
public int ExecuteAssemblyByName(
    string assemblyName
)
public:
int ExecuteAssemblyByName(
    String^ assemblyName
)
member ExecuteAssemblyByName :
        assemblyName:string -> int

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。

返回值

类型： System Int32
程序集的入口点返回的值。
异常 | 条件
ArgumentNullException | assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | 未找到由 assemblyName 指定的程序集。
BadImageFormatException | assemblyName 指定的程序集不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 找到了 assemblyName 指定的程序集，但未能加载。

ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。 ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

若要创建要加载和执行的 AppDomain，请使用 CreateDomain 方法。

  • FileIOPermission

    用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于将显示名称重定向至 URL 后访问网站。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
ExecuteAssemblyByName 重载
System 命名空间
AssemblyName
Load


AppDomain ..::.ExecuteAssemblyByName 方法 (AssemblyName, array<String >[]()[])

AppDomain
.
.
::
.
ExecuteAssemblyByName 方法 (AssemblyName,
array<
String
>
[]
()
[]
)
AppDomain 类

根据给定的 AssemblyName 使用指定的参数执行程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ExecuteAssemblyByName ( _
    assemblyName As AssemblyName, _
    ParamArray args As String() _
) As Integer
public int ExecuteAssemblyByName(
    AssemblyName assemblyName,
    params string[] args
)
public:
int ExecuteAssemblyByName(
    AssemblyName^ assemblyName,
    ... array<String^>^ args
)
member ExecuteAssemblyByName :
        assemblyName:AssemblyName *
        args:string[] -> int

参数

assemblyName
类型： System.Reflection AssemblyName
AssemblyName 对象，表示程序集名称。
args
类型：
array<
System String
>
[]
()
[]

启动该进程时传递的命令行实参。

返回值

类型： System Int32
程序集的入口点返回的值。
异常 | 条件
FileNotFoundException | 未找到由 assemblyName 指定的程序集。
FileLoadException | 找到了 assemblyName 指定的程序集，但未能加载。
BadImageFormatException | assemblyName 指定的程序集不是有效程序集。 - 或 - assemblyName 使用比当前加载的版本更高的公共语言运行时版本编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。 ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

  • FileIOPermission

    用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于将显示名称重定向至 URL 后访问网站。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
ExecuteAssemblyByName 重载
System 命名空间


AppDomain ..::.ExecuteAssemblyByName 方法 (String, Evidence)

AppDomain
.
.
::
.
ExecuteAssemblyByName 方法 (String, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ExecuteAssemblyByName(String)。

在给定显示名称的情况下，使用指定证据执行程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function ExecuteAssemblyByName ( _
    assemblyName As String, _
    assemblySecurity As Evidence _
) As Integer
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public int ExecuteAssemblyByName(
    string assemblyName,
    Evidence assemblySecurity
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
int ExecuteAssemblyByName(
    String^ assemblyName,
    Evidence^ assemblySecurity
)
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
member ExecuteAssemblyByName :
        assemblyName:string *
        assemblySecurity:Evidence -> int

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
assemblySecurity
类型： System.Security.Policy Evidence
用于加载程序集的证据。

返回值

类型： System Int32
程序集的入口点返回的值。
异常 | 条件
ArgumentNullException | assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | 未找到由 assemblyName 指定的程序集。
FileLoadException | 找到了 assemblyName 指定的程序集，但未能加载。
BadImageFormatException | assemblyName 指定的程序集不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。 ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

ExecuteAssemblyByName 方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

说明 说明

当使用带有 Evidence 形参的 ExecuteAssemblyByName 方法时，将对各项证据进行合并。作为 ExecuteAssemblyByName 方法的实参提供的各项证据将替代由加载程序提供的各项证据。 当使用带有 Evidence 形参的 ExecuteAssemblyByName 方法时，将对各项证据进行合并。作为 ExecuteAssemblyByName 方法的实参提供的各项证据将替代由加载程序提供的各项证据。
  • FileIOPermission

    用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • WebPermission

    用于将显示名称重定向至 URL 后访问网站。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
ExecuteAssemblyByName 重载
System 命名空间
Evidence


AppDomain ..::.ExecuteAssemblyByName 方法 (String, array<String >[]()[])

AppDomain
.
.
::
.
ExecuteAssemblyByName 方法 (String,
array<
String
>
[]
()
[]
)
AppDomain 类

在给定显示名称的情况下，使用指定参数执行程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ExecuteAssemblyByName ( _
    assemblyName As String, _
    ParamArray args As String() _
) As Integer
public int ExecuteAssemblyByName(
    string assemblyName,
    params string[] args
)
public:
int ExecuteAssemblyByName(
    String^ assemblyName,
    ... array<String^>^ args
)
member ExecuteAssemblyByName :
        assemblyName:string *
        args:string[] -> int

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
args
类型：
array<
System String
>
[]
()
[]

启动该进程时传递的命令行实参。

返回值

类型： System Int32
程序集的入口点返回的值。
异常 | 条件
ArgumentNullException | assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | 未找到由 assemblyName 指定的程序集。
FileLoadException | 找到了 assemblyName 指定的程序集，但未能加载。
BadImageFormatException | assemblyName 指定的程序集不是有效程序集。 - 或 - assemblyName 使用比当前加载的版本更高的公共语言运行时版本编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。 ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

  • FileIOPermission

    用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于将显示名称重定向至 URL 后访问网站。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
ExecuteAssemblyByName 重载
System 命名空间


AppDomain ..::.ExecuteAssemblyByName 方法 (AssemblyName, Evidence, array<String >[]()[])

AppDomain
.
.
::
.
ExecuteAssemblyByName 方法 (AssemblyName, Evidence,
array<
String
>
[]
()
[]
)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ExecuteAssemblyByName(AssemblyName, String )。

根据给定的 AssemblyName 使用指定的证据和实参执行程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function ExecuteAssemblyByName ( _
    assemblyName As AssemblyName, _
    assemblySecurity As Evidence, _
    ParamArray args As String() _
) As Integer
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public int ExecuteAssemblyByName(
    AssemblyName assemblyName,
    Evidence assemblySecurity,
    params string[] args
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
int ExecuteAssemblyByName(
    AssemblyName^ assemblyName,
    Evidence^ assemblySecurity,
    ... array<String^>^ args
)
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
member ExecuteAssemblyByName :
        assemblyName:AssemblyName *
        assemblySecurity:Evidence *
        args:string[] -> int

参数

assemblyName
类型： System.Reflection AssemblyName
AssemblyName 对象，表示程序集名称。
assemblySecurity
类型： System.Security.Policy Evidence
用于加载程序集的证据。
args
类型：
array<
System String
>
[]
()
[]

启动该进程时传递的命令行实参。

返回值

类型： System Int32
程序集的入口点返回的值。
异常 | 条件
FileNotFoundException | 未找到由 assemblyName 指定的程序集。
FileLoadException | 找到了 assemblyName 指定的程序集，但未能加载。
BadImageFormatException | assemblyName 指定的程序集不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
NotSupportedException | assemblySecurity 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，assemblySecurity 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 assemblySecurity 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，assemblySecurity 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。 ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

说明 说明

当使用带有 Evidence 形参的 ExecuteAssemblyByName 方法时，将对各项证据进行合并。作为 ExecuteAssemblyByName 方法的实参提供的各项证据将替代由加载程序提供的各项证据。 当使用带有 Evidence 形参的 ExecuteAssemblyByName 方法时，将对各项证据进行合并。作为 ExecuteAssemblyByName 方法的实参提供的各项证据将替代由加载程序提供的各项证据。
  • FileIOPermission

    用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • WebPermission

    用于将显示名称重定向至 URL 后访问网站。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
ExecuteAssemblyByName 重载
System 命名空间
Evidence


AppDomain ..::.ExecuteAssemblyByName 方法 (String, Evidence, array<String >[]()[])

AppDomain
.
.
::
.
ExecuteAssemblyByName 方法 (String, Evidence,
array<
String
>
[]
()
[]
)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ExecuteAssemblyByName(String, String )。

在给定其显示名称的情况下，使用指定证据和实参执行程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function ExecuteAssemblyByName ( _
    assemblyName As String, _
    assemblySecurity As Evidence, _
    ParamArray args As String() _
) As Integer
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public int ExecuteAssemblyByName(
    string assemblyName,
    Evidence assemblySecurity,
    params string[] args
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
int ExecuteAssemblyByName(
    String^ assemblyName,
    Evidence^ assemblySecurity,
    ... array<String^>^ args
)
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
member ExecuteAssemblyByName :
        assemblyName:string *
        assemblySecurity:Evidence *
        args:string[] -> int

参数

assemblyName
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
assemblySecurity
类型： System.Security.Policy Evidence
用于加载程序集的证据。
args
类型：
array<
System String
>
[]
()
[]

启动该进程时传递的命令行实参。

返回值

类型： System Int32
程序集的入口点返回的值。
异常 | 条件
ArgumentNullException | assemblyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | 未找到由 assemblyName 指定的程序集。
FileLoadException | 找到了 assemblyName 指定的程序集，但未能加载。
BadImageFormatException | assemblyName 指定的程序集不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyName 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
NotSupportedException | assemblySecurity 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，assemblySecurity 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 assemblySecurity 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，assemblySecurity 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。 ExecuteAssemblyByName 方法提供类似于 ExecuteAssembly 方法的功能，但以显示名称或 AssemblyName 而不是文件位置指定程序集。因此，ExecuteAssemblyByName 使用 Load 方法而不是使用 LoadFile 方法加载程序集。

程序集从 .NET Framework 标头中指定的入口点处开始执行。

此方法不创建新的进程或应用程序域，并且不在新线程上执行入口点方法。

说明 说明

当使用带有 Evidence 形参的 ExecuteAssemblyByName 方法时，将对各项证据进行合并。作为 ExecuteAssemblyByName 方法的实参提供的各项证据将替代由加载程序提供的各项证据。 当使用带有 Evidence 形参的 ExecuteAssemblyByName 方法时，将对各项证据进行合并。作为 ExecuteAssemblyByName 方法的实参提供的各项证据将替代由加载程序提供的各项证据。
  • FileIOPermission

    用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，用于访问路径本身包含的信息，以及用于将显示名称重定向到某个路径。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • WebPermission

    用于将显示名称重定向至 URL 后访问网站。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
ExecuteAssemblyByName 重载
System 命名空间
Evidence


AppDomain ..::.GetAssemblies 方法

AppDomain
.
.
::
.
GetAssemblies 方法
AppDomain 类

获取已加载到此应用程序域的执行上下文中的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetAssemblies As Assembly()
public Assembly[] GetAssemblies()
public:
virtual array<Assembly^>^ GetAssemblies() sealed
abstract GetAssemblies : unit -> Assembly[]
override GetAssemblies : unit -> Assembly[]

返回值

类型：
array<
System.Reflection Assembly
>
[]
()
[]

此应用程序域中的程序集的数组。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

下面的代码示例使用 GetAssemblies 方法获取已加载到应用程序域的所有程序集的列表，然后在控制台上显示程序集。 下面的代码示例使用 GetAssemblies 方法获取已加载到应用程序域的所有程序集的列表，然后在控制台上显示程序集。

要运行此代码示例，需要创建名为 CustomLibrary.dll 的程序集，或者更改传递至 GetAssemblies 方法的程序集名称。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for Evidence object

Class ADGetAssemblies

   Public Shared Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      'Provide the current application domain evidence for the assembly.
      Dim asEvidence As Evidence = currentDomain.Evidence
      'Load the assembly from the application directory using a simple name.

      'Create an assembly called CustomLibrary to run this sample.
      currentDomain.Load("CustomLibrary", asEvidence)

      'Make an array for the list of assemblies.
      Dim assems As [Assembly]() = currentDomain.GetAssemblies()

      'List the assemblies in the current application domain.
      Console.WriteLine("List of assemblies loaded in current appdomain:")
      Dim assem As [Assembly]
      For Each assem In  assems
         Console.WriteLine(assem.ToString())
      Next assem
   End Sub 'Main
End Class 'ADGetAssemblies

using System;
using System.Reflection;
using System.Security.Policy;  //for Evidence object

class ADGetAssemblies
{

    public static void Main()
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;
        //Provide the current application domain evidence for the assembly.
        Evidence asEvidence = currentDomain.Evidence;
        //Load the assembly from the application directory using a simple name.

        //Create an assembly called CustomLibrary to run this sample.
        currentDomain.Load("CustomLibrary",asEvidence);

        //Make an array for the list of assemblies.
        Assembly[] assems = currentDomain.GetAssemblies();

        //List the assemblies in the current application domain.
        Console.WriteLine("List of assemblies loaded in current appdomain:");
            foreach (Assembly assem in assems)
                Console.WriteLine(assem.ToString());
    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for Evidence Object
int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;

   //Provide the current application domain evidence for the assembly.
   Evidence^ asEvidence = currentDomain->Evidence;

   //Load the assembly from the application directory using a simple name.
   //Create an assembly called CustomLibrary to run this sample.
   currentDomain->Load( "CustomLibrary", asEvidence );

   //Make an array for the list of assemblies.
   array<Assembly^>^assems = currentDomain->GetAssemblies();

   //List the assemblies in the current application domain.
   Console::WriteLine( "List of assemblies loaded in current appdomain:" );
   System::Collections::IEnumerator^ myEnum = assems->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Assembly^ assem = safe_cast<Assembly^>(myEnum->Current);
      Console::WriteLine( assem );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.GetCurrentThreadId 方法

AppDomain
.
.
::
.
GetCurrentThreadId 方法
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ManagedThreadId。

获取当前线程标识符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("AppDomain.GetCurrentThreadId has been deprecated because it does not provide a stable Id when managed threads are running on fibers (aka lightweight threads). To get a stable identifier for a managed thread, use the ManagedThreadId property on Thread.  http://go.microsoft.com/fwlink/?linkid=14202",  _
    False)> _
Public Shared Function GetCurrentThreadId As Integer
[ObsoleteAttribute("AppDomain.GetCurrentThreadId has been deprecated because it does not provide a stable Id when managed threads are running on fibers (aka lightweight threads). To get a stable identifier for a managed thread, use the ManagedThreadId property on Thread.  http://go.microsoft.com/fwlink/?linkid=14202",
    false)]
public static int GetCurrentThreadId()
[ObsoleteAttribute(L"AppDomain.GetCurrentThreadId has been deprecated because it does not provide a stable Id when managed threads are running on fibers (aka lightweight threads). To get a stable identifier for a managed thread, use the ManagedThreadId property on Thread.  http://go.microsoft.com/fwlink/?linkid=14202",
    false)]
public:
static int GetCurrentThreadId()
[<ObsoleteAttribute("AppDomain.GetCurrentThreadId has been deprecated because it does not provide a stable Id when managed threads are running on fibers (aka lightweight threads). To get a stable identifier for a managed thread, use the ManagedThreadId property on Thread.  http://go.microsoft.com/fwlink/?linkid=14202",
    false)>]
static member GetCurrentThreadId : unit -> int

返回值

类型： System Int32
一个 32 位带符号整数，它是当前线程的标识符。

使用 Thread..::.ManagedThreadId 属性，即使当 .NET Framework 由支持纤程（即轻型线程）的环境承载时，该属性也是稳定的。

  • SecurityPermission

    调用此方法。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode。安全操作：Demand。
调用此方法。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode。安全操作：Demand。
调用此方法。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode。安全操作：Demand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
System 命名空间
Int32
Thread ManagedThreadId


AppDomain ..::.GetData 方法

AppDomain
.
.
::
.
GetData 方法
AppDomain 类

为指定名称获取存储在当前应用程序域中的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetData ( _
    name As String _
) As Object
public Object GetData(
    string name
)
public:
virtual Object^ GetData(
    String^ name
) sealed
abstract GetData :
        name:string -> Object
override GetData :
        name:string -> Object

参数

name
类型： System String
预定义应用程序域属性的名称，或已定义的应用程序域属性的名称。

返回值

类型： System Object
name 属性的值。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

使用此方法可在内部缓存的名称数据对中检索项的值，这些名称数据对描述 AppDomain 此实例的属性。

该缓存自动包含在创建应用程序域时插入的预定义的系统项。您可使用 GetData 方法或等效的 AppDomainSetup 属性检查它们的值。 该缓存自动包含在创建应用程序域时插入的预定义的系统项。您可使用 GetData 方法或等效的 AppDomainSetup 属性检查它们的值。

您可使用 SetData 方法插入或修改用户定义的名称数据对，以及使用 GetData 方法检查它们的值。

下表介绍了每个预定义系统项的 name 及其相应的 AppDomainSetup 属性。

“name”的值 | Property
"APPBASE" | ApplicationBase
"LOADER_OPTIMIZATION" | LoaderOptimization
"APP_CONFIG_FILE" | ConfigurationFile
"DYNAMIC_BASE" | DynamicBase
"DEV_PATH" | （无属性）
"APP_NAME" | ApplicationName
"PRIVATE_BINPATH" | PrivateBinPath
"BINPATH_PROBE_ONLY" | PrivateBinPathProbe
"SHADOW_COPY_DIRS" | ShadowCopyDirectories
"FORCE_CACHE_INSTALL" | ShadowCopyFiles
"CACHE_BASE" | CachePath
（应用程序特定的） | LicenseFile
"APP_LAUNCH_URL" | （无属性）
说明 说明

“APP_LAUNCH_URL”表示进行任何重定向之前由用户最初请求的 URL。仅当用浏览器（如 Internet Explorer）启动应用程序时，它才可用。并非所有浏览器都提供此值。 “APP_LAUNCH_URL”表示进行任何重定向之前由用户最初请求的 URL。仅当用浏览器（如 Internet Explorer）启动应用程序时，它才可用。并非所有浏览器都提供此值。 “APP_LAUNCH_URL”表示进行任何重定向之前由用户最初请求的 URL。仅当用浏览器（如 Internet Explorer）启动应用程序时，它才可用。并非所有浏览器都提供此值。

下面的代码示例创建新的应用程序域、为该域设置系统提供的值，并为该域添加新的值对。然后，此示例演示如何使用 GetData 方法从这些值对检索数据，并将其显示在控制台中。 下面的代码示例创建新的应用程序域、为该域设置系统提供的值，并为该域添加新的值对。然后，此示例演示如何使用 GetData 方法从这些值对检索数据，并将其显示在控制台中。

Imports System
Imports System.Reflection

Class ADGetData

   Public Shared Sub Main()
      ' appdomain setup information
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      'Create a new value pair for the appdomain
      currentDomain.SetData("ADVALUE", "Example value")

      'get the value specified in the setdata method
      Console.WriteLine(("ADVALUE is: " & currentDomain.GetData("ADVALUE")))

      'get a system value specified at appdomainsetup
      Console.WriteLine("System value for loader optimization: {0}", _
         currentDomain.GetData("LOADER_OPTIMIZATION"))

   End Sub
End Class

' This code example produces the following output:
'
'ADVALUE is: Example value
'System value for loader optimization: NotSpecified

using System;
using System.Reflection;

class ADGetData
{
    public static void Main()
    {
        // appdomain setup information
        AppDomain currentDomain = AppDomain.CurrentDomain;

        //Create a new value pair for the appdomain
        currentDomain.SetData("ADVALUE", "Example value");

        //get the value specified in the setdata method
        Console.WriteLine("ADVALUE is: " + currentDomain.GetData("ADVALUE"));

        //get a system value specified at appdomainsetup
        Console.WriteLine("System value for loader optimization: {0}",
            currentDomain.GetData("LOADER_OPTIMIZATION"));
    }
}

/* This code example produces the following output:

ADVALUE is: Example value
System value for loader optimization: NotSpecified
 */

using namespace System;
using namespace System::Reflection;

int main()
{
   // appdomain setup information
   AppDomain^ currentDomain = AppDomain::CurrentDomain;

   //Create a new value pair for the appdomain
   currentDomain->SetData( "ADVALUE", "Example value" );

   //get the value specified in the setdata method
   Console::WriteLine( "ADVALUE is: {0}", currentDomain->GetData( "ADVALUE" ) );

   //get a system value specified at appdomainsetup
   Console::WriteLine( "System value for loader optimization: {0}",
      currentDomain->GetData( "LOADER_OPTIMIZATION" ) );
}

/* This code example produces the following output:

ADVALUE is: Example value
System value for loader optimization: NotSpecified
 */
  • FileIOPermission

    用于当属性适用于路径时访问路径本身包含的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery。 用于当属性适用于路径时访问路径本身包含的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
SetData


AppDomain ..::.GetType 方法

AppDomain
.
.
::
.
GetType 方法
AppDomain 类

获取当前实例的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetType As Type
public Type GetType()
public:
virtual Type^ GetType() sealed
abstract GetType : unit -> Type
override GetType : unit -> Type

返回值

类型： System Type
Type。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.InitializeLifetimeService 方法

AppDomain
.
.
::
.
InitializeLifetimeService 方法
AppDomain 类

通过防止创建租约来给予 AppDomain 无限生存期。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function InitializeLifetimeService As Object
public override Object InitializeLifetimeService()
public:
virtual Object^ InitializeLifetimeService() override
abstract InitializeLifetimeService : unit -> Object
override InitializeLifetimeService : unit -> Object

返回值

类型： System Object
总是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.IsCompatibilitySwitchSet 方法

AppDomain
.
.
::
.
IsCompatibilitySwitchSet 方法
AppDomain 类

获取可以为 null 的布尔值，该值指示是否设置了任何兼容性开关，如果已设置，则指定是否设置了指定的兼容性开关。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsCompatibilitySwitchSet ( _
    value As String _
) As Nullable(Of Boolean)
public Nullable<bool> IsCompatibilitySwitchSet(
    string value
)
public:
Nullable<bool> IsCompatibilitySwitchSet(
    String^ value
)
member IsCompatibilitySwitchSet :
        value:string -> Nullable<bool>

参数

value
类型： System String
要测试的兼容性开关。

返回值

类型： System Nullable
<
(Of
<
(
Boolean
>
)
>
)

如果未设置任何兼容性开关，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）；否则，为一个布尔值，该值指示是否设置了由 value 指定的兼容性开关。

此方法测试当前应用程序域是否反转 .NET Framework 4 版 中引入的重大更改。下表提供了可设置为还原 .NET Framework 早期版本行为的兼容性开关的示例。 此方法测试当前应用程序域是否反转 .NET Framework 4 版 中引入的重大更改。下表提供了可设置为还原 .NET Framework 早期版本行为的兼容性开关的示例。

Switch | 含义
“NetFx40_LegacySecurityPolicy” | 在该应用程序域中启用了 .NET Framework 3.5 的代码访问安全 (CAS)。请参见 <NetFx40_LegacySecurityPolicy> 元素。 在该应用程序域中启用了 .NET Framework 3.5 的代码访问安全 (CAS)。请参见 <NetFx40_LegacySecurityPolicy> 元素。
“NetFx40_Legacy20SortingBehavior” | 在此应用程序域中启用 .NET Framework 3.5 的字符串排序默认值。
"NetFx40_TimeSpanLegacyFormatMode" | 在此应用程序域中启用了 .NET Framework 3.5 的 TimeSpan 格式设置行为。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.IsDefaultAppDomain 方法

AppDomain
.
.
::
.
IsDefaultAppDomain 方法
AppDomain 类

返回一个值，指示应用程序域是否是进程的默认应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsDefaultAppDomain As Boolean
public bool IsDefaultAppDomain()
public:
bool IsDefaultAppDomain()
member IsDefaultAppDomain : unit -> bool

返回值

类型： System Boolean
如果当前 AppDomain 对象表示进程的默认应用程序域，则为 true；否则为 false。

每个托管进程都有一个默认应用程序域。执行过程在默认域中开始。 每个托管进程都有一个默认应用程序域。执行过程在默认域中开始。

下面的代码示例创建另一个应用程序域，并显示有关默认域和新域的信息。

Imports System
Imports System.Reflection

Public Class Example

    ' The following attribute indicates to the loader that assemblies
    ' in the global assembly cache should be shared across multiple
    ' application domains.
    <LoaderOptimizationAttribute(LoaderOptimization.MultiDomainHost)> _
    Public Shared Sub Main()
        ' Show information for the default application domain.
        ShowDomainInfo()

        ' Create a new application domain and display its information.
        Dim newDomain As AppDomain = AppDomain.CreateDomain("MyMultiDomain")
        newDomain.DoCallBack(AddressOf ShowDomainInfo)

    End Sub 'Main

    ' This method has the same signature as the CrossAppDomainDelegate,
    ' so that it can be executed easily in the new application domain.
    '
    Public Shared Sub ShowDomainInfo()
        Dim ad As AppDomain = AppDomain.CurrentDomain
        Console.WriteLine()
        Console.WriteLine("FriendlyName: {0}", ad.FriendlyName)
        Console.WriteLine("Id: {0}", ad.Id)
        Console.WriteLine("IsDefaultAppDomain: {0}", ad.IsDefaultAppDomain())

    End Sub
End Class

using System;
using System.Reflection;

public class Example
{
    // The following attribute indicates to the loader that assemblies
    // in the global assembly cache should be shared across multiple
    // application domains.
    [LoaderOptimizationAttribute( LoaderOptimization.MultiDomainHost)]
    public static void Main()
    {
        // Show information for the default application domain.
        ShowDomainInfo();

        // Create a new application domain and display its information.
        AppDomain newDomain = AppDomain.CreateDomain("MyMultiDomain");
        newDomain.DoCallBack(new CrossAppDomainDelegate(ShowDomainInfo));
    }

    // This method has the same signature as the CrossAppDomainDelegate,
    // so that it can be executed easily in the new application domain.
    //
    public static void ShowDomainInfo()
    {
        AppDomain ad = AppDomain.CurrentDomain;
        Console.WriteLine();
        Console.WriteLine("FriendlyName: {0}", ad.FriendlyName);
        Console.WriteLine("Id: {0}", ad.Id);
        Console.WriteLine("IsDefaultAppDomain: {0}", ad.IsDefaultAppDomain());
    }
}

using namespace System;
using namespace System::Reflection;

// This method has the same signature as the CrossAppDomainDelegate,
// so that it can be executed easily in the new application domain.
//
static void ShowDomainInfo()
{
    AppDomain^ ad = AppDomain::CurrentDomain;
    Console::WriteLine();
    Console::WriteLine( L"FriendlyName: {0}", ad->FriendlyName );
    Console::WriteLine( L"Id: {0}", ad->Id );
    Console::WriteLine( L"IsDefaultAppDomain: {0}", ad->IsDefaultAppDomain() );
}

// The following attribute indicates to the loader that assemblies
// in the global assembly cache should be shared across multiple
// application domains.
//
[LoaderOptimizationAttribute(LoaderOptimization::MultiDomainHost)]
int main()
{
    // Show information for the default application domain.
    ShowDomainInfo();

    // Create a new application domain and display its information.
    AppDomain^ newDomain = AppDomain::CreateDomain( L"MyMultiDomain" );
    newDomain->DoCallBack( gcnew CrossAppDomainDelegate( ShowDomainInfo ) );

    return 0;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.IsFinalizingForUnload 方法

AppDomain
.
.
::
.
IsFinalizingForUnload 方法
AppDomain 类

指示此应用程序域是否正在卸载以及公共语言运行时是否正在终止该域包含的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsFinalizingForUnload As Boolean
public bool IsFinalizingForUnload()
public:
bool IsFinalizingForUnload()
member IsFinalizingForUnload : unit -> bool

返回值

类型： System Boolean
如果此应用程序域正在卸载，并且公共语言运行时已开始调用终止程序，则为 true；否则为 false。

在将对象作为垃圾回收之前，对象的完成方法为您提供一个机会来执行任何必要的清理操作。完成后仍可访问对象，但对象处于无效状态，因而无法使用。最后，垃圾回收完成，对象被回收。 在将对象作为垃圾回收之前，对象的完成方法为您提供一个机会来执行任何必要的清理操作。完成后仍可访问对象，但对象处于无效状态，因而无法使用。最后，垃圾回收完成，对象被回收。 在将对象作为垃圾回收之前，对象的完成方法为您提供一个机会来执行任何必要的清理操作。完成后仍可访问对象，但对象处于无效状态，因而无法使用。最后，垃圾回收完成，对象被回收。

在下列情况之一时会调用对象的完成方法：在垃圾回收期间，在卸载包含对象的应用程序域时，或者在关闭公共语言运行时时。

在域卸载过程中执行终止方法时，您可能需要访问另一个由静态字段引用并且有终止方法的对象。但是，您无法可靠地进行此操作，因为访问的对象可能已经完成。 在域卸载过程中执行终止方法时，您可能需要访问另一个由静态字段引用并且有终止方法的对象。但是，您无法可靠地进行此操作，因为访问的对象可能已经完成。

说明 说明

此规则的例外是 Console 类，该类包含引用流对象的静态字段，不过该类实现方式比较特殊，以便您始终能够向系统控制台进行写入（即使在卸载域期间或系统关闭期间也能进行写入）。

在对象的终止方法中使用此方法可确定包含该对象的应用程序域是否正在卸载。如果是这种情况，则您将无法可靠地访问具有完成方法并且由静态字段引用的任何对象。 在对象的终止方法中使用此方法可确定包含该对象的应用程序域是否正在卸载。如果是这种情况，则您将无法可靠地访问具有完成方法并且由静态字段引用的任何对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
Environment HasShutdownStarted


AppDomain ..::.Load 方法

AppDomain
.
.
::
.
Load 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

将 Assembly 加载到此应用程序域中。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.Load 方法 (AssemblyName)

AppDomain
.
.
::
.
Load 方法 (AssemblyName)
AppDomain 类

在给定 AssemblyName 的情况下加载 Assembly。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Load ( _
    assemblyRef As AssemblyName _
) As Assembly
public Assembly Load(
    AssemblyName assemblyRef
)
public:
virtual Assembly^ Load(
    AssemblyName^ assemblyRef
) sealed
abstract Load :
        assemblyRef:AssemblyName -> Assembly
override Load :
        assemblyRef:AssemblyName -> Assembly

参数

assemblyRef
类型： System.Reflection AssemblyName
描述要加载的程序集的对象。

返回值

类型： System.Reflection Assembly
加载的程序集。

实现

异常 | 条件
ArgumentNullException | assemblyRef 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyRef 未找到。
BadImageFormatException | assemblyRef 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyRef 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

此方法只应用于将程序集加载到当前应用程序域中。此方法是为那些不能调用静态 Load 方法的互操作调用方定义的。 此方法只应用于将程序集加载到当前应用程序域中。此方法是为那些不能调用静态 Load 方法的互操作调用方定义的。

如果已加载所请求程序集的某个版本，则即使请求其他版本，此方法仍返回已加载的程序集。

不建议为 assemblyRef 提供部分程序集名称。（部分名称省略一个或多个区域性、版本或公钥标记。对于采用字符串而不是 AssemblyName 对象的重载，“MyAssembly, Version=1.0.0.0”是部分名称的一个示例，“MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47”是全名的一个示例。）使用部分名称对性能有负面影响。此外，仅当应用程序基目录（BaseDirectory 或 AppDomainSetup..::.ApplicationBase）中有某个程序集的精确副本时，部分程序集名称才可以从全局程序集缓存加载该程序集。 不建议为 assemblyRef 提供部分程序集名称。（部分名称省略一个或多个区域性、版本或公钥标记。对于采用字符串而不是 AssemblyName 对象的重载，“MyAssembly, Version=1.0.0.0”是部分名称的一个示例，“MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47”是全名的一个示例。）使用部分名称对性能有负面影响。此外，仅当应用程序基目录（BaseDirectory 或 AppDomainSetup..::.ApplicationBase）中有某个程序集的精确副本时，部分程序集名称才可以从全局程序集缓存加载该程序集。 不建议为 assemblyRef 提供部分程序集名称。（部分名称省略一个或多个区域性、版本或公钥标记。对于采用字符串而不是 AssemblyName 对象的重载，“MyAssembly, Version=1.0.0.0”是部分名称的一个示例，“MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47”是全名的一个示例。）使用部分名称对性能有负面影响。此外，仅当应用程序基目录（BaseDirectory 或 AppDomainSetup..::.ApplicationBase）中有某个程序集的精确副本时，部分程序集名称才可以从全局程序集缓存加载该程序集。 不建议为 assemblyRef 提供部分程序集名称。（部分名称省略一个或多个区域性、版本或公钥标记。对于采用字符串而不是 AssemblyName 对象的重载，“MyAssembly, Version=1.0.0.0”是部分名称的一个示例，“MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47”是全名的一个示例。）使用部分名称对性能有负面影响。此外，仅当应用程序基目录（BaseDirectory 或 AppDomainSetup..::.ApplicationBase）中有某个程序集的精确副本时，部分程序集名称才可以从全局程序集缓存加载该程序集。

如果当前 AppDomain 对象表示应用程序域 A，并且从应用程序域 B 调用 Load 方法，则该程序集同时加载到这两个应用程序域中。例如，下面的代码将 MyAssembly 加载到新的应用程序域 ChildDomain 中，同时也加载到执行代码的应用程序域中： 如果当前 AppDomain 对象表示应用程序域 A，并且从应用程序域 B 调用 Load 方法，则该程序集同时加载到这两个应用程序域中。例如，下面的代码将 MyAssembly 加载到新的应用程序域 ChildDomain 中，同时也加载到执行代码的应用程序域中：

        Dim ad As AppDomain  = AppDomain.CreateDomain("ChildDomain")
        ad.Load("MyAssembly")

        AppDomain ad = AppDomain.CreateDomain("ChildDomain");
        ad.Load("MyAssembly");

AppDomain^ ad = AppDomain::CreateDomain("ChildDomain");
ad->Load("MyAssembly");

程序集同时加载到这两个域中，因为 Assembly 不是从 MarshalByRefObject 派生的，因此无法封送 Load 方法的返回值。而公共语言运行时则尝试将程序集加载到调用应用程序域中。如果这两个应用程序域的路径设置不同，则加载到它们中的程序集可能会不同。 程序集同时加载到这两个域中，因为 Assembly 不是从 MarshalByRefObject 派生的，因此无法封送 Load 方法的返回值。而公共语言运行时则尝试将程序集加载到调用应用程序域中。如果这两个应用程序域的路径设置不同，则加载到它们中的程序集可能会不同。 程序集同时加载到这两个域中，因为 Assembly 不是从 MarshalByRefObject 派生的，因此无法封送 Load 方法的返回值。而公共语言运行时则尝试将程序集加载到调用应用程序域中。如果这两个应用程序域的路径设置不同，则加载到它们中的程序集可能会不同。

说明 说明

如果同时设置了 AssemblyName..::.Name 属性和 AssemblyName..::.CodeBase 属性，加载程序集的第一次尝试将使用显示名称（包括版本、区域性等，由 Assembly..::.FullName 属性返回）。如果找不到该文件，则使用 CodeBase 属性搜索程序集。如果使用 CodeBase 找到了程序集，则将显示名称与程序集匹配。如果匹配失败，则引发 FileLoadException。 如果同时设置了 AssemblyName..::.Name 属性和 AssemblyName..::.CodeBase 属性，加载程序集的第一次尝试将使用显示名称（包括版本、区域性等，由 Assembly..::.FullName 属性返回）。如果找不到该文件，则使用 CodeBase 属性搜索程序集。如果使用 CodeBase 找到了程序集，则将显示名称与程序集匹配。如果匹配失败，则引发 FileLoadException。 如果同时设置了 AssemblyName..::.Name 属性和 AssemblyName..::.CodeBase 属性，加载程序集的第一次尝试将使用显示名称（包括版本、区域性等，由 Assembly..::.FullName 属性返回）。如果找不到该文件，则使用 CodeBase 属性搜索程序集。如果使用 CodeBase 找到了程序集，则将显示名称与程序集匹配。如果匹配失败，则引发 FileLoadException。 如果同时设置了 AssemblyName..::.Name 属性和 AssemblyName..::.CodeBase 属性，加载程序集的第一次尝试将使用显示名称（包括版本、区域性等，由 Assembly..::.FullName 属性返回）。如果找不到该文件，则使用 CodeBase 属性搜索程序集。如果使用 CodeBase 找到了程序集，则将显示名称与程序集匹配。如果匹配失败，则引发 FileLoadException。
  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
Load 重载
System 命名空间


AppDomain ..::.Load 方法 ( array<Byte >[]()[])

AppDomain
.
.
::
.
Load 方法 (
array<
Byte
>
[]
()
[]
)
AppDomain 类

加载带有基于通用对象文件格式 (COFF) 的图像的 Assembly，该图像包含已发出的 Assembly。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Load ( _
    rawAssembly As Byte() _
) As Assembly
public Assembly Load(
    byte[] rawAssembly
)
public:
virtual Assembly^ Load(
    array<unsigned char>^ rawAssembly
) sealed
abstract Load :
        rawAssembly:byte[] -> Assembly
override Load :
        rawAssembly:byte[] -> Assembly

参数

rawAssembly
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它是包含已发出程序集的基于 COFF 的图像。

返回值

类型： System.Reflection Assembly
加载的程序集。

实现

异常 | 条件
ArgumentNullException | rawAssembly 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
BadImageFormatException | rawAssembly 不是有效程序集。 - 或 - 当前正在加载公共语言运行时的 2.0 版或更高版本，rawAssembly 是使用更高版本进行编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

从 .NET Framework 4 版 开始，使用此方法加载的程序集的信任级别与应用程序域的信任级别相同。

有关更多信息，请参见 Load(AssemblyName) 方法重载。

下面的示例演示加载原始程序集的用途。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyType(currentDomain)      ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver

      InstantiateMyType(currentDomain)      ' OK!
   End Sub 'Main

   Sub InstantiateMyType(domain As AppDomain)
      Try
     ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyType

   ' Loads the content of a file to a byte array.
   Function loadFile(filename As String) As Byte()
      Dim fs As New FileStream(filename, FileMode.Open)
      Dim buffer(CInt(fs.Length)) As Byte
      fs.Read(buffer, 0, buffer.Length)
      fs.Close()

      Return buffer
   End Function 'loadFile

   Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Dim domain As AppDomain = DirectCast(sender, AppDomain)

      ' Once the files are generated, this call is
      ' actually no longer necessary.
      EmitAssembly(domain)

      Dim rawAssembly As Byte() = loadFile("temp.dll")
      Dim rawSymbolStore As Byte() = loadFile("temp.pdb")
      Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore)

      Return myAssembly
   End Function 'MyResolver

   ' Creates a dynamic assembly with symbol information
   ' and saves them to temp.dll and temp.pdb
   Sub EmitAssembly(domain As AppDomain)
      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True)
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)

      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      ilGenerator.EmitWriteLine("MyType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      assemblyBuilder.Save("temp.dll")
   End Sub 'EmitAssembly

End Module 'Test

using System;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolver);

      InstantiateMyType(currentDomain);   // OK!
   }

   static void InstantiateMyType(AppDomain domain) {
      try {
     // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   // Loads the content of a file to a byte array.
   static byte[] loadFile(string filename) {
      FileStream fs = new FileStream(filename, FileMode.Open);
      byte[] buffer = new byte[(int) fs.Length];
      fs.Read(buffer, 0, buffer.Length);
      fs.Close();

      return buffer;
   }

   static Assembly MyResolver(object sender, ResolveEventArgs args) {
      AppDomain domain = (AppDomain) sender;

      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly(domain);

      byte[] rawAssembly = loadFile("temp.dll");
      byte[] rawSymbolStore = loadFile("temp.pdb");
      Assembly assembly = domain.Load(rawAssembly, rawSymbolStore);

      return assembly;
   }

   // Creates a dynamic assembly with symbol information
   // and saves them to temp.dll and temp.pdb
   static void EmitAssembly(AppDomain domain) {
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true);
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public);

      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      ilGenerator.EmitWriteLine("MyType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      assemblyBuilder.Save("temp.dll");
   }
}

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
void InstantiateMyType( AppDomain^ domain )
{
   try
   {

      // You must supply a valid fully qualified assembly name here.
      domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyType" );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

// Loads the content of a file to a Byte array.
array<Byte>^ loadFile( String^ filename )
{
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   array<Byte>^buffer = gcnew array<Byte>((int)fs->Length);
   fs->Read( buffer, 0, buffer->Length );
   fs->Close();
   return buffer;
}

// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
void EmitAssembly( AppDomain^ domain )
{
   AssemblyName^ assemblyName = gcnew AssemblyName;
   assemblyName->Name = "MyAssembly";
   AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Save );
   ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyModule", "temp.dll", true );
   TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyType", TypeAttributes::Public );
   ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
   ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
   ilGenerator->EmitWriteLine( "MyType instantiated!" );
   ilGenerator->Emit( OpCodes::Ret );
   typeBuilder->CreateType();
   assemblyBuilder->Save( "temp.dll" );
}

ref class Resolver
{
public:
   static Assembly^ MyResolver( Object^ sender, ResolveEventArgs^ args )
   {
      AppDomain^ domain = dynamic_cast<AppDomain^>(sender);

      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly( domain );
      array<Byte>^rawAssembly = loadFile( "temp.dll" );
      array<Byte>^rawSymbolStore = loadFile( "temp.pdb" );
      Assembly^ assembly = domain->Load( rawAssembly, rawSymbolStore );
      return assembly;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Resolver::MyResolver );
   InstantiateMyType( currentDomain ); // OK!
}
  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
Load 重载
System 命名空间


AppDomain ..::.Load 方法 (String)

AppDomain
.
.
::
.
Load 方法 (String)
AppDomain 类

在给定其显示名称的情况下加载 Assembly。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Load ( _
    assemblyString As String _
) As Assembly
public Assembly Load(
    string assemblyString
)
public:
virtual Assembly^ Load(
    String^ assemblyString
) sealed
abstract Load :
        assemblyString:string -> Assembly
override Load :
        assemblyString:string -> Assembly

参数

assemblyString
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。

返回值

类型： System.Reflection Assembly
加载的程序集。

实现

异常 | 条件
ArgumentNullException | assemblyString 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyString 未找到。
BadImageFormatException | assemblyString 不是有效程序集。 - 或 - 当前正在加载公共语言运行时的 2.0 版或更高版本，assemblyString 是使用更高版本进行编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

有关更多信息，请参见 Load(AssemblyName) 方法重载。

  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    表示程序集不在本地情况下访问程序集的位置的能力。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
Load 重载
System 命名空间


AppDomain ..::.Load 方法 (AssemblyName, Evidence)

AppDomain
.
.
::
.
Load 方法 (AssemblyName, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 Load(AssemblyName)。

在给定 AssemblyName 的情况下加载 Assembly。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function Load ( _
    assemblyRef As AssemblyName, _
    assemblySecurity As Evidence _
) As Assembly
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public Assembly Load(
    AssemblyName assemblyRef,
    Evidence assemblySecurity
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual Assembly^ Load(
    AssemblyName^ assemblyRef,
    Evidence^ assemblySecurity
) sealed
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract Load :
        assemblyRef:AssemblyName *
        assemblySecurity:Evidence -> Assembly
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override Load :
        assemblyRef:AssemblyName *
        assemblySecurity:Evidence -> Assembly

参数

assemblyRef
类型： System.Reflection AssemblyName
描述要加载的程序集的对象。
assemblySecurity
类型： System.Security.Policy Evidence
用于加载程序集的证据。

返回值

类型： System.Reflection Assembly
加载的程序集。

实现

异常 | 条件
ArgumentNullException | assemblyRef 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyRef 未找到。
BadImageFormatException | assemblyRef 不是有效程序集。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而 assemblyRef 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

有关更多信息，请参见 Load(AssemblyName) 方法重载。

  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • WebPermission

    用于读取格式不为“file://”、“\\UNC\dir\”或“c:\”的路径。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
Load 重载
System 命名空间


AppDomain ..::.Load 方法 ( array<Byte >[]()[], array<Byte >[]()[])

AppDomain
.
.
::
.
Load 方法 (
array<
Byte
>
[]
()
[]
,
array<
Byte
>
[]
()
[]
)
AppDomain 类

加载带有基于通用对象文件格式 (COFF) 的图像的 Assembly，该图像包含已发出的 Assembly。还加载表示 Assembly 的符号的原始字节。 加载带有基于通用对象文件格式 (COFF) 的图像的 Assembly，该图像包含已发出的 Assembly。还加载表示 Assembly 的符号的原始字节。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Load ( _
    rawAssembly As Byte(), _
    rawSymbolStore As Byte() _
) As Assembly
public Assembly Load(
    byte[] rawAssembly,
    byte[] rawSymbolStore
)
public:
virtual Assembly^ Load(
    array<unsigned char>^ rawAssembly,
    array<unsigned char>^ rawSymbolStore
) sealed
abstract Load :
        rawAssembly:byte[] *
        rawSymbolStore:byte[] -> Assembly
override Load :
        rawAssembly:byte[] *
        rawSymbolStore:byte[] -> Assembly

参数

rawAssembly
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它是包含已发出程序集的基于 COFF 的图像。
rawSymbolStore
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它包含表示程序集符号的原始字节。

返回值

类型： System.Reflection Assembly
加载的程序集。

实现

异常 | 条件
ArgumentNullException | rawAssembly 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
BadImageFormatException | rawAssembly 不是有效程序集。 - 或 - 当前正在加载公共语言运行时的 2.0 版或更高版本，rawAssembly 是使用更高版本进行编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

从 .NET Framework 4 版 开始，使用此方法加载的程序集的信任级别与应用程序域的信任级别相同。

有关更多信息，请参见 Load(AssemblyName) 方法重载。

下面的示例演示加载原始程序集的用途。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyType(currentDomain)      ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver

      InstantiateMyType(currentDomain)      ' OK!
   End Sub 'Main

   Sub InstantiateMyType(domain As AppDomain)
      Try
     ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyType

   ' Loads the content of a file to a byte array.
   Function loadFile(filename As String) As Byte()
      Dim fs As New FileStream(filename, FileMode.Open)
      Dim buffer(CInt(fs.Length)) As Byte
      fs.Read(buffer, 0, buffer.Length)
      fs.Close()

      Return buffer
   End Function 'loadFile

   Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Dim domain As AppDomain = DirectCast(sender, AppDomain)

      ' Once the files are generated, this call is
      ' actually no longer necessary.
      EmitAssembly(domain)

      Dim rawAssembly As Byte() = loadFile("temp.dll")
      Dim rawSymbolStore As Byte() = loadFile("temp.pdb")
      Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore)

      Return myAssembly
   End Function 'MyResolver

   ' Creates a dynamic assembly with symbol information
   ' and saves them to temp.dll and temp.pdb
   Sub EmitAssembly(domain As AppDomain)
      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True)
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)

      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      ilGenerator.EmitWriteLine("MyType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      assemblyBuilder.Save("temp.dll")
   End Sub 'EmitAssembly

End Module 'Test

using System;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolver);

      InstantiateMyType(currentDomain);   // OK!
   }

   static void InstantiateMyType(AppDomain domain) {
      try {
     // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   // Loads the content of a file to a byte array.
   static byte[] loadFile(string filename) {
      FileStream fs = new FileStream(filename, FileMode.Open);
      byte[] buffer = new byte[(int) fs.Length];
      fs.Read(buffer, 0, buffer.Length);
      fs.Close();

      return buffer;
   }

   static Assembly MyResolver(object sender, ResolveEventArgs args) {
      AppDomain domain = (AppDomain) sender;

      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly(domain);

      byte[] rawAssembly = loadFile("temp.dll");
      byte[] rawSymbolStore = loadFile("temp.pdb");
      Assembly assembly = domain.Load(rawAssembly, rawSymbolStore);

      return assembly;
   }

   // Creates a dynamic assembly with symbol information
   // and saves them to temp.dll and temp.pdb
   static void EmitAssembly(AppDomain domain) {
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true);
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public);

      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      ilGenerator.EmitWriteLine("MyType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      assemblyBuilder.Save("temp.dll");
   }
}

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
void InstantiateMyType( AppDomain^ domain )
{
   try
   {

      // You must supply a valid fully qualified assembly name here.
      domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyType" );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

// Loads the content of a file to a Byte array.
array<Byte>^ loadFile( String^ filename )
{
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   array<Byte>^buffer = gcnew array<Byte>((int)fs->Length);
   fs->Read( buffer, 0, buffer->Length );
   fs->Close();
   return buffer;
}

// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
void EmitAssembly( AppDomain^ domain )
{
   AssemblyName^ assemblyName = gcnew AssemblyName;
   assemblyName->Name = "MyAssembly";
   AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Save );
   ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyModule", "temp.dll", true );
   TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyType", TypeAttributes::Public );
   ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
   ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
   ilGenerator->EmitWriteLine( "MyType instantiated!" );
   ilGenerator->Emit( OpCodes::Ret );
   typeBuilder->CreateType();
   assemblyBuilder->Save( "temp.dll" );
}

ref class Resolver
{
public:
   static Assembly^ MyResolver( Object^ sender, ResolveEventArgs^ args )
   {
      AppDomain^ domain = dynamic_cast<AppDomain^>(sender);

      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly( domain );
      array<Byte>^rawAssembly = loadFile( "temp.dll" );
      array<Byte>^rawSymbolStore = loadFile( "temp.pdb" );
      Assembly^ assembly = domain->Load( rawAssembly, rawSymbolStore );
      return assembly;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Resolver::MyResolver );
   InstantiateMyType( currentDomain ); // OK!
}
  • WebPermission

    用于读取不以“file://”开头的 URI。

  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
Load 重载
System 命名空间


AppDomain ..::.Load 方法 (String, Evidence)

AppDomain
.
.
::
.
Load 方法 (String, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 Load(String)。

在给定其显示名称的情况下加载 Assembly。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Function Load ( _
    assemblyString As String, _
    assemblySecurity As Evidence _
) As Assembly
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public Assembly Load(
    string assemblyString,
    Evidence assemblySecurity
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual Assembly^ Load(
    String^ assemblyString,
    Evidence^ assemblySecurity
) sealed
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract Load :
        assemblyString:string *
        assemblySecurity:Evidence -> Assembly
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override Load :
        assemblyString:string *
        assemblySecurity:Evidence -> Assembly

参数

assemblyString
类型： System String
程序集的显示名称。请参见 Assembly..::.FullName。 程序集的显示名称。请参见 Assembly..::.FullName。
assemblySecurity
类型： System.Security.Policy Evidence
用于加载程序集的证据。

返回值

类型： System.Reflection Assembly
加载的程序集。

实现

异常 | 条件
ArgumentNullException | assemblyString 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FileNotFoundException | assemblyString 未找到。
BadImageFormatException | assemblyString 不是有效程序集。 - 或 - 当前正在加载公共语言运行时的 2.0 版或更高版本，assemblyString 是使用更高版本进行编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。

有关更多信息，请参见 Load(AssemblyName) 方法重载。

  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。 以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。

  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于读取格式不为“file://”、“\\UNC\dir\”或“c:\”的路径。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
Load 重载
System 命名空间


AppDomain ..::.Load 方法 ( array<Byte >[]()[], array<Byte >[]()[], Evidence)

AppDomain
.
.
::
.
Load 方法 (
array<
Byte
>
[]
()
[]
,
array<
Byte
>
[]
()
[]
, Evidence)
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 Load( Byte , Byte )。

加载带有基于通用对象文件格式 (COFF) 的图像的 Assembly，该图像包含已发出的 Assembly。还加载表示 Assembly 的符号的原始字节。 加载带有基于通用对象文件格式 (COFF) 的图像的 Assembly，该图像包含已发出的 Assembly。还加载表示 Assembly 的符号的原始字节。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")> _
<SecurityPermissionAttribute(SecurityAction.Demand, ControlEvidence := True)> _
Public Function Load ( _
    rawAssembly As Byte(), _
    rawSymbolStore As Byte(), _
    securityEvidence As Evidence _
) As Assembly
[ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
[SecurityPermissionAttribute(SecurityAction.Demand, ControlEvidence = true)]
public Assembly Load(
    byte[] rawAssembly,
    byte[] rawSymbolStore,
    Evidence securityEvidence
)
[ObsoleteAttribute(L"Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
[SecurityPermissionAttribute(SecurityAction::Demand, ControlEvidence = true)]
public:
virtual Assembly^ Load(
    array<unsigned char>^ rawAssembly,
    array<unsigned char>^ rawSymbolStore,
    Evidence^ securityEvidence
) sealed
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")>]
[<SecurityPermissionAttribute(SecurityAction.Demand, ControlEvidence = true)>]
abstract Load :
        rawAssembly:byte[] *
        rawSymbolStore:byte[] *
        securityEvidence:Evidence -> Assembly
[<ObsoleteAttribute("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")>]
[<SecurityPermissionAttribute(SecurityAction.Demand, ControlEvidence = true)>]
override Load :
        rawAssembly:byte[] *
        rawSymbolStore:byte[] *
        securityEvidence:Evidence -> Assembly

参数

rawAssembly
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它是包含已发出程序集的基于 COFF 的图像。
rawSymbolStore
类型：
array<
System Byte
>
[]
()
[]

byte 类型的数组，它包含表示程序集符号的原始字节。
securityEvidence
类型： System.Security.Policy Evidence
用于加载程序集的证据。

返回值

类型： System.Reflection Assembly
加载的程序集。

实现

异常 | 条件
ArgumentNullException | rawAssembly 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
BadImageFormatException | rawAssembly 不是有效程序集。 - 或 - 当前正在加载公共语言运行时的 2.0 版或更高版本，rawAssembly 是使用更高版本进行编译的。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。
FileLoadException | 用两个不同的证据将一个程序集或模块加载了两次。
NotSupportedException | securityEvidence 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，securityEvidence 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 securityEvidence 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。未启用旧版 CAS 策略时，securityEvidence 应该为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

从 .NET Framework 4 版 开始，使用此方法加载的程序集的信任级别与应用程序域的信任级别相同。

有关更多信息，请参见 Load(AssemblyName) 方法重载。

下面的示例演示加载原始程序集的用途。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Imports System
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyType(currentDomain)      ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver

      InstantiateMyType(currentDomain)      ' OK!
   End Sub 'Main

   Sub InstantiateMyType(domain As AppDomain)
      Try
     ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyType

   ' Loads the content of a file to a byte array.
   Function loadFile(filename As String) As Byte()
      Dim fs As New FileStream(filename, FileMode.Open)
      Dim buffer(CInt(fs.Length)) As Byte
      fs.Read(buffer, 0, buffer.Length)
      fs.Close()

      Return buffer
   End Function 'loadFile

   Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Dim domain As AppDomain = DirectCast(sender, AppDomain)

      ' Once the files are generated, this call is
      ' actually no longer necessary.
      EmitAssembly(domain)

      Dim rawAssembly As Byte() = loadFile("temp.dll")
      Dim rawSymbolStore As Byte() = loadFile("temp.pdb")
      Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore)

      Return myAssembly
   End Function 'MyResolver

   ' Creates a dynamic assembly with symbol information
   ' and saves them to temp.dll and temp.pdb
   Sub EmitAssembly(domain As AppDomain)
      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyAssembly"

      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True)
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)

      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      ilGenerator.EmitWriteLine("MyType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)

      typeBuilder.CreateType()

      assemblyBuilder.Save("temp.dll")
   End Sub 'EmitAssembly

End Module 'Test

using System;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolver);

      InstantiateMyType(currentDomain);   // OK!
   }

   static void InstantiateMyType(AppDomain domain) {
      try {
     // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   // Loads the content of a file to a byte array.
   static byte[] loadFile(string filename) {
      FileStream fs = new FileStream(filename, FileMode.Open);
      byte[] buffer = new byte[(int) fs.Length];
      fs.Read(buffer, 0, buffer.Length);
      fs.Close();

      return buffer;
   }

   static Assembly MyResolver(object sender, ResolveEventArgs args) {
      AppDomain domain = (AppDomain) sender;

      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly(domain);

      byte[] rawAssembly = loadFile("temp.dll");
      byte[] rawSymbolStore = loadFile("temp.pdb");
      Assembly assembly = domain.Load(rawAssembly, rawSymbolStore);

      return assembly;
   }

   // Creates a dynamic assembly with symbol information
   // and saves them to temp.dll and temp.pdb
   static void EmitAssembly(AppDomain domain) {
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true);
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public);

      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      ilGenerator.EmitWriteLine("MyType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      assemblyBuilder.Save("temp.dll");
   }
}

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
void InstantiateMyType( AppDomain^ domain )
{
   try
   {

      // You must supply a valid fully qualified assembly name here.
      domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyType" );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

// Loads the content of a file to a Byte array.
array<Byte>^ loadFile( String^ filename )
{
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   array<Byte>^buffer = gcnew array<Byte>((int)fs->Length);
   fs->Read( buffer, 0, buffer->Length );
   fs->Close();
   return buffer;
}

// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
void EmitAssembly( AppDomain^ domain )
{
   AssemblyName^ assemblyName = gcnew AssemblyName;
   assemblyName->Name = "MyAssembly";
   AssemblyBuilder^ assemblyBuilder = domain->DefineDynamicAssembly( assemblyName, AssemblyBuilderAccess::Save );
   ModuleBuilder^ moduleBuilder = assemblyBuilder->DefineDynamicModule( "MyModule", "temp.dll", true );
   TypeBuilder^ typeBuilder = moduleBuilder->DefineType( "MyType", TypeAttributes::Public );
   ConstructorBuilder^ constructorBuilder = typeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, nullptr );
   ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
   ilGenerator->EmitWriteLine( "MyType instantiated!" );
   ilGenerator->Emit( OpCodes::Ret );
   typeBuilder->CreateType();
   assemblyBuilder->Save( "temp.dll" );
}

ref class Resolver
{
public:
   static Assembly^ MyResolver( Object^ sender, ResolveEventArgs^ args )
   {
      AppDomain^ domain = dynamic_cast<AppDomain^>(sender);

      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly( domain );
      array<Byte>^rawAssembly = loadFile( "temp.dll" );
      array<Byte>^rawSymbolStore = loadFile( "temp.pdb" );
      Assembly^ assembly = domain->Load( rawAssembly, rawSymbolStore );
      return assembly;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Resolver::MyResolver );
   InstantiateMyType( currentDomain ); // OK!
}
  • SecurityPermission

    用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。安全操作：Demand。
用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。安全操作：Demand。
用于提供证据。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。安全操作：Demand。

  • FileIOPermission

    用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。 用于对文件或目录进行读访问，以及用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.PathDiscovery。

  • WebPermission

    用于读取格式不为“file://”、“\\UNC\dir\”或“c:\”的路径。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
Load 重载
System 命名空间


AppDomain ..::.MemberwiseClone 方法

AppDomain
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ReflectionOnlyGetAssemblies 方法

AppDomain
.
.
::
.
ReflectionOnlyGetAssemblies 方法
AppDomain 类

返回已加载到应用程序域的只反射上下文中的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ReflectionOnlyGetAssemblies As Assembly()
public Assembly[] ReflectionOnlyGetAssemblies()
public:
array<Assembly^>^ ReflectionOnlyGetAssemblies()
member ReflectionOnlyGetAssemblies : unit -> Assembly[]

返回值

类型：
array<
System.Reflection Assembly
>
[]
()
[]

Assembly 对象数组，表示加载到应用程序域的只反射上下文中的程序集。
异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

此方法返回已加载到只反射上下文的程序集。若要获取已加载执行的程序集，请使用 GetAssemblies 方法。 此方法返回已加载到只反射上下文的程序集。若要获取已加载执行的程序集，请使用 GetAssemblies 方法。

下面的代码示例将 System.dll 程序集加载到执行上下文，然后加载到只反射上下文中。GetAssemblies 和 ReflectionOnlyGetAssemblies 方法用于显示加载到每个上下文中的程序集。 下面的代码示例将 System.dll 程序集加载到执行上下文，然后加载到只反射上下文中。GetAssemblies 和 ReflectionOnlyGetAssemblies 方法用于显示加载到每个上下文中的程序集。

Imports System
Imports System.Reflection
Imports System.Timers

Public Class Example

    Public Shared Sub Main()
        ' Get the assembly display name for System.dll, the assembly
        ' that contains System.Timers.Timer. Note that this causes
        ' System.dll to be loaded into the execution context.
        '
        Dim displayName As String = GetType(Timer).Assembly.FullName

        ' Load System.dll into the reflection-only context. Note that
        ' if you obtain the display name (for example, by running this
        ' example program), and enter it as a literal string in the
        ' preceding line of code, you can load System.dll into the
        ' reflection-only context without loading it into the execution
        ' context.
        Assembly.ReflectionOnlyLoad(displayName)

        ' Display the assemblies loaded into the execution and
        ' reflection-only contexts. System.dll appears in both contexts.
        '
        Dim ad As AppDomain = AppDomain.CurrentDomain
        Console.WriteLine("------------- Execution Context --------------")
        For Each a As Assembly In ad.GetAssemblies()
            Console.WriteLine(vbTab + "{0}", a.GetName())
        Next a
        Console.WriteLine("------------- Reflection-only Context --------------")
        For Each a As Assembly In ad.ReflectionOnlyGetAssemblies()
            Console.WriteLine(vbTab + "{0}", a.GetName())
        Next a

    End Sub
End Class

using System;
using System.Reflection;
using System.Timers;

public class Example
{
    public static void Main()
    {
        // Get the assembly display name for System.dll, the assembly
        // that contains System.Timers.Timer. Note that this causes
        // System.dll to be loaded into the execution context.
        //
        string displayName = typeof(Timer).Assembly.FullName;

        // Load System.dll into the reflection-only context. Note that
        // if you obtain the display name (for example, by running this
        // example program), and enter it as a literal string in the
        // preceding line of code, you can load System.dll into the
        // reflection-only context without loading it into the execution
        // context.
        Assembly.ReflectionOnlyLoad(displayName);

        // Display the assemblies loaded into the execution and
        // reflection-only contexts. System.dll appears in both contexts.
        //
        Console.WriteLine("------------- Execution Context --------------");
        foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
        {
            Console.WriteLine("\t{0}", a.GetName());
        }
        Console.WriteLine("------------- Reflection-only Context --------------");
        foreach (Assembly a in AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies())
        {
            Console.WriteLine("\t{0}", a.GetName());
        }
    }
}

using namespace System;
using namespace System::Reflection;

#using <System.dll>

using namespace System::Timers;
using namespace System::Collections;
int main()
{

   // Get the assembly display name for System.dll, the assembly
   // that contains System.Timers.Timer. Note that this causes
   // System.dll to be loaded into the execution context.
   //
   String^ displayName = Timer::typeid->Assembly->FullName;

   // Load System.dll into the reflection-only context. Note that
   // if you obtain the display name (for example, by running this
   // example program), and enter it as a literal string in the
   // preceding line of code, you can load System.dll into the
   // reflection-only context without loading it into the execution
   // context.
   Assembly::ReflectionOnlyLoad( displayName );

   // Display the assemblies loaded into the execution and
   // reflection-only contexts. System.dll appears in both contexts.
   //
   Console::WriteLine( L"------------- Execution Context --------------" );
   IEnumerator^ myEnum = AppDomain::CurrentDomain->GetAssemblies()->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Assembly^ a = safe_cast<Assembly^>(myEnum->Current);
      Console::WriteLine( L"\t{0}", a->GetName() );
   }

   Console::WriteLine( L"------------- Reflection-only Context --------------" );
   IEnumerator^ myEnum1 = AppDomain::CurrentDomain->ReflectionOnlyGetAssemblies()->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      Assembly^ a = safe_cast<Assembly^>(myEnum1->Current);
      Console::WriteLine( L"\t{0}", a->GetName() );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
GetAssemblies


AppDomain ..::.SetAppDomainPolicy 方法

AppDomain
.
.
::
.
SetAppDomainPolicy 方法
AppDomain 类

注意：此 API 现在已过时。

为此应用程序域确定安全策略级别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("AppDomain policy levels are obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")> _
Public Sub SetAppDomainPolicy ( _
    domainPolicy As PolicyLevel _
)
[ObsoleteAttribute("AppDomain policy levels are obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public void SetAppDomainPolicy(
    PolicyLevel domainPolicy
)
[ObsoleteAttribute(L"AppDomain policy levels are obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public:
virtual void SetAppDomainPolicy(
    PolicyLevel^ domainPolicy
) sealed
[<ObsoleteAttribute("AppDomain policy levels are obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract SetAppDomainPolicy :
        domainPolicy:PolicyLevel -> unit
[<ObsoleteAttribute("AppDomain policy levels are obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
override SetAppDomainPolicy :
        domainPolicy:PolicyLevel -> unit

参数

domainPolicy
类型： System.Security.Policy PolicyLevel
安全策略级别。

实现

异常 | 条件
ArgumentNullException | domainPolicy 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
PolicyException | 已经设置了安全策略级别。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

在将程序集加载到 AppDomain 之前调用此方法，目的是使安全策略生效。

下面的示例演示如何使用 SetAppDomainPolicy 方法设置应用程序域的安全策略级别。

Imports System
Imports System.Threading
Imports System.Security
Imports System.Security.Policy
Imports System.Security.Permissions

Class ADSetAppDomainPolicy

   Overloads Shared Sub Main(args() As String)
      ' Create a new application domain.
      Dim domain As AppDomain = System.AppDomain.CreateDomain("MyDomain")

      ' Create a new AppDomain PolicyLevel.
      Dim polLevel As PolicyLevel = PolicyLevel.CreateAppDomainLevel()
      ' Create a new, empty permission set.
      Dim permSet As New PermissionSet(PermissionState.None)
      ' Add permission to execute code to the permission set.
      permSet.AddPermission(New SecurityPermission(SecurityPermissionFlag.Execution))
      ' Give the policy level's root code group a new policy statement based
      ' on the new permission set.
      polLevel.RootCodeGroup.PolicyStatement = New PolicyStatement(permSet)
      ' Give the new policy level to the application domain.
      domain.SetAppDomainPolicy(polLevel)

      ' Try to execute the assembly.
      Try
         ' This will throw a PolicyException if the executable tries to
         ' access any resources like file I/Q or window creation.
         domain.ExecuteAssembly("Assemblies\MyWindowsExe.exe")
      Catch e As PolicyException
         Console.WriteLine("PolicyException: {0}", e.Message)
      End Try

      AppDomain.Unload(domain)
   End Sub 'Main
End Class 'ADSetAppDomainPolicy

using System;
using System.Threading;
using System.Security;
using System.Security.Policy;
using System.Security.Permissions;

namespace AppDomainSnippets
{
    class ADSetAppDomainPolicy
    {
        static void Main(string[] args)
        {
            // Create a new application domain.
            AppDomain domain = System.AppDomain.CreateDomain("MyDomain");

            // Create a new AppDomain PolicyLevel.
            PolicyLevel polLevel = PolicyLevel.CreateAppDomainLevel();
            // Create a new, empty permission set.
            PermissionSet permSet = new PermissionSet(PermissionState.None);
            // Add permission to execute code to the permission set.
            permSet.AddPermission
                (new SecurityPermission(SecurityPermissionFlag.Execution));
            // Give the policy level's root code group a new policy statement based
            // on the new permission set.
            polLevel.RootCodeGroup.PolicyStatement = new PolicyStatement(permSet);
            // Give the new policy level to the application domain.
            domain.SetAppDomainPolicy(polLevel);

            // Try to execute the assembly.
            try
            {
                // This will throw a PolicyException if the executable tries to
                // access any resources like file I/O or tries to create a window.
                domain.ExecuteAssembly("Assemblies\\MyWindowsExe.exe");
            }
            catch(PolicyException e)
            {
                Console.WriteLine("PolicyException: {0}", e.Message);
            }

            AppDomain.Unload(domain);
        }
    }
}

using namespace System;
using namespace System::Threading;
using namespace System::Security;
using namespace System::Security::Policy;
using namespace System::Security::Permissions;
int main()
{

   // Create a new application domain.
   AppDomain^ domain = System::AppDomain::CreateDomain( "MyDomain" );

   // Create a new AppDomain PolicyLevel.
   PolicyLevel^ polLevel = PolicyLevel::CreateAppDomainLevel();

   // Create a new, empty permission set.
   PermissionSet^ permSet = gcnew PermissionSet( PermissionState::None );

   // Add permission to execute code to the permission set.
   permSet->AddPermission( gcnew SecurityPermission( SecurityPermissionFlag::Execution ) );

   // Give the policy level's root code group a new policy statement based
   // on the new permission set.
   polLevel->RootCodeGroup->PolicyStatement = gcnew PolicyStatement( permSet );

   // Give the new policy level to the application domain.
   domain->SetAppDomainPolicy( polLevel );

   // Try to execute the assembly.
   try
   {

      // This will throw a PolicyException if the executable tries to
      // access any resources like file I/O or tries to create a window.
      domain->ExecuteAssembly( "Assemblies\\MyWindowsExe.exe" );
   }
   catch ( PolicyException^ e )
   {
      Console::WriteLine( "PolicyException: {0}", e->Message );
   }

   AppDomain::Unload( domain );
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.SetCachePath 方法

AppDomain
.
.
::
.
SetCachePath 方法
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 CachePath。

确定指定目录路径为对程序集进行影像复制的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("AppDomain.SetCachePath has been deprecated. Please investigate the use of AppDomainSetup.CachePath instead. http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub SetCachePath ( _
    path As String _
)
[ObsoleteAttribute("AppDomain.SetCachePath has been deprecated. Please investigate the use of AppDomainSetup.CachePath instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public void SetCachePath(
    string path
)
[ObsoleteAttribute(L"AppDomain.SetCachePath has been deprecated. Please investigate the use of AppDomainSetup.CachePath instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public:
virtual void SetCachePath(
    String^ path
) sealed
[<ObsoleteAttribute("AppDomain.SetCachePath has been deprecated. Please investigate the use of AppDomainSetup.CachePath instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract SetCachePath :
        path:string -> unit
[<ObsoleteAttribute("AppDomain.SetCachePath has been deprecated. Please investigate the use of AppDomainSetup.CachePath instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
override SetCachePath :
        path:string -> unit

参数

path
类型： System String
到影像副本位置的完全限定路径。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

如果没有设置 ApplicationName 属性，则忽略缓存路径。请参见 AppDomainSetup..::.CachePath 属性。 如果没有设置 ApplicationName 属性，则忽略缓存路径。请参见 AppDomainSetup..::.CachePath 属性。

有关影像复制的更多信息，请参见影像复制程序集。

此方法现已过时，不应当用于新的开发工作。

Imports System
Imports System.Security.Policy
 'for evidence object

Class ADShadowCopy

   'Entry point which delegates to C-style main Private Function
   ' Public Overloads Shared Sub Main()
    '  Main(System.Environment.GetCommandLineArgs())
   ' End Sub

   Public Overloads Shared Sub Main(args() As String)

      Dim setup As New AppDomainSetup()
      ' Shadow copying will not work unless the application has a name.
      setup.ApplicationName = "MyApplication"

      'Create evidence for the new application domain from evidence of
      ' current application domain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create a new application domain.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, setup)

      ' MyAssembly.dll is located in the Assemblies subdirectory.
      domain.AppendPrivatePath("Assemblies")
      ' MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
      ' MoreAssemblies subdirectory.
      domain.AppendPrivatePath("MoreAssemblies")
      ' Display the relative search path.
      Console.WriteLine(("RelativeSearchPath: " + domain.RelativeSearchPath))
      ' Because Load returns an Assembly object, the assemblies must be
      ' loaded into the current domain as well. This will fail unless the
      ' current domain also has these directories in its search path.
      AppDomain.CurrentDomain.AppendPrivatePath("Assemblies")
      AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies")

      ' Save shadow copies to C:\Cache
      domain.SetCachePath("C:\Cache")
      ' Shadow copy only the assemblies in the Assemblies directory.
      domain.SetShadowCopyPath((domain.BaseDirectory + "Assemblies"))
      ' Turn shadow copying on.
      domain.SetShadowCopyFiles()

      ' This will be copied.
      ' You must supply a valid fully qualified assembly name here.
      domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken")
      ' This will not be copied.
      ' You must supply a valid fully qualified assembly name here.
      domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken")

      ' When the shadow copy path is cleared, the CLR will make shadow copies
      ' of all private assemblies.
      domain.ClearShadowCopyPath()
      ' MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
      ' You must supply a valid fully qualified assembly name here.
      domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken")

      ' Unload the domain.
      AppDomain.Unload(domain)
   End Sub 'Main
End Class 'ADShadowCopy

using System;
using System.Security.Policy;  //for evidence object
namespace AppDomainSnippets
{
    class ADShadowCopy
    {
        static void Main(string[] args)
        {

            AppDomainSetup setup = new AppDomainSetup();
            // Shadow copying will not work unless the application has a name.
            setup.ApplicationName = "MyApplication";

            //Create evidence for the new application domain from evidence of
            // current application domain.
            Evidence adevidence = AppDomain.CurrentDomain.Evidence;

            // Create a new application domain.
            AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, setup);

            // MyAssembly.dll is located in the Assemblies subdirectory.
            domain.AppendPrivatePath("Assemblies");
            // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
            // MoreAssemblies subdirectory.
            domain.AppendPrivatePath("MoreAssemblies");
            // Display the relative search path.
            Console.WriteLine("RelativeSearchPath: " + domain.RelativeSearchPath);
            // Because Load returns an Assembly object, the assemblies must be
            // loaded into the current domain as well. This will fail unless the
            // current domain also has these directories in its search path.
            AppDomain.CurrentDomain.AppendPrivatePath("Assemblies");
            AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies");

            // Save shadow copies to C:\Cache
            domain.SetCachePath("C:\\Cache");
            // Shadow copy only the assemblies in the Assemblies directory.
            domain.SetShadowCopyPath(domain.BaseDirectory + "Assemblies");
            // Turn shadow copying on.
            domain.SetShadowCopyFiles();

            // This will be copied.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken");
            // This will not be copied.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken");

            // When the shadow copy path is cleared, the CLR will make shadow copies
            // of all private assemblies.
            domain.ClearShadowCopyPath();
            // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken");

            // Unload the domain.
            AppDomain.Unload(domain);
        }
    }
}

using namespace System;
using namespace System::Security::Policy;

//for evidence Object*
int main()
{
   AppDomainSetup^ setup = gcnew AppDomainSetup;

   // Shadow copying will not work unless the application has a name.
   setup->ApplicationName = "MyApplication";

   //Create evidence for the new application domain from evidence of
   // current application domain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create a new application domain.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence, setup );

   // MyAssembly.dll is located in the Assemblies subdirectory.
   domain->AppendPrivatePath( "Assemblies" );

   // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
   // MoreAssemblies subdirectory.
   domain->AppendPrivatePath( "MoreAssemblies" );

   // Display the relative search path.
   Console::WriteLine( "RelativeSearchPath: {0}", domain->RelativeSearchPath );

   // Because Load returns an Assembly Object*, the assemblies must be
   // loaded into the current domain as well. This will fail unless the
   // current domain also has these directories in its search path.
   AppDomain::CurrentDomain->AppendPrivatePath( "Assemblies" );
   AppDomain::CurrentDomain->AppendPrivatePath( "MoreAssemblies" );

   // Save shadow copies to C:\Cache
   domain->SetCachePath( "C:\\Cache" );

   // Shadow copy only the assemblies in the Assemblies directory.
   domain->SetShadowCopyPath( String::Concat( domain->BaseDirectory, "Assemblies" ) );

   // Turn shadow copying on.
   domain->SetShadowCopyFiles();

   // This will be copied.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly1 text name, Version, Culture, PublicKeyToken" );

   // This will not be copied.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly2 text name, Version, Culture, PublicKeyToken" );

   // When the shadow copy path is cleared, the CLR will make shadow copies
   // of all private assemblies.
   domain->ClearShadowCopyPath();

   // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly3 text name, Version, Culture, PublicKeyToken" );

   // Unload the domain.
   AppDomain::Unload( domain );
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
System 命名空间
CachePath

其他资源

影像复制程序集


AppDomain ..::.SetData 方法

AppDomain
.
.
::
.
SetData 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

为应用程序域属性分配值。

名称 说明
页首

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.SetData 方法 (String, Object)

AppDomain
.
.
::
.
SetData 方法 (String, Object)
AppDomain 类

为指定的应用程序域属性分配指定值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetData ( _
    name As String, _
    data As Object _
)
public void SetData(
    string name,
    Object data
)
public:
virtual void SetData(
    String^ name,
    Object^ data
) sealed
abstract SetData :
        name:string *
        data:Object -> unit
override SetData :
        name:string *
        data:Object -> unit

参数

name
类型： System String
要创建或更改的用户定义应用程序域属性的名称。
data
类型： System Object
属性的值。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

使用此方法可在内部缓存的名称数据对中插入项或修改项的值，这些名称数据对描述 AppDomain 此实例的属性。

该缓存自动包含在创建应用程序域时插入的预定义的系统项。不能使用此方法插入或修改系统项。您可使用 GetData 方法或等效的 AppDomainSetup 属性（在 GetData 中说明）检查它们的值。 该缓存自动包含在创建应用程序域时插入的预定义的系统项。不能使用此方法插入或修改系统项。您可使用 GetData 方法或等效的 AppDomainSetup 属性（在 GetData 中说明）检查它们的值。 该缓存自动包含在创建应用程序域时插入的预定义的系统项。不能使用此方法插入或修改系统项。您可使用 GetData 方法或等效的 AppDomainSetup 属性（在 GetData 中说明）检查它们的值。

还可使用此方法插入或修改用户定义的名称数据对，并使用 GetData 方法检查它们的值。

下面的示例演示如何使用 SetData(String, Object) 方法创建新值对。然后，该示例使用 GetData 方法检索值，并将其显示在控制台中。 下面的示例演示如何使用 SetData(String, Object) 方法创建新值对。然后，该示例使用 GetData 方法检索值，并将其显示在控制台中。

Imports System
Imports System.Reflection

Class ADGetData

   Public Shared Sub Main()
      ' appdomain setup information
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      'Create a new value pair for the appdomain
      currentDomain.SetData("ADVALUE", "Example value")

      'get the value specified in the setdata method
      Console.WriteLine(("ADVALUE is: " & currentDomain.GetData("ADVALUE")))

      'get a system value specified at appdomainsetup
      Console.WriteLine("System value for loader optimization: {0}", _
         currentDomain.GetData("LOADER_OPTIMIZATION"))

   End Sub
End Class

' This code example produces the following output:
'
'ADVALUE is: Example value
'System value for loader optimization: NotSpecified

using System;
using System.Reflection;

class ADGetData
{
    public static void Main()
    {
        // appdomain setup information
        AppDomain currentDomain = AppDomain.CurrentDomain;

        //Create a new value pair for the appdomain
        currentDomain.SetData("ADVALUE", "Example value");

        //get the value specified in the setdata method
        Console.WriteLine("ADVALUE is: " + currentDomain.GetData("ADVALUE"));

        //get a system value specified at appdomainsetup
        Console.WriteLine("System value for loader optimization: {0}",
            currentDomain.GetData("LOADER_OPTIMIZATION"));
    }
}

/* This code example produces the following output:

ADVALUE is: Example value
System value for loader optimization: NotSpecified
 */

using namespace System;
using namespace System::Reflection;

int main()
{
   // appdomain setup information
   AppDomain^ currentDomain = AppDomain::CurrentDomain;

   //Create a new value pair for the appdomain
   currentDomain->SetData( "ADVALUE", "Example value" );

   //get the value specified in the setdata method
   Console::WriteLine( "ADVALUE is: {0}", currentDomain->GetData( "ADVALUE" ) );

   //get a system value specified at appdomainsetup
   Console::WriteLine( "System value for loader optimization: {0}",
      currentDomain->GetData( "LOADER_OPTIMIZATION" ) );
}

/* This code example produces the following output:

ADVALUE is: Example value
System value for loader optimization: NotSpecified
 */
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
SetData 重载
System 命名空间
GetData


AppDomain ..::.SetData 方法 (String, Object, IPermission)

AppDomain
.
.
::
.
SetData 方法 (String, Object, IPermission)
AppDomain 类

将指定值分配给指定应用程序域属性，检索该属性时要求调用方具有指定权限。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetData ( _
    name As String, _
    data As Object, _
    permission As IPermission _
)
public void SetData(
    string name,
    Object data,
    IPermission permission
)
public:
void SetData(
    String^ name,
    Object^ data,
    IPermission^ permission
)
member SetData :
        name:string *
        data:Object *
        permission:IPermission -> unit

参数

name
类型： System String
要创建或更改的用户定义应用程序域属性的名称。
data
类型： System Object
属性的值。
permission
类型： System.Security IPermission
检索属性时调用方需要具有的权限。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | name 指定系统定义的属性字符串，并且 permission 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

使用此方法在说明应用程序域属性的名称/数据对的内部缓存中插入或修改您自己的用户定义项。插入项时，可指定检索该项要求具有的权限。 使用此方法在说明应用程序域属性的名称/数据对的内部缓存中插入或修改您自己的用户定义项。插入项时，可指定检索该项要求具有的权限。

不能使用此方法将安全性要求分配给系统定义的属性字符串。

该缓存自动包含在创建应用程序域时插入的预定义的系统项。不能使用此方法插入或修改系统项。可使用 GetData 方法或 GetData 方法的“备注”部分中所描述的等效 AppDomainSetup 属性来检查它们的值。 该缓存自动包含在创建应用程序域时插入的预定义的系统项。不能使用此方法插入或修改系统项。可使用 GetData 方法或 GetData 方法的“备注”部分中所描述的等效 AppDomainSetup 属性来检查它们的值。 该缓存自动包含在创建应用程序域时插入的预定义的系统项。不能使用此方法插入或修改系统项。可使用 GetData 方法或 GetData 方法的“备注”部分中所描述的等效 AppDomainSetup 属性来检查它们的值。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
SetData 重载
System 命名空间


AppDomain ..::.SetDynamicBase 方法

AppDomain
.
.
::
.
SetDynamicBase 方法
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 DynamicBase。

建立指定的目录路径，作为存储和访问动态生成的文件的子目录的基目录。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("AppDomain.SetDynamicBase has been deprecated. Please investigate the use of AppDomainSetup.DynamicBase instead. http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub SetDynamicBase ( _
    path As String _
)
[ObsoleteAttribute("AppDomain.SetDynamicBase has been deprecated. Please investigate the use of AppDomainSetup.DynamicBase instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public void SetDynamicBase(
    string path
)
[ObsoleteAttribute(L"AppDomain.SetDynamicBase has been deprecated. Please investigate the use of AppDomainSetup.DynamicBase instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public:
void SetDynamicBase(
    String^ path
)
[<ObsoleteAttribute("AppDomain.SetDynamicBase has been deprecated. Please investigate the use of AppDomainSetup.DynamicBase instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
member SetDynamicBase :
        path:string -> unit

参数

path
类型： System String
完全限定路径，它作为存储动态程序集的子目录的基目录。
异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

此方法设置与此实例关联的内部 AppDomainSetup 的 DynamicBase 属性。

此方法现已过时，不应当用于新的开发工作。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Class ADDynamicBase

   ' SetDynamicBase.exe
   Overloads Shared Sub Main(args() As String)
      ' Create a new AppDomain.
      Dim setup As New AppDomainSetup()
      ' Need to set the application name before setting the dynamic base.
      setup.ApplicationName = "MyApplication"
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", Nothing, setup)

      ' Tell the domain to search for assemblies in subdirectories
      ' of DynamicAssemblyDir.
      domain.SetDynamicBase("C:\DynamicAssemblyDir")

      ' Note that the actual dynamic directory has the form
      ' <DynamicBase>\<number>\<ApplicationName>, rather than
      ' simply <DynamicBase>.
      Dim dynamicDir As [String] = domain.DynamicDirectory
      ' The AssemblyBuilder won't create this directory automatically.
      If Not System.IO.Directory.Exists(dynamicDir) Then
         System.IO.Directory.CreateDirectory(dynamicDir)
      End If

      ' Define the dynamic assembly.
      Dim asmName As New AssemblyName()
      asmName.Name = "DynamicHelloWorld"
      Dim asm As AssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Save, dynamicDir)

      ' Define a dynamic module in the assembly.
      Dim [mod] As ModuleBuilder
      [mod] = asm.DefineDynamicModule("DynamicHelloWorld", "DynamicHelloWorld.dll")

      ' Define the "HelloWorld" type in the module.
      Dim typ As TypeBuilder = [mod].DefineType("HelloWorld", TypeAttributes.Public)

      ' Define the "SayHello" method.
      Dim meth As MethodBuilder = typ.DefineMethod("SayHello", MethodAttributes.Public, Nothing, Nothing)
      Dim il As ILGenerator = meth.GetILGenerator()
      il.EmitWriteLine("Hello World!")
      il.Emit(OpCodes.Ret)

      ' Complete the HelloWorld type.
      typ.CreateType()

      ' Save the assembly to the dynamic assembly directory.
      asm.Save("DynamicHelloWorld.dll")

      ' Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
      domain.ExecuteAssembly("MyExecutable.exe")
   End Sub 'Main
End Class 'ADDynamicBase

using System;
using System.Reflection;
using System.Reflection.Emit;

namespace AppDomainSnippets
{
    class ADDynamicBase
    {
        // SetDynamicBase.exe
        static void Main(string[] args)
        {
            // Create a new AppDomain.
            AppDomainSetup setup = new AppDomainSetup();
            // Need to set the application name before setting the dynamic base.
            setup.ApplicationName = "MyApplication";
            AppDomain domain = AppDomain.CreateDomain("MyDomain", null, setup);

            // Tell the domain to search for assemblies in subdirectories
            // of DynamicAssemblyDir.
            domain.SetDynamicBase("C:\\DynamicAssemblyDir");

            // Note that the actual dynamic directory has the form
            // <DynamicBase>\<number>\<ApplicationName>, rather than
            // simply <DynamicBase>.
            String dynamicDir = domain.DynamicDirectory;
            // The AssemblyBuilder won't create this directory automatically.
            if(!System.IO.Directory.Exists(dynamicDir))
            {
                System.IO.Directory.CreateDirectory(dynamicDir);
            }

            // Define the dynamic assembly.
            AssemblyName asmName = new AssemblyName();
            asmName.Name = "DynamicHelloWorld";
            AssemblyBuilder asm = AppDomain.CurrentDomain.DefineDynamicAssembly
                (asmName, AssemblyBuilderAccess.Save, dynamicDir);

            // Define a dynamic module in the assembly.
            ModuleBuilder mod;
            mod = asm.DefineDynamicModule
                ("DynamicHelloWorld", "DynamicHelloWorld.dll");

            // Define the "HelloWorld" type in the module.
            TypeBuilder typ = mod.DefineType
                ("HelloWorld", TypeAttributes.Public);

            // Define the "SayHello" method.
            MethodBuilder meth = typ.DefineMethod
                ("SayHello", MethodAttributes.Public, null, null);
            ILGenerator il = meth.GetILGenerator();
            il.EmitWriteLine("Hello World!");
            il.Emit(OpCodes.Ret);

            // Complete the HelloWorld type.
            typ.CreateType();

            // Save the assembly to the dynamic assembly directory.
            asm.Save("DynamicHelloWorld.dll");

            // Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
            domain.ExecuteAssembly("MyExecutable.exe");
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

// SetDynamicBase.exe
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();

   // Create a new AppDomain.
   AppDomainSetup^ setup = gcnew AppDomainSetup;

   // Need to set the application name before setting the dynamic base.
   setup->ApplicationName = "MyApplication";
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", nullptr, setup );

   // Tell the domain to search for assemblies in subdirectories
   // of DynamicAssemblyDir.
   domain->SetDynamicBase( "C:\\DynamicAssemblyDir" );

   // Note that the actual dynamic directory has the form
   // <DynamicBase>\<number>\<ApplicationName>, rather than
   // simply <DynamicBase>.
   String^ dynamicDir = domain->DynamicDirectory;

   // The AssemblyBuilder won't create this directory automatically.
   if (  !System::IO::Directory::Exists( dynamicDir ) )
   {
      System::IO::Directory::CreateDirectory( dynamicDir );
   }

   // Define the dynamic assembly.
   AssemblyName^ asmName = gcnew AssemblyName;
   asmName->Name = "DynamicHelloWorld";
   AssemblyBuilder^ asmb = AppDomain::CurrentDomain->DefineDynamicAssembly( asmName, AssemblyBuilderAccess::Save, dynamicDir );

   // Define a dynamic module in the assembly.
   ModuleBuilder^ mod;
   mod = asmb->DefineDynamicModule( "DynamicHelloWorld", "DynamicHelloWorld.dll" );

   // Define the S"HelloWorld" type in the module.
   TypeBuilder^ typ = mod->DefineType( "HelloWorld", TypeAttributes::Public );

   // Define the S"SayHello" method.
   MethodBuilder^ meth = typ->DefineMethod( "SayHello", MethodAttributes::Public, nullptr, nullptr );
   ILGenerator^ il = meth->GetILGenerator();
   il->EmitWriteLine( "Hello World!" );
   il->Emit( OpCodes::Ret );

   // Complete the HelloWorld type.
   typ->CreateType();

   // Save the assembly to the dynamic assembly directory.
   asmb->Save( "DynamicHelloWorld.dll" );

   // Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
   domain->ExecuteAssembly( "MyExecutable.exe" );
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
System 命名空间
DynamicBase


AppDomain ..::.SetPrincipalPolicy 方法

AppDomain
.
.
::
.
SetPrincipalPolicy 方法
AppDomain 类

指定在此应用程序域中执行时如果线程尝试绑定到用户，用户和标识对象应如何附加到该线程。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SecurityPermissionAttribute(SecurityAction.Demand, Flags := SecurityPermissionFlag.ControlPrincipal)> _
Public Sub SetPrincipalPolicy ( _
    policy As PrincipalPolicy _
)
[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal)]
public void SetPrincipalPolicy(
    PrincipalPolicy policy
)
[SecurityPermissionAttribute(SecurityAction::Demand, Flags = SecurityPermissionFlag::ControlPrincipal)]
public:
virtual void SetPrincipalPolicy(
    PrincipalPolicy policy
) sealed
[<SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal)>]
abstract SetPrincipalPolicy :
        policy:PrincipalPolicy -> unit
[<SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal)>]
override SetPrincipalPolicy :
        policy:PrincipalPolicy -> unit

参数

policy
类型： System.Security.Principal PrincipalPolicy
PrincipalPolicy 值之一，指定要附加到线程的主体对象类型。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

仅当使用 Thread..::.CurrentPrincipal 属性前设置此值才有效。例如，如果将 Thread..::.CurrentPrincipal 设置为给定主体（例如，一般主体），然后使用 SetPrincipalPolicy 方法将 PrincipalPolicy 设置为 WindowsPrincipal，则当前主体保持为一般主体。 仅当使用 Thread..::.CurrentPrincipal 属性前设置此值才有效。例如，如果将 Thread..::.CurrentPrincipal 设置为给定主体（例如，一般主体），然后使用 SetPrincipalPolicy 方法将 PrincipalPolicy 设置为 WindowsPrincipal，则当前主体保持为一般主体。

下面的示例显示使用 SetPrincipalPolicy 方法更改应用程序域的主体策略时对线程的影响。该示例还显示使用 SetThreadPrincipal 方法更改主体（在应用程序域中可用来附加至线程）的影响。 下面的示例显示使用 SetPrincipalPolicy 方法更改应用程序域的主体策略时对线程的影响。该示例还显示使用 SetThreadPrincipal 方法更改主体（在应用程序域中可用来附加至线程）的影响。

Imports System
Imports System.Security.Principal
Imports System.Threading

Class ADPrincipal
    Overloads Shared Sub Main(ByVal args() As String)
        ' Create a new thread with a generic principal.
        Dim t As New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Set the principal policy to WindowsPrincipal.
        Dim currentDomain As AppDomain = AppDomain.CurrentDomain
        currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)

        ' The new thread will have a Windows principal representing the
        ' current user.
        t = New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Create a principal to use for new threads.
        Dim identity = New GenericIdentity("NewUser")
        Dim principal = New GenericPrincipal(identity, Nothing)
        currentDomain.SetThreadPrincipal(principal)

        ' Create a new thread with the principal created above.
        t = New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Wait for user input before terminating.
        Console.ReadLine()
    End Sub 'Main

    Shared Sub PrintPrincipalInformation()
        Dim curPrincipal As IPrincipal = Thread.CurrentPrincipal
        If Not (curPrincipal Is Nothing) Then
            Console.WriteLine("Type: " & CType(curPrincipal, Object).GetType().Name)
            Console.WriteLine("Name: " & curPrincipal.Identity.Name)
            Console.WriteLine("Authenticated: " & curPrincipal.Identity.IsAuthenticated)
            Console.WriteLine()

        End If
    End Sub 'PrintPrincipalInformation
End Class 'ADPrincipal

using System;
using System.Security.Principal;
using System.Threading;

class ADPrincipal
{
    static void Main(string[] args)
    {
        // Create a new thread with a generic principal.
        Thread t = new Thread(new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Set the principal policy to WindowsPrincipal.
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

        // The new thread will have a Windows principal representing the
        // current user.
        t = new Thread(new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Create a principal to use for new threads.
        IIdentity identity = new GenericIdentity("NewUser");
        IPrincipal principal = new GenericPrincipal(identity, null);
        currentDomain.SetThreadPrincipal(principal);

        // Create a new thread with the principal created above.
        t = new Thread(new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Wait for user input before terminating.
        Console.ReadLine();
    }

    static void PrintPrincipalInformation()
    {
        IPrincipal curPrincipal = Thread.CurrentPrincipal;
        if(curPrincipal != null)
        {
            Console.WriteLine("Type: " + curPrincipal.GetType().Name);
            Console.WriteLine("Name: " + curPrincipal.Identity.Name);
            Console.WriteLine("Authenticated: " +
                curPrincipal.Identity.IsAuthenticated);
            Console.WriteLine();
        }
    }
}

using namespace System;
using namespace System::Security::Principal;
using namespace System::Threading;
ref class ADPrincipal
{
public:
   static void PrintPrincipalInformation()
   {
      IPrincipal^ curPrincipal = Thread::CurrentPrincipal;
      if ( curPrincipal != nullptr )
      {
         Console::WriteLine( "Type: {0}", curPrincipal->GetType()->Name );
         Console::WriteLine( "Name: {0}", curPrincipal->Identity->Name );
         Console::WriteLine( "Authenticated: {0}", curPrincipal->Identity->IsAuthenticated );
         Console::WriteLine();
      }
   }

};

int main()
{

   // Create a new thread with a generic principal.
   Thread^ t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();

   // Set the principal policy to WindowsPrincipal.
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   currentDomain->SetPrincipalPolicy( PrincipalPolicy::WindowsPrincipal );

   // The new thread will have a Windows principal representing the
   // current user.
   t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();

   // Create a principal to use for new threads.
   IIdentity^ identity = gcnew GenericIdentity( "NewUser" );
   IPrincipal^ principal = gcnew GenericPrincipal( identity,nullptr );
   currentDomain->SetThreadPrincipal( principal );

   // Create a new thread with the principal created above.
   t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();

   // Wait for user input before terminating.
   Console::ReadLine();
}
  • SecurityPermission

    表示操作主体对象的能力。关联的枚举：SecurityPermissionFlag..::.ControlPrincipal。安全操作：Demand。
表示操作主体对象的能力。关联的枚举：SecurityPermissionFlag..::.ControlPrincipal。安全操作：Demand。
表示操作主体对象的能力。关联的枚举：SecurityPermissionFlag..::.ControlPrincipal。安全操作：Demand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.SetShadowCopyFiles 方法

AppDomain
.
.
::
.
SetShadowCopyFiles 方法
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ShadowCopyFiles。

打开影像复制功能。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("AppDomain.SetShadowCopyFiles has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyFiles instead. http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub SetShadowCopyFiles
[ObsoleteAttribute("AppDomain.SetShadowCopyFiles has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyFiles instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public void SetShadowCopyFiles()
[ObsoleteAttribute(L"AppDomain.SetShadowCopyFiles has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyFiles instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public:
void SetShadowCopyFiles()
[<ObsoleteAttribute("AppDomain.SetShadowCopyFiles has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyFiles instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
member SetShadowCopyFiles : unit -> unit

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

有关影像复制的更多信息，请参见影像复制程序集。

此方法现已过时，不应当用于新的开发工作。

Imports System
Imports System.Security.Policy
 'for evidence object

Class ADProperties

    Shared Sub Main(args() As String)

        Dim setup As New AppDomainSetup()
        ' Shadow copying will not work unless the application has a name.
        setup.ApplicationName = "MyApplication"

        'Create evidence for the new application domain from evidence of
        ' current application domain.
        Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

        ' Create a new application domain.
        Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, setup)

        ' MyAssembly.dll is located in the Assemblies subdirectory.
        domain.AppendPrivatePath("Assemblies")
        ' MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
        ' MoreAssemblies subdirectory.
        domain.AppendPrivatePath("MoreAssemblies")
        ' Display the relative search path.
        Console.WriteLine("RelativeSearchPath: " & domain.RelativeSearchPath)
        ' Because Load returns an Assembly object, the assemblies must be
        ' loaded into the current domain as well. This will fail unless the
        ' current domain also has these directories in its search path.
        AppDomain.CurrentDomain.AppendPrivatePath("Assemblies")
        AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies")

        ' Save shadow copies to C:\Cache
        domain.SetCachePath("C:\Cache")
        ' Shadow copy only the assemblies in the Assemblies directory.
        domain.SetShadowCopyPath(domain.BaseDirectory + "Assemblies")
        ' Turn shadow copying on.
        domain.SetShadowCopyFiles()
        Console.WriteLine("ShadowCopyFiles turned on: " & domain.ShadowCopyFiles)

        ' This will be copied.
        ' You must supply a valid fully qualified assembly name here.
        domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken")
        ' This will not be copied.
        ' You must supply a valid fully qualified assembly name here.
        domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken")

        ' When the shadow copy path is cleared, the CLR will make shadow copies
        ' of all private assemblies.
        domain.ClearShadowCopyPath()
        ' MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
        ' You must supply a valid fully qualified assembly name here.
        domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken")

        ' Unload the domain.
        AppDomain.Unload(domain)
    End Sub 'Main
End Class 'ADProperties

using System;
using System.Security.Policy;  //for evidence object
namespace AppDomainSnippets
{
    class ADProperties
    {
        static void Main(string[] args)
        {

            AppDomainSetup setup = new AppDomainSetup();
            // Shadow copying will not work unless the application has a name.
            setup.ApplicationName = "MyApplication";

            //Create evidence for the new application domain from evidence of
            // current application domain.
            Evidence adevidence = AppDomain.CurrentDomain.Evidence;

            // Create a new application domain.
            AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, setup);

            // MyAssembly.dll is located in the Assemblies subdirectory.
            domain.AppendPrivatePath("Assemblies");
            // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
            // MoreAssemblies subdirectory.
            domain.AppendPrivatePath("MoreAssemblies");
            // Display the relative search path.
            Console.WriteLine("RelativeSearchPath: " + domain.RelativeSearchPath);
            // Because Load returns an Assembly object, the assemblies must be
            // loaded into the current domain as well. This will fail unless the
            // current domain also has these directories in its search path.
            AppDomain.CurrentDomain.AppendPrivatePath("Assemblies");
            AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies");

            // Save shadow copies to C:\Cache
            domain.SetCachePath("C:\\Cache");
            // Shadow copy only the assemblies in the Assemblies directory.
            domain.SetShadowCopyPath(domain.BaseDirectory + "Assemblies");
            // Turn shadow copying on.
            domain.SetShadowCopyFiles();
            Console.WriteLine("ShadowCopyFiles turned on: " + domain.ShadowCopyFiles);

            // This will be copied.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken");
            // This will not be copied.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken");

            // When the shadow copy path is cleared, the CLR will make shadow copies
            // of all private assemblies.
            domain.ClearShadowCopyPath();
            // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken");

            // Unload the domain.
            AppDomain.Unload(domain);
        }
    }
}

using namespace System;
using namespace System::Security::Policy;

//for evidence object
int main()
{
   AppDomainSetup^ setup = gcnew AppDomainSetup;

   // Shadow copying will not work unless the application has a name.
   setup->ApplicationName = "MyApplication";

   //Create evidence for the new application domain from evidence of
   // current application domain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create a new application domain.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence, setup );

   // MyAssembly.dll is located in the Assemblies subdirectory.
   domain->AppendPrivatePath( "Assemblies" );

   // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
   // MoreAssemblies subdirectory.
   domain->AppendPrivatePath( "MoreAssemblies" );

   // Display the relative search path.
   Console::WriteLine( "RelativeSearchPath: {0}", domain->RelativeSearchPath );

   // Because Load returns an Assembly object, the assemblies must be
   // loaded into the current domain as well. This will fail unless the
   // current domain also has these directories in its search path.
   AppDomain::CurrentDomain->AppendPrivatePath( "Assemblies" );
   AppDomain::CurrentDomain->AppendPrivatePath( "MoreAssemblies" );

   // Save shadow copies to C:\Cache
   domain->SetCachePath( "C:\\Cache" );

   // Shadow copy only the assemblies in the Assemblies directory.
   domain->SetShadowCopyPath( String::Concat( domain->BaseDirectory, "Assemblies" ) );

   // Turn shadow copying on.
   domain->SetShadowCopyFiles();
   Console::WriteLine( "ShadowCopyFiles turned on: {0}", domain->ShadowCopyFiles );

   // This will be copied.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly1 text name, Version, Culture, PublicKeyToken" );

   // This will not be copied.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly2 text name, Version, Culture, PublicKeyToken" );

   // When the shadow copy path is cleared, the CLR will make shadow copies
   // of all private assemblies.
   domain->ClearShadowCopyPath();

   // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly3 text name, Version, Culture, PublicKeyToken" );

   // Unload the domain.
   AppDomain::Unload( domain );
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
System 命名空间

其他资源

影像复制程序集


AppDomain ..::.SetShadowCopyPath 方法

AppDomain
.
.
::
.
SetShadowCopyPath 方法
AppDomain 类

注意：此 API 现在已过时。 非过时替代项是 ShadowCopyDirectories。

确定指定目录路径为要进行影像复制的程序集的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("AppDomain.SetShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub SetShadowCopyPath ( _
    path As String _
)
[ObsoleteAttribute("AppDomain.SetShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public void SetShadowCopyPath(
    string path
)
[ObsoleteAttribute(L"AppDomain.SetShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public:
virtual void SetShadowCopyPath(
    String^ path
) sealed
[<ObsoleteAttribute("AppDomain.SetShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract SetShadowCopyPath :
        path:string -> unit
[<ObsoleteAttribute("AppDomain.SetShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
override SetShadowCopyPath :
        path:string -> unit

参数

path
类型： System String
目录名列表，每一个名称用分号隔开。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

默认情况下，影像副本包含探测期间发现的所有程序集。SetShadowCopyPath 方法将影像副本限制在 path 指定的目录中的程序集。 默认情况下，影像副本包含探测期间发现的所有程序集。SetShadowCopyPath 方法将影像副本限制在 path 指定的目录中的程序集。

SetShadowCopyPath 方法不指定从中搜索程序集的其他目录。要影像复制的程序集必须已位于搜索路径中，例如 BaseDirectory 下。SetShadowCopyPath 方法指定可影像复制的搜索路径。 SetShadowCopyPath 方法不指定从中搜索程序集的其他目录。要影像复制的程序集必须已位于搜索路径中，例如 BaseDirectory 下。SetShadowCopyPath 方法指定可影像复制的搜索路径。 SetShadowCopyPath 方法不指定从中搜索程序集的其他目录。要影像复制的程序集必须已位于搜索路径中，例如 BaseDirectory 下。SetShadowCopyPath 方法指定可影像复制的搜索路径。

此方法设置与此实例关联的内部 AppDomainSetup 的 ShadowCopyDirectories 属性。

有关影像复制的更多信息，请参见影像复制程序集。

此方法现已过时，不应当用于新的开发工作。

Imports System
Imports System.Security.Policy
 'for evidence object

Class ADShadowCopy

   'Entry point which delegates to C-style main Private Function
   ' Public Overloads Shared Sub Main()
    '  Main(System.Environment.GetCommandLineArgs())
   ' End Sub

   Public Overloads Shared Sub Main(args() As String)

      Dim setup As New AppDomainSetup()
      ' Shadow copying will not work unless the application has a name.
      setup.ApplicationName = "MyApplication"

      'Create evidence for the new application domain from evidence of
      ' current application domain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create a new application domain.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, setup)

      ' MyAssembly.dll is located in the Assemblies subdirectory.
      domain.AppendPrivatePath("Assemblies")
      ' MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
      ' MoreAssemblies subdirectory.
      domain.AppendPrivatePath("MoreAssemblies")
      ' Display the relative search path.
      Console.WriteLine(("RelativeSearchPath: " + domain.RelativeSearchPath))
      ' Because Load returns an Assembly object, the assemblies must be
      ' loaded into the current domain as well. This will fail unless the
      ' current domain also has these directories in its search path.
      AppDomain.CurrentDomain.AppendPrivatePath("Assemblies")
      AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies")

      ' Save shadow copies to C:\Cache
      domain.SetCachePath("C:\Cache")
      ' Shadow copy only the assemblies in the Assemblies directory.
      domain.SetShadowCopyPath((domain.BaseDirectory + "Assemblies"))
      ' Turn shadow copying on.
      domain.SetShadowCopyFiles()

      ' This will be copied.
      ' You must supply a valid fully qualified assembly name here.
      domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken")
      ' This will not be copied.
      ' You must supply a valid fully qualified assembly name here.
      domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken")

      ' When the shadow copy path is cleared, the CLR will make shadow copies
      ' of all private assemblies.
      domain.ClearShadowCopyPath()
      ' MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
      ' You must supply a valid fully qualified assembly name here.
      domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken")

      ' Unload the domain.
      AppDomain.Unload(domain)
   End Sub 'Main
End Class 'ADShadowCopy

using System;
using System.Security.Policy;  //for evidence object
namespace AppDomainSnippets
{
    class ADShadowCopy
    {
        static void Main(string[] args)
        {

            AppDomainSetup setup = new AppDomainSetup();
            // Shadow copying will not work unless the application has a name.
            setup.ApplicationName = "MyApplication";

            //Create evidence for the new application domain from evidence of
            // current application domain.
            Evidence adevidence = AppDomain.CurrentDomain.Evidence;

            // Create a new application domain.
            AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, setup);

            // MyAssembly.dll is located in the Assemblies subdirectory.
            domain.AppendPrivatePath("Assemblies");
            // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
            // MoreAssemblies subdirectory.
            domain.AppendPrivatePath("MoreAssemblies");
            // Display the relative search path.
            Console.WriteLine("RelativeSearchPath: " + domain.RelativeSearchPath);
            // Because Load returns an Assembly object, the assemblies must be
            // loaded into the current domain as well. This will fail unless the
            // current domain also has these directories in its search path.
            AppDomain.CurrentDomain.AppendPrivatePath("Assemblies");
            AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies");

            // Save shadow copies to C:\Cache
            domain.SetCachePath("C:\\Cache");
            // Shadow copy only the assemblies in the Assemblies directory.
            domain.SetShadowCopyPath(domain.BaseDirectory + "Assemblies");
            // Turn shadow copying on.
            domain.SetShadowCopyFiles();

            // This will be copied.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken");
            // This will not be copied.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken");

            // When the shadow copy path is cleared, the CLR will make shadow copies
            // of all private assemblies.
            domain.ClearShadowCopyPath();
            // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken");

            // Unload the domain.
            AppDomain.Unload(domain);
        }
    }
}

using namespace System;
using namespace System::Security::Policy;

//for evidence Object*
int main()
{
   AppDomainSetup^ setup = gcnew AppDomainSetup;

   // Shadow copying will not work unless the application has a name.
   setup->ApplicationName = "MyApplication";

   //Create evidence for the new application domain from evidence of
   // current application domain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create a new application domain.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence, setup );

   // MyAssembly.dll is located in the Assemblies subdirectory.
   domain->AppendPrivatePath( "Assemblies" );

   // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
   // MoreAssemblies subdirectory.
   domain->AppendPrivatePath( "MoreAssemblies" );

   // Display the relative search path.
   Console::WriteLine( "RelativeSearchPath: {0}", domain->RelativeSearchPath );

   // Because Load returns an Assembly Object*, the assemblies must be
   // loaded into the current domain as well. This will fail unless the
   // current domain also has these directories in its search path.
   AppDomain::CurrentDomain->AppendPrivatePath( "Assemblies" );
   AppDomain::CurrentDomain->AppendPrivatePath( "MoreAssemblies" );

   // Save shadow copies to C:\Cache
   domain->SetCachePath( "C:\\Cache" );

   // Shadow copy only the assemblies in the Assemblies directory.
   domain->SetShadowCopyPath( String::Concat( domain->BaseDirectory, "Assemblies" ) );

   // Turn shadow copying on.
   domain->SetShadowCopyFiles();

   // This will be copied.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly1 text name, Version, Culture, PublicKeyToken" );

   // This will not be copied.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly2 text name, Version, Culture, PublicKeyToken" );

   // When the shadow copy path is cleared, the CLR will make shadow copies
   // of all private assemblies.
   domain->ClearShadowCopyPath();

   // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly3 text name, Version, Culture, PublicKeyToken" );

   // Unload the domain.
   AppDomain::Unload( domain );
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

AppDomain 类
AppDomain 成员
System 命名空间

其他资源

影像复制程序集


AppDomain ..::.SetThreadPrincipal 方法

AppDomain
.
.
::
.
SetThreadPrincipal 方法
AppDomain 类

设置在以下情况下要附加到线程的默认主体对象，即当线程在此应用程序域中执行时，如果线程尝试绑定到主体这种情况。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SecurityPermissionAttribute(SecurityAction.Demand, Flags := SecurityPermissionFlag.ControlPrincipal)> _
Public Sub SetThreadPrincipal ( _
    principal As IPrincipal _
)
[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal)]
public void SetThreadPrincipal(
    IPrincipal principal
)
[SecurityPermissionAttribute(SecurityAction::Demand, Flags = SecurityPermissionFlag::ControlPrincipal)]
public:
virtual void SetThreadPrincipal(
    IPrincipal^ principal
) sealed
[<SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal)>]
abstract SetThreadPrincipal :
        principal:IPrincipal -> unit
[<SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlPrincipal)>]
override SetThreadPrincipal :
        principal:IPrincipal -> unit

参数

principal
类型： System.Security.Principal IPrincipal
要附加到线程的主体对象。

实现

异常 | 条件
ArgumentNullException | principal 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
PolicyException | 已经设置了线程用户。
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

下面的示例显示使用 SetThreadPrincipal 方法更改主体（在应用程序域中可用来附加至正在执行的线程）的影响。该示例还显示使用 SetPrincipalPolicy 方法更改应用程序域的主体策略时对线程的影响。 下面的示例显示使用 SetThreadPrincipal 方法更改主体（在应用程序域中可用来附加至正在执行的线程）的影响。该示例还显示使用 SetPrincipalPolicy 方法更改应用程序域的主体策略时对线程的影响。

Imports System
Imports System.Security.Principal
Imports System.Threading

Class ADPrincipal
    Overloads Shared Sub Main(ByVal args() As String)
        ' Create a new thread with a generic principal.
        Dim t As New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Set the principal policy to WindowsPrincipal.
        Dim currentDomain As AppDomain = AppDomain.CurrentDomain
        currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)

        ' The new thread will have a Windows principal representing the
        ' current user.
        t = New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Create a principal to use for new threads.
        Dim identity = New GenericIdentity("NewUser")
        Dim principal = New GenericPrincipal(identity, Nothing)
        currentDomain.SetThreadPrincipal(principal)

        ' Create a new thread with the principal created above.
        t = New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Wait for user input before terminating.
        Console.ReadLine()
    End Sub 'Main

    Shared Sub PrintPrincipalInformation()
        Dim curPrincipal As IPrincipal = Thread.CurrentPrincipal
        If Not (curPrincipal Is Nothing) Then
            Console.WriteLine("Type: " & CType(curPrincipal, Object).GetType().Name)
            Console.WriteLine("Name: " & curPrincipal.Identity.Name)
            Console.WriteLine("Authenticated: " & curPrincipal.Identity.IsAuthenticated)
            Console.WriteLine()

        End If
    End Sub 'PrintPrincipalInformation
End Class 'ADPrincipal

using System;
using System.Security.Principal;
using System.Threading;

class ADPrincipal
{
    static void Main(string[] args)
    {
        // Create a new thread with a generic principal.
        Thread t = new Thread(new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Set the principal policy to WindowsPrincipal.
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

        // The new thread will have a Windows principal representing the
        // current user.
        t = new Thread(new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Create a principal to use for new threads.
        IIdentity identity = new GenericIdentity("NewUser");
        IPrincipal principal = new GenericPrincipal(identity, null);
        currentDomain.SetThreadPrincipal(principal);

        // Create a new thread with the principal created above.
        t = new Thread(new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Wait for user input before terminating.
        Console.ReadLine();
    }

    static void PrintPrincipalInformation()
    {
        IPrincipal curPrincipal = Thread.CurrentPrincipal;
        if(curPrincipal != null)
        {
            Console.WriteLine("Type: " + curPrincipal.GetType().Name);
            Console.WriteLine("Name: " + curPrincipal.Identity.Name);
            Console.WriteLine("Authenticated: " +
                curPrincipal.Identity.IsAuthenticated);
            Console.WriteLine();
        }
    }
}

using namespace System;
using namespace System::Security::Principal;
using namespace System::Threading;
ref class ADPrincipal
{
public:
   static void PrintPrincipalInformation()
   {
      IPrincipal^ curPrincipal = Thread::CurrentPrincipal;
      if ( curPrincipal != nullptr )
      {
         Console::WriteLine( "Type: {0}", curPrincipal->GetType()->Name );
         Console::WriteLine( "Name: {0}", curPrincipal->Identity->Name );
         Console::WriteLine( "Authenticated: {0}", curPrincipal->Identity->IsAuthenticated );
         Console::WriteLine();
      }
   }

};

int main()
{

   // Create a new thread with a generic principal.
   Thread^ t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();

   // Set the principal policy to WindowsPrincipal.
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   currentDomain->SetPrincipalPolicy( PrincipalPolicy::WindowsPrincipal );

   // The new thread will have a Windows principal representing the
   // current user.
   t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();

   // Create a principal to use for new threads.
   IIdentity^ identity = gcnew GenericIdentity( "NewUser" );
   IPrincipal^ principal = gcnew GenericPrincipal( identity,nullptr );
   currentDomain->SetThreadPrincipal( principal );

   // Create a new thread with the principal created above.
   t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();

   // Wait for user input before terminating.
   Console::ReadLine();
}
  • SecurityPermission

    表示操作主体对象的能力。关联的枚举：SecurityPermissionFlag..::.ControlPrincipal。安全操作：Demand。
表示操作主体对象的能力。关联的枚举：SecurityPermissionFlag..::.ControlPrincipal。安全操作：Demand。
表示操作主体对象的能力。关联的枚举：SecurityPermissionFlag..::.ControlPrincipal。安全操作：Demand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ToString 方法

AppDomain
.
.
::
.
ToString 方法
AppDomain 类

获取一个字符串表示，包含应用程序域友好名称和任意上下文策略。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
一个字符串，通过连接字符串“Name:”、应用程序域的友好名称以及上下文策略的字符串表示或字符串“There are no context policies”而成。

实现

异常 | 条件
AppDomainUnloadedException | 当前 AppDomain 表示的应用程序域已卸载。

下面的代码示例显示 ToString 方法的返回值。

Imports System
Imports System.Reflection
Imports System.Security.Policy
 'for evidence object

Class ADSetup

   Public Shared Sub Main()
      ' Create application domain setup information
      Dim domaininfo As New AppDomainSetup()

      'Create evidence for the new appdomain from evidence of the current application domain
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create appdomain
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo)

      ' Write out application domain information
      Console.WriteLine(("Host domain: " + AppDomain.CurrentDomain.FriendlyName))
      Console.WriteLine(("child domain: " + domain.FriendlyName))
      Console.WriteLine(("child domain name using ToString:" + domain.ToString()))
      Console.WriteLine()

      AppDomain.Unload(domain)
   End Sub 'Main
End Class 'ADSetup

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object
class ADSetup
{
    public static void Main()
    {
        // Create application domain setup information
        AppDomainSetup domaininfo = new AppDomainSetup();

        //Create evidence for the new appdomain from evidence of the current application domain
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;

        // Create appdomain
        AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

        // Write out application domain information
        Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
        Console.WriteLine("child domain: " + domain.FriendlyName);
        Console.WriteLine("child domain name using ToString:" + domain.ToString());
        Console.WriteLine();

        AppDomain.Unload(domain);

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for evidence Object*
int main()
{

   // Create application domain setup information
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;

   //Create evidence for the new appdomain from evidence of the current application domain
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create appdomain
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence, domaininfo );

   // Write out application domain information
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "child domain: {0}", domain->FriendlyName );
   Console::WriteLine( "child domain name using ToString: {0}", domain );
   Console::WriteLine();
   AppDomain::Unload( domain );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.Unload 方法

AppDomain
.
.
::
.
Unload 方法
AppDomain 类

卸载指定的应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain := True)> _
Public Shared Sub Unload ( _
    domain As AppDomain _
)
[SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain = true)]
public static void Unload(
    AppDomain domain
)
[SecurityPermissionAttribute(SecurityAction::Demand, ControlAppDomain = true)]
public:
static void Unload(
    AppDomain^ domain
)
[<SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain = true)>]
static member Unload :
        domain:AppDomain -> unit

参数

domain
类型： System AppDomain
要卸载的应用程序域。
异常 | 条件
ArgumentNullException | domain 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
CannotUnloadAppDomainException | domain 未能卸载。
Exception | 在卸载进程期间出错。

在 .NET Framework 版本 2.0 中，有一个专用于卸载应用程序域的线程。这样可提高可靠性，尤其在 .NET Framework 已承载的情况下。当线程调用 Unload 时，将标记用于卸载的目标域。专用线程尝试卸载域，域中所有线程都中止。如果某个线程不中止，例如，因为其正在执行非托管代码或正在执行 finally 块，则一段时间后，原始调用 Unload 的线程中将引发 CannotUnloadAppDomainException。如果无法中止的线程最终结束，则目标域没有完成卸载。因此，.NET Framework 版本 2.0 中 domain 不能保证卸载，因为其可能无法终止正在执行的线程。 在 .NET Framework 版本 2.0 中，有一个专用于卸载应用程序域的线程。这样可提高可靠性，尤其在 .NET Framework 已承载的情况下。当线程调用 Unload 时，将标记用于卸载的目标域。专用线程尝试卸载域，域中所有线程都中止。如果某个线程不中止，例如，因为其正在执行非托管代码或正在执行 finally 块，则一段时间后，原始调用 Unload 的线程中将引发 CannotUnloadAppDomainException。如果无法中止的线程最终结束，则目标域没有完成卸载。因此，.NET Framework 版本 2.0 中 domain 不能保证卸载，因为其可能无法终止正在执行的线程。 在 .NET Framework 版本 2.0 中，有一个专用于卸载应用程序域的线程。这样可提高可靠性，尤其在 .NET Framework 已承载的情况下。当线程调用 Unload 时，将标记用于卸载的目标域。专用线程尝试卸载域，域中所有线程都中止。如果某个线程不中止，例如，因为其正在执行非托管代码或正在执行 finally 块，则一段时间后，原始调用 Unload 的线程中将引发 CannotUnloadAppDomainException。如果无法中止的线程最终结束，则目标域没有完成卸载。因此，.NET Framework 版本 2.0 中 domain 不能保证卸载，因为其可能无法终止正在执行的线程。 在 .NET Framework 版本 2.0 中，有一个专用于卸载应用程序域的线程。这样可提高可靠性，尤其在 .NET Framework 已承载的情况下。当线程调用 Unload 时，将标记用于卸载的目标域。专用线程尝试卸载域，域中所有线程都中止。如果某个线程不中止，例如，因为其正在执行非托管代码或正在执行 finally 块，则一段时间后，原始调用 Unload 的线程中将引发 CannotUnloadAppDomainException。如果无法中止的线程最终结束，则目标域没有完成卸载。因此，.NET Framework 版本 2.0 中 domain 不能保证卸载，因为其可能无法终止正在执行的线程。 在 .NET Framework 版本 2.0 中，有一个专用于卸载应用程序域的线程。这样可提高可靠性，尤其在 .NET Framework 已承载的情况下。当线程调用 Unload 时，将标记用于卸载的目标域。专用线程尝试卸载域，域中所有线程都中止。如果某个线程不中止，例如，因为其正在执行非托管代码或正在执行 finally 块，则一段时间后，原始调用 Unload 的线程中将引发 CannotUnloadAppDomainException。如果无法中止的线程最终结束，则目标域没有完成卸载。因此，.NET Framework 版本 2.0 中 domain 不能保证卸载，因为其可能无法终止正在执行的线程。 在 .NET Framework 版本 2.0 中，有一个专用于卸载应用程序域的线程。这样可提高可靠性，尤其在 .NET Framework 已承载的情况下。当线程调用 Unload 时，将标记用于卸载的目标域。专用线程尝试卸载域，域中所有线程都中止。如果某个线程不中止，例如，因为其正在执行非托管代码或正在执行 finally 块，则一段时间后，原始调用 Unload 的线程中将引发 CannotUnloadAppDomainException。如果无法中止的线程最终结束，则目标域没有完成卸载。因此，.NET Framework 版本 2.0 中 domain 不能保证卸载，因为其可能无法终止正在执行的线程。 在 .NET Framework 版本 2.0 中，有一个专用于卸载应用程序域的线程。这样可提高可靠性，尤其在 .NET Framework 已承载的情况下。当线程调用 Unload 时，将标记用于卸载的目标域。专用线程尝试卸载域，域中所有线程都中止。如果某个线程不中止，例如，因为其正在执行非托管代码或正在执行 finally 块，则一段时间后，原始调用 Unload 的线程中将引发 CannotUnloadAppDomainException。如果无法中止的线程最终结束，则目标域没有完成卸载。因此，.NET Framework 版本 2.0 中 domain 不能保证卸载，因为其可能无法终止正在执行的线程。

说明 说明

在某些情况下，调用 Unload 将即刻引发 CannotUnloadAppDomainException，例如在终结器中调用时。

domain 中的线程使用 Abort 方法终止，此方法在线程中引发 ThreadAbortException。尽管线程应立刻终止，但是它可能在 finally 子句中继续执行一段时间，而且时间长短无法预计。 domain 中的线程使用 Abort 方法终止，此方法在线程中引发 ThreadAbortException。尽管线程应立刻终止，但是它可能在 finally 子句中继续执行一段时间，而且时间长短无法预计。

版本兼容性

在 .NET Framework 版本 1.0 和 1.1 中，如果调用 Unload 的线程在 domain 中运行，则将启动另一个线程执行卸载操作。如果无法卸载 domain，则在该线程中引发 CannotUnloadAppDomainException，而不是在调用 Unload 的原始线程中引发。但是，如果调用 Unload 的线程正在 domain 外运行，则该线程将会收到该异常。 在 .NET Framework 版本 1.0 和 1.1 中，如果调用 Unload 的线程在 domain 中运行，则将启动另一个线程执行卸载操作。如果无法卸载 domain，则在该线程中引发 CannotUnloadAppDomainException，而不是在调用 Unload 的原始线程中引发。但是，如果调用 Unload 的线程正在 domain 外运行，则该线程将会收到该异常。 在 .NET Framework 版本 1.0 和 1.1 中，如果调用 Unload 的线程在 domain 中运行，则将启动另一个线程执行卸载操作。如果无法卸载 domain，则在该线程中引发 CannotUnloadAppDomainException，而不是在调用 Unload 的原始线程中引发。但是，如果调用 Unload 的线程正在 domain 外运行，则该线程将会收到该异常。

下面的代码示例演示如何卸载应用程序域。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object

Class ADUnload

   Public Shared Sub Main()

      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create the new application domain.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence)

      Console.WriteLine(("Host domain: " + AppDomain.CurrentDomain.FriendlyName))
      Console.WriteLine(("child domain: " + domain.FriendlyName))
      ' Unload the application domain.
      AppDomain.Unload(domain)

      Try
         Console.WriteLine()
         ' Note that the following statement creates an exception because the domain no longer exists.
         Console.WriteLine(("child domain: " + domain.FriendlyName))

      Catch e As AppDomainUnloadedException
         Console.WriteLine("The appdomain MyDomain does not exist.")
      End Try
   End Sub 'Main
End Class 'ADUnload

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object
class ADUnload
{
    public static void Main()
    {

        //Create evidence for the new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;

         // Create the new application domain.
         AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence);

                Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
                Console.WriteLine("child domain: " + domain.FriendlyName);
        // Unload the application domain.
        AppDomain.Unload(domain);

        try
        {
        Console.WriteLine();
        // Note that the following statement creates an exception because the domain no longer exists.
                Console.WriteLine("child domain: " + domain.FriendlyName);
        }

        catch (AppDomainUnloadedException e)
        {
        Console.WriteLine("The appdomain MyDomain does not exist.");
        }

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for evidence Object*
int main()
{

   //Create evidence for the new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create the new application domain.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence );
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "child domain: {0}", domain->FriendlyName );

   // Unload the application domain.
   AppDomain::Unload( domain );
   try
   {
      Console::WriteLine();

      // Note that the following statement creates an exception because the domain no longer exists.
      Console::WriteLine( "child domain: {0}", domain->FriendlyName );
   }
   catch ( AppDomainUnloadedException^ /*e*/ )
   {
      Console::WriteLine( "The appdomain MyDomain does not exist." );
   }

}
  • SecurityPermission

    用于为此事件添加事件处理程序。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
用于为此事件添加事件处理程序。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。
用于为此事件添加事件处理程序。关联的枚举：SecurityPermissionFlag..::.ControlAppDomain。安全操作：Demand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain 属性

AppDomain 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

AppDomain 类型公开以下成员。

名称 说明
页首

参考

AppDomain 类
System 命名空间


AppDomain ..::.ActivationContext 属性

AppDomain
.
.
::
.
ActivationContext 属性
AppDomain 类

获取当前应用程序域的激活上下文。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ActivationContext As ActivationContext
    Get
public ActivationContext ActivationContext { get; }
public:
property ActivationContext^ ActivationContext {
    ActivationContext^ get ();
}
member ActivationContext : ActivationContext

属性值

类型： System ActivationContext
一个 ActivationContext 对象，表示当前应用程序域的激活上下文；或者如果域没有激活上下文，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ApplicationIdentity 属性

AppDomain
.
.
::
.
ApplicationIdentity 属性
AppDomain 类

获得应用程序域中的应用程序标识。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ApplicationIdentity As ApplicationIdentity
    Get
public ApplicationIdentity ApplicationIdentity { get; }
public:
property ApplicationIdentity^ ApplicationIdentity {
    ApplicationIdentity^ get ();
}
member ApplicationIdentity : ApplicationIdentity

属性值

类型： System ApplicationIdentity
标识应用程序域中应用程序的 ApplicationIdentity 对象。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ApplicationTrust 属性

AppDomain
.
.
::
.
ApplicationTrust 属性
AppDomain 类

获取说明授予应用程序的权限以及应用程序是否拥有允许其运行的信任级别的信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ApplicationTrust As ApplicationTrust
    Get
public ApplicationTrust ApplicationTrust { get; }
public:
property ApplicationTrust^ ApplicationTrust {
    ApplicationTrust^ get ();
}
member ApplicationTrust : ApplicationTrust

属性值

类型： System.Security.Policy ApplicationTrust
封装应用程序域中应用程序的权限及信任信息的 ApplicationTrust 对象。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.BaseDirectory 属性

AppDomain
.
.
::
.
BaseDirectory 属性
AppDomain 类

获取基目录，它由程序集冲突解决程序用来探测程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property BaseDirectory As String
    Get
public string BaseDirectory { get; }
public:
virtual property String^ BaseDirectory {
    String^ get () sealed;
}
abstract BaseDirectory : string
override BaseDirectory : string

属性值

类型： System String
基目录，由程序集冲突解决程序用来探测程序集。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

此属性对应于 AppDomainSetup..::.ApplicationBase 属性。也可使用包含字符串“APPBASE”的 GetData 方法来检索此属性。 此属性对应于 AppDomainSetup..::.ApplicationBase 属性。也可使用包含字符串“APPBASE”的 GetData 方法来检索此属性。

下面的代码示例创建一个新的应用程序域，并指定搜索要加载到该域中的程序集时所使用的基目录。然后，该示例使用 BaseDirectory 属性获取基目录路径，以显示到控制台。 下面的代码示例创建一个新的应用程序域，并指定搜索要加载到该域中的程序集时所使用的基目录。然后，该示例使用 BaseDirectory 属性获取基目录路径，以显示到控制台。

Imports System
Imports System.Reflection
Imports System.Security.Policy
 'for evidence object

Class ADSetup

   Public Shared Sub Main()
      ' Create the application domain setup information.
      Dim domaininfo As New AppDomainSetup()
      domaininfo.ConfigurationFile = System.Environment.CurrentDirectory + "ADSetup.exe.config"
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory

      'Create evidence for the new appdomain from evidence of the current application domain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create appdomain.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo)

      ' Write out the application domain information.
      Console.WriteLine(("Host domain: " + AppDomain.CurrentDomain.FriendlyName))
      Console.WriteLine(("child domain: " + domain.FriendlyName))
      Console.WriteLine()
      Console.WriteLine(("Configuration file is: " + domain.SetupInformation.ConfigurationFile))
      Console.WriteLine(("Application Base Directory is: " + domain.BaseDirectory))

      AppDomain.Unload(domain)
   End Sub
End Class

using System;
using System.Reflection;
using System.Security.Policy;

class ADSetup
{
    public static void Main()
    {
        // Create application domain setup information
        AppDomainSetup domaininfo = new AppDomainSetup();
        domaininfo.ConfigurationFile = System.Environment.CurrentDirectory + "ADSetup.exe.config";
        domaininfo.ApplicationBase = System.Environment.CurrentDirectory;

        //Create evidence for the new appdomain from evidence of the current application domain
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;

        // Create appdomain
        AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

        // Write out application domain information
        Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
        Console.WriteLine("child domain: " + domain.FriendlyName);
        Console.WriteLine();
        Console.WriteLine("Configuration file is: " + domain.SetupInformation.ConfigurationFile);
        Console.WriteLine("Application Base Directory is: " + domain.BaseDirectory);

        AppDomain.Unload(domain);
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for evidence Object
int main()
{

   // Create application domain setup information
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;
   domaininfo->ConfigurationFile = String::Format( "{0}ADSetup.exe.config", System::Environment::CurrentDirectory );
   domaininfo->ApplicationBase = String::Format( "{0}", System::Environment::CurrentDirectory );

   //Create evidence for the new appdomain from evidence of the current application domain
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create appdomain
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence, domaininfo );

   // Write out application domain information
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "child domain: {0}", domain->FriendlyName );
   Console::WriteLine();
   Console::WriteLine( "Configuration file is: {0}", domain->SetupInformation->ConfigurationFile );
   Console::WriteLine( "Application Base Directory is: {0}", domain->BaseDirectory );
   AppDomain::Unload( domain );
}
  • FileIOPermission

    用于访问路径本身包含的信息，包括路径是否为“file://”、\\UNC\dir 或“c:\”格式。关联枚举：FileIOPermissionAccess..::.PathDiscovery。 用于访问路径本身包含的信息，包括路径是否为“file://”、\\UNC\dir 或“c:\”格式。关联枚举：FileIOPermissionAccess..::.PathDiscovery。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
AppDomainSetup ApplicationBase


AppDomain ..::.CurrentDomain 属性

AppDomain
.
.
::
.
CurrentDomain 属性
AppDomain 类

获取当前 Thread 的当前应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property CurrentDomain As AppDomain
    Get
public static AppDomain CurrentDomain { get; }
public:
static property AppDomain^ CurrentDomain {
    AppDomain^ get ();
}
static member CurrentDomain : AppDomain

属性值

类型： System AppDomain
当前应用程序域。

下面的代码示例使用来自当前应用程序域的证据创建一个新的应用程序域。CurrentDomain 属性用于获取表示当前应用程序域的 AppDomain 对象，并且可以使用 Evidence 属性获取证据。FriendlyName 属性提供当前应用程序域的名称，该名称随后会显示在命令行。 下面的代码示例使用来自当前应用程序域的证据创建一个新的应用程序域。CurrentDomain 属性用于获取表示当前应用程序域的 AppDomain 对象，并且可以使用 Evidence 属性获取证据。FriendlyName 属性提供当前应用程序域的名称，该名称随后会显示在命令行。 下面的代码示例使用来自当前应用程序域的证据创建一个新的应用程序域。CurrentDomain 属性用于获取表示当前应用程序域的 AppDomain 对象，并且可以使用 Evidence 属性获取证据。FriendlyName 属性提供当前应用程序域的名称，该名称随后会显示在命令行。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object

Class ADSetupInformation

   Public Shared Sub Main()
      ' Create the applcation domain setup information.
      Dim domaininfo As New AppDomainSetup()
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory
      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create the new application domain using setup information.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo)

      ' Write out the application domain information.
      Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName)
      Console.WriteLine("new child domain: " + domain.FriendlyName)
      Console.WriteLine()
      Console.WriteLine("Application base is: " + domain.SetupInformation.ApplicationBase)

      AppDomain.Unload(domain)
   End Sub
End Class 'ADSetupInformation

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object

class ADSetupInformation
{
    public static void Main()
    {
        //Create the application domain setup information.
        AppDomainSetup domaininfo = new AppDomainSetup();
        domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
        //Create evidence for new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;
        // Create the new application domain using setup information.
        AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

        // Write out the application domain information.
            Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("new child domain: " + domain.FriendlyName);
            Console.WriteLine();
            Console.WriteLine("Application base is: " + domain.SetupInformation.ApplicationBase);

        AppDomain.Unload(domain);

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for evidence Object
int main()
{

   //Create the application domain setup information.
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;
   domaininfo->ApplicationBase = System::Environment::CurrentDirectory;

   //Create evidence for new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create the new application domain using setup information.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence, domaininfo );

   // Write Out the application domain information.
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "new child domain: {0}", domain->FriendlyName );
   Console::WriteLine();
   Console::WriteLine( "Application base is: {0}", domain->SetupInformation->ApplicationBase );
   AppDomain::Unload( domain );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.DomainManager 属性

AppDomain
.
.
::
.
DomainManager 属性
AppDomain 类

获得初始化应用程序域时主机提供的域管理器。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DomainManager As AppDomainManager
    Get
public AppDomainManager DomainManager { get; }
public:
property AppDomainManager^ DomainManager {
    AppDomainManager^ get ();
}
member DomainManager : AppDomainManager

属性值

类型： System AppDomainManager
一个 AppDomainManager 对象，表示初始化应用程序域时主机提供的域管理器；或者如果没有提供域管理器，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

公共语言运行时 (CLR) 的非托管主机可以提供域管理器。域管理器可以参与初始化新应用程序域以及提供参与应用程序域操作的其他管理器（如 HostSecurityManager）。 公共语言运行时 (CLR) 的非托管主机可以提供域管理器。域管理器可以参与初始化新应用程序域以及提供参与应用程序域操作的其他管理器（如 HostSecurityManager）。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.DynamicDirectory 属性

AppDomain
.
.
::
.
DynamicDirectory 属性
AppDomain 类

获取目录，它由程序集冲突解决程序用来探测动态创建的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DynamicDirectory As String
    Get
public string DynamicDirectory { get; }
public:
virtual property String^ DynamicDirectory {
    String^ get () sealed;
}
abstract DynamicDirectory : string
override DynamicDirectory : string

属性值

类型： System String
获取目录，它由程序集冲突解决程序用来探测动态创建的程序集。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

仅在尝试向此域中加载程序集之后，此属性才可用。

下面的示例创建应用程序域并为动态程序集设置目录。该示例使用 DynamicDirectory 属性检索目录名称，因此可以创建目录。然后该示例创建一个动态程序集。 下面的示例创建应用程序域并为动态程序集设置目录。该示例使用 DynamicDirectory 属性检索目录名称，因此可以创建目录。然后该示例创建一个动态程序集。 下面的示例创建应用程序域并为动态程序集设置目录。该示例使用 DynamicDirectory 属性检索目录名称，因此可以创建目录。然后该示例创建一个动态程序集。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Class ADDynamicBase

   ' SetDynamicBase.exe
   Overloads Shared Sub Main(args() As String)
      ' Create a new AppDomain.
      Dim setup As New AppDomainSetup()
      ' Need to set the application name before setting the dynamic base.
      setup.ApplicationName = "MyApplication"
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", Nothing, setup)

      ' Tell the domain to search for assemblies in subdirectories
      ' of DynamicAssemblyDir.
      domain.SetDynamicBase("C:\DynamicAssemblyDir")

      ' Note that the actual dynamic directory has the form
      ' <DynamicBase>\<number>\<ApplicationName>, rather than
      ' simply <DynamicBase>.
      Dim dynamicDir As [String] = domain.DynamicDirectory
      ' The AssemblyBuilder won't create this directory automatically.
      If Not System.IO.Directory.Exists(dynamicDir) Then
         System.IO.Directory.CreateDirectory(dynamicDir)
      End If

      ' Define the dynamic assembly.
      Dim asmName As New AssemblyName()
      asmName.Name = "DynamicHelloWorld"
      Dim asm As AssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Save, dynamicDir)

      ' Define a dynamic module in the assembly.
      Dim [mod] As ModuleBuilder
      [mod] = asm.DefineDynamicModule("DynamicHelloWorld", "DynamicHelloWorld.dll")

      ' Define the "HelloWorld" type in the module.
      Dim typ As TypeBuilder = [mod].DefineType("HelloWorld", TypeAttributes.Public)

      ' Define the "SayHello" method.
      Dim meth As MethodBuilder = typ.DefineMethod("SayHello", MethodAttributes.Public, Nothing, Nothing)
      Dim il As ILGenerator = meth.GetILGenerator()
      il.EmitWriteLine("Hello World!")
      il.Emit(OpCodes.Ret)

      ' Complete the HelloWorld type.
      typ.CreateType()

      ' Save the assembly to the dynamic assembly directory.
      asm.Save("DynamicHelloWorld.dll")

      ' Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
      domain.ExecuteAssembly("MyExecutable.exe")
   End Sub 'Main
End Class 'ADDynamicBase

using System;
using System.Reflection;
using System.Reflection.Emit;

namespace AppDomainSnippets
{
    class ADDynamicBase
    {
        // SetDynamicBase.exe
        static void Main(string[] args)
        {
            // Create a new AppDomain.
            AppDomainSetup setup = new AppDomainSetup();
            // Need to set the application name before setting the dynamic base.
            setup.ApplicationName = "MyApplication";
            AppDomain domain = AppDomain.CreateDomain("MyDomain", null, setup);

            // Tell the domain to search for assemblies in subdirectories
            // of DynamicAssemblyDir.
            domain.SetDynamicBase("C:\\DynamicAssemblyDir");

            // Note that the actual dynamic directory has the form
            // <DynamicBase>\<number>\<ApplicationName>, rather than
            // simply <DynamicBase>.
            String dynamicDir = domain.DynamicDirectory;
            // The AssemblyBuilder won't create this directory automatically.
            if(!System.IO.Directory.Exists(dynamicDir))
            {
                System.IO.Directory.CreateDirectory(dynamicDir);
            }

            // Define the dynamic assembly.
            AssemblyName asmName = new AssemblyName();
            asmName.Name = "DynamicHelloWorld";
            AssemblyBuilder asm = AppDomain.CurrentDomain.DefineDynamicAssembly
                (asmName, AssemblyBuilderAccess.Save, dynamicDir);

            // Define a dynamic module in the assembly.
            ModuleBuilder mod;
            mod = asm.DefineDynamicModule
                ("DynamicHelloWorld", "DynamicHelloWorld.dll");

            // Define the "HelloWorld" type in the module.
            TypeBuilder typ = mod.DefineType
                ("HelloWorld", TypeAttributes.Public);

            // Define the "SayHello" method.
            MethodBuilder meth = typ.DefineMethod
                ("SayHello", MethodAttributes.Public, null, null);
            ILGenerator il = meth.GetILGenerator();
            il.EmitWriteLine("Hello World!");
            il.Emit(OpCodes.Ret);

            // Complete the HelloWorld type.
            typ.CreateType();

            // Save the assembly to the dynamic assembly directory.
            asm.Save("DynamicHelloWorld.dll");

            // Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
            domain.ExecuteAssembly("MyExecutable.exe");
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

// SetDynamicBase.exe
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();

   // Create a new AppDomain.
   AppDomainSetup^ setup = gcnew AppDomainSetup;

   // Need to set the application name before setting the dynamic base.
   setup->ApplicationName = "MyApplication";
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", nullptr, setup );

   // Tell the domain to search for assemblies in subdirectories
   // of DynamicAssemblyDir.
   domain->SetDynamicBase( "C:\\DynamicAssemblyDir" );

   // Note that the actual dynamic directory has the form
   // <DynamicBase>\<number>\<ApplicationName>, rather than
   // simply <DynamicBase>.
   String^ dynamicDir = domain->DynamicDirectory;

   // The AssemblyBuilder won't create this directory automatically.
   if (  !System::IO::Directory::Exists( dynamicDir ) )
   {
      System::IO::Directory::CreateDirectory( dynamicDir );
   }

   // Define the dynamic assembly.
   AssemblyName^ asmName = gcnew AssemblyName;
   asmName->Name = "DynamicHelloWorld";
   AssemblyBuilder^ asmb = AppDomain::CurrentDomain->DefineDynamicAssembly( asmName, AssemblyBuilderAccess::Save, dynamicDir );

   // Define a dynamic module in the assembly.
   ModuleBuilder^ mod;
   mod = asmb->DefineDynamicModule( "DynamicHelloWorld", "DynamicHelloWorld.dll" );

   // Define the S"HelloWorld" type in the module.
   TypeBuilder^ typ = mod->DefineType( "HelloWorld", TypeAttributes::Public );

   // Define the S"SayHello" method.
   MethodBuilder^ meth = typ->DefineMethod( "SayHello", MethodAttributes::Public, nullptr, nullptr );
   ILGenerator^ il = meth->GetILGenerator();
   il->EmitWriteLine( "Hello World!" );
   il->Emit( OpCodes::Ret );

   // Complete the HelloWorld type.
   typ->CreateType();

   // Save the assembly to the dynamic assembly directory.
   asmb->Save( "DynamicHelloWorld.dll" );

   // Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
   domain->ExecuteAssembly( "MyExecutable.exe" );
}
  • FileIOPermission

    用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery。 用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.Evidence 属性

AppDomain
.
.
::
.
Evidence 属性
AppDomain 类

获取与此应用程序域相关联的 Evidence，它用作安全策略的输入。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Evidence As Evidence
    Get
public Evidence Evidence { get; }
public:
virtual property Evidence^ Evidence {
    Evidence^ get () sealed;
}
abstract Evidence : Evidence
override Evidence : Evidence

属性值

类型： System.Security.Policy Evidence
获取与此应用程序域相关联的 Evidence，它用作安全策略的输入。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

下面的示例演示如何使用 Evidence 属性检索与当前应用程序域相关联的证据。该示例修改证据并将其用于创建新的应用程序域。 下面的示例演示如何使用 Evidence 属性检索与当前应用程序域相关联的证据。该示例修改证据并将其用于创建新的应用程序域。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object
Imports System.Security 'for securityzone object
Imports System.Collections 'for IEnumerator

Class ADCreateDomain

   Public Shared Sub Main()
      ' Create appdomainsetup information for new appdomain.
      Dim domaininfo As New AppDomainSetup()
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory
      domaininfo.ConfigurationFile = System.Environment.CurrentDirectory & "\ADCreateDomain.exe.config"
      domaininfo.ApplicationName = "MyApplication"
      domaininfo.LicenseFile = System.Environment.CurrentDirectory & "\license.txt"

      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence
      'Add the zone and url information to restrict permissions assigned to the appdomain.
      adevidence.AddHost(New Url("http://www.example.com"))
      adevidence.AddHost(New Zone(SecurityZone.Internet))

      ' Create the application domain.
      Dim newDomain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo)

      ' Write out the application domain information.
      Console.WriteLine("Host domain: " & AppDomain.CurrentDomain.FriendlyName)
      Console.WriteLine("child domain: " & newDomain.FriendlyName)
      Console.WriteLine()
      Console.WriteLine("Application base is: " & newDomain.SetupInformation.ApplicationBase)
      Console.WriteLine("Configuration file is: " & newDomain.SetupInformation.ConfigurationFile)
      Console.WriteLine("Application name is: " & newDomain.SetupInformation.ApplicationName)
      Console.WriteLine("License file is: " & newDomain.SetupInformation.LicenseFile)

      Dim newevidenceenum As IEnumerator = newDomain.Evidence.GetEnumerator()
      While newevidenceenum.MoveNext()
         Console.WriteLine(newevidenceenum.Current)
      End While

      AppDomain.Unload(newDomain)
   End Sub 'Main
End Class 'ADCreateDomain

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object
using System.Security;  //for securityzone object
using System.Collections;  //for IEnumerator

class ADCreateDomain
{
    public static void Main()
    {
        // Create appdomainsetup information for the new appdomain.
        AppDomainSetup domaininfo = new AppDomainSetup();
        domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
        domaininfo.ConfigurationFile = System.Environment.CurrentDirectory	+ "\\ADCreateDomain.exe.config";
        domaininfo.ApplicationName = "MyApplication";
        domaininfo.LicenseFile = System.Environment.CurrentDirectory + "\\license.txt";

        //Create evidence for new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;
        //Add the zone and url information to restrict permissions assigned to the appdomain.
        adevidence.AddHost(new Url("http://www.example.com"));
        adevidence.AddHost(new Zone(SecurityZone.Internet));

        // Create the application domain.
        AppDomain newDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

        // Write out the application domain information.
        Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
        Console.WriteLine("child domain: " + newDomain.FriendlyName);
        Console.WriteLine();
        Console.WriteLine("Application base is: " + newDomain.SetupInformation.ApplicationBase);
        Console.WriteLine("Configuration file is: " + newDomain.SetupInformation.ConfigurationFile);
        Console.WriteLine("Application name is: " + newDomain.SetupInformation.ApplicationName);
        Console.WriteLine("License file is: " + newDomain.SetupInformation.LicenseFile);

        IEnumerator newevidenceenum = newDomain.Evidence.GetEnumerator();
        while(newevidenceenum.MoveNext())
            Console.WriteLine(newevidenceenum.Current);

        AppDomain.Unload(newDomain);

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;
//for evidence object
using namespace System::Security;
//for securityzone object
using namespace System::Collections;

//for IEnumerator
int main()
{

   // Create appdomainsetup information for the new appdomain.
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;
   domaininfo->ApplicationBase = System::Environment::CurrentDirectory;
   domaininfo->ConfigurationFile = System::Environment::CurrentDirectory + "\\ADCreateDomain.exe.config";
   domaininfo->ApplicationName = "MyApplication";
   domaininfo->LicenseFile = System::Environment::CurrentDirectory + "\\license.txt";

   //Create evidence for new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   //Add the zone and url information to restrict permissions assigned to the appdomain.
   adevidence->AddHost( gcnew Url( "http://www.example.com" ) );
   adevidence->AddHost( gcnew Zone( SecurityZone::Internet ) );

   // Create the application domain.
   AppDomain^ newDomain = AppDomain::CreateDomain( "MyDomain", adevidence, domaininfo );

   // Write out the application domain information.
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "child domain: {0}", newDomain->FriendlyName );
   Console::WriteLine();
   Console::WriteLine( "Application base is: {0}", newDomain->SetupInformation->ApplicationBase );
   Console::WriteLine( "Configuration file is: {0}", newDomain->SetupInformation->ConfigurationFile );
   Console::WriteLine( "Application name is: {0}", newDomain->SetupInformation->ApplicationName );
   Console::WriteLine( "License file is: {0}", newDomain->SetupInformation->LicenseFile );
   IEnumerator^ newevidenceenum = newDomain->Evidence->GetEnumerator();
   while ( newevidenceenum->MoveNext() )
      Console::WriteLine( newevidenceenum->Current );

   AppDomain::Unload( newDomain );
}
  • SecurityPermission

    以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。安全操作：Demand。
以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。安全操作：Demand。
以使用证据加载程序集。关联的枚举：SecurityPermissionFlag..::.ControlEvidence。安全操作：Demand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.FriendlyName 属性

AppDomain
.
.
::
.
FriendlyName 属性
AppDomain 类

获取此应用程序域的友好名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property FriendlyName As String
    Get
public string FriendlyName { get; }
public:
virtual property String^ FriendlyName {
    String^ get () sealed;
}
abstract FriendlyName : string
override FriendlyName : string

属性值

类型： System String
此应用程序域的友好名称。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

默认应用程序域的友好名称是进程可执行文件的文件名。例如，如果用于启动进程的可执行文件为 "c:\MyAppDirectory\MyAssembly.exe"，则默认应用程序域的友好名称为 "MyAssembly.exe"。 默认应用程序域的友好名称是进程可执行文件的文件名。例如，如果用于启动进程的可执行文件为 "c:\MyAppDirectory\MyAssembly.exe"，则默认应用程序域的友好名称为 "MyAssembly.exe"。

下面的代码示例使用 FriendlyName 属性获取当前应用程序域的友好名称。对于默认应用程序域，友好名称是应用程序的可执行文件的名称。该代码示例还显示有关应用程序域的其他信息。 下面的代码示例使用 FriendlyName 属性获取当前应用程序域的友好名称。对于默认应用程序域，友好名称是应用程序的可执行文件的名称。该代码示例还显示有关应用程序域的其他信息。 下面的代码示例使用 FriendlyName 属性获取当前应用程序域的友好名称。对于默认应用程序域，友好名称是应用程序的可执行文件的名称。该代码示例还显示有关应用程序域的其他信息。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object

Class ADSetupInformation

   Public Shared Sub Main()
      ' Create the applcation domain setup information.
      Dim domaininfo As New AppDomainSetup()
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory
      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create the new application domain using setup information.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo)

      ' Write out the application domain information.
      Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName)
      Console.WriteLine("new child domain: " + domain.FriendlyName)
      Console.WriteLine()
      Console.WriteLine("Application base is: " + domain.SetupInformation.ApplicationBase)

      AppDomain.Unload(domain)
   End Sub
End Class 'ADSetupInformation

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object

class ADSetupInformation
{
    public static void Main()
    {
        //Create the application domain setup information.
        AppDomainSetup domaininfo = new AppDomainSetup();
        domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
        //Create evidence for new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;
        // Create the new application domain using setup information.
        AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

        // Write out the application domain information.
            Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("new child domain: " + domain.FriendlyName);
            Console.WriteLine();
            Console.WriteLine("Application base is: " + domain.SetupInformation.ApplicationBase);

        AppDomain.Unload(domain);

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for evidence Object
int main()
{

   //Create the application domain setup information.
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;
   domaininfo->ApplicationBase = System::Environment::CurrentDirectory;

   //Create evidence for new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create the new application domain using setup information.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence, domaininfo );

   // Write Out the application domain information.
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "new child domain: {0}", domain->FriendlyName );
   Console::WriteLine();
   Console::WriteLine( "Application base is: {0}", domain->SetupInformation->ApplicationBase );
   AppDomain::Unload( domain );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.Id 属性

AppDomain
.
.
::
.
Id 属性
AppDomain 类

获得一个整数，该整数唯一标识进程中的应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Id As Integer
    Get
public int Id { get; }
public:
property int Id {
    int get ();
}
member Id : int

属性值

类型： System Int32
标识应用程序域的整数。

下面的代码示例创建另一个应用程序域，并显示有关默认域和新域的信息。

Imports System
Imports System.Reflection

Public Class Example

    ' The following attribute indicates to the loader that assemblies
    ' in the global assembly cache should be shared across multiple
    ' application domains.
    <LoaderOptimizationAttribute(LoaderOptimization.MultiDomainHost)> _
    Public Shared Sub Main()
        ' Show information for the default application domain.
        ShowDomainInfo()

        ' Create a new application domain and display its information.
        Dim newDomain As AppDomain = AppDomain.CreateDomain("MyMultiDomain")
        newDomain.DoCallBack(AddressOf ShowDomainInfo)

    End Sub 'Main

    ' This method has the same signature as the CrossAppDomainDelegate,
    ' so that it can be executed easily in the new application domain.
    '
    Public Shared Sub ShowDomainInfo()
        Dim ad As AppDomain = AppDomain.CurrentDomain
        Console.WriteLine()
        Console.WriteLine("FriendlyName: {0}", ad.FriendlyName)
        Console.WriteLine("Id: {0}", ad.Id)
        Console.WriteLine("IsDefaultAppDomain: {0}", ad.IsDefaultAppDomain())

    End Sub
End Class

using System;
using System.Reflection;

public class Example
{
    // The following attribute indicates to the loader that assemblies
    // in the global assembly cache should be shared across multiple
    // application domains.
    [LoaderOptimizationAttribute( LoaderOptimization.MultiDomainHost)]
    public static void Main()
    {
        // Show information for the default application domain.
        ShowDomainInfo();

        // Create a new application domain and display its information.
        AppDomain newDomain = AppDomain.CreateDomain("MyMultiDomain");
        newDomain.DoCallBack(new CrossAppDomainDelegate(ShowDomainInfo));
    }

    // This method has the same signature as the CrossAppDomainDelegate,
    // so that it can be executed easily in the new application domain.
    //
    public static void ShowDomainInfo()
    {
        AppDomain ad = AppDomain.CurrentDomain;
        Console.WriteLine();
        Console.WriteLine("FriendlyName: {0}", ad.FriendlyName);
        Console.WriteLine("Id: {0}", ad.Id);
        Console.WriteLine("IsDefaultAppDomain: {0}", ad.IsDefaultAppDomain());
    }
}

using namespace System;
using namespace System::Reflection;

// This method has the same signature as the CrossAppDomainDelegate,
// so that it can be executed easily in the new application domain.
//
static void ShowDomainInfo()
{
    AppDomain^ ad = AppDomain::CurrentDomain;
    Console::WriteLine();
    Console::WriteLine( L"FriendlyName: {0}", ad->FriendlyName );
    Console::WriteLine( L"Id: {0}", ad->Id );
    Console::WriteLine( L"IsDefaultAppDomain: {0}", ad->IsDefaultAppDomain() );
}

// The following attribute indicates to the loader that assemblies
// in the global assembly cache should be shared across multiple
// application domains.
//
[LoaderOptimizationAttribute(LoaderOptimization::MultiDomainHost)]
int main()
{
    // Show information for the default application domain.
    ShowDomainInfo();

    // Create a new application domain and display its information.
    AppDomain^ newDomain = AppDomain::CreateDomain( L"MyMultiDomain" );
    newDomain->DoCallBack( gcnew CrossAppDomainDelegate( ShowDomainInfo ) );

    return 0;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.IsFullyTrusted 属性

AppDomain
.
.
::
.
IsFullyTrusted 属性
AppDomain 类

获取一个值，该值指示加载到当前应用程序域的程序集是否是以完全信任方式执行的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsFullyTrusted As Boolean
    Get
public bool IsFullyTrusted { get; }
public:
property bool IsFullyTrusted {
    bool get ();
}
member IsFullyTrusted : bool

属性值

类型： System Boolean
如果加载到当前应用程序域的程序集是以完全信任方式执行的，则为 true；否则，为 false。

对于在桌面上运行的应用程序的默认应用程序域，此方法总是返回 true。它为使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 创建的沙盒应用程序域返回 false，除非授予应用程序域的权限等效于完全信任。 对于在桌面上运行的应用程序的默认应用程序域，此方法总是返回 true。它为使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 创建的沙盒应用程序域返回 false，除非授予应用程序域的权限等效于完全信任。

下面的实例演示 IsFullyTrusted 属性和 Assembly..::.IsFullyTrusted 属性以及完全受信任的和部分受信任的应用程序域。完全受信任的应用程序域是应用程序的默认应用程序域。部分受信任的应用程序域使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建。 下面的实例演示 IsFullyTrusted 属性和 Assembly..::.IsFullyTrusted 属性以及完全受信任的和部分受信任的应用程序域。完全受信任的应用程序域是应用程序的默认应用程序域。部分受信任的应用程序域使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建。 下面的实例演示 IsFullyTrusted 属性和 Assembly..::.IsFullyTrusted 属性以及完全受信任的和部分受信任的应用程序域。完全受信任的应用程序域是应用程序的默认应用程序域。部分受信任的应用程序域使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建。

该示例使用从 MarshalByRefObject 派生的 Worker 类，因此可以跨应用程序域边界封送。该示例在默认应用程序域中创建 Worker 对象。然后，它调用 TestIsFullyTrusted 方法来显示应用程序域以及加载到应用程序域的两个程序集的属性值：mscorlib（.NET Framework 的一部分）和示例程序集。应用程序域是完全受信任的，因此这两个程序集都完全受信任。 该示例使用从 MarshalByRefObject 派生的 Worker 类，因此可以跨应用程序域边界封送。该示例在默认应用程序域中创建 Worker 对象。然后，它调用 TestIsFullyTrusted 方法来显示应用程序域以及加载到应用程序域的两个程序集的属性值：mscorlib（.NET Framework 的一部分）和示例程序集。应用程序域是完全受信任的，因此这两个程序集都完全受信任。 该示例使用从 MarshalByRefObject 派生的 Worker 类，因此可以跨应用程序域边界封送。该示例在默认应用程序域中创建 Worker 对象。然后，它调用 TestIsFullyTrusted 方法来显示应用程序域以及加载到应用程序域的两个程序集的属性值：mscorlib（.NET Framework 的一部分）和示例程序集。应用程序域是完全受信任的，因此这两个程序集都完全受信任。 该示例使用从 MarshalByRefObject 派生的 Worker 类，因此可以跨应用程序域边界封送。该示例在默认应用程序域中创建 Worker 对象。然后，它调用 TestIsFullyTrusted 方法来显示应用程序域以及加载到应用程序域的两个程序集的属性值：mscorlib（.NET Framework 的一部分）和示例程序集。应用程序域是完全受信任的，因此这两个程序集都完全受信任。

该示例在沙盒应用程序域中创建另一个 Worker 对象，然后调用 TestIsFullyTrusted 方法。Mscorlib 始终受信任，即使在部分受信任的应用程序域中，但示例程序集是部分受信任。 该示例在沙盒应用程序域中创建另一个 Worker 对象，然后调用 TestIsFullyTrusted 方法。Mscorlib 始终受信任，即使在部分受信任的应用程序域中，但示例程序集是部分受信任。

Public Class Worker
    Inherits MarshalByRefObject

    Shared Sub Main()

        Dim w As New Worker()
        w.TestIsFullyTrusted()

        Dim adSandbox As AppDomain = GetInternetSandbox()
        w = CType(adSandbox.CreateInstanceAndUnwrap(
                            System.Reflection.Assembly.GetExecutingAssembly().FullName,
                            GetType(Worker).FullName),
                  Worker)
        w.TestIsFullyTrusted()

    End Sub

    Public Sub TestIsFullyTrusted()

        Dim ad As AppDomain = AppDomain.CurrentDomain
        Console.WriteLine(vbCrLf & "Application domain '{0}': IsFullyTrusted = {1}",
                          ad.FriendlyName, ad.IsFullyTrusted)

        Console.WriteLine("   IsFullyTrusted = {0} for the current assembly",
                          System.Reflection.Assembly.GetExecutingAssembly().IsFullyTrusted)

        Console.WriteLine("   IsFullyTrusted = {0} for mscorlib",
                          GetType(Integer).Assembly.IsFullyTrusted)

    End Sub

    ' ------------ Helper method ---------------------------------------
    Shared Function GetInternetSandbox() As AppDomain

        ' Create the permission set to grant to all assemblies.
        Dim hostEvidence As New System.Security.Policy.Evidence()
        hostEvidence.AddHostEvidence(
                    New System.Security.Policy.Zone(System.Security.SecurityZone.Internet))
        Dim pset As System.Security.PermissionSet =
                           System.Security.SecurityManager.GetStandardSandbox(hostEvidence)

        ' Identify the folder to use for the sandbox.
        Dim ads As New AppDomainSetup()
        ads.ApplicationBase = System.IO.Directory.GetCurrentDirectory()

        ' Create the sandboxed application domain.
        Return AppDomain.CreateDomain("Sandbox", hostEvidence, ads, pset, Nothing)

    End Function
End Class

' This example produces output similar to the following:
'
'Application domain 'Example.exe': IsFullyTrusted = True
'   IsFullyTrusted = True for the current assembly
'   IsFullyTrusted = True for mscorlib
'
'Application domain 'Sandbox': IsFullyTrusted = False
'   IsFullyTrusted = False for the current assembly
'   IsFullyTrusted = True for mscorlib
'

using System;

namespace SimpleSandboxing
{
    public class Worker : MarshalByRefObject
    {
        static void Main()
        {
            Worker w = new Worker();
            w.TestIsFullyTrusted();

            AppDomain adSandbox = GetInternetSandbox();
            w = (Worker) adSandbox.CreateInstanceAndUnwrap(
                               System.Reflection.Assembly.GetExecutingAssembly().FullName,
                               typeof(Worker).FullName);
            w.TestIsFullyTrusted();
        }

        public void TestIsFullyTrusted()
        {
            AppDomain ad = AppDomain.CurrentDomain;
            Console.WriteLine("\r\nApplication domain '{0}': IsFullyTrusted = {1}",
                                        ad.FriendlyName, ad.IsFullyTrusted);

            Console.WriteLine("   IsFullyTrusted = {0} for the current assembly",
                             System.Reflection.Assembly.GetExecutingAssembly().IsFullyTrusted);

            Console.WriteLine("   IsFullyTrusted = {0} for mscorlib",
                                        typeof(int).Assembly.IsFullyTrusted);
        }

        // ------------ Helper method ---------------------------------------
        static AppDomain GetInternetSandbox()
        {
            // Create the permission set to grant to all assemblies.
            System.Security.Policy.Evidence hostEvidence = new System.Security.Policy.Evidence();
            hostEvidence.AddHostEvidence(new System.Security.Policy.Zone(
                                                         System.Security.SecurityZone.Internet));
            System.Security.PermissionSet pset =
                                System.Security.SecurityManager.GetStandardSandbox(hostEvidence);

            // Identify the folder to use for the sandbox.
            AppDomainSetup ads = new AppDomainSetup();
            ads.ApplicationBase = System.IO.Directory.GetCurrentDirectory();

            // Create the sandboxed application domain.
            return AppDomain.CreateDomain("Sandbox", hostEvidence, ads, pset, null);
        }
    }
}

/* This example produces output similar to the following:

Application domain 'Example.exe': IsFullyTrusted = True
   IsFullyTrusted = True for the current assembly
   IsFullyTrusted = True for mscorlib

Application domain 'Sandbox': IsFullyTrusted = False
   IsFullyTrusted = False for the current assembly
   IsFullyTrusted = True for mscorlib
 */

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.IsHomogenous 属性

AppDomain
.
.
::
.
IsHomogenous 属性
AppDomain 类

获取一个值，该值指示当前应用程序域是否拥有一个为加载到该应用程序域的所有程序集授予的权限集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsHomogenous As Boolean
    Get
public bool IsHomogenous { get; }
public:
property bool IsHomogenous {
    bool get ();
}
member IsHomogenous : bool

属性值

类型： System Boolean
如果当前应用程序域具有一组同构权限，则为 true；否则，为 false。

对于使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建的沙盒应用程序域，此属性返回 true。沙盒应用程序域具有同构权限集，也就是说相同权限集授予给加载到应用程序域的所有部分受信任程序集。沙盒应用程序域（可选）有一个不受此权限集限制而在完全信任下运行的具有强名称的程序集的列表。 对于使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建的沙盒应用程序域，此属性返回 true。沙盒应用程序域具有同构权限集，也就是说相同权限集授予给加载到应用程序域的所有部分受信任程序集。沙盒应用程序域（可选）有一个不受此权限集限制而在完全信任下运行的具有强名称的程序集的列表。 对于使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建的沙盒应用程序域，此属性返回 true。沙盒应用程序域具有同构权限集，也就是说相同权限集授予给加载到应用程序域的所有部分受信任程序集。沙盒应用程序域（可选）有一个不受此权限集限制而在完全信任下运行的具有强名称的程序集的列表。

完全受信任的代码可以使用 PermissionSet 属性来确定沙盒应用程序域的同构授予集。

此属性还为桌面应用程序的默认应用程序域返回 true，因为该应用程序域将为所有程序集授予完全信任。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
PermissionSet


AppDomain ..::.MonitoringIsEnabled 属性

AppDomain
.
.
::
.
MonitoringIsEnabled 属性
AppDomain 类

获取或设置一个值，该值指示是否对当前进程启用应用程序域的 CPU 和内存监视。一旦对进程启用了监视，则无法将其禁用。 获取或设置一个值，该值指示是否对当前进程启用应用程序域的 CPU 和内存监视。一旦对进程启用了监视，则无法将其禁用。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property MonitoringIsEnabled As Boolean
    Get
    Set
public static bool MonitoringIsEnabled { get; set; }
public:
static property bool MonitoringIsEnabled {
    bool get ();
    void set (bool value);
}
static member MonitoringIsEnabled : bool with get, set

属性值

类型： System Boolean
如果启用监视，则为 true；否则为 false。
异常 | 条件
ArgumentException | 当前进程尝试将值 false 分配给该属性。

此 static 属性（在 Visual Basic 中为 Shared 属性）控制进程中所有应用程序域的 CPU 和内存监视。

如果尝试将此属性设置为 false，则会引发 ArgumentException 异常，即使属性的当前值为 false。

在启用了监视后，您可以使用 MonitoringSurvivedMemorySize、MonitoringSurvivedProcessMemorySize、MonitoringTotalAllocatedMemorySize 和 MonitoringTotalProcessorTime 实例属性监视各个应用程序域的 CPU 和内存使用情况。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间

其他资源

应用程序域资源监控
<appDomainResourceMonitoring> 元素


AppDomain ..::.MonitoringSurvivedMemorySize 属性

AppDomain
.
.
::
.
MonitoringSurvivedMemorySize 属性
AppDomain 类

获取上次完全阻止回收后保留下来的、已知由当前应用程序域引用的字节数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property MonitoringSurvivedMemorySize As Long
    Get
public long MonitoringSurvivedMemorySize { get; }
public:
property long long MonitoringSurvivedMemorySize {
    long long get ();
}
member MonitoringSurvivedMemorySize : int64

属性值

类型： System Int64
保留下来的字节数。
异常 | 条件
InvalidOperationException | static（在 Visual Basic 中为 Shared）MonitoringIsEnabled 属性设置为 false。

只有在完整的阻塞式回收（包括所有生成且在回收时停止应用程序）后才会更新统计信息。例如，GC..::.Collect()()() 方法重载执行完整的阻塞式回收。（并发回收在后台执行，不会阻塞应用程序。）
只有在完整的阻塞式回收（包括所有生成且在回收时停止应用程序）后才会更新统计信息。例如，GC..::.Collect()()() 方法重载执行完整的阻塞式回收。（并发回收在后台执行，不会阻塞应用程序。）
只有在完整的阻塞式回收（包括所有生成且在回收时停止应用程序）后才会更新统计信息。例如，GC..::.Collect()()() 方法重载执行完整的阻塞式回收。（并发回收在后台执行，不会阻塞应用程序。）

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间

其他资源

应用程序域资源监控


AppDomain ..::.MonitoringSurvivedProcessMemorySize 属性

AppDomain
.
.
::
.
MonitoringSurvivedProcessMemorySize 属性
AppDomain 类

获取进程中所有应用程序域的上次完全阻止回收后保留下来的总字节数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property MonitoringSurvivedProcessMemorySize As Long
    Get
public static long MonitoringSurvivedProcessMemorySize { get; }
public:
static property long long MonitoringSurvivedProcessMemorySize {
    long long get ();
}
static member MonitoringSurvivedProcessMemorySize : int64

属性值

类型： System Int64
进程的保留下来的总字节数。
异常 | 条件
InvalidOperationException | static（在 Visual Basic 中为 Shared）MonitoringIsEnabled 属性设置为 false。

在完整的阻塞回收之后，此数字表示托管堆中当前保留的字节数。应该接近于 GetTotalMemory 方法报告的数值。 在完整的阻塞回收之后，此数字表示托管堆中当前保留的字节数。应该接近于 GetTotalMemory 方法报告的数值。

只有在完整的阻塞式回收（包括所有生成且在回收时停止应用程序）后才会更新统计信息。例如，GC..::.Collect()()() 方法重载执行完整的阻塞式回收。（并发回收在后台执行，不会阻塞应用程序。）
只有在完整的阻塞式回收（包括所有生成且在回收时停止应用程序）后才会更新统计信息。例如，GC..::.Collect()()() 方法重载执行完整的阻塞式回收。（并发回收在后台执行，不会阻塞应用程序。）
只有在完整的阻塞式回收（包括所有生成且在回收时停止应用程序）后才会更新统计信息。例如，GC..::.Collect()()() 方法重载执行完整的阻塞式回收。（并发回收在后台执行，不会阻塞应用程序。）

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间

其他资源

应用程序域资源监控


AppDomain ..::.MonitoringTotalAllocatedMemorySize 属性

AppDomain
.
.
::
.
MonitoringTotalAllocatedMemorySize 属性
AppDomain 类

获取自从创建应用程序域后由应用程序域进行的所有内存分配的总大小（以字节为单位，不扣除已回收的内存）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property MonitoringTotalAllocatedMemorySize As Long
    Get
public long MonitoringTotalAllocatedMemorySize { get; }
public:
property long long MonitoringTotalAllocatedMemorySize {
    long long get ();
}
member MonitoringTotalAllocatedMemorySize : int64

属性值

类型： System Int64
所有内存分配的总大小。
异常 | 条件
InvalidOperationException | static（在 Visual Basic 中为 Shared）MonitoringIsEnabled 属性设置为 false。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间

其他资源

应用程序域资源监控


AppDomain ..::.MonitoringTotalProcessorTime 属性

AppDomain
.
.
::
.
MonitoringTotalProcessorTime 属性
AppDomain 类

获取自从进程启动后所有线程在当前应用程序域中执行时所使用的总处理器时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property MonitoringTotalProcessorTime As TimeSpan
    Get
public TimeSpan MonitoringTotalProcessorTime { get; }
public:
property TimeSpan MonitoringTotalProcessorTime {
    TimeSpan get ();
}
member MonitoringTotalProcessorTime : TimeSpan

属性值

类型： System TimeSpan
当前应用程序域的总处理器时间。
异常 | 条件
InvalidOperationException | static（在 Visual Basic 中为 Shared）MonitoringIsEnabled 属性设置为 false。

为应用程序域报告的总时间包括进程中的每个线程在该应用程序域中执行所花的时间。

调用到非托管代码的线程仍与应用程序域关联，为进行调用的应用程序域报告执行非托管代码所用的处理器时间。

当一个线程被阻止或正在休眠，它不占用处理器时间。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间

其他资源

应用程序域资源监控


AppDomain ..::.PermissionSet 属性

AppDomain
.
.
::
.
PermissionSet 属性
AppDomain 类

获取沙盒应用程序域的权限集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property PermissionSet As PermissionSet
    Get
public PermissionSet PermissionSet { get; }
public:
property PermissionSet^ PermissionSet {
    PermissionSet^ get ();
}
member PermissionSet : PermissionSet

属性值

类型： System.Security PermissionSet
沙盒应用程序域的权限集。

使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建的沙盒应用程序域具有同构权限集，也就是说相同权限集授予给加载到应用程序域的所有部分受信任程序集。沙盒应用程序域（可选）有一个不受此权限集限制而在完全信任下运行的具有强名称的程序集的列表。 使用 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法重载创建的沙盒应用程序域具有同构权限集，也就是说相同权限集授予给加载到应用程序域的所有部分受信任程序集。沙盒应用程序域（可选）有一个不受此权限集限制而在完全信任下运行的具有强名称的程序集的列表。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
IsHomogenous


AppDomain ..::.RelativeSearchPath 属性

AppDomain
.
.
::
.
RelativeSearchPath 属性
AppDomain 类

获取基目录下的路径，在此程序集冲突解决程序应探测专用程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property RelativeSearchPath As String
    Get
public string RelativeSearchPath { get; }
public:
virtual property String^ RelativeSearchPath {
    String^ get () sealed;
}
abstract RelativeSearchPath : string
override RelativeSearchPath : string

属性值

类型： System String
基目录下的路径，在此程序集冲突解决程序应探测专用程序集。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

专用程序集与应用程序部署在同一目录结构中。如果 RelativeSearchPath 属性指定的路径不在 AppDomainSetup..::.ApplicationBase 下，则忽略它。 专用程序集与应用程序部署在同一目录结构中。如果 RelativeSearchPath 属性指定的路径不在 AppDomainSetup..::.ApplicationBase 下，则忽略它。

此属性返回使用 AppDomainSetup..::.PrivateBinPath 设置的值。

下面的示例创建一个使用影像复制的新应用程序域。该示例使用 RelativeSearchPath 属性检索专用程序集的基目录，然后将其显示在控制台中。 下面的示例创建一个使用影像复制的新应用程序域。该示例使用 RelativeSearchPath 属性检索专用程序集的基目录，然后将其显示在控制台中。

要编译并运行此示例，必须在代码中的指示位置插入程序集的有效显示名称。

Imports System
Imports System.Security.Policy
 'for evidence object

Class ADProperties

    Shared Sub Main(args() As String)

        Dim setup As New AppDomainSetup()
        ' Shadow copying will not work unless the application has a name.
        setup.ApplicationName = "MyApplication"

        'Create evidence for the new application domain from evidence of
        ' current application domain.
        Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

        ' Create a new application domain.
        Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, setup)

        ' MyAssembly.dll is located in the Assemblies subdirectory.
        domain.AppendPrivatePath("Assemblies")
        ' MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
        ' MoreAssemblies subdirectory.
        domain.AppendPrivatePath("MoreAssemblies")
        ' Display the relative search path.
        Console.WriteLine("RelativeSearchPath: " & domain.RelativeSearchPath)
        ' Because Load returns an Assembly object, the assemblies must be
        ' loaded into the current domain as well. This will fail unless the
        ' current domain also has these directories in its search path.
        AppDomain.CurrentDomain.AppendPrivatePath("Assemblies")
        AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies")

        ' Save shadow copies to C:\Cache
        domain.SetCachePath("C:\Cache")
        ' Shadow copy only the assemblies in the Assemblies directory.
        domain.SetShadowCopyPath(domain.BaseDirectory + "Assemblies")
        ' Turn shadow copying on.
        domain.SetShadowCopyFiles()
        Console.WriteLine("ShadowCopyFiles turned on: " & domain.ShadowCopyFiles)

        ' This will be copied.
        ' You must supply a valid fully qualified assembly name here.
        domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken")
        ' This will not be copied.
        ' You must supply a valid fully qualified assembly name here.
        domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken")

        ' When the shadow copy path is cleared, the CLR will make shadow copies
        ' of all private assemblies.
        domain.ClearShadowCopyPath()
        ' MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
        ' You must supply a valid fully qualified assembly name here.
        domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken")

        ' Unload the domain.
        AppDomain.Unload(domain)
    End Sub 'Main
End Class 'ADProperties

using System;
using System.Security.Policy;  //for evidence object
namespace AppDomainSnippets
{
    class ADProperties
    {
        static void Main(string[] args)
        {

            AppDomainSetup setup = new AppDomainSetup();
            // Shadow copying will not work unless the application has a name.
            setup.ApplicationName = "MyApplication";

            //Create evidence for the new application domain from evidence of
            // current application domain.
            Evidence adevidence = AppDomain.CurrentDomain.Evidence;

            // Create a new application domain.
            AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, setup);

            // MyAssembly.dll is located in the Assemblies subdirectory.
            domain.AppendPrivatePath("Assemblies");
            // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
            // MoreAssemblies subdirectory.
            domain.AppendPrivatePath("MoreAssemblies");
            // Display the relative search path.
            Console.WriteLine("RelativeSearchPath: " + domain.RelativeSearchPath);
            // Because Load returns an Assembly object, the assemblies must be
            // loaded into the current domain as well. This will fail unless the
            // current domain also has these directories in its search path.
            AppDomain.CurrentDomain.AppendPrivatePath("Assemblies");
            AppDomain.CurrentDomain.AppendPrivatePath("MoreAssemblies");

            // Save shadow copies to C:\Cache
            domain.SetCachePath("C:\\Cache");
            // Shadow copy only the assemblies in the Assemblies directory.
            domain.SetShadowCopyPath(domain.BaseDirectory + "Assemblies");
            // Turn shadow copying on.
            domain.SetShadowCopyFiles();
            Console.WriteLine("ShadowCopyFiles turned on: " + domain.ShadowCopyFiles);

            // This will be copied.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly1 text name, Version, Culture, PublicKeyToken");
            // This will not be copied.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly2 text name, Version, Culture, PublicKeyToken");

            // When the shadow copy path is cleared, the CLR will make shadow copies
            // of all private assemblies.
            domain.ClearShadowCopyPath();
            // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
            // You must supply a valid fully qualified assembly name here.
            domain.Load("Assembly3 text name, Version, Culture, PublicKeyToken");

            // Unload the domain.
            AppDomain.Unload(domain);
        }
    }
}

using namespace System;
using namespace System::Security::Policy;

//for evidence object
int main()
{
   AppDomainSetup^ setup = gcnew AppDomainSetup;

   // Shadow copying will not work unless the application has a name.
   setup->ApplicationName = "MyApplication";

   //Create evidence for the new application domain from evidence of
   // current application domain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create a new application domain.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence, setup );

   // MyAssembly.dll is located in the Assemblies subdirectory.
   domain->AppendPrivatePath( "Assemblies" );

   // MyOtherAssembly.dll and MyThirdAssembly.dll are located in the
   // MoreAssemblies subdirectory.
   domain->AppendPrivatePath( "MoreAssemblies" );

   // Display the relative search path.
   Console::WriteLine( "RelativeSearchPath: {0}", domain->RelativeSearchPath );

   // Because Load returns an Assembly object, the assemblies must be
   // loaded into the current domain as well. This will fail unless the
   // current domain also has these directories in its search path.
   AppDomain::CurrentDomain->AppendPrivatePath( "Assemblies" );
   AppDomain::CurrentDomain->AppendPrivatePath( "MoreAssemblies" );

   // Save shadow copies to C:\Cache
   domain->SetCachePath( "C:\\Cache" );

   // Shadow copy only the assemblies in the Assemblies directory.
   domain->SetShadowCopyPath( String::Concat( domain->BaseDirectory, "Assemblies" ) );

   // Turn shadow copying on.
   domain->SetShadowCopyFiles();
   Console::WriteLine( "ShadowCopyFiles turned on: {0}", domain->ShadowCopyFiles );

   // This will be copied.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly1 text name, Version, Culture, PublicKeyToken" );

   // This will not be copied.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly2 text name, Version, Culture, PublicKeyToken" );

   // When the shadow copy path is cleared, the CLR will make shadow copies
   // of all private assemblies.
   domain->ClearShadowCopyPath();

   // MoreAssemblies\MyThirdAssembly.dll should be shadow copied this time.
   // You must supply a valid fully qualified assembly name here.
   domain->Load( "Assembly3 text name, Version, Culture, PublicKeyToken" );

   // Unload the domain.
   AppDomain::Unload( domain );
}
  • FileIOPermission

    用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery。 用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
AppDomainSetup PrivateBinPath


AppDomain ..::.SetupInformation 属性

AppDomain
.
.
::
.
SetupInformation 属性
AppDomain 类

获取此实例的应用程序域配置信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property SetupInformation As AppDomainSetup
    Get
public AppDomainSetup SetupInformation { get; }
public:
property AppDomainSetup^ SetupInformation {
    AppDomainSetup^ get ();
}
member SetupInformation : AppDomainSetup

属性值

类型： System AppDomainSetup
应用程序域初始化信息。
异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

下面的代码示例演示如何使用 SetupInformation 属性获取有关应用程序域的信息。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object
Imports System.Security 'for securityzone object
Imports System.Collections 'for IEnumerator

Class ADCreateDomain

   Public Shared Sub Main()
      ' Create appdomainsetup information for new appdomain.
      Dim domaininfo As New AppDomainSetup()
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory
      domaininfo.ConfigurationFile = System.Environment.CurrentDirectory & "\ADCreateDomain.exe.config"
      domaininfo.ApplicationName = "MyApplication"
      domaininfo.LicenseFile = System.Environment.CurrentDirectory & "\license.txt"

      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence
      'Add the zone and url information to restrict permissions assigned to the appdomain.
      adevidence.AddHost(New Url("http://www.example.com"))
      adevidence.AddHost(New Zone(SecurityZone.Internet))

      ' Create the application domain.
      Dim newDomain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo)

      ' Write out the application domain information.
      Console.WriteLine("Host domain: " & AppDomain.CurrentDomain.FriendlyName)
      Console.WriteLine("child domain: " & newDomain.FriendlyName)
      Console.WriteLine()
      Console.WriteLine("Application base is: " & newDomain.SetupInformation.ApplicationBase)
      Console.WriteLine("Configuration file is: " & newDomain.SetupInformation.ConfigurationFile)
      Console.WriteLine("Application name is: " & newDomain.SetupInformation.ApplicationName)
      Console.WriteLine("License file is: " & newDomain.SetupInformation.LicenseFile)

      Dim newevidenceenum As IEnumerator = newDomain.Evidence.GetEnumerator()
      While newevidenceenum.MoveNext()
         Console.WriteLine(newevidenceenum.Current)
      End While

      AppDomain.Unload(newDomain)
   End Sub 'Main
End Class 'ADCreateDomain

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object
using System.Security;  //for securityzone object
using System.Collections;  //for IEnumerator

class ADCreateDomain
{
    public static void Main()
    {
        // Create appdomainsetup information for the new appdomain.
        AppDomainSetup domaininfo = new AppDomainSetup();
        domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
        domaininfo.ConfigurationFile = System.Environment.CurrentDirectory	+ "\\ADCreateDomain.exe.config";
        domaininfo.ApplicationName = "MyApplication";
        domaininfo.LicenseFile = System.Environment.CurrentDirectory + "\\license.txt";

        //Create evidence for new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;
        //Add the zone and url information to restrict permissions assigned to the appdomain.
        adevidence.AddHost(new Url("http://www.example.com"));
        adevidence.AddHost(new Zone(SecurityZone.Internet));

        // Create the application domain.
        AppDomain newDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

        // Write out the application domain information.
        Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
        Console.WriteLine("child domain: " + newDomain.FriendlyName);
        Console.WriteLine();
        Console.WriteLine("Application base is: " + newDomain.SetupInformation.ApplicationBase);
        Console.WriteLine("Configuration file is: " + newDomain.SetupInformation.ConfigurationFile);
        Console.WriteLine("Application name is: " + newDomain.SetupInformation.ApplicationName);
        Console.WriteLine("License file is: " + newDomain.SetupInformation.LicenseFile);

        IEnumerator newevidenceenum = newDomain.Evidence.GetEnumerator();
        while(newevidenceenum.MoveNext())
            Console.WriteLine(newevidenceenum.Current);

        AppDomain.Unload(newDomain);

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;
//for evidence object
using namespace System::Security;
//for securityzone object
using namespace System::Collections;

//for IEnumerator
int main()
{

   // Create appdomainsetup information for the new appdomain.
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;
   domaininfo->ApplicationBase = System::Environment::CurrentDirectory;
   domaininfo->ConfigurationFile = System::Environment::CurrentDirectory + "\\ADCreateDomain.exe.config";
   domaininfo->ApplicationName = "MyApplication";
   domaininfo->LicenseFile = System::Environment::CurrentDirectory + "\\license.txt";

   //Create evidence for new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   //Add the zone and url information to restrict permissions assigned to the appdomain.
   adevidence->AddHost( gcnew Url( "http://www.example.com" ) );
   adevidence->AddHost( gcnew Zone( SecurityZone::Internet ) );

   // Create the application domain.
   AppDomain^ newDomain = AppDomain::CreateDomain( "MyDomain", adevidence, domaininfo );

   // Write out the application domain information.
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "child domain: {0}", newDomain->FriendlyName );
   Console::WriteLine();
   Console::WriteLine( "Application base is: {0}", newDomain->SetupInformation->ApplicationBase );
   Console::WriteLine( "Configuration file is: {0}", newDomain->SetupInformation->ConfigurationFile );
   Console::WriteLine( "Application name is: {0}", newDomain->SetupInformation->ApplicationName );
   Console::WriteLine( "License file is: {0}", newDomain->SetupInformation->LicenseFile );
   IEnumerator^ newevidenceenum = newDomain->Evidence->GetEnumerator();
   while ( newevidenceenum->MoveNext() )
      Console::WriteLine( newevidenceenum->Current );

   AppDomain::Unload( newDomain );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ShadowCopyFiles 属性

AppDomain
.
.
::
.
ShadowCopyFiles 属性
AppDomain 类

获取应用程序域是否配置为影像副本文件的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ShadowCopyFiles As Boolean
    Get
public bool ShadowCopyFiles { get; }
public:
virtual property bool ShadowCopyFiles {
    bool get () sealed;
}
abstract ShadowCopyFiles : bool
override ShadowCopyFiles : bool

属性值

类型： System Boolean
如果应用程序域配置为影像副本文件，则为 true；否则为 false。

实现

异常 | 条件
AppDomainUnloadedException | 尝试对已卸载的应用程序域进行操作。

有关更多信息，请参见AppDomainSetup..::.ShadowCopyFiles和 影像复制程序集。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
AppDomainSetup ShadowCopyFiles

其他资源

影像复制程序集


AppDomain 事件

AppDomain 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomain 类

AppDomain 类型公开以下成员。

名称 说明
页首

参考

AppDomain 类
System 命名空间


AppDomain ..::.AssemblyLoad 事件

AppDomain
.
.
::
.
AssemblyLoad 事件
AppDomain 类

在加载程序集时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Event AssemblyLoad As AssemblyLoadEventHandler
public event AssemblyLoadEventHandler AssemblyLoad
public:
virtual  event AssemblyLoadEventHandler^ AssemblyLoad {
    void add (AssemblyLoadEventHandler^ value);
    void remove (AssemblyLoadEventHandler^ value);
}
abstract AssemblyLoad : IEvent<AssemblyLoadEventHandler,
    AssemblyLoadEventArgs>
override AssemblyLoad : IEvent<AssemblyLoadEventHandler,
    AssemblyLoadEventArgs>

实现

此事件的 AssemblyLoadEventHandler 委托指示已加载了哪个程序集。

若要为此事件注册事件处理程序，必须具有所需权限，否则将引发 SecurityException。

有关处理事件的更多信息，请参见使用事件。

下面的示例阐释 AssemblyLoad 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Option Strict On
Option Explicit On

Imports System
Imports System.Reflection

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      AddHandler currentDomain.AssemblyLoad, AddressOf MyAssemblyLoadEventHandler

      PrintLoadedAssemblies(currentDomain)
      ' Lists mscorlib and this assembly

      ' You must supply a valid fully qualified assembly name here.
      currentDomain.CreateInstance("System.Windows.Forms,Version,Culture,PublicKeyToken", "System.Windows.Forms.TextBox")
      ' Loads System, System.Drawing, System.Windows.Forms

      PrintLoadedAssemblies(currentDomain)
      ' Lists all five assemblies
   End Sub 'Main

   Sub PrintLoadedAssemblies(domain As AppDomain)
      Console.WriteLine("LOADED ASSEMBLIES:")
      Dim a As System.Reflection.Assembly
      For Each a In domain.GetAssemblies()
         Console.WriteLine(a.FullName)
      Next a
      Console.WriteLine()
   End Sub 'PrintLoadedAssemblies

   Sub MyAssemblyLoadEventHandler(sender As Object, args As AssemblyLoadEventArgs)
      Console.WriteLine("ASSEMBLY LOADED: " + args.LoadedAssembly.FullName)
      Console.WriteLine()
   End Sub 'MyAssemblyLoadEventHandler

End Module 'Test

using System;
using System.Reflection;

class Test {

   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      currentDomain.AssemblyLoad += new AssemblyLoadEventHandler(MyAssemblyLoadEventHandler);

      PrintLoadedAssemblies(currentDomain);
      // Lists mscorlib and this assembly

      // You must supply a valid fully qualified assembly name here.
      currentDomain.CreateInstance("System.Windows.Forms, Version, Culture, PublicKeyToken", "System.Windows.Forms.TextBox");
      // Loads System, System.Drawing, System.Windows.Forms

      PrintLoadedAssemblies(currentDomain);
      // Lists all five assemblies
   }

   static void PrintLoadedAssemblies(AppDomain domain) {
      Console.WriteLine("LOADED ASSEMBLIES:");
      foreach (Assembly a in domain.GetAssemblies()) {
         Console.WriteLine(a.FullName);
      }
      Console.WriteLine();
   }

   static void MyAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args) {
      Console.WriteLine("ASSEMBLY LOADED: " + args.LoadedAssembly.FullName);
      Console.WriteLine();
   }
}

using namespace System;
using namespace System::Reflection;
ref class Test
{
public:
   static void MyAssemblyLoadEventHandler( Object^ sender, AssemblyLoadEventArgs^ args )
   {
      Console::WriteLine( "ASSEMBLY LOADED: {0}", args->LoadedAssembly->FullName );
      Console::WriteLine();
   }

};

void PrintLoadedAssemblies( AppDomain^ domain )
{
   Console::WriteLine( "LOADED ASSEMBLIES:" );
   System::Collections::IEnumerator^ myEnum = domain->GetAssemblies()->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Assembly^ a = safe_cast<Assembly^>(myEnum->Current);
      Console::WriteLine( a->FullName );
   }

   Console::WriteLine();
}

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   currentDomain->AssemblyLoad += gcnew AssemblyLoadEventHandler( Test::MyAssemblyLoadEventHandler );
   PrintLoadedAssemblies( currentDomain );

   // Lists mscorlib and this assembly
   // You must supply a valid fully qualified assembly name here.
   currentDomain->CreateInstance( "System.Windows.Forms, Version, Culture, PublicKeyToken", "System.Windows.Forms.TextBox" );

   // Loads System, System::Drawing, System::Windows::Forms
   PrintLoadedAssemblies( currentDomain );

   // Lists all five assemblies
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.AssemblyResolve 事件

AppDomain
.
.
::
.
AssemblyResolve 事件
AppDomain 类

在对程序集的解析失败时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Event AssemblyResolve As ResolveEventHandler
public event ResolveEventHandler AssemblyResolve
public:
virtual  event ResolveEventHandler^ AssemblyResolve {
    void add (ResolveEventHandler^ value);
    void remove (ResolveEventHandler^ value);
}
abstract AssemblyResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>
override AssemblyResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>

实现

此事件的 ResolveEventHandler 负责返回 ResolveEventArgs..::.Name 属性指定的程序集。程序集必须加载到执行上下文中；如果加载到只反射上下文中，导致此事件引发的加载会失败。 此事件的 ResolveEventHandler 负责返回 ResolveEventArgs..::.Name 属性指定的程序集。程序集必须加载到执行上下文中；如果加载到只反射上下文中，导致此事件引发的加载会失败。

从 .NET Framework 4 版开始，ResolveEventArgs..::.RequestingAssembly 属性返回请求了不能解析的程序集加载的程序集。例如，加载程序可能无法加载请求程序集的依赖项，因为请求程序集及其依赖项不在探测路径中。了解请求程序集的标识可能有助于定位依赖项或标识依赖项的正确版本（如果有多个版本可用）。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。
从 .NET Framework 4 版开始，ResolveEventArgs..::.RequestingAssembly 属性返回请求了不能解析的程序集加载的程序集。例如，加载程序可能无法加载请求程序集的依赖项，因为请求程序集及其依赖项不在探测路径中。了解请求程序集的标识可能有助于定位依赖项或标识依赖项的正确版本（如果有多个版本可用）。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。
从 .NET Framework 4 版开始，ResolveEventArgs..::.RequestingAssembly 属性返回请求了不能解析的程序集加载的程序集。例如，加载程序可能无法加载请求程序集的依赖项，因为请求程序集及其依赖项不在探测路径中。了解请求程序集的标识可能有助于定位依赖项或标识依赖项的正确版本（如果有多个版本可用）。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。
从 .NET Framework 4 版开始，ResolveEventArgs..::.RequestingAssembly 属性返回请求了不能解析的程序集加载的程序集。例如，加载程序可能无法加载请求程序集的依赖项，因为请求程序集及其依赖项不在探测路径中。了解请求程序集的标识可能有助于定位依赖项或标识依赖项的正确版本（如果有多个版本可用）。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。

对于此事件，ResolveEventArgs..::.Name 属性在应用策略之前返回程序集名称。

有关处理事件的更多信息，请参见使用事件。

下面的示例阐释 AssemblyResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Public Class MyType

   Public Sub New()
      Console.WriteLine("MyType instantiated!")
   End Sub 'New

End Class 'MyType

Module Test

   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain

      InstantiateMyType(currentDomain)    ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler

      InstantiateMyType(currentDomain)    ' OK!
   End Sub 'Main

   Sub InstantiateMyType(domain As AppDomain)
      Try
     ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'InstantiateMyType

   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As [Assembly]
      Console.WriteLine("Resolving...")
      Return GetType(MyType).Assembly
   End Function 'MyResolveEventHandler

End Module 'Test

public class MyType {
   public MyType() {
      Console.WriteLine("MyType instantiated!");
   }
}

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyType(currentDomain);    // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyType(currentDomain);    // OK!
   }

   static void InstantiateMyType(AppDomain domain) {
      try {
     // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      Console.WriteLine("Resolving...");
      return typeof(MyType).Assembly;
   }
}

public ref class MyType
{
public:
   MyType()
   {
      Console::WriteLine( "MyType instantiated!" );
   }

};

ref class Test
{
public:
   static void InstantiateMyType( AppDomain^ domain )
   {
      try
      {
         // You must supply a valid fully qualified assembly name here.
         domain->CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyType" );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( e->Message );
      }
   }

   static Assembly^ MyResolveEventHandler( Object^ sender, ResolveEventArgs^ args )
   {
      Console::WriteLine( "Resolving..." );
      return MyType::typeid->Assembly;
   }
};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyType( currentDomain ); // OK!
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
ResolveEventArgs RequestingAssembly


AppDomain ..::.DomainUnload 事件

AppDomain
.
.
::
.
DomainUnload 事件
AppDomain 类

在即将卸载 AppDomain 时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Event DomainUnload As EventHandler
public event EventHandler DomainUnload
public:
virtual  event EventHandler^ DomainUnload {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
abstract DomainUnload : IEvent<EventHandler,
    EventArgs>
override DomainUnload : IEvent<EventHandler,
    EventArgs>

实现

在卸载应用程序域之前，此事件的 EventHandler 委托可以执行任何终止活动。

每个需要在卸载时执行处理的应用程序域都应为此事件注册事件处理程序。不应使用共享的事件处理程序，因为 EventHandler 委托将无法识别正在卸载的域。 每个需要在卸载时执行处理的应用程序域都应为此事件注册事件处理程序。不应使用共享的事件处理程序，因为 EventHandler 委托将无法识别正在卸载的域。

说明 说明

默认应用程序域中从不引发此事件。

请勿对引发事件所在的线程做出假设。该事件可以在调用 Unload 方法的线程之外的线程上引发。 请勿对引发事件所在的线程做出假设。该事件可以在调用 Unload 方法的线程之外的线程上引发。

若要为此事件注册事件处理程序，必须具有所需权限，否则将引发 SecurityException。

有关处理事件的更多信息，请参见使用事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.FirstChanceException 事件

AppDomain
.
.
::
.
FirstChanceException 事件
AppDomain 类

在运行时进行其第一遍搜索来查找合适的异常处理程序之前，在托管代码中首次出现异常时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Event FirstChanceException As EventHandler(Of FirstChanceExceptionEventArgs)
public event EventHandler<FirstChanceExceptionEventArgs> FirstChanceException
public:
 event EventHandler<FirstChanceExceptionEventArgs^>^ FirstChanceException {
    void add (EventHandler<FirstChanceExceptionEventArgs^>^ value);
    void remove (EventHandler<FirstChanceExceptionEventArgs^>^ value);
}
member FirstChanceException : IEvent<EventHandler<FirstChanceExceptionEventArgs>,
    FirstChanceExceptionEventArgs>

此事件只是一个通知。处理此事件时不处理该异常。处理该事件后，公共语言运行库 (CLR) 将开始第一次搜索匹配的异常处理程序。此事件为应用程序域提供了检查任何托管异常的第一个机会。 此事件只是一个通知。处理此事件时不处理该异常。处理该事件后，公共语言运行库 (CLR) 将开始第一次搜索匹配的异常处理程序。此事件为应用程序域提供了检查任何托管异常的第一个机会。 此事件只是一个通知。处理此事件时不处理该异常。处理该事件后，公共语言运行库 (CLR) 将开始第一次搜索匹配的异常处理程序。此事件为应用程序域提供了检查任何托管异常的第一个机会。 此事件只是一个通知。处理此事件时不处理该异常。处理该事件后，公共语言运行库 (CLR) 将开始第一次搜索匹配的异常处理程序。此事件为应用程序域提供了检查任何托管异常的第一个机会。

事件可以按应用程序域处理。如果一个线程在执行调用时通过多个应用程序域（也就是说如果来自多个应用程序域的方法位于堆栈上），当堆栈展开时，则会在注册了事件处理程序的每个应用程序域中引发该事件。处理该事件后，匹配的异常处理程序在该应用程序域中进行搜索。如果没有找到，则不会在下一个应用程序域中引发事件。 事件可以按应用程序域处理。如果一个线程在执行调用时通过多个应用程序域（也就是说如果来自多个应用程序域的方法位于堆栈上），当堆栈展开时，则会在注册了事件处理程序的每个应用程序域中引发该事件。处理该事件后，匹配的异常处理程序在该应用程序域中进行搜索。如果没有找到，则不会在下一个应用程序域中引发事件。 事件可以按应用程序域处理。如果一个线程在执行调用时通过多个应用程序域（也就是说如果来自多个应用程序域的方法位于堆栈上），当堆栈展开时，则会在注册了事件处理程序的每个应用程序域中引发该事件。处理该事件后，匹配的异常处理程序在该应用程序域中进行搜索。如果没有找到，则不会在下一个应用程序域中引发事件。 事件可以按应用程序域处理。如果一个线程在执行调用时通过多个应用程序域（也就是说如果来自多个应用程序域的方法位于堆栈上），当堆栈展开时，则会在注册了事件处理程序的每个应用程序域中引发该事件。处理该事件后，匹配的异常处理程序在该应用程序域中进行搜索。如果没有找到，则不会在下一个应用程序域中引发事件。

您必须处理在 FirstChanceException 事件的事件处理程序中发生的所有异常。否则，触发升级策略，应用程序终止。您的程序将不会收到任何进一步的通知事件。建议将此事件的事件处理程序以限定执行区域 (CER) 方式实现，以免基础结构相关的异常（如内存不足或堆栈溢出）在处理异常通知时影响虚拟机。 您必须处理在 FirstChanceException 事件的事件处理程序中发生的所有异常。否则，触发升级策略，应用程序终止。您的程序将不会收到任何进一步的通知事件。建议将此事件的事件处理程序以限定执行区域 (CER) 方式实现，以免基础结构相关的异常（如内存不足或堆栈溢出）在处理异常通知时影响虚拟机。 您必须处理在 FirstChanceException 事件的事件处理程序中发生的所有异常。否则，触发升级策略，应用程序终止。您的程序将不会收到任何进一步的通知事件。建议将此事件的事件处理程序以限定执行区域 (CER) 方式实现，以免基础结构相关的异常（如内存不足或堆栈溢出）在处理异常通知时影响虚拟机。 您必须处理在 FirstChanceException 事件的事件处理程序中发生的所有异常。否则，触发升级策略，应用程序终止。您的程序将不会收到任何进一步的通知事件。建议将此事件的事件处理程序以限定执行区域 (CER) 方式实现，以免基础结构相关的异常（如内存不足或堆栈溢出）在处理异常通知时影响虚拟机。

对于损坏进程状态的异常（如堆栈溢出或访问冲突）不会引发此事件，除非事件处理程序为安全关键的并且具有 HandleProcessCorruptedStateExceptionsAttribute 特性。

当此通知事件正在处理时，公共语言运行时挂起线程中止。

下面的示例创建名为 AD0 到 AD3 的一组应用程序域，而且每个应用程序域中有一个 Worker 对象。除了最后一个应用程序域中的 Worker，每个 Worker 对象都具有对下一个应用程序域中的 Worker 对象的引用。FirstChanceException 事件在 AD1 之外的所有应用程序域中都要处理。 下面的示例创建名为 AD0 到 AD3 的一组应用程序域，而且每个应用程序域中有一个 Worker 对象。除了最后一个应用程序域中的 Worker，每个 Worker 对象都具有对下一个应用程序域中的 Worker 对象的引用。FirstChanceException 事件在 AD1 之外的所有应用程序域中都要处理。 下面的示例创建名为 AD0 到 AD3 的一组应用程序域，而且每个应用程序域中有一个 Worker 对象。除了最后一个应用程序域中的 Worker，每个 Worker 对象都具有对下一个应用程序域中的 Worker 对象的引用。FirstChanceException 事件在 AD1 之外的所有应用程序域中都要处理。

说明 说明

除了演示多个应用程序域中的首次异常通知的示例之外，您可以在 如何：接收首次异常通知 中找到简单的用例。

在创建应用程序域后，默认应用程序域将调用第一个应用程序域的 TestException 方法。每个 Worker 对象都为下一个应用程序域调用 TestException 方法，直到最后一个 Worker 引发处理的或未处理的的异常。因此，当前线程会通过所有应用程序域，并将 TestException 添加到每个应用程序域的堆栈中。 在创建应用程序域后，默认应用程序域将调用第一个应用程序域的 TestException 方法。每个 Worker 对象都为下一个应用程序域调用 TestException 方法，直到最后一个 Worker 引发处理的或未处理的的异常。因此，当前线程会通过所有应用程序域，并将 TestException 添加到每个应用程序域的堆栈中。 在创建应用程序域后，默认应用程序域将调用第一个应用程序域的 TestException 方法。每个 Worker 对象都为下一个应用程序域调用 TestException 方法，直到最后一个 Worker 引发处理的或未处理的的异常。因此，当前线程会通过所有应用程序域，并将 TestException 添加到每个应用程序域的堆栈中。

当最后一个 Worker 对象处理异常时，将仅在最后一个应用程序域中引发 FirstChanceException 事件。其他应用程序域永远没有机会处理此异常，因此不会引发该事件。 当最后一个 Worker 对象处理异常时，将仅在最后一个应用程序域中引发 FirstChanceException 事件。其他应用程序域永远没有机会处理此异常，因此不会引发该事件。

当最后一个 Worker 对象不处理异常时，每个具有事件处理程序的应用程序域中都将引发 FirstChanceException 事件。每个事件处理程序完成后，堆栈将继续展开，直到默认应用程序域捕捉到异常。 当最后一个 Worker 对象不处理异常时，每个具有事件处理程序的应用程序域中都将引发 FirstChanceException 事件。每个事件处理程序完成后，堆栈将继续展开，直到默认应用程序域捕捉到异常。

说明 说明

若要查看随着事件的引发越来越接近默认应用程序域，堆栈显示的增长情况，请在 FirstChanceHandler 事件处理程序中将 e.Exception.Message 更改为 e.Exception。请注意，当跨应用程序域边界调用 TestException 时，它出现两次：一次针对代理，一次针对存根。 若要查看随着事件的引发越来越接近默认应用程序域，堆栈显示的增长情况，请在 FirstChanceHandler 事件处理程序中将 e.Exception.Message 更改为 e.Exception。请注意，当跨应用程序域边界调用 TestException 时，它出现两次：一次针对代理，一次针对存根。

Imports System.Reflection
Imports System.Runtime.ExceptionServices

Class Example

    Shared Sub Main()

        AddHandler AppDomain.CurrentDomain.FirstChanceException, AddressOf FirstChanceHandler

        ' Create a set of application domains, with a Worker object in each one.
        ' Each Worker object creates the next application domain.
        Dim ad As AppDomain = AppDomain.CreateDomain("AD0")
        Dim w As Worker = CType(ad.CreateInstanceAndUnwrap(
                                    Assembly.GetExecutingAssembly().FullName, "Worker"),
                                Worker)
        w.Initialize(0, 3)

        Console.WriteLine(vbCrLf & "The last application domain throws an exception and catches it:")
        Console.WriteLine()
        w.TestException(true)

        Try
            Console.WriteLine(vbCrLf &
                "The last application domain throws an exception and does not catch it:")
            Console.WriteLine()
            w.TestException(false)

        Catch ex As ArgumentException

            Console.WriteLine("ArgumentException caught in {0}: {1}",
                AppDomain.CurrentDomain.FriendlyName, ex.Message)
        End Try
    End Sub

    Shared Sub FirstChanceHandler(ByVal source As Object,
                                  ByVal e As FirstChanceExceptionEventArgs)

        Console.WriteLine("FirstChanceException event raised in {0}: {1}",
            AppDomain.CurrentDomain.FriendlyName, e.Exception.Message)
    End Sub
End Class

Public Class Worker
    Inherits MarshalByRefObject

    Private ad As AppDomain = Nothing
    Private w As Worker = Nothing

    Public Sub Initialize(ByVal count As Integer, ByVal max As Integer)

        ' Handle the FirstChanceException event in all application domains except
        ' AD1.
        If count <> 1

            AddHandler AppDomain.CurrentDomain.FirstChanceException, AddressOf FirstChanceHandler

        End If

        ' Create another application domain, until the maximum is reached.
        ' Field w remains Nothing in the last application domain, as a signal
        ' to TestException().
        If count < max
            Dim nextAD As Integer = count + 1
            ad = AppDomain.CreateDomain("AD" & nextAD)
            w = CType(ad.CreateInstanceAndUnwrap(
                          Assembly.GetExecutingAssembly().FullName, "Worker"),
                      Worker)
            w.Initialize(nextAD, max)
        End If
    End Sub

    Public Sub TestException(ByVal handled As Boolean)

        ' As long as there is another application domain, call TestException() on
        ' its Worker object. When the last application domain is reached, throw a
        ' handled or unhandled exception.
        If w IsNot Nothing

            w.TestException(handled)

        Else If handled

            Try
                Throw New ArgumentException("Thrown in " & AppDomain.CurrentDomain.FriendlyName)

            Catch ex As ArgumentException

                Console.WriteLine("ArgumentException caught in {0}: {1}",
                    AppDomain.CurrentDomain.FriendlyName, ex.Message)
            End Try
        Else

            Throw New ArgumentException("Thrown in " & AppDomain.CurrentDomain.FriendlyName)
        End If
    End Sub

    Shared Sub FirstChanceHandler(ByVal source As Object,
                                  ByVal e As FirstChanceExceptionEventArgs)

        Console.WriteLine("FirstChanceException event raised in {0}: {1}",
            AppDomain.CurrentDomain.FriendlyName, e.Exception.Message)
    End Sub
End Class

' This example produces output similar to the following:
'
'The last application domain throws an exception and catches it:
'
'FirstChanceException event raised in AD3: Thrown in AD3
'ArgumentException caught in AD3: Thrown in AD3
'
'The last application domain throws an exception and does not catch it:
'
'FirstChanceException event raised in AD3: Thrown in AD3
'FirstChanceException event raised in AD2: Thrown in AD3
'FirstChanceException event raised in AD0: Thrown in AD3
'FirstChanceException event raised in Example.exe: Thrown in AD3
'ArgumentException caught in Example.exe: Thrown in AD3

using System;
using System.Reflection;
using System.Runtime.ExceptionServices;

class Example
{
    static void Main()
    {
        AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;

        // Create a set of application domains, with a Worker object in each one.
        // Each Worker object creates the next application domain.
        AppDomain ad = AppDomain.CreateDomain("AD0");
        Worker w = (Worker) ad.CreateInstanceAndUnwrap(
                                Assembly.GetExecutingAssembly().FullName, "Worker");
        w.Initialize(0, 3);

        Console.WriteLine("\r\nThe last application domain throws an exception and catches it:");
        Console.WriteLine();
        w.TestException(true);

        try
        {
            Console.WriteLine(
                "\r\nThe last application domain throws an exception and does not catch it:");
            Console.WriteLine();
            w.TestException(false);
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine("ArgumentException caught in {0}: {1}",
                AppDomain.CurrentDomain.FriendlyName, ex.Message);
        }
    }

    static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
    {
        Console.WriteLine("FirstChanceException event raised in {0}: {1}",
            AppDomain.CurrentDomain.FriendlyName, e.Exception.Message);
    }
}

public class Worker : MarshalByRefObject
{
    private AppDomain ad = null;
    private Worker w = null;

    public void Initialize(int count, int max)
    {
        // Handle the FirstChanceException event in all application domains except
        // AD1.
        if (count != 1)
        {
            AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
        }

        // Create another application domain, until the maximum is reached.
        // Field w remains null in the last application domain, as a signal
        // to TestException().
        if (count < max)
        {
            int next = count + 1;
            ad = AppDomain.CreateDomain("AD" + next);
            w = (Worker) ad.CreateInstanceAndUnwrap(
                             Assembly.GetExecutingAssembly().FullName, "Worker");
            w.Initialize(next, max);
        }
    }

    public void TestException(bool handled)
    {
        // As long as there is another application domain, call TestException() on
        // its Worker object. When the last application domain is reached, throw a
        // handled or unhandled exception.
        if (w != null)
        {
            w.TestException(handled);
        }
        else if (handled)
        {
            try
            {
                throw new ArgumentException("Thrown in " + AppDomain.CurrentDomain.FriendlyName);
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine("ArgumentException caught in {0}: {1}",
                    AppDomain.CurrentDomain.FriendlyName, ex.Message);
            }
        }
        else
        {
            throw new ArgumentException("Thrown in " + AppDomain.CurrentDomain.FriendlyName);
        }
    }

    static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
    {
        Console.WriteLine("FirstChanceException event raised in {0}: {1}",
            AppDomain.CurrentDomain.FriendlyName, e.Exception.Message);
    }
}

/* This example produces output similar to the following:

The last application domain throws an exception and catches it:

FirstChanceException event raised in AD3: Thrown in AD3
ArgumentException caught in AD3: Thrown in AD3

The last application domain throws an exception and does not catch it:

FirstChanceException event raised in AD3: Thrown in AD3
FirstChanceException event raised in AD2: Thrown in AD3
FirstChanceException event raised in AD0: Thrown in AD3
FirstChanceException event raised in Example.exe: Thrown in AD3
ArgumentException caught in Example.exe: Thrown in AD3
 */
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
UnhandledException

其他资源

如何：接收首次异常通知


AppDomain ..::.ProcessExit 事件

AppDomain
.
.
::
.
ProcessExit 事件
AppDomain 类

当默认应用程序域的父进程存在时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Event ProcessExit As EventHandler
public event EventHandler ProcessExit
public:
virtual  event EventHandler^ ProcessExit {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
abstract ProcessExit : IEvent<EventHandler,
    EventArgs>
override ProcessExit : IEvent<EventHandler,
    EventArgs>

实现

在进程结束之前，此事件的 EventHandler 可以执行各种终止活动，如关闭文件、释放存储空间等等。

在 .NET Framework 版本 2.0 中，此事件在每个注册事件处理程序的应用程序域中都引发。

说明 说明

所有 ProcessExit 事件处理程序的总执行时间有限，正如进程关闭时所有终结器的总执行时间有限一样。默认时间为三秒，非托管主机可重写该时间。 所有 ProcessExit 事件处理程序的总执行时间有限，正如进程关闭时所有终结器的总执行时间有限一样。默认时间为三秒，非托管主机可重写该时间。

在 .NET Framework 版本 1.0 和 1.1 中，此事件仅在默认应用程序域中引发，并且仅当事件处理程序已在默认应用程序域中注册的情况下引发。

若要为此事件注册事件处理程序，必须具有所需权限，否则将引发 SecurityException。

有关处理事件的更多信息，请参见使用事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomain ..::.ReflectionOnlyAssemblyResolve 事件

AppDomain
.
.
::
.
ReflectionOnlyAssemblyResolve 事件
AppDomain 类

当程序集的解析在仅限反射的上下文中失败时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Event ReflectionOnlyAssemblyResolve As ResolveEventHandler
public event ResolveEventHandler ReflectionOnlyAssemblyResolve
public:
 event ResolveEventHandler^ ReflectionOnlyAssemblyResolve {
    void add (ResolveEventHandler^ value);
    void remove (ResolveEventHandler^ value);
}
member ReflectionOnlyAssemblyResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>

在只反射上下文中，不会自动解析依赖项。必须预先加载或通过此事件的处理程序返回。当程序集具有尚未加载到只反射上下文中的依赖项时，引发此事件。缺少的依赖项由 ResolveEventArgs..::.Name 属性指定。此事件的 ResolveEventHandler 返回满足依赖项的程序集。返回的程序集必须加载到只反射上下文中。
在只反射上下文中，不会自动解析依赖项。必须预先加载或通过此事件的处理程序返回。当程序集具有尚未加载到只反射上下文中的依赖项时，引发此事件。缺少的依赖项由 ResolveEventArgs..::.Name 属性指定。此事件的 ResolveEventHandler 返回满足依赖项的程序集。返回的程序集必须加载到只反射上下文中。
在只反射上下文中，不会自动解析依赖项。必须预先加载或通过此事件的处理程序返回。当程序集具有尚未加载到只反射上下文中的依赖项时，引发此事件。缺少的依赖项由 ResolveEventArgs..::.Name 属性指定。此事件的 ResolveEventHandler 返回满足依赖项的程序集。返回的程序集必须加载到只反射上下文中。
在只反射上下文中，不会自动解析依赖项。必须预先加载或通过此事件的处理程序返回。当程序集具有尚未加载到只反射上下文中的依赖项时，引发此事件。缺少的依赖项由 ResolveEventArgs..::.Name 属性指定。此事件的 ResolveEventHandler 返回满足依赖项的程序集。返回的程序集必须加载到只反射上下文中。
在只反射上下文中，不会自动解析依赖项。必须预先加载或通过此事件的处理程序返回。当程序集具有尚未加载到只反射上下文中的依赖项时，引发此事件。缺少的依赖项由 ResolveEventArgs..::.Name 属性指定。此事件的 ResolveEventHandler 返回满足依赖项的程序集。返回的程序集必须加载到只反射上下文中。
在只反射上下文中，不会自动解析依赖项。必须预先加载或通过此事件的处理程序返回。当程序集具有尚未加载到只反射上下文中的依赖项时，引发此事件。缺少的依赖项由 ResolveEventArgs..::.Name 属性指定。此事件的 ResolveEventHandler 返回满足依赖项的程序集。返回的程序集必须加载到只反射上下文中。

重要说明 重要事项

仅为您要加载到只反射上下文中的程序集的缺失依赖项引发此事件（例如，通过使用 Assembly..::.ReflectionOnlyLoad 方法）。如果找不到您正在加载的程序集，则不会引发。 仅为您要加载到只反射上下文中的程序集的缺失依赖项引发此事件（例如，通过使用 Assembly..::.ReflectionOnlyLoad 方法）。如果找不到您正在加载的程序集，则不会引发。

从 .NET Framework 4 版开始，ResolveEventArgs..::.RequestingAssembly 属性返回请求了不能解析的程序集加载的程序集。知道请求程序集的标识可能有助于标识依赖项的正确版本（如果有多个版本可用）。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。
从 .NET Framework 4 版开始，ResolveEventArgs..::.RequestingAssembly 属性返回请求了不能解析的程序集加载的程序集。知道请求程序集的标识可能有助于标识依赖项的正确版本（如果有多个版本可用）。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。
从 .NET Framework 4 版开始，ResolveEventArgs..::.RequestingAssembly 属性返回请求了不能解析的程序集加载的程序集。知道请求程序集的标识可能有助于标识依赖项的正确版本（如果有多个版本可用）。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。

对于此事件，ResolveEventArgs..::.Name 属性在应用策略之前返回程序集名称。

有关处理事件的更多信息，请参见使用事件。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
ResolveEventArgs RequestingAssembly


AppDomain ..::.ResourceResolve 事件

AppDomain
.
.
::
.
ResourceResolve 事件
AppDomain 类

当资源解析因资源不是程序集中的有效链接资源或嵌入资源而失败时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Event ResourceResolve As ResolveEventHandler
public event ResolveEventHandler ResourceResolve
public:
virtual  event ResolveEventHandler^ ResourceResolve {
    void add (ResolveEventHandler^ value);
    void remove (ResolveEventHandler^ value);
}
abstract ResourceResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>
override ResourceResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>

实现

此事件的 ResolveEventHandler 可以尝试定位包含资源的程序集并返回该程序集。

重要说明 重要事项

如果解析因找不到有效链接资源的文件而失败，将不引发此事件。如果找不到清单资源流，会引发此事件；但如果找不到单个资源键，则不会引发此事件。 如果解析因找不到有效链接资源的文件而失败，将不引发此事件。如果找不到清单资源流，会引发此事件；但如果找不到单个资源键，则不会引发此事件。

从 .NET Framework 4 版 开始，ResolveEventArgs..::.RequestingAssembly 属性包含请求了资源的程序集。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。 从 .NET Framework 4 版 开始，ResolveEventArgs..::.RequestingAssembly 属性包含请求了资源的程序集。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。

若要为此事件注册事件处理程序，必须具有所需权限，否则将引发 SecurityException。

有关处理事件的更多信息，请参见使用事件。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
ResolveEventArgs RequestingAssembly


AppDomain ..::.TypeResolve 事件

AppDomain
.
.
::
.
TypeResolve 事件
AppDomain 类

在对类型的解析失败时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Event TypeResolve As ResolveEventHandler
public event ResolveEventHandler TypeResolve
public:
virtual  event ResolveEventHandler^ TypeResolve {
    void add (ResolveEventHandler^ value);
    void remove (ResolveEventHandler^ value);
}
abstract TypeResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>
override TypeResolve : IEvent<ResolveEventHandler,
    ResolveEventArgs>

实现

当公共语言运行时无法确定可创建所请求类型的程序集时，发生 TypeResolve 事件。如果类型在动态程序集中定义，或者类型未在动态程序集中定义但运行时不知道定义了该类型的程序集时，可能发生此情况。当使用未用程序集名称限定的类型名调用Type..::.GetType 时可能出现后一种情况）。
当公共语言运行时无法确定可创建所请求类型的程序集时，发生 TypeResolve 事件。如果类型在动态程序集中定义，或者类型未在动态程序集中定义但运行时不知道定义了该类型的程序集时，可能发生此情况。当使用未用程序集名称限定的类型名调用Type..::.GetType 时可能出现后一种情况）。
当公共语言运行时无法确定可创建所请求类型的程序集时，发生 TypeResolve 事件。如果类型在动态程序集中定义，或者类型未在动态程序集中定义但运行时不知道定义了该类型的程序集时，可能发生此情况。当使用未用程序集名称限定的类型名调用Type..::.GetType 时可能出现后一种情况）。

此事件的 ResolveEventHandler 可尝试定位和创建类型。

但是，如果运行时确定在某些程序集中不可能找到类型，则不会发生 TypeResolve 事件。例如，如果在静态程序集中找不到类型，则不会发生此事件，因为运行时知道不能向静态程序集动态地添加类型。 但是，如果运行时确定在某些程序集中不可能找到类型，则不会发生 TypeResolve 事件。例如，如果在静态程序集中找不到类型，则不会发生此事件，因为运行时知道不能向静态程序集动态地添加类型。

从 .NET Framework 4 版 开始，ResolveEventArgs..::.RequestingAssembly 属性包含请求了类型的程序集。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。 从 .NET Framework 4 版 开始，ResolveEventArgs..::.RequestingAssembly 属性包含请求了类型的程序集。有关更多信息，请参见ResolveEventArgs..::.RequestingAssembly。

若要为此事件注册事件处理程序，必须具有所需权限，否则将引发 SecurityException。

有关处理事件的更多信息，请参见使用事件。

下面的示例阐释 TypeResolve 事件。

要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。 要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见程序集名称。

Option Strict On
Option Explicit On

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Module Test

    ' For this code example, the following information needs to be
    ' available to both Main and the HandleTypeResolve event
    ' handler:
    Private ab As AssemblyBuilder
    Private moduleName As String

    Sub Main()

        Dim currDom As AppDomain = AppDomain.CurrentDomain

        ' Create a dynamic assembly with one module, to be saved to
        ' disk (AssemblyBuilderAccess.Save).
        '
        Dim aName As AssemblyName = new AssemblyName()
        aName.Name = "Transient"
        moduleName = aName.Name + ".dll"
        ab = currDom.DefineDynamicAssembly(aName, _
            AssemblyBuilderAccess.Save)
        Dim mb As ModuleBuilder = _
            ab.DefineDynamicModule(aName.Name, moduleName)

        ' The dynamic assembly has just one dummy type, to demonstrate
        ' type resolution.
        Dim tb As TypeBuilder = mb.DefineType("Example")
        tb.CreateType()

        ' First, try to load the type without saving the dynamic
        ' assembly and without hooking up the TypeResolve event. The
        ' type cannot be loaded.
        Try
            Dim temp As Type = Type.GetType("Example", true)
            Console.WriteLine("Loaded type {0}.", temp)
        Catch ex As TypeLoadException
            Console.WriteLine("Loader could not resolve the type.")
        End Try

        ' Hook up the TypeResolve event.
        '
        AddHandler currDom.TypeResolve, AddressOf HandleTypeResolve

        ' Now try to load the type again. The TypeResolve event is
        ' raised, the dynamic assembly is saved, and the dummy type is
        ' loaded successfully. Display it to the console, and create
        ' an instance.
        Dim t As Type = Type.GetType("Example", true)
        Console.WriteLine("Loaded type ""{0}"".", t)
        Dim o As Object = Activator.CreateInstance(t)
    End Sub

    Private Function HandleTypeResolve(ByVal sender As Object, _
        ByVal e As ResolveEventArgs) As [Assembly]

        Console.WriteLine("TypeResolve event handler.")

        ' Save the dynamic assembly, and then load it using its
        ' display name. Return the loaded assembly.
        '
        ab.Save(moduleName)
        Return [Assembly].Load(ab.FullName)
    End Function
End Module

' This code example produces the following output:
'
'Loader could not resolve the type.
'TypeResolve event handler.
'Loaded type "Example".
'

using System;
using System.Reflection;
using System.Reflection.Emit;

class Test
{
    // For this code example, the following information needs to be
    // available to both Main and the HandleTypeResolve event
    // handler:
    private static AssemblyBuilder ab;
    private static string moduleName;

    public static void Main()
    {
        AppDomain currDom = AppDomain.CurrentDomain;

        // Create a dynamic assembly with one module, to be saved to
        // disk (AssemblyBuilderAccess.Save).
        //
        AssemblyName aName = new AssemblyName();
        aName.Name = "Transient";
        moduleName = aName.Name + ".dll";
        ab = currDom.DefineDynamicAssembly(aName,
            AssemblyBuilderAccess.Save);
        ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, moduleName);

        // The dynamic assembly has just one dummy type, to demonstrate
        // type resolution.
        TypeBuilder tb = mb.DefineType("Example");
        tb.CreateType();

        // First, try to load the type without saving the dynamic
        // assembly and without hooking up the TypeResolve event. The
        // type cannot be loaded.
        try
        {
            Type temp = Type.GetType("Example", true);
            Console.WriteLine("Loaded type {0}.", temp);
        }
        catch (TypeLoadException)
        {
            Console.WriteLine("Loader could not resolve the type.");
        }

        // Hook up the TypeResolve event.
        //
        currDom.TypeResolve +=
            new ResolveEventHandler(HandleTypeResolve);

        // Now try to load the type again. The TypeResolve event is
        // raised, the dynamic assembly is saved, and the dummy type is
        // loaded successfully. Display it to the console, and create
        // an instance.
        Type t = Type.GetType("Example", true);
        Console.WriteLine("Loaded type \"{0}\".", t);
        Object o = Activator.CreateInstance(t);
    }

    static Assembly HandleTypeResolve(object sender, ResolveEventArgs args)
    {
        Console.WriteLine("TypeResolve event handler.");

        // Save the dynamic assembly, and then load it using its
        // display name. Return the loaded assembly.
        //
        ab.Save(moduleName);
        return Assembly.Load(ab.FullName);
    }
}

/* This code example produces the following output:

Loader could not resolve the type.
TypeResolve event handler.
Loaded type "Example".
 */

#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

ref class Test
{
private:
    static Assembly^ HandleTypeResolve(Object^ sender, ResolveEventArgs^ args)
    {
        Console::WriteLine("TypeResolve event handler.");

        // Save the dynamic assembly, and then load it using its
        // display name. Return the loaded assembly.
        //
        ab->Save(moduleName);
        return Assembly::Load(ab->FullName);
    }

    // For this code example, the following information needs to be
    // available to both Demo and the HandleTypeResolve event
    // handler:
    static AssemblyBuilder^ ab;
    static String^ moduleName;

public:
    static void Demo()
    {
        AppDomain^ currDom = AppDomain::CurrentDomain;

        // Create a dynamic assembly with one module, to be saved to
        // disk (AssemblyBuilderAccess::Save).
        //
        AssemblyName^ aName = gcnew AssemblyName();
        aName->Name = "Transient";
        moduleName = aName->Name + ".dll";
        ab = currDom->DefineDynamicAssembly(aName,
            AssemblyBuilderAccess::Save);
        ModuleBuilder^ mb = ab->DefineDynamicModule(aName->Name, moduleName);

        // The dynamic assembly has just one dummy type, to demonstrate
        // type resolution.
        TypeBuilder^ tb = mb->DefineType("Example");
        tb->CreateType();

        // First, try to load the type without saving the dynamic
        // assembly and without hooking up the TypeResolve event. The
        // type cannot be loaded.
        try
        {
            Type^ temp = Type::GetType("Example", true);
            Console::WriteLine("Loaded type {0}.", temp);
        }
        catch (TypeLoadException^)
        {
            Console::WriteLine("Loader could not resolve the type.");
        }

        // Hook up the TypeResolve event.
        //
        currDom->TypeResolve +=
            gcnew ResolveEventHandler(HandleTypeResolve);

        // Now try to load the type again. The TypeResolve event is
        // raised, the dynamic assembly is saved, and the dummy type is
        // loaded successfully. Display it to the console, and create
        // an instance.
        Type^ t = Type::GetType("Example", true);
        Console::WriteLine("Loaded type \"{0}\".", t);
        Object^ o = Activator::CreateInstance(t);
    }
};

void main()
{
    Test::Demo();
}

/* This code example produces the following output:

Loader could not resolve the type.
TypeResolve event handler.
Loaded type "Example".
 */
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomain 类
AppDomain 成员
System 命名空间
ResolveEventArgs RequestingAssembly


AppDomain ..::.UnhandledException 事件

AppDomain
.
.
::
.
UnhandledException 事件
AppDomain 类

当某个异常未被捕获时出现。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Event UnhandledException As UnhandledExceptionEventHandler
public event UnhandledExceptionEventHandler UnhandledException
public:
virtual  event UnhandledExceptionEventHandler^ UnhandledException {
    void add (UnhandledExceptionEventHandler^ value);
    void remove (UnhandledExceptionEventHandler^ value);
}
abstract UnhandledException : IEvent<UnhandledExceptionEventHandler,
    UnhandledExceptionEventArgs>
override UnhandledException : IEvent<UnhandledExceptionEventHandler,
    UnhandledExceptionEventArgs>

实现

此事件提供未捕获到的异常的通知。此事件使应用程序能在系统默认处理程序向用户报告异常并终止应用程序之前记录有关异常的信息。如果有足够的有关应用程序状态的信息，则可以采取其他措施，如保存程序数据以便于以后进行恢复。建议谨慎行事，因为未经处理的异常时可能会损坏程序数据。 此事件提供未捕获到的异常的通知。此事件使应用程序能在系统默认处理程序向用户报告异常并终止应用程序之前记录有关异常的信息。如果有足够的有关应用程序状态的信息，则可以采取其他措施，如保存程序数据以便于以后进行恢复。建议谨慎行事，因为未经处理的异常时可能会损坏程序数据。 此事件提供未捕获到的异常的通知。此事件使应用程序能在系统默认处理程序向用户报告异常并终止应用程序之前记录有关异常的信息。如果有足够的有关应用程序状态的信息，则可以采取其他措施，如保存程序数据以便于以后进行恢复。建议谨慎行事，因为未经处理的异常时可能会损坏程序数据。 此事件提供未捕获到的异常的通知。此事件使应用程序能在系统默认处理程序向用户报告异常并终止应用程序之前记录有关异常的信息。如果有足够的有关应用程序状态的信息，则可以采取其他措施，如保存程序数据以便于以后进行恢复。建议谨慎行事，因为未经处理的异常时可能会损坏程序数据。

说明 说明

在 .NET Framework 1.0 和 1.1 版中，引发此事件之前（而不是之后）会向用户报告应用程序终止和调试选项。

此事件可以在任何应用程序域中进行处理。但在发生异常的应用程序域中不一定引发事件。仅当在没有找到合适的异常处理程序的情况下已展开线程的整个堆栈时，才不会处理异常，因此可能引发事件的第一个位置是在生成该线程的应用程序域中。 此事件可以在任何应用程序域中进行处理。但在发生异常的应用程序域中不一定引发事件。仅当在没有找到合适的异常处理程序的情况下已展开线程的整个堆栈时，才不会处理异常，因此可能引发事件的第一个位置是在生成该线程的应用程序域中。 此事件可以在任何应用程序域中进行处理。但在发生异常的应用程序域中不一定引发事件。仅当在没有找到合适的异常处理程序的情况下已展开线程的整个堆栈时，才不会处理异常，因此可能引发事件的第一个位置是在生成该线程的应用程序域中。

说明 说明

在 .NET Framework 1.0 和 1.1 版中，此事件只在启动应用程序时由系统创建的默认应用程序域内才会发生。如果应用程序创建其他应用程序域，那么在那些应用程序域中为此事件指定委托无效。 在 .NET Framework 1.0 和 1.1 版中，此事件只在启动应用程序时由系统创建的默认应用程序域内才会发生。如果应用程序创建其他应用程序域，那么在那些应用程序域中为此事件指定委托无效。

如果在默认应用程序域中处理了 UnhandledException 事件，则会为任何线程中的任何未处理异常引发该事件，无论线程是在什么应用程序域中开始。如果线程在拥有 UnhandledException 的事件处理程序的应用程序域中启动了线程，则在该应用程序域中引发该事件。如果该应用程序域不是默认应用程序域，并且默认应用程序域中还有一个事件处理程序，则在这两个应用程序域中都会引发该事件。 如果在默认应用程序域中处理了 UnhandledException 事件，则会为任何线程中的任何未处理异常引发该事件，无论线程是在什么应用程序域中开始。如果线程在拥有 UnhandledException 的事件处理程序的应用程序域中启动了线程，则在该应用程序域中引发该事件。如果该应用程序域不是默认应用程序域，并且默认应用程序域中还有一个事件处理程序，则在这两个应用程序域中都会引发该事件。 如果在默认应用程序域中处理了 UnhandledException 事件，则会为任何线程中的任何未处理异常引发该事件，无论线程是在什么应用程序域中开始。如果线程在拥有 UnhandledException 的事件处理程序的应用程序域中启动了线程，则在该应用程序域中引发该事件。如果该应用程序域不是默认应用程序域，并且默认应用程序域中还有一个事件处理程序，则在这两个应用程序域中都会引发该事件。

例如，假设某个线程在应用程序域“AD1”中启动，调用应用程序域“AD2”中的某个方法，并且在这里调用应用程序域“AD3”（在此引发异常）中的某个方法。可以在其中引发 UnhandledException 事件的第一个应用程序域是“AD1”。如果该应用程序域不是默认应用程序域，则在默认应用程序域中也可以引发该事件。 例如，假设某个线程在应用程序域“AD1”中启动，调用应用程序域“AD2”中的某个方法，并且在这里调用应用程序域“AD3”（在此引发异常）中的某个方法。可以在其中引发 UnhandledException 事件的第一个应用程序域是“AD1”。如果该应用程序域不是默认应用程序域，则在默认应用程序域中也可以引发该事件。 例如，假设某个线程在应用程序域“AD1”中启动，调用应用程序域“AD2”中的某个方法，并且在这里调用应用程序域“AD3”（在此引发异常）中的某个方法。可以在其中引发 UnhandledException 事件的第一个应用程序域是“AD1”。如果该应用程序域不是默认应用程序域，则在默认应用程序域中也可以引发该事件。

说明 说明

在执行 UnhandledException 事件的事件处理程序时，公共语言运行时挂起线程中止。

从 .NET Framework 4 版 开始，对于损坏进程状态的异常（如堆栈溢出或访问冲突）不会引发此事件，除非事件处理程序为安全关键性并且具有 HandleProcessCorruptedStateExceptionsAttribute 特性。

在 .NET Framework 1.0 和 1.1 版中，在主应用程序线程以外的线程中发生的未经处理的异常由运行时捕获，因此不会导致应用程序终止。这样就可能在应用程序不终止的情况下引发 UnhandledException 事件。从 .NET Framework 2.0 版开始，对子线程中未经处理的异常的这一支持已被移除，因为这类静默失败的累积后果（包括性能降低、数据损坏及锁定）会使程序调试很难进行。有关更多信息（包括运行时不会终止情况的列表），请参见托管线程中的异常。 在 .NET Framework 1.0 和 1.1 版中，在主应用程序线程以外的线程中发生的未经处理的异常由运行时捕获，因此不会导致应用程序终止。这样就可能在应用程序不终止的情况下引发 UnhandledException 事件。从 .NET Framework 2.0 版开始，对子线程中未经处理的异常的这一支持已被移除，因为这类静默失败的累积后果（包括性能降低、数据损坏及锁定）会使程序调试很难进行。有关更多信息（包括运行时不会终止情况的列表），请参见托管线程中的异常。 在 .NET Framework 1.0 和 1.1 版中，在主应用程序线程以外的线程中发生的未经处理的异常由运行时捕获，因此不会导致应用程序终止。这样就可能在应用程序不终止的情况下引发 UnhandledException 事件。从 .NET Framework 2.0 版开始，对子线程中未经处理的异常的这一支持已被移除，因为这类静默失败的累积后果（包括性能降低、数据损坏及锁定）会使程序调试很难进行。有关更多信息（包括运行时不会终止情况的列表），请参见托管线程中的异常。 在 .NET Framework 1.0 和 1.1 版中，在主应用程序线程以外的线程中发生的未经处理的异常由运行时捕获，因此不会导致应用程序终止。这样就可能在应用程序不终止的情况下引发 UnhandledException 事件。从 .NET Framework 2.0 版开始，对子线程中未经处理的异常的这一支持已被移除，因为这类静默失败的累积后果（包括性能降低、数据损坏及锁定）会使程序调试很难进行。有关更多信息（包括运行时不会终止情况的列表），请参见托管线程中的异常。

若要为此事件注册事件处理程序，必须具有所需权限，否则将引发 SecurityException。

有关处理事件的更多信息，请参见使用事件。

未经处理的异常的其他事件

对于某些应用程序模型，如果在主应用程序线程中发生未经处理的异常，则其他事件可以优先于 UnhandledException。

在使用 Windows 窗体的应用程序中，主应用程序线程中的未经处理的异常会导致引发 Application..::.ThreadException 事件。如果处理此事件，则默认行为是未经处理的异常不终止该应用程序（尽管它处于未知状态）。在这种情况下，不会引发 UnhandledException 事件。在挂钩 ThreadException 事件处理程序之前，可以更改此行为，方法是通过使用应用程序配置文件，或者通过使用 Application..::.SetUnhandledExceptionMode 方法将模式更改为 UnhandledExceptionMode..::.ThrowException。这仅适用于主应用程序线程。对于其他线程中引发的未经处理的异常，将引发 UnhandledException 事件。 在使用 Windows 窗体的应用程序中，主应用程序线程中的未经处理的异常会导致引发 Application..::.ThreadException 事件。如果处理此事件，则默认行为是未经处理的异常不终止该应用程序（尽管它处于未知状态）。在这种情况下，不会引发 UnhandledException 事件。在挂钩 ThreadException 事件处理程序之前，可以更改此行为，方法是通过使用应用程序配置文件，或者通过使用 Application..::.SetUnhandledExceptionMode 方法将模式更改为 UnhandledExceptionMode..::.ThrowException。这仅适用于主应用程序线程。对于其他线程中引发的未经处理的异常，将引发 UnhandledException 事件。 在使用 Windows 窗体的应用程序中，主应用程序线程中的未经处理的异常会导致引发 Application..::.ThreadException 事件。如果处理此事件，则默认行为是未经处理的异常不终止该应用程序（尽管它处于未知状态）。在这种情况下，不会引发 UnhandledException 事件。在挂钩 ThreadException 事件处理程序之前，可以更改此行为，方法是通过使用应用程序配置文件，或者通过使用 Application..::.SetUnhandledExceptionMode 方法将模式更改为 UnhandledExceptionMode..::.ThrowException。这仅适用于主应用程序线程。对于其他线程中引发的未经处理的异常，将引发 UnhandledException 事件。 在使用 Windows 窗体的应用程序中，主应用程序线程中的未经处理的异常会导致引发 Application..::.ThreadException 事件。如果处理此事件，则默认行为是未经处理的异常不终止该应用程序（尽管它处于未知状态）。在这种情况下，不会引发 UnhandledException 事件。在挂钩 ThreadException 事件处理程序之前，可以更改此行为，方法是通过使用应用程序配置文件，或者通过使用 Application..::.SetUnhandledExceptionMode 方法将模式更改为 UnhandledExceptionMode..::.ThrowException。这仅适用于主应用程序线程。对于其他线程中引发的未经处理的异常，将引发 UnhandledException 事件。 在使用 Windows 窗体的应用程序中，主应用程序线程中的未经处理的异常会导致引发 Application..::.ThreadException 事件。如果处理此事件，则默认行为是未经处理的异常不终止该应用程序（尽管它处于未知状态）。在这种情况下，不会引发 UnhandledException 事件。在挂钩 ThreadException 事件处理程序之前，可以更改此行为，方法是通过使用应用程序配置文件，或者通过使用 Application..::.SetUnhandledExceptionMode 方法将模式更改为 UnhandledExceptionMode..::.ThrowException。这仅适用于主应用程序线程。对于其他线程中引发的未经处理的异常，将引发 UnhandledException 事件。 在使用 Windows 窗体的应用程序中，主应用程序线程中的未经处理的异常会导致引发 Application..::.ThreadException 事件。如果处理此事件，则默认行为是未经处理的异常不终止该应用程序（尽管它处于未知状态）。在这种情况下，不会引发 UnhandledException 事件。在挂钩 ThreadException 事件处理程序之前，可以更改此行为，方法是通过使用应用程序配置文件，或者通过使用 Application..::.SetUnhandledExceptionMode 方法将模式更改为 UnhandledExceptionMode..::.ThrowException。这仅适用于主应用程序线程。对于其他线程中引发的未经处理的异常，将引发 UnhandledException 事件。

从 Microsoft Visual Studio 2005 开始，Visual Basic 应用程序框架为主应用程序线程中的未经处理的异常提供了另一个事件。参见 WindowsFormsApplicationBase..::.UnhandledException 事件。此事件包含一个名称与 AppDomain..::.UnhandledException 所使用的事件实参对象相同的事件实参对象，但属性不同。尤其是，此事件实参对象有一个 ExitApplication 属性，该属性允许应用程序继续运行，忽略未经处理的异常（使应用程序处于未知状态）。在这种情况下，不会引发 AppDomain..::.UnhandledException 事件。 从 Microsoft Visual Studio 2005 开始，Visual Basic 应用程序框架为主应用程序线程中的未经处理的异常提供了另一个事件。参见 WindowsFormsApplicationBase..::.UnhandledException 事件。此事件包含一个名称与 AppDomain..::.UnhandledException 所使用的事件实参对象相同的事件实参对象，但属性不同。尤其是，此事件实参对象有一个 ExitApplication 属性，该属性允许应用程序继续运行，忽略未经处理的异常（使应用程序处于未知状态）。在这种情况下，不会引发 AppDomain..::.UnhandledException 事件。 从 Microsoft Visual Studio 2005 开始，Visual Basic 应用程序框架为主应用程序线程中的未经处理的异常提供了另一个事件。参见 WindowsFormsApplicationBase..::.UnhandledException 事件。此事件包含一个名称与 AppDomain..::.UnhandledException 所使用的事件实参对象相同的事件实参对象，但属性不同。尤其是，此事件实参对象有一个 ExitApplication 属性，该属性允许应用程序继续运行，忽略未经处理的异常（使应用程序处于未知状态）。在这种情况下，不会引发 AppDomain..::.UnhandledException 事件。 从 Microsoft Visual Studio 2005 开始，Visual Basic 应用程序框架为主应用程序线程中的未经处理的异常提供了另一个事件。参见 WindowsFormsApplicationBase..::.UnhandledException 事件。此事件包含一个名称与 AppDomain..::.UnhandledException 所使用的事件实参对象相同的事件实参对象，但属性不同。尤其是，此事件实参对象有一个 ExitApplication 属性，该属性允许应用程序继续运行，忽略未经处理的异常（使应用程序处于未知状态）。在这种情况下，不会引发 AppDomain..::.UnhandledException 事件。 从 Microsoft Visual Studio 2005 开始，Visual Basic 应用程序框架为主应用程序线程中的未经处理的异常提供了另一个事件。参见 WindowsFormsApplicationBase..::.UnhandledException 事件。此事件包含一个名称与 AppDomain..::.UnhandledException 所使用的事件实参对象相同的事件实参对象，但属性不同。尤其是，此事件实参对象有一个 ExitApplication 属性，该属性允许应用程序继续运行，忽略未经处理的异常（使应用程序处于未知状态）。在这种情况下，不会引发 AppDomain..::.UnhandledException 事件。

下面的示例阐释 UnhandledException 事件。

Sub Main()
   Dim currentDomain As AppDomain = AppDomain.CurrentDomain
   AddHandler currentDomain.UnhandledException, AddressOf MyHandler

   Try
      Throw New Exception("1")
   Catch e As Exception
      Console.WriteLine("Catch clause caught : " + e.Message)
   End Try

   Throw New Exception("2")

   ' Output:
   '   Catch clause caught : 1
   '   MyHandler caught : 2
End Sub 'Main

Sub MyHandler(sender As Object, args As UnhandledExceptionEventArgs)
   Dim e As Exception = DirectCast(args.ExceptionObject, Exception)
   Console.WriteLine("MyHandler caught : " + e.Message)
End Sub 'MyUnhandledExceptionEventHandler

using System;
using System.Security.Permissions;

public class Test {

   [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)]
   public static void Example()
   {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);

      try {
         throw new Exception("1");
      } catch (Exception e) {
         Console.WriteLine("Catch clause caught : " + e.Message);
      }

      throw new Exception("2");

      // Output:
      //   Catch clause caught : 1
      //   MyHandler caught : 2
   }

   static void MyHandler(object sender, UnhandledExceptionEventArgs args) {
      Exception e = (Exception) args.ExceptionObject;
      Console.WriteLine("MyHandler caught : " + e.Message);
   }

   public static void Main() {
      Example();
   }
}

public ref class Test
{
private:
   static void MyHandler( Object^ /*sender*/, UnhandledExceptionEventArgs^ args )
   {
      Exception^ e = dynamic_cast<Exception^>(args->ExceptionObject);
      Console::WriteLine( "MyHandler caught : {0}", e->Message );
   }
public:
   [SecurityPermissionAttribute( SecurityAction::Demand, ControlAppDomain = true )]
   static void Main()
   {
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   currentDomain->UnhandledException += gcnew UnhandledExceptionEventHandler( Test::MyHandler );
   try
   {
      throw gcnew Exception( "1" );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Catch clause caught : {0}", e->Message );
   }

   throw gcnew Exception( "2" );

   // Output:
   //   Catch clause caught : 1
   //   MyHandler caught : 2
   }
};

int main()
{
   Test::Main();
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomain 类
AppDomain 成员
System 命名空间


AppDomainInitializer 委托

AppDomainInitializer 委托

表示在应用程序域初始化时要调用的回调方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Delegate Sub AppDomainInitializer ( _
    args As String() _
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void AppDomainInitializer(
    string[] args
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void AppDomainInitializer(
    array<String^>^ args
)
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type AppDomainInitializer =
    delegate of
        args:string[] -> unit

参数

args
类型：
array<
System String
>
[]
()
[]

作为参数传递给回调方法的字符串数组。

使用 AppDomainInitializer 委托指定在初始化 AppDomain 类的实例时要调用的回调方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间


AppDomainManager 类

AppDomainManager 类
成员

提供非托管宿主的等效托管宿主。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags := SecurityPermissionFlag.Infrastructure)> _
Public Class AppDomainManager _
    Inherits MarshalByRefObject
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)]
public class AppDomainManager : MarshalByRefObject
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, Flags = SecurityPermissionFlag::Infrastructure)]
public ref class AppDomainManager : public MarshalByRefObject
[<ComVisibleAttribute(true)>]
[<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)>]
type AppDomainManager =
    class
        inherit MarshalByRefObject
    end
异常 | 条件
SecurityException | 调用方没有正确的权限。请参阅“要求”一节。 调用方没有正确的权限。请参阅“要求”一节。
重要说明 重要事项

请勿使用 AppDomainManager 在 ASP.NET 中配置应用程序域。在 ASP.NET 中，必须由宿主进行配置。 请勿使用 AppDomainManager 在 ASP.NET 中配置应用程序域。在 ASP.NET 中，必须由宿主进行配置。

实现 AppDomainManager 类使承载应用程序能够参与新应用程序域的创建。若要替换默认的 AppDomainManager，请在 APPDOMAIN_MANAGER_ASM 和 APPDOMAIN_MANAGER_TYPE 环境变量中标识替代的 AppDomainManager 的程序集和类型，或在您的配置文件中使用 <appDomainManagerAssembly> 元素 和 <appDomainManagerType> 元素。该程序集必须完全受信任，并且包含在起始应用程序的全局程序集缓存或目录中。环境变量中的类型和程序集名称必须是完全限定的。例如： 实现 AppDomainManager 类使承载应用程序能够参与新应用程序域的创建。若要替换默认的 AppDomainManager，请在 APPDOMAIN_MANAGER_ASM 和 APPDOMAIN_MANAGER_TYPE 环境变量中标识替代的 AppDomainManager 的程序集和类型，或在您的配置文件中使用 <appDomainManagerAssembly> 元素 和 <appDomainManagerType> 元素。该程序集必须完全受信任，并且包含在起始应用程序的全局程序集缓存或目录中。环境变量中的类型和程序集名称必须是完全限定的。例如： 实现 AppDomainManager 类使承载应用程序能够参与新应用程序域的创建。若要替换默认的 AppDomainManager，请在 APPDOMAIN_MANAGER_ASM 和 APPDOMAIN_MANAGER_TYPE 环境变量中标识替代的 AppDomainManager 的程序集和类型，或在您的配置文件中使用 <appDomainManagerAssembly> 元素 和 <appDomainManagerType> 元素。该程序集必须完全受信任，并且包含在起始应用程序的全局程序集缓存或目录中。环境变量中的类型和程序集名称必须是完全限定的。例如： 实现 AppDomainManager 类使承载应用程序能够参与新应用程序域的创建。若要替换默认的 AppDomainManager，请在 APPDOMAIN_MANAGER_ASM 和 APPDOMAIN_MANAGER_TYPE 环境变量中标识替代的 AppDomainManager 的程序集和类型，或在您的配置文件中使用 <appDomainManagerAssembly> 元素 和 <appDomainManagerType> 元素。该程序集必须完全受信任，并且包含在起始应用程序的全局程序集缓存或目录中。环境变量中的类型和程序集名称必须是完全限定的。例如： 实现 AppDomainManager 类使承载应用程序能够参与新应用程序域的创建。若要替换默认的 AppDomainManager，请在 APPDOMAIN_MANAGER_ASM 和 APPDOMAIN_MANAGER_TYPE 环境变量中标识替代的 AppDomainManager 的程序集和类型，或在您的配置文件中使用 <appDomainManagerAssembly> 元素 和 <appDomainManagerType> 元素。该程序集必须完全受信任，并且包含在起始应用程序的全局程序集缓存或目录中。环境变量中的类型和程序集名称必须是完全限定的。例如：

set APPDOMAIN_MANAGER_TYPE=MyNamespace.TestAppDomainManager

set APPDOMAIN_MANAGER_ASM=customappDomainmanager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f1368f7b12a08d72

重要说明 重要事项

如果包含 AppDomainManager 子类的程序集依赖于通过条件 AllowPartiallyTrustedCallersAttribute (APTCA) 特性标记的程序集，则必须将这些程序集包括到传递给 PartialTrustVisibleAssemblies 属性的列表中，该属性是您用来创建应用程序域的 AppDomainSetup 的属性。否则，使用条件 APTCA 特性标记的程序集将被禁用。 如果包含 AppDomainManager 子类的程序集依赖于通过条件 AllowPartiallyTrustedCallersAttribute (APTCA) 特性标记的程序集，则必须将这些程序集包括到传递给 PartialTrustVisibleAssemblies 属性的列表中，该属性是您用来创建应用程序域的 AppDomainSetup 的属性。否则，使用条件 APTCA 特性标记的程序集将被禁用。

AppDomainManager 是非托管宿主的等效托管宿主。AppDomainManager 对象参与进程中新应用程序域的创建，并且可在其他托管代码运行之前自定义新的 AppDomain。AppDomainManager 也可提供宿主管理器，这些宿主管理器参与公共语言运行时执行的其他方面。例如，AppDomainManager 可以标识 HostSecurityManager 对象，该对象参与应用程序域的安全决策。 AppDomainManager 是非托管宿主的等效托管宿主。AppDomainManager 对象参与进程中新应用程序域的创建，并且可在其他托管代码运行之前自定义新的 AppDomain。AppDomainManager 也可提供宿主管理器，这些宿主管理器参与公共语言运行时执行的其他方面。例如，AppDomainManager 可以标识 HostSecurityManager 对象，该对象参与应用程序域的安全决策。 AppDomainManager 是非托管宿主的等效托管宿主。AppDomainManager 对象参与进程中新应用程序域的创建，并且可在其他托管代码运行之前自定义新的 AppDomain。AppDomainManager 也可提供宿主管理器，这些宿主管理器参与公共语言运行时执行的其他方面。例如，AppDomainManager 可以标识 HostSecurityManager 对象，该对象参与应用程序域的安全决策。 AppDomainManager 是非托管宿主的等效托管宿主。AppDomainManager 对象参与进程中新应用程序域的创建，并且可在其他托管代码运行之前自定义新的 AppDomain。AppDomainManager 也可提供宿主管理器，这些宿主管理器参与公共语言运行时执行的其他方面。例如，AppDomainManager 可以标识 HostSecurityManager 对象，该对象参与应用程序域的安全决策。

说明 说明

只有被授予 FullTrust 的程序集（如全局程序集缓存中的程序集或者在 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法中标识为 fullTrustAssemblies 的程序集）才可以在 AppDomainManager 构造函数和 InitializeNewDomain 方法中加载。
说明 说明

此类包含类级别的链接要求和继承要求。如果直接调用方或继承类没有基础结构权限，则会引发 SecurityException。有关安全请求的详细信息，请参见链接需求和继承需求。 此类包含类级别的链接要求和继承要求。如果直接调用方或继承类没有基础结构权限，则会引发 SecurityException。有关安全请求的详细信息，请参见链接需求和继承需求。 此类包含类级别的链接要求和继承要求。如果直接调用方或继承类没有基础结构权限，则会引发 SecurityException。有关安全请求的详细信息，请参见链接需求和继承需求。

下面的示例演示一个非常简单的 AppDomainManager 的实现。

' To replace the default AppDomainManager, identify  the
' replacement assembly and replacement type in the
' APPDOMAIN_MANAGER_ASM and APPDOMAIN_MANAGER_TYPE
' environment variables. For example:
' set APPDOMAIN_MANAGER_TYPE=library.TestAppDomainManager
' set APPDOMAIN_MANAGER_ASM=library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f1368f7b12a08d72
Imports System
Imports System.Collections
Imports System.Net
Imports System.Reflection
Imports System.Security
Imports System.Security.Permissions
Imports System.Security.Policy
Imports System.Security.Principal
Imports System.Threading
Imports System.Runtime.InteropServices

<assembly: System.Security.AllowPartiallyTrustedCallersAttribute()>
<SecurityPermissionAttribute(SecurityAction.LinkDemand, _
    Flags:=SecurityPermissionFlag.Infrastructure)> _
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, _
    Flags:=SecurityPermissionFlag.Infrastructure)> _
<GuidAttribute("F4D15099-3407-4A7E-A607-DEA440CF3891")> _
Public Class MyAppDomainManager
    Inherits AppDomainManager
    Private mySecurityManager As HostSecurityManager = Nothing

    Public Sub New()
        Console.WriteLine(" My AppDomain Manager ")
        mySecurityManager = AppDomain.CurrentDomain.CreateInstanceAndUnwrap( _
            "CustomSecurityManager, Version=1.0.0.3, Culture=neutral, " & _
            "PublicKeyToken=5659fc598c2a503e", "MyNamespace.MySecurityManager")
        Console.WriteLine(" Custom Security Manager Created.")
    End Sub 'New

    Public Overrides Sub InitializeNewDomain(ByVal appDomainInfo _
        As AppDomainSetup)
        Console.Write("Initialize new domain called:  ")
        Console.WriteLine(AppDomain.CurrentDomain.FriendlyName)
        InitializationFlags = _
            AppDomainManagerInitializationOptions.RegisterWithHost
    End Sub 'InitializeNewDomain

    Public Overrides ReadOnly Property HostSecurityManager() _
        As HostSecurityManager
        Get
            Return mySecurityManager
        End Get
    End Property
End Class 'MyAppDomainManager

// To replace the default AppDomainManager, identify  the
// replacement assembly and replacement type in the
// APPDOMAIN_MANAGER_ASM and APPDOMAIN_MANAGER_TYPE
// environment variables. For example:
// set APPDOMAIN_MANAGER_TYPE=library.TestAppDomainManager
// set APPDOMAIN_MANAGER_ASM=library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f1368f7b12a08d72

using System;
using System.Collections;
using System.Net;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Security.Principal;
using System.Threading;
using System.Runtime.InteropServices;

[assembly: System.Security.AllowPartiallyTrustedCallersAttribute()]

namespace MyNamespace
{
    [GuidAttribute("F4D15099-3407-4A7E-A607-DEA440CF3891")]
    [SecurityPermissionAttribute(SecurityAction.LinkDemand,
        Flags = SecurityPermissionFlag.Infrastructure)]
    [SecurityPermissionAttribute(SecurityAction.InheritanceDemand,
        Flags = SecurityPermissionFlag.Infrastructure)]
    public class MyAppDomainManager : AppDomainManager
    {
        private HostSecurityManager mySecurityManager = null;

        public MyAppDomainManager()
        {
            Console.WriteLine(" My AppDomain Manager ");
            mySecurityManager = AppDomain.CurrentDomain.CreateInstanceAndUnwrap(
                "CustomSecurityManager, Version=1.0.0.3, Culture=neutral, " +
                "PublicKeyToken=5659fc598c2a503e",
                "MyNamespace.MySecurityManager") as HostSecurityManager;
            Console.WriteLine(" Custom Security Manager Created.");
        }

        public override void InitializeNewDomain(AppDomainSetup appDomainInfo)
        {
            Console.Write("Initialize new domain called:  ");
            Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
            InitializationFlags =
                AppDomainManagerInitializationOptions.RegisterWithHost;
        }

        public override HostSecurityManager HostSecurityManager
        {
            get
            {
                return mySecurityManager;
            }
        }
    }
}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

  • SecurityAction InheritanceDemand

    供派生类将可执行代码插入到公共语言运行时承载基础结构中。关联的枚举：SecurityPermissionFlag..::.Infrastructure。 供派生类将可执行代码插入到公共语言运行时承载基础结构中。关联的枚举：SecurityPermissionFlag..::.Infrastructure。

System System..::.AppDomainManagerAppDomainManager
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：1.0

参考

AppDomainManager 成员
System 命名空间


AppDomainManager 成员

AppDomainManager 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainManager 类

提供非托管宿主的等效托管宿主。

AppDomainManager 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

AppDomainManager 类
System 命名空间


AppDomainManager 构造函数

AppDomainManager 构造函数
AppDomainManager 类

初始化 AppDomainManager 类的一个新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public AppDomainManager()
public:
AppDomainManager()
new : unit -> AppDomainManager
说明 说明

只有被授予 FullTrust 的程序集（如全局程序集缓存中的程序集或者在 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法中标识为 fullTrustAssemblies 的程序集）才可以在 AppDomainManager 构造函数和 InitializeNewDomain 方法中加载。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：1.0

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager 方法

AppDomainManager 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainManager 类

AppDomainManager 类型公开以下成员。

名称 说明
页首

参考

AppDomainManager 类
System 命名空间


AppDomainManager ..::.CheckSecuritySettings 方法

AppDomainManager
.
.
::
.
CheckSecuritySettings 方法
AppDomainManager 类

指示是否允许在应用程序域中执行指定的操作。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function CheckSecuritySettings ( _
    state As SecurityState _
) As Boolean
public virtual bool CheckSecuritySettings(
    SecurityState state
)
public:
virtual bool CheckSecuritySettings(
    SecurityState^ state
)
abstract CheckSecuritySettings :
        state:SecurityState -> bool
override CheckSecuritySettings :
        state:SecurityState -> bool

参数

state
类型： System.Security SecurityState
SecurityState 的一个子类，用来标识请求其安全状态的操作。

返回值

类型： System Boolean
如果宿主允许在应用程序域中执行 state 指定的操作，则为 true；否则为 false。

该方法的默认实现返回 false。

在调用 IsolatedStorageFile..::.IncreaseQuotaTo 方法以增加独立的存储配额时，调用此方法。承载公共语言运行时 (CLR) 的应用程序可以重写 CheckSecuritySettings 方法以根据 IsolatedStorageSecurityState 对象（继承 SecurityState）执行策略决策，然后可以允许或阻止增加。例如，主机可能提示最终用户批准或拒绝请求，以增加配额。主机的 CheckSecuritySettings 实现应考虑拒绝服务攻击的可能性。例如，只有从用户启动的事件（如按钮单击）中调用该方法时，才应提示用户。 在调用 IsolatedStorageFile..::.IncreaseQuotaTo 方法以增加独立的存储配额时，调用此方法。承载公共语言运行时 (CLR) 的应用程序可以重写 CheckSecuritySettings 方法以根据 IsolatedStorageSecurityState 对象（继承 SecurityState）执行策略决策，然后可以允许或阻止增加。例如，主机可能提示最终用户批准或拒绝请求，以增加配额。主机的 CheckSecuritySettings 实现应考虑拒绝服务攻击的可能性。例如，只有从用户启动的事件（如按钮单击）中调用该方法时，才应提示用户。 在调用 IsolatedStorageFile..::.IncreaseQuotaTo 方法以增加独立的存储配额时，调用此方法。承载公共语言运行时 (CLR) 的应用程序可以重写 CheckSecuritySettings 方法以根据 IsolatedStorageSecurityState 对象（继承 SecurityState）执行策略决策，然后可以允许或阻止增加。例如，主机可能提示最终用户批准或拒绝请求，以增加配额。主机的 CheckSecuritySettings 实现应考虑拒绝服务攻击的可能性。例如，只有从用户启动的事件（如按钮单击）中调用该方法时，才应提示用户。 在调用 IsolatedStorageFile..::.IncreaseQuotaTo 方法以增加独立的存储配额时，调用此方法。承载公共语言运行时 (CLR) 的应用程序可以重写 CheckSecuritySettings 方法以根据 IsolatedStorageSecurityState 对象（继承 SecurityState）执行策略决策，然后可以允许或阻止增加。例如，主机可能提示最终用户批准或拒绝请求，以增加配额。主机的 CheckSecuritySettings 实现应考虑拒绝服务攻击的可能性。例如，只有从用户启动的事件（如按钮单击）中调用该方法时，才应提示用户。 在调用 IsolatedStorageFile..::.IncreaseQuotaTo 方法以增加独立的存储配额时，调用此方法。承载公共语言运行时 (CLR) 的应用程序可以重写 CheckSecuritySettings 方法以根据 IsolatedStorageSecurityState 对象（继承 SecurityState）执行策略决策，然后可以允许或阻止增加。例如，主机可能提示最终用户批准或拒绝请求，以增加配额。主机的 CheckSecuritySettings 实现应考虑拒绝服务攻击的可能性。例如，只有从用户启动的事件（如按钮单击）中调用该方法时，才应提示用户。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager ..::.CreateDomain 方法

AppDomainManager
.
.
::
.
CreateDomain 方法
AppDomainManager 类

返回新的或现有的应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function CreateDomain ( _
    friendlyName As String, _
    securityInfo As Evidence, _
    appDomainInfo As AppDomainSetup _
) As AppDomain
public virtual AppDomain CreateDomain(
    string friendlyName,
    Evidence securityInfo,
    AppDomainSetup appDomainInfo
)
public:
virtual AppDomain^ CreateDomain(
    String^ friendlyName,
    Evidence^ securityInfo,
    AppDomainSetup^ appDomainInfo
)
abstract CreateDomain :
        friendlyName:string *
        securityInfo:Evidence *
        appDomainInfo:AppDomainSetup -> AppDomain
override CreateDomain :
        friendlyName:string *
        securityInfo:Evidence *
        appDomainInfo:AppDomainSetup -> AppDomain

参数

friendlyName
类型： System String
域的友好名称。
securityInfo
类型： System.Security.Policy Evidence
一个对象，其中包含通过安全策略映射的证据，这些证据用于建立堆栈顶层的权限集。
appDomainInfo
类型： System AppDomainSetup
包含应用程序域初始化信息的对象。

返回值

类型： System AppDomain
新的或现有的应用程序域。

该友好名称由 friendlyName 参数指定，可在用户界面中显示以标识域。有关更多信息，请参见 FriendlyName 属性。 该友好名称由 friendlyName 参数指定，可在用户界面中显示以标识域。有关更多信息，请参见 FriendlyName 属性。

默认的 CreateDomain 方法调用受保护的 CreateDomainHelper 方法来创建 AppDomain。重写此方法不需要调用 CreateDomainHelper 方法，但可以返回一个现有的域。 默认的 CreateDomain 方法调用受保护的 CreateDomainHelper 方法来创建 AppDomain。重写此方法不需要调用 CreateDomainHelper 方法，但可以返回一个现有的域。

对继承者的说明

从 AppDomainManager 类继承并重写 CreateDomain 方法时，可以在调用 CreateDomainHelper 方法之前执行自定义应用程序域的初始化活动，或者根本不调用帮助器方法。例如，可以修改作为 securityInfo 传入的证据、更新关联的 AppDomainSetup 的字段，或者重新使用现有的域。 从 AppDomainManager 类继承并重写 CreateDomain 方法时，可以在调用 CreateDomainHelper 方法之前执行自定义应用程序域的初始化活动，或者根本不调用帮助器方法。例如，可以修改作为 securityInfo 传入的证据、更新关联的 AppDomainSetup 的字段，或者重新使用现有的域。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager ..::.CreateDomainHelper 方法

AppDomainManager
.
.
::
.
CreateDomainHelper 方法
AppDomainManager 类

提供帮助器方法以创建一个应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain := True)> _
Protected Shared Function CreateDomainHelper ( _
    friendlyName As String, _
    securityInfo As Evidence, _
    appDomainInfo As AppDomainSetup _
) As AppDomain
[SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain = true)]
protected static AppDomain CreateDomainHelper(
    string friendlyName,
    Evidence securityInfo,
    AppDomainSetup appDomainInfo
)
[SecurityPermissionAttribute(SecurityAction::Demand, ControlAppDomain = true)]
protected:
static AppDomain^ CreateDomainHelper(
    String^ friendlyName,
    Evidence^ securityInfo,
    AppDomainSetup^ appDomainInfo
)
[<SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain = true)>]
static member CreateDomainHelper :
        friendlyName:string *
        securityInfo:Evidence *
        appDomainInfo:AppDomainSetup -> AppDomain

参数

friendlyName
类型： System String
域的友好名称。
securityInfo
类型： System.Security.Policy Evidence
一个对象，其中包含通过安全策略映射的证据，这些证据用于建立堆栈顶层的权限集。
appDomainInfo
类型： System AppDomainSetup
包含应用程序域初始化信息的对象。

返回值

类型： System AppDomain
新创建的应用程序域。
异常 | 条件
ArgumentNullException | friendlyName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

这个受保护的帮助器方法处理新应用程序域的创建。

此友好名称由 friendlyName 参数指定，可在用户界面中显示以标识域。有关更多信息，请参见 FriendlyName 属性。 此友好名称由 friendlyName 参数指定，可在用户界面中显示以标识域。有关更多信息，请参见 FriendlyName 属性。

  • SecurityPermission

    用于操作基础结构代码。安全操作：LinkDemand。关联枚举：SecurityPermissionFlag..::.Infrastructure
用于操作基础结构代码。安全操作：LinkDemand。关联枚举：SecurityPermissionFlag..::.Infrastructure
用于操作基础结构代码。安全操作：LinkDemand。关联枚举：SecurityPermissionFlag..::.Infrastructure

  • SecurityPermission

    表示创建和操作应用程序域的能力。安全操作：Demand。关联枚举：SecurityPermissionFlag..::.ControlAppDomain
表示创建和操作应用程序域的能力。安全操作：Demand。关联枚举：SecurityPermissionFlag..::.ControlAppDomain
表示创建和操作应用程序域的能力。安全操作：Demand。关联枚举：SecurityPermissionFlag..::.ControlAppDomain

  • SecurityPermission

    用于控制证据。安全操作：Demand。关联的枚举：SecurityPermissionFlag..::.ControlEvidence
用于控制证据。安全操作：Demand。关联的枚举：SecurityPermissionFlag..::.ControlEvidence
用于控制证据。安全操作：Demand。关联的枚举：SecurityPermissionFlag..::.ControlEvidence

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager ..::.InitializeNewDomain 方法

AppDomainManager
.
.
::
.
InitializeNewDomain 方法
AppDomainManager 类

初始化新应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub InitializeNewDomain ( _
    appDomainInfo As AppDomainSetup _
)
public virtual void InitializeNewDomain(
    AppDomainSetup appDomainInfo
)
public:
virtual void InitializeNewDomain(
    AppDomainSetup^ appDomainInfo
)
abstract InitializeNewDomain :
        appDomainInfo:AppDomainSetup -> unit
override InitializeNewDomain :
        appDomainInfo:AppDomainSetup -> unit

参数

appDomainInfo
类型： System AppDomainSetup
包含应用程序域初始化信息的对象。
重要说明 重要事项

请勿使用此方法在 ASP.NET 中初始化应用程序域。在 ASP.NET 中，必须由宿主进行配置。如果使用此方法初始化应用程序域，则宿主在尝试初始化应用程序域时会引发 InvalidOperationException。异常消息指示已发生初始化。 请勿使用此方法在 ASP.NET 中初始化应用程序域。在 ASP.NET 中，必须由宿主进行配置。如果使用此方法初始化应用程序域，则宿主在尝试初始化应用程序域时会引发 InvalidOperationException。异常消息指示已发生初始化。 请勿使用此方法在 ASP.NET 中初始化应用程序域。在 ASP.NET 中，必须由宿主进行配置。如果使用此方法初始化应用程序域，则宿主在尝试初始化应用程序域时会引发 InvalidOperationException。异常消息指示已发生初始化。 请勿使用此方法在 ASP.NET 中初始化应用程序域。在 ASP.NET 中，必须由宿主进行配置。如果使用此方法初始化应用程序域，则宿主在尝试初始化应用程序域时会引发 InvalidOperationException。异常消息指示已发生初始化。

在构造函数之后立即调用此方法。默认的 InitializeNewDomain 实现不执行任何操作。自定义实现可以设置内部类和委托，可以设置具有非托管宿主接口的接口，还可以为新的 AppDomain 设置事件处理程序。 在构造函数之后立即调用此方法。默认的 InitializeNewDomain 实现不执行任何操作。自定义实现可以设置内部类和委托，可以设置具有非托管宿主接口的接口，还可以为新的 AppDomain 设置事件处理程序。 在构造函数之后立即调用此方法。默认的 InitializeNewDomain 实现不执行任何操作。自定义实现可以设置内部类和委托，可以设置具有非托管宿主接口的接口，还可以为新的 AppDomain 设置事件处理程序。

此外，对于外接程序激活，自定义实现可以将当前 AppDomain 标识为目标应用程序域。

从 .NET Framework 4 版 开始，您可以使用此方法在应用程序启动时将默认应用程序域沙盒，或修改新应用程序域的沙盒。 若要这样做，请在初始化应用程序域之前，调整归属于 appDomainSetup 的 AppDomainSetup..::.ApplicationTrust 属性的 ApplicationTrust 对象上的 DefaultGrantSet 和 FullTrustAssemblies 属性。

说明 说明

只有被授予 FullTrust 的程序集（如全局程序集缓存中的程序集或者在 AppDomain..::.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, array<StrongName>[]()[]) 方法中标识为 fullTrustAssemblies 的程序集）才可以在 AppDomainManager 构造函数和 InitializeNewDomain 方法中加载。

下面的示例演示自定义应用程序域管理器的 InitializeNewDomain 方法的重写。此代码示例摘自一个为 AppDomainManager 类提供的更大示例。 下面的示例演示自定义应用程序域管理器的 InitializeNewDomain 方法的重写。此代码示例摘自一个为 AppDomainManager 类提供的更大示例。

Public Overrides Sub InitializeNewDomain(ByVal appDomainInfo _
    As AppDomainSetup)
    Console.Write("Initialize new domain called:  ")
    Console.WriteLine(AppDomain.CurrentDomain.FriendlyName)
    InitializationFlags = _
        AppDomainManagerInitializationOptions.RegisterWithHost
End Sub 'InitializeNewDomain

public override void InitializeNewDomain(AppDomainSetup appDomainInfo)
{
    Console.Write("Initialize new domain called:  ");
    Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
    InitializationFlags =
        AppDomainManagerInitializationOptions.RegisterWithHost;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：1.0

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager ..::.MemberwiseClone 方法

AppDomainManager
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainManager 类

名称 说明
页首

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager 属性

AppDomainManager 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainManager 类

AppDomainManager 类型公开以下成员。

名称 说明
页首

参考

AppDomainManager 类
System 命名空间


AppDomainManager ..::.ApplicationActivator 属性

AppDomainManager
.
.
::
.
ApplicationActivator 属性
AppDomainManager 类

获取应用程序激活器，该激活器用于激活相应域中的外接程序和基于清单的应用程序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property ApplicationActivator As ApplicationActivator
    Get
public virtual ApplicationActivator ApplicationActivator { get; }
public:
virtual property ApplicationActivator^ ApplicationActivator {
    ApplicationActivator^ get ();
}
abstract ApplicationActivator : ApplicationActivator
override ApplicationActivator : ApplicationActivator

属性值

类型： System.Runtime.Hosting ApplicationActivator
应用程序激活器。

在所有的外接程序和基于清单的应用程序激活调用路由到的每个 AppDomain 中，都有 ApplicationActivator 类的一个指定实例。当前 AppDomain 的 AppDomainManager 可以提供其各自的自定义 ApplicationActivator，也可以创建默认 ApplicationActivator 的实例。 在所有的外接程序和基于清单的应用程序激活调用路由到的每个 AppDomain 中，都有 ApplicationActivator 类的一个指定实例。当前 AppDomain 的 AppDomainManager 可以提供其各自的自定义 ApplicationActivator，也可以创建默认 ApplicationActivator 的实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager ..::.EntryAssembly 属性

AppDomainManager
.
.
::
.
EntryAssembly 属性
AppDomainManager 类

获取应用程序的入口程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property EntryAssembly As Assembly
    Get
public virtual Assembly EntryAssembly { get; }
public:
virtual property Assembly^ EntryAssembly {
    Assembly^ get ();
}
abstract EntryAssembly : Assembly
override EntryAssembly : Assembly

属性值

类型： System.Reflection Assembly
应用程序的入口程序集。

对于清单激活的应用程序，入口程序集由应用程序清单决定；对于非清单激活的应用程序，入口程序集是默认应用程序域中的可执行过程。在其他应用程序域中，入口程序集是通过 AppDomain..::.ExecuteAssembly 方法执行的第一个可执行过程。
对于清单激活的应用程序，入口程序集由应用程序清单决定；对于非清单激活的应用程序，入口程序集是默认应用程序域中的可执行过程。在其他应用程序域中，入口程序集是通过 AppDomain..::.ExecuteAssembly 方法执行的第一个可执行过程。
对于清单激活的应用程序，入口程序集由应用程序清单决定；对于非清单激活的应用程序，入口程序集是默认应用程序域中的可执行过程。在其他应用程序域中，入口程序集是通过 AppDomain..::.ExecuteAssembly 方法执行的第一个可执行过程。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager ..::.HostExecutionContextManager 属性

AppDomainManager
.
.
::
.
HostExecutionContextManager 属性
AppDomainManager 类

获取宿主执行上下文管理器，该管理器对执行上下文的流进行管理。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property HostExecutionContextManager As HostExecutionContextManager
    Get
public virtual HostExecutionContextManager HostExecutionContextManager { get; }
public:
virtual property HostExecutionContextManager^ HostExecutionContextManager {
    HostExecutionContextManager^ get ();
}
abstract HostExecutionContextManager : HostExecutionContextManager
override HostExecutionContextManager : HostExecutionContextManager

属性值

类型： System.Threading HostExecutionContextManager
宿主执行上下文管理器。

此属性允许宿主提供一个 HostExecutionContextManager，它可参与异步调用之间执行上下文的流。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager ..::.HostSecurityManager 属性

AppDomainManager
.
.
::
.
HostSecurityManager 属性
AppDomainManager 类

获取宿主安全管理器，该管理器参与应用程序域的安全决策。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property HostSecurityManager As HostSecurityManager
    Get
public virtual HostSecurityManager HostSecurityManager { get; }
public:
virtual property HostSecurityManager^ HostSecurityManager {
    HostSecurityManager^ get ();
}
abstract HostSecurityManager : HostSecurityManager
override HostSecurityManager : HostSecurityManager

属性值

类型： System.Security HostSecurityManager
宿主安全管理器。

此属性允许宿主提供一个 HostSecurityManager，它参与应用程序域的安全决策。

下面的示例演示自定义应用程序域管理器的 HostSecurityManager 属性的重写。此代码示例摘自一个为 AppDomainManager 类提供的更大示例。 下面的示例演示自定义应用程序域管理器的 HostSecurityManager 属性的重写。此代码示例摘自一个为 AppDomainManager 类提供的更大示例。

    Public Overrides ReadOnly Property HostSecurityManager() _
        As HostSecurityManager
        Get
            Return mySecurityManager
        End Get
    End Property
End Class 'MyAppDomainManager

public override HostSecurityManager HostSecurityManager
{
    get
    {
        return mySecurityManager;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManager ..::.InitializationFlags 属性

AppDomainManager
.
.
::
.
InitializationFlags 属性
AppDomainManager 类

获取自定义应用程序域管理器的初始化标志。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property InitializationFlags As AppDomainManagerInitializationOptions
    Get
    Set
public AppDomainManagerInitializationOptions InitializationFlags { get; set; }
public:
property AppDomainManagerInitializationOptions InitializationFlags {
    AppDomainManagerInitializationOptions get ();
    void set (AppDomainManagerInitializationOptions value);
}
member InitializationFlags : AppDomainManagerInitializationOptions with get, set

属性值

类型： System AppDomainManagerInitializationOptions
枚举值的按位组合，这些枚举值描述要执行的初始化操作。默认值为 None。 枚举值的按位组合，这些枚举值描述要执行的初始化操作。默认值为 None。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：1.0

参考

AppDomainManager 类
AppDomainManager 成员
System 命名空间


AppDomainManagerInitializationOptions 枚举

AppDomainManagerInitializationOptions 枚举

指定在初始化一个新域时自定义应用程序域管理器应采取的操作。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<FlagsAttribute> _
Public Enumeration AppDomainManagerInitializationOptions
[ComVisibleAttribute(true)]
[FlagsAttribute]
public enum AppDomainManagerInitializationOptions
[ComVisibleAttribute(true)]
[FlagsAttribute]
public enum class AppDomainManagerInitializationOptions
[<ComVisibleAttribute(true)>]
[<FlagsAttribute>]
type AppDomainManagerInitializationOptions
 | 成员名称 | 说明
由 XNA Framework 提供支持 | None | 无初始化操作。
由 XNA Framework 提供支持 | RegisterWithHost | 向非托管主机注册当前 AppDomainManager 的 COM 可调用包装。

这些标志用于 AppDomainManager 类中的属性设置。AppDomainManagerInitializationOptions 标志仅适用于自定义应用程序域管理器；这些标记不适用于默认管理器。默认应用程序域管理器中的 InitializeNewDomain 方法不执行任何操作。默认枚举值为 None。 这些标志用于 AppDomainManager 类中的属性设置。AppDomainManagerInitializationOptions 标志仅适用于自定义应用程序域管理器；这些标记不适用于默认管理器。默认应用程序域管理器中的 InitializeNewDomain 方法不执行任何操作。默认枚举值为 None。 这些标志用于 AppDomainManager 类中的属性设置。AppDomainManagerInitializationOptions 标志仅适用于自定义应用程序域管理器；这些标记不适用于默认管理器。默认应用程序域管理器中的 InitializeNewDomain 方法不执行任何操作。默认枚举值为 None。 这些标志用于 AppDomainManager 类中的属性设置。AppDomainManagerInitializationOptions 标志仅适用于自定义应用程序域管理器；这些标记不适用于默认管理器。默认应用程序域管理器中的 InitializeNewDomain 方法不执行任何操作。默认枚举值为 None。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：1.0

参考

System 命名空间


AppDomainSetup 类

AppDomainSetup 类
成员

表示可以添加到 AppDomain 的实例的程序集绑定信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public NotInheritable Class AppDomainSetup _
    Implements IAppDomainSetup
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public sealed class AppDomainSetup : IAppDomainSetup
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
public ref class AppDomainSetup sealed : IAppDomainSetup
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
type AppDomainSetup =
    class
        interface IAppDomainSetup
    end

更改 AppDomainSetup 实例的属性不会影响任何现有的 AppDomain。这种属性更改只会影响到新 AppDomain 的创建（以 AppDomainSetup 实例作为参数调用 CreateDomain 方法时）。 更改 AppDomainSetup 实例的属性不会影响任何现有的 AppDomain。这种属性更改只会影响到新 AppDomain 的创建（以 AppDomainSetup 实例作为参数调用 CreateDomain 方法时）。

此类实现 IAppDomainSetup 接口。

警告说明 警告

DisallowCodeDownload 属性的默认值是 false。此设置对于服务是不安全的。若要帮助防止服务下载部分受信任的代码，请将此属性设置为 true DisallowCodeDownload 属性的默认值是 false。此设置对于服务是不安全的。若要帮助防止服务下载部分受信任的代码，请将此属性设置为 true DisallowCodeDownload 属性的默认值是 false。此设置对于服务是不安全的。若要帮助防止服务下载部分受信任的代码，请将此属性设置为 true

System System..::.AppDomainSetupAppDomainSetup
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：1.0

参考

AppDomainSetup 成员
System 命名空间

其他资源

如何：配置应用程序域


AppDomainSetup 成员

AppDomainSetup 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainSetup 类

表示可以添加到 AppDomain 的实例的程序集绑定信息。

AppDomainSetup 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

AppDomainSetup 类
System 命名空间


AppDomainSetup 构造函数

AppDomainSetup 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainSetup 类

初始化 AppDomainSetup 类的新实例。

名称 说明
页首

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup 构造函数

AppDomainSetup 构造函数
AppDomainSetup 类

初始化 AppDomainSetup 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public AppDomainSetup()
public:
AppDomainSetup()
new : unit -> AppDomainSetup

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：1.0

参考

AppDomainSetup 类
AppDomainSetup 成员
AppDomainSetup 重载
System 命名空间


AppDomainSetup 构造函数 (ActivationArguments)

AppDomainSetup 构造函数 (ActivationArguments)
AppDomainSetup 类

使用基于清单的应用程序域激活所需的指定激活参数初始化 AppDomainSetup 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    activationArguments As ActivationArguments _
)
public AppDomainSetup(
    ActivationArguments activationArguments
)
public:
AppDomainSetup(
    ActivationArguments^ activationArguments
)
new :
        activationArguments:ActivationArguments -> AppDomainSetup

参数

activationArguments
类型： System.Runtime.Hosting ActivationArguments
一个对象，指定以基于清单的方式激活新的应用程序域所需的信息。
异常 | 条件
ArgumentNullException | activationArguments 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

为 activationArguments 指定的对象可以通过 ActivationArguments 属性来访问。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
AppDomainSetup 重载
System 命名空间


AppDomainSetup 构造函数 (ActivationContext)

AppDomainSetup 构造函数 (ActivationContext)
AppDomainSetup 类

使用指定的激活上下文（用于基于清单的应用程序域激活）初始化 AppDomainSetup 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    activationContext As ActivationContext _
)
public AppDomainSetup(
    ActivationContext activationContext
)
public:
AppDomainSetup(
    ActivationContext^ activationContext
)
new :
        activationContext:ActivationContext -> AppDomainSetup

参数

activationContext
类型： System ActivationContext
要用于应用程序域的激活上下文。
异常 | 条件
ArgumentNullException | activationContext 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

为 activationContext 指定的 ActivationContext 对象用于生成一个 ActivationArguments 对象，生成的对象中含有激活新的应用程序域所需的信息。这个 ActivationArguments 对象可以通过 ActivationArguments 属性来访问。 为 activationContext 指定的 ActivationContext 对象用于生成一个 ActivationArguments 对象，生成的对象中含有激活新的应用程序域所需的信息。这个 ActivationArguments 对象可以通过 ActivationArguments 属性来访问。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
AppDomainSetup 重载
System 命名空间
ActivationArguments
ActivationArguments
ActivationContext


AppDomainSetup 方法

AppDomainSetup 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainSetup 类

AppDomainSetup 类型公开以下成员。

名称 说明
页首

参考

AppDomainSetup 类
System 命名空间


AppDomainSetup ..::.GetConfigurationBytes 方法

AppDomainSetup
.
.
::
.
GetConfigurationBytes 方法
AppDomainSetup 类

返回由 SetConfigurationBytes 方法设置的 XML 配置信息，这些信息优先于应用程序的 XML 配置信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetConfigurationBytes As Byte()
public byte[] GetConfigurationBytes()
public:
array<unsigned char>^ GetConfigurationBytes()
member GetConfigurationBytes : unit -> byte[]

返回值

类型：
array<
System Byte
>
[]
()
[]

一个数组，其中包含由 SetConfigurationBytes 方法设置的 XML 配置信息；如果未调用 SetConfigurationBytes 方法，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

通过使用 SetConfigurationBytes 方法，可以重写创建新的应用程序域的应用程序的配置信息。value 中的配置文件信息将重写应用程序的配置文件信息。例如，如果应用程序 Example.exe 创建一个新的应用程序域，它可以对最初从文件 Example.exe.config 中获得的配置信息进行重写。 通过使用 SetConfigurationBytes 方法，可以重写创建新的应用程序域的应用程序的配置信息。value 中的配置文件信息将重写应用程序的配置文件信息。例如，如果应用程序 Example.exe 创建一个新的应用程序域，它可以对最初从文件 Example.exe.config 中获得的配置信息进行重写。 通过使用 SetConfigurationBytes 方法，可以重写创建新的应用程序域的应用程序的配置信息。value 中的配置文件信息将重写应用程序的配置文件信息。例如，如果应用程序 Example.exe 创建一个新的应用程序域，它可以对最初从文件 Example.exe.config 中获得的配置信息进行重写。

重要说明 重要事项

配置文件信息的一些使用者不使用 SetConfigurationBytes 方法存储的信息。运行时并不实施此规则。若要确保所有配置文件信息在新的应用程序域中被重写，请使用 ConfigurationFile 属性指定配置文件。SetConfigurationBytes 方法不影响程序集绑定。 配置文件信息的一些使用者不使用 SetConfigurationBytes 方法存储的信息。运行时并不实施此规则。若要确保所有配置文件信息在新的应用程序域中被重写，请使用 ConfigurationFile 属性指定配置文件。SetConfigurationBytes 方法不影响程序集绑定。 配置文件信息的一些使用者不使用 SetConfigurationBytes 方法存储的信息。运行时并不实施此规则。若要确保所有配置文件信息在新的应用程序域中被重写，请使用 ConfigurationFile 属性指定配置文件。SetConfigurationBytes 方法不影响程序集绑定。 配置文件信息的一些使用者不使用 SetConfigurationBytes 方法存储的信息。运行时并不实施此规则。若要确保所有配置文件信息在新的应用程序域中被重写，请使用 ConfigurationFile 属性指定配置文件。SetConfigurationBytes 方法不影响程序集绑定。

value 中的 XML 与普通配置文件中的 XML 一样，只是它以 Byte 数组的形式存储。

若要访问某应用程序域的配置字节，请先使用 AppDomain..::.SetupInformation 属性获取应用程序域的 AppDomainSetup 对象，然后使用 GetConfigurationBytes 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.SetCompatibilitySwitches 方法

AppDomainSetup
.
.
::
.
SetCompatibilitySwitches 方法
AppDomainSetup 类

设置指定的开关，从而使应用程序域针对指定问题与早期版本的 .NET Framework 兼容。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetCompatibilitySwitches ( _
    switches As IEnumerable(Of String) _
)
public void SetCompatibilitySwitches(
    IEnumerable<string> switches
)
public:
void SetCompatibilitySwitches(
    IEnumerable<String^>^ switches
)
member SetCompatibilitySwitches :
        switches:IEnumerable<string> -> unit

参数

switches
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
String
>
)
>
)

一组用于指定兼容性开关的可枚举字符串值，或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），null 表示清除现有的兼容性开关。

.NET Framework 的主要版本有时从以前版本引入重大更改。例如，.NET Framework 4 版 从 .NET Framework 3.5 版 引入少量重大更改。使用 SetCompatibilitySwitches 方法指定应该为应用程序域回滚这些重大更改中的一个或多个，使行为与以前版本的 .NET Framework 兼容。 .NET Framework 的主要版本有时从以前版本引入重大更改。例如，.NET Framework 4 版 从 .NET Framework 3.5 版 引入少量重大更改。使用 SetCompatibilitySwitches 方法指定应该为应用程序域回滚这些重大更改中的一个或多个，使行为与以前版本的 .NET Framework 兼容。 .NET Framework 的主要版本有时从以前版本引入重大更改。例如，.NET Framework 4 版 从 .NET Framework 3.5 版 引入少量重大更改。使用 SetCompatibilitySwitches 方法指定应该为应用程序域回滚这些重大更改中的一个或多个，使行为与以前版本的 .NET Framework 兼容。

每当调用此方法时，它都会替换现有切换设置。若要清除设置，请为 switches 参数指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 每当调用此方法时，它都会替换现有切换设置。若要清除设置，请为 switches 参数指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

您为 switches 提供的字符串值集可能是一个简单的字符串数组，因为数组实现 IEnumerable 接口。

下表提供了可设置为还原 .NET Framework 早期版本行为的兼容性开关的示例。

Switch | 含义
“NetFx40_LegacySecurityPolicy” | 在该应用程序域中启用了 .NET Framework 3.5 的代码访问安全 (CAS)。请参见 <NetFx40_LegacySecurityPolicy> 元素。 在该应用程序域中启用了 .NET Framework 3.5 的代码访问安全 (CAS)。请参见 <NetFx40_LegacySecurityPolicy> 元素。
“NetFx40_Legacy20SortingBehavior” | 在此应用程序域中启用 .NET Framework 3.5 的字符串排序默认值。
"NetFx40_TimeSpanLegacyFormatMode" | 在此应用程序域中启用了 .NET Framework 3.5 的 TimeSpan 格式设置行为。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.SetConfigurationBytes 方法

AppDomainSetup
.
.
::
.
SetConfigurationBytes 方法
AppDomainSetup 类

提供应用程序域的 XML 配置信息，重写应用程序的 XML 配置信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetConfigurationBytes ( _
    value As Byte() _
)
public void SetConfigurationBytes(
    byte[] value
)
public:
void SetConfigurationBytes(
    array<unsigned char>^ value
)
member SetConfigurationBytes :
        value:byte[] -> unit

参数

value
类型：
array<
System Byte
>
[]
()
[]

一个数组，其中包含要用于应用程序域的 XML 配置信息。

通过使用 SetConfigurationBytes 方法，可以重写创建新的应用程序域的应用程序的配置信息。value 中的配置文件信息将重写应用程序的配置文件信息。例如，如果应用程序 Example.exe 创建一个新的应用程序域，它可以对最初从文件 Example.exe.config 中获得的配置信息进行重写。 通过使用 SetConfigurationBytes 方法，可以重写创建新的应用程序域的应用程序的配置信息。value 中的配置文件信息将重写应用程序的配置文件信息。例如，如果应用程序 Example.exe 创建一个新的应用程序域，它可以对最初从文件 Example.exe.config 中获得的配置信息进行重写。 通过使用 SetConfigurationBytes 方法，可以重写创建新的应用程序域的应用程序的配置信息。value 中的配置文件信息将重写应用程序的配置文件信息。例如，如果应用程序 Example.exe 创建一个新的应用程序域，它可以对最初从文件 Example.exe.config 中获得的配置信息进行重写。

重要说明 重要事项

配置文件信息的一些使用者不使用 SetConfigurationBytes 方法存储的信息。运行时并不实施此规则。若要确保所有配置文件信息在新的应用程序域中被重写，请使用 ConfigurationFile 属性指定配置文件。SetConfigurationBytes 方法不影响程序集绑定。 配置文件信息的一些使用者不使用 SetConfigurationBytes 方法存储的信息。运行时并不实施此规则。若要确保所有配置文件信息在新的应用程序域中被重写，请使用 ConfigurationFile 属性指定配置文件。SetConfigurationBytes 方法不影响程序集绑定。 配置文件信息的一些使用者不使用 SetConfigurationBytes 方法存储的信息。运行时并不实施此规则。若要确保所有配置文件信息在新的应用程序域中被重写，请使用 ConfigurationFile 属性指定配置文件。SetConfigurationBytes 方法不影响程序集绑定。 配置文件信息的一些使用者不使用 SetConfigurationBytes 方法存储的信息。运行时并不实施此规则。若要确保所有配置文件信息在新的应用程序域中被重写，请使用 ConfigurationFile 属性指定配置文件。SetConfigurationBytes 方法不影响程序集绑定。

value 中的 XML 与普通配置文件中的 XML 一样，只是它以 Byte 数组的形式存储。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup 属性

AppDomainSetup 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainSetup 类

AppDomainSetup 类型公开以下成员。

名称 说明
页首

参考

AppDomainSetup 类
System 命名空间


AppDomainSetup ..::.ActivationArguments 属性

AppDomainSetup
.
.
::
.
ActivationArguments 属性
AppDomainSetup 类

获取或设置与应用程序域的激活有关的数据。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property ActivationArguments As ActivationArguments
    Get
    Set
public ActivationArguments ActivationArguments { get; set; }
public:
property ActivationArguments^ ActivationArguments {
    ActivationArguments^ get ();
    void set (ActivationArguments^ value);
}
member ActivationArguments : ActivationArguments with get, set

属性值

类型： System.Runtime.Hosting ActivationArguments
一个对象，其中包含与应用程序域的激活有关的数据。
异常 | 条件
InvalidOperationException | 该属性被设置为一个 ActivationArguments 对象，该对象的应用程序标识与 ApplicationTrust 属性返回的 ApplicationTrust 对象的应用程序标识不匹配。如果 ApplicationTrust 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不会引发异常。 该属性被设置为一个 ActivationArguments 对象，该对象的应用程序标识与 ApplicationTrust 属性返回的 ApplicationTrust 对象的应用程序标识不匹配。如果 ApplicationTrust 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不会引发异常。

如果此属性被设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不会引发异常。

ActivationArguments 对象所提供的信息支持基于清单的激活。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.AppDomainInitializer 属性

AppDomainSetup
.
.
::
.
AppDomainInitializer 属性
AppDomainSetup 类

获取或设置 AppDomainInitializer 委托，该委托表示一个在初始化应用程序域时调用的回调方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property AppDomainInitializer As AppDomainInitializer
    Get
    Set
public AppDomainInitializer AppDomainInitializer { get; set; }
public:
property AppDomainInitializer^ AppDomainInitializer {
    AppDomainInitializer^ get ();
    void set (AppDomainInitializer^ value);
}
member AppDomainInitializer : AppDomainInitializer with get, set

属性值

类型： System AppDomainInitializer
一个委托，表示初始化应用程序域时调用的回调方法。

要向此回调方法传递信息，可将一个字符串数组赋给 AppDomainInitializerArguments 属性。每次初始化 AppDomain 时该数组被传给该回调方法。 要向此回调方法传递信息，可将一个字符串数组赋给 AppDomainInitializerArguments 属性。每次初始化 AppDomain 时该数组被传给该回调方法。

该回调方法在新创建的应用程序域的上下文中执行。

下面的示例创建一个名为 ChildDomain 的子应用程序域，其中用到了一个 AppDomainSetup 对象和来自默认应用程序域的证据。AppDomainInitializer 属性被设置为 AppDomainInit 回调方法，在初始化该子域时将调用该方法。回调方法的参数放在一个字符串数组中，并赋给 AppDomainInitializerArguments 属性。在创建子域时，回调方法只是简单地输出这些字符串。 下面的示例创建一个名为 ChildDomain 的子应用程序域，其中用到了一个 AppDomainSetup 对象和来自默认应用程序域的证据。AppDomainInitializer 属性被设置为 AppDomainInit 回调方法，在初始化该子域时将调用该方法。回调方法的参数放在一个字符串数组中，并赋给 AppDomainInitializerArguments 属性。在创建子域时，回调方法只是简单地输出这些字符串。 下面的示例创建一个名为 ChildDomain 的子应用程序域，其中用到了一个 AppDomainSetup 对象和来自默认应用程序域的证据。AppDomainInitializer 属性被设置为 AppDomainInit 回调方法，在初始化该子域时将调用该方法。回调方法的参数放在一个字符串数组中，并赋给 AppDomainInitializerArguments 属性。在创建子域时，回调方法只是简单地输出这些字符串。 下面的示例创建一个名为 ChildDomain 的子应用程序域，其中用到了一个 AppDomainSetup 对象和来自默认应用程序域的证据。AppDomainInitializer 属性被设置为 AppDomainInit 回调方法，在初始化该子域时将调用该方法。回调方法的参数放在一个字符串数组中，并赋给 AppDomainInitializerArguments 属性。在创建子域时，回调方法只是简单地输出这些字符串。

Imports System
Imports System.Security.Policy

Public Class Example

    Public Shared Sub Main()

        ' Get a reference to the default application domain.
        '
        Dim current As AppDomain = AppDomain.CurrentDomain

        ' Create the AppDomainSetup that will be used to set up the child
        ' AppDomain.
        Dim ads As New AppDomainSetup()

        ' Use the evidence from the default application domain to
        ' create evidence for the child application domain.
        '
        Dim ev As Evidence = New Evidence(current.Evidence)

        ' Create an AppDomainInitializer delegate that represents the
        ' callback method, AppDomainInit. Assign this delegate to the
        ' AppDomainInitializer property of the AppDomainSetup object.
        '
        Dim adi As New AppDomainInitializer(AddressOf AppDomainInit)
        ads.AppDomainInitializer = adi

        ' Create an array of strings to pass as arguments to the callback
        ' method. Assign the array to the AppDomainInitializerArguments
        ' property.
        Dim initArgs() As String = {"String1", "String2"}
        ads.AppDomainInitializerArguments = initArgs

        ' Create a child application domain named "ChildDomain", using
        ' the evidence and the AppDomainSetup object.
        '
        Dim ad As AppDomain = _
            AppDomain.CreateDomain("ChildDomain", ev, ads)

        Console.WriteLine("Press the Enter key to exit the example program.")
        Console.ReadLine()
    End Sub

    ' The callback method invoked when the child application domain is
    ' initialized. The method simply displays the arguments that were
    ' passed to it.
    '
    Public Shared Sub AppDomainInit(ByVal args() As String)
        Console.WriteLine("AppDomain ""{0}"" is initialized with these arguments:", _
            AppDomain.CurrentDomain.FriendlyName)
        For Each arg As String In args
            Console.WriteLine("    {0}", arg)
        Next
    End Sub
End Class

' This code example produces the following output:
'
'AppDomain "ChildDomain" is initialized with these arguments:
'    String1
'    String2

using System;
using System.Security.Policy;

public class Example
{
    public static void Main()
    {
        // Get a reference to the default application domain.
        //
        AppDomain current = AppDomain.CurrentDomain;

        // Create the AppDomainSetup that will be used to set up the child
        // AppDomain.
        AppDomainSetup ads = new AppDomainSetup();

        // Use the evidence from the default application domain to
        // create evidence for the child application domain.
        //
        Evidence ev = new Evidence(current.Evidence);

        // Create an AppDomainInitializer delegate that represents the
        // callback method, AppDomainInit. Assign this delegate to the
        // AppDomainInitializer property of the AppDomainSetup object.
        //
        AppDomainInitializer adi = new AppDomainInitializer(AppDomainInit);
        ads.AppDomainInitializer = adi;

        // Create an array of strings to pass as arguments to the callback
        // method. Assign the array to the AppDomainInitializerArguments
        // property.
        string[] initArgs = {"String1", "String2"};
        ads.AppDomainInitializerArguments = initArgs;

        // Create a child application domain named "ChildDomain", using
        // the evidence and the AppDomainSetup object.
        //
        AppDomain ad = AppDomain.CreateDomain("ChildDomain", ev, ads);

        Console.WriteLine("Press the Enter key to exit the example program.");
        Console.ReadLine();
    }

    // The callback method invoked when the child application domain is
    // initialized. The method simply displays the arguments that were
    // passed to it.
    //
    public static void AppDomainInit(string[] args)
    {
        Console.WriteLine("AppDomain \"{0}\" is initialized with these arguments:",
            AppDomain.CurrentDomain.FriendlyName);
        foreach (string arg in args)
        {
            Console.WriteLine("    {0}", arg);
        }
    }
}

/* This code example produces the following output:

AppDomain "ChildDomain" is initialized with these arguments:
    String1
    String2
 */

using namespace System;
using namespace System::Security::Policy;

public ref class AppDomainInitializerExample
{
    // The callback method invoked when the child application domain is
    // initialized. The method simply displays the arguments that were
    // passed to it.
    //
public:
    static void AppDomainInit(array<String^>^ args)
    {
        Console::WriteLine("AppDomain \"{0}\" is initialized with these " +
            "arguments:", AppDomain::CurrentDomain->FriendlyName);
        for each (String^ arg in args)
        {
            Console::WriteLine("    {0}", arg);
        }
    }
};

int main()
{
    // Get a reference to the default application domain.
    //
    AppDomain^ currentDomain = AppDomain::CurrentDomain;

    // Create the AppDomainSetup that will be used to set up the child
    // AppDomain.
    AppDomainSetup^ domainSetup = gcnew AppDomainSetup();

    // Use the evidence from the default application domain to
    // create evidence for the child application domain.
    //
    Evidence^ evidence = gcnew Evidence(currentDomain->Evidence);

    // Create an AppDomainInitializer delegate that represents the
    // callback method, AppDomainInit. Assign this delegate to the
    // AppDomainInitializer property of the AppDomainSetup object.
    //
    AppDomainInitializer^ domainInitializer =
        gcnew AppDomainInitializer(AppDomainInitializerExample::AppDomainInit);
    domainSetup->AppDomainInitializer = domainInitializer;

    // Create an array of strings to pass as arguments to the callback
    // method. Assign the array to the AppDomainInitializerArguments
    // property.
    array<String^>^ initialArguments = {"String1", "String2"};
    domainSetup->AppDomainInitializerArguments = initialArguments;

    // Create a child application domain named "ChildDomain", using
    // the evidence and the AppDomainSetup object.
    //
    AppDomain^ appDomain = AppDomain::CreateDomain("ChildDomain",
        evidence, domainSetup);

    Console::WriteLine("Press the Enter key to exit the example program.");
    Console::ReadLine();
}

/* This code example produces the following output:

AppDomain "ChildDomain" is initialized with these arguments:
String1
String2
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间
AppDomainInitializer
AppDomainInitializerArguments


AppDomainSetup ..::.AppDomainInitializerArguments 属性

AppDomainSetup
.
.
::
.
AppDomainInitializerArguments 属性
AppDomainSetup 类

获取或设置传给 AppDomainInitializer 委托所表示的回调方法的参数。在初始化应用程序域时将调用该回调方法。 获取或设置传给 AppDomainInitializer 委托所表示的回调方法的参数。在初始化应用程序域时将调用该回调方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property AppDomainInitializerArguments As String()
    Get
    Set
public string[] AppDomainInitializerArguments { get; set; }
public:
property array<String^>^ AppDomainInitializerArguments {
    array<String^>^ get ();
    void set (array<String^>^ value);
}
member AppDomainInitializerArguments : string[] with get, set

属性值

类型：
array<
System String
>
[]
()
[]

一个字符串数组，当在 AppDomain 初始化过程中调用 AppDomainInitializer 委托所表示的回调方法时，该字符串数组将被传给该回调方法。

使用 AppDomainInitializer 属性来指定 AppDomain 初始化期间调用的回调方法。如果未设置 AppDomainInitializer 属性，则不会用到赋给该属性的数组。 使用 AppDomainInitializer 属性来指定 AppDomain 初始化期间调用的回调方法。如果未设置 AppDomainInitializer 属性，则不会用到赋给该属性的数组。

该回调方法在新创建的应用程序域的上下文中执行。

下面的代码示例创建一个名为 ChildDomain 的子应用程序域，其中用到了一个 AppDomainSetup 对象和来自默认应用程序域的证据。AppDomainInitializer 属性被设置为 AppDomainInit 回调方法，在初始化该子域时将调用该方法。回调方法的参数放在一个字符串数组中，并赋给 AppDomainInitializerArguments 属性。在创建子域时，回调方法只是简单地输出这些字符串。 下面的代码示例创建一个名为 ChildDomain 的子应用程序域，其中用到了一个 AppDomainSetup 对象和来自默认应用程序域的证据。AppDomainInitializer 属性被设置为 AppDomainInit 回调方法，在初始化该子域时将调用该方法。回调方法的参数放在一个字符串数组中，并赋给 AppDomainInitializerArguments 属性。在创建子域时，回调方法只是简单地输出这些字符串。 下面的代码示例创建一个名为 ChildDomain 的子应用程序域，其中用到了一个 AppDomainSetup 对象和来自默认应用程序域的证据。AppDomainInitializer 属性被设置为 AppDomainInit 回调方法，在初始化该子域时将调用该方法。回调方法的参数放在一个字符串数组中，并赋给 AppDomainInitializerArguments 属性。在创建子域时，回调方法只是简单地输出这些字符串。 下面的代码示例创建一个名为 ChildDomain 的子应用程序域，其中用到了一个 AppDomainSetup 对象和来自默认应用程序域的证据。AppDomainInitializer 属性被设置为 AppDomainInit 回调方法，在初始化该子域时将调用该方法。回调方法的参数放在一个字符串数组中，并赋给 AppDomainInitializerArguments 属性。在创建子域时，回调方法只是简单地输出这些字符串。

Imports System
Imports System.Security.Policy

Public Class Example

    Public Shared Sub Main()

        ' Get a reference to the default application domain.
        '
        Dim current As AppDomain = AppDomain.CurrentDomain

        ' Create the AppDomainSetup that will be used to set up the child
        ' AppDomain.
        Dim ads As New AppDomainSetup()

        ' Use the evidence from the default application domain to
        ' create evidence for the child application domain.
        '
        Dim ev As Evidence = New Evidence(current.Evidence)

        ' Create an AppDomainInitializer delegate that represents the
        ' callback method, AppDomainInit. Assign this delegate to the
        ' AppDomainInitializer property of the AppDomainSetup object.
        '
        Dim adi As New AppDomainInitializer(AddressOf AppDomainInit)
        ads.AppDomainInitializer = adi

        ' Create an array of strings to pass as arguments to the callback
        ' method. Assign the array to the AppDomainInitializerArguments
        ' property.
        Dim initArgs() As String = {"String1", "String2"}
        ads.AppDomainInitializerArguments = initArgs

        ' Create a child application domain named "ChildDomain", using
        ' the evidence and the AppDomainSetup object.
        '
        Dim ad As AppDomain = _
            AppDomain.CreateDomain("ChildDomain", ev, ads)

        Console.WriteLine("Press the Enter key to exit the example program.")
        Console.ReadLine()
    End Sub

    ' The callback method invoked when the child application domain is
    ' initialized. The method simply displays the arguments that were
    ' passed to it.
    '
    Public Shared Sub AppDomainInit(ByVal args() As String)
        Console.WriteLine("AppDomain ""{0}"" is initialized with these arguments:", _
            AppDomain.CurrentDomain.FriendlyName)
        For Each arg As String In args
            Console.WriteLine("    {0}", arg)
        Next
    End Sub
End Class

' This code example produces the following output:
'
'AppDomain "ChildDomain" is initialized with these arguments:
'    String1
'    String2

using System;
using System.Security.Policy;

public class Example
{
    public static void Main()
    {
        // Get a reference to the default application domain.
        //
        AppDomain current = AppDomain.CurrentDomain;

        // Create the AppDomainSetup that will be used to set up the child
        // AppDomain.
        AppDomainSetup ads = new AppDomainSetup();

        // Use the evidence from the default application domain to
        // create evidence for the child application domain.
        //
        Evidence ev = new Evidence(current.Evidence);

        // Create an AppDomainInitializer delegate that represents the
        // callback method, AppDomainInit. Assign this delegate to the
        // AppDomainInitializer property of the AppDomainSetup object.
        //
        AppDomainInitializer adi = new AppDomainInitializer(AppDomainInit);
        ads.AppDomainInitializer = adi;

        // Create an array of strings to pass as arguments to the callback
        // method. Assign the array to the AppDomainInitializerArguments
        // property.
        string[] initArgs = {"String1", "String2"};
        ads.AppDomainInitializerArguments = initArgs;

        // Create a child application domain named "ChildDomain", using
        // the evidence and the AppDomainSetup object.
        //
        AppDomain ad = AppDomain.CreateDomain("ChildDomain", ev, ads);

        Console.WriteLine("Press the Enter key to exit the example program.");
        Console.ReadLine();
    }

    // The callback method invoked when the child application domain is
    // initialized. The method simply displays the arguments that were
    // passed to it.
    //
    public static void AppDomainInit(string[] args)
    {
        Console.WriteLine("AppDomain \"{0}\" is initialized with these arguments:",
            AppDomain.CurrentDomain.FriendlyName);
        foreach (string arg in args)
        {
            Console.WriteLine("    {0}", arg);
        }
    }
}

/* This code example produces the following output:

AppDomain "ChildDomain" is initialized with these arguments:
    String1
    String2
 */

using namespace System;
using namespace System::Security::Policy;

public ref class AppDomainInitializerExample
{
    // The callback method invoked when the child application domain is
    // initialized. The method simply displays the arguments that were
    // passed to it.
    //
public:
    static void AppDomainInit(array<String^>^ args)
    {
        Console::WriteLine("AppDomain \"{0}\" is initialized with these " +
            "arguments:", AppDomain::CurrentDomain->FriendlyName);
        for each (String^ arg in args)
        {
            Console::WriteLine("    {0}", arg);
        }
    }
};

int main()
{
    // Get a reference to the default application domain.
    //
    AppDomain^ currentDomain = AppDomain::CurrentDomain;

    // Create the AppDomainSetup that will be used to set up the child
    // AppDomain.
    AppDomainSetup^ domainSetup = gcnew AppDomainSetup();

    // Use the evidence from the default application domain to
    // create evidence for the child application domain.
    //
    Evidence^ evidence = gcnew Evidence(currentDomain->Evidence);

    // Create an AppDomainInitializer delegate that represents the
    // callback method, AppDomainInit. Assign this delegate to the
    // AppDomainInitializer property of the AppDomainSetup object.
    //
    AppDomainInitializer^ domainInitializer =
        gcnew AppDomainInitializer(AppDomainInitializerExample::AppDomainInit);
    domainSetup->AppDomainInitializer = domainInitializer;

    // Create an array of strings to pass as arguments to the callback
    // method. Assign the array to the AppDomainInitializerArguments
    // property.
    array<String^>^ initialArguments = {"String1", "String2"};
    domainSetup->AppDomainInitializerArguments = initialArguments;

    // Create a child application domain named "ChildDomain", using
    // the evidence and the AppDomainSetup object.
    //
    AppDomain^ appDomain = AppDomain::CreateDomain("ChildDomain",
        evidence, domainSetup);

    Console::WriteLine("Press the Enter key to exit the example program.");
    Console::ReadLine();
}

/* This code example produces the following output:

AppDomain "ChildDomain" is initialized with these arguments:
String1
String2
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间
AppDomainInitializer
AppDomainInitializer


AppDomainSetup ..::.AppDomainManagerAssembly 属性

AppDomainSetup
.
.
::
.
AppDomainManagerAssembly 属性
AppDomainSetup 类

获取或设置程序集的显示名称，该程序集为使用此 AppDomainSetup 对象创建的应用程序域提供应用程序域管理器的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property AppDomainManagerAssembly As String
    Get
    Set
public string AppDomainManagerAssembly { get; set; }
public:
property String^ AppDomainManagerAssembly {
    String^ get ();
    void set (String^ value);
}
member AppDomainManagerAssembly : string with get, set

属性值

类型： System String
提供应用程序域管理器的 Type 的程序集的显示名称。

若要指定应用程序域管理器的类型，必须同时指定此属性和 AppDomainManagerType 属性。如果这些属性中的某一个未设置，则其他属性将被忽略。 若要指定应用程序域管理器的类型，必须同时指定此属性和 AppDomainManagerType 属性。如果这些属性中的某一个未设置，则其他属性将被忽略。

如果未提供类型，将以和父应用程序域（即从中调用AppDomain..::.CreateDomain 方法的应用程序域）一样的类型创建应用程序域管理器。

在加载应用程序域时，如果程序集不存在或该程序集不包含 AppDomainManagerType 属性指定的类型，将引发 TypeLoadException。如果已找到该程序集，但版本信息不匹配，则将引发 FileLoadException。 在加载应用程序域时，如果程序集不存在或该程序集不包含 AppDomainManagerType 属性指定的类型，将引发 TypeLoadException。如果已找到该程序集，但版本信息不匹配，则将引发 FileLoadException。

要为默认应用程序域设置应用程序域管理器，可使用应用程序配置文件 <runtime> 部分中的 <appDomainManagerAssembly> 和 <appDomainManagerType> 元素，或者使用 AppDomainManager 中描述的环境变量。

此功能要求应用程序具有完全信任。（例如，在桌面上运行的应用程序受到完全信任。）如果应用程序未受到完全信任，则将引发 TypeLoadException。 此功能要求应用程序具有完全信任。（例如，在桌面上运行的应用程序受到完全信任。）如果应用程序未受到完全信任，则将引发 TypeLoadException。

程序集显示名称的格式由 Assembly..::.FullName 属性指定。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.AppDomainManagerType 属性

AppDomainSetup
.
.
::
.
AppDomainManagerType 属性
AppDomainSetup 类

获取或设置类型的全名，该类型为使用此 AppDomainSetup 对象创建的应用程序域提供应用程序域管理器。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property AppDomainManagerType As String
    Get
    Set
public string AppDomainManagerType { get; set; }
public:
property String^ AppDomainManagerType {
    String^ get ();
    void set (String^ value);
}
member AppDomainManagerType : string with get, set

属性值

类型： System String
类的全名，其中包括命名空间。

若要指定应用程序域管理器的类型，必须同时指定此属性和 AppDomainManagerAssembly 属性。如果这些属性中的某一个未设置，则其他属性将被忽略。 若要指定应用程序域管理器的类型，必须同时指定此属性和 AppDomainManagerAssembly 属性。如果这些属性中的某一个未设置，则其他属性将被忽略。

如果未提供类型，将以和父应用程序域（即从中调用AppDomain..::.CreateDomain 方法的应用程序域）一样的类型创建应用程序域管理器。

在加载应用程序域时，如果 AppDomainManagerAssembly 属性指定的程序集不包含此属性指定的类型，将引发 TypeLoadException。

要为默认应用程序域设置应用程序域管理器，可使用应用程序配置文件 <runtime> 部分中的 <appDomainManagerAssembly> 和 <appDomainManagerType> 元素，或者使用 AppDomainManager 中描述的环境变量。

此功能要求应用程序具有完全信任。（例如，在桌面上运行的应用程序受到完全信任。）如果应用程序未受到完全信任，则将引发 TypeLoadException。 此功能要求应用程序具有完全信任。（例如，在桌面上运行的应用程序受到完全信任。）如果应用程序未受到完全信任，则将引发 TypeLoadException。

类型全名的格式由 Type..::.FullName 属性指定。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.ApplicationBase 属性

AppDomainSetup
.
.
::
.
ApplicationBase 属性
AppDomainSetup 类

获取或设置包含该应用程序的目录的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property ApplicationBase As String
    Get
    Set
public string ApplicationBase { get; set; }
public:
virtual property String^ ApplicationBase {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract ApplicationBase : string with get, set
override ApplicationBase : string with get, set

属性值

类型： System String
应用程序基目录的名称。

实现

应用程序基目录是程序集管理器进行程序集探测的起始位置。

ApplicationBase 属性可以影响授予应用程序域的权限。例如，从本地计算机起源的应用程序域通常根据其起源位置而受到完全信任。但如果 AppDomain 的 ApplicationBase 属性被置为某个 Intranet 目录的全名，则 ApplicationBase 设置会将授予应用程序域的权限设置为 LocalIntranet 授予的权限，即使应用程序域实际起源于本地计算机也是如此。 ApplicationBase 属性可以影响授予应用程序域的权限。例如，从本地计算机起源的应用程序域通常根据其起源位置而受到完全信任。但如果 AppDomain 的 ApplicationBase 属性被置为某个 Intranet 目录的全名，则 ApplicationBase 设置会将授予应用程序域的权限设置为 LocalIntranet 授予的权限，即使应用程序域实际起源于本地计算机也是如此。 ApplicationBase 属性可以影响授予应用程序域的权限。例如，从本地计算机起源的应用程序域通常根据其起源位置而受到完全信任。但如果 AppDomain 的 ApplicationBase 属性被置为某个 Intranet 目录的全名，则 ApplicationBase 设置会将授予应用程序域的权限设置为 LocalIntranet 授予的权限，即使应用程序域实际起源于本地计算机也是如此。

下面的示例演示如何使用 ApplicationBase 属性来设置程序集加载程序开始探测要加载到新应用程序域的程序集的位置。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object

Class ADSetupInformation

   Public Shared Sub Main()
      ' Create the applcation domain setup information.
      Dim domaininfo As New AppDomainSetup()
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory
      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create the new application domain using setup information.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo)

      ' Write out the application domain information.
      Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName)
      Console.WriteLine("new child domain: " + domain.FriendlyName)
      Console.WriteLine()
      Console.WriteLine("Application base is: " + domain.SetupInformation.ApplicationBase)

      AppDomain.Unload(domain)
   End Sub
End Class 'ADSetupInformation

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object

class ADSetupInformation
{
    public static void Main()
    {
        //Create the application domain setup information.
        AppDomainSetup domaininfo = new AppDomainSetup();
        domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
        //Create evidence for new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;
        // Create the new application domain using setup information.
        AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

        // Write out the application domain information.
            Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("new child domain: " + domain.FriendlyName);
            Console.WriteLine();
            Console.WriteLine("Application base is: " + domain.SetupInformation.ApplicationBase);

        AppDomain.Unload(domain);

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for evidence Object
int main()
{

   //Create the application domain setup information.
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;
   domaininfo->ApplicationBase = System::Environment::CurrentDirectory;

   //Create evidence for new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create the new application domain using setup information.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence, domaininfo );

   // Write Out the application domain information.
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "new child domain: {0}", domain->FriendlyName );
   Console::WriteLine();
   Console::WriteLine( "Application base is: {0}", domain->SetupInformation->ApplicationBase );
   AppDomain::Unload( domain );
}
  • FileIOPermission

    用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.ApplicationName 属性

AppDomainSetup
.
.
::
.
ApplicationName 属性
AppDomainSetup 类

获取或设置应用程序的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property ApplicationName As String
    Get
    Set
public string ApplicationName { get; set; }
public:
virtual property String^ ApplicationName {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract ApplicationName : string with get, set
override ApplicationName : string with get, set

属性值

类型： System String
应用程序的名称。

实现

下面的示例演示如何在创建新的应用程序域时设置 ApplicationName 属性。

该示例创建一个新应用程序域，然后调用 AppDomain..::.CreateInstanceAndUnwrap 方法将示例程序集加载到新应用程序域中并创建 Worker 类的实例。Worker 类继承了 MarshalByRefObject，因此该示例可以使用 CreateInstanceAndUnwrap 返回的代理来调用 TestLoad 方法。 该示例创建一个新应用程序域，然后调用 AppDomain..::.CreateInstanceAndUnwrap 方法将示例程序集加载到新应用程序域中并创建 Worker 类的实例。Worker 类继承了 MarshalByRefObject，因此该示例可以使用 CreateInstanceAndUnwrap 返回的代理来调用 TestLoad 方法。

TestLoad 方法加载指定的程序集。您必须指定一个有效的完全限定的程序集名称，或者注释掉 Load(String) 方法。TestLoad 方法列出了加载到新应用程序域中的程序集，同时表明了已经加载指定的程序集和示例程序集。 TestLoad 方法加载指定的程序集。您必须指定一个有效的完全限定的程序集名称，或者注释掉 Load(String) 方法。TestLoad 方法列出了加载到新应用程序域中的程序集，同时表明了已经加载指定的程序集和示例程序集。 TestLoad 方法加载指定的程序集。您必须指定一个有效的完全限定的程序集名称，或者注释掉 Load(String) 方法。TestLoad 方法列出了加载到新应用程序域中的程序集，同时表明了已经加载指定的程序集和示例程序集。

该示例使用 LoaderOptimizationAttribute 特性告诉程序集加载程序应用程序将如何在应用程序域之间共享代码。

Imports System
Imports System.Reflection
Imports System.Security.Policy
'Imports System.Data
 'for evidence object

Class ADMultiDomain

   ' The following attribute indicates to loader that multiple application
   ' domains are used in this application.
   <LoaderOptimizationAttribute(LoaderOptimization.MultiDomainHost)>  _
   Public Shared Sub Main()
      ' Create application domain setup information for new application domain.
      Dim domaininfo As New AppDomainSetup()
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory
      domaininfo.ApplicationName = "MyMultiDomain Application"

      'Create evidence for the new appdomain from evidence of current application domain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create appdomain.
      Dim newDomain As AppDomain = AppDomain.CreateDomain("MyMultiDomain", adevidence, domaininfo)

      'Load an assembly into the new application domain.
      Dim w As Worker = CType( _
         newDomain.CreateInstanceAndUnwrap( _
            [Assembly].GetExecutingAssembly().GetName().Name, _
            "Worker"), _
         Worker)
      w.TestLoad()

      'Unload the application domain, which also unloads the assembly.
      AppDomain.Unload(newDomain)

   End Sub 'Main
End Class 'ADMultiDomain

Class Worker
   Inherits MarshalByRefObject

   Friend Sub TestLoad()
      ' You must supply a valid assembly display name here.
      [Assembly].Load("Text assembly name, Culture, PublicKeyToken, Version")

      For Each assem As [Assembly] In AppDomain.CurrentDomain.GetAssemblies()
         Console.WriteLine(assem.FullName)
      Next
   End Sub
End Class

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object

class ADMultiDomain
{
   // The following attribute indicates to loader that multiple application
   // domains are used in this application.
   [LoaderOptimizationAttribute( LoaderOptimization.MultiDomainHost)]
   public static void Main()
   {
      // Create application domain setup information for new application domain.
      AppDomainSetup domaininfo = new AppDomainSetup();
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
      domaininfo.ApplicationName = "MyMultiDomain Application";

      //Create evidence for the new appdomain from evidence of current application domain.
      Evidence adevidence = AppDomain.CurrentDomain.Evidence;

      // Create appdomain.
      AppDomain newDomain = AppDomain.CreateDomain("MyMultiDomain", adevidence, domaininfo);

      // Load an assembly into the new application domain.
      Worker w = (Worker) newDomain.CreateInstanceAndUnwrap(
         Assembly.GetExecutingAssembly().GetName().Name,
         "Worker"
      );
      w.TestLoad();

      //Unload the application domain, which also unloads the assembly.
      AppDomain.Unload(newDomain);
   }
}

class Worker : MarshalByRefObject
{
   internal void TestLoad()
   {
      // You must supply a valid fully qualified assembly name here.
      Assembly.Load("Text assembly name, Culture, PublicKeyToken, Version");
      foreach (Assembly assem in AppDomain.CurrentDomain.GetAssemblies())
         Console.WriteLine(assem.FullName);
   }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

ref class Worker : MarshalByRefObject
{
public:
   void TestLoad()
   {
      // You must supply a valid fully qualified assembly name here.
      Assembly::Load("Text assembly name, Culture, PublicKeyToken, Version");
      for each (Assembly^ assem in AppDomain::CurrentDomain->GetAssemblies())
         Console::WriteLine(assem->FullName);
   }
};

//for evidence Object*
// The following attribute indicates to loader that multiple application
// domains are used in this application.

[LoaderOptimizationAttribute(LoaderOptimization::MultiDomainHost)]
int main()
{

   // Create application domain setup information for new application domain.
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;
   domaininfo->ApplicationBase = System::Environment::CurrentDirectory;
   domaininfo->ApplicationName = "MyMultiDomain Application";

   //Create evidence for the new appdomain from evidence of current application domain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create appdomain.
   AppDomain^ newDomain = AppDomain::CreateDomain( "MyMultiDomain", adevidence, domaininfo );

   // Load an assembly into the new application domain.
   Worker^ w = (Worker^) newDomain->CreateInstanceAndUnwrap(
      Assembly::GetExecutingAssembly()->GetName()->Name,
      "Worker"
   );
   w->TestLoad();

   //Unload the application domain, which also unloads the assembly.
   AppDomain::Unload(newDomain);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.ApplicationTrust 属性

AppDomainSetup
.
.
::
.
ApplicationTrust 属性
AppDomainSetup 类

获取或设置一个包含安全性和信任信息的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property ApplicationTrust As ApplicationTrust
    Get
    Set
public ApplicationTrust ApplicationTrust { get; set; }
public:
property ApplicationTrust^ ApplicationTrust {
    ApplicationTrust^ get ();
    void set (ApplicationTrust^ value);
}
member ApplicationTrust : ApplicationTrust with get, set

属性值

类型： System.Security.Policy ApplicationTrust
获取或设置一个对象，其中包含安全性和信任信息。
异常 | 条件
InvalidOperationException | 该属性被设置为一个 ApplicationTrust 对象，该对象的应用程序标识与 ActivationArguments 属性返回的 ActivationArguments 对象的应用程序标识不匹配。如果 ActivationArguments 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不会引发异常。 该属性被设置为一个 ApplicationTrust 对象，该对象的应用程序标识与 ActivationArguments 属性返回的 ActivationArguments 对象的应用程序标识不匹配。如果 ActivationArguments 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不会引发异常。
ArgumentNullException | 该属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此属性在创建 AppDomainSetup 时为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。一旦更改，此属性就不能被重置为空引用。 此属性在创建 AppDomainSetup 时为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。一旦更改，此属性就不能被重置为空引用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.CachePath 属性

AppDomainSetup
.
.
::
.
CachePath 属性
AppDomainSetup 类

获取或设置特定于应用程序的、影像复制文件所使用的区域的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property CachePath As String
    Get
    Set
public string CachePath { get; set; }
public:
virtual property String^ CachePath {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract CachePath : string with get, set
override CachePath : string with get, set

属性值

类型： System String
从中对文件进行卷影复制的目录路径和文件名的完全限定名。

实现

要使此属性有效，还必须设置 ApplicationName 属性。如果没有设置 ApplicationName 属性，则会忽略 CachePath 属性，并且影像副本缓存位置默认为下载缓存。 要使此属性有效，还必须设置 ApplicationName 属性。如果没有设置 ApplicationName 属性，则会忽略 CachePath 属性，并且影像副本缓存位置默认为下载缓存。

有关影像复制的更多信息，请参见影像复制程序集。

  • FileIOPermission

    用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间
ShadowCopyFiles
ShadowCopyDirectories

其他资源

影像复制程序集


AppDomainSetup ..::.ConfigurationFile 属性

AppDomainSetup
.
.
::
.
ConfigurationFile 属性
AppDomainSetup 类

获取或设置应用程序域的配置文件的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property ConfigurationFile As String
    Get
    Set
public string ConfigurationFile { get; set; }
public:
virtual property String^ ConfigurationFile {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract ConfigurationFile : string with get, set
override ConfigurationFile : string with get, set

属性值

类型： System String
配置文件的名称。

实现

配置文件描述应用程序域的搜索规则和配置数据。创建应用程序域的宿主负责提供此数据，因为有意义的值因情况不同而异。 配置文件描述应用程序域的搜索规则和配置数据。创建应用程序域的宿主负责提供此数据，因为有意义的值因情况不同而异。

例如，ASP.NET 应用程序的配置数据针对每个应用程序、站点和计算机进行存储，而可执行文件的配置数据针对每个应用程序、用户和计算机进行存储。只有宿主知道针对特定情况的配置数据的细节。 例如，ASP.NET 应用程序的配置数据针对每个应用程序、站点和计算机进行存储，而可执行文件的配置数据针对每个应用程序、用户和计算机进行存储。只有宿主知道针对特定情况的配置数据的细节。

下面的示例演示如何使用 ConfigurationFile 属性为新应用程序域指定配置文件的路径和名称。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object
Imports System.Security 'for securityzone object
Imports System.Collections 'for IEnumerator

Class ADCreateDomain

   Public Shared Sub Main()
      ' Create appdomainsetup information for new appdomain.
      Dim domaininfo As New AppDomainSetup()
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory
      domaininfo.ConfigurationFile = System.Environment.CurrentDirectory & "\ADCreateDomain.exe.config"
      domaininfo.ApplicationName = "MyApplication"
      domaininfo.LicenseFile = System.Environment.CurrentDirectory & "\license.txt"

      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence
      'Add the zone and url information to restrict permissions assigned to the appdomain.
      adevidence.AddHost(New Url("http://www.example.com"))
      adevidence.AddHost(New Zone(SecurityZone.Internet))

      ' Create the application domain.
      Dim newDomain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo)

      ' Write out the application domain information.
      Console.WriteLine("Host domain: " & AppDomain.CurrentDomain.FriendlyName)
      Console.WriteLine("child domain: " & newDomain.FriendlyName)
      Console.WriteLine()
      Console.WriteLine("Application base is: " & newDomain.SetupInformation.ApplicationBase)
      Console.WriteLine("Configuration file is: " & newDomain.SetupInformation.ConfigurationFile)
      Console.WriteLine("Application name is: " & newDomain.SetupInformation.ApplicationName)
      Console.WriteLine("License file is: " & newDomain.SetupInformation.LicenseFile)

      Dim newevidenceenum As IEnumerator = newDomain.Evidence.GetEnumerator()
      While newevidenceenum.MoveNext()
         Console.WriteLine(newevidenceenum.Current)
      End While

      AppDomain.Unload(newDomain)
   End Sub 'Main
End Class 'ADCreateDomain

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object
using System.Security;  //for securityzone object
using System.Collections;  //for IEnumerator

class ADCreateDomain
{
    public static void Main()
    {
        // Create appdomainsetup information for the new appdomain.
        AppDomainSetup domaininfo = new AppDomainSetup();
        domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
        domaininfo.ConfigurationFile = System.Environment.CurrentDirectory	+ "\\ADCreateDomain.exe.config";
        domaininfo.ApplicationName = "MyApplication";
        domaininfo.LicenseFile = System.Environment.CurrentDirectory + "\\license.txt";

        //Create evidence for new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;
        //Add the zone and url information to restrict permissions assigned to the appdomain.
        adevidence.AddHost(new Url("http://www.example.com"));
        adevidence.AddHost(new Zone(SecurityZone.Internet));

        // Create the application domain.
        AppDomain newDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

        // Write out the application domain information.
        Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
        Console.WriteLine("child domain: " + newDomain.FriendlyName);
        Console.WriteLine();
        Console.WriteLine("Application base is: " + newDomain.SetupInformation.ApplicationBase);
        Console.WriteLine("Configuration file is: " + newDomain.SetupInformation.ConfigurationFile);
        Console.WriteLine("Application name is: " + newDomain.SetupInformation.ApplicationName);
        Console.WriteLine("License file is: " + newDomain.SetupInformation.LicenseFile);

        IEnumerator newevidenceenum = newDomain.Evidence.GetEnumerator();
        while(newevidenceenum.MoveNext())
            Console.WriteLine(newevidenceenum.Current);

        AppDomain.Unload(newDomain);

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;
//for evidence object
using namespace System::Security;
//for securityzone object
using namespace System::Collections;

//for IEnumerator
int main()
{

   // Create appdomainsetup information for the new appdomain.
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;
   domaininfo->ApplicationBase = System::Environment::CurrentDirectory;
   domaininfo->ConfigurationFile = System::Environment::CurrentDirectory + "\\ADCreateDomain.exe.config";
   domaininfo->ApplicationName = "MyApplication";
   domaininfo->LicenseFile = System::Environment::CurrentDirectory + "\\license.txt";

   //Create evidence for new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   //Add the zone and url information to restrict permissions assigned to the appdomain.
   adevidence->AddHost( gcnew Url( "http://www.example.com" ) );
   adevidence->AddHost( gcnew Zone( SecurityZone::Internet ) );

   // Create the application domain.
   AppDomain^ newDomain = AppDomain::CreateDomain( "MyDomain", adevidence, domaininfo );

   // Write out the application domain information.
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "child domain: {0}", newDomain->FriendlyName );
   Console::WriteLine();
   Console::WriteLine( "Application base is: {0}", newDomain->SetupInformation->ApplicationBase );
   Console::WriteLine( "Configuration file is: {0}", newDomain->SetupInformation->ConfigurationFile );
   Console::WriteLine( "Application name is: {0}", newDomain->SetupInformation->ApplicationName );
   Console::WriteLine( "License file is: {0}", newDomain->SetupInformation->LicenseFile );
   IEnumerator^ newevidenceenum = newDomain->Evidence->GetEnumerator();
   while ( newevidenceenum->MoveNext() )
      Console::WriteLine( newevidenceenum->Current );

   AppDomain::Unload( newDomain );
}
  • FileIOPermission

    用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.DisallowApplicationBaseProbing 属性

AppDomainSetup
.
.
::
.
DisallowApplicationBaseProbing 属性
AppDomainSetup 类

指定在搜索要加载的程序集时是否探测应用程序基路径和专用二进制路径。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property DisallowApplicationBaseProbing As Boolean
    Get
    Set
public bool DisallowApplicationBaseProbing { get; set; }
public:
property bool DisallowApplicationBaseProbing {
    bool get ();
    void set (bool value);
}
member DisallowApplicationBaseProbing : bool with get, set

属性值

类型： System Boolean
如果不允许探测，则为 true；否则为 false。默认值为 false。 如果不允许探测，则为 true；否则为 false。默认值为 false。

如果 DisallowApplicationBaseProbing 属性为 true，则将忽略 ApplicationBase 属性的值。也就是说，不在 ApplicationBase 属性所指定的目录中探测任何程序集。 如果 DisallowApplicationBaseProbing 属性为 true，则将忽略 ApplicationBase 属性的值。也就是说，不在 ApplicationBase 属性所指定的目录中探测任何程序集。

如果 DisallowApplicationBaseProbing 属性为 true，则 PrivateBinPath 属性和 PrivateBinPathProbe 属性的值将被忽略。不在 PrivateBinPath 属性所指定的目录中探测任何程序集。 如果 DisallowApplicationBaseProbing 属性为 true，则 PrivateBinPath 属性和 PrivateBinPathProbe 属性的值将被忽略。不在 PrivateBinPath 属性所指定的目录中探测任何程序集。

DisallowApplicationBaseProbing 对加载过程提供了另外一层控制。在正常的程序集加载顺序中，对应用程序基目录的探测先于 AppDomain..::.AssemblyResolve 事件的引发。但是，有些应用程序可能需要从文档中的 OLE 复合文件加载程序集，或从一个既不在全局程序集缓存中也不在由 ApplicationBase 和 PrivateBinPath 属性指定的目录中的一个唯一已知位置加载程序集。这类应用程序可以使用 DisallowApplicationBaseProbing 属性来避免正常探测所导致的延迟，并避免加载可能位于正常探测路径中的必需程序集的多个副本。 DisallowApplicationBaseProbing 对加载过程提供了另外一层控制。在正常的程序集加载顺序中，对应用程序基目录的探测先于 AppDomain..::.AssemblyResolve 事件的引发。但是，有些应用程序可能需要从文档中的 OLE 复合文件加载程序集，或从一个既不在全局程序集缓存中也不在由 ApplicationBase 和 PrivateBinPath 属性指定的目录中的一个唯一已知位置加载程序集。这类应用程序可以使用 DisallowApplicationBaseProbing 属性来避免正常探测所导致的延迟，并避免加载可能位于正常探测路径中的必需程序集的多个副本。 DisallowApplicationBaseProbing 对加载过程提供了另外一层控制。在正常的程序集加载顺序中，对应用程序基目录的探测先于 AppDomain..::.AssemblyResolve 事件的引发。但是，有些应用程序可能需要从文档中的 OLE 复合文件加载程序集，或从一个既不在全局程序集缓存中也不在由 ApplicationBase 和 PrivateBinPath 属性指定的目录中的一个唯一已知位置加载程序集。这类应用程序可以使用 DisallowApplicationBaseProbing 属性来避免正常探测所导致的延迟，并避免加载可能位于正常探测路径中的必需程序集的多个副本。 DisallowApplicationBaseProbing 对加载过程提供了另外一层控制。在正常的程序集加载顺序中，对应用程序基目录的探测先于 AppDomain..::.AssemblyResolve 事件的引发。但是，有些应用程序可能需要从文档中的 OLE 复合文件加载程序集，或从一个既不在全局程序集缓存中也不在由 ApplicationBase 和 PrivateBinPath 属性指定的目录中的一个唯一已知位置加载程序集。这类应用程序可以使用 DisallowApplicationBaseProbing 属性来避免正常探测所导致的延迟，并避免加载可能位于正常探测路径中的必需程序集的多个副本。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.DisallowBindingRedirects 属性

AppDomainSetup
.
.
::
.
DisallowBindingRedirects 属性
AppDomainSetup 类

获取或设置一个值，该值指示应用程序域是否允许程序集绑定重定向。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property DisallowBindingRedirects As Boolean
    Get
    Set
public bool DisallowBindingRedirects { get; set; }
public:
property bool DisallowBindingRedirects {
    bool get ();
    void set (bool value);
}
member DisallowBindingRedirects : bool with get, set

属性值

类型： System Boolean
如果不允许程序集的重定向，则为 true；如果允许，则为 false。

DisallowBindingRedirects 属性被设计为由这种服务和服务器应用程序来使用：即程序集绑定重定向不是应用程序方案一部分的服务和服务器应用程序。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.DisallowCodeDownload 属性

AppDomainSetup
.
.
::
.
DisallowCodeDownload 属性
AppDomainSetup 类

获取或设置一个值，该值指示应用程序域是否允许通过 HTTP 下载程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property DisallowCodeDownload As Boolean
    Get
    Set
public bool DisallowCodeDownload { get; set; }
public:
property bool DisallowCodeDownload {
    bool get ();
    void set (bool value);
}
member DisallowCodeDownload : bool with get, set

属性值

类型： System Boolean
如果不允许通过 HTTP 下载程序集，则为 true；如果允许，则为 false。

DisallowCodeDownload 属性设计为由这种服务和服务器应用程序来使用：即从 Intranet 或 Internet 下载代码不是应用程序方案一部分的服务和服务器应用程序。

警告说明 警告

DisallowCodeDownload 属性的默认值是 false。此设置对于服务是不安全的。为了避免服务下载部分受信任的代码，请将此属性设置为 true。 DisallowCodeDownload 属性的默认值是 false。此设置对于服务是不安全的。为了避免服务下载部分受信任的代码，请将此属性设置为 true。 DisallowCodeDownload 属性的默认值是 false。此设置对于服务是不安全的。为了避免服务下载部分受信任的代码，请将此属性设置为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.DisallowPublisherPolicy 属性

AppDomainSetup
.
.
::
.
DisallowPublisherPolicy 属性
AppDomainSetup 类

获取或设置一个值，该值指示是否将配置文件的 <publisherPolicy> 节应用于应用程序域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property DisallowPublisherPolicy As Boolean
    Get
    Set
public bool DisallowPublisherPolicy { get; set; }
public:
property bool DisallowPublisherPolicy {
    bool get ();
    void set (bool value);
}
member DisallowPublisherPolicy : bool with get, set

属性值

类型： System Boolean
如果应用程序域忽略配置文件的 <publisherPolicy> 节，则为 true；如果接受所声明的发行者策略，则为 false。

DisallowPublisherPolicy 属性仅适用于本地加载的 Web 应用程序。使用此属性可防止恶意用户尝试在安全模式下执行不安全的 Web 应用程序。 DisallowPublisherPolicy 属性仅适用于本地加载的 Web 应用程序。使用此属性可防止恶意用户尝试在安全模式下执行不安全的 Web 应用程序。

有关如何跳过发行者策略的更多信息，请参见 重定向程序集版本 主题。有关安全模式的更多信息，请参见 第 1 步：检查配置文件 主题。 有关如何跳过发行者策略的更多信息，请参见 重定向程序集版本 主题。有关安全模式的更多信息，请参见 第 1 步：检查配置文件 主题。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.DynamicBase 属性

AppDomainSetup
.
.
::
.
DynamicBase 属性
AppDomainSetup 类

获取或设置动态生成的文件所在的目录的基目录。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property DynamicBase As String
    Get
    Set
public string DynamicBase { get; set; }
public:
virtual property String^ DynamicBase {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract DynamicBase : string with get, set
override DynamicBase : string with get, set

属性值

类型： System String
AppDomain..::.DynamicDirectory 所在的目录。

实现

异常 | 条件
MemberAccessException | 无法设置此属性，因为应用程序域上的应用程序名为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

当创建 AppDomain 时，可以指定名为“动态目录”的目录来存储动态程序集。此目录在逻辑上位于 ApplicationBase 下，尽管它可以驻留在该目录的其他部分。 当创建 AppDomain 时，可以指定名为“动态目录”的目录来存储动态程序集。此目录在逻辑上位于 ApplicationBase 下，尽管它可以驻留在该目录的其他部分。

下面的示例演示如何使用 DynamicBase 属性为新应用程序域设置动态程序集的存储路径。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Class ADDynamicBase

   ' SetDynamicBase.exe
   Overloads Shared Sub Main(args() As String)
      ' Create a new AppDomain.
      Dim setup As New AppDomainSetup()
      ' Need to set the application name before setting the dynamic base.
      setup.ApplicationName = "MyApplication"
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", Nothing, setup)

      ' Tell the domain to search for assemblies in subdirectories
      ' of DynamicAssemblyDir.
      domain.SetDynamicBase("C:\DynamicAssemblyDir")

      ' Note that the actual dynamic directory has the form
      ' <DynamicBase>\<number>\<ApplicationName>, rather than
      ' simply <DynamicBase>.
      Dim dynamicDir As [String] = domain.DynamicDirectory
      ' The AssemblyBuilder won't create this directory automatically.
      If Not System.IO.Directory.Exists(dynamicDir) Then
         System.IO.Directory.CreateDirectory(dynamicDir)
      End If

      ' Define the dynamic assembly.
      Dim asmName As New AssemblyName()
      asmName.Name = "DynamicHelloWorld"
      Dim asm As AssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Save, dynamicDir)

      ' Define a dynamic module in the assembly.
      Dim [mod] As ModuleBuilder
      [mod] = asm.DefineDynamicModule("DynamicHelloWorld", "DynamicHelloWorld.dll")

      ' Define the "HelloWorld" type in the module.
      Dim typ As TypeBuilder = [mod].DefineType("HelloWorld", TypeAttributes.Public)

      ' Define the "SayHello" method.
      Dim meth As MethodBuilder = typ.DefineMethod("SayHello", MethodAttributes.Public, Nothing, Nothing)
      Dim il As ILGenerator = meth.GetILGenerator()
      il.EmitWriteLine("Hello World!")
      il.Emit(OpCodes.Ret)

      ' Complete the HelloWorld type.
      typ.CreateType()

      ' Save the assembly to the dynamic assembly directory.
      asm.Save("DynamicHelloWorld.dll")

      ' Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
      domain.ExecuteAssembly("MyExecutable.exe")
   End Sub 'Main
End Class 'ADDynamicBase

using System;
using System.Reflection;
using System.Reflection.Emit;

namespace AppDomainSnippets
{
    class ADDynamicBase
    {
        // SetDynamicBase.exe
        static void Main(string[] args)
        {
            // Create a new AppDomain.
            AppDomainSetup setup = new AppDomainSetup();
            // Need to set the application name before setting the dynamic base.
            setup.ApplicationName = "MyApplication";
            AppDomain domain = AppDomain.CreateDomain("MyDomain", null, setup);

            // Tell the domain to search for assemblies in subdirectories
            // of DynamicAssemblyDir.
            domain.SetDynamicBase("C:\\DynamicAssemblyDir");

            // Note that the actual dynamic directory has the form
            // <DynamicBase>\<number>\<ApplicationName>, rather than
            // simply <DynamicBase>.
            String dynamicDir = domain.DynamicDirectory;
            // The AssemblyBuilder won't create this directory automatically.
            if(!System.IO.Directory.Exists(dynamicDir))
            {
                System.IO.Directory.CreateDirectory(dynamicDir);
            }

            // Define the dynamic assembly.
            AssemblyName asmName = new AssemblyName();
            asmName.Name = "DynamicHelloWorld";
            AssemblyBuilder asm = AppDomain.CurrentDomain.DefineDynamicAssembly
                (asmName, AssemblyBuilderAccess.Save, dynamicDir);

            // Define a dynamic module in the assembly.
            ModuleBuilder mod;
            mod = asm.DefineDynamicModule
                ("DynamicHelloWorld", "DynamicHelloWorld.dll");

            // Define the "HelloWorld" type in the module.
            TypeBuilder typ = mod.DefineType
                ("HelloWorld", TypeAttributes.Public);

            // Define the "SayHello" method.
            MethodBuilder meth = typ.DefineMethod
                ("SayHello", MethodAttributes.Public, null, null);
            ILGenerator il = meth.GetILGenerator();
            il.EmitWriteLine("Hello World!");
            il.Emit(OpCodes.Ret);

            // Complete the HelloWorld type.
            typ.CreateType();

            // Save the assembly to the dynamic assembly directory.
            asm.Save("DynamicHelloWorld.dll");

            // Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
            domain.ExecuteAssembly("MyExecutable.exe");
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

// SetDynamicBase.exe
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();

   // Create a new AppDomain.
   AppDomainSetup^ setup = gcnew AppDomainSetup;

   // Need to set the application name before setting the dynamic base.
   setup->ApplicationName = "MyApplication";
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", nullptr, setup );

   // Tell the domain to search for assemblies in subdirectories
   // of DynamicAssemblyDir.
   domain->SetDynamicBase( "C:\\DynamicAssemblyDir" );

   // Note that the actual dynamic directory has the form
   // <DynamicBase>\<number>\<ApplicationName>, rather than
   // simply <DynamicBase>.
   String^ dynamicDir = domain->DynamicDirectory;

   // The AssemblyBuilder won't create this directory automatically.
   if (  !System::IO::Directory::Exists( dynamicDir ) )
   {
      System::IO::Directory::CreateDirectory( dynamicDir );
   }

   // Define the dynamic assembly.
   AssemblyName^ asmName = gcnew AssemblyName;
   asmName->Name = "DynamicHelloWorld";
   AssemblyBuilder^ asmb = AppDomain::CurrentDomain->DefineDynamicAssembly( asmName, AssemblyBuilderAccess::Save, dynamicDir );

   // Define a dynamic module in the assembly.
   ModuleBuilder^ mod;
   mod = asmb->DefineDynamicModule( "DynamicHelloWorld", "DynamicHelloWorld.dll" );

   // Define the S"HelloWorld" type in the module.
   TypeBuilder^ typ = mod->DefineType( "HelloWorld", TypeAttributes::Public );

   // Define the S"SayHello" method.
   MethodBuilder^ meth = typ->DefineMethod( "SayHello", MethodAttributes::Public, nullptr, nullptr );
   ILGenerator^ il = meth->GetILGenerator();
   il->EmitWriteLine( "Hello World!" );
   il->Emit( OpCodes::Ret );

   // Complete the HelloWorld type.
   typ->CreateType();

   // Save the assembly to the dynamic assembly directory.
   asmb->Save( "DynamicHelloWorld.dll" );

   // Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
   domain->ExecuteAssembly( "MyExecutable.exe" );
}
  • FileIOPermission

    用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.LicenseFile 属性

AppDomainSetup
.
.
::
.
LicenseFile 属性
AppDomainSetup 类

获取或设置与此域关联的许可证文件的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property LicenseFile As String
    Get
    Set
public string LicenseFile { get; set; }
public:
virtual property String^ LicenseFile {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract LicenseFile : string with get, set
override LicenseFile : string with get, set

属性值

类型： System String
许可证文件的名称。

实现

下面的示例演示如何使用 LicenseFile 属性为新应用程序域指定许可证文件的位置和名称。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object
Imports System.Security 'for securityzone object
Imports System.Collections 'for IEnumerator

Class ADCreateDomain

   Public Shared Sub Main()
      ' Create appdomainsetup information for new appdomain.
      Dim domaininfo As New AppDomainSetup()
      domaininfo.ApplicationBase = System.Environment.CurrentDirectory
      domaininfo.ConfigurationFile = System.Environment.CurrentDirectory & "\ADCreateDomain.exe.config"
      domaininfo.ApplicationName = "MyApplication"
      domaininfo.LicenseFile = System.Environment.CurrentDirectory & "\license.txt"

      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence
      'Add the zone and url information to restrict permissions assigned to the appdomain.
      adevidence.AddHost(New Url("http://www.example.com"))
      adevidence.AddHost(New Zone(SecurityZone.Internet))

      ' Create the application domain.
      Dim newDomain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo)

      ' Write out the application domain information.
      Console.WriteLine("Host domain: " & AppDomain.CurrentDomain.FriendlyName)
      Console.WriteLine("child domain: " & newDomain.FriendlyName)
      Console.WriteLine()
      Console.WriteLine("Application base is: " & newDomain.SetupInformation.ApplicationBase)
      Console.WriteLine("Configuration file is: " & newDomain.SetupInformation.ConfigurationFile)
      Console.WriteLine("Application name is: " & newDomain.SetupInformation.ApplicationName)
      Console.WriteLine("License file is: " & newDomain.SetupInformation.LicenseFile)

      Dim newevidenceenum As IEnumerator = newDomain.Evidence.GetEnumerator()
      While newevidenceenum.MoveNext()
         Console.WriteLine(newevidenceenum.Current)
      End While

      AppDomain.Unload(newDomain)
   End Sub 'Main
End Class 'ADCreateDomain

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object
using System.Security;  //for securityzone object
using System.Collections;  //for IEnumerator

class ADCreateDomain
{
    public static void Main()
    {
        // Create appdomainsetup information for the new appdomain.
        AppDomainSetup domaininfo = new AppDomainSetup();
        domaininfo.ApplicationBase = System.Environment.CurrentDirectory;
        domaininfo.ConfigurationFile = System.Environment.CurrentDirectory	+ "\\ADCreateDomain.exe.config";
        domaininfo.ApplicationName = "MyApplication";
        domaininfo.LicenseFile = System.Environment.CurrentDirectory + "\\license.txt";

        //Create evidence for new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;
        //Add the zone and url information to restrict permissions assigned to the appdomain.
        adevidence.AddHost(new Url("http://www.example.com"));
        adevidence.AddHost(new Zone(SecurityZone.Internet));

        // Create the application domain.
        AppDomain newDomain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo);

        // Write out the application domain information.
        Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
        Console.WriteLine("child domain: " + newDomain.FriendlyName);
        Console.WriteLine();
        Console.WriteLine("Application base is: " + newDomain.SetupInformation.ApplicationBase);
        Console.WriteLine("Configuration file is: " + newDomain.SetupInformation.ConfigurationFile);
        Console.WriteLine("Application name is: " + newDomain.SetupInformation.ApplicationName);
        Console.WriteLine("License file is: " + newDomain.SetupInformation.LicenseFile);

        IEnumerator newevidenceenum = newDomain.Evidence.GetEnumerator();
        while(newevidenceenum.MoveNext())
            Console.WriteLine(newevidenceenum.Current);

        AppDomain.Unload(newDomain);

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;
//for evidence object
using namespace System::Security;
//for securityzone object
using namespace System::Collections;

//for IEnumerator
int main()
{

   // Create appdomainsetup information for the new appdomain.
   AppDomainSetup^ domaininfo = gcnew AppDomainSetup;
   domaininfo->ApplicationBase = System::Environment::CurrentDirectory;
   domaininfo->ConfigurationFile = System::Environment::CurrentDirectory + "\\ADCreateDomain.exe.config";
   domaininfo->ApplicationName = "MyApplication";
   domaininfo->LicenseFile = System::Environment::CurrentDirectory + "\\license.txt";

   //Create evidence for new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   //Add the zone and url information to restrict permissions assigned to the appdomain.
   adevidence->AddHost( gcnew Url( "http://www.example.com" ) );
   adevidence->AddHost( gcnew Zone( SecurityZone::Internet ) );

   // Create the application domain.
   AppDomain^ newDomain = AppDomain::CreateDomain( "MyDomain", adevidence, domaininfo );

   // Write out the application domain information.
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "child domain: {0}", newDomain->FriendlyName );
   Console::WriteLine();
   Console::WriteLine( "Application base is: {0}", newDomain->SetupInformation->ApplicationBase );
   Console::WriteLine( "Configuration file is: {0}", newDomain->SetupInformation->ConfigurationFile );
   Console::WriteLine( "Application name is: {0}", newDomain->SetupInformation->ApplicationName );
   Console::WriteLine( "License file is: {0}", newDomain->SetupInformation->LicenseFile );
   IEnumerator^ newevidenceenum = newDomain->Evidence->GetEnumerator();
   while ( newevidenceenum->MoveNext() )
      Console::WriteLine( newevidenceenum->Current );

   AppDomain::Unload( newDomain );
}
  • FileIOPermission

    用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.LoaderOptimization 属性

AppDomainSetup
.
.
::
.
LoaderOptimization 属性
AppDomainSetup 类

指定用于加载可执行文件的优化策略。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property LoaderOptimization As LoaderOptimization
    Get
    Set
public LoaderOptimization LoaderOptimization { get; set; }
public:
property LoaderOptimization LoaderOptimization {
    LoaderOptimization get ();
    void set (LoaderOptimization value);
}
member LoaderOptimization : LoaderOptimization with get, set

属性值

类型： System LoaderOptimization
与 LoaderOptimizationAttribute 配合使用的枚举常数。

下面的示例创建了一个动态程序集并将其保存到磁盘上，然后使用 LoaderOptimization 属性设置用于将该程序集加载到应用程序域中的优化策略。

Imports System
Imports System.IO
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Runtime.Remoting

Class ADDyno

   Public Shared Function CreateADynamicAssembly(ByRef myNewDomain As AppDomain, executableNameNoExe As String) As Type

      Dim executableName As String = executableNameNoExe + ".exe"

      Dim myAsmName As New AssemblyName()
      myAsmName.Name = executableNameNoExe
      myAsmName.CodeBase = Environment.CurrentDirectory

      Dim myAsmBuilder As AssemblyBuilder = myNewDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave)
      Console.WriteLine("-- Dynamic Assembly instantiated.")

      Dim myModBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe, executableName)

      Dim myTypeBuilder As TypeBuilder = myModBuilder.DefineType(executableNameNoExe, TypeAttributes.Public, GetType(MarshalByRefObject))

      Dim myFCMethod As MethodBuilder = myTypeBuilder.DefineMethod("CountLocalFiles", MethodAttributes.Public Or MethodAttributes.Static, Nothing, New Type() {})

      Dim currentDirGetMI As MethodInfo = GetType(Environment).GetProperty("CurrentDirectory").GetGetMethod()
      Dim writeLine0objMI As MethodInfo = GetType(Console).GetMethod("WriteLine", New Type() {GetType(String)})
      Dim writeLine2objMI As MethodInfo = GetType(Console).GetMethod("WriteLine", New Type() {GetType(String), GetType(Object), GetType(Object)})
      Dim getFilesMI As MethodInfo = GetType(Directory).GetMethod("GetFiles", New Type() {GetType(String)})

      myFCMethod.InitLocals = True

      Dim myFCIL As ILGenerator = myFCMethod.GetILGenerator()

      Console.WriteLine("-- Generating MSIL method body...")
      Dim v0 As LocalBuilder = myFCIL.DeclareLocal(GetType(String))
      Dim v1 As LocalBuilder = myFCIL.DeclareLocal(GetType(Integer))
      Dim v2 As LocalBuilder = myFCIL.DeclareLocal(GetType(String))
      Dim v3 As LocalBuilder = myFCIL.DeclareLocal(GetType(String()))

      Dim evalForEachLabel As Label = myFCIL.DefineLabel()
      Dim topOfForEachLabel As Label = myFCIL.DefineLabel()

      ' Build the method body.
      myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, Nothing)
      myFCIL.Emit(OpCodes.Stloc_S, v0)
      myFCIL.Emit(OpCodes.Ldc_I4_0)
      myFCIL.Emit(OpCodes.Stloc_S, v1)
      myFCIL.Emit(OpCodes.Ldstr, "---")
      myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing)
      myFCIL.Emit(OpCodes.Ldloc_S, v0)
      myFCIL.EmitCall(OpCodes.Call, getFilesMI, Nothing)
      myFCIL.Emit(OpCodes.Stloc_S, v3)

      myFCIL.Emit(OpCodes.Br_S, evalForEachLabel)

      ' foreach loop starts here.
      myFCIL.MarkLabel(topOfForEachLabel)

      ' Load array of strings and index, store value at index for output.
      myFCIL.Emit(OpCodes.Ldloc_S, v3)
      myFCIL.Emit(OpCodes.Ldloc_S, v1)
      myFCIL.Emit(OpCodes.Ldelem_Ref)
      myFCIL.Emit(OpCodes.Stloc_S, v2)

      myFCIL.Emit(OpCodes.Ldloc_S, v2)
      myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing)

      ' Increment counter by one.
      myFCIL.Emit(OpCodes.Ldloc_S, v1)
      myFCIL.Emit(OpCodes.Ldc_I4_1)
      myFCIL.Emit(OpCodes.Add)
      myFCIL.Emit(OpCodes.Stloc_S, v1)

      ' Determine if end of file list array has been reached.
      myFCIL.MarkLabel(evalForEachLabel)
      myFCIL.Emit(OpCodes.Ldloc_S, v1)
      myFCIL.Emit(OpCodes.Ldloc_S, v3)
      myFCIL.Emit(OpCodes.Ldlen)
      myFCIL.Emit(OpCodes.Conv_I4)
      myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel)
      'foreach loop end here.
      myFCIL.Emit(OpCodes.Ldstr, "---")
      myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing)
      myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}.")
      myFCIL.Emit(OpCodes.Ldloc_S, v1)
      myFCIL.Emit(OpCodes.Box, GetType(Integer))
      myFCIL.Emit(OpCodes.Ldloc_S, v0)
      myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, Nothing)

      myFCIL.Emit(OpCodes.Ret)

      Dim myType As Type = myTypeBuilder.CreateType()

      myAsmBuilder.SetEntryPoint(myFCMethod)
      myAsmBuilder.Save(executableName)
      Console.WriteLine("-- Method generated, type completed, and assembly saved to disk.")

      Return myType
   End Function 'CreateADynamicAssembly

   Public Shared Sub Main()

      Dim executableName As String = Nothing
      Dim domainDir As String

      Console.Write("Enter a name for the file counting assembly: ")
      Dim executableNameNoExe As String = Console.ReadLine()
      executableName = executableNameNoExe + ".exe"
      Console.WriteLine("---")

      domainDir = Environment.CurrentDirectory

      Dim curDomain As AppDomain = Thread.GetDomain()

      ' Create a new AppDomain, with the current directory as the base.
      Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory)
      Dim mySetupInfo As New AppDomainSetup()
      mySetupInfo.ApplicationBase = domainDir
      mySetupInfo.ApplicationName = executableNameNoExe
      mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain

      Dim myDomain As AppDomain = AppDomain.CreateDomain(executableNameNoExe, Nothing, mySetupInfo)

      Console.WriteLine("Creating a new AppDomain '{0}'...", executableNameNoExe)

      Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory)
      Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles)

      Console.WriteLine("---")
      Dim myFCType As Type = CreateADynamicAssembly(curDomain, executableNameNoExe)

      Console.WriteLine("Loading '{0}' from '{1}'...", executableName, myDomain.BaseDirectory.ToString())

      Dim bFlags As BindingFlags = BindingFlags.Public Or BindingFlags.CreateInstance Or BindingFlags.Instance

      Dim myObjInstance As [Object] = myDomain.CreateInstanceAndUnwrap(executableNameNoExe, executableNameNoExe, False, bFlags, Nothing, Nothing, Nothing, Nothing, Nothing)

      Console.WriteLine("Executing method 'CountLocalFiles' in {0}...", myObjInstance.ToString())

      myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, Nothing, myObjInstance, New Object() {})
   End Sub 'Main
End Class 'ADDyno

using System;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.Remoting;

class ADDyno

{

   public static Type CreateADynamicAssembly(ref AppDomain myNewDomain,
                         string executableNameNoExe)
   {

    string executableName = executableNameNoExe + ".exe";

    AssemblyName myAsmName = new AssemblyName();
    myAsmName.Name = executableNameNoExe;
    myAsmName.CodeBase = Environment.CurrentDirectory;

    AssemblyBuilder myAsmBuilder = myNewDomain.DefineDynamicAssembly(myAsmName,
                        AssemblyBuilderAccess.RunAndSave);
    Console.WriteLine("-- Dynamic Assembly instantiated.");

    ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe,
                                      executableName);

    TypeBuilder myTypeBuilder = myModBuilder.DefineType(executableNameNoExe,
                        TypeAttributes.Public,
                        typeof(MarshalByRefObject));

    MethodBuilder myFCMethod = myTypeBuilder.DefineMethod("CountLocalFiles",
                        MethodAttributes.Public |
                        MethodAttributes.Static,
                        null,
                        new Type[] {  });

    MethodInfo currentDirGetMI = typeof(Environment).GetProperty("CurrentDirectory").GetGetMethod();
    MethodInfo writeLine0objMI = typeof(Console).GetMethod("WriteLine",
                     new Type[] { typeof(string) });
    MethodInfo writeLine2objMI = typeof(Console).GetMethod("WriteLine",
                     new Type[] { typeof(string), typeof(object), typeof(object) });
    MethodInfo getFilesMI = typeof(Directory).GetMethod("GetFiles",
                new Type[] { typeof(string) });

    myFCMethod.InitLocals = true;

    ILGenerator myFCIL = myFCMethod.GetILGenerator();

    Console.WriteLine("-- Generating MSIL method body...");
    LocalBuilder v0 = myFCIL.DeclareLocal(typeof(string));
    LocalBuilder v1 = myFCIL.DeclareLocal(typeof(int));
    LocalBuilder v2 = myFCIL.DeclareLocal(typeof(string));
    LocalBuilder v3 = myFCIL.DeclareLocal(typeof(string[]));

    Label evalForEachLabel = myFCIL.DefineLabel();
    Label topOfForEachLabel = myFCIL.DefineLabel();

    // Build the method body.

    myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, null);
    myFCIL.Emit(OpCodes.Stloc_S, v0);
    myFCIL.Emit(OpCodes.Ldc_I4_0);
    myFCIL.Emit(OpCodes.Stloc_S, v1);
    myFCIL.Emit(OpCodes.Ldstr, "---");
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);
    myFCIL.Emit(OpCodes.Ldloc_S, v0);
    myFCIL.EmitCall(OpCodes.Call, getFilesMI, null);
    myFCIL.Emit(OpCodes.Stloc_S, v3);

    myFCIL.Emit(OpCodes.Br_S, evalForEachLabel);

    // foreach loop starts here.
    myFCIL.MarkLabel(topOfForEachLabel);

        // Load array of strings and index, store value at index for output.
    myFCIL.Emit(OpCodes.Ldloc_S, v3);
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldelem_Ref);
    myFCIL.Emit(OpCodes.Stloc_S, v2);

    myFCIL.Emit(OpCodes.Ldloc_S, v2);
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);

    // Increment counter by one.
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldc_I4_1);
    myFCIL.Emit(OpCodes.Add);
    myFCIL.Emit(OpCodes.Stloc_S, v1);

    // Determine if end of file list array has been reached.
    myFCIL.MarkLabel(evalForEachLabel);
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Ldloc_S, v3);
    myFCIL.Emit(OpCodes.Ldlen);
    myFCIL.Emit(OpCodes.Conv_I4);
    myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel);
    //foreach loop end here.

    myFCIL.Emit(OpCodes.Ldstr, "---");
    myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null);
    myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}.");
    myFCIL.Emit(OpCodes.Ldloc_S, v1);
    myFCIL.Emit(OpCodes.Box, typeof(int));
    myFCIL.Emit(OpCodes.Ldloc_S, v0);
    myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, null);

    myFCIL.Emit(OpCodes.Ret);

    Type myType = myTypeBuilder.CreateType();

    myAsmBuilder.SetEntryPoint(myFCMethod);
    myAsmBuilder.Save(executableName);
    Console.WriteLine("-- Method generated, type completed, and assembly saved to disk.");

    return myType;

   }

   public static void Main()
   {

    string domainDir, executableName = null;

    Console.Write("Enter a name for the file counting assembly: ");
    string executableNameNoExe = Console.ReadLine();
    executableName = executableNameNoExe + ".exe";
    Console.WriteLine("---");

    domainDir = Environment.CurrentDirectory;

    AppDomain curDomain = Thread.GetDomain();

    // Create a new AppDomain, with the current directory as the base.

    Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory);
    AppDomainSetup mySetupInfo = new AppDomainSetup();
    mySetupInfo.ApplicationBase = domainDir;
    mySetupInfo.ApplicationName = executableNameNoExe;
    mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain;

    AppDomain myDomain = AppDomain.CreateDomain(executableNameNoExe,
                    null, mySetupInfo);

    Console.WriteLine("Creating a new AppDomain '{0}'...",
                    executableNameNoExe);

    Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory);
    Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles);

    Console.WriteLine("---");
    Type myFCType = CreateADynamicAssembly(ref curDomain,
                     executableNameNoExe);

    Console.WriteLine("Loading '{0}' from '{1}'...", executableName,
              myDomain.BaseDirectory.ToString());

    BindingFlags bFlags = (BindingFlags.Public | BindingFlags.CreateInstance |
                   BindingFlags.Instance);

    Object myObjInstance = myDomain.CreateInstanceAndUnwrap(executableNameNoExe,
                executableNameNoExe, false, bFlags,
                null, null, null, null, null);

    Console.WriteLine("Executing method 'CountLocalFiles' in {0}...",
               myObjInstance.ToString());

    myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, null,
                myObjInstance, new object[] { });

   }

}

using namespace System;
using namespace System::IO;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Runtime::Remoting;

ref class ADDyno
{
public:
   static Type^ CreateADynamicAssembly( interior_ptr<AppDomain^> myNewDomain, String^ executableNameNoExe )
   {
      String^ executableName = String::Concat( executableNameNoExe, ".exe" );
      AssemblyName^ myAsmName = gcnew AssemblyName;
      myAsmName->Name = executableNameNoExe;
      myAsmName->CodeBase = Environment::CurrentDirectory;
      AssemblyBuilder^ myAsmBuilder = ( *myNewDomain)->DefineDynamicAssembly( myAsmName, AssemblyBuilderAccess::RunAndSave );
      Console::WriteLine( "-- Dynamic Assembly instantiated." );
      ModuleBuilder^ myModBuilder = myAsmBuilder->DefineDynamicModule( executableNameNoExe, executableName );
      TypeBuilder^ myTypeBuilder = myModBuilder->DefineType( executableNameNoExe, TypeAttributes::Public, MarshalByRefObject::typeid );
      array<Type^>^temp0 = nullptr;
      MethodBuilder^ myFCMethod = myTypeBuilder->DefineMethod( "CountLocalFiles", static_cast<MethodAttributes>(MethodAttributes::Public | MethodAttributes::Static), nullptr, temp0 );
      MethodInfo^ currentDirGetMI = Environment::typeid->GetProperty( "CurrentDirectory" )->GetGetMethod();
      array<Type^>^temp1 = {String::typeid};
      MethodInfo^ writeLine0objMI = Console::typeid->GetMethod( "WriteLine", temp1 );
      array<Type^>^temp2 = {String::typeid,Object::typeid,Object::typeid};
      MethodInfo^ writeLine2objMI = Console::typeid->GetMethod( "WriteLine", temp2 );
      array<Type^>^temp3 = {String::typeid};
      MethodInfo^ getFilesMI = Directory::typeid->GetMethod( "GetFiles", temp3 );
      myFCMethod->InitLocals = true;
      ILGenerator^ myFCIL = myFCMethod->GetILGenerator();
      Console::WriteLine( "-- Generating MSIL method body..." );
      LocalBuilder^ v0 = myFCIL->DeclareLocal( String::typeid );
      LocalBuilder^ v1 = myFCIL->DeclareLocal( int::typeid );
      LocalBuilder^ v2 = myFCIL->DeclareLocal( String::typeid );
      LocalBuilder^ v3 = myFCIL->DeclareLocal( array<String^>::typeid );
      Label evalForEachLabel = myFCIL->DefineLabel();
      Label topOfForEachLabel = myFCIL->DefineLabel();

      // Build the method body.
      myFCIL->EmitCall( OpCodes::Call, currentDirGetMI, nullptr );
      myFCIL->Emit( OpCodes::Stloc_S, v0 );
      myFCIL->Emit( OpCodes::Ldc_I4_0 );
      myFCIL->Emit( OpCodes::Stloc_S, v1 );
      myFCIL->Emit( OpCodes::Ldstr, "---" );
      myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr );
      myFCIL->Emit( OpCodes::Ldloc_S, v0 );
      myFCIL->EmitCall( OpCodes::Call, getFilesMI, nullptr );
      myFCIL->Emit( OpCodes::Stloc_S, v3 );
      myFCIL->Emit( OpCodes::Br_S, evalForEachLabel );

      // foreach loop starts here.
      myFCIL->MarkLabel( topOfForEachLabel );

      // Load array of strings and index, store value at index for output.
      myFCIL->Emit( OpCodes::Ldloc_S, v3 );
      myFCIL->Emit( OpCodes::Ldloc_S, v1 );
      myFCIL->Emit( OpCodes::Ldelem_Ref );
      myFCIL->Emit( OpCodes::Stloc_S, v2 );
      myFCIL->Emit( OpCodes::Ldloc_S, v2 );
      myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr );

      // Increment counter by one.
      myFCIL->Emit( OpCodes::Ldloc_S, v1 );
      myFCIL->Emit( OpCodes::Ldc_I4_1 );
      myFCIL->Emit( OpCodes::Add );
      myFCIL->Emit( OpCodes::Stloc_S, v1 );

      // Determine if end of file list array has been reached.
      myFCIL->MarkLabel( evalForEachLabel );
      myFCIL->Emit( OpCodes::Ldloc_S, v1 );
      myFCIL->Emit( OpCodes::Ldloc_S, v3 );
      myFCIL->Emit( OpCodes::Ldlen );
      myFCIL->Emit( OpCodes::Conv_I4 );
      myFCIL->Emit( OpCodes::Blt_S, topOfForEachLabel );

      //foreach loop end here.
      myFCIL->Emit( OpCodes::Ldstr, "---" );
      myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr );
      myFCIL->Emit( OpCodes::Ldstr, "There are {0} files in {1}." );
      myFCIL->Emit( OpCodes::Ldloc_S, v1 );
      myFCIL->Emit( OpCodes::Box, int::typeid );
      myFCIL->Emit( OpCodes::Ldloc_S, v0 );
      myFCIL->EmitCall( OpCodes::Call, writeLine2objMI, nullptr );
      myFCIL->Emit( OpCodes::Ret );
      Type^ myType = myTypeBuilder->CreateType();
      myAsmBuilder->SetEntryPoint( myFCMethod );
      myAsmBuilder->Save( executableName );
      Console::WriteLine( "-- Method generated, type completed, and assembly saved to disk." );
      return myType;
   }
};

int main()
{
   String^ domainDir;
   String^ executableName = nullptr;
   Console::Write( "Enter a name for the file counting assembly: " );
   String^ executableNameNoExe = Console::ReadLine();
   executableName = String::Concat( executableNameNoExe, ".exe" );
   Console::WriteLine( "---" );
   domainDir = Environment::CurrentDirectory;
   AppDomain^ curDomain = Thread::GetDomain();

   // Create a new AppDomain, with the current directory as the base.
   Console::WriteLine( "Current Directory: {0}", Environment::CurrentDirectory );
   AppDomainSetup^ mySetupInfo = gcnew AppDomainSetup;
   mySetupInfo->ApplicationBase = domainDir;
   mySetupInfo->ApplicationName = executableNameNoExe;
   mySetupInfo->LoaderOptimization = LoaderOptimization::SingleDomain;
   AppDomain^ myDomain = AppDomain::CreateDomain( executableNameNoExe, nullptr, mySetupInfo );
   Console::WriteLine( "Creating a new AppDomain '{0}'...", executableNameNoExe );
   Console::WriteLine( "-- Base Directory = '{0}'", myDomain->BaseDirectory );
   Console::WriteLine( "-- Shadow Copy? = '{0}'", myDomain->ShadowCopyFiles );
   Console::WriteLine( "---" );
   Type^ myFCType = ADDyno::CreateADynamicAssembly(  &curDomain, executableNameNoExe );
   Console::WriteLine( "Loading '{0}' from '{1}'...", executableName, myDomain->BaseDirectory );
   BindingFlags bFlags = static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::CreateInstance | BindingFlags::Instance);
   Object^ myObjInstance = myDomain->CreateInstanceAndUnwrap( executableNameNoExe, executableNameNoExe, false, bFlags, nullptr, nullptr, nullptr, nullptr, nullptr );
   Console::WriteLine( "Executing method 'CountLocalFiles' in {0}...", myObjInstance );
   array<Object^>^temp4 = nullptr;
   myFCType->InvokeMember( "CountLocalFiles", BindingFlags::InvokeMethod, nullptr, myObjInstance, temp4 );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.PartialTrustVisibleAssemblies 属性

AppDomainSetup
.
.
::
.
PartialTrustVisibleAssemblies 属性
AppDomainSetup 类

获取或设置标以 NotVisibleByDefault 标志的程序集的列表，这些程序集对沙箱应用程序域中的部分信任代码可见。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property PartialTrustVisibleAssemblies As String()
    Get
    Set
public string[] PartialTrustVisibleAssemblies { get; set; }
public:
property array<String^>^ PartialTrustVisibleAssemblies {
    array<String^>^ get ();
    void set (array<String^>^ value);
}
member PartialTrustVisibleAssemblies : string[] with get, set

属性值

类型：
array<
System String
>
[]
()
[]

部分程序集名称的数组，其中每个部分名称都由简单程序集名称和公钥组成。

以 .NET Framework 4 版 开始，AllowPartiallyTrustedCallersAttribute (APTCA) 特性可通过将其 PartialTrustVisibilityLevel 属性设置为 NotVisibleByDefault 而附带条件。用 NotVisibleByDefault 标记的 APTCA 程序集不能由部分可信的代码使用，除非主机应用程序允许。 以 .NET Framework 4 版 开始，AllowPartiallyTrustedCallersAttribute (APTCA) 特性可通过将其 PartialTrustVisibilityLevel 属性设置为 NotVisibleByDefault 而附带条件。用 NotVisibleByDefault 标记的 APTCA 程序集不能由部分可信的代码使用，除非主机应用程序允许。

沙盒应用程序域的主机允许应用程序域中的代码使用带有条件 APTCA 特性的程序集，方法是创建一个包含每个程序集简单名称和公钥的数组，然后将数组分配到此属性。例如数组元素的形式可如下："MyAssembly, PublicKey=0024000004800000940000000602000000240000525341310004000001000100db2ad5e5fedc67ea526ff72ad426ef68e08e241d296c499eedfec6648dcc62b1a12f72be5833a45bbec481b68415b08a5fbc9f9ef247b523dd72bbea65bb532784ddc5c704544bd2f1c2d46fdbe41e4f949e76f9947357b2d5cf8ca9f970701bbd6e8ab64ad31b20ad0be9b56dae4f6b83332b92a2a3b8ea2804c40efbc0b6b9". 沙盒应用程序域的主机允许应用程序域中的代码使用带有条件 APTCA 特性的程序集，方法是创建一个包含每个程序集简单名称和公钥的数组，然后将数组分配到此属性。例如数组元素的形式可如下："MyAssembly, PublicKey=0024000004800000940000000602000000240000525341310004000001000100db2ad5e5fedc67ea526ff72ad426ef68e08e241d296c499eedfec6648dcc62b1a12f72be5833a45bbec481b68415b08a5fbc9f9ef247b523dd72bbea65bb532784ddc5c704544bd2f1c2d46fdbe41e4f949e76f9947357b2d5cf8ca9f970701bbd6e8ab64ad31b20ad0be9b56dae4f6b83332b92a2a3b8ea2804c40efbc0b6b9".

重要说明 重要事项

如果您正在使用的 AppDomainManager 的子类，以及定义它取决于通过条件 APTCA 特性标记的程序集的程序集，则必须将这些程序集包括到传递给 PartialTrustVisibleAssemblies 属性的列表中，该属性是您用来创建应用程序域的 AppDomainSetup 的属性。否则，使用条件 APTCA 特性标记的程序集将被禁用。 如果您正在使用的 AppDomainManager 的子类，以及定义它取决于通过条件 APTCA 特性标记的程序集的程序集，则必须将这些程序集包括到传递给 PartialTrustVisibleAssemblies 属性的列表中，该属性是您用来创建应用程序域的 AppDomainSetup 的属性。否则，使用条件 APTCA 特性标记的程序集将被禁用。
说明 说明

当您调试沙盒应用程序域中运行的应用程序时，某些 SecurityException 消息可能具有误导性。例如，消息可能指明完全信任的程序集之一只具有有限权限，问题的根本原因是超过了沙盒应用程序域授予集的安全需求已传播到沙盒应用程序域的边界并且失败。 当您调试沙盒应用程序域中运行的应用程序时，某些 SecurityException 消息可能具有误导性。例如，消息可能指明完全信任的程序集之一只具有有限权限，问题的根本原因是超过了沙盒应用程序域授予集的安全需求已传播到沙盒应用程序域的边界并且失败。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间
AllowPartiallyTrustedCallersAttribute
AllowPartiallyTrustedCallersAttribute PartialTrustVisibilityLevel
PartialTrustVisibilityLevel NotVisibleByDefault


AppDomainSetup ..::.PrivateBinPath 属性

AppDomainSetup
.
.
::
.
PrivateBinPath 属性
AppDomainSetup 类

获取或设置应用程序基目录下的目录列表，这些目录被探测以寻找其中的私有程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property PrivateBinPath As String
    Get
    Set
public string PrivateBinPath { get; set; }
public:
virtual property String^ PrivateBinPath {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract PrivateBinPath : string with get, set
override PrivateBinPath : string with get, set

属性值

类型： System String
目录名称的列表，以用分号分隔。

实现

专用程序集与应用程序部署在同一目录结构中。如果为 PrivateBinPath 指定的目录不在 ApplicationBase 下，它们将被忽略。 专用程序集与应用程序部署在同一目录结构中。如果为 PrivateBinPath 指定的目录不在 ApplicationBase 下，它们将被忽略。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.PrivateBinPathProbe 属性

AppDomainSetup
.
.
::
.
PrivateBinPathProbe 属性
AppDomainSetup 类

获取或设置一个字符串值，用于在应用程序的搜索路径中包含 ApplicationBase，或者从搜索路径中排除该基路径而只在 PrivateBinPath 中进行搜索。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property PrivateBinPathProbe As String
    Get
    Set
public string PrivateBinPathProbe { get; set; }
public:
virtual property String^ PrivateBinPathProbe {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract PrivateBinPathProbe : string with get, set
override PrivateBinPathProbe : string with get, set

属性值

类型： System String
如果应用程序搜索路径中包括 ApplicationBase，则为空字符串；如果将其排除，则为非空字符串。

实现

将此属性设置为任何非空字符串可将应用程序的目录路径（即 ApplicationBase）从应用程序的搜索路径中排除，只搜索 PrivateBinPath。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.SandboxInterop 属性

AppDomainSetup
.
.
::
.
SandboxInterop 属性
AppDomainSetup 类

获取或设置一个值，该值指示是否在应用程序域中为互操作调用禁用接口缓存，从而对每个调用执行 QueryInterface。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property SandboxInterop As Boolean
    Get
    Set
public bool SandboxInterop { get; set; }
public:
property bool SandboxInterop {
    bool get ();
    void set (bool value);
}
member SandboxInterop : bool with get, set

属性值

类型： System Boolean
如果为使用当前 AppDomainSetup 对象创建的应用程序域中的互操作调用禁用接口缓存，则为 true；否则为 false。

禁用接口缓存会对互操作调用的性能产生重大影响。

在 .NET Framework 3.5 版 中引入了此成员。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间


AppDomainSetup ..::.ShadowCopyDirectories 属性

AppDomainSetup
.
.
::
.
ShadowCopyDirectories 属性
AppDomainSetup 类

获取或设置目录的名称，这些目录包含要影像复制的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property ShadowCopyDirectories As String
    Get
    Set
public string ShadowCopyDirectories { get; set; }
public:
virtual property String^ ShadowCopyDirectories {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract ShadowCopyDirectories : string with get, set
override ShadowCopyDirectories : string with get, set

属性值

类型： System String
目录名称的列表，以用分号分隔。

实现

如果启用影像复制，则默认操作为对通过探测找到的所有程序集进行影像复制；即在由 PrivateBinPath 和 ApplicationBase 属性指定的目录中进行影像复制。ShadowCopyDirectories 属性将影像副本限制在 ShadowCopyDirectories 指定的目录中的程序集。 如果启用影像复制，则默认操作为对通过探测找到的所有程序集进行影像复制；即在由 PrivateBinPath 和 ApplicationBase 属性指定的目录中进行影像复制。ShadowCopyDirectories 属性将影像副本限制在 ShadowCopyDirectories 指定的目录中的程序集。

重要说明 重要事项

目录路径不得包含分号，因为分号是分隔符字符。分号没有转义符。 目录路径不得包含分号，因为分号是分隔符字符。分号没有转义符。

如果影像复制有效，则在加载程序集之前，程序集文件被复制到另一个位置。原始程序集文件没有被锁定，因此可以对其进行更新。有关影像复制的更多信息，请参见影像复制程序集。 如果影像复制有效，则在加载程序集之前，程序集文件被复制到另一个位置。原始程序集文件没有被锁定，因此可以对其进行更新。有关影像复制的更多信息，请参见影像复制程序集。 如果影像复制有效，则在加载程序集之前，程序集文件被复制到另一个位置。原始程序集文件没有被锁定，因此可以对其进行更新。有关影像复制的更多信息，请参见影像复制程序集。

  • FileIOPermission

    用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于访问路径信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间
CachePath
ShadowCopyFiles

其他资源

影像复制程序集


AppDomainSetup ..::.ShadowCopyFiles 属性

AppDomainSetup
.
.
::
.
ShadowCopyFiles 属性
AppDomainSetup 类

获取或设置指示影像复制是打开还是关闭的字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property ShadowCopyFiles As String
    Get
    Set
public string ShadowCopyFiles { get; set; }
public:
virtual property String^ ShadowCopyFiles {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract ShadowCopyFiles : string with get, set
override ShadowCopyFiles : string with get, set

属性值

类型： System String
字符串值“true”指示打开了卷影复制；“false”则指示关闭了卷影复制。

实现

有关影像复制的更多信息，请参见影像复制程序集。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainSetup 类
AppDomainSetup 成员
System 命名空间
CachePath
ShadowCopyDirectories

其他资源

影像复制程序集


AppDomainUnloadedException 类

AppDomainUnloadedException 类
成员

在尝试访问已卸载的应用程序域时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class AppDomainUnloadedException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class AppDomainUnloadedException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class AppDomainUnloadedException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type AppDomainUnloadedException =
    class
        inherit SystemException
    end

在 .NET Framework 2.0 版中，未在用户代码中处理的 AppDomainUnloadedException 具有以下作用：

  • 如果线程是在托管代码中启动的，则该线程终止。未经处理的异常不能终止应用程序。 如果线程是在托管代码中启动的，则该线程终止。未经处理的异常不能终止应用程序。

  • 如果任务正在 ThreadPool 线程中执行，则该任务终止，且该线程返回线程池。未经处理的异常不能终止应用程序。 如果任务正在 ThreadPool 线程中执行，则该任务终止，且该线程返回线程池。未经处理的异常不能终止应用程序。

  • 如果线程是在非托管代码中启动的（如主应用程序线程），则该线程终止。允许未经处理的异常继续，并且操作系统终止应用程序。 如果线程是在非托管代码中启动的（如主应用程序线程），则该线程终止。允许未经处理的异常继续，并且操作系统终止应用程序。

AppDomainUnloadedException 使用值为 0x80131014 的 HRESULT COR_E_APPDOMAINUNLOADED。

有关 AppDomainUnloadedException 实例的初始属性值列表，请参见 AppDomainUnloadedException 构造函数。

本节包含两个代码示例。第一个示例演示不同线程中的 AppDomainUnloadedException 的作用，第二个示例演示如何卸载基本应用程序域。 本节包含两个代码示例。第一个示例演示不同线程中的 AppDomainUnloadedException 的作用，第二个示例演示如何卸载基本应用程序域。

示例 1

下面的代码示例定义一个 TestClass 类和一个 Example 类，前者可以跨应用程序域边界进行封送，后者包含一个 static（在 Visual Basic 中为 Shared）ThreadProc 方法。ThreadProc 方法创建一个应用程序域，在该域中创建一个 TestClass 对象，并调用卸载正在执行的域的 TestClass 的方法，引发 AppDomainUnloadedException 异常。 下面的代码示例定义一个 TestClass 类和一个 Example 类，前者可以跨应用程序域边界进行封送，后者包含一个 static（在 Visual Basic 中为 Shared）ThreadProc 方法。ThreadProc 方法创建一个应用程序域，在该域中创建一个 TestClass 对象，并调用卸载正在执行的域的 TestClass 的方法，引发 AppDomainUnloadedException 异常。

TestClass 方法在 ThreadPool 线程和普通线程未进行异常处理的情况下执行，演示了未经处理的异常可终止任务或线程但不会终止应用程序。然后，该方法在主应用程序线程进行异常处理和不进行异常处理两种情况下执行，演示了未经处理的异常会终止应用程序。 TestClass 方法在 ThreadPool 线程和普通线程未进行异常处理的情况下执行，演示了未经处理的异常可终止任务或线程但不会终止应用程序。然后，该方法在主应用程序线程进行异常处理和不进行异常处理两种情况下执行，演示了未经处理的异常会终止应用程序。

Imports System
Imports System.Threading
Imports System.Runtime.InteropServices

Public Class Example

    Public Shared Sub Main()

        ' 1. Queue ThreadProc as a task for a ThreadPool thread.
        ThreadPool.QueueUserWorkItem(AddressOf ThreadProc, _
            " from a ThreadPool thread")
        Thread.Sleep(1000)

        ' 2. Execute ThreadProc on an ordinary thread.
        Dim t As New Thread(AddressOf ThreadProc)
        t.Start(" from an ordinary thread")
        t.Join()

        ' 3. Execute ThreadProc on the main thread, with
        '    exception handling.
        Try
            ThreadProc(" from the main application thread (handled)")
        Catch adue As AppDomainUnloadedException
            Console.WriteLine("Main thread caught AppDomainUnloadedException: {0}", _
                adue.Message)
        End Try

        ' 4. Execute ThreadProc on the main thread without
        '    exception handling.
        ThreadProc(" from the main application thread (unhandled)")

        Console.WriteLine("Main: This message is never displayed.")

    End Sub

    Private Shared Sub ThreadProc(ByVal state As Object)
        ' Create an application domain, and create an instance
        ' of TestClass in the application domain. The first
        ' parameter of CreateInstanceAndUnwrap is the name of
        ' this executable. If you compile the example code using
        ' any name other than "Sample.exe", you must change the
        ' parameter appropriately.
        Dim ad As AppDomain = AppDomain.CreateDomain("TestDomain")
        Dim o As Object = ad.CreateInstanceAndUnwrap("Sample", "TestClass")
        Dim tc As TestClass = CType(o, TestClass)

        ' In the new application domain, execute a method that
        ' unloads the AppDomain. The unhandled exception this
        ' causes ends the current thread.
        tc.UnloadCurrentDomain(state)

        Console.WriteLine("ThreadProc: This message is never displayed.")

    End Sub
End Class

' TestClass derives from MarshalByRefObject, so it can be marshaled
' across application domain boundaries.
'
Public Class TestClass
    Inherits MarshalByRefObject

    Public Sub UnloadCurrentDomain(ByVal state As Object)
        Console.WriteLine(vbLf & "Unloading the current AppDomain{0}.", state)

        ' Unload the current application domain. This causes
        ' an AppDomainUnloadedException to be thrown.
        '
        AppDomain.Unload(AppDomain.CurrentDomain)

    End Sub
End Class

' This code example produces output similar to the following:
'
'Unloading the current AppDomain from a ThreadPool thread.
'
'Unloading the current AppDomain from an ordinary thread.
'
'Unloading the current AppDomain from the main application thread (handled).
'Main thread caught AppDomainUnloadedException: The application domain in which the thread was running has been unloaded.
'
'Unloading the current AppDomain from the main application thread (unhandled).
'
'Unhandled Exception: System.AppDomainUnloadedException: The application domain in which the thread was running has been unloaded.
'   at TestClass.UnloadCurrentDomain(Object state)
'   at Example.ThreadProc(Object state)
'   at Example.Main()
'

using System;
using System.Threading;
using System.Runtime.InteropServices;

public class Example
{
    public static void Main()
    {
        // 1. Queue ThreadProc as a task for a ThreadPool thread.
        ThreadPool.QueueUserWorkItem(ThreadProc, " from a ThreadPool thread");
        Thread.Sleep(1000);

        // 2. Execute ThreadProc on an ordinary thread.
        Thread t = new Thread(ThreadProc);
        t.Start(" from an ordinary thread");
        t.Join();

        // 3. Execute ThreadProc on the main thread, with
        //    exception handling.
        try
        {
            ThreadProc(" from the main application thread (handled)");
        }
        catch (AppDomainUnloadedException adue)
        {
            Console.WriteLine("Main thread caught AppDomainUnloadedException: {0}", adue.Message);
        }

        // 4. Execute ThreadProc on the main thread without
        //    exception handling.
        ThreadProc(" from the main application thread (unhandled)");

        Console.WriteLine("Main: This message is never displayed.");
    }

    private static void ThreadProc(object state)
    {
        // Create an application domain, and create an instance
        // of TestClass in the application domain. The first
        // parameter of CreateInstanceAndUnwrap is the name of
        // this executable. If you compile the example code using
        // any name other than "Sample.exe", you must change the
        // parameter appropriately.
        AppDomain ad = AppDomain.CreateDomain("TestDomain");
        TestClass tc = (TestClass)ad.CreateInstanceAndUnwrap("Sample", "TestClass");

        // In the new application domain, execute a method that
        // unloads the AppDomain. The unhandled exception this
        // causes ends the current thread.
        tc.UnloadCurrentDomain(state);

        Console.WriteLine("ThreadProc: This message is never displayed.");
    }
}

// TestClass derives from MarshalByRefObject, so it can be marshaled
// across application domain boundaries.
//
public class TestClass : MarshalByRefObject
{
    public void UnloadCurrentDomain(object state)
    {
        Console.WriteLine("\nUnloading the current AppDomain{0}.", state);

        // Unload the current application domain. This causes
        // an AppDomainUnloadedException to be thrown.
        //
        AppDomain.Unload(AppDomain.CurrentDomain);
    }
}

/* This code example produces output similar to the following:
Unloading the current AppDomain from a ThreadPool thread.

Unloading the current AppDomain from an ordinary thread.

Unloading the current AppDomain from the main application thread (handled).
Main thread caught AppDomainUnloadedException: The application domain in which the thread was running has been unloaded.

Unloading the current AppDomain from the main application thread (unhandled).

Unhandled Exception: System.AppDomainUnloadedException: The application domain in which the thread was running has been unloaded.
   at TestClass.UnloadCurrentDomain(Object state)
   at Example.ThreadProc(Object state)
   at Example.Main()
 */

示例 2

下面的代码示例创建一个应用程序域并将其卸载，演示了对已卸载的域进行后续访问尝试会引发 AppDomainUnloadedException 异常。

Imports System
Imports System.Reflection
Imports System.Security.Policy 'for evidence object

Class ADUnload

   Public Shared Sub Main()

      'Create evidence for the new appdomain.
      Dim adevidence As Evidence = AppDomain.CurrentDomain.Evidence

      ' Create the new application domain.
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", adevidence)

      Console.WriteLine(("Host domain: " + AppDomain.CurrentDomain.FriendlyName))
      Console.WriteLine(("child domain: " + domain.FriendlyName))
      ' Unload the application domain.
      AppDomain.Unload(domain)

      Try
         Console.WriteLine()
         ' Note that the following statement creates an exception because the domain no longer exists.
         Console.WriteLine(("child domain: " + domain.FriendlyName))

      Catch e As AppDomainUnloadedException
         Console.WriteLine("The appdomain MyDomain does not exist.")
      End Try
   End Sub 'Main
End Class 'ADUnload

using System;
using System.Reflection;
using System.Security.Policy;  //for evidence object
class ADUnload
{
    public static void Main()
    {

        //Create evidence for the new appdomain.
        Evidence adevidence = AppDomain.CurrentDomain.Evidence;

         // Create the new application domain.
         AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence);

                Console.WriteLine("Host domain: " + AppDomain.CurrentDomain.FriendlyName);
                Console.WriteLine("child domain: " + domain.FriendlyName);
        // Unload the application domain.
        AppDomain.Unload(domain);

        try
        {
        Console.WriteLine();
        // Note that the following statement creates an exception because the domain no longer exists.
                Console.WriteLine("child domain: " + domain.FriendlyName);
        }

        catch (AppDomainUnloadedException e)
        {
        Console.WriteLine("The appdomain MyDomain does not exist.");
        }

    }

}

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Policy;

//for evidence Object*
int main()
{

   //Create evidence for the new appdomain.
   Evidence^ adevidence = AppDomain::CurrentDomain->Evidence;

   // Create the new application domain.
   AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", adevidence );
   Console::WriteLine( "Host domain: {0}", AppDomain::CurrentDomain->FriendlyName );
   Console::WriteLine( "child domain: {0}", domain->FriendlyName );

   // Unload the application domain.
   AppDomain::Unload( domain );
   try
   {
      Console::WriteLine();

      // Note that the following statement creates an exception because the domain no longer exists.
      Console::WriteLine( "child domain: {0}", domain->FriendlyName );
   }
   catch ( AppDomainUnloadedException^ /*e*/ )
   {
      Console::WriteLine( "The appdomain MyDomain does not exist." );
   }

}

System System..::.AppDomainUnloadedExceptionAppDomainUnloadedException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomainUnloadedException 成员
System 命名空间
AppDomain
Exception

其他资源

处理和引发异常


AppDomainUnloadedException 成员

AppDomainUnloadedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainUnloadedException 类

在尝试访问已卸载的应用程序域时引发的异常。

AppDomainUnloadedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

AppDomainUnloadedException 类
System 命名空间


AppDomainUnloadedException 构造函数

AppDomainUnloadedException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainUnloadedException 类

初始化 AppDomainUnloadedException 类的新实例。

名称 说明
页首

参考

AppDomainUnloadedException 类
AppDomainUnloadedException 成员
System 命名空间


AppDomainUnloadedException 构造函数

AppDomainUnloadedException 构造函数
AppDomainUnloadedException 类

初始化 AppDomainUnloadedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public AppDomainUnloadedException()
public:
AppDomainUnloadedException()
new : unit -> AppDomainUnloadedException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“目标应用程序域已卸载”。此消息将考虑当前系统区域性。

下表显示 AppDomainUnloadedException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomainUnloadedException 类
AppDomainUnloadedException 成员
AppDomainUnloadedException 重载
System 命名空间


AppDomainUnloadedException 构造函数 (String)

AppDomainUnloadedException 构造函数 (String)
AppDomainUnloadedException 类

使用指定的错误信息初始化 AppDomainUnloadedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public AppDomainUnloadedException(
    string message
)
public:
AppDomainUnloadedException(
    String^ message
)
new :
        message:string -> AppDomainUnloadedException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 AppDomainUnloadedException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomainUnloadedException 类
AppDomainUnloadedException 成员
AppDomainUnloadedException 重载
System 命名空间


AppDomainUnloadedException 构造函数 (SerializationInfo, StreamingContext)

AppDomainUnloadedException 构造函数 (SerializationInfo, StreamingContext)
AppDomainUnloadedException 类

用序列化数据初始化 AppDomainUnloadedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected AppDomainUnloadedException(
    SerializationInfo info,
    StreamingContext context
)
protected:
AppDomainUnloadedException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> AppDomainUnloadedException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AppDomainUnloadedException 类
AppDomainUnloadedException 成员
AppDomainUnloadedException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


AppDomainUnloadedException 构造函数 (String, Exception)

AppDomainUnloadedException 构造函数 (String, Exception)
AppDomainUnloadedException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 AppDomainUnloadedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public AppDomainUnloadedException(
    string message,
    Exception innerException
)
public:
AppDomainUnloadedException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> AppDomainUnloadedException

参数

message
类型： System String
描述错误的消息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用。

下表显示 AppDomainUnloadedException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AppDomainUnloadedException 类
AppDomainUnloadedException 成员
AppDomainUnloadedException 重载
System 命名空间
Exception

其他资源

处理和引发异常


AppDomainUnloadedException 方法

AppDomainUnloadedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainUnloadedException 类

AppDomainUnloadedException 类型公开以下成员。

名称 说明
页首

参考

AppDomainUnloadedException 类
System 命名空间


AppDomainUnloadedException 属性

AppDomainUnloadedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainUnloadedException 类

AppDomainUnloadedException 类型公开以下成员。

名称 说明
页首

参考

AppDomainUnloadedException 类
System 命名空间


AppDomainUnloadedException 事件

AppDomainUnloadedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AppDomainUnloadedException 类

AppDomainUnloadedException 类型公开以下成员。

名称 说明
页首

参考

AppDomainUnloadedException 类
System 命名空间


ApplicationException 类

ApplicationException 类
成员

发生非致命应用程序错误时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ApplicationException _
    Inherits Exception
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ApplicationException : Exception
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ApplicationException : public Exception
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ApplicationException =
    class
        inherit Exception
    end

用户应用程序（不是公共语言运行时）引发从 ApplicationException 类派生的自定义异常。ApplicationException 类区分应用程序定义的异常与系统定义的异常。 用户应用程序（不是公共语言运行时）引发从 ApplicationException 类派生的自定义异常。ApplicationException 类区分应用程序定义的异常与系统定义的异常。

如果打算设计需要创建其自己的异常的应用程序，建议您从 Exception 类派生自定义异常。最初的想法是自定义异常应从 ApplicationException 类派生；但实际上，尚未找到此异常来添加有效值。有关更多信息，请参见处理异常的最佳做法。 如果打算设计需要创建其自己的异常的应用程序，建议您从 Exception 类派生自定义异常。最初的想法是自定义异常应从 ApplicationException 类派生；但实际上，尚未找到此异常来添加有效值。有关更多信息，请参见处理异常的最佳做法。 如果打算设计需要创建其自己的异常的应用程序，建议您从 Exception 类派生自定义异常。最初的想法是自定义异常应从 ApplicationException 类派生；但实际上，尚未找到此异常来添加有效值。有关更多信息，请参见处理异常的最佳做法。

ApplicationException 使用值为 0x80131600 的 HRESULT COR_E_APPLICATION。

有关 ApplicationException 实例的初始属性值列表，请参见 ApplicationException 构造函数。

System System..::.ApplicationExceptionApplicationException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ApplicationException 成员
System 命名空间
Exception

其他资源

处理和引发异常


ApplicationException 成员

ApplicationException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationException 类

发生非致命应用程序错误时引发的异常。

ApplicationException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ApplicationException 类
System 命名空间


ApplicationException 构造函数

ApplicationException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationException 类

初始化 ApplicationException 类的一个新实例。

名称 说明
页首

参考

ApplicationException 类
ApplicationException 成员
System 命名空间


ApplicationException 构造函数

ApplicationException 构造函数
ApplicationException 类

初始化 ApplicationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ApplicationException()
public:
ApplicationException()
new : unit -> ApplicationException

此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“已发生应用程序错误”。此消息将考虑当前系统区域性。

下表显示 ApplicationException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ApplicationException 类
ApplicationException 成员
ApplicationException 重载
System 命名空间


ApplicationException 构造函数 (String)

ApplicationException 构造函数 (String)
ApplicationException 类

使用指定错误消息初始化 ApplicationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public ApplicationException(
    string message
)
public:
ApplicationException(
    String^ message
)
new :
        message:string -> ApplicationException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

此消息将考虑当前系统区域性。

下表显示 ApplicationException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ApplicationException 类
ApplicationException 成员
ApplicationException 重载
System 命名空间


ApplicationException 构造函数 (SerializationInfo, StreamingContext)

ApplicationException 构造函数 (SerializationInfo, StreamingContext)
ApplicationException 类

用序列化数据初始化 ApplicationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ApplicationException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ApplicationException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ApplicationException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationException 类
ApplicationException 成员
ApplicationException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


ApplicationException 构造函数 (String, Exception)

ApplicationException 构造函数 (String, Exception)
ApplicationException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 ApplicationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ApplicationException(
    string message,
    Exception innerException
)
public:
ApplicationException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ApplicationException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用。

下表显示 ApplicationException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ApplicationException 类
ApplicationException 成员
ApplicationException 重载
System 命名空间
Exception

其他资源

处理和引发异常


ApplicationException 方法

ApplicationException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationException 类

ApplicationException 类型公开以下成员。

名称 说明
页首

参考

ApplicationException 类
System 命名空间


ApplicationException 属性

ApplicationException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationException 类

ApplicationException 类型公开以下成员。

名称 说明
页首

参考

ApplicationException 类
System 命名空间


ApplicationException 事件

ApplicationException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationException 类

ApplicationException 类型公开以下成员。

名称 说明
页首

参考

ApplicationException 类
System 命名空间


ApplicationId 类

ApplicationId 类
成员

所含信息用于唯一标识基于清单的应用程序。无法继承此类。 所含信息用于唯一标识基于清单的应用程序。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class ApplicationId
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class ApplicationId
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ApplicationId sealed
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ApplicationId =  class end

应用程序标识包含发行者公钥、应用程序名称、目标处理器结构、应用程序区域性和应用程序版本。应用程序标识属性值对应于应用程序清单中包含的信息。有关应用程序清单的更多信息，请参见 ClickOnce 应用程序清单。 应用程序标识包含发行者公钥、应用程序名称、目标处理器结构、应用程序区域性和应用程序版本。应用程序标识属性值对应于应用程序清单中包含的信息。有关应用程序清单的更多信息，请参见 ClickOnce 应用程序清单。 应用程序标识包含发行者公钥、应用程序名称、目标处理器结构、应用程序区域性和应用程序版本。应用程序标识属性值对应于应用程序清单中包含的信息。有关应用程序清单的更多信息，请参见 ClickOnce 应用程序清单。

ApplicationId 由 ApplicationSecurityInfo 类用来标识基于清单的应用程序。

下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 ApplicationId 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。

Imports System
Imports System.Collections
Imports System.Text
Imports System.Security.Policy
Imports System.Reflection
Imports System.Security
Imports System.Security.Permissions

Public Class Program
    Inherits MarshalByRefObject
    <SecurityPermission(SecurityAction.Demand, ControlDomainPolicy:=true)> _
    Public Shared Sub Main(ByVal args() As String)
        Console.WriteLine("Full name = " + _
            AppDomain.CurrentDomain.ActivationContext.Identity.FullName)
        Console.WriteLine("Code base = " + _
            AppDomain.CurrentDomain.ActivationContext.Identity.CodeBase)
        Dim asi As New ApplicationSecurityInfo(AppDomain.CurrentDomain.ActivationContext)
        Console.WriteLine("ApplicationId.Name property = " + asi.ApplicationId.Name)
        If Not (asi.ApplicationId.Culture Is Nothing) Then
            Console.WriteLine("ApplicationId.Culture property = " + _
            asi.ApplicationId.Culture.ToString())
        End If
        Console.WriteLine("ApplicationId.ProcessorArchitecture property = " + _
            asi.ApplicationId.ProcessorArchitecture)
        Console.WriteLine("ApplicationId.Version property = " + _
            asi.ApplicationId.Version.ToString())
        ' To display the value of the public key, enumerate the Byte array for the property.
        Console.Write("ApplicationId.PublicKeyToken property = ")
        Dim pk As Byte() = asi.ApplicationId.PublicKeyToken
        Dim i As Integer
        For i = 0 To (pk.GetLength(0))
            Console.Write("{0:x}", pk(i))
        Next i
        Console.Read()

    End Sub 'Main

    Public Sub Run()
        Main(New String() {})
    End Sub 'Run
End Class 'Program

using System;
using System.Collections;
using System.Text;
using System.Security.Policy;
using System.Reflection;
using System.Security;
using System.Security.Permissions;

namespace ActivationContextSample
{
    public class Program : MarshalByRefObject
    {
        [SecurityPermission(SecurityAction.Demand, ControlDomainPolicy = true)]
        public static void Main(string[] args)
        {
            Console.WriteLine("Full name = " +
                AppDomain.CurrentDomain.ActivationContext.Identity.FullName);
            Console.WriteLine("Code base = " +
                AppDomain.CurrentDomain.ActivationContext.Identity.CodeBase);
            ApplicationSecurityInfo asi = new ApplicationSecurityInfo(AppDomain.CurrentDomain.ActivationContext);

            Console.WriteLine("ApplicationId.Name property = " + asi.ApplicationId.Name);
            if (asi.ApplicationId.Culture != null)
                Console.WriteLine("ApplicationId.Culture property = " + asi.ApplicationId.Culture.ToString());
            Console.WriteLine("ApplicationId.ProcessorArchitecture property = " + asi.ApplicationId.ProcessorArchitecture);
            Console.WriteLine("ApplicationId.Version property = " + asi.ApplicationId.Version);
            // To display the value of the public key, enumerate the Byte array for the property.
            Console.Write("ApplicationId.PublicKeyToken property = ");
            byte[] pk = asi.ApplicationId.PublicKeyToken;
            for (int i = 0; i < pk.GetLength(0); i++)
                Console.Write("{0:x}", pk[i]);

            Console.Read();
        }

        public void Run()
        {
            Main(new string[] { });
            Console.ReadLine();
        }
    }
}

System System..::.ApplicationIdApplicationId
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 成员
System 命名空间


ApplicationId 成员

ApplicationId 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationId 类

所含信息用于唯一标识基于清单的应用程序。无法继承此类。 所含信息用于唯一标识基于清单的应用程序。无法继承此类。

ApplicationId 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ApplicationId 类
System 命名空间


ApplicationId 构造函数

ApplicationId 构造函数
ApplicationId 类

初始化 ApplicationId 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    publicKeyToken As Byte(), _
    name As String, _
    version As Version, _
    processorArchitecture As String, _
    culture As String _
)
public ApplicationId(
    byte[] publicKeyToken,
    string name,
    Version version,
    string processorArchitecture,
    string culture
)
public:
ApplicationId(
    array<unsigned char>^ publicKeyToken,
    String^ name,
    Version^ version,
    String^ processorArchitecture,
    String^ culture
)
new :
        publicKeyToken:byte[] *
        name:string *
        version:Version *
        processorArchitecture:string *
        culture:string -> ApplicationId

参数

publicKeyToken
类型：
array<
System Byte
>
[]
()
[]

表示原始公钥数据的字节数组。
name
类型： System String
应用程序的名称。
version
类型： System Version
Version 对象，用于指定应用程序的版本。
processorArchitecture
类型： System String
应用程序的处理器体系结构。
culture
类型： System String
应用程序的区域性。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - version 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - publicKeyToken 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | name 是空字符串。

构造函数初始化 ApplicationId 的 Culture、Name、ProcessorArchitecture、PublicKeyToken 和 Version 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationId 方法

ApplicationId 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationId 类

ApplicationId 类型公开以下成员。

名称 说明
页首

参考

ApplicationId 类
System 命名空间


ApplicationId ..::.Copy 方法

ApplicationId
.
.
::
.
Copy 方法
ApplicationId 类

创建并返回当前应用程序标识的相同副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Copy As ApplicationId
public ApplicationId Copy()
public:
ApplicationId^ Copy()
member Copy : unit -> ApplicationId

返回值

类型： System ApplicationId
ApplicationId 对象，表示与原件完全相同的副本。

由此方法返回的副本等于原件，这可由 Equals 方法证实。原件与副本的哈希代码也相等。 由此方法返回的副本等于原件，这可由 Equals 方法证实。原件与副本的哈希代码也相等。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationId ..::.Equals 方法

ApplicationId
.
.
::
.
Equals 方法
ApplicationId 类

确定指定的 ApplicationId 对象是否等效于当前 ApplicationId。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    o As Object _
) As Boolean
public override bool Equals(
    Object o
)
public:
virtual bool Equals(
    Object^ o
) override
abstract Equals :
        o:Object -> bool
override Equals :
        o:Object -> bool

参数

o
类型： System Object
要与当前 ApplicationId 进行比较的 ApplicationId 对象。

返回值

类型： System Boolean
如果指定的 ApplicationId 对象等效于当前 ApplicationId，则为 true；否则为 false。

此方法重写 Object..::.Equals(Object) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationId ..::.GetHashCode 方法

ApplicationId
.
.
::
.
GetHashCode 方法
ApplicationId 类

获取当前应用程序标识的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
当前应用程序标识的哈希代码。

此方法为具有相同的 Name 和 Version 属性值的两个对象生成相同的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationId ..::.ToString 方法

ApplicationId
.
.
::
.
ToString 方法
ApplicationId 类

创建并返回应用程序标识的字符串表示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
应用程序标识的字符串表示。

此方法重写 Object..::.ToString 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationId 属性

ApplicationId 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationId 类

ApplicationId 类型公开以下成员。

名称 说明
页首

参考

ApplicationId 类
System 命名空间


ApplicationId ..::.Culture 属性

ApplicationId
.
.
::
.
Culture 属性
ApplicationId 类

获取表示此应用程序的区域性信息的字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Culture As String
    Get
public string Culture { get; }
public:
property String^ Culture {
    String^ get ();
}
member Culture : string

属性值

类型： System String
应用程序的区域性信息。

Culture 值可以包含语言信息，例如“en-US”。

有关区域性值的信息，请参见 CultureInfo。

下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 Culture 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。 下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 Culture 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。

If Not (asi.ApplicationId.Culture Is Nothing) Then
    Console.WriteLine("ApplicationId.Culture property = " + _
    asi.ApplicationId.Culture.ToString())
End If

if (asi.ApplicationId.Culture != null)
    Console.WriteLine("ApplicationId.Culture property = " + asi.ApplicationId.Culture.ToString());

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationId ..::.Name 属性

ApplicationId
.
.
::
.
Name 属性
ApplicationId 类

获取应用程序的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Name As String
    Get
public string Name { get; }
public:
property String^ Name {
    String^ get ();
}
member Name : string

属性值

类型： System String
应用程序的名称。

Name 是应用程序的简单、非加密的名称。

下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 Name 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。 下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 Name 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。

Dim asi As New ApplicationSecurityInfo(AppDomain.CurrentDomain.ActivationContext)
Console.WriteLine("ApplicationId.Name property = " + asi.ApplicationId.Name)

ApplicationSecurityInfo asi = new ApplicationSecurityInfo(AppDomain.CurrentDomain.ActivationContext);

Console.WriteLine("ApplicationId.Name property = " + asi.ApplicationId.Name);

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationId ..::.ProcessorArchitecture 属性

ApplicationId
.
.
::
.
ProcessorArchitecture 属性
ApplicationId 类

获取应用程序的目标处理器体系结构。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ProcessorArchitecture As String
    Get
public string ProcessorArchitecture { get; }
public:
property String^ ProcessorArchitecture {
    String^ get ();
}
member ProcessorArchitecture : string

属性值

类型： System String
应用程序的处理器体系结构。

有效值包括“msil”、“x86”“ia64”和“amd64”。默认值是“msil”或 Microsoft 中间语言，这表示您的所有程序集都是与平台无关的，当您的应用程序需要这些程序集时，公共语言运行时将对它们进行编译。 有效值包括“msil”、“x86”“ia64”和“amd64”。默认值是“msil”或 Microsoft 中间语言，这表示您的所有程序集都是与平台无关的，当您的应用程序需要这些程序集时，公共语言运行时将对它们进行编译。

下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 ProcessorArchitecture 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。 下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 ProcessorArchitecture 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。

Console.WriteLine("ApplicationId.ProcessorArchitecture property = " + _
    asi.ApplicationId.ProcessorArchitecture)

Console.WriteLine("ApplicationId.ProcessorArchitecture property = " + asi.ApplicationId.ProcessorArchitecture);

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationId ..::.PublicKeyToken 属性

ApplicationId
.
.
::
.
PublicKeyToken 属性
ApplicationId 类

获取应用程序的公钥标记。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property PublicKeyToken As Byte()
    Get
public byte[] PublicKeyToken { get; }
public:
property array<unsigned char>^ PublicKeyToken {
    array<unsigned char>^ get ();
}
member PublicKeyToken : byte[]

属性值

类型：
array<
System Byte
>
[]
()
[]

一个包含应用程序的公钥标记的字节数组。

公钥标记由应用程序签名时所用公钥的 SHA-1 哈希代码的最后 8 个字节表示。

有关更多信息，请参见 AssemblyName..::.GetPublicKeyToken。

下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 PublicKeyToken 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。 下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 PublicKeyToken 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。

' To display the value of the public key, enumerate the Byte array for the property.
Console.Write("ApplicationId.PublicKeyToken property = ")
Dim pk As Byte() = asi.ApplicationId.PublicKeyToken
Dim i As Integer
For i = 0 To (pk.GetLength(0))
    Console.Write("{0:x}", pk(i))
Next i

// To display the value of the public key, enumerate the Byte array for the property.
Console.Write("ApplicationId.PublicKeyToken property = ");
byte[] pk = asi.ApplicationId.PublicKeyToken;
for (int i = 0; i < pk.GetLength(0); i++)
    Console.Write("{0:x}", pk[i]);

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationId ..::.Version 属性

ApplicationId
.
.
::
.
Version 属性
ApplicationId 类

获取应用程序的版本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Version As Version
    Get
public Version Version { get; }
public:
property Version^ Version {
    Version^ get ();
}
member Version : Version

属性值

类型： System Version
Version，用于指定应用程序的版本。

有关更多信息，请参见 System..::.Version。

下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 Version 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。 下面的代码示例通过从 ApplicationSecurityInfo 实例获取 ApplicationId 来显示 Version 属性，该实例是使用当前正在执行的基于清单的应用程序的 ActivationContext 创建的。此代码示例摘自一个为 ApplicationId 类提供的更大的示例。

Console.WriteLine("ApplicationId.Version property = " + _
    asi.ApplicationId.Version.ToString())

Console.WriteLine("ApplicationId.Version property = " + asi.ApplicationId.Version);

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationId 类
ApplicationId 成员
System 命名空间


ApplicationIdentity 类

ApplicationIdentity 类
成员

提供唯一标识清单激活的应用程序的能力。无法继承此类。 提供唯一标识清单激活的应用程序的能力。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(False)> _
Public NotInheritable Class ApplicationIdentity _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(false)]
public sealed class ApplicationIdentity : ISerializable
[SerializableAttribute]
[ComVisibleAttribute(false)]
public ref class ApplicationIdentity sealed : ISerializable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(false)>]
type ApplicationIdentity =
    class
        interface ISerializable
    end

ApplicationIdentity 类用于基于清单的应用程序的激活。

下面的代码示例演示如何使用 ActivationContext 对象来获取基于清单的应用程序的 ApplicationIdentity。此代码示例摘自一个为 ActivationContext 类提供的更大的示例。 下面的代码示例演示如何使用 ActivationContext 对象来获取基于清单的应用程序的 ApplicationIdentity。此代码示例摘自一个为 ActivationContext 类提供的更大的示例。

Dim ac As ActivationContext = AppDomain.CurrentDomain.ActivationContext
Dim ai As ApplicationIdentity = ac.Identity

ActivationContext ac = AppDomain.CurrentDomain.ActivationContext;
ApplicationIdentity ai = ac.Identity;

System System..::.ApplicationIdentityApplicationIdentity
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationIdentity 成员
System 命名空间


ApplicationIdentity 成员

ApplicationIdentity 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationIdentity 类

提供唯一标识清单激活的应用程序的能力。无法继承此类。 提供唯一标识清单激活的应用程序的能力。无法继承此类。

ApplicationIdentity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ApplicationIdentity 类
System 命名空间


ApplicationIdentity 构造函数

ApplicationIdentity 构造函数
ApplicationIdentity 类

初始化 ApplicationIdentity 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    applicationIdentityFullName As String _
)
public ApplicationIdentity(
    string applicationIdentityFullName
)
public:
ApplicationIdentity(
    String^ applicationIdentityFullName
)
new :
        applicationIdentityFullName:string -> ApplicationIdentity

参数

applicationIdentityFullName
类型： System String
应用程序的全名。
异常 | 条件
ArgumentNullException | applicationIdentityFullName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

applicationIdentityFullName 参数的格式是以名称开头并由逗号分隔的 Unicode 字符串，如下所示：

applicationURL#deploymentIdentity\applicationIdentity

其中 deploymentIdentity =

deploymentManifest, Version = Major.Minor.Build.Revision, Culture = CultureInfo, PublicKeyToken=TokenNumber, processorArchitecture=processorArchitecture

并且 applicationIdentity =

applicationName, Version = Major.Minor.Build.Revision, Culture = CultureInfo, PublicKeyToken=TokenNumber, processorArchitecture=processorArchitecture, type=OsType

下面是一个名为 ActivationContext 的应用程序的全名示例：

http://testserver/ActivationContext/ActivationContext.application
#ActivationContext.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ae13aad84c1a3490, processorArchitecture=msil
\ActivationContext.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ae13aad84c1a3490, processorArchitecture=msil, type=win32

处理器架构的默认值为“msil”，类型的默认值为“win32”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationIdentity 类
ApplicationIdentity 成员
System 命名空间


ApplicationIdentity 方法

ApplicationIdentity 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationIdentity 类

ApplicationIdentity 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ApplicationIdentity 类
System 命名空间


ApplicationIdentity ..::.ISerializable ..::.GetObjectData 方法

ApplicationIdentity
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
ApplicationIdentity 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

使用序列化目标对象所需的数据填充 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
private:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
private override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要填充数据的 SerializationInfo。
context
类型： System.Runtime.Serialization StreamingContext
序列化的 StreamingContext 结构。

实现

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationIdentity 类
ApplicationIdentity 成员
System 命名空间


ApplicationIdentity ..::.ToString 方法

ApplicationIdentity
.
.
::
.
ToString 方法
ApplicationIdentity 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

返回清单激活的应用程序的全名。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
清单激活的应用程序的全名。

有关清单激活的应用程序的全名格式的说明，请参见 ApplicationIdentity 构造函数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationIdentity 类
ApplicationIdentity 成员
System 命名空间


ApplicationIdentity 属性

ApplicationIdentity 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ApplicationIdentity 类

ApplicationIdentity 类型公开以下成员。

名称 说明
页首

参考

ApplicationIdentity 类
System 命名空间


ApplicationIdentity ..::.CodeBase 属性

ApplicationIdentity
.
.
::
.
CodeBase 属性
ApplicationIdentity 类

获取作为 URL 的部署清单的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property CodeBase As String
    Get
public string CodeBase { get; }
public:
property String^ CodeBase {
    String^ get ();
}
member CodeBase : string

属性值

类型： System String
部署清单的 URL。

以下是一个名为 ActivationContext 的应用程序的 CodeBase 属性值的两个示例：

  • http://testserver/ActivationContext/ActivationContext.application

  • file://C:/UserFiles/UserName/SolutionName/ActivationContext/publish/ActivationContext.application。

下面的代码示例演示如何使用 ApplicationIdentity 对象来获取基于清单的应用程序的 CodeBase 属性的值。此代码示例摘自一个为 ActivationContext 类提供的更大的示例。 下面的代码示例演示如何使用 ApplicationIdentity 对象来获取基于清单的应用程序的 CodeBase 属性的值。此代码示例摘自一个为 ActivationContext 类提供的更大的示例。

Dim ac As ActivationContext = AppDomain.CurrentDomain.ActivationContext
Dim ai As ApplicationIdentity = ac.Identity
Console.WriteLine("Full name = " + ai.FullName)
Console.WriteLine("Code base = " + ai.CodeBase)

ActivationContext ac = AppDomain.CurrentDomain.ActivationContext;
ApplicationIdentity ai = ac.Identity;
Console.WriteLine("Full name = " + ai.FullName);
Console.WriteLine("Code base = " + ai.CodeBase);

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationIdentity 类
ApplicationIdentity 成员
System 命名空间


ApplicationIdentity ..::.FullName 属性

ApplicationIdentity
.
.
::
.
FullName 属性
ApplicationIdentity 类

获取应用程序的全名。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property FullName As String
    Get
public string FullName { get; }
public:
property String^ FullName {
    String^ get ();
}
member FullName : string

属性值

类型： System String
应用程序的全名，也称为显示名称。

有关 FullName 属性的格式的说明，请参见 ApplicationIdentity 构造函数。

下面的代码示例演示如何使用 ApplicationIdentity 对象来获取基于清单的应用程序的 FullName 属性的值。此代码示例摘自一个为 ActivationContext 类提供的更大的示例。 下面的代码示例演示如何使用 ApplicationIdentity 对象来获取基于清单的应用程序的 FullName 属性的值。此代码示例摘自一个为 ActivationContext 类提供的更大的示例。

Dim ac As ActivationContext = AppDomain.CurrentDomain.ActivationContext
Dim ai As ApplicationIdentity = ac.Identity
Console.WriteLine("Full name = " + ai.FullName)
Console.WriteLine("Code base = " + ai.CodeBase)

ActivationContext ac = AppDomain.CurrentDomain.ActivationContext;
ApplicationIdentity ai = ac.Identity;
Console.WriteLine("Full name = " + ai.FullName);
Console.WriteLine("Code base = " + ai.CodeBase);

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ApplicationIdentity 类
ApplicationIdentity 成员
System 命名空间


ArgIterator 结构

ArgIterator 结构
成员

表示变长参数列表；即采用可变数量的参数的函数的参数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Structure ArgIterator
public struct ArgIterator
public value class ArgIterator
[<SealedAttribute>]
type ArgIterator =  struct end

编写编译器的开发人员使用 ArgIterator 结构枚举参数列表中的强制参数和可选参数。ArgIterator 结构对编译器以外的应用程序通常没有多大用处。 编写编译器的开发人员使用 ArgIterator 结构枚举参数列表中的强制参数和可选参数。ArgIterator 结构对编译器以外的应用程序通常没有多大用处。

ArgIterator 结构中的功能通常隐藏在特定编程语言的语法中。例如，在 C++ 编程语言中，通过在参数列表的末尾指定省略号（“...”）来声明变长参数列表。ArgIterator 结构主要用于开发语言不直接支持访问变长参数的情况。 ArgIterator 结构中的功能通常隐藏在特定编程语言的语法中。例如，在 C++ 编程语言中，通过在参数列表的末尾指定省略号（“...”）来声明变长参数列表。ArgIterator 结构主要用于开发语言不直接支持访问变长参数的情况。 ArgIterator 结构中的功能通常隐藏在特定编程语言的语法中。例如，在 C++ 编程语言中，通过在参数列表的末尾指定省略号（“...”）来声明变长参数列表。ArgIterator 结构主要用于开发语言不直接支持访问变长参数的情况。

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 成员
System 命名空间


ArgIterator 成员

ArgIterator 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgIterator 结构

表示变长参数列表；即采用可变数量的参数的函数的参数。

ArgIterator 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ArgIterator 结构
System 命名空间


ArgIterator 构造函数

ArgIterator 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgIterator 结构

初始化 ArgIterator 结构的新实例。

名称 说明
页首

参考

ArgIterator 结构
ArgIterator 成员
System 命名空间


ArgIterator 构造函数 (RuntimeArgumentHandle)

ArgIterator 构造函数 (RuntimeArgumentHandle)
ArgIterator 结构

使用指定的参数列表初始化 ArgIterator 结构的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    arglist As RuntimeArgumentHandle _
)
public ArgIterator(
    RuntimeArgumentHandle arglist
)
public:
ArgIterator(
    RuntimeArgumentHandle arglist
)
new :
        arglist:RuntimeArgumentHandle -> ArgIterator

参数

arglist
类型： System RuntimeArgumentHandle
一个由强制参数和可选参数组成的参数列表。

新的 ArgIterator 对象从第一个可选参数开始枚举参数列表。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 结构
ArgIterator 成员
ArgIterator 重载
System 命名空间


ArgIterator 构造函数 (RuntimeArgumentHandle, Void*)

ArgIterator 构造函数 (RuntimeArgumentHandle, Void*)
ArgIterator 结构

使用指定的参数列表和指向列表项的指针来初始化 ArgIterator 结构的新实例。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用或返回不安全类型的 API。
[CLSCompliantAttribute(false)]
public ArgIterator(
    RuntimeArgumentHandle arglist,
    void* ptr
)
[CLSCompliantAttribute(false)]
public:
ArgIterator(
    RuntimeArgumentHandle arglist,
    void* ptr
)
[<CLSCompliantAttribute(false)>]
new :
        arglist:RuntimeArgumentHandle *
        ptr:nativeptr<unit> -> ArgIterator

参数

arglist
类型： System RuntimeArgumentHandle
一个由强制参数和可选参数组成的参数列表。
ptr
类型： System Void*
一个指针，它指向首先访问的 arglist 中的参数，或者如果 ptr 为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则指向 arglist 中的第一个强制参数。

新的 ArgIterator 对象从 ptr 指定的参数开始枚举参数列表，如果 ptr 为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则从第一个强制参数开始枚举。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 结构
ArgIterator 成员
ArgIterator 重载
System 命名空间


ArgIterator 方法

ArgIterator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgIterator 结构

ArgIterator 类型公开以下成员。

名称 说明
页首

参考

ArgIterator 结构
System 命名空间


ArgIterator ..::.End 方法

ArgIterator
.
.
::
.
End 方法
ArgIterator 结构

结束由此实例表示的变长参数列表的处理。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub End
public void End()
public:
void End()
member End : unit -> unit

从概念上说，End 结束变长参数列表的处理。但是，此方法没有实际的实现，End 方法体是空的。您可以在代码中将此方法用作标记，以指示变长参数列表在何处逻辑结束。 从概念上说，End 结束变长参数列表的处理。但是，此方法没有实际的实现，End 方法体是空的。您可以在代码中将此方法用作标记，以指示变长参数列表在何处逻辑结束。 从概念上说，End 结束变长参数列表的处理。但是，此方法没有实际的实现，End 方法体是空的。您可以在代码中将此方法用作标记，以指示变长参数列表在何处逻辑结束。

End 方法与 C 标准库中的 va_end 方法相对应。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 结构
ArgIterator 成员
System 命名空间


ArgIterator ..::.Equals 方法

ArgIterator
.
.
::
.
Equals 方法
ArgIterator 结构

此方法不受支持，它始终会引发 NotSupportedException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    o As Object _
) As Boolean
public override bool Equals(
    Object o
)
public:
virtual bool Equals(
    Object^ o
) override
abstract Equals :
        o:Object -> bool
override Equals :
        o:Object -> bool

参数

o
类型： System Object
要与该实例进行比较的对象。

返回值

类型： System Boolean
不支持此比较。不返回任何值。 不支持此比较。不返回任何值。
异常 | 条件
NotSupportedException | 不支持此方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 结构
ArgIterator 成员
System 命名空间


ArgIterator ..::.GetHashCode 方法

ArgIterator
.
.
::
.
GetHashCode 方法
ArgIterator 结构

返回该对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 结构
ArgIterator 成员
System 命名空间


ArgIterator ..::.GetNextArg 方法

ArgIterator
.
.
::
.
GetNextArg 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgIterator 结构

返回变长参数列表中的下一参数。

名称 说明
页首

参考

ArgIterator 结构
ArgIterator 成员
System 命名空间


ArgIterator ..::.GetNextArg 方法

ArgIterator
.
.
::
.
GetNextArg 方法
ArgIterator 结构

返回变长参数列表中的下一参数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Function GetNextArg As TypedReference
[CLSCompliantAttribute(false)]
public TypedReference GetNextArg()
[CLSCompliantAttribute(false)]
public:
TypedReference GetNextArg()
[<CLSCompliantAttribute(false)>]
member GetNextArg : unit -> TypedReference

返回值

类型： System TypedReference
作为 TypedReference 对象的下一参数。
异常 | 条件
InvalidOperationException | 尝试在列表结尾以外进行读取。

迭代程序自动前进到下一参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 结构
ArgIterator 成员
GetNextArg 重载
System 命名空间


ArgIterator ..::.GetNextArg 方法 (RuntimeTypeHandle)

ArgIterator
.
.
::
.
GetNextArg 方法 (RuntimeTypeHandle)
ArgIterator 结构

返回变长参数列表中具有指定类型的下一个参数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Function GetNextArg ( _
    rth As RuntimeTypeHandle _
) As TypedReference
[CLSCompliantAttribute(false)]
public TypedReference GetNextArg(
    RuntimeTypeHandle rth
)
[CLSCompliantAttribute(false)]
public:
TypedReference GetNextArg(
    RuntimeTypeHandle rth
)
[<CLSCompliantAttribute(false)>]
member GetNextArg :
        rth:RuntimeTypeHandle -> TypedReference

参数

rth
类型： System RuntimeTypeHandle
标识要检索的参数类型的运行时类型句柄。

返回值

类型： System TypedReference
作为 TypedReference 对象的下一参数。
异常 | 条件
InvalidOperationException | 尝试在列表结尾以外进行读取。
ArgumentNullException | 其余参数的指针为零。

迭代程序自动前进到下一参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 结构
ArgIterator 成员
GetNextArg 重载
System 命名空间


ArgIterator ..::.GetNextArgType 方法

ArgIterator
.
.
::
.
GetNextArgType 方法
ArgIterator 结构

返回下一个参数的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetNextArgType As RuntimeTypeHandle
public RuntimeTypeHandle GetNextArgType()
public:
RuntimeTypeHandle GetNextArgType()
member GetNextArgType : unit -> RuntimeTypeHandle

返回值

类型： System RuntimeTypeHandle
下一个参数的类型。

此方法不会使迭代程序前进到下一个参数。

GetNextArgType 按照调用函数中的指定返回参数类型。例如，如果参数类型为 String，但是调用参数指定该参数为 Object 类型，则 GetNextArgType 将该参数报告为 Object 类型。 GetNextArgType 按照调用函数中的指定返回参数类型。例如，如果参数类型为 String，但是调用参数指定该参数为 Object 类型，则 GetNextArgType 将该参数报告为 Object 类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 结构
ArgIterator 成员
System 命名空间


ArgIterator ..::.GetRemainingCount 方法

ArgIterator
.
.
::
.
GetRemainingCount 方法
ArgIterator 结构

返回参数列表中剩余参数的个数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetRemainingCount As Integer
public int GetRemainingCount()
public:
int GetRemainingCount()
member GetRemainingCount : unit -> int

返回值

类型： System Int32
剩余参数的个数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgIterator 结构
ArgIterator 成员
System 命名空间


ArgumentException 类

ArgumentException 类
成员

在向方法提供的其中一个参数无效时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ArgumentException _
    Inherits SystemException _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ArgumentException : SystemException,
    ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ArgumentException : public SystemException,
    ISerializable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ArgumentException =
    class
        inherit SystemException
        interface ISerializable
    end

在调用某方法但传递的参数中至少有一个不符合所调用方法的参数规范时，将引发 ArgumentException。ArgumentException 的所有实例均应带有有意义的错误消息，描述无效参数以及该参数所需的值范围。 在调用某方法但传递的参数中至少有一个不符合所调用方法的参数规范时，将引发 ArgumentException。ArgumentException 的所有实例均应带有有意义的错误消息，描述无效参数以及该参数所需的值范围。

ArgumentException 的主要派生类有 ArgumentNullException 和 ArgumentOutOfRangeException。应使用这两种派生类取代 ArgumentException，除非这两种派生类都不被接受。例如： ArgumentException 的主要派生类有 ArgumentNullException 和 ArgumentOutOfRangeException。应使用这两种派生类取代 ArgumentException，除非这两种派生类都不被接受。例如： ArgumentException 的主要派生类有 ArgumentNullException 和 ArgumentOutOfRangeException。应使用这两种派生类取代 ArgumentException，除非这两种派生类都不被接受。例如：

  • 每当向方法传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 而该方法不把它作为有效参数接受时，应由 ArgumentNullException 引发异常。

  • 当参数值超出可接受值的范围（例如，在创建 DateTime 时将值“46”作为月份参数传递）时，应由 ArgumentOutOfRangeException 引发异常。

如果方法调用没有任何参数，或者失败未涉及参数本身，则应当使用 InvalidOperationException 引发异常。

ArgumentException 使用值为 0x80070057 的 HRESULT COR_E_ARGUMENT。

有关 ArgumentException 实例的初始属性值列表，请参见 ArgumentException 构造函数。

下面的示例演示如何引发和捕捉 ArgumentException。

Public Class App
    Public Shared Sub Main()
        ' ArgumentException is not thrown because 10 is an even number.
        Console.WriteLine("10 divided by 2 is {0}", DivideByTwo(10))
        Try
            ' ArgumentException is thrown because 7 is not an even number.
            Console.WriteLine("7 divided by 2 is {0}", DivideByTwo(7))
        Catch Ex As ArgumentException
            ' Show the user that 7 cannot be divided by 2.
            Console.WriteLine("7 is not divided by 2 integrally.")
        End Try
    End Sub

    Private Shared Function DivideByTwo(ByVal num As Integer) As Integer
        ' If num is an odd number, throw an ArgumentException.
        If ((num And 1)  _
                    = 1) Then
            Throw New ArgumentException("Number must be even", "num")
        End If
        Return (num / 2)
    End Function
End Class
' This code produces the following output.
'
' 10 divided by 2 is 5
' 7 is not divided by 2 integrally.

using System;

public sealed class App
{
    static void Main()
    {
        // ArgumentException is not thrown because 10 is an even number.
        Console.WriteLine("10 divided by 2 is {0}", DivideByTwo(10));
        try
        {
             // ArgumentException is thrown because 7 is not an even number.
             Console.WriteLine("7 divided by 2 is {0}", DivideByTwo(7));
        }
        catch (ArgumentException)
        {
            // Show the user that 7 cannot be divided by 2.
            Console.WriteLine("7 is not divided by 2 integrally.");
        }
    }

    static int DivideByTwo(int num)
    {
        // If num is an odd number, throw an ArgumentException.
        if ((num & 1) == 1)
            throw new ArgumentException("Number must be even", "num");

        // num is even, return half of its value.
        return num / 2;
    }
}

// This code produces the following output.
//
// 10 divided by 2 is 5
// 7 is not divided by 2 integrally.

using namespace System;

int DivideByTwo(int num)
{
    // If num is an odd number, throw an ArgumentException.
    if ((num & 1) == 1)
    {
        throw gcnew ArgumentException("Number must be even", "num");
    }
    // num is even, return half of its value.
    return num / 2;
}

int main()
{
    // ArgumentException is not thrown because 10 is an even number.
    Console::WriteLine("10 divided by 2 is {0}", DivideByTwo(10));
    try
    {
        // ArgumentException is thrown because 7 is not an even number.
        Console::WriteLine("7 divided by 2 is {0}", DivideByTwo(7));
    }
    catch (ArgumentException^)
    {
        // Show the user that 7 cannot be divided by 2.
        Console::WriteLine("7 is not divided by 2 integrally.");
    }
}

// This code produces the following output.
//
// 10 divided by 2 is 5
// 7 is not divided by 2 integrally.

System System..::.ArgumentExceptionArgumentException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentException 成员
System 命名空间
Exception

其他资源

处理和引发异常


ArgumentException 成员

ArgumentException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentException 类

在向方法提供的其中一个参数无效时引发的异常。

ArgumentException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ArgumentException 类
System 命名空间


ArgumentException 构造函数

ArgumentException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentException 类

初始化 ArgumentException 类的一个新实例。

名称 说明
页首

参考

ArgumentException 类
ArgumentException 成员
System 命名空间


ArgumentException 构造函数

ArgumentException 构造函数
ArgumentException 类

初始化 ArgumentException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ArgumentException()
public:
ArgumentException()
new : unit -> ArgumentException

此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“指定的参数无效”。此消息将考虑当前系统区域性。

下表显示 ArgumentException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误信息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentException 类
ArgumentException 成员
ArgumentException 重载
System 命名空间


ArgumentException 构造函数 (String)

ArgumentException 构造函数 (String)
ArgumentException 类

使用指定错误消息初始化 ArgumentException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public ArgumentException(
    string message
)
public:
ArgumentException(
    String^ message
)
new :
        message:string -> ArgumentException

参数

message
类型： System String
解释异常原因的错误消息。

此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“指定的参数无效”。此消息将考虑当前系统区域性。

下表显示 ArgumentException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentException 类
ArgumentException 成员
ArgumentException 重载
System 命名空间


ArgumentException 构造函数 (SerializationInfo, StreamingContext)

ArgumentException 构造函数 (SerializationInfo, StreamingContext)
ArgumentException 类

用序列化数据初始化 ArgumentException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ArgumentException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ArgumentException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ArgumentException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。 在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentException 类
ArgumentException 成员
ArgumentException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


ArgumentException 构造函数 (String, Exception)

ArgumentException 构造函数 (String, Exception)
ArgumentException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 ArgumentException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ArgumentException(
    string message,
    Exception innerException
)
public:
ArgumentException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ArgumentException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。

此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 ArgumentException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentException 类
ArgumentException 成员
ArgumentException 重载
System 命名空间
Exception

其他资源

处理和引发异常


ArgumentException 构造函数 (String, String)

ArgumentException 构造函数 (String, String)
ArgumentException 类

使用指定错误消息和导致此异常的参数的名称来初始化 ArgumentException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    paramName As String _
)
public ArgumentException(
    string message,
    string paramName
)
public:
ArgumentException(
    String^ message,
    String^ paramName
)
new :
        message:string *
        paramName:string -> ArgumentException

参数

message
类型： System String
解释异常原因的错误消息。
paramName
类型： System String
导致当前异常的参数的名称。

此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

此构造函数使用 paramName 初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。 此构造函数使用 paramName 初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。

下表显示 ArgumentException 实例的初始属性值。

Property | Value
Message | 错误消息字符串。
ParamName | 参数名字符串。

下面的代码示例演示如何调用 ArgumentException 构造函数。此代码示例摘自一个为 ArgumentException 类提供的更大的示例。 下面的代码示例演示如何调用 ArgumentException 构造函数。此代码示例摘自一个为 ArgumentException 类提供的更大的示例。

static int DivideByTwo(int num)
{
    // If num is an odd number, throw an ArgumentException.
    if ((num & 1) == 1)
        throw new ArgumentException("Number must be even", "num");

    // num is even, return half of its value.
    return num / 2;
}

int DivideByTwo(int num)
{
    // If num is an odd number, throw an ArgumentException.
    if ((num & 1) == 1)
    {
        throw gcnew ArgumentException("Number must be even", "num");
    }
    // num is even, return half of its value.
    return num / 2;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentException 类
ArgumentException 成员
ArgumentException 重载
System 命名空间


ArgumentException 构造函数 (String, String, Exception)

ArgumentException 构造函数 (String, String, Exception)
ArgumentException 类

使用指定错误消息、参数名和对内部异常（为该异常根源）的引用来初始化 ArgumentException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    paramName As String, _
    innerException As Exception _
)
public ArgumentException(
    string message,
    string paramName,
    Exception innerException
)
public:
ArgumentException(
    String^ message,
    String^ paramName,
    Exception^ innerException
)
new :
        message:string *
        paramName:string *
        innerException:Exception -> ArgumentException

参数

message
类型： System String
解释异常原因的错误消息。
paramName
类型： System String
导致当前异常的参数的名称。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。

此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

此构造函数使用 paramName 初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。 此构造函数使用 paramName 初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 ArgumentException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。
ParamName | 参数名字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentException 类
ArgumentException 成员
ArgumentException 重载
System 命名空间
Exception

其他资源

处理和引发异常


ArgumentException 方法

ArgumentException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentException 类

ArgumentException 类型公开以下成员。

名称 说明
页首

参考

ArgumentException 类
System 命名空间


ArgumentException ..::.GetObjectData 方法

ArgumentException
.
.
::
.
GetObjectData 方法
ArgumentException 类

设置带有参数名和附加异常信息的 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

实现

异常 | 条件
ArgumentNullException | info 对象是空引用（在 Visual Basic 中为 Nothing）。

GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。 GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。

有关更多信息，请参见 SerializationInfo。

  • SecurityPermission

    用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand 用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentException 类
ArgumentException 成员
System 命名空间
SerializationInfo

其他资源

[<topic://cpconSerialization>]


ArgumentException 属性

ArgumentException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentException 类

ArgumentException 类型公开以下成员。

名称 说明
页首

参考

ArgumentException 类
System 命名空间


ArgumentException ..::.Message 属性

ArgumentException
.
.
::
.
Message 属性
ArgumentException 类

获取错误消息和参数名；如果未设置参数名，则仅获取错误消息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property Message As String Get
public override string Message { get; }
public:
virtual property String^ Message {
    String^ get () override;
}
abstract Message : string override Message : string
属性值
类型： System String
描述异常的详细信息的文本字符串。
此属性的值采用以下两种形式之一：
描述异常的详细信息的文本字符串。
此属性的值采用以下两种形式之一：
条件
值
paramName
是空引用（在 Visual Basic 中为
Nothing
）或长度为零。
传递到构造函数的
message
字符串。
paramName
不是空引用（在 Visual Basic 中为
Nothing
）并且长度大于零。
附有无效参数名的
message
字符串。
实现

此属性重写 Message。应本地化错误消息。 此属性重写 Message。应本地化错误消息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentException 类
ArgumentException 成员
System 命名空间


ArgumentException ..::.ParamName 属性

ArgumentException
.
.
::
.
ParamName 属性
ArgumentException 类

获取导致该异常的参数的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property ParamName As String
    Get
public virtual string ParamName { get; }
public:
virtual property String^ ParamName {
    String^ get ();
}
abstract ParamName : string
override ParamName : string

属性值

类型： System String
参数名。

每一 ArgumentException 都应带有导致该异常的参数的名称。

此属性是只读的，它返回的值与传递到构造函数中的值相同。重写方法只应用于自定义参数名的格式。 此属性是只读的，它返回的值与传递到构造函数中的值相同。重写方法只应用于自定义参数名的格式。

不能为了本地化目地翻译参数名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentException 类
ArgumentException 成员
System 命名空间


ArgumentException 事件

ArgumentException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentException 类

ArgumentException 类型公开以下成员。

名称 说明
页首

参考

ArgumentException 类
System 命名空间


ArgumentNullException 类

ArgumentNullException 类
成员

当将空引用（在 Visual Basic 中为 Nothing）传递给不接受它作为有效参数的方法时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ArgumentNullException _
    Inherits ArgumentException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ArgumentNullException : ArgumentException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ArgumentNullException : public ArgumentException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ArgumentNullException =
    class
        inherit ArgumentException
    end

ArgumentNullException 的引发条件为：调用某种方法时所传递的参数中，至少有一个在任何情况下都不应为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

ArgumentNullException 的行为与 ArgumentException 相同。提供它的目的在于使应用程序代码可区分空参数导致的异常以及非空参数导致的异常。有关非空参数导致的错误，请参见 ArgumentOutOfRangeException。 ArgumentNullException 的行为与 ArgumentException 相同。提供它的目的在于使应用程序代码可区分空参数导致的异常以及非空参数导致的异常。有关非空参数导致的错误，请参见 ArgumentOutOfRangeException。 ArgumentNullException 的行为与 ArgumentException 相同。提供它的目的在于使应用程序代码可区分空参数导致的异常以及非空参数导致的异常。有关非空参数导致的错误，请参见 ArgumentOutOfRangeException。

ArgumentNullException 使用值为 0x80004003 的 HRESULT E_POINTER。

有关 ArgumentNullException 实例的初始属性值列表，请参见 ArgumentNullException 构造函数。

System System..::.ArgumentNullExceptionArgumentNullException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentNullException 成员
System 命名空间
Exception

其他资源

处理和引发异常


ArgumentNullException 成员

ArgumentNullException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentNullException 类

当将空引用（在 Visual Basic 中为 Nothing）传递给不接受它作为有效参数的方法时引发的异常。

ArgumentNullException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ArgumentNullException 类
System 命名空间


ArgumentNullException 构造函数

ArgumentNullException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentNullException 类

初始化 ArgumentNullException 类的新实例。

名称 说明
页首

参考

ArgumentNullException 类
ArgumentNullException 成员
System 命名空间


ArgumentNullException 构造函数

ArgumentNullException 构造函数
ArgumentNullException 类

初始化 ArgumentNullException 类的一个新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ArgumentNullException()
public:
ArgumentNullException()
new : unit -> ArgumentNullException

此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“参数不能为空”。此消息将考虑当前系统区域性。

下表显示 ArgumentNullException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误信息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentNullException 类
ArgumentNullException 成员
ArgumentNullException 重载
System 命名空间


ArgumentNullException 构造函数 (String)

ArgumentNullException 构造函数 (String)
ArgumentNullException 类

使用导致此异常的参数的名称初始化 ArgumentNullException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    paramName As String _
)
public ArgumentNullException(
    string paramName
)
public:
ArgumentNullException(
    String^ paramName
)
new :
        paramName:string -> ArgumentNullException

参数

paramName
类型： System String
导致异常的参数的名称。

此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“参数不能为空”。此消息将考虑当前系统区域性。

此构造函数用 paramName 参数初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。 此构造函数用 paramName 参数初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。

下表显示 ArgumentNullException 实例的初始属性值。

Property | Value
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 空字符串 ("")。
ParamName | 参数名字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentNullException 类
ArgumentNullException 成员
ArgumentNullException 重载
System 命名空间


ArgumentNullException 构造函数 (SerializationInfo, StreamingContext)

ArgumentNullException 构造函数 (SerializationInfo, StreamingContext)
ArgumentNullException 类

用序列化数据初始化 ArgumentNullException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ArgumentNullException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ArgumentNullException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ArgumentNullException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
对象，描述序列化数据的源或目标。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

  • SecurityPermission

    用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand 用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentNullException 类
ArgumentNullException 成员
ArgumentNullException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


ArgumentNullException 构造函数 (String, Exception)

ArgumentNullException 构造函数 (String, Exception)
ArgumentNullException 类

使用指定的错误消息和引发此异常的异常初始化 ArgumentNullException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ArgumentNullException(
    string message,
    Exception innerException
)
public:
ArgumentNullException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ArgumentNullException

参数

message
类型： System String
说明发生此异常的原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentNullException 类
ArgumentNullException 成员
ArgumentNullException 重载
System 命名空间


ArgumentNullException 构造函数 (String, String)

ArgumentNullException 构造函数 (String, String)
ArgumentNullException 类

使用指定的错误消息和导致此异常的参数的名称来初始化 ArgumentNullException 类的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    paramName As String, _
    message As String _
)
public ArgumentNullException(
    string paramName,
    string message
)
public:
ArgumentNullException(
    String^ paramName,
    String^ message
)
new :
        paramName:string *
        message:string -> ArgumentNullException

参数

paramName
类型： System String
导致异常的参数的名称。
message
类型： System String
描述错误的消息。

此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

此构造函数用 paramName 参数初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。 此构造函数用 paramName 参数初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。

下表显示 ArgumentNullException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。
ParamName | 参数名字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentNullException 类
ArgumentNullException 成员
ArgumentNullException 重载
System 命名空间


ArgumentNullException 方法

ArgumentNullException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentNullException 类

ArgumentNullException 类型公开以下成员。

名称 说明
页首

参考

ArgumentNullException 类
System 命名空间


ArgumentNullException 属性

ArgumentNullException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentNullException 类

ArgumentNullException 类型公开以下成员。

名称 说明
页首

参考

ArgumentNullException 类
System 命名空间


ArgumentNullException 事件

ArgumentNullException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentNullException 类

ArgumentNullException 类型公开以下成员。

名称 说明
页首

参考

ArgumentNullException 类
System 命名空间


ArgumentOutOfRangeException 类

ArgumentOutOfRangeException 类
成员

当参数值超出调用的方法所定义的允许取值范围时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ArgumentOutOfRangeException _
    Inherits ArgumentException _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ArgumentOutOfRangeException : ArgumentException,
    ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ArgumentOutOfRangeException : public ArgumentException,
    ISerializable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ArgumentOutOfRangeException =
    class
        inherit ArgumentException
        interface ISerializable
    end

当调用某个方法时，如果在传递给该方法的参数中至少有一个不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 且不包含有效值，则将引发 ArgumentOutOfRangeException。

ArgumentOutOfRangeException 为以下类所广泛使用：

  • System.Collections 和 System.IO 命名空间中的类。

  • Array 类。

ArgumentOutOfRangeException 的行为与 ArgumentException 相同。提供该类的目的是：应用程序代码可以区分由不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的无效参数引起的异常以及 null 参数引起的异常。有关 null 参数引起的错误，请参见 ArgumentNullException。 ArgumentOutOfRangeException 的行为与 ArgumentException 相同。提供该类的目的是：应用程序代码可以区分由不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的无效参数引起的异常以及 null 参数引起的异常。有关 null 参数引起的错误，请参见 ArgumentNullException。 ArgumentOutOfRangeException 的行为与 ArgumentException 相同。提供该类的目的是：应用程序代码可以区分由不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的无效参数引起的异常以及 null 参数引起的异常。有关 null 参数引起的错误，请参见 ArgumentNullException。

ArgumentOutOfRangeException 使用值为 0x80131502 的 HRESULT COR_E_ARGUMENTOUTOFRANGE。

有关 ArgumentOutOfRangeException 实例的初始属性值列表，请参见 ArgumentOutOfRangeException 构造函数。

下面的示例定义了一个类，并在类中包含有关受邀请来宾的信息。如果来宾小于 21 岁，则会引发 ArgumentOutOfRangeException 异常。 下面的示例定义了一个类，并在类中包含有关受邀请来宾的信息。如果来宾小于 21 岁，则会引发 ArgumentOutOfRangeException 异常。

Imports System

Module Module1

Public Sub Main()
    Try
        Dim guest1 As Guest = New Guest("Ben", "Miller", 17)
        Console.WriteLine(guest1.GuestInfo)
    Catch outOfRange As Exception
        Console.WriteLine("Error: {0}", outOfRange.Message)
    End Try
End Sub

Class Guest

    Private FirstName As String
    Private LastName As String

    Private Age As Integer

    Public Sub New(ByVal fName As String, ByVal lName As String, ByVal age As Integer)
        MyBase.New()
        FirstName = fName
        LastName = lName
        If (age < 21) Then
            Throw New ArgumentOutOfRangeException("age", "All guests must be 21-years-old or older.")
        Else
            age = age
        End If
    End Sub

    Public Function GuestInfo() As String
        Dim gInfo As String = (FirstName + (" " _
                    + (Me.LastName + (", " + Me.Age.ToString))))
        Return gInfo
    End Function
End Class

End Module

using System;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Guest guest1 = new Guest("Ben", "Miller", 17);
            Console.WriteLine(guest1.GuestInfo());
        }
        catch (ArgumentOutOfRangeException outOfRange)
        {

            Console.WriteLine("Error: {0}", outOfRange.Message);
        }
    }
}

class Guest
{
    private string FirstName;
    private string LastName;
    private int Age;

    public Guest(string fName, string lName, int age)
    {
        FirstName = fName;
        LastName = lName;
        if (age < 21)
            throw new ArgumentOutOfRangeException("age","All guests must be 21-years-old or older.");
        else
            Age = age;
    }

    public string GuestInfo()
    {
        string gInfo = FirstName + " " + LastName + ", " + Age.ToString();
        return(gInfo);
    }
}

System System..::.ArgumentOutOfRangeExceptionArgumentOutOfRangeException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentOutOfRangeException 成员
System 命名空间
Exception

其他资源

处理和引发异常


ArgumentOutOfRangeException 成员

ArgumentOutOfRangeException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentOutOfRangeException 类

当参数值超出调用的方法所定义的允许取值范围时引发的异常。

ArgumentOutOfRangeException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ArgumentOutOfRangeException 类
System 命名空间


ArgumentOutOfRangeException 构造函数

ArgumentOutOfRangeException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentOutOfRangeException 类

初始化 ArgumentOutOfRangeException 类的新实例。

名称 说明
页首

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
System 命名空间


ArgumentOutOfRangeException 构造函数

ArgumentOutOfRangeException 构造函数
ArgumentOutOfRangeException 类

初始化 ArgumentOutOfRangeException 类的一个新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ArgumentOutOfRangeException()
public:
ArgumentOutOfRangeException()
new : unit -> ArgumentOutOfRangeException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“必须为非负数”。此消息将考虑当前系统区域性。

下表显示 ArgumentOutOfRangeException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误信息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
ArgumentOutOfRangeException 重载
System 命名空间


ArgumentOutOfRangeException 构造函数 (String)

ArgumentOutOfRangeException 构造函数 (String)
ArgumentOutOfRangeException 类

使用导致此异常的参数的名称初始化 ArgumentOutOfRangeException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    paramName As String _
)
public ArgumentOutOfRangeException(
    string paramName
)
public:
ArgumentOutOfRangeException(
    String^ paramName
)
new :
        paramName:string -> ArgumentOutOfRangeException

参数

paramName
类型： System String
导致此异常的参数的名称。

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“必须为非负数”。此消息将考虑当前系统区域性。

此构造函数用 paramName 参数初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。 此构造函数用 paramName 参数初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。

下表显示 ArgumentOutOfRangeException 实例的初始属性值。

Property | Value
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 空字符串 ("")。
ParamName | 参数名字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
ArgumentOutOfRangeException 重载
System 命名空间


ArgumentOutOfRangeException 构造函数 (SerializationInfo, StreamingContext)

ArgumentOutOfRangeException 构造函数 (SerializationInfo, StreamingContext)
ArgumentOutOfRangeException 类

用序列化数据初始化 ArgumentOutOfRangeException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ArgumentOutOfRangeException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ArgumentOutOfRangeException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ArgumentOutOfRangeException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
对象，描述序列化数据的源或目标。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
ArgumentOutOfRangeException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


ArgumentOutOfRangeException 构造函数 (String, Exception)

ArgumentOutOfRangeException 构造函数 (String, Exception)
ArgumentOutOfRangeException 类

使用指定的错误消息和引发此异常的异常初始化 ArgumentOutOfRangeException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ArgumentOutOfRangeException(
    string message,
    Exception innerException
)
public:
ArgumentOutOfRangeException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ArgumentOutOfRangeException

参数

message
类型： System String
说明发生此异常的原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个 null 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
ArgumentOutOfRangeException 重载
System 命名空间


ArgumentOutOfRangeException 构造函数 (String, String)

ArgumentOutOfRangeException 构造函数 (String, String)
ArgumentOutOfRangeException 类

使用指定的错误消息和导致此异常的参数的名称来初始化 ArgumentOutOfRangeException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    paramName As String, _
    message As String _
)
public ArgumentOutOfRangeException(
    string paramName,
    string message
)
public:
ArgumentOutOfRangeException(
    String^ paramName,
    String^ message
)
new :
        paramName:string *
        message:string -> ArgumentOutOfRangeException

参数

paramName
类型： System String
导致异常的参数的名称。
message
类型： System String
描述错误的消息。

此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 此构造函数使用 message 参数的值初始化新实例的 Message 属性。message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

此构造函数用 paramName 参数初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。 此构造函数用 paramName 参数初始化新实例的 ParamName 属性。paramName 的内容被设计为人可理解的形式。

下表显示 ArgumentOutOfRangeException 实例的初始属性值。

Property | Value
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 错误消息字符串。
ParamName | 参数名字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
ArgumentOutOfRangeException 重载
System 命名空间


ArgumentOutOfRangeException 构造函数 (String, Object, String)

ArgumentOutOfRangeException 构造函数 (String, Object, String)
ArgumentOutOfRangeException 类

使用指定的错误消息、参数名和参数值来初始化 ArgumentOutOfRangeException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    paramName As String, _
    actualValue As Object, _
    message As String _
)
public ArgumentOutOfRangeException(
    string paramName,
    Object actualValue,
    string message
)
public:
ArgumentOutOfRangeException(
    String^ paramName,
    Object^ actualValue,
    String^ message
)
new :
        paramName:string *
        actualValue:Object *
        message:string -> ArgumentOutOfRangeException

参数

paramName
类型： System String
导致异常的参数的名称。
actualValue
类型： System Object
导致此异常的参数值。
message
类型： System String
描述错误的消息。

此构造函数使用 paramName 参数初始化新实例的 ParamName 属性；使用 actualValue 参数初始化 ActualValue 属性；使用 message 参数初始化 Message 属性。paramName 和 message 参数的内容应为人所理解。此构造函数的调用方必须确保这些字符串已针对当前系统区域性进行了本地化。 此构造函数使用 paramName 参数初始化新实例的 ParamName 属性；使用 actualValue 参数初始化 ActualValue 属性；使用 message 参数初始化 Message 属性。paramName 和 message 参数的内容应为人所理解。此构造函数的调用方必须确保这些字符串已针对当前系统区域性进行了本地化。 此构造函数使用 paramName 参数初始化新实例的 ParamName 属性；使用 actualValue 参数初始化 ActualValue 属性；使用 message 参数初始化 Message 属性。paramName 和 message 参数的内容应为人所理解。此构造函数的调用方必须确保这些字符串已针对当前系统区域性进行了本地化。

在 .NET Framework 类库中不使用 actualValue 参数。不过，提供了 ActualValue 属性，以便应用程序可以利用可用的参数值。 在 .NET Framework 类库中不使用 actualValue 参数。不过，提供了 ActualValue 属性，以便应用程序可以利用可用的参数值。

actualValue 参数包含传递到方法并导致引发此异常的无效值。该值存储在 ActualValue 属性中，其字符串表示形式追加到 Message 属性中持有的消息字符串上。 actualValue 参数包含传递到方法并导致引发此异常的无效值。该值存储在 ActualValue 属性中，其字符串表示形式追加到 Message 属性中持有的消息字符串上。

下表显示 ArgumentOutOfRangeException 实例的初始属性值。

Property | Value
ActualValue | 参数值。
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。
ParamName | 参数名字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
ArgumentOutOfRangeException 重载
System 命名空间


ArgumentOutOfRangeException 方法

ArgumentOutOfRangeException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentOutOfRangeException 类

ArgumentOutOfRangeException 类型公开以下成员。

名称 说明
页首

参考

ArgumentOutOfRangeException 类
System 命名空间


ArgumentOutOfRangeException ..::.GetObjectData 方法

ArgumentOutOfRangeException
.
.
::
.
GetObjectData 方法
ArgumentOutOfRangeException 类

设置带有无效参数值和附加异常信息的 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
对象，描述序列化数据的源或目标。

实现

异常 | 条件
ArgumentNullException | info 对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo 对象。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。 GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo 对象。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。

有关更多信息，请参见 SerializationInfo。

  • SecurityPermission

    用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand 用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
System 命名空间
SerializationInfo
StreamingContext


ArgumentOutOfRangeException 属性

ArgumentOutOfRangeException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentOutOfRangeException 类

ArgumentOutOfRangeException 类型公开以下成员。

名称 说明
页首

参考

ArgumentOutOfRangeException 类
System 命名空间


ArgumentOutOfRangeException ..::.ActualValue 属性

ArgumentOutOfRangeException
.
.
::
.
ActualValue 属性
ArgumentOutOfRangeException 类

获取导致此异常的参数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property ActualValue As Object
    Get
public virtual Object ActualValue { get; }
public:
virtual property Object^ ActualValue {
    Object^ get ();
}
abstract ActualValue : Object
override ActualValue : Object

属性值

类型： System Object
Object，它包含导致当前 Exception 的参数的值。

使用此属性检索无效参数。

ActualValue 属性返回与传递到构造函数的值相同的值；或者，如果没有提供任何值，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

在构造对象时为 ActualValue 属性赋值。如果 ActualValue 属性的值不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则会将该值的字符串表示形式追加到 Message 属性持有的消息字符串上。 在构造对象时为 ActualValue 属性赋值。如果 ActualValue 属性的值不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则会将该值的字符串表示形式追加到 Message 属性持有的消息字符串上。

在“.NET Framework”类库中不使用 ActualValue 属性。在所有由“.NET Framework”类库引发的 ArgumentOutOfRangeException 对象中，它的值都为 null。提供 ActualValue 属性，以便应用程序可以利用可用的参数值。 在“.NET Framework”类库中不使用 ActualValue 属性。在所有由“.NET Framework”类库引发的 ArgumentOutOfRangeException 对象中，它的值都为 null。提供 ActualValue 属性，以便应用程序可以利用可用的参数值。 在“.NET Framework”类库中不使用 ActualValue 属性。在所有由“.NET Framework”类库引发的 ArgumentOutOfRangeException 对象中，它的值都为 null。提供 ActualValue 属性，以便应用程序可以利用可用的参数值。

此属性是只读的，只应在为了自定义值的内容或格式时被重写。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
System 命名空间


ArgumentOutOfRangeException ..::.Message 属性

ArgumentOutOfRangeException
.
.
::
.
Message 属性
ArgumentOutOfRangeException 类

获取错误消息和无效参数值的字符串表示形式；或者，如果该参数值为 null，则仅获取错误消息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property Message As String Get
public override string Message { get; }
public:
virtual property String^ Message {
    String^ get () override;
}
abstract Message : string override Message : string
属性值
类型： System String
此异常的文本消息。
此属性的值采用以下两种形式之一。
此异常的文本消息。
此属性的值采用以下两种形式之一。
条件
值
actualValue
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
传递到构造函数的
message
字符串。
actualValue
不为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
附有无效参数值字符串表示形式的
message
字符串。
实现

此属性重写 Message。

错误消息应描述导致此异常的参数所需要的值。应本地化错误消息。 错误消息应描述导致此异常的参数所需要的值。应本地化错误消息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArgumentOutOfRangeException 类
ArgumentOutOfRangeException 成员
System 命名空间


ArgumentOutOfRangeException 事件

ArgumentOutOfRangeException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArgumentOutOfRangeException 类

ArgumentOutOfRangeException 类型公开以下成员。

名称 说明
页首

参考

ArgumentOutOfRangeException 类
System 命名空间


ArithmeticException 类

ArithmeticException 类
成员

因算术运算、类型转换或转换操作中的错误而引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ArithmeticException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ArithmeticException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ArithmeticException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ArithmeticException =
    class
        inherit SystemException
    end

ArithmeticException 是 DivideByZeroException、NotFiniteNumberException 和 OverflowException 的基类。一般情况下，使用 ArithmeticException 的一个派生类来更精确地指出错误的精确特征。如果只对捕获一般的算法错误感兴趣，将引发一个 ArithmeticException ArithmeticException 是 DivideByZeroException、NotFiniteNumberException 和 OverflowException 的基类。一般情况下，使用 ArithmeticException 的一个派生类来更精确地指出错误的精确特征。如果只对捕获一般的算法错误感兴趣，将引发一个 ArithmeticException ArithmeticException 是 DivideByZeroException、NotFiniteNumberException 和 OverflowException 的基类。一般情况下，使用 ArithmeticException 的一个派生类来更精确地指出错误的精确特征。如果只对捕获一般的算法错误感兴趣，将引发一个 ArithmeticException

ArithmeticException 使用值为 0x80070216 的 HRESULT COR_E_ARITHMETIC。

有关 ArithmeticException 实例的初始属性值列表，请参见 ArithmeticException 构造函数。

System System..::.ArithmeticExceptionArithmeticException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArithmeticException 成员
System 命名空间
Exception

其他资源

处理和引发异常


ArithmeticException 成员

ArithmeticException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArithmeticException 类

因算术运算、类型转换或转换操作中的错误而引发的异常。

ArithmeticException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ArithmeticException 类
System 命名空间


ArithmeticException 构造函数

ArithmeticException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArithmeticException 类

初始化 ArithmeticException 类的新实例。

名称 说明
页首

参考

ArithmeticException 类
ArithmeticException 成员
System 命名空间


ArithmeticException 构造函数

ArithmeticException 构造函数
ArithmeticException 类

初始化 ArithmeticException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ArithmeticException()
public:
ArithmeticException()
new : unit -> ArithmeticException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“不允许算术运算。”。此消息将考虑当前系统区域性。

下表显示 ArithmeticException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArithmeticException 类
ArithmeticException 成员
ArithmeticException 重载
System 命名空间


ArithmeticException 构造函数 (String)

ArithmeticException 构造函数 (String)
ArithmeticException 类

使用指定错误信息初始化 ArithmeticException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public ArithmeticException(
    string message
)
public:
ArithmeticException(
    String^ message
)
new :
        message:string -> ArithmeticException

参数

message
类型： System String
描述该错误的 String。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 ArithmeticException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArithmeticException 类
ArithmeticException 成员
ArithmeticException 重载
System 命名空间


ArithmeticException 构造函数 (SerializationInfo, StreamingContext)

ArithmeticException 构造函数 (SerializationInfo, StreamingContext)
ArithmeticException 类

用序列化数据初始化 ArithmeticException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ArithmeticException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ArithmeticException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ArithmeticException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArithmeticException 类
ArithmeticException 成员
ArithmeticException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


ArithmeticException 构造函数 (String, Exception)

ArithmeticException 构造函数 (String, Exception)
ArithmeticException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 ArithmeticException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ArithmeticException(
    string message,
    Exception innerException
)
public:
ArithmeticException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ArithmeticException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 ArithmeticException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArithmeticException 类
ArithmeticException 成员
ArithmeticException 重载
System 命名空间
Exception

其他资源

处理和引发异常


ArithmeticException 方法

ArithmeticException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArithmeticException 类

ArithmeticException 类型公开以下成员。

名称 说明
页首

参考

ArithmeticException 类
System 命名空间


ArithmeticException 属性

ArithmeticException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArithmeticException 类

ArithmeticException 类型公开以下成员。

名称 说明
页首

参考

ArithmeticException 类
System 命名空间


ArithmeticException 事件

ArithmeticException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArithmeticException 类

ArithmeticException 类型公开以下成员。

名称 说明
页首

参考

ArithmeticException 类
System 命名空间


Array 类

Array 类
成员

提供创建、操作、搜索和排序数组的方法，因而在公共语言运行时中用作所有数组的基类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class Array _
    Implements ICloneable, IList, ICollection, IEnumerable,  _
    IStructuralComparable, IStructuralEquatable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Array : ICloneable,
    IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Array abstract : ICloneable,
    IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Array =
    class
        interface ICloneable
        interface IList
        interface ICollection
        interface IEnumerable
        interface IStructuralComparable
        interface IStructuralEquatable
    end

Array 类是支持数组的语言实现的基类。但是，只有系统和编译器可以从 Array 类显式派生。用户应当使用由语言提供的数组构造。 Array 类是支持数组的语言实现的基类。但是，只有系统和编译器可以从 Array 类显式派生。用户应当使用由语言提供的数组构造。 Array 类是支持数组的语言实现的基类。但是，只有系统和编译器可以从 Array 类显式派生。用户应当使用由语言提供的数组构造。

一个元素就是 Array 中的一个值。Array 的长度是它可包含的元素总数。Array 的秩是 Array 中的维数。Array 中维度的下限是 Array 中该维度的起始索引，多维 Array 的各个维度可以有不同的界限。数组最多可以有 32 个维。 一个元素就是 Array 中的一个值。Array 的长度是它可包含的元素总数。Array 的秩是 Array 中的维数。Array 中维度的下限是 Array 中该维度的起始索引，多维 Array 的各个维度可以有不同的界限。数组最多可以有 32 个维。 一个元素就是 Array 中的一个值。Array 的长度是它可包含的元素总数。Array 的秩是 Array 中的维数。Array 中维度的下限是 Array 中该维度的起始索引，多维 Array 的各个维度可以有不同的界限。数组最多可以有 32 个维。 一个元素就是 Array 中的一个值。Array 的长度是它可包含的元素总数。Array 的秩是 Array 中的维数。Array 中维度的下限是 Array 中该维度的起始索引，多维 Array 的各个维度可以有不同的界限。数组最多可以有 32 个维。 一个元素就是 Array 中的一个值。Array 的长度是它可包含的元素总数。Array 的秩是 Array 中的维数。Array 中维度的下限是 Array 中该维度的起始索引，多维 Array 的各个维度可以有不同的界限。数组最多可以有 32 个维。

重要说明 重要事项

在 .NET Framework 2.0 版中，Array 类实现 System.Collections.Generic..::.IList<(Of <(T>)>)、System.Collections.Generic..::.ICollection<(Of <(T>)>) 和 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 泛型接口。由于实现是在运行时提供给数组的，因而对于文档生成工具不可见。因此，泛型接口不会出现在 Array 类的声明语法中，也不会有关于只能通过将数组强制转换为泛型接口类型（显式接口实现）才可访问的接口成员的参考主题。将某一数组强制转换为这三种接口之一时需要注意的关键一点是，添加、插入或移除元素的成员会引发 NotSupportedException。 在 .NET Framework 2.0 版中，Array 类实现 System.Collections.Generic..::.IList<(Of <(T>)>)、System.Collections.Generic..::.ICollection<(Of <(T>)>) 和 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 泛型接口。由于实现是在运行时提供给数组的，因而对于文档生成工具不可见。因此，泛型接口不会出现在 Array 类的声明语法中，也不会有关于只能通过将数组强制转换为泛型接口类型（显式接口实现）才可访问的接口成员的参考主题。将某一数组强制转换为这三种接口之一时需要注意的关键一点是，添加、插入或移除元素的成员会引发 NotSupportedException。 在 .NET Framework 2.0 版中，Array 类实现 System.Collections.Generic..::.IList<(Of <(T>)>)、System.Collections.Generic..::.ICollection<(Of <(T>)>) 和 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 泛型接口。由于实现是在运行时提供给数组的，因而对于文档生成工具不可见。因此，泛型接口不会出现在 Array 类的声明语法中，也不会有关于只能通过将数组强制转换为泛型接口类型（显式接口实现）才可访问的接口成员的参考主题。将某一数组强制转换为这三种接口之一时需要注意的关键一点是，添加、插入或移除元素的成员会引发 NotSupportedException。 在 .NET Framework 2.0 版中，Array 类实现 System.Collections.Generic..::.IList<(Of <(T>)>)、System.Collections.Generic..::.ICollection<(Of <(T>)>) 和 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 泛型接口。由于实现是在运行时提供给数组的，因而对于文档生成工具不可见。因此，泛型接口不会出现在 Array 类的声明语法中，也不会有关于只能通过将数组强制转换为泛型接口类型（显式接口实现）才可访问的接口成员的参考主题。将某一数组强制转换为这三种接口之一时需要注意的关键一点是，添加、插入或移除元素的成员会引发 NotSupportedException。

Type 对象提供有关数组类型声明的信息。具有相同数组类型的 Array 对象共享同一 Type 对象。 Type 对象提供有关数组类型声明的信息。具有相同数组类型的 Array 对象共享同一 Type 对象。

Type..::.IsArray 和 Type..::.GetElementType 可能不返回所预期的 Array 形式的结果，因为如果某个数组被强制转换为 Array 类型，则结果是对象，而非数组。即，typeof(System.Array).IsArray 返回 false，而 typeof(System.Array).GetElementType 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 Type..::.IsArray 和 Type..::.GetElementType 可能不返回所预期的 Array 形式的结果，因为如果某个数组被强制转换为 Array 类型，则结果是对象，而非数组。即，typeof(System.Array).IsArray 返回 false，而 typeof(System.Array).GetElementType 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

与大多数类不同，Array 提供 CreateInstance 方法，以便允许后期绑定访问，而不是提供公共构造函数。

Array..::.Copy 方法不仅可在同一类型的数组之间复制元素，而且可在不同类型的标准数组之间复制元素；它会自动处理强制转换。

有些方法（如 CreateInstance、Copy、CopyTo、GetValue 和 SetValue）提供接受 64 位整数作为参数的重载，以适应大容量数组。LongLength 和 GetLongLength 返回 64 位整数，表示数组的长度。 有些方法（如 CreateInstance、Copy、CopyTo、GetValue 和 SetValue）提供接受 64 位整数作为参数的重载，以适应大容量数组。LongLength 和 GetLongLength 返回 64 位整数，表示数组的长度。

不保证会对 Array 进行排序。在执行需要对 Array 进行排序的操作（如 BinarySearch）之前，必须对 Array 进行排序。 不保证会对 Array 进行排序。在执行需要对 Array 进行排序的操作（如 BinarySearch）之前，必须对 Array 进行排序。

不支持在本机代码中使用指针的 Array 对象，这种用法将对几种方法引发 NotSupportedException。

下面的代码示例说明 Array..::.Copy 如何在 integer 类型的数组和 Object 类型的数组之间复制元素。

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new integer array and a new Object array.
        Dim myIntArray() As Integer = {1, 2, 3, 4, 5}
        Dim myObjArray() As Object = {26, 27, 28, 29, 30}

        ' Prints the initial values of both arrays.
        Console.WriteLine("Initially,")
        Console.Write("integer array:")
        PrintValues(myIntArray)
        Console.Write("Object array: ")
        PrintValues(myObjArray)

        ' Copies the first two elements from the integer array to the Object array.
        System.Array.Copy(myIntArray, myObjArray, 2)

        ' Prints the values of the modified arrays.
        Console.WriteLine(ControlChars.NewLine + "After copying the first two" _
           + " elements of the integer array to the Object array,")
        Console.Write("integer array:")
        PrintValues(myIntArray)
        Console.Write("Object array: ")
        PrintValues(myObjArray)

        ' Copies the last two elements from the Object array to the integer array.
        System.Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, _
           myIntArray.GetUpperBound(0) - 1, 2)

        ' Prints the values of the modified arrays.
        Console.WriteLine(ControlChars.NewLine + "After copying the last two" _
           + " elements of the Object array to the integer array,")
        Console.Write("integer array:")
        PrintValues(myIntArray)
        Console.Write("Object array: ")
        PrintValues(myObjArray)
    End Sub

    Overloads Public Shared Sub PrintValues(myArr() As Object)
        Dim i As Object
        For Each i In  myArr
            Console.Write(ControlChars.Tab + "{0}", i)
        Next i
        Console.WriteLine()
    End Sub

    Overloads Public Shared Sub PrintValues(myArr() As Integer)
        Dim i As Integer
        For Each i In  myArr
            Console.Write(ControlChars.Tab + "{0}", i)
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' Initially,
' integer array:  1       2       3       4       5
' Object array:   26      27      28      29      30
'
' After copying the first two elements of the integer array to the Object array,
' integer array:  1       2       3       4       5
' Object array:   1       2       28      29      30
'
' After copying the last two elements of the Object array to the integer array,
' integer array:  1       2       3       29      30
' Object array:   1       2       28      29      30

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new integer array and a new Object array.
      int[] myIntArray = new int[5] { 1, 2, 3, 4, 5 };
      Object[] myObjArray = new Object[5] { 26, 27, 28, 29, 30 };

      // Prints the initial values of both arrays.
      Console.WriteLine( "Initially," );
      Console.Write( "integer array:" );
      PrintValues( myIntArray );
      Console.Write( "Object array: " );
      PrintValues( myObjArray );

      // Copies the first two elements from the integer array to the Object array.
      System.Array.Copy( myIntArray, myObjArray, 2 );

      // Prints the values of the modified arrays.
      Console.WriteLine( "\nAfter copying the first two elements of the integer array to the Object array," );
      Console.Write( "integer array:" );
      PrintValues( myIntArray );
      Console.Write( "Object array: " );
      PrintValues( myObjArray );

      // Copies the last two elements from the Object array to the integer array.
      System.Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );

      // Prints the values of the modified arrays.
      Console.WriteLine( "\nAfter copying the last two elements of the Object array to the integer array," );
      Console.Write( "integer array:" );
      PrintValues( myIntArray );
      Console.Write( "Object array: " );
      PrintValues( myObjArray );
   }

   public static void PrintValues( Object[] myArr )  {
      foreach ( Object i in myArr )  {
         Console.Write( "\t{0}", i );
      }
      Console.WriteLine();
   }

   public static void PrintValues( int[] myArr )  {
      foreach ( int i in myArr )  {
         Console.Write( "\t{0}", i );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

Initially,
integer array:  1       2       3       4       5
Object array:   26      27      28      29      30

After copying the first two elements of the integer array to the Object array,
integer array:  1       2       3       4       5
Object array:   1       2       28      29      30

After copying the last two elements of the Object array to the integer array,
integer array:  1       2       3       29      30
Object array:   1       2       28      29      30
*/

using namespace System;
void main1();
void main2();
void main()
{
   main1();
   Console::WriteLine();
   main2();
}

void PrintValues( array<Object^>^myArr );
void PrintValues( array<int>^myArr );
void main1()
{
   // Creates and initializes a new int array and a new Object array.
   array<int>^myIntArray = {1,2,3,4,5};
   array<Object^>^myObjArray = {26,27,28,29,30};

   // Prints the initial values of both arrays.
   Console::WriteLine(  "Initially," );
   Console::Write(  "int array:   " );
   PrintValues( myIntArray );
   Console::Write(  "Object array:" );
   PrintValues( myObjArray );

   // Copies the first two elements from the int array to the Object array.
   System::Array::Copy( myIntArray, myObjArray, 2 );

   // Prints the values of the modified arrays.
   Console::WriteLine(  "\nAfter copying the first two elements of the int array to the Object array," );
   Console::Write(  "int array:   " );
   PrintValues( myIntArray );
   Console::Write(  "Object array:" );
   PrintValues( myObjArray );

   // Copies the last two elements from the Object array to the int array.
   System::Array::Copy( myObjArray, myObjArray->GetUpperBound( 0 ) - 1, myIntArray, myIntArray->GetUpperBound( 0 ) - 1, 2 );

   // Prints the values of the modified arrays.
   Console::WriteLine(  "\nAfter copying the last two elements of the Object array to the int array," );
   Console::Write(  "int array:   " );
   PrintValues( myIntArray );
   Console::Write(  "Object array:" );
   PrintValues( myObjArray );
}

void PrintValues( array<Object^>^myArr )
{
   for ( int i = 0; i < myArr->Length; i++ )
   {
      Console::Write(  "\t{0}", myArr[ i ] );

   }
   Console::WriteLine();
}

void PrintValues( array<int>^myArr )
{
   for ( int i = 0; i < myArr->Length; i++ )
   {
      Console::Write(  "\t{0}", myArr[ i ] );

   }
   Console::WriteLine();
}

/*
 This code produces the following output.

 Initially,
 int array:       1    2    3    4    5
 Object array:    26    27    28    29    30
 After copying the first two elements of the int array to the Object array,
 int array:       1    2    3    4    5
 Object array:    1    2    28    29    30
 After copying the last two elements of the Object array to the int array,
 int array:       1    2    3    29    30
 Object array:    1    2    28    29    30
 */

下面的代码示例创建并初始化一个 Array，然后显示其属性和元素。

Public Class SamplesArray2

    Public Shared Sub Main()

        ' Creates and initializes a new three-dimensional Array of
        ' type Int32.
        Dim myArr As Array = Array.CreateInstance(GetType(Int32), 2, 3, 4)
        Dim i As Integer
        For i = myArr.GetLowerBound(0) To myArr.GetUpperBound(0)
            Dim j As Integer
            For j = myArr.GetLowerBound(1) To myArr.GetUpperBound(1)
                Dim k As Integer
                For k = myArr.GetLowerBound(2) To myArr.GetUpperBound(2)
                    myArr.SetValue(i * 100 + j * 10 + k, i, j, k)
                Next k
            Next j
        Next i ' Displays the properties of the Array.
        Console.WriteLine("The Array has {0} dimension(s) and a " _
           + "total of {1} elements.", myArr.Rank, myArr.Length)
        Console.WriteLine(ControlChars.Tab + "Length" + ControlChars.Tab _
           + "Lower" + ControlChars.Tab + "Upper")
        For i = 0 To myArr.Rank - 1
            Console.Write("{0}:" + ControlChars.Tab + "{1}", i, _
               myArr.GetLength(i))
            Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab _
               + "{1}", myArr.GetLowerBound(i), myArr.GetUpperBound(i))
        Next i

        ' Displays the contents of the Array.
        Console.WriteLine("The Array contains the following values:")
        PrintValues(myArr)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength(myArr.Rank - 1)
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The Array has 3 dimension(s) and a total of 24 elements.
'     Length    Lower    Upper
' 0:    2    0    1
' 1:    3    0    2
' 2:    4    0    3
' The Array contains the following values:
'     0    1    2    3
'     10    11    12    13
'     20    21    22    23
'     100    101    102    103
'     110    111    112    113
'     120    121    122    123

public class SamplesArray2{

   public static void Main()  {

      // Creates and initializes a new three-dimensional Array of type Int32.
      Array myArr = Array.CreateInstance( typeof(Int32), 2, 3, 4 );
      for ( int i = myArr.GetLowerBound(0); i <= myArr.GetUpperBound(0); i++ )
         for ( int j = myArr.GetLowerBound(1); j <= myArr.GetUpperBound(1); j++ )
            for ( int k = myArr.GetLowerBound(2); k <= myArr.GetUpperBound(2); k++ )  {
               myArr.SetValue( (i*100)+(j*10)+k, i, j, k );
            }

      // Displays the properties of the Array.
      Console.WriteLine( "The Array has {0} dimension(s) and a total of {1} elements.", myArr.Rank, myArr.Length );
      Console.WriteLine( "\tLength\tLower\tUpper" );
      for ( int i = 0; i < myArr.Rank; i++ )  {
         Console.Write( "{0}:\t{1}", i, myArr.GetLength(i) );
         Console.WriteLine( "\t{0}\t{1}", myArr.GetLowerBound(i), myArr.GetUpperBound(i) );
      }

      // Displays the contents of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintValues( myArr );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The Array has 3 dimension(s) and a total of 24 elements.
    Length    Lower    Upper
0:    2    0    1
1:    3    0    2
2:    4    0    3
The Array contains the following values:
    0    1    2    3
    10    11    12    13
    20    21    22    23
    100    101    102    103
    110    111    112    113
    120    121    122    123
*/

void PrintValues( Array^ myArr );
void main2()
{
   // Creates and initializes a new three-dimensional Array instance of type Int32.
   Array^ myArr = Array::CreateInstance( Int32::typeid, 2, 3, 4 );
   for ( int i = myArr->GetLowerBound( 0 ); i <= myArr->GetUpperBound( 0 ); i++ )
   {
      for ( int j = myArr->GetLowerBound( 1 ); j <= myArr->GetUpperBound( 1 ); j++ )
      {
         for ( int k = myArr->GetLowerBound( 2 ); k <= myArr->GetUpperBound( 2 ); k++ )
            myArr->SetValue( (i * 100) + (j * 10) + k, i, j, k );

      }
   }

   // Displays the properties of the Array.
   Console::WriteLine(  "The Array instance has {0} dimension(s) and a total of {1} elements.", myArr->Rank, myArr->Length );
   Console::WriteLine(  "\tLength\tLower\tUpper" );
   for ( int i = 0; i < myArr->Rank; i++ )
   {
      Console::Write(  "{0}:\t{1}", i, myArr->GetLength( i ) );
      Console::WriteLine(  "\t{0}\t{1}", myArr->GetLowerBound( i ), myArr->GetUpperBound( i ) );

   }
   Console::WriteLine(  "The Array instance contains the following values:" );
   PrintValues( myArr );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
            i++;
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The Array instance has 3 dimension(s) and a total of 24 elements.
     Length    Lower    Upper
 0:    2    0    1
 1:    3    0    2
 2:    4    0    3
 The Array instance contains the following values:
     0    1    2    3
     10    11    12    13
     20    21    22    23
     100    101    102    103
     110    111    112    113
     120    121    122    123
 */

System System..::.ArrayArray

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。

此实现不提供 Array 的同步（线程安全）包装；但是，基于 Array 的 .NET Framework 类使用 SyncRoot 属性提供它们自己的集合同步版本。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 成员
System 命名空间
Object
Type

其他资源

在数组中执行不区分区域性的字符串操作


Array 成员

Array 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

提供创建、操作、搜索和排序数组的方法，因而在公共语言运行时中用作所有数组的基类。

Array 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Array 类
System 命名空间


Array 方法

Array 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

Array 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Array 类
System 命名空间


Array ..::.AsReadOnly <(Of <(T >)>) 方法

Array
.
.
::
.
AsReadOnly
<
(Of
<
(
T
>
)
>
)
方法
Array 类

返回指定数组的只读包装。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function AsReadOnly(Of T) ( _
    array As T() _
) As ReadOnlyCollection(Of T)
public static ReadOnlyCollection<T> AsReadOnly<T>(
    T[] array
)

public:
generic<typename T>
static ReadOnlyCollection<T>^ AsReadOnly(
    array<T>^ array
)
static member AsReadOnly :
        array:'T[] -> ReadOnlyCollection<'T>

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要包装在只读 ReadOnlyCollection<(Of <(T>)>) 包装中的从零开始的一维数组。

返回值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
T
>
)
>
)

指定数组的只读 ReadOnlyCollection<(Of <(T>)>) 包装。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要防止对数组进行任何修改，应该仅通过此包装公开数组。

只读集合只是一个具有用于防止修改的包装的集合；因此，如果更改基础集合，则只读集合将反映那些更改。

此方法是 O(1) 操作。

下面的示例将数组包装在只读 ReadOnlyCollection<(Of <(T>)>) 中。

Imports System
Imports System.Collections.Generic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Create and initialize a new string array.
        Dim myArr As String() =  {"The", "quick", "brown", "fox"}

        ' Display the values of the array.
        Console.WriteLine("The string array initially contains the following values:")
        PrintIndexAndValues(myArr)

        ' Create a read-only IList wrapper around the array.
        Dim myList As IList(Of String) = Array.AsReadOnly(myArr) '

        ' Display the values of the read-only IList.
        Console.WriteLine("The read-only IList contains the following values:")
        PrintIndexAndValues(myList)

        ' Attempt to change a value through the wrapper.
        Try
            myList(3) = "CAT"
        Catch e As NotSupportedException
            Console.WriteLine("{0} - {1}", e.GetType(), e.Message)
            Console.WriteLine()
        End Try

        ' Change a value in the original array.
        myArr(2) = "RED"

        ' Display the values of the array.
        Console.WriteLine("After changing the third element, the string array contains the following values:")
        PrintIndexAndValues(myArr)

        ' Display the values of the read-only IList.
        Console.WriteLine("After changing the third element, the read-only IList contains the following values:")
        PrintIndexAndValues(myList)

    End Sub 'Main

    Overloads Public Shared Sub PrintIndexAndValues(myArr() As String)
        Dim i As Integer
        For i = 0 To myArr.Length - 1
            Console.WriteLine("   [{0}] : {1}", i, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    Overloads Public Shared Sub PrintIndexAndValues(myList As IList(Of String))
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine("   [{0}] : {1}", i, myList(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The string array initially contains the following values:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'
'The read-only IList contains the following values:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'
'System.NotSupportedException - Collection is read-only.
'
'After changing the third element, the string array contains the following values:
'   [0] : The
'   [1] : quick
'   [2] : RED
'   [3] : fox
'
'After changing the third element, the read-only IList contains the following values:
'   [0] : The
'   [1] : quick
'   [2] : RED
'   [3] : fox

using System;
using System.Collections.Generic;

public class SamplesArray  {

   public static void Main()  {

      // Create and initialize a new string array.
      String[] myArr = { "The", "quick", "brown", "fox" };

      // Display the values of the array.
      Console.WriteLine( "The string array initially contains the following values:" );
      PrintIndexAndValues( myArr );

      // Create a read-only IList wrapper around the array.
      IList<String> myList = Array.AsReadOnly( myArr );

      // Display the values of the read-only IList.
      Console.WriteLine( "The read-only IList contains the following values:" );
      PrintIndexAndValues( myList );

      // Attempt to change a value through the wrapper.
      try  {
         myList[3] = "CAT";
      }
      catch ( NotSupportedException e )  {
         Console.WriteLine( "{0} - {1}", e.GetType(), e.Message );
         Console.WriteLine();
      }

      // Change a value in the original array.
      myArr[2] = "RED";

      // Display the values of the array.
      Console.WriteLine( "After changing the third element, the string array contains the following values:" );
      PrintIndexAndValues( myArr );

      // Display the values of the read-only IList.
      Console.WriteLine( "After changing the third element, the read-only IList contains the following values:" );
      PrintIndexAndValues( myList );

   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }

   public static void PrintIndexAndValues( IList<String> myList )  {
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myList[i] );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The string array initially contains the following values:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox

The read-only IList contains the following values:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox

System.NotSupportedException - Collection is read-only.

After changing the third element, the string array contains the following values:
   [0] : The
   [1] : quick
   [2] : RED
   [3] : fox

After changing the third element, the read-only IList contains the following values:
   [0] : The
   [1] : quick
   [2] : RED
   [3] : fox

*/

using namespace System;
using namespace System::Collections::Generic;

namespace Samples
{
    public ref class SamplesArray
    {
    public:
        static void Work()
        {

            // Create and initialize a new string array.
            array <String^>^ textArray =
                {"The", "quick", "brown", "fox"};

            // Display the values of the array.
            Console::WriteLine("The string array initially contains "
                "the following values:");
            PrintIndexAndValues(textArray);

            // Create a read-only IList wrapper around the array.
            IList <String^>^ textList = Array::AsReadOnly(textArray);

            // Display the values of the read-only IList.
            Console::WriteLine("The read-only IList contains "
                "the following values:");
            PrintIndexAndValues(textList);

            // Attempt to change a value through the wrapper.
            try
            {
                textList[3] = "CAT";
            }
            catch (NotSupportedException^ ex)
            {
                Console::WriteLine("{0} - {1}", ex->GetType(),
                    ex->Message);
                Console::WriteLine();
            }

            // Change a value in the original array.
            textArray[2] = "RED";

            // Display the values of the array.
            Console::WriteLine("After changing the third element,"
                "the string array contains the following values:");
            PrintIndexAndValues(textArray);

            // Display the values of the read-only IList.
            Console::WriteLine("After changing the third element, the"
                " read-only IList contains the following values:");
            PrintIndexAndValues(textList);
        }

        static void PrintIndexAndValues(array<String^>^ textArray)
        {
            for (int i = 0; i < textArray->Length; i++)
            {
                Console::WriteLine("   [{0}] : {1}", i, textArray[i]);
            }
            Console::WriteLine();
        }

        static void PrintIndexAndValues(IList<String^>^ textList)
        {
            for (int i = 0; i < textList->Count; i++)
            {
                Console::WriteLine("   [{0}] : {1}", i, textList[i]);
            }
            Console::WriteLine();
        }
    };
}

int main()
{
    Samples::SamplesArray::Work();

}

/*
This code produces the following output.

The string array initially contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox

The read-only IList contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox

System.NotSupportedException - Collection is read-only.

After changing the third element, the string array contains the following values:
[0] : The
[1] : quick
[2] : RED
[3] : fox

After changing the third element, the read-only IList contains the following values:
[0] : The
[1] : quick
[2] : RED
[3] : fox

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间


Array ..::.BinarySearch 方法

Array
.
.
::
.
BinarySearch 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

使用二进制搜索算法在一维的排序 Array 中搜索值。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.BinarySearch <(Of <(T >)>) 方法 ( array<T >[]()[], T)

Array
.
.
::
.
BinarySearch
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, T)
Array 类

使用由 Array 中每个元素和指定的对象实现的 IComparable<(Of <(T>)>) 泛型接口，在整个一维排序 Array 中搜索特定元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function BinarySearch(Of T) ( _
    array As T(), _
    value As T _
) As Integer
public static int BinarySearch<T>(
    T[] array,
    T value
)

public:
generic<typename T>
static int BinarySearch(
    array<T>^ array,
    T value
)
static member BinarySearch :
        array:'T[] *
        value:'T -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维排序 Array。
value
类型：T
要搜索的对象。

返回值

类型： System Int32
如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | value 没有实现 IComparable<(Of <(T>)>) 泛型接口，并且搜索时遇到没有实现 IComparable<(Of <(T>)>) 泛型接口的元素。

此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。 此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。

如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。

value 或 array 的每个元素都必须实现 IComparable<(Of <(T>)>) 泛型接口，该接口用于进行比较。array 的元素必须已经根据 IComparable<(Of <(T>)>) 实现定义的排序顺序按升序排序；否则，结果可能不正确。 value 或 array 的每个元素都必须实现 IComparable<(Of <(T>)>) 泛型接口，该接口用于进行比较。array 的元素必须已经根据 IComparable<(Of <(T>)>) 实现定义的排序顺序按升序排序；否则，结果可能不正确。

说明 说明

如果 value 没有实现 IComparable<(Of <(T>)>) 泛型接口，则在搜索开始前不会针对 IComparable<(Of <(T>)>) 测试 array 的元素。如果搜索时遇到没有实现 IComparable<(Of <(T>)>) 的元素，将引发异常。 如果 value 没有实现 IComparable<(Of <(T>)>) 泛型接口，则在搜索开始前不会针对 IComparable<(Of <(T>)>) 测试 array 的元素。如果搜索时遇到没有实现 IComparable<(Of <(T>)>) 的元素，将引发异常。

允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。 允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

说明 说明

对于每个进行测试的元素，都将 value 传递给相应的 IComparable<(Of <(T>)>) 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable<(Of <(T>)>) 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。 对于每个进行测试的元素，都将 value 传递给相应的 IComparable<(Of <(T>)>) 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable<(Of <(T>)>) 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。

此方法的运算复杂度为 O(log n)，其中 n 是 array 的 Length。

下面的代码示例演示 Sort<(Of <(T>)>)(array<T>[]()[]) 泛型方法重载和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载。以非特定的顺序创建一个字符串数组。 下面的代码示例演示 Sort<(Of <(T>)>)(array<T>[]()[]) 泛型方法重载和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载。以非特定的顺序创建一个字符串数组。

显示数组并进行排序，然后进行再次显示。在使用 BinarySearch 方法之前，必须对数组进行排序。 显示数组并进行排序，然后进行再次显示。在使用 BinarySearch 方法之前，必须对数组进行排序。

说明 说明

调用 Sort 和 BinarySearch 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 调用 Sort 和 BinarySearch 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。 然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。 然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。

Imports System
Imports System.Collections.Generic

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Pachycephalosaurus", _
            "Amargasaurus", _
            "Tyrannosaurus", _
            "Mamenchisaurus", _
            "Deinonychus", _
            "Edmontosaurus"  }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & "Sort")
        Array.Sort(dinosaurs)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Coelophysis':")
        Dim index As Integer = _
            Array.BinarySearch(dinosaurs, "Coelophysis")
        ShowWhere(dinosaurs, index)

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Tyrannosaurus':")
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus")
        ShowWhere(dinosaurs, index)

    End Sub

    Private Shared Sub ShowWhere(Of T) _
        (ByVal array() As T, ByVal index As Integer)

        If index < 0 Then
            ' If the index is negative, it represents the bitwise
            ' complement of the next larger element in the array.
            '
            index = index Xor -1

            Console.Write("Not found. Sorts between: ")

            If index = 0 Then
                Console.Write("beginning of array and ")
            Else
                Console.Write("{0} and ", array(index - 1))
            End If

            If index = array.Length Then
                Console.WriteLine("end of array.")
            Else
                Console.WriteLine("{0}.", array(index))
            End If
        Else
            Console.WriteLine("Found at index {0}.", index)
        End If

    End Sub

End Class

' This code example produces the following output:
'
'Pachycephalosaurus
'Amargasaurus
'Tyrannosaurus
'Mamenchisaurus
'Deinonychus
'Edmontosaurus
'
'Sort
'
'Amargasaurus
'Deinonychus
'Edmontosaurus
'Mamenchisaurus
'Pachycephalosaurus
'Tyrannosaurus
'
'BinarySearch for 'Coelophysis':
'Not found. Sorts between: Amargasaurus and Deinonychus.
'
'BinarySearch for 'Tyrannosaurus':
'Found at index 5.

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Tyrannosaurus",
                              "Mamenchisaurus",
                              "Deinonychus",
                              "Edmontosaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nSort");
        Array.Sort(dinosaurs);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis");
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus");
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Amargasaurus
Deinonychus
Edmontosaurus
Mamenchisaurus
Pachycephalosaurus
Tyrannosaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Amargasaurus and Deinonychus.

BinarySearch for 'Tyrannosaurus':
Found at index 5.
 */

using namespace System;
using namespace System::Collections::Generic;

generic<typename T> void ShowWhere(array<T>^ arr, int index)
{
    if (index<0)
    {
        // If the index is negative, it represents the bitwise
        // complement of the next larger element in the array.
        //
        index = ~index;

        Console::Write("Not found. Sorts between: ");

        if (index == 0)
            Console::Write("beginning of array and ");
        else
            Console::Write("{0} and ", arr[index-1]);

        if (index == arr->Length)
            Console::WriteLine("end of array.");
        else
            Console::WriteLine("{0}.", arr[index]);
    }
    else
    {
        Console::WriteLine("Found at index {0}.", index);
    }
};

void main()
{
    array<String^>^ dinosaurs = {"Pachycephalosaurus",
                                 "Amargasaurus",
                                 "Tyrannosaurus",
                                 "Mamenchisaurus",
                                 "Deinonychus",
                                 "Edmontosaurus"};

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nSort");
    Array::Sort(dinosaurs);

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nBinarySearch for 'Coelophysis':");
    int index = Array::BinarySearch(dinosaurs, "Coelophysis");
    ShowWhere(dinosaurs, index);

    Console::WriteLine("\nBinarySearch for 'Tyrannosaurus':");
    index = Array::BinarySearch(dinosaurs, "Tyrannosaurus");
    ShowWhere(dinosaurs, index);
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Amargasaurus
Deinonychus
Edmontosaurus
Mamenchisaurus
Pachycephalosaurus
Tyrannosaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Amargasaurus and Deinonychus.

BinarySearch for 'Tyrannosaurus':
Found at index 5.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
BinarySearch 重载
System 命名空间
IComparable T
Sort

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.BinarySearch 方法 (Array, Object)

Array
.
.
::
.
BinarySearch 方法 (Array, Object)
Array 类

使用由 Array 中每个元素和指定的对象实现的 IComparable 接口，在整个一维排序 Array 中搜索特定元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function BinarySearch ( _
    array As Array, _
    value As Object _
) As Integer
public static int BinarySearch(
    Array array,
    Object value
)
public:
static int BinarySearch(
    Array^ array,
    Object^ value
)
static member BinarySearch :
        array:Array *
        value:Object -> int

参数

array
类型： System Array
要搜索的已排序一维 Array。
value
类型： System Object
要搜索的对象。

返回值

类型： System Int32
如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。
ArgumentException | value 是不与 array 的元素兼容的类型。
InvalidOperationException | value 没有实现 IComparable 接口，并且搜索时遇到没有实现 IComparable 接口的元素。

此方法不支持搜索包含负索引的数组。调用此方法前，必须对 array 进行排序。 此方法不支持搜索包含负索引的数组。调用此方法前，必须对 array 进行排序。

如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。

value 或 array 的每个元素都必须实现 IComparable 接口，该接口用于进行比较。array 的元素必须已经根据 IComparable 实现定义的排序顺序按升序排序；否则，结果可能不正确。 value 或 array 的每个元素都必须实现 IComparable 接口，该接口用于进行比较。array 的元素必须已经根据 IComparable 实现定义的排序顺序按升序排序；否则，结果可能不正确。

说明 说明

如果 value 没有实现 IComparable 接口，则在搜索开始前将不会针对 IComparable 测试 array 的元素。如果搜索时遇到没有实现 IComparable 的元素，将引发异常。 如果 value 没有实现 IComparable 接口，则在搜索开始前将不会针对 IComparable 测试 array 的元素。如果搜索时遇到没有实现 IComparable 的元素，将引发异常。

允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。 允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

说明 说明

对于每个进行测试的元素，都将 value 传递给相应的 IComparable 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。 对于每个进行测试的元素，都将 value 传递给相应的 IComparable 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。

此方法的运算复杂度为 O(log n)，其中 n 是 array 的 Length。

下面的代码示例说明如何使用 BinarySearch 在 Array 中找到特定的对象。

说明 说明

创建数组时，其元素按升序排序。BinarySearch 方法要求数组按升序排序。 创建数组时，其元素按升序排序。BinarySearch 方法要求数组按升序排序。

Imports System

Public Class SamplesArray
    Public Shared Sub Main()
        ' Creates and initializes a new Array.
        Dim myIntArray As Array = Array.CreateInstance( GetType(Int32), 5 )

        myIntArray.SetValue( 8, 0 )
        myIntArray.SetValue( 2, 1 )
        myIntArray.SetValue( 6, 2 )
        myIntArray.SetValue( 3, 3 )
        myIntArray.SetValue( 7, 4 )

        ' Do the required sort first
        Array.Sort(myIntArray)

        ' Displays the values of the Array.
        Console.WriteLine("The Int32 array contains the following:")
        PrintValues(myIntArray)

        ' Locates a specific object that does not exist in the Array.
        Dim myObjectOdd As Object = 1
        FindMyObject(myIntArray, myObjectOdd)

        ' Locates an object that exists in the Array.
        Dim myObjectEven As Object = 6
        FindMyObject(myIntArray, myObjectEven)
    End Sub

    Public Shared Sub FindMyObject(myArr As Array, myObject As Object)
        Dim myIndex As Integer = Array.BinarySearch(myArr, myObject)
        If  myIndex < 0 Then
            Console.WriteLine("The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, Not(myIndex))
        Else
            Console.WriteLine("The object to search for ({0}) is at index {1}.", myObject, myIndex)
        End If
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength( myArr.Rank - 1 )
        For Each o As Object In myArr
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write( vbTab + "{0}", o)
        Next o
        Console.WriteLine()
    End Sub
End Class
' This code produces the following output.
'
' The Int32 array contains the following:
'         2       3       6       7       8
' The object to search for (1) is not found. The next larger object is at index 0
'
' The object to search for (6) is at index 2.

using System;

public class SamplesArray
{
    public static void Main()
    {
        // Creates and initializes a new Array.
        Array myIntArray = Array.CreateInstance(typeof(Int32), 5);

        myIntArray.SetValue(8, 0);
        myIntArray.SetValue(2, 1);
        myIntArray.SetValue(6, 2);
        myIntArray.SetValue(3, 3);
        myIntArray.SetValue(7, 4);

        // Do the required sort first
        Array.Sort(myIntArray);

        // Displays the values of the Array.
        Console.WriteLine( "The Int32 array contains the following:" );
        PrintValues(myIntArray);

        // Locates a specific object that does not exist in the Array.
        object myObjectOdd = 1;
        FindMyObject( myIntArray, myObjectOdd );

        // Locates an object that exists in the Array.
        object myObjectEven = 6;
        FindMyObject(myIntArray, myObjectEven);
    }

    public static void FindMyObject(Array myArr, object myObject)
    {
        int myIndex=Array.BinarySearch(myArr, myObject);
        if (myIndex < 0)
        {
            Console.WriteLine("The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, ~myIndex );
        }
        else
        {
            Console.WriteLine("The object to search for ({0}) is at index {1}.", myObject, myIndex );
        }
    }

    public static void PrintValues(Array myArr)
    {
        int i = 0;
        int cols = myArr.GetLength(myArr.Rank - 1);
        foreach (object o in myArr)
        {
            if ( i < cols )
            {
                i++;
            }
            else
            {
                Console.WriteLine();
                i = 1;
            }
            Console.Write( "\t{0}", o);
        }
        Console.WriteLine();
    }
}
// This code produces the following output.
//
//The Int32 array contains the following:
//        2       3       6       7       8
//The object to search for (1) is not found. The next larger object is at index 0
//
//The object to search for (6) is at index 2.

using namespace System;

public ref class SamplesArray
{
public:
    static void Main()
    {
        // Creates and initializes a new Array.
        Array^ myIntArray = Array::CreateInstance(Int32::typeid, 5);

        myIntArray->SetValue(8, 0);
        myIntArray->SetValue(2, 1);
        myIntArray->SetValue(6, 2);
        myIntArray->SetValue(3, 3);
        myIntArray->SetValue(7, 4);

        // Do the required sort first
        Array::Sort(myIntArray);

        // Displays the values of the Array.
        Console::WriteLine("The Int32 array contains the following:");
        PrintValues(myIntArray);

        // Locates a specific object that does not exist in the Array.
        Object^ myObjectOdd = 1;
        FindMyObject(myIntArray, myObjectOdd);

        // Locates an object that exists in the Array.
        Object^ myObjectEven = 6;
        FindMyObject(myIntArray, myObjectEven);
    }

    static void FindMyObject(Array^ myArr, Object^ myObject)
    {
        int myIndex = Array::BinarySearch(myArr, myObject);
        if (myIndex < 0)
        {
            Console::WriteLine("The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, ~myIndex);
        }
        else
        {
            Console::WriteLine("The object to search for ({0}) is at index {1}.", myObject, myIndex);
        }
    }

    static void PrintValues(Array^ myArr)
    {
        int i = 0;
        int cols = myArr->GetLength(myArr->Rank - 1);
        for each (Object^ o in myArr)
        {
            if ( i < cols )
            {
                i++;
            }
            else
            {
                Console::WriteLine();
                i = 1;
            }
            Console::Write("\t{0}", o);
        }
        Console::WriteLine();
    }
};

int main()
{
    SamplesArray::Main();
}
// This code produces the following output.
//
//The Int32 array contains the following:
//        2       3       6       7       8
//The object to search for (1) is not found. The next larger object is at index 0
//
//The object to search for (6) is at index 2.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
BinarySearch 重载
System 命名空间
IComparable
Sort

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.BinarySearch <(Of <(T >)>) 方法 ( array<T >[]()[], T, IComparer <(Of <(T >)>))

Array
.
.
::
.
BinarySearch
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, T, IComparer
<
(Of
<
(
T
>
)
>
)
)
Array 类

使用指定的 IComparer<(Of <(T>)>) 泛型接口，在整个一维排序 Array 中搜索值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function BinarySearch(Of T) ( _
    array As T(), _
    value As T, _
    comparer As IComparer(Of T) _
) As Integer
public static int BinarySearch<T>(
    T[] array,
    T value,
    IComparer<T> comparer
)

public:
generic<typename T>
static int BinarySearch(
    array<T>^ array,
    T value,
    IComparer<T>^ comparer
)
static member BinarySearch :
        array:'T[] *
        value:'T *
        comparer:IComparer<'T> -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维排序 Array。
value
类型：T
要搜索的对象。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
T
>
)
>
)

比较元素时要使用的 IComparer<(Of <(T>)>) 实现。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable<(Of <(T>)>) 实现。

返回值

类型： System Int32
如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | comparer 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而 value 是不与 array 的元素兼容的类型。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），value 没有实现 IComparable<(Of <(T>)>) 泛型接口，并且搜索时遇到没有实现 IComparable<(Of <(T>)>) 泛型接口的元素。

此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。 此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。

如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。

比较器自定义如何对元素进行比较。例如，可以使用 System.Collections..::.CaseInsensitiveComparer 作为比较器来执行不区分大小写的字符串搜索。 比较器自定义如何对元素进行比较。例如，可以使用 System.Collections..::.CaseInsensitiveComparer 作为比较器来执行不区分大小写的字符串搜索。

如果 comparer 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用指定的 IComparer<(Of <(T>)>) 泛型接口实现将 array 的元素与指定的值进行比较。array 的元素必须已经根据 comparer 定义的排序顺序按升序排序；否则，结果可能不正确。 如果 comparer 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用指定的 IComparer<(Of <(T>)>) 泛型接口实现将 array 的元素与指定的值进行比较。array 的元素必须已经根据 comparer 定义的排序顺序按升序排序；否则，结果可能不正确。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用由元素本身或指定值所提供的 IComparable<(Of <(T>)>) 泛型接口实现来执行比较。array 的元素必须已经根据 IComparable<(Of <(T>)>) 实现定义的排序顺序按升序排序；否则，结果可能不正确。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用由元素本身或指定值所提供的 IComparable<(Of <(T>)>) 泛型接口实现来执行比较。array 的元素必须已经根据 IComparable<(Of <(T>)>) 实现定义的排序顺序按升序排序；否则，结果可能不正确。

说明 说明

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 value 没有实现 IComparable<(Of <(T>)>) 泛型接口，则在搜索开始前不会针对 IComparable<(Of <(T>)>) 测试 array 的元素。如果搜索时遇到没有实现 IComparable<(Of <(T>)>) 的元素，将引发异常。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 value 没有实现 IComparable<(Of <(T>)>) 泛型接口，则在搜索开始前不会针对 IComparable<(Of <(T>)>) 测试 array 的元素。如果搜索时遇到没有实现 IComparable<(Of <(T>)>) 的元素，将引发异常。

允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。 允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

说明 说明

对于每个进行测试的元素，都将 value 传递给相应的 IComparable<(Of <(T>)>) 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable<(Of <(T>)>) 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。 对于每个进行测试的元素，都将 value 传递给相应的 IComparable<(Of <(T>)>) 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable<(Of <(T>)>) 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。

此方法的运算复杂度为 O(log n)，其中 n 是 array 的 Length。

下面的代码示例演示 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 泛型方法重载和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法重载。

该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。 该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。

显示数组并进行排序，然后进行再次显示。在使用 BinarySearch 方法之前，必须对数组进行排序。 显示数组并进行排序，然后进行再次显示。在使用 BinarySearch 方法之前，必须对数组进行排序。

说明 说明

调用 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 调用 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。 然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。 然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。

Imports System
Imports System.Collections.Generic

Public Class ReverseComparer
    Implements IComparer(Of String)

    Public Function Compare(ByVal x As String, _
        ByVal y As String) As Integer _
        Implements IComparer(Of String).Compare

        ' Compare y and x in reverse order.
        Return y.CompareTo(x)

    End Function
End Class

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Pachycephalosaurus", _
            "Amargasaurus", _
            "Tyrannosaurus", _
            "Mamenchisaurus", _
            "Deinonychus", _
            "Edmontosaurus"  }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Dim rc As New ReverseComparer()

        Console.WriteLine(vbLf & "Sort")
        Array.Sort(dinosaurs, rc)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Coelophysis':")
        Dim index As Integer = _
            Array.BinarySearch(dinosaurs, "Coelophysis", rc)
        ShowWhere(dinosaurs, index)

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Tyrannosaurus':")
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus", rc)
        ShowWhere(dinosaurs, index)

    End Sub

    Private Shared Sub ShowWhere(Of T) _
        (ByVal array() As T, ByVal index As Integer)

        If index < 0 Then
            ' If the index is negative, it represents the bitwise
            ' complement of the next larger element in the array.
            '
            index = index Xor -1

            Console.Write("Not found. Sorts between: ")

            If index = 0 Then
                Console.Write("beginning of array and ")
            Else
                Console.Write("{0} and ", array(index - 1))
            End If

            If index = array.Length Then
                Console.WriteLine("end of array.")
            Else
                Console.WriteLine("{0}.", array(index))
            End If
        Else
            Console.WriteLine("Found at index {0}.", index)
        End If

    End Sub

End Class

' This code example produces the following output:
'
'Pachycephalosaurus
'Amargasaurus
'Tyrannosaurus
'Mamenchisaurus
'Deinonychus
'Edmontosaurus
'
'Sort
'
'Tyrannosaurus
'Pachycephalosaurus
'Mamenchisaurus
'Edmontosaurus
'Deinonychus
'Amargasaurus
'
'BinarySearch for 'Coelophysis':
'Not found. Sorts between: Deinonychus and Amargasaurus.
'
'BinarySearch for 'Tyrannosaurus':
'Found at index 0.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Tyrannosaurus",
                              "Mamenchisaurus",
                              "Deinonychus",
                              "Edmontosaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort");
        Array.Sort(dinosaurs, rc);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis", rc);
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus", rc);
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Tyrannosaurus
Pachycephalosaurus
Mamenchisaurus
Edmontosaurus
Deinonychus
Amargasaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Deinonychus and Amargasaurus.

BinarySearch for 'Tyrannosaurus':
Found at index 0.
 */

using namespace System;
using namespace System::Collections::Generic;

public ref class ReverseComparer: IComparer<String^>
{
public:
    virtual int Compare(String^ x, String^ y)
    {
        // Compare y and x in reverse order.
        return y->CompareTo(x);
    }
};

generic<typename T> void ShowWhere(array<T>^ arr, int index)
{
    if (index<0)
    {
        // If the index is negative, it represents the bitwise
        // complement of the next larger element in the array.
        //
        index = ~index;

        Console::Write("Not found. Sorts between: ");

        if (index == 0)
            Console::Write("beginning of array and ");
        else
            Console::Write("{0} and ", arr[index-1]);

        if (index == arr->Length)
            Console::WriteLine("end of array.");
        else
            Console::WriteLine("{0}.", arr[index]);
    }
    else
    {
        Console::WriteLine("Found at index {0}.", index);
    }
};

void main()
{
    array<String^>^ dinosaurs = {"Pachycephalosaurus",
                                 "Amargasaurus",
                                 "Tyrannosaurus",
                                 "Mamenchisaurus",
                                 "Deinonychus",
                                 "Edmontosaurus"};

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    ReverseComparer^ rc = gcnew ReverseComparer();

    Console::WriteLine("\nSort");
    Array::Sort(dinosaurs, rc);

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nBinarySearch for 'Coelophysis':");
    int index = Array::BinarySearch(dinosaurs, "Coelophysis", rc);
    ShowWhere(dinosaurs, index);

    Console::WriteLine("\nBinarySearch for 'Tyrannosaurus':");
    index = Array::BinarySearch(dinosaurs, "Tyrannosaurus", rc);
    ShowWhere(dinosaurs, index);
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Tyrannosaurus
Pachycephalosaurus
Mamenchisaurus
Edmontosaurus
Deinonychus
Amargasaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Deinonychus and Amargasaurus.

BinarySearch for 'Tyrannosaurus':
Found at index 0.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
BinarySearch 重载
System 命名空间
IComparer T
IComparable T
Sort

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.BinarySearch 方法 (Array, Object, IComparer)

Array
.
.
::
.
BinarySearch 方法 (Array, Object, IComparer)
Array 类

使用指定的 IComparer 接口，在整个一维排序 Array 中搜索值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function BinarySearch ( _
    array As Array, _
    value As Object, _
    comparer As IComparer _
) As Integer
public static int BinarySearch(
    Array array,
    Object value,
    IComparer comparer
)
public:
static int BinarySearch(
    Array^ array,
    Object^ value,
    IComparer^ comparer
)
static member BinarySearch :
        array:Array *
        value:Object *
        comparer:IComparer -> int

参数

array
类型： System Array
要搜索的已排序一维 Array。
value
类型： System Object
要搜索的对象。
comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable 实现。

返回值

类型： System Int32
如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。
ArgumentException | comparer 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而 value 是不与 array 的元素兼容的类型。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），value 没有实现 IComparable 接口，并且搜索时遇到没有实现 IComparable 接口的元素。

此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。 此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。

如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。

比较器自定义如何对元素进行比较。例如，可以使用 System.Collections..::.CaseInsensitiveComparer 作为比较器来执行不区分大小写的字符串搜索。 比较器自定义如何对元素进行比较。例如，可以使用 System.Collections..::.CaseInsensitiveComparer 作为比较器来执行不区分大小写的字符串搜索。

如果 comparer 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用指定的 IComparer 实现将 array 的元素与指定的值进行比较。array 的元素必须已经根据 comparer 定义的排序顺序按升序排序；否则，结果可能不正确。 如果 comparer 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用指定的 IComparer 实现将 array 的元素与指定的值进行比较。array 的元素必须已经根据 comparer 定义的排序顺序按升序排序；否则，结果可能不正确。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用元素本身所提供的 IComparable 实现或通过指定值来执行比较。array 的元素必须已经根据 IComparable 实现定义的排序顺序按升序排序；否则，结果可能不正确。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用元素本身所提供的 IComparable 实现或通过指定值来执行比较。array 的元素必须已经根据 IComparable 实现定义的排序顺序按升序排序；否则，结果可能不正确。

说明 说明

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 value 没有实现 IComparable 接口，则在搜索开始前将不会针对 IComparable 测试 array 的元素。如果搜索时遇到没有实现 IComparable 的元素，将引发异常。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 value 没有实现 IComparable 接口，则在搜索开始前将不会针对 IComparable 测试 array 的元素。如果搜索时遇到没有实现 IComparable 的元素，将引发异常。

允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。 允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

说明 说明

对于每个进行测试的元素，都将 value 传递给相应的 IComparable 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。 对于每个进行测试的元素，都将 value 传递给相应的 IComparable 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。

此方法的运算复杂度为 O(log n)，其中 n 是 array 的 Length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
BinarySearch 重载
System 命名空间
IComparer
IComparable
Sort

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.BinarySearch <(Of <(T >)>) 方法 ( array<T >[]()[], Int32, Int32, T)

Array
.
.
::
.
BinarySearch
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Int32, Int32, T)
Array 类

使用由 Array 中每个元素和指定值实现的 IComparable<(Of <(T>)>) 泛型接口，在一维排序 Array 的某个元素范围中搜索值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function BinarySearch(Of T) ( _
    array As T(), _
    index As Integer, _
    length As Integer, _
    value As T _
) As Integer
public static int BinarySearch<T>(
    T[] array,
    int index,
    int length,
    T value
)

public:
generic<typename T>
static int BinarySearch(
    array<T>^ array,
    int index,
    int length,
    T value
)
static member BinarySearch :
        array:'T[] *
        index:int *
        length:int *
        value:'T -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维排序 Array。
index
类型： System Int32
要搜索的范围的起始索引。
length
类型： System Int32
要搜索的范围的长度。
value
类型：T
要搜索的对象。

返回值

类型： System Int32
如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。
ArgumentException | index 和 length 不指定 array 中的有效范围。 - 或 - value 是不与 array 的元素兼容的类型。
InvalidOperationException | value 没有实现 IComparable<(Of <(T>)>) 泛型接口，并且搜索时遇到没有实现 IComparable<(Of <(T>)>) 泛型接口的元素。

此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。 此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。

如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。

value 或 array 的每个元素都必须实现 IComparable<(Of <(T>)>) 泛型接口，该接口用于进行比较。array 的元素必须已经根据 IComparable<(Of <(T>)>) 实现定义的排序顺序按升序排序；否则，结果可能不正确。 value 或 array 的每个元素都必须实现 IComparable<(Of <(T>)>) 泛型接口，该接口用于进行比较。array 的元素必须已经根据 IComparable<(Of <(T>)>) 实现定义的排序顺序按升序排序；否则，结果可能不正确。

说明 说明

如果 value 没有实现 IComparable<(Of <(T>)>) 泛型接口，则在搜索开始前不会针对 IComparable<(Of <(T>)>) 测试 array 的元素。如果搜索时遇到没有实现 IComparable<(Of <(T>)>) 的元素，将引发异常。 如果 value 没有实现 IComparable<(Of <(T>)>) 泛型接口，则在搜索开始前不会针对 IComparable<(Of <(T>)>) 测试 array 的元素。如果搜索时遇到没有实现 IComparable<(Of <(T>)>) 的元素，将引发异常。

允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。 允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

说明 说明

对于每个进行测试的元素，都将 value 传递给相应的 IComparable<(Of <(T>)>) 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable<(Of <(T>)>) 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。 对于每个进行测试的元素，都将 value 传递给相应的 IComparable<(Of <(T>)>) 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable<(Of <(T>)>) 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。

此方法的运算复杂度为 O(log n)，其中 n 是 length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
BinarySearch 重载
System 命名空间
IComparable T
Sort

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.BinarySearch 方法 (Array, Int32, Int32, Object)

Array
.
.
::
.
BinarySearch 方法 (Array, Int32, Int32, Object)
Array 类

使用由 Array 中每个元素和指定值实现的 IComparable 接口，在一维排序 Array 的某个范围中搜索值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function BinarySearch ( _
    array As Array, _
    index As Integer, _
    length As Integer, _
    value As Object _
) As Integer
public static int BinarySearch(
    Array array,
    int index,
    int length,
    Object value
)
public:
static int BinarySearch(
    Array^ array,
    int index,
    int length,
    Object^ value
)
static member BinarySearch :
        array:Array *
        index:int *
        length:int *
        value:Object -> int

参数

array
类型： System Array
要搜索的已排序一维 Array。
index
类型： System Int32
要搜索的范围的起始索引。
length
类型： System Int32
要搜索的范围的长度。
value
类型： System Object
要搜索的对象。

返回值

类型： System Int32
如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。
ArgumentOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。
ArgumentException | index 和 length 不指定 array 中的有效范围。 - 或 - value 是不与 array 的元素兼容的类型。
InvalidOperationException | value 没有实现 IComparable 接口，并且搜索时遇到没有实现 IComparable 接口的元素。

此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。 此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。

如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。

value 或 array 的每个元素都必须实现 IComparable 接口，该接口用于进行比较。array 的元素必须已经根据 IComparable 实现定义的排序顺序按升序排序；否则，结果可能不正确。 value 或 array 的每个元素都必须实现 IComparable 接口，该接口用于进行比较。array 的元素必须已经根据 IComparable 实现定义的排序顺序按升序排序；否则，结果可能不正确。

说明 说明

如果 value 没有实现 IComparable 接口，则在搜索开始前将不会针对 IComparable 测试 array 的元素。如果搜索时遇到没有实现 IComparable 的元素，将引发异常。 如果 value 没有实现 IComparable 接口，则在搜索开始前将不会针对 IComparable 测试 array 的元素。如果搜索时遇到没有实现 IComparable 的元素，将引发异常。

允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。 允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 总是可以与任何其他引用类型比较，因此与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

说明 说明

对于每个进行测试的元素，都将 value 传递给相应的 IComparable 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。 对于每个进行测试的元素，都将 value 传递给相应的 IComparable 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。

此方法的运算复杂度为 O(log n)，其中 n 是 length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
BinarySearch 重载
System 命名空间
IComparable
Sort

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.BinarySearch <(Of <(T >)>) 方法 ( array<T >[]()[], Int32, Int32, T, IComparer <(Of <(T >)>))

Array
.
.
::
.
BinarySearch
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Int32, Int32, T, IComparer
<
(Of
<
(
T
>
)
>
)
)
Array 类

使用指定的 IComparer<(Of <(T>)>) 泛型接口，在一维排序 Array 的某个元素范围中搜索值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function BinarySearch(Of T) ( _
    array As T(), _
    index As Integer, _
    length As Integer, _
    value As T, _
    comparer As IComparer(Of T) _
) As Integer
public static int BinarySearch<T>(
    T[] array,
    int index,
    int length,
    T value,
    IComparer<T> comparer
)

public:
generic<typename T>
static int BinarySearch(
    array<T>^ array,
    int index,
    int length,
    T value,
    IComparer<T>^ comparer
)
static member BinarySearch :
        array:'T[] *
        index:int *
        length:int *
        value:'T *
        comparer:IComparer<'T> -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维排序 Array。
index
类型： System Int32
要搜索的范围的起始索引。
length
类型： System Int32
要搜索的范围的长度。
value
类型：T
要搜索的对象。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
T
>
)
>
)

比较元素时要使用的 IComparer<(Of <(T>)>) 实现。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable<(Of <(T>)>) 实现。

返回值

类型： System Int32
如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。
ArgumentException | index 和 length 不指定 array 中的有效范围。 - 或 - comparer 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而 value 是不与 array 的元素兼容的类型。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），value 没有实现 IComparable<(Of <(T>)>) 泛型接口，并且搜索时遇到没有实现 IComparable<(Of <(T>)>) 泛型接口的元素。

此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。 此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。

如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。

比较器自定义如何对元素进行比较。例如，可以使用 System.Collections..::.CaseInsensitiveComparer 作为比较器来执行不区分大小写的字符串搜索。 比较器自定义如何对元素进行比较。例如，可以使用 System.Collections..::.CaseInsensitiveComparer 作为比较器来执行不区分大小写的字符串搜索。

如果 comparer 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用指定的 IComparer<(Of <(T>)>) 泛型接口实现将 array 的元素与指定的值进行比较。array 的元素必须已经根据 comparer 定义的排序顺序按升序排序；否则，结果可能不正确。 如果 comparer 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用指定的 IComparer<(Of <(T>)>) 泛型接口实现将 array 的元素与指定的值进行比较。array 的元素必须已经根据 comparer 定义的排序顺序按升序排序；否则，结果可能不正确。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用由元素本身或指定值所提供的 IComparable<(Of <(T>)>) 泛型接口实现来执行比较。array 的元素必须已经根据 IComparable<(Of <(T>)>) 实现定义的排序顺序按升序排序；否则，结果可能不正确。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用由元素本身或指定值所提供的 IComparable<(Of <(T>)>) 泛型接口实现来执行比较。array 的元素必须已经根据 IComparable<(Of <(T>)>) 实现定义的排序顺序按升序排序；否则，结果可能不正确。

说明 说明

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 value 没有实现 IComparable<(Of <(T>)>) 泛型接口，则在搜索开始前不会针对 IComparable<(Of <(T>)>) 测试 array 的元素。如果搜索时遇到没有实现 IComparable<(Of <(T>)>) 的元素，将引发异常。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 value 没有实现 IComparable<(Of <(T>)>) 泛型接口，则在搜索开始前不会针对 IComparable<(Of <(T>)>) 测试 array 的元素。如果搜索时遇到没有实现 IComparable<(Of <(T>)>) 的元素，将引发异常。

允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。 允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 始终可以与其他任何引用类型比较，因此在使用 IComparable<(Of <(T>)>) 时与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 始终可以与其他任何引用类型比较，因此在使用 IComparable<(Of <(T>)>) 时与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

说明 说明

对于每个进行测试的元素，都将 value 传递给相应的 IComparable<(Of <(T>)>) 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable<(Of <(T>)>) 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。 对于每个进行测试的元素，都将 value 传递给相应的 IComparable<(Of <(T>)>) 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable<(Of <(T>)>) 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。

此方法的运算复杂度为 O(log n)，其中 n 是 length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
BinarySearch 重载
System 命名空间
IComparer T
IComparable T
Sort

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.BinarySearch 方法 (Array, Int32, Int32, Object, IComparer)

Array
.
.
::
.
BinarySearch 方法 (Array, Int32, Int32, Object, IComparer)
Array 类

使用指定的 IComparer 接口，在一维排序 Array 的某个元素范围中搜索值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function BinarySearch ( _
    array As Array, _
    index As Integer, _
    length As Integer, _
    value As Object, _
    comparer As IComparer _
) As Integer
public static int BinarySearch(
    Array array,
    int index,
    int length,
    Object value,
    IComparer comparer
)
public:
static int BinarySearch(
    Array^ array,
    int index,
    int length,
    Object^ value,
    IComparer^ comparer
)
static member BinarySearch :
        array:Array *
        index:int *
        length:int *
        value:Object *
        comparer:IComparer -> int

参数

array
类型： System Array
要搜索的已排序一维 Array。
index
类型： System Int32
要搜索的范围的起始索引。
length
类型： System Int32
要搜索的范围的长度。
value
类型： System Object
要搜索的对象。
comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable 实现。

返回值

类型： System Int32
如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。 如果找到 value，则为指定 array 中的指定 value 的索引。如果找不到 value 且 value 小于 array 中的一个或多个元素，则为一个负数，该负数是大于 value 的第一个元素的索引的按位求补。如果找不到 value 且 value 大于 array 中的任何元素，则为一个负数，该负数是（最后一个元素的索引加 1）的按位求补。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。
ArgumentOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。
ArgumentException | index 和 length 不指定 array 中的有效范围。 - 或 - comparer 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而 value 是不与 array 的元素兼容的类型。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），value 没有实现 IComparable 接口，并且搜索时遇到没有实现 IComparable 接口的元素。

此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。 此方法不支持搜索包含负索引的数组。调用此方法前，必须对数组进行排序。

如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。 如果 Array 不包含指定值，则该方法会返回负整数。可对负结果应用按位求补运算符 (~)（在 Visual Basic 中，将负结果和 -1 进行 Xor 运算）以生成一个索引。如果此索引大于等于数组的大小，则数组中没有比 value 更大的元素。否则，即为大于 value 的第一个元素的索引。

比较器自定义如何对元素进行比较。例如，可以使用 System.Collections..::.CaseInsensitiveComparer 作为比较器来执行不区分大小写的字符串搜索。 比较器自定义如何对元素进行比较。例如，可以使用 System.Collections..::.CaseInsensitiveComparer 作为比较器来执行不区分大小写的字符串搜索。

如果 comparer 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用指定的 IComparer 实现将 array 的元素与指定的值进行比较。array 的元素必须已经根据 comparer 定义的排序顺序按升序排序；否则，结果可能不正确。 如果 comparer 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用指定的 IComparer 实现将 array 的元素与指定的值进行比较。array 的元素必须已经根据 comparer 定义的排序顺序按升序排序；否则，结果可能不正确。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用元素本身所提供的 IComparable 实现或通过指定值来执行比较。array 的元素必须已经根据 IComparable 实现定义的排序顺序按升序排序；否则，结果可能不正确。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用元素本身所提供的 IComparable 实现或通过指定值来执行比较。array 的元素必须已经根据 IComparable 实现定义的排序顺序按升序排序；否则，结果可能不正确。

说明 说明

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 value 没有实现 IComparable 接口，则在搜索开始前将不会针对 IComparable 测试 array 的元素。如果搜索时遇到没有实现 IComparable 的元素，将引发异常。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 value 没有实现 IComparable 接口，则在搜索开始前将不会针对 IComparable 测试 array 的元素。如果搜索时遇到没有实现 IComparable 的元素，将引发异常。

允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。 允许重复元素。如果 Array 包含多个值等于 value 的元素，则该方法将仅返回一个匹配项（不一定是第一个匹配项）的索引。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 始终可以与其他任何引用类型比较，因此在使用 IComparable 时与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 始终可以与其他任何引用类型比较，因此在使用 IComparable 时与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 比较不会产生异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

说明 说明

对于每个进行测试的元素，都将 value 传递给相应的 IComparable 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。 对于每个进行测试的元素，都将 value 传递给相应的 IComparable 实现，即使 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也一样。即，IComparable 实现确定一个给定的元素如何与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行比较。

此方法的运算复杂度为 O(log n)，其中 n 是 length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
BinarySearch 重载
System 命名空间
IComparer
IComparable
Sort

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Clear 方法

Array
.
.
::
.
Clear 方法
Array 类

将 Array 中的一系列元素设置为零、false 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），具体取决于元素类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Clear ( _
    array As Array, _
    index As Integer, _
    length As Integer _
)
public static void Clear(
    Array array,
    int index,
    int length
)
public:
static void Clear(
    Array^ array,
    int index,
    int length
)
static member Clear :
        array:Array *
        index:int *
        length:int -> unit

参数

array
类型： System Array
Array，需要清除其元素。
index
类型： System Int32
要清除的一系列元素的起始索引。
length
类型： System Int32
要清除的元素数。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
IndexOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。 - 或 - index 与 length 之和大于 Array 的大小。

将引用类型元素设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将布尔类型元素设置为 false。将其他值类型元素设置为零。 将引用类型元素设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将布尔类型元素设置为 false。将其他值类型元素设置为零。 将引用类型元素设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将布尔类型元素设置为 false。将其他值类型元素设置为零。

在多维数组中，已清除元素会分布到多行上。

此方法仅清除元素的值，而不删除元素本身。Array 具有固定大小；因此，不能添加或移除元素。 此方法仅清除元素的值，而不删除元素本身。Array 具有固定大小；因此，不能添加或移除元素。

此方法的运算复杂度为 O(n)，其中 n 是 length。

下面的示例演示如何对多维数组使用 Clear 方法。

Imports System
Imports Microsoft.VisualBasic     ' Visual Basic .NET versions 1.0 and 1.1

Module Example

    Sub Main()

        Console.WriteLine(vbLf & "One dimension (Rank=1):")
        Dim numbers1() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9}

        For i As Integer = 0 To 8
            Console.Write("{0} ", numbers1(i))
        Next i
        Console.WriteLine()

        Console.WriteLine(vbLf & "Array.Clear(numbers1, 2, 5)")
        Array.Clear(numbers1, 2, 5)

        For i As Integer = 0 To 8
            Console.Write("{0} ", numbers1(i))
        Next i
        Console.WriteLine()

        Console.WriteLine(vbLf & "Two dimensions (Rank=2):")
        Dim numbers2(,) As Integer = {{ 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }}

        For i As Integer = 0 To 2
            For j As Integer = 0 To 2
                Console.Write("{0} ", numbers2(i, j))
            Next j
            Console.WriteLine()
        Next i

        Console.WriteLine(vbLf & "Array.Clear(numbers2, 2, 5)")
        Array.Clear(numbers2, 2, 5)

        For i As Integer = 0 To 2
            For j As Integer = 0 To 2
                Console.Write("{0} ", numbers2(i, j))
            Next j
            Console.WriteLine()
        Next i

        Console.WriteLine(vbLf & "Three dimensions (Rank=3):")
        Dim numbers3(,,) As Integer = {{{ 1, 2 }, { 3, 4 }}, _
                                       {{ 5, 6 }, { 7, 8 }}, _
                                       {{ 9,10 }, {11,12 }}}

        For i As Integer = 0 To 1
            For j As Integer = 0 To 1
                For k As Integer = 0 To 1
                    Console.Write("{0} ", numbers3(i, j, k))
                Next k
                Console.WriteLine()
            Next j
            Console.WriteLine()
        Next i

        Console.WriteLine("Array.Clear(numbers3, 2, 5)")
        Array.Clear(numbers3, 2, 5)

        For i As Integer = 0 To 1
            For j As Integer = 0 To 1
                For k As Integer = 0 To 1
                    Console.Write("{0} ", numbers3(i, j, k))
                Next k
                Console.WriteLine()
            Next j
            Console.WriteLine()
        Next i

    End Sub

End Module

' This code example produces the following output:
'
'One dimension (Rank=1):
'1 2 3 4 5 6 7 8 9
'
'Array.Clear(numbers1, 2, 5)
'1 2 0 0 0 0 0 8 9
'
'Two dimensions (Rank=2):
'1 2 3
'4 5 6
'7 8 9
'
'Array.Clear(numbers2, 2, 5)
'1 2 0
'0 0 0
'0 8 9
'
'Three dimensions (Rank=3):
'1 2
'3 4
'
'5 6
'7 8
'
'Array.Clear(numbers3, 2, 5)
'1 2
'0 0
'
'0 0
'0 8

using System;

class Example
{
    public static void Main()
    {
        Console.WriteLine("One dimension (Rank=1):");
        int[] numbers1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        for (int i = 0; i < 9; i++)
        {
            Console.Write("{0} ", numbers1[i]);
        }
        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Array.Clear(numbers1, 2, 5)");
        Array.Clear(numbers1, 2, 5);

        for (int i = 0; i < 9; i++)
        {
            Console.Write("{0} ", numbers1[i]);
        }
        Console.WriteLine();
        Console.WriteLine();

        Console.WriteLine("Two dimensions (Rank=2):");
        int[,] numbers2 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                Console.Write("{0} ", numbers2[i, j]);
            }
            Console.WriteLine();
        }

        Console.WriteLine();
        Console.WriteLine("Array.Clear(numbers2, 2, 5)");
        Array.Clear(numbers2, 2, 5);

        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                Console.Write("{0} ", numbers2[i, j]);
            }
            Console.WriteLine();
        }

        Console.WriteLine("Three dimensions (Rank=3):");
        int[, ,] numbers3 = {{{1, 2}, {3, 4}},
                             {{5, 6}, {7, 8}},
                             {{9, 10}, {11, 12}}};

        for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                for (int k = 0; k < 2; k++)
                {
                    Console.Write("{0} ", numbers3[i, j, k]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }

        Console.WriteLine("Array.Clear(numbers3, 2, 5)");
        Array.Clear(numbers3, 2, 5);

        for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                for (int k = 0; k < 2; k++)
                {
                    Console.Write("{0} ", numbers3[i, j, k]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }
    }
}
/*  This code example produces the following output:
 *
 * One dimension (Rank=1):
 * 1 2 3 4 5 6 7 8 9
 *
 * Array.Clear(numbers1, 2, 5)
 * 1 2 0 0 0 0 0 8 9
 *
 * Two dimensions (Rank=2):
 * 1 2 3
 * 4 5 6
 * 7 8 9
 *
 * Array.Clear(numbers2, 2, 5)
 * 1 2 0
 * 0 0 0
 * 0 8 9
 *
 * Three dimensions (Rank=3):
 * 1 2
 * 3 4
 *
 * 5 6
 * 7 8
 *
 * Array.Clear(numbers3, 2, 5)
 * 1 2
 * 0 0
 *
 * 0 0
 * 0 8
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
ICollection Count


Array ..::.Clone 方法

Array
.
.
::
.
Clone 方法
Array 类

创建 Array 的浅表副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Clone As Object
public Object Clone()
public:
virtual Object^ Clone() sealed
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
Array 的浅表副本。

实现

Array 的浅表副本仅复制 Array 的元素（无论它们是引用类型还是值类型），但不复制这些引用所引用的对象。新 Array 中的引用与原始 Array 中的引用指向相同的对象。 Array 的浅表副本仅复制 Array 的元素（无论它们是引用类型还是值类型），但不复制这些引用所引用的对象。新 Array 中的引用与原始 Array 中的引用指向相同的对象。

相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。

复本与原始 Array 的 Type 相同。

此方法为 O(n) 操作，其中 n 是 Length。

下面的代码示例克隆一个 System.Globalization..::.CultureInfo 数组并演示浅表副本的行为。

Imports System
Imports System.Globalization

Public Class SamplesArray

    Public Shared Sub Main()

        ' Create and initialize a new CultureInfo array.
        Dim ci0 As New CultureInfo("ar-SA", False)
        Dim ci1 As New CultureInfo("en-US", False)
        Dim ci2 As New CultureInfo("fr-FR", False)
        Dim ci3 As New CultureInfo("ja-JP", False)
        Dim arrCI() As CultureInfo = {ci0, ci1, ci2, ci3}

        ' Create a clone of the CultureInfo array.
        Dim arrCIClone As CultureInfo() = CType(arrCI.Clone(), CultureInfo())

        ' Replace an element in the clone array.
        Dim ci4 As New CultureInfo("th-TH", False)
        arrCIClone(0) = ci4

        ' Display the contents of the original array.
        Console.WriteLine("The original array contains the following values:")
        PrintIndexAndValues(arrCI)

        ' Display the contents of the clone array.
        Console.WriteLine("The clone array contains the following values:")
        PrintIndexAndValues(arrCIClone)

        ' Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
        Console.WriteLine("Before changes to the clone:")
        Console.WriteLine("   Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI(3).Name, arrCI(3).DateTimeFormat.DateSeparator)
        Console.WriteLine("      Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone(3).Name, arrCIClone(3).DateTimeFormat.DateSeparator)

        ' Replace the DateTimeFormatInfo.DateSeparator for the fourth element in the clone array.
        arrCIClone(3).DateTimeFormat.DateSeparator = "-"

        ' Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
        Console.WriteLine("After changes to the clone:")
        Console.WriteLine("   Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI(3).Name, arrCI(3).DateTimeFormat.DateSeparator)
        Console.WriteLine("      Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone(3).Name, arrCIClone(3).DateTimeFormat.DateSeparator)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(vbTab + "[{0}]:" + vbTab + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The original array contains the following values:
'        [0]:    ar-SA
'        [1]:    en-US
'        [2]:    fr-FR
'        [3]:    ja-JP
'The clone array contains the following values:
'        [0]:    th-TH
'        [1]:    en-US
'        [2]:    fr-FR
'        [3]:    ja-JP
'Before changes to the clone:
'   Original: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
'      Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
'After changes to the clone:
'   Original: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
'      Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is -.

using System;
using System.Globalization;
public class SamplesArray  {

   public static void Main()  {

      // Create and initialize a new CultureInfo array.
      CultureInfo ci0 = new CultureInfo( "ar-SA", false );
      CultureInfo ci1 = new CultureInfo( "en-US", false );
      CultureInfo ci2 = new CultureInfo( "fr-FR", false );
      CultureInfo ci3 = new CultureInfo( "ja-JP", false );
      CultureInfo[] arrCI = new CultureInfo[] { ci0, ci1, ci2, ci3 };

      // Create a clone of the CultureInfo array.
      CultureInfo[] arrCIClone = (CultureInfo[]) arrCI.Clone();

      // Replace an element in the clone array.
      CultureInfo ci4 = new CultureInfo( "th-TH", false );
      arrCIClone[0] = ci4;

      // Display the contents of the original array.
      Console.WriteLine( "The original array contains the following values:" );
      PrintIndexAndValues( arrCI );

      // Display the contents of the clone array.
      Console.WriteLine( "The clone array contains the following values:" );
      PrintIndexAndValues( arrCIClone );

      // Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
      Console.WriteLine( "Before changes to the clone:" );
      Console.WriteLine( "   Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI[3].Name, arrCI[3].DateTimeFormat.DateSeparator );
      Console.WriteLine( "      Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone[3].Name, arrCIClone[3].DateTimeFormat.DateSeparator );

      // Replace the DateTimeFormatInfo.DateSeparator for the fourth element in the clone array.
      arrCIClone[3].DateTimeFormat.DateSeparator = "-";

      // Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
      Console.WriteLine( "After changes to the clone:" );
      Console.WriteLine( "   Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI[3].Name, arrCI[3].DateTimeFormat.DateSeparator );
      Console.WriteLine( "      Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone[3].Name, arrCIClone[3].DateTimeFormat.DateSeparator );

   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }

}

/*
This code produces the following output.

The original array contains the following values:
        [0]:    ar-SA
        [1]:    en-US
        [2]:    fr-FR
        [3]:    ja-JP
The clone array contains the following values:
        [0]:    th-TH
        [1]:    en-US
        [2]:    fr-FR
        [3]:    ja-JP
Before changes to the clone:
   Original: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
      Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
After changes to the clone:
   Original: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
      Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is -.

*/

using namespace System;
using namespace System::Globalization;
void PrintIndexAndValues( Array^ myArray );
int main()
{

   // Create and initialize a new CultureInfo array.
   CultureInfo^ ci0 = gcnew CultureInfo( "ar-SA",false );
   CultureInfo^ ci1 = gcnew CultureInfo( "en-US",false );
   CultureInfo^ ci2 = gcnew CultureInfo( "fr-FR",false );
   CultureInfo^ ci3 = gcnew CultureInfo( "ja-JP",false );
   array<CultureInfo^>^arrCI = {ci0,ci1,ci2,ci3};

   // Create a clone of the CultureInfo array.
   array<CultureInfo^>^arrCIClone = (array<CultureInfo^>^)arrCI->Clone();

   // Replace an element in the clone array.
   CultureInfo^ ci4 = gcnew CultureInfo( "th-TH",false );
   arrCIClone[ 0 ] = ci4;

   // Display the contents of the original array.
   Console::WriteLine( "The original array contains the following values:" );
   PrintIndexAndValues( arrCI );

   // Display the contents of the clone array.
   Console::WriteLine( "The clone array contains the following values:" );
   PrintIndexAndValues( arrCIClone );

   // Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
   Console::WriteLine( "Before changes to the clone:" );
   Console::WriteLine( "   Original: The DateTimeFormatInfo->DateSeparator for {0} is {1}.", arrCI[ 3 ]->Name, arrCI[ 3 ]->DateTimeFormat->DateSeparator );
   Console::WriteLine( "      Clone: The DateTimeFormatInfo->DateSeparator for {0} is {1}.", arrCIClone[ 3 ]->Name, arrCIClone[ 3 ]->DateTimeFormat->DateSeparator );

   // Replace the DateTimeFormatInfo.DateSeparator for the fourth element in the clone array.
   arrCIClone[ 3 ]->DateTimeFormat->DateSeparator = "-";

   // Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
   Console::WriteLine( "After changes to the clone:" );
   Console::WriteLine( "   Original: The DateTimeFormatInfo->DateSeparator for {0} is {1}.", arrCI[ 3 ]->Name, arrCI[ 3 ]->DateTimeFormat->DateSeparator );
   Console::WriteLine( "      Clone: The DateTimeFormatInfo->DateSeparator for {0} is {1}.", arrCIClone[ 3 ]->Name, arrCIClone[ 3 ]->DateTimeFormat->DateSeparator );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine( "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
This code produces the following output.

The original array contains the following values:
        [0]:    ar-SA
        [1]:    en-US
        [2]:    fr-FR
        [3]:    ja-JP
The clone array contains the following values:
        [0]:    th-TH
        [1]:    en-US
        [2]:    fr-FR
        [3]:    ja-JP
Before changes to the clone:
   Original: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
      Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
After changes to the clone:
   Original: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
      Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is -.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
Copy
ConstrainedCopy


Array ..::.ConstrainedCopy 方法

Array
.
.
::
.
ConstrainedCopy 方法
Array 类

从指定的源索引开始，复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从指定的目标索引开始）。保证在复制未成功完成的情况下撤消所有更改。 从指定的源索引开始，复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从指定的目标索引开始）。保证在复制未成功完成的情况下撤消所有更改。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub ConstrainedCopy ( _
    sourceArray As Array, _
    sourceIndex As Integer, _
    destinationArray As Array, _
    destinationIndex As Integer, _
    length As Integer _
)
public static void ConstrainedCopy(
    Array sourceArray,
    int sourceIndex,
    Array destinationArray,
    int destinationIndex,
    int length
)
public:
static void ConstrainedCopy(
    Array^ sourceArray,
    int sourceIndex,
    Array^ destinationArray,
    int destinationIndex,
    int length
)
static member ConstrainedCopy :
        sourceArray:Array *
        sourceIndex:int *
        destinationArray:Array *
        destinationIndex:int *
        length:int -> unit

参数

sourceArray
类型： System Array
Array，它包含要复制的数据。
sourceIndex
类型： System Int32
一个 32 位整数，它表示 sourceArray 中复制开始处的索引。
destinationArray
类型： System Array
Array，它接收数据。
destinationIndex
类型： System Int32
一个 32 位整数，它表示 destinationArray 中存储开始处的索引。
length
类型： System Int32
一个 32 位整数，它表示要复制的元素数目。
异常 | 条件
ArgumentNullException | sourceArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - destinationArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | sourceArray 和 destinationArray 的秩不同。
ArrayTypeMismatchException | sourceArray 类型不同于并且不是从 destinationArray 类型派生的。
InvalidCastException | sourceArray 中的至少一个元素无法强制转换为 destinationArray 类型。
ArgumentOutOfRangeException | sourceIndex 小于 sourceArray 的第一维的下限。 - 或 - destinationIndex 小于 destinationArray 的第一维的下限。 - 或 - length 小于零。
ArgumentException | length 大于从 sourceIndex 到 sourceArray 末尾的元素数。 - 或 - length 大于从 destinationIndex 到 destinationArray 末尾的元素数。

sourceArray 和 destinationArray 参数必须具有相同的维数。sourceArray 类型必须等同于或从 destinationArray 类型派生，否则将引发 ArrayTypeMismatchException 异常。与 Copy 不同，ConstrainedCopy 在执行任何操作前都将验证数组类型的兼容性。 sourceArray 和 destinationArray 参数必须具有相同的维数。sourceArray 类型必须等同于或从 destinationArray 类型派生，否则将引发 ArrayTypeMismatchException 异常。与 Copy 不同，ConstrainedCopy 在执行任何操作前都将验证数组类型的兼容性。 sourceArray 和 destinationArray 参数必须具有相同的维数。sourceArray 类型必须等同于或从 destinationArray 类型派生，否则将引发 ArrayTypeMismatchException 异常。与 Copy 不同，ConstrainedCopy 在执行任何操作前都将验证数组类型的兼容性。

在多维数组之间复制时，数组像一维长数组那样操作，其中各行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。若要从第三行（或列）的第二个元素开始复制，则 sourceIndex 必须是第一行（或列）的上限加上第二行（或列）的长度再加上 2 之和。 在多维数组之间复制时，数组像一维长数组那样操作，其中各行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。若要从第三行（或列）的第二个元素开始复制，则 sourceIndex 必须是第一行（或列）的上限加上第二行（或列）的长度再加上 2 之和。 在多维数组之间复制时，数组像一维长数组那样操作，其中各行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。若要从第三行（或列）的第二个元素开始复制，则 sourceIndex 必须是第一行（或列）的上限加上第二行（或列）的长度再加上 2 之和。

如果 sourceArray 和 destinationArray 重叠，那么在覆盖 destinationArray 之前，此方法的行为好像 sourceArray 的原始值保留在临时位置那样。

此方法等效于标准 C/C++ 函数 memmove，而不是 memcpy。

数组可以是引用类型的数组或值类型的数组。如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 数组可以是引用类型的数组或值类型的数组。如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 数组可以是引用类型的数组或值类型的数组。如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 数组可以是引用类型的数组或值类型的数组。如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 数组可以是引用类型的数组或值类型的数组。如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。

如果此方法在复制时引发异常，destinationArray 将保持不变；因此，ConstrainedCopy 可在受约束的执行区域 (Cer) 中使用。

此方法的运算复杂度为 O(n)，其中 n 是 length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间
Copy
Clone
System.Runtime.ConstrainedExecution ReliabilityContractAttribute
Cer


Array ..::.ConvertAll <(Of <(TInput, TOutput >)>) 方法

Array
.
.
::
.
ConvertAll
<
(Of
<
(
TInput, TOutput
>
)
>
)
方法
Array 类

将一种类型的数组转换为另一种类型的数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertAll(Of TInput, TOutput) ( _
    array As TInput(), _
    converter As Converter(Of TInput, TOutput) _
) As TOutput()
public static TOutput[] ConvertAll<TInput, TOutput>(
    TInput[] array,
    Converter<TInput, TOutput> converter
)

public:
generic<typename TInput, typename TOutput>
static array<TOutput>^ ConvertAll(
    array<TInput>^ array,
    Converter<TInput, TOutput>^ converter
)
static member ConvertAll :
        array:'TInput[] *
        converter:Converter<'TInput, 'TOutput> -> 'TOutput[]

类型参数

TInput

源数组元素的类型。

TOutput

目标数组元素的类型。

参数

array
类型：
array<
TInput
>
[]
()
[]

要转换为目标类型的从零开始的一维 Array。
converter
类型： System Converter
<
(Of
<
(
TInput, TOutput
>
)
>
)

一个 Converter<(Of <(TInput, TOutput>)>)，用于将每个元素从一种类型转换为另一种类型。

返回值

类型：
array<
TOutput
>
[]
()
[]

目标类型的数组，包含从源数组转换而来的元素。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - converter 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Converter<(Of <(TInput, TOutput>)>) 是对方法的委托，它将对象转换为目标类型。array 的元素被逐个传递给 Converter<(Of <(TInput, TOutput>)>)，转换后的元素保存在新数组中。 Converter<(Of <(TInput, TOutput>)>) 是对方法的委托，它将对象转换为目标类型。array 的元素被逐个传递给 Converter<(Of <(TInput, TOutput>)>)，转换后的元素保存在新数组中。

源 array 保持不变。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建一个 PointF 结构的数组和一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）来表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TInput, TOutput>)>) 方法。ConvertAll<(Of <(TInput, TOutput>)>) 方法将输入列表中的每个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。 下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建一个 PointF 结构的数组和一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）来表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TInput, TOutput>)>) 方法。ConvertAll<(Of <(TInput, TOutput>)>) 方法将输入列表中的每个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。 下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建一个 PointF 结构的数组和一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）来表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TInput, TOutput>)>) 方法。ConvertAll<(Of <(TInput, TOutput>)>) 方法将输入列表中的每个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。 下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建一个 PointF 结构的数组和一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）来表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TInput, TOutput>)>) 方法。ConvertAll<(Of <(TInput, TOutput>)>) 方法将输入列表中的每个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。

Imports System
Imports System.Drawing
Imports System.Collections.Generic

Public Class Example

    Public Shared Sub Main()

        Dim apf() As PointF = { _
            New PointF(27.8, 32.62), _
            New PointF(99.3, 147.273), _
            New PointF(7.5, 1412.2)  }

        Console.WriteLine()
        For Each p As PointF In apf
            Console.WriteLine(p)
        Next

        Dim ap() As Point = Array.ConvertAll(apf, _
            New Converter(Of PointF, Point)(AddressOf PointFToPoint))

        Console.WriteLine()
        For Each p As Point In ap
            Console.WriteLine(p)
        Next

    End Sub

    Public Shared Function PointFToPoint(ByVal pf As PointF) _
        As Point

        Return New Point(CInt(pf.X), CInt(pf.Y))
    End Function
End Class

' This code example produces the following output:
'
'{X=27.8, Y=32.62}
'{X=99.3, Y=147.273}
'{X=7.5, Y=1412.2}
'
'{X=28,Y=33}
'{X=99,Y=147}
'{X=8,Y=1412}

using System;
using System.Drawing;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        PointF[] apf = {
            new PointF(27.8F, 32.62F),
            new PointF(99.3F, 147.273F),
            new PointF(7.5F, 1412.2F) };

        Console.WriteLine();
        foreach( PointF p in apf )
        {
            Console.WriteLine(p);
        }

        Point[] ap = Array.ConvertAll(apf,
            new Converter<PointF, Point>(PointFToPoint));

        Console.WriteLine();
        foreach( Point p in ap )
        {
            Console.WriteLine(p);
        }
    }

    public static Point PointFToPoint(PointF pf)
    {
        return new Point(((int) pf.X), ((int) pf.Y));
    }
}

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}

{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
 */

#using <System.Drawing.dll>

using namespace System;
using namespace System::Drawing;
using namespace System::Collections::Generic;

Point PointFToPoint(PointF pf)
{
    return Point((int) pf.X, (int) pf.Y);
};

void main()
{
    array<PointF>^ apf = {
        PointF(27.8F, 32.62F),
        PointF(99.3F, 147.273F),
        PointF(7.5F, 1412.2F) };

    Console::WriteLine();
    for each(PointF p in apf)
    {
        Console::WriteLine(p);
    }

    array<Point>^ ap =
        Array::ConvertAll(apf,
            gcnew Converter<PointF, Point>(PointFToPoint)
        );

    Console::WriteLine();
    for each(Point p in ap)
    {
        Console::WriteLine(p);
    }
}

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}

{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间
Converter TInput, TOutput


Array ..::.Copy 方法

Array
.
.
::
.
Copy 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

将一个 Array 的一部分元素复制到另一个 Array 中，并根据需要执行类型强制转换和装箱。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.Copy 方法 (Array, Array, Int32)

Array
.
.
::
.
Copy 方法 (Array, Array, Int32)
Array 类

从第一个元素开始复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从第一个元素开始）。长度指定为 32 位整数。 从第一个元素开始复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从第一个元素开始）。长度指定为 32 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Copy ( _
    sourceArray As Array, _
    destinationArray As Array, _
    length As Integer _
)
public static void Copy(
    Array sourceArray,
    Array destinationArray,
    int length
)
public:
static void Copy(
    Array^ sourceArray,
    Array^ destinationArray,
    int length
)
static member Copy :
        sourceArray:Array *
        destinationArray:Array *
        length:int -> unit

参数

sourceArray
类型： System Array
Array，它包含要复制的数据。
destinationArray
类型： System Array
Array，它接收数据。
length
类型： System Int32
一个 32 位整数，它表示要复制的元素数目。
异常 | 条件
ArgumentNullException | sourceArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - destinationArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | sourceArray 和 destinationArray 的秩不同。
ArrayTypeMismatchException | sourceArray 和 destinationArray 是不兼容的类型。
InvalidCastException | sourceArray 中的至少一个元素无法强制转换为 destinationArray 类型。
ArgumentOutOfRangeException | length 小于零。
ArgumentException | length 大于 sourceArray 中的元素数。 - 或 - length 大于 destinationArray 中的元素数。

sourceArray 和 destinationArray 参数必须具有相同的维数。

当在多维数组之间复制时，数组像长一维数组那样操作，在此行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。 当在多维数组之间复制时，数组像长一维数组那样操作，在此行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。

如果 sourceArray 和 destinationArray 重叠，那么在覆盖 destinationArray 之前，此方法的行为好像 sourceArray 的原始值保留在临时位置那样。

此方法等效于标准 C/C++ 函数 memmove，而不是 memcpy。

数组可以是引用类型的数组或值类型的数组。按需要执行类型向下转换。 数组可以是引用类型的数组或值类型的数组。按需要执行类型向下转换。

  • 在从引用类型的数组复制到值类型的数组时，每一个元素都要取消装箱，然后再复制。在从值类型的数组复制到引用类型的数组时，每一个元素都要装箱，然后再复制。 在从引用类型的数组复制到值类型的数组时，每一个元素都要取消装箱，然后再复制。在从值类型的数组复制到引用类型的数组时，每一个元素都要装箱，然后再复制。

  • 在从引用类型或值类型的数组复制到 Object 数组时，会创建 Object 以保存每一个值或引用，然后再复制。在从 Object 数组复制到引用类型或值类型的数组，且不可能进行分配时，将引发 InvalidCastException。 在从引用类型或值类型的数组复制到 Object 数组时，会创建 Object 以保存每一个值或引用，然后再复制。在从 Object 数组复制到引用类型或值类型的数组，且不可能进行分配时，将引发 InvalidCastException。

  • 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。

如果数组是不兼容的类型，则会引发 ArrayTypeMismatchException。类型兼容性的定义如下： 如果数组是不兼容的类型，则会引发 ArrayTypeMismatchException。类型兼容性的定义如下：

  • 类型与其本身兼容。

  • 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。

  • 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。

  • 非内部（用户定义）值类型只与其本身兼容。

  • 枚举具有到 Enum 的隐式转换，也有到其基础类型的隐式转换。

如果 sourceArray 中的每个元素都要求向下转换（例如，从基类转换到派生类或从接口转换到对象），且一个或多个元素无法强制转换为 destinationArray 中的对应类型，则会引发 InvalidCastException。

如果此方法在复制时引发异常，则 destinationArray 的状态未定义。

此方法的运算复杂度为 O(n)，其中 n 是 length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Copy 重载
System 命名空间
ConstrainedCopy
Clone


Array ..::.Copy 方法 (Array, Array, Int64)

Array
.
.
::
.
Copy 方法 (Array, Array, Int64)
Array 类

从第一个元素开始复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从第一个元素开始）。长度指定为 64 位整数。 从第一个元素开始复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从第一个元素开始）。长度指定为 64 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Copy ( _
    sourceArray As Array, _
    destinationArray As Array, _
    length As Long _
)
public static void Copy(
    Array sourceArray,
    Array destinationArray,
    long length
)
public:
static void Copy(
    Array^ sourceArray,
    Array^ destinationArray,
    long long length
)
static member Copy :
        sourceArray:Array *
        destinationArray:Array *
        length:int64 -> unit

参数

sourceArray
类型： System Array
Array，它包含要复制的数据。
destinationArray
类型： System Array
Array，它接收数据。
length
类型： System Int64
一个 64 位整数，它表示要复制的元素数目。该整数必须介于零和 Int32..::.MaxValue 之间（均含）。 一个 64 位整数，它表示要复制的元素数目。该整数必须介于零和 Int32..::.MaxValue 之间（均含）。
异常 | 条件
ArgumentNullException | sourceArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - destinationArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | sourceArray 和 destinationArray 的秩不同。
ArrayTypeMismatchException | sourceArray 和 destinationArray 是不兼容的类型。
InvalidCastException | sourceArray 中的至少一个元素无法强制转换为 destinationArray 类型。
ArgumentOutOfRangeException | length 小于零或大于 Int32..::.MaxValue。
ArgumentException | length 大于 sourceArray 中的元素数。 - 或 - length 大于 destinationArray 中的元素数。

sourceArray 和 destinationArray 参数必须具有相同的维数。

当在多维数组之间复制时，数组像长一维数组那样操作，在此行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。 当在多维数组之间复制时，数组像长一维数组那样操作，在此行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。

如果 sourceArray 和 destinationArray 重叠，那么在覆盖 destinationArray 之前，此方法的行为好像 sourceArray 的原始值保留在临时位置那样。

此方法等效于标准 C/C++ 函数 memmove，而不是 memcpy。

数组可以是引用类型的数组或值类型的数组。按需要执行类型向下转换。 数组可以是引用类型的数组或值类型的数组。按需要执行类型向下转换。

  • 在从引用类型的数组复制到值类型的数组时，每一个元素都要取消装箱，然后再复制。在从值类型的数组复制到引用类型的数组时，每一个元素都要装箱，然后再复制。 在从引用类型的数组复制到值类型的数组时，每一个元素都要取消装箱，然后再复制。在从值类型的数组复制到引用类型的数组时，每一个元素都要装箱，然后再复制。

  • 在从引用类型或值类型的数组复制到 Object 数组时，会创建 Object 以保存每一个值或引用，然后再复制。在从 Object 数组复制到引用类型或值类型的数组，且不可能进行分配时，将引发 InvalidCastException。 在从引用类型或值类型的数组复制到 Object 数组时，会创建 Object 以保存每一个值或引用，然后再复制。在从 Object 数组复制到引用类型或值类型的数组，且不可能进行分配时，将引发 InvalidCastException。

  • 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。

如果数组是不兼容的类型，则会引发 ArrayTypeMismatchException。类型兼容性的定义如下： 如果数组是不兼容的类型，则会引发 ArrayTypeMismatchException。类型兼容性的定义如下：

  • 类型与其本身兼容。

  • 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。

  • 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。

  • 非内部（用户定义）值类型只与其本身兼容。

  • 枚举具有到 Enum 的隐式转换，也有到其基础类型的隐式转换。

如果 sourceArray 中的每个元素都要求向下转换（例如，从基类转换到派生类或从接口转换到对象），且一个或多个元素无法强制转换为 destinationArray 中的对应类型，则会引发 InvalidCastException。

如果此方法在复制时引发异常，则 destinationArray 的状态未定义。

此方法的运算复杂度为 O(n)，其中 n 是 length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
Copy 重载
System 命名空间
ConstrainedCopy
Clone


Array ..::.Copy 方法 (Array, Int32, Array, Int32, Int32)

Array
.
.
::
.
Copy 方法 (Array, Int32, Array, Int32, Int32)
Array 类

从指定的源索引开始，复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从指定的目标索引开始）。长度和索引指定为 32 位整数。 从指定的源索引开始，复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从指定的目标索引开始）。长度和索引指定为 32 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Copy ( _
    sourceArray As Array, _
    sourceIndex As Integer, _
    destinationArray As Array, _
    destinationIndex As Integer, _
    length As Integer _
)
public static void Copy(
    Array sourceArray,
    int sourceIndex,
    Array destinationArray,
    int destinationIndex,
    int length
)
public:
static void Copy(
    Array^ sourceArray,
    int sourceIndex,
    Array^ destinationArray,
    int destinationIndex,
    int length
)
static member Copy :
        sourceArray:Array *
        sourceIndex:int *
        destinationArray:Array *
        destinationIndex:int *
        length:int -> unit

参数

sourceArray
类型： System Array
Array，它包含要复制的数据。
sourceIndex
类型： System Int32
一个 32 位整数，它表示 sourceArray 中复制开始处的索引。
destinationArray
类型： System Array
Array，它接收数据。
destinationIndex
类型： System Int32
一个 32 位整数，它表示 destinationArray 中存储开始处的索引。
length
类型： System Int32
一个 32 位整数，它表示要复制的元素数目。
异常 | 条件
ArgumentNullException | sourceArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - destinationArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | sourceArray 和 destinationArray 的秩不同。
ArrayTypeMismatchException | sourceArray 和 destinationArray 是不兼容的类型。
InvalidCastException | sourceArray 中的至少一个元素无法强制转换为 destinationArray 类型。
ArgumentOutOfRangeException | sourceIndex 小于 sourceArray 的第一维的下限。 - 或 - destinationIndex 小于 destinationArray 的第一维的下限。 - 或 - length 小于零。
ArgumentException | length 大于从 sourceIndex 到 sourceArray 末尾的元素数。 - 或 - length 大于从 destinationIndex 到 destinationArray 末尾的元素数。

sourceArray 和 destinationArray 参数必须具有相同的维数。

在多维数组之间复制时，数组像一维长数组那样操作，其中各行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。若要从第三行（或列）的第二个元素开始复制，则 sourceIndex 必须是第一行（或列）的上限加上第二行（或列）的长度再加上 2 之和。 在多维数组之间复制时，数组像一维长数组那样操作，其中各行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。若要从第三行（或列）的第二个元素开始复制，则 sourceIndex 必须是第一行（或列）的上限加上第二行（或列）的长度再加上 2 之和。 在多维数组之间复制时，数组像一维长数组那样操作，其中各行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。若要从第三行（或列）的第二个元素开始复制，则 sourceIndex 必须是第一行（或列）的上限加上第二行（或列）的长度再加上 2 之和。

如果 sourceArray 和 destinationArray 重叠，那么在覆盖 destinationArray 之前，此方法的行为好像 sourceArray 的原始值保留在临时位置那样。

此方法等效于标准 C/C++ 函数 memmove，而不是 memcpy。

数组可以是引用类型的数组或值类型的数组。按需要执行类型向下转换。 数组可以是引用类型的数组或值类型的数组。按需要执行类型向下转换。

  • 在从引用类型的数组复制到值类型的数组时，每一个元素都要取消装箱，然后再复制。在从值类型的数组复制到引用类型的数组时，每一个元素都要装箱，然后再复制。 在从引用类型的数组复制到值类型的数组时，每一个元素都要取消装箱，然后再复制。在从值类型的数组复制到引用类型的数组时，每一个元素都要装箱，然后再复制。

  • 在从引用类型或值类型的数组复制到 Object 数组时，会创建 Object 以保存每一个值或引用，然后再复制。在从 Object 数组复制到引用类型或值类型的数组，且不可能进行分配时，将引发 InvalidCastException。 在从引用类型或值类型的数组复制到 Object 数组时，会创建 Object 以保存每一个值或引用，然后再复制。在从 Object 数组复制到引用类型或值类型的数组，且不可能进行分配时，将引发 InvalidCastException。

  • 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。

如果数组是不兼容的类型，则会引发 ArrayTypeMismatchException。类型兼容性的定义如下： 如果数组是不兼容的类型，则会引发 ArrayTypeMismatchException。类型兼容性的定义如下：

  • 类型与其本身兼容。

  • 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。

  • 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。

  • 非内部（用户定义）值类型只与其本身兼容。

  • 枚举具有到 Enum 的隐式转换，也有到其基础类型的隐式转换。

如果 sourceArray 中的每个元素都要求向下转换（例如，从基类转换到派生类或从接口转换到对象），且一个或多个元素无法强制转换为 destinationArray 中的对应类型，则会引发 InvalidCastException。

如果此方法在复制时引发异常，则 destinationArray 的状态未定义。

此方法的运算复杂度为 O(n)，其中 n 是 length。

下面的代码示例说明如何从一个 Object 类型的 Array 复制到 integer 类型的另一个 Array。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array of type Int32.
        Dim myIntArray As Array = _
           Array.CreateInstance(GetType(System.Int32), 5)
        Dim i As Integer
        For i = myIntArray.GetLowerBound(0) To myIntArray.GetUpperBound(0)
            myIntArray.SetValue(i + 1, i)
        Next i
        ' Creates and initializes a new Array of type Object.
        Dim myObjArray As Array = _
           Array.CreateInstance(GetType(System.Object), 5)
        For i = myObjArray.GetLowerBound(0) To myObjArray.GetUpperBound(0)
            myObjArray.SetValue(i + 26, i)
        Next i
        ' Displays the initial values of both arrays.
        Console.WriteLine("Int32 array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array:")
        PrintValues(myObjArray)

        ' Copies the first element from the Int32 array to the Object array.
        Array.Copy(myIntArray, myIntArray.GetLowerBound(0), myObjArray, _
           myObjArray.GetLowerBound(0), 1)

        ' Copies the last two elements from the Object array to the Int32 array.
        Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, _
           myIntArray.GetUpperBound(0) - 1, 2)

        ' Displays the values of the modified arrays.
        Console.WriteLine("Int32 array - Last two elements should now be " _
           + "the same as Object array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array - First element should now be the " _
           + "same as Int32 array:")
        PrintValues(myObjArray)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength((myArr.Rank - 1))
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' Int32 array:
'     1    2    3    4    5
' Object array:
'     26    27    28    29    30
' Int32 array - Last two elements should now be the same as Object array:
'     1    2    3    29    30
' Object array - First element should now be the same as Int32 array:
'     1    27    28    29    30

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array of type Int32.
      Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );
      for ( int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++ )
         myIntArray.SetValue( i+1, i );

      // Creates and initializes a new Array of type Object.
      Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );
      for ( int i = myObjArray.GetLowerBound(0); i <= myObjArray.GetUpperBound(0); i++ )
         myObjArray.SetValue( i+26, i );

      // Displays the initial values of both arrays.
      Console.WriteLine( "Int32 array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array:" );
      PrintValues( myObjArray );

      // Copies the first element from the Int32 array to the Object array.
      Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

      // Copies the last two elements from the Object array to the Int32 array.
      Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );

      // Displays the values of the modified arrays.
      Console.WriteLine( "Int32 array - Last two elements should now be the same as Object array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array - First element should now be the same as Int32 array:" );
      PrintValues( myObjArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

Int32 array:
    1    2    3    4    5
Object array:
    26    27    28    29    30
Int32 array - Last two elements should now be the same as Object array:
    1    2    3    29    30
Object array - First element should now be the same as Int32 array:
    1    27    28    29    30
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{

   // Creates and initializes a new Array instance of type Int32.
   Array^ myIntArray = Array::CreateInstance( Type::GetType(  "System.Int32" ), 5 );
   for ( int i = myIntArray->GetLowerBound( 0 ); i <= myIntArray->GetUpperBound( 0 ); i++ )
      myIntArray->SetValue( i + 1, i );

   // Creates and initializes a new Array instance of type Object.
   Array^ myObjArray = Array::CreateInstance( Type::GetType(  "System.Object" ), 5 );
   for ( int i = myObjArray->GetLowerBound( 0 ); i <= myObjArray->GetUpperBound( 0 ); i++ )
      myObjArray->SetValue( i + 26, i );

   // Displays the initial values of both arrays.
   Console::WriteLine(  "Int32 array:" );
   PrintValues( myIntArray );
   Console::WriteLine(  "Object array:" );
   PrintValues( myObjArray );

   // Copies the first element from the Int32 array to the Object array.
   Array::Copy( myIntArray, myIntArray->GetLowerBound( 0 ), myObjArray, myObjArray->GetLowerBound( 0 ), 1 );

   // Copies the last two elements from the Object array to the Int32 array.
   Array::Copy( myObjArray, myObjArray->GetUpperBound( 0 ) - 1, myIntArray, myIntArray->GetUpperBound( 0 ) - 1, 2 );

   // Displays the values of the modified arrays.
   Console::WriteLine(  "Int32 array - Last two elements should now be the same as Object array:" );
   PrintValues( myIntArray );
   Console::WriteLine(  "Object array - First element should now be the same as Int32 array:" );
   PrintValues( myObjArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Int32 array:
     1    2    3    4    5
 Object array:
     26    27    28    29    30
 Int32 array - Last two elements should now be the same as Object array:
     1    2    3    29    30
 Object array - First element should now be the same as Int32 array:
     1    27    28    29    30
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Copy 重载
System 命名空间
ConstrainedCopy
Clone


Array ..::.Copy 方法 (Array, Int64, Array, Int64, Int64)

Array
.
.
::
.
Copy 方法 (Array, Int64, Array, Int64, Int64)
Array 类

从指定的源索引开始，复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从指定的目标索引开始）。长度和索引指定为 64 位整数。 从指定的源索引开始，复制 Array 中的一系列元素，将它们粘贴到另一 Array 中（从指定的目标索引开始）。长度和索引指定为 64 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Copy ( _
    sourceArray As Array, _
    sourceIndex As Long, _
    destinationArray As Array, _
    destinationIndex As Long, _
    length As Long _
)
public static void Copy(
    Array sourceArray,
    long sourceIndex,
    Array destinationArray,
    long destinationIndex,
    long length
)
public:
static void Copy(
    Array^ sourceArray,
    long long sourceIndex,
    Array^ destinationArray,
    long long destinationIndex,
    long long length
)
static member Copy :
        sourceArray:Array *
        sourceIndex:int64 *
        destinationArray:Array *
        destinationIndex:int64 *
        length:int64 -> unit

参数

sourceArray
类型： System Array
Array，它包含要复制的数据。
sourceIndex
类型： System Int64
一个 64 位整数，它表示 sourceArray 中复制开始处的索引。
destinationArray
类型： System Array
Array，它接收数据。
destinationIndex
类型： System Int64
一个 64 位整数，它表示 destinationArray 中存储开始处的索引。
length
类型： System Int64
一个 64 位整数，它表示要复制的元素数目。该整数必须介于零和 Int32..::.MaxValue 之间（均含）。 一个 64 位整数，它表示要复制的元素数目。该整数必须介于零和 Int32..::.MaxValue 之间（均含）。
异常 | 条件
ArgumentNullException | sourceArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - destinationArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | sourceArray 和 destinationArray 的秩不同。
ArrayTypeMismatchException | sourceArray 和 destinationArray 是不兼容的类型。
InvalidCastException | sourceArray 中的至少一个元素无法强制转换为 destinationArray 类型。
ArgumentOutOfRangeException | sourceIndex 不在 sourceArray 的有效索引范围内。 - 或 - destinationIndex 不在 destinationArray 的有效索引范围内。 - 或 - length 小于零或大于 Int32..::.MaxValue。
ArgumentException | length 大于从 sourceIndex 到 sourceArray 末尾的元素数。 - 或 - length 大于从 destinationIndex 到 destinationArray 末尾的元素数。

sourceArray 和 destinationArray 参数必须具有相同的维数。

在多维数组之间复制时，数组像一维长数组那样操作，其中各行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。若要从第三行（或列）的第二个元素开始复制，则 sourceIndex 必须是第一行（或列）的上限加上第二行（或列）的长度再加上 2 之和。 在多维数组之间复制时，数组像一维长数组那样操作，其中各行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。若要从第三行（或列）的第二个元素开始复制，则 sourceIndex 必须是第一行（或列）的上限加上第二行（或列）的长度再加上 2 之和。 在多维数组之间复制时，数组像一维长数组那样操作，其中各行（或列）在概念上首尾相连。例如，如果一个数组有三行（或列），每一行（或列）带有四个元素，若要从数组的开始复制六个元素，则会复制第一行（或列）的所有四个元素和第二行（或列）的头两个元素。若要从第三行（或列）的第二个元素开始复制，则 sourceIndex 必须是第一行（或列）的上限加上第二行（或列）的长度再加上 2 之和。

如果 sourceArray 和 destinationArray 重叠，那么在覆盖 destinationArray 之前，此方法的行为好像 sourceArray 的原始值保留在临时位置那样。

此方法等效于标准 C/C++ 函数 memmove，而不是 memcpy。

数组可以是引用类型的数组或值类型的数组。按需要执行类型向下转换。 数组可以是引用类型的数组或值类型的数组。按需要执行类型向下转换。

  • 在从引用类型的数组复制到值类型的数组时，每一个元素都要取消装箱，然后再复制。在从值类型的数组复制到引用类型的数组时，每一个元素都要装箱，然后再复制。 在从引用类型的数组复制到值类型的数组时，每一个元素都要取消装箱，然后再复制。在从值类型的数组复制到引用类型的数组时，每一个元素都要装箱，然后再复制。

  • 在从引用类型或值类型的数组复制到 Object 数组时，会创建 Object 以保存每一个值或引用，然后再复制。在从 Object 数组复制到引用类型或值类型的数组，且不可能进行分配时，将引发 InvalidCastException。 在从引用类型或值类型的数组复制到 Object 数组时，会创建 Object 以保存每一个值或引用，然后再复制。在从 Object 数组复制到引用类型或值类型的数组，且不可能进行分配时，将引发 InvalidCastException。

  • 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组，则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下，Array 的深层副本会复制元素和元素直接或间接引用的一切。

如果数组是不兼容的类型，则会引发 ArrayTypeMismatchException。类型兼容性的定义如下： 如果数组是不兼容的类型，则会引发 ArrayTypeMismatchException。类型兼容性的定义如下：

  • 类型与其本身兼容。

  • 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。 值类型与 Object 兼容，也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时，该值类型才算与该接口连接。断开连接的类型不兼容。

  • 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。 如果从源类型复制到目标类型是扩大转换，则两个内部（预定义）值类型兼容。扩大转换从不会丢失信息，而收缩转换可能会丢失信息。例如，将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换，而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息，请参见 Convert。

  • 非内部（用户定义）值类型只与其本身兼容。

  • 枚举具有到 Enum 的隐式转换，也有到其基础类型的隐式转换。

如果 sourceArray 中的每个元素都要求向下转换（例如，从基类转换到派生类或从接口转换到对象），且一个或多个元素无法强制转换为 destinationArray 中的对应类型，则会引发 InvalidCastException。

如果此方法在复制时引发异常，则 destinationArray 的状态未定义。

此方法的运算复杂度为 O(n)，其中 n 是 length。

下面的代码示例说明如何从一个 Object 类型的 Array 复制到 integer 类型的另一个 Array。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array of type Int32.
        Dim myIntArray As Array = _
           Array.CreateInstance(GetType(System.Int32), 5)
        Dim i As Integer
        For i = myIntArray.GetLowerBound(0) To myIntArray.GetUpperBound(0)
            myIntArray.SetValue(i + 1, i)
        Next i
        ' Creates and initializes a new Array of type Object.
        Dim myObjArray As Array = _
           Array.CreateInstance(GetType(System.Object), 5)
        For i = myObjArray.GetLowerBound(0) To myObjArray.GetUpperBound(0)
            myObjArray.SetValue(i + 26, i)
        Next i
        ' Displays the initial values of both arrays.
        Console.WriteLine("Int32 array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array:")
        PrintValues(myObjArray)

        ' Copies the first element from the Int32 array to the Object array.
        Array.Copy(myIntArray, myIntArray.GetLowerBound(0), myObjArray, _
           myObjArray.GetLowerBound(0), 1)

        ' Copies the last two elements from the Object array to the Int32 array.
        Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, _
           myIntArray.GetUpperBound(0) - 1, 2)

        ' Displays the values of the modified arrays.
        Console.WriteLine("Int32 array - Last two elements should now be " _
           + "the same as Object array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array - First element should now be the " _
           + "same as Int32 array:")
        PrintValues(myObjArray)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength((myArr.Rank - 1))
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' Int32 array:
'     1    2    3    4    5
' Object array:
'     26    27    28    29    30
' Int32 array - Last two elements should now be the same as Object array:
'     1    2    3    29    30
' Object array - First element should now be the same as Int32 array:
'     1    27    28    29    30

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array of type Int32.
      Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );
      for ( int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++ )
         myIntArray.SetValue( i+1, i );

      // Creates and initializes a new Array of type Object.
      Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );
      for ( int i = myObjArray.GetLowerBound(0); i <= myObjArray.GetUpperBound(0); i++ )
         myObjArray.SetValue( i+26, i );

      // Displays the initial values of both arrays.
      Console.WriteLine( "Int32 array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array:" );
      PrintValues( myObjArray );

      // Copies the first element from the Int32 array to the Object array.
      Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

      // Copies the last two elements from the Object array to the Int32 array.
      Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );

      // Displays the values of the modified arrays.
      Console.WriteLine( "Int32 array - Last two elements should now be the same as Object array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array - First element should now be the same as Int32 array:" );
      PrintValues( myObjArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

Int32 array:
    1    2    3    4    5
Object array:
    26    27    28    29    30
Int32 array - Last two elements should now be the same as Object array:
    1    2    3    29    30
Object array - First element should now be the same as Int32 array:
    1    27    28    29    30
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{

   // Creates and initializes a new Array instance of type Int32.
   Array^ myIntArray = Array::CreateInstance( Type::GetType(  "System.Int32" ), 5 );
   for ( int i = myIntArray->GetLowerBound( 0 ); i <= myIntArray->GetUpperBound( 0 ); i++ )
      myIntArray->SetValue( i + 1, i );

   // Creates and initializes a new Array instance of type Object.
   Array^ myObjArray = Array::CreateInstance( Type::GetType(  "System.Object" ), 5 );
   for ( int i = myObjArray->GetLowerBound( 0 ); i <= myObjArray->GetUpperBound( 0 ); i++ )
      myObjArray->SetValue( i + 26, i );

   // Displays the initial values of both arrays.
   Console::WriteLine(  "Int32 array:" );
   PrintValues( myIntArray );
   Console::WriteLine(  "Object array:" );
   PrintValues( myObjArray );

   // Copies the first element from the Int32 array to the Object array.
   Array::Copy( myIntArray, myIntArray->GetLowerBound( 0 ), myObjArray, myObjArray->GetLowerBound( 0 ), 1 );

   // Copies the last two elements from the Object array to the Int32 array.
   Array::Copy( myObjArray, myObjArray->GetUpperBound( 0 ) - 1, myIntArray, myIntArray->GetUpperBound( 0 ) - 1, 2 );

   // Displays the values of the modified arrays.
   Console::WriteLine(  "Int32 array - Last two elements should now be the same as Object array:" );
   PrintValues( myIntArray );
   Console::WriteLine(  "Object array - First element should now be the same as Int32 array:" );
   PrintValues( myObjArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Int32 array:
     1    2    3    4    5
 Object array:
     26    27    28    29    30
 Int32 array - Last two elements should now be the same as Object array:
     1    2    3    29    30
 Object array - First element should now be the same as Int32 array:
     1    27    28    29    30
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
Copy 重载
System 命名空间
ConstrainedCopy
Clone


Array ..::.CopyTo 方法

Array
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

将当前一维 Array 的所有元素复制到指定的一维 Array 中。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.CopyTo 方法 (Array, Int32)

Array
.
.
::
.
CopyTo 方法 (Array, Int32)
Array 类

将当前一维 Array 的所有元素复制到指定的一维 Array 中（从指定的目标 Array 索引开始）。索引指定为 32 位整数。 将当前一维 Array 的所有元素复制到指定的一维 Array 中（从指定的目标 Array 索引开始）。索引指定为 32 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
public void CopyTo(
    Array array,
    int index
)
public:
virtual void CopyTo(
    Array^ array,
    int index
) sealed
abstract CopyTo :
        array:Array *
        index:int -> unit
override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
一维 Array，它是从当前 Array 复制的元素的目标位置。
index
类型： System Int32
一个 32 位整数，它表示 array 中复制开始处的索引。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于 array 的下限。
ArgumentException | array 是多维数组。 - 或 - 源 Array 中的元素数大于从 index 到目标 array 结尾处之间的可用空间。
ArrayTypeMismatchException | 无法自动将源 Array 的类型强制转换为目标 array 的类型。
RankException | 源 Array 是多维的。
InvalidCastException | 源 Array 中至少有一个元素无法强制转换为目标 array 的类型。

此方法支持 System.Collections..::.ICollection 接口。如果未明确要求实现 System.Collections..::.ICollection，请使用 Copy 以避免额外的间接寻址。 此方法支持 System.Collections..::.ICollection 接口。如果未明确要求实现 System.Collections..::.ICollection，请使用 Copy 以避免额外的间接寻址。

如果此方法在复制时引发异常，则 array 的状态未定义。

此方法为 O(n) 操作，其中 n 是 Length。

下面的代码示例说明如何将一个 Array 复制到另一个 Array 中。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes two new Arrays.
        Dim mySourceArray As Array = Array.CreateInstance(GetType(String), 6)
        mySourceArray.SetValue("three", 0)
        mySourceArray.SetValue("napping", 1)
        mySourceArray.SetValue("cats", 2)
        mySourceArray.SetValue("in", 3)
        mySourceArray.SetValue("the", 4)
        mySourceArray.SetValue("barn", 5)
        Dim myTargetArray As Array = Array.CreateInstance(GetType(String), 15)
        myTargetArray.SetValue("The", 0)
        myTargetArray.SetValue("quick", 1)
        myTargetArray.SetValue("brown", 2)
        myTargetArray.SetValue("fox", 3)
        myTargetArray.SetValue("jumps", 4)
        myTargetArray.SetValue("over", 5)
        myTargetArray.SetValue("the", 6)
        myTargetArray.SetValue("lazy", 7)
        myTargetArray.SetValue("dog", 8)

        ' Displays the values of the Array.
        Console.WriteLine("The target Array contains the following" _
           & "(before and after copying):")
        PrintValues(myTargetArray, " "c)

        ' Copies the source Array to the target Array, starting at index 6.
        mySourceArray.CopyTo(myTargetArray, 6)

        ' Displays the values of the Array.
        PrintValues(myTargetArray, " "c)
    End Sub

    Public Shared Sub PrintValues(myArr As Array, mySeparator As Char)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength((myArr.Rank - 1))
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write("{0}{1}", mySeparator, myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
'  The target Array contains the following (before and after copying):
'  The quick brown fox jumps over the lazy dog
'  The quick brown fox jumps over three napping cats in the barn

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes two new Arrays.
      Array mySourceArray=Array.CreateInstance( typeof(String), 6 );
      mySourceArray.SetValue( "three", 0 );
      mySourceArray.SetValue( "napping", 1 );
      mySourceArray.SetValue( "cats", 2 );
      mySourceArray.SetValue( "in", 3 );
      mySourceArray.SetValue( "the", 4 );
      mySourceArray.SetValue( "barn", 5 );
      Array myTargetArray=Array.CreateInstance( typeof(String), 15 );
      myTargetArray.SetValue( "The", 0 );
      myTargetArray.SetValue( "quick", 1 );
      myTargetArray.SetValue( "brown", 2 );
      myTargetArray.SetValue( "fox", 3 );
      myTargetArray.SetValue( "jumps", 4 );
      myTargetArray.SetValue( "over", 5 );
      myTargetArray.SetValue( "the", 6 );
      myTargetArray.SetValue( "lazy", 7 );
      myTargetArray.SetValue( "dog", 8 );

      // Displays the values of the Array.
      Console.WriteLine( "The target Array contains the following (before and after copying):" );
      PrintValues( myTargetArray, ' ' );

      // Copies the source Array to the target Array, starting at index 6.
      mySourceArray.CopyTo( myTargetArray, 6 );

      // Displays the values of the Array.
      PrintValues( myTargetArray, ' ' );
   }

   public static void PrintValues( Array myArr, char mySeparator )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "{0}{1}", mySeparator, myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

 The target Array contains the following (before and after copying):
 The quick brown fox jumps over the lazy dog
 The quick brown fox jumps over three napping cats in the barn
*/

using namespace System;
void main1();
void main2();
void main()
{
   main1();
   Console::WriteLine();
   main2();
}

void PrintValues( Array^ myArr );
void main1()
{
   // Creates and initializes two new Array instances.
   Array^ mySourceArray = Array::CreateInstance( String::typeid, 6 );
   mySourceArray->SetValue( "three", 0 );
   mySourceArray->SetValue( "napping", 1 );
   mySourceArray->SetValue( "cats", 2 );
   mySourceArray->SetValue( "in", 3 );
   mySourceArray->SetValue( "the", 4 );
   mySourceArray->SetValue( "barn", 5 );
   Array^ myTargetArray = Array::CreateInstance( String::typeid, 15 );
   myTargetArray->SetValue( "The", 0 );
   myTargetArray->SetValue( "quick", 1 );
   myTargetArray->SetValue( "brown", 2 );
   myTargetArray->SetValue( "fox", 3 );
   myTargetArray->SetValue( "jumped", 4 );
   myTargetArray->SetValue( "over", 5 );
   myTargetArray->SetValue( "the", 6 );
   myTargetArray->SetValue( "lazy", 7 );
   myTargetArray->SetValue( "dog", 8 );

   // Displays the values of the Array.
   Console::WriteLine(  "The target Array instance contains the following (before and after copying):" );
   PrintValues( myTargetArray );

   // Copies the source Array to the target Array, starting at index 6.
   mySourceArray->CopyTo( myTargetArray, 6 );

   // Displays the values of the Array.
   PrintValues( myTargetArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  " {0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

  The target Array instance contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over three napping cats in the barn
 */

下面的代码示例说明如何将一个 Array 复制到另一个具有非零下限的 Array 中。请注意，将复制整个源 Array，包括将覆盖目标 Array 中现有元素的空元素。 下面的代码示例说明如何将一个 Array 复制到另一个具有非零下限的 Array 中。请注意，将复制整个源 Array，包括将覆盖目标 Array 中现有元素的空元素。

Public Class SamplesArray2

    Public Shared Sub Main()
        ' Creates and initializes the source Array.
        Dim myArrayZero As Array = Array.CreateInstance(GetType(String), 3)
        myArrayZero.SetValue("zero", 0)
        myArrayZero.SetValue("one", 1)

        ' Displays the source Array.
        Console.WriteLine("The array with lower bound=0 contains:")
        PrintIndexAndValues(myArrayZero)

        ' Creates and initializes the target Array.
        Dim myArrLen As Integer() = {4}
        Dim myArrLow As Integer() = {2}
        Dim myArrayTwo As Array = Array.CreateInstance(GetType(String), _
           myArrLen, myArrLow)
        myArrayTwo.SetValue("two", 2)
        myArrayTwo.SetValue("three", 3)
        myArrayTwo.SetValue("four", 4)
        myArrayTwo.SetValue("five", 5)

        ' Displays the target Array.
        Console.WriteLine("The array with lower bound=2 contains:")
        PrintIndexAndValues(myArrayTwo)

        ' Copies from the array with lower bound=0 to the array with lower bound=2.
        myArrayZero.CopyTo(myArrayTwo, 3)

        ' Displays the modified target Array.
        Console.WriteLine(ControlChars.Cr + "After copying to the target array from " _
           + "index 3:")
        PrintIndexAndValues(myArrayTwo)
    End Sub

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The array with lower bound=0 contains:
'     [0]:    zero
'     [1]:    one
'     [2]:
' The array with lower bound=2 contains:
'     [2]:    two
'     [3]:    three
'     [4]:    four
'     [5]:    five
'
' After copying to the target array from index 3:
'     [2]:    two
'     [3]:    zero
'     [4]:    one
'     [5]:

public class SamplesArray2{

   public static void Main()  {
      // Creates and initializes the source Array.
      Array myArrayZero=Array.CreateInstance( typeof(String), 3 );
      myArrayZero.SetValue( "zero", 0 );
      myArrayZero.SetValue( "one", 1 );

      // Displays the source Array.
      Console.WriteLine( "The array with lower bound=0 contains:" );
      PrintIndexAndValues( myArrayZero );

      // Creates and initializes the target Array.
      int[] myArrLen = { 4 };
      int[] myArrLow = { 2 };
      Array myArrayTwo=Array.CreateInstance( typeof(String), myArrLen, myArrLow );
      myArrayTwo.SetValue( "two", 2 );
      myArrayTwo.SetValue( "three", 3 );
      myArrayTwo.SetValue( "four", 4 );
      myArrayTwo.SetValue( "five", 5 );

      // Displays the target Array.
      Console.WriteLine( "The array with lower bound=2 contains:" );
      PrintIndexAndValues( myArrayTwo );

      // Copies from the array with lower bound=0 to the array with lower bound=2.
      myArrayZero.CopyTo( myArrayTwo, 3 );

      // Displays the modified target Array.
      Console.WriteLine( "\nAfter copying to the target array from index 3:" );
      PrintIndexAndValues( myArrayTwo );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The array with lower bound=0 contains:
    [0]:    zero
    [1]:    one
    [2]:
The array with lower bound=2 contains:
    [2]:    two
    [3]:    three
    [4]:    four
    [5]:    five

After copying to the target array from index 3:
    [2]:    two
    [3]:    zero
    [4]:    one
    [5]:
*/

void PrintIndexAndValues( Array^ myArray );
void main2()
{
   // Creates and initializes the source Array.
   Array^ myArrayZero = Array::CreateInstance( String::typeid, 3 );
   myArrayZero->SetValue( "zero", 0 );
   myArrayZero->SetValue( "one", 1 );

   // Displays the source Array.
   Console::WriteLine(  "The array with lowbound=0 contains:" );
   PrintIndexAndValues( myArrayZero );

   // Creates and initializes the target Array.
   array<int>^myArrLen = {4};
   array<int>^myArrLow = {2};
   Array^ myArrayTwo = Array::CreateInstance( String::typeid, myArrLen, myArrLow );
   myArrayTwo->SetValue( "two", 2 );
   myArrayTwo->SetValue( "three", 3 );
   myArrayTwo->SetValue( "four", 4 );
   myArrayTwo->SetValue( "five", 5 );

   // Displays the target Array.
   Console::WriteLine(  "The array with lowbound=2 contains:" );
   PrintIndexAndValues( myArrayTwo );

   // Copy from the array with lowbound=0 to the array with lowbound=2.
   myArrayZero->CopyTo( myArrayTwo, 3 );

   // Displays the modified target Array.
   Console::WriteLine(  "\nAfter copying at relative index 1:" );
   PrintIndexAndValues( myArrayTwo );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The array with lowbound=0 contains:
     [0]:    zero
     [1]:    one
     [2]:
 The array with lowbound=2 contains:
     [2]:    two
     [3]:    three
     [4]:    four
     [5]:    five

 After copying at relative index 1:
     [2]:    two
     [3]:    zero
     [4]:    one
     [5]:
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
CopyTo 重载
System 命名空间
ICollection
Copy


Array ..::.CopyTo 方法 (Array, Int64)

Array
.
.
::
.
CopyTo 方法 (Array, Int64)
Array 类

将当前一维 Array 的所有元素复制到指定的一维 Array 中（从指定的目标 Array 索引开始）。索引指定为 64 位整数。 将当前一维 Array 的所有元素复制到指定的一维 Array 中（从指定的目标 Array 索引开始）。索引指定为 64 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Sub CopyTo ( _
    array As Array, _
    index As Long _
)
[ComVisibleAttribute(false)]
public void CopyTo(
    Array array,
    long index
)
[ComVisibleAttribute(false)]
public:
void CopyTo(
    Array^ array,
    long long index
)
[<ComVisibleAttribute(false)>]
member CopyTo :
        array:Array *
        index:int64 -> unit

参数

array
类型： System Array
一维 Array，它是从当前 Array 复制的元素的目标位置。
index
类型： System Int64
一个 64 位整数，它表示 array 中复制开始处的索引。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 超出了 array 的有效索引范围。
ArgumentException | array 是多维数组。 - 或 - 源 Array 中的元素数大于从 index 到目标 array 结尾处之间的可用空间。
ArrayTypeMismatchException | 无法自动将源 Array 的类型强制转换为目标 array 的类型。
RankException | 源 Array 是多维的。
InvalidCastException | 源 Array 中至少有一个元素无法强制转换为目标 array 的类型。

此方法支持 System.Collections..::.ICollection 接口。如果未明确要求实现 System.Collections..::.ICollection，请使用 Copy 以避免额外的间接寻址。 此方法支持 System.Collections..::.ICollection 接口。如果未明确要求实现 System.Collections..::.ICollection，请使用 Copy 以避免额外的间接寻址。

如果此方法在复制时引发异常，则 array 的状态未定义。

此方法为 O(n) 操作，其中 n 是 Length。

下面的代码示例说明如何将一个 Array 复制到另一个 Array 中。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes two new Arrays.
        Dim mySourceArray As Array = Array.CreateInstance(GetType(String), 6)
        mySourceArray.SetValue("three", 0)
        mySourceArray.SetValue("napping", 1)
        mySourceArray.SetValue("cats", 2)
        mySourceArray.SetValue("in", 3)
        mySourceArray.SetValue("the", 4)
        mySourceArray.SetValue("barn", 5)
        Dim myTargetArray As Array = Array.CreateInstance(GetType(String), 15)
        myTargetArray.SetValue("The", 0)
        myTargetArray.SetValue("quick", 1)
        myTargetArray.SetValue("brown", 2)
        myTargetArray.SetValue("fox", 3)
        myTargetArray.SetValue("jumps", 4)
        myTargetArray.SetValue("over", 5)
        myTargetArray.SetValue("the", 6)
        myTargetArray.SetValue("lazy", 7)
        myTargetArray.SetValue("dog", 8)

        ' Displays the values of the Array.
        Console.WriteLine("The target Array contains the following" _
           & "(before and after copying):")
        PrintValues(myTargetArray, " "c)

        ' Copies the source Array to the target Array, starting at index 6.
        mySourceArray.CopyTo(myTargetArray, 6)

        ' Displays the values of the Array.
        PrintValues(myTargetArray, " "c)
    End Sub

    Public Shared Sub PrintValues(myArr As Array, mySeparator As Char)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength((myArr.Rank - 1))
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write("{0}{1}", mySeparator, myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
'  The target Array contains the following (before and after copying):
'  The quick brown fox jumps over the lazy dog
'  The quick brown fox jumps over three napping cats in the barn

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes two new Arrays.
      Array mySourceArray=Array.CreateInstance( typeof(String), 6 );
      mySourceArray.SetValue( "three", 0 );
      mySourceArray.SetValue( "napping", 1 );
      mySourceArray.SetValue( "cats", 2 );
      mySourceArray.SetValue( "in", 3 );
      mySourceArray.SetValue( "the", 4 );
      mySourceArray.SetValue( "barn", 5 );
      Array myTargetArray=Array.CreateInstance( typeof(String), 15 );
      myTargetArray.SetValue( "The", 0 );
      myTargetArray.SetValue( "quick", 1 );
      myTargetArray.SetValue( "brown", 2 );
      myTargetArray.SetValue( "fox", 3 );
      myTargetArray.SetValue( "jumps", 4 );
      myTargetArray.SetValue( "over", 5 );
      myTargetArray.SetValue( "the", 6 );
      myTargetArray.SetValue( "lazy", 7 );
      myTargetArray.SetValue( "dog", 8 );

      // Displays the values of the Array.
      Console.WriteLine( "The target Array contains the following (before and after copying):" );
      PrintValues( myTargetArray, ' ' );

      // Copies the source Array to the target Array, starting at index 6.
      mySourceArray.CopyTo( myTargetArray, 6 );

      // Displays the values of the Array.
      PrintValues( myTargetArray, ' ' );
   }

   public static void PrintValues( Array myArr, char mySeparator )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "{0}{1}", mySeparator, myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

 The target Array contains the following (before and after copying):
 The quick brown fox jumps over the lazy dog
 The quick brown fox jumps over three napping cats in the barn
*/

using namespace System;
void main1();
void main2();
void main()
{
   main1();
   Console::WriteLine();
   main2();
}

void PrintValues( Array^ myArr );
void main1()
{
   // Creates and initializes two new Array instances.
   Array^ mySourceArray = Array::CreateInstance( String::typeid, 6 );
   mySourceArray->SetValue( "three", 0 );
   mySourceArray->SetValue( "napping", 1 );
   mySourceArray->SetValue( "cats", 2 );
   mySourceArray->SetValue( "in", 3 );
   mySourceArray->SetValue( "the", 4 );
   mySourceArray->SetValue( "barn", 5 );
   Array^ myTargetArray = Array::CreateInstance( String::typeid, 15 );
   myTargetArray->SetValue( "The", 0 );
   myTargetArray->SetValue( "quick", 1 );
   myTargetArray->SetValue( "brown", 2 );
   myTargetArray->SetValue( "fox", 3 );
   myTargetArray->SetValue( "jumped", 4 );
   myTargetArray->SetValue( "over", 5 );
   myTargetArray->SetValue( "the", 6 );
   myTargetArray->SetValue( "lazy", 7 );
   myTargetArray->SetValue( "dog", 8 );

   // Displays the values of the Array.
   Console::WriteLine(  "The target Array instance contains the following (before and after copying):" );
   PrintValues( myTargetArray );

   // Copies the source Array to the target Array, starting at index 6.
   mySourceArray->CopyTo( myTargetArray, 6 );

   // Displays the values of the Array.
   PrintValues( myTargetArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  " {0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

  The target Array instance contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over three napping cats in the barn
 */

下面的代码示例说明如何将一个 Array 复制到另一个具有非零下限的 Array 中。请注意，将复制整个源 Array，包括将覆盖目标 Array 中现有元素的空元素。 下面的代码示例说明如何将一个 Array 复制到另一个具有非零下限的 Array 中。请注意，将复制整个源 Array，包括将覆盖目标 Array 中现有元素的空元素。

Public Class SamplesArray2

    Public Shared Sub Main()
        ' Creates and initializes the source Array.
        Dim myArrayZero As Array = Array.CreateInstance(GetType(String), 3)
        myArrayZero.SetValue("zero", 0)
        myArrayZero.SetValue("one", 1)

        ' Displays the source Array.
        Console.WriteLine("The array with lower bound=0 contains:")
        PrintIndexAndValues(myArrayZero)

        ' Creates and initializes the target Array.
        Dim myArrLen As Integer() = {4}
        Dim myArrLow As Integer() = {2}
        Dim myArrayTwo As Array = Array.CreateInstance(GetType(String), _
           myArrLen, myArrLow)
        myArrayTwo.SetValue("two", 2)
        myArrayTwo.SetValue("three", 3)
        myArrayTwo.SetValue("four", 4)
        myArrayTwo.SetValue("five", 5)

        ' Displays the target Array.
        Console.WriteLine("The array with lower bound=2 contains:")
        PrintIndexAndValues(myArrayTwo)

        ' Copies from the array with lower bound=0 to the array with lower bound=2.
        myArrayZero.CopyTo(myArrayTwo, 3)

        ' Displays the modified target Array.
        Console.WriteLine(ControlChars.Cr + "After copying to the target array from " _
           + "index 3:")
        PrintIndexAndValues(myArrayTwo)
    End Sub

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The array with lower bound=0 contains:
'     [0]:    zero
'     [1]:    one
'     [2]:
' The array with lower bound=2 contains:
'     [2]:    two
'     [3]:    three
'     [4]:    four
'     [5]:    five
'
' After copying to the target array from index 3:
'     [2]:    two
'     [3]:    zero
'     [4]:    one
'     [5]:

public class SamplesArray2{

   public static void Main()  {
      // Creates and initializes the source Array.
      Array myArrayZero=Array.CreateInstance( typeof(String), 3 );
      myArrayZero.SetValue( "zero", 0 );
      myArrayZero.SetValue( "one", 1 );

      // Displays the source Array.
      Console.WriteLine( "The array with lower bound=0 contains:" );
      PrintIndexAndValues( myArrayZero );

      // Creates and initializes the target Array.
      int[] myArrLen = { 4 };
      int[] myArrLow = { 2 };
      Array myArrayTwo=Array.CreateInstance( typeof(String), myArrLen, myArrLow );
      myArrayTwo.SetValue( "two", 2 );
      myArrayTwo.SetValue( "three", 3 );
      myArrayTwo.SetValue( "four", 4 );
      myArrayTwo.SetValue( "five", 5 );

      // Displays the target Array.
      Console.WriteLine( "The array with lower bound=2 contains:" );
      PrintIndexAndValues( myArrayTwo );

      // Copies from the array with lower bound=0 to the array with lower bound=2.
      myArrayZero.CopyTo( myArrayTwo, 3 );

      // Displays the modified target Array.
      Console.WriteLine( "\nAfter copying to the target array from index 3:" );
      PrintIndexAndValues( myArrayTwo );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The array with lower bound=0 contains:
    [0]:    zero
    [1]:    one
    [2]:
The array with lower bound=2 contains:
    [2]:    two
    [3]:    three
    [4]:    four
    [5]:    five

After copying to the target array from index 3:
    [2]:    two
    [3]:    zero
    [4]:    one
    [5]:
*/

void PrintIndexAndValues( Array^ myArray );
void main2()
{
   // Creates and initializes the source Array.
   Array^ myArrayZero = Array::CreateInstance( String::typeid, 3 );
   myArrayZero->SetValue( "zero", 0 );
   myArrayZero->SetValue( "one", 1 );

   // Displays the source Array.
   Console::WriteLine(  "The array with lowbound=0 contains:" );
   PrintIndexAndValues( myArrayZero );

   // Creates and initializes the target Array.
   array<int>^myArrLen = {4};
   array<int>^myArrLow = {2};
   Array^ myArrayTwo = Array::CreateInstance( String::typeid, myArrLen, myArrLow );
   myArrayTwo->SetValue( "two", 2 );
   myArrayTwo->SetValue( "three", 3 );
   myArrayTwo->SetValue( "four", 4 );
   myArrayTwo->SetValue( "five", 5 );

   // Displays the target Array.
   Console::WriteLine(  "The array with lowbound=2 contains:" );
   PrintIndexAndValues( myArrayTwo );

   // Copy from the array with lowbound=0 to the array with lowbound=2.
   myArrayZero->CopyTo( myArrayTwo, 3 );

   // Displays the modified target Array.
   Console::WriteLine(  "\nAfter copying at relative index 1:" );
   PrintIndexAndValues( myArrayTwo );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The array with lowbound=0 contains:
     [0]:    zero
     [1]:    one
     [2]:
 The array with lowbound=2 contains:
     [2]:    two
     [3]:    three
     [4]:    four
     [5]:    five

 After copying at relative index 1:
     [2]:    two
     [3]:    zero
     [4]:    one
     [5]:
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
CopyTo 重载
System 命名空间
ICollection
Copy


Array ..::.CreateInstance 方法

Array
.
.
::
.
CreateInstance 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

初始化 Array 类的新实例。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.CreateInstance 方法 (Type, Int32)

Array
.
.
::
.
CreateInstance 方法 (Type, Int32)
Array 类

创建使用从零开始的索引、具有指定 Type 和长度的一维 Array。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    elementType As Type, _
    length As Integer _
) As Array
public static Array CreateInstance(
    Type elementType,
    int length
)
public:
static Array^ CreateInstance(
    Type^ elementType,
    int length
)
static member CreateInstance :
        elementType:Type *
        length:int -> Array

参数

elementType
类型： System Type
要创建的 Array 的 Type。
length
类型： System Int32
要创建的 Array 的大小。

返回值

类型： System Array
使用从零开始的索引、具有指定 Type 和指定长度的新的一维 Array。
异常 | 条件
ArgumentNullException | elementType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | elementType 不是有效的 Type。
NotSupportedException | 不支持 elementType。例如，不支持 Void。 不支持 elementType。例如，不支持 Void。 - 或 - elementType 是一个开放式泛型类型。
ArgumentOutOfRangeException | length 小于零。

与大多数类不同，Array 提供 CreateInstance 方法，以便允许后期绑定访问，而不是提供公共构造函数。

将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。 将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。

此方法的运算复杂度为 O(n)，其中 n 是 length。

下面的代码示例说明如何创建和初始化一维 Array。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a one-dimensional Array of type Int32.
        Dim my1DArray As Array = Array.CreateInstance(GetType(Int32), 5)
        Dim i As Integer
        For i = my1DArray.GetLowerBound(0) To my1DArray.GetUpperBound(0)
            my1DArray.SetValue(i + 1, i)
        Next i
        ' Displays the values of the Array.
        Console.WriteLine("The one-dimensional Array contains the " _
           + "following values:")
        PrintValues(my1DArray)

    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength((myArr.Rank - 1))
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The one-dimensional Array contains the following values:
'     1    2    3    4    5

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional Array of type Int32.
      Array my1DArray=Array.CreateInstance( typeof(Int32), 5 );
      for ( int i = my1DArray.GetLowerBound(0); i <= my1DArray.GetUpperBound(0); i++ )
         my1DArray.SetValue( i+1, i );

      // Displays the values of the Array.
      Console.WriteLine( "The one-dimensional Array contains the following values:" );
      PrintValues( my1DArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The one-dimensional Array contains the following values:
    1    2    3    4    5
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   // Creates and initializes a one-dimensional Array instance of type Int32.
   Array^ my1DArray = Array::CreateInstance( Int32::typeid, 5 );
   for ( int i = my1DArray->GetLowerBound( 0 ); i <= my1DArray->GetUpperBound( 0 ); i++ )
      my1DArray->SetValue( i + 1, i );

   // Displays the values of the Array.
   Console::WriteLine(  "The one-dimensional Array instance contains the following values:" );
   PrintValues( my1DArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The one-dimensional Array instance contains the following values:
     1    2    3    4    5
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
CreateInstance 重载
System 命名空间


Array ..::.CreateInstance 方法 (Type, array<Int32 >[]()[])

Array
.
.
::
.
CreateInstance 方法 (Type,
array<
Int32
>
[]
()
[]
)
Array 类

创建使用从零开始的索引、具有指定 Type 和维长的多维 Array。维的长度在一个 32 位整数数组中指定。 创建使用从零开始的索引、具有指定 Type 和维长的多维 Array。维的长度在一个 32 位整数数组中指定。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    elementType As Type, _
    ParamArray lengths As Integer() _
) As Array
public static Array CreateInstance(
    Type elementType,
    params int[] lengths
)
public:
static Array^ CreateInstance(
    Type^ elementType,
    ... array<int>^ lengths
)
static member CreateInstance :
        elementType:Type *
        lengths:int[] -> Array

参数

elementType
类型： System Type
要创建的 Array 的 Type。
lengths
类型：
array<
System Int32
>
[]
()
[]

一个 32 位整数数组，它表示要创建的 Array 中每个维的大小。

返回值

类型： System Array
使用从零开始的索引、具有指定 Type 的新的多维 Array，其每个维度都为指定的长度。
异常 | 条件
ArgumentNullException | elementType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - lengths 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | elementType 不是有效的 Type。 - 或 - lengths 数组包含的元素少于一个。
NotSupportedException | 不支持 elementType。例如，不支持 Void。 不支持 elementType。例如，不支持 Void。 - 或 - elementType 是一个开放式泛型类型。
ArgumentOutOfRangeException | lengths 中的任何值都小于零。

与大多数类不同，Array 提供 CreateInstance 方法，以便允许后期绑定访问，而不是提供公共构造函数。

lengths 数组中的元素数必须等于新 Array 中的维数。lengths 数组的每个元素都必须指定新 Array 中的对应维度的长度。 lengths 数组中的元素数必须等于新 Array 中的维数。lengths 数组的每个元素都必须指定新 Array 中的对应维度的长度。

将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。 将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。

此方法的运算复杂度为 O(n)，其中 n 是 lengths 中所有值的乘积。

下面的代码示例说明如何创建和初始化多维 Array。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a multidimensional Array of type String.
        Dim myLengthsArray() As Integer = {2, 3, 4, 5}
        Dim my4DArray As Array = Array.CreateInstance(GetType(String), myLengthsArray)
        Dim i, j, k, l As Integer
        Dim myIndicesArray() As Integer
        For i = my4DArray.GetLowerBound(0) To my4DArray.GetUpperBound(0)
            For j = my4DArray.GetLowerBound(1) To my4DArray.GetUpperBound(1)
                For k = my4DArray.GetLowerBound(2) To my4DArray.GetUpperBound(2)
                    For l = my4DArray.GetLowerBound(3) To my4DArray.GetUpperBound(3)
                        myIndicesArray = New Integer() {i, j, k, l}
                        my4DArray.SetValue(Convert.ToString(i) + j.ToString() _
                           + k.ToString() + l.ToString(), myIndicesArray)
                    Next l
                Next k
            Next j
        Next i

        ' Displays the values of the Array.
        Console.WriteLine("The four-dimensional Array contains the following values:")
        PrintValues(my4DArray)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength(myArr.Rank - 1)
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The four-dimensional Array contains the following values:
'     0000    0001    0002    0003    0004
'     0010    0011    0012    0013    0014
'     0020    0021    0022    0023    0024
'     0030    0031    0032    0033    0034
'     0100    0101    0102    0103    0104
'     0110    0111    0112    0113    0114
'     0120    0121    0122    0123    0124
'     0130    0131    0132    0133    0134
'     0200    0201    0202    0203    0204
'     0210    0211    0212    0213    0214
'     0220    0221    0222    0223    0224
'     0230    0231    0232    0233    0234
'     1000    1001    1002    1003    1004
'     1010    1011    1012    1013    1014
'     1020    1021    1022    1023    1024
'     1030    1031    1032    1033    1034
'     1100    1101    1102    1103    1104
 '    1110    1111    1112    1113    1114
'     1120    1121    1122    1123    1124
'     1130    1131    1132    1133    1134
'     1200    1201    1202    1203    1204
'     1210    1211    1212    1213    1214
'     1220    1221    1222    1223    1224
'     1230    1231    1232    1233    1234

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a multidimensional Array of type String.
      int[] myLengthsArray = new int[4] { 2, 3, 4, 5 };
      Array my4DArray=Array.CreateInstance( typeof(String), myLengthsArray );
      for ( int i = my4DArray.GetLowerBound(0); i <= my4DArray.GetUpperBound(0); i++ )
         for ( int j = my4DArray.GetLowerBound(1); j <= my4DArray.GetUpperBound(1); j++ )
            for ( int k = my4DArray.GetLowerBound(2); k <= my4DArray.GetUpperBound(2); k++ )
               for ( int l = my4DArray.GetLowerBound(3); l <= my4DArray.GetUpperBound(3); l++ )  {
                  int[] myIndicesArray = new int[4] { i, j, k, l };
                  my4DArray.SetValue( Convert.ToString(i) + j + k + l, myIndicesArray );
               }

      // Displays the values of the Array.
      Console.WriteLine( "The four-dimensional Array contains the following values:" );
      PrintValues( my4DArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The four-dimensional Array contains the following values:
    0000    0001    0002    0003    0004
    0010    0011    0012    0013    0014
    0020    0021    0022    0023    0024
    0030    0031    0032    0033    0034
    0100    0101    0102    0103    0104
    0110    0111    0112    0113    0114
    0120    0121    0122    0123    0124
    0130    0131    0132    0133    0134
    0200    0201    0202    0203    0204
    0210    0211    0212    0213    0214
    0220    0221    0222    0223    0224
    0230    0231    0232    0233    0234
    1000    1001    1002    1003    1004
    1010    1011    1012    1013    1014
    1020    1021    1022    1023    1024
    1030    1031    1032    1033    1034
    1100    1101    1102    1103    1104
    1110    1111    1112    1113    1114
    1120    1121    1122    1123    1124
    1130    1131    1132    1133    1134
    1200    1201    1202    1203    1204
    1210    1211    1212    1213    1214
    1220    1221    1222    1223    1224
    1230    1231    1232    1233    1234
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   // Creates and initializes a multidimensional Array instance of type String.
   array<int>^myLengthsArray = {2,3,4,5};
   Array^ my4DArray = Array::CreateInstance( String::typeid, myLengthsArray );
   for ( int i = my4DArray->GetLowerBound( 0 ); i <= my4DArray->GetUpperBound( 0 ); i++ )
      for ( int j = my4DArray->GetLowerBound( 1 ); j <= my4DArray->GetUpperBound( 1 ); j++ )
         for ( int k = my4DArray->GetLowerBound( 2 ); k <= my4DArray->GetUpperBound( 2 ); k++ )
            for ( int l = my4DArray->GetLowerBound( 3 ); l <= my4DArray->GetUpperBound( 3 ); l++ )
            {
               array<int>^myIndicesArray = {i,j,k,l};
               my4DArray->SetValue( String::Concat( Convert::ToString( i ), j, k, l ), myIndicesArray );

            }

   // Displays the values of the Array.
   Console::WriteLine(  "The four-dimensional Array instance contains the following values:" );
   PrintValues( my4DArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The four-dimensional Array instance contains the following values:
     0000    0001    0002    0003    0004
     0010    0011    0012    0013    0014
     0020    0021    0022    0023    0024
     0030    0031    0032    0033    0034
     0100    0101    0102    0103    0104
     0110    0111    0112    0113    0114
     0120    0121    0122    0123    0124
     0130    0131    0132    0133    0134
     0200    0201    0202    0203    0204
     0210    0211    0212    0213    0214
     0220    0221    0222    0223    0224
     0230    0231    0232    0233    0234
     1000    1001    1002    1003    1004
     1010    1011    1012    1013    1014
     1020    1021    1022    1023    1024
     1030    1031    1032    1033    1034
     1100    1101    1102    1103    1104
     1110    1111    1112    1113    1114
     1120    1121    1122    1123    1124
     1130    1131    1132    1133    1134
     1200    1201    1202    1203    1204
     1210    1211    1212    1213    1214
     1220    1221    1222    1223    1224
     1230    1231    1232    1233    1234
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
CreateInstance 重载
System 命名空间


Array ..::.CreateInstance 方法 (Type, array<Int64 >[]()[])

Array
.
.
::
.
CreateInstance 方法 (Type,
array<
Int64
>
[]
()
[]
)
Array 类

创建使用从零开始的索引、具有指定 Type 和维长的多维 Array。维的长度在一个 64 位整数数组中指定。 创建使用从零开始的索引、具有指定 Type 和维长的多维 Array。维的长度在一个 64 位整数数组中指定。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    elementType As Type, _
    ParamArray lengths As Long() _
) As Array
public static Array CreateInstance(
    Type elementType,
    params long[] lengths
)
public:
static Array^ CreateInstance(
    Type^ elementType,
    ... array<long long>^ lengths
)
static member CreateInstance :
        elementType:Type *
        lengths:int64[] -> Array

参数

elementType
类型： System Type
要创建的 Array 的 Type。
lengths
类型：
array<
System Int64
>
[]
()
[]

一个 64 位整数数组，它表示要创建的 Array 中每个维的大小。数组中的每个整数都必须介于零和 Int32..::.MaxValue 之间（均含）。 一个 64 位整数数组，它表示要创建的 Array 中每个维的大小。数组中的每个整数都必须介于零和 Int32..::.MaxValue 之间（均含）。

返回值

类型： System Array
使用从零开始的索引、具有指定 Type 的新的多维 Array，其每个维度都为指定的长度。
异常 | 条件
ArgumentNullException | elementType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - lengths 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | elementType 不是有效的 Type。 - 或 - lengths 数组包含的元素少于一个。
NotSupportedException | 不支持 elementType。例如，不支持 Void。 不支持 elementType。例如，不支持 Void。 - 或 - elementType 是一个开放式泛型类型。
ArgumentOutOfRangeException | lengths 中的所有值都小于零或大于 Int32..::.MaxValue。

与大多数类不同，Array 提供 CreateInstance 方法，以便允许后期绑定访问，而不是提供公共构造函数。

lengths 数组中的元素数必须等于新 Array 中的维数。lengths 数组的每个元素都必须指定新 Array 中的对应维度的长度。 lengths 数组中的元素数必须等于新 Array 中的维数。lengths 数组的每个元素都必须指定新 Array 中的对应维度的长度。

将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。 将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。

此方法的运算复杂度为 O(n)，其中 n 是 lengths 中所有值的乘积。

下面的代码示例说明如何创建和初始化多维 Array。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a multidimensional Array of type String.
        Dim myLengthsArray() As Integer = {2, 3, 4, 5}
        Dim my4DArray As Array = Array.CreateInstance(GetType(String), myLengthsArray)
        Dim i, j, k, l As Integer
        Dim myIndicesArray() As Integer
        For i = my4DArray.GetLowerBound(0) To my4DArray.GetUpperBound(0)
            For j = my4DArray.GetLowerBound(1) To my4DArray.GetUpperBound(1)
                For k = my4DArray.GetLowerBound(2) To my4DArray.GetUpperBound(2)
                    For l = my4DArray.GetLowerBound(3) To my4DArray.GetUpperBound(3)
                        myIndicesArray = New Integer() {i, j, k, l}
                        my4DArray.SetValue(Convert.ToString(i) + j.ToString() _
                           + k.ToString() + l.ToString(), myIndicesArray)
                    Next l
                Next k
            Next j
        Next i

        ' Displays the values of the Array.
        Console.WriteLine("The four-dimensional Array contains the following values:")
        PrintValues(my4DArray)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength(myArr.Rank - 1)
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The four-dimensional Array contains the following values:
'     0000    0001    0002    0003    0004
'     0010    0011    0012    0013    0014
'     0020    0021    0022    0023    0024
'     0030    0031    0032    0033    0034
'     0100    0101    0102    0103    0104
'     0110    0111    0112    0113    0114
'     0120    0121    0122    0123    0124
'     0130    0131    0132    0133    0134
'     0200    0201    0202    0203    0204
'     0210    0211    0212    0213    0214
'     0220    0221    0222    0223    0224
'     0230    0231    0232    0233    0234
'     1000    1001    1002    1003    1004
'     1010    1011    1012    1013    1014
'     1020    1021    1022    1023    1024
'     1030    1031    1032    1033    1034
'     1100    1101    1102    1103    1104
 '    1110    1111    1112    1113    1114
'     1120    1121    1122    1123    1124
'     1130    1131    1132    1133    1134
'     1200    1201    1202    1203    1204
'     1210    1211    1212    1213    1214
'     1220    1221    1222    1223    1224
'     1230    1231    1232    1233    1234

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a multidimensional Array of type String.
      int[] myLengthsArray = new int[4] { 2, 3, 4, 5 };
      Array my4DArray=Array.CreateInstance( typeof(String), myLengthsArray );
      for ( int i = my4DArray.GetLowerBound(0); i <= my4DArray.GetUpperBound(0); i++ )
         for ( int j = my4DArray.GetLowerBound(1); j <= my4DArray.GetUpperBound(1); j++ )
            for ( int k = my4DArray.GetLowerBound(2); k <= my4DArray.GetUpperBound(2); k++ )
               for ( int l = my4DArray.GetLowerBound(3); l <= my4DArray.GetUpperBound(3); l++ )  {
                  int[] myIndicesArray = new int[4] { i, j, k, l };
                  my4DArray.SetValue( Convert.ToString(i) + j + k + l, myIndicesArray );
               }

      // Displays the values of the Array.
      Console.WriteLine( "The four-dimensional Array contains the following values:" );
      PrintValues( my4DArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The four-dimensional Array contains the following values:
    0000    0001    0002    0003    0004
    0010    0011    0012    0013    0014
    0020    0021    0022    0023    0024
    0030    0031    0032    0033    0034
    0100    0101    0102    0103    0104
    0110    0111    0112    0113    0114
    0120    0121    0122    0123    0124
    0130    0131    0132    0133    0134
    0200    0201    0202    0203    0204
    0210    0211    0212    0213    0214
    0220    0221    0222    0223    0224
    0230    0231    0232    0233    0234
    1000    1001    1002    1003    1004
    1010    1011    1012    1013    1014
    1020    1021    1022    1023    1024
    1030    1031    1032    1033    1034
    1100    1101    1102    1103    1104
    1110    1111    1112    1113    1114
    1120    1121    1122    1123    1124
    1130    1131    1132    1133    1134
    1200    1201    1202    1203    1204
    1210    1211    1212    1213    1214
    1220    1221    1222    1223    1224
    1230    1231    1232    1233    1234
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   // Creates and initializes a multidimensional Array instance of type String.
   array<int>^myLengthsArray = {2,3,4,5};
   Array^ my4DArray = Array::CreateInstance( String::typeid, myLengthsArray );
   for ( int i = my4DArray->GetLowerBound( 0 ); i <= my4DArray->GetUpperBound( 0 ); i++ )
      for ( int j = my4DArray->GetLowerBound( 1 ); j <= my4DArray->GetUpperBound( 1 ); j++ )
         for ( int k = my4DArray->GetLowerBound( 2 ); k <= my4DArray->GetUpperBound( 2 ); k++ )
            for ( int l = my4DArray->GetLowerBound( 3 ); l <= my4DArray->GetUpperBound( 3 ); l++ )
            {
               array<int>^myIndicesArray = {i,j,k,l};
               my4DArray->SetValue( String::Concat( Convert::ToString( i ), j, k, l ), myIndicesArray );

            }

   // Displays the values of the Array.
   Console::WriteLine(  "The four-dimensional Array instance contains the following values:" );
   PrintValues( my4DArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The four-dimensional Array instance contains the following values:
     0000    0001    0002    0003    0004
     0010    0011    0012    0013    0014
     0020    0021    0022    0023    0024
     0030    0031    0032    0033    0034
     0100    0101    0102    0103    0104
     0110    0111    0112    0113    0114
     0120    0121    0122    0123    0124
     0130    0131    0132    0133    0134
     0200    0201    0202    0203    0204
     0210    0211    0212    0213    0214
     0220    0221    0222    0223    0224
     0230    0231    0232    0233    0234
     1000    1001    1002    1003    1004
     1010    1011    1012    1013    1014
     1020    1021    1022    1023    1024
     1030    1031    1032    1033    1034
     1100    1101    1102    1103    1104
     1110    1111    1112    1113    1114
     1120    1121    1122    1123    1124
     1130    1131    1132    1133    1134
     1200    1201    1202    1203    1204
     1210    1211    1212    1213    1214
     1220    1221    1222    1223    1224
     1230    1231    1232    1233    1234
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
CreateInstance 重载
System 命名空间


Array ..::.CreateInstance 方法 (Type, Int32, Int32)

Array
.
.
::
.
CreateInstance 方法 (Type, Int32, Int32)
Array 类

创建使用从零开始的索引、具有指定 Type 和维长的二维 Array。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    elementType As Type, _
    length1 As Integer, _
    length2 As Integer _
) As Array
public static Array CreateInstance(
    Type elementType,
    int length1,
    int length2
)
public:
static Array^ CreateInstance(
    Type^ elementType,
    int length1,
    int length2
)
static member CreateInstance :
        elementType:Type *
        length1:int *
        length2:int -> Array

参数

elementType
类型： System Type
要创建的 Array 的 Type。
length1
类型： System Int32
要创建的 Array 的第一维的大小。
length2
类型： System Int32
要创建的 Array 的第二维的大小。

返回值

类型： System Array
使用从零开始的索引、具有指定 Type 的新的二维 Array，其每个维度都为指定的长度。
异常 | 条件
ArgumentNullException | elementType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | elementType 不是有效的 Type。
NotSupportedException | 不支持 elementType。例如，不支持 Void。 不支持 elementType。例如，不支持 Void。 - 或 - elementType 是一个开放式泛型类型。
ArgumentOutOfRangeException | length1 小于零。 - 或 - length2 小于零。

与大多数类不同，Array 提供 CreateInstance 方法，以便允许后期绑定访问，而不是提供公共构造函数。

将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。 将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。

此方法为 O(n) 操作，其中 n 是 length1 和 length2 的乘积。

下面的代码示例说明如何创建和初始化二维 Array。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a two-dimensional Array of type String.
        Dim my2DArray As Array = Array.CreateInstance(GetType(String), 2, 3)
        Dim i, j As Integer
        For i = my2DArray.GetLowerBound(0) To my2DArray.GetUpperBound(0)
            For j = my2DArray.GetLowerBound(1) To my2DArray.GetUpperBound(1)
                my2DArray.SetValue("abc" + i.ToString() + j.ToString(), i, j)
            Next j
        Next i

        ' Displays the values of the Array.
        Console.WriteLine("The two-dimensional Array contains the " _
           + "following values:")
        PrintValues(my2DArray)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength(myArr.Rank - 1)
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The two-dimensional Array contains the following values:
'     abc00    abc01    abc02
'     abc10    abc11    abc12

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a two-dimensional Array of type String.
      Array my2DArray=Array.CreateInstance( typeof(String), 2, 3 );
      for ( int i = my2DArray.GetLowerBound(0); i <= my2DArray.GetUpperBound(0); i++ )
         for ( int j = my2DArray.GetLowerBound(1); j <= my2DArray.GetUpperBound(1); j++ )
            my2DArray.SetValue( "abc" + i + j, i, j );

      // Displays the values of the Array.
      Console.WriteLine( "The two-dimensional Array contains the following values:" );
      PrintValues( my2DArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The two-dimensional Array contains the following values:
    abc00    abc01    abc02
    abc10    abc11    abc12
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   // Creates and initializes a two-dimensional Array instance of type String.
   Array^ my2DArray = Array::CreateInstance( String::typeid, 2, 3 );
   for ( int i = my2DArray->GetLowerBound( 0 ); i <= my2DArray->GetUpperBound( 0 ); i++ )
      for ( int j = my2DArray->GetLowerBound( 1 ); j <= my2DArray->GetUpperBound( 1 ); j++ )
         my2DArray->SetValue( String::Concat( "abc", i, j ), i, j );

   // Displays the values of the Array.
   Console::WriteLine(  "The two-dimensional Array instance contains the following values:" );
   PrintValues( my2DArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The two-dimensional Array instance contains the following values:
     abc00    abc01    abc02
     abc10    abc11    abc12
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
CreateInstance 重载
System 命名空间


Array ..::.CreateInstance 方法 (Type, array<Int32 >[]()[], array<Int32 >[]()[])

Array
.
.
::
.
CreateInstance 方法 (Type,
array<
Int32
>
[]
()
[]
,
array<
Int32
>
[]
()
[]
)
Array 类

创建具有指定下限、指定 Type 和维长的多维 Array。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    elementType As Type, _
    lengths As Integer(), _
    lowerBounds As Integer() _
) As Array
public static Array CreateInstance(
    Type elementType,
    int[] lengths,
    int[] lowerBounds
)
public:
static Array^ CreateInstance(
    Type^ elementType,
    array<int>^ lengths,
    array<int>^ lowerBounds
)
static member CreateInstance :
        elementType:Type *
        lengths:int[] *
        lowerBounds:int[] -> Array

参数

elementType
类型： System Type
要创建的 Array 的 Type。
lengths
类型：
array<
System Int32
>
[]
()
[]

一维数组，它包含要创建的 Array 的每个维度的大小。
lowerBounds
类型：
array<
System Int32
>
[]
()
[]

一维数组，它包含要创建的 Array 的每个维度的下限（起始索引）。

返回值

类型： System Array
新的指定 Type 的多维 Array，每个维度都有指定的长度和下限。
异常 | 条件
ArgumentNullException | elementType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - lengths 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - lowerBounds 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | elementType 不是有效的 Type。 - 或 - lengths 数组包含的元素少于一个。 - 或 - lengths 和 lowerBounds 数组包含的元素数不同。
NotSupportedException | 不支持 elementType。例如，不支持 Void。 不支持 elementType。例如，不支持 Void。 - 或 - elementType 是一个开放式泛型类型。
ArgumentOutOfRangeException | lengths 中的任何值都小于零。 - 或 - lowerBounds 中的任意一个值都很大，因此，维的下限和长度的和大于 Int32..::.MaxValue。

与大多数类不同，Array 提供 CreateInstance 方法，以便允许后期绑定访问，而不是提供公共构造函数。

lengths 和 lowerBounds 数组必须具有相同的元素数。lengths 数组中的元素数必须等于新 Array 中的维数。 lengths 和 lowerBounds 数组必须具有相同的元素数。lengths 数组中的元素数必须等于新 Array 中的维数。

lengths 数组的每个元素都必须指定新 Array 中的对应维度的长度。

lowerBounds 数组中的每个元素都必须指定新 Array 中的对应维度的下限。通常情况下，.NET Framework 类库和许多编程语言不处理非零下限。 lowerBounds 数组中的每个元素都必须指定新 Array 中的对应维度的下限。通常情况下，.NET Framework 类库和许多编程语言不处理非零下限。

将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。 将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。

此方法的运算复杂度为 O(n)，其中 n 是 lengths 中所有值的乘积。

下面的代码示例说明如何创建和初始化具有指定下限的多维 Array。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a multidimensional Array of type String.
        Dim myLengthsArray() As Integer = {3, 5}
        Dim myBoundsArray() As Integer = {2, 3}
        Dim myArray As Array = Array.CreateInstance(GetType(String), _
           myLengthsArray, myBoundsArray)
        Dim i, j As Integer
        Dim myIndicesArray() As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            For j = myArray.GetLowerBound(1) To myArray.GetUpperBound(1)
                myIndicesArray = New Integer() {i, j}
                myArray.SetValue(i.ToString() + j.ToString(), myIndicesArray)
            Next j
        Next i

        ' Displays the lower bounds and the upper bounds of each dimension.
        Console.WriteLine("Bounds:" + ControlChars.Tab + "Lower" _
           + ControlChars.Tab + "Upper")
        For i = 0 To myArray.Rank - 1
            Console.WriteLine("{0}:" + ControlChars.Tab + "{1}" _
               + ControlChars.Tab + "{2}", i, myArray.GetLowerBound(i), _
               myArray.GetUpperBound(i))
        Next i

        ' Displays the values of the Array.
        Console.WriteLine("The Array contains the following values:")
        PrintValues(myArray)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength(myArr.Rank - 1)
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' Bounds:    Lower    Upper
' 0:    2    4
' 1:    3    7
' The Array contains the following values:
'     23    24    25    26    27
'     33    34    35    36    37
'     43    44    45    46    47

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a multidimensional Array of type String.
      int[] myLengthsArray = new int[2] { 3, 5 };
      int[] myBoundsArray = new int[2] { 2, 3 };
      Array myArray=Array.CreateInstance( typeof(String), myLengthsArray, myBoundsArray );
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         for ( int j = myArray.GetLowerBound(1); j <= myArray.GetUpperBound(1); j++ )  {
            int[] myIndicesArray = new int[2] { i, j };
            myArray.SetValue( Convert.ToString(i) + j, myIndicesArray );
         }

      // Displays the lower bounds and the upper bounds of each dimension.
      Console.WriteLine( "Bounds:\tLower\tUpper" );
      for ( int i = 0; i < myArray.Rank; i++ )
         Console.WriteLine( "{0}:\t{1}\t{2}", i, myArray.GetLowerBound(i), myArray.GetUpperBound(i) );

      // Displays the values of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintValues( myArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

Bounds:    Lower    Upper
0:    2    4
1:    3    7
The Array contains the following values:
    23    24    25    26    27
    33    34    35    36    37
    43    44    45    46    47
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   // Creates and initializes a multidimensional Array instance of type String.
   array<int>^myLengthsArray = {3,5};
   array<int>^myBoundsArray = {2,3};
   Array^ myArray = Array::CreateInstance( String::typeid, myLengthsArray, myBoundsArray );
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      for ( int j = myArray->GetLowerBound( 1 ); j <= myArray->GetUpperBound( 1 ); j++ )
      {
         array<int>^myIndicesArray = {i,j};
         myArray->SetValue( String::Concat( Convert::ToString( i ), j ), myIndicesArray );

      }

   // Displays the lower bounds and the upper bounds of each dimension.
   Console::WriteLine(  "Bounds:\tLower\tUpper" );
   for ( int i = 0; i < myArray->Rank; i++ )
      Console::WriteLine(  "{0}:\t{1}\t{2}", i, myArray->GetLowerBound( i ), myArray->GetUpperBound( i ) );

   // Displays the values of the Array.
   Console::WriteLine(  "The Array instance contains the following values:" );
   PrintValues( myArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Bounds:    Lower    Upper
 0:    2    4
 1:    3    7
 The Array instance contains the following values:
     23    24    25    26    27
     33    34    35    36    37
     43    44    45    46    47
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
CreateInstance 重载
System 命名空间


Array ..::.CreateInstance 方法 (Type, Int32, Int32, Int32)

Array
.
.
::
.
CreateInstance 方法 (Type, Int32, Int32, Int32)
Array 类

创建使用从零开始的索引、具有指定 Type 和维长的三维 Array。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateInstance ( _
    elementType As Type, _
    length1 As Integer, _
    length2 As Integer, _
    length3 As Integer _
) As Array
public static Array CreateInstance(
    Type elementType,
    int length1,
    int length2,
    int length3
)
public:
static Array^ CreateInstance(
    Type^ elementType,
    int length1,
    int length2,
    int length3
)
static member CreateInstance :
        elementType:Type *
        length1:int *
        length2:int *
        length3:int -> Array

参数

elementType
类型： System Type
要创建的 Array 的 Type。
length1
类型： System Int32
要创建的 Array 的第一维的大小。
length2
类型： System Int32
要创建的 Array 的第二维的大小。
length3
类型： System Int32
要创建的 Array 的第三维的大小。

返回值

类型： System Array
使用从零开始的索引、具有指定 Type 的新的三维 Array，每个维度都为指定的长度。
异常 | 条件
ArgumentNullException | elementType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | elementType 不是有效的 Type。
NotSupportedException | 不支持 elementType。例如，不支持 Void。 不支持 elementType。例如，不支持 Void。 - 或 - elementType 是一个开放式泛型类型。
ArgumentOutOfRangeException | length1 小于零。 - 或 - length2 小于零。 - 或 - length3 小于零。

与大多数类不同，Array 提供 CreateInstance 方法，以便允许后期绑定访问，而不是提供公共构造函数。

将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。 将引用类型元素初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。将值类型元素初始化为零。

此方法为 O(n) 操作，其中 n 是 length1、length2 和 length3 的乘积。

下面的代码示例说明如何创建和初始化三维 Array。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a three-dimensional Array of type Object.
        Dim my3DArray As Array = Array.CreateInstance(GetType(Object), 2, 3, 4)
        Dim i As Integer
        For i = my3DArray.GetLowerBound(0) To my3DArray.GetUpperBound(0)
            Dim j As Integer
            For j = my3DArray.GetLowerBound(1) To my3DArray.GetUpperBound(1)
                Dim k As Integer
                For k = my3DArray.GetLowerBound(2) To my3DArray.GetUpperBound(2)
                    my3DArray.SetValue("abc" + i.ToString() _
                       + j.ToString() + k.ToString(), i, j, k)
                Next k
            Next j
        Next i

        ' Displays the values of the Array.
        Console.WriteLine("The three-dimensional Array contains the " _
           + "following values:")
        PrintValues(my3DArray)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength(myArr.Rank - 1)
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The three-dimensional Array contains the following values:
'     abc000    abc001    abc002    abc003
'     abc010    abc011    abc012    abc013
'     abc020    abc021    abc022    abc023
'     abc100    abc101    abc102    abc103
'     abc110    abc111    abc112    abc113
'     abc120    abc121    abc122    abc123

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a three-dimensional Array of type Object.
      Array my3DArray=Array.CreateInstance( typeof(Object), 2, 3, 4 );
      for ( int i = my3DArray.GetLowerBound(0); i <= my3DArray.GetUpperBound(0); i++ )
         for ( int j = my3DArray.GetLowerBound(1); j <= my3DArray.GetUpperBound(1); j++ )
            for ( int k = my3DArray.GetLowerBound(2); k <= my3DArray.GetUpperBound(2); k++ )
               my3DArray.SetValue( "abc" + i + j + k, i, j, k );

      // Displays the values of the Array.
      Console.WriteLine( "The three-dimensional Array contains the following values:" );
      PrintValues( my3DArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The three-dimensional Array contains the following values:
    abc000    abc001    abc002    abc003
    abc010    abc011    abc012    abc013
    abc020    abc021    abc022    abc023
    abc100    abc101    abc102    abc103
    abc110    abc111    abc112    abc113
    abc120    abc121    abc122    abc123
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   // Creates and initializes a three-dimensional Array instance of type Object.
   Array^ my3DArray = Array::CreateInstance( Object::typeid, 2, 3, 4 );
   for ( int i = my3DArray->GetLowerBound( 0 ); i <= my3DArray->GetUpperBound( 0 ); i++ )
      for ( int j = my3DArray->GetLowerBound( 1 ); j <= my3DArray->GetUpperBound( 1 ); j++ )
         for ( int k = my3DArray->GetLowerBound( 2 ); k <= my3DArray->GetUpperBound( 2 ); k++ )
            my3DArray->SetValue( String::Concat( "abc", i, j, k ), i, j, k );

   // Displays the values of the Array.
   Console::WriteLine(  "The three-dimensional Array instance contains the following values:" );
   PrintValues( my3DArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The three-dimensional Array instance contains the following values:
     abc000    abc001    abc002    abc003
     abc010    abc011    abc012    abc013
     abc020    abc021    abc022    abc023
     abc100    abc101    abc102    abc103
     abc110    abc111    abc112    abc113
     abc120    abc121    abc122    abc123
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
CreateInstance 重载
System 命名空间


Array ..::.Exists <(Of <(T >)>) 方法

Array
.
.
::
.
Exists
<
(Of
<
(
T
>
)
>
)
方法
Array 类

确定指定数组包含的元素是否与指定谓词定义的条件匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Exists(Of T) ( _
    array As T(), _
    match As Predicate(Of T) _
) As Boolean
public static bool Exists<T>(
    T[] array,
    Predicate<T> match
)

public:
generic<typename T>
static bool Exists(
    array<T>^ array,
    Predicate<T>^ match
)
static member Exists :
        array:'T[] *
        match:Predicate<'T> -> bool

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型： System Boolean
如果 array 包含一个或多个元素与指定谓词定义的条件匹配，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，找到一个匹配项时处理就会停止。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，找到一个匹配项时处理就会停止。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例演示 Exists<(Of <(T>)>) 泛型方法和使用 Predicate<(Of <(T>)>) 泛型委托的其他几种泛型方法。

创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

Exists<(Of <(T>)>) 方法在预测方法为其返回 true 的第一个元素（在本例中为“Amargasaurus”）处停止并返回 true。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

TrueForAll<(Of <(T>)>) 泛型方法在预测方法为其返回 false 的第一个元素处停止并返回 false。

Find<(Of <(T>)>) 泛型方法从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对元素“Amargasaurus”返回 true 时，搜索停止。 Find<(Of <(T>)>) 泛型方法从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对元素“Amargasaurus”返回 true 时，搜索停止。

使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.Exists(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.Exists(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus: {0}", _
            Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.Find(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.Find(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLast(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindLast(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindAll(dinosaurs, AddressOf EndsWithSaurus):")
        Dim subArray() As String = _
            Array.FindAll(dinosaurs, AddressOf EndsWithSaurus)

        For Each dinosaur As String In subArray
            Console.WriteLine(dinosaur)
        Next

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.Exists(dinosaurs, AddressOf EndsWithSaurus): True
'
'Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus: False
'
'Array.Find(dinosaurs, AddressOf EndsWithSaurus): Amargasaurus
'
'Array.FindLast(dinosaurs, AddressOf EndsWithSaurus): Dilophosaurus
'
'Array.FindAll(dinosaurs, AddressOf EndsWithSaurus):
'Amargasaurus
'Dilophosaurus

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.Exists(dinosaurs, EndsWithSaurus): {0}",
            Array.Exists(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.TrueForAll(dinosaurs, EndsWithSaurus): {0}",
            Array.TrueForAll(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.Find(dinosaurs, EndsWithSaurus): {0}",
            Array.Find(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLast(dinosaurs, EndsWithSaurus): {0}",
            Array.FindLast(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindAll(dinosaurs, EndsWithSaurus):");
        string[] subArray =
            Array.FindAll(dinosaurs, EndsWithSaurus);

        foreach(string dinosaur in subArray)
        {
            Console.WriteLine(dinosaur);
        }
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.Exists(dinosaurs, EndsWithSaurus): True

Array.TrueForAll(dinosaurs, EndsWithSaurus): False

Array.Find(dinosaurs, EndsWithSaurus): Amargasaurus

Array.FindLast(dinosaurs, EndsWithSaurus): Dilophosaurus

Array.FindAll(dinosaurs, EndsWithSaurus):
Amargasaurus
Dilophosaurus
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::Exists(dinosaurs, EndsWithSaurus): {0}",
        Array::Exists(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::TrueForAll(dinosaurs, EndsWithSaurus): {0}",
        Array::TrueForAll(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::Find(dinosaurs, EndsWithSaurus): {0}",
        Array::Find(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLast(dinosaurs, EndsWithSaurus): {0}",
        Array::FindLast(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindAll(dinosaurs, EndsWithSaurus):");
    array<String^>^ subArray =
        Array::FindAll(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus));

    for each(String^ dinosaur in subArray)
    {
        Console::WriteLine(dinosaur);
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::Exists(dinosaurs, EndsWithSaurus): True

Array::TrueForAll(dinosaurs, EndsWithSaurus): False

Array::Find(dinosaurs, EndsWithSaurus): Amargasaurus

Array::FindLast(dinosaurs, EndsWithSaurus): Dilophosaurus

Array::FindAll(dinosaurs, EndsWithSaurus):
Amargasaurus
Dilophosaurus
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间
Find T
FindLast T
FindAll T
BinarySearch
IndexOf
LastIndexOf
TrueForAll T
Predicate T


Array ..::.Find <(Of <(T >)>) 方法

Array
.
.
::
.
Find
<
(Of
<
(
T
>
)
>
)
方法
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回整个 Array 中的第一个匹配项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Find(Of T) ( _
    array As T(), _
    match As Predicate(Of T) _
) As T
public static T Find<T>(
    T[] array,
    Predicate<T> match
)

public:
generic<typename T>
static T Find(
    array<T>^ array,
    Predicate<T>^ match
)
static member Find :
        array:'T[] *
        match:Predicate<'T> -> 'T

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型：T
如果找到与指定谓词定义的条件匹配的第一个元素，则为该元素；否则为类型 T 的默认值。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，在 Array 中向前移动，从第一个元素开始，到最后一个元素结束。找到匹配项时处理就会停止。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，在 Array 中向前移动，从第一个元素开始，到最后一个元素结束。找到匹配项时处理就会停止。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，在 Array 中向前移动，从第一个元素开始，到最后一个元素结束。找到匹配项时处理就会停止。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例将 Predicate<(Of <(T>)>) 委托与 Find<(Of <(T>)>) 泛型方法一起使用以搜索 Point 结构的数组。如果 X 和 Y 字段的产品大于 100，000，则该代理所代表的方法 ProductGT10 将返回 true。Find<(Of <(T>)>) 方法调用数组的每个元素的代理，从而在第一个满足测试条件的点返回。 下面的代码示例将 Predicate<(Of <(T>)>) 委托与 Find<(Of <(T>)>) 泛型方法一起使用以搜索 Point 结构的数组。如果 X 和 Y 字段的产品大于 100，000，则该代理所代表的方法 ProductGT10 将返回 true。Find<(Of <(T>)>) 方法调用数组的每个元素的代理，从而在第一个满足测试条件的点返回。 下面的代码示例将 Predicate<(Of <(T>)>) 委托与 Find<(Of <(T>)>) 泛型方法一起使用以搜索 Point 结构的数组。如果 X 和 Y 字段的产品大于 100，000，则该代理所代表的方法 ProductGT10 将返回 true。Find<(Of <(T>)>) 方法调用数组的每个元素的代理，从而在第一个满足测试条件的点返回。

说明 说明

Visual Basic 和 C# 用户不需要显式创建委托，也不需要指定泛型方法的类型参数。编译器会根据您提供的方法参数确定必需的类型。 Visual Basic 和 C# 用户不需要显式创建委托，也不需要指定泛型方法的类型参数。编译器会根据您提供的方法参数确定必需的类型。

Imports System
Imports System.Drawing

Public Class Example

    Public Shared Sub Main()

        ' Create an array of five Point structures.
        Dim points() As Point = { new Point(100, 200), _
            new Point(150, 250), new Point(250, 375), _
            new Point(275, 395), new Point(295, 450) }

        ' To find the first Point structure for which X times Y
        ' is greater than 100000, pass the array and a delegate
        ' that represents the ProductGT10 method to the Shared
        ' Find method of the Array class.
        Dim first As Point = Array.Find(points, _
            AddressOf ProductGT10)

        ' Note that you do not need to create the delegate
        ' explicitly, or to specify the type parameter of the
        ' generic method, because the compiler has enough
        ' context to determine that information for you.

        ' Display the first structure found.
        Console.WriteLine("Found: X = {0}, Y = {1}", _
            first.X, first.Y)
    End Sub

    ' This method implements the test condition for the Find
    ' method.
    Private Shared Function ProductGT10(ByVal p As Point) As Boolean
        If p.X * p.Y > 100000 Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Found: X = 275, Y = 395

using System;
using System.Drawing;

public class Example
{
    public static void Main()
    {
        // Create an array of five Point structures.
        Point[] points = { new Point(100, 200),
            new Point(150, 250), new Point(250, 375),
            new Point(275, 395), new Point(295, 450) };

        // To find the first Point structure for which X times Y
        // is greater than 100000, pass the array and a delegate
        // that represents the ProductGT10 method to the Shared
        // Find method of the Array class.
        Point first = Array.Find(points, ProductGT10);

        // Note that you do not need to create the delegate
        // explicitly, or to specify the type parameter of the
        // generic method, because the C# compiler has enough
        // context to determine that information for you.

        // Display the first structure found.
        Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
    }

    // This method implements the test condition for the Find
    // method.
    private static bool ProductGT10(Point p)
    {
        if (p.X * p.Y > 100000)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Found: X = 275, Y = 395
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间
Exists T
FindLast T
FindAll T
BinarySearch
IndexOf
LastIndexOf
Predicate T


Array ..::.FindAll <(Of <(T >)>) 方法

Array
.
.
::
.
FindAll
<
(Of
<
(
T
>
)
>
)
方法
Array 类

检索与指定谓词定义的条件匹配的所有元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FindAll(Of T) ( _
    array As T(), _
    match As Predicate(Of T) _
) As T()
public static T[] FindAll<T>(
    T[] array,
    Predicate<T> match
)

public:
generic<typename T>
static array<T>^ FindAll(
    array<T>^ array,
    Predicate<T>^ match
)
static member FindAll :
        array:'T[] *
        match:Predicate<'T> -> 'T[]

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型：
array<
T
>
[]
()
[]

如果找到一个其中所有元素均与指定谓词定义的条件匹配的 Array，则为该数组；否则为一个空 Array。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，与条件匹配的元素则保存在返回数组中。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，与条件匹配的元素则保存在返回数组中。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例演示 Find<(Of <(T>)>)、FindLast<(Of <(T>)>) 和 FindAll<(Of <(T>)>) 泛型方法。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 Find<(Of <(T>)>)、FindLast<(Of <(T>)>) 和 FindAll<(Of <(T>)>) 泛型方法。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 Find<(Of <(T>)>)、FindLast<(Of <(T>)>) 和 FindAll<(Of <(T>)>) 泛型方法。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

Find<(Of <(T>)>) 泛型方法从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对元素“Amargasaurus”返回 true 时，搜索停止。 Find<(Of <(T>)>) 泛型方法从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对元素“Amargasaurus”返回 true 时，搜索停止。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。

该代码示例还演示 Exists<(Of <(T>)>) 和 TrueForAll<(Of <(T>)>) 泛型方法。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.Exists(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.Exists(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus: {0}", _
            Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.Find(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.Find(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLast(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindLast(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindAll(dinosaurs, AddressOf EndsWithSaurus):")
        Dim subArray() As String = _
            Array.FindAll(dinosaurs, AddressOf EndsWithSaurus)

        For Each dinosaur As String In subArray
            Console.WriteLine(dinosaur)
        Next

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.Exists(dinosaurs, AddressOf EndsWithSaurus): True
'
'Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus: False
'
'Array.Find(dinosaurs, AddressOf EndsWithSaurus): Amargasaurus
'
'Array.FindLast(dinosaurs, AddressOf EndsWithSaurus): Dilophosaurus
'
'Array.FindAll(dinosaurs, AddressOf EndsWithSaurus):
'Amargasaurus
'Dilophosaurus

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.Exists(dinosaurs, EndsWithSaurus): {0}",
            Array.Exists(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.TrueForAll(dinosaurs, EndsWithSaurus): {0}",
            Array.TrueForAll(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.Find(dinosaurs, EndsWithSaurus): {0}",
            Array.Find(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLast(dinosaurs, EndsWithSaurus): {0}",
            Array.FindLast(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindAll(dinosaurs, EndsWithSaurus):");
        string[] subArray =
            Array.FindAll(dinosaurs, EndsWithSaurus);

        foreach(string dinosaur in subArray)
        {
            Console.WriteLine(dinosaur);
        }
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.Exists(dinosaurs, EndsWithSaurus): True

Array.TrueForAll(dinosaurs, EndsWithSaurus): False

Array.Find(dinosaurs, EndsWithSaurus): Amargasaurus

Array.FindLast(dinosaurs, EndsWithSaurus): Dilophosaurus

Array.FindAll(dinosaurs, EndsWithSaurus):
Amargasaurus
Dilophosaurus
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::Exists(dinosaurs, EndsWithSaurus): {0}",
        Array::Exists(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::TrueForAll(dinosaurs, EndsWithSaurus): {0}",
        Array::TrueForAll(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::Find(dinosaurs, EndsWithSaurus): {0}",
        Array::Find(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLast(dinosaurs, EndsWithSaurus): {0}",
        Array::FindLast(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindAll(dinosaurs, EndsWithSaurus):");
    array<String^>^ subArray =
        Array::FindAll(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus));

    for each(String^ dinosaur in subArray)
    {
        Console::WriteLine(dinosaur);
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::Exists(dinosaurs, EndsWithSaurus): True

Array::TrueForAll(dinosaurs, EndsWithSaurus): False

Array::Find(dinosaurs, EndsWithSaurus): Amargasaurus

Array::FindLast(dinosaurs, EndsWithSaurus): Dilophosaurus

Array::FindAll(dinosaurs, EndsWithSaurus):
Amargasaurus
Dilophosaurus
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间
Exists T
Find T
FindLast T
BinarySearch
IndexOf
LastIndexOf
Predicate T


Array ..::.FindIndex 方法

Array
.
.
::
.
FindIndex 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回 Array 或其某个部分中第一个匹配项的从零开始的索引。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.FindIndex <(Of <(T >)>) 方法 ( array<T >[]()[], Predicate <(Of <(T >)>))

Array
.
.
::
.
FindIndex
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Predicate
<
(Of
<
(
T
>
)
>
)
)
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回整个 Array 中第一个匹配项的从零开始的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FindIndex(Of T) ( _
    array As T(), _
    match As Predicate(Of T) _
) As Integer
public static int FindIndex<T>(
    T[] array,
    Predicate<T> match
)

public:
generic<typename T>
static int FindIndex(
    array<T>^ array,
    Predicate<T>^ match
)
static member FindIndex :
        array:'T[] *
        match:Predicate<'T> -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型： System Int32
如果找到与 match 定义的条件相匹配的第一个元素，则为该元素的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

从 Array 的第一个元素开始向前搜索，到最后一个元素停止搜索。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例演示 FindIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

FindIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 1 的元素返回 true 时，搜索停止。 FindIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 1 的元素返回 true 时，搜索停止。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus))

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus): 1
'
'Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus): 5
'
'Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, 2, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, 2, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, 2, 3, EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.FindIndex(dinosaurs, EndsWithSaurus): 1

Array.FindIndex(dinosaurs, 2, EndsWithSaurus): 5

Array.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): -1
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::FindIndex(dinosaurs, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindIndex(dinosaurs, 2, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, 2, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindIndex(dinosaurs, 2, 3, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, 2, 3, gcnew Predicate<String^>(EndsWithSaurus)));
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::FindIndex(dinosaurs, EndsWithSaurus): 1

Array::FindIndex(dinosaurs, 2, EndsWithSaurus): 5

Array::FindIndex(dinosaurs, 2, 3, EndsWithSaurus): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
FindIndex 重载
System 命名空间
Exists T
Find T
FindLast T
FindAll T
BinarySearch
IndexOf
LastIndexOf
Predicate T


Array ..::.FindIndex <(Of <(T >)>) 方法 ( array<T >[]()[], Int32, Predicate <(Of <(T >)>))

Array
.
.
::
.
FindIndex
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Int32, Predicate
<
(Of
<
(
T
>
)
>
)
)
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回 Array 中从指定索引到最后一个元素的元素范围内第一个匹配项的从零开始的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FindIndex(Of T) ( _
    array As T(), _
    startIndex As Integer, _
    match As Predicate(Of T) _
) As Integer
public static int FindIndex<T>(
    T[] array,
    int startIndex,
    Predicate<T> match
)

public:
generic<typename T>
static int FindIndex(
    array<T>^ array,
    int startIndex,
    Predicate<T>^ match
)
static member FindIndex :
        array:'T[] *
        startIndex:int *
        match:Predicate<'T> -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
startIndex
类型： System Int32
从零开始的搜索的起始索引。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型： System Int32
如果找到与 match 定义的条件相匹配的第一个元素，则为该元素的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。

在 Array 中从 startIndex 开始向前搜索，到最后一个元素停止搜索。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。

此方法的运算复杂度为 O(n)，其中 n 是从 startIndex 到 array 末尾这一范围所包含的元素数目。

下面的代码示例演示 FindIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

FindIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 1 的元素返回 true 时，搜索停止。 FindIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 1 的元素返回 true 时，搜索停止。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus))

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus): 1
'
'Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus): 5
'
'Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, 2, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, 2, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, 2, 3, EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.FindIndex(dinosaurs, EndsWithSaurus): 1

Array.FindIndex(dinosaurs, 2, EndsWithSaurus): 5

Array.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): -1
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::FindIndex(dinosaurs, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindIndex(dinosaurs, 2, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, 2, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindIndex(dinosaurs, 2, 3, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, 2, 3, gcnew Predicate<String^>(EndsWithSaurus)));
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::FindIndex(dinosaurs, EndsWithSaurus): 1

Array::FindIndex(dinosaurs, 2, EndsWithSaurus): 5

Array::FindIndex(dinosaurs, 2, 3, EndsWithSaurus): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
FindIndex 重载
System 命名空间
Exists T
Find T
FindLast T
FindAll T
BinarySearch
IndexOf
LastIndexOf
Predicate T


Array ..::.FindIndex <(Of <(T >)>) 方法 ( array<T >[]()[], Int32, Int32, Predicate <(Of <(T >)>))

Array
.
.
::
.
FindIndex
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Int32, Int32, Predicate
<
(Of
<
(
T
>
)
>
)
)
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回 Array 中从指定索引开始并包含指定元素个数的元素范围内第一个匹配项的从零开始的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FindIndex(Of T) ( _
    array As T(), _
    startIndex As Integer, _
    count As Integer, _
    match As Predicate(Of T) _
) As Integer
public static int FindIndex<T>(
    T[] array,
    int startIndex,
    int count,
    Predicate<T> match
)

public:
generic<typename T>
static int FindIndex(
    array<T>^ array,
    int startIndex,
    int count,
    Predicate<T>^ match
)
static member FindIndex :
        array:'T[] *
        startIndex:int *
        count:int *
        match:Predicate<'T> -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
startIndex
类型： System Int32
从零开始的搜索的起始索引。
count
类型： System Int32
要搜索的部分中的元素数。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型： System Int32
如果找到与 match 定义的条件相匹配的第一个元素，则为该元素的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。 - 或 - count 小于零。 - 或 - startIndex 和 count 指定的不是 array 中的有效部分。

如果 count 大于 0，则在 Array 中向前搜索，从 startIndex 处开始，到 startIndex + count - 1 处结束。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。

此方法的运算复杂度为 O(n)，其中 n 是 count。

下面的代码示例演示 FindIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

FindIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 1 的元素返回 true 时，搜索停止。 FindIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 1 的元素返回 true 时，搜索停止。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 2 处开始搜索数组，直至数组的结尾处。它找到位置 5 处的元素。最后，FindIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载被用于搜索以位置 2 开始的三个元素的范围。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus))

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus): 1
'
'Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus): 5
'
'Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, 2, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, 2, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, 2, 3, EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.FindIndex(dinosaurs, EndsWithSaurus): 1

Array.FindIndex(dinosaurs, 2, EndsWithSaurus): 5

Array.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): -1
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::FindIndex(dinosaurs, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindIndex(dinosaurs, 2, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, 2, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindIndex(dinosaurs, 2, 3, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, 2, 3, gcnew Predicate<String^>(EndsWithSaurus)));
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::FindIndex(dinosaurs, EndsWithSaurus): 1

Array::FindIndex(dinosaurs, 2, EndsWithSaurus): 5

Array::FindIndex(dinosaurs, 2, 3, EndsWithSaurus): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
FindIndex 重载
System 命名空间
Exists T
Find T
FindLast T
FindAll T
BinarySearch
IndexOf
LastIndexOf
Predicate T


Array ..::.FindLast <(Of <(T >)>) 方法

Array
.
.
::
.
FindLast
<
(Of
<
(
T
>
)
>
)
方法
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回整个 Array 中的最后一个匹配项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FindLast(Of T) ( _
    array As T(), _
    match As Predicate(Of T) _
) As T
public static T FindLast<T>(
    T[] array,
    Predicate<T> match
)

public:
generic<typename T>
static T FindLast(
    array<T>^ array,
    Predicate<T>^ match
)
static member FindLast :
        array:'T[] *
        match:Predicate<'T> -> 'T

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型：T
如果找到与指定谓词定义的条件匹配的最后一个元素，则为该元素；否则为类型 T 的默认值。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，在 Array 中向后移动，从最后一个元素开始，到第一个元素结束。找到匹配项时处理就会停止。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，在 Array 中向后移动，从最后一个元素开始，到第一个元素结束。找到匹配项时处理就会停止。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，在 Array 中向后移动，从最后一个元素开始，到第一个元素结束。找到匹配项时处理就会停止。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例演示 Find<(Of <(T>)>)、FindLast<(Of <(T>)>) 和 FindAll<(Of <(T>)>) 泛型方法。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 Find<(Of <(T>)>)、FindLast<(Of <(T>)>) 和 FindAll<(Of <(T>)>) 泛型方法。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 Find<(Of <(T>)>)、FindLast<(Of <(T>)>) 和 FindAll<(Of <(T>)>) 泛型方法。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

Find<(Of <(T>)>) 泛型方法从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对元素“Amargasaurus”返回 true 时，搜索停止。 Find<(Of <(T>)>) 泛型方法从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对元素“Amargasaurus”返回 true 时，搜索停止。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 泛型方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 泛型方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。

该代码示例还演示 Exists<(Of <(T>)>) 和 TrueForAll<(Of <(T>)>) 泛型方法。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.Exists(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.Exists(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus: {0}", _
            Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.Find(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.Find(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLast(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindLast(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindAll(dinosaurs, AddressOf EndsWithSaurus):")
        Dim subArray() As String = _
            Array.FindAll(dinosaurs, AddressOf EndsWithSaurus)

        For Each dinosaur As String In subArray
            Console.WriteLine(dinosaur)
        Next

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.Exists(dinosaurs, AddressOf EndsWithSaurus): True
'
'Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus: False
'
'Array.Find(dinosaurs, AddressOf EndsWithSaurus): Amargasaurus
'
'Array.FindLast(dinosaurs, AddressOf EndsWithSaurus): Dilophosaurus
'
'Array.FindAll(dinosaurs, AddressOf EndsWithSaurus):
'Amargasaurus
'Dilophosaurus

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.Exists(dinosaurs, EndsWithSaurus): {0}",
            Array.Exists(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.TrueForAll(dinosaurs, EndsWithSaurus): {0}",
            Array.TrueForAll(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.Find(dinosaurs, EndsWithSaurus): {0}",
            Array.Find(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLast(dinosaurs, EndsWithSaurus): {0}",
            Array.FindLast(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindAll(dinosaurs, EndsWithSaurus):");
        string[] subArray =
            Array.FindAll(dinosaurs, EndsWithSaurus);

        foreach(string dinosaur in subArray)
        {
            Console.WriteLine(dinosaur);
        }
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.Exists(dinosaurs, EndsWithSaurus): True

Array.TrueForAll(dinosaurs, EndsWithSaurus): False

Array.Find(dinosaurs, EndsWithSaurus): Amargasaurus

Array.FindLast(dinosaurs, EndsWithSaurus): Dilophosaurus

Array.FindAll(dinosaurs, EndsWithSaurus):
Amargasaurus
Dilophosaurus
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::Exists(dinosaurs, EndsWithSaurus): {0}",
        Array::Exists(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::TrueForAll(dinosaurs, EndsWithSaurus): {0}",
        Array::TrueForAll(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::Find(dinosaurs, EndsWithSaurus): {0}",
        Array::Find(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLast(dinosaurs, EndsWithSaurus): {0}",
        Array::FindLast(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindAll(dinosaurs, EndsWithSaurus):");
    array<String^>^ subArray =
        Array::FindAll(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus));

    for each(String^ dinosaur in subArray)
    {
        Console::WriteLine(dinosaur);
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::Exists(dinosaurs, EndsWithSaurus): True

Array::TrueForAll(dinosaurs, EndsWithSaurus): False

Array::Find(dinosaurs, EndsWithSaurus): Amargasaurus

Array::FindLast(dinosaurs, EndsWithSaurus): Dilophosaurus

Array::FindAll(dinosaurs, EndsWithSaurus):
Amargasaurus
Dilophosaurus
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间
Exists T
Find T
FindAll T
BinarySearch
IndexOf
LastIndexOf
Predicate T


Array ..::.FindLastIndex 方法

Array
.
.
::
.
FindLastIndex 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回 Array 或其某个部分中最后一个匹配项的从零开始的索引。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.FindLastIndex <(Of <(T >)>) 方法 ( array<T >[]()[], Predicate <(Of <(T >)>))

Array
.
.
::
.
FindLastIndex
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Predicate
<
(Of
<
(
T
>
)
>
)
)
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回整个 Array 中最后一个匹配项的从零开始的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FindLastIndex(Of T) ( _
    array As T(), _
    match As Predicate(Of T) _
) As Integer
public static int FindLastIndex<T>(
    T[] array,
    Predicate<T> match
)

public:
generic<typename T>
static int FindLastIndex(
    array<T>^ array,
    Predicate<T>^ match
)
static member FindLastIndex :
        array:'T[] *
        match:Predicate<'T> -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型： System Int32
如果找到与 match 定义的条件相匹配的最后一个元素，则为该元素的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

在 Array 中从最后一个元素向后开始搜索，并在第一个元素停止搜索。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例演示 FindLastIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindLastIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindLastIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

FindLastIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从末尾处向后遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 5 的元素返回 true 时，搜索停止。 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从末尾处向后遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 5 的元素返回 true 时，搜索停止。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.FindLastIndex(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindLastIndex(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLastIndex(dinosaurs, 4, AddressOf EndsWithSaurus): {0}", _
            Array.FindLastIndex(dinosaurs, 4, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLastIndex(dinosaurs, 4, 3, AddressOf EndsWithSaurus): {0}", _
            Array.FindLastIndex(dinosaurs, 4, 3, AddressOf EndsWithSaurus))

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.FindLastIndex(dinosaurs, AddressOf EndsWithSaurus): 5
'
'Array.FindLastIndex(dinosaurs, 4, AddressOf EndsWithSaurus): 1
'
'Array.FindLastIndex(dinosaurs, 4, 3, AddressOf EndsWithSaurus): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.FindLastIndex(dinosaurs, EndsWithSaurus): {0}",
            Array.FindLastIndex(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLastIndex(dinosaurs, 4, EndsWithSaurus): {0}",
            Array.FindLastIndex(dinosaurs, 4, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): {0}",
            Array.FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.FindLastIndex(dinosaurs, EndsWithSaurus): 5

Array.FindLastIndex(dinosaurs, 4, EndsWithSaurus): 1

Array.FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): -1
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::FindLastIndex(dinosaurs, EndsWithSaurus): {0}",
        Array::FindLastIndex(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLastIndex(dinosaurs, 4, EndsWithSaurus): {0}",
        Array::FindLastIndex(dinosaurs, 4, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): {0}",
        Array::FindLastIndex(dinosaurs, 4, 3, gcnew Predicate<String^>(EndsWithSaurus)));
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::FindLastIndex(dinosaurs, EndsWithSaurus): 5

Array::FindLastIndex(dinosaurs, 4, EndsWithSaurus): 1

Array::FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
FindLastIndex 重载
System 命名空间
Exists T
Find T
FindLast T
FindAll T
BinarySearch
IndexOf
LastIndexOf
Predicate T


Array ..::.FindLastIndex <(Of <(T >)>) 方法 ( array<T >[]()[], Int32, Predicate <(Of <(T >)>))

Array
.
.
::
.
FindLastIndex
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Int32, Predicate
<
(Of
<
(
T
>
)
>
)
)
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回 Array 中从第一个元素到指定索引的元素范围内最后一个匹配项的从零开始的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FindLastIndex(Of T) ( _
    array As T(), _
    startIndex As Integer, _
    match As Predicate(Of T) _
) As Integer
public static int FindLastIndex<T>(
    T[] array,
    int startIndex,
    Predicate<T> match
)

public:
generic<typename T>
static int FindLastIndex(
    array<T>^ array,
    int startIndex,
    Predicate<T>^ match
)
static member FindLastIndex :
        array:'T[] *
        startIndex:int *
        match:Predicate<'T> -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
startIndex
类型： System Int32
向后搜索的从零开始的起始索引。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型： System Int32
如果找到与 match 定义的条件相匹配的最后一个元素，则为该元素的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。

在 Array 中从 startIndex 开始向后搜索，并在第一个元素停止搜索。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。

此方法的运算复杂度为 O(n)，其中 n 是从 array 开头到 startIndex 这一范围所包含的元素数目。

下面的代码示例演示 FindLastIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindLastIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindLastIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

FindLastIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从末尾处向后遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 5 的元素返回 true 时，搜索停止。 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从末尾处向后遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 5 的元素返回 true 时，搜索停止。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.FindLastIndex(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindLastIndex(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLastIndex(dinosaurs, 4, AddressOf EndsWithSaurus): {0}", _
            Array.FindLastIndex(dinosaurs, 4, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLastIndex(dinosaurs, 4, 3, AddressOf EndsWithSaurus): {0}", _
            Array.FindLastIndex(dinosaurs, 4, 3, AddressOf EndsWithSaurus))

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.FindLastIndex(dinosaurs, AddressOf EndsWithSaurus): 5
'
'Array.FindLastIndex(dinosaurs, 4, AddressOf EndsWithSaurus): 1
'
'Array.FindLastIndex(dinosaurs, 4, 3, AddressOf EndsWithSaurus): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.FindLastIndex(dinosaurs, EndsWithSaurus): {0}",
            Array.FindLastIndex(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLastIndex(dinosaurs, 4, EndsWithSaurus): {0}",
            Array.FindLastIndex(dinosaurs, 4, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): {0}",
            Array.FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.FindLastIndex(dinosaurs, EndsWithSaurus): 5

Array.FindLastIndex(dinosaurs, 4, EndsWithSaurus): 1

Array.FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): -1
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::FindLastIndex(dinosaurs, EndsWithSaurus): {0}",
        Array::FindLastIndex(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLastIndex(dinosaurs, 4, EndsWithSaurus): {0}",
        Array::FindLastIndex(dinosaurs, 4, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): {0}",
        Array::FindLastIndex(dinosaurs, 4, 3, gcnew Predicate<String^>(EndsWithSaurus)));
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::FindLastIndex(dinosaurs, EndsWithSaurus): 5

Array::FindLastIndex(dinosaurs, 4, EndsWithSaurus): 1

Array::FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
FindLastIndex 重载
System 命名空间
Exists T
Find T
FindLast T
FindAll T
BinarySearch
IndexOf
LastIndexOf
Predicate T


Array ..::.FindLastIndex <(Of <(T >)>) 方法 ( array<T >[]()[], Int32, Int32, Predicate <(Of <(T >)>))

Array
.
.
::
.
FindLastIndex
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Int32, Int32, Predicate
<
(Of
<
(
T
>
)
>
)
)
Array 类

搜索与指定谓词定义的条件匹配的元素，然后返回 Array 中包含指定元素个数并以指定索引结束的元素范围内最后一个匹配项的从零开始的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FindLastIndex(Of T) ( _
    array As T(), _
    startIndex As Integer, _
    count As Integer, _
    match As Predicate(Of T) _
) As Integer
public static int FindLastIndex<T>(
    T[] array,
    int startIndex,
    int count,
    Predicate<T> match
)

public:
generic<typename T>
static int FindLastIndex(
    array<T>^ array,
    int startIndex,
    int count,
    Predicate<T>^ match
)
static member FindLastIndex :
        array:'T[] *
        startIndex:int *
        count:int *
        match:Predicate<'T> -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
startIndex
类型： System Int32
向后搜索的从零开始的起始索引。
count
类型： System Int32
要搜索的部分中的元素数。
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>)，定义要搜索的元素的条件。

返回值

类型： System Int32
如果找到与 match 定义的条件相匹配的最后一个元素，则为该元素的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。 - 或 - count 小于零。 - 或 - startIndex 和 count 指定的不是 array 中的有效部分。

如果 count 大于 0，则在 Array 中向后搜索，从 startIndex 处开始，到 startIndex - count + 1 处结束。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)。

此方法的运算复杂度为 O(n)，其中 n 是 count。

下面的代码示例演示 FindLastIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindLastIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 下面的代码示例演示 FindLastIndex 泛型方法的所有三种重载。创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

FindLastIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从末尾处向后遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 5 的元素返回 true 时，搜索停止。 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Predicate<(Of <(T>)>)) 方法重载从末尾处向后遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对位置 5 的元素返回 true 时，搜索停止。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。 使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Predicate<(Of <(T>)>)) 方法重载从位置 4 处开始搜索数组，并向后继续搜索直至数组的开始处。它找到位置 1 处的元素。最后，使用 FindLastIndex<(Of <(T>)>)(array<T>[]()[], Int32, Int32, Predicate<(Of <(T>)>)) 方法重载在从位置 4 处开始的三个元素（即，元素 4、3 和 2）范围内向后搜索。该方法重载返回 –1，因为在该范围内没有以“saurus”结尾的恐龙名称。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.FindLastIndex(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindLastIndex(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLastIndex(dinosaurs, 4, AddressOf EndsWithSaurus): {0}", _
            Array.FindLastIndex(dinosaurs, 4, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLastIndex(dinosaurs, 4, 3, AddressOf EndsWithSaurus): {0}", _
            Array.FindLastIndex(dinosaurs, 4, 3, AddressOf EndsWithSaurus))

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.FindLastIndex(dinosaurs, AddressOf EndsWithSaurus): 5
'
'Array.FindLastIndex(dinosaurs, 4, AddressOf EndsWithSaurus): 1
'
'Array.FindLastIndex(dinosaurs, 4, 3, AddressOf EndsWithSaurus): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.FindLastIndex(dinosaurs, EndsWithSaurus): {0}",
            Array.FindLastIndex(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLastIndex(dinosaurs, 4, EndsWithSaurus): {0}",
            Array.FindLastIndex(dinosaurs, 4, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): {0}",
            Array.FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.FindLastIndex(dinosaurs, EndsWithSaurus): 5

Array.FindLastIndex(dinosaurs, 4, EndsWithSaurus): 1

Array.FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): -1
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::FindLastIndex(dinosaurs, EndsWithSaurus): {0}",
        Array::FindLastIndex(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLastIndex(dinosaurs, 4, EndsWithSaurus): {0}",
        Array::FindLastIndex(dinosaurs, 4, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): {0}",
        Array::FindLastIndex(dinosaurs, 4, 3, gcnew Predicate<String^>(EndsWithSaurus)));
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::FindLastIndex(dinosaurs, EndsWithSaurus): 5

Array::FindLastIndex(dinosaurs, 4, EndsWithSaurus): 1

Array::FindLastIndex(dinosaurs, 4, 3, EndsWithSaurus): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
FindLastIndex 重载
System 命名空间
Exists T
Find T
FindLast T
FindAll T
BinarySearch
IndexOf
LastIndexOf
Predicate T


Array ..::.ForEach <(Of <(T >)>) 方法

Array
.
.
::
.
ForEach
<
(Of
<
(
T
>
)
>
)
方法
Array 类

对指定数组的每个元素执行指定操作。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub ForEach(Of T) ( _
    array As T(), _
    action As Action(Of T) _
)
public static void ForEach<T>(
    T[] array,
    Action<T> action
)

public:
generic<typename T>
static void ForEach(
    array<T>^ array,
    Action<T>^ action
)
static member ForEach :
        array:'T[] *
        action:Action<'T> -> unit

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

从零开始的一维 Array，要对其元素执行操作。
action
类型： System Action
<
(Of
<
(
T
>
)
>
)

要对 array 的每个元素执行的 Action<(Of <(T>)>)。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - action 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Action<(Of <(T>)>) 是对方法的委托，它对传递给自己的对象执行操作。array 的元素被逐个传递给 Action<(Of <(T>)>)。 Action<(Of <(T>)>) 是对方法的委托，它对传递给自己的对象执行操作。array 的元素被逐个传递给 Action<(Of <(T>)>)。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的示例演示如何使用 ForEach<(Of <(T>)>) 来显示整数数组中的每个元素的平方。

Imports System

Public Class SamplesArray
    Public Shared Sub Main()
        ' create a three element array of integers
        Dim intArray() As Integer = New Integer() {2, 3, 4}

        ' set a delegate for the ShowSquares method
        Dim action As New Action(Of Integer)(AddressOf ShowSquares)

        Array.ForEach(intArray, action)
    End Sub

    Private Shared Sub ShowSquares(val As Integer)
        Console.WriteLine("{0:d} squared = {1:d}", val, val*val)
    End Sub
End Class

' This code produces the following output:
'
' 2 squared = 4
' 3 squared = 9
' 4 squared = 16

using System;

public class SamplesArray
{
    public static void Main()
    {
        // create a three element array of integers
        int[] intArray = new int[] {2, 3, 4};

        // set a delegate for the ShowSquares method
        Action<int> action = new Action<int>(ShowSquares);

        Array.ForEach(intArray, action);
    }

    private static void ShowSquares(int val)
    {
        Console.WriteLine("{0:d} squared = {1:d}", val, val*val);
    }
}

/*
This code produces the following output:

2 squared = 4
3 squared = 9
4 squared = 16
*/

using namespace System;

public ref class SamplesArray
{
public:
    static void Main()
    {
        // create a three element array of integers
        array<int>^ intArray = gcnew array<int> {2, 3, 4};

        // set a delegate for the ShowSquares method
        Action<int>^ action = gcnew Action<int>(ShowSquares);

        Array::ForEach(intArray, action);
    }

private:
    static void ShowSquares(int val)
    {
        Console::WriteLine("{0:d} squared = {1:d}", val, val*val);
    }
};

int main()
{
    SamplesArray::Main();
}

/*
This code produces the following output:

2 squared = 4
3 squared = 9
4 squared = 16
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间
Action T


Array ..::.GetEnumerator 方法

Array
.
.
::
.
GetEnumerator 方法
Array 类

返回 Array 的 IEnumerator。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetEnumerator As IEnumerator
public IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
Array 的 IEnumerator。

实现

C# 语言的 foreach 语句（在 C++ 中为 for each，在 Visual Basic 中为 For Each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 C++ 中为 for each，在 Visual Basic 中为 For Each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

下面的代码示例显示如何使用 GetEnumerator 列出数组的元素。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a new Array.
      Dim myArr(10) As [String]
      myArr(0) = "The"
      myArr(1) = "quick"
      myArr(2) = "brown"
      myArr(3) = "fox"
      myArr(4) = "jumped"
      myArr(5) = "over"
      myArr(6) = "the"
      myArr(7) = "lazy"
      myArr(8) = "dog"

      ' Displays the values of the Array.
      Dim i As Integer = 0
      Dim myEnumerator As System.Collections.IEnumerator = myArr.GetEnumerator()
      Console.WriteLine("The Array contains the following values:")
      While myEnumerator.MoveNext() And Not (myEnumerator.Current Is Nothing)
         Console.WriteLine("[{0}] {1}", i, myEnumerator.Current)
         i += 1
      End While

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'The Array contains the following values:
'[0] The
'[1] quick
'[2] brown
'[3] fox
'[4] jumped
'[5] over
'[6] the
'[7] lazy
'[8] dog

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array.
      String[] myArr = new String[10];
      myArr[0] = "The";
      myArr[1] = "quick";
      myArr[2] = "brown";
      myArr[3] = "fox";
      myArr[4] = "jumped";
      myArr[5] = "over";
      myArr[6] = "the";
      myArr[7] = "lazy";
      myArr[8] = "dog";

      // Displays the values of the Array.
      int i = 0;
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      Console.WriteLine( "The Array contains the following values:" );
      while (( myEnumerator.MoveNext() ) && ( myEnumerator.Current != null ))
         Console.WriteLine( "[{0}] {1}", i++, myEnumerator.Current );

   }

}

/*
This code produces the following output.

The Array contains the following values:
[0] The
[1] quick
[2] brown
[3] fox
[4] jumped
[5] over
[6] the
[7] lazy
[8] dog

*/

using namespace System;

int main()
{
   // Creates and initializes a new Array.
   array<String^>^myArr = gcnew array<String^>(10);
   myArr[ 0 ] = "The";
   myArr[ 1 ] = "quick";
   myArr[ 2 ] = "brown";
   myArr[ 3 ] = "fox";
   myArr[ 4 ] = "jumped";
   myArr[ 5 ] = "over";
   myArr[ 6 ] = "the";
   myArr[ 7 ] = "lazy";
   myArr[ 8 ] = "dog";

   // Displays the values of the Array.
   int i = 0;
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   Console::WriteLine( "The Array contains the following values:" );
   while ( (myEnumerator->MoveNext()) && (myEnumerator->Current != nullptr) )
      Console::WriteLine( "[{0}] {1}", i++, myEnumerator->Current );
}

/*
This code produces the following output.

The Array contains the following values:
[0] The
[1] quick
[2] brown
[3] fox
[4] jumped
[5] over
[6] the
[7] lazy
[8] dog

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.GetLength 方法

Array
.
.
::
.
GetLength 方法
Array 类

获取一个 32 位整数，该整数表示 Array 的指定维中的元素数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetLength ( _
    dimension As Integer _
) As Integer
public int GetLength(
    int dimension
)
public:
int GetLength(
    int dimension
)
member GetLength :
        dimension:int -> int

参数

dimension
类型： System Int32
Array 的从零开始的维度，其长度需要确定。

返回值

类型： System Int32
一个 32 位整数，它表示指定维中的元素数。
异常 | 条件
IndexOutOfRangeException | dimension 小于零。 - 或 - dimension 等于或大于 Rank。

GetLength(0) 为 GetLength 的一个示例，它返回 Array 的第一维中的元素个数。

此方法是 O(1) 操作。

下面的示例演示如何使用 GetLength 显示两个具有不同秩的数组的尺寸。

Imports System

Public Class SamplesArray
    Public Shared Sub Main()
        ' make a single dimension array
        Dim MyArray1 As Array = Array.CreateInstance(GetType(Integer), 5)

        ' make a 3 dimensional array
        Dim MyArray2 As Array = Array.CreateInstance(GetType(Integer), 5, 3, 2)

        ' make an array container
        Dim BossArray As Array = Array.CreateInstance(GetType(Array), 2)
        BossArray.SetValue(MyArray1, 0)
        BossArray.SetValue(MyArray2, 1)

        Dim i As Integer = 0
        Dim j As Integer
        Dim rank As Integer
        For Each anArray As Array In BossArray
            rank = anArray.Rank
            If rank > 1
                Console.WriteLine("Lengths of {0:d} dimension array[{1:d}]", rank, i)
                ' show the lengths of each dimension
                For j = 0 To rank - 1
                    Console.WriteLine("    Length of dimension({0:d}) = {1:d}", j, anArray.GetLength(j))
                Next j
            Else
                Console.WriteLine("Lengths of single dimension array[{0:d}]", i)
            End If
            ' show the total length of the entire array or all dimensions
            Console.WriteLine("    Total length of the array = {0:d}", anArray.Length)
            Console.WriteLine()
            i = i + 1
        Next anArray
    End Sub
End Class

'This code produces the following output:
'
'Lengths of single dimension array[0]
'    Total length of the array = 5
'
'Lengths of 3 dimension array[1]
'    Length of dimension(0) = 5
'    Length of dimension(1) = 3
'    Length of dimension(2) = 2
'    Total length of the array = 30

using System;

public class SamplesArray
{
    public static void Main()
    {
        // make a single dimension array
        Array MyArray1 = Array.CreateInstance(typeof(int), 5);

        // make a 3 dimensional array
        Array MyArray2 = Array.CreateInstance(typeof(int), 5, 3, 2);

        // make an array container
        Array BossArray = Array.CreateInstance(typeof(Array), 2);
        BossArray.SetValue(MyArray1, 0);
        BossArray.SetValue(MyArray2, 1);

        int i = 0, j, rank;
        foreach (Array anArray in BossArray)
        {
            rank = anArray.Rank;
            if (rank > 1)
            {
                Console.WriteLine("Lengths of {0:d} dimension array[{1:d}]", rank, i);
                // show the lengths of each dimension
                for (j = 0; j < rank; j++)
                {
                    Console.WriteLine("    Length of dimension({0:d}) = {1:d}", j, anArray.GetLength(j));
                }
            }
            else
            {
                Console.WriteLine("Lengths of single dimension array[{0:d}]", i);
            }
            // show the total length of the entire array or all dimensions
            Console.WriteLine("    Total length of the array = {0:d}", anArray.Length);
            Console.WriteLine();
            i++;
        }
    }
}

/*
This code produces the following output:

Lengths of single dimension array[0]
    Total length of the array = 5

Lengths of 3 dimension array[1]
    Length of dimension(0) = 5
    Length of dimension(1) = 3
    Length of dimension(2) = 2
    Total length of the array = 30
*/

using namespace System;

public ref class SamplesArray
{
public:
    static void Main()
    {
        // make a single dimension array
        Array^ MyArray1 = Array::CreateInstance(int::typeid, 5);

        // make a 3 dimensional array
        Array^ MyArray2 = Array::CreateInstance(int::typeid, 5, 3, 2);

        // make an array container
        Array^ BossArray = Array::CreateInstance(Array::typeid, 2);
        BossArray->SetValue(MyArray1, 0);
        BossArray->SetValue(MyArray2, 1);

        int i = 0, j, rank;
        for each (Array^ anArray in BossArray)
        {
            rank = anArray->Rank;
            if (rank > 1)
            {
                Console::WriteLine("Lengths of {0:d} dimension array[{1:d}]", rank, i);
                // show the lengths of each dimension
                for (j = 0; j < rank; j++)
                {
                    Console::WriteLine("    Length of dimension({0:d}) = {1:d}", j, anArray->GetLength(j));
                }
            }
            else
            {
                Console::WriteLine("Lengths of single dimension array[{0:d}]", i);
            }
            // show the total length of the entire array or all dimensions
            Console::WriteLine("    Total length of the array = {0:d}", anArray->Length);
            Console::WriteLine();
            i++;
        }
    }
};

int main()
{
    SamplesArray::Main();
}

/*
This code produces the following output:

Lengths of single dimension array[0]
    Total length of the array = 5

Lengths of 3 dimension array[1]
    Length of dimension(0) = 5
    Length of dimension(1) = 3
    Length of dimension(2) = 2
    Total length of the array = 30
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
Length
GetLongLength
ICollection Count
Rank


Array ..::.GetLongLength 方法

Array
.
.
::
.
GetLongLength 方法
Array 类

获取一个 64 位整数，该整数表示 Array 的指定维中的元素数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function GetLongLength ( _
    dimension As Integer _
) As Long
[ComVisibleAttribute(false)]
public long GetLongLength(
    int dimension
)
[ComVisibleAttribute(false)]
public:
long long GetLongLength(
    int dimension
)
[<ComVisibleAttribute(false)>]
member GetLongLength :
        dimension:int -> int64

参数

dimension
类型： System Int32
Array 的从零开始的维度，其长度需要确定。

返回值

类型： System Int64
一个 64 位整数，它表示指定维中的元素数。
异常 | 条件
IndexOutOfRangeException | dimension 小于零。 - 或 - dimension 等于或大于 Rank。

GetLongLength(0) 为 GetLongLength 的一个示例，它返回 Array 的第一维中的元素个数。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间
Length
GetLength
ICollection Count
Rank


Array ..::.GetLowerBound 方法

Array
.
.
::
.
GetLowerBound 方法
Array 类

获取 Array 中指定维度的下限。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetLowerBound ( _
    dimension As Integer _
) As Integer
public int GetLowerBound(
    int dimension
)
public:
int GetLowerBound(
    int dimension
)
member GetLowerBound :
        dimension:int -> int

参数

dimension
类型： System Int32
Array 的从零开始的维度，其下限需要确定。

返回值

类型： System Int32
Array 中指定维度的下限。
异常 | 条件
IndexOutOfRangeException | dimension 小于零。 - 或 - dimension 等于或大于 Rank。

GetLowerBound(0) 返回 Array 的第一维的索引下限，GetLowerBound(Rank - 1) 返回 Array 的最后一维的下限。

此方法是 O(1) 操作。

下面的代码示例使用 GetLowerBound 和 GetUpperBound 初始化一维数组和多维数组。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates a new one-dimensional Array of type Int32.
        Dim my1DIntArray As Array = Array.CreateInstance(GetType(Int32), 5)

        ' Uses GetLowerBound and GetUpperBound in the for loop.
        Dim i As Integer
        For i = my1DIntArray.GetLowerBound(0) To my1DIntArray.GetUpperBound(0)
            my1DIntArray.SetValue(i + 1, i)
        Next i
        ' Displays the bounds and values of the one-dimensional Array.
        Console.WriteLine("One-dimensional Array:")
        Console.WriteLine("Rank" + ControlChars.Tab + "Lower" _
           + ControlChars.Tab + "Upper")
        Console.WriteLine("{0}" + ControlChars.Tab + "{1}" _
           + ControlChars.Tab + "{2}", 0, my1DIntArray.GetLowerBound(0), _
           my1DIntArray.GetUpperBound(0))
        Console.WriteLine("Values:")
        PrintValues(my1DIntArray)
        Console.WriteLine()

        ' Creates a new three-dimensional Array of type Int32.
        Dim my3DIntArray As Array = _
           Array.CreateInstance(GetType(Int32), 2, 3, 4)

        ' Uses GetLowerBound and GetUpperBound in the for loop.
        Dim j, k As Integer
        For i = my3DIntArray.GetLowerBound(0) _
        To my3DIntArray.GetUpperBound(0)
            For j = my3DIntArray.GetLowerBound(1) _
            To my3DIntArray.GetUpperBound(1)
                For k = my3DIntArray.GetLowerBound(2) _
                To my3DIntArray.GetUpperBound(2)
                    my3DIntArray.SetValue(i * 100 + j * 10 + k, i, j, k)
                Next k
            Next j
        Next i

        ' Displays the bounds and values of the multidimensional Array.
        Console.WriteLine("Multidimensional Array:")
        Console.WriteLine("Rank" + ControlChars.Tab + "Lower" _
           + ControlChars.Tab + "Upper")
        For i = 0 To my3DIntArray.Rank - 1
            Console.WriteLine("{0}" + ControlChars.Tab + "{1}" _
               + ControlChars.Tab + "{2}", i, my3DIntArray.GetLowerBound(i), _
               my3DIntArray.GetUpperBound(i))
        Next i
        Console.WriteLine("Values:")
        PrintValues(my3DIntArray)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength(myArr.Rank - 1)
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' One-dimensional Array:
' Rank    Lower    Upper
' 0    0    4
' Values:
'     1    2    3    4    5
'
' Multidimensional Array:
' Rank    Lower    Upper
' 0    0    1
' 1    0    2
' 2    0    3
' Values:
'     0    1    2    3
'     10    11    12    13
'     20    21    22    23
'     100    101    102    103
'     110    111    112    113
'     120    121    122    123

 using System;
 public class SamplesArray  {

    public static void Main()  {

       // Creates a new one-dimensional Array of type Int32.
       Array my1DIntArray = Array.CreateInstance( typeof(Int32), 5 );

       // Uses GetLowerBound and GetUpperBound in the for loop.
       for ( int i = my1DIntArray.GetLowerBound(0); i <= my1DIntArray.GetUpperBound(0); i++ )
          my1DIntArray.SetValue( i+1, i );

       // Displays the bounds and values of the one-dimensional Array.
       Console.WriteLine( "One-dimensional Array:" );
       Console.WriteLine( "Rank\tLower\tUpper" );
       Console.WriteLine( "{0}\t{1}\t{2}", 0, my1DIntArray.GetLowerBound(0), my1DIntArray.GetUpperBound(0) );
       Console.WriteLine( "Values:" );
       PrintValues( my1DIntArray );
       Console.WriteLine();

       // Creates a new three-dimensional Array of type Int32.
       Array my3DIntArray = Array.CreateInstance( typeof(Int32), 2, 3, 4 );

       // Uses GetLowerBound and GetUpperBound in the for loop.
       for ( int i = my3DIntArray.GetLowerBound(0); i <= my3DIntArray.GetUpperBound(0); i++ )
          for ( int j = my3DIntArray.GetLowerBound(1); j <= my3DIntArray.GetUpperBound(1); j++ )
             for ( int k = my3DIntArray.GetLowerBound(2); k <= my3DIntArray.GetUpperBound(2); k++ )  {
                my3DIntArray.SetValue( (i*100)+(j*10)+k, i, j, k );
             }

       // Displays the bounds and values of the multidimensional Array.
       Console.WriteLine( "Multidimensional Array:" );
       Console.WriteLine( "Rank\tLower\tUpper" );
       for ( int i = 0; i < my3DIntArray.Rank; i++ )
          Console.WriteLine( "{0}\t{1}\t{2}", i, my3DIntArray.GetLowerBound(i), my3DIntArray.GetUpperBound(i) );
       Console.WriteLine( "Values:" );
       PrintValues( my3DIntArray );
    }

    public static void PrintValues( Array myArr )  {
       System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
       int i = 0;
       int cols = myArr.GetLength( myArr.Rank - 1 );
       while ( myEnumerator.MoveNext() )  {
          if ( i < cols )  {
             i++;
          } else  {
             Console.WriteLine();
             i = 1;
          }
          Console.Write( "\t{0}", myEnumerator.Current );
       }
       Console.WriteLine();
    }
 }
 /*
 This code produces the following output.

 One-dimensional Array:
 Rank    Lower    Upper
 0    0    4
 Values:
     1    2    3    4    5

 Multidimensional Array:
 Rank    Lower    Upper
 0    0    1
 1    0    2
 2    0    3
 Values:
     0    1    2    3
     10    11    12    13
     20    21    22    23
     100    101    102    103
     110    111    112    113
     120    121    122    123
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   // Creates a new one-dimensional Array instance of type Int32.
   Array^ my1DIntArray = Array::CreateInstance( Int32::typeid, 5 );

   // Uses GetLowerBound and GetUpperBound in the for loop.
   for ( int i = my1DIntArray->GetLowerBound( 0 ); i <= my1DIntArray->GetUpperBound( 0 ); i++ )
      my1DIntArray->SetValue( i + 1, i );

   // Displays the bounds and values of the one-dimensional Array.
   Console::WriteLine(  "One-dimensional Array:" );
   Console::WriteLine(  "Rank\tLower\tUpper" );
   Console::WriteLine(  "{0}\t{1}\t{2}", nullptr, my1DIntArray->GetLowerBound( 0 ), my1DIntArray->GetUpperBound( 0 ) );
   Console::WriteLine(  "Values:" );
   PrintValues( my1DIntArray );
   Console::WriteLine();

   // Creates a new three-dimensional Array instance of type Int32.
   Array^ my3DIntArray = Array::CreateInstance( Int32::typeid, 2, 3, 4 );

   // Uses GetLowerBound and GetUpperBound in the for loop.
   for ( int i = my3DIntArray->GetLowerBound( 0 ); i <= my3DIntArray->GetUpperBound( 0 ); i++ )
      for ( int j = my3DIntArray->GetLowerBound( 1 ); j <= my3DIntArray->GetUpperBound( 1 ); j++ )
         for ( int k = my3DIntArray->GetLowerBound( 2 ); k <= my3DIntArray->GetUpperBound( 2 ); k++ )
         {
            my3DIntArray->SetValue( (i * 100) + (j * 10) + k, i, j, k );
         }

   // Displays the bounds and values of the multidimensional Array.
   Console::WriteLine(  "Multidimensional Array:" );
   Console::WriteLine(  "Rank\tLower\tUpper" );
   for ( int i = 0; i < my3DIntArray->Rank; i++ )
      Console::WriteLine(  "{0}\t{1}\t{2}", i, my3DIntArray->GetLowerBound( i ), my3DIntArray->GetUpperBound( i ) );
   Console::WriteLine(  "Values:" );
   PrintValues( my3DIntArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

One-dimensional Array:
Rank    Lower   Upper
0       0       4
Values:
        1       2       3       4       5

Multidimensional Array:
Rank    Lower   Upper
0       0       1
1       0       2
2       0       3
Values:
        0       1       2       3
        10      11      12      13
        20      21      22      23
        100     101     102     103
        110     111     112     113
        120     121     122     123
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
GetUpperBound
Rank


Array ..::.GetUpperBound 方法

Array
.
.
::
.
GetUpperBound 方法
Array 类

获取 Array 的指定维度的上限。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetUpperBound ( _
    dimension As Integer _
) As Integer
public int GetUpperBound(
    int dimension
)
public:
int GetUpperBound(
    int dimension
)
member GetUpperBound :
        dimension:int -> int

参数

dimension
类型： System Int32
Array 的从零开始的维度，其上限需要确定。

返回值

类型： System Int32
Array 中的指定维度的上限。
异常 | 条件
IndexOutOfRangeException | dimension 小于零。 - 或 - dimension 等于或大于 Rank。

GetUpperBound(0) 返回 Array 的第一维的索引上限，GetUpperBound(Rank - 1) 返回 Array 的最后一维的上限。

此方法是 O(1) 操作。

下面的代码示例使用 GetLowerBound 和 GetUpperBound 初始化一维数组和多维数组。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates a new one-dimensional Array of type Int32.
        Dim my1DIntArray As Array = Array.CreateInstance(GetType(Int32), 5)

        ' Uses GetLowerBound and GetUpperBound in the for loop.
        Dim i As Integer
        For i = my1DIntArray.GetLowerBound(0) To my1DIntArray.GetUpperBound(0)
            my1DIntArray.SetValue(i + 1, i)
        Next i
        ' Displays the bounds and values of the one-dimensional Array.
        Console.WriteLine("One-dimensional Array:")
        Console.WriteLine("Rank" + ControlChars.Tab + "Lower" _
           + ControlChars.Tab + "Upper")
        Console.WriteLine("{0}" + ControlChars.Tab + "{1}" _
           + ControlChars.Tab + "{2}", 0, my1DIntArray.GetLowerBound(0), _
           my1DIntArray.GetUpperBound(0))
        Console.WriteLine("Values:")
        PrintValues(my1DIntArray)
        Console.WriteLine()

        ' Creates a new three-dimensional Array of type Int32.
        Dim my3DIntArray As Array = _
           Array.CreateInstance(GetType(Int32), 2, 3, 4)

        ' Uses GetLowerBound and GetUpperBound in the for loop.
        Dim j, k As Integer
        For i = my3DIntArray.GetLowerBound(0) _
        To my3DIntArray.GetUpperBound(0)
            For j = my3DIntArray.GetLowerBound(1) _
            To my3DIntArray.GetUpperBound(1)
                For k = my3DIntArray.GetLowerBound(2) _
                To my3DIntArray.GetUpperBound(2)
                    my3DIntArray.SetValue(i * 100 + j * 10 + k, i, j, k)
                Next k
            Next j
        Next i

        ' Displays the bounds and values of the multidimensional Array.
        Console.WriteLine("Multidimensional Array:")
        Console.WriteLine("Rank" + ControlChars.Tab + "Lower" _
           + ControlChars.Tab + "Upper")
        For i = 0 To my3DIntArray.Rank - 1
            Console.WriteLine("{0}" + ControlChars.Tab + "{1}" _
               + ControlChars.Tab + "{2}", i, my3DIntArray.GetLowerBound(i), _
               my3DIntArray.GetUpperBound(i))
        Next i
        Console.WriteLine("Values:")
        PrintValues(my3DIntArray)
    End Sub

    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength(myArr.Rank - 1)
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' One-dimensional Array:
' Rank    Lower    Upper
' 0    0    4
' Values:
'     1    2    3    4    5
'
' Multidimensional Array:
' Rank    Lower    Upper
' 0    0    1
' 1    0    2
' 2    0    3
' Values:
'     0    1    2    3
'     10    11    12    13
'     20    21    22    23
'     100    101    102    103
'     110    111    112    113
'     120    121    122    123

 using System;
 public class SamplesArray  {

    public static void Main()  {

       // Creates a new one-dimensional Array of type Int32.
       Array my1DIntArray = Array.CreateInstance( typeof(Int32), 5 );

       // Uses GetLowerBound and GetUpperBound in the for loop.
       for ( int i = my1DIntArray.GetLowerBound(0); i <= my1DIntArray.GetUpperBound(0); i++ )
          my1DIntArray.SetValue( i+1, i );

       // Displays the bounds and values of the one-dimensional Array.
       Console.WriteLine( "One-dimensional Array:" );
       Console.WriteLine( "Rank\tLower\tUpper" );
       Console.WriteLine( "{0}\t{1}\t{2}", 0, my1DIntArray.GetLowerBound(0), my1DIntArray.GetUpperBound(0) );
       Console.WriteLine( "Values:" );
       PrintValues( my1DIntArray );
       Console.WriteLine();

       // Creates a new three-dimensional Array of type Int32.
       Array my3DIntArray = Array.CreateInstance( typeof(Int32), 2, 3, 4 );

       // Uses GetLowerBound and GetUpperBound in the for loop.
       for ( int i = my3DIntArray.GetLowerBound(0); i <= my3DIntArray.GetUpperBound(0); i++ )
          for ( int j = my3DIntArray.GetLowerBound(1); j <= my3DIntArray.GetUpperBound(1); j++ )
             for ( int k = my3DIntArray.GetLowerBound(2); k <= my3DIntArray.GetUpperBound(2); k++ )  {
                my3DIntArray.SetValue( (i*100)+(j*10)+k, i, j, k );
             }

       // Displays the bounds and values of the multidimensional Array.
       Console.WriteLine( "Multidimensional Array:" );
       Console.WriteLine( "Rank\tLower\tUpper" );
       for ( int i = 0; i < my3DIntArray.Rank; i++ )
          Console.WriteLine( "{0}\t{1}\t{2}", i, my3DIntArray.GetLowerBound(i), my3DIntArray.GetUpperBound(i) );
       Console.WriteLine( "Values:" );
       PrintValues( my3DIntArray );
    }

    public static void PrintValues( Array myArr )  {
       System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
       int i = 0;
       int cols = myArr.GetLength( myArr.Rank - 1 );
       while ( myEnumerator.MoveNext() )  {
          if ( i < cols )  {
             i++;
          } else  {
             Console.WriteLine();
             i = 1;
          }
          Console.Write( "\t{0}", myEnumerator.Current );
       }
       Console.WriteLine();
    }
 }
 /*
 This code produces the following output.

 One-dimensional Array:
 Rank    Lower    Upper
 0    0    4
 Values:
     1    2    3    4    5

 Multidimensional Array:
 Rank    Lower    Upper
 0    0    1
 1    0    2
 2    0    3
 Values:
     0    1    2    3
     10    11    12    13
     20    21    22    23
     100    101    102    103
     110    111    112    113
     120    121    122    123
*/

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   // Creates a new one-dimensional Array instance of type Int32.
   Array^ my1DIntArray = Array::CreateInstance( Int32::typeid, 5 );

   // Uses GetLowerBound and GetUpperBound in the for loop.
   for ( int i = my1DIntArray->GetLowerBound( 0 ); i <= my1DIntArray->GetUpperBound( 0 ); i++ )
      my1DIntArray->SetValue( i + 1, i );

   // Displays the bounds and values of the one-dimensional Array.
   Console::WriteLine(  "One-dimensional Array:" );
   Console::WriteLine(  "Rank\tLower\tUpper" );
   Console::WriteLine(  "{0}\t{1}\t{2}", nullptr, my1DIntArray->GetLowerBound( 0 ), my1DIntArray->GetUpperBound( 0 ) );
   Console::WriteLine(  "Values:" );
   PrintValues( my1DIntArray );
   Console::WriteLine();

   // Creates a new three-dimensional Array instance of type Int32.
   Array^ my3DIntArray = Array::CreateInstance( Int32::typeid, 2, 3, 4 );

   // Uses GetLowerBound and GetUpperBound in the for loop.
   for ( int i = my3DIntArray->GetLowerBound( 0 ); i <= my3DIntArray->GetUpperBound( 0 ); i++ )
      for ( int j = my3DIntArray->GetLowerBound( 1 ); j <= my3DIntArray->GetUpperBound( 1 ); j++ )
         for ( int k = my3DIntArray->GetLowerBound( 2 ); k <= my3DIntArray->GetUpperBound( 2 ); k++ )
         {
            my3DIntArray->SetValue( (i * 100) + (j * 10) + k, i, j, k );
         }

   // Displays the bounds and values of the multidimensional Array.
   Console::WriteLine(  "Multidimensional Array:" );
   Console::WriteLine(  "Rank\tLower\tUpper" );
   for ( int i = 0; i < my3DIntArray->Rank; i++ )
      Console::WriteLine(  "{0}\t{1}\t{2}", i, my3DIntArray->GetLowerBound( i ), my3DIntArray->GetUpperBound( i ) );
   Console::WriteLine(  "Values:" );
   PrintValues( my3DIntArray );
}

void PrintValues( Array^ myArr )
{
   System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
   int i = 0;
   int cols = myArr->GetLength( myArr->Rank - 1 );
   while ( myEnumerator->MoveNext() )
   {
      if ( i < cols )
      {
         i++;
      }
      else
      {
         Console::WriteLine();
         i = 1;
      }

      Console::Write(  "\t{0}", myEnumerator->Current );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

One-dimensional Array:
Rank    Lower   Upper
0       0       4
Values:
        1       2       3       4       5

Multidimensional Array:
Rank    Lower   Upper
0       0       1
1       0       2
2       0       3
Values:
        0       1       2       3
        10      11      12      13
        20      21      22      23
        100     101     102     103
        110     111     112     113
        120     121     122     123
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
GetLowerBound
Rank


Array ..::.GetValue 方法

Array
.
.
::
.
GetValue 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

获取当前 Array 中指定元素的值。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.GetValue 方法 (Int32)

Array
.
.
::
.
GetValue 方法 (Int32)
Array 类

获取一维 Array 中指定位置的值。索引指定为 32 位整数。 获取一维 Array 中指定位置的值。索引指定为 32 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetValue ( _
    index As Integer _
) As Object
public Object GetValue(
    int index
)
public:
Object^ GetValue(
    int index
)
member GetValue :
        index:int -> Object

参数

index
类型： System Int32
一个 32 位整数，它表示要获取的 Array 元素的位置。

返回值

类型： System Object
一维 Array 中指定位置的值。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有一维。
IndexOutOfRangeException | index 超出当前 Array 的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定 index 的值是否超出界限。

此方法是 O(1) 操作。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
GetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
SetValue


Array ..::.GetValue 方法 ( array<Int32 >[]()[])

Array
.
.
::
.
GetValue 方法 (
array<
Int32
>
[]
()
[]
)
Array 类

获取多维 Array 中指定位置的值。索引指定为一个 32 位整数数组。 获取多维 Array 中指定位置的值。索引指定为一个 32 位整数数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetValue ( _
    ParamArray indices As Integer() _
) As Object
public Object GetValue(
    params int[] indices
)
public:
Object^ GetValue(
    ... array<int>^ indices
)
member GetValue :
        indices:int[] -> Object

参数

indices
类型：
array<
System Int32
>
[]
()
[]

32 位整数的一维数组，它表示用于指定要获取的 Array 元素的位置的索引。

返回值

类型： System Object
多维 Array 中指定位置的值。
异常 | 条件
ArgumentNullException | indices 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 当前 Array 中的维数不等于 indices 中的元素数。
IndexOutOfRangeException | indices 中的任何元素都超出当前 Array 的对应维度的有效索引的范围。

indices 中的元素数必须等于 Array 中的维数。indices 数组中的所有元素必须集体指定多维 Array 中所需元素的位置。 indices 中的元素数必须等于 Array 中的维数。indices 数组中的所有元素必须集体指定多维 Array 中所需元素的位置。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

此方法是 O(1) 操作。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
GetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
SetValue


Array ..::.GetValue 方法 (Int64)

Array
.
.
::
.
GetValue 方法 (Int64)
Array 类

获取一维 Array 中指定位置的值。索引指定为 64 位整数。 获取一维 Array 中指定位置的值。索引指定为 64 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function GetValue ( _
    index As Long _
) As Object
[ComVisibleAttribute(false)]
public Object GetValue(
    long index
)
[ComVisibleAttribute(false)]
public:
Object^ GetValue(
    long long index
)
[<ComVisibleAttribute(false)>]
member GetValue :
        index:int64 -> Object

参数

index
类型： System Int64
一个 64 位整数，它表示要获取的 Array 元素的位置。

返回值

类型： System Object
一维 Array 中指定位置的值。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有一维。
ArgumentOutOfRangeException | index 超出当前 Array 的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定 index 的值是否超出界限。

此方法是 O(1) 操作。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
GetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
SetValue


Array ..::.GetValue 方法 ( array<Int64 >[]()[])

Array
.
.
::
.
GetValue 方法 (
array<
Int64
>
[]
()
[]
)
Array 类

获取多维 Array 中指定位置的值。索引指定为一个 64 位整数数组。 获取多维 Array 中指定位置的值。索引指定为一个 64 位整数数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function GetValue ( _
    ParamArray indices As Long() _
) As Object
[ComVisibleAttribute(false)]
public Object GetValue(
    params long[] indices
)
[ComVisibleAttribute(false)]
public:
Object^ GetValue(
    ... array<long long>^ indices
)
[<ComVisibleAttribute(false)>]
member GetValue :
        indices:int64[] -> Object

参数

indices
类型：
array<
System Int64
>
[]
()
[]

64 位整数的一维数组，它表示用于指定要获取的 Array 元素的位置的索引。

返回值

类型： System Object
多维 Array 中指定位置的值。
异常 | 条件
ArgumentNullException | indices 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 当前 Array 中的维数不等于 indices 中的元素数。
ArgumentOutOfRangeException | indices 中的任何元素都超出当前 Array 的对应维度的有效索引的范围。

indices 中的元素数必须等于 Array 中的维数。indices 数组中的所有元素必须集体指定多维 Array 中所需元素的位置。 indices 中的元素数必须等于 Array 中的维数。indices 数组中的所有元素必须集体指定多维 Array 中所需元素的位置。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

此方法是 O(1) 操作。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
GetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
SetValue


Array ..::.GetValue 方法 (Int32, Int32)

Array
.
.
::
.
GetValue 方法 (Int32, Int32)
Array 类

获取二维 Array 中指定位置的值。索引指定为 32 位整数。 获取二维 Array 中指定位置的值。索引指定为 32 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetValue ( _
    index1 As Integer, _
    index2 As Integer _
) As Object
public Object GetValue(
    int index1,
    int index2
)
public:
Object^ GetValue(
    int index1,
    int index2
)
member GetValue :
        index1:int *
        index2:int -> Object

参数

index1
类型： System Int32
一个 32 位整数，它表示要获取的 Array 元素的第一维索引。
index2
类型： System Int32
一个 32 位整数，它表示要获取的 Array 元素的第二维索引。

返回值

类型： System Object
二维 Array 中指定位置的值。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有两维。
IndexOutOfRangeException | index1 或 index2 超出当前 Array 的对应维度的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

此方法是 O(1) 操作。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
GetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
SetValue


Array ..::.GetValue 方法 (Int64, Int64)

Array
.
.
::
.
GetValue 方法 (Int64, Int64)
Array 类

获取二维 Array 中指定位置的值。索引指定为 64 位整数。 获取二维 Array 中指定位置的值。索引指定为 64 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function GetValue ( _
    index1 As Long, _
    index2 As Long _
) As Object
[ComVisibleAttribute(false)]
public Object GetValue(
    long index1,
    long index2
)
[ComVisibleAttribute(false)]
public:
Object^ GetValue(
    long long index1,
    long long index2
)
[<ComVisibleAttribute(false)>]
member GetValue :
        index1:int64 *
        index2:int64 -> Object

参数

index1
类型： System Int64
一个 64 位整数，它表示要获取的 Array 元素的第一维索引。
index2
类型： System Int64
一个 64 位整数，它表示要获取的 Array 元素的第二维索引。

返回值

类型： System Object
二维 Array 中指定位置的值。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有两维。
ArgumentOutOfRangeException | index1 或 index2 超出当前 Array 的对应维度的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

此方法是 O(1) 操作。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
GetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
SetValue


Array ..::.GetValue 方法 (Int32, Int32, Int32)

Array
.
.
::
.
GetValue 方法 (Int32, Int32, Int32)
Array 类

获取三维 Array 中指定位置的值。索引指定为 32 位整数。 获取三维 Array 中指定位置的值。索引指定为 32 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetValue ( _
    index1 As Integer, _
    index2 As Integer, _
    index3 As Integer _
) As Object
public Object GetValue(
    int index1,
    int index2,
    int index3
)
public:
Object^ GetValue(
    int index1,
    int index2,
    int index3
)
member GetValue :
        index1:int *
        index2:int *
        index3:int -> Object

参数

index1
类型： System Int32
一个 32 位整数，它表示要获取的 Array 元素的第一维索引。
index2
类型： System Int32
一个 32 位整数，它表示要获取的 Array 元素的第二维索引。
index3
类型： System Int32
一个 32 位整数，它表示要获取的 Array 元素的第三维索引。

返回值

类型： System Object
三维 Array 中指定位置的值。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有三维。
IndexOutOfRangeException | index1 或 index2 或 index3 超出当前 Array 的对应维度的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

此方法是 O(1) 操作。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
GetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
SetValue


Array ..::.GetValue 方法 (Int64, Int64, Int64)

Array
.
.
::
.
GetValue 方法 (Int64, Int64, Int64)
Array 类

获取三维 Array 中指定位置的值。索引指定为 64 位整数。 获取三维 Array 中指定位置的值。索引指定为 64 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function GetValue ( _
    index1 As Long, _
    index2 As Long, _
    index3 As Long _
) As Object
[ComVisibleAttribute(false)]
public Object GetValue(
    long index1,
    long index2,
    long index3
)
[ComVisibleAttribute(false)]
public:
Object^ GetValue(
    long long index1,
    long long index2,
    long long index3
)
[<ComVisibleAttribute(false)>]
member GetValue :
        index1:int64 *
        index2:int64 *
        index3:int64 -> Object

参数

index1
类型： System Int64
一个 64 位整数，它表示要获取的 Array 元素的第一维索引。
index2
类型： System Int64
一个 64 位整数，它表示要获取的 Array 元素的第二维索引。
index3
类型： System Int64
一个 64 位整数，它表示要获取的 Array 元素的第三维索引。

返回值

类型： System Object
三维 Array 中指定位置的值。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有三维。
ArgumentOutOfRangeException | index1 或 index2 或 index3 超出当前 Array 的对应维度的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

此方法是 O(1) 操作。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
GetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
SetValue


Array ..::.IList ..::.Add 方法

Array
.
.
::
.
IList
.
.
::
.
Add 方法
Array 类

向 T:System.Collections.IList 中添加项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Add ( _
    value As Object _
) As Integer Implements IList.Add
int IList.Add(
    Object value
)
private:
virtual int Add(
    Object^ value
) sealed = IList::Add
private abstract Add :
        value:Object -> int
private override Add :
        value:Object -> int

参数

value
类型： System Object
要添加到 T:System.Collections.IList 的对象。

返回值

类型： System Int32
新元素所插入到的位置，或为 -1 以指示未将该项插入到集合中。

实现

异常 | 条件
NotSupportedException | T:System.Collections.IList 是只读的。 - 或 - T:System.Collections.IList 具有固定大小。

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IList ..::.Clear 方法

Array
.
.
::
.
IList
.
.
::
.
Clear 方法
Array 类

从 IList 中移除所有项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Clear Implements IList.Clear
void IList.Clear()
private:
virtual void Clear() sealed = IList::Clear
private abstract Clear : unit -> unit
private override Clear : unit -> unit

实现

异常 | 条件
NotSupportedException | T:System.Collections.IList 为只读。

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IList ..::.Contains 方法

Array
.
.
::
.
IList
.
.
::
.
Contains 方法
Array 类

确定某元素是否在 T:System.Collections.IList 中。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Contains ( _
    value As Object _
) As Boolean Implements IList.Contains
bool IList.Contains(
    Object value
)
private:
virtual bool Contains(
    Object^ value
) sealed = IList::Contains
private abstract Contains :
        value:Object -> bool
private override Contains :
        value:Object -> bool

参数

value
类型： System Object

返回值

类型： System Boolean
如果在 T:System.Collections.IList 中找到 value，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IList ..::.IndexOf 方法

Array
.
.
::
.
IList
.
.
::
.
IndexOf 方法
Array 类

确定 T:System.Collections.IList 中特定项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function IndexOf ( _
    value As Object _
) As Integer Implements IList.IndexOf
int IList.IndexOf(
    Object value
)
private:
virtual int IndexOf(
    Object^ value
) sealed = IList::IndexOf
private abstract IndexOf :
        value:Object -> int
private override IndexOf :
        value:Object -> int

参数

value
类型： System Object

返回值

类型： System Int32
如果在列表中找到，则为值的索引；否则为 -1。

实现

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IList ..::.Insert 方法

Array
.
.
::
.
IList
.
.
::
.
Insert 方法
Array 类

在 T:System.Collections.IList 中的指定索引处插入项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Insert ( _
    index As Integer, _
    value As Object _
) Implements IList.Insert
void IList.Insert(
    int index,
    Object value
)
private:
virtual void Insert(
    int index,
    Object^ value
) sealed = IList::Insert
private abstract Insert :
        index:int *
        value:Object -> unit
private override Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
value 将插入到的索引。
value
类型： System Object
要插入的对象。

实现

异常 | 条件
ArgumentOutOfRangeException | index 不是 T:System.Collections.IList 中的有效索引。
NotSupportedException | T:System.Collections.IList 是只读的。 - 或 - T:System.Collections.IList 具有固定大小。
NullReferenceException | value 在 T:System.Collections.IList 中是 null 引用。

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IList ..::.Remove 方法

Array
.
.
::
.
IList
.
.
::
.
Remove 方法
Array 类

从 T:System.Collections.IList 中移除特定对象的第一个匹配项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Remove ( _
    value As Object _
) Implements IList.Remove
void IList.Remove(
    Object value
)
private:
virtual void Remove(
    Object^ value
) sealed = IList::Remove
private abstract Remove :
        value:Object -> unit
private override Remove :
        value:Object -> unit

参数

value
类型： System Object
要从 T:System.Collections.IList 中移除的对象。

实现

异常 | 条件
NotSupportedException | T:System.Collections.IList 是只读的。 - 或 - T:System.Collections.IList 具有固定大小。

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。

在数组中执行不区分区域性的字符串操作

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IList ..::.RemoveAt 方法

Array
.
.
::
.
IList
.
.
::
.
RemoveAt 方法
Array 类

移除指定索引处的 T:System.Collections.IList 项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub RemoveAt ( _
    index As Integer _
) Implements IList.RemoveAt
void IList.RemoveAt(
    int index
)
private:
virtual void RemoveAt(
    int index
) sealed = IList::RemoveAt
private abstract RemoveAt :
        index:int -> unit
private override RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的元素的索引。

实现

异常 | 条件
ArgumentOutOfRangeException | 索引不是 T:System.Collections.IList 中的有效索引。
NotSupportedException | T:System.Collections.IList 是只读的。 - 或 - T:System.Collections.IList 具有固定大小。

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IndexOf 方法

Array
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

返回一维 Array 或部分 Array 中某个值第一个匹配项的索引。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.IndexOf <(Of <(T >)>) 方法 ( array<T >[]()[], T)

Array
.
.
::
.
IndexOf
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, T)
Array 类

搜索指定的对象，并返回整个 Array 中第一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IndexOf(Of T) ( _
    array As T(), _
    value As T _
) As Integer
public static int IndexOf<T>(
    T[] array,
    T value
)

public:
generic<typename T>
static int IndexOf(
    array<T>^ array,
    T value
)
static member IndexOf :
        array:'T[] *
        value:'T -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
value
类型：T
要在 array 中查找的对象。

返回值

类型： System Int32
如果在整个 array 中找到 value 的匹配项，则为第一个匹配项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

从 Array 的第一个元素开始向前搜索，到最后一个元素停止搜索。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Tyrannosaurus", _
            "Amargasaurus", _
            "Mamenchisaurus", _
            "Brachiosaurus", _
            "Deinonychus", _
            "Tyrannosaurus", _
            "Compsognathus" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.IndexOf(dinosaurs, ""Tyrannosaurus""): {0}", _
            Array.IndexOf(dinosaurs, "Tyrannosaurus"))

        Console.WriteLine(vbLf & _
            "Array.IndexOf(dinosaurs, ""Tyrannosaurus"", 3): {0}", _
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 3))

        Console.WriteLine(vbLf & _
            "Array.IndexOf(dinosaurs, ""Tyrannosaurus"", 2, 2): {0}", _
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2))

    End Sub
End Class

' This code example produces the following output:
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Brachiosaurus
'Deinonychus
'Tyrannosaurus
'Compsognathus
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Tyrannosaurus",
            "Amargasaurus",
            "Mamenchisaurus",
            "Brachiosaurus",
            "Deinonychus",
            "Tyrannosaurus",
            "Compsognathus" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
            Array.IndexOf(dinosaurs, "Tyrannosaurus"));

        Console.WriteLine(
            "\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 3));

        Console.WriteLine(
            "\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 2, 2): {0}",
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2));
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0

Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5

Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1
 */

using namespace System;

void main()
{
    array<String^>^ dinosaurs = { "Tyrannosaurus",
        "Amargasaurus",
        "Mamenchisaurus",
        "Brachiosaurus",
        "Deinonychus",
        "Tyrannosaurus",
        "Compsognathus" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
        Array::IndexOf(dinosaurs, "Tyrannosaurus"));

    Console::WriteLine("\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
        Array::IndexOf(dinosaurs, "Tyrannosaurus", 3));

    Console::WriteLine("\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 2, 2): {0}",
        Array::IndexOf(dinosaurs, "Tyrannosaurus", 2, 2));
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0

Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5

Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
IndexOf 重载
System 命名空间
LastIndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.IndexOf 方法 (Array, Object)

Array
.
.
::
.
IndexOf 方法 (Array, Object)
Array 类

搜索指定的对象，并返回整个一维 Array 中第一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IndexOf ( _
    array As Array, _
    value As Object _
) As Integer
public static int IndexOf(
    Array array,
    Object value
)
public:
static int IndexOf(
    Array^ array,
    Object^ value
)
static member IndexOf :
        array:Array *
        value:Object -> int

参数

array
类型： System Array
要搜索的一维 Array。
value
类型： System Object
要在 array 中查找的对象。

返回值

类型： System Int32
如果在整个 array 中找到 value 的匹配项，则为第一个匹配项的索引；否则为该数组的下限减 1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。

向前搜索一维 Array，从第一个元素开始，到最后一个元素结束。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。 由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。 在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。

下面的代码示例显示如何确定指定元素的第一个匹配项的索引。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array with three elements of
        ' the same value.
        Dim myArray As Array = Array.CreateInstance(GetType(String), 12)
        myArray.SetValue("the", 0)
        myArray.SetValue("quick", 1)
        myArray.SetValue("brown", 2)
        myArray.SetValue("fox", 3)
        myArray.SetValue("jumps", 4)
        myArray.SetValue("over", 5)
        myArray.SetValue("the", 6)
        myArray.SetValue("lazy", 7)
        myArray.SetValue("dog", 8)
        myArray.SetValue("in", 9)
        myArray.SetValue("the", 10)
        myArray.SetValue("barn", 11)

        ' Displays the values of the Array.
        Console.WriteLine("The Array contains the following values:")
        PrintIndexAndValues(myArray)

        ' Searches for the first occurrence of the duplicated value.
        Dim myString As String = "the"
        Dim myIndex As Integer = Array.IndexOf(myArray, myString)
        Console.WriteLine("The first occurrence of ""{0}"" is at index {1}.", _
           myString, myIndex)

        ' Searches for the first occurrence of the duplicated value in the last
        ' section of the Array.
        myIndex = Array.IndexOf(myArray, myString, 4)
        Console.WriteLine("The first occurrence of ""{0}"" between index 4 " _
           + "and the end is at index {1}.", myString, myIndex)

        ' Searches for the first occurrence of the duplicated value in a section
        ' of the Array.
        myIndex = Array.IndexOf(myArray, myString, 6, 5)
        Console.WriteLine("The first occurrence of ""{0}"" between index 6 " _
           + "and index 10 is at index {1}.", myString, myIndex)
    End Sub

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The Array contains the following values:
'     [0]:    the
'     [1]:    quick
'     [2]:    brown
'     [3]:    fox
'     [4]:    jumps
'     [5]:    over
'     [6]:    the
'     [7]:    lazy
'     [8]:    dog
'     [9]:    in
'     [10]:    the
'     [11]:    barn
' The first occurrence of "the" is at index 0.
' The first occurrence of "the" between index 4 and the end is at index 6.
' The first occurrence of "the" between index 6 and index 10 is at index 6.

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array with three elements of the same value.
      Array myArray=Array.CreateInstance( typeof(String), 12 );
      myArray.SetValue( "the", 0 );
      myArray.SetValue( "quick", 1 );
      myArray.SetValue( "brown", 2 );
      myArray.SetValue( "fox", 3 );
      myArray.SetValue( "jumps", 4 );
      myArray.SetValue( "over", 5 );
      myArray.SetValue( "the", 6 );
      myArray.SetValue( "lazy", 7 );
      myArray.SetValue( "dog", 8 );
      myArray.SetValue( "in", 9 );
      myArray.SetValue( "the", 10 );
      myArray.SetValue( "barn", 11 );

      // Displays the values of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintIndexAndValues( myArray );

      // Searches for the first occurrence of the duplicated value.
      String myString = "the";
      int myIndex = Array.IndexOf( myArray, myString );
      Console.WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the first occurrence of the duplicated value in the last section of the Array.
      myIndex = Array.IndexOf( myArray, myString, 4 );
      Console.WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

      // Searches for the first occurrence of the duplicated value in a section of the Array.
      myIndex = Array.IndexOf( myArray, myString, 6, 5 );
      Console.WriteLine( "The first occurrence of \"{0}\" between index 6 and index 10 is at index {1}.", myString, myIndex );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The Array contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn
The first occurrence of "the" is at index 0.
The first occurrence of "the" between index 4 and the end is at index 6.
The first occurrence of "the" between index 6 and index 10 is at index 6.
*/

using namespace System;
void PrintIndexAndValues( Array^ myArray );
void main()
{
   // Creates and initializes a new Array instance with three elements of the same value.
   Array^ myArray = Array::CreateInstance( String::typeid, 12 );
   myArray->SetValue( "the", 0 );
   myArray->SetValue( "quick", 1 );
   myArray->SetValue( "brown", 2 );
   myArray->SetValue( "fox", 3 );
   myArray->SetValue( "jumped", 4 );
   myArray->SetValue( "over", 5 );
   myArray->SetValue( "the", 6 );
   myArray->SetValue( "lazy", 7 );
   myArray->SetValue( "dog", 8 );
   myArray->SetValue( "in", 9 );
   myArray->SetValue( "the", 10 );
   myArray->SetValue( "barn", 11 );

   // Displays the values of the Array.
   Console::WriteLine(  "The Array instance contains the following values:" );
   PrintIndexAndValues( myArray );

   // Searches for the first occurrence of the duplicated value.
   String^ myString =  "the";
   int myIndex = Array::IndexOf( myArray, myString );
   Console::WriteLine(  "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Searches for the first occurrence of the duplicated value in the last section of the Array.
   myIndex = Array::IndexOf( myArray, myString, 4 );
   Console::WriteLine(  "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

   // Searches for the first occurrence of the duplicated value in a section of the Array.
   myIndex = Array::IndexOf( myArray, myString, 6, 5 );
   Console::WriteLine(  "The first occurrence of \"{0}\" between index 6 and index 10 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The Array instance contains the following values:
     [0]:    the
     [1]:    quick
     [2]:    brown
     [3]:    fox
     [4]:    jumped
     [5]:    over
     [6]:    the
     [7]:    lazy
     [8]:    dog
     [9]:    in
     [10]:    the
     [11]:    barn
 The first occurrence of "the" is at index 0.
 The first occurrence of "the" between index 4 and the end is at index 6.
 The first occurrence of "the" between index 6 and index 10 is at index 6.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
IndexOf 重载
System 命名空间
LastIndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.IndexOf <(Of <(T >)>) 方法 ( array<T >[]()[], T, Int32)

Array
.
.
::
.
IndexOf
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, T, Int32)
Array 类

搜索指定的对象，并返回 Array 中从指定索引到最后一个元素这部分元素中第一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IndexOf(Of T) ( _
    array As T(), _
    value As T, _
    startIndex As Integer _
) As Integer
public static int IndexOf<T>(
    T[] array,
    T value,
    int startIndex
)

public:
generic<typename T>
static int IndexOf(
    array<T>^ array,
    T value,
    int startIndex
)
static member IndexOf :
        array:'T[] *
        value:'T *
        startIndex:int -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
value
类型：T
要在 array 中查找的对象。
startIndex
类型： System Int32
从零开始的搜索的起始索引。空数组中 0（零）为有效值。 从零开始的搜索的起始索引。空数组中 0（零）为有效值。

返回值

类型： System Int32
如果在 array 中从 startIndex 到最后一个元素这部分元素中找到 value 的匹配项，则为第一个匹配项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。

在 Array 中从 startIndex 开始向前搜索，到最后一个元素停止搜索。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

将数组的 Length 作为 startindex 传递会产生返回值 -1；传递大于 Length 的值会引发 ArgumentOutOfRangeException。

此方法的运算复杂度为 O(n)，其中 n 是从 startIndex 到 array 末尾这一范围所包含的元素数目。

下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Tyrannosaurus", _
            "Amargasaurus", _
            "Mamenchisaurus", _
            "Brachiosaurus", _
            "Deinonychus", _
            "Tyrannosaurus", _
            "Compsognathus" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.IndexOf(dinosaurs, ""Tyrannosaurus""): {0}", _
            Array.IndexOf(dinosaurs, "Tyrannosaurus"))

        Console.WriteLine(vbLf & _
            "Array.IndexOf(dinosaurs, ""Tyrannosaurus"", 3): {0}", _
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 3))

        Console.WriteLine(vbLf & _
            "Array.IndexOf(dinosaurs, ""Tyrannosaurus"", 2, 2): {0}", _
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2))

    End Sub
End Class

' This code example produces the following output:
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Brachiosaurus
'Deinonychus
'Tyrannosaurus
'Compsognathus
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Tyrannosaurus",
            "Amargasaurus",
            "Mamenchisaurus",
            "Brachiosaurus",
            "Deinonychus",
            "Tyrannosaurus",
            "Compsognathus" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
            Array.IndexOf(dinosaurs, "Tyrannosaurus"));

        Console.WriteLine(
            "\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 3));

        Console.WriteLine(
            "\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 2, 2): {0}",
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2));
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0

Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5

Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1
 */

using namespace System;

void main()
{
    array<String^>^ dinosaurs = { "Tyrannosaurus",
        "Amargasaurus",
        "Mamenchisaurus",
        "Brachiosaurus",
        "Deinonychus",
        "Tyrannosaurus",
        "Compsognathus" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
        Array::IndexOf(dinosaurs, "Tyrannosaurus"));

    Console::WriteLine("\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
        Array::IndexOf(dinosaurs, "Tyrannosaurus", 3));

    Console::WriteLine("\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 2, 2): {0}",
        Array::IndexOf(dinosaurs, "Tyrannosaurus", 2, 2));
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0

Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5

Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
IndexOf 重载
System 命名空间
LastIndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.IndexOf 方法 (Array, Object, Int32)

Array
.
.
::
.
IndexOf 方法 (Array, Object, Int32)
Array 类

搜索指定的对象，并返回一维 Array 中从指定索引到最后一个元素这部分元素中第一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IndexOf ( _
    array As Array, _
    value As Object, _
    startIndex As Integer _
) As Integer
public static int IndexOf(
    Array array,
    Object value,
    int startIndex
)
public:
static int IndexOf(
    Array^ array,
    Object^ value,
    int startIndex
)
static member IndexOf :
        array:Array *
        value:Object *
        startIndex:int -> int

参数

array
类型： System Array
要搜索的一维 Array。
value
类型： System Object
要在 array 中查找的对象。
startIndex
类型： System Int32
搜索的起始索引。空数组中 0（零）为有效值。 搜索的起始索引。空数组中 0（零）为有效值。

返回值

类型： System Int32
如果在 array 中从 startIndex 到最后一个元素这部分元素中第一个与 value 匹配的项的索引；否则为该数组的下限减 1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。
RankException | array 是多维数组。

向前搜索一维 Array，从 startIndex 开始，到最后一个元素结束。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。 由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。

将数组的 Length 作为 startindex 传递会产生返回值 -1；传递大于 Length 的值会引发 ArgumentOutOfRangeException。

此方法的运算复杂度为 O(n)，其中 n 是从 startIndex 到 array 末尾这一范围所包含的元素数目。

在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。 在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。

下面的代码示例显示如何确定指定元素的第一个匹配项的索引。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array with three elements of
        ' the same value.
        Dim myArray As Array = Array.CreateInstance(GetType(String), 12)
        myArray.SetValue("the", 0)
        myArray.SetValue("quick", 1)
        myArray.SetValue("brown", 2)
        myArray.SetValue("fox", 3)
        myArray.SetValue("jumps", 4)
        myArray.SetValue("over", 5)
        myArray.SetValue("the", 6)
        myArray.SetValue("lazy", 7)
        myArray.SetValue("dog", 8)
        myArray.SetValue("in", 9)
        myArray.SetValue("the", 10)
        myArray.SetValue("barn", 11)

        ' Displays the values of the Array.
        Console.WriteLine("The Array contains the following values:")
        PrintIndexAndValues(myArray)

        ' Searches for the first occurrence of the duplicated value.
        Dim myString As String = "the"
        Dim myIndex As Integer = Array.IndexOf(myArray, myString)
        Console.WriteLine("The first occurrence of ""{0}"" is at index {1}.", _
           myString, myIndex)

        ' Searches for the first occurrence of the duplicated value in the last
        ' section of the Array.
        myIndex = Array.IndexOf(myArray, myString, 4)
        Console.WriteLine("The first occurrence of ""{0}"" between index 4 " _
           + "and the end is at index {1}.", myString, myIndex)

        ' Searches for the first occurrence of the duplicated value in a section
        ' of the Array.
        myIndex = Array.IndexOf(myArray, myString, 6, 5)
        Console.WriteLine("The first occurrence of ""{0}"" between index 6 " _
           + "and index 10 is at index {1}.", myString, myIndex)
    End Sub

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The Array contains the following values:
'     [0]:    the
'     [1]:    quick
'     [2]:    brown
'     [3]:    fox
'     [4]:    jumps
'     [5]:    over
'     [6]:    the
'     [7]:    lazy
'     [8]:    dog
'     [9]:    in
'     [10]:    the
'     [11]:    barn
' The first occurrence of "the" is at index 0.
' The first occurrence of "the" between index 4 and the end is at index 6.
' The first occurrence of "the" between index 6 and index 10 is at index 6.

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array with three elements of the same value.
      Array myArray=Array.CreateInstance( typeof(String), 12 );
      myArray.SetValue( "the", 0 );
      myArray.SetValue( "quick", 1 );
      myArray.SetValue( "brown", 2 );
      myArray.SetValue( "fox", 3 );
      myArray.SetValue( "jumps", 4 );
      myArray.SetValue( "over", 5 );
      myArray.SetValue( "the", 6 );
      myArray.SetValue( "lazy", 7 );
      myArray.SetValue( "dog", 8 );
      myArray.SetValue( "in", 9 );
      myArray.SetValue( "the", 10 );
      myArray.SetValue( "barn", 11 );

      // Displays the values of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintIndexAndValues( myArray );

      // Searches for the first occurrence of the duplicated value.
      String myString = "the";
      int myIndex = Array.IndexOf( myArray, myString );
      Console.WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the first occurrence of the duplicated value in the last section of the Array.
      myIndex = Array.IndexOf( myArray, myString, 4 );
      Console.WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

      // Searches for the first occurrence of the duplicated value in a section of the Array.
      myIndex = Array.IndexOf( myArray, myString, 6, 5 );
      Console.WriteLine( "The first occurrence of \"{0}\" between index 6 and index 10 is at index {1}.", myString, myIndex );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The Array contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn
The first occurrence of "the" is at index 0.
The first occurrence of "the" between index 4 and the end is at index 6.
The first occurrence of "the" between index 6 and index 10 is at index 6.
*/

using namespace System;
void PrintIndexAndValues( Array^ myArray );
void main()
{
   // Creates and initializes a new Array instance with three elements of the same value.
   Array^ myArray = Array::CreateInstance( String::typeid, 12 );
   myArray->SetValue( "the", 0 );
   myArray->SetValue( "quick", 1 );
   myArray->SetValue( "brown", 2 );
   myArray->SetValue( "fox", 3 );
   myArray->SetValue( "jumped", 4 );
   myArray->SetValue( "over", 5 );
   myArray->SetValue( "the", 6 );
   myArray->SetValue( "lazy", 7 );
   myArray->SetValue( "dog", 8 );
   myArray->SetValue( "in", 9 );
   myArray->SetValue( "the", 10 );
   myArray->SetValue( "barn", 11 );

   // Displays the values of the Array.
   Console::WriteLine(  "The Array instance contains the following values:" );
   PrintIndexAndValues( myArray );

   // Searches for the first occurrence of the duplicated value.
   String^ myString =  "the";
   int myIndex = Array::IndexOf( myArray, myString );
   Console::WriteLine(  "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Searches for the first occurrence of the duplicated value in the last section of the Array.
   myIndex = Array::IndexOf( myArray, myString, 4 );
   Console::WriteLine(  "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

   // Searches for the first occurrence of the duplicated value in a section of the Array.
   myIndex = Array::IndexOf( myArray, myString, 6, 5 );
   Console::WriteLine(  "The first occurrence of \"{0}\" between index 6 and index 10 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The Array instance contains the following values:
     [0]:    the
     [1]:    quick
     [2]:    brown
     [3]:    fox
     [4]:    jumped
     [5]:    over
     [6]:    the
     [7]:    lazy
     [8]:    dog
     [9]:    in
     [10]:    the
     [11]:    barn
 The first occurrence of "the" is at index 0.
 The first occurrence of "the" between index 4 and the end is at index 6.
 The first occurrence of "the" between index 6 and index 10 is at index 6.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
IndexOf 重载
System 命名空间
LastIndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.IndexOf <(Of <(T >)>) 方法 ( array<T >[]()[], T, Int32, Int32)

Array
.
.
::
.
IndexOf
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, T, Int32, Int32)
Array 类

搜索指定的对象，并返回 Array 中从指定索引开始包含指定个元素的这部分元素中第一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IndexOf(Of T) ( _
    array As T(), _
    value As T, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public static int IndexOf<T>(
    T[] array,
    T value,
    int startIndex,
    int count
)

public:
generic<typename T>
static int IndexOf(
    array<T>^ array,
    T value,
    int startIndex,
    int count
)
static member IndexOf :
        array:'T[] *
        value:'T *
        startIndex:int *
        count:int -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
value
类型：T
要在 array 中查找的对象。
startIndex
类型： System Int32
从零开始的搜索的起始索引。空数组中 0（零）为有效值。 从零开始的搜索的起始索引。空数组中 0（零）为有效值。
count
类型： System Int32
要搜索的部分中的元素数。

返回值

类型： System Int32
如果在 array 中从 startIndex 开始、包含 count 所指定的元素个数的这部分元素中，找到 value 的匹配项，则为第一个匹配项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。 - 或 - count 小于零。 - 或 - startIndex 和 count 指定的不是 array 中的有效部分。

如果 count 大于 0，则在 Array 中向前搜索，从 startIndex 处开始，到 startIndex + count - 1 处结束。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

将数组的 Length 属性作为 startindex 参数传递会产生返回值 -1；传递大于 Length 的值会引发 ArgumentOutOfRangeException。

此方法的运算复杂度为 O(n)，其中 n 是 count。

下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 IndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。IndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从头搜索数组，并查找字符串的第一个匹配项。使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始搜索数组，直至数组的结尾处，找到第二次出现的字符串。最后，使用 IndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 2 开始在两个项的范围内进行搜索；它返回 –1，因为该范围内没有搜索字符串的实例。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Tyrannosaurus", _
            "Amargasaurus", _
            "Mamenchisaurus", _
            "Brachiosaurus", _
            "Deinonychus", _
            "Tyrannosaurus", _
            "Compsognathus" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.IndexOf(dinosaurs, ""Tyrannosaurus""): {0}", _
            Array.IndexOf(dinosaurs, "Tyrannosaurus"))

        Console.WriteLine(vbLf & _
            "Array.IndexOf(dinosaurs, ""Tyrannosaurus"", 3): {0}", _
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 3))

        Console.WriteLine(vbLf & _
            "Array.IndexOf(dinosaurs, ""Tyrannosaurus"", 2, 2): {0}", _
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2))

    End Sub
End Class

' This code example produces the following output:
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Brachiosaurus
'Deinonychus
'Tyrannosaurus
'Compsognathus
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Tyrannosaurus",
            "Amargasaurus",
            "Mamenchisaurus",
            "Brachiosaurus",
            "Deinonychus",
            "Tyrannosaurus",
            "Compsognathus" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
            Array.IndexOf(dinosaurs, "Tyrannosaurus"));

        Console.WriteLine(
            "\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 3));

        Console.WriteLine(
            "\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 2, 2): {0}",
            Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2));
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0

Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5

Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1
 */

using namespace System;

void main()
{
    array<String^>^ dinosaurs = { "Tyrannosaurus",
        "Amargasaurus",
        "Mamenchisaurus",
        "Brachiosaurus",
        "Deinonychus",
        "Tyrannosaurus",
        "Compsognathus" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
        Array::IndexOf(dinosaurs, "Tyrannosaurus"));

    Console::WriteLine("\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
        Array::IndexOf(dinosaurs, "Tyrannosaurus", 3));

    Console::WriteLine("\nArray.IndexOf(dinosaurs, \"Tyrannosaurus\", 2, 2): {0}",
        Array::IndexOf(dinosaurs, "Tyrannosaurus", 2, 2));
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0

Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5

Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
IndexOf 重载
System 命名空间
LastIndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.IndexOf 方法 (Array, Object, Int32, Int32)

Array
.
.
::
.
IndexOf 方法 (Array, Object, Int32, Int32)
Array 类

搜索指定的对象，并返回一维 Array 中从指定索引开始包含指定个元素的这部分元素中第一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IndexOf ( _
    array As Array, _
    value As Object, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public static int IndexOf(
    Array array,
    Object value,
    int startIndex,
    int count
)
public:
static int IndexOf(
    Array^ array,
    Object^ value,
    int startIndex,
    int count
)
static member IndexOf :
        array:Array *
        value:Object *
        startIndex:int *
        count:int -> int

参数

array
类型： System Array
要搜索的一维 Array。
value
类型： System Object
要在 array 中查找的对象。
startIndex
类型： System Int32
搜索的起始索引。空数组中 0（零）为有效值。 搜索的起始索引。空数组中 0（零）为有效值。
count
类型： System Int32
要搜索的部分中的元素数。

返回值

类型： System Int32
如果在 array 中从 startIndex 开始并且包含的元素个数为在 count 中指定的个数的这部分元素中找到 value 的匹配项，则为第一个匹配项的索引；否则为该数组的下限减 1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。 - 或 - count 小于零。 - 或 - startIndex 和 count 指定的不是 array 中的有效部分。
RankException | array 是多维数组。

如果 count 大于 0，则向前搜索 Array，从 startIndex 开始，到 startIndex + count - 1 结束。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。 由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。

将数组的 Length 作为 startindex 传递会产生返回值 -1；传递大于 Length 的值会引发 ArgumentOutOfRangeException。

此方法的运算复杂度为 O(n)，其中 n 是 count。

在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。 在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。

下面的代码示例显示如何确定指定元素的第一个匹配项的索引。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array with three elements of
        ' the same value.
        Dim myArray As Array = Array.CreateInstance(GetType(String), 12)
        myArray.SetValue("the", 0)
        myArray.SetValue("quick", 1)
        myArray.SetValue("brown", 2)
        myArray.SetValue("fox", 3)
        myArray.SetValue("jumps", 4)
        myArray.SetValue("over", 5)
        myArray.SetValue("the", 6)
        myArray.SetValue("lazy", 7)
        myArray.SetValue("dog", 8)
        myArray.SetValue("in", 9)
        myArray.SetValue("the", 10)
        myArray.SetValue("barn", 11)

        ' Displays the values of the Array.
        Console.WriteLine("The Array contains the following values:")
        PrintIndexAndValues(myArray)

        ' Searches for the first occurrence of the duplicated value.
        Dim myString As String = "the"
        Dim myIndex As Integer = Array.IndexOf(myArray, myString)
        Console.WriteLine("The first occurrence of ""{0}"" is at index {1}.", _
           myString, myIndex)

        ' Searches for the first occurrence of the duplicated value in the last
        ' section of the Array.
        myIndex = Array.IndexOf(myArray, myString, 4)
        Console.WriteLine("The first occurrence of ""{0}"" between index 4 " _
           + "and the end is at index {1}.", myString, myIndex)

        ' Searches for the first occurrence of the duplicated value in a section
        ' of the Array.
        myIndex = Array.IndexOf(myArray, myString, 6, 5)
        Console.WriteLine("The first occurrence of ""{0}"" between index 6 " _
           + "and index 10 is at index {1}.", myString, myIndex)
    End Sub

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The Array contains the following values:
'     [0]:    the
'     [1]:    quick
'     [2]:    brown
'     [3]:    fox
'     [4]:    jumps
'     [5]:    over
'     [6]:    the
'     [7]:    lazy
'     [8]:    dog
'     [9]:    in
'     [10]:    the
'     [11]:    barn
' The first occurrence of "the" is at index 0.
' The first occurrence of "the" between index 4 and the end is at index 6.
' The first occurrence of "the" between index 6 and index 10 is at index 6.

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array with three elements of the same value.
      Array myArray=Array.CreateInstance( typeof(String), 12 );
      myArray.SetValue( "the", 0 );
      myArray.SetValue( "quick", 1 );
      myArray.SetValue( "brown", 2 );
      myArray.SetValue( "fox", 3 );
      myArray.SetValue( "jumps", 4 );
      myArray.SetValue( "over", 5 );
      myArray.SetValue( "the", 6 );
      myArray.SetValue( "lazy", 7 );
      myArray.SetValue( "dog", 8 );
      myArray.SetValue( "in", 9 );
      myArray.SetValue( "the", 10 );
      myArray.SetValue( "barn", 11 );

      // Displays the values of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintIndexAndValues( myArray );

      // Searches for the first occurrence of the duplicated value.
      String myString = "the";
      int myIndex = Array.IndexOf( myArray, myString );
      Console.WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the first occurrence of the duplicated value in the last section of the Array.
      myIndex = Array.IndexOf( myArray, myString, 4 );
      Console.WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

      // Searches for the first occurrence of the duplicated value in a section of the Array.
      myIndex = Array.IndexOf( myArray, myString, 6, 5 );
      Console.WriteLine( "The first occurrence of \"{0}\" between index 6 and index 10 is at index {1}.", myString, myIndex );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The Array contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn
The first occurrence of "the" is at index 0.
The first occurrence of "the" between index 4 and the end is at index 6.
The first occurrence of "the" between index 6 and index 10 is at index 6.
*/

using namespace System;
void PrintIndexAndValues( Array^ myArray );
void main()
{
   // Creates and initializes a new Array instance with three elements of the same value.
   Array^ myArray = Array::CreateInstance( String::typeid, 12 );
   myArray->SetValue( "the", 0 );
   myArray->SetValue( "quick", 1 );
   myArray->SetValue( "brown", 2 );
   myArray->SetValue( "fox", 3 );
   myArray->SetValue( "jumped", 4 );
   myArray->SetValue( "over", 5 );
   myArray->SetValue( "the", 6 );
   myArray->SetValue( "lazy", 7 );
   myArray->SetValue( "dog", 8 );
   myArray->SetValue( "in", 9 );
   myArray->SetValue( "the", 10 );
   myArray->SetValue( "barn", 11 );

   // Displays the values of the Array.
   Console::WriteLine(  "The Array instance contains the following values:" );
   PrintIndexAndValues( myArray );

   // Searches for the first occurrence of the duplicated value.
   String^ myString =  "the";
   int myIndex = Array::IndexOf( myArray, myString );
   Console::WriteLine(  "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Searches for the first occurrence of the duplicated value in the last section of the Array.
   myIndex = Array::IndexOf( myArray, myString, 4 );
   Console::WriteLine(  "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

   // Searches for the first occurrence of the duplicated value in a section of the Array.
   myIndex = Array::IndexOf( myArray, myString, 6, 5 );
   Console::WriteLine(  "The first occurrence of \"{0}\" between index 6 and index 10 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The Array instance contains the following values:
     [0]:    the
     [1]:    quick
     [2]:    brown
     [3]:    fox
     [4]:    jumped
     [5]:    over
     [6]:    the
     [7]:    lazy
     [8]:    dog
     [9]:    in
     [10]:    the
     [11]:    barn
 The first occurrence of "the" is at index 0.
 The first occurrence of "the" between index 4 and the end is at index 6.
 The first occurrence of "the" between index 6 and index 10 is at index 6.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
IndexOf 重载
System 命名空间
LastIndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Initialize 方法

Array
.
.
::
.
Initialize 方法
Array 类

通过调用值类型的默认构造函数，初始化值类型 Array 的每一个元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Initialize
public void Initialize()
public:
void Initialize()
member Initialize : unit -> unit

此方法旨在帮助编译器支持值类型数组；多数用户不需要此方法。不得将它用于引用类型数组。 此方法旨在帮助编译器支持值类型数组；多数用户不需要此方法。不得将它用于引用类型数组。

如果 Array 不是值类型 Array，或者该值类型没有默认构造函数，则不修改 Array。

值类型 Array 的下限可为任意值，其维数也可为任意值。

此方法为 O(n) 操作，其中 n 是 Length。

警告说明 警告

只能将此方法用于具有构造函数的值类型；但是，C# 固有的值类型没有构造函数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IStructuralComparable ..::.CompareTo 方法

Array
.
.
::
.
IStructuralComparable
.
.
::
.
CompareTo 方法
Array 类

确定当前集合对象在排序顺序中的位置是位于另一个对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer Implements IStructuralComparable.CompareTo
int IStructuralComparable.CompareTo( Object other, IComparer comparer )
private: virtual int CompareTo( Object^ other, IComparer^ comparer ) sealed = IStructuralComparable::CompareTo
private abstract CompareTo : other:Object * comparer:IComparer -> int private override CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
要与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个将当前对象与
other
进行比较的对象。
返回值
类型： System Int32
一个指示当前集合对象与其他对象的关系的整数，如下表所示。
返回值
说明
-1
当前实例位于
other
之前。
0
当前实例与
other
位于同一位置。
1
当前实例位于
other
之后。
实现

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IStructuralComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IStructuralComparable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间


Array ..::.IStructuralEquatable ..::.Equals 方法

Array
.
.
::
.
IStructuralEquatable
.
.
::
.
Equals 方法
Array 类

确定某个对象与当前实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals
bool IStructuralEquatable.Equals(
    Object other,
    IEqualityComparer comparer
)
private:
virtual bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::Equals
private abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool
private override Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
要与当前实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个可确定当前实例与 other 是否相等的对象。

返回值

类型： System Boolean
如果两个对象相等，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IStructuralEquitable 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IStructuralEquitable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间


Array ..::.IStructuralEquatable ..::.GetHashCode 方法

Array
.
.
::
.
IStructuralEquatable
.
.
::
.
GetHashCode 方法
Array 类

返回当前实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer Implements IStructuralEquatable.GetHashCode
int IStructuralEquatable.GetHashCode(
    IEqualityComparer comparer
)
private:
virtual int GetHashCode(
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::GetHashCode
private abstract GetHashCode :
        comparer:IEqualityComparer -> int
private override GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个计算当前对象的哈希代码的对象。

返回值

类型： System Int32
当前实例的哈希代码。

实现

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IStructuralEquitable 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IStructuralEquitable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间


Array ..::.LastIndexOf 方法

Array
.
.
::
.
LastIndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

返回一维 Array 或部分 Array 中某个值的最后一个匹配项的索引。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.LastIndexOf <(Of <(T >)>) 方法 ( array<T >[]()[], T)

Array
.
.
::
.
LastIndexOf
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, T)
Array 类

搜索指定的对象，并返回整个 Array 中最后一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function LastIndexOf(Of T) ( _
    array As T(), _
    value As T _
) As Integer
public static int LastIndexOf<T>(
    T[] array,
    T value
)

public:
generic<typename T>
static int LastIndexOf(
    array<T>^ array,
    T value
)
static member LastIndexOf :
        array:'T[] *
        value:'T -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
value
类型：T
要在 array 中查找的对象。

返回值

类型： System Int32
如果在整个 array 中找到 value 的匹配项，则为最后一个匹配项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

在 Array 中从最后一个元素向后开始搜索，并在第一个元素停止搜索。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Tyrannosaurus", _
            "Amargasaurus", _
            "Mamenchisaurus", _
            "Brachiosaurus", _
            "Deinonychus", _
            "Tyrannosaurus", _
            "Compsognathus" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.LastIndexOf(dinosaurs, ""Tyrannosaurus""): {0}", _
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus"))

        Console.WriteLine(vbLf & _
            "Array.LastIndexOf(dinosaurs, ""Tyrannosaurus"", 3): {0}", _
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3))

        Console.WriteLine(vbLf & _
            "Array.LastIndexOf(dinosaurs, ""Tyrannosaurus"", 4, 4): {0}", _
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4))

    End Sub
End Class

' This code example produces the following output:
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Brachiosaurus
'Deinonychus
'Tyrannosaurus
'Compsognathus
'
'Array.LastIndexOf(dinosaurs, "Tyrannosaurus"): 5
'
'Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3): 0
'
'Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Tyrannosaurus",
            "Amargasaurus",
            "Mamenchisaurus",
            "Brachiosaurus",
            "Deinonychus",
            "Tyrannosaurus",
            "Compsognathus" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus"));

        Console.WriteLine(
            "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3));

        Console.WriteLine(
            "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 4, 4): {0}",
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4));
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.LastIndexOf(dinosaurs, "Tyrannosaurus"): 5

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3): 0

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4): -1
 */

using namespace System;

void main()
{
    array<String^>^ dinosaurs = { "Tyrannosaurus",
        "Amargasaurus",
        "Mamenchisaurus",
        "Brachiosaurus",
        "Deinonychus",
        "Tyrannosaurus",
        "Compsognathus" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine(
        "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
        Array::LastIndexOf(dinosaurs, "Tyrannosaurus"));

    Console::WriteLine(
        "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
        Array::LastIndexOf(dinosaurs, "Tyrannosaurus", 3));

    Console::WriteLine(
        "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 4, 4): {0}",
        Array::LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4));
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.LastIndexOf(dinosaurs, "Tyrannosaurus"): 5

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3): 0

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
LastIndexOf 重载
System 命名空间
IndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.LastIndexOf 方法 (Array, Object)

Array
.
.
::
.
LastIndexOf 方法 (Array, Object)
Array 类

搜索指定的对象，并返回整个一维 Array 中最后一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function LastIndexOf ( _
    array As Array, _
    value As Object _
) As Integer
public static int LastIndexOf(
    Array array,
    Object value
)
public:
static int LastIndexOf(
    Array^ array,
    Object^ value
)
static member LastIndexOf :
        array:Array *
        value:Object -> int

参数

array
类型： System Array
要搜索的一维 Array。
value
类型： System Object
要在 array 中查找的对象。

返回值

类型： System Int32
如果在整个 array 中找到 value 的匹配项，则为最后一个匹配项的索引；否则为该数组的下限减 1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。

向后搜索一维 Array，从最后一个元素开始，到第一个元素结束。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。 由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。 在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。

集合中对象的 item 参数的 CompareTo 方法。

下面的代码示例显示如何确定数组中指定元素的最后一个匹配项的索引。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array with three elements of
        ' the same value.
        Dim myArray As Array = Array.CreateInstance(GetType(String), 12)
        myArray.SetValue("the", 0)
        myArray.SetValue("quick", 1)
        myArray.SetValue("brown", 2)
        myArray.SetValue("fox", 3)
        myArray.SetValue("jumps", 4)
        myArray.SetValue("over", 5)
        myArray.SetValue("the", 6)
        myArray.SetValue("lazy", 7)
        myArray.SetValue("dog", 8)
        myArray.SetValue("in", 9)
        myArray.SetValue("the", 10)
        myArray.SetValue("barn", 11)

        ' Displays the values of the Array.
        Console.WriteLine("The Array contains the following values:")
        PrintIndexAndValues(myArray)

        ' Searches for the last occurrence of the duplicated value.
        Dim myString As String = "the"
        Dim myIndex As Integer = Array.LastIndexOf(myArray, myString)
        Console.WriteLine("The last occurrence of ""{0}"" is at index {1}.", _
           myString, myIndex)

        ' Searches for the last occurrence of the duplicated value in the first
        ' section of the Array.
        myIndex = Array.LastIndexOf(myArray, myString, 8)
        Console.WriteLine("The last occurrence of ""{0}"" between the start " _
           + "and index 8 is at index {1}.", myString, myIndex)

        ' Searches for the last occurrence of the duplicated value in a section
        ' of the Array.  Note that the start index is greater than the end
        ' index because the search is done backward.
        myIndex = Array.LastIndexOf(myArray, myString, 10, 6)
        Console.WriteLine("The last occurrence of ""{0}"" between index 5 " _
           + "and index 10 is at index {1}.", myString, myIndex)
    End Sub

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The Array contains the following values:
'     [0]:    the
'     [1]:    quick
'     [2]:    brown
'     [3]:    fox
'     [4]:    jumps
'     [5]:    over
'     [6]:    the
'     [7]:    lazy
'     [8]:    dog
'     [9]:    in
'     [10]:    the
'     [11]:    barn
' The last occurrence of "the" is at index 10.
' The last occurrence of "the" between the start and index 8 is at index 6.
' The last occurrence of "the" between index 5 and index 10 is at index 10.

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array with three elements of the same value.
      Array myArray=Array.CreateInstance( typeof(String), 12 );
      myArray.SetValue( "the", 0 );
      myArray.SetValue( "quick", 1 );
      myArray.SetValue( "brown", 2 );
      myArray.SetValue( "fox", 3 );
      myArray.SetValue( "jumps", 4 );
      myArray.SetValue( "over", 5 );
      myArray.SetValue( "the", 6 );
      myArray.SetValue( "lazy", 7 );
      myArray.SetValue( "dog", 8 );
      myArray.SetValue( "in", 9 );
      myArray.SetValue( "the", 10 );
      myArray.SetValue( "barn", 11 );

      // Displays the values of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintIndexAndValues( myArray );

      // Searches for the last occurrence of the duplicated value.
      String myString = "the";
      int myIndex = Array.LastIndexOf( myArray, myString );
      Console.WriteLine( "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in the first section of the Array.
      myIndex = Array.LastIndexOf( myArray, myString, 8 );
      Console.WriteLine( "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in a section of the Array.
      // Note that the start index is greater than the end index because the search is done backward.
      myIndex = Array.LastIndexOf( myArray, myString, 10, 6 );
      Console.WriteLine( "The last occurrence of \"{0}\" between index 5 and index 10 is at index {1}.", myString, myIndex );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The Array contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn
The last occurrence of "the" is at index 10.
The last occurrence of "the" between the start and index 8 is at index 6.
The last occurrence of "the" between index 5 and index 10 is at index 10.
*/

using namespace System;
void PrintIndexAndValues( Array^ myArray );

void main()
{
   // Creates and initializes a new Array instance with three elements of the same value.
   Array^ myArray = Array::CreateInstance( String::typeid, 12 );
   myArray->SetValue( "the", 0 );
   myArray->SetValue( "quick", 1 );
   myArray->SetValue( "brown", 2 );
   myArray->SetValue( "fox", 3 );
   myArray->SetValue( "jumped", 4 );
   myArray->SetValue( "over", 5 );
   myArray->SetValue( "the", 6 );
   myArray->SetValue( "lazy", 7 );
   myArray->SetValue( "dog", 8 );
   myArray->SetValue( "in", 9 );
   myArray->SetValue( "the", 10 );
   myArray->SetValue( "barn", 11 );

   // Displays the values of the Array.
   Console::WriteLine(  "The Array instance contains the following values:" );
   PrintIndexAndValues( myArray );

   // Searches for the last occurrence of the duplicated value.
   String^ myString =  "the";
   int myIndex = Array::LastIndexOf( myArray, myString );
   Console::WriteLine(  "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in the first section of the Array.
   myIndex = Array::LastIndexOf( myArray, myString, 8 );
   Console::WriteLine(  "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in a section of the Array.
   // Note that the start index is greater than the end index because the search is done backward.
   myIndex = Array::LastIndexOf( myArray, myString, 10, 6 );
   Console::WriteLine(  "The last occurrence of \"{0}\" between index 5 and index 10 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The Array instance contains the following values:
     [0]:    the
     [1]:    quick
     [2]:    brown
     [3]:    fox
     [4]:    jumped
     [5]:    over
     [6]:    the
     [7]:    lazy
     [8]:    dog
     [9]:    in
     [10]:    the
     [11]:    barn
 The last occurrence of "the" is at index 10.
 The last occurrence of "the" between the start and index 8 is at index 6.
 The last occurrence of "the" between index 5 and index 10 is at index 10.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
LastIndexOf 重载
System 命名空间
IndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.LastIndexOf <(Of <(T >)>) 方法 ( array<T >[]()[], T, Int32)

Array
.
.
::
.
LastIndexOf
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, T, Int32)
Array 类

搜索指定的对象，并返回 Array 中从第一个元素到指定索引这部分元素中最后一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function LastIndexOf(Of T) ( _
    array As T(), _
    value As T, _
    startIndex As Integer _
) As Integer
public static int LastIndexOf<T>(
    T[] array,
    T value,
    int startIndex
)

public:
generic<typename T>
static int LastIndexOf(
    array<T>^ array,
    T value,
    int startIndex
)
static member LastIndexOf :
        array:'T[] *
        value:'T *
        startIndex:int -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
value
类型：T
要在 array 中查找的对象。
startIndex
类型： System Int32
向后搜索的从零开始的起始索引。

返回值

类型： System Int32
如果在 array 中从第一个元素到 startIndex 这部分元素中找到 value 的匹配项，则为最后一个匹配项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。

在 Array 中从 startIndex 开始向后搜索，并在第一个元素停止搜索。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

此方法的运算复杂度为 O(n)，其中 n 是从 array 开头到 startIndex 这一范围所包含的元素数目。

下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Tyrannosaurus", _
            "Amargasaurus", _
            "Mamenchisaurus", _
            "Brachiosaurus", _
            "Deinonychus", _
            "Tyrannosaurus", _
            "Compsognathus" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.LastIndexOf(dinosaurs, ""Tyrannosaurus""): {0}", _
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus"))

        Console.WriteLine(vbLf & _
            "Array.LastIndexOf(dinosaurs, ""Tyrannosaurus"", 3): {0}", _
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3))

        Console.WriteLine(vbLf & _
            "Array.LastIndexOf(dinosaurs, ""Tyrannosaurus"", 4, 4): {0}", _
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4))

    End Sub
End Class

' This code example produces the following output:
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Brachiosaurus
'Deinonychus
'Tyrannosaurus
'Compsognathus
'
'Array.LastIndexOf(dinosaurs, "Tyrannosaurus"): 5
'
'Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3): 0
'
'Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Tyrannosaurus",
            "Amargasaurus",
            "Mamenchisaurus",
            "Brachiosaurus",
            "Deinonychus",
            "Tyrannosaurus",
            "Compsognathus" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus"));

        Console.WriteLine(
            "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3));

        Console.WriteLine(
            "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 4, 4): {0}",
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4));
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.LastIndexOf(dinosaurs, "Tyrannosaurus"): 5

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3): 0

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4): -1
 */

using namespace System;

void main()
{
    array<String^>^ dinosaurs = { "Tyrannosaurus",
        "Amargasaurus",
        "Mamenchisaurus",
        "Brachiosaurus",
        "Deinonychus",
        "Tyrannosaurus",
        "Compsognathus" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine(
        "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
        Array::LastIndexOf(dinosaurs, "Tyrannosaurus"));

    Console::WriteLine(
        "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
        Array::LastIndexOf(dinosaurs, "Tyrannosaurus", 3));

    Console::WriteLine(
        "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 4, 4): {0}",
        Array::LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4));
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.LastIndexOf(dinosaurs, "Tyrannosaurus"): 5

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3): 0

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
LastIndexOf 重载
System 命名空间
IndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.LastIndexOf 方法 (Array, Object, Int32)

Array
.
.
::
.
LastIndexOf 方法 (Array, Object, Int32)
Array 类

搜索指定的对象，并返回一维 Array 中从第一个元素到指定索引这部分元素中最后一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function LastIndexOf ( _
    array As Array, _
    value As Object, _
    startIndex As Integer _
) As Integer
public static int LastIndexOf(
    Array array,
    Object value,
    int startIndex
)
public:
static int LastIndexOf(
    Array^ array,
    Object^ value,
    int startIndex
)
static member LastIndexOf :
        array:Array *
        value:Object *
        startIndex:int -> int

参数

array
类型： System Array
要搜索的一维 Array。
value
类型： System Object
要在 array 中查找的对象。
startIndex
类型： System Int32
向后搜索的起始索引。

返回值

类型： System Int32
如果在 array 中从第一个元素到 startIndex 这部分元素中找到 value 的匹配项，则为最后一个匹配项的索引；否则为该数组的下限减 1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。
RankException | array 是多维数组。

向后搜索一维 Array，从 startIndex 开始，到第一个元素结束。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。 由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。

此方法的运算复杂度为 O(n)，其中 n 是从 array 开头到 startIndex 这一范围所包含的元素数目。

在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。 在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。

下面的代码示例显示如何确定数组中指定元素的最后一个匹配项的索引。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array with three elements of
        ' the same value.
        Dim myArray As Array = Array.CreateInstance(GetType(String), 12)
        myArray.SetValue("the", 0)
        myArray.SetValue("quick", 1)
        myArray.SetValue("brown", 2)
        myArray.SetValue("fox", 3)
        myArray.SetValue("jumps", 4)
        myArray.SetValue("over", 5)
        myArray.SetValue("the", 6)
        myArray.SetValue("lazy", 7)
        myArray.SetValue("dog", 8)
        myArray.SetValue("in", 9)
        myArray.SetValue("the", 10)
        myArray.SetValue("barn", 11)

        ' Displays the values of the Array.
        Console.WriteLine("The Array contains the following values:")
        PrintIndexAndValues(myArray)

        ' Searches for the last occurrence of the duplicated value.
        Dim myString As String = "the"
        Dim myIndex As Integer = Array.LastIndexOf(myArray, myString)
        Console.WriteLine("The last occurrence of ""{0}"" is at index {1}.", _
           myString, myIndex)

        ' Searches for the last occurrence of the duplicated value in the first
        ' section of the Array.
        myIndex = Array.LastIndexOf(myArray, myString, 8)
        Console.WriteLine("The last occurrence of ""{0}"" between the start " _
           + "and index 8 is at index {1}.", myString, myIndex)

        ' Searches for the last occurrence of the duplicated value in a section
        ' of the Array.  Note that the start index is greater than the end
        ' index because the search is done backward.
        myIndex = Array.LastIndexOf(myArray, myString, 10, 6)
        Console.WriteLine("The last occurrence of ""{0}"" between index 5 " _
           + "and index 10 is at index {1}.", myString, myIndex)
    End Sub

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The Array contains the following values:
'     [0]:    the
'     [1]:    quick
'     [2]:    brown
'     [3]:    fox
'     [4]:    jumps
'     [5]:    over
'     [6]:    the
'     [7]:    lazy
'     [8]:    dog
'     [9]:    in
'     [10]:    the
'     [11]:    barn
' The last occurrence of "the" is at index 10.
' The last occurrence of "the" between the start and index 8 is at index 6.
' The last occurrence of "the" between index 5 and index 10 is at index 10.

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array with three elements of the same value.
      Array myArray=Array.CreateInstance( typeof(String), 12 );
      myArray.SetValue( "the", 0 );
      myArray.SetValue( "quick", 1 );
      myArray.SetValue( "brown", 2 );
      myArray.SetValue( "fox", 3 );
      myArray.SetValue( "jumps", 4 );
      myArray.SetValue( "over", 5 );
      myArray.SetValue( "the", 6 );
      myArray.SetValue( "lazy", 7 );
      myArray.SetValue( "dog", 8 );
      myArray.SetValue( "in", 9 );
      myArray.SetValue( "the", 10 );
      myArray.SetValue( "barn", 11 );

      // Displays the values of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintIndexAndValues( myArray );

      // Searches for the last occurrence of the duplicated value.
      String myString = "the";
      int myIndex = Array.LastIndexOf( myArray, myString );
      Console.WriteLine( "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in the first section of the Array.
      myIndex = Array.LastIndexOf( myArray, myString, 8 );
      Console.WriteLine( "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in a section of the Array.
      // Note that the start index is greater than the end index because the search is done backward.
      myIndex = Array.LastIndexOf( myArray, myString, 10, 6 );
      Console.WriteLine( "The last occurrence of \"{0}\" between index 5 and index 10 is at index {1}.", myString, myIndex );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The Array contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn
The last occurrence of "the" is at index 10.
The last occurrence of "the" between the start and index 8 is at index 6.
The last occurrence of "the" between index 5 and index 10 is at index 10.
*/

using namespace System;
void PrintIndexAndValues( Array^ myArray );

void main()
{
   // Creates and initializes a new Array instance with three elements of the same value.
   Array^ myArray = Array::CreateInstance( String::typeid, 12 );
   myArray->SetValue( "the", 0 );
   myArray->SetValue( "quick", 1 );
   myArray->SetValue( "brown", 2 );
   myArray->SetValue( "fox", 3 );
   myArray->SetValue( "jumped", 4 );
   myArray->SetValue( "over", 5 );
   myArray->SetValue( "the", 6 );
   myArray->SetValue( "lazy", 7 );
   myArray->SetValue( "dog", 8 );
   myArray->SetValue( "in", 9 );
   myArray->SetValue( "the", 10 );
   myArray->SetValue( "barn", 11 );

   // Displays the values of the Array.
   Console::WriteLine(  "The Array instance contains the following values:" );
   PrintIndexAndValues( myArray );

   // Searches for the last occurrence of the duplicated value.
   String^ myString =  "the";
   int myIndex = Array::LastIndexOf( myArray, myString );
   Console::WriteLine(  "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in the first section of the Array.
   myIndex = Array::LastIndexOf( myArray, myString, 8 );
   Console::WriteLine(  "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in a section of the Array.
   // Note that the start index is greater than the end index because the search is done backward.
   myIndex = Array::LastIndexOf( myArray, myString, 10, 6 );
   Console::WriteLine(  "The last occurrence of \"{0}\" between index 5 and index 10 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The Array instance contains the following values:
     [0]:    the
     [1]:    quick
     [2]:    brown
     [3]:    fox
     [4]:    jumped
     [5]:    over
     [6]:    the
     [7]:    lazy
     [8]:    dog
     [9]:    in
     [10]:    the
     [11]:    barn
 The last occurrence of "the" is at index 10.
 The last occurrence of "the" between the start and index 8 is at index 6.
 The last occurrence of "the" between index 5 and index 10 is at index 10.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
LastIndexOf 重载
System 命名空间
IndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.LastIndexOf <(Of <(T >)>) 方法 ( array<T >[]()[], T, Int32, Int32)

Array
.
.
::
.
LastIndexOf
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, T, Int32, Int32)
Array 类

搜索指定的对象，并返回 Array 中到指定索引为止包含指定个元素的这部分元素中最后一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function LastIndexOf(Of T) ( _
    array As T(), _
    value As T, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public static int LastIndexOf<T>(
    T[] array,
    T value,
    int startIndex,
    int count
)

public:
generic<typename T>
static int LastIndexOf(
    array<T>^ array,
    T value,
    int startIndex,
    int count
)
static member LastIndexOf :
        array:'T[] *
        value:'T *
        startIndex:int *
        count:int -> int

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要搜索的从零开始的一维 Array。
value
类型：T
要在 array 中查找的对象。
startIndex
类型： System Int32
向后搜索的从零开始的起始索引。
count
类型： System Int32
要搜索的部分中的元素数。

返回值

类型： System Int32
如果在 array 中到 startIndex 为止、包含 count 所指定的元素个数的这部分元素中，找到 value 的匹配项，则为最后一个匹配项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。 - 或 - count 小于零。 - 或 - startIndex 和 count 指定的不是 array 中的有效部分。

如果 count 大于 0，则在 Array 中向后搜索，从 startIndex 处开始，到 startIndex - count + 1 处结束。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

此方法的运算复杂度为 O(n)，其中 n 是 count。

下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。 下面的代码示例演示 LastIndexOf 方法的所有三种泛型重载。创建一个字符串数组，其中有一项在索引位置 0 和索引位置 5 处分别出现一次。LastIndexOf<(Of <(T>)>)(array<T>[]()[], T) 方法重载从尾部搜索整个数组，并查找字符串的第二个匹配项。使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32) 方法重载从索引位置 3 处开始向后搜索数组，直至数组的开始处，找到第一次出现的字符串。最后，使用 LastIndexOf<(Of <(T>)>)(array<T>[]()[], T, Int32, Int32) 方法重载从索引位置 4 开始在四个项的范围内进行向后搜索（即，搜索位于位置 4、3、2 和 1 处的项）；它返回 –1，因为该范围内没有搜索字符串的实例。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Tyrannosaurus", _
            "Amargasaurus", _
            "Mamenchisaurus", _
            "Brachiosaurus", _
            "Deinonychus", _
            "Tyrannosaurus", _
            "Compsognathus" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.LastIndexOf(dinosaurs, ""Tyrannosaurus""): {0}", _
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus"))

        Console.WriteLine(vbLf & _
            "Array.LastIndexOf(dinosaurs, ""Tyrannosaurus"", 3): {0}", _
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3))

        Console.WriteLine(vbLf & _
            "Array.LastIndexOf(dinosaurs, ""Tyrannosaurus"", 4, 4): {0}", _
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4))

    End Sub
End Class

' This code example produces the following output:
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Brachiosaurus
'Deinonychus
'Tyrannosaurus
'Compsognathus
'
'Array.LastIndexOf(dinosaurs, "Tyrannosaurus"): 5
'
'Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3): 0
'
'Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4): -1

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Tyrannosaurus",
            "Amargasaurus",
            "Mamenchisaurus",
            "Brachiosaurus",
            "Deinonychus",
            "Tyrannosaurus",
            "Compsognathus" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus"));

        Console.WriteLine(
            "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3));

        Console.WriteLine(
            "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 4, 4): {0}",
            Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4));
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.LastIndexOf(dinosaurs, "Tyrannosaurus"): 5

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3): 0

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4): -1
 */

using namespace System;

void main()
{
    array<String^>^ dinosaurs = { "Tyrannosaurus",
        "Amargasaurus",
        "Mamenchisaurus",
        "Brachiosaurus",
        "Deinonychus",
        "Tyrannosaurus",
        "Compsognathus" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine(
        "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\"): {0}",
        Array::LastIndexOf(dinosaurs, "Tyrannosaurus"));

    Console::WriteLine(
        "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 3): {0}",
        Array::LastIndexOf(dinosaurs, "Tyrannosaurus", 3));

    Console::WriteLine(
        "\nArray.LastIndexOf(dinosaurs, \"Tyrannosaurus\", 4, 4): {0}",
        Array::LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4));
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Brachiosaurus
Deinonychus
Tyrannosaurus
Compsognathus

Array.LastIndexOf(dinosaurs, "Tyrannosaurus"): 5

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 3): 0

Array.LastIndexOf(dinosaurs, "Tyrannosaurus", 4, 4): -1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
LastIndexOf 重载
System 命名空间
IndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.LastIndexOf 方法 (Array, Object, Int32, Int32)

Array
.
.
::
.
LastIndexOf 方法 (Array, Object, Int32, Int32)
Array 类

搜索指定的对象，并返回一维 Array 中到指定索引为止包含指定个元素的这部分元素中最后一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function LastIndexOf ( _
    array As Array, _
    value As Object, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public static int LastIndexOf(
    Array array,
    Object value,
    int startIndex,
    int count
)
public:
static int LastIndexOf(
    Array^ array,
    Object^ value,
    int startIndex,
    int count
)
static member LastIndexOf :
        array:Array *
        value:Object *
        startIndex:int *
        count:int -> int

参数

array
类型： System Array
要搜索的一维 Array。
value
类型： System Object
要在 array 中查找的对象。
startIndex
类型： System Int32
向后搜索的起始索引。
count
类型： System Int32
要搜索的部分中的元素数。

返回值

类型： System Int32
如果在 array 中到 startIndex 为止并且包含的元素个数为在 count 中指定的个数的这部分元素中找到 value 的匹配项，则为最后一个匹配项的索引；否则为该数组的下限减 1。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 超出了 array 的有效索引范围。 - 或 - count 小于零。 - 或 - startIndex 和 count 指定的不是 array 中的有效部分。
RankException | array 是多维数组。

如果 count 大于 0，则向后搜索 Array，从 startIndex 开始，到 startIndex - count + 1 结束。

使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。 使用 Object..::.Equals 方法，将元素与指定的值进行比较。如果元素类型是非内部（用户定义）类型，则使用该类型的 Equals 实现。

由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。 由于大多数数组以零作为下限，在找不到 value 时，此方法通常将返回 -1。在极少数情况下，数组的下限等于 Int32..::.MinValue，且找不到 value，这时此方法返回 Int32..::.MaxValue，即 System.Int32.MinValue - 1。

此方法的运算复杂度为 O(n)，其中 n 是 count。

在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。 在 .NET Framework 2.0 版中，此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。在早期版本的 .NET Framework 中，这是通过使用 valueObject 本身的 Equals 和 CompareTo 方法来确定的。

下面的代码示例显示如何确定数组中指定元素的最后一个匹配项的索引。请注意，LastIndexOf 方法向后搜索；因此，count 必须小于或等于（startIndex - 数组的下限 + 1）。 下面的代码示例显示如何确定数组中指定元素的最后一个匹配项的索引。请注意，LastIndexOf 方法向后搜索；因此，count 必须小于或等于（startIndex - 数组的下限 + 1）。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array with three elements of
        ' the same value.
        Dim myArray As Array = Array.CreateInstance(GetType(String), 12)
        myArray.SetValue("the", 0)
        myArray.SetValue("quick", 1)
        myArray.SetValue("brown", 2)
        myArray.SetValue("fox", 3)
        myArray.SetValue("jumps", 4)
        myArray.SetValue("over", 5)
        myArray.SetValue("the", 6)
        myArray.SetValue("lazy", 7)
        myArray.SetValue("dog", 8)
        myArray.SetValue("in", 9)
        myArray.SetValue("the", 10)
        myArray.SetValue("barn", 11)

        ' Displays the values of the Array.
        Console.WriteLine("The Array contains the following values:")
        PrintIndexAndValues(myArray)

        ' Searches for the last occurrence of the duplicated value.
        Dim myString As String = "the"
        Dim myIndex As Integer = Array.LastIndexOf(myArray, myString)
        Console.WriteLine("The last occurrence of ""{0}"" is at index {1}.", _
           myString, myIndex)

        ' Searches for the last occurrence of the duplicated value in the first
        ' section of the Array.
        myIndex = Array.LastIndexOf(myArray, myString, 8)
        Console.WriteLine("The last occurrence of ""{0}"" between the start " _
           + "and index 8 is at index {1}.", myString, myIndex)

        ' Searches for the last occurrence of the duplicated value in a section
        ' of the Array.  Note that the start index is greater than the end
        ' index because the search is done backward.
        myIndex = Array.LastIndexOf(myArray, myString, 10, 6)
        Console.WriteLine("The last occurrence of ""{0}"" between index 5 " _
           + "and index 10 is at index {1}.", myString, myIndex)
    End Sub

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The Array contains the following values:
'     [0]:    the
'     [1]:    quick
'     [2]:    brown
'     [3]:    fox
'     [4]:    jumps
'     [5]:    over
'     [6]:    the
'     [7]:    lazy
'     [8]:    dog
'     [9]:    in
'     [10]:    the
'     [11]:    barn
' The last occurrence of "the" is at index 10.
' The last occurrence of "the" between the start and index 8 is at index 6.
' The last occurrence of "the" between index 5 and index 10 is at index 10.

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array with three elements of the same value.
      Array myArray=Array.CreateInstance( typeof(String), 12 );
      myArray.SetValue( "the", 0 );
      myArray.SetValue( "quick", 1 );
      myArray.SetValue( "brown", 2 );
      myArray.SetValue( "fox", 3 );
      myArray.SetValue( "jumps", 4 );
      myArray.SetValue( "over", 5 );
      myArray.SetValue( "the", 6 );
      myArray.SetValue( "lazy", 7 );
      myArray.SetValue( "dog", 8 );
      myArray.SetValue( "in", 9 );
      myArray.SetValue( "the", 10 );
      myArray.SetValue( "barn", 11 );

      // Displays the values of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintIndexAndValues( myArray );

      // Searches for the last occurrence of the duplicated value.
      String myString = "the";
      int myIndex = Array.LastIndexOf( myArray, myString );
      Console.WriteLine( "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in the first section of the Array.
      myIndex = Array.LastIndexOf( myArray, myString, 8 );
      Console.WriteLine( "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in a section of the Array.
      // Note that the start index is greater than the end index because the search is done backward.
      myIndex = Array.LastIndexOf( myArray, myString, 10, 6 );
      Console.WriteLine( "The last occurrence of \"{0}\" between index 5 and index 10 is at index {1}.", myString, myIndex );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The Array contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn
The last occurrence of "the" is at index 10.
The last occurrence of "the" between the start and index 8 is at index 6.
The last occurrence of "the" between index 5 and index 10 is at index 10.
*/

using namespace System;
void PrintIndexAndValues( Array^ myArray );

void main()
{
   // Creates and initializes a new Array instance with three elements of the same value.
   Array^ myArray = Array::CreateInstance( String::typeid, 12 );
   myArray->SetValue( "the", 0 );
   myArray->SetValue( "quick", 1 );
   myArray->SetValue( "brown", 2 );
   myArray->SetValue( "fox", 3 );
   myArray->SetValue( "jumped", 4 );
   myArray->SetValue( "over", 5 );
   myArray->SetValue( "the", 6 );
   myArray->SetValue( "lazy", 7 );
   myArray->SetValue( "dog", 8 );
   myArray->SetValue( "in", 9 );
   myArray->SetValue( "the", 10 );
   myArray->SetValue( "barn", 11 );

   // Displays the values of the Array.
   Console::WriteLine(  "The Array instance contains the following values:" );
   PrintIndexAndValues( myArray );

   // Searches for the last occurrence of the duplicated value.
   String^ myString =  "the";
   int myIndex = Array::LastIndexOf( myArray, myString );
   Console::WriteLine(  "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in the first section of the Array.
   myIndex = Array::LastIndexOf( myArray, myString, 8 );
   Console::WriteLine(  "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in a section of the Array.
   // Note that the start index is greater than the end index because the search is done backward.
   myIndex = Array::LastIndexOf( myArray, myString, 10, 6 );
   Console::WriteLine(  "The last occurrence of \"{0}\" between index 5 and index 10 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The Array instance contains the following values:
     [0]:    the
     [1]:    quick
     [2]:    brown
     [3]:    fox
     [4]:    jumped
     [5]:    over
     [6]:    the
     [7]:    lazy
     [8]:    dog
     [9]:    in
     [10]:    the
     [11]:    barn
 The last occurrence of "the" is at index 10.
 The last occurrence of "the" between the start and index 8 is at index 6.
 The last occurrence of "the" between index 5 and index 10 is at index 10.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
LastIndexOf 重载
System 命名空间
IndexOf

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Resize <(Of <(T >)>) 方法

Array
.
.
::
.
Resize
<
(Of
<
(
T
>
)
>
)
方法
Array 类

将数组的元素数更改为指定的新大小。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Resize(Of T) ( _
    ByRef array As T(), _
    newSize As Integer _
)
public static void Resize<T>(
    ref T[] array,
    int newSize
)

public:
generic<typename T>
static void Resize(
    array<T>^% array,
    int newSize
)
static member Resize :
        array:'T[] byref *
        newSize:int -> unit

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]
%
要调整大小的一维数组，该数组从零开始；如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 则新建具有指定大小的数组。
newSize
类型： System Int32
新数组的大小。
异常 | 条件
ArgumentOutOfRangeException | newSize 小于零。

此方法分配一个具有指定大小的新数组，将元素从旧数组复制到新数组，然后用新数组替换旧数组。

如果 array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），此方法将新建具有指定大小的数组。

如果 newSize 大于旧数组的 Length，则分配一个新数组，并将所有元素从旧数组复制到新数组。如果 newSize 小于旧数组的 Length，则分配一个新数组，并将元素从旧数组复制到新数组直到新数组被填满为止；旧数组中的剩余元素将被忽略。如果 newSize 与旧数组的 Length 相等，则此方法不执行任何操作。 如果 newSize 大于旧数组的 Length，则分配一个新数组，并将所有元素从旧数组复制到新数组。如果 newSize 小于旧数组的 Length，则分配一个新数组，并将元素从旧数组复制到新数组直到新数组被填满为止；旧数组中的剩余元素将被忽略。如果 newSize 与旧数组的 Length 相等，则此方法不执行任何操作。 如果 newSize 大于旧数组的 Length，则分配一个新数组，并将所有元素从旧数组复制到新数组。如果 newSize 小于旧数组的 Length，则分配一个新数组，并将元素从旧数组复制到新数组直到新数组被填满为止；旧数组中的剩余元素将被忽略。如果 newSize 与旧数组的 Length 相等，则此方法不执行任何操作。

此方法为 O(n) 操作，其中 n 是 newSize。

下面的示例显示调整大小操作如何影响数组。

Imports System

Public Class SamplesArray

    Public Shared Sub Main()

        ' Create and initialize a new string array.
        Dim myArr As String() =  {"The", "quick", "brown", "fox", _
            "jumps", "over", "the", "lazy", "dog"}

        ' Display the values of the array.
        Console.WriteLine( _
            "The string array initially contains the following values:")
        PrintIndexAndValues(myArr)

        ' Resize the array to a bigger size (five elements larger).
        Array.Resize(myArr, myArr.Length + 5)

        ' Display the values of the array.
        Console.WriteLine("After resizing to a larger size, ")
        Console.WriteLine("the string array contains the following values:")
        PrintIndexAndValues(myArr)

        ' Resize the array to a smaller size (four elements).
        Array.Resize(myArr, 4)

        ' Display the values of the array.
        Console.WriteLine("After resizing to a smaller size, ")
        Console.WriteLine("the string array contains the following values:")
        PrintIndexAndValues(myArr)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(myArr() As String)
        Dim i As Integer
        For i = 0 To myArr.Length - 1
            Console.WriteLine("   [{0}] : {1}", i, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The string array initially contains the following values:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After resizing to a larger size,
'the string array contains the following values:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'   [9] :
'   [10] :
'   [11] :
'   [12] :
'   [13] :
'
'After resizing to a smaller size,
'the string array contains the following values:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox

using System;

public class SamplesArray
{
    public static void Main()  {

        // Create and initialize a new string array.
        String[] myArr = {"The", "quick", "brown", "fox", "jumps",
            "over", "the", "lazy", "dog"};

        // Display the values of the array.
        Console.WriteLine(
            "The string array initially contains the following values:");
        PrintIndexAndValues(myArr);

        // Resize the array to a bigger size (five elements larger).
        Array.Resize(ref myArr, myArr.Length + 5);

        // Display the values of the array.
        Console.WriteLine("After resizing to a larger size, ");
        Console.WriteLine("the string array contains the following values:");
        PrintIndexAndValues(myArr);

        // Resize the array to a smaller size (four elements).
        Array.Resize(ref myArr, 4);

        // Display the values of the array.
        Console.WriteLine("After resizing to a smaller size, ");
        Console.WriteLine("the string array contains the following values:");
        PrintIndexAndValues(myArr);
    }

    public static void PrintIndexAndValues(String[] myArr)  {
        for(int i = 0; i < myArr.Length; i++)
        {
            Console.WriteLine("   [{0}] : {1}", i, myArr[i]);
        }
        Console.WriteLine();
    }
}

/*
This code produces the following output.

The string array initially contains the following values:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After resizing to a larger size,
the string array contains the following values:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog
   [9] :
   [10] :
   [11] :
   [12] :
   [13] :

After resizing to a smaller size,
the string array contains the following values:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox

*/

using namespace System;
static void PrintIndexAndValues(array<String^>^myArr)
{
    for(int i = 0; i < myArr->Length; i++)
    {
       Console::WriteLine(L"   [{0}] : {1}", i, myArr[i]);
    }
    Console::WriteLine();
}

int main()
{

    // Create and initialize a new string array.
    array<String^>^myArr = {L"The", L"quick", L"brown", L"fox",
        L"jumps", L"over", L"the", L"lazy", L"dog"};

    // Display the values of the array.
    Console::WriteLine(
        L"The string array initially contains the following values:");
    PrintIndexAndValues(myArr);

    // Resize the array to a bigger size (five elements larger).
    Array::Resize(myArr, myArr->Length + 5);

    // Display the values of the array.
    Console::WriteLine(L"After resizing to a larger size, ");
    Console::WriteLine(L"the string array contains the following values:");
    PrintIndexAndValues(myArr);

    // Resize the array to a smaller size (four elements).
    Array::Resize(myArr, 4);

    // Display the values of the array.
    Console::WriteLine(L"After resizing to a smaller size, ");
    Console::WriteLine(L"the string array contains the following values:");
    PrintIndexAndValues(myArr);
    return 1;
}

/*
This code produces the following output.

The string array initially contains the following values:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After resizing to a larger size,
the string array contains the following values:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog
   [9] :
   [10] :
   [11] :
   [12] :
   [13] :

After resizing to a smaller size,
the string array contains the following values:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.Reverse 方法

Array
.
.
::
.
Reverse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

反转一维 Array 或部分 Array 中元素的顺序。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.Reverse 方法 (Array)

Array
.
.
::
.
Reverse 方法 (Array)
Array 类

反转整个一维 Array 中元素的顺序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Reverse ( _
    array As Array _
)
public static void Reverse(
    Array array
)
public:
static void Reverse(
    Array^ array
)
static member Reverse :
        array:Array -> unit

参数

array
类型： System Array
要反转的一维 Array。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。

调用此方法之后，myArray[i]（其中 i 为数组中的任意一个索引）处的元素移到 myArray[j]（其中 j 等于 (myArray.Length + myArray.GetLowerBound(0)) - (i - myArray.GetLowerBound(0)) - 1）。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例说明如何反转 Array 中的值的排序。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array.
        Dim myArray As Array = Array.CreateInstance(GetType(String), 9)
        myArray.SetValue("The", 0)
        myArray.SetValue("quick", 1)
        myArray.SetValue("brown", 2)
        myArray.SetValue("fox", 3)
        myArray.SetValue("jumps", 4)
        myArray.SetValue("over", 5)
        myArray.SetValue("the", 6)
        myArray.SetValue("lazy", 7)
        myArray.SetValue("dog", 8)

        ' Displays the values of the Array.
        Console.WriteLine("The Array initially contains the " _
           + "following values:")
        PrintIndexAndValues(myArray)

        ' Reverses the sort of the values of the Array.
        Array.Reverse(myArray)

        ' Displays the values of the Array.
        Console.WriteLine("After reversing:")
        PrintIndexAndValues(myArray)
    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The Array initially contains the following values:
'     [0]:    The
'     [1]:    quick
'     [2]:    brown
'     [3]:    fox
'     [4]:    jumps
'     [5]:    over
'     [6]:    the
'     [7]:    lazy
'     [8]:    dog
' After reversing:
'     [0]:    dog
'     [1]:    lazy
'     [2]:    the
'     [3]:    over
'     [4]:    jumps
'     [5]:    fox
'     [6]:    brown
'     [7]:    quick
'     [8]:    The

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array.
      Array myArray=Array.CreateInstance( typeof(String), 9 );
      myArray.SetValue( "The", 0 );
      myArray.SetValue( "quick", 1 );
      myArray.SetValue( "brown", 2 );
      myArray.SetValue( "fox", 3 );
      myArray.SetValue( "jumps", 4 );
      myArray.SetValue( "over", 5 );
      myArray.SetValue( "the", 6 );
      myArray.SetValue( "lazy", 7 );
      myArray.SetValue( "dog", 8 );

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintIndexAndValues( myArray );

      // Reverses the sort of the values of the Array.
      Array.Reverse( myArray );

      // Displays the values of the Array.
      Console.WriteLine( "After reversing:" );
      PrintIndexAndValues( myArray );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The Array initially contains the following values:
    [0]:    The
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
After reversing:
    [0]:    dog
    [1]:    lazy
    [2]:    the
    [3]:    over
    [4]:    jumps
    [5]:    fox
    [6]:    brown
    [7]:    quick
    [8]:    The
*/

using namespace System;
void PrintIndexAndValues( Array^ myArray );
void main()
{
   // Creates and initializes a new Array instance.
   Array^ myArray = Array::CreateInstance( String::typeid, 9 );
   myArray->SetValue( "The", 0 );
   myArray->SetValue( "quick", 1 );
   myArray->SetValue( "brown", 2 );
   myArray->SetValue( "fox", 3 );
   myArray->SetValue( "jumped", 4 );
   myArray->SetValue( "over", 5 );
   myArray->SetValue( "the", 6 );
   myArray->SetValue( "lazy", 7 );
   myArray->SetValue( "dog", 8 );

   // Displays the values of the Array.
   Console::WriteLine(  "The Array instance initially contains the following values:" );
   PrintIndexAndValues( myArray );

   // Reverses the sort of the values of the Array.
   Array::Reverse( myArray );

   // Displays the values of the Array.
   Console::WriteLine(  "After reversing:" );
   PrintIndexAndValues( myArray );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The Array instance initially contains the following values:
     [0]:    The
     [1]:    quick
     [2]:    brown
     [3]:    fox
     [4]:    jumped
     [5]:    over
     [6]:    the
     [7]:    lazy
     [8]:    dog
 After reversing:
     [0]:    dog
     [1]:    lazy
     [2]:    the
     [3]:    over
     [4]:    jumped
     [5]:    fox
     [6]:    brown
     [7]:    quick
     [8]:    The
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Reverse 重载
System 命名空间


Array ..::.Reverse 方法 (Array, Int32, Int32)

Array
.
.
::
.
Reverse 方法 (Array, Int32, Int32)
Array 类

反转一维 Array 中某部分元素的元素顺序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Reverse ( _
    array As Array, _
    index As Integer, _
    length As Integer _
)
public static void Reverse(
    Array array,
    int index,
    int length
)
public:
static void Reverse(
    Array^ array,
    int index,
    int length
)
static member Reverse :
        array:Array *
        index:int *
        length:int -> unit

参数

array
类型： System Array
要反转的一维 Array。
index
类型： System Int32
要反转的部分的起始索引。
length
类型： System Int32
要反转的部分中的元素数。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。
ArgumentOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。
ArgumentException | index 和 length 不指定 array 中的有效范围。

调用此方法之后，myArray[i]（其中 i 为数组中的任意一个索引）处的元素移到 myArray[j]（其中 j 等于 (myArray.Length + myArray.GetLowerBound(0)) - (i - myArray.GetLowerBound(0)) - 1）。

此方法的运算复杂度为 O(n)，其中 n 是 length。

下面的代码示例显示如何反转 Array 中某部分元素的值序。

Imports System
Imports Microsoft.VisualBasic

Public Class SamplesArray

    Public Shared Sub Main()

        ' Creates and initializes a new Array.
        Dim myArray As Array = Array.CreateInstance(GetType(String), 9)
        myArray.SetValue("The", 0)
        myArray.SetValue("QUICK", 1)
        myArray.SetValue("BROWN", 2)
        myArray.SetValue("FOX", 3)
        myArray.SetValue("jumps", 4)
        myArray.SetValue("over", 5)
        myArray.SetValue("the", 6)
        myArray.SetValue("lazy", 7)
        myArray.SetValue("dog", 8)

        ' Displays the values of the Array.
        Console.WriteLine("The Array initially contains the " _
           + "following values:")
        PrintIndexAndValues(myArray)

        ' Reverses the sort of the values of the Array.
        Array.Reverse(myArray, 1, 3)

        ' Displays the values of the Array.
        Console.WriteLine("After reversing:")
        PrintIndexAndValues(myArray)
    End Sub

    Public Shared Sub PrintIndexAndValues(myArray As Array)
        Dim i As Integer
        For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
            Console.WriteLine(ControlChars.Tab + "[{0}]:" + ControlChars.Tab _
               + "{1}", i, myArray.GetValue(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The Array initially contains the following values:
'     [0]:    The
'     [1]:    QUICK
'     [2]:    BROWN
'     [3]:    FOX
'     [4]:    jumps
'     [5]:    over
'     [6]:    the
'     [7]:    lazy
'     [8]:    dog
' After reversing:
'     [0]:    The
'     [1]:    FOX
'     [2]:    BROWN
'     [3]:    QUICK
'     [4]:    jumps
'     [5]:    over
'     [6]:    the
'     [7]:    lazy
'     [8]:    dog

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array.
      Array myArray=Array.CreateInstance( typeof(String), 9 );
      myArray.SetValue( "The", 0 );
      myArray.SetValue( "QUICK", 1 );
      myArray.SetValue( "BROWN", 2 );
      myArray.SetValue( "FOX", 3 );
      myArray.SetValue( "jumps", 4 );
      myArray.SetValue( "over", 5 );
      myArray.SetValue( "the", 6 );
      myArray.SetValue( "lazy", 7 );
      myArray.SetValue( "dog", 8 );

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintIndexAndValues( myArray );

      // Reverses the sort of the values of the Array.
      Array.Reverse( myArray, 1, 3 );

      // Displays the values of the Array.
      Console.WriteLine( "After reversing:" );
      PrintIndexAndValues( myArray );
   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The Array initially contains the following values:
    [0]:    The
    [1]:    QUICK
    [2]:    BROWN
    [3]:    FOX
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
After reversing:
    [0]:    The
    [1]:    FOX
    [2]:    BROWN
    [3]:    QUICK
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
*/

using namespace System;
void PrintIndexAndValues( Array^ myArray );
void main()
{
   // Creates and initializes a new Array instance.
   Array^ myArray = Array::CreateInstance( String::typeid, 9 );
   myArray->SetValue( "The", 0 );
   myArray->SetValue( "QUICK", 1 );
   myArray->SetValue( "BROWN", 2 );
   myArray->SetValue( "FOX", 3 );
   myArray->SetValue( "jumped", 4 );
   myArray->SetValue( "over", 5 );
   myArray->SetValue( "the", 6 );
   myArray->SetValue( "lazy", 7 );
   myArray->SetValue( "dog", 8 );

   // Displays the values of the Array.
   Console::WriteLine(  "The Array instance initially contains the following values:" );
   PrintIndexAndValues( myArray );

   // Reverses the sort of the values of the Array.
   Array::Reverse( myArray, 1, 3 );

   // Displays the values of the Array.
   Console::WriteLine(  "After reversing:" );
   PrintIndexAndValues( myArray );
}

void PrintIndexAndValues( Array^ myArray )
{
   for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
      Console::WriteLine(  "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}

/*
 This code produces the following output.

 The Array instance initially contains the following values:
     [0]:    The
     [1]:    QUICK
     [2]:    BROWN
     [3]:    FOX
     [4]:    jumped
     [5]:    over
     [6]:    the
     [7]:    lazy
     [8]:    dog
 After reversing:
     [0]:    The
     [1]:    FOX
     [2]:    BROWN
     [3]:    QUICK
     [4]:    jumped
     [5]:    over
     [6]:    the
     [7]:    lazy
     [8]:    dog
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Reverse 重载
System 命名空间


Array ..::.SetValue 方法

Array
.
.
::
.
SetValue 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

将当前 Array 中的指定元素设置为指定值。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.SetValue 方法 (Object, Int32)

Array
.
.
::
.
SetValue 方法 (Object, Int32)
Array 类

将某值设置给一维 Array 中指定位置的元素。索引指定为 32 位整数。 将某值设置给一维 Array 中指定位置的元素。索引指定为 32 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetValue ( _
    value As Object, _
    index As Integer _
)
public void SetValue(
    Object value,
    int index
)
public:
void SetValue(
    Object^ value,
    int index
)
member SetValue :
        value:Object *
        index:int -> unit

参数

value
类型： System Object
指定元素的新值。
index
类型： System Int32
一个 32 位整数，它表示要设置的 Array 元素的位置。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有一维。
InvalidCastException | value 不能强制转换为当前 Array 的元素类型。
IndexOutOfRangeException | index 超出当前 Array 的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定 index 的值是否超出界限。

有关转换的更多信息，请参见 Convert。

此方法是 O(1) 操作。

说明 说明

如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。 如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
SetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
GetValue


Array ..::.SetValue 方法 (Object, array<Int32 >[]()[])

Array
.
.
::
.
SetValue 方法 (Object,
array<
Int32
>
[]
()
[]
)
Array 类

将某值设置给多维 Array 中指定位置的元素。索引指定为一个 32 位整数数组。 将某值设置给多维 Array 中指定位置的元素。索引指定为一个 32 位整数数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetValue ( _
    value As Object, _
    ParamArray indices As Integer() _
)
public void SetValue(
    Object value,
    params int[] indices
)
public:
void SetValue(
    Object^ value,
    ... array<int>^ indices
)
member SetValue :
        value:Object *
        indices:int[] -> unit

参数

value
类型： System Object
指定元素的新值。
indices
类型：
array<
System Int32
>
[]
()
[]

32 位整数的一维数组，它表示用于指定要设置的元素的位置的索引。
异常 | 条件
ArgumentNullException | indices 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 当前 Array 中的维数不等于 indices 中的元素数。
InvalidCastException | value 不能强制转换为当前 Array 的元素类型。
IndexOutOfRangeException | indices 中的任何元素都超出当前 Array 的对应维度的有效索引的范围。

indices 中的元素数必须等于 Array 中的维数。indices 数组中的所有元素必须集体指定多维 Array 中所需元素的位置。 indices 中的元素数必须等于 Array 中的维数。indices 数组中的所有元素必须集体指定多维 Array 中所需元素的位置。

GetLowerBound 和 GetUpperBound 方法可确定 indices 数组中是否有任何值超出界限。

有关转换的更多信息，请参见 Convert。

此方法是 O(1) 操作。

说明 说明

如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。 如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
SetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
GetValue


Array ..::.SetValue 方法 (Object, Int64)

Array
.
.
::
.
SetValue 方法 (Object, Int64)
Array 类

将某值设置给一维 Array 中指定位置的元素。索引指定为 64 位整数。 将某值设置给一维 Array 中指定位置的元素。索引指定为 64 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Sub SetValue ( _
    value As Object, _
    index As Long _
)
[ComVisibleAttribute(false)]
public void SetValue(
    Object value,
    long index
)
[ComVisibleAttribute(false)]
public:
void SetValue(
    Object^ value,
    long long index
)
[<ComVisibleAttribute(false)>]
member SetValue :
        value:Object *
        index:int64 -> unit

参数

value
类型： System Object
指定元素的新值。
index
类型： System Int64
一个 64 位整数，它表示要设置的 Array 元素的位置。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有一维。
InvalidCastException | value 不能强制转换为当前 Array 的元素类型。
ArgumentOutOfRangeException | index 超出当前 Array 的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定 index 的值是否超出界限。

有关转换的更多信息，请参见 Convert。

此方法是 O(1) 操作。

说明 说明

如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。 如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
SetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
GetValue


Array ..::.SetValue 方法 (Object, array<Int64 >[]()[])

Array
.
.
::
.
SetValue 方法 (Object,
array<
Int64
>
[]
()
[]
)
Array 类

将某值设置给多维 Array 中指定位置的元素。索引指定为一个 64 位整数数组。 将某值设置给多维 Array 中指定位置的元素。索引指定为一个 64 位整数数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Sub SetValue ( _
    value As Object, _
    ParamArray indices As Long() _
)
[ComVisibleAttribute(false)]
public void SetValue(
    Object value,
    params long[] indices
)
[ComVisibleAttribute(false)]
public:
void SetValue(
    Object^ value,
    ... array<long long>^ indices
)
[<ComVisibleAttribute(false)>]
member SetValue :
        value:Object *
        indices:int64[] -> unit

参数

value
类型： System Object
指定元素的新值。
indices
类型：
array<
System Int64
>
[]
()
[]

64 位整数的一维数组，它表示用于指定要设置的元素的位置的索引。
异常 | 条件
ArgumentNullException | indices 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 当前 Array 中的维数不等于 indices 中的元素数。
InvalidCastException | value 不能强制转换为当前 Array 的元素类型。
ArgumentOutOfRangeException | indices 中的任何元素都超出当前 Array 的对应维度的有效索引的范围。

indices 中的元素数必须等于 Array 中的维数。indices 数组中的所有元素必须集体指定多维 Array 中所需元素的位置。 indices 中的元素数必须等于 Array 中的维数。indices 数组中的所有元素必须集体指定多维 Array 中所需元素的位置。

GetLowerBound 和 GetUpperBound 方法可确定 indices 数组中是否有任何值超出界限。

有关转换的更多信息，请参见 Convert。

此方法是 O(1) 操作。

说明 说明

如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。 如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
SetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
GetValue


Array ..::.SetValue 方法 (Object, Int32, Int32)

Array
.
.
::
.
SetValue 方法 (Object, Int32, Int32)
Array 类

将某值设置给二维 Array 中指定位置的元素。索引指定为 32 位整数。 将某值设置给二维 Array 中指定位置的元素。索引指定为 32 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetValue ( _
    value As Object, _
    index1 As Integer, _
    index2 As Integer _
)
public void SetValue(
    Object value,
    int index1,
    int index2
)
public:
void SetValue(
    Object^ value,
    int index1,
    int index2
)
member SetValue :
        value:Object *
        index1:int *
        index2:int -> unit

参数

value
类型： System Object
指定元素的新值。
index1
类型： System Int32
一个 32 位整数，它表示要设置的 Array 元素的第一维索引。
index2
类型： System Int32
一个 32 位整数，它表示要设置的 Array 元素的第二维索引。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有两维。
InvalidCastException | value 不能强制转换为当前 Array 的元素类型。
IndexOutOfRangeException | index1 或 index2 超出当前 Array 的对应维度的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

有关转换的更多信息，请参见 Convert。

此方法是 O(1) 操作。

说明 说明

如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。 如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
SetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
GetValue


Array ..::.SetValue 方法 (Object, Int64, Int64)

Array
.
.
::
.
SetValue 方法 (Object, Int64, Int64)
Array 类

将某值设置给二维 Array 中指定位置的元素。索引指定为 64 位整数。 将某值设置给二维 Array 中指定位置的元素。索引指定为 64 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Sub SetValue ( _
    value As Object, _
    index1 As Long, _
    index2 As Long _
)
[ComVisibleAttribute(false)]
public void SetValue(
    Object value,
    long index1,
    long index2
)
[ComVisibleAttribute(false)]
public:
void SetValue(
    Object^ value,
    long long index1,
    long long index2
)
[<ComVisibleAttribute(false)>]
member SetValue :
        value:Object *
        index1:int64 *
        index2:int64 -> unit

参数

value
类型： System Object
指定元素的新值。
index1
类型： System Int64
一个 64 位整数，它表示要设置的 Array 元素的第一维索引。
index2
类型： System Int64
一个 64 位整数，它表示要设置的 Array 元素的第二维索引。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有两维。
InvalidCastException | value 不能强制转换为当前 Array 的元素类型。
ArgumentOutOfRangeException | index1 或 index2 超出当前 Array 的对应维度的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

有关转换的更多信息，请参见 Convert。

此方法是 O(1) 操作。

说明 说明

如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。 如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
SetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
GetValue


Array ..::.SetValue 方法 (Object, Int32, Int32, Int32)

Array
.
.
::
.
SetValue 方法 (Object, Int32, Int32, Int32)
Array 类

将某值设置给三维 Array 中指定位置的元素。索引指定为 32 位整数。 将某值设置给三维 Array 中指定位置的元素。索引指定为 32 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetValue ( _
    value As Object, _
    index1 As Integer, _
    index2 As Integer, _
    index3 As Integer _
)
public void SetValue(
    Object value,
    int index1,
    int index2,
    int index3
)
public:
void SetValue(
    Object^ value,
    int index1,
    int index2,
    int index3
)
member SetValue :
        value:Object *
        index1:int *
        index2:int *
        index3:int -> unit

参数

value
类型： System Object
指定元素的新值。
index1
类型： System Int32
一个 32 位整数，它表示要设置的 Array 元素的第一维索引。
index2
类型： System Int32
一个 32 位整数，它表示要设置的 Array 元素的第二维索引。
index3
类型： System Int32
一个 32 位整数，它表示要设置的 Array 元素的第三维索引。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有三维。
InvalidCastException | value 不能强制转换为当前 Array 的元素类型。
IndexOutOfRangeException | index1 或 index2 或 index3 超出当前 Array 的对应维度的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

有关转换的更多信息，请参见 Convert。

此方法是 O(1) 操作。

说明 说明

如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。 如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
SetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
GetValue


Array ..::.SetValue 方法 (Object, Int64, Int64, Int64)

Array
.
.
::
.
SetValue 方法 (Object, Int64, Int64, Int64)
Array 类

将某值设置给三维 Array 中指定位置的元素。索引指定为 64 位整数。 将某值设置给三维 Array 中指定位置的元素。索引指定为 64 位整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Sub SetValue ( _
    value As Object, _
    index1 As Long, _
    index2 As Long, _
    index3 As Long _
)
[ComVisibleAttribute(false)]
public void SetValue(
    Object value,
    long index1,
    long index2,
    long index3
)
[ComVisibleAttribute(false)]
public:
void SetValue(
    Object^ value,
    long long index1,
    long long index2,
    long long index3
)
[<ComVisibleAttribute(false)>]
member SetValue :
        value:Object *
        index1:int64 *
        index2:int64 *
        index3:int64 -> unit

参数

value
类型： System Object
指定元素的新值。
index1
类型： System Int64
一个 64 位整数，它表示要设置的 Array 元素的第一维索引。
index2
类型： System Int64
一个 64 位整数，它表示要设置的 Array 元素的第二维索引。
index3
类型： System Int64
一个 64 位整数，它表示要设置的 Array 元素的第三维索引。
异常 | 条件
ArgumentException | 当前的 Array 不是正好有三维。
InvalidCastException | value 不能强制转换为当前 Array 的元素类型。
ArgumentOutOfRangeException | index1 或 index2 或 index3 超出当前 Array 的对应维度的有效索引的范围。

GetLowerBound 和 GetUpperBound 方法可以确定任何索引是否超出界限。

有关转换的更多信息，请参见 Convert。

此方法是 O(1) 操作。

说明 说明

如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。 如果使用 SetValue 给值类型数组的元素赋值 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该元素的所有字段都初始化为零。元素的值不是 null 引用，因此无法通过搜索 null 引用找到。

下面的代码示例阐释了如何设置和获取一维或多维数组中的特定值。

Imports System

Public Class SamplesArray

   Public Shared Sub Main()

      ' Creates and initializes a one-dimensional array.
      Dim myArr1(4) As [String]

      ' Sets the element at index 3.
      myArr1.SetValue("three", 3)
      Console.WriteLine("[3]:   {0}", myArr1.GetValue(3))

      ' Creates and initializes a two-dimensional array.
      Dim myArr2(5, 5) As [String]

      ' Sets the element at index 1,3.
      myArr2.SetValue("one-three", 1, 3)
      Console.WriteLine("[1,3]:   {0}", myArr2.GetValue(1, 3))

      ' Creates and initializes a three-dimensional array.
      Dim myArr3(5, 5, 5) As [String]

      ' Sets the element at index 1,2,3.
      myArr3.SetValue("one-two-three", 1, 2, 3)
      Console.WriteLine("[1,2,3]:   {0}", myArr3.GetValue(1, 2, 3))

      ' Creates and initializes a seven-dimensional array.
      Dim myArr7(5, 5, 5, 5, 5, 5, 5) As [String]

      ' Sets the element at index 1,2,3,0,1,2,3.
      Dim myIndices() As Integer = {1, 2, 3, 0, 1, 2, 3}
      myArr7.SetValue("one-two-three-zero-one-two-three", myIndices)
      Console.WriteLine("[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue(myIndices))

   End Sub 'Main

End Class 'SamplesArray

'This code produces the following output.
'
'[3]:   three
'[1,3]:   one-three
'[1,2,3]:   one-two-three
'[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

using System;

public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a one-dimensional array.
      String[] myArr1 = new String[5];

      // Sets the element at index 3.
      myArr1.SetValue( "three", 3 );
      Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );

      // Creates and initializes a two-dimensional array.
      String[,] myArr2 = new String[5,5];

      // Sets the element at index 1,3.
      myArr2.SetValue( "one-three", 1, 3 );
      Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );

      // Creates and initializes a three-dimensional array.
      String[,,] myArr3 = new String[5,5,5];

      // Sets the element at index 1,2,3.
      myArr3.SetValue( "one-two-three", 1, 2, 3 );
      Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );

      // Creates and initializes a seven-dimensional array.
      String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

      // Sets the element at index 1,2,3,0,1,2,3.
      int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
      myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
      Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );

   }

}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

using namespace System;
int main()
{

   // Creates and initializes a one-dimensional array.
   array<String^>^myArr1 = gcnew array<String^>(5);

   // Sets the element at index 3.
   myArr1->SetValue( "three", 3 );
   Console::WriteLine( "[3]:   {0}", myArr1->GetValue( 3 ) );

   // Creates and initializes a two-dimensional array.
   array<String^, 2>^myArr2 = gcnew array<String^,2>(5,5);

   // Sets the element at index 1,3.
   myArr2->SetValue( "one-three", 1, 3 );
   Console::WriteLine( "[1,3]:   {0}", myArr2->GetValue( 1, 3 ) );

   // Creates and initializes a three-dimensional array.
   array<String^, 3>^myArr3 = gcnew array<String^,3>(5,5,5);

   // Sets the element at index 1,2,3.
   myArr3->SetValue( "one-two-three", 1, 2, 3 );
   Console::WriteLine( "[1,2,3]:   {0}", myArr3->GetValue( 1, 2, 3 ) );

   // Creates and initializes a seven-dimensional array.
   array<String^, 7>^myArr7 = gcnew array<String^,7>(5,5,5,5,5,5,5);

   // Sets the element at index 1,2,3,0,1,2,3.
   array<Int32>^myIndices = {1,2,3,0,1,2,3};
   myArr7->SetValue( "one-two-three-zero-one-two-three", myIndices );
   Console::WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7->GetValue( myIndices ) );
}

/*
This code produces the following output.

[3]:   three
[1,3]:   one-three
[1,2,3]:   one-two-three
[1,2,3,0,1,2,3]:   one-two-three-zero-one-two-three

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
SetValue 重载
System 命名空间
GetLowerBound
GetUpperBound
GetValue


Array ..::.Sort 方法

Array
.
.
::
.
Sort 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

对一维 Array 对象中的元素进行排序。

名称 说明
页首

参考

Array 类
Array 成员
System 命名空间


Array ..::.Sort <(Of <(T >)>) 方法 ( array<T >[]()[])

Array
.
.
::
.
Sort
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
)
Array 类

使用 Array 的每个元素的 IComparable<(Of <(T>)>) 泛型接口实现，对整个 Array 中的元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort(Of T) ( _
    array As T() _
)
public static void Sort<T>(
    T[] array
)

public:
generic<typename T>
static void Sort(
    array<T>^ array
)
static member Sort :
        array:'T[] -> unit

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要排序的从零开始的一维 Array。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | array 中的一个或多个元素未实现 IComparable<(Of <(T>)>) 泛型接口。

array 中的每个元素均必须实现 IComparable<(Of <(T>)>) 泛型接口，才能与 array 中的其他所有元素进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 array 的 Length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示 Sort<(Of <(T>)>)(array<T>[]()[]) 泛型方法重载和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载。以非特定的顺序创建一个字符串数组。 下面的代码示例演示 Sort<(Of <(T>)>)(array<T>[]()[]) 泛型方法重载和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载。以非特定的顺序创建一个字符串数组。

显示数组并进行排序，然后进行再次显示。

说明 说明

调用 Sort 和 BinarySearch 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 调用 Sort 和 BinarySearch 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。 然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。 然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。

Imports System
Imports System.Collections.Generic

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Pachycephalosaurus", _
            "Amargasaurus", _
            "Tyrannosaurus", _
            "Mamenchisaurus", _
            "Deinonychus", _
            "Edmontosaurus"  }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & "Sort")
        Array.Sort(dinosaurs)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Coelophysis':")
        Dim index As Integer = _
            Array.BinarySearch(dinosaurs, "Coelophysis")
        ShowWhere(dinosaurs, index)

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Tyrannosaurus':")
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus")
        ShowWhere(dinosaurs, index)

    End Sub

    Private Shared Sub ShowWhere(Of T) _
        (ByVal array() As T, ByVal index As Integer)

        If index < 0 Then
            ' If the index is negative, it represents the bitwise
            ' complement of the next larger element in the array.
            '
            index = index Xor -1

            Console.Write("Not found. Sorts between: ")

            If index = 0 Then
                Console.Write("beginning of array and ")
            Else
                Console.Write("{0} and ", array(index - 1))
            End If

            If index = array.Length Then
                Console.WriteLine("end of array.")
            Else
                Console.WriteLine("{0}.", array(index))
            End If
        Else
            Console.WriteLine("Found at index {0}.", index)
        End If

    End Sub

End Class

' This code example produces the following output:
'
'Pachycephalosaurus
'Amargasaurus
'Tyrannosaurus
'Mamenchisaurus
'Deinonychus
'Edmontosaurus
'
'Sort
'
'Amargasaurus
'Deinonychus
'Edmontosaurus
'Mamenchisaurus
'Pachycephalosaurus
'Tyrannosaurus
'
'BinarySearch for 'Coelophysis':
'Not found. Sorts between: Amargasaurus and Deinonychus.
'
'BinarySearch for 'Tyrannosaurus':
'Found at index 5.

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Tyrannosaurus",
                              "Mamenchisaurus",
                              "Deinonychus",
                              "Edmontosaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nSort");
        Array.Sort(dinosaurs);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis");
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus");
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Amargasaurus
Deinonychus
Edmontosaurus
Mamenchisaurus
Pachycephalosaurus
Tyrannosaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Amargasaurus and Deinonychus.

BinarySearch for 'Tyrannosaurus':
Found at index 5.
 */

using namespace System;
using namespace System::Collections::Generic;

generic<typename T> void ShowWhere(array<T>^ arr, int index)
{
    if (index<0)
    {
        // If the index is negative, it represents the bitwise
        // complement of the next larger element in the array.
        //
        index = ~index;

        Console::Write("Not found. Sorts between: ");

        if (index == 0)
            Console::Write("beginning of array and ");
        else
            Console::Write("{0} and ", arr[index-1]);

        if (index == arr->Length)
            Console::WriteLine("end of array.");
        else
            Console::WriteLine("{0}.", arr[index]);
    }
    else
    {
        Console::WriteLine("Found at index {0}.", index);
    }
};

void main()
{
    array<String^>^ dinosaurs = {"Pachycephalosaurus",
                                 "Amargasaurus",
                                 "Tyrannosaurus",
                                 "Mamenchisaurus",
                                 "Deinonychus",
                                 "Edmontosaurus"};

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nSort");
    Array::Sort(dinosaurs);

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nBinarySearch for 'Coelophysis':");
    int index = Array::BinarySearch(dinosaurs, "Coelophysis");
    ShowWhere(dinosaurs, index);

    Console::WriteLine("\nBinarySearch for 'Tyrannosaurus':");
    index = Array::BinarySearch(dinosaurs, "Tyrannosaurus");
    ShowWhere(dinosaurs, index);
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Amargasaurus
Deinonychus
Edmontosaurus
Mamenchisaurus
Pachycephalosaurus
Tyrannosaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Amargasaurus and Deinonychus.

BinarySearch for 'Tyrannosaurus':
Found at index 5.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparable T
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort 方法 (Array)

Array
.
.
::
.
Sort 方法 (Array)
Array 类

使用 Array 中每个元素的 IComparable 实现，对整个一维 Array 中的元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort ( _
    array As Array _
)
public static void Sort(
    Array array
)
public:
static void Sort(
    Array^ array
)
static member Sort :
        array:Array -> unit

参数

array
类型： System Array
要排序的一维 Array。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。
InvalidOperationException | array 中的一个或多个元素未实现 IComparable 接口。

array 中的每个元素均必须实现 IComparable 接口，才能与 array 中的其他所有元素进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 array 的 Length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例说明如何使用默认比较器和一个反转排序顺序的自定义比较器，对 Array 中的值进行排序。请注意，结果可能因当前 CultureInfo 而异。 下面的代码示例说明如何使用默认比较器和一个反转排序顺序的自定义比较器，对 Array 中的值进行排序。请注意，结果可能因当前 CultureInfo 而异。

Imports System
Imports System.Collections

Public Class SamplesArray

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Function Compare(x As Object, y As Object) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new Array and a new custom comparer.
      Dim myArr As [String]() =  {"The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog"}
      Dim myComparer = New myReverserClass()

      ' Displays the values of the Array.
      Console.WriteLine("The Array initially contains the following values:")
      PrintIndexAndValues(myArr)

      ' Sorts a section of the Array using the default comparer.
      Array.Sort(myArr, 1, 3)
      Console.WriteLine("After sorting a section of the Array using the default comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort(myArr, 1, 3, myComparer)
      Console.WriteLine("After sorting a section of the Array using the reverse case-insensitive comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts the entire Array using the default comparer.
      Array.Sort(myArr)
      Console.WriteLine("After sorting the entire Array using the default comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort(myArr, myComparer)
      Console.WriteLine("After sorting the entire Array using the reverse case-insensitive comparer:")
      PrintIndexAndValues(myArr)

   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myArr() As [String])

      Dim i As Integer
      For i = 0 To myArr.Length - 1
         Console.WriteLine("   [{0}] : {1}", i, myArr(i))
      Next i
      Console.WriteLine()

   End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The Array initially contains the following values:
'   [0] : The
'   [1] : QUICK
'   [2] : BROWN
'   [3] : FOX
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting a section of the Array using the default comparer:
'   [0] : The
'   [1] : BROWN
'   [2] : FOX
'   [3] : QUICK
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting a section of the Array using the reverse case-insensitive comparer:
'   [0] : The
'   [1] : QUICK
'   [2] : FOX
'   [3] : BROWN
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting the entire Array using the default comparer:
'   [0] : BROWN
'   [1] : dog
'   [2] : FOX
'   [3] : jumps
'   [4] : lazy
'   [5] : over
'   [6] : QUICK
'   [7] : the
'   [8] : The
'
'After sorting the entire Array using the reverse case-insensitive comparer:
'   [0] : the
'   [1] : The
'   [2] : QUICK
'   [3] : over
'   [4] : lazy
'   [5] : jumps
'   [6] : FOX
'   [7] : dog
'   [8] : BROWN

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myArr = { "The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintIndexAndValues( myArr );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myArr, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myArr, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myArr );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myArr, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myArr );

   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }
}

/*
This code produces the following output.

The Array initially contains the following values:
   [0] : The
   [1] : QUICK
   [2] : BROWN
   [3] : FOX
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the reverse case-insensitive comparer:
   [0] : The
   [1] : QUICK
   [2] : FOX
   [3] : BROWN
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting the entire Array using the default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

After sorting the entire Array using the reverse case-insensitive comparer:
   [0] : the
   [1] : The
   [2] : QUICK
   [3] : over
   [4] : lazy
   [5] : jumps
   [6] : FOX
   [7] : dog
   [8] : BROWN

*/

using namespace System;
using namespace System::Collections;
public ref class myReverserClass: public IComparer
{
private:
   // Calls CaseInsensitiveComparer::Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }

};

void PrintIndexAndValues( array<String^>^myArr )
{
   for ( int i = 0; i < myArr->Length; i++ )
   {
      Console::WriteLine( "   [{0}] : {1}", i, myArr[ i ] );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new Array and a new custom comparer.
   array<String^>^myArr = {"The","QUICK","BROWN","FOX","jumps","over","the","lazy","dog"};
   IComparer^ myComparer = gcnew myReverserClass;

   // Displays the values of the Array.
   Console::WriteLine( "The Array initially contains the following values:" );
   PrintIndexAndValues( myArr );

   // Sorts a section of the Array using the default comparer.
   Array::Sort( myArr, 1, 3 );
   Console::WriteLine( "After sorting a section of the Array using the default comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts a section of the Array using the reverse case-insensitive comparer.
   Array::Sort( myArr, 1, 3, myComparer );
   Console::WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts the entire Array using the default comparer.
   Array::Sort( myArr );
   Console::WriteLine( "After sorting the entire Array using the default comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts the entire Array using the reverse case-insensitive comparer.
   Array::Sort( myArr, myComparer );
   Console::WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myArr );
}

/*
This code produces the following output.

The Array initially contains the following values:
   [0] : The
   [1] : QUICK
   [2] : BROWN
   [3] : FOX
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the reverse case-insensitive comparer:
   [0] : The
   [1] : QUICK
   [2] : FOX
   [3] : BROWN
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting the entire Array using the default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

After sorting the entire Array using the reverse case-insensitive comparer:
   [0] : the
   [1] : The
   [2] : QUICK
   [3] : over
   [4] : lazy
   [5] : jumps
   [6] : FOX
   [7] : dog
   [8] : BROWN

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparable
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort <(Of <(T >)>) 方法 ( array<T >[]()[], IComparer <(Of <(T >)>))

Array
.
.
::
.
Sort
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, IComparer
<
(Of
<
(
T
>
)
>
)
)
Array 类

使用指定的 IComparer<(Of <(T>)>) 泛型接口，对 Array 中的元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort(Of T) ( _
    array As T(), _
    comparer As IComparer(Of T) _
)
public static void Sort<T>(
    T[] array,
    IComparer<T> comparer
)

public:
generic<typename T>
static void Sort(
    array<T>^ array,
    IComparer<T>^ comparer
)
static member Sort :
        array:'T[] *
        comparer:IComparer<'T> -> unit

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要排序的从零开始的一维 Array
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
T
>
)
>
)

比较元素时使用的 IComparer<(Of <(T>)>) 泛型接口实现；如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable<(Of <(T>)>) 泛型接口实现。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 array 中的一个或多个元素未实现 IComparable<(Of <(T>)>) 泛型接口。
ArgumentException | comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。 comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。

如果 comparer 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 array 中的每个元素均必须实现 IComparable<(Of <(T>)>) 泛型接口，才能与 array 中的其他所有元素进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 array 的 Length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 泛型方法重载和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法重载。

该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。 该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。

显示数组并进行排序，然后进行再次显示。在使用 BinarySearch 方法之前，必须对数组进行排序。 显示数组并进行排序，然后进行再次显示。在使用 BinarySearch 方法之前，必须对数组进行排序。

说明 说明

调用 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 调用 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。 然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。 然后使用 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法重载搜索两个字符串，一个不在数组中，而另一个在数组中。将数组和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 方法的返回值传递给 ShowWhere 泛型方法，该方法在找到字符串时显示索引值；否则显示搜索字符串将介于其间的元素（假设字符串在数组中）。如果字符串不在数组中，则索引为负，因此 ShowWhere 方法会采用按位求补（在 C# 和 Visual C++ 中使用 ~ 运算符，在 Visual Basic 中使用 Xor -1），以获得列表中大于搜索字符串的第一个元素的索引。

Imports System
Imports System.Collections.Generic

Public Class ReverseComparer
    Implements IComparer(Of String)

    Public Function Compare(ByVal x As String, _
        ByVal y As String) As Integer _
        Implements IComparer(Of String).Compare

        ' Compare y and x in reverse order.
        Return y.CompareTo(x)

    End Function
End Class

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Pachycephalosaurus", _
            "Amargasaurus", _
            "Tyrannosaurus", _
            "Mamenchisaurus", _
            "Deinonychus", _
            "Edmontosaurus"  }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Dim rc As New ReverseComparer()

        Console.WriteLine(vbLf & "Sort")
        Array.Sort(dinosaurs, rc)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Coelophysis':")
        Dim index As Integer = _
            Array.BinarySearch(dinosaurs, "Coelophysis", rc)
        ShowWhere(dinosaurs, index)

        Console.WriteLine(vbLf & _
            "BinarySearch for 'Tyrannosaurus':")
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus", rc)
        ShowWhere(dinosaurs, index)

    End Sub

    Private Shared Sub ShowWhere(Of T) _
        (ByVal array() As T, ByVal index As Integer)

        If index < 0 Then
            ' If the index is negative, it represents the bitwise
            ' complement of the next larger element in the array.
            '
            index = index Xor -1

            Console.Write("Not found. Sorts between: ")

            If index = 0 Then
                Console.Write("beginning of array and ")
            Else
                Console.Write("{0} and ", array(index - 1))
            End If

            If index = array.Length Then
                Console.WriteLine("end of array.")
            Else
                Console.WriteLine("{0}.", array(index))
            End If
        Else
            Console.WriteLine("Found at index {0}.", index)
        End If

    End Sub

End Class

' This code example produces the following output:
'
'Pachycephalosaurus
'Amargasaurus
'Tyrannosaurus
'Mamenchisaurus
'Deinonychus
'Edmontosaurus
'
'Sort
'
'Tyrannosaurus
'Pachycephalosaurus
'Mamenchisaurus
'Edmontosaurus
'Deinonychus
'Amargasaurus
'
'BinarySearch for 'Coelophysis':
'Not found. Sorts between: Deinonychus and Amargasaurus.
'
'BinarySearch for 'Tyrannosaurus':
'Found at index 0.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Tyrannosaurus",
                              "Mamenchisaurus",
                              "Deinonychus",
                              "Edmontosaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort");
        Array.Sort(dinosaurs, rc);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis", rc);
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus", rc);
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Tyrannosaurus
Pachycephalosaurus
Mamenchisaurus
Edmontosaurus
Deinonychus
Amargasaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Deinonychus and Amargasaurus.

BinarySearch for 'Tyrannosaurus':
Found at index 0.
 */

using namespace System;
using namespace System::Collections::Generic;

public ref class ReverseComparer: IComparer<String^>
{
public:
    virtual int Compare(String^ x, String^ y)
    {
        // Compare y and x in reverse order.
        return y->CompareTo(x);
    }
};

generic<typename T> void ShowWhere(array<T>^ arr, int index)
{
    if (index<0)
    {
        // If the index is negative, it represents the bitwise
        // complement of the next larger element in the array.
        //
        index = ~index;

        Console::Write("Not found. Sorts between: ");

        if (index == 0)
            Console::Write("beginning of array and ");
        else
            Console::Write("{0} and ", arr[index-1]);

        if (index == arr->Length)
            Console::WriteLine("end of array.");
        else
            Console::WriteLine("{0}.", arr[index]);
    }
    else
    {
        Console::WriteLine("Found at index {0}.", index);
    }
};

void main()
{
    array<String^>^ dinosaurs = {"Pachycephalosaurus",
                                 "Amargasaurus",
                                 "Tyrannosaurus",
                                 "Mamenchisaurus",
                                 "Deinonychus",
                                 "Edmontosaurus"};

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    ReverseComparer^ rc = gcnew ReverseComparer();

    Console::WriteLine("\nSort");
    Array::Sort(dinosaurs, rc);

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nBinarySearch for 'Coelophysis':");
    int index = Array::BinarySearch(dinosaurs, "Coelophysis", rc);
    ShowWhere(dinosaurs, index);

    Console::WriteLine("\nBinarySearch for 'Tyrannosaurus':");
    index = Array::BinarySearch(dinosaurs, "Tyrannosaurus", rc);
    ShowWhere(dinosaurs, index);
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Tyrannosaurus
Pachycephalosaurus
Mamenchisaurus
Edmontosaurus
Deinonychus
Amargasaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Deinonychus and Amargasaurus.

BinarySearch for 'Tyrannosaurus':
Found at index 0.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparer T
IComparable T
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort <(Of <(T >)>) 方法 ( array<T >[]()[], Comparison <(Of <(T >)>))

Array
.
.
::
.
Sort
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Comparison
<
(Of
<
(
T
>
)
>
)
)
Array 类

使用指定的 Comparison<(Of <(T>)>) 对 Array 中的元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort(Of T) ( _
    array As T(), _
    comparison As Comparison(Of T) _
)
public static void Sort<T>(
    T[] array,
    Comparison<T> comparison
)

public:
generic<typename T>
static void Sort(
    array<T>^ array,
    Comparison<T>^ comparison
)
static member Sort :
        array:'T[] *
        comparison:Comparison<'T> -> unit

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要排序的从零开始的一维 Array。
comparison
类型： System Comparison
<
(Of
<
(
T
>
)
>
)

比较元素时要使用的 Comparison<(Of <(T>)>)。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - comparison 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | comparison 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparison 可能不返回 0。 comparison 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparison 可能不返回 0。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 array 的 Length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示 Sort(Comparison<(Of <(T>)>)) 方法重载。

代码示例定义了一个名为 CompareDinosByLength 的字符串的替换比较方法。此方法按如下方式工作：首先测试要进行比较的字符串是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），空引用被视为小于非空引用。然后，比较字符串的长度，长度越大，则字符串越大。最后，如果长度相等，则执行常规字符串比较。 代码示例定义了一个名为 CompareDinosByLength 的字符串的替换比较方法。此方法按如下方式工作：首先测试要进行比较的字符串是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），空引用被视为小于非空引用。然后，比较字符串的长度，长度越大，则字符串越大。最后，如果长度相等，则执行常规字符串比较。 代码示例定义了一个名为 CompareDinosByLength 的字符串的替换比较方法。此方法按如下方式工作：首先测试要进行比较的字符串是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），空引用被视为小于非空引用。然后，比较字符串的长度，长度越大，则字符串越大。最后，如果长度相等，则执行常规字符串比较。 代码示例定义了一个名为 CompareDinosByLength 的字符串的替换比较方法。此方法按如下方式工作：首先测试要进行比较的字符串是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），空引用被视为小于非空引用。然后，比较字符串的长度，长度越大，则字符串越大。最后，如果长度相等，则执行常规字符串比较。

创建一个字符串数组，并使用四个字符串、以非特定的顺序填充该数组。该列表还包含一个空字符串和一个 null 引用。显示该列表，使用表示 CompareDinosByLength 方法的 Comparison<(Of <(T>)>) 泛型委托对列表进行排序，然后再次显示列表。 创建一个字符串数组，并使用四个字符串、以非特定的顺序填充该数组。该列表还包含一个空字符串和一个 null 引用。显示该列表，使用表示 CompareDinosByLength 方法的 Comparison<(Of <(T>)>) 泛型委托对列表进行排序，然后再次显示列表。 创建一个字符串数组，并使用四个字符串、以非特定的顺序填充该数组。该列表还包含一个空字符串和一个 null 引用。显示该列表，使用表示 CompareDinosByLength 方法的 Comparison<(Of <(T>)>) 泛型委托对列表进行排序，然后再次显示列表。

Imports System
Imports System.Collections.Generic

Public Class Example

    Private Shared Function CompareDinosByLength( _
        ByVal x As String, ByVal y As String) As Integer

        If x Is Nothing Then
            If y Is Nothing Then
                ' If x is Nothing and y is Nothing, they're
                ' equal.
                Return 0
            Else
                ' If x is Nothing and y is not Nothing, y
                ' is greater.
                Return -1
            End If
        Else
            ' If x is not Nothing...
            '
            If y Is Nothing Then
                ' ...and y is Nothing, x is greater.
                Return 1
            Else
                ' ...and y is not Nothing, compare the
                ' lengths of the two strings.
                '
                Dim retval As Integer = _
                    x.Length.CompareTo(y.Length)

                If retval <> 0 Then
                    ' If the strings are not of equal length,
                    ' the longer string is greater.
                    '
                    Return retval
                Else
                    ' If the strings are of equal length,
                    ' sort them with ordinary string comparison.
                    '
                    Return x.CompareTo(y)
                End If
            End If
        End If

    End Function

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Pachycephalosaurus", _
            "Amargasaurus", _
            "", _
            Nothing, _
            "Mamenchisaurus", _
            "Deinonychus" }
        Display(dinosaurs)

        Console.WriteLine(vbLf & "Sort with generic Comparison(Of String) delegate:")
        Array.Sort(dinosaurs, AddressOf CompareDinosByLength)
        Display(dinosaurs)

    End Sub

    Private Shared Sub Display(ByVal arr() As String)
        Console.WriteLine()
        For Each s As String In arr
            If s Is Nothing Then
                Console.WriteLine("(Nothing)")
            Else
                Console.WriteLine("""{0}""", s)
            End If
        Next
    End Sub
End Class

' This code example produces the following output:
'
'"Pachycephalosaurus"
'"Amargasaurus"
'""
'(Nothing)
'"Mamenchisaurus"
'"Deinonychus"
'
'Sort with generic Comparison(Of String) delegate:
'
'(Nothing)
'""
'"Deinonychus"
'"Amargasaurus"
'"Mamenchisaurus"
'"Pachycephalosaurus"

using System;
using System.Collections.Generic;

public class Example
{
    private static int CompareDinosByLength(string x, string y)
    {
        if (x == null)
        {
            if (y == null)
            {
                // If x is null and y is null, they're
                // equal.
                return 0;
            }
            else
            {
                // If x is null and y is not null, y
                // is greater.
                return -1;
            }
        }
        else
        {
            // If x is not null...
            //
            if (y == null)
                // ...and y is null, x is greater.
            {
                return 1;
            }
            else
            {
                // ...and y is not null, compare the
                // lengths of the two strings.
                //
                int retval = x.Length.CompareTo(y.Length);

                if (retval != 0)
                {
                    // If the strings are not of equal length,
                    // the longer string is greater.
                    //
                    return retval;
                }
                else
                {
                    // If the strings are of equal length,
                    // sort them with ordinary string comparison.
                    //
                    return x.CompareTo(y);
                }
            }
        }
    }

    public static void Main()
    {
        string[] dinosaurs = {
            "Pachycephalosaurus",
            "Amargasaurus",
            "",
            null,
            "Mamenchisaurus",
            "Deinonychus" };
        Display(dinosaurs);

        Console.WriteLine("\nSort with generic Comparison<string> delegate:");
        Array.Sort(dinosaurs, CompareDinosByLength);
        Display(dinosaurs);

    }

    private static void Display(string[] arr)
    {
        Console.WriteLine();
        foreach( string s in arr )
        {
            if (s == null)
                Console.WriteLine("(null)");
            else
                Console.WriteLine("\"{0}\"", s);
        }
    }
}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<string> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */

using namespace System;
using namespace System::Collections::Generic;

int CompareDinosByLength(String^ x, String^ y)
{
    if (x == nullptr)
    {
        if (y == nullptr)
        {
            // If x is null and y is null, they're
            // equal.
            return 0;
        }
        else
        {
            // If x is null and y is not null, y
            // is greater.
            return -1;
        }
    }
    else
    {
        // If x is not null...
        //
        if (y == nullptr)
            // ...and y is null, x is greater.
        {
            return 1;
        }
        else
        {
            // ...and y is not null, compare the
            // lengths of the two strings.
            //
            int retval = x->Length.CompareTo(y->Length);

            if (retval != 0)
            {
                // If the strings are not of equal length,
                // the longer string is greater.
                //
                return retval;
            }
            else
            {
                // If the strings are of equal length,
                // sort them with ordinary string comparison.
                //
                return x->CompareTo(y);
            }
        }
    }
};

void Display(array<String^>^ arr)
{
    Console::WriteLine();
    for each(String^ s in arr)
    {
        if (s == nullptr)
            Console::WriteLine("(null)");
        else
            Console::WriteLine("\"{0}\"", s);
    }
};

void main()
{
    array<String^>^ dinosaurs = {
        "Pachycephalosaurus",
        "Amargasaurus",
        "",
        nullptr,
        "Mamenchisaurus",
        "Deinonychus" };
    Display(dinosaurs);

    Console::WriteLine("\nSort with generic Comparison<String^> delegate:");
    Array::Sort(dinosaurs,
        gcnew Comparison<String^>(CompareDinosByLength));
    Display(dinosaurs);

}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<String^> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
Comparison T
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort <(Of <(TKey, TValue >)>) 方法 ( array<TKey >[]()[], array<TValue >[]()[])

Array
.
.
::
.
Sort
<
(Of
<
(
TKey, TValue
>
)
>
)
方法 (
array<
TKey
>
[]
()
[]
,
array<
TValue
>
[]
()
[]
)
Array 类

基于第一个 Array 中的关键字，使用每个关键字的 IComparable<(Of <(T>)>) 泛型接口实现，对两个 Array 对象（一个包含关键字，另一个包含对应的项）进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort(Of TKey, TValue) ( _
    keys As TKey(), _
    items As TValue() _
)
public static void Sort<TKey, TValue>(
    TKey[] keys,
    TValue[] items
)

public:
generic<typename TKey, typename TValue>
static void Sort(
    array<TKey>^ keys,
    array<TValue>^ items
)
static member Sort :
        keys:'TKey[] *
        items:'TValue[] -> unit

类型参数

TKey

关键字数组元素的类型。

TValue

项数组元素的类型。

参数

keys
类型：
array<
TKey
>
[]
()
[]

从零开始的一维 Array，它包含要排序的关键字。
items
类型：
array<
TValue
>
[]
()
[]

从零开始的一维 Array，其中包含与 keys 中的关键字对应的项；如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只对 keys 进行排序。
异常 | 条件
ArgumentNullException | keys 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 keys 的下限与 items 的下限不匹配。 - 或 - items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keys 的长度与 items 的长度不匹配。
InvalidOperationException | keysArray 中的一个或多个元素未实现 IComparable<(Of <(T>)>) 泛型接口。

keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。

keysArray 中的每个关键字均必须实现 IComparable<(Of <(T>)>) 泛型接口，才能与其他任何关键字进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 array 的 Length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[])、Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>))、Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32) 和 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载，这些重载用于对表示关键字和值的数组对进行排序。

该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。 该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。

该代码示例创建并显示一个恐龙名称（关键字）数组和一个表示每种恐龙最大长度（以米为单位）的整数（值）数组。然后对数组进行多次排序和显示： 该代码示例创建并显示一个恐龙名称（关键字）数组和一个表示每种恐龙最大长度（以米为单位）的整数（值）数组。然后对数组进行多次排序和显示：

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[]) 重载按第一个数组中的恐龙名称顺序对两个数组进行排序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 重载和 ReverseCompare 的一个实例反转数组对的排序顺序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32) 重载对两个数组中的最后三个元素进行排序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 重载以相反的顺序对两个数组中的最后三个元素进行排序。

说明 说明

对泛型方法的调用与对其对应的非泛型方法的调用没什么分别，因为 Visual Basic、C# 和 C++ 都是从前两个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 对泛型方法的调用与对其对应的非泛型方法的调用没什么分别，因为 Visual Basic、C# 和 C++ 都是从前两个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

Imports System
Imports System.Collections.Generic

Public Class ReverseComparer
    Implements IComparer(Of String)

    Public Function Compare(ByVal x As String, _
        ByVal y As String) As Integer _
        Implements IComparer(Of String).Compare

        ' Compare y and x in reverse order.
        Return y.CompareTo(x)

    End Function
End Class

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Seismosaurus", _
            "Chasmosaurus", _
            "Coelophysis", _
            "Mamenchisaurus", _
            "Caudipteryx", _
            "Cetiosaurus"  }

        Dim dinosaurSizes() As Integer = { 40, 5, 3, 22, 1, 18 }

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes)")
        Array.Sort(dinosaurs, dinosaurSizes)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Dim rc As New ReverseComparer()

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, rc)")
        Array.Sort(dinosaurs, dinosaurSizes, rc)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, 3, 3)")
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, 3, 3, rc)")
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

    End Sub

End Class

' This code example produces the following output:
'
'Seismosaurus: up to 40 meters long.
'Chasmosaurus: up to 5 meters long.
'Coelophysis: up to 3 meters long.
'Mamenchisaurus: up to 22 meters long.
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'
'Sort(dinosaurs, dinosaurSizes)
'
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'Chasmosaurus: up to 5 meters long.
'Coelophysis: up to 3 meters long.
'Mamenchisaurus: up to 22 meters long.
'Seismosaurus: up to 40 meters long.
'
'Sort(dinosaurs, dinosaurSizes, rc)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Chasmosaurus: up to 5 meters long.
'Cetiosaurus: up to 18 meters long.
'Caudipteryx: up to 1 meters long.
'
'Sort(dinosaurs, dinosaurSizes, 3, 3)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'Chasmosaurus: up to 5 meters long.
'
'Sort(dinosaurs, dinosaurSizes, 3, 3, rc)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Chasmosaurus: up to 5 meters long.
'Cetiosaurus: up to 18 meters long.
'Caudipteryx: up to 1 meters long.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

using namespace System;
using namespace System::Collections::Generic;

public ref class ReverseComparer: IComparer<String^>
{
public:
    virtual int Compare(String^ x, String^ y)
    {
        // Compare y and x in reverse order.
        return y->CompareTo(x);
    }
};

void main()
{
    array<String^>^ dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

    array<int>^ dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes)");
    Array::Sort(dinosaurs, dinosaurSizes);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    ReverseComparer^ rc = gcnew ReverseComparer();

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
    Array::Sort(dinosaurs, dinosaurSizes, rc);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
    Array::Sort(dinosaurs, dinosaurSizes, 3, 3);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
    Array::Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparable T
BinarySearch
System.Collections.Generic IDictionary TKey, TValue

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort 方法 (Array, Array)

Array
.
.
::
.
Sort 方法 (Array, Array)
Array 类

基于第一个 Array 中的关键字，使用每个关键字的 IComparable 实现，对两个一维 Array 对象（一个包含关键字，另一个包含对应的项）进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort ( _
    keys As Array, _
    items As Array _
)
public static void Sort(
    Array keys,
    Array items
)
public:
static void Sort(
    Array^ keys,
    Array^ items
)
static member Sort :
        keys:Array *
        items:Array -> unit

参数

keys
类型： System Array
一维 Array，它包含要排序的关键字。
items
类型： System Array
一维 Array，它包含与 keysArray 中的每一个关键字对应的项。
- 或 -
如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只对 keysArray 进行排序。
异常 | 条件
ArgumentNullException | keys 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | keysArray 是多维的。 - 或 - itemsArray 是多维的。
ArgumentException | items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 keys 的下限与 items 的下限不匹配。 - 或 - items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keys 的长度与 items 的长度不匹配。
InvalidOperationException | keysArray 中的一个或多个元素未实现 IComparable 接口。

keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。

keysArray 中的每个关键字均必须实现 IComparable 接口，才能与其他任何关键字进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 keys 的 Length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的示例说明如何对两个关联的数组进行排序，其中第一个数组包含键，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。 下面的示例说明如何对两个关联的数组进行排序，其中第一个数组包含键，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。 下面的示例说明如何对两个关联的数组进行排序，其中第一个数组包含键，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。

Imports System
Imports System.Collections

Public Class SamplesArray

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Function Compare(x As [Object], y As [Object]) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new Array and a new custom comparer.
      Dim myKeys As [String]() =  {"red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange"}
      Dim myValues As [String]() =  {"strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe"}
      Dim myComparer = New myReverserClass()

      ' Displays the values of the Array.
      Console.WriteLine("The Array initially contains the following values:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts a section of the Array using the default comparer.
      Array.Sort(myKeys, myValues, 1, 3)
      Console.WriteLine("After sorting a section of the Array using the default comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort(myKeys, myValues, 1, 3, myComparer)
      Console.WriteLine("After sorting a section of the Array using the reverse case-insensitive comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts the entire Array using the default comparer.
      Array.Sort(myKeys, myValues)
      Console.WriteLine("After sorting the entire Array using the default comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort(myKeys, myValues, myComparer)
      Console.WriteLine("After sorting the entire Array using the reverse case-insensitive comparer:")
      PrintKeysAndValues(myKeys, myValues)

   End Sub 'Main

   Public Shared Sub PrintKeysAndValues(myKeys() As [String], myValues() As [String])

      Dim i As Integer
      For i = 0 To myKeys.Length - 1
         Console.WriteLine("   {0,-10}: {1}", myKeys(i), myValues(i))
      Next i
      Console.WriteLine()

   End Sub 'PrintKeysAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The Array initially contains the following values:
'   red       : strawberries
'   GREEN     : PEARS
'   YELLOW    : LIMES
'   BLUE      : BERRIES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting a section of the Array using the default comparer:
'   red       : strawberries
'   BLUE      : BERRIES
'   GREEN     : PEARS
'   YELLOW    : LIMES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting a section of the Array using the reverse case-insensitive comparer:
'   red       : strawberries
'   YELLOW    : LIMES
'   GREEN     : PEARS
'   BLUE      : BERRIES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting the entire Array using the default comparer:
'   black     : olives
'   BLUE      : BERRIES
'   GREEN     : PEARS
'   orange    : cantaloupe
'   purple    : grapes
'   red       : strawberries
'   YELLOW    : LIMES
'
'After sorting the entire Array using the reverse case-insensitive comparer:
'   YELLOW    : LIMES
'   red       : strawberries
'   purple    : grapes
'   orange    : cantaloupe
'   GREEN     : PEARS
'   BLUE      : BERRIES
'   black     : olives

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}

/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

using namespace System;
using namespace System::Collections;

public ref class myReverserClass: public IComparer
{
private:

   // Calls CaseInsensitiveComparer::Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }
};

void PrintKeysAndValues( array<String^>^myKeys, array<String^>^myValues )
{
   for ( int i = 0; i < myKeys->Length; i++ )
   {
      Console::WriteLine( " {0, -10}: {1}", myKeys[ i ], myValues[ i ] );
   }
   Console::WriteLine();
}

int main()
{
   // Creates and initializes a new Array and a new custom comparer.
   array<String^>^myKeys = {"red","GREEN","YELLOW","BLUE","purple","black","orange"};
   array<String^>^myValues = {"strawberries","PEARS","LIMES","BERRIES","grapes","olives","cantaloupe"};
   IComparer^ myComparer = gcnew myReverserClass;

   // Displays the values of the Array.
   Console::WriteLine( "The Array initially contains the following values:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts a section of the Array using the default comparer.
   Array::Sort( myKeys, myValues, 1, 3 );
   Console::WriteLine( "After sorting a section of the Array using the default comparer:" );

   // Sorts a section of the Array using the reverse case-insensitive comparer.
   Array::Sort( myKeys, myValues, 1, 3, myComparer );
   Console::WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts the entire Array using the default comparer.
   Array::Sort( myKeys, myValues );
   Console::WriteLine( "After sorting the entire Array using the default comparer:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts the entire Array using the reverse case-insensitive comparer.
   Array::Sort( myKeys, myValues, myComparer );
   Console::WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
   PrintKeysAndValues( myKeys, myValues );
}

/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparable
BinarySearch
System.Collections IDictionary

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort 方法 (Array, IComparer)

Array
.
.
::
.
Sort 方法 (Array, IComparer)
Array 类

使用指定的 IComparer，对一维 Array 中的元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort ( _
    array As Array, _
    comparer As IComparer _
)
public static void Sort(
    Array array,
    IComparer comparer
)
public:
static void Sort(
    Array^ array,
    IComparer^ comparer
)
static member Sort :
        array:Array *
        comparer:IComparer -> unit

参数

array
类型： System Array
要排序的一维 Array。
comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable 实现。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），array 中的一个或多个元素不实现 IComparable 接口。
ArgumentException | comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。 comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。

如果 comparer 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 array 中的每个元素均必须实现 IComparable 接口，才能与 array 中的其他所有元素进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 array 的 Length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例说明如何使用默认比较器和一个反转排序顺序的自定义比较器，对 Array 中的值进行排序。请注意，结果可能因当前 CultureInfo 而异。 下面的代码示例说明如何使用默认比较器和一个反转排序顺序的自定义比较器，对 Array 中的值进行排序。请注意，结果可能因当前 CultureInfo 而异。

Imports System
Imports System.Collections

Public Class SamplesArray

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Function Compare(x As Object, y As Object) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new Array and a new custom comparer.
      Dim myArr As [String]() =  {"The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog"}
      Dim myComparer = New myReverserClass()

      ' Displays the values of the Array.
      Console.WriteLine("The Array initially contains the following values:")
      PrintIndexAndValues(myArr)

      ' Sorts a section of the Array using the default comparer.
      Array.Sort(myArr, 1, 3)
      Console.WriteLine("After sorting a section of the Array using the default comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort(myArr, 1, 3, myComparer)
      Console.WriteLine("After sorting a section of the Array using the reverse case-insensitive comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts the entire Array using the default comparer.
      Array.Sort(myArr)
      Console.WriteLine("After sorting the entire Array using the default comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort(myArr, myComparer)
      Console.WriteLine("After sorting the entire Array using the reverse case-insensitive comparer:")
      PrintIndexAndValues(myArr)

   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myArr() As [String])

      Dim i As Integer
      For i = 0 To myArr.Length - 1
         Console.WriteLine("   [{0}] : {1}", i, myArr(i))
      Next i
      Console.WriteLine()

   End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The Array initially contains the following values:
'   [0] : The
'   [1] : QUICK
'   [2] : BROWN
'   [3] : FOX
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting a section of the Array using the default comparer:
'   [0] : The
'   [1] : BROWN
'   [2] : FOX
'   [3] : QUICK
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting a section of the Array using the reverse case-insensitive comparer:
'   [0] : The
'   [1] : QUICK
'   [2] : FOX
'   [3] : BROWN
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting the entire Array using the default comparer:
'   [0] : BROWN
'   [1] : dog
'   [2] : FOX
'   [3] : jumps
'   [4] : lazy
'   [5] : over
'   [6] : QUICK
'   [7] : the
'   [8] : The
'
'After sorting the entire Array using the reverse case-insensitive comparer:
'   [0] : the
'   [1] : The
'   [2] : QUICK
'   [3] : over
'   [4] : lazy
'   [5] : jumps
'   [6] : FOX
'   [7] : dog
'   [8] : BROWN

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myArr = { "The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintIndexAndValues( myArr );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myArr, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myArr, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myArr );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myArr, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myArr );

   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }
}

/*
This code produces the following output.

The Array initially contains the following values:
   [0] : The
   [1] : QUICK
   [2] : BROWN
   [3] : FOX
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the reverse case-insensitive comparer:
   [0] : The
   [1] : QUICK
   [2] : FOX
   [3] : BROWN
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting the entire Array using the default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

After sorting the entire Array using the reverse case-insensitive comparer:
   [0] : the
   [1] : The
   [2] : QUICK
   [3] : over
   [4] : lazy
   [5] : jumps
   [6] : FOX
   [7] : dog
   [8] : BROWN

*/

using namespace System;
using namespace System::Collections;
public ref class myReverserClass: public IComparer
{
private:
   // Calls CaseInsensitiveComparer::Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }

};

void PrintIndexAndValues( array<String^>^myArr )
{
   for ( int i = 0; i < myArr->Length; i++ )
   {
      Console::WriteLine( "   [{0}] : {1}", i, myArr[ i ] );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new Array and a new custom comparer.
   array<String^>^myArr = {"The","QUICK","BROWN","FOX","jumps","over","the","lazy","dog"};
   IComparer^ myComparer = gcnew myReverserClass;

   // Displays the values of the Array.
   Console::WriteLine( "The Array initially contains the following values:" );
   PrintIndexAndValues( myArr );

   // Sorts a section of the Array using the default comparer.
   Array::Sort( myArr, 1, 3 );
   Console::WriteLine( "After sorting a section of the Array using the default comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts a section of the Array using the reverse case-insensitive comparer.
   Array::Sort( myArr, 1, 3, myComparer );
   Console::WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts the entire Array using the default comparer.
   Array::Sort( myArr );
   Console::WriteLine( "After sorting the entire Array using the default comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts the entire Array using the reverse case-insensitive comparer.
   Array::Sort( myArr, myComparer );
   Console::WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myArr );
}

/*
This code produces the following output.

The Array initially contains the following values:
   [0] : The
   [1] : QUICK
   [2] : BROWN
   [3] : FOX
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the reverse case-insensitive comparer:
   [0] : The
   [1] : QUICK
   [2] : FOX
   [3] : BROWN
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting the entire Array using the default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

After sorting the entire Array using the reverse case-insensitive comparer:
   [0] : the
   [1] : The
   [2] : QUICK
   [3] : over
   [4] : lazy
   [5] : jumps
   [6] : FOX
   [7] : dog
   [8] : BROWN

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparer
IComparable
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort <(Of <(T >)>) 方法 ( array<T >[]()[], Int32, Int32)

Array
.
.
::
.
Sort
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Int32, Int32)
Array 类

使用 Array 的每个元素的 IComparable<(Of <(T>)>) 泛型接口实现，对 Array 中某个元素范围内的元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort(Of T) ( _
    array As T(), _
    index As Integer, _
    length As Integer _
)
public static void Sort<T>(
    T[] array,
    int index,
    int length
)

public:
generic<typename T>
static void Sort(
    array<T>^ array,
    int index,
    int length
)
static member Sort :
        array:'T[] *
        index:int *
        length:int -> unit

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要排序的从零开始的一维 Array。
index
类型： System Int32
排序范围的起始索引。
length
类型： System Int32
排序范围内的元素数。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。
ArgumentException | index 和 length 不指定 array 中的有效范围。
InvalidOperationException | array 中的一个或多个元素未实现 IComparable<(Of <(T>)>) 泛型接口。

array 的指定部分元素中的每个元素均必须实现 IComparable<(Of <(T>)>) 泛型接口，才能与 array 中的其他所有元素进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示用于对数组中的范围进行排序的 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载和 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载。

该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。 该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。

该代码示例创建并显示一个恐龙名称数组，该数组由三个食草恐龙后面加上三个食肉恐龙（准确地说是暴龙）组成。使用 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载对数组的最后三个元素进行排序，然后显示出来。Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载与 ReverseCompare 一起使用以相反的顺序对最后三个元素进行排序。再次显示彻底无序排列的恐龙。 该代码示例创建并显示一个恐龙名称数组，该数组由三个食草恐龙后面加上三个食肉恐龙（准确地说是暴龙）组成。使用 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载对数组的最后三个元素进行排序，然后显示出来。Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载与 ReverseCompare 一起使用以相反的顺序对最后三个元素进行排序。再次显示彻底无序排列的恐龙。 该代码示例创建并显示一个恐龙名称数组，该数组由三个食草恐龙后面加上三个食肉恐龙（准确地说是暴龙）组成。使用 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载对数组的最后三个元素进行排序，然后显示出来。Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载与 ReverseCompare 一起使用以相反的顺序对最后三个元素进行排序。再次显示彻底无序排列的恐龙。 该代码示例创建并显示一个恐龙名称数组，该数组由三个食草恐龙后面加上三个食肉恐龙（准确地说是暴龙）组成。使用 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载对数组的最后三个元素进行排序，然后显示出来。Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载与 ReverseCompare 一起使用以相反的顺序对最后三个元素进行排序。再次显示彻底无序排列的恐龙。

说明 说明

调用 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 调用 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

Imports System
Imports System.Collections.Generic

Public Class ReverseComparer
    Implements IComparer(Of String)

    Public Function Compare(ByVal x As String, _
        ByVal y As String) As Integer _
        Implements IComparer(Of String).Compare

        ' Compare y and x in reverse order.
        Return y.CompareTo(x)

    End Function
End Class

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Pachycephalosaurus", _
            "Amargasaurus", _
            "Mamenchisaurus", _
            "Tarbosaurus", _
            "Tyrannosaurus", _
            "Albertasaurus"  }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & "Sort(dinosaurs, 3, 3)")
        Array.Sort(dinosaurs, 3, 3)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Dim rc As New ReverseComparer()

        Console.WriteLine(vbLf & "Sort(dinosaurs, 3, 3, rc)")
        Array.Sort(dinosaurs, 3, 3, rc)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

    End Sub

End Class

' This code example produces the following output:
'
'Pachycephalosaurus
'Amargasaurus
'Mamenchisaurus
'Tarbosaurus
'Tyrannosaurus
'Albertasaurus
'
'Sort(dinosaurs, 3, 3)
'
'Pachycephalosaurus
'Amargasaurus
'Mamenchisaurus
'Albertasaurus
'Tarbosaurus
'Tyrannosaurus
'
'Sort(dinosaurs, 3, 3, rc)
'
'Pachycephalosaurus
'Amargasaurus
'Mamenchisaurus
'Tyrannosaurus
'Tarbosaurus
'Albertasaurus

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Mamenchisaurus",
                              "Tarbosaurus",
                              "Tyrannosaurus",
                              "Albertasaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nSort(dinosaurs, 3, 3)");
        Array.Sort(dinosaurs, 3, 3);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, 3, 3, rc)");
        Array.Sort(dinosaurs, 3, 3, rc);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tarbosaurus
Tyrannosaurus
Albertasaurus

Sort(dinosaurs, 3, 3)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Albertasaurus
Tarbosaurus
Tyrannosaurus

Sort(dinosaurs, 3, 3, rc)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tyrannosaurus
Tarbosaurus
Albertasaurus
 */

using namespace System;
using namespace System::Collections::Generic;

public ref class ReverseComparer: IComparer<String^>
{
public:
    virtual int Compare(String^ x, String^ y)
    {
        // Compare y and x in reverse order.
        return y->CompareTo(x);
    }
};

void main()
{
    array<String^>^ dinosaurs = {"Pachycephalosaurus",
                                 "Amargasaurus",
                                 "Mamenchisaurus",
                                 "Tarbosaurus",
                                 "Tyrannosaurus",
                                 "Albertasaurus"};

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nSort(dinosaurs, 3, 3)");
    Array::Sort(dinosaurs, 3, 3);

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    ReverseComparer^ rc = gcnew ReverseComparer();

    Console::WriteLine("\nSort(dinosaurs, 3, 3, rc)");
    Array::Sort(dinosaurs, 3, 3, rc);

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tarbosaurus
Tyrannosaurus
Albertasaurus

Sort(dinosaurs, 3, 3)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Albertasaurus
Tarbosaurus
Tyrannosaurus

Sort(dinosaurs, 3, 3, rc)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tyrannosaurus
Tarbosaurus
Albertasaurus
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparable T
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort <(Of <(TKey, TValue >)>) 方法 ( array<TKey >[]()[], array<TValue >[]()[], IComparer <(Of <(TKey >)>))

Array
.
.
::
.
Sort
<
(Of
<
(
TKey, TValue
>
)
>
)
方法 (
array<
TKey
>
[]
()
[]
,
array<
TValue
>
[]
()
[]
, IComparer
<
(Of
<
(
TKey
>
)
>
)
)
Array 类

基于第一个 Array 中的关键字，使用指定的 IComparer<(Of <(T>)>) 泛型接口，对两个 Array 对象（一个包含关键字，另一个包含对应的项）进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort(Of TKey, TValue) ( _
    keys As TKey(), _
    items As TValue(), _
    comparer As IComparer(Of TKey) _
)
public static void Sort<TKey, TValue>(
    TKey[] keys,
    TValue[] items,
    IComparer<TKey> comparer
)

public:
generic<typename TKey, typename TValue>
static void Sort(
    array<TKey>^ keys,
    array<TValue>^ items,
    IComparer<TKey>^ comparer
)
static member Sort :
        keys:'TKey[] *
        items:'TValue[] *
        comparer:IComparer<'TKey> -> unit

类型参数

TKey

关键字数组元素的类型。

TValue

项数组元素的类型。

参数

keys
类型：
array<
TKey
>
[]
()
[]

从零开始的一维 Array，它包含要排序的关键字。
items
类型：
array<
TValue
>
[]
()
[]

从零开始的一维 Array，其中包含与 keys 中的关键字对应的项；如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只对 keys 进行排序。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
TKey
>
)
>
)

比较元素时使用的 IComparer<(Of <(T>)>) 泛型接口实现；如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable<(Of <(T>)>) 泛型接口实现。
异常 | 条件
ArgumentNullException | keys 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 keys 的下限与 items 的下限不匹配。 - 或 - items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keys 的长度与 items 的长度不匹配。 - 或 - comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。 comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keysArray 中的一个或多个元素未实现 IComparable<(Of <(T>)>) 泛型接口。

keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 keysArray 中的每个关键字均必须实现 IComparable<(Of <(T>)>) 泛型接口，才能与其他所有关键字进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 array 的 Length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[])、Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>))、Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32) 和 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载，这些重载用于对表示关键字和值的数组对进行排序。

该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。 该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。

该代码示例创建并显示一个恐龙名称（关键字）数组和一个表示每种恐龙最大长度（以米为单位）的整数（值）数组。然后对数组进行多次排序和显示： 该代码示例创建并显示一个恐龙名称（关键字）数组和一个表示每种恐龙最大长度（以米为单位）的整数（值）数组。然后对数组进行多次排序和显示：

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[]) 重载按第一个数组中的恐龙名称顺序对两个数组进行排序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 重载和 ReverseCompare 的一个实例反转数组对的排序顺序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32) 重载对两个数组中的最后三个元素进行排序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 重载以相反的顺序对两个数组中的最后三个元素进行排序。

说明 说明

对泛型方法的调用与对其对应的非泛型方法的调用没什么分别，因为 Visual Basic、C# 和 C++ 都是从前两个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 对泛型方法的调用与对其对应的非泛型方法的调用没什么分别，因为 Visual Basic、C# 和 C++ 都是从前两个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

Imports System
Imports System.Collections.Generic

Public Class ReverseComparer
    Implements IComparer(Of String)

    Public Function Compare(ByVal x As String, _
        ByVal y As String) As Integer _
        Implements IComparer(Of String).Compare

        ' Compare y and x in reverse order.
        Return y.CompareTo(x)

    End Function
End Class

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Seismosaurus", _
            "Chasmosaurus", _
            "Coelophysis", _
            "Mamenchisaurus", _
            "Caudipteryx", _
            "Cetiosaurus"  }

        Dim dinosaurSizes() As Integer = { 40, 5, 3, 22, 1, 18 }

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes)")
        Array.Sort(dinosaurs, dinosaurSizes)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Dim rc As New ReverseComparer()

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, rc)")
        Array.Sort(dinosaurs, dinosaurSizes, rc)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, 3, 3)")
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, 3, 3, rc)")
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

    End Sub

End Class

' This code example produces the following output:
'
'Seismosaurus: up to 40 meters long.
'Chasmosaurus: up to 5 meters long.
'Coelophysis: up to 3 meters long.
'Mamenchisaurus: up to 22 meters long.
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'
'Sort(dinosaurs, dinosaurSizes)
'
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'Chasmosaurus: up to 5 meters long.
'Coelophysis: up to 3 meters long.
'Mamenchisaurus: up to 22 meters long.
'Seismosaurus: up to 40 meters long.
'
'Sort(dinosaurs, dinosaurSizes, rc)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Chasmosaurus: up to 5 meters long.
'Cetiosaurus: up to 18 meters long.
'Caudipteryx: up to 1 meters long.
'
'Sort(dinosaurs, dinosaurSizes, 3, 3)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'Chasmosaurus: up to 5 meters long.
'
'Sort(dinosaurs, dinosaurSizes, 3, 3, rc)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Chasmosaurus: up to 5 meters long.
'Cetiosaurus: up to 18 meters long.
'Caudipteryx: up to 1 meters long.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

using namespace System;
using namespace System::Collections::Generic;

public ref class ReverseComparer: IComparer<String^>
{
public:
    virtual int Compare(String^ x, String^ y)
    {
        // Compare y and x in reverse order.
        return y->CompareTo(x);
    }
};

void main()
{
    array<String^>^ dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

    array<int>^ dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes)");
    Array::Sort(dinosaurs, dinosaurSizes);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    ReverseComparer^ rc = gcnew ReverseComparer();

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
    Array::Sort(dinosaurs, dinosaurSizes, rc);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
    Array::Sort(dinosaurs, dinosaurSizes, 3, 3);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
    Array::Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparer T
IComparable T
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort 方法 (Array, Array, IComparer)

Array
.
.
::
.
Sort 方法 (Array, Array, IComparer)
Array 类

基于第一个 Array 中的关键字，使用指定的 IComparer，对两个一维 Array 对象（一个包含关键字，另一个包含对应的项）进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort ( _
    keys As Array, _
    items As Array, _
    comparer As IComparer _
)
public static void Sort(
    Array keys,
    Array items,
    IComparer comparer
)
public:
static void Sort(
    Array^ keys,
    Array^ items,
    IComparer^ comparer
)
static member Sort :
        keys:Array *
        items:Array *
        comparer:IComparer -> unit

参数

keys
类型： System Array
一维 Array，它包含要排序的关键字。
items
类型： System Array
一维 Array，它包含与 keysArray 中的每一个关键字对应的项。
- 或 -
如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只对 keysArray 进行排序。
comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable 实现。
异常 | 条件
ArgumentNullException | keys 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | keysArray 是多维的。 - 或 - itemsArray 是多维的。
ArgumentException | items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 keys 的下限与 items 的下限不匹配。 - 或 - items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keys 的长度与 items 的长度不匹配。 - 或 - comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。 comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keysArray 中的一个或多个元素不实现 IComparable 接口。

keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 keysArray 中的每个关键字均必须实现 IComparable 接口，才能与其他所有关键字进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 keys 的 Length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的示例说明如何对两个关联的数组进行排序，其中第一个数组包含键，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。 下面的示例说明如何对两个关联的数组进行排序，其中第一个数组包含键，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。 下面的示例说明如何对两个关联的数组进行排序，其中第一个数组包含键，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。

Imports System
Imports System.Collections

Public Class SamplesArray

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Function Compare(x As [Object], y As [Object]) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new Array and a new custom comparer.
      Dim myKeys As [String]() =  {"red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange"}
      Dim myValues As [String]() =  {"strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe"}
      Dim myComparer = New myReverserClass()

      ' Displays the values of the Array.
      Console.WriteLine("The Array initially contains the following values:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts a section of the Array using the default comparer.
      Array.Sort(myKeys, myValues, 1, 3)
      Console.WriteLine("After sorting a section of the Array using the default comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort(myKeys, myValues, 1, 3, myComparer)
      Console.WriteLine("After sorting a section of the Array using the reverse case-insensitive comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts the entire Array using the default comparer.
      Array.Sort(myKeys, myValues)
      Console.WriteLine("After sorting the entire Array using the default comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort(myKeys, myValues, myComparer)
      Console.WriteLine("After sorting the entire Array using the reverse case-insensitive comparer:")
      PrintKeysAndValues(myKeys, myValues)

   End Sub 'Main

   Public Shared Sub PrintKeysAndValues(myKeys() As [String], myValues() As [String])

      Dim i As Integer
      For i = 0 To myKeys.Length - 1
         Console.WriteLine("   {0,-10}: {1}", myKeys(i), myValues(i))
      Next i
      Console.WriteLine()

   End Sub 'PrintKeysAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The Array initially contains the following values:
'   red       : strawberries
'   GREEN     : PEARS
'   YELLOW    : LIMES
'   BLUE      : BERRIES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting a section of the Array using the default comparer:
'   red       : strawberries
'   BLUE      : BERRIES
'   GREEN     : PEARS
'   YELLOW    : LIMES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting a section of the Array using the reverse case-insensitive comparer:
'   red       : strawberries
'   YELLOW    : LIMES
'   GREEN     : PEARS
'   BLUE      : BERRIES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting the entire Array using the default comparer:
'   black     : olives
'   BLUE      : BERRIES
'   GREEN     : PEARS
'   orange    : cantaloupe
'   purple    : grapes
'   red       : strawberries
'   YELLOW    : LIMES
'
'After sorting the entire Array using the reverse case-insensitive comparer:
'   YELLOW    : LIMES
'   red       : strawberries
'   purple    : grapes
'   orange    : cantaloupe
'   GREEN     : PEARS
'   BLUE      : BERRIES
'   black     : olives

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}

/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

using namespace System;
using namespace System::Collections;

public ref class myReverserClass: public IComparer
{
private:

   // Calls CaseInsensitiveComparer::Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }
};

void PrintKeysAndValues( array<String^>^myKeys, array<String^>^myValues )
{
   for ( int i = 0; i < myKeys->Length; i++ )
   {
      Console::WriteLine( " {0, -10}: {1}", myKeys[ i ], myValues[ i ] );
   }
   Console::WriteLine();
}

int main()
{
   // Creates and initializes a new Array and a new custom comparer.
   array<String^>^myKeys = {"red","GREEN","YELLOW","BLUE","purple","black","orange"};
   array<String^>^myValues = {"strawberries","PEARS","LIMES","BERRIES","grapes","olives","cantaloupe"};
   IComparer^ myComparer = gcnew myReverserClass;

   // Displays the values of the Array.
   Console::WriteLine( "The Array initially contains the following values:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts a section of the Array using the default comparer.
   Array::Sort( myKeys, myValues, 1, 3 );
   Console::WriteLine( "After sorting a section of the Array using the default comparer:" );

   // Sorts a section of the Array using the reverse case-insensitive comparer.
   Array::Sort( myKeys, myValues, 1, 3, myComparer );
   Console::WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts the entire Array using the default comparer.
   Array::Sort( myKeys, myValues );
   Console::WriteLine( "After sorting the entire Array using the default comparer:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts the entire Array using the reverse case-insensitive comparer.
   Array::Sort( myKeys, myValues, myComparer );
   Console::WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
   PrintKeysAndValues( myKeys, myValues );
}

/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparer
IComparable
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort 方法 (Array, Int32, Int32)

Array
.
.
::
.
Sort 方法 (Array, Int32, Int32)
Array 类

使用 Array 中每个元素的 IComparable 实现，对一维 Array 中某部分元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort ( _
    array As Array, _
    index As Integer, _
    length As Integer _
)
public static void Sort(
    Array array,
    int index,
    int length
)
public:
static void Sort(
    Array^ array,
    int index,
    int length
)
static member Sort :
        array:Array *
        index:int *
        length:int -> unit

参数

array
类型： System Array
要排序的一维 Array。
index
类型： System Int32
排序范围的起始索引。
length
类型： System Int32
排序范围内的元素数。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。
ArgumentOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。
ArgumentException | index 和 length 不指定 array 中的有效范围。
InvalidOperationException | array 中的一个或多个元素未实现 IComparable 接口。

array 的指定部分中的每个元素均必须实现 IComparable 接口，才能与 array 中的其他所有元素进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例说明如何使用默认比较器和一个反转排序顺序的自定义比较器，对 Array 中的值进行排序。请注意，结果可能因当前 CultureInfo 而异。 下面的代码示例说明如何使用默认比较器和一个反转排序顺序的自定义比较器，对 Array 中的值进行排序。请注意，结果可能因当前 CultureInfo 而异。

Imports System
Imports System.Collections

Public Class SamplesArray

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Function Compare(x As Object, y As Object) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new Array and a new custom comparer.
      Dim myArr As [String]() =  {"The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog"}
      Dim myComparer = New myReverserClass()

      ' Displays the values of the Array.
      Console.WriteLine("The Array initially contains the following values:")
      PrintIndexAndValues(myArr)

      ' Sorts a section of the Array using the default comparer.
      Array.Sort(myArr, 1, 3)
      Console.WriteLine("After sorting a section of the Array using the default comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort(myArr, 1, 3, myComparer)
      Console.WriteLine("After sorting a section of the Array using the reverse case-insensitive comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts the entire Array using the default comparer.
      Array.Sort(myArr)
      Console.WriteLine("After sorting the entire Array using the default comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort(myArr, myComparer)
      Console.WriteLine("After sorting the entire Array using the reverse case-insensitive comparer:")
      PrintIndexAndValues(myArr)

   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myArr() As [String])

      Dim i As Integer
      For i = 0 To myArr.Length - 1
         Console.WriteLine("   [{0}] : {1}", i, myArr(i))
      Next i
      Console.WriteLine()

   End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The Array initially contains the following values:
'   [0] : The
'   [1] : QUICK
'   [2] : BROWN
'   [3] : FOX
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting a section of the Array using the default comparer:
'   [0] : The
'   [1] : BROWN
'   [2] : FOX
'   [3] : QUICK
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting a section of the Array using the reverse case-insensitive comparer:
'   [0] : The
'   [1] : QUICK
'   [2] : FOX
'   [3] : BROWN
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting the entire Array using the default comparer:
'   [0] : BROWN
'   [1] : dog
'   [2] : FOX
'   [3] : jumps
'   [4] : lazy
'   [5] : over
'   [6] : QUICK
'   [7] : the
'   [8] : The
'
'After sorting the entire Array using the reverse case-insensitive comparer:
'   [0] : the
'   [1] : The
'   [2] : QUICK
'   [3] : over
'   [4] : lazy
'   [5] : jumps
'   [6] : FOX
'   [7] : dog
'   [8] : BROWN

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myArr = { "The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintIndexAndValues( myArr );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myArr, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myArr, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myArr );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myArr, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myArr );

   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }
}

/*
This code produces the following output.

The Array initially contains the following values:
   [0] : The
   [1] : QUICK
   [2] : BROWN
   [3] : FOX
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the reverse case-insensitive comparer:
   [0] : The
   [1] : QUICK
   [2] : FOX
   [3] : BROWN
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting the entire Array using the default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

After sorting the entire Array using the reverse case-insensitive comparer:
   [0] : the
   [1] : The
   [2] : QUICK
   [3] : over
   [4] : lazy
   [5] : jumps
   [6] : FOX
   [7] : dog
   [8] : BROWN

*/

using namespace System;
using namespace System::Collections;
public ref class myReverserClass: public IComparer
{
private:
   // Calls CaseInsensitiveComparer::Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }

};

void PrintIndexAndValues( array<String^>^myArr )
{
   for ( int i = 0; i < myArr->Length; i++ )
   {
      Console::WriteLine( "   [{0}] : {1}", i, myArr[ i ] );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new Array and a new custom comparer.
   array<String^>^myArr = {"The","QUICK","BROWN","FOX","jumps","over","the","lazy","dog"};
   IComparer^ myComparer = gcnew myReverserClass;

   // Displays the values of the Array.
   Console::WriteLine( "The Array initially contains the following values:" );
   PrintIndexAndValues( myArr );

   // Sorts a section of the Array using the default comparer.
   Array::Sort( myArr, 1, 3 );
   Console::WriteLine( "After sorting a section of the Array using the default comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts a section of the Array using the reverse case-insensitive comparer.
   Array::Sort( myArr, 1, 3, myComparer );
   Console::WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts the entire Array using the default comparer.
   Array::Sort( myArr );
   Console::WriteLine( "After sorting the entire Array using the default comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts the entire Array using the reverse case-insensitive comparer.
   Array::Sort( myArr, myComparer );
   Console::WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myArr );
}

/*
This code produces the following output.

The Array initially contains the following values:
   [0] : The
   [1] : QUICK
   [2] : BROWN
   [3] : FOX
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the reverse case-insensitive comparer:
   [0] : The
   [1] : QUICK
   [2] : FOX
   [3] : BROWN
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting the entire Array using the default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

After sorting the entire Array using the reverse case-insensitive comparer:
   [0] : the
   [1] : The
   [2] : QUICK
   [3] : over
   [4] : lazy
   [5] : jumps
   [6] : FOX
   [7] : dog
   [8] : BROWN

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparable
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort <(Of <(T >)>) 方法 ( array<T >[]()[], Int32, Int32, IComparer <(Of <(T >)>))

Array
.
.
::
.
Sort
<
(Of
<
(
T
>
)
>
)
方法 (
array<
T
>
[]
()
[]
, Int32, Int32, IComparer
<
(Of
<
(
T
>
)
>
)
)
Array 类

使用指定的 IComparer<(Of <(T>)>) 泛型接口，对 Array 中某个元素范围内的元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort(Of T) ( _
    array As T(), _
    index As Integer, _
    length As Integer, _
    comparer As IComparer(Of T) _
)
public static void Sort<T>(
    T[] array,
    int index,
    int length,
    IComparer<T> comparer
)

public:
generic<typename T>
static void Sort(
    array<T>^ array,
    int index,
    int length,
    IComparer<T>^ comparer
)
static member Sort :
        array:'T[] *
        index:int *
        length:int *
        comparer:IComparer<'T> -> unit

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要排序的从零开始的一维 Array。
index
类型： System Int32
排序范围的起始索引。
length
类型： System Int32
排序范围内的元素数。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
T
>
)
>
)

比较元素时使用的 IComparer<(Of <(T>)>) 泛型接口实现；如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable<(Of <(T>)>) 泛型接口实现。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。
ArgumentException | index 和 length 不指定 array 中的有效范围。 - 或 - comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。 comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 array 中的一个或多个元素未实现 IComparable<(Of <(T>)>) 泛型接口。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 array 的指定部分元素中的每个元素均必须实现 IComparable<(Of <(T>)>) 泛型接口，才能与 array 中的其他所有元素进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示用于对数组中的范围进行排序的 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载和 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载。

该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。 该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。

该代码示例创建并显示一个恐龙名称数组，该数组由三个食草恐龙后面加上三个食肉恐龙（准确地说是暴龙）组成。使用 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载对数组的最后三个元素进行排序，然后显示出来。Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载与 ReverseCompare 一起使用以相反的顺序对最后三个元素进行排序。再次显示彻底无序排列的恐龙。 该代码示例创建并显示一个恐龙名称数组，该数组由三个食草恐龙后面加上三个食肉恐龙（准确地说是暴龙）组成。使用 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载对数组的最后三个元素进行排序，然后显示出来。Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载与 ReverseCompare 一起使用以相反的顺序对最后三个元素进行排序。再次显示彻底无序排列的恐龙。 该代码示例创建并显示一个恐龙名称数组，该数组由三个食草恐龙后面加上三个食肉恐龙（准确地说是暴龙）组成。使用 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载对数组的最后三个元素进行排序，然后显示出来。Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载与 ReverseCompare 一起使用以相反的顺序对最后三个元素进行排序。再次显示彻底无序排列的恐龙。 该代码示例创建并显示一个恐龙名称数组，该数组由三个食草恐龙后面加上三个食肉恐龙（准确地说是暴龙）组成。使用 Sort<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 泛型方法重载对数组的最后三个元素进行排序，然后显示出来。Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载与 ReverseCompare 一起使用以相反的顺序对最后三个元素进行排序。再次显示彻底无序排列的恐龙。

说明 说明

调用 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 调用 Sort<(Of <(T>)>)(array<T>[]()[], IComparer<(Of <(T>)>)) 和 BinarySearch<(Of <(T>)>)(array<T>[]()[], T, IComparer<(Of <(T>)>)) 泛型方法与调用对应的非泛型方法没什么分别，因为 Visual Basic、C# 和 C++ 都是从第一个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

Imports System
Imports System.Collections.Generic

Public Class ReverseComparer
    Implements IComparer(Of String)

    Public Function Compare(ByVal x As String, _
        ByVal y As String) As Integer _
        Implements IComparer(Of String).Compare

        ' Compare y and x in reverse order.
        Return y.CompareTo(x)

    End Function
End Class

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Pachycephalosaurus", _
            "Amargasaurus", _
            "Mamenchisaurus", _
            "Tarbosaurus", _
            "Tyrannosaurus", _
            "Albertasaurus"  }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & "Sort(dinosaurs, 3, 3)")
        Array.Sort(dinosaurs, 3, 3)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Dim rc As New ReverseComparer()

        Console.WriteLine(vbLf & "Sort(dinosaurs, 3, 3, rc)")
        Array.Sort(dinosaurs, 3, 3, rc)

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

    End Sub

End Class

' This code example produces the following output:
'
'Pachycephalosaurus
'Amargasaurus
'Mamenchisaurus
'Tarbosaurus
'Tyrannosaurus
'Albertasaurus
'
'Sort(dinosaurs, 3, 3)
'
'Pachycephalosaurus
'Amargasaurus
'Mamenchisaurus
'Albertasaurus
'Tarbosaurus
'Tyrannosaurus
'
'Sort(dinosaurs, 3, 3, rc)
'
'Pachycephalosaurus
'Amargasaurus
'Mamenchisaurus
'Tyrannosaurus
'Tarbosaurus
'Albertasaurus

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Mamenchisaurus",
                              "Tarbosaurus",
                              "Tyrannosaurus",
                              "Albertasaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nSort(dinosaurs, 3, 3)");
        Array.Sort(dinosaurs, 3, 3);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, 3, 3, rc)");
        Array.Sort(dinosaurs, 3, 3, rc);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tarbosaurus
Tyrannosaurus
Albertasaurus

Sort(dinosaurs, 3, 3)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Albertasaurus
Tarbosaurus
Tyrannosaurus

Sort(dinosaurs, 3, 3, rc)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tyrannosaurus
Tarbosaurus
Albertasaurus
 */

using namespace System;
using namespace System::Collections::Generic;

public ref class ReverseComparer: IComparer<String^>
{
public:
    virtual int Compare(String^ x, String^ y)
    {
        // Compare y and x in reverse order.
        return y->CompareTo(x);
    }
};

void main()
{
    array<String^>^ dinosaurs = {"Pachycephalosaurus",
                                 "Amargasaurus",
                                 "Mamenchisaurus",
                                 "Tarbosaurus",
                                 "Tyrannosaurus",
                                 "Albertasaurus"};

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nSort(dinosaurs, 3, 3)");
    Array::Sort(dinosaurs, 3, 3);

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    ReverseComparer^ rc = gcnew ReverseComparer();

    Console::WriteLine("\nSort(dinosaurs, 3, 3, rc)");
    Array::Sort(dinosaurs, 3, 3, rc);

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tarbosaurus
Tyrannosaurus
Albertasaurus

Sort(dinosaurs, 3, 3)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Albertasaurus
Tarbosaurus
Tyrannosaurus

Sort(dinosaurs, 3, 3, rc)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tyrannosaurus
Tarbosaurus
Albertasaurus
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparer T
IComparable T
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort <(Of <(TKey, TValue >)>) 方法 ( array<TKey >[]()[], array<TValue >[]()[], Int32, Int32)

Array
.
.
::
.
Sort
<
(Of
<
(
TKey, TValue
>
)
>
)
方法 (
array<
TKey
>
[]
()
[]
,
array<
TValue
>
[]
()
[]
, Int32, Int32)
Array 类

基于第一个 Array 中的关键字，使用每个关键字的 IComparable<(Of <(T>)>) 泛型接口实现，对两个 Array 对象（一个包含关键字，另一个包含对应的项）的部分元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort(Of TKey, TValue) ( _
    keys As TKey(), _
    items As TValue(), _
    index As Integer, _
    length As Integer _
)
public static void Sort<TKey, TValue>(
    TKey[] keys,
    TValue[] items,
    int index,
    int length
)

public:
generic<typename TKey, typename TValue>
static void Sort(
    array<TKey>^ keys,
    array<TValue>^ items,
    int index,
    int length
)
static member Sort :
        keys:'TKey[] *
        items:'TValue[] *
        index:int *
        length:int -> unit

类型参数

TKey

关键字数组元素的类型。

TValue

项数组元素的类型。

参数

keys
类型：
array<
TKey
>
[]
()
[]

从零开始的一维 Array，它包含要排序的关键字。
items
类型：
array<
TValue
>
[]
()
[]

从零开始的一维 Array，其中包含与 keys 中的关键字对应的项；如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只对 keys 进行排序。
index
类型： System Int32
排序范围的起始索引。
length
类型： System Int32
排序范围内的元素数。
异常 | 条件
ArgumentNullException | keys 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于 keys 的下限。 - 或 - length 小于零。
ArgumentException | items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 keys 的下限与 items 的下限不匹配。 - 或 - items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keys 的长度与 items 的长度不匹配。 - 或 - index 和 length 未指定 keysArray 中的有效范围。 - 或 - items 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 index 和 length 未在 itemsArray 中指定有效范围。
InvalidOperationException | keysArray 中的一个或多个元素未实现 IComparable<(Of <(T>)>) 泛型接口。

keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。

keysArray 的指定部分元素中的每个关键字均必须实现 IComparable<(Of <(T>)>) 泛型接口，才能与其他任何关键字进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[])、Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>))、Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32) 和 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载，这些重载用于对表示关键字和值的数组对进行排序。

该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。 该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。

该代码示例创建并显示一个恐龙名称（关键字）数组和一个表示每种恐龙最大长度（以米为单位）的整数（值）数组。然后对数组进行多次排序和显示： 该代码示例创建并显示一个恐龙名称（关键字）数组和一个表示每种恐龙最大长度（以米为单位）的整数（值）数组。然后对数组进行多次排序和显示：

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[]) 重载按第一个数组中的恐龙名称顺序对两个数组进行排序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 重载和 ReverseCompare 的一个实例反转数组对的排序顺序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32) 重载对两个数组中的最后三个元素进行排序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 重载以相反的顺序对两个数组中的最后三个元素进行排序。

说明 说明

对泛型方法的调用与对其对应的非泛型方法的调用没什么分别，因为 Visual Basic、C# 和 C++ 都是从前两个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 对泛型方法的调用与对其对应的非泛型方法的调用没什么分别，因为 Visual Basic、C# 和 C++ 都是从前两个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

Imports System
Imports System.Collections.Generic

Public Class ReverseComparer
    Implements IComparer(Of String)

    Public Function Compare(ByVal x As String, _
        ByVal y As String) As Integer _
        Implements IComparer(Of String).Compare

        ' Compare y and x in reverse order.
        Return y.CompareTo(x)

    End Function
End Class

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Seismosaurus", _
            "Chasmosaurus", _
            "Coelophysis", _
            "Mamenchisaurus", _
            "Caudipteryx", _
            "Cetiosaurus"  }

        Dim dinosaurSizes() As Integer = { 40, 5, 3, 22, 1, 18 }

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes)")
        Array.Sort(dinosaurs, dinosaurSizes)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Dim rc As New ReverseComparer()

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, rc)")
        Array.Sort(dinosaurs, dinosaurSizes, rc)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, 3, 3)")
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, 3, 3, rc)")
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

    End Sub

End Class

' This code example produces the following output:
'
'Seismosaurus: up to 40 meters long.
'Chasmosaurus: up to 5 meters long.
'Coelophysis: up to 3 meters long.
'Mamenchisaurus: up to 22 meters long.
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'
'Sort(dinosaurs, dinosaurSizes)
'
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'Chasmosaurus: up to 5 meters long.
'Coelophysis: up to 3 meters long.
'Mamenchisaurus: up to 22 meters long.
'Seismosaurus: up to 40 meters long.
'
'Sort(dinosaurs, dinosaurSizes, rc)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Chasmosaurus: up to 5 meters long.
'Cetiosaurus: up to 18 meters long.
'Caudipteryx: up to 1 meters long.
'
'Sort(dinosaurs, dinosaurSizes, 3, 3)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'Chasmosaurus: up to 5 meters long.
'
'Sort(dinosaurs, dinosaurSizes, 3, 3, rc)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Chasmosaurus: up to 5 meters long.
'Cetiosaurus: up to 18 meters long.
'Caudipteryx: up to 1 meters long.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

using namespace System;
using namespace System::Collections::Generic;

public ref class ReverseComparer: IComparer<String^>
{
public:
    virtual int Compare(String^ x, String^ y)
    {
        // Compare y and x in reverse order.
        return y->CompareTo(x);
    }
};

void main()
{
    array<String^>^ dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

    array<int>^ dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes)");
    Array::Sort(dinosaurs, dinosaurSizes);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    ReverseComparer^ rc = gcnew ReverseComparer();

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
    Array::Sort(dinosaurs, dinosaurSizes, rc);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
    Array::Sort(dinosaurs, dinosaurSizes, 3, 3);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
    Array::Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparable T
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort 方法 (Array, Array, Int32, Int32)

Array
.
.
::
.
Sort 方法 (Array, Array, Int32, Int32)
Array 类

基于第一个 Array 中的关键字，使用每个关键字的 IComparable 实现，对两个一维 Array 对象（一个包含关键字，另一个包含对应的项）的部分元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort ( _
    keys As Array, _
    items As Array, _
    index As Integer, _
    length As Integer _
)
public static void Sort(
    Array keys,
    Array items,
    int index,
    int length
)
public:
static void Sort(
    Array^ keys,
    Array^ items,
    int index,
    int length
)
static member Sort :
        keys:Array *
        items:Array *
        index:int *
        length:int -> unit

参数

keys
类型： System Array
一维 Array，它包含要排序的关键字。
items
类型： System Array
一维 Array，它包含与 keysArray 中的每一个关键字对应的项。
- 或 -
如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只对 keysArray 进行排序。
index
类型： System Int32
排序范围的起始索引。
length
类型： System Int32
排序范围内的元素数。
异常 | 条件
ArgumentNullException | keys 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | keysArray 是多维的。 - 或 - itemsArray 是多维的。
ArgumentOutOfRangeException | index 小于 keys 的下限。 - 或 - length 小于零。
ArgumentException | items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 keys 的下限与 items 的下限不匹配。 - 或 - items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keys 的长度与 items 的长度不匹配。 - 或 - index 和 length 未指定 keysArray 中的有效范围。 - 或 - items 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 index 和 length 未在 itemsArray 中指定有效范围。
InvalidOperationException | keysArray 中的一个或多个元素未实现 IComparable 接口。

keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。

keysArray 的指定部分元素中的每个关键字均必须实现 IComparable 接口，才能与其他任何关键字进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示如何对两个关联的数组进行排序，其中第一个数组包含关键字，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。 下面的代码示例演示如何对两个关联的数组进行排序，其中第一个数组包含关键字，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。 下面的代码示例演示如何对两个关联的数组进行排序，其中第一个数组包含关键字，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。

Imports System
Imports System.Collections

Public Class SamplesArray

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Function Compare(x As [Object], y As [Object]) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new Array and a new custom comparer.
      Dim myKeys As [String]() =  {"red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange"}
      Dim myValues As [String]() =  {"strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe"}
      Dim myComparer = New myReverserClass()

      ' Displays the values of the Array.
      Console.WriteLine("The Array initially contains the following values:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts a section of the Array using the default comparer.
      Array.Sort(myKeys, myValues, 1, 3)
      Console.WriteLine("After sorting a section of the Array using the default comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort(myKeys, myValues, 1, 3, myComparer)
      Console.WriteLine("After sorting a section of the Array using the reverse case-insensitive comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts the entire Array using the default comparer.
      Array.Sort(myKeys, myValues)
      Console.WriteLine("After sorting the entire Array using the default comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort(myKeys, myValues, myComparer)
      Console.WriteLine("After sorting the entire Array using the reverse case-insensitive comparer:")
      PrintKeysAndValues(myKeys, myValues)

   End Sub 'Main

   Public Shared Sub PrintKeysAndValues(myKeys() As [String], myValues() As [String])

      Dim i As Integer
      For i = 0 To myKeys.Length - 1
         Console.WriteLine("   {0,-10}: {1}", myKeys(i), myValues(i))
      Next i
      Console.WriteLine()

   End Sub 'PrintKeysAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The Array initially contains the following values:
'   red       : strawberries
'   GREEN     : PEARS
'   YELLOW    : LIMES
'   BLUE      : BERRIES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting a section of the Array using the default comparer:
'   red       : strawberries
'   BLUE      : BERRIES
'   GREEN     : PEARS
'   YELLOW    : LIMES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting a section of the Array using the reverse case-insensitive comparer:
'   red       : strawberries
'   YELLOW    : LIMES
'   GREEN     : PEARS
'   BLUE      : BERRIES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting the entire Array using the default comparer:
'   black     : olives
'   BLUE      : BERRIES
'   GREEN     : PEARS
'   orange    : cantaloupe
'   purple    : grapes
'   red       : strawberries
'   YELLOW    : LIMES
'
'After sorting the entire Array using the reverse case-insensitive comparer:
'   YELLOW    : LIMES
'   red       : strawberries
'   purple    : grapes
'   orange    : cantaloupe
'   GREEN     : PEARS
'   BLUE      : BERRIES
'   black     : olives

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}

/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

using namespace System;
using namespace System::Collections;

public ref class myReverserClass: public IComparer
{
private:

   // Calls CaseInsensitiveComparer::Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }
};

void PrintKeysAndValues( array<String^>^myKeys, array<String^>^myValues )
{
   for ( int i = 0; i < myKeys->Length; i++ )
   {
      Console::WriteLine( " {0, -10}: {1}", myKeys[ i ], myValues[ i ] );
   }
   Console::WriteLine();
}

int main()
{
   // Creates and initializes a new Array and a new custom comparer.
   array<String^>^myKeys = {"red","GREEN","YELLOW","BLUE","purple","black","orange"};
   array<String^>^myValues = {"strawberries","PEARS","LIMES","BERRIES","grapes","olives","cantaloupe"};
   IComparer^ myComparer = gcnew myReverserClass;

   // Displays the values of the Array.
   Console::WriteLine( "The Array initially contains the following values:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts a section of the Array using the default comparer.
   Array::Sort( myKeys, myValues, 1, 3 );
   Console::WriteLine( "After sorting a section of the Array using the default comparer:" );

   // Sorts a section of the Array using the reverse case-insensitive comparer.
   Array::Sort( myKeys, myValues, 1, 3, myComparer );
   Console::WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts the entire Array using the default comparer.
   Array::Sort( myKeys, myValues );
   Console::WriteLine( "After sorting the entire Array using the default comparer:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts the entire Array using the reverse case-insensitive comparer.
   Array::Sort( myKeys, myValues, myComparer );
   Console::WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
   PrintKeysAndValues( myKeys, myValues );
}

/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparable
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort 方法 (Array, Int32, Int32, IComparer)

Array
.
.
::
.
Sort 方法 (Array, Int32, Int32, IComparer)
Array 类

使用指定的 IComparer，对一维 Array 的部分元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort ( _
    array As Array, _
    index As Integer, _
    length As Integer, _
    comparer As IComparer _
)
public static void Sort(
    Array array,
    int index,
    int length,
    IComparer comparer
)
public:
static void Sort(
    Array^ array,
    int index,
    int length,
    IComparer^ comparer
)
static member Sort :
        array:Array *
        index:int *
        length:int *
        comparer:IComparer -> unit

参数

array
类型： System Array
要排序的一维 Array。
index
类型： System Int32
排序范围的起始索引。
length
类型： System Int32
排序范围内的元素数。
comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable 实现。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | array 是多维数组。
ArgumentOutOfRangeException | index 小于 array 的下限。 - 或 - length 小于零。
ArgumentException | index 和 length 不指定 array 中的有效范围。 - 或 - comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。 comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），array 中的一个或多个元素不实现 IComparable 接口。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 array 的指定部分元素中的每个元素均必须实现 IComparable 接口，才能与 array 中的其他所有元素进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例说明如何使用默认比较器和一个反转排序顺序的自定义比较器，对 Array 中的值进行排序。请注意，结果可能因当前 CultureInfo 而异。 下面的代码示例说明如何使用默认比较器和一个反转排序顺序的自定义比较器，对 Array 中的值进行排序。请注意，结果可能因当前 CultureInfo 而异。

Imports System
Imports System.Collections

Public Class SamplesArray

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Function Compare(x As Object, y As Object) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new Array and a new custom comparer.
      Dim myArr As [String]() =  {"The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog"}
      Dim myComparer = New myReverserClass()

      ' Displays the values of the Array.
      Console.WriteLine("The Array initially contains the following values:")
      PrintIndexAndValues(myArr)

      ' Sorts a section of the Array using the default comparer.
      Array.Sort(myArr, 1, 3)
      Console.WriteLine("After sorting a section of the Array using the default comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort(myArr, 1, 3, myComparer)
      Console.WriteLine("After sorting a section of the Array using the reverse case-insensitive comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts the entire Array using the default comparer.
      Array.Sort(myArr)
      Console.WriteLine("After sorting the entire Array using the default comparer:")
      PrintIndexAndValues(myArr)

      ' Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort(myArr, myComparer)
      Console.WriteLine("After sorting the entire Array using the reverse case-insensitive comparer:")
      PrintIndexAndValues(myArr)

   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myArr() As [String])

      Dim i As Integer
      For i = 0 To myArr.Length - 1
         Console.WriteLine("   [{0}] : {1}", i, myArr(i))
      Next i
      Console.WriteLine()

   End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The Array initially contains the following values:
'   [0] : The
'   [1] : QUICK
'   [2] : BROWN
'   [3] : FOX
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting a section of the Array using the default comparer:
'   [0] : The
'   [1] : BROWN
'   [2] : FOX
'   [3] : QUICK
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting a section of the Array using the reverse case-insensitive comparer:
'   [0] : The
'   [1] : QUICK
'   [2] : FOX
'   [3] : BROWN
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'After sorting the entire Array using the default comparer:
'   [0] : BROWN
'   [1] : dog
'   [2] : FOX
'   [3] : jumps
'   [4] : lazy
'   [5] : over
'   [6] : QUICK
'   [7] : the
'   [8] : The
'
'After sorting the entire Array using the reverse case-insensitive comparer:
'   [0] : the
'   [1] : The
'   [2] : QUICK
'   [3] : over
'   [4] : lazy
'   [5] : jumps
'   [6] : FOX
'   [7] : dog
'   [8] : BROWN

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myArr = { "The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintIndexAndValues( myArr );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myArr, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myArr, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myArr );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintIndexAndValues( myArr );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myArr, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myArr );

   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }
}

/*
This code produces the following output.

The Array initially contains the following values:
   [0] : The
   [1] : QUICK
   [2] : BROWN
   [3] : FOX
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the reverse case-insensitive comparer:
   [0] : The
   [1] : QUICK
   [2] : FOX
   [3] : BROWN
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting the entire Array using the default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

After sorting the entire Array using the reverse case-insensitive comparer:
   [0] : the
   [1] : The
   [2] : QUICK
   [3] : over
   [4] : lazy
   [5] : jumps
   [6] : FOX
   [7] : dog
   [8] : BROWN

*/

using namespace System;
using namespace System::Collections;
public ref class myReverserClass: public IComparer
{
private:
   // Calls CaseInsensitiveComparer::Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }

};

void PrintIndexAndValues( array<String^>^myArr )
{
   for ( int i = 0; i < myArr->Length; i++ )
   {
      Console::WriteLine( "   [{0}] : {1}", i, myArr[ i ] );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new Array and a new custom comparer.
   array<String^>^myArr = {"The","QUICK","BROWN","FOX","jumps","over","the","lazy","dog"};
   IComparer^ myComparer = gcnew myReverserClass;

   // Displays the values of the Array.
   Console::WriteLine( "The Array initially contains the following values:" );
   PrintIndexAndValues( myArr );

   // Sorts a section of the Array using the default comparer.
   Array::Sort( myArr, 1, 3 );
   Console::WriteLine( "After sorting a section of the Array using the default comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts a section of the Array using the reverse case-insensitive comparer.
   Array::Sort( myArr, 1, 3, myComparer );
   Console::WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts the entire Array using the default comparer.
   Array::Sort( myArr );
   Console::WriteLine( "After sorting the entire Array using the default comparer:" );
   PrintIndexAndValues( myArr );

   // Sorts the entire Array using the reverse case-insensitive comparer.
   Array::Sort( myArr, myComparer );
   Console::WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myArr );
}

/*
This code produces the following output.

The Array initially contains the following values:
   [0] : The
   [1] : QUICK
   [2] : BROWN
   [3] : FOX
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting a section of the Array using the reverse case-insensitive comparer:
   [0] : The
   [1] : QUICK
   [2] : FOX
   [3] : BROWN
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

After sorting the entire Array using the default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

After sorting the entire Array using the reverse case-insensitive comparer:
   [0] : the
   [1] : The
   [2] : QUICK
   [3] : over
   [4] : lazy
   [5] : jumps
   [6] : FOX
   [7] : dog
   [8] : BROWN

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparer
IComparable
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort <(Of <(TKey, TValue >)>) 方法 ( array<TKey >[]()[], array<TValue >[]()[], Int32, Int32, IComparer <(Of <(TKey >)>))

Array
.
.
::
.
Sort
<
(Of
<
(
TKey, TValue
>
)
>
)
方法 (
array<
TKey
>
[]
()
[]
,
array<
TValue
>
[]
()
[]
, Int32, Int32, IComparer
<
(Of
<
(
TKey
>
)
>
)
)
Array 类

基于第一个 Array 中的关键字，使用指定的 IComparer<(Of <(T>)>) 泛型接口，对两个 Array 对象（一个包含关键字，另一个包含对应的项）的部分元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort(Of TKey, TValue) ( _
    keys As TKey(), _
    items As TValue(), _
    index As Integer, _
    length As Integer, _
    comparer As IComparer(Of TKey) _
)
public static void Sort<TKey, TValue>(
    TKey[] keys,
    TValue[] items,
    int index,
    int length,
    IComparer<TKey> comparer
)

public:
generic<typename TKey, typename TValue>
static void Sort(
    array<TKey>^ keys,
    array<TValue>^ items,
    int index,
    int length,
    IComparer<TKey>^ comparer
)
static member Sort :
        keys:'TKey[] *
        items:'TValue[] *
        index:int *
        length:int *
        comparer:IComparer<'TKey> -> unit

类型参数

TKey

关键字数组元素的类型。

TValue

项数组元素的类型。

参数

keys
类型：
array<
TKey
>
[]
()
[]

从零开始的一维 Array，它包含要排序的关键字。
items
类型：
array<
TValue
>
[]
()
[]

从零开始的一维 Array，其中包含与 keys 中的关键字对应的项；如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只对 keys 进行排序。
index
类型： System Int32
排序范围的起始索引。
length
类型： System Int32
排序范围内的元素数。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
TKey
>
)
>
)

比较元素时使用的 IComparer<(Of <(T>)>) 泛型接口实现；如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable<(Of <(T>)>) 泛型接口实现。
异常 | 条件
ArgumentNullException | keys 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于 keys 的下限。 - 或 - length 小于零。
ArgumentException | items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 keys 的下限与 items 的下限不匹配。 - 或 - items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keys 的长度与 items 的长度不匹配。 - 或 - index 和 length 未指定 keysArray 中的有效范围。 - 或 - items 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 index 和 length 未在 itemsArray 中指定有效范围。 - 或 - comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。 comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keysArray 中的一个或多个元素未实现 IComparable<(Of <(T>)>) 泛型接口。

keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 keysArray 中指定部分元素中的每个关键字均必须实现 IComparable<(Of <(T>)>) 泛型接口，才能与其他任何关键字进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[])、Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>))、Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32) 和 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 泛型方法重载，这些重载用于对表示关键字和值的数组对进行排序。

该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。 该代码示例为字符串定义一个名为 ReverseCompare 的备选比较器，该比较器实现 IComparer<string>（在 Visual Basic 中为 IComparer(Of String)，在 Visual C++ 中为 IComparer<String^>）泛型接口。该比较器调用 CompareTo(String) 方法，将比较数的顺序反转，以便字符串按降序而不是升序进行排序。

该代码示例创建并显示一个恐龙名称（关键字）数组和一个表示每种恐龙最大长度（以米为单位）的整数（值）数组。然后对数组进行多次排序和显示： 该代码示例创建并显示一个恐龙名称（关键字）数组和一个表示每种恐龙最大长度（以米为单位）的整数（值）数组。然后对数组进行多次排序和显示：

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[]) 重载按第一个数组中的恐龙名称顺序对两个数组进行排序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 重载和 ReverseCompare 的一个实例反转数组对的排序顺序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32) 重载对两个数组中的最后三个元素进行排序。

  • 使用 Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], Int32, Int32, IComparer<(Of <(TKey>)>)) 重载以相反的顺序对两个数组中的最后三个元素进行排序。

说明 说明

对泛型方法的调用与对其对应的非泛型方法的调用没什么分别，因为 Visual Basic、C# 和 C++ 都是从前两个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。 对泛型方法的调用与对其对应的非泛型方法的调用没什么分别，因为 Visual Basic、C# 和 C++ 都是从前两个参数的类型推断泛型类型参数的类型。如果您使用 Ildasm.exe（MSIL 反汇编程序） 检查 Microsoft 中间语言 (MSIL)，则可以看到正在调用泛型方法。

Imports System
Imports System.Collections.Generic

Public Class ReverseComparer
    Implements IComparer(Of String)

    Public Function Compare(ByVal x As String, _
        ByVal y As String) As Integer _
        Implements IComparer(Of String).Compare

        ' Compare y and x in reverse order.
        Return y.CompareTo(x)

    End Function
End Class

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { _
            "Seismosaurus", _
            "Chasmosaurus", _
            "Coelophysis", _
            "Mamenchisaurus", _
            "Caudipteryx", _
            "Cetiosaurus"  }

        Dim dinosaurSizes() As Integer = { 40, 5, 3, 22, 1, 18 }

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes)")
        Array.Sort(dinosaurs, dinosaurSizes)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Dim rc As New ReverseComparer()

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, rc)")
        Array.Sort(dinosaurs, dinosaurSizes, rc)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, 3, 3)")
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

        Console.WriteLine(vbLf & _
            "Sort(dinosaurs, dinosaurSizes, 3, 3, rc)")
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

        Console.WriteLine()
        For i As Integer = 0 To dinosaurs.Length - 1
            Console.WriteLine("{0}: up to {1} meters long.", _
                dinosaurs(i), dinosaurSizes(i))
        Next

    End Sub

End Class

' This code example produces the following output:
'
'Seismosaurus: up to 40 meters long.
'Chasmosaurus: up to 5 meters long.
'Coelophysis: up to 3 meters long.
'Mamenchisaurus: up to 22 meters long.
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'
'Sort(dinosaurs, dinosaurSizes)
'
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'Chasmosaurus: up to 5 meters long.
'Coelophysis: up to 3 meters long.
'Mamenchisaurus: up to 22 meters long.
'Seismosaurus: up to 40 meters long.
'
'Sort(dinosaurs, dinosaurSizes, rc)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Chasmosaurus: up to 5 meters long.
'Cetiosaurus: up to 18 meters long.
'Caudipteryx: up to 1 meters long.
'
'Sort(dinosaurs, dinosaurSizes, 3, 3)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Caudipteryx: up to 1 meters long.
'Cetiosaurus: up to 18 meters long.
'Chasmosaurus: up to 5 meters long.
'
'Sort(dinosaurs, dinosaurSizes, 3, 3, rc)
'
'Seismosaurus: up to 40 meters long.
'Mamenchisaurus: up to 22 meters long.
'Coelophysis: up to 3 meters long.
'Chasmosaurus: up to 5 meters long.
'Cetiosaurus: up to 18 meters long.
'Caudipteryx: up to 1 meters long.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

using namespace System;
using namespace System::Collections::Generic;

public ref class ReverseComparer: IComparer<String^>
{
public:
    virtual int Compare(String^ x, String^ y)
    {
        // Compare y and x in reverse order.
        return y->CompareTo(x);
    }
};

void main()
{
    array<String^>^ dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

    array<int>^ dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes)");
    Array::Sort(dinosaurs, dinosaurSizes);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    ReverseComparer^ rc = gcnew ReverseComparer();

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
    Array::Sort(dinosaurs, dinosaurSizes, rc);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
    Array::Sort(dinosaurs, dinosaurSizes, 3, 3);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }

    Console::WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
    Array::Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

    Console::WriteLine();
    for (int i = 0; i < dinosaurs->Length; i++)
    {
        Console::WriteLine("{0}: up to {1} meters long.",
            dinosaurs[i], dinosaurSizes[i]);
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparer T
IComparable T
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.Sort 方法 (Array, Array, Int32, Int32, IComparer)

Array
.
.
::
.
Sort 方法 (Array, Array, Int32, Int32, IComparer)
Array 类

基于第一个 Array 中的关键字，使用指定的 IComparer，对两个一维 Array 对象（一个包含关键字，另一个包含对应的项）的部分元素进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Sort ( _
    keys As Array, _
    items As Array, _
    index As Integer, _
    length As Integer, _
    comparer As IComparer _
)
public static void Sort(
    Array keys,
    Array items,
    int index,
    int length,
    IComparer comparer
)
public:
static void Sort(
    Array^ keys,
    Array^ items,
    int index,
    int length,
    IComparer^ comparer
)
static member Sort :
        keys:Array *
        items:Array *
        index:int *
        length:int *
        comparer:IComparer -> unit

参数

keys
类型： System Array
一维 Array，它包含要排序的关键字。
items
类型： System Array
一维 Array，它包含与 keysArray 中的每一个关键字对应的项。
- 或 -
如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只对 keysArray 进行排序。
index
类型： System Int32
排序范围的起始索引。
length
类型： System Int32
排序范围内的元素数。
comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用每个元素的 IComparable 实现。
异常 | 条件
ArgumentNullException | keys 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RankException | keysArray 是多维的。 - 或 - itemsArray 是多维的。
ArgumentOutOfRangeException | index 小于 keys 的下限。 - 或 - length 小于零。
ArgumentException | items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 keys 的下限与 items 的下限不匹配。 - 或 - items 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keys 的长度与 items 的长度不匹配。 - 或 - index 和 length 未指定 keysArray 中的有效范围。 - 或 - items 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 index 和 length 未在 itemsArray 中指定有效范围。 - 或 - comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。 comparer 的实现导致排序时出现错误。例如，将某个项与其自身进行比较时，comparer 可能不返回 0。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 keysArray 中的一个或多个元素不实现 IComparable 接口。

keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。 keysArray 中的每个关键字在 itemsArray 中都有对应项。当关键字在排序过程中重新定位时，itemsArray 中的对应项也同样重新定位。因此，itemsArray 根据 keysArray 中对应关键字的排列进行排序。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 keysArray 中指定部分元素中的每个关键字均必须实现 IComparable 接口，才能与其他任何关键字进行比较。

如果排序不能成功地完成，则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。 此方法使用 QuickSort 算法。此实现执行不稳定排序；亦即，如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 是 length；最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示如何对两个关联的数组进行排序，其中第一个数组包含关键字，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。 下面的代码示例演示如何对两个关联的数组进行排序，其中第一个数组包含关键字，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。 下面的代码示例演示如何对两个关联的数组进行排序，其中第一个数组包含关键字，第二个数组包含值。排序是使用默认比较器和一个反转排序顺序的自定义比较器完成的。请注意，结果可能因当前 CultureInfo 而异。

Imports System
Imports System.Collections

Public Class SamplesArray

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Function Compare(x As [Object], y As [Object]) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new Array and a new custom comparer.
      Dim myKeys As [String]() =  {"red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange"}
      Dim myValues As [String]() =  {"strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe"}
      Dim myComparer = New myReverserClass()

      ' Displays the values of the Array.
      Console.WriteLine("The Array initially contains the following values:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts a section of the Array using the default comparer.
      Array.Sort(myKeys, myValues, 1, 3)
      Console.WriteLine("After sorting a section of the Array using the default comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort(myKeys, myValues, 1, 3, myComparer)
      Console.WriteLine("After sorting a section of the Array using the reverse case-insensitive comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts the entire Array using the default comparer.
      Array.Sort(myKeys, myValues)
      Console.WriteLine("After sorting the entire Array using the default comparer:")
      PrintKeysAndValues(myKeys, myValues)

      ' Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort(myKeys, myValues, myComparer)
      Console.WriteLine("After sorting the entire Array using the reverse case-insensitive comparer:")
      PrintKeysAndValues(myKeys, myValues)

   End Sub 'Main

   Public Shared Sub PrintKeysAndValues(myKeys() As [String], myValues() As [String])

      Dim i As Integer
      For i = 0 To myKeys.Length - 1
         Console.WriteLine("   {0,-10}: {1}", myKeys(i), myValues(i))
      Next i
      Console.WriteLine()

   End Sub 'PrintKeysAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The Array initially contains the following values:
'   red       : strawberries
'   GREEN     : PEARS
'   YELLOW    : LIMES
'   BLUE      : BERRIES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting a section of the Array using the default comparer:
'   red       : strawberries
'   BLUE      : BERRIES
'   GREEN     : PEARS
'   YELLOW    : LIMES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting a section of the Array using the reverse case-insensitive comparer:
'   red       : strawberries
'   YELLOW    : LIMES
'   GREEN     : PEARS
'   BLUE      : BERRIES
'   purple    : grapes
'   black     : olives
'   orange    : cantaloupe
'
'After sorting the entire Array using the default comparer:
'   black     : olives
'   BLUE      : BERRIES
'   GREEN     : PEARS
'   orange    : cantaloupe
'   purple    : grapes
'   red       : strawberries
'   YELLOW    : LIMES
'
'After sorting the entire Array using the reverse case-insensitive comparer:
'   YELLOW    : LIMES
'   red       : strawberries
'   purple    : grapes
'   orange    : cantaloupe
'   GREEN     : PEARS
'   BLUE      : BERRIES
'   black     : olives

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}

/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

using namespace System;
using namespace System::Collections;

public ref class myReverserClass: public IComparer
{
private:

   // Calls CaseInsensitiveComparer::Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }
};

void PrintKeysAndValues( array<String^>^myKeys, array<String^>^myValues )
{
   for ( int i = 0; i < myKeys->Length; i++ )
   {
      Console::WriteLine( " {0, -10}: {1}", myKeys[ i ], myValues[ i ] );
   }
   Console::WriteLine();
}

int main()
{
   // Creates and initializes a new Array and a new custom comparer.
   array<String^>^myKeys = {"red","GREEN","YELLOW","BLUE","purple","black","orange"};
   array<String^>^myValues = {"strawberries","PEARS","LIMES","BERRIES","grapes","olives","cantaloupe"};
   IComparer^ myComparer = gcnew myReverserClass;

   // Displays the values of the Array.
   Console::WriteLine( "The Array initially contains the following values:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts a section of the Array using the default comparer.
   Array::Sort( myKeys, myValues, 1, 3 );
   Console::WriteLine( "After sorting a section of the Array using the default comparer:" );

   // Sorts a section of the Array using the reverse case-insensitive comparer.
   Array::Sort( myKeys, myValues, 1, 3, myComparer );
   Console::WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts the entire Array using the default comparer.
   Array::Sort( myKeys, myValues );
   Console::WriteLine( "After sorting the entire Array using the default comparer:" );
   PrintKeysAndValues( myKeys, myValues );

   // Sorts the entire Array using the reverse case-insensitive comparer.
   Array::Sort( myKeys, myValues, myComparer );
   Console::WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
   PrintKeysAndValues( myKeys, myValues );
}

/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
Sort 重载
System 命名空间
IComparer
IComparable
BinarySearch

其他资源

在数组中执行不区分区域性的字符串操作


Array ..::.TrueForAll <(Of <(T >)>) 方法

Array
.
.
::
.
TrueForAll
<
(Of
<
(
T
>
)
>
)
方法
Array 类

确定数组中的每个元素是否都与指定谓词定义的条件匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TrueForAll(Of T) ( _
    array As T(), _
    match As Predicate(Of T) _
) As Boolean
public static bool TrueForAll<T>(
    T[] array,
    Predicate<T> match
)

public:
generic<typename T>
static bool TrueForAll(
    array<T>^ array,
    Predicate<T>^ match
)
static member TrueForAll :
        array:'T[] *
        match:Predicate<'T> -> bool

类型参数

T

数组元素的类型。

参数

array
类型：
array<
T
>
[]
()
[]

要对照条件进行检查的从零开始的一维 Array
match
类型： System Predicate
<
(Of
<
(
T
>
)
>
)

Predicate<(Of <(T>)>) 定义检查元素时要对照的条件。

返回值

类型： System Boolean
如果 array 中的每个元素都与指定谓词定义的条件匹配，则为 true；否则为 false。如果数组中没有元素，则返回值为 true。 如果 array 中的每个元素都与指定谓词定义的条件匹配，则为 true；否则为 false。如果数组中没有元素，则返回值为 true。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - match 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，当该委托为任何元素返回 false 时处理就会停止。 Predicate<(Of <(T>)>) 是对方法的委托，如果传递给它的对象与委托中定义的条件匹配，则该方法返回 true。array 的元素被逐个传递给 Predicate<(Of <(T>)>)，当该委托为任何元素返回 false 时处理就会停止。

此方法的运算复杂度为 O(n)，其中 n 是 array 的 Length。

下面的代码示例演示 TrueForAll<(Of <(T>)>) 泛型方法和使用 Predicate<(Of <(T>)>) 泛型委托的其他几种泛型方法。

创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。 创建一个包含 8 个恐龙名称的字符串数组，其中有 2 个名称（分别位于位置 1 和 5）以“saurus”结尾。该代码示例还定义了一个名为 EndsWithSaurus 的搜索谓词方法，该方法接受一个字符串作为参数，并返回一个布尔值，指示输入的字符串是否以“saurus”结尾。

Exists<(Of <(T>)>) 方法在预测方法为其返回 true 的第一个元素（在本例中为“Amargasaurus”）处停止并返回 true。

说明 说明

在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。 在 C# 和 Visual Basic 中，不必显式创建 Predicate<string> 委托（在 Visual Basic 中为 Predicate(Of String)）。这些语言会通过上下文推知正确的委托，并自动创建委托。

TrueForAll<(Of <(T>)>) 方法在预测方法为其返回 false 的第一个元素处停止并返回 false。

Find<(Of <(T>)>) 方法从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对元素“Amargasaurus”返回 true 时，搜索停止。 Find<(Of <(T>)>) 方法从开始处遍历数组，依次将每个元素传递给 EndsWithSaurus 方法。当 EndsWithSaurus 方法对元素“Amargasaurus”返回 true 时，搜索停止。

使用 FindLast<(Of <(T>)>) 方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。 使用 FindLast<(Of <(T>)>) 方法从末尾处向后搜索数组。它在位置 5 处找到元素 "Dilophosaurus"。FindAll<(Of <(T>)>) 方法用于返回包含以 "saurus" 结尾的所有元素的数组。显示这些元素。

Imports System

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.Exists(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.Exists(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus: {0}", _
            Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.Find(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.Find(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindLast(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindLast(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindAll(dinosaurs, AddressOf EndsWithSaurus):")
        Dim subArray() As String = _
            Array.FindAll(dinosaurs, AddressOf EndsWithSaurus)

        For Each dinosaur As String In subArray
            Console.WriteLine(dinosaur)
        Next

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.Exists(dinosaurs, AddressOf EndsWithSaurus): True
'
'Array.TrueForAll(dinosaurs, AddressOf EndsWithSaurus: False
'
'Array.Find(dinosaurs, AddressOf EndsWithSaurus): Amargasaurus
'
'Array.FindLast(dinosaurs, AddressOf EndsWithSaurus): Dilophosaurus
'
'Array.FindAll(dinosaurs, AddressOf EndsWithSaurus):
'Amargasaurus
'Dilophosaurus

using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.Exists(dinosaurs, EndsWithSaurus): {0}",
            Array.Exists(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.TrueForAll(dinosaurs, EndsWithSaurus): {0}",
            Array.TrueForAll(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.Find(dinosaurs, EndsWithSaurus): {0}",
            Array.Find(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindLast(dinosaurs, EndsWithSaurus): {0}",
            Array.FindLast(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindAll(dinosaurs, EndsWithSaurus):");
        string[] subArray =
            Array.FindAll(dinosaurs, EndsWithSaurus);

        foreach(string dinosaur in subArray)
        {
            Console.WriteLine(dinosaur);
        }
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.Exists(dinosaurs, EndsWithSaurus): True

Array.TrueForAll(dinosaurs, EndsWithSaurus): False

Array.Find(dinosaurs, EndsWithSaurus): Amargasaurus

Array.FindLast(dinosaurs, EndsWithSaurus): Dilophosaurus

Array.FindAll(dinosaurs, EndsWithSaurus):
Amargasaurus
Dilophosaurus
 */

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) &&
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus",
        "Amargasaurus",   "Oviraptor",      "Velociraptor",
        "Deinonychus",    "Dilophosaurus",  "Gallimimus",
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::Exists(dinosaurs, EndsWithSaurus): {0}",
        Array::Exists(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::TrueForAll(dinosaurs, EndsWithSaurus): {0}",
        Array::TrueForAll(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::Find(dinosaurs, EndsWithSaurus): {0}",
        Array::Find(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindLast(dinosaurs, EndsWithSaurus): {0}",
        Array::FindLast(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindAll(dinosaurs, EndsWithSaurus):");
    array<String^>^ subArray =
        Array::FindAll(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus));

    for each(String^ dinosaur in subArray)
    {
        Console::WriteLine(dinosaur);
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::Exists(dinosaurs, EndsWithSaurus): True

Array::TrueForAll(dinosaurs, EndsWithSaurus): False

Array::Find(dinosaurs, EndsWithSaurus): Amargasaurus

Array::FindLast(dinosaurs, EndsWithSaurus): Dilophosaurus

Array::FindAll(dinosaurs, EndsWithSaurus):
Amargasaurus
Dilophosaurus
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
Exists T
Predicate T


Array 属性

Array 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Array 类

Array 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Array 类
System 命名空间


Array ..::.ICollection ..::.Count 属性

Array
.
.
::
.
ICollection
.
.
::
.
Count 属性
Array 类

获取 Array 中包含的元素数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property Count As Integer
    Implements ICollection.Count
    Get
int ICollection.Count { get; }
private:
virtual property int Count {
    int get () sealed = ICollection::Count::get;
}
private abstract Count : int
private override Count : int

属性值

类型： System Int32
T:System.Collections.ICollection 中包含的元素数。

实现

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.ICollection 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.ICollection 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IList ..::.Item 属性

Array
.
.
::
.
IList
.
.
::
.
Item 属性
Array 类

获取或设置指定索引处的元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Property Item ( _
    index As Integer _
) As Object Implements IList.Item
    Get
    Set
Object IList.this[
    int index
] { get; set; }
private:
virtual property Object^ Item[int index] {
    Object^ get (int index) sealed = IList::Item::get;
    void set (int index, Object^ value) sealed = IList::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

index
类型： System Int32
要获取或设置的元素的索引。

属性值

类型： System Object
指定索引处的元素。

实现

异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 等于或大于 ICollection..::.Count。
ArgumentException | 当前的 Array 不是正好有一维。

此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。 此成员是显式的接口成员实现。只能在 Array 实例强制转换为 T:System.Collections.IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间


Array ..::.IsFixedSize 属性

Array
.
.
::
.
IsFixedSize 属性
Array 类

获取一个值，该值指示 Array 是否具有固定大小。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsFixedSize As Boolean
    Get
public bool IsFixedSize { get; }
public:
virtual property bool IsFixedSize {
    bool get () sealed;
}
abstract IsFixedSize : bool
override IsFixedSize : bool

属性值

类型： System Boolean
此属性对于所有数组总是 true。

实现

Array 实现 IsFixedSize 属性，因为这是 System.Collections..::.IList 接口所需要的。

具有固定大小的数组在创建之后不允许添加或移除元素，但允许修改现有元素。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
System.Collections IList
System.Collections.Generic IList T


Array ..::.IsReadOnly 属性

Array
.
.
::
.
IsReadOnly 属性
Array 类

获取一个值，该值指示 Array 是否为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsReadOnly As Boolean
    Get
public bool IsReadOnly { get; }
public:
virtual property bool IsReadOnly {
    bool get () sealed;
}
abstract IsReadOnly : bool
override IsReadOnly : bool

属性值

类型： System Boolean
此属性对于所有数组总是 false。

实现

Array 实现 IsReadOnly 属性，因为这是 System.Collections..::.IList 接口所需要的。

如果需要只读集合，请使用实现 System.Collections..::.IList 接口的 System.Collections 类。

只读数组在创建之后不允许添加、移除或修改元素。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
System.Collections IList
System.Collections
System.Collections.Generic IList T
System.Collections.Generic


Array ..::.IsSynchronized 属性

Array
.
.
::
.
IsSynchronized 属性
Array 类

获取一个值，该值指示是否同步对 Array 的访问（线程安全）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsSynchronized As Boolean
    Get
public bool IsSynchronized { get; }
public:
virtual property bool IsSynchronized {
    bool get () sealed;
}
abstract IsSynchronized : bool
override IsSynchronized : bool

属性值

类型： System Boolean
此属性对于所有数组总是 false。

实现

Array 实现 IsSynchronized 属性，因为这是 System.Collections..::.ICollection 接口所需要的。

基于 Array 的 .NET Framework 类使用 SyncRoot 属性提供它们自己的集合同步版本。

使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。 使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。 使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。 使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。 使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例演示如何使用 SyncRoot 属性在整个枚举过程中锁定数组。

Dim myArray As Array = New Integer() { 1, 2, 4 }
SyncLock(myArray.SyncRoot)
    For Each item As Object In myArray
        Console.WriteLine(item)
    Next
End SyncLock

Array myArray = new int[] { 1, 2, 4 };
lock(myArray.SyncRoot)
{
    foreach (Object item in myArray)
        Console.WriteLine(item);
}

Array^ myArray = gcnew array<Int32> { 1, 2, 4 };
try
{
    Monitor::Enter(myArray->SyncRoot);

    for each (Int32 item in myArray)
        Console::WriteLine(item);
}
finally
{
    Monitor::Exit(myArray->SyncRoot);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
SyncRoot
System.Collections ICollection


Array ..::.Length 属性

Array
.
.
::
.
Length 属性
Array 类

获得一个 32 位整数，该整数表示 Array 的所有维数中元素的总数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Length As Integer
    Get
public int Length { get; }
public:
property int Length {
    int get ();
}
member Length : int

属性值

类型： System Int32
一个 32 位整数，该整数表示 Array 的所有维数中的元素总数；如果数组中没有元素，则该值为零。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
GetLength
LongLength
ICollection Count
Rank


Array ..::.LongLength 属性

Array
.
.
::
.
LongLength 属性
Array 类

获得一个 64 位整数，该整数表示 Array 的所有维数中元素的总数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public ReadOnly Property LongLength As Long
    Get
[ComVisibleAttribute(false)]
public long LongLength { get; }
[ComVisibleAttribute(false)]
public:
property long long LongLength {
    long long get ();
}
[<ComVisibleAttribute(false)>]
member LongLength : int64

属性值

类型： System Int64
一个 64 位整数，表示 Array 的所有维数中元素的总数。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Array 类
Array 成员
System 命名空间
GetLongLength
Length
ICollection Count
Rank


Array ..::.Rank 属性

Array
.
.
::
.
Rank 属性
Array 类

获取 Array 的从零开始的秩（维数）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Rank As Integer
    Get
public int Rank { get; }
public:
property int Rank {
    int get ();
}
member Rank : int

属性值

类型： System Int32
Array 的从零开始的秩（维数）。

例如，Visual Basic 代码 Dim 3DArray(0,0,0) As Integer 创建级别为 2 的三维数组。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
Length
GetLength
LongLength
GetLongLength


Array ..::.SyncRoot 属性

Array
.
.
::
.
SyncRoot 属性
Array 类

获取可用于同步 Array 访问的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property SyncRoot As Object
    Get
public Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get () sealed;
}
abstract SyncRoot : Object
override SyncRoot : Object

属性值

类型： System Object
可用于同步对 Array 的访问的对象。

实现

此属性实现 System.Collections..::.ICollection 接口。

基于 Array 的 .NET Framework 类使用 SyncRoot 属性提供它们自己的集合同步版本。

使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。 使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。 使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。 使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。 使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作，而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合的其他线程保持适当的同步。请注意，SyncRoot 的一些实现可能返回 Array 本身。

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例演示如何使用 SyncRoot 属性在整个枚举过程中锁定数组。

Dim myArray As Array = New Integer() { 1, 2, 4 }
SyncLock(myArray.SyncRoot)
    For Each item As Object In myArray
        Console.WriteLine(item)
    Next
End SyncLock

Array myArray = new int[] { 1, 2, 4 };
lock(myArray.SyncRoot)
{
    foreach (Object item in myArray)
        Console.WriteLine(item);
}

Array^ myArray = gcnew array<Int32> { 1, 2, 4 };
try
{
    Monitor::Enter(myArray->SyncRoot);

    for each (Int32 item in myArray)
        Console::WriteLine(item);
}
finally
{
    Monitor::Exit(myArray->SyncRoot);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Array 类
Array 成员
System 命名空间
IsSynchronized


ArraySegment <(Of <(T >)>) 结构

ArraySegment
<
(Of
<
(
T
>
)
>
)
结构
成员

分隔一维数组的一部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Structure ArraySegment(Of T)
[SerializableAttribute]
public struct ArraySegment<T>

[SerializableAttribute]
generic<typename T>
public value class ArraySegment
[<SealedAttribute>]
[<SerializableAttribute>]
type ArraySegment<'T> =  struct end

类型参数

T

数组段中元素的类型。

ArraySegment<(Of <(T>)>) 是某个数组的包装，用于对该数组中元素的范围进行分隔。多个 ArraySegment<(Of <(T>)>) 实例可以引用同一个原始数组，从而可能发生重叠。 ArraySegment<(Of <(T>)>) 是某个数组的包装，用于对该数组中元素的范围进行分隔。多个 ArraySegment<(Of <(T>)>) 实例可以引用同一个原始数组，从而可能发生重叠。

Array 属性返回整个原始数组，而不是该数组的副本；因此，由 Array 属性返回的对该数组所做的更改将作用于原始数组。

原始数组必须是一维数组，并且必须具有从零开始的索引。

下面的代码示例将 ArraySegment<(Of <(T>)>) 结构传递给一个方法。

Imports System

Public Class SamplesArray

    Public Shared Sub Main()

        ' Create and initialize a new string array.
        Dim myArr As String() =  {"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"}

        ' Display the initial contents of the array.
        Console.WriteLine("The original array initially contains:")
        PrintIndexAndValues(myArr)

        ' Define an array segment that contains the entire array.
        Dim myArrSegAll As New ArraySegment(Of String)(myArr)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The first array segment (with all the array's elements) contains:")
        PrintIndexAndValues(myArrSegAll)

        ' Define an array segment that contains the middle five values of the array.
        Dim myArrSegMid As New ArraySegment(Of String)(myArr, 2, 5)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The second array segment (with the middle five elements) contains:")
        PrintIndexAndValues(myArrSegMid)

        ' Modify the fourth element of the first array segment myArrSegAll.
        myArrSegAll.Array(3) = "LION"

        ' Display the contents of the second array segment myArrSegMid.
        ' Note that the value of its second element also changed.
        Console.WriteLine("After the first array segment is modified, the second array segment now contains:")
        PrintIndexAndValues(myArrSegMid)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(arrSeg As ArraySegment(Of String))
        Dim i As Integer
        For i = arrSeg.Offset To (arrSeg.Offset + arrSeg.Count - 1)
            Console.WriteLine("   [{0}] : {1}", i, arrSeg.Array(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    Public Shared Sub PrintIndexAndValues(myArr as String())
        Dim i As Integer
        For i = 0 To (myArr.Length - 1)
            Console.WriteLine("   [{0}] : {1}", i, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The original array initially contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The first array segment (with all the array's elements) contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The second array segment (with the middle five elements) contains:
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'
'After the first array segment is modified, the second array segment now contains:
'   [2] : brown
'   [3] : LION
'   [4] : jumps
'   [5] : over
'   [6] : the

using System;

public class SamplesArray  {

   public static void Main()  {

      // Create and initialize a new string array.
      String[] myArr = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" };

      // Display the initial contents of the array.
      Console.WriteLine( "The original array initially contains:" );
      PrintIndexAndValues( myArr );

      // Define an array segment that contains the entire array.
      ArraySegment<String> myArrSegAll = new ArraySegment<String>( myArr );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The first array segment (with all the array's elements) contains:" );
      PrintIndexAndValues( myArrSegAll );

      // Define an array segment that contains the middle five values of the array.
      ArraySegment<String> myArrSegMid = new ArraySegment<String>( myArr, 2, 5 );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The second array segment (with the middle five elements) contains:" );
      PrintIndexAndValues( myArrSegMid );

      // Modify the fourth element of the first array segment myArrSegAll.
      myArrSegAll.Array[3] = "LION";

      // Display the contents of the second array segment myArrSegMid.
      // Note that the value of its second element also changed.
      Console.WriteLine( "After the first array segment is modified, the second array segment now contains:" );
      PrintIndexAndValues( myArrSegMid );

   }

   public static void PrintIndexAndValues( ArraySegment<String> arrSeg )  {
      for ( int i = arrSeg.Offset; i < (arrSeg.Offset + arrSeg.Count); i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arrSeg.Array[i] );
      }
      Console.WriteLine();
   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The original array initially contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The first array segment (with all the array's elements) contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The second array segment (with the middle five elements) contains:
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the

After the first array segment is modified, the second array segment now contains:
   [2] : brown
   [3] : LION
   [4] : jumps
   [5] : over
   [6] : the

*/

using namespace System;

namespace Sample
{
    public ref class SampleArray
    {
    public:
        static void Work()
        {

            // Create and initialize a new string array.
            array <String^>^ words = {"The", "quick", "brown",
                "fox", "jumps", "over", "the", "lazy", "dog"};

            // Display the initial contents of the array.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(words);

            // Define an array segment that contains the entire array.
            ArraySegment<String^> segment(words);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(segment);

            // Define an array segment that contains the middle five
            // values of the array.
            ArraySegment<String^> middle(words, 2, 5);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The second array segment"
                " (with the middle five elements) contains:");
            PrintIndexAndValues(middle);

            // Modify the fourth element of the first array
            // segment
            segment.Array[3] = "LION";

            // Display the contents of the second array segment
            // middle. Note that the value of its second element
            // also changed.
            Console::WriteLine("After the first array segment"
                " is modified,the second array segment"
                " now contains:");
            PrintIndexAndValues(middle);
            Console::ReadLine();
        }

        static void PrintIndexAndValues(ArraySegment<String^>^ segment)
        {
            for (int i = segment->Offset;
                i < (segment->Offset + segment->Count); i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    segment->Array[i]);
            }
            Console::WriteLine();
        }

        static void PrintIndexAndValues(array<String^>^ words)
        {
            for (int i = 0; i < words->Length; i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    words[i]);
            }
            Console::WriteLine();
        }
    };
}

int main()
{
    Sample::SampleArray::Work();
    return 0;
}

    /*
    This code produces the following output.

    The original array initially contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The first array segment (with all the array's elements) contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The second array segment (with the middle five elements) contains:
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the

    After the first array segment is modified, the second array segment now contains:
    [2] : brown
    [3] : LION
    [4] : jumps
    [5] : over
    [6] : the

    */
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 成员
System 命名空间
System Array


ArraySegment <(Of <(T >)>) 成员

ArraySegment
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArraySegment

分隔一维数组的一部分。

ArraySegment T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ArraySegment T 结构
System 命名空间


ArraySegment <(Of <(T >)>) 构造函数

ArraySegment
<
(Of
<
(
T
>
)
>
)
构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArraySegment

初始化 ArraySegment<(Of <(T>)>) 结构的新实例。

名称 说明
页首

参考

ArraySegment T 结构
ArraySegment T 成员
System 命名空间


ArraySegment <(Of <(T >)>) 构造函数 ( array<T >[]()[])

ArraySegment
<
(Of
<
(
T
>
)
>
)
构造函数 (
array<
T
>
[]
()
[]
)
ArraySegment

初始化 ArraySegment<(Of <(T>)>) 结构的新实例，它分隔指定数组中的所有元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    array As T() _
)
public ArraySegment(
    T[] array
)
public:
ArraySegment(
    array<T>^ array
)
new :
        array:'T[] -> ArraySegment

参数

array
类型：
array<
T
>
[]
()
[]

要包装的数组。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此构造函数创建一个 ArraySegment<(Of <(T>)>)，它用于分隔 array 的所有元素。也就是说，ArraySegment<(Of <(T>)>) 的 Offset 属性为 0，并且它的 Count 属性为 array 的长度。要创建仅分隔部分数组的 ArraySegment<(Of <(T>)>)，请使用 ArraySegment<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 构造函数。 此构造函数创建一个 ArraySegment<(Of <(T>)>)，它用于分隔 array 的所有元素。也就是说，ArraySegment<(Of <(T>)>) 的 Offset 属性为 0，并且它的 Count 属性为 array 的长度。要创建仅分隔部分数组的 ArraySegment<(Of <(T>)>)，请使用 ArraySegment<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 构造函数。 此构造函数创建一个 ArraySegment<(Of <(T>)>)，它用于分隔 array 的所有元素。也就是说，ArraySegment<(Of <(T>)>) 的 Offset 属性为 0，并且它的 Count 属性为 array 的长度。要创建仅分隔部分数组的 ArraySegment<(Of <(T>)>)，请使用 ArraySegment<(Of <(T>)>)(array<T>[]()[], Int32, Int32) 构造函数。

原始数组必须是一维数组，并且必须具有从零开始的索引。

多个 ArraySegment<(Of <(T>)>) 实例可以引用同一个原始数组，从而可能发生重叠。

下面的代码示例将 ArraySegment<(Of <(T>)>) 结构传递给一个方法。

Imports System

Public Class SamplesArray

    Public Shared Sub Main()

        ' Create and initialize a new string array.
        Dim myArr As String() =  {"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"}

        ' Display the initial contents of the array.
        Console.WriteLine("The original array initially contains:")
        PrintIndexAndValues(myArr)

        ' Define an array segment that contains the entire array.
        Dim myArrSegAll As New ArraySegment(Of String)(myArr)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The first array segment (with all the array's elements) contains:")
        PrintIndexAndValues(myArrSegAll)

        ' Define an array segment that contains the middle five values of the array.
        Dim myArrSegMid As New ArraySegment(Of String)(myArr, 2, 5)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The second array segment (with the middle five elements) contains:")
        PrintIndexAndValues(myArrSegMid)

        ' Modify the fourth element of the first array segment myArrSegAll.
        myArrSegAll.Array(3) = "LION"

        ' Display the contents of the second array segment myArrSegMid.
        ' Note that the value of its second element also changed.
        Console.WriteLine("After the first array segment is modified, the second array segment now contains:")
        PrintIndexAndValues(myArrSegMid)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(arrSeg As ArraySegment(Of String))
        Dim i As Integer
        For i = arrSeg.Offset To (arrSeg.Offset + arrSeg.Count - 1)
            Console.WriteLine("   [{0}] : {1}", i, arrSeg.Array(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    Public Shared Sub PrintIndexAndValues(myArr as String())
        Dim i As Integer
        For i = 0 To (myArr.Length - 1)
            Console.WriteLine("   [{0}] : {1}", i, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The original array initially contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The first array segment (with all the array's elements) contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The second array segment (with the middle five elements) contains:
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'
'After the first array segment is modified, the second array segment now contains:
'   [2] : brown
'   [3] : LION
'   [4] : jumps
'   [5] : over
'   [6] : the

using System;

public class SamplesArray  {

   public static void Main()  {

      // Create and initialize a new string array.
      String[] myArr = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" };

      // Display the initial contents of the array.
      Console.WriteLine( "The original array initially contains:" );
      PrintIndexAndValues( myArr );

      // Define an array segment that contains the entire array.
      ArraySegment<String> myArrSegAll = new ArraySegment<String>( myArr );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The first array segment (with all the array's elements) contains:" );
      PrintIndexAndValues( myArrSegAll );

      // Define an array segment that contains the middle five values of the array.
      ArraySegment<String> myArrSegMid = new ArraySegment<String>( myArr, 2, 5 );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The second array segment (with the middle five elements) contains:" );
      PrintIndexAndValues( myArrSegMid );

      // Modify the fourth element of the first array segment myArrSegAll.
      myArrSegAll.Array[3] = "LION";

      // Display the contents of the second array segment myArrSegMid.
      // Note that the value of its second element also changed.
      Console.WriteLine( "After the first array segment is modified, the second array segment now contains:" );
      PrintIndexAndValues( myArrSegMid );

   }

   public static void PrintIndexAndValues( ArraySegment<String> arrSeg )  {
      for ( int i = arrSeg.Offset; i < (arrSeg.Offset + arrSeg.Count); i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arrSeg.Array[i] );
      }
      Console.WriteLine();
   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The original array initially contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The first array segment (with all the array's elements) contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The second array segment (with the middle five elements) contains:
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the

After the first array segment is modified, the second array segment now contains:
   [2] : brown
   [3] : LION
   [4] : jumps
   [5] : over
   [6] : the

*/

using namespace System;

namespace Sample
{
    public ref class SampleArray
    {
    public:
        static void Work()
        {

            // Create and initialize a new string array.
            array <String^>^ words = {"The", "quick", "brown",
                "fox", "jumps", "over", "the", "lazy", "dog"};

            // Display the initial contents of the array.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(words);

            // Define an array segment that contains the entire array.
            ArraySegment<String^> segment(words);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(segment);

            // Define an array segment that contains the middle five
            // values of the array.
            ArraySegment<String^> middle(words, 2, 5);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The second array segment"
                " (with the middle five elements) contains:");
            PrintIndexAndValues(middle);

            // Modify the fourth element of the first array
            // segment
            segment.Array[3] = "LION";

            // Display the contents of the second array segment
            // middle. Note that the value of its second element
            // also changed.
            Console::WriteLine("After the first array segment"
                " is modified,the second array segment"
                " now contains:");
            PrintIndexAndValues(middle);
            Console::ReadLine();
        }

        static void PrintIndexAndValues(ArraySegment<String^>^ segment)
        {
            for (int i = segment->Offset;
                i < (segment->Offset + segment->Count); i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    segment->Array[i]);
            }
            Console::WriteLine();
        }

        static void PrintIndexAndValues(array<String^>^ words)
        {
            for (int i = 0; i < words->Length; i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    words[i]);
            }
            Console::WriteLine();
        }
    };
}

int main()
{
    Sample::SampleArray::Work();
    return 0;
}

    /*
    This code produces the following output.

    The original array initially contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The first array segment (with all the array's elements) contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The second array segment (with the middle five elements) contains:
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the

    After the first array segment is modified, the second array segment now contains:
    [2] : brown
    [3] : LION
    [4] : jumps
    [5] : over
    [6] : the

    */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
ArraySegment T 重载
System 命名空间
System Array


ArraySegment <(Of <(T >)>) 构造函数 ( array<T >[]()[], Int32, Int32)

ArraySegment
<
(Of
<
(
T
>
)
>
)
构造函数 (
array<
T
>
[]
()
[]
, Int32, Int32)
ArraySegment

初始化 ArraySegment<(Of <(T>)>) 结构的新实例，它分隔指定数组中指定的元素范围。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    array As T(), _
    offset As Integer, _
    count As Integer _
)
public ArraySegment(
    T[] array,
    int offset,
    int count
)
public:
ArraySegment(
    array<T>^ array,
    int offset,
    int count
)
new :
        array:'T[] *
        offset:int *
        count:int -> ArraySegment

参数

array
类型：
array<
T
>
[]
()
[]

包含要分隔的元素范围的数组。
offset
类型： System Int32
相应范围中第一个元素的从零开始的索引。
count
类型： System Int32
范围中的元素数。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | offset 或 count 小于 0。
ArgumentException | offset 和 count 不指定 array 中的有效范围。

原始数组必须是一维数组，并且必须具有从零开始的索引。

多个 ArraySegment<(Of <(T>)>) 实例可以引用同一个原始数组，从而可能发生重叠。

下面的代码示例将 ArraySegment<(Of <(T>)>) 结构传递给一个方法。

Imports System

Public Class SamplesArray

    Public Shared Sub Main()

        ' Create and initialize a new string array.
        Dim myArr As String() =  {"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"}

        ' Display the initial contents of the array.
        Console.WriteLine("The original array initially contains:")
        PrintIndexAndValues(myArr)

        ' Define an array segment that contains the entire array.
        Dim myArrSegAll As New ArraySegment(Of String)(myArr)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The first array segment (with all the array's elements) contains:")
        PrintIndexAndValues(myArrSegAll)

        ' Define an array segment that contains the middle five values of the array.
        Dim myArrSegMid As New ArraySegment(Of String)(myArr, 2, 5)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The second array segment (with the middle five elements) contains:")
        PrintIndexAndValues(myArrSegMid)

        ' Modify the fourth element of the first array segment myArrSegAll.
        myArrSegAll.Array(3) = "LION"

        ' Display the contents of the second array segment myArrSegMid.
        ' Note that the value of its second element also changed.
        Console.WriteLine("After the first array segment is modified, the second array segment now contains:")
        PrintIndexAndValues(myArrSegMid)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(arrSeg As ArraySegment(Of String))
        Dim i As Integer
        For i = arrSeg.Offset To (arrSeg.Offset + arrSeg.Count - 1)
            Console.WriteLine("   [{0}] : {1}", i, arrSeg.Array(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    Public Shared Sub PrintIndexAndValues(myArr as String())
        Dim i As Integer
        For i = 0 To (myArr.Length - 1)
            Console.WriteLine("   [{0}] : {1}", i, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The original array initially contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The first array segment (with all the array's elements) contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The second array segment (with the middle five elements) contains:
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'
'After the first array segment is modified, the second array segment now contains:
'   [2] : brown
'   [3] : LION
'   [4] : jumps
'   [5] : over
'   [6] : the

using System;

public class SamplesArray  {

   public static void Main()  {

      // Create and initialize a new string array.
      String[] myArr = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" };

      // Display the initial contents of the array.
      Console.WriteLine( "The original array initially contains:" );
      PrintIndexAndValues( myArr );

      // Define an array segment that contains the entire array.
      ArraySegment<String> myArrSegAll = new ArraySegment<String>( myArr );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The first array segment (with all the array's elements) contains:" );
      PrintIndexAndValues( myArrSegAll );

      // Define an array segment that contains the middle five values of the array.
      ArraySegment<String> myArrSegMid = new ArraySegment<String>( myArr, 2, 5 );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The second array segment (with the middle five elements) contains:" );
      PrintIndexAndValues( myArrSegMid );

      // Modify the fourth element of the first array segment myArrSegAll.
      myArrSegAll.Array[3] = "LION";

      // Display the contents of the second array segment myArrSegMid.
      // Note that the value of its second element also changed.
      Console.WriteLine( "After the first array segment is modified, the second array segment now contains:" );
      PrintIndexAndValues( myArrSegMid );

   }

   public static void PrintIndexAndValues( ArraySegment<String> arrSeg )  {
      for ( int i = arrSeg.Offset; i < (arrSeg.Offset + arrSeg.Count); i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arrSeg.Array[i] );
      }
      Console.WriteLine();
   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The original array initially contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The first array segment (with all the array's elements) contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The second array segment (with the middle five elements) contains:
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the

After the first array segment is modified, the second array segment now contains:
   [2] : brown
   [3] : LION
   [4] : jumps
   [5] : over
   [6] : the

*/

using namespace System;

namespace Sample
{
    public ref class SampleArray
    {
    public:
        static void Work()
        {

            // Create and initialize a new string array.
            array <String^>^ words = {"The", "quick", "brown",
                "fox", "jumps", "over", "the", "lazy", "dog"};

            // Display the initial contents of the array.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(words);

            // Define an array segment that contains the entire array.
            ArraySegment<String^> segment(words);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(segment);

            // Define an array segment that contains the middle five
            // values of the array.
            ArraySegment<String^> middle(words, 2, 5);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The second array segment"
                " (with the middle five elements) contains:");
            PrintIndexAndValues(middle);

            // Modify the fourth element of the first array
            // segment
            segment.Array[3] = "LION";

            // Display the contents of the second array segment
            // middle. Note that the value of its second element
            // also changed.
            Console::WriteLine("After the first array segment"
                " is modified,the second array segment"
                " now contains:");
            PrintIndexAndValues(middle);
            Console::ReadLine();
        }

        static void PrintIndexAndValues(ArraySegment<String^>^ segment)
        {
            for (int i = segment->Offset;
                i < (segment->Offset + segment->Count); i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    segment->Array[i]);
            }
            Console::WriteLine();
        }

        static void PrintIndexAndValues(array<String^>^ words)
        {
            for (int i = 0; i < words->Length; i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    words[i]);
            }
            Console::WriteLine();
        }
    };
}

int main()
{
    Sample::SampleArray::Work();
    return 0;
}

    /*
    This code produces the following output.

    The original array initially contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The first array segment (with all the array's elements) contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The second array segment (with the middle five elements) contains:
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the

    After the first array segment is modified, the second array segment now contains:
    [2] : brown
    [3] : LION
    [4] : jumps
    [5] : over
    [6] : the

    */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
ArraySegment T 重载
System 命名空间
System Array


ArraySegment <(Of <(T >)>) 方法

ArraySegment
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArraySegment

ArraySegment T 类型公开以下成员。

名称 说明
页首

参考

ArraySegment T 结构
System 命名空间


ArraySegment <(Of <(T >)>) ..::.Equals 方法

ArraySegment
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArraySegment

确定两个对象是否相等。

名称 说明
页首

参考

ArraySegment T 结构
ArraySegment T 成员
System 命名空间


ArraySegment <(Of <(T >)>) ..::.Equals 方法 (ArraySegment <(Of <(T >)>))

ArraySegment
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Equals 方法 (ArraySegment
<
(Of
<
(
T
>
)
>
)
)
ArraySegment

确定指定的 ArraySegment<(Of <(T>)>) 结构是否等于当前实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As ArraySegment(Of T) _
) As Boolean
public bool Equals(
    ArraySegment<T> obj
)
public:
bool Equals(
    ArraySegment<T> obj
)
member Equals :
        obj:ArraySegment<'T> -> bool

参数

obj
类型： System ArraySegment
<
(Of
<
(
T
>
)
>
)

要与当前实例进行比较的 ArraySegment<(Of <(T>)>) 结构。

返回值

类型： System Boolean
如果指定的 ArraySegment<(Of <(T>)>) 结构等于当前实例，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
Equals 重载
System 命名空间


ArraySegment <(Of <(T >)>) ..::.Equals 方法 (Object)

ArraySegment
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Equals 方法 (Object)
ArraySegment

确定指定的对象是否等于当前实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与当前实例进行比较的对象。

返回值

类型： System Boolean
如果指定的对象为 ArraySegment<(Of <(T>)>) 结构并且等于当前实例，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
Equals 重载
System 命名空间


ArraySegment <(Of <(T >)>) ..::.GetHashCode 方法

ArraySegment
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetHashCode 方法
ArraySegment

返回当前实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
System 命名空间


ArraySegment <(Of <(T >)>) 运算符

ArraySegment
<
(Of
<
(
T
>
)
>
)
运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArraySegment

ArraySegment T 类型公开以下成员。

名称 说明
页首

参考

ArraySegment T 结构
System 命名空间


ArraySegment <(Of <(T >)>) ..::.Equality 运算符

ArraySegment
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Equality 运算符
ArraySegment

指示两个 ArraySegment<(Of <(T>)>) 结构是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    a As ArraySegment(Of T), _
    b As ArraySegment(Of T) _
) As Boolean
public static bool operator ==(
    ArraySegment<T> a,
    ArraySegment<T> b
)
public:
static bool operator ==(
    ArraySegment<T> a,
    ArraySegment<T> b
)
static let inline (=)
        a:ArraySegment<'T> *
        b:ArraySegment<'T>  : bool

参数

a
类型： System ArraySegment
<
(Of
<
(
T
>
)
>
)

相等运算符左侧的 ArraySegment<(Of <(T>)>) 结构。
b
类型： System ArraySegment
<
(Of
<
(
T
>
)
>
)

相等运算符右侧的 ArraySegment<(Of <(T>)>) 结构。

返回值

类型： System Boolean
如果 a 等于 b，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
System 命名空间


ArraySegment <(Of <(T >)>) ..::.Inequality 运算符

ArraySegment
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Inequality 运算符
ArraySegment

指示两个 ArraySegment<(Of <(T>)>) 结构是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    a As ArraySegment(Of T), _
    b As ArraySegment(Of T) _
) As Boolean
public static bool operator !=(
    ArraySegment<T> a,
    ArraySegment<T> b
)
public:
static bool operator !=(
    ArraySegment<T> a,
    ArraySegment<T> b
)
static let inline (<>)
        a:ArraySegment<'T> *
        b:ArraySegment<'T>  : bool

参数

a
类型： System ArraySegment
<
(Of
<
(
T
>
)
>
)

不等运算符左侧的 ArraySegment<(Of <(T>)>) 结构。
b
类型： System ArraySegment
<
(Of
<
(
T
>
)
>
)

不等运算符右侧的 ArraySegment<(Of <(T>)>) 结构。

返回值

类型： System Boolean
如果 a 不等于 b，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
System 命名空间


ArraySegment <(Of <(T >)>) 属性

ArraySegment
<
(Of
<
(
T
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArraySegment

ArraySegment T 类型公开以下成员。

名称 说明
页首

参考

ArraySegment T 结构
System 命名空间


ArraySegment <(Of <(T >)>) ..::.Array 属性

ArraySegment
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Array 属性
ArraySegment

获取原始数组，其中包含数组段分隔的元素范围。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Array As T()
    Get
public T[] Array { get; }
public:
property array<T>^ Array {
    array<T>^ get ();
}
member Array : 'T[]

属性值

类型：
array<
T
>
[]
()
[]

传递到构造函数并且包含由 ArraySegment<(Of <(T>)>) 分隔的范围的原始数组。

Array 属性返回原始数组，而不是该数组的副本；因此，通过该属性所做的更改将直接作用于原始数组。

下面的代码示例将 ArraySegment<(Of <(T>)>) 传递给一个方法。

Imports System

Public Class SamplesArray

    Public Shared Sub Main()

        ' Create and initialize a new string array.
        Dim myArr As String() =  {"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"}

        ' Display the initial contents of the array.
        Console.WriteLine("The original array initially contains:")
        PrintIndexAndValues(myArr)

        ' Define an array segment that contains the entire array.
        Dim myArrSegAll As New ArraySegment(Of String)(myArr)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The first array segment (with all the array's elements) contains:")
        PrintIndexAndValues(myArrSegAll)

        ' Define an array segment that contains the middle five values of the array.
        Dim myArrSegMid As New ArraySegment(Of String)(myArr, 2, 5)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The second array segment (with the middle five elements) contains:")
        PrintIndexAndValues(myArrSegMid)

        ' Modify the fourth element of the first array segment myArrSegAll.
        myArrSegAll.Array(3) = "LION"

        ' Display the contents of the second array segment myArrSegMid.
        ' Note that the value of its second element also changed.
        Console.WriteLine("After the first array segment is modified, the second array segment now contains:")
        PrintIndexAndValues(myArrSegMid)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(arrSeg As ArraySegment(Of String))
        Dim i As Integer
        For i = arrSeg.Offset To (arrSeg.Offset + arrSeg.Count - 1)
            Console.WriteLine("   [{0}] : {1}", i, arrSeg.Array(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    Public Shared Sub PrintIndexAndValues(myArr as String())
        Dim i As Integer
        For i = 0 To (myArr.Length - 1)
            Console.WriteLine("   [{0}] : {1}", i, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The original array initially contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The first array segment (with all the array's elements) contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The second array segment (with the middle five elements) contains:
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'
'After the first array segment is modified, the second array segment now contains:
'   [2] : brown
'   [3] : LION
'   [4] : jumps
'   [5] : over
'   [6] : the

using System;

public class SamplesArray  {

   public static void Main()  {

      // Create and initialize a new string array.
      String[] myArr = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" };

      // Display the initial contents of the array.
      Console.WriteLine( "The original array initially contains:" );
      PrintIndexAndValues( myArr );

      // Define an array segment that contains the entire array.
      ArraySegment<String> myArrSegAll = new ArraySegment<String>( myArr );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The first array segment (with all the array's elements) contains:" );
      PrintIndexAndValues( myArrSegAll );

      // Define an array segment that contains the middle five values of the array.
      ArraySegment<String> myArrSegMid = new ArraySegment<String>( myArr, 2, 5 );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The second array segment (with the middle five elements) contains:" );
      PrintIndexAndValues( myArrSegMid );

      // Modify the fourth element of the first array segment myArrSegAll.
      myArrSegAll.Array[3] = "LION";

      // Display the contents of the second array segment myArrSegMid.
      // Note that the value of its second element also changed.
      Console.WriteLine( "After the first array segment is modified, the second array segment now contains:" );
      PrintIndexAndValues( myArrSegMid );

   }

   public static void PrintIndexAndValues( ArraySegment<String> arrSeg )  {
      for ( int i = arrSeg.Offset; i < (arrSeg.Offset + arrSeg.Count); i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arrSeg.Array[i] );
      }
      Console.WriteLine();
   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The original array initially contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The first array segment (with all the array's elements) contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The second array segment (with the middle five elements) contains:
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the

After the first array segment is modified, the second array segment now contains:
   [2] : brown
   [3] : LION
   [4] : jumps
   [5] : over
   [6] : the

*/

using namespace System;

namespace Sample
{
    public ref class SampleArray
    {
    public:
        static void Work()
        {

            // Create and initialize a new string array.
            array <String^>^ words = {"The", "quick", "brown",
                "fox", "jumps", "over", "the", "lazy", "dog"};

            // Display the initial contents of the array.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(words);

            // Define an array segment that contains the entire array.
            ArraySegment<String^> segment(words);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(segment);

            // Define an array segment that contains the middle five
            // values of the array.
            ArraySegment<String^> middle(words, 2, 5);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The second array segment"
                " (with the middle five elements) contains:");
            PrintIndexAndValues(middle);

            // Modify the fourth element of the first array
            // segment
            segment.Array[3] = "LION";

            // Display the contents of the second array segment
            // middle. Note that the value of its second element
            // also changed.
            Console::WriteLine("After the first array segment"
                " is modified,the second array segment"
                " now contains:");
            PrintIndexAndValues(middle);
            Console::ReadLine();
        }

        static void PrintIndexAndValues(ArraySegment<String^>^ segment)
        {
            for (int i = segment->Offset;
                i < (segment->Offset + segment->Count); i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    segment->Array[i]);
            }
            Console::WriteLine();
        }

        static void PrintIndexAndValues(array<String^>^ words)
        {
            for (int i = 0; i < words->Length; i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    words[i]);
            }
            Console::WriteLine();
        }
    };
}

int main()
{
    Sample::SampleArray::Work();
    return 0;
}

    /*
    This code produces the following output.

    The original array initially contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The first array segment (with all the array's elements) contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The second array segment (with the middle five elements) contains:
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the

    After the first array segment is modified, the second array segment now contains:
    [2] : brown
    [3] : LION
    [4] : jumps
    [5] : over
    [6] : the

    */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
System 命名空间
System Array


ArraySegment <(Of <(T >)>) ..::.Count 属性

ArraySegment
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Count 属性
ArraySegment

获取由数组段分隔的范围中的元素个数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Count As Integer
    Get
public int Count { get; }
public:
property int Count {
    int get ();
}
member Count : int

属性值

类型： System Int32
由 ArraySegment<(Of <(T>)>) 分隔的范围中的元素个数。

下面的代码示例将 ArraySegment<(Of <(T>)>) 结构传递给一个方法。

Imports System

Public Class SamplesArray

    Public Shared Sub Main()

        ' Create and initialize a new string array.
        Dim myArr As String() =  {"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"}

        ' Display the initial contents of the array.
        Console.WriteLine("The original array initially contains:")
        PrintIndexAndValues(myArr)

        ' Define an array segment that contains the entire array.
        Dim myArrSegAll As New ArraySegment(Of String)(myArr)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The first array segment (with all the array's elements) contains:")
        PrintIndexAndValues(myArrSegAll)

        ' Define an array segment that contains the middle five values of the array.
        Dim myArrSegMid As New ArraySegment(Of String)(myArr, 2, 5)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The second array segment (with the middle five elements) contains:")
        PrintIndexAndValues(myArrSegMid)

        ' Modify the fourth element of the first array segment myArrSegAll.
        myArrSegAll.Array(3) = "LION"

        ' Display the contents of the second array segment myArrSegMid.
        ' Note that the value of its second element also changed.
        Console.WriteLine("After the first array segment is modified, the second array segment now contains:")
        PrintIndexAndValues(myArrSegMid)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(arrSeg As ArraySegment(Of String))
        Dim i As Integer
        For i = arrSeg.Offset To (arrSeg.Offset + arrSeg.Count - 1)
            Console.WriteLine("   [{0}] : {1}", i, arrSeg.Array(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    Public Shared Sub PrintIndexAndValues(myArr as String())
        Dim i As Integer
        For i = 0 To (myArr.Length - 1)
            Console.WriteLine("   [{0}] : {1}", i, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The original array initially contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The first array segment (with all the array's elements) contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The second array segment (with the middle five elements) contains:
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'
'After the first array segment is modified, the second array segment now contains:
'   [2] : brown
'   [3] : LION
'   [4] : jumps
'   [5] : over
'   [6] : the

using System;

public class SamplesArray  {

   public static void Main()  {

      // Create and initialize a new string array.
      String[] myArr = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" };

      // Display the initial contents of the array.
      Console.WriteLine( "The original array initially contains:" );
      PrintIndexAndValues( myArr );

      // Define an array segment that contains the entire array.
      ArraySegment<String> myArrSegAll = new ArraySegment<String>( myArr );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The first array segment (with all the array's elements) contains:" );
      PrintIndexAndValues( myArrSegAll );

      // Define an array segment that contains the middle five values of the array.
      ArraySegment<String> myArrSegMid = new ArraySegment<String>( myArr, 2, 5 );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The second array segment (with the middle five elements) contains:" );
      PrintIndexAndValues( myArrSegMid );

      // Modify the fourth element of the first array segment myArrSegAll.
      myArrSegAll.Array[3] = "LION";

      // Display the contents of the second array segment myArrSegMid.
      // Note that the value of its second element also changed.
      Console.WriteLine( "After the first array segment is modified, the second array segment now contains:" );
      PrintIndexAndValues( myArrSegMid );

   }

   public static void PrintIndexAndValues( ArraySegment<String> arrSeg )  {
      for ( int i = arrSeg.Offset; i < (arrSeg.Offset + arrSeg.Count); i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arrSeg.Array[i] );
      }
      Console.WriteLine();
   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The original array initially contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The first array segment (with all the array's elements) contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The second array segment (with the middle five elements) contains:
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the

After the first array segment is modified, the second array segment now contains:
   [2] : brown
   [3] : LION
   [4] : jumps
   [5] : over
   [6] : the

*/

using namespace System;

namespace Sample
{
    public ref class SampleArray
    {
    public:
        static void Work()
        {

            // Create and initialize a new string array.
            array <String^>^ words = {"The", "quick", "brown",
                "fox", "jumps", "over", "the", "lazy", "dog"};

            // Display the initial contents of the array.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(words);

            // Define an array segment that contains the entire array.
            ArraySegment<String^> segment(words);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(segment);

            // Define an array segment that contains the middle five
            // values of the array.
            ArraySegment<String^> middle(words, 2, 5);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The second array segment"
                " (with the middle five elements) contains:");
            PrintIndexAndValues(middle);

            // Modify the fourth element of the first array
            // segment
            segment.Array[3] = "LION";

            // Display the contents of the second array segment
            // middle. Note that the value of its second element
            // also changed.
            Console::WriteLine("After the first array segment"
                " is modified,the second array segment"
                " now contains:");
            PrintIndexAndValues(middle);
            Console::ReadLine();
        }

        static void PrintIndexAndValues(ArraySegment<String^>^ segment)
        {
            for (int i = segment->Offset;
                i < (segment->Offset + segment->Count); i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    segment->Array[i]);
            }
            Console::WriteLine();
        }

        static void PrintIndexAndValues(array<String^>^ words)
        {
            for (int i = 0; i < words->Length; i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    words[i]);
            }
            Console::WriteLine();
        }
    };
}

int main()
{
    Sample::SampleArray::Work();
    return 0;
}

    /*
    This code produces the following output.

    The original array initially contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The first array segment (with all the array's elements) contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The second array segment (with the middle five elements) contains:
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the

    After the first array segment is modified, the second array segment now contains:
    [2] : brown
    [3] : LION
    [4] : jumps
    [5] : over
    [6] : the

    */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
System 命名空间
System Array
Offset


ArraySegment <(Of <(T >)>) ..::.Offset 属性

ArraySegment
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Offset 属性
ArraySegment

获取由数组段分隔的范围中的第一个元素的位置（相对于原始数组的开始位置）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Offset As Integer
    Get
public int Offset { get; }
public:
property int Offset {
    int get ();
}
member Offset : int

属性值

类型： System Int32
由 ArraySegment<(Of <(T>)>) 分隔的范围中的第一个元素的位置（相对于原始数组的开始位置）。

下面的代码示例将 ArraySegment<(Of <(T>)>) 结构传递给一个方法。

Imports System

Public Class SamplesArray

    Public Shared Sub Main()

        ' Create and initialize a new string array.
        Dim myArr As String() =  {"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"}

        ' Display the initial contents of the array.
        Console.WriteLine("The original array initially contains:")
        PrintIndexAndValues(myArr)

        ' Define an array segment that contains the entire array.
        Dim myArrSegAll As New ArraySegment(Of String)(myArr)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The first array segment (with all the array's elements) contains:")
        PrintIndexAndValues(myArrSegAll)

        ' Define an array segment that contains the middle five values of the array.
        Dim myArrSegMid As New ArraySegment(Of String)(myArr, 2, 5)

        ' Display the contents of the ArraySegment.
        Console.WriteLine("The second array segment (with the middle five elements) contains:")
        PrintIndexAndValues(myArrSegMid)

        ' Modify the fourth element of the first array segment myArrSegAll.
        myArrSegAll.Array(3) = "LION"

        ' Display the contents of the second array segment myArrSegMid.
        ' Note that the value of its second element also changed.
        Console.WriteLine("After the first array segment is modified, the second array segment now contains:")
        PrintIndexAndValues(myArrSegMid)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(arrSeg As ArraySegment(Of String))
        Dim i As Integer
        For i = arrSeg.Offset To (arrSeg.Offset + arrSeg.Count - 1)
            Console.WriteLine("   [{0}] : {1}", i, arrSeg.Array(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    Public Shared Sub PrintIndexAndValues(myArr as String())
        Dim i As Integer
        For i = 0 To (myArr.Length - 1)
            Console.WriteLine("   [{0}] : {1}", i, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArray

'This code produces the following output.
'
'The original array initially contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The first array segment (with all the array's elements) contains:
'   [0] : The
'   [1] : quick
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'   [7] : lazy
'   [8] : dog
'
'The second array segment (with the middle five elements) contains:
'   [2] : brown
'   [3] : fox
'   [4] : jumps
'   [5] : over
'   [6] : the
'
'After the first array segment is modified, the second array segment now contains:
'   [2] : brown
'   [3] : LION
'   [4] : jumps
'   [5] : over
'   [6] : the

using System;

public class SamplesArray  {

   public static void Main()  {

      // Create and initialize a new string array.
      String[] myArr = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" };

      // Display the initial contents of the array.
      Console.WriteLine( "The original array initially contains:" );
      PrintIndexAndValues( myArr );

      // Define an array segment that contains the entire array.
      ArraySegment<String> myArrSegAll = new ArraySegment<String>( myArr );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The first array segment (with all the array's elements) contains:" );
      PrintIndexAndValues( myArrSegAll );

      // Define an array segment that contains the middle five values of the array.
      ArraySegment<String> myArrSegMid = new ArraySegment<String>( myArr, 2, 5 );

      // Display the contents of the ArraySegment.
      Console.WriteLine( "The second array segment (with the middle five elements) contains:" );
      PrintIndexAndValues( myArrSegMid );

      // Modify the fourth element of the first array segment myArrSegAll.
      myArrSegAll.Array[3] = "LION";

      // Display the contents of the second array segment myArrSegMid.
      // Note that the value of its second element also changed.
      Console.WriteLine( "After the first array segment is modified, the second array segment now contains:" );
      PrintIndexAndValues( myArrSegMid );

   }

   public static void PrintIndexAndValues( ArraySegment<String> arrSeg )  {
      for ( int i = arrSeg.Offset; i < (arrSeg.Offset + arrSeg.Count); i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arrSeg.Array[i] );
      }
      Console.WriteLine();
   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, myArr[i] );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The original array initially contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The first array segment (with all the array's elements) contains:
   [0] : The
   [1] : quick
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the
   [7] : lazy
   [8] : dog

The second array segment (with the middle five elements) contains:
   [2] : brown
   [3] : fox
   [4] : jumps
   [5] : over
   [6] : the

After the first array segment is modified, the second array segment now contains:
   [2] : brown
   [3] : LION
   [4] : jumps
   [5] : over
   [6] : the

*/

using namespace System;

namespace Sample
{
    public ref class SampleArray
    {
    public:
        static void Work()
        {

            // Create and initialize a new string array.
            array <String^>^ words = {"The", "quick", "brown",
                "fox", "jumps", "over", "the", "lazy", "dog"};

            // Display the initial contents of the array.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(words);

            // Define an array segment that contains the entire array.
            ArraySegment<String^> segment(words);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The first array segment"
                " (with all the array's elements) contains:");
            PrintIndexAndValues(segment);

            // Define an array segment that contains the middle five
            // values of the array.
            ArraySegment<String^> middle(words, 2, 5);

            // Display the contents of the ArraySegment.
            Console::WriteLine("The second array segment"
                " (with the middle five elements) contains:");
            PrintIndexAndValues(middle);

            // Modify the fourth element of the first array
            // segment
            segment.Array[3] = "LION";

            // Display the contents of the second array segment
            // middle. Note that the value of its second element
            // also changed.
            Console::WriteLine("After the first array segment"
                " is modified,the second array segment"
                " now contains:");
            PrintIndexAndValues(middle);
            Console::ReadLine();
        }

        static void PrintIndexAndValues(ArraySegment<String^>^ segment)
        {
            for (int i = segment->Offset;
                i < (segment->Offset + segment->Count); i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    segment->Array[i]);
            }
            Console::WriteLine();
        }

        static void PrintIndexAndValues(array<String^>^ words)
        {
            for (int i = 0; i < words->Length; i++)
            {
                Console::WriteLine("   [{0}] : {1}", i,
                    words[i]);
            }
            Console::WriteLine();
        }
    };
}

int main()
{
    Sample::SampleArray::Work();
    return 0;
}

    /*
    This code produces the following output.

    The original array initially contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The first array segment (with all the array's elements) contains:
    [0] : The
    [1] : quick
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the
    [7] : lazy
    [8] : dog

    The second array segment (with the middle five elements) contains:
    [2] : brown
    [3] : fox
    [4] : jumps
    [5] : over
    [6] : the

    After the first array segment is modified, the second array segment now contains:
    [2] : brown
    [3] : LION
    [4] : jumps
    [5] : over
    [6] : the

    */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArraySegment T 结构
ArraySegment T 成员
System 命名空间
System Array
Count


ArrayTypeMismatchException 类

ArrayTypeMismatchException 类
成员

当尝试在数组中存储类型不正确的元素时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ArrayTypeMismatchException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ArrayTypeMismatchException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ArrayTypeMismatchException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ArrayTypeMismatchException =
    class
        inherit SystemException
    end

当系统不能将元素转换成为数组声明的类型时，将引发 ArrayTypeMismatchException。例如，String 类型的元素不能存储到 Int32 数组中，因为不支持这两种类型之间的转换。通常，应用程序不必引发此异常。 当系统不能将元素转换成为数组声明的类型时，将引发 ArrayTypeMismatchException。例如，String 类型的元素不能存储到 Int32 数组中，因为不支持这两种类型之间的转换。通常，应用程序不必引发此异常。 当系统不能将元素转换成为数组声明的类型时，将引发 ArrayTypeMismatchException。例如，String 类型的元素不能存储到 Int32 数组中，因为不支持这两种类型之间的转换。通常，应用程序不必引发此异常。

下面的 Microsoft 中间语言 (MSIL) 指令引发 ArrayTypeMismatchException：

  • ldelem.<type>

  • ldelema

  • stelem.<type>

ArrayTypeMismatchException 使用值为 0x80131503 的 HRESULT COR_E_ARRAYTYPEMISMATCH。

有关 ArrayTypeMismatchException 实例的初始属性值列表，请参见 ArrayTypeMismatchException 构造函数。

下面的代码示例阐释了引发 ArrayTypeMismatchException 的方案。

Option Explicit On
Option Strict On

Imports System

Namespace ArrayTypeMismatch

   Class Class1

      Public Shared Sub Main(ByVal args() As String)

         Dim names As String() = {"Dog", "Cat", "Fish"}
         Dim objs As System.Object() = CType(names, System.Object())

         Try
            objs(2) = "Mouse"

            Dim animalName As Object
            For Each animalName In objs
               System.Console.WriteLine(animalName)
            Next animalName
         Catch exp As System.ArrayTypeMismatchException
            ' Not reached, "Mouse" is of the correct type.
            System.Console.WriteLine("Exception Thrown.")
         End Try

         Try
            Dim obj As System.Object
            obj = CType(13, System.Object)
            objs(2) = obj
         Catch exp As System.ArrayTypeMismatchException
            ' Always reached, 13 is not a string.
            System.Console.WriteLine("New element is not of the correct type.")
         End Try

         ' Set objs to an array of objects instead of an array of strings.
         Dim objs2(3) As System.Object
         Try
            objs2(0) = "Turtle"
            objs2(1) = 12
            objs2(2) = 2.341

            Dim element As Object
            For Each element In objs2
               System.Console.WriteLine(element)
            Next element
         Catch exp As System.ArrayTypeMismatchException
            ' ArrayTypeMismatchException is not thrown this time.
            System.Console.WriteLine("Exception Thrown.")
         End Try

      End Sub
   End Class
End Namespace

using System;

namespace ArrayTypeMismatch
{
    class Class1
    {
        static void Main(string[] args)
        {
            string[] names = {"Dog", "Cat", "Fish"};
            Object[] objs  = (Object[]) names;

            try
            {
                objs[2] = "Mouse";

                foreach (object animalName in objs)
                {
                    System.Console.WriteLine(animalName);
                }
            }
            catch (System.ArrayTypeMismatchException)
            {
                // Not reached; "Mouse" is of the correct type.
                System.Console.WriteLine("Exception Thrown.");
            }

            try
            {
                Object obj = (Object) 13;
                objs[2] = obj;
            }
            catch (System.ArrayTypeMismatchException)
            {
                // Always reached, 13 is not a string.
                System.Console.WriteLine(
                    "New element is not of the correct type.");
            }

            // Set objs to an array of objects instead of
            // an array of strings.
            objs  = new Object[3];
            try
            {
                objs[0] = (Object) "Turtle";
                objs[1] = (Object) 12;
                objs[2] = (Object) 2.341;

                foreach (object element in objs)
                {
                    System.Console.WriteLine(element);
                }
            }
            catch (System.ArrayTypeMismatchException)
            {
                // ArrayTypeMismatchException is not thrown this time.
                System.Console.WriteLine("Exception Thrown.");
            }
        }
    }
}

using namespace System;
int main()
{
   array<String^>^names = { "Dog", "Cat", "Fish"};
   array<Object^>^objs = dynamic_cast<array<Object^>^>(names);
   try
   {
      objs[ 2 ] = (Object^)"Mouse";
      for ( Int32 i = 0; i < objs->Length; i++ )
      {
         Console::WriteLine( objs[ i ] );

      }
   }
   catch ( System::ArrayTypeMismatchException^ )
   {

      // Not reached, "Mouse" is of the correct type
      Console::WriteLine(  "Exception Thrown" );
   }

   try
   {
      Object^ obj = 13;
      objs[ 2 ] = obj;
   }
   catch ( System::ArrayTypeMismatchException^ )
   {

      // Always reached, 13 is not a string.
      Console::WriteLine(  "New element is not of the correct type" );
   }

   // Set obj to an array of objects instead of an array of strings
   array<Object^>^objs2 = gcnew array<Object^>(3);
   try
   {
      objs2[ 0 ] = (Object^)"Turtle";
      objs2[ 1 ] = 12;
      objs2[ 2 ] = 2.341;
      for ( Int32 i = 0; i < objs->Length; i++ )
      {
         Console::WriteLine( objs2[ i ] );

      }
   }
   catch ( System::ArrayTypeMismatchException^ )
   {

      // ArrayTypeMismatchException is not thrown this time.
      Console::WriteLine(  "Exception Thrown" );
   }

}

/*expected return values:
Dog
Cat
Mouse
New element is not of the correct type
Turtle
12
2.341
*/

System System..::.ArrayTypeMismatchExceptionArrayTypeMismatchException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayTypeMismatchException 成员
System 命名空间
Exception

其他资源

处理和引发异常


ArrayTypeMismatchException 成员

ArrayTypeMismatchException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayTypeMismatchException 类

当尝试在数组中存储类型不正确的元素时引发的异常。

ArrayTypeMismatchException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ArrayTypeMismatchException 类
System 命名空间


ArrayTypeMismatchException 构造函数

ArrayTypeMismatchException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayTypeMismatchException 类

初始化 ArrayTypeMismatchException 类的一个新实例。

名称 说明
页首

参考

ArrayTypeMismatchException 类
ArrayTypeMismatchException 成员
System 命名空间


ArrayTypeMismatchException 构造函数

ArrayTypeMismatchException 构造函数
ArrayTypeMismatchException 类

初始化 ArrayTypeMismatchException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ArrayTypeMismatchException()
public:
ArrayTypeMismatchException()
new : unit -> ArrayTypeMismatchException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“不能将源数组类型分配给目标数组类型。”。此消息将考虑当前系统区域性。

下表显示 ArrayTypeMismatchException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

下面的示例阐释了 ArrayTypeMismatchException 类的 ArrayTypeMismatchException() 构造函数。它包含一个函数，该函数接受两个数组作为参数并检查这两个数组是否属于同一类型。如果这两个数组属于不同的类型，将引发一个新的 ArrayTypeMismatchException，然后在调用方法中捕捉该异常。
下面的示例阐释了 ArrayTypeMismatchException 类的 ArrayTypeMismatchException() 构造函数。它包含一个函数，该函数接受两个数组作为参数并检查这两个数组是否属于同一类型。如果这两个数组属于不同的类型，将引发一个新的 ArrayTypeMismatchException，然后在调用方法中捕捉该异常。
下面的示例阐释了 ArrayTypeMismatchException 类的 ArrayTypeMismatchException() 构造函数。它包含一个函数，该函数接受两个数组作为参数并检查这两个数组是否属于同一类型。如果这两个数组属于不同的类型，将引发一个新的 ArrayTypeMismatchException，然后在调用方法中捕捉该异常。

Imports System

Public Class ArrayTypeMisMatchConst
   Public Sub CopyArray(myArray As Array, myArray1 As Array)

      Dim typeArray1 As String = myArray.GetType().ToString()
      Dim typeArray2 As String = myArray1.GetType().ToString()
      ' Check whether the two arrays are of same type or not.
      If typeArray1 = typeArray2 Then
         ' Copy the values from one array to another.
         myArray.SetValue("Name: " + myArray1.GetValue(0), 0)
         myArray.SetValue("Name: " + myArray1.GetValue(1), 1)
      Else
         ' Throw an exception of type 'ArrayTypeMismatchException'.
         Throw New ArrayTypeMismatchException()
      End If
   End Sub 'CopyArray

   Shared Sub Main()
      Try
         Dim myStringArray(2) As String
         myStringArray.SetValue("Jones", 0)
         myStringArray.SetValue("John", 1)
         Dim myIntArray(2) As Integer
         Dim myArrayType As New ArrayTypeMisMatchConst()
         myArrayType.CopyArray(myStringArray, myIntArray)
      Catch e As ArrayTypeMismatchException
         Console.WriteLine("The Exception is :" + e.ToString())
      End Try
   End Sub 'Main
End Class 'ArrayTypeMisMatchConst

using System;

public class ArrayTypeMisMatchConst
{
   public void CopyArray(Array myArray,Array myArray1)
   {
      string typeArray1 = myArray.GetType().ToString();
      string typeArray2 = myArray1.GetType().ToString();
      // Check whether the two arrays are of same type or not.
      if(typeArray1==typeArray2)
      {
         // Copy the values from one array to another.
         myArray.SetValue("Name: "+myArray1.GetValue(0),0);
         myArray.SetValue("Name: "+myArray1.GetValue(1),1);
      }
      else
      {
         // Throw an exception of type 'ArrayTypeMismatchException'.
         throw new ArrayTypeMismatchException();
      }
   }
   static void Main()
   {
      try
      {
         string[] myStringArray = new string[2];
         myStringArray.SetValue("Jones",0);
         myStringArray.SetValue("John",1);

         int[] myIntArray = new int[2];
         ArrayTypeMisMatchConst myArrayType = new ArrayTypeMisMatchConst();
         myArrayType.CopyArray(myStringArray,myIntArray);
      }
      catch(ArrayTypeMismatchException e)
      {
         Console.WriteLine("The Exception is :"+e);
      }
   }
}

using namespace System;
public ref class ArrayTypeMisMatchConst
{
public:
   void CopyArray( Array^ myArray, Array^ myArray1 )
   {
      String^ typeArray1 = myArray->GetType()->ToString();
      String^ typeArray2 = myArray1->GetType()->ToString();

      // Check whether the two arrays are of same type or not.
      if ( typeArray1 == typeArray2 )
      {

         // Copy the values from one array to another.
         myArray->SetValue( String::Concat(  "Name: ", myArray1->GetValue( 0 )->ToString() ), 0 );
         myArray->SetValue( String::Concat(  "Name: ", myArray1->GetValue( 1 )->ToString() ), 1 );
      }
      else
      {

         // Throw an exception of type 'ArrayTypeMismatchException'.
         throw gcnew ArrayTypeMismatchException;
      }
   }

};

int main()
{
   try
   {
      array<String^>^myStringArray = gcnew array<String^>(2);
      myStringArray->SetValue( "Jones", 0 );
      myStringArray->SetValue( "John", 1 );
      array<Int32>^myIntArray = gcnew array<Int32>(2);
      ArrayTypeMisMatchConst^ myArrayType = gcnew ArrayTypeMisMatchConst;
      myArrayType->CopyArray( myStringArray, myIntArray );
   }
   catch ( ArrayTypeMismatchException^ e )
   {
      Console::WriteLine( "The Exception is : {0}", e );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayTypeMismatchException 类
ArrayTypeMismatchException 成员
ArrayTypeMismatchException 重载
System 命名空间


ArrayTypeMismatchException 构造函数 (String)

ArrayTypeMismatchException 构造函数 (String)
ArrayTypeMismatchException 类

使用指定的错误消息初始化 ArrayTypeMismatchException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public ArrayTypeMismatchException(
    string message
)
public:
ArrayTypeMismatchException(
    String^ message
)
new :
        message:string -> ArrayTypeMismatchException

参数

message
类型： System String
描述该错误的 String。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 ArrayTypeMismatchException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

下面的示例阐释了 ArrayTypeMismatchException 类的 ArrayTypeMismatchException(String) 构造函数。它包含一个函数，该函数接受两个数组作为参数并检查这两个数组是否属于同一类型。如果这两个数组属于不同的类型，将引发一个新的 ArrayTypeMismatchException，然后在调用方法中捕捉该异常。 下面的示例阐释了 ArrayTypeMismatchException 类的 ArrayTypeMismatchException(String) 构造函数。它包含一个函数，该函数接受两个数组作为参数并检查这两个数组是否属于同一类型。如果这两个数组属于不同的类型，将引发一个新的 ArrayTypeMismatchException，然后在调用方法中捕捉该异常。 下面的示例阐释了 ArrayTypeMismatchException 类的 ArrayTypeMismatchException(String) 构造函数。它包含一个函数，该函数接受两个数组作为参数并检查这两个数组是否属于同一类型。如果这两个数组属于不同的类型，将引发一个新的 ArrayTypeMismatchException，然后在调用方法中捕捉该异常。

Imports System

Public Class ArrayTypeMisMatchConst

   Public Sub CopyArray(myArray As Array, myArray1 As Array)

      Dim typeArray1 As String = myArray.GetType().ToString()
      Dim typeArray2 As String = myArray1.GetType().ToString()
      ' Check whether the two arrays are of same type or not.
      If typeArray1 = typeArray2 Then
         ' Copies the values from one array to another.
         myArray.SetValue("Name: " + myArray1.GetValue(0), 0)
         myArray.SetValue("Name: " + myArray1.GetValue(1), 1)
      Else
         ' Throw an exception of type 'ArrayTypeMismatchException' with a message string as parameter.
         Throw New ArrayTypeMismatchException("The Source and destination arrays are not of same type.")
      End If
   End Sub 'CopyArray

   Shared Sub Main()
      Try
         Dim myStringArray(2) As String
         myStringArray.SetValue("Jones", 0)
         myStringArray.SetValue("John", 1)
         Dim myIntArray(2) As Integer
         Dim myArrayType As New ArrayTypeMisMatchConst()
         myArrayType.CopyArray(myStringArray, myIntArray)
      Catch e As ArrayTypeMismatchException
         Console.WriteLine(("The Exception Message is : " + e.Message))
      End Try
   End Sub 'Main
End Class 'ArrayTypeMisMatchConst

using System;

public class ArrayTypeMisMatchConst
{
   public void CopyArray(Array myArray,Array myArray1)
   {
      string typeArray1 = myArray.GetType().ToString();
      string typeArray2 = myArray1.GetType().ToString();
      // Check whether the two arrays are of same type or not.
      if(typeArray1==typeArray2)
      {
         // Copies the values from one array to another.
         myArray.SetValue("Name: "+myArray1.GetValue(0),0);
         myArray.SetValue("Name: "+myArray1.GetValue(1),1);
      }
      else
      {
          // Throw an exception of type 'ArrayTypeMismatchException' with a message string as parameter.
         throw new ArrayTypeMismatchException("The Source and destination arrays are not of same type.");
      }
   }

   static void Main()
   {
      try
      {
         string[] myStringArray = new string[2];
         myStringArray.SetValue("Jones",0);
         myStringArray.SetValue("John",1);
         int[] myIntArray = new int[2];
         ArrayTypeMisMatchConst myArrayType = new ArrayTypeMisMatchConst();
         myArrayType.CopyArray(myStringArray,myIntArray);
      }
      catch(ArrayTypeMismatchException e)
      {
         Console.WriteLine("The Exception Message is : " + e.Message);
      }
   }
}

using namespace System;
public ref class ArrayTypeMisMatchConst
{
public:
   void CopyArray( Array^ myArray, Array^ myArray1 )
   {
      String^ typeArray1 = myArray->GetType()->ToString();
      String^ typeArray2 = myArray1->GetType()->ToString();

      // Check whether the two arrays are of same type or not.
      if ( typeArray1 == typeArray2 )
      {

         // Copies the values from one array to another.
         myArray->SetValue( String::Concat(  "Name: ", myArray1->GetValue( 0 )->ToString() ), 0 );
         myArray->SetValue( String::Concat(  "Name: ", myArray1->GetValue( 1 )->ToString() ), 1 );
      }
      else
      {

         // Throw an exception of type 'ArrayTypeMismatchException' with a message String* as parameter.
         throw gcnew ArrayTypeMismatchException( "The Source and destination arrays are not of same type." );
      }
   }

};

int main()
{
   try
   {
      array<String^>^myStringArray = gcnew array<String^>(2);
      myStringArray->SetValue( "Jones", 0 );
      myStringArray->SetValue( "John", 1 );
      array<Int32>^myIntArray = gcnew array<Int32>(2);
      ArrayTypeMisMatchConst^ myArrayType = gcnew ArrayTypeMisMatchConst;
      myArrayType->CopyArray( myStringArray, myIntArray );
   }
   catch ( ArrayTypeMismatchException^ e )
   {
      Console::WriteLine( "The Exception Message is : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayTypeMismatchException 类
ArrayTypeMismatchException 成员
ArrayTypeMismatchException 重载
System 命名空间


ArrayTypeMismatchException 构造函数 (SerializationInfo, StreamingContext)

ArrayTypeMismatchException 构造函数 (SerializationInfo, StreamingContext)
ArrayTypeMismatchException 类

用序列化数据初始化 ArrayTypeMismatchException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ArrayTypeMismatchException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ArrayTypeMismatchException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ArrayTypeMismatchException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayTypeMismatchException 类
ArrayTypeMismatchException 成员
ArrayTypeMismatchException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


ArrayTypeMismatchException 构造函数 (String, Exception)

ArrayTypeMismatchException 构造函数 (String, Exception)
ArrayTypeMismatchException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 ArrayTypeMismatchException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ArrayTypeMismatchException(
    string message,
    Exception innerException
)
public:
ArrayTypeMismatchException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ArrayTypeMismatchException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 ArrayTypeMismatchException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

下面的代码示例演示了 ArrayTypeMismatchException 类的 ArrayTypeMismatchException 构造函数。它包含一个函数，该函数接受两个数组作为参数并检查这两个数组是否属于同一类型。如果这两个数组属于不同的类型，将引发一个新的 ArrayTypeMismatchException，然后在调用方法中捕捉该异常。 下面的代码示例演示了 ArrayTypeMismatchException 类的 ArrayTypeMismatchException 构造函数。它包含一个函数，该函数接受两个数组作为参数并检查这两个数组是否属于同一类型。如果这两个数组属于不同的类型，将引发一个新的 ArrayTypeMismatchException，然后在调用方法中捕捉该异常。 下面的代码示例演示了 ArrayTypeMismatchException 类的 ArrayTypeMismatchException 构造函数。它包含一个函数，该函数接受两个数组作为参数并检查这两个数组是否属于同一类型。如果这两个数组属于不同的类型，将引发一个新的 ArrayTypeMismatchException，然后在调用方法中捕捉该异常。

Imports System

Public Class ArrayTypeMisMatchConst

   Public Sub CopyArray(myArray As Array, myArray1 As Array)
      Try
         ' Copies the value of one array into another array.
         myArray.SetValue(myArray1.GetValue(0), 0)
         myArray.SetValue(myArray1.GetValue(1), 1)
      Catch e As Exception
         ' Throw an exception of type 'ArrayTypeMismatchException' with a message and innerexception.
         Throw New ArrayTypeMismatchException("The Source and destination arrays are of not same type", e)
      End Try
   End Sub 'CopyArray

   Shared Sub Main()
      Try
         Dim myStringArray(2) As String
         myStringArray.SetValue("Jones", 0)
         myStringArray.SetValue("John", 1)
         Dim myIntArray(2) As Integer
         Dim myArrayType As New ArrayTypeMisMatchConst()
         myArrayType.CopyArray(myStringArray, myIntArray)
      Catch e As ArrayTypeMismatchException
         Console.WriteLine("The Exception Message is : " + e.Message)
         Console.WriteLine("The Inner exception is :" + e.InnerException.ToString())
      End Try
   End Sub 'Main
End Class 'ArrayTypeMisMatchConst

using System;

public class ArrayTypeMisMatchConst
{
   public void CopyArray(Array myArray,Array myArray1)
   {
      try
      {
         // Copies the value of one array into another array.
         myArray.SetValue(myArray1.GetValue(0),0);
         myArray.SetValue(myArray1.GetValue(1),1);
      }
      catch(Exception e)
      {
         // Throw an exception of with a message and innerexception.
         throw new ArrayTypeMismatchException("The Source and destination arrays are of not same type.", e);
      }

   }
   static void Main()
   {
         try
         {
            string[] myStringArray = new string[2];
            myStringArray.SetValue("Jones",0);
            myStringArray.SetValue("John",1);
            int[] myIntArray = new int[2];
            ArrayTypeMisMatchConst myArrayType = new ArrayTypeMisMatchConst();
            myArrayType.CopyArray(myStringArray,myIntArray);
         }
         catch(ArrayTypeMismatchException e)
         {
            Console.WriteLine("The Exception Message is : "+e.Message);
            Console.WriteLine("The Inner exception is :"+e.InnerException);
         }
      }
}

using namespace System;
public ref class ArrayTypeMisMatchConst
{
public:
   void CopyArray( Array^ myArray, Array^ myArray1 )
   {
      try
      {

         // Copies the value of one array into another array.
         myArray->SetValue( myArray1->GetValue( 0 ), 0 );
         myArray->SetValue( myArray1->GetValue( 1 ), 1 );
      }
      catch ( Exception^ e )
      {

         // Throw an exception of with a message and innerexception.
         throw gcnew ArrayTypeMismatchException( "The Source and destination arrays are of not same type.",e );
      }

   }

};

int main()
{
   try
   {
      array<String^>^myStringArray = gcnew array<String^>(2);
      myStringArray->SetValue( "Jones", 0 );
      myStringArray->SetValue( "John", 1 );
      array<Int32>^myIntArray = gcnew array<Int32>(2);
      ArrayTypeMisMatchConst^ myArrayType = gcnew ArrayTypeMisMatchConst;
      myArrayType->CopyArray( myStringArray, myIntArray );
   }
   catch ( ArrayTypeMismatchException^ e )
   {
      Console::WriteLine( "The Exception Message is : {0}", e->Message );
      Console::WriteLine( "The Inner exception is : {0}", e->InnerException );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayTypeMismatchException 类
ArrayTypeMismatchException 成员
ArrayTypeMismatchException 重载
System 命名空间
Exception

其他资源

处理和引发异常


ArrayTypeMismatchException 方法

ArrayTypeMismatchException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayTypeMismatchException 类

ArrayTypeMismatchException 类型公开以下成员。

名称 说明
页首

参考

ArrayTypeMismatchException 类
System 命名空间


ArrayTypeMismatchException 属性

ArrayTypeMismatchException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayTypeMismatchException 类

ArrayTypeMismatchException 类型公开以下成员。

名称 说明
页首

参考

ArrayTypeMismatchException 类
System 命名空间


ArrayTypeMismatchException 事件

ArrayTypeMismatchException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayTypeMismatchException 类

ArrayTypeMismatchException 类型公开以下成员。

名称 说明
页首

参考

ArrayTypeMismatchException 类
System 命名空间


AssemblyLoadEventArgs 类

AssemblyLoadEventArgs 类
成员

为 AssemblyLoad 事件提供数据。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Class AssemblyLoadEventArgs _
    Inherits EventArgs
[ComVisibleAttribute(true)]
public class AssemblyLoadEventArgs : EventArgs
[ComVisibleAttribute(true)]
public ref class AssemblyLoadEventArgs : public EventArgs
[<ComVisibleAttribute(true)>]
type AssemblyLoadEventArgs =
    class
        inherit EventArgs
    end

System System..::.AssemblyLoadEventArgsAssemblyLoadEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AssemblyLoadEventArgs 成员
System 命名空间


AssemblyLoadEventArgs 成员

AssemblyLoadEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AssemblyLoadEventArgs 类

为 AssemblyLoad 事件提供数据。

AssemblyLoadEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

AssemblyLoadEventArgs 类
System 命名空间


AssemblyLoadEventArgs 构造函数

AssemblyLoadEventArgs 构造函数
AssemblyLoadEventArgs 类

使用指定的 Assembly 初始化 AssemblyLoadEventArgs 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    loadedAssembly As Assembly _
)
public AssemblyLoadEventArgs(
    Assembly loadedAssembly
)
public:
AssemblyLoadEventArgs(
    Assembly^ loadedAssembly
)
new :
        loadedAssembly:Assembly -> AssemblyLoadEventArgs

参数

loadedAssembly
类型： System.Reflection Assembly
表示当前加载的程序集的实例。
  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AssemblyLoadEventArgs 类
AssemblyLoadEventArgs 成员
System 命名空间


AssemblyLoadEventArgs 方法

AssemblyLoadEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AssemblyLoadEventArgs 类

AssemblyLoadEventArgs 类型公开以下成员。

名称 说明
页首

参考

AssemblyLoadEventArgs 类
System 命名空间


AssemblyLoadEventArgs 属性

AssemblyLoadEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AssemblyLoadEventArgs 类

AssemblyLoadEventArgs 类型公开以下成员。

名称 说明
页首

参考

AssemblyLoadEventArgs 类
System 命名空间


AssemblyLoadEventArgs ..::.LoadedAssembly 属性

AssemblyLoadEventArgs
.
.
::
.
LoadedAssembly 属性
AssemblyLoadEventArgs 类

获取一个表示当前加载的程序集的 Assembly。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property LoadedAssembly As Assembly
    Get
public Assembly LoadedAssembly { get; }
public:
property Assembly^ LoadedAssembly {
    Assembly^ get ();
}
member LoadedAssembly : Assembly

属性值

类型： System.Reflection Assembly
表示当前加载的程序集的 Assembly 实例。

此属性的值在发生 AppDomain..::.AssemblyLoad 事件时由公共语言运行时设置。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

AssemblyLoadEventArgs 类
AssemblyLoadEventArgs 成员
System 命名空间


AssemblyLoadEventHandler 委托

AssemblyLoadEventHandler 委托

表示处理 AppDomain 的 AssemblyLoad 事件的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Delegate Sub AssemblyLoadEventHandler ( _
    sender As Object, _
    args As AssemblyLoadEventArgs _
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void AssemblyLoadEventHandler(
    Object sender,
    AssemblyLoadEventArgs args
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void AssemblyLoadEventHandler(
    Object^ sender,
    AssemblyLoadEventArgs^ args
)
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type AssemblyLoadEventHandler =
    delegate of
        sender:Object *
        args:AssemblyLoadEventArgs -> unit

参数

sender
类型： System Object
事件源。
args
类型： System AssemblyLoadEventArgs
包含事件数据的 AssemblyLoadEventArgs。

AssemblyLoadEventHandler 用于指定为响应 AssemblyLoad 事件而调用的方法。若要将 AssemblyLoadEventHandler 的实例与事件相关联，需将此实例添加到事件。每当加载程序集时，都会调用 AssemblyLoadEventHandler 引用的方法，直到从事件中移除 AssemblyLoadEventHandler 为止。 AssemblyLoadEventHandler 用于指定为响应 AssemblyLoad 事件而调用的方法。若要将 AssemblyLoadEventHandler 的实例与事件相关联，需将此实例添加到事件。每当加载程序集时，都会调用 AssemblyLoadEventHandler 引用的方法，直到从事件中移除 AssemblyLoadEventHandler 为止。 AssemblyLoadEventHandler 用于指定为响应 AssemblyLoad 事件而调用的方法。若要将 AssemblyLoadEventHandler 的实例与事件相关联，需将此实例添加到事件。每当加载程序集时，都会调用 AssemblyLoadEventHandler 引用的方法，直到从事件中移除 AssemblyLoadEventHandler 为止。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间


AsyncCallback 委托

AsyncCallback 委托

引用在相应异步操作完成时调用的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Delegate Sub AsyncCallback ( _
    ar As IAsyncResult _
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void AsyncCallback(
    IAsyncResult ar
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void AsyncCallback(
    IAsyncResult^ ar
)
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type AsyncCallback =
    delegate of
        ar:IAsyncResult -> unit

参数

ar
类型： System IAsyncResult
异步操作的结果。

使用 AsyncCallback 委托在一个单独的线程中处理异步操作的结果。AsyncCallback 委托表示在异步操作完成时调用的回调方法。回调方法采用 IAsyncResult 参数，该参数随后可用来获取异步操作的结果。 使用 AsyncCallback 委托在一个单独的线程中处理异步操作的结果。AsyncCallback 委托表示在异步操作完成时调用的回调方法。回调方法采用 IAsyncResult 参数，该参数随后可用来获取异步操作的结果。 使用 AsyncCallback 委托在一个单独的线程中处理异步操作的结果。AsyncCallback 委托表示在异步操作完成时调用的回调方法。回调方法采用 IAsyncResult 参数，该参数随后可用来获取异步操作的结果。

有关异步编程的更多信息，请参见异步编程设计模式中的使用 AsyncCallback 委托结束异步操作和使用 AsyncCallback 委托和状态对象。

下面的代码示例演示在 Dns 类中如何使用异步方法来检索用户所指定计算机的域名系统 (DNS) 信息。此示例创建一个引用 ProcessDnsInformation 方法的 AsyncCallback 委托。对于 DNS 信息的每个异步请求，都调用一次此方法。 下面的代码示例演示在 Dns 类中如何使用异步方法来检索用户所指定计算机的域名系统 (DNS) 信息。此示例创建一个引用 ProcessDnsInformation 方法的 AsyncCallback 委托。对于 DNS 信息的每个异步请求，都调用一次此方法。 下面的代码示例演示在 Dns 类中如何使用异步方法来检索用户所指定计算机的域名系统 (DNS) 信息。此示例创建一个引用 ProcessDnsInformation 方法的 AsyncCallback 委托。对于 DNS 信息的每个异步请求，都调用一次此方法。

'The following example demonstrates using asynchronous methods to
'get Domain Name System information for the specified host computers.
'This example uses a delegate to obtain the results of each asynchronous
'operation.

Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Collections.Specialized
Imports System.Collections

Namespace Examples.AdvancedProgramming.AsynchronousOperations

    Public Class UseDelegateForAsyncCallback

        Dim Shared requestCounter as Integer
        Dim Shared hostData as ArrayList = new ArrayList()
        Dim Shared hostNames as StringCollection = new StringCollection()
        Shared Sub UpdateUserInterface()

            ' Print a message to indicate that the application
            ' is still working on the remaining requests.
            Console.WriteLine("{0} requests remaining.", requestCounter)
        End Sub
        Public Shared Sub Main()
            ' Create the delegate that will process the results of the
            ' asynchronous request.
            Dim callBack as AsyncCallback
            Dim host as string
            Dim i, j, k as Integer
            callback = AddressOf ProcessDnsInformation
            Do
                Console.Write(" Enter the name of a host computer or <enter> to finish: ")
                host = Console.ReadLine()
                If host.Length > 0
                    ' Increment the request counter in a thread safe manner.
                    Interlocked.Increment(requestCounter)
                    ' Start the asynchronous request for DNS information.
                    Dns.BeginGetHostEntry(host, callBack, host)
                End If
            Loop While (host.Length > 0)

            ' The user has entered all of the host names for lookup.
            ' Now wait until the threads complete.
            Do While requestCounter > 0

                UpdateUserInterface()
            Loop

            ' Display the results.
            For i = 0 To hostNames.Count -1
                Dim dataObject as Object = hostData (i)
                Dim message as String

                ' Was a SocketException was thrown?
                If TypeOf dataObject is String
                    message = CType(dataObject, String)
                    Console.WriteLine("Request for {0} returned message: {1}", _
                        hostNames(i), message)
                Else
                    ' Get the results.
                    Dim h as IPHostEntry = CType(dataObject, IPHostEntry)
                    Dim aliases() as String = h.Aliases
                    Dim addresses() as IPAddress = h.AddressList
                    If aliases.Length > 0
                        Console.WriteLine("Aliases for 0}", hostNames(i))
                        For j = 0 To aliases.Length -1
                            Console.WriteLine("{0}", aliases(j))
                        Next j
                    End If
                    If addresses.Length > 0
                        Console.WriteLine("Addresses for {0}", hostNames(i))
                        For k = 0 To addresses.Length -1
                            Console.WriteLine("{0}",addresses(k).ToString())
                        Next k
                    End If
                End If
            Next i
       End Sub

        ' The following method is called when each asynchronous operation completes.
        Shared Sub ProcessDnsInformation(result as IAsyncResult)

            Dim hostName as String = CType(result.AsyncState, String)
            hostNames.Add(hostName)
            Try
                ' Get the results.
                Dim host as IPHostEntry = Dns.EndGetHostEntry(result)
                hostData.Add(host)
            ' Store the exception message.
            Catch e as SocketException
                hostData.Add(e.Message)
            Finally
                ' Decrement the request counter in a thread-safe manner.
                Interlocked.Decrement(requestCounter)
            End Try
        End Sub
    End Class
End Namespace

/*
The following example demonstrates using asynchronous methods to
get Domain Name System information for the specified host computers.
This example uses a delegate to obtain the results of each asynchronous
operation.
*/

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections.Specialized;
using System.Collections;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class UseDelegateForAsyncCallback
    {
        static int requestCounter;
        static ArrayList hostData = new ArrayList();
        static StringCollection hostNames = new StringCollection();
        static void UpdateUserInterface()
        {
            // Print a message to indicate that the application
            // is still working on the remaining requests.
            Console.WriteLine("{0} requests remaining.", requestCounter);
        }
        public static void Main()
        {
            // Create the delegate that will process the results of the
            // asynchronous request.
            AsyncCallback callBack = new AsyncCallback(ProcessDnsInformation);
            string host;
            do
            {
                Console.Write(" Enter the name of a host computer or <enter> to finish: ");
                host = Console.ReadLine();
                if (host.Length > 0)
                {
                    // Increment the request counter in a thread safe manner.
                    Interlocked.Increment(ref requestCounter);
                    // Start the asynchronous request for DNS information.
                    Dns.BeginGetHostEntry(host, callBack, host);
                 }
            } while (host.Length > 0);
            // The user has entered all of the host names for lookup.
            // Now wait until the threads complete.
            while (requestCounter > 0)
            {
                UpdateUserInterface();
            }
            // Display the results.
            for (int i = 0; i< hostNames.Count; i++)
            {
                object data = hostData [i];
                string message = data as string;
                // A SocketException was thrown.
                if (message != null)
                {
                    Console.WriteLine("Request for {0} returned message: {1}",
                        hostNames[i], message);
                    continue;
                }
                // Get the results.
                IPHostEntry h = (IPHostEntry) data;
                string[] aliases = h.Aliases;
                IPAddress[] addresses = h.AddressList;
                if (aliases.Length > 0)
                {
                    Console.WriteLine("Aliases for {0}", hostNames[i]);
                    for (int j = 0; j < aliases.Length; j++)
                    {
                        Console.WriteLine("{0}", aliases[j]);
                    }
                }
                if (addresses.Length > 0)
                {
                    Console.WriteLine("Addresses for {0}", hostNames[i]);
                    for (int k = 0; k < addresses.Length; k++)
                    {
                        Console.WriteLine("{0}",addresses[k].ToString());
                    }
                }
            }
       }

        // The following method is called when each asynchronous operation completes.
        static void ProcessDnsInformation(IAsyncResult result)
        {
            string hostName = (string) result.AsyncState;
            hostNames.Add(hostName);
            try
            {
                // Get the results.
                IPHostEntry host = Dns.EndGetHostEntry(result);
                hostData.Add(host);
            }
            // Store the exception message.
            catch (SocketException e)
            {
                hostData.Add(e.Message);
            }
            finally
            {
                // Decrement the request counter in a thread-safe manner.
                Interlocked.Decrement(ref requestCounter);
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间
IAsyncResult

其他资源

使用 AsyncCallback 委托结束异步操作
使用 AsyncCallback 委托和状态对象
使用异步方式调用同步方法
异步编程设计模式
事件和委托


Attribute 类

Attribute 类
成员

表示自定义特性的基类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.All, Inherited := True, AllowMultiple := False)> _
Public MustInherit Class Attribute _
    Implements _Attribute
[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
public abstract class Attribute : _Attribute
[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::All, Inherited = true, AllowMultiple = false)]
public ref class Attribute abstract : _Attribute
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
[<ComVisibleAttribute(true)>]
[<AttributeUsageAttribute(AttributeTargets.All, Inherited = true, AllowMultiple = false)>]
type Attribute =
    class
        interface _Attribute
    end

Attribute 类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性、返回值、结构或其他特性。 Attribute 类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性、返回值、结构或其他特性。

特性所提供的信息也称为元数据。元数据可由应用程序在运行时进行检查以控制程序处理数据的方式，也可以由外部工具在运行前检查以控制应用程序处理或维护自身的方式。例如，.NET Framework 预定义特性类型并使用特性类型控制运行时行为，某些编程语言使用特性类型表示 .NET Framework 常规类型系统不直接支持的语言功能。 特性所提供的信息也称为元数据。元数据可由应用程序在运行时进行检查以控制程序处理数据的方式，也可以由外部工具在运行前检查以控制应用程序处理或维护自身的方式。例如，.NET Framework 预定义特性类型并使用特性类型控制运行时行为，某些编程语言使用特性类型表示 .NET Framework 常规类型系统不直接支持的语言功能。 特性所提供的信息也称为元数据。元数据可由应用程序在运行时进行检查以控制程序处理数据的方式，也可以由外部工具在运行前检查以控制应用程序处理或维护自身的方式。例如，.NET Framework 预定义特性类型并使用特性类型控制运行时行为，某些编程语言使用特性类型表示 .NET Framework 常规类型系统不直接支持的语言功能。

所有特性类型都直接或间接地从 Attribute 类派生。特性可应用于任何目标元素；多个特性可应用于同一目标元素；并且特性可由从目标元素派生的元素继承。使用 AttributeTargets 类可以指定特性所应用到的目标元素。 所有特性类型都直接或间接地从 Attribute 类派生。特性可应用于任何目标元素；多个特性可应用于同一目标元素；并且特性可由从目标元素派生的元素继承。使用 AttributeTargets 类可以指定特性所应用到的目标元素。 所有特性类型都直接或间接地从 Attribute 类派生。特性可应用于任何目标元素；多个特性可应用于同一目标元素；并且特性可由从目标元素派生的元素继承。使用 AttributeTargets 类可以指定特性所应用到的目标元素。

Attribute 类提供检索和测试自定义特性的简便方法。有关使用特性的更多信息，请参见应用特性和利用特性扩展元数据。 Attribute 类提供检索和测试自定义特性的简便方法。有关使用特性的更多信息，请参见应用特性和利用特性扩展元数据。

下面的代码示例演示 Attribute 的用法。

Imports System
Imports System.Reflection

Public Module CustomAttrVB

    ' An enumeration of animals. Start at 1 (0 = uninitialized).
    Public Enum Animal
        ' Pets
        Dog = 1
        Cat
        Bird
    End Enum

    ' Visual Basic requires the AttributeUsage be specified.
    ' A custom attribute to allow a target to have a pet.
    <AttributeUsage(AttributeTargets.Method)> _
    Public Class AnimalTypeAttribute
        Inherits Attribute

        ' The constructor is called when the attribute is set.
        Public Sub New(ByVal animal As Animal)
            Me.thePet = animal
        End Sub

        ' Keep a variable internally ...
        Protected thePet As Animal

        ' .. and show a copy to the outside world.
        Public Property Pet() As Animal
            Get
                Return thePet
            End Get
            Set(ByVal Value As Animal)
                thePet = Value
            End Set
        End Property

    End Class

    ' A test class where each method has its own pet.
    Class AnimalTypeTestClass

        <AnimalType(Animal.Dog)> _
        Public Sub DogMethod()
        End Sub

        <AnimalType(Animal.Cat)> _
        Public Sub CatMethod()
        End Sub

        <AnimalType(Animal.Bird)> _
        Public Sub BirdMethod()
        End Sub
    End Class

    ' The runtime test.
    Sub Main()
        Dim testClass As New AnimalTypeTestClass()
        Dim tcType As Type = testClass.GetType()
        Dim mInfo As MethodInfo
        ' Iterate through all the methods of the class.
        For Each mInfo In tcType.GetMethods()
            Dim attr As Attribute
            ' Iterate through all the attributes of the method.
            For Each attr In Attribute.GetCustomAttributes(mInfo)
                If TypeOf attr Is AnimalTypeAttribute Then
                    Dim attrCustom As AnimalTypeAttribute = _
                        CType(attr, AnimalTypeAttribute)
                    Console.WriteLine("Method {0} has a pet {1} attribute.", _
                         mInfo.Name(), attrCustom.Pet.ToString())
                End If
            Next
        Next
    End Sub
End Module

' Output:
' Method DogMethod has a pet Dog attribute.
' Method CatMethod has a pet Cat attribute.
' Method BirdMethod has a pet Bird attribute.

using System;
using System.Reflection;

// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum Animal {
    // Pets.
    Dog = 1,
    Cat,
    Bird,
}

// A custom attribute to allow a target to have a pet.
public class AnimalTypeAttribute : Attribute {
    // The constructor is called when the attribute is set.
    public AnimalTypeAttribute(Animal pet) {
        thePet = pet;
    }

    // Keep a variable internally ...
    protected Animal thePet;

    // .. and show a copy to the outside world.
    public Animal Pet {
        get { return thePet; }
        set { thePet = value; }
    }
}

// A test class where each method has its own pet.
class AnimalTypeTestClass {
    [AnimalType(Animal.Dog)]
    public void DogMethod() {}

    [AnimalType(Animal.Cat)]
    public void CatMethod() {}

    [AnimalType(Animal.Bird)]
    public void BirdMethod() {}
}

class DemoClass {
    static void Main(string[] args) {
        AnimalTypeTestClass testClass = new AnimalTypeTestClass();
        Type type = testClass.GetType();
        // Iterate through all the methods of the class.
        foreach(MethodInfo mInfo in type.GetMethods()) {
            // Iterate through all the Attributes for each method.
            foreach (Attribute attr in
                Attribute.GetCustomAttributes(mInfo)) {
                // Check for the AnimalType attribute.
                if (attr.GetType() == typeof(AnimalTypeAttribute))
                    Console.WriteLine(
                        "Method {0} has a pet {1} attribute.",
                        mInfo.Name, ((AnimalTypeAttribute)attr).Pet);
            }

        }
    }
}
/*
 * Output:
 * Method DogMethod has a pet Dog attribute.
 * Method CatMethod has a pet Cat attribute.
 * Method BirdMethod has a pet Bird attribute.
 */

using namespace System;
using namespace System::Reflection;

// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum class Animal
{
    // Pets.
    Dog = 1,
    Cat, Bird
};

// A custom attribute to allow a target to have a pet.
public ref class AnimalTypeAttribute: public Attribute
{
public:

    // The constructor is called when the attribute is set.
    AnimalTypeAttribute( Animal pet )
    {
        thePet = pet;
    }

protected:

    // Keep a variable internally ...
    Animal thePet;

public:

    property Animal Pet
    {
        // .. and show a copy to the outside world.
        Animal get()
        {
            return thePet;
        }

        void set( Animal value )
        {
            thePet = value;
        }
    }
};

// A test class where each method has its own pet.
ref class AnimalTypeTestClass
{
public:

    [AnimalType(Animal::Dog)]
    void DogMethod(){}

    [AnimalType(Animal::Cat)]
    void CatMethod(){}

    [AnimalType(Animal::Bird)]
    void BirdMethod(){}

};

int main()
{
    AnimalTypeTestClass^ testClass = gcnew AnimalTypeTestClass;
    Type^ type = testClass->GetType();

    // Iterate through all the methods of the class.
    System::Collections::IEnumerator^ myEnum =
        type->GetMethods()->GetEnumerator();
    while ( myEnum->MoveNext() )
    {
        MethodInfo^ mInfo = safe_cast<MethodInfo^>(myEnum->Current);

        // Iterate through all the Attributes for each method.
        System::Collections::IEnumerator^ myEnum1 =
            Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
        while ( myEnum1->MoveNext() )
        {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the AnimalType attribute.
            if ( attr->GetType() == AnimalTypeAttribute::typeid )
                Console::WriteLine( "Method {0} has a pet {1} attribute.",
                mInfo->Name, (dynamic_cast<AnimalTypeAttribute^>(attr))->Pet );
        }
    }
}

/*
 * Output:
 * Method DogMethod has a pet Dog attribute.
 * Method CatMethod has a pet Cat attribute.
 * Method BirdMethod has a pet Bird attribute.
 */

System System..::.AttributeAttribute

此类型是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 成员
System 命名空间

其他资源

应用特性
利用特性扩展元数据


Attribute 成员

Attribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Attribute 类

表示自定义特性的基类。

Attribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Attribute 类
System 命名空间


Attribute 构造函数

Attribute 构造函数
Attribute 类

初始化 Attribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected Attribute()
protected:
Attribute()
new : unit -> Attribute

此构造函数仅由从 Attribute 派生的类调用。

下面的代码示例演示如何使用构造函数定义自定义参数 Attribute 类。

' Define a custom parameter attribute that takes a single message argument.
<AttributeUsage(AttributeTargets.Parameter)>  _
Public Class ArgumentUsageAttribute
    Inherits Attribute

    ' This is the attribute constructor.
    Public Sub New(UsageMsg As String)
        Me.usageMsg = UsageMsg
    End Sub ' New

    ' usageMsg is storage for the attribute message.
    Protected usageMsg As String

    ' This is the Message property for the attribute.
    Public Property Message() As String
        Get
            Return usageMsg
        End Get
        Set
            usageMsg = value
        End Set
    End Property
End Class ' ArgumentUsageAttribute

// Define a custom parameter attribute that takes a single message argument.
[AttributeUsage( AttributeTargets.Parameter )]
public class ArgumentUsageAttribute : Attribute
{
    // This is the attribute constructor.
    public ArgumentUsageAttribute( string UsageMsg )
    {
        this.usageMsg = UsageMsg;
    }

    // usageMsg is storage for the attribute message.
    protected string usageMsg;

    // This is the Message property for the attribute.
    public string Message
    {
        get { return usageMsg; }
        set { usageMsg = value; }
    }
}

// Define a custom parameter attribute that takes a single message argument.

[AttributeUsage(AttributeTargets::Parameter)]
public ref class ArgumentUsageAttribute: public Attribute
{
protected:

   // usageMsg is storage for the attribute message.
   String^ usageMsg;

public:

   // This is the attribute constructor.
   ArgumentUsageAttribute( String^ UsageMsg )
   {
      this->usageMsg = UsageMsg;
   }

   property String^ Message
   {
      // This is the Message property for the attribute.
      String^ get()
      {
         return usageMsg;
      }

      void set( String^ value )
      {
         this->usageMsg = value;
      }
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute 方法

Attribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Attribute 类

Attribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Attribute 类
System 命名空间


Attribute ..::._Attribute ..::.GetIDsOfNames 方法

Attribute
.
.
::
.
_Attribute
.
.
::
.
GetIDsOfNames 方法
Attribute 类

将一组名称映射为对应的一组调度标识符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetIDsOfNames ( _
    ByRef riid As Guid, _
    rgszNames As IntPtr, _
    cNames As UInteger, _
    lcid As UInteger, _
    rgDispId As IntPtr _
) Implements _Attribute.GetIDsOfNames
void _Attribute.GetIDsOfNames(
    ref Guid riid,
    IntPtr rgszNames,
    uint cNames,
    uint lcid,
    IntPtr rgDispId
)
private:
virtual void GetIDsOfNames(
    [InAttribute] Guid% riid,
    IntPtr rgszNames,
    unsigned int cNames,
    unsigned int lcid,
    IntPtr rgDispId
) sealed = _Attribute::GetIDsOfNames
private abstract GetIDsOfNames :
        riid:Guid byref *
        rgszNames:IntPtr *
        cNames:uint32 *
        lcid:uint32 *
        rgDispId:IntPtr -> unit
private override GetIDsOfNames :
        riid:Guid byref *
        rgszNames:IntPtr *
        cNames:uint32 *
        lcid:uint32 *
        rgDispId:IntPtr -> unit

参数

riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
rgszNames
类型： System IntPtr
要映射的名称的传入数组。
cNames
类型： System UInt32
要映射的名称的计数。
lcid
类型： System UInt32
要在其中解释名称的区域设置上下文。
rgDispId
类型： System IntPtr
调用方分配的数组，用于接收与名称对应的 ID。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::._Attribute ..::.GetTypeInfo 方法

Attribute
.
.
::
.
_Attribute
.
.
::
.
GetTypeInfo 方法
Attribute 类

检索对象的类型信息，然后可以使用该信息获取接口的类型信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetTypeInfo ( _
    iTInfo As UInteger, _
    lcid As UInteger, _
    ppTInfo As IntPtr _
) Implements _Attribute.GetTypeInfo
void _Attribute.GetTypeInfo(
    uint iTInfo,
    uint lcid,
    IntPtr ppTInfo
)
private:
virtual void GetTypeInfo(
    unsigned int iTInfo,
    unsigned int lcid,
    IntPtr ppTInfo
) sealed = _Attribute::GetTypeInfo
private abstract GetTypeInfo :
        iTInfo:uint32 *
        lcid:uint32 *
        ppTInfo:IntPtr -> unit
private override GetTypeInfo :
        iTInfo:uint32 *
        lcid:uint32 *
        ppTInfo:IntPtr -> unit

参数

iTInfo
类型： System UInt32
要返回的类型信息。
lcid
类型： System UInt32
类型信息的区域设置标识符。
ppTInfo
类型： System IntPtr
接收一个指针，指向请求的类型信息对象。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::._Attribute ..::.GetTypeInfoCount 方法

Attribute
.
.
::
.
_Attribute
.
.
::
.
GetTypeInfoCount 方法
Attribute 类

检索对象提供的类型信息接口的数量（0 或 1）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetTypeInfoCount ( _
    <OutAttribute> ByRef pcTInfo As UInteger _
) Implements _Attribute.GetTypeInfoCount
void _Attribute.GetTypeInfoCount(
    out uint pcTInfo
)
private:
virtual void GetTypeInfoCount(
    [OutAttribute] unsigned int% pcTInfo
) sealed = _Attribute::GetTypeInfoCount
private abstract GetTypeInfoCount :
        pcTInfo:uint32 byref -> unit
private override GetTypeInfoCount :
        pcTInfo:uint32 byref -> unit

参数

pcTInfo
类型： System UInt32 %
指向一个位置，该位置接收对象提供的类型信息接口的数量。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::._Attribute ..::.Invoke 方法

Attribute
.
.
::
.
_Attribute
.
.
::
.
Invoke 方法
Attribute 类

提供对某一对象公开的属性和方法的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Invoke ( _
    dispIdMember As UInteger, _
    ByRef riid As Guid, _
    lcid As UInteger, _
    wFlags As Short, _
    pDispParams As IntPtr, _
    pVarResult As IntPtr, _
    pExcepInfo As IntPtr, _
    puArgErr As IntPtr _
) Implements _Attribute.Invoke
void _Attribute.Invoke(
    uint dispIdMember,
    ref Guid riid,
    uint lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
)
private:
virtual void Invoke(
    unsigned int dispIdMember,
    [InAttribute] Guid% riid,
    unsigned int lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
) sealed = _Attribute::Invoke
private abstract Invoke :
        dispIdMember:uint32 *
        riid:Guid byref *
        lcid:uint32 *
        wFlags:int16 *
        pDispParams:IntPtr *
        pVarResult:IntPtr *
        pExcepInfo:IntPtr *
        puArgErr:IntPtr -> unit
private override Invoke :
        dispIdMember:uint32 *
        riid:Guid byref *
        lcid:uint32 *
        wFlags:int16 *
        pDispParams:IntPtr *
        pVarResult:IntPtr *
        pExcepInfo:IntPtr *
        puArgErr:IntPtr -> unit

参数

dispIdMember
类型： System UInt32
标识成员。
riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
lcid
类型： System UInt32
要在其中解释参数的区域设置上下文。
wFlags
类型： System Int16
描述调用的上下文的标志。
pDispParams
类型： System IntPtr
指向一个结构的指针，该结构包含一个参数数组、一个命名参数的 DISPID 参数数组和数组中元素数的计数。
pVarResult
类型： System IntPtr
指向要存储结果的位置的指针。
pExcepInfo
类型： System IntPtr
指向一个包含异常信息的结构的指针。
puArgErr
类型： System IntPtr
第一个出错参数的索引。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::.Equals 方法

Attribute
.
.
::
.
Equals 方法
Attribute 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与此实例进行比较的 Object 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 obj 等于此实例的类型和值，则为 true；否则为 false。

下面的代码示例定义两个自定义参数 Attribute 类并为每个类分别创建多个对象，并演示对它们进行比较的 Equals 方法的用法。

' Example for the Attribute.Equals( Object ) method.
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Define a custom parameter attribute that takes a single message argument.
    <AttributeUsage(AttributeTargets.Parameter)>  _
    Public Class ArgumentUsageAttribute
        Inherits Attribute

        ' This is the attribute constructor.
        Public Sub New(UsageMsg As String)
            Me.usageMsg = UsageMsg
        End Sub ' New

        ' usageMsg is storage for the attribute message.
        Protected usageMsg As String

        ' Override ToString() to append the message to what the base generates.
        Public Overrides Function ToString() As String
            Return MyBase.ToString() + ":" + usageMsg
        End Function ' ToString
    End Class ' ArgumentUsageAttribute

    ' Define a custom parameter attribute that generates a GUID for each instance.
    <AttributeUsage(AttributeTargets.Parameter)>  _
    Public Class ArgumentIDAttribute
        Inherits Attribute

        ' This is the attribute constructor, which generates the GUID.
        Public Sub New()
            Me.GUIDinstance = Guid.NewGuid()
        End Sub ' New

        ' instanceGUID is storage for the generated GUID.
        Protected GUIDinstance As Guid

        ' Override ToString() to append the GUID to what the base generates.
        Public Overrides Function ToString() As String
            Return MyBase.ToString() + "." + GUIDinstance.ToString()
        End Function ' ToString
    End Class ' ArgumentIDAttribute

    Public Class TestClass

        ' Assign an ArgumentID attribute to each parameter.
        ' Assign an ArgumentUsage attribute to each parameter.
        Public Sub TestMethod( _
            <ArgumentID(), ArgumentUsage("Must pass an array here.")> _
            strArray() As String, _
            <ArgumentID(), ArgumentUsage("Can pass param list or array here.")> _
            ParamArray strList() As String)
        End Sub ' TestMethod
    End Class ' TestClass

    Module AttributeEqualsDemo

        ' Create Attribute objects and compare them.
        Sub CompareAttributes()

            ' Get the class type, and then get the MethodInfo object
            ' for TestMethod to access its metadata.
            Dim clsType As Type = GetType(TestClass)
            Dim mInfo As MethodInfo = clsType.GetMethod("TestMethod")

            ' There will be two elements in pInfoArray, one for each parameter.
            Dim pInfoArray As ParameterInfo() = mInfo.GetParameters()
            If Not (pInfoArray Is Nothing) Then

                ' Create an instance of the argument usage attribute on strArray.
                Dim arrayUsageAttr1 As ArgumentUsageAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(0), _
                        GetType(ArgumentUsageAttribute))

                ' Create another instance of the argument usage attribute
                ' on strArray.
                Dim arrayUsageAttr2 As ArgumentUsageAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(0), _
                        GetType(ArgumentUsageAttribute))

                ' Create an instance of the argument usage attribute on strList.
                Dim listUsageAttr As ArgumentUsageAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(1), _
                        GetType(ArgumentUsageAttribute))

                ' Create an instance of the argument ID attribute on strArray.
                Dim arrayIDAttr1 As ArgumentIDAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(0), _
                        GetType(ArgumentIDAttribute))

                ' Create another instance of the argument ID attribute on strArray.
                Dim arrayIDAttr2 As ArgumentIDAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(0), _
                        GetType(ArgumentIDAttribute))

                ' Create an instance of the argument ID attribute on strList.
                Dim listIDAttr As ArgumentIDAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(1), _
                        GetType(ArgumentIDAttribute))

                ' Compare various pairs of attributes for equality.
                Console.WriteLine(vbCrLf & "Compare a usage attribute instance " & _
                    "to another instance of the same attribute:")
                Console.WriteLine("   ""{0}"" = " & vbCrLf & "   ""{1}"" ? {2}", _
                    arrayUsageAttr1.ToString(), arrayUsageAttr2.ToString(), _
                    arrayUsageAttr1.Equals(arrayUsageAttr2))

                Console.WriteLine(vbCrLf & _
                    "Compare a usage attribute to another usage attribute:")
                Console.WriteLine("   ""{0}"" = " & vbCrLf & "   ""{1}"" ? {2}", _
                    arrayUsageAttr1.ToString(), listUsageAttr.ToString(), _
                    arrayUsageAttr1.Equals(listUsageAttr))

                Console.WriteLine(vbCrLf & "Compare an ID attribute instance " & _
                    "to another instance of the same attribute:")
                Console.WriteLine("   ""{0}"" = " & vbCrLf & "   ""{1}"" ? {2}", _
                    arrayIDAttr1.ToString(), arrayIDAttr2.ToString(), _
                    arrayIDAttr1.Equals(arrayIDAttr2))

                Console.WriteLine(vbCrLf & _
                    "Compare an ID attribute to another ID attribute:")
                Console.WriteLine("   ""{0}"" = " & vbCrLf & "   ""{1}"" ? {2}", _
                    arrayIDAttr1.ToString(), listIDAttr.ToString(), _
                    arrayIDAttr1.Equals(listIDAttr))
            Else
                Console.WriteLine("The parameters information could " & _
                    "not be retrieved for method {0}.", mInfo.Name)
            End If
        End Sub ' CompareAttributes

        Sub Main()
            Console.WriteLine("This example of Attribute.Equals( Object ) " & _
                "generates the following output." )

            CompareAttributes( )

        End Sub ' Main
    End Module ' AttributeEqualsDemo
End Namespace ' NDP_UE_VB

' This example of Attribute.Equals( Object ) generates the following output.
'
' Compare a usage attribute instance to another instance of the same attribute:
'    "NDP_UE_VB.ArgumentUsageAttribute:Must pass an array here." =
'    "NDP_UE_VB.ArgumentUsageAttribute:Must pass an array here." ? True
'
' Compare a usage attribute to another usage attribute:
'    "NDP_UE_VB.ArgumentUsageAttribute:Must pass an array here." =
'    "NDP_UE_VB.ArgumentUsageAttribute:Can pass param list or array here." ? False
'
' Compare an ID attribute instance to another instance of the same attribute:
'    "NDP_UE_VB.ArgumentIDAttribute.aa2c2346-ca87-40d6-afb7-5e3bc1637351" =
'    "NDP_UE_VB.ArgumentIDAttribute.4192c26c-9a7b-4a74-97fc-6c3dfbc2cdfe" ? False
'
' Compare an ID attribute to another ID attribute:
'    "NDP_UE_VB.ArgumentIDAttribute.aa2c2346-ca87-40d6-afb7-5e3bc1637351" =
'    "NDP_UE_VB.ArgumentIDAttribute.237a7337-15f1-469b-a5ce-7503def917b2" ? False

// Example for the Attribute.Equals( object ) method.
using System;
using System.Reflection;

namespace NDP_UE_CS
{
    // Define a custom parameter attribute that takes a single message argument.
    [AttributeUsage( AttributeTargets.Parameter )]
    public class ArgumentUsageAttribute : Attribute
    {
        // This is the attribute constructor.
        public ArgumentUsageAttribute( string UsageMsg )
        {
            this.usageMsg = UsageMsg;
        }

        // usageMsg is storage for the attribute message.
        protected string usageMsg;

        // Override ToString() to append the message to what the base generates.
        public override string ToString( )
        {
            return base.ToString( ) + ":" + usageMsg;
        }
    }

    // Define a custom parameter attribute that generates
    // a GUID for each instance.
    [AttributeUsage( AttributeTargets.Parameter )]
    public class ArgumentIDAttribute : Attribute
    {
        // This is the attribute constructor, which generates the GUID.
        public ArgumentIDAttribute( )
        {
            this.instanceGUID = Guid.NewGuid( );
        }

        // instanceGUID is storage for the generated GUID.
        protected Guid instanceGUID;

        // Override ToString() to append the GUID to what the base generates.
        public override string ToString( )
        {
            return base.ToString( ) + "." + instanceGUID.ToString( );
        }
    }

    public class TestClass
    {
        // Assign an ArgumentID attribute to each parameter.
        // Assign an ArgumentUsage attribute to each parameter.
        public void TestMethod(
            [ArgumentID]
            [ArgumentUsage("Must pass an array here.")]
            String[] strArray,
            [ArgumentID]
            [ArgumentUsage("Can pass param list or array here.")]
            params String[] strList)
        { }
    }

    class AttributeEqualsDemo
    {
        // Create Attribute objects and compare them.
        static void Main( )
        {
            Console.WriteLine( "This example of Attribute.Equals( object ) " +
                "generates the following output." );

            // Get the class type, and then get the MethodInfo object
            // for TestMethod to access its metadata.
            Type clsType = typeof( TestClass );
            MethodInfo mInfo = clsType.GetMethod("TestMethod");

            // There will be two elements in pInfoArray, one for each parameter.
            ParameterInfo[] pInfoArray = mInfo.GetParameters();
            if (pInfoArray != null)
            {
                // Create an instance of the argument usage attribute on strArray.
                ArgumentUsageAttribute arrayUsageAttr1 = (ArgumentUsageAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[0],
                        typeof(ArgumentUsageAttribute) );

                // Create another instance of the argument usage attribute
                // on strArray.
                ArgumentUsageAttribute arrayUsageAttr2 = (ArgumentUsageAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[0],
                        typeof(ArgumentUsageAttribute) );

                // Create an instance of the argument usage attribute on strList.
                ArgumentUsageAttribute listUsageAttr = (ArgumentUsageAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[1],
                        typeof(ArgumentUsageAttribute) );

                // Create an instance of the argument ID attribute on strArray.
                ArgumentIDAttribute arrayIDAttr1 = (ArgumentIDAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[0],
                        typeof(ArgumentIDAttribute) );

                // Create another instance of the argument ID attribute on strArray.
                ArgumentIDAttribute arrayIDAttr2 = (ArgumentIDAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[0],
                        typeof(ArgumentIDAttribute) );

                // Create an instance of the argument ID attribute on strList.
                ArgumentIDAttribute listIDAttr = (ArgumentIDAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[1],
                        typeof(ArgumentIDAttribute) );

                // Compare various pairs of attributes for equality.
                Console.WriteLine( "\nCompare a usage attribute instance to " +
                    "another instance of the same attribute:" );
                Console.WriteLine( "   \"{0}\" == \n   \"{1}\" ? {2}",
                    arrayUsageAttr1.ToString(), arrayUsageAttr2.ToString(),
                    arrayUsageAttr1.Equals( arrayUsageAttr2 ) );

                Console.WriteLine( "\nCompare a usage attribute to " +
                    "another usage attribute:" );
                Console.WriteLine( "   \"{0}\" == \n   \"{1}\" ? {2}",
                    arrayUsageAttr1.ToString(), listUsageAttr.ToString(),
                    arrayUsageAttr1.Equals( listUsageAttr ) );

                Console.WriteLine( "\nCompare an ID attribute instance to " +
                    "another instance of the same attribute:" );
                Console.WriteLine( "   \"{0}\" == \n   \"{1}\" ? {2}",
                    arrayIDAttr1.ToString(), arrayIDAttr2.ToString(),
                    arrayIDAttr1.Equals( arrayIDAttr2 ) );

                Console.WriteLine( "\nCompare an ID attribute to another ID attribute:" );
                Console.WriteLine( "   \"{0}\" == \n   \"{1}\" ? {2}",
                    arrayIDAttr1.ToString(), listIDAttr.ToString(),
                    arrayIDAttr1.Equals( listIDAttr ) );
            }
            else
                Console.WriteLine( "The parameters information could " +
                    "not be retrieved for method {0}.", mInfo.Name);
        }
    }
}

/*
This example of Attribute.Equals( object ) generates the following output.

Compare a usage attribute instance to another instance of the same attribute:
   "NDP_UE_CS.ArgumentUsageAttribute:Must pass an array here." ==
   "NDP_UE_CS.ArgumentUsageAttribute:Must pass an array here." ? True

Compare a usage attribute to another usage attribute:
   "NDP_UE_CS.ArgumentUsageAttribute:Must pass an array here." ==
   "NDP_UE_CS.ArgumentUsageAttribute:Can pass param list or array here." ? False

Compare an ID attribute instance to another instance of the same attribute:
   "NDP_UE_CS.ArgumentIDAttribute.06abf046-0c38-47ac-b215-09e1daa7f37d" ==
   "NDP_UE_CS.ArgumentIDAttribute.cea23c39-f14b-4e95-bee2-9f661d8cd64b" ? False

Compare an ID attribute to another ID attribute:
   "NDP_UE_CS.ArgumentIDAttribute.06abf046-0c38-47ac-b215-09e1daa7f37d" ==
   "NDP_UE_CS.ArgumentIDAttribute.bdeb6f3e-18aa-410b-bef6-9788956b008c" ? False
*/

// Example for the Attribute.Equals( Object* ) method.
using namespace System;
using namespace System::Reflection;

namespace NDP_UE_CPP
{
   // Define a custom parameter attribute that takes a single message argument.

   [AttributeUsage(AttributeTargets::Parameter)]
   public ref class ArgumentUsageAttribute: public Attribute
   {
   protected:

      // usageMsg is storage for the attribute message.
      String^ usageMsg;

   public:

      // This is the attribute constructor.
      ArgumentUsageAttribute( String^ UsageMsg )
      {
         this->usageMsg = UsageMsg;
      }

      // Override ToString() to append the message to what the base generates.
      virtual String^ ToString() override
      {
         return String::Concat( Attribute::ToString(), ":", usageMsg );
      }

   };

   // Define a custom parameter attribute that generates a GUID for each instance.

   [AttributeUsage(AttributeTargets::Parameter)]
   public ref class ArgumentIDAttribute: public Attribute
   {
   protected:

      // instanceGUID is storage for the generated GUID.
      Guid instanceGUID;

   public:

      // This is the attribute constructor, which generates the GUID.
      ArgumentIDAttribute()
      {
         this->instanceGUID = Guid::NewGuid();
      }

      // Override ToString() to append the GUID to what the base generates.
      virtual String^ ToString() override
      {
         return String::Concat( Attribute::ToString(), ".", instanceGUID.ToString() );
      }
   };

   public ref class TestClass
   {
   public:

      // Assign an ArgumentID attribute to each parameter.
      // Assign an ArgumentUsage attribute to each parameter.
      void TestMethod( [ArgumentID][ArgumentUsage("Must pass an array here.")]array<String^>^strArray,
                       [ArgumentID][ArgumentUsage("Can pass param list or array here.")]array<String^>^strList ){}

   };

   // Create Attribute objects and compare them.
   void CompareAttributes()
   {
      // Get the class type, and then get the MethodInfo object
      // for TestMethod to access its metadata.
      Type^ clsType = TestClass::typeid;
      MethodInfo^ mInfo = clsType->GetMethod( "TestMethod" );

      // There will be two elements in pInfoArray, one for each parameter.
      array<ParameterInfo^>^pInfoArray = mInfo->GetParameters();
      if ( pInfoArray != nullptr )
      {
         // Create an instance of the argument usage attribute on strArray.
         ArgumentUsageAttribute^ arrayUsageAttr1 = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 0 ], ArgumentUsageAttribute::typeid ));

         // Create another instance of the argument usage attribute
         // on strArray.
         ArgumentUsageAttribute^ arrayUsageAttr2 = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 0 ], ArgumentUsageAttribute::typeid ));

         // Create an instance of the argument usage attribute on strList.
         ArgumentUsageAttribute^ listUsageAttr = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 1 ], ArgumentUsageAttribute::typeid ));

         // Create an instance of the argument ID attribute on strArray.
         ArgumentIDAttribute^ arrayIDAttr1 = static_cast<ArgumentIDAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 0 ], ArgumentIDAttribute::typeid ));

         // Create another instance of the argument ID attribute on strArray.
         ArgumentIDAttribute^ arrayIDAttr2 = static_cast<ArgumentIDAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 0 ], ArgumentIDAttribute::typeid ));

         // Create an instance of the argument ID attribute on strList.
         ArgumentIDAttribute^ listIDAttr = static_cast<ArgumentIDAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 1 ], ArgumentIDAttribute::typeid ));

         // Compare various pairs of attributes for equality.
         Console::WriteLine( "\nCompare a usage attribute instance to "
         "another instance of the same attribute:" );
         Console::WriteLine( "   \"{0}\" == \n   \"{1}\" ? {2}", arrayUsageAttr1->ToString(), arrayUsageAttr2->ToString(), arrayUsageAttr1->Equals( arrayUsageAttr2 ) );
         Console::WriteLine( "\nCompare a usage attribute to another usage attribute:" );
         Console::WriteLine( "   \"{0}\" == \n   \"{1}\" ? {2}", arrayUsageAttr1->ToString(), listUsageAttr->ToString(), arrayUsageAttr1->Equals( listUsageAttr ) );
         Console::WriteLine( "\nCompare an ID attribute instance to "
         "another instance of the same attribute:" );
         Console::WriteLine( "   \"{0}\" == \n   \"{1}\" ? {2}", arrayIDAttr1->ToString(), arrayIDAttr2->ToString(), arrayIDAttr1->Equals( arrayIDAttr2 ) );
         Console::WriteLine( "\nCompare an ID attribute to another ID attribute:" );
         Console::WriteLine( "   \"{0}\" == \n   \"{1}\" ? {2}", arrayIDAttr1->ToString(), listIDAttr->ToString(), arrayIDAttr1->Equals( listIDAttr ) );
      }
      else
            Console::WriteLine( "The parameters information could "
      "not be retrieved for method {0}.", mInfo->Name );
   }
}

int main()
{
   Console::WriteLine( "This example of Attribute::Equals( Object* ) "
   "generates the following output." );
   NDP_UE_CPP::CompareAttributes();
}

/*
This example of Attribute::Equals( Object* ) generates the following output.

Compare a usage attribute instance to another instance of the same attribute:
   "NDP_UE_CPP.ArgumentUsageAttribute:Must pass an array here." ==
   "NDP_UE_CPP.ArgumentUsageAttribute:Must pass an array here." ? True

Compare a usage attribute to another usage attribute:
   "NDP_UE_CPP.ArgumentUsageAttribute:Must pass an array here." ==
   "NDP_UE_CPP.ArgumentUsageAttribute:Can pass param list or array here." ? False

Compare an ID attribute instance to another instance of the same attribute:
   "NDP_UE_CPP.ArgumentIDAttribute.28db2434-1031-469a-9a13-babeb9be9e2c" ==
   "NDP_UE_CPP.ArgumentIDAttribute.1140dcb9-7341-4ba0-b2de-e9d8f0955216" ? False

Compare an ID attribute to another ID attribute:
   "NDP_UE_CPP.ArgumentIDAttribute.28db2434-1031-469a-9a13-babeb9be9e2c" ==
   "NDP_UE_CPP.ArgumentIDAttribute.7f983425-5ea9-4c90-b536-bd6229fdfe63" ? False
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::.GetCustomAttribute 方法

Attribute
.
.
::
.
GetCustomAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Attribute 类

检索应用于程序集、模块、类型成员或方法参数的指定类型的自定义特性。

名称 说明
页首

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::.GetCustomAttribute 方法 (Assembly, Type)

Attribute
.
.
::
.
GetCustomAttribute 方法 (Assembly, Type)
Attribute 类

检索应用于指定程序集的自定义特性。参数指定程序集和要搜索的自定义特性的类型。 检索应用于指定程序集的自定义特性。参数指定程序集和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttribute ( _
    element As Assembly, _
    attributeType As Type _
) As Attribute
public static Attribute GetCustomAttribute(
    Assembly element,
    Type attributeType
)
public:
static Attribute^ GetCustomAttribute(
    Assembly^ element,
    Type^ attributeType
)
static member GetCustomAttribute :
        element:Assembly *
        attributeType:Type -> Attribute

参数

element
类型： System.Reflection Assembly
一个从 Assembly 类派生的对象，该类描述可重用模块集合。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型： System Attribute
一个引用，指向应用于 element 的 attributeType 类型的单个自定义特性；如果没有此类特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
AmbiguousMatchException | 找到了多个请求的特性。

如果希望返回多个值，则使用 GetCustomAttributes 方法，否则将引发 AmbiguousMatchException。

说明 说明

从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttribute 方法的用法，采用 Assembly 作为参数。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

' Add an AssemblyDescription attribute.
<Assembly: AssemblyDescription("A sample description")>

Module DemoModule
    Sub Main()
        ' Get the assembly for this module.
        Dim assy As System.Reflection.Assembly = GetType(DemoModule).Assembly
        ' Store the assembly name.
        Dim assyName As String = assy.GetName().Name
        ' See if the AssemblyDescription attribute is defined.
        If Attribute.IsDefined(assy, GetType(AssemblyDescriptionAttribute)) _
            Then
            ' Affirm that the attribute is defined. Assume the filename of
            ' this code example is "IsDef1VB".
            Console.WriteLine("The AssemblyDescription attribute is " & _
                "defined for assembly {0}.", assyName)
            ' Get the description attribute itself.
            Dim attr As Attribute = Attribute.GetCustomAttribute( _
                assy, GetType(AssemblyDescriptionAttribute))
            ' Display the description.
            If Not attr Is Nothing And _
                TypeOf attr Is AssemblyDescriptionAttribute Then
                Dim adAttr As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("The description is " & _
                    Chr(34) & "{0}" & Chr(34) & ".", adAttr.Description)
            Else
                Console.WriteLine("The description could not be retrieved.")
            End If
        Else
            Console.WriteLine("The AssemblyDescription attribute is not " & _
                              "defined for assembly {0}.", assyName)
        End If
    End Sub
End Module

' Output:
' The AssemblyDescription attribute is defined for assembly IsDef1VB.
' The description is "A sample description".

using System;
using System.Reflection;

// Add an AssemblyDescription attribute
[assembly: AssemblyDescription("A sample description")]
namespace IsDef1CS
{
    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(DemoClass);
            // Get the assembly object.
            Assembly assy = clsType.Assembly;
            // Store the assembly's name.
            String assyName = assy.GetName().Name;
            // See if the Assembly Description is defined.
            bool isdef = Attribute.IsDefined(assy,
                typeof(AssemblyDescriptionAttribute));
            if (isdef)
            {
                // Affirm that the attribute is defined.
                Console.WriteLine("The AssemblyDescription attribute " +
                    "is defined for assembly {0}.", assyName);
                // Get the description attribute itself.
                AssemblyDescriptionAttribute adAttr =
                    (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
                    assy, typeof(AssemblyDescriptionAttribute));
                // Display the description.
                if (adAttr != null)
                    Console.WriteLine("The description is \"{0}\".",
                        adAttr.Description);
                else
                    Console.WriteLine("The description could not " +
                        "be retrieved.");
            }
            else
                Console.WriteLine("The AssemblyDescription attribute is not " +
                    "defined for assembly {0}.", assyName);
        }
    }
}

/*
 * Output:
 * The AssemblyDescription attribute is defined for assembly IsDef1CS.
 * The description is "A sample description".
 */

using namespace System;
using namespace System::Reflection;

// Add an AssemblyDescription attribute
[assembly:AssemblyDescription("A sample description")];
namespace IsDef1CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = DemoClass::typeid;

         // Get the assembly object.
         Assembly^ assy = clsType->Assembly;

         // Store the assembly's name.
         String^ assyName = assy->GetName()->Name;

         //Type assyType = assy.GetType();
         // See if the Assembly Description is defined.
         bool isdef = Attribute::IsDefined( assy, AssemblyDescriptionAttribute::typeid );
         if ( isdef )
         {

            // Affirm that the attribute is defined.
            Console::WriteLine( "The AssemblyDescription attribute "
            "is defined for assembly {0}.", assyName );

            // Get the description attribute itself.
            AssemblyDescriptionAttribute^ adAttr = dynamic_cast<AssemblyDescriptionAttribute^>(Attribute::GetCustomAttribute( assy, AssemblyDescriptionAttribute::typeid ));

            // Display the description.
            if ( adAttr != nullptr )
                        Console::WriteLine( "The description is \"{0}\".", adAttr->Description );
            else
                        Console::WriteLine( "The description could not "
            "be retrieved." );
         }
         else
                  Console::WriteLine( "The AssemblyDescription attribute is not "
         "defined for assembly {0}.", assyName );
      }

   };

}

/*
 * Output:
 * The AssemblyDescription attributeis defined for assembly IsDef1CS.
 * The description is "A sample description".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttribute 重载
System 命名空间


Attribute ..::.GetCustomAttribute 方法 (MemberInfo, Type)

Attribute
.
.
::
.
GetCustomAttribute 方法 (MemberInfo, Type)
Attribute 类

检索应用于类型成员的自定义特性。参数指定成员和要搜索的自定义特性的类型。 检索应用于类型成员的自定义特性。参数指定成员和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttribute ( _
    element As MemberInfo, _
    attributeType As Type _
) As Attribute
public static Attribute GetCustomAttribute(
    MemberInfo element,
    Type attributeType
)
public:
static Attribute^ GetCustomAttribute(
    MemberInfo^ element,
    Type^ attributeType
)
static member GetCustomAttribute :
        element:MemberInfo *
        attributeType:Type -> Attribute

参数

element
类型： System.Reflection MemberInfo
一个从 MemberInfo 类派生的对象，该类描述类的构造函数、事件、字段、方法或属性成员。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型： System Attribute
一个引用，指向应用于 element 的 attributeType 类型的单个自定义特性；如果没有此类特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
NotSupportedException | element 不是构造函数、方法、属性、事件、类型或字段。
AmbiguousMatchException | 找到多个请求的特性。
TypeLoadException | 无法加载自定义特性类型。

匹配项以 Type..::.IsAssignableFrom 的“返回值”部分所描述的同一方式来确定。

说明 说明

从 .NET Framework 2.0 版开始，如果类型、方法和构造函数的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果类型、方法和构造函数的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果类型、方法和构造函数的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果类型、方法和构造函数的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttribute 方法的用法，采用 MemberInfo 作为参数。

Imports System
Imports System.Reflection

Module DemoModule

    Public Class TestClass
        ' Assign the Obsolete attribute to a method.
        <Obsolete("This method is obsolete. Use Method2() instead.")> _
        Public Sub Method1()
        End Sub

        Public Sub Method2()
        End Sub
    End Class

    Sub Main()
        ' Get the class type to access its metadata.
        Dim clsType As Type = GetType(TestClass)
        ' Get the MethodInfo object for Method1.
        Dim mInfo As MethodInfo = clsType.GetMethod("Method1")
        ' See if the Obsolete attribute is defined for this method.
        Dim isDef As Boolean = Attribute.IsDefined(mInfo, _
            GetType(ObsoleteAttribute))
        Dim strDef As String
        If isDef = True Then
            strDef = "is"
        Else
            strDef = "is not"
        End If
        ' Display the results.
        Console.WriteLine("The Obsolete attribute {0} defined for " & _
            "method {1} of class {2}.", strDef, mInfo.Name, clsType.Name)
        ' If it's defined, display the attribute's message.
        If isDef = True Then
            Dim attr As Attribute = Attribute.GetCustomAttribute(mInfo, _
                GetType(ObsoleteAttribute))
            If Not attr Is Nothing And TypeOf attr Is ObsoleteAttribute Then
                Dim obsAttr As ObsoleteAttribute = _
                    CType(attr, ObsoleteAttribute)
                Console.WriteLine("The message is: ""{0}""", obsAttr.Message)
            Else
                Console.WriteLine("The message could not be retrieved.")
            End If
        End If
    End Sub
End Module

' Output:
' The Obsolete attribute is defined for method Method1 of class TestClass.
' The message is: "This method is obsolete. Use Method2() instead."

using System;
using System.Reflection;

namespace IsDef4CS
{
    public class TestClass
    {
        // Assign the Obsolete attribute to a method.
        [Obsolete("This method is obsolete. Use Method2 instead.")]
        public void Method1()
        {}
        public void Method2()
        {}
    }

    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(TestClass);
            // Get the MethodInfo object for Method1.
            MethodInfo mInfo = clsType.GetMethod("Method1");
            // See if the Obsolete attribute is defined for this method.
            bool isDef = Attribute.IsDefined(mInfo, typeof(ObsoleteAttribute));
            // Display the result.
            Console.WriteLine("The Obsolete Attribute {0} defined for {1} of class {2}.",
                isDef ? "is" : "is not", mInfo.Name, clsType.Name);
            // If it's defined, display the attribute's message.
            if (isDef)
            {
                ObsoleteAttribute obsAttr =
                                 (ObsoleteAttribute)Attribute.GetCustomAttribute(
                                                    mInfo, typeof(ObsoleteAttribute));
                if (obsAttr != null)
                    Console.WriteLine("The message is: \"{0}\".",
                        obsAttr.Message);
                else
                    Console.WriteLine("The message could not be retrieved.");
            }
        }
    }
}

/*
 * Output:
 * The Obsolete Attribute is defined for Method1 of class TestClass.
 * The message is: "This method is obsolete. Use Method2 instead.".
 */

using namespace System;
using namespace System::Reflection;

namespace IsDef4CS
{
   public ref class TestClass
   {
   public:

      // Assign the Obsolete attribute to a method.

      [Obsolete("This method is obsolete. Use Method2 instead.")]
      void Method1(){}

      void Method2(){}

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = TestClass::typeid;

         // Get the MethodInfo object for Method1.
         MethodInfo^ mInfo = clsType->GetMethod( "Method1" );

         // See if the Obsolete attribute is defined for this method.
         bool isDef = Attribute::IsDefined( mInfo, ObsoleteAttribute::typeid );

         // Display the result.
         Console::WriteLine( "The Obsolete Attribute {0} defined for {1} of class {2}.", isDef ? (String^)"is" : "is not", mInfo->Name, clsType->Name );

         // If it's defined, display the attribute's message.
         if ( isDef )
         {
            ObsoleteAttribute^ obsAttr = dynamic_cast<ObsoleteAttribute^>(Attribute::GetCustomAttribute( mInfo, ObsoleteAttribute::typeid ));
            if ( obsAttr != nullptr )
                        Console::WriteLine( "The message is: \"{0}\".", obsAttr->Message );
            else
                        Console::WriteLine( "The message could not be retrieved." );
         }
      }

   };

}

/*
 * Output:
 * The Obsolete Attribute is defined for Method1 of class TestClass.
 * The message is: "This method is obsolete. Use Method2 instead.".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttribute 重载
System 命名空间


Attribute ..::.GetCustomAttribute 方法 (Module, Type)

Attribute
.
.
::
.
GetCustomAttribute 方法 (Module, Type)
Attribute 类

检索应用于模块的自定义特性。参数指定模块和要搜索的自定义特性的类型。 检索应用于模块的自定义特性。参数指定模块和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttribute ( _
    element As Module, _
    attributeType As Type _
) As Attribute
public static Attribute GetCustomAttribute(
    Module element,
    Type attributeType
)
public:
static Attribute^ GetCustomAttribute(
    Module^ element,
    Type^ attributeType
)
static member GetCustomAttribute :
        element:Module *
        attributeType:Type -> Attribute

参数

element
类型： System.Reflection Module
一个从 Module 类派生的对象，该类描述可移植的可执行文件。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型： System Attribute
一个引用，指向应用于 element 的 attributeType 类型的单个自定义特性；如果没有此类特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
AmbiguousMatchException | 找到了多个请求的特性。

下面的代码示例演示 GetCustomAttribute 方法的用法，采用 Module 作为参数。

Imports System
Imports System.Reflection
Imports System.Diagnostics

' Add the Debuggable attribute to the module.
<Module: Debuggable(True, False)>

Module DemoModule
    Sub Main()
        ' Get the module type information to access its metadata.
        Dim modType As Type = GetType(DemoModule)
        ' See if the Debuggable attribute is defined.
        Dim isDef As Boolean = Attribute.IsDefined(modType.Module, _
                               GetType(DebuggableAttribute))
        Dim strDef As String
        If isDef = True Then
            strDef = "is"
        Else
            strDef = "is not"
        End If
        ' Display the result
        Console.WriteLine("The debuggable attribute {0} defined for " & _
                          "module {1}.", strDef, modType.Name)
        ' If the attribute is defined, display the JIT settings.
        If isDef = True Then
            ' Retrieve the attribute itself.
            Dim attr As Attribute = _
                Attribute.GetCustomAttribute(modType.Module, _
                GetType(DebuggableAttribute))
            If Not attr Is Nothing And TypeOf attr Is DebuggableAttribute Then
                Dim dbgAttr As DebuggableAttribute = _
                    CType(attr, DebuggableAttribute)
                Console.WriteLine("JITTrackingEnabled is {0}.", _
                    dbgAttr.IsJITTrackingEnabled.ToString())
                Console.WriteLine("JITOptimizerDisabled is {0}.", _
                    dbgAttr.IsJITOptimizerDisabled.ToString())
            Else
                Console.WriteLine("The Debuggable attribute could " & _
                                  "not be retrieved.")
            End If
        End If
    End Sub
End Module

' Output:
' The debuggable attribute is defined for module DemoModule.
' JITTrackingEnabled is True.
' JITOptimizerDisabled is False.

using System;
using System.Diagnostics;

// Add the Debuggable attribute to the module.
[module:Debuggable(true, false)]
namespace IsDef2CS
{
    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(DemoClass);
            // See if the Debuggable attribute is defined for this module.
            bool isDef = Attribute.IsDefined(clsType.Module,
                typeof(DebuggableAttribute));
            // Display the result.
            Console.WriteLine("The Debuggable attribute {0} " +
                "defined for Module {1}.",
                isDef ? "is" : "is not",
                clsType.Module.Name);
            // If the attribute is defined, display the JIT settings.
            if (isDef)
            {
                // Retrieve the attribute itself.
                DebuggableAttribute dbgAttr = (DebuggableAttribute)
                    Attribute.GetCustomAttribute(clsType.Module,
                    typeof(DebuggableAttribute));
                if (dbgAttr != null)
                {
                    Console.WriteLine("JITTrackingEnabled is {0}.",
                        dbgAttr.IsJITTrackingEnabled);
                    Console.WriteLine("JITOptimizerDisabled is {0}.",
                        dbgAttr.IsJITOptimizerDisabled);
                }
                else
                    Console.WriteLine("The Debuggable attribute " +
                        "could not be retrieved.");
            }
        }
    }
}

/*
 * Output:
 * The Debuggable attribute is defined for Module IsDef2CS.exe.
 * JITTrackingEnabled is True.
 * JITOptimizerDisabled is False.
 */

using namespace System;
using namespace System::Diagnostics;

// Add the Debuggable attribute to the module.
[module:Debuggable(true,false)];
namespace IsDef2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = DemoClass::typeid;

         // See if the Debuggable attribute is defined for this module.
         bool isDef = Attribute::IsDefined( clsType->Module, DebuggableAttribute::typeid );

         // Display the result.
         Console::WriteLine( "The Debuggable attribute {0} "
         "defined for Module {1}.", isDef ? (String^)"is" : "is not", clsType->Module->Name );

         // If the attribute is defined, display the JIT settings.
         if ( isDef )
         {

            // Retrieve the attribute itself.
            DebuggableAttribute^ dbgAttr = dynamic_cast<DebuggableAttribute^>(Attribute::GetCustomAttribute( clsType->Module, DebuggableAttribute::typeid ));
            if ( dbgAttr != nullptr )
            {
               Console::WriteLine( "JITTrackingEnabled is {0}.", dbgAttr->IsJITTrackingEnabled );
               Console::WriteLine( "JITOptimizerDisabled is {0}.", dbgAttr->IsJITOptimizerDisabled );
            }
            else
                        Console::WriteLine( "The Debuggable attribute "
            "could not be retrieved." );
         }
      }

   };

}

/*
 * Output:
 * The Debuggable attribute is defined for Module IsDef2CS.exe.
 * JITTrackingEnabled is True.
 * JITOptimizerDisabled is False.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttribute 重载
System 命名空间


Attribute ..::.GetCustomAttribute 方法 (ParameterInfo, Type)

Attribute
.
.
::
.
GetCustomAttribute 方法 (ParameterInfo, Type)
Attribute 类

检索应用于方法参数的自定义特性。参数指定方法参数和要搜索的自定义特性的类型。 检索应用于方法参数的自定义特性。参数指定方法参数和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttribute ( _
    element As ParameterInfo, _
    attributeType As Type _
) As Attribute
public static Attribute GetCustomAttribute(
    ParameterInfo element,
    Type attributeType
)
public:
static Attribute^ GetCustomAttribute(
    ParameterInfo^ element,
    Type^ attributeType
)
static member GetCustomAttribute :
        element:ParameterInfo *
        attributeType:Type -> Attribute

参数

element
类型： System.Reflection ParameterInfo
一个从 ParameterInfo 类派生的对象，该类描述类成员的参数。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型： System Attribute
一个引用，指向应用于 element 的 attributeType 类型的单个自定义特性；如果没有此类特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
AmbiguousMatchException | 找到多个请求的特性。
TypeLoadException | 无法加载自定义特性类型。

如果 element 表示派生类型的方法中的参数，则返回值将包含应用于重写基方法中的同一参数的可继承自定义特性。

下面的代码示例定义一个自定义参数 Attribute 类，并将该自定义特性应用于派生类和该派生类的基类中的方法。该示例说明如何使用 GetCustomAttribute 方法返回特性。 下面的代码示例定义一个自定义参数 Attribute 类，并将该自定义特性应用于派生类和该派生类的基类中的方法。该示例说明如何使用 GetCustomAttribute 方法返回特性。

' Example for the Attribute.GetCustomAttribute( ParameterInfo, Type ) method.
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Define a custom parameter attribute that takes a single message argument.
    <AttributeUsage(AttributeTargets.Parameter)>  _
    Public Class ArgumentUsageAttribute
        Inherits Attribute

        ' This is the attribute constructor.
        Public Sub New(UsageMsg As String)
            Me.usageMsg = UsageMsg
        End Sub ' New

        ' usageMsg is storage for the attribute message.
        Protected usageMsg As String

        ' This is the Message property for the attribute.
        Public Property Message() As String
            Get
                Return usageMsg
            End Get
            Set
                usageMsg = value
            End Set
        End Property
    End Class ' ArgumentUsageAttribute

    Public Class BaseClass

        ' Assign an ArgumentUsage attribute to the strArray parameter.
        ' Assign a ParamArray attribute to strList using the ParamArray keyword.
        Public Overridable Sub TestMethod( _
            <ArgumentUsage("Must pass an array here.")> _
            strArray() As String, _
            ParamArray strList() As String)
        End Sub ' TestMethod
    End Class ' BaseClass

    Public Class DerivedClass
        Inherits BaseClass

        ' Assign an ArgumentUsage attribute to the strList parameter.
        ' Assign a ParamArray attribute to strList using the ParamArray keyword.
        Public Overrides Sub TestMethod( _
            strArray() As String, _
            <ArgumentUsage("Can pass a parameter list or array here.")> _
            ParamArray strList() As String)
        End Sub ' TestMethod
    End Class ' DerivedClass

    Module CustomParamDemo

        Sub Main()
            Console.WriteLine( _
                "This example of Attribute.GetCustomAttribute" & _
                "( ParameterInfo, Type )" & vbCrLf & _
                "generates the following output.")

            ' Get the class type, and then get the MethodInfo object
            ' for TestMethod to access its metadata.
            Dim clsType As Type = GetType(DerivedClass)
            Dim mInfo As MethodInfo = clsType.GetMethod("TestMethod")

            ' Iterate through the ParameterInfo array for the method parameters.
            Dim pInfoArray As ParameterInfo() = mInfo.GetParameters()
            If Not (pInfoArray Is Nothing) Then
                Dim paramInfo As ParameterInfo
                For Each paramInfo In  pInfoArray

                    ' See if the ParamArray attribute is defined.
                    Dim isDef As Boolean = _
                        Attribute.IsDefined(paramInfo, _
                            GetType(ParamArrayAttribute))

                    If isDef Then
                        Console.WriteLine( vbCrLf & _
                            "The ParamArray attribute is defined for " & _
                            vbCrLf & "parameter {0} of method {1}.", _
                            paramInfo.Name, mInfo.Name)
                    End If

                    ' See if ParamUsageAttribute is defined.
                    ' If so, display a message.
                    Dim usageAttr As ArgumentUsageAttribute = _
                        Attribute.GetCustomAttribute(paramInfo, _
                            GetType(ArgumentUsageAttribute))

                    If Not (usageAttr Is Nothing) Then
                        Console.WriteLine( vbCrLf & "The " & _
                            "ArgumentUsage attribute is defined for " & _
                            vbCrLf & "parameter {0} of method {1}.", _
                            paramInfo.Name, mInfo.Name)
                        Console.WriteLine( vbCrLf & _
                            "    The usage message for {0} is: " & _
                            vbCrLf & "    ""{1}"".", _
                            paramInfo.Name, usageAttr.Message)
                    End If
                Next paramInfo
            Else
                Console.WriteLine( _
                    "The parameters information could " & _
                    "not be retrieved for method {0}.", mInfo.Name)
            End If
        End Sub ' Main

    End Module ' DemoClass
End Namespace ' NDP_UE_VB

' This example of Attribute.GetCustomAttribute( ParameterInfo, Type )
' generates the following output.
'
' The ArgumentUsage attribute is defined for
' parameter strArray of method TestMethod.
'
'     The usage message for strArray is:
'     "Must pass an array here.".
'
' The ParamArray attribute is defined for
' parameter strList of method TestMethod.
'
' The ArgumentUsage attribute is defined for
' parameter strList of method TestMethod.
'
'     The usage message for strList is:
'     "Can pass a parameter list or array here.".

// Example for the Attribute.GetCustomAttribute( ParameterInfo, Type ) method.
using System;
using System.Reflection;

namespace NDP_UE_CS
{
    // Define a custom parameter attribute that takes a single message argument.
    [AttributeUsage( AttributeTargets.Parameter )]
    public class ArgumentUsageAttribute : Attribute
    {
        // This is the attribute constructor.
        public ArgumentUsageAttribute( string UsageMsg )
        {
            this.usageMsg = UsageMsg;
        }

        // usageMsg is storage for the attribute message.
        protected string usageMsg;

        // This is the Message property for the attribute.
        public string Message
        {
            get { return usageMsg; }
            set { usageMsg = value; }
        }
    }

    public class BaseClass
    {
        // Assign an ArgumentUsage attribute to the strArray parameter.
        // Assign a ParamArray attribute to strList using the params keyword.
        public virtual void TestMethod(
            [ArgumentUsage("Must pass an array here.")]
            String[] strArray,
            params String[] strList)
        { }
    }

    public class DerivedClass : BaseClass
    {
        // Assign an ArgumentUsage attribute to the strList parameter.
        // Assign a ParamArray attribute to strList using the params keyword.
        public override void TestMethod(
            String[] strArray,
            [ArgumentUsage("Can pass a parameter list or array here.")]
            params String[] strList)
        { }
    }

    class CustomParamDemo
    {
        static void Main( )
        {
            Console.WriteLine(
                "This example of Attribute.GetCustomAttribute( Param" +
                "eterInfo, Type )\ngenerates the following output." );

            // Get the class type, and then get the MethodInfo object
            // for TestMethod to access its metadata.
            Type clsType = typeof( DerivedClass );
            MethodInfo mInfo = clsType.GetMethod("TestMethod");

            // Iterate through the ParameterInfo array for the method parameters.
            ParameterInfo[] pInfoArray = mInfo.GetParameters();
            if (pInfoArray != null)
            {
                foreach( ParameterInfo paramInfo in pInfoArray )
                {
                    // See if the ParamArray attribute is defined.
                    bool isDef = Attribute.IsDefined(
                        paramInfo, typeof(ParamArrayAttribute));

                    if( isDef )
                        Console.WriteLine(
                            "\nThe ParamArray attribute is defined " +
                            "for \nparameter {0} of method {1}.",
                            paramInfo.Name, mInfo.Name);

                    // See if ParamUsageAttribute is defined.
                    // If so, display a message.
                    ArgumentUsageAttribute usageAttr = (ArgumentUsageAttribute)
                        Attribute.GetCustomAttribute(
                            paramInfo, typeof(ArgumentUsageAttribute) );

                    if( usageAttr != null )
                    {
                        Console.WriteLine(
                            "\nThe ArgumentUsage attribute is defined " +
                            "for \nparameter {0} of method {1}.",
                            paramInfo.Name, mInfo.Name );

                        Console.WriteLine( "\n    The usage " +
                            "message for {0} is:\n    \"{1}\".",
                            paramInfo.Name, usageAttr.Message);
                    }
                }
            }
            else
                Console.WriteLine(
                    "The parameters information could not " +
                    "be retrieved for method {0}.", mInfo.Name);
        }
    }
}

/*
This example of Attribute.GetCustomAttribute( ParameterInfo, Type )
generates the following output.

The ArgumentUsage attribute is defined for
parameter strArray of method TestMethod.

    The usage message for strArray is:
    "Must pass an array here.".

The ParamArray attribute is defined for
parameter strList of method TestMethod.

The ArgumentUsage attribute is defined for
parameter strList of method TestMethod.

    The usage message for strList is:
    "Can pass a parameter list or array here.".
*/

// Example for the Attribute::GetCustomAttribute( ParameterInfo*, Type* )
// method.
using namespace System;
using namespace System::Collections;
using namespace System::Reflection;

namespace NDP_UE_CPP
{

   // Define a custom parameter attribute that takes a single message argument.

   [AttributeUsage(AttributeTargets::Parameter)]
   public ref class ArgumentUsageAttribute: public Attribute
   {
   protected:

      // usageMsg is storage for the attribute message.
      String^ usageMsg;

   public:

      // This is the attribute constructor.
      ArgumentUsageAttribute( String^ UsageMsg )
      {
         this->usageMsg = UsageMsg;
      }

      property String^ Message
      {
         // This is the Message property for the attribute.
         String^ get()
         {
            return usageMsg;
         }

         void set( String^ value )
         {
            this->usageMsg = value;
         }
      }
   };

   public ref class BaseClass
   {
   public:

      // Assign an ArgumentUsage attribute to the strArray parameter.
      // Assign a ParamArray attribute to strList.
      virtual void TestMethod( [ArgumentUsage("Must pass an array here.")]array<String^>^strArray,
                               ...array<String^>^strList ){}
   };

   public ref class DerivedClass: public BaseClass
   {
   public:

      // Assign an ArgumentUsage attributes to the strList parameter.
      virtual void TestMethod( array<String^>^strArray, [ArgumentUsage(
      "Can pass a parameter list or array here.")]array<String^>^strList ) override {}
   };
}

int main()
{
   Console::WriteLine( "This example of Attribute::GetCustomAttribute( Param"
   "eterInfo*, Type* )\ngenerates the following output." );

   // Get the class type, and then get the MethodInfo object
   // for TestMethod to access its metadata.
   Type^ clsType = NDP_UE_CPP::DerivedClass::typeid;
   MethodInfo^ mInfo = clsType->GetMethod( "TestMethod" );

   // Iterate through the ParameterInfo array for the method parameters.
   array<ParameterInfo^>^pInfoArray = mInfo->GetParameters();
   if ( pInfoArray != nullptr )
   {
      // This implements foreach( ParameterInfo* paramInfo in pInfoArray ).
      IEnumerator^ myEnum = pInfoArray->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         ParameterInfo^ paramInfo = safe_cast<ParameterInfo^>(myEnum->Current);

         // See if the ParamArray attribute is defined.
         bool isDef = Attribute::IsDefined( paramInfo, ParamArrayAttribute::typeid );
         if ( isDef )
                  Console::WriteLine( "\nThe ParamArray attribute is defined for \n"
         "parameter {0} of method {1}.", paramInfo->Name, mInfo->Name );

         // See if ParamUsageAttribute is defined.
         // If so, display a message.
         NDP_UE_CPP::ArgumentUsageAttribute^ usageAttr = static_cast<NDP_UE_CPP::ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( paramInfo, NDP_UE_CPP::ArgumentUsageAttribute::typeid ));
         if ( usageAttr != nullptr )
         {
            Console::WriteLine( "\nThe ArgumentUsage attribute is defined for \n"
            "parameter {0} of method {1}.", paramInfo->Name, mInfo->Name );
            Console::WriteLine( "\n    The usage "
            "message for {0} is:\n    \"{1}\".", paramInfo->Name, usageAttr->Message );
         }
      }
   }
   else
      Console::WriteLine( "The parameters information could "
   "not be retrieved for method {0}.", mInfo->Name );
}

/*
This example of Attribute::GetCustomAttribute( ParameterInfo*, Type* )
generates the following output.

The ArgumentUsage attribute is defined for
parameter strArray of method TestMethod.

    The usage message for strArray is:
    "Must pass an array here.".

The ParamArray attribute is defined for
parameter strList of method TestMethod.

The ArgumentUsage attribute is defined for
parameter strList of method TestMethod.

    The usage message for strList is:
    "Can pass a parameter list or array here.".
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttribute 重载
System 命名空间


Attribute ..::.GetCustomAttribute 方法 (Assembly, Type, Boolean)

Attribute
.
.
::
.
GetCustomAttribute 方法 (Assembly, Type, Boolean)
Attribute 类

检索应用于程序集的自定义特性。参数指定程序集、要搜索的自定义特性的类型以及忽略的搜索选项。 检索应用于程序集的自定义特性。参数指定程序集、要搜索的自定义特性的类型以及忽略的搜索选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttribute ( _
    element As Assembly, _
    attributeType As Type, _
    inherit As Boolean _
) As Attribute
public static Attribute GetCustomAttribute(
    Assembly element,
    Type attributeType,
    bool inherit
)
public:
static Attribute^ GetCustomAttribute(
    Assembly^ element,
    Type^ attributeType,
    bool inherit
)
static member GetCustomAttribute :
        element:Assembly *
        attributeType:Type *
        inherit:bool -> Attribute

参数

element
类型： System.Reflection Assembly
一个从 Assembly 类派生的对象，该类描述可重用模块集合。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
此参数被忽略，并且不会影响此方法的操作。

返回值

类型： System Attribute
一个引用，指向应用于 element 的 attributeType 类型的单个自定义特性；如果没有此类特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
AmbiguousMatchException | 找到多个请求的特性。
说明 说明

从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttribute 方法的用法，采用 Assembly 作为参数。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

' Add an AssemblyDescription attribute.
<Assembly: AssemblyDescription("A sample description")>

Module DemoModule
    Sub Main()
        ' Get the assembly for this module.
        Dim assy As System.Reflection.Assembly = GetType(DemoModule).Assembly
        ' Store the assembly name.
        Dim assyName As String = assy.GetName().Name
        ' See if the AssemblyDescription attribute is defined.
        If Attribute.IsDefined(assy, GetType(AssemblyDescriptionAttribute)) _
            Then
            ' Affirm that the attribute is defined. Assume the filename of
            ' this code example is "IsDef1VB".
            Console.WriteLine("The AssemblyDescription attribute is " & _
                "defined for assembly {0}.", assyName)
            ' Get the description attribute itself.
            Dim attr As Attribute = Attribute.GetCustomAttribute( _
                assy, GetType(AssemblyDescriptionAttribute))
            ' Display the description.
            If Not attr Is Nothing And _
                TypeOf attr Is AssemblyDescriptionAttribute Then
                Dim adAttr As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("The description is " & _
                    Chr(34) & "{0}" & Chr(34) & ".", adAttr.Description)
            Else
                Console.WriteLine("The description could not be retrieved.")
            End If
        Else
            Console.WriteLine("The AssemblyDescription attribute is not " & _
                              "defined for assembly {0}.", assyName)
        End If
    End Sub
End Module

' Output:
' The AssemblyDescription attribute is defined for assembly IsDef1VB.
' The description is "A sample description".

using System;
using System.Reflection;

// Add an AssemblyDescription attribute
[assembly: AssemblyDescription("A sample description")]
namespace IsDef1CS
{
    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(DemoClass);
            // Get the assembly object.
            Assembly assy = clsType.Assembly;
            // Store the assembly's name.
            String assyName = assy.GetName().Name;
            // See if the Assembly Description is defined.
            bool isdef = Attribute.IsDefined(assy,
                typeof(AssemblyDescriptionAttribute));
            if (isdef)
            {
                // Affirm that the attribute is defined.
                Console.WriteLine("The AssemblyDescription attribute " +
                    "is defined for assembly {0}.", assyName);
                // Get the description attribute itself.
                AssemblyDescriptionAttribute adAttr =
                    (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
                    assy, typeof(AssemblyDescriptionAttribute));
                // Display the description.
                if (adAttr != null)
                    Console.WriteLine("The description is \"{0}\".",
                        adAttr.Description);
                else
                    Console.WriteLine("The description could not " +
                        "be retrieved.");
            }
            else
                Console.WriteLine("The AssemblyDescription attribute is not " +
                    "defined for assembly {0}.", assyName);
        }
    }
}

/*
 * Output:
 * The AssemblyDescription attribute is defined for assembly IsDef1CS.
 * The description is "A sample description".
 */

using namespace System;
using namespace System::Reflection;

// Add an AssemblyDescription attribute
[assembly:AssemblyDescription("A sample description")];
namespace IsDef1CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = DemoClass::typeid;

         // Get the assembly object.
         Assembly^ assy = clsType->Assembly;

         // Store the assembly's name.
         String^ assyName = assy->GetName()->Name;

         //Type assyType = assy.GetType();
         // See if the Assembly Description is defined.
         bool isdef = Attribute::IsDefined( assy, AssemblyDescriptionAttribute::typeid );
         if ( isdef )
         {

            // Affirm that the attribute is defined.
            Console::WriteLine( "The AssemblyDescription attribute "
            "is defined for assembly {0}.", assyName );

            // Get the description attribute itself.
            AssemblyDescriptionAttribute^ adAttr = dynamic_cast<AssemblyDescriptionAttribute^>(Attribute::GetCustomAttribute( assy, AssemblyDescriptionAttribute::typeid ));

            // Display the description.
            if ( adAttr != nullptr )
                        Console::WriteLine( "The description is \"{0}\".", adAttr->Description );
            else
                        Console::WriteLine( "The description could not "
            "be retrieved." );
         }
         else
                  Console::WriteLine( "The AssemblyDescription attribute is not "
         "defined for assembly {0}.", assyName );
      }

   };

}

/*
 * Output:
 * The AssemblyDescription attributeis defined for assembly IsDef1CS.
 * The description is "A sample description".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttribute 重载
System 命名空间


Attribute ..::.GetCustomAttribute 方法 (MemberInfo, Type, Boolean)

Attribute
.
.
::
.
GetCustomAttribute 方法 (MemberInfo, Type, Boolean)
Attribute 类

检索应用于类型成员的自定义特性。参数指定成员、要搜索的自定义特性的类型以及是否搜索成员的祖先。 检索应用于类型成员的自定义特性。参数指定成员、要搜索的自定义特性的类型以及是否搜索成员的祖先。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttribute ( _
    element As MemberInfo, _
    attributeType As Type, _
    inherit As Boolean _
) As Attribute
public static Attribute GetCustomAttribute(
    MemberInfo element,
    Type attributeType,
    bool inherit
)
public:
static Attribute^ GetCustomAttribute(
    MemberInfo^ element,
    Type^ attributeType,
    bool inherit
)
static member GetCustomAttribute :
        element:MemberInfo *
        attributeType:Type *
        inherit:bool -> Attribute

参数

element
类型： System.Reflection MemberInfo
一个从 MemberInfo 类派生的对象，该类描述类的构造函数、事件、字段、方法或属性成员。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
如果为 true，则指定还在 element 的祖先中搜索自定义特性。

返回值

类型： System Attribute
一个引用，指向应用于 element 的 attributeType 类型的单个自定义特性；如果没有此类特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
NotSupportedException | element 不是构造函数、方法、属性、事件、类型或字段。
AmbiguousMatchException | 找到多个请求的特性。
TypeLoadException | 无法加载自定义特性类型。
说明 说明

从 .NET Framework 2.0 版开始，如果类型、方法和构造函数的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果类型、方法和构造函数的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果类型、方法和构造函数的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果类型、方法和构造函数的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttribute 方法的用法，采用 MemberInfo 作为参数。

Imports System
Imports System.Reflection

Module DemoModule

    Public Class TestClass
        ' Assign the Obsolete attribute to a method.
        <Obsolete("This method is obsolete. Use Method2() instead.")> _
        Public Sub Method1()
        End Sub

        Public Sub Method2()
        End Sub
    End Class

    Sub Main()
        ' Get the class type to access its metadata.
        Dim clsType As Type = GetType(TestClass)
        ' Get the MethodInfo object for Method1.
        Dim mInfo As MethodInfo = clsType.GetMethod("Method1")
        ' See if the Obsolete attribute is defined for this method.
        Dim isDef As Boolean = Attribute.IsDefined(mInfo, _
            GetType(ObsoleteAttribute))
        Dim strDef As String
        If isDef = True Then
            strDef = "is"
        Else
            strDef = "is not"
        End If
        ' Display the results.
        Console.WriteLine("The Obsolete attribute {0} defined for " & _
            "method {1} of class {2}.", strDef, mInfo.Name, clsType.Name)
        ' If it's defined, display the attribute's message.
        If isDef = True Then
            Dim attr As Attribute = Attribute.GetCustomAttribute(mInfo, _
                GetType(ObsoleteAttribute))
            If Not attr Is Nothing And TypeOf attr Is ObsoleteAttribute Then
                Dim obsAttr As ObsoleteAttribute = _
                    CType(attr, ObsoleteAttribute)
                Console.WriteLine("The message is: ""{0}""", obsAttr.Message)
            Else
                Console.WriteLine("The message could not be retrieved.")
            End If
        End If
    End Sub
End Module

' Output:
' The Obsolete attribute is defined for method Method1 of class TestClass.
' The message is: "This method is obsolete. Use Method2() instead."

using System;
using System.Reflection;

namespace IsDef4CS
{
    public class TestClass
    {
        // Assign the Obsolete attribute to a method.
        [Obsolete("This method is obsolete. Use Method2 instead.")]
        public void Method1()
        {}
        public void Method2()
        {}
    }

    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(TestClass);
            // Get the MethodInfo object for Method1.
            MethodInfo mInfo = clsType.GetMethod("Method1");
            // See if the Obsolete attribute is defined for this method.
            bool isDef = Attribute.IsDefined(mInfo, typeof(ObsoleteAttribute));
            // Display the result.
            Console.WriteLine("The Obsolete Attribute {0} defined for {1} of class {2}.",
                isDef ? "is" : "is not", mInfo.Name, clsType.Name);
            // If it's defined, display the attribute's message.
            if (isDef)
            {
                ObsoleteAttribute obsAttr =
                                 (ObsoleteAttribute)Attribute.GetCustomAttribute(
                                                    mInfo, typeof(ObsoleteAttribute));
                if (obsAttr != null)
                    Console.WriteLine("The message is: \"{0}\".",
                        obsAttr.Message);
                else
                    Console.WriteLine("The message could not be retrieved.");
            }
        }
    }
}

/*
 * Output:
 * The Obsolete Attribute is defined for Method1 of class TestClass.
 * The message is: "This method is obsolete. Use Method2 instead.".
 */

using namespace System;
using namespace System::Reflection;

namespace IsDef4CS
{
   public ref class TestClass
   {
   public:

      // Assign the Obsolete attribute to a method.

      [Obsolete("This method is obsolete. Use Method2 instead.")]
      void Method1(){}

      void Method2(){}

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = TestClass::typeid;

         // Get the MethodInfo object for Method1.
         MethodInfo^ mInfo = clsType->GetMethod( "Method1" );

         // See if the Obsolete attribute is defined for this method.
         bool isDef = Attribute::IsDefined( mInfo, ObsoleteAttribute::typeid );

         // Display the result.
         Console::WriteLine( "The Obsolete Attribute {0} defined for {1} of class {2}.", isDef ? (String^)"is" : "is not", mInfo->Name, clsType->Name );

         // If it's defined, display the attribute's message.
         if ( isDef )
         {
            ObsoleteAttribute^ obsAttr = dynamic_cast<ObsoleteAttribute^>(Attribute::GetCustomAttribute( mInfo, ObsoleteAttribute::typeid ));
            if ( obsAttr != nullptr )
                        Console::WriteLine( "The message is: \"{0}\".", obsAttr->Message );
            else
                        Console::WriteLine( "The message could not be retrieved." );
         }
      }

   };

}

/*
 * Output:
 * The Obsolete Attribute is defined for Method1 of class TestClass.
 * The message is: "This method is obsolete. Use Method2 instead.".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttribute 重载
System 命名空间


Attribute ..::.GetCustomAttribute 方法 (Module, Type, Boolean)

Attribute
.
.
::
.
GetCustomAttribute 方法 (Module, Type, Boolean)
Attribute 类

检索应用于模块的自定义特性。参数指定模块、要搜索的自定义特性的类型以及忽略的搜索选项。 检索应用于模块的自定义特性。参数指定模块、要搜索的自定义特性的类型以及忽略的搜索选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttribute ( _
    element As Module, _
    attributeType As Type, _
    inherit As Boolean _
) As Attribute
public static Attribute GetCustomAttribute(
    Module element,
    Type attributeType,
    bool inherit
)
public:
static Attribute^ GetCustomAttribute(
    Module^ element,
    Type^ attributeType,
    bool inherit
)
static member GetCustomAttribute :
        element:Module *
        attributeType:Type *
        inherit:bool -> Attribute

参数

element
类型： System.Reflection Module
一个从 Module 类派生的对象，该类描述可移植的可执行文件。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
此参数被忽略，并且不会影响此方法的操作。

返回值

类型： System Attribute
一个引用，指向应用于 element 的 attributeType 类型的单个自定义特性；如果没有此类特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
AmbiguousMatchException | 找到了多个请求的特性。

下面的代码示例演示 GetCustomAttribute 方法的用法，采用 Module 作为参数。

Imports System
Imports System.Reflection
Imports System.Diagnostics

' Add the Debuggable attribute to the module.
<Module: Debuggable(True, False)>

Module DemoModule
    Sub Main()
        ' Get the module type information to access its metadata.
        Dim modType As Type = GetType(DemoModule)
        ' See if the Debuggable attribute is defined.
        Dim isDef As Boolean = Attribute.IsDefined(modType.Module, _
                               GetType(DebuggableAttribute))
        Dim strDef As String
        If isDef = True Then
            strDef = "is"
        Else
            strDef = "is not"
        End If
        ' Display the result
        Console.WriteLine("The debuggable attribute {0} defined for " & _
                          "module {1}.", strDef, modType.Name)
        ' If the attribute is defined, display the JIT settings.
        If isDef = True Then
            ' Retrieve the attribute itself.
            Dim attr As Attribute = _
                Attribute.GetCustomAttribute(modType.Module, _
                GetType(DebuggableAttribute))
            If Not attr Is Nothing And TypeOf attr Is DebuggableAttribute Then
                Dim dbgAttr As DebuggableAttribute = _
                    CType(attr, DebuggableAttribute)
                Console.WriteLine("JITTrackingEnabled is {0}.", _
                    dbgAttr.IsJITTrackingEnabled.ToString())
                Console.WriteLine("JITOptimizerDisabled is {0}.", _
                    dbgAttr.IsJITOptimizerDisabled.ToString())
            Else
                Console.WriteLine("The Debuggable attribute could " & _
                                  "not be retrieved.")
            End If
        End If
    End Sub
End Module

' Output:
' The debuggable attribute is defined for module DemoModule.
' JITTrackingEnabled is True.
' JITOptimizerDisabled is False.

using System;
using System.Diagnostics;

// Add the Debuggable attribute to the module.
[module:Debuggable(true, false)]
namespace IsDef2CS
{
    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(DemoClass);
            // See if the Debuggable attribute is defined for this module.
            bool isDef = Attribute.IsDefined(clsType.Module,
                typeof(DebuggableAttribute));
            // Display the result.
            Console.WriteLine("The Debuggable attribute {0} " +
                "defined for Module {1}.",
                isDef ? "is" : "is not",
                clsType.Module.Name);
            // If the attribute is defined, display the JIT settings.
            if (isDef)
            {
                // Retrieve the attribute itself.
                DebuggableAttribute dbgAttr = (DebuggableAttribute)
                    Attribute.GetCustomAttribute(clsType.Module,
                    typeof(DebuggableAttribute));
                if (dbgAttr != null)
                {
                    Console.WriteLine("JITTrackingEnabled is {0}.",
                        dbgAttr.IsJITTrackingEnabled);
                    Console.WriteLine("JITOptimizerDisabled is {0}.",
                        dbgAttr.IsJITOptimizerDisabled);
                }
                else
                    Console.WriteLine("The Debuggable attribute " +
                        "could not be retrieved.");
            }
        }
    }
}

/*
 * Output:
 * The Debuggable attribute is defined for Module IsDef2CS.exe.
 * JITTrackingEnabled is True.
 * JITOptimizerDisabled is False.
 */

using namespace System;
using namespace System::Diagnostics;

// Add the Debuggable attribute to the module.
[module:Debuggable(true,false)];
namespace IsDef2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = DemoClass::typeid;

         // See if the Debuggable attribute is defined for this module.
         bool isDef = Attribute::IsDefined( clsType->Module, DebuggableAttribute::typeid );

         // Display the result.
         Console::WriteLine( "The Debuggable attribute {0} "
         "defined for Module {1}.", isDef ? (String^)"is" : "is not", clsType->Module->Name );

         // If the attribute is defined, display the JIT settings.
         if ( isDef )
         {

            // Retrieve the attribute itself.
            DebuggableAttribute^ dbgAttr = dynamic_cast<DebuggableAttribute^>(Attribute::GetCustomAttribute( clsType->Module, DebuggableAttribute::typeid ));
            if ( dbgAttr != nullptr )
            {
               Console::WriteLine( "JITTrackingEnabled is {0}.", dbgAttr->IsJITTrackingEnabled );
               Console::WriteLine( "JITOptimizerDisabled is {0}.", dbgAttr->IsJITOptimizerDisabled );
            }
            else
                        Console::WriteLine( "The Debuggable attribute "
            "could not be retrieved." );
         }
      }

   };

}

/*
 * Output:
 * The Debuggable attribute is defined for Module IsDef2CS.exe.
 * JITTrackingEnabled is True.
 * JITOptimizerDisabled is False.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttribute 重载
System 命名空间


Attribute ..::.GetCustomAttribute 方法 (ParameterInfo, Type, Boolean)

Attribute
.
.
::
.
GetCustomAttribute 方法 (ParameterInfo, Type, Boolean)
Attribute 类

检索应用于方法参数的自定义特性。参数指定方法参数、要搜索的自定义特性的类型以及是否搜索方法参数的祖先。 检索应用于方法参数的自定义特性。参数指定方法参数、要搜索的自定义特性的类型以及是否搜索方法参数的祖先。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttribute ( _
    element As ParameterInfo, _
    attributeType As Type, _
    inherit As Boolean _
) As Attribute
public static Attribute GetCustomAttribute(
    ParameterInfo element,
    Type attributeType,
    bool inherit
)
public:
static Attribute^ GetCustomAttribute(
    ParameterInfo^ element,
    Type^ attributeType,
    bool inherit
)
static member GetCustomAttribute :
        element:ParameterInfo *
        attributeType:Type *
        inherit:bool -> Attribute

参数

element
类型： System.Reflection ParameterInfo
一个从 ParameterInfo 类派生的对象，该类描述类成员的参数。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
如果为 true，则指定还在 element 的祖先中搜索自定义特性。

返回值

类型： System Attribute
一个引用，指向应用于 element 的 attributeType 类型的单个自定义特性；如果没有此类特性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
AmbiguousMatchException | 找到了多个请求的特性。
TypeLoadException | 无法加载自定义特性类型。

如果 element 表示派生类型的方法中的参数，则返回值将包含应用于重写基方法中的同一参数的可继承自定义特性。

下面的代码示例定义一个自定义参数 Attribute 类，并将该自定义特性应用于派生类和该派生类的基类中的方法。该示例说明如何使用 GetCustomAttribute 方法返回特性。 下面的代码示例定义一个自定义参数 Attribute 类，并将该自定义特性应用于派生类和该派生类的基类中的方法。该示例说明如何使用 GetCustomAttribute 方法返回特性。

' Example for the Attribute.GetCustomAttribute( ParameterInfo, Type, Boolean )
' method.
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Define a custom parameter attribute that takes a single message argument.
    <AttributeUsage(AttributeTargets.Parameter)>  _
    Public Class ArgumentUsageAttribute
        Inherits Attribute

        ' This is the attribute constructor.
        Public Sub New(UsageMsg As String)
            Me.usageMsg = UsageMsg
        End Sub ' New

        ' usageMsg is storage for the attribute message.
        Protected usageMsg As String

        ' This is the Message property for the attribute.
        Public Property Message() As String
            Get
                Return usageMsg
            End Get
            Set
                usageMsg = value
            End Set
        End Property
    End Class ' ArgumentUsageAttribute

    Public Class BaseClass

        ' Assign an ArgumentUsage attribute to the strArray parameter.
        ' Assign a ParamArray attribute to the strList parameter.
        Public Overridable Sub TestMethod( _
            <ArgumentUsage("Must pass an array here.")> _
            strArray() As String, _
            ParamArray strList() As String)
        End Sub ' TestMethod
    End Class ' BaseClass

    Public Class DerivedClass
        Inherits BaseClass

        ' Assign an ArgumentUsage attribute to the strList parameter.
        ' Assign a ParamArray attribute to the strList parameter.
        Public Overrides Sub TestMethod( _
            strArray() As String, _
            <ArgumentUsage("Can pass a parameter list or array here.")> _
            ParamArray strList() As String)
        End Sub ' TestMethod
    End Class ' DerivedClass

    Class DemoClass

        Shared Sub DisplayParameterAttributes(mInfo As MethodInfo, _
            pInfoArray() As ParameterInfo, includeInherited As Boolean)

            Console.WriteLine( vbCrLf & _
                "Parameter attribute information for method ""{0}""" & _
                vbCrLf & "includes inheritance from the base class: {1}.", _
                mInfo.Name, IIf(includeInherited, "Yes", "No"))

            ' Display attribute information for the parameters.
            Dim paramInfo As ParameterInfo
            For Each paramInfo In  pInfoArray

                ' See if the ParamArray attribute is defined.
                Dim isDef As Boolean = _
                    Attribute.IsDefined(paramInfo, GetType(ParamArrayAttribute))

                If isDef Then
                    Console.WriteLine( vbCrLf & "    The " & _
                        "ParamArray attribute is defined for " & _
                        vbCrLf & "    parameter {0} of method {1}.", _
                        paramInfo.Name, mInfo.Name)
                End If

                ' See if ParamUsageAttribute is defined.
                ' If so, display a message.
                Dim usageAttr As ArgumentUsageAttribute = _
                    Attribute.GetCustomAttribute(paramInfo, _
                        GetType(ArgumentUsageAttribute), _
                        includeInherited)

                If Not (usageAttr Is Nothing) Then
                    Console.WriteLine( vbCrLf & "    The " & _
                        "ArgumentUsage attribute is defined for " & _
                        vbCrLf & "    parameter {0} of method {1}.", _
                        paramInfo.Name, mInfo.Name)
                    Console.WriteLine( vbCrLf & _
                        "        The usage message for {0} is: " & _
                        vbCrLf & "        ""{1}"".", _
                        paramInfo.Name, usageAttr.Message)
                End If
            Next paramInfo
        End Sub ' DisplayParameterAttributes

        Public Shared Sub Main()
            Console.WriteLine( _
                "This example of Attribute.GetCustomAttribute" & _
                "( ParameterInfo, Type, Boolean )" & vbCrLf & _
                "generates the following output." )

            ' Get the class type, and then get the MethodInfo object
            ' for TestMethod to access its metadata.
            Dim clsType As Type = GetType(DerivedClass)
            Dim mInfo As MethodInfo = clsType.GetMethod("TestMethod")

            ' Iterate through the ParameterInfo array for the method parameters.
            Dim pInfoArray As ParameterInfo() = mInfo.GetParameters()
            If Not (pInfoArray Is Nothing) Then

                DisplayParameterAttributes(mInfo, pInfoArray, False)
                DisplayParameterAttributes(mInfo, pInfoArray, True)
            Else
                Console.WriteLine( _
                    "The parameters information could " & _
                    "not be retrieved for method {0}.", mInfo.Name)
            End If
        End Sub ' Main

    End Class ' DemoClass
End Namespace ' NDP_UE_VB

' This example of Attribute.GetCustomAttribute( ParameterInfo, Type, Boolean )
' generates the following output.
'
' Parameter attribute information for method "TestMethod"
' includes inheritance from the base class: No.
'
'     The ParamArray attribute is defined for
'     parameter strList of method TestMethod.
'
'     The ArgumentUsage attribute is defined for
'     parameter strList of method TestMethod.
'
'         The usage message for strList is:
'         "Can pass a parameter list or array here.".
'
' Parameter attribute information for method "TestMethod"
' includes inheritance from the base class: Yes.
'
'     The ArgumentUsage attribute is defined for
'     parameter strArray of method TestMethod.
'
'         The usage message for strArray is:
'         "Must pass an array here.".
'
'     The ParamArray attribute is defined for
'     parameter strList of method TestMethod.
'
'     The ArgumentUsage attribute is defined for
'     parameter strList of method TestMethod.
'
'         The usage message for strList is:
'         "Can pass a parameter list or array here.".

// Example for the Attribute.GetCustomAttribute( ParameterInfo, Type, Boolean )
// method.
using System;
using System.Reflection;

namespace NDP_UE_CS
{
    // Define a custom parameter attribute that takes a single message argument.
    [AttributeUsage( AttributeTargets.Parameter )]
    public class ArgumentUsageAttribute : Attribute
    {
        // This is the attribute constructor.
        public ArgumentUsageAttribute( string UsageMsg )
        {
            this.usageMsg = UsageMsg;
        }

        // usageMsg is storage for the attribute message.
        protected string usageMsg;

        // This is the Message property for the attribute.
        public string Message
        {
            get { return usageMsg; }
            set { usageMsg = value; }
        }
    }

    public class BaseClass
    {
        // Assign an ArgumentUsage attribute to the strArray parameter.
        // Assign a ParamArray attribute to strList using the params keyword.
        public virtual void TestMethod(
            [ArgumentUsage("Must pass an array here.")]
            String[] strArray,
            params String[] strList)
        { }
    }

    public class DerivedClass : BaseClass
    {
        // Assign an ArgumentUsage attribute to the strList parameter.
        // Assign a ParamArray attribute to strList using the params keyword.
        public override void TestMethod(
            String[] strArray,
            [ArgumentUsage("Can pass a parameter list or array here.")]
            params String[] strList)
        { }
    }

    class CustomParamDemo
    {
        static void Main( )
        {
            Console.WriteLine(
                "This example of Attribute.GetCustomAttribute( Parameter" +
                "Info, Type, Boolean )\ngenerates the following output." );

            // Get the class type, and then get the MethodInfo object
            // for TestMethod to access its metadata.
            Type clsType = typeof(DerivedClass);
            MethodInfo mInfo = clsType.GetMethod("TestMethod");

            // Iterate through the ParameterInfo array for the method parameters.
            ParameterInfo[] pInfoArray = mInfo.GetParameters();
            if (pInfoArray != null)
            {
                DisplayParameterAttributes( mInfo, pInfoArray, false );
                DisplayParameterAttributes( mInfo, pInfoArray, true );
            }
            else
                Console.WriteLine("The parameters information could " +
                    "not be retrieved for method {0}.", mInfo.Name);
        }

        static void DisplayParameterAttributes( MethodInfo mInfo,
            ParameterInfo[] pInfoArray, bool includeInherited )
        {
            Console.WriteLine(
                "\nParameter attribute information for method \"" +
                "{0}\"\nincludes inheritance from base class: {1}.",
                mInfo.Name, includeInherited ? "Yes" : "No" );

            // Display the attribute information for the parameters.
            foreach( ParameterInfo paramInfo in pInfoArray )
            {
                // See if the ParamArray attribute is defined.
                bool isDef = Attribute.IsDefined( paramInfo,
                    typeof(ParamArrayAttribute));

                if( isDef )
                    Console.WriteLine(
                        "\n    The ParamArray attribute is defined " +
                        "for \n    parameter {0} of method {1}.",
                        paramInfo.Name, mInfo.Name);

                // See if ParamUsageAttribute is defined.
                // If so, display a message.
                ArgumentUsageAttribute usageAttr = (ArgumentUsageAttribute)
                    Attribute.GetCustomAttribute( paramInfo,
                        typeof(ArgumentUsageAttribute),
                        includeInherited );

                if( usageAttr != null )
                {
                    Console.WriteLine(
                        "\n    The ArgumentUsage attribute is def" +
                        "ined for \n    parameter {0} of method {1}.",
                        paramInfo.Name, mInfo.Name );

                    Console.WriteLine( "\n        The usage " +
                        "message for {0} is:\n        \"{1}\".",
                        paramInfo.Name, usageAttr.Message);
                }
            }
        }
    }
}

/*
This example of Attribute.GetCustomAttribute( ParameterInfo, Type, Boolean )
generates the following output.

Parameter attribute information for method "TestMethod"
includes inheritance from base class: No.

    The ParamArray attribute is defined for
    parameter strList of method TestMethod.

    The ArgumentUsage attribute is defined for
    parameter strList of method TestMethod.

        The usage message for strList is:
        "Can pass a parameter list or array here.".

Parameter attribute information for method "TestMethod"
includes inheritance from base class: Yes.

    The ArgumentUsage attribute is defined for
    parameter strArray of method TestMethod.

        The usage message for strArray is:
        "Must pass an array here.".

    The ParamArray attribute is defined for
    parameter strList of method TestMethod.

    The ArgumentUsage attribute is defined for
    parameter strList of method TestMethod.

        The usage message for strList is:
        "Can pass a parameter list or array here.".
*/

// Example for the Attribute::GetCustomAttribute( ParameterInfo*, Type*, bool )
// method.
using namespace System;
using namespace System::Collections;
using namespace System::Reflection;

namespace NDP_UE_CPP
{
   // Define a custom parameter attribute that takes a single message argument.

   [AttributeUsage(AttributeTargets::Parameter)]
   public ref class ArgumentUsageAttribute: public Attribute
   {
   protected:

      // usageMsg is storage for the attribute message.
      String^ usageMsg;

   public:

      // This is the attribute constructor.
      ArgumentUsageAttribute( String^ UsageMsg )
      {
         this->usageMsg = UsageMsg;
      }

      property String^ Message
      {
         // This is the Message property for the attribute.
         String^ get()
         {
            return usageMsg;
         }

         void set( String^ value )
         {
            this->usageMsg = value;
         }
      }
   };

   public ref class BaseClass
   {
   public:

      // Assign an ArgumentUsage attribute to the strArray parameter.
      // Assign a ParamArray attribute to strList.
      virtual void TestMethod( [ArgumentUsage("Must pass an array here.")]array<String^>^strArray,
                               ...array<String^>^strList ){}
   };

   public ref class DerivedClass: public BaseClass
   {
   public:

      // Assign an ArgumentUsage attributes to the strList parameter.
      virtual void TestMethod( array<String^>^strArray, [ArgumentUsage(
      "Can pass a parameter list or array here.")]array<String^>^strList ) override {}

   };

   void DisplayParameterAttributes( MethodInfo^ mInfo, array<ParameterInfo^>^pInfoArray, bool includeInherited )
   {
      Console::WriteLine( "\nParameter attribute information for method \"{0}"
      "\"\nincludes inheritance from base class: {1}.", mInfo->Name, includeInherited ? (String^)"Yes" : "No" );

      // This implements foreach( ParameterInfo* paramInfo in pInfoArray ).
      IEnumerator^ myEnum = pInfoArray->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         ParameterInfo^ paramInfo = safe_cast<ParameterInfo^>(myEnum->Current);

         // See if the ParamArray attribute is defined.
         bool isDef = Attribute::IsDefined( paramInfo, ParamArrayAttribute::typeid );
         if ( isDef )
                  Console::WriteLine( "\n    The ParamArray attribute is defined "
         "for \n    parameter {0} of method {1}.", paramInfo->Name, mInfo->Name );

         // See if ParamUsageAttribute is defined.
         // If so, display a message.
         ArgumentUsageAttribute^ usageAttr = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( paramInfo, ArgumentUsageAttribute::typeid, includeInherited ));
         if ( usageAttr != nullptr )
         {
            Console::WriteLine( "\n    The ArgumentUsage attribute is defined "
            "for \n    parameter {0} of method {1}.", paramInfo->Name, mInfo->Name );
            Console::WriteLine( "\n        The usage "
            "message for {0} is:\n        \"{1}\".", paramInfo->Name, usageAttr->Message );
         }
      }
   }

}

int main()
{
   Console::WriteLine( "This example of Attribute::GetCustomAttribute( ParameterInfo*, "
   "Type*, bool )\ngenerates the following output." );

   // Get the class type, and then get the MethodInfo object
   // for TestMethod to access its metadata.
   Type^ clsType = NDP_UE_CPP::DerivedClass::typeid;
   MethodInfo^ mInfo = clsType->GetMethod(  "TestMethod" );

   // Iterate through the ParameterInfo array for the method parameters.
   array<ParameterInfo^>^pInfoArray = mInfo->GetParameters();
   if ( pInfoArray != nullptr )
   {
      NDP_UE_CPP::DisplayParameterAttributes( mInfo, pInfoArray, false );
      NDP_UE_CPP::DisplayParameterAttributes( mInfo, pInfoArray, true );
   }
   else
      Console::WriteLine( "The parameters information could "
   "not be retrieved for method {0}.", mInfo->Name );
}

/*
This example of Attribute::GetCustomAttribute( ParameterInfo*, Type*, bool )
generates the following output.

Parameter attribute information for method "TestMethod"
includes inheritance from base class: No.

    The ParamArray attribute is defined for
    parameter strList of method TestMethod.

    The ArgumentUsage attribute is defined for
    parameter strList of method TestMethod.

        The usage message for strList is:
        "Can pass a parameter list or array here.".

Parameter attribute information for method "TestMethod"
includes inheritance from base class: Yes.

    The ArgumentUsage attribute is defined for
    parameter strArray of method TestMethod.

        The usage message for strArray is:
        "Must pass an array here.".

    The ParamArray attribute is defined for
    parameter strList of method TestMethod.

    The ArgumentUsage attribute is defined for
    parameter strList of method TestMethod.

        The usage message for strList is:
        "Can pass a parameter list or array here.".
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttribute 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法

Attribute
.
.
::
.
GetCustomAttributes 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Attribute 类

检索应用于程序集、模块、类型成员或方法参数的自定义特性的数组。

名称 说明
页首

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (Assembly)

Attribute
.
.
::
.
GetCustomAttributes 方法 (Assembly)
Attribute 类

检索应用于程序集的自定义特性的数组。参数指定程序集。 检索应用于程序集的自定义特性的数组。参数指定程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As Assembly _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    Assembly element
)
public:
static array<Attribute^>^ GetCustomAttributes(
    Assembly^ element
)
static member GetCustomAttributes :
        element:Assembly -> Attribute[]

参数

element
类型： System.Reflection Assembly
一个从 Assembly 类派生的对象，该类描述可重用模块集合。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
说明 说明

从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttributes 的用法，采用 Assembly 作为参数。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

<Assembly: AssemblyTitle("CustAttrs1VB")>
<Assembly: AssemblyDescription("GetCustomAttributes() Demo")>
<Assembly: AssemblyCompany("Microsoft")>

Module DemoModule

    Sub Main()
        ' Get the Assembly type to access its metadata.
        Dim assy As Reflection.Assembly = GetType(DemoModule).Assembly
        Dim attr As Attribute

        ' Iterate through all the attributes for the assembly.
        For Each attr In Attribute.GetCustomAttributes(assy)

            ' Check for the AssemblyTitle attribute.
            If TypeOf attr Is AssemblyTitleAttribute Then
                ' Convert the attribute to access its data.
                Dim attrTitle As AssemblyTitleAttribute = _
                    CType(attr, AssemblyTitleAttribute)
                Console.WriteLine("Assembly title is ""{0}"".", _
                    attrTitle.Title)

            ' Check for the AssemblyDescription attribute.
            ElseIf TypeOf attr Is AssemblyDescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim attrDesc As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("Assembly description is ""{0}"".", _
                    attrDesc.Description)

            ' Check for the AssemblyCompany attribute.
            ElseIf TypeOf attr Is AssemblyCompanyAttribute Then
                ' Convert the attribute to access its data.
                Dim attrComp As AssemblyCompanyAttribute = _
                    CType(attr, AssemblyCompanyAttribute)
                Console.WriteLine("Assembly company is {0}.", _
                    attrComp.Company)
            End If
        Next
    End Sub
End Module

' Output:
' Assembly company is Microsoft.
' Assembly description is "GetCustomAttributes() Demo".
' Assembly title is "CustAttrs1VB".

using System;
using System.Reflection;

[assembly: AssemblyTitle("CustAttrs1CS")]
[assembly: AssemblyDescription("GetCustomAttributes() Demo")]
[assembly: AssemblyCompany("Microsoft")]

namespace CustAttrs1CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Assembly type to access its metadata.
            Assembly assy = clsType.Assembly;

            // Iterate through the attributes for the assembly.
            foreach(Attribute attr in Attribute.GetCustomAttributes(assy)) {
                // Check for the AssemblyTitle attribute.
                if (attr.GetType() == typeof(AssemblyTitleAttribute))
                    Console.WriteLine("Assembly title is \"{0}\".",
                        ((AssemblyTitleAttribute)attr).Title);

                // Check for the AssemblyDescription attribute.
                else if (attr.GetType() ==
                    typeof(AssemblyDescriptionAttribute))
                    Console.WriteLine("Assembly description is \"{0}\".",
                        ((AssemblyDescriptionAttribute)attr).Description);

                // Check for the AssemblyCompany attribute.
                else if (attr.GetType() == typeof(AssemblyCompanyAttribute))
                    Console.WriteLine("Assembly company is {0}.",
                        ((AssemblyCompanyAttribute)attr).Company);
            }
        }
    }
}

/*
 * Output:
 * Assembly company is Microsoft.
 * Assembly description is "GetCustomAttributes() Demo".
 * Assembly title is "CustAttrs1CS".
 */

#using <System.dll>

using namespace System;
using namespace System::Reflection;

[assembly:AssemblyTitle("CustAttrs1CS")];
[assembly:AssemblyDescription("GetCustomAttributes() Demo")];
[assembly:AssemblyCompany("Microsoft")];
namespace CustAttrs1CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Assembly type to access its metadata.
         Assembly^ assy = clsType->Assembly;

         // Iterate through the attributes for the assembly.
         System::Collections::IEnumerator^ myEnum = Attribute::GetCustomAttributes( assy )->GetEnumerator();
         while ( myEnum->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum->Current);

            // Check for the AssemblyTitle attribute.
            if ( attr->GetType() == AssemblyTitleAttribute::typeid )
                        Console::WriteLine( "Assembly title is \"{0}\".", (dynamic_cast<AssemblyTitleAttribute^>(attr))->Title );
            // Check for the AssemblyDescription attribute.
            else

            // Check for the AssemblyDescription attribute.
            if ( attr->GetType() == AssemblyDescriptionAttribute::typeid )
                        Console::WriteLine( "Assembly description is \"{0}\".", (dynamic_cast<AssemblyDescriptionAttribute^>(attr))->Description );
            // Check for the AssemblyCompany attribute.
            else

            // Check for the AssemblyCompany attribute.
            if ( attr->GetType() == AssemblyCompanyAttribute::typeid )
                        Console::WriteLine( "Assembly company is {0}.", (dynamic_cast<AssemblyCompanyAttribute^>(attr))->Company );
         }
      }
   };
}

/*
 * Output:
 * Assembly company is Microsoft.
 * Assembly description is "GetCustomAttributes() Demo".
 * Assembly title is "CustAttrs1CS".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (MemberInfo)

Attribute
.
.
::
.
GetCustomAttributes 方法 (MemberInfo)
Attribute 类

检索应用于类型的成员的自定义特性的数组。参数指定成员。 检索应用于类型的成员的自定义特性的数组。参数指定成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As MemberInfo _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    MemberInfo element
)
public:
static array<Attribute^>^ GetCustomAttributes(
    MemberInfo^ element
)
static member GetCustomAttributes :
        element:MemberInfo -> Attribute[]

参数

element
类型： System.Reflection MemberInfo
一个从 MemberInfo 类派生的对象，该类描述类的构造函数、事件、字段、方法或属性成员。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | element 不是构造函数、方法、属性、事件、类型或字段。
TypeLoadException | 无法加载自定义特性类型。

返回值包含 element 的祖先的自定义特性。

说明 说明

从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttribute 的用法，采用 MemberInfo 作为参数。

Imports System
Imports System.Reflection
Imports System.Security
Imports System.Runtime.InteropServices

' Define an enumeration of Win32 unmanaged types
Public Enum UnmanagedType
    User
    GDI
    Kernel
    Shell
    Networking
    Multimedia
End Enum 'UnmanagedType

' Define the Unmanaged attribute.
Public Class UnmanagedAttribute
             Inherits Attribute

    ' Storage for the UnmanagedType value.
    Protected thisType As UnmanagedType

    ' Set the unmanaged type in the constructor.
    Public Sub New(ByVal type As UnmanagedType)
        thisType = type
    End Sub 'New

    ' Define a property to get and set the UnmanagedType value.
    Public Property Win32Type() As UnmanagedType
        Get
            Return thisType
        End Get
        Set
            thisType = Win32Type
        End Set
    End Property
End Class 'UnmanagedAttribute

' Create a class for an imported Win32 unmanaged function.
Public Class Win32
    <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function MessageBox(ByVal hWnd As Integer, _
                                      ByVal Text As String, _
                                      ByVal caption As String, _
                                      ByVal type As Integer) As Integer
    End Function 'MessageBox
End Class 'Win32

Public Class AClass
    ' Add some attributes to Win32CallMethod.
    <Obsolete("This method is obsolete. Use managed MsgBox instead."), _
     Unmanaged(UnmanagedType.User)>  _
    Public Sub Win32CallMethod()
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0)
    End Sub 'Win32CallMethod
End Class 'AClass

Class DemoClass
    Shared Sub Main(ByVal args() As String)
        ' Get the AClass type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for Win32CallMethod.
        Dim mInfo As MethodInfo = clsType.GetMethod("Win32CallMethod")
        If Not (mInfo Is Nothing) Then
            ' Iterate through all the attributes of the method.
            Dim attr As Attribute
            For Each attr In  Attribute.GetCustomAttributes(mInfo)
                ' Check for the Obsolete attribute.
                If attr.GetType().Equals(GetType(ObsoleteAttribute)) Then
                    Console.WriteLine("Method {0} is obsolete. The message is:", mInfo.Name)
                    Console.WriteLine("  ""{0}""", CType(attr, ObsoleteAttribute).Message)
                ' Check for the Unmanaged attribute.
                ElseIf attr.GetType().Equals(GetType(UnmanagedAttribute)) Then
                    Console.WriteLine("This method calls unmanaged code.")
                    Console.WriteLine( _
                            String.Format("The Unmanaged attribute type is {0}.", _
                            CType(attr, UnmanagedAttribute).Win32Type))
                    Dim myCls As New AClass()
                    myCls.Win32CallMethod()
                End If
            Next attr
        End If
    End Sub 'Main
End Class 'DemoClass

'
'This code example produces the following results.
'
'First, the compilation yields the warning, "...This method is
'obsolete. Use managed MsgBox instead."
'Second, execution yields a message box with a title of "Caution!"
'and message text of "This is an unmanaged call."
'Third, the following text is displayed in the console window:
'
'Method Win32CallMethod is obsolete. The message is:
'  "This method is obsolete. Use managed MsgBox instead."
'This method calls unmanaged code.
'The Unmanaged attribute type is User.
'

using System;
using System.Reflection;
using System.Security;
using System.Runtime.InteropServices;

namespace CustAttrs4CS
{

    // Define an enumeration of Win32 unmanaged types
    public enum UnmanagedType
    {
        User,
        GDI,
        Kernel,
        Shell,
        Networking,
        Multimedia
    }

    // Define the Unmanaged attribute.
    public class UnmanagedAttribute : Attribute
    {
        // Storage for the UnmanagedType value.
        protected UnmanagedType thisType;

        // Set the unmanaged type in the constructor.
        public UnmanagedAttribute(UnmanagedType type)
        {
            thisType = type;
        }

        // Define a property to get and set the UnmanagedType value.
        public UnmanagedType Win32Type
        {
            get { return thisType; }
            set { thisType = Win32Type; }
        }
    }

    // Create a class for an imported Win32 unmanaged function.
    public class Win32 {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(int hWnd, String text,
            String caption, uint type);
    }

    public class AClass {
        // Add some attributes to Win32CallMethod.
        [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
        [Unmanaged(UnmanagedType.User)]
        public void Win32CallMethod()
        {
            Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0);
        }
    }

    class DemoClass {
        static void Main(string[] args)
            {
            // Get the AClass type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for Win32CallMethod.
            MethodInfo mInfo = clsType.GetMethod("Win32CallMethod");
            if (mInfo != null)
            {
                // Iterate through all the attributes of the method.
                foreach(Attribute attr in
                    Attribute.GetCustomAttributes(mInfo)) {
                    // Check for the Obsolete attribute.
                    if (attr.GetType() == typeof(ObsoleteAttribute))
                    {
                        Console.WriteLine("Method {0} is obsolete. " +
                            "The message is:",
                            mInfo.Name);
                        Console.WriteLine("  \"{0}\"",
                            ((ObsoleteAttribute)attr).Message);
                    }

                    // Check for the Unmanaged attribute.
                    else if (attr.GetType() == typeof(UnmanagedAttribute))
                    {
                        Console.WriteLine(
                            "This method calls unmanaged code.");
                        Console.WriteLine(
                            String.Format("The Unmanaged attribute type is {0}.",
                                          ((UnmanagedAttribute)attr).Win32Type));
                        AClass myCls = new AClass();
                        myCls.Win32CallMethod();
                    }
                }
            }
        }
    }
}

/*

This code example produces the following results.

First, the compilation yields the warning, "...This method is
obsolete. Use managed MsgBox instead."
Second, execution yields a message box with a title of "Caution!"
and message text of "This is an unmanaged call."
Third, the following text is displayed in the console window:

Method Win32CallMethod is obsolete. The message is:
  "This method is obsolete. Use managed MsgBox instead."
This method calls unmanaged code.
The Unmanaged attribute type is User.

*/

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Runtime::InteropServices;

namespace CustAttrs4CS
{
   // Create a class for Win32 imported unmanaged functions.
   public ref class Win32
   {
   public:

      [DllImport("user32.dll", CharSet = CharSet::Unicode)]
      static int MessageBox( int hWnd, String^ text, String^ caption, UInt32 type );
   };

   public ref class AClass
   {
   public:

      // Add some attributes to the Win32CallMethod.

      [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
      void Win32CallMethod()
      {
         Win32::MessageBox( 0, "This is an unmanaged call.", "Be Careful!", 0 );
      }

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the Win32CallMethod.
         MethodInfo^ mInfo = clsType->GetMethod( "Win32CallMethod" );
         if ( mInfo != nullptr )
         {
            // Iterate through all the attributes for the method.
            System::Collections::IEnumerator^ myEnum3 = Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
            while ( myEnum3->MoveNext() )
            {
               Attribute^ attr = safe_cast<Attribute^>(myEnum3->Current);

               // Check for the Obsolete attribute.
               if ( attr->GetType() == ObsoleteAttribute::typeid )
               {
                  Console::WriteLine( "Method {0} is obsolete. "
                  "The message is:", mInfo->Name );
                  Console::WriteLine( (dynamic_cast<ObsoleteAttribute^>(attr))->Message );
               }
               // Check for the SuppressUnmanagedCodeSecurity attribute.
               else

               // Check for the SuppressUnmanagedCodeSecurity attribute.
               if ( attr->GetType() == SuppressUnmanagedCodeSecurityAttribute::typeid )
               {
                  Console::WriteLine( "This method calls unmanaged code "
                  "with no security check." );
                  Console::WriteLine( "Please do not use unless absolutely necessary." );
                  AClass^ myCls = gcnew AClass;
                  myCls->Win32CallMethod();
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Method Win32CallMethod is obsolete. The message is:
 * This method is obsolete. Use managed MsgBox instead.
 * This method calls unmanaged code with no security check.
 * Please do not use unless absolutely necessary.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (Module)

Attribute
.
.
::
.
GetCustomAttributes 方法 (Module)
Attribute 类

检索应用于模块的自定义特性的数组。参数指定模块。 检索应用于模块的自定义特性的数组。参数指定模块。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As Module _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    Module element
)
public:
static array<Attribute^>^ GetCustomAttributes(
    Module^ element
)
static member GetCustomAttributes :
        element:Module -> Attribute[]

参数

element
类型： System.Reflection Module
一个从 Module 类派生的对象，该类描述可移植的可执行文件。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的代码示例演示 GetCustomAttributes 的用法，采用 Module 作为参数。

Imports System
Imports System.Reflection
Imports System.ComponentModel

' Give the Module some attributes.
<Module: Description("A sample description")>

' Make the CLSCompliant attribute False.
' The CLSCompliant attribute is applicable for /target:module.
<Module: CLSCompliant(False)>

Module DemoModule

    Sub Main()
        ' Get the Module type to access its metadata.
        Dim modType As Reflection.Module = GetType(DemoModule).Module
        Dim attr As Attribute
        ' Iterate through all the attributes for the module.
        For Each attr In Attribute.GetCustomAttributes(modType)
            ' Check for the Description attribute.
            If TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Module {0} has the description ""{1}"".", _
                    modType.Name, descAttr.Description)

            ' Check for the CLSCompliant attribute.
            ElseIf TypeOf attr Is CLSCompliantAttribute Then
                ' Convert the attribute to access its data.
                Dim CLSCompAttr As CLSCompliantAttribute = _
                    CType(attr, CLSCompliantAttribute)
                Dim strCompliant As String
                If CLSCompAttr.IsCompliant Then
                    strCompliant = "is"
                Else
                    strCompliant = "is not"
                End If
                Console.WriteLine("Module {0} {1} CLSCompliant.", _
                    modType.Name, strCompliant)
            End If
        Next
    End Sub
End Module

' Output:
' Module CustAttrs2VB.exe has the description "A sample description".
' Module CustAttrs2VB.exe is not CLSCompliant.

using System;
using System.Reflection;
using System.ComponentModel;

// Assign some attributes to the module.
[module:Description("A sample description")]

// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:CLSCompliant(false)]

namespace CustAttrs2CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Module type to access its metadata.
            Module module = clsType.Module;

            // Iterate through all the attributes for the module.
            foreach(Attribute attr in Attribute.GetCustomAttributes(module)) {
                // Check for the Description attribute.
                if (attr.GetType() == typeof(DescriptionAttribute))
                    Console.WriteLine("Module {0} has the description " +
                        "\"{1}\".", module.Name,
                        ((DescriptionAttribute)attr).Description);
                // Check for the CLSCompliant attribute.
                else if (attr.GetType() == typeof(CLSCompliantAttribute))
                    Console.WriteLine("Module {0} {1} CLSCompliant.",
                        module.Name,
                        ((CLSCompliantAttribute)attr).IsCompliant ?
                            "is" : "is not");
            }
        }
    }
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

// Assign some attributes to the module.
// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:Description("A sample description")];
[module:CLSCompliant(false)];
namespace CustAttrs2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Module type to access its metadata.
         Module^ module = clsType->Module;

         // Iterate through all the attributes for the module.
         System::Collections::IEnumerator^ myEnum1 = Attribute::GetCustomAttributes( module )->GetEnumerator();
         while ( myEnum1->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the Description attribute.
            if ( attr->GetType() == DescriptionAttribute::typeid )
                        Console::WriteLine( "Module {0} has the description \"{1}\".", module->Name, (dynamic_cast<DescriptionAttribute^>(attr))->Description );
            // Check for the CLSCompliant attribute.
            else

            // Check for the CLSCompliant attribute.
            if ( attr->GetType() == CLSCompliantAttribute::typeid )
                        Console::WriteLine( "Module {0} {1} CLSCompliant.", module->Name, (dynamic_cast<CLSCompliantAttribute^>(attr))->IsCompliant ? (String^)"is" : "is not" );
         }
      }
   };
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (ParameterInfo)

Attribute
.
.
::
.
GetCustomAttributes 方法 (ParameterInfo)
Attribute 类

检索应用于方法参数的自定义特性的数组。参数指定方法参数。 检索应用于方法参数的自定义特性的数组。参数指定方法参数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As ParameterInfo _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    ParameterInfo element
)
public:
static array<Attribute^>^ GetCustomAttributes(
    ParameterInfo^ element
)
static member GetCustomAttributes :
        element:ParameterInfo -> Attribute[]

参数

element
类型： System.Reflection ParameterInfo
一个从 ParameterInfo 类派生的对象，该类描述类成员的参数。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TypeLoadException | 无法加载自定义特性类型。

如果 element 表示派生类型的方法中的参数，则返回值将包含应用于重写基方法中的同一参数的可继承自定义特性。

下面的代码示例演示 GetCustomAttributes 的用法，采用 ParameterInfo 作为参数。

Imports System
Imports System.Reflection
Imports System.ComponentModel

Module DemoModule
    Public Class AClass
        ' Add Description and ParamArray (with the keyword) attributes.
        Public Sub ParamArrayAndDesc( _
            <Description("This argument is a ParamArray")> _
            ByVal ParamArray args() As Integer)
        End Sub
    End Class

    Sub Main()
        ' Get the Class type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for the method.
        Dim mInfo As MethodInfo = clsType.GetMethod("ParamArrayAndDesc")
        ' Get the Parameter information for the method.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        Dim attr As Attribute
        ' Iterate through each attribute of the parameter.
        For Each attr In Attribute.GetCustomAttributes(pInfo(0))
            ' Check for the ParamArray attribute.
            If TypeOf attr Is ParamArrayAttribute Then
                ' Convert the attribute to access its data.
                Dim paAttr As ParamArrayAttribute = _
                    CType(attr, ParamArrayAttribute)
                Console.WriteLine("Parameter {0} has the " + _
                    "ParamArray attribute.", pInfo(0).Name)
            ' Check for the Description attribute.
            ElseIf TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Parameter {0} has a description " + _
                    "attribute. The description is:", pInfo(0).Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

' Output:
' Parameter args has a description attribute. The description is:
' This argument is a ParamArray
' Parameter args has the ParamArray attribute.

using System;
using System.Reflection;
using System.ComponentModel;

namespace CustAttrs5CS {
    public class AClass {
        public void ParamArrayAndDesc(
            // Add ParamArray (with the keyword) and Description attributes.
            [Description("This argument is a ParamArray")]
            params int[] args)
        {}
    }

    class DemoClass {
        static void Main(string[] args) {
            // Get the Class type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for the method.
            MethodInfo mInfo = clsType.GetMethod("ParamArrayAndDesc");
            if (mInfo != null) {
                // Get the parameter information.
                ParameterInfo[] pInfo = mInfo.GetParameters();
                if (pInfo != null) {
                    // Iterate through all the attributes for the parameter.
                    foreach(Attribute attr in
                        Attribute.GetCustomAttributes(pInfo[0])) {
                        // Check for the ParamArray attribute.
                        if (attr.GetType() == typeof(ParamArrayAttribute))
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has the ParamArray attribute.",
                                pInfo[0].Name, mInfo.Name);
                        // Check for the Description attribute.
                        else if (attr.GetType() ==
                            typeof(DescriptionAttribute)) {
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has a description attribute.",
                                pInfo[0].Name, mInfo.Name);
                            Console.WriteLine("The description is: \"{0}\"",
                                ((DescriptionAttribute)attr).Description);
                        }
                    }
                }
            }
        }
    }
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

namespace CustAttrs5CS
{
   public ref class AClass
   {
   public:
      void ParamArrayAndDesc(
         // Add ParamArray and Description attributes.
         [Description("This argument is a ParamArray")]
         array<Int32>^args )
      {}
   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the method.
         MethodInfo^ mInfo = clsType->GetMethod( "ParamArrayAndDesc" );
         if ( mInfo != nullptr )
         {
            // Get the parameter information.
            array<ParameterInfo^>^pInfo = mInfo->GetParameters();
            if ( pInfo != nullptr )
            {
               // Iterate through all the attributes for the parameter.
               System::Collections::IEnumerator^ myEnum4 = Attribute::GetCustomAttributes( pInfo[ 0 ] )->GetEnumerator();
               while ( myEnum4->MoveNext() )
               {
                  Attribute^ attr = safe_cast<Attribute^>(myEnum4->Current);

                  // Check for the ParamArray attribute.
                  if ( attr->GetType() == ParamArrayAttribute::typeid )
                                    Console::WriteLine( "Parameter {0} for method {1} "
                  "has the ParamArray attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                  // Check for the Description attribute.
                  else

                  // Check for the Description attribute.
                  if ( attr->GetType() == DescriptionAttribute::typeid )
                  {
                     Console::WriteLine( "Parameter {0} for method {1} "
                     "has a description attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                     Console::WriteLine( "The description is: \"{0}\"", (dynamic_cast<DescriptionAttribute^>(attr))->Description );
                  }
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (Assembly, Boolean)

Attribute
.
.
::
.
GetCustomAttributes 方法 (Assembly, Boolean)
Attribute 类

检索应用于程序集的自定义特性的数组。参数指定程序集及忽略的搜索选项。 检索应用于程序集的自定义特性的数组。参数指定程序集及忽略的搜索选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As Assembly, _
    inherit As Boolean _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    Assembly element,
    bool inherit
)
public:
static array<Attribute^>^ GetCustomAttributes(
    Assembly^ element,
    bool inherit
)
static member GetCustomAttributes :
        element:Assembly *
        inherit:bool -> Attribute[]

参数

element
类型： System.Reflection Assembly
一个从 Assembly 类派生的对象，该类描述可重用模块集合。
inherit
类型： System Boolean
此参数被忽略，并且不会影响此方法的操作。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
说明 说明

从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttributes 的用法，采用 Assembly 作为参数。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

<Assembly: AssemblyTitle("CustAttrs1VB")>
<Assembly: AssemblyDescription("GetCustomAttributes() Demo")>
<Assembly: AssemblyCompany("Microsoft")>

Module DemoModule

    Sub Main()
        ' Get the Assembly type to access its metadata.
        Dim assy As Reflection.Assembly = GetType(DemoModule).Assembly
        Dim attr As Attribute

        ' Iterate through all the attributes for the assembly.
        For Each attr In Attribute.GetCustomAttributes(assy)

            ' Check for the AssemblyTitle attribute.
            If TypeOf attr Is AssemblyTitleAttribute Then
                ' Convert the attribute to access its data.
                Dim attrTitle As AssemblyTitleAttribute = _
                    CType(attr, AssemblyTitleAttribute)
                Console.WriteLine("Assembly title is ""{0}"".", _
                    attrTitle.Title)

            ' Check for the AssemblyDescription attribute.
            ElseIf TypeOf attr Is AssemblyDescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim attrDesc As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("Assembly description is ""{0}"".", _
                    attrDesc.Description)

            ' Check for the AssemblyCompany attribute.
            ElseIf TypeOf attr Is AssemblyCompanyAttribute Then
                ' Convert the attribute to access its data.
                Dim attrComp As AssemblyCompanyAttribute = _
                    CType(attr, AssemblyCompanyAttribute)
                Console.WriteLine("Assembly company is {0}.", _
                    attrComp.Company)
            End If
        Next
    End Sub
End Module

' Output:
' Assembly company is Microsoft.
' Assembly description is "GetCustomAttributes() Demo".
' Assembly title is "CustAttrs1VB".

using System;
using System.Reflection;

[assembly: AssemblyTitle("CustAttrs1CS")]
[assembly: AssemblyDescription("GetCustomAttributes() Demo")]
[assembly: AssemblyCompany("Microsoft")]

namespace CustAttrs1CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Assembly type to access its metadata.
            Assembly assy = clsType.Assembly;

            // Iterate through the attributes for the assembly.
            foreach(Attribute attr in Attribute.GetCustomAttributes(assy)) {
                // Check for the AssemblyTitle attribute.
                if (attr.GetType() == typeof(AssemblyTitleAttribute))
                    Console.WriteLine("Assembly title is \"{0}\".",
                        ((AssemblyTitleAttribute)attr).Title);

                // Check for the AssemblyDescription attribute.
                else if (attr.GetType() ==
                    typeof(AssemblyDescriptionAttribute))
                    Console.WriteLine("Assembly description is \"{0}\".",
                        ((AssemblyDescriptionAttribute)attr).Description);

                // Check for the AssemblyCompany attribute.
                else if (attr.GetType() == typeof(AssemblyCompanyAttribute))
                    Console.WriteLine("Assembly company is {0}.",
                        ((AssemblyCompanyAttribute)attr).Company);
            }
        }
    }
}

/*
 * Output:
 * Assembly company is Microsoft.
 * Assembly description is "GetCustomAttributes() Demo".
 * Assembly title is "CustAttrs1CS".
 */

#using <System.dll>

using namespace System;
using namespace System::Reflection;

[assembly:AssemblyTitle("CustAttrs1CS")];
[assembly:AssemblyDescription("GetCustomAttributes() Demo")];
[assembly:AssemblyCompany("Microsoft")];
namespace CustAttrs1CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Assembly type to access its metadata.
         Assembly^ assy = clsType->Assembly;

         // Iterate through the attributes for the assembly.
         System::Collections::IEnumerator^ myEnum = Attribute::GetCustomAttributes( assy )->GetEnumerator();
         while ( myEnum->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum->Current);

            // Check for the AssemblyTitle attribute.
            if ( attr->GetType() == AssemblyTitleAttribute::typeid )
                        Console::WriteLine( "Assembly title is \"{0}\".", (dynamic_cast<AssemblyTitleAttribute^>(attr))->Title );
            // Check for the AssemblyDescription attribute.
            else

            // Check for the AssemblyDescription attribute.
            if ( attr->GetType() == AssemblyDescriptionAttribute::typeid )
                        Console::WriteLine( "Assembly description is \"{0}\".", (dynamic_cast<AssemblyDescriptionAttribute^>(attr))->Description );
            // Check for the AssemblyCompany attribute.
            else

            // Check for the AssemblyCompany attribute.
            if ( attr->GetType() == AssemblyCompanyAttribute::typeid )
                        Console::WriteLine( "Assembly company is {0}.", (dynamic_cast<AssemblyCompanyAttribute^>(attr))->Company );
         }
      }
   };
}

/*
 * Output:
 * Assembly company is Microsoft.
 * Assembly description is "GetCustomAttributes() Demo".
 * Assembly title is "CustAttrs1CS".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (Assembly, Type)

Attribute
.
.
::
.
GetCustomAttributes 方法 (Assembly, Type)
Attribute 类

检索应用于程序集的自定义特性的数组。参数指定程序集，以及要搜索的自定义特性的类型。 检索应用于程序集的自定义特性的数组。参数指定程序集，以及要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As Assembly, _
    attributeType As Type _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    Assembly element,
    Type attributeType
)
public:
static array<Attribute^>^ GetCustomAttributes(
    Assembly^ element,
    Type^ attributeType
)
static member GetCustomAttributes :
        element:Assembly *
        attributeType:Type -> Attribute[]

参数

element
类型： System.Reflection Assembly
一个从 Assembly 类派生的对象，该类描述可重用模块集合。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的 attributeType 类型的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
说明 说明

从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttributes 的用法，采用 Assembly 作为参数。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

<Assembly: AssemblyTitle("CustAttrs1VB")>
<Assembly: AssemblyDescription("GetCustomAttributes() Demo")>
<Assembly: AssemblyCompany("Microsoft")>

Module DemoModule

    Sub Main()
        ' Get the Assembly type to access its metadata.
        Dim assy As Reflection.Assembly = GetType(DemoModule).Assembly
        Dim attr As Attribute

        ' Iterate through all the attributes for the assembly.
        For Each attr In Attribute.GetCustomAttributes(assy)

            ' Check for the AssemblyTitle attribute.
            If TypeOf attr Is AssemblyTitleAttribute Then
                ' Convert the attribute to access its data.
                Dim attrTitle As AssemblyTitleAttribute = _
                    CType(attr, AssemblyTitleAttribute)
                Console.WriteLine("Assembly title is ""{0}"".", _
                    attrTitle.Title)

            ' Check for the AssemblyDescription attribute.
            ElseIf TypeOf attr Is AssemblyDescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim attrDesc As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("Assembly description is ""{0}"".", _
                    attrDesc.Description)

            ' Check for the AssemblyCompany attribute.
            ElseIf TypeOf attr Is AssemblyCompanyAttribute Then
                ' Convert the attribute to access its data.
                Dim attrComp As AssemblyCompanyAttribute = _
                    CType(attr, AssemblyCompanyAttribute)
                Console.WriteLine("Assembly company is {0}.", _
                    attrComp.Company)
            End If
        Next
    End Sub
End Module

' Output:
' Assembly company is Microsoft.
' Assembly description is "GetCustomAttributes() Demo".
' Assembly title is "CustAttrs1VB".

using System;
using System.Reflection;

[assembly: AssemblyTitle("CustAttrs1CS")]
[assembly: AssemblyDescription("GetCustomAttributes() Demo")]
[assembly: AssemblyCompany("Microsoft")]

namespace CustAttrs1CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Assembly type to access its metadata.
            Assembly assy = clsType.Assembly;

            // Iterate through the attributes for the assembly.
            foreach(Attribute attr in Attribute.GetCustomAttributes(assy)) {
                // Check for the AssemblyTitle attribute.
                if (attr.GetType() == typeof(AssemblyTitleAttribute))
                    Console.WriteLine("Assembly title is \"{0}\".",
                        ((AssemblyTitleAttribute)attr).Title);

                // Check for the AssemblyDescription attribute.
                else if (attr.GetType() ==
                    typeof(AssemblyDescriptionAttribute))
                    Console.WriteLine("Assembly description is \"{0}\".",
                        ((AssemblyDescriptionAttribute)attr).Description);

                // Check for the AssemblyCompany attribute.
                else if (attr.GetType() == typeof(AssemblyCompanyAttribute))
                    Console.WriteLine("Assembly company is {0}.",
                        ((AssemblyCompanyAttribute)attr).Company);
            }
        }
    }
}

/*
 * Output:
 * Assembly company is Microsoft.
 * Assembly description is "GetCustomAttributes() Demo".
 * Assembly title is "CustAttrs1CS".
 */

#using <System.dll>

using namespace System;
using namespace System::Reflection;

[assembly:AssemblyTitle("CustAttrs1CS")];
[assembly:AssemblyDescription("GetCustomAttributes() Demo")];
[assembly:AssemblyCompany("Microsoft")];
namespace CustAttrs1CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Assembly type to access its metadata.
         Assembly^ assy = clsType->Assembly;

         // Iterate through the attributes for the assembly.
         System::Collections::IEnumerator^ myEnum = Attribute::GetCustomAttributes( assy )->GetEnumerator();
         while ( myEnum->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum->Current);

            // Check for the AssemblyTitle attribute.
            if ( attr->GetType() == AssemblyTitleAttribute::typeid )
                        Console::WriteLine( "Assembly title is \"{0}\".", (dynamic_cast<AssemblyTitleAttribute^>(attr))->Title );
            // Check for the AssemblyDescription attribute.
            else

            // Check for the AssemblyDescription attribute.
            if ( attr->GetType() == AssemblyDescriptionAttribute::typeid )
                        Console::WriteLine( "Assembly description is \"{0}\".", (dynamic_cast<AssemblyDescriptionAttribute^>(attr))->Description );
            // Check for the AssemblyCompany attribute.
            else

            // Check for the AssemblyCompany attribute.
            if ( attr->GetType() == AssemblyCompanyAttribute::typeid )
                        Console::WriteLine( "Assembly company is {0}.", (dynamic_cast<AssemblyCompanyAttribute^>(attr))->Company );
         }
      }
   };
}

/*
 * Output:
 * Assembly company is Microsoft.
 * Assembly description is "GetCustomAttributes() Demo".
 * Assembly title is "CustAttrs1CS".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (MemberInfo, Boolean)

Attribute
.
.
::
.
GetCustomAttributes 方法 (MemberInfo, Boolean)
Attribute 类

检索应用于类型的成员的自定义特性的数组。参数指定成员、要搜索的自定义特性的类型以及是否搜索成员的祖先。 检索应用于类型的成员的自定义特性的数组。参数指定成员、要搜索的自定义特性的类型以及是否搜索成员的祖先。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As MemberInfo, _
    inherit As Boolean _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    MemberInfo element,
    bool inherit
)
public:
static array<Attribute^>^ GetCustomAttributes(
    MemberInfo^ element,
    bool inherit
)
static member GetCustomAttributes :
        element:MemberInfo *
        inherit:bool -> Attribute[]

参数

element
类型： System.Reflection MemberInfo
一个从 MemberInfo 类派生的对象，该类描述类的构造函数、事件、字段、方法或属性成员。
inherit
类型： System Boolean
如果为 true，则指定还在 element 的祖先中搜索自定义特性。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | element 不是构造函数、方法、属性、事件、类型或字段。
TypeLoadException | 无法加载自定义特性类型。

如果 inherit 为 true，则返回值包含 element 的祖先的自定义特性。

说明 说明

从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttributes 的用法，采用 MemberInfo 作为参数。

Imports System
Imports System.Reflection
Imports System.Security
Imports System.Runtime.InteropServices

' Define an enumeration of Win32 unmanaged types
Public Enum UnmanagedType
    User
    GDI
    Kernel
    Shell
    Networking
    Multimedia
End Enum 'UnmanagedType

' Define the Unmanaged attribute.
Public Class UnmanagedAttribute
             Inherits Attribute

    ' Storage for the UnmanagedType value.
    Protected thisType As UnmanagedType

    ' Set the unmanaged type in the constructor.
    Public Sub New(ByVal type As UnmanagedType)
        thisType = type
    End Sub 'New

    ' Define a property to get and set the UnmanagedType value.
    Public Property Win32Type() As UnmanagedType
        Get
            Return thisType
        End Get
        Set
            thisType = Win32Type
        End Set
    End Property
End Class 'UnmanagedAttribute

' Create a class for an imported Win32 unmanaged function.
Public Class Win32
    <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function MessageBox(ByVal hWnd As Integer, _
                                      ByVal Text As String, _
                                      ByVal caption As String, _
                                      ByVal type As Integer) As Integer
    End Function 'MessageBox
End Class 'Win32

Public Class AClass
    ' Add some attributes to Win32CallMethod.
    <Obsolete("This method is obsolete. Use managed MsgBox instead."), _
     Unmanaged(UnmanagedType.User)>  _
    Public Sub Win32CallMethod()
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0)
    End Sub 'Win32CallMethod
End Class 'AClass

Class DemoClass
    Shared Sub Main(ByVal args() As String)
        ' Get the AClass type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for Win32CallMethod.
        Dim mInfo As MethodInfo = clsType.GetMethod("Win32CallMethod")
        If Not (mInfo Is Nothing) Then
            ' Iterate through all the attributes of the method.
            Dim attr As Attribute
            For Each attr In  Attribute.GetCustomAttributes(mInfo)
                ' Check for the Obsolete attribute.
                If attr.GetType().Equals(GetType(ObsoleteAttribute)) Then
                    Console.WriteLine("Method {0} is obsolete. The message is:", mInfo.Name)
                    Console.WriteLine("  ""{0}""", CType(attr, ObsoleteAttribute).Message)
                ' Check for the Unmanaged attribute.
                ElseIf attr.GetType().Equals(GetType(UnmanagedAttribute)) Then
                    Console.WriteLine("This method calls unmanaged code.")
                    Console.WriteLine( _
                            String.Format("The Unmanaged attribute type is {0}.", _
                            CType(attr, UnmanagedAttribute).Win32Type))
                    Dim myCls As New AClass()
                    myCls.Win32CallMethod()
                End If
            Next attr
        End If
    End Sub 'Main
End Class 'DemoClass

'
'This code example produces the following results.
'
'First, the compilation yields the warning, "...This method is
'obsolete. Use managed MsgBox instead."
'Second, execution yields a message box with a title of "Caution!"
'and message text of "This is an unmanaged call."
'Third, the following text is displayed in the console window:
'
'Method Win32CallMethod is obsolete. The message is:
'  "This method is obsolete. Use managed MsgBox instead."
'This method calls unmanaged code.
'The Unmanaged attribute type is User.
'

using System;
using System.Reflection;
using System.Security;
using System.Runtime.InteropServices;

namespace CustAttrs4CS
{

    // Define an enumeration of Win32 unmanaged types
    public enum UnmanagedType
    {
        User,
        GDI,
        Kernel,
        Shell,
        Networking,
        Multimedia
    }

    // Define the Unmanaged attribute.
    public class UnmanagedAttribute : Attribute
    {
        // Storage for the UnmanagedType value.
        protected UnmanagedType thisType;

        // Set the unmanaged type in the constructor.
        public UnmanagedAttribute(UnmanagedType type)
        {
            thisType = type;
        }

        // Define a property to get and set the UnmanagedType value.
        public UnmanagedType Win32Type
        {
            get { return thisType; }
            set { thisType = Win32Type; }
        }
    }

    // Create a class for an imported Win32 unmanaged function.
    public class Win32 {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(int hWnd, String text,
            String caption, uint type);
    }

    public class AClass {
        // Add some attributes to Win32CallMethod.
        [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
        [Unmanaged(UnmanagedType.User)]
        public void Win32CallMethod()
        {
            Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0);
        }
    }

    class DemoClass {
        static void Main(string[] args)
            {
            // Get the AClass type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for Win32CallMethod.
            MethodInfo mInfo = clsType.GetMethod("Win32CallMethod");
            if (mInfo != null)
            {
                // Iterate through all the attributes of the method.
                foreach(Attribute attr in
                    Attribute.GetCustomAttributes(mInfo)) {
                    // Check for the Obsolete attribute.
                    if (attr.GetType() == typeof(ObsoleteAttribute))
                    {
                        Console.WriteLine("Method {0} is obsolete. " +
                            "The message is:",
                            mInfo.Name);
                        Console.WriteLine("  \"{0}\"",
                            ((ObsoleteAttribute)attr).Message);
                    }

                    // Check for the Unmanaged attribute.
                    else if (attr.GetType() == typeof(UnmanagedAttribute))
                    {
                        Console.WriteLine(
                            "This method calls unmanaged code.");
                        Console.WriteLine(
                            String.Format("The Unmanaged attribute type is {0}.",
                                          ((UnmanagedAttribute)attr).Win32Type));
                        AClass myCls = new AClass();
                        myCls.Win32CallMethod();
                    }
                }
            }
        }
    }
}

/*

This code example produces the following results.

First, the compilation yields the warning, "...This method is
obsolete. Use managed MsgBox instead."
Second, execution yields a message box with a title of "Caution!"
and message text of "This is an unmanaged call."
Third, the following text is displayed in the console window:

Method Win32CallMethod is obsolete. The message is:
  "This method is obsolete. Use managed MsgBox instead."
This method calls unmanaged code.
The Unmanaged attribute type is User.

*/

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Runtime::InteropServices;

namespace CustAttrs4CS
{
   // Create a class for Win32 imported unmanaged functions.
   public ref class Win32
   {
   public:

      [DllImport("user32.dll", CharSet = CharSet::Unicode)]
      static int MessageBox( int hWnd, String^ text, String^ caption, UInt32 type );
   };

   public ref class AClass
   {
   public:

      // Add some attributes to the Win32CallMethod.

      [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
      void Win32CallMethod()
      {
         Win32::MessageBox( 0, "This is an unmanaged call.", "Be Careful!", 0 );
      }

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the Win32CallMethod.
         MethodInfo^ mInfo = clsType->GetMethod( "Win32CallMethod" );
         if ( mInfo != nullptr )
         {
            // Iterate through all the attributes for the method.
            System::Collections::IEnumerator^ myEnum3 = Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
            while ( myEnum3->MoveNext() )
            {
               Attribute^ attr = safe_cast<Attribute^>(myEnum3->Current);

               // Check for the Obsolete attribute.
               if ( attr->GetType() == ObsoleteAttribute::typeid )
               {
                  Console::WriteLine( "Method {0} is obsolete. "
                  "The message is:", mInfo->Name );
                  Console::WriteLine( (dynamic_cast<ObsoleteAttribute^>(attr))->Message );
               }
               // Check for the SuppressUnmanagedCodeSecurity attribute.
               else

               // Check for the SuppressUnmanagedCodeSecurity attribute.
               if ( attr->GetType() == SuppressUnmanagedCodeSecurityAttribute::typeid )
               {
                  Console::WriteLine( "This method calls unmanaged code "
                  "with no security check." );
                  Console::WriteLine( "Please do not use unless absolutely necessary." );
                  AClass^ myCls = gcnew AClass;
                  myCls->Win32CallMethod();
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Method Win32CallMethod is obsolete. The message is:
 * This method is obsolete. Use managed MsgBox instead.
 * This method calls unmanaged code with no security check.
 * Please do not use unless absolutely necessary.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (MemberInfo, Type)

Attribute
.
.
::
.
GetCustomAttributes 方法 (MemberInfo, Type)
Attribute 类

检索应用于类型的成员的自定义特性的数组。参数指定成员，以及要搜索的自定义特性的类型。 检索应用于类型的成员的自定义特性的数组。参数指定成员，以及要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As MemberInfo, _
    type As Type _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    MemberInfo element,
    Type type
)
public:
static array<Attribute^>^ GetCustomAttributes(
    MemberInfo^ element,
    Type^ type
)
static member GetCustomAttributes :
        element:MemberInfo *
        type:Type -> Attribute[]

参数

element
类型： System.Reflection MemberInfo
一个从 MemberInfo 类派生的对象，该类描述类的构造函数、事件、字段、方法或属性成员。
type
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的 type 类型的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不从 Attribute 派生。
NotSupportedException | element 不是构造函数、方法、属性、事件、类型或字段。
TypeLoadException | 无法加载自定义特性类型。

返回值包含 element 的祖先的自定义特性。

说明 说明

从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttribute 的用法，采用 MemberInfo 作为参数。

Imports System
Imports System.Reflection
Imports System.Security
Imports System.Runtime.InteropServices

' Define an enumeration of Win32 unmanaged types
Public Enum UnmanagedType
    User
    GDI
    Kernel
    Shell
    Networking
    Multimedia
End Enum 'UnmanagedType

' Define the Unmanaged attribute.
Public Class UnmanagedAttribute
             Inherits Attribute

    ' Storage for the UnmanagedType value.
    Protected thisType As UnmanagedType

    ' Set the unmanaged type in the constructor.
    Public Sub New(ByVal type As UnmanagedType)
        thisType = type
    End Sub 'New

    ' Define a property to get and set the UnmanagedType value.
    Public Property Win32Type() As UnmanagedType
        Get
            Return thisType
        End Get
        Set
            thisType = Win32Type
        End Set
    End Property
End Class 'UnmanagedAttribute

' Create a class for an imported Win32 unmanaged function.
Public Class Win32
    <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function MessageBox(ByVal hWnd As Integer, _
                                      ByVal Text As String, _
                                      ByVal caption As String, _
                                      ByVal type As Integer) As Integer
    End Function 'MessageBox
End Class 'Win32

Public Class AClass
    ' Add some attributes to Win32CallMethod.
    <Obsolete("This method is obsolete. Use managed MsgBox instead."), _
     Unmanaged(UnmanagedType.User)>  _
    Public Sub Win32CallMethod()
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0)
    End Sub 'Win32CallMethod
End Class 'AClass

Class DemoClass
    Shared Sub Main(ByVal args() As String)
        ' Get the AClass type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for Win32CallMethod.
        Dim mInfo As MethodInfo = clsType.GetMethod("Win32CallMethod")
        If Not (mInfo Is Nothing) Then
            ' Iterate through all the attributes of the method.
            Dim attr As Attribute
            For Each attr In  Attribute.GetCustomAttributes(mInfo)
                ' Check for the Obsolete attribute.
                If attr.GetType().Equals(GetType(ObsoleteAttribute)) Then
                    Console.WriteLine("Method {0} is obsolete. The message is:", mInfo.Name)
                    Console.WriteLine("  ""{0}""", CType(attr, ObsoleteAttribute).Message)
                ' Check for the Unmanaged attribute.
                ElseIf attr.GetType().Equals(GetType(UnmanagedAttribute)) Then
                    Console.WriteLine("This method calls unmanaged code.")
                    Console.WriteLine( _
                            String.Format("The Unmanaged attribute type is {0}.", _
                            CType(attr, UnmanagedAttribute).Win32Type))
                    Dim myCls As New AClass()
                    myCls.Win32CallMethod()
                End If
            Next attr
        End If
    End Sub 'Main
End Class 'DemoClass

'
'This code example produces the following results.
'
'First, the compilation yields the warning, "...This method is
'obsolete. Use managed MsgBox instead."
'Second, execution yields a message box with a title of "Caution!"
'and message text of "This is an unmanaged call."
'Third, the following text is displayed in the console window:
'
'Method Win32CallMethod is obsolete. The message is:
'  "This method is obsolete. Use managed MsgBox instead."
'This method calls unmanaged code.
'The Unmanaged attribute type is User.
'

using System;
using System.Reflection;
using System.Security;
using System.Runtime.InteropServices;

namespace CustAttrs4CS
{

    // Define an enumeration of Win32 unmanaged types
    public enum UnmanagedType
    {
        User,
        GDI,
        Kernel,
        Shell,
        Networking,
        Multimedia
    }

    // Define the Unmanaged attribute.
    public class UnmanagedAttribute : Attribute
    {
        // Storage for the UnmanagedType value.
        protected UnmanagedType thisType;

        // Set the unmanaged type in the constructor.
        public UnmanagedAttribute(UnmanagedType type)
        {
            thisType = type;
        }

        // Define a property to get and set the UnmanagedType value.
        public UnmanagedType Win32Type
        {
            get { return thisType; }
            set { thisType = Win32Type; }
        }
    }

    // Create a class for an imported Win32 unmanaged function.
    public class Win32 {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(int hWnd, String text,
            String caption, uint type);
    }

    public class AClass {
        // Add some attributes to Win32CallMethod.
        [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
        [Unmanaged(UnmanagedType.User)]
        public void Win32CallMethod()
        {
            Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0);
        }
    }

    class DemoClass {
        static void Main(string[] args)
            {
            // Get the AClass type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for Win32CallMethod.
            MethodInfo mInfo = clsType.GetMethod("Win32CallMethod");
            if (mInfo != null)
            {
                // Iterate through all the attributes of the method.
                foreach(Attribute attr in
                    Attribute.GetCustomAttributes(mInfo)) {
                    // Check for the Obsolete attribute.
                    if (attr.GetType() == typeof(ObsoleteAttribute))
                    {
                        Console.WriteLine("Method {0} is obsolete. " +
                            "The message is:",
                            mInfo.Name);
                        Console.WriteLine("  \"{0}\"",
                            ((ObsoleteAttribute)attr).Message);
                    }

                    // Check for the Unmanaged attribute.
                    else if (attr.GetType() == typeof(UnmanagedAttribute))
                    {
                        Console.WriteLine(
                            "This method calls unmanaged code.");
                        Console.WriteLine(
                            String.Format("The Unmanaged attribute type is {0}.",
                                          ((UnmanagedAttribute)attr).Win32Type));
                        AClass myCls = new AClass();
                        myCls.Win32CallMethod();
                    }
                }
            }
        }
    }
}

/*

This code example produces the following results.

First, the compilation yields the warning, "...This method is
obsolete. Use managed MsgBox instead."
Second, execution yields a message box with a title of "Caution!"
and message text of "This is an unmanaged call."
Third, the following text is displayed in the console window:

Method Win32CallMethod is obsolete. The message is:
  "This method is obsolete. Use managed MsgBox instead."
This method calls unmanaged code.
The Unmanaged attribute type is User.

*/

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Runtime::InteropServices;

namespace CustAttrs4CS
{
   // Create a class for Win32 imported unmanaged functions.
   public ref class Win32
   {
   public:

      [DllImport("user32.dll", CharSet = CharSet::Unicode)]
      static int MessageBox( int hWnd, String^ text, String^ caption, UInt32 type );
   };

   public ref class AClass
   {
   public:

      // Add some attributes to the Win32CallMethod.

      [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
      void Win32CallMethod()
      {
         Win32::MessageBox( 0, "This is an unmanaged call.", "Be Careful!", 0 );
      }

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the Win32CallMethod.
         MethodInfo^ mInfo = clsType->GetMethod( "Win32CallMethod" );
         if ( mInfo != nullptr )
         {
            // Iterate through all the attributes for the method.
            System::Collections::IEnumerator^ myEnum3 = Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
            while ( myEnum3->MoveNext() )
            {
               Attribute^ attr = safe_cast<Attribute^>(myEnum3->Current);

               // Check for the Obsolete attribute.
               if ( attr->GetType() == ObsoleteAttribute::typeid )
               {
                  Console::WriteLine( "Method {0} is obsolete. "
                  "The message is:", mInfo->Name );
                  Console::WriteLine( (dynamic_cast<ObsoleteAttribute^>(attr))->Message );
               }
               // Check for the SuppressUnmanagedCodeSecurity attribute.
               else

               // Check for the SuppressUnmanagedCodeSecurity attribute.
               if ( attr->GetType() == SuppressUnmanagedCodeSecurityAttribute::typeid )
               {
                  Console::WriteLine( "This method calls unmanaged code "
                  "with no security check." );
                  Console::WriteLine( "Please do not use unless absolutely necessary." );
                  AClass^ myCls = gcnew AClass;
                  myCls->Win32CallMethod();
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Method Win32CallMethod is obsolete. The message is:
 * This method is obsolete. Use managed MsgBox instead.
 * This method calls unmanaged code with no security check.
 * Please do not use unless absolutely necessary.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (Module, Boolean)

Attribute
.
.
::
.
GetCustomAttributes 方法 (Module, Boolean)
Attribute 类

检索应用于模块的自定义特性的数组。参数指定模块及忽略的搜索选项。 检索应用于模块的自定义特性的数组。参数指定模块及忽略的搜索选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As Module, _
    inherit As Boolean _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    Module element,
    bool inherit
)
public:
static array<Attribute^>^ GetCustomAttributes(
    Module^ element,
    bool inherit
)
static member GetCustomAttributes :
        element:Module *
        inherit:bool -> Attribute[]

参数

element
类型： System.Reflection Module
一个从 Module 类派生的对象，该类描述可移植的可执行文件。
inherit
类型： System Boolean
此参数被忽略，并且不会影响此方法的操作。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果 inherit 为 true，则返回值包含 element 的祖先的自定义特性。

下面的代码示例演示 GetCustomAttributes 的用法，采用 Module 作为参数。

Imports System
Imports System.Reflection
Imports System.ComponentModel

' Give the Module some attributes.
<Module: Description("A sample description")>

' Make the CLSCompliant attribute False.
' The CLSCompliant attribute is applicable for /target:module.
<Module: CLSCompliant(False)>

Module DemoModule

    Sub Main()
        ' Get the Module type to access its metadata.
        Dim modType As Reflection.Module = GetType(DemoModule).Module
        Dim attr As Attribute
        ' Iterate through all the attributes for the module.
        For Each attr In Attribute.GetCustomAttributes(modType)
            ' Check for the Description attribute.
            If TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Module {0} has the description ""{1}"".", _
                    modType.Name, descAttr.Description)

            ' Check for the CLSCompliant attribute.
            ElseIf TypeOf attr Is CLSCompliantAttribute Then
                ' Convert the attribute to access its data.
                Dim CLSCompAttr As CLSCompliantAttribute = _
                    CType(attr, CLSCompliantAttribute)
                Dim strCompliant As String
                If CLSCompAttr.IsCompliant Then
                    strCompliant = "is"
                Else
                    strCompliant = "is not"
                End If
                Console.WriteLine("Module {0} {1} CLSCompliant.", _
                    modType.Name, strCompliant)
            End If
        Next
    End Sub
End Module

' Output:
' Module CustAttrs2VB.exe has the description "A sample description".
' Module CustAttrs2VB.exe is not CLSCompliant.

using System;
using System.Reflection;
using System.ComponentModel;

// Assign some attributes to the module.
[module:Description("A sample description")]

// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:CLSCompliant(false)]

namespace CustAttrs2CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Module type to access its metadata.
            Module module = clsType.Module;

            // Iterate through all the attributes for the module.
            foreach(Attribute attr in Attribute.GetCustomAttributes(module)) {
                // Check for the Description attribute.
                if (attr.GetType() == typeof(DescriptionAttribute))
                    Console.WriteLine("Module {0} has the description " +
                        "\"{1}\".", module.Name,
                        ((DescriptionAttribute)attr).Description);
                // Check for the CLSCompliant attribute.
                else if (attr.GetType() == typeof(CLSCompliantAttribute))
                    Console.WriteLine("Module {0} {1} CLSCompliant.",
                        module.Name,
                        ((CLSCompliantAttribute)attr).IsCompliant ?
                            "is" : "is not");
            }
        }
    }
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

// Assign some attributes to the module.
// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:Description("A sample description")];
[module:CLSCompliant(false)];
namespace CustAttrs2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Module type to access its metadata.
         Module^ module = clsType->Module;

         // Iterate through all the attributes for the module.
         System::Collections::IEnumerator^ myEnum1 = Attribute::GetCustomAttributes( module )->GetEnumerator();
         while ( myEnum1->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the Description attribute.
            if ( attr->GetType() == DescriptionAttribute::typeid )
                        Console::WriteLine( "Module {0} has the description \"{1}\".", module->Name, (dynamic_cast<DescriptionAttribute^>(attr))->Description );
            // Check for the CLSCompliant attribute.
            else

            // Check for the CLSCompliant attribute.
            if ( attr->GetType() == CLSCompliantAttribute::typeid )
                        Console::WriteLine( "Module {0} {1} CLSCompliant.", module->Name, (dynamic_cast<CLSCompliantAttribute^>(attr))->IsCompliant ? (String^)"is" : "is not" );
         }
      }
   };
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (Module, Type)

Attribute
.
.
::
.
GetCustomAttributes 方法 (Module, Type)
Attribute 类

检索应用于模块的自定义特性的数组。参数指定模块和要搜索的自定义特性的类型。 检索应用于模块的自定义特性的数组。参数指定模块和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As Module, _
    attributeType As Type _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    Module element,
    Type attributeType
)
public:
static array<Attribute^>^ GetCustomAttributes(
    Module^ element,
    Type^ attributeType
)
static member GetCustomAttributes :
        element:Module *
        attributeType:Type -> Attribute[]

参数

element
类型： System.Reflection Module
一个从 Module 类派生的对象，该类描述可移植的可执行文件。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的 attributeType 类型的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。

下面的代码示例演示 GetCustomAttributes 的用法，采用 Module 作为参数。

Imports System
Imports System.Reflection
Imports System.ComponentModel

' Give the Module some attributes.
<Module: Description("A sample description")>

' Make the CLSCompliant attribute False.
' The CLSCompliant attribute is applicable for /target:module.
<Module: CLSCompliant(False)>

Module DemoModule

    Sub Main()
        ' Get the Module type to access its metadata.
        Dim modType As Reflection.Module = GetType(DemoModule).Module
        Dim attr As Attribute
        ' Iterate through all the attributes for the module.
        For Each attr In Attribute.GetCustomAttributes(modType)
            ' Check for the Description attribute.
            If TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Module {0} has the description ""{1}"".", _
                    modType.Name, descAttr.Description)

            ' Check for the CLSCompliant attribute.
            ElseIf TypeOf attr Is CLSCompliantAttribute Then
                ' Convert the attribute to access its data.
                Dim CLSCompAttr As CLSCompliantAttribute = _
                    CType(attr, CLSCompliantAttribute)
                Dim strCompliant As String
                If CLSCompAttr.IsCompliant Then
                    strCompliant = "is"
                Else
                    strCompliant = "is not"
                End If
                Console.WriteLine("Module {0} {1} CLSCompliant.", _
                    modType.Name, strCompliant)
            End If
        Next
    End Sub
End Module

' Output:
' Module CustAttrs2VB.exe has the description "A sample description".
' Module CustAttrs2VB.exe is not CLSCompliant.

using System;
using System.Reflection;
using System.ComponentModel;

// Assign some attributes to the module.
[module:Description("A sample description")]

// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:CLSCompliant(false)]

namespace CustAttrs2CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Module type to access its metadata.
            Module module = clsType.Module;

            // Iterate through all the attributes for the module.
            foreach(Attribute attr in Attribute.GetCustomAttributes(module)) {
                // Check for the Description attribute.
                if (attr.GetType() == typeof(DescriptionAttribute))
                    Console.WriteLine("Module {0} has the description " +
                        "\"{1}\".", module.Name,
                        ((DescriptionAttribute)attr).Description);
                // Check for the CLSCompliant attribute.
                else if (attr.GetType() == typeof(CLSCompliantAttribute))
                    Console.WriteLine("Module {0} {1} CLSCompliant.",
                        module.Name,
                        ((CLSCompliantAttribute)attr).IsCompliant ?
                            "is" : "is not");
            }
        }
    }
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

// Assign some attributes to the module.
// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:Description("A sample description")];
[module:CLSCompliant(false)];
namespace CustAttrs2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Module type to access its metadata.
         Module^ module = clsType->Module;

         // Iterate through all the attributes for the module.
         System::Collections::IEnumerator^ myEnum1 = Attribute::GetCustomAttributes( module )->GetEnumerator();
         while ( myEnum1->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the Description attribute.
            if ( attr->GetType() == DescriptionAttribute::typeid )
                        Console::WriteLine( "Module {0} has the description \"{1}\".", module->Name, (dynamic_cast<DescriptionAttribute^>(attr))->Description );
            // Check for the CLSCompliant attribute.
            else

            // Check for the CLSCompliant attribute.
            if ( attr->GetType() == CLSCompliantAttribute::typeid )
                        Console::WriteLine( "Module {0} {1} CLSCompliant.", module->Name, (dynamic_cast<CLSCompliantAttribute^>(attr))->IsCompliant ? (String^)"is" : "is not" );
         }
      }
   };
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (ParameterInfo, Boolean)

Attribute
.
.
::
.
GetCustomAttributes 方法 (ParameterInfo, Boolean)
Attribute 类

检索应用于方法参数的自定义特性的数组。参数指定方法参数以及是否搜索方法参数的祖先。 检索应用于方法参数的自定义特性的数组。参数指定方法参数以及是否搜索方法参数的祖先。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As ParameterInfo, _
    inherit As Boolean _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    ParameterInfo element,
    bool inherit
)
public:
static array<Attribute^>^ GetCustomAttributes(
    ParameterInfo^ element,
    bool inherit
)
static member GetCustomAttributes :
        element:ParameterInfo *
        inherit:bool -> Attribute[]

参数

element
类型： System.Reflection ParameterInfo
一个从 ParameterInfo 类派生的对象，该类描述类成员的参数。
inherit
类型： System Boolean
如果为 true，则指定还在 element 的祖先中搜索自定义特性。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentException | element 的 Member 属性为 null.
ArgumentNullException | element 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TypeLoadException | 无法加载自定义特性类型。

如果 element 表示派生类型的方法中的参数，则返回值将包含应用于重写基方法中的同一参数的可继承自定义特性。

下面的代码示例演示 GetCustomAttributes 的用法，采用 ParameterInfo 作为参数。

Imports System
Imports System.Reflection
Imports System.ComponentModel

Module DemoModule
    Public Class AClass
        ' Add Description and ParamArray (with the keyword) attributes.
        Public Sub ParamArrayAndDesc( _
            <Description("This argument is a ParamArray")> _
            ByVal ParamArray args() As Integer)
        End Sub
    End Class

    Sub Main()
        ' Get the Class type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for the method.
        Dim mInfo As MethodInfo = clsType.GetMethod("ParamArrayAndDesc")
        ' Get the Parameter information for the method.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        Dim attr As Attribute
        ' Iterate through each attribute of the parameter.
        For Each attr In Attribute.GetCustomAttributes(pInfo(0))
            ' Check for the ParamArray attribute.
            If TypeOf attr Is ParamArrayAttribute Then
                ' Convert the attribute to access its data.
                Dim paAttr As ParamArrayAttribute = _
                    CType(attr, ParamArrayAttribute)
                Console.WriteLine("Parameter {0} has the " + _
                    "ParamArray attribute.", pInfo(0).Name)
            ' Check for the Description attribute.
            ElseIf TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Parameter {0} has a description " + _
                    "attribute. The description is:", pInfo(0).Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

' Output:
' Parameter args has a description attribute. The description is:
' This argument is a ParamArray
' Parameter args has the ParamArray attribute.

using System;
using System.Reflection;
using System.ComponentModel;

namespace CustAttrs5CS {
    public class AClass {
        public void ParamArrayAndDesc(
            // Add ParamArray (with the keyword) and Description attributes.
            [Description("This argument is a ParamArray")]
            params int[] args)
        {}
    }

    class DemoClass {
        static void Main(string[] args) {
            // Get the Class type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for the method.
            MethodInfo mInfo = clsType.GetMethod("ParamArrayAndDesc");
            if (mInfo != null) {
                // Get the parameter information.
                ParameterInfo[] pInfo = mInfo.GetParameters();
                if (pInfo != null) {
                    // Iterate through all the attributes for the parameter.
                    foreach(Attribute attr in
                        Attribute.GetCustomAttributes(pInfo[0])) {
                        // Check for the ParamArray attribute.
                        if (attr.GetType() == typeof(ParamArrayAttribute))
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has the ParamArray attribute.",
                                pInfo[0].Name, mInfo.Name);
                        // Check for the Description attribute.
                        else if (attr.GetType() ==
                            typeof(DescriptionAttribute)) {
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has a description attribute.",
                                pInfo[0].Name, mInfo.Name);
                            Console.WriteLine("The description is: \"{0}\"",
                                ((DescriptionAttribute)attr).Description);
                        }
                    }
                }
            }
        }
    }
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

namespace CustAttrs5CS
{
   public ref class AClass
   {
   public:
      void ParamArrayAndDesc(
         // Add ParamArray and Description attributes.
         [Description("This argument is a ParamArray")]
         array<Int32>^args )
      {}
   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the method.
         MethodInfo^ mInfo = clsType->GetMethod( "ParamArrayAndDesc" );
         if ( mInfo != nullptr )
         {
            // Get the parameter information.
            array<ParameterInfo^>^pInfo = mInfo->GetParameters();
            if ( pInfo != nullptr )
            {
               // Iterate through all the attributes for the parameter.
               System::Collections::IEnumerator^ myEnum4 = Attribute::GetCustomAttributes( pInfo[ 0 ] )->GetEnumerator();
               while ( myEnum4->MoveNext() )
               {
                  Attribute^ attr = safe_cast<Attribute^>(myEnum4->Current);

                  // Check for the ParamArray attribute.
                  if ( attr->GetType() == ParamArrayAttribute::typeid )
                                    Console::WriteLine( "Parameter {0} for method {1} "
                  "has the ParamArray attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                  // Check for the Description attribute.
                  else

                  // Check for the Description attribute.
                  if ( attr->GetType() == DescriptionAttribute::typeid )
                  {
                     Console::WriteLine( "Parameter {0} for method {1} "
                     "has a description attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                     Console::WriteLine( "The description is: \"{0}\"", (dynamic_cast<DescriptionAttribute^>(attr))->Description );
                  }
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (ParameterInfo, Type)

Attribute
.
.
::
.
GetCustomAttributes 方法 (ParameterInfo, Type)
Attribute 类

检索应用于方法参数的自定义特性的数组。参数指定方法参数和要搜索的自定义特性的类型。 检索应用于方法参数的自定义特性的数组。参数指定方法参数和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As ParameterInfo, _
    attributeType As Type _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    ParameterInfo element,
    Type attributeType
)
public:
static array<Attribute^>^ GetCustomAttributes(
    ParameterInfo^ element,
    Type^ attributeType
)
static member GetCustomAttributes :
        element:ParameterInfo *
        attributeType:Type -> Attribute[]

参数

element
类型： System.Reflection ParameterInfo
一个从 ParameterInfo 类派生的对象，该类描述类成员的参数。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的 attributeType 类型的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
TypeLoadException | 无法加载自定义特性类型。

如果 element 表示派生类型的方法中的参数，则返回值将包含应用于重写基方法中的同一参数的可继承自定义特性。

下面的代码示例演示 GetCustomAttributes 的用法，采用 ParameterInfo 作为参数。

Imports System
Imports System.Reflection
Imports System.ComponentModel

Module DemoModule
    Public Class AClass
        ' Add Description and ParamArray (with the keyword) attributes.
        Public Sub ParamArrayAndDesc( _
            <Description("This argument is a ParamArray")> _
            ByVal ParamArray args() As Integer)
        End Sub
    End Class

    Sub Main()
        ' Get the Class type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for the method.
        Dim mInfo As MethodInfo = clsType.GetMethod("ParamArrayAndDesc")
        ' Get the Parameter information for the method.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        Dim attr As Attribute
        ' Iterate through each attribute of the parameter.
        For Each attr In Attribute.GetCustomAttributes(pInfo(0))
            ' Check for the ParamArray attribute.
            If TypeOf attr Is ParamArrayAttribute Then
                ' Convert the attribute to access its data.
                Dim paAttr As ParamArrayAttribute = _
                    CType(attr, ParamArrayAttribute)
                Console.WriteLine("Parameter {0} has the " + _
                    "ParamArray attribute.", pInfo(0).Name)
            ' Check for the Description attribute.
            ElseIf TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Parameter {0} has a description " + _
                    "attribute. The description is:", pInfo(0).Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

' Output:
' Parameter args has a description attribute. The description is:
' This argument is a ParamArray
' Parameter args has the ParamArray attribute.

using System;
using System.Reflection;
using System.ComponentModel;

namespace CustAttrs5CS {
    public class AClass {
        public void ParamArrayAndDesc(
            // Add ParamArray (with the keyword) and Description attributes.
            [Description("This argument is a ParamArray")]
            params int[] args)
        {}
    }

    class DemoClass {
        static void Main(string[] args) {
            // Get the Class type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for the method.
            MethodInfo mInfo = clsType.GetMethod("ParamArrayAndDesc");
            if (mInfo != null) {
                // Get the parameter information.
                ParameterInfo[] pInfo = mInfo.GetParameters();
                if (pInfo != null) {
                    // Iterate through all the attributes for the parameter.
                    foreach(Attribute attr in
                        Attribute.GetCustomAttributes(pInfo[0])) {
                        // Check for the ParamArray attribute.
                        if (attr.GetType() == typeof(ParamArrayAttribute))
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has the ParamArray attribute.",
                                pInfo[0].Name, mInfo.Name);
                        // Check for the Description attribute.
                        else if (attr.GetType() ==
                            typeof(DescriptionAttribute)) {
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has a description attribute.",
                                pInfo[0].Name, mInfo.Name);
                            Console.WriteLine("The description is: \"{0}\"",
                                ((DescriptionAttribute)attr).Description);
                        }
                    }
                }
            }
        }
    }
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

namespace CustAttrs5CS
{
   public ref class AClass
   {
   public:
      void ParamArrayAndDesc(
         // Add ParamArray and Description attributes.
         [Description("This argument is a ParamArray")]
         array<Int32>^args )
      {}
   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the method.
         MethodInfo^ mInfo = clsType->GetMethod( "ParamArrayAndDesc" );
         if ( mInfo != nullptr )
         {
            // Get the parameter information.
            array<ParameterInfo^>^pInfo = mInfo->GetParameters();
            if ( pInfo != nullptr )
            {
               // Iterate through all the attributes for the parameter.
               System::Collections::IEnumerator^ myEnum4 = Attribute::GetCustomAttributes( pInfo[ 0 ] )->GetEnumerator();
               while ( myEnum4->MoveNext() )
               {
                  Attribute^ attr = safe_cast<Attribute^>(myEnum4->Current);

                  // Check for the ParamArray attribute.
                  if ( attr->GetType() == ParamArrayAttribute::typeid )
                                    Console::WriteLine( "Parameter {0} for method {1} "
                  "has the ParamArray attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                  // Check for the Description attribute.
                  else

                  // Check for the Description attribute.
                  if ( attr->GetType() == DescriptionAttribute::typeid )
                  {
                     Console::WriteLine( "Parameter {0} for method {1} "
                     "has a description attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                     Console::WriteLine( "The description is: \"{0}\"", (dynamic_cast<DescriptionAttribute^>(attr))->Description );
                  }
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (Assembly, Type, Boolean)

Attribute
.
.
::
.
GetCustomAttributes 方法 (Assembly, Type, Boolean)
Attribute 类

检索应用于程序集的自定义特性的数组。参数指定程序集、要搜索的自定义特性的类型以及忽略的搜索选项。 检索应用于程序集的自定义特性的数组。参数指定程序集、要搜索的自定义特性的类型以及忽略的搜索选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As Assembly, _
    attributeType As Type, _
    inherit As Boolean _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    Assembly element,
    Type attributeType,
    bool inherit
)
public:
static array<Attribute^>^ GetCustomAttributes(
    Assembly^ element,
    Type^ attributeType,
    bool inherit
)
static member GetCustomAttributes :
        element:Assembly *
        attributeType:Type *
        inherit:bool -> Attribute[]

参数

element
类型： System.Reflection Assembly
一个从 Assembly 类派生的对象，该类描述可重用模块集合。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
此参数被忽略，并且不会影响此方法的操作。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的 attributeType 类型的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
说明 说明

从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttributes 的用法，采用 Assembly 作为参数。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

<Assembly: AssemblyTitle("CustAttrs1VB")>
<Assembly: AssemblyDescription("GetCustomAttributes() Demo")>
<Assembly: AssemblyCompany("Microsoft")>

Module DemoModule

    Sub Main()
        ' Get the Assembly type to access its metadata.
        Dim assy As Reflection.Assembly = GetType(DemoModule).Assembly
        Dim attr As Attribute

        ' Iterate through all the attributes for the assembly.
        For Each attr In Attribute.GetCustomAttributes(assy)

            ' Check for the AssemblyTitle attribute.
            If TypeOf attr Is AssemblyTitleAttribute Then
                ' Convert the attribute to access its data.
                Dim attrTitle As AssemblyTitleAttribute = _
                    CType(attr, AssemblyTitleAttribute)
                Console.WriteLine("Assembly title is ""{0}"".", _
                    attrTitle.Title)

            ' Check for the AssemblyDescription attribute.
            ElseIf TypeOf attr Is AssemblyDescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim attrDesc As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("Assembly description is ""{0}"".", _
                    attrDesc.Description)

            ' Check for the AssemblyCompany attribute.
            ElseIf TypeOf attr Is AssemblyCompanyAttribute Then
                ' Convert the attribute to access its data.
                Dim attrComp As AssemblyCompanyAttribute = _
                    CType(attr, AssemblyCompanyAttribute)
                Console.WriteLine("Assembly company is {0}.", _
                    attrComp.Company)
            End If
        Next
    End Sub
End Module

' Output:
' Assembly company is Microsoft.
' Assembly description is "GetCustomAttributes() Demo".
' Assembly title is "CustAttrs1VB".

using System;
using System.Reflection;

[assembly: AssemblyTitle("CustAttrs1CS")]
[assembly: AssemblyDescription("GetCustomAttributes() Demo")]
[assembly: AssemblyCompany("Microsoft")]

namespace CustAttrs1CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Assembly type to access its metadata.
            Assembly assy = clsType.Assembly;

            // Iterate through the attributes for the assembly.
            foreach(Attribute attr in Attribute.GetCustomAttributes(assy)) {
                // Check for the AssemblyTitle attribute.
                if (attr.GetType() == typeof(AssemblyTitleAttribute))
                    Console.WriteLine("Assembly title is \"{0}\".",
                        ((AssemblyTitleAttribute)attr).Title);

                // Check for the AssemblyDescription attribute.
                else if (attr.GetType() ==
                    typeof(AssemblyDescriptionAttribute))
                    Console.WriteLine("Assembly description is \"{0}\".",
                        ((AssemblyDescriptionAttribute)attr).Description);

                // Check for the AssemblyCompany attribute.
                else if (attr.GetType() == typeof(AssemblyCompanyAttribute))
                    Console.WriteLine("Assembly company is {0}.",
                        ((AssemblyCompanyAttribute)attr).Company);
            }
        }
    }
}

/*
 * Output:
 * Assembly company is Microsoft.
 * Assembly description is "GetCustomAttributes() Demo".
 * Assembly title is "CustAttrs1CS".
 */

#using <System.dll>

using namespace System;
using namespace System::Reflection;

[assembly:AssemblyTitle("CustAttrs1CS")];
[assembly:AssemblyDescription("GetCustomAttributes() Demo")];
[assembly:AssemblyCompany("Microsoft")];
namespace CustAttrs1CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Assembly type to access its metadata.
         Assembly^ assy = clsType->Assembly;

         // Iterate through the attributes for the assembly.
         System::Collections::IEnumerator^ myEnum = Attribute::GetCustomAttributes( assy )->GetEnumerator();
         while ( myEnum->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum->Current);

            // Check for the AssemblyTitle attribute.
            if ( attr->GetType() == AssemblyTitleAttribute::typeid )
                        Console::WriteLine( "Assembly title is \"{0}\".", (dynamic_cast<AssemblyTitleAttribute^>(attr))->Title );
            // Check for the AssemblyDescription attribute.
            else

            // Check for the AssemblyDescription attribute.
            if ( attr->GetType() == AssemblyDescriptionAttribute::typeid )
                        Console::WriteLine( "Assembly description is \"{0}\".", (dynamic_cast<AssemblyDescriptionAttribute^>(attr))->Description );
            // Check for the AssemblyCompany attribute.
            else

            // Check for the AssemblyCompany attribute.
            if ( attr->GetType() == AssemblyCompanyAttribute::typeid )
                        Console::WriteLine( "Assembly company is {0}.", (dynamic_cast<AssemblyCompanyAttribute^>(attr))->Company );
         }
      }
   };
}

/*
 * Output:
 * Assembly company is Microsoft.
 * Assembly description is "GetCustomAttributes() Demo".
 * Assembly title is "CustAttrs1CS".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (MemberInfo, Type, Boolean)

Attribute
.
.
::
.
GetCustomAttributes 方法 (MemberInfo, Type, Boolean)
Attribute 类

检索应用于类型的成员的自定义特性的数组。参数指定成员、要搜索的自定义特性的类型以及是否搜索成员的祖先。 检索应用于类型的成员的自定义特性的数组。参数指定成员、要搜索的自定义特性的类型以及是否搜索成员的祖先。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As MemberInfo, _
    type As Type, _
    inherit As Boolean _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    MemberInfo element,
    Type type,
    bool inherit
)
public:
static array<Attribute^>^ GetCustomAttributes(
    MemberInfo^ element,
    Type^ type,
    bool inherit
)
static member GetCustomAttributes :
        element:MemberInfo *
        type:Type *
        inherit:bool -> Attribute[]

参数

element
类型： System.Reflection MemberInfo
一个从 MemberInfo 类派生的对象，该类描述类的构造函数、事件、字段、方法或属性成员。
type
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
如果为 true，则指定还在 element 的祖先中搜索自定义特性。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的 type 类型的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不从 Attribute 派生。
NotSupportedException | element 不是构造函数、方法、属性、事件、类型或字段。
TypeLoadException | 无法加载自定义特性类型。

如果 inherit 为 true，则返回值包含 element 的祖先的自定义特性。

说明 说明

从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果方法、构造函数和类型的安全特性以新元数据格式存储，则此方法将返回这些特性。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 GetCustomAttributes 的用法，采用 MemberInfo 作为参数。

Imports System
Imports System.Reflection
Imports System.Security
Imports System.Runtime.InteropServices

' Define an enumeration of Win32 unmanaged types
Public Enum UnmanagedType
    User
    GDI
    Kernel
    Shell
    Networking
    Multimedia
End Enum 'UnmanagedType

' Define the Unmanaged attribute.
Public Class UnmanagedAttribute
             Inherits Attribute

    ' Storage for the UnmanagedType value.
    Protected thisType As UnmanagedType

    ' Set the unmanaged type in the constructor.
    Public Sub New(ByVal type As UnmanagedType)
        thisType = type
    End Sub 'New

    ' Define a property to get and set the UnmanagedType value.
    Public Property Win32Type() As UnmanagedType
        Get
            Return thisType
        End Get
        Set
            thisType = Win32Type
        End Set
    End Property
End Class 'UnmanagedAttribute

' Create a class for an imported Win32 unmanaged function.
Public Class Win32
    <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function MessageBox(ByVal hWnd As Integer, _
                                      ByVal Text As String, _
                                      ByVal caption As String, _
                                      ByVal type As Integer) As Integer
    End Function 'MessageBox
End Class 'Win32

Public Class AClass
    ' Add some attributes to Win32CallMethod.
    <Obsolete("This method is obsolete. Use managed MsgBox instead."), _
     Unmanaged(UnmanagedType.User)>  _
    Public Sub Win32CallMethod()
        Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0)
    End Sub 'Win32CallMethod
End Class 'AClass

Class DemoClass
    Shared Sub Main(ByVal args() As String)
        ' Get the AClass type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for Win32CallMethod.
        Dim mInfo As MethodInfo = clsType.GetMethod("Win32CallMethod")
        If Not (mInfo Is Nothing) Then
            ' Iterate through all the attributes of the method.
            Dim attr As Attribute
            For Each attr In  Attribute.GetCustomAttributes(mInfo)
                ' Check for the Obsolete attribute.
                If attr.GetType().Equals(GetType(ObsoleteAttribute)) Then
                    Console.WriteLine("Method {0} is obsolete. The message is:", mInfo.Name)
                    Console.WriteLine("  ""{0}""", CType(attr, ObsoleteAttribute).Message)
                ' Check for the Unmanaged attribute.
                ElseIf attr.GetType().Equals(GetType(UnmanagedAttribute)) Then
                    Console.WriteLine("This method calls unmanaged code.")
                    Console.WriteLine( _
                            String.Format("The Unmanaged attribute type is {0}.", _
                            CType(attr, UnmanagedAttribute).Win32Type))
                    Dim myCls As New AClass()
                    myCls.Win32CallMethod()
                End If
            Next attr
        End If
    End Sub 'Main
End Class 'DemoClass

'
'This code example produces the following results.
'
'First, the compilation yields the warning, "...This method is
'obsolete. Use managed MsgBox instead."
'Second, execution yields a message box with a title of "Caution!"
'and message text of "This is an unmanaged call."
'Third, the following text is displayed in the console window:
'
'Method Win32CallMethod is obsolete. The message is:
'  "This method is obsolete. Use managed MsgBox instead."
'This method calls unmanaged code.
'The Unmanaged attribute type is User.
'

using System;
using System.Reflection;
using System.Security;
using System.Runtime.InteropServices;

namespace CustAttrs4CS
{

    // Define an enumeration of Win32 unmanaged types
    public enum UnmanagedType
    {
        User,
        GDI,
        Kernel,
        Shell,
        Networking,
        Multimedia
    }

    // Define the Unmanaged attribute.
    public class UnmanagedAttribute : Attribute
    {
        // Storage for the UnmanagedType value.
        protected UnmanagedType thisType;

        // Set the unmanaged type in the constructor.
        public UnmanagedAttribute(UnmanagedType type)
        {
            thisType = type;
        }

        // Define a property to get and set the UnmanagedType value.
        public UnmanagedType Win32Type
        {
            get { return thisType; }
            set { thisType = Win32Type; }
        }
    }

    // Create a class for an imported Win32 unmanaged function.
    public class Win32 {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(int hWnd, String text,
            String caption, uint type);
    }

    public class AClass {
        // Add some attributes to Win32CallMethod.
        [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
        [Unmanaged(UnmanagedType.User)]
        public void Win32CallMethod()
        {
            Win32.MessageBox(0, "This is an unmanaged call.", "Caution!", 0);
        }
    }

    class DemoClass {
        static void Main(string[] args)
            {
            // Get the AClass type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for Win32CallMethod.
            MethodInfo mInfo = clsType.GetMethod("Win32CallMethod");
            if (mInfo != null)
            {
                // Iterate through all the attributes of the method.
                foreach(Attribute attr in
                    Attribute.GetCustomAttributes(mInfo)) {
                    // Check for the Obsolete attribute.
                    if (attr.GetType() == typeof(ObsoleteAttribute))
                    {
                        Console.WriteLine("Method {0} is obsolete. " +
                            "The message is:",
                            mInfo.Name);
                        Console.WriteLine("  \"{0}\"",
                            ((ObsoleteAttribute)attr).Message);
                    }

                    // Check for the Unmanaged attribute.
                    else if (attr.GetType() == typeof(UnmanagedAttribute))
                    {
                        Console.WriteLine(
                            "This method calls unmanaged code.");
                        Console.WriteLine(
                            String.Format("The Unmanaged attribute type is {0}.",
                                          ((UnmanagedAttribute)attr).Win32Type));
                        AClass myCls = new AClass();
                        myCls.Win32CallMethod();
                    }
                }
            }
        }
    }
}

/*

This code example produces the following results.

First, the compilation yields the warning, "...This method is
obsolete. Use managed MsgBox instead."
Second, execution yields a message box with a title of "Caution!"
and message text of "This is an unmanaged call."
Third, the following text is displayed in the console window:

Method Win32CallMethod is obsolete. The message is:
  "This method is obsolete. Use managed MsgBox instead."
This method calls unmanaged code.
The Unmanaged attribute type is User.

*/

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Runtime::InteropServices;

namespace CustAttrs4CS
{
   // Create a class for Win32 imported unmanaged functions.
   public ref class Win32
   {
   public:

      [DllImport("user32.dll", CharSet = CharSet::Unicode)]
      static int MessageBox( int hWnd, String^ text, String^ caption, UInt32 type );
   };

   public ref class AClass
   {
   public:

      // Add some attributes to the Win32CallMethod.

      [Obsolete("This method is obsolete. Use managed MsgBox instead.")]
      void Win32CallMethod()
      {
         Win32::MessageBox( 0, "This is an unmanaged call.", "Be Careful!", 0 );
      }

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the Win32CallMethod.
         MethodInfo^ mInfo = clsType->GetMethod( "Win32CallMethod" );
         if ( mInfo != nullptr )
         {
            // Iterate through all the attributes for the method.
            System::Collections::IEnumerator^ myEnum3 = Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
            while ( myEnum3->MoveNext() )
            {
               Attribute^ attr = safe_cast<Attribute^>(myEnum3->Current);

               // Check for the Obsolete attribute.
               if ( attr->GetType() == ObsoleteAttribute::typeid )
               {
                  Console::WriteLine( "Method {0} is obsolete. "
                  "The message is:", mInfo->Name );
                  Console::WriteLine( (dynamic_cast<ObsoleteAttribute^>(attr))->Message );
               }
               // Check for the SuppressUnmanagedCodeSecurity attribute.
               else

               // Check for the SuppressUnmanagedCodeSecurity attribute.
               if ( attr->GetType() == SuppressUnmanagedCodeSecurityAttribute::typeid )
               {
                  Console::WriteLine( "This method calls unmanaged code "
                  "with no security check." );
                  Console::WriteLine( "Please do not use unless absolutely necessary." );
                  AClass^ myCls = gcnew AClass;
                  myCls->Win32CallMethod();
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Method Win32CallMethod is obsolete. The message is:
 * This method is obsolete. Use managed MsgBox instead.
 * This method calls unmanaged code with no security check.
 * Please do not use unless absolutely necessary.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (Module, Type, Boolean)

Attribute
.
.
::
.
GetCustomAttributes 方法 (Module, Type, Boolean)
Attribute 类

检索应用于模块的自定义特性的数组。参数指定模块、要搜索的自定义特性的类型以及忽略的搜索选项。 检索应用于模块的自定义特性的数组。参数指定模块、要搜索的自定义特性的类型以及忽略的搜索选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As Module, _
    attributeType As Type, _
    inherit As Boolean _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    Module element,
    Type attributeType,
    bool inherit
)
public:
static array<Attribute^>^ GetCustomAttributes(
    Module^ element,
    Type^ attributeType,
    bool inherit
)
static member GetCustomAttributes :
        element:Module *
        attributeType:Type *
        inherit:bool -> Attribute[]

参数

element
类型： System.Reflection Module
一个从 Module 类派生的对象，该类描述可移植的可执行文件。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
此参数被忽略，并且不会影响此方法的操作。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的 attributeType 类型的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。

如果 inherit 为 true，则返回值包含 element 的祖先的自定义特性。

下面的代码示例演示 GetCustomAttributes 的用法，采用 Module 作为参数。

Imports System
Imports System.Reflection
Imports System.ComponentModel

' Give the Module some attributes.
<Module: Description("A sample description")>

' Make the CLSCompliant attribute False.
' The CLSCompliant attribute is applicable for /target:module.
<Module: CLSCompliant(False)>

Module DemoModule

    Sub Main()
        ' Get the Module type to access its metadata.
        Dim modType As Reflection.Module = GetType(DemoModule).Module
        Dim attr As Attribute
        ' Iterate through all the attributes for the module.
        For Each attr In Attribute.GetCustomAttributes(modType)
            ' Check for the Description attribute.
            If TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Module {0} has the description ""{1}"".", _
                    modType.Name, descAttr.Description)

            ' Check for the CLSCompliant attribute.
            ElseIf TypeOf attr Is CLSCompliantAttribute Then
                ' Convert the attribute to access its data.
                Dim CLSCompAttr As CLSCompliantAttribute = _
                    CType(attr, CLSCompliantAttribute)
                Dim strCompliant As String
                If CLSCompAttr.IsCompliant Then
                    strCompliant = "is"
                Else
                    strCompliant = "is not"
                End If
                Console.WriteLine("Module {0} {1} CLSCompliant.", _
                    modType.Name, strCompliant)
            End If
        Next
    End Sub
End Module

' Output:
' Module CustAttrs2VB.exe has the description "A sample description".
' Module CustAttrs2VB.exe is not CLSCompliant.

using System;
using System.Reflection;
using System.ComponentModel;

// Assign some attributes to the module.
[module:Description("A sample description")]

// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:CLSCompliant(false)]

namespace CustAttrs2CS {
    class DemoClass {
        static void Main(string[] args) {
            Type clsType = typeof(DemoClass);
            // Get the Module type to access its metadata.
            Module module = clsType.Module;

            // Iterate through all the attributes for the module.
            foreach(Attribute attr in Attribute.GetCustomAttributes(module)) {
                // Check for the Description attribute.
                if (attr.GetType() == typeof(DescriptionAttribute))
                    Console.WriteLine("Module {0} has the description " +
                        "\"{1}\".", module.Name,
                        ((DescriptionAttribute)attr).Description);
                // Check for the CLSCompliant attribute.
                else if (attr.GetType() == typeof(CLSCompliantAttribute))
                    Console.WriteLine("Module {0} {1} CLSCompliant.",
                        module.Name,
                        ((CLSCompliantAttribute)attr).IsCompliant ?
                            "is" : "is not");
            }
        }
    }
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

// Assign some attributes to the module.
// Set the module's CLSCompliant attribute to false
// The CLSCompliant attribute is applicable for /target:module.
[module:Description("A sample description")];
[module:CLSCompliant(false)];
namespace CustAttrs2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {
         Type^ clsType = DemoClass::typeid;

         // Get the Module type to access its metadata.
         Module^ module = clsType->Module;

         // Iterate through all the attributes for the module.
         System::Collections::IEnumerator^ myEnum1 = Attribute::GetCustomAttributes( module )->GetEnumerator();
         while ( myEnum1->MoveNext() )
         {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the Description attribute.
            if ( attr->GetType() == DescriptionAttribute::typeid )
                        Console::WriteLine( "Module {0} has the description \"{1}\".", module->Name, (dynamic_cast<DescriptionAttribute^>(attr))->Description );
            // Check for the CLSCompliant attribute.
            else

            // Check for the CLSCompliant attribute.
            if ( attr->GetType() == CLSCompliantAttribute::typeid )
                        Console::WriteLine( "Module {0} {1} CLSCompliant.", module->Name, (dynamic_cast<CLSCompliantAttribute^>(attr))->IsCompliant ? (String^)"is" : "is not" );
         }
      }
   };
}

/*
 * Output:
 * Module CustAttrs2CS.exe is not CLSCompliant.
 * Module CustAttrs2CS.exe has the description "A sample description".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetCustomAttributes 方法 (ParameterInfo, Type, Boolean)

Attribute
.
.
::
.
GetCustomAttributes 方法 (ParameterInfo, Type, Boolean)
Attribute 类

检索应用于方法参数的自定义特性的数组。参数指定方法参数、要搜索的自定义特性的类型以及是否搜索方法参数的祖先。 检索应用于方法参数的自定义特性的数组。参数指定方法参数、要搜索的自定义特性的类型以及是否搜索方法参数的祖先。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCustomAttributes ( _
    element As ParameterInfo, _
    attributeType As Type, _
    inherit As Boolean _
) As Attribute()
public static Attribute[] GetCustomAttributes(
    ParameterInfo element,
    Type attributeType,
    bool inherit
)
public:
static array<Attribute^>^ GetCustomAttributes(
    ParameterInfo^ element,
    Type^ attributeType,
    bool inherit
)
static member GetCustomAttributes :
        element:ParameterInfo *
        attributeType:Type *
        inherit:bool -> Attribute[]

参数

element
类型： System.Reflection ParameterInfo
一个从 ParameterInfo 类派生的对象，该类描述类成员的参数。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
如果为 true，则指定还在 element 的祖先中搜索自定义特性。

返回值

类型：
array<
System Attribute
>
[]
()
[]

一个 Attribute 数组，包含应用于 element 的 attributeType 类型的自定义特性；如果不存在此类自定义特性，则为空数组。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
TypeLoadException | 无法加载自定义特性类型。

如果 element 表示派生类型的方法中的参数，则返回值将包含应用于重写基方法中的同一参数的可继承自定义特性。

下面的代码示例演示 GetCustomAttributes 的用法，采用 ParameterInfo 作为参数。

Imports System
Imports System.Reflection
Imports System.ComponentModel

Module DemoModule
    Public Class AClass
        ' Add Description and ParamArray (with the keyword) attributes.
        Public Sub ParamArrayAndDesc( _
            <Description("This argument is a ParamArray")> _
            ByVal ParamArray args() As Integer)
        End Sub
    End Class

    Sub Main()
        ' Get the Class type to access its metadata.
        Dim clsType As Type = GetType(AClass)
        ' Get the type information for the method.
        Dim mInfo As MethodInfo = clsType.GetMethod("ParamArrayAndDesc")
        ' Get the Parameter information for the method.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        Dim attr As Attribute
        ' Iterate through each attribute of the parameter.
        For Each attr In Attribute.GetCustomAttributes(pInfo(0))
            ' Check for the ParamArray attribute.
            If TypeOf attr Is ParamArrayAttribute Then
                ' Convert the attribute to access its data.
                Dim paAttr As ParamArrayAttribute = _
                    CType(attr, ParamArrayAttribute)
                Console.WriteLine("Parameter {0} has the " + _
                    "ParamArray attribute.", pInfo(0).Name)
            ' Check for the Description attribute.
            ElseIf TypeOf attr Is DescriptionAttribute Then
                ' Convert the attribute to access its data.
                Dim descAttr As DescriptionAttribute = _
                    CType(attr, DescriptionAttribute)
                Console.WriteLine("Parameter {0} has a description " + _
                    "attribute. The description is:", pInfo(0).Name)
                Console.WriteLine(descAttr.Description)
            End If
        Next
    End Sub
End Module

' Output:
' Parameter args has a description attribute. The description is:
' This argument is a ParamArray
' Parameter args has the ParamArray attribute.

using System;
using System.Reflection;
using System.ComponentModel;

namespace CustAttrs5CS {
    public class AClass {
        public void ParamArrayAndDesc(
            // Add ParamArray (with the keyword) and Description attributes.
            [Description("This argument is a ParamArray")]
            params int[] args)
        {}
    }

    class DemoClass {
        static void Main(string[] args) {
            // Get the Class type to access its metadata.
            Type clsType = typeof(AClass);
            // Get the type information for the method.
            MethodInfo mInfo = clsType.GetMethod("ParamArrayAndDesc");
            if (mInfo != null) {
                // Get the parameter information.
                ParameterInfo[] pInfo = mInfo.GetParameters();
                if (pInfo != null) {
                    // Iterate through all the attributes for the parameter.
                    foreach(Attribute attr in
                        Attribute.GetCustomAttributes(pInfo[0])) {
                        // Check for the ParamArray attribute.
                        if (attr.GetType() == typeof(ParamArrayAttribute))
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has the ParamArray attribute.",
                                pInfo[0].Name, mInfo.Name);
                        // Check for the Description attribute.
                        else if (attr.GetType() ==
                            typeof(DescriptionAttribute)) {
                            Console.WriteLine("Parameter {0} for method {1} " +
                                "has a description attribute.",
                                pInfo[0].Name, mInfo.Name);
                            Console.WriteLine("The description is: \"{0}\"",
                                ((DescriptionAttribute)attr).Description);
                        }
                    }
                }
            }
        }
    }
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;

namespace CustAttrs5CS
{
   public ref class AClass
   {
   public:
      void ParamArrayAndDesc(
         // Add ParamArray and Description attributes.
         [Description("This argument is a ParamArray")]
         array<Int32>^args )
      {}
   };

   ref class DemoClass
   {
   public:
      static void Main()
      {
         // Get the Class type to access its metadata.
         Type^ clsType = AClass::typeid;

         // Get the type information for the method.
         MethodInfo^ mInfo = clsType->GetMethod( "ParamArrayAndDesc" );
         if ( mInfo != nullptr )
         {
            // Get the parameter information.
            array<ParameterInfo^>^pInfo = mInfo->GetParameters();
            if ( pInfo != nullptr )
            {
               // Iterate through all the attributes for the parameter.
               System::Collections::IEnumerator^ myEnum4 = Attribute::GetCustomAttributes( pInfo[ 0 ] )->GetEnumerator();
               while ( myEnum4->MoveNext() )
               {
                  Attribute^ attr = safe_cast<Attribute^>(myEnum4->Current);

                  // Check for the ParamArray attribute.
                  if ( attr->GetType() == ParamArrayAttribute::typeid )
                                    Console::WriteLine( "Parameter {0} for method {1} "
                  "has the ParamArray attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                  // Check for the Description attribute.
                  else

                  // Check for the Description attribute.
                  if ( attr->GetType() == DescriptionAttribute::typeid )
                  {
                     Console::WriteLine( "Parameter {0} for method {1} "
                     "has a description attribute.", pInfo[ 0 ]->Name, mInfo->Name );
                     Console::WriteLine( "The description is: \"{0}\"", (dynamic_cast<DescriptionAttribute^>(attr))->Description );
                  }
               }
            }
         }
      }
   };
}

/*
 * Output:
 * Parameter args for method ParamArrayAndDesc has a description attribute.
 * The description is: "This argument is a ParamArray"
 * Parameter args for method ParamArrayAndDesc has the ParamArray attribute.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
GetCustomAttributes 重载
System 命名空间


Attribute ..::.GetHashCode 方法

Attribute
.
.
::
.
GetHashCode 方法
Attribute 类

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

下面的代码示例演示在 Attribute 上下文中 GetHashCode 的用法。

Imports System
Imports System.Reflection
Imports System.Collections

Module HashCodeVB

    ' Visual Basic requires that the AttributeUsage be specified.
    ' A custom attribute to allow two authors per method.
    <AttributeUsage(AttributeTargets.All.Method)> _
    Public Class AuthorsAttribute
        Inherits Attribute

        Public Sub New(ByVal name1 As String, ByVal name2 As String)
            myAuthorName1 = name1
            myAuthorName2 = name2
        End Sub

        Protected myAuthorName1 As String
        Protected myAuthorName2 As String

        Public Property AuthorName1() As String
            Get
                Return myAuthorName1
            End Get
            Set(ByVal Value As String)
                myAuthorName1 = AuthorName1
            End Set
        End Property

        Public Property AuthorName2() As String
            Get
                Return myAuthorName2
            End Get
            Set(ByVal Value As String)
                myAuthorName2 = AuthorName2
            End Set
        End Property

        ' Use the hash code of the string objects and Xor them together.
        Public Overrides Function GetHashCode() As Integer
            Return myAuthorName1.GetHashCode() Xor myAuthorName2.GetHashCode()
        End Function

    End Class

    ' Provide the author names for each method of the class.
    Public Class TestClass
        <Authors("Immanuel Kant", "Lao Tzu")> _
        Public Sub Method1()
        End Sub

        <Authors("Jean-Paul Sartre", "Friedrich Nietzsche")> _
        Public Sub Method2()
        End Sub

        <Authors("Immanuel Kant", "Lao Tzu")> _
        Public Sub Method3()
        End Sub

        <Authors("Jean-Paul Sartre", "Friedrich Nietzsche")> _
        Public Sub Method4()
        End Sub

        <Authors("Immanuel Kant", "Friedrich Nietzsche")> _
        Public Sub Method5()
        End Sub
    End Class

    Sub Main()
        ' Get the class type to access its metadata.
        Dim clsType As Type = GetType(TestClass)
        ' Use a hash table to store the hash codes and methods.
        Dim hTable As Hashtable = New Hashtable()
        Dim mInfo As MethodInfo
        ' Iterate through all the methods of the class.
        For Each mInfo In clsType.GetMethods()
            ' Get the unique hash code for these authors.
            Dim attr As Attribute = Attribute.GetCustomAttribute(mInfo, GetType(AuthorsAttribute))
            If Not attr Is Nothing Then
                Dim authAttr As AuthorsAttribute = CType(attr, _
                    AuthorsAttribute)
                Dim hCode As Integer = authAttr.GetHashCode()
                ' See if it's already been added to the hash table.
                If hTable.Contains(hCode) Then
                    Dim o As Object = hTable(hCode)
                    If TypeOf o Is ArrayList Then
                        ' If so, retrieve the array using the Item syntax.
                        Dim al As ArrayList = CType(o, ArrayList)
                        ' Add the method to the array list.
                        al.Add(mInfo.Name)
                        ' Put the edited array list back into the table.
                        hTable(hCode) = al
                    End If
                ' This is the first occurrence of this hash code.
                Else
                    ' Create a new array list.
                    Dim al As ArrayList = New ArrayList()
                    ' Add the method name as the first entry.
                    al.Add(mInfo.Name)
                    ' Add the new hash code and array list to the table.
                    hTable.Add(hCode, al)
                End If
            End If
        Next

        ' Get the hash table's enumerator and iterate through the table.
        Dim dictEnum As IDictionaryEnumerator = hTable.GetEnumerator
        While dictEnum.MoveNext()
            ' Get the array list for this iteration.
            Dim o As Object = dictEnum.Value
            If TypeOf o Is ArrayList Then
                Dim al As ArrayList = CType(o, ArrayList)
                Dim i As Integer
                ' Access each element of the array.
                for i = 0 to al.Count - 1
                    ' For the first element, retrieve the author names.
                    If i = 0 Then
                        Dim methodName as Object = al(i)
                        ' Get the metadata for the method.
                        Dim mInfo2 As MethodInfo = _
                            clsType.GetMethod(CType(methodName, String))
                        ' Retrieve the Authors attribute again.
                        Dim attr As Attribute = Attribute.GetCustomAttribute( _
                            mInfo2, GetType(AuthorsAttribute))
                        If Not attr Is Nothing And _
                            TypeOf attr Is AuthorsAttribute Then
                            ' Convert the attribute to access its data.
                            Dim authAttr As AuthorsAttribute = _
                                CType(attr, AuthorsAttribute)
                            ' Display the author's names.
                            Console.WriteLine("Authors: {0}, {1}", _
                                authattr.AuthorName1, authattr.AuthorName2)
                        Else
                            Console.WriteLine("The authors could not " + _
                                "be retrieved.")
                        End If
                    End If
                    ' Display each method authored by this team.
                    Console.WriteLine(al(i))
                Next i
                Console.WriteLine("")
            End If
        End While
    End Sub
End Module

using System;
using System.Reflection;
using System.Collections;

namespace HashCodeCS
{
    // A custom attribute to allow two authors per method.
    public class AuthorsAttribute : Attribute
    {
        public AuthorsAttribute(string name1, string name2)
        {
            authorName1 = name1;
            authorName2 = name2;
        }

        protected string authorName1;
        protected string authorName2;

        public string AuthorName1
        {
            get { return authorName1; }
            set { authorName1 = AuthorName1; }
        }

        public string AuthorName2
        {
            get { return authorName2; }
            set { authorName2 = AuthorName2; }
        }

        // Use the hash code of the string objects and xor them together.
        public override int GetHashCode()
        {
            return authorName1.GetHashCode() ^ authorName2.GetHashCode();
        }
    }

    // Provide the author names for each method of the class.
    public class TestClass
    {
        [Authors("Immanuel Kant", "Lao Tzu")]
        public void Method1()
        {}

        [Authors("Jean-Paul Sartre", "Friedrich Nietzsche")]
        public void Method2()
        {}

        [Authors("Immanuel Kant", "Lao Tzu")]
        public void Method3()
        {}

        [Authors("Jean-Paul Sartre", "Friedrich Nietzsche")]
        public void Method4()
        {}

        [Authors("Immanuel Kant", "Friedrich Nietzsche")]
        public void Method5()
        {}
    }

    class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(TestClass);

            // Use a hash table to store the hash codes and methods.
            Hashtable hTable = new Hashtable();

            // Iterate through all the methods of the class.
            foreach(MethodInfo mInfo in clsType.GetMethods())
            {
                // Get the Authors attribute for the method if it exists.
                AuthorsAttribute authAttr =
                    (AuthorsAttribute)Attribute.GetCustomAttribute(
                    mInfo, typeof(AuthorsAttribute));
                if (authAttr != null)
                {
                    // Get the unique hash code for these authors.
                    int hCode = authAttr.GetHashCode();

                    // See if it's already been added to the hash table.
                    if (hTable.Contains(hCode))
                    {
                        // If so, retrieve the array using the Item syntax.
                        ArrayList al = (ArrayList)hTable[hCode];
                        // Add the method to the array list.
                        al.Add(mInfo.Name);
                        // Put the edited array list back into the table.
                        hTable[hCode] = al;
                    }

                        // This is the first occurrence of this hash code.
                    else
                    {
                        // Create a new array list.
                        ArrayList al = new ArrayList();
                        // Add the method name as the first entry.
                        al.Add(mInfo.Name);
                        // Add the new hash code and array list to the table.
                        hTable.Add(hCode, al);
                    }
                }
            }

            // Get the hash table's enumerator and iterate through the table.
            IDictionaryEnumerator dictEnum = hTable.GetEnumerator();
            while (dictEnum.MoveNext())
            {
                // Get the array list for this iteration.
                ArrayList al = (ArrayList)dictEnum.Value;
                // Access each element of the array.
                for (int i=0; i<al.Count; i++)
                {
                    // For the first element, retrieve the author names.
                    if (i == 0)
                    {
                        // Get the metadata for the method.
                        MethodInfo mInfo = clsType.GetMethod((String)al[i]);
                        // Retrieve the Authors attribute again.
                        AuthorsAttribute authAttr =
                            (AuthorsAttribute)Attribute.GetCustomAttribute(
                            mInfo, typeof(AuthorsAttribute));
                        // Display the authors names.
                        if (authAttr != null)
                            Console.WriteLine("Authors: {0}, {1}",
                                authAttr.AuthorName1, authAttr.AuthorName2);
                        else
                            Console.WriteLine("The authors could not be retrieved.");
                    }
                    // Display each method authored by this team.
                    Console.WriteLine(al[i]);
                }
                Console.WriteLine("");
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::.IsDefaultAttribute 方法

Attribute
.
.
::
.
IsDefaultAttribute 方法
Attribute 类

当在派生类中重写时，指示此实例的值是否是派生类的默认值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IsDefaultAttribute As Boolean
public virtual bool IsDefaultAttribute()
public:
virtual bool IsDefaultAttribute()
abstract IsDefaultAttribute : unit -> bool
override IsDefaultAttribute : unit -> bool

返回值

类型： System Boolean
如果该实例是此类的默认特性，则为 true；否则为 false。

此类的默认实现返回 false，并且必须在派生类中实现才能由此类使用。

此方法在派生类中的实现将此实例的值与标准默认值进行比较，然后返回一个布尔值，指示此实例的值是否等于标准值。标准值一般编码为实现中的常数，或者以编程方式存储在实现所使用的字段中。 此方法在派生类中的实现将此实例的值与标准默认值进行比较，然后返回一个布尔值，指示此实例的值是否等于标准值。标准值一般编码为实现中的常数，或者以编程方式存储在实现所使用的字段中。

下面的代码示例演示 IsDefaultAttribute 的用法。

Imports System
Imports System.Reflection

Module DemoModule

    ' An enumeration of animals. Start at 1 (0 = uninitialized).
    Enum Animal
        ' Pets
        Dog = 1
        Cat
        Bird
    End Enum

    ' Visual Basic requires that the AttributeUsage be specified.
    ' A custom attribute to allow a target to have a pet.
    <AttributeUsage(AttributeTargets.Method)> _
    Public Class AnimalTypeAttribute
        Inherits Attribute

        ' The constructor is called when the attribute is set.
        Public Sub New(ByVal animal As Animal)
            Me.thePet = animal
        End Sub

        ' Provide a default constructor and make Dog the default.
        Public Sub New()
            thePet = Animal.Dog
        End Sub

        ' Keep a variable internally ...
        Protected thePet As Animal

        ' .. and show a copy to the outside world.
        Public Property Pet() As Animal
            Get
                Return thePet
            End Get
            Set(ByVal Value As Animal)
                thePet = Value
            End Set
        End Property

        ' Override IsDefaultAttribute to return the correct response.
        Public Overrides Function IsDefaultAttribute() As Boolean
            If thePet = Animal.Dog Then
                Return True
            Else
                Return False
            End If
        End Function

    End Class

    Public Class TestClass
        ' Use the default constructor.
        <AnimalType()> _
        Public Sub Method1()
        End Sub

    End Class

    Sub Main()
        ' Get the class type to access its metadata.
        Dim clsType As Type = GetType(TestClass)
        ' Get type information for the method.
        Dim mInfo As MethodInfo = clsType.GetMethod("Method1")
        ' Get the AnimalType attribute for the method.
        Dim attr As Attribute = Attribute.GetCustomAttribute(mInfo, _
            GetType(AnimalTypeAttribute))
        If Not attr Is Nothing And TypeOf attr Is AnimalTypeAttribute Then
            ' Convert the attribute to the required type.
            Dim atAttr As AnimalTypeAttribute = _
                CType(attr, AnimalTypeAttribute)
            Dim strDef As String
            ' Check to see if the default attribute is applied.
            If atAttr.IsDefaultAttribute() Then
                strDef = "is"
            Else
                strDef = "is not"
            End If
            ' Display the result.
            Console.WriteLine("The attribute {0} for method {1} " & _
                    "in class {2}", atAttr.Pet.ToString(), mInfo.Name, _
                    clsType.Name)
            Console.WriteLine("{0} the default for the AnimalType " & _
                    "attribute.", strDef)
        End If
    End Sub
End Module

using System;
using System.Reflection;

namespace DefAttrCS
{
    // An enumeration of animals. Start at 1 (0 = uninitialized).
    public enum Animal
    {
        // Pets.
        Dog = 1,
        Cat,
        Bird,
    }

    // A custom attribute to allow a target to have a pet.
    public class AnimalTypeAttribute : Attribute
    {
        // The constructor is called when the attribute is set.
        public AnimalTypeAttribute(Animal pet)
        {
            thePet = pet;
        }

        // Provide a default constructor and make Dog the default.
        public AnimalTypeAttribute()
        {
            thePet = Animal.Dog;
        }

        // Keep a variable internally ...
        protected Animal thePet;

        // .. and show a copy to the outside world.
        public Animal Pet
        {
            get { return thePet; }
            set { thePet = Pet; }
        }

        // Override IsDefaultAttribute to return the correct response.
        public override bool IsDefaultAttribute()
        {
            if (thePet == Animal.Dog)
                return true;

            return false;
        }
    }

    public class TestClass
    {
        // Use the default constructor.
        [AnimalType]
        public void Method1()
        {}
    }

    class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(TestClass);
            // Get type information for the method.
            MethodInfo mInfo = clsType.GetMethod("Method1");
            // Get the AnimalType attribute for the method.
            AnimalTypeAttribute atAttr =
                (AnimalTypeAttribute)Attribute.GetCustomAttribute(mInfo,
                typeof(AnimalTypeAttribute));
            // Check to see if the default attribute is applied.
            Console.WriteLine("The attribute {0} for method {1} in class {2}",
                atAttr.Pet, mInfo.Name, clsType.Name);
            Console.WriteLine("{0} the default for the AnimalType attribute.",
                atAttr.IsDefaultAttribute() ? "is" : "is not");
        }
    }
}

using namespace System;
using namespace System::Reflection;

// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum class Animal
{
   // Pets.
   Dog = 1,
   Cat, Bird
};

// A custom attribute to allow a target to have a pet.
public ref class AnimalTypeAttribute: public Attribute
{
public:

   // The constructor is called when the attribute is set.
   AnimalTypeAttribute( Animal pet )
   {
      thePet = pet;
   }

   // Provide a default constructor and make Dog the default.
   AnimalTypeAttribute()
   {
      thePet = Animal::Dog;
   }

protected:

   // Keep a variable internally ...
   Animal thePet;

public:

   property Animal Pet
   {
      // .. and show a copy to the outside world.
      Animal get()
      {
         return thePet;
      }
      void set( Animal value )
      {
         thePet = value;
      }

   }

   // Override IsDefaultAttribute to return the correct response.
   virtual bool IsDefaultAttribute() override
   {
      return thePet == Animal::Dog;
   }
};

public ref class TestClass
{
public:

   // Use the default constructor.

   [AnimalType]
   void Method1(){}
};

int main()
{
   // Get the class type to access its metadata.
   Type^ clsType = TestClass::typeid;

   // Get type information for the method.
   MethodInfo^ mInfo = clsType->GetMethod( "Method1" );

   // Get the AnimalType attribute for the method.
   AnimalTypeAttribute^ atAttr = dynamic_cast<AnimalTypeAttribute^>(Attribute::GetCustomAttribute( mInfo, AnimalTypeAttribute::typeid ));

   // Check to see if the default attribute is applied.
   Console::WriteLine( "The attribute {0} for method {1} in class {2}", atAttr->Pet, mInfo->Name, clsType->Name );
   Console::WriteLine( "{0} the default for the AnimalType attribute.", atAttr->IsDefaultAttribute() ? (String^)"is" : "is not" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::.IsDefined 方法

Attribute
.
.
::
.
IsDefined 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Attribute 类

确定是否将指定类型的任意自定义特性应用于程序集、模块、类型成员或方法参数。

名称 说明
页首

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute ..::.IsDefined 方法 (Assembly, Type)

Attribute
.
.
::
.
IsDefined 方法 (Assembly, Type)
Attribute 类

确定是否将任意自定义特性应用于程序集。参数指定程序集和要搜索的自定义特性的类型。 确定是否将任意自定义特性应用于程序集。参数指定程序集和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDefined ( _
    element As Assembly, _
    attributeType As Type _
) As Boolean
public static bool IsDefined(
    Assembly element,
    Type attributeType
)
public:
static bool IsDefined(
    Assembly^ element,
    Type^ attributeType
)
static member IsDefined :
        element:Assembly *
        attributeType:Type -> bool

参数

element
类型： System.Reflection Assembly
一个从 Assembly 类派生的对象，该类描述可重用模块集合。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型： System Boolean
如果类型 attributeType 的某个自定义特性应用于 element，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
说明 说明

从 .NET Framework 2.0 版开始，如果程序集具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果程序集具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果程序集具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果程序集具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 IsDefined 的用法，采用 Assembly 作为参数。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

' Add an AssemblyDescription attribute.
<Assembly: AssemblyDescription("A sample description")>

Module DemoModule
    Sub Main()
        ' Get the assembly for this module.
        Dim assy As System.Reflection.Assembly = GetType(DemoModule).Assembly
        ' Store the assembly name.
        Dim assyName As String = assy.GetName().Name
        ' See if the AssemblyDescription attribute is defined.
        If Attribute.IsDefined(assy, GetType(AssemblyDescriptionAttribute)) _
            Then
            ' Affirm that the attribute is defined. Assume the filename of
            ' this code example is "IsDef1VB".
            Console.WriteLine("The AssemblyDescription attribute is " & _
                "defined for assembly {0}.", assyName)
            ' Get the description attribute itself.
            Dim attr As Attribute = Attribute.GetCustomAttribute( _
                assy, GetType(AssemblyDescriptionAttribute))
            ' Display the description.
            If Not attr Is Nothing And _
                TypeOf attr Is AssemblyDescriptionAttribute Then
                Dim adAttr As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("The description is " & _
                    Chr(34) & "{0}" & Chr(34) & ".", adAttr.Description)
            Else
                Console.WriteLine("The description could not be retrieved.")
            End If
        Else
            Console.WriteLine("The AssemblyDescription attribute is not " & _
                              "defined for assembly {0}.", assyName)
        End If
    End Sub
End Module

' Output:
' The AssemblyDescription attribute is defined for assembly IsDef1VB.
' The description is "A sample description".

using System;
using System.Reflection;

// Add an AssemblyDescription attribute
[assembly: AssemblyDescription("A sample description")]
namespace IsDef1CS
{
    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(DemoClass);
            // Get the assembly object.
            Assembly assy = clsType.Assembly;
            // Store the assembly's name.
            String assyName = assy.GetName().Name;
            // See if the Assembly Description is defined.
            bool isdef = Attribute.IsDefined(assy,
                typeof(AssemblyDescriptionAttribute));
            if (isdef)
            {
                // Affirm that the attribute is defined.
                Console.WriteLine("The AssemblyDescription attribute " +
                    "is defined for assembly {0}.", assyName);
                // Get the description attribute itself.
                AssemblyDescriptionAttribute adAttr =
                    (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
                    assy, typeof(AssemblyDescriptionAttribute));
                // Display the description.
                if (adAttr != null)
                    Console.WriteLine("The description is \"{0}\".",
                        adAttr.Description);
                else
                    Console.WriteLine("The description could not " +
                        "be retrieved.");
            }
            else
                Console.WriteLine("The AssemblyDescription attribute is not " +
                    "defined for assembly {0}.", assyName);
        }
    }
}

/*
 * Output:
 * The AssemblyDescription attribute is defined for assembly IsDef1CS.
 * The description is "A sample description".
 */

using namespace System;
using namespace System::Reflection;

// Add an AssemblyDescription attribute
[assembly:AssemblyDescription("A sample description")];
namespace IsDef1CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = DemoClass::typeid;

         // Get the assembly object.
         Assembly^ assy = clsType->Assembly;

         // Store the assembly's name.
         String^ assyName = assy->GetName()->Name;

         //Type assyType = assy.GetType();
         // See if the Assembly Description is defined.
         bool isdef = Attribute::IsDefined( assy, AssemblyDescriptionAttribute::typeid );
         if ( isdef )
         {

            // Affirm that the attribute is defined.
            Console::WriteLine( "The AssemblyDescription attribute "
            "is defined for assembly {0}.", assyName );

            // Get the description attribute itself.
            AssemblyDescriptionAttribute^ adAttr = dynamic_cast<AssemblyDescriptionAttribute^>(Attribute::GetCustomAttribute( assy, AssemblyDescriptionAttribute::typeid ));

            // Display the description.
            if ( adAttr != nullptr )
                        Console::WriteLine( "The description is \"{0}\".", adAttr->Description );
            else
                        Console::WriteLine( "The description could not "
            "be retrieved." );
         }
         else
                  Console::WriteLine( "The AssemblyDescription attribute is not "
         "defined for assembly {0}.", assyName );
      }

   };

}

/*
 * Output:
 * The AssemblyDescription attributeis defined for assembly IsDef1CS.
 * The description is "A sample description".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
IsDefined 重载
System 命名空间


Attribute ..::.IsDefined 方法 (MemberInfo, Type)

Attribute
.
.
::
.
IsDefined 方法 (MemberInfo, Type)
Attribute 类

确定是否将任意自定义特性应用于类型成员。参数指定成员和要搜索的自定义特性的类型。 确定是否将任意自定义特性应用于类型成员。参数指定成员和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDefined ( _
    element As MemberInfo, _
    attributeType As Type _
) As Boolean
public static bool IsDefined(
    MemberInfo element,
    Type attributeType
)
public:
static bool IsDefined(
    MemberInfo^ element,
    Type^ attributeType
)
static member IsDefined :
        element:MemberInfo *
        attributeType:Type -> bool

参数

element
类型： System.Reflection MemberInfo
一个从 MemberInfo 类派生的对象，该类描述类的构造函数、事件、字段、方法、类型或属性成员。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型： System Boolean
如果类型 attributeType 的某个自定义特性应用于 element，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
NotSupportedException | element 不是构造函数、方法、属性、事件、类型或字段。

在 element 的祖先中搜索自定义特性。

说明 说明

从 .NET Framework 2.0 版开始，如果某个类型、方法或构造函数具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果某个类型、方法或构造函数具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果某个类型、方法或构造函数具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果某个类型、方法或构造函数具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 IsDefined 的用法，采用 MemberInfo 作为参数。

Imports System
Imports System.Reflection

Module DemoModule

    Public Class TestClass
        ' Assign the Obsolete attribute to a method.
        <Obsolete("This method is obsolete. Use Method2() instead.")> _
        Public Sub Method1()
        End Sub

        Public Sub Method2()
        End Sub
    End Class

    Sub Main()
        ' Get the class type to access its metadata.
        Dim clsType As Type = GetType(TestClass)
        ' Get the MethodInfo object for Method1.
        Dim mInfo As MethodInfo = clsType.GetMethod("Method1")
        ' See if the Obsolete attribute is defined for this method.
        Dim isDef As Boolean = Attribute.IsDefined(mInfo, _
            GetType(ObsoleteAttribute))
        Dim strDef As String
        If isDef = True Then
            strDef = "is"
        Else
            strDef = "is not"
        End If
        ' Display the results.
        Console.WriteLine("The Obsolete attribute {0} defined for " & _
            "method {1} of class {2}.", strDef, mInfo.Name, clsType.Name)
        ' If it's defined, display the attribute's message.
        If isDef = True Then
            Dim attr As Attribute = Attribute.GetCustomAttribute(mInfo, _
                GetType(ObsoleteAttribute))
            If Not attr Is Nothing And TypeOf attr Is ObsoleteAttribute Then
                Dim obsAttr As ObsoleteAttribute = _
                    CType(attr, ObsoleteAttribute)
                Console.WriteLine("The message is: ""{0}""", obsAttr.Message)
            Else
                Console.WriteLine("The message could not be retrieved.")
            End If
        End If
    End Sub
End Module

' Output:
' The Obsolete attribute is defined for method Method1 of class TestClass.
' The message is: "This method is obsolete. Use Method2() instead."

using System;
using System.Reflection;

namespace IsDef4CS
{
    public class TestClass
    {
        // Assign the Obsolete attribute to a method.
        [Obsolete("This method is obsolete. Use Method2 instead.")]
        public void Method1()
        {}
        public void Method2()
        {}
    }

    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(TestClass);
            // Get the MethodInfo object for Method1.
            MethodInfo mInfo = clsType.GetMethod("Method1");
            // See if the Obsolete attribute is defined for this method.
            bool isDef = Attribute.IsDefined(mInfo, typeof(ObsoleteAttribute));
            // Display the result.
            Console.WriteLine("The Obsolete Attribute {0} defined for {1} of class {2}.",
                isDef ? "is" : "is not", mInfo.Name, clsType.Name);
            // If it's defined, display the attribute's message.
            if (isDef)
            {
                ObsoleteAttribute obsAttr =
                                 (ObsoleteAttribute)Attribute.GetCustomAttribute(
                                                    mInfo, typeof(ObsoleteAttribute));
                if (obsAttr != null)
                    Console.WriteLine("The message is: \"{0}\".",
                        obsAttr.Message);
                else
                    Console.WriteLine("The message could not be retrieved.");
            }
        }
    }
}

/*
 * Output:
 * The Obsolete Attribute is defined for Method1 of class TestClass.
 * The message is: "This method is obsolete. Use Method2 instead.".
 */

using namespace System;
using namespace System::Reflection;

namespace IsDef4CS
{
   public ref class TestClass
   {
   public:

      // Assign the Obsolete attribute to a method.

      [Obsolete("This method is obsolete. Use Method2 instead.")]
      void Method1(){}

      void Method2(){}

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = TestClass::typeid;

         // Get the MethodInfo object for Method1.
         MethodInfo^ mInfo = clsType->GetMethod( "Method1" );

         // See if the Obsolete attribute is defined for this method.
         bool isDef = Attribute::IsDefined( mInfo, ObsoleteAttribute::typeid );

         // Display the result.
         Console::WriteLine( "The Obsolete Attribute {0} defined for {1} of class {2}.", isDef ? (String^)"is" : "is not", mInfo->Name, clsType->Name );

         // If it's defined, display the attribute's message.
         if ( isDef )
         {
            ObsoleteAttribute^ obsAttr = dynamic_cast<ObsoleteAttribute^>(Attribute::GetCustomAttribute( mInfo, ObsoleteAttribute::typeid ));
            if ( obsAttr != nullptr )
                        Console::WriteLine( "The message is: \"{0}\".", obsAttr->Message );
            else
                        Console::WriteLine( "The message could not be retrieved." );
         }
      }

   };

}

/*
 * Output:
 * The Obsolete Attribute is defined for Method1 of class TestClass.
 * The message is: "This method is obsolete. Use Method2 instead.".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
IsDefined 重载
System 命名空间


Attribute ..::.IsDefined 方法 (Module, Type)

Attribute
.
.
::
.
IsDefined 方法 (Module, Type)
Attribute 类

确定是否将指定类型的任何自定义特性应用于模块。参数指定模块和要搜索的自定义特性的类型。 确定是否将指定类型的任何自定义特性应用于模块。参数指定模块和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDefined ( _
    element As Module, _
    attributeType As Type _
) As Boolean
public static bool IsDefined(
    Module element,
    Type attributeType
)
public:
static bool IsDefined(
    Module^ element,
    Type^ attributeType
)
static member IsDefined :
        element:Module *
        attributeType:Type -> bool

参数

element
类型： System.Reflection Module
一个从 Module 类派生的对象，该类描述可移植的可执行文件。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型： System Boolean
如果类型 attributeType 的某个自定义特性应用于 element，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。

不在 element 的祖先中搜索自定义特性。

下面的代码示例演示 IsDefined 的用法，采用 Module 作为参数。

Imports System
Imports System.Reflection
Imports System.Diagnostics

' Add the Debuggable attribute to the module.
<Module: Debuggable(True, False)>

Module DemoModule
    Sub Main()
        ' Get the module type information to access its metadata.
        Dim modType As Type = GetType(DemoModule)
        ' See if the Debuggable attribute is defined.
        Dim isDef As Boolean = Attribute.IsDefined(modType.Module, _
                               GetType(DebuggableAttribute))
        Dim strDef As String
        If isDef = True Then
            strDef = "is"
        Else
            strDef = "is not"
        End If
        ' Display the result
        Console.WriteLine("The debuggable attribute {0} defined for " & _
                          "module {1}.", strDef, modType.Name)
        ' If the attribute is defined, display the JIT settings.
        If isDef = True Then
            ' Retrieve the attribute itself.
            Dim attr As Attribute = _
                Attribute.GetCustomAttribute(modType.Module, _
                GetType(DebuggableAttribute))
            If Not attr Is Nothing And TypeOf attr Is DebuggableAttribute Then
                Dim dbgAttr As DebuggableAttribute = _
                    CType(attr, DebuggableAttribute)
                Console.WriteLine("JITTrackingEnabled is {0}.", _
                    dbgAttr.IsJITTrackingEnabled.ToString())
                Console.WriteLine("JITOptimizerDisabled is {0}.", _
                    dbgAttr.IsJITOptimizerDisabled.ToString())
            Else
                Console.WriteLine("The Debuggable attribute could " & _
                                  "not be retrieved.")
            End If
        End If
    End Sub
End Module

' Output:
' The debuggable attribute is defined for module DemoModule.
' JITTrackingEnabled is True.
' JITOptimizerDisabled is False.

using System;
using System.Diagnostics;

// Add the Debuggable attribute to the module.
[module:Debuggable(true, false)]
namespace IsDef2CS
{
    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(DemoClass);
            // See if the Debuggable attribute is defined for this module.
            bool isDef = Attribute.IsDefined(clsType.Module,
                typeof(DebuggableAttribute));
            // Display the result.
            Console.WriteLine("The Debuggable attribute {0} " +
                "defined for Module {1}.",
                isDef ? "is" : "is not",
                clsType.Module.Name);
            // If the attribute is defined, display the JIT settings.
            if (isDef)
            {
                // Retrieve the attribute itself.
                DebuggableAttribute dbgAttr = (DebuggableAttribute)
                    Attribute.GetCustomAttribute(clsType.Module,
                    typeof(DebuggableAttribute));
                if (dbgAttr != null)
                {
                    Console.WriteLine("JITTrackingEnabled is {0}.",
                        dbgAttr.IsJITTrackingEnabled);
                    Console.WriteLine("JITOptimizerDisabled is {0}.",
                        dbgAttr.IsJITOptimizerDisabled);
                }
                else
                    Console.WriteLine("The Debuggable attribute " +
                        "could not be retrieved.");
            }
        }
    }
}

/*
 * Output:
 * The Debuggable attribute is defined for Module IsDef2CS.exe.
 * JITTrackingEnabled is True.
 * JITOptimizerDisabled is False.
 */

using namespace System;
using namespace System::Diagnostics;

// Add the Debuggable attribute to the module.
[module:Debuggable(true,false)];
namespace IsDef2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = DemoClass::typeid;

         // See if the Debuggable attribute is defined for this module.
         bool isDef = Attribute::IsDefined( clsType->Module, DebuggableAttribute::typeid );

         // Display the result.
         Console::WriteLine( "The Debuggable attribute {0} "
         "defined for Module {1}.", isDef ? (String^)"is" : "is not", clsType->Module->Name );

         // If the attribute is defined, display the JIT settings.
         if ( isDef )
         {

            // Retrieve the attribute itself.
            DebuggableAttribute^ dbgAttr = dynamic_cast<DebuggableAttribute^>(Attribute::GetCustomAttribute( clsType->Module, DebuggableAttribute::typeid ));
            if ( dbgAttr != nullptr )
            {
               Console::WriteLine( "JITTrackingEnabled is {0}.", dbgAttr->IsJITTrackingEnabled );
               Console::WriteLine( "JITOptimizerDisabled is {0}.", dbgAttr->IsJITOptimizerDisabled );
            }
            else
                        Console::WriteLine( "The Debuggable attribute "
            "could not be retrieved." );
         }
      }

   };

}

/*
 * Output:
 * The Debuggable attribute is defined for Module IsDef2CS.exe.
 * JITTrackingEnabled is True.
 * JITOptimizerDisabled is False.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
IsDefined 重载
System 命名空间


Attribute ..::.IsDefined 方法 (ParameterInfo, Type)

Attribute
.
.
::
.
IsDefined 方法 (ParameterInfo, Type)
Attribute 类

确定是否将任意自定义特性应用于方法参数。参数指定方法参数和要搜索的自定义特性的类型。 确定是否将任意自定义特性应用于方法参数。参数指定方法参数和要搜索的自定义特性的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDefined ( _
    element As ParameterInfo, _
    attributeType As Type _
) As Boolean
public static bool IsDefined(
    ParameterInfo element,
    Type attributeType
)
public:
static bool IsDefined(
    ParameterInfo^ element,
    Type^ attributeType
)
static member IsDefined :
        element:ParameterInfo *
        attributeType:Type -> bool

参数

element
类型： System.Reflection ParameterInfo
一个从 ParameterInfo 类派生的对象，该类描述类成员的参数。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。

返回值

类型： System Boolean
如果类型 attributeType 的某个自定义特性应用于 element，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。

在 element 的祖先中搜索自定义特性。

下面的代码示例演示 IsDefined 的用法，采用 ParameterInfo 作为参数。

Imports System
Imports System.Reflection

Module DemoModule
    Public Class TestClass
        ' Assign a ParamArray attribute to the parameter using the keyword.
        Public Sub Method1(ByVal ParamArray args As String())
        End Sub
    End Class

    Sub Main()
        ' Get the class type to access its metadata.
        Dim clsType As Type = GetType(TestClass)
        ' Get the MethodInfo object for Method1.
        Dim mInfo As MethodInfo = clsType.GetMethod("Method1")
        ' Get the ParameterInfo array for the method parameters.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        If Not pInfo(0) Is Nothing Then
            ' See if the ParamArray attribute is defined.
            Dim isDef As Boolean = Attribute.IsDefined(pInfo(0), _
                                   GetType(ParamArrayAttribute))
            Dim strDef As String
            If isDef = True Then
                strDef = "is"
            Else
                strDef = "is not"
            End If
            ' Display the result.
            Console.WriteLine("The ParamArray attribute {0} defined " & _
                              "for parameter {1} of method {2}.", _
                              strDef, pInfo(0).Name, mInfo.Name)
        Else
            Console.WriteLine("Could not retrieve parameter information " & _
                              "for method {0}.", mInfo.Name)
        End If
    End Sub
End Module

' Output:
' The ParamArray attribute is defined for parameter args of method Method1.

using System;
using System.Reflection;

namespace IsDef5CS
{
    public class TestClass
    {
        // Assign a ParamArray attribute to the parameter using the keyword.
        public void Method1(params String[] args)
        {}
    }

    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(TestClass);
            // Get the MethodInfo object for Method1.
            MethodInfo mInfo = clsType.GetMethod("Method1");
            // Get the ParameterInfo array for the method parameters.
            ParameterInfo[] pInfo = mInfo.GetParameters();
            if (pInfo != null)
            {
                // See if the ParamArray attribute is defined.
                bool isDef = Attribute.IsDefined(pInfo[0],
                                                 typeof(ParamArrayAttribute));
                // Display the result.
                Console.WriteLine("The ParamArray attribute {0} defined for " +
                                  "parameter {1} of method {2}.",
                                  isDef ? "is" : "is not",
                                  pInfo[0].Name,
                                  mInfo.Name);
            }
            else
                Console.WriteLine("The parameters information could " +
                            "not be retrieved for method {0}.", mInfo.Name);
        }
    }
}

/*
 * Output:
 * The ParamArray attribute is defined for parameter args of method Method1.
 */

using namespace System;
using namespace System::Reflection;

namespace IsDef5CS
{
   public ref class TestClass
   {
   public:

      // Assign a ParamArray attribute to the parameter using the keyword.
      void Method1(... array<String^>^args ){}

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = TestClass::typeid;

         // Get the MethodInfo object for Method1.
         MethodInfo^ mInfo = clsType->GetMethod( "Method1" );

         // Get the ParameterInfo array for the method parameters.
         array<ParameterInfo^>^pInfo = mInfo->GetParameters();
         if ( pInfo != nullptr )
         {

            // See if the ParamArray attribute is defined.
            bool isDef = Attribute::IsDefined( pInfo[ 0 ], ParamArrayAttribute::typeid );

            // Display the result.
            Console::WriteLine( "The ParamArray attribute {0} defined for "
            "parameter {1} of method {2}.", isDef ? (String^)"is" : "is not", pInfo[ 0 ]->Name, mInfo->Name );
         }
         else
                  Console::WriteLine( "The parameters information could "
         "not be retrieved for method {0}.", mInfo->Name );
      }

   };

}

/*
 * Output:
 * The ParamArray attribute is defined for parameter args of method Method1.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
IsDefined 重载
System 命名空间


Attribute ..::.IsDefined 方法 (Assembly, Type, Boolean)

Attribute
.
.
::
.
IsDefined 方法 (Assembly, Type, Boolean)
Attribute 类

确定是否将任意自定义特性应用于程序集。参数指定程序集、要搜索的自定义特性的类型以及忽略的搜索选项。 确定是否将任意自定义特性应用于程序集。参数指定程序集、要搜索的自定义特性的类型以及忽略的搜索选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDefined ( _
    element As Assembly, _
    attributeType As Type, _
    inherit As Boolean _
) As Boolean
public static bool IsDefined(
    Assembly element,
    Type attributeType,
    bool inherit
)
public:
static bool IsDefined(
    Assembly^ element,
    Type^ attributeType,
    bool inherit
)
static member IsDefined :
        element:Assembly *
        attributeType:Type *
        inherit:bool -> bool

参数

element
类型： System.Reflection Assembly
一个从 Assembly 类派生的对象，该类描述可重用模块集合。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
此参数被忽略，并且不会影响此方法的操作。

返回值

类型： System Boolean
如果类型 attributeType 的某个自定义特性应用于 element，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
说明 说明

从 .NET Framework 2.0 版开始，如果程序集具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果程序集具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果程序集具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果程序集具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 IsDefined 的用法，采用 Assembly 作为参数。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

' Add an AssemblyDescription attribute.
<Assembly: AssemblyDescription("A sample description")>

Module DemoModule
    Sub Main()
        ' Get the assembly for this module.
        Dim assy As System.Reflection.Assembly = GetType(DemoModule).Assembly
        ' Store the assembly name.
        Dim assyName As String = assy.GetName().Name
        ' See if the AssemblyDescription attribute is defined.
        If Attribute.IsDefined(assy, GetType(AssemblyDescriptionAttribute)) _
            Then
            ' Affirm that the attribute is defined. Assume the filename of
            ' this code example is "IsDef1VB".
            Console.WriteLine("The AssemblyDescription attribute is " & _
                "defined for assembly {0}.", assyName)
            ' Get the description attribute itself.
            Dim attr As Attribute = Attribute.GetCustomAttribute( _
                assy, GetType(AssemblyDescriptionAttribute))
            ' Display the description.
            If Not attr Is Nothing And _
                TypeOf attr Is AssemblyDescriptionAttribute Then
                Dim adAttr As AssemblyDescriptionAttribute = _
                    CType(attr, AssemblyDescriptionAttribute)
                Console.WriteLine("The description is " & _
                    Chr(34) & "{0}" & Chr(34) & ".", adAttr.Description)
            Else
                Console.WriteLine("The description could not be retrieved.")
            End If
        Else
            Console.WriteLine("The AssemblyDescription attribute is not " & _
                              "defined for assembly {0}.", assyName)
        End If
    End Sub
End Module

' Output:
' The AssemblyDescription attribute is defined for assembly IsDef1VB.
' The description is "A sample description".

using System;
using System.Reflection;

// Add an AssemblyDescription attribute
[assembly: AssemblyDescription("A sample description")]
namespace IsDef1CS
{
    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(DemoClass);
            // Get the assembly object.
            Assembly assy = clsType.Assembly;
            // Store the assembly's name.
            String assyName = assy.GetName().Name;
            // See if the Assembly Description is defined.
            bool isdef = Attribute.IsDefined(assy,
                typeof(AssemblyDescriptionAttribute));
            if (isdef)
            {
                // Affirm that the attribute is defined.
                Console.WriteLine("The AssemblyDescription attribute " +
                    "is defined for assembly {0}.", assyName);
                // Get the description attribute itself.
                AssemblyDescriptionAttribute adAttr =
                    (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
                    assy, typeof(AssemblyDescriptionAttribute));
                // Display the description.
                if (adAttr != null)
                    Console.WriteLine("The description is \"{0}\".",
                        adAttr.Description);
                else
                    Console.WriteLine("The description could not " +
                        "be retrieved.");
            }
            else
                Console.WriteLine("The AssemblyDescription attribute is not " +
                    "defined for assembly {0}.", assyName);
        }
    }
}

/*
 * Output:
 * The AssemblyDescription attribute is defined for assembly IsDef1CS.
 * The description is "A sample description".
 */

using namespace System;
using namespace System::Reflection;

// Add an AssemblyDescription attribute
[assembly:AssemblyDescription("A sample description")];
namespace IsDef1CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = DemoClass::typeid;

         // Get the assembly object.
         Assembly^ assy = clsType->Assembly;

         // Store the assembly's name.
         String^ assyName = assy->GetName()->Name;

         //Type assyType = assy.GetType();
         // See if the Assembly Description is defined.
         bool isdef = Attribute::IsDefined( assy, AssemblyDescriptionAttribute::typeid );
         if ( isdef )
         {

            // Affirm that the attribute is defined.
            Console::WriteLine( "The AssemblyDescription attribute "
            "is defined for assembly {0}.", assyName );

            // Get the description attribute itself.
            AssemblyDescriptionAttribute^ adAttr = dynamic_cast<AssemblyDescriptionAttribute^>(Attribute::GetCustomAttribute( assy, AssemblyDescriptionAttribute::typeid ));

            // Display the description.
            if ( adAttr != nullptr )
                        Console::WriteLine( "The description is \"{0}\".", adAttr->Description );
            else
                        Console::WriteLine( "The description could not "
            "be retrieved." );
         }
         else
                  Console::WriteLine( "The AssemblyDescription attribute is not "
         "defined for assembly {0}.", assyName );
      }

   };

}

/*
 * Output:
 * The AssemblyDescription attributeis defined for assembly IsDef1CS.
 * The description is "A sample description".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
IsDefined 重载
System 命名空间


Attribute ..::.IsDefined 方法 (MemberInfo, Type, Boolean)

Attribute
.
.
::
.
IsDefined 方法 (MemberInfo, Type, Boolean)
Attribute 类

确定是否将任意自定义特性应用于类型成员。参数指定成员、要搜索的自定义特性的类型以及是否搜索成员的祖先。 确定是否将任意自定义特性应用于类型成员。参数指定成员、要搜索的自定义特性的类型以及是否搜索成员的祖先。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDefined ( _
    element As MemberInfo, _
    attributeType As Type, _
    inherit As Boolean _
) As Boolean
public static bool IsDefined(
    MemberInfo element,
    Type attributeType,
    bool inherit
)
public:
static bool IsDefined(
    MemberInfo^ element,
    Type^ attributeType,
    bool inherit
)
static member IsDefined :
        element:MemberInfo *
        attributeType:Type *
        inherit:bool -> bool

参数

element
类型： System.Reflection MemberInfo
一个从 MemberInfo 类派生的对象，该类描述类的构造函数、事件、字段、方法、类型或属性成员。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
如果为 true，则指定还在 element 的祖先中搜索自定义特性。

返回值

类型： System Boolean
如果类型 attributeType 的某个自定义特性应用于 element，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
NotSupportedException | element 不是构造函数、方法、属性、事件、类型或字段。
说明 说明

从 .NET Framework 2.0 版开始，如果某个类型、方法或构造函数具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果某个类型、方法或构造函数具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果某个类型、方法或构造函数具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。 从 .NET Framework 2.0 版开始，如果某个类型、方法或构造函数具有以新元数据格式存储的安全特性，则此方法将返回 true。用 2.0 版或更高版本编译的程序集使用新格式。动态程序集和用 .NET Framework 的早期版本编译的程序集使用旧的 XML 格式。请参见Emitting Declarative Security Attributes。

下面的代码示例演示 IsDefined 的用法，采用 MemberInfo 作为参数。

Imports System
Imports System.Reflection

Module DemoModule

    Public Class TestClass
        ' Assign the Obsolete attribute to a method.
        <Obsolete("This method is obsolete. Use Method2() instead.")> _
        Public Sub Method1()
        End Sub

        Public Sub Method2()
        End Sub
    End Class

    Sub Main()
        ' Get the class type to access its metadata.
        Dim clsType As Type = GetType(TestClass)
        ' Get the MethodInfo object for Method1.
        Dim mInfo As MethodInfo = clsType.GetMethod("Method1")
        ' See if the Obsolete attribute is defined for this method.
        Dim isDef As Boolean = Attribute.IsDefined(mInfo, _
            GetType(ObsoleteAttribute))
        Dim strDef As String
        If isDef = True Then
            strDef = "is"
        Else
            strDef = "is not"
        End If
        ' Display the results.
        Console.WriteLine("The Obsolete attribute {0} defined for " & _
            "method {1} of class {2}.", strDef, mInfo.Name, clsType.Name)
        ' If it's defined, display the attribute's message.
        If isDef = True Then
            Dim attr As Attribute = Attribute.GetCustomAttribute(mInfo, _
                GetType(ObsoleteAttribute))
            If Not attr Is Nothing And TypeOf attr Is ObsoleteAttribute Then
                Dim obsAttr As ObsoleteAttribute = _
                    CType(attr, ObsoleteAttribute)
                Console.WriteLine("The message is: ""{0}""", obsAttr.Message)
            Else
                Console.WriteLine("The message could not be retrieved.")
            End If
        End If
    End Sub
End Module

' Output:
' The Obsolete attribute is defined for method Method1 of class TestClass.
' The message is: "This method is obsolete. Use Method2() instead."

using System;
using System.Reflection;

namespace IsDef4CS
{
    public class TestClass
    {
        // Assign the Obsolete attribute to a method.
        [Obsolete("This method is obsolete. Use Method2 instead.")]
        public void Method1()
        {}
        public void Method2()
        {}
    }

    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(TestClass);
            // Get the MethodInfo object for Method1.
            MethodInfo mInfo = clsType.GetMethod("Method1");
            // See if the Obsolete attribute is defined for this method.
            bool isDef = Attribute.IsDefined(mInfo, typeof(ObsoleteAttribute));
            // Display the result.
            Console.WriteLine("The Obsolete Attribute {0} defined for {1} of class {2}.",
                isDef ? "is" : "is not", mInfo.Name, clsType.Name);
            // If it's defined, display the attribute's message.
            if (isDef)
            {
                ObsoleteAttribute obsAttr =
                                 (ObsoleteAttribute)Attribute.GetCustomAttribute(
                                                    mInfo, typeof(ObsoleteAttribute));
                if (obsAttr != null)
                    Console.WriteLine("The message is: \"{0}\".",
                        obsAttr.Message);
                else
                    Console.WriteLine("The message could not be retrieved.");
            }
        }
    }
}

/*
 * Output:
 * The Obsolete Attribute is defined for Method1 of class TestClass.
 * The message is: "This method is obsolete. Use Method2 instead.".
 */

using namespace System;
using namespace System::Reflection;

namespace IsDef4CS
{
   public ref class TestClass
   {
   public:

      // Assign the Obsolete attribute to a method.

      [Obsolete("This method is obsolete. Use Method2 instead.")]
      void Method1(){}

      void Method2(){}

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = TestClass::typeid;

         // Get the MethodInfo object for Method1.
         MethodInfo^ mInfo = clsType->GetMethod( "Method1" );

         // See if the Obsolete attribute is defined for this method.
         bool isDef = Attribute::IsDefined( mInfo, ObsoleteAttribute::typeid );

         // Display the result.
         Console::WriteLine( "The Obsolete Attribute {0} defined for {1} of class {2}.", isDef ? (String^)"is" : "is not", mInfo->Name, clsType->Name );

         // If it's defined, display the attribute's message.
         if ( isDef )
         {
            ObsoleteAttribute^ obsAttr = dynamic_cast<ObsoleteAttribute^>(Attribute::GetCustomAttribute( mInfo, ObsoleteAttribute::typeid ));
            if ( obsAttr != nullptr )
                        Console::WriteLine( "The message is: \"{0}\".", obsAttr->Message );
            else
                        Console::WriteLine( "The message could not be retrieved." );
         }
      }

   };

}

/*
 * Output:
 * The Obsolete Attribute is defined for Method1 of class TestClass.
 * The message is: "This method is obsolete. Use Method2 instead.".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
IsDefined 重载
System 命名空间


Attribute ..::.IsDefined 方法 (Module, Type, Boolean)

Attribute
.
.
::
.
IsDefined 方法 (Module, Type, Boolean)
Attribute 类

确定是否将任意自定义特性应用于模块。参数指定模块、要搜索的自定义特性的类型以及忽略的搜索选项。 确定是否将任意自定义特性应用于模块。参数指定模块、要搜索的自定义特性的类型以及忽略的搜索选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDefined ( _
    element As Module, _
    attributeType As Type, _
    inherit As Boolean _
) As Boolean
public static bool IsDefined(
    Module element,
    Type attributeType,
    bool inherit
)
public:
static bool IsDefined(
    Module^ element,
    Type^ attributeType,
    bool inherit
)
static member IsDefined :
        element:Module *
        attributeType:Type *
        inherit:bool -> bool

参数

element
类型： System.Reflection Module
一个从 Module 类派生的对象，该类描述可移植的可执行文件。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
此参数被忽略，并且不会影响此方法的操作。

返回值

类型： System Boolean
如果类型 attributeType 的某个自定义特性应用于 element，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。

此方法忽略 inherit 参数并且不在 element 的祖先中搜索自定义特性。

下面的代码示例演示 IsDefined 的用法，采用 Module 作为参数。

Imports System
Imports System.Reflection
Imports System.Diagnostics

' Add the Debuggable attribute to the module.
<Module: Debuggable(True, False)>

Module DemoModule
    Sub Main()
        ' Get the module type information to access its metadata.
        Dim modType As Type = GetType(DemoModule)
        ' See if the Debuggable attribute is defined.
        Dim isDef As Boolean = Attribute.IsDefined(modType.Module, _
                               GetType(DebuggableAttribute))
        Dim strDef As String
        If isDef = True Then
            strDef = "is"
        Else
            strDef = "is not"
        End If
        ' Display the result
        Console.WriteLine("The debuggable attribute {0} defined for " & _
                          "module {1}.", strDef, modType.Name)
        ' If the attribute is defined, display the JIT settings.
        If isDef = True Then
            ' Retrieve the attribute itself.
            Dim attr As Attribute = _
                Attribute.GetCustomAttribute(modType.Module, _
                GetType(DebuggableAttribute))
            If Not attr Is Nothing And TypeOf attr Is DebuggableAttribute Then
                Dim dbgAttr As DebuggableAttribute = _
                    CType(attr, DebuggableAttribute)
                Console.WriteLine("JITTrackingEnabled is {0}.", _
                    dbgAttr.IsJITTrackingEnabled.ToString())
                Console.WriteLine("JITOptimizerDisabled is {0}.", _
                    dbgAttr.IsJITOptimizerDisabled.ToString())
            Else
                Console.WriteLine("The Debuggable attribute could " & _
                                  "not be retrieved.")
            End If
        End If
    End Sub
End Module

' Output:
' The debuggable attribute is defined for module DemoModule.
' JITTrackingEnabled is True.
' JITOptimizerDisabled is False.

using System;
using System.Diagnostics;

// Add the Debuggable attribute to the module.
[module:Debuggable(true, false)]
namespace IsDef2CS
{
    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(DemoClass);
            // See if the Debuggable attribute is defined for this module.
            bool isDef = Attribute.IsDefined(clsType.Module,
                typeof(DebuggableAttribute));
            // Display the result.
            Console.WriteLine("The Debuggable attribute {0} " +
                "defined for Module {1}.",
                isDef ? "is" : "is not",
                clsType.Module.Name);
            // If the attribute is defined, display the JIT settings.
            if (isDef)
            {
                // Retrieve the attribute itself.
                DebuggableAttribute dbgAttr = (DebuggableAttribute)
                    Attribute.GetCustomAttribute(clsType.Module,
                    typeof(DebuggableAttribute));
                if (dbgAttr != null)
                {
                    Console.WriteLine("JITTrackingEnabled is {0}.",
                        dbgAttr.IsJITTrackingEnabled);
                    Console.WriteLine("JITOptimizerDisabled is {0}.",
                        dbgAttr.IsJITOptimizerDisabled);
                }
                else
                    Console.WriteLine("The Debuggable attribute " +
                        "could not be retrieved.");
            }
        }
    }
}

/*
 * Output:
 * The Debuggable attribute is defined for Module IsDef2CS.exe.
 * JITTrackingEnabled is True.
 * JITOptimizerDisabled is False.
 */

using namespace System;
using namespace System::Diagnostics;

// Add the Debuggable attribute to the module.
[module:Debuggable(true,false)];
namespace IsDef2CS
{
   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = DemoClass::typeid;

         // See if the Debuggable attribute is defined for this module.
         bool isDef = Attribute::IsDefined( clsType->Module, DebuggableAttribute::typeid );

         // Display the result.
         Console::WriteLine( "The Debuggable attribute {0} "
         "defined for Module {1}.", isDef ? (String^)"is" : "is not", clsType->Module->Name );

         // If the attribute is defined, display the JIT settings.
         if ( isDef )
         {

            // Retrieve the attribute itself.
            DebuggableAttribute^ dbgAttr = dynamic_cast<DebuggableAttribute^>(Attribute::GetCustomAttribute( clsType->Module, DebuggableAttribute::typeid ));
            if ( dbgAttr != nullptr )
            {
               Console::WriteLine( "JITTrackingEnabled is {0}.", dbgAttr->IsJITTrackingEnabled );
               Console::WriteLine( "JITOptimizerDisabled is {0}.", dbgAttr->IsJITOptimizerDisabled );
            }
            else
                        Console::WriteLine( "The Debuggable attribute "
            "could not be retrieved." );
         }
      }

   };

}

/*
 * Output:
 * The Debuggable attribute is defined for Module IsDef2CS.exe.
 * JITTrackingEnabled is True.
 * JITOptimizerDisabled is False.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
IsDefined 重载
System 命名空间


Attribute ..::.IsDefined 方法 (ParameterInfo, Type, Boolean)

Attribute
.
.
::
.
IsDefined 方法 (ParameterInfo, Type, Boolean)
Attribute 类

确定是否将任意自定义特性应用于方法参数。参数指定方法参数、要搜索的自定义特性的类型以及是否搜索方法参数的祖先。 确定是否将任意自定义特性应用于方法参数。参数指定方法参数、要搜索的自定义特性的类型以及是否搜索方法参数的祖先。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDefined ( _
    element As ParameterInfo, _
    attributeType As Type, _
    inherit As Boolean _
) As Boolean
public static bool IsDefined(
    ParameterInfo element,
    Type attributeType,
    bool inherit
)
public:
static bool IsDefined(
    ParameterInfo^ element,
    Type^ attributeType,
    bool inherit
)
static member IsDefined :
        element:ParameterInfo *
        attributeType:Type *
        inherit:bool -> bool

参数

element
类型： System.Reflection ParameterInfo
一个从 ParameterInfo 类派生的对象，该类描述类成员的参数。
attributeType
类型： System Type
要搜索的自定义特性的类型，即基类型。
inherit
类型： System Boolean
如果为 true，则指定还在 element 的祖先中搜索自定义特性。

返回值

类型： System Boolean
如果类型 attributeType 的某个自定义特性应用于 element，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | element 或 attributeType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | attributeType 不从 Attribute 派生。
ExecutionEngineException | element 不是方法、构造函数或类型。

下面的代码示例演示 IsDefined 的用法，采用 ParameterInfo 作为参数。

Imports System
Imports System.Reflection

Module DemoModule
    Public Class TestClass
        ' Assign a ParamArray attribute to the parameter using the keyword.
        Public Sub Method1(ByVal ParamArray args As String())
        End Sub
    End Class

    Sub Main()
        ' Get the class type to access its metadata.
        Dim clsType As Type = GetType(TestClass)
        ' Get the MethodInfo object for Method1.
        Dim mInfo As MethodInfo = clsType.GetMethod("Method1")
        ' Get the ParameterInfo array for the method parameters.
        Dim pInfo() As ParameterInfo = mInfo.GetParameters()
        If Not pInfo(0) Is Nothing Then
            ' See if the ParamArray attribute is defined.
            Dim isDef As Boolean = Attribute.IsDefined(pInfo(0), _
                                   GetType(ParamArrayAttribute))
            Dim strDef As String
            If isDef = True Then
                strDef = "is"
            Else
                strDef = "is not"
            End If
            ' Display the result.
            Console.WriteLine("The ParamArray attribute {0} defined " & _
                              "for parameter {1} of method {2}.", _
                              strDef, pInfo(0).Name, mInfo.Name)
        Else
            Console.WriteLine("Could not retrieve parameter information " & _
                              "for method {0}.", mInfo.Name)
        End If
    End Sub
End Module

' Output:
' The ParamArray attribute is defined for parameter args of method Method1.

using System;
using System.Reflection;

namespace IsDef5CS
{
    public class TestClass
    {
        // Assign a ParamArray attribute to the parameter using the keyword.
        public void Method1(params String[] args)
        {}
    }

    public class DemoClass
    {
        static void Main(string[] args)
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(TestClass);
            // Get the MethodInfo object for Method1.
            MethodInfo mInfo = clsType.GetMethod("Method1");
            // Get the ParameterInfo array for the method parameters.
            ParameterInfo[] pInfo = mInfo.GetParameters();
            if (pInfo != null)
            {
                // See if the ParamArray attribute is defined.
                bool isDef = Attribute.IsDefined(pInfo[0],
                                                 typeof(ParamArrayAttribute));
                // Display the result.
                Console.WriteLine("The ParamArray attribute {0} defined for " +
                                  "parameter {1} of method {2}.",
                                  isDef ? "is" : "is not",
                                  pInfo[0].Name,
                                  mInfo.Name);
            }
            else
                Console.WriteLine("The parameters information could " +
                            "not be retrieved for method {0}.", mInfo.Name);
        }
    }
}

/*
 * Output:
 * The ParamArray attribute is defined for parameter args of method Method1.
 */

using namespace System;
using namespace System::Reflection;

namespace IsDef5CS
{
   public ref class TestClass
   {
   public:

      // Assign a ParamArray attribute to the parameter using the keyword.
      void Method1(... array<String^>^args ){}

   };

   ref class DemoClass
   {
   public:
      static void Main()
      {

         // Get the class type to access its metadata.
         Type^ clsType = TestClass::typeid;

         // Get the MethodInfo object for Method1.
         MethodInfo^ mInfo = clsType->GetMethod( "Method1" );

         // Get the ParameterInfo array for the method parameters.
         array<ParameterInfo^>^pInfo = mInfo->GetParameters();
         if ( pInfo != nullptr )
         {

            // See if the ParamArray attribute is defined.
            bool isDef = Attribute::IsDefined( pInfo[ 0 ], ParamArrayAttribute::typeid );

            // Display the result.
            Console::WriteLine( "The ParamArray attribute {0} defined for "
            "parameter {1} of method {2}.", isDef ? (String^)"is" : "is not", pInfo[ 0 ]->Name, mInfo->Name );
         }
         else
                  Console::WriteLine( "The parameters information could "
         "not be retrieved for method {0}.", mInfo->Name );
      }

   };

}

/*
 * Output:
 * The ParamArray attribute is defined for parameter args of method Method1.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
IsDefined 重载
System 命名空间


Attribute ..::.Match 方法

Attribute
.
.
::
.
Match 方法
Attribute 类

当在派生类中重写时，返回一个指示此实例是否等于指定对象的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Match ( _
    obj As Object _
) As Boolean
public virtual bool Match(
    Object obj
)
public:
virtual bool Match(
    Object^ obj
)
abstract Match :
        obj:Object -> bool
override Match :
        obj:Object -> bool

参数

obj
类型： System Object
与 Attribute 的此实例进行比较的 Object。

返回值

类型： System Boolean
如果该实例等于 obj，则为 true；否则，为 false。

此方法确定两个 Attribute 是否相等。其默认实现与执行值引用比较的 Equals 相同。重写此方法以实现对由本身有意义的组件组成的特性值（如标志或位域）的支持。 此方法确定两个 Attribute 是否相等。其默认实现与执行值引用比较的 Equals 相同。重写此方法以实现对由本身有意义的组件组成的特性值（如标志或位域）的支持。 此方法确定两个 Attribute 是否相等。其默认实现与执行值引用比较的 Equals 相同。重写此方法以实现对由本身有意义的组件组成的特性值（如标志或位域）的支持。

例如，请考虑一个值为被分成标志位域的二进制字段的特性。该特性的两个实例的标志集一个共有的，而所有其他标志都不同。Equals 方法无法确定这两个实例是否具有相同的标志集，但 Match 方法可以确定。 例如，请考虑一个值为被分成标志位域的二进制字段的特性。该特性的两个实例的标志集一个共有的，而所有其他标志都不同。Equals 方法无法确定这两个实例是否具有相同的标志集，但 Match 方法可以确定。 例如，请考虑一个值为被分成标志位域的二进制字段的特性。该特性的两个实例的标志集一个共有的，而所有其他标志都不同。Equals 方法无法确定这两个实例是否具有相同的标志集，但 Match 方法可以确定。

下面的代码示例演示在 Attribute 上下文中 Match 的用法。

Imports System
Imports System.Reflection

Module DemoModule

    ' A custom attribute to allow 2 authors per method.
    <AttributeUsage(AttributeTargets.Method)> _
    Public Class AuthorsAttribute
        Inherits Attribute

        Public Sub New(ByVal name1 As String, ByVal name2 As String)
            myAuthorName1 = name1
            myAuthorName2 = name2
        End Sub

        Protected myAuthorName1 As String
        Protected myAuthorName2 As String

        Public Property AuthorName1() As String
            Get
                Return myAuthorName1
            End Get
            Set(ByVal Value As String)
                myAuthorName1 = AuthorName1
            End Set
        End Property

        Public Property AuthorName2() As String
            Get
                Return myAuthorName2
            End Get
            Set(ByVal Value As String)
                myAuthorName2 = AuthorName2
            End Set
        End Property

        ' Use the hash code of the string objects and xor them together.
        Public Overrides Function GetHashCode() As Integer
            Return myAuthorName1.GetHashCode() Xor myAuthorName2.GetHashCode()
        End Function

        ' Determine if the object is a match to this one.
        Public Overrides Function Match(ByVal obj As Object) As Boolean
            ' Obviously a match.
            If obj Is Me Then
                Return True
            End If

            ' Obviously we're not nothing, so no.
            If obj Is Nothing Then
                Return False
            End If

            If TypeOf obj Is AuthorsAttribute Then
                ' Combine the hash codes and see if they're unchanged.
                Dim authObj As AuthorsAttribute = CType(obj, AuthorsAttribute)
                Dim firstHash As Integer = authObj.GetHashCode() And GetHashCode()
                If firstHash = GetHashCode() Then
                    Return True
                Else
                    Return False
                End If
            Else
                Return False
            End If
        End Function

    End Class

    ' Add some authors to methods of a class.
    Public Class TestClass1
        <Authors("William Shakespeare", "Herman Melville")> _
        Public Sub Method1()
        End Sub

        <Authors("Leo Tolstoy", "John Milton")> _
        Public Sub Method2()
        End Sub
    End Class

    ' Add authors to a second class's methods.
    Public Class TestClass2
        <Authors("William Shakespeare", "Herman Melville")> _
        Public Sub Method1()
        End Sub

        <Authors("Leo Tolstoy", "John Milton")> _
        Public Sub Method2()
        End Sub

        <Authors("Francis Bacon", "Miguel Cervantes")> _
        Public Sub Method3()
        End Sub
    End Class

    Sub Main()
        ' Get the type for both classes to access their metadata.
        Dim clsType1 As Type = GetType(TestClass1)
        Dim clsType2 As Type = GetType(TestClass2)

        Dim mInfo1 As MethodInfo
        ' Iterate through each method of the first class.
        For Each mInfo1 In clsType1.GetMethods()
            ' Check each method for the Authors attribute.
            Dim attr1 As Attribute = Attribute.GetCustomAttribute(mInfo1, _
                GetType(AuthorsAttribute))
            If Not attr1 Is Nothing And TypeOf attr1 Is AuthorsAttribute Then
                Dim authAttr1 As AuthorsAttribute = _
                    CType(attr1, AuthorsAttribute)
                ' Display the authors.
                Console.WriteLine("Method {0} was authored by {1} and {2}.", _
                                mInfo1.Name, authAttr1.AuthorName1, _
                                authAttr1.AuthorName2)
                Dim mInfo2 As MethodInfo
                ' Iterate through each method of the second class.
                For Each mInfo2 In clsType2.GetMethods()
                    ' Check each method for the Authors attribute.
                    Dim attr2 As Attribute = Attribute.GetCustomAttribute( _
                        mInfo2, GetType(AuthorsAttribute))
                    If Not attr2 Is Nothing And _
                        TypeOf attr2 Is AuthorsAttribute Then
                        Dim authAttr2 As AuthorsAttribute = _
                            CType(attr2, AuthorsAttribute)
                        ' Compare with the authors in the first class.
                        If authAttr2.Match(authAttr1) = True Then
                            Console.WriteLine("Method {0} in class {1} was " + _
                                        "also authored by the same team.", _
                                        mInfo2.Name, clsType2.Name)
                        End If
                    End If
                Next
                Console.WriteLine("")
            End If
        Next
    End Sub
End Module

' Output:
' Method Method1 was authored by William Shakespeare and Herman Melville.
' Method Method1 in class TestClass2 was also authored by the same team.
'
' Method Method2 was authored by Leo Tolstoy and John Milton.
' Method Method2 in class TestClass2 was also authored by the same team.

using System;
using System.Reflection;

namespace MatchCS {
    // A custom attribute to allow 2 authors per method.
    public class AuthorsAttribute : Attribute {
        public AuthorsAttribute(string name1, string name2) {
            authorName1 = name1;
            authorName2 = name2;
        }

        protected string authorName1;
        protected string authorName2;

        public string AuthorName1 {
            get { return authorName1; }
            set { authorName1 = AuthorName1; }
        }

        public string AuthorName2 {
            get { return authorName2; }
            set { authorName2 = AuthorName2; }
        }

        // Use the hash code of the string objects and xor them together.
        public override int GetHashCode() {
            return authorName1.GetHashCode() ^ authorName2.GetHashCode();
        }

        // Determine if the object is a match to this one.
        public override bool Match(object obj) {
            // Obviously a match.
            if (obj == this)
                return true;

            // Obviously we're not null, so no.
            if (obj == null)
                return false;

            if (obj is AuthorsAttribute)
                // Combine the hash codes and see if they're unchanged.
                return (((AuthorsAttribute)obj).GetHashCode() & GetHashCode())
                    == GetHashCode();
            else
                return false;
        }
    }

    // Add some authors to methods of a class.
    public class TestClass1 {
        [Authors("William Shakespeare", "Herman Melville")]
        public void Method1()
        {}

        [Authors("Leo Tolstoy", "John Milton")]
        public void Method2()
        {}
    }

    // Add authors to a second class's methods.
    public class TestClass2 {
        [Authors("William Shakespeare", "Herman Melville")]
        public void Method1()
        {}

        [Authors("Leo Tolstoy", "John Milton")]
        public void Method2()
        {}

        [Authors("William Shakespeare", "John Milton")]
        public void Method3()
        {}
    }

    class DemoClass {
        static void Main(string[] args) {
            // Get the type for both classes to access their metadata.
            Type clsType1 = typeof(TestClass1);
            Type clsType2 = typeof(TestClass2);

            // Iterate through each method of the first class.
            foreach(MethodInfo mInfo1 in clsType1.GetMethods()) {
                // Check each method for the Authors attribute.
                AuthorsAttribute authAttr1 = (AuthorsAttribute)
                    Attribute.GetCustomAttribute(mInfo1,
                    typeof(AuthorsAttribute));
                if (authAttr1 != null) {
                    // Display the authors.
                    Console.WriteLine("Method {0} was authored by {1} " +
                                        "and {2}.", mInfo1.Name,
                                        authAttr1.AuthorName1,
                                        authAttr1.AuthorName2);
                    // Iterate through each method of the second class.
                    foreach(MethodInfo mInfo2 in clsType2.GetMethods()) {
                        // Check each method for the Authors attribute.
                        AuthorsAttribute authAttr2 = (AuthorsAttribute)
                            Attribute.GetCustomAttribute(mInfo2,
                            typeof(AuthorsAttribute));
                        // Compare with the authors in the first class.
                        if (authAttr2 != null && authAttr2.Match(authAttr1))
                            Console.WriteLine("Method {0} in class {1} " +
                                "was authored by the same team.",
                                mInfo2.Name, clsType2.Name);
                    }
                    Console.WriteLine("");
                }
            }
        }
    }
}

/*
 * Output:
 * Method Method1 was authored by William Shakespeare and Herman Melville.
 * Method Method1 in class TestClass2 was authored by the same team.
 *
 * Method Method2 was authored by Leo Tolstoy and John Milton.
 * Method Method2 in class TestClass2 was authored by the same team.
 */

using namespace System;
using namespace System::Reflection;

// A custom attribute to allow 2 authors per method.
public ref class AuthorsAttribute: public Attribute
{
public:
   AuthorsAttribute( String^ name1, String^ name2 )
   {
      authorName1 = name1;
      authorName2 = name2;
   }

protected:
   String^ authorName1;
   String^ authorName2;

public:

   property String^ AuthorName1
   {
      String^ get()
      {
         return authorName1;
      }

      void set( String^ value )
      {
         authorName1 = value;
      }
   }

   property String^ AuthorName2
   {
      String^ get()
      {
         return authorName2;
      }

      void set( String^ value )
      {
         authorName2 = value;
      }
   }

   // Use the hash code of the string objects and xor them together.
   virtual int GetHashCode() override
   {
      return authorName1->GetHashCode() ^ authorName2->GetHashCode();
   }

   // Determine if the object is a match to this one.
   virtual bool Match( Object^ obj ) override
   {
      // Obviously a match.
      if ( obj == this )
            return true;

      // Obviously we're not null, so no.
      if ( obj == nullptr )
            return false;

      if ( dynamic_cast<AuthorsAttribute^>(obj) )

      // Combine the hash codes and see if they're unchanged.
      return (dynamic_cast<AuthorsAttribute^>(obj)->GetHashCode() & GetHashCode()) == GetHashCode();
      else
            return false;
   }
};

// Add some authors to methods of a class.
public ref class TestClass1
{
public:

   [Authors("William Shakespeare","Herman Melville")]
   void Method1(){}

   [Authors("Leo Tolstoy","John Milton")]
   void Method2(){}

};

// Add authors to a second class's methods.
public ref class TestClass2
{
public:

   [Authors("William Shakespeare","Herman Melville")]
   void Method1(){}

   [Authors("Leo Tolstoy","John Milton")]
   void Method2(){}

   [Authors("William Shakespeare","John Milton")]
   void Method3(){}

};

int main()
{
   // Get the type for both classes to access their metadata.
   Type^ clsType1 = TestClass1::typeid;
   Type^ clsType2 = TestClass2::typeid;

   // Iterate through each method of the first class.
   System::Collections::IEnumerator^ myEnum = clsType1->GetMethods()->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      MethodInfo^ mInfo1 = safe_cast<MethodInfo^>(myEnum->Current);

      // Check each method for the Authors attribute.
      AuthorsAttribute^ authAttr1 = dynamic_cast<AuthorsAttribute^>(Attribute::GetCustomAttribute( mInfo1, AuthorsAttribute::typeid ));
      if ( authAttr1 != nullptr )
      {
         // Display the authors.
         Console::WriteLine( "Method {0} was authored by {1} and {2}.", mInfo1->Name, authAttr1->AuthorName1, authAttr1->AuthorName2 );

         // Iterate through each method of the second class.
         System::Collections::IEnumerator^ myEnum1 = clsType2->GetMethods()->GetEnumerator();
         while ( myEnum1->MoveNext() )
         {
            MethodInfo^ mInfo2 = safe_cast<MethodInfo^>(myEnum1->Current);

            // Check each method for the Authors attribute.
            AuthorsAttribute^ authAttr2 = dynamic_cast<AuthorsAttribute^>(Attribute::GetCustomAttribute( mInfo2, AuthorsAttribute::typeid ));

            // Compare with the authors in the first class.
            if ( authAttr2 != nullptr && authAttr2->Match(authAttr1) )
                        Console::WriteLine( "Method {0} in class {1} was authored by the same team.", mInfo2->Name, clsType2->Name );
         }
         Console::WriteLine();
      }
   }
}

/*
 * Output:
 * Method Method1 was authored by William Shakespeare and Herman Melville.
 * Method Method1 in class TestClass2 was authored by the same team.
 *
 * Method Method2 was authored by Leo Tolstoy and John Milton.
 * Method Method2 in class TestClass2 was authored by the same team.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Attribute 类
Attribute 成员
System 命名空间


Attribute 属性

Attribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Attribute 类

Attribute 类型公开以下成员。

名称 说明
页首

参考

Attribute 类
System 命名空间


Attribute ..::.TypeId 属性

Attribute
.
.
::
.
TypeId 属性
Attribute 类

当在派生类中实现时，获取该 Attribute 的唯一标识符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property TypeId As Object
    Get
public virtual Object TypeId { get; }
public:
virtual property Object^ TypeId {
    Object^ get ();
}
abstract TypeId : Object
override TypeId : Object

属性值

类型： System Object
表示此特性的唯一标识符的 Object。

当实现时，此标识符仅仅是该特性的 Type。但是，特意使用了此唯一标识符来标识同一类型的两个特性。 当实现时，此标识符仅仅是该特性的 Type。但是，特意使用了此唯一标识符来标识同一类型的两个特性。

下面的代码示例在自定义参数 Attribute 类中实现 TypeId 属性并演示其用法。

' Example for the Attribute.TypeId property.
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Define a custom parameter attribute that takes a single message argument.
    <AttributeUsage(AttributeTargets.Parameter)>  _
    Public Class ArgumentUsageAttribute
        Inherits Attribute

        ' The constructor saves the message and creates a unique identifier.
        Public Sub New(UsageMsg As String)
            Me.usageMsg = UsageMsg
            Me.GUIDinstance = Guid.NewGuid()
        End Sub ' New

        ' This is storage for the attribute message and unique ID.
        Protected usageMsg As String
        Protected GUIDinstance As Guid

        ' This is the Message property for the attribute.
        Public Property Message() As String
            Get
                Return usageMsg
            End Get
            Set
                usageMsg = value
            End Set
        End Property

        ' Override TypeId to provide a unique identifier for the instance.
        Public Overrides ReadOnly Property TypeId() As Object
            Get
                Return CType(GUIDinstance, Object)
            End Get
        End Property

        ' Override ToString() to append the message to what base the generates.
        Public Overrides Function ToString() As String
            Return MyBase.ToString() + ":" + usageMsg
        End Function ' ToString
    End Class ' ArgumentUsageAttribute

    Public Class TestClass

        ' Assign an ArgumentUsage attribute to each parameter.
        ' Assign a ParamArray attribute to strList.
        Public Sub TestMethod( _
            <ArgumentUsage("Must pass an array here.")> _
            strArray() As String, _
            <ArgumentUsage("Can pass a param list or array here.")> _
            ParamArray strList() As String)
        End Sub ' TestMethod
    End Class ' TestClass

    Module AttributeTypeIdDemo

        ' Create attributes from the derived class,
        ' and then display the TypeId values.
        Sub ShowAttributeTypeIds()

            ' Get the class type, and then get the MethodInfo object
            ' for TestMethod to access its metadata.
            Dim clsType As Type = GetType(TestClass)
            Dim mInfo As MethodInfo = clsType.GetMethod("TestMethod")

            ' There will be two elements in pInfoArray, one for each parameter.
            Dim pInfoArray As ParameterInfo() = mInfo.GetParameters()
            If Not (pInfoArray Is Nothing) Then

                ' Create an instance of the param array attribute on strList.
                Dim listArrayAttr As ParamArrayAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(1), _
                        GetType(ParamArrayAttribute))

                ' Create an instance of the argument usage attribute on strArray.
                Dim arrayUsageAttr1 As ArgumentUsageAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(0), _
                        GetType(ArgumentUsageAttribute))

                ' Create another instance of the argument usage attribute
                ' on strArray.
                Dim arrayUsageAttr2 As ArgumentUsageAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(0), _
                        GetType(ArgumentUsageAttribute))

                ' Create an instance of the argument usage attribute on strList.
                Dim listUsageAttr As ArgumentUsageAttribute = _
                    Attribute.GetCustomAttribute(pInfoArray(1), _
                        GetType(ArgumentUsageAttribute))

                ' Display the attributes and corresponding TypeId values.
                Console.WriteLine(vbCrLf & """{0}"" " & vbCrLf & "TypeId: {1}", _
                    listArrayAttr.ToString(), listArrayAttr.TypeId)
                Console.WriteLine(vbCrLf & """{0}"" " & vbCrLf & "TypeId: {1}", _
                    arrayUsageAttr1.ToString(), arrayUsageAttr1.TypeId)
                Console.WriteLine(vbCrLf & """{0}"" " & vbCrLf & "TypeId: {1}", _
                    arrayUsageAttr2.ToString(), arrayUsageAttr2.TypeId)
                Console.WriteLine(vbCrLf & """{0}"" " & vbCrLf & "TypeId: {1}", _
                    listUsageAttr.ToString(), listUsageAttr.TypeId)
            Else
                Console.WriteLine("The parameters information could not " & _
                    "be retrieved for method {0}.", mInfo.Name)
            End If
        End Sub ' ShowAttributeTypeIds

        Sub Main()
            Console.WriteLine( _
                "This example of the Attribute.TypeId property" & _
                vbCrLf & "generates the following output.")
            Console.WriteLine( _
                vbCrLf & "Create instances from a derived Attribute " & _
                "class that implements TypeId, " & vbCrLf & "and then " & _
                "display the attributes and corresponding TypeId values:" )

            ShowAttributeTypeIds( )
        End Sub ' Main

    End Module ' AttributeTypeIdDemo
End Namespace ' NDP_UE_VB

' This example of the Attribute.TypeId property
' generates the following output.
'
' Create instances from a derived Attribute class that implements TypeId,
' and then display the attributes and corresponding TypeId values:
'
' "System.ParamArrayAttribute"
' TypeId: System.ParamArrayAttribute
'
' "NDP_UE_VB.ArgumentUsageAttribute:Must pass an array here."
' TypeId: f312e528-3ff9-4587-9e6d-8108b62f2980
'
' "NDP_UE_VB.ArgumentUsageAttribute:Must pass an array here."
' TypeId: 7b2cf0ec-b166-4557-a7ab-137a57c87226
'
' "NDP_UE_VB.ArgumentUsageAttribute:Can pass a param list or array here."
' TypeId: 0b05f2a7-4a15-4d24-99f0-8503b238a18c

// Example for the Attribute.TypeId property.
using System;
using System.Reflection;

namespace NDP_UE_CS
{
    // Define a custom parameter attribute that takes a single message argument.
    [AttributeUsage( AttributeTargets.Parameter )]
    public class ArgumentUsageAttribute : Attribute
    {
        // The constructor saves the message and creates a unique identifier.
        public ArgumentUsageAttribute( string UsageMsg )
        {
            this.usageMsg = UsageMsg;
            this.instanceGUID = Guid.NewGuid( );
        }

        // This is storage for the attribute message and unique ID.
        protected string usageMsg;
        protected Guid instanceGUID;

        // This is the Message property for the attribute.
        public string Message
        {
            get { return usageMsg; }
            set { usageMsg = value; }
        }

        // Override TypeId to provide a unique identifier for the instance.
        public override object TypeId
        {
            get { return (object)instanceGUID; }
        }

        // Override ToString() to append the message to what the base generates.
        public override string ToString( )
        {
            return base.ToString( ) + ":" + usageMsg;
        }
    }

    public class TestClass
    {
        // Assign an ArgumentUsage attribute to each parameter.
        // Assign a ParamArray attribute to strList using the params keyword.
        public void TestMethod(
            [ArgumentUsage("Must pass an array here.")]
            String[] strArray,
            [ArgumentUsage("Can pass a param list or array here.")]
            params String[] strList)
        { }
    }

    class AttributeTypeIdDemo
    {
        static void ShowAttributeTypeIds( )
        {
            // Get the class type, and then get the MethodInfo object
            // for TestMethod to access its metadata.
            Type clsType = typeof( TestClass );
            MethodInfo mInfo = clsType.GetMethod("TestMethod");

            // There will be two elements in pInfoArray, one for each parameter.
            ParameterInfo[] pInfoArray = mInfo.GetParameters();
            if (pInfoArray != null)
            {
                // Create an instance of the param array attribute on strList.
                ParamArrayAttribute listArrayAttr = (ParamArrayAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[1],
                        typeof(ParamArrayAttribute) );

                // Create an instance of the argument usage attribute on strArray.
                ArgumentUsageAttribute arrayUsageAttr1 = (ArgumentUsageAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[0],
                        typeof(ArgumentUsageAttribute) );

                // Create another instance of the argument usage attribute
                // on strArray.
                ArgumentUsageAttribute arrayUsageAttr2 = (ArgumentUsageAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[0],
                        typeof(ArgumentUsageAttribute) );

                // Create an instance of the argument usage attribute on strList.
                ArgumentUsageAttribute listUsageAttr = (ArgumentUsageAttribute)
                    Attribute.GetCustomAttribute( pInfoArray[1],
                        typeof(ArgumentUsageAttribute) );

                // Display the attributes and corresponding TypeId values.
                Console.WriteLine( "\n\"{0}\" \nTypeId: {1}",
                    listArrayAttr.ToString(), listArrayAttr.TypeId );
                Console.WriteLine( "\n\"{0}\" \nTypeId: {1}",
                    arrayUsageAttr1.ToString(), arrayUsageAttr1.TypeId );
                Console.WriteLine( "\n\"{0}\" \nTypeId: {1}",
                    arrayUsageAttr2.ToString(), arrayUsageAttr2.TypeId );
                Console.WriteLine( "\n\"{0}\" \nTypeId: {1}",
                    listUsageAttr.ToString(), listUsageAttr.TypeId );
            }
            else
                Console.WriteLine( "The parameters information could " +
                    "not be retrieved for method {0}.", mInfo.Name );
        }

        static void Main( )
        {
            Console.WriteLine(
                "This example of the Attribute.TypeId property\n" +
                "generates the following output." );
            Console.WriteLine(
                "\nCreate instances from a derived Attribute " +
                "class that implements TypeId, \nand then " +
                "display the attributes and corresponding TypeId values:" );

            ShowAttributeTypeIds( );
        }
    }
}

/*
This example of the Attribute.TypeId property
generates the following output.

Create instances from a derived Attribute class that implements TypeId,
and then display the attributes and corresponding TypeId values:

"System.ParamArrayAttribute"
TypeId: System.ParamArrayAttribute

"NDP_UE_CS.ArgumentUsageAttribute:Must pass an array here."
TypeId: d03a23f4-2536-4478-920f-8b0426dec7f1

"NDP_UE_CS.ArgumentUsageAttribute:Must pass an array here."
TypeId: a1b412e8-3047-49fa-8d03-7660d37ef718

"NDP_UE_CS.ArgumentUsageAttribute:Can pass a param list or array here."
TypeId: 7ac2bf61-0327-48d6-a07e-eb9aaf3dd45e
*/

// Example for the Attribute::TypeId property.
using namespace System;
using namespace System::Reflection;

namespace NDP_UE_CPP
{

   // Define a custom parameter attribute that takes a single message argument.

   [AttributeUsage(AttributeTargets::Parameter)]
   public ref class ArgumentUsageAttribute: public Attribute
   {
   protected:

      // This is storage for the attribute message and unique ID.
      String^ usageMsg;
      Guid instanceGUID;

   public:

      // The constructor saves the message and creates a unique identifier.
      ArgumentUsageAttribute( String^ UsageMsg )
      {
         this->usageMsg = UsageMsg;
         this->instanceGUID = Guid::NewGuid();
      }

      property String^ Message
      {
         // This is the Message property for the attribute.
         String^ get()
         {
            return usageMsg;
         }

         void set( String^ value )
         {
            this->usageMsg = value;
         }
      }

      property Object^ TypeId
      {
         // Override TypeId to provide a unique identifier for the instance.
         virtual Object^ get() override
         {
            return instanceGUID;
         }
      }

      // Override ToString() to append the message to
      // what the base generates.
      virtual String^ ToString() override
      {
         return String::Concat( Attribute::ToString(), ":", usageMsg );
      }
   };

   public ref class TestClass
   {
   public:

      // Assign an ArgumentUsage attribute to each parameter.
      // Assign a ParamArray attribute to strList.
      void TestMethod( [ArgumentUsage("Must pass an array here.")]array<String^>^strArray,
                       [ArgumentUsage("Can pass a param list or array here.")]array<String^>^strList ){}
   };

   static void ShowAttributeTypeIds()
   {
      // Get the class type, and then get the MethodInfo object
      // for TestMethod to access its metadata.
      Type^ clsType = TestClass::typeid;
      MethodInfo^ mInfo = clsType->GetMethod( "TestMethod" );

      // There will be two elements in pInfoArray, one for each parameter.
      array<ParameterInfo^>^pInfoArray = mInfo->GetParameters();
      if ( pInfoArray != nullptr )
      {
         // Create an instance of the param array attribute on strList.
         ParamArrayAttribute^ listArrayAttr = static_cast<ParamArrayAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 1 ], ParamArrayAttribute::typeid ));

         // Create an instance of the argument usage attribute on strArray.
         ArgumentUsageAttribute^ arrayUsageAttr1 = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 0 ], ArgumentUsageAttribute::typeid ));

         // Create another instance of the argument usage attribute
         // on strArray.
         ArgumentUsageAttribute^ arrayUsageAttr2 = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 0 ], ArgumentUsageAttribute::typeid ));

         // Create an instance of the argument usage attribute on strList.
         ArgumentUsageAttribute^ listUsageAttr = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 1 ], ArgumentUsageAttribute::typeid ));

         // Display the attributes and corresponding TypeId values.
         Console::WriteLine( "\n\"{0}\" \nTypeId: {1}", listArrayAttr->ToString(), listArrayAttr->TypeId );
         Console::WriteLine( "\n\"{0}\" \nTypeId: {1}", arrayUsageAttr1->ToString(), arrayUsageAttr1->TypeId );
         Console::WriteLine( "\n\"{0}\" \nTypeId: {1}", arrayUsageAttr2->ToString(), arrayUsageAttr2->TypeId );
         Console::WriteLine( "\n\"{0}\" \nTypeId: {1}", listUsageAttr->ToString(), listUsageAttr->TypeId );
      }
      else
            Console::WriteLine( "The parameters information could "
      "not be retrieved for method {0}.", mInfo->Name );
   }
}

int main()
{
   Console::WriteLine( "This example of the Attribute::TypeId property\n"
   "generates the following output." );
   Console::WriteLine( "\nCreate instances from a derived Attribute "
   "class that implements TypeId, \nand then "
   "display the attributes and corresponding TypeId values:" );
   NDP_UE_CPP::ShowAttributeTypeIds();
}

/*
This example of the Attribute::TypeId property
generates the following output.

Create instances from a derived Attribute class that implements TypeId,
and then display the attributes and corresponding TypeId values:

"System.ParamArrayAttribute"
TypeId: System.ParamArrayAttribute

"NDP_UE_CPP.ArgumentUsageAttribute:Must pass an array here."
TypeId: 9316015d-1219-4ce1-b317-e71efb23d42e

"NDP_UE_CPP.ArgumentUsageAttribute:Must pass an array here."
TypeId: ebc1ba23-2573-4c1f-aea6-90515e733796

"NDP_UE_CPP.ArgumentUsageAttribute:Can pass a param list or array here."
TypeId: 624af10b-9bba-4403-a97e-46927e7385fb
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Attribute 类
Attribute 成员
System 命名空间


AttributeTargets 枚举

AttributeTargets 枚举

指定可以对它们应用特性的应用程序元素。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<FlagsAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration AttributeTargets
[SerializableAttribute]
[FlagsAttribute]
[ComVisibleAttribute(true)]
public enum AttributeTargets
[SerializableAttribute]
[FlagsAttribute]
[ComVisibleAttribute(true)]
public enum class AttributeTargets
[<SerializableAttribute>]
[<FlagsAttribute>]
[<ComVisibleAttribute(true)>]
type AttributeTargets
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Assembly | 可以对程序集应用特性。
由 XNA Framework 提供支持 | Module | 可以对模块应用特性。 说明 说明 Module 指的是可移植的可执行文件（.dll 或 .exe），而非 Visual Basic 标准模块。
由 XNA Framework 提供支持 | Class | 可以对类应用特性。
由 XNA Framework 提供支持 | Struct | 可以对结构应用特性，即值类型。
由 XNA Framework 提供支持 | Enum | 可以对枚举应用特性。
由 XNA Framework 提供支持 | Constructor | 可以对构造函数应用特性。
由 XNA Framework 提供支持 | Method | 可以对方法应用特性。
由 XNA Framework 提供支持 | Property | 可以对属性应用特性。
由 XNA Framework 提供支持 | Field | 可以对字段应用特性。
由 XNA Framework 提供支持 | Event | 可以对事件应用特性。
由 XNA Framework 提供支持 | Interface | 可以对接口应用特性。
由 XNA Framework 提供支持 | Parameter | 可以对参数应用特性。
由 XNA Framework 提供支持 | Delegate | 可以对委托应用特性。
由 XNA Framework 提供支持 | ReturnValue | 可以对返回值应用特性。
由 XNA Framework 提供支持 | GenericParameter | 可以对泛型参数应用特性。
由 XNA Framework 提供支持 | All | 可以对任何应用程序元素应用特性。

AttributeUsageAttribute 类使用此枚举指定可以对其应用特性的元素类型。

可以通过按位“或”运算组合 AttributeTargets 枚举值来获得首选组合。

下面的代码示例演示如何应用 AttributeTargets 枚举：

Imports System

Module DemoModule
    ' This attribute is only valid on a class.
    <AttributeUsage(AttributeTargets.Class)> _
    Public Class ClassTargetAttribute
        Inherits Attribute
    End Class

    ' This attribute is only valid on a method.
    <AttributeUsage(AttributeTargets.Method)> _
    Public Class MethodTargetAttribute
        Inherits Attribute
    End Class

    ' This attribute is only valid on a constructor.
    <AttributeUsage(AttributeTargets.Constructor)> _
    Public Class ConstructorTargetAttribute
        Inherits Attribute
    End Class

    ' This attribute is only valid on a field.
    <AttributeUsage(AttributeTargets.Field)> _
    Public Class FieldTargetAttribute
        Inherits Attribute
    End Class

    ' This attribute is valid on a class or a method.
    <AttributeUsage(AttributeTargets.Class Or AttributeTargets.Method)> _
    Public Class ClassMethodTargetAttribute
        Inherits Attribute
    End Class

    ' This attribute is valid on any target.
    <AttributeUsage(AttributeTargets.All)> _
    Public Class AllTargetsAttribute
        Inherits Attribute
    End Class

    <ClassTarget, _
    ClassMethodTarget, _
    AllTargets> _
    Public Class TestClassAttribute
        <ConstructorTarget, _
        AllTargets> _
        Public Sub New
        End Sub

        <MethodTarget, _
        ClassMethodTarget, _
        AllTargets> _
        Public Sub Method1()
        End Sub

        <FieldTarget, _
        AllTargets> _
        Public myInt as Integer
    End Class

    Sub Main()
    End Sub
End Module

using System;

namespace AttTargsCS {
    // This attribute is only valid on a class.
    [AttributeUsage(AttributeTargets.Class)]
    public class ClassTargetAttribute : Attribute {
    }

    // This attribute is only valid on a method.
    [AttributeUsage(AttributeTargets.Method)]
    public class MethodTargetAttribute : Attribute {
    }

    // This attribute is only valid on a constructor.
    [AttributeUsage(AttributeTargets.Constructor)]
    public class ConstructorTargetAttribute : Attribute {
    }

    // This attribute is only valid on a field.
    [AttributeUsage(AttributeTargets.Field)]
    public class FieldTargetAttribute : Attribute {
    }

    // This attribute is valid on a class or a method.
    [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)]
    public class ClassMethodTargetAttribute : Attribute {
    }

    // This attribute is valid on any target.
    [AttributeUsage(AttributeTargets.All)]
    public class AllTargetsAttribute : Attribute {
    }

    [ClassTarget]
    [ClassMethodTarget]
    [AllTargets]
    public class TestClassAttribute {
        [ConstructorTarget]
        [AllTargets]
        TestClassAttribute() {
        }

        [MethodTarget]
        [ClassMethodTarget]
        [AllTargets]
        public void Method1() {
        }

        [FieldTarget]
        [AllTargets]
        public int myInt;

        static void Main(string[] args) {
        }
    }
}

using namespace System;

namespace AttTargsCS
{

   // This attribute is only valid on a class.

   [AttributeUsage(AttributeTargets::Class)]
   public ref class ClassTargetAttribute: public Attribute{};

   // This attribute is only valid on a method.

   [AttributeUsage(AttributeTargets::Method)]
   public ref class MethodTargetAttribute: public Attribute{};

   // This attribute is only valid on a constructor.

   [AttributeUsage(AttributeTargets::Constructor)]
   public ref class ConstructorTargetAttribute: public Attribute{};

   // This attribute is only valid on a field.

   [AttributeUsage(AttributeTargets::Field)]
   public ref class FieldTargetAttribute: public Attribute{};

   // This attribute is valid on a class or a method.

   [AttributeUsage(AttributeTargets::Class|AttributeTargets::Method)]
   public ref class ClassMethodTargetAttribute: public Attribute{};

   // This attribute is valid on any target.

   [AttributeUsage(AttributeTargets::All)]
   public ref class AllTargetsAttribute: public Attribute{};

   [ClassTarget]
   [ClassMethodTarget]
   [AllTargets]
   public ref class TestClassAttribute
   {
   private:

      [ConstructorTarget]
      [AllTargets]
      TestClassAttribute(){}

   public:

      [MethodTarget]
      [ClassMethodTarget]
      [AllTargets]
      void Method1(){}

      [FieldTarget]
      [AllTargets]
      int myInt;
      static void Main(){}

   };

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间
AttributeUsageAttribute


AttributeUsageAttribute 类

AttributeUsageAttribute 类
成员

指定另一特性类的用法。无法继承此类。 指定另一特性类的用法。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<AttributeUsageAttribute(AttributeTargets.Class, Inherited := True)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class AttributeUsageAttribute _
    Inherits Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets.Class, Inherited = true)]
[ComVisibleAttribute(true)]
public sealed class AttributeUsageAttribute : Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets::Class, Inherited = true)]
[ComVisibleAttribute(true)]
public ref class AttributeUsageAttribute sealed : public Attribute
[<SealedAttribute>]
[<SerializableAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Class, Inherited = true)>]
[<ComVisibleAttribute(true)>]
type AttributeUsageAttribute =
    class
        inherit Attribute
    end

定义您自己的特性类时，可通过在特性类上放置 AttributeUsageAttribute 来控制特性类的使用方式。指示的特性类必须直接或间接地从 Attribute 派生。 定义您自己的特性类时，可通过在特性类上放置 AttributeUsageAttribute 来控制特性类的使用方式。指示的特性类必须直接或间接地从 Attribute 派生。

特性类具有定位参数和命名参数。特性类的每个公共构造函数为该类定义一个有效的定位参数序列。命名参数则由特性类的非静态、公共和读写字段或属性定义。 特性类具有定位参数和命名参数。特性类的每个公共构造函数为该类定义一个有效的定位参数序列。命名参数则由特性类的非静态、公共和读写字段或属性定义。 特性类具有定位参数和命名参数。特性类的每个公共构造函数为该类定义一个有效的定位参数序列。命名参数则由特性类的非静态、公共和读写字段或属性定义。

通过定义以下参数设置 AttributeUsageAttribute 的三个属性：

  • ValidOn

该定位参数指定可在其上放置所指示的特性的程序元素。AttributeTargets 枚举中列出了可在其上放置特性的所有可能元素的集。可通过按位“或”运算组合多个 AttributeTargets 值，以获取所需的有效程序元素组合。 该定位参数指定可在其上放置所指示的特性的程序元素。AttributeTargets 枚举中列出了可在其上放置特性的所有可能元素的集。可通过按位“或”运算组合多个 AttributeTargets 值，以获取所需的有效程序元素组合。 该定位参数指定可在其上放置所指示的特性的程序元素。AttributeTargets 枚举中列出了可在其上放置特性的所有可能元素的集。可通过按位“或”运算组合多个 AttributeTargets 值，以获取所需的有效程序元素组合。

  • AllowMultiple

该命名参数指定能否为给定的程序元素多次指定所指示的特性。

  • Inherited

该命名参数指定所指示的特性能否由派生类和重写成员继承。

有关使用特性的更多信息，请参见 Attribute 和 利用特性扩展元数据。

System System..::.AttributeUsageAttributeAttributeUsageAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AttributeUsageAttribute 成员
System 命名空间
Attribute
AttributeTargets

其他资源

利用特性扩展元数据


AttributeUsageAttribute 成员

AttributeUsageAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AttributeUsageAttribute 类

指定另一特性类的用法。无法继承此类。 指定另一特性类的用法。无法继承此类。

AttributeUsageAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

AttributeUsageAttribute 类
System 命名空间


AttributeUsageAttribute 构造函数

AttributeUsageAttribute 构造函数
AttributeUsageAttribute 类

用指定的 AttributeTargets、AllowMultiple 值和 Inherited 值列表初始化 AttributeUsageAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    validOn As AttributeTargets _
)
public AttributeUsageAttribute(
    AttributeTargets validOn
)
public:
AttributeUsageAttribute(
    AttributeTargets validOn
)
new :
        validOn:AttributeTargets -> AttributeUsageAttribute

参数

validOn
类型： System AttributeTargets
使用按位“或”运算符组合的一组值，用于指示哪些程序元素是有效的。

可通过按位“或”运算组合多个 AttributeTargets 值，以获取所需的有效程序元素组合。

有关默认属性值，请参见 ValidOn、AllowMultiple 和 Inherited 属性。

DispId 特性的定义阐释了位“或”运算组合几个 AttributeTargets 值的用法。

Namespace System.Runtime.InteropServices

    <AttributeUsage(AttributeTargets.Method _
        Or AttributeTargets.Field _
        Or AttributeTargets.Property)> _
    Public Class DispIdAttribute
        Inherits System.Attribute

        Public Sub New(value As Integer)
            ' . . .
        End Sub

        Public ReadOnly Property Value() As Integer
            Get
                ' . . .
                Return 0
            End Get
        End Property
    End Class
End Namespace

namespace System.Runtime.InteropServices
{
   [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field |
    AttributeTargets.Property)]
   public class DispIdAttribute: System.Attribute
   {
      public DispIdAttribute(int value) {
        // . . .
      }

      public int Value {
         get {
            // . . .
            return 0;
         }
      }
   }
}

namespace InteropServices
{
   [AttributeUsage(AttributeTargets::Method|
   AttributeTargets::Field|
   AttributeTargets::Property)
   ]
   public ref class DispIdAttribute: public Attribute
   {
   public:
      DispIdAttribute( int value )
      {
         // . . .
      }

      property int Value
      {
         int get()
         {
            // . . .
            return 0;
         }
      }
   };
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AttributeUsageAttribute 类
AttributeUsageAttribute 成员
System 命名空间
AttributeTargets


AttributeUsageAttribute 方法

AttributeUsageAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AttributeUsageAttribute 类

AttributeUsageAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

AttributeUsageAttribute 类
System 命名空间


AttributeUsageAttribute 属性

AttributeUsageAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AttributeUsageAttribute 类

AttributeUsageAttribute 类型公开以下成员。

名称 说明
页首

参考

AttributeUsageAttribute 类
System 命名空间


AttributeUsageAttribute ..::.AllowMultiple 属性

AttributeUsageAttribute
.
.
::
.
AllowMultiple 属性
AttributeUsageAttribute 类

获取或设置一个布尔值，该值指示能否为一个程序元素指定多个指示特性实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property AllowMultiple As Boolean
    Get
    Set
public bool AllowMultiple { get; set; }
public:
property bool AllowMultiple {
    bool get ();
    void set (bool value);
}
member AllowMultiple : bool with get, set

属性值

类型： System Boolean
如果允许指定多个实例，则为 true；否则为 false。默认为 false。 如果允许指定多个实例，则为 true；否则为 false。默认为 false。

可为程序元素多次指定的特性称为多用途特性。只能指定一次的特性称为单用途特性。 可为程序元素多次指定的特性称为多用途特性。只能指定一次的特性称为单用途特性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AttributeUsageAttribute 类
AttributeUsageAttribute 成员
System 命名空间
Attribute


AttributeUsageAttribute ..::.Inherited 属性

AttributeUsageAttribute
.
.
::
.
Inherited 属性
AttributeUsageAttribute 类

获取或设置一个布尔值，该值指示指示的特性能否由派生类和重写成员继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property Inherited As Boolean
    Get
    Set
public bool Inherited { get; set; }
public:
property bool Inherited {
    bool get ();
    void set (bool value);
}
member Inherited : bool with get, set

属性值

类型： System Boolean
如果该特性可由派生类和重写成员继承，则为 true，否则为 false。默认为 true。 如果该特性可由派生类和重写成员继承，则为 true，否则为 false。默认为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AttributeUsageAttribute 类
AttributeUsageAttribute 成员
System 命名空间
Attribute


AttributeUsageAttribute ..::.ValidOn 属性

AttributeUsageAttribute
.
.
::
.
ValidOn 属性
AttributeUsageAttribute 类

获取一组值，这组值标识指示的特性可应用到的程序元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ValidOn As AttributeTargets
    Get
public AttributeTargets ValidOn { get; }
public:
property AttributeTargets ValidOn {
    AttributeTargets get ();
}
member ValidOn : AttributeTargets

属性值

类型： System AttributeTargets
一个或多个 AttributeTargets 值。默认为 All。 一个或多个 AttributeTargets 值。默认为 All。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

AttributeUsageAttribute 类
AttributeUsageAttribute 成员
System 命名空间
AttributeTargets


BadImageFormatException 类

BadImageFormatException 类
成员

当动态链接库 (DLL) 或可执行程序的文件映像无效时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class BadImageFormatException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class BadImageFormatException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class BadImageFormatException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type BadImageFormatException =
    class
        inherit SystemException
    end

当动态链接库（.dll 文件）或可执行文件（.exe 文件）的文件格式不符合公共语言运行库的预期格式时，将引发此异常。尤其是当出现以下情况时将会引发异常： 当动态链接库（.dll 文件）或可执行文件（.exe 文件）的文件格式不符合公共语言运行库的预期格式时，将引发此异常。尤其是当出现以下情况时将会引发异常：

  • 一个 .NET Framework 实用工具的早期版本（如 ILDasm.exe 或 installutil.exe）,可以与使用 .NET Framework 更高版本开发的程序集一起使用。

    若要解决此异常，所使用的工具版本应该与用于开发该程序集的 .NET Framework 的版本相对应。这可能需要修改 Path 环境变量或提供正确的可执行文件的完全限定路径。 若要解决此异常，所使用的工具版本应该与用于开发该程序集的 .NET Framework 的版本相对应。这可能需要修改 Path 环境变量或提供正确的可执行文件的完全限定路径。

  • 尝试加载非托管的动态链接库或可执行文件（如 Windows 系统 DLL），就好像这是 .NET Framework 程序集。下面的示例通过使用 Assembly..::.LoadFile 方法加载 Kernel32.dll 来对此进行阐释。 尝试加载非托管的动态链接库或可执行文件（如 Windows 系统 DLL），就好像这是 .NET Framework 程序集。下面的示例通过使用 Assembly..::.LoadFile 方法加载 Kernel32.dll 来对此进行阐释。

    ' Windows DLL (non-.NET assembly)
Dim filePath As String = Environment.ExpandEnvironmentVariables("%windir%")
If Not filePath.Trim().EndsWith("\") Then filepath += "\"
filePath += "System32\Kernel32.dll"
Try
   Dim assem As Assembly = Assembly.LoadFile(filePath)
Catch e As BadImageFormatException
   Console.WriteLine("Unable to load {0}.", filePath)
   Console.WriteLine(e.Message.Substring(0, _
                     e.Message.IndexOf(".") + 1))
End Try
' The example displays an error message like the following:
'       Unable to load C:\WINDOWS\System32\Kernel32.dll.
'       The module was expected to contain an assembly manifest.

    // Windows DLL (non-.NET assembly)
string filePath = Environment.ExpandEnvironmentVariables("%windir%");
if (! filePath.Trim().EndsWith(@"\"))
   filePath += @"\";
filePath += @"System32\Kernel32.dll";

try {
   Assembly assem = Assembly.LoadFile(filePath);
}
catch (BadImageFormatException e) {
   Console.WriteLine("Unable to load {0}.", filePath);
   Console.WriteLine(e.Message.Substring(0,
                     e.Message.IndexOf(".") + 1));
}
// The example displays an error message like the following:
//       Unable to load C:\WINDOWS\System32\Kernel32.dll.
//       The module was expected to contain an assembly manifest.

    若要解决此异常，请使用由您的开发语言提供的功能（例如 Visual Basic 中的 Declare 语句或 C# 中的 DllImportAttribute 特性和 extern 关键字），来访问在 DLL 中定义的方法。

  • DLL 或可执行文件作为 64 位程序集加载，但是它包含 32 位特性或资源。例如，它依靠 COM 互操作或调用 32 位动态链接库中的方法。 DLL 或可执行文件作为 64 位程序集加载，但是它包含 32 位特性或资源。例如，它依靠 COM 互操作或调用 32 位动态链接库中的方法。

    若要解决此异常，请将项目的“平台目标”属性设置为 x86（而不是 x64 或 AnyCPU）并重新编译。

  • 组件已使用 .NET Framework 的不同版本创建。通常，当使用 .NET Framework 1.0 或 .NET Framework 1.1 开发的应用程序或组件尝试加载使用 .NET Framework 2.0 SP1 或更高版本开发的程序集时，或者当使用 .NET Framework 2.0 SP1.NET Framework 3.5 开发的应用程序尝试加载使用 .NET Framework 4 开发的程序集时，会发生此异常。BadImageFormatException 可能会报告作为编译时错误，或在运行时可能会引发该异常。下面的示例阐释此方案。它定义了具有一个成员 ToProperCase 并驻留在名为 StringLib.dll 程序集中的 StringLib 类。 组件已使用 .NET Framework 的不同版本创建。通常，当使用 .NET Framework 1.0 或 .NET Framework 1.1 开发的应用程序或组件尝试加载使用 .NET Framework 2.0 SP1 或更高版本开发的程序集时，或者当使用 .NET Framework 2.0 SP1.NET Framework 3.5 开发的应用程序尝试加载使用 .NET Framework 4 开发的程序集时，会发生此异常。BadImageFormatException 可能会报告作为编译时错误，或在运行时可能会引发该异常。下面的示例阐释此方案。它定义了具有一个成员 ToProperCase 并驻留在名为 StringLib.dll 程序集中的 StringLib 类。 组件已使用 .NET Framework 的不同版本创建。通常，当使用 .NET Framework 1.0 或 .NET Framework 1.1 开发的应用程序或组件尝试加载使用 .NET Framework 2.0 SP1 或更高版本开发的程序集时，或者当使用 .NET Framework 2.0 SP1.NET Framework 3.5 开发的应用程序尝试加载使用 .NET Framework 4 开发的程序集时，会发生此异常。BadImageFormatException 可能会报告作为编译时错误，或在运行时可能会引发该异常。下面的示例阐释此方案。它定义了具有一个成员 ToProperCase 并驻留在名为 StringLib.dll 程序集中的 StringLib 类。 组件已使用 .NET Framework 的不同版本创建。通常，当使用 .NET Framework 1.0 或 .NET Framework 1.1 开发的应用程序或组件尝试加载使用 .NET Framework 2.0 SP1 或更高版本开发的程序集时，或者当使用 .NET Framework 2.0 SP1.NET Framework 3.5 开发的应用程序尝试加载使用 .NET Framework 4 开发的程序集时，会发生此异常。BadImageFormatException 可能会报告作为编译时错误，或在运行时可能会引发该异常。下面的示例阐释此方案。它定义了具有一个成员 ToProperCase 并驻留在名为 StringLib.dll 程序集中的 StringLib 类。 组件已使用 .NET Framework 的不同版本创建。通常，当使用 .NET Framework 1.0 或 .NET Framework 1.1 开发的应用程序或组件尝试加载使用 .NET Framework 2.0 SP1 或更高版本开发的程序集时，或者当使用 .NET Framework 2.0 SP1.NET Framework 3.5 开发的应用程序尝试加载使用 .NET Framework 4 开发的程序集时，会发生此异常。BadImageFormatException 可能会报告作为编译时错误，或在运行时可能会引发该异常。下面的示例阐释此方案。它定义了具有一个成员 ToProperCase 并驻留在名为 StringLib.dll 程序集中的 StringLib 类。

    Public Module StringLib
   Private exceptionList() As String = { "a", "an", "the", "in", "on", "of" }
   Private separators() As Char = { " "c }

   Public Function ToProperCase(title As String) As String
      Dim isException As Boolean = False

      Dim words() As String = title.Split( separators, StringSplitOptions.RemoveEmptyEntries)
      Dim newWords(words.Length) As String

      For ctr As Integer = 0 To words.Length - 1
         isException = False

         For Each exception As String In exceptionList
            If words(ctr).Equals(exception) And ctr > 0 Then
               isException = True
               Exit For
            End If
         Next
         If Not isException Then
            newWords(ctr) = words(ctr).Substring(0, 1).ToUpper() + words(ctr).Substring(1)
         Else
            newWords(ctr) = words(ctr)
         End If
      Next
      Return String.Join(" ", newWords)
   End Function
End Module

    using System;

public class StringLib
{
   private string[] exceptionList = { "a", "an", "the", "in", "on", "of" };
   private char[] separators = { ' ' };

   public string ToProperCase(string title)
   {
      bool isException = false;

      string[] words = title.Split( separators, StringSplitOptions.RemoveEmptyEntries);
      string[] newWords = new string[words.Length];

      for (int ctr = 0; ctr <= words.Length - 1; ctr++)
      {
         isException = false;

         foreach (string exception in exceptionList)
         {
            if (words[ctr].Equals(exception) && ctr > 0)
            {
               isException = true;
               break;
            }
         }

         if (! isException)
            newWords[ctr] = words[ctr].Substring(0, 1).ToUpper() + words[ctr].Substring(1);
         else
            newWords[ctr] = words[ctr];
      }
      return String.Join(" ", newWords);
   }
}
// Attempting to load the StringLib.dll assembly produces the following output:
//    Unhandled Exception: System.BadImageFormatException:
//                         The format of the file 'StringLib.dll' is invalid.

    下面的示例利用反射加载名为 StringLib.dll 的程序集。如果用 .NET Framework 1.1 编译器编译源代码，则 Assembly..::.LoadFrom 方法将引发 BadImageFormatException。 下面的示例利用反射加载名为 StringLib.dll 的程序集。如果用 .NET Framework 1.1 编译器编译源代码，则 Assembly..::.LoadFrom 方法将引发 BadImageFormatException。

    Imports System.Reflection

Module Example
   Public Sub Main()
      Dim title As String = "a tale of two cities"
      ' Load assembly containing StateInfo type.
      Dim assem As Assembly = Assembly.LoadFrom(".\StringLib.dll")
      ' Get type representing StateInfo class.
      Dim stateInfoType As Type = assem.GetType("StringLib")
      ' Get Display method.
      Dim mi As MethodInfo = stateInfoType.GetMethod("ToProperCase")
      ' Call the Display method.
      Dim properTitle As String = CStr(mi.Invoke(Nothing, New Object() { title } ))
      Console.WriteLine(properTitle)
   End Sub
End Module
' Attempting to load the StringLib.dll assembly produces the following output:
'    Unhandled Exception: System.BadImageFormatException:
'                         The format of the file 'StringLib.dll' is invalid.

    using System;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      string title = "a tale of two cities";
//      object[] args = { title}
      // Load assembly containing StateInfo type.
      Assembly assem = Assembly.LoadFrom(@".\StringLib.dll");
      // Get type representing StateInfo class.
      Type stateInfoType = assem.GetType("StringLib");
      // Get Display method.
      MethodInfo mi = stateInfoType.GetMethod("ToProperCase");
      // Call the Display method.
      string properTitle = (string) mi.Invoke(null, new object[] { title } );
      Console.WriteLine(properTitle);
   }
}

    若要解决此异常，请确保引发该异常的程序集尝试加载用兼容版本的 .NET Framework 开发的程序集。

BadImageFormatException 使用值为 0x8007000B 的 HRESULT COR_E_BADIMAGEFORMAT。

有关 BadImageFormatException 实例的初始属性值列表，请参见 BadImageFormatException 构造函数。

System System..::.BadImageFormatExceptionBadImageFormatException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BadImageFormatException 成员
System 命名空间
Exception

其他资源

处理和引发异常


BadImageFormatException 成员

BadImageFormatException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BadImageFormatException 类

当动态链接库 (DLL) 或可执行程序的文件映像无效时引发的异常。

BadImageFormatException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

BadImageFormatException 类
System 命名空间


BadImageFormatException 构造函数

BadImageFormatException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BadImageFormatException 类

初始化 BadImageFormatException 类的一个新实例。

名称 说明
页首

参考

BadImageFormatException 类
BadImageFormatException 成员
System 命名空间


BadImageFormatException 构造函数

BadImageFormatException 构造函数
BadImageFormatException 类

初始化 BadImageFormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public BadImageFormatException()
public:
BadImageFormatException()
new : unit -> BadImageFormatException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“可执行文件或库的格式无效。”。此消息将考虑当前系统区域性。

下表显示 BadImageFormatException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误信息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BadImageFormatException 类
BadImageFormatException 成员
BadImageFormatException 重载
System 命名空间


BadImageFormatException 构造函数 (String)

BadImageFormatException 构造函数 (String)
BadImageFormatException 类

用指定的错误消息初始化 BadImageFormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public BadImageFormatException(
    string message
)
public:
BadImageFormatException(
    String^ message
)
new :
        message:string -> BadImageFormatException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 BadImageFormatException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BadImageFormatException 类
BadImageFormatException 成员
BadImageFormatException 重载
System 命名空间


BadImageFormatException 构造函数 (SerializationInfo, StreamingContext)

BadImageFormatException 构造函数 (SerializationInfo, StreamingContext)
BadImageFormatException 类

用序列化数据初始化 BadImageFormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected BadImageFormatException(
    SerializationInfo info,
    StreamingContext context
)
protected:
BadImageFormatException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> BadImageFormatException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

在反序列化过程中，将调用此构造函数来重构通过流传输的异常对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BadImageFormatException 类
BadImageFormatException 成员
BadImageFormatException 重载
System 命名空间


BadImageFormatException 构造函数 (String, Exception)

BadImageFormatException 构造函数 (String, Exception)
BadImageFormatException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 BadImageFormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public BadImageFormatException(
    string message,
    Exception inner
)
public:
BadImageFormatException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> BadImageFormatException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用，则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 inner 参数不是空引用，则当前异常在处理内部异常的 catch 块中引发。

由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 BadImageFormatException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BadImageFormatException 类
BadImageFormatException 成员
BadImageFormatException 重载
System 命名空间
Exception

其他资源

处理和引发异常


BadImageFormatException 构造函数 (String, String)

BadImageFormatException 构造函数 (String, String)
BadImageFormatException 类

用指定的错误消息和文件名初始化 BadImageFormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    fileName As String _
)
public BadImageFormatException(
    string message,
    string fileName
)
public:
BadImageFormatException(
    String^ message,
    String^ fileName
)
new :
        message:string *
        fileName:string -> BadImageFormatException

参数

message
类型： System String
描述错误的消息。
fileName
类型： System String
包含无效图像的文件的全名。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

Property | 值
FileName | 包含无效图像的文件的全名。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BadImageFormatException 类
BadImageFormatException 成员
BadImageFormatException 重载
System 命名空间


BadImageFormatException 构造函数 (String, String, Exception)

BadImageFormatException 构造函数 (String, String, Exception)
BadImageFormatException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 BadImageFormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    fileName As String, _
    inner As Exception _
)
public BadImageFormatException(
    string message,
    string fileName,
    Exception inner
)
public:
BadImageFormatException(
    String^ message,
    String^ fileName,
    Exception^ inner
)
new :
        message:string *
        fileName:string *
        inner:Exception -> BadImageFormatException

参数

message
类型： System String
解释异常原因的错误消息。
fileName
类型： System String
包含无效图像的文件的全名。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 BadImageFormatException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
FileName | 包含无效图像的文件的全名。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BadImageFormatException 类
BadImageFormatException 成员
BadImageFormatException 重载
System 命名空间


BadImageFormatException 方法

BadImageFormatException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BadImageFormatException 类

BadImageFormatException 类型公开以下成员。

名称 说明
页首

参考

BadImageFormatException 类
System 命名空间


BadImageFormatException ..::.GetObjectData 方法

BadImageFormatException
.
.
::
.
GetObjectData 方法
BadImageFormatException 类

用文件名、程序集缓存日志和其他异常信息设置 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它包含有关所引发异常的序列化对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

实现

异常 | 条件
SecurityException | 调用方没有所要求的权限。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BadImageFormatException 类
BadImageFormatException 成员
System 命名空间


BadImageFormatException ..::.ToString 方法

BadImageFormatException
.
.
::
.
ToString 方法
BadImageFormatException 类

返回该异常的完全限定名，还可能返回错误消息、内部异常的名称和堆栈跟踪。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
一个字符串，包含该异常的完全限定名，还可能包含错误消息、内部异常的名称和堆栈跟踪。

实现

此方法返回的字符串表示形式包含异常的名称、Message 属性的值、对内部异常调用 ToString 的结果、FileName 属性的值以及调用 StackTrace 的结果。如果这些成员中的任何一个为空引用（Visual Basic 中为 Nothing），那么其值将不包含在返回的字符串中。 此方法返回的字符串表示形式包含异常的名称、Message 属性的值、对内部异常调用 ToString 的结果、FileName 属性的值以及调用 StackTrace 的结果。如果这些成员中的任何一个为空引用（Visual Basic 中为 Nothing），那么其值将不包含在返回的字符串中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BadImageFormatException 类
BadImageFormatException 成员
System 命名空间


BadImageFormatException 属性

BadImageFormatException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BadImageFormatException 类

BadImageFormatException 类型公开以下成员。

名称 说明
页首

参考

BadImageFormatException 类
System 命名空间


BadImageFormatException ..::.FileName 属性

BadImageFormatException
.
.
::
.
FileName 属性
BadImageFormatException 类

获取导致该异常的文件的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property FileName As String
    Get
public string FileName { get; }
public:
property String^ FileName {
    String^ get ();
}
member FileName : string

属性值

类型： System String
带有无效图像的文件的名称，或一个空引用（如果未向当前实例的构造函数传递任何文件名）。

该属性返回提供给当前实例的构造函数的文件名（如果有的话）。如果没有指定该文件名或者它是空引用（在 Visual Basic 中为 Nothing），则该属性返回空引用。 该属性返回提供给当前实例的构造函数的文件名（如果有的话）。如果没有指定该文件名或者它是空引用（在 Visual Basic 中为 Nothing），则该属性返回空引用。

此属性为只读。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BadImageFormatException 类
BadImageFormatException 成员
System 命名空间


BadImageFormatException ..::.FusionLog 属性

BadImageFormatException
.
.
::
.
FusionLog 属性
BadImageFormatException 类

获取描述程序集加载失败的原因的日志文件。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property FusionLog As String
    Get
public string FusionLog { get; }
public:
property String^ FusionLog {
    String^ get ();
}
member FusionLog : string

属性值

类型： System String
一个 String，包含由程序集缓存报告的错误。
  • SecurityPermission

    用于提供证据以及查看和修改策略。关联枚举：SecurityPermissionFlag..::.ControlEvidenceSecurityPermissionFlag..::.ControlPolicy 安全操作：Demand 用于提供证据以及查看和修改策略。关联枚举：SecurityPermissionFlag..::.ControlEvidenceSecurityPermissionFlag..::.ControlPolicy 安全操作：Demand

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BadImageFormatException 类
BadImageFormatException 成员
System 命名空间


BadImageFormatException ..::.Message 属性

BadImageFormatException
.
.
::
.
Message 属性
BadImageFormatException 类

获取错误消息和引发此异常的文件的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property Message As String
    Get
public override string Message { get; }
public:
virtual property String^ Message {
    String^ get () override;
}
abstract Message : string
override Message : string

属性值

类型： System String
包含错误消息和引发此异常的文件名称的字符串。

实现

如果没有向当前异常的构造函数提供消息，则此属性返回系统提供的错误消息。如果 FileName 属性不是空引用（在 Visual Basic 中为 Nothing），则该消息包含文件名。 如果没有向当前异常的构造函数提供消息，则此属性返回系统提供的错误消息。如果 FileName 属性不是空引用（在 Visual Basic 中为 Nothing），则该消息包含文件名。

此属性为只读。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BadImageFormatException 类
BadImageFormatException 成员
System 命名空间


BadImageFormatException 事件

BadImageFormatException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BadImageFormatException 类

BadImageFormatException 类型公开以下成员。

名称 说明
页首

参考

BadImageFormatException 类
System 命名空间


Base64FormattingOptions 枚举

Base64FormattingOptions 枚举

指定相关的 Convert..::.ToBase64CharArray 和 Convert..::.ToBase64String 方法是否在其输出中插入分行符。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<FlagsAttribute> _
Public Enumeration Base64FormattingOptions
[FlagsAttribute]
public enum Base64FormattingOptions
[FlagsAttribute]
public enum class Base64FormattingOptions
[<FlagsAttribute>]
type Base64FormattingOptions
成员名称 | 说明
None | 不要在字符串表示形式中每隔 76 个字符插入分行符。
InsertLineBreaks | 在字符串表示形式中每隔 76 个字符插入分行符。

ToBase64CharArray 和 ToBase64String 方法将 8 位无符号整型数组中的值转换为由 Base 64 数字组成的等效字符串表示形式。字符串表示形式可以包含一个或多个分行符，其中分行符被定义为回车符 (U+000D)，后面跟一个换行符 (U+000A)。 ToBase64CharArray 和 ToBase64String 方法将 8 位无符号整型数组中的值转换为由 Base 64 数字组成的等效字符串表示形式。字符串表示形式可以包含一个或多个分行符，其中分行符被定义为回车符 (U+000D)，后面跟一个换行符 (U+000A)。

下面的代码示例演示如何使用 Base64FormattingOptions 枚举将 Convert..::.ToBase64String 方法的输出分成多个单独的行。

' This example demonstrates the Convert.ToBase64String() and
'                               Convert.FromBase64String() methods
Class Sample
   Public Shared Sub Main()
      Dim inArray(255)  As Byte
      Dim outArray(255) As Byte
      Dim s2 As String
      Dim s3 As String
      Dim step1 As String = "1) The input is a byte array (inArray) of arbitrary data."
      Dim step2 As String = "2) Convert a subarray of the input data array to a base 64 string."
      Dim step3 As String = "3) Convert the entire input data array to a base 64 string."
      Dim step4 As String = "4) The two methods in steps 2 and 3 produce the same result: {0}"
      Dim step5 As String = "5) Convert the base 64 string to an output byte array (outArray)."
      Dim step6 As String = "6) The input and output arrays, inArray and outArray, are equal: {0}"
      Dim x As Integer
      Dim nl As String = Environment.NewLine
      Dim ruler1a As String = "         1         2         3         4"
      Dim ruler2a As String = "1234567890123456789012345678901234567890"
      Dim ruler3a As String = "----+----+----+----+----+----+----+----+"
      Dim ruler1b As String = "         5         6         7      "
      Dim ruler2b As String = "123456789012345678901234567890123456"
      Dim ruler3b As String = "----+----+----+----+----+----+----+-"
      Dim ruler As String = [String].Concat(ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b, nl)

      ' 1) Display an arbitrary array of input data (inArray). The data could be
      '    derived from user input, a file, an algorithm, etc.
      Console.WriteLine(step1)
      Console.WriteLine()
      For x = 0 To inArray.Length - 1
         inArray(x) = CByte(x)
         Console.Write("{0:X2} ", inArray(x))
         If (x + 1) Mod 20 = 0 Then
            Console.WriteLine()
         End If
      Next x
      Console.Write("{0}{0}", nl)

      ' 2) Convert a subarray of the input data to a base64 string. In this case,
      '    the subarray is the entire input data array. New lines (CRLF) are inserted.
      Console.WriteLine(step2)
      s2 = Convert.ToBase64String(inArray, 0, inArray.Length, _
                                  Base64FormattingOptions.InsertLineBreaks)
      Console.WriteLine("{0}{1}{2}{3}", nl, ruler, s2, nl)

      ' 3) Convert the input data to a base64 string. In this case, the entire
      '    input data array is converted by default. New lines (CRLF) are inserted.
      Console.WriteLine(step3)
      s3 = Convert.ToBase64String(inArray, Base64FormattingOptions.InsertLineBreaks)

      ' 4) Test whether the methods in steps 2 and 3 produce the same result.
      Console.WriteLine(step4, s2.Equals(s3))

      ' 5) Convert the base 64 string to an output array (outArray).
      Console.WriteLine(step5)
      outArray = Convert.FromBase64String(s2)

      ' 6) Is outArray equal to inArray?
      Console.WriteLine(step6, ArraysAreEqual(inArray, outArray))
   End Sub 'Main

   Public Shared Function ArraysAreEqual(a1() As Byte, a2() As Byte) As Boolean
      If a1.Length <> a2.Length Then
         Return False
      End If
      Dim i As Integer
      For i = 0 To a1.Length - 1
         If a1(i) <> a2(i) Then
            Return False
         End If
      Next i
      Return True
   End Function 'ArraysAreEqual
End Class 'Sample
'
'This example produces the following results:
'
'1) The input is a byte array (inArray) of arbitrary data.
'
'00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
'14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
'28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
'3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
'50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
'64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
'78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
'8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
'A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
'B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
'C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
'DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
'F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
'
'2) Convert a subarray of the input data array to a base 64 string.
'
'         1         2         3         4         5         6         7
'1234567890123456789012345678901234567890123456789012345678901234567890123456
'----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
'OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
'cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
'q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
'5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==
'
'3) Convert the entire input data array to a base 64 string.
'4) The two methods in steps 2 and 3 produce the same result: True
'5) Convert the base 64 string to an output byte array (outArray).
'6) The input and output arrays, inArray and outArray, are equal: True
'

// This example demonstrates the Convert.ToBase64String() and
//                               Convert.FromBase64String() methods

using System;
class Sample
{
    public static void Main()
    {
    byte[] inArray  = new byte[256];
    byte[] outArray = new byte[256];
    string s2;
    string s3;
    string step1 = "1) The input is a byte array (inArray) of arbitrary data.";
    string step2 = "2) Convert a subarray of the input data array to a base 64 string.";
    string step3 = "3) Convert the entire input data array to a base 64 string.";
    string step4 = "4) The two methods in steps 2 and 3 produce the same result: {0}";
    string step5 = "5) Convert the base 64 string to an output byte array (outArray).";
    string step6 = "6) The input and output arrays, inArray and outArray, are equal: {0}";
    int x;
    string nl = Environment.NewLine;
    string ruler1a = "         1         2         3         4";
    string ruler2a = "1234567890123456789012345678901234567890";
    string ruler3a = "----+----+----+----+----+----+----+----+";
    string ruler1b = "         5         6         7      ";
    string ruler2b = "123456789012345678901234567890123456";
    string ruler3b = "----+----+----+----+----+----+----+-";
    string ruler   = String.Concat(ruler1a, ruler1b, nl,
                                   ruler2a, ruler2b, nl,
                                   ruler3a, ruler3b, nl);

// 1) Display an arbitrary array of input data (inArray). The data could be
//    derived from user input, a file, an algorithm, etc.

    Console.WriteLine(step1);
    Console.WriteLine();
    for (x = 0; x < inArray.Length; x++)
        {
        inArray[x] = (byte)x;
        Console.Write("{0:X2} ", inArray[x]);
        if (((x+1)%20) == 0) Console.WriteLine();
        }
    Console.Write("{0}{0}", nl);

// 2) Convert a subarray of the input data to a base64 string. In this case,
//    the subarray is the entire input data array. New lines (CRLF) are inserted.

    Console.WriteLine(step2);
    s2 = Convert.ToBase64String(inArray, 0, inArray.Length,
                                Base64FormattingOptions.InsertLineBreaks);
    Console.WriteLine("{0}{1}{2}{3}", nl, ruler, s2, nl);

// 3) Convert the input data to a base64 string. In this case, the entire
//    input data array is converted by default. New lines (CRLF) are inserted.

    Console.WriteLine(step3);
    s3 = Convert.ToBase64String(inArray, Base64FormattingOptions.InsertLineBreaks);

// 4) Test whether the methods in steps 2 and 3 produce the same result.
    Console.WriteLine(step4, s2.Equals(s3));

// 5) Convert the base 64 string to an output array (outArray).
    Console.WriteLine(step5);
    outArray = Convert.FromBase64String(s2);

// 6) Is outArray equal to inArray?
   Console.WriteLine(step6, ArraysAreEqual(inArray, outArray));
   }

    public static bool ArraysAreEqual(byte[] a1, byte[] a2)
    {
    if (a1.Length != a2.Length) return false;
    for (int i = 0; i < a1.Length; i++)
        if (a1[i] != a2[i]) return false;
    return true;
    }
}
/*
This example produces the following results:

1) The input is a byte array (inArray) of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert a subarray of the input data array to a base 64 string.

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the entire input data array to a base 64 string.
4) The two methods in steps 2 and 3 produce the same result: True
5) Convert the base 64 string to an output byte array (outArray).
6) The input and output arrays, inArray and outArray, are equal: True

*/

// This example demonstrates the Convert.ToBase64String() and
//                               Convert.FromBase64String() methods
using namespace System;
bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 );
int main()
{
   array<Byte>^inArray = gcnew array<Byte>(256);
   array<Byte>^outArray = gcnew array<Byte>(256);
   String^ s2;
   String^ s3;
   String^ step1 = "1) The input is a byte array (inArray) of arbitrary data.";
   String^ step2 = "2) Convert a subarray of the input data array to a base 64 string.";
   String^ step3 = "3) Convert the entire input data array to a base 64 string.";
   String^ step4 = "4) The two methods in steps 2 and 3 produce the same result: {0}";
   String^ step5 = "5) Convert the base 64 string to an output byte array (outArray).";
   String^ step6 = "6) The input and output arrays, inArray and outArray, are equal: {0}";
   int x;
   String^ nl = Environment::NewLine;
   String^ ruler1a = "         1         2         3         4";
   String^ ruler2a = "1234567890123456789012345678901234567890";
   String^ ruler3a = "----+----+----+----+----+----+----+----+";
   String^ ruler1b = "         5         6         7      ";
   String^ ruler2b = "123456789012345678901234567890123456";
   String^ ruler3b = "----+----+----+----+----+----+----+-";
   String^ ruler = String::Concat( ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b, nl );

   // 1) Display an arbitrary array of input data (inArray). The data could be
   //    derived from user input, a file, an algorithm, etc.
   Console::WriteLine( step1 );
   Console::WriteLine();
   for ( x = 0; x < inArray->Length; x++ )
   {
      inArray[ x ] = (Byte)x;
      Console::Write( "{0:X2} ", inArray[ x ] );
      if ( ((x + 1) % 20) == 0 )
            Console::WriteLine();

   }
   Console::Write( "{0}{0}", nl );

   // 2) Convert a subarray of the input data to a base64 string. In this case,
   //    the subarray is the entire input data array. New lines (CRLF) are inserted.
   Console::WriteLine( step2 );
   s2 = Convert::ToBase64String( inArray, 0, inArray->Length, Base64FormattingOptions::InsertLineBreaks );
   Console::WriteLine( "{0}{1}{2}{3}", nl, ruler, s2, nl );

   // 3) Convert the input data to a base64 string. In this case, the entire
   //    input data array is converted by default. New lines (CRLF) are inserted.
   Console::WriteLine( step3 );
   s3 = Convert::ToBase64String( inArray, Base64FormattingOptions::InsertLineBreaks );

   // 4) Test whether the methods in steps 2 and 3 produce the same result.
   Console::WriteLine( step4, s2->Equals( s3 ) );

   // 5) Convert the base 64 string to an output array (outArray).
   Console::WriteLine( step5 );
   outArray = Convert::FromBase64String( s2 );

   // 6) Is outArray equal to inArray?
   Console::WriteLine( step6, ArraysAreEqual( inArray, outArray ) );
}

bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 )
{
   if ( a1->Length != a2->Length )
      return false;

   for ( int i = 0; i < a1->Length; i++ )
      if ( a1[ i ] != a2[ i ] )
            return false;

   return true;
}

/*
This example produces the following results:

1) The input is a byte array (inArray) of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert a subarray of the input data array to a base 64 string.

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the entire input data array to a base 64 string.
4) The two methods in steps 2 and 3 produce the same result: True
5) Convert the base 64 string to an output byte array (outArray).
6) The input and output arrays, inArray and outArray, are equal: True

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间


BitConverter 类

BitConverter 类
成员

将基础数据类型与字节数组相互转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public NotInheritable Class BitConverter
public static class BitConverter
public ref class BitConverter abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type BitConverter =  class end

此类便于操作基本形式的类型。一个字节定义为一个 8 位无符号整数。 此类便于操作基本形式的类型。一个字节定义为一个 8 位无符号整数。

下面的代码示例演示多个 BitConverter 类方法的用法。

' Example of BitConverter class methods.
Module BitConverterDemo

    Sub Main( )

        Const formatter As String = "{0,25}{1,30}"

        Dim aDoubl      As Double   = 0.1111111111111111111
        Dim aSingl      As Single   = 0.1111111111111111111
        Dim aLong       As Long     = 1111111111111111111
        Dim anInt       As Integer  = 1111111111
        Dim aShort      As Short    = 11111
        Dim aChar       As Char     = "*"c
        Dim aBool       As Boolean  = True

        Console.WriteLine( _
            "This example of methods of the BitConverter class" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( formatter, "argument", "Byte array" )
        Console.WriteLine( formatter, "--------", "----------" )

        ' Convert values to Byte arrays and display them.
        Console.WriteLine( formatter, aDoubl, _
            BitConverter.ToString( BitConverter.GetBytes( aDoubl ) ) )
        Console.WriteLine( formatter, aSingl, _
            BitConverter.ToString( BitConverter.GetBytes( aSingl ) ) )
        Console.WriteLine( formatter, aLong, _
            BitConverter.ToString( BitConverter.GetBytes( aLong ) ) )
        Console.WriteLine( formatter, anInt, _
            BitConverter.ToString( BitConverter.GetBytes( anInt ) ) )
        Console.WriteLine( formatter, aShort, _
            BitConverter.ToString( BitConverter.GetBytes( aShort ) ) )
        Console.WriteLine( formatter, aChar, _
            BitConverter.ToString( BitConverter.GetBytes( aChar ) ) )
        Console.WriteLine( formatter, aBool, _
            BitConverter.ToString( BitConverter.GetBytes( aBool ) ) )
    End Sub
End Module

' This example of methods of the BitConverter class
' generates the following output.
'
'                  argument                    Byte array
'                  --------                    ----------
'         0.111111111111111       1C-C7-71-1C-C7-71-BC-3F
'                 0.1111111                   39-8E-E3-3D
'       1111111111111111111       C7-71-C4-2B-AB-75-6B-0F
'                1111111111                   C7-35-3A-42
'                     11111                         67-2B
'                         *                         2A-00
'                      True                            01

// Example of BitConverter class methods.
using System;

class BitConverterDemo
{
    public static void Main( )
    {
        const string formatter = "{0,25}{1,30}";

        double  aDoubl  = 0.1111111111111111111;
        float   aSingl  = 0.1111111111111111111F;
        long    aLong   = 1111111111111111111;
        int     anInt   = 1111111111;
        short   aShort  = 11111;
        char    aChar   = '*';
        bool    aBool   = true;

        Console.WriteLine(
            "This example of methods of the BitConverter class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( formatter, "argument", "byte array" );
        Console.WriteLine( formatter, "--------", "----------" );

        // Convert values to Byte arrays and display them.
        Console.WriteLine( formatter, aDoubl,
            BitConverter.ToString( BitConverter.GetBytes( aDoubl ) ) );
        Console.WriteLine( formatter, aSingl,
            BitConverter.ToString( BitConverter.GetBytes( aSingl ) ) );
        Console.WriteLine( formatter, aLong,
            BitConverter.ToString( BitConverter.GetBytes( aLong ) ) );
        Console.WriteLine( formatter, anInt,
            BitConverter.ToString( BitConverter.GetBytes( anInt ) ) );
        Console.WriteLine( formatter, aShort,
            BitConverter.ToString( BitConverter.GetBytes( aShort ) ) );
        Console.WriteLine( formatter, aChar,
            BitConverter.ToString( BitConverter.GetBytes( aChar ) ) );
        Console.WriteLine( formatter, aBool,
            BitConverter.ToString( BitConverter.GetBytes( aBool ) ) );
    }
}

/*
This example of methods of the BitConverter class
generates the following output.

                 argument                    byte array
                 --------                    ----------
        0.111111111111111       1C-C7-71-1C-C7-71-BC-3F
                0.1111111                   39-8E-E3-3D
      1111111111111111111       C7-71-C4-2B-AB-75-6B-0F
               1111111111                   C7-35-3A-42
                    11111                         67-2B
                        *                         2A-00
                     True                            01
*/

// Example of BitConverter class methods.
using namespace System;
int main()
{
   String^ formatter = "{0,25}{1,30}";
   double aDoubl = 0.1111111111111111111;
   float aSingl = 0.1111111111111111111F;
   __int64 aLong = 1111111111111111111;
   int anInt = 1111111111;
   short aShort = 11111;
   __wchar_t aChar = L'*';
   bool aBool = true;
   Console::WriteLine( "This example of methods of the BitConverter class"
   "\ngenerates the following output.\n" );
   Console::WriteLine( formatter, "argument", "byte array" );
   Console::WriteLine( formatter, "--------", "----------" );

   // Convert values to Byte arrays and display them.
   Console::WriteLine( formatter, aDoubl, BitConverter::ToString( BitConverter::GetBytes( aDoubl ) ) );
   Console::WriteLine( formatter, aSingl, BitConverter::ToString( BitConverter::GetBytes( aSingl ) ) );
   Console::WriteLine( formatter, aLong, BitConverter::ToString( BitConverter::GetBytes( aLong ) ) );
   Console::WriteLine( formatter, anInt, BitConverter::ToString( BitConverter::GetBytes( anInt ) ) );
   Console::WriteLine( formatter, aShort, BitConverter::ToString( BitConverter::GetBytes( aShort ) ) );
   Console::WriteLine( formatter, aChar, BitConverter::ToString( BitConverter::GetBytes( aChar ) ) );
   Console::WriteLine( formatter, aBool, BitConverter::ToString( BitConverter::GetBytes( aBool ) ) );
}

/*
This example of methods of the BitConverter class
generates the following output.

                 argument                    byte array
                 --------                    ----------
        0.111111111111111       1C-C7-71-1C-C7-71-BC-3F
                0.1111111                   39-8E-E3-3D
      1111111111111111111       C7-71-C4-2B-AB-75-6B-0F
               1111111111                   C7-35-3A-42
                    11111                         67-2B
                        *                         2A-00
                     True                            01
*/

System System..::.BitConverterBitConverter
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 成员
System 命名空间
Byte


BitConverter 成员

BitConverter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BitConverter 类

将基础数据类型与字节数组相互转换。

BitConverter 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

BitConverter 类
System 命名空间


BitConverter 字段

BitConverter 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BitConverter 类

BitConverter 类型公开以下成员。

名称 说明
页首

参考

BitConverter 类
System 命名空间


BitConverter ..::.IsLittleEndian 字段

BitConverter
.
.
::
.
IsLittleEndian 字段
BitConverter 类

指示数据在此计算机结构中存储时的字节顺序（“Endian”性质）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly IsLittleEndian As Boolean
public static readonly bool IsLittleEndian
public:
static initonly bool IsLittleEndian
static val IsLittleEndian: bool

如果结构为 Little-endian，则该值为 true；如果结构为 Big-endian，则该值为 false。

不同的计算机结构采用不同的字节顺序存储数据。”Big-endian”表示最大的有效字节位于单词的左端。”Little-endian”表示最大的有效字节位于单词的右端。 不同的计算机结构采用不同的字节顺序存储数据。”Big-endian”表示最大的有效字节位于单词的左端。”Little-endian”表示最大的有效字节位于单词的右端。 不同的计算机结构采用不同的字节顺序存储数据。”Big-endian”表示最大的有效字节位于单词的左端。”Little-endian”表示最大的有效字节位于单词的右端。

下面的代码示例阐释了如何使用 IsLittleEndian 字段。

' Example of the BitConverter.IsLittleEndian field.
Imports System
Imports Microsoft.VisualBasic

Module LittleEndDemo
    Sub Main( )
        Console.WriteLine( _
            "This example of the BitConverter.IsLittleEndian " & _
            "field generates " & vbCrLf & "the following output " & _
            "when run on x86-class computers." & vbCrLf )
        Console.WriteLine( "IsLittleEndian:  {0}", _
            BitConverter.IsLittleEndian )
    End Sub
End Module

' This example of the BitConverter.IsLittleEndian field generates
' the following output when run on x86-class computers.
'
' IsLittleEndian:  True

// Example of the BitConverter.IsLittleEndian field.
using System;

class LittleEndDemo
{
    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.IsLittleEndian field " +
            "generates \nthe following output when run on " +
            "x86-class computers.\n");
        Console.WriteLine( "IsLittleEndian:  {0}",
            BitConverter.IsLittleEndian );
    }
}

/*
This example of the BitConverter.IsLittleEndian field generates
the following output when run on x86-class computers.

IsLittleEndian:  True
*/

// Example of the BitConverter::IsLittleEndian field.
using namespace System;
int main()
{
   Console::WriteLine( "This example of the BitConverter::IsLittleEndian field "
   "generates \nthe following output when run on "
   "x86-class computers.\n" );
   Console::WriteLine( "IsLittleEndian:  {0}", BitConverter::IsLittleEndian );
}

/*
This example of the BitConverter::IsLittleEndian field generates
the following output when run on x86-class computers.

IsLittleEndian:  True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间


BitConverter 方法

BitConverter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BitConverter 类

BitConverter 类型公开以下成员。

名称 说明
页首

参考

BitConverter 类
System 命名空间


BitConverter ..::.DoubleToInt64Bits 方法

BitConverter
.
.
::
.
DoubleToInt64Bits 方法
BitConverter 类

将指定的双精度浮点数转换为 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function DoubleToInt64Bits ( _
    value As Double _
) As Long
public static long DoubleToInt64Bits(
    double value
)
public:
static long long DoubleToInt64Bits(
    double value
)
static member DoubleToInt64Bits :
        value:float -> int64

参数

value
类型： System Double
要转换的数字。

返回值

类型： System Int64
64 位有符号整数，其值等于 value。

下面的代码示例使用 DoubleToInt64Bits 方法将多个 Double 值的位模式转换为 Int64 值。

' Example of the BitConverter.DoubleToInt64Bits method.
Imports System
Imports Microsoft.VisualBasic

Module DoubleToInt64BitsDemo

    Const formatter As String = "{0,25:E16}{1,23:X16}"

    ' Reinterpret the Double argument as a Long.
    Sub DoubleToLongBits( argument As Double )

        Dim longValue    As Long
        longValue = BitConverter.DoubleToInt64Bits( argument )

        ' Display the resulting Long in hexadecimal.
        Console.WriteLine( formatter, argument, longValue )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.DoubleToInt64Bits( " & _
            "Double ) " & vbCrLf & "method generates the " & _
            "following output." & vbCrLf )
        Console.WriteLine( formatter, "Double argument", _
            "hexadecimal value" )
        Console.WriteLine( formatter, "---------------", _
            "-----------------" )

        ' Convert Double values and display the results.
        DoubleToLongBits( 1.0 )
        DoubleToLongBits( 15.0 )
        DoubleToLongBits( 255.0 )
        DoubleToLongBits( 4294967295.0 )
        DoubleToLongBits( 0.00390625 )
        DoubleToLongBits( 0.00000000023283064365386962890625 )
        DoubleToLongBits( 1.234567890123E-300 )
        DoubleToLongBits( 1.23456789012345E-150 )
        DoubleToLongBits( 1.2345678901234565 )
        DoubleToLongBits( 1.2345678901234567 )
        DoubleToLongBits( 1.2345678901234569 )
        DoubleToLongBits( 1.23456789012345678E+150 )
        DoubleToLongBits( 1.234567890123456789E+300 )
        DoubleToLongBits( Double.MinValue )
        DoubleToLongBits( Double.MaxValue )
        DoubleToLongBits( Double.Epsilon )
        DoubleToLongBits( Double.NaN )
        DoubleToLongBits( Double.NegativeInfinity )
        DoubleToLongBits( Double.PositiveInfinity )
    End Sub
End Module

' This example of the BitConverter.DoubleToInt64Bits( Double )
' method generates the following output.
'
'           Double argument      hexadecimal value
'           ---------------      -----------------
'   1.0000000000000000E+000       3FF0000000000000
'   1.5000000000000000E+001       402E000000000000
'   2.5500000000000000E+002       406FE00000000000
'   4.2949672950000000E+009       41EFFFFFFFE00000
'   3.9062500000000000E-003       3F70000000000000
'   2.3283064365386963E-010       3DF0000000000000
'   1.2345678901230000E-300       01AA74FE1C1E7E45
'   1.2345678901234500E-150       20D02A36586DB4BB
'   1.2345678901234565E+000       3FF3C0CA428C59FA
'   1.2345678901234567E+000       3FF3C0CA428C59FB
'   1.2345678901234569E+000       3FF3C0CA428C59FC
'   1.2345678901234569E+150       5F182344CD3CDF9F
'   1.2345678901234569E+300       7E3D7EE8BCBBD352
'  -1.7976931348623157E+308       FFEFFFFFFFFFFFFF
'   1.7976931348623157E+308       7FEFFFFFFFFFFFFF
'   4.9406564584124654E-324       0000000000000001
'                       NaN       FFF8000000000000
'                 -Infinity       FFF0000000000000
'                  Infinity       7FF0000000000000

// Example of the BitConverter.DoubleToInt64Bits method.
using System;

class DoubleToInt64BitsDemo
{
    const string formatter = "{0,25:E16}{1,23:X16}";

    // Reinterpret the double argument as a long.
    public static void DoubleToLongBits( double argument )
    {
        long longValue;
        longValue = BitConverter.DoubleToInt64Bits( argument );

        // Display the resulting long in hexadecimal.
        Console.WriteLine( formatter, argument, longValue );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.DoubleToInt64Bits( " +
            "double ) \nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "double argument",
            "hexadecimal value" );
        Console.WriteLine( formatter, "---------------",
            "-----------------" );

        // Convert double values and display the results.
        DoubleToLongBits( 1.0 );
        DoubleToLongBits( 15.0 );
        DoubleToLongBits( 255.0 );
        DoubleToLongBits( 4294967295.0 );
        DoubleToLongBits( 0.00390625 );
        DoubleToLongBits( 0.00000000023283064365386962890625 );
        DoubleToLongBits( 1.234567890123E-300 );
        DoubleToLongBits( 1.23456789012345E-150 );
        DoubleToLongBits( 1.2345678901234565 );
        DoubleToLongBits( 1.2345678901234567 );
        DoubleToLongBits( 1.2345678901234569 );
        DoubleToLongBits( 1.23456789012345678E+150 );
        DoubleToLongBits( 1.234567890123456789E+300 );
        DoubleToLongBits( double.MinValue );
        DoubleToLongBits( double.MaxValue );
        DoubleToLongBits( double.Epsilon );
        DoubleToLongBits( double.NaN );
        DoubleToLongBits( double.NegativeInfinity );
        DoubleToLongBits( double.PositiveInfinity );
    }
}

/*
This example of the BitConverter.DoubleToInt64Bits( double )
method generates the following output.

          double argument      hexadecimal value
          ---------------      -----------------
  1.0000000000000000E+000       3FF0000000000000
  1.5000000000000000E+001       402E000000000000
  2.5500000000000000E+002       406FE00000000000
  4.2949672950000000E+009       41EFFFFFFFE00000
  3.9062500000000000E-003       3F70000000000000
  2.3283064365386963E-010       3DF0000000000000
  1.2345678901230000E-300       01AA74FE1C1E7E45
  1.2345678901234500E-150       20D02A36586DB4BB
  1.2345678901234565E+000       3FF3C0CA428C59FA
  1.2345678901234567E+000       3FF3C0CA428C59FB
  1.2345678901234569E+000       3FF3C0CA428C59FC
  1.2345678901234569E+150       5F182344CD3CDF9F
  1.2345678901234569E+300       7E3D7EE8BCBBD352
 -1.7976931348623157E+308       FFEFFFFFFFFFFFFF
  1.7976931348623157E+308       7FEFFFFFFFFFFFFF
  4.9406564584124654E-324       0000000000000001
                      NaN       FFF8000000000000
                -Infinity       FFF0000000000000
                 Infinity       7FF0000000000000
*/

// Example of the BitConverter::DoubleToInt64Bits method.
using namespace System;

// Reinterpret the double argument as an __int64.
void DoubleToLongBits( double argument )
{
   __int64 longValue;
   longValue = BitConverter::DoubleToInt64Bits( argument );

   // Display the resulting __int64 in hexadecimal.
   Console::WriteLine( "{0,25:E16}{1,23:X16}", argument, longValue );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::DoubleToInt64Bits( "
   "double ) \nmethod generates the following output.\n" );
   Console::WriteLine( "{0,25:E16}{1,23:X16}", "double argument", "hexadecimal value" );
   Console::WriteLine( "{0,25:E16}{1,23:X16}", "---------------", "-----------------" );

   // Convert double values and display the results.
   DoubleToLongBits( 1.0 );
   DoubleToLongBits( 15.0 );
   DoubleToLongBits( 255.0 );
   DoubleToLongBits( 4294967295.0 );
   DoubleToLongBits( 0.00390625 );
   DoubleToLongBits( 0.00000000023283064365386962890625 );
   DoubleToLongBits( 1.234567890123E-300 );
   DoubleToLongBits( 1.23456789012345E-150 );
   DoubleToLongBits( 1.2345678901234565 );
   DoubleToLongBits( 1.2345678901234567 );
   DoubleToLongBits( 1.2345678901234569 );
   DoubleToLongBits( 1.23456789012345678E+150 );
   DoubleToLongBits( 1.234567890123456789E+300 );
   DoubleToLongBits( Double::MinValue );
   DoubleToLongBits( Double::MaxValue );
   DoubleToLongBits( Double::Epsilon );
   DoubleToLongBits( Double::NaN );
   DoubleToLongBits( Double::NegativeInfinity );
   DoubleToLongBits( Double::PositiveInfinity );
}

/*
This example of the BitConverter::DoubleToInt64Bits( double )
method generates the following output.

          double argument      hexadecimal value
          ---------------      -----------------
  1.0000000000000000E+000       3FF0000000000000
  1.5000000000000000E+001       402E000000000000
  2.5500000000000000E+002       406FE00000000000
  4.2949672950000000E+009       41EFFFFFFFE00000
  3.9062500000000000E-003       3F70000000000000
  2.3283064365386963E-010       3DF0000000000000
  1.2345678901230000E-300       01AA74FE1C1E7E45
  1.2345678901234500E-150       20D02A36586DB4BB
  1.2345678901234565E+000       3FF3C0CA428C59FA
  1.2345678901234567E+000       3FF3C0CA428C59FB
  1.2345678901234569E+000       3FF3C0CA428C59FC
  1.2345678901234569E+150       5F182344CD3CDF9F
  1.2345678901234569E+300       7E3D7EE8BCBBD352
 -1.7976931348623157E+308       FFEFFFFFFFFFFFFF
  1.7976931348623157E+308       7FEFFFFFFFFFFFFF
  4.9406564584124654E-324       0000000000000001
                      NaN       FFF8000000000000
                -Infinity       FFF0000000000000
                 Infinity       7FF0000000000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BitConverter 类
BitConverter 成员
System 命名空间


BitConverter ..::.GetBytes 方法

BitConverter
.
.
::
.
GetBytes 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BitConverter 类

将指定的数据转换为字节数组。

名称 说明
页首

参考

BitConverter 类
BitConverter 成员
System 命名空间


BitConverter ..::.GetBytes 方法 (Boolean)

BitConverter
.
.
::
.
GetBytes 方法 (Boolean)
BitConverter 类

以字节数组的形式返回指定的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetBytes ( _
    value As Boolean _
) As Byte()
public static byte[] GetBytes(
    bool value
)
public:
static array<unsigned char>^ GetBytes(
    bool value
)
static member GetBytes :
        value:bool -> byte[]

参数

value
类型： System Boolean
一个布尔值。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 1 的字节数组。

下面的代码示例使用 GetBytes 方法将 Boolean 值的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( Boolean ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetBytesBoolDemo

    Const formatter As String = "{0,10}{1,16}"

    ' Convert a Boolean argument to a Byte array and display it.
    Sub GetBytesBool( argument As Boolean )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( " & _
            "Boolean ) " & vbCrLf & "method generates the " & _
            "following output." & vbCrLf )
        Console.WriteLine( formatter, "Boolean", "Byte array" )
        Console.WriteLine( formatter, "-------", "----------" )

        ' Convert Boolean values and display the results.
        GetBytesBool( False )
        GetBytesBool( True )
    End Sub
End Module

' This example of the BitConverter.GetBytes( Boolean )
' method generates the following output.
'
'    Boolean      Byte array
'    -------      ----------
'      False              00
'       True              01

// Example of the BitConverter.GetBytes( bool ) method.
using System;

class GetBytesBoolDemo
{
    const string formatter = "{0,10}{1,16}";

    // Convert a bool argument to a byte array and display it.
    public static void GetBytesBool( bool argument )
    {
        byte[ ] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( bool ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "bool", "byte array" );
        Console.WriteLine( formatter, "----", "----------" );

        // Convert bool values and display the results.
        GetBytesBool( false );
        GetBytesBool( true );
    }
}

/*
This example of the BitConverter.GetBytes( bool )
method generates the following output.

      bool      byte array
      ----      ----------
     False              00
      True              01
*/

// Example of the BitConverter::GetBytes( bool ) method.
using namespace System;

// Convert a bool argument to a byte array and display it.
void GetBytesBool( bool argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,10}{1,16}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( bool ) "
   "\nmethod generates the following output.\n" );
   Console::WriteLine( "{0,10}{1,16}", "bool", "byte array" );
   Console::WriteLine( "{0,10}{1,16}", "----", "----------" );

   // Convert bool values and display the results.
   GetBytesBool( false );
   GetBytesBool( true );
}

/*
This example of the BitConverter::GetBytes( bool )
method generates the following output.

      bool      byte array
      ----      ----------
     False              00
      True              01
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.GetBytes 方法 (Char)

BitConverter
.
.
::
.
GetBytes 方法 (Char)
BitConverter 类

以字节数组的形式返回指定的 Unicode 字符值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetBytes ( _
    value As Char _
) As Byte()
public static byte[] GetBytes(
    char value
)
public:
static array<unsigned char>^ GetBytes(
    wchar_t value
)
static member GetBytes :
        value:char -> byte[]

参数

value
类型： System Char
要转换的字符。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 2 的字节数组。

下面的代码示例使用 GetBytes 方法将 Char 值（Unicode 字符）的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( Char ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetBytesCharDemo

    Const formatter As String = "{0,10}{1,16}"

    ' Convert a Char argument to a Byte array and display it.
    Sub GetBytesChar( argument As Char )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( Char ) " & _
            vbCrLf & "method generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "Char", "Byte array" )
        Console.WriteLine( formatter, "----", "----------" )

        ' Convert Char values and display the results.
        GetBytesChar( Chr( 0 ) )
        GetBytesChar( " "c )
        GetBytesChar( "*"c )
        GetBytesChar( "3"c )
        GetBytesChar( "A"c )
        GetBytesChar( "["c )
        GetBytesChar( "a"c )
        GetBytesChar( "{"c )
    End Sub
End Module

' This example of the BitConverter.GetBytes( Char )
' method generates the following output.
'
'       Char      Byte array
'       ----      ----------
'                      00-00
'                      20-00
'          *           2A-00
'          3           33-00
'          A           41-00
'          [           5B-00
'          a           61-00
'          {           7B-00

// Example of the BitConverter.GetBytes( char ) method.
using System;

class GetBytesCharDemo
{
    const string formatter = "{0,10}{1,16}";

    // Convert a char argument to a byte array and display it.
    public static void GetBytesChar( char argument )
    {
        byte[ ] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( char ) " +
            "\nmethod generates the following output.\r\n" );
        Console.WriteLine( formatter, "char", "byte array" );
        Console.WriteLine( formatter, "----", "----------" );

        // Convert char values and display the results.
        GetBytesChar( '\0' );
        GetBytesChar( ' ' );
        GetBytesChar( '*' );
        GetBytesChar( '3' );
        GetBytesChar( 'A' );
        GetBytesChar( '[' );
        GetBytesChar( 'a' );
        GetBytesChar( '{' );
    }
}

/*
This example of the BitConverter.GetBytes( char )
method generates the following output.

      char      byte array
      ----      ----------
                     00-00
                     20-00
         *           2A-00
         3           33-00
         A           41-00
         [           5B-00
         a           61-00
         {           7B-00
*/

// Example of the BitConverter::GetBytes( __wchar_t ) method.
using namespace System;

// Convert a __wchar_t argument to a byte array and display it.
void GetBytesChar( __wchar_t argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,10}{1,16}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( __wchar_t ) "
   "\nmethod generates the following output.\n" );
   Console::WriteLine( "{0,10}{1,16}", "__wchar_t", "byte array" );
   Console::WriteLine( "{0,10}{1,16}", "---------", "----------" );

   // Convert __wchar_t values and display the results.
   GetBytesChar( L'\0' );
   GetBytesChar( L' ' );
   GetBytesChar( L'*' );
   GetBytesChar( L'3' );
   GetBytesChar( L'A' );
   GetBytesChar( L'[' );
   GetBytesChar( L'a' );
   GetBytesChar( L'{' );
}

/*
This example of the BitConverter::GetBytes( __wchar_t )
method generates the following output.

 __wchar_t      byte array
 ---------      ----------
                     00-00
                     20-00
         *           2A-00
         3           33-00
         A           41-00
         [           5B-00
         a           61-00
         {           7B-00
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.GetBytes 方法 (Double)

BitConverter
.
.
::
.
GetBytes 方法 (Double)
BitConverter 类

以字节数组的形式返回指定的双精度浮点值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetBytes ( _
    value As Double _
) As Byte()
public static byte[] GetBytes(
    double value
)
public:
static array<unsigned char>^ GetBytes(
    double value
)
static member GetBytes :
        value:float -> byte[]

参数

value
类型： System Double
要转换的数字。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 8 的字节数组。

下面的代码示例使用 GetBytes 方法将 Double 值的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( Double ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetBytesDoubleDemo

    Const formatter As String = "{0,25:E16}{1,30}"

    ' Convert a Double argument to a Byte array and display it.
    Sub GetBytesDouble( argument As Double )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( Double ) " & _
            vbCrLf & "method generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "Double", "Byte array" )
        Console.WriteLine( formatter, "------", "----------" )

        ' Convert Double values and display the results.
        GetBytesDouble( 0.0 )
        GetBytesDouble( 1.0 )
        GetBytesDouble( 255.0 )
        GetBytesDouble( 4294967295.0 )
        GetBytesDouble( 0.00390625 )
        GetBytesDouble( 0.00000000023283064365386962890625 )
        GetBytesDouble( 1.23456789012345E-300 )
        GetBytesDouble( 1.2345678901234565 )
        GetBytesDouble( 1.2345678901234567 )
        GetBytesDouble( 1.2345678901234569 )
        GetBytesDouble( 1.23456789012345678E+300 )
        GetBytesDouble( Double.MinValue )
        GetBytesDouble( Double.MaxValue )
        GetBytesDouble( Double.Epsilon )
        GetBytesDouble( Double.NaN )
        GetBytesDouble( Double.NegativeInfinity )
        GetBytesDouble( Double.PositiveInfinity )
    End Sub
End Module

' This example of the BitConverter.GetBytes( Double )
' method generates the following output.
'
'                    Double                    Byte array
'                    ------                    ----------
'   0.0000000000000000E+000       00-00-00-00-00-00-00-00
'   1.0000000000000000E+000       00-00-00-00-00-00-F0-3F
'   2.5500000000000000E+002       00-00-00-00-00-E0-6F-40
'   4.2949672950000000E+009       00-00-E0-FF-FF-FF-EF-41
'   3.9062500000000000E-003       00-00-00-00-00-00-70-3F
'   2.3283064365386963E-010       00-00-00-00-00-00-F0-3D
'   1.2345678901234500E-300       DF-88-1E-1C-FE-74-AA-01
'   1.2345678901234565E+000       FA-59-8C-42-CA-C0-F3-3F
'   1.2345678901234567E+000       FB-59-8C-42-CA-C0-F3-3F
'   1.2345678901234569E+000       FC-59-8C-42-CA-C0-F3-3F
'   1.2345678901234569E+300       52-D3-BB-BC-E8-7E-3D-7E
'  -1.7976931348623157E+308       FF-FF-FF-FF-FF-FF-EF-FF
'   1.7976931348623157E+308       FF-FF-FF-FF-FF-FF-EF-7F
'   4.9406564584124654E-324       01-00-00-00-00-00-00-00
'                       NaN       00-00-00-00-00-00-F8-FF
'                 -Infinity       00-00-00-00-00-00-F0-FF
'                  Infinity       00-00-00-00-00-00-F0-7F

// Example of the BitConverter.GetBytes( double ) method.
using System;

class GetBytesDoubleDemo
{
    const string formatter = "{0,25:E16}{1,30}";

    // Convert a double argument to a byte array and display it.
    public static void GetBytesDouble( double argument )
    {
        byte[ ] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( double ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "double", "byte array" );
        Console.WriteLine( formatter, "------", "----------" );

        // Convert double values and display the results.
        GetBytesDouble( 0.0 );
        GetBytesDouble( 1.0 );
        GetBytesDouble( 255.0 );
        GetBytesDouble( 4294967295.0 );
        GetBytesDouble( 0.00390625 );
        GetBytesDouble( 0.00000000023283064365386962890625 );
        GetBytesDouble( 1.23456789012345E-300 );
        GetBytesDouble( 1.2345678901234565 );
        GetBytesDouble( 1.2345678901234567 );
        GetBytesDouble( 1.2345678901234569 );
        GetBytesDouble( 1.23456789012345678E+300 );
        GetBytesDouble( double.MinValue );
        GetBytesDouble( double.MaxValue );
        GetBytesDouble( double.Epsilon );
        GetBytesDouble( double.NaN );
        GetBytesDouble( double.NegativeInfinity );
        GetBytesDouble( double.PositiveInfinity );
    }
}

/*
This example of the BitConverter.GetBytes( double )
method generates the following output.

                   double                    byte array
                   ------                    ----------
  0.0000000000000000E+000       00-00-00-00-00-00-00-00
  1.0000000000000000E+000       00-00-00-00-00-00-F0-3F
  2.5500000000000000E+002       00-00-00-00-00-E0-6F-40
  4.2949672950000000E+009       00-00-E0-FF-FF-FF-EF-41
  3.9062500000000000E-003       00-00-00-00-00-00-70-3F
  2.3283064365386963E-010       00-00-00-00-00-00-F0-3D
  1.2345678901234500E-300       DF-88-1E-1C-FE-74-AA-01
  1.2345678901234565E+000       FA-59-8C-42-CA-C0-F3-3F
  1.2345678901234567E+000       FB-59-8C-42-CA-C0-F3-3F
  1.2345678901234569E+000       FC-59-8C-42-CA-C0-F3-3F
  1.2345678901234569E+300       52-D3-BB-BC-E8-7E-3D-7E
 -1.7976931348623157E+308       FF-FF-FF-FF-FF-FF-EF-FF
  1.7976931348623157E+308       FF-FF-FF-FF-FF-FF-EF-7F
  4.9406564584124654E-324       01-00-00-00-00-00-00-00
                      NaN       00-00-00-00-00-00-F8-FF
                -Infinity       00-00-00-00-00-00-F0-FF
                 Infinity       00-00-00-00-00-00-F0-7F
*/

// Example of the BitConverter::GetBytes( double ) method.
using namespace System;

// Convert a double argument to a byte array and display it.
void GetBytesDouble( double argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,25:E16}{1,30}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( double ) "
   "\nmethod generates the following output.\n" );
   Console::WriteLine( "{0,25:E16}{1,30}", "double", "byte array" );
   Console::WriteLine( "{0,25:E16}{1,30}", "------", "----------" );

   // Convert double values and display the results.
   GetBytesDouble( 0.0 );
   GetBytesDouble( 1.0 );
   GetBytesDouble( 255.0 );
   GetBytesDouble( 4294967295.0 );
   GetBytesDouble( 0.00390625 );
   GetBytesDouble( 0.00000000023283064365386962890625 );
   GetBytesDouble( 1.23456789012345E-300 );
   GetBytesDouble( 1.2345678901234565 );
   GetBytesDouble( 1.2345678901234567 );
   GetBytesDouble( 1.2345678901234569 );
   GetBytesDouble( 1.23456789012345678E+300 );
   GetBytesDouble( Double::MinValue );
   GetBytesDouble( Double::MaxValue );
   GetBytesDouble( Double::Epsilon );
   GetBytesDouble( Double::NaN );
   GetBytesDouble( Double::NegativeInfinity );
   GetBytesDouble( Double::PositiveInfinity );
}

/*
This example of the BitConverter::GetBytes( double )
method generates the following output.

                   double                    byte array
                   ------                    ----------
  0.0000000000000000E+000       00-00-00-00-00-00-00-00
  1.0000000000000000E+000       00-00-00-00-00-00-F0-3F
  2.5500000000000000E+002       00-00-00-00-00-E0-6F-40
  4.2949672950000000E+009       00-00-E0-FF-FF-FF-EF-41
  3.9062500000000000E-003       00-00-00-00-00-00-70-3F
  2.3283064365386963E-010       00-00-00-00-00-00-F0-3D
  1.2345678901234500E-300       DF-88-1E-1C-FE-74-AA-01
  1.2345678901234565E+000       FA-59-8C-42-CA-C0-F3-3F
  1.2345678901234567E+000       FB-59-8C-42-CA-C0-F3-3F
  1.2345678901234569E+000       FC-59-8C-42-CA-C0-F3-3F
  1.2345678901234569E+300       52-D3-BB-BC-E8-7E-3D-7E
 -1.7976931348623157E+308       FF-FF-FF-FF-FF-FF-EF-FF
  1.7976931348623157E+308       FF-FF-FF-FF-FF-FF-EF-7F
  4.9406564584124654E-324       01-00-00-00-00-00-00-00
                      NaN       00-00-00-00-00-00-F8-FF
                -Infinity       00-00-00-00-00-00-F0-FF
                 Infinity       00-00-00-00-00-00-F0-7F
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.GetBytes 方法 (Int16)

BitConverter
.
.
::
.
GetBytes 方法 (Int16)
BitConverter 类

以字节数组的形式返回指定的 16 位有符号整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetBytes ( _
    value As Short _
) As Byte()
public static byte[] GetBytes(
    short value
)
public:
static array<unsigned char>^ GetBytes(
    short value
)
static member GetBytes :
        value:int16 -> byte[]

参数

value
类型： System Int16
要转换的数字。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 2 的字节数组。

下面的代码示例使用 GetBytes 方法将 Int16 值的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( Short ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetBytesInt16Demo

    Const formatter As String = "{0,10}{1,13}"

    ' Convert a Short argument to a Byte array and display it.
    Sub GetBytesInt16( argument As Short )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( Short ) " & _
            vbCrLf & "method generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "Short", "Byte array" )
        Console.WriteLine( formatter, "-----", "----------" )

        ' Convert Short values and display the results.
        GetBytesInt16( 0 )
        GetBytesInt16( 15 )
        GetBytesInt16( -15 )
        GetBytesInt16( 10000 )
        GetBytesInt16( -10000 )
        GetBytesInt16( Short.MinValue )
        GetBytesInt16( Short.MaxValue )
    End Sub
End Module

' This example of the BitConverter.GetBytes( Short )
' method generates the following output.
'
'      Short   Byte array
'      -----   ----------
'          0        00-00
'         15        0F-00
'        -15        F1-FF
'      10000        10-27
'     -10000        F0-D8
'     -32768        00-80
'      32767        FF-7F

// Example of the BitConverter.GetBytes( short ) method.
using System;

class GetBytesInt16Demo
{
    const string formatter = "{0,10}{1,13}";

    // Convert a short argument to a byte array and display it.
    public static void GetBytesInt16( short argument )
    {
        byte[ ] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( short ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "short", "byte array" );
        Console.WriteLine( formatter, "-----", "----------" );

        // Convert short values and display the results.
        GetBytesInt16( 0 );
        GetBytesInt16( 15 );
        GetBytesInt16( -15 );
        GetBytesInt16( 10000 );
        GetBytesInt16( -10000 );
        GetBytesInt16( short.MinValue );
        GetBytesInt16( short.MaxValue );
    }
}

/*
This example of the BitConverter.GetBytes( short )
method generates the following output.

     short   byte array
     -----   ----------
         0        00-00
        15        0F-00
       -15        F1-FF
     10000        10-27
    -10000        F0-D8
    -32768        00-80
     32767        FF-7F
*/

// Example of the BitConverter::GetBytes( short ) method.
using namespace System;

// Convert a short argument to a byte array and display it.
void GetBytesInt16( short argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,10}{1,13}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( short ) "
   "\nmethod generates the following output.\n" );
   Console::WriteLine( "{0,10}{1,13}", "short", "byte array" );
   Console::WriteLine( "{0,10}{1,13}", "-----", "----------" );

   // Convert short values and display the results.
   GetBytesInt16( 0 );
   GetBytesInt16( 15 );
   GetBytesInt16(  -15 );
   GetBytesInt16( 10000 );
   GetBytesInt16(  -10000 );
   GetBytesInt16( Int16::MinValue );
   GetBytesInt16( Int16::MaxValue );
}

/*
This example of the BitConverter::GetBytes( short )
method generates the following output.

     short   byte array
     -----   ----------
         0        00-00
        15        0F-00
       -15        F1-FF
     10000        10-27
    -10000        F0-D8
    -32768        00-80
     32767        FF-7F
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.GetBytes 方法 (Int32)

BitConverter
.
.
::
.
GetBytes 方法 (Int32)
BitConverter 类

以字节数组的形式返回指定的 32 位有符号整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetBytes ( _
    value As Integer _
) As Byte()
public static byte[] GetBytes(
    int value
)
public:
static array<unsigned char>^ GetBytes(
    int value
)
static member GetBytes :
        value:int -> byte[]

参数

value
类型： System Int32
要转换的数字。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 4 的字节数组。

下面的代码示例使用 GetBytes 方法将 Int32 值的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( Integer ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetBytesInt32Demo

    Const formatter As String = "{0,16}{1,20}"

    ' Convert an Integer argument to a Byte array and display it.
    Sub GetBytesInt32( argument As Integer )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( Integer ) " & _
            vbCrLf & "method generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "Integer", "Byte array" )
        Console.WriteLine( formatter, "-------", "----------" )

        ' Convert Integer values and display the results.
        GetBytesInt32( 0 )
        GetBytesInt32( 15 )
        GetBytesInt32( -15 )
        GetBytesInt32( &H100000 )
        GetBytesInt32( -&H100000 )
        GetBytesInt32( 1000000000 )
        GetBytesInt32( -1000000000 )
        GetBytesInt32( Integer.MinValue )
        GetBytesInt32( Integer.MaxValue )
    End Sub
End Module

' This example of the BitConverter.GetBytes( Integer )
' method generates the following output.
'
'          Integer          Byte array
'          -------          ----------
'                0         00-00-00-00
'               15         0F-00-00-00
'              -15         F1-FF-FF-FF
'          1048576         00-00-10-00
'         -1048576         00-00-F0-FF
'       1000000000         00-CA-9A-3B
'      -1000000000         00-36-65-C4
'      -2147483648         00-00-00-80
'       2147483647         FF-FF-FF-7F

// Example of the BitConverter.GetBytes( int ) method.
using System;

class GetBytesInt32Demo
{
    const string formatter = "{0,16}{1,20}";

    // Convert an int argument to a byte array and display it.
    public static void GetBytesInt32( int argument )
    {
        byte[ ] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( int ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "int", "byte array" );
        Console.WriteLine( formatter, "---", "----------" );

        // Convert int values and display the results.
        GetBytesInt32( 0 );
        GetBytesInt32( 15 );
        GetBytesInt32( -15 );
        GetBytesInt32( 0x100000 );
        GetBytesInt32( -0x100000 );
        GetBytesInt32( 1000000000 );
        GetBytesInt32( -1000000000 );
        GetBytesInt32( int.MinValue );
        GetBytesInt32( int.MaxValue );
    }
}

/*
This example of the BitConverter.GetBytes( int )
method generates the following output.

             int          byte array
             ---          ----------
               0         00-00-00-00
              15         0F-00-00-00
             -15         F1-FF-FF-FF
         1048576         00-00-10-00
        -1048576         00-00-F0-FF
      1000000000         00-CA-9A-3B
     -1000000000         00-36-65-C4
     -2147483648         00-00-00-80
      2147483647         FF-FF-FF-7F
*/

// Example of the BitConverter::GetBytes( int ) method.
using namespace System;

// Convert an int argument to a byte array and display it.
void GetBytesInt32( int argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,16}{1,20}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( int ) "
   "\nmethod generates the following output.\n" );
   Console::WriteLine( "{0,16}{1,20}", "int", "byte array" );
   Console::WriteLine( "{0,16}{1,20}", "---", "----------" );

   // Convert int values and display the results.
   GetBytesInt32( 0 );
   GetBytesInt32( 15 );
   GetBytesInt32(  -15 );
   GetBytesInt32( 0x100000 );
   GetBytesInt32(  -0x100000 );
   GetBytesInt32( 1000000000 );
   GetBytesInt32(  -1000000000 );
   GetBytesInt32( Int32::MinValue );
   GetBytesInt32( Int32::MaxValue );
}

/*
This example of the BitConverter::GetBytes( int )
method generates the following output.

             int          byte array
             ---          ----------
               0         00-00-00-00
              15         0F-00-00-00
             -15         F1-FF-FF-FF
         1048576         00-00-10-00
        -1048576         00-00-F0-FF
      1000000000         00-CA-9A-3B
     -1000000000         00-36-65-C4
     -2147483648         00-00-00-80
      2147483647         FF-FF-FF-7F
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.GetBytes 方法 (Int64)

BitConverter
.
.
::
.
GetBytes 方法 (Int64)
BitConverter 类

以字节数组的形式返回指定的 64 位有符号整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetBytes ( _
    value As Long _
) As Byte()
public static byte[] GetBytes(
    long value
)
public:
static array<unsigned char>^ GetBytes(
    long long value
)
static member GetBytes :
        value:int64 -> byte[]

参数

value
类型： System Int64
要转换的数字。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 8 的字节数组。

下面的代码示例使用 GetBytes 方法将 Int64 值的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( Long ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetBytesInt64Demo

    Const formatter As String = "{0,22}{1,30}"

    ' Convert a Long argument to a Byte array and display it.
    Sub GetBytesInt64( argument As Long )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( Long ) " & _
            vbCrLf & "method generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "Long", "Byte array" )
        Console.WriteLine( formatter, "----", "----------" )

        ' Convert Long values and display the results.
        GetBytesInt64( 0 )
        GetBytesInt64( &HFFFFFF )
        GetBytesInt64( -&HFFFFFF )
        GetBytesInt64( 1000000000 )
        GetBytesInt64( -1000000000 )
        GetBytesInt64( &H100000000 )
        GetBytesInt64( -&H100000000 )
        GetBytesInt64( &HAAAAAAAAAAAA )
        GetBytesInt64( -&HAAAAAAAAAAAA )
        GetBytesInt64( 1000000000000000000 )
        GetBytesInt64( -1000000000000000000 )
        GetBytesInt64( Long.MinValue )
        GetBytesInt64( Long.MaxValue )
    End Sub
End Module

' This example of the BitConverter.GetBytes( Long )
' method generates the following output.
'
'                   Long                    Byte array
'                   ----                    ----------
'                      0       00-00-00-00-00-00-00-00
'               16777215       FF-FF-FF-00-00-00-00-00
'              -16777215       01-00-00-FF-FF-FF-FF-FF
'             1000000000       00-CA-9A-3B-00-00-00-00
'            -1000000000       00-36-65-C4-FF-FF-FF-FF
'             4294967296       00-00-00-00-01-00-00-00
'            -4294967296       00-00-00-00-FF-FF-FF-FF
'        187649984473770       AA-AA-AA-AA-AA-AA-00-00
'       -187649984473770       56-55-55-55-55-55-FF-FF
'    1000000000000000000       00-00-64-A7-B3-B6-E0-0D
'   -1000000000000000000       00-00-9C-58-4C-49-1F-F2
'   -9223372036854775808       00-00-00-00-00-00-00-80
'    9223372036854775807       FF-FF-FF-FF-FF-FF-FF-7F

// Example of the BitConverter.GetBytes( long ) method.
using System;

class GetBytesInt64Demo
{
    const string formatter = "{0,22}{1,30}";

    // Convert a long argument to a byte array and display it.
    public static void GetBytesInt64( long argument )
    {
        byte[] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( long ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "long", "byte array" );
        Console.WriteLine( formatter, "----", "----------" );

        // Convert long values and display the results.
        GetBytesInt64( 0 );
        GetBytesInt64( 0xFFFFFF );
        GetBytesInt64( -0xFFFFFF );
        GetBytesInt64( 1000000000 );
        GetBytesInt64( -1000000000 );
        GetBytesInt64( 0x100000000 );
        GetBytesInt64( -0x100000000 );
        GetBytesInt64( 0xAAAAAAAAAAAA );
        GetBytesInt64( -0xAAAAAAAAAAAA );
        GetBytesInt64( 1000000000000000000 );
        GetBytesInt64( -1000000000000000000 );
        GetBytesInt64( long.MinValue );
        GetBytesInt64( long.MaxValue );
    }
}

/*
This example of the BitConverter.GetBytes( long )
method generates the following output.

                  long                    byte array
                  ----                    ----------
                     0       00-00-00-00-00-00-00-00
              16777215       FF-FF-FF-00-00-00-00-00
             -16777215       01-00-00-FF-FF-FF-FF-FF
            1000000000       00-CA-9A-3B-00-00-00-00
           -1000000000       00-36-65-C4-FF-FF-FF-FF
            4294967296       00-00-00-00-01-00-00-00
           -4294967296       00-00-00-00-FF-FF-FF-FF
       187649984473770       AA-AA-AA-AA-AA-AA-00-00
      -187649984473770       56-55-55-55-55-55-FF-FF
   1000000000000000000       00-00-64-A7-B3-B6-E0-0D
  -1000000000000000000       00-00-9C-58-4C-49-1F-F2
  -9223372036854775808       00-00-00-00-00-00-00-80
   9223372036854775807       FF-FF-FF-FF-FF-FF-FF-7F
*/

// Example of the BitConverter::GetBytes( __int64 ) method.
using namespace System;

// Convert an __int64 argument to a byte array and display it.
void GetBytesInt64( __int64 argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,22}{1,30}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( __int64 ) "
   "\nmethod generates the following output.\n" );
   Console::WriteLine( "{0,22}{1,30}", "__int64", "byte array" );
   Console::WriteLine( "{0,22}{1,30}", "-------", "----------" );

   // Convert __int64 values and display the results.
   GetBytesInt64( 0 );
   GetBytesInt64( 0xFFFFFF );
   GetBytesInt64(  -0xFFFFFF );
   GetBytesInt64( 1000000000 );
   GetBytesInt64(  -1000000000 );
   GetBytesInt64( 0x100000000 );
   GetBytesInt64(  -0x100000000 );
   GetBytesInt64( 0xAAAAAAAAAAAA );
   GetBytesInt64(  -0xAAAAAAAAAAAA );
   GetBytesInt64( 1000000000000000000 );
   GetBytesInt64(  -1000000000000000000 );
   GetBytesInt64( Int64::MinValue );
   GetBytesInt64( Int64::MaxValue );
}

/*
This example of the BitConverter::GetBytes( __int64 )
method generates the following output.

               __int64                    byte array
               -------                    ----------
                     0       00-00-00-00-00-00-00-00
              16777215       FF-FF-FF-00-00-00-00-00
             -16777215       01-00-00-FF-FF-FF-FF-FF
            1000000000       00-CA-9A-3B-00-00-00-00
           -1000000000       00-36-65-C4-FF-FF-FF-FF
            4294967296       00-00-00-00-01-00-00-00
           -4294967296       00-00-00-00-FF-FF-FF-FF
       187649984473770       AA-AA-AA-AA-AA-AA-00-00
      -187649984473770       56-55-55-55-55-55-FF-FF
   1000000000000000000       00-00-64-A7-B3-B6-E0-0D
  -1000000000000000000       00-00-9C-58-4C-49-1F-F2
  -9223372036854775808       00-00-00-00-00-00-00-80
   9223372036854775807       FF-FF-FF-FF-FF-FF-FF-7F
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.GetBytes 方法 (Single)

BitConverter
.
.
::
.
GetBytes 方法 (Single)
BitConverter 类

以字节数组的形式返回指定的单精度浮点值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetBytes ( _
    value As Single _
) As Byte()
public static byte[] GetBytes(
    float value
)
public:
static array<unsigned char>^ GetBytes(
    float value
)
static member GetBytes :
        value:float32 -> byte[]

参数

value
类型： System Single
要转换的数字。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 4 的字节数组。

下面的代码示例使用 GetBytes 方法将 Single 值的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( Single ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetBytesSingleDemo

    Const formatter As String = "{0,16:E7}{1,20}"

    ' Convert a Single argument to a Byte array and display it.
    Sub GetBytesSingle( argument As Single )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( Single ) " & _
            vbCrLf & "method generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "Single", "Byte array" )
        Console.WriteLine( formatter, "------", "----------" )

        ' Convert Single values and display the results.
        GetBytesSingle( 0.0F )
        GetBytesSingle( 1.0F )
        GetBytesSingle( 15.0F )
        GetBytesSingle( 65535.0F )
        GetBytesSingle( 0.00390625F )
        GetBytesSingle( 0.00000000023283064365386962890625F )
        GetBytesSingle( 1.2345E-35F )
        GetBytesSingle( 1.2345671F )
        GetBytesSingle( 1.2345673F )
        GetBytesSingle( 1.2345677F )
        GetBytesSingle( 1.23456789E+35F )
        GetBytesSingle( Single.MinValue )
        GetBytesSingle( Single.MaxValue )
        GetBytesSingle( Single.Epsilon )
        GetBytesSingle( Single.NaN )
        GetBytesSingle( Single.NegativeInfinity )
        GetBytesSingle( Single.PositiveInfinity )
    End Sub
End Module

' This example of the BitConverter.GetBytes( Single )
' method generates the following output.
'
'           Single          Byte array
'           ------          ----------
'   0.0000000E+000         00-00-00-00
'   1.0000000E+000         00-00-80-3F
'   1.5000000E+001         00-00-70-41
'   6.5535000E+004         00-FF-7F-47
'   3.9062500E-003         00-00-80-3B
'   2.3283064E-010         00-00-80-2F
'   1.2345000E-035         49-46-83-05
'   1.2345671E+000         4B-06-9E-3F
'   1.2345673E+000         4D-06-9E-3F
'   1.2345676E+000         50-06-9E-3F
'   1.2345679E+035         1E-37-BE-79
'  -3.4028235E+038         FF-FF-7F-FF
'   3.4028235E+038         FF-FF-7F-7F
'   1.4012985E-045         01-00-00-00
'              NaN         00-00-C0-FF
'        -Infinity         00-00-80-FF
'         Infinity         00-00-80-7F

// Example of the BitConverter.GetBytes( float ) method.
using System;

class GetBytesSingleDemo
{
    const string formatter = "{0,16:E7}{1,20}";

    // Convert a float argument to a byte array and display it.
    public static void GetBytesSingle( float argument )
    {
        byte[ ] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( float ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "float", "byte array" );
        Console.WriteLine( formatter, "-----", "----------" );

        // Convert float values and display the results.
        GetBytesSingle( 0.0F );
        GetBytesSingle( 1.0F );
        GetBytesSingle( 15.0F );
        GetBytesSingle( 65535.0F );
        GetBytesSingle( 0.00390625F );
        GetBytesSingle( 0.00000000023283064365386962890625F );
        GetBytesSingle( 1.2345E-35F );
        GetBytesSingle( 1.2345671F );
        GetBytesSingle( 1.2345673F );
        GetBytesSingle( 1.2345677F );
        GetBytesSingle( 1.23456789E+35F );
        GetBytesSingle( float.MinValue );
        GetBytesSingle( float.MaxValue );
        GetBytesSingle( float.Epsilon );
        GetBytesSingle( float.NaN );
        GetBytesSingle( float.NegativeInfinity );
        GetBytesSingle( float.PositiveInfinity );
    }
}

/*
This example of the BitConverter.GetBytes( float )
method generates the following output.

           float          byte array
           -----          ----------
  0.0000000E+000         00-00-00-00
  1.0000000E+000         00-00-80-3F
  1.5000000E+001         00-00-70-41
  6.5535000E+004         00-FF-7F-47
  3.9062500E-003         00-00-80-3B
  2.3283064E-010         00-00-80-2F
  1.2345000E-035         49-46-83-05
  1.2345671E+000         4B-06-9E-3F
  1.2345673E+000         4D-06-9E-3F
  1.2345676E+000         50-06-9E-3F
  1.2345679E+035         1E-37-BE-79
 -3.4028235E+038         FF-FF-7F-FF
  3.4028235E+038         FF-FF-7F-7F
  1.4012985E-045         01-00-00-00
             NaN         00-00-C0-FF
       -Infinity         00-00-80-FF
        Infinity         00-00-80-7F
*/

// Example of the BitConverter::GetBytes( float ) method.
using namespace System;

// Convert a float argument to a byte array and display it.
void GetBytesSingle( float argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,16:E7}{1,20}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( float ) "
   "\nmethod generates the following output.\n" );
   Console::WriteLine( "{0,16:E7}{1,20}", "float", "byte array" );
   Console::WriteLine( "{0,16:E7}{1,20}", "-----", "----------" );

   // Convert float values and display the results.
   GetBytesSingle( 0.0F );
   GetBytesSingle( 1.0F );
   GetBytesSingle( 15.0F );
   GetBytesSingle( 65535.0F );
   GetBytesSingle( 0.00390625F );
   GetBytesSingle( 0.00000000023283064365386962890625F );
   GetBytesSingle( 1.2345E-35F );
   GetBytesSingle( 1.2345671F );
   GetBytesSingle( 1.2345673F );
   GetBytesSingle( 1.2345677F );
   GetBytesSingle( 1.23456789E+35F );
   GetBytesSingle( Single::MinValue );
   GetBytesSingle( Single::MaxValue );
   GetBytesSingle( Single::Epsilon );
   GetBytesSingle( Single::NaN );
   GetBytesSingle( Single::NegativeInfinity );
   GetBytesSingle( Single::PositiveInfinity );
}

/*
This example of the BitConverter::GetBytes( float )
method generates the following output.

           float          byte array
           -----          ----------
  0.0000000E+000         00-00-00-00
  1.0000000E+000         00-00-80-3F
  1.5000000E+001         00-00-70-41
  6.5535000E+004         00-FF-7F-47
  3.9062500E-003         00-00-80-3B
  2.3283064E-010         00-00-80-2F
  1.2345000E-035         49-46-83-05
  1.2345671E+000         4B-06-9E-3F
  1.2345673E+000         4D-06-9E-3F
  1.2345676E+000         50-06-9E-3F
  1.2345679E+035         1E-37-BE-79
 -3.4028235E+038         FF-FF-7F-FF
  3.4028235E+038         FF-FF-7F-7F
  1.4012985E-045         01-00-00-00
             NaN         00-00-C0-FF
       -Infinity         00-00-80-FF
        Infinity         00-00-80-7F
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.GetBytes 方法 (UInt16)

BitConverter
.
.
::
.
GetBytes 方法 (UInt16)
BitConverter 类

以字节数组的形式返回指定的 16 位无符号整数值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function GetBytes ( _
    value As UShort _
) As Byte()
[CLSCompliantAttribute(false)]
public static byte[] GetBytes(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static array<unsigned char>^ GetBytes(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member GetBytes :
        value:uint16 -> byte[]

参数

value
类型： System UInt16
要转换的数字。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 2 的字节数组。

下面的代码示例使用 GetBytes 方法将 UInt16 值的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( UInt16 ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetBytesUInt16Demo

    Const formatter As String = "{0,10}{1,13}"

    ' Convert a UInt16 argument to a Byte array and display it.
    Sub GetBytesUInt16( argument As UInt16 )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( UInt16 ) " & _
            vbCrLf & "method generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "UInt16", "Byte array" )
        Console.WriteLine( formatter, "------", "----------" )

        ' Convert UInt16 values and display the results.
        GetBytesUInt16( Convert.ToUInt16( 15 ) )
        GetBytesUInt16( Convert.ToUInt16( 1023 ) )
        GetBytesUInt16( Convert.ToUInt16( 10000 ) )
        GetBytesUInt16( Convert.ToUInt16( 0 ) )
        GetBytesUInt16( Convert.ToUInt16( Int16.MaxValue ) )
        GetBytesUInt16( Convert.ToUInt16( 65535 ) )
    End Sub
End Module

' This example of the BitConverter.GetBytes( UInt16 )
' method generates the following output.
'
'     UInt16   Byte array
'     ------   ----------
'         15        0F-00
'       1023        FF-03
'      10000        10-27
'          0        00-00
'      32767        FF-7F
'      65535        FF-FF

// Example of the BitConverter.GetBytes( ushort ) method.
using System;

class GetBytesUInt16Demo
{
    const string formatter = "{0,10}{1,13}";

    // Convert a ushort argument to a byte array and display it.
    public static void GetBytesUInt16( ushort argument )
    {
        byte[ ] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( ushort ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "ushort", "byte array" );
        Console.WriteLine( formatter, "------", "----------" );

        // Convert ushort values and display the results.
        GetBytesUInt16( 15 );
        GetBytesUInt16( 1023 );
        GetBytesUInt16( 10000 );
        GetBytesUInt16( ushort.MinValue );
        GetBytesUInt16( (ushort)short.MaxValue );
        GetBytesUInt16( ushort.MaxValue );
    }
}

/*
This example of the BitConverter.GetBytes( ushort )
method generates the following output.

    ushort   byte array
    ------   ----------
        15        0F-00
      1023        FF-03
     10000        10-27
         0        00-00
     32767        FF-7F
     65535        FF-FF
*/

// Example of the BitConverter::GetBytes( unsigned short ) method.
using namespace System;

// Convert an unsigned short argument to a byte array and display it.
void GetBytesUInt16( unsigned short argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,14}{1,13}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( unsigned "
   "short ) \nmethod generates the following output.\n" );
   Console::WriteLine( "{0,14}{1,13}", "unsigned short", "byte array" );
   Console::WriteLine( "{0,14}{1,13}", "--------------", "----------" );

   // Convert unsigned short values and display the results.
   GetBytesUInt16( 15 );
   GetBytesUInt16( 1023 );
   GetBytesUInt16( 10000 );
   GetBytesUInt16( UInt16::MinValue );
   GetBytesUInt16( Int16::MaxValue );
   GetBytesUInt16( UInt16::MaxValue );
}

/*
This example of the BitConverter::GetBytes( unsigned short )
method generates the following output.

unsigned short   byte array
--------------   ----------
            15        0F-00
          1023        FF-03
         10000        10-27
             0        00-00
         32767        FF-7F
         65535        FF-FF
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.GetBytes 方法 (UInt32)

BitConverter
.
.
::
.
GetBytes 方法 (UInt32)
BitConverter 类

以字节数组的形式返回指定的 32 位无符号整数值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function GetBytes ( _
    value As UInteger _
) As Byte()
[CLSCompliantAttribute(false)]
public static byte[] GetBytes(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static array<unsigned char>^ GetBytes(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member GetBytes :
        value:uint32 -> byte[]

参数

value
类型： System UInt32
要转换的数字。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 4 的字节数组。

下面的代码示例使用 GetBytes 方法将 UInt32 值的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( UInt32 ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetBytesUInt32Demo

    Const formatter As String = "{0,16}{1,20}"

    ' Convert a UInt32 argument to a Byte array and display it.
    Sub GetBytesUInt32( argument As UInt32 )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( UInt32 ) " & _
            vbCrLf & "method generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "UInt32", "Byte array" )
        Console.WriteLine( formatter, "------", "----------" )

        ' Convert UInt32 values and display the results.
        GetBytesUInt32( Convert.ToUInt32( 15 ) )
        GetBytesUInt32( Convert.ToUInt32( 1023 ) )
        GetBytesUInt32( Convert.ToUInt32( &H100000 ) )
        GetBytesUInt32( Convert.ToUInt32( 1000000000 ) )
        GetBytesUInt32( Convert.ToUInt32( 0 ) )
        GetBytesUInt32( Convert.ToUInt32( Int32.MaxValue ) )
        GetBytesUInt32( Convert.ToUInt32( 4294967295 ) )
    End Sub
End Module

' This example of the BitConverter.GetBytes( UInt32 )
' method generates the following output.
'
'           UInt32          Byte array
'           ------          ----------
'               15         0F-00-00-00
'             1023         FF-03-00-00
'          1048576         00-00-10-00
'       1000000000         00-CA-9A-3B
'                0         00-00-00-00
'       2147483647         FF-FF-FF-7F
'       4294967295         FF-FF-FF-FF

// Example of the BitConverter.GetBytes( uint ) method.
using System;

class GetBytesUInt32Demo
{
    const string formatter = "{0,16}{1,20}";

    // Convert a uint argument to a byte array and display it.
    public static void GetBytesUInt32( uint argument )
    {
        byte[ ] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( uint ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "uint", "byte array" );
        Console.WriteLine( formatter, "----", "----------" );

        // Convert uint values and display the results.
        GetBytesUInt32( 15 );
        GetBytesUInt32( 1023 );
        GetBytesUInt32( 0x100000 );
        GetBytesUInt32( 1000000000 );
        GetBytesUInt32( uint.MinValue );
        GetBytesUInt32( int.MaxValue );
        GetBytesUInt32( uint.MaxValue );
    }
}

/*
This example of the BitConverter.GetBytes( uint )
method generates the following output.

            uint          byte array
            ----          ----------
              15         0F-00-00-00
            1023         FF-03-00-00
         1048576         00-00-10-00
      1000000000         00-CA-9A-3B
               0         00-00-00-00
      2147483647         FF-FF-FF-7F
      4294967295         FF-FF-FF-FF
*/

// Example of the BitConverter::GetBytes( unsigned int ) method.
using namespace System;

// Convert an unsigned int argument to a byte array and display it.
void GetBytesUInt32( unsigned int argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,16}{1,20}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( unsigned "
   "int ) \nmethod generates the following output.\n" );
   Console::WriteLine( "{0,16}{1,20}", "unsigned int", "byte array" );
   Console::WriteLine( "{0,16}{1,20}", "------------", "----------" );

   // Convert unsigned int values and display the results.
   GetBytesUInt32( 15 );
   GetBytesUInt32( 1023 );
   GetBytesUInt32( 0x100000 );
   GetBytesUInt32( 1000000000 );
   GetBytesUInt32( UInt32::MinValue );
   GetBytesUInt32( Int32::MaxValue );
   GetBytesUInt32( UInt32::MaxValue );
}

/*
This example of the BitConverter::GetBytes( unsigned int )
method generates the following output.

    unsigned int          byte array
    ------------          ----------
              15         0F-00-00-00
            1023         FF-03-00-00
         1048576         00-00-10-00
      1000000000         00-CA-9A-3B
               0         00-00-00-00
      2147483647         FF-FF-FF-7F
      4294967295         FF-FF-FF-FF
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.GetBytes 方法 (UInt64)

BitConverter
.
.
::
.
GetBytes 方法 (UInt64)
BitConverter 类

以字节数组的形式返回指定的 64 位无符号整数值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function GetBytes ( _
    value As ULong _
) As Byte()
[CLSCompliantAttribute(false)]
public static byte[] GetBytes(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static array<unsigned char>^ GetBytes(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member GetBytes :
        value:uint64 -> byte[]

参数

value
类型： System UInt64
要转换的数字。

返回值

类型：
array<
System Byte
>
[]
()
[]

长度为 8 的字节数组。

下面的代码示例使用 GetBytes 方法将 UInt64 值的位模式转换为 Byte 数组。

' Example of the BitConverter.GetBytes( UInt64 ) method.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module GetBytesUInt64Demo

    Const formatter As String = "{0,22}{1,30}"

    ' Convert a UInt64 argument to a Byte array and display it.
    Sub GetBytesUInt64( argument As UInt64 )

        Dim byteArray As Byte( ) = BitConverter.GetBytes( argument )
        Console.WriteLine( formatter, argument, _
            BitConverter.ToString( byteArray ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.GetBytes( UInt64 ) " & _
            vbCrLf & "method generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "UInt64", "Byte array" )
        Console.WriteLine( formatter, "------", "----------" )

        ' Convert UInt64 values and display the results.
        GetBytesUInt64( Convert.ToUInt64( &HFFFFFF ) )
        GetBytesUInt64( Convert.ToUInt64( 1000000000 ) )
        GetBytesUInt64( Convert.ToUInt64( &H100000000 ) )
        GetBytesUInt64( Convert.ToUInt64( &HAAAAAAAAAAAA ) )
        GetBytesUInt64( Convert.ToUInt64( 1000000000000000000 ) )
        GetBytesUInt64( UInt64.Parse( "10000000000000000000" ) )
        GetBytesUInt64( Convert.ToUInt64( 0 ) )
        GetBytesUInt64( Convert.ToUInt64( Int64.MaxValue ) )
        GetBytesUInt64( UInt64.Parse( "18446744073709551615" ) )
    End Sub
End Module

' This example of the BitConverter.GetBytes( UInt64 )
' method generates the following output.
'
'                 UInt64                    Byte array
'                 ------                    ----------
'               16777215       FF-FF-FF-00-00-00-00-00
'             1000000000       00-CA-9A-3B-00-00-00-00
'             4294967296       00-00-00-00-01-00-00-00
'        187649984473770       AA-AA-AA-AA-AA-AA-00-00
'    1000000000000000000       00-00-64-A7-B3-B6-E0-0D
'   10000000000000000000       00-00-E8-89-04-23-C7-8A
'                      0       00-00-00-00-00-00-00-00
'    9223372036854775807       FF-FF-FF-FF-FF-FF-FF-7F
'   18446744073709551615       FF-FF-FF-FF-FF-FF-FF-FF

// Example of the BitConverter.GetBytes( ulong ) method.
using System;

class GetBytesUInt64Demo
{
    const string formatter = "{0,22}{1,30}";

    // Convert a ulong argument to a byte array and display it.
    public static void GetBytesUInt64( ulong argument )
    {
        byte[ ] byteArray = BitConverter.GetBytes( argument );
        Console.WriteLine( formatter, argument,
            BitConverter.ToString( byteArray ) );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.GetBytes( ulong ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "ulong", "byte array" );
        Console.WriteLine( formatter, "-----", "----------" );

        // Convert ulong values and display the results.
        GetBytesUInt64( 0xFFFFFF );
        GetBytesUInt64( 1000000000 );
        GetBytesUInt64( 0x100000000 );
        GetBytesUInt64( 0xAAAAAAAAAAAA );
        GetBytesUInt64( 1000000000000000000 );
        GetBytesUInt64( 10000000000000000000 );
        GetBytesUInt64( ulong.MinValue );
        GetBytesUInt64( long.MaxValue );
        GetBytesUInt64( ulong.MaxValue );
    }
}

/*
This example of the BitConverter.GetBytes( ulong )
method generates the following output.

                 ulong                    byte array
                 -----                    ----------
              16777215       FF-FF-FF-00-00-00-00-00
            1000000000       00-CA-9A-3B-00-00-00-00
            4294967296       00-00-00-00-01-00-00-00
       187649984473770       AA-AA-AA-AA-AA-AA-00-00
   1000000000000000000       00-00-64-A7-B3-B6-E0-0D
  10000000000000000000       00-00-E8-89-04-23-C7-8A
                     0       00-00-00-00-00-00-00-00
   9223372036854775807       FF-FF-FF-FF-FF-FF-FF-7F
  18446744073709551615       FF-FF-FF-FF-FF-FF-FF-FF
*/

// Example of the BitConverter::GetBytes( unsigned __int64 ) method.
using namespace System;

// Convert an unsigned __int64 argument to a byte array and display it.
void GetBytesUInt64( unsigned __int64 argument )
{
   array<Byte>^byteArray = BitConverter::GetBytes( argument );
   Console::WriteLine( "{0,22}{1,30}", argument, BitConverter::ToString( byteArray ) );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::GetBytes( unsigned "
   "__int64 ) \nmethod generates the following output.\n" );
   Console::WriteLine( "{0,22}{1,30}", "unsigned __int64", "byte array" );
   Console::WriteLine( "{0,22}{1,30}", "----------------", "----------" );

   // Convert unsigned __int64 values and display the results.
   GetBytesUInt64( 0xFFFFFF );
   GetBytesUInt64( 1000000000 );
   GetBytesUInt64( 0x100000000 );
   GetBytesUInt64( 0xAAAAAAAAAAAA );
   GetBytesUInt64( 1000000000000000000 );
   GetBytesUInt64( 10000000000000000000 );
   GetBytesUInt64( UInt64::MinValue );
   GetBytesUInt64( Int64::MaxValue );
   GetBytesUInt64( UInt64::MaxValue );
}

/*
This example of the BitConverter::GetBytes( unsigned __int64 )
method generates the following output.

      unsigned __int64                    byte array
      ----------------                    ----------
              16777215       FF-FF-FF-00-00-00-00-00
            1000000000       00-CA-9A-3B-00-00-00-00
            4294967296       00-00-00-00-01-00-00-00
       187649984473770       AA-AA-AA-AA-AA-AA-00-00
   1000000000000000000       00-00-64-A7-B3-B6-E0-0D
  10000000000000000000       00-00-E8-89-04-23-C7-8A
                     0       00-00-00-00-00-00-00-00
   9223372036854775807       FF-FF-FF-FF-FF-FF-FF-7F
  18446744073709551615       FF-FF-FF-FF-FF-FF-FF-FF
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
GetBytes 重载
System 命名空间


BitConverter ..::.Int64BitsToDouble 方法

BitConverter
.
.
::
.
Int64BitsToDouble 方法
BitConverter 类

将指定的 64 位有符号整数转换成双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Int64BitsToDouble ( _
    value As Long _
) As Double
public static double Int64BitsToDouble(
    long value
)
public:
static double Int64BitsToDouble(
    long long value
)
static member Int64BitsToDouble :
        value:int64 -> float

参数

value
类型： System Int64
要转换的数字。

返回值

类型： System Double
双精度浮点数，其值等于 value。

下面的代码示例使用 Int64BitsToDouble 方法将多个 Int64 值的位模式转换为 Double 值。

' Example of the BitConverter.Int64BitsToDouble method.
Imports System
Imports Microsoft.VisualBasic

Module Int64BitsToDoubleDemo

    Const formatter As String = "{0,20}{1,27:E16}"

    ' Reinterpret the Long argument as a Double.
    Sub LongBitsToDouble( argument As Long )

        Dim doubleValue    As Double
        doubleValue = BitConverter.Int64BitsToDouble( argument )

        ' Display the argument in hexadecimal.
        Console.WriteLine( formatter, _
            String.Format( "0x{0:X16}", argument ), doubleValue )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the BitConverter.Int64BitsToDouble( " & _
            "Long ) " & vbCrLf & "method generates the " & _
            "following output." & vbCrLf )
        Console.WriteLine( formatter, "Long argument", _
            "Double value" )
        Console.WriteLine( formatter, "-------------", _
            "------------" )

        ' Convert Long values and display the results.
        LongBitsToDouble( 0 )
        LongBitsToDouble( &H3FF0000000000000 )
        LongBitsToDouble( &H402E000000000000 )
        LongBitsToDouble( &H406FE00000000000 )
        LongBitsToDouble( &H41EFFFFFFFE00000 )
        LongBitsToDouble( &H3F70000000000000 )
        LongBitsToDouble( &H3DF0000000000000 )
        LongBitsToDouble( &H0000000000000001 )
        LongBitsToDouble( &H000000000000FFFF )
        LongBitsToDouble( &H0000FFFFFFFFFFFF )
        LongBitsToDouble( &HFFFFFFFFFFFFFFFF )
        LongBitsToDouble( &HFFF0000000000000 )
        LongBitsToDouble( &H7FF0000000000000 )
        LongBitsToDouble( &HFFEFFFFFFFFFFFFF )
        LongBitsToDouble( &H7FEFFFFFFFFFFFFF )
        LongBitsToDouble( Long.MinValue )
        LongBitsToDouble( Long.MaxValue )
    End Sub
End Module

' This example of the BitConverter.Int64BitsToDouble( Long )
' method generates the following output.
'
'        Long argument               Double value
'        -------------               ------------
'   0x0000000000000000    0.0000000000000000E+000
'   0x3FF0000000000000    1.0000000000000000E+000
'   0x402E000000000000    1.5000000000000000E+001
'   0x406FE00000000000    2.5500000000000000E+002
'   0x41EFFFFFFFE00000    4.2949672950000000E+009
'   0x3F70000000000000    3.9062500000000000E-003
'   0x3DF0000000000000    2.3283064365386963E-010
'   0x0000000000000001    4.9406564584124654E-324
'   0x000000000000FFFF    3.2378592100206092E-319
'   0x0000FFFFFFFFFFFF    1.3906711615669959E-309
'   0xFFFFFFFFFFFFFFFF                        NaN
'   0xFFF0000000000000                  -Infinity
'   0x7FF0000000000000                   Infinity
'   0xFFEFFFFFFFFFFFFF   -1.7976931348623157E+308
'   0x7FEFFFFFFFFFFFFF    1.7976931348623157E+308
'   0x8000000000000000    0.0000000000000000E+000
'   0x7FFFFFFFFFFFFFFF                        NaN

// Example of the BitConverter.Int64BitsToDouble method.
using System;

class Int64BitsToDoubleDemo
{
    const string formatter = "{0,20}{1,27:E16}";

    // Reinterpret the long argument as a double.
    public static void LongBitsToDouble( long argument )
    {
        double doubleValue;
        doubleValue = BitConverter.Int64BitsToDouble( argument );

        // Display the argument in hexadecimal.
        Console.WriteLine( formatter,
            String.Format( "0x{0:X16}", argument ), doubleValue );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the BitConverter.Int64BitsToDouble( " +
            "long ) \nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "long argument",
            "double value" );
        Console.WriteLine( formatter, "-------------",
            "------------" );

        // Convert long values and display the results.
        LongBitsToDouble( 0 );
        LongBitsToDouble( 0x3FF0000000000000 );
        LongBitsToDouble( 0x402E000000000000 );
        LongBitsToDouble( 0x406FE00000000000 );
        LongBitsToDouble( 0x41EFFFFFFFE00000 );
        LongBitsToDouble( 0x3F70000000000000 );
        LongBitsToDouble( 0x3DF0000000000000 );
        LongBitsToDouble( 0x0000000000000001 );
        LongBitsToDouble( 0x000000000000FFFF );
        LongBitsToDouble( 0x0000FFFFFFFFFFFF );
        LongBitsToDouble( unchecked( (long)0xFFFFFFFFFFFFFFFF ) );
        LongBitsToDouble( unchecked( (long)0xFFF0000000000000 ) );
        LongBitsToDouble( 0x7FF0000000000000 );
        LongBitsToDouble( unchecked( (long)0xFFEFFFFFFFFFFFFF ) );
        LongBitsToDouble( 0x7FEFFFFFFFFFFFFF );
        LongBitsToDouble( long.MinValue );
        LongBitsToDouble( long.MaxValue );
    }
}

/*
This example of the BitConverter.Int64BitsToDouble( long )
method generates the following output.

       long argument               double value
       -------------               ------------
  0x0000000000000000    0.0000000000000000E+000
  0x3FF0000000000000    1.0000000000000000E+000
  0x402E000000000000    1.5000000000000000E+001
  0x406FE00000000000    2.5500000000000000E+002
  0x41EFFFFFFFE00000    4.2949672950000000E+009
  0x3F70000000000000    3.9062500000000000E-003
  0x3DF0000000000000    2.3283064365386963E-010
  0x0000000000000001    4.9406564584124654E-324
  0x000000000000FFFF    3.2378592100206092E-319
  0x0000FFFFFFFFFFFF    1.3906711615669959E-309
  0xFFFFFFFFFFFFFFFF                        NaN
  0xFFF0000000000000                  -Infinity
  0x7FF0000000000000                   Infinity
  0xFFEFFFFFFFFFFFFF   -1.7976931348623157E+308
  0x7FEFFFFFFFFFFFFF    1.7976931348623157E+308
  0x8000000000000000    0.0000000000000000E+000
  0x7FFFFFFFFFFFFFFF                        NaN
*/

// Example of the BitConverter::Int64BitsToDouble method.
using namespace System;

// Reinterpret the __int64 argument as a double.
void LongBitsToDouble( __int64 argument )
{
   double doubleValue;
   doubleValue = BitConverter::Int64BitsToDouble( argument );

   // Display the argument in hexadecimal.
   Console::WriteLine( "{0,20}{1,27:E16}", String::Format( "0x{0:X16}", argument ), doubleValue );
}

int main()
{
   Console::WriteLine( "This example of the BitConverter::Int64BitsToDouble( "
   "__int64 ) \nmethod generates the following output.\n" );
   Console::WriteLine( "{0,20}{1,27:E16}", "__int64 argument", "double value" );
   Console::WriteLine( "{0,20}{1,27:E16}", "----------------", "------------" );

   // Convert __int64 values and display the results.
   LongBitsToDouble( 0 );
   LongBitsToDouble( 0x3FF0000000000000 );
   LongBitsToDouble( 0x402E000000000000 );
   LongBitsToDouble( 0x406FE00000000000 );
   LongBitsToDouble( 0x41EFFFFFFFE00000 );
   LongBitsToDouble( 0x3F70000000000000 );
   LongBitsToDouble( 0x3DF0000000000000 );
   LongBitsToDouble( 0x0000000000000001 );
   LongBitsToDouble( 0x000000000000FFFF );
   LongBitsToDouble( 0x0000FFFFFFFFFFFF );
   LongBitsToDouble( 0xFFFFFFFFFFFFFFFF );
   LongBitsToDouble( 0xFFF0000000000000 );
   LongBitsToDouble( 0x7FF0000000000000 );
   LongBitsToDouble( 0xFFEFFFFFFFFFFFFF );
   LongBitsToDouble( 0x7FEFFFFFFFFFFFFF );
   LongBitsToDouble( Int64::MinValue );
   LongBitsToDouble( Int64::MaxValue );
}

/*
This example of the BitConverter::Int64BitsToDouble( __int64 )
method generates the following output.

    __int64 argument               double value
    ----------------               ------------
  0x0000000000000000    0.0000000000000000E+000
  0x3FF0000000000000    1.0000000000000000E+000
  0x402E000000000000    1.5000000000000000E+001
  0x406FE00000000000    2.5500000000000000E+002
  0x41EFFFFFFFE00000    4.2949672950000000E+009
  0x3F70000000000000    3.9062500000000000E-003
  0x3DF0000000000000    2.3283064365386963E-010
  0x0000000000000001    4.9406564584124654E-324
  0x000000000000FFFF    3.2378592100206092E-319
  0x0000FFFFFFFFFFFF    1.3906711615669959E-309
  0xFFFFFFFFFFFFFFFF                        NaN
  0xFFF0000000000000                  -Infinity
  0x7FF0000000000000                   Infinity
  0xFFEFFFFFFFFFFFFF   -1.7976931348623157E+308
  0x7FEFFFFFFFFFFFFF    1.7976931348623157E+308
  0x8000000000000000    0.0000000000000000E+000
  0x7FFFFFFFFFFFFFFF                        NaN
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

BitConverter 类
BitConverter 成员
System 命名空间


BitConverter ..::.ToBoolean 方法

BitConverter
.
.
::
.
ToBoolean 方法
BitConverter 类

返回由字节数组中指定位置的一个字节转换来的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Byte(), _
    startIndex As Integer _
) As Boolean
public static bool ToBoolean(
    byte[] value,
    int startIndex
)
public:
static bool ToBoolean(
    array<unsigned char>^ value,
    int startIndex
)
static member ToBoolean :
        value:byte[] *
        startIndex:int -> bool

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System Boolean
如果 value 中的 startIndex 处的字节非零，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToBoolean 方法将 Byte 数组的元素转换为 Boolean 值。

' Example of the BitConverter.ToBoolean method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToBoolDemo

    Const formatter As String = "{0,5}{1,16}{2,10}"

    ' Convert a Byte array element to Boolean and display it.
    Sub BAToBool( bytes( ) As Byte, index As Integer )

        Dim value As Boolean = BitConverter.ToBoolean( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 1 ), value )
    End Sub

    Sub Main( )
        Dim byteArray as Byte( ) = _
            { 0, 1, 2, 4, 8, 16, 32, 64, 128, 255 }

        Console.WriteLine( _
            "This example of the BitConverter.ToBoolean( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements of " & vbCrLf & _
            "a Byte array to Boolean values." & vbCrLf )
        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )
        Console.WriteLine( BitConverter.ToString( byteArray ) )
        Console.WriteLine( )
        Console.WriteLine( formatter, "index", "array element", "Boolean" )
        Console.WriteLine( formatter, "-----", "-------------", "-------" )

        ' Convert Byte array elements to Boolean values.
        BAToBool( byteArray, 0 )
        BAToBool( byteArray, 1 )
        BAToBool( byteArray, 3 )
        BAToBool( byteArray, 5 )
        BAToBool( byteArray, 8 )
        BAToBool( byteArray, 9 )
    End Sub
End Module

' This example of the BitConverter.ToBoolean( Byte( ), Integer )
' method generates the following output. It converts elements of
' a Byte array to Boolean values.
'
' initial Byte array
' ------------------
' 00-01-02-04-08-10-20-40-80-FF
'
' index   array element   Boolean
' -----   -------------   -------
'     0              00     False
'     1              01      True
'     3              04      True
'     5              10      True
'     8              80      True
'     9              FF      True

// Example of the BitConverter.ToBoolean method.
using System;

class GetBytesBoolDemo
{
    const string formatter = "{0,5}{1,16}{2,10}";

    // Convert a byte array element to bool and display it.
    public static void BAToBool( byte[ ] bytes, int index )
    {
        bool value = BitConverter.ToBoolean( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 1 ), value );
    }

    public static void Main( )
    {
        byte[ ] byteArray = { 0, 1, 2, 4, 8, 16, 32, 64, 128, 255 };

        Console.WriteLine(
            "This example of the BitConverter.ToBoolean( byte[ ], " +
            "int ) \nmethod generates the following output. It " +
            "converts elements \nof a byte array to bool values.\n" );
        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );
        Console.WriteLine( BitConverter.ToString( byteArray ) + '\n' );
        Console.WriteLine( formatter, "index", "array element", "bool" );
        Console.WriteLine( formatter, "-----", "-------------", "----" );

        // Convert byte array elements to bool values.
        BAToBool( byteArray, 0 );
        BAToBool( byteArray, 1 );
        BAToBool( byteArray, 3 );
        BAToBool( byteArray, 5 );
        BAToBool( byteArray, 8 );
        BAToBool( byteArray, 9 );
    }
}

/*
This example of the BitConverter.ToBoolean( byte[ ], int )
method generates the following output. It converts elements
of a byte array to bool values.

initial byte array
------------------
00-01-02-04-08-10-20-40-80-FF

index   array element      bool
-----   -------------      ----
    0              00     False
    1              01      True
    3              04      True
    5              10      True
    8              80      True
    9              FF      True
*/

// Example of the BitConverter::ToBoolean method.
using namespace System;

// Convert a byte array element to bool and display it.
void BAToBool( array<unsigned char>^bytes, int index )
{
   bool value = BitConverter::ToBoolean( bytes, index );
   Console::WriteLine( "{0,5}{1,16}{2,10}", index, BitConverter::ToString( bytes, index, 1 ), value );
}

int main()
{
   array<unsigned char>^byteArray = {0,1,2,4,8,16,32,64,128,255};
   Console::WriteLine( "This example of the BitConverter::ToBoolean( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to bool values.\n" );
   Console::WriteLine( "initial unsigned char array" );
   Console::WriteLine( "---------------------------" );
   Console::WriteLine( BitConverter::ToString( byteArray ) );
   Console::WriteLine();
   Console::WriteLine( "{0,5}{1,16}{2,10}", "index", "array element", "bool" );
   Console::WriteLine( "{0,5}{1,16}{2,10}", "-----", "-------------", "----" );

   // Convert byte array elements to bool values.
   BAToBool( byteArray, 0 );
   BAToBool( byteArray, 1 );
   BAToBool( byteArray, 3 );
   BAToBool( byteArray, 5 );
   BAToBool( byteArray, 8 );
   BAToBool( byteArray, 9 );
}

/*
This example of the BitConverter::ToBoolean( unsigned char[ ], int )
method generates the following output. It converts elements of a
byte array to bool values.

initial unsigned char array
---------------------------
00-01-02-04-08-10-20-40-80-FF

index   array element      bool
-----   -------------      ----
    0              00     False
    1              01      True
    3              04      True
    5              10      True
    8              80      True
    9              FF      True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间


BitConverter ..::.ToChar 方法

BitConverter
.
.
::
.
ToChar 方法
BitConverter 类

返回由字节数组中指定位置的两个字节转换来的 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Byte(), _
    startIndex As Integer _
) As Char
public static char ToChar(
    byte[] value,
    int startIndex
)
public:
static wchar_t ToChar(
    array<unsigned char>^ value,
    int startIndex
)
static member ToChar :
        value:byte[] *
        startIndex:int -> char

参数

value
类型：
array<
System Byte
>
[]
()
[]

一个数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System Char
由两个字节构成、从 startIndex 开始的字符。
异常 | 条件
ArgumentException | startIndex 等于 value 减 1 的长度。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToChar 方法将 Byte 数组的元素转换为 Char 值（Unicode 字符）。

' Example of the BitConverter.ToChar method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToCharDemo

    Const formatter As String = "{0,5}{1,17}{2,8}"

    ' Convert two Byte array elements to a Char and display it.
    Sub BAToChar( bytes( ) As Byte, index As Integer )

        Dim value As Char = BitConverter.ToChar( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 2 ), value )
    End Sub

    Sub Main( )

        Dim byteArray as Byte( ) = { _
             32,   0,   0,  42,   0,  65,   0, 125,   0, 197, _
              0, 168,   3,  41,   4, 172,  32 }

        Console.WriteLine( _
            "This example of the BitConverter.ToChar( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements " & vbCrLf & _
            "of a Byte array to Char values." & vbCrLf )
        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )
        Console.WriteLine( BitConverter.ToString( byteArray ) )
        Console.WriteLine( )
        Console.WriteLine( formatter, "index", "array elements", "Char" )
        Console.WriteLine( formatter, "-----", "--------------", "----" )

        ' Convert Byte array elements to Char values.
        BAToChar( byteArray, 0 )
        BAToChar( byteArray, 1 )
        BAToChar( byteArray, 3 )
        BAToChar( byteArray, 5 )
        BAToChar( byteArray, 7 )
        BAToChar( byteArray, 9 )
        BAToChar( byteArray, 11 )
        BAToChar( byteArray, 13 )
        BAToChar( byteArray, 15 )
    End Sub
End Module

' This example of the BitConverter.ToChar( Byte( ), Integer )
' method generates the following output. It converts elements
' of a Byte array to Char values.
'
' initial Byte array
' ------------------
' 20-00-00-2A-00-41-00-7D-00-C5-00-A8-03-29-04-AC-20
'
' index   array elements    Char
' -----   --------------    ----
'     0            20-00
'     1            00-00
'     3            2A-00       *
'     5            41-00       A
'     7            7D-00       }
'     9            C5-00
'    11            A8-03       ?
'    13            29-04       ?
'    15            AC-20       ?

// Example of the BitConverter.ToChar method.
using System;

class BytesToCharDemo
{
    const string formatter = "{0,5}{1,17}{2,8}";

    // Convert two byte array elements to a char and display it.
    public static void BAToChar( byte[] bytes, int index )
    {
        char value = BitConverter.ToChar( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 2 ), value );
    }

    public static void Main( )
    {
        byte[] byteArray = {
             32,   0,   0,  42,   0,  65,   0, 125,   0,
            197,   0, 168,   3,  41,   4, 172,  32 };

        Console.WriteLine(
            "This example of the BitConverter.ToChar( byte[ ], " +
            "int ) \nmethod generates the following output. It " +
            "converts \nelements of a byte array to char values.\n" );
        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );
        Console.WriteLine( BitConverter.ToString( byteArray ) );
        Console.WriteLine( );
        Console.WriteLine( formatter, "index", "array elements", "char" );
        Console.WriteLine( formatter, "-----", "--------------", "----" );

        // Convert byte array elements to char values.
        BAToChar( byteArray, 0 );
        BAToChar( byteArray, 1 );
        BAToChar( byteArray, 3 );
        BAToChar( byteArray, 5 );
        BAToChar( byteArray, 7 );
        BAToChar( byteArray, 9 );
        BAToChar( byteArray, 11 );
        BAToChar( byteArray, 13 );
        BAToChar( byteArray, 15 );
    }
}

/*
This example of the BitConverter.ToChar( byte[ ], int )
method generates the following output. It converts
elements of a byte array to char values.

initial byte array
------------------
20-00-00-2A-00-41-00-7D-00-C5-00-A8-03-29-04-AC-20

index   array elements    char
-----   --------------    ----
    0            20-00
    1            00-00
    3            2A-00       *
    5            41-00       A
    7            7D-00       }
    9            C5-00
   11            A8-03       ?
   13            29-04       ?
   15            AC-20       ?
*/

// Example of the BitConverter::ToChar method.
using namespace System;

// Convert two byte array elements to a __wchar_t and display it.
void BAToChar( array<unsigned char>^bytes, int index )
{
   __wchar_t value = BitConverter::ToChar( bytes, index );
   Console::WriteLine( "{0,5}{1,17}{2,11}", index, BitConverter::ToString( bytes, index, 2 ), value );
}

int main()
{
   array<unsigned char>^byteArray = {32,0,0,42,0,65,0,125,0,197,0,168,3,41,4,172,32};
   Console::WriteLine( "This example of the BitConverter::ToChar( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to __wchar_t values.\n" );
   Console::WriteLine( "initial unsigned char array" );
   Console::WriteLine( "---------------------------" );
   Console::WriteLine( BitConverter::ToString( byteArray ) );
   Console::WriteLine();
   Console::WriteLine( "{0,5}{1,17}{2,11}", "index", "array elements", "__wchar_t" );
   Console::WriteLine( "{0,5}{1,17}{2,11}", "-----", "--------------", "---------" );

   // Convert byte array elements to __wchar_t values.
   BAToChar( byteArray, 0 );
   BAToChar( byteArray, 1 );
   BAToChar( byteArray, 3 );
   BAToChar( byteArray, 5 );
   BAToChar( byteArray, 7 );
   BAToChar( byteArray, 9 );
   BAToChar( byteArray, 11 );
   BAToChar( byteArray, 13 );
   BAToChar( byteArray, 15 );
}

/*
This example of the BitConverter::ToChar( unsigned char[ ], int )
method generates the following output. It converts elements of a
byte array to __wchar_t values.

initial unsigned char array
---------------------------
20-00-00-2A-00-41-00-7D-00-C5-00-A8-03-29-04-AC-20

index   array elements  __wchar_t
-----   --------------  ---------
    0            20-00
    1            00-00
    3            2A-00          *
    5            41-00          A
    7            7D-00          }
    9            C5-00
   11            A8-03          ?
   13            29-04          ?
   15            AC-20          ?
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间
Char


BitConverter ..::.ToDouble 方法

BitConverter
.
.
::
.
ToDouble 方法
BitConverter 类

返回由字节数组中指定位置的八个字节转换来的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Byte(), _
    startIndex As Integer _
) As Double
public static double ToDouble(
    byte[] value,
    int startIndex
)
public:
static double ToDouble(
    array<unsigned char>^ value,
    int startIndex
)
static member ToDouble :
        value:byte[] *
        startIndex:int -> float

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System Double
由八个字节构成、从 startIndex 开始的双精度浮点数。
异常 | 条件
ArgumentException | startIndex 大于等于 value 减 7 的长度，且小于等于 value 减 1 的长度。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToDouble 方法将 Byte 数组的元素转换为 Double 值。

' Example of the BitConverter.ToDouble method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToDoubleDemo

    Const formatter As String = "{0,5}{1,27}{2,27:E16}"

    ' Convert eight Byte array elements to a Double and display it.
    Sub BAToDouble( bytes( ) As Byte, index As Integer )

        Dim value As Double = BitConverter.ToDouble( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 8 ), value )
    End Sub

    ' Display a Byte array, using multiple lines if necessary.
    Sub WriteMultiLineByteArray( bytes( ) As Byte )

        Const rowSize As Integer = 20
        Dim iter As Integer

        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )

        For iter = 0 To bytes.Length - rowSize - 1 Step rowSize
            Console.Write( _
                BitConverter.ToString( bytes, iter, rowSize ) )
            Console.WriteLine( "-" )
        Next iter

        Console.WriteLine( BitConverter.ToString( bytes, iter ) )
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Dim byteArray as Byte( ) = { _
              0,   0,   0,   0,   0,   0,   0,   0, 240,  63, _
              0,   0,   0,   0,   0, 224, 111,  64,   0,   0, _
            224, 255, 255, 255, 239,  65,   0,   0,   0,   0, _
              0,   0, 112,  63,   0,   0,   0,   0,   0,   0, _
            240,  61, 223, 136,  30,  28, 254, 116, 170,   1, _
            250,  89, 140,  66, 202, 192, 243,  63, 251,  89, _
            140,  66, 202, 192, 243,  63, 252,  89, 140,  66, _
            202, 192, 243,  63,  82, 211, 187, 188, 232, 126, _
             61, 126, 255, 255, 255, 255, 255, 255, 239, 255, _
            255, 255, 255, 255, 255, 239, 127,   1,   0,   0, _
              0,   0,   0,   0,   0, 248, 255,   0,   0,   0, _
              0,   0,   0, 240, 255,   0,   0,   0,   0,   0, _
              0, 240, 127 }

        Console.WriteLine( _
            "This example of the BitConverter.ToDouble( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements " & vbCrLf & _
            "of a Byte array to Double values." & vbCrLf )

        WriteMultiLineByteArray( byteArray )

        Console.WriteLine( formatter, "index", "array elements", _
            "Double" )
        Console.WriteLine( formatter, "-----", "--------------", _
            "------" )

        ' Convert Byte array elements to Double values.
        BAToDouble( byteArray, 0 )
        BAToDouble( byteArray, 2 )
        BAToDouble( byteArray, 10 )
        BAToDouble( byteArray, 18 )
        BAToDouble( byteArray, 26 )
        BAToDouble( byteArray, 34 )
        BAToDouble( byteArray, 42 )
        BAToDouble( byteArray, 50 )
        BAToDouble( byteArray, 58 )
        BAToDouble( byteArray, 66 )
        BAToDouble( byteArray, 74 )
        BAToDouble( byteArray, 82 )
        BAToDouble( byteArray, 89 )
        BAToDouble( byteArray, 97 )
        BAToDouble( byteArray, 99 )
        BAToDouble( byteArray, 107 )
        BAToDouble( byteArray, 115 )
    End Sub
End Module

' This example of the BitConverter.ToDouble( Byte( ), Integer )
' method generates the following output. It converts elements
' of a Byte array to Double values.
'
' initial Byte array
' ------------------
' 00-00-00-00-00-00-00-00-F0-3F-00-00-00-00-00-E0-6F-40-00-00-
' E0-FF-FF-FF-EF-41-00-00-00-00-00-00-70-3F-00-00-00-00-00-00-
' F0-3D-DF-88-1E-1C-FE-74-AA-01-FA-59-8C-42-CA-C0-F3-3F-FB-59-
' 8C-42-CA-C0-F3-3F-FC-59-8C-42-CA-C0-F3-3F-52-D3-BB-BC-E8-7E-
' 3D-7E-FF-FF-FF-FF-FF-FF-EF-FF-FF-FF-FF-FF-FF-EF-7F-01-00-00-
' 00-00-00-00-00-F8-FF-00-00-00-00-00-00-F0-FF-00-00-00-00-00-
' 00-F0-7F
'
' index             array elements                     Double
' -----             --------------                     ------
'     0    00-00-00-00-00-00-00-00    0.0000000000000000E+000
'     2    00-00-00-00-00-00-F0-3F    1.0000000000000000E+000
'    10    00-00-00-00-00-E0-6F-40    2.5500000000000000E+002
'    18    00-00-E0-FF-FF-FF-EF-41    4.2949672950000000E+009
'    26    00-00-00-00-00-00-70-3F    3.9062500000000000E-003
'    34    00-00-00-00-00-00-F0-3D    2.3283064365386963E-010
'    42    DF-88-1E-1C-FE-74-AA-01    1.2345678901234500E-300
'    50    FA-59-8C-42-CA-C0-F3-3F    1.2345678901234565E+000
'    58    FB-59-8C-42-CA-C0-F3-3F    1.2345678901234567E+000
'    66    FC-59-8C-42-CA-C0-F3-3F    1.2345678901234569E+000
'    74    52-D3-BB-BC-E8-7E-3D-7E    1.2345678901234569E+300
'    82    FF-FF-FF-FF-FF-FF-EF-FF   -1.7976931348623157E+308
'    89    FF-FF-FF-FF-FF-FF-EF-7F    1.7976931348623157E+308
'    97    01-00-00-00-00-00-00-00    4.9406564584124654E-324
'    99    00-00-00-00-00-00-F8-FF                        NaN
'   107    00-00-00-00-00-00-F0-FF                  -Infinity
'   115    00-00-00-00-00-00-F0-7F                   Infinity

// Example of the BitConverter.ToDouble method.
using System;

class BytesToDoubleDemo
{
    const string formatter = "{0,5}{1,27}{2,27:E16}";

    // Convert eight byte array elements to a double and display it.
    public static void BAToDouble( byte[ ] bytes, int index )
    {
        double value = BitConverter.ToDouble( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 8 ), value );
    }

    // Display a byte array, using multiple lines if necessary.
    public static void WriteMultiLineByteArray( byte[ ] bytes )
    {
        const int rowSize = 20;
        int iter;

        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );

        for( iter = 0; iter < bytes.Length - rowSize; iter += rowSize )
        {
            Console.Write(
                BitConverter.ToString( bytes, iter, rowSize ) );
            Console.WriteLine( "-" );
        }

        Console.WriteLine( BitConverter.ToString( bytes, iter ) );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        byte[ ] byteArray = {
              0,   0,   0,   0,   0,   0,   0,   0, 240,  63,
              0,   0,   0,   0,   0, 224, 111,  64,   0,   0,
            224, 255, 255, 255, 239,  65,   0,   0,   0,   0,
              0,   0, 112,  63,   0,   0,   0,   0,   0,   0,
            240,  61, 223, 136,  30,  28, 254, 116, 170,   1,
            250,  89, 140,  66, 202, 192, 243,  63, 251,  89,
            140,  66, 202, 192, 243,  63, 252,  89, 140,  66,
            202, 192, 243,  63,  82, 211, 187, 188, 232, 126,
             61, 126, 255, 255, 255, 255, 255, 255, 239, 255,
            255, 255, 255, 255, 255, 239, 127,   1,   0,   0,
              0,   0,   0,   0,   0, 248, 255,   0,   0,   0,
              0,   0,   0, 240, 255,   0,   0,   0,   0,   0,
              0, 240, 127 };

        Console.WriteLine(
            "This example of the BitConverter.ToDouble( byte[ ], " +
            "int ) \nmethod generates the following output. It " +
            "converts elements \nof a byte array to double values.\n" );

        WriteMultiLineByteArray( byteArray );

        Console.WriteLine( formatter, "index", "array elements",
            "double" );
        Console.WriteLine( formatter, "-----", "--------------",
            "------" );

        // Convert byte array elements to double values.
        BAToDouble( byteArray, 0 );
        BAToDouble( byteArray, 2 );
        BAToDouble( byteArray, 10 );
        BAToDouble( byteArray, 18 );
        BAToDouble( byteArray, 26 );
        BAToDouble( byteArray, 34 );
        BAToDouble( byteArray, 42 );
        BAToDouble( byteArray, 50 );
        BAToDouble( byteArray, 58 );
        BAToDouble( byteArray, 66 );
        BAToDouble( byteArray, 74 );
        BAToDouble( byteArray, 82 );
        BAToDouble( byteArray, 89 );
        BAToDouble( byteArray, 97 );
        BAToDouble( byteArray, 99 );
        BAToDouble( byteArray, 107 );
        BAToDouble( byteArray, 115 );
    }
}

/*
This example of the BitConverter.ToDouble( byte[ ], int )
method generates the following output. It converts elements
of a byte array to double values.

initial byte array
------------------
00-00-00-00-00-00-00-00-F0-3F-00-00-00-00-00-E0-6F-40-00-00-
E0-FF-FF-FF-EF-41-00-00-00-00-00-00-70-3F-00-00-00-00-00-00-
F0-3D-DF-88-1E-1C-FE-74-AA-01-FA-59-8C-42-CA-C0-F3-3F-FB-59-
8C-42-CA-C0-F3-3F-FC-59-8C-42-CA-C0-F3-3F-52-D3-BB-BC-E8-7E-
3D-7E-FF-FF-FF-FF-FF-FF-EF-FF-FF-FF-FF-FF-FF-EF-7F-01-00-00-
00-00-00-00-00-F8-FF-00-00-00-00-00-00-F0-FF-00-00-00-00-00-
00-F0-7F

index             array elements                     double
-----             --------------                     ------
    0    00-00-00-00-00-00-00-00    0.0000000000000000E+000
    2    00-00-00-00-00-00-F0-3F    1.0000000000000000E+000
   10    00-00-00-00-00-E0-6F-40    2.5500000000000000E+002
   18    00-00-E0-FF-FF-FF-EF-41    4.2949672950000000E+009
   26    00-00-00-00-00-00-70-3F    3.9062500000000000E-003
   34    00-00-00-00-00-00-F0-3D    2.3283064365386963E-010
   42    DF-88-1E-1C-FE-74-AA-01    1.2345678901234500E-300
   50    FA-59-8C-42-CA-C0-F3-3F    1.2345678901234565E+000
   58    FB-59-8C-42-CA-C0-F3-3F    1.2345678901234567E+000
   66    FC-59-8C-42-CA-C0-F3-3F    1.2345678901234569E+000
   74    52-D3-BB-BC-E8-7E-3D-7E    1.2345678901234569E+300
   82    FF-FF-FF-FF-FF-FF-EF-FF   -1.7976931348623157E+308
   89    FF-FF-FF-FF-FF-FF-EF-7F    1.7976931348623157E+308
   97    01-00-00-00-00-00-00-00    4.9406564584124654E-324
   99    00-00-00-00-00-00-F8-FF                        NaN
  107    00-00-00-00-00-00-F0-FF                  -Infinity
  115    00-00-00-00-00-00-F0-7F                   Infinity
*/

// Example of the BitConverter::ToDouble method.
using namespace System;

// Convert eight byte array elements to a double and display it.
void BAToDouble( array<unsigned char>^bytes, int index )
{
   double value = BitConverter::ToDouble( bytes, index );
   Console::WriteLine( "{0,5}{1,27}{2,27:E16}", index, BitConverter::ToString( bytes, index, 8 ), value );
}

// Display a byte array, using multiple lines if necessary.
void WriteMultiLineByteArray( array<unsigned char>^bytes )
{
   const int rowSize = 20;
   int iter;
   Console::WriteLine( "initial unsigned char array" );
   Console::WriteLine( "---------------------------" );
   for ( iter = 0; iter < bytes->Length - rowSize; iter += rowSize )
   {
      Console::Write( BitConverter::ToString( bytes, iter, rowSize ) );
      Console::WriteLine( "-" );

   }
   Console::WriteLine( BitConverter::ToString( bytes, iter ) );
   Console::WriteLine();
}

int main()
{
   array<unsigned char>^byteArray = {0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,224,111,64,0,0,224,255,255,255,239,65,0,0,0,0,0,0,112,63,0,0,0,0,0,0,240,61,223,136,30,28,254,116,170,1,250,89,140,66,202,192,243,63,251,89,140,66,202,192,243,63,252,89,140,66,202,192,243,63,82,211,187,188,232,126,61,126,255,255,255,255,255,255,239,255,255,255,255,255,255,239,127,1,0,0,0,0,0,0,0,248,255,0,0,0,0,0,0,240,255,0,0,0,0,0,0,240,127};
   Console::WriteLine( "This example of the BitConverter::ToDouble( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to double values.\n" );
   WriteMultiLineByteArray( byteArray );
   Console::WriteLine( "{0,5}{1,27}{2,27:E16}", "index", "array elements", "double" );
   Console::WriteLine( "{0,5}{1,27}{2,27:E16}", "-----", "--------------", "------" );

   // Convert byte array elements to double values.
   BAToDouble( byteArray, 0 );
   BAToDouble( byteArray, 2 );
   BAToDouble( byteArray, 10 );
   BAToDouble( byteArray, 18 );
   BAToDouble( byteArray, 26 );
   BAToDouble( byteArray, 34 );
   BAToDouble( byteArray, 42 );
   BAToDouble( byteArray, 50 );
   BAToDouble( byteArray, 58 );
   BAToDouble( byteArray, 66 );
   BAToDouble( byteArray, 74 );
   BAToDouble( byteArray, 82 );
   BAToDouble( byteArray, 89 );
   BAToDouble( byteArray, 97 );
   BAToDouble( byteArray, 99 );
   BAToDouble( byteArray, 107 );
   BAToDouble( byteArray, 115 );
}

/*
This example of the BitConverter.ToDouble( byte( ), int )
method generates the following output. It converts elements
of a byte array to double values.

initial byte array
------------------
00-00-00-00-00-00-00-00-F0-3F-00-00-00-00-00-E0-6F-40-00-00-
E0-FF-FF-FF-EF-41-00-00-00-00-00-00-70-3F-00-00-00-00-00-00-
F0-3D-DF-88-1E-1C-FE-74-AA-01-FA-59-8C-42-CA-C0-F3-3F-FB-59-
8C-42-CA-C0-F3-3F-FC-59-8C-42-CA-C0-F3-3F-52-D3-BB-BC-E8-7E-
3D-7E-FF-FF-FF-FF-FF-FF-EF-FF-FF-FF-FF-FF-FF-EF-7F-01-00-00-
00-00-00-00-00-F8-FF-00-00-00-00-00-00-F0-FF-00-00-00-00-00-
00-F0-7F

index             array elements                     double
-----             --------------                     ------
    0    00-00-00-00-00-00-00-00    0.0000000000000000E+000
    2    00-00-00-00-00-00-F0-3F    1.0000000000000000E+000
   10    00-00-00-00-00-E0-6F-40    2.5500000000000000E+002
   18    00-00-E0-FF-FF-FF-EF-41    4.2949672950000000E+009
   26    00-00-00-00-00-00-70-3F    3.9062500000000000E-003
   34    00-00-00-00-00-00-F0-3D    2.3283064365386963E-010
   42    DF-88-1E-1C-FE-74-AA-01    1.2345678901234500E-300
   50    FA-59-8C-42-CA-C0-F3-3F    1.2345678901234565E+000
   58    FB-59-8C-42-CA-C0-F3-3F    1.2345678901234567E+000
   66    FC-59-8C-42-CA-C0-F3-3F    1.2345678901234569E+000
   74    52-D3-BB-BC-E8-7E-3D-7E    1.2345678901234569E+300
   82    FF-FF-FF-FF-FF-FF-EF-FF   -1.7976931348623157E+308
   89    FF-FF-FF-FF-FF-FF-EF-7F    1.7976931348623157E+308
   97    01-00-00-00-00-00-00-00    4.9406564584124654E-324
   99    00-00-00-00-00-00-F8-FF                        NaN
  107    00-00-00-00-00-00-F0-FF                  -Infinity
  115    00-00-00-00-00-00-F0-7F                   Infinity
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间


BitConverter ..::.ToInt16 方法

BitConverter
.
.
::
.
ToInt16 方法
BitConverter 类

返回由字节数组中指定位置的两个字节转换来的 16 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Byte(), _
    startIndex As Integer _
) As Short
public static short ToInt16(
    byte[] value,
    int startIndex
)
public:
static short ToInt16(
    array<unsigned char>^ value,
    int startIndex
)
static member ToInt16 :
        value:byte[] *
        startIndex:int -> int16

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System Int16
由两个字节构成、从 startIndex 开始的 16 位有符号整数。
异常 | 条件
ArgumentException | startIndex 等于 value 减 1 的长度。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToInt16 方法将 Byte 数组的元素转换为 Int16 值。

' Example of the BitConverter.ToInt16 method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToInt16Demo

    Const formatter As String = "{0,5}{1,17}{2,10}"

    ' Convert two Byte array elements to a Short and display it.
    Sub BAToInt16( bytes( ) As Byte, index As Integer )

        Dim value As Short = BitConverter.ToInt16( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 2 ), value )
    End Sub

    Sub Main( )

        Dim byteArray as Byte( ) = { _
             15, 0, 0, 128, 16, 39, 240, 216, 241, 255, 127 }

        Console.WriteLine( _
            "This example of the BitConverter.ToInt16( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements " & vbCrLf & _
            "of a Byte array to Short values." & vbCrLf )
        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )
        Console.WriteLine( BitConverter.ToString( byteArray ) )
        Console.WriteLine( )
        Console.WriteLine( formatter, "index", "array elements", "Short" )
        Console.WriteLine( formatter, "-----", "--------------", "-----" )

        ' Convert Byte array elements to Short values.
        BAToInt16( byteArray, 1 )
        BAToInt16( byteArray, 0 )
        BAToInt16( byteArray, 8 )
        BAToInt16( byteArray, 4 )
        BAToInt16( byteArray, 6 )
        BAToInt16( byteArray, 9 )
        BAToInt16( byteArray, 2 )
    End Sub
End Module

' This example of the BitConverter.ToInt16( Byte( ), Integer )
' method generates the following output. It converts elements
' of a Byte array to Short values.
'
' initial Byte array
' ------------------
' 0F-00-00-80-10-27-F0-D8-F1-FF-7F
'
' index   array elements     Short
' -----   --------------     -----
'     1            00-00         0
'     0            0F-00        15
'     8            F1-FF       -15
'     4            10-27     10000
'     6            F0-D8    -10000
'     9            FF-7F     32767
'     2            00-80    -32768

// Example of the BitConverter.ToInt16 method.
using System;

class BytesToInt16Demo
{
    const string formatter = "{0,5}{1,17}{2,10}";

    // Convert two byte array elements to a short and display it.
    public static void BAToInt16( byte[ ] bytes, int index )
    {
        short value = BitConverter.ToInt16( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 2 ), value );
    }

    public static void Main( )
    {
        byte[ ] byteArray =
            { 15, 0, 0, 128, 16, 39, 240, 216, 241, 255, 127 };

        Console.WriteLine(
            "This example of the BitConverter.ToInt16( byte[ ], " +
            "int ) \nmethod generates the following output. It " +
            "converts elements \nof a byte array to short values.\n" );
        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );
        Console.WriteLine( BitConverter.ToString( byteArray ) );
        Console.WriteLine( );
        Console.WriteLine( formatter, "index", "array elements", "short" );
        Console.WriteLine( formatter, "-----", "--------------", "-----" );

        // Convert byte array elements to short values.
        BAToInt16( byteArray, 1 );
        BAToInt16( byteArray, 0 );
        BAToInt16( byteArray, 8 );
        BAToInt16( byteArray, 4 );
        BAToInt16( byteArray, 6 );
        BAToInt16( byteArray, 9 );
        BAToInt16( byteArray, 2 );
    }
}

/*
This example of the BitConverter.ToInt16( byte[ ], int )
method generates the following output. It converts elements
of a byte array to short values.

initial byte array
------------------
0F-00-00-80-10-27-F0-D8-F1-FF-7F

index   array elements     short
-----   --------------     -----
    1            00-00         0
    0            0F-00        15
    8            F1-FF       -15
    4            10-27     10000
    6            F0-D8    -10000
    9            FF-7F     32767
    2            00-80    -32768
*/

// Example of the BitConverter::ToInt16 method.
using namespace System;

// Convert two byte array elements to a short and display it.
void BAToInt16( array<unsigned char>^bytes, int index )
{
   short value = BitConverter::ToInt16( bytes, index );
   Console::WriteLine( "{0,5}{1,17}{2,10}", index, BitConverter::ToString( bytes, index, 2 ), value );
}

int main()
{
   array<unsigned char>^byteArray = {15,0,0,128,16,39,240,216,241,255,127};
   Console::WriteLine( "This example of the BitConverter::ToInt16( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to short values.\n" );
   Console::WriteLine( "initial byte array" );
   Console::WriteLine( "------------------" );
   Console::WriteLine( BitConverter::ToString( byteArray ) );
   Console::WriteLine();
   Console::WriteLine( "{0,5}{1,17}{2,10}", "index", "array elements", "short" );
   Console::WriteLine( "{0,5}{1,17}{2,10}", "-----", "--------------", "-----" );

   // Convert byte array elements to short values.
   BAToInt16( byteArray, 1 );
   BAToInt16( byteArray, 0 );
   BAToInt16( byteArray, 8 );
   BAToInt16( byteArray, 4 );
   BAToInt16( byteArray, 6 );
   BAToInt16( byteArray, 9 );
   BAToInt16( byteArray, 2 );
}

/*
This example of the BitConverter::ToInt16( unsigned char[ ], int )
method generates the following output. It converts elements of a
byte array to short values.

initial byte array
------------------
0F-00-00-80-10-27-F0-D8-F1-FF-7F

index   array elements     short
-----   --------------     -----
    1            00-00         0
    0            0F-00        15
    8            F1-FF       -15
    4            10-27     10000
    6            F0-D8    -10000
    9            FF-7F     32767
    2            00-80    -32768
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间
Int16


BitConverter ..::.ToInt32 方法

BitConverter
.
.
::
.
ToInt32 方法
BitConverter 类

返回由字节数组中指定位置的四个字节转换来的 32 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Byte(), _
    startIndex As Integer _
) As Integer
public static int ToInt32(
    byte[] value,
    int startIndex
)
public:
static int ToInt32(
    array<unsigned char>^ value,
    int startIndex
)
static member ToInt32 :
        value:byte[] *
        startIndex:int -> int

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System Int32
由四个字节构成、从 startIndex 开始的 32 位有符号整数。
异常 | 条件
ArgumentException | startIndex 大于等于 value 减 3 的长度，且小于等于 value 减 1 的长度。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToInt32 方法将 Byte 数组的元素转换为 Int32 值。

' Example of the BitConverter.ToInt32 method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToInt32Demo

    Const formatter As String = "{0,5}{1,17}{2,15}"

    ' Convert four Byte array elements to an Integer and display it.
    Sub BAToInt32( bytes( ) As Byte, index As Integer )

        Dim value As Integer = BitConverter.ToInt32( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 4 ), value )
    End Sub

    ' Display a Byte array, using multiple lines if necessary.
    Sub WriteMultiLineByteArray( bytes( ) As Byte )

        Const rowSize As Integer = 20
        Dim iter As Integer

        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )

        For iter = 0 To bytes.Length - rowSize - 1 Step rowSize
            Console.Write( _
                BitConverter.ToString( bytes, iter, rowSize ) )
            Console.WriteLine( "-" )
        Next iter

        Console.WriteLine( BitConverter.ToString( bytes, iter ) )
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Dim byteArray as Byte( ) = { _
             15,   0,   0,   0,   0, 128,   0,   0,  16,   0, _
              0, 240, 255,   0, 202, 154,  59,   0,  54, 101, _
            196, 241, 255, 255, 255, 127 }

        Console.WriteLine( _
            "This example of the BitConverter.ToInt32( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements " & vbCrLf & _
            "of a Byte array to Integer values." & vbCrLf )

        WriteMultiLineByteArray( byteArray )

        Console.WriteLine( formatter, "index", "array elements", _
            "Integer" )
        Console.WriteLine( formatter, "-----", "--------------", _
            "-------" )

        ' Convert Byte array elements to Integer values.
        BAToInt32( byteArray, 1 )
        BAToInt32( byteArray, 0 )
        BAToInt32( byteArray, 21 )
        BAToInt32( byteArray, 6 )
        BAToInt32( byteArray, 9 )
        BAToInt32( byteArray, 13 )
        BAToInt32( byteArray, 17 )
        BAToInt32( byteArray, 22 )
        BAToInt32( byteArray, 2 )
    End Sub
End Module

' This example of the BitConverter.ToInt32( Byte( ), Integer )
' method generates the following output. It converts elements
' of a Byte array to Integer values.
'
' initial Byte array
' ------------------
' 0F-00-00-00-00-80-00-00-10-00-00-F0-FF-00-CA-9A-3B-00-36-65-
' C4-F1-FF-FF-FF-7F
'
' index   array elements        Integer
' -----   --------------        -------
'     1      00-00-00-00              0
'     0      0F-00-00-00             15
'    21      F1-FF-FF-FF            -15
'     6      00-00-10-00        1048576
'     9      00-00-F0-FF       -1048576
'    13      00-CA-9A-3B     1000000000
'    17      00-36-65-C4    -1000000000
'    22      FF-FF-FF-7F     2147483647
'     2      00-00-00-80    -2147483648

// Example of the BitConverter.ToInt32 method.
using System;

class BytesToInt32Demo
{
    const string formatter = "{0,5}{1,17}{2,15}";

    // Convert four byte array elements to an int and display it.
    public static void BAToInt32( byte[ ] bytes, int index )
    {
        int value = BitConverter.ToInt32( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 4 ), value );
    }

    // Display a byte array, using multiple lines if necessary.
    public static void WriteMultiLineByteArray( byte[ ] bytes )
    {
        const int rowSize = 20;
        int iter;

        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );

        for( iter = 0; iter < bytes.Length - rowSize; iter += rowSize )
        {
            Console.Write(
                BitConverter.ToString( bytes, iter, rowSize ) );
            Console.WriteLine( "-" );
        }

        Console.WriteLine( BitConverter.ToString( bytes, iter ) );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        byte[ ] byteArray = {
             15,   0,   0,   0,   0, 128,   0,   0,  16,   0,
              0, 240, 255,   0, 202, 154,  59,   0,  54, 101,
            196, 241, 255, 255, 255, 127 };

        Console.WriteLine(
            "This example of the BitConverter.ToInt32( byte[ ], " +
            "int ) \nmethod generates the following output. It " +
            "converts elements \nof a byte array to int values.\n" );

        WriteMultiLineByteArray( byteArray );

        Console.WriteLine( formatter, "index", "array elements",
            "int" );
        Console.WriteLine( formatter, "-----", "--------------",
            "---" );

        // Convert byte array elements to int values.
        BAToInt32( byteArray, 1 );
        BAToInt32( byteArray, 0 );
        BAToInt32( byteArray, 21 );
        BAToInt32( byteArray, 6 );
        BAToInt32( byteArray, 9 );
        BAToInt32( byteArray, 13 );
        BAToInt32( byteArray, 17 );
        BAToInt32( byteArray, 22 );
        BAToInt32( byteArray, 2 );
    }
}

/*
This example of the BitConverter.ToInt32( byte[ ], int )
method generates the following output. It converts elements
of a byte array to int values.

initial byte array
------------------
0F-00-00-00-00-80-00-00-10-00-00-F0-FF-00-CA-9A-3B-00-36-65-
C4-F1-FF-FF-FF-7F

index   array elements            int
-----   --------------            ---
    1      00-00-00-00              0
    0      0F-00-00-00             15
   21      F1-FF-FF-FF            -15
    6      00-00-10-00        1048576
    9      00-00-F0-FF       -1048576
   13      00-CA-9A-3B     1000000000
   17      00-36-65-C4    -1000000000
   22      FF-FF-FF-7F     2147483647
    2      00-00-00-80    -2147483648
*/

// Example of the BitConverter::ToInt32 method.
using namespace System;

// Convert four byte array elements to an int and display it.
void BAToInt32( array<unsigned char>^bytes, int index )
{
   int value = BitConverter::ToInt32( bytes, index );
   Console::WriteLine( "{0,5}{1,17}{2,15}", index, BitConverter::ToString( bytes, index, 4 ), value );
}

// Display a byte array, using multiple lines if necessary.
void WriteMultiLineByteArray( array<unsigned char>^bytes )
{
   const int rowSize = 20;
   int iter;
   Console::WriteLine( "initial unsigned char array" );
   Console::WriteLine( "---------------------------" );
   for ( iter = 0; iter < bytes->Length - rowSize; iter += rowSize )
   {
      Console::Write( BitConverter::ToString( bytes, iter, rowSize ) );
      Console::WriteLine( "-" );

   }
   Console::WriteLine( BitConverter::ToString( bytes, iter ) );
   Console::WriteLine();
}

int main()
{
   array<unsigned char>^byteArray = {15,0,0,0,0,128,0,0,16,0,0,240,255,0,202,154,59,0,54,101,196,241,255,255,255,127};
   Console::WriteLine( "This example of the BitConverter::ToInt32( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to int values.\n" );
   WriteMultiLineByteArray( byteArray );
   Console::WriteLine( "{0,5}{1,17}{2,15}", "index", "array elements", "int" );
   Console::WriteLine( "{0,5}{1,17}{2,15}", "-----", "--------------", "---" );

   // Convert byte array elements to int values.
   BAToInt32( byteArray, 1 );
   BAToInt32( byteArray, 0 );
   BAToInt32( byteArray, 21 );
   BAToInt32( byteArray, 6 );
   BAToInt32( byteArray, 9 );
   BAToInt32( byteArray, 13 );
   BAToInt32( byteArray, 17 );
   BAToInt32( byteArray, 22 );
   BAToInt32( byteArray, 2 );
}

/*
This example of the BitConverter::ToInt32( unsigned char[ ], int )
method generates the following output. It converts elements of a
byte array to int values.

initial unsigned char array
---------------------------
0F-00-00-00-00-80-00-00-10-00-00-F0-FF-00-CA-9A-3B-00-36-65-
C4-F1-FF-FF-FF-7F

index   array elements            int
-----   --------------            ---
    1      00-00-00-00              0
    0      0F-00-00-00             15
   21      F1-FF-FF-FF            -15
    6      00-00-10-00        1048576
    9      00-00-F0-FF       -1048576
   13      00-CA-9A-3B     1000000000
   17      00-36-65-C4    -1000000000
   22      FF-FF-FF-7F     2147483647
    2      00-00-00-80    -2147483648
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间
Int32


BitConverter ..::.ToInt64 方法

BitConverter
.
.
::
.
ToInt64 方法
BitConverter 类

返回由字节数组中指定位置的八个字节转换来的 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Byte(), _
    startIndex As Integer _
) As Long
public static long ToInt64(
    byte[] value,
    int startIndex
)
public:
static long long ToInt64(
    array<unsigned char>^ value,
    int startIndex
)
static member ToInt64 :
        value:byte[] *
        startIndex:int -> int64

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System Int64
由八个字节构成、从 startIndex 开始的 64 位有符号整数。
异常 | 条件
ArgumentException | startIndex 大于等于 value 减 7 的长度，且小于等于 value 减 1 的长度。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToInt64 方法将 Byte 数组的元素转换为 Int64 值。

' Example of the BitConverter.ToInt64 method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToInt64Demo

    Const formatter As String = "{0,5}{1,27}{2,24}"

    ' Convert eight Byte array elements to a Long and display it.
    Sub BAToInt64( bytes( ) As Byte, index As Integer )

        Dim value As Long = BitConverter.ToInt64( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 8 ), value )
    End Sub

    ' Display a Byte array, using multiple lines if necessary.
    Sub WriteMultiLineByteArray( bytes( ) As Byte )

        Const rowSize As Integer = 20
        Dim iter As Integer

        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )

        For iter = 0 To bytes.Length - rowSize - 1 Step rowSize
            Console.Write( _
                BitConverter.ToString( bytes, iter, rowSize ) )
            Console.WriteLine( "-" )
        Next iter

        Console.WriteLine( BitConverter.ToString( bytes, iter ) )
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Dim byteArray as Byte( ) = { _
              0,  54, 101, 196, 255, 255, 255, 255,   0,   0, _
              0,   0,   0,   0,   0,   0, 128,   0, 202, 154, _
             59,   0,   0,   0,   0,   1,   0,   0,   0,   0, _
            255, 255, 255, 255,   1,   0,   0, 255, 255, 255, _
            255, 255, 255, 255, 127,  86,  85,  85,  85,  85, _
             85, 255, 255, 170, 170, 170, 170, 170, 170,   0, _
              0, 100, 167, 179, 182, 224,  13,   0,   0, 156, _
             88,  76,  73,  31, 242 }

        Console.WriteLine( _
            "This example of the BitConverter.ToInt64( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements " & vbCrLf & _
            "of a Byte array to Long values." & vbCrLf )

        WriteMultiLineByteArray( byteArray )

        Console.WriteLine( formatter, "index", "array elements", _
            "Long" )
        Console.WriteLine( formatter, "-----", "--------------", _
            "----" )

        ' Convert Byte array elements to Long values.
        BAToInt64( byteArray, 8 )
        BAToInt64( byteArray, 5 )
        BAToInt64( byteArray, 34 )
        BAToInt64( byteArray, 17 )
        BAToInt64( byteArray, 0 )
        BAToInt64( byteArray, 21 )
        BAToInt64( byteArray, 26 )
        BAToInt64( byteArray, 53 )
        BAToInt64( byteArray, 45 )
        BAToInt64( byteArray, 59 )
        BAToInt64( byteArray, 67 )
        BAToInt64( byteArray, 37 )
        BAToInt64( byteArray, 9 )
    End Sub
End Module

' This example of the BitConverter.ToInt64( Byte( ), Integer )
' method generates the following output. It converts elements
' of a Byte array to Long values.
'
' initial Byte array
' ------------------
' 00-36-65-C4-FF-FF-FF-FF-00-00-00-00-00-00-00-00-80-00-CA-9A-
' 3B-00-00-00-00-01-00-00-00-00-FF-FF-FF-FF-01-00-00-FF-FF-FF-
' FF-FF-FF-FF-7F-56-55-55-55-55-55-FF-FF-AA-AA-AA-AA-AA-AA-00-
' 00-64-A7-B3-B6-E0-0D-00-00-9C-58-4C-49-1F-F2
'
' index             array elements                    Long
' -----             --------------                    ----
'     8    00-00-00-00-00-00-00-00                       0
'     5    FF-FF-FF-00-00-00-00-00                16777215
'    34    01-00-00-FF-FF-FF-FF-FF               -16777215
'    17    00-CA-9A-3B-00-00-00-00              1000000000
'     0    00-36-65-C4-FF-FF-FF-FF             -1000000000
'    21    00-00-00-00-01-00-00-00              4294967296
'    26    00-00-00-00-FF-FF-FF-FF             -4294967296
'    53    AA-AA-AA-AA-AA-AA-00-00         187649984473770
'    45    56-55-55-55-55-55-FF-FF        -187649984473770
'    59    00-00-64-A7-B3-B6-E0-0D     1000000000000000000
'    67    00-00-9C-58-4C-49-1F-F2    -1000000000000000000
'    37    FF-FF-FF-FF-FF-FF-FF-7F     9223372036854775807
'     9    00-00-00-00-00-00-00-80    -9223372036854775808

// Example of the BitConverter.ToInt64 method.
using System;

class BytesToInt64Demo
{
    const string formatter = "{0,5}{1,27}{2,24}";

    // Convert eight byte array elements to a long and display it.
    public static void BAToInt64( byte[ ] bytes, int index )
    {
        long value = BitConverter.ToInt64( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 8 ), value );
    }

    // Display a byte array, using multiple lines if necessary.
    public static void WriteMultiLineByteArray( byte[ ] bytes )
    {
        const int rowSize = 20;
        int iter;

        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );

        for( iter = 0; iter < bytes.Length - rowSize; iter += rowSize )
        {
            Console.Write(
                BitConverter.ToString( bytes, iter, rowSize ) );
            Console.WriteLine( "-" );
        }

        Console.WriteLine( BitConverter.ToString( bytes, iter ) );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        byte[ ] byteArray = {
              0,  54, 101, 196, 255, 255, 255, 255,   0,   0,
              0,   0,   0,   0,   0,   0, 128,   0, 202, 154,
             59,   0,   0,   0,   0,   1,   0,   0,   0,   0,
            255, 255, 255, 255,   1,   0,   0, 255, 255, 255,
            255, 255, 255, 255, 127,  86,  85,  85,  85,  85,
             85, 255, 255, 170, 170, 170, 170, 170, 170,   0,
              0, 100, 167, 179, 182, 224,  13,   0,   0, 156,
             88,  76,  73,  31, 242 };

        Console.WriteLine(
            "This example of the BitConverter.ToInt64( byte[ ], " +
            "int ) \nmethod generates the following output. It " +
            "converts elements \nof a byte array to long values.\r\n" );

        WriteMultiLineByteArray( byteArray );

        Console.WriteLine( formatter, "index", "array elements", "long" );
        Console.WriteLine( formatter, "-----", "--------------", "----" );

        // Convert byte array elements to long values.
        BAToInt64( byteArray, 8 );
        BAToInt64( byteArray, 5 );
        BAToInt64( byteArray, 34 );
        BAToInt64( byteArray, 17 );
        BAToInt64( byteArray, 0 );
        BAToInt64( byteArray, 21 );
        BAToInt64( byteArray, 26 );
        BAToInt64( byteArray, 53 );
        BAToInt64( byteArray, 45 );
        BAToInt64( byteArray, 59 );
        BAToInt64( byteArray, 67 );
        BAToInt64( byteArray, 37 );
        BAToInt64( byteArray, 9 );
    }
}

/*
This example of the BitConverter.ToInt64( byte[ ], int )
method generates the following output. It converts elements
of a byte array to long values.

initial byte array
------------------
00-36-65-C4-FF-FF-FF-FF-00-00-00-00-00-00-00-00-80-00-CA-9A-
3B-00-00-00-00-01-00-00-00-00-FF-FF-FF-FF-01-00-00-FF-FF-FF-
FF-FF-FF-FF-7F-56-55-55-55-55-55-FF-FF-AA-AA-AA-AA-AA-AA-00-
00-64-A7-B3-B6-E0-0D-00-00-9C-58-4C-49-1F-F2

index             array elements                    long
-----             --------------                    ----
    8    00-00-00-00-00-00-00-00                       0
    5    FF-FF-FF-00-00-00-00-00                16777215
   34    01-00-00-FF-FF-FF-FF-FF               -16777215
   17    00-CA-9A-3B-00-00-00-00              1000000000
    0    00-36-65-C4-FF-FF-FF-FF             -1000000000
   21    00-00-00-00-01-00-00-00              4294967296
   26    00-00-00-00-FF-FF-FF-FF             -4294967296
   53    AA-AA-AA-AA-AA-AA-00-00         187649984473770
   45    56-55-55-55-55-55-FF-FF        -187649984473770
   59    00-00-64-A7-B3-B6-E0-0D     1000000000000000000
   67    00-00-9C-58-4C-49-1F-F2    -1000000000000000000
   37    FF-FF-FF-FF-FF-FF-FF-7F     9223372036854775807
    9    00-00-00-00-00-00-00-80    -9223372036854775808
*/

// Example of the BitConverter::ToInt64 method.
using namespace System;

// Convert eight byte array elements to an __int64 and display it.
void BAToInt64( array<unsigned char>^bytes, int index )
{
   __int64 value = BitConverter::ToInt64( bytes, index );
   Console::WriteLine( "{0,5}{1,27}{2,24}", index, BitConverter::ToString( bytes, index, 8 ), value );
}

// Display a byte array, using multiple lines if necessary.
void WriteMultiLineByteArray( array<unsigned char>^bytes )
{
   const int rowSize = 20;
   int iter;
   Console::WriteLine( "initial unsigned char array" );
   Console::WriteLine( "---------------------------" );
   for ( iter = 0; iter < bytes->Length - rowSize; iter += rowSize )
   {
      Console::Write( BitConverter::ToString( bytes, iter, rowSize ) );
      Console::WriteLine( "-" );

   }
   Console::WriteLine( BitConverter::ToString( bytes, iter ) );
   Console::WriteLine();
}

int main()
{
   array<unsigned char>^byteArray = {0,54,101,196,255,255,255,255,0,0,0,0,0,0,0,0,128,0,202,154,59,0,0,0,0,1,0,0,0,0,255,255,255,255,1,0,0,255,255,255,255,255,255,255,127,86,85,85,85,85,85,255,255,170,170,170,170,170,170,0,0,100,167,179,182,224,13,0,0,156,88,76,73,31,242};
   Console::WriteLine( "This example of the BitConverter::ToInt64( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to __int64 values.\n" );
   WriteMultiLineByteArray( byteArray );
   Console::WriteLine( "{0,5}{1,27}{2,24}", "index", "array elements", "__int64" );
   Console::WriteLine( "{0,5}{1,27}{2,24}", "-----", "--------------", "-------" );

   // Convert byte array elements to __int64 values.
   BAToInt64( byteArray, 8 );
   BAToInt64( byteArray, 5 );
   BAToInt64( byteArray, 34 );
   BAToInt64( byteArray, 17 );
   BAToInt64( byteArray, 0 );
   BAToInt64( byteArray, 21 );
   BAToInt64( byteArray, 26 );
   BAToInt64( byteArray, 53 );
   BAToInt64( byteArray, 45 );
   BAToInt64( byteArray, 59 );
   BAToInt64( byteArray, 67 );
   BAToInt64( byteArray, 37 );
   BAToInt64( byteArray, 9 );
}

/*
This example of the BitConverter::ToInt64( unsigned char[ ], int )
method generates the following output. It converts elements of a
byte array to __int64 values.

initial unsigned char array
---------------------------
00-36-65-C4-FF-FF-FF-FF-00-00-00-00-00-00-00-00-80-00-CA-9A-
3B-00-00-00-00-01-00-00-00-00-FF-FF-FF-FF-01-00-00-FF-FF-FF-
FF-FF-FF-FF-7F-56-55-55-55-55-55-FF-FF-AA-AA-AA-AA-AA-AA-00-
00-64-A7-B3-B6-E0-0D-00-00-9C-58-4C-49-1F-F2

index             array elements                 __int64
-----             --------------                 -------
    8    00-00-00-00-00-00-00-00                       0
    5    FF-FF-FF-00-00-00-00-00                16777215
   34    01-00-00-FF-FF-FF-FF-FF               -16777215
   17    00-CA-9A-3B-00-00-00-00              1000000000
    0    00-36-65-C4-FF-FF-FF-FF             -1000000000
   21    00-00-00-00-01-00-00-00              4294967296
   26    00-00-00-00-FF-FF-FF-FF             -4294967296
   53    AA-AA-AA-AA-AA-AA-00-00         187649984473770
   45    56-55-55-55-55-55-FF-FF        -187649984473770
   59    00-00-64-A7-B3-B6-E0-0D     1000000000000000000
   67    00-00-9C-58-4C-49-1F-F2    -1000000000000000000
   37    FF-FF-FF-FF-FF-FF-FF-7F     9223372036854775807
    9    00-00-00-00-00-00-00-80    -9223372036854775808
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间
Int64


BitConverter ..::.ToSingle 方法

BitConverter
.
.
::
.
ToSingle 方法
BitConverter 类

返回由字节数组中指定位置的四个字节转换来的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Byte(), _
    startIndex As Integer _
) As Single
public static float ToSingle(
    byte[] value,
    int startIndex
)
public:
static float ToSingle(
    array<unsigned char>^ value,
    int startIndex
)
static member ToSingle :
        value:byte[] *
        startIndex:int -> float32

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System Single
由四个字节构成、从 startIndex 开始的单精度浮点数。
异常 | 条件
ArgumentException | startIndex 大于等于 value 减 3 的长度，且小于等于 value 减 1 的长度。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToSingle 方法将 Byte 数组的元素转换为 Single 值。

' Example of the BitConverter.ToSingle method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToSingleDemo

    Const formatter As String = "{0,5}{1,17}{2,18:E7}"

    ' Convert four Byte array elements to a Single and display it.
    Sub BAToSingle( bytes( ) As Byte, index As Integer )

        Dim value As Single = BitConverter.ToSingle( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 4 ), value )
    End Sub

    ' Display a Byte array, using multiple lines if necessary.
    Sub WriteMultiLineByteArray( bytes( ) As Byte )

        Const rowSize As Integer = 20
        Dim iter As Integer

        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )

        For iter = 0 To bytes.Length - rowSize - 1 Step rowSize
            Console.Write( _
                BitConverter.ToString( bytes, iter, rowSize ) )
            Console.WriteLine( "-" )
        Next iter

        Console.WriteLine( BitConverter.ToString( bytes, iter ) )
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Dim byteArray as Byte( ) = { _
              0,   0,   0,   0, 128,  63,   0,   0, 112,  65, _
              0, 255, 127,  71,   0,   0, 128,  59,   0,   0, _
            128,  47,  73,  70, 131,   5,  75,   6, 158,  63, _
             77,   6, 158,  63,  80,   6, 158,  63,  30,  55, _
            190, 121, 255, 255, 127, 255, 255, 127, 127,   1, _
              0,   0,   0, 192, 255,   0,   0, 128, 255,   0, _
              0, 128, 127 }

        Console.WriteLine( _
            "This example of the BitConverter.ToSingle( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements " & vbCrLf & _
            "of a Byte array to Single values." & vbCrLf )

        WriteMultiLineByteArray( byteArray )

        Console.WriteLine( formatter, "index", "array elements", _
            "Single" )
        Console.WriteLine( formatter, "-----", "--------------", _
            "------" )

        ' Convert Byte array elements to Single values.
        BAToSingle( byteArray, 0 )
        BAToSingle( byteArray, 2 )
        BAToSingle( byteArray, 6 )
        BAToSingle( byteArray, 10 )
        BAToSingle( byteArray, 14 )
        BAToSingle( byteArray, 18 )
        BAToSingle( byteArray, 22 )
        BAToSingle( byteArray, 26 )
        BAToSingle( byteArray, 30 )
        BAToSingle( byteArray, 34 )
        BAToSingle( byteArray, 38 )
        BAToSingle( byteArray, 42 )
        BAToSingle( byteArray, 45 )
        BAToSingle( byteArray, 49 )
        BAToSingle( byteArray, 51 )
        BAToSingle( byteArray, 55 )
        BAToSingle( byteArray, 59 )
    End Sub
End Module

' This example of the BitConverter.ToSingle( Byte( ), Integer )
' method generates the following output. It converts elements
' of a Byte array to Single values.
'
' initial Byte array
' ------------------
' 00-00-00-00-80-3F-00-00-70-41-00-FF-7F-47-00-00-80-3B-00-00-
' 80-2F-49-46-83-05-4B-06-9E-3F-4D-06-9E-3F-50-06-9E-3F-1E-37-
' BE-79-FF-FF-7F-FF-FF-7F-7F-01-00-00-00-C0-FF-00-00-80-FF-00-
' 00-80-7F
'
' index   array elements            Single
' -----   --------------            ------
'     0      00-00-00-00    0.0000000E+000
'     2      00-00-80-3F    1.0000000E+000
'     6      00-00-70-41    1.5000000E+001
'    10      00-FF-7F-47    6.5535000E+004
'    14      00-00-80-3B    3.9062500E-003
'    18      00-00-80-2F    2.3283064E-010
'    22      49-46-83-05    1.2345000E-035
'    26      4B-06-9E-3F    1.2345671E+000
'    30      4D-06-9E-3F    1.2345673E+000
'    34      50-06-9E-3F    1.2345676E+000
'    38      1E-37-BE-79    1.2345679E+035
'    42      FF-FF-7F-FF   -3.4028235E+038
'    45      FF-FF-7F-7F    3.4028235E+038
'    49      01-00-00-00    1.4012985E-045
'    51      00-00-C0-FF               NaN
'    55      00-00-80-FF         -Infinity
'    59      00-00-80-7F          Infinity

// Example of the BitConverter.ToSingle method.
using System;

class BytesToSingleDemo
{
    const string formatter = "{0,5}{1,17}{2,18:E7}";

    // Convert four byte array elements to a float and display it.
    public static void BAToSingle( byte[ ] bytes, int index )
    {
        float value = BitConverter.ToSingle( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 4 ), value );
    }

    // Display a byte array, using multiple lines if necessary.
    public static void WriteMultiLineByteArray( byte[ ] bytes )
    {
        const int rowSize = 20;
        int iter;

        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );

        for( iter = 0; iter < bytes.Length - rowSize; iter += rowSize )
        {
            Console.Write(
                BitConverter.ToString( bytes, iter, rowSize ) );
            Console.WriteLine( "-" );
        }

        Console.WriteLine( BitConverter.ToString( bytes, iter ) );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        byte[ ] byteArray = {
              0,   0,   0,   0, 128,  63,   0,   0, 112,  65,
              0, 255, 127,  71,   0,   0, 128,  59,   0,   0,
            128,  47,  73,  70, 131,   5,  75,   6, 158,  63,
             77,   6, 158,  63,  80,   6, 158,  63,  30,  55,
            190, 121, 255, 255, 127, 255, 255, 127, 127,   1,
              0,   0,   0, 192, 255,   0,   0, 128, 255,   0,
              0, 128, 127 };

        Console.WriteLine(
            "This example of the BitConverter.ToSingle( byte( ), " +
            "int ) \nmethod generates the following output. It " +
            "converts elements \nof a byte array to float values.\n" );

        WriteMultiLineByteArray( byteArray );

        Console.WriteLine( formatter, "index", "array elements",
            "float" );
        Console.WriteLine( formatter, "-----", "--------------",
            "-----" );

        // Convert byte array elements to float values.
        BAToSingle( byteArray, 0 );
        BAToSingle( byteArray, 2 );
        BAToSingle( byteArray, 6 );
        BAToSingle( byteArray, 10 );
        BAToSingle( byteArray, 14 );
        BAToSingle( byteArray, 18 );
        BAToSingle( byteArray, 22 );
        BAToSingle( byteArray, 26 );
        BAToSingle( byteArray, 30 );
        BAToSingle( byteArray, 34 );
        BAToSingle( byteArray, 38 );
        BAToSingle( byteArray, 42 );
        BAToSingle( byteArray, 45 );
        BAToSingle( byteArray, 49 );
        BAToSingle( byteArray, 51 );
        BAToSingle( byteArray, 55 );
        BAToSingle( byteArray, 59 );
    }
}

/*
This example of the BitConverter.ToSingle( byte( ), int )
method generates the following output. It converts elements
of a byte array to float values.

initial byte array
------------------
00-00-00-00-80-3F-00-00-70-41-00-FF-7F-47-00-00-80-3B-00-00-
80-2F-49-46-83-05-4B-06-9E-3F-4D-06-9E-3F-50-06-9E-3F-1E-37-
BE-79-FF-FF-7F-FF-FF-7F-7F-01-00-00-00-C0-FF-00-00-80-FF-00-
00-80-7F

index   array elements             float
-----   --------------             -----
    0      00-00-00-00    0.0000000E+000
    2      00-00-80-3F    1.0000000E+000
    6      00-00-70-41    1.5000000E+001
   10      00-FF-7F-47    6.5535000E+004
   14      00-00-80-3B    3.9062500E-003
   18      00-00-80-2F    2.3283064E-010
   22      49-46-83-05    1.2345000E-035
   26      4B-06-9E-3F    1.2345671E+000
   30      4D-06-9E-3F    1.2345673E+000
   34      50-06-9E-3F    1.2345676E+000
   38      1E-37-BE-79    1.2345679E+035
   42      FF-FF-7F-FF   -3.4028235E+038
   45      FF-FF-7F-7F    3.4028235E+038
   49      01-00-00-00    1.4012985E-045
   51      00-00-C0-FF               NaN
   55      00-00-80-FF         -Infinity
   59      00-00-80-7F          Infinity
*/

// Example of the BitConverter::ToSingle method.
using namespace System;

// Convert four byte array elements to a float and display it.
void BAToSingle( array<unsigned char>^bytes, int index )
{
   float value = BitConverter::ToSingle( bytes, index );
   Console::WriteLine( "{0,5}{1,17}{2,18:E7}", index, BitConverter::ToString( bytes, index, 4 ), value );
}

// Display a byte array, using multiple lines if necessary.
void WriteMultiLineByteArray( array<unsigned char>^bytes )
{
   const int rowSize = 20;
   int iter;
   Console::WriteLine( "initial unsigned char array" );
   Console::WriteLine( "---------------------------" );
   for ( iter = 0; iter < bytes->Length - rowSize; iter += rowSize )
   {
      Console::Write( BitConverter::ToString( bytes, iter, rowSize ) );
      Console::WriteLine( "-" );

   }
   Console::WriteLine( BitConverter::ToString( bytes, iter ) );
   Console::WriteLine();
}

int main()
{
   array<unsigned char>^byteArray = {0,0,0,0,128,63,0,0,112,65,0,255,127,71,0,0,128,59,0,0,128,47,73,70,131,5,75,6,158,63,77,6,158,63,80,6,158,63,30,55,190,121,255,255,127,255,255,127,127,1,0,0,0,192,255,0,0,128,255,0,0,128,127};
   Console::WriteLine( "This example of the BitConverter::ToSingle( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to float values.\n" );
   WriteMultiLineByteArray( byteArray );
   Console::WriteLine( "{0,5}{1,17}{2,18:E7}", "index", "array elements", "float" );
   Console::WriteLine( "{0,5}{1,17}{2,18:E7}", "-----", "--------------", "-----" );

   // Convert byte array elements to float values.
   BAToSingle( byteArray, 0 );
   BAToSingle( byteArray, 2 );
   BAToSingle( byteArray, 6 );
   BAToSingle( byteArray, 10 );
   BAToSingle( byteArray, 14 );
   BAToSingle( byteArray, 18 );
   BAToSingle( byteArray, 22 );
   BAToSingle( byteArray, 26 );
   BAToSingle( byteArray, 30 );
   BAToSingle( byteArray, 34 );
   BAToSingle( byteArray, 38 );
   BAToSingle( byteArray, 42 );
   BAToSingle( byteArray, 45 );
   BAToSingle( byteArray, 49 );
   BAToSingle( byteArray, 51 );
   BAToSingle( byteArray, 55 );
   BAToSingle( byteArray, 59 );
}

/*
This example of the BitConverter::ToSingle( unsigned char[ ], int )
method generates the following output. It converts elements of a
byte array to float values.

initial unsigned char array
---------------------------
00-00-00-00-80-3F-00-00-70-41-00-FF-7F-47-00-00-80-3B-00-00-
80-2F-49-46-83-05-4B-06-9E-3F-4D-06-9E-3F-50-06-9E-3F-1E-37-
BE-79-FF-FF-7F-FF-FF-7F-7F-01-00-00-00-C0-FF-00-00-80-FF-00-
00-80-7F

index   array elements             float
-----   --------------             -----
    0      00-00-00-00    0.0000000E+000
    2      00-00-80-3F    1.0000000E+000
    6      00-00-70-41    1.5000000E+001
   10      00-FF-7F-47    6.5535000E+004
   14      00-00-80-3B    3.9062500E-003
   18      00-00-80-2F    2.3283064E-010
   22      49-46-83-05    1.2345000E-035
   26      4B-06-9E-3F    1.2345671E+000
   30      4D-06-9E-3F    1.2345673E+000
   34      50-06-9E-3F    1.2345676E+000
   38      1E-37-BE-79    1.2345679E+035
   42      FF-FF-7F-FF   -3.4028235E+038
   45      FF-FF-7F-7F    3.4028235E+038
   49      01-00-00-00    1.4012985E-045
   51      00-00-C0-FF               NaN
   55      00-00-80-FF         -Infinity
   59      00-00-80-7F          Infinity
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间
Single


BitConverter ..::.ToString 方法

BitConverter
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BitConverter 类

将指定的字节数组的每个元素的数值转换为它的等效十六进制字符串表示形式。

名称 说明
页首

参考

BitConverter 类
BitConverter 成员
System 命名空间


BitConverter ..::.ToString 方法 ( array<Byte >[]()[])

BitConverter
.
.
::
.
ToString 方法 (
array<
Byte
>
[]
()
[]
)
BitConverter 类

将指定的字节数组的每个元素的数值转换为它的等效十六进制字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Byte() _
) As String
public static string ToString(
    byte[] value
)
public:
static String^ ToString(
    array<unsigned char>^ value
)
static member ToString :
        value:byte[] -> string

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。

返回值

类型： System String
由以连字符分隔的十六进制对构成的 String，其中每一对表示 value 中对应的元素；例如“7F-2C-4A”。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 中的元素全部被转换。

下面的代码示例使用 ToString 方法将 Byte 数组转换为 String 对象。

' Example of the BitConverter.ToString( Byte( ) ) method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToStringDemo

    ' Display a Byte array with a name.
    Sub WriteByteArray( bytes( ) As Byte, name As String )

        Const underLine As String = "--------------------------------"

        Console.WriteLine( name )
        Console.WriteLine( underLine.Substring( 0, _
            Math.Min( name.Length, underLine.Length ) ) )
        Console.WriteLine( BitConverter.ToString( bytes ) )
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Dim arrayOne as Byte( ) = { _
              0,   1,   2,   4,   8,  16,  32,  64, 128, 255 }

        Dim arrayTwo as Byte( ) = { _
             32,   0,   0,  42,   0,  65,   0, 125,   0, 197, _
              0, 168,   3,  41,   4, 172,  32 }

        Dim arrayThree as Byte( ) = { _
             15,   0,   0, 128,  16,  39, 240, 216, 241, 255, _
            127 }

        Dim arrayFour as Byte( ) = { _
             15,   0,   0,   0,   0,  16,   0, 255,   3,   0, _
              0, 202, 154,  59, 255, 255, 255, 255, 127 }

        Console.WriteLine( "This example of the " & _
            "BitConverter.ToString( Byte( ) ) " & vbCrLf & _
            "method generates the following output." & vbCrLf )

        WriteByteArray( arrayOne, "arrayOne" )
        WriteByteArray( arrayTwo, "arrayTwo" )
        WriteByteArray( arrayThree, "arrayThree" )
        WriteByteArray( arrayFour, "arrayFour" )
    End Sub
End Module

' This example of the BitConverter.ToString( Byte( ) )
' method generates the following output.
'
' arrayOne
' --------
' 00-01-02-04-08-10-20-40-80-FF
'
' arrayTwo
' --------
' 20-00-00-2A-00-41-00-7D-00-C5-00-A8-03-29-04-AC-20
'
' arrayThree
' ----------
' 0F-00-00-80-10-27-F0-D8-F1-FF-7F
'
' arrayFour
' ---------
' 0F-00-00-00-00-10-00-FF-03-00-00-CA-9A-3B-FF-FF-FF-FF-7F

// Example of the BitConverter.ToString( byte[ ] ) method.
using System;

class BytesToStringDemo
{
    // Display a byte array with a name.
    public static void WriteByteArray( byte[ ] bytes, string name )
    {
        const string underLine = "--------------------------------";

        Console.WriteLine( name );
        Console.WriteLine( underLine.Substring( 0,
            Math.Min( name.Length, underLine.Length ) ) );
        Console.WriteLine( BitConverter.ToString( bytes ) );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        byte[ ] arrayOne = {
             0,   1,   2,   4,   8,  16,  32,  64, 128, 255 };

        byte[ ] arrayTwo = {
            32,   0,   0,  42,   0,  65,   0, 125,   0, 197,
             0, 168,   3,  41,   4, 172,  32 };

        byte[ ] arrayThree = {
            15,   0,   0, 128,  16,  39, 240, 216, 241, 255,
           127 };

        byte[ ] arrayFour = {
            15,   0,   0,   0,   0,  16,   0, 255,   3,   0,
             0, 202, 154,  59, 255, 255, 255, 255, 127 };

        Console.WriteLine( "This example of the " +
            "BitConverter.ToString( byte[ ] ) \n" +
            "method generates the following output.\n" );

        WriteByteArray( arrayOne, "arrayOne" );
        WriteByteArray( arrayTwo, "arrayTwo" );
        WriteByteArray( arrayThree, "arrayThree" );
        WriteByteArray( arrayFour, "arrayFour" );
    }
}

/*
This example of the BitConverter.ToString( byte[ ] )
method generates the following output.

arrayOne
--------
00-01-02-04-08-10-20-40-80-FF

arrayTwo
--------
20-00-00-2A-00-41-00-7D-00-C5-00-A8-03-29-04-AC-20

arrayThree
----------
0F-00-00-80-10-27-F0-D8-F1-FF-7F

arrayFour
---------
0F-00-00-00-00-10-00-FF-03-00-00-CA-9A-3B-FF-FF-FF-FF-7F
*/

// Example of the BitConverter::ToString( unsigned char[ ] ) method.
using namespace System;

// Display a byte array with a name.
void WriteByteArray( array<unsigned char>^bytes, String^ name )
{
   String^ underLine = "--------------------------------";
   Console::WriteLine( name );
   Console::WriteLine( underLine->Substring( 0, Math::Min( name->Length, underLine->Length ) ) );
   Console::WriteLine( BitConverter::ToString( bytes ) );
   Console::WriteLine();
}

int main()
{
   array<unsigned char>^arrayOne = {0,1,2,4,8,16,32,64,128,255};
   array<unsigned char>^arrayTwo = {32,0,0,42,0,65,0,125,0,197,0,168,3,41,4,172,32};
   array<unsigned char>^arrayThree = {15,0,0,128,16,39,240,216,241,255,127};
   array<unsigned char>^arrayFour = {15,0,0,0,0,16,0,255,3,0,0,202,154,59,255,255,255,255,127};
   Console::WriteLine( "This example of the "
   "BitConverter::ToString( unsigned char[ ] ) \n"
   "method generates the following output.\n" );
   WriteByteArray( arrayOne, "arrayOne" );
   WriteByteArray( arrayTwo, "arrayTwo" );
   WriteByteArray( arrayThree, "arrayThree" );
   WriteByteArray( arrayFour, "arrayFour" );
}

/*
This example of the BitConverter::ToString( unsigned char[ ] )
method generates the following output.

arrayOne
--------
00-01-02-04-08-10-20-40-80-FF

arrayTwo
--------
20-00-00-2A-00-41-00-7D-00-C5-00-A8-03-29-04-AC-20

arrayThree
----------
0F-00-00-80-10-27-F0-D8-F1-FF-7F

arrayFour
---------
0F-00-00-00-00-10-00-FF-03-00-00-CA-9A-3B-FF-FF-FF-FF-7F
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
ToString 重载
System 命名空间


BitConverter ..::.ToString 方法 ( array<Byte >[]()[], Int32)

BitConverter
.
.
::
.
ToString 方法 (
array<
Byte
>
[]
()
[]
, Int32)
BitConverter 类

将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Byte(), _
    startIndex As Integer _
) As String
public static string ToString(
    byte[] value,
    int startIndex
)
public:
static String^ ToString(
    array<unsigned char>^ value,
    int startIndex
)
static member ToString :
        value:byte[] *
        startIndex:int -> string

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System String
由以连字符分隔的十六进制对构成的 String，其中每一对表示 value 的子数组中对应的元素；例如“7F-2C-4A”。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

转换从数组位置 startIndex 到数组结尾的元素。

下面的代码示例使用 ToString 方法将从指定 startIndex 开始的 Byte 数组的一部分转换为 String。

' Example of some BitConverter.ToString( ) method overloads.
Imports System
Imports Microsoft.VisualBasic

Module BytesToStringDemo

    ' Display a Byte array, using multiple lines if necessary.
    Sub WriteMultiLineByteArray( bytes( ) As Byte, name As String )

        Const rowSize As Integer = 20
        Const underLine As String = "--------------------------------"
        Dim iter As Integer

        Console.WriteLine( name )
        Console.WriteLine( underLine.Substring( 0, _
            Math.Min( name.Length, underLine.Length ) ) )

        For iter = 0 To bytes.Length - rowSize - 1 Step rowSize
            Console.Write( _
                BitConverter.ToString( bytes, iter, rowSize ) )
            Console.WriteLine( "-" )
        Next iter

        Console.WriteLine( BitConverter.ToString( bytes, iter ) )
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Dim arrayOne as Byte( ) = { _
              0,   0,   0,   0, 128,  63,   0,   0, 112,  65, _
              0, 255, 127,  71,   0,   0, 128,  59,   0,   0, _
            128,  47,  73,  70, 131,   5,  75,   6, 158,  63, _
             77,   6, 158,  63,  80,   6, 158,  63,  30,  55, _
            190, 121, 255, 255, 127, 255, 255, 127, 127,   1, _
              0,   0,   0, 192, 255,   0,   0, 128, 255,   0, _
              0, 128, 127 }

        Dim arrayTwo as Byte( ) = { _
            255, 255, 255,   0,   0,  20,   0,  33,   0,   0, _
              0,   1,   0,   0,   0, 100, 167, 179, 182, 224, _
             13,   0, 202, 154,  59,   0, 143,  91,   0, 170, _
            170, 170, 170, 170, 170,   0,   0, 232, 137,   4, _
             35, 199, 138, 255, 232, 244, 255, 252, 205, 255, _
            255, 129 }

        Dim arrayThree as Byte( ) = { _
              0, 222,   0,   0,   0, 224, 111,  64,   0,   0, _
            224, 255, 255, 255, 239,  65,   0,   0, 131,   0, _
              0,   0, 112,  63,   0, 143,   0, 100,   0,   0, _
            240,  61, 223, 136,  30,  28, 254, 116, 170,   1, _
            250,  89, 140,  66, 202, 192, 243,  63, 251,  89, _
            140,  66, 202, 192, 243,  63, 252,  89, 140,  66, _
            202, 192, 243,  63,  82, 211, 187, 188, 232, 126, _
            255, 255, 255, 244, 255, 239, 127,   1,   0,   0, _
              0,  10,  17,   0,   0, 248, 255,   0,  88,   0, _
             91,   0,   0, 240, 255,   0,   0, 240, 157 }

        Console.WriteLine( "This example of the" & vbCrLf & _
            "  BitConverter.ToString( Byte( ), Integer ) and " & _
            vbCrLf & "  BitConverter.ToString( Byte( ), " & _
            "Integer, Integer ) " & vbCrLf & "methods generates " & _
            "the following output." & vbCrLf )

        WriteMultiLineByteArray( arrayOne, "arrayOne" )
        WriteMultiLineByteArray( arrayTwo, "arrayTwo" )
        WriteMultiLineByteArray( arrayThree, "arrayThree" )
    End Sub
End Module

' This example of the
'   BitConverter.ToString( Byte( ), Integer ) and
'   BitConverter.ToString( Byte( ), Integer, Integer )
' methods generates the following output.
'
' arrayOne
' --------
' 00-00-00-00-80-3F-00-00-70-41-00-FF-7F-47-00-00-80-3B-00-00-
' 80-2F-49-46-83-05-4B-06-9E-3F-4D-06-9E-3F-50-06-9E-3F-1E-37-
' BE-79-FF-FF-7F-FF-FF-7F-7F-01-00-00-00-C0-FF-00-00-80-FF-00-
' 00-80-7F
'
' arrayTwo
' --------
' FF-FF-FF-00-00-14-00-21-00-00-00-01-00-00-00-64-A7-B3-B6-E0-
' 0D-00-CA-9A-3B-00-8F-5B-00-AA-AA-AA-AA-AA-AA-00-00-E8-89-04-
' 23-C7-8A-FF-E8-F4-FF-FC-CD-FF-FF-81
'
' arrayThree
' ----------
' 00-DE-00-00-00-E0-6F-40-00-00-E0-FF-FF-FF-EF-41-00-00-83-00-
' 00-00-70-3F-00-8F-00-64-00-00-F0-3D-DF-88-1E-1C-FE-74-AA-01-
' FA-59-8C-42-CA-C0-F3-3F-FB-59-8C-42-CA-C0-F3-3F-FC-59-8C-42-
' CA-C0-F3-3F-52-D3-BB-BC-E8-7E-FF-FF-FF-F4-FF-EF-7F-01-00-00-
' 00-0A-11-00-00-F8-FF-00-58-00-5B-00-00-F0-FF-00-00-F0-9D

// Example of some BitConverter.ToString( ) method overloads.
using System;

class BytesToStringDemo
{
    // Display a byte array, using multiple lines if necessary.
    public static void WriteMultiLineByteArray( byte[ ] bytes,
        string name )
    {
        const int rowSize = 20;
        const string underLine = "--------------------------------";
        int iter;

        Console.WriteLine( name );
        Console.WriteLine( underLine.Substring( 0,
            Math.Min( name.Length, underLine.Length ) ) );

        for( iter = 0; iter < bytes.Length - rowSize; iter += rowSize )
        {
            Console.Write(
                BitConverter.ToString( bytes, iter, rowSize ) );
            Console.WriteLine( "-" );
        }

        Console.WriteLine( BitConverter.ToString( bytes, iter ) );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        byte[ ] arrayOne = {
              0,   0,   0,   0, 128,  63,   0,   0, 112,  65,
              0, 255, 127,  71,   0,   0, 128,  59,   0,   0,
            128,  47,  73,  70, 131,   5,  75,   6, 158,  63,
             77,   6, 158,  63,  80,   6, 158,  63,  30,  55,
            190, 121, 255, 255, 127, 255, 255, 127, 127,   1,
              0,   0,   0, 192, 255,   0,   0, 128, 255,   0,
              0, 128, 127 };

        byte[ ] arrayTwo = {
            255, 255, 255,   0,   0,  20,   0,  33,   0,   0,
              0,   1,   0,   0,   0, 100, 167, 179, 182, 224,
             13,   0, 202, 154,  59,   0, 143,  91,   0, 170,
            170, 170, 170, 170, 170,   0,   0, 232, 137,   4,
             35, 199, 138, 255, 232, 244, 255, 252, 205, 255,
            255, 129 };

        byte[ ] arrayThree = {
              0, 222,   0,   0,   0, 224, 111,  64,   0,   0,
            224, 255, 255, 255, 239,  65,   0,   0, 131,   0,
              0,   0, 112,  63,   0, 143,   0, 100,   0,   0,
            240,  61, 223, 136,  30,  28, 254, 116, 170,   1,
            250,  89, 140,  66, 202, 192, 243,  63, 251,  89,
            140,  66, 202, 192, 243,  63, 252,  89, 140,  66,
            202, 192, 243,  63,  82, 211, 187, 188, 232, 126,
            255, 255, 255, 244, 255, 239, 127,   1,   0,   0,
              0,  10,  17,   0,   0, 248, 255,   0,  88,   0,
             91,   0,   0, 240, 255,   0,   0, 240, 157 };

        Console.WriteLine( "This example of the\n" +
            "  BitConverter.ToString( byte[ ], int ) and \n" +
            "  BitConverter.ToString( byte[ ], int, int ) \n" +
            "methods generates the following output.\n" );

        WriteMultiLineByteArray( arrayOne, "arrayOne" );
        WriteMultiLineByteArray( arrayTwo, "arrayTwo" );
        WriteMultiLineByteArray( arrayThree, "arrayThree" );
    }
}

/*
This example of the
  BitConverter.ToString( byte[ ], int ) and
  BitConverter.ToString( byte[ ], int, int )
methods generates the following output.

arrayOne
--------
00-00-00-00-80-3F-00-00-70-41-00-FF-7F-47-00-00-80-3B-00-00-
80-2F-49-46-83-05-4B-06-9E-3F-4D-06-9E-3F-50-06-9E-3F-1E-37-
BE-79-FF-FF-7F-FF-FF-7F-7F-01-00-00-00-C0-FF-00-00-80-FF-00-
00-80-7F

arrayTwo
--------
FF-FF-FF-00-00-14-00-21-00-00-00-01-00-00-00-64-A7-B3-B6-E0-
0D-00-CA-9A-3B-00-8F-5B-00-AA-AA-AA-AA-AA-AA-00-00-E8-89-04-
23-C7-8A-FF-E8-F4-FF-FC-CD-FF-FF-81

arrayThree
----------
00-DE-00-00-00-E0-6F-40-00-00-E0-FF-FF-FF-EF-41-00-00-83-00-
00-00-70-3F-00-8F-00-64-00-00-F0-3D-DF-88-1E-1C-FE-74-AA-01-
FA-59-8C-42-CA-C0-F3-3F-FB-59-8C-42-CA-C0-F3-3F-FC-59-8C-42-
CA-C0-F3-3F-52-D3-BB-BC-E8-7E-FF-FF-FF-F4-FF-EF-7F-01-00-00-
00-0A-11-00-00-F8-FF-00-58-00-5B-00-00-F0-FF-00-00-F0-9D
*/

// Example of some BitConverter::ToString( ) method overloads.
using namespace System;

// Display a byte array, using multiple lines if necessary.
void WriteMultiLineByteArray( array<unsigned char>^bytes, String^ name )
{
   const int rowSize = 20;
   String^ underLine = "--------------------------------";
   int iter;
   Console::WriteLine( name );
   Console::WriteLine( underLine->Substring( 0, Math::Min( name->Length, underLine->Length ) ) );
   for ( iter = 0; iter < bytes->Length - rowSize; iter += rowSize )
   {
      Console::Write( BitConverter::ToString( bytes, iter, rowSize ) );
      Console::WriteLine( "-" );

   }
   Console::WriteLine( BitConverter::ToString( bytes, iter ) );
   Console::WriteLine();
}

int main()
{
   array<unsigned char>^arrayOne = {0,0,0,0,128,63,0,0,112,65,0,255,127,71,0,0,128,59,0,0,128,47,73,70,131,5,75,6,158,63,77,6,158,63,80,6,158,63,30,55,190,121,255,255,127,255,255,127,127,1,0,0,0,192,255,0,0,128,255,0,0,128,127};
   array<unsigned char>^arrayTwo = {255,255,255,0,0,20,0,33,0,0,0,1,0,0,0,100,167,179,182,224,13,0,202,154,59,0,143,91,0,170,170,170,170,170,170,0,0,232,137,4,35,199,138,255,232,244,255,252,205,255,255,129};
   array<unsigned char>^arrayThree = {0,222,0,0,0,224,111,64,0,0,224,255,255,255,239,65,0,0,131,0,0,0,112,63,0,143,0,100,0,0,240,61,223,136,30,28,254,116,170,1,250,89,140,66,202,192,243,63,251,89,140,66,202,192,243,63,252,89,140,66,202,192,243,63,82,211,187,188,232,126,255,255,255,244,255,239,127,1,0,0,0,10,17,0,0,248,255,0,88,0,91,0,0,240,255,0,0,240,157};
   Console::WriteLine( "This example of the\n"
   "  BitConverter::ToString( unsigned char[ ], int ) and \n"
   "  BitConverter::ToString( unsigned char[ ], int, int ) \n"
   "methods generates the following output.\n" );
   WriteMultiLineByteArray( arrayOne, "arrayOne" );
   WriteMultiLineByteArray( arrayTwo, "arrayTwo" );
   WriteMultiLineByteArray( arrayThree, "arrayThree" );
}

/*
This example of the
  BitConverter::ToString( unsigned char[ ], int ) and
  BitConverter::ToString( unsigned char[ ], int, int )
methods generates the following output.

arrayOne
--------
00-00-00-00-80-3F-00-00-70-41-00-FF-7F-47-00-00-80-3B-00-00-
80-2F-49-46-83-05-4B-06-9E-3F-4D-06-9E-3F-50-06-9E-3F-1E-37-
BE-79-FF-FF-7F-FF-FF-7F-7F-01-00-00-00-C0-FF-00-00-80-FF-00-
00-80-7F

arrayTwo
--------
FF-FF-FF-00-00-14-00-21-00-00-00-01-00-00-00-64-A7-B3-B6-E0-
0D-00-CA-9A-3B-00-8F-5B-00-AA-AA-AA-AA-AA-AA-00-00-E8-89-04-
23-C7-8A-FF-E8-F4-FF-FC-CD-FF-FF-81

arrayThree
----------
00-DE-00-00-00-E0-6F-40-00-00-E0-FF-FF-FF-EF-41-00-00-83-00-
00-00-70-3F-00-8F-00-64-00-00-F0-3D-DF-88-1E-1C-FE-74-AA-01-
FA-59-8C-42-CA-C0-F3-3F-FB-59-8C-42-CA-C0-F3-3F-FC-59-8C-42-
CA-C0-F3-3F-52-D3-BB-BC-E8-7E-FF-FF-FF-F4-FF-EF-7F-01-00-00-
00-0A-11-00-00-F8-FF-00-58-00-5B-00-00-F0-FF-00-00-F0-9D
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
ToString 重载
System 命名空间


BitConverter ..::.ToString 方法 ( array<Byte >[]()[], Int32, Int32)

BitConverter
.
.
::
.
ToString 方法 (
array<
Byte
>
[]
()
[]
, Int32, Int32)
BitConverter 类

将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Byte(), _
    startIndex As Integer, _
    length As Integer _
) As String
public static string ToString(
    byte[] value,
    int startIndex,
    int length
)
public:
static String^ ToString(
    array<unsigned char>^ value,
    int startIndex,
    int length
)
static member ToString :
        value:byte[] *
        startIndex:int *
        length:int -> string

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。
length
类型： System Int32
要转换的 value 中的数组元素数。

返回值

类型： System String
由以连字符分隔的十六进制对构成的 String，其中每一对表示 value 的子数组中对应的元素；例如“7F-2C-4A”。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 或 length 小于零。 - 或 - startIndex 大于零且大于等于 value 的长度。
ArgumentException | startIndex 和 length 的组合不指定 value 中的位置；也就是说，startIndex 参数大于 value 的长度减去 length 参数。

转换数组位置 startIndex 处的 length 个元素。

如果 length 等于零，则此方法返回 String..::.Empty。

下面的代码示例使用 ToString 方法将从指定 startIndex 开始并具有指定 length 的 Byte 数组的一部分转换为 String。

' Example of some BitConverter.ToString( ) method overloads.
Imports System
Imports Microsoft.VisualBasic

Module BytesToStringDemo

    ' Display a Byte array, using multiple lines if necessary.
    Sub WriteMultiLineByteArray( bytes( ) As Byte, name As String )

        Const rowSize As Integer = 20
        Const underLine As String = "--------------------------------"
        Dim iter As Integer

        Console.WriteLine( name )
        Console.WriteLine( underLine.Substring( 0, _
            Math.Min( name.Length, underLine.Length ) ) )

        For iter = 0 To bytes.Length - rowSize - 1 Step rowSize
            Console.Write( _
                BitConverter.ToString( bytes, iter, rowSize ) )
            Console.WriteLine( "-" )
        Next iter

        Console.WriteLine( BitConverter.ToString( bytes, iter ) )
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Dim arrayOne as Byte( ) = { _
              0,   0,   0,   0, 128,  63,   0,   0, 112,  65, _
              0, 255, 127,  71,   0,   0, 128,  59,   0,   0, _
            128,  47,  73,  70, 131,   5,  75,   6, 158,  63, _
             77,   6, 158,  63,  80,   6, 158,  63,  30,  55, _
            190, 121, 255, 255, 127, 255, 255, 127, 127,   1, _
              0,   0,   0, 192, 255,   0,   0, 128, 255,   0, _
              0, 128, 127 }

        Dim arrayTwo as Byte( ) = { _
            255, 255, 255,   0,   0,  20,   0,  33,   0,   0, _
              0,   1,   0,   0,   0, 100, 167, 179, 182, 224, _
             13,   0, 202, 154,  59,   0, 143,  91,   0, 170, _
            170, 170, 170, 170, 170,   0,   0, 232, 137,   4, _
             35, 199, 138, 255, 232, 244, 255, 252, 205, 255, _
            255, 129 }

        Dim arrayThree as Byte( ) = { _
              0, 222,   0,   0,   0, 224, 111,  64,   0,   0, _
            224, 255, 255, 255, 239,  65,   0,   0, 131,   0, _
              0,   0, 112,  63,   0, 143,   0, 100,   0,   0, _
            240,  61, 223, 136,  30,  28, 254, 116, 170,   1, _
            250,  89, 140,  66, 202, 192, 243,  63, 251,  89, _
            140,  66, 202, 192, 243,  63, 252,  89, 140,  66, _
            202, 192, 243,  63,  82, 211, 187, 188, 232, 126, _
            255, 255, 255, 244, 255, 239, 127,   1,   0,   0, _
              0,  10,  17,   0,   0, 248, 255,   0,  88,   0, _
             91,   0,   0, 240, 255,   0,   0, 240, 157 }

        Console.WriteLine( "This example of the" & vbCrLf & _
            "  BitConverter.ToString( Byte( ), Integer ) and " & _
            vbCrLf & "  BitConverter.ToString( Byte( ), " & _
            "Integer, Integer ) " & vbCrLf & "methods generates " & _
            "the following output." & vbCrLf )

        WriteMultiLineByteArray( arrayOne, "arrayOne" )
        WriteMultiLineByteArray( arrayTwo, "arrayTwo" )
        WriteMultiLineByteArray( arrayThree, "arrayThree" )
    End Sub
End Module

' This example of the
'   BitConverter.ToString( Byte( ), Integer ) and
'   BitConverter.ToString( Byte( ), Integer, Integer )
' methods generates the following output.
'
' arrayOne
' --------
' 00-00-00-00-80-3F-00-00-70-41-00-FF-7F-47-00-00-80-3B-00-00-
' 80-2F-49-46-83-05-4B-06-9E-3F-4D-06-9E-3F-50-06-9E-3F-1E-37-
' BE-79-FF-FF-7F-FF-FF-7F-7F-01-00-00-00-C0-FF-00-00-80-FF-00-
' 00-80-7F
'
' arrayTwo
' --------
' FF-FF-FF-00-00-14-00-21-00-00-00-01-00-00-00-64-A7-B3-B6-E0-
' 0D-00-CA-9A-3B-00-8F-5B-00-AA-AA-AA-AA-AA-AA-00-00-E8-89-04-
' 23-C7-8A-FF-E8-F4-FF-FC-CD-FF-FF-81
'
' arrayThree
' ----------
' 00-DE-00-00-00-E0-6F-40-00-00-E0-FF-FF-FF-EF-41-00-00-83-00-
' 00-00-70-3F-00-8F-00-64-00-00-F0-3D-DF-88-1E-1C-FE-74-AA-01-
' FA-59-8C-42-CA-C0-F3-3F-FB-59-8C-42-CA-C0-F3-3F-FC-59-8C-42-
' CA-C0-F3-3F-52-D3-BB-BC-E8-7E-FF-FF-FF-F4-FF-EF-7F-01-00-00-
' 00-0A-11-00-00-F8-FF-00-58-00-5B-00-00-F0-FF-00-00-F0-9D

// Example of some BitConverter.ToString( ) method overloads.
using System;

class BytesToStringDemo
{
    // Display a byte array, using multiple lines if necessary.
    public static void WriteMultiLineByteArray( byte[ ] bytes,
        string name )
    {
        const int rowSize = 20;
        const string underLine = "--------------------------------";
        int iter;

        Console.WriteLine( name );
        Console.WriteLine( underLine.Substring( 0,
            Math.Min( name.Length, underLine.Length ) ) );

        for( iter = 0; iter < bytes.Length - rowSize; iter += rowSize )
        {
            Console.Write(
                BitConverter.ToString( bytes, iter, rowSize ) );
            Console.WriteLine( "-" );
        }

        Console.WriteLine( BitConverter.ToString( bytes, iter ) );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        byte[ ] arrayOne = {
              0,   0,   0,   0, 128,  63,   0,   0, 112,  65,
              0, 255, 127,  71,   0,   0, 128,  59,   0,   0,
            128,  47,  73,  70, 131,   5,  75,   6, 158,  63,
             77,   6, 158,  63,  80,   6, 158,  63,  30,  55,
            190, 121, 255, 255, 127, 255, 255, 127, 127,   1,
              0,   0,   0, 192, 255,   0,   0, 128, 255,   0,
              0, 128, 127 };

        byte[ ] arrayTwo = {
            255, 255, 255,   0,   0,  20,   0,  33,   0,   0,
              0,   1,   0,   0,   0, 100, 167, 179, 182, 224,
             13,   0, 202, 154,  59,   0, 143,  91,   0, 170,
            170, 170, 170, 170, 170,   0,   0, 232, 137,   4,
             35, 199, 138, 255, 232, 244, 255, 252, 205, 255,
            255, 129 };

        byte[ ] arrayThree = {
              0, 222,   0,   0,   0, 224, 111,  64,   0,   0,
            224, 255, 255, 255, 239,  65,   0,   0, 131,   0,
              0,   0, 112,  63,   0, 143,   0, 100,   0,   0,
            240,  61, 223, 136,  30,  28, 254, 116, 170,   1,
            250,  89, 140,  66, 202, 192, 243,  63, 251,  89,
            140,  66, 202, 192, 243,  63, 252,  89, 140,  66,
            202, 192, 243,  63,  82, 211, 187, 188, 232, 126,
            255, 255, 255, 244, 255, 239, 127,   1,   0,   0,
              0,  10,  17,   0,   0, 248, 255,   0,  88,   0,
             91,   0,   0, 240, 255,   0,   0, 240, 157 };

        Console.WriteLine( "This example of the\n" +
            "  BitConverter.ToString( byte[ ], int ) and \n" +
            "  BitConverter.ToString( byte[ ], int, int ) \n" +
            "methods generates the following output.\n" );

        WriteMultiLineByteArray( arrayOne, "arrayOne" );
        WriteMultiLineByteArray( arrayTwo, "arrayTwo" );
        WriteMultiLineByteArray( arrayThree, "arrayThree" );
    }
}

/*
This example of the
  BitConverter.ToString( byte[ ], int ) and
  BitConverter.ToString( byte[ ], int, int )
methods generates the following output.

arrayOne
--------
00-00-00-00-80-3F-00-00-70-41-00-FF-7F-47-00-00-80-3B-00-00-
80-2F-49-46-83-05-4B-06-9E-3F-4D-06-9E-3F-50-06-9E-3F-1E-37-
BE-79-FF-FF-7F-FF-FF-7F-7F-01-00-00-00-C0-FF-00-00-80-FF-00-
00-80-7F

arrayTwo
--------
FF-FF-FF-00-00-14-00-21-00-00-00-01-00-00-00-64-A7-B3-B6-E0-
0D-00-CA-9A-3B-00-8F-5B-00-AA-AA-AA-AA-AA-AA-00-00-E8-89-04-
23-C7-8A-FF-E8-F4-FF-FC-CD-FF-FF-81

arrayThree
----------
00-DE-00-00-00-E0-6F-40-00-00-E0-FF-FF-FF-EF-41-00-00-83-00-
00-00-70-3F-00-8F-00-64-00-00-F0-3D-DF-88-1E-1C-FE-74-AA-01-
FA-59-8C-42-CA-C0-F3-3F-FB-59-8C-42-CA-C0-F3-3F-FC-59-8C-42-
CA-C0-F3-3F-52-D3-BB-BC-E8-7E-FF-FF-FF-F4-FF-EF-7F-01-00-00-
00-0A-11-00-00-F8-FF-00-58-00-5B-00-00-F0-FF-00-00-F0-9D
*/

// Example of some BitConverter::ToString( ) method overloads.
using namespace System;

// Display a byte array, using multiple lines if necessary.
void WriteMultiLineByteArray( array<unsigned char>^bytes, String^ name )
{
   const int rowSize = 20;
   String^ underLine = "--------------------------------";
   int iter;
   Console::WriteLine( name );
   Console::WriteLine( underLine->Substring( 0, Math::Min( name->Length, underLine->Length ) ) );
   for ( iter = 0; iter < bytes->Length - rowSize; iter += rowSize )
   {
      Console::Write( BitConverter::ToString( bytes, iter, rowSize ) );
      Console::WriteLine( "-" );

   }
   Console::WriteLine( BitConverter::ToString( bytes, iter ) );
   Console::WriteLine();
}

int main()
{
   array<unsigned char>^arrayOne = {0,0,0,0,128,63,0,0,112,65,0,255,127,71,0,0,128,59,0,0,128,47,73,70,131,5,75,6,158,63,77,6,158,63,80,6,158,63,30,55,190,121,255,255,127,255,255,127,127,1,0,0,0,192,255,0,0,128,255,0,0,128,127};
   array<unsigned char>^arrayTwo = {255,255,255,0,0,20,0,33,0,0,0,1,0,0,0,100,167,179,182,224,13,0,202,154,59,0,143,91,0,170,170,170,170,170,170,0,0,232,137,4,35,199,138,255,232,244,255,252,205,255,255,129};
   array<unsigned char>^arrayThree = {0,222,0,0,0,224,111,64,0,0,224,255,255,255,239,65,0,0,131,0,0,0,112,63,0,143,0,100,0,0,240,61,223,136,30,28,254,116,170,1,250,89,140,66,202,192,243,63,251,89,140,66,202,192,243,63,252,89,140,66,202,192,243,63,82,211,187,188,232,126,255,255,255,244,255,239,127,1,0,0,0,10,17,0,0,248,255,0,88,0,91,0,0,240,255,0,0,240,157};
   Console::WriteLine( "This example of the\n"
   "  BitConverter::ToString( unsigned char[ ], int ) and \n"
   "  BitConverter::ToString( unsigned char[ ], int, int ) \n"
   "methods generates the following output.\n" );
   WriteMultiLineByteArray( arrayOne, "arrayOne" );
   WriteMultiLineByteArray( arrayTwo, "arrayTwo" );
   WriteMultiLineByteArray( arrayThree, "arrayThree" );
}

/*
This example of the
  BitConverter::ToString( unsigned char[ ], int ) and
  BitConverter::ToString( unsigned char[ ], int, int )
methods generates the following output.

arrayOne
--------
00-00-00-00-80-3F-00-00-70-41-00-FF-7F-47-00-00-80-3B-00-00-
80-2F-49-46-83-05-4B-06-9E-3F-4D-06-9E-3F-50-06-9E-3F-1E-37-
BE-79-FF-FF-7F-FF-FF-7F-7F-01-00-00-00-C0-FF-00-00-80-FF-00-
00-80-7F

arrayTwo
--------
FF-FF-FF-00-00-14-00-21-00-00-00-01-00-00-00-64-A7-B3-B6-E0-
0D-00-CA-9A-3B-00-8F-5B-00-AA-AA-AA-AA-AA-AA-00-00-E8-89-04-
23-C7-8A-FF-E8-F4-FF-FC-CD-FF-FF-81

arrayThree
----------
00-DE-00-00-00-E0-6F-40-00-00-E0-FF-FF-FF-EF-41-00-00-83-00-
00-00-70-3F-00-8F-00-64-00-00-F0-3D-DF-88-1E-1C-FE-74-AA-01-
FA-59-8C-42-CA-C0-F3-3F-FB-59-8C-42-CA-C0-F3-3F-FC-59-8C-42-
CA-C0-F3-3F-52-D3-BB-BC-E8-7E-FF-FF-FF-F4-FF-EF-7F-01-00-00-
00-0A-11-00-00-F8-FF-00-58-00-5B-00-00-F0-FF-00-00-F0-9D
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
ToString 重载
System 命名空间


BitConverter ..::.ToUInt16 方法

BitConverter
.
.
::
.
ToUInt16 方法
BitConverter 类

返回由字节数组中指定位置的两个字节转换来的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Byte(), _
    startIndex As Integer _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    byte[] value,
    int startIndex
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    array<unsigned char>^ value,
    int startIndex
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:byte[] *
        startIndex:int -> uint16

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System UInt16
由两个字节构成、从 startIndex 开始的 16 位无符号整数。
异常 | 条件
ArgumentException | startIndex 等于 value 减 1 的长度。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToUInt16 方法将 Byte 数组的元素转换为 UInt16 值。

' Example of the BitConverter.ToUInt16 method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToUInt16Demo

    Const formatter As String = "{0,5}{1,17}{2,10}"

    ' Convert two Byte array elements to a UInt16 and display it.
    Sub BAToUInt16( bytes( ) As Byte, index As Integer )

        Dim value As UInt16 = BitConverter.ToUInt16( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 2 ), value )
    End Sub

    Sub Main( )

        Dim byteArray as Byte( ) = { _
             15, 0, 0, 255, 3, 16, 39, 255, 255, 127 }

        Console.WriteLine( _
            "This example of the BitConverter.ToUInt16( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements " & vbCrLf & _
            "of a Byte array to UInt16 values." & vbCrLf )
        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )
        Console.WriteLine( BitConverter.ToString( byteArray ) )
        Console.WriteLine( )
        Console.WriteLine( formatter, "index", "array elements", _
            "UInt16" )
        Console.WriteLine( formatter, "-----", "--------------", _
            "------" )

        ' Convert Byte array elements to UInt16 values.
        BAToUInt16( byteArray, 1 )
        BAToUInt16( byteArray, 0 )
        BAToUInt16( byteArray, 3 )
        BAToUInt16( byteArray, 5 )
        BAToUInt16( byteArray, 8 )
        BAToUInt16( byteArray, 7 )
    End Sub
End Module

' This example of the BitConverter.ToUInt16( Byte( ), Integer )
' method generates the following output. It converts elements
' of a Byte array to UInt16 values.
'
' initial Byte array
' ------------------
' 0F-00-00-FF-03-10-27-FF-FF-7F
'
' index   array elements    UInt16
' -----   --------------    ------
'     1            00-00         0
'     0            0F-00        15
'     3            FF-03      1023
'     5            10-27     10000
'     8            FF-7F     32767
'     7            FF-FF     65535

// Example of the BitConverter.ToUInt16 method.
using System;

class BytesToUInt16Demo
{
    const string formatter = "{0,5}{1,17}{2,10}";

    // Convert two byte array elements to a ushort and display it.
    public static void BAToUInt16( byte[ ] bytes, int index )
    {
        ushort value = BitConverter.ToUInt16( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 2 ), value );
    }

    public static void Main( )
    {
        byte[] byteArray = {
            15, 0, 0, 255, 3, 16, 39, 255, 255, 127 };

        Console.WriteLine(
            "This example of the BitConverter.ToUInt16( byte[ ], " +
            "int ) \nmethod generates the following output. It " +
            "converts elements \nof a byte array to ushort values.\n" );
        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );
        Console.WriteLine( BitConverter.ToString( byteArray ) );
        Console.WriteLine( );
        Console.WriteLine( formatter, "index", "array elements",
            "ushort" );
        Console.WriteLine( formatter, "-----", "--------------",
            "------" );

        // Convert byte array elements to ushort values.
        BAToUInt16( byteArray, 1 );
        BAToUInt16( byteArray, 0 );
        BAToUInt16( byteArray, 3 );
        BAToUInt16( byteArray, 5 );
        BAToUInt16( byteArray, 8 );
        BAToUInt16( byteArray, 7 );
    }
}

/*
This example of the BitConverter.ToUInt16( byte[ ], int )
method generates the following output. It converts elements
of a byte array to ushort values.

initial byte array
------------------
0F-00-00-FF-03-10-27-FF-FF-7F

index   array elements    ushort
-----   --------------    ------
    1            00-00         0
    0            0F-00        15
    3            FF-03      1023
    5            10-27     10000
    8            FF-7F     32767
    7            FF-FF     65535
*/

// Example of the BitConverter::ToUInt16 method.
using namespace System;

// Convert two byte array elements to an unsigned short and display it.
void BAToUInt16( array<unsigned char>^bytes, int index )
{
   unsigned short value = BitConverter::ToUInt16( bytes, index );
   Console::WriteLine( "{0,5}{1,17}{2,16}", index, BitConverter::ToString( bytes, index, 2 ), value );
}

int main()
{
   array<unsigned char>^byteArray = {15,0,0,255,3,16,39,255,255,127};
   Console::WriteLine( "This example of the BitConverter::ToUInt16( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to unsigned short "
   "values.\n" );
   Console::WriteLine( "initial byte array" );
   Console::WriteLine( "------------------" );
   Console::WriteLine( BitConverter::ToString( byteArray ) );
   Console::WriteLine();
   Console::WriteLine( "{0,5}{1,17}{2,16}", "index", "array elements", "unsigned short" );
   Console::WriteLine( "{0,5}{1,17}{2,16}", "-----", "--------------", "--------------" );

   // Convert byte array elements to unsigned short values.
   BAToUInt16( byteArray, 1 );
   BAToUInt16( byteArray, 0 );
   BAToUInt16( byteArray, 3 );
   BAToUInt16( byteArray, 5 );
   BAToUInt16( byteArray, 8 );
   BAToUInt16( byteArray, 7 );
}

/*
This example of the BitConverter::ToUInt16( unsigned char[ ], int )
method generates the following output. It converts elements of a
byte array to unsigned short values.

initial byte array
------------------
0F-00-00-FF-03-10-27-FF-FF-7F

index   array elements  unsigned short
-----   --------------  --------------
    1            00-00               0
    0            0F-00              15
    3            FF-03            1023
    5            10-27           10000
    8            FF-7F           32767
    7            FF-FF           65535
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间
UInt16


BitConverter ..::.ToUInt32 方法

BitConverter
.
.
::
.
ToUInt32 方法
BitConverter 类

返回由字节数组中指定位置的四个字节转换来的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Byte(), _
    startIndex As Integer _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    byte[] value,
    int startIndex
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    array<unsigned char>^ value,
    int startIndex
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:byte[] *
        startIndex:int -> uint32

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System UInt32
由四个字节构成、从 startIndex 开始的 32 位无符号整数。
异常 | 条件
ArgumentException | startIndex 大于等于 value 减 3 的长度，且小于等于 value 减 1 的长度。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToUInt32 方法将 Byte 数组的元素转换为 UInt32 值。

' Example of the BitConverter.ToUInt32 method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToUInt32Demo

    Const formatter As String = "{0,5}{1,17}{2,15}"

    ' Convert four Byte array elements to a UInt32 and display it.
    Sub BAToUInt32( bytes( ) As Byte, index As Integer )

        Dim value As UInt32 = BitConverter.ToUInt32( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 4 ), value )
    End Sub

    Sub Main( )
        Dim byteArray as Byte( ) = { _
             15,   0,   0,   0,   0,  16,   0, 255,   3,   0, _
              0, 202, 154,  59, 255, 255, 255, 255, 127 }

        Console.WriteLine( _
            "This example of the BitConverter.ToUInt32( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements " & vbCrLf & _
            "of a Byte array to UInt32 values." & vbCrLf )
        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )
        Console.WriteLine( BitConverter.ToString( byteArray ) )
        Console.WriteLine( )
        Console.WriteLine( formatter, "index", "array elements", _
            "UInt32" )
        Console.WriteLine( formatter, "-----", "--------------", _
            "------" )

        ' Convert Byte array elements to UInt32 values.
        BAToUInt32( byteArray, 1 )
        BAToUInt32( byteArray, 0 )
        BAToUInt32( byteArray, 7 )
        BAToUInt32( byteArray, 3 )
        BAToUInt32( byteArray, 10 )
        BAToUInt32( byteArray, 15 )
        BAToUInt32( byteArray, 14 )
    End Sub
End Module

' This example of the BitConverter.ToUInt32( Byte( ), Integer )
' method generates the following output. It converts elements
' of a Byte array to UInt32 values.
'
' initial Byte array
' ------------------
' 0F-00-00-00-00-10-00-FF-03-00-00-CA-9A-3B-FF-FF-FF-FF-7F
'
' index   array elements         UInt32
' -----   --------------         ------
'     1      00-00-00-00              0
'     0      0F-00-00-00             15
'     7      FF-03-00-00           1023
'     3      00-00-10-00        1048576
'    10      00-CA-9A-3B     1000000000
'    15      FF-FF-FF-7F     2147483647
'    14      FF-FF-FF-FF     4294967295

// Example of the BitConverter.ToUInt32 method.
using System;

class BytesToUInt32Demo
{
    const string formatter = "{0,5}{1,17}{2,15}";

    // Convert four byte array elements to a uint and display it.
    public static void BAToUInt32( byte[ ] bytes, int index )
    {
        uint value = BitConverter.ToUInt32( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 4 ), value );
    }

    public static void Main( )
    {
        byte[ ] byteArray = {
             15,   0,   0,   0,   0,  16,   0, 255,   3,   0,
              0, 202, 154,  59, 255, 255, 255, 255, 127 };

        Console.WriteLine(
            "This example of the BitConverter.ToUInt32( byte[ ], " +
            "int ) \nmethod generates the following output. It " +
            "converts elements \nof a byte array to uint values.\n" );
        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );
        Console.WriteLine( BitConverter.ToString( byteArray ) );
        Console.WriteLine( );
        Console.WriteLine( formatter, "index", "array elements",
            "uint" );
        Console.WriteLine( formatter, "-----", "--------------",
            "----" );

        // Convert byte array elements to uint values.
        BAToUInt32( byteArray, 1 );
        BAToUInt32( byteArray, 0 );
        BAToUInt32( byteArray, 7 );
        BAToUInt32( byteArray, 3 );
        BAToUInt32( byteArray, 10 );
        BAToUInt32( byteArray, 15 );
        BAToUInt32( byteArray, 14 );
    }
}

/*
This example of the BitConverter.ToUInt32( byte[ ], int )
method generates the following output. It converts elements
of a byte array to uint values.

initial byte array
------------------
0F-00-00-00-00-10-00-FF-03-00-00-CA-9A-3B-FF-FF-FF-FF-7F

index   array elements           uint
-----   --------------           ----
    1      00-00-00-00              0
    0      0F-00-00-00             15
    7      FF-03-00-00           1023
    3      00-00-10-00        1048576
   10      00-CA-9A-3B     1000000000
   15      FF-FF-FF-7F     2147483647
   14      FF-FF-FF-FF     4294967295
*/

// Example of the BitConverter::ToUInt32 method.
using namespace System;

// Convert four byte array elements to an unsigned int and display it.
void BAToUInt32( array<unsigned char>^bytes, int index )
{
   unsigned int value = BitConverter::ToUInt32( bytes, index );
   Console::WriteLine( "{0,5}{1,17}{2,15}", index, BitConverter::ToString( bytes, index, 4 ), value );
}

int main()
{
   array<unsigned char>^byteArray = {15,0,0,0,0,16,0,255,3,0,0,202,154,59,255,255,255,255,127};
   Console::WriteLine( "This example of the BitConverter::ToUInt32( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to unsigned int "
   "values.\n" );
   Console::WriteLine( "initial byte array" );
   Console::WriteLine( "------------------" );
   Console::WriteLine( BitConverter::ToString( byteArray ) );
   Console::WriteLine();
   Console::WriteLine( "{0,5}{1,17}{2,15}", "index", "array elements", "unsigned int" );
   Console::WriteLine( "{0,5}{1,17}{2,15}", "-----", "--------------", "------------" );

   // Convert byte array elements to unsigned int values.
   BAToUInt32( byteArray, 1 );
   BAToUInt32( byteArray, 0 );
   BAToUInt32( byteArray, 7 );
   BAToUInt32( byteArray, 3 );
   BAToUInt32( byteArray, 10 );
   BAToUInt32( byteArray, 15 );
   BAToUInt32( byteArray, 14 );
}

/*
This example of the BitConverter::ToUInt32( unsigned char[ ], int )
method generates the following output. It converts elements of a
byte array to unsigned int values.

initial byte array
------------------
0F-00-00-00-00-10-00-FF-03-00-00-CA-9A-3B-FF-FF-FF-FF-7F

index   array elements   unsigned int
-----   --------------   ------------
    1      00-00-00-00              0
    0      0F-00-00-00             15
    7      FF-03-00-00           1023
    3      00-00-10-00        1048576
   10      00-CA-9A-3B     1000000000
   15      FF-FF-FF-7F     2147483647
   14      FF-FF-FF-FF     4294967295
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间
UInt32


BitConverter ..::.ToUInt64 方法

BitConverter
.
.
::
.
ToUInt64 方法
BitConverter 类

返回由字节数组中指定位置的八个字节转换来的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Byte(), _
    startIndex As Integer _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    byte[] value,
    int startIndex
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    array<unsigned char>^ value,
    int startIndex
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:byte[] *
        startIndex:int -> uint64

参数

value
类型：
array<
System Byte
>
[]
()
[]

字节数组。
startIndex
类型： System Int32
value 内的起始位置。

返回值

类型： System UInt64
由八个字节构成、从 startIndex 开始的 64 位无符号整数。
异常 | 条件
ArgumentException | startIndex 大于等于 value 减 7 的长度，且小于等于 value 减 1 的长度。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于 value 减 1 的长度。

下面的代码示例使用 ToUInt64 方法将 Byte 数组的元素转换为 UInt64 值。

' Example of the BitConverter.ToUInt64 method.
Imports System
Imports Microsoft.VisualBasic

Module BytesToUInt64Demo

    Const formatter As String = "{0,5}{1,27}{2,24}"

    ' Convert eight Byte array elements to a UInt64 and display it.
    Sub BAToUInt64( bytes( ) As Byte, index As Integer )

        Dim value As UInt64 = BitConverter.ToUInt64( bytes, index )

        Console.WriteLine( formatter, index, _
            BitConverter.ToString( bytes, index, 8 ), value )
    End Sub

    ' Display a Byte array, using multiple lines if necessary.
    Sub WriteMultiLineByteArray( bytes( ) As Byte )

        Const rowSize As Integer = 20
        Dim iter As Integer

        Console.WriteLine( "initial Byte array" )
        Console.WriteLine( "------------------" )

        For iter = 0 To bytes.Length - rowSize - 1 Step rowSize
            Console.Write( _
                BitConverter.ToString( bytes, iter, rowSize ) )
            Console.WriteLine( "-" )
        Next iter

        Console.WriteLine( BitConverter.ToString( bytes, iter ) )
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Dim byteArray as Byte( ) = { _
            255, 255, 255,   0,   0,   0,   0,   0,   0,   0, _
              0,   1,   0,   0,   0, 100, 167, 179, 182, 224, _
             13,   0, 202, 154,  59,   0,   0,   0,   0, 170, _
            170, 170, 170, 170, 170,   0,   0, 232, 137,   4, _
             35, 199, 138, 255, 255, 255, 255, 255, 255, 255, _
            255, 127 }

        Console.WriteLine( _
            "This example of the BitConverter.ToUInt64( Byte( ), " & _
            "Integer ) " & vbCrLf & "method generates the " & _
            "following output. It converts elements " & vbCrLf & _
            "of a Byte array to UInt64 values." & vbCrLf )

        WriteMultiLineByteArray( byteArray )

        Console.WriteLine( formatter, "index", "array elements", _
            "UInt64" )
        Console.WriteLine( formatter, "-----", "--------------", _
            "------" )

        ' Convert Byte array elements to UInt64 values.
        BAToUInt64( byteArray, 3 )
        BAToUInt64( byteArray, 0 )
        BAToUInt64( byteArray, 21 )
        BAToUInt64( byteArray, 7 )
        BAToUInt64( byteArray, 29 )
        BAToUInt64( byteArray, 13 )
        BAToUInt64( byteArray, 35 )
        BAToUInt64( byteArray, 44 )
        BAToUInt64( byteArray, 43 )
    End Sub
End Module

' This example of the BitConverter.ToUInt64( Byte( ), Integer )
' method generates the following output. It converts elements
' of a Byte array to UInt64 values.
'
' initial Byte array
' ------------------
' FF-FF-FF-00-00-00-00-00-00-00-00-01-00-00-00-64-A7-B3-B6-E0-
' 0D-00-CA-9A-3B-00-00-00-00-AA-AA-AA-AA-AA-AA-00-00-E8-89-04-
' 23-C7-8A-FF-FF-FF-FF-FF-FF-FF-FF-7F
'
' index             array elements                  UInt64
' -----             --------------                  ------
'     3    00-00-00-00-00-00-00-00                       0
'     0    FF-FF-FF-00-00-00-00-00                16777215
'    21    00-CA-9A-3B-00-00-00-00              1000000000
'     7    00-00-00-00-01-00-00-00              4294967296
'    29    AA-AA-AA-AA-AA-AA-00-00         187649984473770
'    13    00-00-64-A7-B3-B6-E0-0D     1000000000000000000
'    35    00-00-E8-89-04-23-C7-8A    10000000000000000000
'    44    FF-FF-FF-FF-FF-FF-FF-7F     9223372036854775807
'    43    FF-FF-FF-FF-FF-FF-FF-FF    18446744073709551615

// Example of the BitConverter.ToUInt64 method.
using System;

class BytesToUInt64Demo
{
    const string formatter = "{0,5}{1,27}{2,24}";

    // Convert eight byte array elements to a ulong and display it.
    public static void BAToUInt64( byte[ ] bytes, int index )
    {
        ulong value = BitConverter.ToUInt64( bytes, index );

        Console.WriteLine( formatter, index,
            BitConverter.ToString( bytes, index, 8 ), value );
    }

    // Display a byte array, using multiple lines if necessary.
    public static void WriteMultiLineByteArray( byte[ ] bytes )
    {
        const int rowSize = 20;
        int iter;

        Console.WriteLine( "initial byte array" );
        Console.WriteLine( "------------------" );

        for( iter = 0; iter < bytes.Length - rowSize; iter += rowSize )
        {
            Console.Write(
                BitConverter.ToString( bytes, iter, rowSize ) );
            Console.WriteLine( "-" );
        }

        Console.WriteLine( BitConverter.ToString( bytes, iter ) );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        byte[ ] byteArray = {
            255, 255, 255,   0,   0,   0,   0,   0,   0,   0,
              0,   1,   0,   0,   0, 100, 167, 179, 182, 224,
             13,   0, 202, 154,  59,   0,   0,   0,   0, 170,
            170, 170, 170, 170, 170,   0,   0, 232, 137,   4,
             35, 199, 138, 255, 255, 255, 255, 255, 255, 255,
            255, 127 };

        Console.WriteLine(
            "This example of the BitConverter.ToUInt64( byte[ ], " +
            "int ) \nmethod generates the following output. It " +
            "converts elements \nof a byte array to ulong values.\n" );

        WriteMultiLineByteArray( byteArray );

        Console.WriteLine( formatter, "index", "array elements",
            "ulong" );
        Console.WriteLine( formatter, "-----", "--------------",
            "------" );

        // Convert byte array elements to ulong values.
        BAToUInt64( byteArray, 3 );
        BAToUInt64( byteArray, 0 );
        BAToUInt64( byteArray, 21 );
        BAToUInt64( byteArray, 7 );
        BAToUInt64( byteArray, 29 );
        BAToUInt64( byteArray, 13 );
        BAToUInt64( byteArray, 35 );
        BAToUInt64( byteArray, 44 );
        BAToUInt64( byteArray, 43 );
    }
}

/*
This example of the BitConverter.ToUInt64( byte[ ], int )
method generates the following output. It converts elements
of a byte array to ulong values.

initial byte array
------------------
FF-FF-FF-00-00-00-00-00-00-00-00-01-00-00-00-64-A7-B3-B6-E0-
0D-00-CA-9A-3B-00-00-00-00-AA-AA-AA-AA-AA-AA-00-00-E8-89-04-
23-C7-8A-FF-FF-FF-FF-FF-FF-FF-FF-7F

index             array elements                   ulong
-----             --------------                  ------
    3    00-00-00-00-00-00-00-00                       0
    0    FF-FF-FF-00-00-00-00-00                16777215
   21    00-CA-9A-3B-00-00-00-00              1000000000
    7    00-00-00-00-01-00-00-00              4294967296
   29    AA-AA-AA-AA-AA-AA-00-00         187649984473770
   13    00-00-64-A7-B3-B6-E0-0D     1000000000000000000
   35    00-00-E8-89-04-23-C7-8A    10000000000000000000
   44    FF-FF-FF-FF-FF-FF-FF-7F     9223372036854775807
   43    FF-FF-FF-FF-FF-FF-FF-FF    18446744073709551615
*/

// Example of the BitConverter::ToUInt64 method.
using namespace System;

// Convert eight byte array elements to an unsigned __int64 value and
// display it.
void BAToUInt64( array<unsigned char>^bytes, int index )
{
   unsigned __int64 value = BitConverter::ToUInt64( bytes, index );
   Console::WriteLine( "{0,5}{1,27}{2,24}", index, BitConverter::ToString( bytes, index, 8 ), value );
}

// Display a byte array, using multiple lines if necessary.
void WriteMultiLineByteArray( array<unsigned char>^bytes )
{
   const int rowSize = 20;
   int iter;
   Console::WriteLine( "initial unsigned char array" );
   Console::WriteLine( "---------------------------" );
   for ( iter = 0; iter < bytes->Length - rowSize; iter += rowSize )
   {
      Console::Write( BitConverter::ToString( bytes, iter, rowSize ) );
      Console::WriteLine( "-" );

   }
   Console::WriteLine( BitConverter::ToString( bytes, iter ) );
   Console::WriteLine();
}

int main()
{
   array<unsigned char>^byteArray = {255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,100,167,179,182,224,13,0,202,154,59,0,0,0,0,170,170,170,170,170,170,0,0,232,137,4,35,199,138,255,255,255,255,255,255,255,255,127};
   Console::WriteLine( "This example of the BitConverter::ToUInt64( unsigned "
   "char[ ], int ) \nmethod generates the following output. It "
   "converts elements of a \nbyte array to unsigned __int64 "
   "values.\n" );
   WriteMultiLineByteArray( byteArray );
   Console::WriteLine( "{0,5}{1,27}{2,24}", "index", "array elements", "unsigned __int64" );
   Console::WriteLine( "{0,5}{1,27}{2,24}", "-----", "--------------", "----------------" );

   // Convert byte array elements to unsigned __int64 values.
   BAToUInt64( byteArray, 3 );
   BAToUInt64( byteArray, 0 );
   BAToUInt64( byteArray, 21 );
   BAToUInt64( byteArray, 7 );
   BAToUInt64( byteArray, 29 );
   BAToUInt64( byteArray, 13 );
   BAToUInt64( byteArray, 35 );
   BAToUInt64( byteArray, 44 );
   BAToUInt64( byteArray, 43 );
}

/*
This example of the BitConverter::ToUInt64( unsigned char[ ], int )
method generates the following output. It converts elements of a
byte array to unsigned __int64 values.

initial unsigned char array
---------------------------
FF-FF-FF-00-00-00-00-00-00-00-00-01-00-00-00-64-A7-B3-B6-E0-
0D-00-CA-9A-3B-00-00-00-00-AA-AA-AA-AA-AA-AA-00-00-E8-89-04-
23-C7-8A-FF-FF-FF-FF-FF-FF-FF-FF-7F

index             array elements        unsigned __int64
-----             --------------        ----------------
    3    00-00-00-00-00-00-00-00                       0
    0    FF-FF-FF-00-00-00-00-00                16777215
   21    00-CA-9A-3B-00-00-00-00              1000000000
    7    00-00-00-00-01-00-00-00              4294967296
   29    AA-AA-AA-AA-AA-AA-00-00         187649984473770
   13    00-00-64-A7-B3-B6-E0-0D     1000000000000000000
   35    00-00-E8-89-04-23-C7-8A    10000000000000000000
   44    FF-FF-FF-FF-FF-FF-FF-7F     9223372036854775807
   43    FF-FF-FF-FF-FF-FF-FF-FF    18446744073709551615
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitConverter 类
BitConverter 成员
System 命名空间
UInt64


Boolean 结构

Boolean 结构
成员

表示布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Boolean _
    Implements IComparable, IConvertible, IComparable(Of Boolean),  _
    IEquatable(Of Boolean)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Boolean : IComparable, IConvertible,
    IComparable<bool>, IEquatable<bool>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Boolean : IComparable,
    IConvertible, IComparable<bool>, IEquatable<bool>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Boolean =
    struct
        interface IComparable
        interface IConvertible
        interface IComparable<bool>
        interface IEquatable<bool>
    end

该类型实例的值为 true 或 false。

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 成员
System 命名空间


Boolean 成员

Boolean 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Boolean 结构

表示布尔值。

Boolean 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Boolean 结构
System 命名空间


Boolean 字段

Boolean 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Boolean 结构

Boolean 类型公开以下成员。

名称 说明
页首

参考

Boolean 结构
System 命名空间


Boolean ..::.FalseString 字段

Boolean
.
.
::
.
FalseString 字段
Boolean 结构

将布尔值 false 表示为字符串。此字段为只读。 将布尔值 false 表示为字符串。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly FalseString As String
public static readonly string FalseString
public:
static initonly String^ FalseString
static val FalseString: string

该字段等于字符串“False”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间
String
TrueString


Boolean ..::.TrueString 字段

Boolean
.
.
::
.
TrueString 字段
Boolean 结构

将布尔值 true 表示为字符串。此字段为只读。 将布尔值 true 表示为字符串。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly TrueString As String
public static readonly string TrueString
public:
static initonly String^ TrueString
static val TrueString: string

该字段等于字符串“True”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间
String
FalseString


Boolean 方法

Boolean 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Boolean 结构

Boolean 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Boolean 结构
System 命名空间


Boolean ..::.CompareTo 方法

Boolean
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Boolean 结构

将此实例与指定的对象或 Boolean 对象进行比较，返回一个指示二者关系的整数。

名称 说明
页首

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.CompareTo 方法 (Boolean)

Boolean
.
.
::
.
CompareTo 方法 (Boolean)
Boolean 结构

将此实例与指定的 Boolean 对象进行比较，返回一个指示二者关系的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Boolean _ ) As Integer
public int CompareTo( bool value )
public: virtual int CompareTo( bool value ) sealed
abstract CompareTo : value:bool -> int override CompareTo : value:bool -> int
参数
value
类型： System Boolean
要与此实例进行比较的
Boolean
对象。
返回值
类型： System Int32
一个有符号整数，它指示此实例和
value
的相对值。
返回值
条件
小于零
此实例为
false
而
value
为
true
。
零
此实例与
value
相等（或者都为
true
，或者都为
false
）。
大于零
此实例为
true
而
value
为
false
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Boolean..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

如果 value 包含的位数少于（窄于）实例类型，则某些编程语言将执行隐式扩大转换，以将参数值转换为具有更多位数的值。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和参数表示形式。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和参数表示形式。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的代码示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
CompareTo 重载
System 命名空间
CompareTo
Equals


Boolean ..::.CompareTo 方法 (Object)

Boolean
.
.
::
.
CompareTo 方法 (Object)
Boolean 结构

将此实例与指定对象进行比较，返回一个指示二者关系的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ obj As Object _ ) As Integer
public int CompareTo( Object obj )
public: virtual int CompareTo( Object^ obj ) sealed
abstract CompareTo : obj:Object -> int override CompareTo : obj:Object -> int
参数
obj
类型： System Object
要与此实例比较的对象，或
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号的整数，它指示此实例和
obj
的相对顺序。
返回值
条件
小于零
此实例为
false
而
obj
为
true
。
零
此实例与
obj
相等（或者都为
true
，或者都为
false
）。
大于零
此实例为
true
而
obj
为
false
。
- 或 -
obj
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | obj 不是 Boolean。

obj 必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者是 Boolean 的实例；否则将引发异常。

此方法实现 IComparable 接口。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
CompareTo 重载
System 命名空间
CompareTo
Equals


Boolean ..::.Equals 方法

Boolean
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Boolean 结构

返回一个值，该值指示此实例是否与指定的对象或 Boolean 相等。

名称 说明
页首

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.Equals 方法 (Boolean)

Boolean
.
.
::
.
Equals 方法 (Boolean)
Boolean 结构

返回一个值，该值指示此实例是否与指定的 Boolean 对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As Boolean _
) As Boolean
public bool Equals(
    bool obj
)
public:
virtual bool Equals(
    bool obj
) sealed
abstract Equals :
        obj:bool -> bool
override Equals :
        obj:bool -> bool

参数

obj
类型： System Boolean
要与此实例进行比较的 Boolean 值。

返回值

类型： System Boolean
如果 obj 的值与此实例相同，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
Equals 重载
System 命名空间
Equals
CompareTo


Boolean ..::.Equals 方法 (Object)

Boolean
.
.
::
.
Equals 方法 (Object)
Boolean 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 为 Boolean 并与此实例的值相等，则为 true；否则为 false。

此方法重写 Equals。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
Equals 重载
System 命名空间
Equals
CompareTo


Boolean ..::.GetHashCode 方法

Boolean
.
.
::
.
GetHashCode 方法
Boolean 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
当前 Boolean 的哈希代码。

Boolean 类将 true 实现为整数 1，将 false 实现为整数 0。但是，特定的编程语言可以用其他值来表示 true 和 false。 Boolean 类将 true 实现为整数 1，将 false 实现为整数 0。但是，特定的编程语言可以用其他值来表示 true 和 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间
GetHashCode


Boolean ..::.GetTypeCode 方法

Boolean
.
.
::
.
GetTypeCode 方法
Boolean 结构

返回值类型 Boolean 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.Boolean。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToBoolean 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
true 或 false。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToByte 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
如果此实例的值不为零，则返回 true（强迫到字节）；否则返回 false（强迫到字节）。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToByte 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToByte 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToByte 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间
ToByte


Boolean ..::.IConvertible ..::.ToChar 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 尝试将 Boolean 值转换为 Char 值。不支持此转换。 尝试将 Boolean 值转换为 Char 值。不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToDateTime 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 尝试将 Boolean 值转换为 DateTime 值。不支持此转换。 尝试将 Boolean 值转换为 DateTime 值。不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToDecimal 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToDecimal 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToDecimal 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToDecimal 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToDouble 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToDouble 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToDouble 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToDouble 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToInt16 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToInt16 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToInt16 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToInt16 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToInt32 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToInt32 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToInt32 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToInt32 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToInt64 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToInt64(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToInt64(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToInt64(Boolean) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToSByte 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToSByte(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToSByte(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToSByte(Boolean) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToSingle 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToSingle(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToSingle(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToSingle(Boolean) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.IConvertible ..::.ToType 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
所需类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的区域性特定信息。

返回值

类型： System Object
一个指定类型的对象，其值与 Boolean 对象的值相等。

实现

异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | 不支持所请求的类型转换。

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间
Convert


Boolean ..::.IConvertible ..::.ToUInt16 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToUInt16(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToUInt16(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToUInt16(Boolean) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间
UInt16
ToUInt16


Boolean ..::.IConvertible ..::.ToUInt32 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToUInt32(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToUInt32(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToUInt32(Boolean) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间
UInt32
ToUInt32


Boolean ..::.IConvertible ..::.ToUInt64 方法

Boolean
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Boolean 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
如果此实例不为零，则返回 1（即 true）；否则返回 0。

实现

此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToUInt64(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToUInt64(Boolean) 方法。 此成员是显式的接口成员实现。只能在将 Boolean 实例强制转换为 IConvertible 接口时使用它。推荐使用的替代方法是调用 Convert..::.ToUInt64(Boolean) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间
UInt64
ToUInt64


Boolean ..::.Parse 方法

Boolean
.
.
::
.
Parse 方法
Boolean 结构

将逻辑值的指定字符串表示形式转换为它的等效 Boolean 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    value As String _
) As Boolean
public static bool Parse(
    string value
)
public:
static bool Parse(
    String^ value
)
static member Parse :
        value:string -> bool

参数

value
类型： System String
包含要转换的值的字符串。

返回值

类型： System Boolean
如果 value 等效于 TrueString，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | value 不等效于 TrueString 或 FalseString。

value 参数（前后可加空格）必须包含 TrueString 或 FalseString；否则将引发异常。比较不区分大小写。 value 参数（前后可加空格）必须包含 TrueString 或 FalseString；否则将引发异常。比较不区分大小写。

下面的代码示例演示 Parse 方法的用法。

Dim val As Boolean
Dim input As String

input = Boolean.TrueString
val = Boolean.Parse(input)
Console.WriteLine("{0} parsed as {1}", input, val)

bool val;
string input;

input = bool.TrueString;
val = bool.Parse(input);
Console.WriteLine("{0} parsed as {1}", input, val);

Boolean val;
String^ input;
input = Boolean::TrueString;
val = Boolean::Parse( input );
Console::WriteLine(  "{0} parsed as {1}", input, val );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
System 命名空间
TrueString
FalseString

其他资源

分析其他字符串


Boolean ..::.ToString 方法

Boolean
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Boolean 结构

将此实例的值转换为其等效字符串表示形式（“True”或“False”）。

名称 说明
页首

参考

Boolean 结构
Boolean 成员
System 命名空间


Boolean ..::.ToString 方法

Boolean
.
.
::
.
ToString 方法
Boolean 结构

将此实例的值转换为其等效字符串表示形式（“True”或“False”）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
如果此实例的值为 true，则为 TrueString；如果此实例的值为 false，则为 FalseString。

此方法返回常量“True”或“False”。请注意，XML 区分大小写，而 XML 规范将“true”和“false”识别为有效的布尔值集。如果要将 ToString()()() 方法返回的 String 对象写入 XML 文件，应先调用其 String..::.ToLower 方法将其转换为小写。 此方法返回常量“True”或“False”。请注意，XML 区分大小写，而 XML 规范将“true”和“false”识别为有效的布尔值集。如果要将 ToString()()() 方法返回的 String 对象写入 XML 文件，应先调用其 String..::.ToLower 方法将其转换为小写。 此方法返回常量“True”或“False”。请注意，XML 区分大小写，而 XML 规范将“true”和“false”识别为有效的布尔值集。如果要将 ToString()()() 方法返回的 String 对象写入 XML 文件，应先调用其 String..::.ToLower 方法将其转换为小写。

下面的代码示例阐释了如何在 Boolean 的上下文中使用 ToString。

Dim raining As Boolean = False
Dim busLate As Boolean = True

Console.WriteLine("raining.ToString() returns {0}", raining)
Console.WriteLine("busLate.ToString() returns {0}", busLate)

bool raining = false;
bool busLate = true;

Console.WriteLine("raining.ToString() returns {0}", raining);
Console.WriteLine("busLate.ToString() returns {0}", busLate);

Boolean raining = false;
Boolean busLate = true;
Console::WriteLine(  "raining->ToString() returns {0}", raining.ToString() );
Console::WriteLine(  "busLate->ToString() returns {0}", busLate.ToString() );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
ToString 重载
System 命名空间


Boolean ..::.ToString 方法 (IFormatProvider)

Boolean
.
.
::
.
ToString 方法 (IFormatProvider)
Boolean 结构

将此实例的值转换为其等效字符串表示形式（“True”或“False”）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
（保留）IFormatProvider 对象。

返回值

类型： System String
如果此实例的值为 true，则为 TrueString；如果此实例的值为 false，则为 FalseString。

实现

保留 provider 参数。它不参与此方法的执行。这意味着，与使用 provider 参数的大多数方法不同，Boolean..::.ToString(IFormatProvider) 方法不反映区域性特定的设置。
保留 provider 参数。它不参与此方法的执行。这意味着，与使用 provider 参数的大多数方法不同，Boolean..::.ToString(IFormatProvider) 方法不反映区域性特定的设置。
保留 provider 参数。它不参与此方法的执行。这意味着，与使用 provider 参数的大多数方法不同，Boolean..::.ToString(IFormatProvider) 方法不反映区域性特定的设置。

此方法返回常量“True”或“False”。请注意，XML 区分大小写，而 XML 规范将“true”和“false”识别为有效的布尔值集。如果要将 ToString(IFormatProvider) 方法返回的 String 对象写入 XML 文件，应先调用其 String..::.ToLower 方法将其转换为小写。 此方法返回常量“True”或“False”。请注意，XML 区分大小写，而 XML 规范将“true”和“false”识别为有效的布尔值集。如果要将 ToString(IFormatProvider) 方法返回的 String 对象写入 XML 文件，应先调用其 String..::.ToLower 方法将其转换为小写。 此方法返回常量“True”或“False”。请注意，XML 区分大小写，而 XML 规范将“true”和“false”识别为有效的布尔值集。如果要将 ToString(IFormatProvider) 方法返回的 String 对象写入 XML 文件，应先调用其 String..::.ToLower 方法将其转换为小写。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Boolean 结构
Boolean 成员
ToString 重载
System 命名空间


Boolean ..::.TryParse 方法

Boolean
.
.
::
.
TryParse 方法
Boolean 结构

将逻辑值的指定字符串表示形式转换为它的等效 Boolean 值。一个指示转换是否成功的返回值。 将逻辑值的指定字符串表示形式转换为它的等效 Boolean 值。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    value As String, _
    <OutAttribute> ByRef result As Boolean _
) As Boolean
public static bool TryParse(
    string value,
    out bool result
)
public:
static bool TryParse(
    String^ value,
    [OutAttribute] bool% result
)
static member TryParse :
        value:string *
        result:bool byref -> bool

参数

value
类型： System String
包含要转换的值的字符串。
result
类型： System Boolean %
如果转换成功，当 value 等于 TrueString 时，此方法返回时将包含 true，当 value 等于 FalseString 时，此方法返回时将包含 false。如果转换失败，则包含 false。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不等于 TrueString 或 FalseString，则转换将失败。该参数未经初始化即被传递。 如果转换成功，当 value 等于 TrueString 时，此方法返回时将包含 true，当 value 等于 FalseString 时，此方法返回时将包含 false。如果转换失败，则包含 false。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不等于 TrueString 或 FalseString，则转换将失败。该参数未经初始化即被传递。 如果转换成功，当 value 等于 TrueString 时，此方法返回时将包含 true，当 value 等于 FalseString 时，此方法返回时将包含 false。如果转换失败，则包含 false。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不等于 TrueString 或 FalseString，则转换将失败。该参数未经初始化即被传递。 如果转换成功，当 value 等于 TrueString 时，此方法返回时将包含 true，当 value 等于 FalseString 时，此方法返回时将包含 false。如果转换失败，则包含 false。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不等于 TrueString 或 FalseString，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 value 成功转换，则为 true；否则为 false。

TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。

value 参数的前后可加空格。比较不区分大小写。 value 参数的前后可加空格。比较不区分大小写。

下面的代码示例演示多个基类型的 TryParse 方法以及 DateTime..::.TryParseExact 方法的重载。

' This example demonstrates overloads of the TryParse method for
' several base types, and the TryParseExact method for DateTime.
' In most cases, this example uses the most complex overload; that is, the overload
' with the most parameters for a particular type. If a complex overload specifies
' null (Nothing in Visual Basic) for the IFormatProvider parameter, formatting
' information is obtained from the culture associated with the current thread.
' If a complex overload specifies the style parameter, the parameter value is
' the default value used by the equivalent simple overload.

Imports System
Imports System.Globalization

Class Sample
   Public Shared Sub Main()
      Dim result As Boolean
      Dim ci As CultureInfo
      Dim nl As String = Environment.NewLine
      Dim msg1 As String = _
                 "This example demonstrates overloads of the TryParse method for{0}" & _
                 "several base types, as well as the TryParseExact method for DateTime.{0}"
      Dim msg2 As String = "Non-numeric types:{0}"
      Dim msg3 As String = "{0}Numeric types:{0}"
      Dim msg4 As String = "{0}The following types are not CLS-compliant:{0}"

      ' Non-numeric types.
      Dim booleanVal As [Boolean]
      Dim charVal As [Char]
      Dim datetimeVal As DateTime

      ' Numeric types.
      Dim byteVal As [Byte]
      Dim int16Val As Int16
      Dim int32Val As Int32
      Dim int64Val As Int64
      Dim decimalVal As [Decimal]
      Dim singleVal As [Single]
      Dim doubleVal As [Double]

      ' The following types are not CLS-compliant.
      Dim sbyteVal As SByte
      Dim uint16Val As UInt16
      Dim uint32Val As UInt32
      Dim uint64Val As UInt64
      '
      Console.WriteLine(msg1, nl)

      ' Non-numeric types:
      Console.WriteLine(msg2, nl)
      ' DateTime
      ' TryParse:
      ' Assume current culture is en-US, and dates of the form: MMDDYYYY.
      result = DateTime.TryParse("7/4/2004 12:34:56", datetimeVal)
      Show(result, "DateTime #1", datetimeVal.ToString())

      ' Use fr-FR culture, and dates of the form: DDMMYYYY.
      ci = New CultureInfo("fr-FR")
      result = DateTime.TryParse("4/7/2004 12:34:56", ci, DateTimeStyles.None, datetimeVal)
      Show(result, "DateTime #2", datetimeVal.ToString())

      ' TryParseExact:
      ' Use fr-FR culture. The format, "G", is short date and long time.
      result = DateTime.TryParseExact("04/07/2004 12:34:56", "G", ci, DateTimeStyles.None, datetimeVal)
      Show(result, "DateTime #3", datetimeVal.ToString())

      ' Assume en-US culture.
      Dim dateFormats As String() =  {"f", "F", "g", "G"}
      result = DateTime.TryParseExact("7/4/2004 12:34:56 PM", dateFormats, Nothing, DateTimeStyles.None, datetimeVal)
      Show(result, "DateTime #4", datetimeVal.ToString())

      Console.WriteLine()
      ' Boolean
      result = [Boolean].TryParse("true", booleanVal)
      Show(result, "Boolean", booleanVal.ToString())
      ' Char
      result = [Char].TryParse("A", charVal)
      Show(result, "Char", charVal.ToString())

      ' Numeric types:
      Console.WriteLine(msg3, nl)
      ' Byte
      result = [Byte].TryParse("1", NumberStyles.Integer, Nothing, byteVal)
      Show(result, "Byte", byteVal.ToString())
      ' Int16
      result = Int16.TryParse("-2", NumberStyles.Integer, Nothing, int16Val)
      Show(result, "Int16", int16Val.ToString())
      ' Int32
      result = Int32.TryParse("3", NumberStyles.Integer, Nothing, int32Val)
      Show(result, "Int32", int32Val.ToString())
      ' Int64
      result = Int64.TryParse("4", NumberStyles.Integer, Nothing, int64Val)
      Show(result, "Int64", int64Val.ToString())
      ' Decimal
      result = [Decimal].TryParse("-5.5", NumberStyles.Number, Nothing, decimalVal)
      Show(result, "Decimal", decimalVal.ToString())
      ' Single
      result = [Single].TryParse("6.6", NumberStyles.Float Or NumberStyles.AllowThousands, Nothing, singleVal)
      Show(result, "Single", singleVal.ToString())
      ' Double
      result = [Double].TryParse("-7", NumberStyles.Float Or NumberStyles.AllowThousands, Nothing, doubleVal)
      Show(result, "Double", doubleVal.ToString())

      ' Use the simple Double.TryParse overload, but specify an invalid value.
      result = [Double].TryParse("abc", doubleVal)
      Show(result, "Double #2", doubleVal.ToString())
      '
      Console.WriteLine(msg4, nl)
      ' SByte
      result = SByte.TryParse("-8", NumberStyles.Integer, Nothing, sbyteVal)
      Show(result, "SByte", sbyteVal.ToString())
      ' UInt16
      result = UInt16.TryParse("9", NumberStyles.Integer, Nothing, uint16Val)
      Show(result, "UInt16", uint16Val.ToString())
      ' UInt32
      result = UInt32.TryParse("10", NumberStyles.Integer, Nothing, uint32Val)
      Show(result, "UInt32", uint32Val.ToString())
      ' UInt64
      result = UInt64.TryParse("11", NumberStyles.Integer, Nothing, uint64Val)
      Show(result, "UInt64", uint64Val.ToString())
   End Sub 'Main

   Protected Shared Sub Show(parseResult As Boolean, typeName As String, parseValue As String)
      Dim msgSuccess As String = "Parse for {0} = {1}"
      Dim msgFailure As String = "** Parse for {0} failed. Invalid input."
      '
      If parseResult = True Then
         Console.WriteLine(msgSuccess, typeName, parseValue)
      Else
         Console.WriteLine(msgFailure, typeName)
      End If
   End Sub 'Show
End Class 'Sample '
'This example produces the following results:
'
'This example demonstrates overloads of the TryParse method for
'several base types, as well as the TryParseExact method for DateTime.
'
'Non-numeric types:
'
'Parse for DateTime #1 = 7/4/2004 12:34:56 PM
'Parse for DateTime #2 = 7/4/2004 12:34:56 PM
'Parse for DateTime #3 = 7/4/2004 12:34:56 PM
'Parse for DateTime #4 = 7/4/2004 12:34:56 PM
'
'Parse for Boolean = True
'Parse for Char = A
'
'Numeric types:
'
'Parse for Byte = 1
'Parse for Int16 = -2
'Parse for Int32 = 3
'Parse for Int64 = 4
'Parse for Decimal = -5.5
'Parse for Single = 6.6
'Parse for Double = -7
'** Parse for Double #2 failed. Invalid input.
'
'The following types are not CLS-compliant:
'
'Parse for SByte = -8
'Parse for UInt16 = 9
'Parse for UInt32 = 10
'Parse for UInt64 = 11
'

// This example demonstrates overloads of the TryParse method for
// several base types, and the TryParseExact method for DateTime.

// In most cases, this example uses the most complex overload; that is, the overload
// with the most parameters for a particular type. If a complex overload specifies
// null (Nothing in Visual Basic) for the IFormatProvider parameter, formatting
// information is obtained from the culture associated with the current thread.
// If a complex overload specifies the style parameter, the parameter value is
// the default value used by the equivalent simple overload.

using System;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    bool     result;
    CultureInfo ci;
    string   nl = Environment.NewLine;
    string   msg1 =
             "This example demonstrates overloads of the TryParse method for{0}" +
             "several base types, as well as the TryParseExact method for DateTime.{0}";
    string   msg2 = "Non-numeric types:{0}";
    string   msg3 = "{0}Numeric types:{0}";
    string   msg4 = "{0}The following types are not CLS-compliant:{0}";

// Non-numeric types.
    Boolean  booleanVal;
    Char     charVal;
    DateTime datetimeVal;

// Numeric types.
    Byte     byteVal;
    Int16    int16Val;
    Int32    int32Val;
    Int64    int64Val;
    Decimal  decimalVal;
    Single   singleVal;
    Double   doubleVal;

// The following types are not CLS-compliant.
    SByte    sbyteVal;
    UInt16   uint16Val;
    UInt32   uint32Val;
    UInt64   uint64Val;
//
    Console.WriteLine(msg1, nl);

// Non-numeric types:
    Console.WriteLine(msg2, nl);
// DateTime
  // TryParse:
    // Assume current culture is en-US, and dates of the form: MMDDYYYY.
    result = DateTime.TryParse("7/4/2004 12:34:56", out datetimeVal);
    Show(result, "DateTime #1", datetimeVal.ToString());

    // Use fr-FR culture, and dates of the form: DDMMYYYY.
    ci = new CultureInfo("fr-FR");
    result = DateTime.TryParse("4/7/2004 12:34:56",
             ci, DateTimeStyles.None, out datetimeVal);
    Show(result, "DateTime #2", datetimeVal.ToString());

  // TryParseExact:
    // Use fr-FR culture. The format, "G", is short date and long time.
    result = DateTime.TryParseExact("04/07/2004 12:34:56", "G",
             ci, DateTimeStyles.None, out datetimeVal);
    Show(result, "DateTime #3", datetimeVal.ToString());

    // Assume en-US culture.
    string[] dateFormats = {"f", "F", "g", "G"};
    result = DateTime.TryParseExact("7/4/2004 12:34:56 PM",
             dateFormats, null, DateTimeStyles.None,
             out datetimeVal);
    Show(result, "DateTime #4", datetimeVal.ToString());

    Console.WriteLine();
// Boolean
    result = Boolean.TryParse("true", out booleanVal);
    Show(result, "Boolean", booleanVal.ToString());
// Char
    result = Char.TryParse("A", out charVal);
    Show(result, "Char", charVal.ToString());

// Numeric types:
    Console.WriteLine(msg3, nl);
// Byte
    result = Byte.TryParse("1", NumberStyles.Integer, null, out byteVal);
    Show(result, "Byte", byteVal.ToString());
// Int16
    result = Int16.TryParse("-2", NumberStyles.Integer, null, out int16Val);
    Show(result, "Int16", int16Val.ToString());
// Int32
    result = Int32.TryParse("3", NumberStyles.Integer, null, out int32Val);
    Show(result, "Int32", int32Val.ToString());
// Int64
    result = Int64.TryParse("4", NumberStyles.Integer, null, out int64Val);
    Show(result, "Int64", int64Val.ToString());
// Decimal
    result = Decimal.TryParse("-5.5", NumberStyles.Number, null, out decimalVal);
    Show(result, "Decimal", decimalVal.ToString());
// Single
    result = Single.TryParse("6.6",
             (NumberStyles.Float | NumberStyles.AllowThousands),
             null, out singleVal);
    Show(result, "Single", singleVal.ToString());
// Double
    result = Double.TryParse("-7",
             (NumberStyles.Float | NumberStyles.AllowThousands),
             null, out doubleVal);
    Show(result, "Double", doubleVal.ToString());

// Use the simple Double.TryParse overload, but specify an invalid value.

    result = Double.TryParse("abc", out doubleVal);
    Show(result, "Double #2", doubleVal.ToString());
//
    Console.WriteLine(msg4, nl);
// SByte
    result = SByte.TryParse("-8", NumberStyles.Integer, null, out sbyteVal);
    Show(result, "SByte", sbyteVal.ToString());
// UInt16
    result = UInt16.TryParse("9", NumberStyles.Integer, null, out uint16Val);
    Show(result, "UInt16", uint16Val.ToString());
// UInt32
    result = UInt32.TryParse("10", NumberStyles.Integer, null, out uint32Val);
    Show(result, "UInt32", uint32Val.ToString());
// UInt64
    result = UInt64.TryParse("11", NumberStyles.Integer, null, out uint64Val);
    Show(result, "UInt64", uint64Val.ToString());
    }

    protected static void Show(bool parseResult, string typeName,
                               string parseValue)
    {
    string msgSuccess = "Parse for {0} = {1}";
    string msgFailure = "** Parse for {0} failed. Invalid input.";
//
    if (parseResult == true)
        Console.WriteLine(msgSuccess, typeName, parseValue);
    else
        Console.WriteLine(msgFailure, typeName);
   }
}
/*
This example produces the following results:

This example demonstrates overloads of the TryParse method for
several base types, as well as the TryParseExact method for DateTime.

Non-numeric types:

Parse for DateTime #1 = 7/4/2004 12:34:56 PM
Parse for DateTime #2 = 7/4/2004 12:34:56 PM
Parse for DateTime #3 = 7/4/2004 12:34:56 PM
Parse for DateTime #4 = 7/4/2004 12:34:56 PM

Parse for Boolean = True
Parse for Char = A

Numeric types:

Parse for Byte = 1
Parse for Int16 = -2
Parse for Int32 = 3
Parse for Int64 = 4
Parse for Decimal = -5.5
Parse for Single = 6.6
Parse for Double = -7
** Parse for Double #2 failed. Invalid input.

The following types are not CLS-compliant:

Parse for SByte = -8
Parse for UInt16 = 9
Parse for UInt32 = 10
Parse for UInt64 = 11
*/

// This example demonstrates overloads of the TryParse method for
// several base types, and the TryParseExact method for DateTime.
// In most cases, this example uses the most complex overload; that is, the overload
// with the most parameters for a particular type. If a complex overload specifies
// null (Nothing in Visual Basic) for the IFormatProvider parameter, formatting
// information is obtained from the culture associated with the current thread.
// If a complex overload specifies the style parameter, the parameter value is
// the default value used by the equivalent simple overload.
using namespace System;
using namespace System::Globalization;

static void Show( bool parseResult, String^ typeName, String^ parseValue )
{
   String^ msgSuccess = L"Parse for {0} = {1}";
   String^ msgFailure = L"** Parse for {0} failed. Invalid input.";

   //
   if ( parseResult == true )
      Console::WriteLine( msgSuccess, typeName, parseValue );
   else
      Console::WriteLine( msgFailure, typeName );
}

void main()
{
   bool result;
   CultureInfo^ ci;
   String^ nl = Environment::NewLine;
   String^ msg1 = L"This example demonstrates overloads of the TryParse method for{0}"
   L"several base types, as well as the TryParseExact method for DateTime.{0}";
   String^ msg2 = L"Non-numeric types:{0}";
   String^ msg3 = L"{0}Numeric types:{0}";
   String^ msg4 = L"{0}The following types are not CLS-compliant:{0}";

   // Non-numeric types.
   Boolean booleanVal;
   Char charVal;
   DateTime datetimeVal;

   // Numeric types.
   Byte byteVal;
   Int16 int16Val;
   Int32 int32Val;
   Int64 int64Val;
   Decimal decimalVal;
   Single singleVal;
   Double doubleVal;

   // The following types are not CLS-compliant.
   SByte sbyteVal;
   UInt16 uint16Val;
   UInt32 uint32Val;
   UInt64 uint64Val;

   //
   Console::WriteLine( msg1, nl );

   // Non-numeric types:
   Console::WriteLine( msg2, nl );

   // DateTime
   // TryParse:
   // Assume current culture is en-US, and dates of the form: MMDDYYYY.
   result = DateTime::TryParse( L"7/4/2004 12:34:56",  datetimeVal );
   Show( result, L"DateTime #1", datetimeVal.ToString() );

   // Use fr-FR culture, and dates of the form: DDMMYYYY.
   ci = gcnew CultureInfo( L"fr-FR" );
   result = DateTime::TryParse( L"4/7/2004 12:34:56", ci, DateTimeStyles::None,  datetimeVal );
   Show( result, L"DateTime #2", datetimeVal.ToString() );

   // TryParseExact:
   // Use fr-FR culture. The format, "G", is short date and long time.
   result = DateTime::TryParseExact( L"04/07/2004 12:34:56", L"G", ci, DateTimeStyles::None,  datetimeVal );
   Show( result, L"DateTime #3", datetimeVal.ToString() );

   // Assume en-US culture.
   array<String^>^dateFormats = {L"f",L"F",L"g",L"G"};
   result = DateTime::TryParseExact( L"7/4/2004 12:34:56 PM", dateFormats, nullptr, DateTimeStyles::None,  datetimeVal );
   Show( result, L"DateTime #4", datetimeVal.ToString() );
   Console::WriteLine();

   // Boolean
   result = Boolean::TryParse( L"true",  booleanVal );
   Show( result, L"Boolean", booleanVal.ToString() );

   // Char
   result = Char::TryParse( L"A",  charVal );
   Show( result, L"Char", charVal.ToString() );

   // Numeric types:
   Console::WriteLine( msg3, nl );

   // Byte
   result = Byte::TryParse( L"1", NumberStyles::Integer, nullptr,  byteVal );
   Show( result, L"Byte", byteVal.ToString() );

   // Int16
   result = Int16::TryParse( L"-2", NumberStyles::Integer, nullptr,  int16Val );
   Show( result, L"Int16", int16Val.ToString() );

   // Int32
   result = Int32::TryParse( L"3", NumberStyles::Integer, nullptr,  int32Val );
   Show( result, L"Int32", int32Val.ToString() );

   // Int64
   result = Int64::TryParse( L"4", NumberStyles::Integer, nullptr,  int64Val );
   Show( result, L"Int64", int64Val.ToString() );

   // Decimal
   result = Decimal::TryParse( L"-5.5", NumberStyles::Number, nullptr,  decimalVal );
   Show( result, L"Decimal", decimalVal.ToString() );

   // Single
   result = Single::TryParse( L"6.6", static_cast<NumberStyles>((NumberStyles::Float | NumberStyles::AllowThousands)), nullptr,  singleVal );
   Show( result, L"Single", singleVal.ToString() );

   // Double
   result = Double::TryParse( L"-7", static_cast<NumberStyles>(NumberStyles::Float | NumberStyles::AllowThousands), nullptr,  doubleVal );
   Show( result, L"Double", doubleVal.ToString() );

   // Use the simple Double.TryParse overload, but specify an invalid value.
   result = Double::TryParse( L"abc",  doubleVal );
   Show( result, L"Double #2", doubleVal.ToString() );

   //
   Console::WriteLine( msg4, nl );

   // SByte
   result = SByte::TryParse( L"-8", NumberStyles::Integer, nullptr,  sbyteVal );
   Show( result, L"SByte", sbyteVal.ToString() );

   // UInt16
   result = UInt16::TryParse( L"9", NumberStyles::Integer, nullptr,  uint16Val );
   Show( result, L"UInt16", uint16Val.ToString() );

   // UInt32
   result = UInt32::TryParse( L"10", NumberStyles::Integer, nullptr,  uint32Val );
   Show( result, L"UInt32", uint32Val.ToString() );

   // UInt64
   result = UInt64::TryParse( L"11", NumberStyles::Integer, nullptr,  uint64Val );
   Show( result, L"UInt64", uint64Val.ToString() );
}

/*
This example produces the following results:

This example demonstrates overloads of the TryParse method for
several base types, as well as the TryParseExact method for DateTime.

Non-numeric types:

Parse for DateTime #1 = 7/4/2004 12:34:56 PM
Parse for DateTime #2 = 7/4/2004 12:34:56 PM
Parse for DateTime #3 = 7/4/2004 12:34:56 PM
Parse for DateTime #4 = 7/4/2004 12:34:56 PM

Parse for Boolean = True
Parse for Char = A

Numeric types:

Parse for Byte = 1
Parse for Int16 = -2
Parse for Int32 = 3
Parse for Int64 = 4
Parse for Decimal = -5.5
Parse for Single = 6.6
Parse for Double = -7
** Parse for Double #2 failed. Invalid input.

The following types are not CLS-compliant:

Parse for SByte = -8
Parse for UInt16 = 9
Parse for UInt32 = 10
Parse for UInt64 = 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Boolean 结构
Boolean 成员
System 命名空间
Parse
TrueString
FalseString

其他资源

分析其他字符串


Buffer 类

Buffer 类
成员

操作基元类型的数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public NotInheritable Class Buffer
[ComVisibleAttribute(true)]
public static class Buffer
[ComVisibleAttribute(true)]
public ref class Buffer abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
type Buffer =  class end

Buffer 只影响基元类型的数组；此类不适用于对象。不管与基元类型关联的任何行为或限制如何，每个基元类型都被视为一系列字节。 Buffer 只影响基元类型的数组；此类不适用于对象。不管与基元类型关联的任何行为或限制如何，每个基元类型都被视为一系列字节。

Buffer 提供了许多方法，可以将字节从一个基元类型数组复制到另一个基元类型数组、从数组获取字节、在数组中设置字节，以及获取数组长度。对于操作基元类型，此类可比 System..::.Array 类中相似的方法提供更好的性能。 Buffer 提供了许多方法，可以将字节从一个基元类型数组复制到另一个基元类型数组、从数组获取字节、在数组中设置字节，以及获取数组长度。对于操作基元类型，此类可比 System..::.Array 类中相似的方法提供更好的性能。

Buffer 适用于下列基元类型：Boolean、Char、SByte、Byte、Int16、UInt16、Int32、UInt32、Int64、UInt64、IntPtr、UIntPtr、Single 和 Double。

下面的代码示例演示多个 Buffer 类方法的用法。

' Example of the Buffer class methods.
Imports System
Imports Microsoft.VisualBasic

Module BufferClassDemo

    ' Display the array elements from right to left in hexadecimal.
    Sub DisplayArray( arr( ) As Short )

        Console.Write( "  arr:" )
        Dim loopX     As Integer
        For loopX = arr.Length - 1 To 0 Step -1
            Console.Write( " {0:X4}", arr( loopX ) )
        Next loopX
        Console.WriteLine( )
    End Sub

    Sub Main( )

        ' This array is to be modified and displayed.
        Dim arr( ) As Short = { 258, 259, 260, 261, 262, 263, 264, _
                                265, 266, 267, 268, 269, 270, 271 }
        Console.WriteLine( _
            "This example of the Buffer class methods generates " & _
            "the following output." & vbCrLf & "Note: The " & _
            "array is displayed from right to left." & vbCrLf )
        Console.WriteLine( "Initial values of array:" & vbCrLf )

        ' Display the initial array values and ByteLength.
        DisplayArray( arr )
        Console.WriteLine( vbCrLf & _
            "Buffer.ByteLength( arr ): {0}", _
            Buffer.ByteLength( arr ) )

        ' Copy a region of the array; set a byte within the array.
        Console.WriteLine( vbCrLf & _
            "Call these methods: " & vbCrLf & _
            "  Buffer.BlockCopy( arr, 5, arr, 16, 9 )," & vbCrLf & _
            "  Buffer.SetByte( arr, 7, 170 )." & vbCrLf )

        Buffer.BlockCopy( arr, 5, arr, 16, 9 )
        Buffer.SetByte( arr, 7, 170 )

        ' Display the array and a byte within the array.
        Console.WriteLine( "Final values of array:" & vbCrLf )
        DisplayArray( arr )
        Console.WriteLine( vbCrLf & _
            "Buffer.GetByte( arr, 26 ): {0}", _
            Buffer.GetByte( arr, 26 ) )
    End Sub
End Module

' This example of the Buffer class methods generates the following output.
' Note: The array is displayed from right to left.
'
' Initial values of array:
'
'   arr: 010F 010E 010D 010C 010B 010A 0109 0108 0107 0106 0105 0104 0103 0102
'
' Buffer.ByteLength( arr ): 28
'
' Call these methods:
'   Buffer.BlockCopy( arr, 5, arr, 16, 9 ),
'   Buffer.SetByte( arr, 7, 170 ).
'
' Final values of array:
'
'   arr: 010F 0101 0801 0701 0601 0501 0109 0108 0107 0106 AA05 0104 0103 0102
'
' Buffer.GetByte( arr, 26 ): 15

// Example of the Buffer class methods.
using System;

class BufferClassDemo
{
    // Display the array elements from right to left in hexadecimal.
    public static void DisplayArray( short[ ] arr )
    {
        Console.Write( "  arr:" );
        for( int loopX = arr.Length - 1; loopX >= 0; loopX-- )
            Console.Write( " {0:X4}", arr[ loopX ] );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        // This array is to be modified and displayed.
        short[ ] arr = { 258, 259, 260, 261, 262, 263, 264,
                         265, 266, 267, 268, 269, 270, 271 };

        Console.WriteLine( "This example of the Buffer class " +
            "methods generates the following output.\n" +
            "Note: The array is displayed from right to left.\n" );
        Console.WriteLine( "Initial values of array:\n" );

        // Display the initial array values and ByteLength.
        DisplayArray( arr );
        Console.WriteLine( "\nBuffer.ByteLength( arr ): {0}",
            Buffer.ByteLength( arr ) );

        // Copy a region of the array; set a byte within the array.
        Console.WriteLine( "\nCall these methods: \n" +
            "  Buffer.BlockCopy( arr, 5, arr, 16, 9 ),\n" +
            "  Buffer.SetByte( arr, 7, 170 ).\n" );

        Buffer.BlockCopy( arr, 5, arr, 16, 9 );
        Buffer.SetByte( arr, 7, 170 );

        // Display the array and a byte within the array.
        Console.WriteLine( "Final values of array:\n" );
        DisplayArray( arr );
        Console.WriteLine( "\nBuffer.GetByte( arr, 26 ): {0}",
            Buffer.GetByte( arr, 26 ) );
    }
}

/*
This example of the Buffer class methods generates the following output.
Note: The array is displayed from right to left.

Initial values of array:

  arr: 010F 010E 010D 010C 010B 010A 0109 0108 0107 0106 0105 0104 0103 0102

Buffer.ByteLength( arr ): 28

Call these methods:
  Buffer.BlockCopy( arr, 5, arr, 16, 9 ),
  Buffer.SetByte( arr, 7, 170 ).

Final values of array:

  arr: 010F 0101 0801 0701 0601 0501 0109 0108 0107 0106 AA05 0104 0103 0102

Buffer.GetByte( arr, 26 ): 15
*/

// Example of the Buffer class methods.
using namespace System;

// Display the array elements from right to left in hexadecimal.
void DisplayArray( array<short>^arr )
{
   Console::Write( "  arr:" );
   for ( int loopX = arr->Length - 1; loopX >= 0; loopX-- )
      Console::Write( " {0:X4}", arr[ loopX ] );
   Console::WriteLine();
}

int main()
{

   // This array is to be modified and displayed.
   array<short>^arr = {258,259,260,261,262,263,264,265,266,267,268,269,270,271};
   Console::WriteLine( "This example of the Buffer class "
   "methods generates the following output.\n"
   "Note: The array is displayed from right to left.\n" );
   Console::WriteLine( "Initial values of array:\n" );

   // Display the initial array values and ByteLength.
   DisplayArray( arr );
   Console::WriteLine( "\nBuffer::ByteLength( arr ): {0}", Buffer::ByteLength( arr ) );

   // Copy a region of the array; set a byte within the array.
   Console::WriteLine( "\nCall these methods: \n"
   "  Buffer::BlockCopy( arr, 5, arr, 16, 9 ),\n"
   "  Buffer::SetByte( arr, 7, 170 ).\n" );
   Buffer::BlockCopy( arr, 5, arr, 16, 9 );
   Buffer::SetByte( arr, 7, 170 );

   // Display the array and a byte within the array.
   Console::WriteLine( "Final values of array:\n" );
   DisplayArray( arr );
   Console::WriteLine( "\nBuffer::GetByte( arr, 26 ): {0}", Buffer::GetByte( arr, 26 ) );
}

/*
This example of the Buffer class methods generates the following output.
Note: The array is displayed from right to left.

Initial values of array:

  arr: 010F 010E 010D 010C 010B 010A 0109 0108 0107 0106 0105 0104 0103 0102

Buffer::ByteLength( arr ): 28

Call these methods:
  Buffer::BlockCopy( arr, 5, arr, 16, 9 ),
  Buffer::SetByte( arr, 7, 170 ).

Final values of array:

  arr: 010F 0101 0801 0701 0601 0501 0109 0108 0107 0106 AA05 0104 0103 0102

Buffer::GetByte( arr, 26 ): 15
*/

System System..::.BufferBuffer
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Buffer 成员
System 命名空间


Buffer 成员

Buffer 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Buffer 类

操作基元类型的数组。

Buffer 类型公开以下成员。

名称 说明
页首

参考

Buffer 类
System 命名空间


Buffer 方法

Buffer 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Buffer 类

Buffer 类型公开以下成员。

名称 说明
页首

参考

Buffer 类
System 命名空间


Buffer ..::.BlockCopy 方法

Buffer
.
.
::
.
BlockCopy 方法
Buffer 类

将指定数目的字节从起始于特定偏移量的源数组复制到起始于特定偏移量的目标数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub BlockCopy ( _
    src As Array, _
    srcOffset As Integer, _
    dst As Array, _
    dstOffset As Integer, _
    count As Integer _
)
public static void BlockCopy(
    Array src,
    int srcOffset,
    Array dst,
    int dstOffset,
    int count
)
public:
static void BlockCopy(
    Array^ src,
    int srcOffset,
    Array^ dst,
    int dstOffset,
    int count
)
static member BlockCopy :
        src:Array *
        srcOffset:int *
        dst:Array *
        dstOffset:int *
        count:int -> unit

参数

src
类型： System Array
源缓冲区。
srcOffset
类型： System Int32
src 中从零开始的字节偏移量。
dst
类型： System Array
目标缓冲区。
dstOffset
类型： System Int32
dst 中从零开始的字节偏移量。
count
类型： System Int32
要复制的字节数。
异常 | 条件
ArgumentNullException | src 或 dst 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | src 或 dst 不是基元数组。 - 或 - src 的长度小于 srcOffset 加上 count。 - 或 - dst 的长度小于 dstOffset 加上 count。
ArgumentOutOfRangeException | srcOffset、dstOffset 或 count 小于 0。

此方法将 count 个字节从 src 复制到 dst，前者开始于 srcOffset 而后者开始于 dstOffset。srcOffset 和 dstOffset 都是从零开始的；也就是说，每个缓冲区中的第一个字节都在位置 0，而不是位置 1。 此方法将 count 个字节从 src 复制到 dst，前者开始于 srcOffset 而后者开始于 dstOffset。srcOffset 和 dstOffset 都是从零开始的；也就是说，每个缓冲区中的第一个字节都在位置 0，而不是位置 1。

BlockCopy 方法使用内存的偏移量访问 src 参数数组中的字节，而不是使用索引或数组上下限等编程构造。例如，如果使用应用程序的编程语言声明一个从零开始的下限为 -50 的 Int32 数组，然后将该数组和偏移量 5 传递给 BlockCopy 方法，则该方法将访问的第一个数组元素是该数组的第二个元素（位于索引 -49 处）。此外，首先访问数组元素 -49 的哪个字节取决于执行应用程序的计算机的 Endian 设置。 BlockCopy 方法使用内存的偏移量访问 src 参数数组中的字节，而不是使用索引或数组上下限等编程构造。例如，如果使用应用程序的编程语言声明一个从零开始的下限为 -50 的 Int32 数组，然后将该数组和偏移量 5 传递给 BlockCopy 方法，则该方法将访问的第一个数组元素是该数组的第二个元素（位于索引 -49 处）。此外，首先访问数组元素 -49 的哪个字节取决于执行应用程序的计算机的 Endian 设置。 BlockCopy 方法使用内存的偏移量访问 src 参数数组中的字节，而不是使用索引或数组上下限等编程构造。例如，如果使用应用程序的编程语言声明一个从零开始的下限为 -50 的 Int32 数组，然后将该数组和偏移量 5 传递给 BlockCopy 方法，则该方法将访问的第一个数组元素是该数组的第二个元素（位于索引 -49 处）。此外，首先访问数组元素 -49 的哪个字节取决于执行应用程序的计算机的 Endian 设置。

顾名思义，BlockCopy 方法会将字节块作为一个整体复制，而不是一次复制一个字节。因此，如果 src 和 dst 引用相同数组，并且 srcOffset + count - 1 的范围与 dstOffset + count -1 的范围重叠，则在将重叠字节的值复制到目标之前不会覆盖这些值。在下面的示例中，名为 arr 的数组中字节 0-16 的值会复制到字节 12-28。尽管有重叠范围，还是成功复制了源字节的值。 顾名思义，BlockCopy 方法会将字节块作为一个整体复制，而不是一次复制一个字节。因此，如果 src 和 dst 引用相同数组，并且 srcOffset + count - 1 的范围与 dstOffset + count -1 的范围重叠，则在将重叠字节的值复制到目标之前不会覆盖这些值。在下面的示例中，名为 arr 的数组中字节 0-16 的值会复制到字节 12-28。尽管有重叠范围，还是成功复制了源字节的值。 顾名思义，BlockCopy 方法会将字节块作为一个整体复制，而不是一次复制一个字节。因此，如果 src 和 dst 引用相同数组，并且 srcOffset + count - 1 的范围与 dstOffset + count -1 的范围重叠，则在将重叠字节的值复制到目标之前不会覆盖这些值。在下面的示例中，名为 arr 的数组中字节 0-16 的值会复制到字节 12-28。尽管有重叠范围，还是成功复制了源字节的值。 顾名思义，BlockCopy 方法会将字节块作为一个整体复制，而不是一次复制一个字节。因此，如果 src 和 dst 引用相同数组，并且 srcOffset + count - 1 的范围与 dstOffset + count -1 的范围重叠，则在将重叠字节的值复制到目标之前不会覆盖这些值。在下面的示例中，名为 arr 的数组中字节 0-16 的值会复制到字节 12-28。尽管有重叠范围，还是成功复制了源字节的值。

Const INT_SIZE As Integer = 4
Dim arr() As Integer = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }
Buffer.BlockCopy(arr, 0 * INT_SIZE, arr, 3 * INT_SIZE, 4 * INT_SIZE)
For Each value As Integer In arr
   Console.Write("{0}  ", value)
Next
' The example displays the following output:
'       2  4  6  2  4  6  8  16  18  20

const int INT_SIZE = 4;
int[] arr = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
Buffer.BlockCopy(arr, 0 * INT_SIZE, arr, 3 * INT_SIZE, 4 * INT_SIZE);
foreach (int value in arr)
   Console.Write("{0}  ", value);
// The example displays the following output:
//       2  4  6  2  4  6  8  16  18  20

在下面的示例中，名为 arr 的数组中字节 12-28 的值会复制到字节 0-16。再一次，尽管有重叠范围，还是成功复制了源字节的值。 在下面的示例中，名为 arr 的数组中字节 12-28 的值会复制到字节 0-16。再一次，尽管有重叠范围，还是成功复制了源字节的值。

Const INT_SIZE As Integer = 4
Dim arr() As Integer = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }
Buffer.BlockCopy(arr, 3 * INT_SIZE, arr, 0 * INT_SIZE, 4 * INT_SIZE)
For Each value As Integer In arr
   Console.Write("{0}  ", value)
Next
' The example displays the following output:
'       8  10  12  14  10  12  14  16  18  20

const int INT_SIZE = 4;
int[] arr = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
Buffer.BlockCopy(arr, 3 * INT_SIZE, arr, 0 * INT_SIZE, 4 * INT_SIZE);
foreach (int value in arr)
   Console.Write("{0}  ", value);
// The example displays the following output:
//       8  10  12  14  10  12  14  16  18  20

下面的示例通过使用 BlockCopy 方法复制数组区域。对于每个 BlockCopy 操作，它都将源和目标数组既作为值数组又作为字节序列列出。该示例阐释了在使用 BlockCopy 方法时考虑系统的 endianness 的重要性：因为 Windows 系统为小 endian，因此，基元数据类型的值的低序位字节位于高序位字节之前。 下面的示例通过使用 BlockCopy 方法复制数组区域。对于每个 BlockCopy 操作，它都将源和目标数组既作为值数组又作为字节序列列出。该示例阐释了在使用 BlockCopy 方法时考虑系统的 endianness 的重要性：因为 Windows 系统为小 endian，因此，基元数据类型的值的低序位字节位于高序位字节之前。 下面的示例通过使用 BlockCopy 方法复制数组区域。对于每个 BlockCopy 操作，它都将源和目标数组既作为值数组又作为字节序列列出。该示例阐释了在使用 BlockCopy 方法时考虑系统的 endianness 的重要性：因为 Windows 系统为小 endian，因此，基元数据类型的值的低序位字节位于高序位字节之前。

Module Example
    ' Display the individual bytes in the array in hexadecimal.
    Sub DisplayArray(arr As Array, name As String)
        Console.Write("{0,11}:", name)
        For ctr As Integer = 0 to arr.Length - 1
            Dim bytes() As Byte = BitConverter.GetBytes(arr(ctr))
            For Each byteValue As Byte In bytes
               Console.Write(" {0:X2}", byteValue)
            Next
        Next
        Console.WriteLine()
    End Sub

    ' Display the individual array element values in hexadecimal.
    Sub DisplayArrayValues(arr As Array, name As String)
       ' Get the length of one element in the array.
       Dim elementLength As Integer = Buffer.ByteLength(arr) / arr.Length
       Dim formatString As String = String.Format(" {{0:X{0}}}", 2 * elementLength)
       Console.Write("{0,11}:", name)
       For ctr As Integer = 0 to arr.Length - 1
         Console.Write(formatString, arr(ctr))
       Next
       Console.WriteLine()
    End Sub

    Sub Main()
       Console.WindowWidth = 120
        ' These are source and destination arrays for BlockCopy.
        Dim src()  As Short = { 258, 259, 260, 261, 262, 263, 264, _
                                 265, 266, 267, 268, 269, 270 }
        Dim dest() As Long = { 17, 18, 19, 20 }

        ' Display the initial value of the arrays in memory.
        Console.WriteLine( "Initial values of arrays:")
        Console.WriteLine("   Array values as Bytes:")
        DisplayArray(src, "src" )
        DisplayArray(dest, "dest" )
        Console.WriteLine("   Array values:")
        DisplayArrayValues(src, "src")
        DisplayArrayValues(dest, "dest")
        Console.WriteLine()

        ' Copy bytes 5-10 from source to index 7 in destination and display the result.
        Buffer.BlockCopy( src, 5, dest, 7, 6 )
        Console.WriteLine("Buffer.BlockCopy(src, 5, dest, 7, 6 )")
        Console.WriteLine("   Array values as Bytes:")
        DisplayArray(src, "src")
        DisplayArray(dest, "dest")
        Console.WriteLine("   Array values:")
        DisplayArrayValues(src, "src")
        DisplayArrayValues(dest, "dest")
        Console.WriteLine()

        ' Copy bytes 16-20 from source to index 22 in destination and display the result.
        Buffer.BlockCopy( src, 16, dest, 22, 5 )
        Console.WriteLine("Buffer.BlockCopy(src, 16, dest, 22, 5)")
        Console.WriteLine("   Array values as Bytes:")
        DisplayArray(src, "src")
        DisplayArray(dest, "dest")
        Console.WriteLine("   Array values:")
        DisplayArrayValues(src, "src")
        DisplayArrayValues(dest, "dest")
        Console.WriteLine()

        ' Copy overlapping range of bytes 4-10 to index 5 in source.
        Buffer.BlockCopy( src, 4, src, 5, 7 )
        Console.WriteLine("Buffer.BlockCopy( src, 4, src, 5, 7)")
        Console.WriteLine("   Array values as Bytes:")
        DisplayArray(src, "src")
        DisplayArray(dest, "dest")
        Console.WriteLine("   Array values:")
        DisplayArrayValues(src, "src")
        DisplayArrayValues(dest, "dest")
        Console.WriteLine()

        ' Copy overlapping range of bytes 16-22 to index 15 in source.
        Buffer.BlockCopy(src, 16, src, 15, 7)
        Console.WriteLine("Buffer.BlockCopy( src, 16, src, 15, 7)")
        Console.WriteLine("   Array values as Bytes:")
        DisplayArray(src, "src")
        DisplayArray(dest, "dest")
        Console.WriteLine("   Array values:")
        DisplayArrayValues(src, "src")
        DisplayArrayValues(dest, "dest")
    End Sub
End Module
' This example displays the following output:
'    Initial values of arrays:
'       Array values as Bytes:
'            src: 02 01 03 01 04 01 05 01 06 01 07 01 08 01 09 01 0A 01 0B 01 0C 01 0D 01 0E 01
'           dest: 11 00 00 00 00 00 00 00 12 00 00 00 00 00 00 00 13 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00
'       Array values:
'            src: 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E
'           dest: 0000000000000011 0000000000000012 0000000000000013 0000000000000014
'
'    Buffer.BlockCopy(src, 5, dest, 7, 6 )
'       Array values as Bytes:
'            src: 02 01 03 01 04 01 05 01 06 01 07 01 08 01 09 01 0A 01 0B 01 0C 01 0D 01 0E 01
'           dest: 11 00 00 00 00 00 00 01 05 01 06 01 07 00 00 00 13 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00
'       Array values:
'            src: 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E
'           dest: 0100000000000011 0000000701060105 0000000000000013 0000000000000014
'
'    Buffer.BlockCopy(src, 16, dest, 22, 5)
'       Array values as Bytes:
'            src: 02 01 03 01 04 01 05 01 06 01 07 01 08 01 09 01 0A 01 0B 01 0C 01 0D 01 0E 01
'           dest: 11 00 00 00 00 00 00 01 05 01 06 01 07 00 00 00 13 00 00 00 00 00 0A 01 0B 01 0C 00 00 00 00 00
'       Array values:
'            src: 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E
'           dest: 0100000000000011 0000000701060105 010A000000000013 00000000000C010B
'
'    Buffer.BlockCopy( src, 4, src, 5, 7)
'       Array values as Bytes:
'            src: 02 01 03 01 04 04 01 05 01 06 01 07 08 01 09 01 0A 01 0B 01 0C 01 0D 01 0E 01
'           dest: 11 00 00 00 00 00 00 01 05 01 06 01 07 00 00 00 13 00 00 00 00 00 0A 01 0B 01 0C 00 00 00 00 00
'       Array values:
'            src: 0102 0103 0404 0501 0601 0701 0108 0109 010A 010B 010C 010D 010E
'           dest: 0100000000000011 0000000701060105 010A000000000013 00000000000C010B
'
'    Buffer.BlockCopy( src, 16, src, 15, 7)
'       Array values as Bytes:
'            src: 02 01 03 01 04 04 01 05 01 06 01 07 08 01 09 0A 01 0B 01 0C 01 0D 0D 01 0E 01
'           dest: 11 00 00 00 00 00 00 01 05 01 06 01 07 00 00 00 13 00 00 00 00 00 0A 01 0B 01 0C 00 00 00 00 00
'       Array values:
'            src: 0102 0103 0404 0501 0601 0701 0108 0A09 0B01 0C01 0D01 010D 010E
'           dest: 0100000000000011 0000000701060105 010A000000000013 00000000000C010B

using System;

class Example
{
    // Display the individual bytes in the array in hexadecimal.
    public static void DisplayArray(Array arr, string name)
    {
        Console.WindowWidth = 120;
        Console.Write("{0,11}:", name);
        for (int ctr = 0; ctr < arr.Length; ctr++)
        {
            byte[] bytes;
            if (arr is long[])
               bytes = BitConverter.GetBytes((long) arr.GetValue(ctr));
            else
               bytes = BitConverter.GetBytes((short) arr.GetValue(ctr));

            foreach (byte byteValue in bytes)
               Console.Write(" {0:X2}", byteValue);
        }
        Console.WriteLine();
    }

    // Display the individual array element values in hexadecimal.
    public static void DisplayArrayValues(Array arr, string name)
    {
        // Get the length of one element in the array.
        int elementLength = Buffer.ByteLength(arr) / arr.Length;
        string formatString = String.Format(" {{0:X{0}}}", 2 * elementLength);
        Console.Write( "{0,11}:", name);
        for (int ctr = 0; ctr < arr.Length; ctr++)
            Console.Write(formatString, arr.GetValue(ctr));

        Console.WriteLine();
    }

    public static void Main( )
    {
        // These are the source and destination arrays for BlockCopy.
        short[] src  = { 258, 259, 260, 261, 262, 263, 264,
                          265, 266, 267, 268, 269, 270 };
        long[] dest = { 17, 18, 19, 20 };

        // Display the initial value of the arrays in memory.
        Console.WriteLine( "Initial values of arrays:");
        Console.WriteLine("   Array values as Bytes:");
        DisplayArray(src, "src" );
        DisplayArray(dest, "dest");
        Console.WriteLine("   Array values:");
        DisplayArrayValues(src, "src");
        DisplayArrayValues(dest, "dest");
        Console.WriteLine();

        // Copy bytes 5-10 from source to index 7 in destination and display the result.
        Buffer.BlockCopy(src, 5, dest, 7, 6);
        Console.WriteLine("Buffer.BlockCopy(src, 5, dest, 7, 6 )");
        Console.WriteLine("   Array values as Bytes:");
        DisplayArray(src, "src");
        DisplayArray(dest, "dest");
        Console.WriteLine("   Array values:");
        DisplayArrayValues(src, "src");
        DisplayArrayValues(dest, "dest");
        Console.WriteLine();

        // Copy bytes 16-20 from source to index 22 in destination and display the result.
        Buffer.BlockCopy(src, 16, dest, 22, 5);
        Console.WriteLine("Buffer.BlockCopy(src, 16, dest, 22, 5)");
        Console.WriteLine("   Array values as Bytes:");
        DisplayArray(src, "src");
        DisplayArray(dest, "dest");
        Console.WriteLine("   Array values:");
        DisplayArrayValues(src, "src");
        DisplayArrayValues(dest, "dest");
        Console.WriteLine();

        // Copy overlapping range of bytes 4-10 to index 5 in source.
        Buffer.BlockCopy(src, 4, src, 5, 7 );
        Console.WriteLine("Buffer.BlockCopy( src, 4, src, 5, 7)");
        Console.WriteLine("   Array values as Bytes:");
        DisplayArray(src, "src");
        DisplayArray(dest, "dest");
        Console.WriteLine("   Array values:");
        DisplayArrayValues(src, "src");
        DisplayArrayValues(dest, "dest");
        Console.WriteLine();

        // Copy overlapping range of bytes 16-22 to index 15 in source.
        Buffer.BlockCopy(src, 16, src, 15, 7);
        Console.WriteLine("Buffer.BlockCopy( src, 16, src, 15, 7)");
        Console.WriteLine("   Array values as Bytes:");
        DisplayArray(src, "src");
        DisplayArray(dest, "dest");
        Console.WriteLine("   Array values:");
        DisplayArrayValues(src, "src");
        DisplayArrayValues(dest, "dest");
    }
}
// The example displays the following output:
//    Initial values of arrays:
//       Array values as Bytes:
//            src: 02 01 03 01 04 01 05 01 06 01 07 01 08 01 09 01 0A 01 0B 01 0C 01 0D 01 0E 01
//           dest: 11 00 00 00 00 00 00 00 12 00 00 00 00 00 00 00 13 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00
//       Array values:
//            src: 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E
//           dest: 0000000000000011 0000000000000012 0000000000000013 0000000000000014
//
//    Buffer.BlockCopy(src, 5, dest, 7, 6 )
//       Array values as Bytes:
//            src: 02 01 03 01 04 01 05 01 06 01 07 01 08 01 09 01 0A 01 0B 01 0C 01 0D 01 0E 01
//           dest: 11 00 00 00 00 00 00 01 05 01 06 01 07 00 00 00 13 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00
//       Array values:
//            src: 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E
//           dest: 0100000000000011 0000000701060105 0000000000000013 0000000000000014
//
//    Buffer.BlockCopy(src, 16, dest, 22, 5)
//       Array values as Bytes:
//            src: 02 01 03 01 04 01 05 01 06 01 07 01 08 01 09 01 0A 01 0B 01 0C 01 0D 01 0E 01
//           dest: 11 00 00 00 00 00 00 01 05 01 06 01 07 00 00 00 13 00 00 00 00 00 0A 01 0B 01 0C 00 00 00 00 00
//       Array values:
//            src: 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E
//           dest: 0100000000000011 0000000701060105 010A000000000013 00000000000C010B
//
//    Buffer.BlockCopy( src, 4, src, 5, 7)
//       Array values as Bytes:
//            src: 02 01 03 01 04 04 01 05 01 06 01 07 08 01 09 01 0A 01 0B 01 0C 01 0D 01 0E 01
//           dest: 11 00 00 00 00 00 00 01 05 01 06 01 07 00 00 00 13 00 00 00 00 00 0A 01 0B 01 0C 00 00 00 00 00
//       Array values:
//            src: 0102 0103 0404 0501 0601 0701 0108 0109 010A 010B 010C 010D 010E
//           dest: 0100000000000011 0000000701060105 010A000000000013 00000000000C010B
//
//    Buffer.BlockCopy( src, 16, src, 15, 7)
//       Array values as Bytes:
//            src: 02 01 03 01 04 04 01 05 01 06 01 07 08 01 09 0A 01 0B 01 0C 01 0D 0D 01 0E 01
//           dest: 11 00 00 00 00 00 00 01 05 01 06 01 07 00 00 00 13 00 00 00 00 00 0A 01 0B 01 0C 00 00 00 00 00
//       Array values:
//            src: 0102 0103 0404 0501 0601 0701 0108 0A09 0B01 0C01 0D01 010D 010E
//           dest: 0100000000000011 0000000701060105 010A000000000013 00000000000C010B

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Buffer 类
Buffer 成员
System 命名空间


Buffer ..::.ByteLength 方法

Buffer
.
.
::
.
ByteLength 方法
Buffer 类

返回指定数组中的字节数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ByteLength ( _
    array As Array _
) As Integer
public static int ByteLength(
    Array array
)
public:
static int ByteLength(
    Array^ array
)
static member ByteLength :
        array:Array -> int

参数

array
类型： System Array
一个数组。

返回值

类型： System Int32
数组中的字节数。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | array 不是基元。

下面的代码示例演示如何使用 ByteLength 方法返回数组中的字节数。

' Example of the Buffer.ByteLength method.
Imports System
Imports Microsoft.VisualBasic

Module ByteLengthDemo

    Const formatter As String = "{0,10}{1,20}{2,9}{3,12}"

    Sub ArrayInfo( arr As Array, name As String )

        Dim byteLength As Integer = Buffer.ByteLength( arr )

        ' Display the array name, type, Length, and ByteLength.
        Console.WriteLine( formatter, name, arr.GetType, arr.Length, _
            byteLength )
    End Sub

    Sub Main( )
        Dim bytes( )   As Byte    = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }
        Dim bools( )   As Boolean = { True, False, True, False, True }
        Dim chars( )   As Char    = { " "c, "$"c, """"c, "A"c, "{"c }
        Dim shorts( )  As Short   = { 258, 259, 260, 261, 262, 263 }
        Dim singles( ) As Single  = { 1, 678, 2.37E33, .00415, 8.9 }
        Dim doubles( ) As Double  = { 2E-22, .003, 4.4E44, 555E55 }
        Dim longs( )   As Long    = { 1, 10, 100, 1000, 10000, 100000 }

        Console.WriteLine( _
            "This example of the Buffer.ByteLength( Array ) " & _
            vbCrLf & "method generates the following output." & vbCrLf )
        Console.WriteLine( formatter, "Array name", "Array type", _
            "Length", "ByteLength" )
        Console.WriteLine( formatter, "----------", "----------", _
            "------", "----------" )

        ' Display the Length and ByteLength for each array.
        ArrayInfo( bytes, "bytes" )
        ArrayInfo( bools, "bools" )
        ArrayInfo( chars, "chars" )
        ArrayInfo( shorts, "shorts" )
        ArrayInfo( singles, "singles" )
        ArrayInfo( doubles, "doubles" )
        ArrayInfo( longs, "longs" )
    End Sub
End Module

' This example of the Buffer.ByteLength( Array )
' method generates the following output.
'
' Array name          Array type   Length  ByteLength
' ----------          ----------   ------  ----------
'      bytes       System.Byte[]       10          10
'      bools    System.Boolean[]        5           5
'      chars       System.Char[]        5          10
'     shorts      System.Int16[]        6          12
'    singles     System.Single[]        5          20
'    doubles     System.Double[]        4          32
'      longs      System.Int64[]        6          48

// Example of the Buffer.ByteLength method.
using System;

class ByteLengthDemo
{
    const string formatter = "{0,10}{1,20}{2,9}{3,12}";

    public static void ArrayInfo( Array arr, string name )
    {
        int byteLength = Buffer.ByteLength( arr );

        // Display the array name, type, Length, and ByteLength.
        Console.WriteLine( formatter, name, arr.GetType( ),
            arr.Length, byteLength );
    }

    public static void Main( )
    {
        byte[ ]   bytes   = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
        bool[ ]   bools   = { true, false, true, false, true };
        char[ ]   chars   = { ' ', '$', '\"', 'A', '{' };
        short[ ]  shorts  = { 258, 259, 260, 261, 262, 263 };
        float[ ]  singles = { 1, 678, 2.37E33F, .00415F, 8.9F };
        double[ ] doubles = { 2E-22, .003, 4.4E44, 555E55 };
        long[ ]   longs   = { 1, 10, 100, 1000, 10000, 100000 };

        Console.WriteLine(
            "This example of the Buffer.ByteLength( Array ) " +
            "\nmethod generates the following output.\n" );
        Console.WriteLine( formatter, "Array name", "Array type",
            "Length", "ByteLength" );
        Console.WriteLine( formatter, "----------", "----------",
            "------", "----------" );

        // Display the Length and ByteLength for each array.
        ArrayInfo( bytes, "bytes" );
        ArrayInfo( bools, "bools" );
        ArrayInfo( chars, "chars" );
        ArrayInfo( shorts, "shorts" );
        ArrayInfo( singles, "singles" );
        ArrayInfo( doubles, "doubles" );
        ArrayInfo( longs, "longs" );
    }
}

/*
This example of the Buffer.ByteLength( Array )
method generates the following output.

Array name          Array type   Length  ByteLength
----------          ----------   ------  ----------
     bytes       System.Byte[]       10          10
     bools    System.Boolean[]        5           5
     chars       System.Char[]        5          10
    shorts      System.Int16[]        6          12
   singles     System.Single[]        5          20
   doubles     System.Double[]        4          32
     longs      System.Int64[]        6          48
*/

// Example of the Buffer::ByteLength method.
using namespace System;

void ArrayInfo( Array^ arr, String^ name )
{
   int byteLength = Buffer::ByteLength( arr );

   // Display the array name, type, Length, and ByteLength.
   Console::WriteLine( "{0,10}{1,20}{2,9}{3,12}", name, arr->GetType(), arr->Length, byteLength );
}

int main()
{
   array<unsigned char>^bytes = {1,2,3,4,5,6,7,8,9,0};
   array<bool>^bools = {true,false,true,false,true};
   array<Char>^chars = {' ','$','\"','A','{'};
   array<short>^shorts = {258,259,260,261,262,263};
   array<float>^singles = {1,678,2.37E33F,.00415F,8.9F};
   array<double>^doubles = {2E-22,.003,4.4E44,555E55};
   array<long>^longs = {1,10,100,1000,10000,100000};
   Console::WriteLine( "This example of the Buffer::ByteLength( Array* ) "
   "\nmethod generates the following output.\n" );
   Console::WriteLine( "{0,10}{1,20}{2,9}{3,12}", "Array name", "Array type", "Length", "ByteLength" );
   Console::WriteLine( "{0,10}{1,20}{2,9}{3,12}", "----------", "----------", "------", "----------" );

   // Display the Length and ByteLength for each array.
   ArrayInfo( bytes, "bytes" );
   ArrayInfo( bools, "bools" );
   ArrayInfo( chars, "chars" );
   ArrayInfo( shorts, "shorts" );
   ArrayInfo( singles, "singles" );
   ArrayInfo( doubles, "doubles" );
   ArrayInfo( longs, "longs" );
}

/*
This example of the Buffer::ByteLength( Array* )
method generates the following output.

Array name          Array type   Length  ByteLength
----------          ----------   ------  ----------
     bytes       System.Byte[]       10          10
     bools    System.Boolean[]        5           5
     chars       System.Char[]        5          10
    shorts      System.Int16[]        6          12
   singles     System.Single[]        5          20
   doubles     System.Double[]        4          32
     longs      System.Int32[]        6          24
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Buffer 类
Buffer 成员
System 命名空间


Buffer ..::.GetByte 方法

Buffer
.
.
::
.
GetByte 方法
Buffer 类

在指定数组中检索指定位置处的字节。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetByte ( _
    array As Array, _
    index As Integer _
) As Byte
public static byte GetByte(
    Array array,
    int index
)
public:
static unsigned char GetByte(
    Array^ array,
    int index
)
static member GetByte :
        array:Array *
        index:int -> byte

参数

array
类型： System Array
一个数组。
index
类型： System Int32
数组中的位置。

返回值

类型： System Byte
返回数组中的 index 字节。
异常 | 条件
ArgumentException | array 不是基元。
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 为负或大于 array 的长度。

GetByte 方法从数组中获取特定的字节。数组必须是基元数组。 GetByte 方法从数组中获取特定的字节。数组必须是基元数组。

下面的代码示例使用 GetByte 方法显示数组中指定位置处的字节值。

' Example of the Buffer.GetByte method.
Imports System
Imports Microsoft.VisualBasic

Module GetByteDemo

    Const formatter As String = "{0,10}{1,10}{2,9} {3}"

    ' Display the array contents in hexadecimal.
    Sub DisplayArray( arr As Array, name As String )

        ' Get the array element width; format the formatting string.
        Dim loopX     As Integer
        Dim elemWidth As Integer = _
            Buffer.ByteLength( arr ) / arr.Length
        Dim format    As String = _
            String.Format( " {{0:X{0}}}", 2 * elemWidth )

        ' Display the array elements from right to left.
        Console.Write( "{0,7}:", name )
        For loopX = arr.Length - 1 to 0 Step -1
            Console.Write( format, arr( loopX ) )
        Next loopX
        Console.WriteLine( )
    End Sub

    Sub ArrayInfo( arr As Array, name As String, index As Integer )

        Dim value As Byte = Buffer.GetByte( arr, index )

        ' Display the array name, index, and byte to be viewed.
        Console.WriteLine( formatter, name, index, value, _
            String.Format( "&H{0:X2}", value ) )
    End Sub

    Sub Main( )

        ' These are the arrays to be viewed with GetByte.
        Dim longs( ) As Long  = _
            { 333333333333333333, 666666666666666666, 999999999999999999 }
        Dim ints( )  As Integer = _
            { 111111111, 222222222, 333333333, 444444444, 555555555 }

        Console.WriteLine( "This example of the " & _
            "Buffer.GetByte( Array, Integer ) " & vbCrLf & _
            "method generates the following output." & vbCrLf & _
            "Note: The arrays are displayed from right to left." )
        Console.WriteLine( vbCrLf & "  Values of arrays:" & vbCrLf )

        ' Display the values of the arrays.
        DisplayArray( longs, "longs" )
        DisplayArray( ints, "ints" )
        Console.WriteLine( )

        Console.WriteLine( formatter, "Array", "index", _
            "value", "" )
        Console.WriteLine( formatter, "-----", "-----", _
            "-----", "----" )

        ' Display the Length and ByteLength for each array.
        ArrayInfo( ints, "ints", 0 )
        ArrayInfo( ints, "ints", 7 )
        ArrayInfo( ints, "ints", 10 )
        ArrayInfo( ints, "ints", 17 )
        ArrayInfo( longs, "longs", 0 )
        ArrayInfo( longs, "longs", 6 )
        ArrayInfo( longs, "longs", 10 )
        ArrayInfo( longs, "longs", 17 )
        ArrayInfo( longs, "longs", 21 )
    End Sub
End Module

' This example of the Buffer.GetByte( Array, Integer )
' method generates the following output.
' Note: The arrays are displayed from right to left.
'
'   Values of arrays:
'
'   longs: 0DE0B6B3A763FFFF 094079CD1A42AAAA 04A03CE68D215555
'    ints: 211D1AE3 1A7DAF1C 13DE4355 0D3ED78E 069F6BC7
'
'      Array     index    value
'      -----     -----    ----- ----
'       ints         0      199 &HC7
'       ints         7       13 &H0D
'       ints        10      222 &HDE
'       ints        17       26 &H1A
'      longs         0       85 &H55
'      longs         6      160 &HA0
'      longs        10       66 &H42
'      longs        17      255 &HFF
'      longs        21      182 &HB6

// Example of the Buffer.GetByte method.
using System;

class GetByteDemo
{
    const string formatter = "{0,10}{1,10}{2,9} {3}";

    // Display the array contents in hexadecimal.
    public static void DisplayArray( Array arr, string name )
    {
        // Get the array element width; format the formatting string.
        int elemWidth = Buffer.ByteLength( arr ) / arr.Length;
        string format = String.Format( " {{0:X{0}}}", 2 * elemWidth );

        // Display the array elements from right to left.
        Console.Write( "{0,5}:", name );
        for( int loopX = arr.Length - 1; loopX >= 0; loopX-- )
            Console.Write( format, arr.GetValue( loopX ) );
        Console.WriteLine( );
    }

    public static void ArrayInfo( Array arr, string name, int index )
    {
        byte value = Buffer.GetByte( arr, index );

        // Display the array name, index, and byte to be viewed.
        Console.WriteLine( formatter, name, index, value,
            String.Format( "0x{0:X2}", value ) );
    }

    public static void Main( )
    {
        // These are the arrays to be viewed with GetByte.
        long[ ] longs =
            { 333333333333333333, 666666666666666666, 999999999999999999 };
        int[ ]  ints  =
            { 111111111, 222222222, 333333333, 444444444, 555555555 };

        Console.WriteLine( "This example of the " +
            "Buffer.GetByte( Array, int ) \n" +
            "method generates the following output.\n" +
            "Note: The arrays are displayed from right to left.\n" );
        Console.WriteLine( "  Values of arrays:\n" );

        // Display the values of the arrays.
        DisplayArray( longs, "longs" );
        DisplayArray( ints, "ints" );
        Console.WriteLine( );

        Console.WriteLine( formatter, "Array", "index", "value", "" );
        Console.WriteLine( formatter, "-----", "-----", "-----",
            "----" );

        // Display the Length and ByteLength for each array.
        ArrayInfo( ints, "ints", 0 );
        ArrayInfo( ints, "ints", 7 );
        ArrayInfo( ints, "ints", 10 );
        ArrayInfo( ints, "ints", 17 );
        ArrayInfo( longs, "longs", 0 );
        ArrayInfo( longs, "longs", 6 );
        ArrayInfo( longs, "longs", 10 );
        ArrayInfo( longs, "longs", 17 );
        ArrayInfo( longs, "longs", 21 );
    }
}

/*
This example of the Buffer.GetByte( Array, int )
method generates the following output.
Note: The arrays are displayed from right to left.

  Values of arrays:

longs: 0DE0B6B3A763FFFF 094079CD1A42AAAA 04A03CE68D215555
 ints: 211D1AE3 1A7DAF1C 13DE4355 0D3ED78E 069F6BC7

     Array     index    value
     -----     -----    ----- ----
      ints         0      199 0xC7
      ints         7       13 0x0D
      ints        10      222 0xDE
      ints        17       26 0x1A
     longs         0       85 0x55
     longs         6      160 0xA0
     longs        10       66 0x42
     longs        17      255 0xFF
     longs        21      182 0xB6
*/

// Example of the Buffer::GetByte method.
using namespace System;
#define formatter "{0,10}{1,10}{2,9} {3}"

// Display the array contents in hexadecimal.
void DisplayArray( Array^ arr, String^ name )
{

   // Get the array element width; format the formatting string.
   int elemWidth = Buffer::ByteLength( arr ) / arr->Length;
   String^ format = String::Format( " {{0:X{0}}}", 2 * elemWidth );

   // Display the array elements from right to left.
   Console::Write( "{0,5}:", name );
   for ( int loopX = arr->Length - 1; loopX >= 0; loopX-- )
      Console::Write( format, arr->GetValue( loopX ) );
   Console::WriteLine();
}

void ArrayInfo( Array^ arr, String^ name, int index )
{
   unsigned char value = Buffer::GetByte( arr, index );

   // Display the array name, index, and byte to be viewed.
   Console::WriteLine( formatter, name, index, value, String::Format( "0x{0:X2}", value ) );
}

int main()
{

   // These are the arrays to be viewed with GetByte.
   array<__int64>^longs = {333333333333333333,666666666666666666,999999999999999999};
   array<int>^ints = {111111111,222222222,333333333,444444444,555555555};
   Console::WriteLine( "This example of the "
   "Buffer::GetByte( Array*, int ) \n"
   "method generates the following output.\n"
   "Note: The arrays are displayed from right to left.\n" );
   Console::WriteLine( "  Values of arrays:\n" );

   // Display the values of the arrays.
   DisplayArray( longs, "longs" );
   DisplayArray( ints, "ints" );
   Console::WriteLine();
   Console::WriteLine( formatter, "Array", "index", "value", "" );
   Console::WriteLine( formatter, "-----", "-----", "-----", "----" );

   // Display the Length and ByteLength for each array.
   ArrayInfo( ints, "ints", 0 );
   ArrayInfo( ints, "ints", 7 );
   ArrayInfo( ints, "ints", 10 );
   ArrayInfo( ints, "ints", 17 );
   ArrayInfo( longs, "longs", 0 );
   ArrayInfo( longs, "longs", 6 );
   ArrayInfo( longs, "longs", 10 );
   ArrayInfo( longs, "longs", 17 );
   ArrayInfo( longs, "longs", 21 );
}

/*
This example of the Buffer::GetByte( Array*, int )
method generates the following output.
Note: The arrays are displayed from right to left.

  Values of arrays:

longs: 0DE0B6B3A763FFFF 094079CD1A42AAAA 04A03CE68D215555
 ints: 211D1AE3 1A7DAF1C 13DE4355 0D3ED78E 069F6BC7

     Array     index    value
     -----     -----    ----- ----
      ints         0      199 0xC7
      ints         7       13 0x0D
      ints        10      222 0xDE
      ints        17       26 0x1A
     longs         0       85 0x55
     longs         6      160 0xA0
     longs        10       66 0x42
     longs        17      255 0xFF
     longs        21      182 0xB6
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Buffer 类
Buffer 成员
System 命名空间


Buffer ..::.SetByte 方法

Buffer
.
.
::
.
SetByte 方法
Buffer 类

将指定的值分配给指定数组中特定位置处的字节。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SetByte ( _
    array As Array, _
    index As Integer, _
    value As Byte _
)
public static void SetByte(
    Array array,
    int index,
    byte value
)
public:
static void SetByte(
    Array^ array,
    int index,
    unsigned char value
)
static member SetByte :
        array:Array *
        index:int *
        value:byte -> unit

参数

array
类型： System Array
一个数组。
index
类型： System Int32
数组中的位置。
value
类型： System Byte
要分配的值。
异常 | 条件
ArgumentException | array 不是基元。
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 为负或大于 array 的长度。

array 必须是基元数组。

下面的代码示例使用 SetByte 方法将值分配给数组中特定位置处的字节。

' Example of the Buffer.SetByte method.
Imports System
Imports Microsoft.VisualBasic

Module SetByteDemo

    ' Display the array contents in hexadecimal.
    Sub DisplayArray( arr As Array, name As String )

        ' Get the array element width; format the formatting string.
        Dim loopX     As Integer
        Dim elemWidth As Integer = _
            Buffer.ByteLength( arr ) / arr.Length
        Dim format    As String = _
            String.Format( " {{0:X{0}}}", 2 * elemWidth )

        ' Display the array elements from right to left.
        Console.Write( "{0,7}:", name )
        For loopX = arr.Length - 1 to 0 Step -1
            Console.Write( format, arr( loopX ) )
        Next loopX
        Console.WriteLine( )
    End Sub

    Sub Main( )

        ' These are the arrays to be modified with SetByte.
        ' This allocates 10 elements for shorts and 3 elements
        ' for longs in Visual Basic.
        Dim shorts( 9 ) As Short
        Dim longs( 2 )  As Long

        Console.WriteLine( "This example of the " & _
            "Buffer.SetByte( Array, Integer, Byte ) " & vbCrLf & _
            "method generates the following output." & vbCrLf & _
            "Note: The arrays are displayed from right to left." & _
            vbCrLf )
        Console.WriteLine( "  Initial values of arrays:" & vbCrLf )

        ' Display the initial values of the arrays.
        DisplayArray( shorts, "shorts" )
        DisplayArray( longs, "longs" )

        ' Copy two regions of source array to destination array,
        ' and two overlapped copies from source to source.
        Console.WriteLine( vbCrLf & _
            "  Array values after setting byte 3 = 25, " & vbCrLf & _
            "  byte 6 = 64, byte 12 = 121, and byte 17 = 196:" & vbCrLf )

        Buffer.SetByte( shorts, 3, 25 )
        Buffer.SetByte( shorts, 6, 64 )
        Buffer.SetByte( shorts, 12, 121 )
        Buffer.SetByte( shorts, 17, 196 )
        Buffer.SetByte( longs, 3, 25 )
        Buffer.SetByte( longs, 6, 64 )
        Buffer.SetByte( longs, 12, 121 )
        Buffer.SetByte( longs, 17, 196 )

        ' Display the arrays again.
        DisplayArray( shorts, "shorts" )
        DisplayArray( longs, "longs" )
    End Sub
End Module

' This example of the Buffer.SetByte( Array, Integer, Byte )
' method generates the following output.
' Note: The arrays are displayed from right to left.
'
'   Initial values of arrays:
'
'  shorts: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
'   longs: 0000000000000000 0000000000000000 0000000000000000
'
'   Array values after setting byte 3 = 25,
'   byte 6 = 64, byte 12 = 121, and byte 17 = 196:
'
'  shorts: 0000 C400 0000 0079 0000 0000 0040 0000 1900 0000
'   longs: 000000000000C400 0000007900000000 0040000019000000

// Example of the Buffer.SetByte method.
using System;

class SetByteDemo
{
    // Display the array contents in hexadecimal.
    public static void DisplayArray( Array arr, string name )
    {
        // Get the array element width; format the formatting string.
        int elemWidth = Buffer.ByteLength( arr ) / arr.Length;
        string format = String.Format( " {{0:X{0}}}", 2 * elemWidth );

        // Display the array elements from right to left.
        Console.Write( "{0,7}:", name );
        for( int loopX = arr.Length - 1; loopX >= 0; loopX-- )
            Console.Write( format, arr.GetValue( loopX ) );
        Console.WriteLine( );
    }

    public static void Main( )
    {
        // These are the arrays to be modified with SetByte.
        short[ ] shorts = new short[ 10 ];
        long[ ]  longs  = new long[ 3 ];

        Console.WriteLine( "This example of the " +
            "Buffer.SetByte( Array, int, byte ) \n" +
            "method generates the following output.\n" +
            "Note: The arrays are displayed from right to left.\n" );
        Console.WriteLine( "  Initial values of arrays:\n" );

        // Display the initial values of the arrays.
        DisplayArray( shorts, "shorts" );
        DisplayArray( longs, "longs" );

        // Copy two regions of source array to destination array,
        // and two overlapped copies from source to source.
        Console.WriteLine( "\n" +
            "  Array values after setting byte 3 = 25, \n" +
            "  byte 6 = 64, byte 12 = 121, and byte 17 = 196:\n" );

        Buffer.SetByte( shorts, 3, 25 );
        Buffer.SetByte( shorts, 6, 64 );
        Buffer.SetByte( shorts, 12, 121 );
        Buffer.SetByte( shorts, 17, 196 );
        Buffer.SetByte( longs, 3, 25 );
        Buffer.SetByte( longs, 6, 64 );
        Buffer.SetByte( longs, 12, 121 );
        Buffer.SetByte( longs, 17, 196 );

        // Display the arrays again.
        DisplayArray( shorts, "shorts" );
        DisplayArray( longs, "longs" );
    }
}

/*
This example of the Buffer.SetByte( Array, int, byte )
method generates the following output.
Note: The arrays are displayed from right to left.

  Initial values of arrays:

 shorts: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  longs: 0000000000000000 0000000000000000 0000000000000000

  Array values after setting byte 3 = 25,
  byte 6 = 64, byte 12 = 121, and byte 17 = 196:

 shorts: 0000 C400 0000 0079 0000 0000 0040 0000 1900 0000
  longs: 000000000000C400 0000007900000000 0040000019000000
*/

// Example of the Buffer::SetByte method.
using namespace System;

// Display the array contents in hexadecimal.
void DisplayArray( Array^ arr, String^ name )
{

   // Get the array element width; format the formatting string.
   int elemWidth = Buffer::ByteLength( arr ) / arr->Length;
   String^ format = String::Format( " {{0:X{0}}}", 2 * elemWidth );

   // Display the array elements from right to left.
   Console::Write( "{0,7}:", name );
   for ( int loopX = arr->Length - 1; loopX >= 0; loopX-- )
      Console::Write( format, arr->GetValue( loopX ) );
   Console::WriteLine();
}

int main()
{

   // These are the arrays to be modified with SetByte.
   array<Int16>^shorts = gcnew array<Int16>(10);
   array<Int64>^longs = gcnew array<Int64>(3);
   Console::WriteLine( "This example of the "
   "Buffer::SetByte( Array*, int, unsigned char ) \n"
   "method generates the following output.\n"
   "Note: The arrays are displayed from right to left.\n" );
   Console::WriteLine( "  Initial values of arrays:\n" );

   // Display the initial values of the arrays.
   DisplayArray( shorts, "shorts" );
   DisplayArray( longs, "longs" );

   // Copy two regions of source array to destination array,
   // and two overlapped copies from source to source.
   Console::WriteLine( "\n  Array values after setting byte 3 = 25, \n"
   "  byte 6 = 64, byte 12 = 121, and byte 17 = 196:\n" );
   Buffer::SetByte( shorts, 3, 25 );
   Buffer::SetByte( shorts, 6, 64 );
   Buffer::SetByte( shorts, 12, 121 );
   Buffer::SetByte( shorts, 17, 196 );
   Buffer::SetByte( longs, 3, 25 );
   Buffer::SetByte( longs, 6, 64 );
   Buffer::SetByte( longs, 12, 121 );
   Buffer::SetByte( longs, 17, 196 );

   // Display the arrays again.
   DisplayArray( shorts, "shorts" );
   DisplayArray( longs, "longs" );
}

/*
This example of the Buffer::SetByte( Array*, int, unsigned char )
method generates the following output.
Note: The arrays are displayed from right to left.

  Initial values of arrays:

 shorts: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  longs: 0000000000000000 0000000000000000 0000000000000000

  Array values after setting byte 3 = 25,
  byte 6 = 64, byte 12 = 121, and byte 17 = 196:

 shorts: 0000 C400 0000 0079 0000 0000 0040 0000 1900 0000
  longs: 000000000000C400 0000007900000000 0040000019000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Buffer 类
Buffer 成员
System 命名空间


Byte 结构

Byte 结构
成员

表示一个 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Byte _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of Byte),  _
    IEquatable(Of Byte)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Byte : IComparable, IFormattable,
    IConvertible, IComparable<byte>, IEquatable<byte>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Byte : IComparable, IFormattable,
    IConvertible, IComparable<unsigned char>, IEquatable<unsigned char>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Byte =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<byte>
        interface IEquatable<byte>
    end

Byte 值类型表示值介于 0 和 255 之间的无符号整数。

Byte 为比较该类型的实例、将实例值转换为它的字符串表示形式以及将数字的字符串表示形式转换为该类型的实例提供了相应的方法。

有关格式规范代码如何控制值类型的字符串表示形式的信息，请参见 格式化类型。

这种类型是线程安全的；可以同时从该类型的实例读取多个线程。

下面的示例说明将字节数组转换为十六进制值字符串时 Byte 的用法。

Imports System
Imports Microsoft.VisualBasic

Module HexTest
    Dim hexDigits As Char() = {"0"c, "1"c, "2"c, "3"c, "4"c, _
                               "5"c, "6"c, "7"c, "8"c, "9"c, _
                               "A"c, "B"c, "C"c, "D"c, "E"c, "F"c}

    Function ToHexString(ByVal bytes() As Byte) As String
        Dim chars(bytes.Length * 2) As Char
        Dim i As Integer

        For i = 0 To bytes.Length - 1
            Dim b As Integer = bytes(i)
            chars((i * 2)) = hexDigits(b >> 4)
            chars((i * 2) + 1) = hexDigits(b And &HF)
        Next i
        Return New String(chars)
    End Function

    Sub Main()
        Dim b As Byte() = {&H0, &H12, &H34, &H56, &HAA, &H55, &HFF}
        Console.WriteLine(ToHexString(b))
    End Sub
End Module

'
'This code example produces the following results:
'
'00123456AA55FF
'

class HexTest
{
    static char[] hexDigits = {
        '0', '1', '2', '3', '4', '5', '6', '7',
        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

    public static string ToHexString(byte[] bytes) {
        char[] chars = new char[bytes.Length * 2];
        for (int i = 0; i < bytes.Length; i++) {
            int b = bytes[i];
            chars[i * 2] = hexDigits[b >> 4];
            chars[i * 2 + 1] = hexDigits[b & 0xF];
        }
        return new string(chars);
    }

    static void Main() {
        byte[] b = {0x00, 0x12, 0x34, 0x56, 0xAA, 0x55, 0xFF};
        Console.WriteLine(ToHexString(b));
    }
}

/*
This code example produces the following results:

00123456AA55FF

*/

ref class HexTest
{
private:
   static array<Char>^hexDigits = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

public:
   static String^ ToHexString( array<Byte>^bytes )
   {
      array<Char>^chars = gcnew array<Char>(bytes->Length * 2);
      for ( int i = 0; i < bytes->Length; i++ )
      {
         int b = bytes[ i ];
         chars[ i * 2 ] = hexDigits[ b >> 4 ];
         chars[ i * 2 + 1 ] = hexDigits[ b & 0xF ];

      }
      return gcnew String( chars );
   }

};

int main()
{
   array<Byte>^b = {0x00,0x12,0x34,0x56,0xAA,0x55,0xFF};
   Console::WriteLine( HexTest::ToHexString( b ) );
}

/*
This code example produces the following results:

00123456AA55FF

*/

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 成员
System 命名空间
SByte
String
IComparable
IFormattable
IConvertible


Byte 成员

Byte 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Byte 结构

表示一个 8 位无符号整数。

Byte 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Byte 结构
System 命名空间


Byte 字段

Byte 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Byte 结构

Byte 类型公开以下成员。

名称 说明
页首

参考

Byte 结构
System 命名空间


Byte ..::.MaxValue 字段

Byte
.
.
::
.
MaxValue 字段
Byte 结构

表示 Byte 的最大可能值。此字段为常数。 表示 Byte 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As Byte
public const byte MaxValue
public:
literal unsigned char MaxValue
static val mutable MaxValue: byte

此常数的值为 255（十六进制为 0xFF）。

下面的示例演示如何使用 MaxValue 字段在变量输入中筛选位于可能的字节值范围外的值。

      Public Sub MinMaxFields(ByVal numberToSet As Integer)
         If numberToSet <= CInt([Byte].MaxValue) And numberToSet >= CInt([Byte].MinValue) Then
            ' You must explicitly convert an integer to a byte.
            MemberByte = CType(numberToSet, [Byte])

            ' Displays MemberByte using the ToString() method.
            Console.WriteLine("The MemberByte value is {0}.", MemberByte.ToString())
         Else
            Console.WriteLine("The value {0} is outside of the range of possible Byte values.", numberToSet.ToString())
         End If
      End Sub 'MinMaxFields

public void MinMaxFields(int numberToSet)
{
   if(numberToSet <= (int)Byte.MaxValue && numberToSet >= (int)Byte.MinValue)
   {
      // You must explicitly convert an integer to a byte.
      MemberByte = (Byte)numberToSet;

      // Displays MemberByte using the ToString() method.
      Console.WriteLine("The MemberByte value is {0}", MemberByte.ToString());
   }
   else
   {
      Console.WriteLine("The value {0} is outside of the range of possible Byte values", numberToSet.ToString());
   }
}

public:
   void MinMaxFields( Int32 numberToSet )
   {
      if ( numberToSet <= (Int32)Byte::MaxValue && numberToSet >= (Int32)Byte::MinValue )
      {

         // You must explicitly convert an integer to a byte.
         MemberByte = (Byte)numberToSet;

         // Displays MemberByte using the ToString() method.
         Console::WriteLine(  "The MemberByte value is {0}", MemberByte.ToString() );
      }
      else
      {
         Console::WriteLine(  "The value {0} is outside of the range of possible Byte values", numberToSet.ToString() );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间
MinValue


Byte ..::.MinValue 字段

Byte
.
.
::
.
MinValue 字段
Byte 结构

表示 Byte 的最小可能值。此字段为常数。 表示 Byte 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As Byte
public const byte MinValue
public:
literal unsigned char MinValue
static val mutable MinValue: byte

此常数的值是 0。

下面的示例演示如何使用 MinValue 字段在变量输入中筛选位于可能的字节值范围外的值。

      Public Sub MinMaxFields(ByVal numberToSet As Integer)
         If numberToSet <= CInt([Byte].MaxValue) And numberToSet >= CInt([Byte].MinValue) Then
            ' You must explicitly convert an integer to a byte.
            MemberByte = CType(numberToSet, [Byte])

            ' Displays MemberByte using the ToString() method.
            Console.WriteLine("The MemberByte value is {0}.", MemberByte.ToString())
         Else
            Console.WriteLine("The value {0} is outside of the range of possible Byte values.", numberToSet.ToString())
         End If
      End Sub 'MinMaxFields

public void MinMaxFields(int numberToSet)
{
   if(numberToSet <= (int)Byte.MaxValue && numberToSet >= (int)Byte.MinValue)
   {
      // You must explicitly convert an integer to a byte.
      MemberByte = (Byte)numberToSet;

      // Displays MemberByte using the ToString() method.
      Console.WriteLine("The MemberByte value is {0}", MemberByte.ToString());
   }
   else
   {
      Console.WriteLine("The value {0} is outside of the range of possible Byte values", numberToSet.ToString());
   }
}

public:
   void MinMaxFields( Int32 numberToSet )
   {
      if ( numberToSet <= (Int32)Byte::MaxValue && numberToSet >= (Int32)Byte::MinValue )
      {

         // You must explicitly convert an integer to a byte.
         MemberByte = (Byte)numberToSet;

         // Displays MemberByte using the ToString() method.
         Console::WriteLine(  "The MemberByte value is {0}", MemberByte.ToString() );
      }
      else
      {
         Console::WriteLine(  "The value {0} is outside of the range of possible Byte values", numberToSet.ToString() );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间
MaxValue


Byte 方法

Byte 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Byte 结构

Byte 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Byte 结构
System 命名空间


Byte ..::.CompareTo 方法

Byte
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Byte 结构

将此实例与指定的对象或 Byte 进行比较，并返回二者相对值的指示。

名称 说明
页首

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.CompareTo 方法 (Byte)

Byte
.
.
::
.
CompareTo 方法 (Byte)
Byte 结构

将此实例与指定的 8 位无符号整数进行比较并返回对其相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Byte _ ) As Integer
public int CompareTo( byte value )
public: virtual int CompareTo( unsigned char value ) sealed
abstract CompareTo : value:byte -> int override CompareTo : value:byte -> int
参数
value
类型： System Byte
要比较的 8 位无符号整数。
返回值
类型： System Int32
一个有符号的整数，它指示此实例和
value
的相对顺序。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Byte..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为 Int32，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为 Int32，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和 Int32 参数表示形式的值。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的代码示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
CompareTo 重载
System 命名空间
IComparable
Equals


Byte ..::.CompareTo 方法 (Object)

Byte
.
.
::
.
CompareTo 方法 (Object)
Byte 结构

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号的整数，它指示此实例和
value
的相对顺序。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 Byte。

value 必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者是 Byte 的实例；否则将引发异常。

无论 Byte 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现此方法是为了支持 IComparable 接口。

下面的代码示例说明了 CompareTo 方法。

Public Sub Compare(ByVal myByte As [Byte])
   Dim myCompareResult As Integer

   myCompareResult = MemberByte.CompareTo(myByte)

   If myCompareResult > 0 Then
      Console.WriteLine("{0} is less than the MemberByte value {1}", myByte.ToString(), MemberByte.ToString())
   Else
      If myCompareResult < 0 Then
         Console.WriteLine("{0} is greater than the MemberByte value {1}", myByte.ToString(), MemberByte.ToString())
      Else
         Console.WriteLine("{0} is equal to the MemberByte value {1}", myByte.ToString(), MemberByte.ToString())
      End If
   End If
End Sub 'Compare

public void Compare(Byte myByte)
{
   int myCompareResult;

   myCompareResult = MemberByte.CompareTo(myByte);

   if(myCompareResult > 0)
   {
      Console.WriteLine("{0} is less than the MemberByte value {1}", myByte.ToString(), MemberByte.ToString());
   }
   else if(myCompareResult < 0)
   {
      Console.WriteLine("{0} is greater than the MemberByte value {1}", myByte.ToString(), MemberByte.ToString());
   }
   else
   {
      Console.WriteLine("{0} is equal to the MemberByte value {1}", myByte.ToString(), MemberByte.ToString());
   }
}

public:
   void Compare( Byte myByte )
   {
      Int32 myCompareResult;

      myCompareResult = MemberByte.CompareTo( myByte );

      if ( myCompareResult > 0 )
      {
         Console::WriteLine(  "{0} is less than the MemberByte value {1}", myByte.ToString(), MemberByte.ToString() );
      }
      else
      {
         if ( myCompareResult < 0 )
            Console::WriteLine(  "{0} is greater than the MemberByte value {1}", myByte.ToString(), MemberByte.ToString() );
         else
            Console::WriteLine(  "{0} is equal to the MemberByte value {1}", myByte.ToString(), MemberByte.ToString() );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
CompareTo 重载
System 命名空间
ArgumentException
IComparable
Equals


Byte ..::.Equals 方法

Byte
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Byte 结构

返回一个值，该值指示 Byte 的两个实例是否表示同一个值。

名称 说明
页首

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.Equals 方法 (Byte)

Byte
.
.
::
.
Equals 方法 (Byte)
Byte 结构

返回一个值，该值指示此实例和指定的 Byte 对象是否表示相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As Byte _
) As Boolean
public bool Equals(
    byte obj
)
public:
virtual bool Equals(
    unsigned char obj
) sealed
abstract Equals :
        obj:byte -> bool
override Equals :
        obj:byte -> bool

参数

obj
类型： System Byte
要与此实例进行比较的 Byte 对象。

返回值

类型： System Boolean
如果 obj 等于此实例，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

如果 obj 包含的位数少于（窄于）实例类型，则某些编程语言将执行隐式扩大转换，以将参数值转换为具有更多位数的值。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为 Int32，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和参数表示形式。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为 Int32，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和参数表示形式。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的代码示例确定第一个 Byte 值是否等于第二个 Byte 值，以及第一个 Byte 值是否等于第二个 Byte 值的装箱版本。

' This code example demonstrates the System.Byte.Equals(Object) and
' System.Byte.Equals(Byte) methods.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim byteVal1 As Byte = &H7F
        Dim byteVal2 As Byte = 127
        Dim objectVal3 As Object = byteVal2
        '
        Console.WriteLine("byteVal1 = {0}, byteVal2 = {1}, objectVal3 = {2}" & vbCrLf, _
                          byteVal1, byteVal2, objectVal3)
        Console.WriteLine("byteVal1 equals byteVal2?: {0}", byteVal1.Equals(byteVal2))
        Console.WriteLine("byteVal1 equals objectVal3?: {0}", byteVal1.Equals(objectVal3))
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'byteVal1 = 127, byteVal2 = 127, objectVal3 = 127
'
'byteVal1 equals byteVal2?: True
'byteVal1 equals objectVal3?: True
'

// This code example demonstrates the System.Byte.Equals(Object) and
// System.Byte.Equals(Byte) methods.

using System;

class Sample
{
    public static void Main()
    {
    byte   byteVal1 = 0x7f;
    byte   byteVal2 = 127;
    object objectVal3 = byteVal2;
//
    Console.WriteLine("byteVal1 = {0}, byteVal2 = {1}, objectVal3 = {2}\n",
                       byteVal1, byteVal2, objectVal3);
    Console.WriteLine("byteVal1 equals byteVal2?: {0}", byteVal1.Equals(byteVal2));
    Console.WriteLine("byteVal1 equals objectVal3?: {0}", byteVal1.Equals(objectVal3));
    }
}

/*
This code example produces the following results:

byteVal1 = 127, byteVal2 = 127, objectVal3 = 127

byteVal1 equals byteVal2?: True
byteVal1 equals objectVal3?: True

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
Equals 重载
System 命名空间
Equals


Byte ..::.Equals 方法 (Object)

Byte
.
.
::
.
Equals 方法 (Object)
Byte 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的 object，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 obj 是 Byte 的实例并且等于此实例的值，则为 true；否则为 false。

下面的代码示例确定第一个 Byte 值是否等于第二个 Byte 值，以及第一个 Byte 值是否等于第二个 Byte 值的装箱版本。

' This code example demonstrates the System.Byte.Equals(Object) and
' System.Byte.Equals(Byte) methods.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim byteVal1 As Byte = &H7F
        Dim byteVal2 As Byte = 127
        Dim objectVal3 As Object = byteVal2
        '
        Console.WriteLine("byteVal1 = {0}, byteVal2 = {1}, objectVal3 = {2}" & vbCrLf, _
                          byteVal1, byteVal2, objectVal3)
        Console.WriteLine("byteVal1 equals byteVal2?: {0}", byteVal1.Equals(byteVal2))
        Console.WriteLine("byteVal1 equals objectVal3?: {0}", byteVal1.Equals(objectVal3))
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'byteVal1 = 127, byteVal2 = 127, objectVal3 = 127
'
'byteVal1 equals byteVal2?: True
'byteVal1 equals objectVal3?: True
'

// This code example demonstrates the System.Byte.Equals(Object) and
// System.Byte.Equals(Byte) methods.

using System;

class Sample
{
    public static void Main()
    {
    byte   byteVal1 = 0x7f;
    byte   byteVal2 = 127;
    object objectVal3 = byteVal2;
//
    Console.WriteLine("byteVal1 = {0}, byteVal2 = {1}, objectVal3 = {2}\n",
                       byteVal1, byteVal2, objectVal3);
    Console.WriteLine("byteVal1 equals byteVal2?: {0}", byteVal1.Equals(byteVal2));
    Console.WriteLine("byteVal1 equals objectVal3?: {0}", byteVal1.Equals(objectVal3));
    }
}

/*
This code example produces the following results:

byteVal1 = 127, byteVal2 = 127, objectVal3 = 127

byteVal1 equals byteVal2?: True
byteVal1 equals objectVal3?: True

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
Equals 重载
System 命名空间
CompareTo


Byte ..::.GetHashCode 方法

Byte
.
.
::
.
GetHashCode 方法
Byte 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
当前 Byte 的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间
GetHashCode


Byte ..::.GetTypeCode 方法

Byte
.
.
::
.
GetTypeCode 方法
Byte 结构

返回值类型 Byte 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.Byte。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToBoolean 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToByte 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，未更改。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToChar 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
当前实例的值，已转换为 Char。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToDateTime 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToDecimal 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
当前实例的值，已转换为 Decimal。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToDouble 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，已转换为 Double。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToInt16 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，已转换为 Int16。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToInt32 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，已转换为 Int32。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToInt64 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，已转换为 Int64。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToSByte 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，已转换为 SByte。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToSingle 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，已转换为 Single。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToType 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要将此 Byte 值转换为的类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的信息。

返回值

类型： System Object
当前实例的值，已转换为 type。

实现

异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | 不支持所请求的类型转换。

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是改为调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是改为调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是改为调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToUInt16 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，已转换为 UInt16。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToUInt32 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，已转换为 UInt32。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.IConvertible ..::.ToUInt64 方法

Byte
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Byte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，已转换为 UInt64。

实现

此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(Byte) 方法。 此成员是显式接口成员的实现。它只能在 Byte 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(Byte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.Parse 方法

Byte
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Byte 结构

将数字的字符串表示形式转换为它的等效 Byte 表示形式。

名称 说明
页首

参考

Byte 结构
Byte 成员
System 命名空间
TryParse


Byte ..::.Parse 方法 (String)

Byte
.
.
::
.
Parse 方法 (String)
Byte 结构

将数字的字符串表示形式转换为它的等效 Byte 表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As Byte
public static byte Parse(
    string s
)
public:
static unsigned char Parse(
    String^ s
)
static member Parse :
        s:string -> byte

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用 Integer 样式来进行解释。 包含要转换的数字的字符串。该字符串使用 Integer 样式来进行解释。

返回值

类型： System Byte
s 中包含的数字的等效 Byte 值。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 可选的正号或负号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在符号，则此符号必须为正号，否则该方法将引发 OverflowException。）若要显式定义可出现在 s 中的样式元素，请使用 Byte..::.Parse(String, NumberStyles) 或 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在符号，则此符号必须为正号，否则该方法将引发 OverflowException。）若要显式定义可出现在 s 中的样式元素，请使用 Byte..::.Parse(String, NumberStyles) 或 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在符号，则此符号必须为正号，否则该方法将引发 OverflowException。）若要显式定义可出现在 s 中的样式元素，请使用 Byte..::.Parse(String, NumberStyles) 或 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。

下面的示例演示如何使用 Byte..::.Parse(String) 方法将字符串值转换为字节值。然后，将所生成的字节值显示到控制台上。 下面的示例演示如何使用 Byte..::.Parse(String) 方法将字符串值转换为字节值。然后，将所生成的字节值显示到控制台上。

Dim stringToConvert As String = " 162"
Dim byteValue As Byte
Try
   byteValue = Byte.Parse(stringToConvert)
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, byteValue)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert)
Catch e As OverflowException
   Console.WriteLine("'{0}' is greater than {1} or less than {2}.", _
                     stringToConvert, Byte.MaxValue, Byte.MinValue)
End Try
' The example displays the following output to the console:
'       Converted ' 162' to 162.

string stringToConvert = " 162";
byte byteValue;
try
{
   byteValue = Byte.Parse(stringToConvert);
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, byteValue);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert);
}
catch (OverflowException)
{
   Console.WriteLine("'{0}' is greater than {1} or less than {2}.",
                     stringToConvert, Byte.MaxValue, Byte.MinValue);
}
// The example displays the following output to the console:
//       Converted ' 162' to 162.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
Parse 重载
System 命名空间
ToString
MaxValue
MinValue
NumberStyles
NumberFormatInfo

其他资源

分析数值字符串
格式化类型


Byte ..::.Parse 方法 (String, NumberStyles)

Byte
.
.
::
.
Parse 方法 (String, NumberStyles)
Byte 结构

将指定样式的数字的字符串表示形式转换为它的等效 Byte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As Byte
public static byte Parse(
    string s,
    NumberStyles style
)
public:
static unsigned char Parse(
    String^ s,
    NumberStyles style
)
static member Parse :
        s:string *
        style:NumberStyles -> byte

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。 包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。 NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。

返回值

类型： System Byte
s 中包含的数字的等效 Byte 值。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 Byte..::.MinValue 或大于 Byte..::.MaxValue 的数字。 - 或 - s 包含非零的小数位。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 NumberStyles..::.AllowHexSpecifier 和 NumberStyles..::.HexNumber 值的组合。

style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign]digits[.fractional_digits][e[sign]digits][ws]

或者，如果 style 包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 可选的正号。（如果 s 中存在负号，则此方法将引发 OverflowException。）如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则此符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则此符号可以出现在 s 的结尾。 可选的正号。（如果 s 中存在负号，则此方法将引发 OverflowException。）如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则此符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则此符号可以出现在 s 的结尾。
digits | 由从 0 到 9 的数字组成的序列。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional_digits | 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
e | e 或 E 字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 e 或 E 字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则将引发 OverflowException。 . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则将引发 OverflowException。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 正号可以出现在 digits 之前。
NumberStyles AllowTrailingSign | 正号可以出现在 digits 之后。
NumberStyles AllowParentheses | 虽然支持此标志，但在 s 中使用括号会导致 OverflowException。
NumberStyles AllowThousands | 虽然组分隔符可以出现在 s 中，但只可以在它前面附加一个或多个数字 0。
NumberStyles AllowCurrencySymbol | $ 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要使用其他一些区域性的格式设置信息，请调用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要使用其他一些区域性的格式设置信息，请调用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 重载。

下面的示例使用 Byte..::.Parse(String, NumberStyles) 方法来分析 Byte 值的字符串表示形式。此示例的当前区域性为 en-US。 下面的示例使用 Byte..::.Parse(String, NumberStyles) 方法来分析 Byte 值的字符串表示形式。此示例的当前区域性为 en-US。

Dim value As String
Dim style As NumberStyles
Dim number As Byte

' Parse value with no styles allowed.
style = NumberStyles.None
value = " 241 "
Try
   number = Byte.Parse(value, style)
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", value)
End Try

' Parse value with trailing sign.
style = NumberStyles.Integer Or NumberStyles.AllowTrailingSign
value = " 163+"
number = Byte.Parse(value, style)
Console.WriteLine("Converted '{0}' to {1}.", value, number)

' Parse value with leading sign.
value = "   +253  "
number = Byte.Parse(value, style)
Console.WriteLine("Converted '{0}' to {1}.", value, number)
' This example displays the following output to the console:
'       Unable to parse ' 241 '.
'       Converted ' 163+' to 163.
'       Converted '   +253  ' to 253.

string value;
NumberStyles style;
byte number;

// Parse value with no styles allowed.
style = NumberStyles.None;
value = " 241 ";
try
{
   number = Byte.Parse(value, style);
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
}
catch (FormatException) {
   Console.WriteLine("Unable to parse '{0}'.", value); }

// Parse value with trailing sign.
style = NumberStyles.Integer | NumberStyles.AllowTrailingSign;
value = " 163+";
number = Byte.Parse(value, style);
Console.WriteLine("Converted '{0}' to {1}.", value, number);

// Parse value with leading sign.
value = "   +253  ";
number = Byte.Parse(value, style);
Console.WriteLine("Converted '{0}' to {1}.", value, number);
// This example displays the following output to the console:
//       Unable to parse ' 241 '.
//       Converted ' 163+' to 163.
//       Converted '   +253  ' to 253.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
Parse 重载
System 命名空间
ToString
TryParse
MaxValue
MinValue
NumberStyles
NumberFormatInfo
IFormatProvider

其他资源

格式化类型


Byte ..::.Parse 方法 (String, IFormatProvider)

Byte
.
.
::
.
Parse 方法 (String, IFormatProvider)
Byte 结构

将指定的区域性特定格式的数字字符串表示形式转换为它的等效 Byte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As Byte
public static byte Parse(
    string s,
    IFormatProvider provider
)
public:
static unsigned char Parse(
    String^ s,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        provider:IFormatProvider -> byte

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用 Integer 样式来进行解释。 包含要转换的数字的字符串。该字符串使用 Integer 样式来进行解释。
provider
类型： System IFormatProvider
一个 IFormatProvider，它提供有关 s 的区域性特定分析信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 一个 IFormatProvider，它提供有关 s 的区域性特定分析信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

返回值

类型： System Byte
s 中包含的数字的等效 Byte 值。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 可选的正号。
digits | 一系列从 0 到 9 之间的数字。

使用 Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在符号，则此符号必须为正号，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在符号，则此符号必须为正号，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在符号，则此符号必须为正号，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。

s 参数是使用 provider 提供的 NumberFormatInfo 对象中的格式设置信息分析的。provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 s 参数是使用 provider 提供的 NumberFormatInfo 对象中的格式设置信息分析的。provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 s 参数是使用 provider 提供的 NumberFormatInfo 对象中的格式设置信息分析的。provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 s 参数是使用 provider 提供的 NumberFormatInfo 对象中的格式设置信息分析的。provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

下面的示例使用 Parse 方法来分析 Byte 值的字符串表示形式。

Dim stringToConvert As String
Dim byteValue As Byte

stringToConvert = " 214 "
Try
   byteValue = Byte.Parse(stringToConvert, CultureInfo.InvariantCulture)
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, byteValue)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert)
Catch e As OverflowException
   Console.WriteLine("'{0}' is greater than {1} or less than {2}.", _
                     stringToConvert, Byte.MaxValue, Byte.MinValue)
End Try

stringToConvert = " + 214 "
Try
   byteValue = Byte.Parse(stringToConvert, CultureInfo.InvariantCulture)
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, byteValue)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert)
Catch e As OverflowException
   Console.WriteLine("'{0}' is greater than {1} or less than {2}.", _
                     stringToConvert, Byte.MaxValue, Byte.MinValue)
End Try

stringToConvert = " +214 "
Try
   byteValue = Byte.Parse(stringToConvert, CultureInfo.InvariantCulture)
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, byteValue)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert)
Catch e As OverflowException
   Console.WriteLine("'{0}' is greater than {1} or less than {2}.", _
                     stringToConvert, Byte.MaxValue, Byte.MinValue)
End Try
' The example displays the following output to the console:
'       Converted ' 214 ' to 214.
'       Unable to parse ' + 214 '.
'       Converted ' +214 ' to 214.

string stringToConvert;
byte byteValue;

stringToConvert = " 214 ";
try {
   byteValue = Byte.Parse(stringToConvert, CultureInfo.InvariantCulture);
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, byteValue);
}
catch (FormatException) {
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert); }
catch (OverflowException) {
   Console.WriteLine("'{0}' is greater than {1} or less than {2}.",
                     stringToConvert, Byte.MaxValue, Byte.MinValue); }

stringToConvert = " + 214 ";
try {
   byteValue = Byte.Parse(stringToConvert, CultureInfo.InvariantCulture);
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, byteValue);
}
catch (FormatException) {
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert); }
catch (OverflowException) {
   Console.WriteLine("'{0}' is greater than {1} or less than {2}.",
                     stringToConvert, Byte.MaxValue, Byte.MinValue); }

stringToConvert = " +214 ";
try {
   byteValue = Byte.Parse(stringToConvert, CultureInfo.InvariantCulture);
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, byteValue);
}
catch (FormatException) {
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert); }
catch (OverflowException) {
   Console.WriteLine("'{0}' is greater than {1} or less than {2}.",
                     stringToConvert, Byte.MaxValue, Byte.MinValue); }
// The example displays the following output to the console:
//       Converted ' 214 ' to 214.
//       Unable to parse ' + 214 '.
//       Converted ' +214 ' to 214.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Byte 结构
Byte 成员
Parse 重载
System 命名空间
ToString
TryParse
MaxValue
MinValue
NumberStyles
NumberFormatInfo
IFormatProvider

其他资源

格式化类型


Byte ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

Byte
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
Byte 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 Byte 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As Byte
public static byte Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
public:
static unsigned char Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> byte

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。 包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。 NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。
provider
类型： System IFormatProvider
IFormatProvider 对象，提供有关 s 的格式的区域性特定的信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 IFormatProvider 对象，提供有关 s 的格式的区域性特定的信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

返回值

类型： System Byte
s 中包含的数字的等效 Byte 值。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 Byte..::.MinValue 或大于 Byte..::.MaxValue 的数字。 - 或 - s 包含非零的小数位。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 NumberStyles..::.AllowHexSpecifier 和 NumberStyles..::.HexNumber 值的组合。

style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign]digits[.fractional_digits][e[sign]digits][ws]

或者，如果 style 参数包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 可选的正号。（如果 s 中存在负号，则此方法将引发 OverflowException。）如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则此符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则此符号可以出现在 s 的结尾。 可选的正号。（如果 s 中存在负号，则此方法将引发 OverflowException。）如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则此符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则此符号可以出现在 s 的结尾。
digits | 由从 0 到 9 的数字组成的序列。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。
fractional_digits | 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
e | e 或 E 字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可以表示使用指数表示法的数字。 e 或 E 字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可以表示使用指数表示法的数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则将引发 OverflowException。 . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则将引发 OverflowException。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 正号可以出现在 digits 之前。
NumberStyles AllowTrailingSign | 正号可以出现在 digits 之后。
NumberStyles AllowParentheses | 虽然支持此标志，但在 s 中使用括号会导致 OverflowException。
NumberStyles AllowThousands | 虽然组分隔符可以出现在 s 中，但只可以在它前面附加一个或多个数字 0。
NumberStyles AllowCurrencySymbol | $ 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

下面的代码示例使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法的此重载来分析 Byte 值的字符串表示形式。

Dim style As NumberStyles
Dim culture As CultureInfo
Dim value As String
Dim number As Byte

' Parse number with decimals.
' NumberStyles.Float includes NumberStyles.AllowDecimalPoint.
style = NumberStyles.Float
culture = CultureInfo.CreateSpecificCulture("fr-FR")
value = "12,000"

number = Byte.Parse(value, style, culture)
Console.WriteLine("Converted '{0}' to {1}.", value, number)

culture = CultureInfo.CreateSpecificCulture("en-GB")
Try
   number = Byte.Parse(value, style, culture)
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", value)
End Try

value = "12.000"
number = Byte.Parse(value, style, culture)
Console.WriteLine("Converted '{0}' to {1}.", value, number)
' The example displays the following output to the console:
'       Converted '12,000' to 12.
'       Unable to parse '12,000'.
'       Converted '12.000' to 12.

NumberStyles style;
CultureInfo culture;
string value;
byte number;

// Parse number with decimals.
// NumberStyles.Float includes NumberStyles.AllowDecimalPoint.
style = NumberStyles.Float;
culture = CultureInfo.CreateSpecificCulture("fr-FR");
value = "12,000";

number = Byte.Parse(value, style, culture);
Console.WriteLine("Converted '{0}' to {1}.", value, number);

culture = CultureInfo.CreateSpecificCulture("en-GB");
try
{
   number = Byte.Parse(value, style, culture);
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
}
catch (FormatException) {
   Console.WriteLine("Unable to parse '{0}'.", value); }

value = "12.000";
number = Byte.Parse(value, style, culture);
Console.WriteLine("Converted '{0}' to {1}.", value, number);
// The example displays the following output to the console:
//       Converted '12,000' to 12.
//       Unable to parse '12,000'.
//       Converted '12.000' to 12.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
Parse 重载
System 命名空间
ToString
MaxValue
MinValue
NumberStyles
NumberFormatInfo
IFormatProvider

其他资源

格式化类型


Byte ..::.ToString 方法

Byte
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Byte 结构

将当前 Byte 对象的值转换为其等效的字符串表示形式。

名称 说明
页首

参考

Byte 结构
Byte 成员
System 命名空间


Byte ..::.ToString 方法

Byte
.
.
::
.
ToString 方法
Byte 结构

将当前 Byte 对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此对象的值的字符串表示形式，由一系列从 0 到 9 之间的数字组成，不包含前导零。

返回值由通用数值格式说明符（“G”）和线程的当前区域性的 NumberFormatInfo 对象进行格式设置。若要定义 Byte 值的字符串表示形式的格式设置，请调用 ToString 方法。若要同时定义用于创建 Byte 值的字符串表示形式的格式说明符和区域性，请调用 ToString 方法。 返回值由通用数值格式说明符（“G”）和线程的当前区域性的 NumberFormatInfo 对象进行格式设置。若要定义 Byte 值的字符串表示形式的格式设置，请调用 ToString 方法。若要同时定义用于创建 Byte 值的字符串表示形式的格式说明符和区域性，请调用 ToString 方法。 返回值由通用数值格式说明符（“G”）和线程的当前区域性的 NumberFormatInfo 对象进行格式设置。若要定义 Byte 值的字符串表示形式的格式设置，请调用 ToString 方法。若要同时定义用于创建 Byte 值的字符串表示形式的格式说明符和区域性，请调用 ToString 方法。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。

下面的示例使用 ToString()()() 方法将字节值数组显示到控制台上。

Dim bytes() As Byte = {0, 1, 14, 168, 255}
For Each byteValue As Byte In Bytes
   Console.WriteLine(byteValue.ToString())
Next
' The example displays the following output to the console if the current
' culture is en-US:
'       0
'       1
'       14
'       168
'       255

byte[] bytes = {0, 1, 14, 168, 255};
foreach (byte byteValue in bytes)
   Console.WriteLine(byteValue);
// The example displays the following output to the console if the current
// culture is en-US:
//       0
//       1
//       14
//       168
//       255

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
ToString 重载
System 命名空间


Byte ..::.ToString 方法 (IFormatProvider)

Byte
.
.
::
.
ToString 方法 (IFormatProvider)
Byte 结构

使用指定的区域性特定格式设置信息将当前 Byte 对象的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此对象值的字符串表示形式，采用 provider 参数所指定的格式。

实现

返回值由通用数值格式说明符（“G”）进行格式设置。

provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象：

  • 一个 CultureInfo 对象，它表示要使用其格式设置规则的区域性。

  • 一个 NumberFormatInfo 对象，它包含此值的特定数值格式设置信息。

  • 一个实现 IFormatProvider 的自定义对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者无法从 provider 中获得 NumberFormatInfo 对象，则使用线程的当前区域性的 NumberFormatInfo 对象对返回值进行格式设置。有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。 如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者无法从 provider 中获得 NumberFormatInfo 对象，则使用线程的当前区域性的 NumberFormatInfo 对象对返回值进行格式设置。有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例通过将 ToString(IFormatProvider) 方法与不同的格式提供程序一起调用，来循环访问字节值数组并将每个字节值显示到控制台上。

Dim bytes() As Byte = {0, 1, 14, 168, 255}
Dim providers() As CultureInfo = {New CultureInfo("en-us"), _
                                  New CultureInfo("fr-fr"), _
                                  New CultureInfo("de-de"), _
                                  New CultureInfo("es-es")}
For Each byteValue As Byte In bytes
   For Each provider As CultureInfo In providers
      Console.Write("{0,3} ({1})      ", byteValue.ToString(provider), provider.Name)
   Next
   Console.WriteLine()
Next
' The example displays the following output to the console:
'      0 (en-US)        0 (fr-FR)        0 (de-DE)        0 (es-ES)
'      1 (en-US)        1 (fr-FR)        1 (de-DE)        1 (es-ES)
'     14 (en-US)       14 (fr-FR)       14 (de-DE)       14 (es-ES)
'    168 (en-US)      168 (fr-FR)      168 (de-DE)      168 (es-ES)
'    255 (en-US)      255 (fr-FR)      255 (de-DE)      255 (es-ES)

byte[] bytes = {0, 1, 14, 168, 255};
CultureInfo[] providers = {new CultureInfo("en-us"),
                           new CultureInfo("fr-fr"),
                           new CultureInfo("de-de"),
                           new CultureInfo("es-es")};
foreach (byte byteValue in bytes)
{
   foreach (CultureInfo provider in providers)
      Console.Write("{0,3} ({1})      ",
                    byteValue.ToString(provider), provider.Name);

   Console.WriteLine();
}
// The example displays the following output to the console:
//      0 (en-US)        0 (fr-FR)        0 (de-DE)        0 (es-ES)
//      1 (en-US)        1 (fr-FR)        1 (de-DE)        1 (es-ES)
//     14 (en-US)       14 (fr-FR)       14 (de-DE)       14 (es-ES)
//    168 (en-US)      168 (fr-FR)      168 (de-DE)      168 (es-ES)
//    255 (en-US)      255 (fr-FR)      255 (de-DE)      255 (es-ES)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
ToString 重载
System 命名空间
Parse
String
NumberFormatInfo

其他资源

格式化类型


Byte ..::.ToString 方法 (String)

Byte
.
.
::
.
ToString 方法 (String)
Byte 结构

使用指定的格式将当前 Byte 对象的值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
一个数值格式字符串。

返回值

类型： System String
按照 format 参数指定的方式进行格式设置的当前 Byte 对象的字符串表示形式。
异常 | 条件
FormatException | format 包括不受支持的说明符。备注部分中列出了支持的格式说明符。 format 包括不受支持的说明符。备注部分中列出了支持的格式说明符。

format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串 ("")，则返回值由通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串 ("")，则返回值由通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串 ("")，则返回值由通用数值格式说明符（“G”）进行格式设置。

此函数的返回值是使用线程的当前区域性的 NumberFormatInfo 对象进行格式设置的。有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。若要为不同于当前区域性的区域性提供格式设置信息，请调用 Byte..::.ToString(String, IFormatProvider) 方法。 此函数的返回值是使用线程的当前区域性的 NumberFormatInfo 对象进行格式设置的。有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。若要为不同于当前区域性的区域性提供格式设置信息，请调用 Byte..::.ToString(String, IFormatProvider) 方法。 此函数的返回值是使用线程的当前区域性的 NumberFormatInfo 对象进行格式设置的。有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。若要为不同于当前区域性的区域性提供格式设置信息，请调用 Byte..::.ToString(String, IFormatProvider) 方法。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用每个支持的标准格式字符串和自定义的格式字符串来初始化 Byte 值并将其显示到控制台上。使用 en-US 作为当前区域性来运行此示例。 下面的示例使用每个支持的标准格式字符串和自定义的格式字符串来初始化 Byte 值并将其显示到控制台上。使用 en-US 作为当前区域性来运行此示例。

Dim formats() As String = {"C3", "D4", "e1", "E2", "F1", "G", _
                           "N1", "P0", "X4", "0000.0000"}
Dim number As Byte = 240
For Each format As String In formats
   Console.WriteLine("'{0}' format specifier: {1}", _
                     format, number.ToString(format))
Next
' The example displays the following output to the console if the
' current culture is en-us:
'       'C3' format specifier: $240.000
'       'D4' format specifier: 0240
'       'e1' format specifier: 2.4e+002
'       'E2' format specifier: 2.40E+002
'       'F1' format specifier: 240.0
'       'G' format specifier: 240
'       'N1' format specifier: 240.0
'       'P0' format specifier: 24,000 %
'       'X4' format specifier: 00F0
'       '0000.0000' format specifier: 0240.0000

string[] formats = {"C3", "D4", "e1", "E2", "F1", "G", "N1",
                    "P0", "X4", "0000.0000"};
byte number = 240;
foreach (string format in formats)
   Console.WriteLine("'{0}' format specifier: {1}",
                     format, number.ToString(format));

// The example displays the following output to the console if the
// current culture is en-us:
//       'C3' format specifier: $240.000
//       'D4' format specifier: 0240
//       'e1' format specifier: 2.4e+002
//       'E2' format specifier: 2.40E+002
//       'F1' format specifier: 240.0
//       'G' format specifier: 240
//       'N1' format specifier: 240.0
//       'P0' format specifier: 24,000 %
//       'X4' format specifier: 00F0
//       '0000.0000' format specifier: 0240.0000

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
ToString 重载
System 命名空间

其他资源

如何：用前导零填充数字


Byte ..::.ToString 方法 (String, IFormatProvider)

Byte
.
.
::
.
ToString 方法 (String, IFormatProvider)
Byte 结构

使用指定的格式和区域性特定的格式设置信息将当前 Byte 对象的值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
标准或自定义的数值格式字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
按照 format 和 provider 参数指定的方式进行格式设置的当前 Byte 对象的字符串表示形式。

实现

异常 | 条件
FormatException | format 包括不受支持的说明符。备注部分中列出了支持的格式说明符。 format 包括不受支持的说明符。备注部分中列出了支持的格式说明符。

format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或为空字符串 ("")，则此方法的返回值由通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或为空字符串 ("")，则此方法的返回值由通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或为空字符串 ("")，则此方法的返回值由通用数值格式说明符（“G”）进行格式设置。

provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象：

  • 一个 CultureInfo 对象，它表示要使用其格式设置规则的区域性。

  • 一个 NumberFormatInfo 对象，它包含此值的特定数值格式设置信息。

  • 一个实现 IFormatProvider 的自定义对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者无法从 provider 中获得 NumberFormatInfo 对象，则使用线程的当前区域性的 NumberFormatInfo 对象对返回值进行格式设置。有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。 如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者无法从 provider 中获得 NumberFormatInfo 对象，则使用线程的当前区域性的 NumberFormatInfo 对象对返回值进行格式设置。有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用标准的“N”格式字符串和四个不同的 CultureInfo 对象将字节值的字符串表示形式显示到控制台上。

Dim byteValue As Byte = 250
Dim providers() As CultureInfo = {New CultureInfo("en-us"), _
                                  New CultureInfo("fr-fr"), _
                                  New CultureInfo("es-es"), _
                                  New CultureInfo("de-de")}
For Each provider As CultureInfo In providers
   Console.WriteLine("{0} ({1})", _
                     byteValue.ToString("N2", provider), provider.Name)
Next
' The example displays the following output to the console:
'       250.00 (en-US)
'       250,00 (fr-FR)
'       250,00 (es-ES)
'       250,00 (de-DE)

byte byteValue = 250;
CultureInfo[] providers = {new CultureInfo("en-us"),
                           new CultureInfo("fr-fr"),
                           new CultureInfo("es-es"),
                           new CultureInfo("de-de")};

foreach (CultureInfo provider in providers)
   Console.WriteLine("{0} ({1})",
                     byteValue.ToString("N2", provider), provider.Name);
// The example displays the following output to the console:
//       250.00 (en-US)
//       250,00 (fr-FR)
//       250,00 (es-ES)
//       250,00 (de-DE)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Byte 结构
Byte 成员
ToString 重载
System 命名空间
Parse
String
NumberFormatInfo
IFormattable
IFormatProvider

其他资源

格式化类型
如何：用前导零填充数字


Byte ..::.TryParse 方法

Byte
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Byte 结构

尝试将数字的字符串表示形式转换为它的等效 Byte，并返回一个指示转换是否成功的值。

名称 说明
页首

参考

Byte 结构
Byte 成员
System 命名空间
Parse


Byte ..::.TryParse 方法 (String, Byte%)

Byte
.
.
::
.
TryParse 方法 (String, Byte%)
Byte 结构

尝试将数字的字符串表示形式转换为它的等效 Byte，并返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As Byte _
) As Boolean
public static bool TryParse(
    string s,
    out byte result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] unsigned char% result
)
static member TryParse :
        s:string *
        result:byte byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用 Integer 样式来进行解释。 包含要转换的数字的字符串。该字符串使用 Integer 样式来进行解释。
result
类型： System Byte %
当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 Byte 值；如果转换失败，则包含零。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 Byte 值；如果转换失败，则包含零。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。

如果 s 参数未采用正确的格式或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者它所表示的数字小于 MinValue 或大于 MaxValue，则转换会失败并且方法会返回 false。

Byte..::.TryParse(String, Byte%) 方法类似于 Byte..::.Parse(String) 方法，不同之处在于 TryParse(String, Byte%) 在转换失败时不引发异常。

s 参数应该是以下形式的数字字符串表示形式：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 由当前区域性的 NumberFormatInfo..::.PositiveSign 属性指定的可选正号。
digits | 一系列从 0 到 9 之间的十进制数字。

使用 Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在符号，则此符号必须为正号，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在符号，则此符号必须为正号，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在符号，则此符号必须为正号，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Byte..::.Parse(String, NumberStyles, IFormatProvider) 方法。

s 参数是使用当前区域性的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 NumberFormatInfo..::.CurrentInfo。 s 参数是使用当前区域性的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 NumberFormatInfo..::.CurrentInfo。

此 Byte..::.TryParse(String, Byte%) 方法重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 Byte..::.TryParse(String, NumberStyles, IFormatProvider, Byte%) 重载。 此 Byte..::.TryParse(String, Byte%) 方法重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 Byte..::.TryParse(String, NumberStyles, IFormatProvider, Byte%) 重载。

下面的示例将 TryParse(String, Byte%) 方法与一些不同的字符串值一起调用。

Module ByteConversion
   Public Sub Main()
      Dim byteString As String = Nothing
      CallTryParse(byteString)

      byteString = String.Empty
      CallTryParse(byteString)

      byteString = "1024"
      CallTryParse(byteString)

      byteString = "100.1"
      CallTryParse(byteString)

      byteString = "100"
      CallTryParse(byteString)

      byteString = "+100"
      CallTryParse(byteString)

      byteString = "-100"
      CallTryParse(byteString)

      byteString = "000000000000000100"
      CallTryParse(byteString)

      byteString = "00,100"
      CallTryParse(byteString)

      byteString = "   20   "
      CallTryParse(byteString)

      byteString = "FF"
      CallTryParse(byteString)

      byteString = "0x1F"
      CallTryParse(byteString)
   End Sub

   Private Sub CallTryParse(stringToConvert As String)
      Dim byteValue As Byte
      Dim result As Boolean = Byte.TryParse(stringToConvert, byteValue)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}", _
                        stringToConvert, byteValue)
      Else
         If stringToConvert Is Nothing Then stringToConvert = ""
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           stringToConvert.ToString())
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Attempted conversion of '' failed.
'       Attempted conversion of '' failed.
'       Attempted conversion of '1024' failed.
'       Attempted conversion of '100.1' failed.
'       Converted '100' to 100
'       Converted '+100' to 100
'       Attempted conversion of '-100' failed.
'       Converted '000000000000000100' to 100
'       Attempted conversion of '00,100' failed.
'       Converted '   20   ' to 20
'       Attempted conversion of 'FF' failed.
'       Attempted conversion of '0x1F' failed.

using System;

public class ByteConversion
{
   public static void Main()
   {
      string byteString = null;
      CallTryParse(byteString);

      byteString = String.Empty;
      CallTryParse(byteString);

      byteString = "1024";
      CallTryParse(byteString);

      byteString = "100.1";
      CallTryParse(byteString);

      byteString = "100";
      CallTryParse(byteString);

      byteString = "+100";
      CallTryParse(byteString);

      byteString = "-100";
      CallTryParse(byteString);

      byteString = "000000000000000100";
      CallTryParse(byteString);

      byteString = "00,100";
      CallTryParse(byteString);

      byteString = "   20   ";
      CallTryParse(byteString);

      byteString = "FF";
      CallTryParse(byteString);

      byteString = "0x1F";
      CallTryParse(byteString);
   }

   private static void CallTryParse(string stringToConvert)
   {
      byte byteValue;
      bool result = Byte.TryParse(stringToConvert, out byteValue);
      if (result)
      {
         Console.WriteLine("Converted '{0}' to {1}",
                        stringToConvert, byteValue);
      }
      else
      {
         if (stringToConvert == null) stringToConvert = "";
         Console.WriteLine("Attempted conversion of '{0}' failed.",
                           stringToConvert.ToString());
      }
   }
}
// The example displays the following output to the console:
//       Attempted conversion of '' failed.
//       Attempted conversion of '' failed.
//       Attempted conversion of '1024' failed.
//       Attempted conversion of '100.1' failed.
//       Converted '100' to 100
//       Converted '+100' to 100
//       Attempted conversion of '-100' failed.
//       Converted '000000000000000100' to 100
//       Attempted conversion of '00,100' failed.
//       Converted '   20   ' to 20
//       Attempted conversion of 'FF' failed.
//       Attempted conversion of '0x1F' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Byte 结构
Byte 成员
TryParse 重载
System 命名空间


Byte ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, Byte%)

Byte
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, Byte%)
Byte 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 Byte 值。一个指示转换是否成功的返回值。 将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 Byte 值。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As Byte _
) As Boolean
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out byte result
)
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] unsigned char% result
)
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:byte byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。 包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。 NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。
provider
类型： System IFormatProvider
一个 IFormatProvider 对象，提供有关 s 的区域性特定的格式设置信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 一个 IFormatProvider 对象，提供有关 s 的区域性特定的格式设置信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。
result
类型： System Byte %
当此方法返回时，如果转换成功，则包含与 s 中包含的数字等效的 8 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的数字等效的 8 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的数字等效的 8 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 NumberStyles..::.AllowHexSpecifier 和 NumberStyles..::.HexNumber 值的组合。

TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。

s 参数是使用 provider 参数提供的 NumberFormatInfo 对象中的格式设置信息分析的。

style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign]digits[.fractional_digits][e[sign]digits][ws]

或者，如果 style 参数包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 可选的正号。（如果负号存在于 s 中，则分析操作将失败。）如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则此符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则此符号可以出现在 s 的结尾。 可选的正号。（如果负号存在于 s 中，则分析操作将失败。）如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则此符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则此符号可以出现在 s 的结尾。
digits | 由从 0 到 9 的数字组成的序列。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。
fractional_digits | 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
e | e 或 E 字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 e 或 E 字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。 . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。如果 s 用指数表示法表示一个数字，则它必须表示一个 Byte 数据类型范围内的不带非零小数部分的整数。 s 参数也可以使用指数表示法。如果 s 用指数表示法表示一个数字，则它必须表示一个 Byte 数据类型范围内的不带非零小数部分的整数。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 正号可以出现在 digits 之前。
NumberStyles AllowTrailingSign | 正号可以出现在 digits 之后。
NumberStyles AllowParentheses | 虽然支持此标志，但如果 s 中存在括号，则该方法将返回 false。
NumberStyles AllowThousands | 虽然组分隔符可以出现在 s 中，但只可以在它前面附加一个或多个数字 0。
NumberStyles AllowCurrencySymbol | $ 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。 provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。

下面的示例将 TryParse(String, NumberStyles, IFormatProvider, Byte%) 方法与一些不同的字符串值一起调用。

Imports System.Globalization

Module ByteConversion2
   Public Sub Main()
      Dim byteString As String
      Dim styles As NumberStyles

      byteString = "1024"
      styles = NumberStyles.Integer
      CallTryParse(byteString, styles)

      byteString = "100.1"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(byteString, styles)

      byteString = "100.0"
      CallTryParse(byteString, styles)

      byteString = "+100"
      styles = NumberStyles.Integer Or NumberStyles.AllowLeadingSign _
               Or NumberStyles.AllowTrailingSign
      CallTryParse(byteString, styles)

      byteString = "-100"
      CallTryParse(byteString, styles)

      byteString = "000000000000000100"
      CallTryParse(byteString, styles)

      byteString = "00,100"
      styles = NumberStyles.Integer Or NumberStyles.AllowThousands
      CallTryParse(byteString, styles)

      byteString = "2E+3   "
      styles = NumberStyles.Integer Or NumberStyles.AllowExponent
      CallTryParse(byteString, styles)

      byteString = "FF"
      styles = NumberStyles.HexNumber
      CallTryParse(byteString, styles)

      byteString = "0x1F"
      CallTryParse(byteString, styles)
   End Sub

   Private Sub CallTryParse(stringToConvert As String, styles As NumberStyles)
      Dim byteValue As Byte
      Dim result As Boolean = Byte.TryParse(stringToConvert, styles, Nothing, _
                                            byteValue)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}", _
                        stringToConvert, byteValue)
      Else
         If stringToConvert Is Nothing Then stringToConvert = ""
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           stringToConvert.ToString())
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Attempted conversion of '1024' failed.
'       Attempted conversion of '100.1' failed.
'       Converted '100.0' to 100
'       Converted '+100' to 100
'       Attempted conversion of '-100' failed.
'       Converted '000000000000000100' to 100
'       Converted '00,100' to 100
'       Attempted conversion of '2E+3   ' failed.
'       Converted 'FF' to 255
'       Attempted conversion of '0x1F' failed.

using System;
using System.Globalization;

public class ByteConversion2
{
   public static void Main()
   {
      string byteString;
      NumberStyles styles;

      byteString = "1024";
      styles = NumberStyles.Integer;
      CallTryParse(byteString, styles);

      byteString = "100.1";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(byteString, styles);

      byteString = "100.0";
      CallTryParse(byteString, styles);

      byteString = "+100";
      styles = NumberStyles.Integer | NumberStyles.AllowLeadingSign
               | NumberStyles.AllowTrailingSign;
      CallTryParse(byteString, styles);

      byteString = "-100";
      CallTryParse(byteString, styles);

      byteString = "000000000000000100";
      CallTryParse(byteString, styles);

      byteString = "00,100";
      styles = NumberStyles.Integer | NumberStyles.AllowThousands;
      CallTryParse(byteString, styles);

      byteString = "2E+3   ";
      styles = NumberStyles.Integer | NumberStyles.AllowExponent;
      CallTryParse(byteString, styles);

      byteString = "FF";
      styles = NumberStyles.HexNumber;
      CallTryParse(byteString, styles);

      byteString = "0x1F";
      CallTryParse(byteString, styles);
   }

   private static void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      Byte byteValue;
      bool result = Byte.TryParse(stringToConvert, styles,
                                  null as IFormatProvider, out byteValue);
      if (result)
         Console.WriteLine("Converted '{0}' to {1}",
                        stringToConvert, byteValue);
      else
         Console.WriteLine("Attempted conversion of '{0}' failed.",
                           stringToConvert.ToString());
   }
}
// The example displays the following output to the console:
//       Attempted conversion of '1024' failed.
//       Attempted conversion of '100.1' failed.
//       Converted '100.0' to 100
//       Converted '+100' to 100
//       Attempted conversion of '-100' failed.
//       Converted '000000000000000100' to 100
//       Converted '00,100' to 100
//       Attempted conversion of '2E+3   ' failed.
//       Converted 'FF' to 255
//       Attempted conversion of '0x1F' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Byte 结构
Byte 成员
TryParse 重载
System 命名空间
ToString
MaxValue
MinValue
NumberStyles
NumberFormatInfo
IFormatProvider

其他资源

分析数值字符串


CannotUnloadAppDomainException 类

CannotUnloadAppDomainException 类
成员

卸载应用程序域的尝试失败时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class CannotUnloadAppDomainException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class CannotUnloadAppDomainException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class CannotUnloadAppDomainException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type CannotUnloadAppDomainException =
    class
        inherit SystemException
    end

尝试卸载下列对象时引发 CannotUnloadAppDomainException：

  • 默认应用程序域，该域在应用程序的生存期内必须保持加载状态。

  • 包含无法立即停止执行的运行线程的应用程序域。

  • 已经被卸载的应用程序域。

CannotUnloadAppDomainException 使用值为 0x80131015 的 HRESULT COR_E_CANNOTUNLOADAPPDOMAIN。

有关 CannotUnloadAppDomainException 实例的初始属性值列表，请参见 CannotUnloadAppDomainException 构造函数。

System System..::.CannotUnloadAppDomainExceptionCannotUnloadAppDomainException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CannotUnloadAppDomainException 成员
System 命名空间
Object
Exception
AppDomain
Thread

其他资源

处理和引发异常


CannotUnloadAppDomainException 成员

CannotUnloadAppDomainException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CannotUnloadAppDomainException 类

卸载应用程序域的尝试失败时引发的异常。

CannotUnloadAppDomainException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

CannotUnloadAppDomainException 类
System 命名空间


CannotUnloadAppDomainException 构造函数

CannotUnloadAppDomainException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CannotUnloadAppDomainException 类

初始化 CannotUnloadAppDomainException 类的新实例。

名称 说明
页首

参考

CannotUnloadAppDomainException 类
CannotUnloadAppDomainException 成员
System 命名空间


CannotUnloadAppDomainException 构造函数

CannotUnloadAppDomainException 构造函数
CannotUnloadAppDomainException 类

初始化 CannotUnloadAppDomainException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public CannotUnloadAppDomainException()
public:
CannotUnloadAppDomainException()
new : unit -> CannotUnloadAppDomainException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“尝试卸载 Appdomain 时失败。”。此消息将考虑当前系统区域性。

下表显示 CannotUnloadAppDomainException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CannotUnloadAppDomainException 类
CannotUnloadAppDomainException 成员
CannotUnloadAppDomainException 重载
System 命名空间


CannotUnloadAppDomainException 构造函数 (String)

CannotUnloadAppDomainException 构造函数 (String)
CannotUnloadAppDomainException 类

使用指定错误消息初始化 CannotUnloadAppDomainException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public CannotUnloadAppDomainException(
    string message
)
public:
CannotUnloadAppDomainException(
    String^ message
)
new :
        message:string -> CannotUnloadAppDomainException

参数

message
类型： System String
描述该错误的 String。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 CannotUnloadAppDomainException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CannotUnloadAppDomainException 类
CannotUnloadAppDomainException 成员
CannotUnloadAppDomainException 重载
System 命名空间


CannotUnloadAppDomainException 构造函数 (SerializationInfo, StreamingContext)

CannotUnloadAppDomainException 构造函数 (SerializationInfo, StreamingContext)
CannotUnloadAppDomainException 类

用序列化数据初始化 CannotUnloadAppDomainException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected CannotUnloadAppDomainException(
    SerializationInfo info,
    StreamingContext context
)
protected:
CannotUnloadAppDomainException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> CannotUnloadAppDomainException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

CannotUnloadAppDomainException 类
CannotUnloadAppDomainException 成员
CannotUnloadAppDomainException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


CannotUnloadAppDomainException 构造函数 (String, Exception)

CannotUnloadAppDomainException 构造函数 (String, Exception)
CannotUnloadAppDomainException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 CannotUnloadAppDomainException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public CannotUnloadAppDomainException(
    string message,
    Exception innerException
)
public:
CannotUnloadAppDomainException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> CannotUnloadAppDomainException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 CannotUnloadAppDomainException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CannotUnloadAppDomainException 类
CannotUnloadAppDomainException 成员
CannotUnloadAppDomainException 重载
System 命名空间
Exception

其他资源

处理和引发异常


CannotUnloadAppDomainException 方法

CannotUnloadAppDomainException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CannotUnloadAppDomainException 类

CannotUnloadAppDomainException 类型公开以下成员。

名称 说明
页首

参考

CannotUnloadAppDomainException 类
System 命名空间


CannotUnloadAppDomainException 属性

CannotUnloadAppDomainException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CannotUnloadAppDomainException 类

CannotUnloadAppDomainException 类型公开以下成员。

名称 说明
页首

参考

CannotUnloadAppDomainException 类
System 命名空间


CannotUnloadAppDomainException 事件

CannotUnloadAppDomainException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CannotUnloadAppDomainException 类

CannotUnloadAppDomainException 类型公开以下成员。

名称 说明
页首

参考

CannotUnloadAppDomainException 类
System 命名空间


Char 结构

Char 结构
成员

表示一个 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Char _
    Implements IComparable, IConvertible, IComparable(Of Char),  _
    IEquatable(Of Char)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Char : IComparable, IConvertible,
    IComparable<char>, IEquatable<char>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Char : IComparable, IConvertible,
    IComparable<wchar_t>, IEquatable<wchar_t>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Char =
    struct
        interface IComparable
        interface IConvertible
        interface IComparable<char>
        interface IEquatable<char>
    end

.NET Framework 使用 Char 结构表示 Unicode 字符。Unicode 标准使用称为码位的唯一的 21 位标量数字标识每个 Unicode 字符，并定义了 UTF-16 编码格式，这一格式指定如何将码位编码为一个或多个 16 位值的序列。每个 16 位值的范围为十六进制的 0x0000 到 0xFFFF，并存储在 Char 结构中。Char 对象的值是其 16 位数字（序号）值。 .NET Framework 使用 Char 结构表示 Unicode 字符。Unicode 标准使用称为码位的唯一的 21 位标量数字标识每个 Unicode 字符，并定义了 UTF-16 编码格式，这一格式指定如何将码位编码为一个或多个 16 位值的序列。每个 16 位值的范围为十六进制的 0x0000 到 0xFFFF，并存储在 Char 结构中。Char 对象的值是其 16 位数字（序号）值。 .NET Framework 使用 Char 结构表示 Unicode 字符。Unicode 标准使用称为码位的唯一的 21 位标量数字标识每个 Unicode 字符，并定义了 UTF-16 编码格式，这一格式指定如何将码位编码为一个或多个 16 位值的序列。每个 16 位值的范围为十六进制的 0x0000 到 0xFFFF，并存储在 Char 结构中。Char 对象的值是其 16 位数字（序号）值。 .NET Framework 使用 Char 结构表示 Unicode 字符。Unicode 标准使用称为码位的唯一的 21 位标量数字标识每个 Unicode 字符，并定义了 UTF-16 编码格式，这一格式指定如何将码位编码为一个或多个 16 位值的序列。每个 16 位值的范围为十六进制的 0x0000 到 0xFFFF，并存储在 Char 结构中。Char 对象的值是其 16 位数字（序号）值。

Char 对象和字符串

String 对象是 Char 结构的序列集合，用于表示文本字符串。多数 Unicode 字符可由一个 Char 对象表示，但编码为基字符、代理项对和/或组合字符序列的字符由多个 Char 对象表示。因此，String 对象中的 Char 结构不一定与单个 Unicode 字符等效。 String 对象是 Char 结构的序列集合，用于表示文本字符串。多数 Unicode 字符可由一个 Char 对象表示，但编码为基字符、代理项对和/或组合字符序列的字符由多个 Char 对象表示。因此，String 对象中的 Char 结构不一定与单个 Unicode 字符等效。 String 对象是 Char 结构的序列集合，用于表示文本字符串。多数 Unicode 字符可由一个 Char 对象表示，但编码为基字符、代理项对和/或组合字符序列的字符由多个 Char 对象表示。因此，String 对象中的 Char 结构不一定与单个 Unicode 字符等效。

有关 Unicode 标准的更多信息，请参见 Unicode 主页。

功能

Char 结构提供了执行以下操作的方法：比较 Char 对象；将当前 Char 对象的值转换为其他类型的对象；确定 Char 对象的 Unicode 类别。

  • 使用 CompareTo 和 Equals 方法可比较 Char 对象。

  • 使用 ConvertFromUtf32 方法可将码位转换为字符串。使用 ConvertToUtf32 方法可将 Char 对象或 Char 对象的代理项对转换为码位。 使用 ConvertFromUtf32 方法可将码位转换为字符串。使用 ConvertToUtf32 方法可将 Char 对象或 Char 对象的代理项对转换为码位。

  • 使用 GetUnicodeCategory 方法可获取字符的 Unicode 类别。使用 IsControl、IsDigit、IsHighSurrogate、IsLetter、IsLetterOrDigit、IsLower、IsLowSurrogate、IsNumber、IsPunctuation、IsSeparator、IsSurrogate、IsSurrogatePair、IsSymbol、IsUpper 和 IsWhiteSpace 方法可确定字符是否属于特定的 Unicode 类别，如数字、字母、标点、控制字符等。 使用 GetUnicodeCategory 方法可获取字符的 Unicode 类别。使用 IsControl、IsDigit、IsHighSurrogate、IsLetter、IsLetterOrDigit、IsLower、IsLowSurrogate、IsNumber、IsPunctuation、IsSeparator、IsSurrogate、IsSurrogatePair、IsSymbol、IsUpper 和 IsWhiteSpace 方法可确定字符是否属于特定的 Unicode 类别，如数字、字母、标点、控制字符等。

  • 使用 GetNumericValue 方法可将表示数字的 Char 对象转换为数值类型。使用 Parse 和 TryParse 可将字符串中的字符转换为 Char 对象。使用 ToString 可将 Char 对象转换为 String 对象。 使用 GetNumericValue 方法可将表示数字的 Char 对象转换为数值类型。使用 Parse 和 TryParse 可将字符串中的字符转换为 Char 对象。使用 ToString 可将 Char 对象转换为 String 对象。 使用 GetNumericValue 方法可将表示数字的 Char 对象转换为数值类型。使用 Parse 和 TryParse 可将字符串中的字符转换为 Char 对象。使用 ToString 可将 Char 对象转换为 String 对象。

  • 使用 ToLower、ToLowerInvariant、ToUpper 和 ToUpperInvariant 方法可更改 Char 对象的大小写。

下面的代码示例演示 Char 中的某些方法。

imports System

Module CharStructure

    Public Sub Main()

        Dim chA As Char
        chA = "A"c
        Dim ch1 As Char
        ch1 = "1"c
        Dim str As String
        str = "test string"

        Console.WriteLine(chA.CompareTo("B"c))          ' Output: "-1" (meaning 'A' is 1 less than 'B')
        Console.WriteLine(chA.Equals("A"c))             ' Output: "True"
        Console.WriteLine(Char.GetNumericValue(ch1))    ' Output: "1"
        Console.WriteLine(Char.IsControl(Chr(9)))       ' Output: "True"
        Console.WriteLine(Char.IsDigit(ch1))            ' Output: "True"
        Console.WriteLine(Char.IsLetter(","c))          ' Output: "False"
        Console.WriteLine(Char.IsLower("u"c))           ' Output: "True"
        Console.WriteLine(Char.IsNumber(ch1))           ' Output: "True"
        Console.WriteLine(Char.IsPunctuation("."c))     ' Output: "True"
        Console.WriteLine(Char.IsSeparator(str, 4))     ' Output: "True"
        Console.WriteLine(Char.IsSymbol("+"c))          ' Output: "True"
        Console.WriteLine(Char.IsWhiteSpace(str, 4))    ' Output: "True"
        Console.WriteLine(Char.Parse("S"))              ' Output: "S"
        Console.WriteLine(Char.ToLower("M"c))           ' Output: "m"
        Console.WriteLine("x"c.ToString())              ' Output: "x"

    End Sub

End Module

using System;

public class CharStructureSample {
    public static void Main() {
        char chA = 'A';
        char ch1 = '1';
        string str = "test string";

        Console.WriteLine(chA.CompareTo('B'));			// Output: "-1" (meaning 'A' is 1 less than 'B')
        Console.WriteLine(chA.Equals('A'));				// Output: "True"
        Console.WriteLine(Char.GetNumericValue(ch1));	// Output: "1"
        Console.WriteLine(Char.IsControl('\t'));		// Output: "True"
        Console.WriteLine(Char.IsDigit(ch1));			// Output: "True"
        Console.WriteLine(Char.IsLetter(','));			// Output: "False"
        Console.WriteLine(Char.IsLower('u'));			// Output: "True"
        Console.WriteLine(Char.IsNumber(ch1));			// Output: "True"
        Console.WriteLine(Char.IsPunctuation('.'));		// Output: "True"
        Console.WriteLine(Char.IsSeparator(str, 4));	// Output: "True"
        Console.WriteLine(Char.IsSymbol('+'));			// Output: "True"
        Console.WriteLine(Char.IsWhiteSpace(str, 4));	// Output: "True"
        Console.WriteLine(Char.Parse("S"));				// Output: "S"
        Console.WriteLine(Char.ToLower('M'));			// Output: "m"
        Console.WriteLine('x'.ToString());				// Output: "x"
    }
}

using namespace System;
int main()
{
   char chA = 'A';
   char ch1 = '1';
   String^ str =  "test string";
   Console::WriteLine( chA.CompareTo( 'B' ) ); // Output: "-1" (meaning 'A' is 1 less than 'B')
   Console::WriteLine( chA.Equals( 'A' ) ); // Output: "True"
   Console::WriteLine( Char::GetNumericValue( ch1 ) ); // Output: "1"
   Console::WriteLine( Char::IsControl( '\t' ) ); // Output: "True"
   Console::WriteLine( Char::IsDigit( ch1 ) ); // Output: "True"
   Console::WriteLine( Char::IsLetter( ',' ) ); // Output: "False"
   Console::WriteLine( Char::IsLower( 'u' ) ); // Output: "True"
   Console::WriteLine( Char::IsNumber( ch1 ) ); // Output: "True"
   Console::WriteLine( Char::IsPunctuation( '.' ) ); // Output: "True"
   Console::WriteLine( Char::IsSeparator( str, 4 ) ); // Output: "True"
   Console::WriteLine( Char::IsSymbol( '+' ) ); // Output: "True"
   Console::WriteLine( Char::IsWhiteSpace( str, 4 ) ); // Output: "True"
   Console::WriteLine( Char::Parse(  "S" ) ); // Output: "S"
   Console::WriteLine( Char::ToLower( 'M' ) ); // Output: "m"
   Console::WriteLine( 'x' ); // Output: "x"
}

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 成员
System 命名空间
IComparable
IConvertible
String


Char 成员

Char 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

表示一个 Unicode 字符。

Char 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Char 结构
System 命名空间


Char 字段

Char 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

Char 类型公开以下成员。

名称 说明
页首

参考

Char 结构
System 命名空间


Char ..::.MaxValue 字段

Char
.
.
::
.
MaxValue 字段
Char 结构

表示 Char 的最大可能值。此字段为常数。 表示 Char 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As Char
public const char MaxValue
public:
literal wchar_t MaxValue
static val mutable MaxValue: char

该常数的值为十六进制 0xFFFF。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间
MinValue


Char ..::.MinValue 字段

Char
.
.
::
.
MinValue 字段
Char 结构

表示 Char 的最小可能值。此字段为常数。 表示 Char 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As Char
public const char MinValue
public:
literal wchar_t MinValue
static val mutable MinValue: char

该常数的值为十六进制 0x00。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间
MaxValue


Char 方法

Char 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

Char 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Char 结构
System 命名空间


Char ..::.CompareTo 方法

Char
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

将此实例与指定的对象或值类型进行比较，并指示此实例在排序顺序中是位于指定的对象或值类型之前、之后还是与其出现在同一位置。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.CompareTo 方法 (Char)

Char
.
.
::
.
CompareTo 方法 (Char)
Char 结构

将此实例与指定的 Char 对象进行比较，并指示此实例在排序顺序中是位于指定的 Char 对象之前、之后还是与其出现在同一位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Char _ ) As Integer
public int CompareTo( char value )
public: virtual int CompareTo( wchar_t value ) sealed
abstract CompareTo : value:char -> int override CompareTo : value:char -> int
参数
value
类型： System Char
要比较的
Char
对象。
返回值
类型： System Int32
一个有符号数，指示此实例在排序顺序中相对于
value
参数的位置。
返回值
说明
小于零
此实例位于
value
之前。
零
此实例在排序顺序中的位置与
value
相同。
大于零
此实例位于
value
之后。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Char..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

此方法所执行的比较基于此实例和 value 的编码值，而不是它们的字典特征。

如果 CompareTo 方法参数类型包含的位数少于（窄于）实例类型，则某些编程语言将执行隐式扩大转换，以将参数值转换为具有更多位数的值。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。

通常，对 numeric 类型执行隐式扩大转换。请参考所用编程语言的文档，确定相应的编译器是否执行扩大转换。如果实例和参数类型不匹配，并且没有合适的转换，则编译器将生成指令来将参数装箱并调用采用 Object 参数的 CompareTo 重载。 通常，对 numeric 类型执行隐式扩大转换。请参考所用编程语言的文档，确定相应的编译器是否执行扩大转换。如果实例和参数类型不匹配，并且没有合适的转换，则编译器将生成指令来将参数装箱并调用采用 Object 参数的 CompareTo 重载。 通常，对 numeric 类型执行隐式扩大转换。请参考所用编程语言的文档，确定相应的编译器是否执行扩大转换。如果实例和参数类型不匹配，并且没有合适的转换，则编译器将生成指令来将参数装箱并调用采用 Object 参数的 CompareTo 重载。

下面的代码示例演示几种值和引用类型的泛型和非泛型 CompareTo 方法。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
CompareTo 重载
System 命名空间
IComparable
Char Equals


Char ..::.CompareTo 方法 (Object)

Char
.
.
::
.
CompareTo 方法 (Object)
Char 结构

将此实例与指定的对象进行比较，并指示此实例在排序顺序中是位于该指定的 Object 之前、之后还是与其出现在同一位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要与此实例比较的对象或
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号数，指示此实例在排序顺序中相对于
value
参数的位置。
返回值
说明
小于零
此实例位于
value
之前。
零
此实例在排序顺序中的位置与
value
相同。
大于零
此实例位于
value
之后。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 Char 对象。

CompareTo 方法实现 IComparable 接口。

value 参数必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是 Char 的实例；否则将引发异常。

此方法所执行的比较基于该实例和 value 的编码值，而不一定要基于它们的字典特征。无论 Char 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 此方法所执行的比较基于该实例和 value 的编码值，而不一定要基于它们的字典特征。无论 Char 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的代码示例演示 CompareTo。

Imports System

Module CompareToSample

    Sub Main()

        Dim chA As Char
        chA = "A"c
        Dim chB As Char
        chB = "B"c

        Console.WriteLine(chA.CompareTo("A"c))  ' Output: "0" (meaning they're equal)
        Console.WriteLine("b"c.CompareTo(chB))  ' Output: "32" (meaning 'b' is 32 greater than 'B')
    Console.WriteLine(chA.CompareTo(chB))	' Output: "-1" (meaning 'A' is less than 'B' by 1)

    End Sub

End Module

using System;

public class CompareToSample {
    public static void Main() {
        char chA = 'A';
        char chB = 'B';

        Console.WriteLine(chA.CompareTo('A'));	// Output: "0" (meaning they're equal)
        Console.WriteLine('b'.CompareTo(chB));	// Output: "32" (meaning 'b' is greater than 'B' by 32)
        Console.WriteLine(chA.CompareTo(chB));	// Output: "-1" (meaning 'A' is less than 'B' by 1)
    }
}

using namespace System;
int main()
{
   char chA = 'A';
   char chB = 'B';
   Console::WriteLine( chA.CompareTo( 'A' ) ); // Output: "0" (meaning they're equal)
   Console::WriteLine( 'b'.CompareTo( chB ) ); // Output: "32" (meaning 'b' is greater than 'B' by 32)
   Console::WriteLine( chA.CompareTo( chB ) ); // Output: "-1" (meaning 'A' is less than 'B' by 1)
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
CompareTo 重载
System 命名空间
IComparable
Char Equals


Char ..::.ConvertFromUtf32 方法

Char
.
.
::
.
ConvertFromUtf32 方法
Char 结构

将指定的 Unicode 码位转换为 UTF-16 编码字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertFromUtf32 ( _
    utf32 As Integer _
) As String
public static string ConvertFromUtf32(
    int utf32
)
public:
static String^ ConvertFromUtf32(
    int utf32
)
static member ConvertFromUtf32 :
        utf32:int -> string

参数

utf32
类型： System Int32
21 位 Unicode 码位。

返回值

类型： System String
由一个 Char 对象或一个 Char 对象的代理项对组成的字符串，等效于 utf32 参数所指定的码位。
异常 | 条件
ArgumentOutOfRangeException | utf32 不是从 U+0 到 U+10FFFF 的有效的 21 位 Unicode 码位，不包括从 U+D800 到 U+DFFF 的代理项对。

使用此方法可将 21 位 Unicode 码位转换为 UTF-16 编码字符串，然后再使用 IsLowSurrogate(Char) 和 IsHighSurrogate(Char) 等方法对字符串进行测试。

基本多语言平面 (BMP) 外部的有效码位总是会产生有效的代理项对。但是，BMP 内部的有效码位可能不会根据 Unicode 标准生成有效结果，因为在转换中未使用语言处理。因此，请使用 System.Text..::.UTF32Encoding 类将批量 UTF-32 数据转换为批量 UTF-16 数据。 基本多语言平面 (BMP) 外部的有效码位总是会产生有效的代理项对。但是，BMP 内部的有效码位可能不会根据 Unicode 标准生成有效结果，因为在转换中未使用语言处理。因此，请使用 System.Text..::.UTF32Encoding 类将批量 UTF-32 数据转换为批量 UTF-16 数据。 基本多语言平面 (BMP) 外部的有效码位总是会产生有效的代理项对。但是，BMP 内部的有效码位可能不会根据 Unicode 标准生成有效结果，因为在转换中未使用语言处理。因此，请使用 System.Text..::.UTF32Encoding 类将批量 UTF-32 数据转换为批量 UTF-16 数据。

下面的代码示例演示了 ConvertToUtf32 和 ConvertFromUtf32 方法。

Class Sample
   Public Shared Sub Main()
      Dim letterA As Integer = &H41    'U+00041 = LATIN CAPITAL LETTER A
      Dim music As Integer   = &H1D161 'U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE
      Dim s1 As String
      Dim comment   As String = "Create a UTF-16 encoded string from a code point."
      Dim comment1b As String = "Create a code point from a UTF-16 encoded string."
      Dim comment2b As String = "Create a code point from a surrogate pair at a certain position in a string."
      Dim comment2c As String = "Create a code point from a high surrogate and a low surrogate code point."

      '  Convert code point U+0041 to UTF-16. The UTF-16 equivalent of
      '  U+0041 is a Char with hexadecimal value 0041.

      Console.WriteLine(comment)
      s1 = [Char].ConvertFromUtf32(letterA)
      Console.Write("    1a) 0x{0:X} => ", letterA)
      Show(s1)
      Console.WriteLine()

      '  Convert the lone UTF-16 character to a code point.

      Console.WriteLine(comment1b)
      letterA = [Char].ConvertToUtf32(s1, 0)
      Console.Write("    1b) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", letterA)
      Console.WriteLine()

      ' -------------------------------------------------------------------

      '  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
      '  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.

      Console.WriteLine(comment)
      s1 = [Char].ConvertFromUtf32(music)
      Console.Write("    2a) 0x{0:X} => ", music)
      Show(s1)
      Console.WriteLine()

      '  Convert the surrogate pair in the string at index position
      '  zero to a code point.

      Console.WriteLine(comment2b)
      music = [Char].ConvertToUtf32(s1, 0)
      Console.Write("    2b) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", music)

      '  Convert the high and low characters in the surrogate pair into a code point.

      Console.WriteLine(comment2c)
      music = [Char].ConvertToUtf32(s1.Chars(0), s1.Chars(1))
      Console.Write("    2c) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", music)
   End Sub

   Private Shared Sub Show(s As String)
      Dim x As Integer
      If s.Length = 0 Then Exit Sub
      For x = 0 To s.Length - 1
         Console.Write("0x{0:X}{1}", _
                        AscW(s.Chars(x)), _
                        IIf(x = s.Length - 1, [String].Empty, ", "))
      Next
   End Sub
End Class
'
'This example produces the following results:
'
'Create a UTF-16 encoded string from a code point.
'    1a) 0x41 => 0x41
'Create a code point from a UTF-16 encoded string.
'    1b) 0x41 => 0x41
'
'Create a UTF-16 encoded string from a code point.
'    2a) 0x1D161 => 0xD834, 0xDD61
'Create a code point from a surrogate pair at a certain position in a string.
'    2b) 0xD834, 0xDD61 => 0x1D161
'Create a code point from a high surrogate and a low surrogate code point.
'    2c) 0xD834, 0xDD61 => 0x1D161
'

// This example demonstrates the Char.ConvertFromUtf32() method
//                           and Char.ConvertToUtf32() overloads.
using System;

class Sample
{
    public static void Main()
    {
    int letterA = 0x0041;  //U+00041 = LATIN CAPITAL LETTER A
    int music   = 0x1D161; //U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE
    string s1;
    string comment   = "Create a UTF-16 encoded string from a code point.";
    string comment1b = "Create a code point from a UTF-16 encoded string.";
    string comment2b = "Create a code point from a surrogate pair at a certain position in a string.";
    string comment2c = "Create a code point from a high surrogate and a low surrogate code point.";

//  Convert code point U+0041 to UTF-16. The UTF-16 equivalent of
//  U+0041 is a Char with hexadecimal value 0041.

    Console.WriteLine(comment);
    s1 = Char.ConvertFromUtf32(letterA);
    Console.Write("    1a) 0x{0:X} => ", letterA);
    Show(s1);
    Console.WriteLine();

//  Convert the lone UTF-16 character to a code point.

    Console.WriteLine(comment1b);
    letterA = Char.ConvertToUtf32(s1, 0);
    Console.Write("    1b) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", letterA);
    Console.WriteLine();

// -------------------------------------------------------------------

//  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
//  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.

    Console.WriteLine(comment);
    s1 = Char.ConvertFromUtf32(music);
    Console.Write("    2a) 0x{0:X} => ", music);
    Show(s1);
    Console.WriteLine();

//  Convert the surrogate pair in the string at index position
//  zero to a code point.

    Console.WriteLine(comment2b);
    music = Char.ConvertToUtf32(s1, 0);
    Console.Write("    2b) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", music);

//  Convert the high and low characters in the surrogate pair into a code point.

    Console.WriteLine(comment2c);
    music = Char.ConvertToUtf32(s1[0], s1[1]);
    Console.Write("    2c) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", music);
    }

    private static void Show(string s)
    {
    for (int x = 0; x < s.Length; x++)
        {
        Console.Write("0x{0:X}{1}",
                       (int)s[x],
                       ((x == s.Length-1)? String.Empty : ", "));
        }
    }
}
/*
This example produces the following results:

Create a UTF-16 encoded string from a code point.
    1a) 0x41 => 0x41
Create a code point from a UTF-16 encoded string.
    1b) 0x41 => 0x41

Create a UTF-16 encoded string from a code point.
    2a) 0x1D161 => 0xD834, 0xDD61
Create a code point from a surrogate pair at a certain position in a string.
    2b) 0xD834, 0xDD61 => 0x1D161
Create a code point from a high surrogate and a low surrogate code point.
    2c) 0xD834, 0xDD61 => 0x1D161

*/

// This example demonstrates the Char.ConvertFromUtf32() method
//                           and Char.ConvertToUtf32() overloads.
using namespace System;
void Show( String^ s )
{
//   Console::Write( "0x{0:X}, 0x{1:X}", (int)s->get_Chars( 0 ), (int)s->get_Chars( 1 ) );
   Console::Write( "0x{0:X}, 0x{1:X}", (int)s[ 0 ], (int)s[ 1 ] );
}

int main()
{
   int music = 0x1D161; //U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE

   String^ s1;
   String^ comment1a = "Create a UTF-16 encoded string from a code point.";
   String^ comment1b = "Create a code point from a surrogate pair at a certain position in a string.";
   String^ comment1c = "Create a code point from a high surrogate and a low surrogate code point.";

   // -------------------------------------------------------------------
   //  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
   //  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.
   Console::WriteLine( comment1a );
   s1 = Char::ConvertFromUtf32( music );
   Console::Write( "    1a) 0x{0:X} => ", music );
   Show( s1 );
   Console::WriteLine();

   //  Convert the surrogate pair in the string at index position
   //  zero to a code point.
   Console::WriteLine( comment1b );
   music = Char::ConvertToUtf32( s1, 0 );
   Console::Write( "    1b) " );
   Show( s1 );
   Console::WriteLine( " => 0x{0:X}", music );

   //  Convert the high and low characters in the surrogate pair into a code point.
   Console::WriteLine( comment1c );
   music = Char::ConvertToUtf32( s1[ 0 ], s1[ 1 ] );
   Console::Write( "    1c) " );
   Show( s1 );
   Console::WriteLine( " => 0x{0:X}", music );
}

/*
This example produces the following results:

Create a UTF-16 encoded string from a code point.
    1a) 0x1D161 => 0xD834, 0xDD61
Create a code point from a surrogate pair at a certain position in a string.
    1b) 0xD834, 0xDD61 => 0x1D161
Create a code point from a high surrogate and a low surrogate code point.
    1c) 0xD834, 0xDD61 => 0x1D161

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
System 命名空间
ConvertToUtf32
System.Text UTF32Encoding


Char ..::.ConvertToUtf32 方法

Char
.
.
::
.
ConvertToUtf32 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

将 UTF-16 编码的代理项对的值转换为 Unicode 码位。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.ConvertToUtf32 方法 (Char, Char)

Char
.
.
::
.
ConvertToUtf32 方法 (Char, Char)
Char 结构

将 UTF-16 编码的代理项对的值转换为 Unicode 码位。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertToUtf32 ( _
    highSurrogate As Char, _
    lowSurrogate As Char _
) As Integer
public static int ConvertToUtf32(
    char highSurrogate,
    char lowSurrogate
)
public:
static int ConvertToUtf32(
    wchar_t highSurrogate,
    wchar_t lowSurrogate
)
static member ConvertToUtf32 :
        highSurrogate:char *
        lowSurrogate:char -> int

参数

highSurrogate
类型： System Char
高代理项码位（即码位从 U+D800 到 U+DBFF）。
lowSurrogate
类型： System Char
低代理项码位（即码位从 U+DC00 到 U+DFFF）。

返回值

类型： System Int32
highSurrogate 和 lowSurrogate 参数表示的 21 位 Unicode 码位。
异常 | 条件
ArgumentOutOfRangeException | highSurrogate 不在 U+D800 到 U+DBFF 的范围内，或 lowSurrogate 不在 U+DC00 到 U+DFFF 的范围内。

使用此方法可将代理项对转换为 21 位 Unicode 码位。若要将 UTF-16 数据转换为 UTF-32 数据，请使用 System.Text..::.UTF32Encoding 类。 使用此方法可将代理项对转换为 21 位 Unicode 码位。若要将 UTF-16 数据转换为 UTF-32 数据，请使用 System.Text..::.UTF32Encoding 类。

UTF-16 编码通常将单个 Unicode 字符表示为一个 16 位码位。但它还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。在这两个 Char 对象中，第一个（高）代理项的码位范围必须介于 U+D800 到 U+DBFF 之间，而第二个（低）代理项的码位范围必须介于 U+DC00 到 U+DFFF 之间。只有 UTF-16 编码才支持代理项对。此方法允许将 UTF-16 代理项对表示的字符转换为使用 UTF-32 编码的字符。 UTF-16 编码通常将单个 Unicode 字符表示为一个 16 位码位。但它还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。在这两个 Char 对象中，第一个（高）代理项的码位范围必须介于 U+D800 到 U+DBFF 之间，而第二个（低）代理项的码位范围必须介于 U+DC00 到 U+DFFF 之间。只有 UTF-16 编码才支持代理项对。此方法允许将 UTF-16 代理项对表示的字符转换为使用 UTF-32 编码的字符。 UTF-16 编码通常将单个 Unicode 字符表示为一个 16 位码位。但它还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。在这两个 Char 对象中，第一个（高）代理项的码位范围必须介于 U+D800 到 U+DBFF 之间，而第二个（低）代理项的码位范围必须介于 U+DC00 到 U+DFFF 之间。只有 UTF-16 编码才支持代理项对。此方法允许将 UTF-16 代理项对表示的字符转换为使用 UTF-32 编码的字符。 UTF-16 编码通常将单个 Unicode 字符表示为一个 16 位码位。但它还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。在这两个 Char 对象中，第一个（高）代理项的码位范围必须介于 U+D800 到 U+DBFF 之间，而第二个（低）代理项的码位范围必须介于 U+DC00 到 U+DFFF 之间。只有 UTF-16 编码才支持代理项对。此方法允许将 UTF-16 代理项对表示的字符转换为使用 UTF-32 编码的字符。 UTF-16 编码通常将单个 Unicode 字符表示为一个 16 位码位。但它还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。在这两个 Char 对象中，第一个（高）代理项的码位范围必须介于 U+D800 到 U+DBFF 之间，而第二个（低）代理项的码位范围必须介于 U+DC00 到 U+DFFF 之间。只有 UTF-16 编码才支持代理项对。此方法允许将 UTF-16 代理项对表示的字符转换为使用 UTF-32 编码的字符。

下面的代码示例演示了 ConvertToUtf32 和 ConvertFromUtf32 方法。

Class Sample
   Public Shared Sub Main()
      Dim letterA As Integer = &H41    'U+00041 = LATIN CAPITAL LETTER A
      Dim music As Integer   = &H1D161 'U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE
      Dim s1 As String
      Dim comment   As String = "Create a UTF-16 encoded string from a code point."
      Dim comment1b As String = "Create a code point from a UTF-16 encoded string."
      Dim comment2b As String = "Create a code point from a surrogate pair at a certain position in a string."
      Dim comment2c As String = "Create a code point from a high surrogate and a low surrogate code point."

      '  Convert code point U+0041 to UTF-16. The UTF-16 equivalent of
      '  U+0041 is a Char with hexadecimal value 0041.

      Console.WriteLine(comment)
      s1 = [Char].ConvertFromUtf32(letterA)
      Console.Write("    1a) 0x{0:X} => ", letterA)
      Show(s1)
      Console.WriteLine()

      '  Convert the lone UTF-16 character to a code point.

      Console.WriteLine(comment1b)
      letterA = [Char].ConvertToUtf32(s1, 0)
      Console.Write("    1b) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", letterA)
      Console.WriteLine()

      ' -------------------------------------------------------------------

      '  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
      '  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.

      Console.WriteLine(comment)
      s1 = [Char].ConvertFromUtf32(music)
      Console.Write("    2a) 0x{0:X} => ", music)
      Show(s1)
      Console.WriteLine()

      '  Convert the surrogate pair in the string at index position
      '  zero to a code point.

      Console.WriteLine(comment2b)
      music = [Char].ConvertToUtf32(s1, 0)
      Console.Write("    2b) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", music)

      '  Convert the high and low characters in the surrogate pair into a code point.

      Console.WriteLine(comment2c)
      music = [Char].ConvertToUtf32(s1.Chars(0), s1.Chars(1))
      Console.Write("    2c) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", music)
   End Sub

   Private Shared Sub Show(s As String)
      Dim x As Integer
      If s.Length = 0 Then Exit Sub
      For x = 0 To s.Length - 1
         Console.Write("0x{0:X}{1}", _
                        AscW(s.Chars(x)), _
                        IIf(x = s.Length - 1, [String].Empty, ", "))
      Next
   End Sub
End Class
'
'This example produces the following results:
'
'Create a UTF-16 encoded string from a code point.
'    1a) 0x41 => 0x41
'Create a code point from a UTF-16 encoded string.
'    1b) 0x41 => 0x41
'
'Create a UTF-16 encoded string from a code point.
'    2a) 0x1D161 => 0xD834, 0xDD61
'Create a code point from a surrogate pair at a certain position in a string.
'    2b) 0xD834, 0xDD61 => 0x1D161
'Create a code point from a high surrogate and a low surrogate code point.
'    2c) 0xD834, 0xDD61 => 0x1D161
'

// This example demonstrates the Char.ConvertFromUtf32() method
//                           and Char.ConvertToUtf32() overloads.
using System;

class Sample
{
    public static void Main()
    {
    int letterA = 0x0041;  //U+00041 = LATIN CAPITAL LETTER A
    int music   = 0x1D161; //U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE
    string s1;
    string comment   = "Create a UTF-16 encoded string from a code point.";
    string comment1b = "Create a code point from a UTF-16 encoded string.";
    string comment2b = "Create a code point from a surrogate pair at a certain position in a string.";
    string comment2c = "Create a code point from a high surrogate and a low surrogate code point.";

//  Convert code point U+0041 to UTF-16. The UTF-16 equivalent of
//  U+0041 is a Char with hexadecimal value 0041.

    Console.WriteLine(comment);
    s1 = Char.ConvertFromUtf32(letterA);
    Console.Write("    1a) 0x{0:X} => ", letterA);
    Show(s1);
    Console.WriteLine();

//  Convert the lone UTF-16 character to a code point.

    Console.WriteLine(comment1b);
    letterA = Char.ConvertToUtf32(s1, 0);
    Console.Write("    1b) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", letterA);
    Console.WriteLine();

// -------------------------------------------------------------------

//  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
//  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.

    Console.WriteLine(comment);
    s1 = Char.ConvertFromUtf32(music);
    Console.Write("    2a) 0x{0:X} => ", music);
    Show(s1);
    Console.WriteLine();

//  Convert the surrogate pair in the string at index position
//  zero to a code point.

    Console.WriteLine(comment2b);
    music = Char.ConvertToUtf32(s1, 0);
    Console.Write("    2b) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", music);

//  Convert the high and low characters in the surrogate pair into a code point.

    Console.WriteLine(comment2c);
    music = Char.ConvertToUtf32(s1[0], s1[1]);
    Console.Write("    2c) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", music);
    }

    private static void Show(string s)
    {
    for (int x = 0; x < s.Length; x++)
        {
        Console.Write("0x{0:X}{1}",
                       (int)s[x],
                       ((x == s.Length-1)? String.Empty : ", "));
        }
    }
}
/*
This example produces the following results:

Create a UTF-16 encoded string from a code point.
    1a) 0x41 => 0x41
Create a code point from a UTF-16 encoded string.
    1b) 0x41 => 0x41

Create a UTF-16 encoded string from a code point.
    2a) 0x1D161 => 0xD834, 0xDD61
Create a code point from a surrogate pair at a certain position in a string.
    2b) 0xD834, 0xDD61 => 0x1D161
Create a code point from a high surrogate and a low surrogate code point.
    2c) 0xD834, 0xDD61 => 0x1D161

*/

// This example demonstrates the Char.ConvertFromUtf32() method
//                           and Char.ConvertToUtf32() overloads.
using namespace System;
void Show( String^ s )
{
//   Console::Write( "0x{0:X}, 0x{1:X}", (int)s->get_Chars( 0 ), (int)s->get_Chars( 1 ) );
   Console::Write( "0x{0:X}, 0x{1:X}", (int)s[ 0 ], (int)s[ 1 ] );
}

int main()
{
   int music = 0x1D161; //U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE

   String^ s1;
   String^ comment1a = "Create a UTF-16 encoded string from a code point.";
   String^ comment1b = "Create a code point from a surrogate pair at a certain position in a string.";
   String^ comment1c = "Create a code point from a high surrogate and a low surrogate code point.";

   // -------------------------------------------------------------------
   //  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
   //  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.
   Console::WriteLine( comment1a );
   s1 = Char::ConvertFromUtf32( music );
   Console::Write( "    1a) 0x{0:X} => ", music );
   Show( s1 );
   Console::WriteLine();

   //  Convert the surrogate pair in the string at index position
   //  zero to a code point.
   Console::WriteLine( comment1b );
   music = Char::ConvertToUtf32( s1, 0 );
   Console::Write( "    1b) " );
   Show( s1 );
   Console::WriteLine( " => 0x{0:X}", music );

   //  Convert the high and low characters in the surrogate pair into a code point.
   Console::WriteLine( comment1c );
   music = Char::ConvertToUtf32( s1[ 0 ], s1[ 1 ] );
   Console::Write( "    1c) " );
   Show( s1 );
   Console::WriteLine( " => 0x{0:X}", music );
}

/*
This example produces the following results:

Create a UTF-16 encoded string from a code point.
    1a) 0x1D161 => 0xD834, 0xDD61
Create a code point from a surrogate pair at a certain position in a string.
    1b) 0xD834, 0xDD61 => 0x1D161
Create a code point from a high surrogate and a low surrogate code point.
    1c) 0xD834, 0xDD61 => 0x1D161

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
ConvertToUtf32 重载
System 命名空间
ConvertFromUtf32
System.Text UTF32Encoding


Char ..::.ConvertToUtf32 方法 (String, Int32)

Char
.
.
::
.
ConvertToUtf32 方法 (String, Int32)
Char 结构

将字符串中指定位置的 UTF-16 编码字符或代理项对的值转换为 Unicode 码位。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertToUtf32 ( _
    s As String, _
    index As Integer _
) As Integer
public static int ConvertToUtf32(
    string s,
    int index
)
public:
static int ConvertToUtf32(
    String^ s,
    int index
)
static member ConvertToUtf32 :
        s:string *
        index:int -> int

参数

s
类型： System String
包含字符或代理项对的字符串。
index
类型： System Int32
字符或代理项对在 s 中的索引位置。

返回值

类型： System Int32
字符或代理项对表示的 21 位 Unicode 码位，该字符或代理项对在 s 参数中的位置由 index 参数指定。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 不是 s 中的位置。
ArgumentException | 指定的索引位置包含一个代理项对，并且该代理项对中的第一个字符不是有效的高代理项，或该对中的第二个字符不是有效的低代理项。

使用此方法可将字符或代理项对转换为 21 位 Unicode 码位。若要将 UTF-16 数据转换为 UTF-32 数据，请使用 System.Text..::.UTF32Encoding 类。 使用此方法可将字符或代理项对转换为 21 位 Unicode 码位。若要将 UTF-16 数据转换为 UTF-32 数据，请使用 System.Text..::.UTF32Encoding 类。

下面的代码示例演示了 ConvertToUtf32 和 ConvertFromUtf32 方法。

Class Sample
   Public Shared Sub Main()
      Dim letterA As Integer = &H41    'U+00041 = LATIN CAPITAL LETTER A
      Dim music As Integer   = &H1D161 'U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE
      Dim s1 As String
      Dim comment   As String = "Create a UTF-16 encoded string from a code point."
      Dim comment1b As String = "Create a code point from a UTF-16 encoded string."
      Dim comment2b As String = "Create a code point from a surrogate pair at a certain position in a string."
      Dim comment2c As String = "Create a code point from a high surrogate and a low surrogate code point."

      '  Convert code point U+0041 to UTF-16. The UTF-16 equivalent of
      '  U+0041 is a Char with hexadecimal value 0041.

      Console.WriteLine(comment)
      s1 = [Char].ConvertFromUtf32(letterA)
      Console.Write("    1a) 0x{0:X} => ", letterA)
      Show(s1)
      Console.WriteLine()

      '  Convert the lone UTF-16 character to a code point.

      Console.WriteLine(comment1b)
      letterA = [Char].ConvertToUtf32(s1, 0)
      Console.Write("    1b) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", letterA)
      Console.WriteLine()

      ' -------------------------------------------------------------------

      '  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
      '  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.

      Console.WriteLine(comment)
      s1 = [Char].ConvertFromUtf32(music)
      Console.Write("    2a) 0x{0:X} => ", music)
      Show(s1)
      Console.WriteLine()

      '  Convert the surrogate pair in the string at index position
      '  zero to a code point.

      Console.WriteLine(comment2b)
      music = [Char].ConvertToUtf32(s1, 0)
      Console.Write("    2b) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", music)

      '  Convert the high and low characters in the surrogate pair into a code point.

      Console.WriteLine(comment2c)
      music = [Char].ConvertToUtf32(s1.Chars(0), s1.Chars(1))
      Console.Write("    2c) ")
      Show(s1)
      Console.WriteLine(" => 0x{0:X}", music)
   End Sub

   Private Shared Sub Show(s As String)
      Dim x As Integer
      If s.Length = 0 Then Exit Sub
      For x = 0 To s.Length - 1
         Console.Write("0x{0:X}{1}", _
                        AscW(s.Chars(x)), _
                        IIf(x = s.Length - 1, [String].Empty, ", "))
      Next
   End Sub
End Class
'
'This example produces the following results:
'
'Create a UTF-16 encoded string from a code point.
'    1a) 0x41 => 0x41
'Create a code point from a UTF-16 encoded string.
'    1b) 0x41 => 0x41
'
'Create a UTF-16 encoded string from a code point.
'    2a) 0x1D161 => 0xD834, 0xDD61
'Create a code point from a surrogate pair at a certain position in a string.
'    2b) 0xD834, 0xDD61 => 0x1D161
'Create a code point from a high surrogate and a low surrogate code point.
'    2c) 0xD834, 0xDD61 => 0x1D161
'

// This example demonstrates the Char.ConvertFromUtf32() method
//                           and Char.ConvertToUtf32() overloads.
using System;

class Sample
{
    public static void Main()
    {
    int letterA = 0x0041;  //U+00041 = LATIN CAPITAL LETTER A
    int music   = 0x1D161; //U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE
    string s1;
    string comment   = "Create a UTF-16 encoded string from a code point.";
    string comment1b = "Create a code point from a UTF-16 encoded string.";
    string comment2b = "Create a code point from a surrogate pair at a certain position in a string.";
    string comment2c = "Create a code point from a high surrogate and a low surrogate code point.";

//  Convert code point U+0041 to UTF-16. The UTF-16 equivalent of
//  U+0041 is a Char with hexadecimal value 0041.

    Console.WriteLine(comment);
    s1 = Char.ConvertFromUtf32(letterA);
    Console.Write("    1a) 0x{0:X} => ", letterA);
    Show(s1);
    Console.WriteLine();

//  Convert the lone UTF-16 character to a code point.

    Console.WriteLine(comment1b);
    letterA = Char.ConvertToUtf32(s1, 0);
    Console.Write("    1b) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", letterA);
    Console.WriteLine();

// -------------------------------------------------------------------

//  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
//  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.

    Console.WriteLine(comment);
    s1 = Char.ConvertFromUtf32(music);
    Console.Write("    2a) 0x{0:X} => ", music);
    Show(s1);
    Console.WriteLine();

//  Convert the surrogate pair in the string at index position
//  zero to a code point.

    Console.WriteLine(comment2b);
    music = Char.ConvertToUtf32(s1, 0);
    Console.Write("    2b) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", music);

//  Convert the high and low characters in the surrogate pair into a code point.

    Console.WriteLine(comment2c);
    music = Char.ConvertToUtf32(s1[0], s1[1]);
    Console.Write("    2c) ");
    Show(s1);
    Console.WriteLine(" => 0x{0:X}", music);
    }

    private static void Show(string s)
    {
    for (int x = 0; x < s.Length; x++)
        {
        Console.Write("0x{0:X}{1}",
                       (int)s[x],
                       ((x == s.Length-1)? String.Empty : ", "));
        }
    }
}
/*
This example produces the following results:

Create a UTF-16 encoded string from a code point.
    1a) 0x41 => 0x41
Create a code point from a UTF-16 encoded string.
    1b) 0x41 => 0x41

Create a UTF-16 encoded string from a code point.
    2a) 0x1D161 => 0xD834, 0xDD61
Create a code point from a surrogate pair at a certain position in a string.
    2b) 0xD834, 0xDD61 => 0x1D161
Create a code point from a high surrogate and a low surrogate code point.
    2c) 0xD834, 0xDD61 => 0x1D161

*/

// This example demonstrates the Char.ConvertFromUtf32() method
//                           and Char.ConvertToUtf32() overloads.
using namespace System;
void Show( String^ s )
{
//   Console::Write( "0x{0:X}, 0x{1:X}", (int)s->get_Chars( 0 ), (int)s->get_Chars( 1 ) );
   Console::Write( "0x{0:X}, 0x{1:X}", (int)s[ 0 ], (int)s[ 1 ] );
}

int main()
{
   int music = 0x1D161; //U+1D161 = MUSICAL SYMBOL SIXTEENTH NOTE

   String^ s1;
   String^ comment1a = "Create a UTF-16 encoded string from a code point.";
   String^ comment1b = "Create a code point from a surrogate pair at a certain position in a string.";
   String^ comment1c = "Create a code point from a high surrogate and a low surrogate code point.";

   // -------------------------------------------------------------------
   //  Convert the code point U+1D161 to UTF-16. The UTF-16 equivalent of
   //  U+1D161 is a surrogate pair with hexadecimal values D834 and DD61.
   Console::WriteLine( comment1a );
   s1 = Char::ConvertFromUtf32( music );
   Console::Write( "    1a) 0x{0:X} => ", music );
   Show( s1 );
   Console::WriteLine();

   //  Convert the surrogate pair in the string at index position
   //  zero to a code point.
   Console::WriteLine( comment1b );
   music = Char::ConvertToUtf32( s1, 0 );
   Console::Write( "    1b) " );
   Show( s1 );
   Console::WriteLine( " => 0x{0:X}", music );

   //  Convert the high and low characters in the surrogate pair into a code point.
   Console::WriteLine( comment1c );
   music = Char::ConvertToUtf32( s1[ 0 ], s1[ 1 ] );
   Console::Write( "    1c) " );
   Show( s1 );
   Console::WriteLine( " => 0x{0:X}", music );
}

/*
This example produces the following results:

Create a UTF-16 encoded string from a code point.
    1a) 0x1D161 => 0xD834, 0xDD61
Create a code point from a surrogate pair at a certain position in a string.
    1b) 0xD834, 0xDD61 => 0x1D161
Create a code point from a high surrogate and a low surrogate code point.
    1c) 0xD834, 0xDD61 => 0x1D161

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
ConvertToUtf32 重载
System 命名空间
ConvertFromUtf32
System.Text UTF32Encoding


Char ..::.Equals 方法

Char
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

返回一个值，该值指示此实例是否与指定的对象或 Char 值相等。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.Equals 方法 (Char)

Char
.
.
::
.
Equals 方法 (Char)
Char 结构

返回一个值，该值指示此实例是否与指定的 Char 对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As Char _
) As Boolean
public bool Equals(
    char obj
)
public:
virtual bool Equals(
    wchar_t obj
) sealed
abstract Equals :
        obj:char -> bool
override Equals :
        obj:char -> bool

参数

obj
类型： System Char
要与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 参数等于此实例的值，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Char..::.Equals，因为此方法不需要将 obj 参数取消装箱。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
Equals 重载
System 命名空间
Equals


Char ..::.Equals 方法 (Object)

Char
.
.
::
.
Equals 方法 (Object)
Char 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的对象或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 obj 是 Char 的实例并且等于此实例的值，则为 true；否则为 false。

此方法所执行的比较基于该实例和 obj 的编码值，而不一定要基于它们的字典特征。

下面的代码示例演示 Equals。

imports System

Module EqualsSample

    Sub Main()

        Dim chA As Char
        chA = "A"c
        Dim chB As Char
        chB = "B"c

        Console.WriteLine(chA.Equals("A"c))     ' Output: "True"
        Console.WriteLine("b"c.Equals(chB))     ' Output: "False"

    End Sub

End Module

using System;

public class EqualsSample {
    public static void Main() {
        char chA = 'A';
        char chB = 'B';

        Console.WriteLine(chA.Equals('A'));		// Output: "True"
        Console.WriteLine('b'.Equals(chB));		// Output: "False"
    }
}

using namespace System;
int main()
{
   char chA = 'A';
   char chB = 'B';
   Console::WriteLine( chA.Equals( 'A' ) ); // Output: "True"
   Console::WriteLine( 'b'.Equals( chB ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
Equals 重载
System 命名空间
Char CompareTo


Char ..::.GetHashCode 方法

Char
.
.
::
.
GetHashCode 方法
Char 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.GetNumericValue 方法

Char
.
.
::
.
GetNumericValue 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

将指定的数字 Unicode 字符转换为双精度浮点数。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.GetNumericValue 方法 (Char)

Char
.
.
::
.
GetNumericValue 方法 (Char)
Char 结构

将指定的数字 Unicode 字符转换为双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetNumericValue ( _
    c As Char _
) As Double
public static double GetNumericValue(
    char c
)
public:
static double GetNumericValue(
    wchar_t c
)
static member GetNumericValue :
        c:char -> float

参数

c
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Double
如果该字符表示数字，则为 c 的数值；否则为 -1.0。

c 参数必须为数值的 Char 表示形式。例如，如果 c 是“5”，返回值为 5。如果 c 为‘z’，则返回值为 -1.0。 c 参数必须为数值的 Char 表示形式。例如，如果 c 是“5”，返回值为 5。如果 c 为‘z’，则返回值为 -1.0。 c 参数必须为数值的 Char 表示形式。例如，如果 c 是“5”，返回值为 5。如果 c 为‘z’，则返回值为 -1.0。

当且仅当字符是 UnicodeCategory 中以下类别之一的成员时，该字符才具有关联的数值：DecimalDigitNumber、LetterNumber 或 OtherNumber。

下面的代码示例演示 GetNumericValue。

Imports System

Module GetNumericValueSample

    Sub Main()

        Dim str As String
        str = "input: 1"

        Console.WriteLine(Char.GetNumericValue("8"c))       ' Output: "8"
        Console.WriteLine(Char.GetNumericValue(str, 7))     ' Output: "1"

    End Sub

End Module

using System;

public class GetNumericValueSample {
    public static void Main() {
        string str = "input: 1";

        Console.WriteLine(Char.GetNumericValue('8'));		// Output: "8"
        Console.WriteLine(Char.GetNumericValue(str, 7));	// Output: "1"
    }
}

using namespace System;
int main()
{
   String^ str =  "input: 1";
   Console::WriteLine( Char::GetNumericValue( '8' ) ); // Output: "8"
   Console::WriteLine( Char::GetNumericValue( str, 7 ) ); // Output: "1"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
GetNumericValue 重载
System 命名空间


Char ..::.GetNumericValue 方法 (String, Int32)

Char
.
.
::
.
GetNumericValue 方法 (String, Int32)
Char 结构

将指定字符串中位于指定位置的数字 Unicode 字符转换为双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetNumericValue ( _
    s As String, _
    index As Integer _
) As Double
public static double GetNumericValue(
    string s,
    int index
)
public:
static double GetNumericValue(
    String^ s,
    int index
)
static member GetNumericValue :
        s:string *
        index:int -> float

参数

s
类型： System String
String。
index
类型： System Int32
s 中的字符位置。

返回值

类型： System Double
如果 s 中位于 index 处的字符表示数字，则为该字符的数值；否则为 -1。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

s 参数必须为数值的字符串表示形式。例如，如果 s 中位于 index 处的字符是“5”，则返回值是 5.但是，如果 s 中位于 index 处的字符是‘z’，则返回值为 -1。 s 参数必须为数值的字符串表示形式。例如，如果 s 中位于 index 处的字符是“5”，则返回值是 5.但是，如果 s 中位于 index 处的字符是‘z’，则返回值为 -1。 s 参数必须为数值的字符串表示形式。例如，如果 s 中位于 index 处的字符是“5”，则返回值是 5.但是，如果 s 中位于 index 处的字符是‘z’，则返回值为 -1。

字符串中的字符位置从零开始编制索引。

当且仅当字符是 UnicodeCategory 中以下类别之一的成员时，该字符才具有关联的数值：DecimalDigitNumber、LetterNumber 或 OtherNumber。

下面的代码示例演示 GetNumericValue。

Imports System

Module GetNumericValueSample

    Sub Main()

        Dim str As String
        str = "input: 1"

        Console.WriteLine(Char.GetNumericValue("8"c))       ' Output: "8"
        Console.WriteLine(Char.GetNumericValue(str, 7))     ' Output: "1"

    End Sub

End Module

using System;

public class GetNumericValueSample {
    public static void Main() {
        string str = "input: 1";

        Console.WriteLine(Char.GetNumericValue('8'));		// Output: "8"
        Console.WriteLine(Char.GetNumericValue(str, 7));	// Output: "1"
    }
}

using namespace System;
int main()
{
   String^ str =  "input: 1";
   Console::WriteLine( Char::GetNumericValue( '8' ) ); // Output: "8"
   Console::WriteLine( Char::GetNumericValue( str, 7 ) ); // Output: "1"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
GetNumericValue 重载
System 命名空间


Char ..::.GetTypeCode 方法

Char
.
.
::
.
GetTypeCode 方法
Char 结构

返回值类型 Char 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.Char。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.GetUnicodeCategory 方法

Char
.
.
::
.
GetUnicodeCategory 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

将一个 Unicode 字符分类到由某个 UnicodeCategory 值标识的组中。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.GetUnicodeCategory 方法 (Char)

Char
.
.
::
.
GetUnicodeCategory 方法 (Char)
Char 结构

将指定的 Unicode 字符分类到由某个 UnicodeCategory 值标识的组中。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetUnicodeCategory ( _
    c As Char _
) As UnicodeCategory
public static UnicodeCategory GetUnicodeCategory(
    char c
)
public:
static UnicodeCategory GetUnicodeCategory(
    wchar_t c
)
static member GetUnicodeCategory :
        c:char -> UnicodeCategory

参数

c
类型： System Char
要分类的 Unicode 字符。

返回值

类型： System.Globalization UnicodeCategory
一个 UnicodeCategory 值，它标识包含 c 的组。

当将特定字符作为参数传递后，GetUnicodeCategory 方法并不总是返回与 CharUnicodeInfo..::.GetUnicodeCategory(Char) 方法相同的 UnicodeCategory 值。CharUnicodeInfo..::.GetUnicodeCategory(Char) 方法旨在反映 Unicode 标准的当前版本。相反，尽管 GetUnicodeCategory 方法通常反映 Unicode 标准的当前版本，但它可能根据标准的上一版本返回字符的类别，或者返回与当前标准不同的类别，以保留向后兼容性。 当将特定字符作为参数传递后，GetUnicodeCategory 方法并不总是返回与 CharUnicodeInfo..::.GetUnicodeCategory(Char) 方法相同的 UnicodeCategory 值。CharUnicodeInfo..::.GetUnicodeCategory(Char) 方法旨在反映 Unicode 标准的当前版本。相反，尽管 GetUnicodeCategory 方法通常反映 Unicode 标准的当前版本，但它可能根据标准的上一版本返回字符的类别，或者返回与当前标准不同的类别，以保留向后兼容性。 当将特定字符作为参数传递后，GetUnicodeCategory 方法并不总是返回与 CharUnicodeInfo..::.GetUnicodeCategory(Char) 方法相同的 UnicodeCategory 值。CharUnicodeInfo..::.GetUnicodeCategory(Char) 方法旨在反映 Unicode 标准的当前版本。相反，尽管 GetUnicodeCategory 方法通常反映 Unicode 标准的当前版本，但它可能根据标准的上一版本返回字符的类别，或者返回与当前标准不同的类别，以保留向后兼容性。

下面的代码示例演示 GetUnicodeCategory。

Imports System

Module GetUnicodeCategorySample

    Sub Main()

        Dim ch2 As Char
        ch2 = "2"c
        Dim str As String
        str = "Upper Case"

        Console.WriteLine(Char.GetUnicodeCategory("a"c))    ' Output: "1" (LowercaseLetter)
        Console.WriteLine(Char.GetUnicodeCategory(ch2))     ' Output: "8" (DecimalDigitNumber)
        Console.WriteLine(Char.GetUnicodeCategory(str, 6))  ' Output: "0" (UppercaseLetter)

    End Sub

End Module

using System;

public class GetUnicodeCategorySample {
    public static void Main() {
        char ch2 = '2';
        string str = "Upper Case";

        Console.WriteLine(Char.GetUnicodeCategory('a'));		// Output: "LowercaseLetter"
        Console.WriteLine(Char.GetUnicodeCategory(ch2));		// Output: "DecimalDigitNumber"
        Console.WriteLine(Char.GetUnicodeCategory(str, 6));		// Output: "UppercaseLetter"
    }
}

using namespace System;
int main()
{
   char ch2 = '2';
   String^ str = "Upper Case";
   Console::WriteLine( Char::GetUnicodeCategory( 'a' ).ToString() ); // Output: S"LowercaseLetter"
   Console::WriteLine( Char::GetUnicodeCategory( ch2 ).ToString() ); // Output: S"DecimalDigitNumber"
   Console::WriteLine( Char::GetUnicodeCategory( str, 6 ).ToString() ); // Output: S"UppercaseLetter"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
GetUnicodeCategory 重载
System 命名空间


Char ..::.GetUnicodeCategory 方法 (String, Int32)

Char
.
.
::
.
GetUnicodeCategory 方法 (String, Int32)
Char 结构

将指定字符串中位于指定位置的字符分类到由一个 UnicodeCategory 值标识的组中。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetUnicodeCategory ( _
    s As String, _
    index As Integer _
) As UnicodeCategory
public static UnicodeCategory GetUnicodeCategory(
    string s,
    int index
)
public:
static UnicodeCategory GetUnicodeCategory(
    String^ s,
    int index
)
static member GetUnicodeCategory :
        s:string *
        index:int -> UnicodeCategory

参数

s
类型： System String
String。
index
类型： System Int32
s 中的字符位置。

返回值

类型： System.Globalization UnicodeCategory
一个 UnicodeCategory 枚举常数，标识包含 s 中位于 index 处的字符的组。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

当将特定字符作为参数传递后，GetUnicodeCategory 方法并不总是返回与 CharUnicodeInfo..::.GetUnicodeCategory(String, Int32) 方法相同的 UnicodeCategory 值。CharUnicodeInfo..::.GetUnicodeCategory(String, Int32) 方法旨在反映 Unicode 标准的当前版本。相反，尽管 GetUnicodeCategory 方法通常反映 Unicode 标准的当前版本，但它可能根据标准的上一版本返回字符的类别，或者返回与当前标准不同的类别，以保留向后兼容性。 当将特定字符作为参数传递后，GetUnicodeCategory 方法并不总是返回与 CharUnicodeInfo..::.GetUnicodeCategory(String, Int32) 方法相同的 UnicodeCategory 值。CharUnicodeInfo..::.GetUnicodeCategory(String, Int32) 方法旨在反映 Unicode 标准的当前版本。相反，尽管 GetUnicodeCategory 方法通常反映 Unicode 标准的当前版本，但它可能根据标准的上一版本返回字符的类别，或者返回与当前标准不同的类别，以保留向后兼容性。 当将特定字符作为参数传递后，GetUnicodeCategory 方法并不总是返回与 CharUnicodeInfo..::.GetUnicodeCategory(String, Int32) 方法相同的 UnicodeCategory 值。CharUnicodeInfo..::.GetUnicodeCategory(String, Int32) 方法旨在反映 Unicode 标准的当前版本。相反，尽管 GetUnicodeCategory 方法通常反映 Unicode 标准的当前版本，但它可能根据标准的上一版本返回字符的类别，或者返回与当前标准不同的类别，以保留向后兼容性。

下面的代码示例演示 GetUnicodeCategory。

Imports System

Module GetUnicodeCategorySample

    Sub Main()

        Dim ch2 As Char
        ch2 = "2"c
        Dim str As String
        str = "Upper Case"

        Console.WriteLine(Char.GetUnicodeCategory("a"c))    ' Output: "1" (LowercaseLetter)
        Console.WriteLine(Char.GetUnicodeCategory(ch2))     ' Output: "8" (DecimalDigitNumber)
        Console.WriteLine(Char.GetUnicodeCategory(str, 6))  ' Output: "0" (UppercaseLetter)

    End Sub

End Module

using System;

public class GetUnicodeCategorySample {
    public static void Main() {
        char ch2 = '2';
        string str = "Upper Case";

        Console.WriteLine(Char.GetUnicodeCategory('a'));		// Output: "LowercaseLetter"
        Console.WriteLine(Char.GetUnicodeCategory(ch2));		// Output: "DecimalDigitNumber"
        Console.WriteLine(Char.GetUnicodeCategory(str, 6));		// Output: "UppercaseLetter"
    }
}

using namespace System;
int main()
{
   char ch2 = '2';
   String^ str = "Upper Case";
   Console::WriteLine( Char::GetUnicodeCategory( 'a' ).ToString() ); // Output: S"LowercaseLetter"
   Console::WriteLine( Char::GetUnicodeCategory( ch2 ).ToString() ); // Output: S"DecimalDigitNumber"
   Console::WriteLine( Char::GetUnicodeCategory( str, 6 ).ToString() ); // Output: S"UppercaseLetter"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
GetUnicodeCategory 重载
System 命名空间


Char ..::.IConvertible ..::.ToBoolean 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意不支持此转换。尝试这样做会引发 InvalidCastException。 注意不支持此转换。尝试这样做会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToByte 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前 Char 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToByte(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToByte(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToByte(Char) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToChar 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
当前 Char 对象的值保持不变。

实现

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToDateTime 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意不支持此转换。尝试这样做会引发 InvalidCastException。 注意不支持此转换。尝试这样做会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不返回任何值。

实现

异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToDecimal 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意不支持此转换。尝试这样做会引发 InvalidCastException。 注意不支持此转换。尝试这样做会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
不返回任何值。

实现

异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToDouble 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意不支持此转换。尝试这样做会引发 InvalidCastException。 注意不支持此转换。尝试这样做会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
不返回任何值。

实现

异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToInt16 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前 Char 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToInt16(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToInt16(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToInt16(Char) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToInt32 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前 Char 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToInt32(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToInt32(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToInt32(Char) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToInt64 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前 Char 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToInt64(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToInt64(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToInt64(Char) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToSByte 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前 Char 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToSByte(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToSByte(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToSByte(Char) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToSingle 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意不支持此转换。尝试这样做会引发 InvalidCastException。 注意不支持此转换。尝试这样做会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
不返回任何值。

实现

异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToType 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
一个 Type 对象。
provider
类型： System IFormatProvider
IFormatProvider 对象。

返回值

类型： System Object
指定类型的对象。

实现

异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | 无法将当前 Char 对象的值转换为 type 参数指定的类型。

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 ChangeType(Object, Type, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 ChangeType(Object, Type, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 ChangeType(Object, Type, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToUInt16 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
IFormatProvider 对象。（由于 provider 参数已被忽略，因此指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） IFormatProvider 对象。（由于 provider 参数已被忽略，因此指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System UInt16
当前 Char 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToUInt16(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToUInt16(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToUInt16(Char) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToUInt32 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
IFormatProvider 对象。（由于 provider 参数已被忽略，因此指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） IFormatProvider 对象。（由于 provider 参数已被忽略，因此指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System UInt32
当前 Char 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToUInt32(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToUInt32(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToUInt32(Char) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IConvertible ..::.ToUInt64 方法

Char
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Char 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
IFormatProvider 对象。（由于 provider 参数已被忽略，因此指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） IFormatProvider 对象。（由于 provider 参数已被忽略，因此指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System UInt64
当前 Char 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToUInt64(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToUInt64(Char) 方法。 此成员是显式的接口成员实现。只能在 Char 实例强制转换为 IConvertible 接口时使用它。建议的替代方法是改为调用 Convert..::.ToUInt64(Char) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsControl 方法

Char
.
.
::
.
IsControl 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示指定的 Unicode 字符是否属于控制字符类别。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsControl 方法 (Char)

Char
.
.
::
.
IsControl 方法 (Char)
Char 结构

指示指定的 Unicode 字符是否属于控制字符类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsControl ( _
    c As Char _
) As Boolean
public static bool IsControl(
    char c
)
public:
static bool IsControl(
    wchar_t c
)
static member IsControl :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是控制字符，则为 true；否则，为 false。

控制字符是非打印和格式设置字符，如 ACK、BEL、CR、FF、LF 和 VT 等。Unicode 标准为控制字符分配了下列码位：从 \U0000 到 \U001F、\U007F 以及从 \U0080 到 \U009F。根据 Unicode 标准，这些值将解释为控制字符，除非应用程序另行定义了其用法。有效控制字符是 UnicodeCategory..::.Control 类别的成员。 控制字符是非打印和格式设置字符，如 ACK、BEL、CR、FF、LF 和 VT 等。Unicode 标准为控制字符分配了下列码位：从 \U0000 到 \U001F、\U007F 以及从 \U0080 到 \U009F。根据 Unicode 标准，这些值将解释为控制字符，除非应用程序另行定义了其用法。有效控制字符是 UnicodeCategory..::.Control 类别的成员。 控制字符是非打印和格式设置字符，如 ACK、BEL、CR、FF、LF 和 VT 等。Unicode 标准为控制字符分配了下列码位：从 \U0000 到 \U001F、\U007F 以及从 \U0080 到 \U009F。根据 Unicode 标准，这些值将解释为控制字符，除非应用程序另行定义了其用法。有效控制字符是 UnicodeCategory..::.Control 类别的成员。 控制字符是非打印和格式设置字符，如 ACK、BEL、CR、FF、LF 和 VT 等。Unicode 标准为控制字符分配了下列码位：从 \U0000 到 \U001F、\U007F 以及从 \U0080 到 \U009F。根据 Unicode 标准，这些值将解释为控制字符，除非应用程序另行定义了其用法。有效控制字符是 UnicodeCategory..::.Control 类别的成员。

下面的示例列出了每个控制字符的 Unicode 码位。

Module ControlChars
   Public Sub Main()
      Dim charsWritten As Integer = 0

      For ctr As Integer = &H0 To &HFFFF
         Dim ch As Char = Convert.ToChar(ctr)

         If Char.IsControl(ch) Then
            Console.Write("\U{0:X4}    ", ctr)
            charsWritten += 1
            If (charsWritten Mod 6) = 0 Then
               Console.WriteLine()
            End If
         End If
      Next
   End Sub
End Module
' The example displays the following output to the console:
'       \U0000    \U0001    \U0002    \U0003    \U0004    \U0005
'       \U0006    \U0007    \U0008    \U0009    \U000A    \U000B
'       \U000C    \U000D    \U000E    \U000F    \U0010    \U0011
'       \U0012    \U0013    \U0014    \U0015    \U0016    \U0017
'       \U0018    \U0019    \U001A    \U001B    \U001C    \U001D
'       \U001E    \U001F    \U007F    \U0080    \U0081    \U0082
'       \U0083    \U0084    \U0085    \U0086    \U0087    \U0088
'       \U0089    \U008A    \U008B    \U008C    \U008D    \U008E
'       \U008F    \U0090    \U0091    \U0092    \U0093    \U0094
'       \U0095    \U0096    \U0097    \U0098    \U0099    \U009A
'       \U009B    \U009C    \U009D    \U009E    \U009F

using System;

public class ControlChars
{
   public static void Main()
   {
      int charsWritten = 0;

      for (int ctr = 0x00; ctr <= 0xFFFF; ctr++)
      {
         char ch = Convert.ToChar(ctr);
         if (char.IsControl(ch))
         {
            Console.Write(@"\U{0:X4}    ", ctr);
            charsWritten++;
            if (charsWritten % 6 == 0)
               Console.WriteLine();
         }
      }
   }
}
// The example displays the following output to the console:
//       \U0000    \U0001    \U0002    \U0003    \U0004    \U0005
//       \U0006    \U0007    \U0008    \U0009    \U000A    \U000B
//       \U000C    \U000D    \U000E    \U000F    \U0010    \U0011
//       \U0012    \U0013    \U0014    \U0015    \U0016    \U0017
//       \U0018    \U0019    \U001A    \U001B    \U001C    \U001D
//       \U001E    \U001F    \U007F    \U0080    \U0081    \U0082
//       \U0083    \U0084    \U0085    \U0086    \U0087    \U0088
//       \U0089    \U008A    \U008B    \U008C    \U008D    \U008E
//       \U008F    \U0090    \U0091    \U0092    \U0093    \U0094
//       \U0095    \U0096    \U0097    \U0098    \U0099    \U009A
//       \U009B    \U009C    \U009D    \U009E    \U009F

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsControl 重载
System 命名空间


Char ..::.IsControl 方法 (String, Int32)

Char
.
.
::
.
IsControl 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置处的字符是否属于控制字符类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsControl ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsControl(
    string s,
    int index
)
public:
static bool IsControl(
    String^ s,
    int index
)
static member IsControl :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于 index 处的字符是控制字符，则为 true；否则，为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

控制字符是非打印和格式设置字符，如 ACK、BEL、CR、FF、LF 和 VT 等。Unicode 标准为控制字符分配了下列码位：从 \U0000 到 \U001F、\U007F 以及从 \U0080 到 \U009F。根据 Unicode 标准，这些值将解释为控制字符，除非应用程序另行定义了其用法。有效控制字符是 UnicodeCategory..::.Control 类别的成员。 控制字符是非打印和格式设置字符，如 ACK、BEL、CR、FF、LF 和 VT 等。Unicode 标准为控制字符分配了下列码位：从 \U0000 到 \U001F、\U007F 以及从 \U0080 到 \U009F。根据 Unicode 标准，这些值将解释为控制字符，除非应用程序另行定义了其用法。有效控制字符是 UnicodeCategory..::.Control 类别的成员。 控制字符是非打印和格式设置字符，如 ACK、BEL、CR、FF、LF 和 VT 等。Unicode 标准为控制字符分配了下列码位：从 \U0000 到 \U001F、\U007F 以及从 \U0080 到 \U009F。根据 Unicode 标准，这些值将解释为控制字符，除非应用程序另行定义了其用法。有效控制字符是 UnicodeCategory..::.Control 类别的成员。 控制字符是非打印和格式设置字符，如 ACK、BEL、CR、FF、LF 和 VT 等。Unicode 标准为控制字符分配了下列码位：从 \U0000 到 \U001F、\U007F 以及从 \U0080 到 \U009F。根据 Unicode 标准，这些值将解释为控制字符，除非应用程序另行定义了其用法。有效控制字符是 UnicodeCategory..::.Control 类别的成员。

下面的示例枚举字符串中的字符，并确定其中是否有任何字符为控制字符。

Module ControlChar
   Public Sub Main()
      Dim sentence As String = "This is a " & vbCrLf & "two-line sentence."
      For ctr As Integer = 0 to sentence.Length - 1
         If Char.IsControl(sentence, ctr) Then
            Console.WriteLine("Control character \U{0} found in position {1}.", _
             Convert.ToInt32(sentence.Chars(ctr)).ToString("X4"), ctr)
          End If
       Next
   End Sub
End Module
' The example displays the following output to the console:
'       Control character \U000D found in position 10.
'       Control character \U000A found in position 11.

using System;

public class ControlChar
{
   public static void Main()
   {
      string sentence = "This is a " + Environment.NewLine + "two-line sentence.";
      for (int ctr = 0; ctr < sentence.Length; ctr++)
      {
         if (Char.IsControl(sentence, ctr))
           Console.WriteLine("Control character \\U{0} found in position {1}.",
             Convert.ToInt32(sentence[ctr]).ToString("X4"), ctr);

      }
   }
}
// The example displays the following output to the console:
//       Control character \U000D found in position 10.
//       Control character \U000A found in position 11.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsControl 重载
System 命名空间


Char ..::.IsDigit 方法

Char
.
.
::
.
IsDigit 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示某个 Unicode 字符是否属于十进制数字类别。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsDigit 方法 (Char)

Char
.
.
::
.
IsDigit 方法 (Char)
Char 结构

指示指定的 Unicode 字符是否属于十进制数字类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDigit ( _
    c As Char _
) As Boolean
public static bool IsDigit(
    char c
)
public:
static bool IsDigit(
    wchar_t c
)
static member IsDigit :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是十进制数字，则为 true；否则，为 false。

此方法确定 Char 是否是以 10 为基的数。它与 IsNumber 进行对比，后者确定 Char 是否属于任何数值 Unicode 类别。数值包括分数、下标、上标、罗马数字、货币分子、循环数和语言特有的数字等字符。 此方法确定 Char 是否是以 10 为基的数。它与 IsNumber 进行对比，后者确定 Char 是否属于任何数值 Unicode 类别。数值包括分数、下标、上标、罗马数字、货币分子、循环数和语言特有的数字等字符。 此方法确定 Char 是否是以 10 为基的数。它与 IsNumber 进行对比，后者确定 Char 是否属于任何数值 Unicode 类别。数值包括分数、下标、上标、罗马数字、货币分子、循环数和语言特有的数字等字符。

有效数字是 UnicodeCategory..::.DecimalDigitNumber 类别的成员。

下面的代码示例演示 IsDigit。

Imports System

Module IsDigitSample

    Sub Main()

        Dim ch8 As Char
        ch8 = "8"c

        Console.WriteLine(Char.IsDigit(ch8))                    ' Output: "True"
        Console.WriteLine(Char.IsDigit("sample string", 6))     ' Output: "False"

    End Sub

End Module

using System;

public class IsDigitSample {
    public static void Main() {
        char ch = '8';

        Console.WriteLine(Char.IsDigit(ch));					// Output: "True"
        Console.WriteLine(Char.IsDigit("sample string", 7));	// Output: "False"
    }
}

using namespace System;
int main()
{
   char ch = '8';
   Console::WriteLine( Char::IsDigit( ch ) ); // Output: "True"
   Console::WriteLine( Char::IsDigit(  "sample string", 7 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsDigit 重载
System 命名空间
Boolean
IsNumber


Char ..::.IsDigit 方法 (String, Int32)

Char
.
.
::
.
IsDigit 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置处的字符是否属于十进制数字类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDigit ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsDigit(
    string s,
    int index
)
public:
static bool IsDigit(
    String^ s,
    int index
)
static member IsDigit :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于 index 处的字符是十进制数字，则为 true；否则，为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

此方法确定 Char 是否是以 10 为基的数。它与 IsNumber 进行对比，后者确定 Char 是否属于任何数值 Unicode 类别。数值包括分数、下标、上标、罗马数字、货币分子、循环数和语言特有的数字等字符。 此方法确定 Char 是否是以 10 为基的数。它与 IsNumber 进行对比，后者确定 Char 是否属于任何数值 Unicode 类别。数值包括分数、下标、上标、罗马数字、货币分子、循环数和语言特有的数字等字符。 此方法确定 Char 是否是以 10 为基的数。它与 IsNumber 进行对比，后者确定 Char 是否属于任何数值 Unicode 类别。数值包括分数、下标、上标、罗马数字、货币分子、循环数和语言特有的数字等字符。

字符串中的字符位置从零开始编制索引。

有效数字是 UnicodeCategory..::.DecimalDigitNumber 类别的成员。

下面的代码示例演示 IsDigit。

Imports System

Module IsDigitSample

    Sub Main()

        Dim ch8 As Char
        ch8 = "8"c

        Console.WriteLine(Char.IsDigit(ch8))                    ' Output: "True"
        Console.WriteLine(Char.IsDigit("sample string", 6))     ' Output: "False"

    End Sub

End Module

using System;

public class IsDigitSample {
    public static void Main() {
        char ch = '8';

        Console.WriteLine(Char.IsDigit(ch));					// Output: "True"
        Console.WriteLine(Char.IsDigit("sample string", 7));	// Output: "False"
    }
}

using namespace System;
int main()
{
   char ch = '8';
   Console::WriteLine( Char::IsDigit( ch ) ); // Output: "True"
   Console::WriteLine( Char::IsDigit(  "sample string", 7 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsDigit 重载
System 命名空间
Boolean
IsNumber


Char ..::.IsHighSurrogate 方法

Char
.
.
::
.
IsHighSurrogate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示指定的 Char 对象是否为高代理项。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsHighSurrogate 方法 (Char)

Char
.
.
::
.
IsHighSurrogate 方法 (Char)
Char 结构

指示指定的 Char 对象是否为高代理项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsHighSurrogate ( _
    c As Char _
) As Boolean
public static bool IsHighSurrogate(
    char c
)
public:
static bool IsHighSurrogate(
    wchar_t c
)
static member IsHighSurrogate :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 参数的数值范围是从 U+D800 到 U+DBFF，则为 true；否则为 false。

除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第一个元素是高代理项。其码位范围介于 U+D800 到 U+DBFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第一个元素是高代理项。其码位范围介于 U+D800 到 U+DBFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第一个元素是高代理项。其码位范围介于 U+D800 到 U+DBFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第一个元素是高代理项。其码位范围介于 U+D800 到 U+DBFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。

下面的代码示例演示 IsHighSurrogate、IsLowSurrogate 和 IsSurrogatePair 方法。

' This example demonstrates the Char.IsLowSurrogate() method
'                                    IsHighSurrogate() method
'                                    IsSurrogatePair() method
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim cHigh As Char = ChrW(&HD800)
      Dim cLow  As Char = ChrW(&HDC00)
      Dim s1 = New [String](New Char() {"a"c, ChrW(&HD800), ChrW(&HDC00), "z"c})
      Dim divider As String = [String].Concat(Environment.NewLine, _
                                              New [String]("-"c, 70), _
                                              Environment.NewLine)

      Console.WriteLine()
      Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", AscW(cHigh))
      Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", AscW(cLow))
      Console.WriteLine()
      Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'")
      Console.WriteLine("Hexadecimal code points of the characters in string, s1: ")
      Dim i As Integer
      For i = 0 To s1.Length - 1
         Console.WriteLine("s1({0}) = {1:X4} ", i, AscW(s1.Chars(i)))
      Next i
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a high surrogate?")
      Console.WriteLine("A1) cLow?  - {0}", [Char].IsHighSurrogate(cLow))
      Console.WriteLine("A2) cHigh? - {0}", [Char].IsHighSurrogate(cHigh))
      Console.WriteLine("A3) s1(0)? - {0}", [Char].IsHighSurrogate(s1, 0))
      Console.WriteLine("A4) s1(1)? - {0}", [Char].IsHighSurrogate(s1, 1))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a low surrogate?")
      Console.WriteLine("B1) cLow?  - {0}", [Char].IsLowSurrogate(cLow))
      Console.WriteLine("B2) cHigh? - {0}", [Char].IsLowSurrogate(cHigh))
      Console.WriteLine("B3) s1(0)? - {0}", [Char].IsLowSurrogate(s1, 0))
      Console.WriteLine("B4) s1(2)? - {0}", [Char].IsLowSurrogate(s1, 2))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following pairs of characters a surrogate pair?")
      Console.WriteLine("C1) cHigh and cLow?  - {0}", [Char].IsSurrogatePair(cHigh, cLow))
      Console.WriteLine("C2) s1(0) and s1(1)? - {0}", [Char].IsSurrogatePair(s1, 0))
      Console.WriteLine("C3) s1(1) and s1(2)? - {0}", [Char].IsSurrogatePair(s1, 1))
      Console.WriteLine("C4) s1(2) and s1(3)? - {0}", [Char].IsSurrogatePair(s1, 2))
      Console.WriteLine(divider)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Hexadecimal code point of the character, cHigh: D800
'Hexadecimal code point of the character, cLow:  DC00
'
'Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
'Hexadecimal code points of the characters in string, s1:
's1(0) = 0061
's1(1) = D800
's1(2) = DC00
's1(3) = 007A
'
'----------------------------------------------------------------------
'
'Is each of the following characters a high surrogate?
'A1) cLow?  - False
'A2) cHigh? - True
'A3) s1(0)? - False
'A4) s1(1)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following characters a low surrogate?
'B1) cLow?  - True
'B2) cHigh? - False
'B3) s1(0)? - False
'B4) s1(2)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following pairs of characters a surrogate pair?
'C1) cHigh and cLow?  - True
'C2) s1(0) and s1(1)? - False
'C3) s1(1) and s1(2)? - True
'C4) s1(2) and s1(3)? - False
'
'----------------------------------------------------------------------
'

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using System;

class Sample
{
    public static void Main()
    {
    char cHigh = '\uD800';
    char cLow  = '\uDC00';
    string s1  = new String(new char[] {'a', '\uD800', '\uDC00', 'z'});
    string divider = String.Concat( Environment.NewLine, new String('-', 70),
                                    Environment.NewLine);

    Console.WriteLine();
    Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh);
    Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow);
    Console.WriteLine();
    Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'");
    Console.WriteLine("Hexadecimal code points of the characters in string, s1: ");
    for(int i = 0; i < s1.Length; i++)
        {
        Console.WriteLine("s1[{0}] = {1:X4} ", i, (int)s1[i]);
        }
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a high surrogate?");
    Console.WriteLine("A1) cLow?  - {0}", Char.IsHighSurrogate(cLow));
    Console.WriteLine("A2) cHigh? - {0}", Char.IsHighSurrogate(cHigh));
    Console.WriteLine("A3) s1[0]? - {0}", Char.IsHighSurrogate(s1, 0));
    Console.WriteLine("A4) s1[1]? - {0}", Char.IsHighSurrogate(s1, 1));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a low surrogate?");
    Console.WriteLine("B1) cLow?  - {0}", Char.IsLowSurrogate(cLow));
    Console.WriteLine("B2) cHigh? - {0}", Char.IsLowSurrogate(cHigh));
    Console.WriteLine("B3) s1[0]? - {0}", Char.IsLowSurrogate(s1, 0));
    Console.WriteLine("B4) s1[2]? - {0}", Char.IsLowSurrogate(s1, 2));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following pairs of characters a surrogate pair?");
    Console.WriteLine("C1) cHigh and cLow?  - {0}", Char.IsSurrogatePair(cHigh, cLow));
    Console.WriteLine("C2) s1[0] and s1[1]? - {0}", Char.IsSurrogatePair(s1, 0));
    Console.WriteLine("C3) s1[1] and s1[2]? - {0}", Char.IsSurrogatePair(s1, 1));
    Console.WriteLine("C4) s1[2] and s1[3]? - {0}", Char.IsSurrogatePair(s1, 2));
    Console.WriteLine(divider);
    }
}
/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using namespace System;
int main()
{
   Char cHigh = L'\xD800';
   Char cLow = L'\xDC00';
   array<Char>^temp0 = {L'a',L'\xD800',L'\xDC00',L'z'};
   String^ s1 = gcnew String( temp0 );
   String^ divider = String::Concat( Environment::NewLine, gcnew String( '-',70 ), Environment::NewLine );
   Console::WriteLine();
   Console::WriteLine( "Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh );
   Console::WriteLine( "Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow );
   Console::WriteLine();
   Console::WriteLine( "Characters in string, s1: 'a', high surrogate, low surrogate, 'z'" );
   Console::WriteLine( "Hexadecimal code points of the characters in string, s1: " );
   for ( int i = 0; i < s1->Length; i++ )
   {
      Console::WriteLine( "s1[{0}] = {1:X4} ", i, (int)s1[ i ] );
   }
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a high surrogate?" );
   Console::WriteLine( "A1) cLow?  - {0}", Char::IsHighSurrogate( cLow ) );
   Console::WriteLine( "A2) cHigh? - {0}", Char::IsHighSurrogate( cHigh ) );
   Console::WriteLine( "A3) s1[0]? - {0}", Char::IsHighSurrogate( s1, 0 ) );
   Console::WriteLine( "A4) s1[1]? - {0}", Char::IsHighSurrogate( s1, 1 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a low surrogate?" );
   Console::WriteLine( "B1) cLow?  - {0}", Char::IsLowSurrogate( cLow ) );
   Console::WriteLine( "B2) cHigh? - {0}", Char::IsLowSurrogate( cHigh ) );
   Console::WriteLine( "B3) s1[0]? - {0}", Char::IsLowSurrogate( s1, 0 ) );
   Console::WriteLine( "B4) s1[2]? - {0}", Char::IsLowSurrogate( s1, 2 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following pairs of characters a surrogate pair?" );
   Console::WriteLine( "C1) cHigh and cLow?  - {0}", Char::IsSurrogatePair( cHigh, cLow ) );
   Console::WriteLine( "C2) s1[0] and s1[1]? - {0}", Char::IsSurrogatePair( s1, 0 ) );
   Console::WriteLine( "C3) s1[1] and s1[2]? - {0}", Char::IsSurrogatePair( s1, 1 ) );
   Console::WriteLine( "C4) s1[2] and s1[3]? - {0}", Char::IsSurrogatePair( s1, 2 ) );
   Console::WriteLine( divider );
}

/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
IsHighSurrogate 重载
System 命名空间


Char ..::.IsHighSurrogate 方法 (String, Int32)

Char
.
.
::
.
IsHighSurrogate 方法 (String, Int32)
Char 结构

指示字符串中指定位置处的 Char 对象是否为高代理项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsHighSurrogate ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsHighSurrogate(
    string s,
    int index
)
public:
static bool IsHighSurrogate(
    String^ s,
    int index
)
static member IsHighSurrogate :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 参数中指定字符的数值范围从 U+D800 到 U+DBFF，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 不是 s 中的位置。

index 参数从零开始。

除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第一个元素是高代理项。其码位范围介于 U+D800 到 U+DBFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第一个元素是高代理项。其码位范围介于 U+D800 到 U+DBFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第一个元素是高代理项。其码位范围介于 U+D800 到 U+DBFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第一个元素是高代理项。其码位范围介于 U+D800 到 U+DBFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。

下面的代码示例演示 IsHighSurrogate、IsLowSurrogate 和 IsSurrogatePair 方法。

' This example demonstrates the Char.IsLowSurrogate() method
'                                    IsHighSurrogate() method
'                                    IsSurrogatePair() method
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim cHigh As Char = ChrW(&HD800)
      Dim cLow  As Char = ChrW(&HDC00)
      Dim s1 = New [String](New Char() {"a"c, ChrW(&HD800), ChrW(&HDC00), "z"c})
      Dim divider As String = [String].Concat(Environment.NewLine, _
                                              New [String]("-"c, 70), _
                                              Environment.NewLine)

      Console.WriteLine()
      Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", AscW(cHigh))
      Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", AscW(cLow))
      Console.WriteLine()
      Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'")
      Console.WriteLine("Hexadecimal code points of the characters in string, s1: ")
      Dim i As Integer
      For i = 0 To s1.Length - 1
         Console.WriteLine("s1({0}) = {1:X4} ", i, AscW(s1.Chars(i)))
      Next i
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a high surrogate?")
      Console.WriteLine("A1) cLow?  - {0}", [Char].IsHighSurrogate(cLow))
      Console.WriteLine("A2) cHigh? - {0}", [Char].IsHighSurrogate(cHigh))
      Console.WriteLine("A3) s1(0)? - {0}", [Char].IsHighSurrogate(s1, 0))
      Console.WriteLine("A4) s1(1)? - {0}", [Char].IsHighSurrogate(s1, 1))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a low surrogate?")
      Console.WriteLine("B1) cLow?  - {0}", [Char].IsLowSurrogate(cLow))
      Console.WriteLine("B2) cHigh? - {0}", [Char].IsLowSurrogate(cHigh))
      Console.WriteLine("B3) s1(0)? - {0}", [Char].IsLowSurrogate(s1, 0))
      Console.WriteLine("B4) s1(2)? - {0}", [Char].IsLowSurrogate(s1, 2))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following pairs of characters a surrogate pair?")
      Console.WriteLine("C1) cHigh and cLow?  - {0}", [Char].IsSurrogatePair(cHigh, cLow))
      Console.WriteLine("C2) s1(0) and s1(1)? - {0}", [Char].IsSurrogatePair(s1, 0))
      Console.WriteLine("C3) s1(1) and s1(2)? - {0}", [Char].IsSurrogatePair(s1, 1))
      Console.WriteLine("C4) s1(2) and s1(3)? - {0}", [Char].IsSurrogatePair(s1, 2))
      Console.WriteLine(divider)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Hexadecimal code point of the character, cHigh: D800
'Hexadecimal code point of the character, cLow:  DC00
'
'Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
'Hexadecimal code points of the characters in string, s1:
's1(0) = 0061
's1(1) = D800
's1(2) = DC00
's1(3) = 007A
'
'----------------------------------------------------------------------
'
'Is each of the following characters a high surrogate?
'A1) cLow?  - False
'A2) cHigh? - True
'A3) s1(0)? - False
'A4) s1(1)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following characters a low surrogate?
'B1) cLow?  - True
'B2) cHigh? - False
'B3) s1(0)? - False
'B4) s1(2)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following pairs of characters a surrogate pair?
'C1) cHigh and cLow?  - True
'C2) s1(0) and s1(1)? - False
'C3) s1(1) and s1(2)? - True
'C4) s1(2) and s1(3)? - False
'
'----------------------------------------------------------------------
'

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using System;

class Sample
{
    public static void Main()
    {
    char cHigh = '\uD800';
    char cLow  = '\uDC00';
    string s1  = new String(new char[] {'a', '\uD800', '\uDC00', 'z'});
    string divider = String.Concat( Environment.NewLine, new String('-', 70),
                                    Environment.NewLine);

    Console.WriteLine();
    Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh);
    Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow);
    Console.WriteLine();
    Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'");
    Console.WriteLine("Hexadecimal code points of the characters in string, s1: ");
    for(int i = 0; i < s1.Length; i++)
        {
        Console.WriteLine("s1[{0}] = {1:X4} ", i, (int)s1[i]);
        }
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a high surrogate?");
    Console.WriteLine("A1) cLow?  - {0}", Char.IsHighSurrogate(cLow));
    Console.WriteLine("A2) cHigh? - {0}", Char.IsHighSurrogate(cHigh));
    Console.WriteLine("A3) s1[0]? - {0}", Char.IsHighSurrogate(s1, 0));
    Console.WriteLine("A4) s1[1]? - {0}", Char.IsHighSurrogate(s1, 1));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a low surrogate?");
    Console.WriteLine("B1) cLow?  - {0}", Char.IsLowSurrogate(cLow));
    Console.WriteLine("B2) cHigh? - {0}", Char.IsLowSurrogate(cHigh));
    Console.WriteLine("B3) s1[0]? - {0}", Char.IsLowSurrogate(s1, 0));
    Console.WriteLine("B4) s1[2]? - {0}", Char.IsLowSurrogate(s1, 2));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following pairs of characters a surrogate pair?");
    Console.WriteLine("C1) cHigh and cLow?  - {0}", Char.IsSurrogatePair(cHigh, cLow));
    Console.WriteLine("C2) s1[0] and s1[1]? - {0}", Char.IsSurrogatePair(s1, 0));
    Console.WriteLine("C3) s1[1] and s1[2]? - {0}", Char.IsSurrogatePair(s1, 1));
    Console.WriteLine("C4) s1[2] and s1[3]? - {0}", Char.IsSurrogatePair(s1, 2));
    Console.WriteLine(divider);
    }
}
/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using namespace System;
int main()
{
   Char cHigh = L'\xD800';
   Char cLow = L'\xDC00';
   array<Char>^temp0 = {L'a',L'\xD800',L'\xDC00',L'z'};
   String^ s1 = gcnew String( temp0 );
   String^ divider = String::Concat( Environment::NewLine, gcnew String( '-',70 ), Environment::NewLine );
   Console::WriteLine();
   Console::WriteLine( "Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh );
   Console::WriteLine( "Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow );
   Console::WriteLine();
   Console::WriteLine( "Characters in string, s1: 'a', high surrogate, low surrogate, 'z'" );
   Console::WriteLine( "Hexadecimal code points of the characters in string, s1: " );
   for ( int i = 0; i < s1->Length; i++ )
   {
      Console::WriteLine( "s1[{0}] = {1:X4} ", i, (int)s1[ i ] );
   }
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a high surrogate?" );
   Console::WriteLine( "A1) cLow?  - {0}", Char::IsHighSurrogate( cLow ) );
   Console::WriteLine( "A2) cHigh? - {0}", Char::IsHighSurrogate( cHigh ) );
   Console::WriteLine( "A3) s1[0]? - {0}", Char::IsHighSurrogate( s1, 0 ) );
   Console::WriteLine( "A4) s1[1]? - {0}", Char::IsHighSurrogate( s1, 1 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a low surrogate?" );
   Console::WriteLine( "B1) cLow?  - {0}", Char::IsLowSurrogate( cLow ) );
   Console::WriteLine( "B2) cHigh? - {0}", Char::IsLowSurrogate( cHigh ) );
   Console::WriteLine( "B3) s1[0]? - {0}", Char::IsLowSurrogate( s1, 0 ) );
   Console::WriteLine( "B4) s1[2]? - {0}", Char::IsLowSurrogate( s1, 2 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following pairs of characters a surrogate pair?" );
   Console::WriteLine( "C1) cHigh and cLow?  - {0}", Char::IsSurrogatePair( cHigh, cLow ) );
   Console::WriteLine( "C2) s1[0] and s1[1]? - {0}", Char::IsSurrogatePair( s1, 0 ) );
   Console::WriteLine( "C3) s1[1] and s1[2]? - {0}", Char::IsSurrogatePair( s1, 1 ) );
   Console::WriteLine( "C4) s1[2] and s1[3]? - {0}", Char::IsSurrogatePair( s1, 2 ) );
   Console::WriteLine( divider );
}

/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
IsHighSurrogate 重载
System 命名空间


Char ..::.IsLetter 方法

Char
.
.
::
.
IsLetter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示是否将 Unicode 字符分类为 Unicode 字母。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsLetter 方法 (Char)

Char
.
.
::
.
IsLetter 方法 (Char)
Char 结构

指示是否将指定的 Unicode 字符分类为 Unicode 字母。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsLetter ( _
    c As Char _
) As Boolean
public static bool IsLetter(
    char c
)
public:
static bool IsLetter(
    wchar_t c
)
static member IsLetter :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是字母，则为 true；否则为 false。

此方法确定 Char 是否是任何 Unicode 字母类别的成员。Unicode 字母包括以下类别： 此方法确定 Char 是否是任何 Unicode 字母类别的成员。Unicode 字母包括以下类别：

  • 大写字母，如 U+0041 (LATIN CAPITAL LETTER A) 到 U+005A (LATIN CAPITAL LETTER Z) 或 U+0400 (CYRILLIC CAPITAL LETTER IE WITH GRAVE) 到 U+042F (CYRILLIC CAPITAL LETTER YA)。这些字符是 UnicodeCategory..::.UppercaseLetter 类别的成员。 大写字母，如 U+0041 (LATIN CAPITAL LETTER A) 到 U+005A (LATIN CAPITAL LETTER Z) 或 U+0400 (CYRILLIC CAPITAL LETTER IE WITH GRAVE) 到 U+042F (CYRILLIC CAPITAL LETTER YA)。这些字符是 UnicodeCategory..::.UppercaseLetter 类别的成员。

  • 小写字母，如 U+0061 (LATIN SMALL LETTER A) 到 U+007A (LATIN SMALL LETTER Z) 或 U+03AC (GREEK SMALL LETTER ALPHA WITH TONOS) 到 U+03CE (GREEK SMALL LETTER OMEGA WITH TONOS)。这些字符是 UnicodeCategory..::.LowercaseLetter 类别的成员。 小写字母，如 U+0061 (LATIN SMALL LETTER A) 到 U+007A (LATIN SMALL LETTER Z) 或 U+03AC (GREEK SMALL LETTER ALPHA WITH TONOS) 到 U+03CE (GREEK SMALL LETTER OMEGA WITH TONOS)。这些字符是 UnicodeCategory..::.LowercaseLetter 类别的成员。

  • 词首大写字母，如 U+01C5 (LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON) 或 U+1FFC (GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI)。这些字符是 UnicodeCategory..::.TitlecaseLetter 类别的成员。 词首大写字母，如 U+01C5 (LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON) 或 U+1FFC (GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI)。这些字符是 UnicodeCategory..::.TitlecaseLetter 类别的成员。

  • 修饰符，如 U+02B0 (MODIFIER LETTER SMALL H) 到 U+02C1 (MODIFIER LETTER REVERSED GLOTTAL STOP) 或 U+1D2C (MODIFIER LETTER CAPITAL A) 到 U+1D61 (MODIFIER LETTER SMALL CHI)。这些字符是 UnicodeCategory..::.ModifierLetter 类别的成员。 修饰符，如 U+02B0 (MODIFIER LETTER SMALL H) 到 U+02C1 (MODIFIER LETTER REVERSED GLOTTAL STOP) 或 U+1D2C (MODIFIER LETTER CAPITAL A) 到 U+1D61 (MODIFIER LETTER SMALL CHI)。这些字符是 UnicodeCategory..::.ModifierLetter 类别的成员。

  • 其他字母，如 U+05D0 (HEBREW LETTER ALEF) 到 U+05EA (HEBREW LETTER TAV)、U+0621 (ARABIC LETTER HAMZA) 到 U+063A (ARABIC LETTER GHAIN) 或 U+4E00 (<CJK Ideograph, First>) 到 U+9FC3 (<CJK Ideograph, Last>)。这些字符是 UnicodeCategory..::.OtherLetter 类别的成员。 其他字母，如 U+05D0 (HEBREW LETTER ALEF) 到 U+05EA (HEBREW LETTER TAV)、U+0621 (ARABIC LETTER HAMZA) 到 U+063A (ARABIC LETTER GHAIN) 或 U+4E00 (<CJK Ideograph, First>) 到 U+9FC3 (<CJK Ideograph, Last>)。这些字符是 UnicodeCategory..::.OtherLetter 类别的成员。

下面的代码示例演示 IsLetter。

Imports System

Module IsLetterSample

    Sub Main()

        Dim ch8 As Char
        ch8 = "8"c

        Console.WriteLine(Char.IsLetter(ch8))                   ' Output: "False"
        Console.WriteLine(Char.IsLetter("sample string", 5))    ' Output: "True"

    End Sub

End Module

using System;

public class IsLetterSample {
    public static void Main() {
        char ch = '8';

        Console.WriteLine(Char.IsLetter(ch));					// False
        Console.WriteLine(Char.IsLetter("sample string", 7));	// True
    }
}

using namespace System;
int main()
{
   char ch = '8';
   Console::WriteLine( Char::IsLetter( ch ) ); // False
   Console::WriteLine( Char::IsLetter(  "sample string", 7 ) ); // True
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsLetter 重载
System 命名空间
Boolean


Char ..::.IsLetter 方法 (String, Int32)

Char
.
.
::
.
IsLetter 方法 (String, Int32)
Char 结构

指示是否将指定字符串中指定位置处的字符分类为 Unicode 字母。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsLetter ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsLetter(
    string s,
    int index
)
public:
static bool IsLetter(
    String^ s,
    int index
)
static member IsLetter :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中 index 位置处的字符是字母，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

此方法确定字符串中位于指定索引位置处的字符是否是任何 Unicode 字母类别的成员。Unicode 字母包括以下类别： 此方法确定字符串中位于指定索引位置处的字符是否是任何 Unicode 字母类别的成员。Unicode 字母包括以下类别：

  • 大写字母，如 U+0041 (LATIN CAPITAL LETTER A) 到 U+005A (LATIN CAPITAL LETTER Z) 或 U+0400 (CYRILLIC CAPITAL LETTER IE WITH GRAVE) 到 U+042F (CYRILLIC CAPITAL LETTER YA)。这些字符是 UnicodeCategory..::.UppercaseLetter 类别的成员。 大写字母，如 U+0041 (LATIN CAPITAL LETTER A) 到 U+005A (LATIN CAPITAL LETTER Z) 或 U+0400 (CYRILLIC CAPITAL LETTER IE WITH GRAVE) 到 U+042F (CYRILLIC CAPITAL LETTER YA)。这些字符是 UnicodeCategory..::.UppercaseLetter 类别的成员。

  • 小写字母，如 U+0061 (LATIN SMALL LETTER A) 到 U+007A (LATIN SMALL LETTER Z) 或 U+03AC (GREEK SMALL LETTER ALPHA WITH TONOS) 到 U+03CE (GREEK SMALL LETTER OMEGA WITH TONOS)。这些字符是 UnicodeCategory..::.LowercaseLetter 类别的成员。 小写字母，如 U+0061 (LATIN SMALL LETTER A) 到 U+007A (LATIN SMALL LETTER Z) 或 U+03AC (GREEK SMALL LETTER ALPHA WITH TONOS) 到 U+03CE (GREEK SMALL LETTER OMEGA WITH TONOS)。这些字符是 UnicodeCategory..::.LowercaseLetter 类别的成员。

  • 词首大写字母，如 U+01C5 (LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON) 或 U+1FFC (GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI)。这些字符是 UnicodeCategory..::.TitlecaseLetter 类别的成员。 词首大写字母，如 U+01C5 (LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON) 或 U+1FFC (GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI)。这些字符是 UnicodeCategory..::.TitlecaseLetter 类别的成员。

  • 修饰符，如 U+02B0 (MODIFIER LETTER SMALL H) 到 U+02C1 (MODIFIER LETTER REVERSED GLOTTAL STOP) 或 U+1D2C (MODIFIER LETTER CAPITAL A) 到 U+1D61 (MODIFIER LETTER SMALL CHI)。这些字符是 UnicodeCategory..::.ModifierLetter 类别的成员。 修饰符，如 U+02B0 (MODIFIER LETTER SMALL H) 到 U+02C1 (MODIFIER LETTER REVERSED GLOTTAL STOP) 或 U+1D2C (MODIFIER LETTER CAPITAL A) 到 U+1D61 (MODIFIER LETTER SMALL CHI)。这些字符是 UnicodeCategory..::.ModifierLetter 类别的成员。

  • 其他字母，如 U+05D0 (HEBREW LETTER ALEF) 到 U+05EA (HEBREW LETTER TAV)、U+0621 (ARABIC LETTER HAMZA) 到 U+063A (ARABIC LETTER GHAIN) 或 U+4E00 (<CJK Ideograph, First>) 到 U+9FC3 (<CJK Ideograph, Last>)。这些字符是 UnicodeCategory..::.OtherLetter 类别的成员。 其他字母，如 U+05D0 (HEBREW LETTER ALEF) 到 U+05EA (HEBREW LETTER TAV)、U+0621 (ARABIC LETTER HAMZA) 到 U+063A (ARABIC LETTER GHAIN) 或 U+4E00 (<CJK Ideograph, First>) 到 U+9FC3 (<CJK Ideograph, Last>)。这些字符是 UnicodeCategory..::.OtherLetter 类别的成员。

下面的代码示例演示 IsLetter。

Imports System

Module IsLetterSample

    Sub Main()

        Dim ch8 As Char
        ch8 = "8"c

        Console.WriteLine(Char.IsLetter(ch8))                   ' Output: "False"
        Console.WriteLine(Char.IsLetter("sample string", 5))    ' Output: "True"

    End Sub

End Module

using System;

public class IsLetterSample {
    public static void Main() {
        char ch = '8';

        Console.WriteLine(Char.IsLetter(ch));					// False
        Console.WriteLine(Char.IsLetter("sample string", 7));	// True
    }
}

using namespace System;
int main()
{
   char ch = '8';
   Console::WriteLine( Char::IsLetter( ch ) ); // False
   Console::WriteLine( Char::IsLetter(  "sample string", 7 ) ); // True
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsLetter 重载
System 命名空间
Boolean


Char ..::.IsLetterOrDigit 方法

Char
.
.
::
.
IsLetterOrDigit 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示将 Unicode 字符分类为字母还是十进制数字。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsLetterOrDigit 方法 (Char)

Char
.
.
::
.
IsLetterOrDigit 方法 (Char)
Char 结构

指示将指定的 Unicode 字符分类为字母还是十进制数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsLetterOrDigit ( _
    c As Char _
) As Boolean
public static bool IsLetterOrDigit(
    char c
)
public:
static bool IsLetterOrDigit(
    wchar_t c
)
static member IsLetterOrDigit :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是字母或十进制数字，则为 true；否则为 false。

有效的字母和十进制数字是 UnicodeCategory 中以下类别的成员：UppercaseLetter、LowercaseLetter、TitlecaseLetter、ModifierLetter、OtherLetter 或 DecimalDigitNumber。

下面的代码示例演示 IsLetterOrDigit。

imports System

Module IsLetterOrDigitSample

    Sub Main()

        Dim str As String
        str = "newline:" + vbNewLine

        Console.WriteLine(Char.IsLetterOrDigit("8"c))       ' Output: "True"
        Console.WriteLine(Char.IsLetterOrDigit(str, 8))     ' Output: "False", because it's a NewLine

    End Sub

End Module

using System;

public class IsLetterOrDigitSample {
    public static void Main() {
        string str = "newline:\n";

        Console.WriteLine(Char.IsLetterOrDigit('8'));		// Output: "True"
        Console.WriteLine(Char.IsLetterOrDigit(str, 8));	// Output: "False", because it's a newline
    }
}

using namespace System;
int main()
{
   String^ str =  "newline:\n";
   Console::WriteLine( Char::IsLetterOrDigit( '8' ) ); // Output: "True"
   Console::WriteLine( Char::IsLetterOrDigit( str, 8 ) ); // Output: "False", because it's a newline
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsLetterOrDigit 重载
System 命名空间
Boolean


Char ..::.IsLetterOrDigit 方法 (String, Int32)

Char
.
.
::
.
IsLetterOrDigit 方法 (String, Int32)
Char 结构

指示将指定字符串中指定位置处的字符分类为字母还是十进制数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsLetterOrDigit ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsLetterOrDigit(
    string s,
    int index
)
public:
static bool IsLetterOrDigit(
    String^ s,
    int index
)
static member IsLetterOrDigit :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中 index 位置处的字符是字母或十进制数字，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

有效的字母和十进制数字是 UnicodeCategory 中以下类别的成员：UppercaseLetter、LowercaseLetter、TitlecaseLetter、ModifierLetter、OtherLetter 或 DecimalDigitNumber。

下面的代码示例演示 IsLetterOrDigit。

imports System

Module IsLetterOrDigitSample

    Sub Main()

        Dim str As String
        str = "newline:" + vbNewLine

        Console.WriteLine(Char.IsLetterOrDigit("8"c))       ' Output: "True"
        Console.WriteLine(Char.IsLetterOrDigit(str, 8))     ' Output: "False", because it's a NewLine

    End Sub

End Module

using System;

public class IsLetterOrDigitSample {
    public static void Main() {
        string str = "newline:\n";

        Console.WriteLine(Char.IsLetterOrDigit('8'));		// Output: "True"
        Console.WriteLine(Char.IsLetterOrDigit(str, 8));	// Output: "False", because it's a newline
    }
}

using namespace System;
int main()
{
   String^ str =  "newline:\n";
   Console::WriteLine( Char::IsLetterOrDigit( '8' ) ); // Output: "True"
   Console::WriteLine( Char::IsLetterOrDigit( str, 8 ) ); // Output: "False", because it's a newline
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsLetterOrDigit 重载
System 命名空间
Boolean


Char ..::.IsLower 方法

Char
.
.
::
.
IsLower 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示某个 Unicode 字符是否属于小写字母类别。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsLower 方法 (Char)

Char
.
.
::
.
IsLower 方法 (Char)
Char 结构

指示指定的 Unicode 字符是否属于小写字母类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsLower ( _
    c As Char _
) As Boolean
public static bool IsLower(
    char c
)
public:
static bool IsLower(
    wchar_t c
)
static member IsLower :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是小写字母，则为 true；否则，为 false。

有效的小写字母是 UnicodeCategory 中以下类别的成员：LowercaseLetter。

下面的代码示例演示 IsLower。

Imports System

Module IsLowerSample

    Sub Main()

        Dim ch As Char
        ch = "a"c

        Console.WriteLine(Char.IsLower(ch))                 ' Output: "True"
        Console.WriteLine(Char.IsLower("upperCase", 5))     ' Output: "False"

    End Sub

End Module

using System;

public class IsLowerSample {
    public static void Main() {
        char ch = 'a';

        Console.WriteLine(Char.IsLower(ch));				// Output: "True"
        Console.WriteLine(Char.IsLower("upperCase", 5));	// Output: "False"
    }
}

using namespace System;
int main()
{
   char ch = 'a';
   Console::WriteLine( Char::IsLower( ch ) ); // Output: "True"
   Console::WriteLine( Char::IsLower(  "upperCase", 5 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsLower 重载
System 命名空间
Boolean
IsUpper


Char ..::.IsLower 方法 (String, Int32)

Char
.
.
::
.
IsLower 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置处的字符是否属于小写字母类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsLower ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsLower(
    string s,
    int index
)
public:
static bool IsLower(
    String^ s,
    int index
)
static member IsLower :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于 index 处的字符是小写字母，则为 true；否则，为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

有效的小写字母是 UnicodeCategory 中以下类别的成员：LowercaseLetter。

下面的代码示例演示 IsLower。

Imports System

Module IsLowerSample

    Sub Main()

        Dim ch As Char
        ch = "a"c

        Console.WriteLine(Char.IsLower(ch))                 ' Output: "True"
        Console.WriteLine(Char.IsLower("upperCase", 5))     ' Output: "False"

    End Sub

End Module

using System;

public class IsLowerSample {
    public static void Main() {
        char ch = 'a';

        Console.WriteLine(Char.IsLower(ch));				// Output: "True"
        Console.WriteLine(Char.IsLower("upperCase", 5));	// Output: "False"
    }
}

using namespace System;
int main()
{
   char ch = 'a';
   Console::WriteLine( Char::IsLower( ch ) ); // Output: "True"
   Console::WriteLine( Char::IsLower(  "upperCase", 5 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsLower 重载
System 命名空间
Boolean
String
IsUpper


Char ..::.IsLowSurrogate 方法

Char
.
.
::
.
IsLowSurrogate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示指定的 Char 对象是否为低代理项。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsLowSurrogate 方法 (Char)

Char
.
.
::
.
IsLowSurrogate 方法 (Char)
Char 结构

指示指定的 Char 对象是否为低代理项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsLowSurrogate ( _
    c As Char _
) As Boolean
public static bool IsLowSurrogate(
    char c
)
public:
static bool IsLowSurrogate(
    wchar_t c
)
static member IsLowSurrogate :
        c:char -> bool

参数

c
类型： System Char
要计算的字符。

返回值

类型： System Boolean
如果 c 参数的数值范围是从 U+DC00 到 U+DFFF，则为 true；否则为 false。

除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第二个元素是低代理项。其码位范围介于 U+DC00 到 U+DFFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第二个元素是低代理项。其码位范围介于 U+DC00 到 U+DFFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第二个元素是低代理项。其码位范围介于 U+DC00 到 U+DFFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第二个元素是低代理项。其码位范围介于 U+DC00 到 U+DFFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。

下面的代码示例演示 IsHighSurrogate、IsLowSurrogate 和 IsSurrogatePair 方法。

' This example demonstrates the Char.IsLowSurrogate() method
'                                    IsHighSurrogate() method
'                                    IsSurrogatePair() method
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim cHigh As Char = ChrW(&HD800)
      Dim cLow  As Char = ChrW(&HDC00)
      Dim s1 = New [String](New Char() {"a"c, ChrW(&HD800), ChrW(&HDC00), "z"c})
      Dim divider As String = [String].Concat(Environment.NewLine, _
                                              New [String]("-"c, 70), _
                                              Environment.NewLine)

      Console.WriteLine()
      Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", AscW(cHigh))
      Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", AscW(cLow))
      Console.WriteLine()
      Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'")
      Console.WriteLine("Hexadecimal code points of the characters in string, s1: ")
      Dim i As Integer
      For i = 0 To s1.Length - 1
         Console.WriteLine("s1({0}) = {1:X4} ", i, AscW(s1.Chars(i)))
      Next i
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a high surrogate?")
      Console.WriteLine("A1) cLow?  - {0}", [Char].IsHighSurrogate(cLow))
      Console.WriteLine("A2) cHigh? - {0}", [Char].IsHighSurrogate(cHigh))
      Console.WriteLine("A3) s1(0)? - {0}", [Char].IsHighSurrogate(s1, 0))
      Console.WriteLine("A4) s1(1)? - {0}", [Char].IsHighSurrogate(s1, 1))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a low surrogate?")
      Console.WriteLine("B1) cLow?  - {0}", [Char].IsLowSurrogate(cLow))
      Console.WriteLine("B2) cHigh? - {0}", [Char].IsLowSurrogate(cHigh))
      Console.WriteLine("B3) s1(0)? - {0}", [Char].IsLowSurrogate(s1, 0))
      Console.WriteLine("B4) s1(2)? - {0}", [Char].IsLowSurrogate(s1, 2))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following pairs of characters a surrogate pair?")
      Console.WriteLine("C1) cHigh and cLow?  - {0}", [Char].IsSurrogatePair(cHigh, cLow))
      Console.WriteLine("C2) s1(0) and s1(1)? - {0}", [Char].IsSurrogatePair(s1, 0))
      Console.WriteLine("C3) s1(1) and s1(2)? - {0}", [Char].IsSurrogatePair(s1, 1))
      Console.WriteLine("C4) s1(2) and s1(3)? - {0}", [Char].IsSurrogatePair(s1, 2))
      Console.WriteLine(divider)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Hexadecimal code point of the character, cHigh: D800
'Hexadecimal code point of the character, cLow:  DC00
'
'Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
'Hexadecimal code points of the characters in string, s1:
's1(0) = 0061
's1(1) = D800
's1(2) = DC00
's1(3) = 007A
'
'----------------------------------------------------------------------
'
'Is each of the following characters a high surrogate?
'A1) cLow?  - False
'A2) cHigh? - True
'A3) s1(0)? - False
'A4) s1(1)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following characters a low surrogate?
'B1) cLow?  - True
'B2) cHigh? - False
'B3) s1(0)? - False
'B4) s1(2)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following pairs of characters a surrogate pair?
'C1) cHigh and cLow?  - True
'C2) s1(0) and s1(1)? - False
'C3) s1(1) and s1(2)? - True
'C4) s1(2) and s1(3)? - False
'
'----------------------------------------------------------------------
'

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using System;

class Sample
{
    public static void Main()
    {
    char cHigh = '\uD800';
    char cLow  = '\uDC00';
    string s1  = new String(new char[] {'a', '\uD800', '\uDC00', 'z'});
    string divider = String.Concat( Environment.NewLine, new String('-', 70),
                                    Environment.NewLine);

    Console.WriteLine();
    Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh);
    Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow);
    Console.WriteLine();
    Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'");
    Console.WriteLine("Hexadecimal code points of the characters in string, s1: ");
    for(int i = 0; i < s1.Length; i++)
        {
        Console.WriteLine("s1[{0}] = {1:X4} ", i, (int)s1[i]);
        }
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a high surrogate?");
    Console.WriteLine("A1) cLow?  - {0}", Char.IsHighSurrogate(cLow));
    Console.WriteLine("A2) cHigh? - {0}", Char.IsHighSurrogate(cHigh));
    Console.WriteLine("A3) s1[0]? - {0}", Char.IsHighSurrogate(s1, 0));
    Console.WriteLine("A4) s1[1]? - {0}", Char.IsHighSurrogate(s1, 1));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a low surrogate?");
    Console.WriteLine("B1) cLow?  - {0}", Char.IsLowSurrogate(cLow));
    Console.WriteLine("B2) cHigh? - {0}", Char.IsLowSurrogate(cHigh));
    Console.WriteLine("B3) s1[0]? - {0}", Char.IsLowSurrogate(s1, 0));
    Console.WriteLine("B4) s1[2]? - {0}", Char.IsLowSurrogate(s1, 2));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following pairs of characters a surrogate pair?");
    Console.WriteLine("C1) cHigh and cLow?  - {0}", Char.IsSurrogatePair(cHigh, cLow));
    Console.WriteLine("C2) s1[0] and s1[1]? - {0}", Char.IsSurrogatePair(s1, 0));
    Console.WriteLine("C3) s1[1] and s1[2]? - {0}", Char.IsSurrogatePair(s1, 1));
    Console.WriteLine("C4) s1[2] and s1[3]? - {0}", Char.IsSurrogatePair(s1, 2));
    Console.WriteLine(divider);
    }
}
/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using namespace System;
int main()
{
   Char cHigh = L'\xD800';
   Char cLow = L'\xDC00';
   array<Char>^temp0 = {L'a',L'\xD800',L'\xDC00',L'z'};
   String^ s1 = gcnew String( temp0 );
   String^ divider = String::Concat( Environment::NewLine, gcnew String( '-',70 ), Environment::NewLine );
   Console::WriteLine();
   Console::WriteLine( "Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh );
   Console::WriteLine( "Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow );
   Console::WriteLine();
   Console::WriteLine( "Characters in string, s1: 'a', high surrogate, low surrogate, 'z'" );
   Console::WriteLine( "Hexadecimal code points of the characters in string, s1: " );
   for ( int i = 0; i < s1->Length; i++ )
   {
      Console::WriteLine( "s1[{0}] = {1:X4} ", i, (int)s1[ i ] );
   }
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a high surrogate?" );
   Console::WriteLine( "A1) cLow?  - {0}", Char::IsHighSurrogate( cLow ) );
   Console::WriteLine( "A2) cHigh? - {0}", Char::IsHighSurrogate( cHigh ) );
   Console::WriteLine( "A3) s1[0]? - {0}", Char::IsHighSurrogate( s1, 0 ) );
   Console::WriteLine( "A4) s1[1]? - {0}", Char::IsHighSurrogate( s1, 1 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a low surrogate?" );
   Console::WriteLine( "B1) cLow?  - {0}", Char::IsLowSurrogate( cLow ) );
   Console::WriteLine( "B2) cHigh? - {0}", Char::IsLowSurrogate( cHigh ) );
   Console::WriteLine( "B3) s1[0]? - {0}", Char::IsLowSurrogate( s1, 0 ) );
   Console::WriteLine( "B4) s1[2]? - {0}", Char::IsLowSurrogate( s1, 2 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following pairs of characters a surrogate pair?" );
   Console::WriteLine( "C1) cHigh and cLow?  - {0}", Char::IsSurrogatePair( cHigh, cLow ) );
   Console::WriteLine( "C2) s1[0] and s1[1]? - {0}", Char::IsSurrogatePair( s1, 0 ) );
   Console::WriteLine( "C3) s1[1] and s1[2]? - {0}", Char::IsSurrogatePair( s1, 1 ) );
   Console::WriteLine( "C4) s1[2] and s1[3]? - {0}", Char::IsSurrogatePair( s1, 2 ) );
   Console::WriteLine( divider );
}

/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
IsLowSurrogate 重载
System 命名空间


Char ..::.IsLowSurrogate 方法 (String, Int32)

Char
.
.
::
.
IsLowSurrogate 方法 (String, Int32)
Char 结构

指示字符串中指定位置处的 Char 对象是否为低代理项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsLowSurrogate ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsLowSurrogate(
    string s,
    int index
)
public:
static bool IsLowSurrogate(
    String^ s,
    int index
)
static member IsLowSurrogate :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 参数中指定字符的数值范围从 U+DC00 到 U+DFFF，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 不是 s 中的位置。

index 参数从零开始。

除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第二个元素是低代理项。其码位范围介于 U+DC00 到 U+DFFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第二个元素是低代理项。其码位范围介于 U+DC00 到 U+DFFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第二个元素是低代理项。其码位范围介于 U+DC00 到 U+DFFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。 除了使用一个 16 位码位表示单个字符之外，UTF-16 编码还允许使用两个 16 位码位（称为代理项对）表示抽象字符。代理项对中的第二个元素是低代理项。其码位范围介于 U+DC00 到 U+DFFF 之间。单独的代理项本身没有意义；只有用作代理项对的一部分时才有意义。

下面的代码示例演示 IsHighSurrogate、IsLowSurrogate 和 IsSurrogatePair 方法。

' This example demonstrates the Char.IsLowSurrogate() method
'                                    IsHighSurrogate() method
'                                    IsSurrogatePair() method
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim cHigh As Char = ChrW(&HD800)
      Dim cLow  As Char = ChrW(&HDC00)
      Dim s1 = New [String](New Char() {"a"c, ChrW(&HD800), ChrW(&HDC00), "z"c})
      Dim divider As String = [String].Concat(Environment.NewLine, _
                                              New [String]("-"c, 70), _
                                              Environment.NewLine)

      Console.WriteLine()
      Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", AscW(cHigh))
      Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", AscW(cLow))
      Console.WriteLine()
      Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'")
      Console.WriteLine("Hexadecimal code points of the characters in string, s1: ")
      Dim i As Integer
      For i = 0 To s1.Length - 1
         Console.WriteLine("s1({0}) = {1:X4} ", i, AscW(s1.Chars(i)))
      Next i
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a high surrogate?")
      Console.WriteLine("A1) cLow?  - {0}", [Char].IsHighSurrogate(cLow))
      Console.WriteLine("A2) cHigh? - {0}", [Char].IsHighSurrogate(cHigh))
      Console.WriteLine("A3) s1(0)? - {0}", [Char].IsHighSurrogate(s1, 0))
      Console.WriteLine("A4) s1(1)? - {0}", [Char].IsHighSurrogate(s1, 1))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a low surrogate?")
      Console.WriteLine("B1) cLow?  - {0}", [Char].IsLowSurrogate(cLow))
      Console.WriteLine("B2) cHigh? - {0}", [Char].IsLowSurrogate(cHigh))
      Console.WriteLine("B3) s1(0)? - {0}", [Char].IsLowSurrogate(s1, 0))
      Console.WriteLine("B4) s1(2)? - {0}", [Char].IsLowSurrogate(s1, 2))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following pairs of characters a surrogate pair?")
      Console.WriteLine("C1) cHigh and cLow?  - {0}", [Char].IsSurrogatePair(cHigh, cLow))
      Console.WriteLine("C2) s1(0) and s1(1)? - {0}", [Char].IsSurrogatePair(s1, 0))
      Console.WriteLine("C3) s1(1) and s1(2)? - {0}", [Char].IsSurrogatePair(s1, 1))
      Console.WriteLine("C4) s1(2) and s1(3)? - {0}", [Char].IsSurrogatePair(s1, 2))
      Console.WriteLine(divider)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Hexadecimal code point of the character, cHigh: D800
'Hexadecimal code point of the character, cLow:  DC00
'
'Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
'Hexadecimal code points of the characters in string, s1:
's1(0) = 0061
's1(1) = D800
's1(2) = DC00
's1(3) = 007A
'
'----------------------------------------------------------------------
'
'Is each of the following characters a high surrogate?
'A1) cLow?  - False
'A2) cHigh? - True
'A3) s1(0)? - False
'A4) s1(1)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following characters a low surrogate?
'B1) cLow?  - True
'B2) cHigh? - False
'B3) s1(0)? - False
'B4) s1(2)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following pairs of characters a surrogate pair?
'C1) cHigh and cLow?  - True
'C2) s1(0) and s1(1)? - False
'C3) s1(1) and s1(2)? - True
'C4) s1(2) and s1(3)? - False
'
'----------------------------------------------------------------------
'

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using System;

class Sample
{
    public static void Main()
    {
    char cHigh = '\uD800';
    char cLow  = '\uDC00';
    string s1  = new String(new char[] {'a', '\uD800', '\uDC00', 'z'});
    string divider = String.Concat( Environment.NewLine, new String('-', 70),
                                    Environment.NewLine);

    Console.WriteLine();
    Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh);
    Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow);
    Console.WriteLine();
    Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'");
    Console.WriteLine("Hexadecimal code points of the characters in string, s1: ");
    for(int i = 0; i < s1.Length; i++)
        {
        Console.WriteLine("s1[{0}] = {1:X4} ", i, (int)s1[i]);
        }
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a high surrogate?");
    Console.WriteLine("A1) cLow?  - {0}", Char.IsHighSurrogate(cLow));
    Console.WriteLine("A2) cHigh? - {0}", Char.IsHighSurrogate(cHigh));
    Console.WriteLine("A3) s1[0]? - {0}", Char.IsHighSurrogate(s1, 0));
    Console.WriteLine("A4) s1[1]? - {0}", Char.IsHighSurrogate(s1, 1));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a low surrogate?");
    Console.WriteLine("B1) cLow?  - {0}", Char.IsLowSurrogate(cLow));
    Console.WriteLine("B2) cHigh? - {0}", Char.IsLowSurrogate(cHigh));
    Console.WriteLine("B3) s1[0]? - {0}", Char.IsLowSurrogate(s1, 0));
    Console.WriteLine("B4) s1[2]? - {0}", Char.IsLowSurrogate(s1, 2));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following pairs of characters a surrogate pair?");
    Console.WriteLine("C1) cHigh and cLow?  - {0}", Char.IsSurrogatePair(cHigh, cLow));
    Console.WriteLine("C2) s1[0] and s1[1]? - {0}", Char.IsSurrogatePair(s1, 0));
    Console.WriteLine("C3) s1[1] and s1[2]? - {0}", Char.IsSurrogatePair(s1, 1));
    Console.WriteLine("C4) s1[2] and s1[3]? - {0}", Char.IsSurrogatePair(s1, 2));
    Console.WriteLine(divider);
    }
}
/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using namespace System;
int main()
{
   Char cHigh = L'\xD800';
   Char cLow = L'\xDC00';
   array<Char>^temp0 = {L'a',L'\xD800',L'\xDC00',L'z'};
   String^ s1 = gcnew String( temp0 );
   String^ divider = String::Concat( Environment::NewLine, gcnew String( '-',70 ), Environment::NewLine );
   Console::WriteLine();
   Console::WriteLine( "Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh );
   Console::WriteLine( "Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow );
   Console::WriteLine();
   Console::WriteLine( "Characters in string, s1: 'a', high surrogate, low surrogate, 'z'" );
   Console::WriteLine( "Hexadecimal code points of the characters in string, s1: " );
   for ( int i = 0; i < s1->Length; i++ )
   {
      Console::WriteLine( "s1[{0}] = {1:X4} ", i, (int)s1[ i ] );
   }
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a high surrogate?" );
   Console::WriteLine( "A1) cLow?  - {0}", Char::IsHighSurrogate( cLow ) );
   Console::WriteLine( "A2) cHigh? - {0}", Char::IsHighSurrogate( cHigh ) );
   Console::WriteLine( "A3) s1[0]? - {0}", Char::IsHighSurrogate( s1, 0 ) );
   Console::WriteLine( "A4) s1[1]? - {0}", Char::IsHighSurrogate( s1, 1 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a low surrogate?" );
   Console::WriteLine( "B1) cLow?  - {0}", Char::IsLowSurrogate( cLow ) );
   Console::WriteLine( "B2) cHigh? - {0}", Char::IsLowSurrogate( cHigh ) );
   Console::WriteLine( "B3) s1[0]? - {0}", Char::IsLowSurrogate( s1, 0 ) );
   Console::WriteLine( "B4) s1[2]? - {0}", Char::IsLowSurrogate( s1, 2 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following pairs of characters a surrogate pair?" );
   Console::WriteLine( "C1) cHigh and cLow?  - {0}", Char::IsSurrogatePair( cHigh, cLow ) );
   Console::WriteLine( "C2) s1[0] and s1[1]? - {0}", Char::IsSurrogatePair( s1, 0 ) );
   Console::WriteLine( "C3) s1[1] and s1[2]? - {0}", Char::IsSurrogatePair( s1, 1 ) );
   Console::WriteLine( "C4) s1[2] and s1[3]? - {0}", Char::IsSurrogatePair( s1, 2 ) );
   Console::WriteLine( divider );
}

/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
IsLowSurrogate 重载
System 命名空间


Char ..::.IsNumber 方法

Char
.
.
::
.
IsNumber 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示某个 Unicode 字符是否属于数字类别。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsNumber 方法 (Char)

Char
.
.
::
.
IsNumber 方法 (Char)
Char 结构

指示指定的 Unicode 字符是否属于数字类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsNumber ( _
    c As Char _
) As Boolean
public static bool IsNumber(
    char c
)
public:
static bool IsNumber(
    wchar_t c
)
static member IsNumber :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是数字，则为 true，否则为 false。

此方法确定 Char 是否属于任何数值 Unicode 类别。除了包括数字以外，号码包括字符、分数、下标、上标、罗马数字、货币分子和循环数的数字。此方法与 IsDigit 方法不同，后者可确定 Char 是否是以 10 为基的数。 此方法确定 Char 是否属于任何数值 Unicode 类别。除了包括数字以外，号码包括字符、分数、下标、上标、罗马数字、货币分子和循环数的数字。此方法与 IsDigit 方法不同，后者可确定 Char 是否是以 10 为基的数。 此方法确定 Char 是否属于任何数值 Unicode 类别。除了包括数字以外，号码包括字符、分数、下标、上标、罗马数字、货币分子和循环数的数字。此方法与 IsDigit 方法不同，后者可确定 Char 是否是以 10 为基的数。

有效的数是 UnicodeCategory..::.DecimalDigitNumber、UnicodeCategory..::.LetterNumber 或 UnicodeCategory..::.OtherNumber 类别的成员。

下面的代码示例演示 IsNumber。

Imports System

Module IsNumberSample

    Sub Main()

        Dim str As String
        str = "non-numeric"

        Console.WriteLine(Char.IsNumber("8"c))      ' Output: "True"
        Console.WriteLine(Char.IsNumber(str, 3))    ' Output: "False"

    End Sub

End Module

using System;

public class IsNumberSample {
    public static void Main() {
        string str = "non-numeric";

        Console.WriteLine(Char.IsNumber('8'));		// Output: "True"
        Console.WriteLine(Char.IsNumber(str, 3));	// Output: "False"
    }
}

using namespace System;
int main()
{
   String^ str =  "non-numeric";
   Console::WriteLine( Char::IsNumber( '8' ) ); // Output: "True"
   Console::WriteLine( Char::IsNumber( str, 3 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsNumber 重载
System 命名空间
Boolean
IsDigit


Char ..::.IsNumber 方法 (String, Int32)

Char
.
.
::
.
IsNumber 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置的字符是否属于数字类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsNumber ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsNumber(
    string s,
    int index
)
public:
static bool IsNumber(
    String^ s,
    int index
)
static member IsNumber :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于 index 的字符是数字，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

此方法确定 Char 是否属于任何数值 Unicode 类别。除了包括数字以外，号码包括字符、分数、下标、上标、罗马数字、货币分子和循环数的数字。此方法与 IsDigit 方法不同，后者可确定 Char 是否是以 10 为基的数。 此方法确定 Char 是否属于任何数值 Unicode 类别。除了包括数字以外，号码包括字符、分数、下标、上标、罗马数字、货币分子和循环数的数字。此方法与 IsDigit 方法不同，后者可确定 Char 是否是以 10 为基的数。 此方法确定 Char 是否属于任何数值 Unicode 类别。除了包括数字以外，号码包括字符、分数、下标、上标、罗马数字、货币分子和循环数的数字。此方法与 IsDigit 方法不同，后者可确定 Char 是否是以 10 为基的数。

字符串中的字符位置从零开始编制索引。

有效的数是 UnicodeCategory..::.DecimalDigitNumber、UnicodeCategory..::.LetterNumber 或 UnicodeCategory..::.OtherNumber 类别的成员。

下面的代码示例演示 IsNumber。

Imports System

Module IsNumberSample

    Sub Main()

        Dim str As String
        str = "non-numeric"

        Console.WriteLine(Char.IsNumber("8"c))      ' Output: "True"
        Console.WriteLine(Char.IsNumber(str, 3))    ' Output: "False"

    End Sub

End Module

using System;

public class IsNumberSample {
    public static void Main() {
        string str = "non-numeric";

        Console.WriteLine(Char.IsNumber('8'));		// Output: "True"
        Console.WriteLine(Char.IsNumber(str, 3));	// Output: "False"
    }
}

using namespace System;
int main()
{
   String^ str =  "non-numeric";
   Console::WriteLine( Char::IsNumber( '8' ) ); // Output: "True"
   Console::WriteLine( Char::IsNumber( str, 3 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsNumber 重载
System 命名空间
Boolean
String
IsDigit


Char ..::.IsPunctuation 方法

Char
.
.
::
.
IsPunctuation 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示某个 Unicode 字符是否属于标点符号类别。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsPunctuation 方法 (Char)

Char
.
.
::
.
IsPunctuation 方法 (Char)
Char 结构

指示指定的 Unicode 字符是否属于标点符号类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsPunctuation ( _
    c As Char _
) As Boolean
public static bool IsPunctuation(
    char c
)
public:
static bool IsPunctuation(
    wchar_t c
)
static member IsPunctuation :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是标点符号，则为 true；否则，为 false。

有效的标点符号是 UnicodeCategory 中以下类别的成员：ConnectorPunctuation、DashPunctuation、OpenPunctuation、ClosePunctuation、InititalQuotePunctuation、FinalQuotePunctuation 或 OtherPunctuation。它们所包含的字符具有下表中所列出的 Unicode 码位。 有效的标点符号是 UnicodeCategory 中以下类别的成员：ConnectorPunctuation、DashPunctuation、OpenPunctuation、ClosePunctuation、InititalQuotePunctuation、FinalQuotePunctuation 或 OtherPunctuation。它们所包含的字符具有下表中所列出的 Unicode 码位。

U+0021 到 U+0023 | U+060C 和 U+060D | U+1800 到 U+180A | U+3014 到 U+301F
U+0025 到 U+002A | U+061B | U+1944 和 U+1945 | U+3030
U+002C 到 U+002F | U+061E 和 U+061F | U+19DE 和 U+19DF | U+303D
U+003A 和 U+003B | U+066A 到 U+066D | U+1A1E 和 U+1A1F | U+30A0
U+003F 和 U+0040 | U+06D4 | U+1B5A 到 U+1B60 | U+30FB
U+005B 到 U+005D | U+0700 到 U+070D | U+2010 到 U+2027 | U+A874 到 U+A877
U+005F | U+07F7 到 U+07F9 | U+2030 到 U+2043 | U+FD3E 和 U+FD3F
U+007B | U+0964 和 U+0965 | U+2045 到 U+2051 | U+FE10 到 U+FE19
U+007D | U+0970 | U+2053 到 U+205E | U+FE30 到 U+FE52
U+00A1 | U+0DF4 | U+207D 和 U+207E | U+FE54 到 U+FE61
U+00AB | U+0E4F 到 U+0E5B | U+208D 和 U+208E | U+FE63
U+00AD | U+0F04 到 U+0F12 | U+2329 和 U+232A | U+FE68
U+00B7 | U+0F3A 到 U+0F3D | U+2768 到 U+2775 | U+FE6A 和 U+FE6B
U+00BB | U+0F85 | U+27C5 到 U+27C6 | U+FF01 到 U+FF03
U+00BF | U+0FD0 和 U+0FD1 | U+27E6 到 U+27EB | U+FF05 到 U+FF0A
U+037E | U+104A 到 U+104F | U+2983 到 U+2998 | U+FF0C 到 U+FF0F
U+0387 | U+10FB | U+29D8 到 U+29DB | U+FF1A 和 U+FF1B
U+055A 到 U+055F | U+1361 到 U+1368 | U+29FC 和 U+29FD | U+FF1F 和 U+FF20
U+0589 和 U+058A | U+166D 和 U+166E | U+2CF9 到 U+2CFC | U+FF3B 到 U+FF3D
U+05BE | U+169B 和 U+169C | U+2CFE 和 U+2CFF | U+FF3F
U+05C0 | U+16EB 到 U+16ED | U+2E00 到 U+2E17 | U+FF5B
U+05C3 | U+1735 和 U+1736 | U+2E1C 和 U+2E1D | U+FF5D
U+05C6 | U+17D4 到 U+17D6 | U+3001 到 U+3003 | U+FF5F 到 U+FF65
U+05F3 和 U+05F4 | U+17D8 到 U+17DA | U+3008 到 U+3011 |

下面的代码示例演示 IsPunctuation。

Imports System

Module IsPunctuationSample

    Sub Main()

        Dim ch As Char
        ch = "."c

        Console.WriteLine(Char.IsPunctuation(ch))                   ' Output: "True"
        Console.WriteLine(Char.IsPunctuation("no punctuation", 3))  ' Output: "False"

    End Sub

End Module

using System;

public class IsPunctuationSample {
    public static void Main() {
        char ch = '.';

        Console.WriteLine(Char.IsPunctuation(ch));						// Output: "True"
        Console.WriteLine(Char.IsPunctuation("no punctuation", 3));		// Output: "False"
    }
}

using namespace System;
int main()
{
   char ch = '.';
   Console::WriteLine( Char::IsPunctuation( ch ) ); // Output: "True"
   Console::WriteLine( Char::IsPunctuation(  "no punctuation", 3 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsPunctuation 重载
System 命名空间
Boolean


Char ..::.IsPunctuation 方法 (String, Int32)

Char
.
.
::
.
IsPunctuation 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置处的字符是否属于标点符号类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsPunctuation ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsPunctuation(
    string s,
    int index
)
public:
static bool IsPunctuation(
    String^ s,
    int index
)
static member IsPunctuation :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于 index 处的字符是标点符号，则为 true；否则，为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

有效的标点符号是 UnicodeCategory 中以下类别的成员：ConnectorPunctuation、DashPunctuation、OpenPunctuation、ClosePunctuation、InititalQuotePunctuation、FinalQuotePunctuation 或 OtherPunctuation。它们所包含的字符具有下表中所列出的 Unicode 码位。 有效的标点符号是 UnicodeCategory 中以下类别的成员：ConnectorPunctuation、DashPunctuation、OpenPunctuation、ClosePunctuation、InititalQuotePunctuation、FinalQuotePunctuation 或 OtherPunctuation。它们所包含的字符具有下表中所列出的 Unicode 码位。

U+0021 到 U+0023 | U+060C 和 U+060D | U+1800 到 U+180A | U+3014 到 U+301F
U+0025 到 U+002A | U+061B | U+1944 和 U+1945 | U+3030
U+002C 到 U+002F | U+061E 和 U+061F | U+19DE 和 U+19DF | U+303D
U+003A 和 U+003B | U+066A 到 U+066D | U+1A1E 和 U+1A1F | U+30A0
U+003F 和 U+0040 | U+06D4 | U+1B5A 到 U+1B60 | U+30FB
U+005B 到 U+005D | U+0700 到 U+070D | U+2010 到 U+2027 | U+A874 到 U+A877
U+005F | U+07F7 到 U+07F9 | U+2030 到 U+2043 | U+FD3E 和 U+FD3F
U+007B | U+0964 和 U+0965 | U+2045 到 U+2051 | U+FE10 到 U+FE19
U+007D | U+0970 | U+2053 到 U+205E | U+FE30 到 U+FE52
U+00A1 | U+0DF4 | U+207D 和 U+207E | U+FE54 到 U+FE61
U+00AB | U+0E4F 到 U+0E5B | U+208D 和 U+208E | U+FE63
U+00AD | U+0F04 到 U+0F12 | U+2329 和 U+232A | U+FE68
U+00B7 | U+0F3A 到 U+0F3D | U+2768 到 U+2775 | U+FE6A 和 U+FE6B
U+00BB | U+0F85 | U+27C5 到 U+27C6 | U+FF01 到 U+FF03
U+00BF | U+0FD0 和 U+0FD1 | U+27E6 到 U+27EB | U+FF05 到 U+FF0A
U+037E | U+104A 到 U+104F | U+2983 到 U+2998 | U+FF0C 到 U+FF0F
U+0387 | U+10FB | U+29D8 到 U+29DB | U+FF1A 和 U+FF1B
U+055A 到 U+055F | U+1361 到 U+1368 | U+29FC 和 U+29FD | U+FF1F 和 U+FF20
U+0589 和 U+058A | U+166D 和 U+166E | U+2CF9 到 U+2CFC | U+FF3B 到 U+FF3D
U+05BE | U+169B 和 U+169C | U+2CFE 和 U+2CFF | U+FF3F
U+05C0 | U+16EB 到 U+16ED | U+2E00 到 U+2E17 | U+FF5B
U+05C3 | U+1735 和 U+1736 | U+2E1C 和 U+2E1D | U+FF5D
U+05C6 | U+17D4 到 U+17D6 | U+3001 到 U+3003 | U+FF5F 到 U+FF65
U+05F3 和 U+05F4 | U+17D8 到 U+17DA | U+3008 到 U+3011 |

下面的代码示例演示 IsPunctuation。

Imports System

Module IsPunctuationSample

    Sub Main()

        Dim ch As Char
        ch = "."c

        Console.WriteLine(Char.IsPunctuation(ch))                   ' Output: "True"
        Console.WriteLine(Char.IsPunctuation("no punctuation", 3))  ' Output: "False"

    End Sub

End Module

using System;

public class IsPunctuationSample {
    public static void Main() {
        char ch = '.';

        Console.WriteLine(Char.IsPunctuation(ch));						// Output: "True"
        Console.WriteLine(Char.IsPunctuation("no punctuation", 3));		// Output: "False"
    }
}

using namespace System;
int main()
{
   char ch = '.';
   Console::WriteLine( Char::IsPunctuation( ch ) ); // Output: "True"
   Console::WriteLine( Char::IsPunctuation(  "no punctuation", 3 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsPunctuation 重载
System 命名空间
Boolean
String


Char ..::.IsSeparator 方法

Char
.
.
::
.
IsSeparator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示某个 Unicode 字符是否属于分隔符类别。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsSeparator 方法 (Char)

Char
.
.
::
.
IsSeparator 方法 (Char)
Char 结构

指示指定的 Unicode 字符是否属于分隔符类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsSeparator ( _
    c As Char _
) As Boolean
public static bool IsSeparator(
    char c
)
public:
static bool IsSeparator(
    wchar_t c
)
static member IsSeparator :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是分隔符，则为 true；否则，为 false。

Unicode 标准可识别三种分隔符子类别：

  • 空格分隔符（UnicodeCategory..::.SpaceSeparator 类别），其中包括 \u0020 等字符。

  • 行分隔符（UnicodeCategory..::.LineSeparator 类别），其中包括 \u2028。

  • 段落分隔符（UnicodeCategory..::.ParagraphSeparator 类别），其中包括 \u2029。

说明 说明

Unicode 标准将字符 \u000A (LF)、\u000C (FF) 和 \u000A (CR) 分类为控制字符（UnicodeCategory..::.Control 类别的成员），而不是分隔符字符。

下面的示例列出了分类为分隔符字符的 Char 对象。

Module Example
   Public Sub Main()
      For ctr As Integer = Convert.ToInt32(Char.MinValue) To Convert.ToInt32(Char.MaxValue)
         Dim ch As Char = ChrW(ctr)
         If Char.IsSeparator(ch) Then
            Console.WriteLine("\u{0:X4} ({1})", AscW(ch), Char.GetUnicodeCategory(ch).ToString())
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'       \u0020 (SpaceSeparator)
'       \u00A0 (SpaceSeparator)
'       \u1680 (SpaceSeparator)
'       \u180E (SpaceSeparator)
'       \u2000 (SpaceSeparator)
'       \u2001 (SpaceSeparator)
'       \u2002 (SpaceSeparator)
'       \u2003 (SpaceSeparator)
'       \u2004 (SpaceSeparator)
'       \u2005 (SpaceSeparator)
'       \u2006 (SpaceSeparator)
'       \u2007 (SpaceSeparator)
'       \u2008 (SpaceSeparator)
'       \u2009 (SpaceSeparator)
'       \u200A (SpaceSeparator)
'       \u2028 (LineSeparator)
'       \u2029 (ParagraphSeparator)
'       \u202F (SpaceSeparator)
'       \u205F (SpaceSeparator)
'       \u3000 (SpaceSeparator)

using System;

public class Class1
{
   public static void Main()
   {
      for (int ctr = Convert.ToInt32(Char.MinValue); ctr <= Convert.ToInt32(Char.MaxValue); ctr++)
      {
         char ch = (Char) ctr;
         if (Char.IsSeparator(ch))
            Console.WriteLine(@"\u{0:X4} ({1})", (int) ch, Char.GetUnicodeCategory(ch).ToString());
      }
   }
}
// The example displays the following output:
//       \u0020 (SpaceSeparator)
//       \u00A0 (SpaceSeparator)
//       \u1680 (SpaceSeparator)
//       \u180E (SpaceSeparator)
//       \u2000 (SpaceSeparator)
//       \u2001 (SpaceSeparator)
//       \u2002 (SpaceSeparator)
//       \u2003 (SpaceSeparator)
//       \u2004 (SpaceSeparator)
//       \u2005 (SpaceSeparator)
//       \u2006 (SpaceSeparator)
//       \u2007 (SpaceSeparator)
//       \u2008 (SpaceSeparator)
//       \u2009 (SpaceSeparator)
//       \u200A (SpaceSeparator)
//       \u2028 (LineSeparator)
//       \u2029 (ParagraphSeparator)
//       \u202F (SpaceSeparator)
//       \u205F (SpaceSeparator)
//       \u3000 (SpaceSeparator)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsSeparator 重载
System 命名空间
UnicodeCategory


Char ..::.IsSeparator 方法 (String, Int32)

Char
.
.
::
.
IsSeparator 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置处的字符是否属于分隔符类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsSeparator ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsSeparator(
    string s,
    int index
)
public:
static bool IsSeparator(
    String^ s,
    int index
)
static member IsSeparator :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于 index 处的字符是分隔符，则为 true；否则，为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

Unicode 标准可识别三种分隔符子类别：

  • 空格分隔符（UnicodeCategory..::.SpaceSeparator 类别），其中包括 \u0020 等字符。

  • 行分隔符（UnicodeCategory..::.LineSeparator 类别），其中包括 \u2028。

  • 段落分隔符（UnicodeCategory..::.ParagraphSeparator 类别），其中包括 \u2029。

说明 说明

Unicode 标准将字符 \u000A (LF)、\u000C (FF) 和 \u000A (CR) 分类为控制字符（UnicodeCategory..::.Control 类别的成员），而不是分隔符字符。

下面的示例说明 IsSeparator。

Imports System

Module IsSeparatorSample

    Sub Main()

        Dim str As String
        str = "twain1 twain2"

        Console.WriteLine(Char.IsSeparator("a"c))       ' Output: "False"
        Console.WriteLine(Char.IsSeparator(str, 6))     ' Output: "True"

    End Sub

End Module

using System;

public class IsSeparatorSample {
    public static void Main() {
        string str = "twain1 twain2";

        Console.WriteLine(Char.IsSeparator('a'));		// Output: "False"
        Console.WriteLine(Char.IsSeparator(str, 6));	// Output: "True"
    }
}

using namespace System;
int main()
{
   String^ str =  "twain1 twain2";
   Console::WriteLine( Char::IsSeparator( 'a' ) ); // Output: "False"
   Console::WriteLine( Char::IsSeparator( str, 6 ) ); // Output: "True"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsSeparator 重载
System 命名空间
Boolean
String


Char ..::.IsSurrogate 方法

Char
.
.
::
.
IsSurrogate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示字符是否具有代理项码位。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsSurrogate 方法 (Char)

Char
.
.
::
.
IsSurrogate 方法 (Char)
Char 结构

指示指定的字符是否具有代理项码位。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsSurrogate ( _
    c As Char _
) As Boolean
public static bool IsSurrogate(
    char c
)
public:
static bool IsSurrogate(
    wchar_t c
)
static member IsSurrogate :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 为高代理项或低代理项，则为 true；否则为 false。

代理项是一个 Char 对象，它具有一个范围介于 U+D800 到 U+DFFF 之间的 Unicode 码位。具有此范围内的码位的每个字符都属于 UnicodeCategory..::.Surrogate 类别。单独的代理项码位本身没有意义，只有用作代理项对的一部分时才有意义。有关代理项对的更多信息，请参见 Unicode 主页中的“Unicode Standard”（Unicode 标准）。 代理项是一个 Char 对象，它具有一个范围介于 U+D800 到 U+DFFF 之间的 Unicode 码位。具有此范围内的码位的每个字符都属于 UnicodeCategory..::.Surrogate 类别。单独的代理项码位本身没有意义，只有用作代理项对的一部分时才有意义。有关代理项对的更多信息，请参见 Unicode 主页中的“Unicode Standard”（Unicode 标准）。 代理项是一个 Char 对象，它具有一个范围介于 U+D800 到 U+DFFF 之间的 Unicode 码位。具有此范围内的码位的每个字符都属于 UnicodeCategory..::.Surrogate 类别。单独的代理项码位本身没有意义，只有用作代理项对的一部分时才有意义。有关代理项对的更多信息，请参见 Unicode 主页中的“Unicode Standard”（Unicode 标准）。 代理项是一个 Char 对象，它具有一个范围介于 U+D800 到 U+DFFF 之间的 Unicode 码位。具有此范围内的码位的每个字符都属于 UnicodeCategory..::.Surrogate 类别。单独的代理项码位本身没有意义，只有用作代理项对的一部分时才有意义。有关代理项对的更多信息，请参见 Unicode 主页中的“Unicode Standard”（Unicode 标准）。

下面的代码示例演示 IsSurrogate。

Imports System

Module IsSurrogateSample

    Sub Main()

        ' NOTE: Visual Basic doesn't give us a way to create a 32-bit Unicode
        ' character composed of two 16-bit surrogate values, so a case where
        ' IsSurrogate returns True cannot be included in this sample.

        Console.WriteLine(Char.IsSurrogate("a"c))       ' Output: "False"

    End Sub

End Module

using System;

public class IsSurrogateSample {
    public static void Main() {
        string str = "\U00010F00"; // Unicode values between 0x10000 and 0x10FFF are represented by two 16-bit "surrogate" characters

        Console.WriteLine(Char.IsSurrogate('a'));		// Output: "False"
        Console.WriteLine(Char.IsSurrogate(str, 0));	// Output: "True"
    }
}

using namespace System;
int main()
{

   // - escape params specifying Unicode not implemented in v7.0
   Console::WriteLine( Char::IsSurrogate( 'a' ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsSurrogate 重载
System 命名空间
IsHighSurrogate
IsLowSurrogate
IsSurrogatePair


Char ..::.IsSurrogate 方法 (String, Int32)

Char
.
.
::
.
IsSurrogate 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置的字符是否具有代理项码位。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsSurrogate ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsSurrogate(
    string s,
    int index
)
public:
static bool IsSurrogate(
    String^ s,
    int index
)
static member IsSurrogate :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于位置 index 的字符为高代理项或低代理项，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

代理项是一个 Char 对象，它具有一个范围介于 U+D800 到 U+DFFF 之间的 Unicode 码位。具有此范围内的码位的每个字符都属于 UnicodeCategory..::.Surrogate 类别。单独的代理项码位本身没有意义，只有用作代理项对的一部分时才有意义。有关代理项对的更多信息，请参见 Unicode 主页中的“Unicode Standard”（Unicode 标准）。 代理项是一个 Char 对象，它具有一个范围介于 U+D800 到 U+DFFF 之间的 Unicode 码位。具有此范围内的码位的每个字符都属于 UnicodeCategory..::.Surrogate 类别。单独的代理项码位本身没有意义，只有用作代理项对的一部分时才有意义。有关代理项对的更多信息，请参见 Unicode 主页中的“Unicode Standard”（Unicode 标准）。 代理项是一个 Char 对象，它具有一个范围介于 U+D800 到 U+DFFF 之间的 Unicode 码位。具有此范围内的码位的每个字符都属于 UnicodeCategory..::.Surrogate 类别。单独的代理项码位本身没有意义，只有用作代理项对的一部分时才有意义。有关代理项对的更多信息，请参见 Unicode 主页中的“Unicode Standard”（Unicode 标准）。 代理项是一个 Char 对象，它具有一个范围介于 U+D800 到 U+DFFF 之间的 Unicode 码位。具有此范围内的码位的每个字符都属于 UnicodeCategory..::.Surrogate 类别。单独的代理项码位本身没有意义，只有用作代理项对的一部分时才有意义。有关代理项对的更多信息，请参见 Unicode 主页中的“Unicode Standard”（Unicode 标准）。

下面的代码示例演示 IsSurrogate。

Imports System

Module IsSurrogateSample

    Sub Main()

        ' NOTE: Visual Basic doesn't give us a way to create a 32-bit Unicode
        ' character composed of two 16-bit surrogate values, so a case where
        ' IsSurrogate returns True cannot be included in this sample.

        Console.WriteLine(Char.IsSurrogate("a"c))       ' Output: "False"

    End Sub

End Module

using System;

public class IsSurrogateSample {
    public static void Main() {
        string str = "\U00010F00"; // Unicode values between 0x10000 and 0x10FFF are represented by two 16-bit "surrogate" characters

        Console.WriteLine(Char.IsSurrogate('a'));		// Output: "False"
        Console.WriteLine(Char.IsSurrogate(str, 0));	// Output: "True"
    }
}

using namespace System;
int main()
{

   // - escape params specifying Unicode not implemented in v7.0
   Console::WriteLine( Char::IsSurrogate( 'a' ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsSurrogate 重载
System 命名空间
IsHighSurrogate
IsLowSurrogate
IsSurrogatePair


Char ..::.IsSurrogatePair 方法

Char
.
.
::
.
IsSurrogatePair 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示两个指定的 Char 对象是否形成代理项对。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsSurrogatePair 方法 (Char, Char)

Char
.
.
::
.
IsSurrogatePair 方法 (Char, Char)
Char 结构

指示两个指定的 Char 对象是否形成代理项对。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsSurrogatePair ( _
    highSurrogate As Char, _
    lowSurrogate As Char _
) As Boolean
public static bool IsSurrogatePair(
    char highSurrogate,
    char lowSurrogate
)
public:
static bool IsSurrogatePair(
    wchar_t highSurrogate,
    wchar_t lowSurrogate
)
static member IsSurrogatePair :
        highSurrogate:char *
        lowSurrogate:char -> bool

参数

highSurrogate
类型： System Char
要作为代理项对的高代理项进行计算的字符。
lowSurrogate
类型： System Char
要作为代理项对的低代理项进行计算的字符。

返回值

类型： System Boolean
如果 highSurrogate 参数的数值范围是从 U+D800 到 U+DBFF，并且 lowSurrogate 参数的数值范围是从 U+DC00 到 U+DFFF，则为 true；否则为 false。

单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。

下面的代码示例演示 IsHighSurrogate、IsLowSurrogate 和 IsSurrogatePair 方法。

' This example demonstrates the Char.IsLowSurrogate() method
'                                    IsHighSurrogate() method
'                                    IsSurrogatePair() method
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim cHigh As Char = ChrW(&HD800)
      Dim cLow  As Char = ChrW(&HDC00)
      Dim s1 = New [String](New Char() {"a"c, ChrW(&HD800), ChrW(&HDC00), "z"c})
      Dim divider As String = [String].Concat(Environment.NewLine, _
                                              New [String]("-"c, 70), _
                                              Environment.NewLine)

      Console.WriteLine()
      Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", AscW(cHigh))
      Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", AscW(cLow))
      Console.WriteLine()
      Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'")
      Console.WriteLine("Hexadecimal code points of the characters in string, s1: ")
      Dim i As Integer
      For i = 0 To s1.Length - 1
         Console.WriteLine("s1({0}) = {1:X4} ", i, AscW(s1.Chars(i)))
      Next i
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a high surrogate?")
      Console.WriteLine("A1) cLow?  - {0}", [Char].IsHighSurrogate(cLow))
      Console.WriteLine("A2) cHigh? - {0}", [Char].IsHighSurrogate(cHigh))
      Console.WriteLine("A3) s1(0)? - {0}", [Char].IsHighSurrogate(s1, 0))
      Console.WriteLine("A4) s1(1)? - {0}", [Char].IsHighSurrogate(s1, 1))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a low surrogate?")
      Console.WriteLine("B1) cLow?  - {0}", [Char].IsLowSurrogate(cLow))
      Console.WriteLine("B2) cHigh? - {0}", [Char].IsLowSurrogate(cHigh))
      Console.WriteLine("B3) s1(0)? - {0}", [Char].IsLowSurrogate(s1, 0))
      Console.WriteLine("B4) s1(2)? - {0}", [Char].IsLowSurrogate(s1, 2))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following pairs of characters a surrogate pair?")
      Console.WriteLine("C1) cHigh and cLow?  - {0}", [Char].IsSurrogatePair(cHigh, cLow))
      Console.WriteLine("C2) s1(0) and s1(1)? - {0}", [Char].IsSurrogatePair(s1, 0))
      Console.WriteLine("C3) s1(1) and s1(2)? - {0}", [Char].IsSurrogatePair(s1, 1))
      Console.WriteLine("C4) s1(2) and s1(3)? - {0}", [Char].IsSurrogatePair(s1, 2))
      Console.WriteLine(divider)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Hexadecimal code point of the character, cHigh: D800
'Hexadecimal code point of the character, cLow:  DC00
'
'Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
'Hexadecimal code points of the characters in string, s1:
's1(0) = 0061
's1(1) = D800
's1(2) = DC00
's1(3) = 007A
'
'----------------------------------------------------------------------
'
'Is each of the following characters a high surrogate?
'A1) cLow?  - False
'A2) cHigh? - True
'A3) s1(0)? - False
'A4) s1(1)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following characters a low surrogate?
'B1) cLow?  - True
'B2) cHigh? - False
'B3) s1(0)? - False
'B4) s1(2)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following pairs of characters a surrogate pair?
'C1) cHigh and cLow?  - True
'C2) s1(0) and s1(1)? - False
'C3) s1(1) and s1(2)? - True
'C4) s1(2) and s1(3)? - False
'
'----------------------------------------------------------------------
'

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using System;

class Sample
{
    public static void Main()
    {
    char cHigh = '\uD800';
    char cLow  = '\uDC00';
    string s1  = new String(new char[] {'a', '\uD800', '\uDC00', 'z'});
    string divider = String.Concat( Environment.NewLine, new String('-', 70),
                                    Environment.NewLine);

    Console.WriteLine();
    Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh);
    Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow);
    Console.WriteLine();
    Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'");
    Console.WriteLine("Hexadecimal code points of the characters in string, s1: ");
    for(int i = 0; i < s1.Length; i++)
        {
        Console.WriteLine("s1[{0}] = {1:X4} ", i, (int)s1[i]);
        }
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a high surrogate?");
    Console.WriteLine("A1) cLow?  - {0}", Char.IsHighSurrogate(cLow));
    Console.WriteLine("A2) cHigh? - {0}", Char.IsHighSurrogate(cHigh));
    Console.WriteLine("A3) s1[0]? - {0}", Char.IsHighSurrogate(s1, 0));
    Console.WriteLine("A4) s1[1]? - {0}", Char.IsHighSurrogate(s1, 1));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a low surrogate?");
    Console.WriteLine("B1) cLow?  - {0}", Char.IsLowSurrogate(cLow));
    Console.WriteLine("B2) cHigh? - {0}", Char.IsLowSurrogate(cHigh));
    Console.WriteLine("B3) s1[0]? - {0}", Char.IsLowSurrogate(s1, 0));
    Console.WriteLine("B4) s1[2]? - {0}", Char.IsLowSurrogate(s1, 2));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following pairs of characters a surrogate pair?");
    Console.WriteLine("C1) cHigh and cLow?  - {0}", Char.IsSurrogatePair(cHigh, cLow));
    Console.WriteLine("C2) s1[0] and s1[1]? - {0}", Char.IsSurrogatePair(s1, 0));
    Console.WriteLine("C3) s1[1] and s1[2]? - {0}", Char.IsSurrogatePair(s1, 1));
    Console.WriteLine("C4) s1[2] and s1[3]? - {0}", Char.IsSurrogatePair(s1, 2));
    Console.WriteLine(divider);
    }
}
/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using namespace System;
int main()
{
   Char cHigh = L'\xD800';
   Char cLow = L'\xDC00';
   array<Char>^temp0 = {L'a',L'\xD800',L'\xDC00',L'z'};
   String^ s1 = gcnew String( temp0 );
   String^ divider = String::Concat( Environment::NewLine, gcnew String( '-',70 ), Environment::NewLine );
   Console::WriteLine();
   Console::WriteLine( "Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh );
   Console::WriteLine( "Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow );
   Console::WriteLine();
   Console::WriteLine( "Characters in string, s1: 'a', high surrogate, low surrogate, 'z'" );
   Console::WriteLine( "Hexadecimal code points of the characters in string, s1: " );
   for ( int i = 0; i < s1->Length; i++ )
   {
      Console::WriteLine( "s1[{0}] = {1:X4} ", i, (int)s1[ i ] );
   }
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a high surrogate?" );
   Console::WriteLine( "A1) cLow?  - {0}", Char::IsHighSurrogate( cLow ) );
   Console::WriteLine( "A2) cHigh? - {0}", Char::IsHighSurrogate( cHigh ) );
   Console::WriteLine( "A3) s1[0]? - {0}", Char::IsHighSurrogate( s1, 0 ) );
   Console::WriteLine( "A4) s1[1]? - {0}", Char::IsHighSurrogate( s1, 1 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a low surrogate?" );
   Console::WriteLine( "B1) cLow?  - {0}", Char::IsLowSurrogate( cLow ) );
   Console::WriteLine( "B2) cHigh? - {0}", Char::IsLowSurrogate( cHigh ) );
   Console::WriteLine( "B3) s1[0]? - {0}", Char::IsLowSurrogate( s1, 0 ) );
   Console::WriteLine( "B4) s1[2]? - {0}", Char::IsLowSurrogate( s1, 2 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following pairs of characters a surrogate pair?" );
   Console::WriteLine( "C1) cHigh and cLow?  - {0}", Char::IsSurrogatePair( cHigh, cLow ) );
   Console::WriteLine( "C2) s1[0] and s1[1]? - {0}", Char::IsSurrogatePair( s1, 0 ) );
   Console::WriteLine( "C3) s1[1] and s1[2]? - {0}", Char::IsSurrogatePair( s1, 1 ) );
   Console::WriteLine( "C4) s1[2] and s1[3]? - {0}", Char::IsSurrogatePair( s1, 2 ) );
   Console::WriteLine( divider );
}

/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsSurrogatePair 重载
System 命名空间
IsHighSurrogate
IsLowSurrogate


Char ..::.IsSurrogatePair 方法 (String, Int32)

Char
.
.
::
.
IsSurrogatePair 方法 (String, Int32)
Char 结构

指示字符串中指定位置处的两个相邻 Char 对象是否形成代理项对。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsSurrogatePair ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsSurrogatePair(
    string s,
    int index
)
public:
static bool IsSurrogatePair(
    String^ s,
    int index
)
static member IsSurrogatePair :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
s 中要计算的字符对的开始位置。

返回值

类型： System Boolean
如果 s 参数包括 index 和 index + 1 位置处的相邻字符，并且 index 位置处字符的数值在 U+D800 到 U+DBFF 范围内，index +1 位置处字符的数值在 U+DC00 到 U+DFFF 范围内，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 不是 s 中的位置。

单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。 单个字符通常由单个 16 位码位表示。UTF-16 编码还支持代理项对，从而允许将单个抽象字符表示为两个 16 位码位。第一个码位为高代理项，其值范围介于 U+D800 到 U+DBFF 之间。第二个码位为低代理项，其值范围介于 U+DC00 到 U+DFFF 之间。单独的代理项码位本身没有意义。有关代理项和 Unicode 标准的更多信息，请参见 Unicode 主页。

下面的代码示例演示 IsHighSurrogate、IsLowSurrogate 和 IsSurrogatePair 方法。

' This example demonstrates the Char.IsLowSurrogate() method
'                                    IsHighSurrogate() method
'                                    IsSurrogatePair() method
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim cHigh As Char = ChrW(&HD800)
      Dim cLow  As Char = ChrW(&HDC00)
      Dim s1 = New [String](New Char() {"a"c, ChrW(&HD800), ChrW(&HDC00), "z"c})
      Dim divider As String = [String].Concat(Environment.NewLine, _
                                              New [String]("-"c, 70), _
                                              Environment.NewLine)

      Console.WriteLine()
      Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", AscW(cHigh))
      Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", AscW(cLow))
      Console.WriteLine()
      Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'")
      Console.WriteLine("Hexadecimal code points of the characters in string, s1: ")
      Dim i As Integer
      For i = 0 To s1.Length - 1
         Console.WriteLine("s1({0}) = {1:X4} ", i, AscW(s1.Chars(i)))
      Next i
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a high surrogate?")
      Console.WriteLine("A1) cLow?  - {0}", [Char].IsHighSurrogate(cLow))
      Console.WriteLine("A2) cHigh? - {0}", [Char].IsHighSurrogate(cHigh))
      Console.WriteLine("A3) s1(0)? - {0}", [Char].IsHighSurrogate(s1, 0))
      Console.WriteLine("A4) s1(1)? - {0}", [Char].IsHighSurrogate(s1, 1))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following characters a low surrogate?")
      Console.WriteLine("B1) cLow?  - {0}", [Char].IsLowSurrogate(cLow))
      Console.WriteLine("B2) cHigh? - {0}", [Char].IsLowSurrogate(cHigh))
      Console.WriteLine("B3) s1(0)? - {0}", [Char].IsLowSurrogate(s1, 0))
      Console.WriteLine("B4) s1(2)? - {0}", [Char].IsLowSurrogate(s1, 2))
      Console.WriteLine(divider)

      Console.WriteLine("Is each of the following pairs of characters a surrogate pair?")
      Console.WriteLine("C1) cHigh and cLow?  - {0}", [Char].IsSurrogatePair(cHigh, cLow))
      Console.WriteLine("C2) s1(0) and s1(1)? - {0}", [Char].IsSurrogatePair(s1, 0))
      Console.WriteLine("C3) s1(1) and s1(2)? - {0}", [Char].IsSurrogatePair(s1, 1))
      Console.WriteLine("C4) s1(2) and s1(3)? - {0}", [Char].IsSurrogatePair(s1, 2))
      Console.WriteLine(divider)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Hexadecimal code point of the character, cHigh: D800
'Hexadecimal code point of the character, cLow:  DC00
'
'Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
'Hexadecimal code points of the characters in string, s1:
's1(0) = 0061
's1(1) = D800
's1(2) = DC00
's1(3) = 007A
'
'----------------------------------------------------------------------
'
'Is each of the following characters a high surrogate?
'A1) cLow?  - False
'A2) cHigh? - True
'A3) s1(0)? - False
'A4) s1(1)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following characters a low surrogate?
'B1) cLow?  - True
'B2) cHigh? - False
'B3) s1(0)? - False
'B4) s1(2)? - True
'
'----------------------------------------------------------------------
'
'Is each of the following pairs of characters a surrogate pair?
'C1) cHigh and cLow?  - True
'C2) s1(0) and s1(1)? - False
'C3) s1(1) and s1(2)? - True
'C4) s1(2) and s1(3)? - False
'
'----------------------------------------------------------------------
'

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using System;

class Sample
{
    public static void Main()
    {
    char cHigh = '\uD800';
    char cLow  = '\uDC00';
    string s1  = new String(new char[] {'a', '\uD800', '\uDC00', 'z'});
    string divider = String.Concat( Environment.NewLine, new String('-', 70),
                                    Environment.NewLine);

    Console.WriteLine();
    Console.WriteLine("Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh);
    Console.WriteLine("Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow);
    Console.WriteLine();
    Console.WriteLine("Characters in string, s1: 'a', high surrogate, low surrogate, 'z'");
    Console.WriteLine("Hexadecimal code points of the characters in string, s1: ");
    for(int i = 0; i < s1.Length; i++)
        {
        Console.WriteLine("s1[{0}] = {1:X4} ", i, (int)s1[i]);
        }
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a high surrogate?");
    Console.WriteLine("A1) cLow?  - {0}", Char.IsHighSurrogate(cLow));
    Console.WriteLine("A2) cHigh? - {0}", Char.IsHighSurrogate(cHigh));
    Console.WriteLine("A3) s1[0]? - {0}", Char.IsHighSurrogate(s1, 0));
    Console.WriteLine("A4) s1[1]? - {0}", Char.IsHighSurrogate(s1, 1));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following characters a low surrogate?");
    Console.WriteLine("B1) cLow?  - {0}", Char.IsLowSurrogate(cLow));
    Console.WriteLine("B2) cHigh? - {0}", Char.IsLowSurrogate(cHigh));
    Console.WriteLine("B3) s1[0]? - {0}", Char.IsLowSurrogate(s1, 0));
    Console.WriteLine("B4) s1[2]? - {0}", Char.IsLowSurrogate(s1, 2));
    Console.WriteLine(divider);

    Console.WriteLine("Is each of the following pairs of characters a surrogate pair?");
    Console.WriteLine("C1) cHigh and cLow?  - {0}", Char.IsSurrogatePair(cHigh, cLow));
    Console.WriteLine("C2) s1[0] and s1[1]? - {0}", Char.IsSurrogatePair(s1, 0));
    Console.WriteLine("C3) s1[1] and s1[2]? - {0}", Char.IsSurrogatePair(s1, 1));
    Console.WriteLine("C4) s1[2] and s1[3]? - {0}", Char.IsSurrogatePair(s1, 2));
    Console.WriteLine(divider);
    }
}
/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

// This example demonstrates the Char.IsLowSurrogate() method
//                                    IsHighSurrogate() method
//                                    IsSurrogatePair() method
using namespace System;
int main()
{
   Char cHigh = L'\xD800';
   Char cLow = L'\xDC00';
   array<Char>^temp0 = {L'a',L'\xD800',L'\xDC00',L'z'};
   String^ s1 = gcnew String( temp0 );
   String^ divider = String::Concat( Environment::NewLine, gcnew String( '-',70 ), Environment::NewLine );
   Console::WriteLine();
   Console::WriteLine( "Hexadecimal code point of the character, cHigh: {0:X4}", (int)cHigh );
   Console::WriteLine( "Hexadecimal code point of the character, cLow:  {0:X4}", (int)cLow );
   Console::WriteLine();
   Console::WriteLine( "Characters in string, s1: 'a', high surrogate, low surrogate, 'z'" );
   Console::WriteLine( "Hexadecimal code points of the characters in string, s1: " );
   for ( int i = 0; i < s1->Length; i++ )
   {
      Console::WriteLine( "s1[{0}] = {1:X4} ", i, (int)s1[ i ] );
   }
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a high surrogate?" );
   Console::WriteLine( "A1) cLow?  - {0}", Char::IsHighSurrogate( cLow ) );
   Console::WriteLine( "A2) cHigh? - {0}", Char::IsHighSurrogate( cHigh ) );
   Console::WriteLine( "A3) s1[0]? - {0}", Char::IsHighSurrogate( s1, 0 ) );
   Console::WriteLine( "A4) s1[1]? - {0}", Char::IsHighSurrogate( s1, 1 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following characters a low surrogate?" );
   Console::WriteLine( "B1) cLow?  - {0}", Char::IsLowSurrogate( cLow ) );
   Console::WriteLine( "B2) cHigh? - {0}", Char::IsLowSurrogate( cHigh ) );
   Console::WriteLine( "B3) s1[0]? - {0}", Char::IsLowSurrogate( s1, 0 ) );
   Console::WriteLine( "B4) s1[2]? - {0}", Char::IsLowSurrogate( s1, 2 ) );
   Console::WriteLine( divider );
   Console::WriteLine( "Is each of the following pairs of characters a surrogate pair?" );
   Console::WriteLine( "C1) cHigh and cLow?  - {0}", Char::IsSurrogatePair( cHigh, cLow ) );
   Console::WriteLine( "C2) s1[0] and s1[1]? - {0}", Char::IsSurrogatePair( s1, 0 ) );
   Console::WriteLine( "C3) s1[1] and s1[2]? - {0}", Char::IsSurrogatePair( s1, 1 ) );
   Console::WriteLine( "C4) s1[2] and s1[3]? - {0}", Char::IsSurrogatePair( s1, 2 ) );
   Console::WriteLine( divider );
}

/*
This example produces the following results:

Hexadecimal code point of the character, cHigh: D800
Hexadecimal code point of the character, cLow:  DC00

Characters in string, s1: 'a', high surrogate, low surrogate, 'z'
Hexadecimal code points of the characters in string, s1:
s1[0] = 0061
s1[1] = D800
s1[2] = DC00
s1[3] = 007A

----------------------------------------------------------------------

Is each of the following characters a high surrogate?
A1) cLow?  - False
A2) cHigh? - True
A3) s1[0]? - False
A4) s1[1]? - True

----------------------------------------------------------------------

Is each of the following characters a low surrogate?
B1) cLow?  - True
B2) cHigh? - False
B3) s1[0]? - False
B4) s1[2]? - True

----------------------------------------------------------------------

Is each of the following pairs of characters a surrogate pair?
C1) cHigh and cLow?  - True
C2) s1[0] and s1[1]? - False
C3) s1[1] and s1[2]? - True
C4) s1[2] and s1[3]? - False

----------------------------------------------------------------------

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsSurrogatePair 重载
System 命名空间
IsHighSurrogate
IsLowSurrogate


Char ..::.IsSymbol 方法

Char
.
.
::
.
IsSymbol 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示某个 Unicode 字符是否属于符号字符类别。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsSymbol 方法 (Char)

Char
.
.
::
.
IsSymbol 方法 (Char)
Char 结构

指示指定的 Unicode 字符是否属于符号字符类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsSymbol ( _
    c As Char _
) As Boolean
public static bool IsSymbol(
    char c
)
public:
static bool IsSymbol(
    wchar_t c
)
static member IsSymbol :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是符号字符，则为 true；否则为 false。

有效符号是 UnicodeCategory 中下列类别的成员：MathSymbol、CurrencySymbol、ModifierSymbol 和 OtherSymbol。

Unicode 标准中的符号是一组松散定义的字符，包括：

  • 货币符号。

  • 字母式符号，包括一组数学用字母数字符号以及 ℅、№ 和 之类的符号。

  • 数字形式的符号，如上标和下标。

  • 数学运算符和箭头。

  • 几何符号。

  • 技术符号。

  • 盲文图案。

  • 丁贝符。

下面的代码示例演示 IsSymbol。

Imports System

Module IsSymbolSample

    Sub Main()

        Dim str As String
        str = "non-symbolic characters"

        Console.WriteLine(Char.IsSymbol("+"c))      ' Output: "True"
        Console.WriteLine(Char.IsSymbol(str, 8))    ' Output: "False"

    End Sub

End Module

using System;

public class IsSymbolSample {
    public static void Main() {
        string str = "non-symbolic characters";

        Console.WriteLine(Char.IsSymbol('+'));		// Output: "True"
        Console.WriteLine(Char.IsSymbol(str, 8));	// Output: "False"
    }
}

using namespace System;
int main()
{
   String^ str =  "non-symbolic characters";
   Console::WriteLine( Char::IsSymbol( '+' ) ); // Output: "True"
   Console::WriteLine( Char::IsSymbol( str, 8 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsSymbol 重载
System 命名空间
Boolean


Char ..::.IsSymbol 方法 (String, Int32)

Char
.
.
::
.
IsSymbol 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置处的字符是否属于符号字符类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsSymbol ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsSymbol(
    string s,
    int index
)
public:
static bool IsSymbol(
    String^ s,
    int index
)
static member IsSymbol :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于 index 处的字符是符号字符，则为 true；否则，为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

有效符号是 System.Globalization..::.UnicodeCategory 中下列类别的成员：MathSymbol、CurrencySymbol、ModifierSymbol 和 OtherSymbol。

Unicode 标准中的符号是一组松散定义的字符，包括：

  • 货币符号。

  • 字母式符号，包括一组数学用字母数字符号以及 ℅、№ 和 之类的符号。

  • 数字形式的符号，如上标和下标。

  • 数学运算符和箭头。

  • 几何符号。

  • 技术符号。

  • 盲文图案。

  • 丁贝符。

下面的代码示例演示 IsSymbol。

Imports System

Module IsSymbolSample

    Sub Main()

        Dim str As String
        str = "non-symbolic characters"

        Console.WriteLine(Char.IsSymbol("+"c))      ' Output: "True"
        Console.WriteLine(Char.IsSymbol(str, 8))    ' Output: "False"

    End Sub

End Module

using System;

public class IsSymbolSample {
    public static void Main() {
        string str = "non-symbolic characters";

        Console.WriteLine(Char.IsSymbol('+'));		// Output: "True"
        Console.WriteLine(Char.IsSymbol(str, 8));	// Output: "False"
    }
}

using namespace System;
int main()
{
   String^ str =  "non-symbolic characters";
   Console::WriteLine( Char::IsSymbol( '+' ) ); // Output: "True"
   Console::WriteLine( Char::IsSymbol( str, 8 ) ); // Output: "False"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsSymbol 重载
System 命名空间
Boolean
String


Char ..::.IsUpper 方法

Char
.
.
::
.
IsUpper 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示某个 Unicode 字符是否属于大写字母类别。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsUpper 方法 (Char)

Char
.
.
::
.
IsUpper 方法 (Char)
Char 结构

指示指定的 Unicode 字符是否属于大写字母类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsUpper ( _
    c As Char _
) As Boolean
public static bool IsUpper(
    char c
)
public:
static bool IsUpper(
    wchar_t c
)
static member IsUpper :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是大写字母，则为 true；否则，为 false。

有效的大写字母是 UnicodeCategory 中以下类别的成员：UppercaseLetter。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsUpper 重载
System 命名空间
Boolean
IsLower


Char ..::.IsUpper 方法 (String, Int32)

Char
.
.
::
.
IsUpper 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置处的字符是否属于大写字母类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsUpper ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsUpper(
    string s,
    int index
)
public:
static bool IsUpper(
    String^ s,
    int index
)
static member IsUpper :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于 index 处的字符是大写字母，则为 true；否则，为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

有效的大写字母是 UnicodeCategory 中以下类别的成员：UppercaseLetter。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsUpper 重载
System 命名空间
Boolean
String


Char ..::.IsWhiteSpace 方法

Char
.
.
::
.
IsWhiteSpace 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

指示某个 Unicode 字符是否属于空白类别。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.IsWhiteSpace 方法 (Char)

Char
.
.
::
.
IsWhiteSpace 方法 (Char)
Char 结构

指示指定的 Unicode 字符是否属于空白类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsWhiteSpace ( _
    c As Char _
) As Boolean
public static bool IsWhiteSpace(
    char c
)
public:
static bool IsWhiteSpace(
    wchar_t c
)
static member IsWhiteSpace :
        c:char -> bool

参数

c
类型： System Char
要计算的 Unicode 字符。

返回值

类型： System Boolean
如果 c 是空白，则为 true；否则，为 false。

空白字符为下列 Unicode 字符：

  • SpaceSeparator 类别的成员，该类别包括字符 SPACE (U+0020)、OGHAM SPACE MARK (U+1680)、MONGOLIAN VOWEL SEPARATOR (U+180E)、EN QUAD (U+2000)、EM QUAD (U+2001)、EN SPACE (U+2002)、EM SPACE (U+2003)、THREE-PER-EM SPACE (U+2004)、FOUR-PER-EM SPACE (U+2005)、SIX-PER-EM SPACE (U+2006)、FIGURE SPACE (U+2007)、PUNCTUATION SPACE (U+2008)、THIN SPACE (U+2009)、HAIR SPACE (U+200A)、NARROW NO-BREAK SPACE (U+202F)、MEDIUM MATHEMATICAL SPACE (U+205F) 和 IDEOGRAPHIC SPACE (U+3000)。

  • LineSeparator 类别的成员，该类别只包括 LINE SEPARATOR 字符 (U+2028)。

  • ParagraphSeparator 类别的成员，该类别只包括 PARAGRAPH SEPARATOR 字符 (U+2029)。

  • 字符 CHARACTER TABULATION (U+0009)、LINE FEED (U+000A)、LINE TABULATION (U+000B)、FORM FEED (U+000C)、CARRIAGE RETURN (U+000D)、NEXT LINE (U+0085) 以及 NO-BREAK SPACE (U+00A0)。

下面的代码示例演示 IsWhiteSpace。

imports System

Module IsWhiteSpaceSample

    Sub Main()

        Dim str As String
        str = "black matter"

        Console.WriteLine(Char.IsWhiteSpace("A"c))      ' Output: "False"
        Console.WriteLine(Char.IsWhiteSpace(str, 5))    ' Output: "True"

    End Sub

End Module

using System;

public class IsWhiteSpaceSample {
    public static void Main() {
        string str = "black matter";

        Console.WriteLine(Char.IsWhiteSpace('A'));		// Output: "False"
        Console.WriteLine(Char.IsWhiteSpace(str, 5));	// Output: "True"
    }
}

using namespace System;
int main()
{
   String^ str =  "black matter";
   Console::WriteLine( Char::IsWhiteSpace( 'A' ) ); // Output: "False"
   Console::WriteLine( Char::IsWhiteSpace( str, 5 ) ); // Output: "True"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsWhiteSpace 重载
System 命名空间
Boolean
UnicodeCategory


Char ..::.IsWhiteSpace 方法 (String, Int32)

Char
.
.
::
.
IsWhiteSpace 方法 (String, Int32)
Char 结构

指示指定字符串中位于指定位置处的字符是否属于空白类别。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsWhiteSpace ( _
    s As String, _
    index As Integer _
) As Boolean
public static bool IsWhiteSpace(
    string s,
    int index
)
public:
static bool IsWhiteSpace(
    String^ s,
    int index
)
static member IsWhiteSpace :
        s:string *
        index:int -> bool

参数

s
类型： System String
一个字符串。
index
类型： System Int32
要计算的字符在 s 中的位置。

返回值

类型： System Boolean
如果 s 中位于 index 处的字符是空白，则为 true；否则，为 false。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零或大于 s 中的最后一个位置。

字符串中的字符位置从零开始编制索引。

空白字符为下列 Unicode 字符：

  • SpaceSeparator 类别的成员，该类别包括字符 SPACE (U+0020)、OGHAM SPACE MARK (U+1680)、MONGOLIAN VOWEL SEPARATOR (U+180E)、EN QUAD (U+2000)、EM QUAD (U+2001)、EN SPACE (U+2002)、EM SPACE (U+2003)、THREE-PER-EM SPACE (U+2004)、FOUR-PER-EM SPACE (U+2005)、SIX-PER-EM SPACE (U+2006)、FIGURE SPACE (U+2007)、PUNCTUATION SPACE (U+2008)、THIN SPACE (U+2009)、HAIR SPACE (U+200A)、NARROW NO-BREAK SPACE (U+202F)、MEDIUM MATHEMATICAL SPACE (U+205F) 和 IDEOGRAPHIC SPACE (U+3000)。

  • LineSeparator 类别的成员，该类别只包括 LINE SEPARATOR 字符 (U+2028)。

  • ParagraphSeparator 类别的成员，该类别只包括 PARAGRAPH SEPARATOR 字符 (U+2029)。

  • 字符 CHARACTER TABULATION (U+0009)、LINE FEED (U+000A)、LINE TABULATION (U+000B)、FORM FEED (U+000C)、CARRIAGE RETURN (U+000D)、NEXT LINE (U+0085) 以及 NO-BREAK SPACE (U+00A0)。

下面的代码示例演示 IsWhiteSpace。

imports System

Module IsWhiteSpaceSample

    Sub Main()

        Dim str As String
        str = "black matter"

        Console.WriteLine(Char.IsWhiteSpace("A"c))      ' Output: "False"
        Console.WriteLine(Char.IsWhiteSpace(str, 5))    ' Output: "True"

    End Sub

End Module

using System;

public class IsWhiteSpaceSample {
    public static void Main() {
        string str = "black matter";

        Console.WriteLine(Char.IsWhiteSpace('A'));		// Output: "False"
        Console.WriteLine(Char.IsWhiteSpace(str, 5));	// Output: "True"
    }
}

using namespace System;
int main()
{
   String^ str =  "black matter";
   Console::WriteLine( Char::IsWhiteSpace( 'A' ) ); // Output: "False"
   Console::WriteLine( Char::IsWhiteSpace( str, 5 ) ); // Output: "True"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
IsWhiteSpace 重载
System 命名空间
Boolean
String
UnicodeCategory


Char ..::.Parse 方法

Char
.
.
::
.
Parse 方法
Char 结构

将指定字符串的值转换为它的等效 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As Char
public static char Parse(
    string s
)
public:
static wchar_t Parse(
    String^ s
)
static member Parse :
        s:string -> char

参数

s
类型： System String
包含单个字符的字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Char
一个等效于 s 中的唯一字符的 Unicode 字符。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的长度不是 1。

下面的代码示例演示 Parse。

imports System

Module ParseSample

    Sub Main()

        Console.WriteLine(Char.Parse("A")) ' Output: 'A'

    End Sub

End Module

using System;

public class ParseSample {
    public static void Main() {
        Console.WriteLine(Char.Parse("A")); // Output: 'A'
    }
}

using namespace System;
int main()
{
   Console::WriteLine( Char::Parse(  "A" ) ); // Output: 'A'
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
System 命名空间
ToString

其他资源

分析其他字符串


Char ..::.ToLower 方法

Char
.
.
::
.
ToLower 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

将 Unicode 字符的值转换为它的小写等效项。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.ToLower 方法 (Char)

Char
.
.
::
.
ToLower 方法 (Char)
Char 结构

将 Unicode 字符的值转换为它的小写等效项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToLower ( _
    c As Char _
) As Char
public static char ToLower(
    char c
)
public:
static wchar_t ToLower(
    wchar_t c
)
static member ToLower :
        c:char -> char

参数

c
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Char
c 的小写等效项；如果 c 已经是小写形式或不是字母，则为 c 的未更改值。

从当前区域性获取大小写规则。

使用 String..::.ToLower 将字符串转换为小写。

对调用者的说明

如在 .NET Framework 中使用字符串的最佳做法中所述，建议您避免调用替换默认值的字符大小写和字符串大小写方法。相反，您应调用要求显式指定的参数的方法。若要使用当前区域性的大小写约定将字符转换为小写，请使用 CultureInfo..::.CurrentCulture 的值作为 culture 参数来调用 ToLower(Char, CultureInfo) 方法重载。 如在 .NET Framework 中使用字符串的最佳做法中所述，建议您避免调用替换默认值的字符大小写和字符串大小写方法。相反，您应调用要求显式指定的参数的方法。若要使用当前区域性的大小写约定将字符转换为小写，请使用 CultureInfo..::.CurrentCulture 的值作为 culture 参数来调用 ToLower(Char, CultureInfo) 方法重载。 如在 .NET Framework 中使用字符串的最佳做法中所述，建议您避免调用替换默认值的字符大小写和字符串大小写方法。相反，您应调用要求显式指定的参数的方法。若要使用当前区域性的大小写约定将字符转换为小写，请使用 CultureInfo..::.CurrentCulture 的值作为 culture 参数来调用 ToLower(Char, CultureInfo) 方法重载。

下面的示例说明 ToLower。

imports System

Module ToLowerSample

    Sub Main()
        Console.WriteLine(Char.ToLower("A"c))               ' Output: "a"
    End Sub

End Module

using System;
using System.Globalization;  // for CultureInfo

public class ToLowerSample {
    public static void Main() {
        Console.WriteLine(Char.ToLower('A'));				// Output: "a"
    }
}

using namespace System;
using namespace System::Globalization;

// for CultureInfo
void main()
{
   Console::WriteLine( Char::ToLower( 'A' ) ); // Output: "a"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
ToLower 重载
System 命名空间
String ToLower
Char ToUpper


Char ..::.ToLower 方法 (Char, CultureInfo)

Char
.
.
::
.
ToLower 方法 (Char, CultureInfo)
Char 结构

使用指定的区域性特定格式设置信息将指定 Unicode 字符的值转换为它的小写等效项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToLower ( _
    c As Char, _
    culture As CultureInfo _
) As Char
public static char ToLower(
    char c,
    CultureInfo culture
)
public:
static wchar_t ToLower(
    wchar_t c,
    CultureInfo^ culture
)
static member ToLower :
        c:char *
        culture:CultureInfo -> char

参数

c
类型： System Char
要转换的 Unicode 字符。
culture
类型： System.Globalization CultureInfo
提供区域性特定的大小写规则的对象，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Char
根据 culture 修改的 c 的小写等效项；如果 c 已经是小写形式或不是字母，则为 c 的未更改值。
异常 | 条件
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

使用 String..::.ToLower 将字符串转换为小写。

下面的代码示例演示 ToLower。

imports System

Module ToLowerSample

    Sub Main()
        Console.WriteLine(Char.ToLower("A"c))               ' Output: "a"
    End Sub

End Module

using System;
using System.Globalization;  // for CultureInfo

public class ToLowerSample {
    public static void Main() {
        Console.WriteLine(Char.ToLower('A'));				// Output: "a"
    }
}

using namespace System;
using namespace System::Globalization;

// for CultureInfo
void main()
{
   Console::WriteLine( Char::ToLower( 'A' ) ); // Output: "a"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
ToLower 重载
System 命名空间
CultureInfo CurrentCulture
String ToLower
Char ToUpper


Char ..::.ToLowerInvariant 方法

Char
.
.
::
.
ToLowerInvariant 方法
Char 结构

使用固定区域性的大小写规则，将 Unicode 字符的值转换为其小写等效项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToLowerInvariant ( _
    c As Char _
) As Char
public static char ToLowerInvariant(
    char c
)
public:
static wchar_t ToLowerInvariant(
    wchar_t c
)
static member ToLowerInvariant :
        c:char -> char

参数

c
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Char
c 参数的小写等效项；如果 c 已经是小写形式或不是字母，则为 c 的未更改值。

如果您的应用程序不受当前区域性的影响，但依赖于以可预测方式更改的字符的大小写，则使用 ToLowerInvariant 方法。ToLowerInvariant 方法与 ToLower(Char, CultureInfo.InvariantCulture) 等效。 如果您的应用程序不受当前区域性的影响，但依赖于以可预测方式更改的字符的大小写，则使用 ToLowerInvariant 方法。ToLowerInvariant 方法与 ToLower(Char, CultureInfo.InvariantCulture) 等效。

使用 String..::.ToLowerInvariant 将字符串转换为小写。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
System 命名空间
String ToLower
Char ToUpper
CultureInfo InvariantCulture


Char ..::.ToString 方法

Char
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

将此实例的值转换为其等效的字符串表示形式。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.ToString 方法

Char
.
.
::
.
ToString 方法
Char 结构

将此实例的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示形式。

下面的代码示例演示 ToString。

Imports System

Module ToStringSample

    Sub Main()

        Dim ch As Char
        ch = "a"c
        Console.WriteLine(ch.ToString())        ' Output: "a"

        Console.WriteLine(Char.ToString("b"c))  ' Output: "b"

    End Sub

End Module

using System;

public class ToStringSample {
    public static void Main() {
        char ch = 'a';
        Console.WriteLine(ch.ToString());		// Output: "a"

        Console.WriteLine(Char.ToString('b'));	// Output: "b"
    }
}

using namespace System;
int main()
{
   char ch = 'a';
   Console::WriteLine( ch ); // Output: "a"
   Console::WriteLine( Char::ToString( 'b' ) ); // Output: "b"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
ToString 重载
System 命名空间
Parse
String


Char ..::.ToString 方法 (Char)

Char
.
.
::
.
ToString 方法 (Char)
Char 结构

将指定的 Unicode 字符转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    c As Char _
) As String
public static string ToString(
    char c
)
public:
static String^ ToString(
    wchar_t c
)
static member ToString :
        c:char -> string

参数

c
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System String
c 的值的字符串表示形式。

下面的代码示例演示 ToString。

Imports System

Module ToStringSample

    Sub Main()

        Dim ch As Char
        ch = "a"c
        Console.WriteLine(ch.ToString())        ' Output: "a"

        Console.WriteLine(Char.ToString("b"c))  ' Output: "b"

    End Sub

End Module

using System;

public class ToStringSample {
    public static void Main() {
        char ch = 'a';
        Console.WriteLine(ch.ToString());		// Output: "a"

        Console.WriteLine(Char.ToString('b'));	// Output: "b"
    }
}

using namespace System;
int main()
{
   char ch = 'a';
   Console::WriteLine( ch ); // Output: "a"
   Console::WriteLine( Char::ToString( 'b' ) ); // Output: "b"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
ToString 重载
System 命名空间
Parse
String


Char ..::.ToString 方法 (IFormatProvider)

Char
.
.
::
.
ToString 方法 (IFormatProvider)
Char 结构

使用指定的区域性特定格式信息将此实例的值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
（保留）一个对象，用于提供区域性特定的格式设置信息。

返回值

类型： System String
此实例的值的字符串表示形式，由 provider 指定。

实现

provider 参数被忽略，它不参与此操作。

下面的代码示例演示 ToString 的重载。

Imports System

Module ToStringSample

    Sub Main()

        Dim ch As Char
        ch = "a"c
        Console.WriteLine(ch.ToString())        ' Output: "a"

        Console.WriteLine(Char.ToString("b"c))  ' Output: "b"

    End Sub

End Module

using System;

public class ToStringSample {
    public static void Main() {
        char ch = 'a';
        Console.WriteLine(ch.ToString());		// Output: "a"

        Console.WriteLine(Char.ToString('b'));	// Output: "b"
    }
}

using namespace System;
int main()
{
   char ch = 'a';
   Console::WriteLine( ch ); // Output: "a"
   Console::WriteLine( Char::ToString( 'b' ) ); // Output: "b"
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
ToString 重载
System 命名空间
Parse
String


Char ..::.ToUpper 方法

Char
.
.
::
.
ToUpper 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Char 结构

将 Unicode 字符的值转换为它的大写等效项。

名称 说明
页首

参考

Char 结构
Char 成员
System 命名空间


Char ..::.ToUpper 方法 (Char)

Char
.
.
::
.
ToUpper 方法 (Char)
Char 结构

将 Unicode 字符的值转换为它的大写等效项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToUpper ( _
    c As Char _
) As Char
public static char ToUpper(
    char c
)
public:
static wchar_t ToUpper(
    wchar_t c
)
static member ToUpper :
        c:char -> char

参数

c
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Char
c 的大写等效项；如果 c 已经是大写形式或不是字母，则为 c 的未更改值。

从当前区域性获取大小写规则。

使用 String..::.ToUpper 将字符串转换为大写。

对调用者的说明

如在 .NET Framework 中使用字符串的最佳做法中所述，建议您避免调用替换默认值的字符大小写和字符串大小写方法。相反，您应调用要求显式指定的参数的方法。若要使用当前区域性的大小写约定将字符转换为大写，请使用 CultureInfo..::.CurrentCulture 的值作为其 culture 参数来调用 ToUpper(Char, CultureInfo) 方法重载。 如在 .NET Framework 中使用字符串的最佳做法中所述，建议您避免调用替换默认值的字符大小写和字符串大小写方法。相反，您应调用要求显式指定的参数的方法。若要使用当前区域性的大小写约定将字符转换为大写，请使用 CultureInfo..::.CurrentCulture 的值作为其 culture 参数来调用 ToUpper(Char, CultureInfo) 方法重载。 如在 .NET Framework 中使用字符串的最佳做法中所述，建议您避免调用替换默认值的字符大小写和字符串大小写方法。相反，您应调用要求显式指定的参数的方法。若要使用当前区域性的大小写约定将字符转换为大写，请使用 CultureInfo..::.CurrentCulture 的值作为其 culture 参数来调用 ToUpper(Char, CultureInfo) 方法重载。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
ToUpper 重载
System 命名空间
String ToUpper
Char ToLower


Char ..::.ToUpper 方法 (Char, CultureInfo)

Char
.
.
::
.
ToUpper 方法 (Char, CultureInfo)
Char 结构

使用指定的区域性特定格式设置信息将指定 Unicode 字符的值转换为它的大写等效项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToUpper ( _
    c As Char, _
    culture As CultureInfo _
) As Char
public static char ToUpper(
    char c,
    CultureInfo culture
)
public:
static wchar_t ToUpper(
    wchar_t c,
    CultureInfo^ culture
)
static member ToUpper :
        c:char *
        culture:CultureInfo -> char

参数

c
类型： System Char
要转换的 Unicode 字符。
culture
类型： System.Globalization CultureInfo
提供区域性特定的大小写规则的对象，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Char
根据 culture 修改的 c 的大写等效项；如果 c 已经是大写形式或不是字母，则为 c 的未更改值。
异常 | 条件
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

使用 String..::.ToUpper 将字符串转换为大写。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Char 结构
Char 成员
ToUpper 重载
System 命名空间
CultureInfo CurrentCulture
String ToUpper
Char ToLower


Char ..::.ToUpperInvariant 方法

Char
.
.
::
.
ToUpperInvariant 方法
Char 结构

使用固定区域性的大小写规则，将 Unicode 字符的值转换为其大写等效项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToUpperInvariant ( _
    c As Char _
) As Char
public static char ToUpperInvariant(
    char c
)
public:
static wchar_t ToUpperInvariant(
    wchar_t c
)
static member ToUpperInvariant :
        c:char -> char

参数

c
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Char
c 参数的大写等效项；如果 c 已经是大写形式或不是字母，则为 c 的未更改值。

如果您的应用程序不受当前区域性的影响，但依赖于以可预测方式更改的字符的大小写，则使用 ToUpperInvariant 方法。ToUpperInvariant 方法与 ToUpper(Char, CultureInfo.InvariantCulture) 等效。 如果您的应用程序不受当前区域性的影响，但依赖于以可预测方式更改的字符的大小写，则使用 ToUpperInvariant 方法。ToUpperInvariant 方法与 ToUpper(Char, CultureInfo.InvariantCulture) 等效。

使用 String..::.ToUpperInvariant 将字符串转换为大写。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
System 命名空间
String ToUpper
Char ToUpper
CultureInfo InvariantCulture


Char ..::.TryParse 方法

Char
.
.
::
.
TryParse 方法
Char 结构

将指定字符串的值转换为它的等效 Unicode 字符。一个指示转换是否成功的返回代码。 将指定字符串的值转换为它的等效 Unicode 字符。一个指示转换是否成功的返回代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As Char _
) As Boolean
public static bool TryParse(
    string s,
    out char result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] wchar_t% result
)
static member TryParse :
        s:string *
        result:char byref -> bool

参数

s
类型： System String
包含单个字符的字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
result
类型： System Char %
此方法返回时，如果转换成功，则包含与 s 中的单个字符等效的 Unicode 字符；如果转换失败，则包含未定义的值。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者 s 的长度不是 1，则转换失败。该参数未经初始化即被传递。 此方法返回时，如果转换成功，则包含与 s 中的单个字符等效的 Unicode 字符；如果转换失败，则包含未定义的值。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者 s 的长度不是 1，则转换失败。该参数未经初始化即被传递。 此方法返回时，如果转换成功，则包含与 s 中的单个字符等效的 Unicode 字符；如果转换失败，则包含未定义的值。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者 s 的长度不是 1，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 参数成功转换，则为 true；否则为 false。

TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。

下面的代码示例演示如何重载多个基类型的 TryParse 方法以及 DateTime 基类型的 TryParseExact 方法。

' This example demonstrates overloads of the TryParse method for
' several base types, and the TryParseExact method for DateTime.
' In most cases, this example uses the most complex overload; that is, the overload
' with the most parameters for a particular type. If a complex overload specifies
' null (Nothing in Visual Basic) for the IFormatProvider parameter, formatting
' information is obtained from the culture associated with the current thread.
' If a complex overload specifies the style parameter, the parameter value is
' the default value used by the equivalent simple overload.

Imports System
Imports System.Globalization

Class Sample
   Public Shared Sub Main()
      Dim result As Boolean
      Dim ci As CultureInfo
      Dim nl As String = Environment.NewLine
      Dim msg1 As String = _
                 "This example demonstrates overloads of the TryParse method for{0}" & _
                 "several base types, as well as the TryParseExact method for DateTime.{0}"
      Dim msg2 As String = "Non-numeric types:{0}"
      Dim msg3 As String = "{0}Numeric types:{0}"
      Dim msg4 As String = "{0}The following types are not CLS-compliant:{0}"

      ' Non-numeric types.
      Dim booleanVal As [Boolean]
      Dim charVal As [Char]
      Dim datetimeVal As DateTime

      ' Numeric types.
      Dim byteVal As [Byte]
      Dim int16Val As Int16
      Dim int32Val As Int32
      Dim int64Val As Int64
      Dim decimalVal As [Decimal]
      Dim singleVal As [Single]
      Dim doubleVal As [Double]

      ' The following types are not CLS-compliant.
      Dim sbyteVal As SByte
      Dim uint16Val As UInt16
      Dim uint32Val As UInt32
      Dim uint64Val As UInt64
      '
      Console.WriteLine(msg1, nl)

      ' Non-numeric types:
      Console.WriteLine(msg2, nl)
      ' DateTime
      ' TryParse:
      ' Assume current culture is en-US, and dates of the form: MMDDYYYY.
      result = DateTime.TryParse("7/4/2004 12:34:56", datetimeVal)
      Show(result, "DateTime #1", datetimeVal.ToString())

      ' Use fr-FR culture, and dates of the form: DDMMYYYY.
      ci = New CultureInfo("fr-FR")
      result = DateTime.TryParse("4/7/2004 12:34:56", ci, DateTimeStyles.None, datetimeVal)
      Show(result, "DateTime #2", datetimeVal.ToString())

      ' TryParseExact:
      ' Use fr-FR culture. The format, "G", is short date and long time.
      result = DateTime.TryParseExact("04/07/2004 12:34:56", "G", ci, DateTimeStyles.None, datetimeVal)
      Show(result, "DateTime #3", datetimeVal.ToString())

      ' Assume en-US culture.
      Dim dateFormats As String() =  {"f", "F", "g", "G"}
      result = DateTime.TryParseExact("7/4/2004 12:34:56 PM", dateFormats, Nothing, DateTimeStyles.None, datetimeVal)
      Show(result, "DateTime #4", datetimeVal.ToString())

      Console.WriteLine()
      ' Boolean
      result = [Boolean].TryParse("true", booleanVal)
      Show(result, "Boolean", booleanVal.ToString())
      ' Char
      result = [Char].TryParse("A", charVal)
      Show(result, "Char", charVal.ToString())

      ' Numeric types:
      Console.WriteLine(msg3, nl)
      ' Byte
      result = [Byte].TryParse("1", NumberStyles.Integer, Nothing, byteVal)
      Show(result, "Byte", byteVal.ToString())
      ' Int16
      result = Int16.TryParse("-2", NumberStyles.Integer, Nothing, int16Val)
      Show(result, "Int16", int16Val.ToString())
      ' Int32
      result = Int32.TryParse("3", NumberStyles.Integer, Nothing, int32Val)
      Show(result, "Int32", int32Val.ToString())
      ' Int64
      result = Int64.TryParse("4", NumberStyles.Integer, Nothing, int64Val)
      Show(result, "Int64", int64Val.ToString())
      ' Decimal
      result = [Decimal].TryParse("-5.5", NumberStyles.Number, Nothing, decimalVal)
      Show(result, "Decimal", decimalVal.ToString())
      ' Single
      result = [Single].TryParse("6.6", NumberStyles.Float Or NumberStyles.AllowThousands, Nothing, singleVal)
      Show(result, "Single", singleVal.ToString())
      ' Double
      result = [Double].TryParse("-7", NumberStyles.Float Or NumberStyles.AllowThousands, Nothing, doubleVal)
      Show(result, "Double", doubleVal.ToString())

      ' Use the simple Double.TryParse overload, but specify an invalid value.
      result = [Double].TryParse("abc", doubleVal)
      Show(result, "Double #2", doubleVal.ToString())
      '
      Console.WriteLine(msg4, nl)
      ' SByte
      result = SByte.TryParse("-8", NumberStyles.Integer, Nothing, sbyteVal)
      Show(result, "SByte", sbyteVal.ToString())
      ' UInt16
      result = UInt16.TryParse("9", NumberStyles.Integer, Nothing, uint16Val)
      Show(result, "UInt16", uint16Val.ToString())
      ' UInt32
      result = UInt32.TryParse("10", NumberStyles.Integer, Nothing, uint32Val)
      Show(result, "UInt32", uint32Val.ToString())
      ' UInt64
      result = UInt64.TryParse("11", NumberStyles.Integer, Nothing, uint64Val)
      Show(result, "UInt64", uint64Val.ToString())
   End Sub 'Main

   Protected Shared Sub Show(parseResult As Boolean, typeName As String, parseValue As String)
      Dim msgSuccess As String = "Parse for {0} = {1}"
      Dim msgFailure As String = "** Parse for {0} failed. Invalid input."
      '
      If parseResult = True Then
         Console.WriteLine(msgSuccess, typeName, parseValue)
      Else
         Console.WriteLine(msgFailure, typeName)
      End If
   End Sub 'Show
End Class 'Sample '
'This example produces the following results:
'
'This example demonstrates overloads of the TryParse method for
'several base types, as well as the TryParseExact method for DateTime.
'
'Non-numeric types:
'
'Parse for DateTime #1 = 7/4/2004 12:34:56 PM
'Parse for DateTime #2 = 7/4/2004 12:34:56 PM
'Parse for DateTime #3 = 7/4/2004 12:34:56 PM
'Parse for DateTime #4 = 7/4/2004 12:34:56 PM
'
'Parse for Boolean = True
'Parse for Char = A
'
'Numeric types:
'
'Parse for Byte = 1
'Parse for Int16 = -2
'Parse for Int32 = 3
'Parse for Int64 = 4
'Parse for Decimal = -5.5
'Parse for Single = 6.6
'Parse for Double = -7
'** Parse for Double #2 failed. Invalid input.
'
'The following types are not CLS-compliant:
'
'Parse for SByte = -8
'Parse for UInt16 = 9
'Parse for UInt32 = 10
'Parse for UInt64 = 11
'

// This example demonstrates overloads of the TryParse method for
// several base types, and the TryParseExact method for DateTime.

// In most cases, this example uses the most complex overload; that is, the overload
// with the most parameters for a particular type. If a complex overload specifies
// null (Nothing in Visual Basic) for the IFormatProvider parameter, formatting
// information is obtained from the culture associated with the current thread.
// If a complex overload specifies the style parameter, the parameter value is
// the default value used by the equivalent simple overload.

using System;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    bool     result;
    CultureInfo ci;
    string   nl = Environment.NewLine;
    string   msg1 =
             "This example demonstrates overloads of the TryParse method for{0}" +
             "several base types, as well as the TryParseExact method for DateTime.{0}";
    string   msg2 = "Non-numeric types:{0}";
    string   msg3 = "{0}Numeric types:{0}";
    string   msg4 = "{0}The following types are not CLS-compliant:{0}";

// Non-numeric types.
    Boolean  booleanVal;
    Char     charVal;
    DateTime datetimeVal;

// Numeric types.
    Byte     byteVal;
    Int16    int16Val;
    Int32    int32Val;
    Int64    int64Val;
    Decimal  decimalVal;
    Single   singleVal;
    Double   doubleVal;

// The following types are not CLS-compliant.
    SByte    sbyteVal;
    UInt16   uint16Val;
    UInt32   uint32Val;
    UInt64   uint64Val;
//
    Console.WriteLine(msg1, nl);

// Non-numeric types:
    Console.WriteLine(msg2, nl);
// DateTime
  // TryParse:
    // Assume current culture is en-US, and dates of the form: MMDDYYYY.
    result = DateTime.TryParse("7/4/2004 12:34:56", out datetimeVal);
    Show(result, "DateTime #1", datetimeVal.ToString());

    // Use fr-FR culture, and dates of the form: DDMMYYYY.
    ci = new CultureInfo("fr-FR");
    result = DateTime.TryParse("4/7/2004 12:34:56",
             ci, DateTimeStyles.None, out datetimeVal);
    Show(result, "DateTime #2", datetimeVal.ToString());

  // TryParseExact:
    // Use fr-FR culture. The format, "G", is short date and long time.
    result = DateTime.TryParseExact("04/07/2004 12:34:56", "G",
             ci, DateTimeStyles.None, out datetimeVal);
    Show(result, "DateTime #3", datetimeVal.ToString());

    // Assume en-US culture.
    string[] dateFormats = {"f", "F", "g", "G"};
    result = DateTime.TryParseExact("7/4/2004 12:34:56 PM",
             dateFormats, null, DateTimeStyles.None,
             out datetimeVal);
    Show(result, "DateTime #4", datetimeVal.ToString());

    Console.WriteLine();
// Boolean
    result = Boolean.TryParse("true", out booleanVal);
    Show(result, "Boolean", booleanVal.ToString());
// Char
    result = Char.TryParse("A", out charVal);
    Show(result, "Char", charVal.ToString());

// Numeric types:
    Console.WriteLine(msg3, nl);
// Byte
    result = Byte.TryParse("1", NumberStyles.Integer, null, out byteVal);
    Show(result, "Byte", byteVal.ToString());
// Int16
    result = Int16.TryParse("-2", NumberStyles.Integer, null, out int16Val);
    Show(result, "Int16", int16Val.ToString());
// Int32
    result = Int32.TryParse("3", NumberStyles.Integer, null, out int32Val);
    Show(result, "Int32", int32Val.ToString());
// Int64
    result = Int64.TryParse("4", NumberStyles.Integer, null, out int64Val);
    Show(result, "Int64", int64Val.ToString());
// Decimal
    result = Decimal.TryParse("-5.5", NumberStyles.Number, null, out decimalVal);
    Show(result, "Decimal", decimalVal.ToString());
// Single
    result = Single.TryParse("6.6",
             (NumberStyles.Float | NumberStyles.AllowThousands),
             null, out singleVal);
    Show(result, "Single", singleVal.ToString());
// Double
    result = Double.TryParse("-7",
             (NumberStyles.Float | NumberStyles.AllowThousands),
             null, out doubleVal);
    Show(result, "Double", doubleVal.ToString());

// Use the simple Double.TryParse overload, but specify an invalid value.

    result = Double.TryParse("abc", out doubleVal);
    Show(result, "Double #2", doubleVal.ToString());
//
    Console.WriteLine(msg4, nl);
// SByte
    result = SByte.TryParse("-8", NumberStyles.Integer, null, out sbyteVal);
    Show(result, "SByte", sbyteVal.ToString());
// UInt16
    result = UInt16.TryParse("9", NumberStyles.Integer, null, out uint16Val);
    Show(result, "UInt16", uint16Val.ToString());
// UInt32
    result = UInt32.TryParse("10", NumberStyles.Integer, null, out uint32Val);
    Show(result, "UInt32", uint32Val.ToString());
// UInt64
    result = UInt64.TryParse("11", NumberStyles.Integer, null, out uint64Val);
    Show(result, "UInt64", uint64Val.ToString());
    }

    protected static void Show(bool parseResult, string typeName,
                               string parseValue)
    {
    string msgSuccess = "Parse for {0} = {1}";
    string msgFailure = "** Parse for {0} failed. Invalid input.";
//
    if (parseResult == true)
        Console.WriteLine(msgSuccess, typeName, parseValue);
    else
        Console.WriteLine(msgFailure, typeName);
   }
}
/*
This example produces the following results:

This example demonstrates overloads of the TryParse method for
several base types, as well as the TryParseExact method for DateTime.

Non-numeric types:

Parse for DateTime #1 = 7/4/2004 12:34:56 PM
Parse for DateTime #2 = 7/4/2004 12:34:56 PM
Parse for DateTime #3 = 7/4/2004 12:34:56 PM
Parse for DateTime #4 = 7/4/2004 12:34:56 PM

Parse for Boolean = True
Parse for Char = A

Numeric types:

Parse for Byte = 1
Parse for Int16 = -2
Parse for Int32 = 3
Parse for Int64 = 4
Parse for Decimal = -5.5
Parse for Single = 6.6
Parse for Double = -7
** Parse for Double #2 failed. Invalid input.

The following types are not CLS-compliant:

Parse for SByte = -8
Parse for UInt16 = 9
Parse for UInt32 = 10
Parse for UInt64 = 11
*/

// This example demonstrates overloads of the TryParse method for
// several base types, and the TryParseExact method for DateTime.
// In most cases, this example uses the most complex overload; that is, the overload
// with the most parameters for a particular type. If a complex overload specifies
// null (Nothing in Visual Basic) for the IFormatProvider parameter, formatting
// information is obtained from the culture associated with the current thread.
// If a complex overload specifies the style parameter, the parameter value is
// the default value used by the equivalent simple overload.
using namespace System;
using namespace System::Globalization;

static void Show( bool parseResult, String^ typeName, String^ parseValue )
{
   String^ msgSuccess = L"Parse for {0} = {1}";
   String^ msgFailure = L"** Parse for {0} failed. Invalid input.";

   //
   if ( parseResult == true )
      Console::WriteLine( msgSuccess, typeName, parseValue );
   else
      Console::WriteLine( msgFailure, typeName );
}

void main()
{
   bool result;
   CultureInfo^ ci;
   String^ nl = Environment::NewLine;
   String^ msg1 = L"This example demonstrates overloads of the TryParse method for{0}"
   L"several base types, as well as the TryParseExact method for DateTime.{0}";
   String^ msg2 = L"Non-numeric types:{0}";
   String^ msg3 = L"{0}Numeric types:{0}";
   String^ msg4 = L"{0}The following types are not CLS-compliant:{0}";

   // Non-numeric types.
   Boolean booleanVal;
   Char charVal;
   DateTime datetimeVal;

   // Numeric types.
   Byte byteVal;
   Int16 int16Val;
   Int32 int32Val;
   Int64 int64Val;
   Decimal decimalVal;
   Single singleVal;
   Double doubleVal;

   // The following types are not CLS-compliant.
   SByte sbyteVal;
   UInt16 uint16Val;
   UInt32 uint32Val;
   UInt64 uint64Val;

   //
   Console::WriteLine( msg1, nl );

   // Non-numeric types:
   Console::WriteLine( msg2, nl );

   // DateTime
   // TryParse:
   // Assume current culture is en-US, and dates of the form: MMDDYYYY.
   result = DateTime::TryParse( L"7/4/2004 12:34:56",  datetimeVal );
   Show( result, L"DateTime #1", datetimeVal.ToString() );

   // Use fr-FR culture, and dates of the form: DDMMYYYY.
   ci = gcnew CultureInfo( L"fr-FR" );
   result = DateTime::TryParse( L"4/7/2004 12:34:56", ci, DateTimeStyles::None,  datetimeVal );
   Show( result, L"DateTime #2", datetimeVal.ToString() );

   // TryParseExact:
   // Use fr-FR culture. The format, "G", is short date and long time.
   result = DateTime::TryParseExact( L"04/07/2004 12:34:56", L"G", ci, DateTimeStyles::None,  datetimeVal );
   Show( result, L"DateTime #3", datetimeVal.ToString() );

   // Assume en-US culture.
   array<String^>^dateFormats = {L"f",L"F",L"g",L"G"};
   result = DateTime::TryParseExact( L"7/4/2004 12:34:56 PM", dateFormats, nullptr, DateTimeStyles::None,  datetimeVal );
   Show( result, L"DateTime #4", datetimeVal.ToString() );
   Console::WriteLine();

   // Boolean
   result = Boolean::TryParse( L"true",  booleanVal );
   Show( result, L"Boolean", booleanVal.ToString() );

   // Char
   result = Char::TryParse( L"A",  charVal );
   Show( result, L"Char", charVal.ToString() );

   // Numeric types:
   Console::WriteLine( msg3, nl );

   // Byte
   result = Byte::TryParse( L"1", NumberStyles::Integer, nullptr,  byteVal );
   Show( result, L"Byte", byteVal.ToString() );

   // Int16
   result = Int16::TryParse( L"-2", NumberStyles::Integer, nullptr,  int16Val );
   Show( result, L"Int16", int16Val.ToString() );

   // Int32
   result = Int32::TryParse( L"3", NumberStyles::Integer, nullptr,  int32Val );
   Show( result, L"Int32", int32Val.ToString() );

   // Int64
   result = Int64::TryParse( L"4", NumberStyles::Integer, nullptr,  int64Val );
   Show( result, L"Int64", int64Val.ToString() );

   // Decimal
   result = Decimal::TryParse( L"-5.5", NumberStyles::Number, nullptr,  decimalVal );
   Show( result, L"Decimal", decimalVal.ToString() );

   // Single
   result = Single::TryParse( L"6.6", static_cast<NumberStyles>((NumberStyles::Float | NumberStyles::AllowThousands)), nullptr,  singleVal );
   Show( result, L"Single", singleVal.ToString() );

   // Double
   result = Double::TryParse( L"-7", static_cast<NumberStyles>(NumberStyles::Float | NumberStyles::AllowThousands), nullptr,  doubleVal );
   Show( result, L"Double", doubleVal.ToString() );

   // Use the simple Double.TryParse overload, but specify an invalid value.
   result = Double::TryParse( L"abc",  doubleVal );
   Show( result, L"Double #2", doubleVal.ToString() );

   //
   Console::WriteLine( msg4, nl );

   // SByte
   result = SByte::TryParse( L"-8", NumberStyles::Integer, nullptr,  sbyteVal );
   Show( result, L"SByte", sbyteVal.ToString() );

   // UInt16
   result = UInt16::TryParse( L"9", NumberStyles::Integer, nullptr,  uint16Val );
   Show( result, L"UInt16", uint16Val.ToString() );

   // UInt32
   result = UInt32::TryParse( L"10", NumberStyles::Integer, nullptr,  uint32Val );
   Show( result, L"UInt32", uint32Val.ToString() );

   // UInt64
   result = UInt64::TryParse( L"11", NumberStyles::Integer, nullptr,  uint64Val );
   Show( result, L"UInt64", uint64Val.ToString() );
}

/*
This example produces the following results:

This example demonstrates overloads of the TryParse method for
several base types, as well as the TryParseExact method for DateTime.

Non-numeric types:

Parse for DateTime #1 = 7/4/2004 12:34:56 PM
Parse for DateTime #2 = 7/4/2004 12:34:56 PM
Parse for DateTime #3 = 7/4/2004 12:34:56 PM
Parse for DateTime #4 = 7/4/2004 12:34:56 PM

Parse for Boolean = True
Parse for Char = A

Numeric types:

Parse for Byte = 1
Parse for Int16 = -2
Parse for Int32 = 3
Parse for Int64 = 4
Parse for Decimal = -5.5
Parse for Single = 6.6
Parse for Double = -7
** Parse for Double #2 failed. Invalid input.

The following types are not CLS-compliant:

Parse for SByte = -8
Parse for UInt16 = 9
Parse for UInt32 = 10
Parse for UInt64 = 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Char 结构
Char 成员
System 命名空间
Parse
ToString

其他资源

分析其他字符串


CharEnumerator 类

CharEnumerator 类
成员

支持循环访问 String 对象并读取它的各个字符。无法继承此类。 支持循环访问 String 对象并读取它的各个字符。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class CharEnumerator _
    Implements ICloneable, IEnumerator(Of Char),  _
    IEnumerator, IDisposable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class CharEnumerator : ICloneable,
    IEnumerator<char>, IEnumerator, IDisposable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class CharEnumerator sealed : ICloneable,
    IEnumerator<wchar_t>, IEnumerator, IDisposable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type CharEnumerator =
    class
        interface ICloneable
        interface IEnumerator<char>
        interface IEnumerator
        interface IDisposable
    end

CharEnumerator 提供对被引用的 String 对象中的字符进行只读访问。例如，Microsoft Visual Basic 和 C# 编程语言中的 foreach 语句（它循环访问集合元素）从 String 对象中检索 CharEnumerator，以便循环访问该对象中的字符。 CharEnumerator 提供对被引用的 String 对象中的字符进行只读访问。例如，Microsoft Visual Basic 和 C# 编程语言中的 foreach 语句（它循环访问集合元素）从 String 对象中检索 CharEnumerator，以便循环访问该对象中的字符。

CharEnumerator 没有公共构造函数。而是调用 String 对象的 GetEnumerator 方法以获取被初始化为引用该字符串的 CharEnumerator。 CharEnumerator 没有公共构造函数。而是调用 String 对象的 GetEnumerator 方法以获取被初始化为引用该字符串的 CharEnumerator。

CharEnumerator 维护一个由 CharEnumerator 引用的字符串中的字符的内部索引。当该索引引用逻辑上位于字符串中第一个字符之前或最后一个字符之后的字符位置时，该索引的状态是无效的；当该索引引用字符串中的字符时，它是有效的。该索引被初始化为逻辑上位于第一个字符之前的位置，当迭代完成后则被设置为位于最后一个字符之后的位置。如果尝试在该索引无效时访问字符，将发生异常。 CharEnumerator 维护一个由 CharEnumerator 引用的字符串中的字符的内部索引。当该索引引用逻辑上位于字符串中第一个字符之前或最后一个字符之后的字符位置时，该索引的状态是无效的；当该索引引用字符串中的字符时，它是有效的。该索引被初始化为逻辑上位于第一个字符之前的位置，当迭代完成后则被设置为位于最后一个字符之后的位置。如果尝试在该索引无效时访问字符，将发生异常。 CharEnumerator 维护一个由 CharEnumerator 引用的字符串中的字符的内部索引。当该索引引用逻辑上位于字符串中第一个字符之前或最后一个字符之后的字符位置时，该索引的状态是无效的；当该索引引用字符串中的字符时，它是有效的。该索引被初始化为逻辑上位于第一个字符之前的位置，当迭代完成后则被设置为位于最后一个字符之后的位置。如果尝试在该索引无效时访问字符，将发生异常。 CharEnumerator 维护一个由 CharEnumerator 引用的字符串中的字符的内部索引。当该索引引用逻辑上位于字符串中第一个字符之前或最后一个字符之后的字符位置时，该索引的状态是无效的；当该索引引用字符串中的字符时，它是有效的。该索引被初始化为逻辑上位于第一个字符之前的位置，当迭代完成后则被设置为位于最后一个字符之后的位置。如果尝试在该索引无效时访问字符，将发生异常。

MoveNext 方法将该索引递增 1，以便依次访问第一个字符以及后面的字符。Reset 方法将该索引设置为逻辑上位于第一个字符之前的位置。Current 属性检索当前由该索引引用的字符。Clone 方法创建 CharEnumerator 的一个副本。 MoveNext 方法将该索引递增 1，以便依次访问第一个字符以及后面的字符。Reset 方法将该索引设置为逻辑上位于第一个字符之前的位置。Current 属性检索当前由该索引引用的字符。Clone 方法创建 CharEnumerator 的一个副本。 MoveNext 方法将该索引递增 1，以便依次访问第一个字符以及后面的字符。Reset 方法将该索引设置为逻辑上位于第一个字符之前的位置。Current 属性检索当前由该索引引用的字符。Clone 方法创建 CharEnumerator 的一个副本。 MoveNext 方法将该索引递增 1，以便依次访问第一个字符以及后面的字符。Reset 方法将该索引设置为逻辑上位于第一个字符之前的位置。Current 属性检索当前由该索引引用的字符。Clone 方法创建 CharEnumerator 的一个副本。

说明 说明

一个或多个线程间的 CharEnumerator 的若干独立实例可以访问 String 的单个实例。实现此类是为了支持 IEnumerator 接口。有关使用枚举数的更多信息，请参见 IEnumerator 主题。 一个或多个线程间的 CharEnumerator 的若干独立实例可以访问 String 的单个实例。实现此类是为了支持 IEnumerator 接口。有关使用枚举数的更多信息，请参见 IEnumerator 主题。 一个或多个线程间的 CharEnumerator 的若干独立实例可以访问 String 的单个实例。实现此类是为了支持 IEnumerator 接口。有关使用枚举数的更多信息，请参见 IEnumerator 主题。

下面的示例使用 CharEnumerator 类枚举字符串中的各字符。此示例通过调用 String..::.GetEnumerator 方法实例化 CharEnumerator 对象，通过调用 MoveNext 方法从一个字符移至下一个字符，并通过检索 Current 属性的值显示当前字符。 下面的示例使用 CharEnumerator 类枚举字符串中的各字符。此示例通过调用 String..::.GetEnumerator 方法实例化 CharEnumerator 对象，通过调用 MoveNext 方法从一个字符移至下一个字符，并通过检索 Current 属性的值显示当前字符。

Dim title As String = "A Tale of Two Cities"
Dim chEnum As CharEnumerator = title.GetEnumerator()
Dim ctr As Integer = 1
Dim outputLine1, outputLine2, outputLine3 As String

Do While chEnum.MoveNext()
   outputLine1 += CStr(iif(ctr < 10 Or ctr Mod 10 <> 0, "  ", CStr(ctr \ 10) + " "))
   outputLine2 += (ctr Mod 10)& " "
   outputLine3 += chEnum.Current & " "
   ctr += 1
Loop

Console.WriteLine("The length of the string is {0} characters:", _
                  title.Length)
Console.WriteLine(outputLine1)
Console.WriteLine(outputLine2)
Console.WriteLine(outputLine3)
' The example displays the following output to the console:
'       The length of the string is 20 characters:
'                         1                   2
'       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
'       A   T a l e   o f   T w o   C i t i e s

string title = "A Tale of Two Cities";
CharEnumerator chEnum = title.GetEnumerator();
int ctr = 1;
string outputLine1 = null;
string outputLine2 = null;
string outputLine3 = null;

while (chEnum.MoveNext())
{
   outputLine1 += ctr < 10 || ctr % 10 != 0 ? "  " : (ctr / 10) + " ";
   outputLine2 += (ctr % 10) + " ";
   outputLine3 += chEnum.Current + " ";
   ctr++;
}

Console.WriteLine("The length of the string is {0} characters:",
                  title.Length);
Console.WriteLine(outputLine1);
Console.WriteLine(outputLine2);
Console.WriteLine(outputLine3);
// The example displays the following output to the console:
//       The length of the string is 20 characters:
//                         1                   2
//       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
//       A   T a l e   o f   T w o   C i t i e s

但请注意，通过使用 foreach（在 C# 中）或 For Each（在 Visual Basic 中）可以在某种程度上更直观地执行相同的操作，如下面的示例所示。

Dim title As String = "A Tale of Two Cities"
Dim ctr As Integer = 1
Dim outputLine1, outputLine2, outputLine3 As String

For Each ch As Char In title
   outputLine1 += CStr(iif(ctr < 10 Or ctr Mod 10 <> 0, "  ", CStr(ctr \ 10) + " "))
   outputLine2 += (ctr Mod 10)& " "
   outputLine3 += ch & " "
   ctr += 1
Next

Console.WriteLine("The length of the string is {0} characters:", _
                  title.Length)
Console.WriteLine(outputLine1)
Console.WriteLine(outputLine2)
Console.WriteLine(outputLine3)
' The example displays the following output to the console:
'       The length of the string is 20 characters:
'                         1                   2
'       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
'       A   T a l e   o f   T w o   C i t i e s

string title = "A Tale of Two Cities";
int ctr = 1;
string outputLine1 = null;
string outputLine2 = null;
string outputLine3 = null;

foreach (char ch in title)
{
   outputLine1 += ctr < 10 || ctr % 10 != 0 ? "  " : (ctr / 10) + " ";
   outputLine2 += (ctr % 10) + " ";
   outputLine3 += ch + " ";
   ctr++;
}

Console.WriteLine("The length of the string is {0} characters:",
                  title.Length);
Console.WriteLine(outputLine1);
Console.WriteLine(outputLine2);
Console.WriteLine(outputLine3);
// The example displays the following output to the console:
//       The length of the string is 20 characters:
//                         1                   2
//       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
//       A   T a l e   o f   T w o   C i t i e s

System System..::.CharEnumeratorCharEnumerator
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CharEnumerator 成员
System 命名空间
String
IEnumerator
IEnumerable
ICollection


CharEnumerator 成员

CharEnumerator 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CharEnumerator 类

支持循环访问 String 对象并读取它的各个字符。无法继承此类。 支持循环访问 String 对象并读取它的各个字符。无法继承此类。

CharEnumerator 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

CharEnumerator 类
System 命名空间


CharEnumerator 方法

CharEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CharEnumerator 类

CharEnumerator 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

CharEnumerator 类
System 命名空间


CharEnumerator ..::.Clone 方法

CharEnumerator
.
.
::
.
Clone 方法
CharEnumerator 类

创建当前 CharEnumerator 对象的副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Clone As Object
public Object Clone()
public:
virtual Object^ Clone() sealed
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
Object，是当前 CharEnumerator 对象的副本。

实现

返回值是 CharEnumerator 的此实例及其当前状态的副本。这对于在循环访问 String 对象时保存状态很有用。 返回值是 CharEnumerator 的此实例及其当前状态的副本。这对于在循环访问 String 对象时保存状态很有用。

例如，假设应用程序使用 CharEnumerator 的原始实例循环访问 String 中的每个字符。当遇到某些唯一的字符时，应用程序暂停处理并调用 Clone 方法。实际上，这样做可将 CharEnumerator 对象的索引保存在 String 中。 例如，假设应用程序使用 CharEnumerator 的原始实例循环访问 String 中的每个字符。当遇到某些唯一的字符时，应用程序暂停处理并调用 Clone 方法。实际上，这样做可将 CharEnumerator 对象的索引保存在 String 中。 例如，假设应用程序使用 CharEnumerator 的原始实例循环访问 String 中的每个字符。当遇到某些唯一的字符时，应用程序暂停处理并调用 Clone 方法。实际上，这样做可将 CharEnumerator 对象的索引保存在 String 中。

应用程序使用复本定位到 String 的其他部分执行某些辅助处理。这种定位的副作用是复本会忘记处理是在何处停止的。不过，当辅助处理完成后，应用程序将放弃复本，并使用原始 CharEnumerator 实例在原始处理停止的位置继续处理 String。 应用程序使用复本定位到 String 的其他部分执行某些辅助处理。这种定位的副作用是复本会忘记处理是在何处停止的。不过，当辅助处理完成后，应用程序将放弃复本，并使用原始 CharEnumerator 实例在原始处理停止的位置继续处理 String。 应用程序使用复本定位到 String 的其他部分执行某些辅助处理。这种定位的副作用是复本会忘记处理是在何处停止的。不过，当辅助处理完成后，应用程序将放弃复本，并使用原始 CharEnumerator 实例在原始处理停止的位置继续处理 String。

说明 说明

实现此方法是为了支持 ICloneable 接口。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CharEnumerator 类
CharEnumerator 成员
System 命名空间


CharEnumerator ..::.Dispose 方法

CharEnumerator
.
.
::
.
Dispose 方法
CharEnumerator 类

释放由 CharEnumerator 类的当前实例占用的所有资源。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Dispose
public void Dispose()
public:
virtual void Dispose() sealed
abstract Dispose : unit -> unit
override Dispose : unit -> unit

实现

使用完 CharEnumerator 后调用 Dispose。Dispose 方法使 CharEnumerator 处于不可用状态。调用 Dispose 后，必须释放对 CharEnumerator 的所有引用，这样垃圾回收器才能回收 CharEnumerator 占用的内存。 使用完 CharEnumerator 后调用 Dispose。Dispose 方法使 CharEnumerator 处于不可用状态。调用 Dispose 后，必须释放对 CharEnumerator 的所有引用，这样垃圾回收器才能回收 CharEnumerator 占用的内存。 使用完 CharEnumerator 后调用 Dispose。Dispose 方法使 CharEnumerator 处于不可用状态。调用 Dispose 后，必须释放对 CharEnumerator 的所有引用，这样垃圾回收器才能回收 CharEnumerator 占用的内存。

有关更多信息，请参见清理非托管资源和实现 Dispose 方法。

说明 说明

释放对 CharEnumerator 的最后一个引用之前，始终应先调用 Dispose。否则，在垃圾回收器调用 CharEnumerator 对象的 Finalize 方法之前，正在使用的资源不会被释放。 释放对 CharEnumerator 的最后一个引用之前，始终应先调用 Dispose。否则，在垃圾回收器调用 CharEnumerator 对象的 Finalize 方法之前，正在使用的资源不会被释放。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CharEnumerator 类
CharEnumerator 成员
System 命名空间


CharEnumerator ..::.IDisposable ..::.Dispose 方法

CharEnumerator
.
.
::
.
IDisposable
.
.
::
.
Dispose 方法
CharEnumerator 类

释放由 CharEnumerator 类使用的所有资源。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Dispose Implements IDisposable.Dispose
void IDisposable.Dispose()
private:
virtual void Dispose() sealed = IDisposable::Dispose
private abstract Dispose : unit -> unit
private override Dispose : unit -> unit

实现

使用完 CharEnumerator 类后调用 IDisposable..::.Dispose。该方法使 CharEnumerator 类处于不可用状态。执行完调用后，必须释放对 CharEnumerator 类的所有引用，这样垃圾回收器才能收回 CharEnumerator 类占用的内存。 使用完 CharEnumerator 类后调用 IDisposable..::.Dispose。该方法使 CharEnumerator 类处于不可用状态。执行完调用后，必须释放对 CharEnumerator 类的所有引用，这样垃圾回收器才能收回 CharEnumerator 类占用的内存。 使用完 CharEnumerator 类后调用 IDisposable..::.Dispose。该方法使 CharEnumerator 类处于不可用状态。执行完调用后，必须释放对 CharEnumerator 类的所有引用，这样垃圾回收器才能收回 CharEnumerator 类占用的内存。

有关更多信息，请参见清理非托管资源和实现 Dispose 方法。

说明 说明

每次释放对 CharEnumerator 类的最后一次引用前，均应调用 IDisposable..::.Dispose。否则，在垃圾回收器调用 CharEnumerator 对象的 Finalize 方法之前，正在使用的资源不会被释放。 每次释放对 CharEnumerator 类的最后一次引用前，均应调用 IDisposable..::.Dispose。否则，在垃圾回收器调用 CharEnumerator 对象的 Finalize 方法之前，正在使用的资源不会被释放。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CharEnumerator 类
CharEnumerator 成员
System 命名空间


CharEnumerator ..::.MoveNext 方法

CharEnumerator
.
.
::
.
MoveNext 方法
CharEnumerator 类

递增当前 CharEnumerator 对象的内部索引使其指向枚举的字符串的下一个字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function MoveNext As Boolean
public bool MoveNext()
public:
virtual bool MoveNext() sealed
abstract MoveNext : unit -> bool
override MoveNext : unit -> bool

返回值

类型： System Boolean
如果索引递增成功并且在枚举字符串内，则为 true；否则为 false。

实现

CharEnumerator 类维护枚举字符串的内部索引，MoveNext 方法使该索引递增 1。调用 GetEnumerator 或 Reset 后，请调用 MoveNext 以将当前字符位置递增到枚举字符串中的第一个字符。检查返回值是否为 true 以确定当前字符位置是否有效。 CharEnumerator 类维护枚举字符串的内部索引，MoveNext 方法使该索引递增 1。调用 GetEnumerator 或 Reset 后，请调用 MoveNext 以将当前字符位置递增到枚举字符串中的第一个字符。检查返回值是否为 true 以确定当前字符位置是否有效。 CharEnumerator 类维护枚举字符串的内部索引，MoveNext 方法使该索引递增 1。调用 GetEnumerator 或 Reset 后，请调用 MoveNext 以将当前字符位置递增到枚举字符串中的第一个字符。检查返回值是否为 true 以确定当前字符位置是否有效。

如果索引已超出枚举字符串中的最后一个字符，则该索引不会被更改并且返回 false。

请注意，如果枚举字符串为空 ("")，则 CharEnumerator 的状态始终无效。这是因为 CharEnumerator 的内部索引最初是在枚举字符串的第一个字符之前，因此无效。MoveNext 逻辑上将索引设置在枚举字符串的最后一个（不存在的）字符之后，这同样无效。 请注意，如果枚举字符串为空 ("")，则 CharEnumerator 的状态始终无效。这是因为 CharEnumerator 的内部索引最初是在枚举字符串的第一个字符之前，因此无效。MoveNext 逻辑上将索引设置在枚举字符串的最后一个（不存在的）字符之后，这同样无效。 请注意，如果枚举字符串为空 ("")，则 CharEnumerator 的状态始终无效。这是因为 CharEnumerator 的内部索引最初是在枚举字符串的第一个字符之前，因此无效。MoveNext 逻辑上将索引设置在枚举字符串的最后一个（不存在的）字符之后，这同样无效。

下面的示例使用 CharEnumerator 类枚举字符串中的各字符。此示例通过调用 String..::.GetEnumerator 方法实例化 CharEnumerator 对象，通过调用 MoveNext 方法从一个字符移至下一个字符，并通过检索 Current 属性的值显示当前字符。 下面的示例使用 CharEnumerator 类枚举字符串中的各字符。此示例通过调用 String..::.GetEnumerator 方法实例化 CharEnumerator 对象，通过调用 MoveNext 方法从一个字符移至下一个字符，并通过检索 Current 属性的值显示当前字符。

Dim title As String = "A Tale of Two Cities"
Dim chEnum As CharEnumerator = title.GetEnumerator()
Dim ctr As Integer = 1
Dim outputLine1, outputLine2, outputLine3 As String

Do While chEnum.MoveNext()
   outputLine1 += CStr(iif(ctr < 10 Or ctr Mod 10 <> 0, "  ", CStr(ctr \ 10) + " "))
   outputLine2 += (ctr Mod 10)& " "
   outputLine3 += chEnum.Current & " "
   ctr += 1
Loop

Console.WriteLine("The length of the string is {0} characters:", _
                  title.Length)
Console.WriteLine(outputLine1)
Console.WriteLine(outputLine2)
Console.WriteLine(outputLine3)
' The example displays the following output to the console:
'       The length of the string is 20 characters:
'                         1                   2
'       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
'       A   T a l e   o f   T w o   C i t i e s

string title = "A Tale of Two Cities";
CharEnumerator chEnum = title.GetEnumerator();
int ctr = 1;
string outputLine1 = null;
string outputLine2 = null;
string outputLine3 = null;

while (chEnum.MoveNext())
{
   outputLine1 += ctr < 10 || ctr % 10 != 0 ? "  " : (ctr / 10) + " ";
   outputLine2 += (ctr % 10) + " ";
   outputLine3 += chEnum.Current + " ";
   ctr++;
}

Console.WriteLine("The length of the string is {0} characters:",
                  title.Length);
Console.WriteLine(outputLine1);
Console.WriteLine(outputLine2);
Console.WriteLine(outputLine3);
// The example displays the following output to the console:
//       The length of the string is 20 characters:
//                         1                   2
//       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
//       A   T a l e   o f   T w o   C i t i e s

但请注意，通过使用 foreach（在 C# 中）或 For Each（在 Visual Basic 中）可以在某种程度上更直观地执行相同的操作，如下面的示例所示。

Dim title As String = "A Tale of Two Cities"
Dim ctr As Integer = 1
Dim outputLine1, outputLine2, outputLine3 As String

For Each ch As Char In title
   outputLine1 += CStr(iif(ctr < 10 Or ctr Mod 10 <> 0, "  ", CStr(ctr \ 10) + " "))
   outputLine2 += (ctr Mod 10)& " "
   outputLine3 += ch & " "
   ctr += 1
Next

Console.WriteLine("The length of the string is {0} characters:", _
                  title.Length)
Console.WriteLine(outputLine1)
Console.WriteLine(outputLine2)
Console.WriteLine(outputLine3)
' The example displays the following output to the console:
'       The length of the string is 20 characters:
'                         1                   2
'       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
'       A   T a l e   o f   T w o   C i t i e s

string title = "A Tale of Two Cities";
int ctr = 1;
string outputLine1 = null;
string outputLine2 = null;
string outputLine3 = null;

foreach (char ch in title)
{
   outputLine1 += ctr < 10 || ctr % 10 != 0 ? "  " : (ctr / 10) + " ";
   outputLine2 += (ctr % 10) + " ";
   outputLine3 += ch + " ";
   ctr++;
}

Console.WriteLine("The length of the string is {0} characters:",
                  title.Length);
Console.WriteLine(outputLine1);
Console.WriteLine(outputLine2);
Console.WriteLine(outputLine3);
// The example displays the following output to the console:
//       The length of the string is 20 characters:
//                         1                   2
//       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
//       A   T a l e   o f   T w o   C i t i e s

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CharEnumerator 类
CharEnumerator 成员
System 命名空间


CharEnumerator ..::.Reset 方法

CharEnumerator
.
.
::
.
Reset 方法
CharEnumerator 类

将索引初始化为逻辑上位于枚举字符串的第一个字符之前的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Reset
public void Reset()
public:
virtual void Reset() sealed
abstract Reset : unit -> unit
override Reset : unit -> unit

实现

CharEnumerator 类维护枚举字符串的内部索引，Reset 方法将该索引设置为无效状态。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CharEnumerator 类
CharEnumerator 成员
System 命名空间


CharEnumerator 属性

CharEnumerator 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CharEnumerator 类

CharEnumerator 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

CharEnumerator 类
System 命名空间


CharEnumerator ..::.Current 属性

CharEnumerator
.
.
::
.
Current 属性
CharEnumerator 类

获取由此 CharEnumerator 对象枚举的字符串中当前引用的字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Current As Char
    Get
public char Current { get; }
public:
virtual property wchar_t Current {
    wchar_t get () sealed;
}
abstract Current : char
override Current : char

属性值

类型： System Char
当前由此 CharEnumerator 对象引用的 Unicode 字符。

实现

异常 | 条件
InvalidOperationException | 该索引无效；即它位于枚举字符串的第一个字符之前或最后一个字符之后。

CharEnumerator 类维护枚举字符串的内部索引，Current 属性返回当前由该索引引用的字符。仅当索引有效时才应调用此属性，否则将引发异常。 CharEnumerator 类维护枚举字符串的内部索引，Current 属性返回当前由该索引引用的字符。仅当索引有效时才应调用此属性，否则将引发异常。

该索引对于空字符串 ("") 始终无效。在调用 String..::.GetEnumerator 或 Reset 方法后该索引也无效。在调用这两个方法中的任何一个后，调用 MoveNext 方法以调整枚举字符串中第一个字符的索引。只要 MoveNext 方法返回 true，该索引就有效。 该索引对于空字符串 ("") 始终无效。在调用 String..::.GetEnumerator 或 Reset 方法后该索引也无效。在调用这两个方法中的任何一个后，调用 MoveNext 方法以调整枚举字符串中第一个字符的索引。只要 MoveNext 方法返回 true，该索引就有效。 该索引对于空字符串 ("") 始终无效。在调用 String..::.GetEnumerator 或 Reset 方法后该索引也无效。在调用这两个方法中的任何一个后，调用 MoveNext 方法以调整枚举字符串中第一个字符的索引。只要 MoveNext 方法返回 true，该索引就有效。 该索引对于空字符串 ("") 始终无效。在调用 String..::.GetEnumerator 或 Reset 方法后该索引也无效。在调用这两个方法中的任何一个后，调用 MoveNext 方法以调整枚举字符串中第一个字符的索引。只要 MoveNext 方法返回 true，该索引就有效。

Current 不移动该索引，连续的 Current 调用返回的都是同一个字符，直到调用 MoveNext、Reset 或 String..::.GetEnumerator 时为止。

下面的示例使用 CharEnumerator 类枚举字符串中的各字符。此示例通过调用 String..::.GetEnumerator 方法实例化 CharEnumerator 对象，通过调用 MoveNext 方法从一个字符移至下一个字符，并通过检索 Current 属性的值显示当前字符。 下面的示例使用 CharEnumerator 类枚举字符串中的各字符。此示例通过调用 String..::.GetEnumerator 方法实例化 CharEnumerator 对象，通过调用 MoveNext 方法从一个字符移至下一个字符，并通过检索 Current 属性的值显示当前字符。

Dim title As String = "A Tale of Two Cities"
Dim chEnum As CharEnumerator = title.GetEnumerator()
Dim ctr As Integer = 1
Dim outputLine1, outputLine2, outputLine3 As String

Do While chEnum.MoveNext()
   outputLine1 += CStr(iif(ctr < 10 Or ctr Mod 10 <> 0, "  ", CStr(ctr \ 10) + " "))
   outputLine2 += (ctr Mod 10)& " "
   outputLine3 += chEnum.Current & " "
   ctr += 1
Loop

Console.WriteLine("The length of the string is {0} characters:", _
                  title.Length)
Console.WriteLine(outputLine1)
Console.WriteLine(outputLine2)
Console.WriteLine(outputLine3)
' The example displays the following output to the console:
'       The length of the string is 20 characters:
'                         1                   2
'       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
'       A   T a l e   o f   T w o   C i t i e s

string title = "A Tale of Two Cities";
CharEnumerator chEnum = title.GetEnumerator();
int ctr = 1;
string outputLine1 = null;
string outputLine2 = null;
string outputLine3 = null;

while (chEnum.MoveNext())
{
   outputLine1 += ctr < 10 || ctr % 10 != 0 ? "  " : (ctr / 10) + " ";
   outputLine2 += (ctr % 10) + " ";
   outputLine3 += chEnum.Current + " ";
   ctr++;
}

Console.WriteLine("The length of the string is {0} characters:",
                  title.Length);
Console.WriteLine(outputLine1);
Console.WriteLine(outputLine2);
Console.WriteLine(outputLine3);
// The example displays the following output to the console:
//       The length of the string is 20 characters:
//                         1                   2
//       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
//       A   T a l e   o f   T w o   C i t i e s

但请注意，通过使用 foreach（在 C# 中）或 For Each（在 Visual Basic 中）可以在某种程度上更直观地执行相同的操作，如下面的示例所示。

Dim title As String = "A Tale of Two Cities"
Dim ctr As Integer = 1
Dim outputLine1, outputLine2, outputLine3 As String

For Each ch As Char In title
   outputLine1 += CStr(iif(ctr < 10 Or ctr Mod 10 <> 0, "  ", CStr(ctr \ 10) + " "))
   outputLine2 += (ctr Mod 10)& " "
   outputLine3 += ch & " "
   ctr += 1
Next

Console.WriteLine("The length of the string is {0} characters:", _
                  title.Length)
Console.WriteLine(outputLine1)
Console.WriteLine(outputLine2)
Console.WriteLine(outputLine3)
' The example displays the following output to the console:
'       The length of the string is 20 characters:
'                         1                   2
'       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
'       A   T a l e   o f   T w o   C i t i e s

string title = "A Tale of Two Cities";
int ctr = 1;
string outputLine1 = null;
string outputLine2 = null;
string outputLine3 = null;

foreach (char ch in title)
{
   outputLine1 += ctr < 10 || ctr % 10 != 0 ? "  " : (ctr / 10) + " ";
   outputLine2 += (ctr % 10) + " ";
   outputLine3 += ch + " ";
   ctr++;
}

Console.WriteLine("The length of the string is {0} characters:",
                  title.Length);
Console.WriteLine(outputLine1);
Console.WriteLine(outputLine2);
Console.WriteLine(outputLine3);
// The example displays the following output to the console:
//       The length of the string is 20 characters:
//                         1                   2
//       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
//       A   T a l e   o f   T w o   C i t i e s

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CharEnumerator 类
CharEnumerator 成员
System 命名空间


CharEnumerator ..::.IEnumerator ..::.Current 属性

CharEnumerator
.
.
::
.
IEnumerator
.
.
::
.
Current 属性
CharEnumerator 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

获取由此 CharEnumerator 对象枚举的字符串中当前引用的字符。有关此成员的说明，请参见 IEnumerator..::.Current。 获取由此 CharEnumerator 对象枚举的字符串中当前引用的字符。有关此成员的说明，请参见 IEnumerator..::.Current。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property Current As Object
    Implements IEnumerator.Current
    Get
Object IEnumerator.Current { get; }
private:
virtual property Object^ Current {
    Object^ get () sealed = IEnumerator::Current::get;
}
private abstract Current : Object
private override Current : Object

属性值

类型： System Object
当前由此 CharEnumerator 对象引用的已装箱 Unicode 字符。

实现

异常 | 条件
InvalidOperationException | 枚举尚未启动。 - 或 - 枚举已经终止。

此成员是显式的接口成员实现。它只能在 CharEnumerator 实例被强制转换为 IEnumerator 接口时使用。 此成员是显式的接口成员实现。它只能在 CharEnumerator 实例被强制转换为 IEnumerator 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CharEnumerator 类
CharEnumerator 成员
System 命名空间


CLSCompliantAttribute 类

CLSCompliantAttribute 类
成员

指示程序元素是否符合公共语言规范 (CLS)。无法继承此类。 指示程序元素是否符合公共语言规范 (CLS)。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<AttributeUsageAttribute(AttributeTargets.All, Inherited := True, AllowMultiple := False)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class CLSCompliantAttribute _
    Inherits Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
[ComVisibleAttribute(true)]
public sealed class CLSCompliantAttribute : Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets::All, Inherited = true, AllowMultiple = false)]
[ComVisibleAttribute(true)]
public ref class CLSCompliantAttribute sealed : public Attribute
[<SealedAttribute>]
[<SerializableAttribute>]
[<AttributeUsageAttribute(AttributeTargets.All, Inherited = true, AllowMultiple = false)>]
[<ComVisibleAttribute(true)>]
type CLSCompliantAttribute =
    class
        inherit Attribute
    end

可以对下列程序元素应用 CLSCompliantAttribute 特性：程序集、模块、类、结构、枚举、构造函数、方法、属性、字段、事件、接口、委托、参数和返回值。不过，CLS 遵从性的概念仅对程序集、模块、类型和类型成员有意义，对成员签名的各部分没有意义。因此，CLSCompliantAttribute 在应用于参数或返回值程序元素时被忽略。 可以对下列程序元素应用 CLSCompliantAttribute 特性：程序集、模块、类、结构、枚举、构造函数、方法、属性、字段、事件、接口、委托、参数和返回值。不过，CLS 遵从性的概念仅对程序集、模块、类型和类型成员有意义，对成员签名的各部分没有意义。因此，CLSCompliantAttribute 在应用于参数或返回值程序元素时被忽略。 可以对下列程序元素应用 CLSCompliantAttribute 特性：程序集、模块、类、结构、枚举、构造函数、方法、属性、字段、事件、接口、委托、参数和返回值。不过，CLS 遵从性的概念仅对程序集、模块、类型和类型成员有意义，对成员签名的各部分没有意义。因此，CLSCompliantAttribute 在应用于参数或返回值程序元素时被忽略。

如果没有将任何 CLSCompliantAttribute 应用于程序元素，则默认情况下：

  • 程序集不符合 CLS。

  • 只有当类型的封闭类型或程序集符合 CLS 时，该类型才符合 CLS。

  • 仅当类型符合 CLS 时，该类型的成员才符合 CLS。

如果程序集被标记为符合 CLS，则程序集中不符合 CLS 的任何公共地公开的类型都必须由使用 false 参数的 CLSCompliantAttribute 来加以标记。同样，如果类被标记为符合 CLS，必须分别标记所有不符合 CLS 的成员。所有不符合 CLS 的成员必须提供符合 CLS 的相应替换成员。 如果程序集被标记为符合 CLS，则程序集中不符合 CLS 的任何公共地公开的类型都必须由使用 false 参数的 CLSCompliantAttribute 来加以标记。同样，如果类被标记为符合 CLS，必须分别标记所有不符合 CLS 的成员。所有不符合 CLS 的成员必须提供符合 CLS 的相应替换成员。 如果程序集被标记为符合 CLS，则程序集中不符合 CLS 的任何公共地公开的类型都必须由使用 false 参数的 CLSCompliantAttribute 来加以标记。同样，如果类被标记为符合 CLS，必须分别标记所有不符合 CLS 的成员。所有不符合 CLS 的成员必须提供符合 CLS 的相应替换成员。

应用于程序集或模块的特性必须出现在 C# using（在 Visual Basic 中为 Imports）子句之后和代码之前。

有关使用特性的更多信息，请参见利用特性扩展元数据。

说明 说明

当前的 Microsoft Visual Basic 编译器有意不生成是否符合 CLS 的警告，但是，该编译器以后的版本将会发出此警告。

下面的示例将 CLSCompliantAttribute 应用到整个程序集。

using System;
    [assembly: CLSCompliant(true)]

下面的声明会生成一个 CLS 遵从性警告，原因是 CLS 中没有指定 UInt32 类型。

 public int SetValue(UInt32 value);

如果用 CLSCompliantAttribute 标记此声明，则不生成任何编译器警告或错误。

[CLSCompliant(false)]
 public int SetValue(UInt32 value);

System System..::.CLSCompliantAttributeCLSCompliantAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CLSCompliantAttribute 成员
System 命名空间
Attribute

其他资源

公共语言规范
利用特性扩展元数据


CLSCompliantAttribute 成员

CLSCompliantAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CLSCompliantAttribute 类

指示程序元素是否符合公共语言规范 (CLS)。无法继承此类。 指示程序元素是否符合公共语言规范 (CLS)。无法继承此类。

CLSCompliantAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

CLSCompliantAttribute 类
System 命名空间


CLSCompliantAttribute 构造函数

CLSCompliantAttribute 构造函数
CLSCompliantAttribute 类

用布尔值初始化 CLSCompliantAttribute 类的实例，该值指示所指示的程序元素是否符合 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    isCompliant As Boolean _
)
public CLSCompliantAttribute(
    bool isCompliant
)
public:
CLSCompliantAttribute(
    bool isCompliant
)
new :
        isCompliant:bool -> CLSCompliantAttribute

参数

isCompliant
类型： System Boolean
如果程序元素符合 CLS，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CLSCompliantAttribute 类
CLSCompliantAttribute 成员
System 命名空间


CLSCompliantAttribute 方法

CLSCompliantAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CLSCompliantAttribute 类

CLSCompliantAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

CLSCompliantAttribute 类
System 命名空间


CLSCompliantAttribute 属性

CLSCompliantAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CLSCompliantAttribute 类

CLSCompliantAttribute 类型公开以下成员。

名称 说明
页首

参考

CLSCompliantAttribute 类
System 命名空间


CLSCompliantAttribute ..::.IsCompliant 属性

CLSCompliantAttribute
.
.
::
.
IsCompliant 属性
CLSCompliantAttribute 类

获取指示所指示的程序元素是否符合 CLS 的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsCompliant As Boolean
    Get
public bool IsCompliant { get; }
public:
property bool IsCompliant {
    bool get ();
}
member IsCompliant : bool

属性值

类型： System Boolean
如果程序元素符合 CLS，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CLSCompliantAttribute 类
CLSCompliantAttribute 成员
System 命名空间


Comparison <(Of <(T >)>) 委托

Comparison
<
(Of
<
(
T
>
)
>
)
委托

表示比较同一类型的两个对象的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Comparison(Of In T) ( _ x As T, _ y As T _ ) As Integer
public delegate int Comparison<in T>( T x, T y )
generic<typename T> public delegate int Comparison( T x, T y )
type Comparison = delegate of x:'T * y:'T -> int
类型参数
in
In
in
in
T
T
要比较的对象的类型。
该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。
参数
x
类型：
T
要比较的第一个对象。
y
类型：
T
要比较的第二个对象。
返回值
类型： System Int32
一个有符号整数，它指示
x
与
y
的相对值，如下表所示。
值
含义
小于 0
x
小于
y
。
0
x
等于
y
。
大于 0
x
大于
y
。

此委托由 Array 类的 Sort<(Of <(T>)>)(array<T>[]()[], Comparison<(Of <(T>)>)) 方法重载和 List<(Of <(T>)>) 类的 Sort(Comparison<(Of <(T>)>)) 方法重载使用，用于对数组或列表中的元素进行排序。

下面的代码示例演示如何使用 Comparison<(Of <(T>)>) 委托以及 Sort(Comparison<(Of <(T>)>)) 方法重载。

代码示例定义了一个名为 CompareDinosByLength 的字符串的替换比较方法。此方法按如下方式工作：首先测试要进行比较的字符串是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），空引用被视为小于非空引用。然后，比较字符串的长度，长度越大，则字符串越大。最后，如果长度相等，则执行常规字符串比较。 代码示例定义了一个名为 CompareDinosByLength 的字符串的替换比较方法。此方法按如下方式工作：首先测试要进行比较的字符串是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），空引用被视为小于非空引用。然后，比较字符串的长度，长度越大，则字符串越大。最后，如果长度相等，则执行常规字符串比较。 代码示例定义了一个名为 CompareDinosByLength 的字符串的替换比较方法。此方法按如下方式工作：首先测试要进行比较的字符串是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），空引用被视为小于非空引用。然后，比较字符串的长度，长度越大，则字符串越大。最后，如果长度相等，则执行常规字符串比较。 代码示例定义了一个名为 CompareDinosByLength 的字符串的替换比较方法。此方法按如下方式工作：首先测试要进行比较的字符串是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），空引用被视为小于非空引用。然后，比较字符串的长度，长度越大，则字符串越大。最后，如果长度相等，则执行常规字符串比较。

该示例创建一个字符串 List<(Of <(T>)>)，并用四个字符串进行填充，无固定填充顺序。该列表还包含一个空字符串和一个 null 引用。显示该列表，使用表示 CompareDinosByLength 方法的 Comparison<(Of <(T>)>) 泛型委托对列表进行排序，然后再次显示列表。 该示例创建一个字符串 List<(Of <(T>)>)，并用四个字符串进行填充，无固定填充顺序。该列表还包含一个空字符串和一个 null 引用。显示该列表，使用表示 CompareDinosByLength 方法的 Comparison<(Of <(T>)>) 泛型委托对列表进行排序，然后再次显示列表。 该示例创建一个字符串 List<(Of <(T>)>)，并用四个字符串进行填充，无固定填充顺序。该列表还包含一个空字符串和一个 null 引用。显示该列表，使用表示 CompareDinosByLength 方法的 Comparison<(Of <(T>)>) 泛型委托对列表进行排序，然后再次显示列表。

Imports System
Imports System.Collections.Generic

Public Class Example

    Private Shared Function CompareDinosByLength( _
        ByVal x As String, ByVal y As String) As Integer

        If x Is Nothing Then
            If y Is Nothing Then
                ' If x is Nothing and y is Nothing, they're
                ' equal.
                Return 0
            Else
                ' If x is Nothing and y is not Nothing, y
                ' is greater.
                Return -1
            End If
        Else
            ' If x is not Nothing...
            '
            If y Is Nothing Then
                ' ...and y is Nothing, x is greater.
                Return 1
            Else
                ' ...and y is not Nothing, compare the
                ' lengths of the two strings.
                '
                Dim retval As Integer = _
                    x.Length.CompareTo(y.Length)

                If retval <> 0 Then
                    ' If the strings are not of equal length,
                    ' the longer string is greater.
                    '
                    Return retval
                Else
                    ' If the strings are of equal length,
                    ' sort them with ordinary string comparison.
                    '
                    Return x.CompareTo(y)
                End If
            End If
        End If

    End Function

    Public Shared Sub Main()

        Dim dinosaurs As New List(Of String)
        dinosaurs.Add("Pachycephalosaurus")
        dinosaurs.Add("Amargasaurus")
        dinosaurs.Add("")
        dinosaurs.Add(Nothing)
        dinosaurs.Add("Mamenchisaurus")
        dinosaurs.Add("Deinonychus")
        Display(dinosaurs)

        Console.WriteLine(vbLf & "Sort with generic Comparison(Of String) delegate:")
        dinosaurs.Sort(AddressOf CompareDinosByLength)
        Display(dinosaurs)

    End Sub

    Private Shared Sub Display(ByVal lis As List(Of String))
        Console.WriteLine()
        For Each s As String In lis
            If s Is Nothing Then
                Console.WriteLine("(Nothing)")
            Else
                Console.WriteLine("""{0}""", s)
            End If
        Next
    End Sub
End Class

' This code example produces the following output:
'
'"Pachycephalosaurus"
'"Amargasaurus"
'""
'(Nothing)
'"Mamenchisaurus"
'"Deinonychus"
'
'Sort with generic Comparison(Of String) delegate:
'
'(Nothing)
'""
'"Deinonychus"
'"Amargasaurus"
'"Mamenchisaurus"
'"Pachycephalosaurus"

using System;
using System.Collections.Generic;

public class Example
{
    private static int CompareDinosByLength(string x, string y)
    {
        if (x == null)
        {
            if (y == null)
            {
                // If x is null and y is null, they're
                // equal.
                return 0;
            }
            else
            {
                // If x is null and y is not null, y
                // is greater.
                return -1;
            }
        }
        else
        {
            // If x is not null...
            //
            if (y == null)
                // ...and y is null, x is greater.
            {
                return 1;
            }
            else
            {
                // ...and y is not null, compare the
                // lengths of the two strings.
                //
                int retval = x.Length.CompareTo(y.Length);

                if (retval != 0)
                {
                    // If the strings are not of equal length,
                    // the longer string is greater.
                    //
                    return retval;
                }
                else
                {
                    // If the strings are of equal length,
                    // sort them with ordinary string comparison.
                    //
                    return x.CompareTo(y);
                }
            }
        }
    }

    public static void Main()
    {
        List<string> dinosaurs = new List<string>();
        dinosaurs.Add("Pachycephalosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("");
        dinosaurs.Add(null);
        dinosaurs.Add("Mamenchisaurus");
        dinosaurs.Add("Deinonychus");
        Display(dinosaurs);

        Console.WriteLine("\nSort with generic Comparison<string> delegate:");
        dinosaurs.Sort(CompareDinosByLength);
        Display(dinosaurs);

    }

    private static void Display(List<string> list)
    {
        Console.WriteLine();
        foreach( string s in list )
        {
            if (s == null)
                Console.WriteLine("(null)");
            else
                Console.WriteLine("\"{0}\"", s);
        }
    }
}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<string> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */

using namespace System;
using namespace System::Collections::Generic;

int CompareDinosByLength(String^ x, String^ y)
{
    if (x == nullptr)
    {
        if (y == nullptr)
        {
            // If x is null and y is null, they're
            // equal.
            return 0;
        }
        else
        {
            // If x is null and y is not null, y
            // is greater.
            return -1;
        }
    }
    else
    {
        // If x is not null...
        //
        if (y == nullptr)
            // ...and y is null, x is greater.
        {
            return 1;
        }
        else
        {
            // ...and y is not null, compare the
            // lengths of the two strings.
            //
            int retval = x->Length.CompareTo(y->Length);

            if (retval != 0)
            {
                // If the strings are not of equal length,
                // the longer string is greater.
                //
                return retval;
            }
            else
            {
                // If the strings are of equal length,
                // sort them with ordinary string comparison.
                //
                return x->CompareTo(y);
            }
        }
    }
};

void Display(List<String^>^ list)
{
    Console::WriteLine();
    for each(String^ s in list)
    {
        if (s == nullptr)
            Console::WriteLine("(null)");
        else
            Console::WriteLine("\"{0}\"", s);
    }
};

void main()
{
    List<String^>^ dinosaurs = gcnew List<String^>();
    dinosaurs->Add("Pachycephalosaurus");
    dinosaurs->Add("Amargasaurus");
    dinosaurs->Add("");
    dinosaurs->Add(nullptr);
    dinosaurs->Add("Mamenchisaurus");
    dinosaurs->Add("Deinonychus");
    Display(dinosaurs);

    Console::WriteLine("\nSort with generic Comparison<String^> delegate:");
    dinosaurs->Sort(
        gcnew Comparison<String^>(CompareDinosByLength));
    Display(dinosaurs);

}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<String^> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间
Sort
Sort


Console 类

Console 类
成员

表示控制台应用程序的标准输入流、输出流和错误流。此类不能被继承。 表示控制台应用程序的标准输入流、输出流和错误流。此类不能被继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public NotInheritable Class Console
public static class Console
public ref class Console abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type Console =  class end

控制台是一个操作系统窗口，用户可在其中通过计算机键盘输入文本，并从计算机终端读取文本输出，从而与操作系统或基于文本的控制台应用程序进行交互。例如，在 Windows 中控制台称为命令提示窗口，可以接受 MS-DOS 命令。Console 类对从控制台读取字符并向控制台写入字符的应用程序提供基本支持。 控制台是一个操作系统窗口，用户可在其中通过计算机键盘输入文本，并从计算机终端读取文本输出，从而与操作系统或基于文本的控制台应用程序进行交互。例如，在 Windows 中控制台称为命令提示窗口，可以接受 MS-DOS 命令。Console 类对从控制台读取字符并向控制台写入字符的应用程序提供基本支持。 控制台是一个操作系统窗口，用户可在其中通过计算机键盘输入文本，并从计算机终端读取文本输出，从而与操作系统或基于文本的控制台应用程序进行交互。例如，在 Windows 中控制台称为命令提示窗口，可以接受 MS-DOS 命令。Console 类对从控制台读取字符并向控制台写入字符的应用程序提供基本支持。

控制台 I/O 流

控制台应用程序启动时，操作系统会自动将三个 I/O 流与控制台关联。您的应用程序可以从标准输入流读取用户输入；将正常数据写入到标准输出流；以及将错误数据写入到标准错误输出流。这些流会作为 In、Out 和 Error 属性的值提供给应用程序。 控制台应用程序启动时，操作系统会自动将三个 I/O 流与控制台关联。您的应用程序可以从标准输入流读取用户输入；将正常数据写入到标准输出流；以及将错误数据写入到标准错误输出流。这些流会作为 In、Out 和 Error 属性的值提供给应用程序。 控制台应用程序启动时，操作系统会自动将三个 I/O 流与控制台关联。您的应用程序可以从标准输入流读取用户输入；将正常数据写入到标准输出流；以及将错误数据写入到标准错误输出流。这些流会作为 In、Out 和 Error 属性的值提供给应用程序。

默认情况下，In 属性的值为 System.IO..::.TextReader 对象，而 Out 和 Error 属性的值为 System.IO..::.TextWriter 对象。不过，您可以将这些属性设置为不表示控制台的流；例如，可以将这些属性设置为表示文件的流。若要重定向标准输入流、标准输出流或标准错误流，请分别调用 SetIn、SetOut 或 SetError 方法。使用这些流的 I/O 操作是同步的，这意味着多个线程均可读取或写入这些流。 默认情况下，In 属性的值为 System.IO..::.TextReader 对象，而 Out 和 Error 属性的值为 System.IO..::.TextWriter 对象。不过，您可以将这些属性设置为不表示控制台的流；例如，可以将这些属性设置为表示文件的流。若要重定向标准输入流、标准输出流或标准错误流，请分别调用 SetIn、SetOut 或 SetError 方法。使用这些流的 I/O 操作是同步的，这意味着多个线程均可读取或写入这些流。 默认情况下，In 属性的值为 System.IO..::.TextReader 对象，而 Out 和 Error 属性的值为 System.IO..::.TextWriter 对象。不过，您可以将这些属性设置为不表示控制台的流；例如，可以将这些属性设置为表示文件的流。若要重定向标准输入流、标准输出流或标准错误流，请分别调用 SetIn、SetOut 或 SetError 方法。使用这些流的 I/O 操作是同步的，这意味着多个线程均可读取或写入这些流。 默认情况下，In 属性的值为 System.IO..::.TextReader 对象，而 Out 和 Error 属性的值为 System.IO..::.TextWriter 对象。不过，您可以将这些属性设置为不表示控制台的流；例如，可以将这些属性设置为表示文件的流。若要重定向标准输入流、标准输出流或标准错误流，请分别调用 SetIn、SetOut 或 SetError 方法。使用这些流的 I/O 操作是同步的，这意味着多个线程均可读取或写入这些流。

说明 说明

不应使用 Console 类将输出显示在无人参与的应用程序（如服务器应用程序）中。同样，在 Windows 应用程序中调用 Write 和 WriteLine 等方法也不起任何作用。 不应使用 Console 类将输出显示在无人参与的应用程序（如服务器应用程序）中。同样，在 Windows 应用程序中调用 Write 和 WriteLine 等方法也不起任何作用。

基础流定向到控制台时 Console 类成员能够正常工作，但是，如果将基础流重定向（如重定向到一个文件），则该类的成员可能会引发异常。因此，如果要将标准流重定向，请在应用程序中捕获 System.IO..::.IOException。 基础流定向到控制台时 Console 类成员能够正常工作，但是，如果将基础流重定向（如重定向到一个文件），则该类的成员可能会引发异常。因此，如果要将标准流重定向，请在应用程序中捕获 System.IO..::.IOException。

显式调用 In、Out 和 Error 属性表示的流对象的成员有时十分有用。例如，默认情况下，Console..::.ReadLine 方法从标准输入流中读取输入。同样，Console..::.WriteLine 方法将数据写入标准输出流，并在数据后添加默认行终止字符串；也就是说，数据后跟回车和换行（“\r\n”）。但 Console 类不提供用于将数据写入标准错误输出流的相应方法，也不提供用于更改写入该流的数据的行终止字符串的属性。 显式调用 In、Out 和 Error 属性表示的流对象的成员有时十分有用。例如，默认情况下，Console..::.ReadLine 方法从标准输入流中读取输入。同样，Console..::.WriteLine 方法将数据写入标准输出流，并在数据后添加默认行终止字符串；也就是说，数据后跟回车和换行（“\r\n”）。但 Console 类不提供用于将数据写入标准错误输出流的相应方法，也不提供用于更改写入该流的数据的行终止字符串的属性。 显式调用 In、Out 和 Error 属性表示的流对象的成员有时十分有用。例如，默认情况下，Console..::.ReadLine 方法从标准输入流中读取输入。同样，Console..::.WriteLine 方法将数据写入标准输出流，并在数据后添加默认行终止字符串；也就是说，数据后跟回车和换行（“\r\n”）。但 Console 类不提供用于将数据写入标准错误输出流的相应方法，也不提供用于更改写入该流的数据的行终止字符串的属性。 显式调用 In、Out 和 Error 属性表示的流对象的成员有时十分有用。例如，默认情况下，Console..::.ReadLine 方法从标准输入流中读取输入。同样，Console..::.WriteLine 方法将数据写入标准输出流，并在数据后添加默认行终止字符串；也就是说，数据后跟回车和换行（“\r\n”）。但 Console 类不提供用于将数据写入标准错误输出流的相应方法，也不提供用于更改写入该流的数据的行终止字符串的属性。

若要解决此问题，可以将 Out 或 Error 属性的 TextWriter..::.NewLine 属性设置为其他行终止字符串。例如，C# 语句 Console.Error.NewLine = "\r\n\r\n"; 将标准错误输出流的行终止字符串设置为两个回车符和换行符序列。然后，您可以显式调用错误输出流对象的 WriteLine 方法，在 C# 语句中为 Console.Error.WriteLine();。
若要解决此问题，可以将 Out 或 Error 属性的 TextWriter..::.NewLine 属性设置为其他行终止字符串。例如，C# 语句 Console.Error.NewLine = "\r\n\r\n"; 将标准错误输出流的行终止字符串设置为两个回车符和换行符序列。然后，您可以显式调用错误输出流对象的 WriteLine 方法，在 C# 语句中为 Console.Error.WriteLine();。
若要解决此问题，可以将 Out 或 Error 属性的 TextWriter..::.NewLine 属性设置为其他行终止字符串。例如，C# 语句 Console.Error.NewLine = "\r\n\r\n"; 将标准错误输出流的行终止字符串设置为两个回车符和换行符序列。然后，您可以显式调用错误输出流对象的 WriteLine 方法，在 C# 语句中为 Console.Error.WriteLine();。

屏幕缓冲区和控制台窗口

控制台有两个关系紧密的功能，也就是屏幕缓冲区和控制台窗口。文本实际上是从控制台拥有的流进行读取和写入的，但看起来像是在控制台拥有的一个称为屏幕缓冲区的区域中进行读取和写入的。屏幕缓冲区是控制台的一个特性，以由行和列组成的矩形网格的形式进行组织，其中每个网格交叉位置（字符单元格）都可包含一个字符。每个字符都有自己的前景色，而每个字符单元格都有自己的背景色。 控制台有两个关系紧密的功能，也就是屏幕缓冲区和控制台窗口。文本实际上是从控制台拥有的流进行读取和写入的，但看起来像是在控制台拥有的一个称为屏幕缓冲区的区域中进行读取和写入的。屏幕缓冲区是控制台的一个特性，以由行和列组成的矩形网格的形式进行组织，其中每个网格交叉位置（字符单元格）都可包含一个字符。每个字符都有自己的前景色，而每个字符单元格都有自己的背景色。 控制台有两个关系紧密的功能，也就是屏幕缓冲区和控制台窗口。文本实际上是从控制台拥有的流进行读取和写入的，但看起来像是在控制台拥有的一个称为屏幕缓冲区的区域中进行读取和写入的。屏幕缓冲区是控制台的一个特性，以由行和列组成的矩形网格的形式进行组织，其中每个网格交叉位置（字符单元格）都可包含一个字符。每个字符都有自己的前景色，而每个字符单元格都有自己的背景色。 控制台有两个关系紧密的功能，也就是屏幕缓冲区和控制台窗口。文本实际上是从控制台拥有的流进行读取和写入的，但看起来像是在控制台拥有的一个称为屏幕缓冲区的区域中进行读取和写入的。屏幕缓冲区是控制台的一个特性，以由行和列组成的矩形网格的形式进行组织，其中每个网格交叉位置（字符单元格）都可包含一个字符。每个字符都有自己的前景色，而每个字符单元格都有自己的背景色。

屏幕缓冲区可通过称为控制台窗口的矩形区域查看。控制台窗口是控制台的另一个特性；它不是控制台本身，控制台本身是一个操作系统窗口。控制台窗口也以行和列的形式进行组织，其大小与屏幕缓冲区相同或者更小，该窗口可进行移动以查看基础屏幕缓冲区的不同区域。如果屏幕缓冲区比控制台窗口大，控制台会自动显示滚动条，以使控制台窗口可以在屏幕缓冲区上重新定位。 屏幕缓冲区可通过称为控制台窗口的矩形区域查看。控制台窗口是控制台的另一个特性；它不是控制台本身，控制台本身是一个操作系统窗口。控制台窗口也以行和列的形式进行组织，其大小与屏幕缓冲区相同或者更小，该窗口可进行移动以查看基础屏幕缓冲区的不同区域。如果屏幕缓冲区比控制台窗口大，控制台会自动显示滚动条，以使控制台窗口可以在屏幕缓冲区上重新定位。 屏幕缓冲区可通过称为控制台窗口的矩形区域查看。控制台窗口是控制台的另一个特性；它不是控制台本身，控制台本身是一个操作系统窗口。控制台窗口也以行和列的形式进行组织，其大小与屏幕缓冲区相同或者更小，该窗口可进行移动以查看基础屏幕缓冲区的不同区域。如果屏幕缓冲区比控制台窗口大，控制台会自动显示滚动条，以使控制台窗口可以在屏幕缓冲区上重新定位。 屏幕缓冲区可通过称为控制台窗口的矩形区域查看。控制台窗口是控制台的另一个特性；它不是控制台本身，控制台本身是一个操作系统窗口。控制台窗口也以行和列的形式进行组织，其大小与屏幕缓冲区相同或者更小，该窗口可进行移动以查看基础屏幕缓冲区的不同区域。如果屏幕缓冲区比控制台窗口大，控制台会自动显示滚动条，以使控制台窗口可以在屏幕缓冲区上重新定位。

光标指示屏幕缓冲区中当前正在读取或写入文本的位置。可以隐藏或显示光标，光标的高度可以更改。如果光标可见，控制台窗口的位置会自动移动，以便总是能够看到光标。 光标指示屏幕缓冲区中当前正在读取或写入文本的位置。可以隐藏或显示光标，光标的高度可以更改。如果光标可见，控制台窗口的位置会自动移动，以便总是能够看到光标。 光标指示屏幕缓冲区中当前正在读取或写入文本的位置。可以隐藏或显示光标，光标的高度可以更改。如果光标可见，控制台窗口的位置会自动移动，以便总是能够看到光标。

字符单元格在屏幕缓冲区中的坐标原点为左上角，光标和控制台窗口的位置相对于该原点进行计算。使用从零开始的索引来指定位置；也就是说，将最上面的行指定为行 0，将最左边的列指定为列 0。行和列索引的最大值为 Int16..::.MaxValue。
字符单元格在屏幕缓冲区中的坐标原点为左上角，光标和控制台窗口的位置相对于该原点进行计算。使用从零开始的索引来指定位置；也就是说，将最上面的行指定为行 0，将最左边的列指定为列 0。行和列索引的最大值为 Int16..::.MaxValue。
字符单元格在屏幕缓冲区中的坐标原点为左上角，光标和控制台窗口的位置相对于该原点进行计算。使用从零开始的索引来指定位置；也就是说，将最上面的行指定为行 0，将最左边的列指定为列 0。行和列索引的最大值为 Int16..::.MaxValue。

功能

Console 类提供用于从控制台读取单个字符或整行的方法；该类还提供若干写入方法，可将值类型的实例、字符数组以及对象集自动转换为格式化或未格式化的字符串，然后将该字符串（可选择是否尾随一个行终止字符串）写入控制台。Console 类还提供一些用以执行以下操作的方法和属性：获取或设置屏幕缓冲区、控制台窗口和光标的大小；更改控制台窗口和光标的位置；移动或清除屏幕缓冲区中的数据；更改前景色和背景色；更改显示在控制台标题栏中的文本；以及播放提示音。 Console 类提供用于从控制台读取单个字符或整行的方法；该类还提供若干写入方法，可将值类型的实例、字符数组以及对象集自动转换为格式化或未格式化的字符串，然后将该字符串（可选择是否尾随一个行终止字符串）写入控制台。Console 类还提供一些用以执行以下操作的方法和属性：获取或设置屏幕缓冲区、控制台窗口和光标的大小；更改控制台窗口和光标的位置；移动或清除屏幕缓冲区中的数据；更改前景色和背景色；更改显示在控制台标题栏中的文本；以及播放提示音。

Console 类还包含支持控制台窗口外观自身自定义的成员。可调用 SetWindowSize 方法同时更改控制台窗口中的行数和列数，或使用 WindowHeight 和 WindowWidth 属性可以独立地更改行数和列数。可以使用 ForegroundColor 和 BackgroundColor 属性来调整控制台窗口的颜色，使用 CursorSize 和 CursorVisible 属性来自定义控制台窗口中的光标。 Console 类还包含支持控制台窗口外观自身自定义的成员。可调用 SetWindowSize 方法同时更改控制台窗口中的行数和列数，或使用 WindowHeight 和 WindowWidth 属性可以独立地更改行数和列数。可以使用 ForegroundColor 和 BackgroundColor 属性来调整控制台窗口的颜色，使用 CursorSize 和 CursorVisible 属性来自定义控制台窗口中的光标。 Console 类还包含支持控制台窗口外观自身自定义的成员。可调用 SetWindowSize 方法同时更改控制台窗口中的行数和列数，或使用 WindowHeight 和 WindowWidth 属性可以独立地更改行数和列数。可以使用 ForegroundColor 和 BackgroundColor 属性来调整控制台窗口的颜色，使用 CursorSize 和 CursorVisible 属性来自定义控制台窗口中的光标。

此代码示例演示如何从标准输入流与输出流读取和向它们写入。请注意，可以使用 SetIn 和 SetOut 方法重定向这些流。 此代码示例演示如何从标准输入流与输出流读取和向它们写入。请注意，可以使用 SetIn 和 SetOut 方法重定向这些流。

Public Shared Sub Main()
    Console.Write("Hola ")
    Console.WriteLine("Mundo!")
    Console.WriteLine("What is your name: ")
    Dim name As String = Console.ReadLine()
    Console.Write("Buenos Dias, ")
    Console.Write(name)
    Console.WriteLine("!")
End Sub 'Main

public static void Main(string[] args) {
    Console.Write("Hola ");
    Console.WriteLine("Mundo!");
    Console.WriteLine("What is your name: ");
    String name = Console.ReadLine();
    Console.Write("Buenos Dias, ");
    Console.Write(name);
    Console.WriteLine("!");
}

int main()
{
   Console::Write( L"Hola " );
   Console::WriteLine( L"Mundo!" );
   Console::WriteLine( L"What is your name: " );
   String^ name = Console::ReadLine();
   Console::Write( L"Buenos Dias, " );
   Console::Write( name );
   Console::WriteLine( L"!" );
}

System System..::.ConsoleConsole

此类型是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 成员
System 命名空间


Console 成员

Console 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

表示控制台应用程序的标准输入流、输出流和错误流。此类不能被继承。 表示控制台应用程序的标准输入流、输出流和错误流。此类不能被继承。

Console 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Console 类
System 命名空间


Console 方法

Console 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

Console 类型公开以下成员。

名称 说明
页首

参考

Console 类
System 命名空间


Console ..::.Beep 方法

Console
.
.
::
.
Beep 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

通过控制台扬声器播放提示音。

名称 说明
页首

参考

Console 类
Console 成员
System 命名空间


Console ..::.Beep 方法

Console
.
.
::
.
Beep 方法
Console 类

通过控制台扬声器播放提示音。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Beep
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Beep()
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Beep()
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Beep : unit -> unit

异常 | 条件
HostProtectionException | 在不允许访问用户界面的服务器（如 SQL Server）上执行此方法。

默认情况下，提示音的频率为 800 赫兹，持续时间为 200 毫秒。

说明 说明

在 64 位版本的 Windows Vista 和 Windows XP 上不支持Beep 方法。
说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例说明 Beep 方法。该示例接受数字 1 到 9 作为命令行参数，并将提示音播放该参数指定的次数。 下面的示例说明 Beep 方法。该示例接受数字 1 到 9 作为命令行参数，并将提示音播放该参数指定的次数。

' This example demonstrates the Console.Beep() method.
Imports System

Class Sample
   Public Shared Sub Main(args() As String)
      Dim x As Integer = 0
      Dim i As Integer
      '
      If      (args.Length = 1) _
      AndAlso (Int32.TryParse(args(0), x) = True) _
      AndAlso ((x >= 1) AndAlso (x <= 9)) Then
         For i = 1 To x
            Console.WriteLine("Beep number {0}.", i)
            Console.Beep()
         Next i
      Else
         Console.WriteLine("Usage: Enter the number of times (between 1 and 9) to beep.")
      End If
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'>beep
'Usage: Enter the number of times (between 1 and 9) to beep
'
'>beep 9
'Beep number 1.
'Beep number 2.
'Beep number 3.
'Beep number 4.
'Beep number 5.
'Beep number 6.
'Beep number 7.
'Beep number 8.
'Beep number 9.
'

// This example demonstrates the Console.Beep() method.
using System;

class Sample
{
    public static void Main(String[] args)
    {
    int x = 0;
//
    if ((args.Length == 1) &&
        (Int32.TryParse(args[0], out x) == true) &&
        ((x >= 1) && (x <= 9)))
        {
        for (int i = 1; i <= x; i++)
            {
            Console.WriteLine("Beep number {0}.", i);
            Console.Beep();
            }
        }
    else
        Console.WriteLine("Usage: Enter the number of times (between 1 and 9) to beep.");
    }
}
/*
This example produces the following results:

>beep
Usage: Enter the number of times (between 1 and 9) to beep

>beep 9
Beep number 1.
Beep number 2.
Beep number 3.
Beep number 4.
Beep number 5.
Beep number 6.
Beep number 7.
Beep number 8.
Beep number 9.

*/

// This example demonstrates the Console.Beep() method.
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   int x = 0;

   //
   if ( (args->Length == 2) && (Int32::TryParse( args[ 1 ],  x ) == true) && ((x >= 1) && (x <= 9)) )
   {
      for ( int i = 1; i <= x; i++ )
      {
         Console::WriteLine( "Beep number {0}.", i );
         Console::Beep();

      }
   }
   else
      Console::WriteLine( "Usage: Enter the number of times (between 1 and 9) to beep." );
}

/*
This example produces the following results:

>beep
Usage: Enter the number of times (between 1 and 9) to beep

>beep 9
Beep number 1.
Beep number 2.
Beep number 3.
Beep number 4.
Beep number 5.
Beep number 6.
Beep number 7.
Beep number 8.
Beep number 9.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Beep 重载
System 命名空间


Console ..::.Beep 方法 (Int32, Int32)

Console
.
.
::
.
Beep 方法 (Int32, Int32)
Console 类

通过控制台扬声器播放具有指定频率和持续时间的提示音。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Beep ( _
    frequency As Integer, _
    duration As Integer _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Beep(
    int frequency,
    int duration
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Beep(
    int frequency,
    int duration
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Beep :
        frequency:int *
        duration:int -> unit

参数

frequency
类型： System Int32
提示音的频率，介于 37 到 32767 赫兹之间。
duration
类型： System Int32
提示音的持续时间，以毫秒为单位。
异常 | 条件
ArgumentOutOfRangeException | frequency 小于 37 或大于 32767 赫兹。 - 或 - duration 小于或等于零。
HostProtectionException | 在不允许访问控制台的服务器（如 SQL Server）上执行此方法。
说明 说明

在 64 位版本的 Windows Vista 和 Windows XP 上不支持Beep 方法。
说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明： Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：这些操作系统将忽略 frequency 和 duration 参数。

此示例通过使用控制台扬声器播放一首歌曲的前几个音符演示 Beep 方法。

' This example demonstrates the Console.Beep(Int32, Int32) method
Imports System
Imports System.Threading

Class Sample
   Public Shared Sub Main()
      ' Declare the first few notes of the song, "Mary Had A Little Lamb".
      Dim Mary As Note() =  { _
            New Note(Tone.B, Duration.QUARTER), _
            New Note(Tone.A, Duration.QUARTER), _
            New Note(Tone.GbelowC, Duration.QUARTER), _
            New Note(Tone.A, Duration.QUARTER), _
            New Note(Tone.B, Duration.QUARTER), _
            New Note(Tone.B, Duration.QUARTER), _
            New Note(Tone.B, Duration.HALF), _
            New Note(Tone.A, Duration.QUARTER), _
            New Note(Tone.A, Duration.QUARTER), _
            New Note(Tone.A, Duration.HALF), _
            New Note(Tone.B, Duration.QUARTER), _
            New Note(Tone.D, Duration.QUARTER), _
            New Note(Tone.D, Duration.HALF)}
      ' Play the song
      Play(Mary)
   End Sub 'Main

   ' Play the notes in a song.
   Protected Shared Sub Play(tune() As Note)
      Dim n As Note
      For Each n In  tune
         If n.NoteTone = Tone.REST Then
            Thread.Sleep(CInt(n.NoteDuration))
         Else
            Console.Beep(CInt(n.NoteTone), CInt(n.NoteDuration))
         End If
      Next n
   End Sub 'Play
   ' Define the frequencies of notes in an octave, as well as
   ' silence (rest).

   Protected Enum Tone
      REST = 0
      GbelowC = 196
      A = 220
      Asharp = 233
      B = 247
      C = 262
      Csharp = 277
      D = 294
      Dsharp = 311
      E = 330
      F = 349
      Fsharp = 370
      G = 392
      Gsharp = 415
   End Enum 'Tone

   ' Define the duration of a note in units of milliseconds.

   Protected Enum Duration
      WHOLE = 1600
      HALF = WHOLE / 2
      QUARTER = HALF / 2
      EIGHTH = QUARTER / 2
      SIXTEENTH = EIGHTH / 2
   End Enum 'Duration

   ' Define a note as a frequency (tone) and the amount of
   ' time (duration) the note plays.
   Protected Structure Note
      Private toneVal As Tone
      Private durVal As Duration

      ' Define a constructor to create a specific note.
      Public Sub New(frequency As Tone, time As Duration)
         toneVal = frequency
         durVal = time
      End Sub 'New

      ' Define properties to return the note's tone and duration.
      Public ReadOnly Property NoteTone() As Tone
         Get
            Return toneVal
         End Get
      End Property

      Public ReadOnly Property NoteDuration() As Duration
         Get
            Return durVal
         End Get
      End Property
   End Structure 'Note '
'This example produces the following results:
'
'This example plays the first few notes of "Mary Had A Little Lamb"
'through the console speaker.
'
End Class 'Sample

// This example demonstrates the Console.Beep(Int32, Int32) method
using System;
using System.Threading;

class Sample
{
    public static void Main()
    {
// Declare the first few notes of the song, "Mary Had A Little Lamb".
    Note[] Mary =
        {
        new Note(Tone.B, Duration.QUARTER),
        new Note(Tone.A, Duration.QUARTER),
        new Note(Tone.GbelowC, Duration.QUARTER),
        new Note(Tone.A, Duration.QUARTER),
        new Note(Tone.B, Duration.QUARTER),
        new Note(Tone.B, Duration.QUARTER),
        new Note(Tone.B, Duration.HALF),
        new Note(Tone.A, Duration.QUARTER),
        new Note(Tone.A, Duration.QUARTER),
        new Note(Tone.A, Duration.HALF),
        new Note(Tone.B, Duration.QUARTER),
        new Note(Tone.D, Duration.QUARTER),
        new Note(Tone.D, Duration.HALF)
        };
// Play the song
    Play(Mary);
    }

// Play the notes in a song.
    protected static void Play(Note[] tune)
    {
    foreach (Note n in tune)
        {
        if (n.NoteTone == Tone.REST)
            Thread.Sleep((int)n.NoteDuration);
        else
            Console.Beep((int)n.NoteTone, (int)n.NoteDuration);
        }
    }

// Define the frequencies of notes in an octave, as well as
// silence (rest).
    protected enum Tone
    {
    REST   = 0,
    GbelowC = 196,
    A      = 220,
    Asharp = 233,
    B      = 247,
    C      = 262,
    Csharp = 277,
    D      = 294,
    Dsharp = 311,
    E      = 330,
    F      = 349,
    Fsharp = 370,
    G      = 392,
    Gsharp = 415,
    }

// Define the duration of a note in units of milliseconds.
    protected enum Duration
    {
    WHOLE     = 1600,
    HALF      = WHOLE/2,
    QUARTER   = HALF/2,
    EIGHTH    = QUARTER/2,
    SIXTEENTH = EIGHTH/2,
    }

// Define a note as a frequency (tone) and the amount of
// time (duration) the note plays.
    protected struct Note
    {
    Tone     toneVal;
    Duration durVal;

// Define a constructor to create a specific note.
    public Note(Tone frequency, Duration time)
        {
        toneVal = frequency;
        durVal  = time;
        }

// Define properties to return the note's tone and duration.
    public Tone NoteTone { get{ return toneVal; } }
    public Duration NoteDuration { get{ return durVal; } }
    }
}
/*
This example produces the following results:

This example plays the first few notes of "Mary Had A Little Lamb"
through the console speaker.
*/

// This example demonstrates the Console.Beep(Int32, Int32) method
using namespace System;
using namespace System::Threading;
ref class Sample
{
protected:

   // Define the frequencies of notes in an octave, as well as
   // silence (rest).
   enum class Tone
   {
      REST = 0,
      GbelowC = 196,
      A = 220,
      Asharp = 233,
      B = 247,
      C = 262,
      Csharp = 277,
      D = 294,
      Dsharp = 311,
      E = 330,
      F = 349,
      Fsharp = 370,
      G = 392,
      Gsharp = 415
   };

   // Define the duration of a note in units of milliseconds.
   enum class Duration
   {
      WHOLE = 1600,
      HALF = Duration::WHOLE / 2,
      QUARTER = Duration::HALF / 2,
      EIGHTH = Duration::QUARTER / 2,
      SIXTEENTH = Duration::EIGHTH / 2
   };

public:

   // Define a note as a frequency (tone) and the amount of
   // time (duration) the note plays.
   value struct Note
   {
   public:
      Tone toneVal;
      Duration durVal;

      // Define a constructor to create a specific note.
      Note( Tone frequency, Duration time )
      {
         toneVal = frequency;
         durVal = time;
      }

      property Tone NoteTone
      {

         // Define properties to return the note's tone and duration.
         Tone get()
         {
            return toneVal;
         }

      }

      property Duration NoteDuration
      {
         Duration get()
         {
            return durVal;
         }

      }

   };

protected:

   // Play the notes in a song.
   static void Play( array<Note>^ tune )
   {
      System::Collections::IEnumerator^ myEnum = tune->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Note n =  *safe_cast<Note ^>(myEnum->Current);
         if ( n.NoteTone == Tone::REST )
                  Thread::Sleep( (int)n.NoteDuration );
         else
                  Console::Beep( (int)n.NoteTone, (int)n.NoteDuration );
      }
   }

public:
   static void Main()
   {

      // Declare the first few notes of the song, "Mary Had A Little Lamb".
      array<Note>^ Mary = {Note( Tone::B, Duration::QUARTER ),Note( Tone::A, Duration::QUARTER ),Note( Tone::GbelowC, Duration::QUARTER ),Note( Tone::A, Duration::QUARTER ),Note( Tone::B, Duration::QUARTER ),Note( Tone::B, Duration::QUARTER ),Note( Tone::B, Duration::HALF ),Note( Tone::A, Duration::QUARTER ),Note( Tone::A, Duration::QUARTER ),Note( Tone::A, Duration::HALF ),Note( Tone::B, Duration::QUARTER ),Note( Tone::D, Duration::QUARTER ),Note( Tone::D, Duration::HALF )};

      // Play the song
      Play( Mary );
   }

};

int main()
{
   Sample::Main();
}

/*
This example produces the following results:

This example plays the first few notes of "Mary Had A Little Lamb"
through the console speaker.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Beep 重载
System 命名空间


Console ..::.Clear 方法

Console
.
.
::
.
Clear 方法
Console 类

清除控制台缓冲区和相应的控制台窗口的显示信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Clear
public static void Clear()
public:
static void Clear()
static member Clear : unit -> unit

异常 | 条件
IOException | 发生了 I/O 错误。

使用 Clear 方法等效于在命令提示窗口中调用 MS-DOS 命令 cls。调用 Clear 方法时，光标会自动滚到窗口的左上角，屏幕缓冲区的内容会使用当前前景色和背景色设置为空白。 使用 Clear 方法等效于在命令提示窗口中调用 MS-DOS 命令 cls。调用 Clear 方法时，光标会自动滚到窗口的左上角，屏幕缓冲区的内容会使用当前前景色和背景色设置为空白。

说明 说明

当控制台应用程序的输出重定向到某一文件时，尝试调用 Clear 方法将引发 IOException。为了避免出现这种情况，请始终将对 Clear 方法的调用包装在 try…catch 块中。 当控制台应用程序的输出重定向到某一文件时，尝试调用 Clear 方法将引发 IOException。为了避免出现这种情况，请始终将对 Clear 方法的调用包装在 try…catch 块中。

此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。 此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。 此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。

' This example demonstrates the
'     Console.CursorLeft and
'     Console.CursorTop properties, and the
'     Console.SetCursorPosition and
'     Console.Clear methods.
Imports System

Class Sample
   Protected Shared origRow As Integer
   Protected Shared origCol As Integer

   Protected Shared Sub WriteAt(s As String, x As Integer, y As Integer)
      Try
         Console.SetCursorPosition(origCol + x, origRow + y)
         Console.Write(s)
      Catch e As ArgumentOutOfRangeException
         Console.Clear()
         Console.WriteLine(e.Message)
      End Try
   End Sub 'WriteAt

   Public Shared Sub Main()
      ' Clear the screen, then save the top and left coordinates.
      Console.Clear()
      origRow = Console.CursorTop
      origCol = Console.CursorLeft

      ' Draw the left side of a 5x5 rectangle, from top to bottom.
      WriteAt("+", 0, 0)
      WriteAt("|", 0, 1)
      WriteAt("|", 0, 2)
      WriteAt("|", 0, 3)
      WriteAt("+", 0, 4)

      ' Draw the bottom side, from left to right.
      WriteAt("-", 1, 4) ' shortcut: WriteAt("---", 1, 4)
      WriteAt("-", 2, 4) ' ...
      WriteAt("-", 3, 4) ' ...
      WriteAt("+", 4, 4)

      ' Draw the right side, from bottom to top.
      WriteAt("|", 4, 3)
      WriteAt("|", 4, 2)
      WriteAt("|", 4, 1)
      WriteAt("+", 4, 0)

      ' Draw the top side, from right to left.
      WriteAt("-", 3, 0) ' shortcut: WriteAt("---", 1, 0)
      WriteAt("-", 2, 0) ' ...
      WriteAt("-", 1, 0) ' ...
      '
      WriteAt("All done!", 0, 6)
      Console.WriteLine()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'+---+
'|   |
'|   |
'|   |
'+---+
'
'All done!
'

// This example demonstrates the
//     Console.CursorLeft and
//     Console.CursorTop properties, and the
//     Console.SetCursorPosition and
//     Console.Clear methods.
using System;

class Sample
{
    protected static int origRow;
    protected static int origCol;

    protected static void WriteAt(string s, int x, int y)
    {
    try
        {
        Console.SetCursorPosition(origCol+x, origRow+y);
        Console.Write(s);
        }
    catch (ArgumentOutOfRangeException e)
        {
        Console.Clear();
        Console.WriteLine(e.Message);
        }
    }

    public static void Main()
    {
// Clear the screen, then save the top and left coordinates.
    Console.Clear();
    origRow = Console.CursorTop;
    origCol = Console.CursorLeft;

// Draw the left side of a 5x5 rectangle, from top to bottom.
    WriteAt("+", 0, 0);
    WriteAt("|", 0, 1);
    WriteAt("|", 0, 2);
    WriteAt("|", 0, 3);
    WriteAt("+", 0, 4);

// Draw the bottom side, from left to right.
    WriteAt("-", 1, 4); // shortcut: WriteAt("---", 1, 4)
    WriteAt("-", 2, 4); // ...
    WriteAt("-", 3, 4); // ...
    WriteAt("+", 4, 4);

// Draw the right side, from bottom to top.
    WriteAt("|", 4, 3);
    WriteAt("|", 4, 2);
    WriteAt("|", 4, 1);
    WriteAt("+", 4, 0);

// Draw the top side, from right to left.
    WriteAt("-", 3, 0); // shortcut: WriteAt("---", 1, 0)
    WriteAt("-", 2, 0); // ...
    WriteAt("-", 1, 0); // ...
//
    WriteAt("All done!", 0, 6);
    Console.WriteLine();
    }
}
/*
This example produces the following results:

+---+
|   |
|   |
|   |
+---+

All done!

*/

// This example demonstrates the
//     Console.CursorLeft and
//     Console.CursorTop properties, and the
//     Console.SetCursorPosition and
//     Console.Clear methods.
using namespace System;
int origRow;
int origCol;
void WriteAt( String^ s, int x, int y )
{
   try
   {
      Console::SetCursorPosition( origCol + x, origRow + y );
      Console::Write( s );
   }
   catch ( ArgumentOutOfRangeException^ e )
   {
      Console::Clear();
      Console::WriteLine( e->Message );
   }

}

int main()
{

   // Clear the screen, then save the top and left coordinates.
   Console::Clear();
   origRow = Console::CursorTop;
   origCol = Console::CursorLeft;

   // Draw the left side of a 5x5 rectangle, from top to bottom.
   WriteAt( "+", 0, 0 );
   WriteAt( "|", 0, 1 );
   WriteAt( "|", 0, 2 );
   WriteAt( "|", 0, 3 );
   WriteAt( "+", 0, 4 );

   // Draw the bottom side, from left to right.
   WriteAt( "-", 1, 4 ); // shortcut: WriteAt("---", 1, 4)
   WriteAt( "-", 2, 4 ); // ...
   WriteAt( "-", 3, 4 ); // ...
   WriteAt( "+", 4, 4 );

   // Draw the right side, from bottom to top.
   WriteAt( "|", 4, 3 );
   WriteAt( "|", 4, 2 );
   WriteAt( "|", 4, 1 );
   WriteAt( "+", 4, 0 );

   // Draw the top side, from right to left.
   WriteAt( "-", 3, 0 ); // shortcut: WriteAt("---", 1, 0)
   WriteAt( "-", 2, 0 ); // ...
   WriteAt( "-", 1, 0 ); // ...

   //
   WriteAt( "All done!", 0, 6 );
   Console::WriteLine();
}

/*
This example produces the following results:

+---+
|   |
|   |
|   |
+---+

All done!

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.MoveBufferArea 方法

Console
.
.
::
.
MoveBufferArea 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

将屏幕缓冲区的指定源区域复制到指定的目标区域。

名称 说明
页首

参考

Console 类
Console 成员
System 命名空间


Console ..::.MoveBufferArea 方法 (Int32, Int32, Int32, Int32, Int32, Int32)

Console
.
.
::
.
MoveBufferArea 方法 (Int32, Int32, Int32, Int32, Int32, Int32)
Console 类

将屏幕缓冲区的指定源区域复制到指定的目标区域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub MoveBufferArea ( _
    sourceLeft As Integer, _
    sourceTop As Integer, _
    sourceWidth As Integer, _
    sourceHeight As Integer, _
    targetLeft As Integer, _
    targetTop As Integer _
)
public static void MoveBufferArea(
    int sourceLeft,
    int sourceTop,
    int sourceWidth,
    int sourceHeight,
    int targetLeft,
    int targetTop
)
public:
static void MoveBufferArea(
    int sourceLeft,
    int sourceTop,
    int sourceWidth,
    int sourceHeight,
    int targetLeft,
    int targetTop
)
static member MoveBufferArea :
        sourceLeft:int *
        sourceTop:int *
        sourceWidth:int *
        sourceHeight:int *
        targetLeft:int *
        targetTop:int -> unit

参数

sourceLeft
类型： System Int32
源区域最左边的列。
sourceTop
类型： System Int32
源区域最顶部的行。
sourceWidth
类型： System Int32
源区域中列的数目。
sourceHeight
类型： System Int32
源区域中的行的数目。
targetLeft
类型： System Int32
目标区域最左边的列。
targetTop
类型： System Int32
目标区域最顶部的行。
异常 | 条件
ArgumentOutOfRangeException | 一个或多个参数小于零。 - 或 - sourceLeft 或 targetLeft 大于等于 BufferWidth。 - 或 - sourceTop 或 targetTop 大于等于 BufferHeight。 - 或 - sourceTop + sourceHeight 大于等于 BufferHeight。 - 或 - sourceLeft + sourceWidth 大于等于 BufferWidth。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

如果目标参数和源参数指定的位置位于当前屏幕缓冲区的边界之外，则仅复制源区域内适合目标区域的部分。也就是说，会对源区域进行剪裁以适合当前屏幕缓冲区。 如果目标参数和源参数指定的位置位于当前屏幕缓冲区的边界之外，则仅复制源区域内适合目标区域的部分。也就是说，会对源区域进行剪裁以适合当前屏幕缓冲区。

MoveBufferArea 方法将源区域复制到目标区域。如果目标区域与源区域不相交，则使用当前前景色和背景色将源区域填充为空白。如果目标区域与源区域相交，则不填充源区域中与目标区域相交的部分。 MoveBufferArea 方法将源区域复制到目标区域。如果目标区域与源区域不相交，则使用当前前景色和背景色将源区域填充为空白。如果目标区域与源区域相交，则不填充源区域中与目标区域相交的部分。 MoveBufferArea 方法将源区域复制到目标区域。如果目标区域与源区域不相交，则使用当前前景色和背景色将源区域填充为空白。如果目标区域与源区域相交，则不填充源区域中与目标区域相交的部分。

  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
MoveBufferArea 重载
System 命名空间


Console ..::.MoveBufferArea 方法 (Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor)

Console
.
.
::
.
MoveBufferArea 方法 (Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor)
Console 类

将屏幕缓冲区的指定源区域复制到指定的目标区域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub MoveBufferArea ( _
    sourceLeft As Integer, _
    sourceTop As Integer, _
    sourceWidth As Integer, _
    sourceHeight As Integer, _
    targetLeft As Integer, _
    targetTop As Integer, _
    sourceChar As Char, _
    sourceForeColor As ConsoleColor, _
    sourceBackColor As ConsoleColor _
)
public static void MoveBufferArea(
    int sourceLeft,
    int sourceTop,
    int sourceWidth,
    int sourceHeight,
    int targetLeft,
    int targetTop,
    char sourceChar,
    ConsoleColor sourceForeColor,
    ConsoleColor sourceBackColor
)
public:
static void MoveBufferArea(
    int sourceLeft,
    int sourceTop,
    int sourceWidth,
    int sourceHeight,
    int targetLeft,
    int targetTop,
    wchar_t sourceChar,
    ConsoleColor sourceForeColor,
    ConsoleColor sourceBackColor
)
static member MoveBufferArea :
        sourceLeft:int *
        sourceTop:int *
        sourceWidth:int *
        sourceHeight:int *
        targetLeft:int *
        targetTop:int *
        sourceChar:char *
        sourceForeColor:ConsoleColor *
        sourceBackColor:ConsoleColor -> unit

参数

sourceLeft
类型： System Int32
源区域最左边的列。
sourceTop
类型： System Int32
源区域最顶部的行。
sourceWidth
类型： System Int32
源区域中列的数目。
sourceHeight
类型： System Int32
源区域中的行的数目。
targetLeft
类型： System Int32
目标区域最左边的列。
targetTop
类型： System Int32
目标区域最顶部的行。
sourceChar
类型： System Char
用于填充源区域的字符。
sourceForeColor
类型： System ConsoleColor
用于填充源区域的前景色。
sourceBackColor
类型： System ConsoleColor
用于填充源区域的背景色。
异常 | 条件
ArgumentOutOfRangeException | 一个或多个参数小于零。 - 或 - sourceLeft 或 targetLeft 大于等于 BufferWidth。 - 或 - sourceTop 或 targetTop 大于等于 BufferHeight。 - 或 - sourceTop + sourceHeight 大于等于 BufferHeight。 - 或 - sourceLeft + sourceWidth 大于等于 BufferWidth。
ArgumentException | 一个颜色参数不是或两个颜色参数都不是 System..::.ConsoleColor 枚举的成员。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

如果目标参数和源参数指定的位置位于当前屏幕缓冲区的边界之外，则仅复制源区域内适合目标区域的部分。也就是说，会对源区域进行剪裁以适合当前屏幕缓冲区。 如果目标参数和源参数指定的位置位于当前屏幕缓冲区的边界之外，则仅复制源区域内适合目标区域的部分。也就是说，会对源区域进行剪裁以适合当前屏幕缓冲区。

MoveBufferArea 方法将源区域复制到目标区域。如果目标区域与源区域不相交，则使用 sourceForeColor 和 sourceBackColor 指定的颜色以及 sourceChar 指定的字符填充源区域。如果目标区域与源区域相交，则不填充源区域中与目标区域相交的部分。 MoveBufferArea 方法将源区域复制到目标区域。如果目标区域与源区域不相交，则使用 sourceForeColor 和 sourceBackColor 指定的颜色以及 sourceChar 指定的字符填充源区域。如果目标区域与源区域相交，则不填充源区域中与目标区域相交的部分。 MoveBufferArea 方法将源区域复制到目标区域。如果目标区域与源区域不相交，则使用 sourceForeColor 和 sourceBackColor 指定的颜色以及 sourceChar 指定的字符填充源区域。如果目标区域与源区域相交，则不填充源区域中与目标区域相交的部分。

如果 sourceWidth 或 sourceHeight 为零，则 MoveBufferArea 方法不执行任何操作。

  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
MoveBufferArea 重载
System 命名空间


Console ..::.OpenStandardError 方法

Console
.
.
::
.
OpenStandardError 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

获取标准错误流。

名称 说明
页首

参考

Console 类
Console 成员
System 命名空间


Console ..::.OpenStandardError 方法

Console
.
.
::
.
OpenStandardError 方法
Console 类

获取标准错误流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function OpenStandardError As Stream
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static Stream OpenStandardError()
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static Stream^ OpenStandardError()
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member OpenStandardError : unit -> Stream

返回值

类型： System.IO Stream
标准错误流。

当标准错误流被 SetError 方法更改后，此方法可用于重新获取它。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
OpenStandardError 重载
System 命名空间
Error
SetError


Console ..::.OpenStandardError 方法 (Int32)

Console
.
.
::
.
OpenStandardError 方法 (Int32)
Console 类

获取设置为指定缓冲区大小的标准错误流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function OpenStandardError ( _
    bufferSize As Integer _
) As Stream
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static Stream OpenStandardError(
    int bufferSize
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static Stream^ OpenStandardError(
    int bufferSize
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member OpenStandardError :
        bufferSize:int -> Stream

参数

bufferSize
类型： System Int32
内部流缓冲区大小。

返回值

类型： System.IO Stream
标准错误流。
异常 | 条件
ArgumentOutOfRangeException | bufferSize 小于或等于零。

当标准错误流被 SetError 方法更改后，此方法可用于重新获取它。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
OpenStandardError 重载
System 命名空间
Error
SetError


Console ..::.OpenStandardInput 方法

Console
.
.
::
.
OpenStandardInput 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

获取标准输入流。

名称 说明
页首

参考

Console 类
Console 成员
System 命名空间


Console ..::.OpenStandardInput 方法

Console
.
.
::
.
OpenStandardInput 方法
Console 类

获取标准输入流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function OpenStandardInput As Stream
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static Stream OpenStandardInput()
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static Stream^ OpenStandardInput()
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member OpenStandardInput : unit -> Stream

返回值

类型： System.IO Stream
标准输入流。

在通过 SetIn 方法更改标准输入流后，可使用此方法重新获取标准输入流。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例阐释了 OpenStandardInput 属性的用法。

Imports System.Text
Imports System.IO

Public Class Decoder
   Public Shared Sub Main()
      Dim inputStream As Stream = Console.OpenStandardInput()
      Dim bytes(100) As Byte
      Console.WriteLine("To decode, type or paste the UTF7 encoded string and press enter:")
      Console.WriteLine("(Example: ""M+APw-nchen ist wundervoll"")")
      Dim outputLength As Integer = inputStream.Read(bytes, 0, 100)
      Dim chars As Char() = Encoding.UTF7.GetChars(bytes, 0, outputLength)
      Console.WriteLine("Decoded string:")
      Console.WriteLine(New String(chars))
   End Sub 'Main
End Class 'Decoder

using System;
using System.Text;
using System.IO;

public class Decoder {
    public static void Main() {
        Stream inputStream = Console.OpenStandardInput();
        byte[] bytes = new byte[100];
        Console.WriteLine("To decode, type or paste the UTF7 encoded string and press enter:");
        Console.WriteLine("(Example: \"M+APw-nchen ist wundervoll\")");
        int outputLength = inputStream.Read(bytes, 0, 100);
        char[] chars = Encoding.UTF7.GetChars(bytes, 0, outputLength);
        Console.WriteLine("Decoded string:");
        Console.WriteLine(new string(chars));
    }
}

using namespace System;
using namespace System::Text;
using namespace System::IO;

int main()
{
   Stream^ inputStream = Console::OpenStandardInput();
   array<Byte>^bytes = gcnew array<Byte>(100);
   Console::WriteLine( "To decode, type or paste the UTF7 encoded string and press enter:" );
   Console::WriteLine( "(Example: \"M+APw-nchen ist wundervoll\")" );
   int outputLength = inputStream->Read( bytes, 0, 100 );
   array<Char>^chars = Encoding::UTF7->GetChars( bytes, 0, outputLength );
   Console::WriteLine( "Decoded string:" );
   Console::WriteLine( gcnew String( chars ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
OpenStandardInput 重载
System 命名空间
In
SetIn


Console ..::.OpenStandardInput 方法 (Int32)

Console
.
.
::
.
OpenStandardInput 方法 (Int32)
Console 类

获取设置为指定缓冲区大小的标准输入流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function OpenStandardInput ( _
    bufferSize As Integer _
) As Stream
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static Stream OpenStandardInput(
    int bufferSize
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static Stream^ OpenStandardInput(
    int bufferSize
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member OpenStandardInput :
        bufferSize:int -> Stream

参数

bufferSize
类型： System Int32
内部流缓冲区大小。

返回值

类型： System.IO Stream
标准输入流。
异常 | 条件
ArgumentOutOfRangeException | bufferSize 小于或等于零。

在通过 SetIn 方法更改标准输出流后，可使用此方法重新获取标准输出流。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例阐释了 OpenStandardInput 属性的用法。

Imports System.Text
Imports System.IO

Public Class Decoder
   Public Shared Sub Main()
      Dim inputStream As Stream = Console.OpenStandardInput()
      Dim bytes(100) As Byte
      Console.WriteLine("To decode, type or paste the UTF7 encoded string and press enter:")
      Console.WriteLine("(Example: ""M+APw-nchen ist wundervoll"")")
      Dim outputLength As Integer = inputStream.Read(bytes, 0, 100)
      Dim chars As Char() = Encoding.UTF7.GetChars(bytes, 0, outputLength)
      Console.WriteLine("Decoded string:")
      Console.WriteLine(New String(chars))
   End Sub 'Main
End Class 'Decoder

using System;
using System.Text;
using System.IO;

public class Decoder {
    public static void Main() {
        Stream inputStream = Console.OpenStandardInput();
        byte[] bytes = new byte[100];
        Console.WriteLine("To decode, type or paste the UTF7 encoded string and press enter:");
        Console.WriteLine("(Example: \"M+APw-nchen ist wundervoll\")");
        int outputLength = inputStream.Read(bytes, 0, 100);
        char[] chars = Encoding.UTF7.GetChars(bytes, 0, outputLength);
        Console.WriteLine("Decoded string:");
        Console.WriteLine(new string(chars));
    }
}

using namespace System;
using namespace System::Text;
using namespace System::IO;

int main()
{
   Stream^ inputStream = Console::OpenStandardInput();
   array<Byte>^bytes = gcnew array<Byte>(100);
   Console::WriteLine( "To decode, type or paste the UTF7 encoded string and press enter:" );
   Console::WriteLine( "(Example: \"M+APw-nchen ist wundervoll\")" );
   int outputLength = inputStream->Read( bytes, 0, 100 );
   array<Char>^chars = Encoding::UTF7->GetChars( bytes, 0, outputLength );
   Console::WriteLine( "Decoded string:" );
   Console::WriteLine( gcnew String( chars ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
OpenStandardInput 重载
System 命名空间
In
SetIn


Console ..::.OpenStandardOutput 方法

Console
.
.
::
.
OpenStandardOutput 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

获取标准输出流。

名称 说明
页首

参考

Console 类
Console 成员
System 命名空间


Console ..::.OpenStandardOutput 方法

Console
.
.
::
.
OpenStandardOutput 方法
Console 类

获取标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function OpenStandardOutput As Stream
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static Stream OpenStandardOutput()
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static Stream^ OpenStandardOutput()
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member OpenStandardOutput : unit -> Stream

返回值

类型： System.IO Stream
标准输出流。

在通过 SetOut 方法更改标准输出流后，可使用此方法重新获取标准输出流。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例阐释了 OpenStandardOutput 方法的用法。

Imports System.IO

Public Class InsertTabs
   Private Const tabSize As Integer = 4
   Private Const usageText As String = "Usage: INSERTTABS inputfile.txt outputfile.txt"

   Public Shared Function Main(args() As String) As Integer
      Dim writer As StreamWriter = Nothing

      If args.Length < 2 Then
         Console.WriteLine(usageText)
         Return 1
      End If

      Try
         ' Attempt to open output file.
         writer = New StreamWriter(args(1))
         ' Redirect standard output from the console to the output file.
         Console.SetOut(writer)
         ' Redirect standard input from the console to the input file.
         Console.SetIn(New StreamReader(args(0)))
      Catch e As IOException
         Dim errorWriter As TextWriter = Console.Error
         errorWriter.WriteLine(e.Message)
         errorWriter.WriteLine(usageText)
         Return 1
      End Try

      Dim line As String = Console.ReadLine()
      While line IsNot Nothing
         Dim newLine As String = line.Replace("".PadRight(tabSize, " "c), ControlChars.Tab)
         Console.WriteLine(newLine)
         line = Console.ReadLine()
      End While
      writer.Close()
      ' Recover the standard output stream so that a
      ' completion message can be displayed.
      Dim standardOutput As New StreamWriter(Console.OpenStandardOutput())
      standardOutput.AutoFlush = True
      Console.SetOut(standardOutput)
      Console.WriteLine("INSERTTABS has completed the processing of {0}.", args(0))
      Return 0
   End Function
End Class

using System;
using System.IO;

public class InsertTabs {
    private const int tabSize = 4;
    private const string usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
    public static int Main(string[] args) {
        StreamWriter writer = null;

        if (args.Length < 2) {
            Console.WriteLine(usageText);
            return 1;
        }

        try {
            // Attempt to open output file.
            writer = new StreamWriter(args[1]);
            // Redirect standard output from the console to the output file.
            Console.SetOut(writer);
            // Redirect standard input from the console to the input file.
            Console.SetIn(new StreamReader(args[0]));
        }
        catch(IOException e) {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return 1;
        }
        string line;
        while ((line = Console.ReadLine()) != null) {
            string newLine = line.Replace(("").PadRight(tabSize, ' '), "\t");
            Console.WriteLine(newLine);
        }
        writer.Close();
        // Recover the standard output stream so that a
        // completion message can be displayed.
        StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
        standardOutput.AutoFlush = true;
        Console.SetOut(standardOutput);
        Console.WriteLine("INSERTTABS has completed the processing of {0}.", args[0]);
        return 0;
    }
}

using namespace System;
using namespace System::IO;

int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const int tabSize = 4;
   String^ usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
   StreamWriter^ writer = nullptr;
   if ( args->Length < 3 )
   {
      Console::WriteLine( usageText );
      return 1;
   }

   try
   {
      // Attempt to open output file.
      writer = gcnew StreamWriter( args[ 2 ] );
      // Redirect standard output from the console to the output file.
      Console::SetOut( writer );
      // Redirect standard input from the console to the input file.
      Console::SetIn( gcnew StreamReader( args[ 1 ] ) );
   }
   catch ( IOException^ e )
   {
      TextWriter^ errorWriter = Console::Error;
      errorWriter->WriteLine( e->Message );
      errorWriter->WriteLine( usageText );
      return 1;
   }

   String^ line;
   while ( (line = Console::ReadLine()) != nullptr )
   {
      String^ newLine = line->Replace( ((String^)"")->PadRight( tabSize, ' ' ), "\t" );
      Console::WriteLine( newLine );
   }

   writer->Close();

   // Recover the standard output stream so that a
   // completion message can be displayed.
   StreamWriter^ standardOutput = gcnew StreamWriter( Console::OpenStandardOutput() );
   standardOutput->AutoFlush = true;
   Console::SetOut( standardOutput );
   Console::WriteLine( "INSERTTABS has completed the processing of {0}.", args[ 1 ] );
   return 0;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
OpenStandardOutput 重载
System 命名空间
Out
SetOut


Console ..::.OpenStandardOutput 方法 (Int32)

Console
.
.
::
.
OpenStandardOutput 方法 (Int32)
Console 类

获取设置为指定缓冲区大小的标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function OpenStandardOutput ( _
    bufferSize As Integer _
) As Stream
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static Stream OpenStandardOutput(
    int bufferSize
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static Stream^ OpenStandardOutput(
    int bufferSize
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member OpenStandardOutput :
        bufferSize:int -> Stream

参数

bufferSize
类型： System Int32
内部流缓冲区大小。

返回值

类型： System.IO Stream
标准输出流。
异常 | 条件
ArgumentOutOfRangeException | bufferSize 小于或等于零。

在通过 SetOut 方法更改标准输出流后，可使用此方法重新获取标准输出流。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例阐释了 OpenStandardOutput 方法的用法。

Imports System.IO

Public Class InsertTabs
   Private Const tabSize As Integer = 4
   Private Const usageText As String = "Usage: INSERTTABS inputfile.txt outputfile.txt"

   Public Shared Function Main(args() As String) As Integer
      Dim writer As StreamWriter = Nothing

      If args.Length < 2 Then
         Console.WriteLine(usageText)
         Return 1
      End If

      Try
         ' Attempt to open output file.
         writer = New StreamWriter(args(1))
         ' Redirect standard output from the console to the output file.
         Console.SetOut(writer)
         ' Redirect standard input from the console to the input file.
         Console.SetIn(New StreamReader(args(0)))
      Catch e As IOException
         Dim errorWriter As TextWriter = Console.Error
         errorWriter.WriteLine(e.Message)
         errorWriter.WriteLine(usageText)
         Return 1
      End Try

      Dim line As String = Console.ReadLine()
      While line IsNot Nothing
         Dim newLine As String = line.Replace("".PadRight(tabSize, " "c), ControlChars.Tab)
         Console.WriteLine(newLine)
         line = Console.ReadLine()
      End While
      writer.Close()
      ' Recover the standard output stream so that a
      ' completion message can be displayed.
      Dim standardOutput As New StreamWriter(Console.OpenStandardOutput())
      standardOutput.AutoFlush = True
      Console.SetOut(standardOutput)
      Console.WriteLine("INSERTTABS has completed the processing of {0}.", args(0))
      Return 0
   End Function
End Class

using System;
using System.IO;

public class InsertTabs {
    private const int tabSize = 4;
    private const string usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
    public static int Main(string[] args) {
        StreamWriter writer = null;

        if (args.Length < 2) {
            Console.WriteLine(usageText);
            return 1;
        }

        try {
            // Attempt to open output file.
            writer = new StreamWriter(args[1]);
            // Redirect standard output from the console to the output file.
            Console.SetOut(writer);
            // Redirect standard input from the console to the input file.
            Console.SetIn(new StreamReader(args[0]));
        }
        catch(IOException e) {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return 1;
        }
        string line;
        while ((line = Console.ReadLine()) != null) {
            string newLine = line.Replace(("").PadRight(tabSize, ' '), "\t");
            Console.WriteLine(newLine);
        }
        writer.Close();
        // Recover the standard output stream so that a
        // completion message can be displayed.
        StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
        standardOutput.AutoFlush = true;
        Console.SetOut(standardOutput);
        Console.WriteLine("INSERTTABS has completed the processing of {0}.", args[0]);
        return 0;
    }
}

using namespace System;
using namespace System::IO;

int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const int tabSize = 4;
   String^ usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
   StreamWriter^ writer = nullptr;
   if ( args->Length < 3 )
   {
      Console::WriteLine( usageText );
      return 1;
   }

   try
   {
      // Attempt to open output file.
      writer = gcnew StreamWriter( args[ 2 ] );
      // Redirect standard output from the console to the output file.
      Console::SetOut( writer );
      // Redirect standard input from the console to the input file.
      Console::SetIn( gcnew StreamReader( args[ 1 ] ) );
   }
   catch ( IOException^ e )
   {
      TextWriter^ errorWriter = Console::Error;
      errorWriter->WriteLine( e->Message );
      errorWriter->WriteLine( usageText );
      return 1;
   }

   String^ line;
   while ( (line = Console::ReadLine()) != nullptr )
   {
      String^ newLine = line->Replace( ((String^)"")->PadRight( tabSize, ' ' ), "\t" );
      Console::WriteLine( newLine );
   }

   writer->Close();

   // Recover the standard output stream so that a
   // completion message can be displayed.
   StreamWriter^ standardOutput = gcnew StreamWriter( Console::OpenStandardOutput() );
   standardOutput->AutoFlush = true;
   Console::SetOut( standardOutput );
   Console::WriteLine( "INSERTTABS has completed the processing of {0}.", args[ 1 ] );
   return 0;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
OpenStandardOutput 重载
System 命名空间
Out
SetOut


Console ..::.Read 方法

Console
.
.
::
.
Read 方法
Console 类

从标准输入流读取下一个字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function Read As Integer
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static int Read()
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static int Read()
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Read : unit -> int

返回值

类型： System Int32
输入流中的下一个字符；如果当前没有更多的字符可供读取，则为负一 (-1)。
异常 | 条件
IOException | 发生了 I/O 错误。

在键入输入字符时，Read 方法会阻止其返回；该方法在您按 Enter 键时终止。按 Enter 会在输入内容后面追加一个与平台有关的行终止序列（例如，Windows 追加一个回车符和换行符序列）。对 Read 方法的后续调用一次检索输入中的一个字符。检索完最后一个字符后，Read 会再次阻止其返回，并重复上述循环。 在键入输入字符时，Read 方法会阻止其返回；该方法在您按 Enter 键时终止。按 Enter 会在输入内容后面追加一个与平台有关的行终止序列（例如，Windows 追加一个回车符和换行符序列）。对 Read 方法的后续调用一次检索输入中的一个字符。检索完最后一个字符后，Read 会再次阻止其返回，并重复上述循环。 在键入输入字符时，Read 方法会阻止其返回；该方法在您按 Enter 键时终止。按 Enter 会在输入内容后面追加一个与平台有关的行终止序列（例如，Windows 追加一个回车符和换行符序列）。对 Read 方法的后续调用一次检索输入中的一个字符。检索完最后一个字符后，Read 会再次阻止其返回，并重复上述循环。 在键入输入字符时，Read 方法会阻止其返回；该方法在您按 Enter 键时终止。按 Enter 会在输入内容后面追加一个与平台有关的行终止序列（例如，Windows 追加一个回车符和换行符序列）。对 Read 方法的后续调用一次检索输入中的一个字符。检索完最后一个字符后，Read 会再次阻止其返回，并重复上述循环。

注意，只有执行以下操作之一才能获取属性值 -1：同时按修改键 Control 和控制台键 Z (Ctrl+Z)，此按键组合发出到达文件尾条件；按发出到达文件尾条件的等效键，例如 Windows 中的 F6 功能键；或者将输入流重定向到具有实际的文件尾字符的源，例如文本文件。

使用 ReadLine 方法或使用 KeyAvailable 属性和 ReadKey 方法比使用 Read 方法更可取。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例说明 Read 方法。

' This example demonstrates the Console.Read() method.
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim m1 As String = _
                vbCrLf & _
                "Type a string of text then press Enter. " & _
                "Type '+' anywhere in the text to quit:" & _
                vbCrLf
      Dim m2 As String = "Character '{0}' is hexadecimal 0x{1:x4}."
      Dim m3 As String = "Character     is hexadecimal 0x{0:x4}."
      Dim ch As Char
      Dim x As Integer
      '
      Console.WriteLine(m1)
      Do
         x = Console.Read()
         Try
            ch = Convert.ToChar(x)
            If Char.IsWhiteSpace(ch) Then
               Console.WriteLine(m3, x)
               If ch = vbLf Then
                  Console.WriteLine(m1)
               End If
            Else
               Console.WriteLine(m2, ch, x)
            End If
         Catch e As OverflowException
            Console.WriteLine("{0} Value read = {1}.", e.Message, x)
            ch = Char.MinValue
            Console.WriteLine(m1)
         End Try
      Loop While ch <> "+"c
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Type a string of text then press Enter. Type '+' anywhere in the text to quit:
'
'The quick brown fox.
'Character 'T' is hexadecimal 0x0054.
'Character 'h' is hexadecimal 0x0068.
'Character 'e' is hexadecimal 0x0065.
'Character     is hexadecimal 0x0020.
'Character 'q' is hexadecimal 0x0071.
'Character 'u' is hexadecimal 0x0075.
'Character 'i' is hexadecimal 0x0069.
'Character 'c' is hexadecimal 0x0063.
'Character 'k' is hexadecimal 0x006b.
'Character     is hexadecimal 0x0020.
'Character 'b' is hexadecimal 0x0062.
'Character 'r' is hexadecimal 0x0072.
'Character 'o' is hexadecimal 0x006f.
'Character 'w' is hexadecimal 0x0077.
'Character 'n' is hexadecimal 0x006e.
'Character     is hexadecimal 0x0020.
'Character 'f' is hexadecimal 0x0066.
'Character 'o' is hexadecimal 0x006f.
'Character 'x' is hexadecimal 0x0078.
'Character '.' is hexadecimal 0x002e.
'Character     is hexadecimal 0x000d.
'Character     is hexadecimal 0x000a.
'
'Type a string of text then press Enter. Type '+' anywhere in the text to quit:
'
'^Z
'Value was either too large or too small for a character. Value read = -1.
'
'Type a string of text then press Enter. Type '+' anywhere in the text to quit:
'
'+
'Character '+' is hexadecimal 0x002b.
'

// This example demonstrates the Console.Read() method.
using System;

class Sample
{
    public static void Main()
    {
    string m1 = "\nType a string of text then press Enter. " +
                "Type '+' anywhere in the text to quit:\n";
    string m2 = "Character '{0}' is hexadecimal 0x{1:x4}.";
    string m3 = "Character     is hexadecimal 0x{0:x4}.";
    char ch;
    int x;
//
    Console.WriteLine(m1);
    do
        {
        x = Console.Read();
        try
            {
            ch = Convert.ToChar(x);
            if (Char.IsWhiteSpace(ch))
               {
               Console.WriteLine(m3, x);
               if (ch == 0x0a)
                   Console.WriteLine(m1);
               }
            else
               Console.WriteLine(m2, ch, x);
            }
        catch (OverflowException e)
            {
            Console.WriteLine("{0} Value read = {1}.", e.Message, x);
            ch = Char.MinValue;
            Console.WriteLine(m1);
            }
        } while (ch != '+');
    }
}
/*
This example produces the following results:

Type a string of text then press Enter. Type '+' anywhere in the text to quit:

The quick brown fox.
Character 'T' is hexadecimal 0x0054.
Character 'h' is hexadecimal 0x0068.
Character 'e' is hexadecimal 0x0065.
Character     is hexadecimal 0x0020.
Character 'q' is hexadecimal 0x0071.
Character 'u' is hexadecimal 0x0075.
Character 'i' is hexadecimal 0x0069.
Character 'c' is hexadecimal 0x0063.
Character 'k' is hexadecimal 0x006b.
Character     is hexadecimal 0x0020.
Character 'b' is hexadecimal 0x0062.
Character 'r' is hexadecimal 0x0072.
Character 'o' is hexadecimal 0x006f.
Character 'w' is hexadecimal 0x0077.
Character 'n' is hexadecimal 0x006e.
Character     is hexadecimal 0x0020.
Character 'f' is hexadecimal 0x0066.
Character 'o' is hexadecimal 0x006f.
Character 'x' is hexadecimal 0x0078.
Character '.' is hexadecimal 0x002e.
Character     is hexadecimal 0x000d.
Character     is hexadecimal 0x000a.

Type a string of text then press Enter. Type '+' anywhere in the text to quit:

^Z
Value was either too large or too small for a character. Value read = -1.

Type a string of text then press Enter. Type '+' anywhere in the text to quit:

+
Character '+' is hexadecimal 0x002b.

*/

// This example demonstrates the Console.Read() method.
using namespace System;
int main()
{
   String^ m1 = "\nType a string of text then press Enter. "
   "Type '+' anywhere in the text to quit:\n";
   String^ m2 = "Character '{0}' is hexadecimal 0x{1:x4}.";
   String^ m3 = "Character     is hexadecimal 0x{0:x4}.";
   Char ch;
   int x;

   //
   Console::WriteLine( m1 );
   do
   {
      x = Console::Read();
      try
      {
         ch = Convert::ToChar( x );
         if ( Char::IsWhiteSpace( ch ) )
         {
            Console::WriteLine( m3, x );
            if ( ch == 0x0a )
                        Console::WriteLine( m1 );
         }
         else
                  Console::WriteLine( m2, ch, x );
      }
      catch ( OverflowException^ e )
      {
         Console::WriteLine( "{0} Value read = {1}.", e->Message, x );
         ch = Char::MinValue;
         Console::WriteLine( m1 );
      }

   }
   while ( ch != '+' );
}

/*
This example produces the following results:

Type a string of text then press Enter. Type '+' anywhere in the text to quit:

The quick brown fox.
Character 'T' is hexadecimal 0x0054.
Character 'h' is hexadecimal 0x0068.
Character 'e' is hexadecimal 0x0065.
Character     is hexadecimal 0x0020.
Character 'q' is hexadecimal 0x0071.
Character 'u' is hexadecimal 0x0075.
Character 'i' is hexadecimal 0x0069.
Character 'c' is hexadecimal 0x0063.
Character 'k' is hexadecimal 0x006b.
Character     is hexadecimal 0x0020.
Character 'b' is hexadecimal 0x0062.
Character 'r' is hexadecimal 0x0072.
Character 'o' is hexadecimal 0x006f.
Character 'w' is hexadecimal 0x0077.
Character 'n' is hexadecimal 0x006e.
Character     is hexadecimal 0x0020.
Character 'f' is hexadecimal 0x0066.
Character 'o' is hexadecimal 0x006f.
Character 'x' is hexadecimal 0x0078.
Character '.' is hexadecimal 0x002e.
Character     is hexadecimal 0x000d.
Character     is hexadecimal 0x000a.

Type a string of text then press Enter. Type '+' anywhere in the text to quit:

^Z
Value was either too large or too small for a character. Value read = -1.

Type a string of text then press Enter. Type '+' anywhere in the text to quit:

+
Character '+' is hexadecimal 0x002b.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间
ReadLine
Write
WriteLine


Console ..::.ReadKey 方法

Console
.
.
::
.
ReadKey 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

获取用户按下的下一个字符或功能键。

名称 说明
页首

参考

Console 类
Console 成员
System 命名空间


Console ..::.ReadKey 方法

Console
.
.
::
.
ReadKey 方法
Console 类

获取用户按下的下一个字符或功能键。按下的键显示在控制台窗口中。 获取用户按下的下一个字符或功能键。按下的键显示在控制台窗口中。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function ReadKey As ConsoleKeyInfo
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static ConsoleKeyInfo ReadKey()
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static ConsoleKeyInfo ReadKey()
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member ReadKey : unit -> ConsoleKeyInfo

返回值

类型： System ConsoleKeyInfo
一个 ConsoleKeyInfo 对象，描述 ConsoleKey 常数和对应于按下的控制台键的 Unicode 字符（如果存在这样的字符）。ConsoleKeyInfo 对象还以 ConsoleModifiers 值的按位组合描述是否在按下该控制台键的同时按下了 Shift、Alt 或 Ctrl 修改键中的一个或多个。 一个 ConsoleKeyInfo 对象，描述 ConsoleKey 常数和对应于按下的控制台键的 Unicode 字符（如果存在这样的字符）。ConsoleKeyInfo 对象还以 ConsoleModifiers 值的按位组合描述是否在按下该控制台键的同时按下了 Shift、Alt 或 Ctrl 修改键中的一个或多个。
异常 | 条件
InvalidOperationException | In 属性是从非控制台的某种流进行重定向的。

ReadKey 方法会一直等待，也就是阻止发出 ReadKey 方法的线程，直到按下某个字符或功能键。按下字符或功能键的同时可以按下 Alt、Ctrl 或 Shift 修改键中的一个或多个。但是，仅按下修改键不会使 ReadKey 方法返回。 ReadKey 方法会一直等待，也就是阻止发出 ReadKey 方法的线程，直到按下某个字符或功能键。按下字符或功能键的同时可以按下 Alt、Ctrl 或 Shift 修改键中的一个或多个。但是，仅按下修改键不会使 ReadKey 方法返回。 ReadKey 方法会一直等待，也就是阻止发出 ReadKey 方法的线程，直到按下某个字符或功能键。按下字符或功能键的同时可以按下 Alt、Ctrl 或 Shift 修改键中的一个或多个。但是，仅按下修改键不会使 ReadKey 方法返回。

根据您的应用程序的情况，您可能想要结合 KeyAvailable 属性使用 ReadKey 方法。

ReadKey 方法从键盘进行读取，即使使用 SetIn 方法将标准输入重定向到文件时也是如此。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例演示无参数的 ReadKey 方法。

Class Example
   Public Shared Sub Main()
      Dim cki As ConsoleKeyInfo
      ' Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = True

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
      Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
      Do
         cki = Console.ReadKey()
         Console.Write(" --- You pressed ")
         If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
         If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
         If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
         Console.WriteLine(cki.Key.ToString)
      Loop While cki.Key <> ConsoleKey.Escape
   End Sub
End Class
' This example displays output similar to the following:
'       Press any combination of CTL, ALT, and SHIFT, and a console key.
'       Press the Escape (Esc) key to quit:
'
'       a --- You pressed A
'       k --- You pressed ALT+K
'         --- You pressed CTL+P
'         --- You pressed RightArrow
'       R --- You pressed SHIFT+R
'                --- You pressed CTL+I
'       j --- You pressed ALT+J
'       O --- You pressed SHIFT+O
'       § --- You pressed CTL+U

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki;
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do
      {
         cki = Console.ReadKey();
         Console.Write(" --- You pressed ");
         if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine(cki.Key.ToString());
       } while (cki.Key != ConsoleKey.Escape);
    }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       a --- You pressed A
//       k --- You pressed ALT+K
//         --- You pressed CTL+P
//         --- You pressed RightArrow
//       R --- You pressed SHIFT+R
//                --- You pressed CTL+I
//       j --- You pressed ALT+J
//       O --- You pressed SHIFT+O
//       § --- You pressed CTL+U

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
ReadKey 重载
System 命名空间
System ConsoleKey
KeyAvailable
TreatControlCAsInput
CancelKeyPress


Console ..::.ReadKey 方法 (Boolean)

Console
.
.
::
.
ReadKey 方法 (Boolean)
Console 类

获取用户按下的下一个字符或功能键。按下的键可以选择显示在控制台窗口中。 获取用户按下的下一个字符或功能键。按下的键可以选择显示在控制台窗口中。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function ReadKey ( _
    intercept As Boolean _
) As ConsoleKeyInfo
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static ConsoleKeyInfo ReadKey(
    bool intercept
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static ConsoleKeyInfo ReadKey(
    bool intercept
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member ReadKey :
        intercept:bool -> ConsoleKeyInfo

参数

intercept
类型： System Boolean
确定是否在控制台窗口中显示按下的键。如果为 true，则不显示按下的键；否则为 false。 确定是否在控制台窗口中显示按下的键。如果为 true，则不显示按下的键；否则为 false。

返回值

类型： System ConsoleKeyInfo
一个 ConsoleKeyInfo 对象，描述 ConsoleKey 常数和对应于按下的控制台键的 Unicode 字符（如果存在这样的字符）。ConsoleKeyInfo 对象还以 ConsoleModifiers 值的按位组合描述是否在按下该控制台键的同时按下了 Shift、Alt 或 Ctrl 修改键中的一个或多个。 一个 ConsoleKeyInfo 对象，描述 ConsoleKey 常数和对应于按下的控制台键的 Unicode 字符（如果存在这样的字符）。ConsoleKeyInfo 对象还以 ConsoleModifiers 值的按位组合描述是否在按下该控制台键的同时按下了 Shift、Alt 或 Ctrl 修改键中的一个或多个。
异常 | 条件
InvalidOperationException | In 属性是从非控制台的某种流进行重定向的。

ReadKey 方法会一直等待，也就是阻止发出 ReadKey 方法的线程，直到按下某个字符或功能键。按下字符或功能键的同时可以按下 Alt、Ctrl 或 Shift 修改键中的一个或多个。但是，仅按下修改键不会使 ReadKey 方法返回。 ReadKey 方法会一直等待，也就是阻止发出 ReadKey 方法的线程，直到按下某个字符或功能键。按下字符或功能键的同时可以按下 Alt、Ctrl 或 Shift 修改键中的一个或多个。但是，仅按下修改键不会使 ReadKey 方法返回。 ReadKey 方法会一直等待，也就是阻止发出 ReadKey 方法的线程，直到按下某个字符或功能键。按下字符或功能键的同时可以按下 Alt、Ctrl 或 Shift 修改键中的一个或多个。但是，仅按下修改键不会使 ReadKey 方法返回。

如果 intercept 参数为 true，按下的键将被截获，不会显示在控制台窗口中；否则显示按下的键。

根据您的应用程序的情况，您可能想要结合 KeyAvailable 属性使用 ReadKey 方法。

ReadKey 方法从键盘进行读取，即使使用 SetIn 方法将标准输入重定向到文件时也是如此。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例演示采用 Boolean 参数的 ReadKey 方法。

Class Example
   Public Shared Sub Main()
      Dim cki As ConsoleKeyInfo
      ' Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = True

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
      Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
      Do
         cki = Console.ReadKey(True)
         Console.Write("You pressed ")
         If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
         If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
         If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
         Console.WriteLine("{0} (character '{1}')", cki.Key, cki.KeyChar)
      Loop While cki.Key <> ConsoleKey.Escape
   End Sub
End Class
' This example displays output similar to the following:
'       Press any combination of CTL, ALT, and SHIFT, and a console key.
'       Press the Escape (Esc) key to quit:
'
'       You pressed CTL+A (character ' ')
'       You pressed C (character 'c')
'       You pressed CTL+C (character ' ')
'       You pressed K (character 'k')
'       You pressed ALT+I (character 'i')
'       You pressed ALT+U (character 'u')
'       You pressed ALT+SHIFT+H (character 'H')
'       You pressed Escape (character '←')

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki;
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do {
         cki = Console.ReadKey(true);
         Console.Write("You pressed ");
         if ((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if ((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if ((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine("{0} (character '{1}')", cki.Key, cki.KeyChar);
      } while (cki.Key != ConsoleKey.Escape);
   }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       You pressed CTL+A (character ' ')
//       You pressed C (character 'c')
//       You pressed CTL+C (character ' ')
//       You pressed K (character 'k')
//       You pressed ALT+I (character 'i')
//       You pressed ALT+U (character 'u')
//       You pressed ALT+SHIFT+H (character 'H')
//       You pressed Escape (character '←')

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
ReadKey 重载
System 命名空间
System ConsoleKey
KeyAvailable
TreatControlCAsInput
CancelKeyPress


Console ..::.ReadLine 方法

Console
.
.
::
.
ReadLine 方法
Console 类

从标准输入流读取下一行字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Function ReadLine As String
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static string ReadLine()
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static String^ ReadLine()
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member ReadLine : unit -> string

返回值

类型： System String
输入流中的下一行字符；如果没有更多的可用行，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
IOException | 发生了 I/O 错误。
OutOfMemoryException | 内存不足，无法为返回的字符串分配缓冲区。
ArgumentOutOfRangeException | 下一行字符中的字符数大于 Int32..::.MaxValue。

行被定义为后跟回车符（十六进制 0x000d）、换行符（十六进制 0x000a）或 Environment..::.NewLine 属性值的字符序列。返回的字符串不包含终止字符。 行被定义为后跟回车符（十六进制 0x000d）、换行符（十六进制 0x000a）或 Environment..::.NewLine 属性值的字符序列。返回的字符串不包含终止字符。

如果此方法引发 OutOfMemoryException，则读取器在基础 Stream 的位置会前移若干字符，前移的字符数就是该方法能够读取的字符数，但是会放弃已经读入内部 ReadLine 缓冲区的字符。因为无法更改读取器在流中的位置，所以已经读取的字符是无法恢复的，只能通过重新初始化 TextReader 访问它们。如果流内的初始位置未知，或者流不支持查找，则也需要重新初始化基础 Stream。 如果此方法引发 OutOfMemoryException，则读取器在基础 Stream 的位置会前移若干字符，前移的字符数就是该方法能够读取的字符数，但是会放弃已经读入内部 ReadLine 缓冲区的字符。因为无法更改读取器在流中的位置，所以已经读取的字符是无法恢复的，只能通过重新初始化 TextReader 访问它们。如果流内的初始位置未知，或者流不支持查找，则也需要重新初始化基础 Stream。 如果此方法引发 OutOfMemoryException，则读取器在基础 Stream 的位置会前移若干字符，前移的字符数就是该方法能够读取的字符数，但是会放弃已经读入内部 ReadLine 缓冲区的字符。因为无法更改读取器在流中的位置，所以已经读取的字符是无法恢复的，只能通过重新初始化 TextReader 访问它们。如果流内的初始位置未知，或者流不支持查找，则也需要重新初始化基础 Stream。

为避免这种情况并产生可靠的代码，应使用 Read 方法，并将已读取的字符存储在预先分配的缓冲区内。

如果在方法从控制台读取输入时按 CTRL + Z 字符，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。这使用户能够在循环中调用 ReadLine 方法时防止进一步的键盘输入。下面的示例阐释此方案。 如果在方法从控制台读取输入时按 CTRL + Z 字符，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。这使用户能够在循环中调用 ReadLine 方法时防止进一步的键盘输入。下面的示例阐释此方案。 如果在方法从控制台读取输入时按 CTRL + Z 字符，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。这使用户能够在循环中调用 ReadLine 方法时防止进一步的键盘输入。下面的示例阐释此方案。

Module Example
   Public Sub Main()
      Dim line As String
      Console.WriteLine("Enter one or more lines of text (press CTRL+Z to exit):")
      Console.WriteLine()
      Do
         Console.Write("   ")
         line = Console.ReadLine()
         If line IsNot Nothing Then Console.WriteLine("      " + line)
      Loop While line IsNot Nothing
   End Sub
End Module
' The following displays possible output from this example:
'       Enter one or more lines of text (press CTRL+Z to exit):
'
'          This is line #1.
'             This is line #1.
'          This is line #2
'             This is line #2
'          ^Z
'
'       >

using System;

public class Example
{
   public static void Main()
   {
      string line;
      Console.WriteLine("Enter one or more lines of text (press CTRL+Z to exit):");
      Console.WriteLine();
      do {
         Console.Write("   ");
         line = Console.ReadLine();
         if (line != null)
            Console.WriteLine("      " + line);
      } while (line != null);
   }
}
// The following displays possible output from this example:
//       Enter one or more lines of text (press CTRL+Z to exit):
//
//          This is line #1.
//             This is line #1.
//          This is line #2
//             This is line #2
//          ^Z
//
//       >
说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例要求两个命令行参数：现有文本文件的名称以及要将输出写入到的文件的名称。它打开现有文本文件，并将标准输入从键盘重定向到该文件。它还将标准输出从控制台重定向到输出文件。然后使用 Console..::.ReadLine 方法来读取该文件中的每一行，将每处四个空格的序列替换为制表符，并使用 Console..::.WriteLine 方法将结果写入输出文件。
下面的示例要求两个命令行参数：现有文本文件的名称以及要将输出写入到的文件的名称。它打开现有文本文件，并将标准输入从键盘重定向到该文件。它还将标准输出从控制台重定向到输出文件。然后使用 Console..::.ReadLine 方法来读取该文件中的每一行，将每处四个空格的序列替换为制表符，并使用 Console..::.WriteLine 方法将结果写入输出文件。
下面的示例要求两个命令行参数：现有文本文件的名称以及要将输出写入到的文件的名称。它打开现有文本文件，并将标准输入从键盘重定向到该文件。它还将标准输出从控制台重定向到输出文件。然后使用 Console..::.ReadLine 方法来读取该文件中的每一行，将每处四个空格的序列替换为制表符，并使用 Console..::.WriteLine 方法将结果写入输出文件。
下面的示例要求两个命令行参数：现有文本文件的名称以及要将输出写入到的文件的名称。它打开现有文本文件，并将标准输入从键盘重定向到该文件。它还将标准输出从控制台重定向到输出文件。然后使用 Console..::.ReadLine 方法来读取该文件中的每一行，将每处四个空格的序列替换为制表符，并使用 Console..::.WriteLine 方法将结果写入输出文件。

Imports System.IO

Public Class InsertTabs
   Private Const tabSize As Integer = 4
   Private Const usageText As String = "Usage: INSERTTABS inputfile.txt outputfile.txt"

   Public Shared Function Main(args() As String) As Integer
      Dim writer As StreamWriter = Nothing

      If args.Length < 2 Then
         Console.WriteLine(usageText)
         Return 1
      End If

      Try
         ' Attempt to open output file.
         writer = New StreamWriter(args(1))
         ' Redirect standard output from the console to the output file.
         Console.SetOut(writer)
         ' Redirect standard input from the console to the input file.
         Console.SetIn(New StreamReader(args(0)))
      Catch e As IOException
         Dim errorWriter As TextWriter = Console.Error
         errorWriter.WriteLine(e.Message)
         errorWriter.WriteLine(usageText)
         Return 1
      End Try

      Dim line As String = Console.ReadLine()
      While line IsNot Nothing
         Dim newLine As String = line.Replace("".PadRight(tabSize, " "c), ControlChars.Tab)
         Console.WriteLine(newLine)
         line = Console.ReadLine()
      End While
      writer.Close()
      ' Recover the standard output stream so that a
      ' completion message can be displayed.
      Dim standardOutput As New StreamWriter(Console.OpenStandardOutput())
      standardOutput.AutoFlush = True
      Console.SetOut(standardOutput)
      Console.WriteLine("INSERTTABS has completed the processing of {0}.", args(0))
      Return 0
   End Function
End Class

using System;
using System.IO;

public class InsertTabs {
    private const int tabSize = 4;
    private const string usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
    public static int Main(string[] args) {
        StreamWriter writer = null;

        if (args.Length < 2) {
            Console.WriteLine(usageText);
            return 1;
        }

        try {
            // Attempt to open output file.
            writer = new StreamWriter(args[1]);
            // Redirect standard output from the console to the output file.
            Console.SetOut(writer);
            // Redirect standard input from the console to the input file.
            Console.SetIn(new StreamReader(args[0]));
        }
        catch(IOException e) {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return 1;
        }
        string line;
        while ((line = Console.ReadLine()) != null) {
            string newLine = line.Replace(("").PadRight(tabSize, ' '), "\t");
            Console.WriteLine(newLine);
        }
        writer.Close();
        // Recover the standard output stream so that a
        // completion message can be displayed.
        StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
        standardOutput.AutoFlush = true;
        Console.SetOut(standardOutput);
        Console.WriteLine("INSERTTABS has completed the processing of {0}.", args[0]);
        return 0;
    }
}

using namespace System;
using namespace System::IO;

int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const int tabSize = 4;
   String^ usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
   StreamWriter^ writer = nullptr;
   if ( args->Length < 3 )
   {
      Console::WriteLine( usageText );
      return 1;
   }

   try
   {
      // Attempt to open output file.
      writer = gcnew StreamWriter( args[ 2 ] );
      // Redirect standard output from the console to the output file.
      Console::SetOut( writer );
      // Redirect standard input from the console to the input file.
      Console::SetIn( gcnew StreamReader( args[ 1 ] ) );
   }
   catch ( IOException^ e )
   {
      TextWriter^ errorWriter = Console::Error;
      errorWriter->WriteLine( e->Message );
      errorWriter->WriteLine( usageText );
      return 1;
   }

   String^ line;
   while ( (line = Console::ReadLine()) != nullptr )
   {
      String^ newLine = line->Replace( ((String^)"")->PadRight( tabSize, ' ' ), "\t" );
      Console::WriteLine( newLine );
   }

   writer->Close();

   // Recover the standard output stream so that a
   // completion message can be displayed.
   StreamWriter^ standardOutput = gcnew StreamWriter( Console::OpenStandardOutput() );
   standardOutput->AutoFlush = true;
   Console::SetOut( standardOutput );
   Console::WriteLine( "INSERTTABS has completed the processing of {0}.", args[ 1 ] );
   return 0;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
System 命名空间
Read
Write
WriteLine


Console ..::.ResetColor 方法

Console
.
.
::
.
ResetColor 方法
Console 类

将控制台的前景色和背景色设置为默认值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub ResetColor
public static void ResetColor()
public:
static void ResetColor()
static member ResetColor : unit -> unit

异常 | 条件
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

前景色和背景色被还原为启动当前进程时存在的颜色。有关更多信息，请参见 ForegroundColor 和 BackgroundColor 属性。 前景色和背景色被还原为启动当前进程时存在的颜色。有关更多信息，请参见 ForegroundColor 和 BackgroundColor 属性。

下面的示例演示与 Console..::.ForegroundColor 和 Console..::.BackgroundColor 属性以及 Console..::.ResetColor 方法结合使用的 System..::.ConsoleColor 枚举。必须在控制台上运行此示例，以查看所描述的颜色效果。 下面的示例演示与 Console..::.ForegroundColor 和 Console..::.BackgroundColor 属性以及 Console..::.ResetColor 方法结合使用的 System..::.ConsoleColor 枚举。必须在控制台上运行此示例，以查看所描述的颜色效果。

Black 和 White 这两个常数直接使用，所有其他常数（Blue、DarkRed 等）在循环中间接使用。首先，使用 GetNames 方法获取常量的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。 Black 和 White 这两个常数直接使用，所有其他常数（Blue、DarkRed 等）在循环中间接使用。首先，使用 GetNames 方法获取常量的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。 Black 和 White 这两个常数直接使用，所有其他常数（Blue、DarkRed 等）在循环中间接使用。首先，使用 GetNames 方法获取常量的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。

Public Module Example
   Public Sub Main()
      ' Get a string array with the names of ConsoleColor enumeration members.
      Dim colorNames() As String = ConsoleColor.GetNames(GetType(ConsoleColor))

      ' Display each foreground color except black on a constant black background.
      Console.WriteLine("All the foreground colors (except Black) on a constant black background:")

      For Each colorName As String In colorNames
         ' Convert the string representing the enum name to the enum value.
         Dim color As ConsoleColor = CType(System.Enum.Parse(GetType(ConsoleColor), _
                                                colorName), ConsoleColor)

         If color = ConsoleColor.Black Then Continue For

         Console.Write("{0,11}: ", colorName)
         Console.BackgroundColor = ConsoleColor.Black
         Console.ForegroundColor = color
         Console.WriteLine("This is foreground color {0}.", colorName)
         ' Restore the original foreground and background colors.
         Console.ResetColor()
      Next
      Console.WriteLine()

      ' Display each background color except white with a constant white foreground.
      Console.WriteLine("All the background colors (except White) with a constant white background:")

      For Each colorName As String In colorNames
         ' Convert the string representing the enum name to the enum value.
         Dim color As ConsoleColor = CType([Enum].Parse(GetType(ConsoleColor), _
                                                colorName), ConsoleColor)

         If color = ConsoleColor.White then Continue For
         Console.Write("{0,11}: ", colorName)
         Console.ForegroundColor = ConsoleColor.White
         Console.BackgroundColor = color
         Console.WriteLine("This is background color {0}.", colorName)
         Console.ResetColor()
      Next
   End Sub
End Module
'The example displays the following output:
' All the foreground colors (except Black) on a constant black background:
'    DarkBlue: This is foreground color DarkBlue.
'   DarkGreen: This is foreground color DarkGreen.
'    DarkCyan: This is foreground color DarkCyan.
'     DarkRed: This is foreground color DarkRed.
' DarkMagenta: This is foreground color DarkMagenta.
'  DarkYellow: This is foreground color DarkYellow.
'        Gray: This is foreground color Gray.
'    DarkGray: This is foreground color DarkGray.
'        Blue: This is foreground color Blue.
'       Green: This is foreground color Green.
'        Cyan: This is foreground color Cyan.
'         Red: This is foreground color Red.
'     Magenta: This is foreground color Magenta.
'      Yellow: This is foreground color Yellow.
'       White: This is foreground color White.
'
' All the background colors (except White) with a constant white background:
'       Black: This is background color Black.
'    DarkBlue: This is background color DarkBlue.
'   DarkGreen: This is background color DarkGreen.
'    DarkCyan: This is background color DarkCyan.
'     DarkRed: This is background color DarkRed.
' DarkMagenta: This is background color DarkMagenta.
'  DarkYellow: This is background color DarkYellow.
'        Gray: This is background color Gray.
'    DarkGray: This is background color DarkGray.
'        Blue: This is background color Blue.
'       Green: This is background color Green.
'        Cyan: This is background color Cyan.
'         Red: This is background color Red.
'     Magenta: This is background color Magenta.
'      Yellow: This is background color Yellow.

using System;

class Example
{
   public static void Main()
   {
      // Get a string array with the names of ConsoleColor enumeration members.
      String[] colorNames = ConsoleColor.GetNames(typeof(ConsoleColor));

      // Display each foreground color except black on a constant black background.
      Console.WriteLine("All the foreground colors (except Black) on a constant black background:");

      foreach (string colorName in colorNames)
      {
         // Convert the string representing the enum name to the enum value.
         ConsoleColor color = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);

         if (color == ConsoleColor.Black) continue;

         Console.Write("{0,11}: ", colorName);
         Console.BackgroundColor = ConsoleColor.Black;
         Console.ForegroundColor = color;
         Console.WriteLine("This is foreground color {0}.", colorName);
         // Restore the original foreground and background colors.
         Console.ResetColor();
      }
      Console.WriteLine();

      // Display each background color except white with a constant white foreground.
      Console.WriteLine("All the background colors (except White) with a constant white background:");

      foreach (string colorName in colorNames)
      {
         // Convert the string representing the enum name to the enum value.
         ConsoleColor color = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);

         if (color == ConsoleColor.White) continue;

         Console.Write("{0,11}: ", colorName);
         Console.ForegroundColor = ConsoleColor.White;
         Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);
         Console.WriteLine("This is background color {0}.", colorName);
         Console.ResetColor();
      }
   }
}
//The example displays the following output:
// All the foreground colors (except Black) on a constant black background:
//    DarkBlue: This is foreground color DarkBlue.
//   DarkGreen: This is foreground color DarkGreen.
//    DarkCyan: This is foreground color DarkCyan.
//     DarkRed: This is foreground color DarkRed.
// DarkMagenta: This is foreground color DarkMagenta.
//  DarkYellow: This is foreground color DarkYellow.
//        Gray: This is foreground color Gray.
//    DarkGray: This is foreground color DarkGray.
//        Blue: This is foreground color Blue.
//       Green: This is foreground color Green.
//        Cyan: This is foreground color Cyan.
//         Red: This is foreground color Red.
//     Magenta: This is foreground color Magenta.
//      Yellow: This is foreground color Yellow.
//       White: This is foreground color White.
//
// All the background colors (except White) with a constant white background:
//       Black: This is background color Black.
//    DarkBlue: This is background color DarkBlue.
//   DarkGreen: This is background color DarkGreen.
//    DarkCyan: This is background color DarkCyan.
//     DarkRed: This is background color DarkRed.
// DarkMagenta: This is background color DarkMagenta.
//  DarkYellow: This is background color DarkYellow.
//        Gray: This is background color Gray.
//    DarkGray: This is background color DarkGray.
//        Blue: This is background color Blue.
//       Green: This is background color Green.
//        Cyan: This is background color Cyan.
//         Red: This is background color Red.
//     Magenta: This is background color Magenta.
//      Yellow: This is background color Yellow.
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.SetBufferSize 方法

Console
.
.
::
.
SetBufferSize 方法
Console 类

将屏幕缓冲区的高度和宽度设置为指定值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SetBufferSize ( _
    width As Integer, _
    height As Integer _
)
public static void SetBufferSize(
    int width,
    int height
)
public:
static void SetBufferSize(
    int width,
    int height
)
static member SetBufferSize :
        width:int *
        height:int -> unit

参数

width
类型： System Int32
缓冲区的宽度，以列为单位。
height
类型： System Int32
缓冲区的高度，以行为单位。
异常 | 条件
ArgumentOutOfRangeException | height 或 width 小于或等于零。 - 或 - height 或 width 大于等于 Int16..::.MaxValue。 - 或 - width 小于 WindowLeft + WindowWidth。 - 或 - height 小于 WindowTop + WindowHeight。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。 下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。 下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。 下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。

' This example demonstrates the Console.WindowLeft and
'                               Console.WindowTop properties.
Imports System.IO
Imports System.Text

Class Sample
   Public Shared saveBufferWidth As Integer
   Public Shared saveBufferHeight As Integer
   Public Shared saveWindowHeight As Integer
   Public Shared saveWindowWidth As Integer
   Public Shared saveCursorVisible As Boolean

   Public Shared Sub Main()
      Dim m1 As String = _
          "1) Press the cursor keys to move the console window." & vbCrlf & _
          "2) Press any key to begin. When you're finished..."   & vbCrlf & _
          "3) Press the Escape key to quit."
      Dim g1 As String = "+----"
      Dim g2 As String = "|    "
      Dim grid1 As String
      Dim grid2 As String
      Dim sbG1 As New StringBuilder()
      Dim sbG2 As New StringBuilder()
      Dim cki As ConsoleKeyInfo
      Dim y As Integer
      '
      Try
         saveBufferWidth = Console.BufferWidth
         saveBufferHeight = Console.BufferHeight
         saveWindowHeight = Console.WindowHeight
         saveWindowWidth = Console.WindowWidth
         saveCursorVisible = Console.CursorVisible
         '
         Console.Clear()
         Console.WriteLine(m1)
         Console.ReadKey(True)

         ' Set the smallest possible window size before setting the buffer size.
         Console.SetWindowSize(1, 1)
         Console.SetBufferSize(80, 80)
         Console.SetWindowSize(40, 20)

         ' Create grid lines to fit the buffer. (The buffer width is 80, but
         ' this same technique could be used with an arbitrary buffer width.)
         For y = 0 To (Console.BufferWidth / g1.Length) - 1
            sbG1.Append(g1)
            sbG2.Append(g2)
         Next y
         sbG1.Append(g1, 0, Console.BufferWidth Mod g1.Length)
         sbG2.Append(g2, 0, Console.BufferWidth Mod g2.Length)
         grid1 = sbG1.ToString()
         grid2 = sbG2.ToString()

         Console.CursorVisible = False
         Console.Clear()
         For y = 0 To (Console.BufferHeight - 2)
            If y Mod 3 = 0 Then
               Console.Write(grid1)
            Else
               Console.Write(grid2)
            End If
         Next y
         '
         Console.SetWindowPosition(0, 0)
         Do
            cki = Console.ReadKey(True)
            Select Case cki.Key
               Case ConsoleKey.LeftArrow
                  If Console.WindowLeft > 0 Then
                     Console.SetWindowPosition(Console.WindowLeft - 1, Console.WindowTop)
                  End If
               Case ConsoleKey.UpArrow
                  If Console.WindowTop > 0 Then
                     Console.SetWindowPosition(Console.WindowLeft, Console.WindowTop - 1)
                  End If
               Case ConsoleKey.RightArrow
                  If Console.WindowLeft < Console.BufferWidth - Console.WindowWidth Then
                     Console.SetWindowPosition(Console.WindowLeft + 1, Console.WindowTop)
                  End If
               Case ConsoleKey.DownArrow
                  If Console.WindowTop < Console.BufferHeight - Console.WindowHeight Then
                     Console.SetWindowPosition(Console.WindowLeft, Console.WindowTop + 1)
                  End If
            End Select
         Loop While cki.Key <> ConsoleKey.Escape
      ' end do-while
      ' end try
      Catch e As IOException
         Console.WriteLine(e.Message)
      Finally
         Console.Clear()
         Console.SetWindowSize(1, 1)
         Console.SetBufferSize(saveBufferWidth, saveBufferHeight)
         Console.SetWindowSize(saveWindowWidth, saveWindowHeight)
         Console.CursorVisible = saveCursorVisible
      End Try
   End Sub 'Main ' end Main
End Class 'Sample ' end Sample
'
'This example produces results similar to the following:
'
'1) Press the cursor keys to move the console window.
'2) Press any key to begin. When you're finished...
'3) Press the Escape key to quit.
'
'...
'
'+----+----+----+-
'|    |    |    |
'|    |    |    |
'+----+----+----+-
'|    |    |    |
'|    |    |    |
'+----+----+----+-
'

// This example demonstrates the Console.WindowLeft and
//                               Console.WindowTop properties.
using System;
using System.Text;
using System.IO;
//
class Sample
{
    public static int saveBufferWidth;
    public static int saveBufferHeight;
    public static int saveWindowHeight;
    public static int saveWindowWidth;
    public static bool saveCursorVisible;
//
    public static void Main()
    {
    string m1 = "1) Press the cursor keys to move the console window.\n" +
                "2) Press any key to begin. When you're finished...\n" +
                "3) Press the Escape key to quit.";
    string g1 = "+----";
    string g2 = "|    ";
    string grid1;
    string grid2;
    StringBuilder sbG1 = new StringBuilder();
    StringBuilder sbG2 = new StringBuilder();
    ConsoleKeyInfo cki;
    int y;
//
    try
    {
    saveBufferWidth  = Console.BufferWidth;
    saveBufferHeight = Console.BufferHeight;
    saveWindowHeight = Console.WindowHeight;
    saveWindowWidth  = Console.WindowWidth;
    saveCursorVisible = Console.CursorVisible;
//
    Console.Clear();
    Console.WriteLine(m1);
    Console.ReadKey(true);

// Set the smallest possible window size before setting the buffer size.
    Console.SetWindowSize(1, 1);
    Console.SetBufferSize(80, 80);
    Console.SetWindowSize(40, 20);

// Create grid lines to fit the buffer. (The buffer width is 80, but
// this same technique could be used with an arbitrary buffer width.)
    for (y = 0; y < Console.BufferWidth/g1.Length; y++)
        {
        sbG1.Append(g1);
        sbG2.Append(g2);
        }
    sbG1.Append(g1, 0, Console.BufferWidth%g1.Length);
    sbG2.Append(g2, 0, Console.BufferWidth%g2.Length);
    grid1 = sbG1.ToString();
    grid2 = sbG2.ToString();

    Console.CursorVisible = false;
    Console.Clear();
    for (y = 0; y < Console.BufferHeight-1; y++)
        {
        if (y%3 == 0)
            Console.Write(grid1);
        else
            Console.Write(grid2);
        }

    Console.SetWindowPosition(0, 0);
    do
        {
        cki = Console.ReadKey(true);
        switch (cki.Key)
            {
            case ConsoleKey.LeftArrow:
                if (Console.WindowLeft > 0)
                    Console.SetWindowPosition(
                            Console.WindowLeft-1, Console.WindowTop);
                break;
            case ConsoleKey.UpArrow:
                if (Console.WindowTop > 0)
                    Console.SetWindowPosition(
                            Console.WindowLeft, Console.WindowTop-1);
                break;
            case ConsoleKey.RightArrow:
                if (Console.WindowLeft < (Console.BufferWidth-Console.WindowWidth))
                    Console.SetWindowPosition(
                            Console.WindowLeft+1, Console.WindowTop);
                break;
            case ConsoleKey.DownArrow:
                if (Console.WindowTop < (Console.BufferHeight-Console.WindowHeight))
                    Console.SetWindowPosition(
                            Console.WindowLeft, Console.WindowTop+1);
                break;
            }
        }
    while (cki.Key != ConsoleKey.Escape);  // end do-while
    } // end try
    catch (IOException e)
        {
        Console.WriteLine(e.Message);
        }
    finally
        {
        Console.Clear();
        Console.SetWindowSize(1, 1);
        Console.SetBufferSize(saveBufferWidth, saveBufferHeight);
        Console.SetWindowSize(saveWindowWidth, saveWindowHeight);
        Console.CursorVisible = saveCursorVisible;
        }
    } // end Main
} // end Sample
/*
This example produces results similar to the following:

1) Press the cursor keys to move the console window.
2) Press any key to begin. When you're finished...
3) Press the Escape key to quit.

...

+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-

*/

// This example demonstrates the Console.WindowLeft and
//                               Console.WindowTop properties.
using namespace System;
using namespace System::Text;
using namespace System::IO;

//
int saveBufferWidth;
int saveBufferHeight;
int saveWindowHeight;
int saveWindowWidth;
bool saveCursorVisible;

//
int main()
{
   String^ m1 = "1) Press the cursor keys to move the console window.\n"
   "2) Press any key to begin. When you're finished...\n"
   "3) Press the Escape key to quit.";
   String^ g1 = "+----";
   String^ g2 = "|    ";
   String^ grid1;
   String^ grid2;
   StringBuilder^ sbG1 = gcnew StringBuilder;
   StringBuilder^ sbG2 = gcnew StringBuilder;
   ConsoleKeyInfo cki;
   int y;

   //
   try
   {
      saveBufferWidth = Console::BufferWidth;
      saveBufferHeight = Console::BufferHeight;
      saveWindowHeight = Console::WindowHeight;
      saveWindowWidth = Console::WindowWidth;
      saveCursorVisible = Console::CursorVisible;

      //
      Console::Clear();
      Console::WriteLine( m1 );
      Console::ReadKey( true );

      // Set the smallest possible window size before setting the buffer size.
      Console::SetWindowSize( 1, 1 );
      Console::SetBufferSize( 80, 80 );
      Console::SetWindowSize( 40, 20 );

      // Create grid lines to fit the buffer. (The buffer width is 80, but
      // this same technique could be used with an arbitrary buffer width.)
      for ( y = 0; y < Console::BufferWidth / g1->Length; y++ )
      {
         sbG1->Append( g1 );
         sbG2->Append( g2 );

      }
      sbG1->Append( g1, 0, Console::BufferWidth % g1->Length );
      sbG2->Append( g2, 0, Console::BufferWidth % g2->Length );
      grid1 = sbG1->ToString();
      grid2 = sbG2->ToString();
      Console::CursorVisible = false;
      Console::Clear();
      for ( y = 0; y < Console::BufferHeight - 1; y++ )
      {
         if ( y % 3 == 0 )
                  Console::Write( grid1 );
         else
                  Console::Write( grid2 );

      }
      Console::SetWindowPosition( 0, 0 );
      do
      {
         cki = Console::ReadKey( true );
         switch ( cki.Key )
         {
            case ConsoleKey::LeftArrow:
               if ( Console::WindowLeft > 0 )
                              Console::SetWindowPosition( Console::WindowLeft - 1, Console::WindowTop );
               break;

            case ConsoleKey::UpArrow:
               if ( Console::WindowTop > 0 )
                              Console::SetWindowPosition( Console::WindowLeft, Console::WindowTop - 1 );
               break;

            case ConsoleKey::RightArrow:
               if ( Console::WindowLeft < (Console::BufferWidth - Console::WindowWidth) )
                              Console::SetWindowPosition( Console::WindowLeft + 1, Console::WindowTop );
               break;

            case ConsoleKey::DownArrow:
               if ( Console::WindowTop < (Console::BufferHeight - Console::WindowHeight) )
                              Console::SetWindowPosition( Console::WindowLeft, Console::WindowTop + 1 );
               break;
         }
      }
      while ( cki.Key != ConsoleKey::Escape );
   }
   catch ( IOException^ e )
   {
      Console::WriteLine( e->Message );
   }
   finally
   {
      Console::Clear();
      Console::SetWindowSize( 1, 1 );
      Console::SetBufferSize( saveBufferWidth, saveBufferHeight );
      Console::SetWindowSize( saveWindowWidth, saveWindowHeight );
      Console::CursorVisible = saveCursorVisible;
   }

} // end Main

/*
This example produces results similar to the following:

1) Press the cursor keys to move the console window.
2) Press any key to begin. When you're finished...
3) Press the Escape key to quit.

...

+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.SetCursorPosition 方法

Console
.
.
::
.
SetCursorPosition 方法
Console 类

设置光标位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SetCursorPosition ( _
    left As Integer, _
    top As Integer _
)
public static void SetCursorPosition(
    int left,
    int top
)
public:
static void SetCursorPosition(
    int left,
    int top
)
static member SetCursorPosition :
        left:int *
        top:int -> unit

参数

left
类型： System Int32
光标的列位置。
top
类型： System Int32
光标的行位置。
异常 | 条件
ArgumentOutOfRangeException | left 或 top 小于零。 - 或 - left 大于等于 BufferWidth。 - 或 - top 大于等于 BufferHeight。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

使用 SetCursorPosition 方法可指定控制台窗口中的下一次写入操作从哪个位置开始。如果指定的光标位置位于控制台窗口中当前可见的区域之外，则窗口原点会自动更改，以使光标可见。 使用 SetCursorPosition 方法可指定控制台窗口中的下一次写入操作从哪个位置开始。如果指定的光标位置位于控制台窗口中当前可见的区域之外，则窗口原点会自动更改，以使光标可见。

每次在控制台窗口中写入一个字符后，光标都会自动移动到下一个字符位置。如果光标位于控制台窗口右下角的字符位置，下一次写入操作会使控制台窗口滚动，以使光标保持可见。如果想在右下角的字符位置写入字符而不让控制台窗口滚动，可使用 MoveBufferArea 方法将该字符移动到该位置。 每次在控制台窗口中写入一个字符后，光标都会自动移动到下一个字符位置。如果光标位于控制台窗口右下角的字符位置，下一次写入操作会使控制台窗口滚动，以使光标保持可见。如果想在右下角的字符位置写入字符而不让控制台窗口滚动，可使用 MoveBufferArea 方法将该字符移动到该位置。 每次在控制台窗口中写入一个字符后，光标都会自动移动到下一个字符位置。如果光标位于控制台窗口右下角的字符位置，下一次写入操作会使控制台窗口滚动，以使光标保持可见。如果想在右下角的字符位置写入字符而不让控制台窗口滚动，可使用 MoveBufferArea 方法将该字符移动到该位置。

此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。 此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。 此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。

' This example demonstrates the
'     Console.CursorLeft and
'     Console.CursorTop properties, and the
'     Console.SetCursorPosition and
'     Console.Clear methods.
Imports System

Class Sample
   Protected Shared origRow As Integer
   Protected Shared origCol As Integer

   Protected Shared Sub WriteAt(s As String, x As Integer, y As Integer)
      Try
         Console.SetCursorPosition(origCol + x, origRow + y)
         Console.Write(s)
      Catch e As ArgumentOutOfRangeException
         Console.Clear()
         Console.WriteLine(e.Message)
      End Try
   End Sub 'WriteAt

   Public Shared Sub Main()
      ' Clear the screen, then save the top and left coordinates.
      Console.Clear()
      origRow = Console.CursorTop
      origCol = Console.CursorLeft

      ' Draw the left side of a 5x5 rectangle, from top to bottom.
      WriteAt("+", 0, 0)
      WriteAt("|", 0, 1)
      WriteAt("|", 0, 2)
      WriteAt("|", 0, 3)
      WriteAt("+", 0, 4)

      ' Draw the bottom side, from left to right.
      WriteAt("-", 1, 4) ' shortcut: WriteAt("---", 1, 4)
      WriteAt("-", 2, 4) ' ...
      WriteAt("-", 3, 4) ' ...
      WriteAt("+", 4, 4)

      ' Draw the right side, from bottom to top.
      WriteAt("|", 4, 3)
      WriteAt("|", 4, 2)
      WriteAt("|", 4, 1)
      WriteAt("+", 4, 0)

      ' Draw the top side, from right to left.
      WriteAt("-", 3, 0) ' shortcut: WriteAt("---", 1, 0)
      WriteAt("-", 2, 0) ' ...
      WriteAt("-", 1, 0) ' ...
      '
      WriteAt("All done!", 0, 6)
      Console.WriteLine()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'+---+
'|   |
'|   |
'|   |
'+---+
'
'All done!
'

// This example demonstrates the
//     Console.CursorLeft and
//     Console.CursorTop properties, and the
//     Console.SetCursorPosition and
//     Console.Clear methods.
using System;

class Sample
{
    protected static int origRow;
    protected static int origCol;

    protected static void WriteAt(string s, int x, int y)
    {
    try
        {
        Console.SetCursorPosition(origCol+x, origRow+y);
        Console.Write(s);
        }
    catch (ArgumentOutOfRangeException e)
        {
        Console.Clear();
        Console.WriteLine(e.Message);
        }
    }

    public static void Main()
    {
// Clear the screen, then save the top and left coordinates.
    Console.Clear();
    origRow = Console.CursorTop;
    origCol = Console.CursorLeft;

// Draw the left side of a 5x5 rectangle, from top to bottom.
    WriteAt("+", 0, 0);
    WriteAt("|", 0, 1);
    WriteAt("|", 0, 2);
    WriteAt("|", 0, 3);
    WriteAt("+", 0, 4);

// Draw the bottom side, from left to right.
    WriteAt("-", 1, 4); // shortcut: WriteAt("---", 1, 4)
    WriteAt("-", 2, 4); // ...
    WriteAt("-", 3, 4); // ...
    WriteAt("+", 4, 4);

// Draw the right side, from bottom to top.
    WriteAt("|", 4, 3);
    WriteAt("|", 4, 2);
    WriteAt("|", 4, 1);
    WriteAt("+", 4, 0);

// Draw the top side, from right to left.
    WriteAt("-", 3, 0); // shortcut: WriteAt("---", 1, 0)
    WriteAt("-", 2, 0); // ...
    WriteAt("-", 1, 0); // ...
//
    WriteAt("All done!", 0, 6);
    Console.WriteLine();
    }
}
/*
This example produces the following results:

+---+
|   |
|   |
|   |
+---+

All done!

*/

// This example demonstrates the
//     Console.CursorLeft and
//     Console.CursorTop properties, and the
//     Console.SetCursorPosition and
//     Console.Clear methods.
using namespace System;
int origRow;
int origCol;
void WriteAt( String^ s, int x, int y )
{
   try
   {
      Console::SetCursorPosition( origCol + x, origRow + y );
      Console::Write( s );
   }
   catch ( ArgumentOutOfRangeException^ e )
   {
      Console::Clear();
      Console::WriteLine( e->Message );
   }

}

int main()
{

   // Clear the screen, then save the top and left coordinates.
   Console::Clear();
   origRow = Console::CursorTop;
   origCol = Console::CursorLeft;

   // Draw the left side of a 5x5 rectangle, from top to bottom.
   WriteAt( "+", 0, 0 );
   WriteAt( "|", 0, 1 );
   WriteAt( "|", 0, 2 );
   WriteAt( "|", 0, 3 );
   WriteAt( "+", 0, 4 );

   // Draw the bottom side, from left to right.
   WriteAt( "-", 1, 4 ); // shortcut: WriteAt("---", 1, 4)
   WriteAt( "-", 2, 4 ); // ...
   WriteAt( "-", 3, 4 ); // ...
   WriteAt( "+", 4, 4 );

   // Draw the right side, from bottom to top.
   WriteAt( "|", 4, 3 );
   WriteAt( "|", 4, 2 );
   WriteAt( "|", 4, 1 );
   WriteAt( "+", 4, 0 );

   // Draw the top side, from right to left.
   WriteAt( "-", 3, 0 ); // shortcut: WriteAt("---", 1, 0)
   WriteAt( "-", 2, 0 ); // ...
   WriteAt( "-", 1, 0 ); // ...

   //
   WriteAt( "All done!", 0, 6 );
   Console::WriteLine();
}

/*
This example produces the following results:

+---+
|   |
|   |
|   |
+---+

All done!

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.SetError 方法

Console
.
.
::
.
SetError 方法
Console 类

将 Error 属性设置为指定的 TextWriter 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub SetError ( _
    newError As TextWriter _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void SetError(
    TextWriter newError
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void SetError(
    TextWriter^ newError
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member SetError :
        newError:TextWriter -> unit

参数

newError
类型： System.IO TextWriter
一个 TextWriter 流，它是新的标准错误输出。
异常 | 条件
ArgumentNullException | newError 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 调用方没有所要求的权限。

默认情况下，Error 属性设置为标准错误输出流。

可以使用封装 FileStream 的 StreamWriter 向文件发送错误消息。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例演示如何将标准错误流重定向到文件。

Imports System.IO
Imports System.Reflection

Module RedirectStdErr
   Public Sub Main()
      ' Define file to receive error stream.
      Dim appStart As Date = Date.Now
      Dim fn As String = "c:\temp\errlog" & appStart.ToString("yyyyMMddHHmm") & ".log"
      Dim errStream As New StreamWriter(fn)
      Dim appName As String = Assembly.GetExecutingAssembly().Location
      appName = Mid(appName, InStrRev(appName, "\") + 1)
      ' Redirect standard error stream to file.
      Console.SetError(errStream)
      ' Write file header.
      Console.Error.WriteLine("Error Log for Application {0}", appName)
      Console.Error.WriteLine()
      Console.Error.WriteLine("Application started at {0}.", appStart)
      Console.Error.WriteLine()
      '
      ' Application code along with error output
      '
      ' Close redirected error stream.
      Console.Error.Close()
   End Sub
End Module

using System;
using System.IO;
using System.Reflection;

public class RedirectStdErr
{
   public static void Main()
   {
      // Define file to receive error stream.
      DateTime appStart = DateTime.Now;
      string fn = @"c:\temp\errlog" + appStart.ToString("yyyyMMddHHmm") + ".log";
      TextWriter errStream = new StreamWriter(fn);
      string appName = Assembly.GetExecutingAssembly().Location;
      appName = appName.Substring(appName.LastIndexOf('\\') + 1);
      // Redirect standard error stream to file.
      Console.SetError(errStream);
      // Write file header.
      Console.Error.WriteLine("Error Log for Application {0}", appName);
      Console.Error.WriteLine();
      Console.Error.WriteLine("Application started at {0}.", appStart);
      Console.Error.WriteLine();
      //
      // Application code along with error output
      //
      // Close redirected error stream.
      Console.Error.Close();
   }
}
  • SecurityPermission

    用于调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 用于调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
System 命名空间
TextWriter
Error


Console ..::.SetIn 方法

Console
.
.
::
.
SetIn 方法
Console 类

将 In 属性设置为指定的 TextReader 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub SetIn ( _
    newIn As TextReader _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void SetIn(
    TextReader newIn
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void SetIn(
    TextReader^ newIn
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member SetIn :
        newIn:TextReader -> unit

参数

newIn
类型： System.IO TextReader
一个 TextReader 流，它是新的标准输入。
异常 | 条件
ArgumentNullException | newIn 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 调用方没有所要求的权限。

默认情况下，In 属性会设置为标准输入流。

可以使用封装 FileStream 的 StreamReader 从文件接收输入。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 SetIn 方法的用法。

Imports System.IO

Public Class InsertTabs
   Private Const tabSize As Integer = 4
   Private Const usageText As String = "Usage: INSERTTABS inputfile.txt outputfile.txt"

   Public Shared Function Main(args() As String) As Integer
      Dim writer As StreamWriter = Nothing

      If args.Length < 2 Then
         Console.WriteLine(usageText)
         Return 1
      End If

      Try
         ' Attempt to open output file.
         writer = New StreamWriter(args(1))
         ' Redirect standard output from the console to the output file.
         Console.SetOut(writer)
         ' Redirect standard input from the console to the input file.
         Console.SetIn(New StreamReader(args(0)))
      Catch e As IOException
         Dim errorWriter As TextWriter = Console.Error
         errorWriter.WriteLine(e.Message)
         errorWriter.WriteLine(usageText)
         Return 1
      End Try

      Dim line As String = Console.ReadLine()
      While line IsNot Nothing
         Dim newLine As String = line.Replace("".PadRight(tabSize, " "c), ControlChars.Tab)
         Console.WriteLine(newLine)
         line = Console.ReadLine()
      End While
      writer.Close()
      ' Recover the standard output stream so that a
      ' completion message can be displayed.
      Dim standardOutput As New StreamWriter(Console.OpenStandardOutput())
      standardOutput.AutoFlush = True
      Console.SetOut(standardOutput)
      Console.WriteLine("INSERTTABS has completed the processing of {0}.", args(0))
      Return 0
   End Function
End Class

using System;
using System.IO;

public class InsertTabs {
    private const int tabSize = 4;
    private const string usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
    public static int Main(string[] args) {
        StreamWriter writer = null;

        if (args.Length < 2) {
            Console.WriteLine(usageText);
            return 1;
        }

        try {
            // Attempt to open output file.
            writer = new StreamWriter(args[1]);
            // Redirect standard output from the console to the output file.
            Console.SetOut(writer);
            // Redirect standard input from the console to the input file.
            Console.SetIn(new StreamReader(args[0]));
        }
        catch(IOException e) {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return 1;
        }
        string line;
        while ((line = Console.ReadLine()) != null) {
            string newLine = line.Replace(("").PadRight(tabSize, ' '), "\t");
            Console.WriteLine(newLine);
        }
        writer.Close();
        // Recover the standard output stream so that a
        // completion message can be displayed.
        StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
        standardOutput.AutoFlush = true;
        Console.SetOut(standardOutput);
        Console.WriteLine("INSERTTABS has completed the processing of {0}.", args[0]);
        return 0;
    }
}

using namespace System;
using namespace System::IO;

int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const int tabSize = 4;
   String^ usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
   StreamWriter^ writer = nullptr;
   if ( args->Length < 3 )
   {
      Console::WriteLine( usageText );
      return 1;
   }

   try
   {
      // Attempt to open output file.
      writer = gcnew StreamWriter( args[ 2 ] );
      // Redirect standard output from the console to the output file.
      Console::SetOut( writer );
      // Redirect standard input from the console to the input file.
      Console::SetIn( gcnew StreamReader( args[ 1 ] ) );
   }
   catch ( IOException^ e )
   {
      TextWriter^ errorWriter = Console::Error;
      errorWriter->WriteLine( e->Message );
      errorWriter->WriteLine( usageText );
      return 1;
   }

   String^ line;
   while ( (line = Console::ReadLine()) != nullptr )
   {
      String^ newLine = line->Replace( ((String^)"")->PadRight( tabSize, ' ' ), "\t" );
      Console::WriteLine( newLine );
   }

   writer->Close();

   // Recover the standard output stream so that a
   // completion message can be displayed.
   StreamWriter^ standardOutput = gcnew StreamWriter( Console::OpenStandardOutput() );
   standardOutput->AutoFlush = true;
   Console::SetOut( standardOutput );
   Console::WriteLine( "INSERTTABS has completed the processing of {0}.", args[ 1 ] );
   return 0;
}
  • SecurityPermission

    用于调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 用于调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
System 命名空间
TextReader
In


Console ..::.SetOut 方法

Console
.
.
::
.
SetOut 方法
Console 类

将 Out 属性设置为指定的 TextWriter 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub SetOut ( _
    newOut As TextWriter _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void SetOut(
    TextWriter newOut
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void SetOut(
    TextWriter^ newOut
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member SetOut :
        newOut:TextWriter -> unit

参数

newOut
类型： System.IO TextWriter
一个 TextWriter 流，它是新的标准输出。
异常 | 条件
ArgumentNullException | newOut 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 调用方没有所要求的权限。

默认情况下，Out 属性会设置为标准输出流。

可以使用封装 FileStream 的 StreamWriter 向文件发送输出。例如： 可以使用封装 FileStream 的 StreamWriter 向文件发送输出。例如：

Console.WriteLine("Hello World")
Dim fs As New FileStream("Test.txt", FileMode.Create)
' First, save the standard output.
Dim tmp as TextWriter = Console.Out
Dim sw As New StreamWriter(fs)
Console.SetOut(sw)
Console.WriteLine("Hello file")
Console.SetOut(tmp)
Console.WriteLine("Hello World")
sw.Close()

Console.WriteLine("Hello World");
FileStream fs = new FileStream("Test.txt", FileMode.Create);
// First, save the standard output.
TextWriter tmp = Console.Out;
StreamWriter sw = new StreamWriter(fs);
Console.SetOut(sw);
Console.WriteLine("Hello file");
Console.SetOut(tmp);
Console.WriteLine("Hello World");
sw.Close();

Console::WriteLine("Hello World");
FileStream^ fs = gcnew FileStream("Test.txt", FileMode::Create);
// First, save the standard output.
TextWriter^ tmp = Console::Out;
StreamWriter^ sw = gcnew StreamWriter(fs);
Console::SetOut(sw);
Console::WriteLine("Hello file");
Console::SetOut(tmp);
Console::WriteLine("Hello World");
sw->Close();
说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 SetOut 方法的用法。

Imports System.IO

Public Class InsertTabs
   Private Const tabSize As Integer = 4
   Private Const usageText As String = "Usage: INSERTTABS inputfile.txt outputfile.txt"

   Public Shared Function Main(args() As String) As Integer
      Dim writer As StreamWriter = Nothing

      If args.Length < 2 Then
         Console.WriteLine(usageText)
         Return 1
      End If

      Try
         ' Attempt to open output file.
         writer = New StreamWriter(args(1))
         ' Redirect standard output from the console to the output file.
         Console.SetOut(writer)
         ' Redirect standard input from the console to the input file.
         Console.SetIn(New StreamReader(args(0)))
      Catch e As IOException
         Dim errorWriter As TextWriter = Console.Error
         errorWriter.WriteLine(e.Message)
         errorWriter.WriteLine(usageText)
         Return 1
      End Try

      Dim line As String = Console.ReadLine()
      While line IsNot Nothing
         Dim newLine As String = line.Replace("".PadRight(tabSize, " "c), ControlChars.Tab)
         Console.WriteLine(newLine)
         line = Console.ReadLine()
      End While
      writer.Close()
      ' Recover the standard output stream so that a
      ' completion message can be displayed.
      Dim standardOutput As New StreamWriter(Console.OpenStandardOutput())
      standardOutput.AutoFlush = True
      Console.SetOut(standardOutput)
      Console.WriteLine("INSERTTABS has completed the processing of {0}.", args(0))
      Return 0
   End Function
End Class

using System;
using System.IO;

public class InsertTabs {
    private const int tabSize = 4;
    private const string usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
    public static int Main(string[] args) {
        StreamWriter writer = null;

        if (args.Length < 2) {
            Console.WriteLine(usageText);
            return 1;
        }

        try {
            // Attempt to open output file.
            writer = new StreamWriter(args[1]);
            // Redirect standard output from the console to the output file.
            Console.SetOut(writer);
            // Redirect standard input from the console to the input file.
            Console.SetIn(new StreamReader(args[0]));
        }
        catch(IOException e) {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return 1;
        }
        string line;
        while ((line = Console.ReadLine()) != null) {
            string newLine = line.Replace(("").PadRight(tabSize, ' '), "\t");
            Console.WriteLine(newLine);
        }
        writer.Close();
        // Recover the standard output stream so that a
        // completion message can be displayed.
        StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
        standardOutput.AutoFlush = true;
        Console.SetOut(standardOutput);
        Console.WriteLine("INSERTTABS has completed the processing of {0}.", args[0]);
        return 0;
    }
}

using namespace System;
using namespace System::IO;

int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const int tabSize = 4;
   String^ usageText = "Usage: INSERTTABS inputfile.txt outputfile.txt";
   StreamWriter^ writer = nullptr;
   if ( args->Length < 3 )
   {
      Console::WriteLine( usageText );
      return 1;
   }

   try
   {
      // Attempt to open output file.
      writer = gcnew StreamWriter( args[ 2 ] );
      // Redirect standard output from the console to the output file.
      Console::SetOut( writer );
      // Redirect standard input from the console to the input file.
      Console::SetIn( gcnew StreamReader( args[ 1 ] ) );
   }
   catch ( IOException^ e )
   {
      TextWriter^ errorWriter = Console::Error;
      errorWriter->WriteLine( e->Message );
      errorWriter->WriteLine( usageText );
      return 1;
   }

   String^ line;
   while ( (line = Console::ReadLine()) != nullptr )
   {
      String^ newLine = line->Replace( ((String^)"")->PadRight( tabSize, ' ' ), "\t" );
      Console::WriteLine( newLine );
   }

   writer->Close();

   // Recover the standard output stream so that a
   // completion message can be displayed.
   StreamWriter^ standardOutput = gcnew StreamWriter( Console::OpenStandardOutput() );
   standardOutput->AutoFlush = true;
   Console::SetOut( standardOutput );
   Console::WriteLine( "INSERTTABS has completed the processing of {0}.", args[ 1 ] );
   return 0;
}
  • SecurityPermission

    用于调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 用于调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
System 命名空间
TextWriter
Out


Console ..::.SetWindowPosition 方法

Console
.
.
::
.
SetWindowPosition 方法
Console 类

设置控制台窗口相对于屏幕缓冲区的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SetWindowPosition ( _
    left As Integer, _
    top As Integer _
)
public static void SetWindowPosition(
    int left,
    int top
)
public:
static void SetWindowPosition(
    int left,
    int top
)
static member SetWindowPosition :
        left:int *
        top:int -> unit

参数

left
类型： System Int32
控制台窗口左上角的列位置。
top
类型： System Int32
控制台窗口左上角的行位置。
异常 | 条件
ArgumentOutOfRangeException | left 或 top 小于零。 - 或 - left + WindowWidth 大于 BufferWidth。 - 或 - top + WindowHeight 大于 BufferHeight。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

操作系统窗口显示控制台窗口，而控制台窗口显示屏幕缓冲区的一部分。SetWindowPosition 方法影响控制台窗口相对于屏幕缓冲区的位置，但不影响操作系统窗口相对于桌面的位置。 操作系统窗口显示控制台窗口，而控制台窗口显示屏幕缓冲区的一部分。SetWindowPosition 方法影响控制台窗口相对于屏幕缓冲区的位置，但不影响操作系统窗口相对于桌面的位置。

控制台窗口和操作系统窗口通常互不影响。但是，如果屏幕缓冲区无法显示在控制台窗口的当前边界内，操作系统会自动在操作系统窗口中添加滚动条。这样，移动操作系统窗口滚动条就会影响控制台窗口的位置，而通过 SetWindowPosition 方法移动控制台窗口会影响操作系统窗口滚动条的位置。 控制台窗口和操作系统窗口通常互不影响。但是，如果屏幕缓冲区无法显示在控制台窗口的当前边界内，操作系统会自动在操作系统窗口中添加滚动条。这样，移动操作系统窗口滚动条就会影响控制台窗口的位置，而通过 SetWindowPosition 方法移动控制台窗口会影响操作系统窗口滚动条的位置。 控制台窗口和操作系统窗口通常互不影响。但是，如果屏幕缓冲区无法显示在控制台窗口的当前边界内，操作系统会自动在操作系统窗口中添加滚动条。这样，移动操作系统窗口滚动条就会影响控制台窗口的位置，而通过 SetWindowPosition 方法移动控制台窗口会影响操作系统窗口滚动条的位置。

下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。 下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。 下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。 下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。

' This example demonstrates the Console.WindowLeft and
'                               Console.WindowTop properties.
Imports System.IO
Imports System.Text

Class Sample
   Public Shared saveBufferWidth As Integer
   Public Shared saveBufferHeight As Integer
   Public Shared saveWindowHeight As Integer
   Public Shared saveWindowWidth As Integer
   Public Shared saveCursorVisible As Boolean

   Public Shared Sub Main()
      Dim m1 As String = _
          "1) Press the cursor keys to move the console window." & vbCrlf & _
          "2) Press any key to begin. When you're finished..."   & vbCrlf & _
          "3) Press the Escape key to quit."
      Dim g1 As String = "+----"
      Dim g2 As String = "|    "
      Dim grid1 As String
      Dim grid2 As String
      Dim sbG1 As New StringBuilder()
      Dim sbG2 As New StringBuilder()
      Dim cki As ConsoleKeyInfo
      Dim y As Integer
      '
      Try
         saveBufferWidth = Console.BufferWidth
         saveBufferHeight = Console.BufferHeight
         saveWindowHeight = Console.WindowHeight
         saveWindowWidth = Console.WindowWidth
         saveCursorVisible = Console.CursorVisible
         '
         Console.Clear()
         Console.WriteLine(m1)
         Console.ReadKey(True)

         ' Set the smallest possible window size before setting the buffer size.
         Console.SetWindowSize(1, 1)
         Console.SetBufferSize(80, 80)
         Console.SetWindowSize(40, 20)

         ' Create grid lines to fit the buffer. (The buffer width is 80, but
         ' this same technique could be used with an arbitrary buffer width.)
         For y = 0 To (Console.BufferWidth / g1.Length) - 1
            sbG1.Append(g1)
            sbG2.Append(g2)
         Next y
         sbG1.Append(g1, 0, Console.BufferWidth Mod g1.Length)
         sbG2.Append(g2, 0, Console.BufferWidth Mod g2.Length)
         grid1 = sbG1.ToString()
         grid2 = sbG2.ToString()

         Console.CursorVisible = False
         Console.Clear()
         For y = 0 To (Console.BufferHeight - 2)
            If y Mod 3 = 0 Then
               Console.Write(grid1)
            Else
               Console.Write(grid2)
            End If
         Next y
         '
         Console.SetWindowPosition(0, 0)
         Do
            cki = Console.ReadKey(True)
            Select Case cki.Key
               Case ConsoleKey.LeftArrow
                  If Console.WindowLeft > 0 Then
                     Console.SetWindowPosition(Console.WindowLeft - 1, Console.WindowTop)
                  End If
               Case ConsoleKey.UpArrow
                  If Console.WindowTop > 0 Then
                     Console.SetWindowPosition(Console.WindowLeft, Console.WindowTop - 1)
                  End If
               Case ConsoleKey.RightArrow
                  If Console.WindowLeft < Console.BufferWidth - Console.WindowWidth Then
                     Console.SetWindowPosition(Console.WindowLeft + 1, Console.WindowTop)
                  End If
               Case ConsoleKey.DownArrow
                  If Console.WindowTop < Console.BufferHeight - Console.WindowHeight Then
                     Console.SetWindowPosition(Console.WindowLeft, Console.WindowTop + 1)
                  End If
            End Select
         Loop While cki.Key <> ConsoleKey.Escape
      ' end do-while
      ' end try
      Catch e As IOException
         Console.WriteLine(e.Message)
      Finally
         Console.Clear()
         Console.SetWindowSize(1, 1)
         Console.SetBufferSize(saveBufferWidth, saveBufferHeight)
         Console.SetWindowSize(saveWindowWidth, saveWindowHeight)
         Console.CursorVisible = saveCursorVisible
      End Try
   End Sub 'Main ' end Main
End Class 'Sample ' end Sample
'
'This example produces results similar to the following:
'
'1) Press the cursor keys to move the console window.
'2) Press any key to begin. When you're finished...
'3) Press the Escape key to quit.
'
'...
'
'+----+----+----+-
'|    |    |    |
'|    |    |    |
'+----+----+----+-
'|    |    |    |
'|    |    |    |
'+----+----+----+-
'

// This example demonstrates the Console.WindowLeft and
//                               Console.WindowTop properties.
using System;
using System.Text;
using System.IO;
//
class Sample
{
    public static int saveBufferWidth;
    public static int saveBufferHeight;
    public static int saveWindowHeight;
    public static int saveWindowWidth;
    public static bool saveCursorVisible;
//
    public static void Main()
    {
    string m1 = "1) Press the cursor keys to move the console window.\n" +
                "2) Press any key to begin. When you're finished...\n" +
                "3) Press the Escape key to quit.";
    string g1 = "+----";
    string g2 = "|    ";
    string grid1;
    string grid2;
    StringBuilder sbG1 = new StringBuilder();
    StringBuilder sbG2 = new StringBuilder();
    ConsoleKeyInfo cki;
    int y;
//
    try
    {
    saveBufferWidth  = Console.BufferWidth;
    saveBufferHeight = Console.BufferHeight;
    saveWindowHeight = Console.WindowHeight;
    saveWindowWidth  = Console.WindowWidth;
    saveCursorVisible = Console.CursorVisible;
//
    Console.Clear();
    Console.WriteLine(m1);
    Console.ReadKey(true);

// Set the smallest possible window size before setting the buffer size.
    Console.SetWindowSize(1, 1);
    Console.SetBufferSize(80, 80);
    Console.SetWindowSize(40, 20);

// Create grid lines to fit the buffer. (The buffer width is 80, but
// this same technique could be used with an arbitrary buffer width.)
    for (y = 0; y < Console.BufferWidth/g1.Length; y++)
        {
        sbG1.Append(g1);
        sbG2.Append(g2);
        }
    sbG1.Append(g1, 0, Console.BufferWidth%g1.Length);
    sbG2.Append(g2, 0, Console.BufferWidth%g2.Length);
    grid1 = sbG1.ToString();
    grid2 = sbG2.ToString();

    Console.CursorVisible = false;
    Console.Clear();
    for (y = 0; y < Console.BufferHeight-1; y++)
        {
        if (y%3 == 0)
            Console.Write(grid1);
        else
            Console.Write(grid2);
        }

    Console.SetWindowPosition(0, 0);
    do
        {
        cki = Console.ReadKey(true);
        switch (cki.Key)
            {
            case ConsoleKey.LeftArrow:
                if (Console.WindowLeft > 0)
                    Console.SetWindowPosition(
                            Console.WindowLeft-1, Console.WindowTop);
                break;
            case ConsoleKey.UpArrow:
                if (Console.WindowTop > 0)
                    Console.SetWindowPosition(
                            Console.WindowLeft, Console.WindowTop-1);
                break;
            case ConsoleKey.RightArrow:
                if (Console.WindowLeft < (Console.BufferWidth-Console.WindowWidth))
                    Console.SetWindowPosition(
                            Console.WindowLeft+1, Console.WindowTop);
                break;
            case ConsoleKey.DownArrow:
                if (Console.WindowTop < (Console.BufferHeight-Console.WindowHeight))
                    Console.SetWindowPosition(
                            Console.WindowLeft, Console.WindowTop+1);
                break;
            }
        }
    while (cki.Key != ConsoleKey.Escape);  // end do-while
    } // end try
    catch (IOException e)
        {
        Console.WriteLine(e.Message);
        }
    finally
        {
        Console.Clear();
        Console.SetWindowSize(1, 1);
        Console.SetBufferSize(saveBufferWidth, saveBufferHeight);
        Console.SetWindowSize(saveWindowWidth, saveWindowHeight);
        Console.CursorVisible = saveCursorVisible;
        }
    } // end Main
} // end Sample
/*
This example produces results similar to the following:

1) Press the cursor keys to move the console window.
2) Press any key to begin. When you're finished...
3) Press the Escape key to quit.

...

+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-

*/

// This example demonstrates the Console.WindowLeft and
//                               Console.WindowTop properties.
using namespace System;
using namespace System::Text;
using namespace System::IO;

//
int saveBufferWidth;
int saveBufferHeight;
int saveWindowHeight;
int saveWindowWidth;
bool saveCursorVisible;

//
int main()
{
   String^ m1 = "1) Press the cursor keys to move the console window.\n"
   "2) Press any key to begin. When you're finished...\n"
   "3) Press the Escape key to quit.";
   String^ g1 = "+----";
   String^ g2 = "|    ";
   String^ grid1;
   String^ grid2;
   StringBuilder^ sbG1 = gcnew StringBuilder;
   StringBuilder^ sbG2 = gcnew StringBuilder;
   ConsoleKeyInfo cki;
   int y;

   //
   try
   {
      saveBufferWidth = Console::BufferWidth;
      saveBufferHeight = Console::BufferHeight;
      saveWindowHeight = Console::WindowHeight;
      saveWindowWidth = Console::WindowWidth;
      saveCursorVisible = Console::CursorVisible;

      //
      Console::Clear();
      Console::WriteLine( m1 );
      Console::ReadKey( true );

      // Set the smallest possible window size before setting the buffer size.
      Console::SetWindowSize( 1, 1 );
      Console::SetBufferSize( 80, 80 );
      Console::SetWindowSize( 40, 20 );

      // Create grid lines to fit the buffer. (The buffer width is 80, but
      // this same technique could be used with an arbitrary buffer width.)
      for ( y = 0; y < Console::BufferWidth / g1->Length; y++ )
      {
         sbG1->Append( g1 );
         sbG2->Append( g2 );

      }
      sbG1->Append( g1, 0, Console::BufferWidth % g1->Length );
      sbG2->Append( g2, 0, Console::BufferWidth % g2->Length );
      grid1 = sbG1->ToString();
      grid2 = sbG2->ToString();
      Console::CursorVisible = false;
      Console::Clear();
      for ( y = 0; y < Console::BufferHeight - 1; y++ )
      {
         if ( y % 3 == 0 )
                  Console::Write( grid1 );
         else
                  Console::Write( grid2 );

      }
      Console::SetWindowPosition( 0, 0 );
      do
      {
         cki = Console::ReadKey( true );
         switch ( cki.Key )
         {
            case ConsoleKey::LeftArrow:
               if ( Console::WindowLeft > 0 )
                              Console::SetWindowPosition( Console::WindowLeft - 1, Console::WindowTop );
               break;

            case ConsoleKey::UpArrow:
               if ( Console::WindowTop > 0 )
                              Console::SetWindowPosition( Console::WindowLeft, Console::WindowTop - 1 );
               break;

            case ConsoleKey::RightArrow:
               if ( Console::WindowLeft < (Console::BufferWidth - Console::WindowWidth) )
                              Console::SetWindowPosition( Console::WindowLeft + 1, Console::WindowTop );
               break;

            case ConsoleKey::DownArrow:
               if ( Console::WindowTop < (Console::BufferHeight - Console::WindowHeight) )
                              Console::SetWindowPosition( Console::WindowLeft, Console::WindowTop + 1 );
               break;
         }
      }
      while ( cki.Key != ConsoleKey::Escape );
   }
   catch ( IOException^ e )
   {
      Console::WriteLine( e->Message );
   }
   finally
   {
      Console::Clear();
      Console::SetWindowSize( 1, 1 );
      Console::SetBufferSize( saveBufferWidth, saveBufferHeight );
      Console::SetWindowSize( saveWindowWidth, saveWindowHeight );
      Console::CursorVisible = saveCursorVisible;
   }

} // end Main

/*
This example produces results similar to the following:

1) Press the cursor keys to move the console window.
2) Press any key to begin. When you're finished...
3) Press the Escape key to quit.

...

+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.SetWindowSize 方法

Console
.
.
::
.
SetWindowSize 方法
Console 类

将控制台窗口的高度和宽度设置为指定值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SetWindowSize ( _
    width As Integer, _
    height As Integer _
)
public static void SetWindowSize(
    int width,
    int height
)
public:
static void SetWindowSize(
    int width,
    int height
)
static member SetWindowSize :
        width:int *
        height:int -> unit

参数

width
类型： System Int32
控制台窗口的宽度，以列为单位。
height
类型： System Int32
控制台窗口的高度，以行为单位。
异常 | 条件
ArgumentOutOfRangeException | width 或 height 小于或等于零。 - 或 - width 加 WindowLeft 或者 height 加 WindowTop 大于等于 Int16..::.MaxValue。 - 或 - width 或 height 大于当前屏幕分辨率和控制台字体所允许的最大窗口宽度和高度。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

此示例演示 SetWindowSize 方法以及 WindowWidth 和 WindowHeight 属性。您必须运行该示例才能查看更改控制台窗口大小的全部效果。 此示例演示 SetWindowSize 方法以及 WindowWidth 和 WindowHeight 属性。您必须运行该示例才能查看更改控制台窗口大小的全部效果。

该示例报告设置为 85 列和 43 行的控制台窗口的维度，然后等待按下某个键。按下任意键时，控制台窗口的维度会减半，然后该示例会报告新的维度，并等待下一次按键。最后，按下任意键时，控制台窗口会还原为其原始维度，该示例终止。 该示例报告设置为 85 列和 43 行的控制台窗口的维度，然后等待按下某个键。按下任意键时，控制台窗口的维度会减半，然后该示例会报告新的维度，并等待下一次按键。最后，按下任意键时，控制台窗口会还原为其原始维度，该示例终止。 该示例报告设置为 85 列和 43 行的控制台窗口的维度，然后等待按下某个键。按下任意键时，控制台窗口的维度会减半，然后该示例会报告新的维度，并等待下一次按键。最后，按下任意键时，控制台窗口会还原为其原始维度，该示例终止。

' This example demonstrates the Console.SetWindowSize method,
'                           the Console.WindowWidth property,
'                       and the Console.WindowHeight property.
Imports System

Class Sample
   Public Shared Sub Main()
      Dim origWidth, width As Integer
      Dim origHeight, height As Integer
      Dim m1 As String = "The current window width is {0}, and the " & _
                         "current window height is {1}."
      Dim m2 As String = "The new window width is {0}, and the new " & _
                         "window height is {1}."
      Dim m4 As String = "  (Press any key to continue...)"
      '
      ' Step 1: Get the current window dimensions.
      '
      origWidth = Console.WindowWidth
      origHeight = Console.WindowHeight
      Console.WriteLine(m1, Console.WindowWidth, Console.WindowHeight)
      Console.WriteLine(m4)
      Console.ReadKey(True)
      '
      ' Step 2: Cut the window to 1/4 its original size.
      '
      width = origWidth / 2
      height = origHeight / 2
      Console.SetWindowSize(width, height)
      Console.WriteLine(m2, Console.WindowWidth, Console.WindowHeight)
      Console.WriteLine(m4)
      Console.ReadKey(True)
      '
      ' Step 3: Restore the window to its original size.
      '
      Console.SetWindowSize(origWidth, origHeight)
      Console.WriteLine(m1, Console.WindowWidth, Console.WindowHeight)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'The current window width is 85, and the current window height is 43.
'  (Press any key to continue...)
'The new window width is 42, and the new window height is 21.
'  (Press any key to continue...)
'The current window width is 85, and the current window height is 43.
'
'

// This example demonstrates the Console.SetWindowSize method,
//                           the Console.WindowWidth property,
//                       and the Console.WindowHeight property.
using System;

class Sample
{
    public static void Main()
    {
    int origWidth, width;
    int origHeight, height;
    string m1 = "The current window width is {0}, and the " +
                "current window height is {1}.";
    string m2 = "The new window width is {0}, and the new " +
                "window height is {1}.";
    string m4 = "  (Press any key to continue...)";
//
// Step 1: Get the current window dimensions.
//
    origWidth  = Console.WindowWidth;
    origHeight = Console.WindowHeight;
    Console.WriteLine(m1, Console.WindowWidth,
                          Console.WindowHeight);
    Console.WriteLine(m4);
    Console.ReadKey(true);
//
// Step 2: Cut the window to 1/4 its original size.
//
    width  = origWidth/2;
    height = origHeight/2;
    Console.SetWindowSize(width, height);
    Console.WriteLine(m2, Console.WindowWidth,
                          Console.WindowHeight);
    Console.WriteLine(m4);
    Console.ReadKey(true);
//
// Step 3: Restore the window to its original size.
//
    Console.SetWindowSize(origWidth, origHeight);
    Console.WriteLine(m1, Console.WindowWidth,
                          Console.WindowHeight);
    }
}
/*
This example produces the following results:

The current window width is 85, and the current window height is 43.
  (Press any key to continue...)
The new window width is 42, and the new window height is 21.
  (Press any key to continue...)
The current window width is 85, and the current window height is 43.

*/

// This example demonstrates the Console.SetWindowSize method,
//                           the Console.WindowWidth property,
//                       and the Console.WindowHeight property.
using namespace System;
int main()
{
   int origWidth;
   int width;
   int origHeight;
   int height;
   String^ m1 = "The current window width is {0}, and the "
   "current window height is {1}.";
   String^ m2 = "The new window width is {0}, and the new "
   "window height is {1}.";
   String^ m4 = "  (Press any key to continue...)";

   //
   // Step 1: Get the current window dimensions.
   //
   origWidth = Console::WindowWidth;
   origHeight = Console::WindowHeight;
   Console::WriteLine( m1, Console::WindowWidth, Console::WindowHeight );
   Console::WriteLine( m4 );
   Console::ReadKey( true );

   //
   // Step 2: Cut the window to 1/4 its original size.
   //
   width = origWidth / 2;
   height = origHeight / 2;
   Console::SetWindowSize( width, height );
   Console::WriteLine( m2, Console::WindowWidth, Console::WindowHeight );
   Console::WriteLine( m4 );
   Console::ReadKey( true );

   //
   // Step 3: Restore the window to its original size.
   //
   Console::SetWindowSize( origWidth, origHeight );
   Console::WriteLine( m1, Console::WindowWidth, Console::WindowHeight );
}

/*
This example produces the following results:

The current window width is 85, and the current window height is 43.
  (Press any key to continue...)
The new window width is 42, and the new window height is 21.
  (Press any key to continue...)
The current window width is 85, and the current window height is 43.

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.Write 方法

Console
.
.
::
.
Write 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

将指定值的文本表示形式写入标准输出流。

名称 说明
页首

参考

Console 类
Console 成员
System 命名空间


Console ..::.Write 方法 (Boolean)

Console
.
.
::
.
Write 方法 (Boolean)
Console 类

将指定的布尔值的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As Boolean _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    bool value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    bool value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:bool -> unit

参数

value
类型： System Boolean
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Boolean..::.ToString 生成，该操作会输出 Boolean..::.TrueString 或 Boolean..::.FalseString。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (Char)

Console
.
.
::
.
Write 方法 (Char)
Console 类

将指定的 Unicode 字符值写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As Char _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    char value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    wchar_t value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:char -> unit

参数

value
类型： System Char
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。
说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 ( array<Char >[]()[])

Console
.
.
::
.
Write 方法 (
array<
Char
>
[]
()
[]
)
Console 类

将指定的 Unicode 字符数组写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    buffer As Char() _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    char[] buffer
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    array<wchar_t>^ buffer
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        buffer:char[] -> unit

参数

buffer
类型：
array<
System Char
>
[]
()
[]

Unicode 字符数组。
异常 | 条件
IOException | 发生了 I/O 错误。
说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (Decimal)

Console
.
.
::
.
Write 方法 (Decimal)
Console 类

将指定的 Decimal 值的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As Decimal _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    decimal value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    Decimal value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:decimal -> unit

参数

value
类型： System Decimal
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Decimal..::.ToString 生成。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (Double)

Console
.
.
::
.
Write 方法 (Double)
Console 类

将指定的双精度浮点值的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As Double _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    double value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    double value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:float -> unit

参数

value
类型： System Double
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Double..::.ToString 方法生成。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (Int32)

Console
.
.
::
.
Write 方法 (Int32)
Console 类

将指定的 32 位有符号整数值的文本表示写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As Integer _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    int value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    int value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:int -> unit

参数

value
类型： System Int32
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Int32..::.ToString 方法生成。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (Int64)

Console
.
.
::
.
Write 方法 (Int64)
Console 类

将指定的 64 位有符号整数值的文本表示写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As Long _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    long value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    long long value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:int64 -> unit

参数

value
类型： System Int64
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Int64..::.ToString 方法生成。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (Object)

Console
.
.
::
.
Write 方法 (Object)
Console 类

将指定对象的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As Object _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    Object value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    Object^ value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:Object -> unit

参数

value
类型： System Object
要写入的值，或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
IOException | 发生了 I/O 错误。

如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不写入任何值并且不引发任何异常。否则，value 的 ToString 方法被调用以生成其字符串表示，所得的字符串被写入标准输出流。 如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不写入任何值并且不引发任何异常。否则，value 的 ToString 方法被调用以生成其字符串表示，所得的字符串被写入标准输出流。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (Single)

Console
.
.
::
.
Write 方法 (Single)
Console 类

将指定的单精度浮点值的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As Single _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    float value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    float value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:float32 -> unit

参数

value
类型： System Single
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Single..::.ToString 方法生成。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (String)

Console
.
.
::
.
Write 方法 (String)
Console 类

将指定的字符串值写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As String _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    string value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    String^ value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:string -> unit

参数

value
类型： System String
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

如果值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不向标准输出流写入任何值。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (UInt32)

Console
.
.
::
.
Write 方法 (UInt32)
Console 类

将指定的 32 位无符号整数值的文本表示写入标准输出流。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As UInteger _
)
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    uint value
)
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:uint32 -> unit

参数

value
类型： System UInt32
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 UInt32..::.ToString 方法生成。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (UInt64)

Console
.
.
::
.
Write 方法 (UInt64)
Console 类

将指定的 64 位无符号整数值的文本表示写入标准输出流。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    value As ULong _
)
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    ulong value
)
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        value:uint64 -> unit

参数

value
类型： System UInt64
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 UInt64..::.ToString 方法生成。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (String, Object)

Console
.
.
::
.
Write 方法 (String, Object)
Console 类

使用指定的格式信息将指定对象的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    format As String, _
    arg0 As Object _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    string format,
    Object arg0
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    String^ format,
    Object^ arg0
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        format:string *
        arg0:Object -> unit

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要使用 format 写入的对象。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例使用 WriteLine 方法演示数字、日期和枚举的标准格式设置说明符。

' This code example demonstrates the Console.WriteLine() method.
' Formatting for this example uses the "en-US" culture.

Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Enum Color
      Yellow = 1
      Blue = 2
      Green = 3
   End Enum 'Color
   Private Shared thisDate As DateTime = DateTime.Now

   Public Shared Sub Main()
      Console.Clear()

      ' Format a negative integer or floating-point number in various ways.
      Console.WriteLine("Standard Numeric Format Specifiers")
      Console.WriteLine("(C) Currency: . . . . . . . . {0:C}" & vbCrLf & _
                        "(D) Decimal:. . . . . . . . . {0:D}" & vbCrLf & _
                        "(E) Scientific: . . . . . . . {1:E}" & vbCrLf & _
                        "(F) Fixed point:. . . . . . . {1:F}" & vbCrLf & _
                        "(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(N) Number: . . . . . . . . . {0:N}" & vbCrLf & _
                        "(P) Percent:. . . . . . . . . {1:P}" & vbCrLf & _
                        "(R) Round-trip: . . . . . . . {1:R}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        - 123, - 123.45F)

      ' Format the current date in various ways.
      Console.WriteLine("Standard DateTime Format Specifiers")
      Console.WriteLine("(d) Short date: . . . . . . . {0:d}" & vbCrLf & _
                        "(D) Long date:. . . . . . . . {0:D}" & vbCrLf & _
                        "(t) Short time: . . . . . . . {0:t}" & vbCrLf & _
                        "(T) Long time:. . . . . . . . {0:T}" & vbCrLf & _
                        "(f) Full date/short time: . . {0:f}" & vbCrLf & _
                        "(F) Full date/long time:. . . {0:F}" & vbCrLf & _
                        "(g) General date/short time:. {0:g}" & vbCrLf & _
                        "(G) General date/long time: . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(M) Month:. . . . . . . . . . {0:M}" & vbCrLf & _
                        "(R) RFC1123:. . . . . . . . . {0:R}" & vbCrLf & _
                        "(s) Sortable: . . . . . . . . {0:s}" & vbCrLf & _
                        "(u) Universal sortable: . . . {0:u} (invariant)" & vbCrLf & _
                        "(U) Universal full date/time: {0:U}" & vbCrLf & _
                        "(Y) Year: . . . . . . . . . . {0:Y}" & vbCrLf, _
                        thisDate)

      ' Format a Color enumeration value in various ways.
      Console.WriteLine("Standard Enumeration Format Specifiers")
      Console.WriteLine("(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)" & vbCrLf & _
                        "(D) Decimal number: . . . . . {0:D}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        Color.Green)
   End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Standard Numeric Format Specifiers
'(C) Currency: . . . . . . . . ($123.00)
'(D) Decimal:. . . . . . . . . -123
'(E) Scientific: . . . . . . . -1.234500E+002
'(F) Fixed point:. . . . . . . -123.45
'(G) General:. . . . . . . . . -123
'    (default):. . . . . . . . -123 (default = 'G')
'(N) Number: . . . . . . . . . -123.00
'(P) Percent:. . . . . . . . . -12,345.00 %
'(R) Round-trip: . . . . . . . -123.45
'(X) Hexadecimal:. . . . . . . FFFFFF85
'
'Standard DateTime Format Specifiers
'(d) Short date: . . . . . . . 6/26/2004
'(D) Long date:. . . . . . . . Saturday, June 26, 2004
'(t) Short time: . . . . . . . 8:11 PM
'(T) Long time:. . . . . . . . 8:11:04 PM
'(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
'(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
'(g) General date/short time:. 6/26/2004 8:11 PM
'(G) General date/long time: . 6/26/2004 8:11:04 PM
'    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
'(M) Month:. . . . . . . . . . June 26
'(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
'(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
'(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
'(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
'(Y) Year: . . . . . . . . . . June, 2004
'
'Standard Enumeration Format Specifiers
'(G) General:. . . . . . . . . Green
'    (default):. . . . . . . . Green (default = 'G')
'(F) Flags:. . . . . . . . . . Green (flags or integer)
'(D) Decimal number: . . . . . 3
'(X) Hexadecimal:. . . . . . . 00000003
'

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    Console.WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    Console.WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    Console.WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using namespace System;

enum class Color {Yellow = 1, Blue, Green};

int main()
{
    DateTime thisDate = DateTime::Now;
    Console::Clear();

    // Format a negative integer or floating-point number in various ways.
    Console::WriteLine("Standard Numeric Format Specifiers");
    Console::WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

    // Format the current date in various ways.
    Console::WriteLine("Standard DateTime Format Specifiers");
    Console::WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

    // Format a Color enumeration value in various ways.
    Console::WriteLine("Standard Enumeration Format Specifiers");
    Console::WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color::Green);

};

/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine

其他资源

格式化类型


Console ..::.Write 方法 (String, array<Object >[]()[])

Console
.
.
::
.
Write 方法 (String,
array<
Object
>
[]
()
[]
)
Console 类

使用指定的格式信息将指定的对象数组的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    format As String, _
    ParamArray arg As Object() _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    string format,
    params Object[] arg
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    String^ format,
    ... array<Object^>^ arg
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        format:string *
        arg:Object[] -> unit

参数

format
类型： System String
复合格式字符串。
arg
类型：
array<
System Object
>
[]
()
[]

要使用 format 写入的对象的数组。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 或 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

对调用者的说明

此方法不可由 C++ 代码调用。C++ 编译器将对包含一个字符串或四个或更多对象参数的 WriteLine 的调用解析为对 WriteLine(String, Object, Object, Object, Object) 的调用。 此方法不可由 C++ 代码调用。C++ 编译器将对包含一个字符串或四个或更多对象参数的 WriteLine 的调用解析为对 WriteLine(String, Object, Object, Object, Object) 的调用。

下面的代码示例使用 WriteLine 方法演示数字、日期和枚举的标准格式设置说明符。

' This code example demonstrates the Console.WriteLine() method.
' Formatting for this example uses the "en-US" culture.

Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Enum Color
      Yellow = 1
      Blue = 2
      Green = 3
   End Enum 'Color
   Private Shared thisDate As DateTime = DateTime.Now

   Public Shared Sub Main()
      Console.Clear()

      ' Format a negative integer or floating-point number in various ways.
      Console.WriteLine("Standard Numeric Format Specifiers")
      Console.WriteLine("(C) Currency: . . . . . . . . {0:C}" & vbCrLf & _
                        "(D) Decimal:. . . . . . . . . {0:D}" & vbCrLf & _
                        "(E) Scientific: . . . . . . . {1:E}" & vbCrLf & _
                        "(F) Fixed point:. . . . . . . {1:F}" & vbCrLf & _
                        "(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(N) Number: . . . . . . . . . {0:N}" & vbCrLf & _
                        "(P) Percent:. . . . . . . . . {1:P}" & vbCrLf & _
                        "(R) Round-trip: . . . . . . . {1:R}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        - 123, - 123.45F)

      ' Format the current date in various ways.
      Console.WriteLine("Standard DateTime Format Specifiers")
      Console.WriteLine("(d) Short date: . . . . . . . {0:d}" & vbCrLf & _
                        "(D) Long date:. . . . . . . . {0:D}" & vbCrLf & _
                        "(t) Short time: . . . . . . . {0:t}" & vbCrLf & _
                        "(T) Long time:. . . . . . . . {0:T}" & vbCrLf & _
                        "(f) Full date/short time: . . {0:f}" & vbCrLf & _
                        "(F) Full date/long time:. . . {0:F}" & vbCrLf & _
                        "(g) General date/short time:. {0:g}" & vbCrLf & _
                        "(G) General date/long time: . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(M) Month:. . . . . . . . . . {0:M}" & vbCrLf & _
                        "(R) RFC1123:. . . . . . . . . {0:R}" & vbCrLf & _
                        "(s) Sortable: . . . . . . . . {0:s}" & vbCrLf & _
                        "(u) Universal sortable: . . . {0:u} (invariant)" & vbCrLf & _
                        "(U) Universal full date/time: {0:U}" & vbCrLf & _
                        "(Y) Year: . . . . . . . . . . {0:Y}" & vbCrLf, _
                        thisDate)

      ' Format a Color enumeration value in various ways.
      Console.WriteLine("Standard Enumeration Format Specifiers")
      Console.WriteLine("(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)" & vbCrLf & _
                        "(D) Decimal number: . . . . . {0:D}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        Color.Green)
   End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Standard Numeric Format Specifiers
'(C) Currency: . . . . . . . . ($123.00)
'(D) Decimal:. . . . . . . . . -123
'(E) Scientific: . . . . . . . -1.234500E+002
'(F) Fixed point:. . . . . . . -123.45
'(G) General:. . . . . . . . . -123
'    (default):. . . . . . . . -123 (default = 'G')
'(N) Number: . . . . . . . . . -123.00
'(P) Percent:. . . . . . . . . -12,345.00 %
'(R) Round-trip: . . . . . . . -123.45
'(X) Hexadecimal:. . . . . . . FFFFFF85
'
'Standard DateTime Format Specifiers
'(d) Short date: . . . . . . . 6/26/2004
'(D) Long date:. . . . . . . . Saturday, June 26, 2004
'(t) Short time: . . . . . . . 8:11 PM
'(T) Long time:. . . . . . . . 8:11:04 PM
'(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
'(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
'(g) General date/short time:. 6/26/2004 8:11 PM
'(G) General date/long time: . 6/26/2004 8:11:04 PM
'    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
'(M) Month:. . . . . . . . . . June 26
'(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
'(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
'(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
'(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
'(Y) Year: . . . . . . . . . . June, 2004
'
'Standard Enumeration Format Specifiers
'(G) General:. . . . . . . . . Green
'    (default):. . . . . . . . Green (default = 'G')
'(F) Flags:. . . . . . . . . . Green (flags or integer)
'(D) Decimal number: . . . . . 3
'(X) Hexadecimal:. . . . . . . 00000003
'

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    Console.WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    Console.WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    Console.WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using namespace System;

enum class Color {Yellow = 1, Blue, Green};

int main()
{
    DateTime thisDate = DateTime::Now;
    Console::Clear();

    // Format a negative integer or floating-point number in various ways.
    Console::WriteLine("Standard Numeric Format Specifiers");
    Console::WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

    // Format the current date in various ways.
    Console::WriteLine("Standard DateTime Format Specifiers");
    Console::WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

    // Format a Color enumeration value in various ways.
    Console::WriteLine("Standard Enumeration Format Specifiers");
    Console::WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color::Green);

};

/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine

其他资源

格式化类型


Console ..::.Write 方法 ( array<Char >[]()[], Int32, Int32)

Console
.
.
::
.
Write 方法 (
array<
Char
>
[]
()
[]
, Int32, Int32)
Console 类

将指定的 Unicode 字符子数组写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    buffer As Char(), _
    index As Integer, _
    count As Integer _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    char[] buffer,
    int index,
    int count
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    array<wchar_t>^ buffer,
    int index,
    int count
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        buffer:char[] *
        index:int *
        count:int -> unit

参数

buffer
类型：
array<
System Char
>
[]
()
[]

Unicode 字符的数组。
index
类型： System Int32
buffer 中的起始位置。
count
类型： System Int32
要写入的字符数。
异常 | 条件
ArgumentNullException | buffer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 或 count 小于零。
ArgumentException | index 和 count 共同指定一个不在 buffer 中的位置。
IOException | 发生了 I/O 错误。

此方法将始于 buffer 的 index 位置的 count 字符串写入标准输出流。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine


Console ..::.Write 方法 (String, Object, Object)

Console
.
.
::
.
Write 方法 (String, Object, Object)
Console 类

使用指定的格式信息将指定对象的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    format As String, _
    arg0 As Object, _
    arg1 As Object _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    string format,
    Object arg0,
    Object arg1
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    String^ format,
    Object^ arg0,
    Object^ arg1
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        format:string *
        arg0:Object *
        arg1:Object -> unit

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要使用 format 写入的第一个对象。
arg1
类型： System Object
要使用 format 写入的第二个对象。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例使用 WriteLine 方法演示数字、日期和枚举的标准格式设置说明符。

' This code example demonstrates the Console.WriteLine() method.
' Formatting for this example uses the "en-US" culture.

Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Enum Color
      Yellow = 1
      Blue = 2
      Green = 3
   End Enum 'Color
   Private Shared thisDate As DateTime = DateTime.Now

   Public Shared Sub Main()
      Console.Clear()

      ' Format a negative integer or floating-point number in various ways.
      Console.WriteLine("Standard Numeric Format Specifiers")
      Console.WriteLine("(C) Currency: . . . . . . . . {0:C}" & vbCrLf & _
                        "(D) Decimal:. . . . . . . . . {0:D}" & vbCrLf & _
                        "(E) Scientific: . . . . . . . {1:E}" & vbCrLf & _
                        "(F) Fixed point:. . . . . . . {1:F}" & vbCrLf & _
                        "(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(N) Number: . . . . . . . . . {0:N}" & vbCrLf & _
                        "(P) Percent:. . . . . . . . . {1:P}" & vbCrLf & _
                        "(R) Round-trip: . . . . . . . {1:R}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        - 123, - 123.45F)

      ' Format the current date in various ways.
      Console.WriteLine("Standard DateTime Format Specifiers")
      Console.WriteLine("(d) Short date: . . . . . . . {0:d}" & vbCrLf & _
                        "(D) Long date:. . . . . . . . {0:D}" & vbCrLf & _
                        "(t) Short time: . . . . . . . {0:t}" & vbCrLf & _
                        "(T) Long time:. . . . . . . . {0:T}" & vbCrLf & _
                        "(f) Full date/short time: . . {0:f}" & vbCrLf & _
                        "(F) Full date/long time:. . . {0:F}" & vbCrLf & _
                        "(g) General date/short time:. {0:g}" & vbCrLf & _
                        "(G) General date/long time: . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(M) Month:. . . . . . . . . . {0:M}" & vbCrLf & _
                        "(R) RFC1123:. . . . . . . . . {0:R}" & vbCrLf & _
                        "(s) Sortable: . . . . . . . . {0:s}" & vbCrLf & _
                        "(u) Universal sortable: . . . {0:u} (invariant)" & vbCrLf & _
                        "(U) Universal full date/time: {0:U}" & vbCrLf & _
                        "(Y) Year: . . . . . . . . . . {0:Y}" & vbCrLf, _
                        thisDate)

      ' Format a Color enumeration value in various ways.
      Console.WriteLine("Standard Enumeration Format Specifiers")
      Console.WriteLine("(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)" & vbCrLf & _
                        "(D) Decimal number: . . . . . {0:D}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        Color.Green)
   End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Standard Numeric Format Specifiers
'(C) Currency: . . . . . . . . ($123.00)
'(D) Decimal:. . . . . . . . . -123
'(E) Scientific: . . . . . . . -1.234500E+002
'(F) Fixed point:. . . . . . . -123.45
'(G) General:. . . . . . . . . -123
'    (default):. . . . . . . . -123 (default = 'G')
'(N) Number: . . . . . . . . . -123.00
'(P) Percent:. . . . . . . . . -12,345.00 %
'(R) Round-trip: . . . . . . . -123.45
'(X) Hexadecimal:. . . . . . . FFFFFF85
'
'Standard DateTime Format Specifiers
'(d) Short date: . . . . . . . 6/26/2004
'(D) Long date:. . . . . . . . Saturday, June 26, 2004
'(t) Short time: . . . . . . . 8:11 PM
'(T) Long time:. . . . . . . . 8:11:04 PM
'(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
'(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
'(g) General date/short time:. 6/26/2004 8:11 PM
'(G) General date/long time: . 6/26/2004 8:11:04 PM
'    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
'(M) Month:. . . . . . . . . . June 26
'(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
'(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
'(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
'(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
'(Y) Year: . . . . . . . . . . June, 2004
'
'Standard Enumeration Format Specifiers
'(G) General:. . . . . . . . . Green
'    (default):. . . . . . . . Green (default = 'G')
'(F) Flags:. . . . . . . . . . Green (flags or integer)
'(D) Decimal number: . . . . . 3
'(X) Hexadecimal:. . . . . . . 00000003
'

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    Console.WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    Console.WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    Console.WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using namespace System;

enum class Color {Yellow = 1, Blue, Green};

int main()
{
    DateTime thisDate = DateTime::Now;
    Console::Clear();

    // Format a negative integer or floating-point number in various ways.
    Console::WriteLine("Standard Numeric Format Specifiers");
    Console::WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

    // Format the current date in various ways.
    Console::WriteLine("Standard DateTime Format Specifiers");
    Console::WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

    // Format a Color enumeration value in various ways.
    Console::WriteLine("Standard Enumeration Format Specifiers");
    Console::WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color::Green);

};

/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine

其他资源

格式化类型


Console ..::.Write 方法 (String, Object, Object, Object)

Console
.
.
::
.
Write 方法 (String, Object, Object, Object)
Console 类

使用指定的格式信息将指定对象的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub Write ( _
    format As String, _
    arg0 As Object, _
    arg1 As Object, _
    arg2 As Object _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void Write(
    string format,
    Object arg0,
    Object arg1,
    Object arg2
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    String^ format,
    Object^ arg0,
    Object^ arg1,
    Object^ arg2
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member Write :
        format:string *
        arg0:Object *
        arg1:Object *
        arg2:Object -> unit

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要使用 format 写入的第一个对象。
arg1
类型： System Object
要使用 format 写入的第二个对象。
arg2
类型： System Object
要使用 format 写入的第三个对象。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例使用 WriteLine 方法演示数字、日期和枚举的标准格式设置说明符。

' This code example demonstrates the Console.WriteLine() method.
' Formatting for this example uses the "en-US" culture.

Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Enum Color
      Yellow = 1
      Blue = 2
      Green = 3
   End Enum 'Color
   Private Shared thisDate As DateTime = DateTime.Now

   Public Shared Sub Main()
      Console.Clear()

      ' Format a negative integer or floating-point number in various ways.
      Console.WriteLine("Standard Numeric Format Specifiers")
      Console.WriteLine("(C) Currency: . . . . . . . . {0:C}" & vbCrLf & _
                        "(D) Decimal:. . . . . . . . . {0:D}" & vbCrLf & _
                        "(E) Scientific: . . . . . . . {1:E}" & vbCrLf & _
                        "(F) Fixed point:. . . . . . . {1:F}" & vbCrLf & _
                        "(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(N) Number: . . . . . . . . . {0:N}" & vbCrLf & _
                        "(P) Percent:. . . . . . . . . {1:P}" & vbCrLf & _
                        "(R) Round-trip: . . . . . . . {1:R}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        - 123, - 123.45F)

      ' Format the current date in various ways.
      Console.WriteLine("Standard DateTime Format Specifiers")
      Console.WriteLine("(d) Short date: . . . . . . . {0:d}" & vbCrLf & _
                        "(D) Long date:. . . . . . . . {0:D}" & vbCrLf & _
                        "(t) Short time: . . . . . . . {0:t}" & vbCrLf & _
                        "(T) Long time:. . . . . . . . {0:T}" & vbCrLf & _
                        "(f) Full date/short time: . . {0:f}" & vbCrLf & _
                        "(F) Full date/long time:. . . {0:F}" & vbCrLf & _
                        "(g) General date/short time:. {0:g}" & vbCrLf & _
                        "(G) General date/long time: . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(M) Month:. . . . . . . . . . {0:M}" & vbCrLf & _
                        "(R) RFC1123:. . . . . . . . . {0:R}" & vbCrLf & _
                        "(s) Sortable: . . . . . . . . {0:s}" & vbCrLf & _
                        "(u) Universal sortable: . . . {0:u} (invariant)" & vbCrLf & _
                        "(U) Universal full date/time: {0:U}" & vbCrLf & _
                        "(Y) Year: . . . . . . . . . . {0:Y}" & vbCrLf, _
                        thisDate)

      ' Format a Color enumeration value in various ways.
      Console.WriteLine("Standard Enumeration Format Specifiers")
      Console.WriteLine("(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)" & vbCrLf & _
                        "(D) Decimal number: . . . . . {0:D}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        Color.Green)
   End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Standard Numeric Format Specifiers
'(C) Currency: . . . . . . . . ($123.00)
'(D) Decimal:. . . . . . . . . -123
'(E) Scientific: . . . . . . . -1.234500E+002
'(F) Fixed point:. . . . . . . -123.45
'(G) General:. . . . . . . . . -123
'    (default):. . . . . . . . -123 (default = 'G')
'(N) Number: . . . . . . . . . -123.00
'(P) Percent:. . . . . . . . . -12,345.00 %
'(R) Round-trip: . . . . . . . -123.45
'(X) Hexadecimal:. . . . . . . FFFFFF85
'
'Standard DateTime Format Specifiers
'(d) Short date: . . . . . . . 6/26/2004
'(D) Long date:. . . . . . . . Saturday, June 26, 2004
'(t) Short time: . . . . . . . 8:11 PM
'(T) Long time:. . . . . . . . 8:11:04 PM
'(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
'(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
'(g) General date/short time:. 6/26/2004 8:11 PM
'(G) General date/long time: . 6/26/2004 8:11:04 PM
'    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
'(M) Month:. . . . . . . . . . June 26
'(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
'(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
'(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
'(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
'(Y) Year: . . . . . . . . . . June, 2004
'
'Standard Enumeration Format Specifiers
'(G) General:. . . . . . . . . Green
'    (default):. . . . . . . . Green (default = 'G')
'(F) Flags:. . . . . . . . . . Green (flags or integer)
'(D) Decimal number: . . . . . 3
'(X) Hexadecimal:. . . . . . . 00000003
'

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    Console.WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    Console.WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    Console.WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using namespace System;

enum class Color {Yellow = 1, Blue, Green};

int main()
{
    DateTime thisDate = DateTime::Now;
    Console::Clear();

    // Format a negative integer or floating-point number in various ways.
    Console::WriteLine("Standard Numeric Format Specifiers");
    Console::WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

    // Format the current date in various ways.
    Console::WriteLine("Standard DateTime Format Specifiers");
    Console::WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

    // Format a Color enumeration value in various ways.
    Console::WriteLine("Standard Enumeration Format Specifiers");
    Console::WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color::Green);

};

/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

下面的代码示例演示 Write 方法的用法。

Public Class FormatConverter
   Public Shared Sub Main()
      Dim lineInput As String
      lineInput = Console.ReadLine()
      While Not lineInput Is Nothing
         Dim fields() As String = lineInput.Split(ControlChars.Tab)
         Dim isFirstField As Boolean = True
         Dim item As String
         For Each item In  fields
            If isFirstField Then
               isFirstField = False
            Else
               Console.Write(",")
            End If
            ' If the field represents a boolean, replace with a numeric representation.
            Try
               Console.Write(Convert.ToByte(Convert.ToBoolean(item)))
            Catch
               Console.Write(item)
            End Try
         Next item
         Console.WriteLine()
         lineInput = Console.ReadLine()
      End While
   End Sub 'Main
End Class 'FormatConverter

public class FormatConverter {
    public static void Main(string[] args) {
        string lineInput;
        while ((lineInput = Console.ReadLine()) != null) {
            string[] fields = lineInput.Split(new char[] {'\t'});
            bool isFirstField = true;
            foreach(string item in fields) {
                if (isFirstField)
                    isFirstField = false;
                else
                    Console.Write(',');
                // If the field represents a boolean, replace with a numeric representation.
                try {
                    Console.Write(Convert.ToByte(Convert.ToBoolean(item)));
                }
                catch(FormatException) {
                    Console.Write(item);
                }
            }
            Console.WriteLine();
        }
    }
}

int main()
{
   array<String^>^lineInputArr = {"1   2.2   hello	TRUE","2   5.22   bye	FALSE","3   6.38   see ya'	TRUE"};
   for ( Int32 i = 0; i < 3; i++ )
   {
      String^ lineInput = lineInputArr->GetValue( i )->ToString();
      String^ aChar =  "\t";
      array<String^>^fields = lineInput->Split( aChar->ToCharArray() );
      Boolean isFirstField = true;
      for ( Int32 i = 0; i < fields->Length; i++ )
      {
         if ( isFirstField )
                  isFirstField = false;
         else
                  Console::Write( "," );

         // If the field represents a boolean, replace with a numeric representation.
         try
         {
            Console::Write( Convert::ToByte( Convert::ToBoolean( fields[ i ] ) ) );
         }
         catch ( FormatException^ )
         {
            Console::Write( fields[ i ] );
         }

      }
      Console::WriteLine();

   }
}
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine

其他资源

格式化类型


Console ..::.Write 方法 (String, Object, Object, Object, Object, ...)

Console
.
.
::
.
Write 方法 (String, Object, Object, Object, Object, ...)
Console 类

使用指定的格式信息将指定的对象和可变长度参数列表的文本表示形式写入标准输出流。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Write(String, Object )。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用可变长度参数 (varargs) 的方法。
编译器会自动将对此方法的调用解析为使用参数数据的同一方法。
C#不支持使用可变长度参数 (varargs) 的方法。
编译器会自动将对此方法的调用解析为使用参数数据的同一方法。
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void Write(
    String^ format,
    Object^ arg0,
    Object^ arg1,
    Object^ arg2,
    Object^ arg3,
    ...
)
F# 不支持使用可变长度参数 (varargs) 的方法。
编译器会自动将对此方法的调用解析为使用参数数据的同一方法。

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要使用 format 写入的第一个对象。
arg1
类型： System Object
要使用 format 写入的第二个对象。
arg2
类型： System Object
要使用 format 写入的第三个对象。
arg3
类型： System Object
要使用 format 写入的第四个对象。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

对调用者的说明

此方法标有 vararg 关键字，这意味着它支持的参数数目可变。可以从 Visual C++ 中调用该方法，但不能从 C# 或 Visual Basic 代码调用。C# 和 Visual Basic 编译器将对 Write(String, Object, Object, Object, Object) 的调用解析为对 Write(String, array<Object>[]()[]) 的调用。 此方法标有 vararg 关键字，这意味着它支持的参数数目可变。可以从 Visual C++ 中调用该方法，但不能从 C# 或 Visual Basic 代码调用。C# 和 Visual Basic 编译器将对 Write(String, Object, Object, Object, Object) 的调用解析为对 Write(String, array<Object>[]()[]) 的调用。 此方法标有 vararg 关键字，这意味着它支持的参数数目可变。可以从 Visual C++ 中调用该方法，但不能从 C# 或 Visual Basic 代码调用。C# 和 Visual Basic 编译器将对 Write(String, Object, Object, Object, Object) 的调用解析为对 Write(String, array<Object>[]()[]) 的调用。

下面的示例阐释了 Write(String, Object, Object, Object, Object) 方法用于变量参数。使用一个复合格式字符串和五个格式项调用该方法。 下面的示例阐释了 Write(String, Object, Object, Object, Object) 方法用于变量参数。使用一个复合格式字符串和五个格式项调用该方法。

  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
Write 重载
System 命名空间
Read
ReadLine
WriteLine

其他资源

格式化类型


Console ..::.WriteLine 方法

Console
.
.
::
.
WriteLine 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

将指定的数据（后跟当前行终止符）写入标准输出流。

名称 说明
页首

参考

Console 类
Console 成员
System 命名空间


Console ..::.WriteLine 方法

Console
.
.
::
.
WriteLine 方法
Console 类

将当前行终止符写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine()
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine()
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine : unit -> unit

异常 | 条件
IOException | 发生了 I/O 错误。

默认的行终止符是一个字符串，其值为一个回车符后面跟一个换行符（在 C# 中为 "\r\n"，在 Visual Basic 中为 vbCrLf）。可以通过将 Out 属性的 TextWriter..::.NewLine 属性设置为另一字符串来更改行终止符。该示例提供了说明。 默认的行终止符是一个字符串，其值为一个回车符后面跟一个换行符（在 C# 中为 "\r\n"，在 Visual Basic 中为 vbCrLf）。可以通过将 Out 属性的 TextWriter..::.NewLine 属性设置为另一字符串来更改行终止符。该示例提供了说明。 默认的行终止符是一个字符串，其值为一个回车符后面跟一个换行符（在 C# 中为 "\r\n"，在 Visual Basic 中为 vbCrLf）。可以通过将 Out 属性的 TextWriter..::.NewLine 属性设置为另一字符串来更改行终止符。该示例提供了说明。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

该示例将行结束符从其默认值 "\r\n" 或 vbCrLf 更改到 "\r\n\r\n" 或 vbCrLf + vbCrLf。然后，它调用 WriteLine()()() 和 WriteLine(String) 方法来将输出显示到控制台。 该示例将行结束符从其默认值 "\r\n" 或 vbCrLf 更改到 "\r\n\r\n" 或 vbCrLf + vbCrLf。然后，它调用 WriteLine()()() 和 WriteLine(String) 方法来将输出显示到控制台。

Module Example
   Public Sub Main()
      Dim lines() As String = { "This is the first line.", _
                                "This is the second line." }
      ' Output the lines using the default newline sequence.
      Console.WriteLine("With the default new line characters:")
      Console.WriteLine()
      For Each line As String In lines
         Console.WriteLine(line)
      Next
      Console.WriteLine()

      ' Redefine the newline characters to double space.
      Console.Out.NewLine = vbCrLf + vbCrLf
      ' Output the lines using the new newline sequence.
      Console.WriteLine("With redefined new line characters:")
      Console.WriteLine()
      For Each line As String In lines
         Console.WriteLine(line)
      Next
   End Sub
End Module
' The example displays the following output:
'       With the default new line characters:
'
'       This is the first line.
'       This is the second line.
'
'       With redefined new line characters:
'
'
'
'       This is the first line.
'
'       This is the second line.

using System;

public class Example
{
   public static void Main()
   {
      string[] lines = { "This is the first line.",
                         "This is the second line." };
      // Output the lines using the default newline sequence.
      Console.WriteLine("With the default new line characters:");
      Console.WriteLine();
      foreach (string line in lines)
         Console.WriteLine(line);

      Console.WriteLine();

      // Redefine the newline characters to double space.
      Console.Out.NewLine = "\r\n\r\n";
      // Output the lines using the new newline sequence.
      Console.WriteLine("With redefined new line characters:");
      Console.WriteLine();
      foreach (string line in lines)
         Console.WriteLine(line);
   }
}
// The example displays the following output:
//       With the default new line characters:
//
//       This is the first line.
//       This is the second line.
//
//       With redefined new line characters:
//
//
//
//       This is the first line.
//
//       This is the second line.
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write
TextWriter NewLine
Out


Console ..::.WriteLine 方法 (Boolean)

Console
.
.
::
.
WriteLine 方法 (Boolean)
Console 类

将指定布尔值的文本表示形式（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As Boolean _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    bool value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    bool value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:bool -> unit

参数

value
类型： System Boolean
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Boolean..::.ToString 方法生成。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (Char)

Console
.
.
::
.
WriteLine 方法 (Char)
Console 类

将指定的 Unicode 字符值（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As Char _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    char value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    wchar_t value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:char -> unit

参数

value
类型： System Char
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 ( array<Char >[]()[])

Console
.
.
::
.
WriteLine 方法 (
array<
Char
>
[]
()
[]
)
Console 类

将指定的 Unicode 字符数组（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    buffer As Char() _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    char[] buffer
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    array<wchar_t>^ buffer
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        buffer:char[] -> unit

参数

buffer
类型：
array<
System Char
>
[]
()
[]

Unicode 字符数组。
异常 | 条件
IOException | 发生了 I/O 错误。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (Decimal)

Console
.
.
::
.
WriteLine 方法 (Decimal)
Console 类

将指定的 Decimal 值的文本表示形式（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As Decimal _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    decimal value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    Decimal value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:decimal -> unit

参数

value
类型： System Decimal
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Decimal..::.ToString 方法生成。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (Double)

Console
.
.
::
.
WriteLine 方法 (Double)
Console 类

将指定的双精度浮点值的文本表示形式（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As Double _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    double value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    double value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:float -> unit

参数

value
类型： System Double
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Double..::.ToString 方法生成。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (Int32)

Console
.
.
::
.
WriteLine 方法 (Int32)
Console 类

将指定的 32 位有符号的整数值的文本表示（后跟当前行的结束符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As Integer _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    int value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    int value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:int -> unit

参数

value
类型： System Int32
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Int32..::.ToString 方法生成。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (Int64)

Console
.
.
::
.
WriteLine 方法 (Int64)
Console 类

将指定的 64 位有符号的整数值的文本表示（后跟当前行的结束符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As Long _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    long value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    long long value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:int64 -> unit

参数

value
类型： System Int64
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Int64..::.ToString 方法生成。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (Object)

Console
.
.
::
.
WriteLine 方法 (Object)
Console 类

将指定对象的文本表示形式（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As Object _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    Object value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    Object^ value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:Object -> unit

参数

value
类型： System Object
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只写入行终止符。否则，value 的 ToString 方法被调用以生成其字符串表示，所得的字符串被写入标准输出流。 如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只写入行终止符。否则，value 的 ToString 方法被调用以生成其字符串表示，所得的字符串被写入标准输出流。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (Single)

Console
.
.
::
.
WriteLine 方法 (Single)
Console 类

将指定的单精度浮点值的文本表示形式（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As Single _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    float value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    float value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:float32 -> unit

参数

value
类型： System Single
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 Single..::.ToString 方法生成。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (String)

Console
.
.
::
.
WriteLine 方法 (String)
Console 类

将指定的字符串值（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As String _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    string value
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    String^ value
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:string -> unit

参数

value
类型： System String
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

如果值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则只将行终止符写入标准输出流。

有关行结束符的更多信息，请参见 WriteLine()()() 方法的备注部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

该示例将行结束符从其默认值 "\r\n" 或 vbCrLf 更改到 "\r\n\r\n" 或 vbCrLf + vbCrLf。然后，它调用 WriteLine()()() 和 WriteLine(String) 方法来将输出显示到控制台。 该示例将行结束符从其默认值 "\r\n" 或 vbCrLf 更改到 "\r\n\r\n" 或 vbCrLf + vbCrLf。然后，它调用 WriteLine()()() 和 WriteLine(String) 方法来将输出显示到控制台。

Module Example
   Public Sub Main()
      Dim lines() As String = { "This is the first line.", _
                                "This is the second line." }
      ' Output the lines using the default newline sequence.
      Console.WriteLine("With the default new line characters:")
      Console.WriteLine()
      For Each line As String In lines
         Console.WriteLine(line)
      Next
      Console.WriteLine()

      ' Redefine the newline characters to double space.
      Console.Out.NewLine = vbCrLf + vbCrLf
      ' Output the lines using the new newline sequence.
      Console.WriteLine("With redefined new line characters:")
      Console.WriteLine()
      For Each line As String In lines
         Console.WriteLine(line)
      Next
   End Sub
End Module
' The example displays the following output:
'       With the default new line characters:
'
'       This is the first line.
'       This is the second line.
'
'       With redefined new line characters:
'
'
'
'       This is the first line.
'
'       This is the second line.

using System;

public class Example
{
   public static void Main()
   {
      string[] lines = { "This is the first line.",
                         "This is the second line." };
      // Output the lines using the default newline sequence.
      Console.WriteLine("With the default new line characters:");
      Console.WriteLine();
      foreach (string line in lines)
         Console.WriteLine(line);

      Console.WriteLine();

      // Redefine the newline characters to double space.
      Console.Out.NewLine = "\r\n\r\n";
      // Output the lines using the new newline sequence.
      Console.WriteLine("With redefined new line characters:");
      Console.WriteLine();
      foreach (string line in lines)
         Console.WriteLine(line);
   }
}
// The example displays the following output:
//       With the default new line characters:
//
//       This is the first line.
//       This is the second line.
//
//       With redefined new line characters:
//
//
//
//       This is the first line.
//
//       This is the second line.
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (UInt32)

Console
.
.
::
.
WriteLine 方法 (UInt32)
Console 类

将指定的 32 位无符号的整数值的文本表示（后跟当前行的结束符）写入标准输出流。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As UInteger _
)
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    uint value
)
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:uint32 -> unit

参数

value
类型： System UInt32
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 UInt32..::.ToString 方法生成。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (UInt64)

Console
.
.
::
.
WriteLine 方法 (UInt64)
Console 类

将指定的 64 位无符号的整数值的文本表示（后跟当前行的结束符）写入标准输出流。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    value As ULong _
)
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    ulong value
)
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        value:uint64 -> unit

参数

value
类型： System UInt64
要写入的值。
异常 | 条件
IOException | 发生了 I/O 错误。

value 的文本表示形式通过调用 UInt64..::.ToString 方法生成。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (String, Object)

Console
.
.
::
.
WriteLine 方法 (String, Object)
Console 类

使用指定的格式信息，将指定对象（后跟当前行终止符）的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    format As String, _
    arg0 As Object _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    string format,
    Object arg0
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    String^ format,
    Object^ arg0
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        format:string *
        arg0:Object -> unit

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要使用 format 写入的对象。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示数字、日期和枚举的标准格式设置说明符。

' This code example demonstrates the Console.WriteLine() method.
' Formatting for this example uses the "en-US" culture.

Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Enum Color
      Yellow = 1
      Blue = 2
      Green = 3
   End Enum 'Color
   Private Shared thisDate As DateTime = DateTime.Now

   Public Shared Sub Main()
      Console.Clear()

      ' Format a negative integer or floating-point number in various ways.
      Console.WriteLine("Standard Numeric Format Specifiers")
      Console.WriteLine("(C) Currency: . . . . . . . . {0:C}" & vbCrLf & _
                        "(D) Decimal:. . . . . . . . . {0:D}" & vbCrLf & _
                        "(E) Scientific: . . . . . . . {1:E}" & vbCrLf & _
                        "(F) Fixed point:. . . . . . . {1:F}" & vbCrLf & _
                        "(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(N) Number: . . . . . . . . . {0:N}" & vbCrLf & _
                        "(P) Percent:. . . . . . . . . {1:P}" & vbCrLf & _
                        "(R) Round-trip: . . . . . . . {1:R}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        - 123, - 123.45F)

      ' Format the current date in various ways.
      Console.WriteLine("Standard DateTime Format Specifiers")
      Console.WriteLine("(d) Short date: . . . . . . . {0:d}" & vbCrLf & _
                        "(D) Long date:. . . . . . . . {0:D}" & vbCrLf & _
                        "(t) Short time: . . . . . . . {0:t}" & vbCrLf & _
                        "(T) Long time:. . . . . . . . {0:T}" & vbCrLf & _
                        "(f) Full date/short time: . . {0:f}" & vbCrLf & _
                        "(F) Full date/long time:. . . {0:F}" & vbCrLf & _
                        "(g) General date/short time:. {0:g}" & vbCrLf & _
                        "(G) General date/long time: . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(M) Month:. . . . . . . . . . {0:M}" & vbCrLf & _
                        "(R) RFC1123:. . . . . . . . . {0:R}" & vbCrLf & _
                        "(s) Sortable: . . . . . . . . {0:s}" & vbCrLf & _
                        "(u) Universal sortable: . . . {0:u} (invariant)" & vbCrLf & _
                        "(U) Universal full date/time: {0:U}" & vbCrLf & _
                        "(Y) Year: . . . . . . . . . . {0:Y}" & vbCrLf, _
                        thisDate)

      ' Format a Color enumeration value in various ways.
      Console.WriteLine("Standard Enumeration Format Specifiers")
      Console.WriteLine("(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)" & vbCrLf & _
                        "(D) Decimal number: . . . . . {0:D}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        Color.Green)
   End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Standard Numeric Format Specifiers
'(C) Currency: . . . . . . . . ($123.00)
'(D) Decimal:. . . . . . . . . -123
'(E) Scientific: . . . . . . . -1.234500E+002
'(F) Fixed point:. . . . . . . -123.45
'(G) General:. . . . . . . . . -123
'    (default):. . . . . . . . -123 (default = 'G')
'(N) Number: . . . . . . . . . -123.00
'(P) Percent:. . . . . . . . . -12,345.00 %
'(R) Round-trip: . . . . . . . -123.45
'(X) Hexadecimal:. . . . . . . FFFFFF85
'
'Standard DateTime Format Specifiers
'(d) Short date: . . . . . . . 6/26/2004
'(D) Long date:. . . . . . . . Saturday, June 26, 2004
'(t) Short time: . . . . . . . 8:11 PM
'(T) Long time:. . . . . . . . 8:11:04 PM
'(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
'(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
'(g) General date/short time:. 6/26/2004 8:11 PM
'(G) General date/long time: . 6/26/2004 8:11:04 PM
'    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
'(M) Month:. . . . . . . . . . June 26
'(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
'(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
'(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
'(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
'(Y) Year: . . . . . . . . . . June, 2004
'
'Standard Enumeration Format Specifiers
'(G) General:. . . . . . . . . Green
'    (default):. . . . . . . . Green (default = 'G')
'(F) Flags:. . . . . . . . . . Green (flags or integer)
'(D) Decimal number: . . . . . 3
'(X) Hexadecimal:. . . . . . . 00000003
'

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    Console.WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    Console.WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    Console.WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using namespace System;

enum class Color {Yellow = 1, Blue, Green};

int main()
{
    DateTime thisDate = DateTime::Now;
    Console::Clear();

    // Format a negative integer or floating-point number in various ways.
    Console::WriteLine("Standard Numeric Format Specifiers");
    Console::WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

    // Format the current date in various ways.
    Console::WriteLine("Standard DateTime Format Specifiers");
    Console::WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

    // Format a Color enumeration value in various ways.
    Console::WriteLine("Standard Enumeration Format Specifiers");
    Console::WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color::Green);

};

/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write

其他资源

格式化类型


Console ..::.WriteLine 方法 (String, array<Object >[]()[])

Console
.
.
::
.
WriteLine 方法 (String,
array<
Object
>
[]
()
[]
)
Console 类

使用指定的格式信息，将指定的对象数组（后跟当前行终止符）的文本表示形式写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    format As String, _
    ParamArray arg As Object() _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    string format,
    params Object[] arg
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    String^ format,
    ... array<Object^>^ arg
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        format:string *
        arg:Object[] -> unit

参数

format
类型： System String
复合格式字符串。
arg
类型：
array<
System Object
>
[]
()
[]

要使用 format 写入的对象的数组。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 或 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示数字、日期和枚举的标准格式设置说明符。

' This code example demonstrates the Console.WriteLine() method.
' Formatting for this example uses the "en-US" culture.

Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Enum Color
      Yellow = 1
      Blue = 2
      Green = 3
   End Enum 'Color
   Private Shared thisDate As DateTime = DateTime.Now

   Public Shared Sub Main()
      Console.Clear()

      ' Format a negative integer or floating-point number in various ways.
      Console.WriteLine("Standard Numeric Format Specifiers")
      Console.WriteLine("(C) Currency: . . . . . . . . {0:C}" & vbCrLf & _
                        "(D) Decimal:. . . . . . . . . {0:D}" & vbCrLf & _
                        "(E) Scientific: . . . . . . . {1:E}" & vbCrLf & _
                        "(F) Fixed point:. . . . . . . {1:F}" & vbCrLf & _
                        "(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(N) Number: . . . . . . . . . {0:N}" & vbCrLf & _
                        "(P) Percent:. . . . . . . . . {1:P}" & vbCrLf & _
                        "(R) Round-trip: . . . . . . . {1:R}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        - 123, - 123.45F)

      ' Format the current date in various ways.
      Console.WriteLine("Standard DateTime Format Specifiers")
      Console.WriteLine("(d) Short date: . . . . . . . {0:d}" & vbCrLf & _
                        "(D) Long date:. . . . . . . . {0:D}" & vbCrLf & _
                        "(t) Short time: . . . . . . . {0:t}" & vbCrLf & _
                        "(T) Long time:. . . . . . . . {0:T}" & vbCrLf & _
                        "(f) Full date/short time: . . {0:f}" & vbCrLf & _
                        "(F) Full date/long time:. . . {0:F}" & vbCrLf & _
                        "(g) General date/short time:. {0:g}" & vbCrLf & _
                        "(G) General date/long time: . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(M) Month:. . . . . . . . . . {0:M}" & vbCrLf & _
                        "(R) RFC1123:. . . . . . . . . {0:R}" & vbCrLf & _
                        "(s) Sortable: . . . . . . . . {0:s}" & vbCrLf & _
                        "(u) Universal sortable: . . . {0:u} (invariant)" & vbCrLf & _
                        "(U) Universal full date/time: {0:U}" & vbCrLf & _
                        "(Y) Year: . . . . . . . . . . {0:Y}" & vbCrLf, _
                        thisDate)

      ' Format a Color enumeration value in various ways.
      Console.WriteLine("Standard Enumeration Format Specifiers")
      Console.WriteLine("(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)" & vbCrLf & _
                        "(D) Decimal number: . . . . . {0:D}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        Color.Green)
   End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Standard Numeric Format Specifiers
'(C) Currency: . . . . . . . . ($123.00)
'(D) Decimal:. . . . . . . . . -123
'(E) Scientific: . . . . . . . -1.234500E+002
'(F) Fixed point:. . . . . . . -123.45
'(G) General:. . . . . . . . . -123
'    (default):. . . . . . . . -123 (default = 'G')
'(N) Number: . . . . . . . . . -123.00
'(P) Percent:. . . . . . . . . -12,345.00 %
'(R) Round-trip: . . . . . . . -123.45
'(X) Hexadecimal:. . . . . . . FFFFFF85
'
'Standard DateTime Format Specifiers
'(d) Short date: . . . . . . . 6/26/2004
'(D) Long date:. . . . . . . . Saturday, June 26, 2004
'(t) Short time: . . . . . . . 8:11 PM
'(T) Long time:. . . . . . . . 8:11:04 PM
'(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
'(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
'(g) General date/short time:. 6/26/2004 8:11 PM
'(G) General date/long time: . 6/26/2004 8:11:04 PM
'    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
'(M) Month:. . . . . . . . . . June 26
'(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
'(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
'(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
'(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
'(Y) Year: . . . . . . . . . . June, 2004
'
'Standard Enumeration Format Specifiers
'(G) General:. . . . . . . . . Green
'    (default):. . . . . . . . Green (default = 'G')
'(F) Flags:. . . . . . . . . . Green (flags or integer)
'(D) Decimal number: . . . . . 3
'(X) Hexadecimal:. . . . . . . 00000003
'

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    Console.WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    Console.WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    Console.WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using namespace System;

enum class Color {Yellow = 1, Blue, Green};

int main()
{
    DateTime thisDate = DateTime::Now;
    Console::Clear();

    // Format a negative integer or floating-point number in various ways.
    Console::WriteLine("Standard Numeric Format Specifiers");
    Console::WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

    // Format the current date in various ways.
    Console::WriteLine("Standard DateTime Format Specifiers");
    Console::WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

    // Format a Color enumeration value in various ways.
    Console::WriteLine("Standard Enumeration Format Specifiers");
    Console::WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color::Green);

};

/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write

其他资源

格式化类型


Console ..::.WriteLine 方法 ( array<Char >[]()[], Int32, Int32)

Console
.
.
::
.
WriteLine 方法 (
array<
Char
>
[]
()
[]
, Int32, Int32)
Console 类

将指定的 Unicode 字符子数组（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    buffer As Char(), _
    index As Integer, _
    count As Integer _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    char[] buffer,
    int index,
    int count
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    array<wchar_t>^ buffer,
    int index,
    int count
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        buffer:char[] *
        index:int *
        count:int -> unit

参数

buffer
类型：
array<
System Char
>
[]
()
[]

Unicode 字符的数组。
index
类型： System Int32
buffer 中的起始位置。
count
类型： System Int32
要写入的字符数。
异常 | 条件
ArgumentNullException | buffer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 或 count 小于零。
ArgumentException | index 和 count 共同指定一个不在 buffer 中的位置。
IOException | 发生了 I/O 错误。

此方法将始于 buffer 的 index 位置的 count 字符串写入标准输出流。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write


Console ..::.WriteLine 方法 (String, Object, Object)

Console
.
.
::
.
WriteLine 方法 (String, Object, Object)
Console 类

使用指定的格式信息，将指定对象的文本表示形式（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    format As String, _
    arg0 As Object, _
    arg1 As Object _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    string format,
    Object arg0,
    Object arg1
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    String^ format,
    Object^ arg0,
    Object^ arg1
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        format:string *
        arg0:Object *
        arg1:Object -> unit

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要使用 format 写入的第一个对象。
arg1
类型： System Object
要使用 format 写入的第二个对象。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示数字、日期和枚举的标准格式设置说明符。

' This code example demonstrates the Console.WriteLine() method.
' Formatting for this example uses the "en-US" culture.

Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Enum Color
      Yellow = 1
      Blue = 2
      Green = 3
   End Enum 'Color
   Private Shared thisDate As DateTime = DateTime.Now

   Public Shared Sub Main()
      Console.Clear()

      ' Format a negative integer or floating-point number in various ways.
      Console.WriteLine("Standard Numeric Format Specifiers")
      Console.WriteLine("(C) Currency: . . . . . . . . {0:C}" & vbCrLf & _
                        "(D) Decimal:. . . . . . . . . {0:D}" & vbCrLf & _
                        "(E) Scientific: . . . . . . . {1:E}" & vbCrLf & _
                        "(F) Fixed point:. . . . . . . {1:F}" & vbCrLf & _
                        "(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(N) Number: . . . . . . . . . {0:N}" & vbCrLf & _
                        "(P) Percent:. . . . . . . . . {1:P}" & vbCrLf & _
                        "(R) Round-trip: . . . . . . . {1:R}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        - 123, - 123.45F)

      ' Format the current date in various ways.
      Console.WriteLine("Standard DateTime Format Specifiers")
      Console.WriteLine("(d) Short date: . . . . . . . {0:d}" & vbCrLf & _
                        "(D) Long date:. . . . . . . . {0:D}" & vbCrLf & _
                        "(t) Short time: . . . . . . . {0:t}" & vbCrLf & _
                        "(T) Long time:. . . . . . . . {0:T}" & vbCrLf & _
                        "(f) Full date/short time: . . {0:f}" & vbCrLf & _
                        "(F) Full date/long time:. . . {0:F}" & vbCrLf & _
                        "(g) General date/short time:. {0:g}" & vbCrLf & _
                        "(G) General date/long time: . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(M) Month:. . . . . . . . . . {0:M}" & vbCrLf & _
                        "(R) RFC1123:. . . . . . . . . {0:R}" & vbCrLf & _
                        "(s) Sortable: . . . . . . . . {0:s}" & vbCrLf & _
                        "(u) Universal sortable: . . . {0:u} (invariant)" & vbCrLf & _
                        "(U) Universal full date/time: {0:U}" & vbCrLf & _
                        "(Y) Year: . . . . . . . . . . {0:Y}" & vbCrLf, _
                        thisDate)

      ' Format a Color enumeration value in various ways.
      Console.WriteLine("Standard Enumeration Format Specifiers")
      Console.WriteLine("(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)" & vbCrLf & _
                        "(D) Decimal number: . . . . . {0:D}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        Color.Green)
   End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Standard Numeric Format Specifiers
'(C) Currency: . . . . . . . . ($123.00)
'(D) Decimal:. . . . . . . . . -123
'(E) Scientific: . . . . . . . -1.234500E+002
'(F) Fixed point:. . . . . . . -123.45
'(G) General:. . . . . . . . . -123
'    (default):. . . . . . . . -123 (default = 'G')
'(N) Number: . . . . . . . . . -123.00
'(P) Percent:. . . . . . . . . -12,345.00 %
'(R) Round-trip: . . . . . . . -123.45
'(X) Hexadecimal:. . . . . . . FFFFFF85
'
'Standard DateTime Format Specifiers
'(d) Short date: . . . . . . . 6/26/2004
'(D) Long date:. . . . . . . . Saturday, June 26, 2004
'(t) Short time: . . . . . . . 8:11 PM
'(T) Long time:. . . . . . . . 8:11:04 PM
'(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
'(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
'(g) General date/short time:. 6/26/2004 8:11 PM
'(G) General date/long time: . 6/26/2004 8:11:04 PM
'    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
'(M) Month:. . . . . . . . . . June 26
'(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
'(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
'(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
'(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
'(Y) Year: . . . . . . . . . . June, 2004
'
'Standard Enumeration Format Specifiers
'(G) General:. . . . . . . . . Green
'    (default):. . . . . . . . Green (default = 'G')
'(F) Flags:. . . . . . . . . . Green (flags or integer)
'(D) Decimal number: . . . . . 3
'(X) Hexadecimal:. . . . . . . 00000003
'

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    Console.WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    Console.WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    Console.WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using namespace System;

enum class Color {Yellow = 1, Blue, Green};

int main()
{
    DateTime thisDate = DateTime::Now;
    Console::Clear();

    // Format a negative integer or floating-point number in various ways.
    Console::WriteLine("Standard Numeric Format Specifiers");
    Console::WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

    // Format the current date in various ways.
    Console::WriteLine("Standard DateTime Format Specifiers");
    Console::WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

    // Format a Color enumeration value in various ways.
    Console::WriteLine("Standard Enumeration Format Specifiers");
    Console::WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color::Green);

};

/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write

其他资源

格式化类型


Console ..::.WriteLine 方法 (String, Object, Object, Object)

Console
.
.
::
.
WriteLine 方法 (String, Object, Object, Object)
Console 类

使用指定的格式信息，将指定对象的文本表示形式（后跟当前行终止符）写入标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, UI := True)> _
Public Shared Sub WriteLine ( _
    format As String, _
    arg0 As Object, _
    arg1 As Object, _
    arg2 As Object _
)
[HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)]
public static void WriteLine(
    string format,
    Object arg0,
    Object arg1,
    Object arg2
)
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    String^ format,
    Object^ arg0,
    Object^ arg1,
    Object^ arg2
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, UI = true)>]
static member WriteLine :
        format:string *
        arg0:Object *
        arg1:Object *
        arg2:Object -> unit

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要使用 format 写入的第一个对象。
arg1
类型： System Object
要使用 format 写入的第二个对象。
arg2
类型： System Object
要使用 format 写入的第三个对象。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示数字、日期和枚举的标准格式设置说明符。

' This code example demonstrates the Console.WriteLine() method.
' Formatting for this example uses the "en-US" culture.

Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Enum Color
      Yellow = 1
      Blue = 2
      Green = 3
   End Enum 'Color
   Private Shared thisDate As DateTime = DateTime.Now

   Public Shared Sub Main()
      Console.Clear()

      ' Format a negative integer or floating-point number in various ways.
      Console.WriteLine("Standard Numeric Format Specifiers")
      Console.WriteLine("(C) Currency: . . . . . . . . {0:C}" & vbCrLf & _
                        "(D) Decimal:. . . . . . . . . {0:D}" & vbCrLf & _
                        "(E) Scientific: . . . . . . . {1:E}" & vbCrLf & _
                        "(F) Fixed point:. . . . . . . {1:F}" & vbCrLf & _
                        "(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(N) Number: . . . . . . . . . {0:N}" & vbCrLf & _
                        "(P) Percent:. . . . . . . . . {1:P}" & vbCrLf & _
                        "(R) Round-trip: . . . . . . . {1:R}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        - 123, - 123.45F)

      ' Format the current date in various ways.
      Console.WriteLine("Standard DateTime Format Specifiers")
      Console.WriteLine("(d) Short date: . . . . . . . {0:d}" & vbCrLf & _
                        "(D) Long date:. . . . . . . . {0:D}" & vbCrLf & _
                        "(t) Short time: . . . . . . . {0:t}" & vbCrLf & _
                        "(T) Long time:. . . . . . . . {0:T}" & vbCrLf & _
                        "(f) Full date/short time: . . {0:f}" & vbCrLf & _
                        "(F) Full date/long time:. . . {0:F}" & vbCrLf & _
                        "(g) General date/short time:. {0:g}" & vbCrLf & _
                        "(G) General date/long time: . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(M) Month:. . . . . . . . . . {0:M}" & vbCrLf & _
                        "(R) RFC1123:. . . . . . . . . {0:R}" & vbCrLf & _
                        "(s) Sortable: . . . . . . . . {0:s}" & vbCrLf & _
                        "(u) Universal sortable: . . . {0:u} (invariant)" & vbCrLf & _
                        "(U) Universal full date/time: {0:U}" & vbCrLf & _
                        "(Y) Year: . . . . . . . . . . {0:Y}" & vbCrLf, _
                        thisDate)

      ' Format a Color enumeration value in various ways.
      Console.WriteLine("Standard Enumeration Format Specifiers")
      Console.WriteLine("(G) General:. . . . . . . . . {0:G}" & vbCrLf & _
                        "    (default):. . . . . . . . {0} (default = 'G')" & vbCrLf & _
                        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)" & vbCrLf & _
                        "(D) Decimal number: . . . . . {0:D}" & vbCrLf & _
                        "(X) Hexadecimal:. . . . . . . {0:X}" & vbCrLf, _
                        Color.Green)
   End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Standard Numeric Format Specifiers
'(C) Currency: . . . . . . . . ($123.00)
'(D) Decimal:. . . . . . . . . -123
'(E) Scientific: . . . . . . . -1.234500E+002
'(F) Fixed point:. . . . . . . -123.45
'(G) General:. . . . . . . . . -123
'    (default):. . . . . . . . -123 (default = 'G')
'(N) Number: . . . . . . . . . -123.00
'(P) Percent:. . . . . . . . . -12,345.00 %
'(R) Round-trip: . . . . . . . -123.45
'(X) Hexadecimal:. . . . . . . FFFFFF85
'
'Standard DateTime Format Specifiers
'(d) Short date: . . . . . . . 6/26/2004
'(D) Long date:. . . . . . . . Saturday, June 26, 2004
'(t) Short time: . . . . . . . 8:11 PM
'(T) Long time:. . . . . . . . 8:11:04 PM
'(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
'(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
'(g) General date/short time:. 6/26/2004 8:11 PM
'(G) General date/long time: . 6/26/2004 8:11:04 PM
'    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
'(M) Month:. . . . . . . . . . June 26
'(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
'(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
'(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
'(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
'(Y) Year: . . . . . . . . . . June, 2004
'
'Standard Enumeration Format Specifiers
'(G) General:. . . . . . . . . Green
'    (default):. . . . . . . . Green (default = 'G')
'(F) Flags:. . . . . . . . . . Green (flags or integer)
'(D) Decimal number: . . . . . 3
'(X) Hexadecimal:. . . . . . . 00000003
'

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    Console.WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    Console.WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    Console.WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

// This code example demonstrates the Console.WriteLine() method.
// Formatting for this example uses the "en-US" culture.

using namespace System;

enum class Color {Yellow = 1, Blue, Green};

int main()
{
    DateTime thisDate = DateTime::Now;
    Console::Clear();

    // Format a negative integer or floating-point number in various ways.
    Console::WriteLine("Standard Numeric Format Specifiers");
    Console::WriteLine(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);

    // Format the current date in various ways.
    Console::WriteLine("Standard DateTime Format Specifiers");
    Console::WriteLine(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);

    // Format a Color enumeration value in various ways.
    Console::WriteLine("Standard Enumeration Format Specifiers");
    Console::WriteLine(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color::Green);

};

/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
(default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
(default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
(default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

下面的代码示例演示 WriteLine 方法的用法。

' System.Console.WriteLine

Imports Microsoft.VisualBasic
Imports System

Public Class TipCalculator
   Private Const tipRate As Double = 0.18

   Public Shared Sub Main()
      System.Environment.ExitCode = Calculator(System.Environment.GetCommandLineArgs())
   End Sub

   Public Shared Function Calculator(args() As String) As Integer
      Dim billTotal As Double
      If args.Length < 2 Then
         Console.WriteLine("usage: TIPCALC total")
         Return 1
      Else
         Try
            billTotal = Double.Parse(args(1))
         Catch
            Console.WriteLine("usage: TIPCALC total")
            Return 1
         End Try
         Dim tip As Double = billTotal * tipRate
         Console.WriteLine()
         Console.WriteLine("Bill total:" & vbTab & "{0,8:c}", billTotal)
         Console.WriteLine("Tip total/rate:" & vbTab & "{0,8:c} ({1:p1})", tip, tipRate)
         Console.WriteLine("".PadRight(24, "-"c))
         Console.WriteLine("Grand total:" & vbTab & "{0,8:c}", billTotal + tip)
         Return 0
      End If
   End Function 'Main
End Class 'TipCalculator

'Example Output:
'---------------
'
'Bill total:       $52.23
'Tip total/rate:    $9.40 (18.0 %)
'------------------------
'Grand total:      $61.63

// System.Console.WriteLine

using System;
public class TipCalculator {
    private const double tipRate = 0.18;
    public static int Main(string[] args) {
        double billTotal;
        if (args.Length == 0) {
            Console.WriteLine("usage: TIPCALC total");
            return 1;
        }
        else {
            try {
                billTotal = Double.Parse(args[0]);
            }
            catch(FormatException) {
                Console.WriteLine("usage: TIPCALC total");
                return 1;
            }
            double tip = billTotal * tipRate;
            Console.WriteLine();
            Console.WriteLine("Bill total:\t{0,8:c}", billTotal);
            Console.WriteLine("Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate);
            Console.WriteLine(("").PadRight(24, '-'));
            Console.WriteLine("Grand total:\t{0,8:c}", billTotal + tip);
            return 0;
        }
    }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/

// System.Console.WriteLine
using namespace System;
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   const double tipRate = 0.18;
   double billTotal;
   if ( args->Length != 2 )
   {
      Console::WriteLine( "usage: TIPCALC total" );
      return 1;
   }
   else
   {
      try
      {
         billTotal = Double::Parse( args[ 1 ] );
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "usage: TIPCALC total" );
         return 1;
      }

      double tip = billTotal * tipRate;
      Console::WriteLine();
      Console::WriteLine( "Bill total:\t{0,8:c}", billTotal );
      Console::WriteLine( "Tip total/rate:\t{0,8:c} ({1:p1})", tip, tipRate );
      Console::WriteLine( ((String^)"")->PadRight( 24, '-' ) );
      Console::WriteLine( "Grand total:\t{0,8:c}", billTotal + tip );
      return 0;
   }
}

/*
Example Output:
---------------

Bill total:       $52.23
Tip total/rate:    $9.40 (18.0 %)
------------------------
Grand total:      $61.63
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write

其他资源

格式化类型


Console ..::.WriteLine 方法 (String, Object, Object, Object, Object, ...)

Console
.
.
::
.
WriteLine 方法 (String, Object, Object, Object, Object, ...)
Console 类

使用指定的格式信息，将指定的对象和可变长度参数列表（后跟当前行终止符）的文本表示形式写入标准输出流。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 WriteLine(String, Object )。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用可变长度参数 (varargs) 的方法。
编译器会自动将对此方法的调用解析为使用参数数据的同一方法。
C#不支持使用可变长度参数 (varargs) 的方法。
编译器会自动将对此方法的调用解析为使用参数数据的同一方法。
[CLSCompliantAttribute(false)]
[HostProtectionAttribute(SecurityAction::LinkDemand, UI = true)]
public:
static void WriteLine(
    String^ format,
    Object^ arg0,
    Object^ arg1,
    Object^ arg2,
    Object^ arg3,
    ...
)
F# 不支持使用可变长度参数 (varargs) 的方法。
编译器会自动将对此方法的调用解析为使用参数数据的同一方法。

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要使用 format 写入的第一个对象。
arg1
类型： System Object
要使用 format 写入的第二个对象。
arg2
类型： System Object
要使用 format 写入的第三个对象。
arg3
类型： System Object
要使用 format 写入的第四个对象。
异常 | 条件
IOException | 发生了 I/O 错误。
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式规范无效。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。得到的字符串被写入输出流。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的文本表示形式。

格式项的语法是 {索引[,对齐方式][:格式字符串]}，它指定了一个强制索引、格式化文本的可选长度和对齐方式，以及格式说明符字符的可选字符串，其中格式说明符字符用于控制如何设置相应对象的值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述。

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

有关行终止符的更多信息，请参见不使用任何参数的 WriteLine 方法的“备注”部分。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：UI。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

对调用者的说明

此方法标有 vararg 关键字，这意味着它支持的参数数目可变。可以从 Visual C++ 中调用该方法，但不能从 C# 或 Visual Basic 代码调用。C# 和 Visual Basic 编译器将对 WriteLine(String, Object, Object, Object, Object) 的调用解析为对 WriteLine(String, array<Object>[]()[]) 的调用。 此方法标有 vararg 关键字，这意味着它支持的参数数目可变。可以从 Visual C++ 中调用该方法，但不能从 C# 或 Visual Basic 代码调用。C# 和 Visual Basic 编译器将对 WriteLine(String, Object, Object, Object, Object) 的调用解析为对 WriteLine(String, array<Object>[]()[]) 的调用。 此方法标有 vararg 关键字，这意味着它支持的参数数目可变。可以从 Visual C++ 中调用该方法，但不能从 C# 或 Visual Basic 代码调用。C# 和 Visual Basic 编译器将对 WriteLine(String, Object, Object, Object, Object) 的调用解析为对 WriteLine(String, array<Object>[]()[]) 的调用。

下面的示例阐释了 WriteLine(String, Object, Object, Object, Object) 方法用于变量参数。使用一个复合格式字符串和五个格式项调用该方法。 下面的示例阐释了 WriteLine(String, Object, Object, Object, Object) 方法用于变量参数。使用一个复合格式字符串和五个格式项调用该方法。

using namespace System;

void main()
{
   DateTime dateRecorded(2009, 6, 15);
   DateTime startTime(1, 1, 1, 0, 30, 0);
   TimeSpan interval(12, 0, 0);

   Double temperature1 = 52.8;
   Double temperature2 = 63.5;

   Console::WriteLine("Date: {0:d}:\n   Temperature at {1:t}: {2}\n   Temperature at {3:t}: {4}\n",
                     dateRecorded, startTime, temperature1,
                     startTime.Add(interval), temperature2);
    Console::ReadLine();
}
// The example displays the following output:
//      Date: 6/15/2009:
//         Temperature at 12:30 AM: 52.8
//         Temperature at 12:30 PM: 63.5
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
WriteLine 重载
System 命名空间
Read
ReadLine
Write

其他资源

格式化类型


Console 属性

Console 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

Console 类型公开以下成员。

名称 说明
页首

参考

Console 类
System 命名空间


Console ..::.BackgroundColor 属性

Console
.
.
::
.
BackgroundColor 属性
Console 类

获取或设置控制台的背景色。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property BackgroundColor As ConsoleColor
    Get
    Set
public static ConsoleColor BackgroundColor { get; set; }
public:
static property ConsoleColor BackgroundColor {
    ConsoleColor get ();
    void set (ConsoleColor value);
}
static member BackgroundColor : ConsoleColor with get, set

属性值

类型： System ConsoleColor
一个 ConsoleColor，指定控制台的背景色；也就是显示在每个字符后面的颜色。默认为黑色。 一个 ConsoleColor，指定控制台的背景色；也就是显示在每个字符后面的颜色。默认为黑色。
异常 | 条件
ArgumentException | 在 Set 操作中指定的颜色不是 System..::.ConsoleColor 的有效成员。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

基于 Windows 的应用程序（其中不存在控制台）的 Get 操作返回 Black。

下面的示例演示与 Console..::.ForegroundColor 和 Console..::.BackgroundColor 属性以及 Console..::.ResetColor 方法结合使用的 System..::.ConsoleColor 枚举。必须在控制台上运行此示例，以查看所描述的颜色效果。 下面的示例演示与 Console..::.ForegroundColor 和 Console..::.BackgroundColor 属性以及 Console..::.ResetColor 方法结合使用的 System..::.ConsoleColor 枚举。必须在控制台上运行此示例，以查看所描述的颜色效果。

本示例中的 Black 和 White 这两个常量是显式指定的，而所有其他常量（Blue、DarkRed 等）是间接指定的。首先，使用 GetNames 方法获取常量的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。 本示例中的 Black 和 White 这两个常量是显式指定的，而所有其他常量（Blue、DarkRed 等）是间接指定的。首先，使用 GetNames 方法获取常量的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。 本示例中的 Black 和 White 这两个常量是显式指定的，而所有其他常量（Blue、DarkRed 等）是间接指定的。首先，使用 GetNames 方法获取常量的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。

Public Module Example
   Public Sub Main()
      ' Get a string array with the names of ConsoleColor enumeration members.
      Dim colorNames() As String = ConsoleColor.GetNames(GetType(ConsoleColor))

      ' Display each foreground color except black on a constant black background.
      Console.WriteLine("All the foreground colors (except Black) on a constant black background:")

      For Each colorName As String In colorNames
         ' Convert the string representing the enum name to the enum value.
         Dim color As ConsoleColor = CType(System.Enum.Parse(GetType(ConsoleColor), _
                                                colorName), ConsoleColor)

         If color = ConsoleColor.Black Then Continue For

         Console.Write("{0,11}: ", colorName)
         Console.BackgroundColor = ConsoleColor.Black
         Console.ForegroundColor = color
         Console.WriteLine("This is foreground color {0}.", colorName)
         ' Restore the original foreground and background colors.
         Console.ResetColor()
      Next
      Console.WriteLine()

      ' Display each background color except white with a constant white foreground.
      Console.WriteLine("All the background colors (except White) with a constant white background:")

      For Each colorName As String In colorNames
         ' Convert the string representing the enum name to the enum value.
         Dim color As ConsoleColor = CType([Enum].Parse(GetType(ConsoleColor), _
                                                colorName), ConsoleColor)

         If color = ConsoleColor.White then Continue For
         Console.Write("{0,11}: ", colorName)
         Console.ForegroundColor = ConsoleColor.White
         Console.BackgroundColor = color
         Console.WriteLine("This is background color {0}.", colorName)
         Console.ResetColor()
      Next
   End Sub
End Module
'The example displays the following output:
' All the foreground colors (except Black) on a constant black background:
'    DarkBlue: This is foreground color DarkBlue.
'   DarkGreen: This is foreground color DarkGreen.
'    DarkCyan: This is foreground color DarkCyan.
'     DarkRed: This is foreground color DarkRed.
' DarkMagenta: This is foreground color DarkMagenta.
'  DarkYellow: This is foreground color DarkYellow.
'        Gray: This is foreground color Gray.
'    DarkGray: This is foreground color DarkGray.
'        Blue: This is foreground color Blue.
'       Green: This is foreground color Green.
'        Cyan: This is foreground color Cyan.
'         Red: This is foreground color Red.
'     Magenta: This is foreground color Magenta.
'      Yellow: This is foreground color Yellow.
'       White: This is foreground color White.
'
' All the background colors (except White) with a constant white background:
'       Black: This is background color Black.
'    DarkBlue: This is background color DarkBlue.
'   DarkGreen: This is background color DarkGreen.
'    DarkCyan: This is background color DarkCyan.
'     DarkRed: This is background color DarkRed.
' DarkMagenta: This is background color DarkMagenta.
'  DarkYellow: This is background color DarkYellow.
'        Gray: This is background color Gray.
'    DarkGray: This is background color DarkGray.
'        Blue: This is background color Blue.
'       Green: This is background color Green.
'        Cyan: This is background color Cyan.
'         Red: This is background color Red.
'     Magenta: This is background color Magenta.
'      Yellow: This is background color Yellow.

using System;

class Example
{
   public static void Main()
   {
      // Get a string array with the names of ConsoleColor enumeration members.
      String[] colorNames = ConsoleColor.GetNames(typeof(ConsoleColor));

      // Display each foreground color except black on a constant black background.
      Console.WriteLine("All the foreground colors (except Black) on a constant black background:");

      foreach (string colorName in colorNames)
      {
         // Convert the string representing the enum name to the enum value.
         ConsoleColor color = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);

         if (color == ConsoleColor.Black) continue;

         Console.Write("{0,11}: ", colorName);
         Console.BackgroundColor = ConsoleColor.Black;
         Console.ForegroundColor = color;
         Console.WriteLine("This is foreground color {0}.", colorName);
         // Restore the original foreground and background colors.
         Console.ResetColor();
      }
      Console.WriteLine();

      // Display each background color except white with a constant white foreground.
      Console.WriteLine("All the background colors (except White) with a constant white background:");

      foreach (string colorName in colorNames)
      {
         // Convert the string representing the enum name to the enum value.
         ConsoleColor color = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);

         if (color == ConsoleColor.White) continue;

         Console.Write("{0,11}: ", colorName);
         Console.ForegroundColor = ConsoleColor.White;
         Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);
         Console.WriteLine("This is background color {0}.", colorName);
         Console.ResetColor();
      }
   }
}
//The example displays the following output:
// All the foreground colors (except Black) on a constant black background:
//    DarkBlue: This is foreground color DarkBlue.
//   DarkGreen: This is foreground color DarkGreen.
//    DarkCyan: This is foreground color DarkCyan.
//     DarkRed: This is foreground color DarkRed.
// DarkMagenta: This is foreground color DarkMagenta.
//  DarkYellow: This is foreground color DarkYellow.
//        Gray: This is foreground color Gray.
//    DarkGray: This is foreground color DarkGray.
//        Blue: This is foreground color Blue.
//       Green: This is foreground color Green.
//        Cyan: This is foreground color Cyan.
//         Red: This is foreground color Red.
//     Magenta: This is foreground color Magenta.
//      Yellow: This is foreground color Yellow.
//       White: This is foreground color White.
//
// All the background colors (except White) with a constant white background:
//       Black: This is background color Black.
//    DarkBlue: This is background color DarkBlue.
//   DarkGreen: This is background color DarkGreen.
//    DarkCyan: This is background color DarkCyan.
//     DarkRed: This is background color DarkRed.
// DarkMagenta: This is background color DarkMagenta.
//  DarkYellow: This is background color DarkYellow.
//        Gray: This is background color Gray.
//    DarkGray: This is background color DarkGray.
//        Blue: This is background color Blue.
//       Green: This is background color Green.
//        Cyan: This is background color Cyan.
//         Red: This is background color Red.
//     Magenta: This is background color Magenta.
//      Yellow: This is background color Yellow.
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.BufferHeight 属性

Console
.
.
::
.
BufferHeight 属性
Console 类

获取或设置缓冲区的高度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property BufferHeight As Integer
    Get
    Set
public static int BufferHeight { get; set; }
public:
static property int BufferHeight {
    int get ();
    void set (int value);
}
static member BufferHeight : int with get, set

属性值

类型： System Int32
缓冲区的当前高度，以行为单位。
异常 | 条件
ArgumentOutOfRangeException | Set 操作中的值小于或等于零。 - 或 - Set 操作中的值大于等于 Int16..::.MaxValue。 - 或 - Set 操作中的值小于 WindowTop + WindowHeight。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

此属性定义通过控制台模式窗口访问的缓冲区中存储的行数。相反，WindowHeight 属性定义在任何特定时间实际显示在控制台窗口中的行数。如果实际写入缓冲区的行数超过 WindowHeight 属性定义的行数，则可以垂直滚动窗口，以便显示等于 WindowHeight 属性且位于缓冲区中任何位置的连续行数。 此属性定义通过控制台模式窗口访问的缓冲区中存储的行数。相反，WindowHeight 属性定义在任何特定时间实际显示在控制台窗口中的行数。如果实际写入缓冲区的行数超过 WindowHeight 属性定义的行数，则可以垂直滚动窗口，以便显示等于 WindowHeight 属性且位于缓冲区中任何位置的连续行数。 此属性定义通过控制台模式窗口访问的缓冲区中存储的行数。相反，WindowHeight 属性定义在任何特定时间实际显示在控制台窗口中的行数。如果实际写入缓冲区的行数超过 WindowHeight 属性定义的行数，则可以垂直滚动窗口，以便显示等于 WindowHeight 属性且位于缓冲区中任何位置的连续行数。

此示例演示 BufferHeight 和 BufferWidth 属性。此示例报告缓冲区大小设置为 300 行和 85 列的操作系统窗口的尺寸。 此示例演示 BufferHeight 和 BufferWidth 属性。此示例报告缓冲区大小设置为 300 行和 85 列的操作系统窗口的尺寸。

' This example demonstrates the Console.BufferHeight and
'                               Console.BufferWidth properties.
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine("The current buffer height is {0} rows.", _
                        Console.BufferHeight)
      Console.WriteLine("The current buffer width is {0} columns.", _
                        Console.BufferWidth)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'The current buffer height is 300 rows.
'The current buffer width is 85 columns.
'

// This example demonstrates the Console.BufferHeight and
//                               Console.BufferWidth properties.
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine("The current buffer height is {0} rows.",
                      Console.BufferHeight);
    Console.WriteLine("The current buffer width is {0} columns.",
                      Console.BufferWidth);
    }
}
/*
This example produces the following results:

The current buffer height is 300 rows.
The current buffer width is 85 columns.
*/

// This example demonstrates the Console.BufferHeight and
//                               Console.BufferWidth properties.
using namespace System;
int main()
{
   Console::WriteLine( "The current buffer height is {0} rows.", Console::BufferHeight );
   Console::WriteLine( "The current buffer width is {0} columns.", Console::BufferWidth );
}

/*
This example produces the following results:

The current buffer height is 300 rows.
The current buffer width is 85 columns.
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.BufferWidth 属性

Console
.
.
::
.
BufferWidth 属性
Console 类

获取或设置缓冲区的宽度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property BufferWidth As Integer
    Get
    Set
public static int BufferWidth { get; set; }
public:
static property int BufferWidth {
    int get ();
    void set (int value);
}
static member BufferWidth : int with get, set

属性值

类型： System Int32
缓冲区的当前宽度，以列为单位。
异常 | 条件
ArgumentOutOfRangeException | Set 操作中的值小于或等于零。 - 或 - Set 操作中的值大于等于 Int16..::.MaxValue。 - 或 - Set 操作中的值小于 WindowLeft + WindowWidth。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

此示例演示 BufferHeight 和 BufferWidth 属性。此示例报告缓冲区大小设置为 300 行和 85 列的操作系统窗口的尺寸。 此示例演示 BufferHeight 和 BufferWidth 属性。此示例报告缓冲区大小设置为 300 行和 85 列的操作系统窗口的尺寸。

' This example demonstrates the Console.BufferHeight and
'                               Console.BufferWidth properties.
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine("The current buffer height is {0} rows.", _
                        Console.BufferHeight)
      Console.WriteLine("The current buffer width is {0} columns.", _
                        Console.BufferWidth)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'The current buffer height is 300 rows.
'The current buffer width is 85 columns.
'

// This example demonstrates the Console.BufferHeight and
//                               Console.BufferWidth properties.
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine("The current buffer height is {0} rows.",
                      Console.BufferHeight);
    Console.WriteLine("The current buffer width is {0} columns.",
                      Console.BufferWidth);
    }
}
/*
This example produces the following results:

The current buffer height is 300 rows.
The current buffer width is 85 columns.
*/

// This example demonstrates the Console.BufferHeight and
//                               Console.BufferWidth properties.
using namespace System;
int main()
{
   Console::WriteLine( "The current buffer height is {0} rows.", Console::BufferHeight );
   Console::WriteLine( "The current buffer width is {0} columns.", Console::BufferWidth );
}

/*
This example produces the following results:

The current buffer height is 300 rows.
The current buffer width is 85 columns.
*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.CapsLock 属性

Console
.
.
::
.
CapsLock 属性
Console 类

获取一个值，该值指示 Caps Lock 键盘切换键是打开的还是关闭的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property CapsLock As Boolean
    Get
public static bool CapsLock { get; }
public:
static property bool CapsLock {
    bool get ();
}
static member CapsLock : bool

属性值

类型： System Boolean
如果 Caps Lock 是打开的，则为 true；如果 Caps Lock 是关闭的，则为 false。

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明： Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：此平台不支持该操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.CursorLeft 属性

Console
.
.
::
.
CursorLeft 属性
Console 类

获取或设置光标在缓冲区中的列位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property CursorLeft As Integer
    Get
    Set
public static int CursorLeft { get; set; }
public:
static property int CursorLeft {
    int get ();
    void set (int value);
}
static member CursorLeft : int with get, set

属性值

类型： System Int32
光标的当前位置，以列为单位。
异常 | 条件
ArgumentOutOfRangeException | Set 操作中的值小于零。 - 或 - Set 操作中的值大于等于 BufferWidth。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。 此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。 此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。

' This example demonstrates the
'     Console.CursorLeft and
'     Console.CursorTop properties, and the
'     Console.SetCursorPosition and
'     Console.Clear methods.
Imports System

Class Sample
   Protected Shared origRow As Integer
   Protected Shared origCol As Integer

   Protected Shared Sub WriteAt(s As String, x As Integer, y As Integer)
      Try
         Console.SetCursorPosition(origCol + x, origRow + y)
         Console.Write(s)
      Catch e As ArgumentOutOfRangeException
         Console.Clear()
         Console.WriteLine(e.Message)
      End Try
   End Sub 'WriteAt

   Public Shared Sub Main()
      ' Clear the screen, then save the top and left coordinates.
      Console.Clear()
      origRow = Console.CursorTop
      origCol = Console.CursorLeft

      ' Draw the left side of a 5x5 rectangle, from top to bottom.
      WriteAt("+", 0, 0)
      WriteAt("|", 0, 1)
      WriteAt("|", 0, 2)
      WriteAt("|", 0, 3)
      WriteAt("+", 0, 4)

      ' Draw the bottom side, from left to right.
      WriteAt("-", 1, 4) ' shortcut: WriteAt("---", 1, 4)
      WriteAt("-", 2, 4) ' ...
      WriteAt("-", 3, 4) ' ...
      WriteAt("+", 4, 4)

      ' Draw the right side, from bottom to top.
      WriteAt("|", 4, 3)
      WriteAt("|", 4, 2)
      WriteAt("|", 4, 1)
      WriteAt("+", 4, 0)

      ' Draw the top side, from right to left.
      WriteAt("-", 3, 0) ' shortcut: WriteAt("---", 1, 0)
      WriteAt("-", 2, 0) ' ...
      WriteAt("-", 1, 0) ' ...
      '
      WriteAt("All done!", 0, 6)
      Console.WriteLine()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'+---+
'|   |
'|   |
'|   |
'+---+
'
'All done!
'

// This example demonstrates the
//     Console.CursorLeft and
//     Console.CursorTop properties, and the
//     Console.SetCursorPosition and
//     Console.Clear methods.
using System;

class Sample
{
    protected static int origRow;
    protected static int origCol;

    protected static void WriteAt(string s, int x, int y)
    {
    try
        {
        Console.SetCursorPosition(origCol+x, origRow+y);
        Console.Write(s);
        }
    catch (ArgumentOutOfRangeException e)
        {
        Console.Clear();
        Console.WriteLine(e.Message);
        }
    }

    public static void Main()
    {
// Clear the screen, then save the top and left coordinates.
    Console.Clear();
    origRow = Console.CursorTop;
    origCol = Console.CursorLeft;

// Draw the left side of a 5x5 rectangle, from top to bottom.
    WriteAt("+", 0, 0);
    WriteAt("|", 0, 1);
    WriteAt("|", 0, 2);
    WriteAt("|", 0, 3);
    WriteAt("+", 0, 4);

// Draw the bottom side, from left to right.
    WriteAt("-", 1, 4); // shortcut: WriteAt("---", 1, 4)
    WriteAt("-", 2, 4); // ...
    WriteAt("-", 3, 4); // ...
    WriteAt("+", 4, 4);

// Draw the right side, from bottom to top.
    WriteAt("|", 4, 3);
    WriteAt("|", 4, 2);
    WriteAt("|", 4, 1);
    WriteAt("+", 4, 0);

// Draw the top side, from right to left.
    WriteAt("-", 3, 0); // shortcut: WriteAt("---", 1, 0)
    WriteAt("-", 2, 0); // ...
    WriteAt("-", 1, 0); // ...
//
    WriteAt("All done!", 0, 6);
    Console.WriteLine();
    }
}
/*
This example produces the following results:

+---+
|   |
|   |
|   |
+---+

All done!

*/

// This example demonstrates the
//     Console.CursorLeft and
//     Console.CursorTop properties, and the
//     Console.SetCursorPosition and
//     Console.Clear methods.
using namespace System;
int origRow;
int origCol;
void WriteAt( String^ s, int x, int y )
{
   try
   {
      Console::SetCursorPosition( origCol + x, origRow + y );
      Console::Write( s );
   }
   catch ( ArgumentOutOfRangeException^ e )
   {
      Console::Clear();
      Console::WriteLine( e->Message );
   }

}

int main()
{

   // Clear the screen, then save the top and left coordinates.
   Console::Clear();
   origRow = Console::CursorTop;
   origCol = Console::CursorLeft;

   // Draw the left side of a 5x5 rectangle, from top to bottom.
   WriteAt( "+", 0, 0 );
   WriteAt( "|", 0, 1 );
   WriteAt( "|", 0, 2 );
   WriteAt( "|", 0, 3 );
   WriteAt( "+", 0, 4 );

   // Draw the bottom side, from left to right.
   WriteAt( "-", 1, 4 ); // shortcut: WriteAt("---", 1, 4)
   WriteAt( "-", 2, 4 ); // ...
   WriteAt( "-", 3, 4 ); // ...
   WriteAt( "+", 4, 4 );

   // Draw the right side, from bottom to top.
   WriteAt( "|", 4, 3 );
   WriteAt( "|", 4, 2 );
   WriteAt( "|", 4, 1 );
   WriteAt( "+", 4, 0 );

   // Draw the top side, from right to left.
   WriteAt( "-", 3, 0 ); // shortcut: WriteAt("---", 1, 0)
   WriteAt( "-", 2, 0 ); // ...
   WriteAt( "-", 1, 0 ); // ...

   //
   WriteAt( "All done!", 0, 6 );
   Console::WriteLine();
}

/*
This example produces the following results:

+---+
|   |
|   |
|   |
+---+

All done!

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.CursorSize 属性

Console
.
.
::
.
CursorSize 属性
Console 类

获取或设置光标在字符单元格中的高度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property CursorSize As Integer
    Get
    Set
public static int CursorSize { get; set; }
public:
static property int CursorSize {
    int get ();
    void set (int value);
}
static member CursorSize : int with get, set

属性值

类型： System Int32
光标的大小，以字符单元格高度的百分比表示。属性值的范围为 1 到 100。 光标的大小，以字符单元格高度的百分比表示。属性值的范围为 1 到 100。
异常 | 条件
ArgumentOutOfRangeException | 在 Set 操作中指定的值小于 1 或大于 100。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

光标的外观是可变的，当属性值为 1 时为单元格底部的一条水平线，当属性值为 100 时则会填充整个单元格。

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明： Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：在 Set 操作中，操作系统会生成指定值的近似值。Set 操作的效果会一直保持，直到执行该操作的应用程序终止。应用程序终止后，光标大小会恢复为其原始值。 Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：在 Set 操作中，操作系统会生成指定值的近似值。Set 操作的效果会一直保持，直到执行该操作的应用程序终止。应用程序终止后，光标大小会恢复为其原始值。 Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：在 Set 操作中，操作系统会生成指定值的近似值。Set 操作的效果会一直保持，直到执行该操作的应用程序终止。应用程序终止后，光标大小会恢复为其原始值。

此示例演示 CursorSize 属性。此示例在每次按下任意控制台键时增加光标的大小，然后在终止前将光标还原为其原始大小。 此示例演示 CursorSize 属性。此示例在每次按下任意控制台键时增加光标的大小，然后在终止前将光标还原为其原始大小。

' This example demonstrates the Console.CursorSize property.
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim m0 As String = "This example increments the cursor size from " & _
                         "1% to 100%:" & vbCrLf
      Dim m1 As String = "Cursor size = {0}%. (Press any key to continue...)"
      Dim sizes As Integer() =  {1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}
      Dim saveCursorSize As Integer
      '
      saveCursorSize = Console.CursorSize
      Console.WriteLine(m0)
      Dim size As Integer
      For Each size In  sizes
         Console.CursorSize = size
         Console.WriteLine(m1, size)
         Console.ReadKey()
      Next size
      Console.CursorSize = saveCursorSize
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'This example increments the cursor size from 1% to 100%:
'
'Cursor size = 1%. (Press any key to continue...)
'Cursor size = 10%. (Press any key to continue...)
'Cursor size = 20%. (Press any key to continue...)
'Cursor size = 30%. (Press any key to continue...)
'Cursor size = 40%. (Press any key to continue...)
'Cursor size = 50%. (Press any key to continue...)
'Cursor size = 60%. (Press any key to continue...)
'Cursor size = 70%. (Press any key to continue...)
'Cursor size = 80%. (Press any key to continue...)
'Cursor size = 90%. (Press any key to continue...)
'Cursor size = 100%. (Press any key to continue...)
'

// This example demonstrates the Console.CursorSize property.
using System;

class Sample
{
    public static void Main()
    {
    string m0 = "This example increments the cursor size from 1% to 100%:\n";
    string m1 = "Cursor size = {0}%. (Press any key to continue...)";
    int[] sizes = {1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
    int saveCursorSize;
//
    saveCursorSize = Console.CursorSize;
    Console.WriteLine(m0);
    foreach (int size in sizes)
        {
        Console.CursorSize = size;
        Console.WriteLine(m1, size);
        Console.ReadKey();
        }
    Console.CursorSize = saveCursorSize;
    }
}
/*
This example produces the following results:

This example increments the cursor size from 1% to 100%:

Cursor size = 1%. (Press any key to continue...)
Cursor size = 10%. (Press any key to continue...)
Cursor size = 20%. (Press any key to continue...)
Cursor size = 30%. (Press any key to continue...)
Cursor size = 40%. (Press any key to continue...)
Cursor size = 50%. (Press any key to continue...)
Cursor size = 60%. (Press any key to continue...)
Cursor size = 70%. (Press any key to continue...)
Cursor size = 80%. (Press any key to continue...)
Cursor size = 90%. (Press any key to continue...)
Cursor size = 100%. (Press any key to continue...)

*/

// This example demonstrates the Console.CursorSize property.
using namespace System;
int main()
{
   String^ m0 = "This example increments the cursor size from 1% to 100%:\n";
   String^ m1 = "Cursor size = {0}%. (Press any key to continue...)";
   array<Int32>^sizes = {1,10,20,30,40,50,60,70,80,90,100};
   int saveCursorSize;

   //
   saveCursorSize = Console::CursorSize;
   Console::WriteLine( m0 );
   System::Collections::IEnumerator^ myEnum = sizes->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      int size =  *safe_cast<Int32^>(myEnum->Current);
      Console::CursorSize = size;
      Console::WriteLine( m1, size );
      Console::ReadKey();
   }

   Console::CursorSize = saveCursorSize;
}

/*
This example produces the following results:

This example increments the cursor size from 1% to 100%:

Cursor size = 1%. (Press any key to continue...)
Cursor size = 10%. (Press any key to continue...)
Cursor size = 20%. (Press any key to continue...)
Cursor size = 30%. (Press any key to continue...)
Cursor size = 40%. (Press any key to continue...)
Cursor size = 50%. (Press any key to continue...)
Cursor size = 60%. (Press any key to continue...)
Cursor size = 70%. (Press any key to continue...)
Cursor size = 80%. (Press any key to continue...)
Cursor size = 90%. (Press any key to continue...)
Cursor size = 100%. (Press any key to continue...)

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.CursorTop 属性

Console
.
.
::
.
CursorTop 属性
Console 类

获取或设置光标在缓冲区中的行位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property CursorTop As Integer
    Get
    Set
public static int CursorTop { get; set; }
public:
static property int CursorTop {
    int get ();
    void set (int value);
}
static member CursorTop : int with get, set

属性值

类型： System Int32
光标的当前位置，以行为单位。
异常 | 条件
ArgumentOutOfRangeException | Set 操作中的值小于零。 - 或 - Set 操作中的值大于等于 BufferHeight。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。 此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。 此示例演示 CursorLeft 和 CursorTop 属性以及 SetCursorPosition 和 Clear 方法。该示例定位用来确定下一个写入位置的光标，以使用“+”、“|”和“-”字符串的组合绘制一个长宽均为 5 个字符的矩形。注意，如果使用其他字符串的组合绘制该矩形，则绘制步骤可以更少。

' This example demonstrates the
'     Console.CursorLeft and
'     Console.CursorTop properties, and the
'     Console.SetCursorPosition and
'     Console.Clear methods.
Imports System

Class Sample
   Protected Shared origRow As Integer
   Protected Shared origCol As Integer

   Protected Shared Sub WriteAt(s As String, x As Integer, y As Integer)
      Try
         Console.SetCursorPosition(origCol + x, origRow + y)
         Console.Write(s)
      Catch e As ArgumentOutOfRangeException
         Console.Clear()
         Console.WriteLine(e.Message)
      End Try
   End Sub 'WriteAt

   Public Shared Sub Main()
      ' Clear the screen, then save the top and left coordinates.
      Console.Clear()
      origRow = Console.CursorTop
      origCol = Console.CursorLeft

      ' Draw the left side of a 5x5 rectangle, from top to bottom.
      WriteAt("+", 0, 0)
      WriteAt("|", 0, 1)
      WriteAt("|", 0, 2)
      WriteAt("|", 0, 3)
      WriteAt("+", 0, 4)

      ' Draw the bottom side, from left to right.
      WriteAt("-", 1, 4) ' shortcut: WriteAt("---", 1, 4)
      WriteAt("-", 2, 4) ' ...
      WriteAt("-", 3, 4) ' ...
      WriteAt("+", 4, 4)

      ' Draw the right side, from bottom to top.
      WriteAt("|", 4, 3)
      WriteAt("|", 4, 2)
      WriteAt("|", 4, 1)
      WriteAt("+", 4, 0)

      ' Draw the top side, from right to left.
      WriteAt("-", 3, 0) ' shortcut: WriteAt("---", 1, 0)
      WriteAt("-", 2, 0) ' ...
      WriteAt("-", 1, 0) ' ...
      '
      WriteAt("All done!", 0, 6)
      Console.WriteLine()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'+---+
'|   |
'|   |
'|   |
'+---+
'
'All done!
'

// This example demonstrates the
//     Console.CursorLeft and
//     Console.CursorTop properties, and the
//     Console.SetCursorPosition and
//     Console.Clear methods.
using System;

class Sample
{
    protected static int origRow;
    protected static int origCol;

    protected static void WriteAt(string s, int x, int y)
    {
    try
        {
        Console.SetCursorPosition(origCol+x, origRow+y);
        Console.Write(s);
        }
    catch (ArgumentOutOfRangeException e)
        {
        Console.Clear();
        Console.WriteLine(e.Message);
        }
    }

    public static void Main()
    {
// Clear the screen, then save the top and left coordinates.
    Console.Clear();
    origRow = Console.CursorTop;
    origCol = Console.CursorLeft;

// Draw the left side of a 5x5 rectangle, from top to bottom.
    WriteAt("+", 0, 0);
    WriteAt("|", 0, 1);
    WriteAt("|", 0, 2);
    WriteAt("|", 0, 3);
    WriteAt("+", 0, 4);

// Draw the bottom side, from left to right.
    WriteAt("-", 1, 4); // shortcut: WriteAt("---", 1, 4)
    WriteAt("-", 2, 4); // ...
    WriteAt("-", 3, 4); // ...
    WriteAt("+", 4, 4);

// Draw the right side, from bottom to top.
    WriteAt("|", 4, 3);
    WriteAt("|", 4, 2);
    WriteAt("|", 4, 1);
    WriteAt("+", 4, 0);

// Draw the top side, from right to left.
    WriteAt("-", 3, 0); // shortcut: WriteAt("---", 1, 0)
    WriteAt("-", 2, 0); // ...
    WriteAt("-", 1, 0); // ...
//
    WriteAt("All done!", 0, 6);
    Console.WriteLine();
    }
}
/*
This example produces the following results:

+---+
|   |
|   |
|   |
+---+

All done!

*/

// This example demonstrates the
//     Console.CursorLeft and
//     Console.CursorTop properties, and the
//     Console.SetCursorPosition and
//     Console.Clear methods.
using namespace System;
int origRow;
int origCol;
void WriteAt( String^ s, int x, int y )
{
   try
   {
      Console::SetCursorPosition( origCol + x, origRow + y );
      Console::Write( s );
   }
   catch ( ArgumentOutOfRangeException^ e )
   {
      Console::Clear();
      Console::WriteLine( e->Message );
   }

}

int main()
{

   // Clear the screen, then save the top and left coordinates.
   Console::Clear();
   origRow = Console::CursorTop;
   origCol = Console::CursorLeft;

   // Draw the left side of a 5x5 rectangle, from top to bottom.
   WriteAt( "+", 0, 0 );
   WriteAt( "|", 0, 1 );
   WriteAt( "|", 0, 2 );
   WriteAt( "|", 0, 3 );
   WriteAt( "+", 0, 4 );

   // Draw the bottom side, from left to right.
   WriteAt( "-", 1, 4 ); // shortcut: WriteAt("---", 1, 4)
   WriteAt( "-", 2, 4 ); // ...
   WriteAt( "-", 3, 4 ); // ...
   WriteAt( "+", 4, 4 );

   // Draw the right side, from bottom to top.
   WriteAt( "|", 4, 3 );
   WriteAt( "|", 4, 2 );
   WriteAt( "|", 4, 1 );
   WriteAt( "+", 4, 0 );

   // Draw the top side, from right to left.
   WriteAt( "-", 3, 0 ); // shortcut: WriteAt("---", 1, 0)
   WriteAt( "-", 2, 0 ); // ...
   WriteAt( "-", 1, 0 ); // ...

   //
   WriteAt( "All done!", 0, 6 );
   Console::WriteLine();
}

/*
This example produces the following results:

+---+
|   |
|   |
|   |
+---+

All done!

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.CursorVisible 属性

Console
.
.
::
.
CursorVisible 属性
Console 类

获取或设置一个值，用以指示光标是否可见。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property CursorVisible As Boolean
    Get
    Set
public static bool CursorVisible { get; set; }
public:
static property bool CursorVisible {
    bool get ();
    void set (bool value);
}
static member CursorVisible : bool with get, set

属性值

类型： System Boolean
如果光标可见，则为 true；否则为 false。
异常 | 条件
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明： Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：Set 操作的效果会一直保持，直到执行该操作的应用程序终止。应用程序终止后，光标的可见性会恢复为其原始值。 Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：Set 操作的效果会一直保持，直到执行该操作的应用程序终止。应用程序终止后，光标的可见性会恢复为其原始值。

此示例演示 CursorVisible 属性。此示例在输入的第一列为“+”字符时使光标可见，在输入的第一列是“-”字符时使光标不可见。 此示例演示 CursorVisible 属性。此示例在输入的第一列为“+”字符时使光标可见，在输入的第一列是“-”字符时使光标不可见。

' This example demonstrates the Console.CursorVisible property.
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim m1 As String = vbCrLf & "The cursor is {0}." & _
                         vbCrLf & "Type any text then press Enter. " & _
                         "Type '+' in the first column to show " & _
                         vbCrLf & "the cursor, '-' to hide the cursor, " & _
                         "or lowercase 'x' to quit:"
      Dim s As String
      Dim saveCursorVisibile As Boolean
      Dim saveCursorSize As Integer
      '
      Console.CursorVisible = True ' Initialize the cursor to visible.
      saveCursorVisibile = Console.CursorVisible
      saveCursorSize = Console.CursorSize
      Console.CursorSize = 100 ' Emphasize the cursor.
      While True
         Console.WriteLine(m1, _
            IIf(Console.CursorVisible = True, "VISIBLE", "HIDDEN"))
         s = Console.ReadLine()
         If String.IsNullOrEmpty(s) = False Then
            If s(0) = "+"c Then
               Console.CursorVisible = True
            ElseIf s(0) = "-"c Then
               Console.CursorVisible = False
            ElseIf s(0) = "x"c Then
               Exit While
            End If
         End If
      End While
      Console.CursorVisible = saveCursorVisibile
      Console.CursorSize = saveCursorSize
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results. Note that these results
'cannot depict cursor visibility. You must run the example to see the
'cursor behavior:
'
'The cursor is VISIBLE.
'Type any text then press Enter. Type '+' in the first column to show
'the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
'The quick brown fox
'
'The cursor is VISIBLE.
'Type any text then press Enter. Type '+' in the first column to show
'the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
'-
'
'The cursor is HIDDEN.
'Type any text then press Enter. Type '+' in the first column to show
'the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
'jumps over
'
'The cursor is HIDDEN.
'Type any text then press Enter. Type '+' in the first column to show
'the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
'+
'
'The cursor is VISIBLE.
'Type any text then press Enter. Type '+' in the first column to show
'the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
'the lazy dog.
'
'The cursor is VISIBLE.
'Type any text then press Enter. Type '+' in the first column to show
'the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
'x
'

// This example demonstrates the Console.CursorVisible property.

using System;

class Sample
{
    public static void Main()
    {
    string m1 = "\nThe cursor is {0}.\nType any text then press Enter. " +
                "Type '+' in the first column to show \n" +
                "the cursor, '-' to hide the cursor, " +
                "or lowercase 'x' to quit:";
    string s;
    bool saveCursorVisibile;
    int  saveCursorSize;
//
    Console.CursorVisible = true; // Initialize the cursor to visible.
    saveCursorVisibile = Console.CursorVisible;
    saveCursorSize  = Console.CursorSize;
    Console.CursorSize = 100;     // Emphasize the cursor.

    while(true)
        {
        Console.WriteLine(m1,
                         ((Console.CursorVisible == true) ?
                           "VISIBLE" : "HIDDEN"));
        s = Console.ReadLine();
        if (String.IsNullOrEmpty(s) == false)
            if (s[0] == '+')
                Console.CursorVisible = true;
            else if (s[0] == '-')
                Console.CursorVisible = false;
            else if (s[0] == 'x')
                break;
        }
    Console.CursorVisible = saveCursorVisibile;
    Console.CursorSize    = saveCursorSize;
    }

}
/*
This example produces the following results. Note that these results
cannot depict cursor visibility. You must run the example to see the
cursor behavior:

The cursor is VISIBLE.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
The quick brown fox

The cursor is VISIBLE.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
-

The cursor is HIDDEN.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
jumps over

The cursor is HIDDEN.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
+

The cursor is VISIBLE.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
the lazy dog.

The cursor is VISIBLE.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
x

*/

// This example demonstrates the Console.CursorVisible property.
using namespace System;

int main()
{
   String^ m1 = "\nThe cursor is {0}.\nType any text then press Enter. "
   "Type '+' in the first column to show \n"
   "the cursor, '-' to hide the cursor, "
   "or lowercase 'x' to quit:";
   String^ s;
   bool saveCursorVisibile;
   int saveCursorSize;

   //
   Console::CursorVisible = true; // Initialize the cursor to visible.
   saveCursorVisibile = Console::CursorVisible;
   saveCursorSize = Console::CursorSize;
   Console::CursorSize = 100; // Emphasize the cursor.
   for ( ; ;  )
   {
      Console::WriteLine( m1, ((Console::CursorVisible == true) ? (String^)"VISIBLE" : "HIDDEN") );
      s = Console::ReadLine();
      if ( String::IsNullOrEmpty( s ) == false )
            if ( s[ 0 ] == '+' )
            Console::CursorVisible = true;
      else
      if ( s[ 0 ] == '-' )
            Console::CursorVisible = false;
      else
      if ( s[ 0 ] == 'x' )
            break;

   }
   Console::CursorVisible = saveCursorVisibile;
   Console::CursorSize = saveCursorSize;
}

/*
This example produces the following results. Note that these results
cannot depict cursor visibility. You must run the example to see the
cursor behavior:

The cursor is VISIBLE.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
The quick brown fox

The cursor is VISIBLE.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
-

The cursor is HIDDEN.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
jumps over

The cursor is HIDDEN.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
+

The cursor is VISIBLE.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
the lazy dog.

The cursor is VISIBLE.
Type any text then press Enter. Type '+' in the first column to show
the cursor, '-' to hide the cursor, or lowercase 'x' to quit:
x

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.Error 属性

Console
.
.
::
.
Error 属性
Console 类

获取标准错误输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Error As TextWriter
    Get
public static TextWriter Error { get; }
public:
static property TextWriter^ Error {
    TextWriter^ get ();
}
static member Error : TextWriter

属性值

类型： System.IO TextWriter
表示标准错误输出流的 TextWriter。

默认情况下，此属性设置为标准错误流。此属性可通过 SetError 方法设置为另一个流。 默认情况下，此属性设置为标准错误流。此属性可通过 SetError 方法设置为另一个流。

下面的代码示例演示 Error 属性的用法。

Imports System.IO

Public Class ExpandTabs
   Private Const tabSize As Integer = 4
   Private Const usageText As String = "Usage: EXPANDTABSEX inputfile.txt outputfile.txt"

   Public Shared Function Main(args() As String) As Integer
      Dim writer As StreamWriter = Nothing
      Dim standardOutput As TextWriter = Console.Out

      If args.Length < 2 Then
         Console.WriteLine(usageText)
         Return 1
      End If

      Try
         writer = New StreamWriter(args(1))
         Console.SetOut(writer)
         Console.SetIn(New StreamReader(args(0)))
      Catch e As IOException
         Dim errorWriter As TextWriter = Console.Error
         errorWriter.WriteLine(e.Message)
         errorWriter.WriteLine(usageText)
         Return 1
      End Try
      Dim i As Integer
      i = Console.Read()
      While i <> -1
         Dim c As Char = Convert.ToChar(i)
         If c = ControlChars.Tab Then
            Console.Write("".PadRight(tabSize, " "c))
         Else
            Console.Write(c)
         End If
         i = Console.Read()
      End While
      writer.Close()
      ' Recover the standard output stream so that a
      ' completion message can be displayed.
      Console.SetOut(standardOutput)
      Console.WriteLine("EXPANDTABSEX has completed the processing of {0}.", args(0))
      Return 0
   End Function 'Main
End Class 'ExpandTabs

public class ExpandTabs {
    private const int tabSize = 4;
    private const string usageText = "Usage: EXPANDTABSEX inputfile.txt outputfile.txt";
    public static int Main(string[] args) {
        StreamWriter writer = null;
        TextWriter standardOutput = Console.Out;

        if (args.Length < 2) {
            Console.WriteLine(usageText);
            return 1;
        }

        try {
            writer = new StreamWriter(args[1]);
            Console.SetOut(writer);
            Console.SetIn(new StreamReader(args[0]));
        }
        catch(IOException e) {
            TextWriter errorWriter = Console.Error;
            errorWriter.WriteLine(e.Message);
            errorWriter.WriteLine(usageText);
            return 1;
        }
        int i;
        while ((i = Console.Read()) != -1) {
            char c = (char)i;
            if (c == '\t')
                Console.Write(("").PadRight(tabSize, ' '));
            else
                Console.Write(c);
        }
        writer.Close();
        // Recover the standard output stream so that a
        // completion message can be displayed.
        Console.SetOut(standardOutput);
        Console.WriteLine("EXPANDTABSEX has completed the processing of {0}.", args[0]);
        return 0;
    }
}

int main()
{
   const int tabSize = 4;
   array<String^>^args = Environment::GetCommandLineArgs();
   String^ usageText = "Usage: EXPANDTABSEX inputfile.txt outputfile.txt";
   StreamWriter^ writer = nullptr;
   TextWriter^ standardOutput = Console::Out;
   if ( args->Length < 3 )
   {
      Console::WriteLine( usageText );
      return 1;
   }

   try
   {
      writer = gcnew StreamWriter( args[ 2 ] );
      Console::SetOut( writer );
      Console::SetIn( gcnew StreamReader( args[ 1 ] ) );
   }
   catch ( IOException^ e )
   {
      TextWriter^ errorWriter = Console::Error;
      errorWriter->WriteLine( e->Message );
      errorWriter->WriteLine( usageText );
      return 1;
   }

   int i;
   while ( (i = Console::Read()) != -1 )
   {
      Char c = (Char)i;
      if ( c == '\t' )
            Console::Write( ((String^)"")->PadRight( tabSize, ' ' ) );
      else
            Console::Write( c );
   }

   writer->Close();

   // Recover the standard output stream so that a
   // completion message can be displayed.
   Console::SetOut( standardOutput );
   Console::WriteLine( "EXPANDTABSEX has completed the processing of {0}.", args[ 0 ] );
   return 0;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
System 命名空间
In
Out
SetError


Console ..::.ForegroundColor 属性

Console
.
.
::
.
ForegroundColor 属性
Console 类

获取或设置控制台的前景色。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property ForegroundColor As ConsoleColor
    Get
    Set
public static ConsoleColor ForegroundColor { get; set; }
public:
static property ConsoleColor ForegroundColor {
    ConsoleColor get ();
    void set (ConsoleColor value);
}
static member ForegroundColor : ConsoleColor with get, set

属性值

类型： System ConsoleColor
一个 ConsoleColor，指定控制台的前景色；也就是显示的每个字符的颜色。默认为灰色。 一个 ConsoleColor，指定控制台的前景色；也就是显示的每个字符的颜色。默认为灰色。
异常 | 条件
ArgumentException | 在 Set 操作中指定的颜色不是 System..::.ConsoleColor 的有效成员。
SecurityException | 该用户没有执行此操作的权限。
IOException | 发生了 I/O 错误。

基于 Windows 的应用程序（其中不存在控制台）的 Get 操作返回 Gray。

下面的示例演示与 Console..::.ForegroundColor 和 Console..::.BackgroundColor 属性以及 Console..::.ResetColor 方法结合使用的 System..::.ConsoleColor 枚举。必须在控制台上运行此示例，以查看所描述的颜色效果。 下面的示例演示与 Console..::.ForegroundColor 和 Console..::.BackgroundColor 属性以及 Console..::.ResetColor 方法结合使用的 System..::.ConsoleColor 枚举。必须在控制台上运行此示例，以查看所描述的颜色效果。

本示例中的 Black 和 White 这两个常量是显式指定的，而所有其他常量（Blue、DarkRed 等）是间接指定的。首先，使用 GetNames 方法获取常量的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。 本示例中的 Black 和 White 这两个常量是显式指定的，而所有其他常量（Blue、DarkRed 等）是间接指定的。首先，使用 GetNames 方法获取常量的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。 本示例中的 Black 和 White 这两个常量是显式指定的，而所有其他常量（Blue、DarkRed 等）是间接指定的。首先，使用 GetNames 方法获取常量的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。

Public Module Example
   Public Sub Main()
      ' Get a string array with the names of ConsoleColor enumeration members.
      Dim colorNames() As String = ConsoleColor.GetNames(GetType(ConsoleColor))

      ' Display each foreground color except black on a constant black background.
      Console.WriteLine("All the foreground colors (except Black) on a constant black background:")

      For Each colorName As String In colorNames
         ' Convert the string representing the enum name to the enum value.
         Dim color As ConsoleColor = CType(System.Enum.Parse(GetType(ConsoleColor), _
                                                colorName), ConsoleColor)

         If color = ConsoleColor.Black Then Continue For

         Console.Write("{0,11}: ", colorName)
         Console.BackgroundColor = ConsoleColor.Black
         Console.ForegroundColor = color
         Console.WriteLine("This is foreground color {0}.", colorName)
         ' Restore the original foreground and background colors.
         Console.ResetColor()
      Next
      Console.WriteLine()

      ' Display each background color except white with a constant white foreground.
      Console.WriteLine("All the background colors (except White) with a constant white background:")

      For Each colorName As String In colorNames
         ' Convert the string representing the enum name to the enum value.
         Dim color As ConsoleColor = CType([Enum].Parse(GetType(ConsoleColor), _
                                                colorName), ConsoleColor)

         If color = ConsoleColor.White then Continue For
         Console.Write("{0,11}: ", colorName)
         Console.ForegroundColor = ConsoleColor.White
         Console.BackgroundColor = color
         Console.WriteLine("This is background color {0}.", colorName)
         Console.ResetColor()
      Next
   End Sub
End Module
'The example displays the following output:
' All the foreground colors (except Black) on a constant black background:
'    DarkBlue: This is foreground color DarkBlue.
'   DarkGreen: This is foreground color DarkGreen.
'    DarkCyan: This is foreground color DarkCyan.
'     DarkRed: This is foreground color DarkRed.
' DarkMagenta: This is foreground color DarkMagenta.
'  DarkYellow: This is foreground color DarkYellow.
'        Gray: This is foreground color Gray.
'    DarkGray: This is foreground color DarkGray.
'        Blue: This is foreground color Blue.
'       Green: This is foreground color Green.
'        Cyan: This is foreground color Cyan.
'         Red: This is foreground color Red.
'     Magenta: This is foreground color Magenta.
'      Yellow: This is foreground color Yellow.
'       White: This is foreground color White.
'
' All the background colors (except White) with a constant white background:
'       Black: This is background color Black.
'    DarkBlue: This is background color DarkBlue.
'   DarkGreen: This is background color DarkGreen.
'    DarkCyan: This is background color DarkCyan.
'     DarkRed: This is background color DarkRed.
' DarkMagenta: This is background color DarkMagenta.
'  DarkYellow: This is background color DarkYellow.
'        Gray: This is background color Gray.
'    DarkGray: This is background color DarkGray.
'        Blue: This is background color Blue.
'       Green: This is background color Green.
'        Cyan: This is background color Cyan.
'         Red: This is background color Red.
'     Magenta: This is background color Magenta.
'      Yellow: This is background color Yellow.

using System;

class Example
{
   public static void Main()
   {
      // Get a string array with the names of ConsoleColor enumeration members.
      String[] colorNames = ConsoleColor.GetNames(typeof(ConsoleColor));

      // Display each foreground color except black on a constant black background.
      Console.WriteLine("All the foreground colors (except Black) on a constant black background:");

      foreach (string colorName in colorNames)
      {
         // Convert the string representing the enum name to the enum value.
         ConsoleColor color = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);

         if (color == ConsoleColor.Black) continue;

         Console.Write("{0,11}: ", colorName);
         Console.BackgroundColor = ConsoleColor.Black;
         Console.ForegroundColor = color;
         Console.WriteLine("This is foreground color {0}.", colorName);
         // Restore the original foreground and background colors.
         Console.ResetColor();
      }
      Console.WriteLine();

      // Display each background color except white with a constant white foreground.
      Console.WriteLine("All the background colors (except White) with a constant white background:");

      foreach (string colorName in colorNames)
      {
         // Convert the string representing the enum name to the enum value.
         ConsoleColor color = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);

         if (color == ConsoleColor.White) continue;

         Console.Write("{0,11}: ", colorName);
         Console.ForegroundColor = ConsoleColor.White;
         Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);
         Console.WriteLine("This is background color {0}.", colorName);
         Console.ResetColor();
      }
   }
}
//The example displays the following output:
// All the foreground colors (except Black) on a constant black background:
//    DarkBlue: This is foreground color DarkBlue.
//   DarkGreen: This is foreground color DarkGreen.
//    DarkCyan: This is foreground color DarkCyan.
//     DarkRed: This is foreground color DarkRed.
// DarkMagenta: This is foreground color DarkMagenta.
//  DarkYellow: This is foreground color DarkYellow.
//        Gray: This is foreground color Gray.
//    DarkGray: This is foreground color DarkGray.
//        Blue: This is foreground color Blue.
//       Green: This is foreground color Green.
//        Cyan: This is foreground color Cyan.
//         Red: This is foreground color Red.
//     Magenta: This is foreground color Magenta.
//      Yellow: This is foreground color Yellow.
//       White: This is foreground color White.
//
// All the background colors (except White) with a constant white background:
//       Black: This is background color Black.
//    DarkBlue: This is background color DarkBlue.
//   DarkGreen: This is background color DarkGreen.
//    DarkCyan: This is background color DarkCyan.
//     DarkRed: This is background color DarkRed.
// DarkMagenta: This is background color DarkMagenta.
//  DarkYellow: This is background color DarkYellow.
//        Gray: This is background color Gray.
//    DarkGray: This is background color DarkGray.
//        Blue: This is background color Blue.
//       Green: This is background color Green.
//        Cyan: This is background color Cyan.
//         Red: This is background color Red.
//     Magenta: This is background color Magenta.
//      Yellow: This is background color Yellow.
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.In 属性

Console
.
.
::
.
In 属性
Console 类

获取标准输入流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property In As TextReader
    Get
public static TextReader In { get; }
public:
static property TextReader^ In {
    TextReader^ get ();
}
static member In : TextReader

属性值

类型： System.IO TextReader
表示标准输入流的 TextReader。

默认情况下，此属性设置为标准输入流。此属性可通过 SetIn 方法设置为另一个流。 默认情况下，此属性设置为标准输入流。此属性可通过 SetIn 方法设置为另一个流。

下面的示例演示 In 属性的用法。

Imports System
Imports System.IO

Class InTest

    Public Shared Sub Main()
        Dim tIn As TextReader = Console.In
        Dim tOut As TextWriter = Console.Out

        tOut.WriteLine("Hola Mundo!")
        tOut.Write("What is your name: ")
        Dim name As [String] = tIn.ReadLine()

        tOut.WriteLine("Buenos Dias, {0}!", name)
    End Sub 'Main
End Class 'InTest

using System;
using System.IO;

class InTest {
    public static void Main() {

        TextReader tIn = Console.In;
        TextWriter tOut = Console.Out;

        tOut.WriteLine("Hola Mundo!");
        tOut.Write("What is your name: ");
        String name = tIn.ReadLine();

        tOut.WriteLine("Buenos Dias, {0}!", name);
    }
}

using namespace System;
using namespace System::IO;
int main()
{
   TextReader^ tIn = Console::In;
   TextWriter^ tOut = Console::Out;
   tOut->WriteLine( "Hola Mundo!" );
   tOut->Write( "What is your name: " );
   String^ name = tIn->ReadLine();
   tOut->WriteLine( "Buenos Dias, {0}!", name );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
System 命名空间
Error
Out
SetIn


Console ..::.InputEncoding 属性

Console
.
.
::
.
InputEncoding 属性
Console 类

获取或设置控制台用于读取输入的编码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property InputEncoding As Encoding
    Get
    Set
public static Encoding InputEncoding { get; set; }
public:
static property Encoding^ InputEncoding {
    Encoding^ get ();
    void set (Encoding^ value);
}
static member InputEncoding : Encoding with get, set

属性值

类型： System.Text Encoding
用于读取控制台输入的编码。
异常 | 条件
ArgumentNullException | Set 操作中的属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
PlatformNotSupportedException | 此属性的 Set 操作在 Windows 98、Windows 98 Second Edition 或 Windows Millennium Edition 上不受支持。
IOException | 在执行此操作的过程中发生错误。
SecurityException | 您的应用程序不具有执行此操作的权限。

控制台使用输入编码将键盘输入转换为相应的字符。输入编码用到了一个代码页，该代码页将 256 个键盘字符代码映射到各个字符。不同的代码页包含不同的特殊字符，这些字符通常针对一种语言或一组语言进行了自定义。 控制台使用输入编码将键盘输入转换为相应的字符。输入编码用到了一个代码页，该代码页将 256 个键盘字符代码映射到各个字符。不同的代码页包含不同的特殊字符，这些字符通常针对一种语言或一组语言进行了自定义。 控制台使用输入编码将键盘输入转换为相应的字符。输入编码用到了一个代码页，该代码页将 256 个键盘字符代码映射到各个字符。不同的代码页包含不同的特殊字符，这些字符通常针对一种语言或一组语言进行了自定义。

  • UIPermission

    用于读取和写入到顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于读取和写入到顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间
Encoding


Console ..::.KeyAvailable 属性

Console
.
.
::
.
KeyAvailable 属性
Console 类

获取一个值，该值指示按键操作在输入流中是否可用。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property KeyAvailable As Boolean
    Get
public static bool KeyAvailable { get; }
public:
static property bool KeyAvailable {
    bool get ();
}
static member KeyAvailable : bool

属性值

类型： System Boolean
如果按键操作可用，则为 true；否则为 false。
异常 | 条件
IOException | 发生了 I/O 错误。
InvalidOperationException | 标准输入重定向到文件而不是键盘。

属性值会立即返回，也就是说，KeyAvailable 属性不会为等待按键操作可用而阻止输入。

请只将 KeyAvailable 属性与 ReadKey 方法结合使用，而不是与 Read 或 ReadLine 方法结合使用。

下面的示例演示如何使用 KeyAvailable 属性创建一个直至按下某个键才开始运行的循环。

' This example demonstrates the Console.KeyAvailable property.

Imports System
Imports System.Threading
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim cki As New ConsoleKeyInfo()

      Do
         Console.WriteLine(vbCrLf & "Press a key to display; press the 'x' key to quit.")

' Your code could perform some useful task in the following loop. However,
' for the sake of this example we'll merely pause for a quarter second.

         While Console.KeyAvailable = False
            Thread.Sleep(250) ' Loop until input is entered.
         End While
         cki = Console.ReadKey(True)
         Console.WriteLine("You pressed the '{0}' key.", cki.Key)
      Loop While cki.Key <> ConsoleKey.X
   End Sub 'Main
End Class 'Sample

'This example produces results similar to the following text:
'
'Press a key to display; press the 'x' key to quit.
'You pressed the 'H' key.
'
'Press a key to display; press the 'x' key to quit.
'You pressed the 'E' key.
'
'Press a key to display; press the 'x' key to quit.
'You pressed the 'PageUp' key.
'
'Press a key to display; press the 'x' key to quit.
'You pressed the 'DownArrow' key.
'
'Press a key to display; press the 'x' key to quit.
'You pressed the 'X' key.
'

// This example demonstrates the Console.KeyAvailable property.
using System;
using System.Threading;

class Sample
{
    public static void Main()
    {
    ConsoleKeyInfo cki = new ConsoleKeyInfo();

    do {
        Console.WriteLine("\nPress a key to display; press the 'x' key to quit.");

// Your code could perform some useful task in the following loop. However,
// for the sake of this example we'll merely pause for a quarter second.

        while (Console.KeyAvailable == false)
            Thread.Sleep(250); // Loop until input is entered.
        cki = Console.ReadKey(true);
        Console.WriteLine("You pressed the '{0}' key.", cki.Key);
        } while(cki.Key != ConsoleKey.X);
    }
}
/*
This example produces results similar to the following text:

Press a key to display; press the 'x' key to quit.
You pressed the 'H' key.

Press a key to display; press the 'x' key to quit.
You pressed the 'E' key.

Press a key to display; press the 'x' key to quit.
You pressed the 'PageUp' key.

Press a key to display; press the 'x' key to quit.
You pressed the 'DownArrow' key.

Press a key to display; press the 'x' key to quit.
You pressed the 'X' key.
*/

// This example demonstrates the Console.KeyAvailable property.
using namespace System;
using namespace System::Threading;
int main()
{
   ConsoleKeyInfo cki;
   do
   {
      Console::WriteLine( "\nPress a key to display; press the 'x' key to quit." );

      // Your code could perform some useful task in the following loop. However,
      // for the sake of this example we'll merely pause for a quarter second.
      while ( Console::KeyAvailable == false )
            Thread::Sleep( 250 );
      cki = Console::ReadKey( true );
      Console::WriteLine( "You pressed the '{0}' key.", cki.Key );
   }
   while ( cki.Key != ConsoleKey::X );
}

/*
This example produces results similar to the following text:

Press a key to display; press the 'x' key to quit.
You pressed the 'H' key.

Press a key to display; press the 'x' key to quit.
You pressed the 'E' key.

Press a key to display; press the 'x' key to quit.
You pressed the 'PageUp' key.

Press a key to display; press the 'x' key to quit.
You pressed the 'DownArrow' key.

Press a key to display; press the 'x' key to quit.
You pressed the 'X' key.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.LargestWindowHeight 属性

Console
.
.
::
.
LargestWindowHeight 属性
Console 类

根据当前字体和屏幕分辨率获取控制台窗口可能具有的最大行数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property LargestWindowHeight As Integer
    Get
public static int LargestWindowHeight { get; }
public:
static property int LargestWindowHeight {
    int get ();
}
static member LargestWindowHeight : int

属性值

类型： System Int32
控制台窗口可能具有的最大高度，以行为单位。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.LargestWindowWidth 属性

Console
.
.
::
.
LargestWindowWidth 属性
Console 类

根据当前字体和屏幕分辨率获取控制台窗口可能具有的最大列数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property LargestWindowWidth As Integer
    Get
public static int LargestWindowWidth { get; }
public:
static property int LargestWindowWidth {
    int get ();
}
static member LargestWindowWidth : int

属性值

类型： System Int32
控制台窗口可能具有的最大宽度，以列为单位。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.NumberLock 属性

Console
.
.
::
.
NumberLock 属性
Console 类

获取一个值，该值指示 Num Lock 键盘切换键是打开的还是关闭的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property NumberLock As Boolean
    Get
public static bool NumberLock { get; }
public:
static property bool NumberLock {
    bool get ();
}
static member NumberLock : bool

属性值

类型： System Boolean
如果 Num Lock 是打开的，则为 true；如果 Num Lock 是关闭的，则为 false。

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明： Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：此平台不支持该操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.Out 属性

Console
.
.
::
.
Out 属性
Console 类

获取标准输出流。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Out As TextWriter
    Get
public static TextWriter Out { get; }
public:
static property TextWriter^ Out {
    TextWriter^ get ();
}
static member Out : TextWriter

属性值

类型： System.IO TextWriter
表示标准输出流的 TextWriter。

默认情况下，此属性设置为标准输出流。此属性可通过 SetOut 方法设置为另一个流。 默认情况下，此属性设置为标准输出流。此属性可通过 SetOut 方法设置为另一个流。

注意，对 Console.Out.WriteLine 方法的调用等效于对相应 WriteLine 方法的调用。

下面的示例使用 Out 属性将包含了应用程序当前目录中文件名称的数组显示到标准输出设备。然后，将标准输出设置为一个名为 Files.txt 的文件，并将数组元素列举到该文件中。最后，将输出设置为标准输出流，并再次将数组元素显示在标准输出设备上。 下面的示例使用 Out 属性将包含了应用程序当前目录中文件名称的数组显示到标准输出设备。然后，将标准输出设置为一个名为 Files.txt 的文件，并将数组元素列举到该文件中。最后，将输出设置为标准输出流，并再次将数组元素显示在标准输出设备上。 下面的示例使用 Out 属性将包含了应用程序当前目录中文件名称的数组显示到标准输出设备。然后，将标准输出设置为一个名为 Files.txt 的文件，并将数组元素列举到该文件中。最后，将输出设置为标准输出流，并再次将数组元素显示在标准输出设备上。

Imports System.IO

Module Example
   Public Sub Main()
      ' Get all files in the current directory.
      Dim files() As String = Directory.GetFiles(".")
      Array.Sort(files)

      ' Display the files to the current output source to the console.
      Console.WriteLine("First display of filenames to the console:")
      Array.ForEach(files, Function(s) WriteOutput(s))
      Console.Out.WriteLine()

      ' Redirect output to a file named Files.txt and write file list.
      Dim sw As StreamWriter = New StreamWriter(".\Files.txt")
      sw.AutoFlush = True
      Console.SetOut(sw)
      Console.Out.WriteLine("Display filenames to a file:")
      Array.ForEach(files, Function(s) WriteOutput(s))
      Console.Out.WriteLine()

      ' Close previous output stream and redirect output to standard output.
      Console.Out.Close()
      sw = New StreamWriter(Console.OpenStandardOutput())
      sw.AutoFlush = True
      Console.SetOut(sw)

      ' Display the files to the current output source to the console.
      Console.Out.WriteLine("Second display of filenames to the console:")
      Array.ForEach(files, Function(s) WriteOutput(s))
   End Sub

   Private Function WriteOutput(s As String) As Boolean
      Console.Out.WriteLine(s)
      Return True
   End Function
End Module

using System;
using System.IO;

public class Example
{
   public static void Main()
   {
      // Get all files in the current directory.
      string[] files = Directory.GetFiles(".");
      Array.Sort(files);

      // Display the files to the current output source to the console.
      Console.WriteLine("First display of filenames to the console:");
      Array.ForEach(files, s => Console.Out.WriteLine(s));
      Console.Out.WriteLine();

      // Redirect output to a file named Files.txt and write file list.
      StreamWriter sw = new StreamWriter(@".\Files.txt");
      sw.AutoFlush = true;
      Console.SetOut(sw);
      Console.Out.WriteLine("Display filenames to a file:");
      Array.ForEach(files, s => Console.Out.WriteLine(s));
      Console.Out.WriteLine();

      // Close previous output stream and redirect output to standard output.
      Console.Out.Close();
      sw = new StreamWriter(Console.OpenStandardOutput());
      sw.AutoFlush = true;
      Console.SetOut(sw);

      // Display the files to the current output source to the console.
      Console.Out.WriteLine("Second display of filenames to the console:");
      Array.ForEach(files, s => Console.Out.WriteLine(s));
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Console 类
Console 成员
System 命名空间
Error
In
SetOut


Console ..::.OutputEncoding 属性

Console
.
.
::
.
OutputEncoding 属性
Console 类

获取或设置控制台用于写入输出的编码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property OutputEncoding As Encoding
    Get
    Set
public static Encoding OutputEncoding { get; set; }
public:
static property Encoding^ OutputEncoding {
    Encoding^ get ();
    void set (Encoding^ value);
}
static member OutputEncoding : Encoding with get, set

属性值

类型： System.Text Encoding
用于写入控制台输出的编码。
异常 | 条件
ArgumentNullException | Set 操作中的属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
PlatformNotSupportedException | 此属性的 Set 操作在 Windows 98、Windows 98 Second Edition 或 Windows Millennium Edition 上不受支持。
IOException | 在执行此操作的过程中发生错误。
SecurityException | 您的应用程序不具有执行此操作的权限。

控制台使用输出编码将应用程序写入的字符转换为相应的控制台显示字符。输出编码用到了一个代码页，该代码页将 256 个字符映射到各个控制台显示字符。不同的代码页包含不同的特殊字符，这些字符通常针对一种语言或一组语言进行了自定义。 控制台使用输出编码将应用程序写入的字符转换为相应的控制台显示字符。输出编码用到了一个代码页，该代码页将 256 个字符映射到各个控制台显示字符。不同的代码页包含不同的特殊字符，这些字符通常针对一种语言或一组语言进行了自定义。 控制台使用输出编码将应用程序写入的字符转换为相应的控制台显示字符。输出编码用到了一个代码页，该代码页将 256 个字符映射到各个控制台显示字符。不同的代码页包含不同的特殊字符，这些字符通常针对一种语言或一组语言进行了自定义。

  • UIPermission

    用于读取和写入到顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于读取和写入到顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.Title 属性

Console
.
.
::
.
Title 属性
Console 类

获取或设置要显示在控制台标题栏中的标题。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property Title As String
    Get
    Set
public static string Title { get; set; }
public:
static property String^ Title {
    String^ get ();
    void set (String^ value);
}
static member Title : string with get, set

属性值

类型： System String
要在控制台的标题栏中显示的字符串。标题字符串的最大长度是 24500 个字符。 要在控制台的标题栏中显示的字符串。标题字符串的最大长度是 24500 个字符。
异常 | 条件
InvalidOperationException | 在 Get 操作中，检索到的标题的长度超过 24500 个字符。
ArgumentOutOfRangeException | 在 Set 操作中，指定标题的长度超过 24500 个字符。
ArgumentNullException | 在 Set 操作中，指定的标题为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
IOException | 发生了 I/O 错误。

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明： Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：标题字符串的最大长度是 127 个 ANSI 字符。不支持 Unicode 字符。 Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：标题字符串的最大长度是 127 个 ANSI 字符。不支持 Unicode 字符。

此示例演示 Title 属性。此示例显示操作系统窗口的当前标题，等待按键操作，然后显示新的标题。 此示例演示 Title 属性。此示例显示操作系统窗口的当前标题，等待按键操作，然后显示新的标题。

' This example demonstrates the Console.Title property.
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Console.WriteLine("The current console title is: ""{0}""", Console.Title)
      Console.WriteLine("  (Press any key to change the console title.)")
      Console.ReadKey(True)
      Console.Title = "The title has changed!"
      Console.WriteLine("Note that the new console title is ""{0}""" & vbCrLf & _
                        "  (Press any key to quit.)", Console.Title)
      Console.ReadKey(True)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'>myTitle
'The current console title is: "Command Prompt - myTitle"
'  (Press any key to change the console title.)
'Note that the new console title is "The title has changed!"
'  (Press any key to quit.)
'

// This example demonstrates the Console.Title property.
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine("The current console title is: \"{0}\"",
                      Console.Title);
    Console.WriteLine("  (Press any key to change the console title.)");
    Console.ReadKey(true);
    Console.Title = "The title has changed!";
    Console.WriteLine("Note that the new console title is \"{0}\"\n" +
                      "  (Press any key to quit.)", Console.Title);
    Console.ReadKey(true);
    }
}
/*
This example produces the following results:

>myTitle
The current console title is: "Command Prompt - myTitle"
  (Press any key to change the console title.)
Note that the new console title is "The title has changed!"
  (Press any key to quit.)

*/

// This example demonstrates the Console.Title property.
using namespace System;
int main()
{
   Console::WriteLine( "The current console title is: \"{0}\"", Console::Title );
   Console::WriteLine( "  (Press any key to change the console title.)" );
   Console::ReadKey( true );
   Console::Title = "The title has changed!";
   Console::WriteLine( "Note that the new console title is \"{0}\"\n"
   "  (Press any key to quit.)", Console::Title );
   Console::ReadKey( true );
}

/*
This example produces the following results:

>myTitle
The current console title is: "Command Prompt - myTitle"
  (Press any key to change the console title.)
Note that the new console title is "The title has changed!"
  (Press any key to quit.)

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.TreatControlCAsInput 属性

Console
.
.
::
.
TreatControlCAsInput 属性
Console 类

获取或设置一个值，该值指示是将修改键 Control 和控制台键 C 的组合 (Ctrl+C) 视为普通输入，还是视为由操作系统处理的中断。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property TreatControlCAsInput As Boolean
    Get
    Set
public static bool TreatControlCAsInput { get; set; }
public:
static property bool TreatControlCAsInput {
    bool get ();
    void set (bool value);
}
static member TreatControlCAsInput : bool with get, set

属性值

类型： System Boolean
如果将 Ctrl+C 视为普通输入，则为 true；否则为 false。
异常 | 条件
IOException | 无法获取或设置控制台输入缓冲区的输入模式。

如果 TreatControlCAsInput 属性的 Get 操作的值为 false 并且按下了 Ctrl+C，则按下的键不存储在输入缓冲区中，而且操作系统会终止当前正在执行的进程。

警告说明 警告

请慎用此属性，因为将其设置为 true 时影响很大。大多数用户都希望使用 Ctrl+C 终止控制台应用程序。如果禁用 Ctrl+C 的效果，用户必须记得使用不太常用的组合键 Ctrl+Break 终止应用程序。 请慎用此属性，因为将其设置为 true 时影响很大。大多数用户都希望使用 Ctrl+C 终止控制台应用程序。如果禁用 Ctrl+C 的效果，用户必须记得使用不太常用的组合键 Ctrl+Break 终止应用程序。 请慎用此属性，因为将其设置为 true 时影响很大。大多数用户都希望使用 Ctrl+C 终止控制台应用程序。如果禁用 Ctrl+C 的效果，用户必须记得使用不太常用的组合键 Ctrl+Break 终止应用程序。

下面的示例阐释了 TreatControlCAsInput 属性。

Class Example
   Public Shared Sub Main()
      Dim cki As ConsoleKeyInfo
      ' Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = True

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
      Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
      Do
         cki = Console.ReadKey()
         Console.Write(" --- You pressed ")
         If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
         If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
         If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
         Console.WriteLine(cki.Key.ToString)
      Loop While cki.Key <> ConsoleKey.Escape
   End Sub
End Class
' This example displays output similar to the following:
'       Press any combination of CTL, ALT, and SHIFT, and a console key.
'       Press the Escape (Esc) key to quit:
'
'       a --- You pressed A
'       k --- You pressed ALT+K
'         --- You pressed CTL+P
'         --- You pressed RightArrow
'       R --- You pressed SHIFT+R
'                --- You pressed CTL+I
'       j --- You pressed ALT+J
'       O --- You pressed SHIFT+O
'       § --- You pressed CTL+U

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki;
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do
      {
         cki = Console.ReadKey();
         Console.Write(" --- You pressed ");
         if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine(cki.Key.ToString());
       } while (cki.Key != ConsoleKey.Escape);
    }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       a --- You pressed A
//       k --- You pressed ALT+K
//         --- You pressed CTL+P
//         --- You pressed RightArrow
//       R --- You pressed SHIFT+R
//                --- You pressed CTL+I
//       j --- You pressed ALT+J
//       O --- You pressed SHIFT+O
//       § --- You pressed CTL+U
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间
Control
C
CancelKeyPress


Console ..::.WindowHeight 属性

Console
.
.
::
.
WindowHeight 属性
Console 类

获取或设置控制台窗口区域的高度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property WindowHeight As Integer
    Get
    Set
public static int WindowHeight { get; set; }
public:
static property int WindowHeight {
    int get ();
    void set (int value);
}
static member WindowHeight : int with get, set

属性值

类型： System Int32
控制台窗口的高度，以行为单位。
异常 | 条件
ArgumentOutOfRangeException | WindowWidth 属性值或 WindowHeight 属性值小于或等于 0。 - 或 - WindowHeight 属性值加上 WindowTop 属性值大于等于 Int16..::.MaxValue。 - 或 - WindowWidth 属性值或 WindowHeight 属性值大于当前屏幕分辨率和控制台字体的最大可能窗口宽度或高度。
IOException | 读取或写入信息时发生错误。

此示例演示 SetWindowSize 方法以及 WindowWidth 和 WindowHeight 属性。您必须运行该示例才能查看更改控制台窗口大小的全部效果。 此示例演示 SetWindowSize 方法以及 WindowWidth 和 WindowHeight 属性。您必须运行该示例才能查看更改控制台窗口大小的全部效果。

该示例报告设置为 85 列和 43 行的控制台窗口的维度，然后等待按键操作。按下任意键时，控制台窗口的维度会减半，然后该示例会报告新的维度，并等待下一次按键。最后，按下任意键时，控制台窗口会还原为其原始维度，该示例终止。 该示例报告设置为 85 列和 43 行的控制台窗口的维度，然后等待按键操作。按下任意键时，控制台窗口的维度会减半，然后该示例会报告新的维度，并等待下一次按键。最后，按下任意键时，控制台窗口会还原为其原始维度，该示例终止。 该示例报告设置为 85 列和 43 行的控制台窗口的维度，然后等待按键操作。按下任意键时，控制台窗口的维度会减半，然后该示例会报告新的维度，并等待下一次按键。最后，按下任意键时，控制台窗口会还原为其原始维度，该示例终止。

' This example demonstrates the Console.SetWindowSize method,
'                           the Console.WindowWidth property,
'                       and the Console.WindowHeight property.
Imports System

Class Sample
   Public Shared Sub Main()
      Dim origWidth, width As Integer
      Dim origHeight, height As Integer
      Dim m1 As String = "The current window width is {0}, and the " & _
                         "current window height is {1}."
      Dim m2 As String = "The new window width is {0}, and the new " & _
                         "window height is {1}."
      Dim m4 As String = "  (Press any key to continue...)"
      '
      ' Step 1: Get the current window dimensions.
      '
      origWidth = Console.WindowWidth
      origHeight = Console.WindowHeight
      Console.WriteLine(m1, Console.WindowWidth, Console.WindowHeight)
      Console.WriteLine(m4)
      Console.ReadKey(True)
      '
      ' Step 2: Cut the window to 1/4 its original size.
      '
      width = origWidth / 2
      height = origHeight / 2
      Console.SetWindowSize(width, height)
      Console.WriteLine(m2, Console.WindowWidth, Console.WindowHeight)
      Console.WriteLine(m4)
      Console.ReadKey(True)
      '
      ' Step 3: Restore the window to its original size.
      '
      Console.SetWindowSize(origWidth, origHeight)
      Console.WriteLine(m1, Console.WindowWidth, Console.WindowHeight)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'The current window width is 85, and the current window height is 43.
'  (Press any key to continue...)
'The new window width is 42, and the new window height is 21.
'  (Press any key to continue...)
'The current window width is 85, and the current window height is 43.
'
'

// This example demonstrates the Console.SetWindowSize method,
//                           the Console.WindowWidth property,
//                       and the Console.WindowHeight property.
using System;

class Sample
{
    public static void Main()
    {
    int origWidth, width;
    int origHeight, height;
    string m1 = "The current window width is {0}, and the " +
                "current window height is {1}.";
    string m2 = "The new window width is {0}, and the new " +
                "window height is {1}.";
    string m4 = "  (Press any key to continue...)";
//
// Step 1: Get the current window dimensions.
//
    origWidth  = Console.WindowWidth;
    origHeight = Console.WindowHeight;
    Console.WriteLine(m1, Console.WindowWidth,
                          Console.WindowHeight);
    Console.WriteLine(m4);
    Console.ReadKey(true);
//
// Step 2: Cut the window to 1/4 its original size.
//
    width  = origWidth/2;
    height = origHeight/2;
    Console.SetWindowSize(width, height);
    Console.WriteLine(m2, Console.WindowWidth,
                          Console.WindowHeight);
    Console.WriteLine(m4);
    Console.ReadKey(true);
//
// Step 3: Restore the window to its original size.
//
    Console.SetWindowSize(origWidth, origHeight);
    Console.WriteLine(m1, Console.WindowWidth,
                          Console.WindowHeight);
    }
}
/*
This example produces the following results:

The current window width is 85, and the current window height is 43.
  (Press any key to continue...)
The new window width is 42, and the new window height is 21.
  (Press any key to continue...)
The current window width is 85, and the current window height is 43.

*/

// This example demonstrates the Console.SetWindowSize method,
//                           the Console.WindowWidth property,
//                       and the Console.WindowHeight property.
using namespace System;
int main()
{
   int origWidth;
   int width;
   int origHeight;
   int height;
   String^ m1 = "The current window width is {0}, and the "
   "current window height is {1}.";
   String^ m2 = "The new window width is {0}, and the new "
   "window height is {1}.";
   String^ m4 = "  (Press any key to continue...)";

   //
   // Step 1: Get the current window dimensions.
   //
   origWidth = Console::WindowWidth;
   origHeight = Console::WindowHeight;
   Console::WriteLine( m1, Console::WindowWidth, Console::WindowHeight );
   Console::WriteLine( m4 );
   Console::ReadKey( true );

   //
   // Step 2: Cut the window to 1/4 its original size.
   //
   width = origWidth / 2;
   height = origHeight / 2;
   Console::SetWindowSize( width, height );
   Console::WriteLine( m2, Console::WindowWidth, Console::WindowHeight );
   Console::WriteLine( m4 );
   Console::ReadKey( true );

   //
   // Step 3: Restore the window to its original size.
   //
   Console::SetWindowSize( origWidth, origHeight );
   Console::WriteLine( m1, Console::WindowWidth, Console::WindowHeight );
}

/*
This example produces the following results:

The current window width is 85, and the current window height is 43.
  (Press any key to continue...)
The new window width is 42, and the new window height is 21.
  (Press any key to continue...)
The current window width is 85, and the current window height is 43.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.WindowLeft 属性

Console
.
.
::
.
WindowLeft 属性
Console 类

获取或设置控制台窗口区域的最左边相对于屏幕缓冲区的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property WindowLeft As Integer
    Get
    Set
public static int WindowLeft { get; set; }
public:
static property int WindowLeft {
    int get ();
    void set (int value);
}
static member WindowLeft : int with get, set

属性值

类型： System Int32
控制台窗口的最左边的位置，以列为单位。
异常 | 条件
ArgumentOutOfRangeException | 在设置操作中，所赋的值小于零。 - 或 - 赋值后，WindowLeft 加上 WindowWidth 将超过 BufferWidth。
IOException | 读取或写入信息时发生错误。

控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowLeft 属性确定在控制台的第一列内要显示缓冲区的哪一列。WindowLeft 属性值的范围为 0 到 BufferWidth -WindowWidth.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowLeft 属性确定在控制台的第一列内要显示缓冲区的哪一列。WindowLeft 属性值的范围为 0 到 BufferWidth -WindowWidth.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowLeft 属性确定在控制台的第一列内要显示缓冲区的哪一列。WindowLeft 属性值的范围为 0 到 BufferWidth -WindowWidth.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowLeft 属性确定在控制台的第一列内要显示缓冲区的哪一列。WindowLeft 属性值的范围为 0 到 BufferWidth -WindowWidth.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowLeft 属性确定在控制台的第一列内要显示缓冲区的哪一列。WindowLeft 属性值的范围为 0 到 BufferWidth -WindowWidth.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowLeft 属性确定在控制台的第一列内要显示缓冲区的哪一列。WindowLeft 属性值的范围为 0 到 BufferWidth -WindowWidth.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 - 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowLeft 属性确定在控制台的第一列内要显示缓冲区的哪一列。WindowLeft 属性值的范围为 0 到 BufferWidth -WindowWidth.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowLeft 属性确定在控制台的第一列内要显示缓冲区的哪一列。WindowLeft 属性值的范围为 0 到 BufferWidth -WindowWidth.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。

在首次打开控制台窗口时，WindowLeft 属性的默认值为零，表示控制台显示的第一列对应于缓冲区中的第一列（列位置为零）。控制台窗口和缓冲区的默认宽度是 80 列。这意味着仅当缓冲区变宽或控制台窗口变窄时，才能修改 WindowLeft 属性。 在首次打开控制台窗口时，WindowLeft 属性的默认值为零，表示控制台显示的第一列对应于缓冲区中的第一列（列位置为零）。控制台窗口和缓冲区的默认宽度是 80 列。这意味着仅当缓冲区变宽或控制台窗口变窄时，才能修改 WindowLeft 属性。 在首次打开控制台窗口时，WindowLeft 属性的默认值为零，表示控制台显示的第一列对应于缓冲区中的第一列（列位置为零）。控制台窗口和缓冲区的默认宽度是 80 列。这意味着仅当缓冲区变宽或控制台窗口变窄时，才能修改 WindowLeft 属性。

请注意如果缓冲区的宽度超过了控制台窗口的宽度，当用户使用水平滚动条来定义窗口与缓冲区区域的关系时，WindowLeft 属性的值将自动调整。

下面的示例打开 80 列控制台窗口，并定义一个 120 列宽的缓冲区区域。它显示有关窗口和缓冲区大小的信息，然后等待用户按向左键或向右键。在前一种情况中，如果结果是一个合法值的值，它将 WindowLeft 属性的值递减一。在后一种情况中，如果结果合法，它将 WindowLeft 属性的值增加一。请注意，该示例不必要处理 ArgumentOutOfRangeException，因为它会检查要赋值给 WindowLeft 属性值不是负数，并且不会导致 WindowLeft 和 WindowWidth 属性的和超过 BufferWidth 属性值。 下面的示例打开 80 列控制台窗口，并定义一个 120 列宽的缓冲区区域。它显示有关窗口和缓冲区大小的信息，然后等待用户按向左键或向右键。在前一种情况中，如果结果是一个合法值的值，它将 WindowLeft 属性的值递减一。在后一种情况中，如果结果合法，它将 WindowLeft 属性的值增加一。请注意，该示例不必要处理 ArgumentOutOfRangeException，因为它会检查要赋值给 WindowLeft 属性值不是负数，并且不会导致 WindowLeft 和 WindowWidth 属性的和超过 BufferWidth 属性值。 下面的示例打开 80 列控制台窗口，并定义一个 120 列宽的缓冲区区域。它显示有关窗口和缓冲区大小的信息，然后等待用户按向左键或向右键。在前一种情况中，如果结果是一个合法值的值，它将 WindowLeft 属性的值递减一。在后一种情况中，如果结果合法，它将 WindowLeft 属性的值增加一。请注意，该示例不必要处理 ArgumentOutOfRangeException，因为它会检查要赋值给 WindowLeft 属性值不是负数，并且不会导致 WindowLeft 和 WindowWidth 属性的和超过 BufferWidth 属性值。 下面的示例打开 80 列控制台窗口，并定义一个 120 列宽的缓冲区区域。它显示有关窗口和缓冲区大小的信息，然后等待用户按向左键或向右键。在前一种情况中，如果结果是一个合法值的值，它将 WindowLeft 属性的值递减一。在后一种情况中，如果结果合法，它将 WindowLeft 属性的值增加一。请注意，该示例不必要处理 ArgumentOutOfRangeException，因为它会检查要赋值给 WindowLeft 属性值不是负数，并且不会导致 WindowLeft 和 WindowWidth 属性的和超过 BufferWidth 属性值。 下面的示例打开 80 列控制台窗口，并定义一个 120 列宽的缓冲区区域。它显示有关窗口和缓冲区大小的信息，然后等待用户按向左键或向右键。在前一种情况中，如果结果是一个合法值的值，它将 WindowLeft 属性的值递减一。在后一种情况中，如果结果合法，它将 WindowLeft 属性的值增加一。请注意，该示例不必要处理 ArgumentOutOfRangeException，因为它会检查要赋值给 WindowLeft 属性值不是负数，并且不会导致 WindowLeft 和 WindowWidth 属性的和超过 BufferWidth 属性值。

Module Example
   Public Sub Main()
      Dim key As ConsoleKeyInfo
      Dim moved As Boolean = False

      Console.BufferWidth = 120
      Console.Clear()

      ShowConsoleStatistics()
      Do While True
         key = Console.ReadKey(True)
         If key.Key = ConsoleKey.LeftArrow Then
            Dim pos As Integer = Console.WindowLeft - 1
            If pos >= 0 And pos + Console.WindowWidth <= Console.BufferWidth Then
               Console.WindowLeft = pos
               moved = True
            End If
         ElseIf key.Key = ConsoleKey.RightArrow Then
            Dim pos As Integer = Console.WindowLeft + 1
            If pos + Console.WindowWidth <= Console.BufferWidth Then
               Console.WindowLeft = pos
               moved = True
            End If
         End If
         If moved Then ShowConsoleStatistics() : moved = False
         Console.WriteLine()
      Loop
   End Sub

   Private Sub ShowConsoleStatistics()
      Console.WriteLine("Console statistics:")
      Console.WriteLine("   Buffer: {0} x {1}", Console.BufferHeight, Console.BufferWidth)
      Console.WriteLine("   Window: {0} x {1}", Console.WindowHeight, Console.WindowWidth)
      Console.WriteLine("   Window starts at {0}.", Console.WindowLeft)
      Console.WriteLine("Press <- or -> to move window, Ctrl+C to exit.")
   End Sub
End Module

using System;

public class Example
{
   public static void Main()
   {
      ConsoleKeyInfo key;
      bool moved = false;

      Console.BufferWidth = 120;
      Console.Clear();

      ShowConsoleStatistics();
      do
      {
         key = Console.ReadKey(true);
         if (key.Key == ConsoleKey.LeftArrow)
         {
            int pos = Console.WindowLeft - 1;
            if (pos >= 0 && pos + Console.WindowWidth <= Console.BufferWidth)
            {
               Console.WindowLeft = pos;
               moved = true;
            }
         }
         else if (key.Key == ConsoleKey.RightArrow)
         {
            int pos = Console.WindowLeft + 1;
            if (pos + Console.WindowWidth <= Console.BufferWidth)
            {
               Console.WindowLeft = pos;
               moved = true;
            }
         }
         if (moved)
         {
            ShowConsoleStatistics();
            moved = false;
         }
         Console.WriteLine();
      } while (true);
   }

   private static void ShowConsoleStatistics()
   {
      Console.WriteLine("Console statistics:");
      Console.WriteLine("   Buffer: {0} x {1}", Console.BufferHeight, Console.BufferWidth);
      Console.WriteLine("   Window: {0} x {1}", Console.WindowHeight, Console.WindowWidth);
      Console.WriteLine("   Window starts at {0}.", Console.WindowLeft);
      Console.WriteLine("Press <- or -> to move window, Ctrl+C to exit.");
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.WindowTop 属性

Console
.
.
::
.
WindowTop 属性
Console 类

获取或设置控制台窗口区域的最顶部相对于屏幕缓冲区的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property WindowTop As Integer
    Get
    Set
public static int WindowTop { get; set; }
public:
static property int WindowTop {
    int get ();
    void set (int value);
}
static member WindowTop : int with get, set

属性值

类型： System Int32
控制台窗口最顶部的位置，以行为单位。
异常 | 条件
ArgumentOutOfRangeException | 在设置操作中，所赋的值小于零。 - 或 - 赋值后，WindowTop 加上 WindowHeight 将超过 BufferHeight。
IOException | 读取或写入信息时发生错误。

控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowTop 属性确定在控制台的第一列内要显示缓冲区的哪一行。WindowTop 属性值的范围为 0 到 BufferHeight -WindowHeight.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowTop 属性确定在控制台的第一列内要显示缓冲区的哪一行。WindowTop 属性值的范围为 0 到 BufferHeight -WindowHeight.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowTop 属性确定在控制台的第一列内要显示缓冲区的哪一行。WindowTop 属性值的范围为 0 到 BufferHeight -WindowHeight.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowTop 属性确定在控制台的第一列内要显示缓冲区的哪一行。WindowTop 属性值的范围为 0 到 BufferHeight -WindowHeight.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowTop 属性确定在控制台的第一列内要显示缓冲区的哪一行。WindowTop 属性值的范围为 0 到 BufferHeight -WindowHeight.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowTop 属性确定在控制台的第一列内要显示缓冲区的哪一行。WindowTop 属性值的范围为 0 到 BufferHeight -WindowHeight.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 - 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowTop 属性确定在控制台的第一列内要显示缓冲区的哪一行。WindowTop 属性值的范围为 0 到 BufferHeight -WindowHeight.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。 控制台将矩形窗口表示成一个更大的矩形缓冲区。窗口和缓冲区可以通过它们的行数垂直度量，并通过列数水平度量。缓冲区的大小由 BufferHeight 和 BufferWidth 属性定义。控制台区域大小由 WindowHeight 和 WindowWidth 属性定义。WindowTop 属性确定在控制台的第一列内要显示缓冲区的哪一行。WindowTop 属性值的范围为 0 到 BufferHeight -WindowHeight.尝试将其设置为该范围以外的值将引发 ArgumentOutOfRangeException。

下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。 下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。 下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。 下面的示例演示 WindowLeft、WindowTop、WindowWidth、WindowHeight、BufferWidth、BufferHeight 和 CursorVisible 属性以及 SetWindowPosition、SetBufferSize 和 ReadKey 方法。该示例在屏幕缓冲区中根据屏幕缓冲区的宽度绘制一个网格模式。然后，该示例在按下向上键、向下键、向左键或向右键这四个控制台键时相应移动控制台窗口。网格模式有助于查看控制台窗口相对于屏幕缓冲区的移动。

' This example demonstrates the Console.WindowLeft and
'                               Console.WindowTop properties.
Imports System.IO
Imports System.Text

Class Sample
   Public Shared saveBufferWidth As Integer
   Public Shared saveBufferHeight As Integer
   Public Shared saveWindowHeight As Integer
   Public Shared saveWindowWidth As Integer
   Public Shared saveCursorVisible As Boolean

   Public Shared Sub Main()
      Dim m1 As String = _
          "1) Press the cursor keys to move the console window." & vbCrlf & _
          "2) Press any key to begin. When you're finished..."   & vbCrlf & _
          "3) Press the Escape key to quit."
      Dim g1 As String = "+----"
      Dim g2 As String = "|    "
      Dim grid1 As String
      Dim grid2 As String
      Dim sbG1 As New StringBuilder()
      Dim sbG2 As New StringBuilder()
      Dim cki As ConsoleKeyInfo
      Dim y As Integer
      '
      Try
         saveBufferWidth = Console.BufferWidth
         saveBufferHeight = Console.BufferHeight
         saveWindowHeight = Console.WindowHeight
         saveWindowWidth = Console.WindowWidth
         saveCursorVisible = Console.CursorVisible
         '
         Console.Clear()
         Console.WriteLine(m1)
         Console.ReadKey(True)

         ' Set the smallest possible window size before setting the buffer size.
         Console.SetWindowSize(1, 1)
         Console.SetBufferSize(80, 80)
         Console.SetWindowSize(40, 20)

         ' Create grid lines to fit the buffer. (The buffer width is 80, but
         ' this same technique could be used with an arbitrary buffer width.)
         For y = 0 To (Console.BufferWidth / g1.Length) - 1
            sbG1.Append(g1)
            sbG2.Append(g2)
         Next y
         sbG1.Append(g1, 0, Console.BufferWidth Mod g1.Length)
         sbG2.Append(g2, 0, Console.BufferWidth Mod g2.Length)
         grid1 = sbG1.ToString()
         grid2 = sbG2.ToString()

         Console.CursorVisible = False
         Console.Clear()
         For y = 0 To (Console.BufferHeight - 2)
            If y Mod 3 = 0 Then
               Console.Write(grid1)
            Else
               Console.Write(grid2)
            End If
         Next y
         '
         Console.SetWindowPosition(0, 0)
         Do
            cki = Console.ReadKey(True)
            Select Case cki.Key
               Case ConsoleKey.LeftArrow
                  If Console.WindowLeft > 0 Then
                     Console.SetWindowPosition(Console.WindowLeft - 1, Console.WindowTop)
                  End If
               Case ConsoleKey.UpArrow
                  If Console.WindowTop > 0 Then
                     Console.SetWindowPosition(Console.WindowLeft, Console.WindowTop - 1)
                  End If
               Case ConsoleKey.RightArrow
                  If Console.WindowLeft < Console.BufferWidth - Console.WindowWidth Then
                     Console.SetWindowPosition(Console.WindowLeft + 1, Console.WindowTop)
                  End If
               Case ConsoleKey.DownArrow
                  If Console.WindowTop < Console.BufferHeight - Console.WindowHeight Then
                     Console.SetWindowPosition(Console.WindowLeft, Console.WindowTop + 1)
                  End If
            End Select
         Loop While cki.Key <> ConsoleKey.Escape
      ' end do-while
      ' end try
      Catch e As IOException
         Console.WriteLine(e.Message)
      Finally
         Console.Clear()
         Console.SetWindowSize(1, 1)
         Console.SetBufferSize(saveBufferWidth, saveBufferHeight)
         Console.SetWindowSize(saveWindowWidth, saveWindowHeight)
         Console.CursorVisible = saveCursorVisible
      End Try
   End Sub 'Main ' end Main
End Class 'Sample ' end Sample
'
'This example produces results similar to the following:
'
'1) Press the cursor keys to move the console window.
'2) Press any key to begin. When you're finished...
'3) Press the Escape key to quit.
'
'...
'
'+----+----+----+-
'|    |    |    |
'|    |    |    |
'+----+----+----+-
'|    |    |    |
'|    |    |    |
'+----+----+----+-
'

// This example demonstrates the Console.WindowLeft and
//                               Console.WindowTop properties.
using System;
using System.Text;
using System.IO;
//
class Sample
{
    public static int saveBufferWidth;
    public static int saveBufferHeight;
    public static int saveWindowHeight;
    public static int saveWindowWidth;
    public static bool saveCursorVisible;
//
    public static void Main()
    {
    string m1 = "1) Press the cursor keys to move the console window.\n" +
                "2) Press any key to begin. When you're finished...\n" +
                "3) Press the Escape key to quit.";
    string g1 = "+----";
    string g2 = "|    ";
    string grid1;
    string grid2;
    StringBuilder sbG1 = new StringBuilder();
    StringBuilder sbG2 = new StringBuilder();
    ConsoleKeyInfo cki;
    int y;
//
    try
    {
    saveBufferWidth  = Console.BufferWidth;
    saveBufferHeight = Console.BufferHeight;
    saveWindowHeight = Console.WindowHeight;
    saveWindowWidth  = Console.WindowWidth;
    saveCursorVisible = Console.CursorVisible;
//
    Console.Clear();
    Console.WriteLine(m1);
    Console.ReadKey(true);

// Set the smallest possible window size before setting the buffer size.
    Console.SetWindowSize(1, 1);
    Console.SetBufferSize(80, 80);
    Console.SetWindowSize(40, 20);

// Create grid lines to fit the buffer. (The buffer width is 80, but
// this same technique could be used with an arbitrary buffer width.)
    for (y = 0; y < Console.BufferWidth/g1.Length; y++)
        {
        sbG1.Append(g1);
        sbG2.Append(g2);
        }
    sbG1.Append(g1, 0, Console.BufferWidth%g1.Length);
    sbG2.Append(g2, 0, Console.BufferWidth%g2.Length);
    grid1 = sbG1.ToString();
    grid2 = sbG2.ToString();

    Console.CursorVisible = false;
    Console.Clear();
    for (y = 0; y < Console.BufferHeight-1; y++)
        {
        if (y%3 == 0)
            Console.Write(grid1);
        else
            Console.Write(grid2);
        }

    Console.SetWindowPosition(0, 0);
    do
        {
        cki = Console.ReadKey(true);
        switch (cki.Key)
            {
            case ConsoleKey.LeftArrow:
                if (Console.WindowLeft > 0)
                    Console.SetWindowPosition(
                            Console.WindowLeft-1, Console.WindowTop);
                break;
            case ConsoleKey.UpArrow:
                if (Console.WindowTop > 0)
                    Console.SetWindowPosition(
                            Console.WindowLeft, Console.WindowTop-1);
                break;
            case ConsoleKey.RightArrow:
                if (Console.WindowLeft < (Console.BufferWidth-Console.WindowWidth))
                    Console.SetWindowPosition(
                            Console.WindowLeft+1, Console.WindowTop);
                break;
            case ConsoleKey.DownArrow:
                if (Console.WindowTop < (Console.BufferHeight-Console.WindowHeight))
                    Console.SetWindowPosition(
                            Console.WindowLeft, Console.WindowTop+1);
                break;
            }
        }
    while (cki.Key != ConsoleKey.Escape);  // end do-while
    } // end try
    catch (IOException e)
        {
        Console.WriteLine(e.Message);
        }
    finally
        {
        Console.Clear();
        Console.SetWindowSize(1, 1);
        Console.SetBufferSize(saveBufferWidth, saveBufferHeight);
        Console.SetWindowSize(saveWindowWidth, saveWindowHeight);
        Console.CursorVisible = saveCursorVisible;
        }
    } // end Main
} // end Sample
/*
This example produces results similar to the following:

1) Press the cursor keys to move the console window.
2) Press any key to begin. When you're finished...
3) Press the Escape key to quit.

...

+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-

*/

// This example demonstrates the Console.WindowLeft and
//                               Console.WindowTop properties.
using namespace System;
using namespace System::Text;
using namespace System::IO;

//
int saveBufferWidth;
int saveBufferHeight;
int saveWindowHeight;
int saveWindowWidth;
bool saveCursorVisible;

//
int main()
{
   String^ m1 = "1) Press the cursor keys to move the console window.\n"
   "2) Press any key to begin. When you're finished...\n"
   "3) Press the Escape key to quit.";
   String^ g1 = "+----";
   String^ g2 = "|    ";
   String^ grid1;
   String^ grid2;
   StringBuilder^ sbG1 = gcnew StringBuilder;
   StringBuilder^ sbG2 = gcnew StringBuilder;
   ConsoleKeyInfo cki;
   int y;

   //
   try
   {
      saveBufferWidth = Console::BufferWidth;
      saveBufferHeight = Console::BufferHeight;
      saveWindowHeight = Console::WindowHeight;
      saveWindowWidth = Console::WindowWidth;
      saveCursorVisible = Console::CursorVisible;

      //
      Console::Clear();
      Console::WriteLine( m1 );
      Console::ReadKey( true );

      // Set the smallest possible window size before setting the buffer size.
      Console::SetWindowSize( 1, 1 );
      Console::SetBufferSize( 80, 80 );
      Console::SetWindowSize( 40, 20 );

      // Create grid lines to fit the buffer. (The buffer width is 80, but
      // this same technique could be used with an arbitrary buffer width.)
      for ( y = 0; y < Console::BufferWidth / g1->Length; y++ )
      {
         sbG1->Append( g1 );
         sbG2->Append( g2 );

      }
      sbG1->Append( g1, 0, Console::BufferWidth % g1->Length );
      sbG2->Append( g2, 0, Console::BufferWidth % g2->Length );
      grid1 = sbG1->ToString();
      grid2 = sbG2->ToString();
      Console::CursorVisible = false;
      Console::Clear();
      for ( y = 0; y < Console::BufferHeight - 1; y++ )
      {
         if ( y % 3 == 0 )
                  Console::Write( grid1 );
         else
                  Console::Write( grid2 );

      }
      Console::SetWindowPosition( 0, 0 );
      do
      {
         cki = Console::ReadKey( true );
         switch ( cki.Key )
         {
            case ConsoleKey::LeftArrow:
               if ( Console::WindowLeft > 0 )
                              Console::SetWindowPosition( Console::WindowLeft - 1, Console::WindowTop );
               break;

            case ConsoleKey::UpArrow:
               if ( Console::WindowTop > 0 )
                              Console::SetWindowPosition( Console::WindowLeft, Console::WindowTop - 1 );
               break;

            case ConsoleKey::RightArrow:
               if ( Console::WindowLeft < (Console::BufferWidth - Console::WindowWidth) )
                              Console::SetWindowPosition( Console::WindowLeft + 1, Console::WindowTop );
               break;

            case ConsoleKey::DownArrow:
               if ( Console::WindowTop < (Console::BufferHeight - Console::WindowHeight) )
                              Console::SetWindowPosition( Console::WindowLeft, Console::WindowTop + 1 );
               break;
         }
      }
      while ( cki.Key != ConsoleKey::Escape );
   }
   catch ( IOException^ e )
   {
      Console::WriteLine( e->Message );
   }
   finally
   {
      Console::Clear();
      Console::SetWindowSize( 1, 1 );
      Console::SetBufferSize( saveBufferWidth, saveBufferHeight );
      Console::SetWindowSize( saveWindowWidth, saveWindowHeight );
      Console::CursorVisible = saveCursorVisible;
   }

} // end Main

/*
This example produces results similar to the following:

1) Press the cursor keys to move the console window.
2) Press any key to begin. When you're finished...
3) Press the Escape key to quit.

...

+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-
|    |    |    |
|    |    |    |
+----+----+----+-

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console ..::.WindowWidth 属性

Console
.
.
::
.
WindowWidth 属性
Console 类

获取或设置控制台窗口的宽度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property WindowWidth As Integer
    Get
    Set
public static int WindowWidth { get; set; }
public:
static property int WindowWidth {
    int get ();
    void set (int value);
}
static member WindowWidth : int with get, set

属性值

类型： System Int32
控制台窗口的宽度，以列为单位。
异常 | 条件
ArgumentOutOfRangeException | WindowWidth 属性值或 WindowHeight 属性值小于或等于 0。 - 或 - WindowHeight 属性值加上 WindowTop 属性值大于等于 Int16..::.MaxValue。 - 或 - WindowWidth 属性值或 WindowHeight 属性值大于当前屏幕分辨率和控制台字体的最大可能窗口宽度或高度。
IOException | 读取或写入信息时发生错误。

此示例演示 SetWindowSize 方法以及 WindowWidth 和 WindowHeight 属性。您必须运行该示例才能查看更改控制台窗口大小的全部效果。 此示例演示 SetWindowSize 方法以及 WindowWidth 和 WindowHeight 属性。您必须运行该示例才能查看更改控制台窗口大小的全部效果。

该示例报告设置为 85 列和 43 行的控制台窗口的维度，然后等待按键操作。按下任意键时，控制台窗口的维度会减半，然后该示例会报告新的维度，并等待下一次按键。最后，按下任意键时，控制台窗口会还原为其原始维度，该示例终止。 该示例报告设置为 85 列和 43 行的控制台窗口的维度，然后等待按键操作。按下任意键时，控制台窗口的维度会减半，然后该示例会报告新的维度，并等待下一次按键。最后，按下任意键时，控制台窗口会还原为其原始维度，该示例终止。 该示例报告设置为 85 列和 43 行的控制台窗口的维度，然后等待按键操作。按下任意键时，控制台窗口的维度会减半，然后该示例会报告新的维度，并等待下一次按键。最后，按下任意键时，控制台窗口会还原为其原始维度，该示例终止。

' This example demonstrates the Console.SetWindowSize method,
'                           the Console.WindowWidth property,
'                       and the Console.WindowHeight property.
Imports System

Class Sample
   Public Shared Sub Main()
      Dim origWidth, width As Integer
      Dim origHeight, height As Integer
      Dim m1 As String = "The current window width is {0}, and the " & _
                         "current window height is {1}."
      Dim m2 As String = "The new window width is {0}, and the new " & _
                         "window height is {1}."
      Dim m4 As String = "  (Press any key to continue...)"
      '
      ' Step 1: Get the current window dimensions.
      '
      origWidth = Console.WindowWidth
      origHeight = Console.WindowHeight
      Console.WriteLine(m1, Console.WindowWidth, Console.WindowHeight)
      Console.WriteLine(m4)
      Console.ReadKey(True)
      '
      ' Step 2: Cut the window to 1/4 its original size.
      '
      width = origWidth / 2
      height = origHeight / 2
      Console.SetWindowSize(width, height)
      Console.WriteLine(m2, Console.WindowWidth, Console.WindowHeight)
      Console.WriteLine(m4)
      Console.ReadKey(True)
      '
      ' Step 3: Restore the window to its original size.
      '
      Console.SetWindowSize(origWidth, origHeight)
      Console.WriteLine(m1, Console.WindowWidth, Console.WindowHeight)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'The current window width is 85, and the current window height is 43.
'  (Press any key to continue...)
'The new window width is 42, and the new window height is 21.
'  (Press any key to continue...)
'The current window width is 85, and the current window height is 43.
'
'

// This example demonstrates the Console.SetWindowSize method,
//                           the Console.WindowWidth property,
//                       and the Console.WindowHeight property.
using System;

class Sample
{
    public static void Main()
    {
    int origWidth, width;
    int origHeight, height;
    string m1 = "The current window width is {0}, and the " +
                "current window height is {1}.";
    string m2 = "The new window width is {0}, and the new " +
                "window height is {1}.";
    string m4 = "  (Press any key to continue...)";
//
// Step 1: Get the current window dimensions.
//
    origWidth  = Console.WindowWidth;
    origHeight = Console.WindowHeight;
    Console.WriteLine(m1, Console.WindowWidth,
                          Console.WindowHeight);
    Console.WriteLine(m4);
    Console.ReadKey(true);
//
// Step 2: Cut the window to 1/4 its original size.
//
    width  = origWidth/2;
    height = origHeight/2;
    Console.SetWindowSize(width, height);
    Console.WriteLine(m2, Console.WindowWidth,
                          Console.WindowHeight);
    Console.WriteLine(m4);
    Console.ReadKey(true);
//
// Step 3: Restore the window to its original size.
//
    Console.SetWindowSize(origWidth, origHeight);
    Console.WriteLine(m1, Console.WindowWidth,
                          Console.WindowHeight);
    }
}
/*
This example produces the following results:

The current window width is 85, and the current window height is 43.
  (Press any key to continue...)
The new window width is 42, and the new window height is 21.
  (Press any key to continue...)
The current window width is 85, and the current window height is 43.

*/

// This example demonstrates the Console.SetWindowSize method,
//                           the Console.WindowWidth property,
//                       and the Console.WindowHeight property.
using namespace System;
int main()
{
   int origWidth;
   int width;
   int origHeight;
   int height;
   String^ m1 = "The current window width is {0}, and the "
   "current window height is {1}.";
   String^ m2 = "The new window width is {0}, and the new "
   "window height is {1}.";
   String^ m4 = "  (Press any key to continue...)";

   //
   // Step 1: Get the current window dimensions.
   //
   origWidth = Console::WindowWidth;
   origHeight = Console::WindowHeight;
   Console::WriteLine( m1, Console::WindowWidth, Console::WindowHeight );
   Console::WriteLine( m4 );
   Console::ReadKey( true );

   //
   // Step 2: Cut the window to 1/4 its original size.
   //
   width = origWidth / 2;
   height = origHeight / 2;
   Console::SetWindowSize( width, height );
   Console::WriteLine( m2, Console::WindowWidth, Console::WindowHeight );
   Console::WriteLine( m4 );
   Console::ReadKey( true );

   //
   // Step 3: Restore the window to its original size.
   //
   Console::SetWindowSize( origWidth, origHeight );
   Console::WriteLine( m1, Console::WindowWidth, Console::WindowHeight );
}

/*
This example produces the following results:

The current window width is 85, and the current window height is 43.
  (Press any key to continue...)
The new window width is 42, and the new window height is 21.
  (Press any key to continue...)
The current window width is 85, and the current window height is 43.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间


Console 事件

Console 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Console 类

Console 类型公开以下成员。

名称 说明
页首

参考

Console 类
System 命名空间


Console ..::.CancelKeyPress 事件

Console
.
.
::
.
CancelKeyPress 事件
Console 类

在同时按下修改键 Control (Ctrl) 和控制台键 C (C)（即 Ctrl+C）时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Event CancelKeyPress As ConsoleCancelEventHandler
public static event ConsoleCancelEventHandler CancelKeyPress
public:
static  event ConsoleCancelEventHandler^ CancelKeyPress {
    void add (ConsoleCancelEventHandler^ value);
    void remove (ConsoleCancelEventHandler^ value);
}
member CancelKeyPress : IEvent<ConsoleCancelEventHandler,
    ConsoleCancelEventArgs>

此事件与 System..::.ConsoleCancelEventHandler 和 System..::.ConsoleCancelEventArgs 一起使用。CancelKeyPress 事件使得控制台应用程序能够截获 Ctrl+C 信号，以使该应用程序确定是继续执行还是终止。有关处理事件的更多信息，请参见使用事件。 此事件与 System..::.ConsoleCancelEventHandler 和 System..::.ConsoleCancelEventArgs 一起使用。CancelKeyPress 事件使得控制台应用程序能够截获 Ctrl+C 信号，以使该应用程序确定是继续执行还是终止。有关处理事件的更多信息，请参见使用事件。 此事件与 System..::.ConsoleCancelEventHandler 和 System..::.ConsoleCancelEventArgs 一起使用。CancelKeyPress 事件使得控制台应用程序能够截获 Ctrl+C 信号，以使该应用程序确定是继续执行还是终止。有关处理事件的更多信息，请参见使用事件。

使用此事件可显式控制应用程序响应 Ctrl+C 信号的方式。如果应用程序的要求很简单，则可使用 TreatControlCAsInput 属性，而不使用此事件。 使用此事件可显式控制应用程序响应 Ctrl+C 信号的方式。如果应用程序的要求很简单，则可使用 TreatControlCAsInput 属性，而不使用此事件。

此事件的事件处理程序在线程池线程上执行。

下面的示例演示如何使用 CancelKeyPress 事件。

' This example demonstrates:
' the Console.CancelKeyPress event,
' the ConsoleCancelEventHandler delegate,
' the ConsoleCancelEventArgs.SpecialKey property, and
' the ConsoleCancelEventArgs.Cancel property.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim cki As ConsoleKeyInfo

        ' Clear the screen.
        Console.Clear()

        ' Turn off the default system behavior when CTRL+C is pressed. When
        ' Console.TreatControlCAsInput is false, CTRL+C is treated as an
        ' interrupt instead of as input.
        Console.TreatControlCAsInput = False

        ' Establish an event handler to process key press events.
        AddHandler Console.CancelKeyPress, AddressOf myHandler

        While True
            ' Prompt the user.
            Console.Write("Press any key, or 'X' to quit, or ")
            Console.WriteLine("CTRL+C to interrupt the read operation:")

            ' Start a console read operation. Do not display the input.
            cki = Console.ReadKey(True)

            ' Announce the name of the key that was pressed .
            Console.WriteLine("  Key pressed: {0}" & vbCrLf, cki.Key)

            ' Exit if the user pressed the 'X' key.
            If cki.Key = ConsoleKey.X Then Exit While
        End While
    End Sub 'Main

'   When you press CTRL+C, the read operation is interrupted and the
'   console cancel event handler, myHandler, is invoked. Upon entry
'   to the event handler, the Cancel property is false, which means
'   the current process will terminate when the event handler terminates.
'   However, the event handler sets the Cancel property to true, which
'   means the process will not terminate and the read operation will resume.

    Protected Shared Sub myHandler(ByVal sender As Object, _
                                   ByVal args As ConsoleCancelEventArgs)
        ' Announce that the event handler has been invoked.
        Console.WriteLine(vbCrLf & "The read operation has been interrupted.")

        ' Announce which key combination was pressed.
        Console.WriteLine("  Key pressed: {0}", args.SpecialKey)

        ' Announce the initial value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)

        ' Set the Cancel property to true to prevent the process from terminating.
        Console.WriteLine("Setting the Cancel property to true...")
        args.Cancel = True

        ' Announce the new value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)
        Console.WriteLine("The read operation will resume..." & vbCrLf)

    End Sub 'myHandler
End Class 'Sample
'
'This code example produces results similar to the following text:
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: J
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: Enter
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'
'The read operation has been interrupted.
'  Key pressed: ControlC
'  Cancel property: False
'Setting the Cancel property to true...
'  Cancel property: True
'The read operation will resume...
'
'  Key pressed: Q
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: X
'

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using System;

class Sample
{
    public static void Main()
    {
    ConsoleKeyInfo cki;

// Clear the screen.
    Console.Clear();

// Turn off the default system behavior when CTRL+C is pressed. When
// Console.TreatControlCAsInput is false, CTRL+C is treated as an
// interrupt instead of as input.
    Console.TreatControlCAsInput = false;

// Establish an event handler to process key press events.
    Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);
    while (true)
        {
// Prompt the user.
        Console.Write("Press any key, or 'X' to quit, or ");
        Console.WriteLine("CTRL+C to interrupt the read operation:");

// Start a console read operation. Do not display the input.
        cki = Console.ReadKey(true);

// Announce the name of the key that was pressed .
        Console.WriteLine("  Key pressed: {0}\n", cki.Key);

// Exit if the user pressed the 'X' key.
        if (cki.Key == ConsoleKey.X) break;
        }
    }

/*
   When you press CTRL+C, the read operation is interrupted and the
   console cancel event handler, myHandler, is invoked. Upon entry
   to the event handler, the Cancel property is false, which means
   the current process will terminate when the event handler terminates.
   However, the event handler sets the Cancel property to true, which
   means the process will not terminate and the read operation will resume.
*/
    protected static void myHandler(object sender, ConsoleCancelEventArgs args)
    {
// Announce that the event handler has been invoked.
    Console.WriteLine("\nThe read operation has been interrupted.");

// Announce which key combination was pressed.
    Console.WriteLine("  Key pressed: {0}", args.SpecialKey);

// Announce the initial value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);

// Set the Cancel property to true to prevent the process from terminating.
    Console.WriteLine("Setting the Cancel property to true...");
    args.Cancel = true;

// Announce the new value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);
    Console.WriteLine("The read operation will resume...\n");
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
  Key pressed: ControlC
  Cancel property: False
Setting the Cancel property to true...
  Cancel property: True
The read operation will resume...

  Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: X

*/

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using namespace System;

// When you press CTRL+C, the read operation is interrupted and the
// console cancel event handler, myHandler, is invoked. Upon entry
// to the event handler, the Cancel property is false, which means
// the current process will terminate when the event handler terminates.
// However, the event handler sets the Cancel property to true, which
// means the process will not terminate and the read operation will resume.
void OnCancelKeyPressed(Object^ sender,
    ConsoleCancelEventArgs^ args)
{
    // Announce that the event handler has been invoked.
    Console::WriteLine("{0}The read operation has been interrupted.",
        Environment::NewLine);

    // Announce which key combination was pressed.
    Console::WriteLine("  Key pressed: {0}", args->SpecialKey);

    // Announce the initial value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);

    // Set the Cancel property to true to prevent the process from
    // terminating.
    Console::WriteLine("Setting the Cancel property to true...");
    args->Cancel = true;

    // Announce the new value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);
    Console::WriteLine("The read operation will resume...{0}",
        Environment::NewLine);
}

int main()
{
    // Clear the screen.
    Console::Clear();

    // Turn off the default system behavior when CTRL+C is pressed. When
    // Console.TreatControlCAsInput is false, CTRL+C is treated as an
    // interrupt instead of as input.
    Console::TreatControlCAsInput = false;

    // Establish an event handler to process key press events.
    Console::CancelKeyPress +=
        gcnew ConsoleCancelEventHandler(OnCancelKeyPressed);

    while (true)
    {
        // Prompt the user.
        Console::Write("Press any key, or 'X' to quit, or ");
        Console::WriteLine("CTRL+C to interrupt the read operation:");

        // Start a console read operation. Do not display the input.
        ConsoleKeyInfo^ keyInfo = Console::ReadKey(true);

        // Announce the name of the key that was pressed .
        Console::WriteLine("  Key pressed: {0}{1}", keyInfo->Key,
            Environment::NewLine);

        // Exit if the user pressed the 'X' key.
        if (keyInfo->Key == ConsoleKey::X)
        {
            break;
        }
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
Key pressed: ControlC
Cancel property: False
Setting the Cancel property to true...
Cancel property: True
The read operation will resume...

Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: X

*/
  • UIPermission

    用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows 用于修改安全的顶级窗口和子窗口。关联的枚举：UIPermissionWindow..::.SafeTopLevelWindows

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Console 类
Console 成员
System 命名空间
ConsoleCancelEventArgs
ConsoleCancelEventHandler
TreatControlCAsInput


ConsoleCancelEventArgs 类

ConsoleCancelEventArgs 类
成员

为 Console..::.CancelKeyPress 事件提供数据。无法继承此类。 为 Console..::.CancelKeyPress 事件提供数据。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public NotInheritable Class ConsoleCancelEventArgs _
    Inherits EventArgs
[SerializableAttribute]
public sealed class ConsoleCancelEventArgs : EventArgs
[SerializableAttribute]
public ref class ConsoleCancelEventArgs sealed : public EventArgs
[<SealedAttribute>]
[<SerializableAttribute>]
type ConsoleCancelEventArgs =
    class
        inherit EventArgs
    end

通过同时按下 Control 修改键和 C 控制台键 (Ctrl+C)，或者同时按下 Control 修改键和 Break 控制台键 (Ctrl+Break)，用户可以中断控制台应用程序进程。因此，.NET Framework 对 Console..::.CancelKeyPress 事件的事件处理程序提供了 ConsoleCancelEventArgs 对象。 通过同时按下 Control 修改键和 C 控制台键 (Ctrl+C)，或者同时按下 Control 修改键和 Break 控制台键 (Ctrl+Break)，用户可以中断控制台应用程序进程。因此，.NET Framework 对 Console..::.CancelKeyPress 事件的事件处理程序提供了 ConsoleCancelEventArgs 对象。

如果按下 Ctrl+C 并且在事件处理程序中将 Cancel 属性设置为 true，进程将继续；否则，进程将终止。当按下 Ctrl+Break 时，如果将 Cancel 属性设置为 false，进程将终止，而如果将 Cancel 属性设置为 true，将引发异常。 如果按下 Ctrl+C 并且在事件处理程序中将 Cancel 属性设置为 true，进程将继续；否则，进程将终止。当按下 Ctrl+Break 时，如果将 Cancel 属性设置为 false，进程将终止，而如果将 Cancel 属性设置为 true，将引发异常。

下面的代码示例演示如何使用 ConsoleCancelEventArgs 类来处理事件。

' This example demonstrates:
' the Console.CancelKeyPress event,
' the ConsoleCancelEventHandler delegate,
' the ConsoleCancelEventArgs.SpecialKey property, and
' the ConsoleCancelEventArgs.Cancel property.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim cki As ConsoleKeyInfo

        ' Clear the screen.
        Console.Clear()

        ' Turn off the default system behavior when CTRL+C is pressed. When
        ' Console.TreatControlCAsInput is false, CTRL+C is treated as an
        ' interrupt instead of as input.
        Console.TreatControlCAsInput = False

        ' Establish an event handler to process key press events.
        AddHandler Console.CancelKeyPress, AddressOf myHandler

        While True
            ' Prompt the user.
            Console.Write("Press any key, or 'X' to quit, or ")
            Console.WriteLine("CTRL+C to interrupt the read operation:")

            ' Start a console read operation. Do not display the input.
            cki = Console.ReadKey(True)

            ' Announce the name of the key that was pressed .
            Console.WriteLine("  Key pressed: {0}" & vbCrLf, cki.Key)

            ' Exit if the user pressed the 'X' key.
            If cki.Key = ConsoleKey.X Then Exit While
        End While
    End Sub 'Main

'   When you press CTRL+C, the read operation is interrupted and the
'   console cancel event handler, myHandler, is invoked. Upon entry
'   to the event handler, the Cancel property is false, which means
'   the current process will terminate when the event handler terminates.
'   However, the event handler sets the Cancel property to true, which
'   means the process will not terminate and the read operation will resume.

    Protected Shared Sub myHandler(ByVal sender As Object, _
                                   ByVal args As ConsoleCancelEventArgs)
        ' Announce that the event handler has been invoked.
        Console.WriteLine(vbCrLf & "The read operation has been interrupted.")

        ' Announce which key combination was pressed.
        Console.WriteLine("  Key pressed: {0}", args.SpecialKey)

        ' Announce the initial value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)

        ' Set the Cancel property to true to prevent the process from terminating.
        Console.WriteLine("Setting the Cancel property to true...")
        args.Cancel = True

        ' Announce the new value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)
        Console.WriteLine("The read operation will resume..." & vbCrLf)

    End Sub 'myHandler
End Class 'Sample
'
'This code example produces results similar to the following text:
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: J
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: Enter
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'
'The read operation has been interrupted.
'  Key pressed: ControlC
'  Cancel property: False
'Setting the Cancel property to true...
'  Cancel property: True
'The read operation will resume...
'
'  Key pressed: Q
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: X
'

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using System;

class Sample
{
    public static void Main()
    {
    ConsoleKeyInfo cki;

// Clear the screen.
    Console.Clear();

// Turn off the default system behavior when CTRL+C is pressed. When
// Console.TreatControlCAsInput is false, CTRL+C is treated as an
// interrupt instead of as input.
    Console.TreatControlCAsInput = false;

// Establish an event handler to process key press events.
    Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);
    while (true)
        {
// Prompt the user.
        Console.Write("Press any key, or 'X' to quit, or ");
        Console.WriteLine("CTRL+C to interrupt the read operation:");

// Start a console read operation. Do not display the input.
        cki = Console.ReadKey(true);

// Announce the name of the key that was pressed .
        Console.WriteLine("  Key pressed: {0}\n", cki.Key);

// Exit if the user pressed the 'X' key.
        if (cki.Key == ConsoleKey.X) break;
        }
    }

/*
   When you press CTRL+C, the read operation is interrupted and the
   console cancel event handler, myHandler, is invoked. Upon entry
   to the event handler, the Cancel property is false, which means
   the current process will terminate when the event handler terminates.
   However, the event handler sets the Cancel property to true, which
   means the process will not terminate and the read operation will resume.
*/
    protected static void myHandler(object sender, ConsoleCancelEventArgs args)
    {
// Announce that the event handler has been invoked.
    Console.WriteLine("\nThe read operation has been interrupted.");

// Announce which key combination was pressed.
    Console.WriteLine("  Key pressed: {0}", args.SpecialKey);

// Announce the initial value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);

// Set the Cancel property to true to prevent the process from terminating.
    Console.WriteLine("Setting the Cancel property to true...");
    args.Cancel = true;

// Announce the new value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);
    Console.WriteLine("The read operation will resume...\n");
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
  Key pressed: ControlC
  Cancel property: False
Setting the Cancel property to true...
  Cancel property: True
The read operation will resume...

  Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: X

*/

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using namespace System;

// When you press CTRL+C, the read operation is interrupted and the
// console cancel event handler, myHandler, is invoked. Upon entry
// to the event handler, the Cancel property is false, which means
// the current process will terminate when the event handler terminates.
// However, the event handler sets the Cancel property to true, which
// means the process will not terminate and the read operation will resume.
void OnCancelKeyPressed(Object^ sender,
    ConsoleCancelEventArgs^ args)
{
    // Announce that the event handler has been invoked.
    Console::WriteLine("{0}The read operation has been interrupted.",
        Environment::NewLine);

    // Announce which key combination was pressed.
    Console::WriteLine("  Key pressed: {0}", args->SpecialKey);

    // Announce the initial value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);

    // Set the Cancel property to true to prevent the process from
    // terminating.
    Console::WriteLine("Setting the Cancel property to true...");
    args->Cancel = true;

    // Announce the new value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);
    Console::WriteLine("The read operation will resume...{0}",
        Environment::NewLine);
}

int main()
{
    // Clear the screen.
    Console::Clear();

    // Turn off the default system behavior when CTRL+C is pressed. When
    // Console.TreatControlCAsInput is false, CTRL+C is treated as an
    // interrupt instead of as input.
    Console::TreatControlCAsInput = false;

    // Establish an event handler to process key press events.
    Console::CancelKeyPress +=
        gcnew ConsoleCancelEventHandler(OnCancelKeyPressed);

    while (true)
    {
        // Prompt the user.
        Console::Write("Press any key, or 'X' to quit, or ");
        Console::WriteLine("CTRL+C to interrupt the read operation:");

        // Start a console read operation. Do not display the input.
        ConsoleKeyInfo^ keyInfo = Console::ReadKey(true);

        // Announce the name of the key that was pressed .
        Console::WriteLine("  Key pressed: {0}{1}", keyInfo->Key,
            Environment::NewLine);

        // Exit if the user pressed the 'X' key.
        if (keyInfo->Key == ConsoleKey::X)
        {
            break;
        }
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
Key pressed: ControlC
Cancel property: False
Setting the Cancel property to true...
Cancel property: True
The read operation will resume...

Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: X

*/

System System..::.ConsoleCancelEventArgsConsoleCancelEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleCancelEventArgs 成员
System 命名空间


ConsoleCancelEventArgs 成员

ConsoleCancelEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConsoleCancelEventArgs 类

为 Console..::.CancelKeyPress 事件提供数据。无法继承此类。 为 Console..::.CancelKeyPress 事件提供数据。无法继承此类。

ConsoleCancelEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ConsoleCancelEventArgs 类
System 命名空间


ConsoleCancelEventArgs 方法

ConsoleCancelEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConsoleCancelEventArgs 类

ConsoleCancelEventArgs 类型公开以下成员。

名称 说明
页首

参考

ConsoleCancelEventArgs 类
System 命名空间


ConsoleCancelEventArgs 属性

ConsoleCancelEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConsoleCancelEventArgs 类

ConsoleCancelEventArgs 类型公开以下成员。

名称 说明
页首

参考

ConsoleCancelEventArgs 类
System 命名空间


ConsoleCancelEventArgs ..::.Cancel 属性

ConsoleCancelEventArgs
.
.
::
.
Cancel 属性
ConsoleCancelEventArgs 类

获取或设置一个值，该值指示同时按下 Control 修改键和 C 控制台键 (Ctrl+C) 是否会终止当前进程。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property Cancel As Boolean
    Get
    Set
public bool Cancel { get; set; }
public:
property bool Cancel {
    bool get ();
    void set (bool value);
}
member Cancel : bool with get, set

属性值

类型： System Boolean
如果当前进程在事件处理程序结束时应继续，则为 true；如果当前进程应终止，则为 false。
异常 | 条件
InvalidOperationException | 在设置操作中指定了 true，并且事件是由同时按下 Control 修改键和 Break 控制台键 (Ctrl+Break) 引起的。

当调用 CancelKeyPress 事件的处理程序时，Cancel 属性将自动初始化为 false。当事件处理程序结束时，Cancel 属性的值确定当前进程是继续还是终止。 当调用 CancelKeyPress 事件的处理程序时，Cancel 属性将自动初始化为 false。当事件处理程序结束时，Cancel 属性的值确定当前进程是继续还是终止。

在按下 Ctrl+C 后的设置操作中，指定 true 以指示当前进程在事件处理程序结束时应继续，或者指定 false 以指示当前进程应终止。

在按下 Ctrl+Break 后的设置操作中，不管 Cancel 属性的设置如何，当前进程都将终止。也就是说，如果按下 Ctrl+Break，您将无法阻止当前进程的终止。此外，将 Cancel 属性设置为 false 将不起任何作用，但是如果指定为 true，将引发异常。 在按下 Ctrl+Break 后的设置操作中，不管 Cancel 属性的设置如何，当前进程都将终止。也就是说，如果按下 Ctrl+Break，您将无法阻止当前进程的终止。此外，将 Cancel 属性设置为 false 将不起任何作用，但是如果指定为 true，将引发异常。 在按下 Ctrl+Break 后的设置操作中，不管 Cancel 属性的设置如何，当前进程都将终止。也就是说，如果按下 Ctrl+Break，您将无法阻止当前进程的终止。此外，将 Cancel 属性设置为 false 将不起任何作用，但是如果指定为 true，将引发异常。

下面的代码示例演示如何使用 Cancel 属性来处理事件。

' This example demonstrates:
' the Console.CancelKeyPress event,
' the ConsoleCancelEventHandler delegate,
' the ConsoleCancelEventArgs.SpecialKey property, and
' the ConsoleCancelEventArgs.Cancel property.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim cki As ConsoleKeyInfo

        ' Clear the screen.
        Console.Clear()

        ' Turn off the default system behavior when CTRL+C is pressed. When
        ' Console.TreatControlCAsInput is false, CTRL+C is treated as an
        ' interrupt instead of as input.
        Console.TreatControlCAsInput = False

        ' Establish an event handler to process key press events.
        AddHandler Console.CancelKeyPress, AddressOf myHandler

        While True
            ' Prompt the user.
            Console.Write("Press any key, or 'X' to quit, or ")
            Console.WriteLine("CTRL+C to interrupt the read operation:")

            ' Start a console read operation. Do not display the input.
            cki = Console.ReadKey(True)

            ' Announce the name of the key that was pressed .
            Console.WriteLine("  Key pressed: {0}" & vbCrLf, cki.Key)

            ' Exit if the user pressed the 'X' key.
            If cki.Key = ConsoleKey.X Then Exit While
        End While
    End Sub 'Main

'   When you press CTRL+C, the read operation is interrupted and the
'   console cancel event handler, myHandler, is invoked. Upon entry
'   to the event handler, the Cancel property is false, which means
'   the current process will terminate when the event handler terminates.
'   However, the event handler sets the Cancel property to true, which
'   means the process will not terminate and the read operation will resume.

    Protected Shared Sub myHandler(ByVal sender As Object, _
                                   ByVal args As ConsoleCancelEventArgs)
        ' Announce that the event handler has been invoked.
        Console.WriteLine(vbCrLf & "The read operation has been interrupted.")

        ' Announce which key combination was pressed.
        Console.WriteLine("  Key pressed: {0}", args.SpecialKey)

        ' Announce the initial value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)

        ' Set the Cancel property to true to prevent the process from terminating.
        Console.WriteLine("Setting the Cancel property to true...")
        args.Cancel = True

        ' Announce the new value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)
        Console.WriteLine("The read operation will resume..." & vbCrLf)

    End Sub 'myHandler
End Class 'Sample
'
'This code example produces results similar to the following text:
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: J
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: Enter
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'
'The read operation has been interrupted.
'  Key pressed: ControlC
'  Cancel property: False
'Setting the Cancel property to true...
'  Cancel property: True
'The read operation will resume...
'
'  Key pressed: Q
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: X
'

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using System;

class Sample
{
    public static void Main()
    {
    ConsoleKeyInfo cki;

// Clear the screen.
    Console.Clear();

// Turn off the default system behavior when CTRL+C is pressed. When
// Console.TreatControlCAsInput is false, CTRL+C is treated as an
// interrupt instead of as input.
    Console.TreatControlCAsInput = false;

// Establish an event handler to process key press events.
    Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);
    while (true)
        {
// Prompt the user.
        Console.Write("Press any key, or 'X' to quit, or ");
        Console.WriteLine("CTRL+C to interrupt the read operation:");

// Start a console read operation. Do not display the input.
        cki = Console.ReadKey(true);

// Announce the name of the key that was pressed .
        Console.WriteLine("  Key pressed: {0}\n", cki.Key);

// Exit if the user pressed the 'X' key.
        if (cki.Key == ConsoleKey.X) break;
        }
    }

/*
   When you press CTRL+C, the read operation is interrupted and the
   console cancel event handler, myHandler, is invoked. Upon entry
   to the event handler, the Cancel property is false, which means
   the current process will terminate when the event handler terminates.
   However, the event handler sets the Cancel property to true, which
   means the process will not terminate and the read operation will resume.
*/
    protected static void myHandler(object sender, ConsoleCancelEventArgs args)
    {
// Announce that the event handler has been invoked.
    Console.WriteLine("\nThe read operation has been interrupted.");

// Announce which key combination was pressed.
    Console.WriteLine("  Key pressed: {0}", args.SpecialKey);

// Announce the initial value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);

// Set the Cancel property to true to prevent the process from terminating.
    Console.WriteLine("Setting the Cancel property to true...");
    args.Cancel = true;

// Announce the new value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);
    Console.WriteLine("The read operation will resume...\n");
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
  Key pressed: ControlC
  Cancel property: False
Setting the Cancel property to true...
  Cancel property: True
The read operation will resume...

  Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: X

*/

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using namespace System;

// When you press CTRL+C, the read operation is interrupted and the
// console cancel event handler, myHandler, is invoked. Upon entry
// to the event handler, the Cancel property is false, which means
// the current process will terminate when the event handler terminates.
// However, the event handler sets the Cancel property to true, which
// means the process will not terminate and the read operation will resume.
void OnCancelKeyPressed(Object^ sender,
    ConsoleCancelEventArgs^ args)
{
    // Announce that the event handler has been invoked.
    Console::WriteLine("{0}The read operation has been interrupted.",
        Environment::NewLine);

    // Announce which key combination was pressed.
    Console::WriteLine("  Key pressed: {0}", args->SpecialKey);

    // Announce the initial value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);

    // Set the Cancel property to true to prevent the process from
    // terminating.
    Console::WriteLine("Setting the Cancel property to true...");
    args->Cancel = true;

    // Announce the new value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);
    Console::WriteLine("The read operation will resume...{0}",
        Environment::NewLine);
}

int main()
{
    // Clear the screen.
    Console::Clear();

    // Turn off the default system behavior when CTRL+C is pressed. When
    // Console.TreatControlCAsInput is false, CTRL+C is treated as an
    // interrupt instead of as input.
    Console::TreatControlCAsInput = false;

    // Establish an event handler to process key press events.
    Console::CancelKeyPress +=
        gcnew ConsoleCancelEventHandler(OnCancelKeyPressed);

    while (true)
    {
        // Prompt the user.
        Console::Write("Press any key, or 'X' to quit, or ");
        Console::WriteLine("CTRL+C to interrupt the read operation:");

        // Start a console read operation. Do not display the input.
        ConsoleKeyInfo^ keyInfo = Console::ReadKey(true);

        // Announce the name of the key that was pressed .
        Console::WriteLine("  Key pressed: {0}{1}", keyInfo->Key,
            Environment::NewLine);

        // Exit if the user pressed the 'X' key.
        if (keyInfo->Key == ConsoleKey::X)
        {
            break;
        }
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
Key pressed: ControlC
Cancel property: False
Setting the Cancel property to true...
Cancel property: True
The read operation will resume...

Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: X

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleCancelEventArgs 类
ConsoleCancelEventArgs 成员
System 命名空间
ConsoleCancelEventHandler
ConsoleKey
ConsoleModifiers
SpecialKey


ConsoleCancelEventArgs ..::.SpecialKey 属性

ConsoleCancelEventArgs
.
.
::
.
SpecialKey 属性
ConsoleCancelEventArgs 类

获取中断当前进程的修改键和控制台键的组合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property SpecialKey As ConsoleSpecialKey
    Get
public ConsoleSpecialKey SpecialKey { get; }
public:
property ConsoleSpecialKey SpecialKey {
    ConsoleSpecialKey get ();
}
member SpecialKey : ConsoleSpecialKey

属性值

类型： System ConsoleSpecialKey
System..::.ConsoleSpecialKey 值之一。没有默认值。 System..::.ConsoleSpecialKey 值之一。没有默认值。

下面的代码示例演示如何使用 SpecialKey 属性来处理事件。

' This example demonstrates:
' the Console.CancelKeyPress event,
' the ConsoleCancelEventHandler delegate,
' the ConsoleCancelEventArgs.SpecialKey property, and
' the ConsoleCancelEventArgs.Cancel property.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim cki As ConsoleKeyInfo

        ' Clear the screen.
        Console.Clear()

        ' Turn off the default system behavior when CTRL+C is pressed. When
        ' Console.TreatControlCAsInput is false, CTRL+C is treated as an
        ' interrupt instead of as input.
        Console.TreatControlCAsInput = False

        ' Establish an event handler to process key press events.
        AddHandler Console.CancelKeyPress, AddressOf myHandler

        While True
            ' Prompt the user.
            Console.Write("Press any key, or 'X' to quit, or ")
            Console.WriteLine("CTRL+C to interrupt the read operation:")

            ' Start a console read operation. Do not display the input.
            cki = Console.ReadKey(True)

            ' Announce the name of the key that was pressed .
            Console.WriteLine("  Key pressed: {0}" & vbCrLf, cki.Key)

            ' Exit if the user pressed the 'X' key.
            If cki.Key = ConsoleKey.X Then Exit While
        End While
    End Sub 'Main

'   When you press CTRL+C, the read operation is interrupted and the
'   console cancel event handler, myHandler, is invoked. Upon entry
'   to the event handler, the Cancel property is false, which means
'   the current process will terminate when the event handler terminates.
'   However, the event handler sets the Cancel property to true, which
'   means the process will not terminate and the read operation will resume.

    Protected Shared Sub myHandler(ByVal sender As Object, _
                                   ByVal args As ConsoleCancelEventArgs)
        ' Announce that the event handler has been invoked.
        Console.WriteLine(vbCrLf & "The read operation has been interrupted.")

        ' Announce which key combination was pressed.
        Console.WriteLine("  Key pressed: {0}", args.SpecialKey)

        ' Announce the initial value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)

        ' Set the Cancel property to true to prevent the process from terminating.
        Console.WriteLine("Setting the Cancel property to true...")
        args.Cancel = True

        ' Announce the new value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)
        Console.WriteLine("The read operation will resume..." & vbCrLf)

    End Sub 'myHandler
End Class 'Sample
'
'This code example produces results similar to the following text:
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: J
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: Enter
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'
'The read operation has been interrupted.
'  Key pressed: ControlC
'  Cancel property: False
'Setting the Cancel property to true...
'  Cancel property: True
'The read operation will resume...
'
'  Key pressed: Q
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: X
'

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using System;

class Sample
{
    public static void Main()
    {
    ConsoleKeyInfo cki;

// Clear the screen.
    Console.Clear();

// Turn off the default system behavior when CTRL+C is pressed. When
// Console.TreatControlCAsInput is false, CTRL+C is treated as an
// interrupt instead of as input.
    Console.TreatControlCAsInput = false;

// Establish an event handler to process key press events.
    Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);
    while (true)
        {
// Prompt the user.
        Console.Write("Press any key, or 'X' to quit, or ");
        Console.WriteLine("CTRL+C to interrupt the read operation:");

// Start a console read operation. Do not display the input.
        cki = Console.ReadKey(true);

// Announce the name of the key that was pressed .
        Console.WriteLine("  Key pressed: {0}\n", cki.Key);

// Exit if the user pressed the 'X' key.
        if (cki.Key == ConsoleKey.X) break;
        }
    }

/*
   When you press CTRL+C, the read operation is interrupted and the
   console cancel event handler, myHandler, is invoked. Upon entry
   to the event handler, the Cancel property is false, which means
   the current process will terminate when the event handler terminates.
   However, the event handler sets the Cancel property to true, which
   means the process will not terminate and the read operation will resume.
*/
    protected static void myHandler(object sender, ConsoleCancelEventArgs args)
    {
// Announce that the event handler has been invoked.
    Console.WriteLine("\nThe read operation has been interrupted.");

// Announce which key combination was pressed.
    Console.WriteLine("  Key pressed: {0}", args.SpecialKey);

// Announce the initial value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);

// Set the Cancel property to true to prevent the process from terminating.
    Console.WriteLine("Setting the Cancel property to true...");
    args.Cancel = true;

// Announce the new value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);
    Console.WriteLine("The read operation will resume...\n");
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
  Key pressed: ControlC
  Cancel property: False
Setting the Cancel property to true...
  Cancel property: True
The read operation will resume...

  Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: X

*/

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using namespace System;

// When you press CTRL+C, the read operation is interrupted and the
// console cancel event handler, myHandler, is invoked. Upon entry
// to the event handler, the Cancel property is false, which means
// the current process will terminate when the event handler terminates.
// However, the event handler sets the Cancel property to true, which
// means the process will not terminate and the read operation will resume.
void OnCancelKeyPressed(Object^ sender,
    ConsoleCancelEventArgs^ args)
{
    // Announce that the event handler has been invoked.
    Console::WriteLine("{0}The read operation has been interrupted.",
        Environment::NewLine);

    // Announce which key combination was pressed.
    Console::WriteLine("  Key pressed: {0}", args->SpecialKey);

    // Announce the initial value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);

    // Set the Cancel property to true to prevent the process from
    // terminating.
    Console::WriteLine("Setting the Cancel property to true...");
    args->Cancel = true;

    // Announce the new value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);
    Console::WriteLine("The read operation will resume...{0}",
        Environment::NewLine);
}

int main()
{
    // Clear the screen.
    Console::Clear();

    // Turn off the default system behavior when CTRL+C is pressed. When
    // Console.TreatControlCAsInput is false, CTRL+C is treated as an
    // interrupt instead of as input.
    Console::TreatControlCAsInput = false;

    // Establish an event handler to process key press events.
    Console::CancelKeyPress +=
        gcnew ConsoleCancelEventHandler(OnCancelKeyPressed);

    while (true)
    {
        // Prompt the user.
        Console::Write("Press any key, or 'X' to quit, or ");
        Console::WriteLine("CTRL+C to interrupt the read operation:");

        // Start a console read operation. Do not display the input.
        ConsoleKeyInfo^ keyInfo = Console::ReadKey(true);

        // Announce the name of the key that was pressed .
        Console::WriteLine("  Key pressed: {0}{1}", keyInfo->Key,
            Environment::NewLine);

        // Exit if the user pressed the 'X' key.
        if (keyInfo->Key == ConsoleKey::X)
        {
            break;
        }
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
Key pressed: ControlC
Cancel property: False
Setting the Cancel property to true...
Cancel property: True
The read operation will resume...

Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: X

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleCancelEventArgs 类
ConsoleCancelEventArgs 成员
System 命名空间


ConsoleCancelEventHandler 委托

ConsoleCancelEventHandler 委托

表示将要处理 System..::.Console 的 CancelKeyPress 事件的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Sub ConsoleCancelEventHandler ( _
    sender As Object, _
    e As ConsoleCancelEventArgs _
)
public delegate void ConsoleCancelEventHandler(
    Object sender,
    ConsoleCancelEventArgs e
)
public delegate void ConsoleCancelEventHandler(
    Object^ sender,
    ConsoleCancelEventArgs^ e
)
type ConsoleCancelEventHandler =
    delegate of
        sender:Object *
        e:ConsoleCancelEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System ConsoleCancelEventArgs
包含事件数据的 System..::.ConsoleCancelEventArgs 对象。

当创建 ConsoleCancelEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 ConsoleCancelEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 ConsoleCancelEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 ConsoleCancelEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。

下面的代码示例演示如何使用 ConsoleCancelEventHandler 类处理事件。

' This example demonstrates:
' the Console.CancelKeyPress event,
' the ConsoleCancelEventHandler delegate,
' the ConsoleCancelEventArgs.SpecialKey property, and
' the ConsoleCancelEventArgs.Cancel property.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim cki As ConsoleKeyInfo

        ' Clear the screen.
        Console.Clear()

        ' Turn off the default system behavior when CTRL+C is pressed. When
        ' Console.TreatControlCAsInput is false, CTRL+C is treated as an
        ' interrupt instead of as input.
        Console.TreatControlCAsInput = False

        ' Establish an event handler to process key press events.
        AddHandler Console.CancelKeyPress, AddressOf myHandler

        While True
            ' Prompt the user.
            Console.Write("Press any key, or 'X' to quit, or ")
            Console.WriteLine("CTRL+C to interrupt the read operation:")

            ' Start a console read operation. Do not display the input.
            cki = Console.ReadKey(True)

            ' Announce the name of the key that was pressed .
            Console.WriteLine("  Key pressed: {0}" & vbCrLf, cki.Key)

            ' Exit if the user pressed the 'X' key.
            If cki.Key = ConsoleKey.X Then Exit While
        End While
    End Sub 'Main

'   When you press CTRL+C, the read operation is interrupted and the
'   console cancel event handler, myHandler, is invoked. Upon entry
'   to the event handler, the Cancel property is false, which means
'   the current process will terminate when the event handler terminates.
'   However, the event handler sets the Cancel property to true, which
'   means the process will not terminate and the read operation will resume.

    Protected Shared Sub myHandler(ByVal sender As Object, _
                                   ByVal args As ConsoleCancelEventArgs)
        ' Announce that the event handler has been invoked.
        Console.WriteLine(vbCrLf & "The read operation has been interrupted.")

        ' Announce which key combination was pressed.
        Console.WriteLine("  Key pressed: {0}", args.SpecialKey)

        ' Announce the initial value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)

        ' Set the Cancel property to true to prevent the process from terminating.
        Console.WriteLine("Setting the Cancel property to true...")
        args.Cancel = True

        ' Announce the new value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)
        Console.WriteLine("The read operation will resume..." & vbCrLf)

    End Sub 'myHandler
End Class 'Sample
'
'This code example produces results similar to the following text:
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: J
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: Enter
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'
'The read operation has been interrupted.
'  Key pressed: ControlC
'  Cancel property: False
'Setting the Cancel property to true...
'  Cancel property: True
'The read operation will resume...
'
'  Key pressed: Q
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: X
'

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using System;

class Sample
{
    public static void Main()
    {
    ConsoleKeyInfo cki;

// Clear the screen.
    Console.Clear();

// Turn off the default system behavior when CTRL+C is pressed. When
// Console.TreatControlCAsInput is false, CTRL+C is treated as an
// interrupt instead of as input.
    Console.TreatControlCAsInput = false;

// Establish an event handler to process key press events.
    Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);
    while (true)
        {
// Prompt the user.
        Console.Write("Press any key, or 'X' to quit, or ");
        Console.WriteLine("CTRL+C to interrupt the read operation:");

// Start a console read operation. Do not display the input.
        cki = Console.ReadKey(true);

// Announce the name of the key that was pressed .
        Console.WriteLine("  Key pressed: {0}\n", cki.Key);

// Exit if the user pressed the 'X' key.
        if (cki.Key == ConsoleKey.X) break;
        }
    }

/*
   When you press CTRL+C, the read operation is interrupted and the
   console cancel event handler, myHandler, is invoked. Upon entry
   to the event handler, the Cancel property is false, which means
   the current process will terminate when the event handler terminates.
   However, the event handler sets the Cancel property to true, which
   means the process will not terminate and the read operation will resume.
*/
    protected static void myHandler(object sender, ConsoleCancelEventArgs args)
    {
// Announce that the event handler has been invoked.
    Console.WriteLine("\nThe read operation has been interrupted.");

// Announce which key combination was pressed.
    Console.WriteLine("  Key pressed: {0}", args.SpecialKey);

// Announce the initial value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);

// Set the Cancel property to true to prevent the process from terminating.
    Console.WriteLine("Setting the Cancel property to true...");
    args.Cancel = true;

// Announce the new value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);
    Console.WriteLine("The read operation will resume...\n");
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
  Key pressed: ControlC
  Cancel property: False
Setting the Cancel property to true...
  Cancel property: True
The read operation will resume...

  Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: X

*/

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using namespace System;

// When you press CTRL+C, the read operation is interrupted and the
// console cancel event handler, myHandler, is invoked. Upon entry
// to the event handler, the Cancel property is false, which means
// the current process will terminate when the event handler terminates.
// However, the event handler sets the Cancel property to true, which
// means the process will not terminate and the read operation will resume.
void OnCancelKeyPressed(Object^ sender,
    ConsoleCancelEventArgs^ args)
{
    // Announce that the event handler has been invoked.
    Console::WriteLine("{0}The read operation has been interrupted.",
        Environment::NewLine);

    // Announce which key combination was pressed.
    Console::WriteLine("  Key pressed: {0}", args->SpecialKey);

    // Announce the initial value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);

    // Set the Cancel property to true to prevent the process from
    // terminating.
    Console::WriteLine("Setting the Cancel property to true...");
    args->Cancel = true;

    // Announce the new value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);
    Console::WriteLine("The read operation will resume...{0}",
        Environment::NewLine);
}

int main()
{
    // Clear the screen.
    Console::Clear();

    // Turn off the default system behavior when CTRL+C is pressed. When
    // Console.TreatControlCAsInput is false, CTRL+C is treated as an
    // interrupt instead of as input.
    Console::TreatControlCAsInput = false;

    // Establish an event handler to process key press events.
    Console::CancelKeyPress +=
        gcnew ConsoleCancelEventHandler(OnCancelKeyPressed);

    while (true)
    {
        // Prompt the user.
        Console::Write("Press any key, or 'X' to quit, or ");
        Console::WriteLine("CTRL+C to interrupt the read operation:");

        // Start a console read operation. Do not display the input.
        ConsoleKeyInfo^ keyInfo = Console::ReadKey(true);

        // Announce the name of the key that was pressed .
        Console::WriteLine("  Key pressed: {0}{1}", keyInfo->Key,
            Environment::NewLine);

        // Exit if the user pressed the 'X' key.
        if (keyInfo->Key == ConsoleKey::X)
        {
            break;
        }
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
Key pressed: ControlC
Cancel property: False
Setting the Cancel property to true...
Cancel property: True
The read operation will resume...

Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: X

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间


ConsoleColor 枚举

ConsoleColor 枚举

指定定义控制台前景色和背景色的常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Enumeration ConsoleColor
[SerializableAttribute]
public enum ConsoleColor
[SerializableAttribute]
public enum class ConsoleColor
[<SerializableAttribute>]
type ConsoleColor
成员名称 | 说明
Black | 黑色。
DarkBlue | 藏蓝色。
DarkGreen | 深绿色。
DarkCyan | 深紫色（深蓝绿色）。
DarkRed | 深红色。
DarkMagenta | 深紫红色。
DarkYellow | 深黄色（赭色）。
Gray | 灰色。
DarkGray | 深灰色。
Blue | 蓝色。
Green | 绿色。
Cyan | 青色（蓝绿色）。
Red | 红色。
Magenta | 紫红色。
Yellow | 黄色。
White | 白色。

下面的代码示例演示与 Console..::.ForegroundColor 和 Console..::.BackgroundColor 属性以及 Console..::.ResetColor 方法结合使用的 System..::.ConsoleColor 枚举。必须在控制台上运行此示例，以查看所描述的颜色效果。 下面的代码示例演示与 Console..::.ForegroundColor 和 Console..::.BackgroundColor 属性以及 Console..::.ResetColor 方法结合使用的 System..::.ConsoleColor 枚举。必须在控制台上运行此示例，以查看所描述的颜色效果。

两个常数 Black 和 White 可以直接使用，然后所有常数（Blue、DarkRed 等）用于在循环中间接使用。首先，使用 GetNames 方法获取常数的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。 两个常数 Black 和 White 可以直接使用，然后所有常数（Blue、DarkRed 等）用于在循环中间接使用。首先，使用 GetNames 方法获取常数的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。 两个常数 Black 和 White 可以直接使用，然后所有常数（Blue、DarkRed 等）用于在循环中间接使用。首先，使用 GetNames 方法获取常数的名称，该方法是从 Enum 类继承的。然后 Enum..::.Parse 方法使用各个名称来创建相应的枚举常数。

Public Module Example
   Public Sub Main()
      ' Get a string array with the names of ConsoleColor enumeration members.
      Dim colorNames() As String = ConsoleColor.GetNames(GetType(ConsoleColor))

      ' Display each foreground color except black on a constant black background.
      Console.WriteLine("All the foreground colors (except Black) on a constant black background:")

      For Each colorName As String In colorNames
         ' Convert the string representing the enum name to the enum value.
         Dim color As ConsoleColor = CType(System.Enum.Parse(GetType(ConsoleColor), _
                                                colorName), ConsoleColor)

         If color = ConsoleColor.Black Then Continue For

         Console.Write("{0,11}: ", colorName)
         Console.BackgroundColor = ConsoleColor.Black
         Console.ForegroundColor = color
         Console.WriteLine("This is foreground color {0}.", colorName)
         ' Restore the original foreground and background colors.
         Console.ResetColor()
      Next
      Console.WriteLine()

      ' Display each background color except white with a constant white foreground.
      Console.WriteLine("All the background colors (except White) with a constant white background:")

      For Each colorName As String In colorNames
         ' Convert the string representing the enum name to the enum value.
         Dim color As ConsoleColor = CType([Enum].Parse(GetType(ConsoleColor), _
                                                colorName), ConsoleColor)

         If color = ConsoleColor.White then Continue For
         Console.Write("{0,11}: ", colorName)
         Console.ForegroundColor = ConsoleColor.White
         Console.BackgroundColor = color
         Console.WriteLine("This is background color {0}.", colorName)
         Console.ResetColor()
      Next
   End Sub
End Module
'The example displays the following output:
' All the foreground colors (except Black) on a constant black background:
'    DarkBlue: This is foreground color DarkBlue.
'   DarkGreen: This is foreground color DarkGreen.
'    DarkCyan: This is foreground color DarkCyan.
'     DarkRed: This is foreground color DarkRed.
' DarkMagenta: This is foreground color DarkMagenta.
'  DarkYellow: This is foreground color DarkYellow.
'        Gray: This is foreground color Gray.
'    DarkGray: This is foreground color DarkGray.
'        Blue: This is foreground color Blue.
'       Green: This is foreground color Green.
'        Cyan: This is foreground color Cyan.
'         Red: This is foreground color Red.
'     Magenta: This is foreground color Magenta.
'      Yellow: This is foreground color Yellow.
'       White: This is foreground color White.
'
' All the background colors (except White) with a constant white background:
'       Black: This is background color Black.
'    DarkBlue: This is background color DarkBlue.
'   DarkGreen: This is background color DarkGreen.
'    DarkCyan: This is background color DarkCyan.
'     DarkRed: This is background color DarkRed.
' DarkMagenta: This is background color DarkMagenta.
'  DarkYellow: This is background color DarkYellow.
'        Gray: This is background color Gray.
'    DarkGray: This is background color DarkGray.
'        Blue: This is background color Blue.
'       Green: This is background color Green.
'        Cyan: This is background color Cyan.
'         Red: This is background color Red.
'     Magenta: This is background color Magenta.
'      Yellow: This is background color Yellow.

using System;

class Example
{
   public static void Main()
   {
      // Get a string array with the names of ConsoleColor enumeration members.
      String[] colorNames = ConsoleColor.GetNames(typeof(ConsoleColor));

      // Display each foreground color except black on a constant black background.
      Console.WriteLine("All the foreground colors (except Black) on a constant black background:");

      foreach (string colorName in colorNames)
      {
         // Convert the string representing the enum name to the enum value.
         ConsoleColor color = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);

         if (color == ConsoleColor.Black) continue;

         Console.Write("{0,11}: ", colorName);
         Console.BackgroundColor = ConsoleColor.Black;
         Console.ForegroundColor = color;
         Console.WriteLine("This is foreground color {0}.", colorName);
         // Restore the original foreground and background colors.
         Console.ResetColor();
      }
      Console.WriteLine();

      // Display each background color except white with a constant white foreground.
      Console.WriteLine("All the background colors (except White) with a constant white background:");

      foreach (string colorName in colorNames)
      {
         // Convert the string representing the enum name to the enum value.
         ConsoleColor color = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);

         if (color == ConsoleColor.White) continue;

         Console.Write("{0,11}: ", colorName);
         Console.ForegroundColor = ConsoleColor.White;
         Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), colorName);
         Console.WriteLine("This is background color {0}.", colorName);
         Console.ResetColor();
      }
   }
}
//The example displays the following output:
// All the foreground colors (except Black) on a constant black background:
//    DarkBlue: This is foreground color DarkBlue.
//   DarkGreen: This is foreground color DarkGreen.
//    DarkCyan: This is foreground color DarkCyan.
//     DarkRed: This is foreground color DarkRed.
// DarkMagenta: This is foreground color DarkMagenta.
//  DarkYellow: This is foreground color DarkYellow.
//        Gray: This is foreground color Gray.
//    DarkGray: This is foreground color DarkGray.
//        Blue: This is foreground color Blue.
//       Green: This is foreground color Green.
//        Cyan: This is foreground color Cyan.
//         Red: This is foreground color Red.
//     Magenta: This is foreground color Magenta.
//      Yellow: This is foreground color Yellow.
//       White: This is foreground color White.
//
// All the background colors (except White) with a constant white background:
//       Black: This is background color Black.
//    DarkBlue: This is background color DarkBlue.
//   DarkGreen: This is background color DarkGreen.
//    DarkCyan: This is background color DarkCyan.
//     DarkRed: This is background color DarkRed.
// DarkMagenta: This is background color DarkMagenta.
//  DarkYellow: This is background color DarkYellow.
//        Gray: This is background color Gray.
//    DarkGray: This is background color DarkGray.
//        Blue: This is background color Blue.
//       Green: This is background color Green.
//        Cyan: This is background color Cyan.
//         Red: This is background color Red.
//     Magenta: This is background color Magenta.
//      Yellow: This is background color Yellow.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Console


ConsoleKey 枚举

ConsoleKey 枚举

指定控制台上的标准键。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Enumeration ConsoleKey
[SerializableAttribute]
public enum ConsoleKey
[SerializableAttribute]
public enum class ConsoleKey
[<SerializableAttribute>]
type ConsoleKey
成员名称 | 说明
Backspace | Backspace 键。
Tab | TAB 键。
Clear | Clear 键。
Enter | Enter 键。
Pause | Pause 键。
Escape | Esc 键。
Spacebar | 空格键。
PageUp | Page Up 键。
PageDown | PAGE DOWN 键。
End | END 键。
Home | HOME 键。
LeftArrow | 向左键。
UpArrow | 向上键。
RightArrow | 向右键。
DownArrow | 向下键。
Select | Select 键。
Print | Print 键。
Execute | EXECUTE 键。
PrintScreen | Print Screen 键。
Insert | Insert 键。
Delete | Del（Delete）键。
Help | HELP 键。
D0 | 0 键。
D1 | 1 键。
D2 | 2 键。
D3 | 3 键。
D4 | 4 键。
D5 | 5 键。
D6 | 6 键。
D7 | 7 键。
D8 | 8 键。
D9 | 9 键。
A | A 键。
B | B 键。
C | C 键。
D | D 键。
E | E 键。
F | F 键。
G | G 键。
H | H 键。
I | I 键。
J | J 键。
K | K 键。
L | L 键。
M | M 键。
N | N 键。
O | O 键。
P | P 键。
Q | Q 键。
R | R 键。
S | S 键。
T | T 键。
U | U 键。
V | V 键。
W | W 键。
X | X 键。
Y | Y 键。
Z | Z 键。
LeftWindows | 左 Windows 徽标键（Microsoft Natural Keyboard，人体工程学键盘）。
RightWindows | 右 Windows 徽标键（Microsoft Natural Keyboard，人体工程学键盘）。
Applications | 应用程序键（Microsoft Natural Keyboard，人体工程学键盘）。
Sleep | 计算机睡眠键。
NumPad0 | 数字键盘上的 0 键。
NumPad1 | 数字键盘上的 1 键。
NumPad2 | 数字键盘上的 2 键。
NumPad3 | 数字键盘上的 3 键。
NumPad4 | 数字键盘上的 4 键。
NumPad5 | 数字键盘上的 5 键。
NumPad6 | 数字键盘上的 6 键。
NumPad7 | 数字键盘上的 7 键。
NumPad8 | 数字键盘上的 8 键。
NumPad9 | 数字键盘上的 9 键。
Multiply | 乘号键。
Add | 加号键。
Separator | 分隔符键。
Subtract | 减号键。
Decimal | 句点键。
Divide | 除号键。
F1 | F1 键。
F2 | F2 键。
F3 | F3 键。
F4 | F4 键。
F5 | F5 键。
F6 | F6 键。
F7 | F7 键。
F8 | F8 键。
F9 | F9 键。
F10 | F10 键。
F11 | F11 键。
F12 | F12 键。
F13 | F13 键。
F14 | F14 键。
F15 | F15 键。
F16 | F16 键。
F17 | F17 键。
F18 | F18 键。
F19 | F19 键。
F20 | F20 键。
F21 | F21 键。
F22 | F22 键。
F23 | F23 键。
F24 | F24 键。
BrowserBack | 浏览器后退键（Windows 2000 或更高版本）。
BrowserForward | 浏览器前进键（Windows 2000 或更高版本）。
BrowserRefresh | 浏览器刷新键（Windows 2000 或更高版本）。
BrowserStop | 浏览器停止键（Windows 2000 或更高版本）。
BrowserSearch | 浏览器搜索键（Windows 2000 或更高版本）。
BrowserFavorites | 浏览器收藏夹键（Windows 2000 或更高版本）。
BrowserHome | 浏览器主页键（Windows 2000 或更高版本）。
VolumeMute | 静音键（Microsoft Natural Keyboard，人体工程学键盘，Windows 2000 或更高版本）。
VolumeDown | 减小音量键（Microsoft Natural Keyboard，人体工程学键盘，Windows 2000 或更高版本）。
VolumeUp | 增大音量键（Microsoft Natural Keyboard，人体工程学键盘，Windows 2000 或更高版本）。
MediaNext | 媒体下一曲目键（Windows 2000 或更高版本）。
MediaPrevious | 媒体上一曲目键（Windows 2000 或更高版本）。
MediaStop | 媒体停止键（Windows 2000 或更高版本）。
MediaPlay | 媒体播放/暂停键（Windows 2000 或更高版本）。
LaunchMail | 启动邮件键（Microsoft Natural Keyboard，人体工程学键盘，Windows 2000 或更高版本）。
LaunchMediaSelect | 选择媒体键（Microsoft Natural Keyboard，人体工程学键盘，Windows 2000 或更高版本）。
LaunchApp1 | 启动应用程序 1 键（Microsoft Natural Keyboard，人体工程学键盘，Windows 2000 或更高版本）。
LaunchApp2 | 启动应用程序 2 键（Microsoft Natural Keyboard，人体工程学键盘，Windows 2000 或更高版本）。
Oem1 | OEM 1 键（特定于 OEM）。
OemPlus | 任何国家/地区键盘上的 OEM 加号键（Windows 2000 或更高版本）。
OemComma | 任何国家/地区键盘上的 OEM 逗号键（Windows 2000 或更高版本）。
OemMinus | 任何国家/地区键盘上的 OEM 减号键（Windows 2000 或更高版本）。
OemPeriod | 任何国家/地区键盘上的 OEM 句点键（Windows 2000 或更高版本）。
Oem2 | OEM 2 键（特定于 OEM）。
Oem3 | OEM 3 键（特定于 OEM）。
Oem4 | OEM 4 键（特定于 OEM）。
Oem5 | OEM 5 键（特定于 OEM）。
Oem6 | OEM 6 键（特定于 OEM）。
Oem7 | OEM 7 键（特定于 OEM）。
Oem8 | OEM 8 键（特定于 OEM）。
Oem102 | OEM 102 键（特定于 OEM）。
Process | IME PROCESS 键。
Packet | PACKET 键（用于通过击键传递 Unicode 字符）。
Attention | ATTN 键。
CrSel | CRSEL（CURSOR SELECT，光标选择）键。
ExSel | EXSEL（EXTEND SELECTION，扩展选择区域）键。
EraseEndOfFile | ERASE EOF 键。
Play | PLAY 键。
Zoom | ZOOM 键。
NoName | 保留以备将来使用的常数。
Pa1 | PA1 键。
OemClear | CLEAR 键（特定于 OEM）。

ConsoleKey 枚举通常用在 System..::.ConsoleKeyInfo 结构中，Console..::.ReadKey 方法返回此结构以指示控制台上被按下的键。

下面的示例使用 ConsoleKey 枚举向用户指示该用户按下了哪个键。

Imports System.Text

Module ConsoleKeyExample

   Public Sub Main()
      Dim input As ConsoleKeyInfo
      Do
         Console.WriteLine("Press a key, together with Alt, Ctrl, or Shift.")
         Console.WriteLine("Press Esc to exit.")
         input = Console.ReadKey(True)

         Dim output As New StringBuilder(String.Format("You pressed {0}", input.Key.ToString()))
         Dim modifiers As Boolean

         If (input.Modifiers And ConsoleModifiers.Alt) = ConsoleModifiers.Alt Then
            output.Append(", together with " + ConsoleModifiers.Alt.ToString())
            modifiers = True
         End If
         If (input.Modifiers And ConsoleModifiers.Control) = ConsoleModifiers.Control Then
            If modifiers Then
               output.Append(" and ")
            Else
               output.Append(", together with ")
               modifiers = True
            End If
            output.Append(ConsoleModifiers.Control.ToString)
         End If
         If (input.Modifiers And ConsoleModifiers.Shift) = ConsoleModifiers.Shift Then
            If modifiers Then
               output.Append(" and ")
            Else
               output.Append(", together with ")
            End If
            output.Append(ConsoleModifiers.Shift.ToString)
         End If
         output.Append(".")
         Console.WriteLine(output.ToString())
         Console.WriteLine()
      Loop While input.Key <> ConsoleKey.Escape
   End Sub
End Module
' The output from a sample console session might appear as follows:
'       Press a key, along with Alt, Ctrl, or Shift.
'       Press Esc to exit.
'       You pressed D.
'
'       Press a key, along with Alt, Ctrl, or Shift.
'       Press Esc to exit.
'       You pressed X, along with Shift.
'
'       Press a key, along with Alt, Ctrl, or Shift.
'       Press Esc to exit.
'       You pressed L, along with Control and Shift.
'
'       Press a key, along with Alt, Ctrl, or Shift.
'       Press Esc to exit.
'       You pressed P, along with Alt and Control and Shift.
'
'       Press a key, along with Alt, Ctrl, or Shift.
'       Press Esc to exit.
'       You pressed Escape.

using System;
using System.Text;

public class ConsoleKeyExample
{
   public static void Main()
   {
      ConsoleKeyInfo input;
      do {
         Console.WriteLine("Press a key, together with Alt, Ctrl, or Shift.");
         Console.WriteLine("Press Esc to exit.");
         input = Console.ReadKey(true);

         StringBuilder output = new StringBuilder(
                       String.Format("You pressed {0}", input.Key.ToString()));
         bool modifiers = false;

         if ((input.Modifiers & ConsoleModifiers.Alt) == ConsoleModifiers.Alt) {
            output.Append(", together with " + ConsoleModifiers.Alt.ToString());
            modifiers = true;
         }
         if ((input.Modifiers & ConsoleModifiers.Control) == ConsoleModifiers.Control)
         {
            if (modifiers) {
               output.Append(" and ");
            }
            else {
               output.Append(", together with ");
               modifiers = true;
            }
            output.Append(ConsoleModifiers.Control.ToString());
         }
         if ((input.Modifiers & ConsoleModifiers.Shift) == ConsoleModifiers.Shift)
         {
            if (modifiers) {
               output.Append(" and ");
            }
            else {
               output.Append(", together with ");
               modifiers = true;
            }
            output.Append(ConsoleModifiers.Shift.ToString());
         }
         output.Append(".");
         Console.WriteLine(output.ToString());
         Console.WriteLine();
      } while (input.Key != ConsoleKey.Escape);
   }
}
// The output from a sample console session might appear as follows:
//       Press a key, along with Alt, Ctrl, or Shift.
//       Press Esc to exit.
//       You pressed D.
//
//       Press a key, along with Alt, Ctrl, or Shift.
//       Press Esc to exit.
//       You pressed X, along with Shift.
//
//       Press a key, along with Alt, Ctrl, or Shift.
//       Press Esc to exit.
//       You pressed L, along with Control and Shift.
//
//       Press a key, along with Alt, Ctrl, or Shift.
//       Press Esc to exit.
//       You pressed P, along with Alt and Control and Shift.
//
//       Press a key, along with Alt, Ctrl, or Shift.
//       Press Esc to exit.
//       You pressed Escape.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间


ConsoleKeyInfo 结构

ConsoleKeyInfo 结构
成员

描述按下的控制台键，包括控制台键表示的字符以及 Shift、Alt 和 Ctrl 修改键的状态。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Structure ConsoleKeyInfo
[SerializableAttribute]
public struct ConsoleKeyInfo
[SerializableAttribute]
public value class ConsoleKeyInfo
[<SealedAttribute>]
[<SerializableAttribute>]
type ConsoleKeyInfo =  struct end

ConsoleKeyInfo 类型不应由用户创建。实际上，它作为调用 Console..::.ReadKey 方法的响应返回给用户。 ConsoleKeyInfo 类型不应由用户创建。实际上，它作为调用 Console..::.ReadKey 方法的响应返回给用户。

ConsoleKeyInfo 对象描述 ConsoleKey 常数和对应于按下的控制台键的 Unicode 字符（如果存在这样的字符）。ConsoleKeyInfo 对象还以 ConsoleModifiers 值的按位组合描述是否在按下控制台键的同时按下了 Shift、Alt 和 Ctrl 修改键中的一个或多个。 ConsoleKeyInfo 对象描述 ConsoleKey 常数和对应于按下的控制台键的 Unicode 字符（如果存在这样的字符）。ConsoleKeyInfo 对象还以 ConsoleModifiers 值的按位组合描述是否在按下控制台键的同时按下了 Shift、Alt 和 Ctrl 修改键中的一个或多个。

下面的代码示例演示如何在读取操作中使用 ConsoleKeyInfo 对象。

Class Example
   Public Shared Sub Main()
      Dim cki As ConsoleKeyInfo
      ' Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = True

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
      Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
      Do
         cki = Console.ReadKey()
         Console.Write(" --- You pressed ")
         If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
         If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
         If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
         Console.WriteLine(cki.Key.ToString)
      Loop While cki.Key <> ConsoleKey.Escape
   End Sub
End Class
' This example displays output similar to the following:
'       Press any combination of CTL, ALT, and SHIFT, and a console key.
'       Press the Escape (Esc) key to quit:
'
'       a --- You pressed A
'       k --- You pressed ALT+K
'         --- You pressed CTL+P
'         --- You pressed RightArrow
'       R --- You pressed SHIFT+R
'                --- You pressed CTL+I
'       j --- You pressed ALT+J
'       O --- You pressed SHIFT+O
'       § --- You pressed CTL+U

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki;
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do
      {
         cki = Console.ReadKey();
         Console.Write(" --- You pressed ");
         if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine(cki.Key.ToString());
       } while (cki.Key != ConsoleKey.Escape);
    }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       a --- You pressed A
//       k --- You pressed ALT+K
//         --- You pressed CTL+P
//         --- You pressed RightArrow
//       R --- You pressed SHIFT+R
//                --- You pressed CTL+I
//       j --- You pressed ALT+J
//       O --- You pressed SHIFT+O
//       § --- You pressed CTL+U
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 成员
System 命名空间
ConsoleModifiers
ConsoleKey


ConsoleKeyInfo 成员

ConsoleKeyInfo 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConsoleKeyInfo 结构

描述按下的控制台键，包括控制台键表示的字符以及 Shift、Alt 和 Ctrl 修改键的状态。

ConsoleKeyInfo 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ConsoleKeyInfo 结构
System 命名空间


ConsoleKeyInfo 构造函数

ConsoleKeyInfo 构造函数
ConsoleKeyInfo 结构

用指定的字符、控制台键和修改键初始化 ConsoleKeyInfo 结构的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    keyChar As Char, _
    key As ConsoleKey, _
    shift As Boolean, _
    alt As Boolean, _
    control As Boolean _
)
public ConsoleKeyInfo(
    char keyChar,
    ConsoleKey key,
    bool shift,
    bool alt,
    bool control
)
public:
ConsoleKeyInfo(
    wchar_t keyChar,
    ConsoleKey key,
    bool shift,
    bool alt,
    bool control
)
new :
        keyChar:char *
        key:ConsoleKey *
        shift:bool *
        alt:bool *
        control:bool -> ConsoleKeyInfo

参数

keyChar
类型： System Char
与 key 参数对应的 Unicode 字符。
key
类型： System ConsoleKey
与 keyChar 参数对应的控制台键。
shift
类型： System Boolean
true 指示按下了 Shift 键；否则为 false。
alt
类型： System Boolean
true 指示按下了 Alt 键；否则为 false。
control
类型： System Boolean
true 指示按下了 Ctrl 键；否则为 false。
异常 | 条件
ArgumentOutOfRangeException | key 参数的数值小于 0 或大于 255。

此类型不应由用户创建。实际上，它作为调用 Console..::.ReadKey 方法的响应返回给用户。 此类型不应由用户创建。实际上，它作为调用 Console..::.ReadKey 方法的响应返回给用户。

ConsoleKeyInfo 类型不指定按下的是左边的还是右边的 Shift、Alt 或 Ctrl 修改键。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
System 命名空间


ConsoleKeyInfo 方法

ConsoleKeyInfo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConsoleKeyInfo 结构

ConsoleKeyInfo 类型公开以下成员。

名称 说明
页首

参考

ConsoleKeyInfo 结构
System 命名空间


ConsoleKeyInfo ..::.Equals 方法

ConsoleKeyInfo
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConsoleKeyInfo 结构

获取一个值，该值指示某对象或指定的 ConsoleKeyInfo 对象是否等于当前的 ConsoleKeyInfo 对象。

名称 说明
页首

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
System 命名空间


ConsoleKeyInfo ..::.Equals 方法 (ConsoleKeyInfo)

ConsoleKeyInfo
.
.
::
.
Equals 方法 (ConsoleKeyInfo)
ConsoleKeyInfo 结构

获取一个值，该值指示指定的 ConsoleKeyInfo 对象是否等于当前的 ConsoleKeyInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As ConsoleKeyInfo _
) As Boolean
public bool Equals(
    ConsoleKeyInfo obj
)
public:
bool Equals(
    ConsoleKeyInfo obj
)
member Equals :
        obj:ConsoleKeyInfo -> bool

参数

obj
类型： System ConsoleKeyInfo
要与当前 ConsoleKeyInfo 对象进行比较的 ConsoleKeyInfo 对象。

返回值

类型： System Boolean
如果 obj 等于当前的 ConsoleKeyInfo 对象，则为 true；否则为 false。

如果两个 ConsoleKeyInfo 对象对应的 KeyChar、Key 和 Modifiers 属性相等，则这两个对象相等。

Equals 方法的执行效果比 ConsoleKeyInfo..::.Equals(Object) 方法略好，因为它不必将 obj 转换为某个对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
Equals 重载
System 命名空间


ConsoleKeyInfo ..::.Equals 方法 (Object)

ConsoleKeyInfo
.
.
::
.
Equals 方法 (Object)
ConsoleKeyInfo 结构

获取一个值，该值指示指定的对象是否等于当前的 ConsoleKeyInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    value As Object _
) As Boolean
public override bool Equals(
    Object value
)
public:
virtual bool Equals(
    Object^ value
) override
abstract Equals :
        value:Object -> bool
override Equals :
        value:Object -> bool

参数

value
类型： System Object
要与当前的 ConsoleKeyInfo 对象进行比较的对象。

返回值

类型： System Boolean
如果 value 为等于当前的 ConsoleKeyInfo 对象的 ConsoleKeyInfo 对象，则为 true；否则为 false。

如果两个 ConsoleKeyInfo 对象对应的 KeyChar、Key 和 Modifiers 属性相等，则这两个对象相等。

下面的代码示例说明了 Equals 方法。

' This example demonstrates the ConsoleKeyInfo.Equals() method.
Imports System
Imports System.Text

Class Sample
    Public Shared Sub Main()
        Dim k1 As String = vbCrLf & "Enter a key ......... "
        Dim k2 As String = vbCrLf & "Enter another key ... "
        Dim key1 As String = ""
        Dim key2 As String = ""
        Dim areKeysEqual As String = "The {0} and {1} keys are {2}equal."
        Dim equalValue As String = ""
        Dim prompt As String = "Press the escape key (ESC) to quit, " & _
                               "or any other key to continue."
        Dim cki1 As ConsoleKeyInfo
        Dim cki2 As ConsoleKeyInfo

        '
        ' The Console.TreatControlCAsInput property prevents this example from
        ' ending if you press CTL+C, however all other operating system keys and
        ' shortcuts, such as ALT+TAB or the Windows Logo key, are still in effect.
        '
        Console.TreatControlCAsInput = True

        ' Request that the user enter two key presses. A key press and any
        ' combination shift, CTRL, and ALT modifier keys is permitted.
        Do
            Console.Write(k1)
            cki1 = Console.ReadKey(False)
            Console.Write(k2)
            cki2 = Console.ReadKey(False)
            Console.WriteLine()
            '
            key1 = KeyCombination(cki1)
            key2 = KeyCombination(cki2)
            If cki1.Equals(cki2) Then
                equalValue = ""
            Else
                equalValue = "not "
            End If
            Console.WriteLine(areKeysEqual, key1, key2, equalValue)
            '
            Console.WriteLine(prompt)
            cki1 = Console.ReadKey(True)
        Loop While cki1.Key <> ConsoleKey.Escape

    End Sub 'Main
    ' Note: This example requires the Escape (Esc) key.

    ' The KeyCombination() method creates a string that specifies what
    ' key and what combination of shift, CTRL, and ALT modifier keys
    ' were pressed simultaneously.
    Protected Shared Function KeyCombination(ByVal sourceCki As ConsoleKeyInfo) As String
        Dim sb As New StringBuilder()
        sb.Length = 0
        Dim keyCombo As String
        If sourceCki.Modifiers <> 0 Then
            If(sourceCki.Modifiers And ConsoleModifiers.Alt) <> 0 Then
                sb.Append("ALT+")
            End If
            If(sourceCki.Modifiers And ConsoleModifiers.Shift) <> 0 Then
                sb.Append("SHIFT+")
            End If
            If(sourceCki.Modifiers And ConsoleModifiers.Control) <> 0 Then
                sb.Append("CTL+")
            End If
        End If
        sb.Append(sourceCki.Key.ToString())
        keyCombo = sb.ToString()
        Return keyCombo

    End Function 'KeyCombination
End Class 'Sample

'
'This example produces results similar to the following output:
'
'Enter a key ......... a
'Enter another key ... a
'The A and A keys are equal.
'Press the escape key (ESC) to quit, or any other key to continue.
'
'Enter a key ......... a
'Enter another key ... A
'The A and SHIFT+A keys are not equal.
'Press the escape key (ESC) to quit, or any other key to continue.
'
'Enter a key ......... S
'Enter another key ...
'The ALT+SHIFT+S and ALT+CTL+F keys are not equal.
'Press the escape key (ESC) to quit, or any other key to continue.
'
'Enter a key .........
'Enter another key ...
'The UpArrow and UpArrow keys are equal.
'Press the escape key (ESC) to quit, or any other key to continue.
'

// This example demonstrates the ConsoleKeyInfo.Equals() method.

using System;
using System.Text;

class Sample
{
    public static void Main()
    {
    string k1 = "\nEnter a key ......... ";
    string k2 = "\nEnter another key ... ";
    string key1 = "";
    string key2 = "";
    string areKeysEqual = "The {0} and {1} keys are {2}equal.";
    string equalValue = "";
    string prompt = "Press the escape key (ESC) to quit, " +
                    "or any other key to continue.";
    ConsoleKeyInfo cki1;
    ConsoleKeyInfo cki2;

//
// The Console.TreatControlCAsInput property prevents this example from
// ending if you press CTL+C, however all other operating system keys and
// shortcuts, such as ALT+TAB or the Windows Logo key, are still in effect.
//
    Console.TreatControlCAsInput = true;

// Request that the user enter two key presses. A key press and any
// combination shift, CTRL, and ALT modifier keys is permitted.
    do
    {
        Console.Write(k1);
        cki1 = Console.ReadKey(false);
        Console.Write(k2);
        cki2 = Console.ReadKey(false);
        Console.WriteLine();
//
        key1 = KeyCombination(cki1);
        key2 = KeyCombination(cki2);
        if (cki1.Equals(cki2))
            equalValue = "";
        else
            equalValue = "not ";
        Console.WriteLine(areKeysEqual, key1, key2, equalValue);
//
        Console.WriteLine(prompt);
        cki1 = Console.ReadKey(true);
    } while (cki1.Key != ConsoleKey.Escape);
// Note: This example requires the Escape (Esc) key.
    }

// The KeyCombination() method creates a string that specifies what
// key and what combination of shift, CTRL, and ALT modifier keys
// were pressed simultaneously.

    protected static string KeyCombination(ConsoleKeyInfo sourceCki)
    {
    StringBuilder sb = new StringBuilder();
    sb.Length = 0;
    string keyCombo;
    if (sourceCki.Modifiers != 0)
        {
        if ((sourceCki.Modifiers & ConsoleModifiers.Alt) != 0)
            sb.Append("ALT+");
        if ((sourceCki.Modifiers & ConsoleModifiers.Shift) != 0)
            sb.Append("SHIFT+");
        if ((sourceCki.Modifiers & ConsoleModifiers.Control) != 0)
            sb.Append("CTL+");
        }
    sb.Append(sourceCki.Key.ToString());
    keyCombo = sb.ToString();
    return keyCombo;
    }
}

/*
This example produces results similar to the following output:

Enter a key ......... a
Enter another key ... a
The A and A keys are equal.
Press the escape key (ESC) to quit, or any other key to continue.

Enter a key ......... a
Enter another key ... A
The A and SHIFT+A keys are not equal.
Press the escape key (ESC) to quit, or any other key to continue.

Enter a key ......... S
Enter another key ...
The ALT+SHIFT+S and ALT+CTL+F keys are not equal.
Press the escape key (ESC) to quit, or any other key to continue.

Enter a key .........
Enter another key ...
The UpArrow and UpArrow keys are equal.
Press the escape key (ESC) to quit, or any other key to continue.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
Equals 重载
System 命名空间


ConsoleKeyInfo ..::.GetHashCode 方法

ConsoleKeyInfo
.
.
::
.
GetHashCode 方法
ConsoleKeyInfo 结构

返回当前 ConsoleKeyInfo 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

由 GetHashCode 方法返回的值不适合用于区分两个 ConsoleKeyInfo 对象。如果您的应用程序需要唯一的哈希代码，则请用您自己的方法来重写 GetHashCode 方法。 由 GetHashCode 方法返回的值不适合用于区分两个 ConsoleKeyInfo 对象。如果您的应用程序需要唯一的哈希代码，则请用您自己的方法来重写 GetHashCode 方法。

下面的代码示例说明了 GetHashCode 方法。

' This example demonstrates the ConsoleKeyInfo.GetHashCode() method.
Imports System
Imports System.Text

Class Sample
    Public Shared Sub Main()
        Dim k1 As String = vbCrLf & "Enter a key ......... "
        Dim key1 As String = ""
        Dim hashCodeFmt As String = "The hash code for the {0} key is {1}."
        Dim prompt As String = "Press the escape key (ESC) to quit, " & _
                               "or any other key to continue."
        Dim cki1 As ConsoleKeyInfo
        Dim hashCode As Integer = 0

        '
        ' The Console.TreatControlCAsInput property prevents this example from
        ' ending if you press CTL+C, however all other operating system keys and
        ' shortcuts, such as ALT+TAB or the Windows Logo key, are still in effect.
        '
        Console.TreatControlCAsInput = True

        ' Request that the user enter two key presses. A key press and any
        ' combination shift, CTRL, and ALT modifier keys is permitted.
        Do
            Console.Write(k1)
            cki1 = Console.ReadKey(False)
            Console.WriteLine()
            '
            key1 = KeyCombination(cki1)
            hashCode = cki1.GetHashCode()
            Console.WriteLine(hashCodeFmt, key1, hashCode)
            '
            Console.WriteLine(prompt)
            cki1 = Console.ReadKey(True)
        Loop While cki1.Key <> ConsoleKey.Escape

    End Sub 'Main
     ' Note: This example requires the Escape (Esc) key.

    ' The KeyCombination() method creates a string that specifies what
    ' key and what combination of shift, CTRL, and ALT modifier keys
    ' were pressed simultaneously.
    Protected Shared Function KeyCombination(ByVal sourceCki As ConsoleKeyInfo) As String
        Dim sb As New StringBuilder()
        sb.Length = 0
        Dim keyCombo As String
        If sourceCki.Modifiers <> 0 Then
            If(sourceCki.Modifiers And ConsoleModifiers.Alt) <> 0 Then
                sb.Append("ALT+")
            End If
            If(sourceCki.Modifiers And ConsoleModifiers.Shift) <> 0 Then
                sb.Append("SHIFT+")
            End If
            If(sourceCki.Modifiers And ConsoleModifiers.Control) <> 0 Then
                sb.Append("CTL+")
            End If
        End If
        sb.Append(sourceCki.Key.ToString())
        keyCombo = sb.ToString()
        Return keyCombo

    End Function 'KeyCombination
End Class 'Sample

'
'This example produces results similar to the following output:
'
'Enter a key ......... a
'The hash code for the A key is 97.
'Press the escape key (ESC) to quit, or any other key to continue.
'
'Enter a key ......... S
'The hash code for the SHIFT+S key is 83.
'Press the escape key (ESC) to quit, or any other key to continue.
'
'Enter a key .........
'The hash code for the ALT+SHIFT+CTL+J key is 7.
'Press the escape key (ESC) to quit, or any other key to continue.
'

// This example demonstrates the ConsoleKeyInfo.GetHashCode() method.

using System;
using System.Text;

class Sample
{
    public static void Main()
    {
    string k1 = "\nEnter a key ......... ";
    string key1 = "";
    string hashCodeFmt = "The hash code for the {0} key is {1}.";
    string prompt = "Press the escape key (ESC) to quit, " +
                    "or any other key to continue.";
    ConsoleKeyInfo cki1;
    int hashCode = 0;

//
// The Console.TreatControlCAsInput property prevents this example from
// ending if you press CTL+C, however all other operating system keys and
// shortcuts, such as ALT+TAB or the Windows Logo key, are still in effect.
//
    Console.TreatControlCAsInput = true;

// Request that the user enter two key presses. A key press and any
// combination shift, CTRL, and ALT modifier keys is permitted.
    do
    {
        Console.Write(k1);
        cki1 = Console.ReadKey(false);
        Console.WriteLine();
//
        key1 = KeyCombination(cki1);
        hashCode = cki1.GetHashCode();
        Console.WriteLine(hashCodeFmt, key1, hashCode);
//
        Console.WriteLine(prompt);
        cki1 = Console.ReadKey(true);
    } while (cki1.Key != ConsoleKey.Escape);
// Note: This example requires the Escape (Esc) key.
    }

// The KeyCombination() method creates a string that specifies what
// key and what combination of shift, CTRL, and ALT modifier keys
// were pressed simultaneously.

    protected static string KeyCombination(ConsoleKeyInfo sourceCki)
    {
    StringBuilder sb = new StringBuilder();
    sb.Length = 0;
    string keyCombo;
    if (sourceCki.Modifiers != 0)
        {
        if ((sourceCki.Modifiers & ConsoleModifiers.Alt) != 0)
            sb.Append("ALT+");
        if ((sourceCki.Modifiers & ConsoleModifiers.Shift) != 0)
            sb.Append("SHIFT+");
        if ((sourceCki.Modifiers & ConsoleModifiers.Control) != 0)
            sb.Append("CTL+");
        }
    sb.Append(sourceCki.Key.ToString());
    keyCombo = sb.ToString();
    return keyCombo;
    }
}

/*
This example produces results similar to the following output:

Enter a key ......... a
The hash code for the A key is 97.
Press the escape key (ESC) to quit, or any other key to continue.

Enter a key ......... S
The hash code for the SHIFT+S key is 83.
Press the escape key (ESC) to quit, or any other key to continue.

Enter a key .........
The hash code for the ALT+SHIFT+CTL+J key is 7.
Press the escape key (ESC) to quit, or any other key to continue.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
System 命名空间


ConsoleKeyInfo 运算符

ConsoleKeyInfo 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConsoleKeyInfo 结构

ConsoleKeyInfo 类型公开以下成员。

名称 说明
页首

参考

ConsoleKeyInfo 结构
System 命名空间


ConsoleKeyInfo ..::.Equality 运算符

ConsoleKeyInfo
.
.
::
.
Equality 运算符
ConsoleKeyInfo 结构

指示指定的 ConsoleKeyInfo 对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    a As ConsoleKeyInfo, _
    b As ConsoleKeyInfo _
) As Boolean
public static bool operator ==(
    ConsoleKeyInfo a,
    ConsoleKeyInfo b
)
public:
static bool operator ==(
    ConsoleKeyInfo a,
    ConsoleKeyInfo b
)
static let inline (=)
        a:ConsoleKeyInfo *
        b:ConsoleKeyInfo  : bool

参数

a
类型： System ConsoleKeyInfo
一个 ConsoleKeyInfo 对象。
b
类型： System ConsoleKeyInfo
一个 ConsoleKeyInfo 对象。

返回值

类型： System Boolean
如果 a 等于 b，则为 true；否则为 false。

如果两个 ConsoleKeyInfo 对象对应的 KeyChar、Key 和 Modifiers 属性相等，则这两个对象相等。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
System 命名空间


ConsoleKeyInfo ..::.Inequality 运算符

ConsoleKeyInfo
.
.
::
.
Inequality 运算符
ConsoleKeyInfo 结构

指示指定的 ConsoleKeyInfo 对象是否不等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    a As ConsoleKeyInfo, _
    b As ConsoleKeyInfo _
) As Boolean
public static bool operator !=(
    ConsoleKeyInfo a,
    ConsoleKeyInfo b
)
public:
static bool operator !=(
    ConsoleKeyInfo a,
    ConsoleKeyInfo b
)
static let inline (<>)
        a:ConsoleKeyInfo *
        b:ConsoleKeyInfo  : bool

参数

a
类型： System ConsoleKeyInfo
一个 ConsoleKeyInfo 对象。
b
类型： System ConsoleKeyInfo
一个 ConsoleKeyInfo 对象。

返回值

类型： System Boolean
如果 a 不等于 b，则为 true；否则为 false。

如果两个 ConsoleKeyInfo 对象对应的 KeyChar、Key 和 Modifiers 属性相等，则这两个对象相等。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
System 命名空间


ConsoleKeyInfo 属性

ConsoleKeyInfo 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConsoleKeyInfo 结构

ConsoleKeyInfo 类型公开以下成员。

名称 说明
页首

参考

ConsoleKeyInfo 结构
System 命名空间


ConsoleKeyInfo ..::.Key 属性

ConsoleKeyInfo
.
.
::
.
Key 属性
ConsoleKeyInfo 结构

获取当前 ConsoleKeyInfo 对象表示的控制台键。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Key As ConsoleKey
    Get
public ConsoleKey Key { get; }
public:
property ConsoleKey Key {
    ConsoleKey get ();
}
member Key : ConsoleKey

属性值

类型： System ConsoleKey
标识按下的控制台键的 System..::.ConsoleKey 值。

下面的代码示例演示在读取操作中使用 Key 属性。

Class Example
   Public Shared Sub Main()
      Dim cki As ConsoleKeyInfo
      ' Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = True

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
      Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
      Do
         cki = Console.ReadKey()
         Console.Write(" --- You pressed ")
         If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
         If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
         If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
         Console.WriteLine(cki.Key.ToString)
      Loop While cki.Key <> ConsoleKey.Escape
   End Sub
End Class
' This example displays output similar to the following:
'       Press any combination of CTL, ALT, and SHIFT, and a console key.
'       Press the Escape (Esc) key to quit:
'
'       a --- You pressed A
'       k --- You pressed ALT+K
'         --- You pressed CTL+P
'         --- You pressed RightArrow
'       R --- You pressed SHIFT+R
'                --- You pressed CTL+I
'       j --- You pressed ALT+J
'       O --- You pressed SHIFT+O
'       § --- You pressed CTL+U

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki;
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do
      {
         cki = Console.ReadKey();
         Console.Write(" --- You pressed ");
         if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine(cki.Key.ToString());
       } while (cki.Key != ConsoleKey.Escape);
    }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       a --- You pressed A
//       k --- You pressed ALT+K
//         --- You pressed CTL+P
//         --- You pressed RightArrow
//       R --- You pressed SHIFT+R
//                --- You pressed CTL+I
//       j --- You pressed ALT+J
//       O --- You pressed SHIFT+O
//       § --- You pressed CTL+U

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
System 命名空间


ConsoleKeyInfo ..::.KeyChar 属性

ConsoleKeyInfo
.
.
::
.
KeyChar 属性
ConsoleKeyInfo 结构

获取当前 ConsoleKeyInfo 对象表示的 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property KeyChar As Char
    Get
public char KeyChar { get; }
public:
property wchar_t KeyChar {
    wchar_t get ();
}
member KeyChar : char

属性值

类型： System Char
与当前 ConsoleKeyInfo 对象表示的控制台键对应的 System..::.Char 对象。

下面的代码示例演示在读取操作中使用 KeyChar 属性。

Class Example
   Public Shared Sub Main()
      Dim cki As ConsoleKeyInfo
      ' Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = True

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
      Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
      Do
         cki = Console.ReadKey()
         Console.Write(" --- You pressed ")
         If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
         If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
         If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
         Console.WriteLine(cki.Key.ToString)
      Loop While cki.Key <> ConsoleKey.Escape
   End Sub
End Class
' This example displays output similar to the following:
'       Press any combination of CTL, ALT, and SHIFT, and a console key.
'       Press the Escape (Esc) key to quit:
'
'       a --- You pressed A
'       k --- You pressed ALT+K
'         --- You pressed CTL+P
'         --- You pressed RightArrow
'       R --- You pressed SHIFT+R
'                --- You pressed CTL+I
'       j --- You pressed ALT+J
'       O --- You pressed SHIFT+O
'       § --- You pressed CTL+U

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki;
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do
      {
         cki = Console.ReadKey();
         Console.Write(" --- You pressed ");
         if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine(cki.Key.ToString());
       } while (cki.Key != ConsoleKey.Escape);
    }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       a --- You pressed A
//       k --- You pressed ALT+K
//         --- You pressed CTL+P
//         --- You pressed RightArrow
//       R --- You pressed SHIFT+R
//                --- You pressed CTL+I
//       j --- You pressed ALT+J
//       O --- You pressed SHIFT+O
//       § --- You pressed CTL+U

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
System 命名空间


ConsoleKeyInfo ..::.Modifiers 属性

ConsoleKeyInfo
.
.
::
.
Modifiers 属性
ConsoleKeyInfo 结构

获取 System..::.ConsoleModifiers 值的一个按位组合，指定与控制台键同时按下的一个或多个修改键。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Modifiers As ConsoleModifiers
    Get
public ConsoleModifiers Modifiers { get; }
public:
property ConsoleModifiers Modifiers {
    ConsoleModifiers get ();
}
member Modifiers : ConsoleModifiers

属性值

类型： System ConsoleModifiers
ConsoleModifiers 值的按位组合。没有默认值。 ConsoleModifiers 值的按位组合。没有默认值。

下面的代码示例演示在读取操作中使用 Modifiers 属性。

Class Example
   Public Shared Sub Main()
      Dim cki As ConsoleKeyInfo
      ' Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = True

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
      Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
      Do
         cki = Console.ReadKey()
         Console.Write(" --- You pressed ")
         If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
         If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
         If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
         Console.WriteLine(cki.Key.ToString)
      Loop While cki.Key <> ConsoleKey.Escape
   End Sub
End Class
' This example displays output similar to the following:
'       Press any combination of CTL, ALT, and SHIFT, and a console key.
'       Press the Escape (Esc) key to quit:
'
'       a --- You pressed A
'       k --- You pressed ALT+K
'         --- You pressed CTL+P
'         --- You pressed RightArrow
'       R --- You pressed SHIFT+R
'                --- You pressed CTL+I
'       j --- You pressed ALT+J
'       O --- You pressed SHIFT+O
'       § --- You pressed CTL+U

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki;
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do
      {
         cki = Console.ReadKey();
         Console.Write(" --- You pressed ");
         if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine(cki.Key.ToString());
       } while (cki.Key != ConsoleKey.Escape);
    }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       a --- You pressed A
//       k --- You pressed ALT+K
//         --- You pressed CTL+P
//         --- You pressed RightArrow
//       R --- You pressed SHIFT+R
//                --- You pressed CTL+I
//       j --- You pressed ALT+J
//       O --- You pressed SHIFT+O
//       § --- You pressed CTL+U

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConsoleKeyInfo 结构
ConsoleKeyInfo 成员
System 命名空间


ConsoleModifiers 枚举

ConsoleModifiers 枚举

表示键盘上的 Shift、Alt 和 Ctrl 修改键。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<FlagsAttribute> _
Public Enumeration ConsoleModifiers
[SerializableAttribute]
[FlagsAttribute]
public enum ConsoleModifiers
[SerializableAttribute]
[FlagsAttribute]
public enum class ConsoleModifiers
[<SerializableAttribute>]
[<FlagsAttribute>]
type ConsoleModifiers
成员名称 | 说明
Alt | 左侧或右侧的 Alt 修改键。
Shift | 左侧或右侧的 Shift 修改键。
Control | 左侧或右侧的 Ctrl 修改键。

左侧或右侧的 Shift、Alt 和 Ctrl 键之间没有任何差别。

ConsoleModifiers 枚举和 ConsoleKeyInfo 类型一起使用。

下面的代码示例将读取键并确定是否已按下一个或多个修改键。

Class Example
   Public Shared Sub Main()
      Dim cki As ConsoleKeyInfo
      ' Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = True

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
      Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
      Do
         cki = Console.ReadKey()
         Console.Write(" --- You pressed ")
         If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
         If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
         If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
         Console.WriteLine(cki.Key.ToString)
      Loop While cki.Key <> ConsoleKey.Escape
   End Sub
End Class
' This example displays output similar to the following:
'       Press any combination of CTL, ALT, and SHIFT, and a console key.
'       Press the Escape (Esc) key to quit:
'
'       a --- You pressed A
'       k --- You pressed ALT+K
'         --- You pressed CTL+P
'         --- You pressed RightArrow
'       R --- You pressed SHIFT+R
'                --- You pressed CTL+I
'       j --- You pressed ALT+J
'       O --- You pressed SHIFT+O
'       § --- You pressed CTL+U

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki;
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do
      {
         cki = Console.ReadKey();
         Console.Write(" --- You pressed ");
         if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine(cki.Key.ToString());
       } while (cki.Key != ConsoleKey.Escape);
    }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       a --- You pressed A
//       k --- You pressed ALT+K
//         --- You pressed CTL+P
//         --- You pressed RightArrow
//       R --- You pressed SHIFT+R
//                --- You pressed CTL+I
//       j --- You pressed ALT+J
//       O --- You pressed SHIFT+O
//       § --- You pressed CTL+U

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
ConsoleKeyInfo
ReadKey


ConsoleSpecialKey 枚举

ConsoleSpecialKey 枚举

指定能够中断当前进程的修改键和控制台键的组合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Enumeration ConsoleSpecialKey
[SerializableAttribute]
public enum ConsoleSpecialKey
[SerializableAttribute]
public enum class ConsoleSpecialKey
[<SerializableAttribute>]
type ConsoleSpecialKey
成员名称 | 说明
ControlC | ConsoleModifiers..::.Control 修改键加 ConsoleKey..::.C 控制台键。
ControlBreak | ConsoleModifiers..::.Control 修改键加上 Break 控制台键。

ConsoleCancelEventArgs..::.SpecialKey 属性返回 ConsoleSpecialKey 枚举类型。

同时按某些组合键可向操作系统发出中断当前正在运行的进程的信号。两个有效的组合键为 ConsoleModifiers..::.Control 加 Break (Ctrl+Break) 和 ConsoleModifiers..::.Control 加 ConsoleKey..::.C (Ctrl+C)。 同时按某些组合键可向操作系统发出中断当前正在运行的进程的信号。两个有效的组合键为 ConsoleModifiers..::.Control 加 Break (Ctrl+Break) 和 ConsoleModifiers..::.Control 加 ConsoleKey..::.C (Ctrl+C)。

下面的代码示例显示调用关联事件处理程序的 ConsoleSpecialKey 值。

' This example demonstrates:
' the Console.CancelKeyPress event,
' the ConsoleCancelEventHandler delegate,
' the ConsoleCancelEventArgs.SpecialKey property, and
' the ConsoleCancelEventArgs.Cancel property.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim cki As ConsoleKeyInfo

        ' Clear the screen.
        Console.Clear()

        ' Turn off the default system behavior when CTRL+C is pressed. When
        ' Console.TreatControlCAsInput is false, CTRL+C is treated as an
        ' interrupt instead of as input.
        Console.TreatControlCAsInput = False

        ' Establish an event handler to process key press events.
        AddHandler Console.CancelKeyPress, AddressOf myHandler

        While True
            ' Prompt the user.
            Console.Write("Press any key, or 'X' to quit, or ")
            Console.WriteLine("CTRL+C to interrupt the read operation:")

            ' Start a console read operation. Do not display the input.
            cki = Console.ReadKey(True)

            ' Announce the name of the key that was pressed .
            Console.WriteLine("  Key pressed: {0}" & vbCrLf, cki.Key)

            ' Exit if the user pressed the 'X' key.
            If cki.Key = ConsoleKey.X Then Exit While
        End While
    End Sub 'Main

'   When you press CTRL+C, the read operation is interrupted and the
'   console cancel event handler, myHandler, is invoked. Upon entry
'   to the event handler, the Cancel property is false, which means
'   the current process will terminate when the event handler terminates.
'   However, the event handler sets the Cancel property to true, which
'   means the process will not terminate and the read operation will resume.

    Protected Shared Sub myHandler(ByVal sender As Object, _
                                   ByVal args As ConsoleCancelEventArgs)
        ' Announce that the event handler has been invoked.
        Console.WriteLine(vbCrLf & "The read operation has been interrupted.")

        ' Announce which key combination was pressed.
        Console.WriteLine("  Key pressed: {0}", args.SpecialKey)

        ' Announce the initial value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)

        ' Set the Cancel property to true to prevent the process from terminating.
        Console.WriteLine("Setting the Cancel property to true...")
        args.Cancel = True

        ' Announce the new value of the Cancel property.
        Console.WriteLine("  Cancel property: {0}", args.Cancel)
        Console.WriteLine("The read operation will resume..." & vbCrLf)

    End Sub 'myHandler
End Class 'Sample
'
'This code example produces results similar to the following text:
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: J
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: Enter
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'
'The read operation has been interrupted.
'  Key pressed: ControlC
'  Cancel property: False
'Setting the Cancel property to true...
'  Cancel property: True
'The read operation will resume...
'
'  Key pressed: Q
'
'Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
'  Key pressed: X
'

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using System;

class Sample
{
    public static void Main()
    {
    ConsoleKeyInfo cki;

// Clear the screen.
    Console.Clear();

// Turn off the default system behavior when CTRL+C is pressed. When
// Console.TreatControlCAsInput is false, CTRL+C is treated as an
// interrupt instead of as input.
    Console.TreatControlCAsInput = false;

// Establish an event handler to process key press events.
    Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler);
    while (true)
        {
// Prompt the user.
        Console.Write("Press any key, or 'X' to quit, or ");
        Console.WriteLine("CTRL+C to interrupt the read operation:");

// Start a console read operation. Do not display the input.
        cki = Console.ReadKey(true);

// Announce the name of the key that was pressed .
        Console.WriteLine("  Key pressed: {0}\n", cki.Key);

// Exit if the user pressed the 'X' key.
        if (cki.Key == ConsoleKey.X) break;
        }
    }

/*
   When you press CTRL+C, the read operation is interrupted and the
   console cancel event handler, myHandler, is invoked. Upon entry
   to the event handler, the Cancel property is false, which means
   the current process will terminate when the event handler terminates.
   However, the event handler sets the Cancel property to true, which
   means the process will not terminate and the read operation will resume.
*/
    protected static void myHandler(object sender, ConsoleCancelEventArgs args)
    {
// Announce that the event handler has been invoked.
    Console.WriteLine("\nThe read operation has been interrupted.");

// Announce which key combination was pressed.
    Console.WriteLine("  Key pressed: {0}", args.SpecialKey);

// Announce the initial value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);

// Set the Cancel property to true to prevent the process from terminating.
    Console.WriteLine("Setting the Cancel property to true...");
    args.Cancel = true;

// Announce the new value of the Cancel property.
    Console.WriteLine("  Cancel property: {0}", args.Cancel);
    Console.WriteLine("The read operation will resume...\n");
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
  Key pressed: ControlC
  Cancel property: False
Setting the Cancel property to true...
  Cancel property: True
The read operation will resume...

  Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
  Key pressed: X

*/

// This example demonstrates:
// the Console.CancelKeyPress event,
// the ConsoleCancelEventHandler delegate,
// the ConsoleCancelEventArgs.SpecialKey property, and
// the ConsoleCancelEventArgs.Cancel property.

using namespace System;

// When you press CTRL+C, the read operation is interrupted and the
// console cancel event handler, myHandler, is invoked. Upon entry
// to the event handler, the Cancel property is false, which means
// the current process will terminate when the event handler terminates.
// However, the event handler sets the Cancel property to true, which
// means the process will not terminate and the read operation will resume.
void OnCancelKeyPressed(Object^ sender,
    ConsoleCancelEventArgs^ args)
{
    // Announce that the event handler has been invoked.
    Console::WriteLine("{0}The read operation has been interrupted.",
        Environment::NewLine);

    // Announce which key combination was pressed.
    Console::WriteLine("  Key pressed: {0}", args->SpecialKey);

    // Announce the initial value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);

    // Set the Cancel property to true to prevent the process from
    // terminating.
    Console::WriteLine("Setting the Cancel property to true...");
    args->Cancel = true;

    // Announce the new value of the Cancel property.
    Console::WriteLine("  Cancel property: {0}", args->Cancel);
    Console::WriteLine("The read operation will resume...{0}",
        Environment::NewLine);
}

int main()
{
    // Clear the screen.
    Console::Clear();

    // Turn off the default system behavior when CTRL+C is pressed. When
    // Console.TreatControlCAsInput is false, CTRL+C is treated as an
    // interrupt instead of as input.
    Console::TreatControlCAsInput = false;

    // Establish an event handler to process key press events.
    Console::CancelKeyPress +=
        gcnew ConsoleCancelEventHandler(OnCancelKeyPressed);

    while (true)
    {
        // Prompt the user.
        Console::Write("Press any key, or 'X' to quit, or ");
        Console::WriteLine("CTRL+C to interrupt the read operation:");

        // Start a console read operation. Do not display the input.
        ConsoleKeyInfo^ keyInfo = Console::ReadKey(true);

        // Announce the name of the key that was pressed .
        Console::WriteLine("  Key pressed: {0}{1}", keyInfo->Key,
            Environment::NewLine);

        // Exit if the user pressed the 'X' key.
        if (keyInfo->Key == ConsoleKey::X)
        {
            break;
        }
    }
}
/*
This code example produces results similar to the following text:

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: J

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: Enter

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:

The read operation has been interrupted.
Key pressed: ControlC
Cancel property: False
Setting the Cancel property to true...
Cancel property: True
The read operation will resume...

Key pressed: Q

Press any key, or 'X' to quit, or CTRL+C to interrupt the read operation:
Key pressed: X

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
ConsoleCancelEventArgs


ContextBoundObject 类

ContextBoundObject 类
成员

定义所有上下文绑定类的基类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class ContextBoundObject _
    Inherits MarshalByRefObject
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class ContextBoundObject : MarshalByRefObject
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ContextBoundObject abstract : public MarshalByRefObject
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ContextBoundObject =
    class
        inherit MarshalByRefObject
    end

驻留在上下文中并要绑定到上下文规则的对象称为上下文绑定对象。上下文是用于定义对象集合所驻留的环境的属性集或用法规则集。当对象进入或离开上下文时，规则被强制。非上下文绑定的对象称为灵活对象。 驻留在上下文中并要绑定到上下文规则的对象称为上下文绑定对象。上下文是用于定义对象集合所驻留的环境的属性集或用法规则集。当对象进入或离开上下文时，规则被强制。非上下文绑定的对象称为灵活对象。 驻留在上下文中并要绑定到上下文规则的对象称为上下文绑定对象。上下文是用于定义对象集合所驻留的环境的属性集或用法规则集。当对象进入或离开上下文时，规则被强制。非上下文绑定的对象称为灵活对象。 驻留在上下文中并要绑定到上下文规则的对象称为上下文绑定对象。上下文是用于定义对象集合所驻留的环境的属性集或用法规则集。当对象进入或离开上下文时，规则被强制。非上下文绑定的对象称为灵活对象。

上下文在对象激活期间创建。新对象被放置到现有上下文或新的上下文中，后者是通过元数据类型中包含的特性创建的。使用提供用法规则的 ContextAttribute 标记上下文绑定类。可以添加的上下文属性包括有关同步和事务的策略。 上下文在对象激活期间创建。新对象被放置到现有上下文或新的上下文中，后者是通过元数据类型中包含的特性创建的。使用提供用法规则的 ContextAttribute 标记上下文绑定类。可以添加的上下文属性包括有关同步和事务的策略。 上下文在对象激活期间创建。新对象被放置到现有上下文或新的上下文中，后者是通过元数据类型中包含的特性创建的。使用提供用法规则的 ContextAttribute 标记上下文绑定类。可以添加的上下文属性包括有关同步和事务的策略。 上下文在对象激活期间创建。新对象被放置到现有上下文或新的上下文中，后者是通过元数据类型中包含的特性创建的。使用提供用法规则的 ContextAttribute 标记上下文绑定类。可以添加的上下文属性包括有关同步和事务的策略。

对实现者的说明

公共语言运行时的当前版本不支持泛型 ContextBoundObject 类型或具有泛型方法的非泛型 ContextBoundObject 类型。尝试创建此类型的实例会引发 TypeLoadException。 公共语言运行时的当前版本不支持泛型 ContextBoundObject 类型或具有泛型方法的非泛型 ContextBoundObject 类型。尝试创建此类型的实例会引发 TypeLoadException。

有关更多信息，请参见主题泛型的优点和限制。

System System..::.ContextBoundObjectContextBoundObject

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ContextBoundObject 成员
System 命名空间
SynchronizationAttribute


ContextBoundObject 成员

ContextBoundObject 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextBoundObject 类

定义所有上下文绑定类的基类。

ContextBoundObject 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ContextBoundObject 类
System 命名空间


ContextBoundObject 构造函数

ContextBoundObject 构造函数
ContextBoundObject 类

实例化 ContextBoundObject 类的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected ContextBoundObject()
protected:
ContextBoundObject()
new : unit -> ContextBoundObject

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ContextBoundObject 类
ContextBoundObject 成员
System 命名空间
ContextBoundObject


ContextBoundObject 方法

ContextBoundObject 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextBoundObject 类

ContextBoundObject 类型公开以下成员。

名称 说明
页首

参考

ContextBoundObject 类
System 命名空间


ContextBoundObject ..::.MemberwiseClone 方法

ContextBoundObject
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextBoundObject 类

名称 说明
页首

参考

ContextBoundObject 类
ContextBoundObject 成员
System 命名空间


ContextMarshalException 类

ContextMarshalException 类
成员

在尝试将对象封送过上下文边界失败时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ContextMarshalException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ContextMarshalException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ContextMarshalException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ContextMarshalException =
    class
        inherit SystemException
    end

可以按值或按引用封送对象。任何传递无法封送过上下文边界的类型的尝试，都会导致 ContextMarshalException。 可以按值或按引用封送对象。任何传递无法封送过上下文边界的类型的尝试，都会导致 ContextMarshalException。

ContextMarshalException 使用值为 0x80131504L 的 HRESULT COR_E_CONTEXTMARSHAL。

ContextMarshalException 使用默认的 Equals 实现，后者支持引用相等性。

有关 ContextMarshalException 实例的初始属性值列表，请参见 ContextMarshalException 构造函数。

System System..::.ContextMarshalExceptionContextMarshalException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、1.1、1.0
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

受以下版本支持：4

参考

ContextMarshalException 成员
System 命名空间
Exception

其他资源

处理和引发异常


ContextMarshalException 成员

ContextMarshalException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextMarshalException 类

在尝试将对象封送过上下文边界失败时引发的异常。

ContextMarshalException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ContextMarshalException 类
System 命名空间


ContextMarshalException 构造函数

ContextMarshalException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextMarshalException 类

初始化 ContextMarshalException 类的新实例。

名称 说明
页首

参考

ContextMarshalException 类
ContextMarshalException 成员
System 命名空间


ContextMarshalException 构造函数

ContextMarshalException 构造函数
ContextMarshalException 类

使用默认属性初始化 ContextMarshalException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ContextMarshalException()
public:
ContextMarshalException()
new : unit -> ContextMarshalException

下表显示 ContextMarshalException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 空字符串 ("")。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ContextMarshalException 类
ContextMarshalException 成员
ContextMarshalException 重载
System 命名空间


ContextMarshalException 构造函数 (String)

ContextMarshalException 构造函数 (String)
ContextMarshalException 类

使用指定错误信息初始化 ContextMarshalException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public ContextMarshalException(
    string message
)
public:
ContextMarshalException(
    String^ message
)
new :
        message:string -> ContextMarshalException

参数

message
类型： System String
解释异常原因的错误信息。

下表显示 ContextMarshalException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ContextMarshalException 类
ContextMarshalException 成员
ContextMarshalException 重载
System 命名空间


ContextMarshalException 构造函数 (SerializationInfo, StreamingContext)

ContextMarshalException 构造函数 (SerializationInfo, StreamingContext)
ContextMarshalException 类

用序列化数据初始化 ContextMarshalException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ContextMarshalException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ContextMarshalException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ContextMarshalException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ContextMarshalException 类
ContextMarshalException 成员
ContextMarshalException 重载
System 命名空间


ContextMarshalException 构造函数 (String, Exception)

ContextMarshalException 构造函数 (String, Exception)
ContextMarshalException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 ContextMarshalException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public ContextMarshalException(
    string message,
    Exception inner
)
public:
ContextMarshalException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> ContextMarshalException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 ContextMarshalException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ContextMarshalException 类
ContextMarshalException 成员
ContextMarshalException 重载
System 命名空间


ContextMarshalException 方法

ContextMarshalException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextMarshalException 类

ContextMarshalException 类型公开以下成员。

名称 说明
页首

参考

ContextMarshalException 类
System 命名空间


ContextMarshalException 属性

ContextMarshalException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextMarshalException 类

ContextMarshalException 类型公开以下成员。

名称 说明
页首

参考

ContextMarshalException 类
System 命名空间


ContextMarshalException 事件

ContextMarshalException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextMarshalException 类

ContextMarshalException 类型公开以下成员。

名称 说明
页首

参考

ContextMarshalException 类
System 命名空间


ContextStaticAttribute 类

ContextStaticAttribute 类
成员

指示静态字段的值是特定上下文的唯一值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Field, Inherited := False)> _
Public Class ContextStaticAttribute _
    Inherits Attribute
[SerializableAttribute]
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)]
public class ContextStaticAttribute : Attribute
[SerializableAttribute]
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::Field, Inherited = false)]
public ref class ContextStaticAttribute : public Attribute
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
[<AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)>]
type ContextStaticAttribute =
    class
        inherit Attribute
    end

用 ContextStaticAttribute 标记的静态字段不在上下文之间共享。如果在不同的上下文中访问指示的静态字段，则该字段将包含不同的值。按原样使用此特性，而不要从其派生。 用 ContextStaticAttribute 标记的静态字段不在上下文之间共享。如果在不同的上下文中访问指示的静态字段，则该字段将包含不同的值。按原样使用此特性，而不要从其派生。 用 ContextStaticAttribute 标记的静态字段不在上下文之间共享。如果在不同的上下文中访问指示的静态字段，则该字段将包含不同的值。按原样使用此特性，而不要从其派生。

下面的示例显示了此特性的语法：

[ContextStatic]

static int f=7;

有关使用特性的更多信息，请参见 利用特性扩展元数据。

System System..::.ContextStaticAttributeContextStaticAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ContextStaticAttribute 成员
System 命名空间
Attribute
Context

其他资源

利用特性扩展元数据


ContextStaticAttribute 成员

ContextStaticAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextStaticAttribute 类

指示静态字段的值是特定上下文的唯一值。

ContextStaticAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ContextStaticAttribute 类
System 命名空间


ContextStaticAttribute 构造函数

ContextStaticAttribute 构造函数
ContextStaticAttribute 类

初始化 ContextStaticAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ContextStaticAttribute()
public:
ContextStaticAttribute()
new : unit -> ContextStaticAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ContextStaticAttribute 类
ContextStaticAttribute 成员
System 命名空间


ContextStaticAttribute 方法

ContextStaticAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextStaticAttribute 类

ContextStaticAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ContextStaticAttribute 类
System 命名空间


ContextStaticAttribute 属性

ContextStaticAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ContextStaticAttribute 类

ContextStaticAttribute 类型公开以下成员。

名称 说明
页首

参考

ContextStaticAttribute 类
System 命名空间


Convert 类

Convert 类
成员

将一个基本数据类型转换为另一个基本数据类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public NotInheritable Class Convert
public static class Convert
public ref class Convert abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type Convert =  class end

Convert 类的静态方法用于支持 .NET Framework 中与基数据类型之间的转换。受支持的基类型是 Boolean、Char、SByte、Byte、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Decimal、DateTime 和 String。 Convert 类的静态方法用于支持 .NET Framework 中与基数据类型之间的转换。受支持的基类型是 Boolean、Char、SByte、Byte、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Decimal、DateTime 和 String。

与基类型之间的转换

存在将每个基类型转换为每个其他基类型的转换方法。但是，根据运行时基类型和目标基类型的值，对特定转换方法的实际调用会产生五种结果之一。这五种结果如下： 存在将每个基类型转换为每个其他基类型的转换方法。但是，根据运行时基类型和目标基类型的值，对特定转换方法的实际调用会产生五种结果之一。这五种结果如下： 存在将每个基类型转换为每个其他基类型的转换方法。但是，根据运行时基类型和目标基类型的值，对特定转换方法的实际调用会产生五种结果之一。这五种结果如下：

  • 无转换。当尝试将一个类型转换为其本身时（如使用 Int32 类型参数调用 Convert..::.ToInt32(Int32)）会发生这种情况。在这种情况下，此方法只是返回原始类型实例。
无转换。当尝试将一个类型转换为其本身时（如使用 Int32 类型参数调用 Convert..::.ToInt32(Int32)）会发生这种情况。在这种情况下，此方法只是返回原始类型实例。
无转换。当尝试将一个类型转换为其本身时（如使用 Int32 类型参数调用 Convert..::.ToInt32(Int32)）会发生这种情况。在这种情况下，此方法只是返回原始类型实例。

  • 一个 InvalidCastException。当不支持特定转换时会发生这种情况。以下转换会引发 InvalidCastException。 一个 InvalidCastException。当不支持特定转换时会发生这种情况。以下转换会引发 InvalidCastException。 一个 InvalidCastException。当不支持特定转换时会发生这种情况。以下转换会引发 InvalidCastException。

    • 将 Char 转换为 Boolean、Single、Double、Decimal 或 DateTime。

    • 将 Boolean、Single、Double、Decimal 或 DateTime 转换为 Char。

    • 将 DateTime 转换为 String 以外的任何其他类型。

    • 将 String 以外的任何其他类型转换为 DateTime。

  • 一个 FormatException。当由于字符串格式不正确而导致将字符串值转换为任何其他基类型的尝试失败时，会发生该异常。以下转换会引发该异常： 一个 FormatException。当由于字符串格式不正确而导致将字符串值转换为任何其他基类型的尝试失败时，会发生该异常。以下转换会引发该异常： 一个 FormatException。当由于字符串格式不正确而导致将字符串值转换为任何其他基类型的尝试失败时，会发生该异常。以下转换会引发该异常：

    • 要转换为 Boolean 值的字符串不等于 Boolean..::.TrueString 或 Boolean..::.FalseString。

    • 要转换为 Char 值的字符串由多个字符组成。

    • 要转换为任何数值类型的字符串没有被识别为有效数字。

    • 要转换为 DateTime 的字符串没有被识别为有效日期和时间值。

  • 转换成功。对于前面结果中未列出的两个不同基类型之间的转换，所有扩大转换和不会导致数据丢失的收缩转换都将成功，此方法将返回目标基类型的值。 转换成功。对于前面结果中未列出的两个不同基类型之间的转换，所有扩大转换和不会导致数据丢失的收缩转换都将成功，此方法将返回目标基类型的值。

  • 一个 OverflowException。当收缩转换导致数据丢失时会发生这种情况。例如，尝试将值为 10000 的 Int32 实例转换为 Byte 类型会引发 OverflowException，因为 10000 超出了 Byte 数据类型的范围。 一个 OverflowException。当收缩转换导致数据丢失时会发生这种情况。例如，尝试将值为 10000 的 Int32 实例转换为 Byte 类型会引发 OverflowException，因为 10000 超出了 Byte 数据类型的范围。 一个 OverflowException。当收缩转换导致数据丢失时会发生这种情况。例如，尝试将值为 10000 的 Int32 实例转换为 Byte 类型会引发 OverflowException，因为 10000 超出了 Byte 数据类型的范围。

如果数字类型转换导致精度丢失（即某些最低有效位丢失），不引发异常。但是，如果结果超出了特定转换方法的返回值类型所能表示的范围，则将引发异常。 如果数字类型转换导致精度丢失（即某些最低有效位丢失），不引发异常。但是，如果结果超出了特定转换方法的返回值类型所能表示的范围，则将引发异常。

例如，当将 Double 转换为 Single 时，可能会发生精度丢失，但并不引发异常。但是，如果 Double 的值太大，无法由 Single 表示，则将引发溢出异常。 例如，当将 Double 转换为 Single 时，可能会发生精度丢失，但并不引发异常。但是，如果 Double 的值太大，无法由 Single 表示，则将引发溢出异常。

从自定义对象转换为基类型

除了支持基类型之间的转换外，Convert 方法还支持将任何自定义类型转换为任何基类型。为此，自定义类型必须实现 IConvertible 接口，该接口定义用于将实现类型转换为每个基类型的方法。特定类型不支持的转换会引发 InvalidCastException。 除了支持基类型之间的转换外，Convert 方法还支持将任何自定义类型转换为任何基类型。为此，自定义类型必须实现 IConvertible 接口，该接口定义用于将实现类型转换为每个基类型的方法。特定类型不支持的转换会引发 InvalidCastException。 除了支持基类型之间的转换外，Convert 方法还支持将任何自定义类型转换为任何基类型。为此，自定义类型必须实现 IConvertible 接口，该接口定义用于将实现类型转换为每个基类型的方法。特定类型不支持的转换会引发 InvalidCastException。

向 ChangeType 方法传递自定义类型作为其第一个参数时，或者在调用 Convert.ToType 方法（如 Convert..::.ToInt32(Object) 或 Convert..::.ToDouble(Object, IFormatProvider)）并向其传递自定义类型的实例作为其第一个参数时，Convert 方法反过来会调用自定义类型的 IConvertible 实现以执行转换。有关更多信息，请参见.NET Framework 中的类型转换。 向 ChangeType 方法传递自定义类型作为其第一个参数时，或者在调用 Convert.ToType 方法（如 Convert..::.ToInt32(Object) 或 Convert..::.ToDouble(Object, IFormatProvider)）并向其传递自定义类型的实例作为其第一个参数时，Convert 方法反过来会调用自定义类型的 IConvertible 实现以执行转换。有关更多信息，请参见.NET Framework 中的类型转换。

区域性特定的格式设置信息

所有基类型转换方法和 ChangeType 方法都包括具有类型为 IFormatProvider 的参数的重载。例如，Convert..::.ToBoolean 方法具有下面两个重载： 所有基类型转换方法和 ChangeType 方法都包括具有类型为 IFormatProvider 的参数的重载。例如，Convert..::.ToBoolean 方法具有下面两个重载：

  • Convert ToBoolean(Object, IFormatProvider)

  • Convert ToBoolean(String, IFormatProvider)

IFormatProvider 参数可以提供区域性特定的格式设置信息以帮助转换过程。但是，大多数基类型转换方法忽略了该参数。只有下列基类型转换方法使用该参数： IFormatProvider 参数可以提供区域性特定的格式设置信息以帮助转换过程。但是，大多数基类型转换方法忽略了该参数。只有下列基类型转换方法使用该参数： IFormatProvider 参数可以提供区域性特定的格式设置信息以帮助转换过程。但是，大多数基类型转换方法忽略了该参数。只有下列基类型转换方法使用该参数：

  • 将值转换为数值类型的方法。IFormatProvider 参数由具有类型为 String 和 IFormatProvider 的参数的重载使用。它也由具有类型为 Object 和 IFormatProvider 的参数的重载使用（如果对象的运行时类型为 String）。 将值转换为数值类型的方法。IFormatProvider 参数由具有类型为 String 和 IFormatProvider 的参数的重载使用。它也由具有类型为 Object 和 IFormatProvider 的参数的重载使用（如果对象的运行时类型为 String）。 将值转换为数值类型的方法。IFormatProvider 参数由具有类型为 String 和 IFormatProvider 的参数的重载使用。它也由具有类型为 Object 和 IFormatProvider 的参数的重载使用（如果对象的运行时类型为 String）。

  • 将值转换为日期和时间的方法。IFormatProvider 参数由具有类型为 String 和 IFormatProvider 的参数的重载使用。它也由具有类型为 Object 和 IFormatProvider 的参数的重载使用（如果对象的运行时类型为 String）。 将值转换为日期和时间的方法。IFormatProvider 参数由具有类型为 String 和 IFormatProvider 的参数的重载使用。它也由具有类型为 Object 和 IFormatProvider 的参数的重载使用（如果对象的运行时类型为 String）。 将值转换为日期和时间的方法。IFormatProvider 参数由具有类型为 String 和 IFormatProvider 的参数的重载使用。它也由具有类型为 Object 和 IFormatProvider 的参数的重载使用（如果对象的运行时类型为 String）。

  • 包含 IFormatProvider 参数并将数字值转换为字符串或将 DateTime 值转换为字符串的 Convert..::.ToString 重载。

但是，实现 IConvertible 的任何用户定义类型都可以使用 IFormatProvider 参数。

其他转换方法

有一组方法可支持字节数组与 String 或由 base 64 数字字符组成的 Unicode 字符数组之间的转换。表示为以 64 为基的数字的数据可以很容易地通过只能传输 7 位字符的数据信道进行传送。 有一组方法可支持字节数组与 String 或由 base 64 数字字符组成的 Unicode 字符数组之间的转换。表示为以 64 为基的数字的数据可以很容易地通过只能传输 7 位字符的数据信道进行传送。

下面的代码示例演示 Convert 类中的一些转换方法，包括 ToInt32、ToBoolean 和 ToString。

Dim dNumber As Double
dNumber = 23.15

Try
   ' Returns 23
   Dim iNumber As Integer
   iNumber = System.Convert.ToInt32(dNumber)
Catch exp As System.OverflowException
   System.Console.WriteLine("Overflow in double to int conversion.")
End Try

' Returns True
Dim bNumber As Boolean
bNumber = System.Convert.ToBoolean(dNumber)

' Returns "23.15"
Dim strNumber As String
strNumber = System.Convert.ToString(dNumber)

Try
   ' Returns '2'
   Dim chrNumber As Char
   chrNumber = System.Convert.ToChar(strNumber.Chars(1))
Catch exp As System.ArgumentNullException
   System.Console.WriteLine("String is null.")
Catch exp As System.FormatException
   System.Console.WriteLine("String length is greater than 1.")
End Try

' System.Console.ReadLine() returns a string and it
' must be converted.
Dim newInteger As Integer
newInteger = 0
Try
   System.Console.WriteLine("Enter an integer:")
   newInteger = System.Convert.ToInt32(System.Console.ReadLine())
Catch exp As System.ArgumentNullException
   System.Console.WriteLine("String is null.")
Catch exp As System.FormatException
   System.Console.WriteLine("String does not consist of an " + _
       "optional sign followed by a series of digits.")
Catch exp As System.OverflowException
   System.Console.WriteLine("Overflow in string to int conversion.")
End Try

System.Console.WriteLine("Your integer as a double is {0}", _
                         System.Convert.ToDouble(newInteger))

            double dNumber = 23.15;

            try {
                // Returns 23
                int    iNumber = System.Convert.ToInt32(dNumber);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                            "Overflow in double to int conversion.");
            }
            // Returns True
            bool   bNumber = System.Convert.ToBoolean(dNumber);

            // Returns "23.15"
            string strNumber = System.Convert.ToString(dNumber);

            try {
                // Returns '2'
                char chrNumber = System.Convert.ToChar(strNumber[0]);
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine("String is null");
            }
            catch (System.FormatException) {
                System.Console.WriteLine("String length is greater than 1.");
            }

            // System.Console.ReadLine() returns a string and it
            // must be converted.
            int newInteger = 0;
            try {
                System.Console.WriteLine("Enter an integer:");
                newInteger = System.Convert.ToInt32(
                                    System.Console.ReadLine());
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine("String is null.");
            }
            catch (System.FormatException) {
                System.Console.WriteLine("String does not consist of an " +
                                "optional sign followed by a series of digits.");
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                "Overflow in string to int conversion.");
            }

            System.Console.WriteLine("Your integer as a double is {0}",
                                     System.Convert.ToDouble(newInteger));

Double dNumber = 23.15;

try
{
   // Returns 23
   Int32 iNumber = Convert::ToInt32( dNumber );
}
catch ( OverflowException^ )
{
   Console::WriteLine(
      "Overflow in Double to Int32 conversion" );
}
// Returns True
Boolean bNumber = Convert::ToBoolean( dNumber );

// Returns "23.15"
String^ strNumber = Convert::ToString( dNumber );

try
{
   // Returns '2'
   Char chrNumber = Convert::ToChar( strNumber->Substring( 0, 1 ) );
}
catch ( ArgumentNullException^ )
{
   Console::WriteLine(  "String is null" );
}
catch ( FormatException^ )
{
   Console::WriteLine(  "String length is greater than 1" );
}

// System::Console::ReadLine() returns a string and it
// must be converted.
Int32 newInteger = 0;
try
{
   Console::WriteLine(  "Enter an integer:" );
   newInteger = Convert::ToInt32( System::Console::ReadLine() );
}
catch ( ArgumentNullException^ )
{
   Console::WriteLine(  "String is null" );
}
catch ( FormatException^ )
{
   Console::WriteLine(  "String does not consist of an " +
      "optional sign followed by a series of digits" );
}
catch ( OverflowException^ )
{
   Console::WriteLine(  "Overflow in string to Int32 conversion" );
}

Console::WriteLine( "Your integer as a Double is {0}",
   Convert::ToDouble( newInteger ) );

System System..::.ConvertConvert
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 成员
System 命名空间
Object
SByte
Int16
Int32
Int64
Byte
UInt16
UInt32
UInt64
Single
Double
Decimal
Boolean
Char
String


Convert 成员

Convert 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将一个基本数据类型转换为另一个基本数据类型。

Convert 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Convert 类
System 命名空间


Convert 字段

Convert 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

Convert 类型公开以下成员。

名称 说明
页首

参考

Convert 类
System 命名空间


Convert ..::.DBNull 字段

Convert
.
.
::
.
DBNull 字段
Convert 类

一个常数，用于表示没有数据的数据库列；即数据库为空。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly DBNull As Object
public static readonly Object DBNull
public:
static initonly Object^ DBNull
static val DBNull: Object

DBNull 字段等效于 DBNull..::.Value，如下面的示例中所示。

Console.WriteLine(Convert.DBNull.Equals(DBNull.Value))
' Displays True.

Console.WriteLine(Convert.DBNull.Equals(DBNull.Value));
// Displays True.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
System 命名空间
DBNull
DBNull Value


Convert 方法

Convert 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

Convert 类型公开以下成员。

名称 说明
页首

参考

Convert 类
System 命名空间


Convert ..::.ChangeType 方法

Convert
.
.
::
.
ChangeType 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

返回一个指定类型的对象，该对象的值等效于指定的对象。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ChangeType 方法 (Object, Type)

Convert
.
.
::
.
ChangeType 方法 (Object, Type)
Convert 类

返回一个指定类型的对象，该对象的值等效于指定的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ChangeType ( _
    value As Object, _
    conversionType As Type _
) As Object
public static Object ChangeType(
    Object value,
    Type conversionType
)
public:
static Object^ ChangeType(
    Object^ value,
    Type^ conversionType
)
static member ChangeType :
        value:Object *
        conversionType:Type -> Object

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
conversionType
类型： System Type
要返回的对象的类型。

返回值

类型： System Object
一个类型为 conversionType 的对象，其值等效于 value。
- 或 -
如果 value 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 conversionType 不是值类型，则为 null 引用（Visual Basic 中为 Nothing）。
异常 | 条件
InvalidCastException | 不支持此转换。 - 或 - value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而且 conversionType 是值类型。 - 或 - value 不实现 IConvertible 接口。
FormatException | conversionType 无法识别value的格式。
OverflowException | value 表示超出 conversionType 范围的数字。
ArgumentNullException | conversionType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

ChangeType 是将 value 指定的对象转换为 conversionType 的通用转换方法。value 参数可以是任何类型的对象，conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法要求支持将 value 转换为 conversionType。 ChangeType 是将 value 指定的对象转换为 conversionType 的通用转换方法。value 参数可以是任何类型的对象，conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法要求支持将 value 转换为 conversionType。 ChangeType 是将 value 指定的对象转换为 conversionType 的通用转换方法。value 参数可以是任何类型的对象，conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法要求支持将 value 转换为 conversionType。 ChangeType 是将 value 指定的对象转换为 conversionType 的通用转换方法。value 参数可以是任何类型的对象，conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法要求支持将 value 转换为 conversionType。

此方法将当前线程的区域性用于转换。

下面的示例阐释了 ChangeType 方法的用法。

Imports System

Public Class ChangeTypeTest

    Public Shared Sub Main()
        Dim d As [Double] = - 2.345
        Dim i As Integer = CInt(Convert.ChangeType(d, GetType(Integer)))

        Console.WriteLine("The double value {0} when converted to an int becomes {1}", d, i)
        Dim s As String = "12/12/98"
        Dim dt As DateTime = CType(Convert.ChangeType(s, GetType(DateTime)), DateTime)

        Console.WriteLine("The string value {0} when converted to a Date becomes {1}", s, dt)
    End Sub 'Main
End Class 'ChangeTypeTest

using System;

public class ChangeTypeTest {
    public static void Main() {

        Double d = -2.345;
        int i = (int)Convert.ChangeType(d, typeof(int));

        Console.WriteLine("The double value {0} when converted to an int becomes {1}", d, i);

        string s = "12/12/98";
        DateTime dt = (DateTime)Convert.ChangeType(s, typeof(DateTime));

        Console.WriteLine("The string value {0} when converted to a Date becomes {1}", s, dt);
    }
}

using namespace System;

int main()
{
   Double d = -2.345;
   int i =  *safe_cast<Int32^>(Convert::ChangeType( d, int::typeid ));
   Console::WriteLine( "The double value {0} when converted to an int becomes {1}", d, i );
   String^ s = "12/12/98";
   DateTime dt =  *safe_cast<DateTime^>(Convert::ChangeType( s, DateTime::typeid ));
   Console::WriteLine( "The string value {0} when converted to a Date becomes {1}", s, dt );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ChangeType 重载
System 命名空间


Convert ..::.ChangeType 方法 (Object, TypeCode)

Convert
.
.
::
.
ChangeType 方法 (Object, TypeCode)
Convert 类

返回一个指定类型的对象，该对象的值等于指定的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ChangeType ( _
    value As Object, _
    typeCode As TypeCode _
) As Object
public static Object ChangeType(
    Object value,
    TypeCode typeCode
)
public:
static Object^ ChangeType(
    Object^ value,
    TypeCode typeCode
)
static member ChangeType :
        value:Object *
        typeCode:TypeCode -> Object

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
typeCode
类型： System TypeCode
要返回的对象的类型。

返回值

类型： System Object
一个基础类型为 typeCode 的对象，其值等效于 value。
- 或 -
如果 value 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 typeCode 是 Empty、String 或 Object，则为 null 引用（Visual Basic 中为 Nothing）。
异常 | 条件
InvalidCastException | 不支持此转换。 - 或 - value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而且 typeCode 指定一个值类型。 - 或 - value 不实现 IConvertible 接口。
FormatException | value 未采用 typeCode 类型可以识别的格式。
OverflowException | value 表示超出 typeCode 类型范围的数字。
ArgumentException | typeCode 无效。

ChangeType(Object, TypeCode) 是将 value 指定的对象转换为 typeCode 指定的预定义类型的通用转换方法。value 参数可以是任何类型的对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法还要求将 value 转换为 typeCode 受支持。 ChangeType(Object, TypeCode) 是将 value 指定的对象转换为 typeCode 指定的预定义类型的通用转换方法。value 参数可以是任何类型的对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法还要求将 value 转换为 typeCode 受支持。 ChangeType(Object, TypeCode) 是将 value 指定的对象转换为 typeCode 指定的预定义类型的通用转换方法。value 参数可以是任何类型的对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法还要求将 value 转换为 typeCode 受支持。 ChangeType(Object, TypeCode) 是将 value 指定的对象转换为 typeCode 指定的预定义类型的通用转换方法。value 参数可以是任何类型的对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法还要求将 value 转换为 typeCode 受支持。

ChangeType(Object, TypeCode) 方法不支持将 value 转换为自定义类型。要执行这样的转换，请调用 ChangeType(Object, Type) 方法。 ChangeType(Object, TypeCode) 方法不支持将 value 转换为自定义类型。要执行这样的转换，请调用 ChangeType(Object, Type) 方法。

下面的示例阐释如何使用 ChangeType(Object, TypeCode) 方法将 Object 更改为 TypeCode 参数指定的类型（如果可能）。

Imports System

Public Class ChangeTypeTest

    Public Shared Sub Main()
        Dim d As [Double] = - 2.345
        Dim i As Integer = CInt(Convert.ChangeType(d, TypeCode.Int32))

        Console.WriteLine("The Double {0} when converted to an Int32 is {1}", d, i)
        Dim s As String = "12/12/2009"
        Dim dt As DateTime = CDate(Convert.ChangeType(s, TypeCode.DateTime))

        Console.WriteLine("The String {0} when converted to a Date is {1}", s, dt)
    End Sub
End Class
' The example displays the following output:
'    The Double -2.345 when converted to an Int32 is -2
'    The String 12/12/2009 when converted to a Date is 12/12/2009 12:00:00 AM

using System;

public class ChangeTypeTest {
    public static void Main() {

        Double d = -2.345;
        int i = (int)Convert.ChangeType(d, TypeCode.Int32);

        Console.WriteLine("The Double {0} when converted to an Int32 is {1}", d, i);

        string s = "12/12/2009";
        DateTime dt = (DateTime)Convert.ChangeType(s, typeof(DateTime));

        Console.WriteLine("The String {0} when converted to a Date is {1}", s, dt);
    }
}
// The example displays the following output:
//    The Double -2.345 when converted to an Int32 is -2
//    The String 12/12/2009 when converted to a Date is 12/12/2009 12:00:00 AM

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ChangeType 重载
System 命名空间


Convert ..::.ChangeType 方法 (Object, Type, IFormatProvider)

Convert
.
.
::
.
ChangeType 方法 (Object, Type, IFormatProvider)
Convert 类

返回一个指定类型的对象，该对象的值等于指定的对象。参数提供区域性特定的格式设置信息。 返回一个指定类型的对象，该对象的值等于指定的对象。参数提供区域性特定的格式设置信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ChangeType ( _
    value As Object, _
    conversionType As Type, _
    provider As IFormatProvider _
) As Object
public static Object ChangeType(
    Object value,
    Type conversionType,
    IFormatProvider provider
)
public:
static Object^ ChangeType(
    Object^ value,
    Type^ conversionType,
    IFormatProvider^ provider
)
static member ChangeType :
        value:Object *
        conversionType:Type *
        provider:IFormatProvider -> Object

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
conversionType
类型： System Type
要返回的对象的类型。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Object
一个类型为 conversionType 的对象，其值等效于 value。
- 或 -
如果 value 的 Type 与 conversionType 相等，则为 value。
- 或 -
如果 value 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 conversionType 不是值类型，则为 null 引用（Visual Basic 中为 Nothing）。
异常 | 条件
InvalidCastException | 不支持此转换。 - 或 - value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而且 conversionType 是值类型。 - 或 - value 不实现 IConvertible 接口。
FormatException | value 的格式不是 provider 可以识别的 conversionType 的格式。
OverflowException | value 表示超出 conversionType 范围的数字。
ArgumentNullException | conversionType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

ChangeType 是将 value 指定的对象转换为 conversionType 的通用转换方法。value 参数可以是任何类型的对象，conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法要求支持将 value 转换为 conversionType。 ChangeType 是将 value 指定的对象转换为 conversionType 的通用转换方法。value 参数可以是任何类型的对象，conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法要求支持将 value 转换为 conversionType。 ChangeType 是将 value 指定的对象转换为 conversionType 的通用转换方法。value 参数可以是任何类型的对象，conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法要求支持将 value 转换为 conversionType。 ChangeType 是将 value 指定的对象转换为 conversionType 的通用转换方法。value 参数可以是任何类型的对象，conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法要求支持将 value 转换为 conversionType。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

下面的示例定义一个实现 IConvertible 接口的 Temperature 类。

Imports System.Globalization

Public Class Temperature : Implements IConvertible
   Private m_Temp As Decimal

   Public Sub New(temperature As Decimal)
      Me.m_Temp = temperature
   End Sub

   Public ReadOnly Property Celsius() As Decimal
      Get
         Return Me.m_Temp
      End Get
   End Property

   Public ReadOnly Property Kelvin() As Decimal
      Get
         Return Me.m_Temp + 273.15d
      End Get
   End Property

   Public ReadOnly Property Fahrenheit() As Decimal
      Get
         Return Math.Round(CDec(Me.m_Temp * 9 / 5 + 32), 2)
      End Get
   End Property

   Public Overrides Function ToString() As String
      Return m_Temp.ToString("N2") & "°C"
   End Function

   ' IConvertible implementations.
   Public Function GetTypeCode() As TypeCode _
                   Implements IConvertible.GetTypeCode
      Return TypeCode.Object
   End Function

   Public Function ToBoolean(provider As IFormatProvider) As Boolean _
                   Implements IConvertible.ToBoolean
      Console.WriteLine("   Passed a {0} object.", CObj(provider).GetType().Name)
      If m_Temp = 0 Then
         Return False
      Else
         Return True
      End If
   End Function

   Public Function ToByte(provider As IFormatProvider) As Byte _
                   Implements IConvertible.ToByte
      If m_Temp < Byte.MinValue Or m_Temp > Byte.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToByte(Me.m_Temp)
      End If
   End Function

   Public Function ToChar(provider As IFormatProvider) As Char _
                   Implements IConvertible.ToChar
      Throw New InvalidCastException("Temperature to Char conversion is not supported.")
   End Function

   Public Function ToDateTime(provider As IFormatProvider) As Date _
                   Implements IConvertible.ToDateTime
      Throw New InvalidCastException("Temperature to DateTime conversion is not supported.")
   End Function

   Public Function ToDecimal(provider As IFormatProvider) As Decimal _
                   Implements IConvertible.ToDecimal
      Return Me.m_Temp
   End Function

   Public Function ToDouble(provider As IFormatProvider) As Double _
                   Implements IConvertible.ToDouble
      Return Decimal.ToDouble(Me.m_Temp)
   End Function

   Public Function ToInt16(provider As IFormatProvider) As Int16 _
                   Implements IConvertible.ToInt16
      If Me.m_Temp < Int16.MinValue Or Me.m_Temp > Int16.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Int16 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToInt16(Me.m_Temp)
      End If
   End Function

   Public Function ToInt32(provider As IFormatProvider) As Int32 _
                   Implements IConvertible.ToInt32
      If Me.m_Temp < Int32.MinValue Or Me.m_Temp > Int32.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Int32 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToInt32(Me.m_Temp)
      End If
   End Function

   Public Function ToInt64(provider As IFormatProvider) As Int64 _
                   Implements IConvertible.ToInt64
      If Me.m_Temp < Int64.MinValue Or Me.m_Temp > Int64.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Int64 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToInt64(Me.m_Temp)
      End If
   End Function

   Public Function ToSByte(provider As IFormatProvider) As SByte _
                   Implements IConvertible.ToSByte
      If Me.m_Temp < SByte.MinValue Or Me.m_Temp > SByte.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the SByte type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToSByte(Me.m_Temp)
      End If
   End Function

   Public Function ToSingle(provider As IFormatProvider) As Single _
                   Implements IConvertible.ToSingle
      Return Decimal.ToSingle(Me.m_Temp)
   End Function

   Public Overloads Function ToString(provider As IFormatProvider) As String _
                   Implements IConvertible.ToString
      Return m_Temp.ToString("N2", provider) & "°C"
   End Function

   Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object _
                   Implements IConvertible.ToType
      Select Case Type.GetTypeCode(conversionType)
         Case TypeCode.Boolean
            Return Me.ToBoolean(Nothing)
         Case TypeCode.Byte
            Return Me.ToByte(Nothing)
         Case TypeCode.Char
            Return Me.ToChar(Nothing)
         Case TypeCode.DateTime
            Return Me.ToDateTime(Nothing)
         Case TypeCode.Decimal
            Return Me.ToDecimal(Nothing)
         Case TypeCode.Double
            Return Me.ToDouble(Nothing)
         Case TypeCode.Int16
            Return Me.ToInt16(Nothing)
         Case TypeCode.Int32
            Return Me.ToInt32(Nothing)
         Case TypeCode.Int64
            Return Me.ToInt64(Nothing)
         Case TypeCode.Object
            If GetType(Temperature).Equals(conversionType) Then
               Return Me
            Else
               Throw New InvalidCastException(String.Format("Conversion to a {0} is not supported.", _
                                                            conversionType.Name))
            End If
         Case TypeCode.SByte
            Return Me.ToSByte(Nothing)
         Case TypeCode.Single
            Return Me.ToSingle(Nothing)
         Case TypeCode.String
            Return Me.ToString(provider)
         Case TypeCode.UInt16
            Return Me.ToUInt16(Nothing)
         Case TypeCode.UInt32
            Return Me.ToUInt32(Nothing)
         Case TypeCode.UInt64
            Return Me.ToUInt64(Nothing)
         Case Else
            Throw New InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name))
      End Select
   End Function

   Public Function ToUInt16(provider As IFormatProvider) As UInt16 _
                   Implements IConvertible.ToUInt16
      If Me.m_Temp < UInt16.MinValue Or Me.m_Temp > UInt16.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the UInt16 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToUInt16(Me.m_Temp)
      End If
   End Function

   Public Function ToUInt32(provider As IFormatProvider) As UInt32 _
                   Implements IConvertible.ToUInt32
      If Me.m_Temp < UInt32.MinValue Or Me.m_Temp > UInt32.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the UInt32 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToUInt32(Me.m_Temp)
      End If
   End Function

   Public Function ToUInt64(provider As IFormatProvider) As UInt64 _
                   Implements IConvertible.ToUInt64
      If Me.m_Temp < UInt64.MinValue Or Me.m_Temp > UInt64.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the UInt64 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToUInt64(Me.m_temp)
      End If
   End Function
End Class

using System;
using System.Globalization;

public class Temperature : IConvertible
{
   private decimal m_Temp;

   public Temperature(decimal temperature)
   {
      this.m_Temp = temperature;
   }

   public decimal Celsius
   {
      get { return this.m_Temp; }
   }

   public decimal Kelvin
   {
      get { return this.m_Temp + 273.15m; }
   }

   public decimal Fahrenheit
   {
      get { return Math.Round((decimal) (this.m_Temp * 9 / 5 + 32), 2); }
   }

   public override string ToString()
   {
      return m_Temp.ToString("N2") + "°C";
   }

   // IConvertible implementations.
   public TypeCode GetTypeCode()
   {
      return TypeCode.Object;
   }

   public bool ToBoolean(IFormatProvider provider)
   {
      if (m_Temp == 0)
         return false;
      else
         return true;
   }

   public byte ToByte(IFormatProvider provider)
   {
      if (m_Temp < Byte.MinValue || m_Temp > Byte.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Byte type.",
                                                   this.m_Temp));
      else
         return Decimal.ToByte(this.m_Temp);
   }

   public char ToChar(IFormatProvider provider)
   {
      throw new InvalidCastException("Temperature to Char conversion is not supported.");
   }

   public DateTime ToDateTime(IFormatProvider provider)
   {
      throw new InvalidCastException("Temperature to DateTime conversion is not supported.");
   }

   public decimal ToDecimal(IFormatProvider provider)
   {
      return this.m_Temp;
   }

   public double ToDouble(IFormatProvider provider)
   {
      return Decimal.ToDouble(this.m_Temp);
   }

   public short ToInt16(IFormatProvider provider)
   {
      if (this.m_Temp < Int16.MinValue || this.m_Temp > Int16.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int16 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToInt16(this.m_Temp);
   }

   public int ToInt32(IFormatProvider provider)
      {
      if (this.m_Temp < Int32.MinValue || this.m_Temp > Int32.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int32 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToInt32(this.m_Temp);
   }

   public long ToInt64(IFormatProvider provider)
   {
      if (this.m_Temp < Int64.MinValue || this.m_Temp > Int64.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int64 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToInt64(this.m_Temp);
   }

   public sbyte ToSByte(IFormatProvider provider)
   {
      if (this.m_Temp < SByte.MinValue || this.m_Temp > SByte.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the SByte type.",
                                                   this.m_Temp));
      else
         return Decimal.ToSByte(this.m_Temp);
   }

   public float ToSingle(IFormatProvider provider)
   {
      return Decimal.ToSingle(this.m_Temp);
   }

   public string ToString(IFormatProvider provider)
   {
      return m_Temp.ToString("N2", provider) + "°C";
   }

   public object ToType(Type conversionType, IFormatProvider provider)
   {
      switch (Type.GetTypeCode(conversionType))
      {
         case TypeCode.Boolean:
            return this.ToBoolean(null);
         case TypeCode.Byte:
            return this.ToByte(null);
         case TypeCode.Char:
            return this.ToChar(null);
         case TypeCode.DateTime:
            return this.ToDateTime(null);
         case TypeCode.Decimal:
            return this.ToDecimal(null);
         case TypeCode.Double:
            return this.ToDouble(null);
         case TypeCode.Int16:
            return this.ToInt16(null);
         case TypeCode.Int32:
            return this.ToInt32(null);
         case TypeCode.Int64:
            return this.ToInt64(null);
         case TypeCode.Object:
            if (typeof(Temperature).Equals(conversionType))
               return this;
            else
               throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.",
                                                            conversionType.Name));
         case TypeCode.SByte:
            return this.ToSByte(null);
         case TypeCode.Single:
            return this.ToSingle(null);
         case TypeCode.String:
            return this.ToString(provider);
         case TypeCode.UInt16:
            return this.ToUInt16(null);
         case TypeCode.UInt32:
            return this.ToUInt32(null);
         case TypeCode.UInt64:
            return this.ToUInt64(null);
         default:
            throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
      }
   }

   public ushort ToUInt16(IFormatProvider provider)
   {
      if (this.m_Temp < UInt16.MinValue || this.m_Temp > UInt16.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt16 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToUInt16(this.m_Temp);
   }

   public uint ToUInt32(IFormatProvider provider)
   {
      if (this.m_Temp < UInt32.MinValue || this.m_Temp > UInt32.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt32 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToUInt32(this.m_Temp);
   }

   public ulong ToUInt64(IFormatProvider provider)
   {
      if (this.m_Temp < UInt64.MinValue || this.m_Temp > UInt64.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt64 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToUInt64(this.m_Temp);
   }
}

下面的示例创建 Temperature 类的一个实例并调用 ChangeType(Object, Type, IFormatProvider) 方法将其转换为 .NET Framework 支持的基本数值类型和 String。该示例还说明了 ChangeType 方法如何包装对源类型 IConvertible 实现的调用。 下面的示例创建 Temperature 类的一个实例并调用 ChangeType(Object, Type, IFormatProvider) 方法将其转换为 .NET Framework 支持的基本数值类型和 String。该示例还说明了 ChangeType 方法如何包装对源类型 IConvertible 实现的调用。

Module Example
   Public Sub Main()
      Dim cool As New Temperature(5)
      Dim targetTypes() As Type = { GetType(SByte), GetType(Int16), GetType(Int32), _
                                    GetType(Int64), GetType(Byte), GetType(UInt16), _
                                    GetType(UInt32), GetType(UInt64), GetType(Decimal), _
                                    GetType(Single), GetType(Double), GetType(String) }
      Dim provider As New CultureInfo("fr-FR")

      For Each targetType As Type In targetTypes
         Try
            Dim value As Object = Convert.ChangeType(cool, targetType, provider)
            Console.WriteLine("Converted {0} {1} to {2} {3}.", _
                              cool.GetType().Name, cool.ToString(), _
                              targetType.Name, value)
         Catch e As InvalidCastException
            Console.WriteLine("Unsupported {0} --> {1} conversion.", _
                              cool.GetType().Name, targetType.Name)
         Catch e As OverflowException
            Console.WriteLine("{0} is out of range of the {1} type.", _
                              cool, targetType.Name)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted Temperature 5.00°C to SByte 5.
'       Converted Temperature 5.00°C to Int16 5.
'       Converted Temperature 5.00°C to Int32 5.
'       Converted Temperature 5.00°C to Int64 5.
'       Converted Temperature 5.00°C to Byte 5.
'       Converted Temperature 5.00°C to UInt16 5.
'       Converted Temperature 5.00°C to UInt32 5.
'       Converted Temperature 5.00°C to UInt64 5.
'       Converted Temperature 5.00°C to Decimal 5.
'       Converted Temperature 5.00°C to Single 5.
'       Converted Temperature 5.00°C to Double 5.
'       Converted Temperature 5.00°C to String 5,00°C.

public class Example
{
   public static void Main()
   {
      Temperature cool = new Temperature(5);
      Type[] targetTypes = { typeof(SByte), typeof(Int16), typeof(Int32),
                             typeof(Int64), typeof(Byte), typeof(UInt16),
                             typeof(UInt32), typeof(UInt64), typeof(Decimal),
                             typeof(Single), typeof(Double), typeof(String) };
      CultureInfo provider = new CultureInfo("fr-FR");

      foreach (Type targetType in targetTypes)
      {
         try {
            object value = Convert.ChangeType(cool, targetType, provider);
            Console.WriteLine("Converted {0} {1} to {2} {3}.",
                              cool.GetType().Name, cool.ToString(),
                              targetType.Name, value);
         }
         catch (InvalidCastException) {
            Console.WriteLine("Unsupported {0} --> {1} conversion.",
                              cool.GetType().Name, targetType.Name);
         }
         catch (OverflowException) {
            Console.WriteLine("{0} is out of range of the {1} type.",
                              cool, targetType.Name);
         }
      }
   }
}
// The example dosplays the following output:
//       Converted Temperature 5.00°C to SByte 5.
//       Converted Temperature 5.00°C to Int16 5.
//       Converted Temperature 5.00°C to Int32 5.
//       Converted Temperature 5.00°C to Int64 5.
//       Converted Temperature 5.00°C to Byte 5.
//       Converted Temperature 5.00°C to UInt16 5.
//       Converted Temperature 5.00°C to UInt32 5.
//       Converted Temperature 5.00°C to UInt64 5.
//       Converted Temperature 5.00°C to Decimal 5.
//       Converted Temperature 5.00°C to Single 5.
//       Converted Temperature 5.00°C to Double 5.
//       Converted Temperature 5.00°C to String 5,00°C.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ChangeType 重载
System 命名空间


Convert ..::.ChangeType 方法 (Object, TypeCode, IFormatProvider)

Convert
.
.
::
.
ChangeType 方法 (Object, TypeCode, IFormatProvider)
Convert 类

返回一个指定类型的对象，该对象的值等于指定的对象。参数提供区域性特定的格式设置信息。 返回一个指定类型的对象，该对象的值等于指定的对象。参数提供区域性特定的格式设置信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ChangeType ( _
    value As Object, _
    typeCode As TypeCode, _
    provider As IFormatProvider _
) As Object
public static Object ChangeType(
    Object value,
    TypeCode typeCode,
    IFormatProvider provider
)
public:
static Object^ ChangeType(
    Object^ value,
    TypeCode typeCode,
    IFormatProvider^ provider
)
static member ChangeType :
        value:Object *
        typeCode:TypeCode *
        provider:IFormatProvider -> Object

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
typeCode
类型： System TypeCode
要返回的对象的类型。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Object
一个基础类型为 typeCode 的对象，其值等效于 value。
- 或 -
如果 value 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 typeCode 是 Empty、String 或 Object，则为 null 引用（Visual Basic 中为 Nothing）。
异常 | 条件
InvalidCastException | 不支持此转换。 - 或 - value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而且 typeCode 指定一个值类型。 - 或 - value 不实现 IConvertible 接口。
FormatException | value 的格式不是 provider 可以识别的 typeCode 类型的格式。
OverflowException | value 表示超出 typeCode 类型范围的数字。
ArgumentException | typeCode 无效。

ChangeType(Object, TypeCode, IFormatProvider) 是将 value 指定的对象转换为 typeCode 指定的预定义类型的通用转换方法。value 参数可以是任何类型的对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法还要求将 value 转换为 typeCode 受支持。 ChangeType(Object, TypeCode, IFormatProvider) 是将 value 指定的对象转换为 typeCode 指定的预定义类型的通用转换方法。value 参数可以是任何类型的对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法还要求将 value 转换为 typeCode 受支持。 ChangeType(Object, TypeCode, IFormatProvider) 是将 value 指定的对象转换为 typeCode 指定的预定义类型的通用转换方法。value 参数可以是任何类型的对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法还要求将 value 转换为 typeCode 受支持。 ChangeType(Object, TypeCode, IFormatProvider) 是将 value 指定的对象转换为 typeCode 指定的预定义类型的通用转换方法。value 参数可以是任何类型的对象。要使转换成功，value 必须实现 IConvertible 接口，因为此方法只是包装对相应 IConvertible 方法的调用。此方法还要求将 value 转换为 typeCode 受支持。

ChangeType(Object, TypeCode, IFormatProvider) 方法不支持将 value 转换为自定义类型。要执行这样的转换，请调用 ChangeType(Object, Type, IFormatProvider) 方法。 ChangeType(Object, TypeCode, IFormatProvider) 方法不支持将 value 转换为自定义类型。要执行这样的转换，请调用 ChangeType(Object, Type, IFormatProvider) 方法。

provider 参数是为转换提供格式设置信息的 IFormatProvider 实现。如果 value 是基数据类型，则 provider 只用于下列转换： provider 参数是为转换提供格式设置信息的 IFormatProvider 实现。如果 value 是基数据类型，则 provider 只用于下列转换：

  • 从数字到字符串的转换，或从字符串到数字的转换。provider 必须是 CultureInfo 对象、NumberFormatInfo 对象或返回 NumberFormatInfo 对象的自定义 IFormatProvider 实现。但是，由于 ChangeType(Object, TypeCode, IFormatProvider) 方法使用默认的"G"格式说明符执行转换，因此如果 value 或目标类型是无符号整数，则 provider 参数没有任何作用。 从数字到字符串的转换，或从字符串到数字的转换。provider 必须是 CultureInfo 对象、NumberFormatInfo 对象或返回 NumberFormatInfo 对象的自定义 IFormatProvider 实现。但是，由于 ChangeType(Object, TypeCode, IFormatProvider) 方法使用默认的"G"格式说明符执行转换，因此如果 value 或目标类型是无符号整数，则 provider 参数没有任何作用。 从数字到字符串的转换，或从字符串到数字的转换。provider 必须是 CultureInfo 对象、NumberFormatInfo 对象或返回 NumberFormatInfo 对象的自定义 IFormatProvider 实现。但是，由于 ChangeType(Object, TypeCode, IFormatProvider) 方法使用默认的"G"格式说明符执行转换，因此如果 value 或目标类型是无符号整数，则 provider 参数没有任何作用。

  • 从 DateTime 值到字符串的转换，或从字符串到 DateTime 值的转换。 provider 必须是 CultureInfo 或 DateTimeFormatInfo 对象。

如果 value 是应用程序定义的类型，则其 IConvertible 实现可以使用 provider 参数。

下面的示例定义名为 InterceptProvider 的自定义格式提供程序，它指示调用其 GetFormat 方法的时间并返回 NumberFormatInfo（对于 fr-FR 区域性）和 DateTimeFormatInfo 对象（对于 en-US 区域性）。在对 ChangeType(Object, TypeCode, IFormatProvider) 方法的所有调用中均会使用此格式提供程序。然后此示例创建一个具有 Double 和 DateTime 值的数组，并使用 TypeCode 枚举的每个值和每个成员重复调用 ChangeType(Object, TypeCode, IFormatProvider)。此示例说明了该方法何时使用 IFormatProvider 参数，还说明了如何使用 provider 参数执行区分区域性的格式设置。 下面的示例定义名为 InterceptProvider 的自定义格式提供程序，它指示调用其 GetFormat 方法的时间并返回 NumberFormatInfo（对于 fr-FR 区域性）和 DateTimeFormatInfo 对象（对于 en-US 区域性）。在对 ChangeType(Object, TypeCode, IFormatProvider) 方法的所有调用中均会使用此格式提供程序。然后此示例创建一个具有 Double 和 DateTime 值的数组，并使用 TypeCode 枚举的每个值和每个成员重复调用 ChangeType(Object, TypeCode, IFormatProvider)。此示例说明了该方法何时使用 IFormatProvider 参数，还说明了如何使用 provider 参数执行区分区域性的格式设置。 下面的示例定义名为 InterceptProvider 的自定义格式提供程序，它指示调用其 GetFormat 方法的时间并返回 NumberFormatInfo（对于 fr-FR 区域性）和 DateTimeFormatInfo 对象（对于 en-US 区域性）。在对 ChangeType(Object, TypeCode, IFormatProvider) 方法的所有调用中均会使用此格式提供程序。然后此示例创建一个具有 Double 和 DateTime 值的数组，并使用 TypeCode 枚举的每个值和每个成员重复调用 ChangeType(Object, TypeCode, IFormatProvider)。此示例说明了该方法何时使用 IFormatProvider 参数，还说明了如何使用 provider 参数执行区分区域性的格式设置。 下面的示例定义名为 InterceptProvider 的自定义格式提供程序，它指示调用其 GetFormat 方法的时间并返回 NumberFormatInfo（对于 fr-FR 区域性）和 DateTimeFormatInfo 对象（对于 en-US 区域性）。在对 ChangeType(Object, TypeCode, IFormatProvider) 方法的所有调用中均会使用此格式提供程序。然后此示例创建一个具有 Double 和 DateTime 值的数组，并使用 TypeCode 枚举的每个值和每个成员重复调用 ChangeType(Object, TypeCode, IFormatProvider)。此示例说明了该方法何时使用 IFormatProvider 参数，还说明了如何使用 provider 参数执行区分区域性的格式设置。

Imports System.Globalization

Public Class InterceptProvider : Implements IFormatProvider
   Public Function GetFormat(formatType As Type) As Object _
          Implements IFormatProvider.GetFormat
      If formatType.Equals(GetType(NumberFormatInfo)) Then
         Console.WriteLine("   Returning a fr-FR numeric format provider.")
         Return New CultureInfo("fr-FR").NumberFormat
      ElseIf formatType.Equals(GetType(DateTimeFormatInfo)) Then
         Console.WriteLine("   Returning an en-US date/time format provider.")
         Return New CultureInfo("en-US").DateTimeFormat
      Else
         Console.WriteLine("   Requesting a format provider of {0}.", formatType.Name)
         Return Nothing
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim values() As Object = { 103.5r, #12/26/2010 2:34PM# }
      Dim provider As New InterceptProvider()

      ' Convert value to each of the types represented in TypeCode enum.
      For Each value As Object In values
         ' Iterate types in TypeCode enum.
         For Each enumType As TypeCode In DirectCast([Enum].GetValues(GetType(TypeCode)), TypeCode())
            If enumType = TypeCode.DbNull Or enumType = TypeCode.Empty Then Continue For

            Try
               Console.WriteLine("{0} ({1}) --> {2} ({3}).", _
                                 value, value.GetType().Name, _
                                 Convert.ChangeType(value, enumType, provider), _
                                 enumType.ToString())
            Catch e As InvalidCastException
               Console.WriteLine("Cannot convert a {0} to a {1}", _
                                 value.GetType().Name, enumType.ToString())
            Catch e As OverflowException
               Console.WriteLine("Overflow: {0} is out of the range of a {1}", _
                                 value, enumType.ToString())
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    103.5 (Double) --> 103.5 (Object).
'    103.5 (Double) --> True (Boolean).
'    Cannot convert a Double to a Char
'    103.5 (Double) --> 104 (SByte).
'    103.5 (Double) --> 104 (Byte).
'    103.5 (Double) --> 104 (Int16).
'    103.5 (Double) --> 104 (UInt16).
'    103.5 (Double) --> 104 (Int32).
'    103.5 (Double) --> 104 (UInt32).
'    103.5 (Double) --> 104 (Int64).
'    103.5 (Double) --> 104 (UInt64).
'    103.5 (Double) --> 103.5 (Single).
'    103.5 (Double) --> 103.5 (Double).
'    103.5 (Double) --> 103.5 (Decimal).
'    Cannot convert a Double to a DateTime
'       Returning a fr-FR numeric format provider.
'    103.5 (Double) --> 103,5 (String).
'
'    12/26/2010 2:34:00 PM (DateTime) --> 12/26/2010 2:34:00 PM (Object).
'    Cannot convert a DateTime to a Boolean
'    Cannot convert a DateTime to a Char
'    Cannot convert a DateTime to a SByte
'    Cannot convert a DateTime to a Byte
'    Cannot convert a DateTime to a Int16
'    Cannot convert a DateTime to a UInt16
'    Cannot convert a DateTime to a Int32
'    Cannot convert a DateTime to a UInt32
'    Cannot convert a DateTime to a Int64
'    Cannot convert a DateTime to a UInt64
'    Cannot convert a DateTime to a Single
'    Cannot convert a DateTime to a Double
'    Cannot convert a DateTime to a Decimal
'    12/26/2010 2:34:00 PM (DateTime) --> 12/26/2010 2:34:00 PM (DateTime).
'       Returning an en-US date/time format provider.
'    12/26/2010 2:34:00 PM (DateTime) --> 12/26/2010 2:34:00 PM (String).

using System;
using System.Globalization;

public class InterceptProvider : IFormatProvider
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(NumberFormatInfo)) {
         Console.WriteLine("   Returning a fr-FR numeric format provider.");
         return new System.Globalization.CultureInfo("fr-FR").NumberFormat;
      }
      else if (formatType == typeof(DateTimeFormatInfo)) {
         Console.WriteLine("   Returning an en-US date/time format provider.");
         return new System.Globalization.CultureInfo("en-US").DateTimeFormat;
      }
      else {
         Console.WriteLine("   Requesting a format provider of {0}.", formatType.Name);
         return null;
      }
   }
}

public class Example
{
   public static void Main()
   {
      object[] values = { 103.5d, new DateTime(2010, 12, 26, 14, 34, 0) };
      IFormatProvider provider = new InterceptProvider();

      // Convert value to each of the types represented in TypeCode enum.
      foreach (object value in values)
      {
         // Iterate types in TypeCode enum.
         foreach (TypeCode enumType in ((TypeCode[]) Enum.GetValues(typeof(TypeCode))))
         {
            if (enumType == TypeCode.DBNull || enumType == TypeCode.Empty) continue;

            try {
               Console.WriteLine("{0} ({1}) --> {2} ({3}).",
                                 value, value.GetType().Name,
                                 Convert.ChangeType(value, enumType, provider),
                                 enumType.ToString());
            }
            catch (InvalidCastException) {
               Console.WriteLine("Cannot convert a {0} to a {1}",
                                 value.GetType().Name, enumType.ToString());
            }
            catch (OverflowException) {
               Console.WriteLine("Overflow: {0} is out of the range of a {1}",
                                 value, enumType.ToString());
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    103.5 (Double) --> 103.5 (Object).
//    103.5 (Double) --> True (Boolean).
//    Cannot convert a Double to a Char
//    103.5 (Double) --> 104 (SByte).
//    103.5 (Double) --> 104 (Byte).
//    103.5 (Double) --> 104 (Int16).
//    103.5 (Double) --> 104 (UInt16).
//    103.5 (Double) --> 104 (Int32).
//    103.5 (Double) --> 104 (UInt32).
//    103.5 (Double) --> 104 (Int64).
//    103.5 (Double) --> 104 (UInt64).
//    103.5 (Double) --> 103.5 (Single).
//    103.5 (Double) --> 103.5 (Double).
//    103.5 (Double) --> 103.5 (Decimal).
//    Cannot convert a Double to a DateTime
//       Returning a fr-FR numeric format provider.
//    103.5 (Double) --> 103,5 (String).
//
//    12/26/2010 2:34:00 PM (DateTime) --> 12/26/2010 2:34:00 PM (Object).
//    Cannot convert a DateTime to a Boolean
//    Cannot convert a DateTime to a Char
//    Cannot convert a DateTime to a SByte
//    Cannot convert a DateTime to a Byte
//    Cannot convert a DateTime to a Int16
//    Cannot convert a DateTime to a UInt16
//    Cannot convert a DateTime to a Int32
//    Cannot convert a DateTime to a UInt32
//    Cannot convert a DateTime to a Int64
//    Cannot convert a DateTime to a UInt64
//    Cannot convert a DateTime to a Single
//    Cannot convert a DateTime to a Double
//    Cannot convert a DateTime to a Decimal
//    12/26/2010 2:34:00 PM (DateTime) --> 12/26/2010 2:34:00 PM (DateTime).
//       Returning an en-US date/time format provider.
//    12/26/2010 2:34:00 PM (DateTime) --> 12/26/2010 2:34:00 PM (String).

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ChangeType 重载
System 命名空间


Convert ..::.FromBase64CharArray 方法

Convert
.
.
::
.
FromBase64CharArray 方法
Convert 类

将 Unicode 字符数组（它将二进制数据编码为 Base64 数字）的子集转换为等效的 8 位无符号整数数组。参数指定输入数组的子集以及要转换的元素数。 将 Unicode 字符数组（它将二进制数据编码为 Base64 数字）的子集转换为等效的 8 位无符号整数数组。参数指定输入数组的子集以及要转换的元素数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromBase64CharArray ( _
    inArray As Char(), _
    offset As Integer, _
    length As Integer _
) As Byte()
public static byte[] FromBase64CharArray(
    char[] inArray,
    int offset,
    int length
)
public:
static array<unsigned char>^ FromBase64CharArray(
    array<wchar_t>^ inArray,
    int offset,
    int length
)
static member FromBase64CharArray :
        inArray:char[] *
        offset:int *
        length:int -> byte[]

参数

inArray
类型：
array<
System Char
>
[]
()
[]

Unicode 字符数组。
offset
类型： System Int32
inArray 内的一个位置。
length
类型： System Int32
要转换的 inArray 中的元素数。

返回值

类型：
array<
System Byte
>
[]
()
[]

等效于 inArray 中位于 offset 位置的 length 元素的 8 位无符号整数数组。
异常 | 条件
ArgumentNullException | inArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | offset 或 length 小于 0。 - 或 - offset 和 length 指示不在 inArray 内的位置。
FormatException | inArray 的长度（忽略空白字符）不是 0 或 4 的倍数。 - 或 - inArray 的格式无效。inArray 包含一个非 base 64 字符、两个以上的填充字符或者在填充字符中包含非空白字符。 inArray 的格式无效。inArray 包含一个非 base 64 字符、两个以上的填充字符或者在填充字符中包含非空白字符。

inArray 由 base 64 数字、空白字符和尾随填充字符组成。从零开始以升序排列的以 64 为基的数字为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。 inArray 由 base 64 数字、空白字符和尾随填充字符组成。从零开始以升序排列的以 64 为基的数字为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。

空白字符及其 Unicode 名称和十六进制码位为：制表符（CHARACTER TABULATION，U+0009）、换行符（LINE FEED，U+000A）、回车符（CARRIAGE RETURN，U+000D）和空格符（SPACE，U+0020）。inArray 中可以出现任意数目的空白字符，因为所有空白字符都将被忽略。 空白字符及其 Unicode 名称和十六进制码位为：制表符（CHARACTER TABULATION，U+0009）、换行符（LINE FEED，U+000A）、回车符（CARRIAGE RETURN，U+000D）和空格符（SPACE，U+0020）。inArray 中可以出现任意数目的空白字符，因为所有空白字符都将被忽略。

无值字符“=”用于尾部的空白。inArray 的末尾可以包含零个、一个或两个填充字符。 无值字符“=”用于尾部的空白。inArray 的末尾可以包含零个、一个或两个填充字符。

下面的示例演示如何使用 FromBase64CharArray(array<Char>[]()[], Int32, Int32) 方法对以 UUencode (base 64) 编码的数据进行解码并将它保存为二进制输出。

Public Sub DecodeWithCharArray()
   Dim inFile As System.IO.StreamReader
   Dim base64CharArray() As Char

   Try
      inFile = New System.IO.StreamReader(inputFileName, _
                                          System.Text.Encoding.ASCII)

      ReDim base64CharArray(inFile.BaseStream.Length - 1)
      inFile.Read(base64CharArray, 0, inFile.BaseStream.Length)
      inFile.Close()
   Catch exp As System.Exception
      ' Error creating stream or reading from it.
      System.Console.WriteLine("{0}", exp.Message)
      Return
   End Try

   ' Convert the Base64 UUEncoded input into binary output.
   Dim binaryData() As Byte
   Try
      binaryData = System.Convert.FromBase64CharArray(base64CharArray, 0, _
                                                base64CharArray.Length)
   Catch exp As System.ArgumentNullException
      System.Console.WriteLine("Base 64 character array is null.")
      Return
   Catch exp As System.FormatException
      System.Console.WriteLine("Base 64 Char Array length is not " + _
               "4 or is not an even multiple of 4")
      Return
   End Try

   ' Write out the decoded data.
   Dim outFile As System.IO.FileStream
   Try
      outFile = New System.IO.FileStream(outputFileName, _
                                         System.IO.FileMode.Create, _
                                         System.IO.FileAccess.Write)
      outFile.Write(binaryData, 0, binaryData.Length - 1)
      outFile.Close()
   Catch exp As System.Exception
      ' Error creating stream or writing to it.
      System.Console.WriteLine("{0}", exp.Message)
   End Try
End Sub

        public void DecodeWithCharArray() {
            System.IO.StreamReader inFile;
            char[] base64CharArray;

            try {
                inFile = new System.IO.StreamReader(inputFileName,
                                                System.Text.Encoding.ASCII);
                base64CharArray = new char[inFile.BaseStream.Length];
                inFile.Read(base64CharArray, 0, (int)inFile.BaseStream.Length);
                inFile.Close();
            }
            catch (System.Exception exp) {
                // Error creating stream or reading from it.
                System.Console.WriteLine("{0}", exp.Message);
                return;
            }

            // Convert the Base64 UUEncoded input into binary output.
            byte[] binaryData;
            try {
                binaryData =
                    System.Convert.FromBase64CharArray(base64CharArray,
                                                       0,
                                                       base64CharArray.Length);
            }
            catch ( System.ArgumentNullException ) {
                System.Console.WriteLine("Base 64 character array is null.");
                return;
            }
            catch ( System.FormatException ) {
                System.Console.WriteLine("Base 64 Char Array length is not " +
                    "4 or is not an even multiple of 4." );
                return;
            }

            // Write out the decoded data.
            System.IO.FileStream outFile;
            try {
                outFile = new System.IO.FileStream(outputFileName,
                                                   System.IO.FileMode.Create,
                                                   System.IO.FileAccess.Write);
                outFile.Write(binaryData, 0, binaryData.Length);
                outFile.Close();
            }
            catch (System.Exception exp) {
                // Error creating stream or writing to it.
                System.Console.WriteLine("{0}", exp.Message);
            }
        }

public:
   void DecodeWithCharArray()
   {
      StreamReader^ inFile;
      array<Char>^base64CharArray;
      try
      {
         inFile = gcnew StreamReader( inputFileName,
                                      Text::Encoding::ASCII );
         base64CharArray = gcnew array<Char>((int)(inFile->BaseStream->Length));
         inFile->Read( base64CharArray, 0, (int)inFile->BaseStream->Length );
         inFile->Close();
      }
      catch ( Exception^ exp )
      {

         // Error creating stream or reading from it.
         Console::WriteLine( "{0}", exp->Message );
         return;
      }

      // Convert the Base64 UUEncoded input into binary output.
      array<Byte>^binaryData;
      try
      {
         binaryData = Convert::FromBase64CharArray( base64CharArray,
                                                    0,
                                                    base64CharArray->Length );
      }
      catch ( ArgumentNullException^ )
      {
         Console::WriteLine( "Base 64 character array is null." );
         return;
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "Base 64 Char Array length is not " +
            "4 or is not an even multiple of 4." );
         return;
      }

      // Write out the decoded data.
      FileStream^ outFile;
      try
      {
         outFile = gcnew FileStream( outputFileName,
                                     FileMode::Create,
                                     FileAccess::Write );
         outFile->Write( binaryData, 0, binaryData->Length );
         outFile->Close();
      }
      catch ( Exception^ exp )
      {
         // Error creating stream or writing to it.
         Console::WriteLine( "{0}", exp->Message );
      }
   }

下面的示例阐释 ToBase64CharArray(array<Byte>[]()[], Int32, Int32, array<Char>[]()[], Int32, Base64FormattingOptions) 和 FromBase64CharArray(array<Char>[]()[], Int32, Int32) 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64CharArray(array<Byte>[]()[], Int32, Int32, array<Char>[]()[], Int32, Base64FormattingOptions) 和 FromBase64CharArray(array<Char>[]()[], Int32, Int32) 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64CharArray(array<Byte>[]()[], Int32, Int32, array<Char>[]()[], Int32, Base64FormattingOptions) 和 FromBase64CharArray(array<Char>[]()[], Int32, Int32) 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64CharArray(array<Byte>[]()[], Int32, Int32, array<Char>[]()[], Int32, Base64FormattingOptions) 和 FromBase64CharArray(array<Char>[]()[], Int32, Int32) 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64CharArray(array<Byte>[]()[], Int32, Int32, array<Char>[]()[], Int32, Base64FormattingOptions) 和 FromBase64CharArray(array<Char>[]()[], Int32, Int32) 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64CharArray(array<Byte>[]()[], Int32, Int32, array<Char>[]()[], Int32, Base64FormattingOptions) 和 FromBase64CharArray(array<Char>[]()[], Int32, Int32) 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。

如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。

' This example demonstrates the Convert.ToBase64CharArray() and
'                               Convert.FromBase64CharArray methods
Class Sample
   Public Shared Sub Main()
      Dim byteArray1(255) As Byte
      Dim byteArray2(255) As Byte
      Dim charArray(351) As Char
      Dim charArrayLength As Integer
      Dim nl As String = Environment.NewLine

      Dim ruler1a As String = "         1         2         3         4"
      Dim ruler2a As String = "1234567890123456789012345678901234567890"
      Dim ruler3a As String = "----+----+----+----+----+----+----+----+"
      Dim ruler1b As String = "         5         6         7      "
      Dim ruler2b As String = "123456789012345678901234567890123456"
      Dim ruler3b As String = "----+----+----+----+----+----+----+-"
      Dim ruler As String = String.Concat(ruler1a, ruler1b, nl, _
                                          ruler2a, ruler2b, nl, _
                                          ruler3a, ruler3b)

      ' 1) Initialize and display a Byte array of arbitrary data.
      Console.WriteLine("1) Input: A Byte array of arbitrary data.{0}", nl)
      Dim x As Integer
      For x = 0 To byteArray1.Length - 1
         byteArray1(x) = CByte(x)
         Console.Write("{0:X2} ", byteArray1(x))
         If(x + 1) Mod 20 = 0 Then
            Console.WriteLine()
         End If
      Next x
      Console.Write("{0}{0}", nl)

      ' 2) Convert the input Byte array to a Char array, with newlines inserted.
      charArrayLength = Convert.ToBase64CharArray( _
                                byteArray1, 0, byteArray1.Length, _
                                charArray, 0, _
                                Base64FormattingOptions.InsertLineBreaks)
      Console.WriteLine("2) Convert the input Byte array to a Char array with newlines.")
      Console.Write("   Output: A Char array (length = {0}). ", charArrayLength)
      Console.WriteLine("The elements of the array are:{0}", nl)
      Console.WriteLine(ruler)
      Console.WriteLine(New [String](charArray))
      Console.WriteLine()

      ' 3) Convert the Char array back to a Byte array.
      Console.WriteLine("3) Convert the Char array to an output Byte array.")
      byteArray2 = Convert.FromBase64CharArray(charArray, 0, charArrayLength)

      ' 4) Are the input and output Byte arrays equivalent?
      Console.WriteLine("4) The output Byte array is equal to the input Byte array: {0}", _
                            ArraysAreEqual(byteArray1, byteArray2))
   End Sub 'Main

   Public Shared Function ArraysAreEqual(a1() As Byte, a2() As Byte) As Boolean
      If a1.Length <> a2.Length Then
         Return False
      End If
      Dim i As Integer
      For i = 0 To a1.Length - 1
         If a1(i) <> a2(i) Then
            Return False
         End If
      Next i
      Return True
   End Function 'ArraysAreEqual
End Class 'Sample
'
'This example produces the following results:
'
'1) Input: A Byte array of arbitrary data.
'
'00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
'14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
'28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
'3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
'50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
'64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
'78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
'8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
'A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
'B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
'C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
'DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
'F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
'
'2) Convert the input Byte array to a Char array with newlines.
'   Output: A Char array (length = 352). The elements of the array are:
'
'         1         2         3         4         5         6         7
'1234567890123456789012345678901234567890123456789012345678901234567890123456
'----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
'OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
'cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
'q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
'5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==
'
'3) Convert the Char array to an output Byte array.
'4) The output Byte array is equal to the input Byte array: True

// This example demonstrates the Convert.ToBase64CharArray() and
//                               Convert.FromBase64CharArray methods

using System;

class Sample
{
    public static void Main()
    {
    byte[] byteArray1 = new byte[256];
    byte[] byteArray2 = new byte[256];
    char[] charArray  = new char[352];
    int charArrayLength;
    string nl = Environment.NewLine;

    string ruler1a = "         1         2         3         4";
    string ruler2a = "1234567890123456789012345678901234567890";
    string ruler3a = "----+----+----+----+----+----+----+----+";
    string ruler1b = "         5         6         7      ";
    string ruler2b = "123456789012345678901234567890123456";
    string ruler3b = "----+----+----+----+----+----+----+-";
    string ruler   = String.Concat(ruler1a, ruler1b, nl,
                                   ruler2a, ruler2b, nl,
                                   ruler3a, ruler3b);

// 1) Initialize and display a Byte array of arbitrary data.
    Console.WriteLine("1) Input: A Byte array of arbitrary data.{0}", nl);
    for (int x = 0; x < byteArray1.Length; x++)
    {
    byteArray1[x] = (byte)x;
    Console.Write("{0:X2} ", byteArray1[x]);
    if (((x+1)%20) == 0) Console.WriteLine();
    }
    Console.Write("{0}{0}", nl);

// 2) Convert the input Byte array to a Char array, with newlines inserted.
    charArrayLength =
        Convert.ToBase64CharArray(byteArray1, 0, byteArray1.Length,
                                   charArray, 0, Base64FormattingOptions.InsertLineBreaks);
    Console.WriteLine("2) Convert the input Byte array to a Char array with newlines.");
    Console.Write("   Output: A Char array (length = {0}). ", charArrayLength);
    Console.WriteLine("The elements of the array are:{0}", nl);
    Console.WriteLine(ruler);
    Console.WriteLine(new String(charArray));
    Console.WriteLine();

// 3) Convert the Char array back to a Byte array.
    Console.WriteLine("3) Convert the Char array to an output Byte array.");
    byteArray2 = Convert.FromBase64CharArray(charArray, 0, charArrayLength);

// 4) Are the input and output Byte arrays equivalent?
    Console.WriteLine("4) The output Byte array is equal to the input Byte array: {0}",
                      ArraysAreEqual(byteArray1, byteArray2));
    }

    public static bool ArraysAreEqual(byte[] a1, byte[] a2)
    {
    if (a1.Length != a2.Length) return false;
    for (int i = 0; i < a1.Length; i++)
        if (a1[i] != a2[i]) return false;
    return true;
    }
}
/*
This example produces the following results:

1) Input: A Byte array of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert the input Byte array to a Char array with newlines.
   Output: A Char array (length = 352). The elements of the array are:

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the Char array to an output Byte array.
4) The output Byte array is equal to the input Byte array: True

*/

// This example demonstrates the Convert.ToBase64CharArray() and
//                               Convert.FromBase64CharArray methods
using namespace System;
bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 );
int main()
{
   array<Byte>^byteArray1 = gcnew array<Byte>(256);
   array<Byte>^byteArray2 = gcnew array<Byte>(256);
   array<Char>^charArray = gcnew array<Char>(352);
   int charArrayLength;
   String^ nl = Environment::NewLine;
   String^ ruler1a = "         1         2         3         4";
   String^ ruler2a = "1234567890123456789012345678901234567890";
   String^ ruler3a = "----+----+----+----+----+----+----+----+";
   String^ ruler1b = "         5         6         7      ";
   String^ ruler2b = "123456789012345678901234567890123456";
   String^ ruler3b = "----+----+----+----+----+----+----+-";
   String^ ruler = String::Concat( ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b );

   // 1) Initialize and display a Byte array of arbitrary data.
   Console::WriteLine( "1) Input: A Byte array of arbitrary data.{0}", nl );
   for ( int x = 0; x < byteArray1->Length; x++ )
   {
      byteArray1[ x ] = (Byte)x;
      Console::Write( "{0:X2} ", byteArray1[ x ] );
      if ( ((x + 1) % 20) == 0 )
            Console::WriteLine();

   }
   Console::Write( "{0}{0}", nl );

   // 2) Convert the input Byte array to a Char array, with newlines inserted.
   charArrayLength = Convert::ToBase64CharArray( byteArray1, 0, byteArray1->Length,
                                                 charArray, 0,
                                                 Base64FormattingOptions::InsertLineBreaks );
   Console::WriteLine( "2) Convert the input Byte array to a Char array with newlines." );
   Console::Write( "   Output: A Char array (length = {0}). ", charArrayLength );
   Console::WriteLine( "The elements of the array are:{0}", nl );
   Console::WriteLine( ruler );
   Console::WriteLine( gcnew String( charArray ) );
   Console::WriteLine();

   // 3) Convert the Char array back to a Byte array.
   Console::WriteLine( "3) Convert the Char array to an output Byte array." );
   byteArray2 = Convert::FromBase64CharArray( charArray, 0, charArrayLength );

   // 4) Are the input and output Byte arrays equivalent?
   Console::WriteLine( "4) The output Byte array is equal to the input Byte array: {0}", ArraysAreEqual( byteArray1, byteArray2 ) );
}

bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 )
{
   if ( a1->Length != a2->Length )
      return false;

   for ( int i = 0; i < a1->Length; i++ )
      if ( a1[ i ] != a2[ i ] )
            return false;

   return true;
}

/*
This example produces the following results:

1) Input: A Byte array of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert the input Byte array to a Char array with newlines.
   Output: A Char array (length = 352). The elements of the array are:

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the Char array to an output Byte array.
4) The output Byte array is equal to the input Byte array: True

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.FromBase64String 方法

Convert
.
.
::
.
FromBase64String 方法
Convert 类

将指定的字符串（它将二进制数据编码为 Base64 数字）转换为等效的 8 位无符号整数数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromBase64String ( _
    s As String _
) As Byte()
public static byte[] FromBase64String(
    string s
)
public:
static array<unsigned char>^ FromBase64String(
    String^ s
)
static member FromBase64String :
        s:string -> byte[]

参数

s
类型： System String
要转换的字符串。

返回值

类型：
array<
System Byte
>
[]
()
[]

与 s 等效的 8 位无符号整数数组。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的长度（忽略空白字符）不是 0 或 4 的倍数。 - 或 - s 的格式无效。s 包含一个非 base 64 字符、两个以上的填充字符或者在填充字符中包含非空白字符。 s 的格式无效。s 包含一个非 base 64 字符、两个以上的填充字符或者在填充字符中包含非空白字符。

s 由 base 64 数字、空白字符和尾随填充字符组成。从零开始以升序排列的以 64 为基的数字为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。 s 由 base 64 数字、空白字符和尾随填充字符组成。从零开始以升序排列的以 64 为基的数字为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。

空白字符及其 Unicode 名称和十六进制码位为：制表符（CHARACTER TABULATION，U+0009）、换行符（LINE FEED，U+000A）、回车符（CARRIAGE RETURN，U+000D）和空格符（SPACE，U+0020）。s 中可以出现任意数目的空白字符，因为所有空白字符都将被忽略。 空白字符及其 Unicode 名称和十六进制码位为：制表符（CHARACTER TABULATION，U+0009）、换行符（LINE FEED，U+000A）、回车符（CARRIAGE RETURN，U+000D）和空格符（SPACE，U+0020）。s 中可以出现任意数目的空白字符，因为所有空白字符都将被忽略。

无值字符“=”用于尾部的空白。s 的末尾可以包含零个、一个或两个填充字符。 无值字符“=”用于尾部的空白。s 的末尾可以包含零个、一个或两个填充字符。

下面的示例演示如何使用 FromBase64String 方法对以 UUencode (base 64) 编码的数据进行解码并将它保存为二进制输出。

Public Sub DecodeWithString()
   Dim inFile As System.IO.StreamReader
   Dim base64String As String

   Try
      Dim base64CharArray() As Char
      inFile = New System.IO.StreamReader(inputFileName, _
                                          System.Text.Encoding.ASCII)
      base64CharArray = New Char(inFile.BaseStream.Length) {}
      inFile.Read(base64CharArray, 0, inFile.BaseStream.Length)
      base64String = New String(base64CharArray, _
                                0, _
                                base64CharArray.Length - 1)
   Catch exp As System.Exception
      ' Error creating stream or reading from it.
      System.Console.WriteLine("{0}", exp.Message)
      Return
   End Try

   ' Convert the Base64 UUEncoded input into binary output.
   Dim binaryData() As Byte
   Try
      binaryData = System.Convert.FromBase64String(base64String)
   Catch exp As System.ArgumentNullException
      System.Console.WriteLine("Base 64 string is null.")
      Return
   Catch exp As System.FormatException
      System.Console.WriteLine("Base 64 length is not 4 or is " + _
                               "not an even multiple of 4.")
      Return
   End Try

   'Write out the decoded data.
   Dim outFile As System.IO.FileStream
   Try
      outFile = New System.IO.FileStream(outputFileName, _
                                         System.IO.FileMode.Create, _
                                         System.IO.FileAccess.Write)
      outFile.Write(binaryData, 0, binaryData.Length - 1)
      outFile.Close()
   Catch exp As System.Exception
      ' Error creating stream or writing to it.
      System.Console.WriteLine("{0}", exp.Message)
   End Try
End Sub

        public void DecodeWithString() {
            System.IO.StreamReader inFile;
            string base64String;

            try {
                char[] base64CharArray;
                inFile = new System.IO.StreamReader(inputFileName,
                                                System.Text.Encoding.ASCII);
                base64CharArray = new char[inFile.BaseStream.Length];
                inFile.Read(base64CharArray, 0, (int)inFile.BaseStream.Length);
                base64String = new string(base64CharArray);
            }
            catch (System.Exception exp) {
                // Error creating stream or reading from it.
                System.Console.WriteLine("{0}", exp.Message);
                return;
            }

            // Convert the Base64 UUEncoded input into binary output.
            byte[] binaryData;
            try {
                binaryData =
                    System.Convert.FromBase64String(base64String);
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine("Base 64 string is null.");
                return;
            }
            catch (System.FormatException) {
                System.Console.WriteLine("Base 64 string length is not " +
                    "4 or is not an even multiple of 4." );
                return;
            }

            // Write out the decoded data.
            System.IO.FileStream outFile;
            try {
                outFile = new System.IO.FileStream(outputFileName,
                                                   System.IO.FileMode.Create,
                                                   System.IO.FileAccess.Write);
                outFile.Write(binaryData, 0, binaryData.Length);
                outFile.Close();
            }
            catch (System.Exception exp) {
                // Error creating stream or writing to it.
                System.Console.WriteLine("{0}", exp.Message);
            }
        }

public:
   void DecodeWithString()
   {
      StreamReader^ inFile;
      String^ base64String;
      try
      {
         array<Char>^base64CharArray;
         inFile = gcnew StreamReader( inputFileName,
                                      Text::Encoding::ASCII );
         base64CharArray = gcnew array<Char>((int)(inFile->BaseStream->Length));
         inFile->Read( base64CharArray, 0, (int)inFile->BaseStream->Length );
         base64String = gcnew String( base64CharArray );
      }
      catch ( Exception^ exp )
      {
         // Error creating stream or reading from it.
         Console::WriteLine( "{0}", exp->Message );
         return;
      }

      // Convert the Base64 UUEncoded input into binary output.
      array<Byte>^binaryData;
      try
      {
         binaryData = Convert::FromBase64String( base64String );
      }
      catch ( ArgumentNullException^ )
      {
         Console::WriteLine( "Base 64 String^ is null." );
         return;
      }
      catch ( FormatException^ )
      {
         Console::WriteLine( "Base 64 String^ length is not " +
            "4 or is not an even multiple of 4." );
         return;
      }

      // Write out the decoded data.
      FileStream^ outFile;
      try
      {
         outFile = gcnew FileStream( outputFileName,
                                     FileMode::Create,
                                     FileAccess::Write );
         outFile->Write( binaryData, 0, binaryData->Length );
         outFile->Close();
      }
      catch ( Exception^ exp )
      {
         // Error creating stream or writing to it.
         Console::WriteLine( "{0}", exp->Message );
      }
   }

下面的示例阐释 ToBase64String 和 FromBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64String 和 FromBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64String 和 FromBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64String 和 FromBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64String 和 FromBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例阐释 ToBase64String 和 FromBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。

如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。

' This example demonstrates the Convert.ToBase64String() and
'                               Convert.FromBase64String() methods
Class Sample
   Public Shared Sub Main()
      Dim inArray(255)  As Byte
      Dim outArray(255) As Byte
      Dim s2 As String
      Dim s3 As String
      Dim step1 As String = "1) The input is a byte array (inArray) of arbitrary data."
      Dim step2 As String = "2) Convert a subarray of the input data array to a base 64 string."
      Dim step3 As String = "3) Convert the entire input data array to a base 64 string."
      Dim step4 As String = "4) The two methods in steps 2 and 3 produce the same result: {0}"
      Dim step5 As String = "5) Convert the base 64 string to an output byte array (outArray)."
      Dim step6 As String = "6) The input and output arrays, inArray and outArray, are equal: {0}"
      Dim x As Integer
      Dim nl As String = Environment.NewLine
      Dim ruler1a As String = "         1         2         3         4"
      Dim ruler2a As String = "1234567890123456789012345678901234567890"
      Dim ruler3a As String = "----+----+----+----+----+----+----+----+"
      Dim ruler1b As String = "         5         6         7      "
      Dim ruler2b As String = "123456789012345678901234567890123456"
      Dim ruler3b As String = "----+----+----+----+----+----+----+-"
      Dim ruler As String = [String].Concat(ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b, nl)

      ' 1) Display an arbitrary array of input data (inArray). The data could be
      '    derived from user input, a file, an algorithm, etc.
      Console.WriteLine(step1)
      Console.WriteLine()
      For x = 0 To inArray.Length - 1
         inArray(x) = CByte(x)
         Console.Write("{0:X2} ", inArray(x))
         If (x + 1) Mod 20 = 0 Then
            Console.WriteLine()
         End If
      Next x
      Console.Write("{0}{0}", nl)

      ' 2) Convert a subarray of the input data to a base64 string. In this case,
      '    the subarray is the entire input data array. New lines (CRLF) are inserted.
      Console.WriteLine(step2)
      s2 = Convert.ToBase64String(inArray, 0, inArray.Length, _
                                  Base64FormattingOptions.InsertLineBreaks)
      Console.WriteLine("{0}{1}{2}{3}", nl, ruler, s2, nl)

      ' 3) Convert the input data to a base64 string. In this case, the entire
      '    input data array is converted by default. New lines (CRLF) are inserted.
      Console.WriteLine(step3)
      s3 = Convert.ToBase64String(inArray, Base64FormattingOptions.InsertLineBreaks)

      ' 4) Test whether the methods in steps 2 and 3 produce the same result.
      Console.WriteLine(step4, s2.Equals(s3))

      ' 5) Convert the base 64 string to an output array (outArray).
      Console.WriteLine(step5)
      outArray = Convert.FromBase64String(s2)

      ' 6) Is outArray equal to inArray?
      Console.WriteLine(step6, ArraysAreEqual(inArray, outArray))
   End Sub 'Main

   Public Shared Function ArraysAreEqual(a1() As Byte, a2() As Byte) As Boolean
      If a1.Length <> a2.Length Then
         Return False
      End If
      Dim i As Integer
      For i = 0 To a1.Length - 1
         If a1(i) <> a2(i) Then
            Return False
         End If
      Next i
      Return True
   End Function 'ArraysAreEqual
End Class 'Sample
'
'This example produces the following results:
'
'1) The input is a byte array (inArray) of arbitrary data.
'
'00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
'14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
'28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
'3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
'50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
'64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
'78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
'8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
'A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
'B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
'C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
'DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
'F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
'
'2) Convert a subarray of the input data array to a base 64 string.
'
'         1         2         3         4         5         6         7
'1234567890123456789012345678901234567890123456789012345678901234567890123456
'----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
'OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
'cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
'q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
'5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==
'
'3) Convert the entire input data array to a base 64 string.
'4) The two methods in steps 2 and 3 produce the same result: True
'5) Convert the base 64 string to an output byte array (outArray).
'6) The input and output arrays, inArray and outArray, are equal: True
'

// This example demonstrates the Convert.ToBase64String() and
//                               Convert.FromBase64String() methods

using System;
class Sample
{
    public static void Main()
    {
    byte[] inArray  = new byte[256];
    byte[] outArray = new byte[256];
    string s2;
    string s3;
    string step1 = "1) The input is a byte array (inArray) of arbitrary data.";
    string step2 = "2) Convert a subarray of the input data array to a base 64 string.";
    string step3 = "3) Convert the entire input data array to a base 64 string.";
    string step4 = "4) The two methods in steps 2 and 3 produce the same result: {0}";
    string step5 = "5) Convert the base 64 string to an output byte array (outArray).";
    string step6 = "6) The input and output arrays, inArray and outArray, are equal: {0}";
    int x;
    string nl = Environment.NewLine;
    string ruler1a = "         1         2         3         4";
    string ruler2a = "1234567890123456789012345678901234567890";
    string ruler3a = "----+----+----+----+----+----+----+----+";
    string ruler1b = "         5         6         7      ";
    string ruler2b = "123456789012345678901234567890123456";
    string ruler3b = "----+----+----+----+----+----+----+-";
    string ruler   = String.Concat(ruler1a, ruler1b, nl,
                                   ruler2a, ruler2b, nl,
                                   ruler3a, ruler3b, nl);

// 1) Display an arbitrary array of input data (inArray). The data could be
//    derived from user input, a file, an algorithm, etc.

    Console.WriteLine(step1);
    Console.WriteLine();
    for (x = 0; x < inArray.Length; x++)
        {
        inArray[x] = (byte)x;
        Console.Write("{0:X2} ", inArray[x]);
        if (((x+1)%20) == 0) Console.WriteLine();
        }
    Console.Write("{0}{0}", nl);

// 2) Convert a subarray of the input data to a base64 string. In this case,
//    the subarray is the entire input data array. New lines (CRLF) are inserted.

    Console.WriteLine(step2);
    s2 = Convert.ToBase64String(inArray, 0, inArray.Length,
                                Base64FormattingOptions.InsertLineBreaks);
    Console.WriteLine("{0}{1}{2}{3}", nl, ruler, s2, nl);

// 3) Convert the input data to a base64 string. In this case, the entire
//    input data array is converted by default. New lines (CRLF) are inserted.

    Console.WriteLine(step3);
    s3 = Convert.ToBase64String(inArray, Base64FormattingOptions.InsertLineBreaks);

// 4) Test whether the methods in steps 2 and 3 produce the same result.
    Console.WriteLine(step4, s2.Equals(s3));

// 5) Convert the base 64 string to an output array (outArray).
    Console.WriteLine(step5);
    outArray = Convert.FromBase64String(s2);

// 6) Is outArray equal to inArray?
   Console.WriteLine(step6, ArraysAreEqual(inArray, outArray));
   }

    public static bool ArraysAreEqual(byte[] a1, byte[] a2)
    {
    if (a1.Length != a2.Length) return false;
    for (int i = 0; i < a1.Length; i++)
        if (a1[i] != a2[i]) return false;
    return true;
    }
}
/*
This example produces the following results:

1) The input is a byte array (inArray) of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert a subarray of the input data array to a base 64 string.

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the entire input data array to a base 64 string.
4) The two methods in steps 2 and 3 produce the same result: True
5) Convert the base 64 string to an output byte array (outArray).
6) The input and output arrays, inArray and outArray, are equal: True

*/

// This example demonstrates the Convert.ToBase64String() and
//                               Convert.FromBase64String() methods
using namespace System;
bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 );
int main()
{
   array<Byte>^inArray = gcnew array<Byte>(256);
   array<Byte>^outArray = gcnew array<Byte>(256);
   String^ s2;
   String^ s3;
   String^ step1 = "1) The input is a byte array (inArray) of arbitrary data.";
   String^ step2 = "2) Convert a subarray of the input data array to a base 64 string.";
   String^ step3 = "3) Convert the entire input data array to a base 64 string.";
   String^ step4 = "4) The two methods in steps 2 and 3 produce the same result: {0}";
   String^ step5 = "5) Convert the base 64 string to an output byte array (outArray).";
   String^ step6 = "6) The input and output arrays, inArray and outArray, are equal: {0}";
   int x;
   String^ nl = Environment::NewLine;
   String^ ruler1a = "         1         2         3         4";
   String^ ruler2a = "1234567890123456789012345678901234567890";
   String^ ruler3a = "----+----+----+----+----+----+----+----+";
   String^ ruler1b = "         5         6         7      ";
   String^ ruler2b = "123456789012345678901234567890123456";
   String^ ruler3b = "----+----+----+----+----+----+----+-";
   String^ ruler = String::Concat( ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b, nl );

   // 1) Display an arbitrary array of input data (inArray). The data could be
   //    derived from user input, a file, an algorithm, etc.
   Console::WriteLine( step1 );
   Console::WriteLine();
   for ( x = 0; x < inArray->Length; x++ )
   {
      inArray[ x ] = (Byte)x;
      Console::Write( "{0:X2} ", inArray[ x ] );
      if ( ((x + 1) % 20) == 0 )
            Console::WriteLine();

   }
   Console::Write( "{0}{0}", nl );

   // 2) Convert a subarray of the input data to a base64 string. In this case,
   //    the subarray is the entire input data array. New lines (CRLF) are inserted.
   Console::WriteLine( step2 );
   s2 = Convert::ToBase64String( inArray, 0, inArray->Length, Base64FormattingOptions::InsertLineBreaks );
   Console::WriteLine( "{0}{1}{2}{3}", nl, ruler, s2, nl );

   // 3) Convert the input data to a base64 string. In this case, the entire
   //    input data array is converted by default. New lines (CRLF) are inserted.
   Console::WriteLine( step3 );
   s3 = Convert::ToBase64String( inArray, Base64FormattingOptions::InsertLineBreaks );

   // 4) Test whether the methods in steps 2 and 3 produce the same result.
   Console::WriteLine( step4, s2->Equals( s3 ) );

   // 5) Convert the base 64 string to an output array (outArray).
   Console::WriteLine( step5 );
   outArray = Convert::FromBase64String( s2 );

   // 6) Is outArray equal to inArray?
   Console::WriteLine( step6, ArraysAreEqual( inArray, outArray ) );
}

bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 )
{
   if ( a1->Length != a2->Length )
      return false;

   for ( int i = 0; i < a1->Length; i++ )
      if ( a1[ i ] != a2[ i ] )
            return false;

   return true;
}

/*
This example produces the following results:

1) The input is a byte array (inArray) of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert a subarray of the input data array to a base 64 string.

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the entire input data array to a base 64 string.
4) The two methods in steps 2 and 3 produce the same result: True
5) Convert the base 64 string to an output byte array (outArray).
6) The input and output arrays, inArray and outArray, are equal: True

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.GetTypeCode 方法

Convert
.
.
::
.
GetTypeCode 方法
Convert 类

返回指定对象的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeCode ( _
    value As Object _
) As TypeCode
public static TypeCode GetTypeCode(
    Object value
)
public:
static TypeCode GetTypeCode(
    Object^ value
)
static member GetTypeCode :
        value:Object -> TypeCode

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。

返回值

类型： System TypeCode
value 的 System..::.TypeCode，或者如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 TypeCode..::.Empty。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.IsDBNull 方法

Convert
.
.
::
.
IsDBNull 方法
Convert 类

返回有关指定对象是否为 DBNull 类型的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDBNull ( _
    value As Object _
) As Boolean
public static bool IsDBNull(
    Object value
)
public:
static bool IsDBNull(
    Object^ value
)
static member IsDBNull :
        value:Object -> bool

参数

value
类型： System Object
一个对象。

返回值

类型： System Boolean
如果 value 为 DBNull 类型，则为 true；否则为 false。

IsDBNull 方法测试 value 参数是否等于 DBNull..::.Value。它与下列代码等效： IsDBNull 方法测试 value 参数是否等于 DBNull..::.Value。它与下列代码等效：

Return DBNull.Value.Equals(value)

return DBNull.Value.Equals(value);
说明 说明

DBNull..::.Value 用于指示缺少的值。它不等效于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 String..::.Empty。 DBNull..::.Value 用于指示缺少的值。它不等效于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 String..::.Empty。

下面的示例使用 SqlDataReader 对象从数据库中检索调查数据。它将每个行字段的值分配给一个数组，然后将每个数组元素传递给 IsDBNull 方法。如果该方法返回 true，则该示例将为数组元素分配字符串“NA”。数组然后添加到 System.Windows.Forms..::.DataGridView 控件的 Rows 集合中。 下面的示例使用 SqlDataReader 对象从数据库中检索调查数据。它将每个行字段的值分配给一个数组，然后将每个数组元素传递给 IsDBNull 方法。如果该方法返回 true，则该示例将为数组元素分配字符串“NA”。数组然后添加到 System.Windows.Forms..::.DataGridView 控件的 Rows 集合中。 下面的示例使用 SqlDataReader 对象从数据库中检索调查数据。它将每个行字段的值分配给一个数组，然后将每个数组元素传递给 IsDBNull 方法。如果该方法返回 true，则该示例将为数组元素分配字符串“NA”。数组然后添加到 System.Windows.Forms..::.DataGridView 控件的 Rows 集合中。 下面的示例使用 SqlDataReader 对象从数据库中检索调查数据。它将每个行字段的值分配给一个数组，然后将每个数组元素传递给 IsDBNull 方法。如果该方法返回 true，则该示例将为数组元素分配字符串“NA”。数组然后添加到 System.Windows.Forms..::.DataGridView 控件的 Rows 集合中。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   ' Define ADO.NET objects.
   Dim conn As New SqlConnection(connectionString)
   Dim cmd As New SqlCommand
   Dim dr As SqlDataReader

   ' Open connection, and retrieve dataset.
   conn.Open()

   ' Define Command object.
   cmd.CommandText = "Select * From Responses"
   cmd.CommandType = CommandType.Text
   cmd.Connection = conn

   ' Retrieve data reader.
   dr = cmd.ExecuteReader()

   Dim fieldCount As Integer = dr.FieldCount
   Dim fieldValues(fieldCount - 1) As Object
   Dim headers(fieldCount - 1) As String

   ' Get names of fields.
   For ctr As Integer = 0 To fieldCount - 1
      headers(ctr) = dr.GetName(ctr)
   Next

   ' Set up data grid.
   grid.ColumnCount = fieldCount

   With grid.ColumnHeadersDefaultCellStyle
      .BackColor = Color.Navy
      .ForeColor = Color.White
      .Font = New Font(grid.Font, FontStyle.Bold)
   End With

   With grid
      .AutoSizeRowsMode = _
          DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders
      .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
      .CellBorderStyle = DataGridViewCellBorderStyle.Single
      .GridColor = Color.Black
      .RowHeadersVisible = True

      For columnNumber As Integer = 0 To headers.Length - 1
         .Columns(columnNumber).Name = headers(columnNumber)
      Next
   End With

   ' Get data, replace missing values with "NA", and display it.
   Do While dr.Read()
      dr.GetValues(fieldValues)

      For fieldCounter As Integer = 0 To fieldCount - 1
         If Convert.IsDBNull(fieldValues(fieldCounter)) Then
            fieldValues(fieldCounter) = "NA"
         End If
      Next
      grid.Rows.Add(fieldValues)
   Loop
   dr.Close()
End Sub

private void Form1_Load(object sender, EventArgs e)
{
   // Define ADO.NET objects.
   SqlConnection conn = new SqlConnection(connectionString);
   SqlCommand cmd = new SqlCommand();
   SqlDataReader dr;

   // Open connection, and retrieve dataset.
   conn.Open();

   // Define Command object.
   cmd.CommandText = "Select * From Responses";
   cmd.CommandType = CommandType.Text;
   cmd.Connection = conn;

   // Retrieve data reader.
   dr = cmd.ExecuteReader();

   int fieldCount = dr.FieldCount;
   object[] fieldValues = new object[fieldCount];
   string[] headers = new string[fieldCount];

   // Get names of fields.
   for (int ctr = 0; ctr < fieldCount; ctr++)
      headers[ctr] = dr.GetName(ctr);

   // Set up data grid.
   this.grid.ColumnCount = fieldCount;

   this.grid.ColumnHeadersDefaultCellStyle.BackColor = Color.Navy;
   this.grid.ColumnHeadersDefaultCellStyle.ForeColor = Color.White;
   this.grid.ColumnHeadersDefaultCellStyle.Font = new Font(this.grid.Font, FontStyle.Bold);

   this.grid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
   this.grid.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
   this.grid.CellBorderStyle = DataGridViewCellBorderStyle.Single;
   this.grid.GridColor = Color.Black;
   this.grid.RowHeadersVisible = true;

   for (int columnNumber = 0; columnNumber < headers.Length;  columnNumber++)
      this.grid.Columns[columnNumber].Name = headers[columnNumber];

   // Get data, replace missing values with "NA", and display it.
   while (dr.Read())
   {
      dr.GetValues(fieldValues);

      for (int fieldCounter = 0; fieldCounter < fieldCount; fieldCounter++)
      {
         if (Convert.IsDBNull(fieldValues[fieldCounter]))
            fieldValues[fieldCounter] = "NA";
      }
      grid.Rows.Add(fieldValues);
   }
   dr.Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
System 命名空间
DBNull


Convert ..::.ToBase64CharArray 方法

Convert
.
.
::
.
ToBase64CharArray 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将 8 位无符号整数数组的子集转换为用 Base64 数字编码的 Unicode 字符数组的等价子集。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToBase64CharArray 方法 ( array<Byte >[]()[], Int32, Int32, array<Char >[]()[], Int32)

Convert
.
.
::
.
ToBase64CharArray 方法 (
array<
Byte
>
[]
()
[]
, Int32, Int32,
array<
Char
>
[]
()
[]
, Int32)
Convert 类

将 8 位无符号整数数组的子集转换为用 Base64 数字编码的 Unicode 字符数组的等价子集。参数将子集指定为输入和输出数组中的偏移量和输入数组中要转换的元素数。 将 8 位无符号整数数组的子集转换为用 Base64 数字编码的 Unicode 字符数组的等价子集。参数将子集指定为输入和输出数组中的偏移量和输入数组中要转换的元素数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBase64CharArray ( _
    inArray As Byte(), _
    offsetIn As Integer, _
    length As Integer, _
    outArray As Char(), _
    offsetOut As Integer _
) As Integer
public static int ToBase64CharArray(
    byte[] inArray,
    int offsetIn,
    int length,
    char[] outArray,
    int offsetOut
)
public:
static int ToBase64CharArray(
    array<unsigned char>^ inArray,
    int offsetIn,
    int length,
    array<wchar_t>^ outArray,
    int offsetOut
)
static member ToBase64CharArray :
        inArray:byte[] *
        offsetIn:int *
        length:int *
        outArray:char[] *
        offsetOut:int -> int

参数

inArray
类型：
array<
System Byte
>
[]
()
[]

8 位无符号整数的输入数组。
offsetIn
类型： System Int32
inArray 内的一个位置。
length
类型： System Int32
要转换的 inArray 的元素数。
outArray
类型：
array<
System Char
>
[]
()
[]

Unicode 字符的输出数组。
offsetOut
类型： System Int32
outArray 内的一个位置。

返回值

类型： System Int32
包含 outArray 中的字节数的 32 位带符号整数。
异常 | 条件
ArgumentNullException | inArray 或 outArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | offsetIn、offsetOut 或 length 为负。 - 或 - offsetIn 加上 length 大于 inArray 的长度。 - 或 - offsetOut 加上要返回的元素数大于 outArray 的长度。

inArray 中从位置 offsetIn 开始的 length 元素的子集作为一个数字值，并且转换为 outArray 中从位置 offsetOut 开始的元素的子集。返回值指示 outArray 中被转换的元素的数目。outArray 的子集由 Base 64 数字组成。 inArray 中从位置 offsetIn 开始的 length 元素的子集作为一个数字值，并且转换为 outArray 中从位置 offsetOut 开始的元素的子集。返回值指示 outArray 中被转换的元素的数目。outArray 的子集由 Base 64 数字组成。 inArray 中从位置 offsetIn 开始的 length 元素的子集作为一个数字值，并且转换为 outArray 中从位置 offsetOut 开始的元素的子集。返回值指示 outArray 中被转换的元素的数目。outArray 的子集由 Base 64 数字组成。

从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。 从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。

offset 和 length 参数是 32 位有符号数字。offsetIn 和 offsetOut 参数为从零开始的数组位置。 offset 和 length 参数是 32 位有符号数字。offsetIn 和 offsetOut 参数为从零开始的数组位置。

下面的示例演示如何使用 ToBase64CharArray 方法对二进制流进行 UUencode (base 64) 编码，然后将编码保存到文件中。

Public Sub EncodeWithCharArray()
   Dim inFile As System.IO.FileStream
   Dim binaryData() As Byte

   Try
      inFile = New System.IO.FileStream(inputFileName, _
                                        System.IO.FileMode.Open, _
                                        System.IO.FileAccess.Read)
      ReDim binaryData(inFile.Length)
      Dim bytesRead As Long = inFile.Read(binaryData, _
                                          0, _
                                          CInt(inFile.Length))
      inFile.Close()
   Catch exp As System.Exception
      ' Error creating stream or reading from it.
      System.Console.WriteLine("{0}", exp.Message)
      Return
   End Try

   ' Convert the binary input into Base64 UUEncoded output.
   ' Each 3 byte sequence in the source data becomes a 4 byte
   ' sequence in the character array.
   Dim arrayLength As Long
   arrayLength = (4 / 3) * binaryData.Length
   If arrayLength Mod 4 <> 0 Then
      arrayLength = arrayLength + 4 - arrayLength Mod 4
   End If

   Dim base64CharArray(arrayLength - 1) As Char
   Try
      System.Convert.ToBase64CharArray(binaryData, _
                                       0, _
                                       binaryData.Length, _
                                       base64CharArray, 0)
   Catch exp As System.ArgumentNullException
      System.Console.WriteLine("Binary data array is null.")
      Return
   Catch exp As System.ArgumentOutOfRangeException
      System.Console.WriteLine("Char Array is not large enough.")
      Return
   End Try

   ' Write the UUEncoded version to the output file.
   Dim outFile As System.IO.StreamWriter
   Try
      outFile = New System.IO.StreamWriter(outputFileName, _
                                           False, _
                                           System.Text.Encoding.ASCII)
      outFile.Write(base64CharArray)
      outFile.Close()
   Catch exp As System.Exception
      ' Error creating stream or writing to it.
      System.Console.WriteLine("{0}", exp.Message)
   End Try
End Sub

        public void EncodeWithCharArray() {
            System.IO.FileStream inFile;
            byte[]				 binaryData;

            try {
                inFile = new System.IO.FileStream(inputFileName,
                                                  System.IO.FileMode.Open,
                                                  System.IO.FileAccess.Read);
                binaryData = new Byte[inFile.Length];
                long bytesRead = inFile.Read(binaryData, 0,
                                            (int) inFile.Length);
                inFile.Close();
            }
            catch (System.Exception exp) {
                // Error creating stream or reading from it.
                System.Console.WriteLine("{0}", exp.Message);
                return;
            }

            // Convert the binary input into Base64 UUEncoded output.
            // Each 3 byte sequence in the source data becomes a 4 byte
            // sequence in the character array.
            long arrayLength = (long) ((4.0d/3.0d) * binaryData.Length);

            // If array length is not divisible by 4, go up to the next
            // multiple of 4.
            if (arrayLength % 4 != 0) {
                arrayLength += 4 - arrayLength % 4;
            }

            char[] base64CharArray = new char[arrayLength];
            try {
                System.Convert.ToBase64CharArray(binaryData,
                                                 0,
                                                 binaryData.Length,
                                                 base64CharArray,
                                                 0);
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine("Binary data array is null.");
                return;
            }
            catch (System.ArgumentOutOfRangeException) {
                System.Console.WriteLine("Char Array is not large enough.");
                return;
            }

            // Write the UUEncoded version to the output file.
            System.IO.StreamWriter outFile;
            try {
                outFile = new System.IO.StreamWriter(outputFileName,
                                                false,
                                                System.Text.Encoding.ASCII);
                outFile.Write(base64CharArray);
                outFile.Close();
            }
            catch (System.Exception exp) {
                // Error creating stream or writing to it.
                System.Console.WriteLine("{0}", exp.Message);
            }
        }

public:
   void EncodeWithCharArray()
   {
      FileStream^ inFile;
      array<Byte>^binaryData;

      try
      {
         inFile = gcnew FileStream( inputFileName,
                                    FileMode::Open,
                                    FileAccess::Read );
         binaryData = gcnew array<Byte>((int)(inFile->Length));
         long bytesRead = inFile->Read( binaryData, 0,
                                        (int)inFile->Length );
         inFile->Close();
      }
      catch ( Exception^ exp )
      {
         // Error creating stream or reading from it.
         Console::WriteLine( "{0}", exp->Message );
         return;
      }

      // Convert the binary input into Base64 UUEncoded output.
      // Each 3 Byte sequence in the source data becomes a 4 Byte
      // sequence in the character array.
      long arrayLength = (long)((4.0 / 3.0) * binaryData->Length);

      // If array length is not divisible by 4, go up to the next
      // multiple of 4.
      if ( arrayLength % 4 != 0 )
      {
         arrayLength += 4 - arrayLength % 4;
      }

      array<Char>^ base64CharArray = gcnew array<Char>(arrayLength);
      try
      {
         Convert::ToBase64CharArray( binaryData,
                                     0,
                                     binaryData->Length,
                                     base64CharArray, 0 );
      }
      catch ( ArgumentNullException^ )
      {
         Console::WriteLine( "Binary data array is null." );
         return;
      }
      catch ( ArgumentOutOfRangeException^ )
      {
         Console::WriteLine( "Char Array is not large enough." );
         return;
      }

      // Write the UUEncoded version to the output file.
      StreamWriter^ outFile;
      try
      {
         outFile = gcnew StreamWriter( outputFileName,
                                       false,
                                       Text::Encoding::ASCII );
         outFile->Write( base64CharArray );
         outFile->Close();
      }
      catch ( Exception^ exp )
      {
         // Error creating stream or writing to it.
         Console::WriteLine( " {0}", exp->Message );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBase64CharArray 重载
System 命名空间


Convert ..::.ToBase64CharArray 方法 ( array<Byte >[]()[], Int32, Int32, array<Char >[]()[], Int32, Base64FormattingOptions)

Convert
.
.
::
.
ToBase64CharArray 方法 (
array<
Byte
>
[]
()
[]
, Int32, Int32,
array<
Char
>
[]
()
[]
, Int32, Base64FormattingOptions)
Convert 类

将 8 位无符号整数数组的子集转换为用 Base64 数字编码的 Unicode 字符数组的等价子集。参数指定作为输入和输出数组中偏移量的子集、输入数组中要转换的元素数以及是否在输出数组中插入分行符。 将 8 位无符号整数数组的子集转换为用 Base64 数字编码的 Unicode 字符数组的等价子集。参数指定作为输入和输出数组中偏移量的子集、输入数组中要转换的元素数以及是否在输出数组中插入分行符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function ToBase64CharArray ( _
    inArray As Byte(), _
    offsetIn As Integer, _
    length As Integer, _
    outArray As Char(), _
    offsetOut As Integer, _
    options As Base64FormattingOptions _
) As Integer
[ComVisibleAttribute(false)]
public static int ToBase64CharArray(
    byte[] inArray,
    int offsetIn,
    int length,
    char[] outArray,
    int offsetOut,
    Base64FormattingOptions options
)
[ComVisibleAttribute(false)]
public:
static int ToBase64CharArray(
    array<unsigned char>^ inArray,
    int offsetIn,
    int length,
    array<wchar_t>^ outArray,
    int offsetOut,
    Base64FormattingOptions options
)
[<ComVisibleAttribute(false)>]
static member ToBase64CharArray :
        inArray:byte[] *
        offsetIn:int *
        length:int *
        outArray:char[] *
        offsetOut:int *
        options:Base64FormattingOptions -> int

参数

inArray
类型：
array<
System Byte
>
[]
()
[]

8 位无符号整数的输入数组。
offsetIn
类型： System Int32
inArray 内的一个位置。
length
类型： System Int32
要转换的 inArray 的元素数。
outArray
类型：
array<
System Char
>
[]
()
[]

Unicode 字符的输出数组。
offsetOut
类型： System Int32
outArray 内的一个位置。
options
类型： System Base64FormattingOptions
如果每 76 个字符插入一个分行符，则使用 InsertLineBreaks，如果不插入分行符，则使用 None。

返回值

类型： System Int32
包含 outArray 中的字节数的 32 位带符号整数。
异常 | 条件
ArgumentNullException | inArray 或 outArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | offsetIn、offsetOut 或 length 为负。 - 或 - offsetIn 加上 length 大于 inArray 的长度。 - 或 - offsetOut 加上要返回的元素数大于 outArray 的长度。
ArgumentException | options 不是有效的 Base64FormattingOptions 值。

inArray 元素中从位置 offsetIn 开始的 length 元素的子集用作数字值，并且转换为 outArray 元素中从位置 offsetOut 开始的元素的子集。返回值指示 outArray 中被转换的元素的数目。outArray 的子集由 Base 64 数字组成。 inArray 元素中从位置 offsetIn 开始的 length 元素的子集用作数字值，并且转换为 outArray 元素中从位置 offsetOut 开始的元素的子集。返回值指示 outArray 中被转换的元素的数目。outArray 的子集由 Base 64 数字组成。 inArray 元素中从位置 offsetIn 开始的 length 元素的子集用作数字值，并且转换为 outArray 元素中从位置 offsetOut 开始的元素的子集。返回值指示 outArray 中被转换的元素的数目。outArray 的子集由 Base 64 数字组成。

从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。 从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。

offset 和 length 参数是 32 位有符号数字。offsetIn 和 offsetOut 参数为从零开始的数组位置。 offset 和 length 参数是 32 位有符号数字。offsetIn 和 offsetOut 参数为从零开始的数组位置。

如果 options 参数设置为 InsertLineBreaks 且转换的输出多于 76 个字符，则每 76 个字符插入一个分行符。分行符的定义是一个回车符 (U+000D) 后跟一个换行符 (U+000A)。有关更多信息，请参见位于 http://www.rfc-editor.org/ 上的 RFC 2045“Multipurpose Internet Mail Extensions”。 如果 options 参数设置为 InsertLineBreaks 且转换的输出多于 76 个字符，则每 76 个字符插入一个分行符。分行符的定义是一个回车符 (U+000D) 后跟一个换行符 (U+000A)。有关更多信息，请参见位于 http://www.rfc-editor.org/ 上的 RFC 2045“Multipurpose Internet Mail Extensions”。 如果 options 参数设置为 InsertLineBreaks 且转换的输出多于 76 个字符，则每 76 个字符插入一个分行符。分行符的定义是一个回车符 (U+000D) 后跟一个换行符 (U+000A)。有关更多信息，请参见位于 http://www.rfc-editor.org/ 上的 RFC 2045“Multipurpose Internet Mail Extensions”。

下面的示例说明 ToBase64CharArray 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64CharArray 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64CharArray 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64CharArray 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64CharArray 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64CharArray 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。

如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。

' This example demonstrates the Convert.ToBase64CharArray() and
'                               Convert.FromBase64CharArray methods
Class Sample
   Public Shared Sub Main()
      Dim byteArray1(255) As Byte
      Dim byteArray2(255) As Byte
      Dim charArray(351) As Char
      Dim charArrayLength As Integer
      Dim nl As String = Environment.NewLine

      Dim ruler1a As String = "         1         2         3         4"
      Dim ruler2a As String = "1234567890123456789012345678901234567890"
      Dim ruler3a As String = "----+----+----+----+----+----+----+----+"
      Dim ruler1b As String = "         5         6         7      "
      Dim ruler2b As String = "123456789012345678901234567890123456"
      Dim ruler3b As String = "----+----+----+----+----+----+----+-"
      Dim ruler As String = String.Concat(ruler1a, ruler1b, nl, _
                                          ruler2a, ruler2b, nl, _
                                          ruler3a, ruler3b)

      ' 1) Initialize and display a Byte array of arbitrary data.
      Console.WriteLine("1) Input: A Byte array of arbitrary data.{0}", nl)
      Dim x As Integer
      For x = 0 To byteArray1.Length - 1
         byteArray1(x) = CByte(x)
         Console.Write("{0:X2} ", byteArray1(x))
         If(x + 1) Mod 20 = 0 Then
            Console.WriteLine()
         End If
      Next x
      Console.Write("{0}{0}", nl)

      ' 2) Convert the input Byte array to a Char array, with newlines inserted.
      charArrayLength = Convert.ToBase64CharArray( _
                                byteArray1, 0, byteArray1.Length, _
                                charArray, 0, _
                                Base64FormattingOptions.InsertLineBreaks)
      Console.WriteLine("2) Convert the input Byte array to a Char array with newlines.")
      Console.Write("   Output: A Char array (length = {0}). ", charArrayLength)
      Console.WriteLine("The elements of the array are:{0}", nl)
      Console.WriteLine(ruler)
      Console.WriteLine(New [String](charArray))
      Console.WriteLine()

      ' 3) Convert the Char array back to a Byte array.
      Console.WriteLine("3) Convert the Char array to an output Byte array.")
      byteArray2 = Convert.FromBase64CharArray(charArray, 0, charArrayLength)

      ' 4) Are the input and output Byte arrays equivalent?
      Console.WriteLine("4) The output Byte array is equal to the input Byte array: {0}", _
                            ArraysAreEqual(byteArray1, byteArray2))
   End Sub 'Main

   Public Shared Function ArraysAreEqual(a1() As Byte, a2() As Byte) As Boolean
      If a1.Length <> a2.Length Then
         Return False
      End If
      Dim i As Integer
      For i = 0 To a1.Length - 1
         If a1(i) <> a2(i) Then
            Return False
         End If
      Next i
      Return True
   End Function 'ArraysAreEqual
End Class 'Sample
'
'This example produces the following results:
'
'1) Input: A Byte array of arbitrary data.
'
'00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
'14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
'28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
'3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
'50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
'64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
'78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
'8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
'A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
'B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
'C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
'DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
'F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
'
'2) Convert the input Byte array to a Char array with newlines.
'   Output: A Char array (length = 352). The elements of the array are:
'
'         1         2         3         4         5         6         7
'1234567890123456789012345678901234567890123456789012345678901234567890123456
'----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
'OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
'cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
'q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
'5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==
'
'3) Convert the Char array to an output Byte array.
'4) The output Byte array is equal to the input Byte array: True

// This example demonstrates the Convert.ToBase64CharArray() and
//                               Convert.FromBase64CharArray methods

using System;

class Sample
{
    public static void Main()
    {
    byte[] byteArray1 = new byte[256];
    byte[] byteArray2 = new byte[256];
    char[] charArray  = new char[352];
    int charArrayLength;
    string nl = Environment.NewLine;

    string ruler1a = "         1         2         3         4";
    string ruler2a = "1234567890123456789012345678901234567890";
    string ruler3a = "----+----+----+----+----+----+----+----+";
    string ruler1b = "         5         6         7      ";
    string ruler2b = "123456789012345678901234567890123456";
    string ruler3b = "----+----+----+----+----+----+----+-";
    string ruler   = String.Concat(ruler1a, ruler1b, nl,
                                   ruler2a, ruler2b, nl,
                                   ruler3a, ruler3b);

// 1) Initialize and display a Byte array of arbitrary data.
    Console.WriteLine("1) Input: A Byte array of arbitrary data.{0}", nl);
    for (int x = 0; x < byteArray1.Length; x++)
    {
    byteArray1[x] = (byte)x;
    Console.Write("{0:X2} ", byteArray1[x]);
    if (((x+1)%20) == 0) Console.WriteLine();
    }
    Console.Write("{0}{0}", nl);

// 2) Convert the input Byte array to a Char array, with newlines inserted.
    charArrayLength =
        Convert.ToBase64CharArray(byteArray1, 0, byteArray1.Length,
                                   charArray, 0, Base64FormattingOptions.InsertLineBreaks);
    Console.WriteLine("2) Convert the input Byte array to a Char array with newlines.");
    Console.Write("   Output: A Char array (length = {0}). ", charArrayLength);
    Console.WriteLine("The elements of the array are:{0}", nl);
    Console.WriteLine(ruler);
    Console.WriteLine(new String(charArray));
    Console.WriteLine();

// 3) Convert the Char array back to a Byte array.
    Console.WriteLine("3) Convert the Char array to an output Byte array.");
    byteArray2 = Convert.FromBase64CharArray(charArray, 0, charArrayLength);

// 4) Are the input and output Byte arrays equivalent?
    Console.WriteLine("4) The output Byte array is equal to the input Byte array: {0}",
                      ArraysAreEqual(byteArray1, byteArray2));
    }

    public static bool ArraysAreEqual(byte[] a1, byte[] a2)
    {
    if (a1.Length != a2.Length) return false;
    for (int i = 0; i < a1.Length; i++)
        if (a1[i] != a2[i]) return false;
    return true;
    }
}
/*
This example produces the following results:

1) Input: A Byte array of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert the input Byte array to a Char array with newlines.
   Output: A Char array (length = 352). The elements of the array are:

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the Char array to an output Byte array.
4) The output Byte array is equal to the input Byte array: True

*/

// This example demonstrates the Convert.ToBase64CharArray() and
//                               Convert.FromBase64CharArray methods
using namespace System;
bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 );
int main()
{
   array<Byte>^byteArray1 = gcnew array<Byte>(256);
   array<Byte>^byteArray2 = gcnew array<Byte>(256);
   array<Char>^charArray = gcnew array<Char>(352);
   int charArrayLength;
   String^ nl = Environment::NewLine;
   String^ ruler1a = "         1         2         3         4";
   String^ ruler2a = "1234567890123456789012345678901234567890";
   String^ ruler3a = "----+----+----+----+----+----+----+----+";
   String^ ruler1b = "         5         6         7      ";
   String^ ruler2b = "123456789012345678901234567890123456";
   String^ ruler3b = "----+----+----+----+----+----+----+-";
   String^ ruler = String::Concat( ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b );

   // 1) Initialize and display a Byte array of arbitrary data.
   Console::WriteLine( "1) Input: A Byte array of arbitrary data.{0}", nl );
   for ( int x = 0; x < byteArray1->Length; x++ )
   {
      byteArray1[ x ] = (Byte)x;
      Console::Write( "{0:X2} ", byteArray1[ x ] );
      if ( ((x + 1) % 20) == 0 )
            Console::WriteLine();

   }
   Console::Write( "{0}{0}", nl );

   // 2) Convert the input Byte array to a Char array, with newlines inserted.
   charArrayLength = Convert::ToBase64CharArray( byteArray1, 0, byteArray1->Length,
                                                 charArray, 0,
                                                 Base64FormattingOptions::InsertLineBreaks );
   Console::WriteLine( "2) Convert the input Byte array to a Char array with newlines." );
   Console::Write( "   Output: A Char array (length = {0}). ", charArrayLength );
   Console::WriteLine( "The elements of the array are:{0}", nl );
   Console::WriteLine( ruler );
   Console::WriteLine( gcnew String( charArray ) );
   Console::WriteLine();

   // 3) Convert the Char array back to a Byte array.
   Console::WriteLine( "3) Convert the Char array to an output Byte array." );
   byteArray2 = Convert::FromBase64CharArray( charArray, 0, charArrayLength );

   // 4) Are the input and output Byte arrays equivalent?
   Console::WriteLine( "4) The output Byte array is equal to the input Byte array: {0}", ArraysAreEqual( byteArray1, byteArray2 ) );
}

bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 )
{
   if ( a1->Length != a2->Length )
      return false;

   for ( int i = 0; i < a1->Length; i++ )
      if ( a1[ i ] != a2[ i ] )
            return false;

   return true;
}

/*
This example produces the following results:

1) Input: A Byte array of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert the input Byte array to a Char array with newlines.
   Output: A Char array (length = 352). The elements of the array are:

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the Char array to an output Byte array.
4) The output Byte array is equal to the input Byte array: True

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToBase64CharArray 重载
System 命名空间


Convert ..::.ToBase64String 方法

Convert
.
.
::
.
ToBase64String 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将 8 位无符号整数数组的值转换为其用 Base64 数字编码的等效字符串表示形式。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToBase64String 方法 ( array<Byte >[]()[])

Convert
.
.
::
.
ToBase64String 方法 (
array<
Byte
>
[]
()
[]
)
Convert 类

将 8 位无符号整数的数组转换为其用 Base64 数字编码的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBase64String ( _
    inArray As Byte() _
) As String
public static string ToBase64String(
    byte[] inArray
)
public:
static String^ ToBase64String(
    array<unsigned char>^ inArray
)
static member ToBase64String :
        inArray:byte[] -> string

参数

inArray
类型：
array<
System Byte
>
[]
()
[]

一个 8 位无符号整数数组。

返回值

类型： System String
inArray 的内容的字符串表示形式，以 Base64 表示。
异常 | 条件
ArgumentNullException | inArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

inArray 的元素用作数字值，并且转换为使用 base 64 数字编码的字符串表示形式。

从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。 从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。

下面的示例演示如何使用 ToBase64CharArray 方法对二进制流进行 UUencode (base 64) 编码，然后将编码保存到文件中。

      Public Sub EncodeWithString()
         Dim inFile As System.IO.FileStream
         Dim binaryData() As Byte

         Try
            inFile = New System.IO.FileStream(inputFileName, _
                                              System.IO.FileMode.Open, _
                                              System.IO.FileAccess.Read)
            ReDim binaryData(inFile.Length)
            Dim bytesRead As Long = inFile.Read(binaryData, _
                                                0, _
                                                inFile.Length)
            inFile.Close()
         Catch exp As System.Exception
            ' Error creating stream or reading from it.
            System.Console.WriteLine("{0}", exp.Message)
            Return
         End Try

         ' Convert the binary input into Base64 UUEncoded output.
         Dim base64String As String
         Try
            base64String = System.Convert.ToBase64String(binaryData, _
                                                         0, _
                                                         binaryData.Length)
         Catch exp As System.ArgumentNullException
            System.Console.WriteLine("Binary data array is null.")
            Return
         End Try

         ' Write the UUEncoded version to the output file.
         Dim outFile As System.IO.StreamWriter
         Try
            outFile = New System.IO.StreamWriter(outputFileName, _
                                                 False, _
                                                 System.Text.Encoding.ASCII)
            outFile.Write(base64String)
            outFile.Close()
         Catch exp As System.Exception
            ' Error creating stream or writing to it.
            System.Console.WriteLine("{0}", exp.Message)
         End Try
      End Sub

        public void EncodeWithString() {
            System.IO.FileStream inFile;
            byte[]				 binaryData;

            try {
                inFile = new System.IO.FileStream(inputFileName,
                                                  System.IO.FileMode.Open,
                                                  System.IO.FileAccess.Read);
                binaryData = new Byte[inFile.Length];
                long bytesRead = inFile.Read(binaryData, 0,
                                            (int)inFile.Length);
                inFile.Close();
            }
            catch (System.Exception exp) {
                // Error creating stream or reading from it.
                System.Console.WriteLine("{0}", exp.Message);
                return;
            }

            // Convert the binary input into Base64 UUEncoded output.
            string base64String;
            try {
                 base64String =
                    System.Convert.ToBase64String(binaryData,
                                                  0,
                                                  binaryData.Length);
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine("Binary data array is null.");
                return;
            }

            // Write the UUEncoded version to the output file.
            System.IO.StreamWriter outFile;
            try {
                outFile = new System.IO.StreamWriter(outputFileName,
                                            false,
                                            System.Text.Encoding.ASCII);
                outFile.Write(base64String);
                outFile.Close();
            }
            catch (System.Exception exp) {
                // Error creating stream or writing to it.
                System.Console.WriteLine("{0}", exp.Message);
            }
        }

public:
   void EncodeWithString()
   {
      FileStream^ inFile;
      array<Byte>^ binaryData;

      try
      {
         inFile = gcnew FileStream( inputFileName,
                                    FileMode::Open,
                                    FileAccess::Read );
         binaryData = gcnew array<Byte>((int)(inFile->Length));
         long bytesRead = inFile->Read( binaryData, 0,
                                        (int)inFile->Length );
         inFile->Close();
      }
      catch ( Exception^ exp )
      {
         // Error creating stream or reading from it.
         Console::WriteLine( " {0}", exp->Message );
         return;
      }

      // Convert the binary input into Base64 UUEncoded output.
      String^ base64String;
      try
      {
         base64String = Convert::ToBase64String( binaryData,
                                                 0,
                                                 binaryData->Length );
      }
      catch ( ArgumentNullException^ )
      {
         Console::WriteLine( "Binary data array is null." );
         return;
      }

      // Write the UUEncoded version to the output file.
      StreamWriter^ outFile;
      try
      {
         outFile = gcnew StreamWriter( outputFileName,
                                       false,
                                       Text::Encoding::ASCII );
         outFile->Write( base64String );
         outFile->Close();
      }
      catch ( Exception^ exp )
      {

         // Error creating stream or writing to it.
         Console::WriteLine( " {0}", exp->Message );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBase64String 重载
System 命名空间
Byte


Convert ..::.ToBase64String 方法 ( array<Byte >[]()[], Base64FormattingOptions)

Convert
.
.
::
.
ToBase64String 方法 (
array<
Byte
>
[]
()
[]
, Base64FormattingOptions)
Convert 类

将 8 位无符号整数的数组转换为其用 Base64 数字编码的等效字符串表示形式。参数指定是否在返回值中插入分行符。 将 8 位无符号整数的数组转换为其用 Base64 数字编码的等效字符串表示形式。参数指定是否在返回值中插入分行符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function ToBase64String ( _
    inArray As Byte(), _
    options As Base64FormattingOptions _
) As String
[ComVisibleAttribute(false)]
public static string ToBase64String(
    byte[] inArray,
    Base64FormattingOptions options
)
[ComVisibleAttribute(false)]
public:
static String^ ToBase64String(
    array<unsigned char>^ inArray,
    Base64FormattingOptions options
)
[<ComVisibleAttribute(false)>]
static member ToBase64String :
        inArray:byte[] *
        options:Base64FormattingOptions -> string

参数

inArray
类型：
array<
System Byte
>
[]
()
[]

一个 8 位无符号整数数组。
options
类型： System Base64FormattingOptions
如果每 76 个字符插入一个分行符，则使用 InsertLineBreaks，如果不插入分行符，则使用 None。

返回值

类型： System String
inArray 中元素的字符串表示形式，以 Base64 表示。
异常 | 条件
ArgumentNullException | inArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | options 不是有效的 Base64FormattingOptions 值。

inArray 参数的元素采用数值，并转换为字符串表示形式，以 Base 64 表示。

从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。 从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。

如果 options 参数设置为 InsertLineBreaks 且转换的输出多于 76 个字符，则每 76 个字符插入一个分行符。分行符的定义是一个回车符 (U+000D) 后跟一个换行符 (U+000A)。有关更多信息，请参见位于 http://www.rfc-editor.org/ 上的 RFC 2045“Multipurpose Internet Mail Extensions”。 如果 options 参数设置为 InsertLineBreaks 且转换的输出多于 76 个字符，则每 76 个字符插入一个分行符。分行符的定义是一个回车符 (U+000D) 后跟一个换行符 (U+000A)。有关更多信息，请参见位于 http://www.rfc-editor.org/ 上的 RFC 2045“Multipurpose Internet Mail Extensions”。 如果 options 参数设置为 InsertLineBreaks 且转换的输出多于 76 个字符，则每 76 个字符插入一个分行符。分行符的定义是一个回车符 (U+000D) 后跟一个换行符 (U+000A)。有关更多信息，请参见位于 http://www.rfc-editor.org/ 上的 RFC 2045“Multipurpose Internet Mail Extensions”。

下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。

如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。

' This example demonstrates the Convert.ToBase64String() and
'                               Convert.FromBase64String() methods
Class Sample
   Public Shared Sub Main()
      Dim inArray(255)  As Byte
      Dim outArray(255) As Byte
      Dim s2 As String
      Dim s3 As String
      Dim step1 As String = "1) The input is a byte array (inArray) of arbitrary data."
      Dim step2 As String = "2) Convert a subarray of the input data array to a base 64 string."
      Dim step3 As String = "3) Convert the entire input data array to a base 64 string."
      Dim step4 As String = "4) The two methods in steps 2 and 3 produce the same result: {0}"
      Dim step5 As String = "5) Convert the base 64 string to an output byte array (outArray)."
      Dim step6 As String = "6) The input and output arrays, inArray and outArray, are equal: {0}"
      Dim x As Integer
      Dim nl As String = Environment.NewLine
      Dim ruler1a As String = "         1         2         3         4"
      Dim ruler2a As String = "1234567890123456789012345678901234567890"
      Dim ruler3a As String = "----+----+----+----+----+----+----+----+"
      Dim ruler1b As String = "         5         6         7      "
      Dim ruler2b As String = "123456789012345678901234567890123456"
      Dim ruler3b As String = "----+----+----+----+----+----+----+-"
      Dim ruler As String = [String].Concat(ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b, nl)

      ' 1) Display an arbitrary array of input data (inArray). The data could be
      '    derived from user input, a file, an algorithm, etc.
      Console.WriteLine(step1)
      Console.WriteLine()
      For x = 0 To inArray.Length - 1
         inArray(x) = CByte(x)
         Console.Write("{0:X2} ", inArray(x))
         If (x + 1) Mod 20 = 0 Then
            Console.WriteLine()
         End If
      Next x
      Console.Write("{0}{0}", nl)

      ' 2) Convert a subarray of the input data to a base64 string. In this case,
      '    the subarray is the entire input data array. New lines (CRLF) are inserted.
      Console.WriteLine(step2)
      s2 = Convert.ToBase64String(inArray, 0, inArray.Length, _
                                  Base64FormattingOptions.InsertLineBreaks)
      Console.WriteLine("{0}{1}{2}{3}", nl, ruler, s2, nl)

      ' 3) Convert the input data to a base64 string. In this case, the entire
      '    input data array is converted by default. New lines (CRLF) are inserted.
      Console.WriteLine(step3)
      s3 = Convert.ToBase64String(inArray, Base64FormattingOptions.InsertLineBreaks)

      ' 4) Test whether the methods in steps 2 and 3 produce the same result.
      Console.WriteLine(step4, s2.Equals(s3))

      ' 5) Convert the base 64 string to an output array (outArray).
      Console.WriteLine(step5)
      outArray = Convert.FromBase64String(s2)

      ' 6) Is outArray equal to inArray?
      Console.WriteLine(step6, ArraysAreEqual(inArray, outArray))
   End Sub 'Main

   Public Shared Function ArraysAreEqual(a1() As Byte, a2() As Byte) As Boolean
      If a1.Length <> a2.Length Then
         Return False
      End If
      Dim i As Integer
      For i = 0 To a1.Length - 1
         If a1(i) <> a2(i) Then
            Return False
         End If
      Next i
      Return True
   End Function 'ArraysAreEqual
End Class 'Sample
'
'This example produces the following results:
'
'1) The input is a byte array (inArray) of arbitrary data.
'
'00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
'14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
'28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
'3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
'50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
'64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
'78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
'8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
'A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
'B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
'C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
'DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
'F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
'
'2) Convert a subarray of the input data array to a base 64 string.
'
'         1         2         3         4         5         6         7
'1234567890123456789012345678901234567890123456789012345678901234567890123456
'----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
'OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
'cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
'q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
'5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==
'
'3) Convert the entire input data array to a base 64 string.
'4) The two methods in steps 2 and 3 produce the same result: True
'5) Convert the base 64 string to an output byte array (outArray).
'6) The input and output arrays, inArray and outArray, are equal: True
'

// This example demonstrates the Convert.ToBase64String() and
//                               Convert.FromBase64String() methods

using System;
class Sample
{
    public static void Main()
    {
    byte[] inArray  = new byte[256];
    byte[] outArray = new byte[256];
    string s2;
    string s3;
    string step1 = "1) The input is a byte array (inArray) of arbitrary data.";
    string step2 = "2) Convert a subarray of the input data array to a base 64 string.";
    string step3 = "3) Convert the entire input data array to a base 64 string.";
    string step4 = "4) The two methods in steps 2 and 3 produce the same result: {0}";
    string step5 = "5) Convert the base 64 string to an output byte array (outArray).";
    string step6 = "6) The input and output arrays, inArray and outArray, are equal: {0}";
    int x;
    string nl = Environment.NewLine;
    string ruler1a = "         1         2         3         4";
    string ruler2a = "1234567890123456789012345678901234567890";
    string ruler3a = "----+----+----+----+----+----+----+----+";
    string ruler1b = "         5         6         7      ";
    string ruler2b = "123456789012345678901234567890123456";
    string ruler3b = "----+----+----+----+----+----+----+-";
    string ruler   = String.Concat(ruler1a, ruler1b, nl,
                                   ruler2a, ruler2b, nl,
                                   ruler3a, ruler3b, nl);

// 1) Display an arbitrary array of input data (inArray). The data could be
//    derived from user input, a file, an algorithm, etc.

    Console.WriteLine(step1);
    Console.WriteLine();
    for (x = 0; x < inArray.Length; x++)
        {
        inArray[x] = (byte)x;
        Console.Write("{0:X2} ", inArray[x]);
        if (((x+1)%20) == 0) Console.WriteLine();
        }
    Console.Write("{0}{0}", nl);

// 2) Convert a subarray of the input data to a base64 string. In this case,
//    the subarray is the entire input data array. New lines (CRLF) are inserted.

    Console.WriteLine(step2);
    s2 = Convert.ToBase64String(inArray, 0, inArray.Length,
                                Base64FormattingOptions.InsertLineBreaks);
    Console.WriteLine("{0}{1}{2}{3}", nl, ruler, s2, nl);

// 3) Convert the input data to a base64 string. In this case, the entire
//    input data array is converted by default. New lines (CRLF) are inserted.

    Console.WriteLine(step3);
    s3 = Convert.ToBase64String(inArray, Base64FormattingOptions.InsertLineBreaks);

// 4) Test whether the methods in steps 2 and 3 produce the same result.
    Console.WriteLine(step4, s2.Equals(s3));

// 5) Convert the base 64 string to an output array (outArray).
    Console.WriteLine(step5);
    outArray = Convert.FromBase64String(s2);

// 6) Is outArray equal to inArray?
   Console.WriteLine(step6, ArraysAreEqual(inArray, outArray));
   }

    public static bool ArraysAreEqual(byte[] a1, byte[] a2)
    {
    if (a1.Length != a2.Length) return false;
    for (int i = 0; i < a1.Length; i++)
        if (a1[i] != a2[i]) return false;
    return true;
    }
}
/*
This example produces the following results:

1) The input is a byte array (inArray) of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert a subarray of the input data array to a base 64 string.

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the entire input data array to a base 64 string.
4) The two methods in steps 2 and 3 produce the same result: True
5) Convert the base 64 string to an output byte array (outArray).
6) The input and output arrays, inArray and outArray, are equal: True

*/

// This example demonstrates the Convert.ToBase64String() and
//                               Convert.FromBase64String() methods
using namespace System;
bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 );
int main()
{
   array<Byte>^inArray = gcnew array<Byte>(256);
   array<Byte>^outArray = gcnew array<Byte>(256);
   String^ s2;
   String^ s3;
   String^ step1 = "1) The input is a byte array (inArray) of arbitrary data.";
   String^ step2 = "2) Convert a subarray of the input data array to a base 64 string.";
   String^ step3 = "3) Convert the entire input data array to a base 64 string.";
   String^ step4 = "4) The two methods in steps 2 and 3 produce the same result: {0}";
   String^ step5 = "5) Convert the base 64 string to an output byte array (outArray).";
   String^ step6 = "6) The input and output arrays, inArray and outArray, are equal: {0}";
   int x;
   String^ nl = Environment::NewLine;
   String^ ruler1a = "         1         2         3         4";
   String^ ruler2a = "1234567890123456789012345678901234567890";
   String^ ruler3a = "----+----+----+----+----+----+----+----+";
   String^ ruler1b = "         5         6         7      ";
   String^ ruler2b = "123456789012345678901234567890123456";
   String^ ruler3b = "----+----+----+----+----+----+----+-";
   String^ ruler = String::Concat( ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b, nl );

   // 1) Display an arbitrary array of input data (inArray). The data could be
   //    derived from user input, a file, an algorithm, etc.
   Console::WriteLine( step1 );
   Console::WriteLine();
   for ( x = 0; x < inArray->Length; x++ )
   {
      inArray[ x ] = (Byte)x;
      Console::Write( "{0:X2} ", inArray[ x ] );
      if ( ((x + 1) % 20) == 0 )
            Console::WriteLine();

   }
   Console::Write( "{0}{0}", nl );

   // 2) Convert a subarray of the input data to a base64 string. In this case,
   //    the subarray is the entire input data array. New lines (CRLF) are inserted.
   Console::WriteLine( step2 );
   s2 = Convert::ToBase64String( inArray, 0, inArray->Length, Base64FormattingOptions::InsertLineBreaks );
   Console::WriteLine( "{0}{1}{2}{3}", nl, ruler, s2, nl );

   // 3) Convert the input data to a base64 string. In this case, the entire
   //    input data array is converted by default. New lines (CRLF) are inserted.
   Console::WriteLine( step3 );
   s3 = Convert::ToBase64String( inArray, Base64FormattingOptions::InsertLineBreaks );

   // 4) Test whether the methods in steps 2 and 3 produce the same result.
   Console::WriteLine( step4, s2->Equals( s3 ) );

   // 5) Convert the base 64 string to an output array (outArray).
   Console::WriteLine( step5 );
   outArray = Convert::FromBase64String( s2 );

   // 6) Is outArray equal to inArray?
   Console::WriteLine( step6, ArraysAreEqual( inArray, outArray ) );
}

bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 )
{
   if ( a1->Length != a2->Length )
      return false;

   for ( int i = 0; i < a1->Length; i++ )
      if ( a1[ i ] != a2[ i ] )
            return false;

   return true;
}

/*
This example produces the following results:

1) The input is a byte array (inArray) of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert a subarray of the input data array to a base 64 string.

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the entire input data array to a base 64 string.
4) The two methods in steps 2 and 3 produce the same result: True
5) Convert the base 64 string to an output byte array (outArray).
6) The input and output arrays, inArray and outArray, are equal: True

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToBase64String 重载
System 命名空间


Convert ..::.ToBase64String 方法 ( array<Byte >[]()[], Int32, Int32)

Convert
.
.
::
.
ToBase64String 方法 (
array<
Byte
>
[]
()
[]
, Int32, Int32)
Convert 类

将 8 位无符号整数数组的子集转换为其用 Base64 数字编码的等效字符串表示形式。参数将子集指定为输入数组中的偏移量和数组中要转换的元素数。 将 8 位无符号整数数组的子集转换为其用 Base64 数字编码的等效字符串表示形式。参数将子集指定为输入数组中的偏移量和数组中要转换的元素数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBase64String ( _
    inArray As Byte(), _
    offset As Integer, _
    length As Integer _
) As String
public static string ToBase64String(
    byte[] inArray,
    int offset,
    int length
)
public:
static String^ ToBase64String(
    array<unsigned char>^ inArray,
    int offset,
    int length
)
static member ToBase64String :
        inArray:byte[] *
        offset:int *
        length:int -> string

参数

inArray
类型：
array<
System Byte
>
[]
()
[]

一个 8 位无符号整数数组。
offset
类型： System Int32
inArray 中的偏移量。
length
类型： System Int32
要转换的 inArray 的元素数。

返回值

类型： System String
inArray 中从位置 offset 开始的 length 个元素的字符串表示形式，以 Base64 表示。
异常 | 条件
ArgumentNullException | inArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | offset 或 length 为负。 - 或 - offset 加上 length 大于 inArray 的长度。

inArray 的元素作为一个数字值，并且转换为字符串表示形式（以基数为 64 的数字表示）。

从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。 从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。

offset 和 length 参数是 32 位有符号数字。offset 参数从零开始。 offset 和 length 参数是 32 位有符号数字。offset 参数从零开始。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBase64String 重载
System 命名空间


Convert ..::.ToBase64String 方法 ( array<Byte >[]()[], Int32, Int32, Base64FormattingOptions)

Convert
.
.
::
.
ToBase64String 方法 (
array<
Byte
>
[]
()
[]
, Int32, Int32, Base64FormattingOptions)
Convert 类

将 8 位无符号整数数组的子集转换为其用 Base64 数字编码的等效字符串表示形式。参数指定作为输入数组中偏移量的子集、数组中要转换的元素数以及是否在返回值中插入分行符。 将 8 位无符号整数数组的子集转换为其用 Base64 数字编码的等效字符串表示形式。参数指定作为输入数组中偏移量的子集、数组中要转换的元素数以及是否在返回值中插入分行符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function ToBase64String ( _
    inArray As Byte(), _
    offset As Integer, _
    length As Integer, _
    options As Base64FormattingOptions _
) As String
[ComVisibleAttribute(false)]
public static string ToBase64String(
    byte[] inArray,
    int offset,
    int length,
    Base64FormattingOptions options
)
[ComVisibleAttribute(false)]
public:
static String^ ToBase64String(
    array<unsigned char>^ inArray,
    int offset,
    int length,
    Base64FormattingOptions options
)
[<ComVisibleAttribute(false)>]
static member ToBase64String :
        inArray:byte[] *
        offset:int *
        length:int *
        options:Base64FormattingOptions -> string

参数

inArray
类型：
array<
System Byte
>
[]
()
[]

一个 8 位无符号整数数组。
offset
类型： System Int32
inArray 中的偏移量。
length
类型： System Int32
要转换的 inArray 的元素数。
options
类型： System Base64FormattingOptions
如果每 76 个字符插入一个分行符，则使用 InsertLineBreaks，如果不插入分行符，则使用 None。

返回值

类型： System String
inArray 中从位置 offset 开始的 length 个元素的字符串表示形式，以 Base64 表示。
异常 | 条件
ArgumentNullException | inArray 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | offset 或 length 为负。 - 或 - offset 加上 length 大于 inArray 的长度。
ArgumentException | options 不是有效的 Base64FormattingOptions 值。

inArray 参数的元素采用数值，并转换为字符串表示形式，以 Base 64 表示。

从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。 从零开始升序排列的 Base 64 数字分别为大写字符“A”到“Z”、小写字符“a”到“z”、数字“0”到“9”以及符号“+”和“/”。无值字符“=”用于尾部的空白。

offset 和 length 参数是 32 位有符号数字。offset 参数从零开始。 offset 和 length 参数是 32 位有符号数字。offset 参数从零开始。

如果 options 参数设置为 InsertLineBreaks 且转换的输出多于 76 个字符，则每 76 个字符插入一个分行符。分行符的定义是一个回车符 (U+000D) 后跟一个换行符 (U+000A)。有关更多信息，请参见位于 http://www.rfc-editor.org/ 上的 RFC 2045“Multipurpose Internet Mail Extensions”。 如果 options 参数设置为 InsertLineBreaks 且转换的输出多于 76 个字符，则每 76 个字符插入一个分行符。分行符的定义是一个回车符 (U+000D) 后跟一个换行符 (U+000A)。有关更多信息，请参见位于 http://www.rfc-editor.org/ 上的 RFC 2045“Multipurpose Internet Mail Extensions”。 如果 options 参数设置为 InsertLineBreaks 且转换的输出多于 76 个字符，则每 76 个字符插入一个分行符。分行符的定义是一个回车符 (U+000D) 后跟一个换行符 (U+000A)。有关更多信息，请参见位于 http://www.rfc-editor.org/ 上的 RFC 2045“Multipurpose Internet Mail Extensions”。

下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。 下面的示例说明 ToBase64String 方法。以三个字节（24 位）一组的方式对输入分组。因此，每个组包含四个 6 位数，其中每个数的范围是从十进制的 0 到 63。在此示例中，一共有 85 个 3 字节组，再加上余下的 1 个字节。第一组由十六进制值 00、01 和 02 组成，这些值生成的 4 个 6 位值分别等于十进制的 0、0、4 和 2。这四个值对应于输出开头的 Base 64 数字“A”、“A”、“E”和“C”。

如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。 如果具有 3 字节组的整数不存在，则实际上会用零填充剩余字节以便形成一个完整的组。在本示例中，最后一个字节的值为十六进制的 FF。前 6 位等于十进制的 63（对应于输出结尾处的 base 64 数字“/”），接下来的 2 位用零填充生成十进制的 48（对应于 base 64 数字“w”）。最后两个 6 位值为空白并对应于无值填充字符“=”。

' This example demonstrates the Convert.ToBase64String() and
'                               Convert.FromBase64String() methods
Class Sample
   Public Shared Sub Main()
      Dim inArray(255)  As Byte
      Dim outArray(255) As Byte
      Dim s2 As String
      Dim s3 As String
      Dim step1 As String = "1) The input is a byte array (inArray) of arbitrary data."
      Dim step2 As String = "2) Convert a subarray of the input data array to a base 64 string."
      Dim step3 As String = "3) Convert the entire input data array to a base 64 string."
      Dim step4 As String = "4) The two methods in steps 2 and 3 produce the same result: {0}"
      Dim step5 As String = "5) Convert the base 64 string to an output byte array (outArray)."
      Dim step6 As String = "6) The input and output arrays, inArray and outArray, are equal: {0}"
      Dim x As Integer
      Dim nl As String = Environment.NewLine
      Dim ruler1a As String = "         1         2         3         4"
      Dim ruler2a As String = "1234567890123456789012345678901234567890"
      Dim ruler3a As String = "----+----+----+----+----+----+----+----+"
      Dim ruler1b As String = "         5         6         7      "
      Dim ruler2b As String = "123456789012345678901234567890123456"
      Dim ruler3b As String = "----+----+----+----+----+----+----+-"
      Dim ruler As String = [String].Concat(ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b, nl)

      ' 1) Display an arbitrary array of input data (inArray). The data could be
      '    derived from user input, a file, an algorithm, etc.
      Console.WriteLine(step1)
      Console.WriteLine()
      For x = 0 To inArray.Length - 1
         inArray(x) = CByte(x)
         Console.Write("{0:X2} ", inArray(x))
         If (x + 1) Mod 20 = 0 Then
            Console.WriteLine()
         End If
      Next x
      Console.Write("{0}{0}", nl)

      ' 2) Convert a subarray of the input data to a base64 string. In this case,
      '    the subarray is the entire input data array. New lines (CRLF) are inserted.
      Console.WriteLine(step2)
      s2 = Convert.ToBase64String(inArray, 0, inArray.Length, _
                                  Base64FormattingOptions.InsertLineBreaks)
      Console.WriteLine("{0}{1}{2}{3}", nl, ruler, s2, nl)

      ' 3) Convert the input data to a base64 string. In this case, the entire
      '    input data array is converted by default. New lines (CRLF) are inserted.
      Console.WriteLine(step3)
      s3 = Convert.ToBase64String(inArray, Base64FormattingOptions.InsertLineBreaks)

      ' 4) Test whether the methods in steps 2 and 3 produce the same result.
      Console.WriteLine(step4, s2.Equals(s3))

      ' 5) Convert the base 64 string to an output array (outArray).
      Console.WriteLine(step5)
      outArray = Convert.FromBase64String(s2)

      ' 6) Is outArray equal to inArray?
      Console.WriteLine(step6, ArraysAreEqual(inArray, outArray))
   End Sub 'Main

   Public Shared Function ArraysAreEqual(a1() As Byte, a2() As Byte) As Boolean
      If a1.Length <> a2.Length Then
         Return False
      End If
      Dim i As Integer
      For i = 0 To a1.Length - 1
         If a1(i) <> a2(i) Then
            Return False
         End If
      Next i
      Return True
   End Function 'ArraysAreEqual
End Class 'Sample
'
'This example produces the following results:
'
'1) The input is a byte array (inArray) of arbitrary data.
'
'00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
'14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
'28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
'3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
'50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
'64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
'78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
'8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
'A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
'B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
'C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
'DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
'F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
'
'2) Convert a subarray of the input data array to a base 64 string.
'
'         1         2         3         4         5         6         7
'1234567890123456789012345678901234567890123456789012345678901234567890123456
'----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
'OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
'cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
'q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
'5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==
'
'3) Convert the entire input data array to a base 64 string.
'4) The two methods in steps 2 and 3 produce the same result: True
'5) Convert the base 64 string to an output byte array (outArray).
'6) The input and output arrays, inArray and outArray, are equal: True
'

// This example demonstrates the Convert.ToBase64String() and
//                               Convert.FromBase64String() methods

using System;
class Sample
{
    public static void Main()
    {
    byte[] inArray  = new byte[256];
    byte[] outArray = new byte[256];
    string s2;
    string s3;
    string step1 = "1) The input is a byte array (inArray) of arbitrary data.";
    string step2 = "2) Convert a subarray of the input data array to a base 64 string.";
    string step3 = "3) Convert the entire input data array to a base 64 string.";
    string step4 = "4) The two methods in steps 2 and 3 produce the same result: {0}";
    string step5 = "5) Convert the base 64 string to an output byte array (outArray).";
    string step6 = "6) The input and output arrays, inArray and outArray, are equal: {0}";
    int x;
    string nl = Environment.NewLine;
    string ruler1a = "         1         2         3         4";
    string ruler2a = "1234567890123456789012345678901234567890";
    string ruler3a = "----+----+----+----+----+----+----+----+";
    string ruler1b = "         5         6         7      ";
    string ruler2b = "123456789012345678901234567890123456";
    string ruler3b = "----+----+----+----+----+----+----+-";
    string ruler   = String.Concat(ruler1a, ruler1b, nl,
                                   ruler2a, ruler2b, nl,
                                   ruler3a, ruler3b, nl);

// 1) Display an arbitrary array of input data (inArray). The data could be
//    derived from user input, a file, an algorithm, etc.

    Console.WriteLine(step1);
    Console.WriteLine();
    for (x = 0; x < inArray.Length; x++)
        {
        inArray[x] = (byte)x;
        Console.Write("{0:X2} ", inArray[x]);
        if (((x+1)%20) == 0) Console.WriteLine();
        }
    Console.Write("{0}{0}", nl);

// 2) Convert a subarray of the input data to a base64 string. In this case,
//    the subarray is the entire input data array. New lines (CRLF) are inserted.

    Console.WriteLine(step2);
    s2 = Convert.ToBase64String(inArray, 0, inArray.Length,
                                Base64FormattingOptions.InsertLineBreaks);
    Console.WriteLine("{0}{1}{2}{3}", nl, ruler, s2, nl);

// 3) Convert the input data to a base64 string. In this case, the entire
//    input data array is converted by default. New lines (CRLF) are inserted.

    Console.WriteLine(step3);
    s3 = Convert.ToBase64String(inArray, Base64FormattingOptions.InsertLineBreaks);

// 4) Test whether the methods in steps 2 and 3 produce the same result.
    Console.WriteLine(step4, s2.Equals(s3));

// 5) Convert the base 64 string to an output array (outArray).
    Console.WriteLine(step5);
    outArray = Convert.FromBase64String(s2);

// 6) Is outArray equal to inArray?
   Console.WriteLine(step6, ArraysAreEqual(inArray, outArray));
   }

    public static bool ArraysAreEqual(byte[] a1, byte[] a2)
    {
    if (a1.Length != a2.Length) return false;
    for (int i = 0; i < a1.Length; i++)
        if (a1[i] != a2[i]) return false;
    return true;
    }
}
/*
This example produces the following results:

1) The input is a byte array (inArray) of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert a subarray of the input data array to a base 64 string.

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the entire input data array to a base 64 string.
4) The two methods in steps 2 and 3 produce the same result: True
5) Convert the base 64 string to an output byte array (outArray).
6) The input and output arrays, inArray and outArray, are equal: True

*/

// This example demonstrates the Convert.ToBase64String() and
//                               Convert.FromBase64String() methods
using namespace System;
bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 );
int main()
{
   array<Byte>^inArray = gcnew array<Byte>(256);
   array<Byte>^outArray = gcnew array<Byte>(256);
   String^ s2;
   String^ s3;
   String^ step1 = "1) The input is a byte array (inArray) of arbitrary data.";
   String^ step2 = "2) Convert a subarray of the input data array to a base 64 string.";
   String^ step3 = "3) Convert the entire input data array to a base 64 string.";
   String^ step4 = "4) The two methods in steps 2 and 3 produce the same result: {0}";
   String^ step5 = "5) Convert the base 64 string to an output byte array (outArray).";
   String^ step6 = "6) The input and output arrays, inArray and outArray, are equal: {0}";
   int x;
   String^ nl = Environment::NewLine;
   String^ ruler1a = "         1         2         3         4";
   String^ ruler2a = "1234567890123456789012345678901234567890";
   String^ ruler3a = "----+----+----+----+----+----+----+----+";
   String^ ruler1b = "         5         6         7      ";
   String^ ruler2b = "123456789012345678901234567890123456";
   String^ ruler3b = "----+----+----+----+----+----+----+-";
   String^ ruler = String::Concat( ruler1a, ruler1b, nl, ruler2a, ruler2b, nl, ruler3a, ruler3b, nl );

   // 1) Display an arbitrary array of input data (inArray). The data could be
   //    derived from user input, a file, an algorithm, etc.
   Console::WriteLine( step1 );
   Console::WriteLine();
   for ( x = 0; x < inArray->Length; x++ )
   {
      inArray[ x ] = (Byte)x;
      Console::Write( "{0:X2} ", inArray[ x ] );
      if ( ((x + 1) % 20) == 0 )
            Console::WriteLine();

   }
   Console::Write( "{0}{0}", nl );

   // 2) Convert a subarray of the input data to a base64 string. In this case,
   //    the subarray is the entire input data array. New lines (CRLF) are inserted.
   Console::WriteLine( step2 );
   s2 = Convert::ToBase64String( inArray, 0, inArray->Length, Base64FormattingOptions::InsertLineBreaks );
   Console::WriteLine( "{0}{1}{2}{3}", nl, ruler, s2, nl );

   // 3) Convert the input data to a base64 string. In this case, the entire
   //    input data array is converted by default. New lines (CRLF) are inserted.
   Console::WriteLine( step3 );
   s3 = Convert::ToBase64String( inArray, Base64FormattingOptions::InsertLineBreaks );

   // 4) Test whether the methods in steps 2 and 3 produce the same result.
   Console::WriteLine( step4, s2->Equals( s3 ) );

   // 5) Convert the base 64 string to an output array (outArray).
   Console::WriteLine( step5 );
   outArray = Convert::FromBase64String( s2 );

   // 6) Is outArray equal to inArray?
   Console::WriteLine( step6, ArraysAreEqual( inArray, outArray ) );
}

bool ArraysAreEqual( array<Byte>^a1, array<Byte>^a2 )
{
   if ( a1->Length != a2->Length )
      return false;

   for ( int i = 0; i < a1->Length; i++ )
      if ( a1[ i ] != a2[ i ] )
            return false;

   return true;
}

/*
This example produces the following results:

1) The input is a byte array (inArray) of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert a subarray of the input data array to a base 64 string.

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the entire input data array to a base 64 string.
4) The two methods in steps 2 and 3 produce the same result: True
5) Convert the base 64 string to an output byte array (outArray).
6) The input and output arrays, inArray and outArray, are equal: True

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToBase64String 重载
System 命名空间


Convert ..::.ToBoolean 方法

Convert
.
.
::
.
ToBoolean 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为等效的布尔值。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToBoolean 方法 (Boolean)

Convert
.
.
::
.
ToBoolean 方法 (Boolean)
Convert 类

返回指定的布尔值；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Boolean _
) As Boolean
public static bool ToBoolean(
    bool value
)
public:
static bool ToBoolean(
    bool value
)
static member ToBoolean :
        value:bool -> bool

参数

value
类型： System Boolean
要返回的布尔值。

返回值

类型： System Boolean
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Boolean


Convert ..::.ToBoolean 方法 (Byte)

Convert
.
.
::
.
ToBoolean 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Byte _
) As Boolean
public static bool ToBoolean(
    byte value
)
public:
static bool ToBoolean(
    unsigned char value
)
static member ToBoolean :
        value:byte -> bool

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 Byte 值转换为 Boolean 值。

Dim bytes() As Byte = { Byte.MinValue, 100, 200, Byte.MaxValue }
Dim result As Boolean

For Each byteValue As Byte In bytes
   result = Convert.ToBoolean(byteValue)
   Console.WriteLine("{0,-5}  -->  {1}", byteValue, result)
Next
' The example displays the following output:
'       0      -->  False
'       100    -->  True
'       200    -->  True
'       255    -->  True

byte[] bytes = { Byte.MinValue, 100, 200, Byte.MaxValue };
bool result;

foreach (byte byteValue in bytes)
{
   result = Convert.ToBoolean(byteValue);
   Console.WriteLine("{0,-5}  -->  {1}", byteValue, result);
}
// The example displays the following output:
//       0      -->  False
//       100    -->  True
//       200    -->  True
//       255    -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Byte


Convert ..::.ToBoolean 方法 (Char)

Convert
.
.
::
.
ToBoolean 方法 (Char)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Char _
) As Boolean
public static bool ToBoolean(
    char value
)
public:
static bool ToBoolean(
    wchar_t value
)
static member ToBoolean :
        value:char -> bool

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Boolean
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Char


Convert ..::.ToBoolean 方法 (DateTime)

Convert
.
.
::
.
ToBoolean 方法 (DateTime)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As DateTime _
) As Boolean
public static bool ToBoolean(
    DateTime value
)
public:
static bool ToBoolean(
    DateTime value
)
static member ToBoolean :
        value:DateTime -> bool

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System Boolean
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

下面的示例演示将 DateTime 值转换为布尔值类型时会引发 InvalidCastException。

Public Sub ConvertBoolean()
    Const year As Integer = 1979
    Const month As Integer = 7
    Const day As Integer = 28
    Const hour As Integer = 13
    Const minute As Integer = 26
    Const second As Integer = 15
    Const millisecond As Integer = 53

    Dim dateTime As New DateTime(year, month, day, hour, minute, _
                                 second, millisecond)

    Dim boolVal As Boolean

    ' System.InvalidCastException is always thrown.
    Try
        boolVal = System.Convert.ToBoolean(dateTime)
    Catch exception As System.InvalidCastException
        System.Console.WriteLine("Conversion from DateTime to " + _
                "Boolean is not supported by the .NET Framework.")
    End Try
End Sub

        public void ConvertBoolean() {
            const int year			= 1979;
            const int month			= 7;
            const int day			= 28;
            const int hour			= 13;
            const int minute		= 26;
            const int second		= 15;
            const int millisecond	= 53;

            DateTime dateTime = new DateTime(year, month, day, hour,
                                        minute, second, millisecond);

            bool boolVal;

            // System.InvalidCastException is always thrown.
            try {
                boolVal = System.Convert.ToBoolean(dateTime);
            }
            catch (System.InvalidCastException) {
                System.Console.WriteLine("Conversion from DateTime to " +
                    "Boolean is not supported by the .NET Framework.");
            }
        }

public:
   void ConvertBoolean()
   {
      const int year = 1979;
      const int month = 7;
      const int day = 28;
      const int hour = 13;
      const int minute = 26;
      const int second = 15;
      const int millisecond = 53;
      DateTime dateTime( year, month, day, hour,
         minute, second, millisecond );
      bool boolVal;

      // System::InvalidCastException is always thrown.
      try
      {
         boolVal = System::Convert::ToBoolean( dateTime );
      }
      catch ( System::InvalidCastException^ )
      {
         System::Console::WriteLine( "Conversion from DateTime to Boolean "+
            "is not supported by the .NET Framework." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间


Convert ..::.ToBoolean 方法 (Decimal)

Convert
.
.
::
.
ToBoolean 方法 (Decimal)
Convert 类

将指定的十进制数字的值转换为等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Decimal _
) As Boolean
public static bool ToBoolean(
    decimal value
)
public:
static bool ToBoolean(
    Decimal value
)
static member ToBoolean :
        value:decimal -> bool

参数

value
类型： System Decimal
要转换的数字。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 Decimal 值转换为 Boolean 值。

Dim numbers() As Decimal = { Decimal.MinValue, -12034.87d, -100d, _
                             0d, 300d, 6790823.45d, Decimal.MaxValue }
Dim result As Boolean

For Each number As Decimal In numbers
   result = Convert.ToBoolean(number)
   Console.WriteLine("{0,-30}  -->  {1}", number, result)
Next
' The example displays the following output:
'       -79228162514264337593543950335  -->  True
'       -12034.87                       -->  True
'       -100                            -->  True
'       0                               -->  False
'       300                             -->  True
'       6790823.45                      -->  True
'       79228162514264337593543950335   -->  True

decimal[] numbers = { Decimal.MinValue, -12034.87m, -100m, 0m,
                             300m, 6790823.45m, Decimal.MaxValue };
bool result;

foreach (decimal number in numbers)
{
   result = Convert.ToBoolean(number);
   Console.WriteLine("{0,-30}  -->  {1}", number, result);
}
// The example displays the following output:
//       -79228162514264337593543950335  -->  True
//       -12034.87                       -->  True
//       -100                            -->  True
//       0                               -->  False
//       300                             -->  True
//       6790823.45                      -->  True
//       79228162514264337593543950335   -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Decimal


Convert ..::.ToBoolean 方法 (Double)

Convert
.
.
::
.
ToBoolean 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Double _
) As Boolean
public static bool ToBoolean(
    double value
)
public:
static bool ToBoolean(
    double value
)
static member ToBoolean :
        value:float -> bool

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将布尔值转换为 Double，将 Double 转换为布尔值。

Public Sub ConvertDoubleBool(ByVal doubleVal As Double)
    Dim boolVal As Boolean

    'Double to Boolean conversion cannot overflow.
    boolVal = System.Convert.ToBoolean(doubleVal)
    System.Console.WriteLine("{0} as a Boolean is: {1}.", _
                              doubleVal, boolVal)

    'Boolean to Double conversion cannot overflow.
    doubleVal = System.Convert.ToDouble(boolVal)
    System.Console.WriteLine("{0} as a Double is: {1}.", _
                              boolVal, doubleVal)
End Sub

        public void ConvertDoubleBool(double doubleVal) {
            bool	boolVal;
            // Double to bool conversion cannot overflow.
            boolVal = System.Convert.ToBoolean(doubleVal);
            System.Console.WriteLine("{0} as a Boolean is: {1}.",
                doubleVal, boolVal);

            // bool to double conversion cannot overflow.
            doubleVal = System.Convert.ToDouble(boolVal);
            System.Console.WriteLine("{0} as a double is: {1}.",
                boolVal, doubleVal);
        }

public:
   void ConvertDoubleBool( double doubleVal )
   {
      bool boolVal;

      // Double to bool conversion cannot overflow.
      boolVal = System::Convert::ToBoolean( doubleVal );
      System::Console::WriteLine( " {0} as a Boolean is: {1}.",
         doubleVal, boolVal );

      // bool to double conversion cannot overflow.
      doubleVal = System::Convert::ToDouble( boolVal );
      System::Console::WriteLine( " {0} as a double is: {1}.",
         boolVal, doubleVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Double


Convert ..::.ToBoolean 方法 (Int16)

Convert
.
.
::
.
ToBoolean 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Short _
) As Boolean
public static bool ToBoolean(
    short value
)
public:
static bool ToBoolean(
    short value
)
static member ToBoolean :
        value:int16 -> bool

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 Int16 值转换为 Boolean 值。

Dim numbers() As Short = { Int16.MinValue, -10000, -154, 0, 216, _
                           21453, Int16.MaxValue }
Dim result As Boolean

For Each number As Short In numbers
   result = Convert.ToBoolean(number)
   Console.WriteLine("{0,-7:N0}  -->  {1}", number, result)
Next
' The example displays the following output:
'       -32,768  -->  True
'       -10,000  -->  True
'       -154     -->  True
'       0        -->  False
'       216      -->  True
'       21,453   -->  True
'       32,767   -->  True

short[] numbers = { Int16.MinValue, -10000, -154, 0, 216, 21453,
                    Int16.MaxValue };
bool result;

foreach (short number in numbers)
{
   result = Convert.ToBoolean(number);
   Console.WriteLine("{0,-7:N0}  -->  {1}", number, result);
}
// The example displays the following output:
//       -32,768  -->  True
//       -10,000  -->  True
//       -154     -->  True
//       0        -->  False
//       216      -->  True
//       21,453   -->  True
//       32,767   -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Int16


Convert ..::.ToBoolean 方法 (Int32)

Convert
.
.
::
.
ToBoolean 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Integer _
) As Boolean
public static bool ToBoolean(
    int value
)
public:
static bool ToBoolean(
    int value
)
static member ToBoolean :
        value:int -> bool

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 Int32 值转换为 Boolean 值。

Dim numbers() As Integer = { Int32.MinValue, -201649, -68, 0, 612, _
                             4038907, Int32.MaxValue }
Dim result As Boolean

For Each number As Integer In numbers
   result = Convert.ToBoolean(number)
   Console.WriteLine("{0,-15:N0}  -->  {1}", number, result)
Next
' The example displays the following output:
'       -2,147,483,648   -->  True
'       -201,649         -->  True
'       -68              -->  True
'       0                -->  False
'       612              -->  True
'       4,038,907        -->  True
'       2,147,483,647    -->  True

int[] numbers = { Int32.MinValue, -201649, -68, 0, 612, 4038907,
                  Int32.MaxValue };
bool result;

foreach (int number in numbers)
{
   result = Convert.ToBoolean(number);
   Console.WriteLine("{0,-15:N0}  -->  {1}", number, result);
}
// The example displays the following output:
//       -2,147,483,648   -->  True
//       -201,649         -->  True
//       -68              -->  True
//       0                -->  False
//       612              -->  True
//       4,038,907        -->  True
//       2,147,483,647    -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Int32


Convert ..::.ToBoolean 方法 (Int64)

Convert
.
.
::
.
ToBoolean 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Long _
) As Boolean
public static bool ToBoolean(
    long value
)
public:
static bool ToBoolean(
    long long value
)
static member ToBoolean :
        value:int64 -> bool

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 Int64 值转换为 Boolean 值。

Dim numbers() As Long = { Int64.MinValue, -2016493, -689, 0, 6121, _
                          403890774, Int64.MaxValue }
Dim result As Boolean

For Each number As Long In numbers
   result = Convert.ToBoolean(number)
   Console.WriteLine("{0,-26:N0}  -->  {1}", number, result)
Next
' The example displays the following output:
'       -9,223,372,036,854,775,808  -->  True
'       -2,016,493                  -->  True
'       -689                        -->  True
'       0                           -->  False
'       6,121                       -->  True
'       403,890,774                 -->  True
'       9,223,372,036,854,775,807   -->  True

long[] numbers = { Int64.MinValue, -2016493, -689, 0, 6121,
                   403890774, Int64.MaxValue };
bool result;

foreach (long number in numbers)
{
   result = Convert.ToBoolean(number);
   Console.WriteLine("{0,-26:N0}  -->  {1}", number, result);
}
// The example displays the following output:
//       -9,223,372,036,854,775,808  -->  True
//       -2,016,493                  -->  True
//       -689                        -->  True
//       0                           -->  False
//       6,121                       -->  True
//       403,890,774                 -->  True
//       9,223,372,036,854,775,807   -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Int64


Convert ..::.ToBoolean 方法 (Object)

Convert
.
.
::
.
ToBoolean 方法 (Object)
Convert 类

将指定对象的值转换为等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Object _
) As Boolean
public static bool ToBoolean(
    Object value
)
public:
static bool ToBoolean(
    Object^ value
)
static member ToBoolean :
        value:Object -> bool

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
true 或 false，它将反映通过对 value 的基础类型调用 IConvertible..::.ToBoolean 方法而返回的值。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 false。 true 或 false，它将反映通过对 value 的基础类型调用 IConvertible..::.ToBoolean 方法而返回的值。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 false。
异常 | 条件
FormatException | value 是一个字符串，它不等于 TrueString 或 FalseString。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持 value 转换为 Boolean。

下面的示例将一个数组的对象值转换为 Boolean 值。

Dim objects() As Object = {16.33, -24, 0, "12", "12.7", String.Empty, _
                           "1String", "True", "false", Nothing, _
                           New System.Collections.ArrayList() }
For Each obj As Object In objects
   If obj IsNot Nothing Then
      Console.Write("{0,-40}  -->  ", _
                    String.Format("{0} ({1})", obj, obj.GetType().Name))
   Else
      Console.Write("{0,-40}  -->  ", "Nothing")
   End If
   Try
      Console.WriteLine("{0}", Convert.ToBoolean(obj))
   Catch e As FormatException
      Console.WriteLine("Bad Format")
   Catch e As InvalidCastException
      Console.WriteLine("No Conversion")
   End Try
Next
' The example displays the following output:
'       16.33 (Double)                            -->  True
'       -24 (Int32)                               -->  True
'       0 (Int32)                                 -->  False
'       12 (String)                               -->  Bad Format
'       12.7 (String)                             -->  Bad Format
'        (String)                                 -->  Bad Format
'       1String (String)                          -->  Bad Format
'       True (String)                             -->  True
'       false (String)                            -->  False
'       Nothing                                   -->  False
'       System.Collections.ArrayList (ArrayList)  -->  No Conversion

object[] objects = { 16.33, -24, 0, "12", "12.7", String.Empty,
                     "1String", "True", "false", null,
                     new System.Collections.ArrayList() };

foreach (object obj in objects)
{
   Console.Write("{0,-40}  -->  ",
                 obj != null ?
                 String.Format("{0} ({1})", obj, obj.GetType().Name) :
                 "null");
   try {
      Console.WriteLine("{0}", Convert.ToBoolean(obj));
   }
   catch (FormatException) {
      Console.WriteLine("Bad Format");
   }
   catch (InvalidCastException) {
      Console.WriteLine("No Conversion");
   }
}
// The example displays the following output:
//       16.33 (Double)                            -->  True
//       -24 (Int32)                               -->  True
//       0 (Int32)                                 -->  False
//       12 (String)                               -->  Bad Format
//       12.7 (String)                             -->  Bad Format
//        (String)                                 -->  Bad Format
//       1String (String)                          -->  Bad Format
//       True (String)                             -->  True
//       false (String)                            -->  False
//       null                                      -->  False
//       System.Collections.ArrayList (ArrayList)  -->  No Conversion

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Object


Convert ..::.ToBoolean 方法 (SByte)

Convert
.
.
::
.
ToBoolean 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的布尔值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToBoolean ( _
    value As SByte _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool ToBoolean(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static bool ToBoolean(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToBoolean :
        value:sbyte -> bool

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 SByte 值转换为 Boolean 值。

Dim numbers() As SByte = { SByte.MinValue, -1, 0, 10, 100, SByte.MaxValue }
Dim result As Boolean

For Each number As SByte In numbers
   result = Convert.ToBoolean(number)
   Console.WriteLine("{0,-5}  -->  {1}", number, result)
Next
' The example displays the following output:
'       -128   -->  True
'       -1     -->  True
'       0      -->  False
'       10     -->  True
'       100    -->  True
'       127    -->  True

sbyte[] numbers = { SByte.MinValue, -1, 0, 10, 100, SByte.MaxValue };
bool result;

foreach (sbyte number in numbers)
{
   result = Convert.ToBoolean(number);
   Console.WriteLine("{0,-5}  -->  {1}", number, result);
}
// The example displays the following output:
//       -128   -->  True
//       -1     -->  True
//       0      -->  False
//       10     -->  True
//       100    -->  True
//       127    -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
SByte


Convert ..::.ToBoolean 方法 (Single)

Convert
.
.
::
.
ToBoolean 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Single _
) As Boolean
public static bool ToBoolean(
    float value
)
public:
static bool ToBoolean(
    float value
)
static member ToBoolean :
        value:float32 -> bool

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 Single 值转换为 Boolean 值。

Dim numbers() As Single = { Single.MinValue, -193.0012, 20e-15, 0, _
                            10551e-10, 100.3398, Single.MaxValue }
Dim result As Boolean

For Each number As Single In numbers
   result = Convert.ToBoolean(number)
   Console.WriteLine("{0,-15}  -->  {1}", number, result)
Next
' The example displays the following output:
'       -3.402823E+38    -->  True
'       -193.0012        -->  True
'       2E-14            -->  True
'       0                -->  False
'       1.0551E-06       -->  True
'       100.3398         -->  True
'       3.402823E+38     -->  True

float[] numbers = { Single.MinValue, -193.0012f, 20e-15f, 0f,
                    10551e-10f, 100.3398f, Single.MaxValue };
bool result;

foreach (float number in numbers)
{
   result = Convert.ToBoolean(number);
   Console.WriteLine("{0,-15}  -->  {1}", number, result);
}
// The example displays the following output:
//       -3.402823E+38    -->  True
//       -193.0012        -->  True
//       2E-14            -->  True
//       0                -->  False
//       1.0551E-06       -->  True
//       100.3398         -->  True
//       3.402823E+38     -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Single


Convert ..::.ToBoolean 方法 (String)

Convert
.
.
::
.
ToBoolean 方法 (String)
Convert 类

将逻辑值的指定字符串表示形式转换为其等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As String _
) As Boolean
public static bool ToBoolean(
    string value
)
public:
static bool ToBoolean(
    String^ value
)
static member ToBoolean :
        value:string -> bool

参数

value
类型： System String
包含 Boolean..::.TrueString 或 Boolean..::.FalseString 值的字符串。

返回值

类型： System Boolean
如果 value 等于 TrueString，则为 true；如果 value 等于 FalseString 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 false。
异常 | 条件
FormatException | value 不等于 TrueString 或 FalseString。

若要成功执行转换，value 参数必须等于 Boolean..::.TrueString（值为 True 的常量）或 Boolean..::.FalseString（值为 False 的常量），否则必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。在对 value 与 Boolean..::.TrueString 和 Boolean..::.FalseString 进行比较时，该方法忽略大小写以及前导和尾随空白。 若要成功执行转换，value 参数必须等于 Boolean..::.TrueString（值为 True 的常量）或 Boolean..::.FalseString（值为 False 的常量），否则必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。在对 value 与 Boolean..::.TrueString 和 Boolean..::.FalseString 进行比较时，该方法忽略大小写以及前导和尾随空白。

如果您希望在转换失败时不处理异常，则可以转而调用 Boolean..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Boolean..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例使用 Convert..::.ToBoolean(String) 方法将不同的字符串转换为布尔值。

Module BooleanConversion
   Public Sub Main()
      ConvertToBoolean(Nothing)
      ConvertToBoolean(String.Empty)
      ConvertToBoolean("true")
      ConvertToBoolean("TrueString")
      ConvertToBoolean("False")
      ConvertToBoolean("    false    ")
      ConvertToBoolean("-1")
      ConvertToBoolean("0")
   End Sub

   Private Sub ConvertToBoolean(value As String)
      Try
         Console.WriteLine("Converted '{0}' to {1}.", value, _
                           Convert.ToBoolean(value))
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}' to a Boolean.", value)
      End Try
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '' to False.
'       Unable to convert '' to a Boolean.
'       Converted 'true' to True.
'       Unable to convert 'TrueString' to a Boolean.
'       Converted 'False' to False.
'       Converted '    false    ' to False.
'       Unable to convert '-1' to a Boolean.
'       Unable to convert '0' to a Boolean.

using System;

public class BooleanConversion
{
   public static void Main()
   {
      ConvertToBoolean(null);
      ConvertToBoolean(String.Empty);
      ConvertToBoolean("true");
      ConvertToBoolean("TrueString");
      ConvertToBoolean("False");
      ConvertToBoolean("    false    ");
      ConvertToBoolean("-1");
      ConvertToBoolean("0");
   }

   private static void ConvertToBoolean(string value)
   {
      try
      {
         Console.WriteLine("Converted '{0}' to {1}.", value,
                           Convert.ToBoolean(value));
      }
      catch (FormatException)
      {
         Console.WriteLine("Unable to convert '{0}' to a Boolean.", value);
      }
   }
}
// The example displays the following output to the console:
//       Converted '' to False.
//       Unable to convert '' to a Boolean.
//       Converted 'true' to True.
//       Unable to convert 'TrueString' to a Boolean.
//       Converted 'False' to False.
//       Converted '    false    ' to False.
//       Unable to convert '-1' to a Boolean.
//       Unable to convert '0' to a Boolean.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
String


Convert ..::.ToBoolean 方法 (UInt16)

Convert
.
.
::
.
ToBoolean 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的布尔值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToBoolean ( _
    value As UShort _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool ToBoolean(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static bool ToBoolean(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToBoolean :
        value:uint16 -> bool

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 UInt16 值转换为 Boolean 值。

Dim numbers() As UShort = { UInt16.MinValue, 216, 21453, UInt16.MaxValue }
Dim result As Boolean

For Each number As UShort In numbers
   result = Convert.ToBoolean(number)
   Console.WriteLine("{0,-7:N0}  -->  {1}", number, result)
Next
' The example displays the following output:
'       0        -->  False
'       216      -->  True
'       21,453   -->  True
'       65,535   -->  True

ushort[] numbers = { UInt16.MinValue, 216, 21453, UInt16.MaxValue };
bool result;

foreach (ushort number in numbers)
{
   result = Convert.ToBoolean(number);
   Console.WriteLine("{0,-7:N0}  -->  {1}", number, result);
}
// The example displays the following output:
//       0        -->  False
//       216      -->  True
//       21,453   -->  True
//       65,535   -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
UInt16


Convert ..::.ToBoolean 方法 (UInt32)

Convert
.
.
::
.
ToBoolean 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的布尔值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToBoolean ( _
    value As UInteger _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool ToBoolean(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static bool ToBoolean(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToBoolean :
        value:uint32 -> bool

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 Int32 值转换为 Boolean 值。

Dim numbers() As UInteger = { UInt32.MinValue, 612, 4038907, Int32.MaxValue }
Dim result As Boolean

For Each number As UInteger In numbers
   result = Convert.ToBoolean(number)
   Console.WriteLine("{0,-15:N0}  -->  {1}", number, result)
Next
' The example displays the following output:
'       0                -->  False
'       612              -->  True
'       4,038,907        -->  True
'       2,147,483,647    -->  True

uint[] numbers = { UInt32.MinValue, 612, 4038907, Int32.MaxValue };
bool result;

foreach (uint number in numbers)
{
   result = Convert.ToBoolean(number);
   Console.WriteLine("{0,-15:N0}  -->  {1}", number, result);
}
// The example displays the following output:
//       0                -->  False
//       612              -->  True
//       4,038,907        -->  True
//       2,147,483,647    -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
UInt32


Convert ..::.ToBoolean 方法 (UInt64)

Convert
.
.
::
.
ToBoolean 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的布尔值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToBoolean ( _
    value As ULong _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool ToBoolean(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static bool ToBoolean(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToBoolean :
        value:uint64 -> bool

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System Boolean
如果 value 为非零值，则为 true；否则为 false。

下面的示例将一个数组的 UInt64 值转换为 Boolean 值。

Dim numbers() As ULong = { UInt64.MinValue, 6121, 403890774, UInt64.MaxValue }
Dim result As Boolean

For Each number As ULong In numbers
   result = Convert.ToBoolean(number)
   Console.WriteLine("{0,-26:N0}  -->  {1}", number, result)
Next
' The example displays the following output:
'       0                           -->  False
'       6,121                       -->  True
'       403,890,774                 -->  True
'       18,446,744,073,709,551,615  -->  True

ulong[] numbers = { UInt64.MinValue, 6121, 403890774, UInt64.MaxValue };
bool result;

foreach (ulong number in numbers)
{
   result = Convert.ToBoolean(number);
   Console.WriteLine("{0,-26:N0}  -->  {1}", number, result);
}
// The example displays the following output:
//       0                           -->  False
//       6,121                       -->  True
//       403,890,774                 -->  True
//       18,446,744,073,709,551,615  -->  True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
UInt64


Convert ..::.ToBoolean 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToBoolean 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定对象的值转换为等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As Object, _
    provider As IFormatProvider _
) As Boolean
public static bool ToBoolean(
    Object value,
    IFormatProvider provider
)
public:
static bool ToBoolean(
    Object^ value,
    IFormatProvider^ provider
)
static member ToBoolean :
        value:Object *
        provider:IFormatProvider -> bool

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Boolean
true 或 false，它将反映通过对 value 的基础类型调用 IConvertible..::.ToBoolean 方法而返回的值。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 false。 true 或 false，它将反映通过对 value 的基础类型调用 IConvertible..::.ToBoolean 方法而返回的值。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 false。
异常 | 条件
FormatException | value 是一个字符串，它不等于 TrueString 或 FalseString。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持 value 转换为 Boolean。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。基类型忽略 provider 参数；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。基类型忽略 provider 参数；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToBoolean(Object, IFormatProvider) 方法。如果任何非丢弃数组值都为非零，此方法返回 true。IFormatProvider 对象确定此计算中丢弃元素的方式。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToBoolean(Object, IFormatProvider) 方法。如果任何非丢弃数组值都为非零，此方法返回 true。IFormatProvider 对象确定此计算中丢弃元素的方式。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToBoolean(Object, IFormatProvider) 方法。如果任何非丢弃数组值都为非零，此方法返回 true。IFormatProvider 对象确定此计算中丢弃元素的方式。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToBoolean(Object, IFormatProvider) 方法。如果任何非丢弃数组值都为非零，此方法返回 true。IFormatProvider 对象确定此计算中丢弃元素的方式。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToBoolean(Object, IFormatProvider) 方法。如果任何非丢弃数组值都为非零，此方法返回 true。IFormatProvider 对象确定此计算中丢弃元素的方式。

Imports System.Collections

Module IConvertibleProviderDemo

    ' Define the types of averaging available in the class
    ' implementing IConvertible.
    Enum AverageType as Short
        None = 0
        GeometricMean = 1
        ArithmeticMean = 2
        Median = 3
    End Enum

    ' Pass an instance of this class to methods that require an
    ' IFormatProvider. The class instance determines the type of
    ' average to calculate.
    Public Class AverageInfo
        Implements IFormatProvider

        Protected  AvgType      As AverageType

        ' Specify the type of averaging in the constructor.
        Public Sub New( avgType As AverageType )
            Me.AvgType = avgType
        End Sub

        ' This method returns a reference to the containing object
        ' if an object of AverageInfo type is requested.
        Public Function GetFormat( argType As Type ) As Object _
            Implements IFormatProvider.GetFormat

            If argType Is GetType( AverageInfo ) Then
                Return Me
            Else
                Return Nothing
            End If
        End Function

        ' Use this property to set or get the type of averaging.
        Public Property TypeOfAverage( ) As AverageType
            Get
                Return Me.AvgType
            End Get
            Set( ByVal value as AverageType )
                Me.AvgType = value
            End Set
        End Property
    End Class

    ' This class encapsulates an array of Double values and implements
    ' the IConvertible interface. Most of the IConvertible methods
    ' return an average of the array elements in one of three types:
    ' arithmetic mean, geometric mean, or median.
    Public Class DataSet
        Implements IConvertible

        Protected data              As ArrayList
        Protected defaultProvider   As AverageInfo

        ' Construct the object and add an initial list of values.
        ' Create a default format provider.
        Public Sub New( ParamArray values( ) As Double )
            data = New ArrayList( values )
            defaultProvider = New AverageInfo( _
                AverageType.ArithmeticMean )
        End Sub

        ' Add additional values with this method.
        Public Function Add( value As Double ) As Integer
            data.Add( value )
            Return data.Count
        End Function

        ' Get, set, and add values with this indexer property.
        Default Public Property Item(index As Integer) As Double
            Get
                If index >= 0 AndAlso index < data.Count Then
                    Return System.Convert.ToDouble( data( index ) )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.get] Index out of range." )
                End If
            End Get
            Set
                If index >= 0 AndAlso index < data.Count Then
                    data( index ) = value

                ElseIf index = data.Count Then
                    data.Add( value )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.set] Index out of range." )
                End If
            End Set
        End Property

        ' This property returns the number of elements in the object.
        Public ReadOnly Property Count( ) As Integer
            Get
                Return data.Count
            End Get
        End Property

        ' This method calculates the average of the object's elements.
        Protected Function Average( ByVal avgType As AverageType ) As Double

            Dim SumProd As Double
            Dim Index   As Integer

            If data.Count = 0 Then Return 0.0

            Select Case avgType

                Case AverageType.GeometricMean

                    SumProd = 1.0
                    For Index = 0 To data.Count - 1
                        SumProd *= data( Index )
                    Next Index

                    ' This calculation will not fail with negative
                    ' elements.
                    Return Math.Sign( SumProd ) * Math.Pow( _
                        Math.Abs( SumProd ), 1.0 / data.Count )

                Case AverageType.ArithmeticMean

                    SumProd = 0.0
                    For Index = 0 To data.Count - 1
                        SumProd += data( Index )
                    Next Index

                    Return SumProd / data.Count

                Case AverageType.Median

                    If data.Count Mod 2 = 0 Then
                        Return ( data( data.Count \ 2 ) + _
                            data( data.Count \ 2 - 1 ) ) / 2.0
                    Else
                        Return data( data.Count \ 2 )
                    End If
            End Select
        End Function

        ' Get the AverageInfo object from the caller's format
        ' provider, or use the local default.
        Protected Function GetAverageInfo( _
            provider As IFormatProvider ) As AverageInfo

            Dim avgInfo As AverageInfo = Nothing

            If Not provider Is Nothing Then
                avgInfo = provider.GetFormat( GetType( AverageInfo ) )
            End If

            Return IIf( avgInfo Is Nothing, defaultProvider, avgInfo )

        End Function

        ' Calculate the average and limit the range.
        Protected Function CalcNLimitAverage( min As Double, _
            max As Double, provider as IFormatProvider ) As Double

            ' Get the format provider and calculate the average.
            Dim avgInfo As AverageInfo = GetAverageInfo( provider )
            Dim avg As Double = Average( avgInfo.TypeOfAverage )

            ' Limit the range, based on the minimum and maximum values
            ' for the type.
            Return IIf( avg > max, max, IIf( avg < min, min, avg ) )

        End Function

        ' The following elements are required by IConvertible.

        ' None of these conversion functions throw exceptions. When
        ' the data is out of range for the type, the appropriate
        ' MinValue or MaxValue is used.
        Public Function GetTypeCode( ) As TypeCode _
            Implements IConvertible.GetTypeCode
            Return TypeCode.Object
        End Function

        Function ToBoolean( ByVal provider As IFormatProvider ) As _
            Boolean Implements IConvertible.ToBoolean

            ' ToBoolean is false if the dataset is empty.
            If data.Count <= 0 Then
                Return False

            ' For median averaging, ToBoolean is true if any
            ' non-discarded elements are nonzero.
            ElseIf AverageType.Median = _
                GetAverageInfo( provider ).TypeOfAverage Then

                If data.Count Mod 2 = 0 Then
                    Return ( data( data.Count \ 2 ) <> 0.0 Or _
                        data( data.Count \ 2 - 1 ) <> 0.0 )
                Else
                    Return data( data.Count \ 2 ) <> 0.0
                End If

            ' For arithmetic or geometric mean averaging, ToBoolean is
            ' true if any element of the dataset is nonzero.
            Else
                Dim Index As Integer
                For Index = 0 To data.Count - 1
                    If data( Index ) <> 0.0 Then Return True
                Next Index
                Return False
            End If
        End Function

        Function ToByte( ByVal provider As IFormatProvider ) As Byte _
            Implements IConvertible.ToByte
            Return Convert.ToByte( CalcNLimitAverage( _
                Byte.MinValue, Byte.MaxValue, provider ) )
        End Function

        Function ToChar( ByVal provider As IFormatProvider ) As Char _
            Implements IConvertible.ToChar
            Return Convert.ToChar( Convert.ToUInt16( _
                CalcNLimitAverage( 0.0, &HFFFF, provider ) ) )
        End Function

        ' Convert to DateTime by adding the calculated average as
        ' seconds to the current date and time. A valid DateTime is
        ' always returned.
        Function ToDateTime( ByVal provider As IFormatProvider ) As _
            DateTime Implements IConvertible.ToDateTime
            Dim seconds As Double = Average( _
                GetAverageInfo( provider ).TypeOfAverage )
            Try
                Return DateTime.Now.AddSeconds( seconds )
            Catch ex As ArgumentOutOfRangeException
                Return IIf( seconds < 0.0, DateTime.MinValue, _
                    DateTime.MaxValue )
            End Try
        End Function

        Function ToDecimal( ByVal provider As IFormatProvider ) As _
            Decimal Implements IConvertible.ToDecimal

            ' The Double conversion rounds Decimal.MinValue and
            ' Decimal.MaxValue to invalid Decimal values, so the
            ' following limits must be used.
            Return Convert.ToDecimal( CalcNLimitAverage( _
                -79228162514264330000000000000.0, _
                79228162514264330000000000000.0, provider ) )
        End Function

        Function ToDouble( ByVal provider As IFormatProvider) As _
            Double Implements IConvertible.ToDouble
            Return Average( GetAverageInfo( provider ).TypeOfAverage )
        End Function

        Function ToInt16( ByVal provider As IFormatProvider ) As _
            Short Implements IConvertible.ToInt16
            Return Convert.ToInt16( CalcNLimitAverage( _
                Int16.MinValue, Int16.MaxValue, provider ) )
        End Function

        Function ToInt32( ByVal provider As IFormatProvider ) As _
            Integer Implements IConvertible.ToInt32
            Return Convert.ToInt32( CalcNLimitAverage( _
                Int32.MinValue, Int32.MaxValue, provider ) )
        End Function

        Function ToInt64( ByVal provider As IFormatProvider ) As Long _
            Implements IConvertible.ToInt64

            ' The Double conversion rounds Int64.MinValue and
            ' Int64.MaxValue to invalid Long values, so the following
            ' limits must be used.
            Return Convert.ToInt64( CalcNLimitAverage( _
                -9223372036854775000, 9223372036854775000, provider ) )
        End Function

        Function ToSByte( ByVal provider As IFormatProvider ) As _
            SByte Implements IConvertible.ToSByte

            ' SByte.MinValue and SByte.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToSByte( CalcNLimitAverage( _
                -128, 127, provider ) )
        End Function

        Function ToSingle( ByVal provider As IFormatProvider ) As _
            Single Implements IConvertible.ToSingle
            Return Convert.ToSingle( CalcNLimitAverage( _
                Single.MinValue, Single.MaxValue, provider ) )
        End Function

        Function ToUInt16( ByVal provider As IFormatProvider ) As _
            UInt16 Implements IConvertible.ToUInt16

            ' UInt16.MinValue and UInt16.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt16( CalcNLimitAverage( _
                0, &HFFFF, provider ) )
        End Function

        Function ToUInt32( ByVal provider As IFormatProvider ) As _
            UInt32 Implements IConvertible.ToUInt32

            ' UInt32.MinValue and UInt32.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt32( CalcNLimitAverage( _
                0, 4294967295, provider ) )
        End Function

        Function ToUInt64( ByVal provider As IFormatProvider ) As _
            UInt64 Implements IConvertible.ToUInt64

            ' UInt64.MinValue and UInt64.MaxValue are not defined in
            ' Visual Basic. The Double conversion would have rounded
            ' UInt64.MaxValue, so the following limit must be used.
            Return Convert.ToUInt64( CalcNLimitAverage( _
                0, 18446744073709550000.0, provider ) )
        End Function

        Function ToType( ByVal conversionType As Type, _
            ByVal provider As IFormatProvider) As Object _
            Implements IConvertible.ToType
            Return Convert.ChangeType( Average( GetAverageInfo( _
                provider ).TypeOfAverage ), conversionType )
        End Function

        Overloads Function ToString( ByVal provider As IFormatProvider _
            ) As String Implements IConvertible.ToString
            Dim avgType as AverageType = _
                GetAverageInfo( provider ).TypeOfAverage
            Return String.Format( "( {0}: {1:G10} )", avgType, _
                Average( avgType ) )
        End Function
    End Class

    ' Display a DataSet with three different format providers.
    Sub DisplayDataSet( ds As DataSet )

        Dim fmt    As String      = "{0,-12}{1,20}{2,20}{3,20}"
        Dim median As AverageInfo = New AverageInfo( AverageType.Median )
        Dim geMean As AverageInfo = _
            New AverageInfo( AverageType.GeometricMean )
        Dim iX     As Integer

        ' Display the dataset elements.
        If ds.Count > 0 Then
            Console.Write( vbCrLf & "DataSet: [{0}", ds( 0 ) )
            For iX = 1 To ds.Count - 1
                Console.Write( ", {0}", ds( iX ) )
            Next iX
            Console.WriteLine( "]" & vbCrLf )
        End If

        Console.WriteLine( fmt, "Convert.", "Default", _
            "Geometric Mean", "Median" )
        Console.WriteLine( fmt, "--------", "-------", _
            "--------------", "------" )
        Console.WriteLine( fmt, "ToBoolean", _
            Convert.ToBoolean( ds, Nothing ), _
            Convert.ToBoolean( ds, geMean ), _
            Convert.ToBoolean( ds, median ) )
        Console.WriteLine( fmt, "ToByte", _
            Convert.ToByte( ds, Nothing ), _
            Convert.ToByte( ds, geMean ), _
            Convert.ToByte( ds, median ) )
        Console.WriteLine( fmt, "ToChar", _
            Convert.ToChar( ds, Nothing ), _
            Convert.ToChar( ds, geMean ), _
            Convert.ToChar( ds, median ) )
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" & _
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", _
            "ToDateTime", Convert.ToDateTime( ds, Nothing ), _
            Convert.ToDateTime( ds, geMean ), _
            Convert.ToDateTime( ds, median ) )
        Console.WriteLine( fmt, "ToDecimal", _
            Convert.ToDecimal( ds, Nothing ), _
            Convert.ToDecimal( ds, geMean ), _
            Convert.ToDecimal( ds, median ) )
        Console.WriteLine( fmt, "ToDouble", _
            Convert.ToDouble( ds, Nothing ), _
            Convert.ToDouble( ds, geMean ), _
            Convert.ToDouble( ds, median ) )
        Console.WriteLine( fmt, "ToInt16", _
            Convert.ToInt16( ds, Nothing ), _
            Convert.ToInt16( ds, geMean ), _
            Convert.ToInt16( ds, median ) )
        Console.WriteLine( fmt, "ToInt32", _
            Convert.ToInt32( ds, Nothing ), _
            Convert.ToInt32( ds, geMean ), _
            Convert.ToInt32( ds, median ) )
        Console.WriteLine( fmt, "ToInt64", _
            Convert.ToInt64( ds, Nothing ), _
            Convert.ToInt64( ds, geMean ), _
            Convert.ToInt64( ds, median ) )
        Console.WriteLine( fmt, "ToSByte", _
            Convert.ToSByte( ds, Nothing ), _
            Convert.ToSByte( ds, geMean ), _
            Convert.ToSByte( ds, median ) )
        Console.WriteLine( fmt, "ToSingle", _
            Convert.ToSingle( ds, Nothing ), _
            Convert.ToSingle( ds, geMean ), _
            Convert.ToSingle( ds, median ) )
        Console.WriteLine( fmt, "ToUInt16", _
            Convert.ToUInt16( ds, Nothing ), _
            Convert.ToUInt16( ds, geMean ), _
            Convert.ToUInt16( ds, median ) )
        Console.WriteLine( fmt, "ToUInt32", _
            Convert.ToUInt32( ds, Nothing ), _
            Convert.ToUInt32( ds, geMean ), _
            Convert.ToUInt32( ds, median ) )
        Console.WriteLine( fmt, "ToUInt64", _
            Convert.ToUInt64( ds, Nothing ), _
            Convert.ToUInt64( ds, geMean ), _
            Convert.ToUInt64( ds, median ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Convert.To<Type>( Object, " & _
            "IFormatProvider ) methods " & vbCrLf & "generates " & _
            "the following output. The example displays the " & _
            "values " & vbCrLf & "returned by the methods, " & _
            "using several IFormatProvider objects." & vbCrLf )

        Dim ds1 As New DataSet( 10.5, 22.2, 45.9, 88.7, 156.05, 297.6 )
        DisplayDataSet( ds1 )

        Dim ds2 As New DataSet( _
            359999.95, 425000, 499999.5, 775000, 1695000 )
        DisplayDataSet( ds2 )
    End Sub
End Module

' This example of the Convert.To<Type>( Object, IFormatProvider ) methods
' generates the following output. The example displays the values
' returned by the methods, using several IFormatProvider objects.
'
' DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       103                  59                  67
' ToChar                         g                   ;                   C
' ToDateTime   2003-05-13 14:52:53 2003-05-13 14:52:09 2003-05-13 14:52:17
' ToDecimal       103.491666666667    59.4332135445164                67.3
' ToDouble        103.491666666667    59.4332135445164                67.3
' ToInt16                      103                  59                  67
' ToInt32                      103                  59                  67
' ToInt64                      103                  59                  67
' ToSByte                      103                  59                  67
' ToSingle                103.4917            59.43321                67.3
' ToUInt16                     103                  59                  67
' ToUInt32                     103                  59                  67
' ToUInt64                     103                  59                  67
'
' DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       255                 255                 255
' ToChar                         ?                   ?                   ?
' ToDateTime   2003-05-22 07:27:49 2003-05-20 22:17:27 2003-05-19 09:44:29
' ToDecimal              750999.89    631577.237188435            499999.5
' ToDouble               750999.89    631577.237188435            499999.5
' ToInt16                    32767               32767               32767
' ToInt32                   751000              631577              500000
' ToInt64                   751000              631577              500000
' ToSByte                      127                 127                 127
' ToSingle                750999.9            631577.3            499999.5
' ToUInt16                   65535               65535               65535
' ToUInt32                  751000              631577              500000
' ToUInt64                  751000              631577              500000

using System;
using System.Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
public enum AverageType : short
{
    None = 0,
    GeometricMean = 1,
    ArithmeticMean = 2,
    Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
public class AverageInfo : IFormatProvider
{
    protected AverageType AvgType;

    // Specify the type of averaging in the constructor.
    public AverageInfo( AverageType avgType )
    {
        this.AvgType = avgType;
    }

    // This method returns a reference to the containing object
    // if an object of AverageInfo type is requested.
    public object GetFormat( Type argType )
    {
        if ( argType == typeof( AverageInfo ) )
            return this;
        else
            return null;
    }

    // Use this property to set or get the type of averaging.
    public AverageType TypeOfAverage
    {
        get { return this.AvgType; }
        set { this.AvgType = value; }
    }
}

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
public class DataSet : IConvertible
{
    protected ArrayList     data;
    protected AverageInfo   defaultProvider;

    // Construct the object and add an initial list of values.
    // Create a default format provider.
    public DataSet( params double[ ] values )
    {
        data = new ArrayList( values );
        defaultProvider =
            new AverageInfo( AverageType.ArithmeticMean );
    }

    // Add additional values with this method.
    public int Add( double value )
    {
        data.Add( value );
        return data.Count;
    }

    // Get, set, and add values with this indexer property.
    public double this[ int index ]
    {
        get
        {
            if( index >= 0 && index < data.Count )
                return (double)data[ index ];
            else
                throw new InvalidOperationException(
                    "[DataSet.get] Index out of range." );
        }
        set
        {
            if( index >= 0 && index < data.Count )
                data[ index ] = value;

            else if( index == data.Count )
                data.Add( value );
            else
                throw new InvalidOperationException(
                    "[DataSet.set] Index out of range." );
        }
    }

    // This property returns the number of elements in the object.
    public int Count
    {
        get { return data.Count; }
    }

    // This method calculates the average of the object's elements.
    protected double Average( AverageType avgType )
    {
        double  SumProd;

        if( data.Count == 0 )
            return 0.0;

        switch( avgType )
        {
            case AverageType.GeometricMean:

                SumProd = 1.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd *= (double)data[ Index ];

                // This calculation will not fail with negative
                // elements.
                return Math.Sign( SumProd ) * Math.Pow(
                    Math.Abs( SumProd ), 1.0 / data.Count );

            case AverageType.ArithmeticMean:

                SumProd = 0.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd += (double)data[ Index ];

                return SumProd / data.Count;

            case AverageType.Median:

                if( data.Count % 2 == 0 )
                    return ( (double)data[ data.Count / 2 ] +
                        (double)data[ data.Count / 2 - 1 ] ) / 2.0;
                else
                    return (double)data[ data.Count / 2 ];

            default:
                return 0.0;
        }
    }

    // Get the AverageInfo object from the caller's format provider,
    // or use the local default.
    protected AverageInfo GetAverageInfo( IFormatProvider provider )
    {
        AverageInfo avgInfo = null;

        if( provider != null )
            avgInfo = (AverageInfo)provider.GetFormat(
                typeof( AverageInfo ) );

        if ( avgInfo == null )
            return defaultProvider;
        else
            return avgInfo;
    }

    // Calculate the average and limit the range.
    protected double CalcNLimitAverage( double min, double max,
        IFormatProvider provider )
    {
        // Get the format provider and calculate the average.
        AverageInfo avgInfo = GetAverageInfo( provider );
        double avg = Average( avgInfo.TypeOfAverage );

        // Limit the range, based on the minimum and maximum values
        // for the type.
        return avg > max ? max : avg < min ? min : avg;

    }

    // The following elements are required by IConvertible.

    // None of these conversion functions throw exceptions. When
    // the data is out of range for the type, the appropriate
    // MinValue or MaxValue is used.
    public TypeCode GetTypeCode( )
    {
        return TypeCode.Object;
    }

    public bool ToBoolean( IFormatProvider provider )
    {
        // ToBoolean is false if the dataset is empty.
        if( data.Count <= 0 )
            return false;

        // For median averaging, ToBoolean is true if any
        // non-discarded elements are nonzero.
        else if( AverageType.Median ==
            GetAverageInfo( provider ).TypeOfAverage )
        {
            if (data.Count % 2 == 0 )
                return ( (double)data[ data.Count / 2 ] != 0.0 ||
                    (double)data[ data.Count / 2 - 1 ] != 0.0 );
            else
                return (double)data[ data.Count / 2 ] != 0.0;
        }

        // For arithmetic or geometric mean averaging, ToBoolean is
        // true if any element of the dataset is nonzero.
        else
        {
            for( int Index = 0; Index < data.Count; Index++ )
                if( (double)data[ Index ] != 0.0 )
                    return true;
            return false;
        }
    }

    public byte ToByte( IFormatProvider provider )
    {
        return Convert.ToByte( CalcNLimitAverage(
            Byte.MinValue, Byte.MaxValue, provider ) );
    }

    public char ToChar( IFormatProvider provider )
    {
        return Convert.ToChar( Convert.ToUInt16( CalcNLimitAverage(
            Char.MinValue, Char.MaxValue, provider ) ) );
    }

    // Convert to DateTime by adding the calculated average as
    // seconds to the current date and time. A valid DateTime is
    // always returned.
    public DateTime ToDateTime( IFormatProvider provider )
    {
        double seconds =
            Average( GetAverageInfo( provider ).TypeOfAverage );
        try
        {
            return DateTime.Now.AddSeconds( seconds );
        }
        catch( ArgumentOutOfRangeException )
        {
            return seconds < 0.0 ? DateTime.MinValue : DateTime.MaxValue;
        }
    }

    public decimal ToDecimal( IFormatProvider provider )
    {
        // The Double conversion rounds Decimal.MinValue and
        // Decimal.MaxValue to invalid Decimal values, so the
        // following limits must be used.
        return Convert.ToDecimal( CalcNLimitAverage(
            -79228162514264330000000000000.0,
            79228162514264330000000000000.0, provider ) );
    }

    public double ToDouble( IFormatProvider provider )
    {
        return Average( GetAverageInfo(provider).TypeOfAverage );
    }

    public short ToInt16( IFormatProvider provider )
    {
        return Convert.ToInt16( CalcNLimitAverage(
            Int16.MinValue, Int16.MaxValue, provider ) );
    }

    public int ToInt32( IFormatProvider provider )
    {
        return Convert.ToInt32( CalcNLimitAverage(
            Int32.MinValue, Int32.MaxValue, provider ) );
    }

    public long ToInt64( IFormatProvider provider )
    {
        // The Double conversion rounds Int64.MinValue and
        // Int64.MaxValue to invalid Int64 values, so the following
        // limits must be used.
        return Convert.ToInt64( CalcNLimitAverage(
            -9223372036854775000, 9223372036854775000, provider ) );
    }

    public SByte ToSByte( IFormatProvider provider )
    {
        return Convert.ToSByte( CalcNLimitAverage(
            SByte.MinValue, SByte.MaxValue, provider ) );
    }

    public float ToSingle( IFormatProvider provider )
    {
        return Convert.ToSingle( CalcNLimitAverage(
            Single.MinValue, Single.MaxValue, provider ) );
    }

    public UInt16 ToUInt16( IFormatProvider provider )
    {
        return Convert.ToUInt16( CalcNLimitAverage(
            UInt16.MinValue, UInt16.MaxValue, provider ) );
    }

    public UInt32 ToUInt32( IFormatProvider provider )
    {
        return Convert.ToUInt32( CalcNLimitAverage(
            UInt32.MinValue, UInt32.MaxValue, provider ) );
    }

    public UInt64 ToUInt64( IFormatProvider provider )
    {
        // The Double conversion rounds UInt64.MaxValue to an invalid
        // UInt64 value, so the following limit must be used.
        return Convert.ToUInt64( CalcNLimitAverage(
            0, 18446744073709550000.0, provider ) );
    }

    public object ToType( Type conversionType,
        IFormatProvider provider )
    {
        return Convert.ChangeType( Average(
            GetAverageInfo( provider ).TypeOfAverage ),
            conversionType );
    }

    public string ToString( IFormatProvider provider )
    {
        AverageType avgType = GetAverageInfo( provider ).TypeOfAverage;
        return String.Format( "( {0}: {1:G10} )", avgType,
            Average( avgType ) );
    }
}

class IConvertibleProviderDemo
{
    // Display a DataSet with three different format providers.
    public static void DisplayDataSet( DataSet ds )
    {
        string      fmt    = "{0,-12}{1,20}{2,20}{3,20}";
        AverageInfo median = new AverageInfo( AverageType.Median );
        AverageInfo geMean =
            new AverageInfo( AverageType.GeometricMean );

         // Display the dataset elements.
        if( ds.Count > 0 )
        {
            Console.Write( "\nDataSet: [{0}", ds[ 0 ] );
            for( int iX = 1; iX < ds.Count; iX++ )
                Console.Write( ", {0}", ds[ iX ] );
            Console.WriteLine( "]\n" );
        }

        Console.WriteLine( fmt, "Convert.", "Default",
            "Geometric Mean", "Median");
        Console.WriteLine( fmt, "--------", "-------",
            "--------------", "------");
        Console.WriteLine( fmt, "ToBoolean",
            Convert.ToBoolean( ds, null ),
            Convert.ToBoolean( ds, geMean ),
            Convert.ToBoolean( ds, median ) );
        Console.WriteLine( fmt, "ToByte",
            Convert.ToByte( ds, null ),
            Convert.ToByte( ds, geMean ),
            Convert.ToByte( ds, median ) );
        Console.WriteLine( fmt, "ToChar",
            Convert.ToChar( ds, null ),
            Convert.ToChar( ds, geMean ),
            Convert.ToChar( ds, median ) );
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" +
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}",
            "ToDateTime", Convert.ToDateTime( ds, null ),
            Convert.ToDateTime( ds, geMean ),
            Convert.ToDateTime( ds, median ) );
        Console.WriteLine( fmt, "ToDecimal",
            Convert.ToDecimal( ds, null ),
            Convert.ToDecimal( ds, geMean ),
            Convert.ToDecimal( ds, median ) );
        Console.WriteLine( fmt, "ToDouble",
            Convert.ToDouble( ds, null ),
            Convert.ToDouble( ds, geMean ),
            Convert.ToDouble( ds, median ) );
        Console.WriteLine( fmt, "ToInt16",
            Convert.ToInt16( ds, null ),
            Convert.ToInt16( ds, geMean ),
            Convert.ToInt16( ds, median ) );
        Console.WriteLine( fmt, "ToInt32",
            Convert.ToInt32( ds, null ),
            Convert.ToInt32( ds, geMean ),
            Convert.ToInt32( ds, median ) );
        Console.WriteLine( fmt, "ToInt64",
            Convert.ToInt64( ds, null ),
            Convert.ToInt64( ds, geMean ),
            Convert.ToInt64( ds, median ) );
        Console.WriteLine( fmt, "ToSByte",
            Convert.ToSByte( ds, null ),
            Convert.ToSByte( ds, geMean ),
            Convert.ToSByte( ds, median ) );
        Console.WriteLine( fmt, "ToSingle",
            Convert.ToSingle( ds, null ),
            Convert.ToSingle( ds, geMean ),
            Convert.ToSingle( ds, median ) );
        Console.WriteLine( fmt, "ToUInt16",
            Convert.ToUInt16( ds, null ),
            Convert.ToUInt16( ds, geMean ),
            Convert.ToUInt16( ds, median ) );
        Console.WriteLine( fmt, "ToUInt32",
            Convert.ToUInt32( ds, null ),
            Convert.ToUInt32( ds, geMean ),
            Convert.ToUInt32( ds, median ) );
        Console.WriteLine( fmt, "ToUInt64",
            Convert.ToUInt64( ds, null ),
            Convert.ToUInt64( ds, geMean ),
            Convert.ToUInt64( ds, median ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of " +
            "the Convert.To<Type>( object, IFormatProvider ) methods " +
            "\ngenerates the following output. The example " +
            "displays the values \nreturned by the methods, " +
            "using several IFormatProvider objects.\n" );

        DataSet ds1 = new DataSet(
            10.5, 22.2, 45.9, 88.7, 156.05, 297.6 );
        DisplayDataSet( ds1 );

        DataSet ds2 = new DataSet(
            359999.95, 425000, 499999.5, 775000, 1695000 );
        DisplayDataSet( ds2 );
    }
}

/*
This example of the Convert.To<Type>( object, IFormatProvider ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:04:12 2003-05-13 15:03:28 2003-05-13 15:03:35
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 07:39:08 2003-05-20 22:28:45 2003-05-19 09:55:48
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

using namespace System;
using namespace System::Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
enum class AverageType : short
{
   None = 0,
   GeometricMean = 1,
   ArithmeticMean = 2,
   Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
ref class AverageInfo: public IFormatProvider
{
protected:
   AverageType AvgType;

public:

   // Specify the type of averaging in the constructor.
   AverageInfo( AverageType avgType )
   {
      this->AvgType = avgType;
   }

   // This method returns a reference to the containing object
   // if an object of AverageInfo type is requested.
   virtual Object^ GetFormat( Type^ argType )
   {
      if ( argType == AverageInfo::typeid)
            return this;
      else
            return (Object^)0;
   }

   property AverageType TypeOfAverage
   {

      // Use this property to set or get the type of averaging.
      AverageType get()
      {
         return this->AvgType;
      }

      void set( AverageType value )
      {
         this->AvgType = value;
      }

   }

};

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
ref class DataSet: public IConvertible
{
private:
   static Object^ null = nullptr;

protected:
   ArrayList^ data;
   AverageInfo^ defaultProvider;

   // This method unboxes a boxed double.
   double UnBoxDouble( Object^ obj )
   {
      return  *static_cast<double^>(obj);
   }

public:

   // Construct the object and add an initial list of values.
   // Create a default format provider.
   DataSet( ... array<Double>^values )
   {
      data = gcnew ArrayList( (Array^)values );
      defaultProvider = gcnew AverageInfo( AverageType::ArithmeticMean );
   }

   // Add additional values with this method.
   int Add( double value )
   {
      data->Add( value );
      return data->Count;
   }

   property double Item[ int ]
   {

      // Get, set, and add values with this indexer property.
      double get( int index )
      {
         if ( index >= 0 && index < data->Count )
                  return UnBoxDouble( data[ index ] );
         else
                  throw gcnew InvalidOperationException( "[DataSet.get] Index out of range." );
      }

      void set( int index, double value )
      {
         if ( index >= 0 && index < data->Count )
                  data[ index ] = value;
         else
         if ( index == data->Count )
                  data->Add( value );
         else
                  throw gcnew InvalidOperationException( "[DataSet.set] Index out of range." );
      }

   }

   property int Count
   {

      // This property returns the number of elements in the object.
      int get()
      {
         return data->Count;
      }

   }

protected:

   // This method calculates the average of the object's elements.
   double Average( AverageType avgType )
   {
      double SumProd;
      if ( data->Count == 0 )
            return 0.0;

      switch ( avgType )
      {
         case AverageType::GeometricMean:
            SumProd = 1.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd *= UnBoxDouble( data[ Index ] );

            // This calculation will not fail with negative
            // elements.
            return Math::Sign( SumProd ) * Math::Pow( Math::Abs( SumProd ), 1.0 / data->Count );

         case AverageType::ArithmeticMean:
            SumProd = 0.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd += UnBoxDouble( data[ Index ] );
            return SumProd / data->Count;

         case AverageType::Median:
            if ( data->Count % 2 == 0 )
                        return (UnBoxDouble( data[ data->Count / 2 ] ) + UnBoxDouble( data[ data->Count / 2 - 1 ] )) / 2.0;
            else
                        return UnBoxDouble( data[ data->Count / 2 ] );

         default:
            return 0.0;
      }
   }

   // Get the AverageInfo object from the caller's format provider,
   // or use the local default.
   AverageInfo^ GetAverageInfo( IFormatProvider^ provider )
   {
      AverageInfo^ avgInfo = nullptr;
      if ( provider != nullptr )
            avgInfo = static_cast<AverageInfo^>(provider->GetFormat( AverageInfo::typeid ));

      if ( avgInfo == nullptr )
            return defaultProvider;
      else
            return avgInfo;
   }

   // Calculate the average and limit the range.
   double CalcNLimitAverage( double min, double max, IFormatProvider^ provider )
   {

      // Get the format provider and calculate the average.
      AverageInfo^ avgInfo = GetAverageInfo( provider );
      double avg = Average( avgInfo->TypeOfAverage );

      // Limit the range, based on the minimum and maximum values
      // for the type.
      return avg > max ? max : avg < min ? min : avg;
   }

public:

   // The following elements are required by IConvertible.
   // None of these conversion functions throw exceptions. When
   // the data is out of range for the type, the appropriate
   // MinValue or MaxValue is used.
   virtual TypeCode GetTypeCode()
   {
      return TypeCode::Object;
   }

   virtual bool ToBoolean( IFormatProvider^ provider )
   {

      // ToBoolean is false if the dataset is empty.
      if ( data->Count <= 0 )
            return false;
      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      else

      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      if ( AverageType::Median == GetAverageInfo( provider )->TypeOfAverage )
      {
         if ( data->Count % 2 == 0 )
                  return (UnBoxDouble( data[ data->Count / 2 ] ) != 0.0 || UnBoxDouble( data[ data->Count / 2 - 1 ] ) != 0.0);
         else
                  return UnBoxDouble( data[ data->Count / 2 ] ) != 0.0;
      }
      // For arithmetic or geometric mean averaging, ToBoolean is
      // true if any element of the dataset is nonzero.
      else
      {
         for ( int Index = 0; Index < data->Count; Index++ )
            if ( UnBoxDouble( data[ Index ] ) != 0.0 )
                        return true;
         return false;
      }
   }

   virtual Byte ToByte( IFormatProvider^ provider )
   {
      return Convert::ToByte( CalcNLimitAverage( Byte::MinValue, Byte::MaxValue, provider ) );
   }

   virtual Char ToChar( IFormatProvider^ provider )
   {
      return Convert::ToChar( Convert::ToUInt16( CalcNLimitAverage( Char::MinValue, Char::MaxValue, provider ) ) );
   }

   // Convert to DateTime by adding the calculated average as
   // seconds to the current date and time. A valid DateTime is
   // always returned.
   virtual DateTime ToDateTime( IFormatProvider^ provider )
   {
      double seconds = Average( GetAverageInfo( provider )->TypeOfAverage );
      try
      {
         return DateTime::Now.AddSeconds( seconds );
      }
      catch ( ArgumentOutOfRangeException^ )
      {
         return seconds < 0.0 ? DateTime::MinValue : DateTime::MaxValue;
      }

   }

   virtual Decimal ToDecimal( IFormatProvider^ provider )
   {

      // The Double conversion rounds Decimal.MinValue and
      // Decimal.MaxValue to invalid Decimal values, so the
      // following limits must be used.
      return Convert::ToDecimal( CalcNLimitAverage(  -79228162514264330000000000000.0, 79228162514264330000000000000.0, provider ) );
   }

   virtual double ToDouble( IFormatProvider^ provider )
   {
      return Average( GetAverageInfo( provider )->TypeOfAverage );
   }

   virtual short ToInt16( IFormatProvider^ provider )
   {
      return Convert::ToInt16( CalcNLimitAverage( Int16::MinValue, Int16::MaxValue, provider ) );
   }

   virtual int ToInt32( IFormatProvider^ provider )
   {
      return Convert::ToInt32( CalcNLimitAverage( Int32::MinValue, Int32::MaxValue, provider ) );
   }

   virtual __int64 ToInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds Int64.MinValue and
      // Int64.MaxValue to invalid Int64 values, so the following
      // limits must be used.
      return Convert::ToInt64( CalcNLimitAverage(  -9223372036854775000, 9223372036854775000, provider ) );
   }

   virtual signed char ToSByte( IFormatProvider^ provider )
   {
      return Convert::ToSByte( CalcNLimitAverage( SByte::MinValue, SByte::MaxValue, provider ) );
   }

   virtual float ToSingle( IFormatProvider^ provider )
   {
      return Convert::ToSingle( CalcNLimitAverage( Single::MinValue, Single::MaxValue, provider ) );
   }

   virtual UInt16 ToUInt16( IFormatProvider^ provider )
   {
      return Convert::ToUInt16( CalcNLimitAverage( UInt16::MinValue, UInt16::MaxValue, provider ) );
   }

   virtual UInt32 ToUInt32( IFormatProvider^ provider )
   {
      return Convert::ToUInt32( CalcNLimitAverage( UInt32::MinValue, UInt32::MaxValue, provider ) );
   }

   virtual UInt64 ToUInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds UInt64.MaxValue to an invalid
      // UInt64 value, so the following limit must be used.
      return Convert::ToUInt64( CalcNLimitAverage( 0, 18446744073709550000.0, provider ) );
   }

   virtual Object^ ToType( Type^ conversionType, IFormatProvider^ provider )
   {
      return Convert::ChangeType( Average( GetAverageInfo( provider )->TypeOfAverage ), conversionType );
   }

   virtual String^ ToString( IFormatProvider^ provider )
   {
      AverageType avgType = GetAverageInfo( provider )->TypeOfAverage;
      return String::Format( "( {0}: {1:G10} )", avgType, Average( avgType ) );
   }

};

// Display a DataSet with three different format providers.
void DisplayDataSet( DataSet^ ds )
{
   IFormatProvider^ null = nullptr;
   String^ fmt = "{0,-12}{1,20}{2,20}{3,20}";
   AverageInfo^ median = gcnew AverageInfo( AverageType::Median );
   AverageInfo^ geMean = gcnew AverageInfo( AverageType::GeometricMean );

   // Display the dataset elements.
   if ( ds->Count > 0 )
   {
      Console::Write( "\nDataSet: [{0}", ds->Item[ 0 ] );
      for ( int iX = 1; iX < ds->Count; iX++ )
         Console::Write( ", {0}", ds->Item[ iX ] );
      Console::WriteLine( "]\n" );
   }

   Console::WriteLine( fmt, "Convert::", "Default", "Geometric Mean", "Median" );
   Console::WriteLine( fmt, "---------", "-------", "--------------", "------" );
   Console::WriteLine( fmt, "ToBoolean", Convert::ToBoolean( ds, null ), Convert::ToBoolean( ds, geMean ), Convert::ToBoolean( ds, median ) );
   Console::WriteLine( fmt, "ToByte", Convert::ToByte( ds, null ), Convert::ToByte( ds, geMean ), Convert::ToByte( ds, median ) );
   Console::WriteLine( fmt, "ToChar", Convert::ToChar( ds, null ), Convert::ToChar( ds, geMean ), Convert::ToChar( ds, median ) );
   Console::WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}"
   "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", "ToDateTime", Convert::ToDateTime( ds, null ), Convert::ToDateTime( ds, geMean ), Convert::ToDateTime( ds, median ) );
   Console::WriteLine( fmt, "ToDecimal", Convert::ToDecimal( ds, null ), Convert::ToDecimal( ds, geMean ), Convert::ToDecimal( ds, median ) );
   Console::WriteLine( fmt, "ToDouble", Convert::ToDouble( ds, null ), Convert::ToDouble( ds, geMean ), Convert::ToDouble( ds, median ) );
   Console::WriteLine( fmt, "ToInt16", Convert::ToInt16( ds, null ), Convert::ToInt16( ds, geMean ), Convert::ToInt16( ds, median ) );
   Console::WriteLine( fmt, "ToInt32", Convert::ToInt32( ds, null ), Convert::ToInt32( ds, geMean ), Convert::ToInt32( ds, median ) );
   Console::WriteLine( fmt, "ToInt64", Convert::ToInt64( ds, null ), Convert::ToInt64( ds, geMean ), Convert::ToInt64( ds, median ) );
   Console::WriteLine( fmt, "ToSByte", Convert::ToSByte( ds, null ), Convert::ToSByte( ds, geMean ), Convert::ToSByte( ds, median ) );
   Console::WriteLine( fmt, "ToSingle", Convert::ToSingle( ds, null ), Convert::ToSingle( ds, geMean ), Convert::ToSingle( ds, median ) );
   Console::WriteLine( fmt, "ToUInt16", Convert::ToUInt16( ds, null ), Convert::ToUInt16( ds, geMean ), Convert::ToUInt16( ds, median ) );
   Console::WriteLine( fmt, "ToUInt32", Convert::ToUInt32( ds, null ), Convert::ToUInt32( ds, geMean ), Convert::ToUInt32( ds, median ) );
   Console::WriteLine( fmt, "ToUInt64", Convert::ToUInt64( ds, null ), Convert::ToUInt64( ds, geMean ), Convert::ToUInt64( ds, median ) );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Convert::To<Type>( Object*, IFormatProvider* ) methods "
   "\ngenerates the following output. The example "
   "displays the values \nreturned by the methods, "
   "using several IFormatProvider objects.\n" );

   // To call a [ParamArray] method in C++, you cannot just
   // list the parameters, you need to build an array.
   array<Double>^dataElem = gcnew array<Double>(6);
   dataElem[ 0 ] = 10.5;
   dataElem[ 1 ] = 22.2;
   dataElem[ 2 ] = 45.9;
   dataElem[ 3 ] = 88.7;
   dataElem[ 4 ] = 156.05;
   dataElem[ 5 ] = 297.6;
   DataSet^ ds1 = gcnew DataSet( dataElem );
   DisplayDataSet( ds1 );
   dataElem = gcnew array<Double>(5);
   dataElem[ 0 ] = 359999.95;
   dataElem[ 1 ] = 425000;
   dataElem[ 2 ] = 499999.5;
   dataElem[ 3 ] = 775000;
   dataElem[ 4 ] = 1695000;
   DataSet^ ds2 = gcnew DataSet( dataElem );
   DisplayDataSet( ds2 );
}

/*
This example of the Convert::To<Type>( Object*, IFormatProvider* ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:30:23 2003-05-13 15:29:39 2003-05-13 15:29:47
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 08:05:19 2003-05-20 22:54:57 2003-05-19 10:21:59
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
Object


Convert ..::.ToBoolean 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToBoolean 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将逻辑值的指定字符串表示形式转换为其等效的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToBoolean ( _
    value As String, _
    provider As IFormatProvider _
) As Boolean
public static bool ToBoolean(
    string value,
    IFormatProvider provider
)
public:
static bool ToBoolean(
    String^ value,
    IFormatProvider^ provider
)
static member ToBoolean :
        value:string *
        provider:IFormatProvider -> bool

参数

value
类型： System String
包含 Boolean..::.TrueString 或 Boolean..::.FalseString 值的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。忽略此参数。 一个提供区域性特定的格式设置信息的对象。忽略此参数。

返回值

类型： System Boolean
如果 value 等于 Boolean..::.TrueString，则为 true；如果 value 等于 Boolean..::.FalseString 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 false。
异常 | 条件
FormatException | value 不等于 TrueString 或 FalseString。

如果您希望在转换失败时不处理异常，则可以转而调用 Boolean..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Boolean..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToBoolean 重载
System 命名空间
String


Convert ..::.ToByte 方法

Convert
.
.
::
.
ToByte 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 8 位无符号整数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToByte 方法 (Boolean)

Convert
.
.
::
.
ToByte 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Boolean _
) As Byte
public static byte ToByte(
    bool value
)
public:
static unsigned char ToByte(
    bool value
)
static member ToByte :
        value:bool -> byte

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System Byte
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例阐释了如何将 Boolean 转换为 Byte 值。

Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True

Console.WriteLine("{0} converts to {1}.", falseFlag, _
                  Convert.ToByte(falseFlag))
Console.WriteLine("{0} converts to {1}.", trueFlag, _
                  Convert.ToByte(trueFlag))
' The example displays the following output:
'       False converts to 0.
'       True converts to 1.

bool falseFlag = false;
bool trueFlag = true;

Console.WriteLine("{0} converts to {1}.", falseFlag,
                  Convert.ToByte(falseFlag));
Console.WriteLine("{0} converts to {1}.", trueFlag,
                  Convert.ToByte(trueFlag));
// The example displays the following output:
//       False converts to 0.
//       True converts to 1.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Byte)

Convert
.
.
::
.
ToByte 方法 (Byte)
Convert 类

返回指定的 8 位无符号整数；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Byte _
) As Byte
public static byte ToByte(
    byte value
)
public:
static unsigned char ToByte(
    unsigned char value
)
static member ToByte :
        value:byte -> byte

参数

value
类型： System Byte
要返回的 8 位无符号整数。

返回值

类型： System Byte
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Char)

Convert
.
.
::
.
ToByte 方法 (Char)
Convert 类

将指定 Unicode 字符的值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Char _
) As Byte
public static byte ToByte(
    char value
)
public:
static unsigned char ToByte(
    wchar_t value
)
static member ToByte :
        value:char -> byte

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数。
异常 | 条件
OverflowException | value 表示的数字大于 Byte..::.MaxValue。

下面的示例将一个数组的 Char 值转换为 Byte 值。

Dim chars() As Char = { "a"c, "z"c, ChrW(7), ChrW(1023) }
For Each ch As Char in chars
   Try
      Dim result As Byte = Convert.ToByte(ch)
      Console.WriteLine("{0} is converted to {1}.", ch, result)
   Catch e As OverflowException
      Console.WriteLIne("Unable to convert u+{0} to a byte.", _
                        AscW(ch).ToString("X4"))
   End Try
Next
' The example displays the following output:
'       a is converted to 97.
'       z is converted to 122.
'        is converted to 7.
'       Unable to convert u+03FF to a byte.

char[] chars = { 'a', 'z', '\x0007', '\x03FF' };
foreach (char ch in chars)
{
   try {
      byte result = Convert.ToByte(ch);
      Console.WriteLine("{0} is converted to {1}.", ch, result);
   }
   catch (OverflowException) {
      Console.WriteLine("Unable to convert u+{0} to a byte.",
                        Convert.ToInt16(ch).ToString("X4"));
   }
}
// The example displays the following output:
//       a is converted to 97.
//       z is converted to 122.
//        is converted to 7.
//       Unable to convert u+03FF to a byte.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (DateTime)

Convert
.
.
::
.
ToByte 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As DateTime _
) As Byte
public static byte ToByte(
    DateTime value
)
public:
static unsigned char ToByte(
    DateTime value
)
static member ToByte :
        value:DateTime -> byte

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System Byte
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Decimal)

Convert
.
.
::
.
ToByte 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Decimal _
) As Byte
public static byte ToByte(
    decimal value
)
public:
static unsigned char ToByte(
    Decimal value
)
static member ToByte :
        value:decimal -> byte

参数

value
类型： System Decimal
要转换的数字。

返回值

类型： System Byte
value，舍入为最接近的 8 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 8 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Byte..::.MaxValue 或小于 Byte..::.MinValue。

下面的示例将 Byte 值转换为 Decimal，将 Decimal 值转换为 Byte。

Public Sub ConvertByteDecimal(ByVal byteVal As Byte)
    Dim decimalVal As Decimal

    ' Byte to decimal conversion will not overflow.
    decimalVal = System.Convert.ToDecimal(byteVal)
    System.Console.WriteLine("The byte as a decimal is {0}.", _
                              decimalVal)

    ' Decimal to byte conversion can overflow.
    Try
        byteVal = System.Convert.ToByte(decimalVal)
        System.Console.WriteLine("The Decimal as a byte is {0}.", _
                                  byteVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in decimal-to-byte conversion.")
    End Try
End Sub

        public void ConvertByteDecimal(byte byteVal) {
            decimal decimalVal;

            // Byte to decimal conversion will not overflow.
            decimalVal = System.Convert.ToDecimal(byteVal);
            System.Console.WriteLine("The byte as a decimal is {0}.",
                decimalVal);

            // Decimal to byte conversion can overflow.
            try {
                byteVal = System.Convert.ToByte(decimalVal);
                System.Console.WriteLine("The Decimal as a byte is {0}.",
                    byteVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "The decimal value is too large for a byte.");
            }
        }

public:
   void ConvertByteDecimal( Byte byteVal )
   {
      Decimal decimalVal;

      // Byte to decimal conversion will not overflow.
      decimalVal = System::Convert::ToDecimal( byteVal );
      System::Console::WriteLine( "The Byte as a decimal is {0}.",
         decimalVal );

      // Decimal to Byte conversion can overflow.
      try
      {
         byteVal = System::Convert::ToByte( decimalVal );
         System::Console::WriteLine( "The Decimal as a Byte is {0}.",
         byteVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine(
            "The decimal value is too large for a Byte." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Double)

Convert
.
.
::
.
ToByte 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Double _
) As Byte
public static byte ToByte(
    double value
)
public:
static unsigned char ToByte(
    double value
)
static member ToByte :
        value:float -> byte

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System Byte
value，舍入为最接近的 8 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 8 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Byte..::.MaxValue 或小于 Byte..::.MinValue。

下面的示例将 Byte 值转换为 Double，将 Double 值转换为 Byte。

Public Sub ConvertDoubleByte(ByVal doubleVal As Double)
    Dim byteVal As Byte = 0

    ' Double to Byte conversion can overflow.
    Try
        byteVal = System.Convert.ToByte(doubleVal)
        System.Console.WriteLine("{0} as a Byte is: {1}.", _
            doubleVal, byteVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in Double-to-Byte conversion.")
    End Try

    ' Byte to Double conversion cannot overflow.
    doubleVal = System.Convert.ToDouble(byteVal)
    System.Console.WriteLine("{0} as a Double is: {1}.", _
                              byteVal, doubleVal)
End Sub

        public void ConvertDoubleByte(double doubleVal) {
            byte	byteVal = 0;

            // Double to byte conversion can overflow.
            try {
                byteVal = System.Convert.ToByte(doubleVal);
                System.Console.WriteLine("{0} as a byte is: {1}.",
                    doubleVal, byteVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Overflow in double-to-byte conversion.");
            }

            // Byte to double conversion cannot overflow.
            doubleVal = System.Convert.ToDouble(byteVal);
            System.Console.WriteLine("{0} as a double is: {1}.",
                byteVal, doubleVal);
        }

public:
   void ConvertDoubleByte( double doubleVal )
   {
      Byte byteVal = 0;

      // Double to Byte conversion can overflow.
      try
      {
         byteVal = System::Convert::ToByte( doubleVal );
         System::Console::WriteLine( " {0} as a Byte is: {1}.",
         doubleVal, byteVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine( "Overflow in double-to-Byte conversion." );
      }

      // Byte to double conversion cannot overflow.
      doubleVal = System::Convert::ToDouble( byteVal );
      System::Console::WriteLine( " {0} as a double is: {1}.",
         byteVal, doubleVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Int16)

Convert
.
.
::
.
ToByte 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Short _
) As Byte
public static byte ToByte(
    short value
)
public:
static unsigned char ToByte(
    short value
)
static member ToByte :
        value:int16 -> byte

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数。
异常 | 条件
OverflowException | value 小于 Byte..::.MinValue 或大于 Byte..::.MaxValue。

下面的示例将一个数组的 Int16 值转换为 Byte 值。

Dim numbers() As Short = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue }
Dim result As Byte
For Each number As Short In numbers
   Try
      result = Convert.ToByte(number)
      Console.WriteLIne("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'       The Int16 value -32768 is outside the range of the Byte type.
'       The Int16 value -1 is outside the range of the Byte type.
'       Converted the Int16 value 0 to the Byte value 0.
'       Converted the Int16 value 121 to the Byte value 121.
'       The Int16 value 340 is outside the range of the Byte type.
'       The Int16 value 32767 is outside the range of the Byte type.

short[] numbers = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue };
byte result;
foreach (short number in numbers)
{
   try {
      result = Convert.ToByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//       The Int16 value -32768 is outside the range of the Byte type.
//       The Int16 value -1 is outside the range of the Byte type.
//       Converted the Int16 value 0 to the Byte value 0.
//       Converted the Int16 value 121 to the Byte value 121.
//       The Int16 value 340 is outside the range of the Byte type.
//       The Int16 value 32767 is outside the range of the Byte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Int32)

Convert
.
.
::
.
ToByte 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Integer _
) As Byte
public static byte ToByte(
    int value
)
public:
static unsigned char ToByte(
    int value
)
static member ToByte :
        value:int -> byte

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数。
异常 | 条件
OverflowException | value 小于 Byte..::.MinValue 或大于 Byte..::.MaxValue。

下面的示例将一个数组的 Int32 值转换为 Byte 值。

Dim numbers() As Integer = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue }
Dim result As Byte
For Each number As Integer In numbers
   Try
      result = Convert.ToByte(number)
      Console.WriteLIne("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'       The Int32 value -2147483648 is outside the range of the Byte type.
'       The Int32 value -1 is outside the range of the Byte type.
'       Converted the Int32 value 0 to the Byte value 0.
'       Converted the Int32 value 121 to the Byte value 121.
'       The Int32 value 340 is outside the range of the Byte type.
'       The Int32 value 2147483647 is outside the range of the Byte type.

int[] numbers = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue };
byte result;
foreach (int number in numbers)
{
   try {
      result = Convert.ToByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//       The Int32 value -2147483648 is outside the range of the Byte type.
//       The Int32 value -1 is outside the range of the Byte type.
//       Converted the Int32 value 0 to the Byte value 0.
//       Converted the Int32 value 121 to the Byte value 121.
//       The Int32 value 340 is outside the range of the Byte type.
//       The Int32 value 2147483647 is outside the range of the Byte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Int64)

Convert
.
.
::
.
ToByte 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Long _
) As Byte
public static byte ToByte(
    long value
)
public:
static unsigned char ToByte(
    long long value
)
static member ToByte :
        value:int64 -> byte

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数。
异常 | 条件
OverflowException | value 小于 Byte..::.MinValue 或大于 Byte..::.MaxValue。

下面的示例将一个数组的 Int64 值转换为 Byte 值。

Dim numbers() As Long = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue }
Dim result As Byte
For Each number As Long In numbers
   Try
      result = Convert.ToByte(number)
      Console.WriteLIne("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'       The Int64 value -9223372036854775808 is outside the range of the Byte type.
'       The Int64 value -1 is outside the range of the Byte type.
'       Converted the Int64 value 0 to the Byte value 0.
'       Converted the Int64 value 121 to the Byte value 121.
'       The Int64 value 340 is outside the range of the Byte type.
'       The Int64 value 9223372036854775807 is outside the range of the Byte type.

long[] numbers = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue };
byte result;
foreach (long number in numbers)
{
   try {
      result = Convert.ToByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//       The Int64 value -9223372036854775808 is outside the range of the Byte type.
//       The Int64 value -1 is outside the range of the Byte type.
//       Converted the Int64 value 0 to the Byte value 0.
//       Converted the Int64 value 121 to the Byte value 121.
//       The Int64 value 340 is outside the range of the Byte type.
//       The Int64 value 9223372036854775807 is outside the range of the Byte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Object)

Convert
.
.
::
.
ToByte 方法 (Object)
Convert 类

将指定对象的值转换为 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Object _
) As Byte
public static byte ToByte(
    Object value
)
public:
static unsigned char ToByte(
    Object^ value
)
static member ToByte :
        value:Object -> byte

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 未采用 Byte 值的属性格式。
InvalidCastException | value 不实现 IConvertible。 - 或 - 不支持从 value 到 Byte 类型的转换。
OverflowException | value 表示小于 Byte..::.MinValue 或大于 Byte..::.MaxValue 的数字。

调用 value 的基础类型的 IConvertible..::.ToByte 方法的结果。

下面的示例使用 ToByte(Object) 方法将对象数组转换为 Byte 值。

Dim values() As Object = { True, -12, 163, 935, "x"c, "104", "103.0", "-1", _
                           "1.00e2", "One", 1.00e2}
Dim result As Byte
For Each value As Object In values
   Try
      result = Convert.ToByte(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.", _
                        value.GetType().Name, value)

   End Try
Next
' The example displays the following output:
'       Converted the Boolean value True to the Byte value 1.
'       The Int32 value -12 is outside the range of the Byte type.
'       Converted the Int32 value 163 to the Byte value 163.
'       The Int32 value 935 is outside the range of the Byte type.
'       Converted the Char value x to the Byte value 120.
'       Converted the String value 104 to the Byte value 104.
'       The String value 103.0 is not in a recognizable format.
'       The String value -1 is outside the range of the Byte type.
'       The String value 1.00e2 is not in a recognizable format.
'       The String value One is not in a recognizable format.
'       Converted the Double value 100 to the Byte value 100.

object[] values = { true, -12, 163, 935, 'x', "104", "103.0", "-1",
                    "1.00e2", "One", 1.00e2};
byte result;
foreach (object value in values)
{
   try {
      result = Convert.ToByte(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException)
   {
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.",
                        value.GetType().Name, value);
   }
   catch (FormatException)
   {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException)
   {
      Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.",
                        value.GetType().Name, value);

   }
}
// The example displays the following output:
//       Converted the Boolean value True to the Byte value 1.
//       The Int32 value -12 is outside the range of the Byte type.
//       Converted the Int32 value 163 to the Byte value 163.
//       The Int32 value 935 is outside the range of the Byte type.
//       Converted the Char value x to the Byte value 120.
//       Converted the String value 104 to the Byte value 104.
//       The String value 103.0 is not in a recognizable format.
//       The String value -1 is outside the range of the Byte type.
//       The String value 1.00e2 is not in a recognizable format.
//       The String value One is not in a recognizable format.
//       Converted the Double value 100 to the Byte value 100.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (SByte)

Convert
.
.
::
.
ToByte 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的 8 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToByte ( _
    value As SByte _
) As Byte
[CLSCompliantAttribute(false)]
public static byte ToByte(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static unsigned char ToByte(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToByte :
        value:sbyte -> byte

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数。
异常 | 条件
OverflowException | value 小于 Byte..::.MinValue。

下面的示例将一个数组的 SByte 值转换为 Byte 值。

Dim numbers() As SByte = { SByte.MinValue, -1, 0, 10, SByte.MaxValue }
Dim result As Byte
For Each number As SByte In numbers
   Try
      result = Convert.ToByte(number)
      Console.WriteLIne("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'       The SByte value -128 is outside the range of the Byte type.
'       The SByte value -1 is outside the range of the Byte type.
'       Converted the SByte value 0 to the Byte value 0.
'       Converted the SByte value 10 to the Byte value 10.
'       Converted the SByte value 127 to the Byte value 127.

sbyte[] numbers = { SByte.MinValue, -1, 0, 10, SByte.MaxValue };
byte result;
foreach (sbyte number in numbers)
{
   try {
      result = Convert.ToByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException)
   {
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//       The SByte value -128 is outside the range of the Byte type.
//       The SByte value -1 is outside the range of the Byte type.
//       Converted the SByte value 0 to the Byte value 0.
//       Converted the SByte value 10 to the Byte value 10.
//       Converted the SByte value 127 to the Byte value 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Single)

Convert
.
.
::
.
ToByte 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Single _
) As Byte
public static byte ToByte(
    float value
)
public:
static unsigned char ToByte(
    float value
)
static member ToByte :
        value:float32 -> byte

参数

value
类型： System Single
一个单精度浮点数字。

返回值

类型： System Byte
value，舍入为最接近的 8 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 8 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Byte..::.MaxValue 或小于 Byte..::.MinValue。

下面的示例将 Single 值转换为 Byte。

Public Sub ConvertByteSingle(ByVal byteVal As Byte)
    Dim singleVal As Single

    ' Byte to float conversion will not overflow.
    singleVal = System.Convert.ToSingle(byteVal)
    System.Console.WriteLine("The byte as a single is {0}.", _
                              singleVal)

    ' Single to byte conversion can overflow.
    Try
        byteVal = System.Convert.ToByte(singleVal)
        System.Console.WriteLine("The single as a byte is {0}.", _
                                  byteVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in single-to-byte conversion.")
    End Try
End Sub

        public void ConvertByteSingle(byte byteVal) {
            float floatVal;

            // Byte to float conversion will not overflow.
            floatVal = System.Convert.ToSingle(byteVal);
            System.Console.WriteLine("The byte as a float is {0}.",
                floatVal);

            // Float to byte conversion can overflow.
            try {
                byteVal = System.Convert.ToByte(floatVal);
                System.Console.WriteLine("The float as a byte is {0}.",
                    byteVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "The float value is too large for a byte.");
            }
        }

public:
   void ConvertByteSingle( Byte byteVal )
   {
      float floatVal;

      // Byte to float conversion will not overflow.
      floatVal = System::Convert::ToSingle( byteVal );
      System::Console::WriteLine( "The Byte as a float is {0}.",
         floatVal );

      // Float to Byte conversion can overflow.
      try
      {
         byteVal = System::Convert::ToByte( floatVal );
         System::Console::WriteLine( "The float as a Byte is {0}.",
         byteVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine(
            "The float value is too large for a Byte." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间
Math Round


Convert ..::.ToByte 方法 (String)

Convert
.
.
::
.
ToByte 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As String _
) As Byte
public static byte ToByte(
    string value
)
public:
static unsigned char ToByte(
    String^ value
)
static member ToByte :
        value:string -> byte

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 Byte..::.MinValue 或大于 Byte..::.MaxValue 的数字。

如果您希望在转换失败时不处理异常，则可以转而调用 Byte..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Byte..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例将 String 值转换为 Byte。

Public Sub ConvertStringByte(ByVal stringVal As String)
    Dim byteVal As Byte = 0

    Try
        byteVal = System.Convert.ToByte(stringVal)
        System.Console.WriteLine("{0} as a byte is: {1}", _
                                  stringVal, byteVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in string-to-byte conversion.")
    Catch exception As System.FormatException
        System.Console.WriteLine( _
            "The String is not formatted as a Byte.")
    Catch exception As System.ArgumentException
        System.Console.WriteLine("The String is null.")
    End Try

    'The conversion from byte to string is always valid.
    stringVal = System.Convert.ToString(byteVal)
    System.Console.WriteLine("{0} as a string is {1}", _
                              byteVal, stringVal)
End Sub

        public void ConvertStringByte(string stringVal) {
            byte byteVal = 0;

            try {
                byteVal = System.Convert.ToByte(stringVal);
                System.Console.WriteLine("{0} as a byte is: {1}",
                    stringVal, byteVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Conversion from string to byte overflowed.");
            }
            catch (System.FormatException) {
                System.Console.WriteLine(
                    "The string is not formatted as a byte.");
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine(
                    "The string is null.");
            }

            //The conversion from byte to string is always valid.
            stringVal = System.Convert.ToString(byteVal);
            System.Console.WriteLine("{0} as a string is {1}",
                byteVal, stringVal);
        }

public:
   void ConvertStringByte( String^ stringVal )
   {
      Byte byteVal = 0;

      try
      {
         byteVal = System::Convert::ToByte( stringVal );
         System::Console::WriteLine( " {0} as a Byte is: {1}",
            stringVal, byteVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine(
            "Conversion from String to Byte overflowed." );
      }
      catch ( System::FormatException^ )
      {
         System::Console::WriteLine(
            "The String is not formatted as a Byte." );
      }
      catch ( System::ArgumentNullException^ )
      {
         System::Console::WriteLine( "The String is 0." );
      }

      //The conversion from Byte to String is always valid.
      stringVal = System::Convert::ToString( byteVal );
      System::Console::WriteLine( " {0} as a String is {1}",
         byteVal, stringVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间
Byte Parse


Convert ..::.ToByte 方法 (UInt16)

Convert
.
.
::
.
ToByte 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的 8 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToByte ( _
    value As UShort _
) As Byte
[CLSCompliantAttribute(false)]
public static byte ToByte(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static unsigned char ToByte(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToByte :
        value:uint16 -> byte

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数。
异常 | 条件
OverflowException | value 大于 Byte..::.MaxValue。

下面的示例将一个数组的无符号 16 位整数转换为 Byte 值。

Dim numbers() As UShort = { UInt16.MinValue, 121, 340, UInt16.MaxValue }
Dim result As Byte
For Each number As UShort In numbers
   Try
      result = Convert.ToByte(number)
      Console.WriteLIne("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'       Converted the UInt16 value 0 to the Byte value 0.
'       Converted the UInt16 value 121 to the Byte value 121.
'       The UInt16 value 340 is outside the range of the Byte type.
'       The UInt16 value 65535 is outside the range of the Byte type.

ushort[] numbers = { UInt16.MinValue, 121, 340, UInt16.MaxValue };
byte result;
foreach (ushort number in numbers)
{
   try {
      result = Convert.ToByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//       Converted the UInt16 value 0 to the Byte value 0.
//       Converted the UInt16 value 121 to the Byte value 121.
//       The UInt16 value 340 is outside the range of the Byte type.
//       The UInt16 value 65535 is outside the range of the Byte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (UInt32)

Convert
.
.
::
.
ToByte 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的 8 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToByte ( _
    value As UInteger _
) As Byte
[CLSCompliantAttribute(false)]
public static byte ToByte(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static unsigned char ToByte(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToByte :
        value:uint32 -> byte

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数。
异常 | 条件
OverflowException | value 大于 Byte..::.MaxValue。

下面的示例将一个数组的无符号整数转换为 Byte 值。

Dim numbers() As UInteger = { UInt32.MinValue, 121, 340, UInt32.MaxValue }
Dim result As Byte
For Each number As UInteger In numbers
   Try
      result = Convert.ToByte(number)
      Console.WriteLIne("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'       Converted the UInt32 value 0 to the Byte value 0.
'       Converted the UInt32 value 121 to the Byte value 121.
'       The UInt32 value 340 is outside the range of the Byte type.
'       The UInt32 value 4294967295 is outside the range of the Byte type.

uint[] numbers = { UInt32.MinValue, 121, 340, UInt32.MaxValue };
byte result;
foreach (uint number in numbers)
{
   try {
      result = Convert.ToByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//       Converted the UInt32 value 0 to the Byte value 0.
//       Converted the UInt32 value 121 to the Byte value 121.
//       The UInt32 value 340 is outside the range of the Byte type.
//       The UInt32 value 4294967295 is outside the range of the Byte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (UInt64)

Convert
.
.
::
.
ToByte 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的 8 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToByte ( _
    value As ULong _
) As Byte
[CLSCompliantAttribute(false)]
public static byte ToByte(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static unsigned char ToByte(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToByte :
        value:uint64 -> byte

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数。
异常 | 条件
OverflowException | value 大于 Byte..::.MaxValue。

下面的示例将一个数组的无符号长整数转换为 Byte 值。

Dim numbers() As ULong = { UInt64.MinValue, 121, 340, UInt64.MaxValue }
Dim result As Byte
For Each number As ULong In numbers
   Try
      result = Convert.ToByte(number)
      Console.WriteLIne("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'       Converted the UInt64 value 0 to the Byte value 0.
'       Converted the UInt64 value 121 to the Byte value 121.
'       The UInt64 value 340 is outside the range of the Byte type.
'       The UInt64 value 18446744073709551615 is outside the range of the Byte type.

ulong[] numbers= { UInt64.MinValue, 121, 340, UInt64.MaxValue };
byte result;
foreach (ulong number in numbers)
{
   try {
      result = Convert.ToByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException)
   {
      Console.WriteLine("The {0} value {1} is outside the range of the Byte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//       Converted the UInt64 value 0 to the Byte value 0.
//       Converted the UInt64 value 121 to the Byte value 121.
//       The UInt64 value 340 is outside the range of the Byte type.
//       The UInt64 value 18446744073709551615 is outside the range of the Byte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToByte 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定对象的值转换为 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Object, _
    provider As IFormatProvider _
) As Byte
public static byte ToByte(
    Object value,
    IFormatProvider provider
)
public:
static unsigned char ToByte(
    Object^ value,
    IFormatProvider^ provider
)
static member ToByte :
        value:Object *
        provider:IFormatProvider -> byte

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 未采用 Byte 值的属性格式。
InvalidCastException | value 不实现 IConvertible。 - 或 - 不支持从 value 到 Byte 类型的转换。
OverflowException | value 表示小于 Byte..::.MinValue 或大于 Byte..::.MaxValue 的数字。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个实现 IConvertible 接口的 ByteString 类。该类存储字节值的字符串表示形式以及一个符号字段，因此能够表示带符号的和无符号的字节值。 下面的示例定义一个实现 IConvertible 接口的 ByteString 类。该类存储字节值的字符串表示形式以及一个符号字段，因此能够表示带符号的和无符号的字节值。

Imports System.Globalization

Public Enum SignBit As Integer
   Positive = 1
   Zero = 0
   Negative = -1
End Enum

Public Structure ByteString : Implements IConvertible
   Private signBit As SignBit
   Private byteString As String

   Public Property Sign As SignBit
      Set
         signBit = value
      End Set
      Get
         Return signBit
      End Get
   End Property

   Public Property Value As String
      Set
         If value.Trim().Length > 2 Then
            Throw New ArgumentException("The string representation of a byte cannot have more than two characters.")
         Else
            byteString = value
         End If
      End Set
      Get
         Return byteString
      End Get
   End Property

   ' IConvertible implementations.
   Public Function GetTypeCode() As TypeCode _
                   Implements IConvertible.GetTypeCode
      Return TypeCode.Object
   End Function

   Public Function ToBoolean(provider As IFormatProvider) As Boolean _
                   Implements IConvertible.ToBoolean
      If signBit = SignBit.Zero Then
         Return False
      Else
         Return True
      End If
   End Function

   Public Function ToByte(provider As IFormatProvider) As Byte _
                   Implements IConvertible.ToByte
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToSByte(byteString, 16)))
      Else
         Return Byte.Parse(byteString, NumberStyles.HexNumber)
      End If
   End Function

   Public Function ToChar(provider As IFormatProvider) As Char _
                   Implements IConvertible.ToChar
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToSByte(byteString, 16)))
      Else
         Dim byteValue As Byte = Byte.Parse(Me.byteString, NumberStyles.HexNumber)
         Return Convert.ToChar(byteValue)
      End If
   End Function

   Public Function ToDateTime(provider As IFormatProvider) As Date _
                   Implements IConvertible.ToDateTime
      Throw New InvalidCastException("ByteString to DateTime conversion is not supported.")
   End Function

   Public Function ToDecimal(provider As IFormatProvider) As Decimal _
                   Implements IConvertible.ToDecimal
      If signBit = signBit.Negative Then
         Dim byteValue As SByte = SByte.Parse(byteString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(byteValue)
      Else
         Dim byteValue As Byte = Byte.Parse(byteString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(byteValue)
      End If
   End Function

   Public Function ToDouble(provider As IFormatProvider) As Double _
                   Implements IConvertible.ToDouble
      If signBit = signBit.Negative Then
         Return Convert.ToDouble(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToDouble(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt16(provider As IFormatProvider) As Int16 _
                   Implements IConvertible.ToInt16
      If signBit = signBit.Negative Then
         Return Convert.ToInt16(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToInt16(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt32(provider As IFormatProvider) As Int32 _
                   Implements IConvertible.ToInt32
      If signBit = signBit.Negative Then
         Return Convert.ToInt32(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToInt32(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt64(provider As IFormatProvider) As Int64 _
                   Implements IConvertible.ToInt64
      If signBit = signBit.Negative Then
         Return Convert.ToInt64(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToInt64(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToSByte(provider As IFormatProvider) As SByte _
                   Implements IConvertible.ToSByte
      If signBit = SignBit.Positive Then
         Try
            Return Convert.ToSByte(Byte.Parse(byteString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is outside the range of the SByte type.", _
                                                   Byte.Parse(byteString, NumberStyles.HexNumber)), e)
         End Try
      Else
         Return SByte.Parse(byteString, NumberStyles.HexNumber)
      End If
   End Function

   Public Function ToSingle(provider As IFormatProvider) As Single _
                   Implements IConvertible.ToSingle
      If signBit = signBit.Negative Then
         Return Convert.ToSingle(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToSingle(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Overloads Function ToString(provider As IFormatProvider) As String _
                   Implements IConvertible.ToString
      Return Me.byteString
   End Function

   Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object _
                   Implements IConvertible.ToType
      Select Case Type.GetTypeCode(conversionType)
         Case TypeCode.Boolean
            Return Me.ToBoolean(Nothing)
         Case TypeCode.Byte
            Return Me.ToByte(Nothing)
         Case TypeCode.Char
            Return Me.ToChar(Nothing)
         Case TypeCode.DateTime
            Return Me.ToDateTime(Nothing)
         Case TypeCode.Decimal
            Return Me.ToDecimal(Nothing)
         Case TypeCode.Double
            Return Me.ToDouble(Nothing)
         Case TypeCode.Int16
            Return Me.ToInt16(Nothing)
         Case TypeCode.Int32
            Return Me.ToInt32(Nothing)
         Case TypeCode.Int64
            Return Me.ToInt64(Nothing)
         Case TypeCode.Object
            If GetType(ByteString).Equals(conversionType) Then
               Return Me
            Else
               Throw New InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name))
            End If
         Case TypeCode.SByte
            Return Me.ToSByte(Nothing)
         Case TypeCode.Single
            Return Me.ToSingle(Nothing)
         Case TypeCode.String
            Return Me.ToString(Nothing)
         Case TypeCode.UInt16
            Return Me.ToUInt16(Nothing)
         Case TypeCode.UInt32
            Return Me.ToUInt32(Nothing)
         Case TypeCode.UInt64
            Return Me.ToUInt64(Nothing)
         Case Else
            Throw New InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name))

      End Select
   End Function

   Public Function ToUInt16(provider As IFormatProvider) As UInt16 _
                   Implements IConvertible.ToUInt16
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt16 type.", _
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt16(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToUInt32(provider As IFormatProvider) As UInt32 _
                   Implements IConvertible.ToUInt32
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt32 type.", _
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt32(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToUInt64(provider As IFormatProvider) As UInt64 _
                   Implements IConvertible.ToUInt64
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt64 type.", _
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt64(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

End Structure

using System;
using System.Globalization;

public enum SignBit { Negative=-1, Zero=0, Positive=1 };

public struct ByteString : IConvertible
{
   private SignBit signBit;
   private string byteString;

   public SignBit Sign
   {
      set { signBit = value; }
      get { return signBit; }
   }

   public string Value
   {
      set {
         if (value.Trim().Length > 2)
            throw new ArgumentException("The string representation of a byte cannot have more than two characters.");
         else
            byteString = value;
      }
      get { return byteString; }
   }

   // IConvertible implementations.
   public TypeCode GetTypeCode() {
      return TypeCode.Object;
   }

   public bool ToBoolean(IFormatProvider provider)
   {
      if (signBit == SignBit.Zero)
         return false;
      else
         return true;
   }

   public byte ToByte(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToSByte(byteString, 16)));
      else
         return Byte.Parse(byteString, NumberStyles.HexNumber);
   }

   public char ToChar(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative) {
         throw new OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToSByte(byteString, 16)));
      }
      else {
         byte byteValue = Byte.Parse(this.byteString, NumberStyles.HexNumber);
         return Convert.ToChar(byteValue);
      }
   }

   public DateTime ToDateTime(IFormatProvider provider)
   {
      throw new InvalidCastException("ByteString to DateTime conversion is not supported.");
   }

   public decimal ToDecimal(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
      {
         sbyte byteValue = SByte.Parse(byteString, NumberStyles.HexNumber);
         return Convert.ToDecimal(byteValue);
      }
      else
      {
         byte byteValue = Byte.Parse(byteString, NumberStyles.HexNumber);
         return Convert.ToDecimal(byteValue);
      }
   }

   public double ToDouble(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToDouble(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToDouble(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public short ToInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToInt16(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToInt16(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public int ToInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToInt32(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToInt32(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public long ToInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToInt64(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToInt64(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public sbyte ToSByte(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         try {
            return Convert.ToSByte(Byte.Parse(byteString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is outside the range of the SByte type.",
                                                   Byte.Parse(byteString, NumberStyles.HexNumber)), e);
         }
      else
         return SByte.Parse(byteString, NumberStyles.HexNumber);
   }

   public float ToSingle(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToSingle(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToSingle(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public string ToString(IFormatProvider provider)
   {
      return "0x" + this.byteString;
   }

   public object ToType(Type conversionType, IFormatProvider provider)
   {
      switch (Type.GetTypeCode(conversionType))
      {
         case TypeCode.Boolean:
            return this.ToBoolean(null);
         case TypeCode.Byte:
            return this.ToByte(null);
         case TypeCode.Char:
            return this.ToChar(null);
         case TypeCode.DateTime:
            return this.ToDateTime(null);
         case TypeCode.Decimal:
            return this.ToDecimal(null);
         case TypeCode.Double:
            return this.ToDouble(null);
         case TypeCode.Int16:
            return this.ToInt16(null);
         case TypeCode.Int32:
            return this.ToInt32(null);
         case TypeCode.Int64:
            return this.ToInt64(null);
         case TypeCode.Object:
            if (typeof(ByteString).Equals(conversionType))
               return this;
            else
               throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name));
         case TypeCode.SByte:
            return this.ToSByte(null);
         case TypeCode.Single:
            return this.ToSingle(null);
         case TypeCode.String:
            return this.ToString(null);
         case TypeCode.UInt16:
            return this.ToUInt16(null);
         case TypeCode.UInt32:
            return this.ToUInt32(null);
         case TypeCode.UInt64:
            return this.ToUInt64(null);
         default:
            throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
      }
   }

   public UInt16 ToUInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt16 type.",
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt16(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public UInt32 ToUInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt32 type.",
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt32(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public UInt64 ToUInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt64 type.",
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt64(Byte.Parse(byteString, NumberStyles.HexNumber));
   }
}

下面的示例实例化多个 ByteString 对象，然后调用 ToByte(Object, IFormatProvider) 方法来将它们转换为字节值。它阐释了 ToByte(Object, IFormatProvider) 方法包装了对要转换的对象的 IConvertible..::.ToByte 方法的一个调用。 下面的示例实例化多个 ByteString 对象，然后调用 ToByte(Object, IFormatProvider) 方法来将它们转换为字节值。它阐释了 ToByte(Object, IFormatProvider) 方法包装了对要转换的对象的 IConvertible..::.ToByte 方法的一个调用。

Module modMain
   Public Sub Main()
      Dim positiveByte As Byte = 216
      Dim negativeByte As SByte = -101

      Dim positiveString As New ByteString()
      positiveString.Sign = CType(Math.Sign(positiveByte), SignBit)
      positiveString.Value = positiveByte.ToString("X2")

      Dim negativeString As New ByteString()
      negativeString.Sign = CType(Math.Sign(negativeByte), SignBit)
      negativeString.Value = negativeByte.ToString("X2")

      Try
         Console.WriteLine("'{0}' converts to {1}.", positiveString.Value, Convert.ToByte(positiveString))
      Catch e As OverflowException
         Console.WriteLine("0x{0} is outside the range of the Byte type.", positiveString.Value)
      End Try

      Try
         Console.WriteLine("'{0}' converts to {1}.", negativeString.Value, Convert.ToByte(negativeString))
      Catch e As OverflowException
         Console.WriteLine("0x{0} is outside the range of the Byte type.", negativeString.Value)
      End Try
   End Sub
End Module
' The example dosplays the following output:
'       'D8' converts to 216.
'       0x9B is outside the range of the Byte type.

public class Class1
{
   public static void Main()
   {
      byte positiveByte = 216;
      sbyte negativeByte = -101;

      ByteString positiveString = new ByteString();
      positiveString.Sign = (SignBit) Math.Sign(positiveByte);
      positiveString.Value = positiveByte.ToString("X2");

      ByteString negativeString = new ByteString();
      negativeString.Sign = (SignBit) Math.Sign(negativeByte);
      negativeString.Value = negativeByte.ToString("X2");

      try {
         Console.WriteLine("'{0}' converts to {1}.", positiveString.Value, Convert.ToByte(positiveString));
      }
      catch (OverflowException) {
         Console.WriteLine("0x{0} is outside the range of the Byte type.", positiveString.Value);
      }

      try {
         Console.WriteLine("'{0}' converts to {1}.", negativeString.Value, Convert.ToByte(negativeString));
      }
      catch (OverflowException) {
         Console.WriteLine("0x{0} is outside the range of the Byte type.", negativeString.Value);
      }
   }
}
// The example displays the following output:
//       'D8' converts to 216.
//       0x9B is outside the range of the Byte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToByte 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToByte 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As String, _
    provider As IFormatProvider _
) As Byte
public static byte ToByte(
    string value,
    IFormatProvider provider
)
public:
static unsigned char ToByte(
    String^ value,
    IFormatProvider^ provider
)
static member ToByte :
        value:string *
        provider:IFormatProvider -> byte

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Byte
一个等于 value 的 8 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 Byte..::.MinValue 或大于 Byte..::.MaxValue 的数字。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

如果您希望在转换失败时不处理异常，则可以转而调用 Byte..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Byte..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例创建一个自定义的 NumberFormatInfo 对象，它将正号定义为 "pos"，将负号定义为 "neg"，在 ToByte(String, IFormatProvider) 方法的调用中使用它们。然后，它重复调用 ToByte(String, IFormatProvider) 方法，将字符串数组中的每个元素转换为一个 Byte 值。 下面的示例创建一个自定义的 NumberFormatInfo 对象，它将正号定义为 "pos"，将负号定义为 "neg"，在 ToByte(String, IFormatProvider) 方法的调用中使用它们。然后，它重复调用 ToByte(String, IFormatProvider) 方法，将字符串数组中的每个元素转换为一个 Byte 值。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Create a NumberFormatInfo object and set several of its
      ' properties that apply to unsigned bytes.
      Dim provider As New NumberFormatInfo()
      With provider
         ' These properties affect the conversion.
         .PositiveSign = "pos "
         .NegativeSign = "neg "

         ' This property does not affect the conversion.
         ' The input string cannot have a decimal separator.
         .NumberDecimalSeparator = "."
      End With

      ' Define an array of numeric strings.
      Dim numericStrings() As String = { "234", "+234", "pos 234", "234.", _
                                         "255", "256", "-1" }

      For Each numericString As String In numericStrings
         Console.Write("'{0,-8}' ->   ", numericString)
         Try
            Dim number As Byte = Convert.ToByte(numericString, provider)
            Console.WriteLine(number)
         Catch ex As FormatException
            Console.WriteLine("Incorrect Format")
         Catch ex As OverflowException
            Console.WriteLine("Overflows a Byte")
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       '234     ' ->   234
'       '+234    ' ->   Incorrect Format
'       'pos 234 ' ->   234
'       '234.    ' ->   Incorrect Format
'       '255     ' ->   255
'       '256     ' ->   Overflows a Byte
'       '-1      ' ->   Incorrect Format

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Create a NumberFormatInfo object and set several of its
      // properties that apply to unsigned bytes.
      NumberFormatInfo provider = new NumberFormatInfo();

      // These properties affect the conversion.
      provider.PositiveSign = "pos ";
      provider.NegativeSign = "neg ";

      // This property does not affect the conversion.
      // The input string cannot have a decimal separator.
      provider.NumberDecimalSeparator = ".";

      // Define an array of numeric strings.
      string[] numericStrings = { "234", "+234", "pos 234", "234.", "255",
                                  "256", "-1" };

      foreach (string numericString in numericStrings)
      {
         Console.Write("'{0,-8}' ->   ", numericString);
         try {
            byte number = Convert.ToByte(numericString, provider);
            Console.WriteLine(number);
         }
         catch (FormatException) {
            Console.WriteLine("Incorrect Format");
         }
         catch (OverflowException) {
            Console.WriteLine("Overflows a Byte");
         }
      }
   }
}
// The example displays the following output:
//       '234     ' ->   234
//       '+234    ' ->   Incorrect Format
//       'pos 234 ' ->   234
//       '234.    ' ->   Incorrect Format
//       '255     ' ->   255
//       '256     ' ->   Overflows a Byte
//       '-1      ' ->   Incorrect Format

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间
Byte Parse


Convert ..::.ToByte 方法 (String, Int32)

Convert
.
.
::
.
ToByte 方法 (String, Int32)
Convert 类

将指定基的数字的字符串表示形式转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As String, _
    fromBase As Integer _
) As Byte
public static byte ToByte(
    string value,
    int fromBase
)
public:
static unsigned char ToByte(
    String^ value,
    int fromBase
)
static member ToByte :
        value:string *
        fromBase:int -> byte

参数

value
类型： System String
包含要转换的数字的字符串。
fromBase
类型： System Int32
value 中数字的基数，它必须是 2、8、10 或 16。

返回值

类型： System Byte
与 value 中数字等效的 8 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
ArgumentException | fromBase 不是 2、8、10 或 16。 - 或 - value，它表示一个非 10 为基的无符号数，前面带一个负号。
FormatException | value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。 value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。
OverflowException | value，它表示一个 10 为基的无符号数，前面带一个负号。 - 或 - value 表示小于 Byte..::.MinValue 或大于 Byte..::.MaxValue 的数字。

如果 fromBase 为 16，则可以在 value 参数指定的数字前面加上“0x”或“0X”。

由于 Byte 数据类型仅支持无符号值，因此 ToByte(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有八位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 Byte 数据类型的范围的有符号字节值转换为 Byte 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToByte(String, Int32) 方法。该方法将显示消息“0x80 converts to 128”（0x80 转换为 128），而不是引发异常。 由于 Byte 数据类型仅支持无符号值，因此 ToByte(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有八位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 Byte 数据类型的范围的有符号字节值转换为 Byte 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToByte(String, Int32) 方法。该方法将显示消息“0x80 converts to 128”（0x80 转换为 128），而不是引发异常。 由于 Byte 数据类型仅支持无符号值，因此 ToByte(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有八位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 Byte 数据类型的范围的有符号字节值转换为 Byte 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToByte(String, Int32) 方法。该方法将显示消息“0x80 converts to 128”（0x80 转换为 128），而不是引发异常。 由于 Byte 数据类型仅支持无符号值，因此 ToByte(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有八位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 Byte 数据类型的范围的有符号字节值转换为 Byte 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToByte(String, Int32) 方法。该方法将显示消息“0x80 converts to 128”（0x80 转换为 128），而不是引发异常。 由于 Byte 数据类型仅支持无符号值，因此 ToByte(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有八位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 Byte 数据类型的范围的有符号字节值转换为 Byte 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToByte(String, Int32) 方法。该方法将显示消息“0x80 converts to 128”（0x80 转换为 128），而不是引发异常。

' Create a hexadecimal value out of range of the Byte type.
Dim value As String = SByte.MinValue.ToString("X")
' Convert it back to a number.
Try
   Dim number As Byte = Convert.ToByte(value, 16)
   Console.WriteLine("0x{0} converts to {1}.", value, number)
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to a byte.", value)
End Try

// Create a hexadecimal value out of range of the Byte type.
string value = SByte.MinValue.ToString("X");
// Convert it back to a number.
try
{
   byte number = Convert.ToByte(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to a byte.", value);
}

在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串表示形式转换为 Byte 值时，所用的方法不会错误地使用无符号二进制表示形式。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换回 Byte 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该值是一个负值，并且使用的是 2 的补数而不是无符号二进制表示形式），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串表示形式转换为 Byte 值时，所用的方法不会错误地使用无符号二进制表示形式。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换回 Byte 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该值是一个负值，并且使用的是 2 的补数而不是无符号二进制表示形式），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串表示形式转换为 Byte 值时，所用的方法不会错误地使用无符号二进制表示形式。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换回 Byte 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该值是一个负值，并且使用的是 2 的补数而不是无符号二进制表示形式），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串表示形式转换为 Byte 值时，所用的方法不会错误地使用无符号二进制表示形式。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换回 Byte 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该值是一个负值，并且使用的是 2 的补数而不是无符号二进制表示形式），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串表示形式转换为 Byte 值时，所用的方法不会错误地使用无符号二进制表示形式。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换回 Byte 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该值是一个负值，并且使用的是 2 的补数而不是无符号二进制表示形式），则此方法将引发异常。

' Create a negative hexadecimal value out of range of the Byte type.
Dim sourceNumber As SByte = SByte.MinValue
Dim isSigned As Boolean = Math.Sign(sourceNumber.MinValue) = -1
Dim value As String = sourceNumber.ToString("X")
Dim targetNumber As Byte
Try
   targetNumber = Convert.ToByte(value, 16)
   If isSigned And ((targetNumber And &H80) <> 0) Then
      Throw New OverflowException()
   Else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber)
   End If
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned byte.", value)
End Try
' Displays the following to the console:
'    Unable to convert '0x80' to an unsigned byte.

// Create a negative hexadecimal value out of range of the Byte type.
sbyte sourceNumber = SByte.MinValue;
bool isSigned = Math.Sign((sbyte)sourceNumber.GetType().GetField("MinValue").GetValue(null)) == -1;
string value = sourceNumber.ToString("X");
byte targetNumber;
try
{
   targetNumber = Convert.ToByte(value, 16);
   if (isSigned && ((targetNumber & 0x80) != 0))
      throw new OverflowException();
   else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned byte.", value);
}
// Displays the following to the console:
//    Unable to convert '0x80' to an unsigned byte.

下面的示例交替尝试将字符串数组解释为二进制、八进制、十进制和十六进制值的表示形式。

Module Example
   Public Sub Main()
      Dim bases() As Integer = { 2, 8, 10, 16 }
      Dim values() As String = { "-1", "1", "08", "0F", "11" , "12", "30", _
                                  "101", "255", "FF", "10000000", "80" }
      Dim number As Byte
      For Each base As Integer In bases
         Console.WriteLine("Base {0}:", base)
         For Each value As String In values
            Try
               number = Convert.ToByte(value, base)
               Console.WriteLine("   Converted '{0}' to {1}.", value, number)
            Catch e As FormatException
               Console.WriteLine("   '{0}' is not in the correct format for a base {1} conversion.", _
                                 value, base)
            Catch e As OverflowException
               Console.WriteLine("   '{0}' is outside the range of the Byte type.", value)
            Catch e As ArgumentException
               Console.WriteLine("   '{0}' is invalid in base {1}.", value, base)
            End Try
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'    Base 2:
'       '-1' is invalid in base 2.
'       Converted '1' to 1.
'       '08' is not in the correct format for a base 2 conversion.
'       '0F' is not in the correct format for a base 2 conversion.
'       Converted '11' to 3.
'       '12' is not in the correct format for a base 2 conversion.
'       '30' is not in the correct format for a base 2 conversion.
'       Converted '101' to 5.
'       '255' is not in the correct format for a base 2 conversion.
'       'FF' is not in the correct format for a base 2 conversion.
'       Converted '10000000' to 128.
'       '80' is not in the correct format for a base 2 conversion.
'    Base 8:
'       '-1' is invalid in base 8.
'       Converted '1' to 1.
'       '08' is not in the correct format for a base 8 conversion.
'       '0F' is not in the correct format for a base 8 conversion.
'       Converted '11' to 9.
'       Converted '12' to 10.
'       Converted '30' to 24.
'       Converted '101' to 65.
'       Converted '255' to 173.
'       'FF' is not in the correct format for a base 8 conversion.
'       '10000000' is outside the range of the Byte type.
'       '80' is not in the correct format for a base 8 conversion.
'    Base 10:
'       '-1' is outside the range of the Byte type.
'       Converted '1' to 1.
'       Converted '08' to 8.
'       '0F' is not in the correct format for a base 10 conversion.
'       Converted '11' to 11.
'       Converted '12' to 12.
'       Converted '30' to 30.
'       Converted '101' to 101.
'       Converted '255' to 255.
'       'FF' is not in the correct format for a base 10 conversion.
'       '10000000' is outside the range of the Byte type.
'       Converted '80' to 80.
'    Base 16:
'       '-1' is invalid in base 16.
'       Converted '1' to 1.
'       Converted '08' to 8.
'       Converted '0F' to 15.
'       Converted '11' to 17.
'       Converted '12' to 18.
'       Converted '30' to 48.
'       '101' is outside the range of the Byte type.
'       '255' is outside the range of the Byte type.
'       Converted 'FF' to 255.
'       '10000000' is outside the range of the Byte type.
'       Converted '80' to 128.

using System;

public class Example
{
   public static void Main()
   {
      int[] bases = { 2, 8, 10, 16 };
      string[] values = { "-1", "1", "08", "0F", "11" , "12", "30",
                          "101", "255", "FF", "10000000", "80" };
      byte number;
      foreach (int numBase in bases)
      {
         Console.WriteLine("Base {0}:", numBase);
         foreach (string value in values)
         {
            try {
               number = Convert.ToByte(value, numBase);
               Console.WriteLine("   Converted '{0}' to {1}.", value, number);
            }
            catch (FormatException) {
               Console.WriteLine("   '{0}' is not in the correct format for a base {1} byte value.",
                                 value, numBase);
            }
            catch (OverflowException) {
               Console.WriteLine("   '{0}' is outside the range of the Byte type.", value);
            }
            catch (ArgumentException) {
               Console.WriteLine("   '{0}' is invalid in base {1}.", value, numBase);
            }
         }
      }
   }
}
// The example displays the following output:
//    Base 2:
//       '-1' is invalid in base 2.
//       Converted '1' to 1.
//       '08' is not in the correct format for a base 2 conversion.
//       '0F' is not in the correct format for a base 2 conversion.
//       Converted '11' to 3.
//       '12' is not in the correct format for a base 2 conversion.
//       '30' is not in the correct format for a base 2 conversion.
//       Converted '101' to 5.
//       '255' is not in the correct format for a base 2 conversion.
//       'FF' is not in the correct format for a base 2 conversion.
//       Converted '10000000' to 128.
//       '80' is not in the correct format for a base 2 conversion.
//    Base 8:
//       '-1' is invalid in base 8.
//       Converted '1' to 1.
//       '08' is not in the correct format for a base 8 conversion.
//       '0F' is not in the correct format for a base 8 conversion.
//       Converted '11' to 9.
//       Converted '12' to 10.
//       Converted '30' to 24.
//       Converted '101' to 65.
//       Converted '255' to 173.
//       'FF' is not in the correct format for a base 8 conversion.
//       '10000000' is outside the range of the Byte type.
//       '80' is not in the correct format for a base 8 conversion.
//    Base 10:
//       '-1' is outside the range of the Byte type.
//       Converted '1' to 1.
//       Converted '08' to 8.
//       '0F' is not in the correct format for a base 10 conversion.
//       Converted '11' to 11.
//       Converted '12' to 12.
//       Converted '30' to 30.
//       Converted '101' to 101.
//       Converted '255' to 255.
//       'FF' is not in the correct format for a base 10 conversion.
//       '10000000' is outside the range of the Byte type.
//       Converted '80' to 80.
//    Base 16:
//       '-1' is invalid in base 16.
//       Converted '1' to 1.
//       Converted '08' to 8.
//       Converted '0F' to 15.
//       Converted '11' to 17.
//       Converted '12' to 18.
//       Converted '30' to 48.
//       '101' is outside the range of the Byte type.
//       '255' is outside the range of the Byte type.
//       Converted 'FF' to 255.
//       '10000000' is outside the range of the Byte type.
//       Converted '80' to 128.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToByte 重载
System 命名空间


Convert ..::.ToChar 方法

Convert
.
.
::
.
ToChar 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 Unicode 字符。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToChar 方法 (Boolean)

Convert
.
.
::
.
ToChar 方法 (Boolean)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Boolean _
) As Char
public static char ToChar(
    bool value
)
public:
static wchar_t ToChar(
    bool value
)
static member ToChar :
        value:bool -> char

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System Char
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Byte)

Convert
.
.
::
.
ToChar 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为其等效的 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Byte _
) As Char
public static char ToChar(
    byte value
)
public:
static wchar_t ToChar(
    unsigned char value
)
static member ToChar :
        value:byte -> char

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System Char
一个等于 value 的 Unicode 字符。

下面的示例将一个数组的无符号字节转换为 Char 值。

Dim bytes() As Byte = {Byte.MinValue, 40, 80, 120, 180, Byte.MaxValue}
Dim result As Char
For Each number As Byte In bytes
   result = Convert.ToChar(number)
   Console.WriteLine("{0} converts to '{1}'.", number, result)
Next
' The example displays the following output:
'       0 converts to ' '.
'       40 converts to '('.
'       80 converts to 'P'.
'       120 converts to 'x'.
'       180 converts to '''.
'       255 converts to ' '.

byte[] bytes = {Byte.MinValue, 40, 80, 120, 180, Byte.MaxValue};
char result;
foreach (byte number in bytes)
{
   result = Convert.ToChar(number);
   Console.WriteLine("{0} converts to '{1}'.", number, result);
}
// The example displays the following output:
//       0 converts to ' '.
//       40 converts to '('.
//       80 converts to 'P'.
//       120 converts to 'x'.
//       180 converts to '''.
//       255 converts to ' '.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Char)

Convert
.
.
::
.
ToChar 方法 (Char)
Convert 类

返回指定的 Unicode 字符值；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Char _
) As Char
public static char ToChar(
    char value
)
public:
static wchar_t ToChar(
    wchar_t value
)
static member ToChar :
        value:char -> char

参数

value
类型： System Char
要返回的 Unicode 字符。

返回值

类型： System Char
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (DateTime)

Convert
.
.
::
.
ToChar 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As DateTime _
) As Char
public static char ToChar(
    DateTime value
)
public:
static wchar_t ToChar(
    DateTime value
)
static member ToChar :
        value:DateTime -> char

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System Char
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Decimal)

Convert
.
.
::
.
ToChar 方法 (Decimal)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Decimal _
) As Char
public static char ToChar(
    decimal value
)
public:
static wchar_t ToChar(
    Decimal value
)
static member ToChar :
        value:decimal -> char

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System Char
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

下面的示例尝试将 Decimal 转换为 Char，并在失败时引发 InvalidCastException。

Public Sub ConvertCharDecimal(ByVal charVal As Char)
    Dim decimalVal As [Decimal] = 0

    ' Char to decimal conversion is not supported and will always
    ' throw an InvalidCastException.
    Try
        decimalVal = System.Convert.ToDecimal(charVal)
    Catch exception As System.InvalidCastException
        System.Console.WriteLine( _
             "Char-to-Decimal conversion is not supported " + _
             "by the .NET Framework.")
    End Try

    'Decimal to char conversion is also not supported.
    Try
        charVal = System.Convert.ToChar(decimalVal)
    Catch exception As System.InvalidCastException
        System.Console.WriteLine( _
            "Decimal-to-Char conversion is not supported " + _
            "by the .NET Framework.")
    End Try
End Sub

        public void ConvertCharDecimal(char charVal) {
            Decimal decimalVal = 0;

            // Char to decimal conversion is not supported and will always
            // throw an InvalidCastException.
            try {
                decimalVal = System.Convert.ToDecimal(charVal);
            }
            catch (System.InvalidCastException) {
                System.Console.WriteLine(
                    "Char-to-Decimal conversion is not supported " +
                    "by the .NET Framework.");
            }

            //Decimal to char conversion is also not supported.
            try {
                charVal = System.Convert.ToChar(decimalVal);
            }
            catch (System.InvalidCastException) {
                System.Console.WriteLine(
                    "Decimal-to-Char conversion is not supported " +
                    "by the .NET Framework.");
            }
        }

public:
   void ConvertCharDecimal( Char charVal )
   {
      Decimal decimalVal = 0;

      // Char to decimal conversion is not supported and will always
      // throw an InvalidCastException.
      try
      {
         decimalVal = System::Convert::ToDecimal( charVal );
      }
      catch ( System::InvalidCastException^ )
      {
         System::Console::WriteLine(
            "Char-to-Decimal conversion is not supported by the .NET Framework." );
      }

      //Decimal to char conversion is also not supported.
      try
      {
         charVal = System::Convert::ToChar( decimalVal );
      }
      catch ( System::InvalidCastException^ )
      {
         System::Console::WriteLine(
            "Decimal-to-Char conversion is not supported by the .NET Framework." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Double)

Convert
.
.
::
.
ToChar 方法 (Double)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Double _
) As Char
public static char ToChar(
    double value
)
public:
static wchar_t ToChar(
    double value
)
static member ToChar :
        value:float -> char

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System Char
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Int16)

Convert
.
.
::
.
ToChar 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为其等效的 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Short _
) As Char
public static char ToChar(
    short value
)
public:
static wchar_t ToChar(
    short value
)
static member ToChar :
        value:int16 -> char

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System Char
一个等于 value 的 Unicode 字符。
异常 | 条件
OverflowException | value 小于 Char..::.MinValue。

下面的示例将一个数组的带符号 16 位整数转换为 Char 值。

Dim numbers() As Short = { Int16.MinValue, 0, 40, 160, 255, 1028, _
                           2011, Int16.MaxValue }
Dim result As Char
For Each number As Short In numbers
   Try
      result = Convert.ToChar(number)
      Console.WriteLine("{0} converts to '{1}'.", number, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Char data type.", _
                        number)
   End Try
Next
' The example displays the following output:
'       -32768 is outside the range of the Char data type.
'       0 converts to ' '.
'       40 converts to '('.
'       160 converts to ' '.
'       255 converts to ' '.
'       1028 converts to '?'.
'       2011 converts to '?'.
'       32767 converts to '?'.

short[] numbers = { Int16.MinValue, 0, 40, 160, 255, 1028,
                    2011, Int16.MaxValue };
char result;
foreach (short number in numbers)
{
   try {
      result = Convert.ToChar(number);
      Console.WriteLine("{0} converts to '{1}'.", number, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Char data type.",
                        number);
   }
}
// The example displays the following output:
//       -32768 is outside the range of the Char data type.
//       0 converts to ' '.
//       40 converts to '('.
//       160 converts to ' '.
//       255 converts to ' '.
//       1028 converts to '?'.
//       2011 converts to '?'.
//       32767 converts to '?'.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Int32)

Convert
.
.
::
.
ToChar 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为其等效的 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Integer _
) As Char
public static char ToChar(
    int value
)
public:
static wchar_t ToChar(
    int value
)
static member ToChar :
        value:int -> char

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System Char
一个等于 value 的 Unicode 字符。
异常 | 条件
OverflowException | value 小于 Char..::.MinValue 或大于 Char..::.MaxValue。

下面的示例将一个数组的带符号整数转换为 Char 值。

   Dim numbers() As Integer = { -1, 0, 40, 160, 255, 1028, _
                              2011, 30001, 207154, Int32.MaxValue }
   Dim result As Char
   For Each number As Integer In numbers
      Try
         result = Convert.ToChar(number)
         Console.WriteLine("{0} converts to '{1}'.", number, result)
      Catch e As OverflowException
         Console.WriteLine("{0} is outside the range of the Char data type.", _
                           number)
      End Try
   Next
End Sub
'       -1 is outside the range of the Char data type.
'       0 converts to ' '.
'       40 converts to '('.
'       160 converts to ' '.
'       255 converts to ' '.
'       1028 converts to '?'.
'       2011 converts to '?'.
'       30001 converts to '?'.
'       207154 is outside the range of the Char data type.
'       2147483647 is outside the range of the Char data type.

   int[] numbers = { -1, 0, 40, 160, 255, 1028,
                     2011, 30001, 207154, Int32.MaxValue };
   char result;
   foreach (int number in numbers)
   {
      try {
         result = Convert.ToChar(number);
         Console.WriteLine("{0} converts to '{1}'.", number, result);
      }
      catch (OverflowException) {
         Console.WriteLine("{0} is outside the range of the Char data type.",
                           number);
      }
   }
}
//       -1 is outside the range of the Char data type.
//       0 converts to ' '.
//       40 converts to '('.
//       160 converts to ' '.
//       255 converts to ' '.
//       1028 converts to '?'.
//       2011 converts to '?'.
//       30001 converts to '?'.
//       207154 is outside the range of the Char data type.
//       2147483647 is outside the range of the Char data type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Int64)

Convert
.
.
::
.
ToChar 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为其等效的 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Long _
) As Char
public static char ToChar(
    long value
)
public:
static wchar_t ToChar(
    long long value
)
static member ToChar :
        value:int64 -> char

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System Char
一个等于 value 的 Unicode 字符。
异常 | 条件
OverflowException | value 小于 Char..::.MinValue 或大于 Char..::.MaxValue。

下面的示例尝试将长整型转换为 Char，并在失败时引发 OverflowException。

Public Sub ConvertLongChar(ByVal longVal As Long)

    Dim charVal As Char = "a"c

    Try
        charVal = System.Convert.ToChar(longVal)
        System.Console.WriteLine("{0} as a char is {1}", _
                                  longVal, charVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in Long-to-Char conversion.")
    End Try

    ' A conversion from Char to Long cannot overflow.
    longVal = System.Convert.ToInt64(charVal)
    System.Console.WriteLine("{0} as a Long is {1}", _
                              charVal, longVal)
End Sub

        public void ConvertLongChar(long longVal) {

            char	charVal = 'a';

            try {
                charVal = System.Convert.ToChar(longVal);
                System.Console.WriteLine("{0} as a char is {1}",
                    longVal, charVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Overflow in long-to-char conversion.");
            }

            // A conversion from Char to long cannot overflow.
            longVal = System.Convert.ToInt64(charVal);
            System.Console.WriteLine("{0} as an Int64 is {1}",
                charVal, longVal);
        }

public:
   void ConvertLongChar( Int64 longVal )
   {
      Char charVal = 'a';

      try
      {
         charVal = System::Convert::ToChar( longVal );
         System::Console::WriteLine( " {0} as a char is {1}",
         longVal, charVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine( "Overflow in long-to-char conversion." );
      }

      // A conversion from Char to long cannot overflow.
      longVal = System::Convert::ToInt64( charVal );
      System::Console::WriteLine( " {0} as an Int64 is {1}",
         charVal, longVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Object)

Convert
.
.
::
.
ToChar 方法 (Object)
Convert 类

将指定对象的值转换为 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Object _
) As Char
public static char ToChar(
    Object value
)
public:
static wchar_t ToChar(
    Object^ value
)
static member ToChar :
        value:Object -> char

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。

返回值

类型： System Char
与 value 等效的 Unicode 字符，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 Char..::.MinValue。
异常 | 条件
ArgumentNullException | value 是空字符串。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持 value 转换为 Char。
OverflowException | value 小于 Char..::.MinValue 或大于 Char..::.MaxValue。

调用 value 的基础类型的 IConvertible..::.ToChar 方法的结果。

下面的示例将对象数组中的每个元素转换为 Char 值。

Dim values() As Object = { "r"c, "s", "word", CByte(83), 77, 109324, _
                           335812911, #3/10/2009#, CUInt(1934), _
                           CSByte(-17), 169.34, 175.6d, Nothing }
Dim result As Char

For Each value As Object In values
   Try
      result = Convert.ToChar(value)
      Console.WriteLine("The {0} value {1} converts to {2}.", _
                        value.GetType().Name, value, result)
   Catch e As FormatException
      Console.WriteLine(e.Message)
   Catch e As InvalidCastException
      Console.WriteLine("Conversion of the {0} value {1} to a Char is not supported.", _
                        value.GetType().Name, value)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Char data type.", _
                        value.GetType().Name, value)
   Catch e As NullReferenceException
      Console.WriteLine("Cannot convert a null reference to a Char.")
   End Try
Next
' The example displays the following output:
'       The Char value r converts to r.
'       The String value s converts to s.
'       String must be exactly one character long.
'       The Byte value 83 converts to S.
'       The Int32 value 77 converts to M.
'       The Int32 value 109324 is outside the range of the Char data type.
'       The Int32 value 335812911 is outside the range of the Char data type.
'       Conversion of the DateTime value 3/10/2009 12:00:00 AM to a Char is not supported.
'       The UInt32 value 1934 converts to ?.
'       The SByte value -17 is outside the range of the Char data type.
'       Conversion of the Double value 169.34 to a Char is not supported.
'       Conversion of the Decimal value 175.6 to a Char is not supported.
'       Cannot convert a null reference to a Char.

object[] values = { 'r', "s", "word", (byte) 83, 77, 109324, 335812911,
                    new DateTime(2009, 3, 10), (uint) 1934,
                    (sbyte) -17, 169.34, 175.6m, null };
char result;

foreach (object value in values)
{
   try {
      result = Convert.ToChar(value);
      Console.WriteLine("The {0} value {1} converts to {2}.",
                        value.GetType().Name, value, result);
   }
   catch (FormatException e) {
      Console.WriteLine(e.Message);
   }
   catch (InvalidCastException) {
      Console.WriteLine("Conversion of the {0} value {1} to a Char is not supported.",
                        value.GetType().Name, value);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Char data type.",
                        value.GetType().Name, value);
   }
   catch (NullReferenceException) {
      Console.WriteLine("Cannot convert a null reference to a Char.");
   }
}
// The example displays the following output:
//       The Char value r converts to r.
//       The String value s converts to s.
//       String must be exactly one character long.
//       The Byte value 83 converts to S.
//       The Int32 value 77 converts to M.
//       The Int32 value 109324 is outside the range of the Char data type.
//       The Int32 value 335812911 is outside the range of the Char data type.
//       Conversion of the DateTime value 3/10/2009 12:00:00 AM to a Char is not supported.
//       The UInt32 value 1934 converts to ?.
//       The SByte value -17 is outside the range of the Char data type.
//       Conversion of the Double value 169.34 to a Char is not supported.
//       Conversion of the Decimal value 175.6 to a Char is not supported.
//       Cannot convert a null reference to a Char.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (SByte)

Convert
.
.
::
.
ToChar 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为其等效的 Unicode 字符。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToChar ( _
    value As SByte _
) As Char
[CLSCompliantAttribute(false)]
public static char ToChar(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static wchar_t ToChar(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToChar :
        value:sbyte -> char

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System Char
一个等于 value 的 Unicode 字符。
异常 | 条件
OverflowException | value 小于 Char..::.MinValue。

下面的示例将一个数组的带符号字节转换为 Char 值。

Dim numbers() As SByte = { SByte.MinValue, -1, 40, 80, 120, SByte.MaxValue }
Dim result As Char
For Each number As SByte In numbers
   Try
      result = Convert.ToChar(number)
      Console.WriteLine("{0} converts to '{1}'.", number, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Char data type.", _
                        number)
   End Try
Next
' The example displays the following output:
'       -128 is outside the range of the Char data type.
'       -1 is outside the range of the Char data type.
'       40 converts to '('.
'       80 converts to 'P'.
'       120 converts to 'x'.
'       127 converts to ' '.

sbyte[] numbers = { SByte.MinValue, -1, 40, 80, 120, SByte.MaxValue };
char result;
foreach (sbyte number in numbers)
{
   try {
      result = Convert.ToChar(number);
      Console.WriteLine("{0} converts to '{1}'.", number, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Char data type.",
                        number);
   }
}
// The example displays the following output:
//       -128 is outside the range of the Char data type.
//       -1 is outside the range of the Char data type.
//       40 converts to '('.
//       80 converts to 'P'.
//       120 converts to 'x'.
//       127 converts to ' '.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Single)

Convert
.
.
::
.
ToChar 方法 (Single)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Single _
) As Char
public static char ToChar(
    float value
)
public:
static wchar_t ToChar(
    float value
)
static member ToChar :
        value:float32 -> char

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System Char
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (String)

Convert
.
.
::
.
ToChar 方法 (String)
Convert 类

将指定字符串的第一个字符转换为 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As String _
) As Char
public static char ToChar(
    string value
)
public:
static wchar_t ToChar(
    String^ value
)
static member ToChar :
        value:string -> char

参数

value
类型： System String
长度为 1 的字符串。

返回值

类型： System Char
与 value 中第一个且仅有的字符等效的 Unicode 字符。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | value 的长度不是 1。

value 必须为包含单个字符的字符串。

如果您希望在转换失败时不处理异常，则可以转而调用 Char..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Char..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例将字符串数组中的每个元素转换为 Char 值。

Dim nullString As String = Nothing
Dim strings() As String = { "A", "This", vbTab, nullString }
Dim result As Char
For Each strng As String In strings
   Try
      result = Convert.ToChar(strng)
      Console.WriteLine("'{0}' converts to '{1}'.", strng, result)
   Catch e As FormatException
      Console.WriteLine("'{0}' is not in the correct format for conversion to a Char.", _
                        strng)
   Catch e As ArgumentNullException
      Console.WriteLine("A null string cannot be converted to a Char.")
   End Try
Next
' The example displays the following output:
'       'A' converts to 'A'.
'       'This' is not in the correct format for conversion to a Char.
'       '       ' converts to ' '.
'       A null string cannot be converted to a Char.

string nullString = null;
string[] strings = { "A", "This",  '\u0007'.ToString(), nullString };
char result;
foreach (string strng in strings)
{
   try {
      result = Convert.ToChar(strng);
      Console.WriteLine("'{0}' converts to '{1}'.", strng, result);
   }
   catch (FormatException)
   {
      Console.WriteLine("'{0}' is not in the correct format for conversion to a Char.",
                        strng);
   }
   catch (ArgumentNullException) {
      Console.WriteLine("A null string cannot be converted to a Char.");
   }
}
// The example displays the following output:
//       'A' converts to 'A'.
//       'This' is not in the correct format for conversion to a Char.
//       '       ' converts to ' '.
//       A null string cannot be converted to a Char.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (UInt16)

Convert
.
.
::
.
ToChar 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为其等效的 Unicode 字符。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToChar ( _
    value As UShort _
) As Char
[CLSCompliantAttribute(false)]
public static char ToChar(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static wchar_t ToChar(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToChar :
        value:uint16 -> char

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System Char
一个等于 value 的 Unicode 字符。

下面的示例将 16 位无符号整数数组中的每个元素转换为 Char 值。

Dim numbers() As UShort = { UInt16.MinValue, 40, 160, 255, 1028, _
                            2011, UInt16.MaxValue }
Dim result As Char
For Each number As UShort In numbers
   result = Convert.ToChar(number)
   Console.WriteLine("{0} converts to '{1}'.", number, result)
Next
' The example displays the following output:
'       0 converts to ' '.
'       40 converts to '('.
'       160 converts to ' '.
'       255 converts to ' '.
'       1028 converts to '?'.
'       2011 converts to '?'.
'       65535 converts to '?'.

ushort[] numbers = { UInt16.MinValue, 40, 160, 255, 1028,
                     2011, UInt16.MaxValue };
char result;
foreach (ushort number in numbers)
{
   result = Convert.ToChar(number);
   Console.WriteLine("{0} converts to '{1}'.", number, result);
}
// The example displays the following output:
//       0 converts to ' '.
//       40 converts to '('.
//       160 converts to ' '.
//       255 converts to ' '.
//       1028 converts to '?'.
//       2011 converts to '?'.
//       65535 converts to '?'.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (UInt32)

Convert
.
.
::
.
ToChar 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为其等效的 Unicode 字符。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToChar ( _
    value As UInteger _
) As Char
[CLSCompliantAttribute(false)]
public static char ToChar(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static wchar_t ToChar(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToChar :
        value:uint32 -> char

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System Char
一个等于 value 的 Unicode 字符。
异常 | 条件
OverflowException | value 大于 Char..::.MaxValue。

下面的示例将无符号整数数组中的每个元素转换为 Char 值。

Dim numbers() As UInteger = { UInt32.MinValue, 40, 160, 255, 1028, _
                              2011, 30001, 207154, Int32.MaxValue }
Dim result As Char
For Each number As UInteger In numbers
   Try
      result = Convert.ToChar(number)
      Console.WriteLine("{0} converts to '{1}'.", number, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Char data type.", _
                        number)
   End Try
Next
' The example displays the following output:
'       0 converts to ' '.
'       40 converts to '('.
'       160 converts to ' '.
'       255 converts to ' '.
'       1028 converts to '?'.
'       2011 converts to '?'.
'       30001 converts to '?'.
'       207154 is outside the range of the Char data type.
'       2147483647 is outside the range of the Char data type.

uint[] numbers = { UInt32.MinValue, 40, 160, 255, 1028,
                   2011, 30001, 207154, Int32.MaxValue };
char result;
foreach (uint number in numbers)
{
   try {
      result = Convert.ToChar(number);
      Console.WriteLine("{0} converts to '{1}'.", number, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Char data type.",
                        number);
   }
}
// The example displays the following output:
//       0 converts to ' '.
//       40 converts to '('.
//       160 converts to ' '.
//       255 converts to ' '.
//       1028 converts to '?'.
//       2011 converts to '?'.
//       30001 converts to '?'.
//       207154 is outside the range of the Char data type.
//       2147483647 is outside the range of the Char data type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (UInt64)

Convert
.
.
::
.
ToChar 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为其等效的 Unicode 字符。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToChar ( _
    value As ULong _
) As Char
[CLSCompliantAttribute(false)]
public static char ToChar(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static wchar_t ToChar(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToChar :
        value:uint64 -> char

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System Char
一个等于 value 的 Unicode 字符。
异常 | 条件
OverflowException | value 大于 Char..::.MaxValue。

下面的示例将无符号长整数数组中的每个元素转换为 Char 值。

Dim numbers() As ULong = { UInt64.MinValue, 40, 160, 255, 1028, _
                              2011, 30001, 207154, Int64.MaxValue }
Dim result As Char
For Each number As ULong In numbers
   Try
      result = Convert.ToChar(number)
      Console.WriteLine("{0} converts to '{1}'.", number, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Char data type.", _
                        number)
   End Try
Next
' The example displays the following output:
'       0 converts to ' '.
'       40 converts to '('.
'       160 converts to ' '.
'       255 converts to ' '.
'       1028 converts to '?'.
'       2011 converts to '?'.
'       30001 converts to '?'.
'       207154 is outside the range of the Char data type.
'       9223372036854775807 is outside the range of the Char data type.

ulong[] numbers = { UInt64.MinValue, 40, 160, 255, 1028,
                    2011, 30001, 207154, Int64.MaxValue };
char result;
foreach (ulong number in numbers)
{
   try {
      result = Convert.ToChar(number);
      Console.WriteLine("{0} converts to '{1}'.", number, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Char data type.",
                        number);
   }
}
// The example displays the following output:
//       0 converts to ' '.
//       40 converts to '('.
//       160 converts to ' '.
//       255 converts to ' '.
//       1028 converts to '?'.
//       2011 converts to '?'.
//       30001 converts to '?'.
//       207154 is outside the range of the Char data type.
//       9223372036854775807 is outside the range of the Char data type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToChar 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息将指定对象的值转换为其等效的 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As Object, _
    provider As IFormatProvider _
) As Char
public static char ToChar(
    Object value,
    IFormatProvider provider
)
public:
static wchar_t ToChar(
    Object^ value,
    IFormatProvider^ provider
)
static member ToChar :
        value:Object *
        provider:IFormatProvider -> char

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Char
与 value 等效的 Unicode 字符，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 Char..::.MinValue。
异常 | 条件
ArgumentNullException | value 是空字符串。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持 value 转换为 Char。
OverflowException | value 小于 Char..::.MinValue 或大于 Char..::.MaxValue。

返回值是调用 value 的基础类型的 IConvertible..::.ToChar 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToChar 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Unicode 值是 Double 值数组的平均值的字符。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToChar 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Unicode 值是 Double 值数组的平均值的字符。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToChar 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Unicode 值是 Double 值数组的平均值的字符。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToChar 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Unicode 值是 Double 值数组的平均值的字符。

Imports System.Collections

Module IConvertibleProviderDemo

    ' Define the types of averaging available in the class
    ' implementing IConvertible.
    Enum AverageType as Short
        None = 0
        GeometricMean = 1
        ArithmeticMean = 2
        Median = 3
    End Enum

    ' Pass an instance of this class to methods that require an
    ' IFormatProvider. The class instance determines the type of
    ' average to calculate.
    Public Class AverageInfo
        Implements IFormatProvider

        Protected  AvgType      As AverageType

        ' Specify the type of averaging in the constructor.
        Public Sub New( avgType As AverageType )
            Me.AvgType = avgType
        End Sub

        ' This method returns a reference to the containing object
        ' if an object of AverageInfo type is requested.
        Public Function GetFormat( argType As Type ) As Object _
            Implements IFormatProvider.GetFormat

            If argType Is GetType( AverageInfo ) Then
                Return Me
            Else
                Return Nothing
            End If
        End Function

        ' Use this property to set or get the type of averaging.
        Public Property TypeOfAverage( ) As AverageType
            Get
                Return Me.AvgType
            End Get
            Set( ByVal value as AverageType )
                Me.AvgType = value
            End Set
        End Property
    End Class

    ' This class encapsulates an array of Double values and implements
    ' the IConvertible interface. Most of the IConvertible methods
    ' return an average of the array elements in one of three types:
    ' arithmetic mean, geometric mean, or median.
    Public Class DataSet
        Implements IConvertible

        Protected data              As ArrayList
        Protected defaultProvider   As AverageInfo

        ' Construct the object and add an initial list of values.
        ' Create a default format provider.
        Public Sub New( ParamArray values( ) As Double )
            data = New ArrayList( values )
            defaultProvider = New AverageInfo( _
                AverageType.ArithmeticMean )
        End Sub

        ' Add additional values with this method.
        Public Function Add( value As Double ) As Integer
            data.Add( value )
            Return data.Count
        End Function

        ' Get, set, and add values with this indexer property.
        Default Public Property Item(index As Integer) As Double
            Get
                If index >= 0 AndAlso index < data.Count Then
                    Return System.Convert.ToDouble( data( index ) )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.get] Index out of range." )
                End If
            End Get
            Set
                If index >= 0 AndAlso index < data.Count Then
                    data( index ) = value

                ElseIf index = data.Count Then
                    data.Add( value )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.set] Index out of range." )
                End If
            End Set
        End Property

        ' This property returns the number of elements in the object.
        Public ReadOnly Property Count( ) As Integer
            Get
                Return data.Count
            End Get
        End Property

        ' This method calculates the average of the object's elements.
        Protected Function Average( ByVal avgType As AverageType ) As Double

            Dim SumProd As Double
            Dim Index   As Integer

            If data.Count = 0 Then Return 0.0

            Select Case avgType

                Case AverageType.GeometricMean

                    SumProd = 1.0
                    For Index = 0 To data.Count - 1
                        SumProd *= data( Index )
                    Next Index

                    ' This calculation will not fail with negative
                    ' elements.
                    Return Math.Sign( SumProd ) * Math.Pow( _
                        Math.Abs( SumProd ), 1.0 / data.Count )

                Case AverageType.ArithmeticMean

                    SumProd = 0.0
                    For Index = 0 To data.Count - 1
                        SumProd += data( Index )
                    Next Index

                    Return SumProd / data.Count

                Case AverageType.Median

                    If data.Count Mod 2 = 0 Then
                        Return ( data( data.Count \ 2 ) + _
                            data( data.Count \ 2 - 1 ) ) / 2.0
                    Else
                        Return data( data.Count \ 2 )
                    End If
            End Select
        End Function

        ' Get the AverageInfo object from the caller's format
        ' provider, or use the local default.
        Protected Function GetAverageInfo( _
            provider As IFormatProvider ) As AverageInfo

            Dim avgInfo As AverageInfo = Nothing

            If Not provider Is Nothing Then
                avgInfo = provider.GetFormat( GetType( AverageInfo ) )
            End If

            Return IIf( avgInfo Is Nothing, defaultProvider, avgInfo )

        End Function

        ' Calculate the average and limit the range.
        Protected Function CalcNLimitAverage( min As Double, _
            max As Double, provider as IFormatProvider ) As Double

            ' Get the format provider and calculate the average.
            Dim avgInfo As AverageInfo = GetAverageInfo( provider )
            Dim avg As Double = Average( avgInfo.TypeOfAverage )

            ' Limit the range, based on the minimum and maximum values
            ' for the type.
            Return IIf( avg > max, max, IIf( avg < min, min, avg ) )

        End Function

        ' The following elements are required by IConvertible.

        ' None of these conversion functions throw exceptions. When
        ' the data is out of range for the type, the appropriate
        ' MinValue or MaxValue is used.
        Public Function GetTypeCode( ) As TypeCode _
            Implements IConvertible.GetTypeCode
            Return TypeCode.Object
        End Function

        Function ToBoolean( ByVal provider As IFormatProvider ) As _
            Boolean Implements IConvertible.ToBoolean

            ' ToBoolean is false if the dataset is empty.
            If data.Count <= 0 Then
                Return False

            ' For median averaging, ToBoolean is true if any
            ' non-discarded elements are nonzero.
            ElseIf AverageType.Median = _
                GetAverageInfo( provider ).TypeOfAverage Then

                If data.Count Mod 2 = 0 Then
                    Return ( data( data.Count \ 2 ) <> 0.0 Or _
                        data( data.Count \ 2 - 1 ) <> 0.0 )
                Else
                    Return data( data.Count \ 2 ) <> 0.0
                End If

            ' For arithmetic or geometric mean averaging, ToBoolean is
            ' true if any element of the dataset is nonzero.
            Else
                Dim Index As Integer
                For Index = 0 To data.Count - 1
                    If data( Index ) <> 0.0 Then Return True
                Next Index
                Return False
            End If
        End Function

        Function ToByte( ByVal provider As IFormatProvider ) As Byte _
            Implements IConvertible.ToByte
            Return Convert.ToByte( CalcNLimitAverage( _
                Byte.MinValue, Byte.MaxValue, provider ) )
        End Function

        Function ToChar( ByVal provider As IFormatProvider ) As Char _
            Implements IConvertible.ToChar
            Return Convert.ToChar( Convert.ToUInt16( _
                CalcNLimitAverage( 0.0, &HFFFF, provider ) ) )
        End Function

        ' Convert to DateTime by adding the calculated average as
        ' seconds to the current date and time. A valid DateTime is
        ' always returned.
        Function ToDateTime( ByVal provider As IFormatProvider ) As _
            DateTime Implements IConvertible.ToDateTime
            Dim seconds As Double = Average( _
                GetAverageInfo( provider ).TypeOfAverage )
            Try
                Return DateTime.Now.AddSeconds( seconds )
            Catch ex As ArgumentOutOfRangeException
                Return IIf( seconds < 0.0, DateTime.MinValue, _
                    DateTime.MaxValue )
            End Try
        End Function

        Function ToDecimal( ByVal provider As IFormatProvider ) As _
            Decimal Implements IConvertible.ToDecimal

            ' The Double conversion rounds Decimal.MinValue and
            ' Decimal.MaxValue to invalid Decimal values, so the
            ' following limits must be used.
            Return Convert.ToDecimal( CalcNLimitAverage( _
                -79228162514264330000000000000.0, _
                79228162514264330000000000000.0, provider ) )
        End Function

        Function ToDouble( ByVal provider As IFormatProvider) As _
            Double Implements IConvertible.ToDouble
            Return Average( GetAverageInfo( provider ).TypeOfAverage )
        End Function

        Function ToInt16( ByVal provider As IFormatProvider ) As _
            Short Implements IConvertible.ToInt16
            Return Convert.ToInt16( CalcNLimitAverage( _
                Int16.MinValue, Int16.MaxValue, provider ) )
        End Function

        Function ToInt32( ByVal provider As IFormatProvider ) As _
            Integer Implements IConvertible.ToInt32
            Return Convert.ToInt32( CalcNLimitAverage( _
                Int32.MinValue, Int32.MaxValue, provider ) )
        End Function

        Function ToInt64( ByVal provider As IFormatProvider ) As Long _
            Implements IConvertible.ToInt64

            ' The Double conversion rounds Int64.MinValue and
            ' Int64.MaxValue to invalid Long values, so the following
            ' limits must be used.
            Return Convert.ToInt64( CalcNLimitAverage( _
                -9223372036854775000, 9223372036854775000, provider ) )
        End Function

        Function ToSByte( ByVal provider As IFormatProvider ) As _
            SByte Implements IConvertible.ToSByte

            ' SByte.MinValue and SByte.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToSByte( CalcNLimitAverage( _
                -128, 127, provider ) )
        End Function

        Function ToSingle( ByVal provider As IFormatProvider ) As _
            Single Implements IConvertible.ToSingle
            Return Convert.ToSingle( CalcNLimitAverage( _
                Single.MinValue, Single.MaxValue, provider ) )
        End Function

        Function ToUInt16( ByVal provider As IFormatProvider ) As _
            UInt16 Implements IConvertible.ToUInt16

            ' UInt16.MinValue and UInt16.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt16( CalcNLimitAverage( _
                0, &HFFFF, provider ) )
        End Function

        Function ToUInt32( ByVal provider As IFormatProvider ) As _
            UInt32 Implements IConvertible.ToUInt32

            ' UInt32.MinValue and UInt32.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt32( CalcNLimitAverage( _
                0, 4294967295, provider ) )
        End Function

        Function ToUInt64( ByVal provider As IFormatProvider ) As _
            UInt64 Implements IConvertible.ToUInt64

            ' UInt64.MinValue and UInt64.MaxValue are not defined in
            ' Visual Basic. The Double conversion would have rounded
            ' UInt64.MaxValue, so the following limit must be used.
            Return Convert.ToUInt64( CalcNLimitAverage( _
                0, 18446744073709550000.0, provider ) )
        End Function

        Function ToType( ByVal conversionType As Type, _
            ByVal provider As IFormatProvider) As Object _
            Implements IConvertible.ToType
            Return Convert.ChangeType( Average( GetAverageInfo( _
                provider ).TypeOfAverage ), conversionType )
        End Function

        Overloads Function ToString( ByVal provider As IFormatProvider _
            ) As String Implements IConvertible.ToString
            Dim avgType as AverageType = _
                GetAverageInfo( provider ).TypeOfAverage
            Return String.Format( "( {0}: {1:G10} )", avgType, _
                Average( avgType ) )
        End Function
    End Class

    ' Display a DataSet with three different format providers.
    Sub DisplayDataSet( ds As DataSet )

        Dim fmt    As String      = "{0,-12}{1,20}{2,20}{3,20}"
        Dim median As AverageInfo = New AverageInfo( AverageType.Median )
        Dim geMean As AverageInfo = _
            New AverageInfo( AverageType.GeometricMean )
        Dim iX     As Integer

        ' Display the dataset elements.
        If ds.Count > 0 Then
            Console.Write( vbCrLf & "DataSet: [{0}", ds( 0 ) )
            For iX = 1 To ds.Count - 1
                Console.Write( ", {0}", ds( iX ) )
            Next iX
            Console.WriteLine( "]" & vbCrLf )
        End If

        Console.WriteLine( fmt, "Convert.", "Default", _
            "Geometric Mean", "Median" )
        Console.WriteLine( fmt, "--------", "-------", _
            "--------------", "------" )
        Console.WriteLine( fmt, "ToBoolean", _
            Convert.ToBoolean( ds, Nothing ), _
            Convert.ToBoolean( ds, geMean ), _
            Convert.ToBoolean( ds, median ) )
        Console.WriteLine( fmt, "ToByte", _
            Convert.ToByte( ds, Nothing ), _
            Convert.ToByte( ds, geMean ), _
            Convert.ToByte( ds, median ) )
        Console.WriteLine( fmt, "ToChar", _
            Convert.ToChar( ds, Nothing ), _
            Convert.ToChar( ds, geMean ), _
            Convert.ToChar( ds, median ) )
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" & _
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", _
            "ToDateTime", Convert.ToDateTime( ds, Nothing ), _
            Convert.ToDateTime( ds, geMean ), _
            Convert.ToDateTime( ds, median ) )
        Console.WriteLine( fmt, "ToDecimal", _
            Convert.ToDecimal( ds, Nothing ), _
            Convert.ToDecimal( ds, geMean ), _
            Convert.ToDecimal( ds, median ) )
        Console.WriteLine( fmt, "ToDouble", _
            Convert.ToDouble( ds, Nothing ), _
            Convert.ToDouble( ds, geMean ), _
            Convert.ToDouble( ds, median ) )
        Console.WriteLine( fmt, "ToInt16", _
            Convert.ToInt16( ds, Nothing ), _
            Convert.ToInt16( ds, geMean ), _
            Convert.ToInt16( ds, median ) )
        Console.WriteLine( fmt, "ToInt32", _
            Convert.ToInt32( ds, Nothing ), _
            Convert.ToInt32( ds, geMean ), _
            Convert.ToInt32( ds, median ) )
        Console.WriteLine( fmt, "ToInt64", _
            Convert.ToInt64( ds, Nothing ), _
            Convert.ToInt64( ds, geMean ), _
            Convert.ToInt64( ds, median ) )
        Console.WriteLine( fmt, "ToSByte", _
            Convert.ToSByte( ds, Nothing ), _
            Convert.ToSByte( ds, geMean ), _
            Convert.ToSByte( ds, median ) )
        Console.WriteLine( fmt, "ToSingle", _
            Convert.ToSingle( ds, Nothing ), _
            Convert.ToSingle( ds, geMean ), _
            Convert.ToSingle( ds, median ) )
        Console.WriteLine( fmt, "ToUInt16", _
            Convert.ToUInt16( ds, Nothing ), _
            Convert.ToUInt16( ds, geMean ), _
            Convert.ToUInt16( ds, median ) )
        Console.WriteLine( fmt, "ToUInt32", _
            Convert.ToUInt32( ds, Nothing ), _
            Convert.ToUInt32( ds, geMean ), _
            Convert.ToUInt32( ds, median ) )
        Console.WriteLine( fmt, "ToUInt64", _
            Convert.ToUInt64( ds, Nothing ), _
            Convert.ToUInt64( ds, geMean ), _
            Convert.ToUInt64( ds, median ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Convert.To<Type>( Object, " & _
            "IFormatProvider ) methods " & vbCrLf & "generates " & _
            "the following output. The example displays the " & _
            "values " & vbCrLf & "returned by the methods, " & _
            "using several IFormatProvider objects." & vbCrLf )

        Dim ds1 As New DataSet( 10.5, 22.2, 45.9, 88.7, 156.05, 297.6 )
        DisplayDataSet( ds1 )

        Dim ds2 As New DataSet( _
            359999.95, 425000, 499999.5, 775000, 1695000 )
        DisplayDataSet( ds2 )
    End Sub
End Module

' This example of the Convert.To<Type>( Object, IFormatProvider ) methods
' generates the following output. The example displays the values
' returned by the methods, using several IFormatProvider objects.
'
' DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       103                  59                  67
' ToChar                         g                   ;                   C
' ToDateTime   2003-05-13 14:52:53 2003-05-13 14:52:09 2003-05-13 14:52:17
' ToDecimal       103.491666666667    59.4332135445164                67.3
' ToDouble        103.491666666667    59.4332135445164                67.3
' ToInt16                      103                  59                  67
' ToInt32                      103                  59                  67
' ToInt64                      103                  59                  67
' ToSByte                      103                  59                  67
' ToSingle                103.4917            59.43321                67.3
' ToUInt16                     103                  59                  67
' ToUInt32                     103                  59                  67
' ToUInt64                     103                  59                  67
'
' DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       255                 255                 255
' ToChar                         ?                   ?                   ?
' ToDateTime   2003-05-22 07:27:49 2003-05-20 22:17:27 2003-05-19 09:44:29
' ToDecimal              750999.89    631577.237188435            499999.5
' ToDouble               750999.89    631577.237188435            499999.5
' ToInt16                    32767               32767               32767
' ToInt32                   751000              631577              500000
' ToInt64                   751000              631577              500000
' ToSByte                      127                 127                 127
' ToSingle                750999.9            631577.3            499999.5
' ToUInt16                   65535               65535               65535
' ToUInt32                  751000              631577              500000
' ToUInt64                  751000              631577              500000

using System;
using System.Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
public enum AverageType : short
{
    None = 0,
    GeometricMean = 1,
    ArithmeticMean = 2,
    Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
public class AverageInfo : IFormatProvider
{
    protected AverageType AvgType;

    // Specify the type of averaging in the constructor.
    public AverageInfo( AverageType avgType )
    {
        this.AvgType = avgType;
    }

    // This method returns a reference to the containing object
    // if an object of AverageInfo type is requested.
    public object GetFormat( Type argType )
    {
        if ( argType == typeof( AverageInfo ) )
            return this;
        else
            return null;
    }

    // Use this property to set or get the type of averaging.
    public AverageType TypeOfAverage
    {
        get { return this.AvgType; }
        set { this.AvgType = value; }
    }
}

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
public class DataSet : IConvertible
{
    protected ArrayList     data;
    protected AverageInfo   defaultProvider;

    // Construct the object and add an initial list of values.
    // Create a default format provider.
    public DataSet( params double[ ] values )
    {
        data = new ArrayList( values );
        defaultProvider =
            new AverageInfo( AverageType.ArithmeticMean );
    }

    // Add additional values with this method.
    public int Add( double value )
    {
        data.Add( value );
        return data.Count;
    }

    // Get, set, and add values with this indexer property.
    public double this[ int index ]
    {
        get
        {
            if( index >= 0 && index < data.Count )
                return (double)data[ index ];
            else
                throw new InvalidOperationException(
                    "[DataSet.get] Index out of range." );
        }
        set
        {
            if( index >= 0 && index < data.Count )
                data[ index ] = value;

            else if( index == data.Count )
                data.Add( value );
            else
                throw new InvalidOperationException(
                    "[DataSet.set] Index out of range." );
        }
    }

    // This property returns the number of elements in the object.
    public int Count
    {
        get { return data.Count; }
    }

    // This method calculates the average of the object's elements.
    protected double Average( AverageType avgType )
    {
        double  SumProd;

        if( data.Count == 0 )
            return 0.0;

        switch( avgType )
        {
            case AverageType.GeometricMean:

                SumProd = 1.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd *= (double)data[ Index ];

                // This calculation will not fail with negative
                // elements.
                return Math.Sign( SumProd ) * Math.Pow(
                    Math.Abs( SumProd ), 1.0 / data.Count );

            case AverageType.ArithmeticMean:

                SumProd = 0.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd += (double)data[ Index ];

                return SumProd / data.Count;

            case AverageType.Median:

                if( data.Count % 2 == 0 )
                    return ( (double)data[ data.Count / 2 ] +
                        (double)data[ data.Count / 2 - 1 ] ) / 2.0;
                else
                    return (double)data[ data.Count / 2 ];

            default:
                return 0.0;
        }
    }

    // Get the AverageInfo object from the caller's format provider,
    // or use the local default.
    protected AverageInfo GetAverageInfo( IFormatProvider provider )
    {
        AverageInfo avgInfo = null;

        if( provider != null )
            avgInfo = (AverageInfo)provider.GetFormat(
                typeof( AverageInfo ) );

        if ( avgInfo == null )
            return defaultProvider;
        else
            return avgInfo;
    }

    // Calculate the average and limit the range.
    protected double CalcNLimitAverage( double min, double max,
        IFormatProvider provider )
    {
        // Get the format provider and calculate the average.
        AverageInfo avgInfo = GetAverageInfo( provider );
        double avg = Average( avgInfo.TypeOfAverage );

        // Limit the range, based on the minimum and maximum values
        // for the type.
        return avg > max ? max : avg < min ? min : avg;

    }

    // The following elements are required by IConvertible.

    // None of these conversion functions throw exceptions. When
    // the data is out of range for the type, the appropriate
    // MinValue or MaxValue is used.
    public TypeCode GetTypeCode( )
    {
        return TypeCode.Object;
    }

    public bool ToBoolean( IFormatProvider provider )
    {
        // ToBoolean is false if the dataset is empty.
        if( data.Count <= 0 )
            return false;

        // For median averaging, ToBoolean is true if any
        // non-discarded elements are nonzero.
        else if( AverageType.Median ==
            GetAverageInfo( provider ).TypeOfAverage )
        {
            if (data.Count % 2 == 0 )
                return ( (double)data[ data.Count / 2 ] != 0.0 ||
                    (double)data[ data.Count / 2 - 1 ] != 0.0 );
            else
                return (double)data[ data.Count / 2 ] != 0.0;
        }

        // For arithmetic or geometric mean averaging, ToBoolean is
        // true if any element of the dataset is nonzero.
        else
        {
            for( int Index = 0; Index < data.Count; Index++ )
                if( (double)data[ Index ] != 0.0 )
                    return true;
            return false;
        }
    }

    public byte ToByte( IFormatProvider provider )
    {
        return Convert.ToByte( CalcNLimitAverage(
            Byte.MinValue, Byte.MaxValue, provider ) );
    }

    public char ToChar( IFormatProvider provider )
    {
        return Convert.ToChar( Convert.ToUInt16( CalcNLimitAverage(
            Char.MinValue, Char.MaxValue, provider ) ) );
    }

    // Convert to DateTime by adding the calculated average as
    // seconds to the current date and time. A valid DateTime is
    // always returned.
    public DateTime ToDateTime( IFormatProvider provider )
    {
        double seconds =
            Average( GetAverageInfo( provider ).TypeOfAverage );
        try
        {
            return DateTime.Now.AddSeconds( seconds );
        }
        catch( ArgumentOutOfRangeException )
        {
            return seconds < 0.0 ? DateTime.MinValue : DateTime.MaxValue;
        }
    }

    public decimal ToDecimal( IFormatProvider provider )
    {
        // The Double conversion rounds Decimal.MinValue and
        // Decimal.MaxValue to invalid Decimal values, so the
        // following limits must be used.
        return Convert.ToDecimal( CalcNLimitAverage(
            -79228162514264330000000000000.0,
            79228162514264330000000000000.0, provider ) );
    }

    public double ToDouble( IFormatProvider provider )
    {
        return Average( GetAverageInfo(provider).TypeOfAverage );
    }

    public short ToInt16( IFormatProvider provider )
    {
        return Convert.ToInt16( CalcNLimitAverage(
            Int16.MinValue, Int16.MaxValue, provider ) );
    }

    public int ToInt32( IFormatProvider provider )
    {
        return Convert.ToInt32( CalcNLimitAverage(
            Int32.MinValue, Int32.MaxValue, provider ) );
    }

    public long ToInt64( IFormatProvider provider )
    {
        // The Double conversion rounds Int64.MinValue and
        // Int64.MaxValue to invalid Int64 values, so the following
        // limits must be used.
        return Convert.ToInt64( CalcNLimitAverage(
            -9223372036854775000, 9223372036854775000, provider ) );
    }

    public SByte ToSByte( IFormatProvider provider )
    {
        return Convert.ToSByte( CalcNLimitAverage(
            SByte.MinValue, SByte.MaxValue, provider ) );
    }

    public float ToSingle( IFormatProvider provider )
    {
        return Convert.ToSingle( CalcNLimitAverage(
            Single.MinValue, Single.MaxValue, provider ) );
    }

    public UInt16 ToUInt16( IFormatProvider provider )
    {
        return Convert.ToUInt16( CalcNLimitAverage(
            UInt16.MinValue, UInt16.MaxValue, provider ) );
    }

    public UInt32 ToUInt32( IFormatProvider provider )
    {
        return Convert.ToUInt32( CalcNLimitAverage(
            UInt32.MinValue, UInt32.MaxValue, provider ) );
    }

    public UInt64 ToUInt64( IFormatProvider provider )
    {
        // The Double conversion rounds UInt64.MaxValue to an invalid
        // UInt64 value, so the following limit must be used.
        return Convert.ToUInt64( CalcNLimitAverage(
            0, 18446744073709550000.0, provider ) );
    }

    public object ToType( Type conversionType,
        IFormatProvider provider )
    {
        return Convert.ChangeType( Average(
            GetAverageInfo( provider ).TypeOfAverage ),
            conversionType );
    }

    public string ToString( IFormatProvider provider )
    {
        AverageType avgType = GetAverageInfo( provider ).TypeOfAverage;
        return String.Format( "( {0}: {1:G10} )", avgType,
            Average( avgType ) );
    }
}

class IConvertibleProviderDemo
{
    // Display a DataSet with three different format providers.
    public static void DisplayDataSet( DataSet ds )
    {
        string      fmt    = "{0,-12}{1,20}{2,20}{3,20}";
        AverageInfo median = new AverageInfo( AverageType.Median );
        AverageInfo geMean =
            new AverageInfo( AverageType.GeometricMean );

         // Display the dataset elements.
        if( ds.Count > 0 )
        {
            Console.Write( "\nDataSet: [{0}", ds[ 0 ] );
            for( int iX = 1; iX < ds.Count; iX++ )
                Console.Write( ", {0}", ds[ iX ] );
            Console.WriteLine( "]\n" );
        }

        Console.WriteLine( fmt, "Convert.", "Default",
            "Geometric Mean", "Median");
        Console.WriteLine( fmt, "--------", "-------",
            "--------------", "------");
        Console.WriteLine( fmt, "ToBoolean",
            Convert.ToBoolean( ds, null ),
            Convert.ToBoolean( ds, geMean ),
            Convert.ToBoolean( ds, median ) );
        Console.WriteLine( fmt, "ToByte",
            Convert.ToByte( ds, null ),
            Convert.ToByte( ds, geMean ),
            Convert.ToByte( ds, median ) );
        Console.WriteLine( fmt, "ToChar",
            Convert.ToChar( ds, null ),
            Convert.ToChar( ds, geMean ),
            Convert.ToChar( ds, median ) );
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" +
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}",
            "ToDateTime", Convert.ToDateTime( ds, null ),
            Convert.ToDateTime( ds, geMean ),
            Convert.ToDateTime( ds, median ) );
        Console.WriteLine( fmt, "ToDecimal",
            Convert.ToDecimal( ds, null ),
            Convert.ToDecimal( ds, geMean ),
            Convert.ToDecimal( ds, median ) );
        Console.WriteLine( fmt, "ToDouble",
            Convert.ToDouble( ds, null ),
            Convert.ToDouble( ds, geMean ),
            Convert.ToDouble( ds, median ) );
        Console.WriteLine( fmt, "ToInt16",
            Convert.ToInt16( ds, null ),
            Convert.ToInt16( ds, geMean ),
            Convert.ToInt16( ds, median ) );
        Console.WriteLine( fmt, "ToInt32",
            Convert.ToInt32( ds, null ),
            Convert.ToInt32( ds, geMean ),
            Convert.ToInt32( ds, median ) );
        Console.WriteLine( fmt, "ToInt64",
            Convert.ToInt64( ds, null ),
            Convert.ToInt64( ds, geMean ),
            Convert.ToInt64( ds, median ) );
        Console.WriteLine( fmt, "ToSByte",
            Convert.ToSByte( ds, null ),
            Convert.ToSByte( ds, geMean ),
            Convert.ToSByte( ds, median ) );
        Console.WriteLine( fmt, "ToSingle",
            Convert.ToSingle( ds, null ),
            Convert.ToSingle( ds, geMean ),
            Convert.ToSingle( ds, median ) );
        Console.WriteLine( fmt, "ToUInt16",
            Convert.ToUInt16( ds, null ),
            Convert.ToUInt16( ds, geMean ),
            Convert.ToUInt16( ds, median ) );
        Console.WriteLine( fmt, "ToUInt32",
            Convert.ToUInt32( ds, null ),
            Convert.ToUInt32( ds, geMean ),
            Convert.ToUInt32( ds, median ) );
        Console.WriteLine( fmt, "ToUInt64",
            Convert.ToUInt64( ds, null ),
            Convert.ToUInt64( ds, geMean ),
            Convert.ToUInt64( ds, median ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of " +
            "the Convert.To<Type>( object, IFormatProvider ) methods " +
            "\ngenerates the following output. The example " +
            "displays the values \nreturned by the methods, " +
            "using several IFormatProvider objects.\n" );

        DataSet ds1 = new DataSet(
            10.5, 22.2, 45.9, 88.7, 156.05, 297.6 );
        DisplayDataSet( ds1 );

        DataSet ds2 = new DataSet(
            359999.95, 425000, 499999.5, 775000, 1695000 );
        DisplayDataSet( ds2 );
    }
}

/*
This example of the Convert.To<Type>( object, IFormatProvider ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:04:12 2003-05-13 15:03:28 2003-05-13 15:03:35
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 07:39:08 2003-05-20 22:28:45 2003-05-19 09:55:48
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

using namespace System;
using namespace System::Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
enum class AverageType : short
{
   None = 0,
   GeometricMean = 1,
   ArithmeticMean = 2,
   Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
ref class AverageInfo: public IFormatProvider
{
protected:
   AverageType AvgType;

public:

   // Specify the type of averaging in the constructor.
   AverageInfo( AverageType avgType )
   {
      this->AvgType = avgType;
   }

   // This method returns a reference to the containing object
   // if an object of AverageInfo type is requested.
   virtual Object^ GetFormat( Type^ argType )
   {
      if ( argType == AverageInfo::typeid)
            return this;
      else
            return (Object^)0;
   }

   property AverageType TypeOfAverage
   {

      // Use this property to set or get the type of averaging.
      AverageType get()
      {
         return this->AvgType;
      }

      void set( AverageType value )
      {
         this->AvgType = value;
      }

   }

};

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
ref class DataSet: public IConvertible
{
private:
   static Object^ null = nullptr;

protected:
   ArrayList^ data;
   AverageInfo^ defaultProvider;

   // This method unboxes a boxed double.
   double UnBoxDouble( Object^ obj )
   {
      return  *static_cast<double^>(obj);
   }

public:

   // Construct the object and add an initial list of values.
   // Create a default format provider.
   DataSet( ... array<Double>^values )
   {
      data = gcnew ArrayList( (Array^)values );
      defaultProvider = gcnew AverageInfo( AverageType::ArithmeticMean );
   }

   // Add additional values with this method.
   int Add( double value )
   {
      data->Add( value );
      return data->Count;
   }

   property double Item[ int ]
   {

      // Get, set, and add values with this indexer property.
      double get( int index )
      {
         if ( index >= 0 && index < data->Count )
                  return UnBoxDouble( data[ index ] );
         else
                  throw gcnew InvalidOperationException( "[DataSet.get] Index out of range." );
      }

      void set( int index, double value )
      {
         if ( index >= 0 && index < data->Count )
                  data[ index ] = value;
         else
         if ( index == data->Count )
                  data->Add( value );
         else
                  throw gcnew InvalidOperationException( "[DataSet.set] Index out of range." );
      }

   }

   property int Count
   {

      // This property returns the number of elements in the object.
      int get()
      {
         return data->Count;
      }

   }

protected:

   // This method calculates the average of the object's elements.
   double Average( AverageType avgType )
   {
      double SumProd;
      if ( data->Count == 0 )
            return 0.0;

      switch ( avgType )
      {
         case AverageType::GeometricMean:
            SumProd = 1.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd *= UnBoxDouble( data[ Index ] );

            // This calculation will not fail with negative
            // elements.
            return Math::Sign( SumProd ) * Math::Pow( Math::Abs( SumProd ), 1.0 / data->Count );

         case AverageType::ArithmeticMean:
            SumProd = 0.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd += UnBoxDouble( data[ Index ] );
            return SumProd / data->Count;

         case AverageType::Median:
            if ( data->Count % 2 == 0 )
                        return (UnBoxDouble( data[ data->Count / 2 ] ) + UnBoxDouble( data[ data->Count / 2 - 1 ] )) / 2.0;
            else
                        return UnBoxDouble( data[ data->Count / 2 ] );

         default:
            return 0.0;
      }
   }

   // Get the AverageInfo object from the caller's format provider,
   // or use the local default.
   AverageInfo^ GetAverageInfo( IFormatProvider^ provider )
   {
      AverageInfo^ avgInfo = nullptr;
      if ( provider != nullptr )
            avgInfo = static_cast<AverageInfo^>(provider->GetFormat( AverageInfo::typeid ));

      if ( avgInfo == nullptr )
            return defaultProvider;
      else
            return avgInfo;
   }

   // Calculate the average and limit the range.
   double CalcNLimitAverage( double min, double max, IFormatProvider^ provider )
   {

      // Get the format provider and calculate the average.
      AverageInfo^ avgInfo = GetAverageInfo( provider );
      double avg = Average( avgInfo->TypeOfAverage );

      // Limit the range, based on the minimum and maximum values
      // for the type.
      return avg > max ? max : avg < min ? min : avg;
   }

public:

   // The following elements are required by IConvertible.
   // None of these conversion functions throw exceptions. When
   // the data is out of range for the type, the appropriate
   // MinValue or MaxValue is used.
   virtual TypeCode GetTypeCode()
   {
      return TypeCode::Object;
   }

   virtual bool ToBoolean( IFormatProvider^ provider )
   {

      // ToBoolean is false if the dataset is empty.
      if ( data->Count <= 0 )
            return false;
      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      else

      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      if ( AverageType::Median == GetAverageInfo( provider )->TypeOfAverage )
      {
         if ( data->Count % 2 == 0 )
                  return (UnBoxDouble( data[ data->Count / 2 ] ) != 0.0 || UnBoxDouble( data[ data->Count / 2 - 1 ] ) != 0.0);
         else
                  return UnBoxDouble( data[ data->Count / 2 ] ) != 0.0;
      }
      // For arithmetic or geometric mean averaging, ToBoolean is
      // true if any element of the dataset is nonzero.
      else
      {
         for ( int Index = 0; Index < data->Count; Index++ )
            if ( UnBoxDouble( data[ Index ] ) != 0.0 )
                        return true;
         return false;
      }
   }

   virtual Byte ToByte( IFormatProvider^ provider )
   {
      return Convert::ToByte( CalcNLimitAverage( Byte::MinValue, Byte::MaxValue, provider ) );
   }

   virtual Char ToChar( IFormatProvider^ provider )
   {
      return Convert::ToChar( Convert::ToUInt16( CalcNLimitAverage( Char::MinValue, Char::MaxValue, provider ) ) );
   }

   // Convert to DateTime by adding the calculated average as
   // seconds to the current date and time. A valid DateTime is
   // always returned.
   virtual DateTime ToDateTime( IFormatProvider^ provider )
   {
      double seconds = Average( GetAverageInfo( provider )->TypeOfAverage );
      try
      {
         return DateTime::Now.AddSeconds( seconds );
      }
      catch ( ArgumentOutOfRangeException^ )
      {
         return seconds < 0.0 ? DateTime::MinValue : DateTime::MaxValue;
      }

   }

   virtual Decimal ToDecimal( IFormatProvider^ provider )
   {

      // The Double conversion rounds Decimal.MinValue and
      // Decimal.MaxValue to invalid Decimal values, so the
      // following limits must be used.
      return Convert::ToDecimal( CalcNLimitAverage(  -79228162514264330000000000000.0, 79228162514264330000000000000.0, provider ) );
   }

   virtual double ToDouble( IFormatProvider^ provider )
   {
      return Average( GetAverageInfo( provider )->TypeOfAverage );
   }

   virtual short ToInt16( IFormatProvider^ provider )
   {
      return Convert::ToInt16( CalcNLimitAverage( Int16::MinValue, Int16::MaxValue, provider ) );
   }

   virtual int ToInt32( IFormatProvider^ provider )
   {
      return Convert::ToInt32( CalcNLimitAverage( Int32::MinValue, Int32::MaxValue, provider ) );
   }

   virtual __int64 ToInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds Int64.MinValue and
      // Int64.MaxValue to invalid Int64 values, so the following
      // limits must be used.
      return Convert::ToInt64( CalcNLimitAverage(  -9223372036854775000, 9223372036854775000, provider ) );
   }

   virtual signed char ToSByte( IFormatProvider^ provider )
   {
      return Convert::ToSByte( CalcNLimitAverage( SByte::MinValue, SByte::MaxValue, provider ) );
   }

   virtual float ToSingle( IFormatProvider^ provider )
   {
      return Convert::ToSingle( CalcNLimitAverage( Single::MinValue, Single::MaxValue, provider ) );
   }

   virtual UInt16 ToUInt16( IFormatProvider^ provider )
   {
      return Convert::ToUInt16( CalcNLimitAverage( UInt16::MinValue, UInt16::MaxValue, provider ) );
   }

   virtual UInt32 ToUInt32( IFormatProvider^ provider )
   {
      return Convert::ToUInt32( CalcNLimitAverage( UInt32::MinValue, UInt32::MaxValue, provider ) );
   }

   virtual UInt64 ToUInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds UInt64.MaxValue to an invalid
      // UInt64 value, so the following limit must be used.
      return Convert::ToUInt64( CalcNLimitAverage( 0, 18446744073709550000.0, provider ) );
   }

   virtual Object^ ToType( Type^ conversionType, IFormatProvider^ provider )
   {
      return Convert::ChangeType( Average( GetAverageInfo( provider )->TypeOfAverage ), conversionType );
   }

   virtual String^ ToString( IFormatProvider^ provider )
   {
      AverageType avgType = GetAverageInfo( provider )->TypeOfAverage;
      return String::Format( "( {0}: {1:G10} )", avgType, Average( avgType ) );
   }

};

// Display a DataSet with three different format providers.
void DisplayDataSet( DataSet^ ds )
{
   IFormatProvider^ null = nullptr;
   String^ fmt = "{0,-12}{1,20}{2,20}{3,20}";
   AverageInfo^ median = gcnew AverageInfo( AverageType::Median );
   AverageInfo^ geMean = gcnew AverageInfo( AverageType::GeometricMean );

   // Display the dataset elements.
   if ( ds->Count > 0 )
   {
      Console::Write( "\nDataSet: [{0}", ds->Item[ 0 ] );
      for ( int iX = 1; iX < ds->Count; iX++ )
         Console::Write( ", {0}", ds->Item[ iX ] );
      Console::WriteLine( "]\n" );
   }

   Console::WriteLine( fmt, "Convert::", "Default", "Geometric Mean", "Median" );
   Console::WriteLine( fmt, "---------", "-------", "--------------", "------" );
   Console::WriteLine( fmt, "ToBoolean", Convert::ToBoolean( ds, null ), Convert::ToBoolean( ds, geMean ), Convert::ToBoolean( ds, median ) );
   Console::WriteLine( fmt, "ToByte", Convert::ToByte( ds, null ), Convert::ToByte( ds, geMean ), Convert::ToByte( ds, median ) );
   Console::WriteLine( fmt, "ToChar", Convert::ToChar( ds, null ), Convert::ToChar( ds, geMean ), Convert::ToChar( ds, median ) );
   Console::WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}"
   "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", "ToDateTime", Convert::ToDateTime( ds, null ), Convert::ToDateTime( ds, geMean ), Convert::ToDateTime( ds, median ) );
   Console::WriteLine( fmt, "ToDecimal", Convert::ToDecimal( ds, null ), Convert::ToDecimal( ds, geMean ), Convert::ToDecimal( ds, median ) );
   Console::WriteLine( fmt, "ToDouble", Convert::ToDouble( ds, null ), Convert::ToDouble( ds, geMean ), Convert::ToDouble( ds, median ) );
   Console::WriteLine( fmt, "ToInt16", Convert::ToInt16( ds, null ), Convert::ToInt16( ds, geMean ), Convert::ToInt16( ds, median ) );
   Console::WriteLine( fmt, "ToInt32", Convert::ToInt32( ds, null ), Convert::ToInt32( ds, geMean ), Convert::ToInt32( ds, median ) );
   Console::WriteLine( fmt, "ToInt64", Convert::ToInt64( ds, null ), Convert::ToInt64( ds, geMean ), Convert::ToInt64( ds, median ) );
   Console::WriteLine( fmt, "ToSByte", Convert::ToSByte( ds, null ), Convert::ToSByte( ds, geMean ), Convert::ToSByte( ds, median ) );
   Console::WriteLine( fmt, "ToSingle", Convert::ToSingle( ds, null ), Convert::ToSingle( ds, geMean ), Convert::ToSingle( ds, median ) );
   Console::WriteLine( fmt, "ToUInt16", Convert::ToUInt16( ds, null ), Convert::ToUInt16( ds, geMean ), Convert::ToUInt16( ds, median ) );
   Console::WriteLine( fmt, "ToUInt32", Convert::ToUInt32( ds, null ), Convert::ToUInt32( ds, geMean ), Convert::ToUInt32( ds, median ) );
   Console::WriteLine( fmt, "ToUInt64", Convert::ToUInt64( ds, null ), Convert::ToUInt64( ds, geMean ), Convert::ToUInt64( ds, median ) );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Convert::To<Type>( Object*, IFormatProvider* ) methods "
   "\ngenerates the following output. The example "
   "displays the values \nreturned by the methods, "
   "using several IFormatProvider objects.\n" );

   // To call a [ParamArray] method in C++, you cannot just
   // list the parameters, you need to build an array.
   array<Double>^dataElem = gcnew array<Double>(6);
   dataElem[ 0 ] = 10.5;
   dataElem[ 1 ] = 22.2;
   dataElem[ 2 ] = 45.9;
   dataElem[ 3 ] = 88.7;
   dataElem[ 4 ] = 156.05;
   dataElem[ 5 ] = 297.6;
   DataSet^ ds1 = gcnew DataSet( dataElem );
   DisplayDataSet( ds1 );
   dataElem = gcnew array<Double>(5);
   dataElem[ 0 ] = 359999.95;
   dataElem[ 1 ] = 425000;
   dataElem[ 2 ] = 499999.5;
   dataElem[ 3 ] = 775000;
   dataElem[ 4 ] = 1695000;
   DataSet^ ds2 = gcnew DataSet( dataElem );
   DisplayDataSet( ds2 );
}

/*
This example of the Convert::To<Type>( Object*, IFormatProvider* ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:30:23 2003-05-13 15:29:39 2003-05-13 15:29:47
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 08:05:19 2003-05-20 22:54:57 2003-05-19 10:21:59
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToChar 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToChar 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定字符串的第一个字符转换为 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToChar ( _
    value As String, _
    provider As IFormatProvider _
) As Char
public static char ToChar(
    string value,
    IFormatProvider provider
)
public:
static wchar_t ToChar(
    String^ value,
    IFormatProvider^ provider
)
static member ToChar :
        value:string *
        provider:IFormatProvider -> char

参数

value
类型： System String
长度为 1 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。忽略此参数。 一个提供区域性特定的格式设置信息的对象。忽略此参数。

返回值

类型： System Char
与 value 中第一个且仅有的字符等效的 Unicode 字符。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | value 的长度不是 1。

value 必须为包含单个字符的字符串。

如果您希望在转换失败时不处理异常，则可以转而调用 Char..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Char..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的代码示例使用 ToChar 方法，通过一个 IFormatProvider 对象（显示调用它的格式提供程序的类型）转换 Char 值的字符串表示形式。该示例显示未引用格式提供程序。 下面的代码示例使用 ToChar 方法，通过一个 IFormatProvider 对象（显示调用它的格式提供程序的类型）转换 Char 值的字符串表示形式。该示例显示未引用格式提供程序。

Imports System.Globalization

Public Class DummyProvider
    Implements IFormatProvider

    ' Normally, GetFormat returns an object of the requested type
    ' (usually itself) if it is able; otherwise, it returns Nothing.
    Public Function GetFormat( argType As Type ) As Object _
        Implements IFormatProvider.GetFormat

        ' Here, GetFormat displays the name of argType, after removing
        ' the namespace information. GetFormat always returns Nothing.
        Dim argStr  As String = argType.ToString( )
        If argStr = "" Then argStr = "Empty"
        argStr = argStr.Substring( argStr.LastIndexOf( "."c ) + 1 )

        Console.Write( "{0,-20}", argStr )
        Return Nothing

    End Function
End Class

Module ConvertNonNumericProviderDemo

    Sub Main( )

        ' Create an instance of IFormatProvider.
        Dim provider    As New DummyProvider( )
        Dim format      As String   = "{0,-17}{1,-17}{2}"

        ' Convert these values using DummyProvider.
        Dim Int32A      As String   = "-252645135"
        Dim DoubleA     As String   = "61680.3855"
        Dim DayTimeA    As String   = "2001/9/11 13:45"

        Dim BoolA       As String   = "True"
        Dim StringA     As String   = "Qwerty"
        Dim CharA       As String   = "$"

        Console.WriteLine( "This example of selected " & _
            "Convert.To<Type>( String, IFormatProvider ) " & vbCrLf & _
            "methods generates the following output. The example " & _
            "displays the " & vbCrLf & "provider type if the " & _
            "IFormatProvider is called." )
        Console.WriteLine( vbCrLf & _
            "Note: For the ToBoolean, ToString, and ToChar " & _
            "methods, the " & vbCrLf & "IFormatProvider object " & _
            "is not referenced." )

        ' The format provider is called for the following conversions.
        Console.WriteLine( )
        Console.WriteLine( format, "ToInt32", Int32A, _
            Convert.ToInt32( Int32A, provider ) )
        Console.WriteLine( format, "ToDouble", DoubleA, _
            Convert.ToDouble( DoubleA, provider ) )
        Console.WriteLine( format, "ToDateTime", DayTimeA, _
            Convert.ToDateTime( DayTimeA, provider ) )

        ' The format provider is not called for these conversions.
        Console.WriteLine( )
        Console.WriteLine( format, "ToBoolean", BoolA, _
            Convert.ToBoolean( BoolA, provider ) )
        Console.WriteLine( format, "ToString", StringA, _
            Convert.ToString( StringA, provider ) )
        Console.WriteLine( format, "ToChar", CharA, _
            Convert.ToChar( CharA, provider ) )

    End Sub
End Module

' This example of selected Convert.To<Type>( String, IFormatProvider )
' methods generates the following output. The example displays the
' provider type if the IFormatProvider is called.
'
' Note: For the ToBoolean, ToString, and ToChar methods, the
' IFormatProvider object is not referenced.
'
' NumberFormatInfo    ToInt32          -252645135       -252645135
' NumberFormatInfo    ToDouble         61680.3855       61680.3855
' DateTimeFormatInfo  ToDateTime       2001/9/11 13:45  9/11/2001 1:45:00 PM
'
' ToBoolean        True             True
' ToString         Qwerty           Qwerty
' ToChar           $                $

using System;
using System.Globalization;

public class DummyProvider : IFormatProvider
{
    // Normally, GetFormat returns an object of the requested type
    // (usually itself) if it is able; otherwise, it returns Nothing.
    public object GetFormat(Type argType)
    {
        // Here, GetFormat displays the name of argType, after removing
        // the namespace information. GetFormat always returns null.
        string argStr = argType.ToString( );
        if( argStr == "" )
            argStr = "Empty";
        argStr = argStr.Substring( argStr.LastIndexOf( '.' ) + 1 );

        Console.Write( "{0,-20}", argStr );
        return null;
    }
}

class ConvertNonNumericProviderDemo
{
    public static void Main( )
    {
        // Create an instance of IFormatProvider.
        DummyProvider provider = new DummyProvider( );
        string format   = "{0,-17}{1,-17}{2}";

        // Convert these values using DummyProvider.
        string Int32A   = "-252645135";
        string DoubleA  = "61680.3855";
        string DayTimeA = "2001/9/11 13:45";

        string BoolA    = "True";
        string StringA  = "Qwerty";
        string CharA    = "$";

        Console.WriteLine( "This example of selected " +
            "Convert.To<Type>( String, IFormatProvider ) \nmethods " +
            "generates the following output. The example displays " +
            "the \nprovider type if the IFormatProvider is called." );
        Console.WriteLine( "\nNote: For the " +
            "ToBoolean, ToString, and ToChar methods, the \n" +
            "IFormatProvider object is not referenced." );

        // The format provider is called for the following conversions.
        Console.WriteLine( );
        Console.WriteLine( format, "ToInt32", Int32A,
            Convert.ToInt32( Int32A, provider ) );
        Console.WriteLine( format, "ToDouble", DoubleA,
            Convert.ToDouble( DoubleA, provider ) );
        Console.WriteLine( format, "ToDateTime", DayTimeA,
            Convert.ToDateTime( DayTimeA, provider ) );

        // The format provider is not called for these conversions.
        Console.WriteLine( );
        Console.WriteLine( format, "ToBoolean", BoolA,
            Convert.ToBoolean( BoolA, provider ) );
        Console.WriteLine( format, "ToString", StringA,
            Convert.ToString( StringA, provider ) );
        Console.WriteLine( format, "ToChar", CharA,
            Convert.ToChar( CharA, provider ) );
    }
}

/*
This example of selected Convert.To<Type>( String, IFormatProvider )
methods generates the following output. The example displays the
provider type if the IFormatProvider is called.

Note: For the ToBoolean, ToString, and ToChar methods, the
IFormatProvider object is not referenced.

NumberFormatInfo    ToInt32          -252645135       -252645135
NumberFormatInfo    ToDouble         61680.3855       61680.3855
DateTimeFormatInfo  ToDateTime       2001/9/11 13:45  9/11/2001 1:45:00 PM

ToBoolean        True             True
ToString         Qwerty           Qwerty
ToChar           $                $
*/

using namespace System;
using namespace System::Globalization;
ref class DummyProvider: public IFormatProvider
{
public:

   // Normally, GetFormat returns an object of the requested type
   // (usually itself) if it is able; otherwise, it returns Nothing.
   virtual Object^ GetFormat( Type^ argType )
   {
      // Here, GetFormat displays the name of argType, after removing
      // the namespace information. GetFormat always returns null.
      String^ argStr = argType->ToString();
      if ( argStr->Equals( "" ) )
            argStr = "Empty";

      argStr = argStr->Substring( argStr->LastIndexOf( '.' ) + 1 );
      Console::Write( "{0,-20}", argStr );
      return (Object^)0;
   }
};

int main()
{
   // Create an instance of IFormatProvider.
   DummyProvider^ provider = gcnew DummyProvider;
   String^ format = "{0,-17}{1,-17}{2}";

   // Convert these values using DummyProvider.
   String^ Int32A = "-252645135";
   String^ DoubleA = "61680.3855";
   String^ DayTimeA = "2001/9/11 13:45";
   String^ BoolA = "True";
   String^ StringA = "Qwerty";
   String^ CharA = "$";
   Console::WriteLine( "This example of selected "
   "Convert::To<Type>( String*, IFormatProvider* ) \nmethods "
   "generates the following output. The example displays the "
   "\nprovider type if the IFormatProvider is called." );
   Console::WriteLine( "\nNote: For the "
   "ToBoolean, ToString, and ToChar methods, the \n"
   "IFormatProvider object is not referenced." );

   // The format provider is called for the following conversions.
   Console::WriteLine();
   Console::WriteLine( format, "ToInt32", Int32A, Convert::ToInt32( Int32A, provider ) );
   Console::WriteLine( format, "ToDouble", DoubleA, Convert::ToDouble( DoubleA, provider ) );
   Console::WriteLine( format, "ToDateTime", DayTimeA, Convert::ToDateTime( DayTimeA, provider ) );

   // The format provider is not called for these conversions.
   Console::WriteLine();
   Console::WriteLine( format, "ToBoolean", BoolA, Convert::ToBoolean( BoolA, provider ) );
   Console::WriteLine( format, "ToString", StringA, Convert::ToString( StringA, provider ) );
   Console::WriteLine( format, "ToChar", CharA, Convert::ToChar( CharA, provider ) );
}

/*
This example of selected Convert::To<Type>( String*, IFormatProvider* )
methods generates the following output. The example displays the
provider type if the IFormatProvider is called.

Note: For the ToBoolean, ToString, and ToChar methods, the
IFormatProvider object is not referenced.

NumberFormatInfo    ToInt32          -252645135       -252645135
NumberFormatInfo    ToDouble         61680.3855       61680.3855
DateTimeFormatInfo  ToDateTime       2001/9/11 13:45  9/11/2001 1:45:00 PM

ToBoolean        True             True
ToString         Qwerty           Qwerty
ToChar           $                $
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToChar 重载
System 命名空间


Convert ..::.ToDateTime 方法

Convert
.
.
::
.
ToDateTime 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 DateTime 值。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToDateTime 方法 (Boolean)

Convert
.
.
::
.
ToDateTime 方法 (Boolean)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Boolean _
) As DateTime
public static DateTime ToDateTime(
    bool value
)
public:
static DateTime ToDateTime(
    bool value
)
static member ToDateTime :
        value:bool -> DateTime

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
Boolean


Convert ..::.ToDateTime 方法 (Byte)

Convert
.
.
::
.
ToDateTime 方法 (Byte)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Byte _
) As DateTime
public static DateTime ToDateTime(
    byte value
)
public:
static DateTime ToDateTime(
    unsigned char value
)
static member ToDateTime :
        value:byte -> DateTime

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
Byte


Convert ..::.ToDateTime 方法 (Char)

Convert
.
.
::
.
ToDateTime 方法 (Char)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Char _
) As DateTime
public static DateTime ToDateTime(
    char value
)
public:
static DateTime ToDateTime(
    wchar_t value
)
static member ToDateTime :
        value:char -> DateTime

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
Char


Convert ..::.ToDateTime 方法 (DateTime)

Convert
.
.
::
.
ToDateTime 方法 (DateTime)
Convert 类

返回指定的 DateTime 对象；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As DateTime _
) As DateTime
public static DateTime ToDateTime(
    DateTime value
)
public:
static DateTime ToDateTime(
    DateTime value
)
static member ToDateTime :
        value:DateTime -> DateTime

参数

value
类型： System DateTime
日期和时间值。

返回值

类型： System DateTime
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间


Convert ..::.ToDateTime 方法 (Decimal)

Convert
.
.
::
.
ToDateTime 方法 (Decimal)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Decimal _
) As DateTime
public static DateTime ToDateTime(
    decimal value
)
public:
static DateTime ToDateTime(
    Decimal value
)
static member ToDateTime :
        value:decimal -> DateTime

参数

value
类型： System Decimal
要转换的数字。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间


Convert ..::.ToDateTime 方法 (Double)

Convert
.
.
::
.
ToDateTime 方法 (Double)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Double _
) As DateTime
public static DateTime ToDateTime(
    double value
)
public:
static DateTime ToDateTime(
    double value
)
static member ToDateTime :
        value:float -> DateTime

参数

value
类型： System Double
要转换的双精度浮点值。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
Double


Convert ..::.ToDateTime 方法 (Int16)

Convert
.
.
::
.
ToDateTime 方法 (Int16)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Short _
) As DateTime
public static DateTime ToDateTime(
    short value
)
public:
static DateTime ToDateTime(
    short value
)
static member ToDateTime :
        value:int16 -> DateTime

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
Int16


Convert ..::.ToDateTime 方法 (Int32)

Convert
.
.
::
.
ToDateTime 方法 (Int32)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Integer _
) As DateTime
public static DateTime ToDateTime(
    int value
)
public:
static DateTime ToDateTime(
    int value
)
static member ToDateTime :
        value:int -> DateTime

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
Int32


Convert ..::.ToDateTime 方法 (Int64)

Convert
.
.
::
.
ToDateTime 方法 (Int64)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Long _
) As DateTime
public static DateTime ToDateTime(
    long value
)
public:
static DateTime ToDateTime(
    long long value
)
static member ToDateTime :
        value:int64 -> DateTime

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
Int64


Convert ..::.ToDateTime 方法 (Object)

Convert
.
.
::
.
ToDateTime 方法 (Object)
Convert 类

将指定对象的值转换为 DateTime 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Object _
) As DateTime
public static DateTime ToDateTime(
    Object value
)
public:
static DateTime ToDateTime(
    Object^ value
)
static member ToDateTime :
        value:Object -> DateTime

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System DateTime
value 的值的日期和时间等效项，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 DateTime..::.MinValue 的日期和时间等效项。
异常 | 条件
FormatException | value不是有效的日期和时间值。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。

若要使该转换成功，value 参数的运行时类型必须为 DateTime 或 String，或者 value 必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。否则，该方法将引发 InvalidCastException。此外，如果 value 为字符串，则它必须包含当前区域性中日期和时间值的有效表现形式，否则会引发 FormatException。 若要使该转换成功，value 参数的运行时类型必须为 DateTime 或 String，或者 value 必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。否则，该方法将引发 InvalidCastException。此外，如果 value 为字符串，则它必须包含当前区域性中日期和时间值的有效表现形式，否则会引发 FormatException。 若要使该转换成功，value 参数的运行时类型必须为 DateTime 或 String，或者 value 必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。否则，该方法将引发 InvalidCastException。此外，如果 value 为字符串，则它必须包含当前区域性中日期和时间值的有效表现形式，否则会引发 FormatException。

返回值是调用 value 的基础类型的 IConvertible..::.ToDateTime 方法的结果。

下面的示例使用各种 Object 变量调用 ToDateTime(Object) 方法。

Module ConversionToDateTime
   Public Sub Main()
      ' Try converting an integer.
      Dim number As Integer = 16352
      ConvertToDateTime(number)

      ' Convert a null.
      Dim obj As Object = Nothing
      ConvertToDateTime(obj)

      ' Convert a non-date string.
      Dim nonDateString As String = "monthly"
      ConvertToDateTime(nonDateString)

      ' Try to convert various dates.
      Dim dateString As String
      dateString = "05/01/1996"
      ConvertToDateTime(dateString)
      dateString = "Tue Apr 28, 2009"
      ConvertToDateTime(dateString)
      dateString = "06 July 2008 7:32:47 AM"
      ConvertToDateTime(dateString)
      dateString = "17:32:47.003"
      ConvertToDateTime(dateString)
   End Sub

   Private Sub ConvertToDateTime(value As Object)
      Dim convertedDate As Date
      Try
         convertedDate = Convert.ToDateTime(value)
         Console.WriteLine("'{0}' converts to {1}.", value, convertedDate)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in the proper format.", value)
      Catch e As InvalidCastException
         Console.WriteLine("Conversion of the {0} '{1}' is not supported", _
                           value.GetType().Name, value)
      End Try
   End Sub
End Module
' The example displays the following output:
'       Conversion of the Int32 '16352' is not supported
'       '' converts to 1/1/0001 12:00:00 AM.
'       'monthly' is not in the proper format.
'       '05/01/1996' converts to 5/1/1996 12:00:00 AM.
'       'Tue Apr 28, 2009' converts to 4/28/2009 12:00:00 AM.
'       '06 July 2008 7:32:47 AM' converts to 7/6/2008 7:32:47 AM.
'       '17:32:47.003' converts to 5/28/2008 5:32:47 PM.

using System;

public class ConversionToDateTime
{
   public static void Main()
   {
      // Try converting an integer.
      int number = 16352;
      ConvertToDateTime(number);

      // Convert a null.
      object obj = null;
      ConvertToDateTime(obj);

      // Convert a non-date string.
      string nonDateString = "monthly";
      ConvertToDateTime(nonDateString);

      // Try to convert various date strings.
      string dateString;
      dateString = "05/01/1996";
      ConvertToDateTime(dateString);
      dateString = "Tue Apr 28, 2009";
      ConvertToDateTime(dateString);
      dateString = "06 July 2008 7:32:47 AM";
      ConvertToDateTime(dateString);
      dateString = "17:32:47.003";
      ConvertToDateTime(dateString);
   }

   private static void ConvertToDateTime(object value)
   {
      DateTime convertedDate;
      try {
         convertedDate = Convert.ToDateTime(value);
         Console.WriteLine("'{0}' converts to {1}.", value, convertedDate);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in the proper format.", value);
      }
      catch (InvalidCastException) {
         Console.WriteLine("Conversion of the {0} '{1}' is not supported",
                           value.GetType().Name, value);
      }
   }
}
// The example displays the following output:
//       Conversion of the Int32 '16352' is not supported
//       '' converts to 1/1/0001 12:00:00 AM.
//       'monthly' is not in the proper format.
//       '05/01/1996' converts to 5/1/1996 12:00:00 AM.
//       'Tue Apr 28, 2009' converts to 4/28/2009 12:00:00 AM.
//       '06 July 2008 7:32:47 AM' converts to 7/6/2008 7:32:47 AM.
//       '17:32:47.003' converts to 5/28/2008 5:32:47 PM.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间


Convert ..::.ToDateTime 方法 (SByte)

Convert
.
.
::
.
ToDateTime 方法 (SByte)
Convert 类

调用此方法始终引发 InvalidCastException。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDateTime ( _
    value As SByte _
) As DateTime
[CLSCompliantAttribute(false)]
public static DateTime ToDateTime(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static DateTime ToDateTime(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToDateTime :
        value:sbyte -> DateTime

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
Byte


Convert ..::.ToDateTime 方法 (Single)

Convert
.
.
::
.
ToDateTime 方法 (Single)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Single _
) As DateTime
public static DateTime ToDateTime(
    float value
)
public:
static DateTime ToDateTime(
    float value
)
static member ToDateTime :
        value:float32 -> DateTime

参数

value
类型： System Single
要转换的单精度浮点值。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
Single


Convert ..::.ToDateTime 方法 (String)

Convert
.
.
::
.
ToDateTime 方法 (String)
Convert 类

将日期和时间的指定字符串表示形式转换为等效的日期和时间值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As String _
) As DateTime
public static DateTime ToDateTime(
    string value
)
public:
static DateTime ToDateTime(
    String^ value
)
static member ToDateTime :
        value:string -> DateTime

参数

value
类型： System String
日期和时间的字符串表示形式。

返回值

类型： System DateTime
value 的值的日期和时间等效项，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 DateTime..::.MinValue 的日期和时间等效项。
异常 | 条件
FormatException | value 不是格式正确的日期和时间字符串。

如果 value 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值是使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息对 value 调用 DateTime..::.Parse 方法的结果。value 参数中所包含的日期和时间必须以 DateTimeFormatInfo 主题中描述的格式之一来表示。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 DateTime..::.MinValue。 如果 value 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值是使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息对 value 调用 DateTime..::.Parse 方法的结果。value 参数中所包含的日期和时间必须以 DateTimeFormatInfo 主题中描述的格式之一来表示。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 DateTime..::.MinValue。 如果 value 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值是使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息对 value 调用 DateTime..::.Parse 方法的结果。value 参数中所包含的日期和时间必须以 DateTimeFormatInfo 主题中描述的格式之一来表示。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 DateTime..::.MinValue。

此方法尝试完全分析 value 并避免引发 FormatException。它用当前日期填充缺少的年月日信息。如果 value 只包含日期而没有时间，则此方法假定时间为午夜。value中的所有前导、内部或尾部空白字符均会被忽略。 此方法尝试完全分析 value 并避免引发 FormatException。它用当前日期填充缺少的年月日信息。如果 value 只包含日期而没有时间，则此方法假定时间为午夜。value中的所有前导、内部或尾部空白字符均会被忽略。 此方法尝试完全分析 value 并避免引发 FormatException。它用当前日期填充缺少的年月日信息。如果 value 只包含日期而没有时间，则此方法假定时间为午夜。value中的所有前导、内部或尾部空白字符均会被忽略。 此方法尝试完全分析 value 并避免引发 FormatException。它用当前日期填充缺少的年月日信息。如果 value 只包含日期而没有时间，则此方法假定时间为午夜。value中的所有前导、内部或尾部空白字符均会被忽略。

如果您希望在转换失败时不处理异常，则可以转而调用 DateTime..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 DateTime..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例使用 ToDateTime 方法将日期和时间的各种字符串表示形式转换为 DateTime 值。

Module ConversionToDateTime
   Public Sub Main()
      Dim dateString As String = Nothing

      ' Convert a null string.
      ConvertToDateTime(dateString)

      ' Convert an empty string.
      dateString = String.Empty
      ConvertToDateTime(dateString)

      ' Convert a non-date string.
      dateString = "not a date"
      ConvertToDateTime(dateString)

      ' Try to convert various date strings.
      dateString = "05/01/1996"
      ConvertToDateTime(dateString)
      dateString = "Tue Apr 28, 2009"
      ConvertToDateTime(dateString)
      dateString = "Wed Apr 28, 2009"
      ConvertToDateTime(dateString)
      dateString = "06 July 2008 7:32:47 AM"
      ConvertToDateTime(dateString)
      dateString = "17:32:47.003"
      ConvertToDateTime(dateString)
      ' Convert a string returned by DateTime.ToString("R").
      dateString = "Sat, 10 May 2008 14:32:17 GMT"
      ConvertToDateTime(dateString)
      ' Convert a string returned by DateTime.ToString("o")
      dateString = "2009-05-01T07:54:59.9843750-04:00"
      ConvertToDateTime(dateString)
   End Sub

   Private Sub ConvertToDateTime(value As String)
      Dim convertedDate As Date
      Try
         convertedDate = Convert.ToDateTime(value)
         Console.WriteLine("'{0}' converts to {1}.", value, convertedDate)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in the proper format.", value)
      End Try
   End Sub
End Module
' The example displays the following output:
'    '' converts to 1/1/0001 12:00:00 AM.
'    '' is not in the proper format.
'    'not a date' is not in the proper format.
'    '05/01/1996' converts to 5/1/1996 12:00:00 AM.
'    'Tue Apr 28, 2009' converts to 4/28/2009 12:00:00 AM.
'    'Wed Apr 28, 2009' is not in the proper format.
'    '06 July 2008 7:32:47 AM' converts to 7/6/2008 7:32:47 AM.
'    '17:32:47.003' converts to 5/30/2008 5:32:47 PM.
'    'Sat, 10 May 2008 14:32:17 GMT' converts to 5/10/2008 7:32:17 AM.
'    '2009-05-01T07:54:59.9843750-04:00' converts to 5/1/2009 4:54:59 AM.

using System;

public class ConversionToDateTime
{
   public static void Main()
   {
      string dateString = null;

      // Convert a null string.
      ConvertToDateTime(dateString);

      // Convert an empty string.
      dateString = String.Empty;
      ConvertToDateTime(dateString);

      // Convert a non-date string.
      dateString = "not a date";
      ConvertToDateTime(dateString);

      // Try to convert various date strings.
      dateString = "05/01/1996";
      ConvertToDateTime(dateString);
      dateString = "Tue Apr 28, 2009";
      ConvertToDateTime(dateString);
      dateString = "Wed Apr 28, 2009";
      ConvertToDateTime(dateString);
      dateString = "06 July 2008 7:32:47 AM";
      ConvertToDateTime(dateString);
      dateString = "17:32:47.003";
      ConvertToDateTime(dateString);
      // Convert a string returned by DateTime.ToString("R").
      dateString = "Sat, 10 May 2008 14:32:17 GMT";
      ConvertToDateTime(dateString);
      // Convert a string returned by DateTime.ToString("o").
      dateString = "2009-05-01T07:54:59.9843750-04:00";
      ConvertToDateTime(dateString);
   }

   private static void ConvertToDateTime(string value)
   {
      DateTime convertedDate;
      try {
         convertedDate = Convert.ToDateTime(value);
         Console.WriteLine("'{0}' converts to {1} {2} time.",
                           value, convertedDate,
                           convertedDate.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in the proper format.", value);
      }
   }
}
// The example displays the following output:
//    '' converts to 1/1/0001 12:00:00 AM Unspecified time.
//    '' is not in the proper format.
//    'not a date' is not in the proper format.
//    '05/01/1996' converts to 5/1/1996 12:00:00 AM Unspecified time.
//    'Tue Apr 28, 2009' converts to 4/28/2009 12:00:00 AM Unspecified time.
//    'Wed Apr 28, 2009' is not in the proper format.
//    '06 July 2008 7:32:47 AM' converts to 7/6/2008 7:32:47 AM Unspecified time.
//    '17:32:47.003' converts to 5/30/2008 5:32:47 PM Unspecified time.
//    'Sat, 10 May 2008 14:32:17 GMT' converts to 5/10/2008 7:32:17 AM Local time.
//    '2009-05-01T07:54:59.9843750-04:00' converts to 5/1/2009 4:54:59 AM Local time.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
CurrentCulture

其他资源

分析日期和时间字符串


Convert ..::.ToDateTime 方法 (UInt16)

Convert
.
.
::
.
ToDateTime 方法 (UInt16)
Convert 类

调用此方法始终引发 InvalidCastException。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDateTime ( _
    value As UShort _
) As DateTime
[CLSCompliantAttribute(false)]
public static DateTime ToDateTime(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static DateTime ToDateTime(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToDateTime :
        value:uint16 -> DateTime

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
UInt16


Convert ..::.ToDateTime 方法 (UInt32)

Convert
.
.
::
.
ToDateTime 方法 (UInt32)
Convert 类

调用此方法总是会引发 InvalidCastException。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDateTime ( _
    value As UInteger _
) As DateTime
[CLSCompliantAttribute(false)]
public static DateTime ToDateTime(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static DateTime ToDateTime(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToDateTime :
        value:uint32 -> DateTime

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
UInt32


Convert ..::.ToDateTime 方法 (UInt64)

Convert
.
.
::
.
ToDateTime 方法 (UInt64)
Convert 类

调用此方法总是会引发 InvalidCastException。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDateTime ( _
    value As ULong _
) As DateTime
[CLSCompliantAttribute(false)]
public static DateTime ToDateTime(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static DateTime ToDateTime(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToDateTime :
        value:uint64 -> DateTime

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间
UInt64


Convert ..::.ToDateTime 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToDateTime 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定对象的值转换为 DateTime 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As Object, _
    provider As IFormatProvider _
) As DateTime
public static DateTime ToDateTime(
    Object value,
    IFormatProvider provider
)
public:
static DateTime ToDateTime(
    Object^ value,
    IFormatProvider^ provider
)
static member ToDateTime :
        value:Object *
        provider:IFormatProvider -> DateTime

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System DateTime
value 的值的日期和时间等效项，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 DateTime..::.MinValue 的日期和时间等效项。
异常 | 条件
FormatException | value不是有效的日期和时间值。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。

返回值是调用 value 的基础类型的 IConvertible..::.ToDateTime 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示日期的 String，则 provider 可提供有关用于表示该日期的表示法的区域性特定信息。如果 value 的运行时类型为 String 或者 value 是用户定义的类型，该类型的 IConvertible..::.ToDateTime 实现使用 provider，则 provider 涉及 value 的转换。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示日期的 String，则 provider 可提供有关用于表示该日期的表示法的区域性特定信息。如果 value 的运行时类型为 String 或者 value 是用户定义的类型，该类型的 IConvertible..::.ToDateTime 实现使用 provider，则 provider 涉及 value 的转换。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示日期的 String，则 provider 可提供有关用于表示该日期的表示法的区域性特定信息。如果 value 的运行时类型为 String 或者 value 是用户定义的类型，该类型的 IConvertible..::.ToDateTime 实现使用 provider，则 provider 涉及 value 的转换。

下面的示例定义自定义格式提供程序 CustomProvider，其 GetFormat 方法向调用它的控制台输出消息，然后返回名称作为参数传递到类构造函数的区域性的 DateTimeFormatInfo 对象。每个 CustomProvider 对象都用于将对象数组中的元素转换为日期和时间值。输出表明只有当 value 参数的类型为 String 时才在转换中使用 CustomProvider 对象。 下面的示例定义自定义格式提供程序 CustomProvider，其 GetFormat 方法向调用它的控制台输出消息，然后返回名称作为参数传递到类构造函数的区域性的 DateTimeFormatInfo 对象。每个 CustomProvider 对象都用于将对象数组中的元素转换为日期和时间值。输出表明只有当 value 参数的类型为 String 时才在转换中使用 CustomProvider 对象。 下面的示例定义自定义格式提供程序 CustomProvider，其 GetFormat 方法向调用它的控制台输出消息，然后返回名称作为参数传递到类构造函数的区域性的 DateTimeFormatInfo 对象。每个 CustomProvider 对象都用于将对象数组中的元素转换为日期和时间值。输出表明只有当 value 参数的类型为 String 时才在转换中使用 CustomProvider 对象。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "hu-HU", "pt-PT" }
      Dim objects() As Object = { 12, 17.2, False, #1/1/2010#, "today", _
                                  New System.Collections.ArrayList(), "c"c, _
                                  "05/10/2009 6:13:18 PM", "September 8, 1899" }

      For Each cultureName As String In cultureNames
         Console.WriteLine("{0} culture:", cultureName)
         Dim provider As New CustomProvider(cultureName)
         For Each obj As Object In objects
            Try
               Dim dateValue As Date = Convert.ToDateTime(obj, provider)
               Console.WriteLine("{0} --> {1}", obj, _
                                 dateValue.ToString(New CultureInfo(cultureName)))
            Catch e As FormatException
               Console.WriteLine("{0} --> Bad Format", obj)
            Catch e As InvalidCastException
               Console.WriteLine("{0} --> Conversion Not Supported", obj)
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module

Public Class CustomProvider : Implements IFormatProvider
   Private cultureName As String

   Public Sub New(cultureName As String)
      Me.cultureName = cultureName
   End Sub

   Public Function GetFormat(formatType As Type) As Object _
          Implements IFormatProvider.GetFormat
      If formatType Is GetType(DateTimeFormatInfo) Then
         Console.Write("(CustomProvider retrieved.) ")
         Return New CultureInfo(cultureName).GetFormat(formatType)
      Else
         Return Nothing
      End If
   End Function
End Class
' The example displays the following output:
'    en-US culture:
'    12 --> Conversion Not Supported
'    17.2 --> Conversion Not Supported
'    False --> Conversion Not Supported
'    1/1/2010 12:00:00 AM --> 1/1/2010 12:00:00 AM
'    (CustomProvider retrieved.) today --> Bad Format
'    System.Collections.ArrayList --> Conversion Not Supported
'    c --> Conversion Not Supported
'    (CustomProvider retrieved.) 05/10/2009 6:13:18 PM --> 5/10/2009 6:13:18 PM
'    (CustomProvider retrieved.) September 8, 1899 --> 9/8/1899 12:00:00 AM
'
'    hu-HU culture:
'    12 --> Conversion Not Supported
'    17.2 --> Conversion Not Supported
'    False --> Conversion Not Supported
'    1/1/2010 12:00:00 AM --> 2010. 01. 01. 0:00:00
'    (CustomProvider retrieved.) today --> Bad Format
'    System.Collections.ArrayList --> Conversion Not Supported
'    c --> Conversion Not Supported
'    (CustomProvider retrieved.) 05/10/2009 6:13:18 PM --> 2009. 05. 10. 18:13:18
'    (CustomProvider retrieved.) September 8, 1899 --> 1899. 09. 08. 0:00:00
'
'    pt-PT culture:
'    12 --> Conversion Not Supported
'    17.2 --> Conversion Not Supported
'    False --> Conversion Not Supported
'    1/1/2010 12:00:00 AM --> 01-01-2010 0:00:00
'    (CustomProvider retrieved.) today --> Bad Format
'    System.Collections.ArrayList --> Conversion Not Supported
'    c --> Conversion Not Supported
'    (CustomProvider retrieved.) 05/10/2009 6:13:18 PM --> 05-10-2009 18:13:18
'    (CustomProvider retrieved.) September 8, 1899 --> 08-09-1899 0:00:00

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "hu-HU", "pt-PT" };
      object[] objects = { 12, 17.2, false, new DateTime(2010, 1, 1), "today",
                           new System.Collections.ArrayList(), 'c',
                           "05/10/2009 6:13:18 PM", "September 8, 1899" };

      foreach (string cultureName in cultureNames)
      {
         Console.WriteLine("{0} culture:", cultureName);
         CustomProvider provider = new CustomProvider(cultureName);
         foreach (object obj in objects)
         {
            try {
               DateTime dateValue = Convert.ToDateTime(obj, provider);
               Console.WriteLine("{0} --> {1}", obj,
                                 dateValue.ToString(new CultureInfo(cultureName)));
            }
            catch (FormatException) {
               Console.WriteLine("{0} --> Bad Format", obj);
            }
            catch (InvalidCastException) {
               Console.WriteLine("{0} --> Conversion Not Supported", obj);
            }
         }
         Console.WriteLine();
      }
   }
}

public class CustomProvider : IFormatProvider
{
   private string cultureName;

   public CustomProvider(string cultureName)
   {
      this.cultureName = cultureName;
   }

   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(DateTimeFormatInfo))
      {
         Console.Write("(CustomProvider retrieved.) ");
         return new CultureInfo(cultureName).GetFormat(formatType);
      }
      else
      {
         return null;
      }
   }
}
// The example displays the following output:
//    en-US culture:
//    12 --> Conversion Not Supported
//    17.2 --> Conversion Not Supported
//    False --> Conversion Not Supported
//    1/1/2010 12:00:00 AM --> 1/1/2010 12:00:00 AM
//    (CustomProvider retrieved.) today --> Bad Format
//    System.Collections.ArrayList --> Conversion Not Supported
//    c --> Conversion Not Supported
//    (CustomProvider retrieved.) 05/10/2009 6:13:18 PM --> 5/10/2009 6:13:18 PM
//    (CustomProvider retrieved.) September 8, 1899 --> 9/8/1899 12:00:00 AM
//
//    hu-HU culture:
//    12 --> Conversion Not Supported
//    17.2 --> Conversion Not Supported
//    False --> Conversion Not Supported
//    1/1/2010 12:00:00 AM --> 2010. 01. 01. 0:00:00
//    (CustomProvider retrieved.) today --> Bad Format
//    System.Collections.ArrayList --> Conversion Not Supported
//    c --> Conversion Not Supported
//    (CustomProvider retrieved.) 05/10/2009 6:13:18 PM --> 2009. 05. 10. 18:13:18
//    (CustomProvider retrieved.) September 8, 1899 --> 1899. 09. 08. 0:00:00
//
//    pt-PT culture:
//    12 --> Conversion Not Supported
//    17.2 --> Conversion Not Supported
//    False --> Conversion Not Supported
//    1/1/2010 12:00:00 AM --> 01-01-2010 0:00:00
//    (CustomProvider retrieved.) today --> Bad Format
//    System.Collections.ArrayList --> Conversion Not Supported
//    c --> Conversion Not Supported
//    (CustomProvider retrieved.) 05/10/2009 6:13:18 PM --> 05-10-2009 18:13:18
//    (CustomProvider retrieved.) September 8, 1899 --> 08-09-1899 0:00:00

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间

其他资源

分析日期和时间字符串


Convert ..::.ToDateTime 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToDateTime 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDateTime ( _
    value As String, _
    provider As IFormatProvider _
) As DateTime
public static DateTime ToDateTime(
    string value,
    IFormatProvider provider
)
public:
static DateTime ToDateTime(
    String^ value,
    IFormatProvider^ provider
)
static member ToDateTime :
        value:string *
        provider:IFormatProvider -> DateTime

参数

value
类型： System String
包含要转换的日期和时间的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System DateTime
value 的值的日期和时间等效项，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 DateTime..::.MinValue 的日期和时间等效项。
异常 | 条件
FormatException | value 不是格式正确的日期和时间字符串。

返回值是对 value 调用 DateTime..::.Parse(String, IFormatProvider) 方法的结果。

provider 是获取 DateTimeFormatInfo 对象的 IFormatProvider 实例。DateTimeFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 DateTimeFormatInfo。 provider 是获取 DateTimeFormatInfo 对象的 IFormatProvider 实例。DateTimeFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 DateTimeFormatInfo。 provider 是获取 DateTimeFormatInfo 对象的 IFormatProvider 实例。DateTimeFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 DateTimeFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 DateTime..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 DateTime..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的代码示例使用 ToDateTime 方法，通过一个 IFormatProvider 对象转换日期值的字符串表示形式。

Imports System.Globalization

Module Example
   Public Sub Main( )
      Console.WriteLine("{0,-18}{1,-12}{2}", "Date String", "Culture", "Result")
      Console.WriteLine()

      Dim cultureNames() As String = { "en-US", "ru-RU","ja-JP" }
      Dim dateStrings() As String = { "01/02/09", "2009/02/03",  "01/2009/03", _
                                      "01/02/2009", "21/02/09", "01/22/09",   _
                                      "01/02/23" }
      ' Iterate each culture name in the array.
      For Each cultureName As String In cultureNames
         Dim culture As CultureInfo = New CultureInfo(cultureName)

         ' Parse each date using the designated culture.
         For Each dateStr As String In dateStrings
            Dim dateTimeValue As DateTime
            Try
               dateTimeValue = Convert.ToDateTime(dateStr, culture)
                ' Display the date and time in a fixed format.
                Console.WriteLine("{0,-18}{1,-12}{2:yyyy-MMM-dd}", _
                                  dateStr, cultureName, dateTimeValue)
            Catch e As FormatException
                Console.WriteLine("{0,-18}{1,-12}{2}", _
                                  dateStr, cultureName, e.GetType().Name)
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       Date String       Culture     Result
'
'       01/02/09          en-US       2009-Jan-02
'       2009/02/03        en-US       2009-Feb-03
'       01/2009/03        en-US       2009-Jan-03
'       01/02/2009        en-US       2009-Jan-02
'       21/02/09          en-US       FormatException
'       01/22/09          en-US       2009-Jan-22
'       01/02/23          en-US       2023-Jan-02
'
'       01/02/09          ru-RU       2009-Feb-01
'       2009/02/03        ru-RU       2009-Feb-03
'       01/2009/03        ru-RU       2009-Jan-03
'       01/02/2009        ru-RU       2009-Feb-01
'       21/02/09          ru-RU       2009-Feb-21
'       01/22/09          ru-RU       FormatException
'       01/02/23          ru-RU       2023-Feb-01
'
'       01/02/09          ja-JP       2001-Feb-09
'       2009/02/03        ja-JP       2009-Feb-03
'       01/2009/03        ja-JP       2009-Jan-03
'       01/02/2009        ja-JP       2009-Jan-02
'       21/02/09          ja-JP       2021-Feb-09
'       01/22/09          ja-JP       FormatException
'       01/02/23          ja-JP       2001-Feb-23

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("{0,-18}{1,-12}{2}\n", "Date String", "Culture", "Result");

      string[] cultureNames = { "en-US", "ru-RU","ja-JP" };
      string[] dateStrings = { "01/02/09", "2009/02/03",  "01/2009/03",
                               "01/02/2009", "21/02/09", "01/22/09",
                               "01/02/23" };
      // Iterate each culture name in the array.
      foreach (string cultureName in cultureNames)
      {
         CultureInfo culture = new CultureInfo(cultureName);

         // Parse each date using the designated culture.
         foreach (string dateStr in dateStrings)
         {
            DateTime dateTimeValue;
            try {
               dateTimeValue = Convert.ToDateTime(dateStr, culture);
                // Display the date and time in a fixed format.
                Console.WriteLine("{0,-18}{1,-12}{2:yyyy-MMM-dd}",
                                  dateStr, cultureName, dateTimeValue);
            }
            catch (FormatException e) {
                Console.WriteLine("{0,-18}{1,-12}{2}",
                                  dateStr, cultureName, e.GetType().Name);
            }
         }
         Console.WriteLine();
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDateTime 重载
System 命名空间

其他资源

分析日期和时间字符串


Convert ..::.ToDecimal 方法

Convert
.
.
::
.
ToDecimal 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为十进制数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToDecimal 方法 (Boolean)

Convert
.
.
::
.
ToDecimal 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Boolean _
) As Decimal
public static decimal ToDecimal(
    bool value
)
public:
static Decimal ToDecimal(
    bool value
)
static member ToDecimal :
        value:bool -> decimal

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System Decimal
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例阐释了如何将 Boolean 转换为 Decimal 值。

Dim flags() As Boolean = { True, False }
Dim result As Decimal

For Each flag As Boolean In flags
   result = Convert.ToDecimal(flag)
   Console.WriteLine("Converted {0} to {1}.", flag, result)
Next
' The example displays the following output:
'       Converted True to 1.
'       Converted False to 0.

bool[] flags = { true, false };
decimal result;

foreach (bool flag in flags)
{
   result = Convert.ToDecimal(flag);
   Console.WriteLine("Converted {0} to {1}.", flag, result);
}
// The example displays the following output:
//       Converted True to 1.
//       Converted False to 0.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (Byte)

Convert
.
.
::
.
ToDecimal 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Byte _
) As Decimal
public static decimal ToDecimal(
    byte value
)
public:
static Decimal ToDecimal(
    unsigned char value
)
static member ToDecimal :
        value:byte -> decimal

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System Decimal
与 value 等效的十进制数。

下面的示例将 Byte 值转换为 Decimal 值。

Public Sub ConvertByteDecimal(ByVal byteVal As Byte)
    Dim decimalVal As Decimal

    ' Byte to decimal conversion will not overflow.
    decimalVal = System.Convert.ToDecimal(byteVal)
    System.Console.WriteLine("The byte as a decimal is {0}.", _
                              decimalVal)

    ' Decimal to byte conversion can overflow.
    Try
        byteVal = System.Convert.ToByte(decimalVal)
        System.Console.WriteLine("The Decimal as a byte is {0}.", _
                                  byteVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in decimal-to-byte conversion.")
    End Try
End Sub

        public void ConvertByteDecimal(byte byteVal) {
            decimal decimalVal;

            // Byte to decimal conversion will not overflow.
            decimalVal = System.Convert.ToDecimal(byteVal);
            System.Console.WriteLine("The byte as a decimal is {0}.",
                decimalVal);

            // Decimal to byte conversion can overflow.
            try {
                byteVal = System.Convert.ToByte(decimalVal);
                System.Console.WriteLine("The Decimal as a byte is {0}.",
                    byteVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "The decimal value is too large for a byte.");
            }
        }

public:
   void ConvertByteDecimal( Byte byteVal )
   {
      Decimal decimalVal;

      // Byte to decimal conversion will not overflow.
      decimalVal = System::Convert::ToDecimal( byteVal );
      System::Console::WriteLine( "The Byte as a decimal is {0}.",
         decimalVal );

      // Decimal to Byte conversion can overflow.
      try
      {
         byteVal = System::Convert::ToByte( decimalVal );
         System::Console::WriteLine( "The Decimal as a Byte is {0}.",
         byteVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine(
            "The decimal value is too large for a Byte." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (Char)

Convert
.
.
::
.
ToDecimal 方法 (Char)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Char _
) As Decimal
public static decimal ToDecimal(
    char value
)
public:
static Decimal ToDecimal(
    wchar_t value
)
static member ToDecimal :
        value:char -> decimal

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Decimal
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

下面的示例尝试将 Char 值转换为 Decimal，并在失败时引发 InvalidCastException。

Public Sub ConvertCharDecimal(ByVal charVal As Char)
    Dim decimalVal As [Decimal] = 0

    ' Char to decimal conversion is not supported and will always
    ' throw an InvalidCastException.
    Try
        decimalVal = System.Convert.ToDecimal(charVal)
    Catch exception As System.InvalidCastException
        System.Console.WriteLine( _
             "Char-to-Decimal conversion is not supported " + _
             "by the .NET Framework.")
    End Try

    'Decimal to char conversion is also not supported.
    Try
        charVal = System.Convert.ToChar(decimalVal)
    Catch exception As System.InvalidCastException
        System.Console.WriteLine( _
            "Decimal-to-Char conversion is not supported " + _
            "by the .NET Framework.")
    End Try
End Sub

        public void ConvertCharDecimal(char charVal) {
            Decimal decimalVal = 0;

            // Char to decimal conversion is not supported and will always
            // throw an InvalidCastException.
            try {
                decimalVal = System.Convert.ToDecimal(charVal);
            }
            catch (System.InvalidCastException) {
                System.Console.WriteLine(
                    "Char-to-Decimal conversion is not supported " +
                    "by the .NET Framework.");
            }

            //Decimal to char conversion is also not supported.
            try {
                charVal = System.Convert.ToChar(decimalVal);
            }
            catch (System.InvalidCastException) {
                System.Console.WriteLine(
                    "Decimal-to-Char conversion is not supported " +
                    "by the .NET Framework.");
            }
        }

public:
   void ConvertCharDecimal( Char charVal )
   {
      Decimal decimalVal = 0;

      // Char to decimal conversion is not supported and will always
      // throw an InvalidCastException.
      try
      {
         decimalVal = System::Convert::ToDecimal( charVal );
      }
      catch ( System::InvalidCastException^ )
      {
         System::Console::WriteLine(
            "Char-to-Decimal conversion is not supported by the .NET Framework." );
      }

      //Decimal to char conversion is also not supported.
      try
      {
         charVal = System::Convert::ToChar( decimalVal );
      }
      catch ( System::InvalidCastException^ )
      {
         System::Console::WriteLine(
            "Decimal-to-Char conversion is not supported by the .NET Framework." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Char


Convert ..::.ToDecimal 方法 (DateTime)

Convert
.
.
::
.
ToDecimal 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As DateTime _
) As Decimal
public static decimal ToDecimal(
    DateTime value
)
public:
static Decimal ToDecimal(
    DateTime value
)
static member ToDecimal :
        value:DateTime -> decimal

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System Decimal
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间


Convert ..::.ToDecimal 方法 (Decimal)

Convert
.
.
::
.
ToDecimal 方法 (Decimal)
Convert 类

返回指定的十进制数；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Decimal _
) As Decimal
public static decimal ToDecimal(
    decimal value
)
public:
static Decimal ToDecimal(
    Decimal value
)
static member ToDecimal :
        value:decimal -> decimal

参数

value
类型： System Decimal
一个小数。

返回值

类型： System Decimal
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间


Convert ..::.ToDecimal 方法 (Double)

Convert
.
.
::
.
ToDecimal 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Double _
) As Decimal
public static decimal ToDecimal(
    double value
)
public:
static Decimal ToDecimal(
    double value
)
static member ToDecimal :
        value:float -> decimal

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System Decimal
一个等于 value 的十进制数。
异常 | 条件
OverflowException | value 大于 Decimal..::.MaxValue 或小于 Decimal..::.MinValue。

此方法返回的 Decimal 值最多包含 15 个有效数字。如果 value 参数的有效数字超过 15 个，则使用“舍入到最接近的数字”规则进行舍入。下面的示例演示 Convert..::.ToDecimal(Double) 方法如何使用“舍入到最接近的数字”规则返回具有 15 个有效数字的 Decimal 值。 此方法返回的 Decimal 值最多包含 15 个有效数字。如果 value 参数的有效数字超过 15 个，则使用“舍入到最接近的数字”规则进行舍入。下面的示例演示 Convert..::.ToDecimal(Double) 方法如何使用“舍入到最接近的数字”规则返回具有 15 个有效数字的 Decimal 值。 此方法返回的 Decimal 值最多包含 15 个有效数字。如果 value 参数的有效数字超过 15 个，则使用“舍入到最接近的数字”规则进行舍入。下面的示例演示 Convert..::.ToDecimal(Double) 方法如何使用“舍入到最接近的数字”规则返回具有 15 个有效数字的 Decimal 值。

Console.WriteLine(Convert.ToDecimal(123456789012345500.12R))   ' Displays 123456789012346000
Console.WriteLine(Convert.ToDecimal(123456789012346500.12R))   ' Displays 123456789012346000

Console.WriteLine(Convert.ToDecimal(10030.12345678905R))       ' Displays 10030.123456789
Console.WriteLine(Convert.ToDecimal(10030.12345678915R))       ' Displays 10030.1234567892

Console.WriteLine(Convert.ToDecimal(123456789012345500.12D));  // Displays 123456789012346000
Console.WriteLine(Convert.ToDecimal(123456789012346500.12D));  // Displays 123456789012346000

Console.WriteLine(Convert.ToDecimal(10030.12345678905D));      // Displays 10030.123456789
Console.WriteLine(Convert.ToDecimal(10030.12345678915D));      // Displays 10030.1234567892

下面的示例将 Double 值转换为 Decimal 值。

Public Sub ConvertDoubleDecimal(ByVal decimalVal As Decimal)

    Dim doubleVal As Double

    ' Decimal to Double conversion cannot overflow.
    doubleVal = System.Convert.ToDouble(decimalVal)
    System.Console.WriteLine("{0} as a Double is: {1}", _
                             decimalVal, doubleVal)

    ' Conversion from Double to Decimal can overflow.
    Try
       decimalVal = System.Convert.ToDecimal(doubleVal)
       System.Console.WriteLine("{0} as a Decimal is: {1}", _
                                doubleVal, decimalVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in Double-to-Decimal conversion.")
    End Try

End Sub

        public void ConvertDoubleDecimal(decimal decimalVal){

            double doubleVal;

            // Decimal to double conversion cannot overflow.
         doubleVal = System.Convert.ToDouble(decimalVal);
            System.Console.WriteLine("{0} as a double is: {1}",
                    decimalVal, doubleVal);

            // Conversion from double to decimal can overflow.
            try
         {
               decimalVal = System.Convert.ToDecimal(doubleVal);
               System.Console.WriteLine ("{0} as a decimal is: {1}",
                   doubleVal, decimalVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Overflow in double-to-double conversion.");
            }

        }

public:
   void ConvertDoubleDecimal( double doubleVal )
   {
      Decimal decimalVal;

      // Conversion from double to decimal cannot overflow.
      decimalVal = System::Convert::ToDecimal( doubleVal );
      System::Console::WriteLine( " {0} as a decimal is: {1}",
         doubleVal, decimalVal );

      // Decimal to double conversion can overflow.
      try
      {
         doubleVal = System::Convert::ToDouble( decimalVal );
         System::Console::WriteLine( " {0} as a double is: {1}",
         decimalVal, doubleVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine( "Overflow in decimal-to-double conversion." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Double
Math Round


Convert ..::.ToDecimal 方法 (Int16)

Convert
.
.
::
.
ToDecimal 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Short _
) As Decimal
public static decimal ToDecimal(
    short value
)
public:
static Decimal ToDecimal(
    short value
)
static member ToDecimal :
        value:int16 -> decimal

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System Decimal
一个等于 value 的十进制数。

下面的示例将一个数组的 16 位带符号整数转换为 Decimal 值。

Dim numbers() As Short = { Int16.MinValue, -1000, 0, 1000, Int16.MaxValue }
Dim result As Decimal

For Each number As Short In numbers
   result = Convert.ToDecimal(number)
   Console.WriteLine("Converted the Int16 value {0} to the Decimal value {1}.", _
                     number, result)
Next
' The example displays the following output:
'       Converted the Int16 value -32768 to the Decimal value -32768.
'       Converted the Int16 value -1000 to the Decimal value -1000.
'       Converted the Int16 value 0 to the Decimal value 0.
'       Converted the Int16 value 1000 to the Decimal value 1000.
'       Converted the Int16 value 32767 to the Decimal value 32767.

short[] numbers = { Int16.MinValue, -1000, 0, 1000, Int16.MaxValue };
decimal result;

foreach (short number in numbers)
{
   result = Convert.ToDecimal(number);
   Console.WriteLine("Converted the Int16 value {0} to the Decimal value {1}.",
                     number, result);
}
// The example displays the following output:
//       Converted the Int16 value -32768 to the Decimal value -32768.
//       Converted the Int16 value -1000 to the Decimal value -1000.
//       Converted the Int16 value 0 to the Decimal value 0.
//       Converted the Int16 value 1000 to the Decimal value 1000.
//       Converted the Int16 value 32767 to the Decimal value 32767.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (Int32)

Convert
.
.
::
.
ToDecimal 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Integer _
) As Decimal
public static decimal ToDecimal(
    int value
)
public:
static Decimal ToDecimal(
    int value
)
static member ToDecimal :
        value:int -> decimal

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System Decimal
一个等于 value 的十进制数。

下面的示例将一个数组的带符号整数转换为 Decimal 值。

Dim numbers() As Integer = { Int32.MinValue, -1000, 0, 1000, Int32.MaxValue }
Dim result As Decimal

For Each number As Integer In numbers
   result = Convert.ToDecimal(number)
   Console.WriteLine("Converted the Int32 value {0} to the Decimal value {1}.", _
                     number, result)
Next
' The example displays the following output:
'    Converted the Int32 value -2147483648 to the Decimal value -2147483648.
'    Converted the Int32 value -1000 to the Decimal value -1000.
'    Converted the Int32 value 0 to the Decimal value 0.
'    Converted the Int32 value 1000 to the Decimal value 1000.
'    Converted the Int32 value 2147483647 to the Decimal value 2147483647.

int[] numbers = { Int32.MinValue, -1000, 0, 1000, Int32.MaxValue };
decimal result;

foreach (int number in numbers)
{
   result = Convert.ToDecimal(number);
   Console.WriteLine("Converted the Int32 value {0} to the Decimal value {1}.",
                     number, result);
}
// The example displays the following output:
//    Converted the Int32 value -2147483648 to the Decimal value -2147483648.
//    Converted the Int32 value -1000 to the Decimal value -1000.
//    Converted the Int32 value 0 to the Decimal value 0.
//    Converted the Int32 value 1000 to the Decimal value 1000.
//    Converted the Int32 value 2147483647 to the Decimal value 2147483647.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (Int64)

Convert
.
.
::
.
ToDecimal 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Long _
) As Decimal
public static decimal ToDecimal(
    long value
)
public:
static Decimal ToDecimal(
    long long value
)
static member ToDecimal :
        value:int64 -> decimal

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System Decimal
一个等于 value 的十进制数。

下面的示例将 Int64 值转换为 Decimal 值。

Public Sub ConvertLongDecimal(ByVal longVal As Long)

    Dim decimalVal As Decimal

    'Long to Decimal conversion cannot overflow.
    decimalVal = System.Convert.ToDecimal(longVal)
    System.Console.WriteLine("{0} as a Decimal is {1}", _
                              longVal, decimalVal)

    'Decimal to Long conversion can overflow.
    Try
        longVal = System.Convert.ToInt64(decimalVal)
        System.Console.WriteLine("{0} as a Long is {1}", _
                                  decimalVal, longVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in decimal-to-long conversion.")
    End Try
End Sub

        public void ConvertLongDecimal(long longVal) {

            decimal	decimalVal;

            // Long to decimal conversion cannot overflow.
            decimalVal = System.Convert.ToDecimal(longVal);
            System.Console.WriteLine("{0} as a decimal is {1}",
                    longVal, decimalVal);

            // Decimal to long conversion can overflow.
            try {
                longVal = System.Convert.ToInt64(decimalVal);
                System.Console.WriteLine("{0} as a long is {1}",
                    decimalVal, longVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Overflow in decimal-to-long conversion.");
            }
        }

public:
   void ConvertLongDecimal( Int64 longVal )
   {
      Decimal decimalVal;

      // Long to decimal conversion cannot overflow.
      decimalVal = System::Convert::ToDecimal( longVal );
      System::Console::WriteLine( " {0} as a decimal is {1}",
         longVal, decimalVal );

      // Decimal to long conversion can overflow.
      try
      {
         longVal = System::Convert::ToInt64( decimalVal );
         System::Console::WriteLine( " {0} as a long is {1}",
         decimalVal, longVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine( "Overflow in decimal-to-long conversion." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (Object)

Convert
.
.
::
.
ToDecimal 方法 (Object)
Convert 类

将指定对象的值转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Object _
) As Decimal
public static decimal ToDecimal(
    Object value
)
public:
static Decimal ToDecimal(
    Object^ value
)
static member ToDecimal :
        value:Object -> decimal

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Decimal
与 value 等效的十进制数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value 未采用 Decimal 类型的相应格式。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 Decimal..::.MinValue 或大于 Decimal..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToDecimal 方法的结果。

下面的示例尝试将对象数组中的每个元素转换为 Decimal 值。

Dim values() As Object = { True, "a"c, 123, 1.764e32, "9.78", "1e-02", _
                           1.67e03, "A100", "1,033.67", Date.Now, _
                           Double.MaxValue }
Dim result As Decimal

For Each value As Object In values
   Try
      result = Convert.ToDecimal(value)
      Console.WriteLine("Converted the {0} value {1} to {2}.", _
                        value.GetType().Name, value, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is out of range of the Decimal type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not recognized as a valid Decimal value.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("Conversion of the {0} value {1} to a Decimal is not supported.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    Converted the Boolean value True to 1.
'    Conversion of the Char value a to a Decimal is not supported.
'    Converted the Int32 value 123 to 123.
'    The Double value 1.764E+32 is out of range of the Decimal type.
'    Converted the String value 9.78 to 9.78.
'    The String value 1e-02 is not recognized as a valid Decimal value.
'    Converted the Double value 1670 to 1670.
'    The String value A100 is not recognized as a valid Decimal value.
'    Converted the String value 1,033.67 to 1033.67.
'    Conversion of the DateTime value 10/15/2008 05:40:42 PM to a Decimal is not supported.
'    The Double value 1.79769313486232E+308 is out of range of the Decimal type.

object[] values = { true, 'a', 123, 1.764e32, "9.78", "1e-02",
                    1.67e03, "A100", "1,033.67", DateTime.Now,
                    Double.MaxValue };
decimal result;

foreach (object value in values)
{
   try {
      result = Convert.ToDecimal(value);
      Console.WriteLine("Converted the {0} value {1} to {2}.",
                        value.GetType().Name, value, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is out of range of the Decimal type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not recognized as a valid Decimal value.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("Conversion of the {0} value {1} to a Decimal is not supported.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    Converted the Boolean value True to 1.
//    Conversion of the Char value a to a Decimal is not supported.
//    Converted the Int32 value 123 to 123.
//    The Double value 1.764E+32 is out of range of the Decimal type.
//    Converted the String value 9.78 to 9.78.
//    The String value 1e-02 is not recognized as a valid Decimal value.
//    Converted the Double value 1670 to 1670.
//    The String value A100 is not recognized as a valid Decimal value.
//    Converted the String value 1,033.67 to 1033.67.
//    Conversion of the DateTime value 10/15/2008 05:40:42 PM to a Decimal is not supported.
//    The Double value 1.79769313486232E+308 is out of range of the Decimal type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (SByte)

Convert
.
.
::
.
ToDecimal 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的十进制数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDecimal ( _
    value As SByte _
) As Decimal
[CLSCompliantAttribute(false)]
public static decimal ToDecimal(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static Decimal ToDecimal(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToDecimal :
        value:sbyte -> decimal

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System Decimal
一个等于 value 的十进制数。

下面的示例将带符号字节数组中的每个元素转换为 Decimal 值。

Dim numbers() As SByte = { SByte.MinValue, -23, 0, 17, SByte.MaxValue }
Dim result As Decimal

For Each number As SByte In numbers
   result = Convert.ToDecimal(number)
   Console.WriteLine("Converted the SByte value {0} to {1}.", number, result)
Next
'       Converted the SByte value -128 to -128.
'       Converted the SByte value -23 to -23.
'       Converted the SByte value 0 to 0.
'       Converted the SByte value 17 to 17.
'       Converted the SByte value 127 to 127.

sbyte[] numbers = { SByte.MinValue, -23, 0, 17, SByte.MaxValue };
decimal result;

foreach (sbyte number in numbers)
{
   result = Convert.ToDecimal(number);
   Console.WriteLine("Converted the SByte value {0} to {1}.", number, result);
}
//       Converted the SByte value -128 to -128.
//       Converted the SByte value -23 to -23.
//       Converted the SByte value 0 to 0.
//       Converted the SByte value 17 to 17.
//       Converted the SByte value 127 to 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (Single)

Convert
.
.
::
.
ToDecimal 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Single _
) As Decimal
public static decimal ToDecimal(
    float value
)
public:
static Decimal ToDecimal(
    float value
)
static member ToDecimal :
        value:float32 -> decimal

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System Decimal
一个等于 value 的十进制数。
异常 | 条件
OverflowException | value 大于 Decimal..::.MaxValue 或小于 Decimal..::.MinValue。

此方法返回的 Decimal 值最多包含 7 个有效数字。如果 value 参数的有效数字超过 7 个，则使用“舍入到最接近的数字”规则进行舍入。下面的示例演示 ToDecimal(Single) 方法如何使用“舍入到最接近的数字”规则返回具有 7 个有效数字的 Decimal 值。 此方法返回的 Decimal 值最多包含 7 个有效数字。如果 value 参数的有效数字超过 7 个，则使用“舍入到最接近的数字”规则进行舍入。下面的示例演示 ToDecimal(Single) 方法如何使用“舍入到最接近的数字”规则返回具有 7 个有效数字的 Decimal 值。 此方法返回的 Decimal 值最多包含 7 个有效数字。如果 value 参数的有效数字超过 7 个，则使用“舍入到最接近的数字”规则进行舍入。下面的示例演示 ToDecimal(Single) 方法如何使用“舍入到最接近的数字”规则返回具有 7 个有效数字的 Decimal 值。

Console.WriteLine(Convert.ToDecimal(1234567500.12f))   ' Displays 1234568000
Console.WriteLine(Convert.ToDecimal(1234568500.12f))   ' Displays 1234568000

Console.WriteLine(Convert.ToDecimal(10.980365f))       ' Displays 10.98036
Console.WriteLine(Convert.ToDecimal(10.980355f))       ' Displays 10.98036

Console.WriteLine(Convert.ToDecimal(1234567500.12F));  // Displays 1234568000
Console.WriteLine(Convert.ToDecimal(1234568500.12F));  // Displays 1234568000

Console.WriteLine(Convert.ToDecimal(10.980365F));      // Displays 10.98036
Console.WriteLine(Convert.ToDecimal(10.980355F));      // Displays 10.98036

下面的示例尝试将 Single 值数组中的每个元素转换为 Decimal 值。

Dim numbers() As Single = { Single.MinValue, -3e10, -1093.54, 0, 1e-03, _
                            1034.23, Single.MaxValue }
Dim result As Decimal

For Each number As Single In numbers
   Try
      result = Convert.ToDecimal(number)
      Console.WriteLine("Converted the Single value {0} to {1}.", number, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is out of range of the Decimal type.", number)
   End Try
Next
' The example displays the following output:
'       -3.402823E+38 is out of range of the Decimal type.
'       Converted the Single value -3E+10 to -30000000000.
'       Converted the Single value -1093.54 to -1093.54.
'       Converted the Single value 0 to 0.
'       Converted the Single value 0.001 to 0.001.
'       Converted the Single value 1034.23 to 1034.23.
'       3.402823E+38 is out of range of the Decimal type.

float[] numbers = { Single.MinValue, -3e10f, -1093.54f, 0f, 1e-03f,
                    1034.23f, Single.MaxValue };
decimal result;

foreach (float number in numbers)
{
   try {
      result = Convert.ToDecimal(number);
      Console.WriteLine("Converted the Single value {0} to {1}.", number, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is out of range of the Decimal type.", number);
   }
}
// The example displays the following output:
//       -3.402823E+38 is out of range of the Decimal type.
//       Converted the Single value -3E+10 to -30000000000.
//       Converted the Single value -1093.54 to -1093.54.
//       Converted the Single value 0 to 0.
//       Converted the Single value 0.001 to 0.001.
//       Converted the Single value 1034.23 to 1034.23.
//       3.402823E+38 is out of range of the Decimal type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Single


Convert ..::.ToDecimal 方法 (String)

Convert
.
.
::
.
ToDecimal 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As String _
) As Decimal
public static decimal ToDecimal(
    string value
)
public:
static Decimal ToDecimal(
    String^ value
)
static member ToDecimal :
        value:string -> decimal

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Decimal
与 value 中数字等效的十进制数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value 不是一个有效格式的数字。
OverflowException | value 表示小于 MinValue 或大于 MaxValue 的数字。

返回值是对 value 调用 Decimal..::.Parse 方法的结果。

如果您希望在转换失败时不处理异常，则可以转而调用 Decimal..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Decimal..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例阐释 ToDecimal 的用法。它会尝试将 String 转换为 Decimal，并引发在转换过程中可能出现的例外情况。 下面的示例阐释 ToDecimal 的用法。它会尝试将 String 转换为 Decimal，并引发在转换过程中可能出现的例外情况。

Public Sub ConvertStringDecimal(ByVal stringVal As String)
    Dim decimalVal As Decimal = 0

    Try
        decimalVal = System.Convert.ToDecimal(stringVal)
        System.Console.WriteLine("The string as a decimal is {0}.", _
                                  decimalVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in string-to-decimal conversion.")
    Catch exception As System.FormatException
        System.Console.WriteLine( _
            "The string is not formatted as a decimal.")
    Catch exception As System.ArgumentException
        System.Console.WriteLine("The string is null.")
    End Try

    ' Decimal to string conversion will not overflow.
    stringVal = System.Convert.ToString(decimalVal)
    System.Console.WriteLine("The decimal as a string is {0}.", _
                              stringVal)
End Sub

        public void ConvertStringDecimal(string stringVal) {
            decimal decimalVal = 0;

            try {
                decimalVal = System.Convert.ToDecimal(stringVal);
                System.Console.WriteLine(
                    "The string as a decimal is {0}.", decimalVal);
            }
            catch (System.OverflowException){
                System.Console.WriteLine(
                    "The conversion from string to decimal overflowed.");
            }
            catch (System.FormatException) {
                System.Console.WriteLine(
                    "The string is not formatted as a decimal.");
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine(
                    "The string is null.");
            }

            // Decimal to string conversion will not overflow.
            stringVal = System.Convert.ToString(decimalVal);
            System.Console.WriteLine(
                "The decimal as a string is {0}.", stringVal);
        }

public:
   void ConvertStringDecimal( String^ stringVal )
   {
      Decimal decimalVal = 0;

      try
      {
         decimalVal = System::Convert::ToDecimal( stringVal );
         System::Console::WriteLine( "The String as a decimal is {0}.",
         decimalVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine(
            "The conversion from String to decimal overflowed." );
      }
      catch ( System::FormatException^ )
      {
         System::Console::WriteLine(
            "The String is not formatted as a decimal." );
      }
      catch ( System::ArgumentNullException^ )
      {
         System::Console::WriteLine( "The String is 0." );
      }

      // Decimal to String conversion will not overflow.
      stringVal = System::Convert::ToString( decimalVal );
      System::Console::WriteLine(
         "The decimal as a String is {0}.", stringVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间


Convert ..::.ToDecimal 方法 (UInt16)

Convert
.
.
::
.
ToDecimal 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的十进制数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDecimal ( _
    value As UShort _
) As Decimal
[CLSCompliantAttribute(false)]
public static decimal ToDecimal(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static Decimal ToDecimal(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToDecimal :
        value:uint16 -> decimal

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System Decimal
与 value 等效的十进制数。

下面的示例将一个数组的 16 位无符号整数转换为 Decimal 值。

Dim numbers() As UShort = { UInt16.MinValue, 121, 12345, UInt16.MaxValue }
Dim result As Decimal

For Each number As UShort In numbers
   result = Convert.ToDecimal(number)
   Console.WriteLine("Converted the UInt16 value {0} to {1}.", _
                     number, result)
Next
' The example displays the following output:
'       Converted the UInt16 value 0 to 0.
'       Converted the UInt16 value 121 to 121.
'       Converted the UInt16 value 12345 to 12345.
'       Converted the UInt16 value 65535 to 65535.

ushort[] numbers = { UInt16.MinValue, 121, 12345, UInt16.MaxValue };
decimal result;

foreach (ushort number in numbers)
{
   result = Convert.ToDecimal(number);
   Console.WriteLine("Converted the UInt16 value {0} to {1}.",
                     number, result);
}
// The example displays the following output:
//       Converted the UInt16 value 0 to 0.
//       Converted the UInt16 value 121 to 121.
//       Converted the UInt16 value 12345 to 12345.
//       Converted the UInt16 value 65535 to 65535.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (UInt32)

Convert
.
.
::
.
ToDecimal 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的十进制数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDecimal ( _
    value As UInteger _
) As Decimal
[CLSCompliantAttribute(false)]
public static decimal ToDecimal(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static Decimal ToDecimal(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToDecimal :
        value:uint32 -> decimal

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System Decimal
一个等于 value 的十进制数。

下面的示例将一个数组的无符号整数转换为 Decimal 值。

Dim numbers() As UInteger = { UInt32.MinValue, 121, 12345, UInt32.MaxValue }
Dim result As Decimal

For Each number As UInteger In numbers
   result = Convert.ToDecimal(number)
   Console.WriteLine("Converted the UInt32 value {0} to {1}.", _
                     number, result)
Next
' The example displays the following output:
'       Converted the UInt32 value 0 to 0.
'       Converted the UInt32 value 121 to 121.
'       Converted the UInt32 value 12345 to 12345.
'       Converted the UInt32 value 4294967295 to 4294967295.

uint[] numbers = { UInt32.MinValue, 121, 12345, UInt32.MaxValue };
decimal result;

foreach (uint number in numbers)
{
   result = Convert.ToDecimal(number);
   Console.WriteLine("Converted the UInt32 value {0} to {1}.",
                     number, result);
}
// The example displays the following output:
//       Converted the UInt32 value 0 to 0.
//       Converted the UInt32 value 121 to 121.
//       Converted the UInt32 value 12345 to 12345.
//       Converted the UInt32 value 4294967295 to 4294967295.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (UInt64)

Convert
.
.
::
.
ToDecimal 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的十进制数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDecimal ( _
    value As ULong _
) As Decimal
[CLSCompliantAttribute(false)]
public static decimal ToDecimal(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static Decimal ToDecimal(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToDecimal :
        value:uint64 -> decimal

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System Decimal
一个等于 value 的十进制数。

下面的示例将一个数组的无符号长整数转换为 Decimal 值。

Dim numbers() As ULong = { UInt64.MinValue, 121, 12345, UInt64.MaxValue }
Dim result As Decimal

For Each number As ULong In numbers
   result = Convert.ToDecimal(number)
   Console.WriteLine("Converted the UInt64 value {0} to {1}.", _
                     number, result)
Next
' The example displays the following output:
'    Converted the UInt64 value 0 to 0.
'    Converted the UInt64 value 121 to 121.
'    Converted the UInt64 value 12345 to 12345.
'    Converted the UInt64 value 18446744073709551615 to 18446744073709551615.

ulong[] numbers = { UInt64.MinValue, 121, 12345, UInt64.MaxValue };
decimal result;

foreach (ulong number in numbers)
{
   result = Convert.ToDecimal(number);
   Console.WriteLine("Converted the UInt64 value {0} to {1}.",
                     number, result);
}
// The example displays the following output:
//    Converted the UInt64 value 0 to 0.
//    Converted the UInt64 value 121 to 121.
//    Converted the UInt64 value 12345 to 12345.
//    Converted the UInt64 value 18446744073709551615 to 18446744073709551615.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToDecimal 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定对象的值转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As Object, _
    provider As IFormatProvider _
) As Decimal
public static decimal ToDecimal(
    Object value,
    IFormatProvider provider
)
public:
static Decimal ToDecimal(
    Object^ value,
    IFormatProvider^ provider
)
static member ToDecimal :
        value:Object *
        provider:IFormatProvider -> decimal

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Decimal
与 value 等效的十进制数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value 未采用 Decimal 类型的相应格式。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 Decimal..::.MinValue 或大于 Decimal..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToDecimal 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个实现 IConvertible 接口的 Temperature 类。

Imports System.Globalization

Public Class Temperature : Implements IConvertible
   Private m_Temp As Decimal

   Public Sub New(temperature As Decimal)
      Me.m_Temp = temperature
   End Sub

   Public ReadOnly Property Celsius() As Decimal
      Get
         Return Me.m_Temp
      End Get
   End Property

   Public ReadOnly Property Kelvin() As Decimal
      Get
         Return Me.m_Temp + 273.15d
      End Get
   End Property

   Public ReadOnly Property Fahrenheit() As Decimal
      Get
         Return Math.Round(CDec(Me.m_Temp * 9 / 5 + 32), 2)
      End Get
   End Property

   Public Overrides Function ToString() As String
      Return m_Temp.ToString("N2") & " °C"
   End Function

   ' IConvertible implementations.
   Public Function GetTypeCode() As TypeCode _
                   Implements IConvertible.GetTypeCode
      Return TypeCode.Object
   End Function

   Public Function ToBoolean(provider As IFormatProvider) As Boolean _
                   Implements IConvertible.ToBoolean
      If m_Temp = 0 Then
         Return False
      Else
         Return True
      End If
   End Function

   Public Function ToByte(provider As IFormatProvider) As Byte _
                   Implements IConvertible.ToByte
      If m_Temp < Byte.MinValue Or m_Temp > Byte.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToByte(Me.m_Temp)
      End If
   End Function

   Public Function ToChar(provider As IFormatProvider) As Char _
                   Implements IConvertible.ToChar
      Throw New InvalidCastException("Temperature to Char conversion is not supported.")
   End Function

   Public Function ToDateTime(provider As IFormatProvider) As Date _
                   Implements IConvertible.ToDateTime
      Throw New InvalidCastException("Temperature to DateTime conversion is not supported.")
   End Function

   Public Function ToDecimal(provider As IFormatProvider) As Decimal _
                   Implements IConvertible.ToDecimal
      Return Me.m_Temp
   End Function

   Public Function ToDouble(provider As IFormatProvider) As Double _
                   Implements IConvertible.ToDouble
      Return Decimal.ToDouble(Me.m_Temp)
   End Function

   Public Function ToInt16(provider As IFormatProvider) As Int16 _
                   Implements IConvertible.ToInt16
      If Me.m_Temp < Int16.MinValue Or Me.m_Temp > Int16.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Int16 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToInt16(Me.m_Temp)
      End If
   End Function

   Public Function ToInt32(provider As IFormatProvider) As Int32 _
                   Implements IConvertible.ToInt32
      If Me.m_Temp < Int32.MinValue Or Me.m_Temp > Int32.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Int32 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToInt32(Me.m_Temp)
      End If
   End Function

   Public Function ToInt64(provider As IFormatProvider) As Int64 _
                   Implements IConvertible.ToInt64
      If Me.m_Temp < Int64.MinValue Or Me.m_Temp > Int64.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Int64 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToInt64(Me.m_Temp)
      End If
   End Function

   Public Function ToSByte(provider As IFormatProvider) As SByte _
                   Implements IConvertible.ToSByte
      If Me.m_Temp < SByte.MinValue Or Me.m_Temp > SByte.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the SByte type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToSByte(Me.m_Temp)
      End If
   End Function

   Public Function ToSingle(provider As IFormatProvider) As Single _
                   Implements IConvertible.ToSingle
      Return Decimal.ToSingle(Me.m_Temp)
   End Function

   Public Overloads Function ToString(provider As IFormatProvider) As String _
                   Implements IConvertible.ToString
      Return m_Temp.ToString("N2", provider) & " °C"
   End Function

   Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object _
                   Implements IConvertible.ToType
      Select Case Type.GetTypeCode(conversionType)
         Case TypeCode.Boolean
            Return Me.ToBoolean(Nothing)
         Case TypeCode.Byte
            Return Me.ToByte(Nothing)
         Case TypeCode.Char
            Return Me.ToChar(Nothing)
         Case TypeCode.DateTime
            Return Me.ToDateTime(Nothing)
         Case TypeCode.Decimal
            Return Me.ToDecimal(Nothing)
         Case TypeCode.Double
            Return Me.ToDouble(Nothing)
         Case TypeCode.Int16
            Return Me.ToInt16(Nothing)
         Case TypeCode.Int32
            Return Me.ToInt32(Nothing)
         Case TypeCode.Int64
            Return Me.ToInt64(Nothing)
         Case TypeCode.Object
            If GetType(Temperature).Equals(conversionType) Then
               Return Me
            Else
               Throw New InvalidCastException(String.Format("Conversion to a {0} is not supported.", _
                                                            conversionType.Name))
            End If
         Case TypeCode.SByte
            Return Me.ToSByte(Nothing)
         Case TypeCode.Single
            Return Me.ToSingle(Nothing)
         Case TypeCode.String
            Return Me.ToString(provider)
         Case TypeCode.UInt16
            Return Me.ToUInt16(Nothing)
         Case TypeCode.UInt32
            Return Me.ToUInt32(Nothing)
         Case TypeCode.UInt64
            Return Me.ToUInt64(Nothing)
         Case Else
            Throw New InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name))
      End Select
   End Function

   Public Function ToUInt16(provider As IFormatProvider) As UInt16 _
                   Implements IConvertible.ToUInt16
      If Me.m_Temp < UInt16.MinValue Or Me.m_Temp > UInt16.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the UInt16 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToUInt16(Me.m_Temp)
      End If
   End Function

   Public Function ToUInt32(provider As IFormatProvider) As UInt32 _
                   Implements IConvertible.ToUInt32
      If Me.m_Temp < UInt32.MinValue Or Me.m_Temp > UInt32.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the UInt32 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToUInt32(Me.m_Temp)
      End If
   End Function

   Public Function ToUInt64(provider As IFormatProvider) As UInt64 _
                   Implements IConvertible.ToUInt64
      If Me.m_Temp < UInt64.MinValue Or Me.m_Temp > UInt64.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the UInt64 type.", _
                                                   Me.m_Temp))
      Else
         Return Decimal.ToUInt64(Me.m_temp)
      End If
   End Function
End Class

using System;
using System.Globalization;

public class Temperature : IConvertible
{
   private decimal m_Temp;

   public Temperature(decimal temperature)
   {
      this.m_Temp = temperature;
   }

   public decimal Celsius
   {
      get { return this.m_Temp; }
   }

   public decimal Kelvin
   {
      get { return this.m_Temp + 273.15m; }
   }

   public decimal Fahrenheit
   {
      get { return Math.Round((decimal) (this.m_Temp * 9 / 5 + 32), 2); }
   }

   public override string ToString()
   {
      return m_Temp.ToString("N2") + " °C";
   }

   // IConvertible implementations.
   public TypeCode GetTypeCode()
   {
      return TypeCode.Object;
   }

   public bool ToBoolean(IFormatProvider provider)
   {
      if (m_Temp == 0)
         return false;
      else
         return true;
   }

   public byte ToByte(IFormatProvider provider)
   {
      if (m_Temp < Byte.MinValue || m_Temp > Byte.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Byte type.",
                                                   this.m_Temp));
      else
         return Decimal.ToByte(this.m_Temp);
   }

   public char ToChar(IFormatProvider provider)
   {
      throw new InvalidCastException("Temperature to Char conversion is not supported.");
   }

   public DateTime ToDateTime(IFormatProvider provider)
   {
      throw new InvalidCastException("Temperature to DateTime conversion is not supported.");
   }

   public decimal ToDecimal(IFormatProvider provider)
   {
      return this.m_Temp;
   }

   public double ToDouble(IFormatProvider provider)
   {
      return Decimal.ToDouble(this.m_Temp);
   }

   public short ToInt16(IFormatProvider provider)
   {
      if (this.m_Temp < Int16.MinValue || this.m_Temp > Int16.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int16 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToInt16(this.m_Temp);
   }

   public int ToInt32(IFormatProvider provider)
      {
      if (this.m_Temp < Int32.MinValue || this.m_Temp > Int32.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int32 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToInt32(this.m_Temp);
   }

   public long ToInt64(IFormatProvider provider)
   {
      if (this.m_Temp < Int64.MinValue || this.m_Temp > Int64.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int64 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToInt64(this.m_Temp);
   }

   public sbyte ToSByte(IFormatProvider provider)
   {
      if (this.m_Temp < SByte.MinValue || this.m_Temp > SByte.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the SByte type.",
                                                   this.m_Temp));
      else
         return Decimal.ToSByte(this.m_Temp);
   }

   public float ToSingle(IFormatProvider provider)
   {
      return Decimal.ToSingle(this.m_Temp);
   }

   public string ToString(IFormatProvider provider)
   {
      return m_Temp.ToString("N2", provider) + " °C";
   }

   public object ToType(Type conversionType, IFormatProvider provider)
   {
      switch (Type.GetTypeCode(conversionType))
      {
         case TypeCode.Boolean:
            return this.ToBoolean(null);
         case TypeCode.Byte:
            return this.ToByte(null);
         case TypeCode.Char:
            return this.ToChar(null);
         case TypeCode.DateTime:
            return this.ToDateTime(null);
         case TypeCode.Decimal:
            return this.ToDecimal(null);
         case TypeCode.Double:
            return this.ToDouble(null);
         case TypeCode.Int16:
            return this.ToInt16(null);
         case TypeCode.Int32:
            return this.ToInt32(null);
         case TypeCode.Int64:
            return this.ToInt64(null);
         case TypeCode.Object:
            if (typeof(Temperature).Equals(conversionType))
               return this;
            else
               throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.",
                                                            conversionType.Name));
         case TypeCode.SByte:
            return this.ToSByte(null);
         case TypeCode.Single:
            return this.ToSingle(null);
         case TypeCode.String:
            return this.ToString(provider);
         case TypeCode.UInt16:
            return this.ToUInt16(null);
         case TypeCode.UInt32:
            return this.ToUInt32(null);
         case TypeCode.UInt64:
            return this.ToUInt64(null);
         default:
            throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
      }
   }

   public ushort ToUInt16(IFormatProvider provider)
   {
      if (this.m_Temp < UInt16.MinValue || this.m_Temp > UInt16.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt16 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToUInt16(this.m_Temp);
   }

   public uint ToUInt32(IFormatProvider provider)
   {
      if (this.m_Temp < UInt32.MinValue || this.m_Temp > UInt32.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt32 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToUInt32(this.m_Temp);
   }

   public ulong ToUInt64(IFormatProvider provider)
   {
      if (this.m_Temp < UInt64.MinValue || this.m_Temp > UInt64.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt64 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToUInt64(this.m_Temp);
   }
}

下面的示例演示在 Temperature 对象作为参数传递到 ToDecimal(Object, IFormatProvider) 方法时调用 Temperature 类的 IConvertible..::.ToDecimal 实现来执行转换。

Module Example
   Public Sub Main()
      Dim cold As New Temperature(-40)
      Dim freezing As New Temperature(0)
      Dim boiling As New Temperature(100)

      Console.WriteLine(Convert.ToDecimal(cold, Nothing))
      Console.WriteLine(Convert.ToDecimal(freezing, Nothing))
      Console.WriteLine(Convert.ToDecimal(boiling, Nothing))
   End Sub
End Module
' The example displays the following output:
'       -40
'       0
'       100

public class Example
{
   public static void Main()
   {
      Temperature cold = new Temperature(-40);
      Temperature freezing = new Temperature(0);
      Temperature boiling = new Temperature(100);

      Console.WriteLine(Convert.ToDecimal(cold, null));
      Console.WriteLine(Convert.ToDecimal(freezing, null));
      Console.WriteLine(Convert.ToDecimal(boiling, null));
   }
}
// The example dosplays the following output:
//       -40
//       0
//       100

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间
Decimal


Convert ..::.ToDecimal 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToDecimal 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDecimal ( _
    value As String, _
    provider As IFormatProvider _
) As Decimal
public static decimal ToDecimal(
    string value,
    IFormatProvider provider
)
public:
static Decimal ToDecimal(
    String^ value,
    IFormatProvider^ provider
)
static member ToDecimal :
        value:string *
        provider:IFormatProvider -> decimal

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Decimal
与 value 中数字等效的十进制数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value 不是一个有效格式的数字。
OverflowException | value 表示小于 Decimal..::.MinValue 或大于 Decimal..::.MaxValue 的数字。

返回值是对 value 调用 Decimal..::.Parse 方法的结果。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 Decimal..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Decimal..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例使用表示两个不同区域性的 NumberFormatInfo 对象，尝试将字符串数组转换为 Decimal 值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim values() As String = { "123456789", "12345.6789", "12 345,6789", _
                                 "123,456.789", "123 456,789", "123,456,789.0123", _
                                 "123 456 789,0123" }
      Dim cultures() As CultureInfo = { New CultureInfo("en-US"), _
                                        New CultureInfo("fr-FR") }

      For Each culture As CultureInfo In cultures
         Console.WriteLine("String -> Decimal Conversion Using the {0} Culture", _
                           culture.Name)
         For Each value As String In values
            Console.Write("{0,20}  ->  ", value)
            Try
               Console.WriteLine(Convert.ToDecimal(value, culture))
            Catch e As FormatException
               Console.WriteLine("FormatException")
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       String -> Decimal Conversion Using the en-US Culture
'                  123456789  ->  123456789
'                 12345.6789  ->  12345.6789
'                12 345,6789  ->  FormatException
'                123,456.789  ->  123456.789
'                123 456,789  ->  FormatException
'           123,456,789.0123  ->  123456789.0123
'           123 456 789,0123  ->  FormatException
'
'       String -> Decimal Conversion Using the fr-FR Culture
'                  123456789  ->  123456789
'                 12345.6789  ->  FormatException
'                12 345,6789  ->  12345.6789
'                123,456.789  ->  FormatException
'                123 456,789  ->  123456.789
'           123,456,789.0123  ->  FormatException
'           123 456 789,0123  ->  123456789.0123

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values = { "123456789", "12345.6789", "12 345,6789",
                          "123,456.789", "123 456,789", "123,456,789.0123",
                          "123 456 789,0123" };
      CultureInfo[] cultures = { new CultureInfo("en-US"),
                                 new CultureInfo("fr-FR") };

      foreach (CultureInfo culture in cultures)
      {
         Console.WriteLine("String -> Decimal Conversion Using the {0} Culture",
                           culture.Name);
         foreach (string value in values)
         {
            Console.Write("{0,20}  ->  ", value);
            try {
               Console.WriteLine(Convert.ToDecimal(value, culture));
            }
            catch (FormatException) {
               Console.WriteLine("FormatException");
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       String -> Decimal Conversion Using the en-US Culture
//                  123456789  ->  123456789
//                 12345.6789  ->  12345.6789
//                12 345,6789  ->  FormatException
//                123,456.789  ->  123456.789
//                123 456,789  ->  FormatException
//           123,456,789.0123  ->  123456789.0123
//           123 456 789,0123  ->  FormatException
//
//       String -> Decimal Conversion Using the fr-FR Culture
//                  123456789  ->  123456789
//                 12345.6789  ->  FormatException
//                12 345,6789  ->  12345.6789
//                123,456.789  ->  FormatException
//                123 456,789  ->  123456.789
//           123,456,789.0123  ->  FormatException
//           123 456 789,0123  ->  123456789.0123

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDecimal 重载
System 命名空间


Convert ..::.ToDouble 方法

Convert
.
.
::
.
ToDouble 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为双精度浮点数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToDouble 方法 (Boolean)

Convert
.
.
::
.
ToDouble 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Boolean _
) As Double
public static double ToDouble(
    bool value
)
public:
static double ToDouble(
    bool value
)
static member ToDouble :
        value:bool -> float

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System Double
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例将 Boolean 值转换为 Double 值。

Public Sub ConvertDoubleBool(ByVal doubleVal As Double)
    Dim boolVal As Boolean

    'Double to Boolean conversion cannot overflow.
    boolVal = System.Convert.ToBoolean(doubleVal)
    System.Console.WriteLine("{0} as a Boolean is: {1}.", _
                              doubleVal, boolVal)

    'Boolean to Double conversion cannot overflow.
    doubleVal = System.Convert.ToDouble(boolVal)
    System.Console.WriteLine("{0} as a Double is: {1}.", _
                              boolVal, doubleVal)
End Sub

        public void ConvertDoubleBool(double doubleVal) {
            bool	boolVal;
            // Double to bool conversion cannot overflow.
            boolVal = System.Convert.ToBoolean(doubleVal);
            System.Console.WriteLine("{0} as a Boolean is: {1}.",
                doubleVal, boolVal);

            // bool to double conversion cannot overflow.
            doubleVal = System.Convert.ToDouble(boolVal);
            System.Console.WriteLine("{0} as a double is: {1}.",
                boolVal, doubleVal);
        }

public:
   void ConvertDoubleBool( double doubleVal )
   {
      bool boolVal;

      // Double to bool conversion cannot overflow.
      boolVal = System::Convert::ToBoolean( doubleVal );
      System::Console::WriteLine( " {0} as a Boolean is: {1}.",
         doubleVal, boolVal );

      // bool to double conversion cannot overflow.
      doubleVal = System::Convert::ToDouble( boolVal );
      System::Console::WriteLine( " {0} as a double is: {1}.",
         boolVal, doubleVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (Byte)

Convert
.
.
::
.
ToDouble 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Byte _
) As Double
public static double ToDouble(
    byte value
)
public:
static double ToDouble(
    unsigned char value
)
static member ToDouble :
        value:byte -> float

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System Double
与 value 等效的双精度浮点数。

下面的示例将 Byte 值转换为 Double 值。

Public Sub ConvertDoubleByte(ByVal doubleVal As Double)
    Dim byteVal As Byte = 0

    ' Double to Byte conversion can overflow.
    Try
        byteVal = System.Convert.ToByte(doubleVal)
        System.Console.WriteLine("{0} as a Byte is: {1}.", _
            doubleVal, byteVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in Double-to-Byte conversion.")
    End Try

    ' Byte to Double conversion cannot overflow.
    doubleVal = System.Convert.ToDouble(byteVal)
    System.Console.WriteLine("{0} as a Double is: {1}.", _
                              byteVal, doubleVal)
End Sub

        public void ConvertDoubleByte(double doubleVal) {
            byte	byteVal = 0;

            // Double to byte conversion can overflow.
            try {
                byteVal = System.Convert.ToByte(doubleVal);
                System.Console.WriteLine("{0} as a byte is: {1}.",
                    doubleVal, byteVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Overflow in double-to-byte conversion.");
            }

            // Byte to double conversion cannot overflow.
            doubleVal = System.Convert.ToDouble(byteVal);
            System.Console.WriteLine("{0} as a double is: {1}.",
                byteVal, doubleVal);
        }

public:
   void ConvertDoubleByte( double doubleVal )
   {
      Byte byteVal = 0;

      // Double to Byte conversion can overflow.
      try
      {
         byteVal = System::Convert::ToByte( doubleVal );
         System::Console::WriteLine( " {0} as a Byte is: {1}.",
         doubleVal, byteVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine( "Overflow in double-to-Byte conversion." );
      }

      // Byte to double conversion cannot overflow.
      doubleVal = System::Convert::ToDouble( byteVal );
      System::Console::WriteLine( " {0} as a double is: {1}.",
         byteVal, doubleVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (Char)

Convert
.
.
::
.
ToDouble 方法 (Char)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Char _
) As Double
public static double ToDouble(
    char value
)
public:
static double ToDouble(
    wchar_t value
)
static member ToDouble :
        value:char -> float

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Double
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间
Char


Convert ..::.ToDouble 方法 (DateTime)

Convert
.
.
::
.
ToDouble 方法 (DateTime)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As DateTime _
) As Double
public static double ToDouble(
    DateTime value
)
public:
static double ToDouble(
    DateTime value
)
static member ToDouble :
        value:DateTime -> float

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System Double
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (Decimal)

Convert
.
.
::
.
ToDouble 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Decimal _
) As Double
public static double ToDouble(
    decimal value
)
public:
static double ToDouble(
    Decimal value
)
static member ToDouble :
        value:decimal -> float

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System Double
一个等于 value 的双精度浮点数。

下面的示例将 Decimal 值转换为 Double 值。

Public Sub ConvertDoubleDecimal(ByVal decimalVal As Decimal)

    Dim doubleVal As Double

    ' Decimal to Double conversion cannot overflow.
    doubleVal = System.Convert.ToDouble(decimalVal)
    System.Console.WriteLine("{0} as a Double is: {1}", _
                             decimalVal, doubleVal)

    ' Conversion from Double to Decimal can overflow.
    Try
       decimalVal = System.Convert.ToDecimal(doubleVal)
       System.Console.WriteLine("{0} as a Decimal is: {1}", _
                                doubleVal, decimalVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in Double-to-Decimal conversion.")
    End Try

End Sub

        public void ConvertDoubleDecimal(decimal decimalVal){

            double doubleVal;

            // Decimal to double conversion cannot overflow.
         doubleVal = System.Convert.ToDouble(decimalVal);
            System.Console.WriteLine("{0} as a double is: {1}",
                    decimalVal, doubleVal);

            // Conversion from double to decimal can overflow.
            try
         {
               decimalVal = System.Convert.ToDecimal(doubleVal);
               System.Console.WriteLine ("{0} as a decimal is: {1}",
                   doubleVal, decimalVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Overflow in double-to-double conversion.");
            }

        }

public:
   void ConvertDoubleDecimal( double doubleVal )
   {
      Decimal decimalVal;

      // Conversion from double to decimal cannot overflow.
      decimalVal = System::Convert::ToDecimal( doubleVal );
      System::Console::WriteLine( " {0} as a decimal is: {1}",
         doubleVal, decimalVal );

      // Decimal to double conversion can overflow.
      try
      {
         doubleVal = System::Convert::ToDouble( decimalVal );
         System::Console::WriteLine( " {0} as a double is: {1}",
         decimalVal, doubleVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine( "Overflow in decimal-to-double conversion." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (Double)

Convert
.
.
::
.
ToDouble 方法 (Double)
Convert 类

返回指定的双精度浮点数；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Double _
) As Double
public static double ToDouble(
    double value
)
public:
static double ToDouble(
    double value
)
static member ToDouble :
        value:float -> float

参数

value
类型： System Double
要返回的双精度浮点数。

返回值

类型： System Double
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间
Double


Convert ..::.ToDouble 方法 (Int16)

Convert
.
.
::
.
ToDouble 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Short _
) As Double
public static double ToDouble(
    short value
)
public:
static double ToDouble(
    short value
)
static member ToDouble :
        value:int16 -> float

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System Double
等效于 value 的双精度浮点数。

下面的示例将 16 位带符号整数数组中的每个元素转换为 Double 值。

Dim numbers() As Short = { Int16.MinValue, -1032, 0, 192, Int16.MaxValue }
Dim result As Double

For Each number As Short In numbers
   result = Convert.ToDouble(number)
   Console.WriteLine("Converted the UInt16 value {0} to {1}.", _
                     number, result)
Next
'       Converted the UInt16 value -32768 to -32768.
'       Converted the UInt16 value -1032 to -1032.
'       Converted the UInt16 value 0 to 0.
'       Converted the UInt16 value 192 to 192.
'       Converted the UInt16 value 32767 to 32767.

short[] numbers = { Int16.MinValue, -1032, 0, 192, Int16.MaxValue };
double result;

foreach (short number in numbers)
{
   result = Convert.ToDouble(number);
   Console.WriteLine("Converted the UInt16 value {0} to {1}.",
                     number, result);
}
//       Converted the UInt16 value -32768 to -32768.
//       Converted the UInt16 value -1032 to -1032.
//       Converted the UInt16 value 0 to 0.
//       Converted the UInt16 value 192 to 192.
//       Converted the UInt16 value 32767 to 32767.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (Int32)

Convert
.
.
::
.
ToDouble 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Integer _
) As Double
public static double ToDouble(
    int value
)
public:
static double ToDouble(
    int value
)
static member ToDouble :
        value:int -> float

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System Double
一个等于 value 的双精度浮点数。

下面的示例将 Int32 值转换为 Double 值。

Public Sub ConvertDoubleInt(ByVal doubleVal As Double)

    Dim intVal As Integer = 0
    ' Double to Integer conversion can overflow.
    Try
        intVal = System.Convert.ToInt32(doubleVal)
        System.Console.WriteLine("{0} as an Integer is: {1}", _
                                  doubleVal, intVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in Double-to-Byte conversion.")
    End Try

    ' Integer to Double conversion cannot overflow.
    doubleVal = System.Convert.ToDouble(intVal)
    System.Console.WriteLine("{0} as a Double is: {1}", _
                              intVal, doubleVal)
End Sub

        public void ConvertDoubleInt(double doubleVal) {

            int     intVal = 0;
            // Double to int conversion can overflow.
            try {
                intVal = System.Convert.ToInt32(doubleVal);
                System.Console.WriteLine("{0} as an int is: {1}",
                    doubleVal, intVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Overflow in double-to-int conversion.");
            }

            // Int to double conversion cannot overflow.
            doubleVal = System.Convert.ToDouble(intVal);
            System.Console.WriteLine("{0} as a double is: {1}",
                intVal, doubleVal);
        }

public:
   void ConvertDoubleInt( double doubleVal )
   {
      int intVal = 0;

      // Double to int conversion can overflow.
      try
      {
         intVal = System::Convert::ToInt32( doubleVal );
         System::Console::WriteLine( " {0} as an int is: {1}",
         doubleVal, intVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine( "Overflow in double-to-int conversion." );
      }

      // Int to double conversion cannot overflow.
      doubleVal = System::Convert::ToDouble( intVal );
      System::Console::WriteLine( " {0} as a double is: {1}",
         intVal, doubleVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (Int64)

Convert
.
.
::
.
ToDouble 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Long _
) As Double
public static double ToDouble(
    long value
)
public:
static double ToDouble(
    long long value
)
static member ToDouble :
        value:int64 -> float

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System Double
一个等于 value 的双精度浮点数。

下面的示例将带符号长整数数组中的每个元素转换为 Double 值。

Dim numbers() As Long = { Int64.MinValue, -903, 0, 172, Int64.MaxValue}
Dim result As Double

For Each number As Long In numbers
   result = Convert.ToDouble(number)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)

Next
' The example displays the following output:
'    Converted the Int64 value '-9223372036854775808' to the Double value -9.22337203685478E+18.
'    Converted the Int64 value '-903' to the Double value -903.
'    Converted the Int64 value '0' to the Double value 0.
'    Converted the Int64 value '172' to the Double value 172.
'    Converted the Int64 value '9223372036854775807' to the Double value 9.22337203685478E+18.

long[] numbers = { Int64.MinValue, -903, 0, 172, Int64.MaxValue};
double result;

foreach (long number in numbers)
{
   result = Convert.ToDouble(number);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Int64 value '-9223372036854775808' to the Double value -9.22337203685478E+18.
//    Converted the Int64 value '-903' to the Double value -903.
//    Converted the Int64 value '0' to the Double value 0.
//    Converted the Int64 value '172' to the Double value 172.
//    Converted the Int64 value '9223372036854775807' to the Double value 9.22337203685478E+18.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (Object)

Convert
.
.
::
.
ToDouble 方法 (Object)
Convert 类

将指定对象的值转换为双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Object _
) As Double
public static double ToDouble(
    Object value
)
public:
static double ToDouble(
    Object^ value
)
static member ToDouble :
        value:Object -> float

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Double
与 value 等效的双精度浮点数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 未采用 Double 类型的相应格式。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 Double..::.MinValue 或大于 Double..::.MaxValue 的数字。

调用 value 的基础类型的 IConvertible..::.ToDouble 方法的结果。

下面的示例将对象数组中的每个值转换为 Double。

Dim values() As Object = { True, "a"c, 123, CSng(1.764e32), "9.78", "1e-02", _
                           CSng(1.67e03), "A100", "1,033.67", Date.Now, _
                           Decimal.MaxValue }
Dim result As Double

For Each value As Object In values
   Try
      result = Convert.ToDouble(value)
      Console.WriteLine("Converted the {0} value {1} to {2}.", _
                        value.GetType().Name, value, result)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not recognized as a valid Double value.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("Conversion of the {0} value {1} to a Double is not supported.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    Converted the Boolean value True to 1.
'    Conversion of the Char value a to a Double is not supported.
'    Converted the Int32 value 123 to 123.
'    Converted the Single value 1.764E+32 to 1.76399995098587E+32.
'    Converted the String value 9.78 to 9.78.
'    Converted the String value 1e-02 to 0.01.
'    Converted the Single value 1670 to 1670.
'    The String value A100 is not recognized as a valid Double value.
'    Converted the String value 1,033.67 to 1033.67.
'    Conversion of the DateTime value 10/21/2008 07:12:12 AM to a Double is not supported.
'    Converted the Decimal value 79228162514264337593543950335 to 7.92281625142643E+28.

object[] values = { true, 'a', 123, 1.764e32f, "9.78", "1e-02",
                    1.67e03f, "A100", "1,033.67", DateTime.Now,
                    Decimal.MaxValue };
double result;

foreach (object value in values)
{
   try {
      result = Convert.ToDouble(value);
      Console.WriteLine("Converted the {0} value {1} to {2}.",
                        value.GetType().Name, value, result);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not recognized as a valid Double value.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("Conversion of the {0} value {1} to a Double is not supported.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    Converted the Boolean value True to 1.
//    Conversion of the Char value a to a Double is not supported.
//    Converted the Int32 value 123 to 123.
//    Converted the Single value 1.764E+32 to 1.76399995098587E+32.
//    Converted the String value 9.78 to 9.78.
//    Converted the String value 1e-02 to 0.01.
//    Converted the Single value 1670 to 1670.
//    The String value A100 is not recognized as a valid Double value.
//    Converted the String value 1,033.67 to 1033.67.
//    Conversion of the DateTime value 10/21/2008 07:12:12 AM to a Double is not supported.
//    Converted the Decimal value 79228162514264337593543950335 to 7.92281625142643E+28.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (SByte)

Convert
.
.
::
.
ToDouble 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的双精度浮点数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDouble ( _
    value As SByte _
) As Double
[CLSCompliantAttribute(false)]
public static double ToDouble(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static double ToDouble(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToDouble :
        value:sbyte -> float

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System Double
与 value 等效的 8 位带符号整数。

下面的示例将 SByte 值数组中的每个元素转换为 Double 值。

Dim numbers() As SByte = { SByte.MinValue, -23, 0, 17, SByte.MaxValue }
Dim result As Double

For Each number As SByte In numbers
   result = Convert.ToDouble(number)
   Console.WriteLine("Converted the SByte value {0} to {1}.", number, result)
Next
'       Converted the SByte value -128 to -128.
'       Converted the SByte value -23 to -23.
'       Converted the SByte value 0 to 0.
'       Converted the SByte value 17 to 17.
'       Converted the SByte value 127 to 127.

sbyte[] numbers = { SByte.MinValue, -23, 0, 17, SByte.MaxValue };
double result;

foreach (sbyte number in numbers)
{
   result = Convert.ToDouble(number);
   Console.WriteLine("Converted the SByte value {0} to {1}.", number, result);
}
//       Converted the SByte value -128 to -128.
//       Converted the SByte value -23 to -23.
//       Converted the SByte value 0 to 0.
//       Converted the SByte value 17 to 17.
//       Converted the SByte value 127 to 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (Single)

Convert
.
.
::
.
ToDouble 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Single _
) As Double
public static double ToDouble(
    float value
)
public:
static double ToDouble(
    float value
)
static member ToDouble :
        value:float32 -> float

参数

value
类型： System Single
单精度浮点数。

返回值

类型： System Double
一个等于 value 的双精度浮点数。

下面的示例将 Single 值转换为 Double 值。

Public Sub CovertDoubleFloat(ByVal doubleVal As Double)
    Dim singleVal As Single = 0

    ' Double to Single conversion cannot overflow.
        singleVal = System.Convert.ToSingle(doubleVal)
        System.Console.WriteLine("{0} as a Single is {1}", _
                                  doubleVal, singleVal)

    ' Conversion from Single to Double cannot overflow.
    doubleVal = System.Convert.ToDouble(singleVal)
    System.Console.WriteLine("{0} as a Double is: {1}", _
                              singleVal, doubleVal)
End Sub

        public void CovertDoubleFloat(double doubleVal) {
            float floatVal = 0;

            // Double to float conversion cannot overflow.
                floatVal = System.Convert.ToSingle(doubleVal);
                System.Console.WriteLine("{0} as a float is {1}",
                    doubleVal, floatVal);

            // Conversion from float to double cannot overflow.
            doubleVal = System.Convert.ToDouble(floatVal);
            System.Console.WriteLine("{0} as a double is: {1}",
                floatVal, doubleVal);
        }

public:
   void CovertDoubleFloat( double doubleVal )
   {
      float floatVal = 0;

      // A conversion from Double to Single cannot overflow.
      floatVal = System::Convert::ToSingle( doubleVal );
      System::Console::WriteLine( " {0} as a float is {1}",
                                  doubleVal, floatVal );

      // A conversion from Single to Double cannot overflow.
      doubleVal = System::Convert::ToDouble( floatVal );
      System::Console::WriteLine( " {0} as a double is: {1}",
                                  floatVal, doubleVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间
Single


Convert ..::.ToDouble 方法 (String)

Convert
.
.
::
.
ToDouble 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As String _
) As Double
public static double ToDouble(
    string value
)
public:
static double ToDouble(
    String^ value
)
static member ToDouble :
        value:string -> float

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Double
与 value 中数字等效的双精度浮点数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value 不是一个有效格式的数字。
OverflowException | value 表示小于 Double..::.MinValue 或大于 Double..::.MaxValue 的数字。

在 value 上调用 Double..::.Parse 方法的结果。

如果您希望在转换失败时不处理异常，则可以转而调用 Double..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Double..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例尝试将数字字符串数组中的每个元素转换为 Double。

Dim values() As String = { "-1,035.77219", "1AFF", "1e-35", _
                           "1,635,592,999,999,999,999,999,999", "-17.455", _
                           "190.34001", "1.29e325"}
Dim result As Double

For Each value As String In values
   Try
      result = Convert.ToDouble(value)
      Console.WriteLine("Converted '{0}' to {1}.", value, result)
   Catch e As FormatException
      Console.WriteLine("Unable to convert '{0}' to a Double.", value)
   Catch e As OverflowException
      Console.WriteLine("'{0}' is outside the range of a Double.", value)
   End Try
Next
' The example displays the following output:
'       Converted '-1,035.77219' to -1035.77219.
'       Unable to convert '1AFF' to a Double.
'       Converted '1e-35' to 1E-35.
'       Converted '1,635,592,999,999,999,999,999,999' to 1.635593E+24.
'       Converted '-17.455' to -17.455.
'       Converted '190.34001' to 190.34001.
'       '1.29e325' is outside the range of a Double.

string[] values= { "-1,035.77219", "1AFF", "1e-35",
                   "1,635,592,999,999,999,999,999,999", "-17.455",
                   "190.34001", "1.29e325"};
double result;

foreach (string value in values)
{
   try {
      result = Convert.ToDouble(value);
      Console.WriteLine("Converted '{0}' to {1}.", value, result);
   }
   catch (FormatException) {
      Console.WriteLine("Unable to convert '{0}' to a Double.", value);
   }
   catch (OverflowException) {
      Console.WriteLine("'{0}' is outside the range of a Double.", value);
   }
}
// The example displays the following output:
//       Converted '-1,035.77219' to -1035.77219.
//       Unable to convert '1AFF' to a Double.
//       Converted '1e-35' to 1E-35.
//       Converted '1,635,592,999,999,999,999,999,999' to 1.635593E+24.
//       Converted '-17.455' to -17.455.
//       Converted '190.34001' to 190.34001.
//       '1.29e325' is outside the range of a Double.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (UInt16)

Convert
.
.
::
.
ToDouble 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的双精度浮点数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDouble ( _
    value As UShort _
) As Double
[CLSCompliantAttribute(false)]
public static double ToDouble(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static double ToDouble(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToDouble :
        value:uint16 -> float

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System Double
一个等于 value 的双精度浮点数。

下面的示例将 UInt16 值数组中的每个元素转换为 Double 值。

Dim numbers() As UShort = { UInt16.MinValue, 121, 12345, UInt16.MaxValue }
Dim result As Double

For Each number As UShort In numbers
   result = Convert.ToDouble(number)
   Console.WriteLine("Converted the UInt16 value {0} to {1}.", _
                     number, result)
Next
' The example displays the following output:
'       Converted the UInt16 value 0 to 0.
'       Converted the UInt16 value 121 to 121.
'       Converted the UInt16 value 12345 to 12345.
'       Converted the UInt16 value 65535 to 65535.

ushort[] numbers = { UInt16.MinValue, 121, 12345, UInt16.MaxValue };
double result;

foreach (ushort number in numbers)
{
   result = Convert.ToDouble(number);
   Console.WriteLine("Converted the UInt16 value {0} to {1}.",
                     number, result);
}
// The example displays the following output:
//       Converted the UInt16 value 0 to 0.
//       Converted the UInt16 value 121 to 121.
//       Converted the UInt16 value 12345 to 12345.
//       Converted the UInt16 value 65535 to 65535.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (UInt32)

Convert
.
.
::
.
ToDouble 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的双精度浮点数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDouble ( _
    value As UInteger _
) As Double
[CLSCompliantAttribute(false)]
public static double ToDouble(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static double ToDouble(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToDouble :
        value:uint32 -> float

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System Double
一个等于 value 的双精度浮点数。

下面的示例将 UInt32 值数组中的每个元素转换为 Double 值。

Dim numbers() As UInteger = { UInt32.MinValue, 121, 12345, UInt32.MaxValue }
Dim result As Double

For Each number As UInteger In numbers
   result = Convert.ToDouble(number)
   Console.WriteLine("Converted the UInt32 value {0} to {1}.", _
                     number, result)
Next
' The example displays the following output:
'       Converted the UInt32 value 0 to 0.
'       Converted the UInt32 value 121 to 121.
'       Converted the UInt32 value 12345 to 12345.
'       Converted the UInt32 value 4294967295 to 4294967295.

uint[] numbers = { UInt32.MinValue, 121, 12345, UInt32.MaxValue };
double result;

foreach (uint number in numbers)
{
   result = Convert.ToDouble(number);
   Console.WriteLine("Converted the UInt32 value {0} to {1}.",
                     number, result);
}
// The example displays the following output:
//       Converted the UInt32 value 0 to 0.
//       Converted the UInt32 value 121 to 121.
//       Converted the UInt32 value 12345 to 12345.
//       Converted the UInt32 value 4294967295 to 4294967295.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (UInt64)

Convert
.
.
::
.
ToDouble 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的双精度浮点数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToDouble ( _
    value As ULong _
) As Double
[CLSCompliantAttribute(false)]
public static double ToDouble(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static double ToDouble(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToDouble :
        value:uint64 -> float

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System Double
一个等于 value 的双精度浮点数。

下面的示例将 UInt64 值数组中的每个元素转换为 Double 值。

Dim numbers() As ULong = { UInt64.MinValue, 121, 12345, UInt64.MaxValue }
Dim result As Double

For Each number As ULong In numbers
   result = Convert.ToDouble(number)
   Console.WriteLine("Converted the UInt64 value {0} to {1}.", _
                     number, result)
Next
' The example displays the following output:
'    Converted the UInt64 value 0 to 0.
'    Converted the UInt64 value 121 to 121.
'    Converted the UInt64 value 12345 to 12345.
'    Converted the UInt64 value 18446744073709551615 to 1.84467440737096E+19.

ulong[] numbers = { UInt64.MinValue, 121, 12345, UInt64.MaxValue };
double result;

foreach (ulong number in numbers)
{
   result = Convert.ToDouble(number);
   Console.WriteLine("Converted the UInt64 value {0} to {1}.",
                     number, result);
}
// The example displays the following output:
//    Converted the UInt64 value 0 to 0.
//    Converted the UInt64 value 121 to 121.
//    Converted the UInt64 value 12345 to 12345.
//    Converted the UInt64 value 18446744073709551615 to 1.84467440737096E+19.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToDouble 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定对象的值转换为双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As Object, _
    provider As IFormatProvider _
) As Double
public static double ToDouble(
    Object value,
    IFormatProvider provider
)
public:
static double ToDouble(
    Object^ value,
    IFormatProvider^ provider
)
static member ToDouble :
        value:Object *
        provider:IFormatProvider -> float

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Double
与 value 等效的双精度浮点数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 未采用 Double 类型的相应格式。
InvalidCastException | value 不实现 IConvertible 接口。
OverflowException | value 表示小于 Double..::.MinValue 或大于 Double..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToDouble 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToDouble 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToDouble 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToDouble 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToDouble 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。

Imports System.Collections

Module IConvertibleProviderDemo

    ' Define the types of averaging available in the class
    ' implementing IConvertible.
    Enum AverageType as Short
        None = 0
        GeometricMean = 1
        ArithmeticMean = 2
        Median = 3
    End Enum

    ' Pass an instance of this class to methods that require an
    ' IFormatProvider. The class instance determines the type of
    ' average to calculate.
    Public Class AverageInfo
        Implements IFormatProvider

        Protected  AvgType      As AverageType

        ' Specify the type of averaging in the constructor.
        Public Sub New( avgType As AverageType )
            Me.AvgType = avgType
        End Sub

        ' This method returns a reference to the containing object
        ' if an object of AverageInfo type is requested.
        Public Function GetFormat( argType As Type ) As Object _
            Implements IFormatProvider.GetFormat

            If argType Is GetType( AverageInfo ) Then
                Return Me
            Else
                Return Nothing
            End If
        End Function

        ' Use this property to set or get the type of averaging.
        Public Property TypeOfAverage( ) As AverageType
            Get
                Return Me.AvgType
            End Get
            Set( ByVal value as AverageType )
                Me.AvgType = value
            End Set
        End Property
    End Class

    ' This class encapsulates an array of Double values and implements
    ' the IConvertible interface. Most of the IConvertible methods
    ' return an average of the array elements in one of three types:
    ' arithmetic mean, geometric mean, or median.
    Public Class DataSet
        Implements IConvertible

        Protected data              As ArrayList
        Protected defaultProvider   As AverageInfo

        ' Construct the object and add an initial list of values.
        ' Create a default format provider.
        Public Sub New( ParamArray values( ) As Double )
            data = New ArrayList( values )
            defaultProvider = New AverageInfo( _
                AverageType.ArithmeticMean )
        End Sub

        ' Add additional values with this method.
        Public Function Add( value As Double ) As Integer
            data.Add( value )
            Return data.Count
        End Function

        ' Get, set, and add values with this indexer property.
        Default Public Property Item(index As Integer) As Double
            Get
                If index >= 0 AndAlso index < data.Count Then
                    Return System.Convert.ToDouble( data( index ) )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.get] Index out of range." )
                End If
            End Get
            Set
                If index >= 0 AndAlso index < data.Count Then
                    data( index ) = value

                ElseIf index = data.Count Then
                    data.Add( value )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.set] Index out of range." )
                End If
            End Set
        End Property

        ' This property returns the number of elements in the object.
        Public ReadOnly Property Count( ) As Integer
            Get
                Return data.Count
            End Get
        End Property

        ' This method calculates the average of the object's elements.
        Protected Function Average( ByVal avgType As AverageType ) As Double

            Dim SumProd As Double
            Dim Index   As Integer

            If data.Count = 0 Then Return 0.0

            Select Case avgType

                Case AverageType.GeometricMean

                    SumProd = 1.0
                    For Index = 0 To data.Count - 1
                        SumProd *= data( Index )
                    Next Index

                    ' This calculation will not fail with negative
                    ' elements.
                    Return Math.Sign( SumProd ) * Math.Pow( _
                        Math.Abs( SumProd ), 1.0 / data.Count )

                Case AverageType.ArithmeticMean

                    SumProd = 0.0
                    For Index = 0 To data.Count - 1
                        SumProd += data( Index )
                    Next Index

                    Return SumProd / data.Count

                Case AverageType.Median

                    If data.Count Mod 2 = 0 Then
                        Return ( data( data.Count \ 2 ) + _
                            data( data.Count \ 2 - 1 ) ) / 2.0
                    Else
                        Return data( data.Count \ 2 )
                    End If
            End Select
        End Function

        ' Get the AverageInfo object from the caller's format
        ' provider, or use the local default.
        Protected Function GetAverageInfo( _
            provider As IFormatProvider ) As AverageInfo

            Dim avgInfo As AverageInfo = Nothing

            If Not provider Is Nothing Then
                avgInfo = provider.GetFormat( GetType( AverageInfo ) )
            End If

            Return IIf( avgInfo Is Nothing, defaultProvider, avgInfo )

        End Function

        ' Calculate the average and limit the range.
        Protected Function CalcNLimitAverage( min As Double, _
            max As Double, provider as IFormatProvider ) As Double

            ' Get the format provider and calculate the average.
            Dim avgInfo As AverageInfo = GetAverageInfo( provider )
            Dim avg As Double = Average( avgInfo.TypeOfAverage )

            ' Limit the range, based on the minimum and maximum values
            ' for the type.
            Return IIf( avg > max, max, IIf( avg < min, min, avg ) )

        End Function

        ' The following elements are required by IConvertible.

        ' None of these conversion functions throw exceptions. When
        ' the data is out of range for the type, the appropriate
        ' MinValue or MaxValue is used.
        Public Function GetTypeCode( ) As TypeCode _
            Implements IConvertible.GetTypeCode
            Return TypeCode.Object
        End Function

        Function ToBoolean( ByVal provider As IFormatProvider ) As _
            Boolean Implements IConvertible.ToBoolean

            ' ToBoolean is false if the dataset is empty.
            If data.Count <= 0 Then
                Return False

            ' For median averaging, ToBoolean is true if any
            ' non-discarded elements are nonzero.
            ElseIf AverageType.Median = _
                GetAverageInfo( provider ).TypeOfAverage Then

                If data.Count Mod 2 = 0 Then
                    Return ( data( data.Count \ 2 ) <> 0.0 Or _
                        data( data.Count \ 2 - 1 ) <> 0.0 )
                Else
                    Return data( data.Count \ 2 ) <> 0.0
                End If

            ' For arithmetic or geometric mean averaging, ToBoolean is
            ' true if any element of the dataset is nonzero.
            Else
                Dim Index As Integer
                For Index = 0 To data.Count - 1
                    If data( Index ) <> 0.0 Then Return True
                Next Index
                Return False
            End If
        End Function

        Function ToByte( ByVal provider As IFormatProvider ) As Byte _
            Implements IConvertible.ToByte
            Return Convert.ToByte( CalcNLimitAverage( _
                Byte.MinValue, Byte.MaxValue, provider ) )
        End Function

        Function ToChar( ByVal provider As IFormatProvider ) As Char _
            Implements IConvertible.ToChar
            Return Convert.ToChar( Convert.ToUInt16( _
                CalcNLimitAverage( 0.0, &HFFFF, provider ) ) )
        End Function

        ' Convert to DateTime by adding the calculated average as
        ' seconds to the current date and time. A valid DateTime is
        ' always returned.
        Function ToDateTime( ByVal provider As IFormatProvider ) As _
            DateTime Implements IConvertible.ToDateTime
            Dim seconds As Double = Average( _
                GetAverageInfo( provider ).TypeOfAverage )
            Try
                Return DateTime.Now.AddSeconds( seconds )
            Catch ex As ArgumentOutOfRangeException
                Return IIf( seconds < 0.0, DateTime.MinValue, _
                    DateTime.MaxValue )
            End Try
        End Function

        Function ToDecimal( ByVal provider As IFormatProvider ) As _
            Decimal Implements IConvertible.ToDecimal

            ' The Double conversion rounds Decimal.MinValue and
            ' Decimal.MaxValue to invalid Decimal values, so the
            ' following limits must be used.
            Return Convert.ToDecimal( CalcNLimitAverage( _
                -79228162514264330000000000000.0, _
                79228162514264330000000000000.0, provider ) )
        End Function

        Function ToDouble( ByVal provider As IFormatProvider) As _
            Double Implements IConvertible.ToDouble
            Return Average( GetAverageInfo( provider ).TypeOfAverage )
        End Function

        Function ToInt16( ByVal provider As IFormatProvider ) As _
            Short Implements IConvertible.ToInt16
            Return Convert.ToInt16( CalcNLimitAverage( _
                Int16.MinValue, Int16.MaxValue, provider ) )
        End Function

        Function ToInt32( ByVal provider As IFormatProvider ) As _
            Integer Implements IConvertible.ToInt32
            Return Convert.ToInt32( CalcNLimitAverage( _
                Int32.MinValue, Int32.MaxValue, provider ) )
        End Function

        Function ToInt64( ByVal provider As IFormatProvider ) As Long _
            Implements IConvertible.ToInt64

            ' The Double conversion rounds Int64.MinValue and
            ' Int64.MaxValue to invalid Long values, so the following
            ' limits must be used.
            Return Convert.ToInt64( CalcNLimitAverage( _
                -9223372036854775000, 9223372036854775000, provider ) )
        End Function

        Function ToSByte( ByVal provider As IFormatProvider ) As _
            SByte Implements IConvertible.ToSByte

            ' SByte.MinValue and SByte.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToSByte( CalcNLimitAverage( _
                -128, 127, provider ) )
        End Function

        Function ToSingle( ByVal provider As IFormatProvider ) As _
            Single Implements IConvertible.ToSingle
            Return Convert.ToSingle( CalcNLimitAverage( _
                Single.MinValue, Single.MaxValue, provider ) )
        End Function

        Function ToUInt16( ByVal provider As IFormatProvider ) As _
            UInt16 Implements IConvertible.ToUInt16

            ' UInt16.MinValue and UInt16.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt16( CalcNLimitAverage( _
                0, &HFFFF, provider ) )
        End Function

        Function ToUInt32( ByVal provider As IFormatProvider ) As _
            UInt32 Implements IConvertible.ToUInt32

            ' UInt32.MinValue and UInt32.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt32( CalcNLimitAverage( _
                0, 4294967295, provider ) )
        End Function

        Function ToUInt64( ByVal provider As IFormatProvider ) As _
            UInt64 Implements IConvertible.ToUInt64

            ' UInt64.MinValue and UInt64.MaxValue are not defined in
            ' Visual Basic. The Double conversion would have rounded
            ' UInt64.MaxValue, so the following limit must be used.
            Return Convert.ToUInt64( CalcNLimitAverage( _
                0, 18446744073709550000.0, provider ) )
        End Function

        Function ToType( ByVal conversionType As Type, _
            ByVal provider As IFormatProvider) As Object _
            Implements IConvertible.ToType
            Return Convert.ChangeType( Average( GetAverageInfo( _
                provider ).TypeOfAverage ), conversionType )
        End Function

        Overloads Function ToString( ByVal provider As IFormatProvider _
            ) As String Implements IConvertible.ToString
            Dim avgType as AverageType = _
                GetAverageInfo( provider ).TypeOfAverage
            Return String.Format( "( {0}: {1:G10} )", avgType, _
                Average( avgType ) )
        End Function
    End Class

    ' Display a DataSet with three different format providers.
    Sub DisplayDataSet( ds As DataSet )

        Dim fmt    As String      = "{0,-12}{1,20}{2,20}{3,20}"
        Dim median As AverageInfo = New AverageInfo( AverageType.Median )
        Dim geMean As AverageInfo = _
            New AverageInfo( AverageType.GeometricMean )
        Dim iX     As Integer

        ' Display the dataset elements.
        If ds.Count > 0 Then
            Console.Write( vbCrLf & "DataSet: [{0}", ds( 0 ) )
            For iX = 1 To ds.Count - 1
                Console.Write( ", {0}", ds( iX ) )
            Next iX
            Console.WriteLine( "]" & vbCrLf )
        End If

        Console.WriteLine( fmt, "Convert.", "Default", _
            "Geometric Mean", "Median" )
        Console.WriteLine( fmt, "--------", "-------", _
            "--------------", "------" )
        Console.WriteLine( fmt, "ToBoolean", _
            Convert.ToBoolean( ds, Nothing ), _
            Convert.ToBoolean( ds, geMean ), _
            Convert.ToBoolean( ds, median ) )
        Console.WriteLine( fmt, "ToByte", _
            Convert.ToByte( ds, Nothing ), _
            Convert.ToByte( ds, geMean ), _
            Convert.ToByte( ds, median ) )
        Console.WriteLine( fmt, "ToChar", _
            Convert.ToChar( ds, Nothing ), _
            Convert.ToChar( ds, geMean ), _
            Convert.ToChar( ds, median ) )
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" & _
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", _
            "ToDateTime", Convert.ToDateTime( ds, Nothing ), _
            Convert.ToDateTime( ds, geMean ), _
            Convert.ToDateTime( ds, median ) )
        Console.WriteLine( fmt, "ToDecimal", _
            Convert.ToDecimal( ds, Nothing ), _
            Convert.ToDecimal( ds, geMean ), _
            Convert.ToDecimal( ds, median ) )
        Console.WriteLine( fmt, "ToDouble", _
            Convert.ToDouble( ds, Nothing ), _
            Convert.ToDouble( ds, geMean ), _
            Convert.ToDouble( ds, median ) )
        Console.WriteLine( fmt, "ToInt16", _
            Convert.ToInt16( ds, Nothing ), _
            Convert.ToInt16( ds, geMean ), _
            Convert.ToInt16( ds, median ) )
        Console.WriteLine( fmt, "ToInt32", _
            Convert.ToInt32( ds, Nothing ), _
            Convert.ToInt32( ds, geMean ), _
            Convert.ToInt32( ds, median ) )
        Console.WriteLine( fmt, "ToInt64", _
            Convert.ToInt64( ds, Nothing ), _
            Convert.ToInt64( ds, geMean ), _
            Convert.ToInt64( ds, median ) )
        Console.WriteLine( fmt, "ToSByte", _
            Convert.ToSByte( ds, Nothing ), _
            Convert.ToSByte( ds, geMean ), _
            Convert.ToSByte( ds, median ) )
        Console.WriteLine( fmt, "ToSingle", _
            Convert.ToSingle( ds, Nothing ), _
            Convert.ToSingle( ds, geMean ), _
            Convert.ToSingle( ds, median ) )
        Console.WriteLine( fmt, "ToUInt16", _
            Convert.ToUInt16( ds, Nothing ), _
            Convert.ToUInt16( ds, geMean ), _
            Convert.ToUInt16( ds, median ) )
        Console.WriteLine( fmt, "ToUInt32", _
            Convert.ToUInt32( ds, Nothing ), _
            Convert.ToUInt32( ds, geMean ), _
            Convert.ToUInt32( ds, median ) )
        Console.WriteLine( fmt, "ToUInt64", _
            Convert.ToUInt64( ds, Nothing ), _
            Convert.ToUInt64( ds, geMean ), _
            Convert.ToUInt64( ds, median ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Convert.To<Type>( Object, " & _
            "IFormatProvider ) methods " & vbCrLf & "generates " & _
            "the following output. The example displays the " & _
            "values " & vbCrLf & "returned by the methods, " & _
            "using several IFormatProvider objects." & vbCrLf )

        Dim ds1 As New DataSet( 10.5, 22.2, 45.9, 88.7, 156.05, 297.6 )
        DisplayDataSet( ds1 )

        Dim ds2 As New DataSet( _
            359999.95, 425000, 499999.5, 775000, 1695000 )
        DisplayDataSet( ds2 )
    End Sub
End Module

' This example of the Convert.To<Type>( Object, IFormatProvider ) methods
' generates the following output. The example displays the values
' returned by the methods, using several IFormatProvider objects.
'
' DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       103                  59                  67
' ToChar                         g                   ;                   C
' ToDateTime   2003-05-13 14:52:53 2003-05-13 14:52:09 2003-05-13 14:52:17
' ToDecimal       103.491666666667    59.4332135445164                67.3
' ToDouble        103.491666666667    59.4332135445164                67.3
' ToInt16                      103                  59                  67
' ToInt32                      103                  59                  67
' ToInt64                      103                  59                  67
' ToSByte                      103                  59                  67
' ToSingle                103.4917            59.43321                67.3
' ToUInt16                     103                  59                  67
' ToUInt32                     103                  59                  67
' ToUInt64                     103                  59                  67
'
' DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       255                 255                 255
' ToChar                         ?                   ?                   ?
' ToDateTime   2003-05-22 07:27:49 2003-05-20 22:17:27 2003-05-19 09:44:29
' ToDecimal              750999.89    631577.237188435            499999.5
' ToDouble               750999.89    631577.237188435            499999.5
' ToInt16                    32767               32767               32767
' ToInt32                   751000              631577              500000
' ToInt64                   751000              631577              500000
' ToSByte                      127                 127                 127
' ToSingle                750999.9            631577.3            499999.5
' ToUInt16                   65535               65535               65535
' ToUInt32                  751000              631577              500000
' ToUInt64                  751000              631577              500000

using System;
using System.Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
public enum AverageType : short
{
    None = 0,
    GeometricMean = 1,
    ArithmeticMean = 2,
    Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
public class AverageInfo : IFormatProvider
{
    protected AverageType AvgType;

    // Specify the type of averaging in the constructor.
    public AverageInfo( AverageType avgType )
    {
        this.AvgType = avgType;
    }

    // This method returns a reference to the containing object
    // if an object of AverageInfo type is requested.
    public object GetFormat( Type argType )
    {
        if ( argType == typeof( AverageInfo ) )
            return this;
        else
            return null;
    }

    // Use this property to set or get the type of averaging.
    public AverageType TypeOfAverage
    {
        get { return this.AvgType; }
        set { this.AvgType = value; }
    }
}

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
public class DataSet : IConvertible
{
    protected ArrayList     data;
    protected AverageInfo   defaultProvider;

    // Construct the object and add an initial list of values.
    // Create a default format provider.
    public DataSet( params double[ ] values )
    {
        data = new ArrayList( values );
        defaultProvider =
            new AverageInfo( AverageType.ArithmeticMean );
    }

    // Add additional values with this method.
    public int Add( double value )
    {
        data.Add( value );
        return data.Count;
    }

    // Get, set, and add values with this indexer property.
    public double this[ int index ]
    {
        get
        {
            if( index >= 0 && index < data.Count )
                return (double)data[ index ];
            else
                throw new InvalidOperationException(
                    "[DataSet.get] Index out of range." );
        }
        set
        {
            if( index >= 0 && index < data.Count )
                data[ index ] = value;

            else if( index == data.Count )
                data.Add( value );
            else
                throw new InvalidOperationException(
                    "[DataSet.set] Index out of range." );
        }
    }

    // This property returns the number of elements in the object.
    public int Count
    {
        get { return data.Count; }
    }

    // This method calculates the average of the object's elements.
    protected double Average( AverageType avgType )
    {
        double  SumProd;

        if( data.Count == 0 )
            return 0.0;

        switch( avgType )
        {
            case AverageType.GeometricMean:

                SumProd = 1.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd *= (double)data[ Index ];

                // This calculation will not fail with negative
                // elements.
                return Math.Sign( SumProd ) * Math.Pow(
                    Math.Abs( SumProd ), 1.0 / data.Count );

            case AverageType.ArithmeticMean:

                SumProd = 0.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd += (double)data[ Index ];

                return SumProd / data.Count;

            case AverageType.Median:

                if( data.Count % 2 == 0 )
                    return ( (double)data[ data.Count / 2 ] +
                        (double)data[ data.Count / 2 - 1 ] ) / 2.0;
                else
                    return (double)data[ data.Count / 2 ];

            default:
                return 0.0;
        }
    }

    // Get the AverageInfo object from the caller's format provider,
    // or use the local default.
    protected AverageInfo GetAverageInfo( IFormatProvider provider )
    {
        AverageInfo avgInfo = null;

        if( provider != null )
            avgInfo = (AverageInfo)provider.GetFormat(
                typeof( AverageInfo ) );

        if ( avgInfo == null )
            return defaultProvider;
        else
            return avgInfo;
    }

    // Calculate the average and limit the range.
    protected double CalcNLimitAverage( double min, double max,
        IFormatProvider provider )
    {
        // Get the format provider and calculate the average.
        AverageInfo avgInfo = GetAverageInfo( provider );
        double avg = Average( avgInfo.TypeOfAverage );

        // Limit the range, based on the minimum and maximum values
        // for the type.
        return avg > max ? max : avg < min ? min : avg;

    }

    // The following elements are required by IConvertible.

    // None of these conversion functions throw exceptions. When
    // the data is out of range for the type, the appropriate
    // MinValue or MaxValue is used.
    public TypeCode GetTypeCode( )
    {
        return TypeCode.Object;
    }

    public bool ToBoolean( IFormatProvider provider )
    {
        // ToBoolean is false if the dataset is empty.
        if( data.Count <= 0 )
            return false;

        // For median averaging, ToBoolean is true if any
        // non-discarded elements are nonzero.
        else if( AverageType.Median ==
            GetAverageInfo( provider ).TypeOfAverage )
        {
            if (data.Count % 2 == 0 )
                return ( (double)data[ data.Count / 2 ] != 0.0 ||
                    (double)data[ data.Count / 2 - 1 ] != 0.0 );
            else
                return (double)data[ data.Count / 2 ] != 0.0;
        }

        // For arithmetic or geometric mean averaging, ToBoolean is
        // true if any element of the dataset is nonzero.
        else
        {
            for( int Index = 0; Index < data.Count; Index++ )
                if( (double)data[ Index ] != 0.0 )
                    return true;
            return false;
        }
    }

    public byte ToByte( IFormatProvider provider )
    {
        return Convert.ToByte( CalcNLimitAverage(
            Byte.MinValue, Byte.MaxValue, provider ) );
    }

    public char ToChar( IFormatProvider provider )
    {
        return Convert.ToChar( Convert.ToUInt16( CalcNLimitAverage(
            Char.MinValue, Char.MaxValue, provider ) ) );
    }

    // Convert to DateTime by adding the calculated average as
    // seconds to the current date and time. A valid DateTime is
    // always returned.
    public DateTime ToDateTime( IFormatProvider provider )
    {
        double seconds =
            Average( GetAverageInfo( provider ).TypeOfAverage );
        try
        {
            return DateTime.Now.AddSeconds( seconds );
        }
        catch( ArgumentOutOfRangeException )
        {
            return seconds < 0.0 ? DateTime.MinValue : DateTime.MaxValue;
        }
    }

    public decimal ToDecimal( IFormatProvider provider )
    {
        // The Double conversion rounds Decimal.MinValue and
        // Decimal.MaxValue to invalid Decimal values, so the
        // following limits must be used.
        return Convert.ToDecimal( CalcNLimitAverage(
            -79228162514264330000000000000.0,
            79228162514264330000000000000.0, provider ) );
    }

    public double ToDouble( IFormatProvider provider )
    {
        return Average( GetAverageInfo(provider).TypeOfAverage );
    }

    public short ToInt16( IFormatProvider provider )
    {
        return Convert.ToInt16( CalcNLimitAverage(
            Int16.MinValue, Int16.MaxValue, provider ) );
    }

    public int ToInt32( IFormatProvider provider )
    {
        return Convert.ToInt32( CalcNLimitAverage(
            Int32.MinValue, Int32.MaxValue, provider ) );
    }

    public long ToInt64( IFormatProvider provider )
    {
        // The Double conversion rounds Int64.MinValue and
        // Int64.MaxValue to invalid Int64 values, so the following
        // limits must be used.
        return Convert.ToInt64( CalcNLimitAverage(
            -9223372036854775000, 9223372036854775000, provider ) );
    }

    public SByte ToSByte( IFormatProvider provider )
    {
        return Convert.ToSByte( CalcNLimitAverage(
            SByte.MinValue, SByte.MaxValue, provider ) );
    }

    public float ToSingle( IFormatProvider provider )
    {
        return Convert.ToSingle( CalcNLimitAverage(
            Single.MinValue, Single.MaxValue, provider ) );
    }

    public UInt16 ToUInt16( IFormatProvider provider )
    {
        return Convert.ToUInt16( CalcNLimitAverage(
            UInt16.MinValue, UInt16.MaxValue, provider ) );
    }

    public UInt32 ToUInt32( IFormatProvider provider )
    {
        return Convert.ToUInt32( CalcNLimitAverage(
            UInt32.MinValue, UInt32.MaxValue, provider ) );
    }

    public UInt64 ToUInt64( IFormatProvider provider )
    {
        // The Double conversion rounds UInt64.MaxValue to an invalid
        // UInt64 value, so the following limit must be used.
        return Convert.ToUInt64( CalcNLimitAverage(
            0, 18446744073709550000.0, provider ) );
    }

    public object ToType( Type conversionType,
        IFormatProvider provider )
    {
        return Convert.ChangeType( Average(
            GetAverageInfo( provider ).TypeOfAverage ),
            conversionType );
    }

    public string ToString( IFormatProvider provider )
    {
        AverageType avgType = GetAverageInfo( provider ).TypeOfAverage;
        return String.Format( "( {0}: {1:G10} )", avgType,
            Average( avgType ) );
    }
}

class IConvertibleProviderDemo
{
    // Display a DataSet with three different format providers.
    public static void DisplayDataSet( DataSet ds )
    {
        string      fmt    = "{0,-12}{1,20}{2,20}{3,20}";
        AverageInfo median = new AverageInfo( AverageType.Median );
        AverageInfo geMean =
            new AverageInfo( AverageType.GeometricMean );

         // Display the dataset elements.
        if( ds.Count > 0 )
        {
            Console.Write( "\nDataSet: [{0}", ds[ 0 ] );
            for( int iX = 1; iX < ds.Count; iX++ )
                Console.Write( ", {0}", ds[ iX ] );
            Console.WriteLine( "]\n" );
        }

        Console.WriteLine( fmt, "Convert.", "Default",
            "Geometric Mean", "Median");
        Console.WriteLine( fmt, "--------", "-------",
            "--------------", "------");
        Console.WriteLine( fmt, "ToBoolean",
            Convert.ToBoolean( ds, null ),
            Convert.ToBoolean( ds, geMean ),
            Convert.ToBoolean( ds, median ) );
        Console.WriteLine( fmt, "ToByte",
            Convert.ToByte( ds, null ),
            Convert.ToByte( ds, geMean ),
            Convert.ToByte( ds, median ) );
        Console.WriteLine( fmt, "ToChar",
            Convert.ToChar( ds, null ),
            Convert.ToChar( ds, geMean ),
            Convert.ToChar( ds, median ) );
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" +
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}",
            "ToDateTime", Convert.ToDateTime( ds, null ),
            Convert.ToDateTime( ds, geMean ),
            Convert.ToDateTime( ds, median ) );
        Console.WriteLine( fmt, "ToDecimal",
            Convert.ToDecimal( ds, null ),
            Convert.ToDecimal( ds, geMean ),
            Convert.ToDecimal( ds, median ) );
        Console.WriteLine( fmt, "ToDouble",
            Convert.ToDouble( ds, null ),
            Convert.ToDouble( ds, geMean ),
            Convert.ToDouble( ds, median ) );
        Console.WriteLine( fmt, "ToInt16",
            Convert.ToInt16( ds, null ),
            Convert.ToInt16( ds, geMean ),
            Convert.ToInt16( ds, median ) );
        Console.WriteLine( fmt, "ToInt32",
            Convert.ToInt32( ds, null ),
            Convert.ToInt32( ds, geMean ),
            Convert.ToInt32( ds, median ) );
        Console.WriteLine( fmt, "ToInt64",
            Convert.ToInt64( ds, null ),
            Convert.ToInt64( ds, geMean ),
            Convert.ToInt64( ds, median ) );
        Console.WriteLine( fmt, "ToSByte",
            Convert.ToSByte( ds, null ),
            Convert.ToSByte( ds, geMean ),
            Convert.ToSByte( ds, median ) );
        Console.WriteLine( fmt, "ToSingle",
            Convert.ToSingle( ds, null ),
            Convert.ToSingle( ds, geMean ),
            Convert.ToSingle( ds, median ) );
        Console.WriteLine( fmt, "ToUInt16",
            Convert.ToUInt16( ds, null ),
            Convert.ToUInt16( ds, geMean ),
            Convert.ToUInt16( ds, median ) );
        Console.WriteLine( fmt, "ToUInt32",
            Convert.ToUInt32( ds, null ),
            Convert.ToUInt32( ds, geMean ),
            Convert.ToUInt32( ds, median ) );
        Console.WriteLine( fmt, "ToUInt64",
            Convert.ToUInt64( ds, null ),
            Convert.ToUInt64( ds, geMean ),
            Convert.ToUInt64( ds, median ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of " +
            "the Convert.To<Type>( object, IFormatProvider ) methods " +
            "\ngenerates the following output. The example " +
            "displays the values \nreturned by the methods, " +
            "using several IFormatProvider objects.\n" );

        DataSet ds1 = new DataSet(
            10.5, 22.2, 45.9, 88.7, 156.05, 297.6 );
        DisplayDataSet( ds1 );

        DataSet ds2 = new DataSet(
            359999.95, 425000, 499999.5, 775000, 1695000 );
        DisplayDataSet( ds2 );
    }
}

/*
This example of the Convert.To<Type>( object, IFormatProvider ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:04:12 2003-05-13 15:03:28 2003-05-13 15:03:35
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 07:39:08 2003-05-20 22:28:45 2003-05-19 09:55:48
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

using namespace System;
using namespace System::Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
enum class AverageType : short
{
   None = 0,
   GeometricMean = 1,
   ArithmeticMean = 2,
   Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
ref class AverageInfo: public IFormatProvider
{
protected:
   AverageType AvgType;

public:

   // Specify the type of averaging in the constructor.
   AverageInfo( AverageType avgType )
   {
      this->AvgType = avgType;
   }

   // This method returns a reference to the containing object
   // if an object of AverageInfo type is requested.
   virtual Object^ GetFormat( Type^ argType )
   {
      if ( argType == AverageInfo::typeid)
            return this;
      else
            return (Object^)0;
   }

   property AverageType TypeOfAverage
   {

      // Use this property to set or get the type of averaging.
      AverageType get()
      {
         return this->AvgType;
      }

      void set( AverageType value )
      {
         this->AvgType = value;
      }

   }

};

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
ref class DataSet: public IConvertible
{
private:
   static Object^ null = nullptr;

protected:
   ArrayList^ data;
   AverageInfo^ defaultProvider;

   // This method unboxes a boxed double.
   double UnBoxDouble( Object^ obj )
   {
      return  *static_cast<double^>(obj);
   }

public:

   // Construct the object and add an initial list of values.
   // Create a default format provider.
   DataSet( ... array<Double>^values )
   {
      data = gcnew ArrayList( (Array^)values );
      defaultProvider = gcnew AverageInfo( AverageType::ArithmeticMean );
   }

   // Add additional values with this method.
   int Add( double value )
   {
      data->Add( value );
      return data->Count;
   }

   property double Item[ int ]
   {

      // Get, set, and add values with this indexer property.
      double get( int index )
      {
         if ( index >= 0 && index < data->Count )
                  return UnBoxDouble( data[ index ] );
         else
                  throw gcnew InvalidOperationException( "[DataSet.get] Index out of range." );
      }

      void set( int index, double value )
      {
         if ( index >= 0 && index < data->Count )
                  data[ index ] = value;
         else
         if ( index == data->Count )
                  data->Add( value );
         else
                  throw gcnew InvalidOperationException( "[DataSet.set] Index out of range." );
      }

   }

   property int Count
   {

      // This property returns the number of elements in the object.
      int get()
      {
         return data->Count;
      }

   }

protected:

   // This method calculates the average of the object's elements.
   double Average( AverageType avgType )
   {
      double SumProd;
      if ( data->Count == 0 )
            return 0.0;

      switch ( avgType )
      {
         case AverageType::GeometricMean:
            SumProd = 1.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd *= UnBoxDouble( data[ Index ] );

            // This calculation will not fail with negative
            // elements.
            return Math::Sign( SumProd ) * Math::Pow( Math::Abs( SumProd ), 1.0 / data->Count );

         case AverageType::ArithmeticMean:
            SumProd = 0.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd += UnBoxDouble( data[ Index ] );
            return SumProd / data->Count;

         case AverageType::Median:
            if ( data->Count % 2 == 0 )
                        return (UnBoxDouble( data[ data->Count / 2 ] ) + UnBoxDouble( data[ data->Count / 2 - 1 ] )) / 2.0;
            else
                        return UnBoxDouble( data[ data->Count / 2 ] );

         default:
            return 0.0;
      }
   }

   // Get the AverageInfo object from the caller's format provider,
   // or use the local default.
   AverageInfo^ GetAverageInfo( IFormatProvider^ provider )
   {
      AverageInfo^ avgInfo = nullptr;
      if ( provider != nullptr )
            avgInfo = static_cast<AverageInfo^>(provider->GetFormat( AverageInfo::typeid ));

      if ( avgInfo == nullptr )
            return defaultProvider;
      else
            return avgInfo;
   }

   // Calculate the average and limit the range.
   double CalcNLimitAverage( double min, double max, IFormatProvider^ provider )
   {

      // Get the format provider and calculate the average.
      AverageInfo^ avgInfo = GetAverageInfo( provider );
      double avg = Average( avgInfo->TypeOfAverage );

      // Limit the range, based on the minimum and maximum values
      // for the type.
      return avg > max ? max : avg < min ? min : avg;
   }

public:

   // The following elements are required by IConvertible.
   // None of these conversion functions throw exceptions. When
   // the data is out of range for the type, the appropriate
   // MinValue or MaxValue is used.
   virtual TypeCode GetTypeCode()
   {
      return TypeCode::Object;
   }

   virtual bool ToBoolean( IFormatProvider^ provider )
   {

      // ToBoolean is false if the dataset is empty.
      if ( data->Count <= 0 )
            return false;
      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      else

      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      if ( AverageType::Median == GetAverageInfo( provider )->TypeOfAverage )
      {
         if ( data->Count % 2 == 0 )
                  return (UnBoxDouble( data[ data->Count / 2 ] ) != 0.0 || UnBoxDouble( data[ data->Count / 2 - 1 ] ) != 0.0);
         else
                  return UnBoxDouble( data[ data->Count / 2 ] ) != 0.0;
      }
      // For arithmetic or geometric mean averaging, ToBoolean is
      // true if any element of the dataset is nonzero.
      else
      {
         for ( int Index = 0; Index < data->Count; Index++ )
            if ( UnBoxDouble( data[ Index ] ) != 0.0 )
                        return true;
         return false;
      }
   }

   virtual Byte ToByte( IFormatProvider^ provider )
   {
      return Convert::ToByte( CalcNLimitAverage( Byte::MinValue, Byte::MaxValue, provider ) );
   }

   virtual Char ToChar( IFormatProvider^ provider )
   {
      return Convert::ToChar( Convert::ToUInt16( CalcNLimitAverage( Char::MinValue, Char::MaxValue, provider ) ) );
   }

   // Convert to DateTime by adding the calculated average as
   // seconds to the current date and time. A valid DateTime is
   // always returned.
   virtual DateTime ToDateTime( IFormatProvider^ provider )
   {
      double seconds = Average( GetAverageInfo( provider )->TypeOfAverage );
      try
      {
         return DateTime::Now.AddSeconds( seconds );
      }
      catch ( ArgumentOutOfRangeException^ )
      {
         return seconds < 0.0 ? DateTime::MinValue : DateTime::MaxValue;
      }

   }

   virtual Decimal ToDecimal( IFormatProvider^ provider )
   {

      // The Double conversion rounds Decimal.MinValue and
      // Decimal.MaxValue to invalid Decimal values, so the
      // following limits must be used.
      return Convert::ToDecimal( CalcNLimitAverage(  -79228162514264330000000000000.0, 79228162514264330000000000000.0, provider ) );
   }

   virtual double ToDouble( IFormatProvider^ provider )
   {
      return Average( GetAverageInfo( provider )->TypeOfAverage );
   }

   virtual short ToInt16( IFormatProvider^ provider )
   {
      return Convert::ToInt16( CalcNLimitAverage( Int16::MinValue, Int16::MaxValue, provider ) );
   }

   virtual int ToInt32( IFormatProvider^ provider )
   {
      return Convert::ToInt32( CalcNLimitAverage( Int32::MinValue, Int32::MaxValue, provider ) );
   }

   virtual __int64 ToInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds Int64.MinValue and
      // Int64.MaxValue to invalid Int64 values, so the following
      // limits must be used.
      return Convert::ToInt64( CalcNLimitAverage(  -9223372036854775000, 9223372036854775000, provider ) );
   }

   virtual signed char ToSByte( IFormatProvider^ provider )
   {
      return Convert::ToSByte( CalcNLimitAverage( SByte::MinValue, SByte::MaxValue, provider ) );
   }

   virtual float ToSingle( IFormatProvider^ provider )
   {
      return Convert::ToSingle( CalcNLimitAverage( Single::MinValue, Single::MaxValue, provider ) );
   }

   virtual UInt16 ToUInt16( IFormatProvider^ provider )
   {
      return Convert::ToUInt16( CalcNLimitAverage( UInt16::MinValue, UInt16::MaxValue, provider ) );
   }

   virtual UInt32 ToUInt32( IFormatProvider^ provider )
   {
      return Convert::ToUInt32( CalcNLimitAverage( UInt32::MinValue, UInt32::MaxValue, provider ) );
   }

   virtual UInt64 ToUInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds UInt64.MaxValue to an invalid
      // UInt64 value, so the following limit must be used.
      return Convert::ToUInt64( CalcNLimitAverage( 0, 18446744073709550000.0, provider ) );
   }

   virtual Object^ ToType( Type^ conversionType, IFormatProvider^ provider )
   {
      return Convert::ChangeType( Average( GetAverageInfo( provider )->TypeOfAverage ), conversionType );
   }

   virtual String^ ToString( IFormatProvider^ provider )
   {
      AverageType avgType = GetAverageInfo( provider )->TypeOfAverage;
      return String::Format( "( {0}: {1:G10} )", avgType, Average( avgType ) );
   }

};

// Display a DataSet with three different format providers.
void DisplayDataSet( DataSet^ ds )
{
   IFormatProvider^ null = nullptr;
   String^ fmt = "{0,-12}{1,20}{2,20}{3,20}";
   AverageInfo^ median = gcnew AverageInfo( AverageType::Median );
   AverageInfo^ geMean = gcnew AverageInfo( AverageType::GeometricMean );

   // Display the dataset elements.
   if ( ds->Count > 0 )
   {
      Console::Write( "\nDataSet: [{0}", ds->Item[ 0 ] );
      for ( int iX = 1; iX < ds->Count; iX++ )
         Console::Write( ", {0}", ds->Item[ iX ] );
      Console::WriteLine( "]\n" );
   }

   Console::WriteLine( fmt, "Convert::", "Default", "Geometric Mean", "Median" );
   Console::WriteLine( fmt, "---------", "-------", "--------------", "------" );
   Console::WriteLine( fmt, "ToBoolean", Convert::ToBoolean( ds, null ), Convert::ToBoolean( ds, geMean ), Convert::ToBoolean( ds, median ) );
   Console::WriteLine( fmt, "ToByte", Convert::ToByte( ds, null ), Convert::ToByte( ds, geMean ), Convert::ToByte( ds, median ) );
   Console::WriteLine( fmt, "ToChar", Convert::ToChar( ds, null ), Convert::ToChar( ds, geMean ), Convert::ToChar( ds, median ) );
   Console::WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}"
   "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", "ToDateTime", Convert::ToDateTime( ds, null ), Convert::ToDateTime( ds, geMean ), Convert::ToDateTime( ds, median ) );
   Console::WriteLine( fmt, "ToDecimal", Convert::ToDecimal( ds, null ), Convert::ToDecimal( ds, geMean ), Convert::ToDecimal( ds, median ) );
   Console::WriteLine( fmt, "ToDouble", Convert::ToDouble( ds, null ), Convert::ToDouble( ds, geMean ), Convert::ToDouble( ds, median ) );
   Console::WriteLine( fmt, "ToInt16", Convert::ToInt16( ds, null ), Convert::ToInt16( ds, geMean ), Convert::ToInt16( ds, median ) );
   Console::WriteLine( fmt, "ToInt32", Convert::ToInt32( ds, null ), Convert::ToInt32( ds, geMean ), Convert::ToInt32( ds, median ) );
   Console::WriteLine( fmt, "ToInt64", Convert::ToInt64( ds, null ), Convert::ToInt64( ds, geMean ), Convert::ToInt64( ds, median ) );
   Console::WriteLine( fmt, "ToSByte", Convert::ToSByte( ds, null ), Convert::ToSByte( ds, geMean ), Convert::ToSByte( ds, median ) );
   Console::WriteLine( fmt, "ToSingle", Convert::ToSingle( ds, null ), Convert::ToSingle( ds, geMean ), Convert::ToSingle( ds, median ) );
   Console::WriteLine( fmt, "ToUInt16", Convert::ToUInt16( ds, null ), Convert::ToUInt16( ds, geMean ), Convert::ToUInt16( ds, median ) );
   Console::WriteLine( fmt, "ToUInt32", Convert::ToUInt32( ds, null ), Convert::ToUInt32( ds, geMean ), Convert::ToUInt32( ds, median ) );
   Console::WriteLine( fmt, "ToUInt64", Convert::ToUInt64( ds, null ), Convert::ToUInt64( ds, geMean ), Convert::ToUInt64( ds, median ) );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Convert::To<Type>( Object*, IFormatProvider* ) methods "
   "\ngenerates the following output. The example "
   "displays the values \nreturned by the methods, "
   "using several IFormatProvider objects.\n" );

   // To call a [ParamArray] method in C++, you cannot just
   // list the parameters, you need to build an array.
   array<Double>^dataElem = gcnew array<Double>(6);
   dataElem[ 0 ] = 10.5;
   dataElem[ 1 ] = 22.2;
   dataElem[ 2 ] = 45.9;
   dataElem[ 3 ] = 88.7;
   dataElem[ 4 ] = 156.05;
   dataElem[ 5 ] = 297.6;
   DataSet^ ds1 = gcnew DataSet( dataElem );
   DisplayDataSet( ds1 );
   dataElem = gcnew array<Double>(5);
   dataElem[ 0 ] = 359999.95;
   dataElem[ 1 ] = 425000;
   dataElem[ 2 ] = 499999.5;
   dataElem[ 3 ] = 775000;
   dataElem[ 4 ] = 1695000;
   DataSet^ ds2 = gcnew DataSet( dataElem );
   DisplayDataSet( ds2 );
}

/*
This example of the Convert::To<Type>( Object*, IFormatProvider* ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:30:23 2003-05-13 15:29:39 2003-05-13 15:29:47
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 08:05:19 2003-05-20 22:54:57 2003-05-19 10:21:59
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToDouble 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToDouble 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    value As String, _
    provider As IFormatProvider _
) As Double
public static double ToDouble(
    string value,
    IFormatProvider provider
)
public:
static double ToDouble(
    String^ value,
    IFormatProvider^ provider
)
static member ToDouble :
        value:string *
        provider:IFormatProvider -> float

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Double
与 value 中数字等效的双精度浮点数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value 不是一个有效格式的数字。
OverflowException | value 表示小于 Double..::.MinValue 或大于 Double..::.MaxValue 的数字。

返回值是对 value 调用 Double..::.Parse 方法的结果。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 Double..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Double..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的代码示例使用 ToDouble 方法，通过一个 IFormatProvider 对象转换 Double 值的字符串表示形式。

' Example of the Convert.ToDouble( String ) and
' Convert.ToDouble( String, IFormatProvider ) methods.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module ToDoubleProviderDemo

    Dim formatter As String = "{0,-22}{1,-20}{2}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        GetExceptionType = exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    Sub ConvertToDouble( numericStr As String, _
        provider As IFormatProvider )

        Dim defaultValue    As Object
        Dim providerValue   As Object

        ' Convert numericStr to Double without a format provider.
        Try
            defaultValue = Convert.ToDouble( numericStr )
        Catch ex As Exception
            defaultValue = GetExceptionType( ex )
        End Try

        ' Convert numericStr to Double with a format provider.
        Try
            providerValue = Convert.ToDouble( numericStr, provider )
        Catch ex As Exception
            providerValue = GetExceptionType( ex )
        End Try

        Console.WriteLine( formatter, numericStr, _
            defaultValue, providerValue )
    End Sub

    Sub Main( )

        ' Create a NumberFormatInfo object and set several of its
        ' properties that apply to numbers.
        Dim provider  As NumberFormatInfo = new NumberFormatInfo( )

        provider.NumberDecimalSeparator = ","
        provider.NumberGroupSeparator = "."
        provider.NumberGroupSizes = New Integer( ) { 3 }

        Console.WriteLine( "This example of" & vbCrLf & _
            "  Convert.ToDouble( String ) and " & vbCrLf & _
            "  Convert.ToDouble( String, IFormatProvider ) " & _
            vbCrLf & "generates the " & _
            "following output when run in the [{0}] culture.", _
            CultureInfo.CurrentCulture.Name )
        Console.WriteLine( vbCrLf & _
            "Several strings are converted to Double values, " & _
            "using " & vbCrLf & "default formatting " & _
            "and a NumberFormatInfo object." & vbCrLf )
        Console.WriteLine( formatter, "String to convert", _
            "Default/exception", "Provider/exception" )
        Console.WriteLine( formatter, "-----------------", _
            "-----------------", "------------------" )

        ' Convert strings, with and without an IFormatProvider.
        ConvertToDouble( "123456789", provider )
        ConvertToDouble( "12345.6789", provider )
        ConvertToDouble( "12345,6789", provider )
        ConvertToDouble( "123,456.789", provider )
        ConvertToDouble( "123.456,789", provider )
        ConvertToDouble( "123,456,789.0123", provider )
        ConvertToDouble( "123.456.789,0123", provider )
    End Sub
End Module

' This example of
'   Convert.ToDouble( String ) and
'   Convert.ToDouble( String, IFormatProvider )
' generates the following output when run in the [en-US] culture.
'
' Several strings are converted to Double values, using
' default formatting and a NumberFormatInfo object.
'
' String to convert     Default/exception   Provider/exception
' -----------------     -----------------   ------------------
' 123456789             123456789           123456789
' 12345.6789            12345.6789          123456789
' 12345,6789            123456789           12345.6789
' 123,456.789           123456.789          FormatException
' 123.456,789           FormatException     123456.789
' 123,456,789.0123      123456789.0123      FormatException
' 123.456.789,0123      FormatException     123456789.0123

// Example of the Convert.ToDouble( String ) and
// Convert.ToDouble( String, IFormatProvider ) methods.
using System;
using System.Globalization;

class ToDoubleProviderDemo
{
    static string formatter = "{0,-22}{1,-20}{2}";

    // Get the exception type name; remove the namespace prefix.
    static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    static void ConvertToDouble( string numericStr,
        IFormatProvider provider )
    {
        object defaultValue;
        object providerValue;

        // Convert numericStr to double without a format provider.
        try
        {
            defaultValue = Convert.ToDouble( numericStr );
        }
        catch( Exception ex )
        {
            defaultValue = GetExceptionType( ex );
        }

        // Convert numericStr to double with a format provider.
        try
        {
            providerValue = Convert.ToDouble( numericStr, provider );
        }
        catch( Exception ex )
        {
            providerValue = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, numericStr, defaultValue,
            providerValue );
    }

    static void Main( )
    {
        // Create a NumberFormatInfo object and set several of its
        // properties that apply to numbers.
        NumberFormatInfo provider = new NumberFormatInfo( );

        provider.NumberDecimalSeparator = ",";
        provider.NumberGroupSeparator = ".";
        provider.NumberGroupSizes = new int[ ] { 3 };

        Console.WriteLine(
            "This example of\n  Convert.ToDouble( String ) and \n" +
            "  Convert.ToDouble( String, IFormatProvider ) \n" +
            "generates the following output when run in the " +
            "[{0}] culture.",
            CultureInfo.CurrentCulture.Name );
        Console.WriteLine( "\nSeveral " +
            "strings are converted to double values, using \n" +
            "default formatting and a NumberFormatInfo object.\n");
        Console.WriteLine( formatter, "String to convert",
            "Default/exception", "Provider/exception" );
        Console.WriteLine( formatter, "-----------------",
            "-----------------", "------------------" );

        // Convert strings, with and without an IFormatProvider.
        ConvertToDouble( "123456789", provider );
        ConvertToDouble( "12345.6789", provider );
        ConvertToDouble( "12345,6789", provider );
        ConvertToDouble( "123,456.789", provider );
        ConvertToDouble( "123.456,789", provider );
        ConvertToDouble( "123,456,789.0123", provider );
        ConvertToDouble( "123.456.789,0123", provider );
    }
}

/*
This example of
  Convert.ToDouble( String ) and
  Convert.ToDouble( String, IFormatProvider )
generates the following output when run in the [en-US] culture.

Several strings are converted to double values, using
default formatting and a NumberFormatInfo object.

String to convert     Default/exception   Provider/exception
-----------------     -----------------   ------------------
123456789             123456789           123456789
12345.6789            12345.6789          123456789
12345,6789            123456789           12345.6789
123,456.789           123456.789          FormatException
123.456,789           FormatException     123456.789
123,456,789.0123      123456789.0123      FormatException
123.456.789,0123      FormatException     123456789.0123
*/

// Example of the Convert::ToDouble( String ) and
// Convert::ToDouble( String, IFormatProvider ) methods.
using namespace System;
using namespace System::Globalization;
const __wchar_t * formatter = L"{0,-22}{1,-20}{2}";

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

void ConvertToDouble( String^ numericStr, IFormatProvider^ provider )
{
   Object^ defaultValue;
   Object^ providerValue;

   // Convert numericStr to Double without a format provider.
   try
   {
      defaultValue = Convert::ToDouble( numericStr );
   }
   catch ( Exception^ ex )
   {
      defaultValue = GetExceptionType( ex );
   }

   // Convert numericStr to Double with a format provider.
   try
   {
      providerValue = Convert::ToDouble( numericStr, provider );
   }
   catch ( Exception^ ex )
   {
      providerValue = GetExceptionType( ex );
   }

   Console::WriteLine( gcnew String( formatter ), numericStr, defaultValue, providerValue );
}

int main()
{

   // Create a NumberFormatInfo object and set several of its
   // properties that apply to numbers.
   NumberFormatInfo^ provider = gcnew NumberFormatInfo;
   provider->NumberDecimalSeparator = ",";
   provider->NumberGroupSeparator = ".";
   array<Int32>^sizes = {3};
   provider->NumberGroupSizes = sizes;
   Console::WriteLine( "This example of\n  Convert::ToDouble( String* ) and \n"
   "  Convert::ToDouble( String*, IFormatProvider* ) \n"
   "generates the following output when run in the "
   "[{0}] culture.", CultureInfo::CurrentCulture->Name );
   Console::WriteLine( "\nSeveral "
   "strings are converted to Double values, using \n"
   "default formatting and a NumberFormatInfo object.\n" );
   Console::WriteLine( gcnew String( formatter ), "String to convert", "Default/exception", "Provider/exception" );
   Console::WriteLine( gcnew String( formatter ), "-----------------", "-----------------", "------------------" );

   // Convert strings, with and without an IFormatProvider.
   ConvertToDouble( "123456789", provider );
   ConvertToDouble( "12345.6789", provider );
   ConvertToDouble( "12345,6789", provider );
   ConvertToDouble( "123,456.789", provider );
   ConvertToDouble( "123.456,789", provider );
   ConvertToDouble( "123,456,789.0123", provider );
   ConvertToDouble( "123.456.789,0123", provider );
}

/*
This example of
  Convert::ToDouble( String* ) and
  Convert::ToDouble( String*, IFormatProvider* )
generates the following output when run in the [en-US] culture.

Several strings are converted to Double values, using
default formatting and a NumberFormatInfo object.

String to convert     Default/exception   Provider/exception
-----------------     -----------------   ------------------
123456789             123456789           123456789
12345.6789            12345.6789          123456789
12345,6789            123456789           12345.6789
123,456.789           123456.789          FormatException
123.456,789           FormatException     123456.789
123,456,789.0123      123456789.0123      FormatException
123.456.789,0123      FormatException     123456789.0123
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToDouble 重载
System 命名空间


Convert ..::.ToInt16 方法

Convert
.
.
::
.
ToInt16 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 16 位带符号整数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToInt16 方法 (Boolean)

Convert
.
.
::
.
ToInt16 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Boolean _
) As Short
public static short ToInt16(
    bool value
)
public:
static short ToInt16(
    bool value
)
static member ToInt16 :
        value:bool -> int16

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System Int16
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例将布尔值 true 和 false 转换为 Int16 值。

Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True

Console.WriteLine("{0} converts to {1}.", falseFlag, _
                  Convert.ToInt16(falseFlag))
Console.WriteLine("{0} converts to {1}.", trueFlag, _
                  Convert.ToInt16(trueFlag))
' The example displays the following output:
'       False converts to 0.
'       True converts to 1.

bool falseFlag = false;
bool trueFlag = true;

Console.WriteLine("{0} converts to {1}.", falseFlag,
                  Convert.ToInt16(falseFlag));
Console.WriteLine("{0} converts to {1}.", trueFlag,
                  Convert.ToInt16(trueFlag));
// The example displays the following output:
//       False converts to 0.
//       True converts to 1.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (Byte)

Convert
.
.
::
.
ToInt16 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Byte _
) As Short
public static short ToInt16(
    byte value
)
public:
static short ToInt16(
    unsigned char value
)
static member ToInt16 :
        value:byte -> int16

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System Int16
与 value 等效的 16 位带符号整数。

下面的示例将 Byte 值数组中的每个元素转换为 16 位带符号整数。

Dim bytes() As Byte = { Byte.MinValue, 14, 122, Byte.MaxValue}
Dim result As Short

For Each byteValue As Byte In bytes
   result = Convert.ToInt16(byteValue)
   Console.WriteLine("The Byte value {0} converts to {1}.", _
                     byteValue, result)
Next
' The example displays the following output:
'       The Byte value 0 converts to 0.
'       The Byte value 14 converts to 14.
'       The Byte value 122 converts to 122.
'       The Byte value 255 converts to 255.

byte[] bytes = { Byte.MinValue, 14, 122, Byte.MaxValue};
short result;

foreach (byte byteValue in bytes)
{
   result = Convert.ToInt16(byteValue);
   Console.WriteLine("The Byte value {0} converts to {1}.",
                     byteValue, result);
}
// The example displays the following output:
//       The Byte value 0 converts to 0.
//       The Byte value 14 converts to 14.
//       The Byte value 122 converts to 122.
//       The Byte value 255 converts to 255.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (Char)

Convert
.
.
::
.
ToInt16 方法 (Char)
Convert 类

将指定的 Unicode 字符的值转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Char _
) As Short
public static short ToInt16(
    char value
)
public:
static short ToInt16(
    wchar_t value
)
static member ToInt16 :
        value:char -> int16

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Int16
与 value 等效的 16 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int16..::.MaxValue。

下面的示例尝试将 Char 值的数组中的每个元素转换为 16 位带符号的整数。

Dim chars() As Char = { "a"c, "z"c, ChrW(7), ChrW(1023), _
                        ChrW(Short.MaxValue), ChrW(&hFFFE) }
Dim result As Short

For Each ch As Char in chars
   Try
      result = Convert.ToInt16(ch)
      Console.WriteLine("'{0}' converts to {1}.", ch, result)
   Catch e As OverflowException
      Console.WriteLine("Unable to convert u+{0} to an Int16.", _
                        AscW(ch).ToString("X4"))
   End Try
Next
' The example displays the following output:
'       'a' converts to 97.
'       'z' converts to 122.
'       '' converts to 7.
'       '?' converts to 1023.
'       '?' converts to 32767.
'       Unable to convert u+FFFE to a UInt16.

char[] chars = { 'a', 'z', '\x0007', '\x03FF',
                 '\x7FFF', '\xFFFE' };
short result;

foreach (char ch in chars)
{
   try {
      result = Convert.ToInt16(ch);
      Console.WriteLine("'{0}' converts to {1}.", ch, result);
   }
   catch (OverflowException) {
      Console.WriteLine("Unable to convert u+{0} to an Int16.",
                        ((int)ch).ToString("X4"));
   }
}
// The example displays the following output:
//       'a' converts to 97.
//       'z' converts to 122.
//       '' converts to 7.
//       '?' converts to 1023.
//       '?' converts to 32767.
//       Unable to convert u+FFFE to a UInt16.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (DateTime)

Convert
.
.
::
.
ToInt16 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As DateTime _
) As Short
public static short ToInt16(
    DateTime value
)
public:
static short ToInt16(
    DateTime value
)
static member ToInt16 :
        value:DateTime -> int16

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System Int16
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (Decimal)

Convert
.
.
::
.
ToInt16 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Decimal _
) As Short
public static short ToInt16(
    decimal value
)
public:
static short ToInt16(
    Decimal value
)
static member ToInt16 :
        value:decimal -> int16

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System Int16
value，舍入为最接近的 16 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 16 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Int16..::.MaxValue 或小于 Int16..::.MinValue。

下面的示例尝试将 Decimal 值的数组中的每个元素转换为 16 位带符号的整数。该示例阐释了 Decimal 值的任何小数部分被舍入时执行转换。 下面的示例尝试将 Decimal 值的数组中的每个元素转换为 16 位带符号的整数。该示例阐释了 Decimal 值的任何小数部分被舍入时执行转换。

Dim values() As Decimal = { Decimal.MinValue, -1034.23d, -12d, 0d, 147d, _
                            9214.16d, Decimal.MaxValue }
Dim result As Short

For Each value As Decimal In values
   Try
      result = Convert.ToInt16(value)
      Console.WriteLine("Converted {0} to {1}.", value, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int16 type.", _
                        value)
   End Try
Next
' The example displays the following output:
'    -79228162514264337593543950335 is outside the range of the Int16 type.
'    Converted -1034.23 to -1034.
'    Converted -12 to -12.
'    Converted 0 to 0.
'    Converted 147 to 147.
'    Converted 9214.16 to 9214.
'    79228162514264337593543950335 is outside the range of the Int16 type.

decimal[] values = { Decimal.MinValue, -1034.23m, -12m, 0m, 147m,
                            9214.16m, Decimal.MaxValue };
short result;

foreach (decimal value in values)
{
   try {
      result = Convert.ToInt16(value);
      Console.WriteLine("Converted {0} to {1}.", value, result);
   }
   catch (OverflowException)
   {
      Console.WriteLine("{0} is outside the range of the Int16 type.",
                        value);
   }
}
// The example displays the following output:
//    -79228162514264337593543950335 is outside the range of the Int16 type.
//    Converted -1034.23 to -1034.
//    Converted -12 to -12.
//    Converted 0 to 0.
//    Converted 147 to 147.
//    Converted 9214.16 to 9214.
//    79228162514264337593543950335 is outside the range of the Int16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间
Math Round


Convert ..::.ToInt16 方法 (Double)

Convert
.
.
::
.
ToInt16 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Double _
) As Short
public static short ToInt16(
    double value
)
public:
static short ToInt16(
    double value
)
static member ToInt16 :
        value:float -> int16

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System Int16
value，舍入为最接近的 16 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 16 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Int16..::.MaxValue 或小于 Int16..::.MinValue。

下面的示例将 Double 值数组中的每个元素转换为 16 位带符号整数。该示例阐释了 Double 值的任何小数部分被舍入之前执行转换。 下面的示例将 Double 值数组中的每个元素转换为 16 位带符号整数。该示例阐释了 Double 值的任何小数部分被舍入之前执行转换。

Dim values() As Double = { Double.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Double.MaxValue }
Dim result As Short

For Each value As Double In values
   Try
      result = Convert.ToInt16(value)
      Console.WriteLine("Converted {0} to {1}.", value, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int16 type.", value)
   End Try
Next
'       -1.79769313486232E+308 is outside the range of the Int16 type.
'       -13800000000 is outside the range of the Int16 type.
'       Converted -1023.299 to -1023.
'       Converted -12.98 to -13.
'       Converted 0 to 0.
'       Converted 9.113E-16 to 0.
'       Converted 103.919 to 104.
'       Converted 17834.191 to 17834.
'       1.79769313486232E+308 is outside the range of the Int16 type.

double[] values = { Double.MinValue, -1.38e10, -1023.299, -12.98,
                    0, 9.113e-16, 103.919, 17834.191, Double.MaxValue };
short result;

foreach (double value in values)
{
   try {
      result = Convert.ToInt16(value);
      Console.WriteLine("Converted {0} to {1}.", value, result);
   }
   catch (OverflowException)
   {
      Console.WriteLine("{0} is outside the range of the Int16 type.", value);
   }
}
//       -1.79769313486232E+308 is outside the range of the Int16 type.
//       -13800000000 is outside the range of the Int16 type.
//       Converted -1023.299 to -1023.
//       Converted -12.98 to -13.
//       Converted 0 to 0.
//       Converted 9.113E-16 to 0.
//       Converted 103.919 to 104.
//       Converted 17834.191 to 17834.
//       1.79769313486232E+308 is outside the range of the Int16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间
Double
Math Round


Convert ..::.ToInt16 方法 (Int16)

Convert
.
.
::
.
ToInt16 方法 (Int16)
Convert 类

返回指定的 16 位带符号整数；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Short _
) As Short
public static short ToInt16(
    short value
)
public:
static short ToInt16(
    short value
)
static member ToInt16 :
        value:int16 -> int16

参数

value
类型： System Int16
要返回的 16 位带符号整数。

返回值

类型： System Int16
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (Int32)

Convert
.
.
::
.
ToInt16 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Integer _
) As Short
public static short ToInt16(
    int value
)
public:
static short ToInt16(
    int value
)
static member ToInt16 :
        value:int -> int16

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System Int16
与 value 等效的 16 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int16..::.MaxValue 或小于 Int16..::.MinValue。

下面的示例尝试将整数数组中的每个元素转换为 16 位带符号的整数。

Dim numbers() As Integer = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue }
Dim result As Short

For Each number As Integer In numbers
   Try
      result = Convert.ToInt16(number)
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int32 value -2147483648 is outside the range of the Int16 type.
'    Converted the Int32 value -1 to a Int16 value -1.
'    Converted the Int32 value 0 to a Int16 value 0.
'    Converted the Int32 value 121 to a Int16 value 121.
'    Converted the Int32 value 340 to a Int16 value 340.
'    The Int32 value 2147483647 is outside the range of the Int16 type.

int[] numbers = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue };
short result;

foreach (int number in numbers)
{
   try {
      result = Convert.ToInt16(number);
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int32 value -2147483648 is outside the range of the Int16 type.
//    Converted the Int32 value -1 to a Int16 value -1.
//    Converted the Int32 value 0 to a Int16 value 0.
//    Converted the Int32 value 121 to a Int16 value 121.
//    Converted the Int32 value 340 to a Int16 value 340.
//    The Int32 value 2147483647 is outside the range of the Int16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (Int64)

Convert
.
.
::
.
ToInt16 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Long _
) As Short
public static short ToInt16(
    long value
)
public:
static short ToInt16(
    long long value
)
static member ToInt16 :
        value:int64 -> int16

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System Int16
与 value 等效的 16 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int16..::.MaxValue 或小于 Int16..::.MinValue。

下面的示例尝试将长整型数组中的每个元素转换为 16 位带符号的整数。

Dim numbers() As Long = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue }
Dim result As Short
For Each number As Long In numbers
   Try
      result = Convert.ToInt16(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int64 value -9223372036854775808 is outside the range of the Int16 type.
'    Converted the Int64 value -1 to the Int16 value -1.
'    Converted the Int64 value 0 to the Int16 value 0.
'    Converted the Int64 value 121 to the Int16 value 121.
'    Converted the Int64 value 340 to the Int16 value 340.
'    The Int64 value 9223372036854775807 is outside the range of the Int16 type.

long[] numbers = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue };
short result;

foreach (long number in numbers)
{
   try {
      result = Convert.ToInt16(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int64 value -9223372036854775808 is outside the range of the Int16 type.
//    Converted the Int64 value -1 to the Int16 value -1.
//    Converted the Int64 value 0 to the Int16 value 0.
//    Converted the Int64 value 121 to the Int16 value 121.
//    Converted the Int64 value 340 to the Int16 value 340.
//    The Int64 value 9223372036854775807 is outside the range of the Int16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (Object)

Convert
.
.
::
.
ToInt16 方法 (Object)
Convert 类

将指定对象的值转换为 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Object _
) As Short
public static short ToInt16(
    Object value
)
public:
static short ToInt16(
    Object^ value
)
static member ToInt16 :
        value:Object -> int16

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Int16
与 value 等效的 16 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 未采用 Int16 类型的相应格式。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 Int16..::.MinValue 或大于 Int16..::.MaxValue 的数字。

调用 value 的基础类型的 IConvertible..::.ToInt16 方法的结果。

下面的示例尝试将对象数组中的每个元素转换为 16 位带符号的整数。

Dim values() As Object = { True, -12, 163, 935, "x"c, #5/12/2009#, _
                           "104", "103.0", "-1", _
                           "1.00e2", "One", 1.00e2}
Dim result As Short

For Each value As Object In values
   Try
      result = Convert.ToInt16(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("No conversion to an Int16 exists for the {0} value {1}.", _
                        value.GetType().Name, value)

   End Try
Next
' The example displays the following output:
'    Converted the Boolean value True to the Int16 value 1.
'    Converted the Int32 value -12 to the Int16 value -12.
'    Converted the Int32 value 163 to the Int16 value 163.
'    Converted the Int32 value 935 to the Int16 value 935.
'    Converted the Char value x to the Int16 value 120.
'    No conversion to an Int16 exists for the DateTime value 5/12/2009 12:00:00 AM.
'    Converted the String value 104 to the Int16 value 104.
'    The String value 103.0 is not in a recognizable format.
'    Converted the String value -1 to the Int16 value -1.
'    The String value 1.00e2 is not in a recognizable format.
'    The String value One is not in a recognizable format.
'    Converted the Double value 100 to the Int16 value 100.

object[] values= { true, -12, 163, 935, 'x', new DateTime(2009, 5, 12),
                   "104", "103.0", "-1", "1.00e2", "One", 1.00e2};
short result;

foreach (object value in values)
{
   try {
      result = Convert.ToInt16(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("No conversion to an Int16 exists for the {0} value {1}.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    Converted the Boolean value True to the Int16 value 1.
//    Converted the Int32 value -12 to the Int16 value -12.
//    Converted the Int32 value 163 to the Int16 value 163.
//    Converted the Int32 value 935 to the Int16 value 935.
//    Converted the Char value x to the Int16 value 120.
//    No conversion to an Int16 exists for the DateTime value 5/12/2009 12:00:00 AM.
//    Converted the String value 104 to the Int16 value 104.
//    The String value 103.0 is not in a recognizable format.
//    Converted the String value -1 to the Int16 value -1.
//    The String value 1.00e2 is not in a recognizable format.
//    The String value One is not in a recognizable format.
//    Converted the Double value 100 to the Int16 value 100.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (SByte)

Convert
.
.
::
.
ToInt16 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的 16 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt16 ( _
    value As SByte _
) As Short
[CLSCompliantAttribute(false)]
public static short ToInt16(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static short ToInt16(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToInt16 :
        value:sbyte -> int16

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System Int16
与 value 等效的 8 位带符号整数。

下面的示例将带符号字节数组中的每个元素转换为带符号的 16 位整数。

Dim numbers() As SByte = { SByte.MinValue, -1, 0, 10, SByte.MaxValue }
Dim result As Short

For Each number As SByte In numbers
   result = Convert.ToInt16(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'       Converted the SByte value -128 to the Int16 value -128.
'       Converted the SByte value -1 to the Int16 value -1.
'       Converted the SByte value 0 to the Int16 value 0.
'       Converted the SByte value 10 to the Int16 value 10.
'       Converted the SByte value 127 to the Int16 value 127.

sbyte[] numbers = { SByte.MinValue, -1, 0, 10, SByte.MaxValue };
short result;

foreach (sbyte number in numbers)
{
   result = Convert.ToInt16(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//       Converted the SByte value -128 to the Int16 value -128.
//       Converted the SByte value -1 to the Int16 value -1.
//       Converted the SByte value 0 to the Int16 value 0.
//       Converted the SByte value 10 to the Int16 value 10.
//       Converted the SByte value 127 to the Int16 value 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (Single)

Convert
.
.
::
.
ToInt16 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Single _
) As Short
public static short ToInt16(
    float value
)
public:
static short ToInt16(
    float value
)
static member ToInt16 :
        value:float32 -> int16

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System Int16
value，舍入为最接近的 16 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 16 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Int16..::.MaxValue 或小于 Int16..::.MinValue。

下面的示例尝试将 Single 值的数组中的每个元素转换为 16 位带符号的整数。

Dim values() As Single = { Single.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Single.MaxValue }
Dim result As Short

For Each value As Single In values
   Try
      result = Convert.ToInt16(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int16 type.", value)
   End Try
Next
' The example displays the following output:
'    -3.40282346638529E+38 is outside the range of the Int16 type.
'    -13799999488 is outside the range of the Int16 type.
'    Converted the Double value -1023.29901123047 to the Int16 value -1023.
'    Converted the Double value -12.9799995422363 to the Int16 value -13.
'    Converted the Double value 0 to the Int16 value 0.
'    Converted the Double value 9.11299983940444E-16 to the Int16 value 0.
'    Converted the Double value 103.918998718262 to the Int16 value 104.
'    Converted the Double value 17834.19140625 to the Int16 value 17834.
'    3.40282346638529E+38 is outside the range of the Int16 type.

float[] values = { Single.MinValue, -1.38e10f, -1023.299f, -12.98f,
                   0f, 9.113e-16f, 103.919f, 17834.191f, Single.MaxValue };
short result;

foreach (float value in values)
{
   try {
      result = Convert.ToInt16(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value, result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int16 type.", value);
   }
}
// The example displays the following output:
//    -3.40282346638529E+38 is outside the range of the Int16 type.
//    -13799999488 is outside the range of the Int16 type.
//    Converted the Double value -1023.29901123047 to the Int16 value -1023.
//    Converted the Double value -12.9799995422363 to the Int16 value -13.
//    Converted the Double value 0 to the Int16 value 0.
//    Converted the Double value 9.11299983940444E-16 to the Int16 value 0.
//    Converted the Double value 103.918998718262 to the Int16 value 104.
//    Converted the Double value 17834.19140625 to the Int16 value 17834.
//    3.40282346638529E+38 is outside the range of the Int16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间
Single
Math Round


Convert ..::.ToInt16 方法 (String)

Convert
.
.
::
.
ToInt16 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As String _
) As Short
public static short ToInt16(
    string value
)
public:
static short ToInt16(
    String^ value
)
static member ToInt16 :
        value:string -> int16

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Int16
与 value 中数字等效的 16 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 Int16..::.MinValue 或大于 Int16..::.MaxValue 的数字。

如果您希望在转换失败时不处理异常，则可以转而调用 Int16..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Int16..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的代码示例使用 ToInt16 方法，通过默认格式设置转换 16 位整数的字符串表示形式。

' Example of the Convert.ToInt16( String ) and
' Convert.ToInt16( String, IFormatProvider ) methods.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module ToInt16ProviderDemo

    Dim format As String = "{0,-20}{1,-20}{2}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    Sub ConvertToInt16( numericStr As String, _
        provider As IFormatProvider )

        Dim defaultValue    As Object
        Dim providerValue   As Object

        ' Convert numericStr to Int16 without a format provider.
        Try
            defaultValue = Convert.ToInt16( numericStr )
        Catch ex As Exception
            defaultValue = GetExceptionType( ex )
        End Try

        ' Convert numericStr to Int16 with a format provider.
        Try
            providerValue = Convert.ToInt16( numericStr, provider )
        Catch ex As Exception
            providerValue = GetExceptionType( ex )
        End Try

        Console.WriteLine( format, numericStr, _
            defaultValue, providerValue )
    End Sub

    Sub Main( )

        ' Create a NumberFormatInfo object and set several of its
        ' properties that apply to numbers.
        Dim provider  As NumberFormatInfo = new NumberFormatInfo( )

        ' These properties affect the conversion.
        provider.NegativeSign = "neg "
        provider.PositiveSign = "pos "

        ' These properties do not affect the conversion.
        ' The input string cannot have decimal and group separators.
        provider.NumberDecimalSeparator = "."
        provider.NumberGroupSeparator = ","
        provider.NumberGroupSizes = New Integer( ) { 3 }
        provider.NumberNegativePattern = 0

        Console.WriteLine( "This example of" & vbCrLf & _
            "  Convert.ToInt16( String ) and " & vbCrLf & _
            "  Convert.ToInt16( String, IFormatProvider ) " & _
            vbCrLf & "generates the following output. It " & _
            "converts several strings to " & vbCrLf & "Short " & _
            "values, using default formatting " & _
            "or a NumberFormatInfo object." & vbCrLf )
        Console.WriteLine( format, "String to convert", _
            "Default/exception", "Provider/exception" )
        Console.WriteLine( format, "-----------------", _
            "-----------------", "------------------" )

        ' Convert strings, with and without an IFormatProvider.
        ConvertToInt16( "12345", provider )
        ConvertToInt16( "+12345", provider )
        ConvertToInt16( "pos 12345", provider )
        ConvertToInt16( "-12345", provider )
        ConvertToInt16( "neg 12345", provider )
        ConvertToInt16( "12345.", provider )
        ConvertToInt16( "12,345", provider )
        ConvertToInt16( "(12345)", provider )
        ConvertToInt16( "32768", provider )
        ConvertToInt16( "-32769", provider )
    End Sub
End Module

' This example of
'   Convert.ToInt16( String ) and
'   Convert.ToInt16( String, IFormatProvider )
' generates the following output. It converts several strings to
' Short values, using default formatting or a NumberFormatInfo object.
'
' String to convert   Default/exception   Provider/exception
' -----------------   -----------------   ------------------
' 12345               12345               12345
' +12345              12345               FormatException
' pos 12345           FormatException     12345
' -12345              -12345              FormatException
' neg 12345           FormatException     -12345
' 12345.              FormatException     FormatException
' 12,345              FormatException     FormatException
' (12345)             FormatException     FormatException
' 32768               OverflowException   OverflowException
' -32769              OverflowException   FormatException

// Example of the Convert.ToInt16( string ) and
// Convert.ToInt16( string, IFormatProvider ) methods.
using System;
using System.Globalization;

class ToInt16ProviderDemo
{
    static string format = "{0,-20}{1,-20}{2}";

     // Get the exception type name; remove the namespace prefix.
    static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    static void ConvertToInt16( string numericStr,
        IFormatProvider provider )
    {
        object defaultValue;
        object providerValue;

        // Convert numericStr to Int16 without a format provider.
        try
        {
            defaultValue = Convert.ToInt16( numericStr );
        }
        catch( Exception ex )
        {
            defaultValue = GetExceptionType( ex );
        }

        // Convert numericStr to Int16 with a format provider.
        try
        {
            providerValue = Convert.ToInt16( numericStr, provider );
        }
        catch( Exception ex )
        {
            providerValue = GetExceptionType( ex );
        }

        Console.WriteLine( format, numericStr,
            defaultValue, providerValue );
    }

    public static void Main( )
    {
        // Create a NumberFormatInfo object and set several of its
        // properties that apply to numbers.
        NumberFormatInfo provider = new NumberFormatInfo();

        // These properties affect the conversion.
        provider.NegativeSign = "neg ";
        provider.PositiveSign = "pos ";

        // These properties do not affect the conversion.
        // The input string cannot have decimal and group separators.
        provider.NumberDecimalSeparator = ".";
        provider.NumberGroupSeparator = ",";
        provider.NumberGroupSizes = new int[ ] { 3 };
        provider.NumberNegativePattern = 0;

        Console.WriteLine("This example of\n" +
            "  Convert.ToInt16( string ) and \n" +
            "  Convert.ToInt16( string, IFormatProvider ) " +
            "\ngenerates the following output. It converts " +
            "several strings to \nshort values, using " +
            "default formatting or a NumberFormatInfo object.\n" );
        Console.WriteLine( format, "String to convert",
            "Default/exception", "Provider/exception" );
        Console.WriteLine( format, "-----------------",
            "-----------------", "------------------" );

        // Convert strings, with and without an IFormatProvider.
        ConvertToInt16( "12345", provider );
        ConvertToInt16( "+12345", provider );
        ConvertToInt16( "pos 12345", provider );
        ConvertToInt16( "-12345", provider );
        ConvertToInt16( "neg 12345", provider );
        ConvertToInt16( "12345.", provider );
        ConvertToInt16( "12,345", provider );
        ConvertToInt16( "(12345)", provider );
        ConvertToInt16( "32768", provider );
        ConvertToInt16( "-32769", provider );
    }
}

/*
This example of
  Convert.ToInt16( string ) and
  Convert.ToInt16( string, IFormatProvider )
generates the following output. It converts several strings to
short values, using default formatting or a NumberFormatInfo object.

String to convert   Default/exception   Provider/exception
-----------------   -----------------   ------------------
12345               12345               12345
+12345              12345               FormatException
pos 12345           FormatException     12345
-12345              -12345              FormatException
neg 12345           FormatException     -12345
12345.              FormatException     FormatException
12,345              FormatException     FormatException
(12345)             FormatException     FormatException
32768               OverflowException   OverflowException
-32769              OverflowException   FormatException
*/

// Example of the Convert::ToInt16( String* ) and
// Convert::ToInt16( String*, IFormatProvider* ) methods.
using namespace System;
using namespace System::Globalization;
const __wchar_t * protoFmt = L"{0,-20}{1,-20}{2}";

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

void ConvertToInt16( String^ numericStr, IFormatProvider^ provider )
{
   Object^ defaultValue;
   Object^ providerValue;

   // Convert numericStr to Int16 without a format provider.
   try
   {
      defaultValue = Convert::ToInt16( numericStr );
   }
   catch ( Exception^ ex )
   {
      defaultValue = GetExceptionType( ex );
   }

   // Convert numericStr to Int16 with a format provider.
   try
   {
      providerValue = Convert::ToInt16( numericStr, provider );
   }
   catch ( Exception^ ex )
   {
      providerValue = GetExceptionType( ex );
   }

   Console::WriteLine( gcnew String( protoFmt ), numericStr, defaultValue, providerValue );
}

int main()
{

   // Create a NumberFormatInfo object and set several of its
   // properties that apply to numbers.
   NumberFormatInfo^ provider = gcnew NumberFormatInfo;

   // These properties affect the conversion.
   provider->NegativeSign = "neg ";
   provider->PositiveSign = "pos ";

   // These properties do not affect the conversion.
   // The input string cannot have decimal and group separators.
   provider->NumberDecimalSeparator = ".";
   provider->NumberGroupSeparator = ",";
   array<Int32>^sizes = {3};
   provider->NumberGroupSizes = sizes;
   provider->NumberNegativePattern = 0;
   Console::WriteLine( "This example of\n"
   "  Convert::ToInt16( String* ) and \n"
   "  Convert::ToInt16( String*, IFormatProvider* ) "
   "\ngenerates the following output. It converts "
   "several strings to \nshort values, using "
   "default formatting or a NumberFormatInfo object.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "String to convert", "Default/exception", "Provider/exception" );
   Console::WriteLine( gcnew String( protoFmt ), "-----------------", "-----------------", "------------------" );

   // Convert strings, with and without an IFormatProvider.
   ConvertToInt16( "12345", provider );
   ConvertToInt16( "+12345", provider );
   ConvertToInt16( "pos 12345", provider );
   ConvertToInt16( "-12345", provider );
   ConvertToInt16( "neg 12345", provider );
   ConvertToInt16( "12345.", provider );
   ConvertToInt16( "12,345", provider );
   ConvertToInt16( "(12345)", provider );
   ConvertToInt16( "32768", provider );
   ConvertToInt16( "-32769", provider );
}

/*
This example of
  Convert::ToInt16( String* ) and
  Convert::ToInt16( String*, IFormatProvider* )
generates the following output. It converts several strings to
short values, using default formatting or a NumberFormatInfo object.

String to convert   Default/exception   Provider/exception
-----------------   -----------------   ------------------
12345               12345               12345
+12345              12345               FormatException
pos 12345           FormatException     12345
-12345              -12345              FormatException
neg 12345           FormatException     -12345
12345.              FormatException     FormatException
12,345              FormatException     FormatException
(12345)             FormatException     FormatException
32768               OverflowException   OverflowException
-32769              OverflowException   FormatException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间
Int16 Parse


Convert ..::.ToInt16 方法 (UInt16)

Convert
.
.
::
.
ToInt16 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的 16 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt16 ( _
    value As UShort _
) As Short
[CLSCompliantAttribute(false)]
public static short ToInt16(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static short ToInt16(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToInt16 :
        value:uint16 -> int16

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System Int16
与 value 等效的 16 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int16..::.MaxValue。

下面的示例尝试将无符号 16 位整数数组中的每个元素转换为 16 位带符号整数。

Dim numbers() As UShort = { UInt16.MinValue, 121, 340, UInt16.MaxValue }
Dim result As Short
For Each number As UShort In numbers
   Try
      result = Convert.ToInt16(number)
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'       Converted the UInt16 value 0 to a Int16 value 0.
'       Converted the UInt16 value 121 to a Int16 value 121.
'       Converted the UInt16 value 340 to a Int16 value 340.
'       The UInt16 value 65535 is outside the range of the Int16 type.

ushort[] numbers = { UInt16.MinValue, 121, 340, UInt16.MaxValue };
short result;
foreach (ushort number in numbers)
{
   try {
      result = Convert.ToInt16(number);
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//       Converted the UInt16 value 0 to a Int16 value 0.
//       Converted the UInt16 value 121 to a Int16 value 121.
//       Converted the UInt16 value 340 to a Int16 value 340.
//       The UInt16 value 65535 is outside the range of the Int16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (UInt32)

Convert
.
.
::
.
ToInt16 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的 16 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt16 ( _
    value As UInteger _
) As Short
[CLSCompliantAttribute(false)]
public static short ToInt16(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static short ToInt16(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToInt16 :
        value:uint32 -> int16

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System Int16
与 value 等效的 16 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int16..::.MaxValue。

下面的示例尝试将无符号整数数组中的每个元素转换为 16 位带符号整数。

Dim numbers() As UInteger = { UInt32.MinValue, 121, 340, UInt32.MaxValue }
Dim result As Short
For Each number As UInteger In numbers
   Try
      result = Convert.ToInt16(number)
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt32 value 0 to a Int16 value 0.
'    Converted the UInt32 value 121 to a Int16 value 121.
'    Converted the UInt32 value 340 to a Int16 value 340.
'    The UInt32 value 4294967295 is outside the range of the Int16 type.

uint[] numbers = { UInt32.MinValue, 121, 340, UInt32.MaxValue };
short result;

foreach (uint number in numbers)
{
   try {
      result = Convert.ToInt16(number);
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt32 value 0 to a Int16 value 0.
//    Converted the UInt32 value 121 to a Int16 value 121.
//    Converted the UInt32 value 340 to a Int16 value 340.
//    The UInt32 value 4294967295 is outside the range of the Int16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (UInt64)

Convert
.
.
::
.
ToInt16 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的 16 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt16 ( _
    value As ULong _
) As Short
[CLSCompliantAttribute(false)]
public static short ToInt16(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static short ToInt16(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToInt16 :
        value:uint64 -> int16

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System Int16
与 value 等效的 16 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int16..::.MaxValue。

下面的示例尝试将无符号长型整数数组中的每个元素转换为 16 位带符号整数。

Dim numbers() As ULong = { UInt64.MinValue, 121, 340, UInt64.MaxValue }
Dim result As Short
For Each number As ULong In numbers
   Try
      result = Convert.ToInt16(number)
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt64 value 0 to a Int16 value 0.
'    Converted the UInt64 value 121 to a Int16 value 121.
'    Converted the UInt64 value 340 to a Int16 value 340.
'    The UInt64 value 18446744073709551615 is outside the range of the Int16 type.

ulong[] numbers = { UInt64.MinValue, 121, 340, UInt64.MaxValue };
short result;

foreach (ulong number in numbers)
{
   try {
      result = Convert.ToInt16(number);
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt64 value 0 to a Int16 value 0.
//    Converted the UInt64 value 121 to a Int16 value 121.
//    Converted the UInt64 value 340 to a Int16 value 340.
//    The UInt64 value 18446744073709551615 is outside the range of the Int16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToInt16 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式信息，将指定对象的值转换为 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Object, _
    provider As IFormatProvider _
) As Short
public static short ToInt16(
    Object value,
    IFormatProvider provider
)
public:
static short ToInt16(
    Object^ value,
    IFormatProvider^ provider
)
static member ToInt16 :
        value:Object *
        provider:IFormatProvider -> int16

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Int16
与 value 等效的 16 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 未采用 Int16 类型的相应格式。
InvalidCastException | value 不实现 IConvertible。
OverflowException | value 表示小于 Int16..::.MinValue 或大于 Int16..::.MaxValue 的数字。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt16 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt16 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt16 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt16 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。

Imports System.Collections

Module IConvertibleProviderDemo

    ' Define the types of averaging available in the class
    ' implementing IConvertible.
    Enum AverageType as Short
        None = 0
        GeometricMean = 1
        ArithmeticMean = 2
        Median = 3
    End Enum

    ' Pass an instance of this class to methods that require an
    ' IFormatProvider. The class instance determines the type of
    ' average to calculate.
    Public Class AverageInfo
        Implements IFormatProvider

        Protected  AvgType      As AverageType

        ' Specify the type of averaging in the constructor.
        Public Sub New( avgType As AverageType )
            Me.AvgType = avgType
        End Sub

        ' This method returns a reference to the containing object
        ' if an object of AverageInfo type is requested.
        Public Function GetFormat( argType As Type ) As Object _
            Implements IFormatProvider.GetFormat

            If argType Is GetType( AverageInfo ) Then
                Return Me
            Else
                Return Nothing
            End If
        End Function

        ' Use this property to set or get the type of averaging.
        Public Property TypeOfAverage( ) As AverageType
            Get
                Return Me.AvgType
            End Get
            Set( ByVal value as AverageType )
                Me.AvgType = value
            End Set
        End Property
    End Class

    ' This class encapsulates an array of Double values and implements
    ' the IConvertible interface. Most of the IConvertible methods
    ' return an average of the array elements in one of three types:
    ' arithmetic mean, geometric mean, or median.
    Public Class DataSet
        Implements IConvertible

        Protected data              As ArrayList
        Protected defaultProvider   As AverageInfo

        ' Construct the object and add an initial list of values.
        ' Create a default format provider.
        Public Sub New( ParamArray values( ) As Double )
            data = New ArrayList( values )
            defaultProvider = New AverageInfo( _
                AverageType.ArithmeticMean )
        End Sub

        ' Add additional values with this method.
        Public Function Add( value As Double ) As Integer
            data.Add( value )
            Return data.Count
        End Function

        ' Get, set, and add values with this indexer property.
        Default Public Property Item(index As Integer) As Double
            Get
                If index >= 0 AndAlso index < data.Count Then
                    Return System.Convert.ToDouble( data( index ) )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.get] Index out of range." )
                End If
            End Get
            Set
                If index >= 0 AndAlso index < data.Count Then
                    data( index ) = value

                ElseIf index = data.Count Then
                    data.Add( value )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.set] Index out of range." )
                End If
            End Set
        End Property

        ' This property returns the number of elements in the object.
        Public ReadOnly Property Count( ) As Integer
            Get
                Return data.Count
            End Get
        End Property

        ' This method calculates the average of the object's elements.
        Protected Function Average( ByVal avgType As AverageType ) As Double

            Dim SumProd As Double
            Dim Index   As Integer

            If data.Count = 0 Then Return 0.0

            Select Case avgType

                Case AverageType.GeometricMean

                    SumProd = 1.0
                    For Index = 0 To data.Count - 1
                        SumProd *= data( Index )
                    Next Index

                    ' This calculation will not fail with negative
                    ' elements.
                    Return Math.Sign( SumProd ) * Math.Pow( _
                        Math.Abs( SumProd ), 1.0 / data.Count )

                Case AverageType.ArithmeticMean

                    SumProd = 0.0
                    For Index = 0 To data.Count - 1
                        SumProd += data( Index )
                    Next Index

                    Return SumProd / data.Count

                Case AverageType.Median

                    If data.Count Mod 2 = 0 Then
                        Return ( data( data.Count \ 2 ) + _
                            data( data.Count \ 2 - 1 ) ) / 2.0
                    Else
                        Return data( data.Count \ 2 )
                    End If
            End Select
        End Function

        ' Get the AverageInfo object from the caller's format
        ' provider, or use the local default.
        Protected Function GetAverageInfo( _
            provider As IFormatProvider ) As AverageInfo

            Dim avgInfo As AverageInfo = Nothing

            If Not provider Is Nothing Then
                avgInfo = provider.GetFormat( GetType( AverageInfo ) )
            End If

            Return IIf( avgInfo Is Nothing, defaultProvider, avgInfo )

        End Function

        ' Calculate the average and limit the range.
        Protected Function CalcNLimitAverage( min As Double, _
            max As Double, provider as IFormatProvider ) As Double

            ' Get the format provider and calculate the average.
            Dim avgInfo As AverageInfo = GetAverageInfo( provider )
            Dim avg As Double = Average( avgInfo.TypeOfAverage )

            ' Limit the range, based on the minimum and maximum values
            ' for the type.
            Return IIf( avg > max, max, IIf( avg < min, min, avg ) )

        End Function

        ' The following elements are required by IConvertible.

        ' None of these conversion functions throw exceptions. When
        ' the data is out of range for the type, the appropriate
        ' MinValue or MaxValue is used.
        Public Function GetTypeCode( ) As TypeCode _
            Implements IConvertible.GetTypeCode
            Return TypeCode.Object
        End Function

        Function ToBoolean( ByVal provider As IFormatProvider ) As _
            Boolean Implements IConvertible.ToBoolean

            ' ToBoolean is false if the dataset is empty.
            If data.Count <= 0 Then
                Return False

            ' For median averaging, ToBoolean is true if any
            ' non-discarded elements are nonzero.
            ElseIf AverageType.Median = _
                GetAverageInfo( provider ).TypeOfAverage Then

                If data.Count Mod 2 = 0 Then
                    Return ( data( data.Count \ 2 ) <> 0.0 Or _
                        data( data.Count \ 2 - 1 ) <> 0.0 )
                Else
                    Return data( data.Count \ 2 ) <> 0.0
                End If

            ' For arithmetic or geometric mean averaging, ToBoolean is
            ' true if any element of the dataset is nonzero.
            Else
                Dim Index As Integer
                For Index = 0 To data.Count - 1
                    If data( Index ) <> 0.0 Then Return True
                Next Index
                Return False
            End If
        End Function

        Function ToByte( ByVal provider As IFormatProvider ) As Byte _
            Implements IConvertible.ToByte
            Return Convert.ToByte( CalcNLimitAverage( _
                Byte.MinValue, Byte.MaxValue, provider ) )
        End Function

        Function ToChar( ByVal provider As IFormatProvider ) As Char _
            Implements IConvertible.ToChar
            Return Convert.ToChar( Convert.ToUInt16( _
                CalcNLimitAverage( 0.0, &HFFFF, provider ) ) )
        End Function

        ' Convert to DateTime by adding the calculated average as
        ' seconds to the current date and time. A valid DateTime is
        ' always returned.
        Function ToDateTime( ByVal provider As IFormatProvider ) As _
            DateTime Implements IConvertible.ToDateTime
            Dim seconds As Double = Average( _
                GetAverageInfo( provider ).TypeOfAverage )
            Try
                Return DateTime.Now.AddSeconds( seconds )
            Catch ex As ArgumentOutOfRangeException
                Return IIf( seconds < 0.0, DateTime.MinValue, _
                    DateTime.MaxValue )
            End Try
        End Function

        Function ToDecimal( ByVal provider As IFormatProvider ) As _
            Decimal Implements IConvertible.ToDecimal

            ' The Double conversion rounds Decimal.MinValue and
            ' Decimal.MaxValue to invalid Decimal values, so the
            ' following limits must be used.
            Return Convert.ToDecimal( CalcNLimitAverage( _
                -79228162514264330000000000000.0, _
                79228162514264330000000000000.0, provider ) )
        End Function

        Function ToDouble( ByVal provider As IFormatProvider) As _
            Double Implements IConvertible.ToDouble
            Return Average( GetAverageInfo( provider ).TypeOfAverage )
        End Function

        Function ToInt16( ByVal provider As IFormatProvider ) As _
            Short Implements IConvertible.ToInt16
            Return Convert.ToInt16( CalcNLimitAverage( _
                Int16.MinValue, Int16.MaxValue, provider ) )
        End Function

        Function ToInt32( ByVal provider As IFormatProvider ) As _
            Integer Implements IConvertible.ToInt32
            Return Convert.ToInt32( CalcNLimitAverage( _
                Int32.MinValue, Int32.MaxValue, provider ) )
        End Function

        Function ToInt64( ByVal provider As IFormatProvider ) As Long _
            Implements IConvertible.ToInt64

            ' The Double conversion rounds Int64.MinValue and
            ' Int64.MaxValue to invalid Long values, so the following
            ' limits must be used.
            Return Convert.ToInt64( CalcNLimitAverage( _
                -9223372036854775000, 9223372036854775000, provider ) )
        End Function

        Function ToSByte( ByVal provider As IFormatProvider ) As _
            SByte Implements IConvertible.ToSByte

            ' SByte.MinValue and SByte.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToSByte( CalcNLimitAverage( _
                -128, 127, provider ) )
        End Function

        Function ToSingle( ByVal provider As IFormatProvider ) As _
            Single Implements IConvertible.ToSingle
            Return Convert.ToSingle( CalcNLimitAverage( _
                Single.MinValue, Single.MaxValue, provider ) )
        End Function

        Function ToUInt16( ByVal provider As IFormatProvider ) As _
            UInt16 Implements IConvertible.ToUInt16

            ' UInt16.MinValue and UInt16.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt16( CalcNLimitAverage( _
                0, &HFFFF, provider ) )
        End Function

        Function ToUInt32( ByVal provider As IFormatProvider ) As _
            UInt32 Implements IConvertible.ToUInt32

            ' UInt32.MinValue and UInt32.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt32( CalcNLimitAverage( _
                0, 4294967295, provider ) )
        End Function

        Function ToUInt64( ByVal provider As IFormatProvider ) As _
            UInt64 Implements IConvertible.ToUInt64

            ' UInt64.MinValue and UInt64.MaxValue are not defined in
            ' Visual Basic. The Double conversion would have rounded
            ' UInt64.MaxValue, so the following limit must be used.
            Return Convert.ToUInt64( CalcNLimitAverage( _
                0, 18446744073709550000.0, provider ) )
        End Function

        Function ToType( ByVal conversionType As Type, _
            ByVal provider As IFormatProvider) As Object _
            Implements IConvertible.ToType
            Return Convert.ChangeType( Average( GetAverageInfo( _
                provider ).TypeOfAverage ), conversionType )
        End Function

        Overloads Function ToString( ByVal provider As IFormatProvider _
            ) As String Implements IConvertible.ToString
            Dim avgType as AverageType = _
                GetAverageInfo( provider ).TypeOfAverage
            Return String.Format( "( {0}: {1:G10} )", avgType, _
                Average( avgType ) )
        End Function
    End Class

    ' Display a DataSet with three different format providers.
    Sub DisplayDataSet( ds As DataSet )

        Dim fmt    As String      = "{0,-12}{1,20}{2,20}{3,20}"
        Dim median As AverageInfo = New AverageInfo( AverageType.Median )
        Dim geMean As AverageInfo = _
            New AverageInfo( AverageType.GeometricMean )
        Dim iX     As Integer

        ' Display the dataset elements.
        If ds.Count > 0 Then
            Console.Write( vbCrLf & "DataSet: [{0}", ds( 0 ) )
            For iX = 1 To ds.Count - 1
                Console.Write( ", {0}", ds( iX ) )
            Next iX
            Console.WriteLine( "]" & vbCrLf )
        End If

        Console.WriteLine( fmt, "Convert.", "Default", _
            "Geometric Mean", "Median" )
        Console.WriteLine( fmt, "--------", "-------", _
            "--------------", "------" )
        Console.WriteLine( fmt, "ToBoolean", _
            Convert.ToBoolean( ds, Nothing ), _
            Convert.ToBoolean( ds, geMean ), _
            Convert.ToBoolean( ds, median ) )
        Console.WriteLine( fmt, "ToByte", _
            Convert.ToByte( ds, Nothing ), _
            Convert.ToByte( ds, geMean ), _
            Convert.ToByte( ds, median ) )
        Console.WriteLine( fmt, "ToChar", _
            Convert.ToChar( ds, Nothing ), _
            Convert.ToChar( ds, geMean ), _
            Convert.ToChar( ds, median ) )
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" & _
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", _
            "ToDateTime", Convert.ToDateTime( ds, Nothing ), _
            Convert.ToDateTime( ds, geMean ), _
            Convert.ToDateTime( ds, median ) )
        Console.WriteLine( fmt, "ToDecimal", _
            Convert.ToDecimal( ds, Nothing ), _
            Convert.ToDecimal( ds, geMean ), _
            Convert.ToDecimal( ds, median ) )
        Console.WriteLine( fmt, "ToDouble", _
            Convert.ToDouble( ds, Nothing ), _
            Convert.ToDouble( ds, geMean ), _
            Convert.ToDouble( ds, median ) )
        Console.WriteLine( fmt, "ToInt16", _
            Convert.ToInt16( ds, Nothing ), _
            Convert.ToInt16( ds, geMean ), _
            Convert.ToInt16( ds, median ) )
        Console.WriteLine( fmt, "ToInt32", _
            Convert.ToInt32( ds, Nothing ), _
            Convert.ToInt32( ds, geMean ), _
            Convert.ToInt32( ds, median ) )
        Console.WriteLine( fmt, "ToInt64", _
            Convert.ToInt64( ds, Nothing ), _
            Convert.ToInt64( ds, geMean ), _
            Convert.ToInt64( ds, median ) )
        Console.WriteLine( fmt, "ToSByte", _
            Convert.ToSByte( ds, Nothing ), _
            Convert.ToSByte( ds, geMean ), _
            Convert.ToSByte( ds, median ) )
        Console.WriteLine( fmt, "ToSingle", _
            Convert.ToSingle( ds, Nothing ), _
            Convert.ToSingle( ds, geMean ), _
            Convert.ToSingle( ds, median ) )
        Console.WriteLine( fmt, "ToUInt16", _
            Convert.ToUInt16( ds, Nothing ), _
            Convert.ToUInt16( ds, geMean ), _
            Convert.ToUInt16( ds, median ) )
        Console.WriteLine( fmt, "ToUInt32", _
            Convert.ToUInt32( ds, Nothing ), _
            Convert.ToUInt32( ds, geMean ), _
            Convert.ToUInt32( ds, median ) )
        Console.WriteLine( fmt, "ToUInt64", _
            Convert.ToUInt64( ds, Nothing ), _
            Convert.ToUInt64( ds, geMean ), _
            Convert.ToUInt64( ds, median ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Convert.To<Type>( Object, " & _
            "IFormatProvider ) methods " & vbCrLf & "generates " & _
            "the following output. The example displays the " & _
            "values " & vbCrLf & "returned by the methods, " & _
            "using several IFormatProvider objects." & vbCrLf )

        Dim ds1 As New DataSet( 10.5, 22.2, 45.9, 88.7, 156.05, 297.6 )
        DisplayDataSet( ds1 )

        Dim ds2 As New DataSet( _
            359999.95, 425000, 499999.5, 775000, 1695000 )
        DisplayDataSet( ds2 )
    End Sub
End Module

' This example of the Convert.To<Type>( Object, IFormatProvider ) methods
' generates the following output. The example displays the values
' returned by the methods, using several IFormatProvider objects.
'
' DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       103                  59                  67
' ToChar                         g                   ;                   C
' ToDateTime   2003-05-13 14:52:53 2003-05-13 14:52:09 2003-05-13 14:52:17
' ToDecimal       103.491666666667    59.4332135445164                67.3
' ToDouble        103.491666666667    59.4332135445164                67.3
' ToInt16                      103                  59                  67
' ToInt32                      103                  59                  67
' ToInt64                      103                  59                  67
' ToSByte                      103                  59                  67
' ToSingle                103.4917            59.43321                67.3
' ToUInt16                     103                  59                  67
' ToUInt32                     103                  59                  67
' ToUInt64                     103                  59                  67
'
' DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       255                 255                 255
' ToChar                         ?                   ?                   ?
' ToDateTime   2003-05-22 07:27:49 2003-05-20 22:17:27 2003-05-19 09:44:29
' ToDecimal              750999.89    631577.237188435            499999.5
' ToDouble               750999.89    631577.237188435            499999.5
' ToInt16                    32767               32767               32767
' ToInt32                   751000              631577              500000
' ToInt64                   751000              631577              500000
' ToSByte                      127                 127                 127
' ToSingle                750999.9            631577.3            499999.5
' ToUInt16                   65535               65535               65535
' ToUInt32                  751000              631577              500000
' ToUInt64                  751000              631577              500000

using System;
using System.Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
public enum AverageType : short
{
    None = 0,
    GeometricMean = 1,
    ArithmeticMean = 2,
    Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
public class AverageInfo : IFormatProvider
{
    protected AverageType AvgType;

    // Specify the type of averaging in the constructor.
    public AverageInfo( AverageType avgType )
    {
        this.AvgType = avgType;
    }

    // This method returns a reference to the containing object
    // if an object of AverageInfo type is requested.
    public object GetFormat( Type argType )
    {
        if ( argType == typeof( AverageInfo ) )
            return this;
        else
            return null;
    }

    // Use this property to set or get the type of averaging.
    public AverageType TypeOfAverage
    {
        get { return this.AvgType; }
        set { this.AvgType = value; }
    }
}

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
public class DataSet : IConvertible
{
    protected ArrayList     data;
    protected AverageInfo   defaultProvider;

    // Construct the object and add an initial list of values.
    // Create a default format provider.
    public DataSet( params double[ ] values )
    {
        data = new ArrayList( values );
        defaultProvider =
            new AverageInfo( AverageType.ArithmeticMean );
    }

    // Add additional values with this method.
    public int Add( double value )
    {
        data.Add( value );
        return data.Count;
    }

    // Get, set, and add values with this indexer property.
    public double this[ int index ]
    {
        get
        {
            if( index >= 0 && index < data.Count )
                return (double)data[ index ];
            else
                throw new InvalidOperationException(
                    "[DataSet.get] Index out of range." );
        }
        set
        {
            if( index >= 0 && index < data.Count )
                data[ index ] = value;

            else if( index == data.Count )
                data.Add( value );
            else
                throw new InvalidOperationException(
                    "[DataSet.set] Index out of range." );
        }
    }

    // This property returns the number of elements in the object.
    public int Count
    {
        get { return data.Count; }
    }

    // This method calculates the average of the object's elements.
    protected double Average( AverageType avgType )
    {
        double  SumProd;

        if( data.Count == 0 )
            return 0.0;

        switch( avgType )
        {
            case AverageType.GeometricMean:

                SumProd = 1.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd *= (double)data[ Index ];

                // This calculation will not fail with negative
                // elements.
                return Math.Sign( SumProd ) * Math.Pow(
                    Math.Abs( SumProd ), 1.0 / data.Count );

            case AverageType.ArithmeticMean:

                SumProd = 0.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd += (double)data[ Index ];

                return SumProd / data.Count;

            case AverageType.Median:

                if( data.Count % 2 == 0 )
                    return ( (double)data[ data.Count / 2 ] +
                        (double)data[ data.Count / 2 - 1 ] ) / 2.0;
                else
                    return (double)data[ data.Count / 2 ];

            default:
                return 0.0;
        }
    }

    // Get the AverageInfo object from the caller's format provider,
    // or use the local default.
    protected AverageInfo GetAverageInfo( IFormatProvider provider )
    {
        AverageInfo avgInfo = null;

        if( provider != null )
            avgInfo = (AverageInfo)provider.GetFormat(
                typeof( AverageInfo ) );

        if ( avgInfo == null )
            return defaultProvider;
        else
            return avgInfo;
    }

    // Calculate the average and limit the range.
    protected double CalcNLimitAverage( double min, double max,
        IFormatProvider provider )
    {
        // Get the format provider and calculate the average.
        AverageInfo avgInfo = GetAverageInfo( provider );
        double avg = Average( avgInfo.TypeOfAverage );

        // Limit the range, based on the minimum and maximum values
        // for the type.
        return avg > max ? max : avg < min ? min : avg;

    }

    // The following elements are required by IConvertible.

    // None of these conversion functions throw exceptions. When
    // the data is out of range for the type, the appropriate
    // MinValue or MaxValue is used.
    public TypeCode GetTypeCode( )
    {
        return TypeCode.Object;
    }

    public bool ToBoolean( IFormatProvider provider )
    {
        // ToBoolean is false if the dataset is empty.
        if( data.Count <= 0 )
            return false;

        // For median averaging, ToBoolean is true if any
        // non-discarded elements are nonzero.
        else if( AverageType.Median ==
            GetAverageInfo( provider ).TypeOfAverage )
        {
            if (data.Count % 2 == 0 )
                return ( (double)data[ data.Count / 2 ] != 0.0 ||
                    (double)data[ data.Count / 2 - 1 ] != 0.0 );
            else
                return (double)data[ data.Count / 2 ] != 0.0;
        }

        // For arithmetic or geometric mean averaging, ToBoolean is
        // true if any element of the dataset is nonzero.
        else
        {
            for( int Index = 0; Index < data.Count; Index++ )
                if( (double)data[ Index ] != 0.0 )
                    return true;
            return false;
        }
    }

    public byte ToByte( IFormatProvider provider )
    {
        return Convert.ToByte( CalcNLimitAverage(
            Byte.MinValue, Byte.MaxValue, provider ) );
    }

    public char ToChar( IFormatProvider provider )
    {
        return Convert.ToChar( Convert.ToUInt16( CalcNLimitAverage(
            Char.MinValue, Char.MaxValue, provider ) ) );
    }

    // Convert to DateTime by adding the calculated average as
    // seconds to the current date and time. A valid DateTime is
    // always returned.
    public DateTime ToDateTime( IFormatProvider provider )
    {
        double seconds =
            Average( GetAverageInfo( provider ).TypeOfAverage );
        try
        {
            return DateTime.Now.AddSeconds( seconds );
        }
        catch( ArgumentOutOfRangeException )
        {
            return seconds < 0.0 ? DateTime.MinValue : DateTime.MaxValue;
        }
    }

    public decimal ToDecimal( IFormatProvider provider )
    {
        // The Double conversion rounds Decimal.MinValue and
        // Decimal.MaxValue to invalid Decimal values, so the
        // following limits must be used.
        return Convert.ToDecimal( CalcNLimitAverage(
            -79228162514264330000000000000.0,
            79228162514264330000000000000.0, provider ) );
    }

    public double ToDouble( IFormatProvider provider )
    {
        return Average( GetAverageInfo(provider).TypeOfAverage );
    }

    public short ToInt16( IFormatProvider provider )
    {
        return Convert.ToInt16( CalcNLimitAverage(
            Int16.MinValue, Int16.MaxValue, provider ) );
    }

    public int ToInt32( IFormatProvider provider )
    {
        return Convert.ToInt32( CalcNLimitAverage(
            Int32.MinValue, Int32.MaxValue, provider ) );
    }

    public long ToInt64( IFormatProvider provider )
    {
        // The Double conversion rounds Int64.MinValue and
        // Int64.MaxValue to invalid Int64 values, so the following
        // limits must be used.
        return Convert.ToInt64( CalcNLimitAverage(
            -9223372036854775000, 9223372036854775000, provider ) );
    }

    public SByte ToSByte( IFormatProvider provider )
    {
        return Convert.ToSByte( CalcNLimitAverage(
            SByte.MinValue, SByte.MaxValue, provider ) );
    }

    public float ToSingle( IFormatProvider provider )
    {
        return Convert.ToSingle( CalcNLimitAverage(
            Single.MinValue, Single.MaxValue, provider ) );
    }

    public UInt16 ToUInt16( IFormatProvider provider )
    {
        return Convert.ToUInt16( CalcNLimitAverage(
            UInt16.MinValue, UInt16.MaxValue, provider ) );
    }

    public UInt32 ToUInt32( IFormatProvider provider )
    {
        return Convert.ToUInt32( CalcNLimitAverage(
            UInt32.MinValue, UInt32.MaxValue, provider ) );
    }

    public UInt64 ToUInt64( IFormatProvider provider )
    {
        // The Double conversion rounds UInt64.MaxValue to an invalid
        // UInt64 value, so the following limit must be used.
        return Convert.ToUInt64( CalcNLimitAverage(
            0, 18446744073709550000.0, provider ) );
    }

    public object ToType( Type conversionType,
        IFormatProvider provider )
    {
        return Convert.ChangeType( Average(
            GetAverageInfo( provider ).TypeOfAverage ),
            conversionType );
    }

    public string ToString( IFormatProvider provider )
    {
        AverageType avgType = GetAverageInfo( provider ).TypeOfAverage;
        return String.Format( "( {0}: {1:G10} )", avgType,
            Average( avgType ) );
    }
}

class IConvertibleProviderDemo
{
    // Display a DataSet with three different format providers.
    public static void DisplayDataSet( DataSet ds )
    {
        string      fmt    = "{0,-12}{1,20}{2,20}{3,20}";
        AverageInfo median = new AverageInfo( AverageType.Median );
        AverageInfo geMean =
            new AverageInfo( AverageType.GeometricMean );

         // Display the dataset elements.
        if( ds.Count > 0 )
        {
            Console.Write( "\nDataSet: [{0}", ds[ 0 ] );
            for( int iX = 1; iX < ds.Count; iX++ )
                Console.Write( ", {0}", ds[ iX ] );
            Console.WriteLine( "]\n" );
        }

        Console.WriteLine( fmt, "Convert.", "Default",
            "Geometric Mean", "Median");
        Console.WriteLine( fmt, "--------", "-------",
            "--------------", "------");
        Console.WriteLine( fmt, "ToBoolean",
            Convert.ToBoolean( ds, null ),
            Convert.ToBoolean( ds, geMean ),
            Convert.ToBoolean( ds, median ) );
        Console.WriteLine( fmt, "ToByte",
            Convert.ToByte( ds, null ),
            Convert.ToByte( ds, geMean ),
            Convert.ToByte( ds, median ) );
        Console.WriteLine( fmt, "ToChar",
            Convert.ToChar( ds, null ),
            Convert.ToChar( ds, geMean ),
            Convert.ToChar( ds, median ) );
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" +
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}",
            "ToDateTime", Convert.ToDateTime( ds, null ),
            Convert.ToDateTime( ds, geMean ),
            Convert.ToDateTime( ds, median ) );
        Console.WriteLine( fmt, "ToDecimal",
            Convert.ToDecimal( ds, null ),
            Convert.ToDecimal( ds, geMean ),
            Convert.ToDecimal( ds, median ) );
        Console.WriteLine( fmt, "ToDouble",
            Convert.ToDouble( ds, null ),
            Convert.ToDouble( ds, geMean ),
            Convert.ToDouble( ds, median ) );
        Console.WriteLine( fmt, "ToInt16",
            Convert.ToInt16( ds, null ),
            Convert.ToInt16( ds, geMean ),
            Convert.ToInt16( ds, median ) );
        Console.WriteLine( fmt, "ToInt32",
            Convert.ToInt32( ds, null ),
            Convert.ToInt32( ds, geMean ),
            Convert.ToInt32( ds, median ) );
        Console.WriteLine( fmt, "ToInt64",
            Convert.ToInt64( ds, null ),
            Convert.ToInt64( ds, geMean ),
            Convert.ToInt64( ds, median ) );
        Console.WriteLine( fmt, "ToSByte",
            Convert.ToSByte( ds, null ),
            Convert.ToSByte( ds, geMean ),
            Convert.ToSByte( ds, median ) );
        Console.WriteLine( fmt, "ToSingle",
            Convert.ToSingle( ds, null ),
            Convert.ToSingle( ds, geMean ),
            Convert.ToSingle( ds, median ) );
        Console.WriteLine( fmt, "ToUInt16",
            Convert.ToUInt16( ds, null ),
            Convert.ToUInt16( ds, geMean ),
            Convert.ToUInt16( ds, median ) );
        Console.WriteLine( fmt, "ToUInt32",
            Convert.ToUInt32( ds, null ),
            Convert.ToUInt32( ds, geMean ),
            Convert.ToUInt32( ds, median ) );
        Console.WriteLine( fmt, "ToUInt64",
            Convert.ToUInt64( ds, null ),
            Convert.ToUInt64( ds, geMean ),
            Convert.ToUInt64( ds, median ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of " +
            "the Convert.To<Type>( object, IFormatProvider ) methods " +
            "\ngenerates the following output. The example " +
            "displays the values \nreturned by the methods, " +
            "using several IFormatProvider objects.\n" );

        DataSet ds1 = new DataSet(
            10.5, 22.2, 45.9, 88.7, 156.05, 297.6 );
        DisplayDataSet( ds1 );

        DataSet ds2 = new DataSet(
            359999.95, 425000, 499999.5, 775000, 1695000 );
        DisplayDataSet( ds2 );
    }
}

/*
This example of the Convert.To<Type>( object, IFormatProvider ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:04:12 2003-05-13 15:03:28 2003-05-13 15:03:35
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 07:39:08 2003-05-20 22:28:45 2003-05-19 09:55:48
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

using namespace System;
using namespace System::Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
enum class AverageType : short
{
   None = 0,
   GeometricMean = 1,
   ArithmeticMean = 2,
   Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
ref class AverageInfo: public IFormatProvider
{
protected:
   AverageType AvgType;

public:

   // Specify the type of averaging in the constructor.
   AverageInfo( AverageType avgType )
   {
      this->AvgType = avgType;
   }

   // This method returns a reference to the containing object
   // if an object of AverageInfo type is requested.
   virtual Object^ GetFormat( Type^ argType )
   {
      if ( argType == AverageInfo::typeid)
            return this;
      else
            return (Object^)0;
   }

   property AverageType TypeOfAverage
   {

      // Use this property to set or get the type of averaging.
      AverageType get()
      {
         return this->AvgType;
      }

      void set( AverageType value )
      {
         this->AvgType = value;
      }

   }

};

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
ref class DataSet: public IConvertible
{
private:
   static Object^ null = nullptr;

protected:
   ArrayList^ data;
   AverageInfo^ defaultProvider;

   // This method unboxes a boxed double.
   double UnBoxDouble( Object^ obj )
   {
      return  *static_cast<double^>(obj);
   }

public:

   // Construct the object and add an initial list of values.
   // Create a default format provider.
   DataSet( ... array<Double>^values )
   {
      data = gcnew ArrayList( (Array^)values );
      defaultProvider = gcnew AverageInfo( AverageType::ArithmeticMean );
   }

   // Add additional values with this method.
   int Add( double value )
   {
      data->Add( value );
      return data->Count;
   }

   property double Item[ int ]
   {

      // Get, set, and add values with this indexer property.
      double get( int index )
      {
         if ( index >= 0 && index < data->Count )
                  return UnBoxDouble( data[ index ] );
         else
                  throw gcnew InvalidOperationException( "[DataSet.get] Index out of range." );
      }

      void set( int index, double value )
      {
         if ( index >= 0 && index < data->Count )
                  data[ index ] = value;
         else
         if ( index == data->Count )
                  data->Add( value );
         else
                  throw gcnew InvalidOperationException( "[DataSet.set] Index out of range." );
      }

   }

   property int Count
   {

      // This property returns the number of elements in the object.
      int get()
      {
         return data->Count;
      }

   }

protected:

   // This method calculates the average of the object's elements.
   double Average( AverageType avgType )
   {
      double SumProd;
      if ( data->Count == 0 )
            return 0.0;

      switch ( avgType )
      {
         case AverageType::GeometricMean:
            SumProd = 1.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd *= UnBoxDouble( data[ Index ] );

            // This calculation will not fail with negative
            // elements.
            return Math::Sign( SumProd ) * Math::Pow( Math::Abs( SumProd ), 1.0 / data->Count );

         case AverageType::ArithmeticMean:
            SumProd = 0.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd += UnBoxDouble( data[ Index ] );
            return SumProd / data->Count;

         case AverageType::Median:
            if ( data->Count % 2 == 0 )
                        return (UnBoxDouble( data[ data->Count / 2 ] ) + UnBoxDouble( data[ data->Count / 2 - 1 ] )) / 2.0;
            else
                        return UnBoxDouble( data[ data->Count / 2 ] );

         default:
            return 0.0;
      }
   }

   // Get the AverageInfo object from the caller's format provider,
   // or use the local default.
   AverageInfo^ GetAverageInfo( IFormatProvider^ provider )
   {
      AverageInfo^ avgInfo = nullptr;
      if ( provider != nullptr )
            avgInfo = static_cast<AverageInfo^>(provider->GetFormat( AverageInfo::typeid ));

      if ( avgInfo == nullptr )
            return defaultProvider;
      else
            return avgInfo;
   }

   // Calculate the average and limit the range.
   double CalcNLimitAverage( double min, double max, IFormatProvider^ provider )
   {

      // Get the format provider and calculate the average.
      AverageInfo^ avgInfo = GetAverageInfo( provider );
      double avg = Average( avgInfo->TypeOfAverage );

      // Limit the range, based on the minimum and maximum values
      // for the type.
      return avg > max ? max : avg < min ? min : avg;
   }

public:

   // The following elements are required by IConvertible.
   // None of these conversion functions throw exceptions. When
   // the data is out of range for the type, the appropriate
   // MinValue or MaxValue is used.
   virtual TypeCode GetTypeCode()
   {
      return TypeCode::Object;
   }

   virtual bool ToBoolean( IFormatProvider^ provider )
   {

      // ToBoolean is false if the dataset is empty.
      if ( data->Count <= 0 )
            return false;
      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      else

      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      if ( AverageType::Median == GetAverageInfo( provider )->TypeOfAverage )
      {
         if ( data->Count % 2 == 0 )
                  return (UnBoxDouble( data[ data->Count / 2 ] ) != 0.0 || UnBoxDouble( data[ data->Count / 2 - 1 ] ) != 0.0);
         else
                  return UnBoxDouble( data[ data->Count / 2 ] ) != 0.0;
      }
      // For arithmetic or geometric mean averaging, ToBoolean is
      // true if any element of the dataset is nonzero.
      else
      {
         for ( int Index = 0; Index < data->Count; Index++ )
            if ( UnBoxDouble( data[ Index ] ) != 0.0 )
                        return true;
         return false;
      }
   }

   virtual Byte ToByte( IFormatProvider^ provider )
   {
      return Convert::ToByte( CalcNLimitAverage( Byte::MinValue, Byte::MaxValue, provider ) );
   }

   virtual Char ToChar( IFormatProvider^ provider )
   {
      return Convert::ToChar( Convert::ToUInt16( CalcNLimitAverage( Char::MinValue, Char::MaxValue, provider ) ) );
   }

   // Convert to DateTime by adding the calculated average as
   // seconds to the current date and time. A valid DateTime is
   // always returned.
   virtual DateTime ToDateTime( IFormatProvider^ provider )
   {
      double seconds = Average( GetAverageInfo( provider )->TypeOfAverage );
      try
      {
         return DateTime::Now.AddSeconds( seconds );
      }
      catch ( ArgumentOutOfRangeException^ )
      {
         return seconds < 0.0 ? DateTime::MinValue : DateTime::MaxValue;
      }

   }

   virtual Decimal ToDecimal( IFormatProvider^ provider )
   {

      // The Double conversion rounds Decimal.MinValue and
      // Decimal.MaxValue to invalid Decimal values, so the
      // following limits must be used.
      return Convert::ToDecimal( CalcNLimitAverage(  -79228162514264330000000000000.0, 79228162514264330000000000000.0, provider ) );
   }

   virtual double ToDouble( IFormatProvider^ provider )
   {
      return Average( GetAverageInfo( provider )->TypeOfAverage );
   }

   virtual short ToInt16( IFormatProvider^ provider )
   {
      return Convert::ToInt16( CalcNLimitAverage( Int16::MinValue, Int16::MaxValue, provider ) );
   }

   virtual int ToInt32( IFormatProvider^ provider )
   {
      return Convert::ToInt32( CalcNLimitAverage( Int32::MinValue, Int32::MaxValue, provider ) );
   }

   virtual __int64 ToInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds Int64.MinValue and
      // Int64.MaxValue to invalid Int64 values, so the following
      // limits must be used.
      return Convert::ToInt64( CalcNLimitAverage(  -9223372036854775000, 9223372036854775000, provider ) );
   }

   virtual signed char ToSByte( IFormatProvider^ provider )
   {
      return Convert::ToSByte( CalcNLimitAverage( SByte::MinValue, SByte::MaxValue, provider ) );
   }

   virtual float ToSingle( IFormatProvider^ provider )
   {
      return Convert::ToSingle( CalcNLimitAverage( Single::MinValue, Single::MaxValue, provider ) );
   }

   virtual UInt16 ToUInt16( IFormatProvider^ provider )
   {
      return Convert::ToUInt16( CalcNLimitAverage( UInt16::MinValue, UInt16::MaxValue, provider ) );
   }

   virtual UInt32 ToUInt32( IFormatProvider^ provider )
   {
      return Convert::ToUInt32( CalcNLimitAverage( UInt32::MinValue, UInt32::MaxValue, provider ) );
   }

   virtual UInt64 ToUInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds UInt64.MaxValue to an invalid
      // UInt64 value, so the following limit must be used.
      return Convert::ToUInt64( CalcNLimitAverage( 0, 18446744073709550000.0, provider ) );
   }

   virtual Object^ ToType( Type^ conversionType, IFormatProvider^ provider )
   {
      return Convert::ChangeType( Average( GetAverageInfo( provider )->TypeOfAverage ), conversionType );
   }

   virtual String^ ToString( IFormatProvider^ provider )
   {
      AverageType avgType = GetAverageInfo( provider )->TypeOfAverage;
      return String::Format( "( {0}: {1:G10} )", avgType, Average( avgType ) );
   }

};

// Display a DataSet with three different format providers.
void DisplayDataSet( DataSet^ ds )
{
   IFormatProvider^ null = nullptr;
   String^ fmt = "{0,-12}{1,20}{2,20}{3,20}";
   AverageInfo^ median = gcnew AverageInfo( AverageType::Median );
   AverageInfo^ geMean = gcnew AverageInfo( AverageType::GeometricMean );

   // Display the dataset elements.
   if ( ds->Count > 0 )
   {
      Console::Write( "\nDataSet: [{0}", ds->Item[ 0 ] );
      for ( int iX = 1; iX < ds->Count; iX++ )
         Console::Write( ", {0}", ds->Item[ iX ] );
      Console::WriteLine( "]\n" );
   }

   Console::WriteLine( fmt, "Convert::", "Default", "Geometric Mean", "Median" );
   Console::WriteLine( fmt, "---------", "-------", "--------------", "------" );
   Console::WriteLine( fmt, "ToBoolean", Convert::ToBoolean( ds, null ), Convert::ToBoolean( ds, geMean ), Convert::ToBoolean( ds, median ) );
   Console::WriteLine( fmt, "ToByte", Convert::ToByte( ds, null ), Convert::ToByte( ds, geMean ), Convert::ToByte( ds, median ) );
   Console::WriteLine( fmt, "ToChar", Convert::ToChar( ds, null ), Convert::ToChar( ds, geMean ), Convert::ToChar( ds, median ) );
   Console::WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}"
   "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", "ToDateTime", Convert::ToDateTime( ds, null ), Convert::ToDateTime( ds, geMean ), Convert::ToDateTime( ds, median ) );
   Console::WriteLine( fmt, "ToDecimal", Convert::ToDecimal( ds, null ), Convert::ToDecimal( ds, geMean ), Convert::ToDecimal( ds, median ) );
   Console::WriteLine( fmt, "ToDouble", Convert::ToDouble( ds, null ), Convert::ToDouble( ds, geMean ), Convert::ToDouble( ds, median ) );
   Console::WriteLine( fmt, "ToInt16", Convert::ToInt16( ds, null ), Convert::ToInt16( ds, geMean ), Convert::ToInt16( ds, median ) );
   Console::WriteLine( fmt, "ToInt32", Convert::ToInt32( ds, null ), Convert::ToInt32( ds, geMean ), Convert::ToInt32( ds, median ) );
   Console::WriteLine( fmt, "ToInt64", Convert::ToInt64( ds, null ), Convert::ToInt64( ds, geMean ), Convert::ToInt64( ds, median ) );
   Console::WriteLine( fmt, "ToSByte", Convert::ToSByte( ds, null ), Convert::ToSByte( ds, geMean ), Convert::ToSByte( ds, median ) );
   Console::WriteLine( fmt, "ToSingle", Convert::ToSingle( ds, null ), Convert::ToSingle( ds, geMean ), Convert::ToSingle( ds, median ) );
   Console::WriteLine( fmt, "ToUInt16", Convert::ToUInt16( ds, null ), Convert::ToUInt16( ds, geMean ), Convert::ToUInt16( ds, median ) );
   Console::WriteLine( fmt, "ToUInt32", Convert::ToUInt32( ds, null ), Convert::ToUInt32( ds, geMean ), Convert::ToUInt32( ds, median ) );
   Console::WriteLine( fmt, "ToUInt64", Convert::ToUInt64( ds, null ), Convert::ToUInt64( ds, geMean ), Convert::ToUInt64( ds, median ) );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Convert::To<Type>( Object*, IFormatProvider* ) methods "
   "\ngenerates the following output. The example "
   "displays the values \nreturned by the methods, "
   "using several IFormatProvider objects.\n" );

   // To call a [ParamArray] method in C++, you cannot just
   // list the parameters, you need to build an array.
   array<Double>^dataElem = gcnew array<Double>(6);
   dataElem[ 0 ] = 10.5;
   dataElem[ 1 ] = 22.2;
   dataElem[ 2 ] = 45.9;
   dataElem[ 3 ] = 88.7;
   dataElem[ 4 ] = 156.05;
   dataElem[ 5 ] = 297.6;
   DataSet^ ds1 = gcnew DataSet( dataElem );
   DisplayDataSet( ds1 );
   dataElem = gcnew array<Double>(5);
   dataElem[ 0 ] = 359999.95;
   dataElem[ 1 ] = 425000;
   dataElem[ 2 ] = 499999.5;
   dataElem[ 3 ] = 775000;
   dataElem[ 4 ] = 1695000;
   DataSet^ ds2 = gcnew DataSet( dataElem );
   DisplayDataSet( ds2 );
}

/*
This example of the Convert::To<Type>( Object*, IFormatProvider* ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:30:23 2003-05-13 15:29:39 2003-05-13 15:29:47
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 08:05:19 2003-05-20 22:54:57 2003-05-19 10:21:59
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt16 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToInt16 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As String, _
    provider As IFormatProvider _
) As Short
public static short ToInt16(
    string value,
    IFormatProvider provider
)
public:
static short ToInt16(
    String^ value,
    IFormatProvider^ provider
)
static member ToInt16 :
        value:string *
        provider:IFormatProvider -> int16

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Int16
与 value 中数字等效的 16 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 Int16..::.MinValue 或大于 Int16..::.MaxValue 的数字。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 Int16..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Int16..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的代码示例使用 ToInt16 方法，通过一个 IFormatProvider 对象转换 64 位整数的字符串表示形式。

' Example of the Convert.ToInt16( String ) and
' Convert.ToInt16( String, IFormatProvider ) methods.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module ToInt16ProviderDemo

    Dim format As String = "{0,-20}{1,-20}{2}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    Sub ConvertToInt16( numericStr As String, _
        provider As IFormatProvider )

        Dim defaultValue    As Object
        Dim providerValue   As Object

        ' Convert numericStr to Int16 without a format provider.
        Try
            defaultValue = Convert.ToInt16( numericStr )
        Catch ex As Exception
            defaultValue = GetExceptionType( ex )
        End Try

        ' Convert numericStr to Int16 with a format provider.
        Try
            providerValue = Convert.ToInt16( numericStr, provider )
        Catch ex As Exception
            providerValue = GetExceptionType( ex )
        End Try

        Console.WriteLine( format, numericStr, _
            defaultValue, providerValue )
    End Sub

    Sub Main( )

        ' Create a NumberFormatInfo object and set several of its
        ' properties that apply to numbers.
        Dim provider  As NumberFormatInfo = new NumberFormatInfo( )

        ' These properties affect the conversion.
        provider.NegativeSign = "neg "
        provider.PositiveSign = "pos "

        ' These properties do not affect the conversion.
        ' The input string cannot have decimal and group separators.
        provider.NumberDecimalSeparator = "."
        provider.NumberGroupSeparator = ","
        provider.NumberGroupSizes = New Integer( ) { 3 }
        provider.NumberNegativePattern = 0

        Console.WriteLine( "This example of" & vbCrLf & _
            "  Convert.ToInt16( String ) and " & vbCrLf & _
            "  Convert.ToInt16( String, IFormatProvider ) " & _
            vbCrLf & "generates the following output. It " & _
            "converts several strings to " & vbCrLf & "Short " & _
            "values, using default formatting " & _
            "or a NumberFormatInfo object." & vbCrLf )
        Console.WriteLine( format, "String to convert", _
            "Default/exception", "Provider/exception" )
        Console.WriteLine( format, "-----------------", _
            "-----------------", "------------------" )

        ' Convert strings, with and without an IFormatProvider.
        ConvertToInt16( "12345", provider )
        ConvertToInt16( "+12345", provider )
        ConvertToInt16( "pos 12345", provider )
        ConvertToInt16( "-12345", provider )
        ConvertToInt16( "neg 12345", provider )
        ConvertToInt16( "12345.", provider )
        ConvertToInt16( "12,345", provider )
        ConvertToInt16( "(12345)", provider )
        ConvertToInt16( "32768", provider )
        ConvertToInt16( "-32769", provider )
    End Sub
End Module

' This example of
'   Convert.ToInt16( String ) and
'   Convert.ToInt16( String, IFormatProvider )
' generates the following output. It converts several strings to
' Short values, using default formatting or a NumberFormatInfo object.
'
' String to convert   Default/exception   Provider/exception
' -----------------   -----------------   ------------------
' 12345               12345               12345
' +12345              12345               FormatException
' pos 12345           FormatException     12345
' -12345              -12345              FormatException
' neg 12345           FormatException     -12345
' 12345.              FormatException     FormatException
' 12,345              FormatException     FormatException
' (12345)             FormatException     FormatException
' 32768               OverflowException   OverflowException
' -32769              OverflowException   FormatException

// Example of the Convert.ToInt16( string ) and
// Convert.ToInt16( string, IFormatProvider ) methods.
using System;
using System.Globalization;

class ToInt16ProviderDemo
{
    static string format = "{0,-20}{1,-20}{2}";

     // Get the exception type name; remove the namespace prefix.
    static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    static void ConvertToInt16( string numericStr,
        IFormatProvider provider )
    {
        object defaultValue;
        object providerValue;

        // Convert numericStr to Int16 without a format provider.
        try
        {
            defaultValue = Convert.ToInt16( numericStr );
        }
        catch( Exception ex )
        {
            defaultValue = GetExceptionType( ex );
        }

        // Convert numericStr to Int16 with a format provider.
        try
        {
            providerValue = Convert.ToInt16( numericStr, provider );
        }
        catch( Exception ex )
        {
            providerValue = GetExceptionType( ex );
        }

        Console.WriteLine( format, numericStr,
            defaultValue, providerValue );
    }

    public static void Main( )
    {
        // Create a NumberFormatInfo object and set several of its
        // properties that apply to numbers.
        NumberFormatInfo provider = new NumberFormatInfo();

        // These properties affect the conversion.
        provider.NegativeSign = "neg ";
        provider.PositiveSign = "pos ";

        // These properties do not affect the conversion.
        // The input string cannot have decimal and group separators.
        provider.NumberDecimalSeparator = ".";
        provider.NumberGroupSeparator = ",";
        provider.NumberGroupSizes = new int[ ] { 3 };
        provider.NumberNegativePattern = 0;

        Console.WriteLine("This example of\n" +
            "  Convert.ToInt16( string ) and \n" +
            "  Convert.ToInt16( string, IFormatProvider ) " +
            "\ngenerates the following output. It converts " +
            "several strings to \nshort values, using " +
            "default formatting or a NumberFormatInfo object.\n" );
        Console.WriteLine( format, "String to convert",
            "Default/exception", "Provider/exception" );
        Console.WriteLine( format, "-----------------",
            "-----------------", "------------------" );

        // Convert strings, with and without an IFormatProvider.
        ConvertToInt16( "12345", provider );
        ConvertToInt16( "+12345", provider );
        ConvertToInt16( "pos 12345", provider );
        ConvertToInt16( "-12345", provider );
        ConvertToInt16( "neg 12345", provider );
        ConvertToInt16( "12345.", provider );
        ConvertToInt16( "12,345", provider );
        ConvertToInt16( "(12345)", provider );
        ConvertToInt16( "32768", provider );
        ConvertToInt16( "-32769", provider );
    }
}

/*
This example of
  Convert.ToInt16( string ) and
  Convert.ToInt16( string, IFormatProvider )
generates the following output. It converts several strings to
short values, using default formatting or a NumberFormatInfo object.

String to convert   Default/exception   Provider/exception
-----------------   -----------------   ------------------
12345               12345               12345
+12345              12345               FormatException
pos 12345           FormatException     12345
-12345              -12345              FormatException
neg 12345           FormatException     -12345
12345.              FormatException     FormatException
12,345              FormatException     FormatException
(12345)             FormatException     FormatException
32768               OverflowException   OverflowException
-32769              OverflowException   FormatException
*/

// Example of the Convert::ToInt16( String* ) and
// Convert::ToInt16( String*, IFormatProvider* ) methods.
using namespace System;
using namespace System::Globalization;
const __wchar_t * protoFmt = L"{0,-20}{1,-20}{2}";

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

void ConvertToInt16( String^ numericStr, IFormatProvider^ provider )
{
   Object^ defaultValue;
   Object^ providerValue;

   // Convert numericStr to Int16 without a format provider.
   try
   {
      defaultValue = Convert::ToInt16( numericStr );
   }
   catch ( Exception^ ex )
   {
      defaultValue = GetExceptionType( ex );
   }

   // Convert numericStr to Int16 with a format provider.
   try
   {
      providerValue = Convert::ToInt16( numericStr, provider );
   }
   catch ( Exception^ ex )
   {
      providerValue = GetExceptionType( ex );
   }

   Console::WriteLine( gcnew String( protoFmt ), numericStr, defaultValue, providerValue );
}

int main()
{

   // Create a NumberFormatInfo object and set several of its
   // properties that apply to numbers.
   NumberFormatInfo^ provider = gcnew NumberFormatInfo;

   // These properties affect the conversion.
   provider->NegativeSign = "neg ";
   provider->PositiveSign = "pos ";

   // These properties do not affect the conversion.
   // The input string cannot have decimal and group separators.
   provider->NumberDecimalSeparator = ".";
   provider->NumberGroupSeparator = ",";
   array<Int32>^sizes = {3};
   provider->NumberGroupSizes = sizes;
   provider->NumberNegativePattern = 0;
   Console::WriteLine( "This example of\n"
   "  Convert::ToInt16( String* ) and \n"
   "  Convert::ToInt16( String*, IFormatProvider* ) "
   "\ngenerates the following output. It converts "
   "several strings to \nshort values, using "
   "default formatting or a NumberFormatInfo object.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "String to convert", "Default/exception", "Provider/exception" );
   Console::WriteLine( gcnew String( protoFmt ), "-----------------", "-----------------", "------------------" );

   // Convert strings, with and without an IFormatProvider.
   ConvertToInt16( "12345", provider );
   ConvertToInt16( "+12345", provider );
   ConvertToInt16( "pos 12345", provider );
   ConvertToInt16( "-12345", provider );
   ConvertToInt16( "neg 12345", provider );
   ConvertToInt16( "12345.", provider );
   ConvertToInt16( "12,345", provider );
   ConvertToInt16( "(12345)", provider );
   ConvertToInt16( "32768", provider );
   ConvertToInt16( "-32769", provider );
}

/*
This example of
  Convert::ToInt16( String* ) and
  Convert::ToInt16( String*, IFormatProvider* )
generates the following output. It converts several strings to
short values, using default formatting or a NumberFormatInfo object.

String to convert   Default/exception   Provider/exception
-----------------   -----------------   ------------------
12345               12345               12345
+12345              12345               FormatException
pos 12345           FormatException     12345
-12345              -12345              FormatException
neg 12345           FormatException     -12345
12345.              FormatException     FormatException
12,345              FormatException     FormatException
(12345)             FormatException     FormatException
32768               OverflowException   OverflowException
-32769              OverflowException   FormatException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间
Int16 Parse


Convert ..::.ToInt16 方法 (String, Int32)

Convert
.
.
::
.
ToInt16 方法 (String, Int32)
Convert 类

将指定基的数字的字符串表示形式转换为等效的 16 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As String, _
    fromBase As Integer _
) As Short
public static short ToInt16(
    string value,
    int fromBase
)
public:
static short ToInt16(
    String^ value,
    int fromBase
)
static member ToInt16 :
        value:string *
        fromBase:int -> int16

参数

value
类型： System String
包含要转换的数字的字符串。
fromBase
类型： System Int32
value 中数字的基数，它必须是 2、8、10 或 16。

返回值

类型： System Int16
与 value 中数字等效的 16 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
ArgumentException | fromBase 不是 2、8、10 或 16。 - 或 - value，它表示一个非 10 为基的有符号数，前面带一个负号。
FormatException | value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。 value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。
OverflowException | value，它表示一个非 10 为基的有符号数，前面带一个负号。 - 或 - value 表示小于 Int16..::.MinValue 或大于 Int16..::.MaxValue 的数字。

如果 fromBase 为 16，则可以在 value 参数指定的数字前面加上“0x”或“0X”。

由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt16(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 15）解释为其符号位。因此，可以编写代码以将超出 Int16 数据类型的范围的不是以 10 为基数的数字转换为 Int16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to -32768”（0x8000 转换为 -32768），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt16(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 15）解释为其符号位。因此，可以编写代码以将超出 Int16 数据类型的范围的不是以 10 为基数的数字转换为 Int16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to -32768”（0x8000 转换为 -32768），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt16(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 15）解释为其符号位。因此，可以编写代码以将超出 Int16 数据类型的范围的不是以 10 为基数的数字转换为 Int16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to -32768”（0x8000 转换为 -32768），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt16(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 15）解释为其符号位。因此，可以编写代码以将超出 Int16 数据类型的范围的不是以 10 为基数的数字转换为 Int16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to -32768”（0x8000 转换为 -32768），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt16(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 15）解释为其符号位。因此，可以编写代码以将超出 Int16 数据类型的范围的不是以 10 为基数的数字转换为 Int16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to -32768”（0x8000 转换为 -32768），而不是引发异常。

' Create a hexadecimal value out of range of the Int16 type.
Dim value As String = Convert.ToString(CInt(Short.MaxValue) + 1, 16)
' Convert it back to a number.
Try
   Dim number As Short = Convert.ToInt16(value, 16)
   Console.WriteLine("0x{0} converts to {1}.", value, number)
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to a 16-bit integer.", value)
End Try

// Create a hexadecimal value out of range of the Int16 type.
string value = Convert.ToString((int) short.MaxValue + 1, 16);
// Convert it back to a number.
try
{
   short number = Convert.ToInt16(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to a 16-bit integer.", value);
}

在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将数值转换为对应的十六进制字符串表示形式之前检索其符号，从而确保该方法正确地处理溢出。这样，如果原始值为正数，而转换回整数的结果是一个负值，则将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将数值转换为对应的十六进制字符串表示形式之前检索其符号，从而确保该方法正确地处理溢出。这样，如果原始值为正数，而转换回整数的结果是一个负值，则将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将数值转换为对应的十六进制字符串表示形式之前检索其符号，从而确保该方法正确地处理溢出。这样，如果原始值为正数，而转换回整数的结果是一个负值，则将引发异常。

' Create a hexadecimal value out of range of the Short type.
Dim sourceNumber As Integer = CInt(Short.MaxValue) + 1
Dim isNegative As Boolean = (Math.Sign(sourceNumber) = -1)
Dim value As String = Convert.ToString(sourceNumber, 16)
Dim targetNumber As Short
Try
   targetNumber = Convert.ToInt16(value, 16)
   If Not isNegative And ((targetNumber And &H8000) <> 0) Then
      Throw New OverflowException()
   Else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber)
   End If
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to a 16-bit integer.", value)
End Try
' Displays the following to the console:
'    Unable to convert '0x8000' to a 16-bit integer.

// Create a hexadecimal value out of range of the Short type.
int sourceNumber = (int) short.MaxValue + 1;
bool isNegative = (Math.Sign(sourceNumber) == -1);
string value = Convert.ToString(sourceNumber, 16);
short targetNumber;
try
{
   targetNumber = Convert.ToInt16(value, 16);
   if (! isNegative && ((targetNumber & 0x8000) != 0))
      throw new OverflowException();
   else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to a 16-bit integer.", value);
}
// Displays the following to the console:
//    Unable to convert '0x8000' to a 16-bit integer.

下面的示例尝试将字符串数组中的每个元素解释为十六进制字符串，并将其转换为 16 为带符号整数。

Module Example
   Public Sub Main()
      Dim hexStrings() As String = { "8000", "0FFF", "f000", "00A30", "D", _
                                     "-13", "9AC61", "GAD" }
      For Each hexString As String In hexStrings
         Try
            Dim number As Short = Convert.ToInt16(hexString, 16)
            Console.WriteLine("Converted '{0}' to {1:N0}.", hexString, number)
         Catch e As FormatException
            Console.WriteLine("'{0}' is not in the correct format for a hexadecimal number.", _
                              hexString)
         Catch e As OverflowException
            Console.WriteLine("'{0}' is outside the range of an Int16.", hexString)
         Catch e As ArgumentException
            Console.WriteLine("'{0}' is invalid in base 16.", hexString)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '8000' to -32,768.
'       Converted '0FFF' to 4,095.
'       Converted 'f000' to -4,096.
'       Converted '00A30' to 2,608.
'       Converted 'D' to 13.
'       '-13' is invalid in base 16.
'       '9AC61' is outside the range of an Int16.
'       'GAD' is not in the correct format for a hexadecimal number.

using System;

public class Example
{
   public static void Main()
   {
      string[] hexStrings = { "8000", "0FFF", "f000", "00A30", "D", "-13",
                              "9AC61", "GAD" };
      foreach (string hexString in hexStrings)
      {
         try {
            short number = Convert.ToInt16(hexString, 16);
            Console.WriteLine("Converted '{0}' to {1:N0}.", hexString, number);
         }
         catch (FormatException) {
            Console.WriteLine("'{0}' is not in the correct format for a hexadecimal number.",
                              hexString);
         }
         catch (OverflowException) {
            Console.WriteLine("'{0}' is outside the range of an Int16.", hexString);
         }
         catch (ArgumentException) {
            Console.WriteLine("'{0}' is invalid in base 16.", hexString);
         }
      }
   }
}
// The example displays the following output:
//       Converted '8000' to -32,768.
//       Converted '0FFF' to 4,095.
//       Converted 'f000' to -4,096.
//       Converted '00A30' to 2,608.
//       Converted 'D' to 13.
//       '-13' is invalid in base 16.
//       '9AC61' is outside the range of an Int16.
//       'GAD' is not in the correct format for a hexadecimal number.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt16 重载
System 命名空间


Convert ..::.ToInt32 方法

Convert
.
.
::
.
ToInt32 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 32 位带符号整数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToInt32 方法 (Boolean)

Convert
.
.
::
.
ToInt32 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Boolean _
) As Integer
public static int ToInt32(
    bool value
)
public:
static int ToInt32(
    bool value
)
static member ToInt32 :
        value:bool -> int

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System Int32
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例将 Boolean 值 true 和 false 转换为整数。

Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True

Console.WriteLine("{0} converts to {1}.", falseFlag, _
                  Convert.ToInt32(falseFlag))
Console.WriteLine("{0} converts to {1}.", trueFlag, _
                  Convert.ToInt32(trueFlag))
' The example displays the following output:
'       False converts to 0.
'       True converts to 1.

bool falseFlag = false;
bool trueFlag = true;

Console.WriteLine("{0} converts to {1}.", falseFlag,
                  Convert.ToInt32(falseFlag));
Console.WriteLine("{0} converts to {1}.", trueFlag,
                  Convert.ToInt32(trueFlag));
// The example displays the following output:
//       False converts to 0.
//       True converts to 1.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (Byte)

Convert
.
.
::
.
ToInt32 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Byte _
) As Integer
public static int ToInt32(
    byte value
)
public:
static int ToInt32(
    unsigned char value
)
static member ToInt32 :
        value:byte -> int

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System Int32
与 value 等效的 32 位带符号整数。

下面的示例将字节数组中的每个元素转换为整数。

Dim bytes() As Byte = { Byte.MinValue, 14, 122, Byte.MaxValue}
Dim result As Integer

For Each byteValue As Byte In bytes
   result = Convert.ToInt32(byteValue)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     byteValue.GetType().Name, byteValue, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'       Converted the Byte value 0 to the Int32 value 0.
'       Converted the Byte value 14 to the Int32 value 14.
'       Converted the Byte value 122 to the Int32 value 122.
'       Converted the Byte value 255 to the Int32 value 255.

byte[] bytes = { Byte.MinValue, 14, 122, Byte.MaxValue};
int result;

foreach (byte byteValue in bytes)
{
   result = Convert.ToInt32(byteValue);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     byteValue.GetType().Name, byteValue,
                     result.GetType().Name, result);
}
// The example displays the following output:
//       Converted the Byte value 0 to the Int32 value 0.
//       Converted the Byte value 14 to the Int32 value 14.
//       Converted the Byte value 122 to the Int32 value 122.
//       Converted the Byte value 255 to the Int32 value 255.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (Char)

Convert
.
.
::
.
ToInt32 方法 (Char)
Convert 类

将指定的 Unicode 字符的值转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Char _
) As Integer
public static int ToInt32(
    char value
)
public:
static int ToInt32(
    wchar_t value
)
static member ToInt32 :
        value:char -> int

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Int32
与 value 等效的 32 位带符号整数。

一个 32 位有符号整数，表示 value 参数的 UTF-16 编码码位。

下面的示例将 Char 值数组中的每个元素转换为整数。

Dim chars() As Char = { "a"c, "z"c, ChrW(7), ChrW(1023), _
                        ChrW(Short.MaxValue), ChrW(&hFFFE) }
Dim result As Integer

For Each ch As Char in chars
   Try
      result = Convert.ToInt32(ch)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        ch.GetType().Name, ch, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("Unable to convert u+{0} to an Int32.", _
                        AscW(ch).ToString("X4"))
   End Try
Next
' The example displays the following output:
'       Converted the Char value 'a' to the Int32 value 97.
'       Converted the Char value 'z' to the Int32 value 122.
'       Converted the Char value '' to the Int32 value 7.
'       Converted the Char value '?' to the Int32 value 1023.
'       Converted the Char value '?' to the Int32 value 32767.
'       Converted the Char value '?' to the Int32 value 65534.

char[] chars = { 'a', 'z', '\u0007', '\u03FF',
                 '\u7FFF', '\uFFFE' };
int result;

foreach (char ch in chars)
{
   try {
      result = Convert.ToInt32(ch);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        ch.GetType().Name, ch,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("Unable to convert u+{0} to an Int32.",
                        ((int)ch).ToString("X4"));
   }
}
// The example displays the following output:
//       Converted the Char value 'a' to the Int32 value 97.
//       Converted the Char value 'z' to the Int32 value 122.
//       Converted the Char value '' to the Int32 value 7.
//       Converted the Char value '?' to the Int32 value 1023.
//       Converted the Char value '?' to the Int32 value 32767.
//       Converted the Char value '?' to the Int32 value 65534.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (DateTime)

Convert
.
.
::
.
ToInt32 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As DateTime _
) As Integer
public static int ToInt32(
    DateTime value
)
public:
static int ToInt32(
    DateTime value
)
static member ToInt32 :
        value:DateTime -> int

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System Int32
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (Decimal)

Convert
.
.
::
.
ToInt32 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Decimal _
) As Integer
public static int ToInt32(
    decimal value
)
public:
static int ToInt32(
    Decimal value
)
static member ToInt32 :
        value:decimal -> int

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System Int32
value，舍入为最接近的 32 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 32 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Int32..::.MaxValue 或小于 Int32..::.MinValue。

下面的示例尝试将 Decimal 值的数组中的每个元素转换为整数。

Dim values() As Decimal = { Decimal.MinValue, -1034.23d, -12d, 0d, 147d, _
                            199.55d, 9214.16d, Decimal.MaxValue }
Dim result As Integer

For Each value As Decimal In values
   Try
      result = Convert.ToInt32(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int32 type.", _
                        value)
   End Try
Next
' The example displays the following output:
'    -79228162514264337593543950335 is outside the range of the Int32 type.
'    Converted the Decimal value '-1034.23' to the Int32 value -1034.
'    Converted the Decimal value '-12' to the Int32 value -12.
'    Converted the Decimal value '0' to the Int32 value 0.
'    Converted the Decimal value '147' to the Int32 value 147.
'    Converted the Decimal value '199.55' to the Int32 value 200.
'    Converted the Decimal value '9214.16' to the Int32 value 9214.
'    79228162514264337593543950335 is outside the range of the Int32 type.

decimal[] values= { Decimal.MinValue, -1034.23m, -12m, 0m, 147m,
                    199.55m, 9214.16m, Decimal.MaxValue };
int result;

foreach (decimal value in values)
{
   try {
      result = Convert.ToInt32(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int32 type.",
                        value);
   }
}
// The example displays the following output:
//    -79228162514264337593543950335 is outside the range of the Int32 type.
//    Converted the Decimal value '-1034.23' to the Int32 value -1034.
//    Converted the Decimal value '-12' to the Int32 value -12.
//    Converted the Decimal value '0' to the Int32 value 0.
//    Converted the Decimal value '147' to the Int32 value 147.
//    Converted the Decimal value '199.55' to the Int32 value 200.
//    Converted the Decimal value '9214.16' to the Int32 value 9214.
//    79228162514264337593543950335 is outside the range of the Int32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间
Math Round


Convert ..::.ToInt32 方法 (Double)

Convert
.
.
::
.
ToInt32 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Double _
) As Integer
public static int ToInt32(
    double value
)
public:
static int ToInt32(
    double value
)
static member ToInt32 :
        value:float -> int

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System Int32
value，舍入为最接近的 32 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 32 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Int32..::.MaxValue 或小于 Int32..::.MinValue。

下面的示例尝试将 Double 值的数组中的每个元素转换为整数。

Dim values() As Double = { Double.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Double.MaxValue }
Dim result As Integer

For Each value As Double In values
   Try
      result = Convert.ToInt32(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int32 type.", value)
   End Try
Next
'    -1.79769313486232E+308 is outside the range of the Int32 type.
'    -13800000000 is outside the range of the Int16 type.
'    Converted the Double value '-1023.299' to the Int32 value -1023.
'    Converted the Double value '-12.98' to the Int32 value -13.
'    Converted the Double value '0' to the Int32 value 0.
'    Converted the Double value '9.113E-16' to the Int32 value 0.
'    Converted the Double value '103.919' to the Int32 value 104.
'    Converted the Double value '17834.191' to the Int32 value 17834.
'    1.79769313486232E+308 is outside the range of the Int32 type.

double[] values= { Double.MinValue, -1.38e10, -1023.299, -12.98,
                   0, 9.113e-16, 103.919, 17834.191, Double.MaxValue };
int result;

foreach (double value in values)
{
   try {
      result = Convert.ToInt32(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int32 type.", value);
   }
}
//    -1.79769313486232E+308 is outside the range of the Int32 type.
//    -13800000000 is outside the range of the Int16 type.
//    Converted the Double value '-1023.299' to the Int32 value -1023.
//    Converted the Double value '-12.98' to the Int32 value -13.
//    Converted the Double value '0' to the Int32 value 0.
//    Converted the Double value '9.113E-16' to the Int32 value 0.
//    Converted the Double value '103.919' to the Int32 value 104.
//    Converted the Double value '17834.191' to the Int32 value 17834.
//    1.79769313486232E+308 is outside the range of the Int32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间
Double
Math Round


Convert ..::.ToInt32 方法 (Int16)

Convert
.
.
::
.
ToInt32 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Short _
) As Integer
public static int ToInt32(
    short value
)
public:
static int ToInt32(
    short value
)
static member ToInt32 :
        value:int16 -> int

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System Int32
与 value 等效的 32 位带符号整数。

下面的示例将 16 位带符号整数数组中的每个元素转换为整数。

Dim numbers() As Short = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue }
Dim result As Integer

For Each number As Short In numbers
   result = Convert.ToInt32(number)
   Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Int16 value -32768 to a Int32 value -32768.
'    Converted the Int16 value -1 to a Int32 value -1.
'    Converted the Int16 value 0 to a Int32 value 0.
'    Converted the Int16 value 121 to a Int32 value 121.
'    Converted the Int16 value 340 to a Int32 value 340.
'    Converted the Int16 value 32767 to a Int32 value 32767.

short[] numbers= { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue };
int result;

foreach (short number in numbers)
{
   result = Convert.ToInt32(number);
   Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Int16 value -32768 to a Int32 value -32768.
//    Converted the Int16 value -1 to a Int32 value -1.
//    Converted the Int16 value 0 to a Int32 value 0.
//    Converted the Int16 value 121 to a Int32 value 121.
//    Converted the Int16 value 340 to a Int32 value 340.
//    Converted the Int16 value 32767 to a Int32 value 32767.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (Int32)

Convert
.
.
::
.
ToInt32 方法 (Int32)
Convert 类

返回指定的 32 位带符号整数；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Integer _
) As Integer
public static int ToInt32(
    int value
)
public:
static int ToInt32(
    int value
)
static member ToInt32 :
        value:int -> int

参数

value
类型： System Int32
要返回的 32 位带符号整数。

返回值

类型： System Int32
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (Int64)

Convert
.
.
::
.
ToInt32 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Long _
) As Integer
public static int ToInt32(
    long value
)
public:
static int ToInt32(
    long long value
)
static member ToInt32 :
        value:int64 -> int

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System Int32
与 value 等效的 32 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int32..::.MaxValue 或小于 Int32..::.MinValue。

下面的示例尝试将长型整数数组中的每个元素转换为整数。

Dim numbers() As Long = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue }
Dim result As Integer
For Each number As Long In numbers
   Try
      result = Convert.ToInt32(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int64 value -9223372036854775808 is outside the range of the Int32 type.
'    Converted the Int64 value -1 to the Int32 value -1.
'    Converted the Int64 value 0 to the Int32 value 0.
'    Converted the Int64 value 121 to the Int32 value 121.
'    Converted the Int64 value 340 to the Int32 value 340.
'    The Int64 value 9223372036854775807 is outside the range of the Int32 type.

long[] numbers = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue };
int result;
foreach (long number in numbers)
{
   try {
      result = Convert.ToInt32(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int64 value -9223372036854775808 is outside the range of the Int32 type.
//    Converted the Int64 value -1 to the Int32 value -1.
//    Converted the Int64 value 0 to the Int32 value 0.
//    Converted the Int64 value 121 to the Int32 value 121.
//    Converted the Int64 value 340 to the Int32 value 340.
//    The Int64 value 9223372036854775807 is outside the range of the Int32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (Object)

Convert
.
.
::
.
ToInt32 方法 (Object)
Convert 类

将指定对象的值转换为 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Object _
) As Integer
public static int ToInt32(
    Object value
)
public:
static int ToInt32(
    Object^ value
)
static member ToInt32 :
        value:Object -> int

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Int32
与 value 等效的 32 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 未实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 Int32..::.MinValue 或大于 Int32..::.MaxValue 的数字。

调用 value 的基础类型的 IConvertible..::.ToInt32 方法的结果。

下面的示例将对象数组中的每个元素转换为整数。

Dim values() As Object = { True, -12, 163, 935, "x"c, #5/12/2009#, _
                           "104", "103.0", "-1", _
                           "1.00e2", "One", 1.00e2, 16.3e42}
Dim result As Integer

For Each value As Object In values
   Try
      result = Convert.ToInt32(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("No conversion to an Int32 exists for the {0} value {1}.", _
                        value.GetType().Name, value)

   End Try
Next
' The example displays the following output:
'    Converted the Boolean value True to the Int32 value 1.
'    Converted the Int32 value -12 to the Int32 value -12.
'    Converted the Int32 value 163 to the Int32 value 163.
'    Converted the Int32 value 935 to the Int32 value 935.
'    Converted the Char value x to the Int32 value 120.
'    No conversion to an Int32 exists for the DateTime value 5/12/2009 12:00:00 AM.
'    Converted the String value 104 to the Int32 value 104.
'    The String value 103.0 is not in a recognizable format.
'    Converted the String value -1 to the Int32 value -1.
'    The String value 1.00e2 is not in a recognizable format.
'    The String value One is not in a recognizable format.
'    Converted the Double value 100 to the Int32 value 100.
'    The Double value 1.63E+43 is outside the range of the Int32 type.

object[] values = { true, -12, 163, 935, 'x', new DateTime(2009, 5, 12),
                    "104", "103.0", "-1",
                    "1.00e2", "One", 1.00e2, 16.3e42};
int result;

foreach (object value in values)
{
   try {
      result = Convert.ToInt32(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("No conversion to an Int32 exists for the {0} value {1}.",
                        value.GetType().Name, value);

   }
}
// The example displays the following output:
//    Converted the Boolean value True to the Int32 value 1.
//    Converted the Int32 value -12 to the Int32 value -12.
//    Converted the Int32 value 163 to the Int32 value 163.
//    Converted the Int32 value 935 to the Int32 value 935.
//    Converted the Char value x to the Int32 value 120.
//    No conversion to an Int32 exists for the DateTime value 5/12/2009 12:00:00 AM.
//    Converted the String value 104 to the Int32 value 104.
//    The String value 103.0 is not in a recognizable format.
//    Converted the String value -1 to the Int32 value -1.
//    The String value 1.00e2 is not in a recognizable format.
//    The String value One is not in a recognizable format.
//    Converted the Double value 100 to the Int32 value 100.
//    The Double value 1.63E+43 is outside the range of the Int32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (SByte)

Convert
.
.
::
.
ToInt32 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的 32 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt32 ( _
    value As SByte _
) As Integer
[CLSCompliantAttribute(false)]
public static int ToInt32(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static int ToInt32(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToInt32 :
        value:sbyte -> int

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System Int32
与 value 等效的 8 位带符号整数。

下面的示例将带符号字节数组中的每个元素转换为整数。

Dim numbers() As SByte = { SByte.MinValue, -1, 0, 10, SByte.MaxValue }
Dim result As Integer

For Each number As SByte In numbers
   result = Convert.ToInt32(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'       Converted the SByte value -128 to the Int32 value -128.
'       Converted the SByte value -1 to the Int32 value -1.
'       Converted the SByte value 0 to the Int32 value 0.
'       Converted the SByte value 10 to the Int32 value 10.
'       Converted the SByte value 127 to the Int32 value 127.

sbyte[] numbers = { SByte.MinValue, -1, 0, 10, SByte.MaxValue };
int result;

foreach (sbyte number in numbers)
{
   result = Convert.ToInt32(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//       Converted the SByte value -128 to the Int32 value -128.
//       Converted the SByte value -1 to the Int32 value -1.
//       Converted the SByte value 0 to the Int32 value 0.
//       Converted the SByte value 10 to the Int32 value 10.
//       Converted the SByte value 127 to the Int32 value 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (Single)

Convert
.
.
::
.
ToInt32 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Single _
) As Integer
public static int ToInt32(
    float value
)
public:
static int ToInt32(
    float value
)
static member ToInt32 :
        value:float32 -> int

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System Int32
value，舍入为最接近的 32 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 32 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Int32..::.MaxValue 或小于 Int32..::.MinValue。

下面的示例尝试将 Single 值的数组中的每个元素转换为整数。

Dim values() As Single = { Single.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Single.MaxValue }
Dim result As Integer

For Each value As Single In values
   Try
      result = Convert.ToInt32(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int32 type.", value)
   End Try
Next
' The example displays the following output:
'    -3.40282346638529E+38 is outside the range of the Int32 type.
'    -13799999488 is outside the range of the Int32 type.
'    Converted the Double value -1023.29901123047 to the Int32 value -1023.
'    Converted the Double value -12.9799995422363 to the Int32 value -13.
'    Converted the Double value 0 to the Int32 value 0.
'    Converted the Double value 9.11299983940444E-16 to the Int32 value 0.
'    Converted the Double value 103.918998718262 to the Int32 value 104.
'    Converted the Double value 17834.19140625 to the Int32 value 17834.
'    3.40282346638529E+38 is outside the range of the Int32 type.

float[] values= { Single.MinValue, -1.38e10f, -1023.299f, -12.98f,
                  0f, 9.113e-16f, 103.919f, 17834.191f, Single.MaxValue };
int result;

foreach (float value in values)
{
   try {
      result = Convert.ToInt32(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value, result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int32 type.", value);
   }
}
// The example displays the following output:
//    -3.40282346638529E+38 is outside the range of the Int32 type.
//    -13799999488 is outside the range of the Int32 type.
//    Converted the Double value -1023.29901123047 to the Int32 value -1023.
//    Converted the Double value -12.9799995422363 to the Int32 value -13.
//    Converted the Double value 0 to the Int32 value 0.
//    Converted the Double value 9.11299983940444E-16 to the Int32 value 0.
//    Converted the Double value 103.918998718262 to the Int32 value 104.
//    Converted the Double value 17834.19140625 to the Int32 value 17834.
//    3.40282346638529E+38 is outside the range of the Int32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间
Single
Math Round


Convert ..::.ToInt32 方法 (String)

Convert
.
.
::
.
ToInt32 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As String _
) As Integer
public static int ToInt32(
    string value
)
public:
static int ToInt32(
    String^ value
)
static member ToInt32 :
        value:string -> int

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Int32
与 value 中数字等效的 32 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 Int32..::.MinValue 或大于 Int32..::.MaxValue 的数字。

在 value 上调用 Int32..::.Parse 方法的结果。

如果您希望在转换失败时不处理异常，则可以转而调用 Int32..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Int32..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例尝试将数字字符串数组中的每个元素转换为整数。

Dim values() As String = { "One", "1.34e28", "-26.87", "-18", "-6.00", _
                           " 0", "137", "1601.9", Int32.MaxValue.ToString() }
Dim result As Integer

For Each value As String In values
   Try
      result = Convert.ToInt32(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int32 type.", value)
   Catch e As FormatException
      Console.WriteLine("The {0} value '{1}' is not in a recognizable format.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    The String value 'One' is not in a recognizable format.
'    The String value '1.34e28' is not in a recognizable format.
'    The String value '-26.87' is not in a recognizable format.
'    Converted the String value '-18' to the Int32 value -18.
'    The String value '-6.00' is not in a recognizable format.
'    Converted the String value ' 0' to the Int32 value 0.
'    Converted the String value '137' to the Int32 value 137.
'    The String value '1601.9' is not in a recognizable format.
'    Converted the String value '2147483647' to the Int32 value 2147483647.

string[] values = { "One", "1.34e28", "-26.87", "-18", "-6.00",
                    " 0", "137", "1601.9", Int32.MaxValue.ToString() };
int result;

foreach (string value in values)
{
   try {
      result = Convert.ToInt32(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value, result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int32 type.", value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value '{1}' is not in a recognizable format.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    The String value 'One' is not in a recognizable format.
//    The String value '1.34e28' is not in a recognizable format.
//    The String value '-26.87' is not in a recognizable format.
//    Converted the String value '-18' to the Int32 value -18.
//    The String value '-6.00' is not in a recognizable format.
//    Converted the String value ' 0' to the Int32 value 0.
//    Converted the String value '137' to the Int32 value 137.
//    The String value '1601.9' is not in a recognizable format.
//    Converted the String value '2147483647' to the Int32 value 2147483647.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (UInt16)

Convert
.
.
::
.
ToInt32 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的 32 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt32 ( _
    value As UShort _
) As Integer
[CLSCompliantAttribute(false)]
public static int ToInt32(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static int ToInt32(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToInt32 :
        value:uint16 -> int

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System Int32
与 value 等效的 32 位带符号整数。

下面的示例将 16 位无符号整数数组中的每个元素转换为整数。

Dim numbers() As UShort = { UInt16.MinValue, 121, 340, UInt16.MaxValue }
Dim result As Integer
For Each number As UShort In numbers
   Try
      result = Convert.ToInt32(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt16 value 0 to the Int32 value 0.
'    Converted the UInt16 value 121 to the Int32 value 121.
'    Converted the UInt16 value 340 to the Int32 value 340.
'    Converted the UInt16 value 65535 to the Int32 value 65535.

ushort[] numbers = { UInt16.MinValue, 121, 340, UInt16.MaxValue };
int result;
foreach (ushort number in numbers)
{
   try {
      result = Convert.ToInt32(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt16 value 0 to the Int32 value 0.
//    Converted the UInt16 value 121 to the Int32 value 121.
//    Converted the UInt16 value 340 to the Int32 value 340.
//    Converted the UInt16 value 65535 to the Int32 value 65535.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (UInt32)

Convert
.
.
::
.
ToInt32 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的 32 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt32 ( _
    value As UInteger _
) As Integer
[CLSCompliantAttribute(false)]
public static int ToInt32(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static int ToInt32(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToInt32 :
        value:uint32 -> int

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System Int32
与 value 等效的 32 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int32..::.MaxValue。

下面的示例尝试将无符号整数数组中的每个元素转换为带符号整数。

Dim numbers() As UInteger = { UInt32.MinValue, 121, 340, UInt32.MaxValue }
Dim result As Integer
For Each number As UInteger In numbers
   Try
      result = Convert.ToInt32(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt32 value 0 to the Int32 value 0.
'    Converted the UInt32 value 121 to the Int32 value 121.
'    Converted the UInt32 value 340 to the Int32 value 340.
'    The UInt32 value 4294967295 is outside the range of the Int32 type.

uint[] numbers = { UInt32.MinValue, 121, 340, UInt32.MaxValue };
int result;
foreach (uint number in numbers)
{
   try {
      result = Convert.ToInt32(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt32 value 0 to the Int32 value 0.
//    Converted the UInt32 value 121 to the Int32 value 121.
//    Converted the UInt32 value 340 to the Int32 value 340.
//    The UInt32 value 4294967295 is outside the range of the Int32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (UInt64)

Convert
.
.
::
.
ToInt32 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的 32 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt32 ( _
    value As ULong _
) As Integer
[CLSCompliantAttribute(false)]
public static int ToInt32(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static int ToInt32(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToInt32 :
        value:uint64 -> int

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System Int32
与 value 等效的 32 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int32..::.MaxValue。

下面的示例尝试将无符号长型整数数组中的每个元素转换为无符号整数。

Dim numbers() As ULong = { UInt64.MinValue, 121, 340, UInt64.MaxValue }
Dim result As Integer
For Each number As ULong In numbers
   Try
      result = Convert.ToInt32(number)
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt64 value 0 to a Int32 value 0.
'    Converted the UInt64 value 121 to a Int32 value 121.
'    Converted the UInt64 value 340 to a Int32 value 340.
'    The UInt64 value 18446744073709551615 is outside the range of the Int32 type.

ulong[] numbers = { UInt64.MinValue, 121, 340, UInt64.MaxValue };
int result;
foreach (ulong number in numbers)
{
   try {
      result = Convert.ToInt32(number);
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int32 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt64 value 0 to a Int32 value 0.
//    Converted the UInt64 value 121 to a Int32 value 121.
//    Converted the UInt64 value 340 to a Int32 value 340.
//    The UInt64 value 18446744073709551615 is outside the range of the Int32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToInt32 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式信息，将指定对象的值转换为 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As Object, _
    provider As IFormatProvider _
) As Integer
public static int ToInt32(
    Object value,
    IFormatProvider provider
)
public:
static int ToInt32(
    Object^ value,
    IFormatProvider^ provider
)
static member ToInt32 :
        value:Object *
        provider:IFormatProvider -> int

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Int32
与 value 等效的 32 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible。
OverflowException | value 表示小于 Int32..::.MinValue 或大于 Int32..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToInt32 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt32 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt32 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt32 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt32 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。

Imports System.Collections

Module IConvertibleProviderDemo

    ' Define the types of averaging available in the class
    ' implementing IConvertible.
    Enum AverageType as Short
        None = 0
        GeometricMean = 1
        ArithmeticMean = 2
        Median = 3
    End Enum

    ' Pass an instance of this class to methods that require an
    ' IFormatProvider. The class instance determines the type of
    ' average to calculate.
    Public Class AverageInfo
        Implements IFormatProvider

        Protected  AvgType      As AverageType

        ' Specify the type of averaging in the constructor.
        Public Sub New( avgType As AverageType )
            Me.AvgType = avgType
        End Sub

        ' This method returns a reference to the containing object
        ' if an object of AverageInfo type is requested.
        Public Function GetFormat( argType As Type ) As Object _
            Implements IFormatProvider.GetFormat

            If argType Is GetType( AverageInfo ) Then
                Return Me
            Else
                Return Nothing
            End If
        End Function

        ' Use this property to set or get the type of averaging.
        Public Property TypeOfAverage( ) As AverageType
            Get
                Return Me.AvgType
            End Get
            Set( ByVal value as AverageType )
                Me.AvgType = value
            End Set
        End Property
    End Class

    ' This class encapsulates an array of Double values and implements
    ' the IConvertible interface. Most of the IConvertible methods
    ' return an average of the array elements in one of three types:
    ' arithmetic mean, geometric mean, or median.
    Public Class DataSet
        Implements IConvertible

        Protected data              As ArrayList
        Protected defaultProvider   As AverageInfo

        ' Construct the object and add an initial list of values.
        ' Create a default format provider.
        Public Sub New( ParamArray values( ) As Double )
            data = New ArrayList( values )
            defaultProvider = New AverageInfo( _
                AverageType.ArithmeticMean )
        End Sub

        ' Add additional values with this method.
        Public Function Add( value As Double ) As Integer
            data.Add( value )
            Return data.Count
        End Function

        ' Get, set, and add values with this indexer property.
        Default Public Property Item(index As Integer) As Double
            Get
                If index >= 0 AndAlso index < data.Count Then
                    Return System.Convert.ToDouble( data( index ) )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.get] Index out of range." )
                End If
            End Get
            Set
                If index >= 0 AndAlso index < data.Count Then
                    data( index ) = value

                ElseIf index = data.Count Then
                    data.Add( value )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.set] Index out of range." )
                End If
            End Set
        End Property

        ' This property returns the number of elements in the object.
        Public ReadOnly Property Count( ) As Integer
            Get
                Return data.Count
            End Get
        End Property

        ' This method calculates the average of the object's elements.
        Protected Function Average( ByVal avgType As AverageType ) As Double

            Dim SumProd As Double
            Dim Index   As Integer

            If data.Count = 0 Then Return 0.0

            Select Case avgType

                Case AverageType.GeometricMean

                    SumProd = 1.0
                    For Index = 0 To data.Count - 1
                        SumProd *= data( Index )
                    Next Index

                    ' This calculation will not fail with negative
                    ' elements.
                    Return Math.Sign( SumProd ) * Math.Pow( _
                        Math.Abs( SumProd ), 1.0 / data.Count )

                Case AverageType.ArithmeticMean

                    SumProd = 0.0
                    For Index = 0 To data.Count - 1
                        SumProd += data( Index )
                    Next Index

                    Return SumProd / data.Count

                Case AverageType.Median

                    If data.Count Mod 2 = 0 Then
                        Return ( data( data.Count \ 2 ) + _
                            data( data.Count \ 2 - 1 ) ) / 2.0
                    Else
                        Return data( data.Count \ 2 )
                    End If
            End Select
        End Function

        ' Get the AverageInfo object from the caller's format
        ' provider, or use the local default.
        Protected Function GetAverageInfo( _
            provider As IFormatProvider ) As AverageInfo

            Dim avgInfo As AverageInfo = Nothing

            If Not provider Is Nothing Then
                avgInfo = provider.GetFormat( GetType( AverageInfo ) )
            End If

            Return IIf( avgInfo Is Nothing, defaultProvider, avgInfo )

        End Function

        ' Calculate the average and limit the range.
        Protected Function CalcNLimitAverage( min As Double, _
            max As Double, provider as IFormatProvider ) As Double

            ' Get the format provider and calculate the average.
            Dim avgInfo As AverageInfo = GetAverageInfo( provider )
            Dim avg As Double = Average( avgInfo.TypeOfAverage )

            ' Limit the range, based on the minimum and maximum values
            ' for the type.
            Return IIf( avg > max, max, IIf( avg < min, min, avg ) )

        End Function

        ' The following elements are required by IConvertible.

        ' None of these conversion functions throw exceptions. When
        ' the data is out of range for the type, the appropriate
        ' MinValue or MaxValue is used.
        Public Function GetTypeCode( ) As TypeCode _
            Implements IConvertible.GetTypeCode
            Return TypeCode.Object
        End Function

        Function ToBoolean( ByVal provider As IFormatProvider ) As _
            Boolean Implements IConvertible.ToBoolean

            ' ToBoolean is false if the dataset is empty.
            If data.Count <= 0 Then
                Return False

            ' For median averaging, ToBoolean is true if any
            ' non-discarded elements are nonzero.
            ElseIf AverageType.Median = _
                GetAverageInfo( provider ).TypeOfAverage Then

                If data.Count Mod 2 = 0 Then
                    Return ( data( data.Count \ 2 ) <> 0.0 Or _
                        data( data.Count \ 2 - 1 ) <> 0.0 )
                Else
                    Return data( data.Count \ 2 ) <> 0.0
                End If

            ' For arithmetic or geometric mean averaging, ToBoolean is
            ' true if any element of the dataset is nonzero.
            Else
                Dim Index As Integer
                For Index = 0 To data.Count - 1
                    If data( Index ) <> 0.0 Then Return True
                Next Index
                Return False
            End If
        End Function

        Function ToByte( ByVal provider As IFormatProvider ) As Byte _
            Implements IConvertible.ToByte
            Return Convert.ToByte( CalcNLimitAverage( _
                Byte.MinValue, Byte.MaxValue, provider ) )
        End Function

        Function ToChar( ByVal provider As IFormatProvider ) As Char _
            Implements IConvertible.ToChar
            Return Convert.ToChar( Convert.ToUInt16( _
                CalcNLimitAverage( 0.0, &HFFFF, provider ) ) )
        End Function

        ' Convert to DateTime by adding the calculated average as
        ' seconds to the current date and time. A valid DateTime is
        ' always returned.
        Function ToDateTime( ByVal provider As IFormatProvider ) As _
            DateTime Implements IConvertible.ToDateTime
            Dim seconds As Double = Average( _
                GetAverageInfo( provider ).TypeOfAverage )
            Try
                Return DateTime.Now.AddSeconds( seconds )
            Catch ex As ArgumentOutOfRangeException
                Return IIf( seconds < 0.0, DateTime.MinValue, _
                    DateTime.MaxValue )
            End Try
        End Function

        Function ToDecimal( ByVal provider As IFormatProvider ) As _
            Decimal Implements IConvertible.ToDecimal

            ' The Double conversion rounds Decimal.MinValue and
            ' Decimal.MaxValue to invalid Decimal values, so the
            ' following limits must be used.
            Return Convert.ToDecimal( CalcNLimitAverage( _
                -79228162514264330000000000000.0, _
                79228162514264330000000000000.0, provider ) )
        End Function

        Function ToDouble( ByVal provider As IFormatProvider) As _
            Double Implements IConvertible.ToDouble
            Return Average( GetAverageInfo( provider ).TypeOfAverage )
        End Function

        Function ToInt16( ByVal provider As IFormatProvider ) As _
            Short Implements IConvertible.ToInt16
            Return Convert.ToInt16( CalcNLimitAverage( _
                Int16.MinValue, Int16.MaxValue, provider ) )
        End Function

        Function ToInt32( ByVal provider As IFormatProvider ) As _
            Integer Implements IConvertible.ToInt32
            Return Convert.ToInt32( CalcNLimitAverage( _
                Int32.MinValue, Int32.MaxValue, provider ) )
        End Function

        Function ToInt64( ByVal provider As IFormatProvider ) As Long _
            Implements IConvertible.ToInt64

            ' The Double conversion rounds Int64.MinValue and
            ' Int64.MaxValue to invalid Long values, so the following
            ' limits must be used.
            Return Convert.ToInt64( CalcNLimitAverage( _
                -9223372036854775000, 9223372036854775000, provider ) )
        End Function

        Function ToSByte( ByVal provider As IFormatProvider ) As _
            SByte Implements IConvertible.ToSByte

            ' SByte.MinValue and SByte.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToSByte( CalcNLimitAverage( _
                -128, 127, provider ) )
        End Function

        Function ToSingle( ByVal provider As IFormatProvider ) As _
            Single Implements IConvertible.ToSingle
            Return Convert.ToSingle( CalcNLimitAverage( _
                Single.MinValue, Single.MaxValue, provider ) )
        End Function

        Function ToUInt16( ByVal provider As IFormatProvider ) As _
            UInt16 Implements IConvertible.ToUInt16

            ' UInt16.MinValue and UInt16.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt16( CalcNLimitAverage( _
                0, &HFFFF, provider ) )
        End Function

        Function ToUInt32( ByVal provider As IFormatProvider ) As _
            UInt32 Implements IConvertible.ToUInt32

            ' UInt32.MinValue and UInt32.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt32( CalcNLimitAverage( _
                0, 4294967295, provider ) )
        End Function

        Function ToUInt64( ByVal provider As IFormatProvider ) As _
            UInt64 Implements IConvertible.ToUInt64

            ' UInt64.MinValue and UInt64.MaxValue are not defined in
            ' Visual Basic. The Double conversion would have rounded
            ' UInt64.MaxValue, so the following limit must be used.
            Return Convert.ToUInt64( CalcNLimitAverage( _
                0, 18446744073709550000.0, provider ) )
        End Function

        Function ToType( ByVal conversionType As Type, _
            ByVal provider As IFormatProvider) As Object _
            Implements IConvertible.ToType
            Return Convert.ChangeType( Average( GetAverageInfo( _
                provider ).TypeOfAverage ), conversionType )
        End Function

        Overloads Function ToString( ByVal provider As IFormatProvider _
            ) As String Implements IConvertible.ToString
            Dim avgType as AverageType = _
                GetAverageInfo( provider ).TypeOfAverage
            Return String.Format( "( {0}: {1:G10} )", avgType, _
                Average( avgType ) )
        End Function
    End Class

    ' Display a DataSet with three different format providers.
    Sub DisplayDataSet( ds As DataSet )

        Dim fmt    As String      = "{0,-12}{1,20}{2,20}{3,20}"
        Dim median As AverageInfo = New AverageInfo( AverageType.Median )
        Dim geMean As AverageInfo = _
            New AverageInfo( AverageType.GeometricMean )
        Dim iX     As Integer

        ' Display the dataset elements.
        If ds.Count > 0 Then
            Console.Write( vbCrLf & "DataSet: [{0}", ds( 0 ) )
            For iX = 1 To ds.Count - 1
                Console.Write( ", {0}", ds( iX ) )
            Next iX
            Console.WriteLine( "]" & vbCrLf )
        End If

        Console.WriteLine( fmt, "Convert.", "Default", _
            "Geometric Mean", "Median" )
        Console.WriteLine( fmt, "--------", "-------", _
            "--------------", "------" )
        Console.WriteLine( fmt, "ToBoolean", _
            Convert.ToBoolean( ds, Nothing ), _
            Convert.ToBoolean( ds, geMean ), _
            Convert.ToBoolean( ds, median ) )
        Console.WriteLine( fmt, "ToByte", _
            Convert.ToByte( ds, Nothing ), _
            Convert.ToByte( ds, geMean ), _
            Convert.ToByte( ds, median ) )
        Console.WriteLine( fmt, "ToChar", _
            Convert.ToChar( ds, Nothing ), _
            Convert.ToChar( ds, geMean ), _
            Convert.ToChar( ds, median ) )
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" & _
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", _
            "ToDateTime", Convert.ToDateTime( ds, Nothing ), _
            Convert.ToDateTime( ds, geMean ), _
            Convert.ToDateTime( ds, median ) )
        Console.WriteLine( fmt, "ToDecimal", _
            Convert.ToDecimal( ds, Nothing ), _
            Convert.ToDecimal( ds, geMean ), _
            Convert.ToDecimal( ds, median ) )
        Console.WriteLine( fmt, "ToDouble", _
            Convert.ToDouble( ds, Nothing ), _
            Convert.ToDouble( ds, geMean ), _
            Convert.ToDouble( ds, median ) )
        Console.WriteLine( fmt, "ToInt16", _
            Convert.ToInt16( ds, Nothing ), _
            Convert.ToInt16( ds, geMean ), _
            Convert.ToInt16( ds, median ) )
        Console.WriteLine( fmt, "ToInt32", _
            Convert.ToInt32( ds, Nothing ), _
            Convert.ToInt32( ds, geMean ), _
            Convert.ToInt32( ds, median ) )
        Console.WriteLine( fmt, "ToInt64", _
            Convert.ToInt64( ds, Nothing ), _
            Convert.ToInt64( ds, geMean ), _
            Convert.ToInt64( ds, median ) )
        Console.WriteLine( fmt, "ToSByte", _
            Convert.ToSByte( ds, Nothing ), _
            Convert.ToSByte( ds, geMean ), _
            Convert.ToSByte( ds, median ) )
        Console.WriteLine( fmt, "ToSingle", _
            Convert.ToSingle( ds, Nothing ), _
            Convert.ToSingle( ds, geMean ), _
            Convert.ToSingle( ds, median ) )
        Console.WriteLine( fmt, "ToUInt16", _
            Convert.ToUInt16( ds, Nothing ), _
            Convert.ToUInt16( ds, geMean ), _
            Convert.ToUInt16( ds, median ) )
        Console.WriteLine( fmt, "ToUInt32", _
            Convert.ToUInt32( ds, Nothing ), _
            Convert.ToUInt32( ds, geMean ), _
            Convert.ToUInt32( ds, median ) )
        Console.WriteLine( fmt, "ToUInt64", _
            Convert.ToUInt64( ds, Nothing ), _
            Convert.ToUInt64( ds, geMean ), _
            Convert.ToUInt64( ds, median ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Convert.To<Type>( Object, " & _
            "IFormatProvider ) methods " & vbCrLf & "generates " & _
            "the following output. The example displays the " & _
            "values " & vbCrLf & "returned by the methods, " & _
            "using several IFormatProvider objects." & vbCrLf )

        Dim ds1 As New DataSet( 10.5, 22.2, 45.9, 88.7, 156.05, 297.6 )
        DisplayDataSet( ds1 )

        Dim ds2 As New DataSet( _
            359999.95, 425000, 499999.5, 775000, 1695000 )
        DisplayDataSet( ds2 )
    End Sub
End Module

' This example of the Convert.To<Type>( Object, IFormatProvider ) methods
' generates the following output. The example displays the values
' returned by the methods, using several IFormatProvider objects.
'
' DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       103                  59                  67
' ToChar                         g                   ;                   C
' ToDateTime   2003-05-13 14:52:53 2003-05-13 14:52:09 2003-05-13 14:52:17
' ToDecimal       103.491666666667    59.4332135445164                67.3
' ToDouble        103.491666666667    59.4332135445164                67.3
' ToInt16                      103                  59                  67
' ToInt32                      103                  59                  67
' ToInt64                      103                  59                  67
' ToSByte                      103                  59                  67
' ToSingle                103.4917            59.43321                67.3
' ToUInt16                     103                  59                  67
' ToUInt32                     103                  59                  67
' ToUInt64                     103                  59                  67
'
' DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       255                 255                 255
' ToChar                         ?                   ?                   ?
' ToDateTime   2003-05-22 07:27:49 2003-05-20 22:17:27 2003-05-19 09:44:29
' ToDecimal              750999.89    631577.237188435            499999.5
' ToDouble               750999.89    631577.237188435            499999.5
' ToInt16                    32767               32767               32767
' ToInt32                   751000              631577              500000
' ToInt64                   751000              631577              500000
' ToSByte                      127                 127                 127
' ToSingle                750999.9            631577.3            499999.5
' ToUInt16                   65535               65535               65535
' ToUInt32                  751000              631577              500000
' ToUInt64                  751000              631577              500000

using System;
using System.Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
public enum AverageType : short
{
    None = 0,
    GeometricMean = 1,
    ArithmeticMean = 2,
    Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
public class AverageInfo : IFormatProvider
{
    protected AverageType AvgType;

    // Specify the type of averaging in the constructor.
    public AverageInfo( AverageType avgType )
    {
        this.AvgType = avgType;
    }

    // This method returns a reference to the containing object
    // if an object of AverageInfo type is requested.
    public object GetFormat( Type argType )
    {
        if ( argType == typeof( AverageInfo ) )
            return this;
        else
            return null;
    }

    // Use this property to set or get the type of averaging.
    public AverageType TypeOfAverage
    {
        get { return this.AvgType; }
        set { this.AvgType = value; }
    }
}

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
public class DataSet : IConvertible
{
    protected ArrayList     data;
    protected AverageInfo   defaultProvider;

    // Construct the object and add an initial list of values.
    // Create a default format provider.
    public DataSet( params double[ ] values )
    {
        data = new ArrayList( values );
        defaultProvider =
            new AverageInfo( AverageType.ArithmeticMean );
    }

    // Add additional values with this method.
    public int Add( double value )
    {
        data.Add( value );
        return data.Count;
    }

    // Get, set, and add values with this indexer property.
    public double this[ int index ]
    {
        get
        {
            if( index >= 0 && index < data.Count )
                return (double)data[ index ];
            else
                throw new InvalidOperationException(
                    "[DataSet.get] Index out of range." );
        }
        set
        {
            if( index >= 0 && index < data.Count )
                data[ index ] = value;

            else if( index == data.Count )
                data.Add( value );
            else
                throw new InvalidOperationException(
                    "[DataSet.set] Index out of range." );
        }
    }

    // This property returns the number of elements in the object.
    public int Count
    {
        get { return data.Count; }
    }

    // This method calculates the average of the object's elements.
    protected double Average( AverageType avgType )
    {
        double  SumProd;

        if( data.Count == 0 )
            return 0.0;

        switch( avgType )
        {
            case AverageType.GeometricMean:

                SumProd = 1.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd *= (double)data[ Index ];

                // This calculation will not fail with negative
                // elements.
                return Math.Sign( SumProd ) * Math.Pow(
                    Math.Abs( SumProd ), 1.0 / data.Count );

            case AverageType.ArithmeticMean:

                SumProd = 0.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd += (double)data[ Index ];

                return SumProd / data.Count;

            case AverageType.Median:

                if( data.Count % 2 == 0 )
                    return ( (double)data[ data.Count / 2 ] +
                        (double)data[ data.Count / 2 - 1 ] ) / 2.0;
                else
                    return (double)data[ data.Count / 2 ];

            default:
                return 0.0;
        }
    }

    // Get the AverageInfo object from the caller's format provider,
    // or use the local default.
    protected AverageInfo GetAverageInfo( IFormatProvider provider )
    {
        AverageInfo avgInfo = null;

        if( provider != null )
            avgInfo = (AverageInfo)provider.GetFormat(
                typeof( AverageInfo ) );

        if ( avgInfo == null )
            return defaultProvider;
        else
            return avgInfo;
    }

    // Calculate the average and limit the range.
    protected double CalcNLimitAverage( double min, double max,
        IFormatProvider provider )
    {
        // Get the format provider and calculate the average.
        AverageInfo avgInfo = GetAverageInfo( provider );
        double avg = Average( avgInfo.TypeOfAverage );

        // Limit the range, based on the minimum and maximum values
        // for the type.
        return avg > max ? max : avg < min ? min : avg;

    }

    // The following elements are required by IConvertible.

    // None of these conversion functions throw exceptions. When
    // the data is out of range for the type, the appropriate
    // MinValue or MaxValue is used.
    public TypeCode GetTypeCode( )
    {
        return TypeCode.Object;
    }

    public bool ToBoolean( IFormatProvider provider )
    {
        // ToBoolean is false if the dataset is empty.
        if( data.Count <= 0 )
            return false;

        // For median averaging, ToBoolean is true if any
        // non-discarded elements are nonzero.
        else if( AverageType.Median ==
            GetAverageInfo( provider ).TypeOfAverage )
        {
            if (data.Count % 2 == 0 )
                return ( (double)data[ data.Count / 2 ] != 0.0 ||
                    (double)data[ data.Count / 2 - 1 ] != 0.0 );
            else
                return (double)data[ data.Count / 2 ] != 0.0;
        }

        // For arithmetic or geometric mean averaging, ToBoolean is
        // true if any element of the dataset is nonzero.
        else
        {
            for( int Index = 0; Index < data.Count; Index++ )
                if( (double)data[ Index ] != 0.0 )
                    return true;
            return false;
        }
    }

    public byte ToByte( IFormatProvider provider )
    {
        return Convert.ToByte( CalcNLimitAverage(
            Byte.MinValue, Byte.MaxValue, provider ) );
    }

    public char ToChar( IFormatProvider provider )
    {
        return Convert.ToChar( Convert.ToUInt16( CalcNLimitAverage(
            Char.MinValue, Char.MaxValue, provider ) ) );
    }

    // Convert to DateTime by adding the calculated average as
    // seconds to the current date and time. A valid DateTime is
    // always returned.
    public DateTime ToDateTime( IFormatProvider provider )
    {
        double seconds =
            Average( GetAverageInfo( provider ).TypeOfAverage );
        try
        {
            return DateTime.Now.AddSeconds( seconds );
        }
        catch( ArgumentOutOfRangeException )
        {
            return seconds < 0.0 ? DateTime.MinValue : DateTime.MaxValue;
        }
    }

    public decimal ToDecimal( IFormatProvider provider )
    {
        // The Double conversion rounds Decimal.MinValue and
        // Decimal.MaxValue to invalid Decimal values, so the
        // following limits must be used.
        return Convert.ToDecimal( CalcNLimitAverage(
            -79228162514264330000000000000.0,
            79228162514264330000000000000.0, provider ) );
    }

    public double ToDouble( IFormatProvider provider )
    {
        return Average( GetAverageInfo(provider).TypeOfAverage );
    }

    public short ToInt16( IFormatProvider provider )
    {
        return Convert.ToInt16( CalcNLimitAverage(
            Int16.MinValue, Int16.MaxValue, provider ) );
    }

    public int ToInt32( IFormatProvider provider )
    {
        return Convert.ToInt32( CalcNLimitAverage(
            Int32.MinValue, Int32.MaxValue, provider ) );
    }

    public long ToInt64( IFormatProvider provider )
    {
        // The Double conversion rounds Int64.MinValue and
        // Int64.MaxValue to invalid Int64 values, so the following
        // limits must be used.
        return Convert.ToInt64( CalcNLimitAverage(
            -9223372036854775000, 9223372036854775000, provider ) );
    }

    public SByte ToSByte( IFormatProvider provider )
    {
        return Convert.ToSByte( CalcNLimitAverage(
            SByte.MinValue, SByte.MaxValue, provider ) );
    }

    public float ToSingle( IFormatProvider provider )
    {
        return Convert.ToSingle( CalcNLimitAverage(
            Single.MinValue, Single.MaxValue, provider ) );
    }

    public UInt16 ToUInt16( IFormatProvider provider )
    {
        return Convert.ToUInt16( CalcNLimitAverage(
            UInt16.MinValue, UInt16.MaxValue, provider ) );
    }

    public UInt32 ToUInt32( IFormatProvider provider )
    {
        return Convert.ToUInt32( CalcNLimitAverage(
            UInt32.MinValue, UInt32.MaxValue, provider ) );
    }

    public UInt64 ToUInt64( IFormatProvider provider )
    {
        // The Double conversion rounds UInt64.MaxValue to an invalid
        // UInt64 value, so the following limit must be used.
        return Convert.ToUInt64( CalcNLimitAverage(
            0, 18446744073709550000.0, provider ) );
    }

    public object ToType( Type conversionType,
        IFormatProvider provider )
    {
        return Convert.ChangeType( Average(
            GetAverageInfo( provider ).TypeOfAverage ),
            conversionType );
    }

    public string ToString( IFormatProvider provider )
    {
        AverageType avgType = GetAverageInfo( provider ).TypeOfAverage;
        return String.Format( "( {0}: {1:G10} )", avgType,
            Average( avgType ) );
    }
}

class IConvertibleProviderDemo
{
    // Display a DataSet with three different format providers.
    public static void DisplayDataSet( DataSet ds )
    {
        string      fmt    = "{0,-12}{1,20}{2,20}{3,20}";
        AverageInfo median = new AverageInfo( AverageType.Median );
        AverageInfo geMean =
            new AverageInfo( AverageType.GeometricMean );

         // Display the dataset elements.
        if( ds.Count > 0 )
        {
            Console.Write( "\nDataSet: [{0}", ds[ 0 ] );
            for( int iX = 1; iX < ds.Count; iX++ )
                Console.Write( ", {0}", ds[ iX ] );
            Console.WriteLine( "]\n" );
        }

        Console.WriteLine( fmt, "Convert.", "Default",
            "Geometric Mean", "Median");
        Console.WriteLine( fmt, "--------", "-------",
            "--------------", "------");
        Console.WriteLine( fmt, "ToBoolean",
            Convert.ToBoolean( ds, null ),
            Convert.ToBoolean( ds, geMean ),
            Convert.ToBoolean( ds, median ) );
        Console.WriteLine( fmt, "ToByte",
            Convert.ToByte( ds, null ),
            Convert.ToByte( ds, geMean ),
            Convert.ToByte( ds, median ) );
        Console.WriteLine( fmt, "ToChar",
            Convert.ToChar( ds, null ),
            Convert.ToChar( ds, geMean ),
            Convert.ToChar( ds, median ) );
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" +
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}",
            "ToDateTime", Convert.ToDateTime( ds, null ),
            Convert.ToDateTime( ds, geMean ),
            Convert.ToDateTime( ds, median ) );
        Console.WriteLine( fmt, "ToDecimal",
            Convert.ToDecimal( ds, null ),
            Convert.ToDecimal( ds, geMean ),
            Convert.ToDecimal( ds, median ) );
        Console.WriteLine( fmt, "ToDouble",
            Convert.ToDouble( ds, null ),
            Convert.ToDouble( ds, geMean ),
            Convert.ToDouble( ds, median ) );
        Console.WriteLine( fmt, "ToInt16",
            Convert.ToInt16( ds, null ),
            Convert.ToInt16( ds, geMean ),
            Convert.ToInt16( ds, median ) );
        Console.WriteLine( fmt, "ToInt32",
            Convert.ToInt32( ds, null ),
            Convert.ToInt32( ds, geMean ),
            Convert.ToInt32( ds, median ) );
        Console.WriteLine( fmt, "ToInt64",
            Convert.ToInt64( ds, null ),
            Convert.ToInt64( ds, geMean ),
            Convert.ToInt64( ds, median ) );
        Console.WriteLine( fmt, "ToSByte",
            Convert.ToSByte( ds, null ),
            Convert.ToSByte( ds, geMean ),
            Convert.ToSByte( ds, median ) );
        Console.WriteLine( fmt, "ToSingle",
            Convert.ToSingle( ds, null ),
            Convert.ToSingle( ds, geMean ),
            Convert.ToSingle( ds, median ) );
        Console.WriteLine( fmt, "ToUInt16",
            Convert.ToUInt16( ds, null ),
            Convert.ToUInt16( ds, geMean ),
            Convert.ToUInt16( ds, median ) );
        Console.WriteLine( fmt, "ToUInt32",
            Convert.ToUInt32( ds, null ),
            Convert.ToUInt32( ds, geMean ),
            Convert.ToUInt32( ds, median ) );
        Console.WriteLine( fmt, "ToUInt64",
            Convert.ToUInt64( ds, null ),
            Convert.ToUInt64( ds, geMean ),
            Convert.ToUInt64( ds, median ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of " +
            "the Convert.To<Type>( object, IFormatProvider ) methods " +
            "\ngenerates the following output. The example " +
            "displays the values \nreturned by the methods, " +
            "using several IFormatProvider objects.\n" );

        DataSet ds1 = new DataSet(
            10.5, 22.2, 45.9, 88.7, 156.05, 297.6 );
        DisplayDataSet( ds1 );

        DataSet ds2 = new DataSet(
            359999.95, 425000, 499999.5, 775000, 1695000 );
        DisplayDataSet( ds2 );
    }
}

/*
This example of the Convert.To<Type>( object, IFormatProvider ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:04:12 2003-05-13 15:03:28 2003-05-13 15:03:35
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 07:39:08 2003-05-20 22:28:45 2003-05-19 09:55:48
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

using namespace System;
using namespace System::Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
enum class AverageType : short
{
   None = 0,
   GeometricMean = 1,
   ArithmeticMean = 2,
   Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
ref class AverageInfo: public IFormatProvider
{
protected:
   AverageType AvgType;

public:

   // Specify the type of averaging in the constructor.
   AverageInfo( AverageType avgType )
   {
      this->AvgType = avgType;
   }

   // This method returns a reference to the containing object
   // if an object of AverageInfo type is requested.
   virtual Object^ GetFormat( Type^ argType )
   {
      if ( argType == AverageInfo::typeid)
            return this;
      else
            return (Object^)0;
   }

   property AverageType TypeOfAverage
   {

      // Use this property to set or get the type of averaging.
      AverageType get()
      {
         return this->AvgType;
      }

      void set( AverageType value )
      {
         this->AvgType = value;
      }

   }

};

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
ref class DataSet: public IConvertible
{
private:
   static Object^ null = nullptr;

protected:
   ArrayList^ data;
   AverageInfo^ defaultProvider;

   // This method unboxes a boxed double.
   double UnBoxDouble( Object^ obj )
   {
      return  *static_cast<double^>(obj);
   }

public:

   // Construct the object and add an initial list of values.
   // Create a default format provider.
   DataSet( ... array<Double>^values )
   {
      data = gcnew ArrayList( (Array^)values );
      defaultProvider = gcnew AverageInfo( AverageType::ArithmeticMean );
   }

   // Add additional values with this method.
   int Add( double value )
   {
      data->Add( value );
      return data->Count;
   }

   property double Item[ int ]
   {

      // Get, set, and add values with this indexer property.
      double get( int index )
      {
         if ( index >= 0 && index < data->Count )
                  return UnBoxDouble( data[ index ] );
         else
                  throw gcnew InvalidOperationException( "[DataSet.get] Index out of range." );
      }

      void set( int index, double value )
      {
         if ( index >= 0 && index < data->Count )
                  data[ index ] = value;
         else
         if ( index == data->Count )
                  data->Add( value );
         else
                  throw gcnew InvalidOperationException( "[DataSet.set] Index out of range." );
      }

   }

   property int Count
   {

      // This property returns the number of elements in the object.
      int get()
      {
         return data->Count;
      }

   }

protected:

   // This method calculates the average of the object's elements.
   double Average( AverageType avgType )
   {
      double SumProd;
      if ( data->Count == 0 )
            return 0.0;

      switch ( avgType )
      {
         case AverageType::GeometricMean:
            SumProd = 1.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd *= UnBoxDouble( data[ Index ] );

            // This calculation will not fail with negative
            // elements.
            return Math::Sign( SumProd ) * Math::Pow( Math::Abs( SumProd ), 1.0 / data->Count );

         case AverageType::ArithmeticMean:
            SumProd = 0.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd += UnBoxDouble( data[ Index ] );
            return SumProd / data->Count;

         case AverageType::Median:
            if ( data->Count % 2 == 0 )
                        return (UnBoxDouble( data[ data->Count / 2 ] ) + UnBoxDouble( data[ data->Count / 2 - 1 ] )) / 2.0;
            else
                        return UnBoxDouble( data[ data->Count / 2 ] );

         default:
            return 0.0;
      }
   }

   // Get the AverageInfo object from the caller's format provider,
   // or use the local default.
   AverageInfo^ GetAverageInfo( IFormatProvider^ provider )
   {
      AverageInfo^ avgInfo = nullptr;
      if ( provider != nullptr )
            avgInfo = static_cast<AverageInfo^>(provider->GetFormat( AverageInfo::typeid ));

      if ( avgInfo == nullptr )
            return defaultProvider;
      else
            return avgInfo;
   }

   // Calculate the average and limit the range.
   double CalcNLimitAverage( double min, double max, IFormatProvider^ provider )
   {

      // Get the format provider and calculate the average.
      AverageInfo^ avgInfo = GetAverageInfo( provider );
      double avg = Average( avgInfo->TypeOfAverage );

      // Limit the range, based on the minimum and maximum values
      // for the type.
      return avg > max ? max : avg < min ? min : avg;
   }

public:

   // The following elements are required by IConvertible.
   // None of these conversion functions throw exceptions. When
   // the data is out of range for the type, the appropriate
   // MinValue or MaxValue is used.
   virtual TypeCode GetTypeCode()
   {
      return TypeCode::Object;
   }

   virtual bool ToBoolean( IFormatProvider^ provider )
   {

      // ToBoolean is false if the dataset is empty.
      if ( data->Count <= 0 )
            return false;
      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      else

      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      if ( AverageType::Median == GetAverageInfo( provider )->TypeOfAverage )
      {
         if ( data->Count % 2 == 0 )
                  return (UnBoxDouble( data[ data->Count / 2 ] ) != 0.0 || UnBoxDouble( data[ data->Count / 2 - 1 ] ) != 0.0);
         else
                  return UnBoxDouble( data[ data->Count / 2 ] ) != 0.0;
      }
      // For arithmetic or geometric mean averaging, ToBoolean is
      // true if any element of the dataset is nonzero.
      else
      {
         for ( int Index = 0; Index < data->Count; Index++ )
            if ( UnBoxDouble( data[ Index ] ) != 0.0 )
                        return true;
         return false;
      }
   }

   virtual Byte ToByte( IFormatProvider^ provider )
   {
      return Convert::ToByte( CalcNLimitAverage( Byte::MinValue, Byte::MaxValue, provider ) );
   }

   virtual Char ToChar( IFormatProvider^ provider )
   {
      return Convert::ToChar( Convert::ToUInt16( CalcNLimitAverage( Char::MinValue, Char::MaxValue, provider ) ) );
   }

   // Convert to DateTime by adding the calculated average as
   // seconds to the current date and time. A valid DateTime is
   // always returned.
   virtual DateTime ToDateTime( IFormatProvider^ provider )
   {
      double seconds = Average( GetAverageInfo( provider )->TypeOfAverage );
      try
      {
         return DateTime::Now.AddSeconds( seconds );
      }
      catch ( ArgumentOutOfRangeException^ )
      {
         return seconds < 0.0 ? DateTime::MinValue : DateTime::MaxValue;
      }

   }

   virtual Decimal ToDecimal( IFormatProvider^ provider )
   {

      // The Double conversion rounds Decimal.MinValue and
      // Decimal.MaxValue to invalid Decimal values, so the
      // following limits must be used.
      return Convert::ToDecimal( CalcNLimitAverage(  -79228162514264330000000000000.0, 79228162514264330000000000000.0, provider ) );
   }

   virtual double ToDouble( IFormatProvider^ provider )
   {
      return Average( GetAverageInfo( provider )->TypeOfAverage );
   }

   virtual short ToInt16( IFormatProvider^ provider )
   {
      return Convert::ToInt16( CalcNLimitAverage( Int16::MinValue, Int16::MaxValue, provider ) );
   }

   virtual int ToInt32( IFormatProvider^ provider )
   {
      return Convert::ToInt32( CalcNLimitAverage( Int32::MinValue, Int32::MaxValue, provider ) );
   }

   virtual __int64 ToInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds Int64.MinValue and
      // Int64.MaxValue to invalid Int64 values, so the following
      // limits must be used.
      return Convert::ToInt64( CalcNLimitAverage(  -9223372036854775000, 9223372036854775000, provider ) );
   }

   virtual signed char ToSByte( IFormatProvider^ provider )
   {
      return Convert::ToSByte( CalcNLimitAverage( SByte::MinValue, SByte::MaxValue, provider ) );
   }

   virtual float ToSingle( IFormatProvider^ provider )
   {
      return Convert::ToSingle( CalcNLimitAverage( Single::MinValue, Single::MaxValue, provider ) );
   }

   virtual UInt16 ToUInt16( IFormatProvider^ provider )
   {
      return Convert::ToUInt16( CalcNLimitAverage( UInt16::MinValue, UInt16::MaxValue, provider ) );
   }

   virtual UInt32 ToUInt32( IFormatProvider^ provider )
   {
      return Convert::ToUInt32( CalcNLimitAverage( UInt32::MinValue, UInt32::MaxValue, provider ) );
   }

   virtual UInt64 ToUInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds UInt64.MaxValue to an invalid
      // UInt64 value, so the following limit must be used.
      return Convert::ToUInt64( CalcNLimitAverage( 0, 18446744073709550000.0, provider ) );
   }

   virtual Object^ ToType( Type^ conversionType, IFormatProvider^ provider )
   {
      return Convert::ChangeType( Average( GetAverageInfo( provider )->TypeOfAverage ), conversionType );
   }

   virtual String^ ToString( IFormatProvider^ provider )
   {
      AverageType avgType = GetAverageInfo( provider )->TypeOfAverage;
      return String::Format( "( {0}: {1:G10} )", avgType, Average( avgType ) );
   }

};

// Display a DataSet with three different format providers.
void DisplayDataSet( DataSet^ ds )
{
   IFormatProvider^ null = nullptr;
   String^ fmt = "{0,-12}{1,20}{2,20}{3,20}";
   AverageInfo^ median = gcnew AverageInfo( AverageType::Median );
   AverageInfo^ geMean = gcnew AverageInfo( AverageType::GeometricMean );

   // Display the dataset elements.
   if ( ds->Count > 0 )
   {
      Console::Write( "\nDataSet: [{0}", ds->Item[ 0 ] );
      for ( int iX = 1; iX < ds->Count; iX++ )
         Console::Write( ", {0}", ds->Item[ iX ] );
      Console::WriteLine( "]\n" );
   }

   Console::WriteLine( fmt, "Convert::", "Default", "Geometric Mean", "Median" );
   Console::WriteLine( fmt, "---------", "-------", "--------------", "------" );
   Console::WriteLine( fmt, "ToBoolean", Convert::ToBoolean( ds, null ), Convert::ToBoolean( ds, geMean ), Convert::ToBoolean( ds, median ) );
   Console::WriteLine( fmt, "ToByte", Convert::ToByte( ds, null ), Convert::ToByte( ds, geMean ), Convert::ToByte( ds, median ) );
   Console::WriteLine( fmt, "ToChar", Convert::ToChar( ds, null ), Convert::ToChar( ds, geMean ), Convert::ToChar( ds, median ) );
   Console::WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}"
   "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", "ToDateTime", Convert::ToDateTime( ds, null ), Convert::ToDateTime( ds, geMean ), Convert::ToDateTime( ds, median ) );
   Console::WriteLine( fmt, "ToDecimal", Convert::ToDecimal( ds, null ), Convert::ToDecimal( ds, geMean ), Convert::ToDecimal( ds, median ) );
   Console::WriteLine( fmt, "ToDouble", Convert::ToDouble( ds, null ), Convert::ToDouble( ds, geMean ), Convert::ToDouble( ds, median ) );
   Console::WriteLine( fmt, "ToInt16", Convert::ToInt16( ds, null ), Convert::ToInt16( ds, geMean ), Convert::ToInt16( ds, median ) );
   Console::WriteLine( fmt, "ToInt32", Convert::ToInt32( ds, null ), Convert::ToInt32( ds, geMean ), Convert::ToInt32( ds, median ) );
   Console::WriteLine( fmt, "ToInt64", Convert::ToInt64( ds, null ), Convert::ToInt64( ds, geMean ), Convert::ToInt64( ds, median ) );
   Console::WriteLine( fmt, "ToSByte", Convert::ToSByte( ds, null ), Convert::ToSByte( ds, geMean ), Convert::ToSByte( ds, median ) );
   Console::WriteLine( fmt, "ToSingle", Convert::ToSingle( ds, null ), Convert::ToSingle( ds, geMean ), Convert::ToSingle( ds, median ) );
   Console::WriteLine( fmt, "ToUInt16", Convert::ToUInt16( ds, null ), Convert::ToUInt16( ds, geMean ), Convert::ToUInt16( ds, median ) );
   Console::WriteLine( fmt, "ToUInt32", Convert::ToUInt32( ds, null ), Convert::ToUInt32( ds, geMean ), Convert::ToUInt32( ds, median ) );
   Console::WriteLine( fmt, "ToUInt64", Convert::ToUInt64( ds, null ), Convert::ToUInt64( ds, geMean ), Convert::ToUInt64( ds, median ) );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Convert::To<Type>( Object*, IFormatProvider* ) methods "
   "\ngenerates the following output. The example "
   "displays the values \nreturned by the methods, "
   "using several IFormatProvider objects.\n" );

   // To call a [ParamArray] method in C++, you cannot just
   // list the parameters, you need to build an array.
   array<Double>^dataElem = gcnew array<Double>(6);
   dataElem[ 0 ] = 10.5;
   dataElem[ 1 ] = 22.2;
   dataElem[ 2 ] = 45.9;
   dataElem[ 3 ] = 88.7;
   dataElem[ 4 ] = 156.05;
   dataElem[ 5 ] = 297.6;
   DataSet^ ds1 = gcnew DataSet( dataElem );
   DisplayDataSet( ds1 );
   dataElem = gcnew array<Double>(5);
   dataElem[ 0 ] = 359999.95;
   dataElem[ 1 ] = 425000;
   dataElem[ 2 ] = 499999.5;
   dataElem[ 3 ] = 775000;
   dataElem[ 4 ] = 1695000;
   DataSet^ ds2 = gcnew DataSet( dataElem );
   DisplayDataSet( ds2 );
}

/*
This example of the Convert::To<Type>( Object*, IFormatProvider* ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:30:23 2003-05-13 15:29:39 2003-05-13 15:29:47
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 08:05:19 2003-05-20 22:54:57 2003-05-19 10:21:59
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToInt32 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As String, _
    provider As IFormatProvider _
) As Integer
public static int ToInt32(
    string value,
    IFormatProvider provider
)
public:
static int ToInt32(
    String^ value,
    IFormatProvider^ provider
)
static member ToInt32 :
        value:string *
        provider:IFormatProvider -> int

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Int32
与 value 中数字等效的 32 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 Int32..::.MinValue 或大于 Int32..::.MaxValue 的数字。

返回值是对 value 调用 Int32..::.Parse 方法的结果。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 Int32..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Int32..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它对固定区域性使用此提供程序和 NumberFormatInfo 提供程序，尝试将数值字符串数组的每个元素都转换为整数。 下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它对固定区域性使用此提供程序和 NumberFormatInfo 提供程序，尝试将数值字符串数组的每个元素都转换为整数。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Create a custom NumberFormatInfo object and set its two properties
      ' used by default in parsing numeric strings.
      Dim customProvider As New NumberFormatInfo()
      customProvider.NegativeSign = "neg "
      customProvider.PositiveSign = "pos "

      ' Add custom and invariant provider to an array of providers.
      Dim providers() As NumberFormatInfo = { customProvider, NumberFormatInfo.InvariantInfo }

      ' Define an array of strings to convert.
      Dim numericStrings() As String = { "123456789", "+123456789", "pos 123456789", _
                                         "-123456789", "neg 123456789", "123456789.", _
                                         "123,456,789", "(123456789)", "2147483648", _
                                         "-2147483649" }

      ' Use each provider to parse all the numeric strings.
      For ctr As Integer = 0 To 1
         Dim provider As IFormatPRovider = providers(ctr)
         Console.WriteLine(IIf(ctr = 0, "Custom Provider:", "Invariant Provider:"))
         For Each numericString As String In numericStrings
            Console.Write("{0,15}  --> ", numericString)
            Try
               Console.WriteLine("{0,20}", Convert.ToInt32(numericString, provider))
            Catch e As FormatException
               Console.WriteLine("{0,20}", "FormatException")
            Catch e As OverflowException
               Console.WriteLine("{0,20}", "OverflowException")
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       Custom Provider:
'             123456789  -->            123456789
'            +123456789  -->      FormatException
'         pos 123456789  -->            123456789
'            -123456789  -->      FormatException
'         neg 123456789  -->           -123456789
'            123456789.  -->      FormatException
'           123,456,789  -->      FormatException
'           (123456789)  -->      FormatException
'            2147483648  -->    OverflowException
'           -2147483649  -->      FormatException
'
'       Invariant Provider:
'             123456789  -->            123456789
'            +123456789  -->            123456789
'         pos 123456789  -->      FormatException
'            -123456789  -->           -123456789
'         neg 123456789  -->      FormatException
'            123456789.  -->      FormatException
'           123,456,789  -->      FormatException
'           (123456789)  -->      FormatException
'            2147483648  -->    OverflowException
'           -2147483649  -->    OverflowException

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Create a custom NumberFormatInfo object and set its two properties
      // used by default in parsing numeric strings.
      NumberFormatInfo customProvider = new NumberFormatInfo();
      customProvider.NegativeSign = "neg ";
      customProvider.PositiveSign = "pos ";

      // Add custom and invariant provider to an array of providers.
      NumberFormatInfo[] providers = { customProvider, NumberFormatInfo.InvariantInfo };

      // Define an array of strings to convert.
      string[] numericStrings = { "123456789", "+123456789", "pos 123456789",
                                  "-123456789", "neg 123456789", "123456789.",
                                  "123,456,789", "(123456789)", "2147483648",
                                  "-2147483649" };

      // Use each provider to parse all the numeric strings.
      for (int ctr = 0; ctr <= 1; ctr++)
      {
         IFormatProvider provider = providers[ctr];
         Console.WriteLine(ctr == 0 ? "Custom Provider:" : "Invariant Provider:");
         foreach (string numericString in numericStrings)
         {
            Console.Write("{0,15}  --> ", numericString);
            try {
               Console.WriteLine("{0,20}", Convert.ToInt32(numericString, provider));
            }
            catch (FormatException) {
               Console.WriteLine("{0,20}", "FormatException");
            }
            catch (OverflowException) {
               Console.WriteLine("{0,20}", "OverflowException");
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       Custom Provider:
//             123456789  -->            123456789
//            +123456789  -->      FormatException
//         pos 123456789  -->            123456789
//            -123456789  -->      FormatException
//         neg 123456789  -->           -123456789
//            123456789.  -->      FormatException
//           123,456,789  -->      FormatException
//           (123456789)  -->      FormatException
//            2147483648  -->    OverflowException
//           -2147483649  -->      FormatException
//
//       Invariant Provider:
//             123456789  -->            123456789
//            +123456789  -->            123456789
//         pos 123456789  -->      FormatException
//            -123456789  -->           -123456789
//         neg 123456789  -->      FormatException
//            123456789.  -->      FormatException
//           123,456,789  -->      FormatException
//           (123456789)  -->      FormatException
//            2147483648  -->    OverflowException
//           -2147483649  -->    OverflowException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt32 方法 (String, Int32)

Convert
.
.
::
.
ToInt32 方法 (String, Int32)
Convert 类

将指定基的数字的字符串表示形式转换为等效的 32 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    value As String, _
    fromBase As Integer _
) As Integer
public static int ToInt32(
    string value,
    int fromBase
)
public:
static int ToInt32(
    String^ value,
    int fromBase
)
static member ToInt32 :
        value:string *
        fromBase:int -> int

参数

value
类型： System String
包含要转换的数字的字符串。
fromBase
类型： System Int32
value 中数字的基数，它必须是 2、8、10 或 16。

返回值

类型： System Int32
与 value 中数字等效的 32 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
ArgumentException | fromBase 不是 2、8、10 或 16。 - 或 - value，它表示一个非 10 为基的有符号数，前面带一个负号。
FormatException | value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。 value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。
OverflowException | value，它表示一个非 10 为基的有符号数，前面带一个负号。 - 或 - value 表示小于 Int32..::.MinValue 或大于 Int32..::.MaxValue 的数字。

如果 fromBase 为 16，则可以在 value 参数指定的数字前面加上“0x”或“0X”。

由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt32(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 31）解释为其符号位。因此，可以编写代码以将超出 Int32 数据类型的范围的不是以 10 为基数的数字转换为 Int32 值，从而不让该方法引发异常。下面的示例将 Int32..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to -2147483648”（0x80000000 转换为 -2147483648），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt32(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 31）解释为其符号位。因此，可以编写代码以将超出 Int32 数据类型的范围的不是以 10 为基数的数字转换为 Int32 值，从而不让该方法引发异常。下面的示例将 Int32..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to -2147483648”（0x80000000 转换为 -2147483648），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt32(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 31）解释为其符号位。因此，可以编写代码以将超出 Int32 数据类型的范围的不是以 10 为基数的数字转换为 Int32 值，从而不让该方法引发异常。下面的示例将 Int32..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to -2147483648”（0x80000000 转换为 -2147483648），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt32(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 31）解释为其符号位。因此，可以编写代码以将超出 Int32 数据类型的范围的不是以 10 为基数的数字转换为 Int32 值，从而不让该方法引发异常。下面的示例将 Int32..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to -2147483648”（0x80000000 转换为 -2147483648），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt32(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将整数的最高序二进制位（位 31）解释为其符号位。因此，可以编写代码以将超出 Int32 数据类型的范围的不是以 10 为基数的数字转换为 Int32 值，从而不让该方法引发异常。下面的示例将 Int32..::.MaxValue 递增 1，并将得到的数字转换为对应的十六进制字符串表示形式，然后调用 ToInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to -2147483648”（0x80000000 转换为 -2147483648），而不是引发异常。

' Create a hexadecimal value out of range of the Integer type.
Dim value As String = Convert.ToString(CLng(Integer.MaxValue) + 1, 16)
' Convert it back to a number.
Try
   Dim number As Integer = Convert.ToInt32(value, 16)
   Console.WriteLine("0x{0} converts to {1}.", value, number)
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to an integer.", value)
End Try

// Create a hexadecimal value out of range of the Integer type.
string value = Convert.ToString((long) int.MaxValue + 1, 16);
// Convert it back to a number.
try
{
   int number = Convert.ToInt32(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number.ToString());
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an integer.", value);
}

在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将数值转换为对应的十六进制字符串表示形式之前检索其符号，从而确保该方法正确地处理溢出。这样，如果原始值为正数，而转换回整数的结果是一个负值，则将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将数值转换为对应的十六进制字符串表示形式之前检索其符号，从而确保该方法正确地处理溢出。这样，如果原始值为正数，而转换回整数的结果是一个负值，则将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将数值转换为对应的十六进制字符串表示形式之前检索其符号，从而确保该方法正确地处理溢出。这样，如果原始值为正数，而转换回整数的结果是一个负值，则将引发异常。

' Create a hexadecimal value out of range of the Integer type.
Dim sourceNumber As Long = CLng(Integer.MaxValue) + 1
Dim isNegative As Boolean = (Math.Sign(sourceNumber) = -1)
Dim value As String = Convert.ToString(sourceNumber, 16)
Dim targetNumber As Integer
Try
   targetNumber = Convert.ToInt32(value, 16)
   If Not isNegative And ((targetNumber And &H80000000) <> 0) Then
      Throw New OverflowException()
   Else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber)
   End If
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to an integer.", value)
End Try
' Displays the following to the console:
'    Unable to convert '0x80000000' to an integer.

// Create a hexadecimal value out of range of the Integer type.
long sourceNumber = (long) int.MaxValue + 1;
bool isNegative = Math.Sign(sourceNumber) == -1;
string value = Convert.ToString(sourceNumber, 16);
int targetNumber;
try
{
   targetNumber = Convert.ToInt32(value, 16);
   if (!(isNegative) & (targetNumber & 0x80000000) != 0)
      throw new OverflowException();
   else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an integer.", value);
}
// Displays the following to the console:
//    Unable to convert '80000000' to an integer.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt32 重载
System 命名空间


Convert ..::.ToInt64 方法

Convert
.
.
::
.
ToInt64 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 64 位带符号整数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToInt64 方法 (Boolean)

Convert
.
.
::
.
ToInt64 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Boolean _
) As Long
public static long ToInt64(
    bool value
)
public:
static long long ToInt64(
    bool value
)
static member ToInt64 :
        value:bool -> int64

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System Int64
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例将 Boolean 值 true 和 false 转换为长整数。

Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True

Console.WriteLine("{0} converts to {1}.", falseFlag, _
                  Convert.ToInt64(falseFlag))
Console.WriteLine("{0} converts to {1}.", trueFlag, _
                  Convert.ToInt64(trueFlag))
' The example displays the following output:
'       False converts to 0.
'       True converts to 1.

bool falseFlag = false;
bool trueFlag = true;

Console.WriteLine("{0} converts to {1}.", falseFlag,
                  Convert.ToInt64(falseFlag));
Console.WriteLine("{0} converts to {1}.", trueFlag,
                  Convert.ToInt64(trueFlag));
// The example displays the following output:
//       False converts to 0.
//       True converts to 1.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (Byte)

Convert
.
.
::
.
ToInt64 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Byte _
) As Long
public static long ToInt64(
    byte value
)
public:
static long long ToInt64(
    unsigned char value
)
static member ToInt64 :
        value:byte -> int64

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数。

下面的示例将字节数组中的每个元素转换为长整数。

Dim bytes() As Byte = { Byte.MinValue, 14, 122, Byte.MaxValue}
Dim result As Long

For Each byteValue As Byte In bytes
   result = Convert.ToInt64(byteValue)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     byteValue.GetType().Name, byteValue, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Byte value 0 to the Int64 value 0.
'    Converted the Byte value 14 to the Int64 value 14.
'    Converted the Byte value 122 to the Int64 value 122.
'    Converted the Byte value 255 to the Int64 value 255.

byte[] bytes = { Byte.MinValue, 14, 122, Byte.MaxValue};
long result;

foreach (byte byteValue in bytes)
{
   result = Convert.ToInt64(byteValue);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     byteValue.GetType().Name, byteValue,
                     result.GetType().Name, result);
}
// The example displays the following output:
//       Converted the Byte value 0 to the Int64 value 0.
//       Converted the Byte value 14 to the Int64 value 14.
//       Converted the Byte value 122 to the Int64 value 122.
//       Converted the Byte value 255 to the Int64 value 255.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (Char)

Convert
.
.
::
.
ToInt64 方法 (Char)
Convert 类

将指定的 Unicode 字符的值转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Char _
) As Long
public static long ToInt64(
    char value
)
public:
static long long ToInt64(
    wchar_t value
)
static member ToInt64 :
        value:char -> int64

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数。

下面的示例将 Char 数组中的每个元素转换为长整数。

Dim chars() As Char = { "a"c, "z"c, ChrW(7), ChrW(1023), _
                        ChrW(Short.MaxValue), ChrW(&hFFFE) }
Dim result As Long

For Each ch As Char in chars
   result = Convert.ToInt64(ch)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     ch.GetType().Name, ch, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'       Converted the Char value 'a' to the Int64 value 97.
'       Converted the Char value 'z' to the Int64 value 122.
'       Converted the Char value '' to the Int64 value 7.
'       Converted the Char value '?' to the Int64 value 1023.
'       Converted the Char value '?' to the Int64 value 32767.
'       Converted the Char value '?' to the Int64 value 65534.

char[] chars = { 'a', 'z', '\u0007', '\u03FF',
                 '\u7FFF', '\uFFFE' };
long result;

foreach (char ch in chars)
{
   result = Convert.ToInt64(ch);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     ch.GetType().Name, ch,
                     result.GetType().Name, result);
}
// The example displays the following output:
//       Converted the Char value 'a' to the Int64 value 97.
//       Converted the Char value 'z' to the Int64 value 122.
//       Converted the Char value '' to the Int64 value 7.
//       Converted the Char value '?' to the Int64 value 1023.
//       Converted the Char value '?' to the Int64 value 32767.
//       Converted the Char value '?' to the Int64 value 65534.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (DateTime)

Convert
.
.
::
.
ToInt64 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As DateTime _
) As Long
public static long ToInt64(
    DateTime value
)
public:
static long long ToInt64(
    DateTime value
)
static member ToInt64 :
        value:DateTime -> int64

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System Int64
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (Decimal)

Convert
.
.
::
.
ToInt64 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Decimal _
) As Long
public static long ToInt64(
    decimal value
)
public:
static long long ToInt64(
    Decimal value
)
static member ToInt64 :
        value:decimal -> int64

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System Int64
value，舍入为最接近的 64 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 64 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Int64..::.MaxValue 或小于 Int64..::.MinValue。

下面的示例尝试将 Decimal 值的数组中的每个元素转换为长型整数。

Dim values() As Decimal = { Decimal.MinValue, -1034.23d, -12d, 0d, 147d, _
                            199.55d, 9214.16d, Decimal.MaxValue }
Dim result As Long

For Each value As Decimal In values
   Try
      result = Convert.ToInt64(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int64 type.", _
                        value)
   End Try
Next
' The example displays the following output:
'    -79228162514264337593543950335 is outside the range of the Int64 type.
'    Converted the Decimal value '-1034.23' to the Int64 value -1034.
'    Converted the Decimal value '-12' to the Int64 value -12.
'    Converted the Decimal value '0' to the Int64 value 0.
'    Converted the Decimal value '147' to the Int64 value 147.
'    Converted the Decimal value '199.55' to the Int64 value 200.
'    Converted the Decimal value '9214.16' to the Int64 value 9214.
'    79228162514264337593543950335 is outside the range of the Int64 type.

decimal[] values= { Decimal.MinValue, -1034.23m, -12m, 0m, 147m,
                    199.55m, 9214.16m, Decimal.MaxValue };
long result;

foreach (decimal value in values)
{
   try {
      result = Convert.ToInt64(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int64 type.",
                        value);
   }
}
// The example displays the following output:
//    -79228162514264337593543950335 is outside the range of the Int64 type.
//    Converted the Decimal value '-1034.23' to the Int64 value -1034.
//    Converted the Decimal value '-12' to the Int64 value -12.
//    Converted the Decimal value '0' to the Int64 value 0.
//    Converted the Decimal value '147' to the Int64 value 147.
//    Converted the Decimal value '199.55' to the Int64 value 200.
//    Converted the Decimal value '9214.16' to the Int64 value 9214.
//    79228162514264337593543950335 is outside the range of the Int64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间
Math Round


Convert ..::.ToInt64 方法 (Double)

Convert
.
.
::
.
ToInt64 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Double _
) As Long
public static long ToInt64(
    double value
)
public:
static long long ToInt64(
    double value
)
static member ToInt64 :
        value:float -> int64

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System Int64
value，舍入为最接近的 64 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 64 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Int64..::.MaxValue 或小于 Int64..::.MinValue。

下面的示例尝试将 Double 值的数组中的每个元素转换为长型整数。

Dim values() As Double = { Double.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Double.MaxValue }
Dim result As Long

For Each value As Double In values
   Try
      result = Convert.ToInt64(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int64 type.", value)
   End Try
Next
'    -1.79769313486232E+308 is outside the range of the Int64 type.
'    -13800000000 is outside the range of the Int16 type.
'    Converted the Double value '-1023.299' to the Int64 value -1023.
'    Converted the Double value '-12.98' to the Int64 value -13.
'    Converted the Double value '0' to the Int64 value 0.
'    Converted the Double value '9.113E-16' to the Int64 value 0.
'    Converted the Double value '103.919' to the Int64 value 104.
'    Converted the Double value '17834.191' to the Int64 value 17834.
'    1.79769313486232E+308 is outside the range of the Int64 type.

double[] values= { Double.MinValue, -1.38e10, -1023.299, -12.98,
                   0, 9.113e-16, 103.919, 17834.191, Double.MaxValue };
long result;

foreach (double value in values)
{
   try {
      result = Convert.ToInt64(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int64 type.", value);
   }
}
//    -1.79769313486232E+308 is outside the range of the Int64 type.
//    -13800000000 is outside the range of the Int16 type.
//    Converted the Double value '-1023.299' to the Int64 value -1023.
//    Converted the Double value '-12.98' to the Int64 value -13.
//    Converted the Double value '0' to the Int64 value 0.
//    Converted the Double value '9.113E-16' to the Int64 value 0.
//    Converted the Double value '103.919' to the Int64 value 104.
//    Converted the Double value '17834.191' to the Int64 value 17834.
//    1.79769313486232E+308 is outside the range of the Int64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间
Double
Math Round


Convert ..::.ToInt64 方法 (Int16)

Convert
.
.
::
.
ToInt64 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Short _
) As Long
public static long ToInt64(
    short value
)
public:
static long long ToInt64(
    short value
)
static member ToInt64 :
        value:int16 -> int64

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数。

下面的示例将 16 位整数数组中的每个元素转换为长整数。

Dim numbers() As Short = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue }
Dim result As Long

For Each number As Short In numbers
   result = Convert.ToInt64(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Int16 value -32768 to the Int64 value -32768.
'    Converted the Int16 value -1 to the Int64 value -1.
'    Converted the Int16 value 0 to the Int64 value 0.
'    Converted the Int16 value 121 to the Int64 value 121.
'    Converted the Int16 value 340 to the Int64 value 340.
'    Converted the Int16 value 32767 to the Int64 value 32767.

short[] numbers= { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue };
long result;

foreach (short number in numbers)
{
   result = Convert.ToInt64(number);
   Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Int16 value -32768 to a Int32 value -32768.
//    Converted the Int16 value -1 to a Int32 value -1.
//    Converted the Int16 value 0 to a Int32 value 0.
//    Converted the Int16 value 121 to a Int32 value 121.
//    Converted the Int16 value 340 to a Int32 value 340.
//    Converted the Int16 value 32767 to a Int32 value 32767.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (Int32)

Convert
.
.
::
.
ToInt64 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Integer _
) As Long
public static long ToInt64(
    int value
)
public:
static long long ToInt64(
    int value
)
static member ToInt64 :
        value:int -> int64

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (Int64)

Convert
.
.
::
.
ToInt64 方法 (Int64)
Convert 类

返回指定的 64 位带符号整数；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Long _
) As Long
public static long ToInt64(
    long value
)
public:
static long long ToInt64(
    long long value
)
static member ToInt64 :
        value:int64 -> int64

参数

value
类型： System Int64
64 位带符号整数。

返回值

类型： System Int64
value 不经更改即返回。

下面的示例将整数数组中的每个元素转换为长整数。

Dim numbers() As Integer = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue }
Dim result As Long
For Each number As Integer In numbers
   result = Convert.ToInt64(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Int32 value -2147483648 to the Int64 value -2147483648.
'    Converted the Int32 value -1 to the Int64 value -1.
'    Converted the Int32 value 0 to the Int64 value 0.
'    Converted the Int32 value 121 to the Int64 value 121.
'    Converted the Int32 value 340 to the Int64 value 340.
'    Converted the Int32 value 2147483647 to the Int64 value 2147483647.

int[] numbers = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue };
long result;
foreach (int number in numbers)
{
   result = Convert.ToInt64(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Int32 value -2147483648 to the Int64 value -2147483648.
//    Converted the Int32 value -1 to the Int64 value -1.
//    Converted the Int32 value 0 to the Int64 value 0.
//    Converted the Int32 value 121 to the Int64 value 121.
//    Converted the Int32 value 340 to the Int64 value 340.
//    Converted the Int32 value 2147483647 to the Int64 value 2147483647.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (Object)

Convert
.
.
::
.
ToInt64 方法 (Object)
Convert 类

将指定对象的值转换为 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Object _
) As Long
public static long ToInt64(
    Object value
)
public:
static long long ToInt64(
    Object^ value
)
static member ToInt64 :
        value:Object -> int64

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 Int64..::.MinValue 或大于 Int64..::.MaxValue 的数字。

调用 value 的基础类型的 IConvertible..::.ToInt64 方法的结果。

下面的示例将对象数组中的每个元素转换为长型整数。

Dim values() As Object = { True, -12, 163, 935, "x"c, #5/12/2009#, _
                           "104", "103.0", "-1", _
                           "1.00e2", "One", 1.00e2, 16.3e42}
Dim result As Long

For Each value As Object In values
   Try
      result = Convert.ToInt64(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int64 type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("No conversion to an Int64 exists for the {0} value {1}.", _
                        value.GetType().Name, value)

   End Try
Next
' The example displays the following output:
'    Converted the Boolean value True to the Int64 value 1.
'    Converted the Int64 value -12 to the Int64 value -12.
'    Converted the Int64 value 163 to the Int64 value 163.
'    Converted the Int64 value 935 to the Int64 value 935.
'    Converted the Char value x to the Int64 value 120.
'    No conversion to an Int64 exists for the DateTime value 5/12/2009 12:00:00 AM.
'    Converted the String value 104 to the Int64 value 104.
'    The String value 103.0 is not in a recognizable format.
'    Converted the String value -1 to the Int64 value -1.
'    The String value 1.00e2 is not in a recognizable format.
'    The String value One is not in a recognizable format.
'    Converted the Double value 100 to the Int64 value 100.
'    The Double value 1.63E+43 is outside the range of the Int64 type.

object[] values = { true, -12, 163, 935, 'x', new DateTime(2009, 5, 12),
                    "104", "103.0", "-1",
                    "1.00e2", "One", 1.00e2, 16.3e42};
long result;

foreach (object value in values)
{
   try {
      result = Convert.ToInt64(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int64 type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("No conversion to an Int64 exists for the {0} value {1}.",
                        value.GetType().Name, value);

   }
}
// The example displays the following output:
//    Converted the Boolean value True to the Int64 value 1.
//    Converted the Int32 value -12 to the Int64 value -12.
//    Converted the Int32 value 163 to the Int64 value 163.
//    Converted the Int32 value 935 to the Int64 value 935.
//    Converted the Char value x to the Int64 value 120.
//    No conversion to an Int64 exists for the DateTime value 5/12/2009 12:00:00 AM.
//    Converted the String value 104 to the Int64 value 104.
//    The String value 103.0 is not in a recognizable format.
//    Converted the String value -1 to the Int64 value -1.
//    The String value 1.00e2 is not in a recognizable format.
//    The String value One is not in a recognizable format.
//    Converted the Double value 100 to the Int64 value 100.
//    The Double value 1.63E+43 is outside the range of the Int64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (SByte)

Convert
.
.
::
.
ToInt64 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的 64 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt64 ( _
    value As SByte _
) As Long
[CLSCompliantAttribute(false)]
public static long ToInt64(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static long long ToInt64(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToInt64 :
        value:sbyte -> int64

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数。

下面的示例将带符号字节数组中的每个元素转换为长整数。

Dim numbers() As SByte = { SByte.MinValue, -1, 0, 10, SByte.MaxValue }
Dim result As Long

For Each number As SByte In numbers
   result = Convert.ToInt64(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'       Converted the SByte value -128 to the Int64 value -128.
'       Converted the SByte value -1 to the Int64 value -1.
'       Converted the SByte value 0 to the Int64 value 0.
'       Converted the SByte value 10 to the Int64 value 10.
'       Converted the SByte value 127 to the Int64 value 127.

sbyte[] numbers = { SByte.MinValue, -1, 0, 10, SByte.MaxValue };
long result;

foreach (sbyte number in numbers)
{
   result = Convert.ToInt64(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//       Converted the SByte value -128 to the Int64 value -128.
//       Converted the SByte value -1 to the Int64 value -1.
//       Converted the SByte value 0 to the Int64 value 0.
//       Converted the SByte value 10 to the Int64 value 10.
//       Converted the SByte value 127 to the Int64 value 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (Single)

Convert
.
.
::
.
ToInt64 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Single _
) As Long
public static long ToInt64(
    float value
)
public:
static long long ToInt64(
    float value
)
static member ToInt64 :
        value:float32 -> int64

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System Int64
value，舍入为最接近的 64 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 64 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 Int64..::.MaxValue 或小于 Int64..::.MinValue。

下面的示例尝试将 Single 值的数组中的每个元素转换为长型整数。

Dim values() As Single = { Single.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Single.MaxValue }
Dim result As Long

For Each value As Single In values
   Try
      result = Convert.ToInt64(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int64 type.", value)
   End Try
Next
' The example displays the following output:
'    -3.40282346638529E+38 is outside the range of the Int64 type.
'    -13799999488 is outside the range of the Int64 type.
'    Converted the Double value -1023.29901123047 to the Int64 value -1023.
'    Converted the Double value -12.9799995422363 to the Int64 value -13.
'    Converted the Double value 0 to the Int64 value 0.
'    Converted the Double value 9.11299983940444E-16 to the Int64 value 0.
'    Converted the Double value 103.918998718262 to the Int64 value 104.
'    Converted the Double value 17834.19140625 to the Int64 value 17834.
'    3.40282346638529E+38 is outside the range of the Int64 type.

float[] values= { Single.MinValue, -1.38e10f, -1023.299f, -12.98f,
                  0f, 9.113e-16f, 103.919f, 17834.191f, Single.MaxValue };
long result;

foreach (float value in values)
{
   try {
      result = Convert.ToInt64(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value, result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int64 type.", value);
   }
}
// The example displays the following output:
//    -3.40282346638529E+38 is outside the range of the Int64 type.
//    -13799999488 is outside the range of the Int64 type.
//    Converted the Double value -1023.29901123047 to the Int64 value -1023.
//    Converted the Double value -12.9799995422363 to the Int64 value -13.
//    Converted the Double value 0 to the Int64 value 0.
//    Converted the Double value 9.11299983940444E-16 to the Int64 value 0.
//    Converted the Double value 103.918998718262 to the Int64 value 104.
//    Converted the Double value 17834.19140625 to the Int64 value 17834.
//    3.40282346638529E+38 is outside the range of the Int64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间
Single
Math Round


Convert ..::.ToInt64 方法 (String)

Convert
.
.
::
.
ToInt64 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As String _
) As Long
public static long ToInt64(
    string value
)
public:
static long long ToInt64(
    String^ value
)
static member ToInt64 :
        value:string -> int64

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Int64
与 value 中数字等效的 64 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 Int64..::.MinValue 或大于 Int64..::.MaxValue 的数字。

返回值是对 value 调用 Int64..::.Parse 方法的结果。

如果您希望在转换失败时不处理异常，则可以转而调用 Int64..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Int64..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例尝试将数字字符串数组中的每个元素转换为长型整数。

Dim values() As String = { "One", "1.34e28", "-26.87", "-18", "-6.00", _
                           " 0", "137", "1601.9", Int32.MaxValue.ToString() }
Dim result As Long

For Each value As String In values
   Try
      result = Convert.ToInt64(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the Int64 type.", value)
   Catch e As FormatException
      Console.WriteLine("The {0} value '{1}' is not in a recognizable format.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    The String value 'One' is not in a recognizable format.
'    The String value '1.34e28' is not in a recognizable format.
'    The String value '-26.87' is not in a recognizable format.
'    Converted the String value '-18' to the Int64 value -18.
'    The String value '-6.00' is not in a recognizable format.
'    Converted the String value ' 0' to the Int64 value 0.
'    Converted the String value '137' to the Int64 value 137.
'    The String value '1601.9' is not in a recognizable format.
'    Converted the String value '2147483647' to the Int64 value 2147483647.

string[] values = { "One", "1.34e28", "-26.87", "-18", "-6.00",
                    " 0", "137", "1601.9", Int32.MaxValue.ToString() };
long result;

foreach (string value in values)
{
   try {
      result = Convert.ToInt64(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value, result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int64 type.", value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value '{1}' is not in a recognizable format.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    The String value 'One' is not in a recognizable format.
//    The String value '1.34e28' is not in a recognizable format.
//    The String value '-26.87' is not in a recognizable format.
//    Converted the String value '-18' to the Int64 value -18.
//    The String value '-6.00' is not in a recognizable format.
//    Converted the String value ' 0' to the Int64 value 0.
//    Converted the String value '137' to the Int64 value 137.
//    The String value '1601.9' is not in a recognizable format.
//    Converted the String value '2147483647' to the Int64 value 2147483647.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (UInt16)

Convert
.
.
::
.
ToInt64 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的 64 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt64 ( _
    value As UShort _
) As Long
[CLSCompliantAttribute(false)]
public static long ToInt64(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static long long ToInt64(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToInt64 :
        value:uint16 -> int64

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数。

下面的示例将 16 位无符号整数数组中的每个元素转换为长整数。

Dim numbers() As UShort = { UInt16.MinValue, 121, 340, UInt16.MaxValue }
Dim result As Long
For Each number As UShort In numbers
   Try
      result = Convert.ToInt64(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int64 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt16 value 0 to the Int64 value 0.
'    Converted the UInt16 value 121 to the Int64 value 121.
'    Converted the UInt16 value 340 to the Int64 value 340.
'    Converted the UInt16 value 65535 to the Int64 value 65535.

ushort[] numbers = { UInt16.MinValue, 121, 340, UInt16.MaxValue };
long result;
foreach (ushort number in numbers)
{
   try {
      result = Convert.ToInt64(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int64 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt16 value 0 to the Int64 value 0.
//    Converted the UInt16 value 121 to the Int64 value 121.
//    Converted the UInt16 value 340 to the Int64 value 340.
//    Converted the UInt16 value 65535 to the Int64 value 65535.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (UInt32)

Convert
.
.
::
.
ToInt64 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的 64 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt64 ( _
    value As UInteger _
) As Long
[CLSCompliantAttribute(false)]
public static long ToInt64(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static long long ToInt64(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToInt64 :
        value:uint32 -> int64

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数。

下面的示例将无符号整数数组中的每个元素转换为长整数。

Dim numbers() As UInteger = { UInt32.MinValue, 121, 340, UInt32.MaxValue }
Dim result As Long
For Each number As UInteger In numbers
   Try
      result = Convert.ToInt64(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int64 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt32 value 0 to the Int64 value 0.
'    Converted the UInt32 value 121 to the Int64 value 121.
'    Converted the UInt32 value 340 to the Int64 value 340.
'    The UInt32 value 4294967295 is outside the range of the Int64 type.

uint[] numbers = { UInt32.MinValue, 121, 340, UInt32.MaxValue };
long result;
foreach (uint number in numbers)
{
   try {
      result = Convert.ToInt64(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int64 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt32 value 0 to the Int64 value 0.
//    Converted the UInt32 value 121 to the Int64 value 121.
//    Converted the UInt32 value 340 to the Int64 value 340.
//    The UInt32 value 4294967295 is outside the range of the Int64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (UInt64)

Convert
.
.
::
.
ToInt64 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的 64 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToInt64 ( _
    value As ULong _
) As Long
[CLSCompliantAttribute(false)]
public static long ToInt64(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static long long ToInt64(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToInt64 :
        value:uint64 -> int64

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数。
异常 | 条件
OverflowException | value 大于 Int64..::.MaxValue。

下面的示例尝试将无符号长型整数数组中的每个元素转换为长型整数。

Dim numbers() As ULong = { UInt64.MinValue, 121, 340, UInt64.MaxValue }
Dim result As Long

For Each number As ULong In numbers
   Try
      result = Convert.ToInt64(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Int64 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt64 value 0 to the Int64 value 0.
'    Converted the UInt64 value 121 to the Int64 value 121.
'    Converted the UInt64 value 340 to the Int64 value 340.
'    The UInt64 value 18446744073709551615 is outside the range of the Int64 type.

ulong[] numbers = { UInt64.MinValue, 121, 340, UInt64.MaxValue };
long result;
foreach (ulong number in numbers)
{
   try {
      result = Convert.ToInt64(number);
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Int64 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt64 value 0 to a Int32 value 0.
//    Converted the UInt64 value 121 to a Int32 value 121.
//    Converted the UInt64 value 340 to a Int32 value 340.
//    The UInt64 value 18446744073709551615 is outside the range of the Int64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToInt64 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式信息，将指定对象的值转换为 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As Object, _
    provider As IFormatProvider _
) As Long
public static long ToInt64(
    Object value,
    IFormatProvider provider
)
public:
static long long ToInt64(
    Object^ value,
    IFormatProvider^ provider
)
static member ToInt64 :
        value:Object *
        provider:IFormatProvider -> int64

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Int64
与 value 等效的 64 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 Int64..::.MinValue 或大于 Int64..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToInt64 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt64 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt64 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt64 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。 下面的示例定义一个实现 IConvertible 的类和一个实现 IFormatProvider 的类。实现 IConvertible 的类的对象保存 Double 值的数组。每个类的对象都传递给 ToInt64 方法。此方法通过使用实现 IFormatProvider 的对象来确定如何计算平均值，返回 Double 值数组的平均值。

Imports System.Collections

Module IConvertibleProviderDemo

    ' Define the types of averaging available in the class
    ' implementing IConvertible.
    Enum AverageType as Short
        None = 0
        GeometricMean = 1
        ArithmeticMean = 2
        Median = 3
    End Enum

    ' Pass an instance of this class to methods that require an
    ' IFormatProvider. The class instance determines the type of
    ' average to calculate.
    Public Class AverageInfo
        Implements IFormatProvider

        Protected  AvgType      As AverageType

        ' Specify the type of averaging in the constructor.
        Public Sub New( avgType As AverageType )
            Me.AvgType = avgType
        End Sub

        ' This method returns a reference to the containing object
        ' if an object of AverageInfo type is requested.
        Public Function GetFormat( argType As Type ) As Object _
            Implements IFormatProvider.GetFormat

            If argType Is GetType( AverageInfo ) Then
                Return Me
            Else
                Return Nothing
            End If
        End Function

        ' Use this property to set or get the type of averaging.
        Public Property TypeOfAverage( ) As AverageType
            Get
                Return Me.AvgType
            End Get
            Set( ByVal value as AverageType )
                Me.AvgType = value
            End Set
        End Property
    End Class

    ' This class encapsulates an array of Double values and implements
    ' the IConvertible interface. Most of the IConvertible methods
    ' return an average of the array elements in one of three types:
    ' arithmetic mean, geometric mean, or median.
    Public Class DataSet
        Implements IConvertible

        Protected data              As ArrayList
        Protected defaultProvider   As AverageInfo

        ' Construct the object and add an initial list of values.
        ' Create a default format provider.
        Public Sub New( ParamArray values( ) As Double )
            data = New ArrayList( values )
            defaultProvider = New AverageInfo( _
                AverageType.ArithmeticMean )
        End Sub

        ' Add additional values with this method.
        Public Function Add( value As Double ) As Integer
            data.Add( value )
            Return data.Count
        End Function

        ' Get, set, and add values with this indexer property.
        Default Public Property Item(index As Integer) As Double
            Get
                If index >= 0 AndAlso index < data.Count Then
                    Return System.Convert.ToDouble( data( index ) )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.get] Index out of range." )
                End If
            End Get
            Set
                If index >= 0 AndAlso index < data.Count Then
                    data( index ) = value

                ElseIf index = data.Count Then
                    data.Add( value )
                Else
                    Throw New InvalidOperationException( _
                        "[DataSet.set] Index out of range." )
                End If
            End Set
        End Property

        ' This property returns the number of elements in the object.
        Public ReadOnly Property Count( ) As Integer
            Get
                Return data.Count
            End Get
        End Property

        ' This method calculates the average of the object's elements.
        Protected Function Average( ByVal avgType As AverageType ) As Double

            Dim SumProd As Double
            Dim Index   As Integer

            If data.Count = 0 Then Return 0.0

            Select Case avgType

                Case AverageType.GeometricMean

                    SumProd = 1.0
                    For Index = 0 To data.Count - 1
                        SumProd *= data( Index )
                    Next Index

                    ' This calculation will not fail with negative
                    ' elements.
                    Return Math.Sign( SumProd ) * Math.Pow( _
                        Math.Abs( SumProd ), 1.0 / data.Count )

                Case AverageType.ArithmeticMean

                    SumProd = 0.0
                    For Index = 0 To data.Count - 1
                        SumProd += data( Index )
                    Next Index

                    Return SumProd / data.Count

                Case AverageType.Median

                    If data.Count Mod 2 = 0 Then
                        Return ( data( data.Count \ 2 ) + _
                            data( data.Count \ 2 - 1 ) ) / 2.0
                    Else
                        Return data( data.Count \ 2 )
                    End If
            End Select
        End Function

        ' Get the AverageInfo object from the caller's format
        ' provider, or use the local default.
        Protected Function GetAverageInfo( _
            provider As IFormatProvider ) As AverageInfo

            Dim avgInfo As AverageInfo = Nothing

            If Not provider Is Nothing Then
                avgInfo = provider.GetFormat( GetType( AverageInfo ) )
            End If

            Return IIf( avgInfo Is Nothing, defaultProvider, avgInfo )

        End Function

        ' Calculate the average and limit the range.
        Protected Function CalcNLimitAverage( min As Double, _
            max As Double, provider as IFormatProvider ) As Double

            ' Get the format provider and calculate the average.
            Dim avgInfo As AverageInfo = GetAverageInfo( provider )
            Dim avg As Double = Average( avgInfo.TypeOfAverage )

            ' Limit the range, based on the minimum and maximum values
            ' for the type.
            Return IIf( avg > max, max, IIf( avg < min, min, avg ) )

        End Function

        ' The following elements are required by IConvertible.

        ' None of these conversion functions throw exceptions. When
        ' the data is out of range for the type, the appropriate
        ' MinValue or MaxValue is used.
        Public Function GetTypeCode( ) As TypeCode _
            Implements IConvertible.GetTypeCode
            Return TypeCode.Object
        End Function

        Function ToBoolean( ByVal provider As IFormatProvider ) As _
            Boolean Implements IConvertible.ToBoolean

            ' ToBoolean is false if the dataset is empty.
            If data.Count <= 0 Then
                Return False

            ' For median averaging, ToBoolean is true if any
            ' non-discarded elements are nonzero.
            ElseIf AverageType.Median = _
                GetAverageInfo( provider ).TypeOfAverage Then

                If data.Count Mod 2 = 0 Then
                    Return ( data( data.Count \ 2 ) <> 0.0 Or _
                        data( data.Count \ 2 - 1 ) <> 0.0 )
                Else
                    Return data( data.Count \ 2 ) <> 0.0
                End If

            ' For arithmetic or geometric mean averaging, ToBoolean is
            ' true if any element of the dataset is nonzero.
            Else
                Dim Index As Integer
                For Index = 0 To data.Count - 1
                    If data( Index ) <> 0.0 Then Return True
                Next Index
                Return False
            End If
        End Function

        Function ToByte( ByVal provider As IFormatProvider ) As Byte _
            Implements IConvertible.ToByte
            Return Convert.ToByte( CalcNLimitAverage( _
                Byte.MinValue, Byte.MaxValue, provider ) )
        End Function

        Function ToChar( ByVal provider As IFormatProvider ) As Char _
            Implements IConvertible.ToChar
            Return Convert.ToChar( Convert.ToUInt16( _
                CalcNLimitAverage( 0.0, &HFFFF, provider ) ) )
        End Function

        ' Convert to DateTime by adding the calculated average as
        ' seconds to the current date and time. A valid DateTime is
        ' always returned.
        Function ToDateTime( ByVal provider As IFormatProvider ) As _
            DateTime Implements IConvertible.ToDateTime
            Dim seconds As Double = Average( _
                GetAverageInfo( provider ).TypeOfAverage )
            Try
                Return DateTime.Now.AddSeconds( seconds )
            Catch ex As ArgumentOutOfRangeException
                Return IIf( seconds < 0.0, DateTime.MinValue, _
                    DateTime.MaxValue )
            End Try
        End Function

        Function ToDecimal( ByVal provider As IFormatProvider ) As _
            Decimal Implements IConvertible.ToDecimal

            ' The Double conversion rounds Decimal.MinValue and
            ' Decimal.MaxValue to invalid Decimal values, so the
            ' following limits must be used.
            Return Convert.ToDecimal( CalcNLimitAverage( _
                -79228162514264330000000000000.0, _
                79228162514264330000000000000.0, provider ) )
        End Function

        Function ToDouble( ByVal provider As IFormatProvider) As _
            Double Implements IConvertible.ToDouble
            Return Average( GetAverageInfo( provider ).TypeOfAverage )
        End Function

        Function ToInt16( ByVal provider As IFormatProvider ) As _
            Short Implements IConvertible.ToInt16
            Return Convert.ToInt16( CalcNLimitAverage( _
                Int16.MinValue, Int16.MaxValue, provider ) )
        End Function

        Function ToInt32( ByVal provider As IFormatProvider ) As _
            Integer Implements IConvertible.ToInt32
            Return Convert.ToInt32( CalcNLimitAverage( _
                Int32.MinValue, Int32.MaxValue, provider ) )
        End Function

        Function ToInt64( ByVal provider As IFormatProvider ) As Long _
            Implements IConvertible.ToInt64

            ' The Double conversion rounds Int64.MinValue and
            ' Int64.MaxValue to invalid Long values, so the following
            ' limits must be used.
            Return Convert.ToInt64( CalcNLimitAverage( _
                -9223372036854775000, 9223372036854775000, provider ) )
        End Function

        Function ToSByte( ByVal provider As IFormatProvider ) As _
            SByte Implements IConvertible.ToSByte

            ' SByte.MinValue and SByte.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToSByte( CalcNLimitAverage( _
                -128, 127, provider ) )
        End Function

        Function ToSingle( ByVal provider As IFormatProvider ) As _
            Single Implements IConvertible.ToSingle
            Return Convert.ToSingle( CalcNLimitAverage( _
                Single.MinValue, Single.MaxValue, provider ) )
        End Function

        Function ToUInt16( ByVal provider As IFormatProvider ) As _
            UInt16 Implements IConvertible.ToUInt16

            ' UInt16.MinValue and UInt16.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt16( CalcNLimitAverage( _
                0, &HFFFF, provider ) )
        End Function

        Function ToUInt32( ByVal provider As IFormatProvider ) As _
            UInt32 Implements IConvertible.ToUInt32

            ' UInt32.MinValue and UInt32.MaxValue are not defined in
            ' Visual Basic.
            Return Convert.ToUInt32( CalcNLimitAverage( _
                0, 4294967295, provider ) )
        End Function

        Function ToUInt64( ByVal provider As IFormatProvider ) As _
            UInt64 Implements IConvertible.ToUInt64

            ' UInt64.MinValue and UInt64.MaxValue are not defined in
            ' Visual Basic. The Double conversion would have rounded
            ' UInt64.MaxValue, so the following limit must be used.
            Return Convert.ToUInt64( CalcNLimitAverage( _
                0, 18446744073709550000.0, provider ) )
        End Function

        Function ToType( ByVal conversionType As Type, _
            ByVal provider As IFormatProvider) As Object _
            Implements IConvertible.ToType
            Return Convert.ChangeType( Average( GetAverageInfo( _
                provider ).TypeOfAverage ), conversionType )
        End Function

        Overloads Function ToString( ByVal provider As IFormatProvider _
            ) As String Implements IConvertible.ToString
            Dim avgType as AverageType = _
                GetAverageInfo( provider ).TypeOfAverage
            Return String.Format( "( {0}: {1:G10} )", avgType, _
                Average( avgType ) )
        End Function
    End Class

    ' Display a DataSet with three different format providers.
    Sub DisplayDataSet( ds As DataSet )

        Dim fmt    As String      = "{0,-12}{1,20}{2,20}{3,20}"
        Dim median As AverageInfo = New AverageInfo( AverageType.Median )
        Dim geMean As AverageInfo = _
            New AverageInfo( AverageType.GeometricMean )
        Dim iX     As Integer

        ' Display the dataset elements.
        If ds.Count > 0 Then
            Console.Write( vbCrLf & "DataSet: [{0}", ds( 0 ) )
            For iX = 1 To ds.Count - 1
                Console.Write( ", {0}", ds( iX ) )
            Next iX
            Console.WriteLine( "]" & vbCrLf )
        End If

        Console.WriteLine( fmt, "Convert.", "Default", _
            "Geometric Mean", "Median" )
        Console.WriteLine( fmt, "--------", "-------", _
            "--------------", "------" )
        Console.WriteLine( fmt, "ToBoolean", _
            Convert.ToBoolean( ds, Nothing ), _
            Convert.ToBoolean( ds, geMean ), _
            Convert.ToBoolean( ds, median ) )
        Console.WriteLine( fmt, "ToByte", _
            Convert.ToByte( ds, Nothing ), _
            Convert.ToByte( ds, geMean ), _
            Convert.ToByte( ds, median ) )
        Console.WriteLine( fmt, "ToChar", _
            Convert.ToChar( ds, Nothing ), _
            Convert.ToChar( ds, geMean ), _
            Convert.ToChar( ds, median ) )
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" & _
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", _
            "ToDateTime", Convert.ToDateTime( ds, Nothing ), _
            Convert.ToDateTime( ds, geMean ), _
            Convert.ToDateTime( ds, median ) )
        Console.WriteLine( fmt, "ToDecimal", _
            Convert.ToDecimal( ds, Nothing ), _
            Convert.ToDecimal( ds, geMean ), _
            Convert.ToDecimal( ds, median ) )
        Console.WriteLine( fmt, "ToDouble", _
            Convert.ToDouble( ds, Nothing ), _
            Convert.ToDouble( ds, geMean ), _
            Convert.ToDouble( ds, median ) )
        Console.WriteLine( fmt, "ToInt16", _
            Convert.ToInt16( ds, Nothing ), _
            Convert.ToInt16( ds, geMean ), _
            Convert.ToInt16( ds, median ) )
        Console.WriteLine( fmt, "ToInt32", _
            Convert.ToInt32( ds, Nothing ), _
            Convert.ToInt32( ds, geMean ), _
            Convert.ToInt32( ds, median ) )
        Console.WriteLine( fmt, "ToInt64", _
            Convert.ToInt64( ds, Nothing ), _
            Convert.ToInt64( ds, geMean ), _
            Convert.ToInt64( ds, median ) )
        Console.WriteLine( fmt, "ToSByte", _
            Convert.ToSByte( ds, Nothing ), _
            Convert.ToSByte( ds, geMean ), _
            Convert.ToSByte( ds, median ) )
        Console.WriteLine( fmt, "ToSingle", _
            Convert.ToSingle( ds, Nothing ), _
            Convert.ToSingle( ds, geMean ), _
            Convert.ToSingle( ds, median ) )
        Console.WriteLine( fmt, "ToUInt16", _
            Convert.ToUInt16( ds, Nothing ), _
            Convert.ToUInt16( ds, geMean ), _
            Convert.ToUInt16( ds, median ) )
        Console.WriteLine( fmt, "ToUInt32", _
            Convert.ToUInt32( ds, Nothing ), _
            Convert.ToUInt32( ds, geMean ), _
            Convert.ToUInt32( ds, median ) )
        Console.WriteLine( fmt, "ToUInt64", _
            Convert.ToUInt64( ds, Nothing ), _
            Convert.ToUInt64( ds, geMean ), _
            Convert.ToUInt64( ds, median ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Convert.To<Type>( Object, " & _
            "IFormatProvider ) methods " & vbCrLf & "generates " & _
            "the following output. The example displays the " & _
            "values " & vbCrLf & "returned by the methods, " & _
            "using several IFormatProvider objects." & vbCrLf )

        Dim ds1 As New DataSet( 10.5, 22.2, 45.9, 88.7, 156.05, 297.6 )
        DisplayDataSet( ds1 )

        Dim ds2 As New DataSet( _
            359999.95, 425000, 499999.5, 775000, 1695000 )
        DisplayDataSet( ds2 )
    End Sub
End Module

' This example of the Convert.To<Type>( Object, IFormatProvider ) methods
' generates the following output. The example displays the values
' returned by the methods, using several IFormatProvider objects.
'
' DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       103                  59                  67
' ToChar                         g                   ;                   C
' ToDateTime   2003-05-13 14:52:53 2003-05-13 14:52:09 2003-05-13 14:52:17
' ToDecimal       103.491666666667    59.4332135445164                67.3
' ToDouble        103.491666666667    59.4332135445164                67.3
' ToInt16                      103                  59                  67
' ToInt32                      103                  59                  67
' ToInt64                      103                  59                  67
' ToSByte                      103                  59                  67
' ToSingle                103.4917            59.43321                67.3
' ToUInt16                     103                  59                  67
' ToUInt32                     103                  59                  67
' ToUInt64                     103                  59                  67
'
' DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]
'
' Convert.                 Default      Geometric Mean              Median
' --------                 -------      --------------              ------
' ToBoolean                   True                True                True
' ToByte                       255                 255                 255
' ToChar                         ?                   ?                   ?
' ToDateTime   2003-05-22 07:27:49 2003-05-20 22:17:27 2003-05-19 09:44:29
' ToDecimal              750999.89    631577.237188435            499999.5
' ToDouble               750999.89    631577.237188435            499999.5
' ToInt16                    32767               32767               32767
' ToInt32                   751000              631577              500000
' ToInt64                   751000              631577              500000
' ToSByte                      127                 127                 127
' ToSingle                750999.9            631577.3            499999.5
' ToUInt16                   65535               65535               65535
' ToUInt32                  751000              631577              500000
' ToUInt64                  751000              631577              500000

using System;
using System.Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
public enum AverageType : short
{
    None = 0,
    GeometricMean = 1,
    ArithmeticMean = 2,
    Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
public class AverageInfo : IFormatProvider
{
    protected AverageType AvgType;

    // Specify the type of averaging in the constructor.
    public AverageInfo( AverageType avgType )
    {
        this.AvgType = avgType;
    }

    // This method returns a reference to the containing object
    // if an object of AverageInfo type is requested.
    public object GetFormat( Type argType )
    {
        if ( argType == typeof( AverageInfo ) )
            return this;
        else
            return null;
    }

    // Use this property to set or get the type of averaging.
    public AverageType TypeOfAverage
    {
        get { return this.AvgType; }
        set { this.AvgType = value; }
    }
}

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
public class DataSet : IConvertible
{
    protected ArrayList     data;
    protected AverageInfo   defaultProvider;

    // Construct the object and add an initial list of values.
    // Create a default format provider.
    public DataSet( params double[ ] values )
    {
        data = new ArrayList( values );
        defaultProvider =
            new AverageInfo( AverageType.ArithmeticMean );
    }

    // Add additional values with this method.
    public int Add( double value )
    {
        data.Add( value );
        return data.Count;
    }

    // Get, set, and add values with this indexer property.
    public double this[ int index ]
    {
        get
        {
            if( index >= 0 && index < data.Count )
                return (double)data[ index ];
            else
                throw new InvalidOperationException(
                    "[DataSet.get] Index out of range." );
        }
        set
        {
            if( index >= 0 && index < data.Count )
                data[ index ] = value;

            else if( index == data.Count )
                data.Add( value );
            else
                throw new InvalidOperationException(
                    "[DataSet.set] Index out of range." );
        }
    }

    // This property returns the number of elements in the object.
    public int Count
    {
        get { return data.Count; }
    }

    // This method calculates the average of the object's elements.
    protected double Average( AverageType avgType )
    {
        double  SumProd;

        if( data.Count == 0 )
            return 0.0;

        switch( avgType )
        {
            case AverageType.GeometricMean:

                SumProd = 1.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd *= (double)data[ Index ];

                // This calculation will not fail with negative
                // elements.
                return Math.Sign( SumProd ) * Math.Pow(
                    Math.Abs( SumProd ), 1.0 / data.Count );

            case AverageType.ArithmeticMean:

                SumProd = 0.0;
                for( int Index = 0; Index < data.Count; Index++ )
                    SumProd += (double)data[ Index ];

                return SumProd / data.Count;

            case AverageType.Median:

                if( data.Count % 2 == 0 )
                    return ( (double)data[ data.Count / 2 ] +
                        (double)data[ data.Count / 2 - 1 ] ) / 2.0;
                else
                    return (double)data[ data.Count / 2 ];

            default:
                return 0.0;
        }
    }

    // Get the AverageInfo object from the caller's format provider,
    // or use the local default.
    protected AverageInfo GetAverageInfo( IFormatProvider provider )
    {
        AverageInfo avgInfo = null;

        if( provider != null )
            avgInfo = (AverageInfo)provider.GetFormat(
                typeof( AverageInfo ) );

        if ( avgInfo == null )
            return defaultProvider;
        else
            return avgInfo;
    }

    // Calculate the average and limit the range.
    protected double CalcNLimitAverage( double min, double max,
        IFormatProvider provider )
    {
        // Get the format provider and calculate the average.
        AverageInfo avgInfo = GetAverageInfo( provider );
        double avg = Average( avgInfo.TypeOfAverage );

        // Limit the range, based on the minimum and maximum values
        // for the type.
        return avg > max ? max : avg < min ? min : avg;

    }

    // The following elements are required by IConvertible.

    // None of these conversion functions throw exceptions. When
    // the data is out of range for the type, the appropriate
    // MinValue or MaxValue is used.
    public TypeCode GetTypeCode( )
    {
        return TypeCode.Object;
    }

    public bool ToBoolean( IFormatProvider provider )
    {
        // ToBoolean is false if the dataset is empty.
        if( data.Count <= 0 )
            return false;

        // For median averaging, ToBoolean is true if any
        // non-discarded elements are nonzero.
        else if( AverageType.Median ==
            GetAverageInfo( provider ).TypeOfAverage )
        {
            if (data.Count % 2 == 0 )
                return ( (double)data[ data.Count / 2 ] != 0.0 ||
                    (double)data[ data.Count / 2 - 1 ] != 0.0 );
            else
                return (double)data[ data.Count / 2 ] != 0.0;
        }

        // For arithmetic or geometric mean averaging, ToBoolean is
        // true if any element of the dataset is nonzero.
        else
        {
            for( int Index = 0; Index < data.Count; Index++ )
                if( (double)data[ Index ] != 0.0 )
                    return true;
            return false;
        }
    }

    public byte ToByte( IFormatProvider provider )
    {
        return Convert.ToByte( CalcNLimitAverage(
            Byte.MinValue, Byte.MaxValue, provider ) );
    }

    public char ToChar( IFormatProvider provider )
    {
        return Convert.ToChar( Convert.ToUInt16( CalcNLimitAverage(
            Char.MinValue, Char.MaxValue, provider ) ) );
    }

    // Convert to DateTime by adding the calculated average as
    // seconds to the current date and time. A valid DateTime is
    // always returned.
    public DateTime ToDateTime( IFormatProvider provider )
    {
        double seconds =
            Average( GetAverageInfo( provider ).TypeOfAverage );
        try
        {
            return DateTime.Now.AddSeconds( seconds );
        }
        catch( ArgumentOutOfRangeException )
        {
            return seconds < 0.0 ? DateTime.MinValue : DateTime.MaxValue;
        }
    }

    public decimal ToDecimal( IFormatProvider provider )
    {
        // The Double conversion rounds Decimal.MinValue and
        // Decimal.MaxValue to invalid Decimal values, so the
        // following limits must be used.
        return Convert.ToDecimal( CalcNLimitAverage(
            -79228162514264330000000000000.0,
            79228162514264330000000000000.0, provider ) );
    }

    public double ToDouble( IFormatProvider provider )
    {
        return Average( GetAverageInfo(provider).TypeOfAverage );
    }

    public short ToInt16( IFormatProvider provider )
    {
        return Convert.ToInt16( CalcNLimitAverage(
            Int16.MinValue, Int16.MaxValue, provider ) );
    }

    public int ToInt32( IFormatProvider provider )
    {
        return Convert.ToInt32( CalcNLimitAverage(
            Int32.MinValue, Int32.MaxValue, provider ) );
    }

    public long ToInt64( IFormatProvider provider )
    {
        // The Double conversion rounds Int64.MinValue and
        // Int64.MaxValue to invalid Int64 values, so the following
        // limits must be used.
        return Convert.ToInt64( CalcNLimitAverage(
            -9223372036854775000, 9223372036854775000, provider ) );
    }

    public SByte ToSByte( IFormatProvider provider )
    {
        return Convert.ToSByte( CalcNLimitAverage(
            SByte.MinValue, SByte.MaxValue, provider ) );
    }

    public float ToSingle( IFormatProvider provider )
    {
        return Convert.ToSingle( CalcNLimitAverage(
            Single.MinValue, Single.MaxValue, provider ) );
    }

    public UInt16 ToUInt16( IFormatProvider provider )
    {
        return Convert.ToUInt16( CalcNLimitAverage(
            UInt16.MinValue, UInt16.MaxValue, provider ) );
    }

    public UInt32 ToUInt32( IFormatProvider provider )
    {
        return Convert.ToUInt32( CalcNLimitAverage(
            UInt32.MinValue, UInt32.MaxValue, provider ) );
    }

    public UInt64 ToUInt64( IFormatProvider provider )
    {
        // The Double conversion rounds UInt64.MaxValue to an invalid
        // UInt64 value, so the following limit must be used.
        return Convert.ToUInt64( CalcNLimitAverage(
            0, 18446744073709550000.0, provider ) );
    }

    public object ToType( Type conversionType,
        IFormatProvider provider )
    {
        return Convert.ChangeType( Average(
            GetAverageInfo( provider ).TypeOfAverage ),
            conversionType );
    }

    public string ToString( IFormatProvider provider )
    {
        AverageType avgType = GetAverageInfo( provider ).TypeOfAverage;
        return String.Format( "( {0}: {1:G10} )", avgType,
            Average( avgType ) );
    }
}

class IConvertibleProviderDemo
{
    // Display a DataSet with three different format providers.
    public static void DisplayDataSet( DataSet ds )
    {
        string      fmt    = "{0,-12}{1,20}{2,20}{3,20}";
        AverageInfo median = new AverageInfo( AverageType.Median );
        AverageInfo geMean =
            new AverageInfo( AverageType.GeometricMean );

         // Display the dataset elements.
        if( ds.Count > 0 )
        {
            Console.Write( "\nDataSet: [{0}", ds[ 0 ] );
            for( int iX = 1; iX < ds.Count; iX++ )
                Console.Write( ", {0}", ds[ iX ] );
            Console.WriteLine( "]\n" );
        }

        Console.WriteLine( fmt, "Convert.", "Default",
            "Geometric Mean", "Median");
        Console.WriteLine( fmt, "--------", "-------",
            "--------------", "------");
        Console.WriteLine( fmt, "ToBoolean",
            Convert.ToBoolean( ds, null ),
            Convert.ToBoolean( ds, geMean ),
            Convert.ToBoolean( ds, median ) );
        Console.WriteLine( fmt, "ToByte",
            Convert.ToByte( ds, null ),
            Convert.ToByte( ds, geMean ),
            Convert.ToByte( ds, median ) );
        Console.WriteLine( fmt, "ToChar",
            Convert.ToChar( ds, null ),
            Convert.ToChar( ds, geMean ),
            Convert.ToChar( ds, median ) );
        Console.WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}" +
            "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}",
            "ToDateTime", Convert.ToDateTime( ds, null ),
            Convert.ToDateTime( ds, geMean ),
            Convert.ToDateTime( ds, median ) );
        Console.WriteLine( fmt, "ToDecimal",
            Convert.ToDecimal( ds, null ),
            Convert.ToDecimal( ds, geMean ),
            Convert.ToDecimal( ds, median ) );
        Console.WriteLine( fmt, "ToDouble",
            Convert.ToDouble( ds, null ),
            Convert.ToDouble( ds, geMean ),
            Convert.ToDouble( ds, median ) );
        Console.WriteLine( fmt, "ToInt16",
            Convert.ToInt16( ds, null ),
            Convert.ToInt16( ds, geMean ),
            Convert.ToInt16( ds, median ) );
        Console.WriteLine( fmt, "ToInt32",
            Convert.ToInt32( ds, null ),
            Convert.ToInt32( ds, geMean ),
            Convert.ToInt32( ds, median ) );
        Console.WriteLine( fmt, "ToInt64",
            Convert.ToInt64( ds, null ),
            Convert.ToInt64( ds, geMean ),
            Convert.ToInt64( ds, median ) );
        Console.WriteLine( fmt, "ToSByte",
            Convert.ToSByte( ds, null ),
            Convert.ToSByte( ds, geMean ),
            Convert.ToSByte( ds, median ) );
        Console.WriteLine( fmt, "ToSingle",
            Convert.ToSingle( ds, null ),
            Convert.ToSingle( ds, geMean ),
            Convert.ToSingle( ds, median ) );
        Console.WriteLine( fmt, "ToUInt16",
            Convert.ToUInt16( ds, null ),
            Convert.ToUInt16( ds, geMean ),
            Convert.ToUInt16( ds, median ) );
        Console.WriteLine( fmt, "ToUInt32",
            Convert.ToUInt32( ds, null ),
            Convert.ToUInt32( ds, geMean ),
            Convert.ToUInt32( ds, median ) );
        Console.WriteLine( fmt, "ToUInt64",
            Convert.ToUInt64( ds, null ),
            Convert.ToUInt64( ds, geMean ),
            Convert.ToUInt64( ds, median ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of " +
            "the Convert.To<Type>( object, IFormatProvider ) methods " +
            "\ngenerates the following output. The example " +
            "displays the values \nreturned by the methods, " +
            "using several IFormatProvider objects.\n" );

        DataSet ds1 = new DataSet(
            10.5, 22.2, 45.9, 88.7, 156.05, 297.6 );
        DisplayDataSet( ds1 );

        DataSet ds2 = new DataSet(
            359999.95, 425000, 499999.5, 775000, 1695000 );
        DisplayDataSet( ds2 );
    }
}

/*
This example of the Convert.To<Type>( object, IFormatProvider ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:04:12 2003-05-13 15:03:28 2003-05-13 15:03:35
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert.                 Default      Geometric Mean              Median
--------                 -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 07:39:08 2003-05-20 22:28:45 2003-05-19 09:55:48
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

using namespace System;
using namespace System::Collections;

// Define the types of averaging available in the class
// implementing IConvertible.
enum class AverageType : short
{
   None = 0,
   GeometricMean = 1,
   ArithmeticMean = 2,
   Median = 3
};

// Pass an instance of this class to methods that require an
// IFormatProvider. The class instance determines the type of
// average to calculate.
ref class AverageInfo: public IFormatProvider
{
protected:
   AverageType AvgType;

public:

   // Specify the type of averaging in the constructor.
   AverageInfo( AverageType avgType )
   {
      this->AvgType = avgType;
   }

   // This method returns a reference to the containing object
   // if an object of AverageInfo type is requested.
   virtual Object^ GetFormat( Type^ argType )
   {
      if ( argType == AverageInfo::typeid)
            return this;
      else
            return (Object^)0;
   }

   property AverageType TypeOfAverage
   {

      // Use this property to set or get the type of averaging.
      AverageType get()
      {
         return this->AvgType;
      }

      void set( AverageType value )
      {
         this->AvgType = value;
      }

   }

};

// This class encapsulates an array of double values and implements
// the IConvertible interface. Most of the IConvertible methods
// return an average of the array elements in one of three types:
// arithmetic mean, geometric mean, or median.
ref class DataSet: public IConvertible
{
private:
   static Object^ null = nullptr;

protected:
   ArrayList^ data;
   AverageInfo^ defaultProvider;

   // This method unboxes a boxed double.
   double UnBoxDouble( Object^ obj )
   {
      return  *static_cast<double^>(obj);
   }

public:

   // Construct the object and add an initial list of values.
   // Create a default format provider.
   DataSet( ... array<Double>^values )
   {
      data = gcnew ArrayList( (Array^)values );
      defaultProvider = gcnew AverageInfo( AverageType::ArithmeticMean );
   }

   // Add additional values with this method.
   int Add( double value )
   {
      data->Add( value );
      return data->Count;
   }

   property double Item[ int ]
   {

      // Get, set, and add values with this indexer property.
      double get( int index )
      {
         if ( index >= 0 && index < data->Count )
                  return UnBoxDouble( data[ index ] );
         else
                  throw gcnew InvalidOperationException( "[DataSet.get] Index out of range." );
      }

      void set( int index, double value )
      {
         if ( index >= 0 && index < data->Count )
                  data[ index ] = value;
         else
         if ( index == data->Count )
                  data->Add( value );
         else
                  throw gcnew InvalidOperationException( "[DataSet.set] Index out of range." );
      }

   }

   property int Count
   {

      // This property returns the number of elements in the object.
      int get()
      {
         return data->Count;
      }

   }

protected:

   // This method calculates the average of the object's elements.
   double Average( AverageType avgType )
   {
      double SumProd;
      if ( data->Count == 0 )
            return 0.0;

      switch ( avgType )
      {
         case AverageType::GeometricMean:
            SumProd = 1.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd *= UnBoxDouble( data[ Index ] );

            // This calculation will not fail with negative
            // elements.
            return Math::Sign( SumProd ) * Math::Pow( Math::Abs( SumProd ), 1.0 / data->Count );

         case AverageType::ArithmeticMean:
            SumProd = 0.0;
            for ( int Index = 0; Index < data->Count; Index++ )
               SumProd += UnBoxDouble( data[ Index ] );
            return SumProd / data->Count;

         case AverageType::Median:
            if ( data->Count % 2 == 0 )
                        return (UnBoxDouble( data[ data->Count / 2 ] ) + UnBoxDouble( data[ data->Count / 2 - 1 ] )) / 2.0;
            else
                        return UnBoxDouble( data[ data->Count / 2 ] );

         default:
            return 0.0;
      }
   }

   // Get the AverageInfo object from the caller's format provider,
   // or use the local default.
   AverageInfo^ GetAverageInfo( IFormatProvider^ provider )
   {
      AverageInfo^ avgInfo = nullptr;
      if ( provider != nullptr )
            avgInfo = static_cast<AverageInfo^>(provider->GetFormat( AverageInfo::typeid ));

      if ( avgInfo == nullptr )
            return defaultProvider;
      else
            return avgInfo;
   }

   // Calculate the average and limit the range.
   double CalcNLimitAverage( double min, double max, IFormatProvider^ provider )
   {

      // Get the format provider and calculate the average.
      AverageInfo^ avgInfo = GetAverageInfo( provider );
      double avg = Average( avgInfo->TypeOfAverage );

      // Limit the range, based on the minimum and maximum values
      // for the type.
      return avg > max ? max : avg < min ? min : avg;
   }

public:

   // The following elements are required by IConvertible.
   // None of these conversion functions throw exceptions. When
   // the data is out of range for the type, the appropriate
   // MinValue or MaxValue is used.
   virtual TypeCode GetTypeCode()
   {
      return TypeCode::Object;
   }

   virtual bool ToBoolean( IFormatProvider^ provider )
   {

      // ToBoolean is false if the dataset is empty.
      if ( data->Count <= 0 )
            return false;
      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      else

      // For median averaging, ToBoolean is true if any
      // non-discarded elements are nonzero.
      if ( AverageType::Median == GetAverageInfo( provider )->TypeOfAverage )
      {
         if ( data->Count % 2 == 0 )
                  return (UnBoxDouble( data[ data->Count / 2 ] ) != 0.0 || UnBoxDouble( data[ data->Count / 2 - 1 ] ) != 0.0);
         else
                  return UnBoxDouble( data[ data->Count / 2 ] ) != 0.0;
      }
      // For arithmetic or geometric mean averaging, ToBoolean is
      // true if any element of the dataset is nonzero.
      else
      {
         for ( int Index = 0; Index < data->Count; Index++ )
            if ( UnBoxDouble( data[ Index ] ) != 0.0 )
                        return true;
         return false;
      }
   }

   virtual Byte ToByte( IFormatProvider^ provider )
   {
      return Convert::ToByte( CalcNLimitAverage( Byte::MinValue, Byte::MaxValue, provider ) );
   }

   virtual Char ToChar( IFormatProvider^ provider )
   {
      return Convert::ToChar( Convert::ToUInt16( CalcNLimitAverage( Char::MinValue, Char::MaxValue, provider ) ) );
   }

   // Convert to DateTime by adding the calculated average as
   // seconds to the current date and time. A valid DateTime is
   // always returned.
   virtual DateTime ToDateTime( IFormatProvider^ provider )
   {
      double seconds = Average( GetAverageInfo( provider )->TypeOfAverage );
      try
      {
         return DateTime::Now.AddSeconds( seconds );
      }
      catch ( ArgumentOutOfRangeException^ )
      {
         return seconds < 0.0 ? DateTime::MinValue : DateTime::MaxValue;
      }

   }

   virtual Decimal ToDecimal( IFormatProvider^ provider )
   {

      // The Double conversion rounds Decimal.MinValue and
      // Decimal.MaxValue to invalid Decimal values, so the
      // following limits must be used.
      return Convert::ToDecimal( CalcNLimitAverage(  -79228162514264330000000000000.0, 79228162514264330000000000000.0, provider ) );
   }

   virtual double ToDouble( IFormatProvider^ provider )
   {
      return Average( GetAverageInfo( provider )->TypeOfAverage );
   }

   virtual short ToInt16( IFormatProvider^ provider )
   {
      return Convert::ToInt16( CalcNLimitAverage( Int16::MinValue, Int16::MaxValue, provider ) );
   }

   virtual int ToInt32( IFormatProvider^ provider )
   {
      return Convert::ToInt32( CalcNLimitAverage( Int32::MinValue, Int32::MaxValue, provider ) );
   }

   virtual __int64 ToInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds Int64.MinValue and
      // Int64.MaxValue to invalid Int64 values, so the following
      // limits must be used.
      return Convert::ToInt64( CalcNLimitAverage(  -9223372036854775000, 9223372036854775000, provider ) );
   }

   virtual signed char ToSByte( IFormatProvider^ provider )
   {
      return Convert::ToSByte( CalcNLimitAverage( SByte::MinValue, SByte::MaxValue, provider ) );
   }

   virtual float ToSingle( IFormatProvider^ provider )
   {
      return Convert::ToSingle( CalcNLimitAverage( Single::MinValue, Single::MaxValue, provider ) );
   }

   virtual UInt16 ToUInt16( IFormatProvider^ provider )
   {
      return Convert::ToUInt16( CalcNLimitAverage( UInt16::MinValue, UInt16::MaxValue, provider ) );
   }

   virtual UInt32 ToUInt32( IFormatProvider^ provider )
   {
      return Convert::ToUInt32( CalcNLimitAverage( UInt32::MinValue, UInt32::MaxValue, provider ) );
   }

   virtual UInt64 ToUInt64( IFormatProvider^ provider )
   {

      // The Double conversion rounds UInt64.MaxValue to an invalid
      // UInt64 value, so the following limit must be used.
      return Convert::ToUInt64( CalcNLimitAverage( 0, 18446744073709550000.0, provider ) );
   }

   virtual Object^ ToType( Type^ conversionType, IFormatProvider^ provider )
   {
      return Convert::ChangeType( Average( GetAverageInfo( provider )->TypeOfAverage ), conversionType );
   }

   virtual String^ ToString( IFormatProvider^ provider )
   {
      AverageType avgType = GetAverageInfo( provider )->TypeOfAverage;
      return String::Format( "( {0}: {1:G10} )", avgType, Average( avgType ) );
   }

};

// Display a DataSet with three different format providers.
void DisplayDataSet( DataSet^ ds )
{
   IFormatProvider^ null = nullptr;
   String^ fmt = "{0,-12}{1,20}{2,20}{3,20}";
   AverageInfo^ median = gcnew AverageInfo( AverageType::Median );
   AverageInfo^ geMean = gcnew AverageInfo( AverageType::GeometricMean );

   // Display the dataset elements.
   if ( ds->Count > 0 )
   {
      Console::Write( "\nDataSet: [{0}", ds->Item[ 0 ] );
      for ( int iX = 1; iX < ds->Count; iX++ )
         Console::Write( ", {0}", ds->Item[ iX ] );
      Console::WriteLine( "]\n" );
   }

   Console::WriteLine( fmt, "Convert::", "Default", "Geometric Mean", "Median" );
   Console::WriteLine( fmt, "---------", "-------", "--------------", "------" );
   Console::WriteLine( fmt, "ToBoolean", Convert::ToBoolean( ds, null ), Convert::ToBoolean( ds, geMean ), Convert::ToBoolean( ds, median ) );
   Console::WriteLine( fmt, "ToByte", Convert::ToByte( ds, null ), Convert::ToByte( ds, geMean ), Convert::ToByte( ds, median ) );
   Console::WriteLine( fmt, "ToChar", Convert::ToChar( ds, null ), Convert::ToChar( ds, geMean ), Convert::ToChar( ds, median ) );
   Console::WriteLine( "{0,-12}{1,20:yyyy-MM-dd HH:mm:ss}"
   "{2,20:yyyy-MM-dd HH:mm:ss}{3,20:yyyy-MM-dd HH:mm:ss}", "ToDateTime", Convert::ToDateTime( ds, null ), Convert::ToDateTime( ds, geMean ), Convert::ToDateTime( ds, median ) );
   Console::WriteLine( fmt, "ToDecimal", Convert::ToDecimal( ds, null ), Convert::ToDecimal( ds, geMean ), Convert::ToDecimal( ds, median ) );
   Console::WriteLine( fmt, "ToDouble", Convert::ToDouble( ds, null ), Convert::ToDouble( ds, geMean ), Convert::ToDouble( ds, median ) );
   Console::WriteLine( fmt, "ToInt16", Convert::ToInt16( ds, null ), Convert::ToInt16( ds, geMean ), Convert::ToInt16( ds, median ) );
   Console::WriteLine( fmt, "ToInt32", Convert::ToInt32( ds, null ), Convert::ToInt32( ds, geMean ), Convert::ToInt32( ds, median ) );
   Console::WriteLine( fmt, "ToInt64", Convert::ToInt64( ds, null ), Convert::ToInt64( ds, geMean ), Convert::ToInt64( ds, median ) );
   Console::WriteLine( fmt, "ToSByte", Convert::ToSByte( ds, null ), Convert::ToSByte( ds, geMean ), Convert::ToSByte( ds, median ) );
   Console::WriteLine( fmt, "ToSingle", Convert::ToSingle( ds, null ), Convert::ToSingle( ds, geMean ), Convert::ToSingle( ds, median ) );
   Console::WriteLine( fmt, "ToUInt16", Convert::ToUInt16( ds, null ), Convert::ToUInt16( ds, geMean ), Convert::ToUInt16( ds, median ) );
   Console::WriteLine( fmt, "ToUInt32", Convert::ToUInt32( ds, null ), Convert::ToUInt32( ds, geMean ), Convert::ToUInt32( ds, median ) );
   Console::WriteLine( fmt, "ToUInt64", Convert::ToUInt64( ds, null ), Convert::ToUInt64( ds, geMean ), Convert::ToUInt64( ds, median ) );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Convert::To<Type>( Object*, IFormatProvider* ) methods "
   "\ngenerates the following output. The example "
   "displays the values \nreturned by the methods, "
   "using several IFormatProvider objects.\n" );

   // To call a [ParamArray] method in C++, you cannot just
   // list the parameters, you need to build an array.
   array<Double>^dataElem = gcnew array<Double>(6);
   dataElem[ 0 ] = 10.5;
   dataElem[ 1 ] = 22.2;
   dataElem[ 2 ] = 45.9;
   dataElem[ 3 ] = 88.7;
   dataElem[ 4 ] = 156.05;
   dataElem[ 5 ] = 297.6;
   DataSet^ ds1 = gcnew DataSet( dataElem );
   DisplayDataSet( ds1 );
   dataElem = gcnew array<Double>(5);
   dataElem[ 0 ] = 359999.95;
   dataElem[ 1 ] = 425000;
   dataElem[ 2 ] = 499999.5;
   dataElem[ 3 ] = 775000;
   dataElem[ 4 ] = 1695000;
   DataSet^ ds2 = gcnew DataSet( dataElem );
   DisplayDataSet( ds2 );
}

/*
This example of the Convert::To<Type>( Object*, IFormatProvider* ) methods
generates the following output. The example displays the values
returned by the methods, using several IFormatProvider objects.

DataSet: [10.5, 22.2, 45.9, 88.7, 156.05, 297.6]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       103                  59                  67
ToChar                         g                   ;                   C
ToDateTime   2003-05-13 15:30:23 2003-05-13 15:29:39 2003-05-13 15:29:47
ToDecimal       103.491666666667    59.4332135445164                67.3
ToDouble        103.491666666667    59.4332135445164                67.3
ToInt16                      103                  59                  67
ToInt32                      103                  59                  67
ToInt64                      103                  59                  67
ToSByte                      103                  59                  67
ToSingle                103.4917            59.43321                67.3
ToUInt16                     103                  59                  67
ToUInt32                     103                  59                  67
ToUInt64                     103                  59                  67

DataSet: [359999.95, 425000, 499999.5, 775000, 1695000]

Convert::                Default      Geometric Mean              Median
---------                -------      --------------              ------
ToBoolean                   True                True                True
ToByte                       255                 255                 255
ToChar                         ?                   ?                   ?
ToDateTime   2003-05-22 08:05:19 2003-05-20 22:54:57 2003-05-19 10:21:59
ToDecimal              750999.89    631577.237188435            499999.5
ToDouble               750999.89    631577.237188435            499999.5
ToInt16                    32767               32767               32767
ToInt32                   751000              631577              500000
ToInt64                   751000              631577              500000
ToSByte                      127                 127                 127
ToSingle                750999.9            631577.3            499999.5
ToUInt16                   65535               65535               65535
ToUInt32                  751000              631577              500000
ToUInt64                  751000              631577              500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToInt64 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As String, _
    provider As IFormatProvider _
) As Long
public static long ToInt64(
    string value,
    IFormatProvider provider
)
public:
static long long ToInt64(
    String^ value,
    IFormatProvider^ provider
)
static member ToInt64 :
        value:string *
        provider:IFormatProvider -> int64

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Int64
与 value 中数字等效的 64 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 Int64..::.MinValue 或大于 Int64..::.MaxValue 的数字。

返回值是对 value 调用 Int64..::.Parse 方法的结果。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 Int64..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Int64..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它对固定区域性使用此提供程序和 NumberFormatInfo 提供程序，尝试将数值字符串数组的每个元素都转换为整数。 下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它对固定区域性使用此提供程序和 NumberFormatInfo 提供程序，尝试将数值字符串数组的每个元素都转换为整数。

Imports System.Globalization

Public Module Example
   Public Sub Main()
      ' Create a NumberFormatInfo object and set the properties that
      ' affect conversions using Convert.ToInt64(String, IFormatProvider).
      Dim customProvider As New NumberFormatInfo()
      customProvider.NegativeSign = "neg "
      customProvider.PositiveSign = "pos "

      ' Create an array of providers with the custom provider and the
      ' NumberFormatInfo object for the invariant culture.
      Dim providers() As NumberFormatInfo = {customProvider, _
                                             NumberFormatInfo.InvariantInfo }

      ' Define an array of strings to parse.
      Dim numericStrings() As String = { "123456789", "+123456789", _
                                         "pos 123456789", "-123456789", _
                                         "neg 123456789", "123456789.", _
                                         "123,456,789", "(123456789)", _
                                         "9223372036854775808", "-9223372036854775809" }

      For ctr As Integer = 0 to 1
         Dim provider As IFormatProvider = providers(ctr)
         Console.WriteLine(IIf(ctr = 0, "Custom Provider:", "Invariant Culture:"))
         For Each numericString As String In numericStrings
            Console.Write("   {0,-22} -->  ", numericString)
            Try
               Console.WriteLine("{0,22}", Convert.ToInt32(numericString, provider))
            Catch e As FormatException
               Console.WriteLine("{0,22}", "Unrecognized Format")
            Catch e As OverflowException
               Console.WriteLine("{0,22}", "Overflow")
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       Custom Provider:
'          123456789              -->               123456789
'          +123456789             -->     Unrecognized Format
'          pos 123456789          -->               123456789
'          -123456789             -->     Unrecognized Format
'          neg 123456789          -->              -123456789
'          123456789.             -->     Unrecognized Format
'          123,456,789            -->     Unrecognized Format
'          (123456789)            -->     Unrecognized Format
'          9223372036854775808    -->                Overflow
'          -9223372036854775809   -->     Unrecognized Format
'
'       Invariant Culture:
'          123456789              -->               123456789
'          +123456789             -->               123456789
'          pos 123456789          -->     Unrecognized Format
'          -123456789             -->              -123456789
'          neg 123456789          -->     Unrecognized Format
'          123456789.             -->     Unrecognized Format
'          123,456,789            -->     Unrecognized Format
'          (123456789)            -->     Unrecognized Format
'          9223372036854775808    -->                Overflow
'          -9223372036854775809   -->                Overflow

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Create a NumberFormatInfo object and set the properties that
      // affect conversions using Convert.ToInt64(String, IFormatProvider).
      NumberFormatInfo customProvider = new NumberFormatInfo();
      customProvider.NegativeSign = "neg ";
      customProvider.PositiveSign = "pos ";

      // Create an array of providers with the custom provider and the
      // NumberFormatInfo object for the invariant culture.
      NumberFormatInfo[] providers = { customProvider,
                                       NumberFormatInfo.InvariantInfo };

      // Define an array of strings to parse.
      string[] numericStrings = { "123456789", "+123456789", "pos 123456789",
                                  "-123456789", "neg 123456789", "123456789.",
                                  "123,456,789", "(123456789)",
                                  "9223372036854775808", "-9223372036854775809" };

      for (int ctr = 0; ctr < 2; ctr++)
      {
         IFormatProvider provider = providers[ctr];
         Console.WriteLine(ctr == 0 ? "Custom Provider:" : "Invariant Culture:");
         foreach (string numericString in numericStrings)
         {
            Console.Write("   {0,-22} -->  ", numericString);
            try {
               Console.WriteLine("{0,22}", Convert.ToInt32(numericString, provider));
            }
            catch (FormatException) {
               Console.WriteLine("{0,22}", "Unrecognized Format");
            }
            catch (OverflowException) {
               Console.WriteLine("{0,22}", "Overflow");
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       Custom Provider:
//          123456789              -->               123456789
//          +123456789             -->     Unrecognized Format
//          pos 123456789          -->               123456789
//          -123456789             -->     Unrecognized Format
//          neg 123456789          -->              -123456789
//          123456789.             -->     Unrecognized Format
//          123,456,789            -->     Unrecognized Format
//          (123456789)            -->     Unrecognized Format
//          9223372036854775808    -->                Overflow
//          -9223372036854775809   -->     Unrecognized Format
//
//       Invariant Culture:
//          123456789              -->               123456789
//          +123456789             -->               123456789
//          pos 123456789          -->     Unrecognized Format
//          -123456789             -->              -123456789
//          neg 123456789          -->     Unrecognized Format
//          123456789.             -->     Unrecognized Format
//          123,456,789            -->     Unrecognized Format
//          (123456789)            -->     Unrecognized Format
//          9223372036854775808    -->                Overflow
//          -9223372036854775809   -->                Overflow

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToInt64 方法 (String, Int32)

Convert
.
.
::
.
ToInt64 方法 (String, Int32)
Convert 类

将指定基的数字的字符串表示形式转换为等效的 64 位带符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    value As String, _
    fromBase As Integer _
) As Long
public static long ToInt64(
    string value,
    int fromBase
)
public:
static long long ToInt64(
    String^ value,
    int fromBase
)
static member ToInt64 :
        value:string *
        fromBase:int -> int64

参数

value
类型： System String
包含要转换的数字的字符串。
fromBase
类型： System Int32
value 中数字的基数，它必须是 2、8、10 或 16。

返回值

类型： System Int64
与 value 中数字等效的 64 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
ArgumentException | fromBase 不是 2、8、10 或 16。 - 或 - value，它表示一个非 10 为基的有符号数，前面带一个负号。
FormatException | value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。 value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。
OverflowException | value，它表示一个非 10 为基的有符号数，前面带一个负号。 - 或 - value 表示小于 Int64..::.MinValue 或大于 Int64..::.MaxValue 的数字。

如果 fromBase 为 16，则可以在 value 参数指定的数字前面加上“0x”或“0X”。

由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt64(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将长整数的最高序二进制位（位 63）解释为其符号位。因此，可以编写代码以将超出 Int64 数据类型的范围的不是以 10 为基数的数字转换为 Int64 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToInt64(String, Int32) 方法。该方法将显示消息“0xFFFFFFFFFFFFFFFF converts to -1”（0xFFFFFFFFFFFFFFFF 转换为 -1），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt64(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将长整数的最高序二进制位（位 63）解释为其符号位。因此，可以编写代码以将超出 Int64 数据类型的范围的不是以 10 为基数的数字转换为 Int64 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToInt64(String, Int32) 方法。该方法将显示消息“0xFFFFFFFFFFFFFFFF converts to -1”（0xFFFFFFFFFFFFFFFF 转换为 -1），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt64(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将长整数的最高序二进制位（位 63）解释为其符号位。因此，可以编写代码以将超出 Int64 数据类型的范围的不是以 10 为基数的数字转换为 Int64 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToInt64(String, Int32) 方法。该方法将显示消息“0xFFFFFFFFFFFFFFFF converts to -1”（0xFFFFFFFFFFFFFFFF 转换为 -1），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt64(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将长整数的最高序二进制位（位 63）解释为其符号位。因此，可以编写代码以将超出 Int64 数据类型的范围的不是以 10 为基数的数字转换为 Int64 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToInt64(String, Int32) 方法。该方法将显示消息“0xFFFFFFFFFFFFFFFF converts to -1”（0xFFFFFFFFFFFFFFFF 转换为 -1），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToInt64(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将长整数的最高序二进制位（位 63）解释为其符号位。因此，可以编写代码以将超出 Int64 数据类型的范围的不是以 10 为基数的数字转换为 Int64 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToInt64(String, Int32) 方法。该方法将显示消息“0xFFFFFFFFFFFFFFFF converts to -1”（0xFFFFFFFFFFFFFFFF 转换为 -1），而不是引发异常。

' Create a hexadecimal value out of range of the Long type.
Dim value As String = ULong.MaxValue.ToString("X")
' Call Convert.ToInt64 to convert it back to a number.
Try
   Dim number As Long = Convert.ToInt64(value, 16)
   Console.WriteLine("0x{0} converts to {1}.", value, number)
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to a long integer.", value)
End Try

// Create a hexadecimal value out of range of the long type.
string value = ulong.MaxValue.ToString("X");
// Use Convert.ToInt64 to convert it back to a number.
try
{
   long number = Convert.ToInt64(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to a long integer.", value);
}

在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将一个值转换为对应的十六进制字符串表示形式之前，先确定该值是表示一个无符号类型还是一个有符号类型，从而确保该方法正确地处理溢出。如果原始值是无符号类型，而转换回整数的结果是一个带有符号位的值，则将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将一个值转换为对应的十六进制字符串表示形式之前，先确定该值是表示一个无符号类型还是一个有符号类型，从而确保该方法正确地处理溢出。如果原始值是无符号类型，而转换回整数的结果是一个带有符号位的值，则将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将一个值转换为对应的十六进制字符串表示形式之前，先确定该值是表示一个无符号类型还是一个有符号类型，从而确保该方法正确地处理溢出。如果原始值是无符号类型，而转换回整数的结果是一个带有符号位的值，则将引发异常。

' Create a negative hexadecimal value out of range of the Long type.
Dim sourceNumber As ULong = ULong.MaxValue
Dim isSigned As Boolean = Math.Sign(sourceNumber.MinValue) = -1
Dim value As String = sourceNumber.ToString("X")
Dim targetNumber As Long
Try
   targetNumber = Convert.ToInt64(value, 16)
   If Not isSigned And ((targetNumber And &H8000000000) <> 0) Then
      Throw New OverflowException()
   Else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber)
   End If
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to a long integer.", value)
End Try
' Displays the following to the console:
'    Unable to convert '0xFFFFFFFFFFFFFFFF' to a long integer.

// Create a negative hexadecimal value out of range of the Byte type.
ulong sourceNumber = ulong.MaxValue;
bool isSigned = Math.Sign(Convert.ToDouble(sourceNumber.GetType().GetField("MinValue").GetValue(null))) == -1;
string value = sourceNumber.ToString("X");
long targetNumber;
try
{
   targetNumber = Convert.ToInt64(value, 16);
   if (! isSigned && ((targetNumber & 0x80000000) != 0))
      throw new OverflowException();
   else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to a long integer.", value);
}
// Displays the following to the console:
//    Unable to convert '0xFFFFFFFFFFFFFFFF' to a long integer.

下面的示例尝试将字符串数组中的每个元素解释为十六进制字符串，并将其转换为长型整数。

Module Example
   Public Sub Main()
      Dim hexStrings() As String = { "8000000000000000", "0FFFFFFFFFFFFFFF", _
                                     "f0000000000001000", "00A30", "D", "-13", "GAD" }
      For Each hexString As String In hexStrings
         Try
            Dim number As Long = Convert.ToInt64(hexString, 16)
            Console.WriteLine("Converted '{0}' to {1:N0}.", hexString, number)
         Catch e As FormatException
            Console.WriteLine("'{0}' is not in the correct format for a hexadecimal number.", _
                              hexString)
         Catch e As OverflowException
            Console.WriteLine("'{0}' is outside the range of an Int64.", hexString)
         Catch e As ArgumentException
            Console.WriteLine("'{0}' is invalid in base 16.", hexString)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '8000000000000000' to -9,223,372,036,854,775,808.
'       Converted '0FFFFFFFFFFFFFFF' to 1,152,921,504,606,846,975.
'       'f0000000000001000' is outside the range of an Int64.
'       Converted '00A30' to 2,608.
'       Converted 'D' to 13.
'       '-13' is invalid in base 16.
'       'GAD' is not in the correct format for a hexadecimal number.

using System;

public class Example
{
   public static void Main()
   {
      string[] hexStrings = { "8000000000000000", "0FFFFFFFFFFFFFFF",
                              "f0000000000001000", "00A30", "D", "-13", "GAD" };
      foreach (string hexString in hexStrings)
      {
         try {
            long number = Convert.ToInt64(hexString, 16);
            Console.WriteLine("Converted '{0}' to {1:N0}.", hexString, number);
         }
         catch (FormatException) {
            Console.WriteLine("'{0}' is not in the correct format for a hexadecimal number.",
                              hexString);
         }
         catch (OverflowException) {
            Console.WriteLine("'{0}' is outside the range of an Int64.", hexString);
         }
         catch (ArgumentException) {
            Console.WriteLine("'{0}' is invalid in base 16.", hexString);
         }
      }
   }
}
// The example displays the following output:
//       Converted '8000000000000000' to -9,223,372,036,854,775,808.
//       Converted '0FFFFFFFFFFFFFFF' to 1,152,921,504,606,846,975.
//       'f0000000000001000' is outside the range of an Int64.
//       Converted '00A30' to 2,608.
//       Converted 'D' to 13.
//       '-13' is invalid in base 16.
//       'GAD' is not in the correct format for a hexadecimal number.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToInt64 重载
System 命名空间


Convert ..::.ToSByte 方法

Convert
.
.
::
.
ToSByte 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 8 位带符号整数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToSByte 方法 (Boolean)

Convert
.
.
::
.
ToSByte 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Boolean _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    bool value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    bool value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:bool -> sbyte

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System SByte
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例将布尔值 true 和 false 转换为带符号的字节值。

Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True

Console.WriteLine("{0} converts to {1}.", falseFlag, _
                  Convert.ToSByte(falseFlag))
Console.WriteLine("{0} converts to {1}.", trueFlag, _
                  Convert.ToSByte(trueFlag))
' The example displays the following output:
'       False converts to 0.
'       True converts to 1.

bool falseFlag = false;
bool trueFlag = true;

Console.WriteLine("{0} converts to {1}.", falseFlag,
                  Convert.ToSByte(falseFlag));
Console.WriteLine("{0} converts to {1}.", trueFlag,
                  Convert.ToSByte(trueFlag));
// The example displays the following output:
//       false converts to 0.
//       true converts to 1.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (Byte)

Convert
.
.
::
.
ToSByte 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Byte _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    byte value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    unsigned char value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:byte -> sbyte

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue。

下面的示例将字节数组中的每个元素转换为带符号字节。

Dim numbers() As Byte = { Byte.MinValue, 10, 100, Byte.MaxValue }
Dim result As SByte
For Each number As Byte In numbers
   Try
      result = Convert.ToSByte(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the Byte value 0 to the SByte value 0.
'    Converted the Byte value 10 to the SByte value 10.
'    Converted the Byte value 100 to the SByte value 100.
'    The Byte value 255 is outside the range of the SByte type.

byte[] numbers = { Byte.MinValue, 10, 100, Byte.MaxValue };
sbyte result;

foreach (byte number in numbers)
{
   try {
      result = Convert.ToSByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the Byte value 0 to the SByte value 0.
//    Converted the Byte value 10 to the SByte value 10.
//    Converted the Byte value 100 to the SByte value 100.
//    The Byte value 255 is outside the range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (Char)

Convert
.
.
::
.
ToSByte 方法 (Char)
Convert 类

将指定的 Unicode 字符的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Char _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    char value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    wchar_t value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:char -> sbyte

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue。

下面的示例将 Char 值的数组中的每个元素转换为带符号字节。

Dim chars() As Char = { "a"c, "z"c, ChrW(7), ChrW(200), ChrW(1023) }
For Each ch As Char in chars
   Try
      Dim result As SByte = Convert.ToSByte(ch)
      Console.WriteLine("{0} is converted to {1}.", ch, result)
   Catch e As OverflowException
      Console.WriteLine("Unable to convert u+{0} to a byte.", _
                        AscW(ch).ToString("X4"))
   End Try
Next
' The example displays the following output:
'    a is converted to 97.
'    z is converted to 122.
'     is converted to 7.
'    Unable to convert u+00C8 to a byte.
'    Unable to convert u+03FF to a byte.

char[] chars = { 'a', 'z', '\u0007', '\u0200', '\u1023' };
foreach (char ch in chars)
{
   try {
      sbyte result = Convert.ToSByte(ch);
      Console.WriteLine("{0} is converted to {1}.", ch, result);
   }
   catch (OverflowException) {
      Console.WriteLine("Unable to convert u+{0} to a byte.",
                        Convert.ToInt16(ch).ToString("X4"));
   }
}
// The example displays the following output:
//    a is converted to 97.
//    z is converted to 122.
//     is converted to 7.
//    Unable to convert u+00C8 to a byte.
//    Unable to convert u+03FF to a byte.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (DateTime)

Convert
.
.
::
.
ToSByte 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As DateTime _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    DateTime value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    DateTime value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:DateTime -> sbyte

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System SByte
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (Decimal)

Convert
.
.
::
.
ToSByte 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Decimal _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    decimal value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    Decimal value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:decimal -> sbyte

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System SByte
value，舍入为最接近的 8 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 8 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue 或小于 SByte..::.MinValue。

下面的示例将 Decimal 值的数组中的每个元素转换为带符号字节。

Dim numbers() As Decimal = { Decimal.MinValue, -129.5d, -12.7d, 0d, 16d, _
                             103.6d, 255.0d, Decimal.MaxValue }
Dim result As SByte

For Each number As Decimal In numbers
   Try
      result = Convert.ToSByte(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Decimal value -79228162514264337593543950335 is outside the range of the SByte type.
'    The Decimal value -129.5 is outside the range of the SByte type.
'    Converted the Decimal value -12.7 to the SByte value -13.
'    Converted the Decimal value 0 to the SByte value 0.
'    Converted the Decimal value 16 to the SByte value 16.
'    Converted the Decimal value 103.6 to the SByte value 104.
'    The Decimal value 255 is outside the range of the SByte type.
'    The Decimal value 79228162514264337593543950335 is outside the range of the SByte type.

decimal[] numbers = { Decimal.MinValue, -129.5m, -12.7m, 0m, 16m,
                      103.6m, 255.0m, Decimal.MaxValue };
sbyte result;

foreach (decimal number in numbers)
{
   try {
      result = Convert.ToSByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Decimal value -79228162514264337593543950335 is outside the range of the SByte type.
//    The Decimal value -129.5 is outside the range of the SByte type.
//    Converted the Decimal value -12.7 to the SByte value -13.
//    Converted the Decimal value 0 to the SByte value 0.
//    Converted the Decimal value 16 to the SByte value 16.
//    Converted the Decimal value 103.6 to the SByte value 104.
//    The Decimal value 255 is outside the range of the SByte type.
//    The Decimal value 79228162514264337593543950335 is outside the range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间
Math Round


Convert ..::.ToSByte 方法 (Double)

Convert
.
.
::
.
ToSByte 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Double _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    double value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    double value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:float -> sbyte

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System SByte
value，舍入为最接近的 8 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 8 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue 或小于 SByte..::.MinValue。

下面的示例将 Double 值的数组中的每个元素转换为带符号字节。

Dim numbers() As Double = { Double.MinValue, -129.5, -12.7, 0, 16, _
                            103.6, 255.0, 1.63509e17, Double.MaxValue}
Dim result As SByte

For Each number As Double In numbers
   Try
      result = Convert.ToSByte(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Double value -1.79769313486232E+308 is outside the range of the SByte type.
'    The Double value -129.5 is outside the range of the SByte type.
'    Converted the Double value -12.7 to the SByte value -13.
'    Converted the Double value 0 to the SByte value 0.
'    Converted the Double value 16 to the SByte value 16.
'    Converted the Double value 103.6 to the SByte value 104.
'    The Double value 255 is outside the range of the SByte type.
'    The Double value 1.63509E+17 is outside the range of the SByte type.
'    The Double value 1.79769313486232E+308 is outside the range of the SByte type.

double[] numbers = { Double.MinValue, -129.5, -12.7, 0, 16,
                     103.6, 255.0, 1.63509e17, Double.MaxValue};
sbyte result;

foreach (double number in numbers)
{
   try {
      result = Convert.ToSByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Double value -1.79769313486232E+308 is outside the range of the SByte type.
//    The Double value -129.5 is outside the range of the SByte type.
//    Converted the Double value -12.7 to the SByte value -13.
//    Converted the Double value 0 to the SByte value 0.
//    Converted the Double value 16 to the SByte value 16.
//    Converted the Double value 103.6 to the SByte value 104.
//    The Double value 255 is outside the range of the SByte type.
//    The Double value 1.63509E+17 is outside the range of the SByte type.
//    The Double value 1.79769313486232E+308 is outside the range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间
Double
Math Round


Convert ..::.ToSByte 方法 (Int16)

Convert
.
.
::
.
ToSByte 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Short _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    short value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    short value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:int16 -> sbyte

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue 或小于 SByte..::.MinValue。

下面的示例尝试将带符号 16 位整数数组中的每个元素转换为带符号的字节。

Dim numbers() As Short = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue }
Dim result As SByte
For Each number As Short In numbers
   Try
      result = Convert.ToSByte(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int16 value -32768 is outside the range of the SByte type.
'    Converted the Int16 value -1 to the SByte value -1.
'    Converted the Int16 value 0 to the SByte value 0.
'    Converted the Int16 value 121 to the SByte value 121.
'    The Int16 value 340 is outside the range of the SByte type.
'    The Int16 value 32767 is outside the range of the SByte type.

short[] numbers = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue };
sbyte result;
foreach (short number in numbers)
{
   try {
      result = Convert.ToSByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int16 value -32768 is outside the range of the SByte type.
//    Converted the Int16 value -1 to the SByte value -1.
//    Converted the Int16 value 0 to the SByte value 0.
//    Converted the Int16 value 121 to the SByte value 121.
//    The Int16 value 340 is outside the range of the SByte type.
//    The Int16 value 32767 is outside the range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (Int32)

Convert
.
.
::
.
ToSByte 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Integer _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    int value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    int value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:int -> sbyte

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue 或小于 SByte..::.MinValue。

下面的示例尝试将带符号整数数组中的每个元素转换为带符号字节。

Dim numbers() As Integer = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue }
Dim result As SByte
For Each number As Integer In numbers
   Try
      result = Convert.ToSByte(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int32 value -2147483648 is outside the range of the SByte type.
'    Converted the Int32 value -1 to the SByte value -1.
'    Converted the Int32 value 0 to the SByte value 0.
'    Converted the Int32 value 121 to the SByte value 121.
'    The Int32 value 340 is outside the range of the SByte type.
'    The Int32 value 2147483647 is outside the range of the SByte type.

int[] numbers = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue };
sbyte result;

foreach (int number in numbers)
{
   try {
      result = Convert.ToSByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int32 value -2147483648 is outside the range of the SByte type.
//    Converted the Int32 value -1 to the SByte value -1.
//    Converted the Int32 value 0 to the SByte value 0.
//    Converted the Int32 value 121 to the SByte value 121.
//    The Int32 value 340 is outside the range of the SByte type.
//    The Int32 value 2147483647 is outside the range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (Int64)

Convert
.
.
::
.
ToSByte 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Long _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    long value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    long long value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:int64 -> sbyte

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue 或小于 SByte..::.MinValue。

下面的示例尝试将长型整数数组中的每个元素转换为带符号字节。

Dim numbers() As Long = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue }
Dim result As SByte
For Each number As Long In numbers
   Try
      result = Convert.ToSByte(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int64 value -9223372036854775808 is outside the range of the SByte type.
'    Converted the Int64 value -1 to the SByte value -1.
'    Converted the Int64 value 0 to the SByte value 0.
'    Converted the Int64 value 121 to the SByte value 121.
'    The Int64 value 340 is outside the range of the SByte type.
'    The Int64 value 9223372036854775807 is outside the range of the SByte type.

long[] numbers = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue };
sbyte result;
foreach (long number in numbers)
{
   try {
      result = Convert.ToSByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int64 value -9223372036854775808 is outside the range of the SByte type.
//    Converted the Int64 value -1 to the SByte value -1.
//    Converted the Int64 value 0 to the SByte value 0.
//    Converted the Int64 value 121 to the SByte value 121.
//    The Int64 value 340 is outside the range of the SByte type.
//    The Int64 value 9223372036854775807 is outside the range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (Object)

Convert
.
.
::
.
ToSByte 方法 (Object)
Convert 类

将指定对象的值转换为 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Object _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    Object value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    Object^ value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:Object -> sbyte

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 SByte..::.MinValue 或大于 SByte..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToSByte 方法的结果。

下面的示例尝试将对象数组中的每个元素转换为带符号的字节。

Dim values() As Object = { True, -12, 163, 935, "x"c, "104", "103.0", "-1", _
                           "1.00e2", "One", 1.00e2}
Dim result As SByte
For Each value As Object In values
   Try
      result = Convert.ToSByte(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.", _
                        value.GetType().Name, value)

   End Try
Next
' The example displays the following output:
'    Converted the Boolean value True to the SByte value 1.
'    Converted the Int32 value -12 to the SByte value -12.
'    The Int32 value 163 is outside the range of the SByte type.
'    The Int32 value 935 is outside the range of the SByte type.
'    Converted the Char value x to the SByte value 120.
'    Converted the String value 104 to the SByte value 104.
'    The String value 103.0 is not in a recognizable format.
'    Converted the String value -1 to the SByte value -1.
'    The String value 1.00e2 is not in a recognizable format.
'    The String value One is not in a recognizable format.
'    Converted the Double value 100 to the SByte value 100.

object[] values = { true, -12, 163, 935, 'x', "104", "103.0", "-1",
                    "1.00e2", "One", 1.00e2};
sbyte result;

foreach (object value in values)
{
   try {
      result = Convert.ToSByte(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.",
                        value.GetType().Name, value);

   }
}
// The example displays the following output:
//    Converted the Boolean value true to the SByte value 1.
//    Converted the Int32 value -12 to the SByte value -12.
//    The Int32 value 163 is outside the range of the SByte type.
//    The Int32 value 935 is outside the range of the SByte type.
//    Converted the Char value x to the SByte value 120.
//    Converted the String value 104 to the SByte value 104.
//    The String value 103.0 is not in a recognizable format.
//    Converted the String value -1 to the SByte value -1.
//    The String value 1.00e2 is not in a recognizable format.
//    The String value One is not in a recognizable format.
//    Converted the Double value 100 to the SByte value 100.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (SByte)

Convert
.
.
::
.
ToSByte 方法 (SByte)
Convert 类

返回指定的 8 位带符号整数；不执行任何实际的转换。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As SByte _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:sbyte -> sbyte

参数

value
类型： System SByte
要返回的 8 位带符号整数。

返回值

类型： System SByte
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (Single)

Convert
.
.
::
.
ToSByte 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Single _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    float value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    float value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:float32 -> sbyte

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System SByte
value，舍入为最接近的 8 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 8 位带符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue 或小于 SByte..::.MinValue。

下面的示例将 Single 值的数组中的每个元素转换为带符号字节。

Dim values() As Object = { True, -12, 163, 935, "x"c, "104", "103.0", "-1", _
                           "1.00e2", "One", 1.00e2}
Dim result As SByte
For Each value As Object In values
   Try
      result = Convert.ToSByte(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.", _
                        value.GetType().Name, value)

   End Try
Next
' The example displays the following output:
'    Converted the Boolean value True to the SByte value 1.
'    Converted the Int32 value -12 to the SByte value -12.
'    The Int32 value 163 is outside the range of the SByte type.
'    The Int32 value 935 is outside the range of the SByte type.
'    Converted the Char value x to the SByte value 120.
'    Converted the String value 104 to the SByte value 104.
'    The String value 103.0 is not in a recognizable format.
'    Converted the String value -1 to the SByte value -1.
'    The String value 1.00e2 is not in a recognizable format.
'    The String value One is not in a recognizable format.
'    Converted the Double value 100 to the SByte value 100.

object[] values = { true, -12, 163, 935, 'x', "104", "103.0", "-1",
                    "1.00e2", "One", 1.00e2};
sbyte result;

foreach (object value in values)
{
   try {
      result = Convert.ToSByte(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("No conversion to a Byte exists for the {0} value {1}.",
                        value.GetType().Name, value);

   }
}
// The example displays the following output:
//    Converted the Boolean value true to the SByte value 1.
//    Converted the Int32 value -12 to the SByte value -12.
//    The Int32 value 163 is outside the range of the SByte type.
//    The Int32 value 935 is outside the range of the SByte type.
//    Converted the Char value x to the SByte value 120.
//    Converted the String value 104 to the SByte value 104.
//    The String value 103.0 is not in a recognizable format.
//    Converted the String value -1 to the SByte value -1.
//    The String value 1.00e2 is not in a recognizable format.
//    The String value One is not in a recognizable format.
//    Converted the Double value 100 to the SByte value 100.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间
Single
Math Round


Convert ..::.ToSByte 方法 (String)

Convert
.
.
::
.
ToSByte 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As String _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    string value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    String^ value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:string -> sbyte

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System SByte
与 value 中数字等效的 8 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 SByte..::.MinValue 或大于 SByte..::.MaxValue 的数字。

如果您希望在转换失败时不处理异常，则可以转而调用 SByte..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 SByte..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例使用默认的格式设置通过 ToSByte 方法转换 SByte 值的字符串表示形式。

' Example of the Convert.ToSByte( String ) and
' Convert.ToSByte( String, IFormatProvider ) methods.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module ToSByteProviderDemo

    Dim format As String = "{0,-20}{1,-20}{2}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    Sub ConvertToSByte( numericStr As String, _
        provider As IFormatProvider )

        Dim defaultValue    As Object
        Dim providerValue   As Object

        ' Convert numericStr to SByte without a format provider.
        Try
            defaultValue = Convert.ToSByte( numericStr )
        Catch ex As Exception
            defaultValue = GetExceptionType( ex )
        End Try

        ' Convert numericStr to SByte with a format provider.
        Try
            providerValue = Convert.ToSByte( numericStr, provider )
        Catch ex As Exception
            providerValue = GetExceptionType( ex )
        End Try

        Console.WriteLine( format, numericStr, _
            defaultValue, providerValue )
    End Sub

    Sub Main( )

        ' Create a NumberFormatInfo object and set several of its
        ' properties that apply to numbers.
        Dim provider  As NumberFormatInfo = new NumberFormatInfo( )

        ' These properties affect the conversion.
        provider.NegativeSign = "neg "
        provider.PositiveSign = "pos "

        ' These properties do not affect the conversion.
        ' The input string cannot have decimal and group separators.
        provider.NumberDecimalSeparator = "."
        provider.NumberNegativePattern = 0

        Console.WriteLine( "This example of" & vbCrLf & _
            "  Convert.ToSByte( String ) and " & vbCrLf & _
            "  Convert.ToSByte( String, IFormatProvider ) " & _
            vbCrLf & "generates the following output. It " & _
            "converts several strings to " & vbCrLf & "SByte " & _
            "values, using default formatting " & _
            "or a NumberFormatInfo object." & vbCrLf )
        Console.WriteLine( format, "String to convert", _
            "Default/exception", "Provider/exception" )
        Console.WriteLine( format, "-----------------", _
            "-----------------", "------------------" )

        ' Convert strings, with and without an IFormatProvider.
        ConvertToSByte( "123", provider )
        ConvertToSByte( "+123", provider )
        ConvertToSByte( "pos 123", provider )
        ConvertToSByte( "-123", provider )
        ConvertToSByte( "neg 123", provider )
        ConvertToSByte( "123.", provider )
        ConvertToSByte( "(123)", provider )
        ConvertToSByte( "128", provider )
        ConvertToSByte( "-129", provider )
    End Sub
End Module

' This example of
'   Convert.ToSByte( String ) and
'   Convert.ToSByte( String, IFormatProvider )
' generates the following output. It converts several strings to
' SByte values, using default formatting or a NumberFormatInfo object.
'
' String to convert   Default/exception   Provider/exception
' -----------------   -----------------   ------------------
' 123                 123                 123
' +123                123                 FormatException
' pos 123             FormatException     123
' -123                -123                FormatException
' neg 123             FormatException     -123
' 123.                FormatException     FormatException
' (123)               FormatException     FormatException
' 128                 OverflowException   OverflowException
' -129                OverflowException   FormatException

// Example of the Convert.ToSByte( string ) and
// Convert.ToSByte( string, IFormatProvider ) methods.
using System;
using System.Globalization;

class ToSByteProviderDemo
{
    static string format = "{0,-20}{1,-20}{2}";

     // Get the exception type name; remove the namespace prefix.
    static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    static void ConvertToSByte( string numericStr,
        IFormatProvider provider )
    {
        object defaultValue;
        object providerValue;

        // Convert numericStr to SByte without a format provider.
        try
        {
            defaultValue = Convert.ToSByte( numericStr );
        }
        catch( Exception ex )
        {
            defaultValue = GetExceptionType( ex );
        }

        // Convert numericStr to SByte with a format provider.
        try
        {
            providerValue = Convert.ToSByte( numericStr, provider );
        }
        catch( Exception ex )
        {
            providerValue = GetExceptionType( ex );
        }

        Console.WriteLine( format, numericStr,
            defaultValue, providerValue );
    }

    public static void Main( )
    {
        // Create a NumberFormatInfo object and set several of its
        // properties that apply to numbers.
        NumberFormatInfo provider = new NumberFormatInfo();

        // These properties affect the conversion.
        provider.NegativeSign = "neg ";
        provider.PositiveSign = "pos ";

        // These properties do not affect the conversion.
        // The input string cannot have decimal and group separators.
        provider.NumberDecimalSeparator = ".";
        provider.NumberNegativePattern = 0;

        Console.WriteLine("This example of\n" +
            "  Convert.ToSByte( string ) and \n" +
            "  Convert.ToSByte( string, IFormatProvider ) " +
            "\ngenerates the following output. It converts " +
            "several strings to \nSByte values, using " +
            "default formatting or a NumberFormatInfo object.\n" );
        Console.WriteLine( format, "String to convert",
            "Default/exception", "Provider/exception" );
        Console.WriteLine( format, "-----------------",
            "-----------------", "------------------" );

        // Convert strings, with and without an IFormatProvider.
        ConvertToSByte( "123", provider );
        ConvertToSByte( "+123", provider );
        ConvertToSByte( "pos 123", provider );
        ConvertToSByte( "-123", provider );
        ConvertToSByte( "neg 123", provider );
        ConvertToSByte( "123.", provider );
        ConvertToSByte( "(123)", provider );
        ConvertToSByte( "128", provider );
        ConvertToSByte( "-129", provider );
    }
}

/*
This example of
  Convert.ToSByte( string ) and
  Convert.ToSByte( string, IFormatProvider )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.

String to convert   Default/exception   Provider/exception
-----------------   -----------------   ------------------
123                 123                 123
+123                123                 FormatException
pos 123             FormatException     123
-123                -123                FormatException
neg 123             FormatException     -123
123.                FormatException     FormatException
(123)               FormatException     FormatException
128                 OverflowException   OverflowException
-129                OverflowException   FormatException
*/

// Example of the Convert::ToSByte( String* ) and
// Convert::ToSByte( String*, IFormatProvider* ) methods.
using namespace System;
using namespace System::Globalization;
const __wchar_t * protoFmt = L"{0,-20}{1,-20}{2}";

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

void ConvertToSByte( String^ numericStr, IFormatProvider^ provider )
{
   Object^ defaultValue;
   Object^ providerValue;

   // Convert numericStr to SByte without a format provider.
   try
   {
      defaultValue = Convert::ToSByte( numericStr );
   }
   catch ( Exception^ ex )
   {
      defaultValue = GetExceptionType( ex );
   }

   // Convert numericStr to SByte with a format provider.
   try
   {
      providerValue = Convert::ToSByte( numericStr, provider );
   }
   catch ( Exception^ ex )
   {
      providerValue = GetExceptionType( ex );
   }

   Console::WriteLine( gcnew String( protoFmt ), numericStr, defaultValue, providerValue );
}

int main()
{

   // Create a NumberFormatInfo object and set several of its
   // properties that apply to numbers.
   NumberFormatInfo^ provider = gcnew NumberFormatInfo;

   // These properties affect the conversion.
   provider->NegativeSign = "neg ";
   provider->PositiveSign = "pos ";

   // These properties do not affect the conversion.
   // The input string cannot have decimal and group separators.
   provider->NumberDecimalSeparator = ".";
   provider->NumberNegativePattern = 0;
   Console::WriteLine( "This example of\n"
   "  Convert::ToSByte( String* ) and \n"
   "  Convert::ToSByte( String*, IFormatProvider* ) "
   "\ngenerates the following output. It converts "
   "several strings to \nSByte values, using "
   "default formatting or a NumberFormatInfo object.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "String to convert", "Default/exception", "Provider/exception" );
   Console::WriteLine( gcnew String( protoFmt ), "-----------------", "-----------------", "------------------" );

   // Convert strings, with and without an IFormatProvider.
   ConvertToSByte( "123", provider );
   ConvertToSByte( "+123", provider );
   ConvertToSByte( "pos 123", provider );
   ConvertToSByte( "-123", provider );
   ConvertToSByte( "neg 123", provider );
   ConvertToSByte( "123.", provider );
   ConvertToSByte( "(123)", provider );
   ConvertToSByte( "128", provider );
   ConvertToSByte( "-129", provider );
}

/*
This example of
  Convert::ToSByte( String* ) and
  Convert::ToSByte( String*, IFormatProvider* )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.

String to convert   Default/exception   Provider/exception
-----------------   -----------------   ------------------
123                 123                 123
+123                123                 FormatException
pos 123             FormatException     123
-123                -123                FormatException
neg 123             FormatException     -123
123.                FormatException     FormatException
(123)               FormatException     FormatException
128                 OverflowException   OverflowException
-129                OverflowException   FormatException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间
SByte Parse


Convert ..::.ToSByte 方法 (UInt16)

Convert
.
.
::
.
ToSByte 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As UShort _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:uint16 -> sbyte

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue。

下面的示例尝试将无符号 16 位整数数组中的每个元素转换为带符号的字节。

Dim numbers() As UShort = { UInt16.MinValue, 121, 340, UInt16.MaxValue }
Dim result As SByte
For Each number As UShort In numbers
   Try
      result = Convert.ToSByte(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt16 value 0 to the SByte value 0.
'    Converted the UInt16 value 121 to the SByte value 121.
'    The UInt16 value 340 is outside the range of the SByte type.
'    The UInt16 value 65535 is outside the range of the SByte type.

ushort[] numbers = { UInt16.MinValue, 121, 340, UInt16.MaxValue };
sbyte result;

foreach (ushort number in numbers)
{
   try {
      result = Convert.ToSByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt16 value 0 to the SByte value 0.
//    Converted the UInt16 value 121 to the SByte value 121.
//    The UInt16 value 340 is outside the range of the SByte type.
//    The UInt16 value 65535 is outside the range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (UInt32)

Convert
.
.
::
.
ToSByte 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As UInteger _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:uint32 -> sbyte

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue 或小于 SByte..::.MinValue。

下面的示例尝试将整数数组中的每个元素转换为带符号的字节。

Dim numbers() As UInteger = { UInt32.MinValue, 121, 340, UInt32.MaxValue }
Dim result As SByte
For Each number As UInteger In numbers
   Try
      result = Convert.ToSByte(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt32 value 0 to the SByte value 0.
'    Converted the UInt32 value 121 to the SByte value 121.
'    The UInt32 value 340 is outside the range of the SByte type.
'    The UInt32 value 4294967295 is outside the range of the SByte type.

uint[] numbers = { UInt32.MinValue, 121, 340, UInt32.MaxValue };
sbyte result;

foreach (uint number in numbers)
{
   try {
      result = Convert.ToSByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt32 value 0 to the SByte value 0.
//    Converted the UInt32 value 121 to the SByte value 121.
//    The UInt32 value 340 is outside the range of the SByte type.
//    The UInt32 value 4294967295 is outside the range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (UInt64)

Convert
.
.
::
.
ToSByte 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As ULong _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:uint64 -> sbyte

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数。
异常 | 条件
OverflowException | value 大于 SByte..::.MaxValue 或小于 SByte..::.MinValue。

下面的示例尝试将长型整数数组中的每个元素转换为带符号字节。

Dim numbers() As ULong = { UInt64.MinValue, 121, 340, UInt64.MaxValue }
Dim result As SByte
For Each number As ULong In numbers
   Try
      result = Convert.ToSByte(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt64 value 0 to the SByte value 0.
'    Converted the UInt64 value 121 to the SByte value 121.
'    The UInt64 value 340 is outside the range of the SByte type.
'    The UInt64 value 18446744073709551615 is outside the range of the SByte type.

ulong[] numbers = { UInt64.MinValue, 121, 340, UInt64.MaxValue };
sbyte result;

foreach (ulong number in numbers)
{
   try {
      result = Convert.ToSByte(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the SByte type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt64 value 0 to the SByte value 0.
//    Converted the UInt64 value 121 to the SByte value 121.
//    The UInt64 value 340 is outside the range of the SByte type.
//    The UInt64 value 18446744073709551615 is outside the range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToSByte 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式信息，将指定对象的值转换为 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Object, _
    provider As IFormatProvider _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    Object value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    Object^ value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:Object *
        provider:IFormatProvider -> sbyte

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 SByte..::.MinValue 或大于 SByte..::.MaxValue 的数字。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个 ByteString 类以及一个字段，该类将带符号和无符号的字节存储为十六进制字符串，字段则指明字节的符号。ByteString 类实现 IConvertible 接口。它的 IConvertible..::.ToSByte 方法调用 Parse(String, IFormatProvider) 方法来执行转换。如果它失败，则引发 OverflowException。 下面的示例定义一个 ByteString 类以及一个字段，该类将带符号和无符号的字节存储为十六进制字符串，字段则指明字节的符号。ByteString 类实现 IConvertible 接口。它的 IConvertible..::.ToSByte 方法调用 Parse(String, IFormatProvider) 方法来执行转换。如果它失败，则引发 OverflowException。 下面的示例定义一个 ByteString 类以及一个字段，该类将带符号和无符号的字节存储为十六进制字符串，字段则指明字节的符号。ByteString 类实现 IConvertible 接口。它的 IConvertible..::.ToSByte 方法调用 Parse(String, IFormatProvider) 方法来执行转换。如果它失败，则引发 OverflowException。 下面的示例定义一个 ByteString 类以及一个字段，该类将带符号和无符号的字节存储为十六进制字符串，字段则指明字节的符号。ByteString 类实现 IConvertible 接口。它的 IConvertible..::.ToSByte 方法调用 Parse(String, IFormatProvider) 方法来执行转换。如果它失败，则引发 OverflowException。

Imports System.Globalization

Public Enum SignBit As Integer
   Positive = 1
   Zero = 0
   Negative = -1
End Enum

Public Structure ByteString : Implements IConvertible
   Private signBit As SignBit
   Private byteString As String

   Public Property Sign As SignBit
      Set
         signBit = value
      End Set
      Get
         Return signBit
      End Get
   End Property

   Public Property Value As String
      Set
         If value.Trim().Length > 2 Then
            Throw New ArgumentException("The string representation of a byte cannot have more than two characters.")
         Else
            byteString = value
         End If
      End Set
      Get
         Return byteString
      End Get
   End Property

   ' IConvertible implementations.
   Public Function GetTypeCode() As TypeCode _
                   Implements IConvertible.GetTypeCode
      Return TypeCode.Object
   End Function

   Public Function ToBoolean(provider As IFormatProvider) As Boolean _
                   Implements IConvertible.ToBoolean
      If signBit = SignBit.Zero Then
         Return False
      Else
         Return True
      End If
   End Function

   Public Function ToByte(provider As IFormatProvider) As Byte _
                   Implements IConvertible.ToByte
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToSByte(byteString, 16)))
      Else
         Return Byte.Parse(byteString, NumberStyles.HexNumber)
      End If
   End Function

   Public Function ToChar(provider As IFormatProvider) As Char _
                   Implements IConvertible.ToChar
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToSByte(byteString, 16)))
      Else
         Dim byteValue As Byte = Byte.Parse(Me.byteString, NumberStyles.HexNumber)
         Return Convert.ToChar(byteValue)
      End If
   End Function

   Public Function ToDateTime(provider As IFormatProvider) As Date _
                   Implements IConvertible.ToDateTime
      Throw New InvalidCastException("ByteString to DateTime conversion is not supported.")
   End Function

   Public Function ToDecimal(provider As IFormatProvider) As Decimal _
                   Implements IConvertible.ToDecimal
      If signBit = signBit.Negative Then
         Dim byteValue As SByte = SByte.Parse(byteString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(byteValue)
      Else
         Dim byteValue As Byte = Byte.Parse(byteString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(byteValue)
      End If
   End Function

   Public Function ToDouble(provider As IFormatProvider) As Double _
                   Implements IConvertible.ToDouble
      If signBit = signBit.Negative Then
         Return Convert.ToDouble(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToDouble(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt16(provider As IFormatProvider) As Int16 _
                   Implements IConvertible.ToInt16
      If signBit = signBit.Negative Then
         Return Convert.ToInt16(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToInt16(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt32(provider As IFormatProvider) As Int32 _
                   Implements IConvertible.ToInt32
      If signBit = signBit.Negative Then
         Return Convert.ToInt32(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToInt32(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt64(provider As IFormatProvider) As Int64 _
                   Implements IConvertible.ToInt64
      If signBit = signBit.Negative Then
         Return Convert.ToInt64(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToInt64(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToSByte(provider As IFormatProvider) As SByte _
                   Implements IConvertible.ToSByte
      Try
         Return SByte.Parse(byteString, NumberStyles.HexNumber)
      Catch e As OverflowException
         Throw New OverflowException(String.Format("{0} is outside the range of the SByte type.", _
                                                   Byte.Parse(byteString, NumberStyles.HexNumber)))
      End Try
   End Function

   Public Function ToSingle(provider As IFormatProvider) As Single _
                   Implements IConvertible.ToSingle
      If signBit = signBit.Negative Then
         Return Convert.ToSingle(SByte.Parse(byteString, NumberStyles.HexNumber))
      Else
         Return Convert.ToSingle(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Overloads Function ToString(provider As IFormatProvider) As String _
                   Implements IConvertible.ToString
      Return Me.byteString
   End Function

   Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object _
                   Implements IConvertible.ToType
      Select Case Type.GetTypeCode(conversionType)
         Case TypeCode.Boolean
            Return Me.ToBoolean(Nothing)
         Case TypeCode.Byte
            Return Me.ToByte(Nothing)
         Case TypeCode.Char
            Return Me.ToChar(Nothing)
         Case TypeCode.DateTime
            Return Me.ToDateTime(Nothing)
         Case TypeCode.Decimal
            Return Me.ToDecimal(Nothing)
         Case TypeCode.Double
            Return Me.ToDouble(Nothing)
         Case TypeCode.Int16
            Return Me.ToInt16(Nothing)
         Case TypeCode.Int32
            Return Me.ToInt32(Nothing)
         Case TypeCode.Int64
            Return Me.ToInt64(Nothing)
         Case TypeCode.Object
            If GetType(ByteString).Equals(conversionType) Then
               Return Me
            Else
               Throw New InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name))
            End If
         Case TypeCode.SByte
            Return Me.ToSByte(Nothing)
         Case TypeCode.Single
            Return Me.ToSingle(Nothing)
         Case TypeCode.String
            Return Me.ToString(Nothing)
         Case TypeCode.UInt16
            Return Me.ToUInt16(Nothing)
         Case TypeCode.UInt32
            Return Me.ToUInt32(Nothing)
         Case TypeCode.UInt64
            Return Me.ToUInt64(Nothing)
         Case Else
            Throw New InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name))

      End Select
   End Function

   Public Function ToUInt16(provider As IFormatProvider) As UInt16 _
                   Implements IConvertible.ToUInt16
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt16 type.", _
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt16(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToUInt32(provider As IFormatProvider) As UInt32 _
                   Implements IConvertible.ToUInt32
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt32 type.", _
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt32(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToUInt64(provider As IFormatProvider) As UInt64 _
                   Implements IConvertible.ToUInt64
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt64 type.", _
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt64(Byte.Parse(byteString, NumberStyles.HexNumber))
      End If
   End Function

End Structure

using System;
using System.Globalization;

public enum SignBit { Negative=-1, Zero=0, Positive=1 };

public struct ByteString : IConvertible
{
   private SignBit signBit;
   private string byteString;

   public SignBit Sign
   {
      set { signBit = value; }
      get { return signBit; }
   }

   public string Value
   {
      set {
         if (value.Trim().Length > 2)
            throw new ArgumentException("The string representation of a byte cannot have more than two characters.");
         else
            byteString = value;
      }
      get { return byteString; }
   }

   // IConvertible implementations.
   public TypeCode GetTypeCode() {
      return TypeCode.Object;
   }

   public bool ToBoolean(IFormatProvider provider)
   {
      if (signBit == SignBit.Zero)
         return false;
      else
         return true;
   }

   public byte ToByte(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToSByte(byteString, 16)));
      else
         return Byte.Parse(byteString, NumberStyles.HexNumber);
   }

   public char ToChar(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative) {
         throw new OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToSByte(byteString, 16)));
      }
      else {
         byte byteValue = Byte.Parse(this.byteString, NumberStyles.HexNumber);
         return Convert.ToChar(byteValue);
      }
   }

   public DateTime ToDateTime(IFormatProvider provider)
   {
      throw new InvalidCastException("ByteString to DateTime conversion is not supported.");
   }

   public decimal ToDecimal(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
      {
         sbyte byteValue = SByte.Parse(byteString, NumberStyles.HexNumber);
         return Convert.ToDecimal(byteValue);
      }
      else
      {
         byte byteValue = Byte.Parse(byteString, NumberStyles.HexNumber);
         return Convert.ToDecimal(byteValue);
      }
   }

   public double ToDouble(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToDouble(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToDouble(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public short ToInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToInt16(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToInt16(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public int ToInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToInt32(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToInt32(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public long ToInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToInt64(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToInt64(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public sbyte ToSByte(IFormatProvider provider)
   {
      try {
         return SByte.Parse(byteString, NumberStyles.HexNumber);
      }
      catch (OverflowException e) {
         throw new OverflowException(String.Format("{0} is outside the range of the SByte type.",
                                                   Byte.Parse(byteString, NumberStyles.HexNumber)), e);
      }
   }

   public float ToSingle(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToSingle(SByte.Parse(byteString, NumberStyles.HexNumber));
      else
         return Convert.ToSingle(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public string ToString(IFormatProvider provider)
   {
      return "0x" + this.byteString;
   }

   public object ToType(Type conversionType, IFormatProvider provider)
   {
      switch (Type.GetTypeCode(conversionType))
      {
         case TypeCode.Boolean:
            return this.ToBoolean(null);
         case TypeCode.Byte:
            return this.ToByte(null);
         case TypeCode.Char:
            return this.ToChar(null);
         case TypeCode.DateTime:
            return this.ToDateTime(null);
         case TypeCode.Decimal:
            return this.ToDecimal(null);
         case TypeCode.Double:
            return this.ToDouble(null);
         case TypeCode.Int16:
            return this.ToInt16(null);
         case TypeCode.Int32:
            return this.ToInt32(null);
         case TypeCode.Int64:
            return this.ToInt64(null);
         case TypeCode.Object:
            if (typeof(ByteString).Equals(conversionType))
               return this;
            else
               throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name));
         case TypeCode.SByte:
            return this.ToSByte(null);
         case TypeCode.Single:
            return this.ToSingle(null);
         case TypeCode.String:
            return this.ToString(null);
         case TypeCode.UInt16:
            return this.ToUInt16(null);
         case TypeCode.UInt32:
            return this.ToUInt32(null);
         case TypeCode.UInt64:
            return this.ToUInt64(null);
         default:
            throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
      }
   }

   public UInt16 ToUInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt16 type.",
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt16(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public UInt32 ToUInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt32 type.",
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt32(Byte.Parse(byteString, NumberStyles.HexNumber));
   }

   public UInt64 ToUInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt64 type.",
                                                   SByte.Parse(byteString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt64(Byte.Parse(byteString, NumberStyles.HexNumber));
   }
}

下面的示例演示 Convert..::.ToSByte(Object, IFormatProvider) 方法如何调用 ByteString 类的 IConvertible..::.ToSByte 实现。

Module modMain
   Public Sub Main()
      Dim positiveByte As SByte = 120
      Dim negativeByte As SByte = -101

      Dim positiveString As New ByteString()
      positiveString.Sign = CType(Math.Sign(positiveByte), SignBit)
      positiveString.Value = positiveByte.ToString("X2")

      Dim negativeString As New ByteString()
      negativeString.Sign = CType(Math.Sign(negativeByte), SignBit)
      negativeString.Value = negativeByte.ToString("X2")

      Try
         Console.WriteLine("'{0}' converts to {1}.", positiveString.Value, Convert.ToSByte(positiveString))
      Catch e As OverflowException
         Console.WriteLine("0x{0} is outside the range of the Byte type.", positiveString.Value)
      End Try

      Try
         Console.WriteLine("'{0}' converts to {1}.", negativeString.Value, Convert.ToSByte(negativeString))
      Catch e As OverflowException
         Console.WriteLine("0x{0} is outside the range of the Byte type.", negativeString.Value)
      End Try
   End Sub
End Module
' The example dosplays the following output:
'       '78' converts to 120.
'       '9B' converts to -101.

public class Class1
{
   public static void Main()
   {
      sbyte positiveByte = 120;
      sbyte negativeByte = -101;

      ByteString positiveString = new ByteString();
      positiveString.Sign = (SignBit) Math.Sign(positiveByte);
      positiveString.Value = positiveByte.ToString("X2");

      ByteString negativeString = new ByteString();
      negativeString.Sign = (SignBit) Math.Sign(negativeByte);
      negativeString.Value = negativeByte.ToString("X2");

      try {
         Console.WriteLine("'{0}' converts to {1}.", positiveString.Value, Convert.ToSByte(positiveString));
      }
      catch (OverflowException) {
         Console.WriteLine("0x{0} is outside the range of the Byte type.", positiveString.Value);
      }

      try {
         Console.WriteLine("'{0}' converts to {1}.", negativeString.Value, Convert.ToSByte(negativeString));
      }
      catch (OverflowException) {
         Console.WriteLine("0x{0} is outside the range of the Byte type.", negativeString.Value);
      }
   }
}
// The example displays the following output:
//       '78' converts to 120.
//       '9B' converts to -101.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSByte 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToSByte 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As String, _
    provider As IFormatProvider _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    string value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    String^ value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:string *
        provider:IFormatProvider -> sbyte

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System SByte
与 value 等效的 8 位带符号整数。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 SByte..::.MinValue 或大于 SByte..::.MaxValue 的数字。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 SByte..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 SByte..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的代码示例使用 ToSByte 方法，通过一个 IFormatProvider 对象转换 SByte 值的字符串表示形式。

' Example of the Convert.ToSByte( String ) and
' Convert.ToSByte( String, IFormatProvider ) methods.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module ToSByteProviderDemo

    Dim format As String = "{0,-20}{1,-20}{2}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    Sub ConvertToSByte( numericStr As String, _
        provider As IFormatProvider )

        Dim defaultValue    As Object
        Dim providerValue   As Object

        ' Convert numericStr to SByte without a format provider.
        Try
            defaultValue = Convert.ToSByte( numericStr )
        Catch ex As Exception
            defaultValue = GetExceptionType( ex )
        End Try

        ' Convert numericStr to SByte with a format provider.
        Try
            providerValue = Convert.ToSByte( numericStr, provider )
        Catch ex As Exception
            providerValue = GetExceptionType( ex )
        End Try

        Console.WriteLine( format, numericStr, _
            defaultValue, providerValue )
    End Sub

    Sub Main( )

        ' Create a NumberFormatInfo object and set several of its
        ' properties that apply to numbers.
        Dim provider  As NumberFormatInfo = new NumberFormatInfo( )

        ' These properties affect the conversion.
        provider.NegativeSign = "neg "
        provider.PositiveSign = "pos "

        ' These properties do not affect the conversion.
        ' The input string cannot have decimal and group separators.
        provider.NumberDecimalSeparator = "."
        provider.NumberNegativePattern = 0

        Console.WriteLine( "This example of" & vbCrLf & _
            "  Convert.ToSByte( String ) and " & vbCrLf & _
            "  Convert.ToSByte( String, IFormatProvider ) " & _
            vbCrLf & "generates the following output. It " & _
            "converts several strings to " & vbCrLf & "SByte " & _
            "values, using default formatting " & _
            "or a NumberFormatInfo object." & vbCrLf )
        Console.WriteLine( format, "String to convert", _
            "Default/exception", "Provider/exception" )
        Console.WriteLine( format, "-----------------", _
            "-----------------", "------------------" )

        ' Convert strings, with and without an IFormatProvider.
        ConvertToSByte( "123", provider )
        ConvertToSByte( "+123", provider )
        ConvertToSByte( "pos 123", provider )
        ConvertToSByte( "-123", provider )
        ConvertToSByte( "neg 123", provider )
        ConvertToSByte( "123.", provider )
        ConvertToSByte( "(123)", provider )
        ConvertToSByte( "128", provider )
        ConvertToSByte( "-129", provider )
    End Sub
End Module

' This example of
'   Convert.ToSByte( String ) and
'   Convert.ToSByte( String, IFormatProvider )
' generates the following output. It converts several strings to
' SByte values, using default formatting or a NumberFormatInfo object.
'
' String to convert   Default/exception   Provider/exception
' -----------------   -----------------   ------------------
' 123                 123                 123
' +123                123                 FormatException
' pos 123             FormatException     123
' -123                -123                FormatException
' neg 123             FormatException     -123
' 123.                FormatException     FormatException
' (123)               FormatException     FormatException
' 128                 OverflowException   OverflowException
' -129                OverflowException   FormatException

// Example of the Convert.ToSByte( string ) and
// Convert.ToSByte( string, IFormatProvider ) methods.
using System;
using System.Globalization;

class ToSByteProviderDemo
{
    static string format = "{0,-20}{1,-20}{2}";

     // Get the exception type name; remove the namespace prefix.
    static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    static void ConvertToSByte( string numericStr,
        IFormatProvider provider )
    {
        object defaultValue;
        object providerValue;

        // Convert numericStr to SByte without a format provider.
        try
        {
            defaultValue = Convert.ToSByte( numericStr );
        }
        catch( Exception ex )
        {
            defaultValue = GetExceptionType( ex );
        }

        // Convert numericStr to SByte with a format provider.
        try
        {
            providerValue = Convert.ToSByte( numericStr, provider );
        }
        catch( Exception ex )
        {
            providerValue = GetExceptionType( ex );
        }

        Console.WriteLine( format, numericStr,
            defaultValue, providerValue );
    }

    public static void Main( )
    {
        // Create a NumberFormatInfo object and set several of its
        // properties that apply to numbers.
        NumberFormatInfo provider = new NumberFormatInfo();

        // These properties affect the conversion.
        provider.NegativeSign = "neg ";
        provider.PositiveSign = "pos ";

        // These properties do not affect the conversion.
        // The input string cannot have decimal and group separators.
        provider.NumberDecimalSeparator = ".";
        provider.NumberNegativePattern = 0;

        Console.WriteLine("This example of\n" +
            "  Convert.ToSByte( string ) and \n" +
            "  Convert.ToSByte( string, IFormatProvider ) " +
            "\ngenerates the following output. It converts " +
            "several strings to \nSByte values, using " +
            "default formatting or a NumberFormatInfo object.\n" );
        Console.WriteLine( format, "String to convert",
            "Default/exception", "Provider/exception" );
        Console.WriteLine( format, "-----------------",
            "-----------------", "------------------" );

        // Convert strings, with and without an IFormatProvider.
        ConvertToSByte( "123", provider );
        ConvertToSByte( "+123", provider );
        ConvertToSByte( "pos 123", provider );
        ConvertToSByte( "-123", provider );
        ConvertToSByte( "neg 123", provider );
        ConvertToSByte( "123.", provider );
        ConvertToSByte( "(123)", provider );
        ConvertToSByte( "128", provider );
        ConvertToSByte( "-129", provider );
    }
}

/*
This example of
  Convert.ToSByte( string ) and
  Convert.ToSByte( string, IFormatProvider )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.

String to convert   Default/exception   Provider/exception
-----------------   -----------------   ------------------
123                 123                 123
+123                123                 FormatException
pos 123             FormatException     123
-123                -123                FormatException
neg 123             FormatException     -123
123.                FormatException     FormatException
(123)               FormatException     FormatException
128                 OverflowException   OverflowException
-129                OverflowException   FormatException
*/

// Example of the Convert::ToSByte( String* ) and
// Convert::ToSByte( String*, IFormatProvider* ) methods.
using namespace System;
using namespace System::Globalization;
const __wchar_t * protoFmt = L"{0,-20}{1,-20}{2}";

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

void ConvertToSByte( String^ numericStr, IFormatProvider^ provider )
{
   Object^ defaultValue;
   Object^ providerValue;

   // Convert numericStr to SByte without a format provider.
   try
   {
      defaultValue = Convert::ToSByte( numericStr );
   }
   catch ( Exception^ ex )
   {
      defaultValue = GetExceptionType( ex );
   }

   // Convert numericStr to SByte with a format provider.
   try
   {
      providerValue = Convert::ToSByte( numericStr, provider );
   }
   catch ( Exception^ ex )
   {
      providerValue = GetExceptionType( ex );
   }

   Console::WriteLine( gcnew String( protoFmt ), numericStr, defaultValue, providerValue );
}

int main()
{

   // Create a NumberFormatInfo object and set several of its
   // properties that apply to numbers.
   NumberFormatInfo^ provider = gcnew NumberFormatInfo;

   // These properties affect the conversion.
   provider->NegativeSign = "neg ";
   provider->PositiveSign = "pos ";

   // These properties do not affect the conversion.
   // The input string cannot have decimal and group separators.
   provider->NumberDecimalSeparator = ".";
   provider->NumberNegativePattern = 0;
   Console::WriteLine( "This example of\n"
   "  Convert::ToSByte( String* ) and \n"
   "  Convert::ToSByte( String*, IFormatProvider* ) "
   "\ngenerates the following output. It converts "
   "several strings to \nSByte values, using "
   "default formatting or a NumberFormatInfo object.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "String to convert", "Default/exception", "Provider/exception" );
   Console::WriteLine( gcnew String( protoFmt ), "-----------------", "-----------------", "------------------" );

   // Convert strings, with and without an IFormatProvider.
   ConvertToSByte( "123", provider );
   ConvertToSByte( "+123", provider );
   ConvertToSByte( "pos 123", provider );
   ConvertToSByte( "-123", provider );
   ConvertToSByte( "neg 123", provider );
   ConvertToSByte( "123.", provider );
   ConvertToSByte( "(123)", provider );
   ConvertToSByte( "128", provider );
   ConvertToSByte( "-129", provider );
}

/*
This example of
  Convert::ToSByte( String* ) and
  Convert::ToSByte( String*, IFormatProvider* )
generates the following output. It converts several strings to
SByte values, using default formatting or a NumberFormatInfo object.

String to convert   Default/exception   Provider/exception
-----------------   -----------------   ------------------
123                 123                 123
+123                123                 FormatException
pos 123             FormatException     123
-123                -123                FormatException
neg 123             FormatException     -123
123.                FormatException     FormatException
(123)               FormatException     FormatException
128                 OverflowException   OverflowException
-129                OverflowException   FormatException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间
SByte Parse


Convert ..::.ToSByte 方法 (String, Int32)

Convert
.
.
::
.
ToSByte 方法 (String, Int32)
Convert 类

将指定基的数字的字符串表示形式转换为等效的 8 位带符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As String, _
    fromBase As Integer _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    string value,
    int fromBase
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    String^ value,
    int fromBase
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:string *
        fromBase:int -> sbyte

参数

value
类型： System String
包含要转换的数字的字符串。
fromBase
类型： System Int32
value 中数字的基数，它必须是 2、8、10 或 16。

返回值

类型： System SByte
与 value 中数字等效的 8 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
ArgumentException | fromBase 不是 2、8、10 或 16。 - 或 - value，它表示一个非 10 为基的有符号数，前面带一个负号。
FormatException | value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。 value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。
OverflowException | value，它表示一个非 10 为基的有符号数，前面带一个负号。 - 或 - value 表示小于 SByte..::.MinValue 或大于 SByte..::.MaxValue 的数字。

如果 fromBase 为 16，则可以在 value 参数指定的数字前面加上“0x”或“0X”。

由于不是以 10 为基数的数值表示形式不支持负号，因此 ToSByte(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将字节的最高序位（位 7）解释为其符号位。因此，可以编写代码以将超出 SByte 数据类型的范围的不是以 10 为基数的数字转换为 SByte 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToSByte(String, Int32) 方法。该方法将显示消息“0xff converts to -1”（0xff 转换为 -1），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToSByte(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将字节的最高序位（位 7）解释为其符号位。因此，可以编写代码以将超出 SByte 数据类型的范围的不是以 10 为基数的数字转换为 SByte 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToSByte(String, Int32) 方法。该方法将显示消息“0xff converts to -1”（0xff 转换为 -1），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToSByte(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将字节的最高序位（位 7）解释为其符号位。因此，可以编写代码以将超出 SByte 数据类型的范围的不是以 10 为基数的数字转换为 SByte 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToSByte(String, Int32) 方法。该方法将显示消息“0xff converts to -1”（0xff 转换为 -1），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToSByte(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将字节的最高序位（位 7）解释为其符号位。因此，可以编写代码以将超出 SByte 数据类型的范围的不是以 10 为基数的数字转换为 SByte 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToSByte(String, Int32) 方法。该方法将显示消息“0xff converts to -1”（0xff 转换为 -1），而不是引发异常。 由于不是以 10 为基数的数值表示形式不支持负号，因此 ToSByte(String, Int32) 方法假定负数使用的是 2 的补数表示形式。换句话说，此方法总是将字节的最高序位（位 7）解释为其符号位。因此，可以编写代码以将超出 SByte 数据类型的范围的不是以 10 为基数的数字转换为 SByte 值，从而不让该方法引发异常。下面的示例将 MaxValue 转换为对应的十六进制字符串表示形式，然后调用 ToSByte(String, Int32) 方法。该方法将显示消息“0xff converts to -1”（0xff 转换为 -1），而不是引发异常。

' Create a hexadecimal value out of range of the SByte type.
Dim value As String = Convert.ToString(Byte.MaxValue, 16)
' Convert it back to a number.
Try
   Dim number As SByte = Convert.ToSByte(value, 16)
   Console.WriteLine("0x{0} converts to {1}.", value, number)
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value)
End Try

// Create a hexadecimal value out of range of the SByte type.
string value = Convert.ToString(byte.MaxValue, 16);
// Convert it back to a number.
try
{
   sbyte number = Convert.ToSByte(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value);
}

在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将一个值转换为对应的十六进制字符串表示形式之前，先确定该值是表示一个无符号类型还是一个有符号类型，从而确保该方法正确地处理溢出。如果原始值是无符号类型，而转换回有符号字节的结果是一个带有符号位的值，则将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将一个值转换为对应的十六进制字符串表示形式之前，先确定该值是表示一个无符号类型还是一个有符号类型，从而确保该方法正确地处理溢出。如果原始值是无符号类型，而转换回有符号字节的结果是一个带有符号位的值，则将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法是否使用了适当的数值表示形式来解释特定值。正如下面的示例所演示的那样，可以通过在将一个值转换为对应的十六进制字符串表示形式之前，先确定该值是表示一个无符号类型还是一个有符号类型，从而确保该方法正确地处理溢出。如果原始值是无符号类型，而转换回有符号字节的结果是一个带有符号位的值，则将引发异常。

' Create a negative hexadecimal value out of range of the Long type.
Dim sourceNumber As Byte = Byte.MaxValue
Dim isSigned As Boolean = Math.Sign(sourceNumber.MinValue) = -1
Dim value As String = Convert.ToString(sourceNumber, 16)
Dim targetNumber As SByte
Try
   targetNumber = Convert.ToSByte(value, 16)
   If Not isSigned And ((targetNumber And &H80) <> 0) Then
      Throw New OverflowException()
   Else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber)
   End If
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value)
End Try
' Displays the following to the console:
'    Unable to convert '0xff' to a signed byte.

// Create a hexadecimal value out of range of the SByte type.
byte sourceNumber = byte.MaxValue;
bool isSigned = Math.Sign(Convert.ToDouble(sourceNumber.GetType().GetField("MinValue").GetValue(null))) == -1;
string value = Convert.ToString(sourceNumber, 16);
sbyte targetNumber;
try
{
   targetNumber = Convert.ToSByte(value, 16);
   if (! isSigned && ((targetNumber & 0x80) != 0))
      throw new OverflowException();
   else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to a signed byte.", value);
}
// Displays the following to the console:
//    Unable to convert '0xff' to a signed byte.

下面的示例尝试将字符串数组的元素解释为用二进制、八进制和十六进制表示的数值，以便将它们转换为无符号的字节。

Module Example
   Public Sub Main()
      Dim bases() As Integer = { 2, 8, 16}
      Dim values() As String = { "FF", "81", "03", "11", "8F", "01", "1C", _
                                 "111", "123", "18A" }

      ' Convert to each supported base.
      For Each base As Integer In bases
         Console.WriteLine("Converting strings in base {0}:", base)
         For Each value As String In values
            Console.Write("   '{0,-5}  -->  ", value + "'")
            Try
               Console.WriteLine(Convert.ToSByte(value, base))
            Catch e As FormatException
               Console.WriteLine("Bad Format")
            Catch e As OverflowException
               Console.WriteLine("Out of Range")
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       Converting strings in base 2:
'          'FF'    -->  Bad Format
'          '81'    -->  Bad Format
'          '03'    -->  Bad Format
'          '11'    -->  3
'          '8F'    -->  Bad Format
'          '01'    -->  1
'          '1C'    -->  Bad Format
'          '111'   -->  7
'          '123'   -->  Bad Format
'          '18A'   -->  Bad Format
'
'       Converting strings in base 8:
'          'FF'    -->  Bad Format
'          '81'    -->  Bad Format
'          '03'    -->  3
'          '11'    -->  9
'          '8F'    -->  Bad Format
'          '01'    -->  1
'          '1C'    -->  Bad Format
'          '111'   -->  73
'          '123'   -->  83
'          '18A'   -->  Bad Format
'
'       Converting strings in base 16:
'          'FF'    -->  -1
'          '81'    -->  -127
'          '03'    -->  3
'          '11'    -->  17
'          '8F'    -->  -113
'          '01'    -->  1
'          '1C'    -->  28
'          '111'   -->  Out of Range
'          '123'   -->  Out of Range
'          '18A'   -->  Out of Range

using System;

public class Example
{
   public static void Main()
   {
      int[] baseValues = { 2, 8, 16};
      string[] values = { "FF", "81", "03", "11", "8F", "01", "1C", "111",
                          "123", "18A" };

      // Convert to each supported base.
      foreach (int baseValue in baseValues)
      {
         Console.WriteLine("Converting strings in base {0}:", baseValue);
         foreach (string value in values)
         {
            Console.Write("   '{0,-5}  -->  ", value + "'");
            try {
               Console.WriteLine(Convert.ToSByte(value, baseValue));
            }
            catch (FormatException) {
               Console.WriteLine("Bad Format");
            }
            catch (OverflowException) {
               Console.WriteLine("Out of Range");
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       Converting strings in base 2:
//          'FF'    -->  Bad Format
//          '81'    -->  Bad Format
//          '03'    -->  Bad Format
//          '11'    -->  3
//          '8F'    -->  Bad Format
//          '01'    -->  1
//          '1C'    -->  Bad Format
//          '111'   -->  7
//          '123'   -->  Bad Format
//          '18A'   -->  Bad Format
//
//       Converting strings in base 8:
//          'FF'    -->  Bad Format
//          '81'    -->  Bad Format
//          '03'    -->  3
//          '11'    -->  9
//          '8F'    -->  Bad Format
//          '01'    -->  1
//          '1C'    -->  Bad Format
//          '111'   -->  73
//          '123'   -->  83
//          '18A'   -->  Bad Format
//
//       Converting strings in base 16:
//          'FF'    -->  -1
//          '81'    -->  -127
//          '03'    -->  3
//          '11'    -->  17
//          '8F'    -->  -113
//          '01'    -->  1
//          '1C'    -->  28
//          '111'   -->  Out of Range
//          '123'   -->  Out of Range
//          '18A'   -->  Out of Range

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSByte 重载
System 命名空间


Convert ..::.ToSingle 方法

Convert
.
.
::
.
ToSingle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为单精度浮点数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToSingle 方法 (Boolean)

Convert
.
.
::
.
ToSingle 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Boolean _
) As Single
public static float ToSingle(
    bool value
)
public:
static float ToSingle(
    bool value
)
static member ToSingle :
        value:bool -> float32

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System Single
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例将布尔值 true 和 false 转换为 Single 值。

Dim flags() As Boolean = { True, False }
Dim result As Single

For Each flag As Boolean In flags
   result = Convert.ToSingle(flag)
   Console.WriteLine("Converted {0} to {1}.", flag, result)
Next
' The example displays the following output:
'       Converted True to 1.
'       Converted False to 0.

bool[] flags = { true, false };
float result;

foreach (bool flag in flags)
{
   result = Convert.ToSingle(flag);
   Console.WriteLine("Converted {0} to {1}.", flag, result);
}
// The example displays the following output:
//       Converted True to 1.
//       Converted False to 0.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (Byte)

Convert
.
.
::
.
ToSingle 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Byte _
) As Single
public static float ToSingle(
    byte value
)
public:
static float ToSingle(
    unsigned char value
)
static member ToSingle :
        value:byte -> float32

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System Single
一个等于 value 的单精度浮点数。

下面的示例将字节值数组中的每个元素转换为 Single 值。

Dim numbers() As Byte = { Byte.MinValue, 10, 100, Byte.MaxValue }
Dim result As Single

For Each number As Byte In numbers
   result = Convert.ToSingle(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'       Converted the Byte value 0 to the Single value 0.
'       Converted the Byte value 10 to the Single value 10.
'       Converted the Byte value 100 to the Single value 100.
'       Converted the Byte value 255 to the Single value 255.

byte[] numbers = { Byte.MinValue, 10, 100, Byte.MaxValue };
float result;

foreach (byte number in numbers)
{
   result = Convert.ToSingle(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//       Converted the Byte value 0 to the Single value 0.
//       Converted the Byte value 10 to the Single value 10.
//       Converted the Byte value 100 to the Single value 100.
//       Converted the Byte value 255 to the Single value 255.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (Char)

Convert
.
.
::
.
ToSingle 方法 (Char)
Convert 类

调用此方法始终引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Char _
) As Single
public static float ToSingle(
    char value
)
public:
static float ToSingle(
    wchar_t value
)
static member ToSingle :
        value:char -> float32

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System Single
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间
Char


Convert ..::.ToSingle 方法 (DateTime)

Convert
.
.
::
.
ToSingle 方法 (DateTime)
Convert 类

调用此方法总是会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As DateTime _
) As Single
public static float ToSingle(
    DateTime value
)
public:
static float ToSingle(
    DateTime value
)
static member ToSingle :
        value:DateTime -> float32

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System Single
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (Decimal)

Convert
.
.
::
.
ToSingle 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Decimal _
) As Single
public static float ToSingle(
    decimal value
)
public:
static float ToSingle(
    Decimal value
)
static member ToSingle :
        value:decimal -> float32

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System Single
一个等于 value 的单精度浮点数。
value 使用“舍入到最接近的数字”规则进行舍入。例如，当舍入为两位小数时，值 2.345 变成 2.34，而值 2.355 变成 2.36。 value 使用“舍入到最接近的数字”规则进行舍入。例如，当舍入为两位小数时，值 2.345 变成 2.34，而值 2.355 变成 2.36。

下面的示例将 Decimal 值数组中的每个元素转换为 Single 值。

Dim values() As Decimal = { Decimal.MinValue, -1034.23d, -12d, 0d, 147d, _
                            199.55d, 9214.16d, Decimal.MaxValue }
Dim result As Single

For Each value As Decimal In values
   result = Convert.ToSingle(value)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     value.GetType().Name, value, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Decimal value '-79228162514264337593543950335' to the Single value -7.922816E+28.
'    Converted the Decimal value '-1034.23' to the Single value -1034.23.
'    Converted the Decimal value '-12' to the Single value -12.
'    Converted the Decimal value '0' to the Single value 0.
'    Converted the Decimal value '147' to the Single value 147.
'    Converted the Decimal value '199.55' to the Single value 199.55.
'    Converted the Decimal value '9214.16' to the Single value 9214.16.
'    Converted the Decimal value '79228162514264337593543950335' to the Single value 7.922816E+28.

decimal[] values = { Decimal.MinValue, -1034.23m, -12m, 0m, 147m,
                            199.55m, 9214.16m, Decimal.MaxValue };
float result;

foreach (float value in values)
{
   result = Convert.ToSingle(value);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     value.GetType().Name, value,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Decimal value '-79228162514264337593543950335' to the Single value -7.922816E+28.
//    Converted the Decimal value '-1034.23' to the Single value -1034.23.
//    Converted the Decimal value '-12' to the Single value -12.
//    Converted the Decimal value '0' to the Single value 0.
//    Converted the Decimal value '147' to the Single value 147.
//    Converted the Decimal value '199.55' to the Single value 199.55.
//    Converted the Decimal value '9214.16' to the Single value 9214.16.
//    Converted the Decimal value '79228162514264337593543950335' to the Single value 7.922816E+28.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间
Math Round


Convert ..::.ToSingle 方法 (Double)

Convert
.
.
::
.
ToSingle 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Double _
) As Single
public static float ToSingle(
    double value
)
public:
static float ToSingle(
    double value
)
static member ToSingle :
        value:float -> float32

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System Single
一个等于 value 的单精度浮点数。
value 使用“舍入到最接近的数字”规则进行舍入。例如，当舍入为两位小数时，值 2.345 变成 2.34，而值 2.355 变成 2.36。 value 使用“舍入到最接近的数字”规则进行舍入。例如，当舍入为两位小数时，值 2.345 变成 2.34，而值 2.355 变成 2.36。

下面的示例将 Double 值数组中的每个元素转换为 Single 值。

Dim values() As Double = { Double.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Double.MaxValue }
Dim result As Single

For Each value As Double In values
   result = Convert.ToSingle(value)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     value.GetType().Name, value, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Double value '-1.79769313486232E+308' to the Single value -Infinity.
'    Converted the Double value '-13800000000' to the Single value -1.38E+10.
'    Converted the Double value '-1023.299' to the Single value -1023.299.
'    Converted the Double value '-12.98' to the Single value -12.98.
'    Converted the Double value '0' to the Single value 0.
'    Converted the Double value '9.113E-16' to the Single value 9.113E-16.
'    Converted the Double value '103.919' to the Single value 103.919.
'    Converted the Double value '17834.191' to the Single value 17834.19.
'    Converted the Double value '1.79769313486232E+308' to the Single value Infinity.

double[] values = { Double.MinValue, -1.38e10, -1023.299, -12.98,
                    0, 9.113e-16, 103.919, 17834.191, Double.MaxValue };
float result;

foreach (double value in values)
{
   result = Convert.ToSingle(value);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     value.GetType().Name, value,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Double value '-1.79769313486232E+308' to the Single value -Infinity.
//    Converted the Double value '-13800000000' to the Single value -1.38E+10.
//    Converted the Double value '-1023.299' to the Single value -1023.299.
//    Converted the Double value '-12.98' to the Single value -12.98.
//    Converted the Double value '0' to the Single value 0.
//   Converted the Double value '9.113E-16' to the Single value 9.113E-16.
//    Converted the Double value '103.919' to the Single value 103.919.
//    Converted the Double value '17834.191' to the Single value 17834.19.
//    Converted the Double value '1.79769313486232E+308' to the Single value Infinity.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间
Double
Math Round


Convert ..::.ToSingle 方法 (Int16)

Convert
.
.
::
.
ToSingle 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Short _
) As Single
public static float ToSingle(
    short value
)
public:
static float ToSingle(
    short value
)
static member ToSingle :
        value:int16 -> float32

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System Single
一个等于 value 的单精度浮点数。

下面的示例将 16 位整数数组中的每个元素转换为 Single 值。

Dim numbers() As Short = { Int16.MinValue, -1032, 0, 192, Int16.MaxValue }
Dim result As Single

For Each number As Short In numbers
   result = Convert.ToSingle(number)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Int16 value '-32768' to the Single value -32768.
'    Converted the Int16 value '-1032' to the Single value -1032.
'    Converted the Int16 value '0' to the Single value 0.
'    Converted the Int16 value '192' to the Single value 192.
'    Converted the Int16 value '32767' to the Single value 32767.

short[] numbers = { Int16.MinValue, -1032, 0, 192, Int16.MaxValue };
float result;

foreach (short number in numbers)
{
   result = Convert.ToSingle(number);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);

}
// The example displays the following output:
//    Converted the Int16 value '-32768' to the Single value -32768.
//    Converted the Int16 value '-1032' to the Single value -1032.
//    Converted the Int16 value '0' to the Single value 0.
//    Converted the Int16 value '192' to the Single value 192.
//    Converted the Int16 value '32767' to the Single value 32767.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (Int32)

Convert
.
.
::
.
ToSingle 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Integer _
) As Single
public static float ToSingle(
    int value
)
public:
static float ToSingle(
    int value
)
static member ToSingle :
        value:int -> float32

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System Single
一个等于 value 的单精度浮点数。

下面的示例将整数数组中的每个元素转换为 Single 值。

Dim numbers() As Integer = { Int32.MinValue, -1000, 0, 1000, Int32.MaxValue }
Dim result As Single

For Each number As Integer In numbers
   result = Convert.ToSingle(number)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Int32 value '-2147483648' to the Single value -2.147484E+09.
'    Converted the Int32 value '-1000' to the Single value -1000.
'    Converted the Int32 value '0' to the Single value 0.
'    Converted the Int32 value '1000' to the Single value 1000.
'    Converted the Int32 value '2147483647' to the Single value 2.147484E+09.

int[] numbers = { Int32.MinValue, -1000, 0, 1000, Int32.MaxValue };
float result;

foreach (int number in numbers)
{
   result = Convert.ToSingle(number);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);

}
// The example displays the following output:
//    Converted the Int32 value '-2147483648' to the Single value -2.147484E+09.
//    Converted the Int32 value '-1000' to the Single value -1000.
//    Converted the Int32 value '0' to the Single value 0.
//    Converted the Int32 value '1000' to the Single value 1000.
//    Converted the Int32 value '2147483647' to the Single value 2.147484E+09.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (Int64)

Convert
.
.
::
.
ToSingle 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Long _
) As Single
public static float ToSingle(
    long value
)
public:
static float ToSingle(
    long long value
)
static member ToSingle :
        value:int64 -> float32

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System Single
一个等于 value 的单精度浮点数。

下面的示例将长整数数组中的每个元素转换为 Single 值。

Dim numbers() As Long = { Int64.MinValue, -903, 0, 172, Int64.MaxValue}
Dim result As Single

For Each number As Long In numbers
   result = Convert.ToSingle(number)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)

Next
' The example displays the following output:
'    Converted the Int64 value '-9223372036854775808' to the Single value -9.223372E+18.
'    Converted the Int64 value '-903' to the Single value -903.
'    Converted the Int64 value '0' to the Single value 0.
'    Converted the Int64 value '172' to the Single value 172.
'    Converted the Int64 value '9223372036854775807' to the Single value 9.223372E+18.

long[] numbers = { Int64.MinValue, -903, 0, 172, Int64.MaxValue};
double result;

foreach (long number in numbers)
{
   result = Convert.ToDouble(number);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);

}
// The example displays the following output:
//    Converted the Int64 value '-9223372036854775808' to the Single value -9.223372E+18.
//    Converted the Int64 value '-903' to the Single value -903.
//    Converted the Int64 value '0' to the Single value 0.
//    Converted the Int64 value '172' to the Single value 172.
//    Converted the Int64 value '9223372036854775807' to the Single value 9.223372E+18.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (Object)

Convert
.
.
::
.
ToSingle 方法 (Object)
Convert 类

将指定对象的值转换为单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Object _
) As Single
public static float ToSingle(
    Object value
)
public:
static float ToSingle(
    Object^ value
)
static member ToSingle :
        value:Object -> float32

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Single
与 value 等效的单精度浮点数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 Single..::.MinValue 或大于 Single..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToSingle 方法的结果。

下面的示例将对象数组中的每个元素转换为 Single 值。

Dim values() As Object = { True, "a"c, 123, 1.764e32, "9.78", "1e-02", _
                           1.67e03, "A100", "1,033.67", Date.Now, _
                           Decimal.MaxValue }
Dim result As Single

For Each value As Object In values
   Try
      result = Convert.ToSingle(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)

   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not recognized as a valid Single value.", _
                        value.GetType().Name, value)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the Single type.", _
                        value.GetType().Name, value)

   Catch e As InvalidCastException
      Console.WriteLine("Conversion of the {0} value {1} to a Single is not supported.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    Converted the Boolean value 'True' to the Single value 1.
'    Conversion of the Char value a to a Single is not supported.
'    Converted the Int32 value '123' to the Single value 123.
'    Converted the Double value '1.764E+32' to the Single value 1.764E+32.
'    Converted the String value '9.78' to the Single value 9.78.
'    Converted the String value '1e-02' to the Single value 0.01.
'    Converted the Double value '1670' to the Single value 1670.
'    The String value A100 is not recognized as a valid Single value.
'    Converted the String value '1,033.67' to the Single value 1033.67.
'    Conversion of the DateTime value 11/7/2008 07:56:24 AM to a Single is not supported.
'    Converted the Decimal value '79228162514264337593543950335' to the Single value 7.922816E+28.

object[] values = { true, 'a', 123, 1.764e32, "9.78", "1e-02",
                    1.67e03, "A100", "1,033.67", DateTime.Now,
                    Decimal.MaxValue };
float result;

foreach (object value in values)
{
   try {
      result = Convert.ToSingle(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not recognized as a valid Single value.",
                        value.GetType().Name, value);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the Single type.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("Conversion of the {0} value {1} to a Single is not supported.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    Converted the Boolean value 'True' to the Single value 1.
//    Conversion of the Char value a to a Single is not supported.
//    Converted the Int32 value '123' to the Single value 123.
//    Converted the Double value '1.764E+32' to the Single value 1.764E+32.
//    Converted the String value '9.78' to the Single value 9.78.
//    Converted the String value '1e-02' to the Single value 0.01.
//    Converted the Double value '1670' to the Single value 1670.
//    The String value A100 is not recognized as a valid Single value.
//    Converted the String value '1,033.67' to the Single value 1033.67.
//    Conversion of the DateTime value 11/7/2008 08:02:35 AM to a Single is not supported.
//    Converted the Decimal value '79228162514264337593543950335' to the Single value 7.922816E+28.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (SByte)

Convert
.
.
::
.
ToSingle 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的单精度浮点数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSingle ( _
    value As SByte _
) As Single
[CLSCompliantAttribute(false)]
public static float ToSingle(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static float ToSingle(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToSingle :
        value:sbyte -> float32

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System Single
与 value 等效的 8 位带符号整数。

下面的示例将带符号字节数组中的每个元素转换为 Single 值。

Dim numbers() As SByte = { SByte.MinValue, -23, 0, 17, SByte.MaxValue }
Dim result As Single

For Each number As SByte In numbers
   result = Convert.ToSingle(number)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the SByte value '-128' to the Single value -128.
'    Converted the SByte value '-23' to the Single value -23.
'    Converted the SByte value '0' to the Single value 0.
'    Converted the SByte value '17' to the Single value 17.
'    Converted the SByte value '127' to the Single value 127.

sbyte[] numbers = { SByte.MinValue, -23, 0, 17, SByte.MaxValue };
float result;

foreach (sbyte number in numbers)
{
   result = Convert.ToSingle(number);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);

}
// The example displays the following output:
//    Converted the SByte value '-128' to the Single value -128.
//    Converted the SByte value '-23' to the Single value -23.
//    Converted the SByte value '0' to the Single value 0.
//    Converted the SByte value '17' to the Single value 17.
//    Converted the SByte value '127' to the Single value 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (Single)

Convert
.
.
::
.
ToSingle 方法 (Single)
Convert 类

返回指定的单精度浮点数；不执行任何实际的转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Single _
) As Single
public static float ToSingle(
    float value
)
public:
static float ToSingle(
    float value
)
static member ToSingle :
        value:float32 -> float32

参数

value
类型： System Single
要返回的单精度浮点数。

返回值

类型： System Single
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间
Single


Convert ..::.ToSingle 方法 (String)

Convert
.
.
::
.
ToSingle 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As String _
) As Single
public static float ToSingle(
    string value
)
public:
static float ToSingle(
    String^ value
)
static member ToSingle :
        value:string -> float32

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Single
与 value 中数字等效的单精度浮点数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value 不是一个有效格式的数字。
OverflowException | value 表示小于 Single..::.MinValue 或大于 Single..::.MaxValue 的数字。

返回值是对 value 调用 Single..::.Parse 方法的结果。

如果您希望在转换失败时不处理异常，则可以转而调用 Single..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Single..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例尝试将数字字符串数组中的每个元素转换为 Single 值。

Dim values() As String = { "-1,035.77219", "1AFF", "1e-35", _
                           "1,635,592,999,999,999,999,999,999", "-17.455", _
                           "190.34001", "1.29e325"}
Dim result As Single

For Each value As String In values
   Try
      result = Convert.ToSingle(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As FormatException
      Console.WriteLine("Unable to convert '{0}' to a Single.", value)
   Catch e As OverflowException
      Console.WriteLine("'{0}' is outside the range of a Single.", value)
   End Try
Next
' The example displays the following output:
'    Converted the String value '-1,035.77219' to the Single value -1035.772.
'    Unable to convert '1AFF' to a Single.
'    Converted the String value '1e-35' to the Single value 1E-35.
'    Converted the String value '1,635,592,999,999,999,999,999,999' to the Single value 1.635593E+24.
'    Converted the String value '-17.455' to the Single value -17.455.
'    Converted the String value '190.34001' to the Single value 190.34.
'    '1.29e325' is outside the range of a Single.

string[] values= { "-1,035.77219", "1AFF", "1e-35",
                   "1,635,592,999,999,999,999,999,999", "-17.455",
                   "190.34001", "1.29e325"};
float result;

foreach (string value in values)
{
   try {
      result = Convert.ToSingle(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (FormatException) {
      Console.WriteLine("Unable to convert '{0}' to a Single.", value);
   }
   catch (OverflowException) {
      Console.WriteLine("'{0}' is outside the range of a Single.", value);
   }
}
// The example displays the following output:
//    Converted the String value '-1,035.77219' to the Single value -1035.772.
//    Unable to convert '1AFF' to a Single.
//    Converted the String value '1e-35' to the Single value 1E-35.
//    Converted the String value '1,635,592,999,999,999,999,999,999' to the Single value 1.635593E+24.
//    Converted the String value '-17.455' to the Single value -17.455.
//    Converted the String value '190.34001' to the Single value 190.34.
//    '1.29e325' is outside the range of a Single.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (UInt16)

Convert
.
.
::
.
ToSingle 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的单精度浮点数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSingle ( _
    value As UShort _
) As Single
[CLSCompliantAttribute(false)]
public static float ToSingle(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static float ToSingle(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToSingle :
        value:uint16 -> float32

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System Single
一个等于 value 的单精度浮点数。

下面的示例将 16 位无符号整数数组中的每个元素转换为 Single 值。

Dim numbers() As UShort = { UInt16.MinValue, 121, 12345, UInt16.MaxValue }
Dim result As Single

For Each number As UShort In numbers
   result = Convert.ToSingle(number)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the UInt16 value '0' to the Single value 0.
'    Converted the UInt16 value '121' to the Single value 121.
'    Converted the UInt16 value '12345' to the Single value 12345.
'    Converted the UInt16 value '65535' to the Single value 65535.

ushort[] numbers = { UInt16.MinValue, 121, 12345, UInt16.MaxValue };
float result;

foreach (ushort number in numbers)
{
   result = Convert.ToSingle(number);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the UInt16 value '0' to the Single value 0.
//    Converted the UInt16 value '121' to the Single value 121.
//    Converted the UInt16 value '12345' to the Single value 12345.
//    Converted the UInt16 value '65535' to the Single value 65535.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (UInt32)

Convert
.
.
::
.
ToSingle 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的单精度浮点数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSingle ( _
    value As UInteger _
) As Single
[CLSCompliantAttribute(false)]
public static float ToSingle(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static float ToSingle(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToSingle :
        value:uint32 -> float32

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System Single
一个等于 value 的单精度浮点数。

下面的示例将无符号整数数组中的每个元素转换为 Single 值。

   Dim numbers() As UInteger = { UInt32.MinValue, 121, 12345, UInt32.MaxValue }
   Dim result As Single

   For Each number As UInteger In numbers
      result = Convert.ToSingle(number)
         Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                           number.GetType().Name, number, _
                           result.GetType().Name, result)
   Next
   ' The example displays the following output:
'    Converted the UInt32 value '0' to the Single value 0.
'    Converted the UInt32 value '121' to the Single value 121.
'    Converted the UInt32 value '12345' to the Single value 12345.
'    Converted the UInt32 value '4294967295' to the Single value 4.294967E+09.

uint[] numbers = { UInt32.MinValue, 121, 12345, UInt32.MaxValue };
float result;

foreach (uint number in numbers)
{
   result = Convert.ToSingle(number);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the UInt32 value '0' to the Single value 0.
//    Converted the UInt32 value '121' to the Single value 121.
//    Converted the UInt32 value '12345' to the Single value 12345.
//    Converted the UInt32 value '4294967295' to the Single value 4.294967E+09.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (UInt64)

Convert
.
.
::
.
ToSingle 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的单精度浮点数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSingle ( _
    value As ULong _
) As Single
[CLSCompliantAttribute(false)]
public static float ToSingle(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static float ToSingle(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToSingle :
        value:uint64 -> float32

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System Single
一个等于 value 的单精度浮点数。

下面的示例将无符号长整数数组中的每个元素转换为 Single 值。

Dim numbers() As ULong = { UInt64.MinValue, 121, 12345, UInt64.MaxValue }
Dim result As Single

For Each number As ULong In numbers
   result = Convert.ToSingle(number)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the UInt64 value '0' to the Single value 0.
'    Converted the UInt64 value '121' to the Single value 121.
'    Converted the UInt64 value '12345' to the Single value 12345.
'    Converted the UInt64 value '18446744073709551615' to the Single value 1.844674E+19.

ulong[] numbers = { UInt64.MinValue, 121, 12345, UInt64.MaxValue };
float result;

foreach (ulong number in numbers)
{
   result = Convert.ToSingle(number);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the UInt64 value '0' to the Single value 0.
//    Converted the UInt64 value '121' to the Single value 121.
//    Converted the UInt64 value '12345' to the Single value 12345.
//    Converted the UInt64 value '18446744073709551615' to the Single value 1.844674E+19.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToSingle 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定对象的值转换为单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As Object, _
    provider As IFormatProvider _
) As Single
public static float ToSingle(
    Object value,
    IFormatProvider provider
)
public:
static float ToSingle(
    Object^ value,
    IFormatProvider^ provider
)
static member ToSingle :
        value:Object *
        provider:IFormatProvider -> float32

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Single
与 value 等效的单精度浮点数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible。
OverflowException | value 表示小于 Single..::.MinValue 或大于 Single..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToSingle 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个实现 IConvertible 接口的 Temperature 类。它的 IConvertible..::.ToSingle 方法的实现返回一个代表温度的专用 Single 变量的内部值。 下面的示例定义一个实现 IConvertible 接口的 Temperature 类。它的 IConvertible..::.ToSingle 方法的实现返回一个代表温度的专用 Single 变量的内部值。

Imports System.Globalization

Public Class Temperature : Implements IConvertible
   Private m_Temp As Single

   Public Sub New(temperature As Single)
      Me.m_Temp = temperature
   End Sub

   Public ReadOnly Property Celsius() As Single
      Get
         Return Me.m_Temp
      End Get
   End Property

   Public ReadOnly Property Kelvin() As Single
      Get
         Return Me.m_Temp + 273.15F
      End Get
   End Property

   Public ReadOnly Property Fahrenheit() As Single
      Get
         Return CSng(Math.Round(Me.m_Temp * 9 / 5 + 32, 2))
      End Get
   End Property

   Public Overrides Function ToString() As String
      Return m_Temp.ToString("N2") & " °C"
   End Function

   ' IConvertible implementations.
   Public Function GetTypeCode() As TypeCode _
                   Implements IConvertible.GetTypeCode
      Return TypeCode.Object
   End Function

   Public Function ToBoolean(provider As IFormatProvider) As Boolean _
                   Implements IConvertible.ToBoolean
      If m_Temp = 0 Then
         Return False
      Else
         Return True
      End If
   End Function

   Public Function ToByte(provider As IFormatProvider) As Byte _
                   Implements IConvertible.ToByte
      If m_Temp < Byte.MinValue Or m_Temp > Byte.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", _
                                                   Me.m_Temp))
      Else
         Return Convert.ToByte(Me.m_Temp)
      End If
   End Function

   Public Function ToChar(provider As IFormatProvider) As Char _
                   Implements IConvertible.ToChar
      Throw New InvalidCastException("Temperature to Char conversion is not supported.")
   End Function

   Public Function ToDateTime(provider As IFormatProvider) As Date _
                   Implements IConvertible.ToDateTime
      Throw New InvalidCastException("Temperature to DateTime conversion is not supported.")
   End Function

   Public Function ToDecimal(provider As IFormatProvider) As Decimal _
                   Implements IConvertible.ToDecimal
      Return Convert.ToDecimal(Me.m_Temp)
   End Function

   Public Function ToDouble(provider As IFormatProvider) As Double _
                   Implements IConvertible.ToDouble
      Return Convert.ToDouble(Me.m_Temp)
   End Function

   Public Function ToInt16(provider As IFormatProvider) As Int16 _
                   Implements IConvertible.ToInt16
      If Me.m_Temp < Int16.MinValue Or Me.m_Temp > Int16.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Int16 type.", _
                                                   Me.m_Temp))
      Else
         Return Convert.ToInt16(Me.m_Temp)
      End If
   End Function

   Public Function ToInt32(provider As IFormatProvider) As Int32 _
                   Implements IConvertible.ToInt32
      If Me.m_Temp < Int32.MinValue Or Me.m_Temp > Int32.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Int32 type.", _
                                                   Me.m_Temp))
      Else
         Return Convert.ToInt32(Me.m_Temp)
      End If
   End Function

   Public Function ToInt64(provider As IFormatProvider) As Int64 _
                   Implements IConvertible.ToInt64
      If Me.m_Temp < Int64.MinValue Or Me.m_Temp > Int64.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the Int64 type.", _
                                                   Me.m_Temp))
      Else
         Return Convert.ToInt64(Me.m_Temp)
      End If
   End Function

   Public Function ToSByte(provider As IFormatProvider) As SByte _
                   Implements IConvertible.ToSByte
      If Me.m_Temp < SByte.MinValue Or Me.m_Temp > SByte.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the SByte type.", _
                                                   Me.m_Temp))
      Else
         Return Convert.ToSByte(Me.m_Temp)
      End If
   End Function

   Public Function ToSingle(provider As IFormatProvider) As Single _
                   Implements IConvertible.ToSingle
      Return Me.m_Temp
   End Function

   Public Overloads Function ToString(provider As IFormatProvider) As String _
                   Implements IConvertible.ToString
      Return m_Temp.ToString("N2", provider) & " °C"
   End Function

   Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object _
                   Implements IConvertible.ToType
      Select Case Type.GetTypeCode(conversionType)
         Case TypeCode.Boolean
            Return Me.ToBoolean(Nothing)
         Case TypeCode.Byte
            Return Me.ToByte(Nothing)
         Case TypeCode.Char
            Return Me.ToChar(Nothing)
         Case TypeCode.DateTime
            Return Me.ToDateTime(Nothing)
         Case TypeCode.Decimal
            Return Me.ToDecimal(Nothing)
         Case TypeCode.Double
            Return Me.ToDouble(Nothing)
         Case TypeCode.Int16
            Return Me.ToInt16(Nothing)
         Case TypeCode.Int32
            Return Me.ToInt32(Nothing)
         Case TypeCode.Int64
            Return Me.ToInt64(Nothing)
         Case TypeCode.Object
            If GetType(Temperature).Equals(conversionType) Then
               Return Me
            Else
               Throw New InvalidCastException(String.Format("Conversion to a {0} is not supported.", _
                                                            conversionType.Name))
            End If
         Case TypeCode.SByte
            Return Me.ToSByte(Nothing)
         Case TypeCode.Single
            Return Me.ToSingle(Nothing)
         Case TypeCode.String
            Return Me.ToString(provider)
         Case TypeCode.UInt16
            Return Me.ToUInt16(Nothing)
         Case TypeCode.UInt32
            Return Me.ToUInt32(Nothing)
         Case TypeCode.UInt64
            Return Me.ToUInt64(Nothing)
         Case Else
            Throw New InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name))
      End Select
   End Function

   Public Function ToUInt16(provider As IFormatProvider) As UInt16 _
                   Implements IConvertible.ToUInt16
      If Me.m_Temp < UInt16.MinValue Or Me.m_Temp > UInt16.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the UInt16 type.", _
                                                   Me.m_Temp))
      Else
         Return Convert.ToUInt16(Me.m_Temp)
      End If
   End Function

   Public Function ToUInt32(provider As IFormatProvider) As UInt32 _
                   Implements IConvertible.ToUInt32
      If Me.m_Temp < UInt32.MinValue Or Me.m_Temp > UInt32.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the UInt32 type.", _
                                                   Me.m_Temp))
      Else
         Return Convert.ToUInt32(Me.m_Temp)
      End If
   End Function

   Public Function ToUInt64(provider As IFormatProvider) As UInt64 _
                   Implements IConvertible.ToUInt64
      If Me.m_Temp < UInt64.MinValue Or Me.m_Temp > UInt64.MaxValue Then
         Throw New OverflowException(String.Format("{0} is out of range of the UInt64 type.", _
                                                   Me.m_Temp))
      Else
         Return Convert.ToUInt64(Me.m_temp)
      End If
   End Function
End Class

using System;
using System.Globalization;

public class Temperature : IConvertible
{
   private float m_Temp;

   public Temperature(float temperature)
   {
      this.m_Temp = temperature;
   }

   public float Celsius
   {
      get { return this.m_Temp; }
   }

   public float Kelvin
   {
      get { return this.m_Temp + 273.15f; }
   }

   public float Fahrenheit
   {
      get { return (float) Math.Round(this.m_Temp * 9 / 5 + 32, 2); }
   }

   public override string ToString()
   {
      return m_Temp.ToString("N2") + " °C";
   }

   // IConvertible implementations.
   public TypeCode GetTypeCode()
   {
      return TypeCode.Object;
   }

   public bool ToBoolean(IFormatProvider provider)
   {
      if (m_Temp == 0)
         return false;
      else
         return true;
   }

   public byte ToByte(IFormatProvider provider)
   {
      if (m_Temp < Byte.MinValue || m_Temp > Byte.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Byte type.",
                                                   this.m_Temp));
      else
         return Convert.ToByte(this.m_Temp);
   }

   public char ToChar(IFormatProvider provider)
   {
      throw new InvalidCastException("Temperature to Char conversion is not supported.");
   }

   public DateTime ToDateTime(IFormatProvider provider)
   {
      throw new InvalidCastException("Temperature to DateTime conversion is not supported.");
   }

   public decimal ToDecimal(IFormatProvider provider)
   {
      return Convert.ToDecimal(this.m_Temp);
   }

   public double ToDouble(IFormatProvider provider)
   {
      return Convert.ToDouble(this.m_Temp);
   }

   public short ToInt16(IFormatProvider provider)
   {
      if (this.m_Temp < Int16.MinValue || this.m_Temp > Int16.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int16 type.",
                                                   this.m_Temp));
      else
         return Convert.ToInt16(this.m_Temp);
   }

   public int ToInt32(IFormatProvider provider)
      {
      if (this.m_Temp < Int32.MinValue || this.m_Temp > Int32.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int32 type.",
                                                   this.m_Temp));
      else
         return Convert.ToInt32(this.m_Temp);
   }

   public long ToInt64(IFormatProvider provider)
   {
      if (this.m_Temp < Int64.MinValue || this.m_Temp > Int64.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int64 type.",
                                                   this.m_Temp));
      else
         return Convert.ToInt64(this.m_Temp);
   }

   public sbyte ToSByte(IFormatProvider provider)
   {
      if (this.m_Temp < SByte.MinValue || this.m_Temp > SByte.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the SByte type.",
                                                   this.m_Temp));
      else
         return Convert.ToSByte(this.m_Temp);
   }

   public float ToSingle(IFormatProvider provider)
   {
      return this.m_Temp;
   }

   public string ToString(IFormatProvider provider)
   {
      return m_Temp.ToString("N2", provider) + " °C";
   }

   public object ToType(Type conversionType, IFormatProvider provider)
   {
      switch (Type.GetTypeCode(conversionType))
      {
         case TypeCode.Boolean:
            return this.ToBoolean(null);
         case TypeCode.Byte:
            return this.ToByte(null);
         case TypeCode.Char:
            return this.ToChar(null);
         case TypeCode.DateTime:
            return this.ToDateTime(null);
         case TypeCode.Decimal:
            return this.ToDecimal(null);
         case TypeCode.Double:
            return this.ToDouble(null);
         case TypeCode.Int16:
            return this.ToInt16(null);
         case TypeCode.Int32:
            return this.ToInt32(null);
         case TypeCode.Int64:
            return this.ToInt64(null);
         case TypeCode.Object:
            if (typeof(Temperature).Equals(conversionType))
               return this;
            else
               throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.",
                                                            conversionType.Name));
         case TypeCode.SByte:
            return this.ToSByte(null);
         case TypeCode.Single:
            return this.ToSingle(null);
         case TypeCode.String:
            return this.ToString(provider);
         case TypeCode.UInt16:
            return this.ToUInt16(null);
         case TypeCode.UInt32:
            return this.ToUInt32(null);
         case TypeCode.UInt64:
            return this.ToUInt64(null);
         default:
            throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
      }
   }

   public ushort ToUInt16(IFormatProvider provider)
   {
      if (this.m_Temp < UInt16.MinValue || this.m_Temp > UInt16.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt16 type.",
                                                   this.m_Temp));
      else
         return Convert.ToUInt16(this.m_Temp);
   }

   public uint ToUInt32(IFormatProvider provider)
   {
      if (this.m_Temp < UInt32.MinValue || this.m_Temp > UInt32.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt32 type.",
                                                   this.m_Temp));
      else
         return Convert.ToUInt32(this.m_Temp);
   }

   public ulong ToUInt64(IFormatProvider provider)
   {
      if (this.m_Temp < UInt64.MinValue || this.m_Temp > UInt64.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt64 type.",
                                                   this.m_Temp));
      else
         return Convert.ToUInt64(this.m_Temp);
   }
}

下面的示例阐释对 Convert..::.ToSingle(Object, IFormatProvider) 方法的调用如何进而调用 Temperature 类的 IConvertible..::.ToSingle 实现。

Module Example
   Public Sub Main()
      Dim cold As New Temperature(-40)
      Dim freezing As New Temperature(0)
      Dim boiling As New Temperature(100)

      Console.WriteLine(Convert.ToInt32(cold, Nothing))
      Console.WriteLine(Convert.ToInt32(freezing, Nothing))
      Console.WriteLine(Convert.ToDouble(boiling, Nothing))
   End Sub
End Module
' The example displays the following output:
'       -40
'       0
'       100

public class Example
{
   public static void Main()
   {
      Temperature cold = new Temperature(-40);
      Temperature freezing = new Temperature(0);
      Temperature boiling = new Temperature(100);

      Console.WriteLine(Convert.ToInt32(cold, null));
      Console.WriteLine(Convert.ToInt32(freezing, null));
      Console.WriteLine(Convert.ToDouble(boiling, null));
   }
}
// The example dosplays the following output:
//       -40
//       0
//       100

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToSingle 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToSingle 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    value As String, _
    provider As IFormatProvider _
) As Single
public static float ToSingle(
    string value,
    IFormatProvider provider
)
public:
static float ToSingle(
    String^ value,
    IFormatProvider^ provider
)
static member ToSingle :
        value:string *
        provider:IFormatProvider -> float32

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Single
与 value 中数字等效的单精度浮点数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value 不是一个有效格式的数字。
OverflowException | value 表示小于 Single..::.MinValue 或大于 Single..::.MaxValue 的数字。

返回值是对 value 调用 Single..::.Parse 方法的结果。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 Single..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 Single..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例在将数值字符串数组中的元素转换为 Single 值时使用代表 en-US 和 fr-FR 区域性的 IFormatProvider 对象。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim values() As String = { "123456789", "12345.6789", "12 345,6789", _
                                 "123,456.789", "123 456,789", "123,456,789.0123", _
                                 "123 456 789,0123", "1.235e12", "1.03221e-05", _
                                 Double.MaxValue.ToString() }
      Dim cultures() As CultureInfo = { New CultureInfo("en-US"), _
                                        New CultureInfo("fr-FR") }

      For Each culture As CultureInfo In cultures
         Console.WriteLine("String -> Single Conversion Using the {0} Culture", _
                           culture.Name)
         For Each value As String In values
            Console.Write("{0,22}  ->  ", value)
            Try
               Console.WriteLine(Convert.ToSingle(value, culture))
            Catch e As FormatException
               Console.WriteLine("FormatException")
            CAtch e As OverflowException
               Console.WriteLine("Overflow")
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    String -> Single Conversion Using the en-US Culture
'                 123456789  ->  1.234568E+08
'                12345.6789  ->  12345.68
'               12 345,6789  ->  FormatException
'               123,456.789  ->  123456.8
'               123 456,789  ->  FormatException
'          123,456,789.0123  ->  1.234568E+08
'          123 456 789,0123  ->  FormatException
'                  1.235e12  ->  1.235E+12
'               1.03221e-05  ->  1.03221E-05
'     1.79769313486232E+308  ->  Overflow
'
'    String -> Single Conversion Using the fr-FR Culture
'                 123456789  ->  1.234568E+08
'                12345.6789  ->  FormatException
'               12 345,6789  ->  12345.68
'               123,456.789  ->  FormatException
'               123 456,789  ->  123456.8
'          123,456,789.0123  ->  FormatException
'          123 456 789,0123  ->  1.234568E+08
'                  1.235e12  ->  FormatException
'               1.03221e-05  ->  FormatException
'     1.79769313486232E+308  ->  FormatException

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values = { "123456789", "12345.6789", "12 345,6789",
                          "123,456.789", "123 456,789", "123,456,789.0123",
                          "123 456 789,0123", "1.235e12", "1.03221e-05",
                          Double.MaxValue.ToString() };
      CultureInfo[] cultures = { new CultureInfo("en-US"),
                                 new CultureInfo("fr-FR") };

      foreach (CultureInfo culture in cultures)
      {
         Console.WriteLine("String -> Single Conversion Using the {0} Culture",
                           culture.Name);
         foreach (string value in values)
         {
            Console.Write("{0,22}  ->  ", value);
            try {
               Console.WriteLine(Convert.ToSingle(value, culture));
            }
            catch (FormatException) {
               Console.WriteLine("FormatException");
            }
            catch (OverflowException) {
               Console.WriteLine("OverflowException");
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    String -> Single Conversion Using the en-US Culture
//                 123456789  ->  1.234568E+08
//                12345.6789  ->  12345.68
//               12 345,6789  ->  FormatException
//               123,456.789  ->  123456.8
//               123 456,789  ->  FormatException
//          123,456,789.0123  ->  1.234568E+08
//          123 456 789,0123  ->  FormatException
//                  1.235e12  ->  1.235E+12
//               1.03221e-05  ->  1.03221E-05
//     1.79769313486232E+308  ->  Overflow
//
//    String -> Single Conversion Using the fr-FR Culture
//                 123456789  ->  1.234568E+08
//                12345.6789  ->  FormatException
//               12 345,6789  ->  12345.68
//               123,456.789  ->  FormatException
//               123 456,789  ->  123456.8
//          123,456,789.0123  ->  FormatException
//          123 456 789,0123  ->  1.234568E+08
//                  1.235e12  ->  FormatException
//               1.03221e-05  ->  FormatException
//     1.79769313486232E+308  ->  FormatException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToSingle 重载
System 命名空间


Convert ..::.ToString 方法

Convert
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为其等效的字符串表示形式。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToString 方法 (Boolean)

Convert
.
.
::
.
ToString 方法 (Boolean)
Convert 类

将指定的布尔值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Boolean _
) As String
public static string ToString(
    bool value
)
public:
static String^ ToString(
    bool value
)
static member ToString :
        value:bool -> string

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Boolean..::.ToString 相同。它为 true 值返回 Boolean..::.TrueString，并为 false 值返回 Boolean..::.FalseString。 此实现与 Boolean..::.ToString 相同。它为 true 值返回 Boolean..::.TrueString，并为 false 值返回 Boolean..::.FalseString。

下面的示例演示如何使用 ToString 将 Boolean 转换为 String。它还说明了该转换返回的字符串与 Boolean..::.TrueString 或 Boolean..::.FalseString 相同。 下面的示例演示如何使用 ToString 将 Boolean 转换为 String。它还说明了该转换返回的字符串与 Boolean..::.TrueString 或 Boolean..::.FalseString 相同。

Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True

Console.WriteLine(Convert.ToString(falseFlag))
Console.WriteLine(Convert.ToString(falseFlag).Equals(Boolean.FalseString))
Console.WriteLine(Convert.ToString(trueFlag))
Console.WriteLine(Convert.ToString(trueFlag).Equals(Boolean.TrueString))
' The example displays the following output:
'       False
'       True
'       True
'       True

bool falseFlag = false;
bool trueFlag = true;

Console.WriteLine(Convert.ToString(falseFlag));
Console.WriteLine(Convert.ToString(falseFlag).Equals(Boolean.FalseString));
Console.WriteLine(Convert.ToString(trueFlag));
Console.WriteLine(Convert.ToString(trueFlag).Equals(Boolean.TrueString));
// The example displays the following output:
//       False
//       True
//       True
//       True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Byte)

Convert
.
.
::
.
ToString 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Byte _
) As String
public static string ToString(
    byte value
)
public:
static String^ ToString(
    unsigned char value
)
static member ToString :
        value:byte -> string

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Byte..::.ToString()()() 相同。

下面的示例将 Byte 转换为 String。

Public Sub ConvertStringByte(ByVal stringVal As String)
    Dim byteVal As Byte = 0

    Try
        byteVal = System.Convert.ToByte(stringVal)
        System.Console.WriteLine("{0} as a byte is: {1}", _
                                  stringVal, byteVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in string-to-byte conversion.")
    Catch exception As System.FormatException
        System.Console.WriteLine( _
            "The String is not formatted as a Byte.")
    Catch exception As System.ArgumentException
        System.Console.WriteLine("The String is null.")
    End Try

    'The conversion from byte to string is always valid.
    stringVal = System.Convert.ToString(byteVal)
    System.Console.WriteLine("{0} as a string is {1}", _
                              byteVal, stringVal)
End Sub

        public void ConvertStringByte(string stringVal) {
            byte byteVal = 0;

            try {
                byteVal = System.Convert.ToByte(stringVal);
                System.Console.WriteLine("{0} as a byte is: {1}",
                    stringVal, byteVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Conversion from string to byte overflowed.");
            }
            catch (System.FormatException) {
                System.Console.WriteLine(
                    "The string is not formatted as a byte.");
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine(
                    "The string is null.");
            }

            //The conversion from byte to string is always valid.
            stringVal = System.Convert.ToString(byteVal);
            System.Console.WriteLine("{0} as a string is {1}",
                byteVal, stringVal);
        }

public:
   void ConvertStringByte( String^ stringVal )
   {
      Byte byteVal = 0;

      try
      {
         byteVal = System::Convert::ToByte( stringVal );
         System::Console::WriteLine( " {0} as a Byte is: {1}",
            stringVal, byteVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine(
            "Conversion from String to Byte overflowed." );
      }
      catch ( System::FormatException^ )
      {
         System::Console::WriteLine(
            "The String is not formatted as a Byte." );
      }
      catch ( System::ArgumentNullException^ )
      {
         System::Console::WriteLine( "The String is 0." );
      }

      //The conversion from Byte to String is always valid.
      stringVal = System::Convert::ToString( byteVal );
      System::Console::WriteLine( " {0} as a String is {1}",
         byteVal, stringVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Char)

Convert
.
.
::
.
ToString 方法 (Char)
Convert 类

将指定的 Unicode 字符的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Char _
) As String
public static string ToString(
    char value
)
public:
static String^ ToString(
    wchar_t value
)
static member ToString :
        value:char -> string

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Char..::.ToString 相同。

下面的示例将 Char 转换为 String。

Public Sub ConvertStringChar(ByVal stringVal As String)
    Dim charVal As Char = "a"c

    ' A string must be one character long to convert to char.
    Try
        charVal = System.Convert.ToChar(stringVal)
        System.Console.WriteLine("{0} as a char is {1}", _
                                  stringVal, charVal)
    Catch exception As System.FormatException
        System.Console.WriteLine( _
         "The string is longer than one character.")
    Catch exception As System.ArgumentNullException
        System.Console.WriteLine("The string is null.")
    End Try

    ' A char to string conversion will always succeed.
    stringVal = System.Convert.ToString(charVal)
    System.Console.WriteLine("The character as a string is {0}", _
                              stringVal)
End Sub

        public void ConvertStringChar(string stringVal) {
            char charVal = 'a';

            // A string must be one character long to convert to char.
            try {
                charVal = System.Convert.ToChar(stringVal);
                System.Console.WriteLine("{0} as a char is {1}",
                    stringVal, charVal);
            }
            catch (System.FormatException) {
                System.Console.WriteLine(
                    "The string is longer than one character.");
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine("The string is null.");
            }

            // A char to string conversion will always succeed.
            stringVal = System.Convert.ToString(charVal);
            System.Console.WriteLine("The character as a string is {0}",
                    stringVal);
        }

public:
   void ConvertStringChar( String^ stringVal )
   {
      Char charVal = 'a';

      // A String must be one character long to convert to char.
      try
      {
         charVal = System::Convert::ToChar( stringVal );
         System::Console::WriteLine( " {0} as a char is {1}",
            stringVal, charVal );
      }
      catch ( System::FormatException^ )
      {
         System::Console::WriteLine(
            "The String is longer than one character." );
      }
      catch ( System::ArgumentNullException^ )
      {
         System::Console::WriteLine( "The String is 0." );
      }

      // A char to String conversion will always succeed.
      stringVal = System::Convert::ToString( charVal );
      System::Console::WriteLine( "The character as a String is {0}",
         stringVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (DateTime)

Convert
.
.
::
.
ToString 方法 (DateTime)
Convert 类

将指定的 DateTime 的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As DateTime _
) As String
public static string ToString(
    DateTime value
)
public:
static String^ ToString(
    DateTime value
)
static member ToString :
        value:DateTime -> string

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System String
value 的字符串表示形式。

此实现与 DateTime..::.ToString()()() 相同。使用当前区域性的格式惯例以及 "G" 格式说明符将 DateTime 值转换为其字符串表示形式。 此实现与 DateTime..::.ToString()()() 相同。使用当前区域性的格式惯例以及 "G" 格式说明符将 DateTime 值转换为其字符串表示形式。

下面的示例将 DateTime 值数组中的每个元素转换为 String 值。

Dim dates() As Date = { #07/14/2009#, #6:32PM#, #02/12/2009 7:16AM#}
Dim result As String

For Each dateValue As Date In dates
   result = Convert.ToString(dateValue)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        dateValue.GetType().Name, dateValue, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the DateTime value 7/14/2009 12:00:00 AM to a String value 7/14/2009 12:00:00 AM.
'    Converted the DateTime value 1/1/0001 06:32:00 PM to a String value 1/1/0001 06:32:00 PM.
'    Converted the DateTime value 2/12/2009 07:16:00 AM to a String value 2/12/2009 07:16:00 AM.

DateTime[] dates = { new DateTime(2009, 7, 14),
                     new DateTime(1, 1, 1, 18, 32, 0),
                     new DateTime(2009, 2, 12, 7, 16, 0) };
string result;

foreach (DateTime dateValue in dates)
{
   result = Convert.ToString(dateValue);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        dateValue.GetType().Name, dateValue,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the DateTime value 7/14/2009 12:00:00 AM to a String value 7/14/2009 12:00:00 AM.
//    Converted the DateTime value 1/1/0001 06:32:00 PM to a String value 1/1/0001 06:32:00 PM.
//    Converted the DateTime value 2/12/2009 07:16:00 AM to a String value 2/12/2009 07:16:00 AM.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Decimal)

Convert
.
.
::
.
ToString 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Decimal _
) As String
public static string ToString(
    decimal value
)
public:
static String^ ToString(
    Decimal value
)
static member ToString :
        value:decimal -> string

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Decimal..::.ToString()()() 相同。

下面的示例将 Decimal 转换为 String。

Public Sub ConvertStringDecimal(ByVal stringVal As String)
    Dim decimalVal As Decimal = 0

    Try
        decimalVal = System.Convert.ToDecimal(stringVal)
        System.Console.WriteLine("The string as a decimal is {0}.", _
                                  decimalVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in string-to-decimal conversion.")
    Catch exception As System.FormatException
        System.Console.WriteLine( _
            "The string is not formatted as a decimal.")
    Catch exception As System.ArgumentException
        System.Console.WriteLine("The string is null.")
    End Try

    ' Decimal to string conversion will not overflow.
    stringVal = System.Convert.ToString(decimalVal)
    System.Console.WriteLine("The decimal as a string is {0}.", _
                              stringVal)
End Sub

        public void ConvertStringDecimal(string stringVal) {
            decimal decimalVal = 0;

            try {
                decimalVal = System.Convert.ToDecimal(stringVal);
                System.Console.WriteLine(
                    "The string as a decimal is {0}.", decimalVal);
            }
            catch (System.OverflowException){
                System.Console.WriteLine(
                    "The conversion from string to decimal overflowed.");
            }
            catch (System.FormatException) {
                System.Console.WriteLine(
                    "The string is not formatted as a decimal.");
            }
            catch (System.ArgumentNullException) {
                System.Console.WriteLine(
                    "The string is null.");
            }

            // Decimal to string conversion will not overflow.
            stringVal = System.Convert.ToString(decimalVal);
            System.Console.WriteLine(
                "The decimal as a string is {0}.", stringVal);
        }

public:
   void ConvertStringDecimal( String^ stringVal )
   {
      Decimal decimalVal = 0;

      try
      {
         decimalVal = System::Convert::ToDecimal( stringVal );
         System::Console::WriteLine( "The String as a decimal is {0}.",
         decimalVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine(
            "The conversion from String to decimal overflowed." );
      }
      catch ( System::FormatException^ )
      {
         System::Console::WriteLine(
            "The String is not formatted as a decimal." );
      }
      catch ( System::ArgumentNullException^ )
      {
         System::Console::WriteLine( "The String is 0." );
      }

      // Decimal to String conversion will not overflow.
      stringVal = System::Convert::ToString( decimalVal );
      System::Console::WriteLine(
         "The decimal as a String is {0}.", stringVal );
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Double)

Convert
.
.
::
.
ToString 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Double _
) As String
public static string ToString(
    double value
)
public:
static String^ ToString(
    double value
)
static member ToString :
        value:float -> string

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Double..::.ToString()()() 相同。

下面的示例将 Double 转换为 String。

Public Sub ConvertDoubleString(ByVal doubleVal As Double)

    Dim stringVal As String

    ' A conversion from Double to String cannot overflow.
    stringVal = System.Convert.ToString(doubleVal)
    System.Console.WriteLine("{0} as a String is: {1}", _
                              doubleVal, stringVal)

    Try
        doubleVal = System.Convert.ToDouble(stringVal)
        System.Console.WriteLine("{0} as a Double is: {1}", _
                                  stringVal, doubleVal)
    Catch exception As System.OverflowException
        System.Console.WriteLine( _
            "Overflow in String-to-Double conversion.")
    Catch exception As System.FormatException
        System.Console.WriteLine( _
            "The string is not formatted as a Double.")
    Catch exception As System.ArgumentException
        System.Console.WriteLine("The string is null.")
    End Try

End Sub

        public void ConvertDoubleString(double doubleVal) {

            string	stringVal;

            // A conversion from Double to string cannot overflow.
            stringVal = System.Convert.ToString(doubleVal);
            System.Console.WriteLine("{0} as a string is: {1}",
                doubleVal, stringVal);

            try {
                doubleVal = System.Convert.ToDouble(stringVal);
                System.Console.WriteLine("{0} as a double is: {1}",
                    stringVal, doubleVal);
            }
            catch (System.OverflowException) {
                System.Console.WriteLine(
                    "Conversion from string-to-double overflowed.");
            }
            catch (System.FormatException) {
                System.Console.WriteLine(
                    "The string was not formatted as a double.");
            }
            catch (System.ArgumentException) {
                System.Console.WriteLine(
                    "The string pointed to null.");
            }
        }

public:
   void ConvertDoubleString( double doubleVal )
   {
      String^ stringVal;

      // A conversion from Double to String cannot overflow.
      stringVal = System::Convert::ToString( doubleVal );
      System::Console::WriteLine( " {0} as a String is: {1}",
         doubleVal, stringVal );
      try
      {
         doubleVal = System::Convert::ToDouble( stringVal );
         System::Console::WriteLine( " {0} as a double is: {1}",
         stringVal, doubleVal );
      }
      catch ( System::OverflowException^ )
      {
         System::Console::WriteLine( "Conversion from String-to-double overflowed." );
      }
      catch ( System::FormatException^ )
      {
         System::Console::WriteLine( "The String was not formatted as a double." );
      }
      catch ( System::ArgumentException^ )
      {
         System::Console::WriteLine( "The String pointed to null." );
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Int16)

Convert
.
.
::
.
ToString 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Short _
) As String
public static string ToString(
    short value
)
public:
static String^ ToString(
    short value
)
static member ToString :
        value:int16 -> string

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Int16..::.ToString()()() 相同。

下面的示例将 16 位整数数组中的每个元素转换为其等效的字符串表示形式。

Dim numbers() As Short = { Int16.MinValue, -138, 0, 19, Int16.MaxValue }
Dim result As String

For Each number As Short In numbers
   result = Convert.ToString(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Int16 value -32768 to the String value -32768.
'    Converted the Int16 value -138 to the String value -138.
'    Converted the Int16 value 0 to the String value 0.
'    Converted the Int16 value 19 to the String value 19.
'    Converted the Int16 value 32767 to the String value 32767.

short[] numbers = { Int16.MinValue, -138, 0, 19, Int16.MaxValue };
string result;

foreach (short number in numbers)
{
   result = Convert.ToString(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Int16 value -32768 to the String value -32768.
//    Converted the Int16 value -138 to the String value -138.
//    Converted the Int16 value 0 to the String value 0.
//    Converted the Int16 value 19 to the String value 19.
//    Converted the Int16 value 32767 to the String value 32767.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Int32)

Convert
.
.
::
.
ToString 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Integer _
) As String
public static string ToString(
    int value
)
public:
static String^ ToString(
    int value
)
static member ToString :
        value:int -> string

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Int32..::.ToString()()() 相同。

下面的示例将整数数组中的每个元素转换为其等效的字符串表示形式。

' Create a NumberFormatInfo object and set several of its
' properties that control default integer formatting.
Dim provider As New System.Globalization.NumberFormatInfo()
provider.NegativeSign = "minus "

Dim values() As Integer = { -20, 0, 100 }

For Each value As Integer In values
   Console.WriteLine("{0,-5}  -->  {1,8}", _
                     value, Convert.ToString(value, provider))
Next
' The example displays the following output:
'       -20    -->  minus 20
'       0      -->         0
'       100    -->       100

// Create a NumberFormatInfo object and set several of its
// properties that control default integer formatting.
System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
provider.NegativeSign = "minus ";

int[] values = { -20, 0, 100 };

foreach (int value in values)
   Console.WriteLine("{0,-5}  -->  {1,8}",
                     value, Convert.ToString(value, provider));
// The example displays the following output:
//       -20    -->  minus 20
//       0      -->         0
//       100    -->       100

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Int64)

Convert
.
.
::
.
ToString 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Long _
) As String
public static string ToString(
    long value
)
public:
static String^ ToString(
    long long value
)
static member ToString :
        value:int64 -> string

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Int64..::.ToString()()() 相同。

下面的示例将长整数数组中的每个元素转换为其等效的字符串表示形式。

' Create a NumberFormatInfo object and set several of its
' properties that control default integer formatting.
Dim provider As New System.Globalization.NumberFormatInfo()
provider.NegativeSign = "minus "

Dim values() As Long = { -200, 0, 1000 }

For Each value As Long In values
   Console.WriteLine("{0,-6}  -->  {1,10}", _
                     value, Convert.ToString(value, provider))
Next
' The example displays the following output:
'       -200    -->   minus 200
'       0       -->           0
'       1000    -->        1000

// Create a NumberFormatInfo object and set several of its
// properties that control default integer formatting.
System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
provider.NegativeSign = "minus ";

long[] values = { -200, 0, 1000 };

foreach (long value in values)
   Console.WriteLine("{0,-6}  -->  {1,10}",
                     value, Convert.ToString(value, provider));
// The example displays the following output:
//       -200    -->   minus 200
//       0       -->           0
//       1000    -->        1000

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Object)

Convert
.
.
::
.
ToString 方法 (Object)
Convert 类

将指定对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Object _
) As String
public static string ToString(
    Object value
)
public:
static String^ ToString(
    Object^ value
)
static member ToString :
        value:Object -> string

参数

value
类型： System Object
一个对象，用于提供要转换的值，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System String
value 的字符串表示形式，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 String..::.Empty。

返回值是调用 value 的基础类型的 ToString 方法的结果。

下面的示例将对象数组中的每个元素转换为其等效的字符串表示形式。

Dim values() As Object = { False, 12.63d, #06/01/2009 6:32:15#, 16.09e-12, _
                           "Z"c, 15.15322, SByte.MinValue, Int32.MaxValue}
Dim result As String

For Each value As Object In values
   result = Convert.ToString(value)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Boolean value False to the String value False.
'    Converted the Decimal value 12.63 to the String value 12.63.
'    Converted the DateTime value 6/1/2009 06:32:15 AM to the String value 6/1/2009 06:32:15 AM.
'    Converted the Double value 1.609E-11 to the String value 1.609E-11.
'    Converted the Char value Z to the String value Z.
'    Converted the Double value 15.15322 to the String value 15.15322.
'    Converted the SByte value -128 to the String value -128.
'    Converted the Int32 value 2147483647 to the String value 2147483647.

object[] values = { false, 12.63m, new DateTime(2009, 6, 1, 6, 32, 15), 16.09e-12,
                    'Z', 15.15322, SByte.MinValue, Int32.MaxValue };
string result;

foreach (object value in values)
{
   result = Convert.ToString(value);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Boolean value False to the String value False.
//    Converted the Decimal value 12.63 to the String value 12.63.
//    Converted the DateTime value 6/1/2009 06:32:15 AM to the String value 6/1/2009 06:32:15 AM.
//    Converted the Double value 1.609E-11 to the String value 1.609E-11.
//    Converted the Char value Z to the String value Z.
//    Converted the Double value 15.15322 to the String value 15.15322.
//    Converted the SByte value -128 to the String value -128.
//    Converted the Int32 value 2147483647 to the String value 2147483647.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (SByte)

Convert
.
.
::
.
ToString 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为其等效的字符串表示形式。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToString ( _
    value As SByte _
) As String
[CLSCompliantAttribute(false)]
public static string ToString(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static String^ ToString(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToString :
        value:sbyte -> string

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 SByte..::.ToString()()() 相同。

下面的示例将带符号字节数组中的每个元素转换为其等效的字符串表示形式。

Dim numbers() As SByte = { SByte.MinValue, -12, 0, 16, SByte.MaxValue }
Dim result As String

For Each number As SByte In numbers
   result = Convert.ToString(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the SByte value -128 to the String value -128.
'    Converted the SByte value -12 to the String value -12.
'    Converted the SByte value 0 to the String value 0.
'    Converted the SByte value 16 to the String value 16.
'    Converted the SByte value 127 to the String value 127.

sbyte[] numbers = { SByte.MinValue, -12, 0, 16, SByte.MaxValue };
string result;

foreach (sbyte number in numbers)
{
   result = Convert.ToString(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the SByte value -128 to the String value -128.
//    Converted the SByte value -12 to the String value -12.
//    Converted the SByte value 0 to the String value 0.
//    Converted the SByte value 16 to the String value 16.
//    Converted the SByte value 127 to the String value 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Single)

Convert
.
.
::
.
ToString 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Single _
) As String
public static string ToString(
    float value
)
public:
static String^ ToString(
    float value
)
static member ToString :
        value:float32 -> string

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Single..::.ToString()()() 相同。

下面的示例将 Single 值数组中的每个元素转换为其等效的字符串表示形式。

Dim numbers() As Single = { Single.MinValue, -1011.351, -17.45, -3e-16, _
                            0, 4.56e-12, 16.0001, 10345.1221, Single.MaxValue }
Dim result As String

For Each number As Single In numbers
   result = Convert.ToString(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Single value -3.402823E+38 to the String value -3.402823E+38.
'    Converted the Single value -1011.351 to the String value -1011.351.
'    Converted the Single value -17.45 to the String value -17.45.
'    Converted the Single value -3E-16 to the String value -3E-16.
'    Converted the Single value 0 to the String value 0.
'    Converted the Single value 4.56E-12 to the String value 4.56E-12.
'    Converted the Single value 16.0001 to the String value 16.0001.
'    Converted the Single value 10345.12 to the String value 10345.12.
'    Converted the Single value 3.402823E+38 to the String value 3.402823E+38.

float[] numbers = { Single.MinValue, -1011.351f, -17.45f, -3e-16f,
                    0f, 4.56e-12f, 16.0001f, 10345.1221f, Single.MaxValue };
string result;

foreach (float number in numbers)
{
   result = Convert.ToString(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Single value -3.402823E+38 to the String value -3.402823E+38.
//    Converted the Single value -1011.351 to the String value -1011.351.
//    Converted the Single value -17.45 to the String value -17.45.
//    Converted the Single value -3E-16 to the String value -3E-16.
//    Converted the Single value 0 to the String value 0.
//    Converted the Single value 4.56E-12 to the String value 4.56E-12.
//    Converted the Single value 16.0001 to the String value 16.0001.
//    Converted the Single value 10345.12 to the String value 10345.12.
//    Converted the Single value 3.402823E+38 to the String value 3.402823E+38.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (String)

Convert
.
.
::
.
ToString 方法 (String)
Convert 类

返回指定的字符串实例；不执行任何实际转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As String _
) As String
public static string ToString(
    string value
)
public:
static String^ ToString(
    String^ value
)
static member ToString :
        value:string -> string

参数

value
类型： System String
要返回的字符串。

返回值

类型： System String
value 不经更改即返回。

下面的示例使用 String 参数调用 ToString 方法，返回未经修改的 String。

' Example of Convert.ToString( non-numeric types, IFormatProvider ).
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

' An instance of this class can be passed to methods that require
' an IFormatProvider.
Public Class DummyProvider
    Implements IFormatProvider

    ' Normally, GetFormat returns an object of the requested type
    ' (usually itself) if it is able; otherwise, it returns Nothing.
    Public Function GetFormat( argType As Type ) As Object _
        Implements IFormatProvider.GetFormat

        ' Here, the type of argType is displayed, and GetFormat
        ' always returns Nothing.
        Console.Write( "{0,-40}", argType.ToString( ) )
        Return Nothing

    End Function
End Class

Module ConvertNonNumericProviderDemo

    Sub Main( )

        ' Create an instance of the IFormatProvider.
        Dim provider    As New DummyProvider( )
        Dim converted   As String

        ' Convert these values using DummyProvider.
        Dim Int32A      As Integer  = -252645135
        Dim DoubleA     As Double   = 61680.3855
        Dim ObjDouble   As Object   = CType( -98765.4321, Object )
        Dim DayTimeA    As DateTime = _
                            new DateTime( 2001, 9, 11, 13, 45, 0 )

        Dim BoolA       As Boolean  = True
        Dim StringA     As String   = "Qwerty"
        Dim CharA       As Char     = "$"c
        Dim TSpanA      As TimeSpan = New TimeSpan( 0, 18, 0 )
        Dim ObjOther    As Object   = CType( provider, Object )

        Console.WriteLine( "This example of " & _
            "Convert.ToString( non-numeric, IFormatProvider ) " & _
            vbCrLf & "generates the following output. The " & _
            "provider type, argument type, " & vbCrLf & "and " & _
            "argument value are displayed." )
        Console.WriteLine( vbCrLf & _
            "Note: The IFormatProvider object is not called for " & _
            "Boolean, String, " & vbCrLf & "Char, TimeSpan, " & _
            "and non-numeric Object." )

        ' The format provider is called for these conversions.
        Console.WriteLine( )
        converted =  Convert.ToString( Int32A, provider )
        Console.WriteLine( "Int32    {0}", converted )
        converted =  Convert.ToString( DoubleA, provider )
        Console.WriteLine( "Double   {0}", converted )
        converted =  Convert.ToString( ObjDouble, provider )
        Console.WriteLine( "Object   {0}", converted )
        converted =  Convert.ToString( DayTimeA, provider )
        Console.WriteLine( "DateTime {0}", converted )

        ' The format provider is not called for these conversions.
        Console.WriteLine( )
        converted =  Convert.ToString( BoolA, provider )
        Console.WriteLine( "Boolean  {0}", converted )
        converted =  Convert.ToString( StringA, provider )
        Console.WriteLine( "String   {0}", converted )
        converted =  Convert.ToString( CharA, provider )
        Console.WriteLine( "Char     {0}", converted )
        converted =  Convert.ToString( TSpanA, provider )
        Console.WriteLine( "TimeSpan {0}", converted )
        converted =  Convert.ToString( ObjOther, provider )
        Console.WriteLine( "Object   {0}", converted )

    End Sub
End Module

' This example of Convert.ToString( non-numeric, IFormatProvider )
' generates the following output. The provider type, argument type,
' and argument value are displayed.
'
' Note: The IFormatProvider object is not called for Boolean, String,
' Char, TimeSpan, and non-numeric Object.
'
' System.Globalization.NumberFormatInfo   Int32    -252645135
' System.Globalization.NumberFormatInfo   Double   61680.3855
' System.Globalization.NumberFormatInfo   Object   -98765.4321
' System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM
'
' Boolean  True
' String   Qwerty
' Char     $
' TimeSpan 00:18:00
' Object   DummyProvider

// Example of Convert.ToString( non-numeric types, IFormatProvider ).
using System;
using System.Globalization;

// An instance of this class can be passed to methods that require
// an IFormatProvider.
public class DummyProvider : IFormatProvider
{
    // Normally, GetFormat returns an object of the requested type
    // (usually itself) if it is able; otherwise, it returns Nothing.
    public object GetFormat( Type argType )
    {
        // Here, the type of argType is displayed, and GetFormat
        // always returns Nothing.
        Console.Write( "{0,-40}", argType.ToString( ) );
        return null;
    }
}

class ConvertNonNumericProviderDemo
{
    static void Main( )
    {
        // Create an instance of the IFormatProvider.
        DummyProvider provider = new DummyProvider( );
        string converted;

        // Convert these values using DummyProvider.
        int      Int32A     = -252645135;
        double   DoubleA    = 61680.3855;
        object   ObjDouble  = (object)( -98765.4321 );
        DateTime DayTimeA   = new DateTime( 2001, 9, 11, 13, 45, 0 );

        bool     BoolA      = true;
        string   StringA    = "Qwerty";
        char     CharA      = '$';
        TimeSpan TSpanA     = new TimeSpan( 0, 18, 0 );
        object   ObjOther   = (object)provider;

        Console.WriteLine( "This example of " +
            "Convert.ToString( non-numeric, IFormatProvider ) \n" +
            "generates the following output. The provider type, " +
            "argument type, \nand argument value are displayed." );
        Console.WriteLine( "\nNote: The IFormatProvider object is " +
            "not called for Boolean, String, \nChar, TimeSpan, " +
            "and non-numeric Object." );

        // The format provider is called for these conversions.
        Console.WriteLine( );
        converted = Convert.ToString( Int32A, provider );
        Console.WriteLine( "int      {0}", converted );
        converted = Convert.ToString( DoubleA, provider );
        Console.WriteLine( "double   {0}", converted );
        converted = Convert.ToString( ObjDouble, provider );
        Console.WriteLine( "object   {0}", converted );
        converted = Convert.ToString( DayTimeA, provider );
        Console.WriteLine( "DateTime {0}", converted );

        // The format provider is not called for these conversions.
        Console.WriteLine( );
        converted = Convert.ToString( BoolA, provider );
        Console.WriteLine( "bool     {0}", converted );
        converted = Convert.ToString( StringA, provider );
        Console.WriteLine( "string   {0}", converted );
        converted = Convert.ToString( CharA, provider );
        Console.WriteLine( "char     {0}", converted );
        converted = Convert.ToString( TSpanA, provider );
        Console.WriteLine( "TimeSpan {0}", converted );
        converted = Convert.ToString( ObjOther, provider );
        Console.WriteLine( "object   {0}", converted );
    }
}

/*
This example of Convert.ToString( non-numeric, IFormatProvider )
generates the following output. The provider type, argument type,
and argument value are displayed.

Note: The IFormatProvider object is not called for Boolean, String,
Char, TimeSpan, and non-numeric Object.

System.Globalization.NumberFormatInfo   int      -252645135
System.Globalization.NumberFormatInfo   double   61680.3855
System.Globalization.NumberFormatInfo   object   -98765.4321
System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM

bool     True
string   Qwerty
char     $
TimeSpan 00:18:00
object   DummyProvider

*/

// Example of Convert::ToString( non-numeric types, IFormatProvider ).
using namespace System;
using namespace System::Globalization;

#define null (Object^)0

// An instance of this class can be passed to methods that require
// an IFormatProvider.
ref class DummyProvider: public IFormatProvider
{
public:

   // Normally, GetFormat returns an object of the requested type
   // (usually itself) if it is able; otherwise, it returns Nothing.
   virtual Object^ GetFormat( Type^ argType )
   {
      // Here, the type of argType is displayed, and GetFormat
      // always returns Nothing.
      Console::Write( "{0,-40}", argType->ToString() );
      return null;
   }
};

int main()
{
   // Create an instance of the IFormatProvider.
   DummyProvider^ provider = gcnew DummyProvider;
   String^ converted;

   // Convert these values using DummyProvider.
   int Int32A = -252645135;
   double DoubleA = 61680.3855;
   Object^ ObjDouble =  -98765.4321;
   DateTime DayTimeA = DateTime(2001,9,11,13,45,0);
   bool BoolA = true;
   String^ StringA = "Qwerty";
   Char CharA = '$';
   TimeSpan TSpanA = TimeSpan(0,18,0);
   Object^ ObjOther = static_cast<Object^>(provider);
   Console::WriteLine( "This example of "
   "Convert::ToString( non-numeric, IFormatProvider* ) \n"
   "generates the following output. The provider type, "
   "argument type, \nand argument value are displayed." );
   Console::WriteLine( "\nNote: The IFormatProvider object is "
   "not called for Boolean, String, \nChar, TimeSpan, "
   "and non-numeric Object." );

   // The format provider is called for these conversions.
   Console::WriteLine();
   converted = Convert::ToString( Int32A, provider );
   Console::WriteLine( "int      {0}", converted );
   converted = Convert::ToString( DoubleA, provider );
   Console::WriteLine( "double   {0}", converted );
   converted = Convert::ToString( ObjDouble, provider );
   Console::WriteLine( "Object   {0}", converted );
   converted = Convert::ToString( DayTimeA, provider );
   Console::WriteLine( "DateTime {0}", converted );

   // The format provider is not called for these conversions.
   Console::WriteLine();
   converted = Convert::ToString( BoolA, provider );
   Console::WriteLine( "bool     {0}", converted );
   converted = Convert::ToString( StringA, provider );
   Console::WriteLine( "String   {0}", converted );
   converted = Convert::ToString( CharA, provider );
   Console::WriteLine( "Char     {0}", converted );
   converted = Convert::ToString( TSpanA, provider );
   Console::WriteLine( "TimeSpan {0}", converted );
   converted = Convert::ToString( ObjOther, provider );
   Console::WriteLine( "Object   {0}", converted );
}

/*
This example of Convert::ToString( non-numeric, IFormatProvider* )
generates the following output. The provider type, argument type,
and argument value are displayed.

Note: The IFormatProvider object is not called for Boolean, String,
Char, TimeSpan, and non-numeric Object.

System.Globalization.NumberFormatInfo   int      -252645135
System.Globalization.NumberFormatInfo   double   61680.3855
System.Globalization.NumberFormatInfo   Object   -98765.4321
System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM

bool     True
String   Qwerty
Char     $
TimeSpan 00:18:00
Object   DummyProvider
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (UInt16)

Convert
.
.
::
.
ToString 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为其等效的字符串表示形式。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToString ( _
    value As UShort _
) As String
[CLSCompliantAttribute(false)]
public static string ToString(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static String^ ToString(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToString :
        value:uint16 -> string

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 UInt16..::.ToString()()() 相同。

下面的示例将无符号 16 位整数值数组中的每个元素转换为其等效的字符串表示形式。

Dim numbers() As UShort = { UInt16.MinValue, 103, 1045, UInt16.MaxValue }
Dim result As String

For Each number As UShort In numbers
   result = Convert.ToString(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the UInt16 value 0 to the String value 0.
'    Converted the UInt16 value 103 to the String value 103.
'    Converted the UInt16 value 1045 to the String value 1045.
'    Converted the UInt16 value 65535 to the String value 65535.

ushort[] numbers = { UInt16.MinValue, 103, 1045, UInt16.MaxValue };
string result;

foreach (ushort number in numbers)
{
   result = Convert.ToString(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the UInt16 value 0 to the String value 0.
//    Converted the UInt16 value 103 to the String value 103.
//    Converted the UInt16 value 1045 to the String value 1045.
//    Converted the UInt16 value 65535 to the String value 65535.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (UInt32)

Convert
.
.
::
.
ToString 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为其等效的字符串表示形式。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToString ( _
    value As UInteger _
) As String
[CLSCompliantAttribute(false)]
public static string ToString(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static String^ ToString(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToString :
        value:uint32 -> string

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 UInt32..::.ToString()()() 相同。

下面的示例将无符号整数数组中的每个元素转换为其等效的字符串表示形式。

Dim numbers() As UInteger = { UInt32.MinValue, 103, 1045, 119543, UInt32.MaxValue }
Dim result As String

For Each number As UInteger In numbers
   result = Convert.ToString(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the UInt32 value 0 to the String value 0.
'    Converted the UInt32 value 103 to the String value 103.
'    Converted the UInt32 value 1045 to the String value 1045.
'    Converted the UInt32 value 119543 to the String value 119543.
'    Converted the UInt32 value 4294967295 to the String value 4294967295.

uint[] numbers = { UInt32.MinValue, 103, 1045, 119543, UInt32.MaxValue };
string result;

foreach (uint number in numbers)
{
   result = Convert.ToString(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the UInt32 value 0 to the String value 0.
//    Converted the UInt32 value 103 to the String value 103.
//    Converted the UInt32 value 1045 to the String value 1045.
//    Converted the UInt32 value 119543 to the String value 119543.
//    Converted the UInt32 value 4294967295 to the String value 4294967295.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (UInt64)

Convert
.
.
::
.
ToString 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为其等效的字符串表示形式。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToString ( _
    value As ULong _
) As String
[CLSCompliantAttribute(false)]
public static string ToString(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static String^ ToString(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToString :
        value:uint64 -> string

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 UInt64..::.ToString()()() 相同。

下面的示例将无符号长整数数组中的每个元素转换为其等效的字符串表示形式。

Dim numbers() As ULong = { UInt64.MinValue, 1031, 189045, UInt64.MaxValue }
Dim result As String

For Each number As ULong In numbers
   result = Convert.ToString(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the UInt64 value 0 to the String value 0.
'    Converted the UInt64 value 1031 to the String value 1031.
'    Converted the UInt64 value 189045 to the String value 189045.
'    Converted the UInt64 value 18446744073709551615 to the String value 18446744073709551615.

ulong[] numbers = { UInt64.MinValue, 1031, 189045, UInt64.MaxValue };
string result;

foreach (ulong number in numbers)
{
   result = Convert.ToString(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the UInt64 value 0 to the String value 0.
//    Converted the UInt64 value 1031 to the String value 1031.
//    Converted the UInt64 value 189045 to the String value 189045.
//    Converted the UInt64 value 18446744073709551615 to the String value 18446744073709551615.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Boolean, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Boolean, IFormatProvider)
Convert 类

将指定的布尔值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Boolean, _
    provider As IFormatProvider _
) As String
public static string ToString(
    bool value,
    IFormatProvider provider
)
public:
static String^ ToString(
    bool value,
    IFormatProvider^ provider
)
static member ToString :
        value:bool *
        provider:IFormatProvider -> string

参数

value
类型： System Boolean
要转换的布尔值。
provider
类型： System IFormatProvider
一个对象的实例。忽略此参数。 一个对象的实例。忽略此参数。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Boolean..::.ToString 相同。它为 true 值返回 Boolean..::.TrueString，并为 false 值返回 Boolean..::.FalseString。 此实现与 Boolean..::.ToString 相同。它为 true 值返回 Boolean..::.TrueString，并为 false 值返回 Boolean..::.FalseString。

下面的代码示例使用 ToString 方法，通过一个 IFormatProvider 对象（显示调用它的格式提供程序的类型），将 Boolean 值转换为 String。该示例显示未引用 IFormatProvider 对象。 下面的代码示例使用 ToString 方法，通过一个 IFormatProvider 对象（显示调用它的格式提供程序的类型），将 Boolean 值转换为 String。该示例显示未引用 IFormatProvider 对象。

' Example of Convert.ToString( non-numeric types, IFormatProvider ).
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

' An instance of this class can be passed to methods that require
' an IFormatProvider.
Public Class DummyProvider
    Implements IFormatProvider

    ' Normally, GetFormat returns an object of the requested type
    ' (usually itself) if it is able; otherwise, it returns Nothing.
    Public Function GetFormat( argType As Type ) As Object _
        Implements IFormatProvider.GetFormat

        ' Here, the type of argType is displayed, and GetFormat
        ' always returns Nothing.
        Console.Write( "{0,-40}", argType.ToString( ) )
        Return Nothing

    End Function
End Class

Module ConvertNonNumericProviderDemo

    Sub Main( )

        ' Create an instance of the IFormatProvider.
        Dim provider    As New DummyProvider( )
        Dim converted   As String

        ' Convert these values using DummyProvider.
        Dim Int32A      As Integer  = -252645135
        Dim DoubleA     As Double   = 61680.3855
        Dim ObjDouble   As Object   = CType( -98765.4321, Object )
        Dim DayTimeA    As DateTime = _
                            new DateTime( 2001, 9, 11, 13, 45, 0 )

        Dim BoolA       As Boolean  = True
        Dim StringA     As String   = "Qwerty"
        Dim CharA       As Char     = "$"c
        Dim TSpanA      As TimeSpan = New TimeSpan( 0, 18, 0 )
        Dim ObjOther    As Object   = CType( provider, Object )

        Console.WriteLine( "This example of " & _
            "Convert.ToString( non-numeric, IFormatProvider ) " & _
            vbCrLf & "generates the following output. The " & _
            "provider type, argument type, " & vbCrLf & "and " & _
            "argument value are displayed." )
        Console.WriteLine( vbCrLf & _
            "Note: The IFormatProvider object is not called for " & _
            "Boolean, String, " & vbCrLf & "Char, TimeSpan, " & _
            "and non-numeric Object." )

        ' The format provider is called for these conversions.
        Console.WriteLine( )
        converted =  Convert.ToString( Int32A, provider )
        Console.WriteLine( "Int32    {0}", converted )
        converted =  Convert.ToString( DoubleA, provider )
        Console.WriteLine( "Double   {0}", converted )
        converted =  Convert.ToString( ObjDouble, provider )
        Console.WriteLine( "Object   {0}", converted )
        converted =  Convert.ToString( DayTimeA, provider )
        Console.WriteLine( "DateTime {0}", converted )

        ' The format provider is not called for these conversions.
        Console.WriteLine( )
        converted =  Convert.ToString( BoolA, provider )
        Console.WriteLine( "Boolean  {0}", converted )
        converted =  Convert.ToString( StringA, provider )
        Console.WriteLine( "String   {0}", converted )
        converted =  Convert.ToString( CharA, provider )
        Console.WriteLine( "Char     {0}", converted )
        converted =  Convert.ToString( TSpanA, provider )
        Console.WriteLine( "TimeSpan {0}", converted )
        converted =  Convert.ToString( ObjOther, provider )
        Console.WriteLine( "Object   {0}", converted )

    End Sub
End Module

' This example of Convert.ToString( non-numeric, IFormatProvider )
' generates the following output. The provider type, argument type,
' and argument value are displayed.
'
' Note: The IFormatProvider object is not called for Boolean, String,
' Char, TimeSpan, and non-numeric Object.
'
' System.Globalization.NumberFormatInfo   Int32    -252645135
' System.Globalization.NumberFormatInfo   Double   61680.3855
' System.Globalization.NumberFormatInfo   Object   -98765.4321
' System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM
'
' Boolean  True
' String   Qwerty
' Char     $
' TimeSpan 00:18:00
' Object   DummyProvider

// Example of Convert.ToString( non-numeric types, IFormatProvider ).
using System;
using System.Globalization;

// An instance of this class can be passed to methods that require
// an IFormatProvider.
public class DummyProvider : IFormatProvider
{
    // Normally, GetFormat returns an object of the requested type
    // (usually itself) if it is able; otherwise, it returns Nothing.
    public object GetFormat( Type argType )
    {
        // Here, the type of argType is displayed, and GetFormat
        // always returns Nothing.
        Console.Write( "{0,-40}", argType.ToString( ) );
        return null;
    }
}

class ConvertNonNumericProviderDemo
{
    static void Main( )
    {
        // Create an instance of the IFormatProvider.
        DummyProvider provider = new DummyProvider( );
        string converted;

        // Convert these values using DummyProvider.
        int      Int32A     = -252645135;
        double   DoubleA    = 61680.3855;
        object   ObjDouble  = (object)( -98765.4321 );
        DateTime DayTimeA   = new DateTime( 2001, 9, 11, 13, 45, 0 );

        bool     BoolA      = true;
        string   StringA    = "Qwerty";
        char     CharA      = '$';
        TimeSpan TSpanA     = new TimeSpan( 0, 18, 0 );
        object   ObjOther   = (object)provider;

        Console.WriteLine( "This example of " +
            "Convert.ToString( non-numeric, IFormatProvider ) \n" +
            "generates the following output. The provider type, " +
            "argument type, \nand argument value are displayed." );
        Console.WriteLine( "\nNote: The IFormatProvider object is " +
            "not called for Boolean, String, \nChar, TimeSpan, " +
            "and non-numeric Object." );

        // The format provider is called for these conversions.
        Console.WriteLine( );
        converted = Convert.ToString( Int32A, provider );
        Console.WriteLine( "int      {0}", converted );
        converted = Convert.ToString( DoubleA, provider );
        Console.WriteLine( "double   {0}", converted );
        converted = Convert.ToString( ObjDouble, provider );
        Console.WriteLine( "object   {0}", converted );
        converted = Convert.ToString( DayTimeA, provider );
        Console.WriteLine( "DateTime {0}", converted );

        // The format provider is not called for these conversions.
        Console.WriteLine( );
        converted = Convert.ToString( BoolA, provider );
        Console.WriteLine( "bool     {0}", converted );
        converted = Convert.ToString( StringA, provider );
        Console.WriteLine( "string   {0}", converted );
        converted = Convert.ToString( CharA, provider );
        Console.WriteLine( "char     {0}", converted );
        converted = Convert.ToString( TSpanA, provider );
        Console.WriteLine( "TimeSpan {0}", converted );
        converted = Convert.ToString( ObjOther, provider );
        Console.WriteLine( "object   {0}", converted );
    }
}

/*
This example of Convert.ToString( non-numeric, IFormatProvider )
generates the following output. The provider type, argument type,
and argument value are displayed.

Note: The IFormatProvider object is not called for Boolean, String,
Char, TimeSpan, and non-numeric Object.

System.Globalization.NumberFormatInfo   int      -252645135
System.Globalization.NumberFormatInfo   double   61680.3855
System.Globalization.NumberFormatInfo   object   -98765.4321
System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM

bool     True
string   Qwerty
char     $
TimeSpan 00:18:00
object   DummyProvider

*/

// Example of Convert::ToString( non-numeric types, IFormatProvider ).
using namespace System;
using namespace System::Globalization;

#define null (Object^)0

// An instance of this class can be passed to methods that require
// an IFormatProvider.
ref class DummyProvider: public IFormatProvider
{
public:

   // Normally, GetFormat returns an object of the requested type
   // (usually itself) if it is able; otherwise, it returns Nothing.
   virtual Object^ GetFormat( Type^ argType )
   {
      // Here, the type of argType is displayed, and GetFormat
      // always returns Nothing.
      Console::Write( "{0,-40}", argType->ToString() );
      return null;
   }
};

int main()
{
   // Create an instance of the IFormatProvider.
   DummyProvider^ provider = gcnew DummyProvider;
   String^ converted;

   // Convert these values using DummyProvider.
   int Int32A = -252645135;
   double DoubleA = 61680.3855;
   Object^ ObjDouble =  -98765.4321;
   DateTime DayTimeA = DateTime(2001,9,11,13,45,0);
   bool BoolA = true;
   String^ StringA = "Qwerty";
   Char CharA = '$';
   TimeSpan TSpanA = TimeSpan(0,18,0);
   Object^ ObjOther = static_cast<Object^>(provider);
   Console::WriteLine( "This example of "
   "Convert::ToString( non-numeric, IFormatProvider* ) \n"
   "generates the following output. The provider type, "
   "argument type, \nand argument value are displayed." );
   Console::WriteLine( "\nNote: The IFormatProvider object is "
   "not called for Boolean, String, \nChar, TimeSpan, "
   "and non-numeric Object." );

   // The format provider is called for these conversions.
   Console::WriteLine();
   converted = Convert::ToString( Int32A, provider );
   Console::WriteLine( "int      {0}", converted );
   converted = Convert::ToString( DoubleA, provider );
   Console::WriteLine( "double   {0}", converted );
   converted = Convert::ToString( ObjDouble, provider );
   Console::WriteLine( "Object   {0}", converted );
   converted = Convert::ToString( DayTimeA, provider );
   Console::WriteLine( "DateTime {0}", converted );

   // The format provider is not called for these conversions.
   Console::WriteLine();
   converted = Convert::ToString( BoolA, provider );
   Console::WriteLine( "bool     {0}", converted );
   converted = Convert::ToString( StringA, provider );
   Console::WriteLine( "String   {0}", converted );
   converted = Convert::ToString( CharA, provider );
   Console::WriteLine( "Char     {0}", converted );
   converted = Convert::ToString( TSpanA, provider );
   Console::WriteLine( "TimeSpan {0}", converted );
   converted = Convert::ToString( ObjOther, provider );
   Console::WriteLine( "Object   {0}", converted );
}

/*
This example of Convert::ToString( non-numeric, IFormatProvider* )
generates the following output. The provider type, argument type,
and argument value are displayed.

Note: The IFormatProvider object is not called for Boolean, String,
Char, TimeSpan, and non-numeric Object.

System.Globalization.NumberFormatInfo   int      -252645135
System.Globalization.NumberFormatInfo   double   61680.3855
System.Globalization.NumberFormatInfo   Object   -98765.4321
System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM

bool     True
String   Qwerty
Char     $
TimeSpan 00:18:00
Object   DummyProvider
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Byte, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Byte, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定的 8 位无符号整数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Byte, _
    provider As IFormatProvider _
) As String
public static string ToString(
    byte value,
    IFormatProvider provider
)
public:
static String^ ToString(
    unsigned char value,
    IFormatProvider^ provider
)
static member ToString :
        value:byte *
        provider:IFormatProvider -> string

参数

value
类型： System Byte
要转换的 8 位无符号整数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Byte..::.ToString 相同。

下面的示例使用 en-US 和 fr-FR 区域性的格式设置约定将无符号字节数组中的每个元素转换为其等效的字符串表示形式。因为“G”说明符默认情况下仅输出字节值字符串表达形式中的十进制数字，provider 参数不会影响返回字符串的格式设置。 下面的示例使用 en-US 和 fr-FR 区域性的格式设置约定将无符号字节数组中的每个元素转换为其等效的字符串表示形式。因为“G”说明符默认情况下仅输出字节值字符串表达形式中的十进制数字，provider 参数不会影响返回字符串的格式设置。

' Define an array of numbers to display.
Dim numbers() As Byte = { 12, 100, Byte.MaxValue }
' Define the culture names used to display them.
Dim cultureNames() As String = { "en-US", "fr-FR" }

For Each number As Byte In numbers
   Console.WriteLine("{0}:", Convert.ToString(number, _
                             System.Globalization.CultureInfo.InvariantCulture))
   For Each cultureName As String In cultureNames
      Dim culture As New System.Globalization.CultureInfo(cultureName)
      Console.WriteLine("   {0}: {1,20}", _
                        culture.Name, Convert.ToString(number, culture))
   Next
   Console.WriteLine()
Next
' The example displays the following output:
'       12:
'          en-US:                   12
'          fr-FR:                   12
'
'       100:
'          en-US:                  100
'          fr-FR:                  100
'
'       255:
'          en-US:                  255
'          fr-FR:                  255

byte[] numbers = { 12, 100, Byte.MaxValue };
// Define the culture names used to display them.
string[] cultureNames = { "en-US", "fr-FR" };

foreach (byte number in numbers)
{
   Console.WriteLine("{0}:", Convert.ToString(number,
                             System.Globalization.CultureInfo.InvariantCulture));
   foreach (string cultureName in cultureNames)
   {
      System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(cultureName);
      Console.WriteLine("   {0}: {1,20}",
                        culture.Name, Convert.ToString(number, culture));
   }
   Console.WriteLine();
}
// The example displays the following output:
//       12:
//          en-US:                   12
//          fr-FR:                   12
//
//       100:
//          en-US:                  100
//          fr-FR:                  100
//
//       255:
//          en-US:                  255
//          fr-FR:                  255

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Byte, Int32)

Convert
.
.
::
.
ToString 方法 (Byte, Int32)
Convert 类

将 8 位无符号整数的值转换为其等效的指定基数的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Byte, _
    toBase As Integer _
) As String
public static string ToString(
    byte value,
    int toBase
)
public:
static String^ ToString(
    unsigned char value,
    int toBase
)
static member ToString :
        value:byte *
        toBase:int -> string

参数

value
类型： System Byte
要转换的 8 位无符号整数。
toBase
类型： System Int32
返回值的基数，必须是 2、8、10 或 16。

返回值

类型： System String
以 toBase 为基的 value 的字符串表示形式。
异常 | 条件
ArgumentException | toBase 不是 2、8、10 或 16。

如果 toBase 不等于 10，由 Convert..::.ToString(Byte, Int32) 方法返回的字符串将只通过量级表示 value。如果调用该方法来创建以后将被转换回数字的字符串，则应调用采用仅数量的数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToByte(String, Int32) 或 Byte..::.Parse(String, NumberStyles)。 如果 toBase 不等于 10，由 Convert..::.ToString(Byte, Int32) 方法返回的字符串将只通过量级表示 value。如果调用该方法来创建以后将被转换回数字的字符串，则应调用采用仅数量的数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToByte(String, Int32) 或 Byte..::.Parse(String, NumberStyles)。 如果 toBase 不等于 10，由 Convert..::.ToString(Byte, Int32) 方法返回的字符串将只通过量级表示 value。如果调用该方法来创建以后将被转换回数字的字符串，则应调用采用仅数量的数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToByte(String, Int32) 或 Byte..::.Parse(String, NumberStyles)。

下面的示例将字节数组中的每个元素转换为其等效的二进制、十六进制、十进制和十六进制字符串表示形式。

Dim bases() As Integer = { 2, 8, 10, 16}
Dim numbers() As Byte = { Byte.MinValue, 12, 103, Byte.MaxValue}

For Each base As Integer In bases
   Console.WriteLine("Base {0} conversion:", base)
   For Each number As Byte In numbers
      Console.WriteLine("   {0,-5}  -->  0x{1}", _
                        number, Convert.ToString(number, base))
   Next
Next
' The example displays the following output:
'       Base 2 conversion:
'          0      -->  0x0
'          12     -->  0x1100
'          103    -->  0x1100111
'          255    -->  0x11111111
'       Base 8 conversion:
'          0      -->  0x0
'          12     -->  0x14
'          103    -->  0x147
'          255    -->  0x377
'       Base 10 conversion:
'          0      -->  0x0
'          12     -->  0x12
'          103    -->  0x103
'          255    -->  0x255
'       Base 16 conversion:
'          0      -->  0x0
'          12     -->  0xc
'          103    -->  0x67
'          255    -->  0xff

int[] bases = { 2, 8, 10, 16};
byte[] numbers = { Byte.MinValue, 12, 103, Byte.MaxValue};

foreach (int baseValue in bases)
{
   Console.WriteLine("Base {0} conversion:", baseValue);
   foreach (byte number in numbers)
   {
      Console.WriteLine("   {0,-5}  -->  0x{1}",
                        number, Convert.ToString(number, baseValue));
   }
}
// The example displays the following output:
//       Base 2 conversion:
//          0      -->  0x0
//          12     -->  0x1100
//          103    -->  0x1100111
//          255    -->  0x11111111
//       Base 8 conversion:
//          0      -->  0x0
//          12     -->  0x14
//          103    -->  0x147
//          255    -->  0x377
//       Base 10 conversion:
//          0      -->  0x0
//          12     -->  0x12
//          103    -->  0x103
//          255    -->  0x255
//       Base 16 conversion:
//          0      -->  0x0
//          12     -->  0xc
//          103    -->  0x67
//          255    -->  0xff

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Char, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Char, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息将指定的 Unicode 字符的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Char, _
    provider As IFormatProvider _
) As String
public static string ToString(
    char value,
    IFormatProvider provider
)
public:
static String^ ToString(
    wchar_t value,
    IFormatProvider^ provider
)
static member ToString :
        value:char *
        provider:IFormatProvider -> string

参数

value
类型： System Char
要转换的 Unicode 字符。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Char..::.ToString 相同。

下面的代码示例使用 ToString 方法，通过一个 IFormatProvider 对象（显示调用它的格式提供程序的类型），将 Char 值转换为 String。该示例显示未引用 IFormatProvider 对象。 下面的代码示例使用 ToString 方法，通过一个 IFormatProvider 对象（显示调用它的格式提供程序的类型），将 Char 值转换为 String。该示例显示未引用 IFormatProvider 对象。

' Example of Convert.ToString( non-numeric types, IFormatProvider ).
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

' An instance of this class can be passed to methods that require
' an IFormatProvider.
Public Class DummyProvider
    Implements IFormatProvider

    ' Normally, GetFormat returns an object of the requested type
    ' (usually itself) if it is able; otherwise, it returns Nothing.
    Public Function GetFormat( argType As Type ) As Object _
        Implements IFormatProvider.GetFormat

        ' Here, the type of argType is displayed, and GetFormat
        ' always returns Nothing.
        Console.Write( "{0,-40}", argType.ToString( ) )
        Return Nothing

    End Function
End Class

Module ConvertNonNumericProviderDemo

    Sub Main( )

        ' Create an instance of the IFormatProvider.
        Dim provider    As New DummyProvider( )
        Dim converted   As String

        ' Convert these values using DummyProvider.
        Dim Int32A      As Integer  = -252645135
        Dim DoubleA     As Double   = 61680.3855
        Dim ObjDouble   As Object   = CType( -98765.4321, Object )
        Dim DayTimeA    As DateTime = _
                            new DateTime( 2001, 9, 11, 13, 45, 0 )

        Dim BoolA       As Boolean  = True
        Dim StringA     As String   = "Qwerty"
        Dim CharA       As Char     = "$"c
        Dim TSpanA      As TimeSpan = New TimeSpan( 0, 18, 0 )
        Dim ObjOther    As Object   = CType( provider, Object )

        Console.WriteLine( "This example of " & _
            "Convert.ToString( non-numeric, IFormatProvider ) " & _
            vbCrLf & "generates the following output. The " & _
            "provider type, argument type, " & vbCrLf & "and " & _
            "argument value are displayed." )
        Console.WriteLine( vbCrLf & _
            "Note: The IFormatProvider object is not called for " & _
            "Boolean, String, " & vbCrLf & "Char, TimeSpan, " & _
            "and non-numeric Object." )

        ' The format provider is called for these conversions.
        Console.WriteLine( )
        converted =  Convert.ToString( Int32A, provider )
        Console.WriteLine( "Int32    {0}", converted )
        converted =  Convert.ToString( DoubleA, provider )
        Console.WriteLine( "Double   {0}", converted )
        converted =  Convert.ToString( ObjDouble, provider )
        Console.WriteLine( "Object   {0}", converted )
        converted =  Convert.ToString( DayTimeA, provider )
        Console.WriteLine( "DateTime {0}", converted )

        ' The format provider is not called for these conversions.
        Console.WriteLine( )
        converted =  Convert.ToString( BoolA, provider )
        Console.WriteLine( "Boolean  {0}", converted )
        converted =  Convert.ToString( StringA, provider )
        Console.WriteLine( "String   {0}", converted )
        converted =  Convert.ToString( CharA, provider )
        Console.WriteLine( "Char     {0}", converted )
        converted =  Convert.ToString( TSpanA, provider )
        Console.WriteLine( "TimeSpan {0}", converted )
        converted =  Convert.ToString( ObjOther, provider )
        Console.WriteLine( "Object   {0}", converted )

    End Sub
End Module

' This example of Convert.ToString( non-numeric, IFormatProvider )
' generates the following output. The provider type, argument type,
' and argument value are displayed.
'
' Note: The IFormatProvider object is not called for Boolean, String,
' Char, TimeSpan, and non-numeric Object.
'
' System.Globalization.NumberFormatInfo   Int32    -252645135
' System.Globalization.NumberFormatInfo   Double   61680.3855
' System.Globalization.NumberFormatInfo   Object   -98765.4321
' System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM
'
' Boolean  True
' String   Qwerty
' Char     $
' TimeSpan 00:18:00
' Object   DummyProvider

// Example of Convert.ToString( non-numeric types, IFormatProvider ).
using System;
using System.Globalization;

// An instance of this class can be passed to methods that require
// an IFormatProvider.
public class DummyProvider : IFormatProvider
{
    // Normally, GetFormat returns an object of the requested type
    // (usually itself) if it is able; otherwise, it returns Nothing.
    public object GetFormat( Type argType )
    {
        // Here, the type of argType is displayed, and GetFormat
        // always returns Nothing.
        Console.Write( "{0,-40}", argType.ToString( ) );
        return null;
    }
}

class ConvertNonNumericProviderDemo
{
    static void Main( )
    {
        // Create an instance of the IFormatProvider.
        DummyProvider provider = new DummyProvider( );
        string converted;

        // Convert these values using DummyProvider.
        int      Int32A     = -252645135;
        double   DoubleA    = 61680.3855;
        object   ObjDouble  = (object)( -98765.4321 );
        DateTime DayTimeA   = new DateTime( 2001, 9, 11, 13, 45, 0 );

        bool     BoolA      = true;
        string   StringA    = "Qwerty";
        char     CharA      = '$';
        TimeSpan TSpanA     = new TimeSpan( 0, 18, 0 );
        object   ObjOther   = (object)provider;

        Console.WriteLine( "This example of " +
            "Convert.ToString( non-numeric, IFormatProvider ) \n" +
            "generates the following output. The provider type, " +
            "argument type, \nand argument value are displayed." );
        Console.WriteLine( "\nNote: The IFormatProvider object is " +
            "not called for Boolean, String, \nChar, TimeSpan, " +
            "and non-numeric Object." );

        // The format provider is called for these conversions.
        Console.WriteLine( );
        converted = Convert.ToString( Int32A, provider );
        Console.WriteLine( "int      {0}", converted );
        converted = Convert.ToString( DoubleA, provider );
        Console.WriteLine( "double   {0}", converted );
        converted = Convert.ToString( ObjDouble, provider );
        Console.WriteLine( "object   {0}", converted );
        converted = Convert.ToString( DayTimeA, provider );
        Console.WriteLine( "DateTime {0}", converted );

        // The format provider is not called for these conversions.
        Console.WriteLine( );
        converted = Convert.ToString( BoolA, provider );
        Console.WriteLine( "bool     {0}", converted );
        converted = Convert.ToString( StringA, provider );
        Console.WriteLine( "string   {0}", converted );
        converted = Convert.ToString( CharA, provider );
        Console.WriteLine( "char     {0}", converted );
        converted = Convert.ToString( TSpanA, provider );
        Console.WriteLine( "TimeSpan {0}", converted );
        converted = Convert.ToString( ObjOther, provider );
        Console.WriteLine( "object   {0}", converted );
    }
}

/*
This example of Convert.ToString( non-numeric, IFormatProvider )
generates the following output. The provider type, argument type,
and argument value are displayed.

Note: The IFormatProvider object is not called for Boolean, String,
Char, TimeSpan, and non-numeric Object.

System.Globalization.NumberFormatInfo   int      -252645135
System.Globalization.NumberFormatInfo   double   61680.3855
System.Globalization.NumberFormatInfo   object   -98765.4321
System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM

bool     True
string   Qwerty
char     $
TimeSpan 00:18:00
object   DummyProvider

*/

// Example of Convert::ToString( non-numeric types, IFormatProvider ).
using namespace System;
using namespace System::Globalization;

#define null (Object^)0

// An instance of this class can be passed to methods that require
// an IFormatProvider.
ref class DummyProvider: public IFormatProvider
{
public:

   // Normally, GetFormat returns an object of the requested type
   // (usually itself) if it is able; otherwise, it returns Nothing.
   virtual Object^ GetFormat( Type^ argType )
   {
      // Here, the type of argType is displayed, and GetFormat
      // always returns Nothing.
      Console::Write( "{0,-40}", argType->ToString() );
      return null;
   }
};

int main()
{
   // Create an instance of the IFormatProvider.
   DummyProvider^ provider = gcnew DummyProvider;
   String^ converted;

   // Convert these values using DummyProvider.
   int Int32A = -252645135;
   double DoubleA = 61680.3855;
   Object^ ObjDouble =  -98765.4321;
   DateTime DayTimeA = DateTime(2001,9,11,13,45,0);
   bool BoolA = true;
   String^ StringA = "Qwerty";
   Char CharA = '$';
   TimeSpan TSpanA = TimeSpan(0,18,0);
   Object^ ObjOther = static_cast<Object^>(provider);
   Console::WriteLine( "This example of "
   "Convert::ToString( non-numeric, IFormatProvider* ) \n"
   "generates the following output. The provider type, "
   "argument type, \nand argument value are displayed." );
   Console::WriteLine( "\nNote: The IFormatProvider object is "
   "not called for Boolean, String, \nChar, TimeSpan, "
   "and non-numeric Object." );

   // The format provider is called for these conversions.
   Console::WriteLine();
   converted = Convert::ToString( Int32A, provider );
   Console::WriteLine( "int      {0}", converted );
   converted = Convert::ToString( DoubleA, provider );
   Console::WriteLine( "double   {0}", converted );
   converted = Convert::ToString( ObjDouble, provider );
   Console::WriteLine( "Object   {0}", converted );
   converted = Convert::ToString( DayTimeA, provider );
   Console::WriteLine( "DateTime {0}", converted );

   // The format provider is not called for these conversions.
   Console::WriteLine();
   converted = Convert::ToString( BoolA, provider );
   Console::WriteLine( "bool     {0}", converted );
   converted = Convert::ToString( StringA, provider );
   Console::WriteLine( "String   {0}", converted );
   converted = Convert::ToString( CharA, provider );
   Console::WriteLine( "Char     {0}", converted );
   converted = Convert::ToString( TSpanA, provider );
   Console::WriteLine( "TimeSpan {0}", converted );
   converted = Convert::ToString( ObjOther, provider );
   Console::WriteLine( "Object   {0}", converted );
}

/*
This example of Convert::ToString( non-numeric, IFormatProvider* )
generates the following output. The provider type, argument type,
and argument value are displayed.

Note: The IFormatProvider object is not called for Boolean, String,
Char, TimeSpan, and non-numeric Object.

System.Globalization.NumberFormatInfo   int      -252645135
System.Globalization.NumberFormatInfo   double   61680.3855
System.Globalization.NumberFormatInfo   Object   -98765.4321
System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM

bool     True
String   Qwerty
Char     $
TimeSpan 00:18:00
Object   DummyProvider
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (DateTime, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (DateTime, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定 DateTime 的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As DateTime, _
    provider As IFormatProvider _
) As String
public static string ToString(
    DateTime value,
    IFormatProvider provider
)
public:
static String^ ToString(
    DateTime value,
    IFormatProvider^ provider
)
static member ToString :
        value:DateTime *
        provider:IFormatProvider -> string

参数

value
类型： System DateTime
要转换的日期和时间值。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 DateTime..::.ToString(IFormatProvider) 相同。

下面的示例将 DateTime 值转换为 8 种不同区域性中的等效字符串表示形式。

' Specify the date to be formatted using various cultures.
Dim tDate As New Date(2010, 4, 15, 20, 30, 40, 333)
' Specify the cultures.
Dim cultureNames() As String = { "en-US", "es-AR", "fr-FR", "hi-IN", _
                                 "ja-JP", "nl-NL", "ru-RU", "ur-PK" }

Console.WriteLine("Converting the date {0}: ", _
                  Convert.ToString(tDate, _
                          System.Globalization.CultureInfo.InvariantCulture))

For Each cultureName As String In CultureNames
   Dim culture As New System.Globalization.CultureInfo(cultureName)
   Dim dateString As String = Convert.ToString(tDate, culture)
   Console.WriteLine("   {0}:  {1,-12}", _
                     culture.Name, dateString)
Next
' The example displays the following output:
'       Converting the date 04/15/2010 20:30:40:
'          en-US:  4/15/2010 8:30:40 PM
'          es-AR:  15/04/2010 08:30:40 p.m.
'          fr-FR:  15/04/2010 20:30:40
'          hi-IN:  15-04-2010 20:30:40
'          ja-JP:  2010/04/15 20:30:40
'          nl-NL:  15-4-2010 20:30:40
'          ru-RU:  15.04.2010 20:30:40
'          ur-PK:  15/04/2010 8:30:40 PM

// Specify the date to be formatted using various cultures.
DateTime tDate = new DateTime(2010, 4, 15, 20, 30, 40, 333);
// Specify the cultures.
string[] cultureNames = { "en-US", "es-AR", "fr-FR", "hi-IN",
                          "ja-JP", "nl-NL", "ru-RU", "ur-PK" };

Console.WriteLine("Converting the date {0}: ",
                  Convert.ToString(tDate,
                          System.Globalization.CultureInfo.InvariantCulture));

foreach (string cultureName in cultureNames)
{
   System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(cultureName);
   string dateString = Convert.ToString(tDate, culture);
   Console.WriteLine("   {0}:  {1,-12}",
                     culture.Name, dateString);
}
// The example displays the following output:
//       Converting the date 04/15/2010 20:30:40:
//          en-US:  4/15/2010 8:30:40 PM
//          es-AR:  15/04/2010 08:30:40 p.m.
//          fr-FR:  15/04/2010 20:30:40
//          hi-IN:  15-04-2010 20:30:40
//          ja-JP:  2010/04/15 20:30:40
//          nl-NL:  15-4-2010 20:30:40
//          ru-RU:  15.04.2010 20:30:40
//          ur-PK:  15/04/2010 8:30:40 PM

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Decimal, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Decimal, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息将指定的十进制数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Decimal, _
    provider As IFormatProvider _
) As String
public static string ToString(
    decimal value,
    IFormatProvider provider
)
public:
static String^ ToString(
    Decimal value,
    IFormatProvider^ provider
)
static member ToString :
        value:decimal *
        provider:IFormatProvider -> string

参数

value
类型： System Decimal
要转换的十进制数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Decimal..::.ToString(IFormatProvider) 相同。

下面的示例将 Decimal 值数组中的每个元素转换为 4 种不同区域性中的等效字符串表示形式。

' Define an array of numbers to display.
Dim numbers() As Decimal = { 1734231911290.16d, -17394.32921d, _
                             3193.23d, 98012368321.684d }
' Define the culture names used to display them.
Dim cultureNames() As String = { "en-US", "fr-FR", "ja-JP", "ru-RU" }

For Each number As Decimal In numbers
   Console.WriteLine("{0}:", Convert.ToString(number, _
                             System.Globalization.CultureInfo.InvariantCulture))
   For Each cultureName As String In cultureNames
      Dim culture As New System.Globalization.CultureInfo(cultureName)
      Console.WriteLine("   {0}: {1,20}", _
                        culture.Name, Convert.ToString(number, culture))
   Next
   Console.WriteLine()
Next
' The example displays the following output:
'    1734231911290.16:
'       en-US:     1734231911290.16
'       fr-FR:     1734231911290,16
'       ja-JP:     1734231911290.16
'       ru-RU:     1734231911290,16
'
'    -17394.32921:
'       en-US:         -17394.32921
'       fr-FR:         -17394,32921
'       ja-JP:         -17394.32921
'       ru-RU:         -17394,32921
'
'    3193.23:
'       en-US:              3193.23
'       fr-FR:              3193,23
'       ja-JP:              3193.23
'       ru-RU:              3193,23
'
'    98012368321.684:
'       en-US:      98012368321.684
'       fr-FR:      98012368321,684
'       ja-JP:      98012368321.684
'       ru-RU:      98012368321,684

// Define an array of numbers to display.
decimal[] numbers = { 1734231911290.16m, -17394.32921m,
                      3193.23m, 98012368321.684m };
// Define the culture names used to display them.
string[] cultureNames = { "en-US", "fr-FR", "ja-JP", "ru-RU" };

foreach (decimal number in numbers)
{
   Console.WriteLine("{0}:", Convert.ToString(number,
                             System.Globalization.CultureInfo.InvariantCulture));
   foreach (string cultureName in cultureNames)
   {
      System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(cultureName);
      Console.WriteLine("   {0}: {1,20}",
                        culture.Name, Convert.ToString(number, culture));
   }
   Console.WriteLine();
}
// The example displays the following output:
//    1734231911290.16:
//       en-US:     1734231911290.16
//       fr-FR:     1734231911290,16
//       ja-JP:     1734231911290.16
//       ru-RU:     1734231911290,16
//
//    -17394.32921:
//       en-US:         -17394.32921
//       fr-FR:         -17394,32921
//       ja-JP:         -17394.32921
//       ru-RU:         -17394,32921
//
//    3193.23:
//       en-US:              3193.23
//       fr-FR:              3193,23
//       ja-JP:              3193.23
//       ru-RU:              3193,23
//
//    98012368321.684:
//       en-US:      98012368321.684
//       fr-FR:      98012368321,684
//       ja-JP:      98012368321.684
//       ru-RU:      98012368321,684

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Double, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Double, IFormatProvider)
Convert 类

将指定的双精度浮点数的值转换其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Double, _
    provider As IFormatProvider _
) As String
public static string ToString(
    double value,
    IFormatProvider provider
)
public:
static String^ ToString(
    double value,
    IFormatProvider^ provider
)
static member ToString :
        value:float *
        provider:IFormatProvider -> string

参数

value
类型： System Double
要转换的双精度浮点数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Double..::.ToString(IFormatProvider) 相同

下面的示例将 Double 值数组中的每个元素转换为 4 种不同区域性中的等效字符串表示形式。

' Define an array of numbers to display.
Dim numbers() As Double = { -1.5345e16, -123.4321, 19092.123, _
                            1.1734231911290e16 }
' Define the culture names used to display them.
Dim cultureNames() As String = { "en-US", "fr-FR", "ja-JP", "ru-RU" }

For Each number As Double In numbers
   Console.WriteLine("{0}:", Convert.ToString(number, _
                             System.Globalization.CultureInfo.InvariantCulture))
   For Each cultureName As String In cultureNames
      Dim culture As New System.Globalization.CultureInfo(cultureName)
      Console.WriteLine("   {0}: {1,20}", _
                        culture.Name, Convert.ToString(number, culture))
   Next
   Console.WriteLine()
Next
' The example displays the following output:
'    -1.5345E+16:
'       en-US:          -1.5345E+16
'       fr-FR:          -1,5345E+16
'       ja-JP:          -1.5345E+16
'       ru-RU:          -1,5345E+16
'
'    -123.4321:
'       en-US:            -123.4321
'       fr-FR:            -123,4321
'       ja-JP:            -123.4321
'       ru-RU:            -123,4321
'
'    19092.123:
'       en-US:            19092.123
'       fr-FR:            19092,123
'       ja-JP:            19092.123
'       ru-RU:            19092,123
'
'    1.173423191129E+16:
'       en-US:   1.173423191129E+16
'       fr-FR:   1,173423191129E+16
'       ja-JP:   1.173423191129E+16
'       ru-RU:   1,173423191129E+16

// Define an array of numbers to display.
double[] numbers = { -1.5345e16, -123.4321, 19092.123, 1.1734231911290e16 };
// Define the culture names used to display them.
string[] cultureNames = { "en-US", "fr-FR", "ja-JP", "ru-RU" };

foreach (double number in numbers)
{
   Console.WriteLine("{0}:", Convert.ToString(number,
                             System.Globalization.CultureInfo.InvariantCulture));
   foreach (string cultureName in cultureNames)
   {
      System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(cultureName);
      Console.WriteLine("   {0}: {1,20}",
                        culture.Name, Convert.ToString(number, culture));
   }
   Console.WriteLine();
}
// The example displays the following output:
//    -1.5345E+16:
//       en-US:          -1.5345E+16
//       fr-FR:          -1,5345E+16
//       ja-JP:          -1.5345E+16
//       ru-RU:          -1,5345E+16
//
//    -123.4321:
//       en-US:            -123.4321
//       fr-FR:            -123,4321
//       ja-JP:            -123.4321
//       ru-RU:            -123,4321
//
//    19092.123:
//       en-US:            19092.123
//       fr-FR:            19092,123
//       ja-JP:            19092.123
//       ru-RU:            19092,123
//
//    1.173423191129E+16:
//       en-US:   1.173423191129E+16
//       fr-FR:   1,173423191129E+16
//       ja-JP:   1.173423191129E+16
//       ru-RU:   1,173423191129E+16

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Int16, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Int16, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定的 16 位带符号整数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Short, _
    provider As IFormatProvider _
) As String
public static string ToString(
    short value,
    IFormatProvider provider
)
public:
static String^ ToString(
    short value,
    IFormatProvider^ provider
)
static member ToString :
        value:int16 *
        provider:IFormatProvider -> string

参数

value
类型： System Int16
要转换的 16 位带符号整数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Int16..::.ToString(IFormatProvider) 相同。

下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(Int16, IFormatProvider) 方法，将 16 位整数数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(Int16, IFormatProvider) 方法，将 16 位整数数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(Int16, IFormatProvider) 方法，将 16 位整数数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。

Dim numbers() As Short = { Int16.MinValue, Int16.MaxValue}
Dim nfi As New System.Globalization.NumberFormatInfo()
nfi.NegativeSign = "~"
nfi.PositiveSign = "!"

For Each number As Short In numbers
   Console.WriteLine("{0,-8}  -->  {1,8}", _
                     Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture), _
                     Convert.ToString(number, nfi))
Next
' The example displays the following output:
'       -32768    -->    ~32768
'       32767     -->     32767

short[] numbers = { Int16.MinValue, Int16.MaxValue};
System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.NegativeSign = "~";
nfi.PositiveSign = "!";

foreach (short number in numbers)
   Console.WriteLine("{0,-8}  -->  {1,8}",
                     Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture),
                     Convert.ToString(number, nfi));
// The example displays the following output:
//       -32768    -->    ~32768
//       32767     -->     32767

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Int16, Int32)

Convert
.
.
::
.
ToString 方法 (Int16, Int32)
Convert 类

将 16 位带符号整数的值转换为其指定基的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Short, _
    toBase As Integer _
) As String
public static string ToString(
    short value,
    int toBase
)
public:
static String^ ToString(
    short value,
    int toBase
)
static member ToString :
        value:int16 *
        toBase:int -> string

参数

value
类型： System Int16
要转换的 16 位带符号整数。
toBase
类型： System Int32
返回值的基数，必须是 2、8、10 或 16。

返回值

类型： System String
以 toBase 为基的 value 的字符串表示形式。
异常 | 条件
ArgumentException | toBase 不是 2、8、10 或 16。

如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着高序位字节的高序位（第 15 位）被解释为符号位。如果调用 ToString(Int16, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt16(String, Int32) 和 Int16..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着高序位字节的高序位（第 15 位）被解释为符号位。如果调用 ToString(Int16, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt16(String, Int32) 和 Int16..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着高序位字节的高序位（第 15 位）被解释为符号位。如果调用 ToString(Int16, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt16(String, Int32) 和 Int16..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着高序位字节的高序位（第 15 位）被解释为符号位。如果调用 ToString(Int16, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt16(String, Int32) 和 Int16..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着高序位字节的高序位（第 15 位）被解释为符号位。如果调用 ToString(Int16, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt16(String, Int32) 和 Int16..::.Parse(String, NumberStyles)。

下面的示例将 16 位带符号整数数组中的每个元素转换为其等效的二进制、十六进制、十进制和十六进制字符串表示形式。

Dim bases() As Integer = { 2, 8, 10, 16}
Dim numbers() As Short = { Int16.MinValue, -13621, -18, 12, 19142, _
                           Int16.MaxValue }

For Each base As Integer In bases
   Console.WriteLine("Base {0} conversion:", base)
   For Each number As Short In numbers
      Console.WriteLine("   {0,-8}  -->  0x{1}", _
                        number, Convert.ToString(number, base))
   Next
Next
' The example displays the following output:
'       Base 2 conversion:
'          -32768    -->  0x1000000000000000
'          -13621    -->  0x1100101011001011
'          -18       -->  0x1111111111101110
'          12        -->  0x1100
'          19142     -->  0x100101011000110
'          32767     -->  0x111111111111111
'       Base 8 conversion:
'          -32768    -->  0x100000
'          -13621    -->  0x145313
'          -18       -->  0x177756
'          12        -->  0x14
'          19142     -->  0x45306
'          32767     -->  0x77777
'       Base 10 conversion:
'          -32768    -->  0x-32768
'          -13621    -->  0x-13621
'          -18       -->  0x-18
'          12        -->  0x12
'          19142     -->  0x19142
'          32767     -->  0x32767
'       Base 16 conversion:
'          -32768    -->  0x8000
'          -13621    -->  0xcacb
'          -18       -->  0xffee
'          12        -->  0xc
'          19142     -->  0x4ac6
'          32767     -->  0x7fff

int[] bases = { 2, 8, 10, 16};
short[] numbers = { Int16.MinValue, -13621, -18, 12, 19142, Int16.MaxValue };

foreach (int baseValue in bases)
{
   Console.WriteLine("Base {0} conversion:", baseValue);
   foreach (short number in numbers)
   {
      Console.WriteLine("   {0,-8}  -->  0x{1}",
                        number, Convert.ToString(number, baseValue));
   }
}
// The example displays the following output:
//       Base 2 conversion:
//          -32768    -->  0x1000000000000000
//          -13621    -->  0x1100101011001011
//          -18       -->  0x1111111111101110
//          12        -->  0x1100
//          19142     -->  0x100101011000110
//          32767     -->  0x111111111111111
//       Base 8 conversion:
//          -32768    -->  0x100000
//          -13621    -->  0x145313
//          -18       -->  0x177756
//          12        -->  0x14
//          19142     -->  0x45306
//          32767     -->  0x77777
//       Base 10 conversion:
//          -32768    -->  0x-32768
//          -13621    -->  0x-13621
//          -18       -->  0x-18
//          12        -->  0x12
//          19142     -->  0x19142
//          32767     -->  0x32767
//       Base 16 conversion:
//          -32768    -->  0x8000
//          -13621    -->  0xcacb
//          -18       -->  0xffee
//          12        -->  0xc
//          19142     -->  0x4ac6
//          32767     -->  0x7fff

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Int32, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Int32, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定的 32 位带符号整数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Integer, _
    provider As IFormatProvider _
) As String
public static string ToString(
    int value,
    IFormatProvider provider
)
public:
static String^ ToString(
    int value,
    IFormatProvider^ provider
)
static member ToString :
        value:int *
        provider:IFormatProvider -> string

参数

value
类型： System Int32
要转换的 32 位带符号整数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Int32..::.ToString(IFormatProvider) 相同。

下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(Int32, IFormatProvider) 方法，将整数数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(Int32, IFormatProvider) 方法，将整数数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(Int32, IFormatProvider) 方法，将整数数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。

Dim numbers() As Integer = { Int32.MinValue, Int32.MaxValue}
Dim nfi As New System.Globalization.NumberFormatInfo()
nfi.NegativeSign = "~"
nfi.PositiveSign = "!"

For Each number As Integer In numbers
   Console.WriteLine("{0,-12}  -->  {1,12}", _
                     Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture), _
                     Convert.ToString(number, nfi))
Next
' The example displays the following output:
'       -2147483648  -->  ~2147483648
'       2147483647   -->  2147483647

int[] numbers = { Int32.MinValue, Int32.MaxValue};
System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.NegativeSign = "~";
nfi.PositiveSign = "!";

foreach (int number in numbers)
   Console.WriteLine("{0,-12}  -->  {1,12}",
                     Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture),
                     Convert.ToString(number, nfi));
// The example displays the following output:
//       -2147483648  -->  ~2147483648
//       2147483647  -->  2147483647

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Int32, Int32)

Convert
.
.
::
.
ToString 方法 (Int32, Int32)
Convert 类

将 32 位带符号整数的值转换为其指定基的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Integer, _
    toBase As Integer _
) As String
public static string ToString(
    int value,
    int toBase
)
public:
static String^ ToString(
    int value,
    int toBase
)
static member ToString :
        value:int *
        toBase:int -> string

参数

value
类型： System Int32
要转换的 32 位带符号整数。
toBase
类型： System Int32
返回值的基数，必须是 2、8、10 或 16。

返回值

类型： System String
以 toBase 为基的 value 的字符串表示形式。
异常 | 条件
ArgumentException | toBase 不是 2、8、10 或 16。

如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 31 位）被解释为符号位。如果调用 ToString(Int32, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt32(String, Int32) 和 Int32..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 31 位）被解释为符号位。如果调用 ToString(Int32, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt32(String, Int32) 和 Int32..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 31 位）被解释为符号位。如果调用 ToString(Int32, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt32(String, Int32) 和 Int32..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 31 位）被解释为符号位。如果调用 ToString(Int32, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt32(String, Int32) 和 Int32..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 是 2、8 或 16，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 是 2、8 或 16，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 31 位）被解释为符号位。如果调用 ToString(Int32, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt32(String, Int32) 和 Int32..::.Parse(String, NumberStyles)。

下面的示例将整数数组中的每个元素转换为其等效的二进制、十六进制、十进制和十六进制字符串表示形式。

Dim bases() As Integer = { 2, 8, 10, 16}
Dim numbers() As Integer = { Int32.MinValue, -19327543, -13621, -18, 12, _
                             19142, Int32.MaxValue }

For Each base As Integer In bases
   Console.WriteLine("Base {0} conversion:", base)
   For Each number As Integer In numbers
      Console.WriteLine("   {0,-15}  -->  0x{1}", _
                        number, Convert.ToString(number, base))
   Next
Next
' The example displays the following output:
'    Base 2 conversion:
'       -2147483648      -->  0x10000000000000000000000000000000
'       -19327543        -->  0x11111110110110010001010111001001
'       -13621           -->  0x11111111111111111100101011001011
'       -18              -->  0x11111111111111111111111111101110
'       12               -->  0x1100
'       19142            -->  0x100101011000110
'       2147483647       -->  0x1111111111111111111111111111111
'    Base 8 conversion:
'       -2147483648      -->  0x20000000000
'       -19327543        -->  0x37666212711
'       -13621           -->  0x37777745313
'       -18              -->  0x37777777756
'       12               -->  0x14
'       19142            -->  0x45306
'       2147483647       -->  0x17777777777
'    Base 10 conversion:
'       -2147483648      -->  0x-2147483648
'       -19327543        -->  0x-19327543
'       -13621           -->  0x-13621
'       -18              -->  0x-18
'       12               -->  0x12
'       19142            -->  0x19142
'       2147483647       -->  0x2147483647
'    Base 16 conversion:
'       -2147483648      -->  0x80000000
'       -19327543        -->  0xfed915c9
'       -13621           -->  0xffffcacb
'       -18              -->  0xffffffee
'       12               -->  0xc
'       19142            -->  0x4ac6
'       2147483647       -->  0x7fffffff

int[] bases = { 2, 8, 10, 16};
int[] numbers = { Int32.MinValue, -19327543, -13621, -18, 12,
                             19142, Int32.MaxValue };

foreach (int baseValue in bases)
{
   Console.WriteLine("Base {0} conversion:", baseValue);
   foreach (int number in numbers)
   {
      Console.WriteLine("   {0,-15}  -->  0x{1}",
                        number, Convert.ToString(number, baseValue));
   }
}
// The example displays the following output:
//    Base 2 conversion:
//       -2147483648      -->  0x10000000000000000000000000000000
//       -19327543        -->  0x11111110110110010001010111001001
//       -13621           -->  0x11111111111111111100101011001011
//       -18              -->  0x11111111111111111111111111101110
//       12               -->  0x1100
//       19142            -->  0x100101011000110
//       2147483647       -->  0x1111111111111111111111111111111
//    Base 8 conversion:
//       -2147483648      -->  0x20000000000
//       -19327543        -->  0x37666212711
//       -13621           -->  0x37777745313
//       -18              -->  0x37777777756
//       12               -->  0x14
//       19142            -->  0x45306
//       2147483647       -->  0x17777777777
//    Base 10 conversion:
//       -2147483648      -->  0x-2147483648
//       -19327543        -->  0x-19327543
//       -13621           -->  0x-13621
//       -18              -->  0x-18
//       12               -->  0x12
//       19142            -->  0x19142
//       2147483647       -->  0x2147483647
//    Base 16 conversion:
//       -2147483648      -->  0x80000000
//       -19327543        -->  0xfed915c9
//       -13621           -->  0xffffcacb
//       -18              -->  0xffffffee
//       12               -->  0xc
//       19142            -->  0x4ac6
//       2147483647       -->  0x7fffffff

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Int64, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Int64, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定的 64 位带符号整数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Long, _
    provider As IFormatProvider _
) As String
public static string ToString(
    long value,
    IFormatProvider provider
)
public:
static String^ ToString(
    long long value,
    IFormatProvider^ provider
)
static member ToString :
        value:int64 *
        provider:IFormatProvider -> string

参数

value
类型： System Int64
要转换的 64 位带符号整数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Int64..::.ToString(IFormatProvider) 相同。

下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(Int64, IFormatProvider) 方法，将长型整数数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(Int64, IFormatProvider) 方法，将长型整数数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(Int64, IFormatProvider) 方法，将长型整数数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。

Dim numbers() As Long = { CLng(Int32.MinValue) * 2, CLng(Int32.MaxValue) * 2 }
Dim nfi As New System.Globalization.NumberFormatInfo()
nfi.NegativeSign = "~"
nfi.PositiveSign = "!"

For Each number As Long In numbers
   Console.WriteLine("{0,-12}  -->  {1,12}", _
                     Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture), _
                     Convert.ToString(number, nfi))
Next
' The example displays the following output:
'       -4294967296  -->  ~4294967296
'       4294967294   -->  4294967294

long[] numbers = { ((long) Int32.MinValue) * 2, ((long) Int32.MaxValue) * 2};
System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.NegativeSign = "~";
nfi.PositiveSign = "!";

foreach (long number in numbers)
   Console.WriteLine("{0,-12}  -->  {1,12}",
                     Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture),
                     Convert.ToString(number, nfi));
// The example displays the following output:
//       -4294967296  -->  ~4294967296
//       4294967294  -->  4294967294

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Int64, Int32)

Convert
.
.
::
.
ToString 方法 (Int64, Int32)
Convert 类

将 64 位带符号整数的值转换为其指定基的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Long, _
    toBase As Integer _
) As String
public static string ToString(
    long value,
    int toBase
)
public:
static String^ ToString(
    long long value,
    int toBase
)
static member ToString :
        value:int64 *
        toBase:int -> string

参数

value
类型： System Int64
要转换的 64 位带符号整数。
toBase
类型： System Int32
返回值的基数，必须是 2、8、10 或 16。

返回值

类型： System String
以 toBase 为基的 value 的字符串表示形式。
异常 | 条件
ArgumentException | toBase 不是 2、8、10 或 16。

如果 value 是一个正数并且 toBase 不是 10，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 不是 10，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 63 位）被解释为符号位。如果调用 ToString(Int64, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt64(String, Int32) 和 Int64..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 不是 10，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 不是 10，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 63 位）被解释为符号位。如果调用 ToString(Int64, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt64(String, Int32) 和 Int64..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 不是 10，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 不是 10，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 63 位）被解释为符号位。如果调用 ToString(Int64, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt64(String, Int32) 和 Int64..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 不是 10，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 不是 10，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 63 位）被解释为符号位。如果调用 ToString(Int64, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt64(String, Int32) 和 Int64..::.Parse(String, NumberStyles)。 如果 value 是一个正数并且 toBase 不是 10，则返回的字符串将使用符号和量级表示。如果 value 是一个负数并且 toBase 不是 10，则返回的字符串将使用 2 的补数表示。这意味着最高序位字节的高序位（第 63 位）被解释为符号位。如果调用 ToString(Int64, Int32) 方法来创建随后将被转换回数字的字符串，则应调用采用类似数字表示形式的相应方法以执行转换。这些方法包括 Convert..::.ToInt64(String, Int32) 和 Int64..::.Parse(String, NumberStyles)。

下面的示例将长整数数组中的每个元素转换为其等效的二进制、十六进制、十进制和十六进制字符串表示形式。

Dim bases() As Integer = { 2, 8, 10, 16}
Dim numbers() As Long = { Int64.MinValue, -193275430, -13621, -18, 12, _
                             1914206117, Int64.MaxValue }

For Each base As Integer In bases
   Console.WriteLine("Base {0} conversion:", base)
   For Each number As Long In numbers
      Console.WriteLine("   {0,-23}  -->  0x{1}", _
                        number, Convert.ToString(number, base))
   Next
Next
' The example displays the following output:
'    Base 2 conversion:
'       -9223372036854775808     -->  0x1000000000000000000000000000000000000000000000000000000000000000
'       -193275430               -->  0x1111111111111111111111111111111111110100011110101101100111011010
'       -13621                   -->  0x1111111111111111111111111111111111111111111111111100101011001011
'       -18                      -->  0x1111111111111111111111111111111111111111111111111111111111101110
'       12                       -->  0x1100
'       1914206117               -->  0x1110010000110000111011110100101
'       9223372036854775807      -->  0x111111111111111111111111111111111111111111111111111111111111111
'    Base 8 conversion:
'       -9223372036854775808     -->  0x1000000000000000000000
'       -193275430               -->  0x1777777777776436554732
'       -13621                   -->  0x1777777777777777745313
'       -18                      -->  0x1777777777777777777756
'       12                       -->  0x14
'       1914206117               -->  0x16206073645
'       9223372036854775807      -->  0x777777777777777777777
'    Base 10 conversion:
'       -9223372036854775808     -->  0x-9223372036854775808
'       -193275430               -->  0x-193275430
'       -13621                   -->  0x-13621
'       -18                      -->  0x-18
'       12                       -->  0x12
'       1914206117               -->  0x1914206117
'       9223372036854775807      -->  0x9223372036854775807
'    Base 16 conversion:
'       -9223372036854775808     -->  0x8000000000000000
'       -193275430               -->  0xfffffffff47ad9da
'       -13621                   -->  0xffffffffffffcacb
'       -18                      -->  0xffffffffffffffee
'       12                       -->  0xc
'       1914206117               -->  0x721877a5
'       9223372036854775807      -->  0x7fffffffffffffff

int[] bases = { 2, 8, 10, 16};
long[] numbers = { Int64.MinValue, -193275430, -13621, -18, 12,
                   1914206117, Int64.MaxValue };

foreach (int baseValue in bases)
{
   Console.WriteLine("Base {0} conversion:", baseValue);
   foreach (long number in numbers)
   {
      Console.WriteLine("   {0,-23}  -->  0x{1}",
                        number, Convert.ToString(number, baseValue));
   }
}
// The example displays the following output:
//    Base 2 conversion:
//       -9223372036854775808     -->  0x1000000000000000000000000000000000000000000000000000000000000000
//       -193275430               -->  0x1111111111111111111111111111111111110100011110101101100111011010
//       -13621                   -->  0x1111111111111111111111111111111111111111111111111100101011001011
//       -18                      -->  0x1111111111111111111111111111111111111111111111111111111111101110
//       12                       -->  0x1100
//       1914206117               -->  0x1110010000110000111011110100101
//       9223372036854775807      -->  0x111111111111111111111111111111111111111111111111111111111111111
//    Base 8 conversion:
//       -9223372036854775808     -->  0x1000000000000000000000
//       -193275430               -->  0x1777777777776436554732
//       -13621                   -->  0x1777777777777777745313
//       -18                      -->  0x1777777777777777777756
//       12                       -->  0x14
//       1914206117               -->  0x16206073645
//       9223372036854775807      -->  0x777777777777777777777
//    Base 10 conversion:
//       -9223372036854775808     -->  0x-9223372036854775808
//       -193275430               -->  0x-193275430
//       -13621                   -->  0x-13621
//       -18                      -->  0x-18
//       12                       -->  0x12
//       1914206117               -->  0x1914206117
//       9223372036854775807      -->  0x9223372036854775807
//    Base 16 conversion:
//       -9223372036854775808     -->  0x8000000000000000
//       -193275430               -->  0xfffffffff47ad9da
//       -13621                   -->  0xffffffffffffcacb
//       -18                      -->  0xffffffffffffffee
//       12                       -->  0xc
//       1914206117               -->  0x721877a5
//       9223372036854775807      -->  0x7fffffffffffffff

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息将指定对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Object, _
    provider As IFormatProvider _
) As String
public static string ToString(
    Object value,
    IFormatProvider provider
)
public:
static String^ ToString(
    Object^ value,
    IFormatProvider^ provider
)
static member ToString :
        value:Object *
        provider:IFormatProvider -> string

参数

value
类型： System Object
一个对象，用于提供要转换的值，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 String..::.Empty。

如果 value 参数实现 IConvertible 接口，则实现的 IConvertible..::.ToString(IFormatProvider) 方法生成返回值。否则，如果 value 参数实现 IFormattable 接口，则实现的 IFormattable..::.ToString(String, IFormatProvider) 方法生成返回值。如果 value 没有实现借口，则由 value 参数的 ToString() 方法生成返回值。 如果 value 参数实现 IConvertible 接口，则实现的 IConvertible..::.ToString(IFormatProvider) 方法生成返回值。否则，如果 value 参数实现 IFormattable 接口，则实现的 IFormattable..::.ToString(String, IFormatProvider) 方法生成返回值。如果 value 没有实现借口，则由 value 参数的 ToString() 方法生成返回值。 如果 value 参数实现 IConvertible 接口，则实现的 IConvertible..::.ToString(IFormatProvider) 方法生成返回值。否则，如果 value 参数实现 IFormattable 接口，则实现的 IFormattable..::.ToString(String, IFormatProvider) 方法生成返回值。如果 value 没有实现借口，则由 value 参数的 ToString() 方法生成返回值。

如果 value 参数实现 IConvertible 或 IFormattable 接口，则使用 provider 参数。provider 参数指定 value 转换中使用的特定于区域性的信息。例如，如果 value 参数是一个负小数，则 provider 参数可以提供有关负号和小数点分隔符所使用表示法的区域性特定信息。 如果 value 参数实现 IConvertible 或 IFormattable 接口，则使用 provider 参数。provider 参数指定 value 转换中使用的特定于区域性的信息。例如，如果 value 参数是一个负小数，则 provider 参数可以提供有关负号和小数点分隔符所使用表示法的区域性特定信息。 如果 value 参数实现 IConvertible 或 IFormattable 接口，则使用 provider 参数。provider 参数指定 value 转换中使用的特定于区域性的信息。例如，如果 value 参数是一个负小数，则 provider 参数可以提供有关负号和小数点分隔符所使用表示法的区域性特定信息。

下面的示例定义名为 DummyProvider 的类，该类简单地将 ToString(Object, IFormatProvider) 方法所做的方法调用截取到 provider 参数的 IFormatProvider..::.GetFormat 实现，然后显示 IFormatProvider..::.GetFormat 方法预期返回的对象的类型名称。在对象数组中向 ToString(Object, IFormatProvider) 方法传递大量不同的数据类型时，其输出指示该方法是否对特定的数据类型实际使用了 provider 参数。输出阐释了将数字和 DateTime 值转换为字符串时使用 provider 参数，但是对于布尔、字符、字符串或 TimeSpan 值不使用该参数。 下面的示例定义名为 DummyProvider 的类，该类简单地将 ToString(Object, IFormatProvider) 方法所做的方法调用截取到 provider 参数的 IFormatProvider..::.GetFormat 实现，然后显示 IFormatProvider..::.GetFormat 方法预期返回的对象的类型名称。在对象数组中向 ToString(Object, IFormatProvider) 方法传递大量不同的数据类型时，其输出指示该方法是否对特定的数据类型实际使用了 provider 参数。输出阐释了将数字和 DateTime 值转换为字符串时使用 provider 参数，但是对于布尔、字符、字符串或 TimeSpan 值不使用该参数。 下面的示例定义名为 DummyProvider 的类，该类简单地将 ToString(Object, IFormatProvider) 方法所做的方法调用截取到 provider 参数的 IFormatProvider..::.GetFormat 实现，然后显示 IFormatProvider..::.GetFormat 方法预期返回的对象的类型名称。在对象数组中向 ToString(Object, IFormatProvider) 方法传递大量不同的数据类型时，其输出指示该方法是否对特定的数据类型实际使用了 provider 参数。输出阐释了将数字和 DateTime 值转换为字符串时使用 provider 参数，但是对于布尔、字符、字符串或 TimeSpan 值不使用该参数。

Option Strict On

Imports System.Globalization

Public Class DummyProvider : Implements IFormatProvider
    ' Normally, GetFormat returns an object of the requested type
    ' (usually itself) if it is able; otherwise, it returns Nothing.
    Public Function GetFormat(argType As Type) As Object _
        Implements IFormatProvider.GetFormat

        ' Display the type of argType and return Nothing.
        Console.Write( "{0,-25}", argType.Name)
        Return Nothing
    End Function
End Class

Public Module Example
    Public Sub Main()
        ' Create an instance of the IFormatProvider.
        Dim provider  As New DummyProvider()

        ' Values to convert using DummyProvider
        Dim int32A As Integer  = -252645135
        Dim doubleA As Double   = 61680.3855
        Dim objDouble As Object   = CObj(-98765.4321)
        Dim dayTimeA As DateTime = #9/11/2009 13:45#
        Dim boolA As Boolean = True
        Dim stringA As String = "Qwerty"
        Dim charA As Char = "$"c
        Dim tSpanA As New TimeSpan(0, 18, 0)
        Dim objOther As Object = provider

        Dim objects() As Object = { int32A, doubleA, objDouble, dayTimeA, _
                                    boolA, stringA, charA, tSpanA, objOther }

        ' Call Convert.ToString(Object, provider) method for each value.
        For Each value As Object In objects
           Console.WriteLine("{0,-20}  -->  {1,20}", _
                             value, Convert.ToString(value, provider))
        Next
    End Sub
End Module
' The example displays the following output:
'    NumberFormatInfo         -252645135            -->            -252645135
'    NumberFormatInfo         61680.3855            -->            61680.3855
'    NumberFormatInfo         -98765.4321           -->           -98765.4321
'    DateTimeFormatInfo       9/11/2009 1:45:00 PM  -->  9/11/2009 1:45:00 PM
'    True                  -->                  True
'    Qwerty                -->                Qwerty
'    $                     -->                     $
'    00:18:00              -->              00:18:00
'    DummyProvider         -->         DummyProvider

using System;
using System.Globalization;

public class DummyProvider : IFormatProvider
{
    // Normally, GetFormat returns an object of the requested type
    // (usually itself) if it is able; otherwise, it returns Nothing.
    public object GetFormat(Type argType)
    {
        // Display the type of argType and return null.
        Console.Write( "{0,-25}", argType.Name);
        return null;
    }
}

public class Example
{
   public static void Main()
   {
      // Create an instance of the IFormatProvider.
      IFormatProvider provider = new DummyProvider();

      // Values to convert using DummyProvider.
      int int32A = -252645135;
      double doubleA = 61680.3855;
      object objDouble = (object) -98765.4321;
      DateTime dayTimeA = new DateTime(2009, 9, 11, 13, 45, 0);
      bool boolA = true;
      string stringA = "Qwerty";
      char charA = '$';
      TimeSpan tSpanA = new TimeSpan(0, 18, 0);
      object objOther = provider;

      object[] objects= { int32A, doubleA, objDouble, dayTimeA,
                          boolA, stringA, charA, tSpanA, objOther };

      // Call Convert.ToString(Object, provider) method for each value.
      foreach (object value in objects)
         Console.WriteLine("{0,-20}  -->  {1,20}",
                           value, Convert.ToString(value, provider));
   }
}
// The example displays the following output:
//    NumberFormatInfo         -252645135            -->            -252645135
//    NumberFormatInfo         61680.3855            -->            61680.3855
//    NumberFormatInfo         -98765.4321           -->           -98765.4321
//    DateTimeFormatInfo       9/11/2009 1:45:00 PM  -->  9/11/2009 1:45:00 PM
//    True                  -->                  True
//    Qwerty                -->                Qwerty
//    $                     -->                     $
//    00:18:00              -->              00:18:00
//    DummyProvider         -->         DummyProvider

下面的示例定义一个 Temperature 类，该类重写 Object..::.ToString 方法，但不实现 IConvertible 接口。该示例演示如何调用 Convert..::.ToString(Object, IFormatProvider) 方法然后调用 Temperature.ToString 方法。 下面的示例定义一个 Temperature 类，该类重写 Object..::.ToString 方法，但不实现 IConvertible 接口。该示例演示如何调用 Convert..::.ToString(Object, IFormatProvider) 方法然后调用 Temperature.ToString 方法。

Public Class Temperature
   Private m_Temp As Decimal

   Public Sub New(temperature As Decimal)
      Me.m_Temp = temperature
   End Sub

   Public ReadOnly Property Celsius() As Decimal
      Get
         Return Me.m_Temp
      End Get
   End Property

   Public ReadOnly Property Kelvin() As Decimal
      Get
         Return Me.m_Temp + 273.15d
      End Get
   End Property

   Public ReadOnly Property Fahrenheit() As Decimal
      Get
         Return Math.Round(CDec(Me.m_Temp * 9 / 5 + 32), 2)
      End Get
   End Property

   Public Overrides Function ToString() As String
      Return m_Temp.ToString("N2") & " °C"
   End Function
End Class

Module Example
   Public Sub Main()
      Dim cold As New Temperature(-40)
      Dim freezing As New Temperature(0)
      Dim boiling As New Temperature(100)

      Console.WriteLine(Convert.ToString(cold, Nothing))
      Console.WriteLine(Convert.ToString(freezing, Nothing))
      Console.WriteLine(Convert.ToString(boiling, Nothing))
   End Sub
End Module
' The example displays the following output:
'       -40.00 °C
'       0.00 °C
'       100.00 °C

using System;

public class Temperature
{
   private decimal m_Temp;

   public Temperature(decimal temperature)
   {
      this.m_Temp = temperature;
   }

   public decimal Celsius
   {
      get { return this.m_Temp; }
   }

   public decimal Kelvin
   {
      get { return this.m_Temp + 273.15m; }
   }

   public decimal Fahrenheit
   {
      get { return Math.Round((decimal) (this.m_Temp * 9 / 5 + 32), 2); }
   }

   public override string ToString()
   {
      return m_Temp.ToString("N2") + " °C";
   }

}

public class Example
{
   public static void Main()
   {
      Temperature cold = new Temperature(-40);
      Temperature freezing = new Temperature(0);
      Temperature boiling = new Temperature(100);

      Console.WriteLine(Convert.ToString(cold, null));
      Console.WriteLine(Convert.ToString(freezing, null));
      Console.WriteLine(Convert.ToString(boiling, null));
   }
}
// The example dosplays the following output:
//       -40.00 °C
//       0.00 °C
//       100.00 °C

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (SByte, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (SByte, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定的 8 位带符号整数的值转换为其等效的字符串表示形式。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToString ( _
    value As SByte, _
    provider As IFormatProvider _
) As String
[CLSCompliantAttribute(false)]
public static string ToString(
    sbyte value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static String^ ToString(
    signed char value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToString :
        value:sbyte *
        provider:IFormatProvider -> string

参数

value
类型： System SByte
要转换的 8 位带符号整数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 SByte..::.ToString(IFormatProvider) 相同。

下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 Convert..::.ToString(SByte, IFormatProvider) 方法，将带符号类型数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 Convert..::.ToString(SByte, IFormatProvider) 方法，将带符号类型数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 Convert..::.ToString(SByte, IFormatProvider) 方法，将带符号类型数组中的每个元素转换为其等效的字符串表示形式。转换使用固定区域性以及自定义 NumberFormatInfo 对象。

Dim numbers() As SByte = { SByte.MinValue, -12, 17, SByte.MaxValue}
Dim nfi As New System.Globalization.NumberFormatInfo()
nfi.NegativeSign = "~"
nfi.PositiveSign = "!"
For Each number As SByte In numbers
   Console.WriteLine(Convert.ToString(number, nfi))
Next
' The example displays the following output:
'       ~128
'       ~12
'       17
'       127

sbyte[] numbers = { SByte.MinValue, -12, 17, SByte.MaxValue};
System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.NegativeSign = "~";
nfi.PositiveSign = "!";
foreach (sbyte number in numbers)
   Console.WriteLine(Convert.ToString(number, nfi));
// The example displays the following output:
//       ~128
//       ~12
//       17
//       127

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (Single, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (Single, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定的单精度浮点数的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As Single, _
    provider As IFormatProvider _
) As String
public static string ToString(
    float value,
    IFormatProvider provider
)
public:
static String^ ToString(
    float value,
    IFormatProvider^ provider
)
static member ToString :
        value:float32 *
        provider:IFormatProvider -> string

参数

value
类型： System Single
要转换的单精度浮点数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 Single..::.ToString(IFormatProvider) 相同。

下面的示例将 Single 值数组中的每个元素转换为 4 种不同区域性中的等效字符串表示形式。

' Define an array of numbers to display.
Dim numbers() As Single = { -1.5345e16, -123.4321, 19092.123, _
                            1.1734231911290e16 }
' Define the culture names used to display them.
Dim cultureNames() As String = { "en-US", "fr-FR", "ja-JP", "ru-RU" }

For Each number As Single In numbers
   Console.WriteLine("{0}:", Convert.ToString(number, _
                             System.Globalization.CultureInfo.InvariantCulture))
   For Each cultureName As String In cultureNames
      Dim culture As New System.Globalization.CultureInfo(cultureName)
      Console.WriteLine("   {0}: {1,20}", _
                        culture.Name, Convert.ToString(number, culture))
   Next
   Console.WriteLine()
Next
' The example displays the following output:
'    -1.5345E+16:
'       en-US:          -1.5345E+16
'       fr-FR:          -1,5345E+16
'       ja-JP:          -1.5345E+16
'       ru-RU:          -1,5345E+16
'
'    -123.4321:
'       en-US:            -123.4321
'       fr-FR:            -123,4321
'       ja-JP:            -123.4321
'       ru-RU:            -123,4321
'
'    19092.123:
'       en-US:            19092.123
'       fr-FR:            19092,123
'       ja-JP:            19092.123
'       ru-RU:            19092,123
'
'    1.173423191129E+16:
'       en-US:   1.173423191129E+16
'       fr-FR:   1,173423191129E+16
'       ja-JP:   1.173423191129E+16
'       ru-RU:   1,173423191129E+16

// Define an array of numbers to display.
float[] numbers = { -1.5345e16f, -123.4321f, 19092.123f, 1.1734231911290e16f };
// Define the culture names used to display them.
string[] cultureNames = { "en-US", "fr-FR", "ja-JP", "ru-RU" };

foreach (float number in numbers)
{
   Console.WriteLine("{0}:", Convert.ToString(number,
                             System.Globalization.CultureInfo.InvariantCulture));
   foreach (string cultureName in cultureNames)
   {
      System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo(cultureName);
      Console.WriteLine("   {0}: {1,20}",
                        culture.Name, Convert.ToString(number, culture));
   }
   Console.WriteLine();
}
// The example displays the following output:
//    -1.5345E+16:
//       en-US:          -1.5345E+16
//       fr-FR:          -1,5345E+16
//       ja-JP:          -1.5345E+16
//       ru-RU:          -1,5345E+16
//
//    -123.4321:
//       en-US:            -123.4321
//       fr-FR:            -123,4321
//       ja-JP:            -123.4321
//       ru-RU:            -123,4321
//
//    19092.123:
//       en-US:            19092.123
//       fr-FR:            19092,123
//       ja-JP:            19092.123
//       ru-RU:            19092,123
//
//    1.173423191129E+16:
//       en-US:   1.173423191129E+16
//       fr-FR:   1,173423191129E+16
//       ja-JP:   1.173423191129E+16
//       ru-RU:   1,173423191129E+16

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (String, IFormatProvider)
Convert 类

返回指定的字符串实例；不执行任何实际转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToString ( _
    value As String, _
    provider As IFormatProvider _
) As String
public static string ToString(
    string value,
    IFormatProvider provider
)
public:
static String^ ToString(
    String^ value,
    IFormatProvider^ provider
)
static member ToString :
        value:string *
        provider:IFormatProvider -> string

参数

value
类型： System String
要返回的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。忽略此参数。 一个提供区域性特定的格式设置信息的对象。忽略此参数。

返回值

类型： System String
value 不经更改即返回。

下面的示例使用 String 参数调用 ToString 方法。该方法返回未修改的 String 而不引用 IFormatProvider 对象。 下面的示例使用 String 参数调用 ToString 方法。该方法返回未修改的 String 而不引用 IFormatProvider 对象。

' Example of Convert.ToString( non-numeric types, IFormatProvider ).
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

' An instance of this class can be passed to methods that require
' an IFormatProvider.
Public Class DummyProvider
    Implements IFormatProvider

    ' Normally, GetFormat returns an object of the requested type
    ' (usually itself) if it is able; otherwise, it returns Nothing.
    Public Function GetFormat( argType As Type ) As Object _
        Implements IFormatProvider.GetFormat

        ' Here, the type of argType is displayed, and GetFormat
        ' always returns Nothing.
        Console.Write( "{0,-40}", argType.ToString( ) )
        Return Nothing

    End Function
End Class

Module ConvertNonNumericProviderDemo

    Sub Main( )

        ' Create an instance of the IFormatProvider.
        Dim provider    As New DummyProvider( )
        Dim converted   As String

        ' Convert these values using DummyProvider.
        Dim Int32A      As Integer  = -252645135
        Dim DoubleA     As Double   = 61680.3855
        Dim ObjDouble   As Object   = CType( -98765.4321, Object )
        Dim DayTimeA    As DateTime = _
                            new DateTime( 2001, 9, 11, 13, 45, 0 )

        Dim BoolA       As Boolean  = True
        Dim StringA     As String   = "Qwerty"
        Dim CharA       As Char     = "$"c
        Dim TSpanA      As TimeSpan = New TimeSpan( 0, 18, 0 )
        Dim ObjOther    As Object   = CType( provider, Object )

        Console.WriteLine( "This example of " & _
            "Convert.ToString( non-numeric, IFormatProvider ) " & _
            vbCrLf & "generates the following output. The " & _
            "provider type, argument type, " & vbCrLf & "and " & _
            "argument value are displayed." )
        Console.WriteLine( vbCrLf & _
            "Note: The IFormatProvider object is not called for " & _
            "Boolean, String, " & vbCrLf & "Char, TimeSpan, " & _
            "and non-numeric Object." )

        ' The format provider is called for these conversions.
        Console.WriteLine( )
        converted =  Convert.ToString( Int32A, provider )
        Console.WriteLine( "Int32    {0}", converted )
        converted =  Convert.ToString( DoubleA, provider )
        Console.WriteLine( "Double   {0}", converted )
        converted =  Convert.ToString( ObjDouble, provider )
        Console.WriteLine( "Object   {0}", converted )
        converted =  Convert.ToString( DayTimeA, provider )
        Console.WriteLine( "DateTime {0}", converted )

        ' The format provider is not called for these conversions.
        Console.WriteLine( )
        converted =  Convert.ToString( BoolA, provider )
        Console.WriteLine( "Boolean  {0}", converted )
        converted =  Convert.ToString( StringA, provider )
        Console.WriteLine( "String   {0}", converted )
        converted =  Convert.ToString( CharA, provider )
        Console.WriteLine( "Char     {0}", converted )
        converted =  Convert.ToString( TSpanA, provider )
        Console.WriteLine( "TimeSpan {0}", converted )
        converted =  Convert.ToString( ObjOther, provider )
        Console.WriteLine( "Object   {0}", converted )

    End Sub
End Module

' This example of Convert.ToString( non-numeric, IFormatProvider )
' generates the following output. The provider type, argument type,
' and argument value are displayed.
'
' Note: The IFormatProvider object is not called for Boolean, String,
' Char, TimeSpan, and non-numeric Object.
'
' System.Globalization.NumberFormatInfo   Int32    -252645135
' System.Globalization.NumberFormatInfo   Double   61680.3855
' System.Globalization.NumberFormatInfo   Object   -98765.4321
' System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM
'
' Boolean  True
' String   Qwerty
' Char     $
' TimeSpan 00:18:00
' Object   DummyProvider

// Example of Convert.ToString( non-numeric types, IFormatProvider ).
using System;
using System.Globalization;

// An instance of this class can be passed to methods that require
// an IFormatProvider.
public class DummyProvider : IFormatProvider
{
    // Normally, GetFormat returns an object of the requested type
    // (usually itself) if it is able; otherwise, it returns Nothing.
    public object GetFormat( Type argType )
    {
        // Here, the type of argType is displayed, and GetFormat
        // always returns Nothing.
        Console.Write( "{0,-40}", argType.ToString( ) );
        return null;
    }
}

class ConvertNonNumericProviderDemo
{
    static void Main( )
    {
        // Create an instance of the IFormatProvider.
        DummyProvider provider = new DummyProvider( );
        string converted;

        // Convert these values using DummyProvider.
        int      Int32A     = -252645135;
        double   DoubleA    = 61680.3855;
        object   ObjDouble  = (object)( -98765.4321 );
        DateTime DayTimeA   = new DateTime( 2001, 9, 11, 13, 45, 0 );

        bool     BoolA      = true;
        string   StringA    = "Qwerty";
        char     CharA      = '$';
        TimeSpan TSpanA     = new TimeSpan( 0, 18, 0 );
        object   ObjOther   = (object)provider;

        Console.WriteLine( "This example of " +
            "Convert.ToString( non-numeric, IFormatProvider ) \n" +
            "generates the following output. The provider type, " +
            "argument type, \nand argument value are displayed." );
        Console.WriteLine( "\nNote: The IFormatProvider object is " +
            "not called for Boolean, String, \nChar, TimeSpan, " +
            "and non-numeric Object." );

        // The format provider is called for these conversions.
        Console.WriteLine( );
        converted = Convert.ToString( Int32A, provider );
        Console.WriteLine( "int      {0}", converted );
        converted = Convert.ToString( DoubleA, provider );
        Console.WriteLine( "double   {0}", converted );
        converted = Convert.ToString( ObjDouble, provider );
        Console.WriteLine( "object   {0}", converted );
        converted = Convert.ToString( DayTimeA, provider );
        Console.WriteLine( "DateTime {0}", converted );

        // The format provider is not called for these conversions.
        Console.WriteLine( );
        converted = Convert.ToString( BoolA, provider );
        Console.WriteLine( "bool     {0}", converted );
        converted = Convert.ToString( StringA, provider );
        Console.WriteLine( "string   {0}", converted );
        converted = Convert.ToString( CharA, provider );
        Console.WriteLine( "char     {0}", converted );
        converted = Convert.ToString( TSpanA, provider );
        Console.WriteLine( "TimeSpan {0}", converted );
        converted = Convert.ToString( ObjOther, provider );
        Console.WriteLine( "object   {0}", converted );
    }
}

/*
This example of Convert.ToString( non-numeric, IFormatProvider )
generates the following output. The provider type, argument type,
and argument value are displayed.

Note: The IFormatProvider object is not called for Boolean, String,
Char, TimeSpan, and non-numeric Object.

System.Globalization.NumberFormatInfo   int      -252645135
System.Globalization.NumberFormatInfo   double   61680.3855
System.Globalization.NumberFormatInfo   object   -98765.4321
System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM

bool     True
string   Qwerty
char     $
TimeSpan 00:18:00
object   DummyProvider

*/

// Example of Convert::ToString( non-numeric types, IFormatProvider ).
using namespace System;
using namespace System::Globalization;

#define null (Object^)0

// An instance of this class can be passed to methods that require
// an IFormatProvider.
ref class DummyProvider: public IFormatProvider
{
public:

   // Normally, GetFormat returns an object of the requested type
   // (usually itself) if it is able; otherwise, it returns Nothing.
   virtual Object^ GetFormat( Type^ argType )
   {
      // Here, the type of argType is displayed, and GetFormat
      // always returns Nothing.
      Console::Write( "{0,-40}", argType->ToString() );
      return null;
   }
};

int main()
{
   // Create an instance of the IFormatProvider.
   DummyProvider^ provider = gcnew DummyProvider;
   String^ converted;

   // Convert these values using DummyProvider.
   int Int32A = -252645135;
   double DoubleA = 61680.3855;
   Object^ ObjDouble =  -98765.4321;
   DateTime DayTimeA = DateTime(2001,9,11,13,45,0);
   bool BoolA = true;
   String^ StringA = "Qwerty";
   Char CharA = '$';
   TimeSpan TSpanA = TimeSpan(0,18,0);
   Object^ ObjOther = static_cast<Object^>(provider);
   Console::WriteLine( "This example of "
   "Convert::ToString( non-numeric, IFormatProvider* ) \n"
   "generates the following output. The provider type, "
   "argument type, \nand argument value are displayed." );
   Console::WriteLine( "\nNote: The IFormatProvider object is "
   "not called for Boolean, String, \nChar, TimeSpan, "
   "and non-numeric Object." );

   // The format provider is called for these conversions.
   Console::WriteLine();
   converted = Convert::ToString( Int32A, provider );
   Console::WriteLine( "int      {0}", converted );
   converted = Convert::ToString( DoubleA, provider );
   Console::WriteLine( "double   {0}", converted );
   converted = Convert::ToString( ObjDouble, provider );
   Console::WriteLine( "Object   {0}", converted );
   converted = Convert::ToString( DayTimeA, provider );
   Console::WriteLine( "DateTime {0}", converted );

   // The format provider is not called for these conversions.
   Console::WriteLine();
   converted = Convert::ToString( BoolA, provider );
   Console::WriteLine( "bool     {0}", converted );
   converted = Convert::ToString( StringA, provider );
   Console::WriteLine( "String   {0}", converted );
   converted = Convert::ToString( CharA, provider );
   Console::WriteLine( "Char     {0}", converted );
   converted = Convert::ToString( TSpanA, provider );
   Console::WriteLine( "TimeSpan {0}", converted );
   converted = Convert::ToString( ObjOther, provider );
   Console::WriteLine( "Object   {0}", converted );
}

/*
This example of Convert::ToString( non-numeric, IFormatProvider* )
generates the following output. The provider type, argument type,
and argument value are displayed.

Note: The IFormatProvider object is not called for Boolean, String,
Char, TimeSpan, and non-numeric Object.

System.Globalization.NumberFormatInfo   int      -252645135
System.Globalization.NumberFormatInfo   double   61680.3855
System.Globalization.NumberFormatInfo   Object   -98765.4321
System.Globalization.DateTimeFormatInfo DateTime 9/11/2001 1:45:00 PM

bool     True
String   Qwerty
Char     $
TimeSpan 00:18:00
Object   DummyProvider
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (UInt16, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (UInt16, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定的 16 位无符号整数的值转换为其等效的字符串表示形式。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToString ( _
    value As UShort, _
    provider As IFormatProvider _
) As String
[CLSCompliantAttribute(false)]
public static string ToString(
    ushort value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static String^ ToString(
    unsigned short value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToString :
        value:uint16 *
        provider:IFormatProvider -> string

参数

value
类型： System UInt16
要转换的 16 位无符号整数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 UInt16..::.ToString(IFormatProvider) 相同。

下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt16, IFormatProvider) 方法，将 16 位无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt16, IFormatProvider) 方法，将 16 位无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt16, IFormatProvider) 方法，将 16 位无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt16, IFormatProvider) 方法，将 16 位无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。

Dim number As UShort = UInt16.MaxValue
Dim nfi As New System.Globalization.NumberFormatInfo()
nfi.NegativeSign = "~"
nfi.PositiveSign = "!"

Console.WriteLine("{0,-6}  -->  {1,6}", _
                  Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture), _
                  Convert.ToString(number, nfi))
' The example displays the following output:
'       65535   -->   65535

ushort number = UInt16.MaxValue;
System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.NegativeSign = "~";
nfi.PositiveSign = "!";

Console.WriteLine("{0,-6}  -->  {1,6}",
                  Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture),
                  Convert.ToString(number, nfi));
// The example displays the following output:
//       65535   -->   65535

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (UInt32, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (UInt32, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定的 32 位无符号整数的值转换为其等效的字符串表示形式。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToString ( _
    value As UInteger, _
    provider As IFormatProvider _
) As String
[CLSCompliantAttribute(false)]
public static string ToString(
    uint value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static String^ ToString(
    unsigned int value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToString :
        value:uint32 *
        provider:IFormatProvider -> string

参数

value
类型： System UInt32
要转换的 32 位无符号整数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 UInt32..::.ToString(IFormatProvider) 相同。

下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt32, IFormatProvider) 方法，将无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt32, IFormatProvider) 方法，将无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt32, IFormatProvider) 方法，将无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt32, IFormatProvider) 方法，将无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。

Dim number As UInteger = UInt32.MaxValue
Dim nfi As New System.Globalization.NumberFormatInfo()
nfi.NegativeSign = "~"
nfi.PositiveSign = "!"

Console.WriteLine("{0,-8}  -->  {1,8}", _
                  Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture), _
                  Convert.ToString(number, nfi))
' The example displays the following output:
'       4294967295  -->  4294967295

uint number = UInt32.MaxValue;
System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.NegativeSign = "~";
nfi.PositiveSign = "!";

Console.WriteLine("{0,-8}  -->  {1,8}",
                  Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture),
                  Convert.ToString(number, nfi));
// The example displays the following output:
//       4294967295  -->  4294967295

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToString 方法 (UInt64, IFormatProvider)

Convert
.
.
::
.
ToString 方法 (UInt64, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将指定的 64 位无符号整数的值转换为其等效的字符串表示形式。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToString ( _
    value As ULong, _
    provider As IFormatProvider _
) As String
[CLSCompliantAttribute(false)]
public static string ToString(
    ulong value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static String^ ToString(
    unsigned long long value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToString :
        value:uint64 *
        provider:IFormatProvider -> string

参数

value
类型： System UInt64
要转换的 64 位无符号整数。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
value 的字符串表示形式。

此实现与 UInt64..::.ToString(IFormatProvider) 相同。

下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt64, IFormatProvider) 方法，将长型无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt64, IFormatProvider) 方法，将长型无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt64, IFormatProvider) 方法，将长型无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。 下面的示例定义了一个自定义 NumberFormatInfo 类，该类将其负号定义为字符串“~”，将其正号定义为字符串“!”。然后它调用 ToString(UInt64, IFormatProvider) 方法，将长型无符号整数的值转换为其等效的字符串表示形式。转换同时使用固定区域性以及自定义 NumberFormatInfo 对象。输出表明未使用此格式设置信息，因为默认情况下 "G" 格式说明符对于正值未包括正号。

Dim number As ULong = UInt64.MaxValue
Dim nfi As New System.Globalization.NumberFormatInfo()
nfi.NegativeSign = "~"
nfi.PositiveSign = "!"

Console.WriteLine("{0,-12}  -->  {1,12}", _
                  Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture), _
                  Convert.ToString(number, nfi))
' The example displays the following output:
'    18446744073709551615  -->  18446744073709551615

ulong number = UInt64.MaxValue;
System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.NegativeSign = "~";
nfi.PositiveSign = "!";

Console.WriteLine("{0,-12}  -->  {1,12}",
                  Convert.ToString(number, System.Globalization.CultureInfo.InvariantCulture),
                  Convert.ToString(number, nfi));
// The example displays the following output:
//    18446744073709551615  -->  18446744073709551615

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToString 重载
System 命名空间


Convert ..::.ToUInt16 方法

Convert
.
.
::
.
ToUInt16 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 16 位无符号整数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToUInt16 方法 (Boolean)

Convert
.
.
::
.
ToUInt16 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Boolean _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    bool value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    bool value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:bool -> uint16

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System UInt16
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例将布尔值 true 和 false 转换为无符号的 16 位整数。

Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True

Console.WriteLine("{0} converts to {1}.", falseFlag, _
                  Convert.ToUInt16(falseFlag))
Console.WriteLine("{0} converts to {1}.", trueFlag, _
                  Convert.ToUInt16(trueFlag))
' The example displays the following output:
'       False converts to 0.
'       True converts to 1.

bool falseFlag = false;
bool trueFlag = true;

Console.WriteLine("{0} converts to {1}.", falseFlag,
                  Convert.ToInt16(falseFlag));
Console.WriteLine("{0} converts to {1}.", trueFlag,
                  Convert.ToUInt16(trueFlag));
// The example displays the following output:
//       False converts to 0.
//       True converts to 1.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (Byte)

Convert
.
.
::
.
ToUInt16 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Byte _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    byte value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    unsigned char value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:byte -> uint16

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数。

下面的示例将字节数组中的每个元素转换为无符号的 16 位整数。

Dim bytes() As Byte = { Byte.MinValue, 14, 122, Byte.MaxValue}
Dim result As UShort

For Each number As Byte In bytes
   result = Convert.ToUInt16(number)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Byte value '0' to the UInt16 value 0.
'    Converted the Byte value '14' to the UInt16 value 14.
'    Converted the Byte value '122' to the UInt16 value 122.
'    Converted the Byte value '255' to the UInt16 value 255.

byte[] bytes = { Byte.MinValue, 14, 122, Byte.MaxValue};
ushort result;

foreach (byte byteValue in bytes)
{
   result = Convert.ToUInt16(byteValue);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     byteValue.GetType().Name, byteValue,
                     result.GetType().Name, result);
}
// The example displays the following output:
//       Converted the Byte value '0' to the UInt16 value 0.
//       Converted the Byte value '14' to the UInt16 value 14.
//       Converted the Byte value '122' to the UInt16 value 122.
//       Converted the Byte value '255' to the UInt16 value 255.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (Char)

Convert
.
.
::
.
ToUInt16 方法 (Char)
Convert 类

将指定的 Unicode 字符的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Char _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    char value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    wchar_t value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:char -> uint16

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数。

下面的示例将字符数组中的每个元素转换为无符号的 16 位整数。

Dim chars() As Char = { "a"c, "z"c, ChrW(7), ChrW(1023), _
                        ChrW(Short.MaxValue), ChrW(&hFFFE) }
Dim result As UShort

For Each ch As Char in chars
   result = Convert.ToUInt16(ch)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     ch.GetType().Name, ch, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Char value 'a' to the UInt16 value 97.
'    Converted the Char value 'z' to the UInt16 value 122.
'    Converted the Char value '' to the UInt16 value 7.
'    Converted the Char value '?' to the UInt16 value 1023.
'    Converted the Char value '?' to the UInt16 value 32767.
'    Converted the Char value '?' to the UInt16 value 65534.

char[] chars = { 'a', 'z', '\x0007', '\x03FF',
                 '\x7FFF', '\xFFFE' };
ushort result;

foreach (char ch in chars)
{
   try {
      result = Convert.ToUInt16(ch);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        ch.GetType().Name, ch,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("Unable to convert u+{0} to a UInt16.",
                        ((int)ch).ToString("X4"));
   }
}
// The example displays the following output:
//    Converted the Char value 'a' to the UInt16 value 97.
//    Converted the Char value 'z' to the UInt16 value 122.
//    Converted the Char value '' to the UInt16 value 7.
//    Converted the Char value '?' to the UInt16 value 1023.
//    Converted the Char value '?' to the UInt16 value 32767.
//    Converted the Char value '?' to the UInt16 value 65534.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (DateTime)

Convert
.
.
::
.
ToUInt16 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As DateTime _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    DateTime value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    DateTime value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:DateTime -> uint16

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System UInt16
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (Decimal)

Convert
.
.
::
.
ToUInt16 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Decimal _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    decimal value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    Decimal value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:decimal -> uint16

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System UInt16
value，舍入为最接近的 16 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 16 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 小于零或大于 UInt16..::.MaxValue。

下面的示例将 Decimal 值数组中的每个元素转换为无符号的 16 位整数。

Dim values() As Decimal = { Decimal.MinValue, -1034.23d, -12d, 0d, 147d, _
                            9214.16d, Decimal.MaxValue }
Dim result As UShort

For Each value As Decimal In values
   Try
      result = Convert.ToUInt16(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the UInt16 type.", _
                        value)
   End Try
Next
' The example displays the following output:
'    -79228162514264337593543950335 is outside the range of the UInt16 type.
'    -1034.23 is outside the range of the UInt16 type.
'    -12 is outside the range of the UInt16 type.
'    Converted the Decimal value '0' to the UInt16 value 0.
'    Converted the Decimal value '147' to the UInt16 value 147.
'    Converted the Decimal value '9214.16' to the UInt16 value 9214.
'    79228162514264337593543950335 is outside the range of the UInt16 type.

decimal[] numbers = { Decimal.MinValue, -1034.23m, -12m, 0m, 147m,
                            9214.16m, Decimal.MaxValue };
ushort result;

foreach (decimal number in numbers)
{
   try {
      result = Convert.ToUInt16(number);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException)
   {
      Console.WriteLine("{0} is outside the range of the UInt16 type.",
                        number);
   }
}
// The example displays the following output:
//    -79228162514264337593543950335 is outside the range of the UInt16 type.
//    -1034.23 is outside the range of the UInt16 type.
//    -12 is outside the range of the UInt16 type.
//    Converted the Decimal value '0' to the UInt16 value 0.
//    Converted the Decimal value '147' to the UInt16 value 147.
//    Converted the Decimal value '9214.16' to the UInt16 value 9214.
//    79228162514264337593543950335 is outside the range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间
Math Round


Convert ..::.ToUInt16 方法 (Double)

Convert
.
.
::
.
ToUInt16 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Double _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    double value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    double value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:float -> uint16

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System UInt16
value，舍入为最接近的 16 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 16 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 小于零或大于 UInt16..::.MaxValue。

下面的示例将 Double 值数组中的每个元素转换为无符号的 16 位整数。

Dim values() As Double = { Double.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Double.MaxValue }
Dim result As UShort

For Each value As Double In values
   Try
      result = Convert.ToUInt16(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the UInt16 type.", value)
   End Try
Next
' The example displays the following output:
'    -1.79769313486232E+308 is outside the range of the UInt16 type.
'    -13800000000 is outside the range of the UInt16 type.
'    -1023.299 is outside the range of the UInt16 type.
'    -12.98 is outside the range of the UInt16 type.
'    Converted the Double value '0' to the UInt16 value 0.
'    Converted the Double value '9.113E-16' to the UInt16 value 0.
'    Converted the Double value '103.919' to the UInt16 value 104.
'    Converted the Double value '17834.191' to the UInt16 value 17834.
'    1.79769313486232E+308 is outside the range of the UInt16 type.

double[] numbers = { Double.MinValue, -1.38e10, -1023.299, -12.98,
                    0, 9.113e-16, 103.919, 17834.191, Double.MaxValue };
ushort result;

foreach (double number in numbers)
{
   try {
      result = Convert.ToUInt16(number);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException)
   {
      Console.WriteLine("{0} is outside the range of the UInt16 type.", number);
   }
}
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the UInt16 type.
//    -13800000000 is outside the range of the UInt16 type.
//    -1023.299 is outside the range of the UInt16 type.
//    -12.98 is outside the range of the UInt16 type.
//    Converted the Double value '0' to the UInt16 value 0.
//    Converted the Double value '9.113E-16' to the UInt16 value 0.
//    Converted the Double value '103.919' to the UInt16 value 104.
//    Converted the Double value '17834.191' to the UInt16 value 17834.
//    1.79769313486232E+308 is outside the range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间
Double
Math Round


Convert ..::.ToUInt16 方法 (Int16)

Convert
.
.
::
.
ToUInt16 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Short _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    short value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    short value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:int16 -> uint16

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数。
异常 | 条件
OverflowException | value 小于零。

下面的示例尝试将 16 位整数数组中的每个元素转换为无符号的 16 位整数。

Dim numbers() As Short = { Int16.MinValue, -132, 0, 121, 16103, Int16.MaxValue }
Dim result As UShort

For Each number As Short In numbers
   Try
      result = Convert.ToUInt16(number)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int16 value -32768 is outside the range of the UInt16 type.
'    The Int16 value -132 is outside the range of the UInt16 type.
'    Converted the Int16 value '0' to the UInt16 value 0.
'    Converted the Int16 value '121' to the UInt16 value 121.
'    Converted the Int16 value '16103' to the UInt16 value 16103.
'    Converted the Int16 value '32767' to the UInt16 value 32767.

short[] numbers = { Int16.MinValue, -132, 0, 121, 16103, Int16.MaxValue  };
ushort result;

foreach (short number in numbers)
{
   try {
      result = Convert.ToUInt16(number);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int16 value -32768 is outside the range of the UInt16 type.
//    The Int16 value -132 is outside the range of the UInt16 type.
//    Converted the Int16 value '0' to the UInt16 value 0.
//    Converted the Int16 value '121' to the UInt16 value 121.
//    Converted the Int16 value '16103' to the UInt16 value 16103.
//    Converted the Int16 value '32767' to the UInt16 value 32767.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (Int32)

Convert
.
.
::
.
ToUInt16 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Integer _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    int value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    int value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:int -> uint16

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数。
异常 | 条件
OverflowException | value 小于零或大于 UInt16..::.MaxValue。

下面的示例将整数数组中的每个元素转换为无符号的 16 位整数。

Dim numbers() As Integer = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue }
Dim result As UShort

For Each number As Integer In numbers
   Try
      result = Convert.ToUInt16(number)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int32 value -2147483648 is outside the range of the UInt16 type.
'    The Int32 value -1 is outside the range of the UInt16 type.
'    Converted the Int32 value '0' to the UInt16 value 0.
'    Converted the Int32 value '121' to the UInt16 value 121.
'    Converted the Int32 value '340' to the UInt16 value 340.
'    The Int32 value 2147483647 is outside the range of the UInt16 type.

int[] numbers = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue };
ushort result;

foreach (int number in numbers)
{
   try {
      result = Convert.ToUInt16(number);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int32 value -2147483648 is outside the range of the UInt16 type.
//    The Int32 value -1 is outside the range of the UInt16 type.
//    Converted the Int32 value '0' to the UInt16 value 0.
//    Converted the Int32 value '121' to the UInt16 value 121.
//    Converted the Int32 value '340' to the UInt16 value 340.
//    The Int32 value 2147483647 is outside the range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (Int64)

Convert
.
.
::
.
ToUInt16 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Long _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    long value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    long long value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:int64 -> uint16

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数。
异常 | 条件
OverflowException | value 小于零或大于 UInt16..::.MaxValue。

下面的示例将长整数数组中的每个元素转换为无符号的 16 位整数。

Dim numbers() As Long = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue }
Dim result As UShort
For Each number As Long In numbers
   Try
      result = Convert.ToUInt16(number)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int64 value -9223372036854775808 is outside the range of the UInt16 type.
'    The Int64 value -1 is outside the range of the UInt16 type.
'    Converted the Int64 value '0' to the UInt16 value 0.
'    Converted the Int64 value '121' to the UInt16 value 121.
'    Converted the Int64 value '340' to the UInt16 value 340.
'    The Int64 value 9223372036854775807 is outside the range of the UInt16 type.

long[] numbers = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue };
ushort result;

foreach (long number in numbers)
{
   try {
      result = Convert.ToUInt16(number);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int64 value -9223372036854775808 is outside the range of the UInt16 type.
//    The Int64 value -1 is outside the range of the UInt16 type.
//    Converted the Int64 value '0' to the UInt16 value 0.
//    Converted the Int64 value '121' to the UInt16 value 121.
//    Converted the Int64 value '340' to the UInt16 value 340.
//    The Int64 value 9223372036854775807 is outside the range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (Object)

Convert
.
.
::
.
ToUInt16 方法 (Object)
Convert 类

将指定对象的值转换为 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Object _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    Object value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    Object^ value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:Object -> uint16

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 未实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToUInt16 方法的结果。

下面的示例尝试将对象数组中的每个元素转换为无符号 16 位整数。

   Dim values() As Object = { True, -12, 163, 935, "x"c, #5/12/2009#, _
                              "104", "103.0", "-1", _
                              "1.00e2", "One", 1.00e2}
   Dim result As UShort

   For Each value As Object In values
      Try
         result = Convert.ToUInt16(value)
         Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                           value.GetType().Name, value, _
                           result.GetType().Name, result)
      Catch e As OverflowException
         Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.", _
                           value.GetType().Name, value)
      Catch e As FormatException
         Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                           value.GetType().Name, value)
      Catch e As InvalidCastException
         Console.WriteLine("No conversion to an Int16 exists for the {0} value {1}.", _
                           value.GetType().Name, value)

      End Try
   Next
   ' The example displays the following output:
'    Converted the Boolean value 'True' to the UInt16 value 1.
'    The Int32 value -12 is outside the range of the UInt16 type.
'    Converted the Int32 value '163' to the UInt16 value 163.
'    Converted the Int32 value '935' to the UInt16 value 935.
'    Converted the Char value 'x' to the UInt16 value 120.
'    No conversion to an Int16 exists for the DateTime value 5/12/2009 12:00:00 AM.
'    Converted the String value '104' to the UInt16 value 104.
'    The String value 103.0 is not in a recognizable format.
'    The String value -1 is outside the range of the UInt16 type.
'    The String value 1.00e2 is not in a recognizable format.
'    The String value One is not in a recognizable format.
'    Converted the Double value '100' to the UInt16 value 100.

object[] values= { true, -12, 163, 935, 'x', new DateTime(2009, 5, 12),
                   "104", "103.0", "-1", "1.00e2", "One", 1.00e2};
ushort result;

foreach (object value in values)
{
   try {
      result = Convert.ToUInt16(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("No conversion to a UInt16 exists for the {0} value {1}.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    Converted the Boolean value 'True' to the UInt16 value 1.
//    The Int32 value -12 is outside the range of the UInt16 type.
//    Converted the Int32 value '163' to the UInt16 value 163.
//    Converted the Int32 value '935' to the UInt16 value 935.
//    Converted the Char value 'x' to the UInt16 value 120.
//    No conversion to a UInt16 exists for the DateTime value 5/12/2009 12:00:00 AM.
//    Converted the String value '104' to the UInt16 value 104.
//    The String value 103.0 is not in a recognizable format.
//    The String value -1 is outside the range of the UInt16 type.
//    The String value 1.00e2 is not in a recognizable format.
//    The String value One is not in a recognizable format.
//    Converted the Double value '100' to the UInt16 value 100.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (SByte)

Convert
.
.
::
.
ToUInt16 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As SByte _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:sbyte -> uint16

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数。
异常 | 条件
OverflowException | value 小于零。

下面的示例将带符号字节数组中的每个元素转换为无符号的 16 位整数。

Dim numbers() As SByte = { SByte.MinValue, -1, 0, 10, SByte.MaxValue }
Dim result As UShort

For Each number As SByte In numbers
   Try
      result = Convert.ToUInt16(number)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the UInt16 type.", number)
   End Try
Next
' The example displays the following output:
'    -128 is outside the range of the UInt16 type.
'    -1 is outside the range of the UInt16 type.
'    Converted the SByte value '0' to the UInt16 value 0.
'    Converted the SByte value '10' to the UInt16 value 10.
'    Converted the SByte value '127' to the UInt16 value 127.

sbyte[] numbers = { SByte.MinValue, -1, 0, 10, SByte.MaxValue };
ushort result;

foreach (sbyte number in numbers)
{
   try {
      result = Convert.ToUInt16(number);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the UInt16 type.", number);
   }
}
// The example displays the following output:
//    -128 is outside the range of the UInt16 type.
//    -1 is outside the range of the UInt16 type.
//    Converted the SByte value '0' to the UInt16 value 0.
//    Converted the SByte value '10' to the UInt16 value 10.
//    Converted the SByte value '127' to the UInt16 value 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (Single)

Convert
.
.
::
.
ToUInt16 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Single _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    float value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    float value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:float32 -> uint16

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System UInt16
value，舍入为最接近的 16 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 16 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 小于零或大于 UInt16..::.MaxValue。

下面的示例将 String 值数组中的每个元素转换为无符号的 16 位整数。

Dim values() As Single = { Single.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Single.MaxValue }
Dim result As UShort

For Each value As Single In values
   Try
      result = Convert.ToUInt16(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the UInt16 type.", value)
   End Try
Next
' The example displays the following output:
'    -3.402823E+38 is outside the range of the UInt16 type.
'    -1.38E+10 is outside the range of the UInt16 type.
'    -1023.299 is outside the range of the UInt16 type.
'    -12.98 is outside the range of the UInt16 type.
'    Converted the Single value '0' to the UInt16 value 0.
'    Converted the Single value '9.113E-16' to the UInt16 value 0.
'    Converted the Single value '103.919' to the UInt16 value 104.
'    Converted the Single value '17834.19' to the UInt16 value 17834.
'    3.402823E+38 is outside the range of the UInt16 type.

float[] numbers = { Single.MinValue, -1.38e10f, -1023.299f, -12.98f,
                   0f, 9.113e-16f, 103.919f, 17834.191f, Single.MaxValue };
ushort result;

foreach (float number in numbers)
{
   try {
      result = Convert.ToUInt16(number);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the UInt16 type.", number);
   }
}
// The example displays the following output:
//    -3.402823E+38 is outside the range of the UInt16 type.
//    -1.38E+10 is outside the range of the UInt16 type.
//    -1023.299 is outside the range of the UInt16 type.
//    -12.98 is outside the range of the UInt16 type.
//    Converted the Single value '0' to the UInt16 value 0.
//    Converted the Single value '9.113E-16' to the UInt16 value 0.
//    Converted the Single value '103.919' to the UInt16 value 104.
//    Converted the Single value '17834.19' to the UInt16 value 17834.
//    3.402823E+38 is outside the range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间
Single
Math Round


Convert ..::.ToUInt16 方法 (String)

Convert
.
.
::
.
ToUInt16 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As String _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    string value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    String^ value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:string -> uint16

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System UInt16
与 value 中数字等效的 16 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue 的数字。

返回值是对 value 调用 UInt16..::.Parse 的结果。

如果您希望在转换失败时不处理异常，则可以转而调用 UInt16..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 UInt16..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例尝试将数字字符串数组中的每个元素转换为 16 位无符号的整数。

Dim values() As String = { "1603", "1,603", "one", "1.6e03", "1.2e-02", _
                           "-1326", "1074122" }
Dim result As UShort

For Each value As String In values
   Try
      result = Convert.ToUInt16(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                        value.GetType().Name, value)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the UInt16 type.", value)
   End Try
Next
' The example displays the following output:
'    Converted the String value '1603' to the UInt16 value 1603.
'    The String value 1,603 is not in a recognizable format.
'    The String value one is not in a recognizable format.
'    The String value 1.6e03 is not in a recognizable format.
'    The String value 1.2e-02 is not in a recognizable format.
'    -1326 is outside the range of the UInt16 type.
'    1074122 is outside the range of the UInt16 type.

string[] values = { "1603", "1,603", "one", "1.6e03", "1.2e-02",
                    "-1326", "1074122" };
ushort result;

foreach (string value in values)
{
   try {
      result = Convert.ToUInt16(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the UInt16 type.", value);
   }
}
// The example displays the following output:
//    Converted the String value '1603' to the UInt16 value 1603.
//    The String value 1,603 is not in a recognizable format.
//    The String value one is not in a recognizable format.
//    The String value 1.6e03 is not in a recognizable format.
//    The String value 1.2e-02 is not in a recognizable format.
//    -1326 is outside the range of the UInt16 type.
//    1074122 is outside the range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (UInt16)

Convert
.
.
::
.
ToUInt16 方法 (UInt16)
Convert 类

返回指定的 16 位无符号整数；不执行任何实际的转换。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As UShort _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:uint16 -> uint16

参数

value
类型： System UInt16
要返回的 16 位无符号整数。

返回值

类型： System UInt16
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (UInt32)

Convert
.
.
::
.
ToUInt16 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As UInteger _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:uint32 -> uint16

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数。
异常 | 条件
OverflowException | value 大于 UInt16..::.MaxValue。

下面的示例尝试将无符号整数数组中的每个元素转换为 16 位整数。

Dim numbers() As UInteger = { UInt32.MinValue, 121, 340, UInt32.MaxValue }
Dim result As UShort
For Each number As UInteger In numbers
   Try
      result = Convert.ToUInt16(number)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt32 value '0' to the UInt16 value 0.
'    Converted the UInt32 value '121' to the UInt16 value 121.
'    Converted the UInt32 value '340' to the UInt16 value 340.
'    The UInt32 value 4294967295 is outside the range of the UInt16 type.

uint[] numbers = { UInt32.MinValue, 121, 340, UInt32.MaxValue };
ushort result;

foreach (uint number in numbers)
{
   try {
      result = Convert.ToUInt16(number);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt32 value '0' to the UInt16 value 0.
//    Converted the UInt32 value '121' to the UInt16 value 121.
//    Converted the UInt32 value '340' to the UInt16 value 340.
//    The UInt32 value 4294967295 is outside the range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (UInt64)

Convert
.
.
::
.
ToUInt16 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As ULong _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:uint64 -> uint16

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数。
异常 | 条件
OverflowException | value 大于 UInt16..::.MaxValue。

下面的示例尝试将无符号长型整数数组中的每个元素转换为无符号 16 位整数。

Dim numbers() As ULong = { UInt64.MinValue, 121, 340, UInt64.MaxValue }
Dim result As UShort
For Each number As ULong In numbers
   Try
      result = Convert.ToUInt16(number)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt64 value '0' to the UInt16 value 0.
'    Converted the UInt64 value '121' to the UInt16 value 121.
'    Converted the UInt64 value '340' to the UInt16 value 340.
'    The UInt64 value 18446744073709551615 is outside the range of the UInt16 type.

ulong[] numbers = { UInt64.MinValue, 121, 340, UInt64.MaxValue };
ushort result;

foreach (ulong number in numbers)
{
   try {
      result = Convert.ToUInt16(number);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt16 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt64 value '0' to the UInt16 value 0.
//    Converted the UInt64 value '121' to the UInt16 value 121.
//    Converted the UInt64 value '340' to the UInt16 value 340.
//    The UInt64 value 18446744073709551615 is outside the range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToUInt16 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式信息，将指定对象的值转换为 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Object, _
    provider As IFormatProvider _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    Object value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    Object^ value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:Object *
        provider:IFormatProvider -> uint16

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System UInt16
与 value 等效的 16 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 未实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToUInt16 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个 HexString 类，该类实现 IConvertible 接口，并且设计为保存 16 位带符号和 16 位无符号值的字符串表示形式。类包含一个 Sign 属性来表示其十六进制值的符号。 下面的示例定义一个 HexString 类，该类实现 IConvertible 接口，并且设计为保存 16 位带符号和 16 位无符号值的字符串表示形式。类包含一个 Sign 属性来表示其十六进制值的符号。

Imports System.Globalization
Imports System.Text.RegularExpressions

Public Enum SignBit As Integer
   Positive = 1
   Zero = 0
   Negative = -1
End Enum

Public Structure HexString : Implements IConvertible
   Private signBit As SignBit
   Private hexString As String

   Public Property Sign As SignBit
      Set
         signBit = value
      End Set
      Get
         Return signBit
      End Get
   End Property

   Public Property Value As String
      Set
         If value.Trim().Length > 4 Then
            Throw New ArgumentException("The string representation of a 16-bit integer cannot have more than four characters.")
         Else If Not Regex.IsMatch(value, "([0-9,A-F]){1,4}", RegexOptions.IgnoreCase) Then
            Throw New ArgumentException("The hexadecimal representation of a 16-bit integer contains invalid characters.")
         Else
            hexString = value
         End If
      End Set
      Get
         Return hexString
      End Get
   End Property

   ' IConvertible implementations.
   Public Function GetTypeCode() As TypeCode _
                   Implements IConvertible.GetTypeCode
      Return TypeCode.Object
   End Function

   Public Function ToBoolean(provider As IFormatProvider) As Boolean _
                   Implements IConvertible.ToBoolean
      Return signBit <> SignBit.Zero
   End Function

   Public Function ToByte(provider As IFormatProvider) As Byte _
                   Implements IConvertible.ToByte
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToInt16(hexString, 16)))
      Else
         Try
            Return Convert.ToByte(Int16.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the UInt16 type.", Convert.ToUInt16(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToChar(provider As IFormatProvider) As Char _
                   Implements IConvertible.ToChar
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToInt16(hexString, 16)))
      End If

      Dim codePoint As UInt16 = UInt16.Parse(Me.hexString, NumberStyles.HexNumber)
      Return Convert.ToChar(codePoint)
   End Function

   Public Function ToDateTime(provider As IFormatProvider) As Date _
                   Implements IConvertible.ToDateTime
      Throw New InvalidCastException("Hexadecimal to DateTime conversion is not supported.")
   End Function

   Public Function ToDecimal(provider As IFormatProvider) As Decimal _
                   Implements IConvertible.ToDecimal
      If signBit = signBit.Negative Then
         Dim hexValue As Short = Int16.Parse(hexString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(hexValue)
      Else
         Dim hexValue As UShort = UInt16.Parse(hexString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(hexValue)
      End If
   End Function

   Public Function ToDouble(provider As IFormatProvider) As Double _
                   Implements IConvertible.ToDouble
      If signBit = signBit.Negative Then
         Return Convert.ToDouble(Int16.Parse(hexString, NumberStyles.HexNumber))
      Else
         Return Convert.ToDouble(UInt16.Parse(hexString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt16(provider As IFormatProvider) As Int16 _
                   Implements IConvertible.ToInt16
      If signBit = SignBit.Negative Then
         Return Int16.Parse(hexString, NumberStyles.HexNumber)
      Else
         Try
            Return Convert.ToInt16(UInt16.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Int16 type.", Convert.ToUInt16(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToInt32(provider As IFormatProvider) As Int32 _
                   Implements IConvertible.ToInt32
      If signBit = SignBit.Negative Then
         Return Convert.ToInt32(Int16.Parse(hexString, NumberStyles.HexNumber))
      Else
         Return Convert.ToInt32(UInt16.Parse(hexString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt64(provider As IFormatProvider) As Int64 _
                   Implements IConvertible.ToInt64
      If signBit = signBit.Negative Then
         Return Convert.ToInt64(Int16.Parse(hexString, NumberStyles.HexNumber))
      Else
         Return Int64.Parse(hexString, NumberStyles.HexNumber)
      End If
   End Function

   Public Function ToSByte(provider As IFormatProvider) As SByte _
                   Implements IConvertible.ToSByte
      If signBit = signBit.Negative Then
         Try
            Return Convert.ToSByte(Int16.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is outside the range of the SByte type.", _
                                                      Int16.Parse(hexString, NumberStyles.HexNumber), e))
         End Try
      Else
         Try
            Return Convert.ToSByte(UInt16.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is outside the range of the SByte type.", _
                                                    UInt16.Parse(hexString, NumberStyles.HexNumber)), e)
         End Try
      End If
   End Function

   Public Function ToSingle(provider As IFormatProvider) As Single _
                   Implements IConvertible.ToSingle
      If signBit = signBit.Negative Then
         Return Convert.ToSingle(Int16.Parse(hexString, NumberStyles.HexNumber))
      Else
         Return Convert.ToSingle(UInt16.Parse(hexString, NumberStyles.HexNumber))
      End If
   End Function

   Public Overloads Function ToString(provider As IFormatProvider) As String _
                   Implements IConvertible.ToString
      Return "0x" & Me.hexString
   End Function

   Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object _
                   Implements IConvertible.ToType
      Select Case Type.GetTypeCode(conversionType)
         Case TypeCode.Boolean
            Return Me.ToBoolean(Nothing)
         Case TypeCode.Byte
            Return Me.ToByte(Nothing)
         Case TypeCode.Char
            Return Me.ToChar(Nothing)
         Case TypeCode.DateTime
            Return Me.ToDateTime(Nothing)
         Case TypeCode.Decimal
            Return Me.ToDecimal(Nothing)
         Case TypeCode.Double
            Return Me.ToDouble(Nothing)
         Case TypeCode.Int16
            Return Me.ToInt16(Nothing)
         Case TypeCode.Int32
            Return Me.ToInt32(Nothing)
         Case TypeCode.Int64
            Return Me.ToInt64(Nothing)
         Case TypeCode.Object
            If GetType(HexString).Equals(conversionType) Then
               Return Me
            Else
               Throw New InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name))
            End If
         Case TypeCode.SByte
            Return Me.ToSByte(Nothing)
         Case TypeCode.Single
            Return Me.ToSingle(Nothing)
         Case TypeCode.String
            Return Me.ToString(Nothing)
         Case TypeCode.UInt16
            Return Me.ToUInt16(Nothing)
         Case TypeCode.UInt32
            Return Me.ToUInt32(Nothing)
         Case TypeCode.UInt64
            Return Me.ToUInt64(Nothing)
         Case Else
            Throw New InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name))
      End Select
   End Function

   Public Function ToUInt16(provider As IFormatProvider) As UInt16 _
                   Implements IConvertible.ToUInt16
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt16 type.", _
                                                   Int16.Parse(hexString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt16(hexString, 16)
      End If
   End Function

   Public Function ToUInt32(provider As IFormatProvider) As UInt32 _
                   Implements IConvertible.ToUInt32
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt32 type.", _
                                                   Int16.Parse(hexString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt32(hexString, 16)
      End If
   End Function

   Public Function ToUInt64(provider As IFormatProvider) As UInt64 _
                   Implements IConvertible.ToUInt64
      If signBit = signBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt64 type.", _
                                                   Int16.Parse(hexString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt64(hexString, 16)
      End If
   End Function

End Structure

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public enum SignBit { Negative=-1, Zero=0, Positive=1 };

public struct HexString : IConvertible
{
   private SignBit signBit;
   private string hexString;

   public SignBit Sign
   {
      set { signBit = value; }
      get { return signBit; }
   }

   public string Value
   {
      set {
         if (value.Trim().Length > 4)
            throw new ArgumentException("The string representation of a 160bit integer cannot have more than four characters.");
         else if (! Regex.IsMatch(value, "([0-9,A-F]){1,4}", RegexOptions.IgnoreCase))
            throw new ArgumentException("The hexadecimal representation of a 16-bit integer contains invalid characters.");
         else
            hexString = value;
      }
      get { return hexString; }
   }

   // IConvertible implementations.
   public TypeCode GetTypeCode() {
      return TypeCode.Object;
   }

   public bool ToBoolean(IFormatProvider provider)
   {
      return signBit != SignBit.Zero;
   }

   public byte ToByte(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToInt16(hexString, 16)));
      else
         try {
            return Convert.ToByte(UInt16.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the UInt16 type.", Convert.ToUInt16(hexString, 16)), e);
         }
   }

   public char ToChar(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative) {
         throw new OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToInt16(hexString, 16)));
      }

      UInt16 codePoint = UInt16.Parse(this.hexString, NumberStyles.HexNumber);
      return Convert.ToChar(codePoint);
   }

   public DateTime ToDateTime(IFormatProvider provider)
   {
      throw new InvalidCastException("Hexadecimal to DateTime conversion is not supported.");
   }

   public decimal ToDecimal(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
      {
         short hexValue = Int16.Parse(hexString, NumberStyles.HexNumber);
         return Convert.ToDecimal(hexValue);
      }
      else
      {
         ushort hexValue = UInt16.Parse(hexString, NumberStyles.HexNumber);
         return Convert.ToDecimal(hexValue);
      }
   }

   public double ToDouble(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToDouble(Int16.Parse(hexString, NumberStyles.HexNumber));
      else
         return Convert.ToDouble(UInt16.Parse(hexString, NumberStyles.HexNumber));
   }

   public short ToInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Int16.Parse(hexString, NumberStyles.HexNumber);
      else
         try {
            return Convert.ToInt16(UInt16.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Int16 type.",
                                                      Convert.ToUInt16(hexString, 16)), e);
         }
   }

   public int ToInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToInt32(Int16.Parse(hexString, NumberStyles.HexNumber));
      else
         return Convert.ToInt32(UInt16.Parse(hexString, NumberStyles.HexNumber));
   }

   public long ToInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToInt64(Int16.Parse(hexString, NumberStyles.HexNumber));
      else
         return Int64.Parse(hexString, NumberStyles.HexNumber);
   }

   public sbyte ToSByte(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         try {
            return Convert.ToSByte(Int16.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is outside the range of the SByte type.",
                                                      Int16.Parse(hexString, NumberStyles.HexNumber), e));
         }
      else
         try {
            return Convert.ToSByte(UInt16.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is outside the range of the SByte type.",
                                                   UInt16.Parse(hexString, NumberStyles.HexNumber)), e);
         }
   }

   public float ToSingle(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToSingle(Int16.Parse(hexString, NumberStyles.HexNumber));
      else
         return Convert.ToSingle(UInt16.Parse(hexString, NumberStyles.HexNumber));
   }

   public string ToString(IFormatProvider provider)
   {
      return "0x" + this.hexString;
   }

   public object ToType(Type conversionType, IFormatProvider provider)
   {
      switch (Type.GetTypeCode(conversionType))
      {
         case TypeCode.Boolean:
            return this.ToBoolean(null);
         case TypeCode.Byte:
            return this.ToByte(null);
         case TypeCode.Char:
            return this.ToChar(null);
         case TypeCode.DateTime:
            return this.ToDateTime(null);
         case TypeCode.Decimal:
            return this.ToDecimal(null);
         case TypeCode.Double:
            return this.ToDouble(null);
         case TypeCode.Int16:
            return this.ToInt16(null);
         case TypeCode.Int32:
            return this.ToInt32(null);
         case TypeCode.Int64:
            return this.ToInt64(null);
         case TypeCode.Object:
            if (typeof(HexString).Equals(conversionType))
               return this;
            else
               throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name));
         case TypeCode.SByte:
            return this.ToSByte(null);
         case TypeCode.Single:
            return this.ToSingle(null);
         case TypeCode.String:
            return this.ToString(null);
         case TypeCode.UInt16:
            return this.ToUInt16(null);
         case TypeCode.UInt32:
            return this.ToUInt32(null);
         case TypeCode.UInt64:
            return this.ToUInt64(null);
         default:
            throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
      }
   }

   public UInt16 ToUInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt16 type.",
                                                   Int16.Parse(hexString, NumberStyles.HexNumber)));
      else
         return UInt16.Parse(hexString, NumberStyles.HexNumber);
   }

   public UInt32 ToUInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt32 type.",
                                                   Int16.Parse(hexString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt32(hexString, 16);
   }

   public UInt64 ToUInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt64 type.",
                                                   Int64.Parse(hexString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt64(hexString, 16);
   }
}

下面的示例演示了对 ToUInt16(Object, IFormatProvider) 方法（将 HexString 对象作为参数传递）的调用进而调用 HexString 类的 IConvertible..::.ToUInt16 实现。

Module Example
   Public Sub Main()
      Dim positiveValue As UInt16 = 32000
      Dim negativeValue As Int16 = -1

      Dim positiveString As New HexString()
      positiveString.Sign = CType(Math.Sign(positiveValue), SignBit)
      positiveString.Value = positiveValue.ToString("X4")

      Dim negativeString As New HexString()
      negativeString.Sign = CType(Math.Sign(negativeValue), SignBit)
      negativeString.Value = negativeValue.ToString("X4")

      Try
         Console.WriteLine("0x{0} converts to {1}.", positiveString.Value, Convert.ToUInt16(positiveString))
      Catch e As OverflowException
         Console.WriteLine("{0} is outside the range of the UInt16 type.", _
                           Int16.Parse(positiveString.Value, NumberStyles.HexNumber))
      End Try

      Try
         Console.WriteLine("0x{0} converts to {1}.", negativeString.Value, Convert.ToUInt16(negativeString))
      Catch e As OverflowException
         Console.WriteLine("{0} is outside the range of the UInt16 type.", _
                           Int16.Parse(negativeString.Value, NumberStyles.HexNumber))
      End Try
   End Sub
End Module
' The example dosplays the following output:
'       0x7D00 converts to 32000.
'       -1 is outside the range of the UInt16 type.

public class Example
{
   public static void Main()
   {
      ushort positiveValue = 32000;
      short negativeValue = -1;

      HexString positiveString = new HexString();
      positiveString.Sign = (SignBit) Math.Sign(positiveValue);
      positiveString.Value = positiveValue.ToString("X2");

      HexString negativeString = new HexString();
      negativeString.Sign = (SignBit) Math.Sign(negativeValue);
      negativeString.Value = negativeValue.ToString("X2");

      try {
         Console.WriteLine("0x{0} converts to {1}.", positiveString.Value, Convert.ToUInt16(positiveString));
      }
      catch (OverflowException) {
         Console.WriteLine("{0} is outside the range of the UInt16 type.",
                           Int16.Parse(negativeString.Value, NumberStyles.HexNumber));
      }

      try {
         Console.WriteLine("0x{0} converts to {1}.", negativeString.Value, Convert.ToUInt16(negativeString));
      }
      catch (OverflowException) {
         Console.WriteLine("{0} is outside the range of the UInt16 type.",
                           Int16.Parse(negativeString.Value, NumberStyles.HexNumber));
      }
   }
}
// The example displays the following output:
//       0x7D00 converts to 32000.
//       -1 is outside the range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToUInt16 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As String, _
    provider As IFormatProvider _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    string value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    String^ value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:string *
        provider:IFormatProvider -> uint16

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System UInt16
与 value 中数字等效的 16 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue 的数字。

返回值是对 value 调用 UInt16..::.Parse 的结果。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 UInt16..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 UInt16..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它对固定区域性使用此提供程序和 NumberFormatInfo 提供程序，尝试将数值字符串数组的每个元素都转换为整数。 下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它对固定区域性使用此提供程序和 NumberFormatInfo 提供程序，尝试将数值字符串数组的每个元素都转换为整数。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Create a NumberFormatInfo object and set several of its
      ' properties that apply to numbers.
      Dim provider As New NumberFormatInfo()
      provider.PositiveSign = "pos "
      provider.NegativeSign = "neg "

      ' Define an array of strings to convert to UInt16 values.
      Dim values() As String = { "34567", "+34567", "pos 34567", _
                                 "34567.", "34567.", "65535", _
                                 "65535", "65535" }

      For Each value As String In values
         Console.Write("{0,-12:}  -->  ", value)
         Try
            Console.WriteLine("{0,17}", Convert.ToUInt16(value, provider))
         Catch e As FormatException
            Console.WriteLine("{0,17}", e.GetType().Name)
         End Try
      Next
    End Sub
End Module
' The example displays the following output:
'       34567         -->              34567
'       +34567        -->    FormatException
'       pos 34567     -->              34567
'       34567.        -->    FormatException
'       34567.        -->    FormatException
'       65535         -->              65535
'       65535         -->              65535
'       65535         -->              65535

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Create a NumberFormatInfo object and set several of its
      // properties that apply to numbers.
      NumberFormatInfo provider = new NumberFormatInfo();
      provider.PositiveSign = "pos ";
      provider.NegativeSign = "neg ";

      // Define an array of strings to convert to UInt16 values.
      string[] values= { "34567", "+34567", "pos 34567", "34567.",
                         "34567.", "65535", "65535", "65535" };

      foreach (string value in values)
      {
         Console.Write("{0,-12:}  -->  ", value);
         try {
            Console.WriteLine("{0,17}", Convert.ToUInt16(value, provider));
         }
         catch (FormatException e) {
            Console.WriteLine("{0,17}", e.GetType().Name);
         }
      }
   }
}
// The example displays the following output:
//       34567         -->              34567
//       +34567        -->    FormatException
//       pos 34567     -->              34567
//       34567.        -->    FormatException
//       34567.        -->    FormatException
//       65535         -->              65535
//       65535         -->              65535
//       65535         -->              65535

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt16 方法 (String, Int32)

Convert
.
.
::
.
ToUInt16 方法 (String, Int32)
Convert 类

将指定基的数字的字符串表示形式转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As String, _
    fromBase As Integer _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    string value,
    int fromBase
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    String^ value,
    int fromBase
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:string *
        fromBase:int -> uint16

参数

value
类型： System String
包含要转换的数字的字符串。
fromBase
类型： System Int32
value 中数字的基数，它必须是 2、8、10 或 16。

返回值

类型： System UInt16
与 value 中数字等效的 16 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
ArgumentException | fromBase 不是 2、8、10 或 16。 - 或 - value，它表示一个非 10 为基的无符号数，前面带一个负号。
FormatException | value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。 value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。
OverflowException | value，它表示一个非 10 为基的无符号数，前面带一个负号。 - 或 - value 表示小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue 的数字。

如果 fromBase 为 16，则可以在 value 参数指定的数字前面加上“0x”或“0X”。

由于 UInt16 数据类型仅支持无符号值，因此 ToUInt16(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 16 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt16 数据类型的范围的有符号整数值转换为 UInt16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to 32768”（0x8000 转换为 32768），而不是引发异常。 由于 UInt16 数据类型仅支持无符号值，因此 ToUInt16(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 16 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt16 数据类型的范围的有符号整数值转换为 UInt16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to 32768”（0x8000 转换为 32768），而不是引发异常。 由于 UInt16 数据类型仅支持无符号值，因此 ToUInt16(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 16 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt16 数据类型的范围的有符号整数值转换为 UInt16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to 32768”（0x8000 转换为 32768），而不是引发异常。 由于 UInt16 数据类型仅支持无符号值，因此 ToUInt16(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 16 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt16 数据类型的范围的有符号整数值转换为 UInt16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to 32768”（0x8000 转换为 32768），而不是引发异常。 由于 UInt16 数据类型仅支持无符号值，因此 ToUInt16(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 16 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt16 数据类型的范围的有符号整数值转换为 UInt16 值，从而不让该方法引发异常。下面的示例将 Int16..::.MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt16(String, Int32) 方法。该方法将显示消息“0x8000 converts to 32768”（0x8000 转换为 32768），而不是引发异常。

' Create a hexadecimal value out of range of the UInt16 type.
Dim value As String = Convert.ToString(Short.MinValue, 16)
' Convert it back to a number.
Try
   Dim number As UInt16 = Convert.ToUInt16(value, 16)
   Console.WriteLine("0x{0} converts to {1}.", value, number)
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned short integer.", _
                     value)
End Try

// Create a hexadecimal value out of range of the UInt16 type.
string value = Convert.ToString(Int16.MinValue, 16);
// Convert it back to a number.
try
{
   UInt16 number = Convert.ToUInt16(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned short integer.",
                     value);
}

在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt16 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt16 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt16 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt16 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt16 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt16 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt16 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt16 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt16 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt16 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。

' Create a negative hexadecimal value out of range of the UInt16 type.
Dim sourceNumber As Short = Short.MinValue
Dim isSigned As Boolean = Math.Sign(sourceNumber.MinValue) = -1
Dim value As String = Convert.ToString(sourceNumber, 16)
Dim targetNumber As UInt16
Try
   targetNumber = Convert.ToUInt16(value, 16)
   If isSigned And ((targetNumber And &H8000) <> 0) Then
      Throw New OverflowException()
   Else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber)
   End If
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned short integer.", _
                     value)
End Try
' Displays the following to the console:
'    Unable to convert '0x8000' to an unsigned short integer.

// Create a negative hexadecimal value out of range of the UInt16 type.
short sourceNumber = Int16.MinValue;
bool isSigned = Math.Sign((short)sourceNumber.GetType().GetField("MinValue").GetValue(null)) == -1;
string value = Convert.ToString(sourceNumber, 16);
UInt16 targetNumber;
try
{
   targetNumber = Convert.ToUInt16(value, 16);
   if (isSigned && ((targetNumber & 0x8000) != 0))
      throw new OverflowException();
   else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned short integer.", value);
}
// Displays the following to the console:
//    Unable to convert '0x8000' to an unsigned short integer.

下面的示例尝试将数值字符串数组中的每个元素解释为十六进制值，并将其转换为无符号的 16 位整数。

Module Example
   Public Sub Main()
      Dim hexStrings() As String = { "8000", "0FFF", "f000", "00A30", "D", _
                                     "-13", "9AC61", "GAD" }
      For Each hexString As String In hexStrings
         Try
            Dim number As UShort = Convert.ToUInt16(hexString, 16)
            Console.WriteLine("Converted '{0}' to {1:N0}.", hexString, number)
         Catch e As FormatException
            Console.WriteLine("'{0}' is not in the correct format for a hexadecimal number.", _
                              hexString)
         Catch e As OverflowException
            Console.WriteLine("'{0}' is outside the range of an Int16.", hexString)
         Catch e As ArgumentException
            Console.WriteLine("'{0}' is invalid in base 16.", hexString)
         End Try
      Next
   End Sub
End Module
'    ' The example displays the following output:
'    Converted '8000' to 32,768.
'    Converted '0FFF' to 4,095.
'    Converted 'f000' to 61,440.
'    Converted '00A30' to 2,608.
'    Converted 'D' to 13.
'    '-13' is invalid in base 16.
'    '9AC61' is outside the range of an Int16.
'    'GAD' is not in the correct format for a hexadecimal number.

using System;

public class Example
{
   public static void Main()
   {
      string[] hexStrings = { "8000", "0FFF", "f000", "00A30", "D", "-13",
                              "9AC61", "GAD" };
      foreach (string hexString in hexStrings)
      {
         try {
            ushort number = Convert.ToUInt16(hexString, 16);
            Console.WriteLine("Converted '{0}' to {1:N0}.", hexString, number);
         }
         catch (FormatException) {
            Console.WriteLine("'{0}' is not in the correct format for a hexadecimal number.",
                              hexString);
         }
         catch (OverflowException) {
            Console.WriteLine("'{0}' is outside the range of an Int16.", hexString);
         }
         catch (ArgumentException) {
            Console.WriteLine("'{0}' is invalid in base 16.", hexString);
         }
      }
   }
}
// The example displays the following output:
//    Converted '8000' to 32,768.
//    Converted '0FFF' to 4,095.
//    Converted 'f000' to 61,440.
//    Converted '00A30' to 2,608.
//    Converted 'D' to 13.
//    '-13' is invalid in base 16.
//    '9AC61' is outside the range of an Int16.
//    'GAD' is not in the correct format for a hexadecimal number.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt16 重载
System 命名空间


Convert ..::.ToUInt32 方法

Convert
.
.
::
.
ToUInt32 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 32 位无符号整数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToUInt32 方法 (Boolean)

Convert
.
.
::
.
ToUInt32 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Boolean _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    bool value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    bool value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:bool -> uint32

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System UInt32
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例将布尔值 true 和 false 转换为无符号的整数。

Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True

Console.WriteLine("{0} converts to {1}.", falseFlag, _
                  Convert.ToUInt32(falseFlag))
Console.WriteLine("{0} converts to {1}.", trueFlag, _
                  Convert.ToUInt32(trueFlag))
' The example displays the following output:
'       False converts to 0.
'       True converts to 1.

bool falseFlag = false;
bool trueFlag = true;

Console.WriteLine("{0} converts to {1}.", falseFlag,
                  Convert.ToUInt32(falseFlag));
Console.WriteLine("{0} converts to {1}.", trueFlag,
                  Convert.ToUInt32(trueFlag));
// The example displays the following output:
//       False converts to 0.
//       True converts to 1.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (Byte)

Convert
.
.
::
.
ToUInt32 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Byte _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    byte value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    unsigned char value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:byte -> uint32

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数。

下面的示例将字节数组中的每个元素转换为无符号的整数。

Dim bytes() As Byte = { Byte.MinValue, 14, 122, Byte.MaxValue}
Dim result As UInteger

For Each byteValue As Byte In bytes
   result = Convert.ToUInt32(byteValue)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     byteValue.GetType().Name, byteValue, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Byte value 0 to the UInt32 value 0.
'    Converted the Byte value 14 to the UInt32 value 14.
'    Converted the Byte value 122 to the UInt32 value 122.
'    Converted the Byte value 255 to the UInt32 value 255.

byte[] bytes = { Byte.MinValue, 14, 122, Byte.MaxValue};
uint result;

foreach (byte byteValue in bytes)
{
   result = Convert.ToUInt32(byteValue);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     byteValue.GetType().Name, byteValue,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Byte value 0 to the UInt32 value 0.
//    Converted the Byte value 14 to the UInt32 value 14.
//    Converted the Byte value 122 to the UInt32 value 122.
//    Converted the Byte value 255 to the UInt32 value 255.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (Char)

Convert
.
.
::
.
ToUInt32 方法 (Char)
Convert 类

将指定的 Unicode 字符的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Char _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    char value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    wchar_t value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:char -> uint32

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数。

下面的示例将字符数组中的每个元素转换为无符号整数。

Dim chars() As Char = { "a"c, "z"c, ChrW(7), ChrW(1023), _
                        ChrW(Short.MaxValue), ChrW(&hFFFE) }
Dim result As UInteger

For Each ch As Char in chars
   result = Convert.ToUInt32(ch)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     ch.GetType().Name, ch, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Char value 'a' to the UInt32 value 97.
'    Converted the Char value 'z' to the UInt32 value 122.
'    Converted the Char value '' to the UInt32 value 7.
'    Converted the Char value '?' to the UInt32 value 1023.
'    Converted the Char value '?' to the UInt32 value 32767.
'    Converted the Char value '?' to the UInt32 value 65534.

char[] chars = { 'a', 'z', '\u0007', '\u03FF',
                 '\u7FFF', '\uFFFE' };
uint result;

foreach (char ch in chars)
{
   result = Convert.ToUInt32(ch);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     ch.GetType().Name, ch,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Char value 'a' to the UInt32 value 97.
//    Converted the Char value 'z' to the UInt32 value 122.
//    Converted the Char value '' to the UInt32 value 7.
//    Converted the Char value '?' to the UInt32 value 1023.
//    Converted the Char value '?' to the UInt32 value 32767.
//    Converted the Char value '?' to the UInt32 value 65534.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (DateTime)

Convert
.
.
::
.
ToUInt32 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As DateTime _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    DateTime value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    DateTime value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:DateTime -> uint32

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System UInt32
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (Decimal)

Convert
.
.
::
.
ToUInt32 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Decimal _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    decimal value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    Decimal value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:decimal -> uint32

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System UInt32
value，舍入为最接近的 32 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 32 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 小于零或大于 UInt32..::.MaxValue。

下面的示例尝试将 Decimal 值的数组中的每个元素转换为无符号的整数。

Dim values() As Decimal = { Decimal.MinValue, -1034.23d, -12d, 0d, 147d, _
                            199.55d, 9214.16d, Decimal.MaxValue }
Dim result As UInteger

For Each value As Decimal In values
   Try
      result = Convert.ToUInt32(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the UInt32 type.", _
                        value)
   End Try
Next
' The example displays the following output:
'    -79228162514264337593543950335 is outside the range of the UInt32 type.
'    -1034.23 is outside the range of the UInt32 type.
'    -12 is outside the range of the UInt32 type.
'    Converted the Decimal value '0' to the UInt32 value 0.
'    Converted the Decimal value '147' to the UInt32 value 147.
'    Converted the Decimal value '199.55' to the UInt32 value 200.
'    Converted the Decimal value '9214.16' to the UInt32 value 9214.
'    79228162514264337593543950335 is outside the range of the UInt32 type.

decimal[] values= { Decimal.MinValue, -1034.23m, -12m, 0m, 147m,
                    199.55m, 9214.16m, Decimal.MaxValue };
uint result;

foreach (decimal value in values)
{
   try {
      result = Convert.ToUInt32(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    The Decimal value -79228162514264337593543950335 is outside the range of the UInt32 type.
//    The Decimal value -1034.23 is outside the range of the UInt32 type.
//    The Decimal value -12 is outside the range of the UInt32 type.
//    Converted the Decimal value '0' to the UInt32 value 0.
//    Converted the Decimal value '147' to the UInt32 value 147.
//    Converted the Decimal value '199.55' to the UInt32 value 200.
//    Converted the Decimal value '9214.16' to the UInt32 value 9214.
//    The Decimal value 79228162514264337593543950335 is outside the range of the UInt32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间
Math Round


Convert ..::.ToUInt32 方法 (Double)

Convert
.
.
::
.
ToUInt32 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Double _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    double value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    double value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:float -> uint32

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System UInt32
value，舍入为最接近的 32 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 32 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 小于零或大于 UInt32..::.MaxValue。

下面的示例尝试将 Double 值的数组中的每个元素转换为无符号的整数。

Dim values() As Double = { Double.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Double.MaxValue }
Dim result As UInteger

For Each value As Double In values
   Try
      result = Convert.ToUInt32(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    The Double value -1.79769313486232E+308 is outside the range of the UInt32 type.
'    The Double value -13800000000 is outside the range of the UInt32 type.
'    The Double value -1023.299 is outside the range of the UInt32 type.
'    The Double value -12.98 is outside the range of the UInt32 type.
'    Converted the Double value '0' to the UInt32 value 0.
'    Converted the Double value '9.113E-16' to the UInt32 value 0.
'    Converted the Double value '103.919' to the UInt32 value 104.
'    Converted the Double value '17834.191' to the UInt32 value 17834.
'    The Double value 1.79769313486232E+308 is outside the range of the UInt32 type.

double[] values= { Double.MinValue, -1.38e10, -1023.299, -12.98,
                   0, 9.113e-16, 103.919, 17834.191, Double.MaxValue };
uint result;

foreach (double value in values)
{
   try {
      result = Convert.ToUInt32(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    The Double value -1.79769313486232E+308 is outside the range of the UInt32 type.
//    The Double value -13800000000 is outside the range of the UInt32 type.
//    The Double value -1023.299 is outside the range of the UInt32 type.
//    The Double value -12.98 is outside the range of the UInt32 type.
//    Converted the Double value '0' to the UInt32 value 0.
//    Converted the Double value '9.113E-16' to the UInt32 value 0.
//    Converted the Double value '103.919' to the UInt32 value 104.
//    Converted the Double value '17834.191' to the UInt32 value 17834.
//    The Double value 1.79769313486232E+308 is outside the range of the UInt32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间
Double
Math Round


Convert ..::.ToUInt32 方法 (Int16)

Convert
.
.
::
.
ToUInt32 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Short _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    short value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    short value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:int16 -> uint32

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数。
异常 | 条件
OverflowException | value 小于零。

下面的示例尝试将 16 位整数数组中的每个元素转换为无符号的整数。

Dim numbers() As Short = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue }
Dim result As UInteger

For Each number As Short In numbers
   Try
      result = Convert.ToUInt32(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                           number.GetType().Name, number, _
                           result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int16 value -32768 is outside the range of the UInt32 type.
'    The Int16 value -1 is outside the range of the UInt32 type.
'    Converted the Int16 value 0 to the UInt32 value 0.
'    Converted the Int16 value 121 to the UInt32 value 121.
'    Converted the Int16 value 340 to the UInt32 value 340.
'    Converted the Int16 value 32767 to the UInt32 value 32767.

short[] numbers= { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue };
uint result;

foreach (short number in numbers)
{
   try {
      result = Convert.ToUInt32(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                           number.GetType().Name, number,
                           result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int16 value -32768 is outside the range of the UInt32 type.
//    The Int16 value -1 is outside the range of the UInt32 type.
//    Converted the Int16 value 0 to the UInt32 value 0.
//    Converted the Int16 value 121 to the UInt32 value 121.
//    Converted the Int16 value 340 to the UInt32 value 340.
//    Converted the Int16 value 32767 to the UInt32 value 32767.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (Int32)

Convert
.
.
::
.
ToUInt32 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Integer _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    int value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    int value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:int -> uint32

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数。
异常 | 条件
OverflowException | value 小于零。

下面的示例尝试将整数数组中的每个元素转换为无符号的整数。

Dim numbers() As Integer = { Int32.MinValue, -1203, 0, 121, 1340, Int32.MaxValue }
Dim result As UInteger
For Each number As Integer In numbers
   Try
      result = Convert.ToUInt32(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int32 value -2147483648 is outside the range of the UInt32 type.
'    The Int32 value -1203 is outside the range of the UInt32 type.
'    Converted the Int32 value 0 to the UInt32 value 0.
'    Converted the Int32 value 121 to the UInt32 value 121.
'    Converted the Int32 value 1340 to the UInt32 value 1340.
'    Converted the Int32 value 2147483647 to the UInt32 value 2147483647.

int[] numbers = { Int32.MinValue, -1203, 0, 121, 1340, Int32.MaxValue };
uint result;
foreach (int number in numbers)
{
   try {
      result = Convert.ToUInt32(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int32 value -2147483648 is outside the range of the UInt32 type.
//    The Int32 value -1203 is outside the range of the UInt32 type.
//    Converted the Int32 value 0 to the UInt32 value 0.
//    Converted the Int32 value 121 to the UInt32 value 121.
//    Converted the Int32 value 1340 to the UInt32 value 1340.
//    Converted the Int32 value 2147483647 to the UInt32 value 2147483647.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (Int64)

Convert
.
.
::
.
ToUInt32 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Long _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    long value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    long long value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:int64 -> uint32

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数。
异常 | 条件
OverflowException | value 小于零或大于 UInt32..::.MaxValue。

下面的示例尝试将长整型数组中的每个元素转换为无符号的整数。

Dim numbers() As Long = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue }
Dim result As UInteger
For Each number As Long In numbers
   Try
      result = Convert.ToUInt32(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int64 value -9223372036854775808 is outside the range of the UInt32 type.
'    The Int64 value -1 is outside the range of the UInt32 type.
'    Converted the Int64 value 0 to the UInt32 value 0.
'    Converted the Int64 value 121 to the UInt32 value 121.
'    Converted the Int64 value 340 to the UInt32 value 340.
'    The Int64 value 9223372036854775807 is outside the range of the UInt32 type.

long[] numbers = { Int64.MinValue, -1, 0, 121, 340, Int64.MaxValue };
uint result;
foreach (long number in numbers)
{
   try {
      result = Convert.ToUInt32(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int64 value -9223372036854775808 is outside the range of the UInt32 type.
//    The Int64 value -1 is outside the range of the UInt32 type.
//    Converted the Int64 value 0 to the UInt32 value 0.
//    Converted the Int64 value 121 to the UInt32 value 121.
//    Converted the Int64 value 340 to the UInt32 value 340.
//    The Int64 value 9223372036854775807 is outside the range of the UInt32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (Object)

Convert
.
.
::
.
ToUInt32 方法 (Object)
Convert 类

将指定对象的值转换为 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Object _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    Object value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    Object^ value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:Object -> uint32

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToUInt32 方法的结果。

下面的示例尝试将对象数组中的每个元素转换为无符号整数。

Dim values() As Object = { True, -12, 163, 935, "x"c, #5/12/2009#, _
                           "104", "103.0", "-1", _
                           "1.00e2", "One", 1.00e2, 16.3e42}
Dim result As UInteger

For Each value As Object In values
   Try
      result = Convert.ToUInt32(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("No conversion to a UInt32 exists for the {0} value {1}.", _
                        value.GetType().Name, value)

   End Try
Next
' The example displays the following output:
'    Converted the Boolean value True to the UInt32 value 1.
'    The Int32 value -12 is outside the range of the UInt32 type.
'    Converted the Int32 value 163 to the UInt32 value 163.
'    Converted the Int32 value 935 to the UInt32 value 935.
'    Converted the Char value x to the UInt32 value 120.
'    No conversion to a UInt32 exists for the DateTime value 5/12/2009 12:00:00 AM.
'    Converted the String value 104 to the UInt32 value 104.
'    The String value 103.0 is not in a recognizable format.
'    The String value -1 is outside the range of the UInt32 type.
'    The String value 1.00e2 is not in a recognizable format.
'    The String value One is not in a recognizable format.
'    Converted the Double value 100 to the UInt32 value 100.
'    The Double value 1.63E+43 is outside the range of the UInt32 type.

object[] values = { true, -12, 163, 935, 'x', new DateTime(2009, 5, 12),
                    "104", "103.0", "-1",
                    "1.00e2", "One", 1.00e2, 16.3e42};
uint result;

foreach (object value in values)
{
   try {
      result = Convert.ToUInt32(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value '{1}' is outside the range of the UInt32 type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("No conversion to a UInt32 exists for the {0} value '{1}'.",
                        value.GetType().Name, value);

   }
}
// The example displays the following output:
//    Converted the Boolean value True to the UInt32 value 1.
//    The Int32 value '-12' is outside the range of the UInt32 type.
//    Converted the Int32 value 163 to the UInt32 value 163.
//    Converted the Int32 value 935 to the UInt32 value 935.
//    Converted the Char value x to the UInt32 value 120.
//    No conversion to a UInt32 exists for the DateTime value '5/12/2009 12:00:00 AM'.
//    Converted the String value 104 to the UInt32 value 104.
//    The String value 103.0 is not in a recognizable format.
//    The String value '-1' is outside the range of the UInt32 type.
//    The String value 1.00e2 is not in a recognizable format.
//    The String value One is not in a recognizable format.
//    Converted the Double value 100 to the UInt32 value 100.
//    The Double value '1.63E+43' is outside the range of the UInt32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (SByte)

Convert
.
.
::
.
ToUInt32 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As SByte _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:sbyte -> uint32

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数。
异常 | 条件
OverflowException | value 小于零。

下面的示例尝试将带符号字节数组中的每个元素转换为无符号的整数。

Dim numbers() As SByte = { SByte.MinValue, -1, 0, 10, SByte.MaxValue }
Dim result As UInteger

For Each number As SByte In numbers
   Try
      result = Convert.ToUInt32(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The SByte value -128 is outside the range of the UInt32 type.
'    The SByte value -1 is outside the range of the UInt32 type.
'    Converted the SByte value 0 to the UInt32 value 0.
'    Converted the SByte value 10 to the UInt32 value 10.
'    Converted the SByte value 127 to the UInt32 value 127.

sbyte[] numbers = { SByte.MinValue, -1, 0, 10, SByte.MaxValue };
uint result;

foreach (sbyte number in numbers)
{
   try {
      result = Convert.ToUInt32(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The SByte value -128 is outside the range of the UInt32 type.
//    The SByte value -1 is outside the range of the UInt32 type.
//    Converted the SByte value 0 to the UInt32 value 0.
//    Converted the SByte value 10 to the UInt32 value 10.
//    Converted the SByte value 127 to the UInt32 value 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (Single)

Convert
.
.
::
.
ToUInt32 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Single _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    float value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    float value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:float32 -> uint32

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System UInt32
value，舍入为最接近的 32 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 32 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 小于零或大于 UInt32..::.MaxValue。

下面的示例尝试将 Single 值的数组中的每个元素转换为无符号的整数。

Dim values() As Single = { Single.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Single.MaxValue }
Dim result As UInteger

For Each value As Single In values
   Try
      result = Convert.ToUInt32(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    The Single value -3.402823E+38 is outside the range of the UInt32 type.
'    The Single value -1.38E+10 is outside the range of the UInt32 type.
'    The Single value -1023.299 is outside the range of the UInt32 type.
'    The Single value -12.98 is outside the range of the UInt32 type.
'    Converted the Single value 0 to the UInt32 value 0.
'    Converted the Single value 9.113E-16 to the UInt32 value 0.
'    Converted the Single value 103.919 to the UInt32 value 104.
'    Converted the Single value 17834.19 to the UInt32 value 17834.
'    The Single value 3.402823E+38 is outside the range of the UInt32 type.

float[] values= { Single.MinValue, -1.38e10f, -1023.299f, -12.98f,
                  0f, 9.113e-16f, 103.919f, 17834.191f, Single.MaxValue };
uint result;

foreach (float value in values)
{
   try {
      result = Convert.ToUInt32(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    The Single value -3.402823E+38 is outside the range of the UInt32 type.
//    The Single value -1.38E+10 is outside the range of the UInt32 type.
//    The Single value -1023.299 is outside the range of the UInt32 type.
//    The Single value -12.98 is outside the range of the UInt32 type.
//    Converted the Single value 0 to the UInt32 value 0.
//    Converted the Single value 9.113E-16 to the UInt32 value 0.
//    Converted the Single value 103.919 to the UInt32 value 104.
//    Converted the Single value 17834.19 to the UInt32 value 17834.
//    The Single value 3.402823E+38 is outside the range of the UInt32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间
Single
Math Round


Convert ..::.ToUInt32 方法 (String)

Convert
.
.
::
.
ToUInt32 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As String _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    string value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    String^ value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:string -> uint32

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System UInt32
与 value 中数字等效的 32 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue 的数字。

返回值是对 value 调用 UInt32..::.Parse(String) 方法的结果。

如果您希望在转换失败时不处理异常，则可以转而调用 UInt32..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 UInt32..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例将字符串数组中的元素解释为数值字符串，并尝试将它们转换为无符号的整数。

Dim values() As String = { "One", "1.34e28", "-26.87", "-18", "-6.00", _
                           " 0", "137", "1601.9", Int32.MaxValue.ToString() }
Dim result As UInteger

For Each value As String In values
   Try
      result = Convert.ToUInt32(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value '{1}' is not in a recognizable format.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    The String value 'One' is not in a recognizable format.
'    The String value '1.34e28' is not in a recognizable format.
'    The String value '-26.87' is not in a recognizable format.
'    The String value -18 is outside the range of the UInt32 type.
'    The String value '-6.00' is not in a recognizable format.
'    Converted the String value ' 0' to the UInt32 value 0.
'    Converted the String value '137' to the UInt32 value 137.
'    The String value '1601.9' is not in a recognizable format.
'    Converted the String value '2147483647' to the UInt32 value 2147483647.

string[] values = { "One", "1.34e28", "-26.87", "-18", "-6.00",
                    " 0", "137", "1601.9", Int32.MaxValue.ToString() };
uint result;

foreach (string value in values)
{
   try {
      result = Convert.ToUInt32(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value '{1}' is outside the range of the UInt32 type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value '{1}' is not in a recognizable format.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    The String value 'One' is not in a recognizable format.
//    The String value '1.34e28' is not in a recognizable format.
//    The String value '-26.87' is not in a recognizable format.
//    The String value '-18' is outside the range of the UInt32 type.
//    The String value '-6.00' is not in a recognizable format.
//    Converted the String value ' 0' to the UInt32 value 0.
//    Converted the String value '137' to the UInt32 value 137.
//    The String value '1601.9' is not in a recognizable format.
//    Converted the String value '2147483647' to the UInt32 value 2147483647.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (UInt16)

Convert
.
.
::
.
ToUInt32 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As UShort _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:uint16 -> uint32

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数。

下面的示例将无符号的 16 位整数数组中的每个元素转换为无符号的整数值。

Dim numbers() As UShort = { UInt16.MinValue, 121, 340, UInt16.MaxValue }
Dim result As UInteger

For Each number As UShort In numbers
   result = Convert.ToUInt32(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the UInt16 value 0 to the UInt32 value 0.
'    Converted the UInt16 value 121 to the UInt32 value 121.
'    Converted the UInt16 value 340 to the UInt32 value 340.
'    Converted the UInt16 value 65535 to the UInt32 value 65535.

ushort[] numbers = { UInt16.MinValue, 121, 340, UInt16.MaxValue };
uint result;
foreach (ushort number in numbers)
{
   result = Convert.ToUInt32(number);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     number.GetType().Name, number,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the UInt16 value 0 to the UInt32 value 0.
//    Converted the UInt16 value 121 to the UInt32 value 121.
//    Converted the UInt16 value 340 to the UInt32 value 340.
//    Converted the UInt16 value 65535 to the UInt32 value 65535.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (UInt32)

Convert
.
.
::
.
ToUInt32 方法 (UInt32)
Convert 类

返回指定的 32 位无符号整数；不执行任何实际的转换。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As UInteger _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:uint32 -> uint32

参数

value
类型： System UInt32
要返回的 32 位无符号整数。

返回值

类型： System UInt32
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (UInt64)

Convert
.
.
::
.
ToUInt32 方法 (UInt64)
Convert 类

将指定的 64 位无符号整数的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As ULong _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:uint64 -> uint32

参数

value
类型： System UInt64
要转换的 64 位无符号整数。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数。
异常 | 条件
OverflowException | value 大于 UInt32..::.MaxValue。

下面的示例尝试将无符号长型整数数组中的每个元素转换为无符号整数值。

Dim numbers() As ULong = { UInt64.MinValue, 121, 340, UInt64.MaxValue }
Dim result As UInteger

For Each number As ULong In numbers
   Try
      result = Convert.ToUInt32(number)
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    Converted the UInt64 value 0 to a UInt32 value 0.
'    Converted the UInt64 value 121 to a UInt32 value 121.
'    Converted the UInt64 value 340 to a UInt32 value 340.
'    The UInt64 value 18446744073709551615 is outside the range of the UInt32 type.

ulong[] numbers = { UInt64.MinValue, 121, 340, UInt64.MaxValue };
uint result;
foreach (ulong number in numbers)
{
   try {
      result = Convert.ToUInt32(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt32 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt64 value 0 to the UInt32 value 0.
//    Converted the UInt64 value 121 to the UInt32 value 121.
//    Converted the UInt64 value 340 to the UInt32 value 340.
//    The UInt64 value 18446744073709551615 is outside the range of the UInt32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToUInt32 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式信息，将指定对象的值转换为 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As Object, _
    provider As IFormatProvider _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    Object value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    Object^ value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:Object *
        provider:IFormatProvider -> uint32

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System UInt32
与 value 等效的 32 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToUInt32 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个 HexString 类，该类实现 IConvertible 接口，并且设计为保存 32 位带符号和 32 位无符号值的字符串表示形式。类包含一个 Sign 属性来表示其十六进制值的符号。 下面的示例定义一个 HexString 类，该类实现 IConvertible 接口，并且设计为保存 32 位带符号和 32 位无符号值的字符串表示形式。类包含一个 Sign 属性来表示其十六进制值的符号。

Imports System.Globalization
Imports System.Text.RegularExpressions

Public Enum SignBit As Integer
   Positive = 1
   Zero = 0
   Negative = -1
End Enum

Public Structure HexString : Implements IConvertible
   Private signBit As SignBit
   Private hexString As String

   Public Property Sign As SignBit
      Set
         signBit = value
      End Set
      Get
         Return signBit
      End Get
   End Property

   Public Property Value As String
      Set
         If value.Trim().Length > 8 Then
            Throw New ArgumentException("The string representation of a 32-bit integer cannot have more than 8 characters.")
         Else If Not Regex.IsMatch(value, "([0-9,A-F]){1,8}", RegexOptions.IgnoreCase) Then
            Throw New ArgumentException("The hexadecimal representation of a 32-bit integer contains invalid characters.")
         Else
            hexString = value
         End If
      End Set
      Get
         Return hexString
      End Get
   End Property

   ' IConvertible implementations.
   Public Function GetTypeCode() As TypeCode _
                   Implements IConvertible.GetTypeCode
      Return TypeCode.Object
   End Function

   Public Function ToBoolean(provider As IFormatProvider) As Boolean _
                   Implements IConvertible.ToBoolean
      Return signBit <> SignBit.Zero
   End Function

   Public Function ToByte(provider As IFormatProvider) As Byte _
                   Implements IConvertible.ToByte
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToInt32(hexString, 16)))
      Else
         Try
            Return Byte.Parse(hexString, NumberStyles.HexNumber)
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToUInt32(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToChar(provider As IFormatProvider) As Char _
                   Implements IConvertible.ToChar
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToInt32(hexString, 16)))
      End If

      Try
         Dim codePoint As UInt16 = UInt16.Parse(Me.hexString, NumberStyles.HexNumber)
         Return Convert.ToChar(codePoint)
      Catch e As OverflowException
         Throw New OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToUInt32(hexString, 16)))
      End Try
   End Function

   Public Function ToDateTime(provider As IFormatProvider) As Date _
                   Implements IConvertible.ToDateTime
      Throw New InvalidCastException("Hexadecimal to DateTime conversion is not supported.")
   End Function

   Public Function ToDecimal(provider As IFormatProvider) As Decimal _
                   Implements IConvertible.ToDecimal
      If signBit = SignBit.Negative Then
         Dim hexValue As Integer = Int32.Parse(hexString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(hexValue)
      Else
         Dim hexValue As UInteger = UInt32.Parse(hexString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(hexValue)
      End If
   End Function

   Public Function ToDouble(provider As IFormatProvider) As Double _
                   Implements IConvertible.ToDouble
      If signBit = SignBit.Negative Then
         Return Convert.ToDouble(Int32.Parse(hexString, NumberStyles.HexNumber))
      Else
         Return Convert.ToDouble(UInt32.Parse(hexString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt16(provider As IFormatProvider) As Int16 _
                   Implements IConvertible.ToInt16
      If signBit = SignBit.Negative Then
         Try
            Return Convert.ToInt16(Int32.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Int16 type.", Convert.ToInt32(hexString, 16)), e)
         End Try
      Else
         Try
            Return Convert.ToInt16(UInt32.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Int16 type.", Convert.ToUInt32(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToInt32(provider As IFormatProvider) As Int32 _
                   Implements IConvertible.ToInt32
      If signBit = SignBit.Negative Then
         Return Int32.Parse(hexString, NumberStyles.HexNumber)
      Else
         Try
            Return Convert.ToInt32(UInt32.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Int32 type.", Convert.ToUInt32(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToInt64(provider As IFormatProvider) As Int64 _
                   Implements IConvertible.ToInt64
      If signBit = SignBit.Negative Then
         Return Convert.ToInt64(Int32.Parse(hexString, NumberStyles.HexNumber))
      Else
         Return Int64.Parse(hexString, NumberStyles.HexNumber)
      End If
   End Function

   Public Function ToSByte(provider As IFormatProvider) As SByte _
                   Implements IConvertible.ToSByte
      If signBit = SignBit.Negative Then
         Try
            Return Convert.ToSByte(Int32.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is outside the range of the SByte type.", _
                                                      Int32.Parse(hexString, NumberStyles.HexNumber), e))
         End Try
      Else
         Try
            Return Convert.ToSByte(UInt32.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is outside the range of the SByte type.", _
                                                    UInt32.Parse(hexString, NumberStyles.HexNumber)), e)
         End Try
      End If
   End Function

   Public Function ToSingle(provider As IFormatProvider) As Single _
                   Implements IConvertible.ToSingle
      If signBit = SignBit.Negative Then
         Return Convert.ToSingle(Int32.Parse(hexString, NumberStyles.HexNumber))
      Else
         Return Convert.ToSingle(UInt32.Parse(hexString, NumberStyles.HexNumber))
      End If
   End Function

   Public Overloads Function ToString(provider As IFormatProvider) As String _
                   Implements IConvertible.ToString
      Return "0x" & Me.hexString
   End Function

   Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object _
                   Implements IConvertible.ToType
      Select Case Type.GetTypeCode(conversionType)
         Case TypeCode.Boolean
            Return Me.ToBoolean(Nothing)
         Case TypeCode.Byte
            Return Me.ToByte(Nothing)
         Case TypeCode.Char
            Return Me.ToChar(Nothing)
         Case TypeCode.DateTime
            Return Me.ToDateTime(Nothing)
         Case TypeCode.Decimal
            Return Me.ToDecimal(Nothing)
         Case TypeCode.Double
            Return Me.ToDouble(Nothing)
         Case TypeCode.Int16
            Return Me.ToInt16(Nothing)
         Case TypeCode.Int32
            Return Me.ToInt32(Nothing)
         Case TypeCode.Int64
            Return Me.ToInt64(Nothing)
         Case TypeCode.Object
            If GetType(HexString).Equals(conversionType) Then
               Return Me
            Else
               Throw New InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name))
            End If
         Case TypeCode.SByte
            Return Me.ToSByte(Nothing)
         Case TypeCode.Single
            Return Me.ToSingle(Nothing)
         Case TypeCode.String
            Return Me.ToString(Nothing)
         Case TypeCode.UInt16
            Return Me.ToUInt16(Nothing)
         Case TypeCode.UInt32
            Return Me.ToUInt32(Nothing)
         Case TypeCode.UInt64
            Return Me.ToUInt64(Nothing)
         Case Else
            Throw New InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name))
      End Select
   End Function

   Public Function ToUInt16(provider As IFormatProvider) As UInt16 _
                   Implements IConvertible.ToUInt16
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt16 type.", _
                                                   Int32.Parse(hexString, NumberStyles.HexNumber)))
      Else
         Try
            Return Convert.ToUInt16(UInt32.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the UInt16 type.", Convert.ToUInt32(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToUInt32(provider As IFormatProvider) As UInt32 _
                   Implements IConvertible.ToUInt32
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt32 type.", _
                                                   Int32.Parse(hexString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt32(hexString, 16)
      End If
   End Function

   Public Function ToUInt64(provider As IFormatProvider) As UInt64 _
                   Implements IConvertible.ToUInt64
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt64 type.", _
                                                   Int32.Parse(hexString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt64(hexString, 16)
      End If
   End Function

End Structure

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public enum SignBit { Negative=-1, Zero=0, Positive=1 };

public struct HexString : IConvertible
{
   private SignBit signBit;
   private string hexString;

   public SignBit Sign
   {
      set { signBit = value; }
      get { return signBit; }
   }

   public string Value
   {
      set {
         if (value.Trim().Length > 8)
            throw new ArgumentException("The string representation of a 32-bit integer cannot have more than 8 characters.");
         else if (! Regex.IsMatch(value, "([0-9,A-F]){1,8}", RegexOptions.IgnoreCase))
            throw new ArgumentException("The hexadecimal representation of a 32-bit integer contains invalid characters.");
         else
            hexString = value;
      }
      get { return hexString; }
   }

   // IConvertible implementations.
   public TypeCode GetTypeCode()
   {
      return TypeCode.Object;
   }

   public bool ToBoolean(IFormatProvider provider)
   {
      return signBit != SignBit.Zero;
   }

   public byte ToByte(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToInt32(hexString, 16)));
      else
         try {
            return Byte.Parse(hexString, NumberStyles.HexNumber);
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToUInt32(hexString, 16)), e);
         }
   }

   public char ToChar(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToInt32(hexString, 16)));

      try {
         ushort codePoint = UInt16.Parse(this.hexString, NumberStyles.HexNumber);
         return Convert.ToChar(codePoint);
      }
      catch (OverflowException e) {
         throw new OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToUInt32(hexString, 16)), e);
      }
   }

   public DateTime ToDateTime(IFormatProvider provider)
   {
      throw new InvalidCastException("Hexadecimal to DateTime conversion is not supported.");
   }

   public decimal ToDecimal(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
      {
         int hexValue = Int32.Parse(hexString, NumberStyles.HexNumber);
         return Convert.ToDecimal(hexValue);
      }
      else
      {
         uint hexValue = UInt32.Parse(hexString, NumberStyles.HexNumber);
         return Convert.ToDecimal(hexValue);
      }
   }

   public double ToDouble(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToDouble(Int32.Parse(hexString, NumberStyles.HexNumber));
      else
         return Convert.ToDouble(UInt32.Parse(hexString, NumberStyles.HexNumber));
   }

   public short ToInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         try {
            return Convert.ToInt16(Int32.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Int16 type.", Convert.ToInt32(hexString, 16)), e);
         }
      else
         try {
            return Convert.ToInt16(UInt32.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Int16 type.", Convert.ToUInt32(hexString, 16)), e);
         }
   }

   public int ToInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Int32.Parse(hexString, NumberStyles.HexNumber);
      else
         try {
            return Convert.ToInt32(UInt32.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Int32 type.", Convert.ToUInt32(hexString, 16)), e);
         }
   }

   public long ToInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToInt64(Int32.Parse(hexString, NumberStyles.HexNumber));
      else
         return Int64.Parse(hexString, NumberStyles.HexNumber);
   }

   public sbyte ToSByte(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         try {
            return Convert.ToSByte(Int32.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is outside the range of the SByte type.",
                                                      Int32.Parse(hexString, NumberStyles.HexNumber), e));
         }
      else
         try {
            return Convert.ToSByte(UInt32.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is outside the range of the SByte type.",
                                                    UInt32.Parse(hexString, NumberStyles.HexNumber)), e);
         }
   }

   public float ToSingle(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToSingle(Int32.Parse(hexString, NumberStyles.HexNumber));
      else
         return Convert.ToSingle(UInt32.Parse(hexString, NumberStyles.HexNumber));
   }

   public string ToString(IFormatProvider provider)
   {
      return "0x" + this.hexString;
   }

   public object ToType(Type conversionType, IFormatProvider provider)
   {
      switch (Type.GetTypeCode(conversionType))
      {
         case TypeCode.Boolean:
            return this.ToBoolean(null);
         case TypeCode.Byte:
            return this.ToByte(null);
         case TypeCode.Char:
            return this.ToChar(null);
         case TypeCode.DateTime:
            return this.ToDateTime(null);
         case TypeCode.Decimal:
            return this.ToDecimal(null);
         case TypeCode.Double:
            return this.ToDouble(null);
         case TypeCode.Int16:
            return this.ToInt16(null);
         case TypeCode.Int32:
            return this.ToInt32(null);
         case TypeCode.Int64:
            return this.ToInt64(null);
         case TypeCode.Object:
            if (typeof(HexString).Equals(conversionType))
               return this;
            else
               throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name));
         case TypeCode.SByte:
            return this.ToSByte(null);
         case TypeCode.Single:
            return this.ToSingle(null);
         case TypeCode.String:
            return this.ToString(null);
         case TypeCode.UInt16:
            return this.ToUInt16(null);
         case TypeCode.UInt32:
            return this.ToUInt32(null);
         case TypeCode.UInt64:
            return this.ToUInt64(null);
         default:
            throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
      }
   }

   public ushort ToUInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt16 type.",
                                                   Int32.Parse(hexString, NumberStyles.HexNumber)));
      else
         try {
            return Convert.ToUInt16(UInt32.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the UInt16 type.", Convert.ToUInt32(hexString, 16)), e);
         }
   }

   public uint ToUInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt32 type.",
                                                   Int32.Parse(hexString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt32(hexString, 16);
   }

   public ulong ToUInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt64 type.",
                                                   Int32.Parse(hexString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt64(hexString, 16);
   }
}

下面的示例演示了对 ToUInt32(Object, IFormatProvider) 方法（将 HexString 对象作为参数传递）的调用进而调用 HexString 类的 IConvertible..::.ToUInt32 实现。

Module Example
   Public Sub Main()
      Dim positiveValue As UInt32 = 320000000
      Dim negativeValue As Int32 = -1

      Dim positiveString As New HexString()
      positiveString.Sign = CType(Math.Sign(positiveValue), SignBit)
      positiveString.Value = positiveValue.ToString("X4")

      Dim negativeString As New HexString()
      negativeString.Sign = CType(Math.Sign(negativeValue), SignBit)
      negativeString.Value = negativeValue.ToString("X4")

      Try
         Console.WriteLine("0x{0} converts to {1}.", positiveString.Value, Convert.ToUInt32(positiveString))
      Catch e As OverflowException
         Console.WriteLine("{0} is outside the range of the UInt32 type.", _
                           Int32.Parse(positiveString.Value, NumberStyles.HexNumber))
      End Try

      Try
         Console.WriteLine("0x{0} converts to {1}.", negativeString.Value, Convert.ToUInt32(negativeString))
      Catch e As OverflowException
         Console.WriteLine("{0} is outside the range of the UInt32 type.", _
                           Int32.Parse(negativeString.Value, NumberStyles.HexNumber))
      End Try
   End Sub
End Module
' The example dosplays the following output:
'       0x1312D000 converts to 320000000.
'       -1 is outside the range of the UInt32 type.

public class Example
{
   public static void Main()
   {
      uint positiveValue = 320000000;
      int negativeValue = -1;

      HexString positiveString = new HexString();
      positiveString.Sign = (SignBit) Math.Sign(positiveValue);
      positiveString.Value = positiveValue.ToString("X4");

      HexString negativeString = new HexString();
      negativeString.Sign = (SignBit) Math.Sign(negativeValue);
      negativeString.Value = negativeValue.ToString("X4");

      try {
         Console.WriteLine("0x{0} converts to {1}.", positiveString.Value, Convert.ToUInt32(positiveString));
      }
      catch (OverflowException) {
         Console.WriteLine("{0} is outside the range of the UInt32 type.",
                           Int32.Parse(positiveString.Value, NumberStyles.HexNumber));
      }

      try {
         Console.WriteLine("0x{0} converts to {1}.", negativeString.Value, Convert.ToUInt32(negativeString));
      }
      catch (OverflowException) {
         Console.WriteLine("{0} is outside the range of the UInt32 type.",
                           Int32.Parse(negativeString.Value, NumberStyles.HexNumber));
      }
   }
}
// The example dosplays the following output:
//       0x1312D000 converts to 320000000.
//       -1 is outside the range of the UInt32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToUInt32 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As String, _
    provider As IFormatProvider _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    string value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    String^ value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:string *
        provider:IFormatProvider -> uint32

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System UInt32
与 value 中数字等效的 32 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue 的数字。

返回值是对 value 调用 UInt32..::.Parse 的结果。

provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 是获取 NumberFormatInfo 对象的 IFormatProvider 实例。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

如果您希望在转换失败时不处理异常，则可以转而调用 UInt32..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 UInt32..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它对固定区域性使用此提供程序和 NumberFormatInfo 提供程序，尝试将数值字符串数组的每个元素都转换为整数。 下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它对固定区域性使用此提供程序和 NumberFormatInfo 提供程序，尝试将数值字符串数组的每个元素都转换为整数。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Create a NumberFormatInfo object and set several of its
      ' properties that apply to numbers.
      Dim provider As New NumberFormatInfo()
      provider.PositiveSign = "pos "
      provider.NegativeSign = "neg "

      ' Define an array of numeric strings.
      Dim values() As String = { "123456789", "+123456789", "pos 123456789", _
                                 "123456789.", "123,456,789",  "4294967295", _
                                 "4294967296", "-1", "neg 1" }

      For Each value As String In values
         Console.Write("{0,-20} -->", value)
         Try
            Console.WriteLine("{0,20}", Convert.ToUInt32(value, provider))
         Catch e As FormatException
            Console.WriteLine("{0,20}", "Bad Format")
         Catch e As OverflowException
            Console.WriteLine("{0,20}", "Numeric Overflow")
         End Try
      Next
    End Sub
End Module
' The example displays the following output:
'       123456789            -->           123456789
'       +123456789           -->          Bad Format
'       pos 123456789        -->           123456789
'       123456789.           -->          Bad Format
'       123,456,789          -->          Bad Format
'       4294967295           -->          4294967295
'       4294967296           -->    Numeric Overflow
'       -1                   -->          Bad Format
'       neg 1                -->    Numeric Overflow

using System;
using System.Globalization;

public class Class1
{
   public static void Main()
   {
      // Create a NumberFormatInfo object and set several of its
      // properties that apply to numbers.
      NumberFormatInfo provider = new NumberFormatInfo();
      provider.PositiveSign = "pos ";
      provider.NegativeSign = "neg ";

      // Define an array of numeric strings.
      string[] values = { "123456789", "+123456789", "pos 123456789",
                          "123456789.", "123,456,789",  "4294967295",
                          "4294967296", "-1", "neg 1" };

      foreach (string value in values)
      {
         Console.Write("{0,-20} -->", value);
         try {
            Console.WriteLine("{0,20}", Convert.ToUInt32(value, provider));
         }
         catch (FormatException) {
            Console.WriteLine("{0,20}", "Bad Format");
         }
         catch (OverflowException) {
            Console.WriteLine("{0,20}", "Numeric Overflow");
         }
      }
   }
}
// The example displays the following output:
//       123456789            -->           123456789
//       +123456789           -->          Bad Format
//       pos 123456789        -->           123456789
//       123456789.           -->          Bad Format
//       123,456,789          -->          Bad Format
//       4294967295           -->          4294967295
//       4294967296           -->    Numeric Overflow
//       -1                   -->          Bad Format
//       neg 1                -->    Numeric Overflow

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt32 方法 (String, Int32)

Convert
.
.
::
.
ToUInt32 方法 (String, Int32)
Convert 类

将指定基的数字的字符串表示形式转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    value As String, _
    fromBase As Integer _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    string value,
    int fromBase
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    String^ value,
    int fromBase
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        value:string *
        fromBase:int -> uint32

参数

value
类型： System String
包含要转换的数字的字符串。
fromBase
类型： System Int32
value 中数字的基数，它必须是 2、8、10 或 16。

返回值

类型： System UInt32
与 value 中数字等效的 32 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
ArgumentException | fromBase 不是 2、8、10 或 16。 - 或 - value，它表示一个非 10 为基的无符号数，前面带一个负号。
FormatException | value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。 value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。
OverflowException | value，它表示一个非 10 为基的无符号数，前面带一个负号。 - 或 - value 表示小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue 的数字。

如果 fromBase 为 16，则可以在 value 参数指定的数字前面加上“0x”或“0X”。

由于 UInt32 数据类型仅支持无符号值，因此 ToUInt32(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 32 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt32 数据类型的范围的有符号整数值转换为 UInt32 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to 2147483648”（0x80000000 转换为 2147483648），而不是引发异常。 由于 UInt32 数据类型仅支持无符号值，因此 ToUInt32(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 32 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt32 数据类型的范围的有符号整数值转换为 UInt32 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to 2147483648”（0x80000000 转换为 2147483648），而不是引发异常。 由于 UInt32 数据类型仅支持无符号值，因此 ToUInt32(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 32 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt32 数据类型的范围的有符号整数值转换为 UInt32 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to 2147483648”（0x80000000 转换为 2147483648），而不是引发异常。 由于 UInt32 数据类型仅支持无符号值，因此 ToUInt32(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 32 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt32 数据类型的范围的有符号整数值转换为 UInt32 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to 2147483648”（0x80000000 转换为 2147483648），而不是引发异常。 由于 UInt32 数据类型仅支持无符号值，因此 ToUInt32(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 32 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt32 数据类型的范围的有符号整数值转换为 UInt32 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt32(String, Int32) 方法。该方法将显示消息“0x80000000 converts to 2147483648”（0x80000000 转换为 2147483648），而不是引发异常。

' Create a hexadecimal value out of range of the UInt32 type.
Dim value As String = Convert.ToString(Integer.MinValue, 16)
' Convert it back to a number.
Try
   Dim number As UInt32 = Convert.ToUInt32(value, 16)
   Console.WriteLine("0x{0} converts to {1}.", value, number)
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned integer.", _
                     value)
End Try

// Create a hexadecimal value out of range of the UInt32 type.
string value = Convert.ToString(Int32.MinValue, 16);
// Convert it back to a number.
try
{
   UInt32 number = Convert.ToUInt32(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned integer.",
                     value);
}

在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt32 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt32 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt32 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt32 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt32 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt32 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt32 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt32 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt32 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt32 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。

' Create a negative hexadecimal value out of range of the UInt32 type.
Dim sourceNumber As Integer = Integer.MinValue
Dim isSigned As Boolean = Math.Sign(sourceNumber.MinValue) = -1
Dim value As String = Convert.ToString(sourceNumber, 16)
Dim targetNumber As UInt32
Try
   targetNumber = Convert.ToUInt32(value, 16)
   If isSigned And ((targetNumber And &H80000000) <> 0) Then
      Throw New OverflowException()
   Else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber)
   End If
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned integer.", _
                     value)
End Try
' Displays the following to the console:
'    Unable to convert '0x80000000' to an unsigned integer.

// Create a negative hexadecimal value out of range of the UInt32 type.
int sourceNumber = Int32.MinValue;
bool isSigned = Math.Sign((int)sourceNumber.GetType().GetField("MinValue").GetValue(null)) == -1;
string value = Convert.ToString(sourceNumber, 16);
UInt32 targetNumber;
try
{
   targetNumber = Convert.ToUInt32(value, 16);
   if (isSigned && ((targetNumber & 0x80000000) != 0))
      throw new OverflowException();
   else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned integer.",
                     value);
}
// Displays the following to the console:
//    Unable to convert '0x80000000' to an unsigned integer.

下面的示例尝试将数值字符串数组中的每个元素解释为十六进制值，并将其转换为无符号整数。

Module Example
   Public Sub Main()
      Dim hexStrings() As String = { "80000000", "0FFFFFFF", "F0000000", "00A3000", "D", _
                                     "-13", "9AC61", "GAD", "FFFFFFFFFF" }
      For Each hexString As String In hexStrings
         Console.Write("{0,-12}  -->  ", hexString)
         Try
            Dim number As UInteger = Convert.ToUInt32(hexString, 16)
            Console.WriteLine("{0,18:N0}", number)
         Catch e As FormatException
            Console.WriteLine("{0,18}", "Bad Format")
         Catch e As OverflowException
            Console.WriteLine("{0,18}", "Numeric Overflow")
         Catch e As ArgumentException
            Console.WriteLine("{0,18}", "Invalid in Base 16")
         End Try
      Next
   End Sub
End Module
'    ' The example displays the following output:
'    80000000      -->       2,147,483,648
'    0FFFFFFF      -->         268,435,455
'    F0000000      -->       4,026,531,840
'    00A3000       -->             667,648
'    D             -->                  13
'    -13           -->  Invalid in Base 16
'    9AC61         -->             633,953
'    GAD           -->          Bad Format
'    FFFFFFFFFF    -->    Numeric Overflow

public class Example
{
   public static void Main()
   {
      string[] hexStrings = { "80000000", "0FFFFFFF", "F0000000", "00A3000", "D",
                              "-13", "9AC61", "GAD", "FFFFFFFFFF" };

      foreach (string hexString in hexStrings)
      {
         Console.Write("{0,-12}  -->  ", hexString);
         try {
            uint number = Convert.ToUInt32(hexString, 16);
            Console.WriteLine("{0,18:N0}", number);
         }
         catch (FormatException) {
            Console.WriteLine("{0,18}", "Bad Format");
         }
         catch (OverflowException)
         {
            Console.WriteLine("{0,18}", "Numeric Overflow");
         }
         catch (ArgumentException) {
            Console.WriteLine("{0,18}", "Invalid in Base 16");
         }
      }
   }
}
// The example displays the following output:
//       80000000      -->       2,147,483,648
//       0FFFFFFF      -->         268,435,455
//       F0000000      -->       4,026,531,840
//       00A3000       -->             667,648
//       D             -->                  13
//       -13           -->  Invalid in Base 16
//       9AC61         -->             633,953
//       GAD           -->          Bad Format
//       FFFFFFFFFF    -->    Numeric Overflow

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt32 重载
System 命名空间


Convert ..::.ToUInt64 方法

Convert
.
.
::
.
ToUInt64 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Convert 类

将指定的值转换为 64 位无符号整数。

名称 说明
页首

参考

Convert 类
Convert 成员
System 命名空间


Convert ..::.ToUInt64 方法 (Boolean)

Convert
.
.
::
.
ToUInt64 方法 (Boolean)
Convert 类

将指定的布尔值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Boolean _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    bool value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    bool value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:bool -> uint64

参数

value
类型： System Boolean
要转换的布尔值。

返回值

类型： System UInt64
如果 value 为 true，则为数字 1；否则，为 0。

下面的示例将布尔值 true 和 false 转换为无符号长整数。

Dim falseFlag As Boolean = False
Dim trueFlag As Boolean = True

Console.WriteLine("{0} converts to {1}.", falseFlag, _
                  Convert.ToUInt64(falseFlag))
Console.WriteLine("{0} converts to {1}.", trueFlag, _
                  Convert.ToUInt64(trueFlag))
' The example displays the following output:
'       False converts to 0.
'       True converts to 1.

bool falseFlag = false;
bool trueFlag = true;

Console.WriteLine("{0} converts to {1}.", falseFlag,
                  Convert.ToUInt64(falseFlag));
Console.WriteLine("{0} converts to {1}.", trueFlag,
                  Convert.ToUInt64(trueFlag));
// The example displays the following output:
//       False converts to 0.
//       True converts to 1.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (Byte)

Convert
.
.
::
.
ToUInt64 方法 (Byte)
Convert 类

将指定的 8 位无符号整数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Byte _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    byte value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    unsigned char value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:byte -> uint64

参数

value
类型： System Byte
要转换的 8 位无符号整数。

返回值

类型： System UInt64
与 value 等效的 64 位带符号整数。

下面的示例将字节数组中的每个元素转换为无符号的长整数。

Dim bytes() As Byte = { Byte.MinValue, 14, 122, Byte.MaxValue}
Dim result As ULong

For Each byteValue As Byte In bytes
   result = Convert.ToUInt64(byteValue)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     byteValue.GetType().Name, byteValue, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Byte value 0 to the UInt64 value 0.
'    Converted the Byte value 14 to the UInt64 value 14.
'    Converted the Byte value 122 to the UInt64 value 122.
'    Converted the Byte value 255 to the UInt64 value 255.

byte[] bytes = { Byte.MinValue, 14, 122, Byte.MaxValue};
ulong result;

foreach (byte byteValue in bytes)
{
   result = Convert.ToUInt64(byteValue);
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     byteValue.GetType().Name, byteValue,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Byte value 0 to the UInt64 value 0.
//    Converted the Byte value 14 to the UInt64 value 14.
//    Converted the Byte value 122 to the UInt64 value 122.
//    Converted the Byte value 255 to the UInt64 value 255.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (Char)

Convert
.
.
::
.
ToUInt64 方法 (Char)
Convert 类

将指定的 Unicode 字符的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Char _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    char value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    wchar_t value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:char -> uint64

参数

value
类型： System Char
要转换的 Unicode 字符。

返回值

类型： System UInt64
与 value 等效的 64 位无符号整数。

下面的示例将字符数组中的每个元素转换为无符号的长整数。

Dim chars() As Char = { "a"c, "z"c, ChrW(7), ChrW(1023), _
                        ChrW(Short.MaxValue), ChrW(&hFFFE) }
Dim result As ULong

For Each ch As Char in chars
   result = Convert.ToUInt64(ch)
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                     ch.GetType().Name, ch, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the Char value 'a' to the UInt64 value 97.
'    Converted the Char value 'z' to the UInt64 value 122.
'    Converted the Char value '' to the UInt64 value 7.
'    Converted the Char value '?' to the UInt64 value 1023.
'    Converted the Char value '?' to the UInt64 value 32767.
'    Converted the Char value '?' to the UInt64 value 65534.

char[] chars = { 'a', 'z', '\u0007', '\u03FF',
                 '\u7FFF', '\uFFFE' };
ulong result;

foreach (char ch in chars)
{
   result = Convert.ToUInt64(ch);
   Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                     ch.GetType().Name, ch,
                     result.GetType().Name, result);
}
// The example displays the following output:
//    Converted the Char value 'a' to the UInt64 value 97.
//    Converted the Char value 'z' to the UInt64 value 122.
//    Converted the Char value '' to the UInt64 value 7.
//    Converted the Char value '?' to the UInt64 value 1023.
//    Converted the Char value '?' to the UInt64 value 32767.
//    Converted the Char value '?' to the UInt64 value 65534.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (DateTime)

Convert
.
.
::
.
ToUInt64 方法 (DateTime)
Convert 类

调用此方法始终引发 InvalidCastException。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As DateTime _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    DateTime value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    DateTime value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:DateTime -> uint64

参数

value
类型： System DateTime
要转换的日期和时间值。

返回值

类型： System UInt64
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。
异常 | 条件
InvalidCastException | 不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (Decimal)

Convert
.
.
::
.
ToUInt64 方法 (Decimal)
Convert 类

将指定的十进制数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Decimal _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    decimal value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    Decimal value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:decimal -> uint64

参数

value
类型： System Decimal
要转换的十进制数。

返回值

类型： System UInt64
value，舍入为最接近的 64 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 64 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 小于零或大于 UInt64..::.MaxValue。

下面的示例尝试将 Decimal 值的数组中的每个元素转换为无符号长型整数。

Dim values() As Decimal = { Decimal.MinValue, -1034.23d, -12d, 0d, 147d, _
                            199.55d, 9214.16d, Decimal.MaxValue }
Dim result As ULong

For Each value As Decimal In values
   Try
      result = Convert.ToUInt64(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    The Decimal value -79228162514264337593543950335 is outside the range of the UInt64 type.
'    The Decimal value -1034.23 is outside the range of the UInt64 type.
'    The Decimal value -12 is outside the range of the UInt64 type.
'    Converted the Decimal value '0' to the UInt64 value 0.
'    Converted the Decimal value '147' to the UInt64 value 147.
'    Converted the Decimal value '199.55' to the UInt64 value 200.
'    Converted the Decimal value '9214.16' to the UInt64 value 9214.
'    The Decimal value 79228162514264337593543950335 is outside the range of the UInt64 type.

decimal[] values= { Decimal.MinValue, -1034.23m, -12m, 0m, 147m,
                    199.55m, 9214.16m, Decimal.MaxValue };
ulong result;

foreach (decimal value in values)
{
   try {
      result = Convert.ToUInt64(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the UInt64 type.",
                        value);
   }
}
// The example displays the following output:
//    -79228162514264337593543950335 is outside the range of the UInt64 type.
//    -1034.23 is outside the range of the UInt64 type.
//    -12 is outside the range of the UInt64 type.
//    Converted the Decimal value '0' to the UInt64 value 0.
//    Converted the Decimal value '147' to the UInt64 value 147.
//    Converted the Decimal value '199.55' to the UInt64 value 200.
//    Converted the Decimal value '9214.16' to the UInt64 value 9214.
//    79228162514264337593543950335 is outside the range of the UInt64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间
Math Round


Convert ..::.ToUInt64 方法 (Double)

Convert
.
.
::
.
ToUInt64 方法 (Double)
Convert 类

将指定的双精度浮点数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Double _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    double value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    double value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:float -> uint64

参数

value
类型： System Double
要转换的双精度浮点数。

返回值

类型： System UInt64
value，舍入为最接近的 64 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 64 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 小于零或大于 UInt64..::.MaxValue。

下面的示例尝试将 Double 值的数组中的每个元素转换为无符号长型整数。

Dim values() As Double = { Double.MinValue, -1.38e10, -1023.299, -12.98, _
                           0, 9.113e-16, 103.919, 17834.191, Double.MaxValue }
Dim result As ULong

For Each value As Double In values
   Try
      result = Convert.ToUInt64(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    The Double value -1.79769313486232E+308 is outside the range of the UInt64 type.
'    The Double value -13800000000 is outside the range of the UInt64 type.
'    The Double value -1023.299 is outside the range of the UInt64 type.
'    The Double value -12.98 is outside the range of the UInt64 type.
'    Converted the Double value '0' to the UInt64 value 0.
'    Converted the Double value '9.113E-16' to the UInt64 value 0.
'    Converted the Double value '103.919' to the UInt64 value 104.
'    Converted the Double value '17834.191' to the UInt64 value 17834.
'    The Double value 1.79769313486232E+308 is outside the range of the UInt64 type.

double[] values= { Double.MinValue, -1.38e10, -1023.299, -12.98,
                   0, 9.113e-16, 103.919, 17834.191, Double.MaxValue };
ulong result;

foreach (double value in values)
{
   try {
      result = Convert.ToUInt64(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the UInt64 type.", value);
   }
}
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the UInt64 type.
//    -13800000000 is outside the range of the UInt64 type.
//    -1023.299 is outside the range of the UInt64 type.
//    -12.98 is outside the range of the UInt64 type.
//    Converted the Double value '0' to the UInt64 value 0.
//    Converted the Double value '9.113E-16' to the UInt64 value 0.
//    Converted the Double value '103.919' to the UInt64 value 104.
//    Converted the Double value '17834.191' to the UInt64 value 17834.
//    1.79769313486232E+308 is outside the range of the UInt64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间
Double
Math Round


Convert ..::.ToUInt64 方法 (Int16)

Convert
.
.
::
.
ToUInt64 方法 (Int16)
Convert 类

将指定的 16 位带符号整数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Short _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    short value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    short value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:int16 -> uint64

参数

value
类型： System Int16
要转换的 16 位带符号整数。

返回值

类型： System UInt64
与 value 等效的 64 位无符号整数。
异常 | 条件
OverflowException | value 小于零。

下面的示例尝试将 16 位整数数组中的每个元素转换为无符号长型整数。

Dim numbers() As Short = { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue }
Dim result As ULong

For Each number As Short In numbers
   Try
      result = Convert.ToUInt64(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                           number.GetType().Name, number, _
                           result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int16 value -32768 is outside the range of the UInt64 type.
'    The Int16 value -1 is outside the range of the UInt64 type.
'    Converted the Int16 value 0 to the UInt64 value 0.
'    Converted the Int16 value 121 to the UInt64 value 121.
'    Converted the Int16 value 340 to the UInt64 value 340.
'    Converted the Int16 value 32767 to the UInt64 value 32767.

short[] numbers= { Int16.MinValue, -1, 0, 121, 340, Int16.MaxValue };
ulong result;

foreach (short number in numbers)
{
   try {
      result = Convert.ToUInt64(number);
      Console.WriteLine("Converted the {0} value {1} to a {2} value {3}.",
                           number.GetType().Name, number,
                           result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the UInt64 type.", number);
   }

}
// The example displays the following output:
//    -32768 is outside the range of the UInt64 type.
//    -1 is outside the range of the UInt64 type.
//    Converted the Int16 value 0 to a UInt64 value 0.
//    Converted the Int16 value 121 to a UInt64 value 121.
//    Converted the Int16 value 340 to a UInt64 value 340.
//    Converted the Int16 value 32767 to a UInt64 value 32767.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (Int32)

Convert
.
.
::
.
ToUInt64 方法 (Int32)
Convert 类

将指定的 32 位带符号整数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Integer _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    int value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    int value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:int -> uint64

参数

value
类型： System Int32
要转换的 32 位带符号整数。

返回值

类型： System UInt64
与 value 等效的 64 位无符号整数。
异常 | 条件
OverflowException | value 小于零。

下面的示例尝试将整数数组中的每个元素转换为无符号长型整数。

Dim numbers() As Integer = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue }
Dim result As ULong

For Each number As Integer In numbers
   Try
      result = Convert.ToUInt64(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int32 value -2147483648 is outside the range of the UInt64 type.
'    The Int32 value -1 is outside the range of the UInt64 type.
'    Converted the Int32 value 0 to the UInt64 value 0.
'    Converted the Int32 value 121 to the UInt64 value 121.
'    Converted the Int32 value 340 to the UInt64 value 340.
'    Converted the Int32 value 2147483647 to the UInt64 value 2147483647.

int[] numbers = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue };
ulong result;

foreach (int number in numbers)
{
   try {
      result = Convert.ToUInt64(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int32 value -2147483648 is outside the range of the UInt64 type.
//    The Int32 value -1 is outside the range of the UInt64 type.
//    Converted the Int32 value 0 to the UInt64 value 0.
//    Converted the Int32 value 121 to the UInt64 value 121.
//    Converted the Int32 value 340 to the UInt64 value 340.
//    Converted the Int32 value 2147483647 to the UInt64 value 2147483647.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (Int64)

Convert
.
.
::
.
ToUInt64 方法 (Int64)
Convert 类

将指定的 64 位带符号整数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Long _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    long value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    long long value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:int64 -> uint64

参数

value
类型： System Int64
要转换的 64 位带符号整数。

返回值

类型： System UInt64
与 value 等效的 64 位无符号整数。
异常 | 条件
OverflowException | value 小于零。

下面的示例尝试将长型整数数组中的每个元素转换为无符号长型整数。

Dim numbers() As Long = { Int64.MinValue, -19432, -18, 0, 121, 340, Int64.MaxValue }
Dim result As ULong

For Each number As Long In numbers
   Try
      result = Convert.ToUInt64(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The Int64 value -9223372036854775808 is outside the range of the UInt64 type.
'    The Int64 value -19432 is outside the range of the UInt64 type.
'    The Int64 value -18 is outside the range of the UInt64 type.
'    Converted the Int64 value 0 to the UInt64 value 0.
'    Converted the Int64 value 121 to the UInt64 value 121.
'    Converted the Int64 value 340 to the UInt64 value 340.
'    Converted the Int64 value 9223372036854775807 to the UInt64 value 9223372036854775807.

long[] numbers = { Int64.MinValue, -19432, -18, 0, 121, 340, Int64.MaxValue };
ulong result;
foreach (long number in numbers)
{
   try {
      result = Convert.ToUInt64(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The Int64 value -9223372036854775808 is outside the range of the UInt64 type.
//    The Int64 value -19432 is outside the range of the UInt64 type.
//    The Int64 value -18 is outside the range of the UInt64 type.
//    Converted the Int64 value 0 to the UInt64 value 0.
//    Converted the Int64 value 121 to the UInt64 value 121.
//    Converted the Int64 value 340 to the UInt64 value 340.
//    Converted the Int64 value 9223372036854775807 to a UInt64 value 9223372036854775807.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (Object)

Convert
.
.
::
.
ToUInt64 方法 (Object)
Convert 类

将指定对象的值转换为 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Object _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    Object value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    Object^ value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:Object -> uint64

参数

value
类型： System Object
用于实现 IConvertible 接口的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System UInt64
与 value 等效的 64 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToUInt64 方法的结果。

下面的示例尝试将对象数组中的每个元素转换为无符号长型整数。

Dim values() As Object = { True, -12, 163, 935, "x"c, #5/12/2009#, _
                           "104", "103.0", "-1", _
                           "1.00e2", "One", 1.00e2, 16.3e42}
Dim result As ULong

For Each value As Object In values
   Try
      result = Convert.ToUInt64(value)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        value.GetType().Name, value, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.", _
                        value.GetType().Name, value)
   Catch e As FormatException
      Console.WriteLine("The {0} value {1} is not in a recognizable format.", _
                        value.GetType().Name, value)
   Catch e As InvalidCastException
      Console.WriteLine("No conversion to a UInt64 exists for the {0} value {1}.", _
                        value.GetType().Name, value)

   End Try
Next
' The example displays the following output:
'    Converted the Boolean value True to the UInt64 value 1.
'    The Int32 value -12 is outside the range of the UInt64 type.
'    Converted the Int32 value 163 to the UInt64 value 163.
'    Converted the Int32 value 935 to the UInt64 value 935.
'    Converted the Char value x to the UInt64 value 120.
'    No conversion to a UInt64 exists for the DateTime value 5/12/2009 12:00:00 AM.
'    Converted the String value 104 to the UInt64 value 104.
'    The String value 103.0 is not in a recognizable format.
'    The String value -1 is outside the range of the UInt64 type.
'    The String value 1.00e2 is not in a recognizable format.
'    The String value One is not in a recognizable format.
'    Converted the Double value 100 to the UInt64 value 100.
'    The Double value 1.63E+43 is outside the range of the UInt64 type.

object[] values = { true, -12, 163, 935, 'x', new DateTime(2009, 5, 12),
                    "104", "103.0", "-1",
                    "1.00e2", "One", 1.00e2, 16.3e42};
ulong result;

foreach (object value in values)
{
   try {
      result = Convert.ToUInt64(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.",
                        value.GetType().Name, value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value {1} is not in a recognizable format.",
                        value.GetType().Name, value);
   }
   catch (InvalidCastException) {
      Console.WriteLine("No conversion to a UInt64 exists for the {0} value {1}.",
                        value.GetType().Name, value);

   }
}
// The example displays the following output:
//    Converted the Boolean value True to the UInt64 value 1.
//    The Int32 value -12 is outside the range of the UInt64 type.
//    Converted the Int32 value 163 to the UInt64 value 163.
//    Converted the Int32 value 935 to the UInt64 value 935.
//    Converted the Char value x to the UInt64 value 120.
//    No conversion to a UInt64 exists for the DateTime value 5/12/2009 12:00:00 AM.
//    Converted the String value 104 to the UInt64 value 104.
//    The String value 103.0 is not in a recognizable format.
//    The String value -1 is outside the range of the UInt64 type.
//    The String value 1.00e2 is not in a recognizable format.
//    The String value One is not in a recognizable format.
//    Converted the Double value 100 to the UInt64 value 100.
//    The Double value 1.63E+43 is outside the range of the UInt64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (SByte)

Convert
.
.
::
.
ToUInt64 方法 (SByte)
Convert 类

将指定的 8 位带符号整数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As SByte _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:sbyte -> uint64

参数

value
类型： System SByte
要转换的 8 位带符号整数。

返回值

类型： System UInt64
与 value 等效的 64 位无符号整数。
异常 | 条件
OverflowException | value 小于零。

下面的示例尝试将带符号字节数组中的每个元素转换为无符号的长型整数。

Dim numbers() As SByte = { SByte.MinValue, -1, 0, 10, SByte.MaxValue }
Dim result As ULong

For Each number As SByte In numbers
   Try
      result = Convert.ToUInt64(number)
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                        number.GetType().Name, number, _
                        result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.", _
                        number.GetType().Name, number)
   End Try
Next
' The example displays the following output:
'    The SByte value -128 is outside the range of the UInt64 type.
'    The SByte value -1 is outside the range of the UInt64 type.
'    Converted the SByte value 0 to the UInt64 value 0.
'    Converted the SByte value 10 to the UInt64 value 10.
'    Converted the SByte value 127 to the UInt64 value 127.

sbyte[] numbers = { SByte.MinValue, -1, 0, 10, SByte.MaxValue };
ulong result;

foreach (sbyte number in numbers)
{
   try {
      result = Convert.ToUInt64(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    The SByte value -128 is outside the range of the UInt64 type.
//    The SByte value -1 is outside the range of the UInt64 type.
//    Converted the SByte value 0 to the UInt64 value 0.
//    Converted the SByte value 10 to the UInt64 value 10.
//    Converted the SByte value 127 to the UInt64 value 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (Single)

Convert
.
.
::
.
ToUInt64 方法 (Single)
Convert 类

将指定的单精度浮点数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Single _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    float value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    float value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:float32 -> uint64

参数

value
类型： System Single
要转换的单精度浮点数。

返回值

类型： System UInt64
value，舍入为最接近的 64 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。 value，舍入为最接近的 64 位无符号整数。如果 value 为两个整数中间的数字，则返回二者中的偶数；即 4.5 转换为 4，而 5.5 转换为 6。
异常 | 条件
OverflowException | value 小于零或大于 UInt64..::.MaxValue。

下面的示例尝试将 Single 值的数组中的每个元素转换为无符号长型整数。输出显示在执行转换之前舍入小数值。 下面的示例尝试将 Single 值的数组中的每个元素转换为无符号长型整数。输出显示在执行转换之前舍入小数值。

   Dim values() As Single = { Single.MinValue, -1.38e10, -1023.299, -12.98, _
                              0, 9.113e-16, 103.919, 17834.191, Single.MaxValue }
   Dim result As ULong

   For Each value As Single In values
      Try
         result = Convert.ToUInt64(value)
         Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                           value.GetType().Name, value, result.GetType().Name, result)
      Catch e As OverflowException
         Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.", _
                           value.GetType().Name, value)
      End Try
   Next
   ' The example displays the following output:
'    The Single value -3.402823E+38 is outside the range of the UInt64 type.
'    The Single value -1.38E+10 is outside the range of the UInt64 type.
'    The Single value -1023.299 is outside the range of the UInt64 type.
'    The Single value -12.98 is outside the range of the UInt64 type.
'    Converted the Single value 0 to the UInt64 value 0.
'    Converted the Single value 9.113E-16 to the UInt64 value 0.
'    Converted the Single value 103.919 to the UInt64 value 104.
'    Converted the Single value 17834.19 to the UInt64 value 17834.
'    The Single value 3.402823E+38 is outside the range of the UInt64 type.

float[] values= { Single.MinValue, -1.38e10f, -1023.299f, -12.98f,
                  0f, 9.113e-16f, 103.919f, 17834.191f, Single.MaxValue };
ulong result;

foreach (float value in values)
{
   try {
      result = Convert.ToUInt64(value);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        value.GetType().Name, value, result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the UInt64 type.", value);
   }
}
// The example displays the following output:
//    -3.402823E+38 is outside the range of the UInt64 type.
//    -1.38E+10 is outside the range of the UInt64 type.
//    -1023.299 is outside the range of the UInt64 type.
//    -12.98 is outside the range of the UInt64 type.
//    Converted the Single value 0 to the UInt64 value 0.
//    Converted the Single value 9.113E-16 to the UInt64 value 0.
//    Converted the Single value 103.919 to the UInt64 value 104.
//    Converted the Single value 17834.19 to the UInt64 value 17834.
//    3.402823E+38 is outside the range of the UInt64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间
Single
Math Round


Convert ..::.ToUInt64 方法 (String)

Convert
.
.
::
.
ToUInt64 方法 (String)
Convert 类

将数字的指定字符串表示形式转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As String _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    string value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    String^ value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:string -> uint64

参数

value
类型： System String
包含要转换的数字的字符串。

返回值

类型： System UInt64
与 value 中数字等效的 64 位带符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue 的数字。

返回值是对 value 调用 UInt64..::.Parse 方法的结果。

如果您希望在转换失败时不处理异常，则可以转而调用 UInt64..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 UInt64..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例将字符串数组中的元素解释为数值字符串，并尝试将它们转换为无符号的长整数。

Dim values() As String = { "One", "1.34e28", "-26.87", "-18", "-6.00", _
                           " 0", "137", "1601.9", Int32.MaxValue.ToString() }
Dim result As ULong

For Each value As String In values
   Try
      result = Convert.ToUInt64(value)
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.", _
                        value.GetType().Name, value, result.GetType().Name, result)
   Catch e As OverflowException
      Console.WriteLine("{0} is outside the range of the UInt64 type.", value)
   Catch e As FormatException
      Console.WriteLine("The {0} value '{1}' is not in a recognizable format.", _
                        value.GetType().Name, value)
   End Try
Next
' The example displays the following output:
'    The String value 'One' is not in a recognizable format.
'    The String value '1.34e28' is not in a recognizable format.
'    The String value '-26.87' is not in a recognizable format.
'    -18 is outside the range of the UInt64 type.
'    The String value '-6.00' is not in a recognizable format.
'    Converted the String value ' 0' to the UInt64 value 0.
'    Converted the String value '137' to the UInt64 value 137.
'    The String value '1601.9' is not in a recognizable format.
'    Converted the String value '2147483647' to the UInt64 value 2147483647.

string[] values = { "One", "1.34e28", "-26.87", "-18", "-6.00",
                    " 0", "137", "1601.9", Int32.MaxValue.ToString() };
ulong result;

foreach (string value in values)
{
   try {
      result = Convert.ToUInt64(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value, result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the UInt64 type.", value);
   }
   catch (FormatException) {
      Console.WriteLine("The {0} value '{1}' is not in a recognizable format.",
                        value.GetType().Name, value);
   }
}
// The example displays the following output:
//    The String value 'One' is not in a recognizable format.
//    The String value '1.34e28' is not in a recognizable format.
//    The String value '-26.87' is not in a recognizable format.
//    -18 is outside the range of the UInt64 type.
//    The String value '-6.00' is not in a recognizable format.
//    Converted the String value ' 0' to the UInt64 value 0.
//    Converted the String value '137' to the UInt64 value 137.
//    The String value '1601.9' is not in a recognizable format.
//    Converted the String value '2147483647' to the UInt64 value 2147483647.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (UInt16)

Convert
.
.
::
.
ToUInt64 方法 (UInt16)
Convert 类

将指定的 16 位无符号整数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As UShort _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    ushort value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    unsigned short value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:uint16 -> uint64

参数

value
类型： System UInt16
要转换的 16 位无符号整数。

返回值

类型： System UInt64
与 value 等效的 64 位无符号整数。

下面的示例将 16 位无符号整数数组中的每个元素转换为无符号的长整数。

Dim numbers() As UShort = { UInt16.MinValue, 121, 340, UInt16.MaxValue }
Dim result As ULong

For Each number As UShort In numbers
   result = Convert.ToUInt64(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the UInt16 value 0 to the UInt64 value 0.
'    Converted the UInt16 value 121 to the UInt64 value 121.
'    Converted the UInt16 value 340 to the UInt64 value 340.
'    Converted the UInt16 value 65535 to the UInt64 value 65535.

ushort[] numbers = { UInt16.MinValue, 121, 340, UInt16.MaxValue };
ulong result;

foreach (ushort number in numbers)
{
   try {
      result = Convert.ToUInt64(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt16 value 0 to the UInt64 value 0.
//    Converted the UInt16 value 121 to the UInt64 value 121.
//    Converted the UInt16 value 340 to the UInt64 value 340.
//    Converted the UInt16 value 65535 to the UInt64 value 65535.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (UInt32)

Convert
.
.
::
.
ToUInt64 方法 (UInt32)
Convert 类

将指定的 32 位无符号整数的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As UInteger _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    uint value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:uint32 -> uint64

参数

value
类型： System UInt32
要转换的 32 位无符号整数。

返回值

类型： System UInt64
与 value 等效的 64 位无符号整数。

下面的示例将无符号整数数组中的每个元素转换为无符号的长整数。

Dim numbers() As UInteger = { UInt32.MinValue, 121, 340, UInt32.MaxValue }
Dim result As ULong

For Each number As UInteger In numbers
   result = Convert.ToUInt64(number)
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     number.GetType().Name, number, _
                     result.GetType().Name, result)
Next
' The example displays the following output:
'    Converted the UInt32 value 0 to the UInt64 value 0.
'    Converted the UInt32 value 121 to the UInt64 value 121.
'    Converted the UInt32 value 340 to the UInt64 value 340.
'    Converted the UInt32 value 4294967295 to the UInt64 value 4294967295.

uint[] numbers = { UInt32.MinValue, 121, 340, UInt32.MaxValue };
ulong result;

foreach (uint number in numbers)
{
   try {
      result = Convert.ToUInt64(number);
      Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                        number.GetType().Name, number,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("The {0} value {1} is outside the range of the UInt64 type.",
                        number.GetType().Name, number);
   }
}
// The example displays the following output:
//    Converted the UInt32 value 0 to the UInt64 value 0.
//    Converted the UInt32 value 121 to the UInt64 value 121.
//    Converted the UInt32 value 340 to the UInt64 value 340.
//    Converted the UInt32 value 4294967295 to the UInt64 value 4294967295.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (UInt64)

Convert
.
.
::
.
ToUInt64 方法 (UInt64)
Convert 类

返回指定的 64 位无符号整数；不执行任何实际的转换。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As ULong _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:uint64 -> uint64

参数

value
类型： System UInt64
要返回的 64 位无符号整数。

返回值

类型： System UInt64
value 不经更改即返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (Object, IFormatProvider)

Convert
.
.
::
.
ToUInt64 方法 (Object, IFormatProvider)
Convert 类

使用指定的区域性特定格式信息，将指定对象的值转换为 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As Object, _
    provider As IFormatProvider _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    Object value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    Object^ value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:Object *
        provider:IFormatProvider -> uint64

参数

value
类型： System Object
用于实现 IConvertible 接口的对象。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System UInt64
与 value 等效的 64 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为零。
异常 | 条件
FormatException | value 的格式不正确。
InvalidCastException | value 不实现 IConvertible 接口。 - 或 - 不支持该转换。
OverflowException | value 表示小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue 的数字。

返回值是调用 value 的基础类型的 IConvertible..::.ToUInt64 方法的结果。

provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。 provider 使用户得以指定关于 value 内容的区域性特定转换信息。例如，如果 value 是表示数字的 String，则 provider 可以提供有关用于表示该数字的表示法的区域性特定信息。

基类型忽略 provider；但是如果 value 是实现 IConvertible 接口的用户定义的类型，则可能会使用该参数。

下面的示例定义一个 HexString 类，该类实现 IConvertible 接口，并且设计为保存 64 位带符号和 64 位无符号值的字符串表示形式。类包含一个 Sign 属性来表示其十六进制值的符号。 下面的示例定义一个 HexString 类，该类实现 IConvertible 接口，并且设计为保存 64 位带符号和 64 位无符号值的字符串表示形式。类包含一个 Sign 属性来表示其十六进制值的符号。

Imports System.Globalization
Imports System.Text.RegularExpressions

Public Enum SignBit As Integer
   Positive = 1
   Zero = 0
   Negative = -1
End Enum

Public Structure HexString : Implements IConvertible
   Private signBit As SignBit
   Private hexString As String

   Public Property Sign As SignBit
      Set
         signBit = value
      End Set
      Get
         Return signBit
      End Get
   End Property

   Public Property Value As String
      Set
         If value.Trim().Length > 16 Then
            Throw New ArgumentException("The hexadecimal representation of a 64-bit integer cannot have more than 16 characters.")
         ElseIf Not Regex.IsMatch(value, "([0-9,A-F]){1,8}", RegexOptions.IgnoreCase) Then
            Throw New ArgumentException("The hexadecimal representation of a 64-bit integer contains invalid characters.")
         Else
            hexString = value
         End If
      End Set
      Get
         Return hexString
      End Get
   End Property

   ' IConvertible implementations.
   Public Function GetTypeCode() As TypeCode _
                   Implements IConvertible.GetTypeCode
      Return TypeCode.Object
   End Function

   Public Function ToBoolean(provider As IFormatProvider) As Boolean _
                   Implements IConvertible.ToBoolean
      Return signBit <> SignBit.Zero
   End Function

   Public Function ToByte(provider As IFormatProvider) As Byte _
                   Implements IConvertible.ToByte
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToInt64(hexString, 16)))
      Else
         Try
            Return Byte.Parse(hexString, NumberStyles.HexNumber)
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToUInt64(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToChar(provider As IFormatProvider) As Char _
                   Implements IConvertible.ToChar
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToInt64(hexString, 16)))
      End If

      Try
         Dim codePoint As UInt16 = UInt16.Parse(Me.hexString, NumberStyles.HexNumber)
         Return Convert.ToChar(codePoint)
      Catch e As OverflowException
         Throw New OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToUInt64(hexString, 16)))
      End Try
   End Function

   Public Function ToDateTime(provider As IFormatProvider) As Date _
                   Implements IConvertible.ToDateTime
      Throw New InvalidCastException("Hexadecimal to DateTime conversion is not supported.")
   End Function

   Public Function ToDecimal(provider As IFormatProvider) As Decimal _
                   Implements IConvertible.ToDecimal
      If signBit = SignBit.Negative Then
         Dim hexValue As Long = Int64.Parse(hexString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(hexValue)
      Else
         Dim hexValue As ULong = UInt64.Parse(hexString, NumberStyles.HexNumber)
         Return Convert.ToDecimal(hexValue)
      End If
   End Function

   Public Function ToDouble(provider As IFormatProvider) As Double _
                   Implements IConvertible.ToDouble
      If signBit = SignBit.Negative Then
         Return Convert.ToDouble(Int64.Parse(hexString, NumberStyles.HexNumber))
      Else
         Return Convert.ToDouble(UInt64.Parse(hexString, NumberStyles.HexNumber))
      End If
   End Function

   Public Function ToInt16(provider As IFormatProvider) As Int16 _
                   Implements IConvertible.ToInt16
      If signBit = SignBit.Negative Then
         Try
            Return Convert.ToInt16(Int64.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Int16 type.", Convert.ToInt64(hexString, 16)), e)
         End Try
      Else
         Try
            Return Convert.ToInt16(UInt64.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Int16 type.", Convert.ToUInt64(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToInt32(provider As IFormatProvider) As Int32 _
                   Implements IConvertible.ToInt32
      If signBit = SignBit.Negative Then
         Try
            Return Convert.ToInt32(Int64.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Int32 type.", Convert.ToUInt64(hexString, 16)), e)
         End Try
      Else
         Try
            Return Convert.ToInt32(UInt64.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Int32 type.", Convert.ToUInt64(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToInt64(provider As IFormatProvider) As Int64 _
                   Implements IConvertible.ToInt64
      If signBit = SignBit.Negative Then
         Return Int64.Parse(hexString, NumberStyles.HexNumber)
      Else
         Try
            Return Convert.ToInt64(UInt64.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the Int64 type.", Convert.ToUInt64(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToSByte(provider As IFormatProvider) As SByte _
                   Implements IConvertible.ToSByte
      If signBit = SignBit.Negative Then
         Try
            Return Convert.ToSByte(Int64.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is outside the range of the SByte type.", _
                                                      Int64.Parse(hexString, NumberStyles.HexNumber), e))
         End Try
      Else
         Try
            Return Convert.ToSByte(UInt64.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is outside the range of the SByte type.", _
                                                    UInt64.Parse(hexString, NumberStyles.HexNumber)), e)
         End Try
      End If
   End Function

   Public Function ToSingle(provider As IFormatProvider) As Single _
                   Implements IConvertible.ToSingle
      If signBit = SignBit.Negative Then
         Return Convert.ToSingle(Int64.Parse(hexString, NumberStyles.HexNumber))
      Else
         Return Convert.ToSingle(UInt64.Parse(hexString, NumberStyles.HexNumber))
      End If
   End Function

   Public Overloads Function ToString(provider As IFormatProvider) As String _
                   Implements IConvertible.ToString
      Return "0x" & Me.hexString
   End Function

   Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object _
                   Implements IConvertible.ToType
      Select Case Type.GetTypeCode(conversionType)
         Case TypeCode.Boolean
            Return Me.ToBoolean(Nothing)
         Case TypeCode.Byte
            Return Me.ToByte(Nothing)
         Case TypeCode.Char
            Return Me.ToChar(Nothing)
         Case TypeCode.DateTime
            Return Me.ToDateTime(Nothing)
         Case TypeCode.Decimal
            Return Me.ToDecimal(Nothing)
         Case TypeCode.Double
            Return Me.ToDouble(Nothing)
         Case TypeCode.Int16
            Return Me.ToInt16(Nothing)
         Case TypeCode.Int32
            Return Me.ToInt32(Nothing)
         Case TypeCode.Int64
            Return Me.ToInt64(Nothing)
         Case TypeCode.Object
            If GetType(HexString).Equals(conversionType) Then
               Return Me
            Else
               Throw New InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name))
            End If
         Case TypeCode.SByte
            Return Me.ToSByte(Nothing)
         Case TypeCode.Single
            Return Me.ToSingle(Nothing)
         Case TypeCode.String
            Return Me.ToString(Nothing)
         Case TypeCode.UInt16
            Return Me.ToUInt16(Nothing)
         Case TypeCode.UInt32
            Return Me.ToUInt32(Nothing)
         Case TypeCode.UInt64
            Return Me.ToUInt64(Nothing)
         Case Else
            Throw New InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name))
      End Select
   End Function

   Public Function ToUInt16(provider As IFormatProvider) As UInt16 _
                   Implements IConvertible.ToUInt16
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt16 type.", _
                                                   Int64.Parse(hexString, NumberStyles.HexNumber)))
      Else
         Try
            Return Convert.ToUInt16(UInt64.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
            Throw New OverflowException(String.Format("{0} is out of range of the UInt16 type.", Convert.ToUInt64(hexString, 16)), e)
         End Try
      End If
   End Function

   Public Function ToUInt32(provider As IFormatProvider) As UInt32 _
                   Implements IConvertible.ToUInt32
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt32 type.", _
                                                   Int64.Parse(hexString, NumberStyles.HexNumber)))
      Else
         Try
            Return Convert.ToUInt32(UInt64.Parse(hexString, NumberStyles.HexNumber))
         Catch e As OverflowException
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt32 type.", _
                                                   UInt64.Parse(hexString, NumberStyles.HexNumber)))
         End Try
      End If
   End Function

   Public Function ToUInt64(provider As IFormatProvider) As UInt64 _
                   Implements IConvertible.ToUInt64
      If signBit = SignBit.Negative Then
         Throw New OverflowException(String.Format("{0} is outside the range of the UInt64 type.", _
                                                   Int64.Parse(hexString, NumberStyles.HexNumber)))
      Else
         Return Convert.ToUInt64(hexString, 16)
      End If
   End Function
End Structure

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public enum SignBit { Negative=-1, Zero=0, Positive=1 };

public struct HexString : IConvertible
{
   private SignBit signBit;
   private string hexString;

   public SignBit Sign
   {
      set { signBit = value; }
      get { return signBit; }
   }

   public string Value
   {
      set
      {
         if (value.Trim().Length > 16)
            throw new ArgumentException("The hexadecimal representation of a 64-bit integer cannot have more than 16 characters.");
         else if (! Regex.IsMatch(value, "([0-9,A-F]){1,8}", RegexOptions.IgnoreCase))
            throw new ArgumentException("The hexadecimal representation of a 64-bit integer contains invalid characters.");
         else
            hexString = value;
      }
      get { return hexString; }
   }

   // IConvertible implementations.
   public TypeCode GetTypeCode()
   {
      return TypeCode.Object;
   }

   public bool ToBoolean(IFormatProvider provider)
   {
      return signBit != SignBit.Zero;
   }

   public byte ToByte(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToInt64(hexString, 16)));
      else
         try {
            return Byte.Parse(hexString, NumberStyles.HexNumber);
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Byte type.", Convert.ToUInt64(hexString, 16)), e);
         }
   }

   public char ToChar(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToInt64(hexString, 16)));

      try {
         ushort codePoint = UInt16.Parse(this.hexString, NumberStyles.HexNumber);
         return Convert.ToChar(codePoint);
      }
      catch (OverflowException) {
         throw new OverflowException(String.Format("{0} is out of range of the Char type.", Convert.ToUInt64(hexString, 16)));
      }
   }

   public DateTime ToDateTime(IFormatProvider provider)
   {
      throw new InvalidCastException("Hexadecimal to DateTime conversion is not supported.");
   }

   public decimal ToDecimal(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
      {
         long hexValue = Int64.Parse(hexString, NumberStyles.HexNumber);
         return Convert.ToDecimal(hexValue);
      }
      else
      {
         ulong hexValue = UInt64.Parse(hexString, NumberStyles.HexNumber);
         return Convert.ToDecimal(hexValue);
      }
   }

   public double ToDouble(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToDouble(Int64.Parse(hexString, NumberStyles.HexNumber));
      else
         return Convert.ToDouble(UInt64.Parse(hexString, NumberStyles.HexNumber));
   }

   public short ToInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         try {
            return Convert.ToInt16(Int64.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Int16 type.", Convert.ToInt64(hexString, 16)), e);
         }
      else
         try {
            return Convert.ToInt16(UInt64.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Int16 type.", Convert.ToUInt64(hexString, 16)), e);
         }
   }

   public int ToInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         try {
            return Convert.ToInt32(Int64.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Int32 type.", Convert.ToUInt64(hexString, 16)), e);
         }
      else
         try {
            return Convert.ToInt32(UInt64.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Int32 type.", Convert.ToUInt64(hexString, 16)), e);
         }
   }

   public long ToInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Int64.Parse(hexString, NumberStyles.HexNumber);
      else
         try {
            return Convert.ToInt64(UInt64.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the Int64 type.", Convert.ToUInt64(hexString, 16)), e);
         }
   }

   public sbyte ToSByte(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         try {
            return Convert.ToSByte(Int64.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is outside the range of the SByte type.",
                                                      Int64.Parse(hexString, NumberStyles.HexNumber), e));
         }
      else
         try {
            return Convert.ToSByte(UInt64.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is outside the range of the SByte type.",
                                                    UInt64.Parse(hexString, NumberStyles.HexNumber)), e);
         }
   }

   public float ToSingle(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         return Convert.ToSingle(Int64.Parse(hexString, NumberStyles.HexNumber));
      else
         return Convert.ToSingle(UInt64.Parse(hexString, NumberStyles.HexNumber));
   }

   public string ToString(IFormatProvider provider)
   {
      return "0x" + this.hexString;
   }

   public object ToType(Type conversionType, IFormatProvider provider)
   {
      switch (Type.GetTypeCode(conversionType))
      {
         case TypeCode.Boolean:
            return this.ToBoolean(null);
         case TypeCode.Byte:
            return this.ToByte(null);
         case TypeCode.Char:
            return this.ToChar(null);
         case TypeCode.DateTime:
            return this.ToDateTime(null);
         case TypeCode.Decimal:
            return this.ToDecimal(null);
         case TypeCode.Double:
            return this.ToDouble(null);
         case TypeCode.Int16:
            return this.ToInt16(null);
         case TypeCode.Int32:
            return this.ToInt32(null);
         case TypeCode.Int64:
            return this.ToInt64(null);
         case TypeCode.Object:
            if (typeof(HexString).Equals(conversionType))
               return this;
            else
               throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.", conversionType.Name));
         case TypeCode.SByte:
            return this.ToSByte(null);
         case TypeCode.Single:
            return this.ToSingle(null);
         case TypeCode.String:
            return this.ToString(null);
         case TypeCode.UInt16:
            return this.ToUInt16(null);
         case TypeCode.UInt32:
            return this.ToUInt32(null);
         case TypeCode.UInt64:
            return this.ToUInt64(null);
         default:
            throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
      }
   }

   public ushort ToUInt16(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt16 type.",
                                                   Int64.Parse(hexString, NumberStyles.HexNumber)));
      else
         try {
            return Convert.ToUInt16(UInt64.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException e) {
            throw new OverflowException(String.Format("{0} is out of range of the UInt16 type.", Convert.ToUInt64(hexString, 16)), e);
         }
   }

   public uint ToUInt32(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt32 type.",
                                                   Int64.Parse(hexString, NumberStyles.HexNumber)));
      else
         try {
            return Convert.ToUInt32(UInt64.Parse(hexString, NumberStyles.HexNumber));
         }
         catch (OverflowException) {
            throw new OverflowException(String.Format("{0} is outside the range of the UInt32 type.",
                                                      UInt64.Parse(hexString, NumberStyles.HexNumber)));
         }
   }

   public ulong ToUInt64(IFormatProvider provider)
   {
      if (signBit == SignBit.Negative)
         throw new OverflowException(String.Format("{0} is outside the range of the UInt64 type.",
                                                   Int64.Parse(hexString, NumberStyles.HexNumber)));
      else
         return Convert.ToUInt64(hexString, 16);
   }
}

下面的示例演示了对 ToUInt64(Object, IFormatProvider) 方法（将 HexString 对象作为参数传递）的调用进而调用 HexString 类的 IConvertible..::.ToUInt64 实现。

Module Example
   Public Sub Main()
      Dim positiveValue As UInt64 = CULng(UInt64.MaxValue - 100000)
      Dim negativeValue As Int64 = -1

      Dim positiveString As New HexString()
      positiveString.Sign = CType(Math.Sign(positiveValue), SignBit)
      positiveString.Value = positiveValue.ToString("X")

      Dim negativeString As New HexString()
      negativeString.Sign = CType(Math.Sign(negativeValue), SignBit)
      negativeString.Value = negativeValue.ToString("X")

      Try
         Console.WriteLine("0x{0} converts to {1}.", positiveString.Value, Convert.ToUInt64(positiveString))
      Catch e As OverflowException
         Console.WriteLine("{0} is outside the range of the UInt64 type.", _
                           Int64.Parse(positiveString.Value, NumberStyles.HexNumber))
      End Try

      Try
         Console.WriteLine("0x{0} converts to {1}.", negativeString.Value, Convert.ToUInt64(negativeString))
      Catch e As OverflowException
         Console.WriteLine("{0} is outside the range of the UInt64 type.", _
                           Int64.Parse(negativeString.Value, NumberStyles.HexNumber))
      End Try
   End Sub
End Module
' The example dosplays the following output:
'       0xFFFFFFFFFFFE795F converts to 18446744073709451615.
'       -1 is outside the range of the UInt64 type.

public class Example
{
   public static void Main()
   {
      ulong positiveValue = UInt64.MaxValue - 100000;
      long negativeValue = -1;

      HexString positiveString = new HexString();
      positiveString.Sign = (SignBit) Math.Sign((decimal)positiveValue);
      positiveString.Value = positiveValue.ToString("X");

      HexString negativeString = new HexString();
      negativeString.Sign = (SignBit) Math.Sign(negativeValue);
      negativeString.Value = negativeValue.ToString("X");

      try {
         Console.WriteLine("0x{0} converts to {1}.", positiveString.Value, Convert.ToUInt64(positiveString));
      }
      catch (OverflowException) {
         Console.WriteLine("{0} is outside the range of the UInt64 type.",
                           Int64.Parse(positiveString.Value, NumberStyles.HexNumber));
      }

      try {
         Console.WriteLine("0x{0} converts to {1}.", negativeString.Value, Convert.ToUInt64(negativeString));
      }
      catch (OverflowException) {
         Console.WriteLine("{0} is outside the range of the UInt64 type.",
                           Int64.Parse(negativeString.Value, NumberStyles.HexNumber));
      }
   }
}
// The example displays the following output:
//       0xFFFFFFFFFFFE795F converts to 18446744073709451615.
//       -1 is outside the range of the UInt64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (String, IFormatProvider)

Convert
.
.
::
.
ToUInt64 方法 (String, IFormatProvider)
Convert 类

使用指定的区域性特定格式设置信息，将数字的指定字符串表示形式转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As String, _
    provider As IFormatProvider _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    string value,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    String^ value,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:string *
        provider:IFormatProvider -> uint64

参数

value
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System UInt64
与 value 中数字等效的 64 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
FormatException | value不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | value 表示小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue 的数字。

返回值是对 value 调用 UInt64..::.Parse 的结果。

provider 是 IFormatProvider 实现，它获取 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 是 IFormatProvider 实现，它获取 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 是 IFormatProvider 实现，它获取 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 value 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

如果您希望在转换失败时不处理异常，则可以转而调用 UInt64..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。 如果您希望在转换失败时不处理异常，则可以转而调用 UInt64..::.TryParse 方法。它将返回 Boolean 值，该值指示转换是否成功。

下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它尝试将数值的字符串数组的每个元素转换为一个长型无符号整数。转换为固定区域性同时使用自定义提供程序以及 NumberFormatInfo 提供程序。 下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它尝试将数值的字符串数组的每个元素转换为一个长型无符号整数。转换为固定区域性同时使用自定义提供程序以及 NumberFormatInfo 提供程序。 下面的示例定义了一个自定义 NumberFormatInfo 对象，该对象将字符串“pos”识别为正号，将字符串“neg”识别为负号。然后，它尝试将数值的字符串数组的每个元素转换为一个长型无符号整数。转换为固定区域性同时使用自定义提供程序以及 NumberFormatInfo 提供程序。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Create a NumberFormatInfo object and set several properties.
      Dim provider As New NumberFormatInfo()
      provider.PositiveSign = "pos "
      provider.NegativeSign = "neg "

      ' Define an array of numeric strings.
      Dim values() As String = { "123456789012", "+123456789012", _
                                 "pos 123456789012", "123456789012.", _
                                 "123,456,789,012", "18446744073709551615", _
                                 "18446744073709551616", "neg 1", "-1" }
      '  Convert the strings using the format provider.
      For Each value As String In values
         Console.Write("{0,-20}  -->  ", value)
         Try
            Console.WriteLine("{0,20}", Convert.ToUInt64(value, provider))
         Catch e As FormatException
            Console.WriteLine("{0,20}", "Invalid Format")
         Catch e As OverflowException
            Console.WriteLine("{0,20}", "Numeric Overflow")
         End Try
      Next
    End Sub
End Module
' The example displays the following output:
'    123456789012          -->          123456789012
'    +123456789012         -->        Invalid Format
'    pos 123456789012      -->          123456789012
'    123456789012.         -->        Invalid Format
'    123,456,789,012       -->        Invalid Format
'    18446744073709551615  -->  18446744073709551615
'    18446744073709551616  -->      Numeric Overflow
'    neg 1                 -->      Numeric Overflow
'    -1                    -->        Invalid Format

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Create a NumberFormatInfo object and set several properties.
      NumberFormatInfo provider = new NumberFormatInfo();
      provider.PositiveSign = "pos ";
      provider.NegativeSign = "neg ";

      // Define an array of numeric strings.
      string[] values = { "123456789012", "+123456789012",
                          "pos 123456789012", "123456789012.",
                          "123,456,789,012", "18446744073709551615",
                          "18446744073709551616", "neg 1", "-1" };
      //  Convert the strings using the format provider.
      foreach (string value in values)
      {
         Console.Write("{0,-20}  -->  ", value);
         try {
            Console.WriteLine("{0,20}", Convert.ToUInt64(value, provider));
         }
         catch (FormatException) {
            Console.WriteLine("{0,20}", "Invalid Format");
         }
         catch (OverflowException) {
            Console.WriteLine("{0,20}", "Numeric Overflow");
         }
      }
   }
}
// The example displays the following output:
//    123456789012          -->          123456789012
//    +123456789012         -->        Invalid Format
//    pos 123456789012      -->          123456789012
//    123456789012.         -->        Invalid Format
//    123,456,789,012       -->        Invalid Format
//    18446744073709551615  -->  18446744073709551615
//    18446744073709551616  -->      Numeric Overflow
//    neg 1                 -->      Numeric Overflow
//    -1                    -->        Invalid Format

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Convert ..::.ToUInt64 方法 (String, Int32)

Convert
.
.
::
.
ToUInt64 方法 (String, Int32)
Convert 类

将指定基的数字的字符串表示形式转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    value As String, _
    fromBase As Integer _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    string value,
    int fromBase
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    String^ value,
    int fromBase
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        value:string *
        fromBase:int -> uint64

参数

value
类型： System String
包含要转换的数字的字符串。
fromBase
类型： System Int32
value 中数字的基数，它必须是 2、8、10 或 16。

返回值

类型： System UInt64
与 value 中数字等效的 64 位无符号整数，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 0（零）。
异常 | 条件
ArgumentException | fromBase 不是 2、8、10 或 16。 - 或 - value，它表示一个非 10 为基的无符号数，前面带一个负号。
FormatException | value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。 value 包含的一个字符不是 fromBase 指定的基中的有效数字。如果 value 中的第一个字符无效，异常消息则指示没有可转换的数字；否则，该消息将指示 value 包含无效的尾随字符。
OverflowException | value，它表示一个非 10 为基的无符号数，前面带一个负号。 - 或 - value 表示小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue 的数字。

如果 fromBase 为 16，则可以在 value 参数指定的数字前面加上“0x”或“0X”。

由于 UInt64 数据类型仅支持无符号值，因此 ToUInt64(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 64 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt64 数据类型的范围的有符号长整数值转换为 UInt64 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt64(String, Int32) 方法。该方法将显示消息“0x8000000000000000 converts to 9223372036854775808”（0x8000000000000000 转换为 9223372036854775808），而不是引发异常。 由于 UInt64 数据类型仅支持无符号值，因此 ToUInt64(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 64 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt64 数据类型的范围的有符号长整数值转换为 UInt64 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt64(String, Int32) 方法。该方法将显示消息“0x8000000000000000 converts to 9223372036854775808”（0x8000000000000000 转换为 9223372036854775808），而不是引发异常。 由于 UInt64 数据类型仅支持无符号值，因此 ToUInt64(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 64 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt64 数据类型的范围的有符号长整数值转换为 UInt64 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt64(String, Int32) 方法。该方法将显示消息“0x8000000000000000 converts to 9223372036854775808”（0x8000000000000000 转换为 9223372036854775808），而不是引发异常。 由于 UInt64 数据类型仅支持无符号值，因此 ToUInt64(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 64 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt64 数据类型的范围的有符号长整数值转换为 UInt64 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt64(String, Int32) 方法。该方法将显示消息“0x8000000000000000 converts to 9223372036854775808”（0x8000000000000000 转换为 9223372036854775808），而不是引发异常。 由于 UInt64 数据类型仅支持无符号值，因此 ToUInt64(String, Int32) 方法假定使用无符号二进制表示形式来表示 value。换句话说，所有 64 位数字都用于表示数值，因而缺少一个符号位。因此，可以编写代码以将超出 UInt64 数据类型的范围的有符号长整数值转换为 UInt64 值，从而不让该方法引发异常。下面的示例将 MinValue 转换为对应的十六进制字符串表示形式，然后调用 ToUInt64(String, Int32) 方法。该方法将显示消息“0x8000000000000000 converts to 9223372036854775808”（0x8000000000000000 转换为 9223372036854775808），而不是引发异常。

' Create a hexadecimal value out of range of the UInt64 type.
Dim value As String = Convert.ToString(Long.MinValue, 16)
' Convert it back to a number.
Try
   Dim number As UInt64 = Convert.ToUInt64(value, 16)
   Console.WriteLine("0x{0} converts to {1}.", value, number)
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned long integer.", _
                     value)
End Try

// Create a hexadecimal value out of range of the UInt64 type.
string value = Convert.ToString(Int64.MinValue, 16);
// Convert it back to a number.
try
{
   UInt64 number = Convert.ToUInt64(value, 16);
   Console.WriteLine("0x{0} converts to {1}.", value, number);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned long integer.",
                     value);
}

在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt64 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt64 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt64 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt64 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt64 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt64 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt64 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt64 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。 在执行二元运算或数值转换时，开发人员始终需要负责验证方法或运算符是否使用了适当的数值表示形式来解释特定值。下面的示例演示了一种技巧，此技巧可确保在将十六进制字符串转换为 UInt64 值时，所用的方法不会错误地使用二进制表示形式来解释使用 2 的补数表示形式的值。该示例在将一个值转换为对应的字符串表示形式时，确定该值是表示一个有符号整数还是一个无符号整数。在此示例将该值转换为 UInt64 值时，它将检查原始值是否为一个有符号整数。如果原始值是有符号整数并且其高序位已被设置（这表明该原始值是一个负数），则此方法将引发异常。

' Create a negative hexadecimal value out of range of the UInt64 type.
Dim sourceNumber As Long = Long.MinValue
Dim isSigned As Boolean = Math.Sign(sourceNumber.MinValue) = -1
Dim value As String = Convert.ToString(sourceNumber, 16)
Dim targetNumber As UInt64
Try
   targetNumber = Convert.ToUInt64(value, 16)
   If isSigned And ((targetNumber And &H8000000000000000ul) <> 0) Then
      Throw New OverflowException()
   Else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber)
   End If
Catch e As OverflowException
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned long integer.", _
                     value)
End Try
' Displays the following to the console:
'    Unable to convert '0x8000' to an unsigned long integer.

// Create a negative hexadecimal value out of range of the UInt64 type.
long sourceNumber = Int64.MinValue;
bool isSigned = Math.Sign((long)sourceNumber.GetType().GetField("MinValue").GetValue(null)) == -1;
string value = Convert.ToString(sourceNumber, 16);
UInt64 targetNumber;
try
{
   targetNumber = Convert.ToUInt64(value, 16);
   if (isSigned && ((targetNumber & 0x8000000000000000) != 0))
      throw new OverflowException();
   else
      Console.WriteLine("0x{0} converts to {1}.", value, targetNumber);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert '0x{0}' to an unsigned long integer.",
                     value);
}
// Displays the following to the console:
//    Unable to convert '0x8000000000000000' to an unsigned long integer.

下面的示例尝试将数值字符串数组中的每个元素解释为十六进制值，并将其转换为无符号的长整数。

Module Example
   Public Sub Main()
      Dim hexStrings() As String = { "80000000", "0FFFFFFF", "F0000000", "00A3000", "D", _
                                     "-13", "9AC61", "GAD", "FFFFFFFFFF" }
      For Each hexString As String In hexStrings
         Console.Write("{0,-12}  -->  ", hexString)
         Try
            Dim number As UInteger = Convert.ToUInt32(hexString, 16)
            Console.WriteLine("{0,18:N0}", number)
         Catch e As FormatException
            Console.WriteLine("{0,18}", "Bad Format")
         Catch e As OverflowException
            Console.WriteLine("{0,18}", "Numeric Overflow")
         Catch e As ArgumentException
            Console.WriteLine("{0,18}", "Invalid in Base 16")
         End Try
      Next
   End Sub
End Module
'    ' The example displays the following output:
'    80000000      -->       2,147,483,648
'    0FFFFFFF      -->         268,435,455
'    F0000000      -->       4,026,531,840
'    00A3000       -->             667,648
'    D             -->                  13
'    -13           -->  Invalid in Base 16
'    9AC61         -->             633,953
'    GAD           -->          Bad Format
'    FFFFFFFFFF    -->    Numeric Overflow

public class Example
{
   public static void Main()
   {
      string[] hexStrings = { "80000000", "0FFFFFFF", "F0000000", "00A3000", "D",
                              "-13", "9AC61", "GAD", "FFFFFFFFFF" };

      foreach (string hexString in hexStrings)
      {
         Console.Write("{0,-12}  -->  ", hexString);
         try {
            uint number = Convert.ToUInt32(hexString, 16);
            Console.WriteLine("{0,18:N0}", number);
         }
         catch (FormatException) {
            Console.WriteLine("{0,18}", "Bad Format");
         }
         catch (OverflowException)
         {
            Console.WriteLine("{0,18}", "Numeric Overflow");
         }
         catch (ArgumentException) {
            Console.WriteLine("{0,18}", "Invalid in Base 16");
         }
      }
   }
}
// The example displays the following output:
//       80000000      -->       2,147,483,648
//       0FFFFFFF      -->         268,435,455
//       F0000000      -->       4,026,531,840
//       00A3000       -->             667,648
//       D             -->                  13
//       -13           -->  Invalid in Base 16
//       9AC61         -->             633,953
//       GAD           -->          Bad Format
//       FFFFFFFFFF    -->    Numeric Overflow

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Convert 类
Convert 成员
ToUInt64 重载
System 命名空间


Converter <(Of <(TInput, TOutput >)>) 委托

Converter
<
(Of
<
(
TInput, TOutput
>
)
>
)
委托

表示将对象从一种类型转换为另一种类型的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Converter(Of In TInput, Out TOutput) ( _
    input As TInput _
) As TOutput
public delegate TOutput Converter<in TInput, out TOutput>(
    TInput input
)

generic<typename TInput, typename TOutput>
public delegate TOutput Converter(
    TInput input
)
type Converter =
    delegate of
        input:'TInput -> 'TOutput

类型参数

inInininTInputTInput

要转换的对象的类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

outOutoutoutTOutputTOutput

要将输入对象转换到的类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

input
类型：TInput
要转换的对象。

返回值

类型：TOutput
TOutput，它表示已转换的 TInput。

此委托由 Array 类的 ConvertAll<(Of <(TInput, TOutput>)>) 方法和 List<(Of <(T>)>) 类的 ConvertAll<(Of <(TOutput>)>) 方法使用，将集合中的每个元素从一种类型转换为另一种类型。

本节包含两个代码示例。第一个示例演示 Converter<(Of <(TInput, TOutput>)>) 委托和 Array 类的 ConvertAll<(Of <(TInput, TOutput>)>) 方法；第二个示例演示该委托和 List<(Of <(T>)>) 泛型类的 ConvertAll<(Of <(TOutput>)>) 方法。 本节包含两个代码示例。第一个示例演示 Converter<(Of <(TInput, TOutput>)>) 委托和 Array 类的 ConvertAll<(Of <(TInput, TOutput>)>) 方法；第二个示例演示该委托和 List<(Of <(T>)>) 泛型类的 ConvertAll<(Of <(TOutput>)>) 方法。

示例 1

下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建一个 PointF 结构的数组和一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）来表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TInput, TOutput>)>) 方法。ConvertAll<(Of <(TInput, TOutput>)>) 方法将输入列表中的每个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。 下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建一个 PointF 结构的数组和一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）来表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TInput, TOutput>)>) 方法。ConvertAll<(Of <(TInput, TOutput>)>) 方法将输入列表中的每个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。 下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建一个 PointF 结构的数组和一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）来表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TInput, TOutput>)>) 方法。ConvertAll<(Of <(TInput, TOutput>)>) 方法将输入列表中的每个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。 下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建一个 PointF 结构的数组和一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）来表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TInput, TOutput>)>) 方法。ConvertAll<(Of <(TInput, TOutput>)>) 方法将输入列表中的每个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。

Imports System
Imports System.Drawing
Imports System.Collections.Generic

Public Class Example

    Public Shared Sub Main()

        Dim apf() As PointF = { _
            New PointF(27.8, 32.62), _
            New PointF(99.3, 147.273), _
            New PointF(7.5, 1412.2)  }

        Console.WriteLine()
        For Each p As PointF In apf
            Console.WriteLine(p)
        Next

        Dim ap() As Point = Array.ConvertAll(apf, _
            New Converter(Of PointF, Point)(AddressOf PointFToPoint))

        Console.WriteLine()
        For Each p As Point In ap
            Console.WriteLine(p)
        Next

    End Sub

    Public Shared Function PointFToPoint(ByVal pf As PointF) _
        As Point

        Return New Point(CInt(pf.X), CInt(pf.Y))
    End Function
End Class

' This code example produces the following output:
'
'{X=27.8, Y=32.62}
'{X=99.3, Y=147.273}
'{X=7.5, Y=1412.2}
'
'{X=28,Y=33}
'{X=99,Y=147}
'{X=8,Y=1412}

using System;
using System.Drawing;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        PointF[] apf = {
            new PointF(27.8F, 32.62F),
            new PointF(99.3F, 147.273F),
            new PointF(7.5F, 1412.2F) };

        Console.WriteLine();
        foreach( PointF p in apf )
        {
            Console.WriteLine(p);
        }

        Point[] ap = Array.ConvertAll(apf,
            new Converter<PointF, Point>(PointFToPoint));

        Console.WriteLine();
        foreach( Point p in ap )
        {
            Console.WriteLine(p);
        }
    }

    public static Point PointFToPoint(PointF pf)
    {
        return new Point(((int) pf.X), ((int) pf.Y));
    }
}

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}

{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
 */

#using <System.Drawing.dll>

using namespace System;
using namespace System::Drawing;
using namespace System::Collections::Generic;

Point PointFToPoint(PointF pf)
{
    return Point((int) pf.X, (int) pf.Y);
};

void main()
{
    array<PointF>^ apf = {
        PointF(27.8F, 32.62F),
        PointF(99.3F, 147.273F),
        PointF(7.5F, 1412.2F) };

    Console::WriteLine();
    for each(PointF p in apf)
    {
        Console::WriteLine(p);
    }

    array<Point>^ ap =
        Array::ConvertAll(apf,
            gcnew Converter<PointF, Point>(PointFToPoint)
        );

    Console::WriteLine();
    for each(Point p in ap)
    {
        Console::WriteLine(p);
    }
}

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}

{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
 */

示例 2

下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建 PointF 结构的 List<(Of <(T>)>)，创建一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）以表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TOutput>)>) 方法。ConvertAll<(Of <(TOutput>)>) 方法将输入列表的各个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。 下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建 PointF 结构的 List<(Of <(T>)>)，创建一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）以表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TOutput>)>) 方法。ConvertAll<(Of <(TOutput>)>) 方法将输入列表的各个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。 下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建 PointF 结构的 List<(Of <(T>)>)，创建一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）以表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TOutput>)>) 方法。ConvertAll<(Of <(TOutput>)>) 方法将输入列表的各个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。 下面的代码示例定义一个名为 PointFToPoint 的方法，该方法将 PointF 结构转换为 Point 结构。然后，该示例创建 PointF 结构的 List<(Of <(T>)>)，创建一个 Converter<PointF, Point> 委托（在 Visual Basic 中为 Converter(Of PointF, Point)）以表示 PointFToPoint 方法，并将该委托传递给 ConvertAll<(Of <(TOutput>)>) 方法。ConvertAll<(Of <(TOutput>)>) 方法将输入列表的各个元素传递给 PointFToPoint 方法，并将转换后的元素置于 Point 结构的新列表中。这两个列表都会显示。

Imports System
Imports System.Drawing
Imports System.Collections.Generic

Public Class Example

    Public Shared Sub Main()

        Dim lpf As New List(Of PointF)

        lpf.Add(New PointF(27.8, 32.62))
        lpf.Add(New PointF(99.3, 147.273))
        lpf.Add(New PointF(7.5, 1412.2))

        Console.WriteLine()
        For Each p As PointF In lpf
            Console.WriteLine(p)
        Next

        Dim lp As List(Of Point) = lpf.ConvertAll( _
            New Converter(Of PointF, Point)(AddressOf PointFToPoint))

        Console.WriteLine()
        For Each p As Point In lp
            Console.WriteLine(p)
        Next

    End Sub

    Public Shared Function PointFToPoint(ByVal pf As PointF) _
        As Point

        Return New Point(CInt(pf.X), CInt(pf.Y))
    End Function
End Class

' This code example produces the following output:
'
'{X=27.8, Y=32.62}
'{X=99.3, Y=147.273}
'{X=7.5, Y=1412.2}
'
'{X=28,Y=33}
'{X=99,Y=147}
'{X=8,Y=1412}

using System;
using System.Drawing;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<PointF> lpf = new List<PointF>();

        lpf.Add(new PointF(27.8F, 32.62F));
        lpf.Add(new PointF(99.3F, 147.273F));
        lpf.Add(new PointF(7.5F, 1412.2F));

        Console.WriteLine();
        foreach( PointF p in lpf )
        {
            Console.WriteLine(p);
        }

        List<Point> lp = lpf.ConvertAll(
            new Converter<PointF, Point>(PointFToPoint));

        Console.WriteLine();
        foreach( Point p in lp )
        {
            Console.WriteLine(p);
        }
    }

    public static Point PointFToPoint(PointF pf)
    {
        return new Point(((int) pf.X), ((int) pf.Y));
    }
}

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}

{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
 */

#using <System.Drawing.dll>

using namespace System;
using namespace System::Drawing;
using namespace System::Collections::Generic;

Point PointFToPoint(PointF pf)
{
    return Point((int) pf.X, (int) pf.Y);
};

void main()
{
    List<PointF>^ lpf = gcnew List<PointF>();

    lpf->Add(PointF(27.8F, 32.62F));
    lpf->Add(PointF(99.3F, 147.273F));
    lpf->Add(PointF(7.5F, 1412.2F));

    Console::WriteLine();
    for each(PointF p in lpf)
    {
        Console::WriteLine(p);
    }

    List<Point>^ lp =
        lpf->ConvertAll<Point>(
            gcnew Converter<PointF, Point>(PointFToPoint)
        );

    Console::WriteLine();
    for each(Point p in lp)
    {
        Console::WriteLine(p);
    }
}

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}

{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


CrossAppDomainDelegate 委托

CrossAppDomainDelegate 委托

由 DoCallBack 使用，用于跨应用程序域的调用。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Delegate Sub CrossAppDomainDelegate
[ComVisibleAttribute(true)]
public delegate void CrossAppDomainDelegate()
[ComVisibleAttribute(true)]
public delegate void CrossAppDomainDelegate()
[<ComVisibleAttribute(true)>]
type CrossAppDomainDelegate =
    delegate of unit -> unit

Delegate 和 MulticastDelegate 的每个派生类都有一个构造函数和一个 Invoke 方法。请参见 Delegate 说明中给出的 C++ 代码示例。 Delegate 和 MulticastDelegate 的每个派生类都有一个构造函数和一个 Invoke 方法。请参见 Delegate 说明中给出的 C++ 代码示例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间


DataMisalignedException 类

DataMisalignedException 类
成员

在从不是数据大小倍数的地址读取数据单元或将数据单元写入此类地址时引发的异常。无法继承此类。 在从不是数据大小倍数的地址读取数据单元或将数据单元写入此类地址时引发的异常。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class DataMisalignedException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class DataMisalignedException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class DataMisalignedException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type DataMisalignedException =
    class
        inherit SystemException
    end

有些微处理器（如 64 位处理器）在从非对齐地址（即地址不是所访问的数据大小的倍数）读取数据或将数据写入此类地址时，可能会发出硬件异常。DataMisalignedException 通常在从不是两字节、四字节或八字节的倍数的地址读取 16 位、32 位或 64 位数据或将这些数据写入此类地址时引发。 有些微处理器（如 64 位处理器）在从非对齐地址（即地址不是所访问的数据大小的倍数）读取数据或将数据写入此类地址时，可能会发出硬件异常。DataMisalignedException 通常在从不是两字节、四字节或八字节的倍数的地址读取 16 位、32 位或 64 位数据或将这些数据写入此类地址时引发。

DataMisalignedException 公开基础硬件异常，使您可以通过适当的方式进行响应。例如，应用程序的某一例程尝试以 64 位数据单元的形式将字节序列从一个位置复制到另一个位置。但是，写入操作从不对齐的地址开始，从而会导致公共语言运行时引发一个 DataMisalignedException 异常。例程响应该异常的方式是一次复制一个字节的数据。 DataMisalignedException 公开基础硬件异常，使您可以通过适当的方式进行响应。例如，应用程序的某一例程尝试以 64 位数据单元的形式将字节序列从一个位置复制到另一个位置。但是，写入操作从不对齐的地址开始，从而会导致公共语言运行时引发一个 DataMisalignedException 异常。例程响应该异常的方式是一次复制一个字节的数据。 DataMisalignedException 公开基础硬件异常，使您可以通过适当的方式进行响应。例如，应用程序的某一例程尝试以 64 位数据单元的形式将字节序列从一个位置复制到另一个位置。但是，写入操作从不对齐的地址开始，从而会导致公共语言运行时引发一个 DataMisalignedException 异常。例程响应该异常的方式是一次复制一个字节的数据。 DataMisalignedException 公开基础硬件异常，使您可以通过适当的方式进行响应。例如，应用程序的某一例程尝试以 64 位数据单元的形式将字节序列从一个位置复制到另一个位置。但是，写入操作从不对齐的地址开始，从而会导致公共语言运行时引发一个 DataMisalignedException 异常。例程响应该异常的方式是一次复制一个字节的数据。

System System..::.DataMisalignedExceptionDataMisalignedException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataMisalignedException 成员
System 命名空间


DataMisalignedException 成员

DataMisalignedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataMisalignedException 类

在从不是数据大小倍数的地址读取数据单元或将数据单元写入此类地址时引发的异常。无法继承此类。 在从不是数据大小倍数的地址读取数据单元或将数据单元写入此类地址时引发的异常。无法继承此类。

DataMisalignedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataMisalignedException 类
System 命名空间


DataMisalignedException 构造函数

DataMisalignedException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataMisalignedException 类

初始化 DataMisalignedException 类的新实例。

名称 说明
页首

参考

DataMisalignedException 类
DataMisalignedException 成员
System 命名空间


DataMisalignedException 构造函数

DataMisalignedException 构造函数
DataMisalignedException 类

初始化 DataMisalignedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public DataMisalignedException()
public:
DataMisalignedException()
new : unit -> DataMisalignedException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataMisalignedException 类
DataMisalignedException 成员
DataMisalignedException 重载
System 命名空间


DataMisalignedException 构造函数 (String)

DataMisalignedException 构造函数 (String)
DataMisalignedException 类

使用指定的错误信息初始化 DataMisalignedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public DataMisalignedException(
    string message
)
public:
DataMisalignedException(
    String^ message
)
new :
        message:string -> DataMisalignedException

参数

message
类型： System String
描述错误的 String 对象。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述错误的 String 对象。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述错误的 String 对象。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataMisalignedException 类
DataMisalignedException 成员
DataMisalignedException 重载
System 命名空间


DataMisalignedException 构造函数 (String, Exception)

DataMisalignedException 构造函数 (String, Exception)
DataMisalignedException 类

用指定的错误信息和基础异常初始化 DataMisalignedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public DataMisalignedException(
    string message,
    Exception innerException
)
public:
DataMisalignedException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> DataMisalignedException

参数

message
类型： System String
描述错误的 String 对象。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述错误的 String 对象。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述错误的 String 对象。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
innerException
类型： System Exception
导致当前 DataMisalignedException 的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前 DataMisalignedException 的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataMisalignedException 类
DataMisalignedException 成员
DataMisalignedException 重载
System 命名空间


DataMisalignedException 方法

DataMisalignedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataMisalignedException 类

DataMisalignedException 类型公开以下成员。

名称 说明
页首

参考

DataMisalignedException 类
System 命名空间


DataMisalignedException 属性

DataMisalignedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataMisalignedException 类

DataMisalignedException 类型公开以下成员。

名称 说明
页首

参考

DataMisalignedException 类
System 命名空间


DataMisalignedException 事件

DataMisalignedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataMisalignedException 类

DataMisalignedException 类型公开以下成员。

名称 说明
页首

参考

DataMisalignedException 类
System 命名空间


DateTime 结构

DateTime 结构
成员

表示时间上的一刻，通常以日期和当天的时间表示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Structure DateTime _
    Implements IComparable, IFormattable, IConvertible, ISerializable,  _
    IComparable(Of DateTime), IEquatable(Of DateTime)
[SerializableAttribute]
public struct DateTime : IComparable, IFormattable,
    IConvertible, ISerializable, IComparable<DateTime>, IEquatable<DateTime>
[SerializableAttribute]
public value class DateTime : IComparable,
    IFormattable, IConvertible, ISerializable, IComparable<DateTime>,
    IEquatable<DateTime>
[<SealedAttribute>]
[<SerializableAttribute>]
type DateTime =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface ISerializable
        interface IComparable<DateTime>
        interface IEquatable<DateTime>
    end

DateTime 值类型表示值范围在公元（基督纪元）0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之间的日期和（公元）。 DateTime 值类型表示值范围在公元（基督纪元）0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之间的日期和（公元）。

时间值以 100 纳秒为单位（该单位称为计时周期）进行计量，而特定日期间隔数（以 100 纳秒为一个间隔）自 GregorianCalendar 日历中公元 (C.E.) 0001 年 1 月 1 日午夜 12:00 以来的计时周期数。例如，计时周期值 31241376000000000L 表示 0100 年 1 月 1 日（星期五）午夜 12:00:00。DateTime 值始终在显式或默认日历的上下文中表示。 时间值以 100 纳秒为单位（该单位称为计时周期）进行计量，而特定日期间隔数（以 100 纳秒为一个间隔）自 GregorianCalendar 日历中公元 (C.E.) 0001 年 1 月 1 日午夜 12:00 以来的计时周期数。例如，计时周期值 31241376000000000L 表示 0100 年 1 月 1 日（星期五）午夜 12:00:00。DateTime 值始终在显式或默认日历的上下文中表示。 时间值以 100 纳秒为单位（该单位称为计时周期）进行计量，而特定日期间隔数（以 100 纳秒为一个间隔）自 GregorianCalendar 日历中公元 (C.E.) 0001 年 1 月 1 日午夜 12:00 以来的计时周期数。例如，计时周期值 31241376000000000L 表示 0100 年 1 月 1 日（星期五）午夜 12:00:00。DateTime 值始终在显式或默认日历的上下文中表示。 时间值以 100 纳秒为单位（该单位称为计时周期）进行计量，而特定日期间隔数（以 100 纳秒为一个间隔）自 GregorianCalendar 日历中公元 (C.E.) 0001 年 1 月 1 日午夜 12:00 以来的计时周期数。例如，计时周期值 31241376000000000L 表示 0100 年 1 月 1 日（星期五）午夜 12:00:00。DateTime 值始终在显式或默认日历的上下文中表示。

说明 说明

如果您正在处理一个您想要将转换为其他时间间隔（如分钟或秒）的计时周期值，您应该使用 TimeSpan..::.TicksPerDay、 TimeSpan..::.TicksPerHour、 TimeSpan..::.TicksPerMinute、 TimeSpan..::.TicksPerSecond，或 TimeSpan..::.TicksPerMillisecond 常量来执行转换。例如，如要将用指定的刻度数表示的秒数与 DateTime 值的 Second 分量相加，您可以使用表达式 dateValue.Second + nTicks/Timespan.TicksPerSecond。 如果您正在处理一个您想要将转换为其他时间间隔（如分钟或秒）的计时周期值，您应该使用 TimeSpan..::.TicksPerDay、 TimeSpan..::.TicksPerHour、 TimeSpan..::.TicksPerMinute、 TimeSpan..::.TicksPerSecond，或 TimeSpan..::.TicksPerMillisecond 常量来执行转换。例如，如要将用指定的刻度数表示的秒数与 DateTime 值的 Second 分量相加，您可以使用表达式 dateValue.Second + nTicks/Timespan.TicksPerSecond。

实例化 DateTime 对象

可以通过以下任一方式创建新的 DateTime 值：

  • 调用 DateTime 构造函数的任意重载，该构造函数用于指定日期和时间值的特定元素（例如，年、月、日或计时周期数）。下面的语句演示如何调用某一 DateTime 构造函数来创建具有特定年、月、日、小时、分钟和秒的日期。 调用 DateTime 构造函数的任意重载，该构造函数用于指定日期和时间值的特定元素（例如，年、月、日或计时周期数）。下面的语句演示如何调用某一 DateTime 构造函数来创建具有特定年、月、日、小时、分钟和秒的日期。

    Dim date1 As New Date(2008, 5, 1, 8, 30, 52)

    DateTime date1 = new DateTime(2008, 5, 1, 8, 30, 52);

  • 使用任何编译器特定的语法声明日期和时间值。例如，下面的 Visual Basic 语句初始化一个新的 DateTime 值。 使用任何编译器特定的语法声明日期和时间值。例如，下面的 Visual Basic 语句初始化一个新的 DateTime 值。

    Dim date1 As Date = #5/1/2008 8:30:52AM#

  • 为 DateTime 对象分配属性或方法所返回的日期和时间值。下面的示例将当前日期和时间、当前协调世界时 (UTC) 日期和时间以及当前日期分别分配给三个新的 DateTime 变量。 为 DateTime 对象分配属性或方法所返回的日期和时间值。下面的示例将当前日期和时间、当前协调世界时 (UTC) 日期和时间以及当前日期分别分配给三个新的 DateTime 变量。

    Dim date1 As Date = Date.Now
Dim date2 As Date = Date.UtcNow
Dim date3 As Date = Date.Today

    DateTime date1 = DateTime.Now;
DateTime date2 = DateTime.UtcNow;
DateTime date3 = DateTime.Today;

  • 分析日期和时间值的字符串表示形式。Parse、ParseExact、TryParse 和 TryParseExact 方法均可将字符串转换为其等效的日期和时间值。下面的示例使用 Parse 方法分析字符串并将其转换为 DateTime 值。 分析日期和时间值的字符串表示形式。Parse、ParseExact、TryParse 和 TryParseExact 方法均可将字符串转换为其等效的日期和时间值。下面的示例使用 Parse 方法分析字符串并将其转换为 DateTime 值。 分析日期和时间值的字符串表示形式。Parse、ParseExact、TryParse 和 TryParseExact 方法均可将字符串转换为其等效的日期和时间值。下面的示例使用 Parse 方法分析字符串并将其转换为 DateTime 值。

    Dim dateString As String = "5/1/2008 8:30:52 AM"
Dim date1 As Date = Date.Parse(dateString, CultureInfo.InvariantCulture)

    string dateString = "5/1/2008 8:30:52 AM";
DateTime date1 = DateTime.Parse(dateString, CultureInfo.InvariantCulture);

    请注意，TryParse 和 TryParseExact 方法除了执行转换以外，还指示特定字符串是否包含 DateTime 值的有效表示形式。

  • 调用 DateTime 结构的隐式默认构造函数。（有关值类型的隐式默认构造函数的详细信息，请参见Value Types (C# Reference)。）近似等效项（对于支持它的编译器）声明 DateTime 值，而不为其显式分配日期和时间。下面的示例以 C# 和 Visual Basic 演示对 DateTime 隐式默认构造函数的调用，并以 Visual Basic 演示不分配值的 DateTime 变量声明。 调用 DateTime 结构的隐式默认构造函数。（有关值类型的隐式默认构造函数的详细信息，请参见Value Types (C# Reference)。）近似等效项（对于支持它的编译器）声明 DateTime 值，而不为其显式分配日期和时间。下面的示例以 C# 和 Visual Basic 演示对 DateTime 隐式默认构造函数的调用，并以 Visual Basic 演示不分配值的 DateTime 变量声明。 调用 DateTime 结构的隐式默认构造函数。（有关值类型的隐式默认构造函数的详细信息，请参见Value Types (C# Reference)。）近似等效项（对于支持它的编译器）声明 DateTime 值，而不为其显式分配日期和时间。下面的示例以 C# 和 Visual Basic 演示对 DateTime 隐式默认构造函数的调用，并以 Visual Basic 演示不分配值的 DateTime 变量声明。

    Dim dat1 As DateTime
' The following method call displays 1/1/0001 12:00:00 AM.
Console.WriteLine(dat1.ToString(CultureInfo.InvariantCulture))
' The following method call displays True.
Console.WriteLine(dat1.Equals(Date.MinValue))

Dim dat2 As New DateTime()
' The following method call displays 1/1/0001 12:00:00 AM.
Console.WriteLine(dat2.ToString(CultureInfo.InvariantCulture))
' The following method call displays True.
Console.WriteLine(dat2.Equals(Date.MinValue))

    DateTime dat1 = new DateTime();
// The following method call displays 1/1/0001 12:00:00 AM.
Console.WriteLine(dat1.ToString(CultureInfo.InvariantCulture));
// The following method call displays True.
Console.WriteLine(dat1.Equals(DateTime.MinValue));

DateTime 值及其字符串表示形式

在内部，所有 DateTime 值都表示为从 0001 年 1 月 1 日午夜 12:00:00 以来所经历的计时周期数（100 纳秒间隔的个数）。实际的 DateTime 的值与在用户界面元素中显示或者写入文件时显示的方式无关。DateTime 值的外观是格式设置操作的结果。格式设置是将值转换为其字符串表示形式的过程。 在内部，所有 DateTime 值都表示为从 0001 年 1 月 1 日午夜 12:00:00 以来所经历的计时周期数（100 纳秒间隔的个数）。实际的 DateTime 的值与在用户界面元素中显示或者写入文件时显示的方式无关。DateTime 值的外观是格式设置操作的结果。格式设置是将值转换为其字符串表示形式的过程。 在内部，所有 DateTime 值都表示为从 0001 年 1 月 1 日午夜 12:00:00 以来所经历的计时周期数（100 纳秒间隔的个数）。实际的 DateTime 的值与在用户界面元素中显示或者写入文件时显示的方式无关。DateTime 值的外观是格式设置操作的结果。格式设置是将值转换为其字符串表示形式的过程。 在内部，所有 DateTime 值都表示为从 0001 年 1 月 1 日午夜 12:00:00 以来所经历的计时周期数（100 纳秒间隔的个数）。实际的 DateTime 的值与在用户界面元素中显示或者写入文件时显示的方式无关。DateTime 值的外观是格式设置操作的结果。格式设置是将值转换为其字符串表示形式的过程。

由于日期和时间值的外观取决于区域性、国际标准、应用程序要求及个人偏好等因素，因此 DateTime 结构通过其 ToString 方法的重载在日期和时间值的格式设置方面提供了高度的灵活性。默认的 DateTime..::.ToString()()() 方法使用当前区域性的短日期和长时间模式返回日期和时间值的字符串表示形式。下面的示例使用默认的 DateTime..::.ToString()()() 方法来显示使用 en-US 区域性（即运行此示例的计算机上的当前区域性）的短日期和长时间模式的日期和时间。 由于日期和时间值的外观取决于区域性、国际标准、应用程序要求及个人偏好等因素，因此 DateTime 结构通过其 ToString 方法的重载在日期和时间值的格式设置方面提供了高度的灵活性。默认的 DateTime..::.ToString()()() 方法使用当前区域性的短日期和长时间模式返回日期和时间值的字符串表示形式。下面的示例使用默认的 DateTime..::.ToString()()() 方法来显示使用 en-US 区域性（即运行此示例的计算机上的当前区域性）的短日期和长时间模式的日期和时间。 由于日期和时间值的外观取决于区域性、国际标准、应用程序要求及个人偏好等因素，因此 DateTime 结构通过其 ToString 方法的重载在日期和时间值的格式设置方面提供了高度的灵活性。默认的 DateTime..::.ToString()()() 方法使用当前区域性的短日期和长时间模式返回日期和时间值的字符串表示形式。下面的示例使用默认的 DateTime..::.ToString()()() 方法来显示使用 en-US 区域性（即运行此示例的计算机上的当前区域性）的短日期和长时间模式的日期和时间。

Dim date1 As Date = #3/1/2008 7:00AM#
Console.WriteLine(date1.ToString())
' For en-US culture, displays 3/1/2008 7:00:00 AM

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString());
// For en-US culture, displays 3/1/2008 7:00:00 AM

DateTime..::.ToString(IFormatProvider) 方法使用特定区域性的短日期和长时间模式返回日期和时间值的字符串表示形式。下面的示例使用 DateTime..::.ToString(IFormatProvider) 方法来显示使用 fr-FR 区域性的短日期和长时间模式的日期和时间。 DateTime..::.ToString(IFormatProvider) 方法使用特定区域性的短日期和长时间模式返回日期和时间值的字符串表示形式。下面的示例使用 DateTime..::.ToString(IFormatProvider) 方法来显示使用 fr-FR 区域性的短日期和长时间模式的日期和时间。

Dim date1 As Date = #3/1/2008 7:00AM#
Console.WriteLine(date1.ToString(CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 01/03/2008 07:00:00

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString(CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 01/03/2008 07:00:00

DateTime..::.ToString(String) 方法使用当前区域性的格式设置约定，以标准或自定义格式说明符所定义的格式返回日期和时间的字符串表示形式。下面的示例使用 DateTime..::.ToString(String) 方法来显示 en-US 区域性（即运行此示例的计算机上的当前区域性）的完整日期和时间模式。 DateTime..::.ToString(String) 方法使用当前区域性的格式设置约定，以标准或自定义格式说明符所定义的格式返回日期和时间的字符串表示形式。下面的示例使用 DateTime..::.ToString(String) 方法来显示 en-US 区域性（即运行此示例的计算机上的当前区域性）的完整日期和时间模式。

Dim date1 As Date = #3/1/2008 7:00AM#
Console.WriteLine(date1.ToString("F"))
' Displays Saturday, March 01, 2008 7:00:00 AM

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F"));
// Displays Saturday, March 01, 2008 7:00:00 AM

DateTime..::.ToString(String, IFormatProvider) 方法使用特定区域性的格式设置约定，以特定格式说明符所定义的格式返回日期和时间的字符串表示形式。下面的示例使用 DateTime..::.ToString(String, IFormatProvider) 方法显示使用 fr-FR 区域性的完整日期和时间模式。 DateTime..::.ToString(String, IFormatProvider) 方法使用特定区域性的格式设置约定，以特定格式说明符所定义的格式返回日期和时间的字符串表示形式。下面的示例使用 DateTime..::.ToString(String, IFormatProvider) 方法显示使用 fr-FR 区域性的完整日期和时间模式。

Dim date1 As Date = #3/1/2008 7:00AM#
Console.WriteLine(date1.ToString("F", New CultureInfo("fr-FR")))
' Displays samedi 1 mars 2008 07:00:00

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F", new CultureInfo("fr-FR")));
// Displays samedi 1 mars 2008 07:00:00

版本注意事项

在 .NET Framework 2.0 版以前，DateTime 结构包含一个 64 位字段，该字段由一个未使用的 2 位字段和一个私有字段 Ticks 串联组成，Ticks 字段是一个 62 位无符号字段，其中包含表示日期和时间的计时周期数。Ticks 字段的值可通过 Ticks 属性获取。 在 .NET Framework 2.0 版以前，DateTime 结构包含一个 64 位字段，该字段由一个未使用的 2 位字段和一个私有字段 Ticks 串联组成，Ticks 字段是一个 62 位无符号字段，其中包含表示日期和时间的计时周期数。Ticks 字段的值可通过 Ticks 属性获取。

从 .NET Framework 2.0 开始，DateTime 结构包含一个由私有字段 Kind 和 Ticks 字段串联组成的 64 位字段。Kind 字段是一个 2 位字段，它指示 DateTime 结构是表示本地时间、协调世界时 (UTC) 还是未指定时区中的时间。Kind 字段用于执行时区之间的时间转换，但不用于时间的比较或算术运算。Kind 字段的值可通过 Kind 属性获取。 从 .NET Framework 2.0 开始，DateTime 结构包含一个由私有字段 Kind 和 Ticks 字段串联组成的 64 位字段。Kind 字段是一个 2 位字段，它指示 DateTime 结构是表示本地时间、协调世界时 (UTC) 还是未指定时区中的时间。Kind 字段用于执行时区之间的时间转换，但不用于时间的比较或算术运算。Kind 字段的值可通过 Kind 属性获取。 从 .NET Framework 2.0 开始，DateTime 结构包含一个由私有字段 Kind 和 Ticks 字段串联组成的 64 位字段。Kind 字段是一个 2 位字段，它指示 DateTime 结构是表示本地时间、协调世界时 (UTC) 还是未指定时区中的时间。Kind 字段用于执行时区之间的时间转换，但不用于时间的比较或算术运算。Kind 字段的值可通过 Kind 属性获取。 从 .NET Framework 2.0 开始，DateTime 结构包含一个由私有字段 Kind 和 Ticks 字段串联组成的 64 位字段。Kind 字段是一个 2 位字段，它指示 DateTime 结构是表示本地时间、协调世界时 (UTC) 还是未指定时区中的时间。Kind 字段用于执行时区之间的时间转换，但不用于时间的比较或算术运算。Kind 字段的值可通过 Kind 属性获取。

说明 说明

在使用特定时区中的日期和时间值方面，DateTime 结构的一种替代结构是 DateTimeOffset。DateTimeOffset 结构将日期和时间信息存储在私有 DateTime 字段中，并将该日期和时间与 UTC 相差的分钟数存储在私有 Int16 字段中。这使得 DateTimeOffset 值可以反映特定时区中的时间，而 DateTime 值只能明确反映 UTC 时间和本地时区的时间。有关在使用日期和时间值期间何时使用 DateTime 结构或 DateTimeOffset 结构的论述，请参见在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择。 在使用特定时区中的日期和时间值方面，DateTime 结构的一种替代结构是 DateTimeOffset。DateTimeOffset 结构将日期和时间信息存储在私有 DateTime 字段中，并将该日期和时间与 UTC 相差的分钟数存储在私有 Int16 字段中。这使得 DateTimeOffset 值可以反映特定时区中的时间，而 DateTime 值只能明确反映 UTC 时间和本地时区的时间。有关在使用日期和时间值期间何时使用 DateTime 结构或 DateTimeOffset 结构的论述，请参见在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择。 在使用特定时区中的日期和时间值方面，DateTime 结构的一种替代结构是 DateTimeOffset。DateTimeOffset 结构将日期和时间信息存储在私有 DateTime 字段中，并将该日期和时间与 UTC 相差的分钟数存储在私有 Int16 字段中。这使得 DateTimeOffset 值可以反映特定时区中的时间，而 DateTime 值只能明确反映 UTC 时间和本地时区的时间。有关在使用日期和时间值期间何时使用 DateTime 结构或 DateTimeOffset 结构的论述，请参见在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择。 在使用特定时区中的日期和时间值方面，DateTime 结构的一种替代结构是 DateTimeOffset。DateTimeOffset 结构将日期和时间信息存储在私有 DateTime 字段中，并将该日期和时间与 UTC 相差的分钟数存储在私有 Int16 字段中。这使得 DateTimeOffset 值可以反映特定时区中的时间，而 DateTime 值只能明确反映 UTC 时间和本地时区的时间。有关在使用日期和时间值期间何时使用 DateTime 结构或 DateTimeOffset 结构的论述，请参见在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择。

DateTime 值

DateTime 类型的时间值描述通常使用协调世界时 (UTC) 标准来表达，它是格林尼治标准时间 (GMT) 的国际识别名。协调世界时是在经度零度（即 UTC 原点）测量到的时间。夏时制不适用于 UTC。 DateTime 类型的时间值描述通常使用协调世界时 (UTC) 标准来表达，它是格林尼治标准时间 (GMT) 的国际识别名。协调世界时是在经度零度（即 UTC 原点）测量到的时间。夏时制不适用于 UTC。 DateTime 类型的时间值描述通常使用协调世界时 (UTC) 标准来表达，它是格林尼治标准时间 (GMT) 的国际识别名。协调世界时是在经度零度（即 UTC 原点）测量到的时间。夏时制不适用于 UTC。

本地时间是相对于特定时区而言。时区与时区偏移量关联，它是时区从 UTC 原点算起的以小时为单位的偏移量。此外，本地时间有可能受夏时制影响，夏时制会对日长增加或减少一小时。因此，本地时间的计算是将时区偏移量加上 UTC，如有必要，再根据夏时制进行调整。UTC 原点的时区偏移量为零。 本地时间是相对于特定时区而言。时区与时区偏移量关联，它是时区从 UTC 原点算起的以小时为单位的偏移量。此外，本地时间有可能受夏时制影响，夏时制会对日长增加或减少一小时。因此，本地时间的计算是将时区偏移量加上 UTC，如有必要，再根据夏时制进行调整。UTC 原点的时区偏移量为零。 本地时间是相对于特定时区而言。时区与时区偏移量关联，它是时区从 UTC 原点算起的以小时为单位的偏移量。此外，本地时间有可能受夏时制影响，夏时制会对日长增加或减少一小时。因此，本地时间的计算是将时区偏移量加上 UTC，如有必要，再根据夏时制进行调整。UTC 原点的时区偏移量为零。 本地时间是相对于特定时区而言。时区与时区偏移量关联，它是时区从 UTC 原点算起的以小时为单位的偏移量。此外，本地时间有可能受夏时制影响，夏时制会对日长增加或减少一小时。因此，本地时间的计算是将时区偏移量加上 UTC，如有必要，再根据夏时制进行调整。UTC 原点的时区偏移量为零。 本地时间是相对于特定时区而言。时区与时区偏移量关联，它是时区从 UTC 原点算起的以小时为单位的偏移量。此外，本地时间有可能受夏时制影响，夏时制会对日长增加或减少一小时。因此，本地时间的计算是将时区偏移量加上 UTC，如有必要，再根据夏时制进行调整。UTC 原点的时区偏移量为零。

UTC 时间适合于计算、比较日期和时间，以及将日期和时间存储在文件中。本地时间适合于在桌面应用程序的用户界面中显示。识别时区的应用程序（如许多 Web 应用程序）还需要使用许多其他时区。 UTC 时间适合于计算、比较日期和时间，以及将日期和时间存储在文件中。本地时间适合于在桌面应用程序的用户界面中显示。识别时区的应用程序（如许多 Web 应用程序）还需要使用许多其他时区。 UTC 时间适合于计算、比较日期和时间，以及将日期和时间存储在文件中。本地时间适合于在桌面应用程序的用户界面中显示。识别时区的应用程序（如许多 Web 应用程序）还需要使用许多其他时区。

如果 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified，则其未指定表示的时间是本地时间、UTC 时间还是某个其他时区中的时间。

DateTime 运算

使用 DateTime 结构的计算（如 Add 或 Subtract）不会修改该结构的值。相反，计算会返回新的 DateTime 结构，其值为计算结果。 使用 DateTime 结构的计算（如 Add 或 Subtract）不会修改该结构的值。相反，计算会返回新的 DateTime 结构，其值为计算结果。

时区之间（例如，UTC 和本地时间之间，或者一个时区和另一个时区之间）的转换运算会考虑夏时制，但是算术和比较运算无需考虑。

DateTime 结构本身不太支持从一个时区转换至另一个时区。您可以使用 ToLocalTime 方法将 UTC 转换为本地时间，也可以使用 ToUniversalTime 方法从本地时间转换为 UTC。但是，整套的时区转换方法是在 TimeZoneInfo 类中提供的。使用这些方法，可以将世界上任一时区中的时间转换为任何其他时区中的时间。 DateTime 结构本身不太支持从一个时区转换至另一个时区。您可以使用 ToLocalTime 方法将 UTC 转换为本地时间，也可以使用 ToUniversalTime 方法从本地时间转换为 UTC。但是，整套的时区转换方法是在 TimeZoneInfo 类中提供的。使用这些方法，可以将世界上任一时区中的时间转换为任何其他时区中的时间。 DateTime 结构本身不太支持从一个时区转换至另一个时区。您可以使用 ToLocalTime 方法将 UTC 转换为本地时间，也可以使用 ToUniversalTime 方法从本地时间转换为 UTC。但是，整套的时区转换方法是在 TimeZoneInfo 类中提供的。使用这些方法，可以将世界上任一时区中的时间转换为任何其他时区中的时间。 DateTime 结构本身不太支持从一个时区转换至另一个时区。您可以使用 ToLocalTime 方法将 UTC 转换为本地时间，也可以使用 ToUniversalTime 方法从本地时间转换为 UTC。但是，整套的时区转换方法是在 TimeZoneInfo 类中提供的。使用这些方法，可以将世界上任一时区中的时间转换为任何其他时区中的时间。

DateTime 对象的计算和比较仅当这些对象表示同一时区中的时间时才有意义。可以使用 TimeZoneInfo 对象表示 DateTime 值的时区，尽管二者为松耦合。（也就是说，除 Kind 属性外，DateTime 对象没有这样的属性：该属性返回的对象表示日期和时间值的时区。）因此，在识别时区的应用程序中，必须依赖某些外部机制来确定创建 DateTime 对象时所在的时区。例如，可以使用结构来包装 DateTime 值以及表示 TimeZoneInfo 值的时区的 DateTime 对象。有关在 DateTime 值的计算和比较中使用 UTC 的详细信息，请参见使用日期和时间执行算术运算。 DateTime 对象的计算和比较仅当这些对象表示同一时区中的时间时才有意义。可以使用 TimeZoneInfo 对象表示 DateTime 值的时区，尽管二者为松耦合。（也就是说，除 Kind 属性外，DateTime 对象没有这样的属性：该属性返回的对象表示日期和时间值的时区。）因此，在识别时区的应用程序中，必须依赖某些外部机制来确定创建 DateTime 对象时所在的时区。例如，可以使用结构来包装 DateTime 值以及表示 TimeZoneInfo 值的时区的 DateTime 对象。有关在 DateTime 值的计算和比较中使用 UTC 的详细信息，请参见使用日期和时间执行算术运算。 DateTime 对象的计算和比较仅当这些对象表示同一时区中的时间时才有意义。可以使用 TimeZoneInfo 对象表示 DateTime 值的时区，尽管二者为松耦合。（也就是说，除 Kind 属性外，DateTime 对象没有这样的属性：该属性返回的对象表示日期和时间值的时区。）因此，在识别时区的应用程序中，必须依赖某些外部机制来确定创建 DateTime 对象时所在的时区。例如，可以使用结构来包装 DateTime 值以及表示 TimeZoneInfo 值的时区的 DateTime 对象。有关在 DateTime 值的计算和比较中使用 UTC 的详细信息，请参见使用日期和时间执行算术运算。 DateTime 对象的计算和比较仅当这些对象表示同一时区中的时间时才有意义。可以使用 TimeZoneInfo 对象表示 DateTime 值的时区，尽管二者为松耦合。（也就是说，除 Kind 属性外，DateTime 对象没有这样的属性：该属性返回的对象表示日期和时间值的时区。）因此，在识别时区的应用程序中，必须依赖某些外部机制来确定创建 DateTime 对象时所在的时区。例如，可以使用结构来包装 DateTime 值以及表示 TimeZoneInfo 值的时区的 DateTime 对象。有关在 DateTime 值的计算和比较中使用 UTC 的详细信息，请参见使用日期和时间执行算术运算。 DateTime 对象的计算和比较仅当这些对象表示同一时区中的时间时才有意义。可以使用 TimeZoneInfo 对象表示 DateTime 值的时区，尽管二者为松耦合。（也就是说，除 Kind 属性外，DateTime 对象没有这样的属性：该属性返回的对象表示日期和时间值的时区。）因此，在识别时区的应用程序中，必须依赖某些外部机制来确定创建 DateTime 对象时所在的时区。例如，可以使用结构来包装 DateTime 值以及表示 TimeZoneInfo 值的时区的 DateTime 对象。有关在 DateTime 值的计算和比较中使用 UTC 的详细信息，请参见使用日期和时间执行算术运算。

每个 DateTime 成员都隐式使用公历执行其操作，例外是指定日历的构造函数以及使用从 IFormatProvider 派生的参数（如 System.Globalization..::.DateTimeFormatInfo）的方法，该参数隐式指定日历。

DateTime 类型中的成员所执行的运算会考虑闰年和月中天数等细节。

DateTime 与TimeSpan

DateTime 值类型与 TimeSpan 值类型的差异在于 DateTime 表示时间上的一刻，而 TimeSpan 表示时间间隔。例如，这意味着将 DateTime 的一个实例与另一个实例相减可以获得表示这两个实例之间的时间间隔的 TimeSpan 对象。或者，将一个正 TimeSpan 与当前 DateTime 相加可以获得表示将来日期的 DateTime 值。 DateTime 值类型与 TimeSpan 值类型的差异在于 DateTime 表示时间上的一刻，而 TimeSpan 表示时间间隔。例如，这意味着将 DateTime 的一个实例与另一个实例相减可以获得表示这两个实例之间的时间间隔的 TimeSpan 对象。或者，将一个正 TimeSpan 与当前 DateTime 相加可以获得表示将来日期的 DateTime 值。 DateTime 值类型与 TimeSpan 值类型的差异在于 DateTime 表示时间上的一刻，而 TimeSpan 表示时间间隔。例如，这意味着将 DateTime 的一个实例与另一个实例相减可以获得表示这两个实例之间的时间间隔的 TimeSpan 对象。或者，将一个正 TimeSpan 与当前 DateTime 相加可以获得表示将来日期的 DateTime 值。

可以向 DateTime 对象增加或减少一个时间间隔。时间间隔可为负，也可为正，可以用计时周期或秒等为单位表示，也可表示为 TimeSpan 对象。 可以向 DateTime 对象增加或减少一个时间间隔。时间间隔可为负，也可为正，可以用计时周期或秒等为单位表示，也可表示为 TimeSpan 对象。

COM 互操作注意事项

一个 DateTime 值传输到 COM 应用程序，然后传回托管应用程序，这称为往返。但是，仅指定时间的 DateTime 值不会按预期的那样往返。 一个 DateTime 值传输到 COM 应用程序，然后传回托管应用程序，这称为往返。但是，仅指定时间的 DateTime 值不会按预期的那样往返。

如果您仅往返一个时间，如下午 3 点，则最终的日期和时间为公元 1899 年 12 月 30 日。下午 3:00，而不是公元 0001 年 1 月 1 日的下午 3:00。之所以发生此情况是因为当仅指定时间时，.NET Framework 和 COM 都采用默认日期。但是，COM 系统采用的基准日期为公元 1899 年 12 月 30。而 .NET Framework 假定基准日期为公历的公元 0001 年 1 月 1 日。 如果您仅往返一个时间，如下午 3 点，则最终的日期和时间为公元 1899 年 12 月 30 日。下午 3:00，而不是公元 0001 年 1 月 1 日的下午 3:00。之所以发生此情况是因为当仅指定时间时，.NET Framework 和 COM 都采用默认日期。但是，COM 系统采用的基准日期为公元 1899 年 12 月 30。而 .NET Framework 假定基准日期为公历的公元 0001 年 1 月 1 日。 如果您仅往返一个时间，如下午 3 点，则最终的日期和时间为公元 1899 年 12 月 30 日。下午 3:00，而不是公元 0001 年 1 月 1 日的下午 3:00。之所以发生此情况是因为当仅指定时间时，.NET Framework 和 COM 都采用默认日期。但是，COM 系统采用的基准日期为公元 1899 年 12 月 30。而 .NET Framework 假定基准日期为公历的公元 0001 年 1 月 1 日。 如果您仅往返一个时间，如下午 3 点，则最终的日期和时间为公元 1899 年 12 月 30 日。下午 3:00，而不是公元 0001 年 1 月 1 日的下午 3:00。之所以发生此情况是因为当仅指定时间时，.NET Framework 和 COM 都采用默认日期。但是，COM 系统采用的基准日期为公元 1899 年 12 月 30。而 .NET Framework 假定基准日期为公历的公元 0001 年 1 月 1 日。 如果您仅往返一个时间，如下午 3 点，则最终的日期和时间为公元 1899 年 12 月 30 日。下午 3:00，而不是公元 0001 年 1 月 1 日的下午 3:00。之所以发生此情况是因为当仅指定时间时，.NET Framework 和 COM 都采用默认日期。但是，COM 系统采用的基准日期为公元 1899 年 12 月 30。而 .NET Framework 假定基准日期为公历的公元 0001 年 1 月 1 日。 如果您仅往返一个时间，如下午 3 点，则最终的日期和时间为公元 1899 年 12 月 30 日。下午 3:00，而不是公元 0001 年 1 月 1 日的下午 3:00。之所以发生此情况是因为当仅指定时间时，.NET Framework 和 COM 都采用默认日期。但是，COM 系统采用的基准日期为公元 1899 年 12 月 30。而 .NET Framework 假定基准日期为公历的公元 0001 年 1 月 1 日。

当只有时间从 .NET Framework 传递到 COM 时，其间执行了特殊的处理，将时间转换为 COM 所使用的格式。如果只有时间从 COM 传递到 .NET Framework，则不执行特殊处理，因为这会破坏 1899 年 12 月 30 日当天或之前的合法日期和时间。这也意味着如果某个日期从 COM 开始其往返，.NET Framework 和 COM 将保留该日期。 当只有时间从 .NET Framework 传递到 COM 时，其间执行了特殊的处理，将时间转换为 COM 所使用的格式。如果只有时间从 COM 传递到 .NET Framework，则不执行特殊处理，因为这会破坏 1899 年 12 月 30 日当天或之前的合法日期和时间。这也意味着如果某个日期从 COM 开始其往返，.NET Framework 和 COM 将保留该日期。 当只有时间从 .NET Framework 传递到 COM 时，其间执行了特殊的处理，将时间转换为 COM 所使用的格式。如果只有时间从 COM 传递到 .NET Framework，则不执行特殊处理，因为这会破坏 1899 年 12 月 30 日当天或之前的合法日期和时间。这也意味着如果某个日期从 COM 开始其往返，.NET Framework 和 COM 将保留该日期。

.NET Framework 和 COM 的这一行为意味着如果您的应用程序往返的 DateTime 仅指定了时间，则您的应用程序必须记得修改或忽略来自最终的 DateTime 对象的错误日期。

下面的代码示例演示如何大致比较等效的 DateTime 值，将它们声明为“相等”时接受很小的差异。

Class DateTimeTester
   Shared Function RoughlyEquals(time As DateTime, timeWithWindow As DateTime, _
                                 windowInSeconds As Integer, _
                                 frequencyInSeconds As Integer) As Boolean
      Dim delta As Long = (timeWithWindow.Subtract(time)).TotalSeconds _
                                                Mod frequencyInSeconds

      If delta > windowInSeconds Then
         delta = frequencyInSeconds - delta
      End If

      Return Math.Abs(delta) < windowInSeconds
   End Function

   Public Shared Sub Main()
      Dim window As Integer = 10
      Dim freq As Integer = 60 * 60 * 2 ' 2 hours;
      Dim d1 As DateTime = DateTime.Now

      Dim d2 As DateTime = d1.AddSeconds((2 * window))
      Dim d3 As DateTime = d1.AddSeconds((- 2 * window))
      Dim d4 As DateTime = d1.AddSeconds((window / 2))
      Dim d5 As DateTime = d1.AddSeconds((- window / 2))

      Dim d6 As DateTime = d1.AddHours(2).AddSeconds((2 * window))
      Dim d7 As DateTime = d1.AddHours(2).AddSeconds((- 2 * window))
      Dim d8 As DateTime = d1.AddHours(2).AddSeconds((window / 2))
      Dim d9 As DateTime = d1.AddHours(2).AddSeconds((- window / 2))

      Console.WriteLine("d1 ({0}) ~= d1 ({1}): {2}", _
                        d1, d1, RoughlyEquals(d1, d1, window, freq))
      Console.WriteLine("d1 ({0}) ~= d2 ({1}): {2}", _
                        d1, d2, RoughlyEquals(d1, d2, window, freq))
      Console.WriteLine("d1 ({0}) ~= d3 ({1}): {2}", _
                        d1, d3, RoughlyEquals(d1, d3, window, freq))
      Console.WriteLine("d1 ({0}) ~= d4 ({1}): {2}", _
                        d1, d4, RoughlyEquals(d1, d4, window, freq))
      Console.WriteLine("d1 ({0}) ~= d5 ({1}): {2}", _
                        d1, d5, RoughlyEquals(d1, d5, window, freq))

      Console.WriteLine("d1 ({0}) ~= d6 ({1}): {2}", _
                        d1, d6, RoughlyEquals(d1, d6, window, freq))
      Console.WriteLine("d1 ({0}) ~= d7 ({1}): {2}", _
                        d1, d7, RoughlyEquals(d1, d7, window, freq))
      Console.WriteLine("d1 ({0}) ~= d8 ({1}): {2}", _
                        d1, d8, RoughlyEquals(d1, d8, window, freq))
      Console.WriteLine("d1 ({0}) ~= d9 ({1}): {2}", _
                        d1, d9, RoughlyEquals(d1, d9, window, freq))
   End Sub
End Class
' The example displays output similar to the following:
'    d1 (1/28/2010 9:01:26 PM) ~= d1 (1/28/2010 9:01:26 PM): True
'    d1 (1/28/2010 9:01:26 PM) ~= d2 (1/28/2010 9:01:46 PM): False
'    d1 (1/28/2010 9:01:26 PM) ~= d3 (1/28/2010 9:01:06 PM): False
'    d1 (1/28/2010 9:01:26 PM) ~= d4 (1/28/2010 9:01:31 PM): True
'    d1 (1/28/2010 9:01:26 PM) ~= d5 (1/28/2010 9:01:21 PM): True
'    d1 (1/28/2010 9:01:26 PM) ~= d6 (1/28/2010 11:01:46 PM): False
'    d1 (1/28/2010 9:01:26 PM) ~= d7 (1/28/2010 11:01:06 PM): False
'    d1 (1/28/2010 9:01:26 PM) ~= d8 (1/28/2010 11:01:31 PM): True
'    d1 (1/28/2010 9:01:26 PM) ~= d9 (1/28/2010 11:01:21 PM): True

using System;

class DateTimeTester
{
   static bool RoughlyEquals(DateTime time, DateTime timeWithWindow, int windowInSeconds, int frequencyInSeconds)
   {
      long delta = (long)((TimeSpan)(timeWithWindow - time)).TotalSeconds
                                                     % frequencyInSeconds;

      delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;

      return Math.Abs(delta) < windowInSeconds;
    }

    public static void Main()
    {
      int window = 10;
      int freq = 60 * 60 * 2; // 2 hours;

      DateTime d1 = DateTime.Now;

      DateTime d2 = d1.AddSeconds(2 * window);
      DateTime d3 = d1.AddSeconds(-2 * window);
      DateTime d4 = d1.AddSeconds(window / 2);
      DateTime d5 = d1.AddSeconds(-window / 2);

      DateTime d6 = (d1.AddHours(2)).AddSeconds(2 * window);
      DateTime d7 = (d1.AddHours(2)).AddSeconds(-2 * window);
      DateTime d8 = (d1.AddHours(2)).AddSeconds(window / 2);
      DateTime d9 = (d1.AddHours(2)).AddSeconds(-window / 2);

      Console.WriteLine("d1 ({0}) ~= d1 ({1}): {2}",
                        d1, d1, RoughlyEquals(d1, d1, window, freq));
      Console.WriteLine("d1 ({0}) ~= d2 ({1}): {2}",
                        d1, d2, RoughlyEquals(d1, d2, window, freq));
      Console.WriteLine("d1 ({0}) ~= d3 ({1}): {2}",
                        d1, d3, RoughlyEquals(d1, d3, window, freq));
      Console.WriteLine("d1 ({0}) ~= d4 ({1}): {2}",
                        d1, d4, RoughlyEquals(d1, d4, window, freq));
      Console.WriteLine("d1 ({0}) ~= d5 ({1}): {2}",
                        d1, d5, RoughlyEquals(d1, d5, window, freq));

      Console.WriteLine("d1 ({0}) ~= d6 ({1}): {2}",
                        d1, d6, RoughlyEquals(d1, d6, window, freq));
      Console.WriteLine("d1 ({0}) ~= d7 ({1}): {2}",
                        d1, d7, RoughlyEquals(d1, d7, window, freq));
      Console.WriteLine("d1 ({0}) ~= d8 ({1}): {2}",
                        d1, d8, RoughlyEquals(d1, d8, window, freq));
      Console.WriteLine("d1 ({0}) ~= d9 ({1}): {2}",
                        d1, d9, RoughlyEquals(d1, d9, window, freq));
    }
}
// The example displays output similar to the following:
//    d1 (1/28/2010 9:01:26 PM) ~= d1 (1/28/2010 9:01:26 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d2 (1/28/2010 9:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d3 (1/28/2010 9:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d4 (1/28/2010 9:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d5 (1/28/2010 9:01:21 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d6 (1/28/2010 11:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d7 (1/28/2010 11:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d8 (1/28/2010 11:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d9 (1/28/2010 11:01:21 PM): True

bool RoughlyEquals( DateTime time, DateTime timeWithWindow, int windowInSeconds, int frequencyInSeconds )
{
   long delta = (long)((TimeSpan)(timeWithWindow - time)).TotalSeconds % frequencyInSeconds;
   delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;
   return Math::Abs( delta ) < windowInSeconds;
}

int main()
{
   int window = 10;
   int freq = 60 * 60 * 2; // 2 hours;

   DateTime d1 = DateTime::Now;
   DateTime d2 = d1.AddSeconds( 2 * window );
   DateTime d3 = d1.AddSeconds(  -2 * window );
   DateTime d4 = d1.AddSeconds( window / 2 );
   DateTime d5 = d1.AddSeconds(  -window / 2 );
   DateTime d6 = (d1.AddHours( 2 )).AddSeconds( 2 * window );
   DateTime d7 = (d1.AddHours( 2 )).AddSeconds(  -2 * window );
   DateTime d8 = (d1.AddHours( 2 )).AddSeconds( window / 2 );
   DateTime d9 = (d1.AddHours( 2 )).AddSeconds(  -window / 2 );

   Console::WriteLine("d1 ({0}) ~= d1 ({1}): {2}",
                      d1, d1, RoughlyEquals(d1, d1, window, freq));
   Console::WriteLine("d1 ({0}) ~= d2 ({1}): {2}",
                      d1, d2, RoughlyEquals(d1, d2, window, freq));
   Console::WriteLine("d1 ({0}) ~= d3 ({1}): {2}",
                      d1, d3, RoughlyEquals(d1, d3, window, freq));
   Console::WriteLine("d1 ({0}) ~= d4 ({1}): {2}",
                      d1, d4, RoughlyEquals(d1, d4, window, freq));
   Console::WriteLine("d1 ({0}) ~= d5 ({1}): {2}",
                      d1, d5, RoughlyEquals(d1, d5, window, freq));

   Console::WriteLine("d1 ({0}) ~= d6 ({1}): {2}",
                      d1, d6, RoughlyEquals(d1, d6, window, freq));
   Console::WriteLine("d1 ({0}) ~= d7 ({1}): {2}",
                      d1, d7, RoughlyEquals(d1, d7, window, freq));
   Console::WriteLine("d1 ({0}) ~= d8 ({1}): {2}",
                      d1, d8, RoughlyEquals(d1, d8, window, freq));
   Console::WriteLine("d1 ({0}) ~= d9 ({1}): {2}",
                      d1, d9, RoughlyEquals(d1, d9, window, freq));
}
// The example displays output similar to the following:
//    d1 (1/28/2010 9:01:26 PM) ~= d1 (1/28/2010 9:01:26 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d2 (1/28/2010 9:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d3 (1/28/2010 9:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d4 (1/28/2010 9:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d5 (1/28/2010 9:01:21 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d6 (1/28/2010 11:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d7 (1/28/2010 11:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d8 (1/28/2010 11:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d9 (1/28/2010 11:01:21 PM): True

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

警告说明 警告

在所有的硬件平台上都分配该类型的一个实例不是线程安全的，因为该实例的二进制表示形式可能太大，无法在单个原子操作中分配。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 成员
System 命名空间
DateTimeOffset
TimeSpan
Calendar
GetUtcOffset
TimeZoneInfo

其他资源

在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择


DateTime 成员

DateTime 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

表示时间上的一刻，通常以日期和当天的时间表示。

DateTime 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DateTime 结构
System 命名空间


DateTime 构造函数

DateTime 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

初始化 DateTime 结构的新实例。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime 构造函数 (Int64)

DateTime 构造函数 (Int64)
DateTime 结构

将 DateTime 结构的新实例初始化为指定的计时周期数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    ticks As Long _
)
public DateTime(
    long ticks
)
public:
DateTime(
    long long ticks
)
new :
        ticks:int64 -> DateTime

参数

ticks
类型： System Int64
以 100 纳秒为单位表示的日期和时间。
异常 | 条件
ArgumentOutOfRangeException | ticks 小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。

将 Kind 属性初始化为 Unspecified。

如果应用程序看重日期和时间数据的可移植性或者其时区识别能力有限，则可以使用相应的 DateTimeOffset 构造函数。

下面的代码示例演示某个 DateTime 构造函数。

' This example demonstrates the DateTime(Int64) constructor.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      ' Instead of using the implicit, default "G" date and time format string, we
      ' use a custom format string that aligns the results and inserts leading zeroes.
      Dim format As String = "{0}) The {1} date and time is {2:MM/dd/yyyy hh:mm:ss tt}"

      ' Create a DateTime for the maximum date and time using ticks.
      Dim dt1 As New DateTime(DateTime.MaxValue.Ticks)

      ' Create a DateTime for the minimum date and time using ticks.
      Dim dt2 As New DateTime(DateTime.MinValue.Ticks)

      ' Create a custom DateTime for 7/28/1979 at 10:35:05 PM using a
      ' calendar based on the "en-US" culture, and ticks.
      Dim ticks As Long = New DateTime(1979, 7, 28, 22, 35, 5, _
                                       New CultureInfo("en-US", False).Calendar).Ticks
      Dim dt3 As New DateTime(ticks)

      Console.WriteLine(format, 1, "maximum", dt1)
      Console.WriteLine(format, 2, "minimum", dt2)
      Console.WriteLine(format, 3, "custom ", dt3)
      Console.WriteLine(vbCrLf & "The custom date and time is created from {0:N0} ticks.", ticks)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'1) The maximum date and time is 12/31/9999 11:59:59 PM
'2) The minimum date and time is 01/01/0001 12:00:00 AM
'3) The custom  date and time is 07/28/1979 10:35:05 PM
'
'The custom date and time is created from 624,376,461,050,000,000 ticks.
'

// This example demonstrates the DateTime(Int64) constructor.
using System;
using System.Globalization;

class Sample
{
    public static void Main()
    {
// Instead of using the implicit, default "G" date and time format string, we
// use a custom format string that aligns the results and inserts leading zeroes.
    string format = "{0}) The {1} date and time is {2:MM/dd/yyyy hh:mm:ss tt}";

// Create a DateTime for the maximum date and time using ticks.
    DateTime dt1 = new DateTime(DateTime.MaxValue.Ticks);

// Create a DateTime for the minimum date and time using ticks.
    DateTime dt2 = new DateTime(DateTime.MinValue.Ticks);

// Create a custom DateTime for 7/28/1979 at 10:35:05 PM using a
// calendar based on the "en-US" culture, and ticks.
    long ticks = new DateTime(1979, 07, 28, 22, 35, 5,
    new CultureInfo("en-US", false).Calendar).Ticks;
    DateTime dt3 = new DateTime(ticks);

    Console.WriteLine(format, 1, "maximum", dt1);
    Console.WriteLine(format, 2, "minimum", dt2);
    Console.WriteLine(format, 3, "custom ", dt3);
    Console.WriteLine("\nThe custom date and time is created from {0:N0} ticks.", ticks);
    }
}
/*
This example produces the following results:

1) The maximum date and time is 12/31/9999 11:59:59 PM
2) The minimum date and time is 01/01/0001 12:00:00 AM
3) The custom  date and time is 07/28/1979 10:35:05 PM

The custom date and time is created from 624,376,461,050,000,000 ticks.

*/

// This example demonstrates the DateTime(Int64) constructor.
using namespace System;
using namespace System::Globalization;
int main()
{

   // Instead of using the implicit, default "G" date and time format string, we
   // use a custom format string that aligns the results and inserts leading zeroes.
   String^ format = "{0}) The {1} date and time is {2:MM/dd/yyyy hh:mm:ss tt}";

   // Create a DateTime for the maximum date and time using ticks.
   DateTime dt1 = DateTime(DateTime::MaxValue.Ticks);

   // Create a DateTime for the minimum date and time using ticks.
   DateTime dt2 = DateTime(DateTime::MinValue.Ticks);

   // Create a custom DateTime for 7/28/1979 at 10:35:05 PM using a
   // calendar based on the "en-US" culture, and ticks.
   Int64 ticks = DateTime(1979,07,28,22,35,5,(gcnew CultureInfo( "en-US",false ))->Calendar).Ticks;
   DateTime dt3 = DateTime(ticks);
   Console::WriteLine( format, 1, "maximum", dt1 );
   Console::WriteLine( format, 2, "minimum", dt2 );
   Console::WriteLine( format, 3, "custom ", dt3 );
   Console::WriteLine( "\nThe custom date and time is created from {0:N0} ticks.", ticks );
}

/*
This example produces the following results:

1) The maximum date and time is 12/31/9999 11:59:59 PM
2) The minimum date and time is 01/01/0001 12:00:00 AM
3) The custom  date and time is 07/28/1979 10:35:05 PM

The custom date and time is created from 624,376,461,050,000,000 ticks.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间


DateTime 构造函数 (Int64, DateTimeKind)

DateTime 构造函数 (Int64, DateTimeKind)
DateTime 结构

将 DateTime 结构的新实例初始化为指定的计时周期数以及协调世界时 (UTC) 或本地时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    ticks As Long, _
    kind As DateTimeKind _
)
public DateTime(
    long ticks,
    DateTimeKind kind
)
public:
DateTime(
    long long ticks,
    DateTimeKind kind
)
new :
        ticks:int64 *
        kind:DateTimeKind -> DateTime

参数

ticks
类型： System Int64
以 100 纳秒为单位表示的日期和时间。
kind
类型： System DateTimeKind
枚举值之一，该值指示 ticks 是指定了本地时间、协调世界时 (UTC)，还是两者皆未指定。
异常 | 条件
ArgumentOutOfRangeException | ticks 小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。
ArgumentException | kind 不是 DateTimeKind 值之一。

如果应用程序看重日期和时间数据的可移植性或者其时区识别能力有限，则可以使用相应的 DateTimeOffset 构造函数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间


DateTime 构造函数 (Int32, Int32, Int32)

DateTime 构造函数 (Int32, Int32, Int32)
DateTime 结构

将 DateTime 结构的新实例初始化为指定的年、月和日。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer _
)
public DateTime(
    int year,
    int month,
    int day
)
public:
DateTime(
    int year,
    int month,
    int day
)
new :
        year:int *
        month:int *
        day:int -> DateTime

参数

year
类型： System Int32
年（1 到 9999）。
month
类型： System Int32
月（1 到 12）。
day
类型： System Int32
日（1 到 month 中的天数）。
异常 | 条件
ArgumentOutOfRangeException | year 小于 1 或大于 9999。 - 或 - month 小于 1 或大于 12。 - 或 - day 小于 1 或大于 month 中的天数。
ArgumentException | 指定的参数计算为小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。

此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Calendar) 构造函数。 此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Calendar) 构造函数。

所得 DateTime 的具体时间是午夜 (00:00:00)。将 Kind 属性初始化为 DateTimeKind..::.Unspecified。 所得 DateTime 的具体时间是午夜 (00:00:00)。将 Kind 属性初始化为 DateTimeKind..::.Unspecified。

下面的示例使用 DateTime(Int32, Int32, Int32) 构造函数实例化 DateTime 值。本示例还将说明此重载将创建一个 DateTime 值，该值的时间组成部分等于午夜（或 0:00）。 下面的示例使用 DateTime(Int32, Int32, Int32) 构造函数实例化 DateTime 值。本示例还将说明此重载将创建一个 DateTime 值，该值的时间组成部分等于午夜（或 0:00）。

Dim date1 As New Date(2010, 8, 18)
Console.WriteLine(date1.ToString())
' The example displays the following output:
'      8/18/2010 12:00:00 AM

DateTime date1 = new DateTime(2010, 8, 18);
Console.WriteLine(date1.ToString());
// The example displays the following output:
//      8/18/2010 12:00:00 AM

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间


DateTime 构造函数 (Int32, Int32, Int32, Calendar)

DateTime 构造函数 (Int32, Int32, Int32, Calendar)
DateTime 结构

将 DateTime 结构的新实例初始化为指定日历的指定年、月和日。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    calendar As Calendar _
)
public DateTime(
    int year,
    int month,
    int day,
    Calendar calendar
)
public:
DateTime(
    int year,
    int month,
    int day,
    Calendar^ calendar
)
new :
        year:int *
        month:int *
        day:int *
        calendar:Calendar -> DateTime

参数

year
类型： System Int32
年（1 到 calendar 中的年数）。
month
类型： System Int32
月（1 到 calendar 中的月数）。
day
类型： System Int32
日（1 到 month 中的天数）。
calendar
类型： System.Globalization Calendar
用于解释 year、month 和 day 的日历。
异常 | 条件
ArgumentNullException | calendar 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | year 不在 calendar 所支持的范围内。 - 或 - month 小于 1 或大于 calendar 中的月数。 - 或 - day 小于 1 或大于 month 中的天数。
ArgumentException | 指定的参数计算为小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。

所得 DateTime 的具体时间是午夜 (00:00:00)。将 Kind 属性初始化为 Unspecified。 所得 DateTime 的具体时间是午夜 (00:00:00)。将 Kind 属性初始化为 Unspecified。

year、month 和 day 的允许值取决于 calendar。如果指定的日期和时间不能用 calendar 来表达，将引发异常。 year、month 和 day 的允许值取决于 calendar。如果指定的日期和时间不能用 calendar 来表达，将引发异常。

System.Globalization 命名空间提供几种日历，其中包括 GregorianCalendar 和 JulianCalendar。

下面的示例调用 DateTime(Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。

Imports System.Globalization
Imports System.Text.RegularExpressions
Imports System.Threading

Module Example
   Public Sub Main()
      Console.WriteLine("Using the Persian Calendar:")
      Dim persian As New PersianCalendar()
      Dim date1 As New Date(1389, 5, 27, persian)
      Console.WriteLine(date1.ToString())
      Console.WriteLine("{0}/{1}/{2}", persian.GetMonth(date1), _
                                       persian.GetDayOfMonth(date1), _
                                       persian.GetYear(date1))
      Console.WriteLine()

      Console.WriteLine("Using the Hijri Calendar:")
      ' Get current culture so it can later be restored.
      Dim dftCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

      ' Define Hijri calendar.
      Dim hijri As New HijriCalendar()
      ' Make ar-SY the current culture and Hijri the current calendar.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("ar-SY")
      Dim current As CultureInfo = CultureInfo.CurrentCulture
      current.DateTimeFormat.Calendar = hijri
      Dim dFormat As String = current.DateTimeFormat.ShortDatePattern
      ' Ensure year is displayed as four digits.
      dFormat = Regex.Replace(dFormat, "/yy$", "/yyyy")
      current.DateTimeFormat.ShortDatePattern = dFormat
      Dim date2 As New Date(1431, 9, 9, hijri)
      Console.WriteLine("{0} culture using the {1} calendar: {2:d}", current, _
                        GetCalendarName(hijri), date2)

      ' Restore previous culture.
      Thread.CurrentThread.CurrentCulture = dftCulture
      Console.WriteLine("{0} culture using the {1} calendar: {2:d}", _
                        CultureInfo.CurrentCulture, _
                        GetCalendarName(CultureInfo.CurrentCulture.Calendar), _
                        date2)
   End Sub

   Private Function GetCalendarName(cal As Calendar) As String
      Return Regex.Match(cal.ToString(), "\.(\w+)Calendar").Groups(1).Value
   End Function
End Module
' The example displays the following output:
'       Using the Persian Calendar:
'       8/18/2010 12:00:00 AM
'       5/27/1389
'
'       Using the Hijri Calendar:
'       ar-SY culture using the Hijri calendar: 09/09/1431
'       en-US culture using the Gregorian calendar: 8/18/2010

using System;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Using the Persian Calendar:");
      PersianCalendar persian = new PersianCalendar();
      DateTime date1 = new DateTime(1389, 5, 27, persian);
      Console.WriteLine(date1.ToString());
      Console.WriteLine("{0}/{1}/{2}\n", persian.GetMonth(date1),
                                       persian.GetDayOfMonth(date1),
                                       persian.GetYear(date1));

      Console.WriteLine("Using the Hijri Calendar:");
      // Get current culture so it can later be restored.
      CultureInfo dftCulture = Thread.CurrentThread.CurrentCulture;

      // Define Hijri calendar.
      HijriCalendar hijri = new HijriCalendar();
      // Make ar-SY the current culture and Hijri the current calendar.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SY");
      CultureInfo current = CultureInfo.CurrentCulture;
      current.DateTimeFormat.Calendar = hijri;
      string dFormat = current.DateTimeFormat.ShortDatePattern;
      // Ensure year is displayed as four digits.
      dFormat = Regex.Replace(dFormat, "/yy$", "/yyyy");
      current.DateTimeFormat.ShortDatePattern = dFormat;
      DateTime date2 = new DateTime(1431, 9, 9, hijri);
      Console.WriteLine("{0} culture using the {1} calendar: {2:d}", current,
                        GetCalendarName(hijri), date2);

      // Restore previous culture.
      Thread.CurrentThread.CurrentCulture = dftCulture;
      Console.WriteLine("{0} culture using the {1} calendar: {2:d}",
                        CultureInfo.CurrentCulture,
                        GetCalendarName(CultureInfo.CurrentCulture.Calendar),
                        date2);
   }

   private static string GetCalendarName(Calendar cal)
   {
      return Regex.Match(cal.ToString(), "\\.(\\w+)Calendar").Groups[1].Value;
   }
}
// The example displays the following output:
//       Using the Persian Calendar:
//       8/18/2010 12:00:00 AM
//       5/27/1389
//
//       Using the Hijri Calendar:
//       ar-SY culture using the Hijri calendar: 09/09/1431
//       en-US culture using the Gregorian calendar: 8/18/2010

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间
Int32
Calendar


DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32)

DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32)
DateTime 结构

将 DateTime 结构的新实例初始化为指定的年、月、日、小时、分钟和秒。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer _
)
public DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second
)
public:
DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int -> DateTime

参数

year
类型： System Int32
年（1 到 9999）。
month
类型： System Int32
月（1 到 12）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
异常 | 条件
ArgumentOutOfRangeException | year 小于 1 或大于 9999。 - 或 - month 小于 1 或大于 12。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于 0 或大于 23。 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。
ArgumentException | 指定的参数计算为小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。

将 Kind 属性初始化为 Unspecified。

此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数。 此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数。

如果应用程序看重日期和时间数据的可移植性或者其时区识别能力有限，则可以使用相应的 DateTimeOffset 构造函数。

下面的示例使用 DateTime 构造函数实例化 DateTime 值。

Dim date1 As New Date(2010, 8, 18, 16, 32, 0)
Console.WriteLine(date1.ToString())
' The example displays the following output:
'      8/18/2010 4:32:00 PM

DateTime date1 = new DateTime(2010, 8, 18, 16, 32, 0);
Console.WriteLine(date1.ToString());
// The example displays the following output:
//      8/18/2010 4:32:00 PM

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间


DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)
DateTime 结构

将 DateTime 结构的新实例初始化为指定年、月、日、小时、分钟、秒和协调世界时 (UTC) 或本地时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer, _
    kind As DateTimeKind _
)
public DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    DateTimeKind kind
)
public:
DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    DateTimeKind kind
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int *
        kind:DateTimeKind -> DateTime

参数

year
类型： System Int32
年（1 到 9999）。
month
类型： System Int32
月（1 到 12）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
kind
类型： System DateTimeKind
枚举值之一，该值指示 year、month、day、hour、minute 和 second 是指定了本地时间、协调世界时 (UTC)，还是两者皆未指定。
异常 | 条件
ArgumentOutOfRangeException | year 小于 1 或大于 9999。 - 或 - month 小于 1 或大于 12。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于 0 或大于 23。 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。
ArgumentException | 指定的时间参数的取值小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。 - 或 - kind 不是 DateTimeKind 值之一。

此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数。 此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数。

如果应用程序看重日期和时间数据的可移植性或者其时区识别能力有限，则可以使用相应的 DateTimeOffset 构造函数。

下面的示例使用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind) 构造函数实例化 DateTime 值。

Dim date1 As New Date(2010, 8, 18, 16, 32, 0, DateTimeKind.Local)
Console.WriteLine("{0} {1}", date1, date1.Kind)
' The example displays the following output:
'      8/18/2010 4:32:00 PM Local

DateTime date1 = new DateTime(2010, 8, 18, 16, 32, 0, DateTimeKind.Local);
Console.WriteLine("{0} {1}", date1, date1.Kind);
// The example displays the following output:
//      8/18/2010 4:32:00 PM Local

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间


DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Calendar)
DateTime 结构

将 DateTime 结构的新实例初始化为指定日历的指定年、月、日、小时、分钟和秒。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer, _
    calendar As Calendar _
)
public DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    Calendar calendar
)
public:
DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    Calendar^ calendar
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int *
        calendar:Calendar -> DateTime

参数

year
类型： System Int32
年（1 到 calendar 中的年数）。
month
类型： System Int32
月（1 到 calendar 中的月数）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
calendar
类型： System.Globalization Calendar
用于解释 year、month 和 day 的日历。
异常 | 条件
ArgumentNullException | calendar 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | year 不在 calendar 所支持的范围内。 - 或 - month 小于 1 或大于 calendar 中的月数。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于 0 或大于 23 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。
ArgumentException | 指定的参数计算为小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。

将 Kind 属性初始化为 Unspecified。

year、month 和 day 的允许值取决于 calendar。如果指定的日期和时间不能用 calendar 来表达，将引发异常。 year、month 和 day 的允许值取决于 calendar。如果指定的日期和时间不能用 calendar 来表达，将引发异常。

System.Globalization 命名空间提供几种日历，其中包括 GregorianCalendar 和 JulianCalendar。

下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。

Imports System.Globalization
Imports System.Text.RegularExpressions
Imports System.Threading

Module Example
   Public Sub Main()
      Console.WriteLine("Using the Persian Calendar:")
      Dim persian As New PersianCalendar()
      Dim date1 As New Date(1389, 5, 27, 16, 32, 0, persian)
      Console.WriteLine(date1.ToString())
      Console.WriteLine("{0}/{1}/{2} {3}{6}{4:D2}{6}{5:D2}", persian.GetMonth(date1), _
                                       persian.GetDayOfMonth(date1), _
                                       persian.GetYear(date1), _
                                       persian.GetHour(date1), _
                                       persian.GetMinute(date1), _
                                       persian.GetSecond(date1), _
                                       DateTimeFormatInfo.CurrentInfo.TimeSeparator)
      Console.WriteLine()

      Console.WriteLine("Using the Hijri Calendar:")
      ' Get current culture so it can later be restored.
      Dim dftCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

      ' Define Hijri calendar.
      Dim hijri As New HijriCalendar()
      ' Make ar-SY the current culture and Hijri the current calendar.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("ar-SY")
      Dim current As CultureInfo = CultureInfo.CurrentCulture
      current.DateTimeFormat.Calendar = hijri
      Dim dFormat As String = current.DateTimeFormat.ShortDatePattern
      ' Ensure year is displayed as four digits.
      dFormat = Regex.Replace(dFormat, "/yy$", "/yyyy")
      current.DateTimeFormat.ShortDatePattern = dFormat
      Dim date2 As New Date(1431, 9, 9, 16, 32, 0, hijri)
      Console.WriteLine("{0} culture using the {1} calendar: {2:g}", current, _
                        GetCalendarName(hijri), date2)

      ' Restore previous culture.
      Thread.CurrentThread.CurrentCulture = dftCulture
      Console.WriteLine("{0} culture using the {1} calendar: {2:g}", _
                        CultureInfo.CurrentCulture, _
                        GetCalendarName(CultureInfo.CurrentCulture.Calendar), _
                        date2)
   End Sub

   Private Function GetCalendarName(cal As Calendar) As String
      Return Regex.Match(cal.ToString(), "\.(\w+)Calendar").Groups(1).Value
   End Function
End Module
' The example displays the following output:
'       Using the Persian Calendar:
'       8/18/2010 4:32:00 PM
'       5/27/1389 16:32:00
'
'       Using the Hijri Calendar:
'       ar-SY culture using the Hijri calendar: 09/09/1431 04:32
'       en-US culture using the Gregorian calendar: 8/18/2010 4:32 PM

using System;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Using the Persian Calendar:");
      PersianCalendar persian = new PersianCalendar();
      DateTime date1 = new DateTime(1389, 5, 27, 16, 32, 0, persian);
      Console.WriteLine(date1.ToString());
      Console.WriteLine("{0}/{1}/{2} {3}{6}{4:D2}{6}{5:D2}\n",
                                       persian.GetMonth(date1),
                                       persian.GetDayOfMonth(date1),
                                       persian.GetYear(date1),
                                       persian.GetHour(date1),
                                       persian.GetMinute(date1),
                                       persian.GetSecond(date1),
                                       DateTimeFormatInfo.CurrentInfo.TimeSeparator);

      Console.WriteLine("Using the Hijri Calendar:");
      // Get current culture so it can later be restored.
      CultureInfo dftCulture = Thread.CurrentThread.CurrentCulture;

      // Define Hijri calendar.
      HijriCalendar hijri = new HijriCalendar();
      // Make ar-SY the current culture and Hijri the current calendar.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SY");
      CultureInfo current = CultureInfo.CurrentCulture;
      current.DateTimeFormat.Calendar = hijri;
      string dFormat = current.DateTimeFormat.ShortDatePattern;
      // Ensure year is displayed as four digits.
      dFormat = Regex.Replace(dFormat, "/yy$", "/yyyy");
      current.DateTimeFormat.ShortDatePattern = dFormat;
      DateTime date2 = new DateTime(1431, 9, 9, 16, 32, 18, hijri);
      Console.WriteLine("{0} culture using the {1} calendar: {2:g}", current,
                        GetCalendarName(hijri), date2);

      // Restore previous culture.
      Thread.CurrentThread.CurrentCulture = dftCulture;
      Console.WriteLine("{0} culture using the {1} calendar: {2:g}",
                        CultureInfo.CurrentCulture,
                        GetCalendarName(CultureInfo.CurrentCulture.Calendar),
                        date2);
   }

   private static string GetCalendarName(Calendar cal)
   {
      return Regex.Match(cal.ToString(), "\\.(\\w+)Calendar").Groups[1].Value;
   }
}
// The example displays the following output:
//       Using the Persian Calendar:
//       8/18/2010 4:32:00 PM
//       5/27/1389 16:32:00
//
//       Using the Hijri Calendar:
//       ar-SY culture using the Hijri calendar: 09/09/1431 04:32
//       en-US culture using the Gregorian calendar: 8/18/2010 4:32 PM

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间
Int32
Calendar


DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32)

DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32)
DateTime 结构

将 DateTime 结构的新实例初始化为指定的年、月、日、小时、分钟、秒和毫秒。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer, _
    millisecond As Integer _
)
public DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond
)
public:
DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int *
        millisecond:int -> DateTime

参数

year
类型： System Int32
年（1 到 9999）。
month
类型： System Int32
月（1 到 12）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
millisecond
类型： System Int32
毫秒（0 到 999）。
异常 | 条件
ArgumentOutOfRangeException | year 小于 1 或大于 9999。 - 或 - month 小于 1 或大于 12。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于 0 或大于 23。 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。 - 或 - millisecond 小于 0 或大于 999。
ArgumentException | 指定的参数计算为小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。

此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数。 此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数。

将 Kind 属性初始化为 Unspecified。

如果应用程序看重日期和时间数据的可移植性或者其时区识别能力有限，则可以使用相应的 DateTimeOffset 构造函数。

下面的示例使用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32) 构造函数实例化 DateTime 值。

Dim date1 As New Date(2010, 8, 18, 16, 32, 18, 500)
Console.WriteLine(date1.ToString("M/dd/yyyy h:mm:ss.fff tt"))
' The example displays the following output:
'      8/18/2010 4:32:18.500 PM

DateTime date1 = new DateTime(2010, 8, 18, 16, 32, 18, 500);
Console.WriteLine(date1.ToString("M/dd/yyyy h:mm:ss.fff tt"));
// The example displays the following output:
//      8/18/2010 4:32:18.500 PM

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间
Int32


DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)
DateTime 结构

将 DateTime 结构的新实例初始化为指定年、月、日、小时、分钟、秒、毫秒和协调世界时 (UTC) 或本地时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer, _
    millisecond As Integer, _
    kind As DateTimeKind _
)
public DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    DateTimeKind kind
)
public:
DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    DateTimeKind kind
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int *
        millisecond:int *
        kind:DateTimeKind -> DateTime

参数

year
类型： System Int32
年（1 到 9999）。
month
类型： System Int32
月（1 到 12）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
millisecond
类型： System Int32
毫秒（0 到 999）。
kind
类型： System DateTimeKind
枚举值之一，该值指示 year、month、day、hour、minute、second 和 millisecond 是指定了本地时间、协调世界时 (UTC)，还是两者皆未指定。
异常 | 条件
ArgumentOutOfRangeException | year 小于 1 或大于 9999。 - 或 - month 小于 1 或大于 12。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于 0 或大于 23。 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。 - 或 - millisecond 小于 0 或大于 999。
ArgumentException | 指定的时间参数的取值小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。 - 或 - kind 不是 DateTimeKind 值之一。

此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数。 此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTime 值，请调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数。

如果应用程序看重日期和时间数据的可移植性或者其时区识别能力有限，则可以使用相应的 DateTimeOffset 构造函数。

下面的示例使用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind) 构造函数实例化 DateTime 值。

Dim date1 As New Date(2010, 8, 18, 16, 32, 18, 500, DateTimeKind.Local)
Console.WriteLine("{0:M/dd/yyyy h:mm:ss.fff tt} {1}", date1, date1.Kind)
' The example displays the following output:
'      8/18/2010 4:32:18.500 PM Local

DateTime date1 = new DateTime(2010, 8, 18, 16, 32, 18, 500,
                              DateTimeKind.Local);
Console.WriteLine("{0:M/dd/yyyy h:mm:ss.fff tt} {1}", date1, date1.Kind);
// The example displays the following output:
//      8/18/2010 4:32:18.500 PM Local

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间


DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar)
DateTime 结构

将 DateTime 结构的新实例初始化为指定日历的指定年、月、日、小时、分钟、秒和毫秒。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer, _
    millisecond As Integer, _
    calendar As Calendar _
)
public DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    Calendar calendar
)
public:
DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    Calendar^ calendar
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int *
        millisecond:int *
        calendar:Calendar -> DateTime

参数

year
类型： System Int32
年（1 到 calendar 中的年数）。
month
类型： System Int32
月（1 到 calendar 中的月数）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
millisecond
类型： System Int32
毫秒（0 到 999）。
calendar
类型： System.Globalization Calendar
用于解释 year、month 和 day 的日历。
异常 | 条件
ArgumentNullException | calendar 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | year 不在 calendar 所支持的范围内。 - 或 - month 小于 1 或大于 calendar 中的月数。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于 0 或大于 23。 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。 - 或 - millisecond 小于 0 或大于 999。
ArgumentException | 指定的参数计算为小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。

将 Kind 属性初始化为 Unspecified。

year、month 和 day 的允许值取决于 calendar。如果指定的日期和时间不能用 calendar 来表达，将引发异常。 year、month 和 day 的允许值取决于 calendar。如果指定的日期和时间不能用 calendar 来表达，将引发异常。

如果应用程序看重日期和时间数据的可移植性或者其时区识别能力有限，则可以使用相应的 DateTimeOffset 构造函数。

System.Globalization 命名空间提供几种日历，其中包括 GregorianCalendar 和 JulianCalendar。

下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。

Imports System.Globalization
Imports System.Text.RegularExpressions
Imports System.Threading

Module Example
   Public Sub Main()
      Console.WriteLine("Using the Persian Calendar:")
      Dim persian As New PersianCalendar()
      Dim date1 As New Date(1389, 5, 27, 16, 32, 18, 500, persian)
      Console.WriteLine(date1.ToString("M/dd/yyyy h:mm:ss.fff tt"))
      Console.WriteLine("{0}/{1}/{2} {3}{7}{4:D2}{7}{5:D2}.{6:G3}", _
                                       persian.GetMonth(date1), _
                                       persian.GetDayOfMonth(date1), _
                                       persian.GetYear(date1), _
                                       persian.GetHour(date1), _
                                       persian.GetMinute(date1), _
                                       persian.GetSecond(date1), _
                                       persian.GetMilliseconds(date1), _
                                       DateTimeFormatInfo.CurrentInfo.TimeSeparator)
      Console.WriteLine()

      Console.WriteLine("Using the Hijri Calendar:")
      ' Get current culture so it can later be restored.
      Dim dftCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

      ' Define strings for use in composite formatting.
      Dim dFormat As String
      Dim fmtString As String
      ' Define Hijri calendar.
      Dim hijri As New HijriCalendar()
      ' Make ar-SY the current culture and Hijri the current calendar.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("ar-SY")
      Dim current As CultureInfo = CultureInfo.CurrentCulture
      current.DateTimeFormat.Calendar = hijri
      dFormat = current.DateTimeFormat.ShortDatePattern
      ' Ensure year is displayed as four digits.
      dFormat = Regex.Replace(dFormat, "/yy$", "/yyyy") + " H:mm:ss.fff"
      fmtString = "{0} culture using the {1} calendar: {2:" + dFormat + "}"
      Dim date2 As New Date(1431, 9, 9, 16, 32, 18, 500, hijri)
      Console.WriteLine(fmtString, current, GetCalendarName(hijri), date2)

      ' Restore previous culture.
      Thread.CurrentThread.CurrentCulture = dftCulture
      dFormat = DateTimeFormatInfo.CurrentInfo.ShortDatePattern +" H:mm:ss.fff"
      fmtString = "{0} culture using the {1} calendar: {2:" + dFormat + "}"
      Console.WriteLine(fmtString, CultureInfo.CurrentCulture, _
                        GetCalendarName(CultureInfo.CurrentCulture.Calendar), _
                        date2)
   End Sub

   Private Function GetCalendarName(cal As Calendar) As String
      Return Regex.Match(cal.ToString(), "\.(\w+)Calendar").Groups(1).Value
   End Function
End Module
' The example displays the following output:
'       Using the Persian Calendar:
'       8/18/2010 4:32:18.500 PM
'       5/27/1389 16:32:18.500
'
'       Using the Hijri Calendar:
'       ar-SY culture using the Hijri calendar: 09/09/1431 16:32:18.500
'       en-US culture using the Gregorian calendar: 8/18/2010 16:32:18.500

using System;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Using the Persian Calendar:");
      PersianCalendar persian = new PersianCalendar();
      DateTime date1 = new DateTime(1389, 5, 27, 16, 32, 18, 500, persian);
      Console.WriteLine(date1.ToString("M/dd/yyyy h:mm:ss.fff tt"));
      Console.WriteLine("{0}/{1}/{2} {3}{7}{4:D2}{7}{5:D2}.{6:G3}\n",
                                       persian.GetMonth(date1),
                                       persian.GetDayOfMonth(date1),
                                       persian.GetYear(date1),
                                       persian.GetHour(date1),
                                       persian.GetMinute(date1),
                                       persian.GetSecond(date1),
                                       persian.GetMilliseconds(date1),
                                       DateTimeFormatInfo.CurrentInfo.TimeSeparator);

      Console.WriteLine("Using the Hijri Calendar:");
      // Get current culture so it can later be restored.
      CultureInfo dftCulture = Thread.CurrentThread.CurrentCulture;

      // Define strings for use in composite formatting.
      string dFormat;
      string fmtString;
      // Define Hijri calendar.
      HijriCalendar hijri = new HijriCalendar();
      // Make ar-SY the current culture and Hijri the current calendar.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SY");
      CultureInfo current = CultureInfo.CurrentCulture;
      current.DateTimeFormat.Calendar = hijri;
      dFormat = current.DateTimeFormat.ShortDatePattern;
      // Ensure year is displayed as four digits.
      dFormat = Regex.Replace(dFormat, "/yy$", "/yyyy") + " H:mm:ss.fff";
      fmtString = "{0} culture using the {1} calendar: {2:" + dFormat + "}";
      DateTime date2 = new DateTime(1431, 9, 9, 16, 32, 18, 500, hijri);
      Console.WriteLine(fmtString, current, GetCalendarName(hijri), date2);

      // Restore previous culture.
      Thread.CurrentThread.CurrentCulture = dftCulture;
      dFormat = DateTimeFormatInfo.CurrentInfo.ShortDatePattern +" H:mm:ss.fff";
      fmtString = "{0} culture using the {1} calendar: {2:" + dFormat + "}";
      Console.WriteLine(fmtString,
                        CultureInfo.CurrentCulture,
                        GetCalendarName(CultureInfo.CurrentCulture.Calendar),
                        date2);
   }

   private static string GetCalendarName(Calendar cal)
   {
      return Regex.Match(cal.ToString(), "\\.(\\w+)Calendar").Groups[1].Value;
   }
}
// The example displays the following output:
//       8/18/2010 4:32:18.500 PM
//       5/27/1389 16:32:18.500
//
//       Using the Hijri Calendar:
//       ar-SY culture using the Hijri calendar: 09/09/1431 16:32:18.500
//       en-US culture using the Gregorian calendar: 8/18/2010 16:32:18.500

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间
Int32
Calendar


DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind)

DateTime 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind)
DateTime 结构

将 DateTime 结构的新实例初始化为指定日历的指定年、月、日、小时、分钟、秒、毫秒和协调世界时 (UTC) 或本地时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer, _
    millisecond As Integer, _
    calendar As Calendar, _
    kind As DateTimeKind _
)
public DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    Calendar calendar,
    DateTimeKind kind
)
public:
DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    Calendar^ calendar,
    DateTimeKind kind
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int *
        millisecond:int *
        calendar:Calendar *
        kind:DateTimeKind -> DateTime

参数

year
类型： System Int32
年（1 到 calendar 中的年数）。
month
类型： System Int32
月（1 到 calendar 中的月数）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
millisecond
类型： System Int32
毫秒（0 到 999）。
calendar
类型： System.Globalization Calendar
用于解释 year、month 和 day 的日历。
kind
类型： System DateTimeKind
枚举值之一，该值指示 year、month、day、hour、minute、second 和 millisecond 是指定了本地时间、协调世界时 (UTC)，还是两者皆未指定。
异常 | 条件
ArgumentNullException | calendar 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | year 不在 calendar 所支持的范围内。 - 或 - month 小于 1 或大于 calendar 中的月数。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于 0 或大于 23。 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。 - 或 - millisecond 小于 0 或大于 999。
ArgumentException | 指定的时间参数的取值小于 DateTime..::.MinValue 或大于 DateTime..::.MaxValue。 - 或 - kind 不是 DateTimeKind 值之一。

year、month 和 day 参数的允许值取决于 calendar 参数。如果指定的日期和时间不能用 calendar 来表达，将引发异常。 year、month 和 day 参数的允许值取决于 calendar 参数。如果指定的日期和时间不能用 calendar 来表达，将引发异常。

如果应用程序看重日期和时间数据的可移植性或者其时区识别能力有限，则可以使用相应的 DateTimeOffset 构造函数。

System.Globalization 命名空间提供几种日历，其中包括 GregorianCalendar 和 JulianCalendar。

下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。 下面的示例调用 DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind) 构造函数两次来实例化两个 DateTime 值。第一次调用通过使用 PersianCalendar 对象来实例化 DateTime 值。因为不能将波斯历指定为区域性的默认日历，所以要显示波斯历的日期，必须单独调用其 PersianCalendar..::.GetMonth、PersianCalendar..::.GetDayOfMonth 和 PersianCalendar..::.GetYear 方法。对构造函数的第二次调用通过使用 DateTime 对象来实例化 HijriCalendar 值。该示例将当前区域性更改为阿拉伯语（叙利亚），并将当前区域性的默认日历更改为回历。因为回历是当前区域性的默认日历，所以 Console..::.WriteLine 方法将使用它来设置日期格式。当恢复前一个当前区域性（在此情况下为"英语（美国）"）时，Console..::.WriteLine 方法使用当前区域性的默认公历来格式化日期。

Imports System.Globalization
Imports System.Text.RegularExpressions
Imports System.Threading

Module Example
   Public Sub Main()
      Console.WriteLine("Using the Persian Calendar:")
      Dim persian As New PersianCalendar()
      Dim date1 As New Date(1389, 5, 27, 16, 32, 18, 500, _
                            persian, DateTimeKind.Local)
      Console.WriteLine("{0:M/dd/yyyy h:mm:ss.fff tt} {1}", date1, date1.Kind)
      Console.WriteLine("{0}/{1}/{2} {3}{8}{4:D2}{8}{5:D2}.{6:G3} {7}", _
                                       persian.GetMonth(date1), _
                                       persian.GetDayOfMonth(date1), _
                                       persian.GetYear(date1), _
                                       persian.GetHour(date1), _
                                       persian.GetMinute(date1), _
                                       persian.GetSecond(date1), _
                                       persian.GetMilliseconds(date1), _
                                       date1.Kind, _
                                       DateTimeFormatInfo.CurrentInfo.TimeSeparator)
      Console.WriteLine()

      Console.WriteLine("Using the Hijri Calendar:")
      ' Get current culture so it can later be restored.
      Dim dftCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

      ' Define strings for use in composite formatting.
      Dim dFormat As String
      Dim fmtString As String
      ' Define Hijri calendar.
      Dim hijri As New HijriCalendar()
      ' Make ar-SY the current culture and Hijri the current calendar.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("ar-SY")
      Dim current As CultureInfo = CultureInfo.CurrentCulture
      current.DateTimeFormat.Calendar = hijri
      dFormat = current.DateTimeFormat.ShortDatePattern
      ' Ensure year is displayed as four digits.
      dFormat = Regex.Replace(dFormat, "/yy$", "/yyyy") + " H:mm:ss.fff"
      fmtString = "{0} culture using the {1} calendar: {2:" + dFormat + "} {3}"
      Dim date2 As New Date(1431, 9, 9, 16, 32, 18, 500, _
                            hijri, DateTimeKind.Local)
      Console.WriteLine(fmtString, current, GetCalendarName(hijri), _
                        date2, date2.Kind)

      ' Restore previous culture.
      Thread.CurrentThread.CurrentCulture = dftCulture
      dFormat = DateTimeFormatInfo.CurrentInfo.ShortDatePattern +" H:mm:ss.fff"
      fmtString = "{0} culture using the {1} calendar: {2:" + dFormat + "} {3}"
      Console.WriteLine(fmtString, CultureInfo.CurrentCulture, _
                        GetCalendarName(CultureInfo.CurrentCulture.Calendar), _
                        date2, date2.Kind)
   End Sub

   Private Function GetCalendarName(cal As Calendar) As String
      Return Regex.Match(cal.ToString(), "\.(\w+)Calendar").Groups(1).Value
   End Function
End Module
' The example displays the following output:
'       Using the Persian Calendar:
'       8/18/2010 4:32:18.500 PM
'       5/27/1389 16:32:18.500
'
'       Using the Hijri Calendar:
'       ar-SY culture using the Hijri calendar: 09/09/1431 16:32:18.500
'       en-US culture using the Gregorian calendar: 8/18/2010 16:32:18.500

using System;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Using the Persian Calendar:");
      PersianCalendar persian = new PersianCalendar();
      DateTime date1 = new DateTime(1389, 5, 27, 16, 32, 18, 500,
                                    persian, DateTimeKind.Local);
      Console.WriteLine("{0:M/dd/yyyy h:mm:ss.fff tt} {1}", date1, date1.Kind);
      Console.WriteLine("{0}/{1}/{2} {3}{8}{4:D2}{8}{5:D2}.{6:G3} {7}\n",
                                       persian.GetMonth(date1),
                                       persian.GetDayOfMonth(date1),
                                       persian.GetYear(date1),
                                       persian.GetHour(date1),
                                       persian.GetMinute(date1),
                                       persian.GetSecond(date1),
                                       persian.GetMilliseconds(date1),
                                       date1.Kind,
                                       DateTimeFormatInfo.CurrentInfo.TimeSeparator);

      Console.WriteLine("Using the Hijri Calendar:");
      // Get current culture so it can later be restored.
      CultureInfo dftCulture = Thread.CurrentThread.CurrentCulture;

      // Define strings for use in composite formatting.
      string dFormat;
      string fmtString;
      // Define Hijri calendar.
      HijriCalendar hijri = new HijriCalendar();
      // Make ar-SY the current culture and Hijri the current calendar.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SY");
      CultureInfo current = CultureInfo.CurrentCulture;
      current.DateTimeFormat.Calendar = hijri;
      dFormat = current.DateTimeFormat.ShortDatePattern;
      // Ensure year is displayed as four digits.
      dFormat = Regex.Replace(dFormat, "/yy$", "/yyyy") + " H:mm:ss.fff";
      fmtString = "{0} culture using the {1} calendar: {2:" + dFormat + "} {3}";
      DateTime date2 = new DateTime(1431, 9, 9, 16, 32, 18, 500,
                                    hijri, DateTimeKind.Local);
      Console.WriteLine(fmtString, current, GetCalendarName(hijri),
                        date2, date2.Kind);

      // Restore previous culture.
      Thread.CurrentThread.CurrentCulture = dftCulture;
      dFormat = DateTimeFormatInfo.CurrentInfo.ShortDatePattern +" H:mm:ss.fff";
      fmtString = "{0} culture using the {1} calendar: {2:" + dFormat + "} {3}";
      Console.WriteLine(fmtString,
                        CultureInfo.CurrentCulture,
                        GetCalendarName(CultureInfo.CurrentCulture.Calendar),
                        date2, date2.Kind);
   }

   private static string GetCalendarName(Calendar cal)
   {
      return Regex.Match(cal.ToString(), "\\.(\\w+)Calendar").Groups[1].Value;
   }
}
// The example displays the following output:
//    Using the Persian Calendar:
//    8/18/2010 4:32:18.500 PM Local
//    5/27/1389 16:32:18.500 Local
//
//    Using the Hijri Calendar:
//    ar-SY culture using the Hijri calendar: 09/09/1431 16:32:18.500 Local
//    en-US culture using the Gregorian calendar: 8/18/2010 16:32:18.500 Local

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
DateTime 重载
System 命名空间


DateTime 字段

DateTime 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

DateTime 类型公开以下成员。

名称 说明
页首

参考

DateTime 结构
System 命名空间


DateTime ..::.MaxValue 字段

DateTime
.
.
::
.
MaxValue 字段
DateTime 结构

表示 DateTime 的最大可能值。此字段为只读。 表示 DateTime 的最大可能值。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly MaxValue As DateTime
public static readonly DateTime MaxValue
public:
static initonly DateTime MaxValue
static val MaxValue: DateTime
异常 | 条件
ArgumentOutOfRangeException | MaxValue 位于当前区域性的默认日历或指定区域性的默认日历的范围之外。

此常数的值等效于 9999 年 12 月 31 日 23:59:59.9999999，恰好在 10000 年 1 月 1 日 00:00:00 之前一个 100 纳秒计时周期处。

有些日历（如 UmAlQuraCalendar）支持的上限日期早于 MaxValue。在这些情况下，通过变量赋值或格式设置及分析操作尝试访问 MaxValue 会引发 ArgumentOutOfRangeException。您可以从 System.Globalization.CultureInfo.DateTimeFormat.Calendar.MaxSupportedDateTime 属性中检索指定区域性的最近有效日期的值，而不要检索 DateTime..::.MaxValue 的值。 有些日历（如 UmAlQuraCalendar）支持的上限日期早于 MaxValue。在这些情况下，通过变量赋值或格式设置及分析操作尝试访问 MaxValue 会引发 ArgumentOutOfRangeException。您可以从 System.Globalization.CultureInfo.DateTimeFormat.Calendar.MaxSupportedDateTime 属性中检索指定区域性的最近有效日期的值，而不要检索 DateTime..::.MaxValue 的值。 有些日历（如 UmAlQuraCalendar）支持的上限日期早于 MaxValue。在这些情况下，通过变量赋值或格式设置及分析操作尝试访问 MaxValue 会引发 ArgumentOutOfRangeException。您可以从 System.Globalization.CultureInfo.DateTimeFormat.Calendar.MaxSupportedDateTime 属性中检索指定区域性的最近有效日期的值，而不要检索 DateTime..::.MaxValue 的值。

下面的示例通过向 DateTime 对象的构造函数传递一个表示计时周期数的 Int64 值来实例化该对象。在调用该构造函数之前，该示例将确保该值大于等于 DateTime.MinValue.Ticks 且小于等于 DateTime.MaxValue.Ticks。如果不是，则引发 ArgumentOutOfRangeException。 下面的示例通过向 DateTime 对象的构造函数传递一个表示计时周期数的 Int64 值来实例化该对象。在调用该构造函数之前，该示例将确保该值大于等于 DateTime.MinValue.Ticks 且小于等于 DateTime.MaxValue.Ticks。如果不是，则引发 ArgumentOutOfRangeException。 下面的示例通过向 DateTime 对象的构造函数传递一个表示计时周期数的 Int64 值来实例化该对象。在调用该构造函数之前，该示例将确保该值大于等于 DateTime.MinValue.Ticks 且小于等于 DateTime.MaxValue.Ticks。如果不是，则引发 ArgumentOutOfRangeException。

' Attempt to assign an out-of-range value to a DateTime constructor.
Dim numberOfTicks As Long = Int64.MaxValue
Dim validDate As Date

' Validate the value.
If numberOfTicks >= Date.MinValue.Ticks And _
   numberOfTicks <= Date.MaxValue.Ticks Then
   validDate = New Date(numberOfTicks)
ElseIf numberOfTicks < Date.MinValue.Ticks Then
   Throw New ArgumentOutOfRangeException("ticks", _
                   String.Format("{0} is less than {1} ticks.", _
                   numberOfTicks, _
                   Date.MinValue.Ticks))
Else
   Throw New ArgumentOutOfRangeException("ticks", _
                   String.Format("{0} is greater than {1} ticks.", _
                   numberOfTicks, _
                   Date.MaxValue.Ticks))

// Attempt to assign an out-of-range value to a DateTime constructor.
long numberOfTicks = Int64.MaxValue;
DateTime validDate;

// Validate the value.
if (numberOfTicks >= DateTime.MinValue.Ticks &&
   numberOfTicks <= DateTime.MaxValue.Ticks)
   validDate = new DateTime(numberOfTicks);
else if (numberOfTicks < DateTime.MinValue.Ticks)
   throw new ArgumentOutOfRangeException("ticks",
                   String.Format("{0} is less than {1} ticks.",
                   numberOfTicks,
                   DateTime.MinValue.Ticks));
else
   throw new ArgumentOutOfRangeException("ticks",
                   String.Format("{0} is greater than {1} ticks.",
                   numberOfTicks,
                   DateTime.MaxValue.Ticks));

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.MinValue 字段

DateTime
.
.
::
.
MinValue 字段
DateTime 结构

表示 DateTime 的最小可能值。此字段为只读。 表示 DateTime 的最小可能值。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly MinValue As DateTime
public static readonly DateTime MinValue
public:
static initonly DateTime MinValue
static val MinValue: DateTime

此常数的值等效于 0001 年 1 月 1 日 00:00:00.0000000。

MinValue 定义分配给未初始化的 DateTime 变量的日期和时间。下面的示例阐释了这一点。 MinValue 定义分配给未初始化的 DateTime 变量的日期和时间。下面的示例阐释了这一点。

' Define an unitialized date.
Dim date1 As Date
Console.Write(date1.ToString())
If date1.Equals(Date.MinValue) Then _
   Console.WriteLine("  (Equals Date.MinValue)")
' The example displays the following output:
'    1/1/0001 12:00:00 AM  (Equals Date.MinValue)

// Define an unitialized date.
DateTime date1 = new DateTime();
Console.Write(date1.ToString());
if (date1.Equals(DateTime.MinValue))
   Console.WriteLine("  (Equals Date.MinValue)");
// The example displays the following output:
//    1/1/0001 12:00:00 AM  (Equals Date.MinValue)

MinValue 和 MaxValue 属性可用于确保值在传递给 DateTime 构造函数之前位于受支持的范围内。“示例”部分中的代码演示此用法。 MinValue 和 MaxValue 属性可用于确保值在传递给 DateTime 构造函数之前位于受支持的范围内。“示例”部分中的代码演示此用法。

下面的示例通过向 DateTime 对象的构造函数传递一个表示计时周期数的 Int64 值来实例化该对象。在调用该构造函数之前，该示例将确保该值大于等于 DateTime.MinValue.Ticks 且小于等于 DateTime.MinValue.Ticks。如果不是，则引发 ArgumentOutOfRangeException。 下面的示例通过向 DateTime 对象的构造函数传递一个表示计时周期数的 Int64 值来实例化该对象。在调用该构造函数之前，该示例将确保该值大于等于 DateTime.MinValue.Ticks 且小于等于 DateTime.MinValue.Ticks。如果不是，则引发 ArgumentOutOfRangeException。 下面的示例通过向 DateTime 对象的构造函数传递一个表示计时周期数的 Int64 值来实例化该对象。在调用该构造函数之前，该示例将确保该值大于等于 DateTime.MinValue.Ticks 且小于等于 DateTime.MinValue.Ticks。如果不是，则引发 ArgumentOutOfRangeException。

' Attempt to assign an out-of-range value to a DateTime constructor.
Dim numberOfTicks As Long = Int64.MaxValue
Dim validDate As Date

' Validate the value.
If numberOfTicks >= Date.MinValue.Ticks And _
   numberOfTicks <= Date.MaxValue.Ticks Then
   validDate = New Date(numberOfTicks)
ElseIf numberOfTicks < Date.MinValue.Ticks Then
   Throw New ArgumentOutOfRangeException("ticks", _
                   String.Format("{0} is less than {1} ticks.", _
                   numberOfTicks, _
                   Date.MinValue.Ticks))
Else
   Throw New ArgumentOutOfRangeException("ticks", _
                   String.Format("{0} is greater than {1} ticks.", _
                   numberOfTicks, _
                   Date.MaxValue.Ticks))

// Attempt to assign an out-of-range value to a DateTime constructor.
long numberOfTicks = Int64.MaxValue;
DateTime validDate;

// Validate the value.
if (numberOfTicks >= DateTime.MinValue.Ticks &&
   numberOfTicks <= DateTime.MaxValue.Ticks)
   validDate = new DateTime(numberOfTicks);
else if (numberOfTicks < DateTime.MinValue.Ticks)
   throw new ArgumentOutOfRangeException("ticks",
                   String.Format("{0} is less than {1} ticks.",
                   numberOfTicks,
                   DateTime.MinValue.Ticks));
else
   throw new ArgumentOutOfRangeException("ticks",
                   String.Format("{0} is greater than {1} ticks.",
                   numberOfTicks,
                   DateTime.MaxValue.Ticks));

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime 方法

DateTime 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

DateTime 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DateTime 结构
System 命名空间


DateTime ..::.Add 方法

DateTime
.
.
::
.
Add 方法
DateTime 结构

返回一个新的 DateTime，它将指定 TimeSpan 的值加到此实例的值上。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Add ( _
    value As TimeSpan _
) As DateTime
public DateTime Add(
    TimeSpan value
)
public:
DateTime Add(
    TimeSpan value
)
member Add :
        value:TimeSpan -> DateTime

参数

value
类型： System TimeSpan
正或负时间间隔。

返回值

类型： System DateTime
一个对象，其值是此实例所表示的日期和时间与 value 所表示的时间间隔之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。

您可以使用 Add 方法在单个运算中加上多种时间间隔（天、小时、分钟、秒或毫秒）。此方法的行为与加法运算符的行为相同。DateTime 结构也支持每种时间间隔的专用加法（例如 AddDays、AddHours 和 AddMinutes）。 您可以使用 Add 方法在单个运算中加上多种时间间隔（天、小时、分钟、秒或毫秒）。此方法的行为与加法运算符的行为相同。DateTime 结构也支持每种时间间隔的专用加法（例如 AddDays、AddHours 和 AddMinutes）。 您可以使用 Add 方法在单个运算中加上多种时间间隔（天、小时、分钟、秒或毫秒）。此方法的行为与加法运算符的行为相同。DateTime 结构也支持每种时间间隔的专用加法（例如 AddDays、AddHours 和 AddMinutes）。

Add 方法在执行日期算术运算时会考虑闰年和月份中的天数。

此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。新的 DateTime 实例与当前实例的 Kind 属性相同。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。新的 DateTime 实例与当前实例的 Kind 属性相同。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。新的 DateTime 实例与当前实例的 Kind 属性相同。

下面的代码示例演示 Add 方法。它计算距此刻为 36 天（即 864 小时）的那一天是星期几。 下面的代码示例演示 Add 方法。它计算距此刻为 36 天（即 864 小时）的那一天是星期几。

' Calculate what day of the week is 36 days from this instant.
Dim today As System.DateTime
Dim duration As System.TimeSpan
Dim answer As System.DateTime

today = System.DateTime.Now
duration = New System.TimeSpan(36, 0, 0, 0)
answer = today.Add(duration)

System.Console.WriteLine("{0:dddd}", answer)

// Calculate what day of the week is 36 days from this instant.
System.DateTime today = System.DateTime.Now;
System.TimeSpan duration = new System.TimeSpan(36, 0, 0, 0);
System.DateTime answer = today.Add(duration);
System.Console.WriteLine("{0:dddd}", answer);

// Calculate what day of the week is 36 days from this instant.
System::DateTime today = System::DateTime::Now;
System::TimeSpan duration( 36, 0, 0, 0 );
System::DateTime answer = today.Add( duration );
System::Console::WriteLine( " {0:dddd}", answer );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
TimeSpan
TimeSpan Add

其他资源

使用日期和时间执行算术运算


DateTime ..::.AddDays 方法

DateTime
.
.
::
.
AddDays 方法
DateTime 结构

返回一个新的 DateTime，它将指定的天数加到此实例的值上。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddDays ( _
    value As Double _
) As DateTime
public DateTime AddDays(
    double value
)
public:
DateTime AddDays(
    double value
)
member AddDays :
        value:float -> DateTime

参数

value
类型： System Double
由整数和小数部分组成的天数。value 参数可以是负数也可以是正数。 由整数和小数部分组成的天数。value 参数可以是负数也可以是正数。

返回值

类型： System DateTime
一个对象，其值是此实例所表示的日期和时间与 value 所表示的天数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。

此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。

value 的小数部分是以天为单位时的小数部分。例如，4.5 等效于 4 天 12 小时 0 分钟 0 秒 0 毫秒 0 计时周期。 value 的小数部分是以天为单位时的小数部分。例如，4.5 等效于 4 天 12 小时 0 分钟 0 秒 0 毫秒 0 计时周期。

value 参数被舍入到最近的毫秒。

下面的代码示例演示 AddDays 方法。

' Calculate what day of the week is 36 days from this instant.
Dim today As System.DateTime
Dim answer As System.DateTime

today = System.DateTime.Now
answer = today.AddDays(36)

System.Console.WriteLine("{0:dddd}", answer)

            // Calculate what day of the week is 36 days from this instant.
            System.DateTime today = System.DateTime.Now;
            System.DateTime answer = today.AddDays(36);
            System.Console.WriteLine("{0:dddd}", answer);

// Calculate what day of the week is 36 days from this instant.
System::DateTime today = System::DateTime::Now;
System::DateTime answer = today.AddDays( 36 );
System::Console::WriteLine( "{0:dddd}", answer );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Double


DateTime ..::.AddHours 方法

DateTime
.
.
::
.
AddHours 方法
DateTime 结构

返回一个新的 DateTime，它将指定的小时数加到此实例的值上。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddHours ( _
    value As Double _
) As DateTime
public DateTime AddHours(
    double value
)
public:
DateTime AddHours(
    double value
)
member AddHours :
        value:float -> DateTime

参数

value
类型： System Double
由整数和小数部分组成的小时数。value 参数可以是负数也可以是正数。 由整数和小数部分组成的小时数。value 参数可以是负数也可以是正数。

返回值

类型： System DateTime
一个对象，其值是此实例所表示的日期和时间与 value 所表示的小时数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。

此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。返回的 DateTime 对象的 Kind 属性与 value 中的属性相同。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。返回的 DateTime 对象的 Kind 属性与 value 中的属性相同。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。返回的 DateTime 对象的 Kind 属性与 value 中的属性相同。

value 的小数部分是以小时为单位时的小数部分。例如，4.5 等效于 4 小时 30 分钟 0 秒 0 毫秒 0 计时周期。 value 的小数部分是以小时为单位时的小数部分。例如，4.5 等效于 4 小时 30 分钟 0 秒 0 毫秒 0 计时周期。

value 参数被舍入到最近的毫秒。

如果结果是无尽循环小数，将不足一小时的时间间隔转换为小数部分可能会发生精度损失。（例如，1 分钟等于 0.016667 小时。）如果这会产生问题，则可以使用 Add 方法，通过这种方法，可以在一个方法调用中指定多种时间间隔，不需要将时间间隔转换为小时的小数部分。 如果结果是无尽循环小数，将不足一小时的时间间隔转换为小数部分可能会发生精度损失。（例如，1 分钟等于 0.016667 小时。）如果这会产生问题，则可以使用 Add 方法，通过这种方法，可以在一个方法调用中指定多种时间间隔，不需要将时间间隔转换为小时的小数部分。

下面的示例使用 AddHours 方法将许多整数值和小数值与日期和时间相加。它还阐释了通过将该方法传递一个包含分数部分的值而引起的精度损失。 下面的示例使用 AddHours 方法将许多整数值和小数值与日期和时间相加。它还阐释了通过将该方法传递一个包含分数部分的值而引起的精度损失。

Module Example
   Public Sub Main()
      Dim hours() As Double = {.08333, .16667, .25, .33333, .5, .66667, 1, 2, _
                             29, 30, 31, 90, 365}
      Dim dateValue As Date = #3/1/2009 12:00#

      For Each hour As Double In hours
         Console.WriteLine("{0} + {1} hour(s) = {2}", dateValue, hour, _
                           dateValue.AddHours(hour))
      Next
   End Sub
End Module
' The example displays the following output on a system whose current
' culture is en-US:
' 3/1/2009 12:00:00 PM + 0.08333 hour(s) = 3/1/2009 12:04:59 PM
' 3/1/2009 12:00:00 PM + 0.16667 hour(s) = 3/1/2009 12:10:00 PM
' 3/1/2009 12:00:00 PM + 0.25 hour(s) = 3/1/2009 12:15:00 PM
' 3/1/2009 12:00:00 PM + 0.33333 hour(s) = 3/1/2009 12:19:59 PM
' 3/1/2009 12:00:00 PM + 0.5 hour(s) = 3/1/2009 12:30:00 PM
' 3/1/2009 12:00:00 PM + 0.66667 hour(s) = 3/1/2009 12:40:00 PM
' 3/1/2009 12:00:00 PM + 1 hour(s) = 3/1/2009 1:00:00 PM
' 3/1/2009 12:00:00 PM + 2 hour(s) = 3/1/2009 2:00:00 PM
' 3/1/2009 12:00:00 PM + 29 hour(s) = 3/2/2009 5:00:00 PM
' 3/1/2009 12:00:00 PM + 30 hour(s) = 3/2/2009 6:00:00 PM
' 3/1/2009 12:00:00 PM + 31 hour(s) = 3/2/2009 7:00:00 PM
' 3/1/2009 12:00:00 PM + 90 hour(s) = 3/5/2009 6:00:00 AM
' 3/1/2009 12:00:00 PM + 365 hour(s) = 3/16/2009 5:00:00 PM

using System;

public class Example
{
   public static void Main()
   {
      double[] hours = {.08333, .16667, .25, .33333, .5, .66667, 1, 2,
                        29, 30, 31, 90, 365};
      DateTime dateValue = new DateTime(2009, 3, 1, 12, 0, 0);

      foreach (double hour in hours)
         Console.WriteLine("{0} + {1} hour(s) = {2}", dateValue, hour,
                           dateValue.AddHours(hour));

   }
}
// The example displays the following output on a system whose current
// culture is en-US:
//    3/1/2009 12:00:00 PM + 0.08333 hour(s) = 3/1/2009 12:04:59 PM
//    3/1/2009 12:00:00 PM + 0.16667 hour(s) = 3/1/2009 12:10:00 PM
//    3/1/2009 12:00:00 PM + 0.25 hour(s) = 3/1/2009 12:15:00 PM
//    3/1/2009 12:00:00 PM + 0.33333 hour(s) = 3/1/2009 12:19:59 PM
//    3/1/2009 12:00:00 PM + 0.5 hour(s) = 3/1/2009 12:30:00 PM
//    3/1/2009 12:00:00 PM + 0.66667 hour(s) = 3/1/2009 12:40:00 PM
//    3/1/2009 12:00:00 PM + 1 hour(s) = 3/1/2009 1:00:00 PM
//    3/1/2009 12:00:00 PM + 2 hour(s) = 3/1/2009 2:00:00 PM
//    3/1/2009 12:00:00 PM + 29 hour(s) = 3/2/2009 5:00:00 PM
//    3/1/2009 12:00:00 PM + 30 hour(s) = 3/2/2009 6:00:00 PM
//    3/1/2009 12:00:00 PM + 31 hour(s) = 3/2/2009 7:00:00 PM
//    3/1/2009 12:00:00 PM + 90 hour(s) = 3/5/2009 6:00:00 AM
//    3/1/2009 12:00:00 PM + 365 hour(s) = 3/16/2009 5:00:00 PM

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Add

其他资源

使用日期和时间执行算术运算


DateTime ..::.AddMilliseconds 方法

DateTime
.
.
::
.
AddMilliseconds 方法
DateTime 结构

返回一个新的 DateTime，它将指定的毫秒数加到此实例的值上。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddMilliseconds ( _
    value As Double _
) As DateTime
public DateTime AddMilliseconds(
    double value
)
public:
DateTime AddMilliseconds(
    double value
)
member AddMilliseconds :
        value:float -> DateTime

参数

value
类型： System Double
由整数和小数部分组成的毫秒数。value 参数可以是负数也可以是正数。请注意，该值被舍入到最近的整数。 由整数和小数部分组成的毫秒数。value 参数可以是负数也可以是正数。请注意，该值被舍入到最近的整数。 由整数和小数部分组成的毫秒数。value 参数可以是负数也可以是正数。请注意，该值被舍入到最近的整数。

返回值

类型： System DateTime
一个对象，其值是此实例所表示的日期和时间与 value 所表示的毫秒数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。

此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。

value 的小数部分是以毫秒为单位时的小数部分。例如，4.5 等效于 4 毫秒 5000 计时周期（其中 1 毫秒 = 10000 计时周期）。 value 的小数部分是以毫秒为单位时的小数部分。例如，4.5 等效于 4 毫秒 5000 计时周期（其中 1 毫秒 = 10000 计时周期）。

value 参数被舍入到最近的整数。

下面的示例使用 AddMilliseconds 方法将 1 毫秒和 1.5 毫秒与 DateTime 值相加。然后该示例显示每个新值并显示新值与原始值之间的差异。差异以时间跨度和计时周期数这两种形式显示。该示例清晰地表明 1 毫秒等于 10,000 个计时周期。它还显示小数部分的毫秒在执行加法之前被舍入；通过将 1.5 毫秒与原始日期相加得到的 DateTime 值晚于原始日期 2 毫秒。 下面的示例使用 AddMilliseconds 方法将 1 毫秒和 1.5 毫秒与 DateTime 值相加。然后该示例显示每个新值并显示新值与原始值之间的差异。差异以时间跨度和计时周期数这两种形式显示。该示例清晰地表明 1 毫秒等于 10,000 个计时周期。它还显示小数部分的毫秒在执行加法之前被舍入；通过将 1.5 毫秒与原始日期相加得到的 DateTime 值晚于原始日期 2 毫秒。 下面的示例使用 AddMilliseconds 方法将 1 毫秒和 1.5 毫秒与 DateTime 值相加。然后该示例显示每个新值并显示新值与原始值之间的差异。差异以时间跨度和计时周期数这两种形式显示。该示例清晰地表明 1 毫秒等于 10,000 个计时周期。它还显示小数部分的毫秒在执行加法之前被舍入；通过将 1.5 毫秒与原始日期相加得到的 DateTime 值晚于原始日期 2 毫秒。 下面的示例使用 AddMilliseconds 方法将 1 毫秒和 1.5 毫秒与 DateTime 值相加。然后该示例显示每个新值并显示新值与原始值之间的差异。差异以时间跨度和计时周期数这两种形式显示。该示例清晰地表明 1 毫秒等于 10,000 个计时周期。它还显示小数部分的毫秒在执行加法之前被舍入；通过将 1.5 毫秒与原始日期相加得到的 DateTime 值晚于原始日期 2 毫秒。 下面的示例使用 AddMilliseconds 方法将 1 毫秒和 1.5 毫秒与 DateTime 值相加。然后该示例显示每个新值并显示新值与原始值之间的差异。差异以时间跨度和计时周期数这两种形式显示。该示例清晰地表明 1 毫秒等于 10,000 个计时周期。它还显示小数部分的毫秒在执行加法之前被舍入；通过将 1.5 毫秒与原始日期相加得到的 DateTime 值晚于原始日期 2 毫秒。

Dim dateFormat As String = "MM/dd/yyyy hh:mm:ss.fffffff"
Dim date1 As Date = #09/08/2010 16:00#
Console.WriteLine("Original date: {0} ({1:N0} ticks)", _
                  date1.ToString(dateFormat), date1.Ticks)
Console.WriteLine()

Dim date2 As Date = date1.AddMilliseconds(1)
Console.WriteLine("Second date:   {0} ({1:N0} ticks)", _
                  date2.ToString(dateFormat), date2.Ticks)
Console.WriteLine("Difference between dates: {0} ({1:N0} ticks)", _
                  date2 - date1, date2.Ticks - date1.Ticks)
Console.WriteLine()

Dim date3 As Date = date1.AddMilliseconds(1.5)
Console.WriteLine("Third date:    {0} ({1:N0} ticks)", _
                  date3.ToString(dateFormat), date3.Ticks)
Console.WriteLine("Difference between dates: {0} ({1:N0} ticks)", _
                  date3 - date1, date3.Ticks - date1.Ticks)
' The example displays the following output:
'    Original date: 09/08/2010 04:00:00.0000000 (634,195,584,000,000,000 ticks)
'
'    Second date:   09/08/2010 04:00:00.0010000 (634,195,584,000,010,000 ticks)
'    Difference between dates: 00:00:00.0010000 (10,000 ticks)
'
'    Third date:    09/08/2010 04:00:00.0020000 (634,195,584,000,020,000 ticks)
'    Difference between dates: 00:00:00.0020000 (20,000 ticks)

string dateFormat = "MM/dd/yyyy hh:mm:ss.fffffff";
DateTime date1 = new DateTime(2010, 9, 8, 16, 0, 0);
Console.WriteLine("Original date: {0} ({1:N0} ticks)\n",
                  date1.ToString(dateFormat), date1.Ticks);

DateTime date2 = date1.AddMilliseconds(1);
Console.WriteLine("Second date:   {0} ({1:N0} ticks)",
                  date2.ToString(dateFormat), date2.Ticks);
Console.WriteLine("Difference between dates: {0} ({1:N0} ticks)\n",
                  date2 - date1, date2.Ticks - date1.Ticks);

DateTime date3 = date1.AddMilliseconds(1.5);
Console.WriteLine("Third date:    {0} ({1:N0} ticks)",
                  date3.ToString(dateFormat), date3.Ticks);
Console.WriteLine("Difference between dates: {0} ({1:N0} ticks)",
                  date3 - date1, date3.Ticks - date1.Ticks);
// The example displays the following output:
//    Original date: 09/08/2010 04:00:00.0000000 (634,195,584,000,000,000 ticks)
//
//    Second date:   09/08/2010 04:00:00.0010000 (634,195,584,000,010,000 ticks)
//    Difference between dates: 00:00:00.0010000 (10,000 ticks)
//
//    Third date:    09/08/2010 04:00:00.0020000 (634,195,584,000,020,000 ticks)
//    Difference between dates: 00:00:00.0020000 (20,000 ticks)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Double

其他资源

使用日期和时间执行算术运算


DateTime ..::.AddMinutes 方法

DateTime
.
.
::
.
AddMinutes 方法
DateTime 结构

返回一个新的 DateTime，它将指定的分钟数加到此实例的值上。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddMinutes ( _
    value As Double _
) As DateTime
public DateTime AddMinutes(
    double value
)
public:
DateTime AddMinutes(
    double value
)
member AddMinutes :
        value:float -> DateTime

参数

value
类型： System Double
由整数和小数部分组成的分钟数。value 参数可以是负数也可以是正数。 由整数和小数部分组成的分钟数。value 参数可以是负数也可以是正数。

返回值

类型： System DateTime
一个对象，其值是此实例所表示的日期和时间与 value 所表示的分钟数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。

此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。

value 的小数部分是以分钟为单位时的小数部分。例如，4.5 等效于 4 分 30 秒 0 毫秒 0 计时周期。 value 的小数部分是以分钟为单位时的小数部分。例如，4.5 等效于 4 分 30 秒 0 毫秒 0 计时周期。

value 参数被舍入到最近的毫秒。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Double

其他资源

使用日期和时间执行算术运算


DateTime ..::.AddMonths 方法

DateTime
.
.
::
.
AddMonths 方法
DateTime 结构

返回一个新的 DateTime，它将指定的月数加到此实例的值上。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddMonths ( _
    months As Integer _
) As DateTime
public DateTime AddMonths(
    int months
)
public:
DateTime AddMonths(
    int months
)
member AddMonths :
        months:int -> DateTime

参数

months
类型： System Int32
月份数。months 参数可以是负数也可以是正数。 月份数。months 参数可以是负数也可以是正数。

返回值

类型： System DateTime
一个对象，其值是此实例所表示的日期和时间与 months 所表示的时间之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。 - 或 - months 小于 -120,000 或大于 120,000。

此方法不更改此 DateTime 对象的值。而是返回新的 DateTime 对象，其值是此操作的结果。 此方法不更改此 DateTime 对象的值。而是返回新的 DateTime 对象，其值是此操作的结果。

AddMonths 方法计算生成的月和年，同时考虑闰年和月中的天数，然后调整生成的 DateTime 对象的日部分。如果生成的日不是生成的月中的有效日，将使用生成的月的最后一个有效日。例如，3 月 31 日 + 1 个月 = 4 月 30 日。生成的 DateTime 对象的时间部分与此实例相同。 AddMonths 方法计算生成的月和年，同时考虑闰年和月中的天数，然后调整生成的 DateTime 对象的日部分。如果生成的日不是生成的月中的有效日，将使用生成的月的最后一个有效日。例如，3 月 31 日 + 1 个月 = 4 月 30 日。生成的 DateTime 对象的时间部分与此实例相同。 AddMonths 方法计算生成的月和年，同时考虑闰年和月中的天数，然后调整生成的 DateTime 对象的日部分。如果生成的日不是生成的月中的有效日，将使用生成的月的最后一个有效日。例如，3 月 31 日 + 1 个月 = 4 月 30 日。生成的 DateTime 对象的时间部分与此实例相同。 AddMonths 方法计算生成的月和年，同时考虑闰年和月中的天数，然后调整生成的 DateTime 对象的日部分。如果生成的日不是生成的月中的有效日，将使用生成的月的最后一个有效日。例如，3 月 31 日 + 1 个月 = 4 月 30 日。生成的 DateTime 对象的时间部分与此实例相同。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.AddSeconds 方法

DateTime
.
.
::
.
AddSeconds 方法
DateTime 结构

返回一个新的 DateTime，它将指定的秒数加到此实例的值上。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddSeconds ( _
    value As Double _
) As DateTime
public DateTime AddSeconds(
    double value
)
public:
DateTime AddSeconds(
    double value
)
member AddSeconds :
        value:float -> DateTime

参数

value
类型： System Double
由整数和小数部分组成的秒数。value 参数可以是负数也可以是正数。 由整数和小数部分组成的秒数。value 参数可以是负数也可以是正数。

返回值

类型： System DateTime
一个对象，其值是此实例所表示的日期和时间与 value 所表示的秒数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。

此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。

value 的小数部分是以秒为单位时的小数部分。例如，4.5 等效于 4 秒 500 毫秒 0 计时周期。 value 的小数部分是以秒为单位时的小数部分。例如，4.5 等效于 4 秒 500 毫秒 0 计时周期。

value 参数被舍入到最近的毫秒。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Double

其他资源

使用日期和时间执行算术运算


DateTime ..::.AddTicks 方法

DateTime
.
.
::
.
AddTicks 方法
DateTime 结构

返回一个新的 DateTime，它将指定的计时周期数加到此实例的值上。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddTicks ( _
    value As Long _
) As DateTime
public DateTime AddTicks(
    long value
)
public:
DateTime AddTicks(
    long long value
)
member AddTicks :
        value:int64 -> DateTime

参数

value
类型： System Int64
以 100 纳秒为单位的计时周期数。value 参数可以是正数也可以是负数。 以 100 纳秒为单位的计时周期数。value 参数可以是正数也可以是负数。

返回值

类型： System DateTime
一个对象，其值是此实例所表示的日期和时间与 value 所表示的时间之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。

此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Int64
Ticks

其他资源

使用日期和时间执行算术运算


DateTime ..::.AddYears 方法

DateTime
.
.
::
.
AddYears 方法
DateTime 结构

返回一个新的 DateTime，它将指定的年份数加到此实例的值上。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddYears ( _
    value As Integer _
) As DateTime
public DateTime AddYears(
    int value
)
public:
DateTime AddYears(
    int value
)
member AddYears :
        value:int -> DateTime

参数

value
类型： System Int32
年份数。value 参数可以是负数也可以是正数。 年份数。value 参数可以是负数也可以是正数。

返回值

类型： System DateTime
一个对象，其值是此实例所表示的日期和时间与 value 所表示的年份数之和。
异常 | 条件
ArgumentOutOfRangeException | value 或得到的 DateTime 小于 MinValue 或大于 MaxValue。

此方法不更改此 DateTime 对象的值。而是返回新的 DateTime 对象，其值是此操作的结果。 此方法不更改此 DateTime 对象的值。而是返回新的 DateTime 对象，其值是此操作的结果。

AddYears 方法计算生成的年，同时考虑闰年。生成的 DateTime 对象的月和时间部分与此实例相同。 AddYears 方法计算生成的年，同时考虑闰年。生成的 DateTime 对象的月和时间部分与此实例相同。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Compare 方法

DateTime
.
.
::
.
Compare 方法
DateTime 结构

对两个 DateTime 的实例进行比较，并返回一个指示第一个实例是早于、等于还是晚于第二个实例的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ t1 As DateTime, _ t2 As DateTime _ ) As Integer
public static int Compare( DateTime t1, DateTime t2 )
public: static int Compare( DateTime t1, DateTime t2 )
static member Compare : t1:DateTime * t2:DateTime -> int
参数
t1
类型： System DateTime
要比较的第一个对象。
t2
类型： System DateTime
要比较的第二个对象。
返回值
类型： System Int32
一个有符号数字，指示
t1
和
t2
的相对值。
值类型
条件
小于零
t1
早于
t2
。
零
t1
与
t2
相同。
大于零
t1
晚于
t2
。

在比较 DateTime 对象之前，请确保这些对象表示的是同一时区内的时间。

下面的示例说明 Compare 方法。

Dim date1 As Date = #08/01/2009 12:00AM#
Dim date2 As Date = #08/01/2009 12:00PM#
Dim result As Integer = DateTime.Compare(date1, date2)
Dim relationship As String

If result < 0 Then
   relationship = "is earlier than"
ElseIf result = 0 Then
   relationship = "is the same time as"
Else
   relationship = "is later than"
End If

Console.WriteLine("{0} {1} {2}", date1, relationship, date2)
' The example displays the following output:
'    8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;

if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";
else
   relationship = "is later than";

Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
// The example displays the following output:
//    8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
CompareTo
Equals


DateTime ..::.CompareTo 方法

DateTime
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

将此实例的值与指定的 DateTime 值相比较，并指示此实例是早于、等于还是晚于指定的 DateTime 值。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.CompareTo 方法 (DateTime)

DateTime
.
.
::
.
CompareTo 方法 (DateTime)
DateTime 结构

将此实例的值与指定的 DateTime 值相比较，并返回一个整数，该整数指示此实例是早于、等于还是晚于指定的 DateTime 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As DateTime _ ) As Integer
public int CompareTo( DateTime value )
public: virtual int CompareTo( DateTime value ) sealed
abstract CompareTo : value:DateTime -> int override CompareTo : value:DateTime -> int
参数
value
类型： System DateTime
要与当前实例进行比较的对象。
返回值
类型： System Int32
有符号数字，指示此实例和
value
参数的相对值。
值
说明
小于零
此实例早于
value
。
零
此实例与
value
相同。
大于零
此实例晚于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 DateTime..::.CompareTo(Object) 方法重载，这是因为它不必将 value 参数转换为对象。

在比较 DateTime 对象之前，请确保这些对象表示的是同一时区内的时间。要完成此操作，可以比较它们的 Kind 属性值。 在比较 DateTime 对象之前，请确保这些对象表示的是同一时区内的时间。要完成此操作，可以比较它们的 Kind 属性值。

下面的示例实例化三个 DateTime 对象，一个表示今天的日期，另一个表示去年这个日期，再一个表示明年这个日期。然后该示例调用 CompareTo(DateTime) 方法并显示比较结果。 下面的示例实例化三个 DateTime 对象，一个表示今天的日期，另一个表示去年这个日期，再一个表示明年这个日期。然后该示例调用 CompareTo(DateTime) 方法并显示比较结果。

Option Strict On

Module DateTimeComparison
   Private Enum DateComparisonResult
      Earlier = -1
      Later = 1
      TheSame = 0
   End Enum

   Public Sub Main()

      Dim thisDate As Date = Date.Today

      ' Define two DateTime objects for today's date
      ' next year and last year
      Dim thisDateNextYear, thisDateLastYear As Date

      ' Call AddYears instance method to add/substract 1 year
      thisDateNextYear = thisDate.AddYears(1)
      thisDateLastYear = thisDate.AddYears(-1)

      ' Compare dates
      '
      Dim comparison As DateComparisonResult
      ' Compare today to last year
      comparison = CType(thisDate.CompareTo(thisDateLastYear), DateComparisonResult)
      Console.WriteLine("CompareTo method returns {0}: {1:d} is {2} than {3:d}", _
                        CInt(comparison), thisDate, comparison.ToString().ToLower(), _
                        thisDateLastYear)

      ' Compare today to next year
      comparison = CType(thisDate.CompareTo(thisDateNextYear), DateComparisonResult)
      Console.WriteLine("CompareTo method returns {0}: {1:d} is {2} than {3:d}", _
                        CInt(comparison), thisDate, comparison.ToString().ToLower(), _
                        thisDateNextYear)
   End Sub
End Module
'
' If run on October 20, 2006, the example produces the following output:
'    CompareTo method returns 1: 10/20/2006 is later than 10/20/2005
'    CompareTo method returns -1: 10/20/2006 is earlier than 10/20/2007

using System;

public class DateTimeComparison
{
   private enum DateComparisonResult
   {
      Earlier = -1,
      Later = 1,
      TheSame = 0
   };

   public static void Main()
   {
      DateTime thisDate = DateTime.Today;

      // Define two DateTime objects for today's date
      // next year and last year
      DateTime thisDateNextYear, thisDateLastYear;

      // Call AddYears instance method to add/substract 1 year
      thisDateNextYear = thisDate.AddYears(1);
      thisDateLastYear = thisDate.AddYears(-1);

      // Compare dates
      //
      DateComparisonResult comparison;
      // Compare today to last year
      comparison = (DateComparisonResult) thisDate.CompareTo(thisDateLastYear);
      Console.WriteLine("CompareTo method returns {0}: {1:d} is {2} than {3:d}",
                        (int) comparison, thisDate, comparison.ToString().ToLower(),
                        thisDateLastYear);

      // Compare today to next year
      comparison = (DateComparisonResult) thisDate.CompareTo(thisDateNextYear);
      Console.WriteLine("CompareTo method returns {0}: {1:d} is {2} than {3:d}",
                        (int) comparison, thisDate, comparison.ToString().ToLower(),
                        thisDateNextYear);
   }
}
//
// If run on October 20, 2006, the example produces the following output:
//    CompareTo method returns 1: 10/20/2006 is later than 10/20/2005
//    CompareTo method returns -1: 10/20/2006 is earlier than 10/20/2007

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
CompareTo 重载
System 命名空间
Compare
Equals


DateTime ..::.CompareTo 方法 (Object)

DateTime
.
.
::
.
CompareTo 方法 (Object)
DateTime 结构

将此实例的值与包含指定的 DateTime 值的指定对象相比较，并返回一个整数，该整数指示此实例是早于、等于还是晚于指定的 DateTime 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的装箱对象，或
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
值
说明
小于零
此实例早于
value
。
零
此实例与
value
相同。
大于零
此实例晚于
value
或
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 DateTime。

在比较 DateTime 对象之前，请确保这些对象表示的是同一时区内的时间。要完成此操作，可以比较它们的 Kind 属性值。 在比较 DateTime 对象之前，请确保这些对象表示的是同一时区内的时间。要完成此操作，可以比较它们的 Kind 属性值。

无论 DateTime 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的代码示例演示 CompareTo 方法。

Dim thDay As New System.DateTime(System.DateTime.Today.Year, 7, 28)

Dim compareValue As Integer
Try
   compareValue = thDay.CompareTo(System.DateTime.Today)
Catch exp As ArgumentException
   System.Console.WriteLine("Value is not a DateTime")
End Try

If compareValue < 0 Then
   System.Console.WriteLine("{0:d} is in the past.", thDay)
ElseIf compareValue = 0 Then
   System.Console.WriteLine("{0:d} is today!", thDay)
Else   ' compareValue >= 1
   System.Console.WriteLine("{0:d} has not come yet.", thDay)
End If

System.DateTime theDay = new System.DateTime(System.DateTime.Today.Year, 7, 28);
int compareValue;

try
{
    compareValue = theDay.CompareTo(DateTime.Today);
}
catch (ArgumentException)
{
   Console.WriteLine("Value is not a DateTime");
   return;
}

if (compareValue < 0)
   System.Console.WriteLine("{0:d} is in the past.", theDay);
else if (compareValue == 0)
   System.Console.WriteLine("{0:d} is today!", theDay);
else // compareValue > 0
   System.Console.WriteLine("{0:d} has not come yet.", theDay);

using namespace System;
void main()
{

   System::DateTime theDay(System::DateTime::Today.Year,7,28);
   int compareValue;
   try
   {
      compareValue = theDay.CompareTo( System::DateTime::Today );
   }
   catch ( ArgumentException^ )
   {
      System::Console::WriteLine( "Value is not a DateTime" );
      return;
   }

   if ( compareValue < 0 )
   {
      System::Console::WriteLine( "{0:d} is in the past.", theDay );
   }
   else
   if ( compareValue == 0 )
   {
      System::Console::WriteLine( "{0:d} is today!", theDay );
   }
   else
   // compareValue > 0
   {
      System::Console::WriteLine( "{0:d} has not come yet.", theDay );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
CompareTo 重载
System 命名空间
Compare
Equals


DateTime ..::.DaysInMonth 方法

DateTime
.
.
::
.
DaysInMonth 方法
DateTime 结构

返回指定年和月中的天数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function DaysInMonth ( _
    year As Integer, _
    month As Integer _
) As Integer
public static int DaysInMonth(
    int year,
    int month
)
public:
static int DaysInMonth(
    int year,
    int month
)
static member DaysInMonth :
        year:int *
        month:int -> int

参数

year
类型： System Int32
年。
month
类型： System Int32
月（介于 1 到 12 之间的一个数字）。

返回值

类型： System Int32
指定 year 中 month 的天数。
例如，如果 month 等于 2（表示二月），则返回值为 28 或 29，具体取决于 year 是否为闰年。
异常 | 条件
ArgumentOutOfRangeException | month 小于 1 或大于 12。 - 或 - year 小于 1 或大于 9999。

下面的代码示例演示 DaysInMonth 方法。

Const July As Integer = 7
Const Feb As Integer = 2

' daysInJuly gets 31.
Dim daysInJuly As Integer = System.DateTime.DaysInMonth(2001, July)

' daysInFeb gets 28 because the year 1998 was not a leap year.
Dim daysInFeb As Integer = System.DateTime.DaysInMonth(1998, Feb)

' daysInFebLeap gets 29 because the year 1996 was a leap year.
Dim daysInFebLeap As Integer = System.DateTime.DaysInMonth(1996, Feb)

            const int July = 7;
            const int Feb = 2;

            // daysInJuly gets 31.
            int daysInJuly = System.DateTime.DaysInMonth(2001, July);

            // daysInFeb gets 28 because the year 1998 was not a leap year.
            int daysInFeb = System.DateTime.DaysInMonth(1998, Feb);

            // daysInFebLeap gets 29 because the year 1996 was a leap year.
            int daysInFebLeap = System.DateTime.DaysInMonth(1996, Feb);

const int July = 7;
const int Feb = 2;

// daysInJuly gets 31.
int daysInJuly = System::DateTime::DaysInMonth( 2001, July );

// daysInFeb gets 28 because the year 1998 was not a leap year.
int daysInFeb = System::DateTime::DaysInMonth( 1998, Feb );

// daysInFebLeap gets 29 because the year 1996 was a leap year.
int daysInFebLeap = System::DateTime::DaysInMonth( 1996, Feb );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Equals 方法

DateTime
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

返回一个值，该值指示两个 DateTime 对象，或者一个 DateTime 实例和另一个对象或 DateTime 是否相等。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Equals 方法 (DateTime)

DateTime
.
.
::
.
Equals 方法 (DateTime)
DateTime 结构

返回一个值，该值指示此实例是否与指定的 DateTime 实例相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    value As DateTime _
) As Boolean
public bool Equals(
    DateTime value
)
public:
virtual bool Equals(
    DateTime value
) sealed
abstract Equals :
        value:DateTime -> bool
override Equals :
        value:DateTime -> bool

参数

value
类型： System DateTime
要与此实例进行比较的对象。

返回值

类型： System Boolean
如果 value 参数等于此实例的值，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals 方法，这是因为它不必将 value 参数转换为对象。

下面的代码示例演示 Equals 方法。

Imports System

Module Application

    Sub Main()
        ' Create some DateTime objects.
        Dim one As DateTime = DateTime.UtcNow

        Dim two As DateTime = DateTime.Now

        Dim three As DateTime = one

        ' Compare the DateTime objects and display the results.
        Dim result As Boolean = one.Equals(two)

        Console.WriteLine("The result of comparing DateTime object one and two is: {0}.", result)

        result = one.Equals(three)

        Console.WriteLine("The result of comparing DateTime object one and three is: {0}.", result)

    End Sub
End Module

' This code example displays the following:
'
' The result of comparing DateTime object one and two is: False.
' The result of comparing DateTime object one and three is: True.

using System;

public class Application
{
    public static void Main()
    {
        // Create some DateTime objects.
        DateTime one = DateTime.UtcNow;

        DateTime two = DateTime.Now;

        DateTime three = one;

        // Compare the DateTime objects and display the results.
        bool result = one.Equals(two);

        Console.WriteLine("The result of comparing DateTime object one and two is: {0}.", result);

        result = one.Equals(three);

        Console.WriteLine("The result of comparing DateTime object one and three is: {0}.", result);
    }
}

// This code example displays the following:
//
// The result of comparing DateTime object one and two is: False.
// The result of comparing DateTime object one and three is: True.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Equals 重载
System 命名空间
Equals
Compare
CompareTo


DateTime ..::.Equals 方法 (Object)

DateTime
.
.
::
.
Equals 方法 (Object)
DateTime 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    value As Object _
) As Boolean
public override bool Equals(
    Object value
)
public:
virtual bool Equals(
    Object^ value
) override
abstract Equals :
        value:Object -> bool
override Equals :
        value:Object -> bool

参数

value
类型： System Object
要与此实例进行比较的对象。

返回值

类型： System Boolean
如果 value 是 DateTime 的实例并且等于此实例的值，则为 true；否则为 false。

下面的代码示例演示 Equals 方法。

Imports System

Module Application

    Sub Main()
        ' Create some DateTime objects.
        Dim one As DateTime = DateTime.UtcNow

        Dim two As DateTime = DateTime.Now

        Dim three As DateTime = one

        ' Compare the DateTime objects and display the results.
        Dim result As Boolean = one.Equals(two)

        Console.WriteLine("The result of comparing DateTime object one and two is: {0}.", result)

        result = one.Equals(three)

        Console.WriteLine("The result of comparing DateTime object one and three is: {0}.", result)

    End Sub
End Module

' This code example displays the following:
'
' The result of comparing DateTime object one and two is: False.
' The result of comparing DateTime object one and three is: True.

using System;

public class Application
{
    public static void Main()
    {
        // Create some DateTime objects.
        DateTime one = DateTime.UtcNow;

        DateTime two = DateTime.Now;

        DateTime three = one;

        // Compare the DateTime objects and display the results.
        bool result = one.Equals(two);

        Console.WriteLine("The result of comparing DateTime object one and two is: {0}.", result);

        result = one.Equals(three);

        Console.WriteLine("The result of comparing DateTime object one and three is: {0}.", result);
    }
}

// This code example displays the following:
//
// The result of comparing DateTime object one and two is: False.
// The result of comparing DateTime object one and three is: True.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Equals 重载
System 命名空间
Compare
CompareTo


DateTime ..::.Equals 方法 (DateTime, DateTime)

DateTime
.
.
::
.
Equals 方法 (DateTime, DateTime)
DateTime 结构

返回一个值，该值指示 DateTime 的两个实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Equals ( _
    t1 As DateTime, _
    t2 As DateTime _
) As Boolean
public static bool Equals(
    DateTime t1,
    DateTime t2
)
public:
static bool Equals(
    DateTime t1,
    DateTime t2
)
static member Equals :
        t1:DateTime *
        t2:DateTime -> bool

参数

t1
类型： System DateTime
要比较的第一个对象。
t2
类型： System DateTime
要比较的第二个对象。

返回值

类型： System Boolean
如果两个值相等，则为 true；否则为 false。

下面的代码示例演示 Equals 方法。

Dim today1 As New System.DateTime(System.DateTime.Today.Ticks)
Dim today2 As New System.DateTime(System.DateTime.Today.Ticks)
Dim tomorrow As New System.DateTime( _
                        System.DateTime.Today.AddDays(1).Ticks)

' todayEqualsToday gets true.
Dim todayEqualsToday As Boolean = System.DateTime.Equals(today1, today2)

' todayEqualsTomorrow gets false.
Dim todayEqualsTomorrow As Boolean = System.DateTime.Equals(today1, tomorrow)

            System.DateTime today1 =
                    new System.DateTime(System.DateTime.Today.Ticks);
            System.DateTime today2 =
                    new System.DateTime(System.DateTime.Today.Ticks);
            System.DateTime tomorrow =
                    new System.DateTime(
                                System.DateTime.Today.AddDays(1).Ticks);

            // todayEqualsToday gets true.
            bool todayEqualsToday = System.DateTime.Equals(today1, today2);

            // todayEqualsTomorrow gets false.
            bool todayEqualsTomorrow = System.DateTime.Equals(today1, tomorrow);

System::DateTime today1 = System::DateTime(
   System::DateTime::Today.Ticks );
System::DateTime today2 = System::DateTime(
   System::DateTime::Today.Ticks );
System::DateTime tomorrow = System::DateTime(
   System::DateTime::Today.AddDays( 1 ).Ticks );

// todayEqualsToday gets true.
bool todayEqualsToday = System::DateTime::Equals( today1, today2 );

// todayEqualsTomorrow gets false.
bool todayEqualsTomorrow = System::DateTime::Equals( today1, tomorrow );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Equals 重载
System 命名空间
Boolean
Compare
CompareTo


DateTime ..::.FromBinary 方法

DateTime
.
.
::
.
FromBinary 方法
DateTime 结构

反序列化一个 64 位二进制值，并重新创建序列化的 DateTime 初始对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromBinary ( _
    dateData As Long _
) As DateTime
public static DateTime FromBinary(
    long dateData
)
public:
static DateTime FromBinary(
    long long dateData
)
static member FromBinary :
        dateData:int64 -> DateTime

参数

dateData
类型： System Int64
64 位带符号整数，它对 2 位字段的 Kind 属性以及 62 位字段的 Ticks 属性进行了编码。

返回值

类型： System DateTime
一个对象，它等效于由 ToBinary 方法序列化的 DateTime 对象。
异常 | 条件
ArgumentException | dateData 小于 MinValue 或大于 MaxValue。

使用 ToBinary 方法将当前 DateTime 对象的值转换为二进制值。随后，使用该二进制值以及 FromBinary 方法重新创建初始的 DateTime 对象。 使用 ToBinary 方法将当前 DateTime 对象的值转换为二进制值。随后，使用该二进制值以及 FromBinary 方法重新创建初始的 DateTime 对象。

重要说明 重要事项

在某些情况下，由 FromBinary 方法返回的 DateTime 值与提供给 ToBinary 方法的原始 DateTime 值不同。有关更多信息，请参见下一节，“地方时间调整”。 在某些情况下，由 FromBinary 方法返回的 DateTime 值与提供给 ToBinary 方法的原始 DateTime 值不同。有关更多信息，请参见下一节，“地方时间调整”。

本地时间调整

本地时间（即调整为本地时区的协调世界时）由 Kind 属性值为 Local 的 DateTime 结构表示。当从 ToBinary 方法生成的二进制表示形式还原本地 DateTime 值时，FromBinary 方法可以调整重新创建的值，以使该值不等于原始值。在下列条件下，可能会出现这种情况： 本地时间（即调整为本地时区的协调世界时）由 Kind 属性值为 Local 的 DateTime 结构表示。当从 ToBinary 方法生成的二进制表示形式还原本地 DateTime 值时，FromBinary 方法可以调整重新创建的值，以使该值不等于原始值。在下列条件下，可能会出现这种情况： 本地时间（即调整为本地时区的协调世界时）由 Kind 属性值为 Local 的 DateTime 结构表示。当从 ToBinary 方法生成的二进制表示形式还原本地 DateTime 值时，FromBinary 方法可以调整重新创建的值，以使该值不等于原始值。在下列条件下，可能会出现这种情况：

  • 如果本地 DateTime 对象在某个时区内由 ToBinary 方法序列化，然后在另一个时区内由 FromBinary 方法反序列化，则结果 DateTime 对象表示的本地时间自动调整为第二个时区。

    例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序然后东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序然后东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序然后东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序然后东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序然后东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序然后东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序然后东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。

  • 如果本地 DateTime 值的二进制表示形式表示在调用 FromBinary 的系统的本地时区中的无效时间，那么该时间将被调整为有效。

    例如，从标准时间到夏时制的切换在美国的太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00 发生，此时时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToBinary 方法转换为二进制值，然后在通过 FromBinary 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，从标准时间到夏时制的切换在美国的太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00 发生，此时时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToBinary 方法转换为二进制值，然后在通过 FromBinary 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，从标准时间到夏时制的切换在美国的太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00 发生，此时时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToBinary 方法转换为二进制值，然后在通过 FromBinary 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，从标准时间到夏时制的切换在美国的太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00 发生，此时时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToBinary 方法转换为二进制值，然后在通过 FromBinary 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。

    Module Example
   Public Sub Main()
      Dim localDate As Date = DateTime.SpecifyKind(#03/14/2010 2:30AM#, DateTimeKind.Local)
      Dim binLocal As Long = localDate.ToBinary()
      If TimeZoneInfo.Local.IsInvalidTime(localDate) Then
         Console.WriteLine("{0} is an invalid time in the {1} zone.", _
                           localDate, _
                           TimeZoneInfo.Local.StandardName)
      End If
      Dim localDate2 As Date = DateTime.FromBinary(binLocal)
      Console.WriteLine("{0} = {1}: {2}", _
                        localDate, localDate2, localDate.Equals(localDate2))
   End Sub
End Module
' The example displays the following output:
'    3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone.
'    3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: False

    using System;

public class Example
{
   public static void Main()
   {
      DateTime localDate = new DateTime(2010, 3, 14, 2, 30, 0, DateTimeKind.Local);
      long binLocal = localDate.ToBinary();
      if (TimeZoneInfo.Local.IsInvalidTime(localDate))
         Console.WriteLine("{0} is an invalid time in the {1} zone.",
                           localDate,
                           TimeZoneInfo.Local.StandardName);

      DateTime localDate2 = DateTime.FromBinary(binLocal);
      Console.WriteLine("{0} = {1}: {2}",
                        localDate, localDate2, localDate.Equals(localDate2));
   }
}
// The example displays the following output:
//    3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone.
//    3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: False

版本注意事项

从 .NET Framework 2.0 版开始，DateTime 结构由一个 Kind 私有字段和一个 Ticks 私有字段串联组成，Kind 字段指示指定的时间是本地时间、协调世界时 (UTC) 还是两者皆否，而 Ticks 字段包含指定日期和时间的计时周期数，一个计时周期为 100 纳秒。计时周期数可通过 Ticks 属性访问，而 Kind 字段可通过 Kind 属性访问。 从 .NET Framework 2.0 版开始，DateTime 结构由一个 Kind 私有字段和一个 Ticks 私有字段串联组成，Kind 字段指示指定的时间是本地时间、协调世界时 (UTC) 还是两者皆否，而 Ticks 字段包含指定日期和时间的计时周期数，一个计时周期为 100 纳秒。计时周期数可通过 Ticks 属性访问，而 Kind 字段可通过 Kind 属性访问。

在 .NET Framework 2.0 之前，如果手动序列化 DateTime 对象而不是使用 System.Runtime.Serialization..::.ISerializable 之类的序列化接口，则只需要序列化 DateTime 中的 Ticks 数据。从 .NET Framework 2.0 开始，还必须序列化 Kind 数据。 在 .NET Framework 2.0 之前，如果手动序列化 DateTime 对象而不是使用 System.Runtime.Serialization..::.ISerializable 之类的序列化接口，则只需要序列化 DateTime 中的 Ticks 数据。从 .NET Framework 2.0 开始，还必须序列化 Kind 数据。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DateTime 结构
DateTime 成员
System 命名空间
ToBinary


DateTime ..::.FromFileTime 方法

DateTime
.
.
::
.
FromFileTime 方法
DateTime 结构

将指定的 Windows 文件时间转换为等效的本地时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromFileTime ( _
    fileTime As Long _
) As DateTime
public static DateTime FromFileTime(
    long fileTime
)
public:
static DateTime FromFileTime(
    long long fileTime
)
static member FromFileTime :
        fileTime:int64 -> DateTime

参数

fileTime
类型： System Int64
以计时周期表示的 Windows 文件时间。

返回值

类型： System DateTime
一个表示本地时间的对象，等效于由 fileTime 参数表示的日期和时间。
异常 | 条件
ArgumentOutOfRangeException | fileTime 小于零或表示大于 MaxValue 的时间。

Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。

fileTime 参数指定以 100 纳秒计时周期为单位表示的文件时间。

从 .NET Framework 2.0 版开始，返回值是 DateTime，它的 Kind 属性返回 Local。

对调用者的说明

通常，FromFileTime 方法还原由 ToFileTime 方法保存的 DateTime 值。但是，在以下情况下，这两个值可能不同： 通常，FromFileTime 方法还原由 ToFileTime 方法保存的 DateTime 值。但是，在以下情况下，这两个值可能不同：

  • 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。

  • 如果序列化的 DateTime 值表示本地时区中的无效时间。在这种情况下，ToFileTime 方法调整还原的 DateTime 值，以使它表示本地时区的有效时间。 如果序列化的 DateTime 值表示本地时区中的无效时间。在这种情况下，ToFileTime 方法调整还原的 DateTime 值，以使它表示本地时区的有效时间。

    例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。

    Module Example
   Public Sub Main()
      Dim date1 As New DateTime(2010, 3, 14, 2, 30, 00)
      Console.WriteLine("Invalid Time: {0}", TimeZoneInfo.Local.IsInvalidTime(date1))
      Dim ft As Long = date1.ToFileTime()
      Dim date2 As DateTime = DateTime.FromFileTime(ft)
      Console.WriteLine("{0} -> {1}", date1, date2)
   End Sub
End Module
' The example displays the following output:
'       Invalid Time: True
'       3/14/2010 2:30:00 AM -> 3/14/2010 3:30:00 AM

    using System;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2010, 3, 14, 2, 30, 00);
      Console.WriteLine("Invalid Time: {0}",
                        TimeZoneInfo.Local.IsInvalidTime(date1));
      long ft = date1.ToFileTime();
      DateTime date2 = DateTime.FromFileTime(ft);
      Console.WriteLine("{0} -> {1}", date1, date2);
   }
}
// The example displays the following output:
//       Invalid Time: True
//       3/14/2010 2:30:00 AM -> 3/14/2010 3:30:00 AM

下面的代码示例演示 FromFileTime 方法。

Public Function FileAge(ByVal fileCreationTime As Long) As System.TimeSpan
   Dim now As System.DateTime
   now = System.DateTime.Now

   Try
      Dim fCreationTime As System.DateTime
      Dim fAge As System.TimeSpan
      fCreationTime = System.DateTime.FromFileTime(fileCreationTime)
      fAge = now.Subtract(fCreationTime)
      Return fAge
   Catch exp As ArgumentOutOfRangeException
      ' fileCreationTime is not valid, so re-throw the exception.
      Throw
   End Try
End Function

        public System.TimeSpan FileAge(long fileCreationTime) {

            System.DateTime now = System.DateTime.Now;
            try {
                System.DateTime fCreationTime =
                    System.DateTime.FromFileTime(fileCreationTime);
                System.TimeSpan fileAge = now.Subtract(fCreationTime);
                return fileAge;
            }
            catch (ArgumentOutOfRangeException) {
                // fileCreationTime is not valid, so re-throw the exception.
                throw;
            }
        }

System::TimeSpan FileAge( long fileCreationTime )
{
   System::DateTime now = System::DateTime::Now;
   try
   {
      System::DateTime fCreationTime =
         System::DateTime::FromFileTime( fileCreationTime );
      System::TimeSpan fileAge = now.Subtract( fCreationTime );
      return fileAge;
   }
   catch ( ArgumentOutOfRangeException^ )
   {
      // fileCreationTime is not valid, so re-throw the exception.
      throw;
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
ToUniversalTime
GetUtcOffset


DateTime ..::.FromFileTimeUtc 方法

DateTime
.
.
::
.
FromFileTimeUtc 方法
DateTime 结构

将指定的 Windows 文件时间转换为等效的 UTC 时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromFileTimeUtc ( _
    fileTime As Long _
) As DateTime
public static DateTime FromFileTimeUtc(
    long fileTime
)
public:
static DateTime FromFileTimeUtc(
    long long fileTime
)
static member FromFileTimeUtc :
        fileTime:int64 -> DateTime

参数

fileTime
类型： System Int64
以计时周期表示的 Windows 文件时间。

返回值

类型： System DateTime
一个表示 UTC 时间的对象，等效于由 fileTime 参数表示的日期和时间。
异常 | 条件
ArgumentOutOfRangeException | fileTime 小于零或表示大于 MaxValue 的时间。

Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。

fileTime 参数指定以 100 纳秒计时周期为单位表示的文件时间。

从 .NET Framework 2.0 版开始，返回值是 DateTime，它的 Kind 属性返回 Utc。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
ToUniversalTime
GetUtcOffset
FromFileTime


DateTime ..::.FromOADate 方法

DateTime
.
.
::
.
FromOADate 方法
DateTime 结构

返回与指定的 OLE 自动化日期等效的 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromOADate ( _
    d As Double _
) As DateTime
public static DateTime FromOADate(
    double d
)
public:
static DateTime FromOADate(
    double d
)
static member FromOADate :
        d:float -> DateTime

参数

d
类型： System Double
OLE 自动化日期值。

返回值

类型： System DateTime
一个对象，它表示与 d 相同的日期和时间。
异常 | 条件
ArgumentException | 该日期不是有效的 OLE 自动化日期值。

d 参数是一个双精度浮点数字，它将日期表示为基础日期（1899 年 12 月 30 日午夜）之前或之后的天数。d 的符号和整数部分将日期编码为相对于 1899 年 12 月 30 日的正负日偏移量，而 d 的小数部分的绝对值将当天的时间编码为相对于午夜的小数日偏移量。d 必须为负 657435.0 到正 2958466.0 之间的值。 d 参数是一个双精度浮点数字，它将日期表示为基础日期（1899 年 12 月 30 日午夜）之前或之后的天数。d 的符号和整数部分将日期编码为相对于 1899 年 12 月 30 日的正负日偏移量，而 d 的小数部分的绝对值将当天的时间编码为相对于午夜的小数日偏移量。d 必须为负 657435.0 到正 2958466.0 之间的值。 d 参数是一个双精度浮点数字，它将日期表示为基础日期（1899 年 12 月 30 日午夜）之前或之后的天数。d 的符号和整数部分将日期编码为相对于 1899 年 12 月 30 日的正负日偏移量，而 d 的小数部分的绝对值将当天的时间编码为相对于午夜的小数日偏移量。d 必须为负 657435.0 到正 2958466.0 之间的值。

请注意，由于日期进行编码的方法的原因，1899 年 12 月 30 日当天的任何时间会有两种表示形式。例如，-0.5 和 0.5 都表示 1899 年 12 月 30 日的中午，因为从基准日期加或减零天仍然是基准日期，且从午夜的半天位移是中午。 请注意，由于日期进行编码的方法的原因，1899 年 12 月 30 日当天的任何时间会有两种表示形式。例如，-0.5 和 0.5 都表示 1899 年 12 月 30 日的中午，因为从基准日期加或减零天仍然是基准日期，且从午夜的半天位移是中午。

有关 OLE 自动化的更多信息，请参见 ToOADate 和 MSDN Online Library（位于 http://www.microsoft.com/china/msdn/library/default.aspx）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
ToOADate


DateTime ..::.GetDateTimeFormats 方法

DateTime
.
.
::
.
GetDateTimeFormats 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

将此实例的值转换为标准日期和时间格式说明符支持的所有字符串表示形式。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.GetDateTimeFormats 方法

DateTime
.
.
::
.
GetDateTimeFormats 方法
DateTime 结构

将此实例的值转换为标准日期和时间格式说明符支持的所有字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetDateTimeFormats As String()
public string[] GetDateTimeFormats()
public:
array<String^>^ GetDateTimeFormats()
member GetDateTimeFormats : unit -> string[]

返回值

类型：
array<
System String
>
[]
()
[]

字符串数组，其中每个元素都表示此实例的以标准日期和时间格式说明符之一进行格式设置的一个值。

DateTime..::.GetDateTimeFormats()()() 方法所返回的字符串数组相当于将通过单独调用 DateTime..::.GetDateTimeFormats(Char) 方法所返回的字符串数组与标准格式字符串 d、D、f、F、g、G、m、o、r、s、t、T、u、U 和 y 组合在一起。有关标准格式说明符的更多信息，请参见标准日期和时间格式字符串。 DateTime..::.GetDateTimeFormats()()() 方法所返回的字符串数组相当于将通过单独调用 DateTime..::.GetDateTimeFormats(Char) 方法所返回的字符串数组与标准格式字符串 d、D、f、F、g、G、m、o、r、s、t、T、u、U 和 y 组合在一起。有关标准格式说明符的更多信息，请参见标准日期和时间格式字符串。

返回值的每个元素的格式都是用当前区域性中的信息设置的。有关当前区域性的区域性特定格式设置信息的更多信息，请参见 CultureInfo..::.CurrentCulture。 返回值的每个元素的格式都是用当前区域性中的信息设置的。有关当前区域性的区域性特定格式设置信息的更多信息，请参见 CultureInfo..::.CurrentCulture。

说明 说明

因为此方法使用对区域性敏感的数据，您的应用程序不应假设对该方法的多个调用会返回相同的数据。如果当前区域性进行了更改，用户重写单个的区域性设置，或系统的区域性数据进行更新，则可以更改此方法返回的数据。 因为此方法使用对区域性敏感的数据，您的应用程序不应假设对该方法的多个调用会返回相同的数据。如果当前区域性进行了更改，用户重写单个的区域性设置，或系统的区域性数据进行更新，则可以更改此方法返回的数据。

下面的示例演示 DateTime..::.GetDateTimeFormats()()() 方法。它使用计算机的当前区域性（在本例中为 en-US）中所有可能的标准日期和时间格式来显示日期的字符串表示形式。 下面的示例演示 DateTime..::.GetDateTimeFormats()()() 方法。它使用计算机的当前区域性（在本例中为 en-US）中所有可能的标准日期和时间格式来显示日期的字符串表示形式。

Dim july28 As New DateTime(2009, 7, 28, 5, 23, 15, 16)
Dim july28Formats As String()
july28Formats = july28.GetDateTimeFormats()

' Print out july28 in all DateTime formats using the default culture.
For Each format As String In july28Formats
   Console.WriteLine(format)
Next

        DateTime july28 = new DateTime(2009, 7, 28, 5, 23, 15, 16);

        string[] july28Formats = july28.GetDateTimeFormats();

        // Print out july28 in all DateTime formats using the default culture.
        foreach (string format in july28Formats) {
            Console.WriteLine(format);
        }

DateTime july28 = DateTime(2009, 7, 28, 5, 23, 15, 16);
array<String^>^july28Formats = july28.GetDateTimeFormats();

// Print [Out] july28* in all DateTime formats using the default culture.
System::Collections::IEnumerator^ myEnum = july28Formats->GetEnumerator();
while ( myEnum->MoveNext() )
{
   String^ format = safe_cast<String^>(myEnum->Current);
   System::Console::WriteLine( format );
}

示例显示以下输出内容：

7/28/2009
7/28/09
07/28/09
07/28/2009
09/07/28
2009-07-28
28-Jul-09
Tuesday, July 28, 2009
July 28, 2009
Tuesday, 28 July, 2009
28 July, 2009
Tuesday, July 28, 2009 5:23 AM
Tuesday, July 28, 2009 05:23 AM
Tuesday, July 28, 2009 5:23
Tuesday, July 28, 2009 05:23
July 28, 2009 5:23 AM
July 28, 2009 05:23 AM
July 28, 2009 5:23
July 28, 2009 05:23
Tuesday, 28 July, 2009 5:23 AM
Tuesday, 28 July, 2009 05:23 AM
Tuesday, 28 July, 2009 5:23
Tuesday, 28 July, 2009 05:23
28 July, 2009 5:23 AM
28 July, 2009 05:23 AM
28 July, 2009 5:23
28 July, 2009 05:23
Tuesday, July 28, 2009 5:23:15 AM
Tuesday, July 28, 2009 05:23:15 AM
Tuesday, July 28, 2009 5:23:15
Tuesday, July 28, 2009 05:23:15
July 28, 2009 5:23:15 AM
July 28, 2009 05:23:15 AM
July 28, 2009 5:23:15
July 28, 2009 05:23:15
Tuesday, 28 July, 2009 5:23:15 AM
Tuesday, 28 July, 2009 05:23:15 AM
Tuesday, 28 July, 2009 5:23:15
Tuesday, 28 July, 2009 05:23:15
28 July, 2009 5:23:15 AM
28 July, 2009 05:23:15 AM
28 July, 2009 5:23:15
28 July, 2009 05:23:15
7/28/2009 5:23 AM
7/28/2009 05:23 AM
7/28/2009 5:23
7/28/2009 05:23
7/28/09 5:23 AM
7/28/09 05:23 AM
7/28/09 5:23
7/28/09 05:23
07/28/09 5:23 AM
07/28/09 05:23 AM
07/28/09 5:23
07/28/09 05:23
07/28/2009 5:23 AM
07/28/2009 05:23 AM
07/28/2009 5:23
07/28/2009 05:23
09/07/28 5:23 AM
09/07/28 05:23 AM
09/07/28 5:23
09/07/28 05:23
2009-07-28 5:23 AM
2009-07-28 05:23 AM
2009-07-28 5:23
2009-07-28 05:23
28-Jul-09 5:23 AM
28-Jul-09 05:23 AM
28-Jul-09 5:23
28-Jul-09 05:23
7/28/2009 5:23:15 AM
7/28/2009 05:23:15 AM
7/28/2009 5:23:15
7/28/2009 05:23:15
7/28/09 5:23:15 AM
7/28/09 05:23:15 AM
7/28/09 5:23:15
7/28/09 05:23:15
07/28/09 5:23:15 AM
07/28/09 05:23:15 AM
07/28/09 5:23:15
07/28/09 05:23:15
07/28/2009 5:23:15 AM
07/28/2009 05:23:15 AM
07/28/2009 5:23:15
07/28/2009 05:23:15
09/07/28 5:23:15 AM
09/07/28 05:23:15 AM
09/07/28 5:23:15
09/07/28 05:23:15
2009-07-28 5:23:15 AM
2009-07-28 05:23:15 AM
2009-07-28 5:23:15
2009-07-28 05:23:15
28-Jul-09 5:23:15 AM
28-Jul-09 05:23:15 AM
28-Jul-09 5:23:15
28-Jul-09 05:23:15
July 28
July 28
2009-07-28T05:23:15.0160000
2009-07-28T05:23:15.0160000
Tue, 28 Jul 2009 05:23:15 GMT
Tue, 28 Jul 2009 05:23:15 GMT
2009-07-28T05:23:15
5:23 AM
05:23 AM
5:23
05:23
5:23:15 AM
05:23:15 AM
5:23:15
05:23:15
2009-07-28 05:23:15Z
Tuesday, July 28, 2009 12:23:15 PM
Tuesday, July 28, 2009 12:23:15 PM
Tuesday, July 28, 2009 12:23:15
Tuesday, July 28, 2009 12:23:15
July 28, 2009 12:23:15 PM
July 28, 2009 12:23:15 PM
July 28, 2009 12:23:15
July 28, 2009 12:23:15
Tuesday, 28 July, 2009 12:23:15 PM
Tuesday, 28 July, 2009 12:23:15 PM
Tuesday, 28 July, 2009 12:23:15
Tuesday, 28 July, 2009 12:23:15
28 July, 2009 12:23:15 PM
28 July, 2009 12:23:15 PM
28 July, 2009 12:23:15
28 July, 2009 12:23:15
July, 2009
July, 2009

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
GetDateTimeFormats 重载
System 命名空间


DateTime ..::.GetDateTimeFormats 方法 (Char)

DateTime
.
.
::
.
GetDateTimeFormats 方法 (Char)
DateTime 结构

将此实例的值转换为指定的标准日期和时间格式说明符支持的所有字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetDateTimeFormats ( _
    format As Char _
) As String()
public string[] GetDateTimeFormats(
    char format
)
public:
array<String^>^ GetDateTimeFormats(
    wchar_t format
)
member GetDateTimeFormats :
        format:char -> string[]

参数

format
类型： System Char
标准日期和时间格式的字符串。（请参见标准日期和时间格式字符串。） 标准日期和时间格式的字符串。（请参见标准日期和时间格式字符串。）

返回值

类型：
array<
System String
>
[]
()
[]

字符串数组，其中每个元素都表示此实例的以 format 标准日期和时间格式说明符之一进行格式设置的一个值。
异常 | 条件
FormatException | format 不是有效的标准日期和时间格式说明符。

format 参数可以是任意标准日期和时间格式说明符，其中包括 d、D、f、F、g、G、M（或 m）、O（或 o）、R（或 r）、s、t、T、u、U 和 Y（或 y）。有关更多信息，请参见标准日期和时间格式字符串。 format 参数可以是任意标准日期和时间格式说明符，其中包括 d、D、f、F、g、G、M（或 m）、O（或 o）、R（或 r）、s、t、T、u、U 和 Y（或 y）。有关更多信息，请参见标准日期和时间格式字符串。 format 参数可以是任意标准日期和时间格式说明符，其中包括 d、D、f、F、g、G、M（或 m）、O（或 o）、R（或 r）、s、t、T、u、U 和 Y（或 y）。有关更多信息，请参见标准日期和时间格式字符串。

返回值的每个元素的格式都是用当前区域性中的信息设置的。有关当前区域性的区域性特定格式设置信息的更多信息，请参见 CultureInfo..::.CurrentCulture。 返回值的每个元素的格式都是用当前区域性中的信息设置的。有关当前区域性的区域性特定格式设置信息的更多信息，请参见 CultureInfo..::.CurrentCulture。

说明 说明

因为此方法使用对区域性敏感的数据，您的应用程序不应假设对该方法的多个调用会返回相同的数据。如果当前区域性进行了更改，用户重写单个的区域性设置，或系统的区域性数据进行更新，则可以更改此方法返回的数据。 因为此方法使用对区域性敏感的数据，您的应用程序不应假设对该方法的多个调用会返回相同的数据。如果当前区域性进行了更改，用户重写单个的区域性设置，或系统的区域性数据进行更新，则可以更改此方法返回的数据。

下面的代码示例说明了 GetDateTimeFormats(Char) 方法。它使用当前区域性的长日期格式说明符 ("D") 显示日期的字符串表示形式。 下面的代码示例说明了 GetDateTimeFormats(Char) 方法。它使用当前区域性的长日期格式说明符 ("D") 显示日期的字符串表示形式。

        Dim july28 As Date = #7/28/2009 5:23:15#

        ' Get the long date formats using the current culture.
        Dim longJuly28Formats() As String = july28.GetDateTimeFormats("D"c)

        ' Display july28 in all long date formats.
        For Each format As String In longJuly28Formats
            Console.WriteLine(format)
      Next
      ' The example displays the following output:
      '       Tuesday, July 28, 2009
      '       July 28, 2009
      '       Tuesday, 28 July, 2009
      '       28 July, 2009

        DateTime july28 = new DateTime(2009, 7, 28, 5, 23, 15);

        // Get the long date formats using the current culture.
        string [] longJuly28Formats =
                    july28.GetDateTimeFormats('D');

        // Display july28 in all long date formats.
        foreach (string format in longJuly28Formats) {
            Console.WriteLine(format);
        }
      // The example displays the following output:
      //       Tuesday, July 28, 2009
      //       July 28, 2009
      //       Tuesday, 28 July, 2009
      //       28 July, 2009

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
GetDateTimeFormats 重载
System 命名空间


DateTime ..::.GetDateTimeFormats 方法 (IFormatProvider)

DateTime
.
.
::
.
GetDateTimeFormats 方法 (IFormatProvider)
DateTime 结构

将此实例的值转换为标准日期和时间格式说明符和指定的区域性特定格式信息支持的所有字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetDateTimeFormats ( _
    provider As IFormatProvider _
) As String()
public string[] GetDateTimeFormats(
    IFormatProvider provider
)
public:
array<String^>^ GetDateTimeFormats(
    IFormatProvider^ provider
)
member GetDateTimeFormats :
        provider:IFormatProvider -> string[]

参数

provider
类型： System IFormatProvider
一个对象，它提供有关此实例的区域性特定格式设置信息。

返回值

类型：
array<
System String
>
[]
()
[]

字符串数组，其中每个元素都表示此实例的以标准日期和时间格式说明符之一进行格式设置的一个值。

DateTime..::.GetDateTimeFormats(IFormatProvider) 方法所返回的字符串数组相当于将通过单独调用 DateTime..::.GetDateTimeFormats(Char, IFormatProvider) 方法所返回的字符串数组与标准格式字符串 d、D、f、F、g、G、m、o、r、s、t、T、u、U 和 y 组合在一起。有关标准格式说明符的更多信息，请参见标准日期和时间格式字符串。 DateTime..::.GetDateTimeFormats(IFormatProvider) 方法所返回的字符串数组相当于将通过单独调用 DateTime..::.GetDateTimeFormats(Char, IFormatProvider) 方法所返回的字符串数组与标准格式字符串 d、D、f、F、g、G、m、o、r、s、t、T、u、U 和 y 组合在一起。有关标准格式说明符的更多信息，请参见标准日期和时间格式字符串。

返回值的每个元素都使用 provider 所提供的区域性特定的信息设定格式。

说明 说明

因为此方法使用对区域性敏感的数据，您的应用程序不应假设对该方法的多个调用会返回相同的数据，除非 provider 是代表固定区域性的 CultureInfo 对象。如果用户重写 provider 的单个区域性设置，或系统的 provider 区域性数据进行更新，则可以更改此方法返回的数据。 因为此方法使用对区域性敏感的数据，您的应用程序不应假设对该方法的多个调用会返回相同的数据，除非 provider 是代表固定区域性的 CultureInfo 对象。如果用户重写 provider 的单个区域性设置，或系统的 provider 区域性数据进行更新，则可以更改此方法返回的数据。

下面的示例演示 DateTime..::.GetDateTimeFormats(IFormatProvider) 方法。它使用 fr-FR 区域性的所有可能的标准日期和时间格式来显示日期的字符串表示形式。 下面的示例演示 DateTime..::.GetDateTimeFormats(IFormatProvider) 方法。它使用 fr-FR 区域性的所有可能的标准日期和时间格式来显示日期的字符串表示形式。

Dim july28 As New DateTime(2009, 7, 28, 5, 23, 15, 16)
Dim culture As New System.Globalization.CultureInfo("fr-FR", True)

Dim july28Formats As String()
' Get the short date formats using the "fr-FR" culture.
july28Formats = july28.GetDateTimeFormats(culture)

' Print out july28 in various formats using "fr-FR" culture.
For Each format As String In july28Formats
   Console.WriteLine(format)
Next

        DateTime july28 = new DateTime(2009, 7, 28, 5, 23, 15, 16);

        IFormatProvider culture =
            new System.Globalization.CultureInfo("fr-FR", true);
        // Get the short date formats using the "fr-FR" culture.
        string [] frenchJuly28Formats =
                    july28.GetDateTimeFormats(culture);

        // Display july28 in various formats using "fr-FR" culture.
        foreach (string format in frenchJuly28Formats) {
            Console.WriteLine(format);
        }

DateTime juil28 = DateTime(2009, 7, 28, 5, 23, 15, 16);
IFormatProvider^ culture = gcnew System::Globalization::CultureInfo("fr-FR", true );

// Get the short date formats using the S"fr-FR" culture.
array<String^>^frenchJuly28Formats = juil28.GetDateTimeFormats(culture );

// Print [Out] july28* in all DateTime formats using fr-FR culture.
System::Collections::IEnumerator^ myEnum2 = frenchJuly28Formats->GetEnumerator();
while ( myEnum2->MoveNext() )
{
   String^ format = safe_cast<String^>(myEnum2->Current);
   System::Console::WriteLine(format );
}

示例显示以下输出内容：

28/07/2009
28/07/09
28.07.09
28-07-09
2009-07-28
mardi 28 juillet 2009
28 juil.09
28 juillet 2009
mardi 28 juillet 2009 05:23
mardi 28 juillet 2009 5:23
mardi 28 juillet 2009 05.23
mardi 28 juillet 2009 05 h 23
28 juil.09 05:23
28 juil.09 5:23
28 juil.09 05.23
28 juil.09 05 h 23
28 juillet 2009 05:23
28 juillet 2009 5:23
28 juillet 2009 05.23
28 juillet 2009 05 h 23
mardi 28 juillet 2009 05:23:15
mardi 28 juillet 2009 5:23:15
mardi 28 juillet 2009 05.23
mardi 28 juillet 2009 05 h 23
28 juil.09 05:23:15
28 juil.09 5:23:15
28 juil.09 05.23
28 juil.09 05 h 23
28 juillet 2009 05:23:15
28 juillet 2009 5:23:15
28 juillet 2009 05.23
28 juillet 2009 05 h 23
28/07/2009 05:23
28/07/2009 5:23
28/07/2009 05.23
28/07/2009 05 h 23
28/07/09 05:23
28/07/09 5:23
28/07/09 05.23
28/07/09 05 h 23
28.07.09 05:23
28.07.09 5:23
28.07.09 05.23
28.07.09 05 h 23
28-07-09 05:23
28-07-09 5:23
28-07-09 05.23
28-07-09 05 h 23
2009-07-28 05:23
2009-07-28 5:23
2009-07-28 05.23
2009-07-28 05 h 23
28/07/2009 05:23:15
28/07/2009 5:23:15
28/07/2009 05.23
28/07/2009 05 h 23
28/07/09 05:23:15
28/07/09 5:23:15
28/07/09 05.23
28/07/09 05 h 23
28.07.09 05:23:15
28.07.09 5:23:15
28.07.09 05.23
28.07.09 05 h 23
28-07-09 05:23:15
28-07-09 5:23:15
28-07-09 05.23
28-07-09 05 h 23
2009-07-28 05:23:15
2009-07-28 5:23:15
2009-07-28 05.23
2009-07-28 05 h 23
28 juillet
28 juillet
2009-07-28T05:23:15.0160000
2009-07-28T05:23:15.0160000
Tue, 28 Jul 2009 05:23:15 GMT
Tue, 28 Jul 2009 05:23:15 GMT
2009-07-28T05:23:15
05:23
5:23
05.23
05 h 23
05:23:15
5:23:15
05.23
05 h 23
2009-07-28 05:23:15Z
mardi 28 juillet 2009 12:23:15
mardi 28 juillet 2009 12:23:15
mardi 28 juillet 2009 12.23
mardi 28 juillet 2009 12 h 23
28 juil.09 12:23:15
28 juil.09 12:23:15
28 juil.09 12.23
28 juil.09 12 h 23
28 juillet 2009 12:23:15
28 juillet 2009 12:23:15
28 juillet 2009 12.23
28 juillet 2009 12 h 23
juillet 2009
juillet 2009

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
GetDateTimeFormats 重载
System 命名空间


DateTime ..::.GetDateTimeFormats 方法 (Char, IFormatProvider)

DateTime
.
.
::
.
GetDateTimeFormats 方法 (Char, IFormatProvider)
DateTime 结构

将此实例的值转换为指定的标准日期和时间格式说明符和区域性特定格式信息支持的所有字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetDateTimeFormats ( _
    format As Char, _
    provider As IFormatProvider _
) As String()
public string[] GetDateTimeFormats(
    char format,
    IFormatProvider provider
)
public:
array<String^>^ GetDateTimeFormats(
    wchar_t format,
    IFormatProvider^ provider
)
member GetDateTimeFormats :
        format:char *
        provider:IFormatProvider -> string[]

参数

format
类型： System Char
日期和时间格式的字符串。
provider
类型： System IFormatProvider
一个对象，它提供有关此实例的区域性特定格式设置信息。

返回值

类型：
array<
System String
>
[]
()
[]

字符串数组，其中每个元素都表示此实例的以标准日期和时间格式说明符之一进行格式设置的一个值。
异常 | 条件
FormatException | format 不是有效的标准日期和时间格式说明符。

format 参数可以是任意标准日期和时间格式说明符，其中包括 d、D、f、F、g、G、M（或 m）、O（或 o）、R（或 r）、s、t、T、u、U 和 Y（或 y）。有关更多信息，请参见标准日期和时间格式字符串。 format 参数可以是任意标准日期和时间格式说明符，其中包括 d、D、f、F、g、G、M（或 m）、O（或 o）、R（或 r）、s、t、T、u、U 和 Y（或 y）。有关更多信息，请参见标准日期和时间格式字符串。 format 参数可以是任意标准日期和时间格式说明符，其中包括 d、D、f、F、g、G、M（或 m）、O（或 o）、R（或 r）、s、t、T、u、U 和 Y（或 y）。有关更多信息，请参见标准日期和时间格式字符串。

返回值的每个元素都使用 provider 所提供的区域性特定的信息设定格式。

说明 说明

因为此方法使用对区域性敏感的数据，您的应用程序不应假设对该方法的多个调用会返回相同的数据，除非 provider 是代表固定区域性的 CultureInfo 对象。如果用户重写 provider 的单个区域性设置，或系统的 provider 区域性数据进行更新，则可以更改此方法返回的数据。 因为此方法使用对区域性敏感的数据，您的应用程序不应假设对该方法的多个调用会返回相同的数据，除非 provider 是代表固定区域性的 CultureInfo 对象。如果用户重写 provider 的单个区域性设置，或系统的 provider 区域性数据进行更新，则可以更改此方法返回的数据。

下面的示例说明 GetDateTimeFormats(Char, IFormatProvider) 方法。它使用 fr-FR 区域性的短日期格式说明符 ("d") 显示日期的字符串表示形式。 下面的示例说明 GetDateTimeFormats(Char, IFormatProvider) 方法。它使用 fr-FR 区域性的短日期格式说明符 ("d") 显示日期的字符串表示形式。

        Dim july28 As Date = #7/28/2009 5:23:15#

        Dim culture As IFormatProvider = New System.Globalization.CultureInfo("fr-FR", True)
        ' Get the short date formats using the "fr-FR" culture.
        Dim frenchJuly28Formats() As String = july28.GetDateTimeFormats("d"c, culture)

        ' Display july28 in short date formats using "fr-FR" culture.
        For Each format As String In frenchJuly28Formats
            Console.WriteLine(format)
        Next
      ' The example displays the following output:
      '       28/07/2009
      '       28/07/09
      '       28.07.09
      '       28-07-09
      '       2009-07-28

        DateTime july28 = new DateTime(2009, 7, 28, 5, 23, 15);

        IFormatProvider culture =
            new System.Globalization.CultureInfo("fr-FR", true);
        // Get the short date formats using the "fr-FR" culture.
        string [] frenchJuly28Formats =
                    july28.GetDateTimeFormats('d', culture);

        // Display july28 in short date formats using "fr-FR" culture.
        foreach (string format in frenchJuly28Formats) {
            Console.WriteLine(format);
        }
      // The example displays the following output:
      //       28/07/2009
      //       28/07/09
      //       28.07.09
      //       28-07-09
      //       2009-07-28

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
GetDateTimeFormats 重载
System 命名空间


DateTime ..::.GetHashCode 方法

DateTime
.
.
::
.
GetHashCode 方法
DateTime 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.GetTypeCode 方法

DateTime
.
.
::
.
GetTypeCode 方法
DateTime 结构

返回值类型 DateTime 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.DateTime。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToBoolean 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Boolean
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToByte 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Byte
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToChar 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Char
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToDateTime 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

返回当前 DateTime 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System DateTime
当前对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToDecimal 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Decimal
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToDouble 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Double
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToInt16 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Int16
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToInt32 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Int32
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToInt64 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Int64
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToSByte 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System SByte
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToSingle 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Single
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToType 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

将当前的 DateTime 对象转换为指定类型的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
所需类型。
provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Object
由 type 参数指定的类型的对象，其值与当前 DateTime 对象等效。

实现

异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | DateTime 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Convert


DateTime ..::.IConvertible ..::.ToUInt16 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System UInt16
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToUInt32 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System UInt32
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IConvertible ..::.ToUInt64 方法

DateTime
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
DateTime 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System UInt64
未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IsDaylightSavingTime 方法

DateTime
.
.
::
.
IsDaylightSavingTime 方法
DateTime 结构

指示此 DateTime 实例是否在当前时区的夏时制范围内。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsDaylightSavingTime As Boolean
public bool IsDaylightSavingTime()
public:
bool IsDaylightSavingTime()
member IsDaylightSavingTime : unit -> bool

返回值

类型： System Boolean
如果 Kind 为 Local 或 Unspecified 并且此 DateTime 实例的值在当前时区的夏时制范围以内，则为 true。如果 Kind 为 Utc，则返回 false。 如果 Kind 为 Local 或 Unspecified 并且此 DateTime 实例的值在当前时区的夏时制范围以内，则为 true。如果 Kind 为 Utc，则返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.ISerializable ..::.GetObjectData 方法

DateTime
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
DateTime 结构

使用序列化当前 DateTime 对象所需要的数据来填充 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
private:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
private override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要填充数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
此序列化的目标。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 此序列化的目标。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法使用 Ticks 和 Kind 属性值填充 info 参数。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.IsLeapYear 方法

DateTime
.
.
::
.
IsLeapYear 方法
DateTime 结构

返回指定的年份是否为闰年的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsLeapYear ( _
    year As Integer _
) As Boolean
public static bool IsLeapYear(
    int year
)
public:
static bool IsLeapYear(
    int year
)
static member IsLeapYear :
        year:int -> bool

参数

year
类型： System Int32
四位数年份。

返回值

类型： System Boolean
如果 year 为闰年，则为 true；否则为 false。
异常 | 条件
ArgumentOutOfRangeException | year 小于 1 或大于 9999。

year 被指定为以 10 为基数的四位数字，例如 1996。

year 始终被解释为公历中的年。若要确定特定年份在其他日历中是否为闰年，请调用日历对象的 IsLeapYear 方法。 year 始终被解释为公历中的年。若要确定特定年份在其他日历中是否为闰年，请调用日历对象的 IsLeapYear 方法。

下面的示例使用 IsLeapYear 方法确定 1994 到 2014 之间哪些年份是闰年。该示例还演示使用 AddYears 方法将年添加到闰日后的结果。 下面的示例使用 IsLeapYear 方法确定 1994 到 2014 之间哪些年份是闰年。该示例还演示使用 AddYears 方法将年添加到闰日后的结果。

Module IsLeapYear
   Public Sub Main()
      For year As Integer = 1994 to 2014
         If DateTime.IsLeapYear(year) Then
            Console.WriteLine("{0} is a leap year.", year)
            Dim leapDay As New Date(year, 2, 29)
            Dim nextYear As Date = leapDay.AddYears(1)
            Console.WriteLine("   One year from {0} is {1}.", _
                              leapDay.ToString("d"), _
                              nextYear.ToString("d"))
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'       1996 is a leap year.
'          One year from 2/29/1996 is 2/28/1997.
'       2000 is a leap year.
'          One year from 2/29/2000 is 2/28/2001.
'       2004 is a leap year.
'          One year from 2/29/2004 is 2/28/2005.
'       2008 is a leap year.
'          One year from 2/29/2008 is 2/28/2009.
'       2012 is a leap year.
'          One year from 2/29/2012 is 2/28/2013.

using System;

public class IsLeapYear
{
   public static void Main()
   {
      for (int year = 1994; year <= 2014; year++)
      {
         if (DateTime.IsLeapYear(year))
         {
            Console.WriteLine("{0} is a leap year.", year);
            DateTime leapDay = new DateTime(year, 2, 29);
            DateTime nextYear = leapDay.AddYears(1);
            Console.WriteLine("   One year from {0} is {1}.",
                              leapDay.ToString("d"),
                              nextYear.ToString("d"));
         }
      }
   }
}
// The example produces the following output:
//       1996 is a leap year.
//          One year from 2/29/1996 is 2/28/1997.
//       2000 is a leap year.
//          One year from 2/29/2000 is 2/28/2001.
//       2004 is a leap year.
//          One year from 2/29/2004 is 2/28/2005.
//       2008 is a leap year.
//          One year from 2/29/2008 is 2/28/2009.
//       2012 is a leap year.
//          One year from 2/29/2012 is 2/28/2013.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Parse 方法

DateTime
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

将日期和时间的指定字符串表示形式转换为其等效的 DateTime。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间
TryParse


DateTime ..::.Parse 方法 (String)

DateTime
.
.
::
.
Parse 方法 (String)
DateTime 结构

将日期和时间的指定字符串表示形式转换为其等效的 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As DateTime
public static DateTime Parse(
    string s
)
public:
static DateTime Parse(
    String^ s
)
static member Parse :
        s:string -> DateTime

参数

s
类型： System String
包含要转换的日期和时间的字符串。

返回值

类型： System DateTime
一个对象，它等效于 s 中包含的日期和时间。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 中不包含日期和时间的有效字符串表示形式。

DateTime..::.Parse(String) 方法尝试将日期和时间值的字符串表示形式转换为其等效的 DateTime。要分析的字符串可以为下列任意形式： DateTime..::.Parse(String) 方法尝试将日期和时间值的字符串表示形式转换为其等效的 DateTime。要分析的字符串可以为下列任意形式：

  • 包含日期和时间组成部分的字符串。

  • 包含日期但不包含时间组成部分的字符串。

  • 包含时间但不包含日期组成部分的字符串。

  • 包含时区信息且符合 ISO 8601 要求的字符串。例如，下面两个字符串中的第一个指定协调世界时 (UTC)；第二个指定比 UTC 早七个小时的时区的时间： 包含时区信息且符合 ISO 8601 要求的字符串。例如，下面两个字符串中的第一个指定协调世界时 (UTC)；第二个指定比 UTC 早七个小时的时区的时间：

    2008-11-01T19:35:00.0000000Z

  • 包含 GMT 指示符且符合 RFC 1123 时间格式的字符串。例如： 包含 GMT 指示符且符合 RFC 1123 时间格式的字符串。例如：

    Sat, 01 Nov 2008 19:35:00 GMT

  • 包含日期和时间以及时区偏移量信息的字符串。例如： 包含日期和时间以及时区偏移量信息的字符串。例如：

    03/01/2009 05:42:00 -5:00

此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。

重要说明 重要事项

由于日期和时间的字符串表示形式必须符合可识别的模式，因此在调用 Parse(String) 方法分析用户输入时，应用程序始终应使用异常处理。或者，可以调用 DateTime..::.TryParse(String, DateTime%) 方法来分析日期和时间字符串并返回一个指示分析操作是否成功的值。 由于日期和时间的字符串表示形式必须符合可识别的模式，因此在调用 Parse(String) 方法分析用户输入时，应用程序始终应使用异常处理。或者，可以调用 DateTime..::.TryParse(String, DateTime%) 方法来分析日期和时间字符串并返回一个指示分析操作是否成功的值。

字符串 s 是使用当前 DateTimeFormatInfo 对象中的格式设置信息分析的，该信息由当前线程的区域性隐式提供。s 参数所包含的日期和时间的表示形式必须使用当前区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。 字符串 s 是使用当前 DateTimeFormatInfo 对象中的格式设置信息分析的，该信息由当前线程的区域性隐式提供。s 参数所包含的日期和时间的表示形式必须使用当前区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。

重要说明 重要事项

由于 Parse(String) 方法尝试使用当前区域性的格式设置规则来分析日期和时间的字符串表示形式，因此尝试跨不同区域性分析特定的字符串可能会失败或返回不同的结果。如果要跨不同的区域设置分析特定的日期和时间格式，请使用 DateTime..::.Parse(String, IFormatProvider) 方法或 ParseExact 方法的重载之一，并提供格式说明符。 由于 Parse(String) 方法尝试使用当前区域性的格式设置规则来分析日期和时间的字符串表示形式，因此尝试跨不同区域性分析特定的字符串可能会失败或返回不同的结果。如果要跨不同的区域设置分析特定的日期和时间格式，请使用 DateTime..::.Parse(String, IFormatProvider) 方法或 ParseExact 方法的重载之一，并提供格式说明符。

大多数情况下，Parse(String) 方法返回一个其 Kind 属性为 DateTimeKind..::.Unspecified 的 DateTime 值。但是，如果要分析的字符串包含 ISO 8601 所定义的时区信息或者包含旧的 GMT 指示符，则 Parse(String) 方法将执行任何必要的时间转换，并返回一个其日期和时间反映本地时间并且其 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值。下面的示例演示这些字符串表示形式。 大多数情况下，Parse(String) 方法返回一个其 Kind 属性为 DateTimeKind..::.Unspecified 的 DateTime 值。但是，如果要分析的字符串包含 ISO 8601 所定义的时区信息或者包含旧的 GMT 指示符，则 Parse(String) 方法将执行任何必要的时间转换，并返回一个其日期和时间反映本地时间并且其 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值。下面的示例演示这些字符串表示形式。 大多数情况下，Parse(String) 方法返回一个其 Kind 属性为 DateTimeKind..::.Unspecified 的 DateTime 值。但是，如果要分析的字符串包含 ISO 8601 所定义的时区信息或者包含旧的 GMT 指示符，则 Parse(String) 方法将执行任何必要的时间转换，并返回一个其日期和时间反映本地时间并且其 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值。下面的示例演示这些字符串表示形式。

Dim dateStrings() As String = {"2008-05-01T07:34:42-5:00", _
                               "2008-05-01 7:34:42Z", _
                               "Thu, 01 May 2008 07:34:42 GMT"}

For Each dateString As String In dateStrings
   Dim convertedDate As Date = Date.Parse(dateString)
   Console.WriteLine("Converted {0} to {1} time {2}.", _
                     dateString, _
                     convertedDate.Kind.ToString(), _
                     convertedDate)
Next
' These calls to the DateTime.Parse method display the following output:
'    Converted 2008-05-01T07:34:42-5:00 to Local time 5/1/2008 5:34:42 AM.
'    Converted 2008-05-01 7:34:42Z to Local time 5/1/2008 12:34:42 AM.
'    Converted Thu, 01 May 2008 07:34:42 GMT to Local time 5/1/2008 12:34:42 AM.

string[] dateStrings = {"2008-05-01T07:34:42-5:00",
                        "2008-05-01 7:34:42Z",
                        "Thu, 01 May 2008 07:34:42 GMT"};
foreach (string dateString in dateStrings)
{
   DateTime convertedDate = DateTime.Parse(dateString);
   Console.WriteLine("Converted {0} to {1} time {2}.",
                     dateString,
                     convertedDate.Kind.ToString(),
                     convertedDate);
}
// These calls to the DateTime.Parse method display the following output:
//    Converted 2008-05-01T07:34:42-5:00 to Local time 5/1/2008 5:34:42 AM.
//    Converted 2008-05-01 7:34:42Z to Local time 5/1/2008 12:34:42 AM.
//    Converted Thu, 01 May 2008 07:34:42 GMT to Local time 5/1/2008 12:34:42 AM.

对调用者的说明

格式设置受当前 DateTimeFormatInfo 对象属性的影响，默认情况下，这些属性是从“控制面板”中的“区域和语言选项”项派生的。Parse 方法会意外引发 FormatException 的一个原因是当前 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性是否设置为同一值。 格式设置受当前 DateTimeFormatInfo 对象属性的影响，默认情况下，这些属性是从“控制面板”中的“区域和语言选项”项派生的。Parse 方法会意外引发 FormatException 的一个原因是当前 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性是否设置为同一值。

下面的示例演示 Parse(String) 方法。它使用 en-US 区域性（即用于生成此示例输出的计算机的当前线程区域性）的格式设置约定来分析多个日期和时间值的字符串表示形式。它处理该方法尝试使用其他区域性的格式设置约定来分析日期和时间的字符串表示形式时所引发的 FormatException。此外，它还演示如何成功地分析未使用当前线程区域性的格式设置约定的日期和时间值。 下面的示例演示 Parse(String) 方法。它使用 en-US 区域性（即用于生成此示例输出的计算机的当前线程区域性）的格式设置约定来分析多个日期和时间值的字符串表示形式。它处理该方法尝试使用其他区域性的格式设置约定来分析日期和时间的字符串表示形式时所引发的 FormatException。此外，它还演示如何成功地分析未使用当前线程区域性的格式设置约定的日期和时间值。 下面的示例演示 Parse(String) 方法。它使用 en-US 区域性（即用于生成此示例输出的计算机的当前线程区域性）的格式设置约定来分析多个日期和时间值的字符串表示形式。它处理该方法尝试使用其他区域性的格式设置约定来分析日期和时间的字符串表示形式时所引发的 FormatException。此外，它还演示如何成功地分析未使用当前线程区域性的格式设置约定的日期和时间值。 下面的示例演示 Parse(String) 方法。它使用 en-US 区域性（即用于生成此示例输出的计算机的当前线程区域性）的格式设置约定来分析多个日期和时间值的字符串表示形式。它处理该方法尝试使用其他区域性的格式设置约定来分析日期和时间的字符串表示形式时所引发的 FormatException。此外，它还演示如何成功地分析未使用当前线程区域性的格式设置约定的日期和时间值。

Imports System.Globalization

Class DateTimeParser
   Public Shared Sub Main()
      ' Assume the current culture is en-US.
      ' The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.

      ' Use standard en-US date and time value
      Dim dateValue As Date
      Dim dateString As String = "2/16/2008 12:15:12 PM"
      Try
         dateValue = Date.Parse(dateString)
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try

      ' Reverse month and day to conform to the fr-FR culture.
      ' The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.
      dateString = "16/02/2008 12:15:12"
      Try
         dateValue = Date.Parse(dateString)
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try

      ' Call another overload of Parse to successfully convert string
      ' formatted according to conventions of fr-FR culture.
      Try
         dateValue = Date.Parse(dateString, New CultureInfo("fr-FR", False))
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try

      ' Parse string with date but no time component.
      dateString = "2/16/2008"
      Try
         dateValue = Date.Parse(dateString)
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try
   End Sub
End Class
' The example displays the following output to the console:
'       '2/16/2008 12:15:12 PM' converted to 2/16/2008 12:15:12 PM.
'       Unable to convert '16/02/2008 12:15:12'.
'       '16/02/2008 12:15:12' converted to 2/16/2008 12:15:12 PM.
'       '2/16/2008' converted to 2/16/2008 12:00:00 AM.

using System;
using System.Globalization;

public class DateTimeParser
{
   public static void Main()
   {
      // Assume the current culture is en-US.
      // The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.

      // Use standard en-US date and time value
      DateTime dateValue;
      string dateString = "2/16/2008 12:15:12 PM";
      try {
         dateValue = DateTime.Parse(dateString);
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }

      // Reverse month and day to conform to the fr-FR culture.
      // The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.
      dateString = "16/02/2008 12:15:12";
      try {
         dateValue = DateTime.Parse(dateString);
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }

      // Call another overload of Parse to successfully convert string
      // formatted according to conventions of fr-FR culture.
      try {
         dateValue = DateTime.Parse(dateString, new CultureInfo("fr-FR", false));
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }

      // Parse string with date but no time component.
      dateString = "2/16/2008";
      try {
         dateValue = DateTime.Parse(dateString);
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }
   }
}
// The example displays the following output to the console:
//       '2/16/2008 12:15:12 PM' converted to 2/16/2008 12:15:12 PM.
//       Unable to convert '16/02/2008 12:15:12'.
//       '16/02/2008 12:15:12' converted to 2/16/2008 12:15:12 PM.
//       '2/16/2008' converted to 2/16/2008 12:00:00 AM.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Parse 重载
System 命名空间
TryParse
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.Parse 方法 (String, IFormatProvider)

DateTime
.
.
::
.
Parse 方法 (String, IFormatProvider)
DateTime 结构

使用指定的区域性特定格式信息，将日期和时间的指定字符串表示形式转换为其等效的 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As DateTime
public static DateTime Parse(
    string s,
    IFormatProvider provider
)
public:
static DateTime Parse(
    String^ s,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        provider:IFormatProvider -> DateTime

参数

s
类型： System String
包含要转换的日期和时间的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式信息。

返回值

类型： System DateTime
一个对象，它等效于 s 中包含的日期和时间，由 provider 指定。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 中不包含日期和时间的有效字符串表示形式。

字符串 s 是使用 DateTimeFormatInfo 对象中的格式设置信息分析的，该信息由 provider 参数显式或隐式提供。s 参数所包含的日期和时间的表示形式必须使用 provider 所指定的区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。 字符串 s 是使用 DateTimeFormatInfo 对象中的格式设置信息分析的，该信息由 provider 参数显式或隐式提供。s 参数所包含的日期和时间的表示形式必须使用 provider 所指定的区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。

重要说明 重要事项

由于日期和时间的字符串表示形式必须符合可识别的模式，因此在调用 Parse(String) 方法分析用户输入时，应用程序始终应使用异常处理。

此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试完整地分析 s 并避免引发 FormatException。它尽量忽略无法识别的数据，并用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假定时间为午夜 12:00。如果 s 只包含时间而没有日期，则此方法使用当前日期。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。

s 的格式由 provider 参数定义，该参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示在 s 参数中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义可用于 s 的格式设置。 一个 CultureInfo 对象，表示在 s 参数中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义可用于 s 的格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

  • 一个实现 IFormatProvider 的自定义对象，其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性。

大多数情况下，Parse(String) 方法返回一个其 Kind 属性为 DateTimeKind..::.Unspecified 的 DateTime 值。但是，如果要分析的字符串包含 ISO 8601 所定义的时区信息或者包含旧的 GMT 指示符，则 Parse(String) 方法将执行任何必要的时间转换，并返回一个其日期和时间反映本地时间并且其 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值。 大多数情况下，Parse(String) 方法返回一个其 Kind 属性为 DateTimeKind..::.Unspecified 的 DateTime 值。但是，如果要分析的字符串包含 ISO 8601 所定义的时区信息或者包含旧的 GMT 指示符，则 Parse(String) 方法将执行任何必要的时间转换，并返回一个其日期和时间反映本地时间并且其 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值。

由于 DateTime..::.Parse(String, IFormatProvider) 方法尝试使用 provider 参数的格式设置规则来分析日期和时间的字符串表示形式，因此尝试跨不同区域性分析特定的字符串可能会失败或返回不同的结果。如果要跨不同区域设置分析特定的日期和时间格式，请使用 ParseExact 方法的重载之一并提供格式说明符。 由于 DateTime..::.Parse(String, IFormatProvider) 方法尝试使用 provider 参数的格式设置规则来分析日期和时间的字符串表示形式，因此尝试跨不同区域性分析特定的字符串可能会失败或返回不同的结果。如果要跨不同区域设置分析特定的日期和时间格式，请使用 ParseExact 方法的重载之一并提供格式说明符。

分析非标准区域性

如果用来分析日期和时间字符串的 CultureInfo 或 DateTimeFormatInfo 对象所包含的自定义设置不同于标准区域性的自定义设置，请使用 ParseExact 方法而不要使用 Parse 方法，以便提高分析操作的成功概率。非标准日期和时间字符串可能很复杂，难于分析。Parse 方法尝试使用多个隐式分析模式来分析字符串，这些模式都可能失败。而 ParseExact 方法则相反，它要求您显式指定一个或多个可能成功的确切的分析模式。 如果用来分析日期和时间字符串的 CultureInfo 或 DateTimeFormatInfo 对象所包含的自定义设置不同于标准区域性的自定义设置，请使用 ParseExact 方法而不要使用 Parse 方法，以便提高分析操作的成功概率。非标准日期和时间字符串可能很复杂，难于分析。Parse 方法尝试使用多个隐式分析模式来分析字符串，这些模式都可能失败。而 ParseExact 方法则相反，它要求您显式指定一个或多个可能成功的确切的分析模式。 如果用来分析日期和时间字符串的 CultureInfo 或 DateTimeFormatInfo 对象所包含的自定义设置不同于标准区域性的自定义设置，请使用 ParseExact 方法而不要使用 Parse 方法，以便提高分析操作的成功概率。非标准日期和时间字符串可能很复杂，难于分析。Parse 方法尝试使用多个隐式分析模式来分析字符串，这些模式都可能失败。而 ParseExact 方法则相反，它要求您显式指定一个或多个可能成功的确切的分析模式。 如果用来分析日期和时间字符串的 CultureInfo 或 DateTimeFormatInfo 对象所包含的自定义设置不同于标准区域性的自定义设置，请使用 ParseExact 方法而不要使用 Parse 方法，以便提高分析操作的成功概率。非标准日期和时间字符串可能很复杂，难于分析。Parse 方法尝试使用多个隐式分析模式来分析字符串，这些模式都可能失败。而 ParseExact 方法则相反，它要求您显式指定一个或多个可能成功的确切的分析模式。

有关自定义区域性或非标准区域性的更多信息，请参见 System.Globalization..::.CultureAndRegionInfoBuilder 类。

对调用者的说明

provider 参数所提供的 DateTimeFormatInfo 对象的属性会影响格式设置。Parse 方法会意外引发 FormatException 的一个原因是当前 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性是否设置为同一值。 provider 参数所提供的 DateTimeFormatInfo 对象的属性会影响格式设置。Parse 方法会意外引发 FormatException 的一个原因是当前 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性是否设置为同一值。

下面的示例演示 DateTime..::.Parse(String, IFormatProvider) 方法。它还演示单个日期的字符串表示形式可以在不同区域性之间进行不同的解释。 下面的示例演示 DateTime..::.Parse(String, IFormatProvider) 方法。它还演示单个日期的字符串表示形式可以在不同区域性之间进行不同的解释。

Imports System.Globalization

Module ParseDate
   Public Sub Main()
      ' Define cultures to be used to parse dates.
      Dim cultures() As CultureInfo = {CultureInfo.CreateSpecificCulture("en-US"), _
                                       CultureInfo.CreateSpecificCulture("fr-FR"), _
                                       CultureInfo.CreateSpecificCulture("de-DE")}
      ' Define string representations of a date to be parsed.
      Dim dateStrings() As String = {"01/10/2009 7:34 PM", _
                                     "10.01.2009 19:34", _
                                     "10-1-2009 19:34" }
      ' Parse dates using each culture.
      For Each culture As CultureInfo In cultures
         Dim dateValue As Date
         Console.WriteLine("Attempted conversions using {0} culture.", culture.Name)
         For Each dateString As String In dateStrings
            Try
               dateValue = Date.Parse(dateString, culture)
               Console.WriteLine("   Converted '{0}' to {1}.", _
                                 dateString, dateValue.ToString("f", culture))
            Catch e As FormatException
               Console.WriteLine("   Unable to convert '{0}' for culture {1}.", _
                                 dateString, culture.Name)
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output to the console:
'       Attempted conversions using en-US culture.
'          Converted '01/10/2009 7:34 PM' to Saturday, January 10, 2009 7:34 PM.
'          Converted '10.01.2009 19:34' to Thursday, October 01, 2009 7:34 PM.
'          Converted '10-1-2009 19:34' to Thursday, October 01, 2009 7:34 PM.
'
'       Attempted conversions using fr-FR culture.
'          Converted '01/10/2009 7:34 PM' to jeudi 1 octobre 2009 19:34.
'          Converted '10.01.2009 19:34' to samedi 10 janvier 2009 19:34.
'          Converted '10-1-2009 19:34' to samedi 10 janvier 2009 19:34.
'
'       Attempted conversions using de-DE culture.
'          Converted '01/10/2009 7:34 PM' to Donnerstag, 1. Oktober 2009 19:34.
'          Converted '10.01.2009 19:34' to Samstag, 10. Januar 2009 19:34.
'          Converted '10-1-2009 19:34' to Samstag, 10. Januar 2009 19:34.

using System;
using System.Globalization;

public class ParseDate
{
   public static void Main()
   {
      // Define cultures to be used to parse dates.
      CultureInfo[] cultures = {CultureInfo.CreateSpecificCulture("en-US"),
                                CultureInfo.CreateSpecificCulture("fr-FR"),
                                CultureInfo.CreateSpecificCulture("de-DE")};
      // Define string representations of a date to be parsed.
      string[] dateStrings = {"01/10/2009 7:34 PM",
                              "10.01.2009 19:34",
                              "10-1-2009 19:34" };
      // Parse dates using each culture.
      foreach (CultureInfo culture in cultures)
      {
         DateTime dateValue;
         Console.WriteLine("Attempted conversions using {0} culture.",
                           culture.Name);
         foreach (string dateString in dateStrings)
         {
            try {
               dateValue = DateTime.Parse(dateString, culture);
               Console.WriteLine("   Converted '{0}' to {1}.",
                                 dateString, dateValue.ToString("f", culture));
            }
            catch (FormatException) {
               Console.WriteLine("   Unable to convert '{0}' for culture {1}.",
                                 dateString, culture.Name);
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output to the console:
//       Attempted conversions using en-US culture.
//          Converted '01/10/2009 7:34 PM' to Saturday, January 10, 2009 7:34 PM.
//          Converted '10.01.2009 19:34' to Thursday, October 01, 2009 7:34 PM.
//          Converted '10-1-2009 19:34' to Thursday, October 01, 2009 7:34 PM.
//
//       Attempted conversions using fr-FR culture.
//          Converted '01/10/2009 7:34 PM' to jeudi 1 octobre 2009 19:34.
//          Converted '10.01.2009 19:34' to samedi 10 janvier 2009 19:34.
//          Converted '10-1-2009 19:34' to samedi 10 janvier 2009 19:34.
//
//       Attempted conversions using de-DE culture.
//          Converted '01/10/2009 7:34 PM' to Donnerstag, 1. Oktober 2009 19:34.
//          Converted '10.01.2009 19:34' to Samstag, 10. Januar 2009 19:34.
//          Converted '10-1-2009 19:34' to Samstag, 10. Januar 2009 19:34.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Parse 重载
System 命名空间
TryParse
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.Parse 方法 (String, IFormatProvider, DateTimeStyles)

DateTime
.
.
::
.
Parse 方法 (String, IFormatProvider, DateTimeStyles)
DateTime 结构

使用指定的区域性特定格式信息和格式设置样式将日期和时间的指定字符串表示形式转换为其等效的 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider, _
    styles As DateTimeStyles _
) As DateTime
public static DateTime Parse(
    string s,
    IFormatProvider provider,
    DateTimeStyles styles
)
public:
static DateTime Parse(
    String^ s,
    IFormatProvider^ provider,
    DateTimeStyles styles
)
static member Parse :
        s:string *
        provider:IFormatProvider *
        styles:DateTimeStyles -> DateTime

参数

s
类型： System String
包含要转换的日期和时间的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
styles
类型： System.Globalization DateTimeStyles
枚举值的按位组合，用于指示 s 成功执行分析操作所需的样式元素以及定义如何根据当前时区或当前日期解释已分析日期的样式元素。一个要指定的典型值为 None。 枚举值的按位组合，用于指示 s 成功执行分析操作所需的样式元素以及定义如何根据当前时区或当前日期解释已分析日期的样式元素。一个要指定的典型值为 None。

返回值

类型： System DateTime
一个对象，它等效于 s 中包含的日期和时间，由 provider 和 styles 指定。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 中不包含日期和时间的有效字符串表示形式。
ArgumentException | styles 包含 DateTimeStyles 值的无效组合。例如，AssumeLocal 和 AssumeUniversal。 styles 包含 DateTimeStyles 值的无效组合。例如，AssumeLocal 和 AssumeUniversal。

此方法分析一个具有两个元素的字符串，这两个元素可以按任何顺序出现并由空白分隔。这两个元素如下表所示。 此方法分析一个具有两个元素的字符串，这两个元素可以按任何顺序出现并由空白分隔。这两个元素如下表所示。

日期和时间元素 | 示例（en-US 区域性）
<Date> | "2/10/2009"
<Time> | "1:02:03 PM"

s 可缺少 <Date> 或 <Time> 中的任何一个元素，但不能同时缺少这两个元素。此外，s 可以包含时区信息。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Date>，则其默认值为当前日期。但是，如果缺少 <日期>，且 styles 包括 NoCurrentDateDefault 值，则它的日期假定为 0001 年 1 月 1 日。每个元素两边也可使用前导或尾随空白，甚至可包含内部空白（如“6: 00: 00”）。还可以包含时区说明符（例如，Z 或 GMT，用于指示协调世界时 (UTC)）。此外，s 还可以包含时区偏移量（例如，“2008-10-1T6:00:32-8:00”）。在这种情况下，s 的格式必须符合 ISO 8601 标准。 s 可缺少 <Date> 或 <Time> 中的任何一个元素，但不能同时缺少这两个元素。此外，s 可以包含时区信息。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Date>，则其默认值为当前日期。但是，如果缺少 <日期>，且 styles 包括 NoCurrentDateDefault 值，则它的日期假定为 0001 年 1 月 1 日。每个元素两边也可使用前导或尾随空白，甚至可包含内部空白（如“6: 00: 00”）。还可以包含时区说明符（例如，Z 或 GMT，用于指示协调世界时 (UTC)）。此外，s 还可以包含时区偏移量（例如，“2008-10-1T6:00:32-8:00”）。在这种情况下，s 的格式必须符合 ISO 8601 标准。 s 可缺少 <Date> 或 <Time> 中的任何一个元素，但不能同时缺少这两个元素。此外，s 可以包含时区信息。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Date>，则其默认值为当前日期。但是，如果缺少 <日期>，且 styles 包括 NoCurrentDateDefault 值，则它的日期假定为 0001 年 1 月 1 日。每个元素两边也可使用前导或尾随空白，甚至可包含内部空白（如“6: 00: 00”）。还可以包含时区说明符（例如，Z 或 GMT，用于指示协调世界时 (UTC)）。此外，s 还可以包含时区偏移量（例如，“2008-10-1T6:00:32-8:00”）。在这种情况下，s 的格式必须符合 ISO 8601 标准。 s 可缺少 <Date> 或 <Time> 中的任何一个元素，但不能同时缺少这两个元素。此外，s 可以包含时区信息。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Date>，则其默认值为当前日期。但是，如果缺少 <日期>，且 styles 包括 NoCurrentDateDefault 值，则它的日期假定为 0001 年 1 月 1 日。每个元素两边也可使用前导或尾随空白，甚至可包含内部空白（如“6: 00: 00”）。还可以包含时区说明符（例如，Z 或 GMT，用于指示协调世界时 (UTC)）。此外，s 还可以包含时区偏移量（例如，“2008-10-1T6:00:32-8:00”）。在这种情况下，s 的格式必须符合 ISO 8601 标准。 s 可缺少 <Date> 或 <Time> 中的任何一个元素，但不能同时缺少这两个元素。此外，s 可以包含时区信息。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Date>，则其默认值为当前日期。但是，如果缺少 <日期>，且 styles 包括 NoCurrentDateDefault 值，则它的日期假定为 0001 年 1 月 1 日。每个元素两边也可使用前导或尾随空白，甚至可包含内部空白（如“6: 00: 00”）。还可以包含时区说明符（例如，Z 或 GMT，用于指示协调世界时 (UTC)）。此外，s 还可以包含时区偏移量（例如，“2008-10-1T6:00:32-8:00”）。在这种情况下，s 的格式必须符合 ISO 8601 标准。 s 可缺少 <Date> 或 <Time> 中的任何一个元素，但不能同时缺少这两个元素。此外，s 可以包含时区信息。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Date>，则其默认值为当前日期。但是，如果缺少 <日期>，且 styles 包括 NoCurrentDateDefault 值，则它的日期假定为 0001 年 1 月 1 日。每个元素两边也可使用前导或尾随空白，甚至可包含内部空白（如“6: 00: 00”）。还可以包含时区说明符（例如，Z 或 GMT，用于指示协调世界时 (UTC)）。此外，s 还可以包含时区偏移量（例如，“2008-10-1T6:00:32-8:00”）。在这种情况下，s 的格式必须符合 ISO 8601 标准。 s 可缺少 <Date> 或 <Time> 中的任何一个元素，但不能同时缺少这两个元素。此外，s 可以包含时区信息。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Date>，则其默认值为当前日期。但是，如果缺少 <日期>，且 styles 包括 NoCurrentDateDefault 值，则它的日期假定为 0001 年 1 月 1 日。每个元素两边也可使用前导或尾随空白，甚至可包含内部空白（如“6: 00: 00”）。还可以包含时区说明符（例如，Z 或 GMT，用于指示协调世界时 (UTC)）。此外，s 还可以包含时区偏移量（例如，“2008-10-1T6:00:32-8:00”）。在这种情况下，s 的格式必须符合 ISO 8601 标准。 s 可缺少 <Date> 或 <Time> 中的任何一个元素，但不能同时缺少这两个元素。此外，s 可以包含时区信息。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Date>，则其默认值为当前日期。但是，如果缺少 <日期>，且 styles 包括 NoCurrentDateDefault 值，则它的日期假定为 0001 年 1 月 1 日。每个元素两边也可使用前导或尾随空白，甚至可包含内部空白（如“6: 00: 00”）。还可以包含时区说明符（例如，Z 或 GMT，用于指示协调世界时 (UTC)）。此外，s 还可以包含时区偏移量（例如，“2008-10-1T6:00:32-8:00”）。在这种情况下，s 的格式必须符合 ISO 8601 标准。 s 可缺少 <Date> 或 <Time> 中的任何一个元素，但不能同时缺少这两个元素。此外，s 可以包含时区信息。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Date>，则其默认值为当前日期。但是，如果缺少 <日期>，且 styles 包括 NoCurrentDateDefault 值，则它的日期假定为 0001 年 1 月 1 日。每个元素两边也可使用前导或尾随空白，甚至可包含内部空白（如“6: 00: 00”）。还可以包含时区说明符（例如，Z 或 GMT，用于指示协调世界时 (UTC)）。此外，s 还可以包含时区偏移量（例如，“2008-10-1T6:00:32-8:00”）。在这种情况下，s 的格式必须符合 ISO 8601 标准。

s 的格式由 provider 参数定义，该参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示在 input 参数中使用其格式设置的区域性。CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义 s 中使用的格式设置。 一个 CultureInfo 对象，表示在 input 参数中使用其格式设置的区域性。CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义 s 中使用的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义 s 所用的格式设置。

  • 一个自定义 IFormatProvider 实现。其 IFormatProvider..::.GetFormat 方法返回一个 DateTimeFormatInfo 对象，该对象定义 s 所用的格式设置。 一个自定义 IFormatProvider 实现。其 IFormatProvider..::.GetFormat 方法返回一个 DateTimeFormatInfo 对象，该对象定义 s 所用的格式设置。

日期和时间元素的特定有效格式是由 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法返回的字符串数组的成员定义的。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 CultureInfo 对象。 日期和时间元素的特定有效格式是由 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法返回的字符串数组的成员定义的。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 CultureInfo 对象。

styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们定义要如何解释 s 以及分析操作如何将 s 转换为日期和时间。下表说明每个成员对分析操作的影响。 styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们定义要如何解释 s 以及分析操作如何将 s 转换为日期和时间。下表说明每个成员对分析操作的影响。

DateTimeStyles 成员

Description

AdjustToUniversal

分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。

AllowInnerWhite

虽然有效，但忽略了此值。s 的日期和时间元素中允许存在内部空白。 虽然有效，但忽略了此值。s 的日期和时间元素中允许存在内部空白。

AllowLeadingWhite

虽然有效，但忽略了此值。s 的日期和时间元素中允许存在前导空白。 虽然有效，但忽略了此值。s 的日期和时间元素中允许存在前导空白。

AllowTrailingWhite

虽然有效，但忽略了此值。s 的日期和时间元素中允许存在尾随空白。 虽然有效，但忽略了此值。s 的日期和时间元素中允许存在尾随空白。

AllowWhiteSpaces

指定 s 可以包含前导、内部和尾随空白。这是默认行为。如果提供限制性更强的 DateTimeStyles 枚举值（例如，DateTimeStyles..::.None），便不能对它进行重写。 指定 s 可以包含前导、内部和尾随空白。这是默认行为。如果提供限制性更强的 DateTimeStyles 枚举值（例如，DateTimeStyles..::.None），便不能对它进行重写。 指定 s 可以包含前导、内部和尾随空白。这是默认行为。如果提供限制性更强的 DateTimeStyles 枚举值（例如，DateTimeStyles..::.None），便不能对它进行重写。

AssumeLocal

指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。

AssumeUniversal

指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。

None

虽然有效，但忽略了此值。

RoundtripKind

对于包含时区信息的字符串，尝试阻止将日期和时间字符串转换为表示本地时间且其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值。通常，可以通过使用标准格式说明符 o、r 或 u 调用 DateTime..::.ToString(String) 方法来创建这类字符串。 对于包含时区信息的字符串，尝试阻止将日期和时间字符串转换为表示本地时间且其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值。通常，可以通过使用标准格式说明符 o、r 或 u 调用 DateTime..::.ToString(String) 方法来创建这类字符串。

如果 s 不包含任何时区信息，DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法返回其 Kind 属性为 DateTimeKind..::.Unspecified（除非 styles 标志指示其他属性）的 DateTime 值。如果 s 包含时区或时区偏移量信息，则 DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法执行任何必要的时间转换并返回下列值之一： 如果 s 不包含任何时区信息，DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法返回其 Kind 属性为 DateTimeKind..::.Unspecified（除非 styles 标志指示其他属性）的 DateTime 值。如果 s 包含时区或时区偏移量信息，则 DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法执行任何必要的时间转换并返回下列值之一：

  • 一个 DateTime 值，其日期和时间反映本地时间并且其 Kind 属性为 DateTimeKind..::.Local。

  • 或者一个 DateTime 值，其日期和时间反映 UTC 并且其 Kind 属性为 DateTimeKind..::.Utc（如果 styles 包含 AdjustToUniversal 标志）。

使用 DateTimeStyles..::.RoundtripKind 标志可重写此行为。下面的示例演示 DateTimeStyles..::.RoundtripKind 标志如何影响对 DateTime 值的分析操作，这些值使用格式说明符 o、r 或 u 转换成了字符串。 使用 DateTimeStyles..::.RoundtripKind 标志可重写此行为。下面的示例演示 DateTimeStyles..::.RoundtripKind 标志如何影响对 DateTime 值的分析操作，这些值使用格式说明符 o、r 或 u 转换成了字符串。

   Dim formattedDates() As String = { "2008-09-15T09:30:41.7752486-07:00", _
                                      "2008-09-15T09:30:41.7752486Z", _
                                      "2008-09-15T09:30:41.7752486", _
                                      "2008-09-15T09:30:41.7752486-04:00", _
                                      "Mon, 15 Sep 2008 09:30:41 GMT" }
   For Each formattedDate As String In formattedDates
      Console.WriteLine(formattedDate)
      Dim roundtripDate As Date = Date.Parse(formattedDate, Nothing, _
                                          DateTimeStyles.RoundtripKind)
      Console.WriteLine("   With RoundtripKind flag: {0} {1} time.", _
                        roundtripDate, roundtripDate.Kind)
      Dim noRoundtripDate As Date = Date.Parse(formattedDate, Nothing, _
                                          DateTimeStyles.None)
      Console.WriteLine("   Without RoundtripKind flag: {0} {1} time.", _
                         noRoundtripDate, noRoundtripDate.Kind)
   Next
' The example displays the following output:
'       2008-09-15T09:30:41.7752486-07:00
'          With RounndtripKind flag: 9/15/2008 9:30:41 AM Local time.
'          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
'       2008-09-15T09:30:41.7752486Z
'          With RounndtripKind flag: 9/15/2008 9:30:41 AM Utc time.
'          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.
'       2008-09-15T09:30:41.7752486
'          With RounndtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
'          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
'       2008-09-15T09:30:41.7752486-04:00
'          With RounndtripKind flag: 9/15/2008 6:30:41 AM Local time.
'          Without RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
'       Mon, 15 Sep 2008 09:30:41 GMT
'          With RounndtripKind flag: 9/15/2008 9:30:41 AM Utc time.
'          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.

   string[] formattedDates = { "2008-09-15T09:30:41.7752486-07:00",
                               "2008-09-15T09:30:41.7752486Z",
                               "2008-09-15T09:30:41.7752486",
                               "2008-09-15T09:30:41.7752486-04:00",
                               "Mon, 15 Sep 2008 09:30:41 GMT" };
   foreach (string formattedDate in formattedDates)
   {
      Console.WriteLine(formattedDate);
      DateTime roundtripDate = DateTime.Parse(formattedDate, null,
                                              DateTimeStyles.RoundtripKind);
      Console.WriteLine("   With RoundtripKind flag: {0} {1} time.",
                        roundtripDate, roundtripDate.Kind);
      DateTime noRoundtripDate = DateTime.Parse(formattedDate, null,
                                                DateTimeStyles.None);
      Console.WriteLine("   Without RoundtripKind flag: {0} {1} time.",
                         noRoundtripDate, noRoundtripDate.Kind);
   }
// The example displays the following output:
//       2008-09-15T09:30:41.7752486-07:00
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
//          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
//       2008-09-15T09:30:41.7752486Z
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
//          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.
//       2008-09-15T09:30:41.7752486
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
//          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
//       2008-09-15T09:30:41.7752486-04:00
//          With RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
//          Without RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
//       Mon, 15 Sep 2008 09:30:41 GMT
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
//          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.

由于 DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法尝试使用 provider 参数的格式规则分析日期和时间的字符串表示形式，因此尝试跨不同区域性分析特定字符串时可能失败。如果要跨不同区域设置分析特定的日期和时间格式，请使用 ParseExact 方法的重载之一并提供格式说明符。 由于 DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法尝试使用 provider 参数的格式规则分析日期和时间的字符串表示形式，因此尝试跨不同区域性分析特定字符串时可能失败。如果要跨不同区域设置分析特定的日期和时间格式，请使用 ParseExact 方法的重载之一并提供格式说明符。

分析自定义区域性

如果您要分析一个为自定义区域性生成的日期和时间字符串，请使用 ParseExact 方法而不是 Parse 方法来提高分析操作成功的可能性。自定义区域性日期和时间字符串可能非常复杂，所以很难分析。Parse 方法尝试使用多个隐式分析模式来分析字符串，所有这些分析都可能会失败。相反，ParseExact 方法要求您显式地指定一个或多个可能成功的确切的分析模式。 如果您要分析一个为自定义区域性生成的日期和时间字符串，请使用 ParseExact 方法而不是 Parse 方法来提高分析操作成功的可能性。自定义区域性日期和时间字符串可能非常复杂，所以很难分析。Parse 方法尝试使用多个隐式分析模式来分析字符串，所有这些分析都可能会失败。相反，ParseExact 方法要求您显式地指定一个或多个可能成功的确切的分析模式。 如果您要分析一个为自定义区域性生成的日期和时间字符串，请使用 ParseExact 方法而不是 Parse 方法来提高分析操作成功的可能性。自定义区域性日期和时间字符串可能非常复杂，所以很难分析。Parse 方法尝试使用多个隐式分析模式来分析字符串，所有这些分析都可能会失败。相反，ParseExact 方法要求您显式地指定一个或多个可能成功的确切的分析模式。 如果您要分析一个为自定义区域性生成的日期和时间字符串，请使用 ParseExact 方法而不是 Parse 方法来提高分析操作成功的可能性。自定义区域性日期和时间字符串可能非常复杂，所以很难分析。Parse 方法尝试使用多个隐式分析模式来分析字符串，所有这些分析都可能会失败。相反，ParseExact 方法要求您显式地指定一个或多个可能成功的确切的分析模式。

有关自定义区域性的更多信息，请参见 System.Globalization..::.CultureAndRegionInfoBuilder 类。

对调用者的说明

格式设置受当前 DateTimeFormatInfo 对象属性的影响，该对象由 provider 参数提供。Parse 方法会意外引发 FormatException 的一个原因是当前 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性是否设置为同一值。 格式设置受当前 DateTimeFormatInfo 对象属性的影响，该对象由 provider 参数提供。Parse 方法会意外引发 FormatException 的一个原因是当前 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性是否设置为同一值。

下面的示例演示 DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法。

Imports System.Globalization

Module ParseDateExample
   Public Sub Main()
      Dim dateString As String
      Dim culture As CultureInfo
      Dim styles As DateTimeStyles
      Dim result As DateTime

      ' Parse a date and time with no styles.
      dateString = "03/01/2009 10:00 AM"
      culture = CultureInfo.CreateSpecificCulture("en-US")
      styles = DateTimeStyles.None
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try

      ' Parse the same date and time with the AssumeLocal style.
      styles = DateTimeStyles.AssumeLocal
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try

      ' Parse a date and time that is assumed to be local.
      ' This time is five hours behind UTC. The local system's time zone is
      ' eight hours behind UTC.
      dateString = "2009/03/01T10:00:00-5:00"
      styles = DateTimeStyles.AssumeLocal
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try

      ' Attempt to convert a string in improper ISO 8601 format.
      dateString = "03/01/2009T10:00:00-5:00"
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try

      ' Assume a date and time string formatted for the fr-FR culture is the local
      ' time and convert it to UTC.
      dateString = "2008-03-01 10:00"
      culture = CultureInfo.CreateSpecificCulture("fr-FR")
      styles = DateTimeStyles.AdjustToUniversal Or DateTimeStyles.AssumeLocal
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try
   End Sub
End Module
'
' The example displays the following output to the console:
'       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
'       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
'       2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
'       Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
'       2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.

using System;
using System.Globalization;

public class ParseDateExample
{
   public static void Main()
   {
      string dateString;
      CultureInfo culture ;
      DateTimeStyles styles;
      DateTime result;

      // Parse a date and time with no styles.
      dateString = "03/01/2009 10:00 AM";
      culture = CultureInfo.CreateSpecificCulture("en-US");
      styles = DateTimeStyles.None;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.",
                           dateString);
      }

      // Parse the same date and time with the AssumeLocal style.
      styles = DateTimeStyles.AssumeLocal;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }

      // Parse a date and time that is assumed to be local.
      // This time is five hours behind UTC. The local system's time zone is
      // eight hours behind UTC.
      dateString = "2009/03/01T10:00:00-5:00";
      styles = DateTimeStyles.AssumeLocal;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }

      // Attempt to convert a string in improper ISO 8601 format.
      dateString = "03/01/2009T10:00:00-5:00";
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }

      // Assume a date and time string formatted for the fr-FR culture is the local
      // time and convert it to UTC.
      dateString = "2008-03-01 10:00";
      culture = CultureInfo.CreateSpecificCulture("fr-FR");
      styles = DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeLocal;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }
   }
}
// The example displays the following output to the console:
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
//       2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
//       Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
//       2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Parse 重载
System 命名空间
TryParse
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串
如何：往返日期和时间值


DateTime ..::.ParseExact 方法

DateTime
.
.
::
.
ParseExact 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

将日期和时间的指定字符串表示形式转换为其 DateTime 等效项。字符串表示形式的格式必须与指定的格式完全匹配，否则会引发异常。 将日期和时间的指定字符串表示形式转换为其 DateTime 等效项。字符串表示形式的格式必须与指定的格式完全匹配，否则会引发异常。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间
TryParseExact


DateTime ..::.ParseExact 方法 (String, String, IFormatProvider)

DateTime
.
.
::
.
ParseExact 方法 (String, String, IFormatProvider)
DateTime 结构

使用指定的格式和区域性特定格式信息，将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须与指定的格式完全匹配。 使用指定的格式和区域性特定格式信息，将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须与指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    s As String, _
    format As String, _
    provider As IFormatProvider _
) As DateTime
public static DateTime ParseExact(
    string s,
    string format,
    IFormatProvider provider
)
public:
static DateTime ParseExact(
    String^ s,
    String^ format,
    IFormatProvider^ provider
)
static member ParseExact :
        s:string *
        format:string *
        provider:IFormatProvider -> DateTime

参数

s
类型： System String
包含要转换的日期和时间的字符串。
format
类型： System String
用于定义所需的 s 格式的格式说明符。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式信息。

返回值

类型： System DateTime
一个对象，它等效于 s 中包含的日期和时间，由 format 和 provider 指定。
异常 | 条件
ArgumentNullException | s 或 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 或 format 是空字符串。 - 或 - s 不包含与 format 中指定的模式相对应的日期和时间。 - 或 - s 中的小时组成部分和 AM/PM 指示符不一致。

DateTime..::.ParseExact(String, String, IFormatProvider) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。该方法还要求日期和时间的字符串表示形式的 <Date> 和 <Time> 元素以 format 所指定的顺序出现，并且 s 不能包含 format 不允许使用的空白。如果 format 定义的日期不包含时间元素，并且分析操作成功，则生成的 DateTime 值为午夜时间 (00:00:00)。如果 format 定义的时间不包含日期元素，并且分析操作成功，则生成的 DateTime 值为日期 DateTime.Now.Date。 DateTime..::.ParseExact(String, String, IFormatProvider) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。该方法还要求日期和时间的字符串表示形式的 <Date> 和 <Time> 元素以 format 所指定的顺序出现，并且 s 不能包含 format 不允许使用的空白。如果 format 定义的日期不包含时间元素，并且分析操作成功，则生成的 DateTime 值为午夜时间 (00:00:00)。如果 format 定义的时间不包含日期元素，并且分析操作成功，则生成的 DateTime 值为日期 DateTime.Now.Date。 DateTime..::.ParseExact(String, String, IFormatProvider) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。该方法还要求日期和时间的字符串表示形式的 <Date> 和 <Time> 元素以 format 所指定的顺序出现，并且 s 不能包含 format 不允许使用的空白。如果 format 定义的日期不包含时间元素，并且分析操作成功，则生成的 DateTime 值为午夜时间 (00:00:00)。如果 format 定义的时间不包含日期元素，并且分析操作成功，则生成的 DateTime 值为日期 DateTime.Now.Date。 DateTime..::.ParseExact(String, String, IFormatProvider) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。该方法还要求日期和时间的字符串表示形式的 <Date> 和 <Time> 元素以 format 所指定的顺序出现，并且 s 不能包含 format 不允许使用的空白。如果 format 定义的日期不包含时间元素，并且分析操作成功，则生成的 DateTime 值为午夜时间 (00:00:00)。如果 format 定义的时间不包含日期元素，并且分析操作成功，则生成的 DateTime 值为日期 DateTime.Now.Date。

如果 s 不表示特定时区的时间，并且分析操作成功，则返回的 DateTime 值的 Kind 属性为 DateTimeKind..::.Unspecified。如果 s 表示特定时区的时间，并且 format 允许存在时区信息（例如，在 format 等于 o、r 或 u 标准格式说明符，或者包含 z、zz 或 zzz 自定义格式说明符时），则返回的 DateTime 值的 Kind 属性为 DateTimeKind..::.Local。 如果 s 不表示特定时区的时间，并且分析操作成功，则返回的 DateTime 值的 Kind 属性为 DateTimeKind..::.Unspecified。如果 s 表示特定时区的时间，并且 format 允许存在时区信息（例如，在 format 等于 o、r 或 u 标准格式说明符，或者包含 z、zz 或 zzz 自定义格式说明符时），则返回的 DateTime 值的 Kind 属性为 DateTimeKind..::.Local。

format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 s 格式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串或自定义日期和时间格式字符串。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 s 格式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串或自定义日期和时间格式字符串。

说明 说明

如果 format 是不包含日期或时间分隔符的自定义格式模式（例如，“yyyyMMdd HHmm”），请对 provider 参数使用固定区域性并使用每个自定义格式说明符的最宽形式。例如，如果要以格式模式指定小时，请指定较宽的形式“HH”，而不是较窄的形式“H”。 如果 format 是不包含日期或时间分隔符的自定义格式模式（例如，“yyyyMMdd HHmm”），请对 provider 参数使用固定区域性并使用每个自定义格式说明符的最宽形式。例如，如果要以格式模式指定小时，请指定较宽的形式“HH”，而不是较窄的形式“H”。

s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的精度格式也是由该参数定义的。provider 参数可以是以下任意一项： s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的精度格式也是由该参数定义的。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

  • 一个自定义 IFormatProvider 实现，其 GetFormat 方法返回提供格式设置信息的 CultureInfo 对象或 DateTimeFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例演示 ParseExact 方法。

Dim dateString, format As String
Dim result As Date
Dim provider As CultureInfo = CultureInfo.InvariantCulture

' Parse date-only value with invariant culture.
dateString = "06/15/2008"
format = "d"
Try
   result = Date.ParseExact(dateString, format, provider)
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("{0} is not in the correct format.", dateString)
End Try

' Parse date-only value without leading zero in month using "d" format.
' Should throw a FormatException because standard short date pattern of
' invariant culture requires two-digit month.
dateString = "6/15/2008"
Try
   result = Date.ParseExact(dateString, format, provider)
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("{0} is not in the correct format.", dateString)
End Try

' Parse date and time with custom specifier.
dateString = "Sun 15 Jun 2008 8:30 AM -06:00"
format = "ddd dd MMM yyyy h:mm tt zzz"
Try
   result = Date.ParseExact(dateString, format, provider)
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("{0} is not in the correct format.", dateString)
End Try

' Parse date and time with offset but without offset's minutes.
' Should throw a FormatException because "zzz" specifier requires leading
' zero in hours.
dateString = "Sun 15 Jun 2008 8:30 AM -06"
Try
   result = Date.ParseExact(dateString, format, provider)
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("{0} is not in the correct format.", dateString)
End Try

dateString = "15/06/2008 08:30"
format = "g"
provider = New CultureInfo("fr-FR")
Try
   result = Date.ParseExact(dateString, format, provider)
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("{0} is not in the correct format.", dateString)
End Try
' The example displays the following output:
'       06/15/2008 converts to 6/15/2008 12:00:00 AM.
'       6/15/2008 is not in the correct format.
'       Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 7:30:00 AM.
'       Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.
'       15/06/2008 08:30 converts to 6/15/2008 8:30:00 AM.

string dateString, format;
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;

// Parse date-only value with invariant culture.
dateString = "06/15/2008";
format = "d";
try {
   result = DateTime.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException) {
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

// Parse date-only value without leading zero in month using "d" format.
// Should throw a FormatException because standard short date pattern of
// invariant culture requires two-digit month.
dateString = "6/15/2008";
try {
   result = DateTime.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException) {
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

// Parse date and time with custom specifier.
dateString = "Sun 15 Jun 2008 8:30 AM -06:00";
format = "ddd dd MMM yyyy h:mm tt zzz";
try {
   result = DateTime.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException) {
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

// Parse date and time with offset but without offset's minutes.
// Should throw a FormatException because "zzz" specifier requires leading
// zero in hours.
dateString = "Sun 15 Jun 2008 8:30 AM -06";
try {
   result = DateTime.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException) {
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

dateString = "15/06/2008 08:30";
format = "g";
provider = new CultureInfo("fr-FR");
try {
   result = DateTime.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException) {
   Console.WriteLine("{0} is not in the correct format.", dateString);
}
// The example displays the following output:
//       06/15/2008 converts to 6/15/2008 12:00:00 AM.
//       6/15/2008 is not in the correct format.
//       Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 7:30:00 AM.
//       Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.
//       15/06/2008 08:30 converts to 6/15/2008 8:30:00 AM.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
ParseExact 重载
System 命名空间
TryParseExact
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.ParseExact 方法 (String, String, IFormatProvider, DateTimeStyles)

DateTime
.
.
::
.
ParseExact 方法 (String, String, IFormatProvider, DateTimeStyles)
DateTime 结构

使用指定的格式、区域性特定的格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须与指定的格式完全匹配，否则会引发异常。 使用指定的格式、区域性特定的格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须与指定的格式完全匹配，否则会引发异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    s As String, _
    format As String, _
    provider As IFormatProvider, _
    style As DateTimeStyles _
) As DateTime
public static DateTime ParseExact(
    string s,
    string format,
    IFormatProvider provider,
    DateTimeStyles style
)
public:
static DateTime ParseExact(
    String^ s,
    String^ format,
    IFormatProvider^ provider,
    DateTimeStyles style
)
static member ParseExact :
        s:string *
        format:string *
        provider:IFormatProvider *
        style:DateTimeStyles -> DateTime

参数

s
类型： System String
包含要转换的日期和时间的字符串。
format
类型： System String
用于定义所需的 s 格式的格式说明符。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
style
类型： System.Globalization DateTimeStyles
枚举值的按位组合，提供有关以下内容的附加信息：s、可能出现在 s 中的样式元素或从 s 到 DateTime 值的转换。一个要指定的典型值为 None。 枚举值的按位组合，提供有关以下内容的附加信息：s、可能出现在 s 中的样式元素或从 s 到 DateTime 值的转换。一个要指定的典型值为 None。

返回值

类型： System DateTime
一个对象，它等效于 s 中包含的日期和时间，由 format、provider 和 style 指定。
异常 | 条件
ArgumentNullException | s 或 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 或 format 是空字符串。 - 或 - s 不包含与 format 中指定的模式相对应的日期和时间。 - 或 - s 中的小时组成部分和 AM/PM 指示符不一致。
ArgumentException | style 包含无效的 DateTimeStyles 值组合。例如，AssumeLocal 和 AssumeUniversal。 style 包含无效的 DateTimeStyles 值组合。例如，AssumeLocal 和 AssumeUniversal。

DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求 s 中的日期和时间元素以 format 所指定的顺序出现。如果 s 与具有 style 参数所定义的任何变体的 format 参数的模式不匹配，则此方法会引发 FormatException。相反，DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法还允许 s 中的日期和时间元素以任何顺序出现。 DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求 s 中的日期和时间元素以 format 所指定的顺序出现。如果 s 与具有 style 参数所定义的任何变体的 format 参数的模式不匹配，则此方法会引发 FormatException。相反，DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法还允许 s 中的日期和时间元素以任何顺序出现。 DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求 s 中的日期和时间元素以 format 所指定的顺序出现。如果 s 与具有 style 参数所定义的任何变体的 format 参数的模式不匹配，则此方法会引发 FormatException。相反，DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法还允许 s 中的日期和时间元素以任何顺序出现。 DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求 s 中的日期和时间元素以 format 所指定的顺序出现。如果 s 与具有 style 参数所定义的任何变体的 format 参数的模式不匹配，则此方法会引发 FormatException。相反，DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法还允许 s 中的日期和时间元素以任何顺序出现。 DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求 s 中的日期和时间元素以 format 所指定的顺序出现。如果 s 与具有 style 参数所定义的任何变体的 format 参数的模式不匹配，则此方法会引发 FormatException。相反，DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法还允许 s 中的日期和时间元素以任何顺序出现。

如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还确定 s 参数是否可包含前导、内部或尾部空白字符。 如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还确定 s 参数是否可包含前导、内部或尾部空白字符。 如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还确定 s 参数是否可包含前导、内部或尾部空白字符。

如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。

format 参数定义 s 参数所需的模式。它可以由自定义日期和时间格式字符串表中的一个或多个自定义格式说明符组成，也可以由标准日期和时间格式字符串表中的单个标准格式说明符（用于标识预定义模式）组成。 format 参数定义 s 参数所需的模式。它可以由自定义日期和时间格式字符串表中的一个或多个自定义格式说明符组成，也可以由标准日期和时间格式字符串表中的单个标准格式说明符（用于标识预定义模式）组成。

如果在自定义格式模式中不使用日期或时间分隔符，请为 provider 参数使用固定区域性，并使用每个自定义格式说明符的最宽形式。例如，如果您想在该模式中指定小时，则指定较宽的形式“HH”而不是较狭隘的形式“H”。 如果在自定义格式模式中不使用日期或时间分隔符，请为 provider 参数使用固定区域性，并使用每个自定义格式说明符的最宽形式。例如，如果您想在该模式中指定小时，则指定较宽的形式“HH”而不是较狭隘的形式“H”。

说明 说明

可以调用 DateTime..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法并指定多种允许的格式，而不是为了使分析操作成功要求 s 符合某一种格式。这将使得分析操作更容易成功。 可以调用 DateTime..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法并指定多种允许的格式，而不是为了使分析操作成功要求 s 符合某一种格式。这将使得分析操作更容易成功。

styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们决定不是由 format 定义的空白是否可以出现在 s 中及其出现的位置，而且它们控制分析操作的确切行为。下表说明 DateTimeStyles 枚举的每个成员如何影响 ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法的运行。 styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们决定不是由 format 定义的空白是否可以出现在 s 中及其出现的位置，而且它们控制分析操作的确切行为。下表说明 DateTimeStyles 枚举的每个成员如何影响 ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法的运行。

DateTimeStyles 成员

Description

AdjustToUniversal

分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。

AllowInnerWhite

指定不是由 format 定义的空白可以出现在任何单个的日期或时间元素之间。

AllowLeadingWhite

指定不是由 format 定义的空白可以出现在 s 的开头。

AllowTrailingWhite

指定不是由 format 定义的空白可以出现在 s 的末尾。

AllowWhiteSpaces

指定 s 可以包含不是由 format 定义的前导、内部和尾随空白。

AssumeLocal

指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。

AssumeUniversal

指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。

NoCurrentDateDefault

如果 s 包含不带日期信息的时间，则返回值的日期设置为 DateTime.MinValue.Date。

None

使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。

RoundtripKind

对于包含时区信息的字符串，尝试阻止转换为其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值日期和时间。此标志主要是阻止将 UTC 时间转换为本地时间。 对于包含时区信息的字符串，尝试阻止转换为其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值日期和时间。此标志主要是阻止将 UTC 时间转换为本地时间。

s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的确切格式也是由该参数定义的。provider 参数可以是以下任意一项： s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的确切格式也是由该参数定义的。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

  • 一个自定义 IFormatProvider 实现，其 GetFormat 方法返回提供格式设置信息的 CultureInfo 对象或 DateTimeFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例演示 ParseExact(String, String, IFormatProvider) 方法。请注意，当 styles 参数等于 DateTimeStyles..::.None 时，不能成功分析字符串“5/01/2009 8:30 AM”，因为 format 不允许存在前导空格。此外，在 format 为“MM/dd/yyyy hh:mm”时不能成功分析“5/01/2009 09:00”，因为按照 format 的要求，日期字符串的月份值前面不能有前导零。 下面的示例演示 ParseExact(String, String, IFormatProvider) 方法。请注意，当 styles 参数等于 DateTimeStyles..::.None 时，不能成功分析字符串“5/01/2009 8:30 AM”，因为 format 不允许存在前导空格。此外，在 format 为“MM/dd/yyyy hh:mm”时不能成功分析“5/01/2009 09:00”，因为按照 format 的要求，日期字符串的月份值前面不能有前导零。 下面的示例演示 ParseExact(String, String, IFormatProvider) 方法。请注意，当 styles 参数等于 DateTimeStyles..::.None 时，不能成功分析字符串“5/01/2009 8:30 AM”，因为 format 不允许存在前导空格。此外，在 format 为“MM/dd/yyyy hh:mm”时不能成功分析“5/01/2009 09:00”，因为按照 format 的要求，日期字符串的月份值前面不能有前导零。

Dim enUS As New CultureInfo("en-US")
Dim dateString As String
Dim dateValue As Date

' Parse date with no style flags.
dateString = " 5/01/2009 8:30 AM"
Try
   dateValue = Date.ParseExact(dateString, "g", enUS, DateTimeStyles.None)
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Catch e As FormatException
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End Try
' Allow a leading space in the date string.
Try
   dateValue = Date.ParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite)
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Catch e As FormatException
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End Try

' Use custom formats with M and MM.
dateString = "5/01/2009 09:00"
Try
   dateValue = Date.ParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None)
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Catch e As FormatException
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End Try
' Allow a leading space in the date string.
Try
   dateValue = Date.ParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None)
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Catch e As FormatException
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End Try

' Parse a string with time zone information.
dateString = "05/01/2009 01:30:42 PM -05:00"
Try
   dateValue = Date.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None)
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Catch e As FormatException
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End Try
' Allow a leading space in the date string.
Try
   dateValue = Date.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, _
                               DateTimeStyles.AdjustToUniversal)
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Catch e As FormatException
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End Try

' Parse a string represengting UTC.
dateString = "2008-06-11T16:11:20.0904778Z"
Try
   dateValue = Date.ParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                               DateTimeStyles.None)
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Catch e As FormatException
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End Try
Try
   dateValue = Date.ParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                               DateTimeStyles.RoundtripKind)
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Catch e As FormatException
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End Try
' The example displays the following output:
'    ' 5/01/2009 8:30 AM' is not in an acceptable format.
'    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
'    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
'    '5/01/2009 09:00' is not in an acceptable format.
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).

CultureInfo enUS = new CultureInfo("en-US");
string dateString;
DateTime dateValue;

// Parse date with no style flags.
dateString = " 5/01/2009 8:30 AM";
try {
   dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.None);
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
}
catch (FormatException) {
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}
// Allow a leading space in the date string.
try {
   dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite);
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
}
catch (FormatException) {
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}

// Use custom formats with M and MM.
dateString = "5/01/2009 09:00";
try {
   dateValue = DateTime.ParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None);
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
}
catch (FormatException) {
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}
// Allow a leading space in the date string.
try {
   dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None);
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
}
catch (FormatException) {
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}

// Parse a string with time zone information.
dateString = "05/01/2009 01:30:42 PM -05:00";
try {
   dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None);
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
}
catch (FormatException) {
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}
// Allow a leading space in the date string.
try {
   dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS,
                               DateTimeStyles.AdjustToUniversal);
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
}
catch (FormatException) {
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}

// Parse a string represengting UTC.
dateString = "2008-06-11T16:11:20.0904778Z";
try {
   dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture,
                               DateTimeStyles.None);
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
}
catch (FormatException) {
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}
try {
   dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture,
                               DateTimeStyles.RoundtripKind);
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
}
catch (FormatException) {
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
}
// The example displays the following output:
//    ' 5/01/2009 8:30 AM' is not in an acceptable format.
//    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
//    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
//    '5/01/2009 09:00' is not in an acceptable format.
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
ParseExact 重载
System 命名空间
TryParseExact
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.ParseExact 方法 (String, array<String >[]()[], IFormatProvider, DateTimeStyles)

DateTime
.
.
::
.
ParseExact 方法 (String,
array<
String
>
[]
()
[]
, IFormatProvider, DateTimeStyles)
DateTime 结构

使用指定的格式数组、区域性特定格式信息和样式，将日期和时间的指定字符串表示形式转换为其 DateTime 等效项。字符串表示形式的格式必须至少与指定的格式之一完全匹配，否则会引发异常。 使用指定的格式数组、区域性特定格式信息和样式，将日期和时间的指定字符串表示形式转换为其 DateTime 等效项。字符串表示形式的格式必须至少与指定的格式之一完全匹配，否则会引发异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    s As String, _
    formats As String(), _
    provider As IFormatProvider, _
    style As DateTimeStyles _
) As DateTime
public static DateTime ParseExact(
    string s,
    string[] formats,
    IFormatProvider provider,
    DateTimeStyles style
)
public:
static DateTime ParseExact(
    String^ s,
    array<String^>^ formats,
    IFormatProvider^ provider,
    DateTimeStyles style
)
static member ParseExact :
        s:string *
        formats:string[] *
        provider:IFormatProvider *
        style:DateTimeStyles -> DateTime

参数

s
类型： System String
包含要转换的一个或多个日期和时间的字符串。
formats
类型：
array<
System String
>
[]
()
[]

s 的允许格式的数组。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式信息。
style
类型： System.Globalization DateTimeStyles
枚举值的一个按位组合，指示 s 所允许的格式。一个要指定的典型值为 None。 枚举值的一个按位组合，指示 s 所允许的格式。一个要指定的典型值为 None。

返回值

类型： System DateTime
一个对象，它等效于 s 中包含的日期和时间，由 formats、provider 和 style 指定。
异常 | 条件
ArgumentNullException | s 或 formats 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 是空字符串。 - 或 - formats 的一个元素是空字符串。 - 或 - s 不包含与 formats 中的任何元素对应的日期和时间。 - 或 - s 中的小时组成部分和 AM/PM 指示符不一致。
ArgumentException | style 包含无效的 DateTimeStyles 值组合。例如，AssumeLocal 和 AssumeUniversal。 style 包含无效的 DateTimeStyles 值组合。例如，AssumeLocal 和 AssumeUniversal。

DateTime..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法分析与分配给 formats 参数的任何一种模式匹配的日期字符串表示形式。如果字符串 s 与这些模式中的任何一种模式（具有 styles 参数所定义的任何变体）都不匹配，则该方法将引发 FormatException。除了将 s 与多种格式设置模式进行比较之外（而不是与一种格式设置模式比较），此重载的行为方式与 DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法相同。 DateTime..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法分析与分配给 formats 参数的任何一种模式匹配的日期字符串表示形式。如果字符串 s 与这些模式中的任何一种模式（具有 styles 参数所定义的任何变体）都不匹配，则该方法将引发 FormatException。除了将 s 与多种格式设置模式进行比较之外（而不是与一种格式设置模式比较），此重载的行为方式与 DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法相同。 DateTime..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法分析与分配给 formats 参数的任何一种模式匹配的日期字符串表示形式。如果字符串 s 与这些模式中的任何一种模式（具有 styles 参数所定义的任何变体）都不匹配，则该方法将引发 FormatException。除了将 s 与多种格式设置模式进行比较之外（而不是与一种格式设置模式比较），此重载的行为方式与 DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法相同。

s 参数包含要分析的日期和时间。如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还决定 s 参数是否可以包含除 formats 中的一种格式字符串允许的空白字符以外的前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间。如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还决定 s 参数是否可以包含除 formats 中的一种格式字符串允许的空白字符以外的前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间。如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还决定 s 参数是否可以包含除 formats 中的一种格式字符串允许的空白字符以外的前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间。如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还决定 s 参数是否可以包含除 formats 中的一种格式字符串允许的空白字符以外的前导、内部或尾部空白字符。

如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。

formats 参数包含一个模式数组，要使分析操作成功，s 必须与其中一个模式完全匹配。formats 参数中的模式由一个或多个来自 自定义日期和时间格式字符串 表的自定义格式说明符，或单个来自 标准日期和时间格式字符串 表的标准格式说明符（用于标识预定义的模式）所组成。 formats 参数包含一个模式数组，要使分析操作成功，s 必须与其中一个模式完全匹配。formats 参数中的模式由一个或多个来自 自定义日期和时间格式字符串 表的自定义格式说明符，或单个来自 标准日期和时间格式字符串 表的标准格式说明符（用于标识预定义的模式）所组成。

如果在自定义格式模式中不使用日期或时间分隔符，请为 provider 参数使用固定区域性，并使用每个自定义格式说明符的最宽形式。例如，如果您想在该模式中指定小时，则指定较宽的形式“HH”而不是较狭隘的形式“H”。 如果在自定义格式模式中不使用日期或时间分隔符，请为 provider 参数使用固定区域性，并使用每个自定义格式说明符的最宽形式。例如，如果您想在该模式中指定小时，则指定较宽的形式“HH”而不是较狭隘的形式“H”。

styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们决定不是由 format 定义的空白是否可以出现在 s 中及其出现的位置，而且它们控制分析操作的确切行为。下表说明 DateTimeStyles 枚举的每个成员如何影响 ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法的运行。 styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们决定不是由 format 定义的空白是否可以出现在 s 中及其出现的位置，而且它们控制分析操作的确切行为。下表说明 DateTimeStyles 枚举的每个成员如何影响 ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法的运行。

DateTimeStyles 成员

Description

AdjustToUniversal

分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。

AllowInnerWhite

指定不是由 format 定义的空白可以出现在任何单个的日期或时间元素之间。

AllowLeadingWhite

指定不是由 format 定义的空白可以出现在 s 的开头。

AllowTrailingWhite

指定不是由 format 定义的空白可以出现在 s 的末尾。

AllowWhiteSpaces

指定 s 可以包含不是由 format 定义的前导、内部和尾随空白。

AssumeLocal

指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。

AssumeUniversal

指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。

NoCurrentDateDefault

如果 s 包含不带日期信息的时间，则返回值的日期设置为 DateTime.MinValue.Date。

None

使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。

RoundtripKind

对于包含时区信息的字符串，尝试阻止转换为其 Kind 属性设置为 DateTimeKind..::.Local 的日期和时间。此标志主要是阻止将 UTC 时间转换为本地时间。 对于包含时区信息的字符串，尝试阻止转换为其 Kind 属性设置为 DateTimeKind..::.Local 的日期和时间。此标志主要是阻止将 UTC 时间转换为本地时间。

s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的确切格式也是由该参数定义的。provider 参数可以是以下任意一项： s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的确切格式也是由该参数定义的。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

  • 一个自定义 IFormatProvider 实现，其 GetFormat 方法返回提供格式设置信息的 CultureInfo 对象或 DateTimeFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例使用 DateTime..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法确保可以成功分析多种可能格式的字符串。

Dim formats() As String = {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", _
                           "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", _
                           "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", _
                           "M/d/yyyy h:mm", "M/d/yyyy h:mm", _
                           "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"}
Dim dateStrings() As String = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", _
                               "5/1/2009 6:32:00", "05/01/2009 06:32", _
                               "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00"}

Dim dateValue As DateTime

For Each dateString As String In dateStrings
   Try
      dateValue = DateTime.ParseExact(dateString, formats, _
                                      New CultureInfo("en-US"), _
                                      DateTimeStyles.None)
      Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue)
   Catch e As FormatException
      Console.WriteLine("Unable to convert '{0}' to a date.", dateString)
   End Try
Next
' The example displays the following output:
'       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
'       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.

string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
                   "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
                   "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
                   "M/d/yyyy h:mm", "M/d/yyyy h:mm",
                   "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"};
string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM",
                        "5/1/2009 6:32:00", "05/01/2009 06:32",
                        "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00"};
DateTime dateValue;

foreach (string dateString in dateStrings)
{
   try {
      dateValue = DateTime.ParseExact(dateString, formats,
                                      new CultureInfo("en-US"),
                                      DateTimeStyles.None);
      Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
   }
   catch (FormatException) {
      Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
   }
}
// The example displays the following output:
//       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
//       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
ParseExact 重载
System 命名空间
TryParseExact
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.SpecifyKind 方法

DateTime
.
.
::
.
SpecifyKind 方法
DateTime 结构

创建新的 DateTime 对象，该对象具有与指定的 DateTime 相同的刻度数，但是根据指定的 DateTimeKind 值的指示，指定为本地时间或协调世界时 (UTC)，或者两者皆否。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function SpecifyKind ( _
    value As DateTime, _
    kind As DateTimeKind _
) As DateTime
public static DateTime SpecifyKind(
    DateTime value,
    DateTimeKind kind
)
public:
static DateTime SpecifyKind(
    DateTime value,
    DateTimeKind kind
)
static member SpecifyKind :
        value:DateTime *
        kind:DateTimeKind -> DateTime

参数

value
类型： System DateTime
日期和时间。
kind
类型： System DateTimeKind
枚举值之一，该值指示新对象是表示本地时间、UTC，还是两者皆否。

返回值

类型： System DateTime
一个新对象，它具有与 value 参数表示的对象相同的刻度数以及由 kind 参数指定的 DateTimeKind 值。

DateTime 对象由一个 Kind 字段和一个 Ticks 字段组成，Kind 字段指示该时间值是基于本地时间、协调世界时 (UTC) 还是两者皆否，而 Ticks 字段包含以 100 纳秒计时周期为单位计量的时间值。SpecifyKind 方法使用指定的 kind 参数和初始时间值创建新的 DateTime 对象。 DateTime 对象由一个 Kind 字段和一个 Ticks 字段组成，Kind 字段指示该时间值是基于本地时间、协调世界时 (UTC) 还是两者皆否，而 Ticks 字段包含以 100 纳秒计时周期为单位计量的时间值。SpecifyKind 方法使用指定的 kind 参数和初始时间值创建新的 DateTime 对象。

重要说明 重要事项

返回的 DateTime 值不会将相同的时刻表示为 value 参数，SpecifyKind 不是一个时区转换方法。相反，它将 value 参数所指定的时间保留不变，并将 Kind 属性设置为 kind。有关时区转换的更多信息，请参见 在不同时区之间转换时间。 返回的 DateTime 值不会将相同的时刻表示为 value 参数，SpecifyKind 不是一个时区转换方法。相反，它将 value 参数所指定的时间保留不变，并将 Kind 属性设置为 kind。有关时区转换的更多信息，请参见 在不同时区之间转换时间。 返回的 DateTime 值不会将相同的时刻表示为 value 参数，SpecifyKind 不是一个时区转换方法。相反，它将 value 参数所指定的时间保留不变，并将 Kind 属性设置为 kind。有关时区转换的更多信息，请参见 在不同时区之间转换时间。

如果您接收了未指定 Kind 字段的 DateTime 对象，但是您可以通过独立的方式确定 Ticks 字段是表示本地时区还是 UTC，在这种互操作性情况下，SpecifyKind 方法很有用。

下面的代码示例使用 SpecifyKind 方法演示 Kind 属性如何影响 ToLocalTime 和 ToUniversalTime 转换方法。

' This code example demonstrates the DateTime Kind, Now, and
' UtcNow properties, and the SpecifyKind(), ToLocalTime(),
' and ToUniversalTime() methods.
Imports System

Class Sample
    Public Shared Sub Main()
        ' Get the date and time for the current moment, adjusted
        ' to the local time zone.
        Dim saveNow As DateTime = DateTime.Now

        ' Get the date and time for the current moment expressed
        ' as coordinated universal time (UTC).
        Dim saveUtcNow As DateTime = DateTime.UtcNow
        Dim myDt As DateTime

        ' Display the value and Kind property of the current moment
        ' expressed as UTC and local time.
        DisplayNow("UtcNow: ..........", saveUtcNow)
        DisplayNow("Now: .............", saveNow)
        Console.WriteLine()

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Utc and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc)
        Display("Utc: .............", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Local and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local)
        Display("Local: ...........", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Unspecified and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified)
        Display("Unspecified: .....", myDt)
    End Sub 'Main

    ' Display the value and Kind property of a DateTime structure, the
    ' DateTime structure converted to local time, and the DateTime
    ' structure converted to universal time.

    Public Shared datePatt As String = "M/d/yyyy hh:mm:ss tt"

    Public Shared Sub Display(ByVal title As String, ByVal inputDt As DateTime)
        Dim dispDt As DateTime = inputDt
        Dim dtString As String

        ' Display the original DateTime.
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, dispDt.Kind)

        ' Convert inputDt to local time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was universal time.
        dispDt = inputDt.ToLocalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}", dtString, dispDt.Kind)

        ' Convert inputDt to universal time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was local time.
        dispDt = inputDt.ToUniversalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}", dtString, dispDt.Kind)
        Console.WriteLine()
    End Sub 'Display

    ' Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    Public Shared Sub DisplayNow(ByVal title As String, ByVal inputDt As DateTime)
        Dim dtString As String = inputDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, inputDt.Kind)
    End Sub 'DisplayNow
End Class 'Sample

'
'This code example produces the following results:
'
'UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
'Now: ............. 5/6/2005 02:34:42 PM, Kind = Local
'
'Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc
'
'Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
'  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'
'Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'

// This code example demonstrates the DateTime Kind, Now, and
// UtcNow properties, and the SpecifyKind(), ToLocalTime(),
// and ToUniversalTime() methods.

using System;

class Sample
{
    public static void Main()
    {
// Get the date and time for the current moment, adjusted
// to the local time zone.

    DateTime saveNow = DateTime.Now;

// Get the date and time for the current moment expressed
// as coordinated universal time (UTC).

    DateTime saveUtcNow = DateTime.UtcNow;
    DateTime myDt;

// Display the value and Kind property of the current moment
// expressed as UTC and local time.

    DisplayNow("UtcNow: ..........", saveUtcNow);
    DisplayNow("Now: .............", saveNow);
    Console.WriteLine();

// Change the Kind property of the current moment to
// DateTimeKind.Utc and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc);
    Display("Utc: .............", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Local and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local);
    Display("Local: ...........", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Unspecified and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified);
    Display("Unspecified: .....", myDt);
    }

// Display the value and Kind property of a DateTime structure, the
// DateTime structure converted to local time, and the DateTime
// structure converted to universal time.

    public static string datePatt = @"M/d/yyyy hh:mm:ss tt";
    public static void Display(string title, DateTime inputDt)
    {
    DateTime dispDt = inputDt;
    string dtString;

// Display the original DateTime.

    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, dispDt.Kind);

// Convert inputDt to local time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was universal time.

    dispDt = inputDt.ToLocalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}",
                      dtString, dispDt.Kind);

// Convert inputDt to universal time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was local time.

    dispDt = inputDt.ToUniversalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}",
                      dtString, dispDt.Kind);
    Console.WriteLine();
    }

// Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    public static void DisplayNow(string title, DateTime inputDt)
    {
    string dtString = inputDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, inputDt.Kind);
    }
}

/*
This code example produces the following results:

UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
Now: ............. 5/6/2005 02:34:42 PM, Kind = Local

Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc

Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间

其他资源

.NET Framework 应用程序中的 COM 互操作性


DateTime ..::.Subtract 方法

DateTime
.
.
::
.
Subtract 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

从此实例中减去指定的时间或持续时间。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Subtract 方法 (DateTime)

DateTime
.
.
::
.
Subtract 方法 (DateTime)
DateTime 结构

从此实例中减去指定的日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Subtract ( _
    value As DateTime _
) As TimeSpan
public TimeSpan Subtract(
    DateTime value
)
public:
TimeSpan Subtract(
    DateTime value
)
member Subtract :
        value:DateTime -> TimeSpan

参数

value
类型： System DateTime
要减去的日期和时间值。

返回值

类型： System TimeSpan
一个时间间隔，它等于此实例所表示的日期和时间减去 value 所表示的日期和时间。
异常 | 条件
ArgumentOutOfRangeException | 结果小于 MinValue 或大于 MaxValue。

如果当前实例的日期和时间早于 value，则该方法返回一个表示负时间跨度的 TimeSpan 对象。也就是说，其所有非零属性（如 Days 或 Ticks）的值均为负。 如果当前实例的日期和时间早于 value，则该方法返回一个表示负时间跨度的 TimeSpan 对象。也就是说，其所有非零属性（如 Days 或 Ticks）的值均为负。

在将两个 DateTime 对象相减之前，请确保这两个对象所表示的时间位于同一时区。否则，结果将包含时差。 在将两个 DateTime 对象相减之前，请确保这两个对象所表示的时间位于同一时区。否则，结果将包含时差。

下面的代码示例演示 Subtract 方法和运算符。

Dim date1 As New System.DateTime(1996, 6, 3, 22, 15, 0)
Dim date2 As New System.DateTime(1996, 12, 6, 13, 2, 0)
Dim date3 As New System.DateTime(1996, 10, 12, 8, 42, 0)

Dim diff1 As System.TimeSpan
' diff1 gets 185 days, 14 hours, and 47 minutes.
diff1 = date2.Subtract(date1)

Dim date4 As System.DateTime
' date4 gets 4/9/1996 5:55:00 PM.
date4 = date3.Subtract(diff1)

Dim diff2 As System.TimeSpan
' diff2 gets 55 days 4 hours and 20 minutes.
diff2 = System.DateTime.op_Subtraction(date2, date3)

Dim date5 As System.DateTime
' date5 gets 4/9/1996 5:55:00 PM.
date5 = System.DateTime.op_Subtraction(date1, diff2)

            System.DateTime date1 = new System.DateTime(1996, 6, 3, 22, 15, 0);
            System.DateTime date2 = new System.DateTime(1996, 12, 6, 13, 2, 0);
            System.DateTime date3 = new System.DateTime(1996, 10, 12, 8, 42, 0);

            // diff1 gets 185 days, 14 hours, and 47 minutes.
            System.TimeSpan diff1 = date2.Subtract(date1);

            // date4 gets 4/9/1996 5:55:00 PM.
            System.DateTime date4 = date3.Subtract(diff1);

            // diff2 gets 55 days 4 hours and 20 minutes.
            System.TimeSpan diff2 = date2 - date3;

            // date5 gets 4/9/1996 5:55:00 PM.
            System.DateTime date5 = date1 - diff2;

System::DateTime date1 = System::DateTime( 1996, 6, 3, 22, 15, 0 );
System::DateTime date2 = System::DateTime( 1996, 12, 6, 13, 2, 0 );
System::DateTime date3 = System::DateTime( 1996, 10, 12, 8, 42, 0 );

// diff1 gets 185 days, 14 hours, and 47 minutes.
System::TimeSpan diff1 = date2.Subtract( date1 );

// date4 gets 4/9/1996 5:55:00 PM.
System::DateTime date4 = date3.Subtract( diff1 );

// diff2 gets 55 days 4 hours and 20 minutes.
System::TimeSpan diff2 = date2 - date3;

// date5 gets 4/9/1996 5:55:00 PM.
System::DateTime date5 = date1 - diff2;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Subtract 重载
System 命名空间


DateTime ..::.Subtract 方法 (TimeSpan)

DateTime
.
.
::
.
Subtract 方法 (TimeSpan)
DateTime 结构

从此实例中减去指定持续时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Subtract ( _
    value As TimeSpan _
) As DateTime
public DateTime Subtract(
    TimeSpan value
)
public:
DateTime Subtract(
    TimeSpan value
)
member Subtract :
        value:TimeSpan -> DateTime

参数

value
类型： System TimeSpan
要减去的时间间隔。

返回值

类型： System DateTime
一个对象，它等于此实例所表示的日期和时间减去 value 所表示的时间间隔。
异常 | 条件
ArgumentOutOfRangeException | 结果小于 MinValue 或大于 MaxValue。

此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。 此方法不更改此 DateTime 的值。而是返回新的 DateTime，其值是此操作的结果。

通常，DateTime..::.Subtract(TimeSpan) 方法减去一个表示正时间跨度的 TimeSpan 对象，并返回一个早于当前实例的日期和时间的 DateTime 值。但是，如果 TimeSpan 对象表示负时间跨度，则 DateTime..::.Subtract(TimeSpan) 方法返回一个晚于当前实例的日期和时间的 DateTime 值。 通常，DateTime..::.Subtract(TimeSpan) 方法减去一个表示正时间跨度的 TimeSpan 对象，并返回一个早于当前实例的日期和时间的 DateTime 值。但是，如果 TimeSpan 对象表示负时间跨度，则 DateTime..::.Subtract(TimeSpan) 方法返回一个晚于当前实例的日期和时间的 DateTime 值。

DateTime..::.Subtract(TimeSpan) 方法用于减去由多个时间单位（如指定的小时数和指定的分钟数）组成的时间间隔。若要从 DateTime 实例中减去单个时间单位（如年、月或日），可以将一个负数值作为参数传递给以下任一方法： DateTime..::.Subtract(TimeSpan) 方法用于减去由多个时间单位（如指定的小时数和指定的分钟数）组成的时间间隔。若要从 DateTime 实例中减去单个时间单位（如年、月或日），可以将一个负数值作为参数传递给以下任一方法：

  • AddYears，用于从当前日期和时间实例减去特定的年数。

  • AddMonths，用于从当前日期和时间实例减去特定的月数。

  • AddDays，用于从当前日期和时间实例减去特定的天数。

  • AddHours，用于从当前日期和时间实例减去特定的小时数。

  • AddMinutes，用于从当前日期和时间实例减去特定的分钟数。

  • AddSeconds，用于从当前日期和时间实例减去特定的秒数。

  • AddMilliseconds，用于从当前日期和时间实例减去特定的毫秒数。

  • AddTicks，从当前日期和时间实例减去特定的计时周期数。

下面的代码示例演示 Subtract 方法和运算符。

Dim date1 As New System.DateTime(1996, 6, 3, 22, 15, 0)
Dim date2 As New System.DateTime(1996, 12, 6, 13, 2, 0)
Dim date3 As New System.DateTime(1996, 10, 12, 8, 42, 0)

Dim diff1 As System.TimeSpan
' diff1 gets 185 days, 14 hours, and 47 minutes.
diff1 = date2.Subtract(date1)

Dim date4 As System.DateTime
' date4 gets 4/9/1996 5:55:00 PM.
date4 = date3.Subtract(diff1)

Dim diff2 As System.TimeSpan
' diff2 gets 55 days 4 hours and 20 minutes.
diff2 = System.DateTime.op_Subtraction(date2, date3)

Dim date5 As System.DateTime
' date5 gets 4/9/1996 5:55:00 PM.
date5 = System.DateTime.op_Subtraction(date1, diff2)

            System.DateTime date1 = new System.DateTime(1996, 6, 3, 22, 15, 0);
            System.DateTime date2 = new System.DateTime(1996, 12, 6, 13, 2, 0);
            System.DateTime date3 = new System.DateTime(1996, 10, 12, 8, 42, 0);

            // diff1 gets 185 days, 14 hours, and 47 minutes.
            System.TimeSpan diff1 = date2.Subtract(date1);

            // date4 gets 4/9/1996 5:55:00 PM.
            System.DateTime date4 = date3.Subtract(diff1);

            // diff2 gets 55 days 4 hours and 20 minutes.
            System.TimeSpan diff2 = date2 - date3;

            // date5 gets 4/9/1996 5:55:00 PM.
            System.DateTime date5 = date1 - diff2;

System::DateTime date1 = System::DateTime( 1996, 6, 3, 22, 15, 0 );
System::DateTime date2 = System::DateTime( 1996, 12, 6, 13, 2, 0 );
System::DateTime date3 = System::DateTime( 1996, 10, 12, 8, 42, 0 );

// diff1 gets 185 days, 14 hours, and 47 minutes.
System::TimeSpan diff1 = date2.Subtract( date1 );

// date4 gets 4/9/1996 5:55:00 PM.
System::DateTime date4 = date3.Subtract( diff1 );

// diff2 gets 55 days 4 hours and 20 minutes.
System::TimeSpan diff2 = date2 - date3;

// date5 gets 4/9/1996 5:55:00 PM.
System::DateTime date5 = date1 - diff2;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Subtract 重载
System 命名空间
TimeSpan


DateTime ..::.ToBinary 方法

DateTime
.
.
::
.
ToBinary 方法
DateTime 结构

将当前 DateTime 对象序列化为一个 64 位二进制值，该值随后可用于重新创建 DateTime 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToBinary As Long
public long ToBinary()
public:
long long ToBinary()
member ToBinary : unit -> int64

返回值

类型： System Int64
64 位带符号整数，它对 Kind 和 Ticks 属性进行了编码。

使用 ToBinary 方法将当前 DateTime 对象的值转换为二进制值。随后，使用该二进制值以及 FromBinary 方法重新创建初始的 DateTime 对象。 使用 ToBinary 方法将当前 DateTime 对象的值转换为二进制值。随后，使用该二进制值以及 FromBinary 方法重新创建初始的 DateTime 对象。

重要说明 重要事项

在某些情况下，由 FromBinary 方法返回的 DateTime 值与提供给 ToBinary 方法的原始 DateTime 值不同。有关更多信息，请参见下一节，“地方时间调整”。 在某些情况下，由 FromBinary 方法返回的 DateTime 值与提供给 ToBinary 方法的原始 DateTime 值不同。有关更多信息，请参见下一节，“地方时间调整”。

本地时间调整

本地时间（即调整为本地时区的协调世界时）由 Kind 属性值为 Local 的 DateTime 结构表示。当从 ToBinary 方法生成的二进制表示形式还原本地 DateTime 值时，FromBinary 方法可以调整重新创建的值，以使该值不等于原始值。在下列条件下，可能会出现这种情况： 本地时间（即调整为本地时区的协调世界时）由 Kind 属性值为 Local 的 DateTime 结构表示。当从 ToBinary 方法生成的二进制表示形式还原本地 DateTime 值时，FromBinary 方法可以调整重新创建的值，以使该值不等于原始值。在下列条件下，可能会出现这种情况： 本地时间（即调整为本地时区的协调世界时）由 Kind 属性值为 Local 的 DateTime 结构表示。当从 ToBinary 方法生成的二进制表示形式还原本地 DateTime 值时，FromBinary 方法可以调整重新创建的值，以使该值不等于原始值。在下列条件下，可能会出现这种情况：

  • 如果本地 DateTime 对象在某个时区内由 ToBinary 方法序列化，然后在另一个时区内由 FromBinary 方法反序列化，则结果 DateTime 对象表示的本地时间自动调整为第二个时区。

    例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。 例如，请考虑一个表示本地时间下午 3 点的 DateTime 对象。在美国正在执行的应用程序太平洋时区使用 ToBinary 方法将该 DateTime 对象转换为二进制值。在美国正在执行的另一个应用程序东部时区使用 FromBinary 方法将二进制值转换为新 DateTime 对象。新 DateTime 对象的值为 6 P.M，它表示与原来 3 P.M. 相同的时间点。值，但是已调整为东部时区中的本地时间。

  • 如果本地 DateTime 值的二进制表示形式表示在调用 FromBinary 的系统的本地时区中的无效时间，那么该时间将被调整为有效。

    例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToBinary 方法转换为二进制值，然后在通过 FromBinary 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToBinary 方法转换为二进制值，然后在通过 FromBinary 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToBinary 方法转换为二进制值，然后在通过 FromBinary 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToBinary 方法转换为二进制值，然后在通过 FromBinary 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToBinary 方法转换为二进制值，然后在通过 FromBinary 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。

    Module Example
   Public Sub Main()
      Dim localDate As Date = DateTime.SpecifyKind(#03/14/2010 2:30AM#, DateTimeKind.Local)
      Dim binLocal As Long = localDate.ToBinary()
      If TimeZoneInfo.Local.IsInvalidTime(localDate) Then
         Console.WriteLine("{0} is an invalid time in the {1} zone.", _
                           localDate, _
                           TimeZoneInfo.Local.StandardName)
      End If
      Dim localDate2 As Date = DateTime.FromBinary(binLocal)
      Console.WriteLine("{0} = {1}: {2}", _
                        localDate, localDate2, localDate.Equals(localDate2))
   End Sub
End Module
' The example displays the following output:
'    3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone.
'    3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: False

    using System;

public class Example
{
   public static void Main()
   {
      DateTime localDate = new DateTime(2010, 3, 14, 2, 30, 0, DateTimeKind.Local);
      long binLocal = localDate.ToBinary();
      if (TimeZoneInfo.Local.IsInvalidTime(localDate))
         Console.WriteLine("{0} is an invalid time in the {1} zone.",
                           localDate,
                           TimeZoneInfo.Local.StandardName);

      DateTime localDate2 = DateTime.FromBinary(binLocal);
      Console.WriteLine("{0} = {1}: {2}",
                        localDate, localDate2, localDate.Equals(localDate2));
   }
}
// The example displays the following output:
//    3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone.
//    3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: False

版本注意事项

从 .NET Framework 2.0 版开始，DateTime 结构由一个 Kind 私有字段和一个 Ticks 私有字段组成，Kind 字段指示指定的时间值是基于本地时间、协调世界时 (UTC)，还是两者皆否，而 Ticks 字段包含指定日期和时间的计时周期数，一个计时周期为 100 纳秒。Ticks 字段可通过 Ticks 属性访问，而 Kind 字段可通过 Kind 属性访问。 从 .NET Framework 2.0 版开始，DateTime 结构由一个 Kind 私有字段和一个 Ticks 私有字段组成，Kind 字段指示指定的时间值是基于本地时间、协调世界时 (UTC)，还是两者皆否，而 Ticks 字段包含指定日期和时间的计时周期数，一个计时周期为 100 纳秒。Ticks 字段可通过 Ticks 属性访问，而 Kind 字段可通过 Kind 属性访问。

在 .NET Framework 2.0 之前，如果手动序列化 DateTime 对象而不是使用 System.Runtime.Serialization..::.ISerializable 之类的序列化接口，则只需要序列化 DateTime 结构中的 Ticks 数据。从 2.0 版开始，还必须序列化 Kind 数据。 在 .NET Framework 2.0 之前，如果手动序列化 DateTime 对象而不是使用 System.Runtime.Serialization..::.ISerializable 之类的序列化接口，则只需要序列化 DateTime 结构中的 Ticks 数据。从 2.0 版开始，还必须序列化 Kind 数据。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DateTime 结构
DateTime 成员
System 命名空间
FromBinary


DateTime ..::.ToFileTime 方法

DateTime
.
.
::
.
ToFileTime 方法
DateTime 结构

将当前 DateTime 对象的值转换为 Windows 文件时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToFileTime As Long
public long ToFileTime()
public:
long long ToFileTime()
member ToFileTime : unit -> int64

返回值

类型： System Int64
表示为 Windows 文件时间的当前 DateTime 对象的值。
异常 | 条件
ArgumentOutOfRangeException | 所生成的文件时间将表示协调世界时公元 1601 年 1 月 1 日午夜 12:00 之前的日期和时间。 所生成的文件时间将表示协调世界时公元 1601 年 1 月 1 日午夜 12:00 之前的日期和时间。

Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。

ToFileTime 方法以前的版本假设当前 DateTime 对象为本地时间。从 .NET Framework 2.0 版开始，ToFileTime 方法使用 Kind 属性确定当前 DateTime 对象是本地时间、UTC 时间，还是被视作本地时间的未指定类型的时间。 ToFileTime 方法以前的版本假设当前 DateTime 对象为本地时间。从 .NET Framework 2.0 版开始，ToFileTime 方法使用 Kind 属性确定当前 DateTime 对象是本地时间、UTC 时间，还是被视作本地时间的未指定类型的时间。

对调用者的说明

通常，FromFileTime 方法还原由 ToFileTime 方法保存的 DateTime 值。但是，在以下情况下，这两个值可能不同： 通常，FromFileTime 方法还原由 ToFileTime 方法保存的 DateTime 值。但是，在以下情况下，这两个值可能不同：

  • 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。 如果 DateTime 值的序列化和反序列化发生在不同的时区。例如，如果 DateTime 值具有时间：下午 12:30。在美国序列化东部时区，然后在美国反序列化。太平洋时区，下午 12:30 的原始值将调整为上午 9:30反映两个时区之间的时差。

  • 如果序列化的 DateTime 值表示本地时区中的无效时间。在这种情况下，ToFileTime 方法调整还原的 DateTime 值，以使它表示本地时区的有效时间。 如果序列化的 DateTime 值表示本地时区中的无效时间。在这种情况下，ToFileTime 方法调整还原的 DateTime 值，以使它表示本地时区的有效时间。

    例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToFileTime 方法转换为长整型值，然后在通过 FromFileTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。

    Module Example
   Public Sub Main()
      Dim date1 As New DateTime(2010, 3, 14, 2, 30, 00)
      Console.WriteLine("Invalid Time: {0}", TimeZoneInfo.Local.IsInvalidTime(date1))
      Dim ft As Long = date1.ToFileTime()
      Dim date2 As DateTime = DateTime.FromFileTime(ft)
      Console.WriteLine("{0} -> {1}", date1, date2)
   End Sub
End Module
' The example displays the following output:
'       Invalid Time: True
'       3/14/2010 2:30:00 AM -> 3/14/2010 3:30:00 AM

    using System;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2010, 3, 14, 2, 30, 00);
      Console.WriteLine("Invalid Time: {0}",
                        TimeZoneInfo.Local.IsInvalidTime(date1));
      long ft = date1.ToFileTime();
      DateTime date2 = DateTime.FromFileTime(ft);
      Console.WriteLine("{0} -> {1}", date1, date2);
   }
}
// The example displays the following output:
//       Invalid Time: True
//       3/14/2010 2:30:00 AM -> 3/14/2010 3:30:00 AM

下面的代码示例演示 ToFileTime 方法。

Public Shared Sub Main()

   System.Console.WriteLine("Enter the file path:")
   Dim filePath As String
   filePath = System.Console.ReadLine()

   If System.IO.File.Exists(filePath) Then
      Dim fileCreationDateTime As System.DateTime
      fileCreationDateTime = System.IO.File.GetCreationTime(filePath)

      Dim fileCreationFileTime As Long
      fileCreationFileTime = fileCreationDateTime.ToFileTime()

      System.Console.WriteLine("{0} in file time is {1}.", _
                               fileCreationDateTime, _
                               fileCreationFileTime)
   Else
      System.Console.WriteLine("{0} is an invalid file", filePath)
   End If
End Sub

        static void Main(string[] args)
        {
            System.Console.WriteLine("Enter the file path:");
            string filePath = System.Console.ReadLine();

            if (System.IO.File.Exists(filePath)) {
                System.DateTime fileCreationDateTime =
                    System.IO.File.GetCreationTime(filePath);

                long fileCreationFileTime = fileCreationDateTime.ToFileTime();

                System.Console.WriteLine("{0} in file time is {1}.",
                                         fileCreationDateTime,
                                         fileCreationFileTime);
            }
            else {
                System.Console.WriteLine("{0} is an invalid file", filePath);
            }
        }

int main()
{
   System::Console::WriteLine( "Enter the file path:" );
   String^ filePath = System::Console::ReadLine();
   if ( System::IO::File::Exists( filePath ) )
   {
      System::DateTime fileCreationDateTime = System::IO::File::GetCreationTime( filePath );
      __int64 fileCreationFileTime = fileCreationDateTime.ToFileTime();
      System::Console::WriteLine( "{0} in file time is {1}.", fileCreationDateTime, fileCreationFileTime );
   }
   else
   {
      System::Console::WriteLine( "{0} is an invalid file", filePath );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
ToFileTimeUtc
Int64
ToUniversalTime
GetUtcOffset


DateTime ..::.ToFileTimeUtc 方法

DateTime
.
.
::
.
ToFileTimeUtc 方法
DateTime 结构

将当前 DateTime 对象的值转换为 Windows 文件时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToFileTimeUtc As Long
public long ToFileTimeUtc()
public:
long long ToFileTimeUtc()
member ToFileTimeUtc : unit -> int64

返回值

类型： System Int64
表示为 Windows 文件时间的当前 DateTime 对象的值。
异常 | 条件
ArgumentOutOfRangeException | 所生成的文件时间将表示协调世界时公元 1601 年 1 月 1 日午夜 12:00 之前的日期和时间。 所生成的文件时间将表示协调世界时公元 1601 年 1 月 1 日午夜 12:00 之前的日期和时间。

Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。

ToFileTimeUtc 方法以前的版本假设当前 DateTime 对象为 UTC 时间。从 .NET Framework 2.0 版开始，ToFileTimeUtc 方法使用 Kind 属性确定当前 DateTime 对象是本地时间、UTC 时间，还是被视作 UTC 时间的未指定类型的时间。如果它是本地时间，那么它在对 Windows 文件时间进行转换前，将时间转换为 UTC。 ToFileTimeUtc 方法以前的版本假设当前 DateTime 对象为 UTC 时间。从 .NET Framework 2.0 版开始，ToFileTimeUtc 方法使用 Kind 属性确定当前 DateTime 对象是本地时间、UTC 时间，还是被视作 UTC 时间的未指定类型的时间。如果它是本地时间，那么它在对 Windows 文件时间进行转换前，将时间转换为 UTC。 ToFileTimeUtc 方法以前的版本假设当前 DateTime 对象为 UTC 时间。从 .NET Framework 2.0 版开始，ToFileTimeUtc 方法使用 Kind 属性确定当前 DateTime 对象是本地时间、UTC 时间，还是被视作 UTC 时间的未指定类型的时间。如果它是本地时间，那么它在对 Windows 文件时间进行转换前，将时间转换为 UTC。

对调用者的说明

有时可使用 ToFileTimeUtc 方法将本地时间转换为 UTC，随后再通过调用 FromFileTimeUtc 方法后跟 ToLocalTime 方法来恢复。但是，如果原始时间表示本地时区中的一个无效的时间，这两个当地时间值将会不相等。有关其他信息，请参见 ToLocalTime 方法。 有时可使用 ToFileTimeUtc 方法将本地时间转换为 UTC，随后再通过调用 FromFileTimeUtc 方法后跟 ToLocalTime 方法来恢复。但是，如果原始时间表示本地时区中的一个无效的时间，这两个当地时间值将会不相等。有关其他信息，请参见 ToLocalTime 方法。 有时可使用 ToFileTimeUtc 方法将本地时间转换为 UTC，随后再通过调用 FromFileTimeUtc 方法后跟 ToLocalTime 方法来恢复。但是，如果原始时间表示本地时区中的一个无效的时间，这两个当地时间值将会不相等。有关其他信息，请参见 ToLocalTime 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
ToFileTime
Int64
ToUniversalTime
GetUtcOffset


DateTime ..::.ToLocalTime 方法

DateTime
.
.
::
.
ToLocalTime 方法
DateTime 结构

将当前 DateTime 对象的值转换为本地时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToLocalTime As DateTime
public DateTime ToLocalTime()
public:
DateTime ToLocalTime()
member ToLocalTime : unit -> DateTime

返回值

类型： System DateTime
一个对象，其 Kind 属性为 Local，并且其值为等效于当前 DateTime 对象的值的本地时间；如果经转换的值过大以至于不能由 DateTime 对象表示，则为 MaxValue，或者，如果经转换的值过小以至于不能表示为 DateTime 对象，则为 MinValue。

本地时间等于协调世界时 (UTC) 时间加上 UTC 偏移量。有关 UTC 偏移量的更多信息，请参见 TimeZone..::.GetUtcOffset。转换还要考虑应用于当前 DateTime 对象所表示的时间的夏时制规则。 本地时间等于协调世界时 (UTC) 时间加上 UTC 偏移量。有关 UTC 偏移量的更多信息，请参见 TimeZone..::.GetUtcOffset。转换还要考虑应用于当前 DateTime 对象所表示的时间的夏时制规则。 本地时间等于协调世界时 (UTC) 时间加上 UTC 偏移量。有关 UTC 偏移量的更多信息，请参见 TimeZone..::.GetUtcOffset。转换还要考虑应用于当前 DateTime 对象所表示的时间的夏时制规则。

重要说明 重要事项

ToLocalTime 方法只识别从 UTC 转换为本地时间时的当前调整规则。因此，当前调整规则生效之前的转换无法准确反映 UTC 和本地时间之间的差值。 ToLocalTime 方法只识别从 UTC 转换为本地时间时的当前调整规则。因此，当前调整规则生效之前的转换无法准确反映 UTC 和本地时间之间的差值。

从 .NET Framework 2.0 版开始，ToLocalTime 方法返回的值由当前 DateTime 对象的 Kind 属性确定。下表说明了可能的值。 从 .NET Framework 2.0 版开始，ToLocalTime 方法返回的值由当前 DateTime 对象的 Kind 属性确定。下表说明了可能的值。

Kind | 结果
Utc | DateTime 的此实例被转换为本地时间。
Local | 未执行任何转换。
Unspecified | 假定 DateTime 的此实例为 UTC 时间，并且执行转换时将 Kind 视作 Utc。
说明 说明

ToLocalTime 方法将 DateTime 值从 UTC 转换为本地时间。若要将任何指定时区的时间转换为本地时间，请使用 TimeZoneInfo..::.ConvertTime 方法。 ToLocalTime 方法将 DateTime 值从 UTC 转换为本地时间。若要将任何指定时区的时间转换为本地时间，请使用 TimeZoneInfo..::.ConvertTime 方法。

该转换返回的值为 Kind 属性总是返回 Local 的 DateTime。因此，即使 ToLocalTime 反复应用于同一个 DateTime，返回的仍然是有效结果。 该转换返回的值为 Kind 属性总是返回 Local 的 DateTime。因此，即使 ToLocalTime 反复应用于同一个 DateTime，返回的仍然是有效结果。

对调用者的说明

您可以使用 ToLocalTime 方法还原由 ToUniversalTime 或 FromFileTimeUtc 方法转换为 UTC 的本地日期和时间值。但是，如果原始时间表示本地时区中的一个无效的时间，它将不匹配已还原的值。当 ToLocalTime 方法将时间从 UTC 时间转换为本地时区时间时，还可以调整时间，使其成为有效的在本地时区时间。 您可以使用 ToLocalTime 方法还原由 ToUniversalTime 或 FromFileTimeUtc 方法转换为 UTC 的本地日期和时间值。但是，如果原始时间表示本地时区中的一个无效的时间，它将不匹配已还原的值。当 ToLocalTime 方法将时间从 UTC 时间转换为本地时区时间时，还可以调整时间，使其成为有效的在本地时区时间。 您可以使用 ToLocalTime 方法还原由 ToUniversalTime 或 FromFileTimeUtc 方法转换为 UTC 的本地日期和时间值。但是，如果原始时间表示本地时区中的一个无效的时间，它将不匹配已还原的值。当 ToLocalTime 方法将时间从 UTC 时间转换为本地时区时间时，还可以调整时间，使其成为有效的在本地时区时间。

例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToUniversalTime 方法转换为 UTC，然后在通过 ToLocalTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToUniversalTime 方法转换为 UTC，然后在通过 ToLocalTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToUniversalTime 方法转换为 UTC，然后在通过 ToLocalTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToUniversalTime 方法转换为 UTC，然后在通过 ToLocalTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。 例如，在美国从标准时间转换为夏时制。在太平洋标准时区的 2010 年 3 月 14 日凌晨 2:00，时间前进一个小时，成为凌晨 3:00。此时间间隔为无效时间，即，此时区中不存在的时间间隔。下面的示例显示了位于此范围内的时间通过 ToUniversalTime 方法转换为 UTC，然后在通过 ToLocalTime 方法还原时，原始值将调整为有效的时间。您可以通过将特定日期和时间值传递到 TimeZoneInfo..::.IsInvalidTime 方法确定是否对其进行修改，如示例所阐释。

Module Example
   Public Sub Main()
      Dim date1 As New Date(2010, 3, 14, 2, 30, 0, DateTimeKind.Local)
      Console.WriteLine("Invalid time: {0}", _
                        TimeZoneInfo.Local.IsInvalidTime(date1))
      Dim utcDate1 As Date = date1.ToUniversalTime()
      Dim date2 As Date = utcDate1.ToLocalTime()
      Console.WriteLine("{0} --> {1}", date1, date2)
   End Sub
End Module
' The example displays the following output:
'       Invalid time: True
'       3/14/2010 2:30:00 AM --> 3/14/2010 3:30:00 AM

using System;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2010, 3, 14, 2, 30, 0, DateTimeKind.Local);
      Console.WriteLine("Invalid time: {0}",
                        TimeZoneInfo.Local.IsInvalidTime(date1));
      DateTime utcDate1 = date1.ToUniversalTime();
      DateTime date2 = utcDate1.ToLocalTime();
      Console.WriteLine("{0} --> {1}", date1, date2);
   }
}
// The example displays the following output:
//       Invalid time: True
//       3/14/2010 2:30:00 AM --> 3/14/2010 3:30:00 AM

下面的代码示例演示 ToLocalTime 方法。

System.Console.WriteLine("Enter a date and time.")
Dim strDateTime As String
strDateTime = System.Console.ReadLine()

Dim localDateTime As System.DateTime
Try
   localDateTime = System.DateTime.Parse(strDateTime)
Catch exp As System.FormatException
   System.Console.WriteLine("Invalid format.")
End Try

Dim univDateTime As System.DateTime
univDateTime = localDateTime.ToUniversalTime()

System.Console.WriteLine("{0} local time is {1} universal time.", _
                           localDateTime, _
                           univDateTime)

System.Console.WriteLine("Enter a date and time in universal time.")
strDateTime = System.Console.ReadLine()

Try
   univDateTime = System.DateTime.Parse(strDateTime)
Catch exp As System.FormatException
   System.Console.WriteLine("Invalid format.")
End Try

localDateTime = univDateTime.ToLocalTime()

System.Console.WriteLine("{0} universal time is {1} local time.", _
                           univDateTime, _
                           localDateTime)

            System.Console.WriteLine("Enter a date and time.");
            string strDateTime = System.Console.ReadLine();

            System.DateTime localDateTime;
            try {
                localDateTime = System.DateTime.Parse(strDateTime);
            }
            catch (System.FormatException) {
                System.Console.WriteLine("Invalid format.");
                return;
            }

            System.DateTime univDateTime = localDateTime.ToUniversalTime();

            System.Console.WriteLine("{0} local time is {1} universal time.",
                                     localDateTime,
                                     univDateTime);

            System.Console.WriteLine("Enter a date and time in universal time.");
            strDateTime = System.Console.ReadLine();

            try {
                univDateTime = System.DateTime.Parse(strDateTime);
            }
            catch (System.FormatException) {
                System.Console.WriteLine("Invalid format.");
                return;
            }

            localDateTime = univDateTime.ToLocalTime();

            System.Console.WriteLine("{0} universal time is {1} local time.",
                                     univDateTime,
                                     localDateTime);

System::Console::WriteLine( "Enter a date and time." );
String^ strDateTime = System::Console::ReadLine();

System::DateTime localDateTime;
try
{
   localDateTime = System::DateTime::Parse( strDateTime );
}
catch ( System::FormatException^ )
{
   System::Console::WriteLine( "Invalid format." );
   return;
}

System::DateTime univDateTime = localDateTime.ToUniversalTime();

System::Console::WriteLine( "{0} local time is {1} universal time.",
   localDateTime, univDateTime );

System::Console::WriteLine( "Enter a date and time in universal time." );
strDateTime = System::Console::ReadLine();

try
{
   univDateTime = System::DateTime::Parse( strDateTime );
}
catch ( System::FormatException^ )
{
   System::Console::WriteLine( "Invalid format." );
   return;
}

localDateTime = univDateTime.ToLocalTime();

System::Console::WriteLine( "{0} universal time is {1} local time.",
   univDateTime, localDateTime );

下面的代码示例使用 SpecifyKind 方法演示 Kind 属性如何影响 ToLocalTime 和 ToUniversalTime 转换方法。

' This code example demonstrates the DateTime Kind, Now, and
' UtcNow properties, and the SpecifyKind(), ToLocalTime(),
' and ToUniversalTime() methods.
Imports System

Class Sample
    Public Shared Sub Main()
        ' Get the date and time for the current moment, adjusted
        ' to the local time zone.
        Dim saveNow As DateTime = DateTime.Now

        ' Get the date and time for the current moment expressed
        ' as coordinated universal time (UTC).
        Dim saveUtcNow As DateTime = DateTime.UtcNow
        Dim myDt As DateTime

        ' Display the value and Kind property of the current moment
        ' expressed as UTC and local time.
        DisplayNow("UtcNow: ..........", saveUtcNow)
        DisplayNow("Now: .............", saveNow)
        Console.WriteLine()

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Utc and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc)
        Display("Utc: .............", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Local and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local)
        Display("Local: ...........", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Unspecified and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified)
        Display("Unspecified: .....", myDt)
    End Sub 'Main

    ' Display the value and Kind property of a DateTime structure, the
    ' DateTime structure converted to local time, and the DateTime
    ' structure converted to universal time.

    Public Shared datePatt As String = "M/d/yyyy hh:mm:ss tt"

    Public Shared Sub Display(ByVal title As String, ByVal inputDt As DateTime)
        Dim dispDt As DateTime = inputDt
        Dim dtString As String

        ' Display the original DateTime.
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, dispDt.Kind)

        ' Convert inputDt to local time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was universal time.
        dispDt = inputDt.ToLocalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}", dtString, dispDt.Kind)

        ' Convert inputDt to universal time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was local time.
        dispDt = inputDt.ToUniversalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}", dtString, dispDt.Kind)
        Console.WriteLine()
    End Sub 'Display

    ' Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    Public Shared Sub DisplayNow(ByVal title As String, ByVal inputDt As DateTime)
        Dim dtString As String = inputDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, inputDt.Kind)
    End Sub 'DisplayNow
End Class 'Sample

'
'This code example produces the following results:
'
'UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
'Now: ............. 5/6/2005 02:34:42 PM, Kind = Local
'
'Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc
'
'Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
'  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'
'Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'

// This code example demonstrates the DateTime Kind, Now, and
// UtcNow properties, and the SpecifyKind(), ToLocalTime(),
// and ToUniversalTime() methods.

using System;

class Sample
{
    public static void Main()
    {
// Get the date and time for the current moment, adjusted
// to the local time zone.

    DateTime saveNow = DateTime.Now;

// Get the date and time for the current moment expressed
// as coordinated universal time (UTC).

    DateTime saveUtcNow = DateTime.UtcNow;
    DateTime myDt;

// Display the value and Kind property of the current moment
// expressed as UTC and local time.

    DisplayNow("UtcNow: ..........", saveUtcNow);
    DisplayNow("Now: .............", saveNow);
    Console.WriteLine();

// Change the Kind property of the current moment to
// DateTimeKind.Utc and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc);
    Display("Utc: .............", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Local and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local);
    Display("Local: ...........", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Unspecified and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified);
    Display("Unspecified: .....", myDt);
    }

// Display the value and Kind property of a DateTime structure, the
// DateTime structure converted to local time, and the DateTime
// structure converted to universal time.

    public static string datePatt = @"M/d/yyyy hh:mm:ss tt";
    public static void Display(string title, DateTime inputDt)
    {
    DateTime dispDt = inputDt;
    string dtString;

// Display the original DateTime.

    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, dispDt.Kind);

// Convert inputDt to local time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was universal time.

    dispDt = inputDt.ToLocalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}",
                      dtString, dispDt.Kind);

// Convert inputDt to universal time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was local time.

    dispDt = inputDt.ToUniversalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}",
                      dtString, dispDt.Kind);
    Console.WriteLine();
    }

// Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    public static void DisplayNow(string title, DateTime inputDt)
    {
    string dtString = inputDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, inputDt.Kind);
    }
}

/*
This code example produces the following results:

UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
Now: ............. 5/6/2005 02:34:42 PM, Kind = Local

Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc

Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
TimeZone
GetUtcOffset
TimeZone GetDaylightChanges
ToUniversalTime


DateTime ..::.ToLongDateString 方法

DateTime
.
.
::
.
ToLongDateString 方法
DateTime 结构

将当前 DateTime 对象的值转换为其等效的长日期字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToLongDateString As String
public string ToLongDateString()
public:
String^ ToLongDateString()
member ToLongDateString : unit -> string

返回值

类型： System String
一个字符串，它包含当前 DateTime 对象的长日期字符串表示形式。

当前 DateTime 对象的值使用与当前线程区域性关联的 LongDatePattern 属性所定义的模式进行格式设置。返回值与通过使用 ToString(String) 方法指定“D”标准 DateTime 格式字符串返回的值相同。 当前 DateTime 对象的值使用与当前线程区域性关联的 LongDatePattern 属性所定义的模式进行格式设置。返回值与通过使用 ToString(String) 方法指定“D”标准 DateTime 格式字符串返回的值相同。

重要说明 重要事项

ToLongDateString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准长日期模式为“dddd, MMMM dd, yyyy”；对于 de-DE 区域性，该模式为“dddd, d。MMMM yyyy"；对于 ja-JP 区域性，此模式为 "yyyy'?'M'?'d'?'"。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准长日期格式字符串。 ToLongDateString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准长日期模式为“dddd, MMMM dd, yyyy”；对于 de-DE 区域性，该模式为“dddd, d。MMMM yyyy"；对于 ja-JP 区域性，此模式为 "yyyy'?'M'?'d'?'"。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准长日期格式字符串。 ToLongDateString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准长日期模式为“dddd, MMMM dd, yyyy”；对于 de-DE 区域性，该模式为“dddd, d。MMMM yyyy"；对于 ja-JP 区域性，此模式为 "yyyy'?'M'?'d'?'"。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准长日期格式字符串。 ToLongDateString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准长日期模式为“dddd, MMMM dd, yyyy”；对于 de-DE 区域性，该模式为“dddd, d。MMMM yyyy"；对于 ja-JP 区域性，此模式为 "yyyy'?'M'?'d'?'"。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准长日期格式字符串。 ToLongDateString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准长日期模式为“dddd, MMMM dd, yyyy”；对于 de-DE 区域性，该模式为“dddd, d。MMMM yyyy"；对于 ja-JP 区域性，此模式为 "yyyy'?'M'?'d'?'"。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准长日期格式字符串。

有关当前线程区域性的更多信息，请参见 CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。 有关当前线程区域性的更多信息，请参见 CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。 有关当前线程区域性的更多信息，请参见 CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。

下面的代码示例演示 ToLongDateString 方法。

' This code example demonstrates the DateTime.ToLongDateString(),
' DateTime.ToLongTimeString(), DateTime.ToShortDateString(), and
' DateTime.ToShortTimeString() methods.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim msg1 As String = _
           "The date and time patterns are defined in the DateTimeFormatInfo " & vbCrLf & _
           "object associated with the current thread culture." & vbCrLf

        ' Initialize a DateTime object.
        Console.WriteLine("Initialize the DateTime object to May 16, 2001 3:02:15 AM." & vbCrLf)
        Dim myDateTime As New DateTime(2001, 5, 16, 3, 2, 15)

        ' Identify the source of the date and time patterns.
        Console.WriteLine(msg1)

        ' Display the name of the current culture.
        Dim ci As CultureInfo = Thread.CurrentThread.CurrentCulture
        Console.WriteLine("Current culture: ""{0}" & vbCrLf, ci.Name)

        ' Display the long date pattern and string.
        Console.WriteLine("Long date pattern: ""{0}""", ci.DateTimeFormat.LongDatePattern)
        Console.WriteLine("Long date string:  ""{0}" & vbCrLf, myDateTime.ToLongDateString())

        ' Display the long time pattern and string.
        Console.WriteLine("Long time pattern: ""{0}""", ci.DateTimeFormat.LongTimePattern)
        Console.WriteLine("Long time string:  ""{0}" & vbCrLf, myDateTime.ToLongTimeString())

        ' Display the short date pattern and string.
        Console.WriteLine("Short date pattern: ""{0}""", ci.DateTimeFormat.ShortDatePattern)
        Console.WriteLine("Short date string:  ""{0}" & vbCrLf, myDateTime.ToShortDateString())

        ' Display the short time pattern and string.
        Console.WriteLine("Short time pattern: ""{0}""", ci.DateTimeFormat.ShortTimePattern)
        Console.WriteLine("Short time string:  ""{0}" & vbCrLf, myDateTime.ToShortTimeString())
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Initialize the DateTime object to May 16, 2001 3:02:15 AM
'
'The date and time patterns are defined in the DateTimeFormatInfo
'object associated with the current thread culture.
'
'Current culture: "en-US"
'
'Long date pattern: "dddd, MMMM dd, yyyy"
'Long date string:  "Wednesday, May 16, 2001"
'
'Long time pattern: "h:mm:ss tt"
'Long time string:  "3:02:15 AM"
'
'Short date pattern: "M/d/yyyy"
'Short date string:  "5/16/2001"
'
'Short time pattern: "h:mm tt"
'Short time string:  "3:02 AM"
'

// This code example demonstrates the DateTime.ToLongDateString(),
// DateTime.ToLongTimeString(), DateTime.ToShortDateString(), and
// DateTime.ToShortTimeString() methods.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string msg1 = "The date and time patterns are defined in the DateTimeFormatInfo \n" +
                  "object associated with the current thread culture.\n";

// Initialize a DateTime object.
    Console.WriteLine("Initialize the DateTime object to May 16, 2001 3:02:15 AM.\n");
    DateTime myDateTime = new System.DateTime(2001, 5, 16, 3, 2, 15);

// Identify the source of the date and time patterns.
    Console.WriteLine(msg1);

// Display the name of the current culture.
    CultureInfo ci = Thread.CurrentThread.CurrentCulture;
    Console.WriteLine("Current culture: \"{0}\"\n", ci.Name);

// Display the long date pattern and string.
    Console.WriteLine("Long date pattern: \"{0}\"", ci.DateTimeFormat.LongDatePattern);
    Console.WriteLine("Long date string:  \"{0}\"\n", myDateTime.ToLongDateString());

// Display the long time pattern and string.
    Console.WriteLine("Long time pattern: \"{0}\"", ci.DateTimeFormat.LongTimePattern);
    Console.WriteLine("Long time string:  \"{0}\"\n", myDateTime.ToLongTimeString());

// Display the short date pattern and string.
    Console.WriteLine("Short date pattern: \"{0}\"", ci.DateTimeFormat.ShortDatePattern);
    Console.WriteLine("Short date string:  \"{0}\"\n", myDateTime.ToShortDateString());

// Display the short time pattern and string.
    Console.WriteLine("Short time pattern: \"{0}\"", ci.DateTimeFormat.ShortTimePattern);
    Console.WriteLine("Short time string:  \"{0}\"\n", myDateTime.ToShortTimeString());
    }
}

/*
This code example produces the following results:

Initialize the DateTime object to May 16, 2001 3:02:15 AM

The date and time patterns are defined in the DateTimeFormatInfo
object associated with the current thread culture.

Current culture: "en-US"

Long date pattern: "dddd, MMMM dd, yyyy"
Long date string:  "Wednesday, May 16, 2001"

Long time pattern: "h:mm:ss tt"
Long time string:  "3:02:15 AM"

Short date pattern: "M/d/yyyy"
Short date string:  "5/16/2001"

Short time pattern: "h:mm tt"
Short time string:  "3:02 AM"

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
CultureInfo
DateTimeFormat
DateTimeFormatInfo
ToString

其他资源

格式化类型
自定义日期和时间格式字符串


DateTime ..::.ToLongTimeString 方法

DateTime
.
.
::
.
ToLongTimeString 方法
DateTime 结构

将当前 DateTime 对象的值转换为其等效的长时间字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToLongTimeString As String
public string ToLongTimeString()
public:
String^ ToLongTimeString()
member ToLongTimeString : unit -> string

返回值

类型： System String
一个字符串，它包含当前 DateTime 对象的长时间字符串表示形式。

当前 DateTime 对象的值使用与当前线程区域性关联的 LongTimePattern 属性所定义的模式进行格式设置。返回值与通过使用 ToString(String) 方法指定“T”标准 DateTime 格式字符串返回的值相同。 当前 DateTime 对象的值使用与当前线程区域性关联的 LongTimePattern 属性所定义的模式进行格式设置。返回值与通过使用 ToString(String) 方法指定“T”标准 DateTime 格式字符串返回的值相同。

重要说明 重要事项

ToLongTimeString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准长时间模式为“h:mm:ss tt”；对于 de-DE 区域性，该模式为“HH:mm:ss”；对于 ja-JP 区域性，该模式为“H:mm:ss”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准长时间格式字符串。 ToLongTimeString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准长时间模式为“h:mm:ss tt”；对于 de-DE 区域性，该模式为“HH:mm:ss”；对于 ja-JP 区域性，该模式为“H:mm:ss”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准长时间格式字符串。 ToLongTimeString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准长时间模式为“h:mm:ss tt”；对于 de-DE 区域性，该模式为“HH:mm:ss”；对于 ja-JP 区域性，该模式为“H:mm:ss”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准长时间格式字符串。 ToLongTimeString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准长时间模式为“h:mm:ss tt”；对于 de-DE 区域性，该模式为“HH:mm:ss”；对于 ja-JP 区域性，该模式为“H:mm:ss”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准长时间格式字符串。

有关当前线程区域性的更多信息，请参见 CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。 有关当前线程区域性的更多信息，请参见 CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。 有关当前线程区域性的更多信息，请参见 CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。

下面的代码示例演示 ToLongTimeString 方法。

' This code example demonstrates the DateTime.ToLongDateString(),
' DateTime.ToLongTimeString(), DateTime.ToShortDateString(), and
' DateTime.ToShortTimeString() methods.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim msg1 As String = _
           "The date and time patterns are defined in the DateTimeFormatInfo " & vbCrLf & _
           "object associated with the current thread culture." & vbCrLf

        ' Initialize a DateTime object.
        Console.WriteLine("Initialize the DateTime object to May 16, 2001 3:02:15 AM." & vbCrLf)
        Dim myDateTime As New DateTime(2001, 5, 16, 3, 2, 15)

        ' Identify the source of the date and time patterns.
        Console.WriteLine(msg1)

        ' Display the name of the current culture.
        Dim ci As CultureInfo = Thread.CurrentThread.CurrentCulture
        Console.WriteLine("Current culture: ""{0}" & vbCrLf, ci.Name)

        ' Display the long date pattern and string.
        Console.WriteLine("Long date pattern: ""{0}""", ci.DateTimeFormat.LongDatePattern)
        Console.WriteLine("Long date string:  ""{0}" & vbCrLf, myDateTime.ToLongDateString())

        ' Display the long time pattern and string.
        Console.WriteLine("Long time pattern: ""{0}""", ci.DateTimeFormat.LongTimePattern)
        Console.WriteLine("Long time string:  ""{0}" & vbCrLf, myDateTime.ToLongTimeString())

        ' Display the short date pattern and string.
        Console.WriteLine("Short date pattern: ""{0}""", ci.DateTimeFormat.ShortDatePattern)
        Console.WriteLine("Short date string:  ""{0}" & vbCrLf, myDateTime.ToShortDateString())

        ' Display the short time pattern and string.
        Console.WriteLine("Short time pattern: ""{0}""", ci.DateTimeFormat.ShortTimePattern)
        Console.WriteLine("Short time string:  ""{0}" & vbCrLf, myDateTime.ToShortTimeString())
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Initialize the DateTime object to May 16, 2001 3:02:15 AM
'
'The date and time patterns are defined in the DateTimeFormatInfo
'object associated with the current thread culture.
'
'Current culture: "en-US"
'
'Long date pattern: "dddd, MMMM dd, yyyy"
'Long date string:  "Wednesday, May 16, 2001"
'
'Long time pattern: "h:mm:ss tt"
'Long time string:  "3:02:15 AM"
'
'Short date pattern: "M/d/yyyy"
'Short date string:  "5/16/2001"
'
'Short time pattern: "h:mm tt"
'Short time string:  "3:02 AM"
'

// This code example demonstrates the DateTime.ToLongDateString(),
// DateTime.ToLongTimeString(), DateTime.ToShortDateString(), and
// DateTime.ToShortTimeString() methods.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string msg1 = "The date and time patterns are defined in the DateTimeFormatInfo \n" +
                  "object associated with the current thread culture.\n";

// Initialize a DateTime object.
    Console.WriteLine("Initialize the DateTime object to May 16, 2001 3:02:15 AM.\n");
    DateTime myDateTime = new System.DateTime(2001, 5, 16, 3, 2, 15);

// Identify the source of the date and time patterns.
    Console.WriteLine(msg1);

// Display the name of the current culture.
    CultureInfo ci = Thread.CurrentThread.CurrentCulture;
    Console.WriteLine("Current culture: \"{0}\"\n", ci.Name);

// Display the long date pattern and string.
    Console.WriteLine("Long date pattern: \"{0}\"", ci.DateTimeFormat.LongDatePattern);
    Console.WriteLine("Long date string:  \"{0}\"\n", myDateTime.ToLongDateString());

// Display the long time pattern and string.
    Console.WriteLine("Long time pattern: \"{0}\"", ci.DateTimeFormat.LongTimePattern);
    Console.WriteLine("Long time string:  \"{0}\"\n", myDateTime.ToLongTimeString());

// Display the short date pattern and string.
    Console.WriteLine("Short date pattern: \"{0}\"", ci.DateTimeFormat.ShortDatePattern);
    Console.WriteLine("Short date string:  \"{0}\"\n", myDateTime.ToShortDateString());

// Display the short time pattern and string.
    Console.WriteLine("Short time pattern: \"{0}\"", ci.DateTimeFormat.ShortTimePattern);
    Console.WriteLine("Short time string:  \"{0}\"\n", myDateTime.ToShortTimeString());
    }
}

/*
This code example produces the following results:

Initialize the DateTime object to May 16, 2001 3:02:15 AM

The date and time patterns are defined in the DateTimeFormatInfo
object associated with the current thread culture.

Current culture: "en-US"

Long date pattern: "dddd, MMMM dd, yyyy"
Long date string:  "Wednesday, May 16, 2001"

Long time pattern: "h:mm:ss tt"
Long time string:  "3:02:15 AM"

Short date pattern: "M/d/yyyy"
Short date string:  "5/16/2001"

Short time pattern: "h:mm tt"
Short time string:  "3:02 AM"

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
CultureInfo
DateTimeFormat
DateTimeFormatInfo
ToString

其他资源

格式化类型
自定义日期和时间格式字符串


DateTime ..::.ToOADate 方法

DateTime
.
.
::
.
ToOADate 方法
DateTime 结构

将此实例的值转换为等效的 OLE 自动化日期。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToOADate As Double
public double ToOADate()
public:
double ToOADate()
member ToOADate : unit -> float

返回值

类型： System Double
一个双精度浮点数，它包含与此实例的值等效的 OLE 自动化日期。
异常 | 条件
OverflowException | 此实例的值无法表示为 OLE 自动化日期。

OLE 自动化日期以浮点数形式实现，其值为距 1899 年 12 月 30 日午夜的天数。例如，1899 年 12 月 31 日午夜由 1.0 表示；1900 年 1 月 1 日早上 6 点由 2.25 表示；1899 年 12 月 29 日午夜由 -1.0 表示；1899 年 12 月 29 日 早上 6 点由 -1.25 表示。 OLE 自动化日期以浮点数形式实现，其值为距 1899 年 12 月 30 日午夜的天数。例如，1899 年 12 月 31 日午夜由 1.0 表示；1900 年 1 月 1 日早上 6 点由 2.25 表示；1899 年 12 月 29 日午夜由 -1.0 表示；1899 年 12 月 29 日 早上 6 点由 -1.25 表示。

在基准 OLE 自动化日期为 1899 年 12 月 30 日午夜。最大 OLE 自动化日期与 MaxValue 相同，为 9999 年 12 月 31 日的最后时刻。 在基准 OLE 自动化日期为 1899 年 12 月 30 日午夜。最大 OLE 自动化日期与 MaxValue 相同，为 9999 年 12 月 31 日的最后时刻。

有关 OLE 自动化的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Double
FromOADate


DateTime ..::.ToShortDateString 方法

DateTime
.
.
::
.
ToShortDateString 方法
DateTime 结构

将当前 DateTime 对象的值转换为其等效的短日期字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToShortDateString As String
public string ToShortDateString()
public:
String^ ToShortDateString()
member ToShortDateString : unit -> string

返回值

类型： System String
一个字符串，它包含当前 DateTime 对象的短日期字符串表示形式。

当前 DateTime 对象的值使用与当前线程区域性关联的 DateTimeFormatInfo..::.ShortDatePattern 属性所定义的模式进行格式设置。返回值与通过使用 ToString(String) 方法指定“d”标准 DateTime 格式字符串返回的值相同。 当前 DateTime 对象的值使用与当前线程区域性关联的 DateTimeFormatInfo..::.ShortDatePattern 属性所定义的模式进行格式设置。返回值与通过使用 ToString(String) 方法指定“d”标准 DateTime 格式字符串返回的值相同。

重要说明 重要事项

ToShortDateString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准短日期模式为“M/d/yyyy”；对于 de-DE 区域性，该模式为“dd.MM.yyyy”；对于 ja-JP 区域性，该模式为“yyyy/M/d”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准短日期格式字符串。 ToShortDateString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准短日期模式为“M/d/yyyy”；对于 de-DE 区域性，该模式为“dd.MM.yyyy”；对于 ja-JP 区域性，该模式为“yyyy/M/d”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准短日期格式字符串。 ToShortDateString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准短日期模式为“M/d/yyyy”；对于 de-DE 区域性，该模式为“dd.MM.yyyy”；对于 ja-JP 区域性，该模式为“yyyy/M/d”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准短日期格式字符串。 ToShortDateString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准短日期模式为“M/d/yyyy”；对于 de-DE 区域性，该模式为“dd.MM.yyyy”；对于 ja-JP 区域性，该模式为“yyyy/M/d”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准短日期格式字符串。

有关当前线程区域性的更多信息，请参见 Thread..::.CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。
有关当前线程区域性的更多信息，请参见 Thread..::.CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。
有关当前线程区域性的更多信息，请参见 Thread..::.CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。

下面的示例演示 ToShortDateString 方法。它还演示调用 ToShortDateString 方法的结果与调用将“d”用作 format 参数的 DateTime..::.ToString(String) 方法的结果是相同的。 下面的示例演示 ToShortDateString 方法。它还演示调用 ToShortDateString 方法的结果与调用将“d”用作 format 参数的 DateTime..::.ToString(String) 方法的结果是相同的。

Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim dateToDisplay As Date = #06/01/2009 8:42:50#
      Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
      ' Change culture to en-US.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      Console.WriteLine("Displaying short date for {0} culture:", _
                        Thread.CurrentThread.CurrentCulture.Name)
      Console.WriteLine("   {0} (Short Date String)", _
                        dateToDisplay.ToShortDateString())
      ' Display using 'd' standard format specifier to illustrate it is
      ' identical to the string returned by ToShortDateString.
      Console.WriteLine("   {0} ('d' standard format specifier)", _
                        dateToDisplay.ToString("d"))
      Console.WriteLine()

      ' Change culture to fr-FR.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")
      Console.WriteLine("Displaying short date for {0} culture:", _
                        Thread.CurrentThread.CurrentCulture.Name)
      Console.WriteLine("   {0}", dateToDisplay.ToShortDateString())
      Console.WriteLine()

      ' Change culture to nl-NL.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("nl-NL")
      Console.WriteLine("Displaying short date for {0} culture:", _
                        Thread.CurrentThread.CurrentCulture.Name)
      Console.WriteLine("   {0}", dateToDisplay.ToShortDateString())

      ' Restore original culture.
      Thread.CurrentThread.CurrentCulture = originalCulture
   End Sub
End Module
' The example displays the following output:
'       Displaying short date for en-US culture:
'          6/1/2009 (Short Date String)
'          6/1/2009 ('d' standard format specifier)
'
'       Displaying short date for fr-FR culture:
'          01/06/2009
'
'       Displaying short date for nl-NL culture:
'          1-6-2009

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
CultureInfo
DateTimeFormat
DateTimeFormatInfo
ToString

其他资源

格式化类型
自定义日期和时间格式字符串


DateTime ..::.ToShortTimeString 方法

DateTime
.
.
::
.
ToShortTimeString 方法
DateTime 结构

将当前 DateTime 对象的值转换为其等效的短时间字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToShortTimeString As String
public string ToShortTimeString()
public:
String^ ToShortTimeString()
member ToShortTimeString : unit -> string

返回值

类型： System String
一个字符串，它包含当前 DateTime 对象的短时间字符串表示形式。

当前 DateTime 对象的值使用与当前线程区域性关联的 DateTimeFormatInfo..::.ShortTimePattern 属性所定义的模式进行格式设置。返回值与通过使用 ToString(String) 方法指定“t”标准 DateTime 格式字符串返回的值相同。 当前 DateTime 对象的值使用与当前线程区域性关联的 DateTimeFormatInfo..::.ShortTimePattern 属性所定义的模式进行格式设置。返回值与通过使用 ToString(String) 方法指定“t”标准 DateTime 格式字符串返回的值相同。

重要说明 重要事项

ToShortTimeString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准短时间模式为“h:mm tt”；对于 de-DE 区域性，该模式为“HH:mm”；对于 ja-JP 区域性，该模式为“H:mm”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准短时间格式字符串。 ToShortTimeString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准短时间模式为“h:mm tt”；对于 de-DE 区域性，该模式为“HH:mm”；对于 ja-JP 区域性，该模式为“H:mm”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准短时间格式字符串。 ToShortTimeString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准短时间模式为“h:mm tt”；对于 de-DE 区域性，该模式为“HH:mm”；对于 ja-JP 区域性，该模式为“H:mm”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准短时间格式字符串。 ToShortTimeString 方法所返回的字符串区分区域性。它反映当前区域性的 DateTimeFormatInfo 对象所定义的模式。例如，对于 en-US 区域性，标准短时间模式为“h:mm tt”；对于 de-DE 区域性，该模式为“HH:mm”；对于 ja-JP 区域性，该模式为“H:mm”。此外，也可以在特定计算机上自定义特定格式字符串，以便该字符串不同于标准短时间格式字符串。

有关当前线程区域性的更多信息，请参见 CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。 有关当前线程区域性的更多信息，请参见 CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。 有关当前线程区域性的更多信息，请参见 CurrentCulture 属性。有关格式字符、格式模式及它们产生的输出的更多信息，请参见格式化类型主题。有关更改与格式字符关联的格式模式的更多信息，请参见 DateTimeFormatInfo 类。

下面的代码示例演示 ToShortTimeString 方法。

' This code example demonstrates the DateTime.ToLongDateString(),
' DateTime.ToLongTimeString(), DateTime.ToShortDateString(), and
' DateTime.ToShortTimeString() methods.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim msg1 As String = _
           "The date and time patterns are defined in the DateTimeFormatInfo " & vbCrLf & _
           "object associated with the current thread culture." & vbCrLf

        ' Initialize a DateTime object.
        Console.WriteLine("Initialize the DateTime object to May 16, 2001 3:02:15 AM." & vbCrLf)
        Dim myDateTime As New DateTime(2001, 5, 16, 3, 2, 15)

        ' Identify the source of the date and time patterns.
        Console.WriteLine(msg1)

        ' Display the name of the current culture.
        Dim ci As CultureInfo = Thread.CurrentThread.CurrentCulture
        Console.WriteLine("Current culture: ""{0}" & vbCrLf, ci.Name)

        ' Display the long date pattern and string.
        Console.WriteLine("Long date pattern: ""{0}""", ci.DateTimeFormat.LongDatePattern)
        Console.WriteLine("Long date string:  ""{0}" & vbCrLf, myDateTime.ToLongDateString())

        ' Display the long time pattern and string.
        Console.WriteLine("Long time pattern: ""{0}""", ci.DateTimeFormat.LongTimePattern)
        Console.WriteLine("Long time string:  ""{0}" & vbCrLf, myDateTime.ToLongTimeString())

        ' Display the short date pattern and string.
        Console.WriteLine("Short date pattern: ""{0}""", ci.DateTimeFormat.ShortDatePattern)
        Console.WriteLine("Short date string:  ""{0}" & vbCrLf, myDateTime.ToShortDateString())

        ' Display the short time pattern and string.
        Console.WriteLine("Short time pattern: ""{0}""", ci.DateTimeFormat.ShortTimePattern)
        Console.WriteLine("Short time string:  ""{0}" & vbCrLf, myDateTime.ToShortTimeString())
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Initialize the DateTime object to May 16, 2001 3:02:15 AM
'
'The date and time patterns are defined in the DateTimeFormatInfo
'object associated with the current thread culture.
'
'Current culture: "en-US"
'
'Long date pattern: "dddd, MMMM dd, yyyy"
'Long date string:  "Wednesday, May 16, 2001"
'
'Long time pattern: "h:mm:ss tt"
'Long time string:  "3:02:15 AM"
'
'Short date pattern: "M/d/yyyy"
'Short date string:  "5/16/2001"
'
'Short time pattern: "h:mm tt"
'Short time string:  "3:02 AM"
'

// This code example demonstrates the DateTime.ToLongDateString(),
// DateTime.ToLongTimeString(), DateTime.ToShortDateString(), and
// DateTime.ToShortTimeString() methods.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string msg1 = "The date and time patterns are defined in the DateTimeFormatInfo \n" +
                  "object associated with the current thread culture.\n";

// Initialize a DateTime object.
    Console.WriteLine("Initialize the DateTime object to May 16, 2001 3:02:15 AM.\n");
    DateTime myDateTime = new System.DateTime(2001, 5, 16, 3, 2, 15);

// Identify the source of the date and time patterns.
    Console.WriteLine(msg1);

// Display the name of the current culture.
    CultureInfo ci = Thread.CurrentThread.CurrentCulture;
    Console.WriteLine("Current culture: \"{0}\"\n", ci.Name);

// Display the long date pattern and string.
    Console.WriteLine("Long date pattern: \"{0}\"", ci.DateTimeFormat.LongDatePattern);
    Console.WriteLine("Long date string:  \"{0}\"\n", myDateTime.ToLongDateString());

// Display the long time pattern and string.
    Console.WriteLine("Long time pattern: \"{0}\"", ci.DateTimeFormat.LongTimePattern);
    Console.WriteLine("Long time string:  \"{0}\"\n", myDateTime.ToLongTimeString());

// Display the short date pattern and string.
    Console.WriteLine("Short date pattern: \"{0}\"", ci.DateTimeFormat.ShortDatePattern);
    Console.WriteLine("Short date string:  \"{0}\"\n", myDateTime.ToShortDateString());

// Display the short time pattern and string.
    Console.WriteLine("Short time pattern: \"{0}\"", ci.DateTimeFormat.ShortTimePattern);
    Console.WriteLine("Short time string:  \"{0}\"\n", myDateTime.ToShortTimeString());
    }
}

/*
This code example produces the following results:

Initialize the DateTime object to May 16, 2001 3:02:15 AM

The date and time patterns are defined in the DateTimeFormatInfo
object associated with the current thread culture.

Current culture: "en-US"

Long date pattern: "dddd, MMMM dd, yyyy"
Long date string:  "Wednesday, May 16, 2001"

Long time pattern: "h:mm:ss tt"
Long time string:  "3:02:15 AM"

Short date pattern: "M/d/yyyy"
Short date string:  "5/16/2001"

Short time pattern: "h:mm tt"
Short time string:  "3:02 AM"

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
CultureInfo
DateTimeFormat
DateTimeFormatInfo
ToString

其他资源

格式化类型
自定义日期和时间格式字符串


DateTime ..::.ToString 方法

DateTime
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

将当前 DateTime 对象的值转换为其等效的字符串表示形式。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.ToString 方法

DateTime
.
.
::
.
ToString 方法
DateTime 结构

将当前 DateTime 对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前 DateTime 对象的值的字符串表示形式。
异常 | 条件
ArgumentOutOfRangeException | 日期和时间超出了当前区域性所使用的日历支持的日期范围。

当前 DateTime 对象的值使用常规日期和时间格式说明符（“G”）设置格式。

此方法使用从当前区域性派生的格式设置信息。具体来说，它将 DateTimeFormatInfo 对象（由 Thread.CurrentThread.CurrentCulture.DateTimeFormat 属性返回）的 ShortDatePattern 和 LongTimePattern 属性所返回的自定义格式字符串组合在一起。有关更多信息，请参见CultureInfo..::.CurrentCulture。通过使用 ToString 方法的其他重载，可以指定要使用其格式设置的区域性，并可以定义 DateTime 值的输出模式。 此方法使用从当前区域性派生的格式设置信息。具体来说，它将 DateTimeFormatInfo 对象（由 Thread.CurrentThread.CurrentCulture.DateTimeFormat 属性返回）的 ShortDatePattern 和 LongTimePattern 属性所返回的自定义格式字符串组合在一起。有关更多信息，请参见CultureInfo..::.CurrentCulture。通过使用 ToString 方法的其他重载，可以指定要使用其格式设置的区域性，并可以定义 DateTime 值的输出模式。 此方法使用从当前区域性派生的格式设置信息。具体来说，它将 DateTimeFormatInfo 对象（由 Thread.CurrentThread.CurrentCulture.DateTimeFormat 属性返回）的 ShortDatePattern 和 LongTimePattern 属性所返回的自定义格式字符串组合在一起。有关更多信息，请参见CultureInfo..::.CurrentCulture。通过使用 ToString 方法的其他重载，可以指定要使用其格式设置的区域性，并可以定义 DateTime 值的输出模式。 此方法使用从当前区域性派生的格式设置信息。具体来说，它将 DateTimeFormatInfo 对象（由 Thread.CurrentThread.CurrentCulture.DateTimeFormat 属性返回）的 ShortDatePattern 和 LongTimePattern 属性所返回的自定义格式字符串组合在一起。有关更多信息，请参见CultureInfo..::.CurrentCulture。通过使用 ToString 方法的其他重载，可以指定要使用其格式设置的区域性，并可以定义 DateTime 值的输出模式。

对调用者的说明

ToString()()() 方法将返回当前区域性使用的日历中的日期和时间的字符串表示形式。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为阿拉伯语（叙利亚）时，它尝试在 HijriCalendar 类的范围之外设置日期格式。 ToString()()() 方法将返回当前区域性使用的日历中的日期和时间的字符串表示形式。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为阿拉伯语（叙利亚）时，它尝试在 HijriCalendar 类的范围之外设置日期格式。 ToString()()() 方法将返回当前区域性使用的日历中的日期和时间的字符串表示形式。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为阿拉伯语（叙利亚）时，它尝试在 HijriCalendar 类的范围之外设置日期格式。 ToString()()() 方法将返回当前区域性使用的日历中的日期和时间的字符串表示形式。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为阿拉伯语（叙利亚）时，它尝试在 HijriCalendar 类的范围之外设置日期格式。

Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim date1 As Date = #1/1/550#
      Dim dft As CultureInfo
      Dim arSY As New CultureInfo("ar-SY")
      arSY.DateTimeFormat.Calendar = New HijriCalendar()

      ' Change current culture to arSY.
      dft = Thread.CurrentThread.CurrentCulture
      Thread.CurrentThread.CurrentCulture = arSY

      ' Display the date using the current culture's calendar.
      Try
         Console.WriteLine(date1.ToString())
      Catch e As ArgumentOutOfRangeException
         Console.WriteLine("{0} is earlier than {1} or later than {2}", _
                           date1.ToString("d", CultureInfo.InvariantCulture), _
                           arSY.DateTimeFormat.Calendar.MinSupportedDateTime.ToString("d", CultureInfo.InvariantCulture), _
                           arSY.DateTimeFormat.Calendar.MaxSupportedDateTime.ToString("d", CultureInfo.InvariantCulture))
      End Try

      ' Restore the default culture.
      Thread.CurrentThread.CurrentCulture = dft
   End Sub
End Module
' The example displays the following output:
'    01/01/0550 is earlier than 07/18/0622 or later than 12/31/9999

using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(550, 1, 1);
      CultureInfo dft;
      CultureInfo arSY = new CultureInfo("ar-SY");
      arSY.DateTimeFormat.Calendar = new HijriCalendar();

      // Change current culture to arSY.
      dft = Thread.CurrentThread.CurrentCulture;
      Thread.CurrentThread.CurrentCulture = arSY;

      // Display the date using the current culture's calendar.
      try {
         Console.WriteLine(date1.ToString());
      }
      catch (ArgumentOutOfRangeException) {
         Console.WriteLine("{0} is earlier than {1} or later than {2}",
                           date1.ToString("d", CultureInfo.InvariantCulture),
                           arSY.DateTimeFormat.Calendar.MinSupportedDateTime.ToString("d", CultureInfo.InvariantCulture),
                           arSY.DateTimeFormat.Calendar.MaxSupportedDateTime.ToString("d", CultureInfo.InvariantCulture));
      }

      // Restore the default culture.
      Thread.CurrentThread.CurrentCulture = dft;
   }
}
// The example displays the following output:
//    01/01/0550 is earlier than 07/18/0622 or later than 12/31/9999

下面的示例演示 ToString()()() 方法所返回的 DateTime 值的字符串表示形式如何因当前线程区域性而异。它将当前的线程区域性从 en-US 更改为 fr-FR 再更改为 ja-JP。在每次更改时都调用 ToString()()() 方法，以返回使用该区域性的日期和时间值的字符串表示形式。 下面的示例演示 ToString()()() 方法所返回的 DateTime 值的字符串表示形式如何因当前线程区域性而异。它将当前的线程区域性从 en-US 更改为 fr-FR 再更改为 ja-JP。在每次更改时都调用 ToString()()() 方法，以返回使用该区域性的日期和时间值的字符串表示形式。 下面的示例演示 ToString()()() 方法所返回的 DateTime 值的字符串表示形式如何因当前线程区域性而异。它将当前的线程区域性从 en-US 更改为 fr-FR 再更改为 ja-JP。在每次更改时都调用 ToString()()() 方法，以返回使用该区域性的日期和时间值的字符串表示形式。

Imports System.Globalization
Imports System.Threading

Module DateToStringExample
   Public Sub Main()
      Dim currentCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
      Dim exampleDate As Date = #05/01/2008 6:32:06PM#

      ' Display the date using the current (en-US) culture.
      Console.WriteLine(exampleDate.ToString())

      ' Change the current culture to fr-FR and display the date.
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR")
      Console.WriteLine(exampleDate.ToString())

      ' Change the current culture to ja-JP and display the date.
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ja-JP")
      Console.WriteLine(exampleDate.ToString())

      ' Restore the original culture
      Thread.CurrentThread.CurrentCulture = currentCulture
   End Sub
End Module
' The example displays the following output to the console:
'       5/1/2008 6:32:06 PM
'       01/05/2008 18:32:06
'       2008/05/01 18:32:06

using System;
using System.Globalization;
using System.Threading;

public class DateToStringExample
{
   public static void Main()
   {
      CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
      DateTime exampleDate = new DateTime(2008, 5, 1, 18, 32, 6);

      // Display the date using the current (en-US) culture.
      Console.WriteLine(exampleDate.ToString());

      // Change the current culture to fr-FR and display the date.
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
      Console.WriteLine(exampleDate.ToString());

      // Change the current culture to ja-JP and display the date.
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ja-JP");
      Console.WriteLine(exampleDate.ToString());

      // Restore the original culture
      Thread.CurrentThread.CurrentCulture = currentCulture;
   }
}
// The example displays the following output to the console:
//       5/1/2008 6:32:06 PM
//       01/05/2008 18:32:06
//       2008/05/01 18:32:06

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
ToString 重载
System 命名空间
DateTimeFormatInfo
CultureInfo


DateTime ..::.ToString 方法 (IFormatProvider)

DateTime
.
.
::
.
ToString 方法 (IFormatProvider)
DateTime 结构

使用指定的区域性特定格式信息将当前 DateTime 对象的值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
由 provider 指定的当前 DateTime 对象的值的字符串表示形式。

实现

异常 | 条件
ArgumentOutOfRangeException | 日期和时间超出了 provider 所使用日历支持的日期范围。

当前 DateTime 对象的值使用常规日期和时间格式说明符（“G”）进行格式设置，该说明符使用短日期模式和长时间模式设置输出格式。

短日期和长时间模式的格式由 provider 参数定义。provider 参数可以是以下任意一项： 短日期和长时间模式的格式由 provider 参数定义。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

  • 一个实现 IFormatProvider 接口的自定义对象。其 GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。有关更多信息，请参见CultureInfo..::.CurrentCulture。 如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。有关更多信息，请参见CultureInfo..::.CurrentCulture。

对调用者的说明

ToString(IFormatProvider) 方法返回 provider 参数表示的区域性所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。 ToString(IFormatProvider) 方法返回 provider 参数表示的区域性所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。 ToString(IFormatProvider) 方法返回 provider 参数表示的区域性所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。 ToString(IFormatProvider) 方法返回 provider 参数表示的区域性所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。 ToString(IFormatProvider) 方法返回 provider 参数表示的区域性所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim jaJP As New CultureInfo("ja-JP")
      jaJP.DateTimeFormat.Calendar = New JapaneseCalendar()
      Dim date1 As Date = #01/01/1867#

      Try
         Console.WriteLine(date1.ToString(jaJP))
      Catch e As ArgumentOutOfRangeException
         Console.WriteLine("{0:d} is earlier than {1:d} or later than {2:d}", _
                           date1, _
                           jaJP.DateTimeFormat.Calendar.MinSupportedDateTime, _
                           jaJP.DateTimeFormat.Calendar.MaxSupportedDateTime)
      End Try
   End Sub
End Module
' The example displays the following output:
'    1/1/1867 is earlier than 9/8/1868 or later than 12/31/9999

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo jaJP = new CultureInfo("ja-JP");
      jaJP.DateTimeFormat.Calendar = new JapaneseCalendar();
      DateTime date1 = new DateTime(1867, 1, 1);

      try {
         Console.WriteLine(date1.ToString(jaJP));
      }
      catch (ArgumentOutOfRangeException) {
         Console.WriteLine("{0:d} is earlier than {1:d} or later than {2:d}",
                           date1,
                           jaJP.DateTimeFormat.Calendar.MinSupportedDateTime,
                           jaJP.DateTimeFormat.Calendar.MaxSupportedDateTime);
      }
   }
}
// The example displays the following output:
//    1/1/1867 is earlier than 9/8/1868 or later than 12/31/9999   }

下面的示例使用表示五种不同区域性的 CultureInfo 对象来显示日期和时间的字符串表示形式。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim cultures() As CultureInfo = {CultureInfo.InvariantCulture, _
                                       New CultureInfo("en-us"), _
                                       New CultureInfo("fr-fr"), _
                                       New CultureInfo("de-DE"), _
                                       New CultureInfo("es-ES"), _
                                       New CultureInfo("ja-JP")}

      Dim thisDate As Date =#5/1/2009 9:00AM#

      For Each culture As CultureInfo In cultures
         Dim cultureName As String
         If String.IsNullOrEmpty(culture.Name) Then
            cultureName = culture.NativeName
         Else
            cultureName = culture.Name
         End If

         Console.WriteLine("In {0}, {1}", _
                           cultureName, thisDate.ToString(culture))
      Next
   End Sub
End Module
' The example produces the following output:
'    In Invariant Language (Invariant Country), 05/01/2009 09:00:00
'    In en-US, 5/1/2009 9:00:00 AM
'    In fr-FR, 01/05/2009 09:00:00
'    In de-DE, 01.05.2009 09:00:00
'    In es-ES, 01/05/2009 9:00:00
'    In ja-JP, 2009/05/01 9:00:00

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo[] cultures = new CultureInfo[] {CultureInfo.InvariantCulture,
                                                  new CultureInfo("en-us"),
                                                  new CultureInfo("fr-fr"),
                                                  new CultureInfo("de-DE"),
                                                  new CultureInfo("es-ES"),
                                                  new CultureInfo("ja-JP")};

      DateTime thisDate = new DateTime(2009, 5, 1, 9, 0, 0);

      foreach (CultureInfo culture in cultures)
      {
         string cultureName;
         if (string.IsNullOrEmpty(culture.Name))
            cultureName = culture.NativeName;
         else
            cultureName = culture.Name;

         Console.WriteLine("In {0}, {1}",
                           cultureName, thisDate.ToString(culture));
      }
      }
}
// The example produces the following output:
//    In Invariant Language (Invariant Country), 05/01/2009 09:00:00
//    In en-US, 5/1/2009 9:00:00 AM
//    In fr-FR, 01/05/2009 09:00:00
//    In de-DE, 01.05.2009 09:00:00
//    In es-ES, 01/05/2009 9:00:00
//    In ja-JP, 2009/05/01 9:00:00

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
ToString 重载
System 命名空间
DateTimeFormatInfo
CultureInfo


DateTime ..::.ToString 方法 (String)

DateTime
.
.
::
.
ToString 方法 (String)
DateTime 结构

使用指定的格式将当前 DateTime 对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
标准或自定义日期和时间格式的字符串。

返回值

类型： System String
当前 DateTime 对象的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 的长度是 1，并且它不是为 DateTimeFormatInfo 定义的格式说明符之一。 - 或 - format 中不包含有效的自定义格式模式。
ArgumentOutOfRangeException | 日期和时间超出了当前区域性所使用的日历支持的日期范围。

format 参数应包含用于定义返回的字符串格式的单一格式说明符（请参见标准日期和时间格式字符串）或自定义格式模式（请参见自定义日期和时间格式字符串）。如果 format 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则使用一般格式说明符“G”。 format 参数应包含用于定义返回的字符串格式的单一格式说明符（请参见标准日期和时间格式字符串）或自定义格式模式（请参见自定义日期和时间格式字符串）。如果 format 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则使用一般格式说明符“G”。

此方法使用从当前区域性派生的格式设置信息。有关更多信息，请参见CurrentCulture。 此方法使用从当前区域性派生的格式设置信息。有关更多信息，请参见CurrentCulture。

对调用者的说明

ToString(String) 方法返回当前区域性所使用的日历中日期和时间的字符串表示。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为希伯来语（以色列）时，它尝试在 HebrewCalendar 类的范围之外设置日期格式。 ToString(String) 方法返回当前区域性所使用的日历中日期和时间的字符串表示。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为希伯来语（以色列）时，它尝试在 HebrewCalendar 类的范围之外设置日期格式。 ToString(String) 方法返回当前区域性所使用的日历中日期和时间的字符串表示。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为希伯来语（以色列）时，它尝试在 HebrewCalendar 类的范围之外设置日期格式。 ToString(String) 方法返回当前区域性所使用的日历中日期和时间的字符串表示。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为希伯来语（以色列）时，它尝试在 HebrewCalendar 类的范围之外设置日期格式。

Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim date1 As Date = #7/21/1550#
      Dim dft As CultureInfo
      Dim heIL As New CultureInfo("he-IL")
      heIL.DateTimeFormat.Calendar = New HebrewCalendar()

      ' Change current culture to he-IL.
      dft = Thread.CurrentThread.CurrentCulture
      Thread.CurrentThread.CurrentCulture = heIL

      ' Display the date using the current culture's calendar.
      Try
         Console.WriteLine(date1.ToString("G"))
      Catch e As ArgumentOutOfRangeException
         Console.WriteLine("{0} is earlier than {1} or later than {2}", _
                           date1.ToString("d", CultureInfo.InvariantCulture), _
                           heIL.DateTimeFormat.Calendar.MinSupportedDateTime.ToString("d", CultureInfo.InvariantCulture), _
                           heIL.DateTimeFormat.Calendar.MaxSupportedDateTime.ToString("d", CultureInfo.InvariantCulture))
      End Try

      ' Restore the default culture.
      Thread.CurrentThread.CurrentCulture = dft
   End Sub
End Module
' The example displays the following output:
'    07/21/1550 is earlier than 01/01/1583 or later than 09/29/2239

using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(1550, 7, 21);
      CultureInfo dft;
      CultureInfo heIL = new CultureInfo("he-IL");
      heIL.DateTimeFormat.Calendar = new HebrewCalendar();

      // Change current culture to he-IL.
      dft = Thread.CurrentThread.CurrentCulture;
      Thread.CurrentThread.CurrentCulture = heIL;

      // Display the date using the current culture's calendar.
      try {
         Console.WriteLine(date1.ToString("G"));
      }
      catch (ArgumentOutOfRangeException) {
         Console.WriteLine("{0} is earlier than {1} or later than {2}",
                           date1.ToString("d", CultureInfo.InvariantCulture),
                           heIL.DateTimeFormat.Calendar.MinSupportedDateTime.ToString("d", CultureInfo.InvariantCulture),
                           heIL.DateTimeFormat.Calendar.MaxSupportedDateTime.ToString("d", CultureInfo.InvariantCulture));
      }

      // Restore the default culture.
      Thread.CurrentThread.CurrentCulture = dft;
   }
}
// The example displays the following output:
//    07/21/1550 is earlier than 01/01/1583 or later than 09/29/2239

下面的示例使用每个标准日期和时间格式字符串以及所选的自定义日期和时间格式字符串来显示 DateTime 值的字符串表示形式。该示例的当前线程区域性是 en-US。 下面的示例使用每个标准日期和时间格式字符串以及所选的自定义日期和时间格式字符串来显示 DateTime 值的字符串表示形式。该示例的当前线程区域性是 en-US。

Module DateToStringExample
   Public Sub Main()
      Dim dateValue As Date = #6/15/2008 9:15:07PM#
      ' Create an array of standard format strings.
      Dim standardFmts() As String = {"d", "D", "f", "F", "g", "G", _
                                      "m", "o", "R", "s", "t", "T", _
                                      "u", "U", "y"}
      ' Output date and time using each standard format string.
      For Each standardFmt As String In standardFmts
         Console.WriteLine("{0}: {1}", standardFmt, _
                           dateValue.ToString(standardFmt))
      Next
      Console.WriteLine()

      ' Create an array of some custom format strings.
      Dim customFmts() As String = {"h:mm:ss.ff t", "d MMM yyyy", "HH:mm:ss.f", _
                                    "dd MMM HH:mm:ss", "\Mon\t\h\: M", "HH:mm:ss.ffffzzz" }
      ' Output date and time using each custom format string.
      For Each customFmt As String In customFmts
         Console.WriteLine("'{0}': {1}", customFmt, _
                           dateValue.ToString(customFmt))
      Next
   End Sub
End Module
' This example displays the following output to the console:
'       d: 6/15/2008
'       D: Sunday, June 15, 2008
'       f: Sunday, June 15, 2008 9:15 PM
'       F: Sunday, June 15, 2008 9:15:07 PM
'       g: 6/15/2008 9:15 PM
'       G: 6/15/2008 9:15:07 PM
'       m: June 15
'       o: 2008-06-15T21:15:07.0000000
'       R: Sun, 15 Jun 2008 21:15:07 GMT
'       s: 2008-06-15T21:15:07
'       t: 9:15 PM
'       T: 9:15:07 PM
'       u: 2008-06-15 21:15:07Z
'       U: Monday, June 16, 2008 4:15:07 AM
'       y: June, 2008
'
'       'h:mm:ss.ff t': 9:15:07.00 P
'       'd MMM yyyy': 15 Jun 2008
'       'HH:mm:ss.f': 21:15:07.0
'       'dd MMM HH:mm:ss': 15 Jun 21:15:07
'       '\Mon\t\h\: M': Month: 6
'       'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

using System;

public class DateToStringExample
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2008, 6, 15, 21, 15, 07);
      // Create an array of standard format strings.
      string[] standardFmts = {"d", "D", "f", "F", "g", "G", "m", "o",
                               "R", "s", "t", "T", "u", "U", "y"};
      // Output date and time using each standard format string.
      foreach (string standardFmt in standardFmts)
         Console.WriteLine("{0}: {1}", standardFmt,
                           dateValue.ToString(standardFmt));
      Console.WriteLine();

      // Create an array of some custom format strings.
      string[] customFmts = {"h:mm:ss.ff t", "d MMM yyyy", "HH:mm:ss.f",
                             "dd MMM HH:mm:ss", @"\Mon\t\h\: M", "HH:mm:ss.ffffzzz" };
      // Output date and time using each custom format string.
      foreach (string customFmt in customFmts)
         Console.WriteLine("'{0}': {1}", customFmt,
                           dateValue.ToString(customFmt));
   }
}
// This example displays the following output to the console:
//       d: 6/15/2008
//       D: Sunday, June 15, 2008
//       f: Sunday, June 15, 2008 9:15 PM
//       F: Sunday, June 15, 2008 9:15:07 PM
//       g: 6/15/2008 9:15 PM
//       G: 6/15/2008 9:15:07 PM
//       m: June 15
//       o: 2008-06-15T21:15:07.0000000
//       R: Sun, 15 Jun 2008 21:15:07 GMT
//       s: 2008-06-15T21:15:07
//       t: 9:15 PM
//       T: 9:15:07 PM
//       u: 2008-06-15 21:15:07Z
//       U: Monday, June 16, 2008 4:15:07 AM
//       y: June, 2008
//
//       'h:mm:ss.ff t': 9:15:07.00 P
//       'd MMM yyyy': 15 Jun 2008
//       'HH:mm:ss.f': 21:15:07.0
//       'dd MMM HH:mm:ss': 15 Jun 21:15:07
//       '\Mon\t\h\: M': Month: 6
//       'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
ToString 重载
System 命名空间
DateTimeFormatInfo
CultureInfo

其他资源

格式化类型
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.ToString 方法 (String, IFormatProvider)

DateTime
.
.
::
.
ToString 方法 (String, IFormatProvider)
DateTime 结构

使用指定的格式和区域性特定格式信息将当前 DateTime 对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
标准或自定义日期和时间格式的字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
由 format 和 provider 指定的当前 DateTime 对象的值的字符串表示形式。

实现

异常 | 条件
FormatException | format 的长度是 1，并且它不是为 DateTimeFormatInfo 定义的格式说明符之一。 - 或 - format 中不包含有效的自定义格式模式。
ArgumentOutOfRangeException | 日期和时间超出了 provider 所使用日历支持的日期范围。

format 参数可以包含单个格式说明符（请参见标准日期和时间格式字符串），也可以包含自定义格式模式（请参见自定义日期和时间格式字符串）。如果 format 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用标准格式说明符“G”。 format 参数可以包含单个格式说明符（请参见标准日期和时间格式字符串），也可以包含自定义格式模式（请参见自定义日期和时间格式字符串）。如果 format 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用标准格式说明符“G”。

provider 参数定义与标准格式说明符相对应的模式，以及日期和时间组成部分的符号和名称。provider 参数可以是以下任意一项： provider 参数定义与标准格式说明符相对应的模式，以及日期和时间组成部分的符号和名称。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

  • 一个实现 IFormatProvider 接口的自定义对象。其 GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相关联的 DateTimeFormatInfo。有关更多信息，请参见CultureInfo..::.CurrentCulture。 如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相关联的 DateTimeFormatInfo。有关更多信息，请参见CultureInfo..::.CurrentCulture。

对调用者的说明

ToString(String, IFormatProvider) 方法返回 provider 参数所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。 ToString(String, IFormatProvider) 方法返回 provider 参数所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。 ToString(String, IFormatProvider) 方法返回 provider 参数所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。 ToString(String, IFormatProvider) 方法返回 provider 参数所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。 ToString(String, IFormatProvider) 方法返回 provider 参数所使用的日历中日期和时间的字符串表示。其日历由 Calendar 属性定义。如果当前 DateTime 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，则该方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim arSA As New CultureInfo("ar-SA")
      arSA.DateTimeFormat.Calendar = New UmAlQuraCalendar()
      Dim date1 As Date = #09/10/1890#

      Try
         Console.WriteLine(date1.ToString("d", arSA))
      Catch e As ArgumentOutOfRangeException
         Console.WriteLine("{0:d} is earlier than {1:d} or later than {2:d}", _
                           date1, _
                           arSA.DateTimeFormat.Calendar.MinSupportedDateTime, _
                           arSA.DateTimeFormat.Calendar.MaxSupportedDateTime)
      End Try
   End Sub
End Module
' The example displays the following output:
'    9/10/1890 is earlier than 4/30/1900 or later than 5/13/2029

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo arSA = new CultureInfo("ar-SA");
      arSA.DateTimeFormat.Calendar = new UmAlQuraCalendar();
      DateTime date1 = new DateTime(1890, 9, 10);

      try {
         Console.WriteLine(date1.ToString("d", arSA));
      }
      catch (ArgumentOutOfRangeException) {
         Console.WriteLine("{0:d} is earlier than {1:d} or later than {2:d}",
                           date1,
                           arSA.DateTimeFormat.Calendar.MinSupportedDateTime,
                           arSA.DateTimeFormat.Calendar.MaxSupportedDateTime);
      }
   }
}
// The example displays the following output:
//    9/10/1890 is earlier than 4/30/1900 or later than 5/13/2029

下面的示例使用每个标准日期和时间字符串来显示四种不同区域性的日期和时间的字符串表示形式。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Create an array of all supported standard date and time format specifiers.
      Dim formats() As String = {"d", "D", "f", "F", "g", "G", "m", "o", "r", _
                                 "s", "t", "T", "u", "U", "Y"}
      ' Create an array of four cultures.
      Dim cultures() As CultureInfo = {CultureInfo.CreateSpecificCulture("de-DE"), _
                                       CultureInfo.CreateSpecificCulture("en-US"), _
                                       CultureInfo.CreateSpecificCulture("es-ES"), _
                                       CultureInfo.CreateSpecificCulture("fr-FR")}
       ' Define date to be displayed.
      Dim dateToDisplay As Date = #10/1/2008 17:04:32#

      ' Iterate each standard format specifier.
      For Each formatSpecifier As String In formats
         For Each culture As CultureInfo In cultures
            Console.WriteLine("{0} Format Specifier {1, 10} Culture {2, 40}", _
                              formatSpecifier, culture.Name, _
                              dateToDisplay.ToString(formatSpecifier, culture))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    d Format Specifier      de-DE Culture                               01.10.2008
'    d Format Specifier      en-US Culture                                10/1/2008
'    d Format Specifier      es-ES Culture                               01/10/2008
'    d Format Specifier      fr-FR Culture                               01/10/2008
'
'    D Format Specifier      de-DE Culture                Mittwoch, 1. Oktober 2008
'    D Format Specifier      en-US Culture              Wednesday, October 01, 2008
'    D Format Specifier      es-ES Culture         mi rcoles, 01 de octubre de 2008
'    D Format Specifier      fr-FR Culture                  mercredi 1 octobre 2008
'
'    f Format Specifier      de-DE Culture          Mittwoch, 1. Oktober 2008 17:04
'    f Format Specifier      en-US Culture      Wednesday, October 01, 2008 5:04 PM
'    f Format Specifier      es-ES Culture   mi rcoles, 01 de octubre de 2008 17:04
'    f Format Specifier      fr-FR Culture            mercredi 1 octobre 2008 17:04
'
'    F Format Specifier      de-DE Culture       Mittwoch, 1. Oktober 2008 17:04:32
'    F Format Specifier      en-US Culture   Wednesday, October 01, 2008 5:04:32 PM
'    F Format Specifier      es-ES Culture mi rcoles, 01 de octubre de 2008 17:04:3
'    F Format Specifier      fr-FR Culture         mercredi 1 octobre 2008 17:04:32
'
'    g Format Specifier      de-DE Culture                         01.10.2008 17:04
'    g Format Specifier      en-US Culture                        10/1/2008 5:04 PM
'    g Format Specifier      es-ES Culture                         01/10/2008 17:04
'    g Format Specifier      fr-FR Culture                         01/10/2008 17:04
'
'    G Format Specifier      de-DE Culture                      01.10.2008 17:04:32
'    G Format Specifier      en-US Culture                     10/1/2008 5:04:32 PM
'    G Format Specifier      es-ES Culture                      01/10/2008 17:04:32
'    G Format Specifier      fr-FR Culture                      01/10/2008 17:04:32
'
'    m Format Specifier      de-DE Culture                               01 Oktober
'    m Format Specifier      en-US Culture                               October 01
'    m Format Specifier      es-ES Culture                               01 octubre
'    m Format Specifier      fr-FR Culture                                1 octobre
'
'    o Format Specifier      de-DE Culture              2008-10-01T17:04:32.0000000
'    o Format Specifier      en-US Culture              2008-10-01T17:04:32.0000000
'    o Format Specifier      es-ES Culture              2008-10-01T17:04:32.0000000
'    o Format Specifier      fr-FR Culture              2008-10-01T17:04:32.0000000
'
'    r Format Specifier      de-DE Culture            Wed, 01 Oct 2008 17:04:32 GMT
'    r Format Specifier      en-US Culture            Wed, 01 Oct 2008 17:04:32 GMT
'    r Format Specifier      es-ES Culture            Wed, 01 Oct 2008 17:04:32 GMT
'    r Format Specifier      fr-FR Culture            Wed, 01 Oct 2008 17:04:32 GMT
'
'    s Format Specifier      de-DE Culture                      2008-10-01T17:04:32
'    s Format Specifier      en-US Culture                      2008-10-01T17:04:32
'    s Format Specifier      es-ES Culture                      2008-10-01T17:04:32
'    s Format Specifier      fr-FR Culture                      2008-10-01T17:04:32
'
'    t Format Specifier      de-DE Culture                                    17:04
'    t Format Specifier      en-US Culture                                  5:04 PM
'    t Format Specifier      es-ES Culture                                    17:04
'    t Format Specifier      fr-FR Culture                                    17:04
'
'    T Format Specifier      de-DE Culture                                 17:04:32
'    T Format Specifier      en-US Culture                               5:04:32 PM
'    T Format Specifier      es-ES Culture                                 17:04:32
'    T Format Specifier      fr-FR Culture                                 17:04:32
'
'    u Format Specifier      de-DE Culture                     2008-10-01 17:04:32Z
'    u Format Specifier      en-US Culture                     2008-10-01 17:04:32Z
'    u Format Specifier      es-ES Culture                     2008-10-01 17:04:32Z
'    u Format Specifier      fr-FR Culture                     2008-10-01 17:04:32Z
'
'    U Format Specifier      de-DE Culture     Donnerstag, 2. Oktober 2008 00:04:32
'    U Format Specifier      en-US Culture   Thursday, October 02, 2008 12:04:32 AM
'    U Format Specifier      es-ES Culture    jueves, 02 de octubre de 2008 0:04:32
'    U Format Specifier      fr-FR Culture            jeudi 2 octobre 2008 00:04:32
'
'    Y Format Specifier      de-DE Culture                             Oktober 2008
'    Y Format Specifier      en-US Culture                            October, 2008
'    Y Format Specifier      es-ES Culture                          octubre de 2008
'    Y Format Specifier      fr-FR Culture                             octobre 2008

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Create an array of all supported standard date and time format specifiers.
      string[] formats = {"d", "D", "f", "F", "g", "G", "m", "o", "r",
                          "s", "t", "T", "u", "U", "Y"};
      // Create an array of four cultures.
      CultureInfo[] cultures = {CultureInfo.CreateSpecificCulture("de-DE"),
                                CultureInfo.CreateSpecificCulture("en-US"),
                                CultureInfo.CreateSpecificCulture("es-ES"),
                                CultureInfo.CreateSpecificCulture("fr-FR")};
       // Define date to be displayed.
      DateTime dateToDisplay = new DateTime(2008, 10, 1, 17, 4, 32);

      // Iterate each standard format specifier.
      foreach (string formatSpecifier in formats)
      {
         foreach (CultureInfo culture in cultures)
            Console.WriteLine("{0} Format Specifier {1, 10} Culture {2, 40}",
                              formatSpecifier, culture.Name,
                              dateToDisplay.ToString(formatSpecifier, culture));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    d Format Specifier      de-DE Culture                               01.10.2008
//    d Format Specifier      en-US Culture                                10/1/2008
//    d Format Specifier      es-ES Culture                               01/10/2008
//    d Format Specifier      fr-FR Culture                               01/10/2008
//
//    D Format Specifier      de-DE Culture                Mittwoch, 1. Oktober 2008
//    D Format Specifier      en-US Culture              Wednesday, October 01, 2008
//    D Format Specifier      es-ES Culture         mi rcoles, 01 de octubre de 2008
//    D Format Specifier      fr-FR Culture                  mercredi 1 octobre 2008
//
//    f Format Specifier      de-DE Culture          Mittwoch, 1. Oktober 2008 17:04
//    f Format Specifier      en-US Culture      Wednesday, October 01, 2008 5:04 PM
//    f Format Specifier      es-ES Culture   mi rcoles, 01 de octubre de 2008 17:04
//    f Format Specifier      fr-FR Culture            mercredi 1 octobre 2008 17:04
//
//    F Format Specifier      de-DE Culture       Mittwoch, 1. Oktober 2008 17:04:32
//    F Format Specifier      en-US Culture   Wednesday, October 01, 2008 5:04:32 PM
//    F Format Specifier      es-ES Culture mi rcoles, 01 de octubre de 2008 17:04:3
//    F Format Specifier      fr-FR Culture         mercredi 1 octobre 2008 17:04:32
//
//    g Format Specifier      de-DE Culture                         01.10.2008 17:04
//    g Format Specifier      en-US Culture                        10/1/2008 5:04 PM
//    g Format Specifier      es-ES Culture                         01/10/2008 17:04
//    g Format Specifier      fr-FR Culture                         01/10/2008 17:04
//
//    G Format Specifier      de-DE Culture                      01.10.2008 17:04:32
//    G Format Specifier      en-US Culture                     10/1/2008 5:04:32 PM
//    G Format Specifier      es-ES Culture                      01/10/2008 17:04:32
//    G Format Specifier      fr-FR Culture                      01/10/2008 17:04:32
//
//    m Format Specifier      de-DE Culture                               01 Oktober
//    m Format Specifier      en-US Culture                               October 01
//    m Format Specifier      es-ES Culture                               01 octubre
//    m Format Specifier      fr-FR Culture                                1 octobre
//
//    o Format Specifier      de-DE Culture              2008-10-01T17:04:32.0000000
//    o Format Specifier      en-US Culture              2008-10-01T17:04:32.0000000
//    o Format Specifier      es-ES Culture              2008-10-01T17:04:32.0000000
//    o Format Specifier      fr-FR Culture              2008-10-01T17:04:32.0000000
//
//    r Format Specifier      de-DE Culture            Wed, 01 Oct 2008 17:04:32 GMT
//    r Format Specifier      en-US Culture            Wed, 01 Oct 2008 17:04:32 GMT
//    r Format Specifier      es-ES Culture            Wed, 01 Oct 2008 17:04:32 GMT
//    r Format Specifier      fr-FR Culture            Wed, 01 Oct 2008 17:04:32 GMT
//
//    s Format Specifier      de-DE Culture                      2008-10-01T17:04:32
//    s Format Specifier      en-US Culture                      2008-10-01T17:04:32
//    s Format Specifier      es-ES Culture                      2008-10-01T17:04:32
//    s Format Specifier      fr-FR Culture                      2008-10-01T17:04:32
//
//    t Format Specifier      de-DE Culture                                    17:04
//    t Format Specifier      en-US Culture                                  5:04 PM
//    t Format Specifier      es-ES Culture                                    17:04
//    t Format Specifier      fr-FR Culture                                    17:04
//
//    T Format Specifier      de-DE Culture                                 17:04:32
//    T Format Specifier      en-US Culture                               5:04:32 PM
//    T Format Specifier      es-ES Culture                                 17:04:32
//    T Format Specifier      fr-FR Culture                                 17:04:32
//
//    u Format Specifier      de-DE Culture                     2008-10-01 17:04:32Z
//    u Format Specifier      en-US Culture                     2008-10-01 17:04:32Z
//    u Format Specifier      es-ES Culture                     2008-10-01 17:04:32Z
//    u Format Specifier      fr-FR Culture                     2008-10-01 17:04:32Z
//
//    U Format Specifier      de-DE Culture     Donnerstag, 2. Oktober 2008 00:04:32
//    U Format Specifier      en-US Culture   Thursday, October 02, 2008 12:04:32 AM
//    U Format Specifier      es-ES Culture    jueves, 02 de octubre de 2008 0:04:32
//    U Format Specifier      fr-FR Culture            jeudi 2 octobre 2008 00:04:32
//
//    Y Format Specifier      de-DE Culture                             Oktober 2008
//    Y Format Specifier      en-US Culture                            October, 2008
//    Y Format Specifier      es-ES Culture                          octubre de 2008
//    Y Format Specifier      fr-FR Culture                             octobre 2008

下面的代码示例演示用不变量 DateTimeFormatInfo 设置 DateTime 值的格式的不同方法。

Option Explicit
Option Strict

Imports System
Imports System.Globalization

Public Class MainClass

    Public Shared Sub Main()
        Dim dt As DateTime = DateTime.Now
        Dim myformat() As String =  {"d", "D", _
                                    "f", "F", _
                                    "g", "G", _
                                    "m", _
                                    "r", _
                                    "s", _
                                    "t", "T", _
                                    "u", "U", _
                                    "y", _
                                    "dddd, MMMM dd yyyy", _
                                    "ddd, MMM d ""'""yy", _
                                    "dddd, MMMM dd", _
                                    "M/yy", _
                                    "dd-MM-yy"}
        Dim mydate As String
        Dim i As Integer
        For i = 0 To myformat.Length - 1
            mydate = dt.ToString(myformat(i), DateTimeFormatInfo.InvariantInfo)
            Console.WriteLine(String.Concat(myformat(i), " :", mydate))
        Next i

    ' Output.
    '
    ' d :08/17/2000
    ' D :Thursday, August 17, 2000
    ' f :Thursday, August 17, 2000 16:32
    ' F :Thursday, August 17, 2000 16:32:32
    ' g :08/17/2000 16:32
    ' G :08/17/2000 16:32:32
    ' m :August 17
    ' r :Thu, 17 Aug 2000 23:32:32 GMT
    ' s :2000-08-17T16:32:32
    ' t :16:32
    ' T :16:32:32
    ' u :2000-08-17 23:32:32Z
    ' U :Thursday, August 17, 2000 23:32:32
    ' y :August, 2000
    ' dddd, MMMM dd yyyy :Thursday, August 17 2000
    ' ddd, MMM d "'"yy :Thu, Aug 17 '00
    ' dddd, MMMM dd :Thursday, August 17
    ' M/yy :8/00
    ' dd-MM-yy :17-08-00
    End Sub 'Main
End Class 'MainClass

 using System;
 using System.Globalization;

public class MainClass {
    public static void Main(string[] args)  {
        DateTime dt = DateTime.Now;
        String[] format = {
            "d", "D",
            "f", "F",
            "g", "G",
            "m",
            "r",
            "s",
            "t", "T",
            "u", "U",
            "y",
            "dddd, MMMM dd yyyy",
            "ddd, MMM d \"'\"yy",
            "dddd, MMMM dd",
            "M/yy",
            "dd-MM-yy",
        };
        String date;
        for (int i = 0; i < format.Length; i++) {
            date = dt.ToString(format[i], DateTimeFormatInfo.InvariantInfo);
            Console.WriteLine(String.Concat(format[i], " :" , date));
        }

   /** Output.
    *
    * d :08/17/2000
    * D :Thursday, August 17, 2000
    * f :Thursday, August 17, 2000 16:32
    * F :Thursday, August 17, 2000 16:32:32
    * g :08/17/2000 16:32
    * G :08/17/2000 16:32:32
    * m :August 17
    * r :Thu, 17 Aug 2000 23:32:32 GMT
    * s :2000-08-17T16:32:32
    * t :16:32
    * T :16:32:32
    * u :2000-08-17 23:32:32Z
    * U :Thursday, August 17, 2000 23:32:32
    * y :August, 2000
    * dddd, MMMM dd yyyy :Thursday, August 17 2000
    * ddd, MMM d "'"yy :Thu, Aug 17 '00
    * dddd, MMMM dd :Thursday, August 17
    * M/yy :8/00
    * dd-MM-yy :17-08-00
    */
    }
}

using namespace System;
using namespace System::Globalization;
void main()
{
   DateTime dt = DateTime::Now;
   array<String^>^format = {L"d",L"D",L"f",L"F",L"g",L"G",L"m",L"r",L"s",L"t",L"T",L"u",L"U",L"y",L"dddd, MMMM dd yyyy",L"ddd, MMM d \"'\"yy",L"dddd, MMMM dd",L"M/yy",L"dd-MM-yy"};
   String^ date;
   for ( int i = 0; i < format->Length; i++ )
   {
      date = dt.ToString( format[ i ], DateTimeFormatInfo::InvariantInfo );
      Console::WriteLine( String::Concat( format[ i ], L" :", date ) );

   }

   /** Output.
       *
       * d :08/17/2000
       * D :Thursday, August 17, 2000
       * f :Thursday, August 17, 2000 16:32
       * F :Thursday, August 17, 2000 16:32:32
       * g :08/17/2000 16:32
       * G :08/17/2000 16:32:32
       * m :August 17
       * r :Thu, 17 Aug 2000 23:32:32 GMT
       * s :2000-08-17T16:32:32
       * t :16:32
       * T :16:32:32
       * u :2000-08-17 23:32:32Z
       * U :Thursday, August 17, 2000 23:32:32
       * y :August, 2000
       * dddd, MMMM dd yyyy :Thursday, August 17 2000
       * ddd, MMM d "'"yy :Thu, Aug 17 '00
       * dddd, MMMM dd :Thursday, August 17
       * M/yy :8/00
       * dd-MM-yy :17-08-00
       */
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
ToString 重载
System 命名空间
DateTimeFormatInfo
CultureInfo

其他资源

格式化类型
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.ToUniversalTime 方法

DateTime
.
.
::
.
ToUniversalTime 方法
DateTime 结构

将当前 DateTime 对象的值转换为协调世界时 (UTC)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToUniversalTime As DateTime
public DateTime ToUniversalTime()
public:
DateTime ToUniversalTime()
member ToUniversalTime : unit -> DateTime

返回值

类型： System DateTime
一个对象，其 Kind 属性为 Utc，并且其值为等效于当前 DateTime 对象的值的 UTC；如果经转换的值过大以至于不能由 DateTime 对象表示，则为 MaxValue，或者，如果经转换的值过小以至于不能由 DateTime 对象表示，则为 MinValue。

协调世界时 (UTC) 等于本地时间减去 UTC 偏移量。有关 UTC 偏移量的更多信息，请参见 TimeZone..::.GetUtcOffset。转换还要考虑应用于当前 DateTime 对象所表示的时间的夏时制规则。 协调世界时 (UTC) 等于本地时间减去 UTC 偏移量。有关 UTC 偏移量的更多信息，请参见 TimeZone..::.GetUtcOffset。转换还要考虑应用于当前 DateTime 对象所表示的时间的夏时制规则。 协调世界时 (UTC) 等于本地时间减去 UTC 偏移量。有关 UTC 偏移量的更多信息，请参见 TimeZone..::.GetUtcOffset。转换还要考虑应用于当前 DateTime 对象所表示的时间的夏时制规则。

重要说明 重要事项

ToUniversalTime 方法只识别从本地时间转换为 UTC 时的当前调整规则。因此，当前调整规则生效之前的转换可能不能准确反映本地时间和 UTC 之间的差值。 ToUniversalTime 方法只识别从本地时间转换为 UTC 时的当前调整规则。因此，当前调整规则生效之前的转换可能不能准确反映本地时间和 UTC 之间的差值。

从 .NET Framework 2.0 版开始，ToUniversalTime 方法返回的值由当前 DateTime 对象的 Kind 属性确定。下表说明了可能的值。 从 .NET Framework 2.0 版开始，ToUniversalTime 方法返回的值由当前 DateTime 对象的 Kind 属性确定。下表说明了可能的值。

Kind | 结果
Utc | 未执行任何转换。
Local | 当前 DateTime 对象被转换 UTC。
Unspecified | 假定当前 DateTime 对象为本地时间，并且执行转换时将 Kind 视作 Local。
说明 说明

ToUniversalTime 方法将 DateTime 值从本地时间转换为 UTC。若要将非本地时区的时间转换为 UTC，请使用 TimeZoneInfo..::.ConvertTimeToUtc(DateTime, TimeZoneInfo) 方法。若要转换与 UTC 的偏移量已知的时间，请使用 ToUniversalTime 方法。 ToUniversalTime 方法将 DateTime 值从本地时间转换为 UTC。若要将非本地时区的时间转换为 UTC，请使用 TimeZoneInfo..::.ConvertTimeToUtc(DateTime, TimeZoneInfo) 方法。若要转换与 UTC 的偏移量已知的时间，请使用 ToUniversalTime 方法。 ToUniversalTime 方法将 DateTime 值从本地时间转换为 UTC。若要将非本地时区的时间转换为 UTC，请使用 TimeZoneInfo..::.ConvertTimeToUtc(DateTime, TimeZoneInfo) 方法。若要转换与 UTC 的偏移量已知的时间，请使用 ToUniversalTime 方法。

如果日期和时间实例值为不明确的时间，则此方法假定该时间为标准时间。（不明确的时间是指可在本地时区中映射为标准时间或夏时制的时间。）如果日期和时间实例值为无效时间，则此方法只从本地时区的 UTC 偏移量中减去本地时间，以返回 UTC。（无效时间是指因应用夏时制调整规则而不存在的时间。） 如果日期和时间实例值为不明确的时间，则此方法假定该时间为标准时间。（不明确的时间是指可在本地时区中映射为标准时间或夏时制的时间。）如果日期和时间实例值为无效时间，则此方法只从本地时区的 UTC 偏移量中减去本地时间，以返回 UTC。（无效时间是指因应用夏时制调整规则而不存在的时间。） 如果日期和时间实例值为不明确的时间，则此方法假定该时间为标准时间。（不明确的时间是指可在本地时区中映射为标准时间或夏时制的时间。）如果日期和时间实例值为无效时间，则此方法只从本地时区的 UTC 偏移量中减去本地时间，以返回 UTC。（无效时间是指因应用夏时制调整规则而不存在的时间。）

对调用者的说明

有时可使用 ToUniversalTime 方法将本地时间转换为 UTC，随后再通过调用 ToLocalTime 方法来恢复。但是，如果原始时间表示本地时区中的一个无效的时间，这两个当地时间值将会不相等。有关更多信息和一个示例，请参见 ToLocalTime 方法。 有时可使用 ToUniversalTime 方法将本地时间转换为 UTC，随后再通过调用 ToLocalTime 方法来恢复。但是，如果原始时间表示本地时区中的一个无效的时间，这两个当地时间值将会不相等。有关更多信息和一个示例，请参见 ToLocalTime 方法。 有时可使用 ToUniversalTime 方法将本地时间转换为 UTC，随后再通过调用 ToLocalTime 方法来恢复。但是，如果原始时间表示本地时区中的一个无效的时间，这两个当地时间值将会不相等。有关更多信息和一个示例，请参见 ToLocalTime 方法。

下面的代码示例演示 ToUniversalTime 方法。

System.Console.WriteLine("Enter a date and time.")
Dim strDateTime As String
strDateTime = System.Console.ReadLine()

Dim localDateTime As System.DateTime
Try
   localDateTime = System.DateTime.Parse(strDateTime)
Catch exp As System.FormatException
   System.Console.WriteLine("Invalid format.")
End Try

Dim univDateTime As System.DateTime
univDateTime = localDateTime.ToUniversalTime()

System.Console.WriteLine("{0} local time is {1} universal time.", _
                           localDateTime, _
                           univDateTime)

System.Console.WriteLine("Enter a date and time in universal time.")
strDateTime = System.Console.ReadLine()

Try
   univDateTime = System.DateTime.Parse(strDateTime)
Catch exp As System.FormatException
   System.Console.WriteLine("Invalid format.")
End Try

localDateTime = univDateTime.ToLocalTime()

System.Console.WriteLine("{0} universal time is {1} local time.", _
                           univDateTime, _
                           localDateTime)

            System.Console.WriteLine("Enter a date and time.");
            string strDateTime = System.Console.ReadLine();

            System.DateTime localDateTime;
            try {
                localDateTime = System.DateTime.Parse(strDateTime);
            }
            catch (System.FormatException) {
                System.Console.WriteLine("Invalid format.");
                return;
            }

            System.DateTime univDateTime = localDateTime.ToUniversalTime();

            System.Console.WriteLine("{0} local time is {1} universal time.",
                                     localDateTime,
                                     univDateTime);

            System.Console.WriteLine("Enter a date and time in universal time.");
            strDateTime = System.Console.ReadLine();

            try {
                univDateTime = System.DateTime.Parse(strDateTime);
            }
            catch (System.FormatException) {
                System.Console.WriteLine("Invalid format.");
                return;
            }

            localDateTime = univDateTime.ToLocalTime();

            System.Console.WriteLine("{0} universal time is {1} local time.",
                                     univDateTime,
                                     localDateTime);

System::Console::WriteLine( "Enter a date and time." );
String^ strDateTime = System::Console::ReadLine();

System::DateTime localDateTime;
try
{
   localDateTime = System::DateTime::Parse( strDateTime );
}
catch ( System::FormatException^ )
{
   System::Console::WriteLine( "Invalid format." );
   return;
}

System::DateTime univDateTime = localDateTime.ToUniversalTime();

System::Console::WriteLine( "{0} local time is {1} universal time.",
   localDateTime, univDateTime );

System::Console::WriteLine( "Enter a date and time in universal time." );
strDateTime = System::Console::ReadLine();

try
{
   univDateTime = System::DateTime::Parse( strDateTime );
}
catch ( System::FormatException^ )
{
   System::Console::WriteLine( "Invalid format." );
   return;
}

localDateTime = univDateTime.ToLocalTime();

System::Console::WriteLine( "{0} universal time is {1} local time.",
   univDateTime, localDateTime );

下面的代码示例使用 SpecifyKind 方法演示 Kind 属性如何影响 ToLocalTime 和 ToUniversalTime 转换方法。

' This code example demonstrates the DateTime Kind, Now, and
' UtcNow properties, and the SpecifyKind(), ToLocalTime(),
' and ToUniversalTime() methods.
Imports System

Class Sample
    Public Shared Sub Main()
        ' Get the date and time for the current moment, adjusted
        ' to the local time zone.
        Dim saveNow As DateTime = DateTime.Now

        ' Get the date and time for the current moment expressed
        ' as coordinated universal time (UTC).
        Dim saveUtcNow As DateTime = DateTime.UtcNow
        Dim myDt As DateTime

        ' Display the value and Kind property of the current moment
        ' expressed as UTC and local time.
        DisplayNow("UtcNow: ..........", saveUtcNow)
        DisplayNow("Now: .............", saveNow)
        Console.WriteLine()

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Utc and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc)
        Display("Utc: .............", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Local and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local)
        Display("Local: ...........", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Unspecified and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified)
        Display("Unspecified: .....", myDt)
    End Sub 'Main

    ' Display the value and Kind property of a DateTime structure, the
    ' DateTime structure converted to local time, and the DateTime
    ' structure converted to universal time.

    Public Shared datePatt As String = "M/d/yyyy hh:mm:ss tt"

    Public Shared Sub Display(ByVal title As String, ByVal inputDt As DateTime)
        Dim dispDt As DateTime = inputDt
        Dim dtString As String

        ' Display the original DateTime.
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, dispDt.Kind)

        ' Convert inputDt to local time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was universal time.
        dispDt = inputDt.ToLocalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}", dtString, dispDt.Kind)

        ' Convert inputDt to universal time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was local time.
        dispDt = inputDt.ToUniversalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}", dtString, dispDt.Kind)
        Console.WriteLine()
    End Sub 'Display

    ' Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    Public Shared Sub DisplayNow(ByVal title As String, ByVal inputDt As DateTime)
        Dim dtString As String = inputDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, inputDt.Kind)
    End Sub 'DisplayNow
End Class 'Sample

'
'This code example produces the following results:
'
'UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
'Now: ............. 5/6/2005 02:34:42 PM, Kind = Local
'
'Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc
'
'Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
'  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'
'Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'

// This code example demonstrates the DateTime Kind, Now, and
// UtcNow properties, and the SpecifyKind(), ToLocalTime(),
// and ToUniversalTime() methods.

using System;

class Sample
{
    public static void Main()
    {
// Get the date and time for the current moment, adjusted
// to the local time zone.

    DateTime saveNow = DateTime.Now;

// Get the date and time for the current moment expressed
// as coordinated universal time (UTC).

    DateTime saveUtcNow = DateTime.UtcNow;
    DateTime myDt;

// Display the value and Kind property of the current moment
// expressed as UTC and local time.

    DisplayNow("UtcNow: ..........", saveUtcNow);
    DisplayNow("Now: .............", saveNow);
    Console.WriteLine();

// Change the Kind property of the current moment to
// DateTimeKind.Utc and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc);
    Display("Utc: .............", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Local and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local);
    Display("Local: ...........", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Unspecified and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified);
    Display("Unspecified: .....", myDt);
    }

// Display the value and Kind property of a DateTime structure, the
// DateTime structure converted to local time, and the DateTime
// structure converted to universal time.

    public static string datePatt = @"M/d/yyyy hh:mm:ss tt";
    public static void Display(string title, DateTime inputDt)
    {
    DateTime dispDt = inputDt;
    string dtString;

// Display the original DateTime.

    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, dispDt.Kind);

// Convert inputDt to local time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was universal time.

    dispDt = inputDt.ToLocalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}",
                      dtString, dispDt.Kind);

// Convert inputDt to universal time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was local time.

    dispDt = inputDt.ToUniversalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}",
                      dtString, dispDt.Kind);
    Console.WriteLine();
    }

// Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    public static void DisplayNow(string title, DateTime inputDt)
    {
    string dtString = inputDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, inputDt.Kind);
    }
}

/*
This code example produces the following results:

UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
Now: ............. 5/6/2005 02:34:42 PM, Kind = Local

Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc

Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
ToLocalTime


DateTime ..::.TryParse 方法

DateTime
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

将日期和时间的指定字符串表示形式转换为其 DateTime 等效项，并返回一个指示转换是否成功的值。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间
Parse


DateTime ..::.TryParse 方法 (String, DateTime%)

DateTime
.
.
::
.
TryParse 方法 (String, DateTime%)
DateTime 结构

将日期和时间的指定字符串表示形式转换为其 DateTime 等效项，并返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As DateTime _
) As Boolean
public static bool TryParse(
    string s,
    out DateTime result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] DateTime% result
)
static member TryParse :
        s:string *
        result:DateTime byref -> bool

参数

s
类型： System String
包含要转换的日期和时间的字符串。
result
类型： System DateTime %
当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），是空字符串 ("") 或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），是空字符串 ("") 或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），是空字符串 ("") 或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 参数成功转换，则为 true；否则为 false。

DateTime..::.TryParse(String, DateTime%) 方法类似于 DateTime..::.Parse(String) 方法，不同之处在于 TryParse(String, DateTime%) 方法在转换失败时不引发异常。

字符串 s 是使用当前 DateTimeFormatInfo 对象中的格式设置信息分析的，该信息由当前线程的区域性隐式提供。s 参数所包含的日期和时间的表示形式必须使用当前区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。 字符串 s 是使用当前 DateTimeFormatInfo 对象中的格式设置信息分析的，该信息由当前线程的区域性隐式提供。s 参数所包含的日期和时间的表示形式必须使用当前区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。

此方法尝试忽略无法识别的数据，如果可能，会用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假设时间为午夜 12:00。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试忽略无法识别的数据，如果可能，会用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假设时间为午夜 12:00。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试忽略无法识别的数据，如果可能，会用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假设时间为午夜 12:00。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 此方法尝试忽略无法识别的数据，如果可能，会用当前日期填充缺少的月、日和年份信息。如果 s 只包含日期而没有时间，则此方法假设时间为午夜 12:00。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。

由于 DateTime..::.TryParse(String, DateTime%) 方法尝试使用当前区域性的格式设置规则来分析日期和时间的字符串表示形式，因此尝试跨不同区域性分析特定的字符串可能会失败或返回不同的结果。如果要跨不同的区域设置分析特定的日期和时间格式，请使用 DateTime..::.TryParse(String, IFormatProvider, DateTimeStyles, DateTime%) 方法或 TryParseExact 方法的重载之一，并提供格式说明符。 由于 DateTime..::.TryParse(String, DateTime%) 方法尝试使用当前区域性的格式设置规则来分析日期和时间的字符串表示形式，因此尝试跨不同区域性分析特定的字符串可能会失败或返回不同的结果。如果要跨不同的区域设置分析特定的日期和时间格式，请使用 DateTime..::.TryParse(String, IFormatProvider, DateTimeStyles, DateTime%) 方法或 TryParseExact 方法的重载之一，并提供格式说明符。

如果 s 没有包含任何时区信息，则在方法返回时 result 包含一个 Kind 属性为 DateTimeKind..::.Unspecified 的 DateTime 值。如果要分析的字符串包含时区信息，则在方法返回时 result 包含一个 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值。 如果 s 没有包含任何时区信息，则在方法返回时 result 包含一个 Kind 属性为 DateTimeKind..::.Unspecified 的 DateTime 值。如果要分析的字符串包含时区信息，则在方法返回时 result 包含一个 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值。

对调用者的说明

格式设置受当前 DateTimeFormatInfo 对象属性的影响，默认情况下，这些属性是从“控制面板”中的“区域和语言选项”项派生的。如果当前的 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性设置为相同值，则 TryParse 方法可能会意外失败，并返回 False。 格式设置受当前 DateTimeFormatInfo 对象属性的影响，默认情况下，这些属性是从“控制面板”中的“区域和语言选项”项派生的。如果当前的 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性设置为相同值，则 TryParse 方法可能会意外失败，并返回 False。

下面的示例将多个日期和时间字符串传递给 DateTime..::.TryParse(String, DateTime%) 方法。

Dim dateStrings() As String = {"05/01/2009 14:57:32.8", "2009-05-01 14:57:32.8", _
                               "2009-05-01T14:57:32.8375298-04:00", _
                               "5/01/2008 14:57:32.80 -07:00", _
                               "1 May 2008 2:57:32.8 PM", "16-05-2009 1:00:32 PM", _
                               "Fri, 15 May 2009 20:10:57 GMT"}
Dim dateValue As Date

Console.WriteLine("Attempting to parse strings using {0} culture.", _
                  CultureInfo.CurrentCulture.Name)
For Each dateString As String In dateStrings
   If Date.TryParse(dateString, dateValue) Then
      Console.WriteLine("  Converted '{0}' to {1} ({2}).", dateString, _
                        dateValue, dateValue.Kind)
   Else
      Console.WriteLine("  Unable to parse '{0}'.", dateString)
   End If
Next
' The example displays the following output:
'    Attempting to parse strings using en-US culture.
'       Converted '05/01/2009 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
'       Converted '2009-05-01 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
'       Converted '2009-05-01T14:57:32.8375298-04:00' to 5/1/2009 11:57:32 AM (Local).
'       Converted '5/01/2008 14:57:32.80 -07:00' to 5/1/2008 2:57:32 PM (Local).
'       Converted '1 May 2008 2:57:32.8 PM' to 5/1/2008 2:57:32 PM (Unspecified).
'       Unable to parse '16-05-2009 1:00:32 PM'.
'       Converted 'Fri, 15 May 2009 20:10:57 GMT' to 5/15/2009 1:10:57 PM (Local).

string[] dateStrings = {"05/01/2009 14:57:32.8", "2009-05-01 14:57:32.8",
                        "2009-05-01T14:57:32.8375298-04:00",
                        "5/01/2008 14:57:32.80 -07:00",
                        "1 May 2008 2:57:32.8 PM", "16-05-2009 1:00:32 PM",
                        "Fri, 15 May 2009 20:10:57 GMT" };
DateTime dateValue;

Console.WriteLine("Attempting to parse strings using {0} culture.",
                  CultureInfo.CurrentCulture.Name);
foreach (string dateString in dateStrings)
{
   if (DateTime.TryParse(dateString, out dateValue))
      Console.WriteLine("  Converted '{0}' to {1} ({2}).", dateString,
                        dateValue, dateValue.Kind);
   else
      Console.WriteLine("  Unable to parse '{0}'.", dateString);
}
// The example displays the following output:
//    Attempting to parse strings using en-US culture.
//       Converted '05/01/2009 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
//       Converted '2009-05-01 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
//       Converted '2009-05-01T14:57:32.8375298-04:00' to 5/1/2009 11:57:32 AM (Local).
//       Converted '5/01/2008 14:57:32.80 -07:00' to 5/1/2008 2:57:32 PM (Local).
//       Converted '1 May 2008 2:57:32.8 PM' to 5/1/2008 2:57:32 PM (Unspecified).
//       Unable to parse '16-05-2009 1:00:32 PM'.
//       Converted 'Fri, 15 May 2009 20:10:57 GMT' to 5/15/2009 1:10:57 PM (Local).

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DateTime 结构
DateTime 成员
TryParse 重载
System 命名空间
Parse
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.TryParse 方法 (String, IFormatProvider, DateTimeStyles, DateTime%)

DateTime
.
.
::
.
TryParse 方法 (String, IFormatProvider, DateTimeStyles, DateTime%)
DateTime 结构

使用指定的区域性特定格式信息和格式设置样式，将日期和时间的指定字符串表示形式转换为其 DateTime 等效项，并返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    provider As IFormatProvider, _
    styles As DateTimeStyles, _
    <OutAttribute> ByRef result As DateTime _
) As Boolean
public static bool TryParse(
    string s,
    IFormatProvider provider,
    DateTimeStyles styles,
    out DateTime result
)
public:
static bool TryParse(
    String^ s,
    IFormatProvider^ provider,
    DateTimeStyles styles,
    [OutAttribute] DateTime% result
)
static member TryParse :
        s:string *
        provider:IFormatProvider *
        styles:DateTimeStyles *
        result:DateTime byref -> bool

参数

s
类型： System String
包含要转换的日期和时间的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
styles
类型： System.Globalization DateTimeStyles
枚举值的按位组合，该组合定义如何根据当前时区或当前日期解释已分析日期。一个要指定的典型值为 None。 枚举值的按位组合，该组合定义如何根据当前时区或当前日期解释已分析日期。一个要指定的典型值为 None。
result
类型： System DateTime %
当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），是空字符串 ("") 或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），是空字符串 ("") 或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），是空字符串 ("") 或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 参数成功转换，则为 true；否则为 false。
异常 | 条件
ArgumentException | styles 不是有效的 DateTimeStyles 值。 - 或 - styles 包含 DateTimeStyles 值的无效组合（例如，AssumeLocal 和 AssumeUniversal）。
NotSupportedException | provider 是一个非特定区域性并且无法在分析操作中使用。

DateTime..::.TryParse(String, IFormatProvider, DateTimeStyles, DateTime%) 方法分析可以包含日期、时间和时区信息的字符串。该方法类似于 DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法，不同之处在于 DateTime..::.TryParse(String, DateTime%) 方法在转换失败时不引发异常。 DateTime..::.TryParse(String, IFormatProvider, DateTimeStyles, DateTime%) 方法分析可以包含日期、时间和时区信息的字符串。该方法类似于 DateTime..::.Parse(String, IFormatProvider, DateTimeStyles) 方法，不同之处在于 DateTime..::.TryParse(String, DateTime%) 方法在转换失败时不引发异常。

s 参数所包含的日期和时间的表示形式必须使用 provider 参数所指定的区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。此方法会尝试忽略无法识别的数据并完全分析 s。如果 s 包含时间但不包含日期，则该方法默认情况下会替换当前日期；如果 styles 包含 NoCurrentDateDefault 标志，则会替换 DateTime.Date.MinValue。如果 s 包含日期但不包含时间，则使用午夜 12:00 作为默认时间。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 s 参数所包含的日期和时间的表示形式必须使用 provider 参数所指定的区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。此方法会尝试忽略无法识别的数据并完全分析 s。如果 s 包含时间但不包含日期，则该方法默认情况下会替换当前日期；如果 styles 包含 NoCurrentDateDefault 标志，则会替换 DateTime.Date.MinValue。如果 s 包含日期但不包含时间，则使用午夜 12:00 作为默认时间。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 s 参数所包含的日期和时间的表示形式必须使用 provider 参数所指定的区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。此方法会尝试忽略无法识别的数据并完全分析 s。如果 s 包含时间但不包含日期，则该方法默认情况下会替换当前日期；如果 styles 包含 NoCurrentDateDefault 标志，则会替换 DateTime.Date.MinValue。如果 s 包含日期但不包含时间，则使用午夜 12:00 作为默认时间。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 s 参数所包含的日期和时间的表示形式必须使用 provider 参数所指定的区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。此方法会尝试忽略无法识别的数据并完全分析 s。如果 s 包含时间但不包含日期，则该方法默认情况下会替换当前日期；如果 styles 包含 NoCurrentDateDefault 标志，则会替换 DateTime.Date.MinValue。如果 s 包含日期但不包含时间，则使用午夜 12:00 作为默认时间。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 s 参数所包含的日期和时间的表示形式必须使用 provider 参数所指定的区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。此方法会尝试忽略无法识别的数据并完全分析 s。如果 s 包含时间但不包含日期，则该方法默认情况下会替换当前日期；如果 styles 包含 NoCurrentDateDefault 标志，则会替换 DateTime.Date.MinValue。如果 s 包含日期但不包含时间，则使用午夜 12:00 作为默认时间。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。 s 参数所包含的日期和时间的表示形式必须使用 provider 参数所指定的区域性的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一。此方法会尝试忽略无法识别的数据并完全分析 s。如果 s 包含时间但不包含日期，则该方法默认情况下会替换当前日期；如果 styles 包含 NoCurrentDateDefault 标志，则会替换 DateTime.Date.MinValue。如果 s 包含日期但不包含时间，则使用午夜 12:00 作为默认时间。s 中的所有前导、内部或尾部空白字符均会被忽略。日期和时间可以用前导和尾部数字标记字符对（“#”，U+0023）括起来，还可以尾随一个或多个 NULL 字符 (U+0000)。

日期和时间元素的特定有效格式以及日期和时间中使用的名称和符号都由 provider 参数定义，该参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示在 s 参数中使用其格式设置的区域性。CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义 s 中使用的格式设置。 一个 CultureInfo 对象，表示在 s 参数中使用其格式设置的区域性。CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义 s 中使用的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义 s 所用的格式设置。

  • 一个自定义 IFormatProvider 实现。其 IFormatProvider..::.GetFormat 方法返回一个 DateTimeFormatInfo 对象，该对象定义 s 所用的格式设置。 一个自定义 IFormatProvider 实现。其 IFormatProvider..::.GetFormat 方法返回一个 DateTimeFormatInfo 对象，该对象定义 s 所用的格式设置。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性。

styles 参数定义已分析的字符串的确切解释以及分析操作应该如何处理它。它可以是 DateTimeStyles 枚举的一个或多个成员，如下表中所述。 styles 参数定义已分析的字符串的确切解释以及分析操作应该如何处理它。它可以是 DateTimeStyles 枚举的一个或多个成员，如下表中所述。

DateTimeStyles 成员

Description

AdjustToUniversal

分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。

AllowInnerWhite

虽然有效，但忽略了此值。s 的日期和时间元素中允许存在内部空白。 虽然有效，但忽略了此值。s 的日期和时间元素中允许存在内部空白。

AllowLeadingWhite

虽然有效，但忽略了此值。s 的日期和时间元素中允许存在前导空白。 虽然有效，但忽略了此值。s 的日期和时间元素中允许存在前导空白。

AllowTrailingWhite

虽然有效，但忽略了此值。s 的日期和时间元素中允许存在尾随空白。 虽然有效，但忽略了此值。s 的日期和时间元素中允许存在尾随空白。

AllowWhiteSpaces

指定 s 可以包含前导、内部和尾随空白。这是默认行为。如果提供限制性更强的 DateTimeStyles 枚举值（例如，DateTimeStyles..::.None），便不能对它进行重写。 指定 s 可以包含前导、内部和尾随空白。这是默认行为。如果提供限制性更强的 DateTimeStyles 枚举值（例如，DateTimeStyles..::.None），便不能对它进行重写。 指定 s 可以包含前导、内部和尾随空白。这是默认行为。如果提供限制性更强的 DateTimeStyles 枚举值（例如，DateTimeStyles..::.None），便不能对它进行重写。

AssumeLocal

指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。

AssumeUniversal

指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。

None

虽然有效，但忽略了此值。

RoundtripKind

对于包含时区信息的字符串，尝试阻止将日期和时间字符串转换为其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值。通常，可以通过使用标准格式说明符 o、r 或 u 调用 DateTime..::.ToString(String) 方法来创建这类字符串。 对于包含时区信息的字符串，尝试阻止将日期和时间字符串转换为其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值。通常，可以通过使用标准格式说明符 o、r 或 u 调用 DateTime..::.ToString(String) 方法来创建这类字符串。

如果 s 不包含任何时区信息，DateTime..::.TryParse(String, IFormatProvider, DateTimeStyles, DateTime%) 方法返回其 Kind 属性为 DateTimeKind..::.Unspecified（除非 styles 标志指示其他属性）的 DateTime 值。如果 s 包含时区或时区偏移量信息，则 DateTime..::.TryParse(String, IFormatProvider, DateTimeStyles, DateTime%) 方法执行任何必要的时间转换并返回下列值之一： 如果 s 不包含任何时区信息，DateTime..::.TryParse(String, IFormatProvider, DateTimeStyles, DateTime%) 方法返回其 Kind 属性为 DateTimeKind..::.Unspecified（除非 styles 标志指示其他属性）的 DateTime 值。如果 s 包含时区或时区偏移量信息，则 DateTime..::.TryParse(String, IFormatProvider, DateTimeStyles, DateTime%) 方法执行任何必要的时间转换并返回下列值之一：

  • 一个 DateTime 值，其日期和时间反映本地时间并且其 Kind 属性为 DateTimeKind..::.Local。

  • 或者一个 DateTime 值，其日期和时间反映 UTC 并且其 Kind 属性为 DateTimeKind..::.Utc（如果 styles 包含 AdjustToUniversal 标志）。

使用 DateTimeStyles..::.RoundtripKind 标志可重写此行为。

分析自定义区域性

如果您分析针对自定义区域性生成的日期和时间字符串，请使用 TryParseExact 方法而不是 TryParse 方法以提高分析操作成功的可能性。自定义区域性日期和时间字符串可能很复杂且难以分析。TryParse 方法尝试以多种隐式分析模式分析字符串，这些模式可能全都失败。而 TryParseExact 方法则相反，它要求您显式指定一个或多个可能成功的确切的分析模式。 如果您分析针对自定义区域性生成的日期和时间字符串，请使用 TryParseExact 方法而不是 TryParse 方法以提高分析操作成功的可能性。自定义区域性日期和时间字符串可能很复杂且难以分析。TryParse 方法尝试以多种隐式分析模式分析字符串，这些模式可能全都失败。而 TryParseExact 方法则相反，它要求您显式指定一个或多个可能成功的确切的分析模式。 如果您分析针对自定义区域性生成的日期和时间字符串，请使用 TryParseExact 方法而不是 TryParse 方法以提高分析操作成功的可能性。自定义区域性日期和时间字符串可能很复杂且难以分析。TryParse 方法尝试以多种隐式分析模式分析字符串，这些模式可能全都失败。而 TryParseExact 方法则相反，它要求您显式指定一个或多个可能成功的确切的分析模式。 如果您分析针对自定义区域性生成的日期和时间字符串，请使用 TryParseExact 方法而不是 TryParse 方法以提高分析操作成功的可能性。自定义区域性日期和时间字符串可能很复杂且难以分析。TryParse 方法尝试以多种隐式分析模式分析字符串，这些模式可能全都失败。而 TryParseExact 方法则相反，它要求您显式指定一个或多个可能成功的确切的分析模式。

有关自定义区域性的更多信息，请参见 System.Globalization..::.CultureAndRegionInfoBuilder 类。

对调用者的说明

格式设置受当前 DateTimeFormatInfo 对象属性的影响，该对象由 provider 参数提供。如果当前的 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性设置为相同值，则 TryParse 方法可能会意外失败，并返回 False。 格式设置受当前 DateTimeFormatInfo 对象属性的影响，该对象由 provider 参数提供。如果当前的 DateTimeFormatInfo..::.DateSeparator 和 DateTimeFormatInfo..::.TimeSeparator 属性设置为相同值，则 TryParse 方法可能会意外失败，并返回 False。

下面的示例演示 DateTime..::.TryParse(String, IFormatProvider, DateTimeStyles, DateTime%) 方法。

Dim dateString As String
Dim culture As CultureInfo
Dim styles As DateTimeStyles
Dim dateResult As DateTime

' Parse a date and time with no styles.
dateString = "03/01/2009 10:00 AM"
culture = CultureInfo.CreateSpecificCulture("en-US")
styles = DateTimeStyles.None
If DateTime.TryParse(dateString, culture, styles, dateResult) Then
   Console.WriteLine("{0} converted to {1} {2}.", _
                     dateString, dateResult, dateResult.Kind)
Else
   Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If

' Parse the same date and time with the AssumeLocal style.
styles = DateTimeStyles.AssumeLocal
If DateTime.TryParse(dateString, culture, styles, dateResult)
   Console.WriteLine("{0} converted to {1} {2}.", _
                     dateString, dateResult, dateResult.Kind)
Else
   Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If

' Parse a date and time that is assumed to be local.
' This time is five hours behind UTC. The local system's time zone is
' eight hours behind UTC.
dateString = "2009/03/01T10:00:00-5:00"
styles = DateTimeStyles.AssumeLocal
If DateTime.TryParse(dateString, culture, styles, dateResult)
   Console.WriteLine("{0} converted to {1} {2}.", _
                     dateString, dateResult, dateResult.Kind)
Else
   Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If

' Attempt to convert a string in improper ISO 8601 format.
dateString = "03/01/2009T10:00:00-5:00"
If DateTime.TryParse(dateString, culture, styles, dateResult)
   Console.WriteLine("{0} converted to {1} {2}.", _
                     dateString, dateResult, dateResult.Kind)
Else
   Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If

' Assume a date and time string formatted for the fr-FR culture is the local
' time and convert it to UTC.
dateString = "2008-03-01 10:00"
culture = CultureInfo.CreateSpecificCulture("fr-FR")
styles = DateTimeStyles.AdjustToUniversal Or DateTimeStyles.AssumeLocal
If DateTime.TryParse(dateString, culture, styles, dateResult)
   Console.WriteLine("{0} converted to {1} {2}.", _
                     dateString, dateResult, dateResult.Kind)
Else
   Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If
'
' The example displays the following output to the console:
'       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
'       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
'       2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
'       Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
'       2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.

string dateString;
CultureInfo culture;
DateTimeStyles styles;
DateTime dateResult;

// Parse a date and time with no styles.
dateString = "03/01/2009 10:00 AM";
culture = CultureInfo.CreateSpecificCulture("en-US");
styles = DateTimeStyles.None;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
   Console.WriteLine("{0} converted to {1} {2}.",
                     dateString, dateResult, dateResult.Kind);
else
   Console.WriteLine("Unable to convert {0} to a date and time.",
                     dateString);

// Parse the same date and time with the AssumeLocal style.
styles = DateTimeStyles.AssumeLocal;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
   Console.WriteLine("{0} converted to {1} {2}.",
                     dateString, dateResult, dateResult.Kind);
else
   Console.WriteLine("Unable to convert {0} to a date and time.", dateString);

// Parse a date and time that is assumed to be local.
// This time is five hours behind UTC. The local system's time zone is
// eight hours behind UTC.
dateString = "2009/03/01T10:00:00-5:00";
styles = DateTimeStyles.AssumeLocal;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
   Console.WriteLine("{0} converted to {1} {2}.",
                     dateString, dateResult, dateResult.Kind);
else
   Console.WriteLine("Unable to convert {0} to a date and time.", dateString);

// Attempt to convert a string in improper ISO 8601 format.
dateString = "03/01/2009T10:00:00-5:00";
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
   Console.WriteLine("{0} converted to {1} {2}.",
                     dateString, dateResult, dateResult.Kind);
else
   Console.WriteLine("Unable to convert {0} to a date and time.", dateString);

// Assume a date and time string formatted for the fr-FR culture is the local
// time and convert it to UTC.
dateString = "2008-03-01 10:00";
culture = CultureInfo.CreateSpecificCulture("fr-FR");
styles = DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeLocal;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
   Console.WriteLine("{0} converted to {1} {2}.",
                     dateString, dateResult, dateResult.Kind);
else
   Console.WriteLine("Unable to convert {0} to a date and time.", dateString);

// The example displays the following output to the console:
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
//       2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
//       Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
//       2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DateTime 结构
DateTime 成员
TryParse 重载
System 命名空间
Parse
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.TryParseExact 方法

DateTime
.
.
::
.
TryParseExact 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

将日期和时间的指定字符串表示形式转换为其 DateTime 等效项。字符串表示形式的格式必须与指定的格式完全匹配。该方法返回一个指示转换是否成功的值。 将日期和时间的指定字符串表示形式转换为其 DateTime 等效项。字符串表示形式的格式必须与指定的格式完全匹配。该方法返回一个指示转换是否成功的值。 将日期和时间的指定字符串表示形式转换为其 DateTime 等效项。字符串表示形式的格式必须与指定的格式完全匹配。该方法返回一个指示转换是否成功的值。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间
ParseExact


DateTime ..::.TryParseExact 方法 (String, String, IFormatProvider, DateTimeStyles, DateTime%)

DateTime
.
.
::
.
TryParseExact 方法 (String, String, IFormatProvider, DateTimeStyles, DateTime%)
DateTime 结构

使用指定的格式、区域性特定的格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须与指定的格式完全匹配。该方法返回一个指示转换是否成功的值。 使用指定的格式、区域性特定的格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须与指定的格式完全匹配。该方法返回一个指示转换是否成功的值。 使用指定的格式、区域性特定的格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须与指定的格式完全匹配。该方法返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParseExact ( _
    s As String, _
    format As String, _
    provider As IFormatProvider, _
    style As DateTimeStyles, _
    <OutAttribute> ByRef result As DateTime _
) As Boolean
public static bool TryParseExact(
    string s,
    string format,
    IFormatProvider provider,
    DateTimeStyles style,
    out DateTime result
)
public:
static bool TryParseExact(
    String^ s,
    String^ format,
    IFormatProvider^ provider,
    DateTimeStyles style,
    [OutAttribute] DateTime% result
)
static member TryParseExact :
        s:string *
        format:string *
        provider:IFormatProvider *
        style:DateTimeStyles *
        result:DateTime byref -> bool

参数

s
类型： System String
包含要转换的日期和时间的字符串。
format
类型： System String
所需的 s 格式。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
style
类型： System.Globalization DateTimeStyles
一个或多个枚举值的按位组合，指示 s 允许使用的格式。
result
类型： System DateTime %
当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 或 format 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者为空字符串，或者未包含对应于 format 中指定的模式的日期和时间，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 或 format 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者为空字符串，或者未包含对应于 format 中指定的模式的日期和时间，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 或 format 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者为空字符串，或者未包含对应于 format 中指定的模式的日期和时间，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | styles 不是有效的 DateTimeStyles 值。 - 或 - styles 包含 DateTimeStyles 值的无效组合（例如，AssumeLocal 和 AssumeUniversal）。

DateTime..::.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。该方法类似于 DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法，不同之处在于 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法在转换失败时不引发异常。 DateTime..::.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。该方法类似于 DateTime..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法，不同之处在于 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法在转换失败时不引发异常。

s 参数包含要分析的日期和时间，而且必须采用 format 参数所定义的格式。如果 s 中有日期、时间和时区元素，则它们还必须以 format 指定的顺序出现。如果 format 定义的日期不包含时间元素，并且分析操作成功，则生成的 DateTime 值为午夜时间 (00:00:00)。如果 format 定义的时间不包含日期元素，并且分析操作成功，则生成的 DateTime 值默认情况下具有日期 DateTime.Now.Date，或者如果 styles 包含 DateTimeStyles..::.NoCurrentDateDefault 标志，则它具有日期 DateTime.MinValue.Date。style 参数决定 s 参数是否可包含前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间，而且必须采用 format 参数所定义的格式。如果 s 中有日期、时间和时区元素，则它们还必须以 format 指定的顺序出现。如果 format 定义的日期不包含时间元素，并且分析操作成功，则生成的 DateTime 值为午夜时间 (00:00:00)。如果 format 定义的时间不包含日期元素，并且分析操作成功，则生成的 DateTime 值默认情况下具有日期 DateTime.Now.Date，或者如果 styles 包含 DateTimeStyles..::.NoCurrentDateDefault 标志，则它具有日期 DateTime.MinValue.Date。style 参数决定 s 参数是否可包含前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间，而且必须采用 format 参数所定义的格式。如果 s 中有日期、时间和时区元素，则它们还必须以 format 指定的顺序出现。如果 format 定义的日期不包含时间元素，并且分析操作成功，则生成的 DateTime 值为午夜时间 (00:00:00)。如果 format 定义的时间不包含日期元素，并且分析操作成功，则生成的 DateTime 值默认情况下具有日期 DateTime.Now.Date，或者如果 styles 包含 DateTimeStyles..::.NoCurrentDateDefault 标志，则它具有日期 DateTime.MinValue.Date。style 参数决定 s 参数是否可包含前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间，而且必须采用 format 参数所定义的格式。如果 s 中有日期、时间和时区元素，则它们还必须以 format 指定的顺序出现。如果 format 定义的日期不包含时间元素，并且分析操作成功，则生成的 DateTime 值为午夜时间 (00:00:00)。如果 format 定义的时间不包含日期元素，并且分析操作成功，则生成的 DateTime 值默认情况下具有日期 DateTime.Now.Date，或者如果 styles 包含 DateTimeStyles..::.NoCurrentDateDefault 标志，则它具有日期 DateTime.MinValue.Date。style 参数决定 s 参数是否可包含前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间，而且必须采用 format 参数所定义的格式。如果 s 中有日期、时间和时区元素，则它们还必须以 format 指定的顺序出现。如果 format 定义的日期不包含时间元素，并且分析操作成功，则生成的 DateTime 值为午夜时间 (00:00:00)。如果 format 定义的时间不包含日期元素，并且分析操作成功，则生成的 DateTime 值默认情况下具有日期 DateTime.Now.Date，或者如果 styles 包含 DateTimeStyles..::.NoCurrentDateDefault 标志，则它具有日期 DateTime.MinValue.Date。style 参数决定 s 参数是否可包含前导、内部或尾部空白字符。

如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。

format 参数包含对应于 s 参数的期望格式的模式。format 参数中的模式由一个或多个来自 自定义日期和时间格式字符串 表的自定义格式说明符，或单个来自 标准日期和时间格式字符串 表的标准格式说明符（用于标识预定义的模式）所组成。 format 参数包含对应于 s 参数的期望格式的模式。format 参数中的模式由一个或多个来自 自定义日期和时间格式字符串 表的自定义格式说明符，或单个来自 标准日期和时间格式字符串 表的标准格式说明符（用于标识预定义的模式）所组成。

如果在自定义格式模式中不使用日期或时间分隔符，请为 provider 参数使用固定区域性，并使用每个自定义格式说明符的最宽形式。例如，如果您想在该模式中指定小时，则指定较宽的形式“HH”而不是较狭隘的形式“H”。 如果在自定义格式模式中不使用日期或时间分隔符，请为 provider 参数使用固定区域性，并使用每个自定义格式说明符的最宽形式。例如，如果您想在该模式中指定小时，则指定较宽的形式“HH”而不是较狭隘的形式“H”。

说明 说明

可以调用 DateTime..::.TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTime%) 方法并指定多种允许的格式，而不是为了使分析操作成功要求 s 符合某一种格式。这将使得分析操作更容易成功。 可以调用 DateTime..::.TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTime%) 方法并指定多种允许的格式，而不是为了使分析操作成功要求 s 符合某一种格式。这将使得分析操作更容易成功。

s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的确切格式也是由该参数定义的。provider 参数可以是以下任意一项： s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的确切格式也是由该参数定义的。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

  • 一个自定义 IFormatProvider 实现，其 GetFormat 方法返回提供格式设置信息的 CultureInfo 对象或 DateTimeFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们决定不是由 format 定义的空白是否可以出现在 s 中及其出现的位置，而且它们控制分析操作的确切行为。下表说明 DateTimeStyles 枚举的每个成员如何影响 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法的运行。 styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们决定不是由 format 定义的空白是否可以出现在 s 中及其出现的位置，而且它们控制分析操作的确切行为。下表说明 DateTimeStyles 枚举的每个成员如何影响 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法的运行。

DateTimeStyles 成员

Description

AdjustToUniversal

分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。

AllowInnerWhite

指定不是由 format 定义的空白可以出现在任何单个的日期或时间元素之间。

AllowLeadingWhite

指定不是由 format 定义的空白可以出现在 s 的开头。

AllowTrailingWhite

指定不是由 format 定义的空白可以出现在 s 的末尾。

AllowWhiteSpaces

指定 s 可以包含不是由 format 定义的前导、内部和尾随空白。

AssumeLocal

指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。

AssumeUniversal

指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。

NoCurrentDateDefault

如果 s 包含不带日期信息的时间，则返回值的日期设置为 DateTime.MinValue.Date。

None

使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。

RoundtripKind

对于包含时区信息的字符串，尝试阻止转换为其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值。此标志主要是阻止将 UTC 时间转换为本地时间。 对于包含时区信息的字符串，尝试阻止转换为其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值。此标志主要是阻止将 UTC 时间转换为本地时间。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，TryParseExact 方法返回 false。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，TryParseExact 方法返回 false。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例演示 DateTime..::.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法。请注意，当 styles 参数等于 DateTimeStyles..::.None 时，不能成功分析字符串“5/01/2009 8:30 AM”，因为 format 不允许存在前导空格。此外，在 format 为“MM/dd/yyyy hh:mm”时不能成功分析“5/01/2009 09:00”，因为按照 format 的要求，日期字符串的月份值前面不能有前导零。 下面的示例演示 DateTime..::.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法。请注意，当 styles 参数等于 DateTimeStyles..::.None 时，不能成功分析字符串“5/01/2009 8:30 AM”，因为 format 不允许存在前导空格。此外，在 format 为“MM/dd/yyyy hh:mm”时不能成功分析“5/01/2009 09:00”，因为按照 format 的要求，日期字符串的月份值前面不能有前导零。 下面的示例演示 DateTime..::.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法。请注意，当 styles 参数等于 DateTimeStyles..::.None 时，不能成功分析字符串“5/01/2009 8:30 AM”，因为 format 不允许存在前导空格。此外，在 format 为“MM/dd/yyyy hh:mm”时不能成功分析“5/01/2009 09:00”，因为按照 format 的要求，日期字符串的月份值前面不能有前导零。

Dim enUS As New CultureInfo("en-US")
Dim dateString As String
Dim dateValue As Date

' Parse date with no style flags.
dateString = " 5/01/2009 8:30 AM"
If Date.TryParseExact(dateString, "g", enUS, _
                      DateTimeStyles.None, dateValue) Then
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End If
' Allow a leading space in the date string.
If Date.TryParseExact(dateString, "g", enUS, _
                      DateTimeStyles.AllowLeadingWhite, dateValue) Then
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End If

' Use custom formats with M and MM.
dateString = "5/01/2009 09:00"
If Date.TryParseExact(dateString, "M/dd/yyyy hh:mm", enUS, _
                      DateTimeStyles.None, dateValue) Then
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End If
' Allow a leading space in the date string.
If Date.TryParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, _
                      DateTimeStyles.None, dateValue) Then
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End If

' Parse a string with time zone information.
dateString = "05/01/2009 01:30:42 PM -05:00"
If Date.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, _
                      DateTimeStyles.None, dateValue) Then
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End If
' Allow a leading space in the date string.
If Date.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, _
                      DateTimeStyles.AdjustToUniversal, dateValue) Then
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End If

' Parse a string represengting UTC.
dateString = "2008-06-11T16:11:20.0904778Z"
If Date.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                               DateTimeStyles.None, dateValue) Then
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End If

If Date.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                      DateTimeStyles.RoundtripKind, dateValue) Then
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                     dateValue.Kind)
Else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
End If
' The example displays the following output:
'    ' 5/01/2009 8:30 AM' is not in an acceptable format.
'    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
'    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
'    '5/01/2009 09:00' is not in an acceptable format.
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).

CultureInfo enUS = new CultureInfo("en-US");
string dateString;
DateTime dateValue;

// Parse date with no style flags.
dateString = " 5/01/2009 8:30 AM";
if (DateTime.TryParseExact(dateString, "g", enUS,
                           DateTimeStyles.None, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

// Allow a leading space in the date string.
if (DateTime.TryParseExact(dateString, "g", enUS,
                           DateTimeStyles.AllowLeadingWhite, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

// Use custom formats with M and MM.
dateString = "5/01/2009 09:00";
if (DateTime.TryParseExact(dateString, "M/dd/yyyy hh:mm", enUS,
                           DateTimeStyles.None, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

// Allow a leading space in the date string.
if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm", enUS,
                        DateTimeStyles.None, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

// Parse a string with time zone information.
dateString = "05/01/2009 01:30:42 PM -05:00";
if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS,
                        DateTimeStyles.None, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

// Allow a leading space in the date string.
if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS,
                        DateTimeStyles.AdjustToUniversal, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

// Parse a string represengting UTC.
dateString = "2008-06-11T16:11:20.0904778Z";
if (DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture,
                               DateTimeStyles.None, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

if (DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture,
                           DateTimeStyles.RoundtripKind, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                     dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

// The example displays the following output:
//    ' 5/01/2009 8:30 AM' is not in an acceptable format.
//    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
//    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
//    '5/01/2009 09:00' is not in an acceptable format.
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DateTime 结构
DateTime 成员
TryParseExact 重载
System 命名空间
ParseExact
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime ..::.TryParseExact 方法 (String, array<String >[]()[], IFormatProvider, DateTimeStyles, DateTime%)

DateTime
.
.
::
.
TryParseExact 方法 (String,
array<
String
>
[]
()
[]
, IFormatProvider, DateTimeStyles, DateTime%)
DateTime 结构

使用指定的格式数组、区域性特定格式信息和样式，将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须至少与指定的格式之一完全匹配。该方法返回一个指示转换是否成功的值。 使用指定的格式数组、区域性特定格式信息和样式，将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须至少与指定的格式之一完全匹配。该方法返回一个指示转换是否成功的值。 使用指定的格式数组、区域性特定格式信息和样式，将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示形式的格式必须至少与指定的格式之一完全匹配。该方法返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParseExact ( _
    s As String, _
    formats As String(), _
    provider As IFormatProvider, _
    style As DateTimeStyles, _
    <OutAttribute> ByRef result As DateTime _
) As Boolean
public static bool TryParseExact(
    string s,
    string[] formats,
    IFormatProvider provider,
    DateTimeStyles style,
    out DateTime result
)
public:
static bool TryParseExact(
    String^ s,
    array<String^>^ formats,
    IFormatProvider^ provider,
    DateTimeStyles style,
    [OutAttribute] DateTime% result
)
static member TryParseExact :
        s:string *
        formats:string[] *
        provider:IFormatProvider *
        style:DateTimeStyles *
        result:DateTime byref -> bool

参数

s
类型： System String
包含要转换的一个或多个日期和时间的字符串。
formats
类型：
array<
System String
>
[]
()
[]

s 的允许格式的数组。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式信息。
style
类型： System.Globalization DateTimeStyles
枚举值的一个按位组合，指示 s 所允许的格式。一个要指定的典型值为 DateTimeStyles..::.None。 枚举值的一个按位组合，指示 s 所允许的格式。一个要指定的典型值为 DateTimeStyles..::.None。
result
类型： System DateTime %
当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 或 formats 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），s 或 formats 的一个元素为空字符串，或者 s 的格式与 formats 中的格式模式所指定的格式都不完全匹配，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 或 formats 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），s 或 formats 的一个元素为空字符串，或者 s 的格式与 formats 中的格式模式所指定的格式都不完全匹配，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中包含的日期和时间等效的 DateTime 值；如果转换失败，则为 MinValue。如果 s 或 formats 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），s 或 formats 的一个元素为空字符串，或者 s 的格式与 formats 中的格式模式所指定的格式都不完全匹配，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 参数成功转换，则为 true；否则为 false。
异常 | 条件
ArgumentException | styles 不是有效的 DateTimeStyles 值。 - 或 - styles 包含 DateTimeStyles 值的无效组合（例如，AssumeLocal 和 AssumeUniversal）。

DateTime..::.TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTime%) 方法分析与分配给 formats 参数的任何一种模式匹配的日期字符串表示形式。该方法类似于 DateTime..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法，不同之处在于 TryParseExact 方法在转换失败时不引发异常。 DateTime..::.TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTime%) 方法分析与分配给 formats 参数的任何一种模式匹配的日期字符串表示形式。该方法类似于 DateTime..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法，不同之处在于 TryParseExact 方法在转换失败时不引发异常。

s 参数包含要分析的日期和时间。如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还决定 s 参数是否可以包含除 formats 中的一种格式字符串允许的空白字符以外的前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间。如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还决定 s 参数是否可以包含除 formats 中的一种格式字符串允许的空白字符以外的前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间。如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还决定 s 参数是否可以包含除 formats 中的一种格式字符串允许的空白字符以外的前导、内部或尾部空白字符。 s 参数包含要分析的日期和时间。如果 s 参数只包含时间而没有日期，则使用当前日期，除非 style 参数包含 DateTimeStyles..::.NoCurrentDateDefault 标志，在这种情况下则使用默认日期 (DateTime.Date.MinValue)。如果 s 参数只包含日期而没有时间，则使用午夜 (00:00:00)。style 参数还决定 s 参数是否可以包含除 formats 中的一种格式字符串允许的空白字符以外的前导、内部或尾部空白字符。

如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。 如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性为 DateTimeKind..::.Unspecified。可以通过使用以下方式更改此行为：使用 DateTimeStyles..::.AssumeLocal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Local 的 DateTime 值），或者使用 DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 标志（该标志返回 Kind 属性为 DateTimeKind..::.Utc 的 DateTime 值）。如果 s 包含时区信息，则时间转换为本地时间，如有必要，返回的 DateTime 对象的 Kind 属性会设置为 DateTimeKind..::.Local。通过使用 DateTimeStyles..::.RoundtripKind 标志不将协调世界时 (UTC) 转换为本地时间并将 Kind 属性设置为 DateTimeKind..::.Utc，可以更改此行为。

formats 参数包含一个模式数组，要使分析操作成功，s 必须与其中一个模式完全匹配。formats 参数中的模式由一个或多个来自 自定义日期和时间格式字符串 表的自定义格式说明符，或单个来自 标准日期和时间格式字符串 表的标准格式说明符（用于标识预定义的模式）所组成。 formats 参数包含一个模式数组，要使分析操作成功，s 必须与其中一个模式完全匹配。formats 参数中的模式由一个或多个来自 自定义日期和时间格式字符串 表的自定义格式说明符，或单个来自 标准日期和时间格式字符串 表的标准格式说明符（用于标识预定义的模式）所组成。

如果在自定义格式模式中不使用日期或时间分隔符，请为 provider 参数使用固定区域性，并使用每个自定义格式说明符的最宽形式。例如，如果您想在该模式中指定小时，则指定较宽的形式“HH”而不是较狭隘的形式“H”。 如果在自定义格式模式中不使用日期或时间分隔符，请为 provider 参数使用固定区域性，并使用每个自定义格式说明符的最宽形式。例如，如果您想在该模式中指定小时，则指定较宽的形式“HH”而不是较狭隘的形式“H”。

s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的确切格式也是由该参数定义的。provider 参数可以是以下任意一项： s 中所用的特定日期和时间符号以及字符串（如使用特定语言的星期几名称）是由 provider 参数定义的，如果 format 是标准格式说明符字符串，则 s 的确切格式也是由该参数定义的。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。 一个 CultureInfo 对象，表示用来解释 s 的区域性。该对象的 DateTimeFormatInfo 属性所返回的 DateTimeFormat 对象定义了 s 中的符号和格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

  • 一个自定义 IFormatProvider 实现，其 GetFormat 方法返回提供格式设置信息的 CultureInfo 对象或 DateTimeFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们决定不是由 format 定义的空白是否可以出现在 s 中及其出现的位置，而且它们控制分析操作的确切行为。下表说明 DateTimeStyles 枚举的每个成员如何影响 TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTime%) 方法的运行。 styles 参数包含 DateTimeStyles 枚举的一个或多个成员，它们决定不是由 format 定义的空白是否可以出现在 s 中及其出现的位置，而且它们控制分析操作的确切行为。下表说明 DateTimeStyles 枚举的每个成员如何影响 TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTime%) 方法的运行。

DateTimeStyles 成员

Description

AdjustToUniversal

分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。 分析 s，如有必要，可将其转换为 UTC。如果 s 包含时区偏移量，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeLocal 标志，则该方法将分析字符串，调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC，并将 Kind 属性设置为 DateTimeKind..::.Utc。如果 s 指示它表示 UTC，或者 s 不包含时区信息但 styles 包含 DateTimeStyles..::.AssumeUniversal 标志，则该方法将分析字符串，但不对返回的 DateTime 值执行时区转换，并将 Kind 属性设置为 DateTimeKind..::.Utc。在所有其他情况下，该标志无效。

AllowInnerWhite

指定不是由 format 定义的空白可以出现在任何单个的日期或时间元素之间。

AllowLeadingWhite

指定不是由 format 定义的空白可以出现在 s 的开头。

AllowTrailingWhite

指定不是由 format 定义的空白可以出现在 s 的末尾。

AllowWhiteSpaces

指定 s 可以包含不是由 format 定义的前导、内部和尾随空白。

AssumeLocal

指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示本地时间。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则返回的 DateTime 值的 Kind 属性将设置为 DateTimeKind..::.Local。

AssumeUniversal

指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。 指定如果 s 缺少任何时区信息，则假定其表示 UTC。除非存在 DateTimeStyles..::.AdjustToUniversal 标志，否则该方法将返回的 DateTime 值从 UTC 转换为本地时间，并将其 Kind 属性置为 DateTimeKind..::.Local。

NoCurrentDateDefault

如果 s 包含不带日期信息的时间，则返回值的日期设置为 DateTime.MinValue.Date。

None

使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。 使用默认值分析 s 参数。不允许使用除 format 中提供的空白以外的任何其他空白。如果 s 缺少日期部分，则返回的 DateTime 值的日期设置为 1/1/0001。如果 s 没有包含任何时区信息，则返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Unspecified。如果 s 中有时区信息，则时间转换为本地时间并且返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind..::.Local。

RoundtripKind

对于包含时区信息的字符串，尝试阻止转换为其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值。此标志主要是阻止将 UTC 时间转换为本地时间。 对于包含时区信息的字符串，尝试阻止转换为其 Kind 属性设置为 DateTimeKind..::.Local 的 DateTime 值。此标志主要是阻止将 UTC 时间转换为本地时间。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，TryParseExact 方法返回 false。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，TryParseExact 方法返回 false。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例使用 DateTime..::.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime%) 方法确保可以成功分析多种可能格式的字符串。

Dim formats() As String = {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", _
                           "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", _
                           "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", _
                           "M/d/yyyy h:mm", "M/d/yyyy h:mm", _
                           "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"}
Dim dateStrings() As String = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", _
                               "5/1/2009 6:32:00", "05/01/2009 06:32", _
                               "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00"}

Dim dateValue As DateTime

For Each dateString As String In dateStrings
   If Date.TryParseExact(dateString, formats, _
                         New CultureInfo("en-US"), _
                         DateTimeStyles.None, _
                         dateValue) Then
      Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue)
   Else
      Console.WriteLine("Unable to convert '{0}' to a date.", dateString)
   End If
Next
' The example displays the following output:
'       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
'       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.

string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
                   "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
                   "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
                   "M/d/yyyy h:mm", "M/d/yyyy h:mm",
                   "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"};
string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM",
                        "5/1/2009 6:32:00", "05/01/2009 06:32",
                        "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00"};
DateTime dateValue;

foreach (string dateString in dateStrings)
{
   if (DateTime.TryParseExact(dateString, formats,
                              new CultureInfo("en-US"),
                              DateTimeStyles.None,
                              out dateValue))
      Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
   else
      Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
}
// The example displays the following output:
//       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
//       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DateTime 结构
DateTime 成员
TryParseExact 重载
System 命名空间
ParseExact
CultureInfo
DateTimeFormatInfo

其他资源

分析日期和时间字符串
标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTime 运算符

DateTime 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

DateTime 类型公开以下成员。

名称 说明
页首

参考

DateTime 结构
System 命名空间


DateTime ..::.Addition 运算符

DateTime
.
.
::
.
Addition 运算符
DateTime 结构

将指定的时间间隔加到指定的日期和时间以生成新的日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator + ( _
    d As DateTime, _
    t As TimeSpan _
) As DateTime
public static DateTime operator +(
    DateTime d,
    TimeSpan t
)
public:
static DateTime operator +(
    DateTime d,
    TimeSpan t
)
static let inline (+)
        d:DateTime *
        t:TimeSpan  : DateTime

参数

d
类型： System DateTime
要添加的日期和时间值。
t
类型： System TimeSpan
要加上的时间间隔。

返回值

类型： System DateTime
一个对象，它是 d 和 t 值的和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。

下面的代码示例演示加法运算符。

Dim dTime As New System.DateTime(1980, 8, 5)

' tSpan is 17 days, 4 hours, 2 minutes and 1 second.
Dim tSpan As New System.TimeSpan(17, 4, 2, 1)

Dim result As System.DateTime

' Result gets 8/22/1980 4:02:01 AM.
result = System.DateTime.op_Addition(dTime, tSpan)

            System.DateTime dTime = new System.DateTime(1980, 8, 5);

            // tSpan is 17 days, 4 hours, 2 minutes and 1 second.
            System.TimeSpan tSpan
                = new System.TimeSpan(17, 4, 2, 1);

            // Result gets 8/22/1980 4:02:01 AM.
            System.DateTime result = dTime + tSpan;

System::DateTime dTime( 1980, 8, 5 );

// tSpan is 17 days, 4 hours, 2 minutes and 1 second.
System::TimeSpan tSpan( 17, 4, 2, 1 );

// Result gets 8/22/1980 4:02:01 AM.
System::DateTime result = dTime + tSpan;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
TimeSpan
Ticks

其他资源

使用日期和时间执行算术运算


DateTime ..::.Equality 运算符

DateTime
.
.
::
.
Equality 运算符
DateTime 结构

确定 DateTime 的两个指定实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    d1 As DateTime, _
    d2 As DateTime _
) As Boolean
public static bool operator ==(
    DateTime d1,
    DateTime d2
)
public:
static bool operator ==(
    DateTime d1,
    DateTime d2
)
static let inline (=)
        d1:DateTime *
        d2:DateTime  : bool

参数

d1
类型： System DateTime
要比较的第一个对象。
d2
类型： System DateTime
要比较的第二个对象。

返回值

类型： System Boolean
如果 d1 和 d2 表示同一日期和时间，则为 true；否则为 false。

下面的代码示例演示相等运算符。

Dim april19 As New DateTime(2001, 4, 19)
Dim otherDate As New DateTime(1991, 6, 5)

Dim areEqual As Boolean
' areEqual gets false.
areEqual = System.DateTime.op_Equality(april19, otherDate)

otherDate = New DateTime(2001, 4, 19)
' areEqual gets true.
areEqual = System.DateTime.op_Equality(april19, otherDate)

            System.DateTime april19 = new DateTime(2001, 4, 19);
            System.DateTime otherDate = new DateTime(1991, 6, 5);

            // areEqual gets false.
            bool areEqual = april19 == otherDate;

            otherDate = new DateTime(2001, 4, 19);
            // areEqual gets true.
            areEqual = april19 == otherDate;

System::DateTime april19( 2001, 4, 19 );
System::DateTime otherDate( 1991, 6, 5 );

// areEqual gets false.
bool areEqual = april19 == otherDate;

otherDate = DateTime( 2001, 4, 19 );
// areEqual gets true.
areEqual = april19 == otherDate;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Boolean


DateTime ..::.GreaterThan 运算符

DateTime
.
.
::
.
GreaterThan 运算符
DateTime 结构

确定指定的 DateTime 是否大于另一个指定的 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator > ( _
    t1 As DateTime, _
    t2 As DateTime _
) As Boolean
public static bool operator >(
    DateTime t1,
    DateTime t2
)
public:
static bool operator >(
    DateTime t1,
    DateTime t2
)
static let inline (>)
        t1:DateTime *
        t2:DateTime  : bool

参数

t1
类型： System DateTime
要比较的第一个对象。
t2
类型： System DateTime
要比较的第二个对象。

返回值

类型： System Boolean
如果 t1 大于 t2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Boolean


DateTime ..::.GreaterThanOrEqual 运算符

DateTime
.
.
::
.
GreaterThanOrEqual 运算符
DateTime 结构

确定指定的 DateTime 是否大于等于另一个指定的 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator >= ( _
    t1 As DateTime, _
    t2 As DateTime _
) As Boolean
public static bool operator >=(
    DateTime t1,
    DateTime t2
)
public:
static bool operator >=(
    DateTime t1,
    DateTime t2
)
static let inline (>=)
        t1:DateTime *
        t2:DateTime  : bool

参数

t1
类型： System DateTime
要比较的第一个对象。
t2
类型： System DateTime
要比较的第二个对象。

返回值

类型： System Boolean
如果 t1 大于等于 t2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Boolean


DateTime ..::.Inequality 运算符

DateTime
.
.
::
.
Inequality 运算符
DateTime 结构

确定 DateTime 的两个指定实例是否不等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    d1 As DateTime, _
    d2 As DateTime _
) As Boolean
public static bool operator !=(
    DateTime d1,
    DateTime d2
)
public:
static bool operator !=(
    DateTime d1,
    DateTime d2
)
static let inline (<>)
        d1:DateTime *
        d2:DateTime  : bool

参数

d1
类型： System DateTime
要比较的第一个对象。
d2
类型： System DateTime
要比较的第二个对象。

返回值

类型： System Boolean
如果 d1 和 d2 不表示同一日期和时间，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Boolean


DateTime ..::.LessThan 运算符

DateTime
.
.
::
.
LessThan 运算符
DateTime 结构

确定指定的 DateTime 是否小于另一个指定的 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator < ( _
    t1 As DateTime, _
    t2 As DateTime _
) As Boolean
public static bool operator <(
    DateTime t1,
    DateTime t2
)
public:
static bool operator <(
    DateTime t1,
    DateTime t2
)
static let inline (<)
        t1:DateTime *
        t2:DateTime  : bool

参数

t1
类型： System DateTime
要比较的第一个对象。
t2
类型： System DateTime
要比较的第二个对象。

返回值

类型： System Boolean
如果 t1 小于 t2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Boolean


DateTime ..::.LessThanOrEqual 运算符

DateTime
.
.
::
.
LessThanOrEqual 运算符
DateTime 结构

确定指定的 DateTime 是否小于或等于另一个指定的 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <= ( _
    t1 As DateTime, _
    t2 As DateTime _
) As Boolean
public static bool operator <=(
    DateTime t1,
    DateTime t2
)
public:
static bool operator <=(
    DateTime t1,
    DateTime t2
)
static let inline (<=)
        t1:DateTime *
        t2:DateTime  : bool

参数

t1
类型： System DateTime
要比较的第一个对象。
t2
类型： System DateTime
要比较的第二个对象。

返回值

类型： System Boolean
如果 t1 小于等于 t2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Boolean


DateTime ..::.Subtraction 运算符

DateTime
.
.
::
.
Subtraction 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

从指定的 DateTime 减去指定的 DateTime 或 TimeSpan。

名称 说明
页首

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Subtraction 运算符 (DateTime, DateTime)

DateTime
.
.
::
.
Subtraction 运算符 (DateTime, DateTime)
DateTime 结构

将指定的日期和时间与另一个指定的日期和时间相减，返回一个时间间隔。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    d1 As DateTime, _
    d2 As DateTime _
) As TimeSpan
public static TimeSpan operator -(
    DateTime d1,
    DateTime d2
)
public:
static TimeSpan operator -(
    DateTime d1,
    DateTime d2
)
static let inline (-)
        d1:DateTime *
        d2:DateTime  : TimeSpan

参数

d1
类型： System DateTime
要从中减去的日期和时间值（被减数）。
d2
类型： System DateTime
要减去的日期和时间值（减数）。

返回值

类型： System TimeSpan
d1 和 d2 之间的时间间隔；即 d1 减去 d2。

在将两个 DateTime 对象相减之前，请确保这两个对象所表示的时间位于同一时区。否则，结果将包含时差。 在将两个 DateTime 对象相减之前，请确保这两个对象所表示的时间位于同一时区。否则，结果将包含时差。

下面的代码示例演示 Subtract 方法和运算符。

Dim date1 As New System.DateTime(1996, 6, 3, 22, 15, 0)
Dim date2 As New System.DateTime(1996, 12, 6, 13, 2, 0)
Dim date3 As New System.DateTime(1996, 10, 12, 8, 42, 0)

Dim diff1 As System.TimeSpan
' diff1 gets 185 days, 14 hours, and 47 minutes.
diff1 = date2.Subtract(date1)

Dim date4 As System.DateTime
' date4 gets 4/9/1996 5:55:00 PM.
date4 = date3.Subtract(diff1)

Dim diff2 As System.TimeSpan
' diff2 gets 55 days 4 hours and 20 minutes.
diff2 = System.DateTime.op_Subtraction(date2, date3)

Dim date5 As System.DateTime
' date5 gets 4/9/1996 5:55:00 PM.
date5 = System.DateTime.op_Subtraction(date1, diff2)

            System.DateTime date1 = new System.DateTime(1996, 6, 3, 22, 15, 0);
            System.DateTime date2 = new System.DateTime(1996, 12, 6, 13, 2, 0);
            System.DateTime date3 = new System.DateTime(1996, 10, 12, 8, 42, 0);

            // diff1 gets 185 days, 14 hours, and 47 minutes.
            System.TimeSpan diff1 = date2.Subtract(date1);

            // date4 gets 4/9/1996 5:55:00 PM.
            System.DateTime date4 = date3.Subtract(diff1);

            // diff2 gets 55 days 4 hours and 20 minutes.
            System.TimeSpan diff2 = date2 - date3;

            // date5 gets 4/9/1996 5:55:00 PM.
            System.DateTime date5 = date1 - diff2;

System::DateTime date1 = System::DateTime( 1996, 6, 3, 22, 15, 0 );
System::DateTime date2 = System::DateTime( 1996, 12, 6, 13, 2, 0 );
System::DateTime date3 = System::DateTime( 1996, 10, 12, 8, 42, 0 );

// diff1 gets 185 days, 14 hours, and 47 minutes.
System::TimeSpan diff1 = date2.Subtract( date1 );

// date4 gets 4/9/1996 5:55:00 PM.
System::DateTime date4 = date3.Subtract( diff1 );

// diff2 gets 55 days 4 hours and 20 minutes.
System::TimeSpan diff2 = date2 - date3;

// date5 gets 4/9/1996 5:55:00 PM.
System::DateTime date5 = date1 - diff2;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Subtraction 重载
System 命名空间
Ticks

其他资源

使用日期和时间执行算术运算


DateTime ..::.Subtraction 运算符 (DateTime, TimeSpan)

DateTime
.
.
::
.
Subtraction 运算符 (DateTime, TimeSpan)
DateTime 结构

从指定的日期和时间减去指定的时间间隔，返回新的日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    d As DateTime, _
    t As TimeSpan _
) As DateTime
public static DateTime operator -(
    DateTime d,
    TimeSpan t
)
public:
static DateTime operator -(
    DateTime d,
    TimeSpan t
)
static let inline (-)
        d:DateTime *
        t:TimeSpan  : DateTime

参数

d
类型： System DateTime
要从其中减去的日期和时间值。
t
类型： System TimeSpan
要减去的时间间隔。

返回值

类型： System DateTime
一个对象，其值为 d 的值减去 t 的值。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTime 小于 MinValue 或大于 MaxValue。

此方法从 d 的计时周期值中减去 t 的计时周期值。

下面的代码示例演示 Subtract 方法和运算符。

Dim date1 As New System.DateTime(1996, 6, 3, 22, 15, 0)
Dim date2 As New System.DateTime(1996, 12, 6, 13, 2, 0)
Dim date3 As New System.DateTime(1996, 10, 12, 8, 42, 0)

Dim diff1 As System.TimeSpan
' diff1 gets 185 days, 14 hours, and 47 minutes.
diff1 = date2.Subtract(date1)

Dim date4 As System.DateTime
' date4 gets 4/9/1996 5:55:00 PM.
date4 = date3.Subtract(diff1)

Dim diff2 As System.TimeSpan
' diff2 gets 55 days 4 hours and 20 minutes.
diff2 = System.DateTime.op_Subtraction(date2, date3)

Dim date5 As System.DateTime
' date5 gets 4/9/1996 5:55:00 PM.
date5 = System.DateTime.op_Subtraction(date1, diff2)

            System.DateTime date1 = new System.DateTime(1996, 6, 3, 22, 15, 0);
            System.DateTime date2 = new System.DateTime(1996, 12, 6, 13, 2, 0);
            System.DateTime date3 = new System.DateTime(1996, 10, 12, 8, 42, 0);

            // diff1 gets 185 days, 14 hours, and 47 minutes.
            System.TimeSpan diff1 = date2.Subtract(date1);

            // date4 gets 4/9/1996 5:55:00 PM.
            System.DateTime date4 = date3.Subtract(diff1);

            // diff2 gets 55 days 4 hours and 20 minutes.
            System.TimeSpan diff2 = date2 - date3;

            // date5 gets 4/9/1996 5:55:00 PM.
            System.DateTime date5 = date1 - diff2;

System::DateTime date1 = System::DateTime( 1996, 6, 3, 22, 15, 0 );
System::DateTime date2 = System::DateTime( 1996, 12, 6, 13, 2, 0 );
System::DateTime date3 = System::DateTime( 1996, 10, 12, 8, 42, 0 );

// diff1 gets 185 days, 14 hours, and 47 minutes.
System::TimeSpan diff1 = date2.Subtract( date1 );

// date4 gets 4/9/1996 5:55:00 PM.
System::DateTime date4 = date3.Subtract( diff1 );

// diff2 gets 55 days 4 hours and 20 minutes.
System::TimeSpan diff2 = date2 - date3;

// date5 gets 4/9/1996 5:55:00 PM.
System::DateTime date5 = date1 - diff2;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
Subtraction 重载
System 命名空间
Ticks
TimeSpan

其他资源

使用日期和时间执行算术运算


DateTime 属性

DateTime 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTime 结构

DateTime 类型公开以下成员。

名称 说明
页首

参考

DateTime 结构
System 命名空间


DateTime ..::.Date 属性

DateTime
.
.
::
.
Date 属性
DateTime 结构

获取此实例的日期部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Date As DateTime
    Get
public DateTime Date { get; }
public:
property DateTime Date {
    DateTime get ();
}
member Date : DateTime

属性值

类型： System DateTime
一个新对象，其日期与此实例相同，时间值设置为午夜 12:00:00 (00:00:00)。

返回的 Kind 值的 DateTime 属性值与当前实例相同。

因为 DateTime 类型表示单个类型中的日期和时间，一定要避免将 Date 属性返回的日期错误解释为日期和时间。有关更多信息，请参见 DateTime 主题中的"保存和还原日期/时间值"。 因为 DateTime 类型表示单个类型中的日期和时间，一定要避免将 Date 属性返回的日期错误解释为日期和时间。有关更多信息，请参见 DateTime 主题中的"保存和还原日期/时间值"。

下面的示例使用 Date 属性提取其时间组成部分设置为零（即 0:00:00 或午夜）的 DateTime 值的日期组成部分。它还演示根据显示 DateTime 值时所使用的格式字符串的不同，时间组成部分可以继续显示在格式化输出中。 下面的示例使用 Date 属性提取其时间组成部分设置为零（即 0:00:00 或午夜）的 DateTime 值的日期组成部分。它还演示根据显示 DateTime 值时所使用的格式字符串的不同，时间组成部分可以继续显示在格式化输出中。

Dim date1 As Date = #6/1/2008 7:47AM#
Console.WriteLine(date1.ToString())

' Get date-only portion of date, without its time.
Dim dateOnly As Date = date1.Date
' Display date using short date string.
Console.WriteLine(dateOnly.ToString("d"))
' Display date using 24-hour clock.
Console.WriteLine(dateOnly.ToString("g"))
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm"))
' The example displays the following output to the console:
'       6/1/2008 7:47:00 AM
'       6/1/2008
'       6/1/2008 12:00 AM
'       06/01/2008 00:00

DateTime date1 = new DateTime(2008, 6, 1, 7, 47, 0);
Console.WriteLine(date1.ToString());

// Get date-only portion of date, without its time.
DateTime dateOnly = date1.Date;
// Display date using short date string.
Console.WriteLine(dateOnly.ToString("d"));
// Display date using 24-hour clock.
Console.WriteLine(dateOnly.ToString("g"));
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm"));
// The example displays the following output to the console:
//       6/1/2008 7:47:00 AM
//       6/1/2008
//       6/1/2008 12:00 AM
//       06/01/2008 00:00

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Day 属性

DateTime
.
.
::
.
Day 属性
DateTime 结构

获取此实例所表示的日期为该月中的第几天。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Day As Integer
    Get
public int Day { get; }
public:
property int Day {
    int get ();
}
member Day : int

属性值

类型： System Int32
日组成部分，表示为 1 和 31 之间的一个值。

即使当前 DateTime 值是用其他日历实例化的，或当前线程区域性的默认日历不是公历，Day 属性也始终返回公历月份中的日期。若要检索采用其他日历的月份中的特定日期，请调用该日历的 Calendar..::.GetDayOfMonth 方法。下面的示例同时使用 Day 属性和 HijriCalendar..::.GetDayOfMonth 方法为使用回历实例化的 DateTime 值检索月份中的日期。 即使当前 DateTime 值是用其他日历实例化的，或当前线程区域性的默认日历不是公历，Day 属性也始终返回公历月份中的日期。若要检索采用其他日历的月份中的特定日期，请调用该日历的 Calendar..::.GetDayOfMonth 方法。下面的示例同时使用 Day 属性和 HijriCalendar..::.GetDayOfMonth 方法为使用回历实例化的 DateTime 值检索月份中的日期。 即使当前 DateTime 值是用其他日历实例化的，或当前线程区域性的默认日历不是公历，Day 属性也始终返回公历月份中的日期。若要检索采用其他日历的月份中的特定日期，请调用该日历的 Calendar..::.GetDayOfMonth 方法。下面的示例同时使用 Day 属性和 HijriCalendar..::.GetDayOfMonth 方法为使用回历实例化的 DateTime 值检索月份中的日期。

' Return day of 1/13/2009.
Dim dateGregorian As Date = #1/13/2009#
Console.WriteLine(dateGregorian.Day)
' Displays 13 (Gregorian date).

' Create date of 1/13/2009 using Hijri calendar.
Dim hijri As New HijriCalendar()
Dim dateHijri As Date = New Date(1430, 1, 17, hijri)
' Return day of date created using Hijri calendar.
Console.WriteLine(dateHijri.Day)
' Displays 13 (Gregorian date).

' Display day of date in Hijri calendar.
Console.WriteLine(hijri.GetDayOfMonth(dateHijri))
' Displays 17 (Hijri date).

// Return day of 1/13/2009.
DateTime dateGregorian = new DateTime(2009, 1, 13);
Console.WriteLine(dateGregorian.Day);
// Displays 13 (Gregorian day).

// Create date of 1/13/2009 using Hijri calendar.
HijriCalendar hijri = new HijriCalendar();
DateTime dateHijri = new DateTime(1430, 1, 17, hijri);
// Return day of date created using Hijri calendar.
Console.WriteLine(dateHijri.Day);
// Displays 13 (Gregorian day).

// Display day of date in Hijri calendar.
Console.WriteLine(hijri.GetDayOfMonth(dateHijri));
// Displays 17 (Hijri day).

同样，下面的示例在当前线程区域性为 ar-SA（使用回历作为其默认日历）时同时使用 Day 属性和 HijriCalendar..::.GetDayOfMonth 方法检索月份中的日期。

Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

' Change current culture to ar-SA.
Dim ci As New CultureInfo("ar-SA")
Thread.CurrentThread.CurrentCulture = ci

Dim hijriDate As New Date(1430, 1, 17, _
                          Thread.CurrentThread.CurrentCulture.Calendar)
' Display date (uses calendar of current culture by default).
Console.WriteLine(hijriDate.ToString("dd-MM-yyyy"))
' Displays 17-01-1430.

' Display day of 17th of Muharram
Console.WriteLine(hijriDate.Day)
' Displays 13 (corresponding day of January in Gregorian calendar).

' Display day of 17th of Muharram in Hijri calendar.
Console.WriteLine(Thread.CurrentThread.CurrentCulture.Calendar.GetDayOfMonth(hijriDate))
' Displays 17.

Thread.CurrentThread.CurrentCulture = originalCulture

CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;

// Change current culture to ar-SA.
CultureInfo ci = new CultureInfo("ar-SA");
Thread.CurrentThread.CurrentCulture = ci;

DateTime hijriDate = new DateTime(1430, 1, 17,
                         Thread.CurrentThread.CurrentCulture.Calendar);
// Display date (uses calendar of current culture by default).
Console.WriteLine(hijriDate.ToString("dd-MM-yyyy"));
// Displays 17-01-1430.

// Display day of 17th of Muharram
Console.WriteLine(hijriDate.Day);
// Displays 13 (corresponding day of January in Gregorian calendar).

// Display day of 17th of Muharram in Hijri calendar.
Console.WriteLine(Thread.CurrentThread.CurrentCulture.Calendar.GetDayOfMonth(hijriDate));
// Displays 17.

Thread.CurrentThread.CurrentCulture = originalCulture;

下面的代码示例演示 Day 属性。

Dim moment As New System.DateTime(1999, 1, 13, 3, 57, 32, 11)

' Year gets 1999.
Dim year As Integer = moment.Year

' Month gets 1 (January).
Dim month As Integer = moment.Month

' Day gets 13.
Dim day As Integer = moment.Day

' Hour gets 3.
Dim hour As Integer = moment.Hour

' Minute gets 57.
Dim minute As Integer = moment.Minute

' Second gets 32.
Dim second As Integer = moment.Second

' Millisecond gets 11.
Dim millisecond As Integer = moment.Millisecond

            System.DateTime moment = new System.DateTime(
                                            1999, 1, 13, 3, 57, 32, 11);
            // Year gets 1999.
            int year = moment.Year;

            // Month gets 1 (January).
            int month = moment.Month;

            // Day gets 13.
            int day = moment.Day;

            // Hour gets 3.
            int hour = moment.Hour;

            // Minute gets 57.
            int minute = moment.Minute;

            // Second gets 32.
            int second = moment.Second;

            // Millisecond gets 11.
            int millisecond = moment.Millisecond;

System::DateTime moment = System::DateTime(
   1999, 1, 13, 3, 57, 32, 11 );

// Year gets 1999.
int year = moment.Year;

// Month gets 1 (January).
int month = moment.Month;

// Day gets 13.
int day = moment.Day;

// Hour gets 3.
int hour = moment.Hour;

// Minute gets 57.
int minute = moment.Minute;

// Second gets 32.
int second = moment.Second;

// Millisecond gets 11.
int millisecond = moment.Millisecond;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.DayOfWeek 属性

DateTime
.
.
::
.
DayOfWeek 属性
DateTime 结构

获取此实例所表示的日期是星期几。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DayOfWeek As DayOfWeek
    Get
public DayOfWeek DayOfWeek { get; }
public:
property DayOfWeek DayOfWeek {
    DayOfWeek get ();
}
member DayOfWeek : DayOfWeek

属性值

类型： System DayOfWeek
一个枚举常量，指示此 DateTime 值是星期几。

DayOfWeek 枚举中的常量值的范围为 DayOfWeek..::.Sunday 到 DayOfWeek..::.Saturday。如果强制转换为整数，则此枚举值的范围为零（表示 DayOfWeek..::.Sunday）到六（表示 DayOfWeek..::.Saturday）。 DayOfWeek 枚举中的常量值的范围为 DayOfWeek..::.Sunday 到 DayOfWeek..::.Saturday。如果强制转换为整数，则此枚举值的范围为零（表示 DayOfWeek..::.Sunday）到六（表示 DayOfWeek..::.Saturday）。

DayOfWeek 属性返回一个枚举常量；它不反映系统的区域和语言设置。若要检索表示特定日期的本地化星期几名称的字符串，请调用包含 format 参数的 ToString 方法的重载之一，并将其传递给 ddd 或 dddd 自定义格式字符串。有关详细信息，请参见 如何：从特定日期中提取星期几。 DayOfWeek 属性返回一个枚举常量；它不反映系统的区域和语言设置。若要检索表示特定日期的本地化星期几名称的字符串，请调用包含 format 参数的 ToString 方法的重载之一，并将其传递给 ddd 或 dddd 自定义格式字符串。有关详细信息，请参见 如何：从特定日期中提取星期几。 DayOfWeek 属性返回一个枚举常量；它不反映系统的区域和语言设置。若要检索表示特定日期的本地化星期几名称的字符串，请调用包含 format 参数的 ToString 方法的重载之一，并将其传递给 ddd 或 dddd 自定义格式字符串。有关详细信息，请参见 如何：从特定日期中提取星期几。

下面的代码示例演示 DayOfWeek 属性和 System..::.DayOfWeek 枚举。

' This example demonstrates the DateTime.DayOfWeek property
Imports System

Class Sample
   Public Shared Sub Main()
      ' Assume the current culture is en-US.
      ' Create a DateTime for the first of May, 2003.
      Dim dt As New DateTime(2003, 5, 1)
      Console.WriteLine("Is Thursday the day of the week for {0:d}?: {1}", _
                         dt, dt.DayOfWeek = DayOfWeek.Thursday)
      Console.WriteLine("The day of the week for {0:d} is {1}.", dt, dt.DayOfWeek)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Is Thursday the day of the week for 5/1/2003?: True
'The day of the week for 5/1/2003 is Thursday.
'

// This example demonstrates the DateTime.DayOfWeek property
using System;

class Sample
{
    public static void Main()
    {
// Assume the current culture is en-US.
// Create a DateTime for the first of May, 2003.
    DateTime dt = new DateTime(2003, 5, 1);
    Console.WriteLine("Is Thursday the day of the week for {0:d}?: {1}",
                       dt, dt.DayOfWeek == DayOfWeek.Thursday);
    Console.WriteLine("The day of the week for {0:d} is {1}.", dt, dt.DayOfWeek);
    }
}
/*
This example produces the following results:

Is Thursday the day of the week for 5/1/2003?: True
The day of the week for 5/1/2003 is Thursday.
*/

// This example demonstrates the DateTime.DayOfWeek property
using namespace System;
int main()
{

   // Assume the current culture is en-US.
   // Create a DateTime for the first of May, 2003.
   DateTime dt = DateTime(2003,5,1);
   Console::WriteLine(  "Is Thursday the day of the week for {0:d}?: {1}", dt, dt.DayOfWeek == DayOfWeek::Thursday );
   Console::WriteLine(  "The day of the week for {0:d} is {1}.", dt, dt.DayOfWeek );
}

/*
This example produces the following results:

Is Thursday the day of the week for 5/1/2003?: True
The day of the week for 5/1/2003 is Thursday.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Ticks
Int32


DateTime ..::.DayOfYear 属性

DateTime
.
.
::
.
DayOfYear 属性
DateTime 结构

获取此实例所表示的日期是该年中的第几天。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DayOfYear As Integer
    Get
public int DayOfYear { get; }
public:
property int DayOfYear {
    int get ();
}
member DayOfYear : int

属性值

类型： System Int32
该年中的第几天，表示为 1 和 366 之间的一个值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Hour 属性

DateTime
.
.
::
.
Hour 属性
DateTime 结构

获取此实例所表示日期的小时部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Hour As Integer
    Get
public int Hour { get; }
public:
property int Hour {
    int get ();
}
member Hour : int

属性值

类型： System Int32
小时组成部分，表示为 0 和 23 之间的一个值。

Hour 属性的值始终以 24 小时制表示。若要检索表示采用 12 小时制的日期和时间中的小时的字符串，请调用 DateTime..::.ToString(String) 或具有“h”自定义格式说明符的 DateTime..::.ToString(String, IFormatProvider) 方法。例如： Hour 属性的值始终以 24 小时制表示。若要检索表示采用 12 小时制的日期和时间中的小时的字符串，请调用 DateTime..::.ToString(String) 或具有“h”自定义格式说明符的 DateTime..::.ToString(String, IFormatProvider) 方法。例如： Hour 属性的值始终以 24 小时制表示。若要检索表示采用 12 小时制的日期和时间中的小时的字符串，请调用 DateTime..::.ToString(String) 或具有“h”自定义格式说明符的 DateTime..::.ToString(String, IFormatProvider) 方法。例如：

Dim date1 As Date = #04/01/2008 6:53:00PM#
Console.WriteLine(date1.ToString("%h"))      ' Displays 6
Console.WriteLine(date1.ToString("h tt"))    ' Displays 6 PM

DateTime date1 = new DateTime(2008, 4, 1, 18, 53, 0);
Console.WriteLine(date1.ToString("%h"));              // Displays 6
Console.WriteLine(date1.ToString("h tt"));            // Displays 6 PM

下面的代码示例演示 Hour 属性。

Dim moment As New System.DateTime(1999, 1, 13, 3, 57, 32, 11)

' Year gets 1999.
Dim year As Integer = moment.Year

' Month gets 1 (January).
Dim month As Integer = moment.Month

' Day gets 13.
Dim day As Integer = moment.Day

' Hour gets 3.
Dim hour As Integer = moment.Hour

' Minute gets 57.
Dim minute As Integer = moment.Minute

' Second gets 32.
Dim second As Integer = moment.Second

' Millisecond gets 11.
Dim millisecond As Integer = moment.Millisecond

            System.DateTime moment = new System.DateTime(
                                            1999, 1, 13, 3, 57, 32, 11);
            // Year gets 1999.
            int year = moment.Year;

            // Month gets 1 (January).
            int month = moment.Month;

            // Day gets 13.
            int day = moment.Day;

            // Hour gets 3.
            int hour = moment.Hour;

            // Minute gets 57.
            int minute = moment.Minute;

            // Second gets 32.
            int second = moment.Second;

            // Millisecond gets 11.
            int millisecond = moment.Millisecond;

System::DateTime moment = System::DateTime(
   1999, 1, 13, 3, 57, 32, 11 );

// Year gets 1999.
int year = moment.Year;

// Month gets 1 (January).
int month = moment.Month;

// Day gets 13.
int day = moment.Day;

// Hour gets 3.
int hour = moment.Hour;

// Minute gets 57.
int minute = moment.Minute;

// Second gets 32.
int second = moment.Second;

// Millisecond gets 11.
int millisecond = moment.Millisecond;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Kind 属性

DateTime
.
.
::
.
Kind 属性
DateTime 结构

获取一个值，该值指示由此实例表示的时间是基于本地时间、协调世界时 (UTC)，还是两者皆否。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Kind As DateTimeKind
    Get
public DateTimeKind Kind { get; }
public:
property DateTimeKind Kind {
    DateTimeKind get ();
}
member Kind : DateTimeKind

属性值

类型： System DateTimeKind
用于指示当前时间表示的含义的枚举值之一。默认值为 Unspecified。 用于指示当前时间表示的含义的枚举值之一。默认值为 Unspecified。

您可以通过调用 SpecifyKind 方法，将新 DateTime 值的 Kind 属性显式设置为特定的 DateTimeKind 值。

通过 Kind 属性，DateTime 值可以明确反映协调世界时 (UTC) 或本地时间。相反，DateTimeOffset 结构可明确地将任何时区中的任何时间反映为单个时间点。 通过 Kind 属性，DateTime 值可以明确反映协调世界时 (UTC) 或本地时间。相反，DateTimeOffset 结构可明确地将任何时区中的任何时间反映为单个时间点。

下面的代码示例使用 SpecifyKind 方法演示 Kind 属性如何影响 ToLocalTime 和 ToUniversalTime 转换方法。

' This code example demonstrates the DateTime Kind, Now, and
' UtcNow properties, and the SpecifyKind(), ToLocalTime(),
' and ToUniversalTime() methods.
Imports System

Class Sample
    Public Shared Sub Main()
        ' Get the date and time for the current moment, adjusted
        ' to the local time zone.
        Dim saveNow As DateTime = DateTime.Now

        ' Get the date and time for the current moment expressed
        ' as coordinated universal time (UTC).
        Dim saveUtcNow As DateTime = DateTime.UtcNow
        Dim myDt As DateTime

        ' Display the value and Kind property of the current moment
        ' expressed as UTC and local time.
        DisplayNow("UtcNow: ..........", saveUtcNow)
        DisplayNow("Now: .............", saveNow)
        Console.WriteLine()

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Utc and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc)
        Display("Utc: .............", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Local and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local)
        Display("Local: ...........", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Unspecified and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified)
        Display("Unspecified: .....", myDt)
    End Sub 'Main

    ' Display the value and Kind property of a DateTime structure, the
    ' DateTime structure converted to local time, and the DateTime
    ' structure converted to universal time.

    Public Shared datePatt As String = "M/d/yyyy hh:mm:ss tt"

    Public Shared Sub Display(ByVal title As String, ByVal inputDt As DateTime)
        Dim dispDt As DateTime = inputDt
        Dim dtString As String

        ' Display the original DateTime.
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, dispDt.Kind)

        ' Convert inputDt to local time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was universal time.
        dispDt = inputDt.ToLocalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}", dtString, dispDt.Kind)

        ' Convert inputDt to universal time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was local time.
        dispDt = inputDt.ToUniversalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}", dtString, dispDt.Kind)
        Console.WriteLine()
    End Sub 'Display

    ' Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    Public Shared Sub DisplayNow(ByVal title As String, ByVal inputDt As DateTime)
        Dim dtString As String = inputDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, inputDt.Kind)
    End Sub 'DisplayNow
End Class 'Sample

'
'This code example produces the following results:
'
'UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
'Now: ............. 5/6/2005 02:34:42 PM, Kind = Local
'
'Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc
'
'Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
'  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'
'Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'

// This code example demonstrates the DateTime Kind, Now, and
// UtcNow properties, and the SpecifyKind(), ToLocalTime(),
// and ToUniversalTime() methods.

using System;

class Sample
{
    public static void Main()
    {
// Get the date and time for the current moment, adjusted
// to the local time zone.

    DateTime saveNow = DateTime.Now;

// Get the date and time for the current moment expressed
// as coordinated universal time (UTC).

    DateTime saveUtcNow = DateTime.UtcNow;
    DateTime myDt;

// Display the value and Kind property of the current moment
// expressed as UTC and local time.

    DisplayNow("UtcNow: ..........", saveUtcNow);
    DisplayNow("Now: .............", saveNow);
    Console.WriteLine();

// Change the Kind property of the current moment to
// DateTimeKind.Utc and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc);
    Display("Utc: .............", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Local and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local);
    Display("Local: ...........", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Unspecified and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified);
    Display("Unspecified: .....", myDt);
    }

// Display the value and Kind property of a DateTime structure, the
// DateTime structure converted to local time, and the DateTime
// structure converted to universal time.

    public static string datePatt = @"M/d/yyyy hh:mm:ss tt";
    public static void Display(string title, DateTime inputDt)
    {
    DateTime dispDt = inputDt;
    string dtString;

// Display the original DateTime.

    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, dispDt.Kind);

// Convert inputDt to local time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was universal time.

    dispDt = inputDt.ToLocalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}",
                      dtString, dispDt.Kind);

// Convert inputDt to universal time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was local time.

    dispDt = inputDt.ToUniversalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}",
                      dtString, dispDt.Kind);
    Console.WriteLine();
    }

// Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    public static void DisplayNow(string title, DateTime inputDt)
    {
    string dtString = inputDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, inputDt.Kind);
    }
}

/*
This code example produces the following results:

UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
Now: ............. 5/6/2005 02:34:42 PM, Kind = Local

Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc

Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
DateTime SpecifyKind


DateTime ..::.Millisecond 属性

DateTime
.
.
::
.
Millisecond 属性
DateTime 结构

获取此实例所表示日期的毫秒部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Millisecond As Integer
    Get
public int Millisecond { get; }
public:
property int Millisecond {
    int get ();
}
member Millisecond : int

属性值

类型： System Int32
毫秒组成部分，表示为 0 和 999 之间的一个值。

您可以使用“fff”格式说明符来显示 Millisecond 属性的字符串表示形式。例如，下面的代码将其日期和时间中包含毫秒数的字符串显示到控制台。 您可以使用“fff”格式说明符来显示 Millisecond 属性的字符串表示形式。例如，下面的代码将其日期和时间中包含毫秒数的字符串显示到控制台。

Dim date1 As Date = New Date(2008, 1, 1, 0, 30, 45, 125)
Console.WriteLine("Milliseconds: {0:fff}", _
                  date1)       ' displays Milliseconds: 125

DateTime date1 = new DateTime(2008, 1, 1, 0, 30, 45, 125);
Console.WriteLine("Milliseconds: {0:fff}",
                  date1);           // displays Milliseconds: 125

还可以使用“o”标准格式说明符，将毫秒部分与日期和时间值的其他部分一起显示。例如： 还可以使用“o”标准格式说明符，将毫秒部分与日期和时间值的其他部分一起显示。例如：

Dim date2 As New Date(2008, 1, 1, 0, 30, 45, 125)
Console.WriteLine("Date: {0:o}", date2)
' Displays the following output to the console:
'      Date: 2008-01-01T00:30:45.1250000

DateTime date2 = new DateTime(2008, 1, 1, 0, 30, 45, 125);
Console.WriteLine("Date: {0:o}",
                  date2);
// Displays the following output to the console:
//      Date: 2008-01-01T00:30:45.1250000

但“o”格式说明符更少用于显示，而更多用于往返过程或存储 DateTime 值。此外，也可以使用自定义格式字符串同时显示毫秒以及其他日期和时间部分，如下面的示例所示。 但“o”格式说明符更少用于显示，而更多用于往返过程或存储 DateTime 值。此外，也可以使用自定义格式字符串同时显示毫秒以及其他日期和时间部分，如下面的示例所示。

Dim date3 As New Date(2008, 1, 1, 0, 30, 45, 125)
Console.WriteLine("Date with milliseconds: {0:MM/dd/yyy hh:mm:ss.fff}", _
                  date3)
' Displays the following output to the console:
'       Date with milliseconds: 01/01/2008 12:30:45.125

DateTime date3 = new DateTime(2008, 1, 1, 0, 30, 45, 125);
Console.WriteLine("Date with milliseconds: {0:MM/dd/yyy hh:mm:ss.fff}",
                  date3);
// Displays the following output to the console:
//       Date with milliseconds: 01/01/2008 12:30:45.125

下面的代码示例演示 Millisecond 属性。

Dim moment As New System.DateTime(1999, 1, 13, 3, 57, 32, 11)

' Year gets 1999.
Dim year As Integer = moment.Year

' Month gets 1 (January).
Dim month As Integer = moment.Month

' Day gets 13.
Dim day As Integer = moment.Day

' Hour gets 3.
Dim hour As Integer = moment.Hour

' Minute gets 57.
Dim minute As Integer = moment.Minute

' Second gets 32.
Dim second As Integer = moment.Second

' Millisecond gets 11.
Dim millisecond As Integer = moment.Millisecond

            System.DateTime moment = new System.DateTime(
                                            1999, 1, 13, 3, 57, 32, 11);
            // Year gets 1999.
            int year = moment.Year;

            // Month gets 1 (January).
            int month = moment.Month;

            // Day gets 13.
            int day = moment.Day;

            // Hour gets 3.
            int hour = moment.Hour;

            // Minute gets 57.
            int minute = moment.Minute;

            // Second gets 32.
            int second = moment.Second;

            // Millisecond gets 11.
            int millisecond = moment.Millisecond;

System::DateTime moment = System::DateTime(
   1999, 1, 13, 3, 57, 32, 11 );

// Year gets 1999.
int year = moment.Year;

// Month gets 1 (January).
int month = moment.Month;

// Day gets 13.
int day = moment.Day;

// Hour gets 3.
int hour = moment.Hour;

// Minute gets 57.
int minute = moment.Minute;

// Second gets 32.
int second = moment.Second;

// Millisecond gets 11.
int millisecond = moment.Millisecond;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Minute 属性

DateTime
.
.
::
.
Minute 属性
DateTime 结构

获取此实例所表示日期的分钟部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Minute As Integer
    Get
public int Minute { get; }
public:
property int Minute {
    int get ();
}
member Minute : int

属性值

类型： System Int32
分钟组成部分，表示为 0 和 59 之间的一个值。

下面的代码示例演示 Minute 属性。

Dim moment As New System.DateTime(1999, 1, 13, 3, 57, 32, 11)

' Year gets 1999.
Dim year As Integer = moment.Year

' Month gets 1 (January).
Dim month As Integer = moment.Month

' Day gets 13.
Dim day As Integer = moment.Day

' Hour gets 3.
Dim hour As Integer = moment.Hour

' Minute gets 57.
Dim minute As Integer = moment.Minute

' Second gets 32.
Dim second As Integer = moment.Second

' Millisecond gets 11.
Dim millisecond As Integer = moment.Millisecond

            System.DateTime moment = new System.DateTime(
                                            1999, 1, 13, 3, 57, 32, 11);
            // Year gets 1999.
            int year = moment.Year;

            // Month gets 1 (January).
            int month = moment.Month;

            // Day gets 13.
            int day = moment.Day;

            // Hour gets 3.
            int hour = moment.Hour;

            // Minute gets 57.
            int minute = moment.Minute;

            // Second gets 32.
            int second = moment.Second;

            // Millisecond gets 11.
            int millisecond = moment.Millisecond;

System::DateTime moment = System::DateTime(
   1999, 1, 13, 3, 57, 32, 11 );

// Year gets 1999.
int year = moment.Year;

// Month gets 1 (January).
int month = moment.Month;

// Day gets 13.
int day = moment.Day;

// Hour gets 3.
int hour = moment.Hour;

// Minute gets 57.
int minute = moment.Minute;

// Second gets 32.
int second = moment.Second;

// Millisecond gets 11.
int millisecond = moment.Millisecond;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Month 属性

DateTime
.
.
::
.
Month 属性
DateTime 结构

获取此实例所表示日期的月份部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Month As Integer
    Get
public int Month { get; }
public:
property int Month {
    int get ();
}
member Month : int

属性值

类型： System Int32
月组成部分，表示为 1 和 12 之间的一个值。

下面的代码示例演示 Month 属性。

Dim moment As New System.DateTime(1999, 1, 13, 3, 57, 32, 11)

' Year gets 1999.
Dim year As Integer = moment.Year

' Month gets 1 (January).
Dim month As Integer = moment.Month

' Day gets 13.
Dim day As Integer = moment.Day

' Hour gets 3.
Dim hour As Integer = moment.Hour

' Minute gets 57.
Dim minute As Integer = moment.Minute

' Second gets 32.
Dim second As Integer = moment.Second

' Millisecond gets 11.
Dim millisecond As Integer = moment.Millisecond

            System.DateTime moment = new System.DateTime(
                                            1999, 1, 13, 3, 57, 32, 11);
            // Year gets 1999.
            int year = moment.Year;

            // Month gets 1 (January).
            int month = moment.Month;

            // Day gets 13.
            int day = moment.Day;

            // Hour gets 3.
            int hour = moment.Hour;

            // Minute gets 57.
            int minute = moment.Minute;

            // Second gets 32.
            int second = moment.Second;

            // Millisecond gets 11.
            int millisecond = moment.Millisecond;

System::DateTime moment = System::DateTime(
   1999, 1, 13, 3, 57, 32, 11 );

// Year gets 1999.
int year = moment.Year;

// Month gets 1 (January).
int month = moment.Month;

// Day gets 13.
int day = moment.Day;

// Hour gets 3.
int hour = moment.Hour;

// Minute gets 57.
int minute = moment.Minute;

// Second gets 32.
int second = moment.Second;

// Millisecond gets 11.
int millisecond = moment.Millisecond;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Now 属性

DateTime
.
.
::
.
Now 属性
DateTime 结构

获取一个 DateTime 对象，该对象设置为此计算机上的当前日期和时间，表示为本地时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Now As DateTime
    Get
public static DateTime Now { get; }
public:
static property DateTime Now {
    DateTime get ();
}
static member Now : DateTime

属性值

类型： System DateTime
一个对象，其值为当前本地日期和时间。

此属性的分辨率取决于系统计时器。

System | 近似分辨率
Windows NT 3.5 和更高版本 | 10 毫秒
Windows 98 | 55 毫秒

从 .NET Framework 2.0 版开始，返回值是 DateTime，它的 Kind 属性返回 DateTimeKind..::.Local。

说明 说明

您还可以使用 Now 属性检索当前的本地日期和时间。它允许将本地时间明确地表示为单个时间点，而这样又能使该时间值可以跨计算机移植。 您还可以使用 Now 属性检索当前的本地日期和时间。它允许将本地时间明确地表示为单个时间点，而这样又能使该时间值可以跨计算机移植。

下面的代码示例使用 SpecifyKind 方法演示 Kind 属性如何影响 ToLocalTime 和 ToUniversalTime 转换方法。

' This code example demonstrates the DateTime Kind, Now, and
' UtcNow properties, and the SpecifyKind(), ToLocalTime(),
' and ToUniversalTime() methods.
Imports System

Class Sample
    Public Shared Sub Main()
        ' Get the date and time for the current moment, adjusted
        ' to the local time zone.
        Dim saveNow As DateTime = DateTime.Now

        ' Get the date and time for the current moment expressed
        ' as coordinated universal time (UTC).
        Dim saveUtcNow As DateTime = DateTime.UtcNow
        Dim myDt As DateTime

        ' Display the value and Kind property of the current moment
        ' expressed as UTC and local time.
        DisplayNow("UtcNow: ..........", saveUtcNow)
        DisplayNow("Now: .............", saveNow)
        Console.WriteLine()

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Utc and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc)
        Display("Utc: .............", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Local and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local)
        Display("Local: ...........", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Unspecified and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified)
        Display("Unspecified: .....", myDt)
    End Sub 'Main

    ' Display the value and Kind property of a DateTime structure, the
    ' DateTime structure converted to local time, and the DateTime
    ' structure converted to universal time.

    Public Shared datePatt As String = "M/d/yyyy hh:mm:ss tt"

    Public Shared Sub Display(ByVal title As String, ByVal inputDt As DateTime)
        Dim dispDt As DateTime = inputDt
        Dim dtString As String

        ' Display the original DateTime.
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, dispDt.Kind)

        ' Convert inputDt to local time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was universal time.
        dispDt = inputDt.ToLocalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}", dtString, dispDt.Kind)

        ' Convert inputDt to universal time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was local time.
        dispDt = inputDt.ToUniversalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}", dtString, dispDt.Kind)
        Console.WriteLine()
    End Sub 'Display

    ' Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    Public Shared Sub DisplayNow(ByVal title As String, ByVal inputDt As DateTime)
        Dim dtString As String = inputDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, inputDt.Kind)
    End Sub 'DisplayNow
End Class 'Sample

'
'This code example produces the following results:
'
'UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
'Now: ............. 5/6/2005 02:34:42 PM, Kind = Local
'
'Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc
'
'Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
'  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'
'Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'

// This code example demonstrates the DateTime Kind, Now, and
// UtcNow properties, and the SpecifyKind(), ToLocalTime(),
// and ToUniversalTime() methods.

using System;

class Sample
{
    public static void Main()
    {
// Get the date and time for the current moment, adjusted
// to the local time zone.

    DateTime saveNow = DateTime.Now;

// Get the date and time for the current moment expressed
// as coordinated universal time (UTC).

    DateTime saveUtcNow = DateTime.UtcNow;
    DateTime myDt;

// Display the value and Kind property of the current moment
// expressed as UTC and local time.

    DisplayNow("UtcNow: ..........", saveUtcNow);
    DisplayNow("Now: .............", saveNow);
    Console.WriteLine();

// Change the Kind property of the current moment to
// DateTimeKind.Utc and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc);
    Display("Utc: .............", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Local and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local);
    Display("Local: ...........", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Unspecified and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified);
    Display("Unspecified: .....", myDt);
    }

// Display the value and Kind property of a DateTime structure, the
// DateTime structure converted to local time, and the DateTime
// structure converted to universal time.

    public static string datePatt = @"M/d/yyyy hh:mm:ss tt";
    public static void Display(string title, DateTime inputDt)
    {
    DateTime dispDt = inputDt;
    string dtString;

// Display the original DateTime.

    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, dispDt.Kind);

// Convert inputDt to local time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was universal time.

    dispDt = inputDt.ToLocalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}",
                      dtString, dispDt.Kind);

// Convert inputDt to universal time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was local time.

    dispDt = inputDt.ToUniversalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}",
                      dtString, dispDt.Kind);
    Console.WriteLine();
    }

// Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    public static void DisplayNow(string title, DateTime inputDt)
    {
    string dtString = inputDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, inputDt.Kind);
    }
}

/*
This code example produces the following results:

UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
Now: ............. 5/6/2005 02:34:42 PM, Kind = Local

Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc

Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Now


DateTime ..::.Second 属性

DateTime
.
.
::
.
Second 属性
DateTime 结构

获取此实例所表示日期的秒部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Second As Integer
    Get
public int Second { get; }
public:
property int Second {
    int get ();
}
member Second : int

属性值

类型： System Int32
秒组成部分，表示为 0 和 59 之间的一个值。

下面的代码示例演示 Second 属性。

Dim moment As New System.DateTime(1999, 1, 13, 3, 57, 32, 11)

' Year gets 1999.
Dim year As Integer = moment.Year

' Month gets 1 (January).
Dim month As Integer = moment.Month

' Day gets 13.
Dim day As Integer = moment.Day

' Hour gets 3.
Dim hour As Integer = moment.Hour

' Minute gets 57.
Dim minute As Integer = moment.Minute

' Second gets 32.
Dim second As Integer = moment.Second

' Millisecond gets 11.
Dim millisecond As Integer = moment.Millisecond

            System.DateTime moment = new System.DateTime(
                                            1999, 1, 13, 3, 57, 32, 11);
            // Year gets 1999.
            int year = moment.Year;

            // Month gets 1 (January).
            int month = moment.Month;

            // Day gets 13.
            int day = moment.Day;

            // Hour gets 3.
            int hour = moment.Hour;

            // Minute gets 57.
            int minute = moment.Minute;

            // Second gets 32.
            int second = moment.Second;

            // Millisecond gets 11.
            int millisecond = moment.Millisecond;

System::DateTime moment = System::DateTime(
   1999, 1, 13, 3, 57, 32, 11 );

// Year gets 1999.
int year = moment.Year;

// Month gets 1 (January).
int month = moment.Month;

// Day gets 13.
int day = moment.Day;

// Hour gets 3.
int hour = moment.Hour;

// Minute gets 57.
int minute = moment.Minute;

// Second gets 32.
int second = moment.Second;

// Millisecond gets 11.
int millisecond = moment.Millisecond;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.Ticks 属性

DateTime
.
.
::
.
Ticks 属性
DateTime 结构

获取表示此实例的日期和时间的计时周期数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Ticks As Long
    Get
public long Ticks { get; }
public:
property long long Ticks {
    long long get ();
}
member Ticks : int64

属性值

类型： System Int64
表示此实例的日期和时间的计时周期数。该值介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间。 表示此实例的日期和时间的计时周期数。该值介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间。

每个计时周期表示一百纳秒，即一千万分之一秒。1 毫秒内有 10,000 个计时周期。 每个计时周期表示一百纳秒，即一千万分之一秒。1 毫秒内有 10,000 个计时周期。

此属性的值表示自 0001 年 1 月 1 日午夜 12:00:00（表示 DateTime..::.MinValue）以来经过的以 100 纳秒为间隔的间隔数。

下面的示例使用 Ticks 属性显示自二十一世纪初以来经过的计时周期数，并实例化 TimeSpan 对象。然后，使用 TimeSpan 对象显示采用几个其他时间间隔所经过的时间。 下面的示例使用 Ticks 属性显示自二十一世纪初以来经过的计时周期数，并实例化 TimeSpan 对象。然后，使用 TimeSpan 对象显示采用几个其他时间间隔所经过的时间。

Dim centuryBegin As Date = #1/1/2001 0:0:0#
Dim currentDate As Date = Date.Now
Dim elapsedTicks As Long = currentDate.Ticks - centuryBegin.Ticks
Dim elapsedSpan As New TimeSpan(elapsedTicks)

Console.WriteLine("Elapsed from the beginning of the century to {0:f}:", _
                   currentDate)
Console.WriteLine("   {0:N0} nanoseconds", elapsedTicks * 100)
Console.WriteLine("   {0:N0} ticks", elapsedTicks)
Console.WriteLine("   {0:N2} seconds", elapsedSpan.TotalSeconds)
Console.WriteLine("   {0:N2} minutes", elapsedSpan.TotalMinutes)
Console.WriteLine("   {0:N0} days, {1} hours, {2} minutes, {3} seconds", _
                  elapsedSpan.Days, elapsedSpan.Hours, _
                  elapsedSpan.Minutes, elapsedSpan.Seconds)
' If run on December 14, 2007, at 15:23, this example displays the
' following output to the console:
'          219,338,580,000,000,000 nanoseconds
'          2,193,385,800,000,000 ticks
'          219,338,580.00 seconds
'          3,655,643.00 minutes
'          2,538 days, 15 hours, 23 minutes, 0 seconds

DateTime centuryBegin = new DateTime(2001, 1, 1);
DateTime currentDate = DateTime.Now;

long elapsedTicks = currentDate.Ticks - centuryBegin.Ticks;
TimeSpan elapsedSpan = new TimeSpan(elapsedTicks);

Console.WriteLine("Elapsed from the beginning of the century to {0:f}:",
                   currentDate);
Console.WriteLine("   {0:N0} nanoseconds", elapsedTicks * 100);
Console.WriteLine("   {0:N0} ticks", elapsedTicks);
Console.WriteLine("   {0:N2} seconds", elapsedSpan.TotalSeconds);
Console.WriteLine("   {0:N2} minutes", elapsedSpan.TotalMinutes);
Console.WriteLine("   {0:N0} days, {1} hours, {2} minutes, {3} seconds",
                  elapsedSpan.Days, elapsedSpan.Hours,
                  elapsedSpan.Minutes, elapsedSpan.Seconds);
// If run on December 14, 2007, at 15:23, this example displays the
// following output to the console:
//    Elapsed from the beginning of the century to Friday, December 14, 2007 3:23 PM:
//          219,338,580,000,000,000 nanoseconds
//          2,193,385,800,000,000 ticks
//          219,338,580.00 seconds
//          3,655,643.00 minutes
//          2,538 days, 15 hours, 23 minutes, 0 seconds

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间


DateTime ..::.TimeOfDay 属性

DateTime
.
.
::
.
TimeOfDay 属性
DateTime 结构

获取此实例的当天的时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TimeOfDay As TimeSpan
    Get
public TimeSpan TimeOfDay { get; }
public:
property TimeSpan TimeOfDay {
    TimeSpan get ();
}
member TimeOfDay : TimeSpan

属性值

类型： System TimeSpan
一个时间间隔，表示当天自午夜以来已经过时间的部分。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
TimeSpan


DateTime ..::.Today 属性

DateTime
.
.
::
.
Today 属性
DateTime 结构

获取当前日期。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Today As DateTime
    Get
public static DateTime Today { get; }
public:
static property DateTime Today {
    DateTime get ();
}
static member Today : DateTime

属性值

类型： System DateTime
一个对象，设置为当天日期，其时间组成部分设置为 00:00:00。

从 .NET Framework 2.0 版开始，返回值是 DateTime，它的 Kind 属性返回 Local。

由于返回的是不带当前时间的当前日期，因此 Today 属性适合在仅处理日期的应用程序内使用。有关详细信息，请参见 在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择。相反，TimeOfDay 属性返回不带当前日期的当前时间，Now 属性返回当前日期和当前时间。 由于返回的是不带当前时间的当前日期，因此 Today 属性适合在仅处理日期的应用程序内使用。有关详细信息，请参见 在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择。相反，TimeOfDay 属性返回不带当前日期的当前时间，Now 属性返回当前日期和当前时间。 由于返回的是不带当前时间的当前日期，因此 Today 属性适合在仅处理日期的应用程序内使用。有关详细信息，请参见 在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择。相反，TimeOfDay 属性返回不带当前日期的当前时间，Now 属性返回当前日期和当前时间。

下面的示例使用 Date 属性检索当前日期。该示例还演示如何使用某些标准日期和时间格式字符串来设置 DateTime 值的格式。请注意，第三次调用 ToString(String) 方法所生成的输出使用格式说明符 g 来包含时间部分，该时间部分为零。 下面的示例使用 Date 属性检索当前日期。该示例还演示如何使用某些标准日期和时间格式字符串来设置 DateTime 值的格式。请注意，第三次调用 ToString(String) 方法所生成的输出使用格式说明符 g 来包含时间部分，该时间部分为零。 下面的示例使用 Date 属性检索当前日期。该示例还演示如何使用某些标准日期和时间格式字符串来设置 DateTime 值的格式。请注意，第三次调用 ToString(String) 方法所生成的输出使用格式说明符 g 来包含时间部分，该时间部分为零。

' Get current date.
Dim thisDay As DateTime = DateTime.Today
' Display the date in a variety of formats.
Console.WriteLine(thisDay.ToString("d"))
Console.WriteLine(thisDay.ToString("D"))
Console.WriteLine(thisDay.ToString("g"))

// Get current date.
DateTime thisDay = DateTime.Today;
// Display the date in a variety of formats.
Console.WriteLine(thisDay.ToString("d"));
Console.WriteLine(thisDay.ToString("D"));
Console.WriteLine(thisDay.ToString("g"));

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Now
TimeOfDay


DateTime ..::.UtcNow 属性

DateTime
.
.
::
.
UtcNow 属性
DateTime 结构

获取一个 DateTime 对象，该对象设置为此计算机上的当前日期和时间，表示为协调世界时 (UTC)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property UtcNow As DateTime
    Get
public static DateTime UtcNow { get; }
public:
static property DateTime UtcNow {
    DateTime get ();
}
static member UtcNow : DateTime

属性值

类型： System DateTime
一个对象，其值为当前 UTC 日期和时间。

此属性的分辨率取决于系统计时器。

System | 近似分辨率
Windows NT 3.5 和更高版本 | 10 毫秒
Windows 98 | 55 毫秒

从 .NET Framework 2.0 版开始，返回值是 DateTime，它的 Kind 属性返回 DateTimeKind..::.Utc。

UtcNow 的一种替代方法是 UtcNow。前者通过将 DateTimeKind..::.Utc 分配给其 Kind 属性，来指示日期和时间值为协调世界时 (UTC)；而后者将 UTC 时间偏移量（等于 Zero）分配给日期和时间值。 UtcNow 的一种替代方法是 UtcNow。前者通过将 DateTimeKind..::.Utc 分配给其 Kind 属性，来指示日期和时间值为协调世界时 (UTC)；而后者将 UTC 时间偏移量（等于 Zero）分配给日期和时间值。

下面的代码示例使用 SpecifyKind 方法演示 Kind 属性如何影响 ToLocalTime 和 ToUniversalTime 转换方法。

' This code example demonstrates the DateTime Kind, Now, and
' UtcNow properties, and the SpecifyKind(), ToLocalTime(),
' and ToUniversalTime() methods.
Imports System

Class Sample
    Public Shared Sub Main()
        ' Get the date and time for the current moment, adjusted
        ' to the local time zone.
        Dim saveNow As DateTime = DateTime.Now

        ' Get the date and time for the current moment expressed
        ' as coordinated universal time (UTC).
        Dim saveUtcNow As DateTime = DateTime.UtcNow
        Dim myDt As DateTime

        ' Display the value and Kind property of the current moment
        ' expressed as UTC and local time.
        DisplayNow("UtcNow: ..........", saveUtcNow)
        DisplayNow("Now: .............", saveNow)
        Console.WriteLine()

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Utc and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc)
        Display("Utc: .............", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Local and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local)
        Display("Local: ...........", myDt)

        ' Change the Kind property of the current moment to
        ' DateTimeKind.Unspecified and display the result.
        myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified)
        Display("Unspecified: .....", myDt)
    End Sub 'Main

    ' Display the value and Kind property of a DateTime structure, the
    ' DateTime structure converted to local time, and the DateTime
    ' structure converted to universal time.

    Public Shared datePatt As String = "M/d/yyyy hh:mm:ss tt"

    Public Shared Sub Display(ByVal title As String, ByVal inputDt As DateTime)
        Dim dispDt As DateTime = inputDt
        Dim dtString As String

        ' Display the original DateTime.
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, dispDt.Kind)

        ' Convert inputDt to local time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was universal time.
        dispDt = inputDt.ToLocalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}", dtString, dispDt.Kind)

        ' Convert inputDt to universal time and display the result.
        ' If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
        ' If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
        ' If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
        ' performed as if inputDt was local time.
        dispDt = inputDt.ToUniversalTime()
        dtString = dispDt.ToString(datePatt)
        Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}", dtString, dispDt.Kind)
        Console.WriteLine()
    End Sub 'Display

    ' Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    Public Shared Sub DisplayNow(ByVal title As String, ByVal inputDt As DateTime)
        Dim dtString As String = inputDt.ToString(datePatt)
        Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, inputDt.Kind)
    End Sub 'DisplayNow
End Class 'Sample

'
'This code example produces the following results:
'
'UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
'Now: ............. 5/6/2005 02:34:42 PM, Kind = Local
'
'Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc
'
'Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
'  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'
'Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
'  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
'  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc
'

// This code example demonstrates the DateTime Kind, Now, and
// UtcNow properties, and the SpecifyKind(), ToLocalTime(),
// and ToUniversalTime() methods.

using System;

class Sample
{
    public static void Main()
    {
// Get the date and time for the current moment, adjusted
// to the local time zone.

    DateTime saveNow = DateTime.Now;

// Get the date and time for the current moment expressed
// as coordinated universal time (UTC).

    DateTime saveUtcNow = DateTime.UtcNow;
    DateTime myDt;

// Display the value and Kind property of the current moment
// expressed as UTC and local time.

    DisplayNow("UtcNow: ..........", saveUtcNow);
    DisplayNow("Now: .............", saveNow);
    Console.WriteLine();

// Change the Kind property of the current moment to
// DateTimeKind.Utc and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Utc);
    Display("Utc: .............", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Local and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Local);
    Display("Local: ...........", myDt);

// Change the Kind property of the current moment to
// DateTimeKind.Unspecified and display the result.

    myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified);
    Display("Unspecified: .....", myDt);
    }

// Display the value and Kind property of a DateTime structure, the
// DateTime structure converted to local time, and the DateTime
// structure converted to universal time.

    public static string datePatt = @"M/d/yyyy hh:mm:ss tt";
    public static void Display(string title, DateTime inputDt)
    {
    DateTime dispDt = inputDt;
    string dtString;

// Display the original DateTime.

    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, dispDt.Kind);

// Convert inputDt to local time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was universal time.

    dispDt = inputDt.ToLocalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToLocalTime:     {0}, Kind = {1}",
                      dtString, dispDt.Kind);

// Convert inputDt to universal time and display the result.
// If inputDt.Kind is DateTimeKind.Utc, the conversion is not performed.
// If inputDt.Kind is DateTimeKind.Local, the conversion is performed.
// If inputDt.Kind is DateTimeKind.Unspecified, the conversion is
// performed as if inputDt was local time.

    dispDt = inputDt.ToUniversalTime();
    dtString = dispDt.ToString(datePatt);
    Console.WriteLine("  ToUniversalTime: {0}, Kind = {1}",
                      dtString, dispDt.Kind);
    Console.WriteLine();
    }

// Display the value and Kind property for DateTime.Now and DateTime.UtcNow.

    public static void DisplayNow(string title, DateTime inputDt)
    {
    string dtString = inputDt.ToString(datePatt);
    Console.WriteLine("{0} {1}, Kind = {2}",
                      title, dtString, inputDt.Kind);
    }
}

/*
This code example produces the following results:

UtcNow: .......... 5/6/2005 09:34:42 PM, Kind = Utc
Now: ............. 5/6/2005 02:34:42 PM, Kind = Local

Utc: ............. 5/6/2005 02:34:42 PM, Kind = Utc
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 02:34:42 PM, Kind = Utc

Local: ........... 5/6/2005 02:34:42 PM, Kind = Local
  ToLocalTime:     5/6/2005 02:34:42 PM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

Unspecified: ..... 5/6/2005 02:34:42 PM, Kind = Unspecified
  ToLocalTime:     5/6/2005 07:34:42 AM, Kind = Local
  ToUniversalTime: 5/6/2005 09:34:42 PM, Kind = Utc

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
UtcNow
GetUtcOffset


DateTime ..::.Year 属性

DateTime
.
.
::
.
Year 属性
DateTime 结构

获取此实例所表示日期的年份部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Year As Integer
    Get
public int Year { get; }
public:
property int Year {
    int get ();
}
member Year : int

属性值

类型： System Int32
年份（介于 1 和 9999 之间）。

Year 属性返回当前实例的公历年份。它不使用当前区域性的默认日历返回年份。若要检索采用特定日历的年份，可以调用该日历的 GetYear 方法，如下面的代码所示。 Year 属性返回当前实例的公历年份。它不使用当前区域性的默认日历返回年份。若要检索采用特定日历的年份，可以调用该日历的 GetYear 方法，如下面的代码所示。 Year 属性返回当前实例的公历年份。它不使用当前区域性的默认日历返回年份。若要检索采用特定日历的年份，可以调用该日历的 GetYear 方法，如下面的代码所示。

Imports System.Globalization
Imports System.Threading

Module YearMethodExample
   Public Sub Main()
      ' Initialize date variable and display year
      Dim date1 As Date = #01/01/2008 6:32AM#
      Console.WriteLine(date1.Year)       ' Displays 2008

      ' Set culture to th-TH
      Thread.CurrentThread.CurrentCulture = New CultureInfo("th-TH")
      Console.WriteLine(date1.Year)        ' Displays 2008

      ' display year using current culture's calendar
      Dim thaiCalendar As Calendar = CultureInfo.CurrentCulture.Calendar
      Console.WriteLine(thaiCalendar.GetYear(date1))    ' Displays 2551

      ' display year using Persian calendar
      Dim persianCalendar As New PersianCalendar()
      Console.WriteLine(persianCalendar.GetYear(date1))  ' Displays 1386
   End Sub
End Module

using System;
using System.Globalization;
using System.Threading;

public class YearMethodExample
{
    public static void Main()
    {
      // Initialize date variable and display year
      DateTime date1 = new DateTime(2008, 1, 1, 6, 32, 0);
      Console.WriteLine(date1.Year);                    // Displays 2008

      // Set culture to th-TH
      Thread.CurrentThread.CurrentCulture = new CultureInfo("th-TH");
      Console.WriteLine(date1.Year);                    // Displays 2008

      // display year using current culture's calendar
      Calendar thaiCalendar = CultureInfo.CurrentCulture.Calendar;
      Console.WriteLine(thaiCalendar.GetYear(date1));   // Displays 2551

      // display year using Persian calendar
      PersianCalendar persianCalendar = new PersianCalendar();
      Console.WriteLine(persianCalendar.GetYear(date1)); // Displays 1386
   }
}

下面的代码示例演示 Year 属性。

Dim moment As New System.DateTime(1999, 1, 13, 3, 57, 32, 11)

' Year gets 1999.
Dim year As Integer = moment.Year

' Month gets 1 (January).
Dim month As Integer = moment.Month

' Day gets 13.
Dim day As Integer = moment.Day

' Hour gets 3.
Dim hour As Integer = moment.Hour

' Minute gets 57.
Dim minute As Integer = moment.Minute

' Second gets 32.
Dim second As Integer = moment.Second

' Millisecond gets 11.
Dim millisecond As Integer = moment.Millisecond

            System.DateTime moment = new System.DateTime(
                                            1999, 1, 13, 3, 57, 32, 11);
            // Year gets 1999.
            int year = moment.Year;

            // Month gets 1 (January).
            int month = moment.Month;

            // Day gets 13.
            int day = moment.Day;

            // Hour gets 3.
            int hour = moment.Hour;

            // Minute gets 57.
            int minute = moment.Minute;

            // Second gets 32.
            int second = moment.Second;

            // Millisecond gets 11.
            int millisecond = moment.Millisecond;

System::DateTime moment = System::DateTime(
   1999, 1, 13, 3, 57, 32, 11 );

// Year gets 1999.
int year = moment.Year;

// Month gets 1 (January).
int month = moment.Month;

// Day gets 13.
int day = moment.Day;

// Hour gets 3.
int hour = moment.Hour;

// Minute gets 57.
int minute = moment.Minute;

// Second gets 32.
int second = moment.Second;

// Millisecond gets 11.
int millisecond = moment.Millisecond;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DateTime 结构
DateTime 成员
System 命名空间
Int32
Calendar


DateTimeKind 枚举

DateTimeKind 枚举

指定 DateTime 对象是表示本地时间、协调通用时间 (UTC)，还是既不指定为本地时间，也不指定为 UTC。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration DateTimeKind
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum DateTimeKind
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class DateTimeKind
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type DateTimeKind
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Unspecified | 表示的时间既未指定为本地时间，也未指定为协调通用时间 (UTC)。
由 XNA Framework 提供支持 | Utc | 表示的时间为 UTC。
由 XNA Framework 提供支持 | Local | 表示的时间为本地时间。

DateTimeKind 枚举的成员由 DateTime..::.Kind 属性返回。

DateTimeKind 枚举的成员用于本地时间和协调通用时间 (UTC) 之间的转换操作，但不用于比较或算术运算。有关时间转换的更多信息，请参见 在不同时区之间转换时间。 DateTimeKind 枚举的成员用于本地时间和协调通用时间 (UTC) 之间的转换操作，但不用于比较或算术运算。有关时间转换的更多信息，请参见 在不同时区之间转换时间。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


DateTimeOffset 结构

DateTimeOffset 结构
成员

表示一个时间点，通常以相对于协调世界时 (UTC) 的日期和时间来表示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Structure DateTimeOffset _
    Implements IComparable, IFormattable, ISerializable, IDeserializationCallback,  _
    IComparable(Of DateTimeOffset), IEquatable(Of DateTimeOffset)
[SerializableAttribute]
public struct DateTimeOffset : IComparable,
    IFormattable, ISerializable, IDeserializationCallback, IComparable<DateTimeOffset>,
    IEquatable<DateTimeOffset>
[SerializableAttribute]
public value class DateTimeOffset : IComparable,
    IFormattable, ISerializable, IDeserializationCallback, IComparable<DateTimeOffset>,
    IEquatable<DateTimeOffset>
[<SealedAttribute>]
[<SerializableAttribute>]
type DateTimeOffset =
    struct
        interface IComparable
        interface IFormattable
        interface ISerializable
        interface IDeserializationCallback
        interface IComparable<DateTimeOffset>
        interface IEquatable<DateTimeOffset>
    end

DateTimeOffset 结构包括一个 DateTime 值以及一个 Offset 属性，该属性用于确定当前 DateTimeOffset 实例的日期和时间与协调世界时 (UTC) 之间的差值。因为 DateTimeOffset 结构确切地定义了相对于 UTC 的日期和时间，所以它不包括 Kind 成员，这一点与 DateTime 结构相同。它采用 UTC 范围在公元（基督纪元） 0001 年 1 月 1 日午夜 12:00:00 到公元 9999 年 12 月 31 日晚上 11:59:59 之间的值来表示日期和时间。（公元）。 DateTimeOffset 结构包括一个 DateTime 值以及一个 Offset 属性，该属性用于确定当前 DateTimeOffset 实例的日期和时间与协调世界时 (UTC) 之间的差值。因为 DateTimeOffset 结构确切地定义了相对于 UTC 的日期和时间，所以它不包括 Kind 成员，这一点与 DateTime 结构相同。它采用 UTC 范围在公元（基督纪元） 0001 年 1 月 1 日午夜 12:00:00 到公元 9999 年 12 月 31 日晚上 11:59:59 之间的值来表示日期和时间。（公元）。 DateTimeOffset 结构包括一个 DateTime 值以及一个 Offset 属性，该属性用于确定当前 DateTimeOffset 实例的日期和时间与协调世界时 (UTC) 之间的差值。因为 DateTimeOffset 结构确切地定义了相对于 UTC 的日期和时间，所以它不包括 Kind 成员，这一点与 DateTime 结构相同。它采用 UTC 范围在公元（基督纪元） 0001 年 1 月 1 日午夜 12:00:00 到公元 9999 年 12 月 31 日晚上 11:59:59 之间的值来表示日期和时间。（公元）。 DateTimeOffset 结构包括一个 DateTime 值以及一个 Offset 属性，该属性用于确定当前 DateTimeOffset 实例的日期和时间与协调世界时 (UTC) 之间的差值。因为 DateTimeOffset 结构确切地定义了相对于 UTC 的日期和时间，所以它不包括 Kind 成员，这一点与 DateTime 结构相同。它采用 UTC 范围在公元（基督纪元） 0001 年 1 月 1 日午夜 12:00:00 到公元 9999 年 12 月 31 日晚上 11:59:59 之间的值来表示日期和时间。（公元）。

DateTimeOffset 值的时间组件以 100 纳秒为单位（该单位称为计时周期）进行计量，而特定日期为自公元 0001 年 1 月 1 日午夜 12:00 始的计时周期数。间隔数（以 100 纳秒为一个间隔）自 GregorianCalendar 日历中公元 (C.E.) 0001 年 1 月 1 日午夜 12:00 以来的计时周期数。DateTimeOffset 值始终在显式或默认日历的上下文中表示。 DateTimeOffset 值的时间组件以 100 纳秒为单位（该单位称为计时周期）进行计量，而特定日期为自公元 0001 年 1 月 1 日午夜 12:00 始的计时周期数。间隔数（以 100 纳秒为一个间隔）自 GregorianCalendar 日历中公元 (C.E.) 0001 年 1 月 1 日午夜 12:00 以来的计时周期数。DateTimeOffset 值始终在显式或默认日历的上下文中表示。 DateTimeOffset 值的时间组件以 100 纳秒为单位（该单位称为计时周期）进行计量，而特定日期为自公元 0001 年 1 月 1 日午夜 12:00 始的计时周期数。间隔数（以 100 纳秒为一个间隔）自 GregorianCalendar 日历中公元 (C.E.) 0001 年 1 月 1 日午夜 12:00 以来的计时周期数。DateTimeOffset 值始终在显式或默认日历的上下文中表示。

说明 说明

如果您正在处理一个您想要将转换为其他时间间隔（如分钟或秒）的计时周期值，您应该使用 TimeSpan..::.TicksPerDay、 TimeSpan..::.TicksPerHour、 TimeSpan..::.TicksPerMinute、 TimeSpan..::.TicksPerSecond，或 TimeSpan..::.TicksPerMillisecond 常量来执行转换。例如，要向 DateTimeOffset 值的 Second 组件添加由特定数目的时间间隔表示的秒数，您可以使用表达式 dateValue.Second + nTicks/Timespan.TicksPerSecond。 如果您正在处理一个您想要将转换为其他时间间隔（如分钟或秒）的计时周期值，您应该使用 TimeSpan..::.TicksPerDay、 TimeSpan..::.TicksPerHour、 TimeSpan..::.TicksPerMinute、 TimeSpan..::.TicksPerSecond，或 TimeSpan..::.TicksPerMillisecond 常量来执行转换。例如，要向 DateTimeOffset 值的 Second 组件添加由特定数目的时间间隔表示的秒数，您可以使用表达式 dateValue.Second + nTicks/Timespan.TicksPerSecond。

虽然 DateTimeOffset 值包括一个偏移量，但它不是一个具有完全时区识别能力的数据结构。虽然与 UTC 之间的偏移量是时区的一个特征，但它没有清楚地确定时区。多个时区可以具有相同的与 UTC 之间的偏移量，不仅如此，而且如果某一个时区采用夏令时，则该时区的偏移量将会发生变化。也就是说，DateTimeOffset 值一与其时区失去关联，就无法再明确地重新与其原始时区发生关联。 虽然 DateTimeOffset 值包括一个偏移量，但它不是一个具有完全时区识别能力的数据结构。虽然与 UTC 之间的偏移量是时区的一个特征，但它没有清楚地确定时区。多个时区可以具有相同的与 UTC 之间的偏移量，不仅如此，而且如果某一个时区采用夏令时，则该时区的偏移量将会发生变化。也就是说，DateTimeOffset 值一与其时区失去关联，就无法再明确地重新与其原始时区发生关联。 虽然 DateTimeOffset 值包括一个偏移量，但它不是一个具有完全时区识别能力的数据结构。虽然与 UTC 之间的偏移量是时区的一个特征，但它没有清楚地确定时区。多个时区可以具有相同的与 UTC 之间的偏移量，不仅如此，而且如果某一个时区采用夏令时，则该时区的偏移量将会发生变化。也就是说，DateTimeOffset 值一与其时区失去关联，就无法再明确地重新与其原始时区发生关联。 虽然 DateTimeOffset 值包括一个偏移量，但它不是一个具有完全时区识别能力的数据结构。虽然与 UTC 之间的偏移量是时区的一个特征，但它没有清楚地确定时区。多个时区可以具有相同的与 UTC 之间的偏移量，不仅如此，而且如果某一个时区采用夏令时，则该时区的偏移量将会发生变化。也就是说，DateTimeOffset 值一与其时区失去关联，就无法再明确地重新与其原始时区发生关联。

因为 DateTimeOffset 是一种结构，所以已经声明但未另外进行初始化的 DateTimeOffset 对象包含其每个成员字段的默认值。也就是说，其 DateTime 属性被设置为 DateTimeOffset..::.MinValue，其 Offset 被设置为 TimeSpan..::.Zero。 因为 DateTimeOffset 是一种结构，所以已经声明但未另外进行初始化的 DateTimeOffset 对象包含其每个成员字段的默认值。也就是说，其 DateTime 属性被设置为 DateTimeOffset..::.MinValue，其 Offset 被设置为 TimeSpan..::.Zero。

您可以创建一个新的 DateTimeOffset 值，方法是调用其构造函数的任何重载（与 DateTime 结构的重载构造函数相类似）。还可以通过为其分配一个 DateTime 值来创建一个新的 DateTimeOffset 值。这是一个隐式转换；它不需要强制转换运算符（在 C# 中）或对转换方法的调用（在 Visual Basic 中）。您也可以从日期和时间的字符串表示形式中初始化 DateTimeOffset 值，方法是调用一些静态字符串分析方法，其中包括 Parse、ParseExact、TryParse 和 TryParseExact。 您可以创建一个新的 DateTimeOffset 值，方法是调用其构造函数的任何重载（与 DateTime 结构的重载构造函数相类似）。还可以通过为其分配一个 DateTime 值来创建一个新的 DateTimeOffset 值。这是一个隐式转换；它不需要强制转换运算符（在 C# 中）或对转换方法的调用（在 Visual Basic 中）。您也可以从日期和时间的字符串表示形式中初始化 DateTimeOffset 值，方法是调用一些静态字符串分析方法，其中包括 Parse、ParseExact、TryParse 和 TryParseExact。 您可以创建一个新的 DateTimeOffset 值，方法是调用其构造函数的任何重载（与 DateTime 结构的重载构造函数相类似）。还可以通过为其分配一个 DateTime 值来创建一个新的 DateTimeOffset 值。这是一个隐式转换；它不需要强制转换运算符（在 C# 中）或对转换方法的调用（在 Visual Basic 中）。您也可以从日期和时间的字符串表示形式中初始化 DateTimeOffset 值，方法是调用一些静态字符串分析方法，其中包括 Parse、ParseExact、TryParse 和 TryParseExact。 您可以创建一个新的 DateTimeOffset 值，方法是调用其构造函数的任何重载（与 DateTime 结构的重载构造函数相类似）。还可以通过为其分配一个 DateTime 值来创建一个新的 DateTimeOffset 值。这是一个隐式转换；它不需要强制转换运算符（在 C# 中）或对转换方法的调用（在 Visual Basic 中）。您也可以从日期和时间的字符串表示形式中初始化 DateTimeOffset 值，方法是调用一些静态字符串分析方法，其中包括 Parse、ParseExact、TryParse 和 TryParseExact。

DateTimeOffset 结构的成员提供以下方面的功能：

  • 日期和时间算术。

    可以加上或减去特定 DateTimeOffset 值中的日期或时间间隔。DateTimeOffset 值的算术运算与 DateTime 值的算术运算不同，前者在返回结果时将针对时间偏移量差异进行相应调整。例如，下面的代码使用 DateTime 变量从当前的 UTC 时间中减去当前的本地时间。然后，该代码使用 DateTimeOffset 变量执行相同的操作。用 DateTime 值进行减法运算将返回本地时区与 UTC 之间的差值，而用 DateTimeOffset 值进行减法运算将返回 TimeSpan..::.Zero。 可以加上或减去特定 DateTimeOffset 值中的日期或时间间隔。DateTimeOffset 值的算术运算与 DateTime 值的算术运算不同，前者在返回结果时将针对时间偏移量差异进行相应调整。例如，下面的代码使用 DateTime 变量从当前的 UTC 时间中减去当前的本地时间。然后，该代码使用 DateTimeOffset 变量执行相同的操作。用 DateTime 值进行减法运算将返回本地时区与 UTC 之间的差值，而用 DateTimeOffset 值进行减法运算将返回 TimeSpan..::.Zero。 可以加上或减去特定 DateTimeOffset 值中的日期或时间间隔。DateTimeOffset 值的算术运算与 DateTime 值的算术运算不同，前者在返回结果时将针对时间偏移量差异进行相应调整。例如，下面的代码使用 DateTime 变量从当前的 UTC 时间中减去当前的本地时间。然后，该代码使用 DateTimeOffset 变量执行相同的操作。用 DateTime 值进行减法运算将返回本地时区与 UTC 之间的差值，而用 DateTimeOffset 值进行减法运算将返回 TimeSpan..::.Zero。 可以加上或减去特定 DateTimeOffset 值中的日期或时间间隔。DateTimeOffset 值的算术运算与 DateTime 值的算术运算不同，前者在返回结果时将针对时间偏移量差异进行相应调整。例如，下面的代码使用 DateTime 变量从当前的 UTC 时间中减去当前的本地时间。然后，该代码使用 DateTimeOffset 变量执行相同的操作。用 DateTime 值进行减法运算将返回本地时区与 UTC 之间的差值，而用 DateTimeOffset 值进行减法运算将返回 TimeSpan..::.Zero。 可以加上或减去特定 DateTimeOffset 值中的日期或时间间隔。DateTimeOffset 值的算术运算与 DateTime 值的算术运算不同，前者在返回结果时将针对时间偏移量差异进行相应调整。例如，下面的代码使用 DateTime 变量从当前的 UTC 时间中减去当前的本地时间。然后，该代码使用 DateTimeOffset 变量执行相同的操作。用 DateTime 值进行减法运算将返回本地时区与 UTC 之间的差值，而用 DateTimeOffset 值进行减法运算将返回 TimeSpan..::.Zero。

    Module DateArithmetic
   Public Sub Main()
      Dim date1, date2 As Date
      Dim dateOffset1, dateOffset2 As DateTimeOffset
      Dim difference As TimeSpan

      ' Find difference between Date.Now and Date.UtcNow
      date1 = Date.Now
      date2 = Date.UtcNow
      difference = date1 - date2
      Console.WriteLine("{0} - {1} = {2}", date1, date2, difference)

      ' Find difference between Now and UtcNow using DateTimeOffset
      dateOffset1 = date.Now
      dateOffset2 = date.UtcNow
      difference = dateOffset1 - dateOffset2
      Console.WriteLine("{0} - {1} = {2}", _
                        dateOffset1, dateOffset2, difference)
      ' If run in the Pacific Standard time zone on 4/2/2007, the example
      ' displays the following output to the console:
      '    4/2/2007 7:23:57 PM - 4/3/2007 2:23:57 AM = -07:00:00
      '    4/2/2007 7:23:57 PM -07:00 - 4/3/2007 2:23:57 AM +00:00 = 00:00:00
   End Sub
End Module

    using System;

public class DateArithmetic
{
   public static void Main()
   {
      DateTime date1, date2;
      DateTimeOffset dateOffset1, dateOffset2;
      TimeSpan difference;

      // Find difference between Date.Now and Date.UtcNow
      date1 = DateTime.Now;
      date2 = DateTime.UtcNow;
      difference = date1 - date2;
      Console.WriteLine("{0} - {1} = {2}", date1, date2, difference);

      // Find difference between Now and UtcNow using DateTimeOffset
      dateOffset1 = DateTimeOffset.Now;
      dateOffset2 = DateTimeOffset.UtcNow;
      difference = dateOffset1 - dateOffset2;
      Console.WriteLine("{0} - {1} = {2}",
                        dateOffset1, dateOffset2, difference);
      // If run in the Pacific Standard time zone on 4/2/2007, the example
      // displays the following output to the console:
      //    4/2/2007 7:23:57 PM - 4/3/2007 2:23:57 AM = -07:00:00
      //    4/2/2007 7:23:57 PM -07:00 - 4/3/2007 2:23:57 AM +00:00 = 00:00:00
   }
}

  • 类型转换操作。

    可以将 DateTimeOffset 值转换为 DateTime 值，反之亦然。

  • 时间处理和提取操作。

    您可以提取 DateTimeOffset 值的日期或时间。也可以检索特定的 DateTimeOffset 组成部分的值，例如其年份或月份。 您可以提取 DateTimeOffset 值的日期或时间。也可以检索特定的 DateTimeOffset 组成部分的值，例如其年份或月份。

  • 日期和时间转换。

    您可以将任何 DateTimeOffset 值转换为表示另一时区中相同时间点的另一个 DateTimeOffset 值。但是，时区的调整规则只适用于采用 ToLocalTime 方法的情况，该方法可以将 DateTimeOffset 值转换为本地系统时区中的日期和时间。 您可以将任何 DateTimeOffset 值转换为表示另一时区中相同时间点的另一个 DateTimeOffset 值。但是，时区的调整规则只适用于采用 ToLocalTime 方法的情况，该方法可以将 DateTimeOffset 值转换为本地系统时区中的日期和时间。

  • 日期和时间比较。

    您可以确定任何特定的 DateTimeOffset 值是早于、等于还是晚于另一个 DateTimeOffset 值。在执行比较之前，所有值都将转换为 UTC。 您可以确定任何特定的 DateTimeOffset 值是早于、等于还是晚于另一个 DateTimeOffset 值。在执行比较之前，所有值都将转换为 UTC。

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 成员
System 命名空间

其他资源

在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择


DateTimeOffset 成员

DateTimeOffset 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

表示一个时间点，通常以相对于协调世界时 (UTC) 的日期和时间来表示。

DateTimeOffset 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DateTimeOffset 结构
System 命名空间


DateTimeOffset 构造函数

DateTimeOffset 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

初始化 DateTimeOffset 结构的新实例。

名称 说明
页首

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset 构造函数 (DateTime)

DateTimeOffset 构造函数 (DateTime)
DateTimeOffset 结构

使用指定的 DateTime 值初始化 DateTimeOffset 结构的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    dateTime As DateTime _
)
public DateTimeOffset(
    DateTime dateTime
)
public:
DateTimeOffset(
    DateTime dateTime
)
new :
        dateTime:DateTime -> DateTimeOffset

参数

dateTime
类型： System DateTime
日期和时间。
异常 | 条件
ArgumentOutOfRangeException | 通过应用偏移量所产生的协调世界时 (UTC) 的日期和时间早于 MinValue。 - 或 - 通过应用偏移量所产生的 UTC 日期和时间晚于 MaxValue。

此构造函数的行为取决于 dateTime 参数的 DateTime..::.Kind 属性值：

  • 如果 DateTime..::.Kind 的值为 DateTimeKind..::.Utc，则新实例的 DateTime 属性被设置为 dateTime，Offset 属性被设置为 Zero。

  • 如果 DateTime..::.Kind 的值为 DateTimeKind..::.Local 或 DateTimeKind..::.Unspecified，则新实例的 DateTime 属性被设置为 dateTime，Offset 属性被设置为本地系统当前时区的偏移量。

下面的示例演示 dateTime 参数的 DateTime..::.Kind 属性值对此构造函数返回的日期和时间值有何影响。

Dim localNow As Date = Date.Now
Dim localOffset As New DateTimeOffset(localNow)
Console.WriteLine(localOffset.ToString())

Dim utcNow As Date = Date.UtcNow
Dim utcOffset As New DateTimeOffset(utcNow)
Console.WriteLine(utcOffset.ToString())

Dim unspecifiedNow As Date = Date.SpecifyKind(Date.Now, _
                                  DateTimeKind.Unspecified)
Dim unspecifiedOffset As New DateTimeOffset(unspecifiedNow)
Console.WriteLine(unspecifiedOffset.ToString())
'
' The code produces the following output if run on Feb. 23, 2007, on
' a system 8 hours earlier than UTC:
'    2/23/2007 4:21:58 PM -08:00
'    2/24/2007 12:21:58 AM +00:00
'    2/23/2007 4:21:58 PM -08:00

DateTime localNow = DateTime.Now;
DateTimeOffset localOffset = new DateTimeOffset(localNow);
Console.WriteLine(localOffset.ToString());

DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcOffset = new DateTimeOffset(utcNow);
Console.WriteLine(utcOffset.ToString());

DateTime unspecifiedNow = DateTime.SpecifyKind(DateTime.Now,
                               DateTimeKind.Unspecified);
DateTimeOffset unspecifiedOffset = new DateTimeOffset(unspecifiedNow);
Console.WriteLine(unspecifiedOffset.ToString());
//
// The code produces the following output if run on Feb. 23, 2007, on
// a system 8 hours earlier than UTC:
//   2/23/2007 4:21:58 PM -08:00
//   2/24/2007 12:21:58 AM +00:00
//   2/23/2007 4:21:58 PM -08:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
DateTimeOffset 重载
System 命名空间

其他资源

实例化 DateTimeOffset 对象


DateTimeOffset 构造函数 (DateTime, TimeSpan)

DateTimeOffset 构造函数 (DateTime, TimeSpan)
DateTimeOffset 结构

使用指定的 DateTime 值和偏移量初始化 DateTimeOffset 结构的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    dateTime As DateTime, _
    offset As TimeSpan _
)
public DateTimeOffset(
    DateTime dateTime,
    TimeSpan offset
)
public:
DateTimeOffset(
    DateTime dateTime,
    TimeSpan offset
)
new :
        dateTime:DateTime *
        offset:TimeSpan -> DateTimeOffset

参数

dateTime
类型： System DateTime
日期和时间。
offset
类型： System TimeSpan
与协调世界时 (UTC) 之间的时间偏移量。
异常 | 条件
ArgumentException | dateTime.Kind 等于 Utc，offset 不等于零。 - 或 - dateTime.Kind 等于 Local，offset 不等于系统的本地时区的偏移量。 - 或 - 未采用整分钟数指定 offset。
ArgumentOutOfRangeException | offset 小于 -14 小时或大于 14 小时。 - 或 - UtcDateTime 小于 MinValue 或大于 MaxValue。

此构造函数的行为在某种程度上取决于 dateTime 参数的 Kind 属性值：

  • 如果 Kind 的值为 DateTimeKind..::.Utc，则 offset 参数的值必须为 0，否则将引发 ArgumentException。

  • 如果 Kind 的值为 DateTimeKind..::.Local，则 offset 参数的值必须等于该特定日期的本地时区与协调世界时 (UTC) 之间的偏移量，否则将引发 ArgumentException。

  • 如果 Kind 的值为 DateTimeKind..::.Unspecified，则 offset 参数可以具有任何有效值。

下面的示例演示如何在未事先知道本地时区的情况下使用日期和时间以及该时区的偏移量来初始化 DateTimeOffset 对象。

Dim localTime As Date = #07/12/2007 6:32AM#
Dim dateAndOffset As New DateTimeOffset(localTime, _
                         TimeZoneInfo.Local.GetUtcOffset(localTime))
Console.WriteLine(dateAndOffset)
' The code produces the following output:
'    7/12/2007 6:32:00 AM -07:00

DateTime localTime = new DateTime(2007, 07, 12, 06, 32, 00);
DateTimeOffset dateAndOffset = new DateTimeOffset(localTime,
                         TimeZoneInfo.Local.GetUtcOffset(localTime));
Console.WriteLine(dateAndOffset);
// The code produces the following output:
//    7/12/2007 6:32:00 AM -07:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
DateTimeOffset 重载
System 命名空间

其他资源

实例化 DateTimeOffset 对象


DateTimeOffset 构造函数 (Int64, TimeSpan)

DateTimeOffset 构造函数 (Int64, TimeSpan)
DateTimeOffset 结构

使用指定的计时周期数和偏移量初始化 DateTimeOffset 结构的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    ticks As Long, _
    offset As TimeSpan _
)
public DateTimeOffset(
    long ticks,
    TimeSpan offset
)
public:
DateTimeOffset(
    long long ticks,
    TimeSpan offset
)
new :
        ticks:int64 *
        offset:TimeSpan -> DateTimeOffset

参数

ticks
类型： System Int64
一个日期和时间，以 0001 年 1 月 1 日午夜 12:00:00 以来所经历的以 100 纳秒为间隔的间隔数来表示。
offset
类型： System TimeSpan
与协调世界时 (UTC) 之间的时间偏移量。
异常 | 条件
ArgumentException | 未采用整分钟数指定 offset。
ArgumentOutOfRangeException | UtcDateTime 属性早于 MinValue 或晚于 MaxValue。 - 或 - ticks 小于 DateTimeOffset.MinValue.Ticks 或大于 DateTimeOffset.MaxValue.Ticks。 - 或 - Offset 小于 -14 小时或大于 14 小时。

通常，如果尝试调用 DateTimeOffset 构造函数以使用本地时间和非本地时区偏移量来实例化 DateTimeOffset 值，则会引发 ArgumentException。可以使用 DateTimeOffset 构造函数的此重载来解决此限制。下面的示例使用本地时间的计时周期数来实例化 DateTimeOffset 值，而此值的偏移量未必表示该本地时间的偏移量： 通常，如果尝试调用 DateTimeOffset 构造函数以使用本地时间和非本地时区偏移量来实例化 DateTimeOffset 值，则会引发 ArgumentException。可以使用 DateTimeOffset 构造函数的此重载来解决此限制。下面的示例使用本地时间的计时周期数来实例化 DateTimeOffset 值，而此值的偏移量未必表示该本地时间的偏移量： 通常，如果尝试调用 DateTimeOffset 构造函数以使用本地时间和非本地时区偏移量来实例化 DateTimeOffset 值，则会引发 ArgumentException。可以使用 DateTimeOffset 构造函数的此重载来解决此限制。下面的示例使用本地时间的计时周期数来实例化 DateTimeOffset 值，而此值的偏移量未必表示该本地时间的偏移量：

Dim localTime As Date = Date.Now
Dim nonLocalDateWithOffset As New DateTimeOffset(localTime.Ticks, _
                                  New TimeSpan(2, 0, 0))
Console.WriteLine(nonLocalDateWithOffset)
'
' The code produces the following output if run on Feb. 23, 2007:
'    2/23/2007 4:37:50 PM +02:00

DateTime localTime = DateTime.Now;
DateTimeOffset nonLocalDateWithOffset = new DateTimeOffset(localTime.Ticks,
                                  new TimeSpan(2, 0, 0));
Console.WriteLine(nonLocalDateWithOffset);
//
// The code produces the following output if run on Feb. 23, 2007:
//    2/23/2007 4:37:50 PM +02:00

下面的示例使用任意日期（在本例中为 2007 年 7 月 16 日下午 1:32）中的计时周期数以及偏移量 -5 来初始化 DateTimeOffset 对象。

Dim dateWithoutOffset As Date = #07/16/2007 1:32PM#
Dim timeFromTicks As New DateTimeOffset(datewithoutOffset.Ticks, _
                         New TimeSpan(-5, 0, 0))
Console.WriteLine(timeFromTicks.ToString())
' The code produces the following output:
'    7/16/2007 1:32:00 PM -05:00

DateTime dateWithoutOffset = new DateTime(2007, 7, 16, 13, 32, 00);
DateTimeOffset timeFromTicks = new DateTimeOffset(dateWithoutOffset.Ticks,
                               new TimeSpan(-5, 0, 0));
Console.WriteLine(timeFromTicks.ToString());
// The code produces the following output:
//    7/16/2007 1:32:00 PM -05:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
DateTimeOffset 重载
System 命名空间

其他资源

实例化 DateTimeOffset 对象


DateTimeOffset 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, TimeSpan)

DateTimeOffset 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, TimeSpan)
DateTimeOffset 结构

使用指定的年、月、日、小时、分钟、秒和偏移量初始化 DateTimeOffset 结构的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer, _
    offset As TimeSpan _
)
public DateTimeOffset(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    TimeSpan offset
)
public:
DateTimeOffset(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    TimeSpan offset
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int *
        offset:TimeSpan -> DateTimeOffset

参数

year
类型： System Int32
年（1 到 9999）。
month
类型： System Int32
月（1 到 12）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
offset
类型： System TimeSpan
与协调世界时 (UTC) 之间的时间偏移量。
异常 | 条件
ArgumentException | offset 并不表示整分钟数。
ArgumentOutOfRangeException | year 小于 1 或大于 9999。 - 或 - month 小于 1 或大于 12。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于零或大于 23。 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。 - 或 - offset 小于 -14 小时或大于 14 小时。 - 或 - UtcDateTime 属性早于 DateTimeOffset..::.MinValue 或晚于 DateTimeOffset..::.MaxValue。

此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTimeOffset 值，请调用 DateTimeOffset(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, TimeSpan) 构造函数。 此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTimeOffset 值，请调用 DateTimeOffset(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, TimeSpan) 构造函数。

下面的示例使用 DateTimeOffset..::.DateTimeOffset(Int32, Int32, Int32, Int32, Int32, Int32, TimeSpan) 构造函数重载实例化 DateTimeOffset 对象。

   Dim specificDate As Date = #5/1/2008 6:32AM#
   Dim offsetDate As New DateTimeOffset(specificDate.Year, _
                                        specificDate.Month, _
                                        specificDate.Day, _
                                        specificDate.Hour, _
                                        specificDate.Minute, _
                                        specificDate.Second, _
                                        New TimeSpan(-5, 0, 0))
   Console.WriteLine("Current time: {0}", offsetDate)
   Console.WriteLine("Corresponding UTC time: {0}", offsetDate.UtcDateTime)
' The code produces the following output:
'    Current time: 5/1/2008 6:32:00 AM -05:00
'    Corresponding UTC time: 5/1/2008 11:32:00 AM

   DateTime specificDate = new DateTime(2008, 5, 1, 06, 32, 00);
   DateTimeOffset offsetDate = new DateTimeOffset(specificDate.Year,
                                   specificDate.Month,
                                   specificDate.Day,
                                   specificDate.Hour,
                                   specificDate.Minute,
                                   specificDate.Second,
                                   new TimeSpan(-5, 0, 0));
   Console.WriteLine("Current time: {0}", offsetDate);
   Console.WriteLine("Corresponding UTC time: {0}", offsetDate.UtcDateTime);
// The code produces the following output:
//    Current time: 5/1/2008 6:32:00 AM -05:00
//    Corresponding UTC time: 5/1/2008 11:32:00 AM

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
DateTimeOffset 重载
System 命名空间

其他资源

实例化 DateTimeOffset 对象


DateTimeOffset 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, TimeSpan)

DateTimeOffset 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, TimeSpan)
DateTimeOffset 结构

使用指定的年、月、日、小时、分钟、秒、毫秒和偏移量初始化 DateTimeOffset 结构的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer, _
    millisecond As Integer, _
    offset As TimeSpan _
)
public DateTimeOffset(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    TimeSpan offset
)
public:
DateTimeOffset(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    TimeSpan offset
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int *
        millisecond:int *
        offset:TimeSpan -> DateTimeOffset

参数

year
类型： System Int32
年（1 到 9999）。
month
类型： System Int32
月（1 到 12）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
millisecond
类型： System Int32
毫秒（0 到 999）。
offset
类型： System TimeSpan
与协调世界时 (UTC) 之间的时间偏移量。
异常 | 条件
ArgumentException | offset 并不表示整分钟数。
ArgumentOutOfRangeException | year 小于 1 或大于 9999。 - 或 - month 小于 1 或大于 12。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于零或大于 23。 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。 - 或 - millisecond 小于 0 或大于 999。 - 或 - offset 小于 -14 或大于 14。 - 或 - UtcDateTime 属性早于 MinValue 或晚于 MaxValue。

此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTimeOffset 值，请调用 DateTimeOffset(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, TimeSpan) 构造函数。 此构造函数将 year、month 和 day 解释为公历中的年、月和日。若要使用其他日历中的年、月和日实例化 DateTimeOffset 值，请调用 DateTimeOffset(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, TimeSpan) 构造函数。

下面的示例使用 DateTimeOffset..::.DateTimeOffset(Int32, Int32, Int32, Int32, Int32, Int32, Int32, TimeSpan) 构造函数重载实例化 DateTimeOffset 对象。

Dim fmt As String = "dd MMM yyyy HH:mm:ss"
Dim thisDate As DateTime = New Date(2007, 06, 12, 19, 00, 14, 16)
Dim offsetDate As New DateTimeOffset(thisDate.Year, _
                                     thisDate.Month, _
                                     thisDate.Day, _
                                     thisDate.Hour, _
                                     thisDate.Minute, _
                                     thisDate.Second, _
                                     thisDate.Millisecond, _
                                     New TimeSpan(2, 0, 0))
Console.WriteLine("Current time: {0}:{1}", offsetDate.ToString(fmt), _
                                           offsetDate.Millisecond)
' The code produces the following output:
'    Current time: 12 Jun 2007 19:00:14:16

string fmt = "dd MMM yyyy HH:mm:ss";
DateTime thisDate = new DateTime(2007, 06, 12, 19, 00, 14, 16);
DateTimeOffset offsetDate = new DateTimeOffset(thisDate.Year,
                                               thisDate.Month,
                                               thisDate.Day,
                                               thisDate.Hour,
                                               thisDate.Minute,
                                               thisDate.Second,
                                               thisDate.Millisecond,
                                               new TimeSpan(2, 0, 0));
Console.WriteLine("Current time: {0}:{1}", offsetDate.ToString(fmt), offsetDate.Millisecond);
// The code produces the following output:
//    Current time: 12 Jun 2007 19:00:14:16

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
DateTimeOffset 重载
System 命名空间

其他资源

实例化 DateTimeOffset 对象


DateTimeOffset 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, TimeSpan)

DateTimeOffset 构造函数 (Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, TimeSpan)
DateTimeOffset 结构

用指定日历的指定年、月、日、小时、分钟、秒、毫秒和偏移量初始化 DateTimeOffset 结构的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    year As Integer, _
    month As Integer, _
    day As Integer, _
    hour As Integer, _
    minute As Integer, _
    second As Integer, _
    millisecond As Integer, _
    calendar As Calendar, _
    offset As TimeSpan _
)
public DateTimeOffset(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    Calendar calendar,
    TimeSpan offset
)
public:
DateTimeOffset(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second,
    int millisecond,
    Calendar^ calendar,
    TimeSpan offset
)
new :
        year:int *
        month:int *
        day:int *
        hour:int *
        minute:int *
        second:int *
        millisecond:int *
        calendar:Calendar *
        offset:TimeSpan -> DateTimeOffset

参数

year
类型： System Int32
年。
month
类型： System Int32
月（1 到 12）。
day
类型： System Int32
日（1 到 month 中的天数）。
hour
类型： System Int32
小时（0 到 23）。
minute
类型： System Int32
分（0 到 59）。
second
类型： System Int32
秒（0 到 59）。
millisecond
类型： System Int32
毫秒（0 到 999）。
calendar
类型： System.Globalization Calendar
用于解释 year、month 和 day 的日历。
offset
类型： System TimeSpan
与协调世界时 (UTC) 之间的时间偏移量。
异常 | 条件
ArgumentException | offset 并不表示整分钟数。
ArgumentNullException | calendar 不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | year 小于 calendar 参数的 MinSupportedDateTime.Year 或大于 MaxSupportedDateTime.Year。 - 或 - month 小于或大于 calendar 中 year 的月份数。 - 或 - day 小于 1 或大于 month 中的天数。 - 或 - hour 小于零或大于 23。 - 或 - minute 小于 0 或大于 59。 - 或 - second 小于 0 或大于 59。 - 或 - millisecond 小于 0 或大于 999。 - 或 - offset 小于 -14 小时或大于 14 小时。 - 或 - year、month 和 day 参数不能表示为日期和时间值。 - 或 - UtcDateTime 属性早于 DateTimeOffset..::.MinValue 或晚于 DateTimeOffset..::.MaxValue。

year、month、day、hour、minute、second 和 millisecond 参数整体反映了以 calendar 参数指定的日历表示的值。如果无法用此日历表示这些值所形成的日期和时间，则将引发异常。 year、month、day、hour、minute、second 和 millisecond 参数整体反映了以 calendar 参数指定的日历表示的值。如果无法用此日历表示这些值所形成的日期和时间，则将引发异常。

下面的示例使用 HebrewCalendar 类和 HijriCalendar 类的实例来实例化 DateTimeOffset 值。然后使用各自的日历和公历将该日期显示到控制台上。 下面的示例使用 HebrewCalendar 类和 HijriCalendar 类的实例来实例化 DateTimeOffset 值。然后使用各自的日历和公历将该日期显示到控制台上。

Dim fmt As CultureInfo
Dim year As Integer
Dim cal As Calendar
Dim dateInCal As DateTimeOffset

' Instantiate DateTimeOffset with Hebrew calendar
year = 5770
cal = New HebrewCalendar()
fmt = New CultureInfo("he-IL")
fmt.DateTimeFormat.Calendar = cal
dateInCal = New DateTimeOffset(year, 7, 12, _
                               15, 30, 0, 0, _
                               cal, _
                               New TimeSpan(2, 0, 0))
' Display the date in the Hebrew calendar
Console.WriteLine("Date in Hebrew Calendar: {0:g}", _
                   dateInCal.ToString(fmt))
' Display the date in the Gregorian calendar
Console.WriteLine("Date in Gregorian Calendar: {0:g}", dateInCal)
Console.WriteLine()

' Instantiate DateTimeOffset with Hijri calendar
year = 1431
cal = New HijriCalendar()
fmt = New CultureInfo("ar-SA")
fmt.DateTimeFormat.Calendar = cal
dateInCal = New DateTimeOffset(year, 7, 12, _
                               15, 30, 0, 0, _
                               cal, _
                               New TimeSpan(2, 0, 0))
' Display the date in the Hijri calendar
Console.WriteLine("Date in Hijri Calendar: {0:g}", _
                   dateInCal.ToString(fmt))
' Display the date in the Gregorian calendar
Console.WriteLine("Date in Gregorian Calendar: {0:g}", dateInCal)
Console.WriteLine()

CultureInfo fmt;
int year;
Calendar cal;
DateTimeOffset dateInCal;

// Instantiate DateTimeOffset with Hebrew calendar
year = 5770;
cal = new HebrewCalendar();
fmt = new CultureInfo("he-IL");
fmt.DateTimeFormat.Calendar = cal;
dateInCal = new DateTimeOffset(year, 7, 12,
                               15, 30, 0, 0,
                               cal,
                               new TimeSpan(2, 0, 0));
// Display the date in the Hebrew calendar
Console.WriteLine("Date in Hebrew Calendar: {0:g}",
                   dateInCal.ToString(fmt));
// Display the date in the Gregorian calendar
Console.WriteLine("Date in Gregorian Calendar: {0:g}", dateInCal);
Console.WriteLine();

// Instantiate DateTimeOffset with Hijri calendar
year = 1431;
cal = new HijriCalendar();
fmt = new CultureInfo("ar-SA");
fmt.DateTimeFormat.Calendar = cal;
dateInCal = new DateTimeOffset(year, 7, 12,
                               15, 30, 0, 0,
                               cal,
                               new TimeSpan(2, 0, 0));
// Display the date in the Hijri calendar
Console.WriteLine("Date in Hijri Calendar: {0:g}",
                   dateInCal.ToString(fmt));
// Display the date in the Gregorian calendar
Console.WriteLine("Date in Gregorian Calendar: {0:g}", dateInCal);
Console.WriteLine();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
DateTimeOffset 重载
System 命名空间

其他资源

实例化 DateTimeOffset 对象


DateTimeOffset 字段

DateTimeOffset 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

DateTimeOffset 类型公开以下成员。

名称 说明
页首

参考

DateTimeOffset 结构
System 命名空间


DateTimeOffset ..::.MaxValue 字段

DateTimeOffset
.
.
::
.
MaxValue 字段
DateTimeOffset 结构

表示 DateTimeOffset 的最大可能值。此字段为只读。 表示 DateTimeOffset 的最大可能值。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly MaxValue As DateTimeOffset
public static readonly DateTimeOffset MaxValue
public:
static initonly DateTimeOffset MaxValue
static val MaxValue: DateTimeOffset
异常 | 条件
ArgumentOutOfRangeException | MaxValue 位于当前或指定区域性的默认日历的范围之外。

此常量的值为 12/31/9999 11:59:59 PM +00:00。

MaxValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或早于此最大范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会将其与 MaxValue 进行比较。也就是说，其日期和时间接近最大范围但偏移量为负的 DateTimeOffset 值可能会引发异常。例如，值 12/31/9999 11:00 PM -02:00 不在范围内，因为当它转换为 UTC 后，它比 MaxValue 晚一个小时。 MaxValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或早于此最大范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会将其与 MaxValue 进行比较。也就是说，其日期和时间接近最大范围但偏移量为负的 DateTimeOffset 值可能会引发异常。例如，值 12/31/9999 11:00 PM -02:00 不在范围内，因为当它转换为 UTC 后，它比 MaxValue 晚一个小时。 MaxValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或早于此最大范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会将其与 MaxValue 进行比较。也就是说，其日期和时间接近最大范围但偏移量为负的 DateTimeOffset 值可能会引发异常。例如，值 12/31/9999 11:00 PM -02:00 不在范围内，因为当它转换为 UTC 后，它比 MaxValue 晚一个小时。 MaxValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或早于此最大范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会将其与 MaxValue 进行比较。也就是说，其日期和时间接近最大范围但偏移量为负的 DateTimeOffset 值可能会引发异常。例如，值 12/31/9999 11:00 PM -02:00 不在范围内，因为当它转换为 UTC 后，它比 MaxValue 晚一个小时。 MaxValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或早于此最大范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会将其与 MaxValue 进行比较。也就是说，其日期和时间接近最大范围但偏移量为负的 DateTimeOffset 值可能会引发异常。例如，值 12/31/9999 11:00 PM -02:00 不在范围内，因为当它转换为 UTC 后，它比 MaxValue 晚一个小时。

有些日历（如 UmAlQuraCalendar）支持的上限日期早于 MaxValue。在这些情况下，通过变量赋值或格式设置及分析操作尝试访问 MaxValue 会引发 ArgumentOutOfRangeException。您可以从 Calendar..::.MaxSupportedDateTime 属性中检索指定区域性的最近有效日期的值，而不要检索 DateTime..::.MaxValue 的值。 有些日历（如 UmAlQuraCalendar）支持的上限日期早于 MaxValue。在这些情况下，通过变量赋值或格式设置及分析操作尝试访问 MaxValue 会引发 ArgumentOutOfRangeException。您可以从 Calendar..::.MaxSupportedDateTime 属性中检索指定区域性的最近有效日期的值，而不要检索 DateTime..::.MaxValue 的值。 有些日历（如 UmAlQuraCalendar）支持的上限日期早于 MaxValue。在这些情况下，通过变量赋值或格式设置及分析操作尝试访问 MaxValue 会引发 ArgumentOutOfRangeException。您可以从 Calendar..::.MaxSupportedDateTime 属性中检索指定区域性的最近有效日期的值，而不要检索 DateTime..::.MaxValue 的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.MinValue 字段

DateTimeOffset
.
.
::
.
MinValue 字段
DateTimeOffset 结构

表示可能的最早 DateTimeOffset 值。此字段为只读。 表示可能的最早 DateTimeOffset 值。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly MinValue As DateTimeOffset
public static readonly DateTimeOffset MinValue
public:
static initonly DateTimeOffset MinValue
static val MinValue: DateTimeOffset

此常量的值为 1/1/0001 12:00:00 AM +00:00。

MinValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或晚于此最小范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会与 MinValue 进行比较。也就是说，其日期和时间接近最小范围但偏移量为正的 DateTimeOffset 值可能会引发异常。例如，值 1/1/0001 1:00:00 AM +02:00 不在范围内，因为当它转换为 UTC 后，它比 MinValue 早一个小时。 MinValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或晚于此最小范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会与 MinValue 进行比较。也就是说，其日期和时间接近最小范围但偏移量为正的 DateTimeOffset 值可能会引发异常。例如，值 1/1/0001 1:00:00 AM +02:00 不在范围内，因为当它转换为 UTC 后，它比 MinValue 早一个小时。 MinValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或晚于此最小范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会与 MinValue 进行比较。也就是说，其日期和时间接近最小范围但偏移量为正的 DateTimeOffset 值可能会引发异常。例如，值 1/1/0001 1:00:00 AM +02:00 不在范围内，因为当它转换为 UTC 后，它比 MinValue 早一个小时。 MinValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或晚于此最小范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会与 MinValue 进行比较。也就是说，其日期和时间接近最小范围但偏移量为正的 DateTimeOffset 值可能会引发异常。例如，值 1/1/0001 1:00:00 AM +02:00 不在范围内，因为当它转换为 UTC 后，它比 MinValue 早一个小时。 MinValue 属性用于确定新 DateTimeOffset 对象的值或算术运算所返回的 DateTimeOffset 值是否等于或晚于此最小范围值。如果不是，则此方法将引发 ArgumentOutOfRangeException。此方法会先将任何 DateTimeOffset 值转换为协调世界时 (UTC)，然后才会与 MinValue 进行比较。也就是说，其日期和时间接近最小范围但偏移量为正的 DateTimeOffset 值可能会引发异常。例如，值 1/1/0001 1:00:00 AM +02:00 不在范围内，因为当它转换为 UTC 后，它比 MinValue 早一个小时。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset 方法

DateTimeOffset 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

DateTimeOffset 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DateTimeOffset 结构
System 命名空间


DateTimeOffset ..::.Add 方法

DateTimeOffset
.
.
::
.
Add 方法
DateTimeOffset 结构

将一个指定的时间间隔添加到 DateTimeOffset 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Add ( _
    timeSpan As TimeSpan _
) As DateTimeOffset
public DateTimeOffset Add(
    TimeSpan timeSpan
)
public:
DateTimeOffset Add(
    TimeSpan timeSpan
)
member Add :
        timeSpan:TimeSpan -> DateTimeOffset

参数

timeSpan
类型： System TimeSpan
一个 TimeSpan 对象，表示正时间间隔或负时间间隔。

返回值

类型： System DateTimeOffset
一个对象，其值为当前的 DateTimeOffset 对象所表示的日期和时间与 timeSpan 所表示的时间间隔之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

您可以使用 Add 方法在单个运算中加上多种时间间隔（天、小时、分钟、秒或毫秒）。此方法的行为与加法运算符的行为相同。DateTimeOffset 结构也支持每种时间间隔的专用加法（例如 AddDays、AddHours 和 AddMinutes）。 您可以使用 Add 方法在单个运算中加上多种时间间隔（天、小时、分钟、秒或毫秒）。此方法的行为与加法运算符的行为相同。DateTimeOffset 结构也支持每种时间间隔的专用加法（例如 AddDays、AddHours 和 AddMinutes）。 您可以使用 Add 方法在单个运算中加上多种时间间隔（天、小时、分钟、秒或毫秒）。此方法的行为与加法运算符的行为相同。DateTimeOffset 结构也支持每种时间间隔的专用加法（例如 AddDays、AddHours 和 AddMinutes）。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 timeSpan 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 timeSpan 与其日期和时间相加来修改当前对象的值。

Add 方法不影响当前 DateTimeOffset 对象的 Offset 属性的值。

因为 DateTimeOffset 对象不表示特定时区中的日期和时间，所以 Add 方法在执行日期和时间运算时不会考虑特定时区的调整规则。

如果 timeSpan 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法将返回未更改的原始 DateTimeOffset 对象的值。

下面的示例创建了一个由 TimeSpan 对象组成的数组，这些对象表示目的地之间的飞行时间。然后 Add 方法会将这些时间与表示飞行的最初起飞时间的 DateTimeOffset 对象相加。结果反映了每个目的地的预定到达时间。 下面的示例创建了一个由 TimeSpan 对象组成的数组，这些对象表示目的地之间的飞行时间。然后 Add 方法会将这些时间与表示飞行的最初起飞时间的 DateTimeOffset 对象相加。结果反映了每个目的地的预定到达时间。 下面的示例创建了一个由 TimeSpan 对象组成的数组，这些对象表示目的地之间的飞行时间。然后 Add 方法会将这些时间与表示飞行的最初起飞时间的 DateTimeOffset 对象相加。结果反映了每个目的地的预定到达时间。

Dim takeOff As New DateTimeOffset(#6/1/2007 7:55AM#, _
                                  New TimeSpan(-5, 0, 0))
Dim currentTime As DateTimeOffset = takeOff
Dim flightTimes() As TimeSpan = New TimeSpan() _
                  {New TimeSpan(2, 25, 0), New TimeSpan(1, 48, 0)}
Console.WriteLine("Takeoff is scheduled for {0:d} at {0:T}.", _
                  takeOff)
For ctr As Integer = flightTimes.GetLowerBound(0) To _
                     flightTimes.GetUpperBound(0)
   currentTime = currentTime.Add(flightTimes(ctr))
   Console.WriteLine("Destination #{0} at {1}.", ctr + 1, currentTime)
Next

DateTimeOffset takeOff = new DateTimeOffset(2007, 6, 1, 7, 55, 0,
                             new TimeSpan(-5, 0, 0));
DateTimeOffset currentTime = takeOff;
TimeSpan[] flightTimes = new TimeSpan[]
                  {new TimeSpan(2, 25, 0), new TimeSpan(1, 48, 0)};
Console.WriteLine("Takeoff is scheduled for {0:d} at {0:T}.",
                  takeOff);
for (int ctr = flightTimes.GetLowerBound(0);
     ctr <= flightTimes.GetUpperBound(0); ctr++)
{
   currentTime = currentTime.Add(flightTimes[ctr]);
   Console.WriteLine("Destination #{0} at {1}.", ctr + 1, currentTime);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
Addition

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.AddDays 方法

DateTimeOffset
.
.
::
.
AddDays 方法
DateTimeOffset 结构

将由整数和小数部分组成的指定天数与当前的 DateTimeOffset 对象相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddDays ( _
    days As Double _
) As DateTimeOffset
public DateTimeOffset AddDays(
    double days
)
public:
DateTimeOffset AddDays(
    double days
)
member AddDays :
        days:float -> DateTimeOffset

参数

days
类型： System Double
由整数和小数部分组成的天数。此数值可以是负数也可以是正数。 由整数和小数部分组成的天数。此数值可以是负数也可以是正数。

返回值

类型： System DateTimeOffset
一个对象，其值为当前的 DateTimeOffset 对象所表示的日期和时间与 days 所表示的天数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

days 参数的小数部分是以天为单位时的小数部分。例如，4.5 等效于 4 天 12 小时 0 分 0 秒 0 毫秒。days 参数被舍入到最近的毫秒。 days 参数的小数部分是以天为单位时的小数部分。例如，4.5 等效于 4 天 12 小时 0 分 0 秒 0 毫秒。days 参数被舍入到最近的毫秒。 days 参数的小数部分是以天为单位时的小数部分。例如，4.5 等效于 4 天 12 小时 0 分 0 秒 0 毫秒。days 参数被舍入到最近的毫秒。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 days 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 days 与其日期和时间相加来修改当前对象的值。

因为 DateTimeOffset 对象不表示特定时区中的日期和时间，所以 AddDays 方法在执行日期和时间运算时不会考虑特定时区的调整规则。

如果将不足一天的时间间隔转换为小数部分，则可能会发生精度损失。如果这会产生问题，则可以使用 Add 方法，通过这种方法，可以在一个方法调用中指定多种时间间隔，而不需要将时间间隔转换为天的小数部分。 如果将不足一天的时间间隔转换为小数部分，则可能会发生精度损失。如果这会产生问题，则可以使用 Add 方法，通过这种方法，可以在一个方法调用中指定多种时间间隔，而不需要将时间间隔转换为天的小数部分。

下面的示例使用 AddDays 方法列出了 2008 年 3 月中表示星期一（工作周的第一天）的日期。

Dim workDay As New DateTimeOffset(#3/1/2008 9:00AM#, _
                   DateTimeOffset.Now.Offset)
Dim month As Integer = workDay.Month
' Start with the first Monday of the month
If workDay.DayOfWeek <> DayOfWeek.Monday Then
   If workDay.DayOfWeek = DayOfWeek.Sunday Then
      workDay = workDay.AddDays(1)
   Else
      workDay = workDay.AddDays(8 - CInt(workDay.DayOfWeek))
   End If
End If
Console.WriteLine("Beginning of Work Week In {0:MMMM} {0:yyyy}:", workDay)
' Add one week to the current date
Do While workDay.Month = month
   Console.WriteLine("   {0:dddd}, {0:MMMM}{0: d}", workDay)
   workDay = workDay.AddDays(7)
Loop
' The example produces the following output:
'    Beginning of Work Week In March 2008:
'       Monday, March 3
'       Monday, March 10
'       Monday, March 17
'       Monday, March 24
'       Monday, March 31

DateTimeOffset workDay = new DateTimeOffset(2008, 3, 1, 9, 0, 0,
                   DateTimeOffset.Now.Offset);
int month = workDay.Month;
// Start with the first Monday of the month
if (workDay.DayOfWeek != DayOfWeek.Monday)
{
   if (workDay.DayOfWeek == DayOfWeek.Sunday)
      workDay = workDay.AddDays(1);
   else
      workDay = workDay.AddDays(8 - (int)workDay.DayOfWeek);
}
Console.WriteLine("Beginning of Work Week In {0:MMMM} {0:yyyy}:", workDay);
// Add one week to the current date
do
{
   Console.WriteLine("   {0:dddd}, {0:MMMM}{0: d}", workDay);
   workDay = workDay.AddDays(7);
} while (workDay.Month == month);
// The example produces the following output:
//    Beginning of Work Week In March 2008:
//       Monday, March 3
//       Monday, March 10
//       Monday, March 17
//       Monday, March 24
//       Monday, March 31

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.AddHours 方法

DateTimeOffset
.
.
::
.
AddHours 方法
DateTimeOffset 结构

将由整数和小数部分组成的指定小时数与当前的 DateTimeOffset 对象相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddHours ( _
    hours As Double _
) As DateTimeOffset
public DateTimeOffset AddHours(
    double hours
)
public:
DateTimeOffset AddHours(
    double hours
)
member AddHours :
        hours:float -> DateTimeOffset

参数

hours
类型： System Double
由整数和小数部分组成的小时数。此数值可以是负数也可以是正数。 由整数和小数部分组成的小时数。此数值可以是负数也可以是正数。

返回值

类型： System DateTimeOffset
一个对象，其值为当前的 DateTimeOffset 对象所表示的日期和时间与 hours 所表示的小时数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

hours 参数的小数部分是以小时为单位时的小数部分。例如，4.5 等效于 4 小时 30 分 0 秒 0 毫秒。hours 参数被舍入到最近的毫秒。 hours 参数的小数部分是以小时为单位时的小数部分。例如，4.5 等效于 4 小时 30 分 0 秒 0 毫秒。hours 参数被舍入到最近的毫秒。 hours 参数的小数部分是以小时为单位时的小数部分。例如，4.5 等效于 4 小时 30 分 0 秒 0 毫秒。hours 参数被舍入到最近的毫秒。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 hours 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 hours 与其日期和时间相加来修改当前对象的值。

因为 DateTimeOffset 对象不表示特定时区中的日期和时间，所以 AddHours 方法在执行日期和时间运算时不会考虑特定时区的调整规则。

如果将不足一小时的时间间隔转换为小数部分，则可能会发生精度损失。（例如，1 分钟等于 0.01666 小时。）如果这会产生问题，则可以使用 Add 方法，通过这种方法，可以在一个方法调用中指定多种时间间隔，不需要将时间间隔转换为小时的小数部分。 如果将不足一小时的时间间隔转换为小数部分，则可能会发生精度损失。（例如，1 分钟等于 0.01666 小时。）如果这会产生问题，则可以使用 Add 方法，通过这种方法，可以在一个方法调用中指定多种时间间隔，不需要将时间间隔转换为小时的小数部分。

下面的示例使用 AddHours 方法列出了办公室特定周的每天两班每班八小时的工作班次开始时间。

Const SHIFT_LENGTH As Integer = 8

Dim startTime As New DateTimeOffset(#8/6/2007 12:00:00AM#, _
                     DateTimeOffset.Now.Offset)
Dim startOfShift As DateTimeOffset = startTime.AddHours(SHIFT_LENGTH)

Console.WriteLine("Shifts for the week of {0:D}", startOfShift)
Do
   ' Exclude third shift
   If startOfShift.Hour > 6 Then _
      Console.WriteLine("   {0:d} at {0:T}", startOfShift)

   startOfShift = startOfShift.AddHours(SHIFT_LENGTH)
Loop While startOfShift.DayOfWeek <> DayOfWeek.Saturday And _
           startOfShift.DayOfWeek <> DayOfWeek.Sunday

' The example produces the following output:
'
'    Shifts for the week of Monday, August 06, 2007
'       8/6/2007 at 8:00:00 AM
'       8/6/2007 at 4:00:00 PM
'       8/7/2007 at 8:00:00 AM
'       8/7/2007 at 4:00:00 PM
'       8/8/2007 at 8:00:00 AM
'       8/8/2007 at 4:00:00 PM
'       8/9/2007 at 8:00:00 AM
'       8/9/2007 at 4:00:00 PM
'       8/10/2007 at 8:00:00 AM
'       8/10/2007 at 4:00:00 PM

const int SHIFT_LENGTH = 8;

DateTimeOffset startTime = new DateTimeOffset(2007, 8, 6, 0, 0, 0,
                     DateTimeOffset.Now.Offset);
DateTimeOffset startOfShift = startTime.AddHours(SHIFT_LENGTH);

Console.WriteLine("Shifts for the week of {0:D}", startOfShift);
do
{
   // Exclude third shift
   if (startOfShift.Hour > 6)
      Console.WriteLine("   {0:d} at {0:T}", startOfShift);

   startOfShift = startOfShift.AddHours(SHIFT_LENGTH);
} while (startOfShift.DayOfWeek != DayOfWeek.Saturday &
           startOfShift.DayOfWeek != DayOfWeek.Sunday);
// The example produces the following output:
//
//    Shifts for the week of Monday, August 06, 2007
//       8/6/2007 at 8:00:00 AM
//       8/6/2007 at 4:00:00 PM
//       8/7/2007 at 8:00:00 AM
//       8/7/2007 at 4:00:00 PM
//       8/8/2007 at 8:00:00 AM
//       8/8/2007 at 4:00:00 PM
//       8/9/2007 at 8:00:00 AM
//       8/9/2007 at 4:00:00 PM
//       8/10/2007 at 8:00:00 AM
//       8/10/2007 at 4:00:00 PM

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.AddMilliseconds 方法

DateTimeOffset
.
.
::
.
AddMilliseconds 方法
DateTimeOffset 结构

将指定的毫秒数与当前 DateTimeOffset 对象相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddMilliseconds ( _
    milliseconds As Double _
) As DateTimeOffset
public DateTimeOffset AddMilliseconds(
    double milliseconds
)
public:
DateTimeOffset AddMilliseconds(
    double milliseconds
)
member AddMilliseconds :
        milliseconds:float -> DateTimeOffset

参数

milliseconds
类型： System Double
由整数和小数部分组成的毫秒数。此数值可以是负数也可以是正数。 由整数和小数部分组成的毫秒数。此数值可以是负数也可以是正数。

返回值

类型： System DateTimeOffset
一个对象，其值为当前的 DateTimeOffset 对象所表示的日期和时间与 milliseconds 所表示的整毫秒数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

milliseconds 参数的小数部分是以毫秒为单位时的小数部分。例如，4.5 等效于 4 毫秒 5000 个计时周期（其中 1 毫秒等于 10,000 个计时周期）。但是，milliseconds 被舍入到最近的毫秒；所有 .5 或更高的小数值都被向上舍入。 milliseconds 参数的小数部分是以毫秒为单位时的小数部分。例如，4.5 等效于 4 毫秒 5000 个计时周期（其中 1 毫秒等于 10,000 个计时周期）。但是，milliseconds 被舍入到最近的毫秒；所有 .5 或更高的小数值都被向上舍入。 milliseconds 参数的小数部分是以毫秒为单位时的小数部分。例如，4.5 等效于 4 毫秒 5000 个计时周期（其中 1 毫秒等于 10,000 个计时周期）。但是，milliseconds 被舍入到最近的毫秒；所有 .5 或更高的小数值都被向上舍入。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 milliseconds 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 milliseconds 与其日期和时间相加来修改当前对象的值。

因为 DateTimeOffset 对象不表示特定时区中的日期和时间，所以 AddMilliseconds 方法在执行日期和时间运算时不会考虑特定时区的调整规则。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.AddMinutes 方法

DateTimeOffset
.
.
::
.
AddMinutes 方法
DateTimeOffset 结构

将由整数和小数部分组成的指定分钟数与当前的 DateTimeOffset 对象相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddMinutes ( _
    minutes As Double _
) As DateTimeOffset
public DateTimeOffset AddMinutes(
    double minutes
)
public:
DateTimeOffset AddMinutes(
    double minutes
)
member AddMinutes :
        minutes:float -> DateTimeOffset

参数

minutes
类型： System Double
由整数和小数部分组成的分钟数。此数值可以是负数也可以是正数。 由整数和小数部分组成的分钟数。此数值可以是负数也可以是正数。

返回值

类型： System DateTimeOffset
一个对象，其值为当前的 DateTimeOffset 对象所表示的日期和时间与 minutes 所表示的分钟数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

minutes 参数的小数部分是以分钟为单位时的小数部分。例如，4.5 等效于 4 分 30 秒 0 毫秒。minutes 参数被舍入到最近的毫秒。 minutes 参数的小数部分是以分钟为单位时的小数部分。例如，4.5 等效于 4 分 30 秒 0 毫秒。minutes 参数被舍入到最近的毫秒。 minutes 参数的小数部分是以分钟为单位时的小数部分。例如，4.5 等效于 4 分 30 秒 0 毫秒。minutes 参数被舍入到最近的毫秒。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 minutes 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 minutes 与其日期和时间相加来修改当前对象的值。

因为 DateTimeOffset 对象不表示特定时区中的日期和时间，所以 AddMinutes 方法在执行日期和时间运算时不会考虑特定时区的调整规则。

如果将不足一分钟的时间间隔转换为小数部分，则可能会发生精度损失。（例如，1 秒钟等于 0.01666 分钟。）如果这会产生问题，则可以使用 Add 方法，通过这种方法，可以在一个方法调用中指定多种时间间隔，不需要将时间间隔转换为分钟的小数部分。 如果将不足一分钟的时间间隔转换为小数部分，则可能会发生精度损失。（例如，1 秒钟等于 0.01666 分钟。）如果这会产生问题，则可以使用 Add 方法，通过这种方法，可以在一个方法调用中指定多种时间间隔，不需要将时间间隔转换为分钟的小数部分。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.AddMonths 方法

DateTimeOffset
.
.
::
.
AddMonths 方法
DateTimeOffset 结构

将指定的月数与当前 DateTimeOffset 对象相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddMonths ( _
    months As Integer _
) As DateTimeOffset
public DateTimeOffset AddMonths(
    int months
)
public:
DateTimeOffset AddMonths(
    int months
)
member AddMonths :
        months:int -> DateTimeOffset

参数

months
类型： System Int32
整月份数。此数值可以是负数也可以是正数。 整月份数。此数值可以是负数也可以是正数。

返回值

类型： System DateTimeOffset
一个对象，其值为当前的 DateTimeOffset 对象所表示的日期和时间与 months 所表示的月份数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

大多数其他方法允许将单个时间间隔单位（如分钟数或天数）与日期和时间值相加，而 AddMonths 却不同，它不允许对月份的小数部分进行加法运算。若要将由月数以及其他时间单位组成的时间与 DateTimeOffset 对象相加，请使用 Add 方法。 大多数其他方法允许将单个时间间隔单位（如分钟数或天数）与日期和时间值相加，而 AddMonths 却不同，它不允许对月份的小数部分进行加法运算。若要将由月数以及其他时间单位组成的时间与 DateTimeOffset 对象相加，请使用 Add 方法。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 months 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 months 与其日期和时间相加来修改当前对象的值。

下面的示例使用 AddMonths 方法来显示 2007 年每个季度的开始日期。

Dim quarterDate As New DateTimeOffset(#01/01/2007#, DateTimeOffset.Now.Offset)
For ctr As Integer = 1 To 4
   Console.WriteLine("Quarter {0}: {1:MMMM d}", ctr, quarterDate)
   quarterDate = quarterDate.AddMonths(3)
Next
' This example produces the following output:
'       Quarter 1: January 1
'       Quarter 2: April 1
'       Quarter 3: July 1
'       Quarter 4: October 1

DateTimeOffset quarterDate = new DateTimeOffset(2007, 1, 1, 0, 0, 0,
                                 DateTimeOffset.Now.Offset);
for (int ctr = 1; ctr <= 4; ctr++)
{
   Console.WriteLine("Quarter {0}: {1:MMMM d}", ctr, quarterDate);
   quarterDate = quarterDate.AddMonths(3);
}
// This example produces the following output:
//       Quarter 1: January 1
//       Quarter 2: April 1
//       Quarter 3: July 1
//       Quarter 4: October 1

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.AddSeconds 方法

DateTimeOffset
.
.
::
.
AddSeconds 方法
DateTimeOffset 结构

将由整数和小数部分组成的指定秒数与当前的 DateTimeOffset 对象相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddSeconds ( _
    seconds As Double _
) As DateTimeOffset
public DateTimeOffset AddSeconds(
    double seconds
)
public:
DateTimeOffset AddSeconds(
    double seconds
)
member AddSeconds :
        seconds:float -> DateTimeOffset

参数

seconds
类型： System Double
由整数和小数部分组成的秒数。此数值可以是负数也可以是正数。 由整数和小数部分组成的秒数。此数值可以是负数也可以是正数。

返回值

类型： System DateTimeOffset
一个对象，其值为当前的 DateTimeOffset 对象所表示的日期和时间与 seconds 所表示的秒数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

seconds 参数的小数部分是以秒为单位时的小数部分。下表中显示了秒的小数部分的值。 seconds 参数的小数部分是以秒为单位时的小数部分。下表中显示了秒的小数部分的值。

秒值 | 等效项
1 秒 | 100 毫秒
01 秒 | 10 毫秒
001 秒 | 1 毫秒

seconds 参数被舍入到最近的毫秒。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 minutes 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 minutes 与其日期和时间相加来修改当前对象的值。

因为 DateTimeOffset 对象不表示特定时区中的日期和时间，所以 AddSeconds 方法在执行日期和时间运算时不会考虑特定时区的调整规则。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.AddTicks 方法

DateTimeOffset
.
.
::
.
AddTicks 方法
DateTimeOffset 结构

将指定的计时周期数与当前 DateTimeOffset 对象相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddTicks ( _
    ticks As Long _
) As DateTimeOffset
public DateTimeOffset AddTicks(
    long ticks
)
public:
DateTimeOffset AddTicks(
    long long ticks
)
member AddTicks :
        ticks:int64 -> DateTimeOffset

参数

ticks
类型： System Int64
以 100 纳秒为单位的计时周期数。此数值可以是负数也可以是正数。 以 100 纳秒为单位的计时周期数。此数值可以是负数也可以是正数。

返回值

类型： System DateTimeOffset
一个对象，其值为当前的 DateTimeOffset 对象所表示的日期和时间与 ticks 所表示的计时周期数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

1 个计时周期表示 100 纳秒或者一秒钟的一千万分之一。因为计时周期是一个非常小和非常精确的时间间隔，所以任何较大的时间单位都可以用计时周期数来表示，并且不会损失精度。 1 个计时周期表示 100 纳秒或者一秒钟的一千万分之一。因为计时周期是一个非常小和非常精确的时间间隔，所以任何较大的时间单位都可以用计时周期数来表示，并且不会损失精度。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 minutes 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 minutes 与其日期和时间相加来修改当前对象的值。

下表列出了特定时间间隔中的计时周期数。

时间间隔 | 计时周期数
然后安装 | 10,000,000
Minute | 600,000,000
Hour | 36,000,000,000
天 | 864,000,000,000
周 | 6,048,000,000,000
月份 | 取决于月中的天数。
非闰年 | 315,360,000,000,000
闰年 | 316,224,000,000,000

因为 DateTimeOffset 对象不表示特定时区中的日期和时间，所以 AddTicks 方法在执行日期和时间运算时不会考虑特定时区的调整规则。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.AddYears 方法

DateTimeOffset
.
.
::
.
AddYears 方法
DateTimeOffset 结构

将指定的年数与当前 DateTimeOffset 对象相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function AddYears ( _
    years As Integer _
) As DateTimeOffset
public DateTimeOffset AddYears(
    int years
)
public:
DateTimeOffset AddYears(
    int years
)
member AddYears :
        years:int -> DateTimeOffset

参数

years
类型： System Int32
年份数。此数值可以是负数也可以是正数。 年份数。此数值可以是负数也可以是正数。

返回值

类型： System DateTimeOffset
一个对象，其值为当前的 DateTimeOffset 对象所表示的日期和时间与 years 所表示的年数之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

大多数其他方法允许将单个时间间隔单位（如分钟数或天数）与日期和时间值相加，而 AddYears 却不同，它不允许对年份的小数部分进行加法运算。若要将由年数以及其他时间单位组成的时间与 DateTimeOffset 对象相加，请使用 Add 方法。 大多数其他方法允许将单个时间间隔单位（如分钟数或天数）与日期和时间值相加，而 AddYears 却不同，它不允许对年份的小数部分进行加法运算。若要将由年数以及其他时间单位组成的时间与 DateTimeOffset 对象相加，请使用 Add 方法。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 months 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 months 与其日期和时间相加来修改当前对象的值。

在美国，不允许给 16 岁以下的人颁发驾驶执照。下面的示例显示可能的最晚日期，某人要合法地获得驾驶执照，就必须在此日期之前出生。 在美国，不允许给 16 岁以下的人颁发驾驶执照。下面的示例显示可能的最晚日期，某人要合法地获得驾驶执照，就必须在此日期之前出生。

Const minimumAge As Integer = 16
Dim dateToday As DateTimeOffset = DateTimeOffset.Now
Dim latestBirthday As DateTimeOffset = dateToday.AddYears(-1 * minimumAge)
Console.WriteLine("To possess a driver's license, you must have been born on or before {0:d}.", _
                  latestBirthday)

const int minimumAge = 16;
DateTimeOffset dateToday = DateTimeOffset.Now;
DateTimeOffset latestBirthday = dateToday.AddYears(-1 * minimumAge);
Console.WriteLine("To possess a driver's license, you must have been born on or before {0:d}.",
                  latestBirthday);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Compare 方法

DateTimeOffset
.
.
::
.
Compare 方法
DateTimeOffset 结构

对两个 DateTimeOffset 对象进行比较，并指明第一个对象是早于、等于还是晚于第二个对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ first As DateTimeOffset, _ second As DateTimeOffset _ ) As Integer
public static int Compare( DateTimeOffset first, DateTimeOffset second )
public: static int Compare( DateTimeOffset first, DateTimeOffset second )
static member Compare : first:DateTimeOffset * second:DateTimeOffset -> int
参数
first
类型： System DateTimeOffset
要比较的第一个对象。
second
类型： System DateTimeOffset
要比较的第二个对象。
返回值
类型： System Int32
一个有符号的整数，它表示
first
参数的值是早于、晚于还是等于
second
参数的值，如下表所示。
返回值
含义
小于零
first
早于
second
。
零
first
等于
second
。
大于零
first
晚于
second
。

在执行比较时，此方法先将 first 和 second 参数都转换为协调世界时 (UTC)，然后再执行比较。此方法与下列代码功能等效： 在执行比较时，此方法先将 first 和 second 参数都转换为协调世界时 (UTC)，然后再执行比较。此方法与下列代码功能等效：

Return DateTime.Compare(first.UtcDateTime, second.UtcDateTime)

return DateTime.Compare(first.UtcDateTime, second.UtcDateTime);

换言之，Compare 方法决定两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。 换言之，Compare 方法决定两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。

下面的示例演示如何调用 Compare 方法来比较 DateTimeOffset 对象。

Module CompareTimes
   Private Enum TimeComparison As Integer
      Earlier = -1
      Same = 0
      Later = 1
   End Enum

   Public Sub Main()
      Dim firstTime As New DateTimeOffset(#09/01/2007 6:45:00AM#, _
                       New TimeSpan(-7, 0, 0))

      Dim secondTime As DateTimeOffset = firstTime
      Console.WriteLine("Comparing {0} and {1}: {2}", _
                        firstTime, secondTime, _
                        CType(DateTimeOffset.Compare(firstTime, secondTime), _
                              TimeComparison))

      secondTime = New DateTimeOffset(#09/01/2007 6:45:00AM#, _
                       New TimeSpan(-6, 0, 0))
      Console.WriteLine("Comparing {0} and {1}: {2}", _
                       firstTime, secondTime, _
                       CType(DateTimeOffset.Compare(firstTime, secondTime), _
                             TimeComparison))

      secondTime = New DateTimeOffset(#09/01/2007 8:45:00AM#, _
                       New TimeSpan(-5, 0, 0))
      Console.WriteLine("Comparing {0} and {1}: {2}", _
                       firstTime, secondTime, _
                       CType(DateTimeOffset.Compare(firstTime, secondTime), _
                             TimeComparison))
      ' The example displays the following output to the console:
      '       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 6:45:00 AM -07:00: Same
      '       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 6:45:00 AM -06:00: Later
      '       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 8:45:00 AM -05:00: Same
   End Sub
End Module

using System;

public class CompareTimes
{
   private enum TimeComparison
   {
      Earlier = -1,
      Same = 0,
      Later = 1
   };

   public static void Main()
   {
      DateTimeOffset firstTime = new DateTimeOffset(2007, 9, 1, 6, 45, 0,
                                 new TimeSpan(-7, 0, 0));

      DateTimeOffset secondTime = firstTime;
      Console.WriteLine("Comparing {0} and {1}: {2}",
                        firstTime, secondTime,
                        (TimeComparison) DateTimeOffset.Compare(firstTime, secondTime));

      secondTime = new DateTimeOffset(2007, 9, 1, 6, 45, 0,
                       new TimeSpan(-6, 0, 0));
      Console.WriteLine("Comparing {0} and {1}: {2}",
                       firstTime, secondTime,
                       (TimeComparison) DateTimeOffset.Compare(firstTime, secondTime));

      secondTime = new DateTimeOffset(2007, 9, 1, 8, 45, 0,
                       new TimeSpan(-5, 0, 0));
      Console.WriteLine("Comparing {0} and {1}: {2}",
                       firstTime, secondTime,
                       (TimeComparison) DateTimeOffset.Compare(firstTime, secondTime));
      // The example displays the following output to the console:
      //       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 6:45:00 AM -07:00: Same
      //       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 6:45:00 AM -06:00: Later
      //       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 8:45:00 AM -05:00: Same
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.CompareTo 方法

DateTimeOffset
.
.
::
.
CompareTo 方法
DateTimeOffset 结构

将当前的 DateTimeOffset 对象与指定的 DateTimeOffset 对象进行比较，并指明当前对象是早于、等于还是晚于另一个 DateTimeOffset 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ other As DateTimeOffset _ ) As Integer
public int CompareTo( DateTimeOffset other )
public: virtual int CompareTo( DateTimeOffset other ) sealed
abstract CompareTo : other:DateTimeOffset -> int override CompareTo : other:DateTimeOffset -> int
参数
other
类型： System DateTimeOffset
将与当前的
DateTimeOffset
对象进行比较的对象。
返回值
类型： System Int32
一个有符号的整数，它指明了当前的
DateTimeOffset
对象与
other
之间的关系，如下表所示。
返回值
说明
小于零
当前的
DateTimeOffset
对象早于
other
。
零
当前的
DateTimeOffset
对象与
other
相同。
大于零。
当前的
DateTimeOffset
对象晚于
other
。
实现

此方法通过比较 DateTimeOffset 对象的 UtcDateTime 值来比较这些对象；即，它确定两个对象是否表示同一时间点，并指明当前对象是早于、晚于还是等于 other 参数。

下面的示例演示如何调用 CompareTo 方法来比较 DateTimeOffset 对象。

Module CompareTimes
   Private Enum TimeComparison As Integer
      Earlier = -1
      Same = 0
      Later = 1
   End Enum

   Public Sub Main()
      Dim firstTime As New DateTimeOffset(#09/01/2007 6:45:00AM#, _
                       New TimeSpan(-7, 0, 0))

      Dim secondTime As DateTimeOffset = firstTime
      Console.WriteLine("Comparing {0} and {1}: {2}", _
                        firstTime, secondTime, _
                        CType(firstTime.CompareTo(secondTime), _
                              TimeComparison))

      secondTime = New DateTimeOffset(#09/01/2007 6:45:00AM#, _
                       New TimeSpan(-6, 0, 0))
      Console.WriteLine("Comparing {0} and {1}: {2}", _
                       firstTime, secondTime, _
                       CType(firstTime.CompareTo(secondTime), _
                             TimeComparison))

      secondTime = New DateTimeOffset(#09/01/2007 8:45:00AM#, _
                       New TimeSpan(-5, 0, 0))
      Console.WriteLine("Comparing {0} and {1}: {2}", _
                       firstTime, secondTime, _
                       CType(firstTime.CompareTo(secondTime), _
                             TimeComparison))
      ' The example displays the following output to the console:
      '       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 6:45:00 AM -07:00: Same
      '       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 6:45:00 AM -06:00: Later
      '       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 8:45:00 AM -05:00: Same
   End Sub
End Module

using System;

public class CompareTimes
{
   private enum TimeComparison
   {
      Earlier = -1,
      Same = 0,
      Later = 1
   };

   public static void Main()
   {
      DateTimeOffset firstTime = new DateTimeOffset(2007, 9, 1, 6, 45, 0,
                                 new TimeSpan(-7, 0, 0));

      DateTimeOffset secondTime = firstTime;
      Console.WriteLine("Comparing {0} and {1}: {2}",
                        firstTime, secondTime,
                        (TimeComparison) firstTime.CompareTo(secondTime));

      secondTime = new DateTimeOffset(2007, 9, 1, 6, 45, 0,
                       new TimeSpan(-6, 0, 0));
      Console.WriteLine("Comparing {0} and {1}: {2}",
                       firstTime, secondTime,
                       (TimeComparison) firstTime.CompareTo(secondTime));

      secondTime = new DateTimeOffset(2007, 9, 1, 8, 45, 0,
                       new TimeSpan(-5, 0, 0));
      Console.WriteLine("Comparing {0} and {1}: {2}",
                       firstTime, secondTime,
                       (TimeComparison) firstTime.CompareTo(secondTime));
      // The example displays the following output to the console:
      //       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 6:45:00 AM -07:00: Same
      //       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 6:45:00 AM -06:00: Later
      //       Comparing 9/1/2007 6:45:00 AM -07:00 and 9/1/2007 8:45:00 AM -05:00: Same
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Equals 方法

DateTimeOffset
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

确定两个 DateTimeOffset 对象是否相等，或者 DateTimeOffset 对象是否与指定的对象相等。

名称 说明
页首

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Equals 方法 (DateTimeOffset)

DateTimeOffset
.
.
::
.
Equals 方法 (DateTimeOffset)
DateTimeOffset 结构

确定当前的 DateTimeOffset 对象是否与指定的 DateTimeOffset 对象表示同一时间点。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    other As DateTimeOffset _
) As Boolean
public bool Equals(
    DateTimeOffset other
)
public:
virtual bool Equals(
    DateTimeOffset other
) sealed
abstract Equals :
        other:DateTimeOffset -> bool
override Equals :
        other:DateTimeOffset -> bool

参数

other
类型： System DateTimeOffset
要与当前 DateTimeOffset 对象进行比较的对象。

返回值

类型： System Boolean
如果两个 DateTimeOffset 对象具有相同的 UtcDateTime 值，则为 true；否则为 false。

实现

在执行比较之前，此方法会将这两个 DateTimeOffset 对象的值转换为协调世界时 (UTC)。此方法与下列代码功能等效： 在执行比较之前，此方法会将这两个 DateTimeOffset 对象的值转换为协调世界时 (UTC)。此方法与下列代码功能等效：

Return Me.UtcDateTime = other.UtcDateTime

return this.UtcDateTime == other.UtcDateTime;

换言之，Equals(DateTimeOffset) 方法决定两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。 换言之，Equals(DateTimeOffset) 方法决定两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。 换言之，Equals(DateTimeOffset) 方法决定两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。

值不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的 DateTimeOffset 对象被认为是晚于（或大于）值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的对象。

Equals(DateTimeOffset) 方法的此重载将实现 IEquatable<(Of <(T>)>)..::.Equals 方法。它的执行效果略好于 DateTimeOffset..::.Equals(Object) 重载，因为不必从对象中转换 other 参数。 Equals(DateTimeOffset) 方法的此重载将实现 IEquatable<(Of <(T>)>)..::.Equals 方法。它的执行效果略好于 DateTimeOffset..::.Equals(Object) 重载，因为不必从对象中转换 other 参数。

下面的示例演示如何调用 Equals(DateTimeOffset) 方法来测试 DateTimeOffset 对象是否与当前 DateTimeOffset 对象相等。

Dim firstTime As New DateTimeOffset(#09/01/2007 6:45:00AM#, _
                 New TimeSpan(-7, 0, 0))

Dim secondTime As DateTimeOffset = firstTime
Console.WriteLine("{0} = {1}: {2}", _
                  firstTime, secondTime, _
                  firstTime.Equals(secondTime))

secondTime = New DateTimeOffset(#09/01/2007 6:45:00AM#, _
                 New TimeSpan(-6, 0, 0))
Console.WriteLine("{0} = {1}: {2}", _
                 firstTime, secondTime, _
                 firstTime.Equals(secondTime))

secondTime = New DateTimeOffset(#09/01/2007 8:45:00AM#, _
                 New TimeSpan(-5, 0, 0))
Console.WriteLine("{0} = {1}: {2}", _
                 firstTime, secondTime, _
                 firstTime.Equals(secondTime))
' The example displays the following output to the console:
'       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM -07:00: True
'       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM -06:00: False
'       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 8:45:00 AM -05:00: True

private static void CompareForEquality1()
{
   DateTimeOffset firstTime = new DateTimeOffset(2007, 9, 1, 6, 45, 0,
                              new TimeSpan(-7, 0, 0));

   DateTimeOffset secondTime = firstTime;
   Console.WriteLine("{0} = {1}: {2}",
                     firstTime, secondTime,
                     firstTime.Equals(secondTime));

   secondTime = new DateTimeOffset(2007, 9, 1, 6, 45, 0,
                    new TimeSpan(-6, 0, 0));
   Console.WriteLine("{0} = {1}: {2}",
                    firstTime, secondTime,
                    firstTime.Equals(secondTime));

   secondTime = new DateTimeOffset(2007, 9, 1, 8, 45, 0,
                    new TimeSpan(-5, 0, 0));
   Console.WriteLine("{0} = {1}: {2}",
                    firstTime, secondTime,
                    firstTime.Equals(secondTime));
   // The example displays the following output to the console:
   //      9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM -07:00: True
   //      9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM -06:00: False
   //      9/1/2007 6:45:00 AM -07:00 = 9/1/2007 8:45:00 AM -05:00: True

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Equals 重载
System 命名空间
EqualsExact


DateTimeOffset ..::.Equals 方法 (Object)

DateTimeOffset
.
.
::
.
Equals 方法 (Object)
DateTimeOffset 结构

确定 DateTimeOffset 对象是否与指定的对象表示同一时间点。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与当前 DateTimeOffset 对象进行比较的对象。

返回值

类型： System Boolean
如果 obj 参数是 DateTimeOffset 对象，并且与当前的 DateTimeOffset 对象表示同一时间点，则为 true；否则为 false。

在执行比较之前，此方法会将当前的 DateTimeOffset 对象和 obj 参数的值都转换为协调世界时 (UTC)。此方法与下列代码功能等效： 在执行比较之前，此方法会将当前的 DateTimeOffset 对象和 obj 参数的值都转换为协调世界时 (UTC)。此方法与下列代码功能等效：

Return Me.UtcDateTime = DirectCast(obj, DatetimeOffset).UtcDateTime

return this.UtcDateTime == ((DateTimeOffset) obj).UtcDateTime;

换言之，DateTimeOffset..::.Equals(Object) 方法确定当前的 DateTimeOffset 对象是否与指定的对象表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。 换言之，DateTimeOffset..::.Equals(Object) 方法确定当前的 DateTimeOffset 对象是否与指定的对象表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。 换言之，DateTimeOffset..::.Equals(Object) 方法确定当前的 DateTimeOffset 对象是否与指定的对象表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。

如果 obj 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者 obj 的运行时类型不是 DateTimeOffset，则该方法将返回 false。

下面的示例指示当前的 DateTimeOffset 对象是否等于一些其他的 DateTimeOffset 对象、空引用以及 DateTime 对象。

Dim firstTime As New DateTimeOffset(#09/01/2007 6:45:00AM#, _
                 New TimeSpan(-7, 0, 0))

Dim secondTime As Object = firstTime
Console.WriteLine("{0} = {1}: {2}", _
                  firstTime, secondTime, _
                  firstTime.Equals(secondTime))

secondTime = New DateTimeOffset(#09/01/2007 6:45:00AM#, _
                 New TimeSpan(-6, 0, 0))
Console.WriteLine("{0} = {1}: {2}", _
                 firstTime, secondTime, _
                 firstTime.Equals(secondTime))

secondTime = New DateTimeOffset(#09/01/2007 8:45:00AM#, _
                 New TimeSpan(-5, 0, 0))
Console.WriteLine("{0} = {1}: {2}", _
                 firstTime, secondTime, _
                 firstTime.Equals(secondTime))

secondTime = Nothing
Console.WriteLine("{0} = {1}: {2}", _
                 firstTime, secondTime, _
                 firstTime.Equals(secondTime))

secondTime = #9/1/2007 6:45AM#
Console.WriteLine("{0} = {1}: {2}", _
                 firstTime, secondTime, _
                 firstTime.Equals(secondTime))

' The example displays the following output to the console:
'       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM -07:00: True
'       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM -06:00: False
'       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 8:45:00 AM -05:00: True
'       9/1/2007 6:45:00 AM -07:00 = : False
'       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM: False

private static void CompareForEquality2()
{
   DateTimeOffset firstTime = new DateTimeOffset(2007, 9, 1, 6, 45, 0,
                              new TimeSpan(-7, 0, 0));

   object secondTime = firstTime;
   Console.WriteLine("{0} = {1}: {2}",
                     firstTime, secondTime,
                     firstTime.Equals(secondTime));

   secondTime = new DateTimeOffset(2007, 9, 1, 6, 45, 0,
                    new TimeSpan(-6, 0, 0));
   Console.WriteLine("{0} = {1}: {2}",
                    firstTime, secondTime,
                    firstTime.Equals(secondTime));

   secondTime = new DateTimeOffset(2007, 9, 1, 8, 45, 0,
                    new TimeSpan(-5, 0, 0));
   Console.WriteLine("{0} = {1}: {2}",
                    firstTime, secondTime,
                    firstTime.Equals(secondTime));

   secondTime = null;
   Console.WriteLine("{0} = {1}: {2}",
                    firstTime, secondTime,
                    firstTime.Equals(secondTime));

   secondTime = new DateTime(2007, 9, 1, 6, 45, 00);
   Console.WriteLine("{0} = {1}: {2}",
                    firstTime, secondTime,
                    firstTime.Equals(secondTime));
   // The example displays the following output to the console:
   //       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM -07:00: True
   //       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM -06:00: False
   //       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 8:45:00 AM -05:00: True
   //       9/1/2007 6:45:00 AM -07:00 = : False
   //       9/1/2007 6:45:00 AM -07:00 = 9/1/2007 6:45:00 AM: False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Equals 重载
System 命名空间
EqualsExact


DateTimeOffset ..::.Equals 方法 (DateTimeOffset, DateTimeOffset)

DateTimeOffset
.
.
::
.
Equals 方法 (DateTimeOffset, DateTimeOffset)
DateTimeOffset 结构

确定两个指定的 DateTimeOffset 对象是否表示同一时间点。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Equals ( _
    first As DateTimeOffset, _
    second As DateTimeOffset _
) As Boolean
public static bool Equals(
    DateTimeOffset first,
    DateTimeOffset second
)
public:
static bool Equals(
    DateTimeOffset first,
    DateTimeOffset second
)
static member Equals :
        first:DateTimeOffset *
        second:DateTimeOffset -> bool

参数

first
类型： System DateTimeOffset
要比较的第一个对象。
second
类型： System DateTimeOffset
要比较的第二个对象。

返回值

类型： System Boolean
如果这两个 DateTimeOffset 对象具有相同的 UtcDateTime 值，则为 true；否则为 false。

在执行比较之前，此方法会将这两个 DateTimeOffset 对象转换为协调世界时 (UTC)。此方法与下列代码功能等效： 在执行比较之前，此方法会将这两个 DateTimeOffset 对象转换为协调世界时 (UTC)。此方法与下列代码功能等效：

Return first.UtcDateTime = second.UtcDateTime

return first.UtcDateTime == second.UtcDateTime;

换句话说，Equals(DateTimeOffset, DateTimeOffset) 方法确定这两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。 换句话说，Equals(DateTimeOffset, DateTimeOffset) 方法确定这两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。 换句话说，Equals(DateTimeOffset, DateTimeOffset) 方法确定这两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。

下面的示例演示如何调用 Equals(DateTimeOffset, DateTimeOffset) 方法来测试各对 DateTimeOffset 对象是否相等。

Dim firstTime As New DateTimeOffset(#11/15/2007 11:35AM#, _
                                    DateTimeOffset.Now.Offset)
Dim secondTime As DateTimeOffset = firstTime
Console.WriteLine("{0} = {1}: {2}", _
                  firstTime, secondTime, _
                  DateTimeOffset.Equals(firstTime, secondTime))

' The value of firstTime remains unchanged
secondTime = New DateTimeOffset(firstTime.DateTime, _
             TimeSpan.FromHours(firstTime.Offset.Hours + 1))
Console.WriteLine("{0} = {1}: {2}", _
                  firstTime, secondTime, _
                  DateTimeOffset.Equals(firstTime, secondTime))

' value of firstTime remains unchanged
secondTime = New DateTimeOffset(firstTime.DateTime + TimeSpan.FromHours(1), _
                                TimeSpan.FromHours(firstTime.Offset.Hours + 1))
Console.WriteLine("{0} = {1}: {2}", _
                  firstTime, secondTime, _
                  DateTimeOffset.Equals(firstTime, secondTime))
 ' The example produces the following output:
 '       11/15/2007 11:35:00 AM -07:00 = 11/15/2007 11:35:00 AM -07:00: True
 '       11/15/2007 11:35:00 AM -07:00 = 11/15/2007 11:35:00 AM -06:00: False
 '       11/15/2007 11:35:00 AM -07:00 = 11/15/2007 12:35:00 PM -06:00: True

DateTimeOffset firstTime = new DateTimeOffset(2007, 11, 15, 11, 35, 00,
                                    DateTimeOffset.Now.Offset);
DateTimeOffset secondTime = firstTime;
Console.WriteLine("{0} = {1}: {2}",
                  firstTime, secondTime,
                  DateTimeOffset.Equals(firstTime, secondTime));

// The value of firstTime remains unchanged
secondTime = new DateTimeOffset(firstTime.DateTime,
             TimeSpan.FromHours(firstTime.Offset.Hours + 1));
Console.WriteLine("{0} = {1}: {2}",
                  firstTime, secondTime,
                  DateTimeOffset.Equals(firstTime, secondTime));

// value of firstTime remains unchanged
secondTime = new DateTimeOffset(firstTime.DateTime + TimeSpan.FromHours(1),
                                TimeSpan.FromHours(firstTime.Offset.Hours + 1));
Console.WriteLine("{0} = {1}: {2}",
                  firstTime, secondTime,
                  DateTimeOffset.Equals(firstTime, secondTime));
 // The example produces the following output:
 //       11/15/2007 11:35:00 AM -07:00 = 11/15/2007 11:35:00 AM -07:00: True
 //       11/15/2007 11:35:00 AM -07:00 = 11/15/2007 11:35:00 AM -06:00: False
 //       11/15/2007 11:35:00 AM -07:00 = 11/15/2007 12:35:00 PM -06:00: True

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Equals 重载
System 命名空间
EqualsExact


DateTimeOffset ..::.EqualsExact 方法

DateTimeOffset
.
.
::
.
EqualsExact 方法
DateTimeOffset 结构

确定当前的 DateTimeOffset 对象与指定的 DateTimeOffset 对象是否表示同一时间并且是否具有相同的偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function EqualsExact ( _
    other As DateTimeOffset _
) As Boolean
public bool EqualsExact(
    DateTimeOffset other
)
public:
bool EqualsExact(
    DateTimeOffset other
)
member EqualsExact :
        other:DateTimeOffset -> bool

参数

other
类型： System DateTimeOffset
要与当前的 DateTimeOffset 对象进行比较的对象。

返回值

类型： System Boolean
如果当前的 DateTimeOffset 对象与 other 具有相同的日期和时间值以及相同的 Offset 值，则为 true；否则为 false。

由于多个时区具有同一偏移量，因此 true 的返回值不能保证当前对象与 other 对象表示的是同一时区中的时间。

与 EqualsExact 方法不同，Equals 方法的重载只决定两个 DateTimeOffset 值是否表示同一时间点。它们并未指明两个值是否具有相同的日期和时间以及相同的偏移量。 与 EqualsExact 方法不同，Equals 方法的重载只决定两个 DateTimeOffset 值是否表示同一时间点。它们并未指明两个值是否具有相同的日期和时间以及相同的偏移量。

下面的示例演示如何使用 EqualsExact 方法来比较相似的 DateTimeOffset 对象。

Dim instanceTime As New DateTimeOffset(#10/31/2007 12:00AM#, _
                                       DateTimeOffset.Now.Offset)

Dim otherTime As DateTimeOffset = instanceTime
Console.WriteLine("{0} = {1}: {2}", _
                  instanceTime, otherTime, _
                  instanceTime.EqualsExact(otherTime))

otherTime = New DateTimeOffset(instanceTime.DateTime, _
                               TimeSpan.FromHours(instanceTime.Offset.Hours + 1))
Console.WriteLine("{0} = {1}: {2}", _
                  instanceTime, otherTime, _
                  instanceTime.EqualsExact(otherTime))

otherTime = New DateTimeOffset(instanceTime.DateTime + TimeSpan.FromHours(1), _
                                TimeSpan.FromHours(instanceTime.Offset.Hours + 1))
Console.WriteLine("{0} = {1}: {2}", _
                  instanceTime, otherTime, _
                  instanceTime.EqualsExact(otherTime))
' The example produces the following output:
'       10/31/2007 12:00:00 AM -07:00 = 10/31/2007 12:00:00 AM -07:00: True
'       10/31/2007 12:00:00 AM -07:00 = 10/31/2007 12:00:00 AM -06:00: False
'       10/31/2007 12:00:00 AM -07:00 = 10/31/2007 1:00:00 AM -06:00: False

DateTimeOffset instanceTime = new DateTimeOffset(2007, 10, 31, 0, 0, 0,
                              DateTimeOffset.Now.Offset);

DateTimeOffset otherTime = instanceTime;
Console.WriteLine("{0} = {1}: {2}",
                  instanceTime, otherTime,
                  instanceTime.EqualsExact(otherTime));

otherTime = new DateTimeOffset(instanceTime.DateTime,
            TimeSpan.FromHours(instanceTime.Offset.Hours + 1));
Console.WriteLine("{0} = {1}: {2}",
                  instanceTime, otherTime,
                  instanceTime.EqualsExact(otherTime));

otherTime = new DateTimeOffset(instanceTime.DateTime + TimeSpan.FromHours(1),
                TimeSpan.FromHours(instanceTime.Offset.Hours + 1));
Console.WriteLine("{0} = {1}: {2}",
                  instanceTime, otherTime,
                  instanceTime.EqualsExact(otherTime));
// The example produces the following output:
//       10/31/2007 12:00:00 AM -07:00 = 10/31/2007 12:00:00 AM -07:00: True
//       10/31/2007 12:00:00 AM -07:00 = 10/31/2007 12:00:00 AM -06:00: False
//       10/31/2007 12:00:00 AM -07:00 = 10/31/2007 1:00:00 AM -06:00: False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
Equals


DateTimeOffset ..::.FromFileTime 方法

DateTimeOffset
.
.
::
.
FromFileTime 方法
DateTimeOffset 结构

将指定的 Windows 文件时间转换为等效的本地时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromFileTime ( _
    fileTime As Long _
) As DateTimeOffset
public static DateTimeOffset FromFileTime(
    long fileTime
)
public:
static DateTimeOffset FromFileTime(
    long long fileTime
)
static member FromFileTime :
        fileTime:int64 -> DateTimeOffset

参数

fileTime
类型： System Int64
以计时周期表示的 Windows 文件时间。

返回值

类型： System DateTimeOffset
一个对象，表示偏移量被设置为本地时间偏移量的 fileTime 的日期和时间。
异常 | 条件
ArgumentOutOfRangeException | filetime 小于零。 - 或 - filetime 大于 DateTimeOffset.MaxValue.Ticks。

Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。

通过调用返回 FILETIME 结构的 GetFileTime 函数，可经 Windows API 直接访问 Windows 文件时间。要检索其文件时间信息的文件的句柄是唯一的函数参数。此文件句柄是通过调用 CreateFile 函数检索的。FILETIME 结构的 dwHighDateTime 成员包含文件时间的四个高序位字节，其 dwLowDateTime 成员包含四个低序位字节。下面的示例演示如何检索 Windows 文件时间值并将其转换为 DateTimeOffset 值。 通过调用返回 FILETIME 结构的 GetFileTime 函数，可经 Windows API 直接访问 Windows 文件时间。要检索其文件时间信息的文件的句柄是唯一的函数参数。此文件句柄是通过调用 CreateFile 函数检索的。FILETIME 结构的 dwHighDateTime 成员包含文件时间的四个高序位字节，其 dwLowDateTime 成员包含四个低序位字节。下面的示例演示如何检索 Windows 文件时间值并将其转换为 DateTimeOffset 值。 通过调用返回 FILETIME 结构的 GetFileTime 函数，可经 Windows API 直接访问 Windows 文件时间。要检索其文件时间信息的文件的句柄是唯一的函数参数。此文件句柄是通过调用 CreateFile 函数检索的。FILETIME 结构的 dwHighDateTime 成员包含文件时间的四个高序位字节，其 dwLowDateTime 成员包含四个低序位字节。下面的示例演示如何检索 Windows 文件时间值并将其转换为 DateTimeOffset 值。 通过调用返回 FILETIME 结构的 GetFileTime 函数，可经 Windows API 直接访问 Windows 文件时间。要检索其文件时间信息的文件的句柄是唯一的函数参数。此文件句柄是通过调用 CreateFile 函数检索的。FILETIME 结构的 dwHighDateTime 成员包含文件时间的四个高序位字节，其 dwLowDateTime 成员包含四个低序位字节。下面的示例演示如何检索 Windows 文件时间值并将其转换为 DateTimeOffset 值。 通过调用返回 FILETIME 结构的 GetFileTime 函数，可经 Windows API 直接访问 Windows 文件时间。要检索其文件时间信息的文件的句柄是唯一的函数参数。此文件句柄是通过调用 CreateFile 函数检索的。FILETIME 结构的 dwHighDateTime 成员包含文件时间的四个高序位字节，其 dwLowDateTime 成员包含四个低序位字节。下面的示例演示如何检索 Windows 文件时间值并将其转换为 DateTimeOffset 值。

也可以通过以下两种方法来创建 Windows 文件时间值：通过调用 DateTime..::.ToFileTime 和 DateTime..::.ToFileTimeUtc 方法利用 DateTime 值来创建，通过调用 DateTimeOffset..::.ToFileTime 方法利用 DateTimeOffset 值来创建。

下面的示例使用 Windows API 检索 WordPad 可执行文件的 Windows 文件时间。

Imports System.IO

Public Structure FileTime
   Public dwLowDateTime As UInteger
   Public dwHighDateTime As UInteger

   Public Shared Widening Operator CType(fileTime As FileTime) As Long
      Dim returnedLong As Long
      ' Convert 4 high-order bytes to a byte array
      Dim highBytes() As Byte = BitConverter.GetBytes(fileTime.dwHighDateTime)
      ' Resize the array to 8 bytes (for a Long)
      ReDim Preserve highBytes(7)

      ' Assign high-order bytes to first 4 bytes of Long
      returnedLong = BitConverter.ToInt64(highBytes, 0)
      ' Shift high-order bytes into position
      returnedLong = returnedLong << 32
      ' Or with low-order bytes
      returnedLong = returnedLong Or fileTime.dwLowDateTime
      ' Return Long
      return returnedLong
   End Operator
End Structure

Module modMain
   Private Const OPEN_EXISTING As Integer = 3

   Private Const INVALID_HANDLE_VALUE As Integer = -1

   Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
                            ByVal lpFileName As String, _
                            ByVal dwDesiredAccess As Integer, _
                            ByVal dwShareMode As Integer, _
                            ByVal lpSecurityAttributes As Integer, _
                            ByVal dwCreationDisposition As Integer, _
                            ByVal dwFlagsAndAttributes As Integer, _
                            ByVal hTemplateFile As Integer) _
           As Integer

   Private Declare Function GetFileTime Lib "Kernel32"( _
                            hFile As Integer, _
                            ByRef lpCreationTime As FileTime, _
                            ByRef lpLastAccessTime As FileTime, _
                            ByRef lpLastWriteTime As FileTime) _
            As Boolean

   Private Declare Function CloseHandle Lib "Kernel32" ( _
                            hFile As Integer) _
           As Boolean

   Public Sub Main()
      ' Open file %windir%\write.exe
      Dim winDir As String = Environment.SystemDirectory
      If Not winDir.EndsWith(Path.DirectorySeparatorChar) Then _
         winDir += Path.DirectorySeparatorChar
      windir += "write.exe"

      ' Get file time using Windows API
      '
      ' Open file
      Dim hFile As Integer = CreateFile(winDir, 0, 0, 0, _
                                       OPEN_EXISTING, 0, 0)
      If hFile = INVALID_HANDLE_VALUE Then
         Console.WriteLine("Unable to access {0}.", winDir)
      Else
         Dim creationTime, accessTime, writeTime As FileTime
         If GetFileTime(hFile, creationTime, accessTime, writeTime) Then
            CloseHandle(hFile)
            Dim fileCreationTime As Long = CType(creationTime, Long)
            Dim fileAccessTime As Long = CType(accessTime, Long)
            Dim fileWriteTime As Long = CType(writeTime, Long)

            Console.WriteLine("File {0} Retrieved Using the Windows API:", winDir)
            Console.WriteLine("   Created:     {0:d}", DateTimeOffset.FromFileTime(fileCreationTime).ToString())
            Console.WriteLine("   Last Access: {0:d}", DateTimeOffset.FromFileTime(fileAccessTime).ToString())
            Console.WriteLine("   Last Write:  {0:d}", DateTimeOffset.FromFileTime(fileWriteTime).ToString())
            Console.WriteLine()
         End If
      End If

      ' Get date and time, convert to file time, then convert back
      Dim fileInfo As New FileInfo(winDir)
      Dim infoCreationTime, infoAccessTime, infoWriteTime As DateTimeOffset
      Dim ftCreationTime, ftAccessTime, ftWriteTime As Long

      ' Get dates and times of file creation, last access, and last write
      infoCreationTime = fileInfo.CreationTime
      infoAccessTime = fileInfo.LastAccessTime
      infoWriteTime = fileInfo.LastWriteTime
      ' Convert values to file times
      ftCreationTime = infoCreationTime.ToFileTime()
      ftAccessTime = infoAccessTime.ToFileTime()
      ftWriteTime = infoWriteTime.ToFileTime()

      ' Convert file times back to DateTimeOffset values
      Console.WriteLine("File {0} Retrieved Using a FileInfo Object:", winDir)
      Console.WriteLine("   Created:     {0:d}", DateTimeOffset.FromFileTime(ftCreationTime).ToString())
      Console.WriteLine("   Last Access: {0:d}", DateTimeOffset.FromFileTime(ftAccessTime).ToString())
      Console.WriteLine("   Last Write:  {0:d}", DateTimeOffset.FromFileTime(ftWriteTime).ToString())
   End Sub
End Module
' The example produces the following output:
'    File C:\WINDOWS\system32\write.exe Retrieved Using the Windows API:
'       Created:     10/13/2005 5:26:59 PM -07:00
'       Last Access: 3/20/2007 2:07:00 AM -07:00
'       Last Write:  8/4/2004 5:00:00 AM -07:00
'
'    File C:\WINDOWS\system32\write.exe Retrieved Using a FileInfo Object:
'       Created:     10/13/2005 5:26:59 PM -07:00
'       Last Access: 3/20/2007 2:07:00 AM -07:00
'       Last Write:  8/4/2004 5:00:00 AM -07:00

using System;
using System.IO;
using System.Runtime.InteropServices;

public struct FileTime
{
   public uint dwLowDateTime;
   public uint dwHighDateTime;

   public static implicit operator long(FileTime fileTime)
   {
      long returnedLong;
      // Convert 4 high-order bytes to a byte array
      byte[] highBytes = BitConverter.GetBytes(fileTime.dwHighDateTime);
      // Resize the array to 8 bytes (for a Long)
      Array.Resize(ref highBytes, 8);

      // Assign high-order bytes to first 4 bytes of Long
      returnedLong = BitConverter.ToInt64(highBytes, 0);
      // Shift high-order bytes into position
      returnedLong = returnedLong << 32;
      // Or with low-order bytes
      returnedLong = returnedLong | fileTime.dwLowDateTime;
      // Return long
      return returnedLong;
   }
}

public class FileTimes
{
   private const int OPEN_EXISTING = 3;
   private const int INVALID_HANDLE_VALUE = -1;

   [DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
   private static extern int CreateFile(string lpFileName,
                                       int dwDesiredAccess,
                                       int dwShareMode,
                                       int lpSecurityAttributes,
                                       int dwCreationDisposition,
                                       int dwFlagsAndAttributes,
                                       int hTemplateFile);

   [DllImport("Kernel32.dll")]
   private static extern bool GetFileTime(int hFile,
                                          out FileTime lpCreationTime,
                                          out FileTime lpLastAccessTime,
                                          out FileTime lpLastWriteTime);

   [DllImport("Kernel32.dll")]
   private static extern bool CloseHandle(int hFile);

   public static void Main()
   {
      // Open file %windir%\write.exe
      string winDir = Environment.SystemDirectory;
      if (! (winDir.EndsWith(Path.DirectorySeparatorChar.ToString())))
         winDir += Path.DirectorySeparatorChar;
      winDir += "write.exe";

      // Get file time using Windows API
      //
      // Open file
      int hFile = CreateFile(winDir, 0, 0, 0, OPEN_EXISTING, 0, 0);
      if (hFile == INVALID_HANDLE_VALUE)
      {
         Console.WriteLine("Unable to access {0}.", winDir);
      }
      else
      {
         FileTime creationTime, accessTime, writeTime;
         if (GetFileTime(hFile, out creationTime, out accessTime, out writeTime))
         {
            CloseHandle(hFile);
            long fileCreationTime = (long) creationTime;
            long fileAccessTime = accessTime;
            long fileWriteTime = (long) writeTime;

            Console.WriteLine("File {0} Retrieved Using the Windows API:", winDir);
            Console.WriteLine("   Created:     {0:d}", DateTimeOffset.FromFileTime(fileCreationTime).ToString());
            Console.WriteLine("   Last Access: {0:d}", DateTimeOffset.FromFileTime(fileAccessTime).ToString());
            Console.WriteLine("   Last Write:  {0:d}", DateTimeOffset.FromFileTime(fileWriteTime).ToString());
            Console.WriteLine();
         }
      }

      // Get date and time, convert to file time, then convert back
      FileInfo fileInfo = new FileInfo(winDir);
      DateTimeOffset infoCreationTime, infoAccessTime, infoWriteTime;
      long ftCreationTime, ftAccessTime, ftWriteTime;

      // Get dates and times of file creation, last access, and last write
      infoCreationTime = fileInfo.CreationTime;
      infoAccessTime = fileInfo.LastAccessTime;
      infoWriteTime = fileInfo.LastWriteTime;
      // Convert values to file times
      ftCreationTime = infoCreationTime.ToFileTime();
      ftAccessTime = infoAccessTime.ToFileTime();
      ftWriteTime = infoWriteTime.ToFileTime();

      // Convert file times back to DateTimeOffset values
      Console.WriteLine("File {0} Retrieved Using a FileInfo Object:", winDir);
      Console.WriteLine("   Created:     {0:d}", DateTimeOffset.FromFileTime(ftCreationTime).ToString());
      Console.WriteLine("   Last Access: {0:d}", DateTimeOffset.FromFileTime(ftAccessTime).ToString());
      Console.WriteLine("   Last Write:  {0:d}", DateTimeOffset.FromFileTime(ftWriteTime).ToString());
   }
}
// The example produces the following output:
//    File C:\WINDOWS\system32\write.exe Retrieved Using the Windows API:
//       Created:     10/13/2005 5:26:59 PM -07:00
//       Last Access: 3/20/2007 2:07:00 AM -07:00
//       Last Write:  8/4/2004 5:00:00 AM -07:00
//
//    File C:\WINDOWS\system32\write.exe Retrieved Using a FileInfo Object:
//       Created:     10/13/2005 5:26:59 PM -07:00
//       Last Access: 3/20/2007 2:07:00 AM -07:00
//       Last Write:  8/4/2004 5:00:00 AM -07:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.GetHashCode 方法

DateTimeOffset
.
.
::
.
GetHashCode 方法
DateTimeOffset 结构

返回当前的 DateTimeOffset 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.IComparable ..::.CompareTo 方法

DateTimeOffset
.
.
::
.
IComparable
.
.
::
.
CompareTo 方法
DateTimeOffset 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

将当前 DateTimeOffset 对象的值与相同类型的另一个对象进行比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ obj As Object _ ) As Integer Implements IComparable.CompareTo
int IComparable.CompareTo( Object obj )
private: virtual int CompareTo( Object^ obj ) sealed = IComparable::CompareTo
private abstract CompareTo : obj:Object -> int private override CompareTo : obj:Object -> int
参数
obj
类型： System Object
与当前
DateTimeOffset
对象进行比较的对象。
返回值
类型： System Int32
一个 32 位带符号整数，它指示当前的
DateTimeOffset
对象是小于、等于还是大于
obj
。
此方法的返回值的说明如下：
一个 32 位带符号整数，它指示当前的
DateTimeOffset
对象是小于、等于还是大于
obj
。
此方法的返回值的说明如下：
返回值
说明
小于零
当前的
DateTimeOffset
对象小于（早于）
obj
。
零
当前的
DateTimeOffset
对象与
obj
相等（表示同一时间点）。
大于零
当前的
DateTimeOffset
对象大于（晚于）
obj
。
实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.IDeserializationCallback ..::.OnDeserialization 方法

DateTimeOffset
.
.
::
.
IDeserializationCallback
.
.
::
.
OnDeserialization 方法
DateTimeOffset 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

在对象的反序列化完成时运行。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub OnDeserialization ( _
    sender As Object _
) Implements IDeserializationCallback.OnDeserialization
void IDeserializationCallback.OnDeserialization(
    Object sender
)
private:
virtual void OnDeserialization(
    Object^ sender
) sealed = IDeserializationCallback::OnDeserialization
private abstract OnDeserialization :
        sender:Object -> unit
private override OnDeserialization :
        sender:Object -> unit

参数

sender
类型： System Object
开始回调的对象。当前未实现该参数的功能。 开始回调的对象。当前未实现该参数的功能。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.ISerializable ..::.GetObjectData 方法

DateTimeOffset
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
DateTimeOffset 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

使用序列化当前 DateTimeOffset 对象所需的数据来填充 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
private:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
private override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要填充数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
此序列化的目标（请参见 StreamingContext）。

实现

异常 | 条件
ArgumentNullException | info 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Parse 方法

DateTimeOffset
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。

名称 说明
页首

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Parse 方法 (String)

DateTimeOffset
.
.
::
.
Parse 方法 (String)
DateTimeOffset 结构

将日期、时间和偏移量的指定字符串表示形式转换为其等效的 DateTimeOffset。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    input As String _
) As DateTimeOffset
public static DateTimeOffset Parse(
    string input
)
public:
static DateTimeOffset Parse(
    String^ input
)
static member Parse :
        input:string -> DateTimeOffset

参数

input
类型： System String
包含要转换的日期和时间的字符串。

返回值

类型： System DateTimeOffset
一个对象，它等效于 input 中包含的日期和时间。
异常 | 条件
ArgumentException | 偏移量大于 14 小时或小于 -14 小时。
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 不包含日期和时间的有效字符串表示形式。 - 或 - input 包含不带日期或时间的偏移量值的字符串表示形式。

Parse(String) 分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空白分隔。这三个元素如下表所示。 Parse(String) 分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空白分隔。这三个元素如下表所示。

元素 | 示例
<Date> | "2/10/2007"
<Time> | "1:02:03 PM"
<Offset> | "-7:30:15"

虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。

input 字符串是使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息分析的。也就是说，input 参数所包含的日期和时间的当前区域性表示形式必须以 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一来表示。若要分析一个包含未必与当前区域性格式设置相对应的指定格式设置的字符串，请使用 ParseExact 方法并提供格式说明符。 input 字符串是使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息分析的。也就是说，input 参数所包含的日期和时间的当前区域性表示形式必须以 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一来表示。若要分析一个包含未必与当前区域性格式设置相对应的指定格式设置的字符串，请使用 ParseExact 方法并提供格式说明符。 input 字符串是使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息分析的。也就是说，input 参数所包含的日期和时间的当前区域性表示形式必须以 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一来表示。若要分析一个包含未必与当前区域性格式设置相对应的指定格式设置的字符串，请使用 ParseExact 方法并提供格式说明符。

下面的示例调用 Parse(String) 方法来分析一些日期和时间字符串。此示例包括来自区域性为“en-us”的系统上 2007 年 3 月 22 日的输出。 下面的示例调用 Parse(String) 方法来分析一些日期和时间字符串。此示例包括来自区域性为“en-us”的系统上 2007 年 3 月 22 日的输出。

Dim dateString As String
Dim offsetDate As DateTimeOffset

' String with date only
dateString = "05/01/2008"
offsetDate = DateTimeOffset.Parse(dateString)
Console.WriteLine(offsetDate.ToString())   ' Displays 5/1/2008 12:00:00 AM -07:00

' String with time only
dateString = "11:36 PM"
offsetDate = DateTimeOffset.Parse(dateString)
Console.WriteLine(offsetDate.ToString())   ' Displays 3/26/2007 11:36:00 PM -07:00

' String with date and offset
dateString = "05/01/2008 +7:00"
offsetDate = DateTimeOffset.Parse(dateString)
Console.WriteLine(offsetDate.ToString())   ' Displays 5/1/2008 12:00:00 AM +07:00

' String with day abbreviation
dateString = "Thu May 01, 2008"
offsetDate = DateTimeOffset.Parse(dateString)
Console.WriteLine(offsetDate.ToString())   ' Displays 5/1/2008 12:00:00 AM -07:00

string dateString;
DateTimeOffset offsetDate;

// String with date only
dateString = "05/01/2008";
offsetDate = DateTimeOffset.Parse(dateString);
Console.WriteLine(offsetDate.ToString());

// String with time only
dateString = "11:36 PM";
offsetDate = DateTimeOffset.Parse(dateString);
Console.WriteLine(offsetDate.ToString());

// String with date and offset
dateString = "05/01/2008 +1:00";
offsetDate = DateTimeOffset.Parse(dateString);
Console.WriteLine(offsetDate.ToString());

// String with day abbreviation
dateString = "Thu May 01, 2008";
offsetDate = DateTimeOffset.Parse(dateString);
Console.WriteLine(offsetDate.ToString());

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Parse 重载
System 命名空间
ParseExact


DateTimeOffset ..::.Parse 方法 (String, IFormatProvider)

DateTimeOffset
.
.
::
.
Parse 方法 (String, IFormatProvider)
DateTimeOffset 结构

使用指定的区域性特定格式信息，将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    input As String, _
    formatProvider As IFormatProvider _
) As DateTimeOffset
public static DateTimeOffset Parse(
    string input,
    IFormatProvider formatProvider
)
public:
static DateTimeOffset Parse(
    String^ input,
    IFormatProvider^ formatProvider
)
static member Parse :
        input:string *
        formatProvider:IFormatProvider -> DateTimeOffset

参数

input
类型： System String
包含要转换的日期和时间的字符串。
formatProvider
类型： System IFormatProvider
一个对象，提供有关 input 的区域性特定的格式信息。

返回值

类型： System DateTimeOffset
一个对象，它等效于 input 中包含的日期和时间，由 formatProvider 指定。
异常 | 条件
ArgumentException | 偏移量大于 14 小时或小于 -14 小时。
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 不包含日期和时间的有效字符串表示形式。 - 或 - input 包含不带日期或时间的偏移量值的字符串表示形式。

此方法分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空白分隔。这三个元素如下表所示。 此方法分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空白分隔。这三个元素如下表所示。

元素 | 示例
<Date> | "2/10/2007"
<Time> | "1:02:03 PM"
<Offset> | "-7:30:15"

虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。<Offset> 可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。

这三个元素的格式由 formatProvider 参数来定义，此参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示在 input 参数中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义了用于 input 中的格式设置。 一个 CultureInfo 对象，表示在 input 参数中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义了用于 input 中的格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

如果 formatprovider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。日期和时间元素的特定有效格式是由 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法返回的字符串数组的成员定义的。 如果 formatprovider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。日期和时间元素的特定有效格式是由 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法返回的字符串数组的成员定义的。

<Offset> 中所使用的正号或负号必须为 + 或 -。它不是由 formatProvider 参数的 NumberFormatInfo 对象的 PositiveSign 或 NegativeSign 属性来定义。 <Offset> 中所使用的正号或负号必须为 + 或 -。它不是由 formatProvider 参数的 NumberFormatInfo 对象的 PositiveSign 或 NegativeSign 属性来定义。

下面的示例分析针对“fr-fr”区域性进行格式设置的日期和时间字符串，并使用本地系统的默认“en-us”区域性来显示这些字符串。

Dim fmt As DateTimeFormatInfo = New CultureInfo("fr-fr").DateTimeFormat
Dim dateString As String
Dim offsetDate As DateTimeOffset

dateString = "03-12-07"
offsetDate = DateTimeOffset.Parse(dateString, fmt)
Console.WriteLine("{0} returns {1}", _
                  dateString, _
                  offsetDate.ToString())

dateString = "15/09/07 08:45:00 +1:00"
offsetDate = DateTimeOffset.Parse(dateString, fmt)
Console.WriteLine("{0} returns {1}", _
                  dateString, _
                  offsetDate.ToString())

dateString = "mar. 1 janvier 2008 1:00:00 +1:00"
offsetDate = DateTimeOffset.Parse(dateString, fmt)
Console.WriteLine("{0} returns {1}", _
                  dateString, _
                  offsetDate.ToString())
' The example displays the following output to the console:
'    03-12-07 returns 12/3/2007 12:00:00 AM -08:00
'    15/09/07 08:45:00 +1:00 returns 9/15/2007 8:45:00 AM +01:00
'    mar. 1 janvier 2008 1:00:00 +1:00 returns 1/1/2008 1:00:00 AM +01:00

DateTimeFormatInfo fmt = new CultureInfo("fr-fr").DateTimeFormat;
string dateString;
DateTimeOffset offsetDate;

dateString = "03-12-07";
offsetDate = DateTimeOffset.Parse(dateString, fmt);
Console.WriteLine("{0} returns {1}",
                  dateString,
                  offsetDate.ToString());

dateString = "15/09/07 08:45:00 +1:00";
offsetDate = DateTimeOffset.Parse(dateString, fmt);
Console.WriteLine("{0} returns {1}",
                  dateString,
                  offsetDate.ToString());

dateString = "mar. 1 janvier 2008 1:00:00 +1:00";
offsetDate = DateTimeOffset.Parse(dateString, fmt);
Console.WriteLine("{0} returns {1}",
                  dateString,
                  offsetDate.ToString());
// The example displays the following output to the console:
//    03-12-07 returns 12/3/2007 12:00:00 AM -08:00
//    15/09/07 08:45:00 +1:00 returns 9/15/2007 8:45:00 AM +01:00
//    mar. 1 janvier 2008 1:00:00 +1:00 returns 1/1/2008 1:00:00 AM +01:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Parse 重载
System 命名空间


DateTimeOffset ..::.Parse 方法 (String, IFormatProvider, DateTimeStyles)

DateTimeOffset
.
.
::
.
Parse 方法 (String, IFormatProvider, DateTimeStyles)
DateTimeOffset 结构

使用指定的区域性特定格式信息和格式设置样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    input As String, _
    formatProvider As IFormatProvider, _
    styles As DateTimeStyles _
) As DateTimeOffset
public static DateTimeOffset Parse(
    string input,
    IFormatProvider formatProvider,
    DateTimeStyles styles
)
public:
static DateTimeOffset Parse(
    String^ input,
    IFormatProvider^ formatProvider,
    DateTimeStyles styles
)
static member Parse :
        input:string *
        formatProvider:IFormatProvider *
        styles:DateTimeStyles -> DateTimeOffset

参数

input
类型： System String
包含要转换的日期和时间的字符串。
formatProvider
类型： System IFormatProvider
一个对象，提供有关 input 的区域性特定的格式信息。
styles
类型： System.Globalization DateTimeStyles
枚举值的一个按位组合，指示 input 所允许的格式。一个要指定的典型值为 None。 枚举值的一个按位组合，指示 input 所允许的格式。一个要指定的典型值为 None。

返回值

类型： System DateTimeOffset
一个对象，它等效于 input 中包含的日期和时间，由 formatProvider 和 styles 指定。
异常 | 条件
ArgumentException | 偏移量大于 14 小时或小于 -14 小时。 - 或 - styles 不是有效的 DateTimeStyles 值。 - 或 - styles 包括不受支持的 DateTimeStyles 值。 - 或 - styles 包括不能在一起使用的 DateTimeStyles 值。
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 不包含日期和时间的有效字符串表示形式。 - 或 - input 包含不带日期或时间的偏移量值的字符串表示形式。

此方法分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空白分隔。这三个元素如下表所示。 此方法分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空白分隔。这三个元素如下表所示。

元素 | 示例
<Date> | "2/10/2007"
<Time> | "1:02:03 PM"
<Offset> | "-7:30:15"

虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 参数中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 TimeSpan..::.Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 参数中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 TimeSpan..::.Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 参数中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 TimeSpan..::.Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 参数中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 TimeSpan..::.Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 参数中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 TimeSpan..::.Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 参数中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 TimeSpan..::.Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 参数中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 TimeSpan..::.Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号。

这三个元素的格式由 formatProvider 参数来定义，此参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示在 input 参数中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义了用于 input 中的格式设置。 一个 CultureInfo 对象，表示在 input 参数中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义了用于 input 中的格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

每个元素两边也可使用前导或尾随空白，<Date> 和 <Time> 元素可包含内部空白（如 6: 00:00）。只有 <Offset> 部分不能包含内部空白。 每个元素两边也可使用前导或尾随空白，<Date> 和 <Time> 元素可包含内部空白（如 6: 00:00）。只有 <Offset> 部分不能包含内部空白。

如果 formatprovider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。日期和时间元素的特定有效格式是由 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法返回的字符串数组的成员定义的。 如果 formatprovider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。日期和时间元素的特定有效格式是由 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法返回的字符串数组的成员定义的。

<Offset> 中所使用的正号或负号必须为 + 或 -。它不是由 formatProvider 参数所返回的 NumberFormatInfo 对象的 PositiveSign 或 NegativeSign 属性来定义。 <Offset> 中所使用的正号或负号必须为 + 或 -。它不是由 formatProvider 参数所返回的 NumberFormatInfo 对象的 PositiveSign 或 NegativeSign 属性来定义。

下表显示了所支持的 System.Globalization..::.DateTimeStyles 枚举成员。

DateTimeStyles 成员 | Description
AdjustToUniversal | 分析由 input 所表示的字符串，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。 分析由 input 所表示的字符串，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。
AllowInnerWhite | 虽然有效，但忽略了此值。在 <Date> 和 <Time> 元素中允许存在内部空白。 虽然有效，但忽略了此值。在 <Date> 和 <Time> 元素中允许存在内部空白。
AllowLeadingWhite | 虽然有效，但忽略了此值。在所分析的字符串中的每个组成部分前面允许存在前导空白。 虽然有效，但忽略了此值。在所分析的字符串中的每个组成部分前面允许存在前导空白。
AllowTrailingWhite | 虽然有效，但忽略了此值。在所分析的字符串中的每个组成部分前面允许存在尾随空白。 虽然有效，但忽略了此值。在所分析的字符串中的每个组成部分前面允许存在尾随空白。
AllowWhiteSpaces | 这是默认行为。不能够通过提供限制性更强的 DateTimeStyles 枚举值（例如 DateTimeStyles..::.None）来重写它。 这是默认行为。不能够通过提供限制性更强的 DateTimeStyles 枚举值（例如 DateTimeStyles..::.None）来重写它。
AssumeLocal | 指示在 input 参数缺少 <Offset> 元素的情况下应该提供本地时区的偏移量。这是 Parse 方法的默认行为。 指示在 input 参数缺少 <Offset> 元素的情况下应该提供本地时区的偏移量。这是 Parse 方法的默认行为。
AssumeUniversal | 指示在 input 参数缺少 <Offset> 元素的情况下应该提供 UTC 偏移量 (00:00)。
None | 虽然有效，但此值被忽略，因此没有作用。
RoundtripKind | 因为 DateTimeOffset 结构不包括 Kind 属性，所以此值没有作用。

只有 DateTimeStyles..::.NoCurrentDateDefault 值不受支持。如果 styles 参数包括此值，则引发 ArgumentException。 只有 DateTimeStyles..::.NoCurrentDateDefault 值不受支持。如果 styles 参数包括此值，则引发 ArgumentException。

下面的示例演示了将 DateTimeStyles..::.AssumeLocal、DateTimeStyles..::.AssumeUniversal 和 DateTimeStyles..::.AdjustToUniversal 值传递给 Parse(String, IFormatProvider, DateTimeStyles) 方法的 styles 参数的效果。

Dim dateString As String
Dim offsetDate As DateTimeOffset

dateString = "05/01/2008 6:00:00"
' Assume time is local
offsetDate = DateTimeOffset.Parse(dateString, Nothing, DateTimeStyles.AssumeLocal)
Console.WriteLine(offsetDate.ToString())   ' Displays 5/1/2008 6:00:00 AM -07:00

' Assume time is UTC
offsetDate = DateTimeOffset.Parse(dateString, Nothing, DateTimeStyles.AssumeUniversal)
Console.WriteLine(offsetDate.ToString())   ' Displays 5/1/2008 6:00:00 AM +00:00

' Parse and convert to UTC
dateString = "05/01/2008 6:00:00AM +5:00"
offsetDate = DateTimeOffset.Parse(dateString, Nothing, DateTimeStyles.AdjustToUniversal)
Console.WriteLine(offsetDate.ToString())   ' Displays 5/1/2008 1:00:00 AM +00:00

string dateString;
DateTimeOffset offsetDate;

dateString = "05/01/2008 6:00:00";
// Assume time is local
offsetDate = DateTimeOffset.Parse(dateString, null, DateTimeStyles.AssumeLocal);
Console.WriteLine(offsetDate.ToString());   // Displays 5/1/2008 6:00:00 AM -07:00

// Assume time is UTC
offsetDate = DateTimeOffset.Parse(dateString, null, DateTimeStyles.AssumeUniversal);
Console.WriteLine(offsetDate.ToString());   // Displays 5/1/2008 6:00:00 AM +00:00

// Parse and convert to UTC
dateString = "05/01/2008 6:00:00AM +5:00";
offsetDate = DateTimeOffset.Parse(dateString, null, DateTimeStyles.AdjustToUniversal);
Console.WriteLine(offsetDate.ToString());   // Displays 5/1/2008 1:00:00 AM +00:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Parse 重载
System 命名空间


DateTimeOffset ..::.ParseExact 方法

DateTimeOffset
.
.
::
.
ParseExact 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。 将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。

名称 说明
页首

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.ParseExact 方法 (String, String, IFormatProvider)

DateTimeOffset
.
.
::
.
ParseExact 方法 (String, String, IFormatProvider)
DateTimeOffset 结构

使用指定的区域性特定格式信息，将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。 使用指定的区域性特定格式信息，将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    input As String, _
    format As String, _
    formatProvider As IFormatProvider _
) As DateTimeOffset
public static DateTimeOffset ParseExact(
    string input,
    string format,
    IFormatProvider formatProvider
)
public:
static DateTimeOffset ParseExact(
    String^ input,
    String^ format,
    IFormatProvider^ formatProvider
)
static member ParseExact :
        input:string *
        format:string *
        formatProvider:IFormatProvider -> DateTimeOffset

参数

input
类型： System String
包含要转换的日期和时间的字符串。
format
类型： System String
用于定义所需的 input 格式的格式说明符。
formatProvider
类型： System IFormatProvider
一个对象，提供有关 input 的区域性特定格式设置信息。

返回值

类型： System DateTimeOffset
一个对象，它等效于 input 中包含的日期和时间，由 format 和 formatProvider 指定。
异常 | 条件
ArgumentException | 偏移量大于 14 小时或小于 -14 小时。
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 为空字符串 ("")。 - 或 - input 不包含日期和时间的有效字符串表示形式。 - 或 - format 是空字符串。 - 或 - input 中的小时组成部分和 AM/PM 指示符不一致。

ParseExact(String, String, IFormatProvider) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与此 format 参数不匹配，则该方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。 ParseExact(String, String, IFormatProvider) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与此 format 参数不匹配，则该方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。 ParseExact(String, String, IFormatProvider) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与此 format 参数不匹配，则该方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。 ParseExact(String, String, IFormatProvider) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与此 format 参数不匹配，则该方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。 ParseExact(String, String, IFormatProvider) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与此 format 参数不匹配，则该方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。

format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的要求格式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的要求格式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的要求格式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的要求格式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。

如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则会为所生成的 DateTimeOffset 对象分配本地系统的时区偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则会为所生成的 DateTimeOffset 对象分配本地系统的时区偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则会为所生成的 DateTimeOffset 对象分配本地系统的时区偏移量。

用于 input 中的特定日期和时间符号以及字符串是由 formatProvider 参数定义的，如果 format 是标准格式说明符字符串，则 input 的精度格式也是由该参数定义的。formatProvider 参数可以是下面的任何一项： 用于 input 中的特定日期和时间符号以及字符串是由 formatProvider 参数定义的，如果 format 是标准格式说明符字符串，则 input 的精度格式也是由该参数定义的。formatProvider 参数可以是下面的任何一项：

  • 一个 CultureInfo 对象，表示解释 input 所依据的区域性。该对象的 DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中的符号和格式设置。 一个 CultureInfo 对象，表示解释 input 所依据的区域性。该对象的 DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中的符号和格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

如果 formatprovider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例将 DateTimeOffset..::.ParseExact(String, String, IFormatProvider) 方法与标准的和自定义的格式说明符以及固定的区域性一起使用，以分析一些日期和时间字符串。

Dim dateString, format As String
Dim result As DateTimeOffset
Dim provider As CultureInfo = CultureInfo.InvariantCulture

' Parse date-only value with invariant culture.
dateString = "06/15/2008"
format = "d"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider)
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("{0} is not in the correct format.", dateString)
End Try

' Parse date-only value without leading zero in month using "d" format.
' Should throw a FormatException because standard short date pattern of
' invariant culture requires two-digit month.
dateString = "6/15/2008"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider)
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("{0} is not in the correct format.", dateString)
End Try

' Parse date and time with custom specifier.
dateString = "Sun 15 Jun 2008 8:30 AM -06:00"
format = "ddd dd MMM yyyy h:mm tt zzz"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider)
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("{0} is not in the correct format.", dateString)
End Try

' Parse date and time with offset without offset's minutes.
' Should throw a FormatException because "zzz" specifier requires leading
' zero in hours.
dateString = "Sun 15 Jun 2008 8:30 AM -06"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider)
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("{0} is not in the correct format.", dateString)
End Try
' The example displays the following output:
'    06/15/2008 converts to 6/15/2008 12:00:00 AM -07:00.
'    6/15/2008 is not in the correct format.
'    Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 8:30:00 AM -06:00.
'    Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.

string dateString, format;
DateTimeOffset result;
CultureInfo provider = CultureInfo.InvariantCulture;

// Parse date-only value with invariant culture.
dateString = "06/15/2008";
format = "d";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

// Parse date-only value without leading zero in month using "d" format.
// Should throw a FormatException because standard short date pattern of
// invariant culture requires two-digit month.
dateString = "6/15/2008";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

// Parse date and time with custom specifier.
dateString = "Sun 15 Jun 2008 8:30 AM -06:00";
format = "ddd dd MMM yyyy h:mm tt zzz";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

// Parse date and time with offset without offset//s minutes.
// Should throw a FormatException because "zzz" specifier requires leading
// zero in hours.
dateString = "Sun 15 Jun 2008 8:30 AM -06";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("{0} is not in the correct format.", dateString);
}
// The example displays the following output:
//    06/15/2008 converts to 6/15/2008 12:00:00 AM -07:00.
//    6/15/2008 is not in the correct format.
//    Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 8:30:00 AM -06:00.
//    Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
ParseExact 重载
System 命名空间

其他资源

标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTimeOffset ..::.ParseExact 方法 (String, String, IFormatProvider, DateTimeStyles)

DateTimeOffset
.
.
::
.
ParseExact 方法 (String, String, IFormatProvider, DateTimeStyles)
DateTimeOffset 结构

使用指定的格式、区域性特定格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。 使用指定的格式、区域性特定格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    input As String, _
    format As String, _
    formatProvider As IFormatProvider, _
    styles As DateTimeStyles _
) As DateTimeOffset
public static DateTimeOffset ParseExact(
    string input,
    string format,
    IFormatProvider formatProvider,
    DateTimeStyles styles
)
public:
static DateTimeOffset ParseExact(
    String^ input,
    String^ format,
    IFormatProvider^ formatProvider,
    DateTimeStyles styles
)
static member ParseExact :
        input:string *
        format:string *
        formatProvider:IFormatProvider *
        styles:DateTimeStyles -> DateTimeOffset

参数

input
类型： System String
包含要转换的日期和时间的字符串。
format
类型： System String
用于定义所需的 input 格式的格式说明符。
formatProvider
类型： System IFormatProvider
一个对象，提供有关 input 的区域性特定格式设置信息。
styles
类型： System.Globalization DateTimeStyles
枚举值的一个按位组合，指示 input 所允许的格式。

返回值

类型： System DateTimeOffset
一个对象，它等效于 input 参数中包含的日期和时间，由 format、formatProvider 和 styles 参数指定。
异常 | 条件
ArgumentException | 偏移量大于 14 小时或小于 -14 小时。 - 或 - styles 参数包括不受支持的值。 - 或 - styles 参数包含不能在一起使用的 DateTimeStyles 值。
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 为空字符串 ("")。 - 或 - input 不包含日期和时间的有效字符串表示形式。 - 或 - format 是空字符串。 - 或 - input 中的小时组成部分和 AM/PM 指示符不一致。

DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与具有 styles 参数所定义的任何变体的 format 参数的模式不匹配，则此方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与具有 styles 参数所定义的任何变体的 format 参数的模式不匹配，则此方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与具有 styles 参数所定义的任何变体的 format 参数的模式不匹配，则此方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与具有 styles 参数所定义的任何变体的 format 参数的模式不匹配，则此方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式必须采用 format 参数所定义的格式。它还要求日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以 format 所指定的顺序出现。如果 input 字符串与具有 styles 参数所定义的任何变体的 format 参数的模式不匹配，则此方法将引发 FormatException。相反，DateTimeOffset..::.Parse(String, IFormatProvider, DateTimeStyles) 方法分析的日期字符串表示形式可采用格式提供程序的 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的任意格式。Parse 还支持日期和时间的字符串表示形式的 <Date>、<Time> 和 <Offset> 元素以任意顺序显示。

format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的要求模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的要求模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的要求模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的要求模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。

如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。

用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 format 是标准格式说明符字符串，则 input 的精度格式也是由该参数定义的。formatProvider 参数可以是下面的任何一项： 用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 format 是标准格式说明符字符串，则 input 的精度格式也是由该参数定义的。formatProvider 参数可以是下面的任何一项： 用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 format 是标准格式说明符字符串，则 input 的精度格式也是由该参数定义的。formatProvider 参数可以是下面的任何一项：

  • 一个 CultureInfo 对象，表示解释 input 所依据的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中的符号和格式设置。 一个 CultureInfo 对象，表示解释 input 所依据的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中的符号和格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

如果 formatprovider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。 styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。 styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。

DateTimeStyles 成员 | Behavior
AdjustToUniversal | 分析 input，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。 分析 input，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。
AssumeLocal | 如果 format 不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供本地时区的偏移量。这是默认值。 如果 format 不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供本地时区的偏移量。这是默认值。
AssumeUniversal | 如果 format 不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供 UTC 偏移量 (+00:00)。
AllowInnerWhite | 允许 input 包括 format 未指定的内部空白。在日期和时间组成部分之间以及个别组成部分的内部可以出现多余的空白，分析此字符串时，多余的空白会被忽略。 允许 input 包括 format 未指定的内部空白。在日期和时间组成部分之间以及个别组成部分的内部可以出现多余的空白，分析此字符串时，多余的空白会被忽略。
AllowLeadingWhite | 允许 input 包括 format 未指定的前导空格。分析字符串时将忽略这些空格。 允许 input 包括 format 未指定的前导空格。分析字符串时将忽略这些空格。
AllowTrailingWhite | 允许 input 包括 format 未指定的尾随空格。分析字符串时将忽略这些空格。 允许 input 包括 format 未指定的尾随空格。分析字符串时将忽略这些空格。
AllowWhiteSpaces | 允许 input 包括 format 未指定的前导、尾随和内部空格。在分析此字符串时，将忽略 format 中未指定的所有多余空白字符。 允许 input 包括 format 未指定的前导、尾随和内部空格。在分析此字符串时，将忽略 format 中未指定的所有多余空白字符。
None | 指示 input 中不允许有多余的空白。空白必须完全按照 format 中指定的方式出现。这是默认行为。 指示 input 中不允许有多余的空白。空白必须完全按照 format 中指定的方式出现。这是默认行为。 指示 input 中不允许有多余的空白。空白必须完全按照 format 中指定的方式出现。这是默认行为。
RoundtripKind | 没有作用，因为 DateTimeOffset 结构不包括 Kind 属性。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例将 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法与标准的和自定义的格式说明符、固定的区域性以及各个 DateTimeStyles 值一起使用，以分析一些日期和时间字符串。

Dim dateString, format As String
Dim result As DateTimeOffset
Dim provider As CultureInfo = CultureInfo.InvariantCulture

' Parse date-only value with invariant culture and assume time is UTC.
dateString = "06/15/2008"
format = "d"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider, _
                                      DateTimeStyles.AssumeUniversal)
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End Try

' Parse date-only value with leading white space.
' Should throw a FormatException because only trailing whitespace is
' specified in method call.
dateString = " 06/15/2008"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider, _
                                      DateTimeStyles.AllowTrailingWhite)
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End Try

' Parse date and time value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00"
format = "MM/dd/yyyy H:mm zzz"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider, _
                                      DateTimeStyles.AllowWhiteSpaces)
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End Try

' Parse date and time and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00"
format = "MM/dd/yyyy H:mm:ss zzz"
Try
   result = DateTimeOffset.ParseExact(dateString, format, provider, _
                                      DateTimeStyles.AllowWhiteSpaces Or _
                                      DateTimeStyles.AdjustToUniversal)
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Catch e As FormatException
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End Try
' The example displays the following output:
'    '06/15/2008' converts to 6/15/2008 12:00:00 AM +00:00.
'    ' 06/15/2008' is not in the correct format.
'    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
'    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.

string dateString, format;
DateTimeOffset result;
CultureInfo provider = CultureInfo.InvariantCulture;

// Parse date-only value with invariant culture and assume time is UTC.
dateString = "06/15/2008";
format = "d";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider,
                                      DateTimeStyles.AssumeUniversal);
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("'{0}' is not in the correct format.", dateString);
}

// Parse date-only value with leading white space.
// Should throw a FormatException because only trailing whitespace is
// specified in method call.
dateString = " 06/15/2008";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider,
                                      DateTimeStyles.AllowTrailingWhite);
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("'{0}' is not in the correct format.", dateString);
}

// Parse date and time value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00";
format = "MM/dd/yyyy H:mm zzz";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider,
                                      DateTimeStyles.AllowWhiteSpaces);
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("'{0}' is not in the correct format.", dateString);
}

// Parse date and time and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00";
format = "MM/dd/yyyy H:mm:ss zzz";
try
{
   result = DateTimeOffset.ParseExact(dateString, format, provider,
                                      DateTimeStyles.AllowWhiteSpaces |
                                      DateTimeStyles.AdjustToUniversal);
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("'{0}' is not in the correct format.", dateString);
}
// The example displays the following output:
//    '06/15/2008' converts to 6/15/2008 12:00:00 AM +00:00.
//    ' 06/15/2008' is not in the correct format.
//    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
//    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
ParseExact 重载
System 命名空间

其他资源

标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTimeOffset ..::.ParseExact 方法 (String, array<String >[]()[], IFormatProvider, DateTimeStyles)

DateTimeOffset
.
.
::
.
ParseExact 方法 (String,
array<
String
>
[]
()
[]
, IFormatProvider, DateTimeStyles)
DateTimeOffset 结构

使用指定的格式、区域性特定格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与一种指定的格式完全匹配。 使用指定的格式、区域性特定格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与一种指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    input As String, _
    formats As String(), _
    formatProvider As IFormatProvider, _
    styles As DateTimeStyles _
) As DateTimeOffset
public static DateTimeOffset ParseExact(
    string input,
    string[] formats,
    IFormatProvider formatProvider,
    DateTimeStyles styles
)
public:
static DateTimeOffset ParseExact(
    String^ input,
    array<String^>^ formats,
    IFormatProvider^ formatProvider,
    DateTimeStyles styles
)
static member ParseExact :
        input:string *
        formats:string[] *
        formatProvider:IFormatProvider *
        styles:DateTimeStyles -> DateTimeOffset

参数

input
类型： System String
包含要转换的日期和时间的字符串。
formats
类型：
array<
System String
>
[]
()
[]

一个由格式说明符组成的数组，格式说明符用于定义 input 的所需格式。
formatProvider
类型： System IFormatProvider
一个对象，提供有关 input 的区域性特定格式设置信息。
styles
类型： System.Globalization DateTimeStyles
枚举值的一个按位组合，指示 input 所允许的格式。

返回值

类型： System DateTimeOffset
一个对象，它等效于 input 参数中包含的日期和时间，由 formats、formatProvider 和 styles 参数指定。
异常 | 条件
ArgumentException | 偏移量大于 14 小时或小于 -14 小时。 - 或 - styles 包括不受支持的值。 - 或 - styles 参数包含不能在一起使用的 DateTimeStyles 值。
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 为空字符串 ("")。 - 或 - input 不包含日期和时间的有效字符串表示形式。 - 或 - formats 的元素不包含有效的格式说明符。 - 或 - input 中的小时组成部分和 AM/PM 指示符不一致。

DateTimeOffset..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法分析与分配给 formats 参数的任何一种模式匹配的日期字符串表示形式。如果 input 字符串与这些模式中的任何一种模式（具有 styles 参数所定义的任何变体）都不匹配，则此方法将引发 FormatException。除了将 input 与多种格式设置模式进行比较外，此重载的行为方式与 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法相同。 DateTimeOffset..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法分析与分配给 formats 参数的任何一种模式匹配的日期字符串表示形式。如果 input 字符串与这些模式中的任何一种模式（具有 styles 参数所定义的任何变体）都不匹配，则此方法将引发 FormatException。除了将 input 与多种格式设置模式进行比较外，此重载的行为方式与 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法相同。 DateTimeOffset..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法分析与分配给 formats 参数的任何一种模式匹配的日期字符串表示形式。如果 input 字符串与这些模式中的任何一种模式（具有 styles 参数所定义的任何变体）都不匹配，则此方法将引发 FormatException。除了将 input 与多种格式设置模式进行比较外，此重载的行为方式与 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法相同。

formats 参数是一个字符串数组，它的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的可能模式的自定义格式说明符。在调用方法时，input 必须与这些模式之一匹配。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 formats 中的匹配元素包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 formats 参数是一个字符串数组，它的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的可能模式的自定义格式说明符。在调用方法时，input 必须与这些模式之一匹配。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 formats 中的匹配元素包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 formats 参数是一个字符串数组，它的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的可能模式的自定义格式说明符。在调用方法时，input 必须与这些模式之一匹配。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 formats 中的匹配元素包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 formats 参数是一个字符串数组，它的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的可能模式的自定义格式说明符。在调用方法时，input 必须与这些模式之一匹配。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 formats 中的匹配元素包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。 formats 参数是一个字符串数组，它的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 参数的可能模式的自定义格式说明符。在调用方法时，input 必须与这些模式之一匹配。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 formats 中的匹配元素包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，此方法将引发 FormatException。

重要说明 重要事项

如果使用此重载的 formats 参数来指定多种格式，则可以有助于减少许多用户在输入日期和时间时遇到的挫折。尤其是，通过使用定义多种输入模式的功能，应用程序可以处理日期和时间的表示形式，这些表示形式在月、日、小时、分和秒中既可以包括也可以不包括前导零。该示例为此提供了说明。 如果使用此重载的 formats 参数来指定多种格式，则可以有助于减少许多用户在输入日期和时间时遇到的挫折。尤其是，通过使用定义多种输入模式的功能，应用程序可以处理日期和时间的表示形式，这些表示形式在月、日、小时、分和秒中既可以包括也可以不包括前导零。该示例为此提供了说明。 如果使用此重载的 formats 参数来指定多种格式，则可以有助于减少许多用户在输入日期和时间时遇到的挫折。尤其是，通过使用定义多种输入模式的功能，应用程序可以处理日期和时间的表示形式，这些表示形式在月、日、小时、分和秒中既可以包括也可以不包括前导零。该示例为此提供了说明。

如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。

用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 formats 的匹配元素是标准格式说明符字符串，则 input 的精度格式也是由该参数定义的。formatProvider 参数可以是下面的任何一项： 用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 formats 的匹配元素是标准格式说明符字符串，则 input 的精度格式也是由该参数定义的。formatProvider 参数可以是下面的任何一项： 用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 formats 的匹配元素是标准格式说明符字符串，则 input 的精度格式也是由该参数定义的。formatProvider 参数可以是下面的任何一项：

  • 一个 CultureInfo 对象，表示解释 input 所依据的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中的符号和格式设置。 一个 CultureInfo 对象，表示解释 input 所依据的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中的符号和格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

如果 formatprovider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。 styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。 styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。

DateTimeStyles 成员 | Behavior
AdjustToUniversal | 分析 input，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。 分析 input，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。
AssumeLocal | 如果 formats 中的匹配元素不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供本地时区的偏移量。这是默认值。 如果 formats 中的匹配元素不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供本地时区的偏移量。这是默认值。
AssumeUniversal | 如果 formats 中的匹配元素不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供 UTC 偏移量 (+00:00)。
AllowInnerWhite | 允许 input 包括 format 未指定的内部空白。在日期和时间组成部分之间以及个别组成部分（偏移量除外）的内部可以出现多余的空白，分析此字符串时，多余的空白会被忽略。 允许 input 包括 format 未指定的内部空白。在日期和时间组成部分之间以及个别组成部分（偏移量除外）的内部可以出现多余的空白，分析此字符串时，多余的空白会被忽略。
AllowLeadingWhite | 允许 input 包括 formats 未指定的前导空格。分析字符串时将忽略这些空格。 允许 input 包括 formats 未指定的前导空格。分析字符串时将忽略这些空格。
AllowTrailingWhite | 允许 input 包括 formats 未指定的尾随空格。分析字符串时将忽略这些空格。 允许 input 包括 formats 未指定的尾随空格。分析字符串时将忽略这些空格。
AllowWhiteSpaces | 允许 input 包括 formats 未指定的前导、尾随和内部空格。在分析此字符串时，将忽略 formats 内的匹配元素中未指定的所有多余空白字符。 允许 input 包括 formats 未指定的前导、尾随和内部空格。在分析此字符串时，将忽略 formats 内的匹配元素中未指定的所有多余空白字符。
None | 指示 input 中不允许有多余的空白。空白必须完全按照 formats 的特定元素中指定的方式出现，才能发生匹配。这是默认行为。 指示 input 中不允许有多余的空白。空白必须完全按照 formats 的特定元素中指定的方式出现，才能发生匹配。这是默认行为。 指示 input 中不允许有多余的空白。空白必须完全按照 formats 的特定元素中指定的方式出现，才能发生匹配。这是默认行为。
RoundtripKind | 没有作用，因为 DateTimeOffset 结构不包括 Kind 属性。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，ParseExact 方法引发 FormatException。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例为日期和时间以及偏移量值的字符串表示形式定义了多种输入格式，然后将用户输入的字符串传递给 DateTimeOffset..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法。

Dim conIn As TextReader = Console.In
Dim conOut As TextWriter = Console.Out
Dim tries As Integer = 0
Dim input As String = String.Empty
Dim formats() As String = {"M/dd/yyyy HH:m zzz", "MM/dd/yyyy HH:m zzz", _
                           "M/d/yyyy HH:m zzz", "MM/d/yyyy HH:m zzz", _
                           "M/dd/yy HH:m zzz", "MM/dd/yy HH:m zzz", _
                           "M/d/yy HH:m zzz", "MM/d/yy HH:m zzz", _
                           "M/dd/yyyy H:m zzz", "MM/dd/yyyy H:m zzz", _
                           "M/d/yyyy H:m zzz", "MM/d/yyyy H:m zzz", _
                           "M/dd/yy H:m zzz", "MM/dd/yy H:m zzz", _
                           "M/d/yy H:m zzz", "MM/d/yy H:m zzz", _
                           "M/dd/yyyy HH:mm zzz", "MM/dd/yyyy HH:mm zzz", _
                           "M/d/yyyy HH:mm zzz", "MM/d/yyyy HH:mm zzz", _
                           "M/dd/yy HH:mm zzz", "MM/dd/yy HH:mm zzz", _
                           "M/d/yy HH:mm zzz", "MM/d/yy HH:mm zzz", _
                           "M/dd/yyyy H:mm zzz", "MM/dd/yyyy H:mm zzz", _
                           "M/d/yyyy H:mm zzz", "MM/d/yyyy H:mm zzz", _
                           "M/dd/yy H:mm zzz", "MM/dd/yy H:mm zzz", _
                           "M/d/yy H:mm zzz", "MM/d/yy H:mm zzz"}
Dim provider As IFormatProvider = CultureInfo.InvariantCulture.DateTimeFormat
Dim result As DateTimeOffset

Do
   conOut.WriteLine("Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),")
   conOut.Write("Then press Enter: ")
   input = conIn.ReadLine()
   conOut.WriteLine()
   Try
      result = DateTimeOffset.ParseExact(input, formats, provider, _
                                         DateTimeStyles.AllowWhiteSpaces)
      Exit Do
   Catch e As FormatException
      Console.WriteLine("Unable to parse {0}.", input)
      tries += 1
   End Try
Loop While tries < 3
If tries >= 3 Then
   Console.WriteLine("Exiting application without parsing {0}", input)
Else
   Console.WriteLine("{0} was converted to {1}", input, result.ToString())
End If
' Some successful sample interactions with the user might appear as follows:
'    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
'    Then press Enter: 12/08/2007 6:54 -6:00
'
'    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00
'
'    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
'    Then press Enter: 12/8/2007 06:54 -06:00
'
'    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
'
'    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
'    Then press Enter: 12/5/07 6:54 -6:00
'
'    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00

TextReader conIn = Console.In;
TextWriter conOut = Console.Out;
int tries = 0;
string input = String.Empty;
string[] formats = new string[] {@"@M/dd/yyyy HH:m zzz", @"MM/dd/yyyy HH:m zzz",
                                 @"M/d/yyyy HH:m zzz", @"MM/d/yyyy HH:m zzz",
                                 @"M/dd/yy HH:m zzz", @"MM/dd/yy HH:m zzz",
                                 @"M/d/yy HH:m zzz", @"MM/d/yy HH:m zzz",
                                 @"M/dd/yyyy H:m zzz", @"MM/dd/yyyy H:m zzz",
                                 @"M/d/yyyy H:m zzz", @"MM/d/yyyy H:m zzz",
                                 @"M/dd/yy H:m zzz", @"MM/dd/yy H:m zzz",
                                 @"M/d/yy H:m zzz", @"MM/d/yy H:m zzz",
                                 @"M/dd/yyyy HH:mm zzz", @"MM/dd/yyyy HH:mm zzz",
                                 @"M/d/yyyy HH:mm zzz", @"MM/d/yyyy HH:mm zzz",
                                 @"M/dd/yy HH:mm zzz", @"MM/dd/yy HH:mm zzz",
                                 @"M/d/yy HH:mm zzz", @"MM/d/yy HH:mm zzz",
                                 @"M/dd/yyyy H:mm zzz", @"MM/dd/yyyy H:mm zzz",
                                 @"M/d/yyyy H:mm zzz", @"MM/d/yyyy H:mm zzz",
                                 @"M/dd/yy H:mm zzz", @"MM/dd/yy H:mm zzz",
                                 @"M/d/yy H:mm zzz", @"MM/d/yy H:mm zzz"};
IFormatProvider provider = CultureInfo.InvariantCulture.DateTimeFormat;
DateTimeOffset result = new DateTimeOffset();

do {
   conOut.WriteLine("Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),");
   conOut.Write("Then press Enter: ");
   input = conIn.ReadLine();
   conOut.WriteLine();
   try
   {
      result = DateTimeOffset.ParseExact(input, formats, provider,
                                         DateTimeStyles.AllowWhiteSpaces);
      break;
   }
   catch (FormatException)
   {
      Console.WriteLine("Unable to parse {0}.", input);
      tries++;
   }
} while (tries < 3);
if (tries >= 3)
   Console.WriteLine("Exiting application without parsing {0}", input);
else
   Console.WriteLine("{0} was converted to {1}", input, result.ToString());
// Some successful sample interactions with the user might appear as follows:
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/08/2007 6:54 -6:00
//
//    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/8/2007 06:54 -06:00
//
//    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/5/07 6:54 -6:00
//
//    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
ParseExact 重载
System 命名空间

其他资源

标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTimeOffset ..::.Subtract 方法

DateTimeOffset
.
.
::
.
Subtract 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

从当前的 DateTimeOffset 对象中减去指定的时间或持续时间。

名称 说明
页首

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Subtract 方法 (DateTimeOffset)

DateTimeOffset
.
.
::
.
Subtract 方法 (DateTimeOffset)
DateTimeOffset 结构

从当前的 DateTimeOffset 对象中减去表示特定日期和时间的 DateTimeOffset 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Subtract ( _
    value As DateTimeOffset _
) As TimeSpan
public TimeSpan Subtract(
    DateTimeOffset value
)
public:
TimeSpan Subtract(
    DateTimeOffset value
)
member Subtract :
        value:DateTimeOffset -> TimeSpan

参数

value
类型： System DateTimeOffset
一个对象，表示要减去的值。

返回值

类型： System TimeSpan
一个对象，它指定两个 DateTimeOffset 对象之间的间隔。

在计算这两个 DateTimeOffset 对象之间的时间间隔之前，此方法会将这两个对象转换为协调世界时 (UTC)。这样可以消除不同的 UTC 偏移量对比较可能造成的任何影响。 在计算这两个 DateTimeOffset 对象之间的时间间隔之前，此方法会将这两个对象转换为协调世界时 (UTC)。这样可以消除不同的 UTC 偏移量对比较可能造成的任何影响。

说明 说明

对于支持自定义运算符的语言，也可以使用减法运算符对日期和时间执行减法运算。有关详细信息，请参见 Subtraction 方法。 对于支持自定义运算符的语言，也可以使用减法运算符对日期和时间执行减法运算。有关详细信息，请参见 Subtraction 方法。

因为当前的 DateTimeOffset 对象或 value 参数都不表示特定时区中的日期和时间，所以 Subtract(DateTimeOffset) 方法在对日期和时间进行相减时不考虑特定时区的调整规则。

下面的示例演示使用 Subtract(DateTimeOffset) 方法进行的减法运算。

Dim offsetDate As New DateTimeOffset(#12/3/2007 11:30AM#, _
                               New TimeSpan(-8, 0, 0))
Dim duration As New TimeSpan(7, 18, 0, 0)
Console.WriteLine(offsetDate.Subtract(duration))    ' Displays 11/25/2007 5:30:00 PM -08:00

DateTimeOffset offsetDate = new DateTimeOffset(2007, 12, 3, 11, 30, 0,
                               new TimeSpan(-8, 0, 0));
TimeSpan duration = new TimeSpan(7, 18, 0, 0);
Console.WriteLine(offsetDate.Subtract(duration).ToString());  // Displays 11/25/2007 5:30:00 PM -08:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Subtract 重载
System 命名空间

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.Subtract 方法 (TimeSpan)

DateTimeOffset
.
.
::
.
Subtract 方法 (TimeSpan)
DateTimeOffset 结构

从当前的 DateTimeOffset 对象中减去指定的时间间隔。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Subtract ( _
    value As TimeSpan _
) As DateTimeOffset
public DateTimeOffset Subtract(
    TimeSpan value
)
public:
DateTimeOffset Subtract(
    TimeSpan value
)
member Subtract :
        value:TimeSpan -> DateTimeOffset

参数

value
类型： System TimeSpan
要减去的时间间隔。

返回值

类型： System DateTimeOffset
一个对象，它等于当前的 DateTimeOffset 对象所表示的日期和时间减去 value 所表示的时间间隔。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

您可以使用 Subtract 方法在单个运算中减去多种时间间隔（天、小时、分钟、秒或毫秒）。其行为与定义减法运算符的 Subtraction(DateTimeOffset, TimeSpan) 方法相同。DateTimeOffset 结构还支持一些专用加法（例如 AddDays、AddHours 和 AddMinutes），通过为方法参数赋予负值，您可以用这些加法执行减法运算。 您可以使用 Subtract 方法在单个运算中减去多种时间间隔（天、小时、分钟、秒或毫秒）。其行为与定义减法运算符的 Subtraction(DateTimeOffset, TimeSpan) 方法相同。DateTimeOffset 结构还支持一些专用加法（例如 AddDays、AddHours 和 AddMinutes），通过为方法参数赋予负值，您可以用这些加法执行减法运算。 您可以使用 Subtract 方法在单个运算中减去多种时间间隔（天、小时、分钟、秒或毫秒）。其行为与定义减法运算符的 Subtraction(DateTimeOffset, TimeSpan) 方法相同。DateTimeOffset 结构还支持一些专用加法（例如 AddDays、AddHours 和 AddMinutes），通过为方法参数赋予负值，您可以用这些加法执行减法运算。

说明 说明

此方法返回一个新的 DateTimeOffset 对象。它不会通过将 timeSpan 与其日期和时间相加来修改当前对象的值。 此方法返回一个新的 DateTimeOffset 对象。它不会通过将 timeSpan 与其日期和时间相加来修改当前对象的值。

Subtract 方法不影响 DateTimeOffset 对象的 Offset 属性的值。所返回的 DateTimeOffset 对象与原始对象具有相同的偏移量。 Subtract 方法不影响 DateTimeOffset 对象的 Offset 属性的值。所返回的 DateTimeOffset 对象与原始对象具有相同的偏移量。

因为当前的 DateTimeOffset 对象不表示特定时区中的日期和时间，所以 Subtract(TimeSpan) 方法在执行减法运算时不会考虑特定时区的调整规则。

下面的示例演示使用 Subtract 方法进行的减法运算。

' Local time changes on 3/11/2007 at 2:00 AM
Dim originalTime, localTime As DateTimeOffset

originalTime = New DateTimeOffset(#03/11/2007 3:00AM#, _
                                  New TimeSpan(-6, 0, 0))
localTime = originalTime.ToLocalTime()
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(), _
                                           localTime.ToString())

originalTime = New DateTimeOffset(#03/11/2007 4:00AM#, _
                                  New TimeSpan(-6, 0, 0))
localTime = originalTime.ToLocalTime()
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(), _
                                           localTime.ToString())

' Define a summer UTC time
originalTime = New DateTimeOffset(#6/15/2007 8:00AM#, _
                                  TimeSpan.Zero)
localTime = originalTime.ToLocalTime()
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(), _
                                           localTime.ToString())

' Define a winter time
originalTime = New DateTimeOffset(#11/30/2007 2:00PM#, _
                                  New TimeSpan(3, 0, 0))
localTime = originalTime.ToLocalTime()
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(), _
                                           localTime.ToString())
' The example produces the following output:
'    Converted 3/11/2007 3:00:00 AM -06:00 to 3/11/2007 1:00:00 AM -08:00.
'    Converted 3/11/2007 4:00:00 AM -06:00 to 3/11/2007 3:00:00 AM -07:00.
'    Converted 6/15/2007 8:00:00 AM +00:00 to 6/15/2007 1:00:00 AM -07:00.
'    Converted 11/30/2007 2:00:00 PM +03:00 to 11/30/2007 3:00:00 AM -08:00.

// Local time changes on 3/11/2007 at 2:00 AM
DateTimeOffset originalTime, localTime;

originalTime = new DateTimeOffset(2007, 3, 11, 3, 0, 0,
                                  new TimeSpan(-6, 0, 0));
localTime = originalTime.ToLocalTime();
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(),
                                           localTime.ToString());

originalTime = new DateTimeOffset(2007, 3, 11, 4, 0, 0,
                                  new TimeSpan(-6, 0, 0));
localTime = originalTime.ToLocalTime();
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(),
                                           localTime.ToString());

// Define a summer UTC time
originalTime = new DateTimeOffset(2007, 6, 15, 8, 0, 0,
                                  TimeSpan.Zero);
localTime = originalTime.ToLocalTime();
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(),
                                           localTime.ToString());

// Define a winter time
originalTime = new DateTimeOffset(2007, 11, 30, 14, 0, 0,
                                  new TimeSpan(3, 0, 0));
localTime = originalTime.ToLocalTime();
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(),
                                           localTime.ToString());
// The example produces the following output:
//    Converted 3/11/2007 3:00:00 AM -06:00 to 3/11/2007 1:00:00 AM -08:00.
//    Converted 3/11/2007 4:00:00 AM -06:00 to 3/11/2007 3:00:00 AM -07:00.
//    Converted 6/15/2007 8:00:00 AM +00:00 to 6/15/2007 1:00:00 AM -07:00.
//    Converted 11/30/2007 2:00:00 PM +03:00 to 11/30/2007 3:00:00 AM -08:00.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Subtract 重载
System 命名空间

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.ToFileTime 方法

DateTimeOffset
.
.
::
.
ToFileTime 方法
DateTimeOffset 结构

将当前的 DateTimeOffset 对象的值转换为 Windows 文件时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToFileTime As Long
public long ToFileTime()
public:
long long ToFileTime()
member ToFileTime : unit -> int64

返回值

类型： System Int64
用 Windows 文件时间来表示的当前 DateTimeOffset 对象的值。
异常 | 条件
ArgumentOutOfRangeException | 所生成的文件时间将表示协调世界时 (UTC) 公元 1601 年 1 月 1 日午夜之前的日期和时间。 所生成的文件时间将表示协调世界时 (UTC) 公元 1601 年 1 月 1 日午夜之前的日期和时间。

Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。 Windows 文件时间是一个 64 位值，它表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数（以 100 纳秒为一个间隔）。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。

ToFileTime 方法在执行转换之前，会将当前 DateTimeOffset 对象的日期和时间转换为 UTC。换言之，调用 ToFileTime 方法等效于以下方法调用： ToFileTime 方法在执行转换之前，会将当前 DateTimeOffset 对象的日期和时间转换为 UTC。换言之，调用 ToFileTime 方法等效于以下方法调用：

[C#]

this.ToUtcDateTime().ToFileTime();

[Visual Basic]

Me.ToUtcDateTime().ToFileTime()

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
FromFileTime


DateTimeOffset ..::.ToLocalTime 方法

DateTimeOffset
.
.
::
.
ToLocalTime 方法
DateTimeOffset 结构

将当前的 DateTimeOffset 对象转换为表示本地时间的 DateTimeOffset 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToLocalTime As DateTimeOffset
public DateTimeOffset ToLocalTime()
public:
DateTimeOffset ToLocalTime()
member ToLocalTime : unit -> DateTimeOffset

返回值

类型： System DateTimeOffset
一个对象，表示当前的 DateTimeOffset 对象的日期和时间，已转换为本地时间。

在转换为本地时间时，此方法首先从时间中减去偏移量，从而将当前 DateTimeOffset 对象的日期和时间转换为协调世界时 (UTC)。然后再加上本地时区偏移量，从而将 UTC 日期和时间转换为本地时间。在执行此操作过程中，它将考虑本地时区的任何调整规则。 在转换为本地时间时，此方法首先从时间中减去偏移量，从而将当前 DateTimeOffset 对象的日期和时间转换为协调世界时 (UTC)。然后再加上本地时区偏移量，从而将 UTC 日期和时间转换为本地时间。在执行此操作过程中，它将考虑本地时区的任何调整规则。 在转换为本地时间时，此方法首先从时间中减去偏移量，从而将当前 DateTimeOffset 对象的日期和时间转换为协调世界时 (UTC)。然后再加上本地时区偏移量，从而将 UTC 日期和时间转换为本地时间。在执行此操作过程中，它将考虑本地时区的任何调整规则。

当前 DateTimeOffset 对象的值与方法调用返回的 DateTimeOffset 对象的值表示同一时间点。也就是说，如果将两者传递给 DateTimeOffset..::.Equals(DateTimeOffset, DateTimeOffset) 方法，该方法都将返回 true。 当前 DateTimeOffset 对象的值与方法调用返回的 DateTimeOffset 对象的值表示同一时间点。也就是说，如果将两者传递给 DateTimeOffset..::.Equals(DateTimeOffset, DateTimeOffset) 方法，该方法都将返回 true。

如果转换产生了一个不在 DateTimeOffset 类型范围内的某个时间，则 ToLocalTime 方法将返回一个 DateTimeOffset 对象，该对象的日期和时间设置为 MaxValue 或 MinValue，偏移量设置为本地时区偏移量。

下面的示例使用 ToLocalTime 方法将 DateTimeOffset 值转换为太平洋标准时区中的本地时间。它还演示了此方法对本地时区的调整规则的支持。 下面的示例使用 ToLocalTime 方法将 DateTimeOffset 值转换为太平洋标准时区中的本地时间。它还演示了此方法对本地时区的调整规则的支持。

' Local time changes on 3/11/2007 at 2:00 AM
Dim originalTime, localTime As DateTimeOffset

originalTime = New DateTimeOffset(#03/11/2007 3:00AM#, _
                                  New TimeSpan(-6, 0, 0))
localTime = originalTime.ToLocalTime()
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(), _
                                           localTime.ToString())

originalTime = New DateTimeOffset(#03/11/2007 4:00AM#, _
                                  New TimeSpan(-6, 0, 0))
localTime = originalTime.ToLocalTime()
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(), _
                                           localTime.ToString())

' Define a summer UTC time
originalTime = New DateTimeOffset(#6/15/2007 8:00AM#, _
                                  TimeSpan.Zero)
localTime = originalTime.ToLocalTime()
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(), _
                                           localTime.ToString())

' Define a winter time
originalTime = New DateTimeOffset(#11/30/2007 2:00PM#, _
                                  New TimeSpan(3, 0, 0))
localTime = originalTime.ToLocalTime()
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(), _
                                           localTime.ToString())
' The example produces the following output:
'    Converted 3/11/2007 3:00:00 AM -06:00 to 3/11/2007 1:00:00 AM -08:00.
'    Converted 3/11/2007 4:00:00 AM -06:00 to 3/11/2007 3:00:00 AM -07:00.
'    Converted 6/15/2007 8:00:00 AM +00:00 to 6/15/2007 1:00:00 AM -07:00.
'    Converted 11/30/2007 2:00:00 PM +03:00 to 11/30/2007 3:00:00 AM -08:00.

// Local time changes on 3/11/2007 at 2:00 AM
DateTimeOffset originalTime, localTime;

originalTime = new DateTimeOffset(2007, 3, 11, 3, 0, 0,
                                  new TimeSpan(-6, 0, 0));
localTime = originalTime.ToLocalTime();
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(),
                                           localTime.ToString());

originalTime = new DateTimeOffset(2007, 3, 11, 4, 0, 0,
                                  new TimeSpan(-6, 0, 0));
localTime = originalTime.ToLocalTime();
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(),
                                           localTime.ToString());

// Define a summer UTC time
originalTime = new DateTimeOffset(2007, 6, 15, 8, 0, 0,
                                  TimeSpan.Zero);
localTime = originalTime.ToLocalTime();
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(),
                                           localTime.ToString());

// Define a winter time
originalTime = new DateTimeOffset(2007, 11, 30, 14, 0, 0,
                                  new TimeSpan(3, 0, 0));
localTime = originalTime.ToLocalTime();
Console.WriteLine("Converted {0} to {1}.", originalTime.ToString(),
                                           localTime.ToString());
// The example produces the following output:
//    Converted 3/11/2007 3:00:00 AM -06:00 to 3/11/2007 1:00:00 AM -08:00.
//    Converted 3/11/2007 4:00:00 AM -06:00 to 3/11/2007 3:00:00 AM -07:00.
//    Converted 6/15/2007 8:00:00 AM +00:00 to 6/15/2007 1:00:00 AM -07:00.
//    Converted 11/30/2007 2:00:00 PM +03:00 to 11/30/2007 3:00:00 AM -08:00.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
ToUniversalTime


DateTimeOffset ..::.ToOffset 方法

DateTimeOffset
.
.
::
.
ToOffset 方法
DateTimeOffset 结构

将当前 DateTimeOffset 对象的值转换为偏移量值所指定的日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToOffset ( _
    offset As TimeSpan _
) As DateTimeOffset
public DateTimeOffset ToOffset(
    TimeSpan offset
)
public:
DateTimeOffset ToOffset(
    TimeSpan offset
)
member ToOffset :
        offset:TimeSpan -> DateTimeOffset

参数

offset
类型： System TimeSpan
DateTimeOffset 值所转换成的偏移量。

返回值

类型： System DateTimeOffset
一个对象，它等于原始的 DateTimeOffset 对象（也就是说，它们的 ToUniversalTime 方法返回的时间点相同），但其 Offset 属性设置为 offset。
异常 | 条件
ArgumentException | 所生成的 DateTimeOffset 对象的值 DateTime 值早于 MinValue。 - 或 - 所生成的 DateTimeOffset 对象的 DateTime 值晚于 MaxValue。
ArgumentOutOfRangeException | offset 小于 -14 小时。 - 或 - offset 大于 14 小时。

ToOffset 方法是调用 TimeZoneInfo..::.ConvertTime(DateTimeOffset, TimeZoneInfo) 方法的一种替代方法。在知道时区的协调世界时 (UTC) 偏移量时，可以使用此方法来执行从一个时区到另一个时区的简单转换。但是，因为原始的 DateTimeOffset 对象或方法调用所返回的新 DateTimeOffset 对象都不与特定时区明显相关，所以此方法在转换过程中未应用任何时区调整规则。 ToOffset 方法是调用 TimeZoneInfo..::.ConvertTime(DateTimeOffset, TimeZoneInfo) 方法的一种替代方法。在知道时区的协调世界时 (UTC) 偏移量时，可以使用此方法来执行从一个时区到另一个时区的简单转换。但是，因为原始的 DateTimeOffset 对象或方法调用所返回的新 DateTimeOffset 对象都不与特定时区明显相关，所以此方法在转换过程中未应用任何时区调整规则。 ToOffset 方法是调用 TimeZoneInfo..::.ConvertTime(DateTimeOffset, TimeZoneInfo) 方法的一种替代方法。在知道时区的协调世界时 (UTC) 偏移量时，可以使用此方法来执行从一个时区到另一个时区的简单转换。但是，因为原始的 DateTimeOffset 对象或方法调用所返回的新 DateTimeOffset 对象都不与特定时区明显相关，所以此方法在转换过程中未应用任何时区调整规则。

下面的示例演示如何使用 ToOffset 方法将 DateTimeOffset 对象转换为具有不同偏移量的 DateTimeOffset 对象。

Module DateTimeOffsetConversion
   Private sourceTime As New DateTimeOffset(#9/1/2007 9:30AM#, _
                                            New TimeSpan(-5, 0, 0))

   Public Sub Main()
      Dim targetTime As DateTimeOffset

      ' Convert to same time (return sourceTime unchanged)
      targetTime = sourceTime.ToOffset(New TimeSpan(-5, 0, 0))
      ShowDateAndTimeInfo(targetTime)

      ' Convert to UTC (0 offset)
      targetTime = sourceTime.ToOffset(TimeSpan.Zero)
      ShowDateAndTimeInfo(targetTime)

      ' Convert to 8 hours behind UTC
      targetTime = sourceTime.ToOffset(New TimeSpan(-8, 0, 0))
      ShowDateAndTimeInfo(targetTime)

      ' Convert to 3 hours ahead of UTC
      targetTime = sourceTime.ToOffset(New TimeSpan(3, 0, 0))
      ShowDateAndTimeInfo(targetTime)
   End Sub

   Private Sub ShowDateAndTimeInfo(newTime As DateTimeOffset)
      Console.WriteLine("{0} converts to {1}", sourceTime, newTime)
      Console.WriteLine("{0} and {1} are equal: {2}", _
                        sourceTime, newTime, sourceTime.Equals(newTime))
      Console.WriteLine("{0} and {1} are identical: {2}", _
                        sourceTime, newTime, _
                        sourceTime.EqualsExact(newTime))
      Console.WriteLine()
   End Sub
End Module
'
' The example displays the following output:
'    9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 9:30:00 AM -05:00
'    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are equal: True
'    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are identical: True
'
'    9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 2:30:00 PM +00:00
'    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are equal: True
'    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are identical: False
'
'    9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 6:30:00 AM -08:00
'    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are equal: True
'    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are identical: False
'
'    9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 5:30:00 PM +03:00
'    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are equal: True
'    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are identical: False

using System;

public class DateTimeOffsetConversion
{
   private static DateTimeOffset sourceTime;

   public static void Main()
   {
      DateTimeOffset targetTime;
      sourceTime = new DateTimeOffset(2007, 9, 1, 9, 30, 0,
                                      new TimeSpan(-5, 0, 0));

      // Convert to same time (return sourceTime unchanged)
      targetTime = sourceTime.ToOffset(new TimeSpan(-5, 0, 0));
      ShowDateAndTimeInfo(targetTime);

      // Convert to UTC (0 offset)
      targetTime = sourceTime.ToOffset(TimeSpan.Zero);
      ShowDateAndTimeInfo(targetTime);

      // Convert to 8 hours behind UTC
      targetTime = sourceTime.ToOffset(new TimeSpan(-8, 0, 0));
      ShowDateAndTimeInfo(targetTime);

      // Convert to 3 hours ahead of UTC
      targetTime = sourceTime.ToOffset(new TimeSpan(3, 0, 0));
      ShowDateAndTimeInfo(targetTime);
   }

   private static void ShowDateAndTimeInfo(DateTimeOffset newTime)
   {
      Console.WriteLine("{0} converts to {1}", sourceTime, newTime);
      Console.WriteLine("{0} and {1} are equal: {2}",
                        sourceTime, newTime, sourceTime.Equals(newTime));
      Console.WriteLine("{0} and {1} are identical: {2}",
                        sourceTime, newTime,
                        sourceTime.EqualsExact(newTime));
      Console.WriteLine();
   }
}
//
// The example displays the following output:
//    9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 9:30:00 AM -05:00
//    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are equal: True
//    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are identical: True
//
//    9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 2:30:00 PM +00:00
//    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are equal: True
//    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are identical: False
//
//    9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 6:30:00 AM -08:00
//    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are equal: True
//    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are identical: False
//
//    9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 5:30:00 PM +03:00
//    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are equal: True
//    9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are identical: False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.ToString 方法

DateTimeOffset
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

将当前 DateTimeOffset 对象的值转换为其等效的字符串表示形式。

名称 说明
页首

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.ToString 方法

DateTimeOffset
.
.
::
.
ToString 方法
DateTimeOffset 结构

将当前 DateTimeOffset 对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
一个 DateTimeOffset 对象的字符串表示形式，并在字符串末尾追加了偏移量。
异常 | 条件
ArgumentOutOfRangeException | 日期和时间超出了当前区域性所使用的日历支持的日期范围。

此方法的返回值与 DateTime..::.ToString()()() 方法的返回值相同，不同的是，此方法的返回值在后面添加了一个空格，并在空格后面添加了附加到字符串末尾的偏移量。换言之，它使用短日期模式、长时间模式以及 zzz 自定义格式字符串对输出进行格式设置，并用一个空格将每个元素与其前面的元素分隔开来。例如，如果 DateTime..::.ToString()()() 返回值 1/12/2008 6:15:50 PM，则 ToString()()() 将返回值 1/12/2008 6:15:50 PM -08:00，以表示落后协调世界时 (UTC) 8 小时的时间。 此方法的返回值与 DateTime..::.ToString()()() 方法的返回值相同，不同的是，此方法的返回值在后面添加了一个空格，并在空格后面添加了附加到字符串末尾的偏移量。换言之，它使用短日期模式、长时间模式以及 zzz 自定义格式字符串对输出进行格式设置，并用一个空格将每个元素与其前面的元素分隔开来。例如，如果 DateTime..::.ToString()()() 返回值 1/12/2008 6:15:50 PM，则 ToString()()() 将返回值 1/12/2008 6:15:50 PM -08:00，以表示落后协调世界时 (UTC) 8 小时的时间。 此方法的返回值与 DateTime..::.ToString()()() 方法的返回值相同，不同的是，此方法的返回值在后面添加了一个空格，并在空格后面添加了附加到字符串末尾的偏移量。换言之，它使用短日期模式、长时间模式以及 zzz 自定义格式字符串对输出进行格式设置，并用一个空格将每个元素与其前面的元素分隔开来。例如，如果 DateTime..::.ToString()()() 返回值 1/12/2008 6:15:50 PM，则 ToString()()() 将返回值 1/12/2008 6:15:50 PM -08:00，以表示落后协调世界时 (UTC) 8 小时的时间。

此方法使用从当前区域性派生的格式设置信息。有关更多信息，请参见CurrentCulture。通过使用 ToString 方法的其他重载，可以指定要使用其格式设置的区域性，并可以定义 DateTimeOffset 值的输出模式。 此方法使用从当前区域性派生的格式设置信息。有关更多信息，请参见CurrentCulture。通过使用 ToString 方法的其他重载，可以指定要使用其格式设置的区域性，并可以定义 DateTimeOffset 值的输出模式。 此方法使用从当前区域性派生的格式设置信息。有关更多信息，请参见CurrentCulture。通过使用 ToString 方法的其他重载，可以指定要使用其格式设置的区域性，并可以定义 DateTimeOffset 值的输出模式。

对调用者的说明

ToString()()() 方法将返回当前区域性使用的日历中的日期和时间的字符串表示形式。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为阿拉伯语（叙利亚）时，它尝试在 HijriCalendar 类的范围之外设置日期格式。 ToString()()() 方法将返回当前区域性使用的日历中的日期和时间的字符串表示形式。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为阿拉伯语（叙利亚）时，它尝试在 HijriCalendar 类的范围之外设置日期格式。 ToString()()() 方法将返回当前区域性使用的日历中的日期和时间的字符串表示形式。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为阿拉伯语（叙利亚）时，它尝试在 HijriCalendar 类的范围之外设置日期格式。 ToString()()() 方法将返回当前区域性使用的日历中的日期和时间的字符串表示形式。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为阿拉伯语（叙利亚）时，它尝试在 HijriCalendar 类的范围之外设置日期格式。

Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim date1 As New DateTimeOffset(#1/1/550#, TimeSpan.Zero)
      Dim dft As CultureInfo
      Dim arSY As New CultureInfo("ar-SY")
      arSY.DateTimeFormat.Calendar = New HijriCalendar()

      ' Change current culture to arSY.
      dft = Thread.CurrentThread.CurrentCulture
      Thread.CurrentThread.CurrentCulture = arSY

      ' Display the date using the current culture's calendar.
      Try
         Console.WriteLine(date1.ToString())
      Catch e As ArgumentOutOfRangeException
         Console.WriteLine("{0} is earlier than {1:d} or later than {2:d}", _
                           date1.ToString("d", CultureInfo.InvariantCulture), _
                           arSY.DateTimeFormat.Calendar.MinSupportedDateTime.ToString("d", CultureInfo.InvariantCulture), _
                           arSY.DateTimeFormat.Calendar.MaxSupportedDateTime.ToString("d", CultureInfo.InvariantCulture))
      End Try

      ' Restore the default culture.
      Thread.CurrentThread.CurrentCulture = dft
   End Sub
End Module
' The example displays the following output:
'    01/01/0550 is earlier than 07/18/0622 or later than 12/31/9999

using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      DateTimeOffset date1 = new DateTimeOffset(new DateTime(550, 1, 1),
                                                TimeSpan.Zero);
      CultureInfo dft;
      CultureInfo arSY = new CultureInfo("ar-SY");
      arSY.DateTimeFormat.Calendar = new HijriCalendar();

      // Change current culture to arSY.
      dft = Thread.CurrentThread.CurrentCulture;
      Thread.CurrentThread.CurrentCulture = arSY;

      // Display the date using the current culture's calendar.
      try {
         Console.WriteLine(date1.ToString());
      }
      catch (ArgumentOutOfRangeException) {
         Console.WriteLine("{0} is earlier than {1} or later than {2}",
                           date1.ToString("d", CultureInfo.InvariantCulture),
                           arSY.DateTimeFormat.Calendar.MinSupportedDateTime.ToString("d", CultureInfo.InvariantCulture),
                           arSY.DateTimeFormat.Calendar.MaxSupportedDateTime.ToString("d", CultureInfo.InvariantCulture));
      }

      // Restore the default culture.
      Thread.CurrentThread.CurrentCulture = dft;
   }
}
// The example displays the following output:
//    01/01/0550 is earlier than 07/18/0622 or later than 12/31/9999

下面的示例演示了对 ToString()()() 方法的调用，并在当前区域性为“en-us”的系统上显示其输出。

Dim thisDate As DateTimeOffset

' Show output for UTC time
thisDate = DateTimeOffset.UtcNow
Console.WriteLine(thisDate.ToString())  ' Displays 3/28/2007 7:13:50 PM +00:00

' Show output for local time
thisDate = DateTimeOffset.Now
Console.WriteLine(thisDate.ToString())  ' Displays 3/28/2007 12:13:50 PM -07:00

' Show output for arbitrary time offset
thisDate = thisDate.ToOffset(new TimeSpan(-5, 0, 0))
Console.WriteLine(thisDate.ToString())  ' Displays 3/28/2007 2:13:50 PM -05:00

DateTimeOffset thisDate;

// Show output for UTC time
thisDate = DateTimeOffset.UtcNow;
Console.WriteLine(thisDate.ToString());  // Displays 3/28/2007 7:13:50 PM +00:00

// Show output for local time
thisDate = DateTimeOffset.Now;
Console.WriteLine(thisDate.ToString());  // Displays 3/28/2007 12:13:50 PM -07:00

// Show output for arbitrary time offset
thisDate = thisDate.ToOffset(new TimeSpan(-5, 0, 0));
Console.WriteLine(thisDate.ToString());  // Displays 3/28/2007 2:13:50 PM -05:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
ToString 重载
System 命名空间


DateTimeOffset ..::.ToString 方法 (IFormatProvider)

DateTimeOffset
.
.
::
.
ToString 方法 (IFormatProvider)
DateTimeOffset 结构

使用指定的区域性特定格式设置信息将当前 DateTimeOffset 对象的值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    formatProvider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider formatProvider
)
public:
String^ ToString(
    IFormatProvider^ formatProvider
)
member ToString :
        formatProvider:IFormatProvider -> string

参数

formatProvider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
由 formatProvider 指定的当前 DateTimeOffset 对象的值的字符串表示形式。
异常 | 条件
ArgumentOutOfRangeException | 日期和时间处于由 formatProvider 使用的日历支持的日期范围之外。

此方法的返回值与它的等效 DateTime..::.ToString 方法重载的返回值相同，不同的是，此方法的返回值在后面添加了一个空格，并在空格后面添加了附加到字符串末尾的偏移量。换言之，它使用短日期模式、长时间模式以及 zzz 自定义格式字符串对输出进行格式设置，并用一个空格将每个元素与其前面的元素分隔开来。 此方法的返回值与它的等效 DateTime..::.ToString 方法重载的返回值相同，不同的是，此方法的返回值在后面添加了一个空格，并在空格后面添加了附加到字符串末尾的偏移量。换言之，它使用短日期模式、长时间模式以及 zzz 自定义格式字符串对输出进行格式设置，并用一个空格将每个元素与其前面的元素分隔开来。

这三个元素的格式是由 formatProvider 参数定义的。formatProvider 参数可以是下面的任何一项： 这三个元素的格式是由 formatProvider 参数定义的。formatProvider 参数可以是下面的任何一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将应用于返回字符串的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将应用于返回字符串的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象（请参见 CurrentCulture）。

对调用者的说明

ToString(IFormatProvider) 方法返回 formatProvider 参数代表的区域性使用的日历的日期与世界的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。 ToString(IFormatProvider) 方法返回 formatProvider 参数代表的区域性使用的日历的日期与世界的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。 ToString(IFormatProvider) 方法返回 formatProvider 参数代表的区域性使用的日历的日期与世界的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。 ToString(IFormatProvider) 方法返回 formatProvider 参数代表的区域性使用的日历的日期与世界的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。 ToString(IFormatProvider) 方法返回 formatProvider 参数代表的区域性使用的日历的日期与世界的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它将尝试设置位于 JapaneseCalendar 类的范围之外的日期的格式。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim jaJP As New CultureInfo("ja-JP")
      jaJP.DateTimeFormat.Calendar = New JapaneseCalendar()
      Dim date1 As New DateTimeOffset(#01/01/1867#, TimeSpan.Zero)

      Try
         Console.WriteLine(date1.ToString(jaJP))
      Catch e As ArgumentOutOfRangeException
         Console.WriteLine("{0:d} is earlier than {1:d} or later than {2:d}", _
                           date1, _
                           jaJP.DateTimeFormat.Calendar.MinSupportedDateTime, _
                           jaJP.DateTimeFormat.Calendar.MaxSupportedDateTime)
      End Try
   End Sub
End Module
' The example displays the following output:
'    1/1/1867 is earlier than 9/8/1868 or later than 12/31/9999

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo jaJP = new CultureInfo("ja-JP");
      jaJP.DateTimeFormat.Calendar = new JapaneseCalendar();
      DateTimeOffset date1 = new DateTimeOffset(new DateTime(1867, 1, 1),
                                                TimeSpan.Zero);

      try {
         Console.WriteLine(date1.ToString(jaJP));
      }
      catch (ArgumentOutOfRangeException) {
         Console.WriteLine("{0:d} is earlier than {1:d} or later than {2:d}",
                           date1,
                           jaJP.DateTimeFormat.Calendar.MinSupportedDateTime,
                           jaJP.DateTimeFormat.Calendar.MaxSupportedDateTime);
      }
   }
}
// The example displays the following output:
//    1/1/1867 is earlier than 9/8/1868 or later than 12/31/9999   }

下面的示例使用表示固定区域性以及四个其他区域性的 CultureInfo 对象显示 DateTimeOffset 对象。

Dim cultures() As CultureInfo = {CultureInfo.InvariantCulture, _
                                 New CultureInfo("en-us"), _
                                 New CultureInfo("fr-fr"), _
                                 New CultureInfo("de-DE"), _
                                 New CultureInfo("es-ES")}

Dim thisDate As New DateTimeOffset(#5/1/2007 9:00AM#, TimeSpan.Zero)

For Each culture As CultureInfo In cultures
   Dim cultureName As String
   If String.IsNullOrEmpty(culture.Name) Then
      cultureName = culture.NativeName
   Else
      cultureName = culture.Name
   End If
   Console.WriteLine("In {0}, {1}", _
                     cultureName, thisDate.ToString(culture))
Next
' The example produces the following output:
'    In Invariant Language (Invariant Country), 05/01/2007 09:00:00 +00:00
'    In en-US, 5/1/2007 9:00:00 AM +00:00
'    In fr-FR, 01/05/2007 09:00:00 +00:00
'    In de-DE, 01.05.2007 09:00:00 +00:00
'    In es-ES, 01/05/2007 9:00:00 +00:00

CultureInfo[] cultures = new CultureInfo[] {CultureInfo.InvariantCulture,
                                           new CultureInfo("en-us"),
                                           new CultureInfo("fr-fr"),
                                           new CultureInfo("de-DE"),
                                           new CultureInfo("es-ES")};

DateTimeOffset thisDate = new DateTimeOffset(2007, 5, 1, 9, 0, 0,
                                             TimeSpan.Zero);

foreach (CultureInfo culture in cultures)
{
   string cultureName;
   if (string.IsNullOrEmpty(culture.Name))
      cultureName = culture.NativeName;
   else
      cultureName = culture.Name;

   Console.WriteLine("In {0}, {1}",
                     cultureName, thisDate.ToString(culture));
}
// The example produces the following output:
//    In Invariant Language (Invariant Country), 05/01/2007 09:00:00 +00:00
//    In en-US, 5/1/2007 9:00:00 AM +00:00
//    In fr-FR, 01/05/2007 09:00:00 +00:00
//    In de-DE, 01.05.2007 09:00:00 +00:00
//    In es-ES, 01/05/2007 9:00:00 +00:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
ToString 重载
System 命名空间


DateTimeOffset ..::.ToString 方法 (String)

DateTimeOffset
.
.
::
.
ToString 方法 (String)
DateTimeOffset 结构

使用指定的格式将当前 DateTimeOffset 对象的值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
格式字符串。

返回值

类型： System String
当前 DateTimeOffset 对象的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 的长度是 1，并且它不是为 DateTimeFormatInfo 定义的标准格式说明符之一。 - 或 - format 中不包含有效的自定义格式模式。
ArgumentOutOfRangeException | 日期和时间超出了当前区域性所使用的日历支持的日期范围。

format 参数应包含用于定义返回的字符串格式的单一格式说明符（请参见标准日期和时间格式字符串）或自定义格式模式（请参见自定义日期和时间格式字符串）。如果 format 为 Null 或者为空字符串 ("")，则 DateTimeOffset 值是使用默认格式的输出。 format 参数应包含用于定义返回的字符串格式的单一格式说明符（请参见标准日期和时间格式字符串）或自定义格式模式（请参见自定义日期和时间格式字符串）。如果 format 为 Null 或者为空字符串 ("")，则 DateTimeOffset 值是使用默认格式的输出。

下表显示了某些格式说明符在与 DateTimeOffset 一起使用时的确切操作，这与当它们与 DateTime 一起使用时的行为方式不同。

现有格式说明符 | 新行为
“K” | 用于来回转换日期和时间。使用 DateTimeOffset 映射到“zzz”（始终用小时数和分钟数来显示偏移量）。请注意，“K”是自定义格式说明符，它不能在 format 中作为单个字符出现。 用于来回转换日期和时间。使用 DateTimeOffset 映射到“zzz”（始终用小时数和分钟数来显示偏移量）。请注意，“K”是自定义格式说明符，它不能在 format 中作为单个字符出现。 用于来回转换日期和时间。使用 DateTimeOffset 映射到“zzz”（始终用小时数和分钟数来显示偏移量）。请注意，“K”是自定义格式说明符，它不能在 format 中作为单个字符出现。
“U” | 不支持。
“r” | 将 DateTimeOffset 对象转换为协调世界时 (UTC)，并使用自定义格式字符串 ddd, dd MMM yyyy HH:mm:ss GMT 输出它。
“u” | 将 DateTimeOffset 对象转换为 UTC，并使用 yyyy-MM-dd HH:mm:ssZ 格式输出它。

其余的标准日期和时间格式说明符在与 ToString(String) 方法一起使用时，其行为方式跟与 ToString 方法一起使用时的行为方式相同。

此方法使用从当前区域性派生的格式设置信息。有关更多信息，请参见CurrentCulture。 此方法使用从当前区域性派生的格式设置信息。有关更多信息，请参见CurrentCulture。

对调用者的说明

ToString(String) 方法返回当前区域性使用的日历中的日期与时间的字符串表示形式。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为希伯来语（以色列）时，它尝试在 HebrewCalendar 类的范围之外设置日期格式。 ToString(String) 方法返回当前区域性使用的日历中的日期与时间的字符串表示形式。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为希伯来语（以色列）时，它尝试在 HebrewCalendar 类的范围之外设置日期格式。 ToString(String) 方法返回当前区域性使用的日历中的日期与时间的字符串表示形式。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为希伯来语（以色列）时，它尝试在 HebrewCalendar 类的范围之外设置日期格式。 ToString(String) 方法返回当前区域性使用的日历中的日期与时间的字符串表示形式。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。当当前区域性为希伯来语（以色列）时，它尝试在 HebrewCalendar 类的范围之外设置日期格式。

Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim date1 As New DateTimeOffset(#7/21/1550#, TimeSpan.Zero)
      Dim dft As CultureInfo
      Dim heIL As New CultureInfo("he-IL")
      heIL.DateTimeFormat.Calendar = New HebrewCalendar()

      ' Change current culture to he-IL.
      dft = Thread.CurrentThread.CurrentCulture
      Thread.CurrentThread.CurrentCulture = heIL

      ' Display the date using the current culture's calendar.
      Try
         Console.WriteLine(date1.ToString("G"))
      Catch e As ArgumentOutOfRangeException
         Console.WriteLine("{0} is earlier than {1} or later than {2}", _
                           date1.ToString("d", CultureInfo.InvariantCulture), _
                           heIL.DateTimeFormat.Calendar.MinSupportedDateTime.ToString("d", CultureInfo.InvariantCulture), _
                           heIL.DateTimeFormat.Calendar.MaxSupportedDateTime.ToString("d", CultureInfo.InvariantCulture))
      End Try

      ' Restore the default culture.
      Thread.CurrentThread.CurrentCulture = dft
   End Sub
End Module
' The example displays the following output:
'    07/21/1550 is earlier than 01/01/1583 or later than 09/29/2239

using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      DateTimeOffset date1 = new DateTimeOffset(new DateTime(1550, 7, 21),
                                                TimeSpan.Zero);
      CultureInfo dft;
      CultureInfo heIL = new CultureInfo("he-IL");
      heIL.DateTimeFormat.Calendar = new HebrewCalendar();

      // Change current culture to he-IL.
      dft = Thread.CurrentThread.CurrentCulture;
      Thread.CurrentThread.CurrentCulture = heIL;

      // Display the date using the current culture's calendar.
      try {
         Console.WriteLine(date1.ToString("G"));
      }
      catch (ArgumentOutOfRangeException) {
         Console.WriteLine("{0} is earlier than {1} or later than {2}",
                           date1.ToString("d", CultureInfo.InvariantCulture),
                           heIL.DateTimeFormat.Calendar.MinSupportedDateTime.ToString("d", CultureInfo.InvariantCulture),
                           heIL.DateTimeFormat.Calendar.MaxSupportedDateTime.ToString("d", CultureInfo.InvariantCulture));
      }

      // Restore the default culture.
      Thread.CurrentThread.CurrentCulture = dft;
   }
}
// The example displays the following output:
//    07/21/1550 is earlier than 01/01/1583 or later than 09/29/2239

下面的示例使用每种标准日期和时间格式说明符将 DateTimeOffset 对象显示到控制台上。输出使用“en-us”区域性进行格式设置。 下面的示例使用每种标准日期和时间格式说明符将 DateTimeOffset 对象显示到控制台上。输出使用“en-us”区域性进行格式设置。

Dim outputDate As New DateTimeOffset(#10/31/2007 9:00PM#, _
                                     New TimeSpan(-8, 0, 0))
Dim specifier As String

' Output date using each standard date/time format specifier
specifier = "d"
' Displays   d: 10/31/2007
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "D"
' Displays   D: Wednesday, October 31, 2007
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "t"
' Displays   t: 9:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "T"
' Displays   T: 9:00:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "f"
' Displays   f: Wednesday, October 31, 2007 9:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "F"
' Displays   F: Wednesday, October 31, 2007 9:00:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "g"
' Displays   g: 10/31/2007 9:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "G"
' Displays   G: 10/31/2007 9:00:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "M"           ' 'm' is identical
' Displays   M: October 31
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "R"           ' 'r' is identical
' Displays   R: Thu, 01 Nov 2007 05:00:00 GMT
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "s"
' Displays   s: 2007-10-31T21:00:00
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

specifier = "u"
' Displays   u: 2007-11-01 05:00:00Z
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

' Specifier is not supported
specifier = "U"
Try
   Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))
Catch e As FormatException
   Console.WriteLine("{0}: Not supported.", specifier)
End Try

specifier = "Y"         ' 'y' is identical
' Displays   Y: October, 2007
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier))

DateTimeOffset outputDate = new DateTimeOffset(2007, 10, 31, 21, 0, 0,
                                     new TimeSpan(-8, 0, 0));
string specifier;

// Output date using each standard date/time format specifier
specifier = "d";
// Displays   d: 10/31/2007
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "D";
// Displays   D: Wednesday, October 31, 2007
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "t";
// Displays   t: 9:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "T";
// Displays   T: 9:00:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "f";
// Displays   f: Wednesday, October 31, 2007 9:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "F";
// Displays   F: Wednesday, October 31, 2007 9:00:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "g";
// Displays   g: 10/31/2007 9:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "G";
// Displays   G: 10/31/2007 9:00:00 PM
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "M";           // 'm' is identical
// Displays   M: October 31
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "R";           // 'r' is identical
// Displays   R: Thu, 01 Nov 2007 05:00:00 GMT
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "s";
// Displays   s: 2007-10-31T21:00:00
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

specifier = "u";
// Displays   u: 2007-11-01 05:00:00Z
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

// Specifier is not supported
specifier = "U";
try
{
   Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));
}
catch (FormatException)
{
   Console.WriteLine("{0}: Not supported.", specifier);
}

specifier = "Y";         // 'y' is identical
// Displays   Y: October, 2007
Console.WriteLine("{0}: {1}", specifier, outputDate.ToString(specifier));

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
ToString 重载
System 命名空间

其他资源

标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTimeOffset ..::.ToString 方法 (String, IFormatProvider)

DateTimeOffset
.
.
::
.
ToString 方法 (String, IFormatProvider)
DateTimeOffset 结构

使用指定的格式和区域性特定格式信息将当前 DateTimeOffset 对象的值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    formatProvider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider formatProvider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ formatProvider
) sealed
abstract ToString :
        format:string *
        formatProvider:IFormatProvider -> string
override ToString :
        format:string *
        formatProvider:IFormatProvider -> string

参数

format
类型： System String
格式字符串。
formatProvider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
由 format 和 provider 指定的当前 DateTimeOffset 对象的值的字符串表示形式。

实现

异常 | 条件
FormatException | format 的长度是 1，并且它不是为 DateTimeFormatInfo 定义的标准格式说明符之一。 - 或 - format 中不包含有效的自定义格式模式。
ArgumentOutOfRangeException | 日期和时间处于由 formatProvider 使用的日历支持的日期范围之外。

format 参数应包含单一格式说明符（请参见标准日期和时间格式字符串）或自定义格式模式（请参见自定义日期和时间格式字符串）。如果 format 为 Null 或者为空字符串 ("")，则 DateTimeOffset 对象是使用默认格式的输出。 format 参数应包含单一格式说明符（请参见标准日期和时间格式字符串）或自定义格式模式（请参见自定义日期和时间格式字符串）。如果 format 为 Null 或者为空字符串 ("")，则 DateTimeOffset 对象是使用默认格式的输出。

下表显示了某些格式说明符在与 DateTimeOffset 一起使用时的确切操作，这与当它们与 DateTime 一起使用时的行为方式不同。

现有格式说明符 | 新行为
“K” | 用于来回转换日期和时间。使用 DateTimeOffset 映射到“zzz”（始终用小时数和分钟数来显示偏移量）。请注意，“K”是自定义格式说明符，它不能在 format 中作为单个字符出现。 用于来回转换日期和时间。使用 DateTimeOffset 映射到“zzz”（始终用小时数和分钟数来显示偏移量）。请注意，“K”是自定义格式说明符，它不能在 format 中作为单个字符出现。 用于来回转换日期和时间。使用 DateTimeOffset 映射到“zzz”（始终用小时数和分钟数来显示偏移量）。请注意，“K”是自定义格式说明符，它不能在 format 中作为单个字符出现。
“U” | 不支持。
“r” | 将 DateTimeOffset 对象转换为协调世界时 (UTC)，并使用自定义格式字符串 ddd, dd MMM yyyy HH:mm:ss GMT 输出它。
“u” | 将 DateTimeOffset 值转换为 UTC，并使用 yyyy-MM-dd HH:mm:ssZ 格式输出它。

其余的标准日期和时间格式说明符在与 ToString(String) 方法一起使用时，其行为方式跟与 ToString 方法一起使用时的行为方式相同。

与标准格式说明符相对应的模式以及日期和时间组成部分的符号和名称是由 formatProvider 参数定义的。formatProvider 参数可以是下面的任何一项： 与标准格式说明符相对应的模式以及日期和时间组成部分的符号和名称是由 formatProvider 参数定义的。formatProvider 参数可以是下面的任何一项：

  • 一个 CultureInfo 对象，表示在 input 中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义了用于 input 中的格式设置。 一个 CultureInfo 对象，表示在 input 中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义了用于 input 中的格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象（请参见 CurrentCulture）。

对调用者的说明

ToString(String, IFormatProvider) 方法返回由 formatProvider 参数使用的日历中的日期与时间的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。 ToString(String, IFormatProvider) 方法返回由 formatProvider 参数使用的日历中的日期与时间的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。 ToString(String, IFormatProvider) 方法返回由 formatProvider 参数使用的日历中的日期与时间的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。 ToString(String, IFormatProvider) 方法返回由 formatProvider 参数使用的日历中的日期与时间的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。 ToString(String, IFormatProvider) 方法返回由 formatProvider 参数使用的日历中的日期与时间的字符串表示形式。其日历由 Calendar 属性定义。如果当前 DateTimeOffset 实例的值早于 Calendar..::.MinSupportedDateTime 或晚于 Calendar..::.MaxSupportedDateTime，此方法将引发 ArgumentOutOfRangeException。下面的示例进行了这方面的演示。它尝试对超出 UmAlQuraCalendar 类范围的日期进行格式设置。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim arSA As New CultureInfo("ar-SA")
      arSA.DateTimeFormat.Calendar = New UmAlQuraCalendar()
      Dim date1 As New DateTimeOffset(#09/10/1890#, TimeSpan.Zero)

      Try
         Console.WriteLine(date1.ToString("d", arSA))
      Catch e As ArgumentOutOfRangeException
         Console.WriteLine("{0:d} is earlier than {1:d} or later than {2:d}", _
                           date1, _
                           arSA.DateTimeFormat.Calendar.MinSupportedDateTime, _
                           arSA.DateTimeFormat.Calendar.MaxSupportedDateTime)
      End Try
   End Sub
End Module
' The example displays the following output:
'    9/10/1890 is earlier than 4/30/1900 or later than 5/13/2029

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo arSA = new CultureInfo("ar-SA");
      arSA.DateTimeFormat.Calendar = new UmAlQuraCalendar();
      DateTimeOffset date1 = new DateTimeOffset(new DateTime(1890, 9, 10),
                                                TimeSpan.Zero);

      try {
         Console.WriteLine(date1.ToString("d", arSA));
      }
      catch (ArgumentOutOfRangeException) {
         Console.WriteLine("{0:d} is earlier than {1:d} or later than {2:d}",
                           date1,
                           arSA.DateTimeFormat.Calendar.MinSupportedDateTime,
                           arSA.DateTimeFormat.Calendar.MaxSupportedDateTime);
      }
   }
}
// The example displays the following output:
//    9/10/1890 is earlier than 4/30/1900 or later than 5/13/2029

下面的示例使用 ToString(String, IFormatProvider) 方法显示 DateTimeOffset 对象（对几个不同的区域性使用自定义格式字符串）。

Dim outputDate As New DateTimeOffset(#11/1/2007 9:00AM#, _
                                     New TimeSpan(-7, 0, 0))
Dim format As String = "dddd, MMM dd yyyy HH:mm:ss zzz"

' Output date and time using custom format specification
Console.WriteLine(outputDate.ToString(format, Nothing))
Console.WriteLine(outputDate.ToString(format, CultureInfo.InvariantCulture))
Console.WriteLine(outputDate.ToString(format, _
                                      New CultureInfo("fr-FR")))
Console.WriteLine(outputDate.ToString(format, _
                                      New CultureInfo("es-ES")))
' The example displays the following output to the console:
'    Thursday, Nov 01 2007 09:00:00 -07:00
'    Thursday, Nov 01 2007 09:00:00 -07:00
'    jeudi, nov. 01 2007 09:00:00 -07:00
'    jueves, nov 01 2007 09:00:00 -07:00

DateTimeOffset outputDate = new DateTimeOffset(2007, 11, 1, 9, 0, 0,
                                     new TimeSpan(-7, 0, 0));
string format = "dddd, MMM dd yyyy HH:mm:ss zzz";

// Output date and time using custom format specification
Console.WriteLine(outputDate.ToString(format, null as DateTimeFormatInfo));
Console.WriteLine(outputDate.ToString(format, CultureInfo.InvariantCulture));
Console.WriteLine(outputDate.ToString(format,
                                      new CultureInfo("fr-FR")));
Console.WriteLine(outputDate.ToString(format,
                                      new CultureInfo("es-ES")));
// The example displays the following output to the console:
//    Thursday, Nov 01 2007 09:00:00 -07:00
//    Thursday, Nov 01 2007 09:00:00 -07:00
//    jeudi, nov. 01 2007 09:00:00 -07:00
//    jueves, nov 01 2007 09:00:00 -07:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
ToString 重载
System 命名空间

其他资源

标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTimeOffset ..::.ToUniversalTime 方法

DateTimeOffset
.
.
::
.
ToUniversalTime 方法
DateTimeOffset 结构

将当前的 DateTimeOffset 对象转换为一个表示协调世界时 (UTC) 的 DateTimeOffset 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToUniversalTime As DateTimeOffset
public DateTimeOffset ToUniversalTime()
public:
DateTimeOffset ToUniversalTime()
member ToUniversalTime : unit -> DateTimeOffset

返回值

类型： System DateTimeOffset
一个对象，它表示转换为协调世界时 (UTC) 的当前 DateTimeOffset 对象的日期和时间。

此方法返回一个 DateTimeOffset 对象，该对象的 Offset 属性设置为零。

当前 DateTimeOffset 对象的值与方法调用返回的 DateTimeOffset 对象的值表示同一时间点。也就是说，如果将两者传递给 DateTimeOffset..::.Equals(DateTimeOffset, DateTimeOffset) 方法，该方法都将返回 true。 当前 DateTimeOffset 对象的值与方法调用返回的 DateTimeOffset 对象的值表示同一时间点。也就是说，如果将两者传递给 DateTimeOffset..::.Equals(DateTimeOffset, DateTimeOffset) 方法，该方法都将返回 true。

下面的示例通过调用 ToUniversalTime 方法将本地时间以及几个其他时间转换为协调世界时 (UTC)。

Dim localTime, otherTime, universalTime As DateTimeOffset

' Define local time in local time zone
localTime = New DateTimeOffset(#6/15/2007 12:00:00PM#)
Console.WriteLine("Local time: {0}", localTime)
Console.WriteLine()

' Convert local time to offset 0 and assign to otherTime
otherTime = localTime.ToOffset(TimeSpan.Zero)
Console.WriteLine("Other time: {0}", otherTime)
Console.WriteLine("{0} = {1}: {2}", _
                  localTime, otherTime, _
                  localTime.Equals(otherTime))
Console.WriteLine("{0} exactly equals {1}: {2}", _
                  localTime, otherTime, _
                  localTime.EqualsExact(otherTime))
Console.WriteLine()

' Convert other time to UTC
universalTime = localTime.ToUniversalTime()
Console.WriteLine("Universal time: {0}", universalTime)
Console.WriteLine("{0} = {1}: {2}", _
                  otherTime, universalTime, _
                  universalTime.Equals(otherTime))
Console.WriteLine("{0} exactly equals {1}: {2}", _
                  otherTime, universalTime, _
                  universalTime.EqualsExact(otherTime))
Console.WriteLine()
' The example produces the following output to the console:
'    Local time: 6/15/2007 12:00:00 PM -07:00
'
'    Other time: 6/15/2007 7:00:00 PM +00:00
'    6/15/2007 12:00:00 PM -07:00 = 6/15/2007 7:00:00 PM +00:00: True
'    6/15/2007 12:00:00 PM -07:00 exactly equals 6/15/2007 7:00:00 PM +00:00: False
'
'    Universal time: 6/15/2007 7:00:00 PM +00:00
'    6/15/2007 7:00:00 PM +00:00 = 6/15/2007 7:00:00 PM +00:00: True
'    6/15/2007 7:00:00 PM +00:00 exactly equals 6/15/2007 7:00:00 PM +00:00: True

DateTimeOffset localTime, otherTime, universalTime;

// Define local time in local time zone
localTime = new DateTimeOffset(new DateTime(2007, 6, 15, 12, 0, 0));
Console.WriteLine("Local time: {0}", localTime);
Console.WriteLine();

// Convert local time to offset 0 and assign to otherTime
otherTime = localTime.ToOffset(TimeSpan.Zero);
Console.WriteLine("Other time: {0}", otherTime);
Console.WriteLine("{0} = {1}: {2}",
                  localTime, otherTime,
                  localTime.Equals(otherTime));
Console.WriteLine("{0} exactly equals {1}: {2}",
                  localTime, otherTime,
                  localTime.EqualsExact(otherTime));
Console.WriteLine();

// Convert other time to UTC
universalTime = localTime.ToUniversalTime();
Console.WriteLine("Universal time: {0}", universalTime);
Console.WriteLine("{0} = {1}: {2}",
                  otherTime, universalTime,
                  universalTime.Equals(otherTime));
Console.WriteLine("{0} exactly equals {1}: {2}",
                  otherTime, universalTime,
                  universalTime.EqualsExact(otherTime));
Console.WriteLine();
// The example produces the following output to the console:
//    Local time: 6/15/2007 12:00:00 PM -07:00
//
//    Other time: 6/15/2007 7:00:00 PM +00:00
//    6/15/2007 12:00:00 PM -07:00 = 6/15/2007 7:00:00 PM +00:00: True
//    6/15/2007 12:00:00 PM -07:00 exactly equals 6/15/2007 7:00:00 PM +00:00: False
//
//    Universal time: 6/15/2007 7:00:00 PM +00:00
//    6/15/2007 7:00:00 PM +00:00 = 6/15/2007 7:00:00 PM +00:00: True
//    6/15/2007 7:00:00 PM +00:00 exactly equals 6/15/2007 7:00:00 PM +00:00: True

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
ToLocalTime
ToOffset


DateTimeOffset ..::.TryParse 方法

DateTimeOffset
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。

名称 说明
页首

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.TryParse 方法 (String, DateTimeOffset%)

DateTimeOffset
.
.
::
.
TryParse 方法 (String, DateTimeOffset%)
DateTimeOffset 结构

尝试将日期和时间的指定字符串表示形式转换为它的等效 DateTimeOffset，并返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    input As String, _
    <OutAttribute> ByRef result As DateTimeOffset _
) As Boolean
public static bool TryParse(
    string input,
    out DateTimeOffset result
)
public:
static bool TryParse(
    String^ input,
    [OutAttribute] DateTimeOffset% result
)
static member TryParse :
        input:string *
        result:DateTimeOffset byref -> bool

参数

input
类型： System String
包含要转换的日期和时间的字符串。
result
类型： System DateTimeOffset %
当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset；如果转换失败，则包含 MinValue。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset；如果转换失败，则包含 MinValue。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset；如果转换失败，则包含 MinValue。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 input 参数成功转换，则为 true；否则为 false。

TryParse(String, DateTimeOffset%) 方法的此重载类似于 DateTimeOffset..::.Parse(String) 方法，不同之处在于它在转换失败时不引发异常。它分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空白分隔。这三个元素如下表所示。
TryParse(String, DateTimeOffset%) 方法的此重载类似于 DateTimeOffset..::.Parse(String) 方法，不同之处在于它在转换失败时不引发异常。它分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空白分隔。这三个元素如下表所示。
TryParse(String, DateTimeOffset%) 方法的此重载类似于 DateTimeOffset..::.Parse(String) 方法，不同之处在于它在转换失败时不引发异常。它分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空白分隔。这三个元素如下表所示。

元素 | 示例
<Date> | "2/10/2007"
<Time> | "1:02:03 PM"
<Offset> | "-7:30:15"

虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。

input 字符串是使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息分析的。也就是说，input 参数所包含的日期和时间的当前区域性表示形式必须以 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一来表示。若要分析一个包含未必与当前区域性格式设置相对应的指定格式设置的字符串，请使用 TryParseExact 方法并提供格式说明符。 input 字符串是使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息分析的。也就是说，input 参数所包含的日期和时间的当前区域性表示形式必须以 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一来表示。若要分析一个包含未必与当前区域性格式设置相对应的指定格式设置的字符串，请使用 TryParseExact 方法并提供格式说明符。 input 字符串是使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息分析的。也就是说，input 参数所包含的日期和时间的当前区域性表示形式必须以 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法所返回的格式之一来表示。若要分析一个包含未必与当前区域性格式设置相对应的指定格式设置的字符串，请使用 TryParseExact 方法并提供格式说明符。

下面的示例调用 TryParse(String, DateTimeOffset%) 方法来分析具有各种日期和时间格式的一些字符串。

Dim parsedDate As DateTimeOffset
Dim dateString As String

' String with date only
dateString = "05/01/2008"
If DateTimeOffset.TryParse(dateString, parsedDate) Then _
   Console.WriteLine("{0} was converted to to {1}.", _
                     dateString, parsedDate)

' String with time only
dateString = "11:36 PM"
If DateTimeOffset.TryParse(dateString, parsedDate) Then _
   Console.WriteLine("{0} was converted to to {1}.", _
                     dateString, parsedDate)

' String with date and offset
dateString = "05/01/2008 +7:00"
If DateTimeOffset.TryParse(dateString, parsedDate) Then _
   Console.WriteLine("{0} was converted to to {1}.", _
                     dateString, parsedDate)

' String with day abbreviation
dateString = "Thu May 01, 2008"
If DateTimeOffset.TryParse(dateString, parsedDate) Then _
   Console.WriteLine("{0} was converted to to {1}.", _
                     dateString, parsedDate)

' String with date, time with AM/PM designator, and offset
dateString = "5/1/2008 10:00 AM -07:00"
If DateTimeOffset.TryParse(dateString, parsedDate) Then _
   Console.WriteLine("{0} was converted to to {1}.", _
                     dateString, parsedDate)
' If run on 3/29/07, the example displays the following output
' to the console:
'    05/01/2008 was converted to to 5/1/2008 12:00:00 AM -07:00.
'    11:36 PM was converted to to 3/29/2007 11:36:00 PM -07:00.
'    05/01/2008 +7:00 was converted to to 5/1/2008 12:00:00 AM +07:00.
'    Thu May 01, 2008 was converted to to 5/1/2008 12:00:00 AM -07:00.
'    5/1/2008 10:00 AM -07:00 was converted to to 5/1/2008 10:00:00 AM -07:00.

DateTimeOffset parsedDate;
string dateString;

// String with date only
dateString = "05/01/2008";
if (DateTimeOffset.TryParse(dateString, out parsedDate))
   Console.WriteLine("{0} was converted to to {1}.",
                     dateString, parsedDate);

// String with time only
dateString = "11:36 PM";
if (DateTimeOffset.TryParse(dateString, out parsedDate))
   Console.WriteLine("{0} was converted to to {1}.",
                     dateString, parsedDate);

// String with date and offset
dateString = "05/01/2008 +7:00";
if (DateTimeOffset.TryParse(dateString, out parsedDate))
   Console.WriteLine("{0} was converted to to {1}.",
                     dateString, parsedDate);

// String with day abbreviation
dateString = "Thu May 01, 2008";
if (DateTimeOffset.TryParse(dateString, out parsedDate))
   Console.WriteLine("{0} was converted to to {1}.",
                     dateString, parsedDate);

// String with date, time with AM/PM designator, and offset
dateString = "5/1/2008 10:00 AM -07:00";
if (DateTimeOffset.TryParse(dateString, out parsedDate))
   Console.WriteLine("{0} was converted to to {1}.",
                     dateString, parsedDate);
// if (run on 3/29/07, the example displays the following output
// to the console:
//    05/01/2008 was converted to to 5/1/2008 12:00:00 AM -07:00.
//    11:36 PM was converted to to 3/29/2007 11:36:00 PM -07:00.
//    05/01/2008 +7:00 was converted to to 5/1/2008 12:00:00 AM +07:00.
//    Thu May 01, 2008 was converted to to 5/1/2008 12:00:00 AM -07:00.
//    5/1/2008 10:00 AM -07:00 was converted to to 5/1/2008 10:00:00 AM -07:00.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
TryParse 重载
System 命名空间


DateTimeOffset ..::.TryParse 方法 (String, IFormatProvider, DateTimeStyles, DateTimeOffset%)

DateTimeOffset
.
.
::
.
TryParse 方法 (String, IFormatProvider, DateTimeStyles, DateTimeOffset%)
DateTimeOffset 结构

尝试将日期和时间的指定字符串表示形式转换为它的等效 DateTimeOffset，并返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    input As String, _
    formatProvider As IFormatProvider, _
    styles As DateTimeStyles, _
    <OutAttribute> ByRef result As DateTimeOffset _
) As Boolean
public static bool TryParse(
    string input,
    IFormatProvider formatProvider,
    DateTimeStyles styles,
    out DateTimeOffset result
)
public:
static bool TryParse(
    String^ input,
    IFormatProvider^ formatProvider,
    DateTimeStyles styles,
    [OutAttribute] DateTimeOffset% result
)
static member TryParse :
        input:string *
        formatProvider:IFormatProvider *
        styles:DateTimeStyles *
        result:DateTimeOffset byref -> bool

参数

input
类型： System String
包含要转换的日期和时间的字符串。
formatProvider
类型： System IFormatProvider
一个对象，提供有关 input 的区域性特定的格式设置信息。
styles
类型： System.Globalization DateTimeStyles
枚举值的一个按位组合，指示 input 所允许的格式。
result
类型： System DateTimeOffset %
当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset 值，如果转换失败，则为 MinValue。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset 值，如果转换失败，则为 MinValue。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset 值，如果转换失败，则为 MinValue。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者不包含日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 input 参数成功转换，则为 true；否则为 false。
异常 | 条件
ArgumentException | styles 包括未定义的 DateTimeStyles 值。 - 或 - DateTimeStyles..::.NoCurrentDateDefault 不受支持。 - 或 - styles 包括相互排斥的 DateTimeStyles 值。

TryParse(String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法的此重载类似于 DateTimeOffset..::.Parse(String, IFormatProvider, DateTimeStyles) 方法，不同之处在于它在转换失败时不引发异常。此方法分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空格分隔。这三个元素如下表所示。 TryParse(String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法的此重载类似于 DateTimeOffset..::.Parse(String, IFormatProvider, DateTimeStyles) 方法，不同之处在于它在转换失败时不引发异常。此方法分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空格分隔。这三个元素如下表所示。 TryParse(String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法的此重载类似于 DateTimeOffset..::.Parse(String, IFormatProvider, DateTimeStyles) 方法，不同之处在于它在转换失败时不引发异常。此方法分析一个具有三个元素的字符串，这三个元素可以按任何顺序出现并且由空格分隔。这三个元素如下表所示。

元素 | 示例
<Date> | "2/10/2007"
<Time> | "1:02:03 PM"
<Offset> | "-7:30:15"

虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。 虽然这些元素中的每个元素都是可选元素，但 <Offset> 不能单独出现。提供它时必须一起提供 <Date> 或 <Time>。如果缺少 <Date>，则其默认值为当前日期。如果缺少 <Time>，则其默认值为上午 12:00:00。如果缺少 <Offset>，则其默认值为本地时区的偏移量；如果在 styles 中指定了 DateTimeStyles..::.AdjustToUniversal 或 DateTimeStyles..::.AssumeUniversal 值，则其默认值为 Zero。如果存在 <Offset>，则它可以表示与协调世界时 (UTC) 之间的正偏移量或负偏移量。在任何一种情况下，<Offset> 必须包括一个正负符号，否则该方法将返回 false。

input 字符串是使用 formatProvider 参数指定的 DateTimeFormatInfo 对象中的区域性特定格式设置信息分析的。formatProvider 参数可以是下面的任何一项： input 字符串是使用 formatProvider 参数指定的 DateTimeFormatInfo 对象中的区域性特定格式设置信息分析的。formatProvider 参数可以是下面的任何一项：

  • 一个 CultureInfo 对象，表示在 input 中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义了用于 input 中的格式。 一个 CultureInfo 对象，表示在 input 中使用其格式设置的区域性。由 CultureInfo..::.DateTimeFormat 属性返回的 DateTimeFormatInfo 对象定义了用于 input 中的格式。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

此外，每个元素还可用前导或尾随空白分隔，<Date> 和 <Time> 部分可包含内部空白（如 6: 00:00）。只有 <Offset> 部分不能包含内部空白。 此外，每个元素还可用前导或尾随空白分隔，<Date> 和 <Time> 部分可包含内部空白（如 6: 00:00）。只有 <Offset> 部分不能包含内部空白。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。日期和时间元素的特定有效格式是由 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法返回的字符串数组的成员定义的。 如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。日期和时间元素的特定有效格式是由 DateTimeFormatInfo..::.GetAllDateTimePatterns()()() 方法返回的字符串数组的成员定义的。

<Offset> 中所使用的正号或负号必须为 + 或 -。它不是由 formatprovider 参数的 NumberFormat 属性所返回的 NumberFormatInfo 对象的 PositiveSign 或 NegativeSign 属性来定义。 <Offset> 中所使用的正号或负号必须为 + 或 -。它不是由 formatprovider 参数的 NumberFormat 属性所返回的 NumberFormatInfo 对象的 PositiveSign 或 NegativeSign 属性来定义。

DateTimeStyles 枚举的以下成员受支持：

DateTimeStyles 成员 | 注释
AdjustToUniversal | 分析由 input 所表示的字符串，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的对象的 ToUniversalTime()()() 方法。 分析由 input 所表示的字符串，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的对象的 ToUniversalTime()()() 方法。
AllowInnerWhite | 虽然有效，但忽略了此值。在 <Date> 和 <Time> 组成部分中允许存在内部空白。 虽然有效，但忽略了此值。在 <Date> 和 <Time> 组成部分中允许存在内部空白。
AllowLeadingWhite | 虽然有效，但忽略了此值。在所分析的字符串中的每个组成部分前面允许存在前导空白。 虽然有效，但忽略了此值。在所分析的字符串中的每个组成部分前面允许存在前导空白。
AllowTrailingWhite | 虽然有效，但忽略了此值。在所分析的字符串中的每个组成部分前面允许存在尾随空白。 虽然有效，但忽略了此值。在所分析的字符串中的每个组成部分前面允许存在尾随空白。
AllowWhiteSpaces | 这是默认行为。不能够通过提供限制性更强的 DateTimeStyles 枚举值（例如 DateTimeStyles..::.None）来重写它。 这是默认行为。不能够通过提供限制性更强的 DateTimeStyles 枚举值（例如 DateTimeStyles..::.None）来重写它。
AssumeLocal | 指示在 input 参数缺少 <Offset> 元素的情况下应该提供本地时区的偏移量。这是 TryParse(String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法的默认行为。 指示在 input 参数缺少 <Offset> 元素的情况下应该提供本地时区的偏移量。这是 TryParse(String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法的默认行为。
AssumeUniversal | 指示在 input 参数缺少 <Offset> 元素的情况下应该提供 UTC 偏移量 (00:00)。
None | 虽然有效，但此值被忽略，因此没有作用。
RoundtripKind | 因为 DateTimeOffset 结构不包括 Kind 属性，所以此值没有作用。

只有 DateTimeStyles..::.NoCurrentDateDefault 值不受支持。如果 styles 参数包括此值，则引发 ArgumentException。 只有 DateTimeStyles..::.NoCurrentDateDefault 值不受支持。如果 styles 参数包括此值，则引发 ArgumentException。

下面的示例通过将 TryParse(String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法与各种 DateTimeStyles 值一起调用，以分析具有各种日期和时间格式的一些字符串。

Dim dateString As String
Dim parsedDate As DateTimeOffset

dateString = "05/01/2008 6:00:00"
' Assume time is local
If DateTimeOffset.TryParse(dateString, Nothing, _
                           DateTimeStyles.AssumeLocal, _
                           parsedDate) Then
   Console.WriteLine("'{0}' was converted to to {1}.", _
                     dateString, parsedDate.ToString())
Else
   Console.WriteLine("Unable to parse '{0}'.", dateString)
End If

' Assume time is UTC
If DateTimeOffset.TryParse(dateString, Nothing, _
                           DateTimeStyles.AssumeUniversal, _
                           parsedDate) Then
   Console.WriteLine("'{0}' was converted to to {1}.", _
                     dateString, parsedDate.ToString())
Else
   Console.WriteLine("Unable to parse '{0}'.", dateString)
End If

' Parse and convert to UTC
dateString = "05/01/2008 6:00:00AM +5:00"
If DateTimeOffset.TryParse(dateString, Nothing, _
                           DateTimeStyles.AdjustToUniversal, _
                           parsedDate) Then
   Console.WriteLine("'{0}' was converted to to {1}.", _
                     dateString, parsedDate.ToString())
Else
   Console.WriteLine("Unable to parse '{0}'.", dateString)
End If
' The example displays the following output to the console:
'    '05/01/2008 6:00:00' was converted to to 5/1/2008 6:00:00 AM -07:00.
'    '05/01/2008 6:00:00' was converted to to 5/1/2008 6:00:00 AM +00:00.
'    '05/01/2008 6:00:00AM +5:00' was converted to to 5/1/2008 1:00:00 AM +00:00.

string dateString;
DateTimeOffset parsedDate;

dateString = "05/01/2008 6:00:00";
// Assume time is local
if (DateTimeOffset.TryParse(dateString, null as IFormatProvider,
                            DateTimeStyles.AssumeLocal,
                            out parsedDate))
   Console.WriteLine("'{0}' was converted to to {1}.",
                     dateString, parsedDate.ToString());
else
   Console.WriteLine("Unable to parse '{0}'.", dateString);

// Assume time is UTC
if (DateTimeOffset.TryParse(dateString, null as IFormatProvider,
                            DateTimeStyles.AssumeUniversal,
                            out parsedDate))
   Console.WriteLine("'{0}' was converted to to {1}.",
                     dateString, parsedDate.ToString());
else
   Console.WriteLine("Unable to parse '{0}'.", dateString);

// Parse and convert to UTC
dateString = "05/01/2008 6:00:00AM +5:00";
if (DateTimeOffset.TryParse(dateString, null as IFormatProvider,
                           DateTimeStyles.AdjustToUniversal,
                           out parsedDate))
   Console.WriteLine("'{0}' was converted to to {1}.",
                     dateString, parsedDate.ToString());
else
   Console.WriteLine("Unable to parse '{0}'.", dateString);
// The example displays the following output to the console:
//    '05/01/2008 6:00:00' was converted to to 5/1/2008 6:00:00 AM -07:00.
//    '05/01/2008 6:00:00' was converted to to 5/1/2008 6:00:00 AM +00:00.
//    '05/01/2008 6:00:00AM +5:00' was converted to to 5/1/2008 1:00:00 AM +00:00.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
TryParse 重载
System 命名空间


DateTimeOffset ..::.TryParseExact 方法

DateTimeOffset
.
.
::
.
TryParseExact 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。 将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。

名称 说明
页首

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.TryParseExact 方法 (String, String, IFormatProvider, DateTimeStyles, DateTimeOffset%)

DateTimeOffset
.
.
::
.
TryParseExact 方法 (String, String, IFormatProvider, DateTimeStyles, DateTimeOffset%)
DateTimeOffset 结构

使用指定的格式、区域性特定格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。 使用指定的格式、区域性特定格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParseExact ( _
    input As String, _
    format As String, _
    formatProvider As IFormatProvider, _
    styles As DateTimeStyles, _
    <OutAttribute> ByRef result As DateTimeOffset _
) As Boolean
public static bool TryParseExact(
    string input,
    string format,
    IFormatProvider formatProvider,
    DateTimeStyles styles,
    out DateTimeOffset result
)
public:
static bool TryParseExact(
    String^ input,
    String^ format,
    IFormatProvider^ formatProvider,
    DateTimeStyles styles,
    [OutAttribute] DateTimeOffset% result
)
static member TryParseExact :
        input:string *
        format:string *
        formatProvider:IFormatProvider *
        styles:DateTimeStyles *
        result:DateTimeOffset byref -> bool

参数

input
类型： System String
包含要转换的日期和时间的字符串。
format
类型： System String
用于定义所需的 input 格式的格式说明符。
formatProvider
类型： System IFormatProvider
一个对象，提供有关 input 的区域性特定格式设置信息。
styles
类型： System.Globalization DateTimeStyles
枚举值的按位组合，用于指示输入的允许格式。一个要指定的典型值为 None。 枚举值的按位组合，用于指示输入的允许格式。一个要指定的典型值为 None。
result
类型： System DateTimeOffset %
当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset；如果转换失败，则包含 MinValue。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者该参数不包含 format 和 provider 所定义的所需格式的日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset；如果转换失败，则包含 MinValue。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者该参数不包含 format 和 provider 所定义的所需格式的日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset；如果转换失败，则包含 MinValue。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者该参数不包含 format 和 provider 所定义的所需格式的日期和时间的有效字符串表示形式，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 input 参数成功转换，则为 true；否则为 false。
异常 | 条件
ArgumentException | styles 包括未定义的 DateTimeStyles 值。 - 或 - DateTimeStyles..::.NoCurrentDateDefault 不受支持。 - 或 - styles 包括相互排斥的 DateTimeStyles 值。

TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法的此重载类似于 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法，不同之处在于此方法在转换失败时不引发异常。它所分析的日期和时间的字符串表示形式必须与 format 参数所指定的模式完全匹配。如果 input 字符串与此模式（可能在 styles 参数所定义的空白中有一些变体）不匹配，则分析操作将失败，此方法将返回 false。 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法的此重载类似于 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法，不同之处在于此方法在转换失败时不引发异常。它所分析的日期和时间的字符串表示形式必须与 format 参数所指定的模式完全匹配。如果 input 字符串与此模式（可能在 styles 参数所定义的空白中有一些变体）不匹配，则分析操作将失败，此方法将返回 false。 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法的此重载类似于 DateTimeOffset..::.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法，不同之处在于此方法在转换失败时不引发异常。它所分析的日期和时间的字符串表示形式必须与 format 参数所指定的模式完全匹配。如果 input 字符串与此模式（可能在 styles 参数所定义的空白中有一些变体）不匹配，则分析操作将失败，此方法将返回 false。

format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的要求模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，则分析操作将失败，此方法将返回 false。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的要求模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，则分析操作将失败，此方法将返回 false。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的要求模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，则分析操作将失败，此方法将返回 false。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的要求模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 format 包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，则分析操作将失败，此方法将返回 false。

如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 format 要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 format 要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 format 不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。

用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 format 是标准格式说明符字符串，则 input 的精度模式也是由该参数定义的。formatProvider 参数可以是下面的任何一项： 用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 format 是标准格式说明符字符串，则 input 的精度模式也是由该参数定义的。formatProvider 参数可以是下面的任何一项： 用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 format 是标准格式说明符字符串，则 input 的精度模式也是由该参数定义的。formatProvider 参数可以是下面的任何一项：

  • 一个 CultureInfo 对象，表示解释 input 所依据的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中允许的符号和标准格式。 一个 CultureInfo 对象，表示解释 input 所依据的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中允许的符号和标准格式。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

如果 formatprovider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。 styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。 styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。

DateTimeStyles 成员 | Behavior
AdjustToUniversal | 分析 input，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。 分析 input，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。
AssumeLocal | 如果 format 不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供本地时区的偏移量。这是默认行为。 如果 format 不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供本地时区的偏移量。这是默认行为。
AssumeUniversal | 如果 format 不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供 UTC 偏移量 (+00:00)。
AllowInnerWhite | 允许 input 包括 format 未指定的内部空白。在日期和时间组成部分之间以及个别组成部分（偏移量除外）的内部可以出现多余的空白，分析此字符串时，多余的空白会被忽略。 允许 input 包括 format 未指定的内部空白。在日期和时间组成部分之间以及个别组成部分（偏移量除外）的内部可以出现多余的空白，分析此字符串时，多余的空白会被忽略。
AllowLeadingWhite | 允许 input 包括 format 未指定的前导空格。分析字符串时将忽略这些空格。 允许 input 包括 format 未指定的前导空格。分析字符串时将忽略这些空格。
AllowTrailingWhite | 允许 input 包括 format 未指定的尾随空格。分析字符串时将忽略这些空格。 允许 input 包括 format 未指定的尾随空格。分析字符串时将忽略这些空格。
AllowWhiteSpaces | 允许 input 包括 format 未指定的前导、尾随和内部空格。在分析此字符串时，将忽略 format 中未指定的所有多余空白字符。 允许 input 包括 format 未指定的前导、尾随和内部空格。在分析此字符串时，将忽略 format 中未指定的所有多余空白字符。
None | 指示 input 中不允许有多余的空白。空白必须完全按照 format 中指定的方式出现。这是默认行为。 指示 input 中不允许有多余的空白。空白必须完全按照 format 中指定的方式出现。这是默认行为。 指示 input 中不允许有多余的空白。空白必须完全按照 format 中指定的方式出现。这是默认行为。
RoundtripKind | 没有作用，因为 DateTimeOffset 结构不包括 Kind 属性。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，TryParseExact 返回 false。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，TryParseExact 返回 false。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例将 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法与标准的和自定义的格式说明符、固定的区域性以及各个 DateTimeStyles 值一起使用，以分析一些日期和时间字符串。

Dim dateString, format As String
Dim result As DateTimeOffset
Dim provider As CultureInfo = CultureInfo.InvariantCulture

' Parse date-only value with invariant culture and assume time is UTC.
dateString = "06/15/2008"
format = "d"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                   DateTimeStyles.AssumeUniversal, _
                                   result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If

' Parse date-only value with leading white space.
' Should return False because only trailing whitespace is
' specified in method call.
dateString = " 06/15/2008"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                DateTimeStyles.AllowTrailingWhite, _
                                result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If

' Parse date and time value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00"
format = "MM/dd/yyyy H:mm zzz"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                DateTimeStyles.AllowWhiteSpaces, _
                                result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If

' Parse date and time and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00"
format = "MM/dd/yyyy H:mm:ss zzz"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                DateTimeStyles.AllowWhiteSpaces Or _
                                DateTimeStyles.AdjustToUniversal, _
                                result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If
' The example displays the following output:
'    '06/15/2008' converts to 6/15/2008 12:00:00 AM +00:00.
'    ' 06/15/2008' is not in the correct format.
'    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
'    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.

string dateString, format;
DateTimeOffset result;
IFormatProvider provider = CultureInfo.InvariantCulture;

// Parse date-only value with invariant culture and assume time is UTC.
dateString = "06/15/2008";
format = "d";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                 DateTimeStyles.AssumeUniversal,
                                 out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);

// Parse date-only value with leading white space.
// Should return False because only trailing whitespace is
// specified in method call.
dateString = " 06/15/2008";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                 DateTimeStyles.AllowTrailingWhite,
                                 out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);

// Parse date and time value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00";
format = "MM/dd/yyyy H:mm zzz";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                 DateTimeStyles.AllowWhiteSpaces,
                                 out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);

// Parse date and time and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00";
format = "MM/dd/yyyy H:mm:ss zzz";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                DateTimeStyles.AllowWhiteSpaces |
                                DateTimeStyles.AdjustToUniversal,
                                out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);
// The example displays the following output:
//    '06/15/2008' converts to 6/15/2008 12:00:00 AM +00:00.
//    ' 06/15/2008' is not in the correct format.
//    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
//    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
TryParseExact 重载
System 命名空间


DateTimeOffset ..::.TryParseExact 方法 (String, array<String >[]()[], IFormatProvider, DateTimeStyles, DateTimeOffset%)

DateTimeOffset
.
.
::
.
TryParseExact 方法 (String,
array<
String
>
[]
()
[]
, IFormatProvider, DateTimeStyles, DateTimeOffset%)
DateTimeOffset 结构

使用指定的格式数组、区域性特定格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与一种指定的格式完全匹配。 使用指定的格式数组、区域性特定格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeOffset。字符串表示形式的格式必须与一种指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParseExact ( _
    input As String, _
    formats As String(), _
    formatProvider As IFormatProvider, _
    styles As DateTimeStyles, _
    <OutAttribute> ByRef result As DateTimeOffset _
) As Boolean
public static bool TryParseExact(
    string input,
    string[] formats,
    IFormatProvider formatProvider,
    DateTimeStyles styles,
    out DateTimeOffset result
)
public:
static bool TryParseExact(
    String^ input,
    array<String^>^ formats,
    IFormatProvider^ formatProvider,
    DateTimeStyles styles,
    [OutAttribute] DateTimeOffset% result
)
static member TryParseExact :
        input:string *
        formats:string[] *
        formatProvider:IFormatProvider *
        styles:DateTimeStyles *
        result:DateTimeOffset byref -> bool

参数

input
类型： System String
包含要转换的日期和时间的字符串。
formats
类型：
array<
System String
>
[]
()
[]

一个用于定义 input 的所需格式的数组。
formatProvider
类型： System IFormatProvider
一个对象，提供有关 input 的区域性特定格式设置信息。
styles
类型： System.Globalization DateTimeStyles
枚举值的按位组合，用于指示输入的允许格式。一个要指定的典型值为 None。 枚举值的按位组合，用于指示输入的允许格式。一个要指定的典型值为 None。
result
类型： System DateTimeOffset %
当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset；如果转换失败，则包含 MinValue。如果 input 不包含日期和时间的有效字符串表示形式，或者不包含 format 所定义的所需格式的日期和时间，或者 formats 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset；如果转换失败，则包含 MinValue。如果 input 不包含日期和时间的有效字符串表示形式，或者不包含 format 所定义的所需格式的日期和时间，或者 formats 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 input 的日期和时间等效的 DateTimeOffset；如果转换失败，则包含 MinValue。如果 input 不包含日期和时间的有效字符串表示形式，或者不包含 format 所定义的所需格式的日期和时间，或者 formats 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 input 参数成功转换，则为 true；否则为 false。
异常 | 条件
ArgumentException | styles 包括未定义的 DateTimeStyles 值。 - 或 - DateTimeStyles..::.NoCurrentDateDefault 不受支持。 - 或 - styles 包括相互排斥的 DateTimeStyles 值。

TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法分析与分配给 formats 数组的任何一种模式匹配的日期字符串表示形式。如果 input 字符串与这些模式中的任何一种模式（具有 styles 参数所定义的任何变体）不匹配，则分析操作将失败，此方法将返回 false。除了将 input 与包含格式说明符的多个字符串进行比较外，此重载的行为方式与 DateTimeOffset..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法相同。 TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法分析与分配给 formats 数组的任何一种模式匹配的日期字符串表示形式。如果 input 字符串与这些模式中的任何一种模式（具有 styles 参数所定义的任何变体）不匹配，则分析操作将失败，此方法将返回 false。除了将 input 与包含格式说明符的多个字符串进行比较外，此重载的行为方式与 DateTimeOffset..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法相同。 TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法分析与分配给 formats 数组的任何一种模式匹配的日期字符串表示形式。如果 input 字符串与这些模式中的任何一种模式（具有 styles 参数所定义的任何变体）不匹配，则分析操作将失败，此方法将返回 false。除了将 input 与包含格式说明符的多个字符串进行比较外，此重载的行为方式与 DateTimeOffset..::.ParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles) 方法相同。

formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的可能模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 formats 中的匹配元素包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，则分析操作将失败，此方法将返回 false。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的可能模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 formats 中的匹配元素包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，则分析操作将失败，此方法将返回 false。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的可能模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 formats 中的匹配元素包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，则分析操作将失败，此方法将返回 false。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的可能模式的自定义格式说明符。有关有效格式设置代码的详细信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。如果 formats 中的匹配元素包括 z、zz 或 zzz 自定义格式说明符以指示 input 中必须存在偏移量，则该偏移量必须包括负号或正号。如果缺少符号，则分析操作将失败，此方法将返回 false。

重要说明 重要事项

如果使用此重载的 formats 参数来指定多种格式，则可以有助于减少许多用户在输入日期和时间时遇到的挫折。尤其是，通过使用定义多种输入模式的功能，应用程序可以处理日期和时间的表示形式，这些表示形式在月、日、小时、分和秒中既可以包括也可以不包括前导零。该示例为此提供了说明。 如果使用此重载的 formats 参数来指定多种格式，则可以有助于减少许多用户在输入日期和时间时遇到的挫折。尤其是，通过使用定义多种输入模式的功能，应用程序可以处理日期和时间的表示形式，这些表示形式在月、日、小时、分和秒中既可以包括也可以不包括前导零。该示例为此提供了说明。 如果使用此重载的 formats 参数来指定多种格式，则可以有助于减少许多用户在输入日期和时间时遇到的挫折。尤其是，通过使用定义多种输入模式的功能，应用程序可以处理日期和时间的表示形式，这些表示形式在月、日、小时、分和秒中既可以包括也可以不包括前导零。该示例为此提供了说明。

如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。 如果 formats 中的匹配元素要求 input 包含日期而不是时间，则会为所生成的 DateTimeOffset 对象分配午夜时间 (0:00:00)。如果 formats 中的匹配元素要求 input 包含时间而不是日期，则会为所生成的 DateTimeOffset 对象分配本地系统的当前日期。如果 formats 中的匹配元素不要求 input 包含偏移量，则所生成的 DateTimeOffset 对象的偏移量取决于 styles 参数的值。如果 styles 包括 AssumeLocal，则会将本地时区的偏移量分配给 DateTimeOffset 对象。如果 styles 包括 AssumeUniversal，则将协调世界时 (UTC) 偏移量或 +00:00 分配给 DateTimeOffset 对象。如果未指定任何一个值，则使用本地时区的偏移量。

用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 formats 的匹配元素是标准格式说明符字符串，则 input 的精度模式也是由该参数定义的。formatProvider 参数可以是下面的任何一项： 用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 formats 的匹配元素是标准格式说明符字符串，则 input 的精度模式也是由该参数定义的。formatProvider 参数可以是下面的任何一项： 用于 input 中的特定日期和时间的符号和字符串是由 formatProvider 参数定义的。如果 formats 的匹配元素是标准格式说明符字符串，则 input 的精度模式也是由该参数定义的。formatProvider 参数可以是下面的任何一项：

  • 一个 CultureInfo 对象，表示解释 input 所依据的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中的符号和格式设置。 一个 CultureInfo 对象，表示解释 input 所依据的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义了 input 中的符号和格式设置。

  • 一个定义日期和时间数据格式的 DateTimeFormatInfo 对象。

如果 formatprovider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性相对应的 CultureInfo 对象。

styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。 styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。 styles 参数定义输入字符串中是否允许存在空白，指示如何分析无显式偏移量组成部分的字符串，并支持在分析操作过程中进行 UTC 转换。除 NoCurrentDateDefault 以外，DateTimeStyles 枚举的所有成员都受支持。下表列出了每个受支持成员的作用。

DateTimeStyles 成员 | Behavior
AdjustToUniversal | 分析 input，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。 分析 input，如果需要，则将其转换为 UTC。这等效于先分析字符串，然后再调用所返回的 DateTimeOffset 对象的 DateTimeOffset..::.ToUniversalTime 方法。
AssumeLocal | 如果 formats 中的匹配元素不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供本地时区的偏移量。这是默认值。 如果 formats 中的匹配元素不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供本地时区的偏移量。这是默认值。
AssumeUniversal | 如果 formats 中的匹配元素不要求 input 包含偏移量值，则会为所返回的 DateTimeOffset 对象提供 UTC 偏移量 (+00:00)。
AllowInnerWhite | 允许 input 包括 formats 中的元素未指定的内部空白。在日期和时间组成部分之间以及个别组成部分（偏移量除外）的内部可以出现多余的空白，分析此字符串时，多余的空白会被忽略。 允许 input 包括 formats 中的元素未指定的内部空白。在日期和时间组成部分之间以及个别组成部分（偏移量除外）的内部可以出现多余的空白，分析此字符串时，多余的空白会被忽略。
AllowLeadingWhite | 允许 input 包括 formats 中的元素未指定的前导空格。分析字符串时将忽略这些空格。 允许 input 包括 formats 中的元素未指定的前导空格。分析字符串时将忽略这些空格。
AllowTrailingWhite | 允许 input 包括 formats 中的元素未指定的尾随空格。分析字符串时将忽略这些空格。 允许 input 包括 formats 中的元素未指定的尾随空格。分析字符串时将忽略这些空格。
AllowWhiteSpaces | 允许 input 包括 formats 中的元素未指定的前导、尾随和内部空格。在分析此字符串时，将忽略 formats 内的匹配元素中未指定的所有多余空白字符。 允许 input 包括 formats 中的元素未指定的前导、尾随和内部空格。在分析此字符串时，将忽略 formats 内的匹配元素中未指定的所有多余空白字符。
None | 指示 input 中不允许有多余的空白。空白必须完全按照 formats 内的特定元素中指定的方式出现，才能成功地发生匹配。这是默认行为。 指示 input 中不允许有多余的空白。空白必须完全按照 formats 内的特定元素中指定的方式出现，才能成功地发生匹配。这是默认行为。 指示 input 中不允许有多余的空白。空白必须完全按照 formats 内的特定元素中指定的方式出现，才能成功地发生匹配。这是默认行为。
RoundtripKind | 没有作用，因为 DateTimeOffset 结构不包括 Kind 属性。

对调用者的说明

在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，TryParseExact 返回 false。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。 在 .NET Framework 4 中，如果要分析的字符串包含并不一致的小时部分和 AM/PM 指示符，TryParseExact 返回 false。在 .NET Framework 3.5 和早期版本中，AM/PM 指示项将被忽略。

下面的示例为日期和时间以及偏移量值的字符串表示形式定义了多种输入格式，然后将用户输入的字符串传递给 TryParseExact(String, array<String>[]()[], IFormatProvider, DateTimeStyles, DateTimeOffset%) 方法。

Dim conIn As TextReader = Console.In
Dim conOut As TextWriter = Console.Out
Dim tries As Integer = 0
Dim input As String = String.Empty
Dim formats() As String = {"M/dd/yyyy HH:m zzz", "MM/dd/yyyy HH:m zzz", _
                           "M/d/yyyy HH:m zzz", "MM/d/yyyy HH:m zzz", _
                           "M/dd/yy HH:m zzz", "MM/dd/yy HH:m zzz", _
                           "M/d/yy HH:m zzz", "MM/d/yy HH:m zzz", _
                           "M/dd/yyyy H:m zzz", "MM/dd/yyyy H:m zzz", _
                           "M/d/yyyy H:m zzz", "MM/d/yyyy H:m zzz", _
                           "M/dd/yy H:m zzz", "MM/dd/yy H:m zzz", _
                           "M/d/yy H:m zzz", "MM/d/yy H:m zzz", _
                           "M/dd/yyyy HH:mm zzz", "MM/dd/yyyy HH:mm zzz", _
                           "M/d/yyyy HH:mm zzz", "MM/d/yyyy HH:mm zzz", _
                           "M/dd/yy HH:mm zzz", "MM/dd/yy HH:mm zzz", _
                           "M/d/yy HH:mm zzz", "MM/d/yy HH:mm zzz", _
                           "M/dd/yyyy H:mm zzz", "MM/dd/yyyy H:mm zzz", _
                           "M/d/yyyy H:mm zzz", "MM/d/yyyy H:mm zzz", _
                           "M/dd/yy H:mm zzz", "MM/dd/yy H:mm zzz", _
                           "M/d/yy H:mm zzz", "MM/d/yy H:mm zzz"}
Dim provider As IFormatProvider = CultureInfo.InvariantCulture.DateTimeFormat
Dim result As DateTimeOffset

Do
   conOut.WriteLine("Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),")
   conOut.Write("Then press Enter: ")
   input = conIn.ReadLine()
   conOut.WriteLine()
   If DateTimeOffset.TryParseExact(input, formats, provider, _
                                   DateTimeStyles.AllowWhiteSpaces, _
                                   result) Then
      Exit Do
   Else
      Console.WriteLine("Unable to parse {0}.", input)
      tries += 1
   End If
Loop While tries < 3
If tries >= 3 Then
   Console.WriteLine("Exiting application without parsing {0}", input)
Else
   Console.WriteLine("{0} was converted to {1}", input, result.ToString())
End If
' Some successful sample interactions with the user might appear as follows:
'    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
'    Then press Enter: 12/08/2007 6:54 -6:00
'
'    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00
'
'    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
'    Then press Enter: 12/8/2007 06:54 -06:00
'
'    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
'
'    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
'    Then press Enter: 12/5/07 6:54 -6:00
'
'    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00

TextReader conIn = Console.In;
TextWriter conOut = Console.Out;
int tries = 0;
string input = String.Empty;

string[] formats = new string[] {"M/dd/yyyy HH:m zzz", "MM/dd/yyyy HH:m zzz",
                                 "M/d/yyyy HH:m zzz", "MM/d/yyyy HH:m zzz",
                                 "M/dd/yy HH:m zzz", "MM/dd/yy HH:m zzz",
                                 "M/d/yy HH:m zzz", "MM/d/yy HH:m zzz",
                                 "M/dd/yyyy H:m zzz", "MM/dd/yyyy H:m zzz",
                                 "M/d/yyyy H:m zzz", "MM/d/yyyy H:m zzz",
                                 "M/dd/yy H:m zzz", "MM/dd/yy H:m zzz",
                                 "M/d/yy H:m zzz", "MM/d/yy H:m zzz",
                                 "M/dd/yyyy HH:mm zzz", "MM/dd/yyyy HH:mm zzz",
                                 "M/d/yyyy HH:mm zzz", "MM/d/yyyy HH:mm zzz",
                                 "M/dd/yy HH:mm zzz", "MM/dd/yy HH:mm zzz",
                                 "M/d/yy HH:mm zzz", "MM/d/yy HH:mm zzz",
                                 "M/dd/yyyy H:mm zzz", "MM/dd/yyyy H:mm zzz",
                                 "M/d/yyyy H:mm zzz", "MM/d/yyyy H:mm zzz",
                                 "M/dd/yy H:mm zzz", "MM/dd/yy H:mm zzz",
                                 "M/d/yy H:mm zzz", "MM/d/yy H:mm zzz"};
IFormatProvider provider = CultureInfo.InvariantCulture.DateTimeFormat;
DateTimeOffset result;

do {
   conOut.WriteLine("Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),");
   conOut.Write("Then press Enter: ");
   input = conIn.ReadLine();
   conOut.WriteLine();
   if (DateTimeOffset.TryParseExact(input, formats, provider,
                                   DateTimeStyles.AllowWhiteSpaces,
                                   out result))
   {
      break;
   }
   else
   {
      Console.WriteLine("Unable to parse {0}.", input);
      tries++;
   }
} while (tries < 3);
if (tries >= 3)
   Console.WriteLine("Exiting application without parsing {0}", input);
else
   Console.WriteLine("{0} was converted to {1}", input, result.ToString());
// Some successful sample interactions with the user might appear as follows:
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/08/2007 6:54 -6:00
//
//    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/8/2007 06:54 -06:00
//
//    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/5/07 6:54 -6:00
//
//    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
TryParseExact 重载
System 命名空间


DateTimeOffset 运算符和类型转换

DateTimeOffset 运算符和类型转换
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

DateTimeOffset 类型公开以下成员。

名称 说明
页首

参考

DateTimeOffset 结构
System 命名空间


DateTimeOffset ..::.Addition 运算符

DateTimeOffset
.
.
::
.
Addition 运算符
DateTimeOffset 结构

将指定的时间间隔与具有指定的日期和时间的 DateTimeOffset 对象相加，产生一个具有新的日期和时间的 DateTimeOffset 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator + ( _
    dateTimeOffset As DateTimeOffset, _
    timeSpan As TimeSpan _
) As DateTimeOffset
public static DateTimeOffset operator +(
    DateTimeOffset dateTimeOffset,
    TimeSpan timeSpan
)
public:
static DateTimeOffset operator +(
    DateTimeOffset dateTimeOffset,
    TimeSpan timeSpan
)
static let inline (+)
        dateTimeOffset:DateTimeOffset *
        timeSpan:TimeSpan  : DateTimeOffset

参数

dateTimeOffset
类型： System DateTimeOffset
要向其加上时间间隔的对象。
timeSpan
类型： System TimeSpan
要加上的时间间隔。

返回值

类型： System DateTimeOffset
一个对象，其值为 dateTimeTz 与 timeSpan 的值之和。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue。 - 或 - 所生成的 DateTimeOffset 值大于 MaxValue。

Addition 方法定义了 DateTimeOffset 值的加法运算。它启用了诸如以下内容的代码： Addition 方法定义了 DateTimeOffset 值的加法运算。它启用了诸如以下内容的代码：

Dim date1 As New DateTimeOffset(#1/1/2008 1:32:45PM#, _
             New TimeSpan(-5, 0, 0))
Dim interval1 As New TimeSpan(202, 3, 30, 0)
Dim interval2 As New TimeSpan(5, 0, 0, 0)
Dim date2 As DateTimeOffset

Console.WriteLine(date1)         ' Displays 1/1/2008 1:32:45 PM -05:00
date2 = date1 + interval1
Console.WriteLine(date2)         ' Displays 7/21/2008 5:02:45 PM -05:00
date2 += interval2
Console.WriteLine(date2)         ' Displays 7/26/2008 5:02:45 PM -05:00

DateTimeOffset date1 = new DateTimeOffset(2008, 1, 1, 13, 32, 45,
                       new TimeSpan(-5, 0, 0));
TimeSpan interval1 = new TimeSpan(202, 3, 30, 0);
TimeSpan interval2 = new TimeSpan(5, 0, 0, 0);
DateTimeOffset date2;

Console.WriteLine(date1);         // Displays 1/1/2008 1:32:45 PM -05:00
date2 = date1 + interval1;
Console.WriteLine(date2);         // Displays 7/21/2008 5:02:45 PM -05:00
date2 += interval2;
Console.WriteLine(date2);         // Displays 7/26/2008 5:02:45 PM -05:00

不支持自定义运算符和运算符重载的语言可以改为调用 Add 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
Add

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.Equality 运算符

DateTimeOffset
.
.
::
.
Equality 运算符
DateTimeOffset 结构

确定两个指定的 DateTimeOffset 对象是否表示同一时间点。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    left As DateTimeOffset, _
    right As DateTimeOffset _
) As Boolean
public static bool operator ==(
    DateTimeOffset left,
    DateTimeOffset right
)
public:
static bool operator ==(
    DateTimeOffset left,
    DateTimeOffset right
)
static let inline (=)
        left:DateTimeOffset *
        right:DateTimeOffset  : bool

参数

left
类型： System DateTimeOffset
要比较的第一个对象。
right
类型： System DateTimeOffset
要比较的第二个对象。

返回值

类型： System Boolean
如果两个 DateTimeOffset 对象具有相同的 UtcDateTime 值，则为 true；否则为 false。

Equality 方法为 DateTimeOffset 对象定义了相等运算符的运算。它启用了诸如以下内容的代码： Equality 方法为 DateTimeOffset 对象定义了相等运算符的运算。它启用了诸如以下内容的代码：

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-6, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-6, 0, 0))
Console.WriteLine(date1 = date2)        ' Displays True
Console.WriteLine(date1 = date3)        ' Displays False

DateTimeOffset date1 = new DateTimeOffset(2007, 6, 3, 14, 45, 0,
             new TimeSpan(-7, 0, 0));
DateTimeOffset date2 = new DateTimeOffset(2007, 6, 3, 15, 45, 0,
             new TimeSpan(-6, 0, 0));
DateTimeOffset date3 = new DateTimeOffset(date1.DateTime,
             new TimeSpan(-6, 0, 0));
Console.WriteLine(date1 == date2);        // Displays True
Console.WriteLine(date1 == date3);        // Displays False

在计算 left 和 right 操作数是否相等之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效： 在计算 left 和 right 操作数是否相等之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效：

Return first.UtcDateTime = second.UtcDateTime

return first.UtcDateTime == second.UtcDateTime;

换句话说，Equality 方法确定这两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。 换句话说，Equality 方法确定这两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。 换句话说，Equality 方法确定这两个 DateTimeOffset 对象是否表示同一时间点。它既不直接比较日期和时间，也不直接比较偏移量。若要确定两个 DateTimeOffset 对象是否表示相同时间以及是否具有相同的偏移量值，请使用 EqualsExact 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
Equals


DateTimeOffset ..::.GreaterThan 运算符

DateTimeOffset
.
.
::
.
GreaterThan 运算符
DateTimeOffset 结构

确定一个指定的 DateTimeOffset 对象是否大于（或晚于）另一个指定的 DateTimeOffset 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator > ( _
    left As DateTimeOffset, _
    right As DateTimeOffset _
) As Boolean
public static bool operator >(
    DateTimeOffset left,
    DateTimeOffset right
)
public:
static bool operator >(
    DateTimeOffset left,
    DateTimeOffset right
)
static let inline (>)
        left:DateTimeOffset *
        right:DateTimeOffset  : bool

参数

left
类型： System DateTimeOffset
要比较的第一个对象。
right
类型： System DateTimeOffset
要比较的第二个对象。

返回值

类型： System Boolean
如果 left 的 UtcDateTime 值晚于 right 的 UtcDateTime 值，则为 true；否则为 false。

GreaterThan 方法为 DateTimeOffset 对象定义了大于运算符的运算。它启用了诸如以下内容的代码： GreaterThan 方法为 DateTimeOffset 对象定义了大于运算符的运算。它启用了诸如以下内容的代码：

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-6, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-6, 0, 0))
Console.WriteLine(date1 > date2)        ' Displays False
Console.WriteLine(date1 > date3)        ' Displays True

DateTimeOffset date1 = new DateTimeOffset(2007, 6, 3, 14, 45, 0,
             new TimeSpan(-7, 0, 0));
DateTimeOffset date2 = new DateTimeOffset(2007, 6, 3, 15, 45, 0,
             new TimeSpan(-6, 0, 0));
DateTimeOffset date3 = new DateTimeOffset(date1.DateTime,
             new TimeSpan(-6, 0, 0));
Console.WriteLine(date1 > date2);        // Displays False
Console.WriteLine(date1 > date3);        // Displays True

不支持自定义运算符的语言可以改为调用 Compare 方法。这些语言也可以直接调用 GreaterThan 方法，如以下示例所示。 不支持自定义运算符的语言可以改为调用 Compare 方法。这些语言也可以直接调用 GreaterThan 方法，如以下示例所示。

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-6, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-6, 0, 0))
Console.WriteLine(DateTimeOffset.op_GreaterThan(date1, date2))  ' Displays False
Console.WriteLine(DateTimeOffset.op_GreaterThan(date1, date3))  ' Displays True

在计算 left 和 right 操作数之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效： 在计算 left 和 right 操作数之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效：

Return left.UtcDateTime > right.UtcDateTime

return left.UtcDateTime > right.UtcDateTime;

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.GreaterThanOrEqual 运算符

DateTimeOffset
.
.
::
.
GreaterThanOrEqual 运算符
DateTimeOffset 结构

确定一个指定的 DateTimeOffset 对象是大于还是等于另一个指定的 DateTimeOffset 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator >= ( _
    left As DateTimeOffset, _
    right As DateTimeOffset _
) As Boolean
public static bool operator >=(
    DateTimeOffset left,
    DateTimeOffset right
)
public:
static bool operator >=(
    DateTimeOffset left,
    DateTimeOffset right
)
static let inline (>=)
        left:DateTimeOffset *
        right:DateTimeOffset  : bool

参数

left
类型： System DateTimeOffset
要比较的第一个对象。
right
类型： System DateTimeOffset
要比较的第二个对象。

返回值

类型： System Boolean
如果 left 的 UtcDateTime 值等于或晚于 right 的 UtcDateTime 值，则为 true；否则为 false。

GreaterThan 方法为 DateTimeOffset 对象定义了大于或等于运算符的运算。它启用了诸如以下内容的代码： GreaterThan 方法为 DateTimeOffset 对象定义了大于或等于运算符的运算。它启用了诸如以下内容的代码：

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-6, 0, 0))
Dim date4 As DateTimeOffset = date1
Console.WriteLine(date1 >= date2)        ' Displays False
Console.WriteLine(date1 >= date3)        ' Displays True
Console.WriteLine(date1 >= date4)        ' Displays True

DateTimeOffset date1 = new DateTimeOffset(2007, 6, 3, 14, 45, 0,
             new TimeSpan(-7, 0, 0));
DateTimeOffset date2 = new DateTimeOffset(2007, 6, 3, 15, 45, 0,
             new TimeSpan(-7, 0, 0));
DateTimeOffset date3 = new DateTimeOffset(date1.DateTime,
             new TimeSpan(-6, 0, 0));
DateTimeOffset date4 = date1;
Console.WriteLine(date1 >= date2);        // Displays False
Console.WriteLine(date1 >= date3);        // Displays True
Console.WriteLine(date1 >= date4);        // Displays True

不支持自定义运算符的语言可以改为调用 Compare 方法。某些语言也可以直接调用 GreaterThanOrEqual 方法，如以下示例所示。 不支持自定义运算符的语言可以改为调用 Compare 方法。某些语言也可以直接调用 GreaterThanOrEqual 方法，如以下示例所示。

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-6, 0, 0))
Dim date4 As DateTimeOffset = date1
Console.WriteLine( _
    DateTimeOffset.op_GreaterThanOrEqual(date1, date2))   ' Displays False
Console.WriteLine( _
    DateTimeOffset.op_GreaterThanOrEqual(date1, date3))   ' Displays True
Console.WriteLine( _
    DateTimeOffset.op_GreaterThanOrEqual(date1, date4))   ' Displays True

在计算 left 和 right 操作数之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效： 在计算 left 和 right 操作数之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效：

Return left.UtcDateTime >= right.UtcDateTime

return left.UtcDateTime >= right.UtcDateTime;

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ImplicitWideningImplicitImplicit 转换 (DateTime to DateTimeOffset)

DateTimeOffset
Implicit
Widening
Implicit
Implicit
转换 (DateTime to DateTimeOffset)
DateTimeOffset 结构

定义从 DateTime 对象到 DateTimeOffset 对象的隐式转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    dateTime As DateTime _
) As DateTimeOffset
public static implicit operator DateTimeOffset (
    DateTime dateTime
)
static implicit operator DateTimeOffset (
    DateTime dateTime
)
F# 不支持新转换运算符的声明。

参数

dateTime
类型： System DateTime
要转换的对象。

返回值

类型： System DateTimeOffset
被转换的对象。
异常 | 条件
ArgumentOutOfRangeException | 通过应用偏移量所产生的协调世界时 (UTC) 的日期和时间早于 MinValue。 - 或 - 通过应用偏移量所产生的 UTC 日期和时间晚于 MaxValue。

ImplicitWideningImplicitImplicit 方法使编译器能够自动将 DateTime 对象转换为 DateTimeOffset 对象，而不用（在 C# 中）显式强制转换运算符或（在 Visual Basic 中）调用转换函数。它定义了一个“扩大转换”，“扩大转换”不会丢失数据，也不会引发 OverflowException。通过运用 ImplicitWideningImplicitImplicit 方法，可以编写诸如以下内容的代码： ImplicitWideningImplicitImplicit 方法使编译器能够自动将 DateTime 对象转换为 DateTimeOffset 对象，而不用（在 C# 中）显式强制转换运算符或（在 Visual Basic 中）调用转换函数。它定义了一个“扩大转换”，“扩大转换”不会丢失数据，也不会引发 OverflowException。通过运用 ImplicitWideningImplicitImplicit 方法，可以编写诸如以下内容的代码： ImplicitWideningImplicitImplicit 方法使编译器能够自动将 DateTime 对象转换为 DateTimeOffset 对象，而不用（在 C# 中）显式强制转换运算符或（在 Visual Basic 中）调用转换函数。它定义了一个“扩大转换”，“扩大转换”不会丢失数据，也不会引发 OverflowException。通过运用 ImplicitWideningImplicitImplicit 方法，可以编写诸如以下内容的代码：

Dim timeWithOffset As DateTimeOffset
timeWithOffset = #07/03/2008 6:45PM#
Console.WriteLine(timeWithOffset.ToString())

timeWithOffset = Date.UtcNow
Console.WriteLine(timeWithOffset.ToString())

timeWithOffset = Date.SpecifyKind(Date.Now, DateTimeKind.Unspecified)
Console.WriteLine(timeWithOffset.ToString())

timeWithOffset = #1/1/2008 2:30AM# + New TimeSpan(1, 0, 0, 0)
Console.WriteLine(timeWithOffset.ToString())
' The example produces the following output if run on 3/20/2007
' at 6:25 PM on a computer in the U.S. Pacific Daylight Time zone:
'       7/3/2008 6:45:00 PM -07:00
'       3/21/2007 1:25:52 AM +00:00
'       3/20/2007 6:25:52 PM -07:00
'       1/2/2008 2:30:00 AM -08:00

DateTimeOffset timeWithOffset;
timeWithOffset = new DateTime(1008, 7, 3, 18, 45, 0);
Console.WriteLine(timeWithOffset.ToString());

timeWithOffset = DateTime.UtcNow;
Console.WriteLine(timeWithOffset.ToString());

timeWithOffset = DateTime.SpecifyKind(DateTime.Now,
                                      DateTimeKind.Unspecified);
Console.WriteLine(timeWithOffset.ToString());

timeWithOffset = new DateTime(2008, 1, 1, 2, 30, 0) +
                 new TimeSpan(1, 0, 0, 0);
Console.WriteLine(timeWithOffset.ToString());
// The example produces the following output if run on 3/20/2007
// at 6:25 PM on a computer in the U.S. Pacific Daylight Time zone:
//       7/3/2008 6:45:00 PM -07:00
//       3/21/2007 1:25:52 AM +00:00
//       3/20/2007 6:25:52 PM -07:00
//       1/2/2008 2:30:00 AM -08:00

此方法等效于 DateTimeOffset 构造函数。所生成的 DateTimeOffset 对象的偏移量取决于 dateTime 参数的 DateTime..::.Kind 属性值： 此方法等效于 DateTimeOffset 构造函数。所生成的 DateTimeOffset 对象的偏移量取决于 dateTime 参数的 DateTime..::.Kind 属性值：

  • 如果 DateTime..::.Kind 属性的值为 DateTimeKind..::.Utc，则 DateTimeOffset 对象的日期和时间被设置为 dateTime，其 Offset 属性被设置为 0。

  • 如果 DateTime..::.Kind 属性的值为 DateTimeKind..::.Local 或 DateTimeKind..::.Unspecified，则 DateTimeOffset 对象的日期和时间被设置为 dateTime，其 Offset 属性被设置为本地系统当前时区的偏移量。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Inequality 运算符

DateTimeOffset
.
.
::
.
Inequality 运算符
DateTimeOffset 结构

确定两个指定的 DateTimeOffset 对象是否表示不同的时间点。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    left As DateTimeOffset, _
    right As DateTimeOffset _
) As Boolean
public static bool operator !=(
    DateTimeOffset left,
    DateTimeOffset right
)
public:
static bool operator !=(
    DateTimeOffset left,
    DateTimeOffset right
)
static let inline (<>)
        left:DateTimeOffset *
        right:DateTimeOffset  : bool

参数

left
类型： System DateTimeOffset
要比较的第一个对象。
right
类型： System DateTimeOffset
要比较的第二个对象。

返回值

类型： System Boolean
如果 left 和 right 不具有相同的 UtcDateTime 值，则为 true；否则为 false。

Inequality 方法为 DateTimeOffset 对象定义了不相等运算符的运算。它始终从 Equality 中返回相反的结果。Inequality 方法启用了诸如以下内容的代码： Inequality 方法为 DateTimeOffset 对象定义了不相等运算符的运算。它始终从 Equality 中返回相反的结果。Inequality 方法启用了诸如以下内容的代码： Inequality 方法为 DateTimeOffset 对象定义了不相等运算符的运算。它始终从 Equality 中返回相反的结果。Inequality 方法启用了诸如以下内容的代码：

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-6, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-6, 0, 0))
Console.WriteLine(date1 <> date2)        ' Displays False
Console.WriteLine(date1 <> date3)        ' Displays True

DateTimeOffset date1 = new DateTimeOffset(2007, 6, 3, 14, 45, 0,
             new TimeSpan(-7, 0, 0));
DateTimeOffset date2 = new DateTimeOffset(2007, 6, 3, 15, 45, 0,
             new TimeSpan(-6, 0, 0));
DateTimeOffset date3 = new DateTimeOffset(date1.DateTime,
             new TimeSpan(-6, 0, 0));
Console.WriteLine(date1 != date2);        // Displays False
Console.WriteLine(date1 != date3);        // Displays True

在计算 left 和 right 操作数是否相等之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效： 在计算 left 和 right 操作数是否相等之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效：

Return first.UtcDateTime = second.UtcDateTime

return first.UtcDateTime == second.UtcDateTime;

换句话说，Inequality 方法确定这两个 DateTimeOffset 对象是否表示不同的时间点。它既不直接比较日期和时间，也不直接比较偏移量。 换句话说，Inequality 方法确定这两个 DateTimeOffset 对象是否表示不同的时间点。它既不直接比较日期和时间，也不直接比较偏移量。

不支持自定义运算符的语言可以改为调用 Compare 方法。此外，某些语言也可以直接调用 Inequality 方法，如以下示例所示。 不支持自定义运算符的语言可以改为调用 Compare 方法。此外，某些语言也可以直接调用 Inequality 方法，如以下示例所示。

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-6, 0, 0))
Dim date4 As DateTimeOffset = date1
Console.WriteLine( _
    DateTimeOffset.op_Inequality(date1, date2))   ' Displays True
Console.WriteLine( _
    DateTimeOffset.op_Inequality(date1, date3))   ' Displays True
Console.WriteLine( _
    DateTimeOffset.op_Inequality(date1, date4))   ' Displays False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.LessThan 运算符

DateTimeOffset
.
.
::
.
LessThan 运算符
DateTimeOffset 结构

确定一个指定的 DateTimeOffset 对象是否小于另一个指定的 DateTimeOffset 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator < ( _
    left As DateTimeOffset, _
    right As DateTimeOffset _
) As Boolean
public static bool operator <(
    DateTimeOffset left,
    DateTimeOffset right
)
public:
static bool operator <(
    DateTimeOffset left,
    DateTimeOffset right
)
static let inline (<)
        left:DateTimeOffset *
        right:DateTimeOffset  : bool

参数

left
类型： System DateTimeOffset
要比较的第一个对象。
right
类型： System DateTimeOffset
要比较的第二个对象。

返回值

类型： System Boolean
如果 left 的 UtcDateTime 值早于 right 的 UtcDateTime 值，则为 true；否则为 false。

LessThan 方法为 DateTimeOffset 对象定义了小于运算符的运算。它启用了诸如以下内容的代码： LessThan 方法为 DateTimeOffset 对象定义了小于运算符的运算。它启用了诸如以下内容的代码：

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-6, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-8, 0, 0))
Console.WriteLine(date1 < date2)        ' Displays False
Console.WriteLine(date1 < date3)        ' Displays True

DateTimeOffset date1 = new DateTimeOffset(2007, 6, 3, 14, 45, 0,
             new TimeSpan(-7, 0, 0));
DateTimeOffset date2 = new DateTimeOffset(2007, 6, 3, 15, 45, 0,
             new TimeSpan(-6, 0, 0));
DateTimeOffset date3 = new DateTimeOffset(date1.DateTime,
             new TimeSpan(-8, 0, 0));
Console.WriteLine(date1 < date2);        // Displays False
Console.WriteLine(date1 < date3);        // Displays True

在计算 left 和 right 操作数之前，此运算符会将这两个操作数转换为协调世界时 (UTC)。此运算与下列代码功能等效： 在计算 left 和 right 操作数之前，此运算符会将这两个操作数转换为协调世界时 (UTC)。此运算与下列代码功能等效：

Return left.UtcDateTime < right.UtcDateTime

return left.UtcDateTime < right.UtcDateTime;

不支持自定义运算符的语言可以改为调用 Compare 方法。此外，某些语言也可以直接调用 LessThan 方法，如以下示例所示。 不支持自定义运算符的语言可以改为调用 Compare 方法。此外，某些语言也可以直接调用 LessThan 方法，如以下示例所示。

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-6, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-8, 0, 0))
Console.WriteLine(DateTimeOffset.op_LessThan(date1, date2))  ' Displays False
Console.WriteLine(DateTimeOffset.op_LessThan(date1, date3))  ' Displays True

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.LessThanOrEqual 运算符

DateTimeOffset
.
.
::
.
LessThanOrEqual 运算符
DateTimeOffset 结构

确定一个指定的 DateTimeOffset 对象是否小于另一个指定的 DateTimeOffset 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <= ( _
    left As DateTimeOffset, _
    right As DateTimeOffset _
) As Boolean
public static bool operator <=(
    DateTimeOffset left,
    DateTimeOffset right
)
public:
static bool operator <=(
    DateTimeOffset left,
    DateTimeOffset right
)
static let inline (<=)
        left:DateTimeOffset *
        right:DateTimeOffset  : bool

参数

left
类型： System DateTimeOffset
要比较的第一个对象。
right
类型： System DateTimeOffset
要比较的第二个对象。

返回值

类型： System Boolean
如果 left 的 UtcDateTime 值早于 right 的 UtcDateTime 值，则为 true；否则为 false。

LessThanOrEqual 方法为 DateTimeOffset 对象定义了小于或等于运算符的运算。它启用了诸如以下内容的代码： LessThanOrEqual 方法为 DateTimeOffset 对象定义了小于或等于运算符的运算。它启用了诸如以下内容的代码：

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-6, 0, 0))
Dim date4 As DateTimeOffset = date1
Console.WriteLine(date1 <= date2)        ' Displays True
Console.WriteLine(date1 <= date3)        ' Displays False
Console.WriteLine(date1 <= date4)        ' Displays True

DateTimeOffset date1 = new DateTimeOffset(2007, 6, 3, 14, 45, 0,
             new TimeSpan(-7, 0, 0));
DateTimeOffset date2 = new DateTimeOffset(2007, 6, 3, 15, 45, 0,
             new TimeSpan(-7, 0, 0));
DateTimeOffset date3 = new DateTimeOffset(date1.DateTime,
             new TimeSpan(-6, 0, 0));
DateTimeOffset date4 = date1;
Console.WriteLine(date1 <= date2);        // Displays True
Console.WriteLine(date1 <= date3);        // Displays False
Console.WriteLine(date1 <= date4);        // Displays True

不支持自定义运算符的语言可以改为调用 Compare 方法。某些语言也可以直接调用 LessThanOrEqual 方法，如以下示例所示。 不支持自定义运算符的语言可以改为调用 Compare 方法。某些语言也可以直接调用 LessThanOrEqual 方法，如以下示例所示。

Dim date1 As New DateTimeOffset(#6/3/2007 2:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date2 As New DateTimeOffset(#6/3/2007 3:45PM#, _
             New TimeSpan(-7, 0, 0))
Dim date3 As New DateTimeOffset(date1.DateTime, _
             New TimeSpan(-6, 0, 0))
Dim date4 As DateTimeOffset = date1
Console.WriteLine(DateTimeOffset.op_LessThanOrEqual(date1, date2))   ' Displays True
Console.WriteLine(DateTimeOffset.op_LessThanOrEqual(date1, date3)) ' Displays False
Console.WriteLine(DateTimeOffset.op_LessThanOrEqual(date1, date4)) ' Displays True

在计算 left 和 right 操作数之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效： 在计算 left 和 right 操作数之前，此运算符会将这两个值转换为协调世界时 (UTC)。此运算与下列代码功能等效：

Return left.UtcDateTime <= right.UtcDateTime

return left.UtcDateTime <= right.UtcDateTime;

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Subtraction 运算符

DateTimeOffset
.
.
::
.
Subtraction 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

从 DateTimeOffset 对象中减去指定的 DateTimeOffset 或 TimeSpan 对象。

名称 说明
页首

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Subtraction 运算符 (DateTimeOffset, DateTimeOffset)

DateTimeOffset
.
.
::
.
Subtraction 运算符 (DateTimeOffset, DateTimeOffset)
DateTimeOffset 结构

从一个 DateTimeOffset 对象中减去另一个对象并生成时间间隔。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    left As DateTimeOffset, _
    right As DateTimeOffset _
) As TimeSpan
public static TimeSpan operator -(
    DateTimeOffset left,
    DateTimeOffset right
)
public:
static TimeSpan operator -(
    DateTimeOffset left,
    DateTimeOffset right
)
static let inline (-)
        left:DateTimeOffset *
        right:DateTimeOffset  : TimeSpan

参数

left
类型： System DateTimeOffset
被减数。
right
类型： System DateTimeOffset
减数。

返回值

类型： System TimeSpan
一个对象，它表示 left 与 right 之差。

Subtraction 方法为 DateTimeOffset 对象定义了减法运算。它启用了诸如以下内容的代码： Subtraction 方法为 DateTimeOffset 对象定义了减法运算。它启用了诸如以下内容的代码：

Dim firstDate As New DateTimeOffset(#3/25/2008 6:00PM#, _
                                    New TimeSpan(-7, 0, 0))
Dim secondDate As New DateTimeOffset(#3/25/2008 6:00PM#, _
                                     New TimeSpan(-5, 0, 0))
Dim thirdDate As New DateTimeOffset(#2/28/2008 9:00AM#, _
                                    New TimeSpan(-7, 0, 0))
Dim difference As TimeSpan

difference = firstDate - secondDate
Console.WriteLine("({0}) - ({1}): {2} days, {3}:{4:d2}", _
                  firstDate.ToString(), _
                  secondDate.ToString(), _
                  difference.Days, _
                  difference.Hours, _
                  difference.Minutes)
difference = firstDate - thirdDate
Console.WriteLine("({0}) - ({1}): {2} days, {3}:{4:d2}", _
                  firstDate.ToString(), _
                  secondDate.ToString(), _
                  difference.Days, _
                  difference.Hours, _
                  difference.Minutes)
' The example produces the following output:
'    (3/25/2008 6:00:00 PM -07:00) - (3/25/2008 6:00:00 PM -05:00): 0 days, 2:00
'    (3/25/2008 6:00:00 PM -07:00) - (3/25/2008 6:00:00 PM -05:00): 26 days, 9:00

DateTimeOffset firstDate = new DateTimeOffset(2008, 3, 25, 18, 0, 0,
                                              new TimeSpan(-7, 0, 0));
DateTimeOffset secondDate = new DateTimeOffset(2008, 3, 25, 18, 0, 0,
                                               new TimeSpan(-5, 0, 0));
DateTimeOffset thirdDate = new DateTimeOffset(2008, 2, 28, 9, 0, 0,
                                              new TimeSpan(-7, 0, 0));
TimeSpan difference;

difference = firstDate - secondDate;
Console.WriteLine("({0}) - ({1}): {2} days, {3}:{4:d2}",
                  firstDate.ToString(),
                  secondDate.ToString(),
                  difference.Days,
                  difference.Hours,
                  difference.Minutes);

difference = firstDate - thirdDate;
Console.WriteLine("({0}) - ({1}): {2} days, {3}:{4:d2}",
                  firstDate.ToString(),
                  secondDate.ToString(),
                  difference.Days,
                  difference.Hours,
                  difference.Minutes);
// The example produces the following output:
//    (3/25/2008 6:00:00 PM -07:00) - (3/25/2008 6:00:00 PM -05:00): 0 days, 2:00
//    (3/25/2008 6:00:00 PM -07:00) - (3/25/2008 6:00:00 PM -05:00): 26 days, 9:00

不支持自定义运算符和运算符重载的语言可以改为调用 DateTimeOffset..::.Subtract(DateTimeOffset) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Subtraction 重载
System 命名空间
Subtract

其他资源

使用日期和时间执行算术运算


DateTimeOffset ..::.Subtraction 运算符 (DateTimeOffset, TimeSpan)

DateTimeOffset
.
.
::
.
Subtraction 运算符 (DateTimeOffset, TimeSpan)
DateTimeOffset 结构

从指定的日期和时间减去指定的时间间隔，并生成新的日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    dateTimeOffset As DateTimeOffset, _
    timeSpan As TimeSpan _
) As DateTimeOffset
public static DateTimeOffset operator -(
    DateTimeOffset dateTimeOffset,
    TimeSpan timeSpan
)
public:
static DateTimeOffset operator -(
    DateTimeOffset dateTimeOffset,
    TimeSpan timeSpan
)
static let inline (-)
        dateTimeOffset:DateTimeOffset *
        timeSpan:TimeSpan  : DateTimeOffset

参数

dateTimeOffset
类型： System DateTimeOffset
timeSpan
类型： System TimeSpan
要减去的时间间隔。

返回值

类型： System DateTimeOffset
一个对象，它等于 dateTimeOffset 减 timeSpan 的值。
异常 | 条件
ArgumentOutOfRangeException | 所生成的 DateTimeOffset 值小于 MinValue 或大于 MaxValue。

Subtraction 方法为 DateTimeOffset 对象定义了减法运算。它启用了诸如以下内容的代码： Subtraction 方法为 DateTimeOffset 对象定义了减法运算。它启用了诸如以下内容的代码：

Dim offsetDate As New DateTimeOffset(#12/3/2007 11:30AM#, _
                               New TimeSpan(-8, 0, 0))
Dim duration As New TimeSpan(7, 18, 0, 0)
Console.WriteLine(offsetDate - duration)    ' Displays 11/25/2007 5:30:00 PM -08:00

DateTimeOffset offsetDate = new DateTimeOffset(2007, 12, 3, 11, 30, 0,
                               new TimeSpan(-8, 0, 0));
TimeSpan duration = new TimeSpan(7, 18, 0, 0);
Console.WriteLine(offsetDate - duration);  // Displays 11/25/2007 5:30:00 PM -08:00

不支持自定义运算符和运算符重载的语言可以改为调用 DateTimeOffset..::.Subtract(TimeSpan) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
Subtraction 重载
System 命名空间
Subtract

其他资源

使用日期和时间执行算术运算


DateTimeOffset 属性

DateTimeOffset 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DateTimeOffset 结构

DateTimeOffset 类型公开以下成员。

名称 说明
页首

参考

DateTimeOffset 结构
System 命名空间


DateTimeOffset ..::.Date 属性

DateTimeOffset
.
.
::
.
Date 属性
DateTimeOffset 结构

获取 DateTime 值，该值表示当前 DateTimeOffset 对象的日期组成部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Date As DateTime
    Get
public DateTime Date { get; }
public:
property DateTime Date {
    DateTime get ();
}
member Date : DateTime

属性值

类型： System DateTime
一个 DateTime 值，该值表示当前 DateTimeOffset 对象的日期组成部分。

此属性将从 DateTimeOffset 对象中移除时间组成部分的任何有意义的部分，并只返回其有意义的日期组成部分。例如，如果 DateTimeOffset 对象具有日期和时间值“1/12/07 4:01pm +7:30”，则该属性将返回“1/12/07 12:00:00 AM”的 DateTime 值。然后可以使用只用于显示日期的任何标准或自定义格式说明符来显示 DateTime 值。（有关说明，请参见“示例”部分。） 此属性将从 DateTimeOffset 对象中移除时间组成部分的任何有意义的部分，并只返回其有意义的日期组成部分。例如，如果 DateTimeOffset 对象具有日期和时间值“1/12/07 4:01pm +7:30”，则该属性将返回“1/12/07 12:00:00 AM”的 DateTime 值。然后可以使用只用于显示日期的任何标准或自定义格式说明符来显示 DateTime 值。（有关说明，请参见“示例”部分。） 此属性将从 DateTimeOffset 对象中移除时间组成部分的任何有意义的部分，并只返回其有意义的日期组成部分。例如，如果 DateTimeOffset 对象具有日期和时间值“1/12/07 4:01pm +7:30”，则该属性将返回“1/12/07 12:00:00 AM”的 DateTime 值。然后可以使用只用于显示日期的任何标准或自定义格式说明符来显示 DateTime 值。（有关说明，请参见“示例”部分。） 此属性将从 DateTimeOffset 对象中移除时间组成部分的任何有意义的部分，并只返回其有意义的日期组成部分。例如，如果 DateTimeOffset 对象具有日期和时间值“1/12/07 4:01pm +7:30”，则该属性将返回“1/12/07 12:00:00 AM”的 DateTime 值。然后可以使用只用于显示日期的任何标准或自定义格式说明符来显示 DateTime 值。（有关说明，请参见“示例”部分。）

所返回的 DateTime 对象的 DateTime..::.Kind 属性值始终为 DateTimeKind..::.Unspecified。它不受 Offset 属性值的影响。 所返回的 DateTime 对象的 DateTime..::.Kind 属性值始终为 DateTimeKind..::.Unspecified。它不受 Offset 属性值的影响。

为了显示不含其时间组成部分的日期，您也可以使用“D”或“d”格式说明符；有关说明，请参见“示例”部分。

下面的示例检索特定日期的 Date 属性值。然后，该示例使用一些标准和自定义的仅限日期的格式说明符将该值显示到控制台上。 下面的示例检索特定日期的 Date 属性值。然后，该示例使用一些标准和自定义的仅限日期的格式说明符将该值显示到控制台上。

' Illustrate Date property and date formatting
Dim thisDate As New DateTimeOffset(#3/17/2008 1:32AM#, New TimeSpan(-5, 0, 0))
Dim fmt As String                    ' format specifier
' Display date only using "D" format specifier
' For en-us culture, displays:
'   'D' format specifier: Monday, March 17, 2008
fmt = "D"
Console.WriteLine("'{0}' format specifier: {1}", _
                  fmt, thisDate.Date.ToString(fmt))

' Display date only using "d" format specifier
' For en-us culture, displays:
'   'd' format specifier: 3/17/2008
fmt = "d"
Console.WriteLine("'{0}' format specifier: {1}", _
                  fmt, thisDate.Date.ToString(fmt))

' Display date only using "Y" (or "y") format specifier
' For en-us culture, displays:
'   'Y' format specifier: March, 2008
fmt = "Y"
Console.WriteLine("'{0}' format specifier: {1}", _
                  fmt, thisDate.Date.ToString(fmt))

' Display date only using custom format specifier
' For en-us culture, displays:
'   'dd MMM yyyy' format specifier: 17 Mar 2008
fmt = "dd MMM yyyy"
Console.WriteLine("'{0}' format specifier: {1}", _
                  fmt, thisDate.Date.ToString(fmt))

// Illustrate Date property and date formatting
DateTimeOffset thisDate = new DateTimeOffset(2008, 3, 17, 1, 32, 0, new TimeSpan(-5, 0, 0));
string fmt;                      // format specifier

// Display date only using "D" format specifier
// For en-us culture, displays:
//   'D' format specifier: Monday, March 17, 2008
fmt = "D";
Console.WriteLine("'{0}' format specifier: {1}",
                  fmt, thisDate.Date.ToString(fmt));

// Display date only using "d" format specifier
// For en-us culture, displays:
//   'd' format specifier: 3/17/2008
fmt = "d";
Console.WriteLine("'{0}' format specifier: {1}",
                  fmt, thisDate.Date.ToString(fmt));

// Display date only using "Y" (or "y") format specifier
// For en-us culture, displays:
//   'Y' format specifier: March, 2008
fmt = "Y";
Console.WriteLine("'{0}' format specifier: {1}",
                  fmt, thisDate.Date.ToString(fmt));

// Display date only using custom format specifier
// For en-us culture, displays:
//   'dd MMM yyyy' format specifier: 17 Mar 2008
fmt = "dd MMM yyyy";
Console.WriteLine("'{0}' format specifier: {1}",
                  fmt, thisDate.Date.ToString(fmt));

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间

其他资源

标准日期和时间格式字符串
自定义日期和时间格式字符串


DateTimeOffset ..::.DateTime 属性

DateTimeOffset
.
.
::
.
DateTime 属性
DateTimeOffset 结构

获取 DateTime 值，该值表示当前 DateTimeOffset 对象的日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DateTime As DateTime
    Get
public DateTime DateTime { get; }
public:
property DateTime DateTime {
    DateTime get ();
}
member DateTime : DateTime

属性值

类型： System DateTime
当前的 DateTimeOffset 对象的日期和时间。

DateTime 属性不受 Offset 属性值的影响。

此属性返回 DateTimeOffset 对象的日期和时间组成部分，这对于执行 DateTimeOffset 到 DateTime 的转换非常有用。例如，如果 DateTimeOffset 对象具有日期和时间值“1/12/07 4:01pm + 7:30”，则该属性将返回“1/12/07 4:01pm”的日期。 此属性返回 DateTimeOffset 对象的日期和时间组成部分，这对于执行 DateTimeOffset 到 DateTime 的转换非常有用。例如，如果 DateTimeOffset 对象具有日期和时间值“1/12/07 4:01pm + 7:30”，则该属性将返回“1/12/07 4:01pm”的日期。

所返回的 DateTime 对象的 DateTime..::.Kind 属性值为 DateTimeKind..::.Unspecified。

下面的示例演示如何使用 DateTime 属性将 Now 和 UtcNow 属性返回的时间转换为 DateTime 值。

Dim offsetDate As DateTimeOffset
Dim regularDate As Date

offsetDate = DateTimeOffset.Now
regularDate = offsetDate.DateTime
Console.WriteLine("{0} converts to {1}, Kind {2}.", _
                  offsetDate.ToString(), _
                  regularDate, _
                  regularDate.Kind)

offsetDate = DateTimeOffset.UtcNow
regularDate = offsetDate.DateTime
Console.WriteLine("{0} converts to {1}, Kind {2}.", _
                  offsetDate.ToString(), _
                  regularDate, _
                  regularDate.Kind)
' If run on 3/6/2007 at 17:11, produces the following output:
'
'   3/6/2007 5:11:22 PM -08:00 converts to 3/6/2007 5:11:22 PM, Kind Unspecified.
'   3/7/2007 1:11:22 AM +00:00 converts to 3/7/2007 1:11:22 AM, Kind Unspecified.

DateTimeOffset offsetDate;
DateTime regularDate;

offsetDate = DateTimeOffset.Now;
regularDate = offsetDate.DateTime;
Console.WriteLine("{0} converts to {1}, Kind {2}.",
                  offsetDate.ToString(),
                  regularDate,
                  regularDate.Kind);

offsetDate = DateTimeOffset.UtcNow;
regularDate = offsetDate.DateTime;
Console.WriteLine("{0} converts to {1}, Kind {2}.",
                  offsetDate.ToString(),
                  regularDate,
                  regularDate.Kind);
// If run on 3/6/2007 at 17:11, produces the following output:
//
//   3/6/2007 5:11:22 PM -08:00 converts to 3/6/2007 5:11:22 PM, Kind Unspecified.
//   3/7/2007 1:11:22 AM +00:00 converts to 3/7/2007 1:11:22 AM, Kind Unspecified.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
LocalDateTime

其他资源

在 DateTime 与 DateTimeOffset 之间进行转换


DateTimeOffset ..::.Day 属性

DateTimeOffset
.
.
::
.
Day 属性
DateTimeOffset 结构

获取由当前 DateTimeOffset 对象所表示的月中的某一天。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Day As Integer
    Get
public int Day { get; }
public:
property int Day {
    int get ();
}
member Day : int

属性值

类型： System Int32
当前 DateTimeOffset 对象的日组成部分，以 1 到 31 之间的一个值来表示。

Day 属性不受 Offset 属性值的影响。

通过将 ToString 方法与“d”或“dd”自定义格式说明符一起调用，您也可以创建 DateTimeOffset 对象的日组成部分的字符串表示形式。

下面的示例用三种不同的方法显示了 DateTimeOffset 对象的日组成部分：

  • 通过检索 Day 属性的值。

  • 通过将 ToString(String) 方法与“d”格式说明符一起调用。

  • 通过将 ToString(String) 方法与“dd”格式说明符一起调用。

Dim theTime As New DateTimeOffset(#5/1/2007 4:35PM#, _
                                       DateTimeOffset.Now.Offset)
Console.WriteLine("The day component of {0} is {1}.", _
                  theTime, theTime.Day)

Console.WriteLine("The day component of {0} is{1}.", _
                  theTime, theTime.ToString(" d"))

Console.WriteLine("The day component of {0} is {1}.", _
                  theTime, theTime.ToString("dd"))
' The example produces the following output:
'    The day component of 5/1/2007 4:35:00 PM -08:00 is 1.
'    The day component of 5/1/2007 4:35:00 PM -08:00 is 1.
'    The day component of 5/1/2007 4:35:00 PM -08:00 is 01.

DateTimeOffset theTime = new DateTimeOffset(2007, 5, 1, 16, 35, 0,
                                            DateTimeOffset.Now.Offset);
Console.WriteLine("The day component of {0} is {1}.",
                  theTime, theTime.Day);

Console.WriteLine("The day component of {0} is{1}.",
                  theTime, theTime.ToString(" d"));

Console.WriteLine("The day component of {0} is {1}.",
                  theTime, theTime.ToString("dd"));
// The example produces the following output:
//    The day component of 5/1/2007 4:35:00 PM -08:00 is 1.
//    The day component of 5/1/2007 4:35:00 PM -08:00 is 1.
//    The day component of 5/1/2007 4:35:00 PM -08:00 is 01.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.DayOfWeek 属性

DateTimeOffset
.
.
::
.
DayOfWeek 属性
DateTimeOffset 结构

获取由当前 DateTimeOffset 对象所表示的周中的某一天。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DayOfWeek As DayOfWeek
    Get
public DayOfWeek DayOfWeek { get; }
public:
property DayOfWeek DayOfWeek {
    DayOfWeek get ();
}
member DayOfWeek : DayOfWeek

属性值

类型： System DayOfWeek
用于指示当前 DateTimeOffset 对象的星期几的枚举值之一。

DayOfWeek 枚举中的常量值的范围为 DayOfWeek..::.Sunday 到 DayOfWeek..::.Saturday。如果强制转换为整数，则此枚举值的范围为零（表示 DayOfWeek..::.Sunday）到六（表示 DayOfWeek..::.Saturday）。 DayOfWeek 枚举中的常量值的范围为 DayOfWeek..::.Sunday 到 DayOfWeek..::.Saturday。如果强制转换为整数，则此枚举值的范围为零（表示 DayOfWeek..::.Sunday）到六（表示 DayOfWeek..::.Saturday）。

也可以使用“D”格式说明符或“dddd”自定义格式说明符来显示特定日期的星期几名称。例如： 也可以使用“D”格式说明符或“dddd”自定义格式说明符来显示特定日期的星期几名称。例如：

Dim displayDate As New DateTimeOffset(#1/1/2008 1:18PM#, _
                                      DateTimeOffset.Now.Offset)
Console.WriteLine("{0:D}", displayDate)    ' Output: Tuesday, January 01, 2008
Console.WriteLine("{0:d} is a {0:dddd}.", _
                  displayDate)             ' Output: 1/1/2008 is a Tuesday.

DateTimeOffset displayDate = new DateTimeOffset(2008, 1, 1, 13, 18, 00,
                                                DateTimeOffset.Now.Offset);
Console.WriteLine("{0:D}", displayDate);  // Output: Tuesday, January 01, 2008
Console.WriteLine("{0:d} is a {0:dddd}.",
                  displayDate);           // Output: 1/1/2008 is a Tuesday.

请注意，通过调用 DayOfWeek 枚举成员（由此属性返回）的 ToString 方法所返回的字符串未进行本地化。若要提取包含当前区域性或特定区域性的星期几名称的字符串，请将 ToString 方法与“dddd”自定义格式说明符一起调用。例如，下面的代码使用 fr-fr 区域性显示了日期的星期几名称。 请注意，通过调用 DayOfWeek 枚举成员（由此属性返回）的 ToString 方法所返回的字符串未进行本地化。若要提取包含当前区域性或特定区域性的星期几名称的字符串，请将 ToString 方法与“dddd”自定义格式说明符一起调用。例如，下面的代码使用 fr-fr 区域性显示了日期的星期几名称。 请注意，通过调用 DayOfWeek 枚举成员（由此属性返回）的 ToString 方法所返回的字符串未进行本地化。若要提取包含当前区域性或特定区域性的星期几名称的字符串，请将 ToString 方法与“dddd”自定义格式说明符一起调用。例如，下面的代码使用 fr-fr 区域性显示了日期的星期几名称。

Dim thisDate As New DateTimeOffset(#6/1/2007 6:15AM#, _
                                      DateTimeOffset.Now.Offset)
Dim weekdayName As String = thisDate.ToString("dddd", _
                            New CultureInfo("fr-fr"))
Console.WriteLine(weekdayName)                        ' Displays vendredi

DateTimeOffset thisDate = new DateTimeOffset(2007, 6, 1, 6, 15, 0,
                                             DateTimeOffset.Now.Offset);
string weekdayName = thisDate.ToString("dddd",
                                       new CultureInfo("fr-fr"));
Console.WriteLine(weekdayName);                  // Displays vendredi

下面的示例显示 2008 年每个月的第一天的星期几名称。

Dim startOfMonth As New DateTimeOffset(#1/1/2008#, _
                                      DateTimeOffset.Now.Offset)
Dim year As Integer = startOfMonth.Year
Do While startOfMonth.Year = year
   Console.WriteLine("{0:MMM d, yyyy} is a {1}.", _
                     startOfMonth, startOfMonth.DayOfWeek)
   startOfMonth = startOfMonth.AddMonths(1)
Loop
' This example writes the following output to the console:
'    Jan 1, 2008 is a Tuesday.
'    Feb 1, 2008 is a Friday.
'    Mar 1, 2008 is a Saturday.
'    Apr 1, 2008 is a Tuesday.
'    May 1, 2008 is a Thursday.
'    Jun 1, 2008 is a Sunday.
'    Jul 1, 2008 is a Tuesday.
'    Aug 1, 2008 is a Friday.
'    Sep 1, 2008 is a Monday.
'    Oct 1, 2008 is a Wednesday.
'    Nov 1, 2008 is a Saturday.
'    Dec 1, 2008 is a Monday.

DateTimeOffset startOfMonth = new DateTimeOffset(2008, 1, 1, 0, 0, 0,
                                         DateTimeOffset.Now.Offset);
int year = startOfMonth.Year;
do
{
   Console.WriteLine("{0:MMM d, yyyy} is a {1}.", startOfMonth, startOfMonth.DayOfWeek);
   startOfMonth = startOfMonth.AddMonths(1);
}
while (startOfMonth.Year == year);
// This example writes the following output to the console:
//    Jan 1, 2008 is a Tuesday.
//    Feb 1, 2008 is a Friday.
//    Mar 1, 2008 is a Saturday.
//    Apr 1, 2008 is a Tuesday.
//    May 1, 2008 is a Thursday.
//    Jun 1, 2008 is a Sunday.
//    Jul 1, 2008 is a Tuesday.
//    Aug 1, 2008 is a Friday.
//    Sep 1, 2008 is a Monday.
//    Oct 1, 2008 is a Wednesday.
//    Nov 1, 2008 is a Saturday.
//    Dec 1, 2008 is a Monday.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.DayOfYear 属性

DateTimeOffset
.
.
::
.
DayOfYear 属性
DateTimeOffset 结构

获取由当前 DateTimeOffset 对象所表示的年中的某一天。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DayOfYear As Integer
    Get
public int DayOfYear { get; }
public:
property int DayOfYear {
    int get ();
}
member DayOfYear : int

属性值

类型： System Int32
当前 DateTimeOffset 对象的年中的某一天，以 1 到 366 之间的一个值来表示。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Hour 属性

DateTimeOffset
.
.
::
.
Hour 属性
DateTimeOffset 结构

获取由当前 DateTimeOffset 对象所表示的时间的小时组成部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Hour As Integer
    Get
public int Hour { get; }
public:
property int Hour {
    int get ();
}
member Hour : int

属性值

类型： System Int32
当前 DateTimeOffset 对象的小时组成部分。此属性使用 24 小时制；值介于 0 到 23 之间。 当前 DateTimeOffset 对象的小时组成部分。此属性使用 24 小时制；值介于 0 到 23 之间。

Hour 属性不受 Offset 属性值的影响。

通过将 ToString 方法与“H”或“HH”自定义格式说明符一起调用，您也可以创建 DateTimeOffset 对象的小时组成部分的字符串表示形式。

下面的示例用三种不同的方法显示了 DateTimeOffset 对象的小时组成部分：

  • 通过检索 Hour 属性的值。

  • 通过将 ToString(String) 方法与“H”格式说明符一起调用。

  • 通过将 ToString(String) 方法与“HH”格式说明符一起调用。

Dim theTime As New DateTimeOffset(#3/1/2008 2:15PM#, _
                                       DateTimeOffset.Now.Offset)
Console.WriteLine("The hour component of {0} is {1}.", _
                  theTime, theTime.Hour)

Console.WriteLine("The hour component of {0} is{1}.", _
                  theTime, theTime.ToString(" H"))

Console.WriteLine("The hour component of {0} is {1}.", _
                  theTime, theTime.ToString("HH"))
' The example produces the following output:
'    The hour component of 3/1/2008 2:15:00 PM -08:00 is 14.
'    The hour component of 3/1/2008 2:15:00 PM -08:00 is 14.
'    The hour component of 3/1/2008 2:15:00 PM -08:00 is 14.

DateTimeOffset theTime = new DateTimeOffset(2008, 3, 1, 14, 15, 00,
                                       DateTimeOffset.Now.Offset);
Console.WriteLine("The hour component of {0} is {1}.",
                  theTime, theTime.Hour);

Console.WriteLine("The hour component of {0} is{1}.",
                  theTime, theTime.ToString(" H"));

Console.WriteLine("The hour component of {0} is {1}.",
                  theTime, theTime.ToString("HH"));
// The example produces the following output:
//    The hour component of 3/1/2008 2:15:00 PM -08:00 is 14.
//    The hour component of 3/1/2008 2:15:00 PM -08:00 is 14.
//    The hour component of 3/1/2008 2:15:00 PM -08:00 is 14.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.LocalDateTime 属性

DateTimeOffset
.
.
::
.
LocalDateTime 属性
DateTimeOffset 结构

获取 DateTime 值，该值表示当前 DateTimeOffset 对象的本地日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property LocalDateTime As DateTime
    Get
public DateTime LocalDateTime { get; }
public:
property DateTime LocalDateTime {
    DateTime get ();
}
member LocalDateTime : DateTime

属性值

类型： System DateTime
当前的 DateTimeOffset 对象的本地日期和时间。

如果需要，LocalDateTime 属性会将当前 DateTimeOffset 对象的日期和时间转换为本地系统的日期和时间。转换操作包括以下两个步骤： 如果需要，LocalDateTime 属性会将当前 DateTimeOffset 对象的日期和时间转换为本地系统的日期和时间。转换操作包括以下两个步骤：

  1. 该属性将当前 DateTimeOffset 对象的时间转换为协调世界时 (UTC)。

  2. 然后，该属性将 UTC 转换为本地时间。

不存在无效的时间，并且不明确的时间被映射到本地时区的标准时间。（但是，转换可能出现反常情况：如果派生自本地计算机的 DateTimeOffset 值反映一个不明确的日期和时间，则可能会将该值转换为 UTC，然后再转换回不同于原始时间的本地时间。）此属性在执行此转换时将应用本地时区中的任何调整规则。 不存在无效的时间，并且不明确的时间被映射到本地时区的标准时间。（但是，转换可能出现反常情况：如果派生自本地计算机的 DateTimeOffset 值反映一个不明确的日期和时间，则可能会将该值转换为 UTC，然后再转换回不同于原始时间的本地时间。）此属性在执行此转换时将应用本地时区中的任何调整规则。

此属性返回 DateTimeOffset 对象的日期和时间组成部分，这对于执行 DateTimeOffset 到 DateTime 的转换非常有用。此属性除了执行任何所需的时间转换外，它还不同于 DateTime 属性，因为它会将返回的 DateTime 对象的 Kind 属性值设置为 DateTimeKind..::.Local。 此属性返回 DateTimeOffset 对象的日期和时间组成部分，这对于执行 DateTimeOffset 到 DateTime 的转换非常有用。此属性除了执行任何所需的时间转换外，它还不同于 DateTime 属性，因为它会将返回的 DateTime 对象的 Kind 属性值设置为 DateTimeKind..::.Local。

下面的示例阐释了将 DateTimeOffset 值转换为美国本地时间的一些转换过程。太平洋时区。请注意，最后三个时间都是不确定的时间；该属性将它们全部映射到太平洋标准时区中的某一个日期和时间。 下面的示例阐释了将 DateTimeOffset 值转换为美国本地时间的一些转换过程。太平洋时区。请注意，最后三个时间都是不确定的时间；该属性将它们全部映射到太平洋标准时区中的某一个日期和时间。 下面的示例阐释了将 DateTimeOffset 值转换为美国本地时间的一些转换过程。太平洋时区。请注意，最后三个时间都是不确定的时间；该属性将它们全部映射到太平洋标准时区中的某一个日期和时间。

 Dim dto As DateTimeOffset

 ' Current time
 dto = DateTimeOffset.Now
 Console.WriteLine(dto.LocalDateTime)
 ' UTC time
 dto = DateTimeOffset.UtcNow
 Console.WriteLine(dto.LocalDateTime)

' Transition to DST in local time zone occurs on 3/11/2007 at 2:00 AM
 dto = New DateTimeOffset(#03/11/2007 3:30AM#, New Timespan(-7, 0, 0))
 Console.WriteLine(dto.LocalDateTime)
 dto = New DateTimeOffset(#03/11/2007 2:30AM#, New Timespan(-7, 0, 0))
 Console.WriteLine(dto.LocalDateTime)
 ' Invalid time in local time zone
 dto = New DateTimeOffset(#03/11/2007 2:30AM#, New Timespan(-8, 0, 0))
 Console.WriteLine(TimeZoneInfo.Local.IsInvalidTime(dto.DateTime))
 Console.WriteLine(dto.LocalDateTime)

 ' Transition from DST in local time zone occurs on 11/4/07 at 2:00 AM
 ' This is an ambiguous time
 dto = New DateTimeOffset(#11/4/2007 1:30AM#, New TimeSpan(-7, 0, 0))
 Console.WriteLine(TimeZoneInfo.Local.IsAmbiguousTime(dto))
 Console.WriteLine(dto.LocalDateTime)
 dto = New DateTimeOffset(#11/4/2007 2:30AM#, New TimeSpan(-7, 0, 0))
 Console.WriteLine(TimeZoneInfo.Local.IsAmbiguousTime(dto))
 Console.WriteLine(dto.LocalDateTime)
 ' This is also an ambiguous time
 dto = New DateTimeOffset(#11/4/2007 1:30AM#, New TimeSpan(-8, 0, 0))
 Console.WriteLine(TimeZoneInfo.Local.IsAmbiguousTime(dto))
 Console.WriteLine(dto.LocalDateTime)
 ' If run on 3/8/2007 at 4:56 PM, the code produces the following
 ' output:
 '    3/8/2007 4:56:03 PM
 '    3/8/2007 4:56:03 PM
 '    3/11/2007 3:30:00 AM
 '    3/11/2007 1:30:00 AM
 '    True
 '    3/11/2007 3:30:00 AM
 '    True
 '    11/4/2007 1:30:00 AM
 '    11/4/2007 1:30:00 AM
 '    True
 '    11/4/2007 1:30:00 AM

 DateTimeOffset dto;

 // Current time
 dto = DateTimeOffset.Now;
 Console.WriteLine(dto.LocalDateTime);
 // UTC time
 dto = DateTimeOffset.UtcNow;
 Console.WriteLine(dto.LocalDateTime);

// Transition to DST in local time zone occurs on 3/11/2007 at 2:00 AM
 dto = new DateTimeOffset(2007, 3, 11, 3, 30, 0, new TimeSpan(-7, 0, 0));
 Console.WriteLine(dto.LocalDateTime);
 dto = new DateTimeOffset(2007, 3, 11, 2, 30, 0, new TimeSpan(-7, 0, 0));
 Console.WriteLine(dto.LocalDateTime);
 // Invalid time in local time zone
 dto = new DateTimeOffset(2007, 3, 11, 2, 30, 0, new TimeSpan(-8, 0, 0));
 Console.WriteLine(TimeZoneInfo.Local.IsInvalidTime(dto.DateTime));
 Console.WriteLine(dto.LocalDateTime);

 // Transition from DST in local time zone occurs on 11/4/07 at 2:00 AM
 // This is an ambiguous time
 dto = new DateTimeOffset(2007, 11, 4, 1, 30, 0, new TimeSpan(-7, 0, 0));
 Console.WriteLine(TimeZoneInfo.Local.IsAmbiguousTime(dto));
 Console.WriteLine(dto.LocalDateTime);
 dto = new DateTimeOffset(2007, 11, 4, 2, 30, 0, new TimeSpan(-7, 0, 0));
 Console.WriteLine(TimeZoneInfo.Local.IsAmbiguousTime(dto));
 Console.WriteLine(dto.LocalDateTime);
 // This is also an ambiguous time
 dto = new DateTimeOffset(2007, 11, 4, 1, 30, 0, new TimeSpan(-8, 0, 0));
 Console.WriteLine(TimeZoneInfo.Local.IsAmbiguousTime(dto));
 Console.WriteLine(dto.LocalDateTime);
 // If run on 3/8/2007 at 4:56 PM, the code produces the following
 // output:
 //    3/8/2007 4:56:03 PM
 //    3/8/2007 4:56:03 PM
 //    3/11/2007 3:30:00 AM
 //    3/11/2007 1:30:00 AM
 //    True
 //    3/11/2007 3:30:00 AM
 //    True
 //    11/4/2007 1:30:00 AM
 //    11/4/2007 1:30:00 AM
 //    True
 //    11/4/2007 1:30:00 AM

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
DateTime


DateTimeOffset ..::.Millisecond 属性

DateTimeOffset
.
.
::
.
Millisecond 属性
DateTimeOffset 结构

获取由当前 DateTimeOffset 对象所表示的时间的毫秒组成部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Millisecond As Integer
    Get
public int Millisecond { get; }
public:
property int Millisecond {
    int get ();
}
member Millisecond : int

属性值

类型： System Int32
当前 DateTimeOffset 对象的毫秒组成部分，以 0 到 999 之间的一个整数来表示。

通过将 ToString 方法与“fff”自定义格式说明符一起调用，您也可以创建 DateTimeOffset 对象的毫秒组成部分的字符串表示形式。

如果依靠 Now 或 UtcNow 之类的属性来准确跟踪所经历的毫秒数，则时间的毫秒组成部分的精度取决于系统时钟的分辨率。在 Windows NT 3.5 和更高版本以及 Windows Vista 操作系统上，时钟的分辨率大约为 10-15 毫秒。 如果依靠 Now 或 UtcNow 之类的属性来准确跟踪所经历的毫秒数，则时间的毫秒组成部分的精度取决于系统时钟的分辨率。在 Windows NT 3.5 和更高版本以及 Windows Vista 操作系统上，时钟的分辨率大约为 10-15 毫秒。

下面的示例通过使用自定义的格式说明符并直接访问 Millisecond 属性来显示 DateTimeOffset 对象的毫秒数。

Dim date1 As New DateTimeOffset(2008, 3, 5, 5, 45, 35, 649, _
                                New TimeSpan(-7, 0, 0))
Console.WriteLine("Milliseconds value of {0} is {1}.", _
                  date1.ToString("MM/dd/yyyy hh:mm:ss.fff"), _
                  date1.Millisecond)
' The example produces the following output:
'
' Milliseconds value of 03/05/2008 05:45:35.649 is 649.

DateTimeOffset date1 = new DateTimeOffset(2008, 3, 5, 5, 45, 35, 649,
                                new TimeSpan(-7, 0, 0));
Console.WriteLine("Milliseconds value of {0} is {1}.",
                  date1.ToString("MM/dd/yyyy hh:mm:ss.fff"),
                  date1.Millisecond);
// The example produces the following output:
//
// Milliseconds value of 03/05/2008 05:45:35.649 is 649.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Minute 属性

DateTimeOffset
.
.
::
.
Minute 属性
DateTimeOffset 结构

获取由当前 DateTimeOffset 对象所表示的时间的分钟组成部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Minute As Integer
    Get
public int Minute { get; }
public:
property int Minute {
    int get ();
}
member Minute : int

属性值

类型： System Int32
当前 DateTimeOffset 对象的分钟组成部分，以 0 到 59 之间的一个整数来表示。

Minute 属性不受 Offset 属性值的影响。

通过将 ToString 方法与“m”或“mm”自定义格式说明符一起调用，您也可以创建 DateTimeOffset 对象的分钟组成部分的字符串表示形式。

下面的示例用三种不同的方法显示了 DateTimeOffset 对象的分钟组成部分：

  • 通过检索 Minute 属性的值。

  • 通过将 ToString(String) 方法与“m”格式说明符一起调用。

  • 通过将 ToString(String) 方法与“mm”格式说明符一起调用。

Dim theTime As New DateTimeOffset(#5/1/2008 10:03AM#, _
                                       DateTimeOffset.Now.Offset)
Console.WriteLine("The minute component of {0} is {1}.", _
                  theTime, theTime.Minute)

Console.WriteLine("The minute component of {0} is{1}.", _
                  theTime, theTime.ToString(" m"))

Console.WriteLine("The minute component of {0} is {1}.", _
                  theTime, theTime.ToString("mm"))
' The example produces the following output:
'    The minute component of 5/1/2008 10:03:00 AM -08:00 is 3.
'    The minute component of 5/1/2008 10:03:00 AM -08:00 is 3.
'    The minute component of 5/1/2008 10:03:00 AM -08:00 is 03.

DateTimeOffset theTime = new DateTimeOffset(2008, 5, 1, 10, 3, 0,
                                           DateTimeOffset.Now.Offset);
Console.WriteLine("The minute component of {0} is {1}.",
                  theTime, theTime.Minute);

Console.WriteLine("The minute component of {0} is{1}.",
                  theTime, theTime.ToString(" m"));

Console.WriteLine("The minute component of {0} is {1}.",
                  theTime, theTime.ToString("mm"));
// The example produces the following output:
//    The minute component of 5/1/2008 10:03:00 AM -08:00 is 3.
//    The minute component of 5/1/2008 10:03:00 AM -08:00 is 3.
//    The minute component of 5/1/2008 10:03:00 AM -08:00 is 03.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Month 属性

DateTimeOffset
.
.
::
.
Month 属性
DateTimeOffset 结构

获取由当前 DateTimeOffset 对象所表示的日期的月份组成部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Month As Integer
    Get
public int Month { get; }
public:
property int Month {
    int get ();
}
member Month : int

属性值

类型： System Int32
当前 DateTimeOffset 对象的月份组成部分，以 1 到 12 之间的一个整数来表示。

Month 属性不受 Offset 属性值的影响。

通过将 ToString 方法与“M”或“MM”自定义格式说明符一起调用，您也可以创建 DateTimeOffset 对象的月份组成部分的字符串表示形式。

下面的示例用三种不同的方法显示了 DateTimeOffset 值的月份组成部分：

  • 通过检索 Month 属性的值。

  • 通过将 ToString(String) 方法与“M”格式说明符一起调用。

  • 通过将 ToString(String) 方法与“MM”格式说明符一起调用。

Dim theTime As New DateTimeOffset(#9/7/2008 11:25AM#, _
                                       DateTimeOffset.Now.Offset)
Console.WriteLine("The month component of {0} is {1}.", _
                  theTime, theTime.Month)

Console.WriteLine("The month component of {0} is{1}.", _
                  theTime, theTime.ToString(" M"))

Console.WriteLine("The month component of {0} is {1}.", _
                  theTime, theTime.ToString("MM"))
' The example produces the following output:
'    The month component of 9/7/2008 11:25:00 AM -08:00 is 9.
'    The month component of 9/7/2008 11:25:00 AM -08:00 is 9.
'    The month component of 9/7/2008 11:25:00 AM -08:00 is 09.

DateTimeOffset theTime = new DateTimeOffset(2008, 9, 7, 11, 25, 0,
                                       DateTimeOffset.Now.Offset);
Console.WriteLine("The month component of {0} is {1}.",
                  theTime, theTime.Month);

Console.WriteLine("The month component of {0} is{1}.",
                  theTime, theTime.ToString(" M"));

Console.WriteLine("The month component of {0} is {1}.",
                  theTime, theTime.ToString("MM"));
// The example produces the following output:
//    The month component of 9/7/2008 11:25:00 AM -08:00 is 9.
//    The month component of 9/7/2008 11:25:00 AM -08:00 is 9.
//    The month component of 9/7/2008 11:25:00 AM -08:00 is 09.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Now 属性

DateTimeOffset
.
.
::
.
Now 属性
DateTimeOffset 结构

获取一个 DateTimeOffset 对象，该对象设置为当前计算机上的当前日期和时间，偏移量设置为本地时间与协调世界时 (UTC) 之间的偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Now As DateTimeOffset
    Get
public static DateTimeOffset Now { get; }
public:
static property DateTimeOffset Now {
    DateTimeOffset get ();
}
static member Now : DateTimeOffset

属性值

类型： System DateTimeOffset
一个 DateTimeOffset 对象，其日期和时间为当前的本地时间，其偏移量为本地时区与协调世界时 (UTC) 之间的偏移量。

当前本地时间的毫秒组成部分的精度取决于系统时钟的分辨率。在 Windows NT 3.5 和更高版本以及 Windows Vista 操作系统上，时钟的分辨率大约为 10-15 毫秒。 当前本地时间的毫秒组成部分的精度取决于系统时钟的分辨率。在 Windows NT 3.5 和更高版本以及 Windows Vista 操作系统上，时钟的分辨率大约为 10-15 毫秒。

下面的示例使用 Now 和 Millisecond 属性来确定系统时钟的分辨率。只有其毫秒组成部分的值发生了变化，它才会显示时间。 下面的示例使用 Now 和 Millisecond 属性来确定系统时钟的分辨率。只有其毫秒组成部分的值发生了变化，它才会显示时间。

Dim dto As DateTimeOffset
Dim ctr As Integer
Dim ms As Integer
Do
   dto = DateTimeOffset.Now
   If dto.Millisecond <> ms Then
      ms = dto.Millisecond
      Console.WriteLine("{0}:{1:d3} ms. {2}", _
                        dto.ToString("M/d/yyyy h:mm:ss"), _
                        ms, dto.ToString("zzz"))
      ctr += 1
   End If
Loop While ctr < 100

DateTimeOffset dto;
int ctr = 0;
int ms = 0;
do {
   dto = DateTimeOffset.Now;
   if (dto.Millisecond != ms)
   {
      ms = dto.Millisecond;
      Console.WriteLine("{0}:{1:d3} ms. {2}",
                        dto.ToString("M/d/yyyy h:mm:ss"),
                        ms, dto.ToString("zzz"));
      ctr++;
   }
} while (ctr < 100);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
UtcNow


DateTimeOffset ..::.Offset 属性

DateTimeOffset
.
.
::
.
Offset 属性
DateTimeOffset 结构

获取与协调世界时 (UTC) 之间的时间偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Offset As TimeSpan
    Get
public TimeSpan Offset { get; }
public:
property TimeSpan Offset {
    TimeSpan get ();
}
member Offset : TimeSpan

属性值

类型： System TimeSpan
当前的 DateTimeOffset 对象的时间值与协调世界时 (UTC) 之差。

所返回的 TimeSpan 对象的 Hours 属性的值可以在 -14 小时和 14 小时之间变化。

Offset 属性的值精确到分钟。

下面的示例使用 Offset 属性显示本地时间与协调世界时 (UTC) 之间的差值。

Dim localTime As DateTimeOffset = DateTimeOffset.Now
Console.WriteLine("The local time zone is {0} hours and {1} minutes {2} than UTC.", _
                  Math.Abs(localTime.Offset.Hours), _
                  localTime.Offset.Minutes, _
                  IIf(localTime.Offset.Hours < 0, "earlier", "later"))

DateTimeOffset localTime = DateTimeOffset.Now;
Console.WriteLine("The local time zone is {0} hours and {1} minutes {2} than UTC.",
                  Math.Abs(localTime.Offset.Hours),
                  localTime.Offset.Minutes,
                  localTime.Offset.Hours < 0 ? "earlier" : "later");

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Second 属性

DateTimeOffset
.
.
::
.
Second 属性
DateTimeOffset 结构

获取由当前 DateTimeOffset 对象所表示的时钟时间的秒组成部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Second As Integer
    Get
public int Second { get; }
public:
property int Second {
    int get ();
}
member Second : int

属性值

类型： System Int32
DateTimeOffset 对象的秒组成部分，以 0 到 59 之间的一个整数值来表示。

Second 属性不受 Offset 属性值的影响。

通过将 ToString 方法与“s”或“ss”自定义格式说明符一起调用，您也可以创建 DateTimeOffset 对象的秒组成部分的字符串表示形式。

下面的示例用三种不同的方法显示了 DateTimeOffset 对象的秒组成部分：

  • 通过检索 Second 属性的值。

  • 通过将 ToString(String) 方法与“s”格式说明符一起调用。

  • 通过将 ToString(String) 方法与“ss”格式说明符一起调用。

Dim theTime As New DateTimeOffset(#6/12/2008 9:16:32PM#, _
                                       DateTimeOffset.Now.Offset)
Console.WriteLine("The second component of {0} is {1}.", _
                  theTime, theTime.Second)

Console.WriteLine("The second component of {0} is{1}.", _
                  theTime, theTime.ToString(" s"))

Console.WriteLine("The second component of {0} is {1}.", _
                  theTime, theTime.ToString("ss"))
' The example produces the following output:
'    The second component of 6/12/2008 9:16:32 PM -07:00 is 32.
'    The second component of 6/12/2008 9:16:32 PM -07:00 is 32.
'    The second component of 6/12/2008 9:16:32 PM -07:00 is 32.

DateTimeOffset theTime = new DateTimeOffset(2008, 6, 12, 21, 16, 32,
                             DateTimeOffset.Now.Offset);
Console.WriteLine("The second component of {0} is {1}.",
                  theTime, theTime.Second);

Console.WriteLine("The second component of {0} is{1}.",
                  theTime, theTime.ToString(" s"));

Console.WriteLine("The second component of {0} is {1}.",
                  theTime, theTime.ToString("ss"));
// The example produces the following output:
//    The second component of 6/12/2008 9:16:32 PM -07:00 is 32.
//    The second component of 6/12/2008 9:16:32 PM -07:00 is 32.
//    The second component of 6/12/2008 9:16:32 PM -07:00 is 32.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Ticks 属性

DateTimeOffset
.
.
::
.
Ticks 属性
DateTimeOffset 结构

获取计时周期数，此计时周期数表示时钟时间中当前 DateTimeOffset 对象的日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Ticks As Long
    Get
public long Ticks { get; }
public:
property long long Ticks {
    long long get ();
}
member Ticks : int64

属性值

类型： System Int64
DateTimeOffset 对象的时钟时间中的计时周期数。

Ticks 属性不受 Offset 属性值的影响。

Ticks 属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来所经历的以 100 纳秒为间隔的间隔数（MinValue 的值。）。一纳秒等于十亿分之一秒；一秒钟包含一千万个计时周期。Ticks 属性的值介于 DateTimeOffset.MinValue.Ticks 和 DateTimeOffset.MaxValue.Ticks 之间。 Ticks 属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来所经历的以 100 纳秒为间隔的间隔数（MinValue 的值。）。一纳秒等于十亿分之一秒；一秒钟包含一千万个计时周期。Ticks 属性的值介于 DateTimeOffset.MinValue.Ticks 和 DateTimeOffset.MaxValue.Ticks 之间。 Ticks 属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来所经历的以 100 纳秒为间隔的间隔数（MinValue 的值。）。一纳秒等于十亿分之一秒；一秒钟包含一千万个计时周期。Ticks 属性的值介于 DateTimeOffset.MinValue.Ticks 和 DateTimeOffset.MaxValue.Ticks 之间。

通过使用 DateTimeOffset(Int64, TimeSpan) 构造函数重载，可以将计时周期数分配给 DateTimeOffset 对象。

下面的示例通过估计日期（2008 年 7 月 1 日 1:23:07）中的计时周期数来初始化 DateTimeOffset 对象。然后，它将该日期以及该日期所表示的计时周期数显示到控制台上。 下面的示例通过估计日期（2008 年 7 月 1 日 1:23:07）中的计时周期数来初始化 DateTimeOffset 对象。然后，它将该日期以及该日期所表示的计时周期数显示到控制台上。

' Attempt to initialize date to number of ticks
' in July 1, 2008 1:23:07.
'
' There are 10,000,000 100-nanosecond intervals in a second
Const NSPerSecond As Long = 10000000
Dim ticks As Long
ticks = 7 * NSPerSecond                         ' Ticks in a 7 seconds
ticks += 23 * 60 * NSPerSecond                  ' Ticks in 23 minutes
ticks += 1 * 60 * 60 * NSPerSecond              ' Ticks in 1 hour
ticks += 60 * 60 * 24 * NSPerSecond             ' Ticks in 1 day
ticks += 181 * 60 * 60 * 24 * NSPerSecond       ' Ticks in 6 months
ticks += 2007 * 60 * 60 * 24 * 365l * NSPerSecond   ' Ticks in 2007 years
ticks += 486 * 60 * 60 * 24 * NSPerSecond       ' Adjustment for leap years
Dim dto As DateTimeOffset = New DateTimeOffset( _
                            ticks, _
                            DateTimeOffset.Now.Offset)
Console.WriteLine("There are {0:n0} ticks in {1}.", _
                  dto.Ticks, _
                  dto.ToString())

// Attempt to initialize date to number of ticks
// in July 1, 2008 1:23:07.
//
// There are 10,000,000 100-nanosecond intervals in a second
const long NSPerSecond = 10000000;
long ticks;
ticks = 7 * NSPerSecond;                        // Ticks in a 7 seconds
ticks += 23 * 60 * NSPerSecond;                 // Ticks in 23 minutes
ticks += 1 * 60 * 60 * NSPerSecond;             // Ticks in 1 hour
ticks += 60 * 60 * 24 * NSPerSecond;            // Ticks in 1 day
ticks += 181 * 60 * 60 * 24 * NSPerSecond;      // Ticks in 6 months
ticks += 2007 * 60 * 60 * 24 * 365L * NSPerSecond;   // Ticks in 2007 years
ticks += 486 * 60 * 60 * 24 * NSPerSecond;      // Adjustment for leap years
DateTimeOffset dto = new DateTimeOffset(
                         ticks,
                         DateTimeOffset.Now.Offset);
Console.WriteLine("There are {0:n0} ticks in {1}.",
                  dto.Ticks,
                  dto.ToString());

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
UtcDateTime


DateTimeOffset ..::.TimeOfDay 属性

DateTimeOffset
.
.
::
.
TimeOfDay 属性
DateTimeOffset 结构

获取当前 DateTimeOffset 对象的日时。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TimeOfDay As TimeSpan
    Get
public TimeSpan TimeOfDay { get; }
public:
property TimeSpan TimeOfDay {
    TimeSpan get ();
}
member TimeOfDay : TimeSpan

属性值

类型： System TimeSpan
表示当前日期自午夜以来的时间间隔。

TimeOfDay 属性不受 Offset 属性值的影响。

TimeOfDay 属性以 TimeSpan 对象的形式返回 DateTimeOffset 对象的时间组成部分。它等效于 DateTime..::.TimeOfDay 属性。 TimeOfDay 属性以 TimeSpan 对象的形式返回 DateTimeOffset 对象的时间组成部分。它等效于 DateTime..::.TimeOfDay 属性。

下面的示例使用 TimeOfDay 属性提取时间并将此时间显示到控制台上。

Dim currentDate As New DateTimeOffset(#5/10/2008 5:32:16AM#, _
                                      DateTimeOffset.Now.Offset)
Dim currentTime As TimeSpan = currentDate.TimeOfDay
Console.WriteLine("The current time is {0}.", currentTime.ToString())
' The example produces the following output:
'       The current time is 05:32:16.

DateTimeOffset currentDate = new DateTimeOffset(2008, 5, 10, 5, 32, 16,
                                      DateTimeOffset.Now.Offset);
TimeSpan currentTime = currentDate.TimeOfDay;
Console.WriteLine("The current time is {0}.", currentTime.ToString());
// The example produces the following output:
//       The current time is 05:32:16.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.UtcDateTime 属性

DateTimeOffset
.
.
::
.
UtcDateTime 属性
DateTimeOffset 结构

获取一个 DateTime 值，该值表示当前 DateTimeOffset 对象的协调世界时 (UTC) 日期和时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property UtcDateTime As DateTime
    Get
public DateTime UtcDateTime { get; }
public:
property DateTime UtcDateTime {
    DateTime get ();
}
member UtcDateTime : DateTime

属性值

类型： System DateTime
当前 DateTimeOffset 对象的协调世界时 (UTC) 日期和时间。

UtcDateTime 属性执行双重转换：

  • 它将当前 DateTimeOffset 对象的日期和时间转换为协调世界时 (UTC)。此转换是通过从当前 DateTimeOffset 对象的日期和时间中减去 Offset 属性的值来执行的。 它将当前 DateTimeOffset 对象的日期和时间转换为协调世界时 (UTC)。此转换是通过从当前 DateTimeOffset 对象的日期和时间中减去 Offset 属性的值来执行的。

  • 它将 DateTimeOffset 值转换为 DateTime 值。

所返回的 DateTime 值的 Kind 属性被设置为 DateTimeKind..::.Utc。

检索 UtcDateTime 属性的值等效于调用当前 DateTimeOffset 对象的 ToUniversalTime.DateTime 属性，只不过是后一种情况的 DateTime 值的 Kind 属性为 DateTimeKind..::.Unspecified。

下面的示例演示如何使用 UtcDateTime 属性显示 DateTimeOffset 值及其对应的 UTC 时间。

Dim offsetTime As New DateTimeOffset(#11/25/2007 11:14AM#, _
                  New TimeSpan(3, 0, 0))
Console.WriteLine("{0} is equivalent to {1} {2}", _
                  offsetTime.ToString(), _
                  offsetTime.UtcDateTime.ToString(), _
                  offsetTime.UtcDateTime.Kind.ToString())

DateTimeOffset offsetTime = new DateTimeOffset(2007, 11, 25, 11, 14, 00,
                            new TimeSpan(3, 0, 0));
Console.WriteLine("{0} is equivalent to {1} {2}",
                  offsetTime.ToString(),
                  offsetTime.UtcDateTime.ToString(),
                  offsetTime.UtcDateTime.Kind.ToString());

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.UtcNow 属性

DateTimeOffset
.
.
::
.
UtcNow 属性
DateTimeOffset 结构

获取一个 DateTimeOffset 对象，其日期和时间设置为当前的协调世界时 (UTC) 日期和时间，其偏移量为 TimeSpan..::.Zero。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property UtcNow As DateTimeOffset
    Get
public static DateTimeOffset UtcNow { get; }
public:
static property DateTimeOffset UtcNow {
    DateTimeOffset get ();
}
static member UtcNow : DateTimeOffset

属性值

类型： System DateTimeOffset
一个对象，其日期和时间为当前的协调世界时 (UTC)，其偏移量为 TimeSpan..::.Zero。

UtcNow 属性根据本地系统的时钟时间和按本地系统时区定义的偏移量来计算当前的协调世界时 (UTC)。

当前 UTC 时间的毫秒组成部分的精度取决于系统时钟的分辨率。在 Windows NT 3.5 和更高版本以及 Windows Vista 操作系统上，时钟的分辨率大约为 10-15 毫秒。 当前 UTC 时间的毫秒组成部分的精度取决于系统时钟的分辨率。在 Windows NT 3.5 和更高版本以及 Windows Vista 操作系统上，时钟的分辨率大约为 10-15 毫秒。

下面的示例说明了协调世界时 (UTC) 与本地时间之间的关系。

Dim localTime As DateTimeOffset = DateTimeOffset.Now
Dim utcTime As DateTimeOffset = DateTimeOffset.UtcNow

Console.WriteLine("Local Time:          {0}", localTime.ToString("T"))
Console.WriteLine("Difference from UTC: {0}", localTime.Offset.ToString())
Console.WriteLine("UTC:                 {0}", utcTime.ToString("T"))
' If run on a particular date at 1:19 PM, the example produces
' the following output:
'    Local Time:          1:19:43 PM
'    Difference from UTC: -07:00:00
'    UTC:                 8:19:43 PM

DateTimeOffset localTime = DateTimeOffset.Now;
DateTimeOffset utcTime = DateTimeOffset.UtcNow;

Console.WriteLine("Local Time:          {0}", localTime.ToString("T"));
Console.WriteLine("Difference from UTC: {0}", localTime.Offset.ToString());
Console.WriteLine("UTC:                 {0}", utcTime.ToString("T"));
// If run on a particular date at 1:19 PM, the example produces
// the following output:
//    Local Time:          1:19:43 PM
//    Difference from UTC: -07:00:00
//    UTC:                 8:19:43 PM

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间
Now


DateTimeOffset ..::.UtcTicks 属性

DateTimeOffset
.
.
::
.
UtcTicks 属性
DateTimeOffset 结构

获取表示当前 DateTimeOffset 对象的协调世界时 (UTC) 日期和时间的计时周期数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property UtcTicks As Long
    Get
public long UtcTicks { get; }
public:
property long long UtcTicks {
    long long get ();
}
member UtcTicks : int64

属性值

类型： System Int64
DateTimeOffset 对象的协调世界时 (UTC) 中的计时周期数。

UtcTicks 属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来所经历的以 100 纳秒为间隔的间隔数（MinValue 的值。）。一纳秒等于十亿分之一秒；一秒钟包含一千万个计时周期。UtcTicks 属性的值介于 DateTimeOffset.MinValue.Ticks 和 DateTimeOffset.MaxValue.Ticks 之间。 UtcTicks 属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来所经历的以 100 纳秒为间隔的间隔数（MinValue 的值。）。一纳秒等于十亿分之一秒；一秒钟包含一千万个计时周期。UtcTicks 属性的值介于 DateTimeOffset.MinValue.Ticks 和 DateTimeOffset.MaxValue.Ticks 之间。 UtcTicks 属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来所经历的以 100 纳秒为间隔的间隔数（MinValue 的值。）。一纳秒等于十亿分之一秒；一秒钟包含一千万个计时周期。UtcTicks 属性的值介于 DateTimeOffset.MinValue.Ticks 和 DateTimeOffset.MaxValue.Ticks 之间。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DateTimeOffset ..::.Year 属性

DateTimeOffset
.
.
::
.
Year 属性
DateTimeOffset 结构

获取由当前 DateTimeOffset 对象所表示的日期的年份组成部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Year As Integer
    Get
public int Year { get; }
public:
property int Year {
    int get ();
}
member Year : int

属性值

类型： System Int32
当前 DateTimeOffset 对象的年份组成部分，以 0 到 9999 之间的一个整数值来表示。

Year 属性不受 Offset 属性值的影响。

通过将 ToString 方法与“y”、“yy”或“yyyy”自定义格式说明符一起调用，您也可以创建 DateTimeOffset 对象的年份组成部分的字符串表示形式。

下面的示例用四种不同的方法显示了 DateTimeOffset 值的年份组成部分：

  • 通过检索 Year 属性的值。

  • 通过将 ToString(String) 方法与“y”格式说明符一起调用。

  • 通过将 ToString(String) 方法与“yy”格式说明符一起调用。

  • 通过将 ToString(String) 方法与“yyyy”格式说明符一起调用。

Dim theTime As New DateTimeOffset(#2/17/2008 9:00AM#, _
                                  DateTimeOffset.Now.Offset)
Console.WriteLine("The year component of {0} is {1}.", _
                  theTime, theTime.Year)

Console.WriteLine("The year component of {0} is{1}.", _
                  theTime, theTime.ToString(" y"))

Console.WriteLine("The year component of {0} is {1}.", _
                  theTime, theTime.ToString("yy"))

Console.WriteLine("The year component of {0} is {1}.", _
                  theTime, theTime.ToString("yyyy"))
' The example produces the following output:
'    The year component of 2/17/2008 9:00:00 AM -07:00 is 2008.
'    The year component of 2/17/2008 9:00:00 AM -07:00 is 8.
'    The year component of 2/17/2008 9:00:00 AM -07:00 is 08.
'    The year component of 2/17/2008 9:00:00 AM -07:00 is 2008.

DateTimeOffset theTime = new DateTimeOffset(2008, 2, 17, 9, 0, 0,
                             DateTimeOffset.Now.Offset);
Console.WriteLine("The year component of {0} is {1}.",
                  theTime, theTime.Year);

Console.WriteLine("The year component of {0} is{1}.",
                  theTime, theTime.ToString(" y"));

Console.WriteLine("The year component of {0} is {1}.",
                  theTime, theTime.ToString("yy"));

Console.WriteLine("The year component of {0} is {1}.",
                  theTime, theTime.ToString("yyyy"));
// The example produces the following output:
//    The year component of 2/17/2008 9:00:00 AM -07:00 is 2008.
//    The year component of 2/17/2008 9:00:00 AM -07:00 is 8.
//    The year component of 2/17/2008 9:00:00 AM -07:00 is 08.
//    The year component of 2/17/2008 9:00:00 AM -07:00 is 2008.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DateTimeOffset 结构
DateTimeOffset 成员
System 命名空间


DayOfWeek 枚举

DayOfWeek 枚举

指定一周的某天。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration DayOfWeek
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum DayOfWeek
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class DayOfWeek
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type DayOfWeek
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Sunday | 表示星期日。
由 XNA Framework 提供支持 | Monday | 表示星期一。
由 XNA Framework 提供支持 | Tuesday | 表示星期二。
由 XNA Framework 提供支持 | Wednesday | 表示星期三。
由 XNA Framework 提供支持 | Thursday | 表示星期四。
由 XNA Framework 提供支持 | Friday | 表示星期五。
由 XNA Framework 提供支持 | Saturday | 表示星期六。

在每周有七天的日历中，DayOfWeek 枚举表示一周中的某天。此枚举中的常量值的范围为 DayOfWeek..::.Sunday 到 DayOfWeek..::.Saturday。如果强制转换为整数，则此枚举值的范围为零（表示 DayOfWeek..::.Sunday）到六（表示 DayOfWeek..::.Saturday）。 在每周有七天的日历中，DayOfWeek 枚举表示一周中的某天。此枚举中的常量值的范围为 DayOfWeek..::.Sunday 到 DayOfWeek..::.Saturday。如果强制转换为整数，则此枚举值的范围为零（表示 DayOfWeek..::.Sunday）到六（表示 DayOfWeek..::.Saturday）。 在每周有七天的日历中，DayOfWeek 枚举表示一周中的某天。此枚举中的常量值的范围为 DayOfWeek..::.Sunday 到 DayOfWeek..::.Saturday。如果强制转换为整数，则此枚举值的范围为零（表示 DayOfWeek..::.Sunday）到六（表示 DayOfWeek..::.Saturday）。

当最好是对一周的某天进行强类型指定时，该枚举很有用。例如，该枚举是 DateTime..::.DayOfWeek 属性的属性值类型。 当最好是对一周的某天进行强类型指定时，该枚举很有用。例如，该枚举是 DateTime..::.DayOfWeek 属性的属性值类型。

DayOfWeek 枚举的成员未进行本地化。若要返回一周中某天的本地化名称，请用“ddd”或“dddd”格式字符串调用 DateTime..::.ToString(String) 或 DateTime..::.ToString(String, IFormatProvider) 方法。前一格式字符串用于生成简写的星期几名称；后一格式字符串用于生成完整的星期几名称。 DayOfWeek 枚举的成员未进行本地化。若要返回一周中某天的本地化名称，请用“ddd”或“dddd”格式字符串调用 DateTime..::.ToString(String) 或 DateTime..::.ToString(String, IFormatProvider) 方法。前一格式字符串用于生成简写的星期几名称；后一格式字符串用于生成完整的星期几名称。 DayOfWeek 枚举的成员未进行本地化。若要返回一周中某天的本地化名称，请用“ddd”或“dddd”格式字符串调用 DateTime..::.ToString(String) 或 DateTime..::.ToString(String, IFormatProvider) 方法。前一格式字符串用于生成简写的星期几名称；后一格式字符串用于生成完整的星期几名称。

下面的示例演示 DateTime..::.DayOfWeek 属性和 DayOfWeek 枚举。

' This example demonstrates the DateTime.DayOfWeek property
Imports System

Class Sample
   Public Shared Sub Main()
      ' Assume the current culture is en-US.
      ' Create a DateTime for the first of May, 2003.
      Dim dt As New DateTime(2003, 5, 1)
      Console.WriteLine("Is Thursday the day of the week for {0:d}?: {1}", _
                         dt, dt.DayOfWeek = DayOfWeek.Thursday)
      Console.WriteLine("The day of the week for {0:d} is {1}.", dt, dt.DayOfWeek)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Is Thursday the day of the week for 5/1/2003?: True
'The day of the week for 5/1/2003 is Thursday.
'

// This example demonstrates the DateTime.DayOfWeek property
using System;

class Sample
{
    public static void Main()
    {
// Assume the current culture is en-US.
// Create a DateTime for the first of May, 2003.
    DateTime dt = new DateTime(2003, 5, 1);
    Console.WriteLine("Is Thursday the day of the week for {0:d}?: {1}",
                       dt, dt.DayOfWeek == DayOfWeek.Thursday);
    Console.WriteLine("The day of the week for {0:d} is {1}.", dt, dt.DayOfWeek);
    }
}
/*
This example produces the following results:

Is Thursday the day of the week for 5/1/2003?: True
The day of the week for 5/1/2003 is Thursday.
*/

// This example demonstrates the DateTime.DayOfWeek property
using namespace System;
int main()
{

   // Assume the current culture is en-US.
   // Create a DateTime for the first of May, 2003.
   DateTime dt = DateTime(2003,5,1);
   Console::WriteLine(  "Is Thursday the day of the week for {0:d}?: {1}", dt, dt.DayOfWeek == DayOfWeek::Thursday );
   Console::WriteLine(  "The day of the week for {0:d} is {1}.", dt, dt.DayOfWeek );
}

/*
This example produces the following results:

Is Thursday the day of the week for 5/1/2003?: True
The day of the week for 5/1/2003 is Thursday.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


DBNull 类

DBNull 类
成员

表示不存在的值。无法继承此类。 表示不存在的值。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class DBNull _
    Implements ISerializable, IConvertible
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class DBNull : ISerializable,
    IConvertible
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class DBNull sealed : ISerializable,
    IConvertible
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type DBNull =
    class
        interface ISerializable
        interface IConvertible
    end

DBNull 类表示一个不存在的值。例如，在数据库的表中，某一行的某列中可能不包含任何数据。即，该列被视为根本不存在，而不只是没有值。一个表示不存在的列的 DBNull 对象。此外，COM 互操作使用 DBNull 类来区分 VT_NULL 变量（指示不存在的值）和 VT_EMPTY 变量（指示未指定的值）。 DBNull 类表示一个不存在的值。例如，在数据库的表中，某一行的某列中可能不包含任何数据。即，该列被视为根本不存在，而不只是没有值。一个表示不存在的列的 DBNull 对象。此外，COM 互操作使用 DBNull 类来区分 VT_NULL 变量（指示不存在的值）和 VT_EMPTY 变量（指示未指定的值）。 DBNull 类表示一个不存在的值。例如，在数据库的表中，某一行的某列中可能不包含任何数据。即，该列被视为根本不存在，而不只是没有值。一个表示不存在的列的 DBNull 对象。此外，COM 互操作使用 DBNull 类来区分 VT_NULL 变量（指示不存在的值）和 VT_EMPTY 变量（指示未指定的值）。 DBNull 类表示一个不存在的值。例如，在数据库的表中，某一行的某列中可能不包含任何数据。即，该列被视为根本不存在，而不只是没有值。一个表示不存在的列的 DBNull 对象。此外，COM 互操作使用 DBNull 类来区分 VT_NULL 变量（指示不存在的值）和 VT_EMPTY 变量（指示未指定的值）。 DBNull 类表示一个不存在的值。例如，在数据库的表中，某一行的某列中可能不包含任何数据。即，该列被视为根本不存在，而不只是没有值。一个表示不存在的列的 DBNull 对象。此外，COM 互操作使用 DBNull 类来区分 VT_NULL 变量（指示不存在的值）和 VT_EMPTY 变量（指示未指定的值）。

DBNull 类型是一个单独的类，这意味着只有一个 DBNull 对象存在。DBNull..::.Value 成员表示单独的 DBNull 对象。DBNull..::.Value 可用于将不存在的值显式分配给数据库字段，但大多数 ADO.NET 数据提供程序在字段没有有效值时会自动分配 DBNull 值。您可以通过将从数据库字段检索到的值传递给 DBNull.Value.Equals 方法，确定该字段值是否为 DBNull 值。然而，有些语言和数据库对象提供一些方法，可以更容易地确定数据库字段值是否为 DBNull..::.Value。这些方法包括 Visual Basic 的 IsDBNull 函数、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法和 IDataRecord..::.IsDBNull 方法。 DBNull 类型是一个单独的类，这意味着只有一个 DBNull 对象存在。DBNull..::.Value 成员表示单独的 DBNull 对象。DBNull..::.Value 可用于将不存在的值显式分配给数据库字段，但大多数 ADO.NET 数据提供程序在字段没有有效值时会自动分配 DBNull 值。您可以通过将从数据库字段检索到的值传递给 DBNull.Value.Equals 方法，确定该字段值是否为 DBNull 值。然而，有些语言和数据库对象提供一些方法，可以更容易地确定数据库字段值是否为 DBNull..::.Value。这些方法包括 Visual Basic 的 IsDBNull 函数、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法和 IDataRecord..::.IsDBNull 方法。 DBNull 类型是一个单独的类，这意味着只有一个 DBNull 对象存在。DBNull..::.Value 成员表示单独的 DBNull 对象。DBNull..::.Value 可用于将不存在的值显式分配给数据库字段，但大多数 ADO.NET 数据提供程序在字段没有有效值时会自动分配 DBNull 值。您可以通过将从数据库字段检索到的值传递给 DBNull.Value.Equals 方法，确定该字段值是否为 DBNull 值。然而，有些语言和数据库对象提供一些方法，可以更容易地确定数据库字段值是否为 DBNull..::.Value。这些方法包括 Visual Basic 的 IsDBNull 函数、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法和 IDataRecord..::.IsDBNull 方法。 DBNull 类型是一个单独的类，这意味着只有一个 DBNull 对象存在。DBNull..::.Value 成员表示单独的 DBNull 对象。DBNull..::.Value 可用于将不存在的值显式分配给数据库字段，但大多数 ADO.NET 数据提供程序在字段没有有效值时会自动分配 DBNull 值。您可以通过将从数据库字段检索到的值传递给 DBNull.Value.Equals 方法，确定该字段值是否为 DBNull 值。然而，有些语言和数据库对象提供一些方法，可以更容易地确定数据库字段值是否为 DBNull..::.Value。这些方法包括 Visual Basic 的 IsDBNull 函数、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法和 IDataRecord..::.IsDBNull 方法。 DBNull 类型是一个单独的类，这意味着只有一个 DBNull 对象存在。DBNull..::.Value 成员表示单独的 DBNull 对象。DBNull..::.Value 可用于将不存在的值显式分配给数据库字段，但大多数 ADO.NET 数据提供程序在字段没有有效值时会自动分配 DBNull 值。您可以通过将从数据库字段检索到的值传递给 DBNull.Value.Equals 方法，确定该字段值是否为 DBNull 值。然而，有些语言和数据库对象提供一些方法，可以更容易地确定数据库字段值是否为 DBNull..::.Value。这些方法包括 Visual Basic 的 IsDBNull 函数、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法和 IDataRecord..::.IsDBNull 方法。 DBNull 类型是一个单独的类，这意味着只有一个 DBNull 对象存在。DBNull..::.Value 成员表示单独的 DBNull 对象。DBNull..::.Value 可用于将不存在的值显式分配给数据库字段，但大多数 ADO.NET 数据提供程序在字段没有有效值时会自动分配 DBNull 值。您可以通过将从数据库字段检索到的值传递给 DBNull.Value.Equals 方法，确定该字段值是否为 DBNull 值。然而，有些语言和数据库对象提供一些方法，可以更容易地确定数据库字段值是否为 DBNull..::.Value。这些方法包括 Visual Basic 的 IsDBNull 函数、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法和 IDataRecord..::.IsDBNull 方法。

请勿将面向对象的编程语言中的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 概念与 DBNull 对象混淆。在面向对象的编程语言中，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 表示缺少对象的引用。DBNull 表示未初始化的变量或不存在的数据库列。 请勿将面向对象的编程语言中的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 概念与 DBNull 对象混淆。在面向对象的编程语言中，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 表示缺少对象的引用。DBNull 表示未初始化的变量或不存在的数据库列。 请勿将面向对象的编程语言中的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 概念与 DBNull 对象混淆。在面向对象的编程语言中，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 表示缺少对象的引用。DBNull 表示未初始化的变量或不存在的数据库列。

下面的示例调用 DBNull.Value.Equals 方法，来确定联系人数据库中的数据库字段是否具有有效值。如果具有有效值，字段值将被追加到在标签中输出的字符串中。 下面的示例调用 DBNull.Value.Equals 方法，来确定联系人数据库中的数据库字段是否具有有效值。如果具有有效值，字段值将被追加到在标签中输出的字符串中。

Private Sub OUtputLabels(dt As DataTable)
   Dim label As String

   ' Iterate rows of table
   For Each row As DataRow In dt.Rows
      Dim labelLen As Integer
      label = String.Empty
      label += AddFieldValue(label, row, "Title")
      label += AddFieldValue(label, row, "FirstName")
      label += AddFieldValue(label, row, "MiddleInitial")
      label += AddFieldValue(label, row, "LastName")
      label += AddFieldValue(label, row, "Suffix")
      label += vbCrLf
      label += AddFieldValue(label, row, "Address1")
      label += AddFieldValue(label, row, "AptNo")
      label += vbCrLf
      labelLen = Len(label)
      label += AddFieldValue(label, row, "Address2")
      If Len(label) <> labelLen Then label += vbCrLf
      label += AddFieldValue(label, row, "City")
      label += AddFieldValue(label, row, "State")
      label += AddFieldValue(label, row, "Zip")
      Console.WriteLine(label)
      Console.WriteLine()
   Next
End Sub

Private Function AddFieldValue(label As String, row As DataRow, _
                          fieldName As String) As String
   If Not DbNull.Value.Equals(row.Item(fieldName)) Then
      Return CStr(row.Item(fieldName)) & " "
   Else
      Return Nothing
   End If
End Function

private void OutputLabels(DataTable dt)
{
   string label;

   // Iterate rows of table
   foreach (DataRow row in dt.Rows)
   {
      int labelLen;
      label = String.Empty;
      label += AddFieldValue(label, row, "Title");
      label += AddFieldValue(label, row, "FirstName");
      label += AddFieldValue(label, row, "MiddleInitial");
      label += AddFieldValue(label, row, "LastName");
      label += AddFieldValue(label, row, "Suffix");
      label += "\n";
      label += AddFieldValue(label, row, "Address1");
      label += AddFieldValue(label, row, "AptNo");
      label += "\n";
      labelLen = label.Length;
      label += AddFieldValue(label, row, "Address2");
      if (label.Length != labelLen)
         label += "\n";
      label += AddFieldValue(label, row, "City");
      label += AddFieldValue(label, row, "State");
      label += AddFieldValue(label, row, "Zip");
      Console.WriteLine(label);
      Console.WriteLine();
   }
}

private string AddFieldValue(string label, DataRow row,
                             string fieldName)
{
   if (! DBNull.Value.Equals(row[fieldName]))
      return (string) row[fieldName] + " ";
   else
      return String.Empty;
}

System System..::.DBNullDBNull
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 成员
System 命名空间
Convert DBNull
Convert IsDBNull
System.Runtime.InteropServices VarEnum


DBNull 成员

DBNull 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBNull 类

表示不存在的值。无法继承此类。 表示不存在的值。无法继承此类。

DBNull 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DBNull 类
System 命名空间


DBNull 字段

DBNull 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBNull 类

DBNull 类型公开以下成员。

名称 说明
页首

参考

DBNull 类
System 命名空间


DBNull ..::.Value 字段

DBNull
.
.
::
.
Value 字段
DBNull 类

表示 DBNull 类的唯一实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Value As DBNull
public static readonly DBNull Value
public:
static initonly DBNull^ Value
static val Value: DBNull

DBNull 是一个单独的类，这意味着该类只能存在此实例。

如果数据库字段的数据缺失，则您可以使用 DBNull..::.Value 属性将 DBNull 对象值显式分配给该字段。然而，大部分数据提供程序会自动进行分配。 如果数据库字段的数据缺失，则您可以使用 DBNull..::.Value 属性将 DBNull 对象值显式分配给该字段。然而，大部分数据提供程序会自动进行分配。

若要计算数据库字段以确定其值是否为 DBNull，则可以将字段值传递给 DBNull.Value.Equals 方法。但此方法不常用，因为有许多其他方式可计算数据库字段是否缺少数据。这些方法包括 Visual Basic 的 IsDBNull 函数、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法、IDataRecord..::.IsDBNull 方法和其他几种方法。 若要计算数据库字段以确定其值是否为 DBNull，则可以将字段值传递给 DBNull.Value.Equals 方法。但此方法不常用，因为有许多其他方式可计算数据库字段是否缺少数据。这些方法包括 Visual Basic 的 IsDBNull 函数、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法、IDataRecord..::.IsDBNull 方法和其他几种方法。 若要计算数据库字段以确定其值是否为 DBNull，则可以将字段值传递给 DBNull.Value.Equals 方法。但此方法不常用，因为有许多其他方式可计算数据库字段是否缺少数据。这些方法包括 Visual Basic 的 IsDBNull 函数、Convert..::.IsDBNull 方法、DataTableReader..::.IsDBNull 方法、IDataRecord..::.IsDBNull 方法和其他几种方法。

下面的示例调用 DBNull.Value.Equals 方法，来确定联系人数据库中的数据库字段是否具有有效值。如果具有有效值，字段值将被追加到在标签中输出的字符串中。 下面的示例调用 DBNull.Value.Equals 方法，来确定联系人数据库中的数据库字段是否具有有效值。如果具有有效值，字段值将被追加到在标签中输出的字符串中。

Private Sub OUtputLabels(dt As DataTable)
   Dim label As String

   ' Iterate rows of table
   For Each row As DataRow In dt.Rows
      Dim labelLen As Integer
      label = String.Empty
      label += AddFieldValue(label, row, "Title")
      label += AddFieldValue(label, row, "FirstName")
      label += AddFieldValue(label, row, "MiddleInitial")
      label += AddFieldValue(label, row, "LastName")
      label += AddFieldValue(label, row, "Suffix")
      label += vbCrLf
      label += AddFieldValue(label, row, "Address1")
      label += AddFieldValue(label, row, "AptNo")
      label += vbCrLf
      labelLen = Len(label)
      label += AddFieldValue(label, row, "Address2")
      If Len(label) <> labelLen Then label += vbCrLf
      label += AddFieldValue(label, row, "City")
      label += AddFieldValue(label, row, "State")
      label += AddFieldValue(label, row, "Zip")
      Console.WriteLine(label)
      Console.WriteLine()
   Next
End Sub

Private Function AddFieldValue(label As String, row As DataRow, _
                          fieldName As String) As String
   If Not DbNull.Value.Equals(row.Item(fieldName)) Then
      Return CStr(row.Item(fieldName)) & " "
   Else
      Return Nothing
   End If
End Function

private void OutputLabels(DataTable dt)
{
   string label;

   // Iterate rows of table
   foreach (DataRow row in dt.Rows)
   {
      int labelLen;
      label = String.Empty;
      label += AddFieldValue(label, row, "Title");
      label += AddFieldValue(label, row, "FirstName");
      label += AddFieldValue(label, row, "MiddleInitial");
      label += AddFieldValue(label, row, "LastName");
      label += AddFieldValue(label, row, "Suffix");
      label += "\n";
      label += AddFieldValue(label, row, "Address1");
      label += AddFieldValue(label, row, "AptNo");
      label += "\n";
      labelLen = label.Length;
      label += AddFieldValue(label, row, "Address2");
      if (label.Length != labelLen)
         label += "\n";
      label += AddFieldValue(label, row, "City");
      label += AddFieldValue(label, row, "State");
      label += AddFieldValue(label, row, "Zip");
      Console.WriteLine(label);
      Console.WriteLine();
   }
}

private string AddFieldValue(string label, DataRow row,
                             string fieldName)
{
   if (! DBNull.Value.Equals(row[fieldName]))
      return (string) row[fieldName] + " ";
   else
      return String.Empty;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间


DBNull 方法

DBNull 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBNull 类

DBNull 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DBNull 类
System 命名空间


DBNull ..::.GetObjectData 方法

DBNull
.
.
::
.
GetObjectData 方法
DBNull 类

实现 ISerializable 接口并返回序列化 DBNull 对象所需的数据。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo 对象，包含序列化 DBNull 对象所需的信息。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext 对象，包含与 DBNull 对象关联的序列化流的源和目标。

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBNull 类
DBNull 成员
System 命名空间
ISerializable
SerializationInfo
StreamingContext


DBNull ..::.GetTypeCode 方法

DBNull
.
.
::
.
GetTypeCode 方法
DBNull 类

获取 DBNull 的 TypeCode 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
DBNull（为 TypeCode..::.DBNull）的 TypeCode 值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
TypeCode


DBNull ..::.IConvertible ..::.ToBoolean 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Boolean
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToByte 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Byte
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToChar 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Char
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToDateTime 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System DateTime
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToDecimal 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Decimal
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToDouble 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Double
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToInt16 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Int16
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToInt32 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Int32
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToInt64 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Int64
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToSByte 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System SByte
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToSingle 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System Single
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToType 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

将当前的 DBNull 对象转换为指定类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
当前的 DBNull 对象要转换为的类型。
provider
类型： System IFormatProvider
用于实现 IFormatProvider 接口和增强转换的对象。如果指定了 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则从当前区域获得格式信息。 用于实现 IFormatProvider 接口和增强转换的对象。如果指定了 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则从当前区域获得格式信息。

返回值

类型： System Object
如果支持这种转换，则返回当前 DBNull 对象的等效装箱项；否则将引发异常，并且不返回任何值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

支持三种转换：如果 type 参数指定 Object 或 DBNull，返回值则为当前的 DBNull 对象本身。如果 type 参数指定 String，返回值则为 ToString 方法返回的字符串。 支持三种转换：如果 type 参数指定 Object 或 DBNull，返回值则为当前的 DBNull 对象本身。如果 type 参数指定 String，返回值则为 ToString 方法返回的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
Type
IConvertible


DBNull ..::.IConvertible ..::.ToUInt16 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System UInt16
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToUInt32 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System UInt32
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.IConvertible ..::.ToUInt64 方法

DBNull
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
DBNull 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。 不支持此转换。如果尝试执行此转换，便会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 实现 IFormatProvider 接口的对象。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

返回值

类型： System UInt64
无。未使用此成员的返回值。 无。未使用此成员的返回值。

实现

异常 | 条件
InvalidCastException | DBNull 类型不支持此转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
System 命名空间
IConvertible


DBNull ..::.ToString 方法

DBNull
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBNull 类

返回空字符串。

名称 说明
页首

参考

DBNull 类
DBNull 成员
System 命名空间


DBNull ..::.ToString 方法

DBNull
.
.
::
.
ToString 方法
DBNull 类

返回空字符串（String..::.Empty）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
空字符串（String..::.Empty）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
ToString 重载
System 命名空间
String Empty


DBNull ..::.ToString 方法 (IFormatProvider)

DBNull
.
.
::
.
ToString 方法 (IFormatProvider)
DBNull 类

使用指定的 System..::.IFormatProvider 返回空字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
用于格式化返回值的 IFormatProvider。
- 或 -
从操作系统的当前区域设置中获取格式信息的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System String
空字符串（String..::.Empty）。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBNull 类
DBNull 成员
ToString 重载
System 命名空间
String Empty


Decimal 结构

Decimal 结构
成员

表示十进制数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Decimal _
    Implements IFormattable, IComparable, IConvertible, IDeserializationCallback,  _
    IComparable(Of Decimal), IEquatable(Of Decimal)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Decimal : IFormattable, IComparable,
    IConvertible, IDeserializationCallback, IComparable<decimal>, IEquatable<decimal>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Decimal : IFormattable,
    IComparable, IConvertible, IDeserializationCallback, IComparable<Decimal>,
    IEquatable<Decimal>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Decimal =
    struct
        interface IFormattable
        interface IComparable
        interface IConvertible
        interface IDeserializationCallback
        interface IComparable<decimal>
        interface IEquatable<decimal>
    end

Decimal 值类型表示介于 +79,228,162,514,264,337,593,543,950,335 到 -79,228,162,514,264,337,593,543,950,335之间的十进制数字。Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算。Decimal 类型不会消除对舍入的需要，而是将因舍入而导致的错误降到最少。例如，下面的代码产生结果 0.9999999999999999999999999999 而不是 1。 Decimal 值类型表示介于 +79,228,162,514,264,337,593,543,950,335 到 -79,228,162,514,264,337,593,543,950,335之间的十进制数字。Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算。Decimal 类型不会消除对舍入的需要，而是将因舍入而导致的错误降到最少。例如，下面的代码产生结果 0.9999999999999999999999999999 而不是 1。 Decimal 值类型表示介于 +79,228,162,514,264,337,593,543,950,335 到 -79,228,162,514,264,337,593,543,950,335之间的十进制数字。Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算。Decimal 类型不会消除对舍入的需要，而是将因舍入而导致的错误降到最少。例如，下面的代码产生结果 0.9999999999999999999999999999 而不是 1。 Decimal 值类型表示介于 +79,228,162,514,264,337,593,543,950,335 到 -79,228,162,514,264,337,593,543,950,335之间的十进制数字。Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算。Decimal 类型不会消除对舍入的需要，而是将因舍入而导致的错误降到最少。例如，下面的代码产生结果 0.9999999999999999999999999999 而不是 1。 Decimal 值类型表示介于 +79,228,162,514,264,337,593,543,950,335 到 -79,228,162,514,264,337,593,543,950,335之间的十进制数字。Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算。Decimal 类型不会消除对舍入的需要，而是将因舍入而导致的错误降到最少。例如，下面的代码产生结果 0.9999999999999999999999999999 而不是 1。

Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor)

decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor);

当将除法和乘法的结果传递至 Round 方法时，该结果的精度不会有损失，如下面的代码所示。

Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2))

decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2));

十进制数是由符号、数值和比例因子组成的浮点值，数值的每一位的范围都是 0 到 9，比例因子指示分隔数值的整数和小数部分的浮点小数点的位置。

Decimal 值的二进制表示形式由 1 位符号、96 位整数以及比例因子组成，比例因子用作 96 位整数的除数并指定整数的哪一部分为小数。比例因子隐式地定为数字 10 的幂，指数范围从 0 到 28。因此，Decimal 值的二进制表示的形式为（（-296 至 296）/ 10（0 到 28）），其中 -296-1 等于 MinValue，296-1 等于 MaxValue。 Decimal 值的二进制表示形式由 1 位符号、96 位整数以及比例因子组成，比例因子用作 96 位整数的除数并指定整数的哪一部分为小数。比例因子隐式地定为数字 10 的幂，指数范围从 0 到 28。因此，Decimal 值的二进制表示的形式为（（-296 至 296）/ 10（0 到 28）），其中 -296-1 等于 MinValue，296-1 等于 MaxValue。 Decimal 值的二进制表示形式由 1 位符号、96 位整数以及比例因子组成，比例因子用作 96 位整数的除数并指定整数的哪一部分为小数。比例因子隐式地定为数字 10 的幂，指数范围从 0 到 28。因此，Decimal 值的二进制表示的形式为（（-296 至 296）/ 10（0 到 28）），其中 -296-1 等于 MinValue，296-1 等于 MaxValue。

比例因子还保留 Decimal 数字中的所有尾随零。在算术或比较运算中，尾随零并不影响 Decimal 数字的值。但是，如果应用了正确的格式字符串，则可由 ToString 方法显示尾随零。 比例因子还保留 Decimal 数字中的所有尾随零。在算术或比较运算中，尾随零并不影响 Decimal 数字的值。但是，如果应用了正确的格式字符串，则可由 ToString 方法显示尾随零。 比例因子还保留 Decimal 数字中的所有尾随零。在算术或比较运算中，尾随零并不影响 Decimal 数字的值。但是，如果应用了正确的格式字符串，则可由 ToString 方法显示尾随零。

转换注意事项

此类型提供将 Decimal 值转换为 SByte、Int16、Int32、Int64、Byte、UInt16、UInt32 和 UInt64 及其反向转换的方法。从这些整型到 Decimal 的转换属于扩大转换，不会丢失信息或引发异常。 此类型提供将 Decimal 值转换为 SByte、Int16、Int32、Int64、Byte、UInt16、UInt32 和 UInt64 及其反向转换的方法。从这些整型到 Decimal 的转换属于扩大转换，不会丢失信息或引发异常。

从 Decimal 到任意整型的转换属于收缩转换，会将 Decimal 值向零舍入为最接近的整数值。某些语言（如 C#）也支持从 Decimal 值到 Char 值的转换。如果无法以目标类型表示这些转换的结果，则会引发 OverflowException。 从 Decimal 到任意整型的转换属于收缩转换，会将 Decimal 值向零舍入为最接近的整数值。某些语言（如 C#）也支持从 Decimal 值到 Char 值的转换。如果无法以目标类型表示这些转换的结果，则会引发 OverflowException。 从 Decimal 到任意整型的转换属于收缩转换，会将 Decimal 值向零舍入为最接近的整数值。某些语言（如 C#）也支持从 Decimal 值到 Char 值的转换。如果无法以目标类型表示这些转换的结果，则会引发 OverflowException。

Decimal 类型也提供将 Decimal 值转换为 Single 和 Double 及其反向转换的方法。从 Decimal 到 Single 或 Double 的转换属于收缩转换，可能会丢失精度，但不会丢失所转换值的数量大小信息。此类转换不会引发异常。 Decimal 类型也提供将 Decimal 值转换为 Single 和 Double 及其反向转换的方法。从 Decimal 到 Single 或 Double 的转换属于收缩转换，可能会丢失精度，但不会丢失所转换值的数量大小信息。此类转换不会引发异常。 Decimal 类型也提供将 Decimal 值转换为 Single 和 Double 及其反向转换的方法。从 Decimal 到 Single 或 Double 的转换属于收缩转换，可能会丢失精度，但不会丢失所转换值的数量大小信息。此类转换不会引发异常。

如果从 Single 或 Double 到 Decimal 的转换的结果无法表示为 Decimal，则将引发 OverflowException。

下面的代码示例演示了 Decimal 的用法。

' Keeping my fortune in Decimals to avoid the round-off errors.
Class PiggyBank
    Protected MyFortune As Decimal

    Public Sub AddPenny()
        MyFortune = [Decimal].Add(MyFortune, 0.01D)
    End Sub

    Public ReadOnly Property Capacity() As Decimal
        Get
            Return [Decimal].MaxValue
        End Get
    End Property

    Public ReadOnly Property Dollars() As Decimal
        Get
            Return [Decimal].Floor(MyFortune)
        End Get
    End Property

    Public ReadOnly Property Cents() As Decimal
        Get
            Return [Decimal].Subtract(MyFortune, [Decimal].Floor(MyFortune))
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return MyFortune.ToString("C") + " in piggy bank"
    End Function
End Class

    /// <summary>
    /// Keeping my fortune in Decimals to avoid the round-off errors.
    /// </summary>
    class PiggyBank {
        protected decimal MyFortune;

        public void AddPenny() {
            MyFortune = Decimal.Add(MyFortune, .01m);
        }

        public decimal Capacity {
            get {
                return Decimal.MaxValue;
            }
        }

        public decimal Dollars {
            get {
                return Decimal.Floor(MyFortune);
            }
        }

        public decimal Cents {
            get {
                return Decimal.Subtract(MyFortune, Decimal.Floor(MyFortune));
            }
        }

        public override string ToString() {
            return MyFortune.ToString("C")+" in piggy bank";
        }
    }

   /// <summary>
   /// Keeping my fortune in Decimals to avoid the round-off errors.
   /// </summary>
   public ref class PiggyBank
   {
   protected:
      Decimal MyFortune;

   public:
      void AddPenny()
      {
         MyFortune = System::Decimal::Add( MyFortune, Decimal(.01) );
      }

      System::Decimal Capacity()
      {
         return MyFortune.MaxValue;
      }

      Decimal Dollars()
      {
         return Decimal::Floor( MyFortune );
      }

      Decimal Cents()
      {
         return Decimal::Subtract( MyFortune, Decimal::Floor( MyFortune ) );
      }

      virtual System::String^ ToString() override
      {
         return MyFortune.ToString("C")+" in piggy bank";
      }
   };
}

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

警告说明 警告

在所有的硬件平台上都分配该类型的一个实例不是线程安全的，因为该实例的二进制表示形式可能太大，无法在单个原子操作中分配。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 成员
System 命名空间
SByte
Int16
Int32
Int64
Byte
UInt16
UInt32
UInt64
Single
Double
Char


Decimal 成员

Decimal 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

表示十进制数。

Decimal 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Decimal 结构
System 命名空间


Decimal 构造函数

Decimal 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

初始化 Decimal 的新实例。

名称 说明
页首

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal 构造函数 (Double)

Decimal 构造函数 (Double)
Decimal 结构

将 Decimal 的新实例初始化为指定的双精度浮点数的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As Double _
)
public Decimal(
    double value
)
public:
Decimal(
    double value
)
new :
        value:float -> Decimal

参数

value
类型： System Double
要表示成 Decimal 的值。
异常 | 条件
OverflowException | value 大于 MaxValue 或小于 MinValue。 - 或 - value 是 Double..::.NaN、Double..::.PositiveInfinity 或 Double..::.NegativeInfinity。

此构造函数使用就近舍入方法将 value 舍入成 15 个有效位。即使数字的位数超过 15 且较低的有效位是零，也是如此。 此构造函数使用就近舍入方法将 value 舍入成 15 个有效位。即使数字的位数超过 15 且较低的有效位是零，也是如此。

下面的代码示例使用构造函数重载创建几个 Decimal 数字，该重载用一个 Double 值初始化 Decimal 结构。

' Example of the Decimal( Double ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module DecimalCtorDoDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Create a Decimal object and display its value.
    Sub CreateDecimal( value As Double, valToStr As String )

        ' Format and display the constructor.
        Console.Write( "{0,-34}", _
            String.Format( "Decimal( {0} )", valToStr ) )

        ' Construct the Decimal value.
        Try
            Dim decimalNum As New Decimal( value )

            ' Display the value if it was created successfully.
            Console.WriteLine( "{0,31}", decimalNum )

        ' Display the exception type if an exception was thrown.
        Catch ex As Exception
            Console.WriteLine( "{0,31}", GetExceptionType( ex ) )
        End Try
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the Decimal( Double ) constructor " & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-34}{1,31}", "Constructor", _
            "Value or Exception" )
        Console.WriteLine( "{0,-34}{1,31}", "-----------", _
            "------------------" )

        ' Construct Decimal objects from Double values.
        CreateDecimal( 1.23456789E+5, "1.23456789E+5" )
        CreateDecimal( 1.234567890123E+15, "1.234567890123E+15" )
        CreateDecimal( 1.2345678901234567E+25, _
            "1.2345678901234567E+25" )
        CreateDecimal( 1.2345678901234567E+35, _
            "1.2345678901234567E+35" )
        CreateDecimal( 1.23456789E-5, "1.23456789E-5" )
        CreateDecimal( 1.234567890123E-15, "1.234567890123E-15" )
        CreateDecimal( 1.2345678901234567E-25, _
            "1.2345678901234567E-25" )
        CreateDecimal( 1.2345678901234567E-35, _
            "1.2345678901234567E-35" )
        CreateDecimal( 1.0 / 7.0, "1.0 / 7.0" )
    End Sub
End Module

' This example of the Decimal( Double ) constructor
' generates the following output.
'
' Constructor                                    Value or Exception
' -----------                                    ------------------
' Decimal( 1.23456789E+5 )                               123456.789
' Decimal( 1.234567890123E+15 )                    1234567890123000
' Decimal( 1.2345678901234567E+25 )      12345678901234600000000000
' Decimal( 1.2345678901234567E+35 )               OverflowException
' Decimal( 1.23456789E-5 )                          0.0000123456789
' Decimal( 1.234567890123E-15 )       0.000000000000001234567890123
' Decimal( 1.2345678901234567E-25 )  0.0000000000000000000000001235
' Decimal( 1.2345678901234567E-35 )                               0
' Decimal( 1.0 / 7.0 )                            0.142857142857143

// Example of the decimal( double ) constructor.
using System;

class DecimalCtorDoDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' )+1 );
    }

    // Create a decimal object and display its value.
    public static void CreateDecimal( double value, string valToStr )
    {
        // Format and display the constructor.
        Console.Write( "{0,-34}",
            String.Format( "decimal( {0} )", valToStr ) );

        try
        {
            // Construct the decimal value.
            decimal decimalNum = new decimal( value );

            // Display the value if it was created successfully.
            Console.WriteLine( "{0,31}", decimalNum );
        }
        catch( Exception ex )
        {
            // Display the exception type if an exception was thrown.
            Console.WriteLine( "{0,31}", GetExceptionType( ex ) );
        }
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the decimal( double ) " +
            "constructor \ngenerates the following output.\n" );
        Console.WriteLine( "{0,-34}{1,31}", "Constructor",
            "Value or Exception" );
        Console.WriteLine( "{0,-34}{1,31}", "-----------",
            "------------------" );

        // Construct decimal objects from double values.
        CreateDecimal( 1.23456789E+5, "1.23456789E+5" );
        CreateDecimal( 1.234567890123E+15, "1.234567890123E+15" );
        CreateDecimal( 1.2345678901234567E+25,
            "1.2345678901234567E+25" );
        CreateDecimal( 1.2345678901234567E+35,
            "1.2345678901234567E+35" );
        CreateDecimal( 1.23456789E-5, "1.23456789E-5" );
        CreateDecimal( 1.234567890123E-15, "1.234567890123E-15" );
        CreateDecimal( 1.2345678901234567E-25,
            "1.2345678901234567E-25" );
        CreateDecimal( 1.2345678901234567E-35,
            "1.2345678901234567E-35" );
        CreateDecimal( 1.0 / 7.0, "1.0 / 7.0" );
    }
}

/*
This example of the decimal( double ) constructor
generates the following output.

Constructor                                    Value or Exception
-----------                                    ------------------
decimal( 1.23456789E+5 )                               123456.789
decimal( 1.234567890123E+15 )                    1234567890123000
decimal( 1.2345678901234567E+25 )      12345678901234600000000000
decimal( 1.2345678901234567E+35 )               OverflowException
decimal( 1.23456789E-5 )                          0.0000123456789
decimal( 1.234567890123E-15 )       0.000000000000001234567890123
decimal( 1.2345678901234567E-25 )  0.0000000000000000000000001235
decimal( 1.2345678901234567E-35 )                               0
decimal( 1.0 / 7.0 )                            0.142857142857143
*/

// Example of the Decimal( double ) constructor.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Create a Decimal object and display its value.
void CreateDecimal( double value, String^ valToStr )
{

   // Format and display the constructor.
   Console::Write( "{0,-34}", String::Format( "Decimal( {0} )", valToStr ) );
   try
   {

      // Construct the Decimal value.
      Decimal decimalNum = Decimal(value);

      // Display the value if it was created successfully.
      Console::WriteLine( "{0,31}", decimalNum );
   }
   catch ( Exception^ ex )
   {

      // Display the exception type if an exception was thrown.
      Console::WriteLine( "{0,31}", GetExceptionType( ex ) );
   }

}

int main()
{
   Console::WriteLine( "This example of the Decimal( double ) "
   "constructor \ngenerates the following output.\n" );
   Console::WriteLine( "{0,-34}{1,31}", "Constructor", "Value or Exception" );
   Console::WriteLine( "{0,-34}{1,31}", "-----------", "------------------" );

   // Construct Decimal objects from double values.
   CreateDecimal( 1.23456789E+5, "1.23456789E+5" );
   CreateDecimal( 1.234567890123E+15, "1.234567890123E+15" );
   CreateDecimal( 1.2345678901234567E+25, "1.2345678901234567E+25" );
   CreateDecimal( 1.2345678901234567E+35, "1.2345678901234567E+35" );
   CreateDecimal( 1.23456789E-5, "1.23456789E-5" );
   CreateDecimal( 1.234567890123E-15, "1.234567890123E-15" );
   CreateDecimal( 1.2345678901234567E-25, "1.2345678901234567E-25" );
   CreateDecimal( 1.2345678901234567E-35, "1.2345678901234567E-35" );
   CreateDecimal( 1.0 / 7.0, "1.0 / 7.0" );
}

/*
This example of the Decimal( double ) constructor
generates the following output.

Constructor                                    Value or Exception
-----------                                    ------------------
Decimal( 1.23456789E+5 )                               123456.789
Decimal( 1.234567890123E+15 )                    1234567890123000
Decimal( 1.2345678901234567E+25 )      12345678901234600000000000
Decimal( 1.2345678901234567E+35 )               OverflowException
Decimal( 1.23456789E-5 )                          0.0000123456789
Decimal( 1.234567890123E-15 )       0.000000000000001234567890123
Decimal( 1.2345678901234567E-25 )  0.0000000000000000000000001235
Decimal( 1.2345678901234567E-35 )                               0
Decimal( 1.0 / 7.0 )                            0.142857142857143
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Decimal 重载
System 命名空间


Decimal 构造函数 (Int32)

Decimal 构造函数 (Int32)
Decimal 结构

将 Decimal 的新实例初始化为指定的 32 位有符号整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As Integer _
)
public Decimal(
    int value
)
public:
Decimal(
    int value
)
new :
        value:int -> Decimal

参数

value
类型： System Int32
要表示成 Decimal 的值。

下面的代码示例使用构造函数重载创建几个 Decimal 数字，该重载用一个 Int32 值初始化 Decimal 结构。

' Example of the Decimal( Integer ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module DecimalCtorIDemo

    ' Create a Decimal object and display its value.
    Sub CreateDecimal( value As Integer, valToStr As String )

        Dim decimalNum As New Decimal( value )

        ' Format the constructor for display.
        Dim ctor As String = _
            String.Format( "Decimal( {0} )", valToStr )

        ' Display the constructor and its value.
        Console.WriteLine( "{0,-33}{1,16}", ctor, decimalNum )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the Decimal( Integer ) constructor " & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-33}{1,16}", "Constructor", "Value" )
        Console.WriteLine( "{0,-33}{1,16}", "-----------", "-----" )

        ' Construct Decimal objects from Integer values.
        CreateDecimal( Integer.MinValue, "Integer.MinValue" )
        CreateDecimal( Integer.MaxValue, "Integer.MaxValue" )
        CreateDecimal( 0, "0" )
        CreateDecimal( 999999999, "999999999" )
        CreateDecimal( &H40000000, "&H40000000" )
        CreateDecimal( &HC0000000, "&HC0000000" )
    End Sub
End Module

' This example of the Decimal( Integer ) constructor
' generates the following output.
'
' Constructor                                 Value
' -----------                                 -----
' Decimal( Integer.MinValue )           -2147483648
' Decimal( Integer.MaxValue )            2147483647
' Decimal( 0 )                                    0
' Decimal( 999999999 )                    999999999
' Decimal( &H40000000 )                  1073741824
' Decimal( &HC0000000 )                 -1073741824

// Example of the decimal( int ) constructor.
using System;

class DecimalCtorIDemo
{
    // Create a decimal object and display its value.
    public static void CreateDecimal( int value, string valToStr )
    {
        decimal decimalNum = new decimal( value );

        // Format the constructor for display.
        string ctor = String.Format( "decimal( {0} )", valToStr );

        // Display the constructor and its value.
        Console.WriteLine( "{0,-30}{1,16}", ctor, decimalNum );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the decimal( int ) " +
            "constructor \ngenerates the following output.\n" );
        Console.WriteLine( "{0,-30}{1,16}", "Constructor", "Value" );
        Console.WriteLine( "{0,-30}{1,16}", "-----------", "-----" );

        // Construct decimal objects from int values.
        CreateDecimal( int.MinValue, "int.MinValue" );
        CreateDecimal( int.MaxValue, "int.MaxValue" );
        CreateDecimal( 0, "0" );
        CreateDecimal( 999999999, "999999999" );
        CreateDecimal( 0x40000000, "0x40000000" );
        CreateDecimal( unchecked( (int)0xC0000000 ),
            "(int)0xC0000000" );
    }
}

/*
This example of the decimal( int ) constructor
generates the following output.

Constructor                              Value
-----------                              -----
decimal( int.MinValue )            -2147483648
decimal( int.MaxValue )             2147483647
decimal( 0 )                                 0
decimal( 999999999 )                 999999999
decimal( 0x40000000 )               1073741824
decimal( (int)0xC0000000 )         -1073741824
*/

// Example of the Decimal( int ) constructor.
using namespace System;

// Create a Decimal object and display its value.
void CreateDecimal( int value, String^ valToStr )
{
   Decimal decimalNum = Decimal(value);

   // Format the constructor for display.
   String^ ctor = String::Format( "Decimal( {0} )", valToStr );

   // Display the constructor and its value.
   Console::WriteLine( "{0,-30}{1,16}", ctor, decimalNum );
}

int main()
{
   Console::WriteLine( "This example of the Decimal( int ) "
   "constructor \ngenerates the following output.\n" );
   Console::WriteLine( "{0,-30}{1,16}", "Constructor", "Value" );
   Console::WriteLine( "{0,-30}{1,16}", "-----------", "-----" );

   // Construct Decimal objects from int values.
   CreateDecimal( Int32::MinValue, "Int32::MinValue" );
   CreateDecimal( Int32::MaxValue, "Int32::MaxValue" );
   CreateDecimal( 0, "0" );
   CreateDecimal( 999999999, "999999999" );
   CreateDecimal( 0x40000000, "0x40000000" );
   CreateDecimal( (int)0xC0000000, "(int)0xC0000000" );
}

/*
This example of the Decimal( int ) constructor
generates the following output.

Constructor                              Value
-----------                              -----
Decimal( Int32::MinValue )         -2147483648
Decimal( Int32::MaxValue )          2147483647
Decimal( 0 )                                 0
Decimal( 999999999 )                 999999999
Decimal( 0x40000000 )               1073741824
Decimal( (int)0xC0000000 )         -1073741824
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Decimal 重载
System 命名空间


Decimal 构造函数 ( array<Int32 >[]()[])

Decimal 构造函数 (
array<
Int32
>
[]
()
[]
)
Decimal 结构

将 Decimal 的新实例初始化为以二进制表示的、包含在指定数组中的十进制值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    bits As Integer() _
)
public Decimal(
    int[] bits
)
public:
Decimal(
    array<int>^ bits
)
new :
        bits:int[] -> Decimal

参数

bits
类型：
array<
System Int32
>
[]
()
[]

包含十进制值表示形式的 32 位有符号整数的数组。
异常 | 条件
ArgumentNullException | bits 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | bits 的长度不是 4。 - 或 - bits 中十进制值的表示形式无效。

Decimal 数字的二进制表示由 1 位符号、一个 96 位的整数以及一个比例因子组成，比例因子用以分隔该整数以指定它的哪一部分为小数部分。比例因子隐式地定为数字 10 的幂，指数范围从 0 到 28。 Decimal 数字的二进制表示由 1 位符号、一个 96 位的整数以及一个比例因子组成，比例因子用以分隔该整数以指定它的哪一部分为小数部分。比例因子隐式地定为数字 10 的幂，指数范围从 0 到 28。

bits 是长度为四个元素的、由 32 位有符号整数构成的数组。

bits [0]、bits [1] 和 bits [2] 分别包含 96 位整数的低 32 位、中间 32 位和高 32 位。

bits [3] 包含比例因子和符号，由以下部分组成：

0 到 15 位（即字的低位部分）不被使用且必须为零。

16 到 23 位必须包含一个 0 到 28 之间的指数，指示 10 的幂，用以分隔该整数。

24 到 30 位不被使用且必须为零。

31 位包含符号，0 表示正，1 表示负。

一个数值会有几种可能的二进制表示形式，所有这些表示形式均同样有效，并且在数值上相等。请注意，位的表示有正零和负零之分。在所有运算中，这些值被视为相等。 一个数值会有几种可能的二进制表示形式，所有这些表示形式均同样有效，并且在数值上相等。请注意，位的表示有正零和负零之分。在所有运算中，这些值被视为相等。 一个数值会有几种可能的二进制表示形式，所有这些表示形式均同样有效，并且在数值上相等。请注意，位的表示有正零和负零之分。在所有运算中，这些值被视为相等。

下面的代码示例使用构造函数重载创建几个 Decimal 数字，该重载用四个 Int32 值组成的数组初始化 Decimal 结构。

' Example of the Decimal( Integer( ) ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module DecimalCtorIArrDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Create a Decimal object and display its value.
    Sub CreateDecimal( ByVal bits( ) As Integer )

        ' Format and save the constructor.
        Dim ctor As String = String.Format( "Decimal( {{ &H{0:X}", bits( 0 ) )
        Dim valOrExc As String
        Dim index As Integer
        For index = 1 to bits.Length - 1
            ctor &= String.Format( ", &H{0:X}", bits( index ) )
        Next index
        ctor &= " } )"

        ' Construct the Decimal value.
        Try
            Dim decimalNum As New Decimal( bits )

            ' Format the Decimal value for display.
            valOrExc = decimalNum.ToString( )

        ' Save the exception type if an exception was thrown.
        Catch ex As Exception
            valOrExc =  GetExceptionType( ex )
        End Try

        ' Display the constructor and Decimal value or exception.
        Dim ctorLen As Integer = 76 - valOrExc.Length
        If ctorLen > ctor.Length Then

            ' Display the data on one line if it will fit.
            Console.WriteLine( "{0}{1}", ctor.PadRight( ctorLen ), _
                valOrExc )

        ' Otherwise, display the data on two lines.
        Else
            Console.WriteLine( "{0}", ctor )
            Console.WriteLine( "{0,76}", valOrExc )
        End If
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & _
            "Decimal( Integer( ) ) constructor " & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-38}{1,38}", "Constructor", _
            "Value or Exception" )
        Console.WriteLine( "{0,-38}{1,38}", "-----------", _
            "------------------" )

        ' Construct Decimal objects from Integer arrays.
        CreateDecimal( New Integer( ) { 0, 0, 0, 0 } )
        CreateDecimal( New Integer( ) { 0, 0, 0 } )
        CreateDecimal( New Integer( ) { 0, 0, 0, 0, 0 } )
        CreateDecimal( New Integer( ) { 1000000000, 0, 0, 0 } )
        CreateDecimal( New Integer( ) { 0, 1000000000, 0, 0 } )
        CreateDecimal( New Integer( ) { 0, 0, 1000000000, 0 } )
        CreateDecimal( New Integer( ) { 0, 0, 0, 1000000000 } )
        CreateDecimal( New Integer( ) { -1, -1, -1, 0 } )
        CreateDecimal( New Integer( ) { -1, -1, -1, &H80000000 } )
        CreateDecimal( New Integer( ) { -1, 0, 0, &H100000 } )
        CreateDecimal( New Integer( ) { -1, 0, 0, &H1C0000 } )
        CreateDecimal( New Integer( ) { -1, 0, 0, &H1D0000 } )
        CreateDecimal( New Integer( ) { -1, 0, 0, &H1C0001 } )
        CreateDecimal( New Integer( ) _
            { &HF0000, &HF0000, &HF0000, &HF0000 } )
    End Sub
End Module

' This example of the Decimal( Integer( ) ) constructor
' generates the following output.
'
' Constructor                                               Value or Exception
' -----------                                               ------------------
' Decimal( { &H0, &H0, &H0, &H0 } )                                          0
' Decimal( { &H0, &H0, &H0 } )                               ArgumentException
' Decimal( { &H0, &H0, &H0, &H0, &H0 } )                     ArgumentException
' Decimal( { &H3B9ACA00, &H0, &H0, &H0 } )                          1000000000
' Decimal( { &H0, &H3B9ACA00, &H0, &H0 } )                 4294967296000000000
' Decimal( { &H0, &H0, &H3B9ACA00, &H0 } )       18446744073709551616000000000
' Decimal( { &H0, &H0, &H0, &H3B9ACA00 } )                   ArgumentException
' Decimal( { &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &H0 } )
'                                                79228162514264337593543950335
' Decimal( { &HFFFFFFFF, &HFFFFFFFF, &HFFFFFFFF, &H80000000 } )
'                                               -79228162514264337593543950335
' Decimal( { &HFFFFFFFF, &H0, &H0, &H100000 } )             0.0000004294967295
' Decimal( { &HFFFFFFFF, &H0, &H0, &H1C0000 } ) 0.0000000000000000004294967295
' Decimal( { &HFFFFFFFF, &H0, &H0, &H1D0000 } )              ArgumentException
' Decimal( { &HFFFFFFFF, &H0, &H0, &H1C0001 } )              ArgumentException
' Decimal( { &HF0000, &HF0000, &HF0000, &HF0000 } )
'                                                  18133887298.441562272235520

// Example of the decimal( int[ ] ) constructor.
using System;

class DecimalCtorIArrDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Create a decimal object and display its value.
    public static void CreateDecimal( int[ ] bits )
    {
        // Format the constructor for display.
        string ctor = String.Format(
            "decimal( {{ 0x{0:X}", bits[ 0 ] );
        string valOrExc;

        for( int index = 1; index < bits.Length; index++ )
            ctor += String.Format( ", 0x{0:X}", bits[ index ] );
        ctor += " } )";

        try
        {
            // Construct the decimal value.
            decimal decimalNum = new decimal( bits );

            // Format the decimal value for display.
            valOrExc = decimalNum.ToString( );
        }
        catch( Exception ex )
        {
            // Save the exception type if an exception was thrown.
            valOrExc = GetExceptionType( ex );
        }

        // Display the constructor and decimal value or exception.
        int ctorLen = 76 - valOrExc.Length;

        // Display the data on one line if it will fit.
        if( ctorLen > ctor.Length )
            Console.WriteLine( "{0}{1}", ctor.PadRight( ctorLen ),
                valOrExc );

        // Otherwise, display the data on two lines.
        else
        {
            Console.WriteLine( "{0}", ctor );
            Console.WriteLine( "{0,76}", valOrExc );
        }
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the decimal( int[ ] ) constructor " +
            "\ngenerates the following output.\n" );
        Console.WriteLine( "{0,-38}{1,38}", "Constructor",
            "Value or Exception" );
        Console.WriteLine( "{0,-38}{1,38}", "-----------",
            "------------------" );

        // Construct decimal objects from integer arrays.
        CreateDecimal( new int[ ] { 0, 0, 0, 0 } );
        CreateDecimal( new int[ ] { 0, 0, 0 } );
        CreateDecimal( new int[ ] { 0, 0, 0, 0, 0 } );
        CreateDecimal( new int[ ] { 1000000000, 0, 0, 0 } );
        CreateDecimal( new int[ ] { 0, 1000000000, 0, 0 } );
        CreateDecimal( new int[ ] { 0, 0, 1000000000, 0 } );
        CreateDecimal( new int[ ] { 0, 0, 0, 1000000000 } );
        CreateDecimal( new int[ ] { -1, -1, -1, 0 } );
        CreateDecimal( new int[ ]
            { -1, -1, -1, unchecked( (int)0x80000000 ) } );
        CreateDecimal( new int[ ] { -1, 0, 0, 0x100000 } );
        CreateDecimal( new int[ ] { -1, 0, 0, 0x1C0000 } );
        CreateDecimal( new int[ ] { -1, 0, 0, 0x1D0000 } );
        CreateDecimal( new int[ ] { -1, 0, 0, 0x1C0001 } );
        CreateDecimal( new int[ ]
            { 0xF0000, 0xF0000, 0xF0000, 0xF0000 } );
    }
}

/*
This example of the decimal( int[ ] ) constructor
generates the following output.

Constructor                                               Value or Exception
-----------                                               ------------------
decimal( { 0x0, 0x0, 0x0, 0x0 } )                                          0
decimal( { 0x0, 0x0, 0x0 } )                               ArgumentException
decimal( { 0x0, 0x0, 0x0, 0x0, 0x0 } )                     ArgumentException
decimal( { 0x3B9ACA00, 0x0, 0x0, 0x0 } )                          1000000000
decimal( { 0x0, 0x3B9ACA00, 0x0, 0x0 } )                 4294967296000000000
decimal( { 0x0, 0x0, 0x3B9ACA00, 0x0 } )       18446744073709551616000000000
decimal( { 0x0, 0x0, 0x0, 0x3B9ACA00 } )                   ArgumentException
decimal( { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0 } )
                                               79228162514264337593543950335
decimal( { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000 } )
                                              -79228162514264337593543950335
decimal( { 0xFFFFFFFF, 0x0, 0x0, 0x100000 } )             0.0000004294967295
decimal( { 0xFFFFFFFF, 0x0, 0x0, 0x1C0000 } ) 0.0000000000000000004294967295
decimal( { 0xFFFFFFFF, 0x0, 0x0, 0x1D0000 } )              ArgumentException
decimal( { 0xFFFFFFFF, 0x0, 0x0, 0x1C0001 } )              ArgumentException
decimal( { 0xF0000, 0xF0000, 0xF0000, 0xF0000 } )
                                                 18133887298.441562272235520
*/

// Example of the Decimal( int __gc [ ] ) constructor.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Create a Decimal object and display its value.
void CreateDecimal( array<int>^bits )
{

   // Format the constructor for display.
   String^ ctor = String::Format( "Decimal( {{ 0x{0:X}", bits[ 0 ] );
   String^ valOrExc;
   for ( int index = 1; index < bits->Length; index++ )
      ctor = String::Concat( ctor, String::Format( ", 0x{0:X}", bits[ index ] ) );
   ctor = String::Concat( ctor, " } )" );
   try
   {

      // Construct the Decimal value.
      Decimal decimalNum = Decimal(bits);

      // Format the Decimal value for display.
      valOrExc = decimalNum.ToString();
   }
   catch ( Exception^ ex )
   {

      // Save the exception type if an exception was thrown.
      valOrExc = GetExceptionType( ex );
   }

   // Display the constructor and Decimal value or exception.
   int ctorLen = 76 - valOrExc->Length;

   // Display the data on one line if it will fit.
   if ( ctorLen > ctor->Length )
      Console::WriteLine( "{0}{1}", ctor->PadRight( ctorLen ), valOrExc );
   // Otherwise, display the data on two lines.
   else
   {
      Console::WriteLine( "{0}", ctor );
      Console::WriteLine( "{0,76}", valOrExc );
   }
}

int main()
{
   Console::WriteLine( "This example of the Decimal( int __gc [ ] ) "
   "constructor \ngenerates the following output.\n" );
   Console::WriteLine( "{0,-38}{1,38}", "Constructor", "Value or Exception" );
   Console::WriteLine( "{0,-38}{1,38}", "-----------", "------------------" );

   // Construct Decimal objects from integer arrays.
   array<Int32>^zero = {0,0,0,0};
   CreateDecimal( zero );
   array<Int32>^arrayShort = {0,0,0};
   CreateDecimal( arrayShort );
   array<Int32>^arrayLong = {0,0,0,0,0};
   CreateDecimal( arrayLong );
   array<Int32>^word0Data = {1000000000,0,0,0};
   CreateDecimal( word0Data );
   array<Int32>^word1Data = {0,1000000000,0,0};
   CreateDecimal( word1Data );
   array<Int32>^word2Data = {0,0,1000000000,0};
   CreateDecimal( word2Data );
   array<Int32>^word3Data = {0,0,0,1000000000};
   CreateDecimal( word3Data );
   array<Int32>^decMax = { -1,-1,-1,0};
   CreateDecimal( decMax );
   array<Int32>^decMin = { -1,-1,-1,0x80000000};
   CreateDecimal( decMin );
   array<Int32>^fracDig16 = { -1,0,0,0x100000};
   CreateDecimal( fracDig16 );
   array<Int32>^fracDig28 = { -1,0,0,0x1C0000};
   CreateDecimal( fracDig28 );
   array<Int32>^fracDig29 = { -1,0,0,0x1D0000};
   CreateDecimal( fracDig29 );
   array<Int32>^reserved = { -1,0,0,0x1C0001};
   CreateDecimal( reserved );
   array<Int32>^Same4Words = {0xF0000,0xF0000,0xF0000,0xF0000};
   CreateDecimal( Same4Words );
}

/*
This example of the Decimal( int __gc [ ] ) constructor
generates the following output.

Constructor                                               Value or Exception
-----------                                               ------------------
Decimal( { 0x0, 0x0, 0x0, 0x0 } )                                          0
Decimal( { 0x0, 0x0, 0x0 } )                               ArgumentException
Decimal( { 0x0, 0x0, 0x0, 0x0, 0x0 } )                     ArgumentException
Decimal( { 0x3B9ACA00, 0x0, 0x0, 0x0 } )                          1000000000
Decimal( { 0x0, 0x3B9ACA00, 0x0, 0x0 } )                 4294967296000000000
Decimal( { 0x0, 0x0, 0x3B9ACA00, 0x0 } )       18446744073709551616000000000
Decimal( { 0x0, 0x0, 0x0, 0x3B9ACA00 } )                   ArgumentException
Decimal( { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0 } )
                                               79228162514264337593543950335
Decimal( { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000 } )
                                              -79228162514264337593543950335
Decimal( { 0xFFFFFFFF, 0x0, 0x0, 0x100000 } )             0.0000004294967295
Decimal( { 0xFFFFFFFF, 0x0, 0x0, 0x1C0000 } ) 0.0000000000000000004294967295
Decimal( { 0xFFFFFFFF, 0x0, 0x0, 0x1D0000 } )              ArgumentException
Decimal( { 0xFFFFFFFF, 0x0, 0x0, 0x1C0001 } )              ArgumentException
Decimal( { 0xF0000, 0xF0000, 0xF0000, 0xF0000 } )
                                                 18133887298.441562272235520
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Decimal 重载
System 命名空间
GetBits


Decimal 构造函数 (Int64)

Decimal 构造函数 (Int64)
Decimal 结构

将 Decimal 的新实例初始化为指定的 64 位有符号整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As Long _
)
public Decimal(
    long value
)
public:
Decimal(
    long long value
)
new :
        value:int64 -> Decimal

参数

value
类型： System Int64
要表示成 Decimal 的值。

下面的代码示例使用构造函数重载创建几个 Decimal 数字，该重载用一个 Int64 值初始化 Decimal 结构。

' Example of the Decimal( Long ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module DecimalCtorLDemo

    ' Create a Decimal object and display its value.
    Sub CreateDecimal( value As Long, valToStr As String )

        Dim decimalNum As New Decimal( value )

        ' Format the constructor for display.
        Dim ctor As String = _
            String.Format( "Decimal( {0} )", valToStr )

        ' Display the constructor and its value.
        Console.WriteLine( "{0,-30}{1,22}", ctor, decimalNum )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the Decimal( Long ) constructor " & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-30}{1,22}", "Constructor", "Value" )
        Console.WriteLine( "{0,-30}{1,22}", "-----------", "-----" )

        ' Construct Decimal objects from Long values.
        CreateDecimal( Long.MinValue, "Long.MinValue" )
        CreateDecimal( Long.MaxValue, "Long.MaxValue" )
        CreateDecimal( 0L, "0" )
        CreateDecimal( 999999999999999999, "999999999999999999" )
        CreateDecimal( &H2000000000000000, "&H2000000000000000" )
        CreateDecimal( &HE000000000000000, "&HE000000000000000" )
    End Sub
End Module

' This example of the Decimal( Long ) constructor
' generates the following output.
'
' Constructor                                    Value
' -----------                                    -----
' Decimal( Long.MinValue )        -9223372036854775808
' Decimal( Long.MaxValue )         9223372036854775807
' Decimal( 0 )                                       0
' Decimal( 999999999999999999 )     999999999999999999
' Decimal( &H2000000000000000 )    2305843009213693952
' Decimal( &HE000000000000000 )   -2305843009213693952

// Example of the decimal( long ) constructor.
using System;

class DecimalCtorLDemo
{
    // Create a decimal object and display its value.
    public static void CreateDecimal( long value, string valToStr )
    {
        decimal decimalNum = new decimal( value );

        // Format the constructor for display.
        string ctor = String.Format( "decimal( {0} )", valToStr );

        // Display the constructor and its value.
        Console.WriteLine( "{0,-35}{1,22}", ctor, decimalNum );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the decimal( long ) " +
            "constructor \ngenerates the following output.\n" );
        Console.WriteLine( "{0,-35}{1,22}", "Constructor", "Value" );
        Console.WriteLine( "{0,-35}{1,22}", "-----------", "-----" );

        // Construct decimal objects from long values.
        CreateDecimal( long.MinValue, "long.MinValue" );
        CreateDecimal( long.MaxValue, "long.MaxValue" );
        CreateDecimal( 0L, "0L" );
        CreateDecimal( 999999999999999999, "999999999999999999" );
        CreateDecimal( 0x2000000000000000, "0x2000000000000000" );
        CreateDecimal( unchecked( (long)0xE000000000000000 ),
            "(long)0xE000000000000000" );
    }
}

/*
This example of the decimal( long ) constructor
generates the following output.

Constructor                                         Value
-----------                                         -----
decimal( long.MinValue )             -9223372036854775808
decimal( long.MaxValue )              9223372036854775807
decimal( 0 )                                            0
decimal( 999999999999999999 )          999999999999999999
decimal( 0x2000000000000000 )         2305843009213693952
decimal( (long)0xE000000000000000 )  -2305843009213693952
*/

// Example of the Decimal( __int64 ) constructor.
using namespace System;

// Create a Decimal object and display its value.
void CreateDecimal( __int64 value, String^ valToStr )
{
   Decimal decimalNum = Decimal(value);

   // Format the constructor for display.
   String^ ctor = String::Format( "Decimal( {0} )", valToStr );

   // Display the constructor and its value.
   Console::WriteLine( "{0,-35}{1,22}", ctor, decimalNum );
}

int main()
{
   Console::WriteLine( "This example of the Decimal( __int64 ) "
   "constructor \ngenerates the following output.\n" );
   Console::WriteLine( "{0,-35}{1,22}", "Constructor", "Value" );
   Console::WriteLine( "{0,-35}{1,22}", "-----------", "-----" );

   // Construct Decimal objects from __int64 values.
   CreateDecimal( Int64::MinValue, "Int64::MinValue" );
   CreateDecimal( Int64::MaxValue, "Int64::MaxValue" );
   CreateDecimal( 0, "0" );
   CreateDecimal( 999999999999999999, "999999999999999999" );
   CreateDecimal( 0x2000000000000000, "0x2000000000000000" );
   CreateDecimal( 0xE000000000000000, "0xE000000000000000" );
}

/*
This example of the Decimal( __int64 ) constructor
generates the following output.

Constructor                                         Value
-----------                                         -----
Decimal( Int64::MinValue )           -9223372036854775808
Decimal( Int64::MaxValue )            9223372036854775807
Decimal( 0 )                                            0
Decimal( 999999999999999999 )          999999999999999999
Decimal( 0x2000000000000000 )         2305843009213693952
Decimal( 0xE000000000000000 )        -2305843009213693952
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Decimal 重载
System 命名空间


Decimal 构造函数 (Single)

Decimal 构造函数 (Single)
Decimal 结构

将 Decimal 的新实例初始化为指定单精度浮点数字的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As Single _
)
public Decimal(
    float value
)
public:
Decimal(
    float value
)
new :
        value:float32 -> Decimal

参数

value
类型： System Single
要表示成 Decimal 的值。
异常 | 条件
OverflowException | value 大于 MaxValue 或小于 MinValue。 - 或 - value 是 Single..::.NaN、Single..::.PositiveInfinity 或 Single..::.NegativeInfinity。

此构造函数使用就近舍入方法将 value 舍入成 7 个有效位。即使数字的位数超过 7 且较低的有效位是零，也是如此。 此构造函数使用就近舍入方法将 value 舍入成 7 个有效位。即使数字的位数超过 7 且较低的有效位是零，也是如此。

下面的代码示例使用构造函数重载创建几个 Decimal 数字，该重载用一个 Single 值初始化 Decimal 结构。

' Example of the Decimal( Single ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module DecimalCtorSDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Create a Decimal object and display its value.
    Sub CreateDecimal( value As Single, valToStr As String )

        ' Format and display the constructor.
        Console.Write( "{0,-27}", _
            String.Format( "Decimal( {0} )", valToStr ) )

        ' Construct the Decimal value.
        Try
            Dim decimalNum As New Decimal( value )

            ' Display the value if it was created successfully.
            Console.WriteLine( "{0,31}", decimalNum )

        ' Display the exception type if an exception was thrown.
        Catch ex As Exception
            Console.WriteLine( "{0,31}", GetExceptionType( ex ) )
        End Try
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the Decimal( Single ) constructor " & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-27}{1,31}", "Constructor", "Value or Exception" )
        Console.WriteLine( "{0,-27}{1,31}", "-----------", "------------------" )

        ' Construct Decimal objects from Single values.
        CreateDecimal( 1.2345E+5, "1.2345E+5" )
        CreateDecimal( 1.234567E+15, "1.234567E+15" )
        CreateDecimal( 1.23456789E+25, "1.23456789E+25" )
        CreateDecimal( 1.23456789E+35, "1.23456789E+35" )
        CreateDecimal( 1.2345E-5, "1.2345E-5" )
        CreateDecimal( 1.234567E-15, "1.234567E-15" )
        CreateDecimal( 1.23456789E-25, "1.23456789E-25" )
        CreateDecimal( 1.23456789E-35, "1.23456789E-35" )
        CreateDecimal( 1.0 / 7.0, "1.0 / 7.0" )
    End Sub
End Module

' This example of the Decimal( Single ) constructor
' generates the following output.
'
' Constructor                             Value or Exception
' -----------                             ------------------
' Decimal( 1.2345E+5 )                                123450
' Decimal( 1.234567E+15 )                   1234567000000000
' Decimal( 1.23456789E+25 )       12345680000000000000000000
' Decimal( 1.23456789E+35 )                OverflowException
' Decimal( 1.2345E-5 )                           0.000012345
' Decimal( 1.234567E-15 )            0.000000000000001234567
' Decimal( 1.23456789E-25 )   0.0000000000000000000000001235
' Decimal( 1.23456789E-35 )                                0
' Decimal( 1.0 / 7.0 )                             0.1428571

// Example of the decimal( float ) constructor.
using System;

class DecimalCtorSDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Create a decimal object and display its value.
    public static void CreateDecimal( float value, string valToStr )
    {
        // Format and display the constructor.
        Console.Write( "{0,-27}",
            String.Format( "decimal( {0} )", valToStr ) );

        try
        {
            // Construct the decimal value.
            decimal decimalNum = new decimal( value );

            // Display the value if it was created successfully.
            Console.WriteLine( "{0,31}", decimalNum );
        }
        catch( Exception ex )
        {
            // Display the exception type if an exception was thrown.
            Console.WriteLine( "{0,31}", GetExceptionType( ex ) );
        }
    }

    public static void Main( )
    {

        Console.WriteLine( "This example of the decimal( float ) " +
            "constructor \ngenerates the following output.\n" );
        Console.WriteLine( "{0,-27}{1,31}", "Constructor",
            "Value or Exception" );
        Console.WriteLine( "{0,-27}{1,31}", "-----------",
            "------------------" );

        // Construct decimal objects from float values.
        CreateDecimal( 1.2345E+5F, "1.2345E+5F" );
        CreateDecimal( 1.234567E+15F, "1.234567E+15F" );
        CreateDecimal( 1.23456789E+25F, "1.23456789E+25F" );
        CreateDecimal( 1.23456789E+35F, "1.23456789E+35F" );
        CreateDecimal( 1.2345E-5F, "1.2345E-5F" );
        CreateDecimal( 1.234567E-15F, "1.234567E-15F" );
        CreateDecimal( 1.23456789E-25F, "1.23456789E-25F" );
        CreateDecimal( 1.23456789E-35F, "1.23456789E-35F" );
        CreateDecimal( 1.0F / 7.0F, "1.0F / 7.0F" );
    }
}

/*
This example of the decimal( float ) constructor
generates the following output.

Constructor                             Value or Exception
-----------                             ------------------
decimal( 1.2345E+5F )                               123450
decimal( 1.234567E+15F )                  1234567000000000
decimal( 1.23456789E+25F )      12345680000000000000000000
decimal( 1.23456789E+35F )               OverflowException
decimal( 1.2345E-5F )                          0.000012345
decimal( 1.234567E-15F )           0.000000000000001234567
decimal( 1.23456789E-25F )  0.0000000000000000000000001235
decimal( 1.23456789E-35F )                               0
decimal( 1.0F / 7.0F )                           0.1428571
*/

// Example of the Decimal( float ) constructor.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Create a Decimal object and display its value.
void CreateDecimal( float value, String^ valToStr )
{

   // Format and display the constructor.
   Console::Write( "{0,-27}", String::Format( "Decimal( {0} )", valToStr ) );
   try
   {

      // Construct the Decimal value.
      Decimal decimalNum = Decimal(value);

      // Display the value if it was created successfully.
      Console::WriteLine( "{0,31}", decimalNum );
   }
   catch ( Exception^ ex )
   {

      // Display the exception type if an exception was thrown.
      Console::WriteLine( "{0,31}", GetExceptionType( ex ) );
   }

}

int main()
{
   Console::WriteLine( "This example of the Decimal( float ) "
   "constructor \ngenerates the following output.\n" );
   Console::WriteLine( "{0,-27}{1,31}", "Constructor", "Value or Exception" );
   Console::WriteLine( "{0,-27}{1,31}", "-----------", "------------------" );

   // Construct Decimal objects from float values.
   CreateDecimal( 1.2345E+5, "1.2345E+5" );
   CreateDecimal( 1.234567E+15, "1.234567E+15" );
   CreateDecimal( 1.23456789E+25, "1.23456789E+25" );
   CreateDecimal( 1.23456789E+35, "1.23456789E+35" );
   CreateDecimal( 1.2345E-5, "1.2345E-5" );
   CreateDecimal( 1.234567E-15, "1.234567E-15" );
   CreateDecimal( 1.23456789E-25, "1.23456789E-25" );
   CreateDecimal( 1.23456789E-35, "1.23456789E-35" );
   CreateDecimal( 1.0 / 7.0, "1.0 / 7.0" );
}

/*
This example of the Decimal( float ) constructor
generates the following output.

Constructor                             Value or Exception
-----------                             ------------------
Decimal( 1.2345E+5 )                                123450
Decimal( 1.234567E+15 )                   1234567000000000
Decimal( 1.23456789E+25 )       12345680000000000000000000
Decimal( 1.23456789E+35 )                OverflowException
Decimal( 1.2345E-5 )                           0.000012345
Decimal( 1.234567E-15 )            0.000000000000001234567
Decimal( 1.23456789E-25 )   0.0000000000000000000000001235
Decimal( 1.23456789E-35 )                                0
Decimal( 1.0 / 7.0 )                             0.1428571
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Decimal 重载
System 命名空间


Decimal 构造函数 (UInt32)

Decimal 构造函数 (UInt32)
Decimal 结构

将 Decimal 的新实例初始化为指定的 32 位无符号整数值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Sub New ( _
    value As UInteger _
)
[CLSCompliantAttribute(false)]
public Decimal(
    uint value
)
[CLSCompliantAttribute(false)]
public:
Decimal(
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
new :
        value:uint32 -> Decimal

参数

value
类型： System UInt32
要表示成 Decimal 的值。

下面的代码示例使用构造函数重载创建几个 Decimal 数字，该重载用一个 UInt32 值初始化 Decimal 结构。

' Example of the Decimal( UInt32 ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module DecimalCtorUIDemo

    ' Create a Decimal object and display its value.
    Sub CreateDecimal( value As UInt32, valToStr As String )

        Dim decimalNum As New Decimal( value )

        ' Format the constructor for display.
        Dim ctor As String = _
            String.Format( "Decimal( {0} )", valToStr )

        ' Display the constructor and its value.
        Console.WriteLine( "{0,-33}{1,16}", ctor, decimalNum )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the Decimal( UInt32 ) constructor " & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-33}{1,16}", "Constructor", "Value" )
        Console.WriteLine( "{0,-33}{1,16}", "-----------", "-----" )

        ' Construct Decimal objects from UInt32 values.
        ' UInt32.MinValue and UInt32.MaxValue are not defined in VB.
        CreateDecimal( Convert.ToUInt32( 0 ), """UInt32.MinValue""" )
        CreateDecimal( Convert.ToUInt32( 4294967295 ), _
            """UInt32.MaxValue""" )
        CreateDecimal( Convert.ToUInt32( Integer.MaxValue ), _
            "Integer.MaxValue" )
        CreateDecimal( Convert.ToUInt32( 999999999 ), "999999999" )
        CreateDecimal( Convert.ToUInt32( &H40000000 ), "&H40000000" )
        CreateDecimal( Convert.ToUInt32( &HC0000000L ), "&HC0000000" )
    End Sub
End Module

' This example of the Decimal( UInt32 ) constructor
' generates the following output.
'
' Constructor                                 Value
' -----------                                 -----
' Decimal( "UInt32.MinValue" )                    0
' Decimal( "UInt32.MaxValue" )           4294967295
' Decimal( Integer.MaxValue )            2147483647
' Decimal( 999999999 )                    999999999
' Decimal( &H40000000 )                  1073741824
' Decimal( &HC0000000 )                  3221225472

// Example of the decimal( uint ) constructor.
using System;

class DecimalCtorUIDemo
{
    // Create a decimal object and display its value.
    public static void CreateDecimal( uint value, string valToStr )
    {
        decimal decimalNum = new decimal( value );

        // Format the constructor for display.
        string ctor = String.Format( "decimal( {0} )", valToStr );

        // Display the constructor and its value.
        Console.WriteLine( "{0,-33}{1,16}", ctor, decimalNum );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the decimal( uint ) " +
            "constructor \ngenerates the following output.\n" );
        Console.WriteLine( "{0,-33}{1,16}", "Constructor", "Value" );
        Console.WriteLine( "{0,-33}{1,16}", "-----------", "-----" );

        // Construct decimal objects from uint values.
        CreateDecimal( uint.MinValue, "uint.MinValue" );
        CreateDecimal( uint.MaxValue, "uint.MaxValue" );
        CreateDecimal( (uint)int.MaxValue, "(uint)int.MaxValue" );
        CreateDecimal( 999999999U, "999999999U" );
        CreateDecimal( 0x40000000U, "0x40000000U" );
        CreateDecimal( 0xC0000000, "0xC0000000" );
    }
}

/*
This example of the decimal( uint ) constructor
generates the following output.

Constructor                                 Value
-----------                                 -----
decimal( uint.MinValue )                        0
decimal( uint.MaxValue )               4294967295
decimal( (uint)int.MaxValue )          2147483647
decimal( 999999999U )                   999999999
decimal( 0x40000000U )                 1073741824
decimal( 0xC0000000 )                  3221225472
*/

// Example of the Decimal( unsigned int ) constructor.
using namespace System;

// Create a Decimal object and display its value.
void CreateDecimal( unsigned int value, String^ valToStr )
{
   Decimal decimalNum = Decimal(value);

   // Format the constructor for display.
   String^ ctor = String::Format( "Decimal( {0} )", valToStr );

   // Display the constructor and its value.
   Console::WriteLine( "{0,-30}{1,16}", ctor, decimalNum );
}

int main()
{
   Console::WriteLine( "This example of the Decimal( unsigned "
   "int ) constructor \ngenerates the following output.\n" );
   Console::WriteLine( "{0,-30}{1,16}", "Constructor", "Value" );
   Console::WriteLine( "{0,-30}{1,16}", "-----------", "-----" );

   // Construct Decimal objects from unsigned int values.
   CreateDecimal( UInt32::MinValue, "UInt32::MinValue" );
   CreateDecimal( UInt32::MaxValue, "UInt32::MaxValue" );
   CreateDecimal( Int32::MaxValue, "Int32::MaxValue" );
   CreateDecimal( 999999999, "999999999" );
   CreateDecimal( 0x40000000, "0x40000000" );
   CreateDecimal( 0xC0000000, "0xC0000000" );
}

/*
This example of the Decimal( unsigned int ) constructor
generates the following output.

Constructor                              Value
-----------                              -----
Decimal( UInt32::MinValue )                  0
Decimal( UInt32::MaxValue )         4294967295
Decimal( Int32::MaxValue )          2147483647
Decimal( 999999999 )                 999999999
Decimal( 0x40000000 )               1073741824
Decimal( 0xC0000000 )               3221225472
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Decimal 重载
System 命名空间


Decimal 构造函数 (UInt64)

Decimal 构造函数 (UInt64)
Decimal 结构

将 Decimal 的新实例初始化为指定的 64 位无符号整数值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Sub New ( _
    value As ULong _
)
[CLSCompliantAttribute(false)]
public Decimal(
    ulong value
)
[CLSCompliantAttribute(false)]
public:
Decimal(
    unsigned long long value
)
[<CLSCompliantAttribute(false)>]
new :
        value:uint64 -> Decimal

参数

value
类型： System UInt64
要表示成 Decimal 的值。

下面的代码示例使用构造函数重载创建几个 Decimal 数字，该重载用一个 UInt64 值初始化 Decimal 结构。

' Example of the Decimal( UInt64 ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module DecimalCtorULDemo

    ' Create a Decimal object and display its value.
    Sub CreateDecimal( value As UInt64, valToStr As String )

        Dim decimalNum As New Decimal( value )

        ' Format the constructor for display.
        Dim ctor As String = _
            String.Format( "Decimal( {0} )", valToStr )

        ' Display the constructor and its value.
        Console.WriteLine( "{0,-33}{1,22}", ctor, decimalNum )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the Decimal( UInt64 ) constructor " & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-33}{1,22}", "Constructor", "Value" )
        Console.WriteLine( "{0,-33}{1,22}", "-----------", "-----" )

        ' Construct Decimal objects from UInt64 values.
        ' UInt64.MinValue and UInt64.MaxValue are not defined in VB.
        CreateDecimal( Convert.ToUInt64( 0 ), """UInt64.MinValue""" )
        CreateDecimal( Convert.ToUInt64( 18446744073709551615D ), _
            """UInt64.MaxValue""" )
        CreateDecimal( Convert.ToUInt64( Long.MaxValue ), _
            "Long.MaxValue" )
        CreateDecimal( Convert.ToUInt64( 999999999999999999 ), _
            "999999999999999999" )
        CreateDecimal( Convert.ToUInt64( &H2000000000000000 ), _
            "&H2000000000000000" )
        CreateDecimal( Convert.ToUInt64( 16140901064495857664.0 ), _
            "16140901064495857664.0" )
    End Sub
End Module

' This example of the Decimal( UInt64 ) constructor
' generates the following output.
'
' Constructor                                       Value
' -----------                                       -----
' Decimal( "UInt64.MinValue" )                          0
' Decimal( "UInt64.MaxValue" )       18446744073709551615
' Decimal( Long.MaxValue )            9223372036854775807
' Decimal( 999999999999999999 )        999999999999999999
' Decimal( &H2000000000000000 )       2305843009213693952
' Decimal( 16140901064495857664.0 )  16140901064495857664

// Example of the decimal( ulong ) constructor.
using System;

class DecimalCtorLDemo
{
    // Create a decimal object and display its value.
    public static void CreateDecimal( ulong value, string valToStr )
    {
        decimal decimalNum = new decimal( value );

        // Format the constructor for display.
        string ctor = String.Format( "decimal( {0} )", valToStr );

        // Display the constructor and its value.
        Console.WriteLine( "{0,-35}{1,22}", ctor, decimalNum );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the decimal( ulong ) " +
            "constructor \ngenerates the following output.\n" );
        Console.WriteLine( "{0,-35}{1,22}", "Constructor", "Value" );
        Console.WriteLine( "{0,-35}{1,22}", "-----------", "-----" );

        // Construct decimal objects from ulong values.
        CreateDecimal( ulong.MinValue, "ulong.MinValue" );
        CreateDecimal( ulong.MaxValue, "ulong.MaxValue" );
        CreateDecimal( long.MaxValue, "long.MaxValue" );
        CreateDecimal( 999999999999999999, "999999999999999999" );
        CreateDecimal( 0x2000000000000000, "0x2000000000000000" );
        CreateDecimal( 0xE000000000000000, "0xE000000000000000" );
    }
}

/*
This example of the decimal( ulong ) constructor
generates the following output.

Constructor                                         Value
-----------                                         -----
decimal( ulong.MinValue )                               0
decimal( ulong.MaxValue )            18446744073709551615
decimal( long.MaxValue )              9223372036854775807
decimal( 999999999999999999 )          999999999999999999
decimal( 0x2000000000000000 )         2305843009213693952
decimal( 0xE000000000000000 )        16140901064495857664
*/

// Example of the Decimal( unsigned __int64 ) constructor.
using namespace System;

// Create a Decimal object and display its value.
void CreateDecimal( unsigned __int64 value, String^ valToStr )
{
   Decimal decimalNum = Decimal(value);

   // Format the constructor for display.
   String^ ctor = String::Format( "Decimal( {0} )", valToStr );

   // Display the constructor and its value.
   Console::WriteLine( "{0,-33}{1,22}", ctor, decimalNum );
}

int main()
{
   Console::WriteLine( "This example of the Decimal( unsigned "
   "__int64 ) constructor \ngenerates the following output.\n" );
   Console::WriteLine( "{0,-33}{1,22}", "Constructor", "Value" );
   Console::WriteLine( "{0,-33}{1,22}", "-----------", "-----" );

   // Construct Decimal objects from unsigned __int64 values.
   CreateDecimal( UInt64::MinValue, "UInt64::MinValue" );
   CreateDecimal( UInt64::MaxValue, "UInt64::MaxValue" );
   CreateDecimal( Int64::MaxValue, "Int64::MaxValue" );
   CreateDecimal( 999999999999999999, "999999999999999999" );
   CreateDecimal( 0x2000000000000000, "0x2000000000000000" );
   CreateDecimal( 0xE000000000000000, "0xE000000000000000" );
}

/*
This example of the Decimal( unsigned __int64 ) constructor
generates the following output.

Constructor                                       Value
-----------                                       -----
Decimal( UInt64::MinValue )                           0
Decimal( UInt64::MaxValue )        18446744073709551615
Decimal( Int64::MaxValue )          9223372036854775807
Decimal( 999999999999999999 )        999999999999999999
Decimal( 0x2000000000000000 )       2305843009213693952
Decimal( 0xE000000000000000 )      16140901064495857664
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Decimal 重载
System 命名空间


Decimal 构造函数 (Int32, Int32, Int32, Boolean, Byte)

Decimal 构造函数 (Int32, Int32, Int32, Boolean, Byte)
Decimal 结构

用指定实例构成部分的参数来初始化 Decimal 的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    lo As Integer, _
    mid As Integer, _
    hi As Integer, _
    isNegative As Boolean, _
    scale As Byte _
)
public Decimal(
    int lo,
    int mid,
    int hi,
    bool isNegative,
    byte scale
)
public:
Decimal(
    int lo,
    int mid,
    int hi,
    bool isNegative,
    unsigned char scale
)
new :
        lo:int *
        mid:int *
        hi:int *
        isNegative:bool *
        scale:byte -> Decimal

参数

lo
类型： System Int32
96 位整数的低 32 位。
mid
类型： System Int32
96 位整数的中间 32 位。
hi
类型： System Int32
96 位整数的高 32 位。
isNegative
类型： System Boolean
数字的符号；1 为负，0 为正。
scale
类型： System Byte
10 的指数（0 到 28 之间）。
异常 | 条件
ArgumentOutOfRangeException | scale 大于 28。

Decimal 数字的二进制表示由 1 位符号、一个 96 位的整数以及一个比例因子组成，比例因子用以分隔该整数以指定它的哪一部分为小数部分。比例因子隐式地定为数字 10 的幂，指数范围从 0 到 28。 Decimal 数字的二进制表示由 1 位符号、一个 96 位的整数以及一个比例因子组成，比例因子用以分隔该整数以指定它的哪一部分为小数部分。比例因子隐式地定为数字 10 的幂，指数范围从 0 到 28。

下面的代码示例使用构造函数重载创建几个 Decimal 数字，该重载用三个 Int32 值字、一个 Boolean 符号和一个 Byte 比例因子初始化 Decimal 结构。

' Example of the Decimal( Integer, Integer, Integer, Boolean, Byte )
' constructor.
Imports System
Imports Microsoft.VisualBasic

Module DecimalCtorIIIBByDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Create a Decimal object and display its value.
    Sub CreateDecimal( low As Integer, mid As Integer, _
        high As Integer, isNeg As Boolean, scale as Byte )

        ' Format the constructor for display.
        Dim ctor As String = String.Format( _
            "Decimal( {0}, {1}, {2}, {3}, {4} )", _
            low, mid, high, isNeg, scale )
        Dim valOrExc As String

        ' Construct the Decimal value.
        Try
            Dim decimalNum As New Decimal( _
                low, mid, high, isNeg, scale )

            ' Format and save the Decimal value.
            valOrExc = decimalNum.ToString( )

        ' Save the exception type if an exception was thrown.
        Catch ex As Exception
            valOrExc =  GetExceptionType( ex )
        End Try

        ' Display the constructor and Decimal value or exception.
        Dim ctorLen = 76 - valOrExc.Length
        If ctorLen > ctor.Length Then

            ' Display the data on one line if it will fit.
            Console.WriteLine( "{0}{1}", ctor.PadRight( ctorLen ), _
                valOrExc )

        ' Otherwise, display the data on two lines.
        Else
            Console.WriteLine( "{0}", ctor )
            Console.WriteLine( "{0,76}", valOrExc )
        End If
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the Decimal( Integer, Integer, " & _
            "Integer, Boolean, Byte ) " & vbCrLf & "constructor " & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-38}{1,38}", "Constructor", _
            "Value or Exception" )
        Console.WriteLine( "{0,-38}{1,38}", "-----------", _
            "------------------" )

        ' Construct Decimal objects from the component fields.
        CreateDecimal( 0, 0, 0, False, 0 )
        CreateDecimal( 0, 0, 0, False, 27 )
        CreateDecimal( 0, 0, 0, True, 0 )
        CreateDecimal( 1000000000, 0, 0, False, 0 )
        CreateDecimal( 0, 1000000000, 0, False, 0 )
        CreateDecimal( 0, 0, 1000000000, False, 0 )
        CreateDecimal( 1000000000, 1000000000, 1000000000, False, 0 )
        CreateDecimal( -1, -1, -1, False, 0 )
        CreateDecimal( -1, -1, -1, True, 0 )
        CreateDecimal( -1, -1, -1, False, 15 )
        CreateDecimal( -1, -1, -1, False, 28 )
        CreateDecimal( -1, -1, -1, False, 29 )
        CreateDecimal( Integer.MaxValue, 0, 0, False, 18 )
        CreateDecimal( Integer.MaxValue, 0, 0, False, 28 )
        CreateDecimal( Integer.MaxValue, 0, 0, True, 28 )
    End Sub
End Module

' This example of the Decimal( Integer, Integer, Integer, Boolean, Byte )
' constructor generates the following output.
'
' Constructor                                               Value or Exception
' -----------                                               ------------------
' Decimal( 0, 0, 0, False, 0 )                                               0
' Decimal( 0, 0, 0, False, 27 )                                              0
' Decimal( 0, 0, 0, True, 0 )                                                0
' Decimal( 1000000000, 0, 0, False, 0 )                             1000000000
' Decimal( 0, 1000000000, 0, False, 0 )                    4294967296000000000
' Decimal( 0, 0, 1000000000, False, 0 )          18446744073709551616000000000
' Decimal( 1000000000, 1000000000, 1000000000, False, 0 )
'                                                18446744078004518913000000000
' Decimal( -1, -1, -1, False, 0 )                79228162514264337593543950335
' Decimal( -1, -1, -1, True, 0 )                -79228162514264337593543950335
' Decimal( -1, -1, -1, False, 15 )              79228162514264.337593543950335
' Decimal( -1, -1, -1, False, 28 )              7.9228162514264337593543950335
' Decimal( -1, -1, -1, False, 29 )                 ArgumentOutOfRangeException
' Decimal( 2147483647, 0, 0, False, 18 )                  0.000000002147483647
' Decimal( 2147483647, 0, 0, False, 28 )        0.0000000000000000002147483647
' Decimal( 2147483647, 0, 0, True, 28 )        -0.0000000000000000002147483647

// Example of the decimal( int, int, int, bool, byte ) constructor.
using System;

class DecimalCtorIIIBByDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Create a decimal object and display its value.
    public static void CreateDecimal( int low, int mid, int high,
        bool isNeg, byte scale )
    {
        // Format the constructor for display.
        string ctor = String.Format(
            "decimal( {0}, {1}, {2}, {3}, {4} )",
            low, mid, high, isNeg, scale );
        string valOrExc;

        try
        {
            // Construct the decimal value.
            decimal decimalNum = new decimal(
                low, mid, high, isNeg, scale );

            // Format and save the decimal value.
            valOrExc = decimalNum.ToString( );
        }
        catch( Exception ex )
        {
            // Save the exception type if an exception was thrown.
            valOrExc = GetExceptionType( ex );
        }

        // Display the constructor and decimal value or exception.
        int ctorLen = 76 - valOrExc.Length;

        // Display the data on one line if it will fit.
        if ( ctorLen > ctor.Length )
            Console.WriteLine( "{0}{1}", ctor.PadRight( ctorLen ),
                valOrExc );

        // Otherwise, display the data on two lines.
        else
        {
            Console.WriteLine( "{0}", ctor );
            Console.WriteLine( "{0,76}", valOrExc );
        }
    }

    public static void Main( )
    {

        Console.WriteLine( "This example of the decimal( int, int, " +
            "int, bool, byte ) \nconstructor " +
            "generates the following output.\n" );
        Console.WriteLine( "{0,-38}{1,38}", "Constructor",
            "Value or Exception" );
        Console.WriteLine( "{0,-38}{1,38}", "-----------",
            "------------------" );

        // Construct decimal objects from the component fields.
        CreateDecimal( 0, 0, 0, false, 0 );
        CreateDecimal( 0, 0, 0, false, 27 );
        CreateDecimal( 0, 0, 0, true, 0 );
        CreateDecimal( 1000000000, 0, 0, false, 0 );
        CreateDecimal( 0, 1000000000, 0, false, 0 );
        CreateDecimal( 0, 0, 1000000000, false, 0 );
        CreateDecimal( 1000000000, 1000000000, 1000000000, false, 0 );
        CreateDecimal( -1, -1, -1, false, 0 );
        CreateDecimal( -1, -1, -1, true, 0 );
        CreateDecimal( -1, -1, -1, false, 15 );
        CreateDecimal( -1, -1, -1, false, 28 );
        CreateDecimal( -1, -1, -1, false, 29 );
        CreateDecimal( int.MaxValue, 0, 0, false, 18 );
        CreateDecimal( int.MaxValue, 0, 0, false, 28 );
        CreateDecimal( int.MaxValue, 0, 0, true, 28 );
    }
}

/*
This example of the decimal( int, int, int, bool, byte )
constructor generates the following output.

Constructor                                               Value or Exception
-----------                                               ------------------
decimal( 0, 0, 0, False, 0 )                                               0
decimal( 0, 0, 0, False, 27 )                                              0
decimal( 0, 0, 0, True, 0 )                                                0
decimal( 1000000000, 0, 0, False, 0 )                             1000000000
decimal( 0, 1000000000, 0, False, 0 )                    4294967296000000000
decimal( 0, 0, 1000000000, False, 0 )          18446744073709551616000000000
decimal( 1000000000, 1000000000, 1000000000, False, 0 )
                                               18446744078004518913000000000
decimal( -1, -1, -1, False, 0 )                79228162514264337593543950335
decimal( -1, -1, -1, True, 0 )                -79228162514264337593543950335
decimal( -1, -1, -1, False, 15 )              79228162514264.337593543950335
decimal( -1, -1, -1, False, 28 )              7.9228162514264337593543950335
decimal( -1, -1, -1, False, 29 )                 ArgumentOutOfRangeException
decimal( 2147483647, 0, 0, False, 18 )                  0.000000002147483647
decimal( 2147483647, 0, 0, False, 28 )        0.0000000000000000002147483647
decimal( 2147483647, 0, 0, True, 28 )        -0.0000000000000000002147483647
*/

// Example of the Decimal( int, int, int, bool, unsigned char )
// constructor.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Create a Decimal object and display its value.
void CreateDecimal( int low, int mid, int high, bool isNeg, unsigned char scale )
{

   // Format the constructor for display.
   array<Object^>^boxedParams = gcnew array<Object^>(5);
   boxedParams[ 0 ] = low;
   boxedParams[ 1 ] = mid;
   boxedParams[ 2 ] = high;
   boxedParams[ 3 ] = isNeg;
   boxedParams[ 4 ] = scale;
   String^ ctor = String::Format( "Decimal( {0}, {1}, {2}, {3}, {4} )", boxedParams );
   String^ valOrExc;
   try
   {

      // Construct the Decimal value.
      Decimal decimalNum = Decimal(low,mid,high,isNeg,scale);

      // Format and save the Decimal value.
      valOrExc = decimalNum.ToString();
   }
   catch ( Exception^ ex )
   {

      // Save the exception type if an exception was thrown.
      valOrExc = GetExceptionType( ex );
   }

   // Display the constructor and Decimal value or exception.
   int ctorLen = 76 - valOrExc->Length;

   // Display the data on one line if it will fit.
   if ( ctorLen > ctor->Length )
      Console::WriteLine( "{0}{1}", ctor->PadRight( ctorLen ), valOrExc );
   // Otherwise, display the data on two lines.
   else
   {
      Console::WriteLine( "{0}", ctor );
      Console::WriteLine( "{0,76}", valOrExc );
   }
}

int main()
{
   Console::WriteLine( "This example of the Decimal( int, int, "
   "int, bool, unsigned char ) \nconstructor "
   "generates the following output.\n" );
   Console::WriteLine( "{0,-38}{1,38}", "Constructor", "Value or Exception" );
   Console::WriteLine( "{0,-38}{1,38}", "-----------", "------------------" );

   // Construct Decimal objects from double values.
   CreateDecimal( 0, 0, 0, false, 0 );
   CreateDecimal( 0, 0, 0, false, 27 );
   CreateDecimal( 0, 0, 0, true, 0 );
   CreateDecimal( 1000000000, 0, 0, false, 0 );
   CreateDecimal( 0, 1000000000, 0, false, 0 );
   CreateDecimal( 0, 0, 1000000000, false, 0 );
   CreateDecimal( 1000000000, 1000000000, 1000000000, false, 0 );
   CreateDecimal(  -1, -1, -1, false, 0 );
   CreateDecimal(  -1, -1, -1, true, 0 );
   CreateDecimal(  -1, -1, -1, false, 15 );
   CreateDecimal(  -1, -1, -1, false, 28 );
   CreateDecimal(  -1, -1, -1, false, 29 );
   CreateDecimal( Int32::MaxValue, 0, 0, false, 18 );
   CreateDecimal( Int32::MaxValue, 0, 0, false, 28 );
   CreateDecimal( Int32::MaxValue, 0, 0, true, 28 );
}

/*
This example of the Decimal( int, int, int, bool, unsigned char )
constructor generates the following output.

Constructor                                               Value or Exception
-----------                                               ------------------
Decimal( 0, 0, 0, False, 0 )                                               0
Decimal( 0, 0, 0, False, 27 )                                              0
Decimal( 0, 0, 0, True, 0 )                                                0
Decimal( 1000000000, 0, 0, False, 0 )                             1000000000
Decimal( 0, 1000000000, 0, False, 0 )                    4294967296000000000
Decimal( 0, 0, 1000000000, False, 0 )          18446744073709551616000000000
Decimal( 1000000000, 1000000000, 1000000000, False, 0 )
                                               18446744078004518913000000000
Decimal( -1, -1, -1, False, 0 )                79228162514264337593543950335
Decimal( -1, -1, -1, True, 0 )                -79228162514264337593543950335
Decimal( -1, -1, -1, False, 15 )              79228162514264.337593543950335
Decimal( -1, -1, -1, False, 28 )              7.9228162514264337593543950335
Decimal( -1, -1, -1, False, 29 )                 ArgumentOutOfRangeException
Decimal( 2147483647, 0, 0, False, 18 )                  0.000000002147483647
Decimal( 2147483647, 0, 0, False, 28 )        0.0000000000000000002147483647
Decimal( 2147483647, 0, 0, True, 28 )        -0.0000000000000000002147483647
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Decimal 重载
System 命名空间


Decimal 字段

Decimal 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

Decimal 类型公开以下成员。

名称 说明
页首

参考

Decimal 结构
System 命名空间


Decimal ..::.MaxValue 字段

Decimal
.
.
::
.
MaxValue 字段
Decimal 结构

表示 Decimal 的最大可能值。该字段是常数且为只读。 表示 Decimal 的最大可能值。该字段是常数且为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly MaxValue As Decimal
public static readonly decimal MaxValue
public:
static initonly Decimal MaxValue
static val MaxValue: decimal

此常数的值为正 79,228,162,514,264,337,593,543,950,335。

下面的代码示例说明如何使用 MaxValue：

Class PiggyBank
    Public ReadOnly Property Capacity() As Decimal
        Get
            Return [Decimal].MaxValue
        End Get
    End Property

    Protected MyFortune As Decimal

    Public Sub AddPenny()
        MyFortune += 0.01D
    End Sub
End Class

    class PiggyBank {
        public decimal Capacity {
            get {
                return Decimal.MaxValue;
            }
        }

        protected decimal MyFortune;

        public void AddPenny() {
            MyFortune += .01m;
        }
    }

   public ref class PiggyBank
   {
   public:
      Decimal Capacity()
      {
         return MyFortune.MaxValue;
      }

      void AddPenny()
      {
         MyFortune = Decimal::Add(MyFortune, (Decimal).01);
      }

   protected:
      Decimal MyFortune;
   };

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Zero
One
MinusOne
MinValue


Decimal ..::.MinusOne 字段

Decimal
.
.
::
.
MinusOne 字段
Decimal 结构

表示数字负一 (-1)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly MinusOne As Decimal
public static readonly decimal MinusOne
public:
static initonly Decimal MinusOne
static val MinusOne: decimal

下面的代码示例阐释了如何使用 MinusOne 字段。

' Example of the Decimal fields.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFieldsDemo

    Sub Main( )

        Const numberFmt As String = "{0,-25}{1,45:N0}"
        Const exprFmt As String = "{0,-55}{1,15}"

        Console.WriteLine( _
            "This example of the fields of the Decimal structure" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field or Expression", "Value" )
        Console.WriteLine( numberFmt, "-------------------", "-----" )

        ' Display the values of the Decimal fields.
        Console.WriteLine( numberFmt, "Decimal.MaxValue", _
            Decimal.MaxValue )
        Console.WriteLine( numberFmt, "Decimal.MinValue", _
            Decimal.MinValue )
        Console.WriteLine( numberFmt, "Decimal.MinusOne", _
            Decimal.MinusOne )
        Console.WriteLine( numberFmt, "Decimal.One", _
            Decimal.One )
        Console.WriteLine( numberFmt, "Decimal.Zero", _
            Decimal.Zero )
        Console.WriteLine( )

        ' Display the values of expressions of the Decimal fields.
        Console.WriteLine( exprFmt, _
            "( Decimal.MinusOne + Decimal.One ) = Decimal.Zero", _
            ( Decimal.MinusOne + Decimal.One ) = Decimal.Zero )
        Console.WriteLine( exprFmt, _
            "Decimal.MaxValue + Decimal.MinValue", _
            Decimal.MaxValue + Decimal.MinValue )
        Console.WriteLine( exprFmt, _
            "Decimal.MinValue / Decimal.MaxValue", _
            Decimal.MinValue/Decimal.MaxValue )
        Console.WriteLine( "{0,-40}{1,30}", _
            "100000000000000D / Decimal.MaxValue", _
            100000000000000D / Decimal.MaxValue )
    End Sub
End Module

' This example of the fields of the Decimal structure
' generates the following output.
'
' Field or Expression                                              Value
' -------------------                                              -----
' Decimal.MaxValue                79,228,162,514,264,337,593,543,950,335
' Decimal.MinValue               -79,228,162,514,264,337,593,543,950,335
' Decimal.MinusOne                                                    -1
' Decimal.One                                                          1
' Decimal.Zero                                                         0
'
' ( Decimal.MinusOne + Decimal.One ) = Decimal.Zero                 True
' Decimal.MaxValue + Decimal.MinValue                                  0
' Decimal.MinValue / Decimal.MaxValue                                 -1
' 100000000000000D / Decimal.MaxValue     0.0000000000000012621774483536

// Example of the Decimal fields.
using System;

class DecimalFieldsDemo
{
    public static void Main( )
    {
        const string numberFmt = "{0,-25}{1,45:N0}";
        const string exprFmt = "{0,-55}{1,15}";

        Console.WriteLine(
            "This example of the fields of the Decimal structure " +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field or Expression", "Value" );
        Console.WriteLine( numberFmt, "-------------------", "-----" );

        // Display the values of the Decimal fields.
        Console.WriteLine( numberFmt, "Decimal.MaxValue",
            Decimal.MaxValue );
        Console.WriteLine( numberFmt, "Decimal.MinValue",
            Decimal.MinValue );
        Console.WriteLine( numberFmt, "Decimal.MinusOne",
            Decimal.MinusOne );
        Console.WriteLine( numberFmt, "Decimal.One", Decimal.One );
        Console.WriteLine( numberFmt, "Decimal.Zero", Decimal.Zero );
        Console.WriteLine( );

        // Display the values of expressions of the Decimal fields.
        Console.WriteLine( exprFmt,
            "( Decimal.MinusOne + Decimal.One ) == Decimal.Zero",
            (Decimal.MinusOne + Decimal.One ) == Decimal.Zero );
        Console.WriteLine( exprFmt,
            "Decimal.MaxValue + Decimal.MinValue",
            Decimal.MaxValue + Decimal.MinValue );
        Console.WriteLine( exprFmt,
            "Decimal.MinValue / Decimal.MaxValue",
            Decimal.MinValue / Decimal.MaxValue );
        Console.WriteLine( "{0,-40}{1,30}",
            "100000000000000M / Decimal.MaxValue",
            100000000000000M / Decimal.MaxValue );
    }
}

/*
This example of the fields of the Decimal structure
generates the following output.

Field or Expression                                              Value
-------------------                                              -----
Decimal.MaxValue                79,228,162,514,264,337,593,543,950,335
Decimal.MinValue               -79,228,162,514,264,337,593,543,950,335
Decimal.MinusOne                                                    -1
Decimal.One                                                          1
Decimal.Zero                                                         0

( Decimal.MinusOne + Decimal.One ) == Decimal.Zero                True
Decimal.MaxValue + Decimal.MinValue                                  0
Decimal.MinValue / Decimal.MaxValue                                 -1
100000000000000M / Decimal.MaxValue     0.0000000000000012621774483536
*/

// Example of the Decimal fields.
using namespace System;
int main()
{
   String^ numberFmt = "{0,-25}{1,45:N0}";
   String^ exprFmt = "{0,-55}{1,15}";
   Console::WriteLine( "This example of the fields of the Decimal structure "
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field or Expression", "Value" );
   Console::WriteLine( numberFmt, "-------------------", "-----" );

   // Display the values of the Decimal fields.
   Console::WriteLine( numberFmt, "Decimal::MaxValue", Decimal::MaxValue );
   Console::WriteLine( numberFmt, "Decimal::MinValue", Decimal::MinValue );
   Console::WriteLine( numberFmt, "Decimal::MinusOne", Decimal::MinusOne );
   Console::WriteLine( numberFmt, "Decimal::One", Decimal::One );
   Console::WriteLine( numberFmt, "Decimal::Zero", Decimal::Zero );
   Console::WriteLine();

   // Display the values of expressions of the Decimal fields.
   Console::WriteLine( exprFmt, "( Decimal::MinusOne + Decimal::One ) == Decimal::Zero", (Decimal::MinusOne + Decimal::One) == Decimal::Zero );
   Console::WriteLine( exprFmt, "Decimal::MaxValue + Decimal::MinValue", Decimal::MaxValue + Decimal::MinValue );
   Console::WriteLine( exprFmt, "Decimal::MinValue / Decimal::MaxValue", Decimal::MinValue / Decimal::MaxValue );
   Console::WriteLine( "{0,-40}{1,30}", "100000000000000M / Decimal::MaxValue", Convert::ToDecimal( 100000000000000 ) / Decimal::MaxValue );
}

/*
This example of the fields of the Decimal structure
generates the following output.

Field or Expression                                              Value
-------------------                                              -----
Decimal::MaxValue               79,228,162,514,264,337,593,543,950,335
Decimal::MinValue              -79,228,162,514,264,337,593,543,950,335
Decimal::MinusOne                                                   -1
Decimal::One                                                         1
Decimal::Zero                                                        0

( Decimal::MinusOne + Decimal::One ) == Decimal::Zero             True
Decimal::MaxValue + Decimal::MinValue                                0
Decimal::MinValue / Decimal::MaxValue                               -1
100000000000000M / Decimal::MaxValue    0.0000000000000012621774483536
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Zero
One
MaxValue
MinValue


Decimal ..::.MinValue 字段

Decimal
.
.
::
.
MinValue 字段
Decimal 结构

表示 Decimal 的最小可能值。该字段是常数且为只读。 表示 Decimal 的最小可能值。该字段是常数且为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly MinValue As Decimal
public static readonly decimal MinValue
public:
static initonly Decimal MinValue
static val MinValue: decimal

此常数的值为负 79,228,162,514,264,337,593,543,950,335。

下面的代码示例阐释了如何使用 MinValue 字段。

' Example of the Decimal fields.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFieldsDemo

    Sub Main( )

        Const numberFmt As String = "{0,-25}{1,45:N0}"
        Const exprFmt As String = "{0,-55}{1,15}"

        Console.WriteLine( _
            "This example of the fields of the Decimal structure" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field or Expression", "Value" )
        Console.WriteLine( numberFmt, "-------------------", "-----" )

        ' Display the values of the Decimal fields.
        Console.WriteLine( numberFmt, "Decimal.MaxValue", _
            Decimal.MaxValue )
        Console.WriteLine( numberFmt, "Decimal.MinValue", _
            Decimal.MinValue )
        Console.WriteLine( numberFmt, "Decimal.MinusOne", _
            Decimal.MinusOne )
        Console.WriteLine( numberFmt, "Decimal.One", _
            Decimal.One )
        Console.WriteLine( numberFmt, "Decimal.Zero", _
            Decimal.Zero )
        Console.WriteLine( )

        ' Display the values of expressions of the Decimal fields.
        Console.WriteLine( exprFmt, _
            "( Decimal.MinusOne + Decimal.One ) = Decimal.Zero", _
            ( Decimal.MinusOne + Decimal.One ) = Decimal.Zero )
        Console.WriteLine( exprFmt, _
            "Decimal.MaxValue + Decimal.MinValue", _
            Decimal.MaxValue + Decimal.MinValue )
        Console.WriteLine( exprFmt, _
            "Decimal.MinValue / Decimal.MaxValue", _
            Decimal.MinValue/Decimal.MaxValue )
        Console.WriteLine( "{0,-40}{1,30}", _
            "100000000000000D / Decimal.MaxValue", _
            100000000000000D / Decimal.MaxValue )
    End Sub
End Module

' This example of the fields of the Decimal structure
' generates the following output.
'
' Field or Expression                                              Value
' -------------------                                              -----
' Decimal.MaxValue                79,228,162,514,264,337,593,543,950,335
' Decimal.MinValue               -79,228,162,514,264,337,593,543,950,335
' Decimal.MinusOne                                                    -1
' Decimal.One                                                          1
' Decimal.Zero                                                         0
'
' ( Decimal.MinusOne + Decimal.One ) = Decimal.Zero                 True
' Decimal.MaxValue + Decimal.MinValue                                  0
' Decimal.MinValue / Decimal.MaxValue                                 -1
' 100000000000000D / Decimal.MaxValue     0.0000000000000012621774483536

// Example of the Decimal fields.
using System;

class DecimalFieldsDemo
{
    public static void Main( )
    {
        const string numberFmt = "{0,-25}{1,45:N0}";
        const string exprFmt = "{0,-55}{1,15}";

        Console.WriteLine(
            "This example of the fields of the Decimal structure " +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field or Expression", "Value" );
        Console.WriteLine( numberFmt, "-------------------", "-----" );

        // Display the values of the Decimal fields.
        Console.WriteLine( numberFmt, "Decimal.MaxValue",
            Decimal.MaxValue );
        Console.WriteLine( numberFmt, "Decimal.MinValue",
            Decimal.MinValue );
        Console.WriteLine( numberFmt, "Decimal.MinusOne",
            Decimal.MinusOne );
        Console.WriteLine( numberFmt, "Decimal.One", Decimal.One );
        Console.WriteLine( numberFmt, "Decimal.Zero", Decimal.Zero );
        Console.WriteLine( );

        // Display the values of expressions of the Decimal fields.
        Console.WriteLine( exprFmt,
            "( Decimal.MinusOne + Decimal.One ) == Decimal.Zero",
            (Decimal.MinusOne + Decimal.One ) == Decimal.Zero );
        Console.WriteLine( exprFmt,
            "Decimal.MaxValue + Decimal.MinValue",
            Decimal.MaxValue + Decimal.MinValue );
        Console.WriteLine( exprFmt,
            "Decimal.MinValue / Decimal.MaxValue",
            Decimal.MinValue / Decimal.MaxValue );
        Console.WriteLine( "{0,-40}{1,30}",
            "100000000000000M / Decimal.MaxValue",
            100000000000000M / Decimal.MaxValue );
    }
}

/*
This example of the fields of the Decimal structure
generates the following output.

Field or Expression                                              Value
-------------------                                              -----
Decimal.MaxValue                79,228,162,514,264,337,593,543,950,335
Decimal.MinValue               -79,228,162,514,264,337,593,543,950,335
Decimal.MinusOne                                                    -1
Decimal.One                                                          1
Decimal.Zero                                                         0

( Decimal.MinusOne + Decimal.One ) == Decimal.Zero                True
Decimal.MaxValue + Decimal.MinValue                                  0
Decimal.MinValue / Decimal.MaxValue                                 -1
100000000000000M / Decimal.MaxValue     0.0000000000000012621774483536
*/

// Example of the Decimal fields.
using namespace System;
int main()
{
   String^ numberFmt = "{0,-25}{1,45:N0}";
   String^ exprFmt = "{0,-55}{1,15}";
   Console::WriteLine( "This example of the fields of the Decimal structure "
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field or Expression", "Value" );
   Console::WriteLine( numberFmt, "-------------------", "-----" );

   // Display the values of the Decimal fields.
   Console::WriteLine( numberFmt, "Decimal::MaxValue", Decimal::MaxValue );
   Console::WriteLine( numberFmt, "Decimal::MinValue", Decimal::MinValue );
   Console::WriteLine( numberFmt, "Decimal::MinusOne", Decimal::MinusOne );
   Console::WriteLine( numberFmt, "Decimal::One", Decimal::One );
   Console::WriteLine( numberFmt, "Decimal::Zero", Decimal::Zero );
   Console::WriteLine();

   // Display the values of expressions of the Decimal fields.
   Console::WriteLine( exprFmt, "( Decimal::MinusOne + Decimal::One ) == Decimal::Zero", (Decimal::MinusOne + Decimal::One) == Decimal::Zero );
   Console::WriteLine( exprFmt, "Decimal::MaxValue + Decimal::MinValue", Decimal::MaxValue + Decimal::MinValue );
   Console::WriteLine( exprFmt, "Decimal::MinValue / Decimal::MaxValue", Decimal::MinValue / Decimal::MaxValue );
   Console::WriteLine( "{0,-40}{1,30}", "100000000000000M / Decimal::MaxValue", Convert::ToDecimal( 100000000000000 ) / Decimal::MaxValue );
}

/*
This example of the fields of the Decimal structure
generates the following output.

Field or Expression                                              Value
-------------------                                              -----
Decimal::MaxValue               79,228,162,514,264,337,593,543,950,335
Decimal::MinValue              -79,228,162,514,264,337,593,543,950,335
Decimal::MinusOne                                                   -1
Decimal::One                                                         1
Decimal::Zero                                                        0

( Decimal::MinusOne + Decimal::One ) == Decimal::Zero             True
Decimal::MaxValue + Decimal::MinValue                                0
Decimal::MinValue / Decimal::MaxValue                               -1
100000000000000M / Decimal::MaxValue    0.0000000000000012621774483536
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Zero
One
MinusOne
MaxValue


Decimal ..::.One 字段

Decimal
.
.
::
.
One 字段
Decimal 结构

表示数字一 (1)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly One As Decimal
public static readonly decimal One
public:
static initonly Decimal One
static val One: decimal

下面的代码示例阐释了如何使用 One 字段。

' Example of the Decimal fields.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFieldsDemo

    Sub Main( )

        Const numberFmt As String = "{0,-25}{1,45:N0}"
        Const exprFmt As String = "{0,-55}{1,15}"

        Console.WriteLine( _
            "This example of the fields of the Decimal structure" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field or Expression", "Value" )
        Console.WriteLine( numberFmt, "-------------------", "-----" )

        ' Display the values of the Decimal fields.
        Console.WriteLine( numberFmt, "Decimal.MaxValue", _
            Decimal.MaxValue )
        Console.WriteLine( numberFmt, "Decimal.MinValue", _
            Decimal.MinValue )
        Console.WriteLine( numberFmt, "Decimal.MinusOne", _
            Decimal.MinusOne )
        Console.WriteLine( numberFmt, "Decimal.One", _
            Decimal.One )
        Console.WriteLine( numberFmt, "Decimal.Zero", _
            Decimal.Zero )
        Console.WriteLine( )

        ' Display the values of expressions of the Decimal fields.
        Console.WriteLine( exprFmt, _
            "( Decimal.MinusOne + Decimal.One ) = Decimal.Zero", _
            ( Decimal.MinusOne + Decimal.One ) = Decimal.Zero )
        Console.WriteLine( exprFmt, _
            "Decimal.MaxValue + Decimal.MinValue", _
            Decimal.MaxValue + Decimal.MinValue )
        Console.WriteLine( exprFmt, _
            "Decimal.MinValue / Decimal.MaxValue", _
            Decimal.MinValue/Decimal.MaxValue )
        Console.WriteLine( "{0,-40}{1,30}", _
            "100000000000000D / Decimal.MaxValue", _
            100000000000000D / Decimal.MaxValue )
    End Sub
End Module

' This example of the fields of the Decimal structure
' generates the following output.
'
' Field or Expression                                              Value
' -------------------                                              -----
' Decimal.MaxValue                79,228,162,514,264,337,593,543,950,335
' Decimal.MinValue               -79,228,162,514,264,337,593,543,950,335
' Decimal.MinusOne                                                    -1
' Decimal.One                                                          1
' Decimal.Zero                                                         0
'
' ( Decimal.MinusOne + Decimal.One ) = Decimal.Zero                 True
' Decimal.MaxValue + Decimal.MinValue                                  0
' Decimal.MinValue / Decimal.MaxValue                                 -1
' 100000000000000D / Decimal.MaxValue     0.0000000000000012621774483536

// Example of the Decimal fields.
using System;

class DecimalFieldsDemo
{
    public static void Main( )
    {
        const string numberFmt = "{0,-25}{1,45:N0}";
        const string exprFmt = "{0,-55}{1,15}";

        Console.WriteLine(
            "This example of the fields of the Decimal structure " +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field or Expression", "Value" );
        Console.WriteLine( numberFmt, "-------------------", "-----" );

        // Display the values of the Decimal fields.
        Console.WriteLine( numberFmt, "Decimal.MaxValue",
            Decimal.MaxValue );
        Console.WriteLine( numberFmt, "Decimal.MinValue",
            Decimal.MinValue );
        Console.WriteLine( numberFmt, "Decimal.MinusOne",
            Decimal.MinusOne );
        Console.WriteLine( numberFmt, "Decimal.One", Decimal.One );
        Console.WriteLine( numberFmt, "Decimal.Zero", Decimal.Zero );
        Console.WriteLine( );

        // Display the values of expressions of the Decimal fields.
        Console.WriteLine( exprFmt,
            "( Decimal.MinusOne + Decimal.One ) == Decimal.Zero",
            (Decimal.MinusOne + Decimal.One ) == Decimal.Zero );
        Console.WriteLine( exprFmt,
            "Decimal.MaxValue + Decimal.MinValue",
            Decimal.MaxValue + Decimal.MinValue );
        Console.WriteLine( exprFmt,
            "Decimal.MinValue / Decimal.MaxValue",
            Decimal.MinValue / Decimal.MaxValue );
        Console.WriteLine( "{0,-40}{1,30}",
            "100000000000000M / Decimal.MaxValue",
            100000000000000M / Decimal.MaxValue );
    }
}

/*
This example of the fields of the Decimal structure
generates the following output.

Field or Expression                                              Value
-------------------                                              -----
Decimal.MaxValue                79,228,162,514,264,337,593,543,950,335
Decimal.MinValue               -79,228,162,514,264,337,593,543,950,335
Decimal.MinusOne                                                    -1
Decimal.One                                                          1
Decimal.Zero                                                         0

( Decimal.MinusOne + Decimal.One ) == Decimal.Zero                True
Decimal.MaxValue + Decimal.MinValue                                  0
Decimal.MinValue / Decimal.MaxValue                                 -1
100000000000000M / Decimal.MaxValue     0.0000000000000012621774483536
*/

// Example of the Decimal fields.
using namespace System;
int main()
{
   String^ numberFmt = "{0,-25}{1,45:N0}";
   String^ exprFmt = "{0,-55}{1,15}";
   Console::WriteLine( "This example of the fields of the Decimal structure "
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field or Expression", "Value" );
   Console::WriteLine( numberFmt, "-------------------", "-----" );

   // Display the values of the Decimal fields.
   Console::WriteLine( numberFmt, "Decimal::MaxValue", Decimal::MaxValue );
   Console::WriteLine( numberFmt, "Decimal::MinValue", Decimal::MinValue );
   Console::WriteLine( numberFmt, "Decimal::MinusOne", Decimal::MinusOne );
   Console::WriteLine( numberFmt, "Decimal::One", Decimal::One );
   Console::WriteLine( numberFmt, "Decimal::Zero", Decimal::Zero );
   Console::WriteLine();

   // Display the values of expressions of the Decimal fields.
   Console::WriteLine( exprFmt, "( Decimal::MinusOne + Decimal::One ) == Decimal::Zero", (Decimal::MinusOne + Decimal::One) == Decimal::Zero );
   Console::WriteLine( exprFmt, "Decimal::MaxValue + Decimal::MinValue", Decimal::MaxValue + Decimal::MinValue );
   Console::WriteLine( exprFmt, "Decimal::MinValue / Decimal::MaxValue", Decimal::MinValue / Decimal::MaxValue );
   Console::WriteLine( "{0,-40}{1,30}", "100000000000000M / Decimal::MaxValue", Convert::ToDecimal( 100000000000000 ) / Decimal::MaxValue );
}

/*
This example of the fields of the Decimal structure
generates the following output.

Field or Expression                                              Value
-------------------                                              -----
Decimal::MaxValue               79,228,162,514,264,337,593,543,950,335
Decimal::MinValue              -79,228,162,514,264,337,593,543,950,335
Decimal::MinusOne                                                   -1
Decimal::One                                                         1
Decimal::Zero                                                        0

( Decimal::MinusOne + Decimal::One ) == Decimal::Zero             True
Decimal::MaxValue + Decimal::MinValue                                0
Decimal::MinValue / Decimal::MaxValue                               -1
100000000000000M / Decimal::MaxValue    0.0000000000000012621774483536
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Zero
MinusOne
MaxValue
MinValue


Decimal ..::.Zero 字段

Decimal
.
.
::
.
Zero 字段
Decimal 结构

表示数字零 (0)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Zero As Decimal
public static readonly decimal Zero
public:
static initonly Decimal Zero
static val Zero: decimal

下面的代码示例阐释了如何使用 Zero 字段。

' Example of the Decimal fields.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFieldsDemo

    Sub Main( )

        Const numberFmt As String = "{0,-25}{1,45:N0}"
        Const exprFmt As String = "{0,-55}{1,15}"

        Console.WriteLine( _
            "This example of the fields of the Decimal structure" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field or Expression", "Value" )
        Console.WriteLine( numberFmt, "-------------------", "-----" )

        ' Display the values of the Decimal fields.
        Console.WriteLine( numberFmt, "Decimal.MaxValue", _
            Decimal.MaxValue )
        Console.WriteLine( numberFmt, "Decimal.MinValue", _
            Decimal.MinValue )
        Console.WriteLine( numberFmt, "Decimal.MinusOne", _
            Decimal.MinusOne )
        Console.WriteLine( numberFmt, "Decimal.One", _
            Decimal.One )
        Console.WriteLine( numberFmt, "Decimal.Zero", _
            Decimal.Zero )
        Console.WriteLine( )

        ' Display the values of expressions of the Decimal fields.
        Console.WriteLine( exprFmt, _
            "( Decimal.MinusOne + Decimal.One ) = Decimal.Zero", _
            ( Decimal.MinusOne + Decimal.One ) = Decimal.Zero )
        Console.WriteLine( exprFmt, _
            "Decimal.MaxValue + Decimal.MinValue", _
            Decimal.MaxValue + Decimal.MinValue )
        Console.WriteLine( exprFmt, _
            "Decimal.MinValue / Decimal.MaxValue", _
            Decimal.MinValue/Decimal.MaxValue )
        Console.WriteLine( "{0,-40}{1,30}", _
            "100000000000000D / Decimal.MaxValue", _
            100000000000000D / Decimal.MaxValue )
    End Sub
End Module

' This example of the fields of the Decimal structure
' generates the following output.
'
' Field or Expression                                              Value
' -------------------                                              -----
' Decimal.MaxValue                79,228,162,514,264,337,593,543,950,335
' Decimal.MinValue               -79,228,162,514,264,337,593,543,950,335
' Decimal.MinusOne                                                    -1
' Decimal.One                                                          1
' Decimal.Zero                                                         0
'
' ( Decimal.MinusOne + Decimal.One ) = Decimal.Zero                 True
' Decimal.MaxValue + Decimal.MinValue                                  0
' Decimal.MinValue / Decimal.MaxValue                                 -1
' 100000000000000D / Decimal.MaxValue     0.0000000000000012621774483536

// Example of the Decimal fields.
using System;

class DecimalFieldsDemo
{
    public static void Main( )
    {
        const string numberFmt = "{0,-25}{1,45:N0}";
        const string exprFmt = "{0,-55}{1,15}";

        Console.WriteLine(
            "This example of the fields of the Decimal structure " +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field or Expression", "Value" );
        Console.WriteLine( numberFmt, "-------------------", "-----" );

        // Display the values of the Decimal fields.
        Console.WriteLine( numberFmt, "Decimal.MaxValue",
            Decimal.MaxValue );
        Console.WriteLine( numberFmt, "Decimal.MinValue",
            Decimal.MinValue );
        Console.WriteLine( numberFmt, "Decimal.MinusOne",
            Decimal.MinusOne );
        Console.WriteLine( numberFmt, "Decimal.One", Decimal.One );
        Console.WriteLine( numberFmt, "Decimal.Zero", Decimal.Zero );
        Console.WriteLine( );

        // Display the values of expressions of the Decimal fields.
        Console.WriteLine( exprFmt,
            "( Decimal.MinusOne + Decimal.One ) == Decimal.Zero",
            (Decimal.MinusOne + Decimal.One ) == Decimal.Zero );
        Console.WriteLine( exprFmt,
            "Decimal.MaxValue + Decimal.MinValue",
            Decimal.MaxValue + Decimal.MinValue );
        Console.WriteLine( exprFmt,
            "Decimal.MinValue / Decimal.MaxValue",
            Decimal.MinValue / Decimal.MaxValue );
        Console.WriteLine( "{0,-40}{1,30}",
            "100000000000000M / Decimal.MaxValue",
            100000000000000M / Decimal.MaxValue );
    }
}

/*
This example of the fields of the Decimal structure
generates the following output.

Field or Expression                                              Value
-------------------                                              -----
Decimal.MaxValue                79,228,162,514,264,337,593,543,950,335
Decimal.MinValue               -79,228,162,514,264,337,593,543,950,335
Decimal.MinusOne                                                    -1
Decimal.One                                                          1
Decimal.Zero                                                         0

( Decimal.MinusOne + Decimal.One ) == Decimal.Zero                True
Decimal.MaxValue + Decimal.MinValue                                  0
Decimal.MinValue / Decimal.MaxValue                                 -1
100000000000000M / Decimal.MaxValue     0.0000000000000012621774483536
*/

// Example of the Decimal fields.
using namespace System;
int main()
{
   String^ numberFmt = "{0,-25}{1,45:N0}";
   String^ exprFmt = "{0,-55}{1,15}";
   Console::WriteLine( "This example of the fields of the Decimal structure "
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field or Expression", "Value" );
   Console::WriteLine( numberFmt, "-------------------", "-----" );

   // Display the values of the Decimal fields.
   Console::WriteLine( numberFmt, "Decimal::MaxValue", Decimal::MaxValue );
   Console::WriteLine( numberFmt, "Decimal::MinValue", Decimal::MinValue );
   Console::WriteLine( numberFmt, "Decimal::MinusOne", Decimal::MinusOne );
   Console::WriteLine( numberFmt, "Decimal::One", Decimal::One );
   Console::WriteLine( numberFmt, "Decimal::Zero", Decimal::Zero );
   Console::WriteLine();

   // Display the values of expressions of the Decimal fields.
   Console::WriteLine( exprFmt, "( Decimal::MinusOne + Decimal::One ) == Decimal::Zero", (Decimal::MinusOne + Decimal::One) == Decimal::Zero );
   Console::WriteLine( exprFmt, "Decimal::MaxValue + Decimal::MinValue", Decimal::MaxValue + Decimal::MinValue );
   Console::WriteLine( exprFmt, "Decimal::MinValue / Decimal::MaxValue", Decimal::MinValue / Decimal::MaxValue );
   Console::WriteLine( "{0,-40}{1,30}", "100000000000000M / Decimal::MaxValue", Convert::ToDecimal( 100000000000000 ) / Decimal::MaxValue );
}

/*
This example of the fields of the Decimal structure
generates the following output.

Field or Expression                                              Value
-------------------                                              -----
Decimal::MaxValue               79,228,162,514,264,337,593,543,950,335
Decimal::MinValue              -79,228,162,514,264,337,593,543,950,335
Decimal::MinusOne                                                   -1
Decimal::One                                                         1
Decimal::Zero                                                        0

( Decimal::MinusOne + Decimal::One ) == Decimal::Zero             True
Decimal::MaxValue + Decimal::MinValue                                0
Decimal::MinValue / Decimal::MaxValue                               -1
100000000000000M / Decimal::MaxValue    0.0000000000000012621774483536
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
One
MinusOne
MaxValue
MinValue


Decimal 方法

Decimal 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

Decimal 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Decimal 结构
System 命名空间


Decimal ..::.Add 方法

Decimal
.
.
::
.
Add 方法
Decimal 结构

两个指定的 Decimal 值相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Add ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal Add(
    decimal d1,
    decimal d2
)
public:
static Decimal Add(
    Decimal d1,
    Decimal d2
)
static member Add :
        d1:decimal *
        d2:decimal -> decimal

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Decimal
Decimal 值，该值是 d1 与 d2 之和。
异常 | 条件
OverflowException | d1 与 d2 之和小于 MinValue 或大于 MaxValue。

下面的代码示例说明如何使用 Add：

Class PiggyBank

    Public Sub AddPenny()
        MyFortune = [Decimal].Add(MyFortune, 0.01D)
    End Sub

    Public Overrides Function ToString() As String
        Return MyFortune.ToString("C") + " in piggy bank"
    End Function

    Protected MyFortune As Decimal
End Class

    class PiggyBank {
        public void AddPenny() {
            MyFortune = Decimal.Add(MyFortune, .01m);
        }

        public override string ToString() {
            return MyFortune.ToString("C")+" in piggy bank";
        }

        protected decimal MyFortune;
    }

   public ref class PiggyBank
   {
   public:
      void AddPenny()
      {
         MyFortune = Decimal::Add( MyFortune, (Decimal).01 );
      }

      virtual System::String^ ToString() override
      {
         return MyFortune.ToString("C")+" in piggy bank";
      }

   protected:
      Decimal MyFortune;
   };
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Subtract
Multiply
Divide


Decimal ..::.Ceiling 方法

Decimal
.
.
::
.
Ceiling 方法
Decimal 结构

返回大于或等于指定的十进制数的最小整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Ceiling ( _
    d As Decimal _
) As Decimal
public static decimal Ceiling(
    decimal d
)
public:
static Decimal Ceiling(
    Decimal d
)
static member Ceiling :
        d:decimal -> decimal

参数

d
类型： System Decimal
一个小数。

返回值

类型： System Decimal
大于或等于 d 参数的最小整数值。请注意，此方法返回 Decimal，而不是整数类型。 大于或等于 d 参数的最小整数值。请注意，此方法返回 Decimal，而不是整数类型。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。

下面的示例使用 Ceiling 方法对一组 Decimal 值进行四舍五入。

Dim values() As Decimal = {12.6d, 12.1d, 9.5d, 8.16d, .1d, -1.1d, -3.9d}
For Each value As Decimal In values
   Console.WriteLine("{0} -> {1}", value, _
                     Decimal.Ceiling(value))
Next
' The example displays the following output:
'       12.6 -> 13
'       12.1 -> 13
'       9.5 -> 10
'       8.16 -> 9
'       0.1 -> 1
'       -1.1 -> -1
'       -3.9 -> -3

decimal[] values = {12.6m, 12.1m, 9.5m, 8.16m, .1m, -1.1m, -3.9m};
foreach (decimal value in values)
   Console.WriteLine("{0} -> {1}", value, Decimal.Ceiling(value));

// The example displays the following output:
//       12.6 -> 13
//       12.1 -> 13
//       9.5 -> 10
//       8.16 -> 9
//       0.1 -> 1
//       -1.1 -> -1
//       -3.9 -> -3

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
System 命名空间
Ceiling


Decimal ..::.Compare 方法

Decimal
.
.
::
.
Compare 方法
Decimal 结构

比较指定的两个 Decimal 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ d1 As Decimal, _ d2 As Decimal _ ) As Integer
public static int Compare( decimal d1, decimal d2 )
public: static int Compare( Decimal d1, Decimal d2 )
static member Compare : d1:decimal * d2:decimal -> int
参数
d1
类型： System Decimal
Decimal
。
d2
类型： System Decimal
Decimal
。
返回值
类型： System Int32
一个有符号数字，指示
d1
和
d2
的相对值。
返回值
含义
小于零
d1
小于
d2
。
零
d1
与
d2
相等。
大于零
d1
大于
d2
。

下面的代码示例使用 Compare 方法，将几个 Decimal 值同一个参考 Decimal 值进行比较。

' Example of the Decimal.Compare and static Decimal.Equals methods.
Imports System
Imports Microsoft.VisualBasic

Module DecCompareEqualsDemo

    Const dataFmt As String = "{0,-45}{1}"

    ' Compare Decimal parameters, and display them with the results.
    Sub CompareDecimals( Left as Decimal, Right as Decimal, _
        RightText as String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, "Decimal.Equals( Left, Right )", _
            Decimal.Equals( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Compare( Left, Right )", _
            Decimal.Compare( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal.Equals( Decimal, " & _
            "Decimal ) and " & vbCrLf & "Decimal.Compare( " & _
            "Decimal, Decimal ) methods generates the " & vbCrLf & _
            "following output. It creates several different " & _
            "Decimal " & vbCrLf & "values and compares them " & _
            "with the following reference value." & vbCrLf )

        ' Create a reference Decimal value.
        Dim Left as New Decimal( 123.456 )

        Console.WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left )

        ' Create Decimal values to compare with the reference.
        CompareDecimals( Left, New Decimal( 1.2345600E+2 ), _
            "Decimal( 1.2345600E+2 )" )
        CompareDecimals( Left, 123.4561D, "123.4561D" )
        CompareDecimals( Left, 123.4559D, "123.4559D" )
        CompareDecimals( Left, 123.456000D, "123.456000D" )
        CompareDecimals( Left, _
            New Decimal( 123456000, 0, 0, false, 6 ), _
            "Decimal( 123456000, 0, 0, false, 6 )" )
    End Sub
End Module

' This example of the Decimal.Equals( Decimal, Decimal ) and
' Decimal.Compare( Decimal, Decimal ) methods generates the
' following output. It creates several different Decimal
' values and compares them with the following reference value.
'
' Left: Decimal( 123.456 )                     123.456
'
' Right: Decimal( 1.2345600E+2 )               123.456
' Decimal.Equals( Left, Right )                True
' Decimal.Compare( Left, Right )               0
'
' Right: 123.4561D                             123.4561
' Decimal.Equals( Left, Right )                False
' Decimal.Compare( Left, Right )               -1
'
' Right: 123.4559D                             123.4559
' Decimal.Equals( Left, Right )                False
' Decimal.Compare( Left, Right )               1
'
' Right: 123.456000D                           123.456
' Decimal.Equals( Left, Right )                True
' Decimal.Compare( Left, Right )               0
'
' Right: Decimal( 123456000, 0, 0, false, 6 )  123.456000
' Decimal.Equals( Left, Right )                True
' Decimal.Compare( Left, Right )               0

// Example of the decimal.Compare and static decimal.Equals methods.
using System;

class DecCompareEqualsDemo
{
    const string dataFmt = "{0,-45}{1}";

    // Compare decimal parameters, and display them with the results.
    public static void CompareDecimals( decimal Left, decimal Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: "+RightText, Right );
        Console.WriteLine( dataFmt, "decimal.Equals( Left, Right )",
            Decimal.Equals( Left, Right ) );
        Console.WriteLine( dataFmt, "decimal.Compare( Left, Right )",
            Decimal.Compare( Left, Right ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the " +
            "decimal.Equals( decimal, decimal ) and \n" +
            "decimal.Compare( decimal, decimal ) methods " +
            "generates the \nfollowing output. It creates several " +
            "different decimal \nvalues and compares them with " +
            "the following reference value.\n" );

        // Create a reference decimal value.
        decimal Left = new decimal( 123.456 );

        Console.WriteLine( dataFmt, "Left: decimal( 123.456 )",
            Left );

        // Create decimal values to compare with the reference.
        CompareDecimals( Left, new decimal( 1.2345600E+2 ),
            "decimal( 1.2345600E+2 )" );
        CompareDecimals( Left, 123.4561M, "123.4561M" );
        CompareDecimals( Left, 123.4559M, "123.4559M" );
        CompareDecimals( Left, 123.456000M, "123.456000M" );
        CompareDecimals( Left,
            new decimal( 123456000, 0, 0, false, 6 ),
            "decimal( 123456000, 0, 0, false, 6 )" );
    }
}

/*
This example of the decimal.Equals( decimal, decimal ) and
decimal.Compare( decimal, decimal ) methods generates the
following output. It creates several different decimal
values and compares them with the following reference value.

Left: decimal( 123.456 )                     123.456

Right: decimal( 1.2345600E+2 )               123.456
decimal.Equals( Left, Right )                True
decimal.Compare( Left, Right )               0

Right: 123.4561M                             123.4561
decimal.Equals( Left, Right )                False
decimal.Compare( Left, Right )               -1

Right: 123.4559M                             123.4559
decimal.Equals( Left, Right )                False
decimal.Compare( Left, Right )               1

Right: 123.456000M                           123.456000
decimal.Equals( Left, Right )                True
decimal.Compare( Left, Right )               0

Right: decimal( 123456000, 0, 0, false, 6 )  123.456000
decimal.Equals( Left, Right )                True
decimal.Compare( Left, Right )               0
*/

// Example of the Decimal::Compare and static Decimal::Equals methods.
using namespace System;
const __wchar_t * protoFmt = L"{0,-45}{1}";

// Compare Decimal parameters, and display them with the results.
void CompareDecimals( Decimal Left, Decimal Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Decimal::Equals( Left, Right )", Decimal::Equals( Left, Right ) );
   Console::WriteLine( dataFmt, "Decimal::Compare( Left, Right )", Decimal::Compare( Left, Right ) );
}

int main()
{
   Console::WriteLine( "This example of the Decimal::Equals( Decimal, Decimal "
   ") and \nDecimal::Compare( Decimal, Decimal ) "
   "methods generates the \nfollowing output. It creates "
   "several different Decimal \nvalues and compares them "
   "with the following reference value.\n" );

   // Create a reference Decimal value.
   Decimal Left = Decimal(123.456);
   Console::WriteLine( gcnew String( protoFmt ), "Left: Decimal( 123.456 )", Left );

   // Create Decimal values to compare with the reference.
   CompareDecimals( Left, Decimal(1.2345600E+2), "Decimal( 1.2345600E+2 )" );
   CompareDecimals( Left, Decimal::Parse( "123.4561" ), "Decimal::Parse( \"123.4561\" )" );
   CompareDecimals( Left, Decimal::Parse( "123.4559" ), "Decimal::Parse( \"123.4559\" )" );
   CompareDecimals( Left, Decimal::Parse( "123.456000" ), "Decimal::Parse( \"123.456000\" )" );
   CompareDecimals( Left, Decimal(123456000,0,0,false,6), "Decimal( 123456000, 0, 0, false, 6 )" );
}

/*
This example of the Decimal::Equals( Decimal, Decimal ) and
Decimal::Compare( Decimal, Decimal ) methods generates the
following output. It creates several different Decimal
values and compares them with the following reference value.

Left: Decimal( 123.456 )                     123.456

Right: Decimal( 1.2345600E+2 )               123.456
Decimal::Equals( Left, Right )               True
Decimal::Compare( Left, Right )              0

Right: Decimal::Parse( "123.4561" )          123.4561
Decimal::Equals( Left, Right )               False
Decimal::Compare( Left, Right )              -1

Right: Decimal::Parse( "123.4559" )          123.4559
Decimal::Equals( Left, Right )               False
Decimal::Compare( Left, Right )              1

Right: Decimal::Parse( "123.456000" )        123.456000
Decimal::Equals( Left, Right )               True
Decimal::Compare( Left, Right )              0

Right: Decimal( 123456000, 0, 0, false, 6 )  123.456000
Decimal::Equals( Left, Right )               True
Decimal::Compare( Left, Right )              0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
CompareTo
Equals


Decimal ..::.CompareTo 方法

Decimal
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

将此实例与指定的对象或 Decimal 进行比较，并返回二者相对值的指示。

名称 说明
页首

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.CompareTo 方法 (Decimal)

Decimal
.
.
::
.
CompareTo 方法 (Decimal)
Decimal 结构

将此实例与指定的 Decimal 对象进行比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Decimal _ ) As Integer
public int CompareTo( decimal value )
public: virtual int CompareTo( Decimal value ) sealed
abstract CompareTo : value:decimal -> int override CompareTo : value:decimal -> int
参数
value
类型： System Decimal
一个
Decimal
对象。
返回值
类型： System Int32
有符号数字，指示此实例和
value
的相对值。
返回值
含义
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Decimal..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和 Int32 参数表示形式的值。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的代码示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
CompareTo 重载
System 命名空间
Compare
Equals


Decimal ..::.CompareTo 方法 (Object)

Decimal
.
.
::
.
CompareTo 方法 (Object)
Decimal 结构

将此实例与指定的 Object 进行比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
Object
或
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
有符号数字，指示此实例和
value
的相对值。
返回值
含义
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 Decimal。

无论 Decimal 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 参数必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是 Decimal 的实例；否则将引发异常。

下面的代码示例使用 CompareTo 方法，将几个 Decimal 和其他对象同一个参考 Decimal 值进行比较。

' Example of the Decimal.CompareTo and Decimal.Equals instance methods.
Imports System
Imports Microsoft.VisualBasic

Module DecCompToEqualsObjDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Compare the Decimal to the Object parameters,
    ' and display the Object parameters with the results.
    Sub CompDecimalToObject( Left as Decimal, Right as Object, _
        RightText as String )

        Console.WriteLine( "{0,-46}{1}", "Object: " & RightText, _
            Right )
        Console.WriteLine( "{0,-46}{1}", "Left.Equals( Object )", _
            Left.Equals( Right ) )
        Console.Write( "{0,-46}", "Left.CompareTo( Object )" )

        ' Catch the exception if CompareTo( ) throws one.
        Try
            Console.WriteLine( "{0}" & vbCrLf, _
                Left.CompareTo( Right ) )
        Catch ex As Exception
            Console.WriteLine( "{0}" & vbCrLf, _
                GetExceptionType( ex ) )
        End Try
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal.Equals( Object ) " & _
            "and " & vbCrLf & "Decimal.CompareTo( Object ) " & _
            "methods generates the " & vbCrLf & _
            "following output. It creates several different " & _
            "Decimal " & vbCrLf & "values and compares them " & _
            "with the following reference value." & vbCrLf )

        ' Create a reference Decimal value.
        Dim Left as New Decimal( 987.654 )

        Console.WriteLine( "{0,-46}{1}" & vbCrLf, _
            "Left: Decimal( 987.654 )", Left )

        ' Create objects to compare with the reference.
        CompDecimalToObject( Left, New Decimal( 9.8765400E+2 ), _
            "Decimal( 9.8765400E+2 )" )
        CompDecimalToObject( Left, 987.6541D, "987.6541D" )
        CompDecimalToObject( Left, 987.6539D, "987.6539D" )
        CompDecimalToObject( Left, _
            New Decimal( 987654000, 0, 0, false, 6 ), _
            "Decimal( 987654000, 0, 0, false, 6 )" )
        CompDecimalToObject( Left, 9.8765400E+2, _
            "Double 9.8765400E+2" )
        CompDecimalToObject( Left, "987.654", _
            "String ""987.654""" )
    End Sub
End Module

' This example of the Decimal.Equals( Object ) and
' Decimal.CompareTo( Object ) methods generates the
' following output. It creates several different Decimal
' values and compares them with the following reference value.
'
' Left: Decimal( 987.654 )                      987.654
'
' Object: Decimal( 9.8765400E+2 )               987.654
' Left.Equals( Object )                         True
' Left.CompareTo( Object )                      0
'
' Object: 987.6541D                             987.6541
' Left.Equals( Object )                         False
' Left.CompareTo( Object )                      -1
'
' Object: 987.6539D                             987.6539
' Left.Equals( Object )                         False
' Left.CompareTo( Object )                      1
'
' Object: Decimal( 987654000, 0, 0, false, 6 )  987.654000
' Left.Equals( Object )                         True
' Left.CompareTo( Object )                      0
'
' Object: Double 9.8765400E+2                   987.654
' Left.Equals( Object )                         False
' Left.CompareTo( Object )                      ArgumentException
'
' Object: String "987.654"                      987.654
' Left.Equals( Object )                         False
' Left.CompareTo( Object )                      ArgumentException

// Example of the decimal.CompareTo and decimal.Equals instance
// methods.
using System;

class DecCompToEqualsObjDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Compare the decimal to the object parameters,
    // and display the object parameters with the results.
    public static void CompDecimalToObject( decimal Left,
        object Right, string RightText )
    {

        Console.WriteLine( "{0,-46}{1}", "object: "+RightText,
            Right );
        Console.WriteLine( "{0,-46}{1}", "Left.Equals( object )",
            Left.Equals( Right ) );
        Console.Write( "{0,-46}", "Left.CompareTo( object )" );

        try
        {
            // Catch the exception if CompareTo( ) throws one.
            Console.WriteLine( "{0}\n", Left.CompareTo( Right ) );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}\n", GetExceptionType( ex ) );
        }
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the decimal.Equals( object ) and \n" +
            "decimal.CompareTo( object ) methods generates the \n" +
            "following output. It creates several different " +
            "decimal \nvalues and compares them with the following " +
            "reference value.\n" );

        // Create a reference decimal value.
        decimal Left = new decimal( 987.654 );

        Console.WriteLine( "{0,-46}{1}\n",
            "Left: decimal( 987.654 )", Left );

        // Create objects to compare with the reference.
        CompDecimalToObject( Left, new decimal( 9.8765400E+2 ),
            "decimal( 9.8765400E+2 )" );
        CompDecimalToObject( Left, 987.6541M, "987.6541D" );
        CompDecimalToObject( Left, 987.6539M, "987.6539D" );
        CompDecimalToObject( Left,
            new decimal( 987654000, 0, 0, false, 6 ),
            "decimal( 987654000, 0, 0, false, 6 )" );
        CompDecimalToObject( Left, 9.8765400E+2,
            "Double 9.8765400E+2" );
        CompDecimalToObject( Left, "987.654", "String \"987.654\"" );
    }
}

/*
This example of the decimal.Equals( object ) and
decimal.CompareTo( object ) methods generates the
following output. It creates several different decimal
values and compares them with the following reference value.

Left: decimal( 987.654 )                      987.654

object: decimal( 9.8765400E+2 )               987.654
Left.Equals( object )                         True
Left.CompareTo( object )                      0

object: 987.6541D                             987.6541
Left.Equals( object )                         False
Left.CompareTo( object )                      -1

object: 987.6539D                             987.6539
Left.Equals( object )                         False
Left.CompareTo( object )                      1

object: decimal( 987654000, 0, 0, false, 6 )  987.654000
Left.Equals( object )                         True
Left.CompareTo( object )                      0

object: Double 9.8765400E+2                   987.654
Left.Equals( object )                         False
Left.CompareTo( object )                      ArgumentException

object: String "987.654"                      987.654
Left.Equals( object )                         False
Left.CompareTo( object )                      ArgumentException
*/

// Example of the Decimal::CompareTo and Decimal::Equals instance
// methods.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Compare the Decimal to the Object parameters,
// and display the Object parameters with the results.
void CompDecimalToObject( Decimal Left, Object^ Right, String^ RightText )
{
   Console::WriteLine( "{0,-46}{1}", String::Concat( "Object: ", RightText ), Right );
   Console::WriteLine( "{0,-46}{1}", "Left.Equals( Object )", Left.Equals( Right ) );
   Console::Write( "{0,-46}", "Left.CompareTo( Object )" );
   try
   {

      // Catch the exception if CompareTo( ) throws one.
      Console::WriteLine( "{0}\n", Left.CompareTo( Right ) );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}\n", GetExceptionType( ex ) );
   }

}

int main()
{
   Console::WriteLine( "This example of the Decimal::Equals( Object* ) and \n"
   "Decimal::CompareTo( Object* ) methods generates the \n"
   "following output. It creates several different "
   "Decimal \nvalues and compares them with the following "
   "reference value.\n" );

   // Create a reference Decimal value.
   Decimal Left = Decimal(987.654);
   Console::WriteLine( "{0,-46}{1}\n", "Left: Decimal( 987.654 )", Left );

   // Create objects to compare with the reference.
   CompDecimalToObject( Left, Decimal(9.8765400E+2), "Decimal( 9.8765400E+2 )" );
   CompDecimalToObject( Left, Decimal::Parse( "987.6541" ), "Decimal::Parse( \"987.6541\" )" );
   CompDecimalToObject( Left, Decimal::Parse( "987.6539" ), "Decimal::Parse( \"987.6539\" )" );
   CompDecimalToObject( Left, Decimal(987654000,0,0,false,6), "Decimal( 987654000, 0, 0, false, 6 )" );
   CompDecimalToObject( Left, 9.8765400E+2, "Double 9.8765400E+2" );
   CompDecimalToObject( Left, "987.654", "String \"987.654\"" );
}

/*
This example of the Decimal::Equals( Object* ) and
Decimal::CompareTo( Object* ) methods generates the
following output. It creates several different Decimal
values and compares them with the following reference value.

Left: Decimal( 987.654 )                      987.654

Object: Decimal( 9.8765400E+2 )               987.654
Left.Equals( Object )                         True
Left.CompareTo( Object )                      0

Object: Decimal::Parse( "987.6541" )          987.6541
Left.Equals( Object )                         False
Left.CompareTo( Object )                      -1

Object: Decimal::Parse( "987.6539" )          987.6539
Left.Equals( Object )                         False
Left.CompareTo( Object )                      1

Object: Decimal( 987654000, 0, 0, false, 6 )  987.654000
Left.Equals( Object )                         True
Left.CompareTo( Object )                      0

Object: Double 9.8765400E+2                   987.654
Left.Equals( Object )                         False
Left.CompareTo( Object )                      ArgumentException

Object: String "987.654"                      987.654
Left.Equals( Object )                         False
Left.CompareTo( Object )                      ArgumentException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
CompareTo 重载
System 命名空间
Compare
Equals


Decimal ..::.Divide 方法

Decimal
.
.
::
.
Divide 方法
Decimal 结构

两个指定的 Decimal 值相除。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Divide ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal Divide(
    decimal d1,
    decimal d2
)
public:
static Decimal Divide(
    Decimal d1,
    Decimal d2
)
static member Divide :
        d1:decimal *
        d2:decimal -> decimal

参数

d1
类型： System Decimal
Decimal（被除数）。
d2
类型： System Decimal
Decimal（除数）。

返回值

类型： System Decimal
Decimal，它是 d1 除以 d2 的结果。
异常 | 条件
DivideByZeroException | d2 是零。
OverflowException | 返回值（即商）小于 MinValue 或大于 MaxValue。

下面的代码示例创建几对 Decimal 值，并使用 Divide 方法计算它们的商。

' Example of the Decimal.Multiply, Decimal.Divide, and
' Decimal.Remainder methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalMulDivRemDemo

    Const dataFmt As String = "{0,-35}{1,31}"

    ' Display Decimal parameters and their product, quotient, and
    ' remainder.
    Sub ShowDecimalProQuoRem( Left as Decimal, Right as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Left", Left )
        Console.WriteLine( dataFmt, "Decimal Right", Right )
        Console.WriteLine( dataFmt, _
            "Decimal.Multiply( Left, Right )", _
            Decimal.Multiply( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Divide( Left, Right )", _
            Decimal.Divide( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Remainder( Left, Right )", _
            Decimal.Remainder( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.Multiply( Decimal, Decimal ), " & vbCrLf & _
            "  Decimal.Divide( Decimal, Decimal ), and " & vbCrLf & _
            "  Decimal.Remainder( Decimal, Decimal ) " & vbCrLf & _
            "methods generates the following output. It displays " & _
            "the product, " & vbCrLf & "quotient, and remainder " & _
            "of several pairs of Decimal objects." )

        ' Create pairs of Decimal objects.
        ShowDecimalProQuoRem( 1000D, 7D )
        ShowDecimalProQuoRem( -1000D, 7D )
        ShowDecimalProQuoRem( _
            new Decimal( 1230000000, 0, 0, False, 7 ), _
            0.0012300D )
        ShowDecimalProQuoRem( 12345678900000000D, _
            0.0000000012345678D )
        ShowDecimalProQuoRem( 123456789.0123456789D, _
            123456789.1123456789D )
    End Sub
End Module

' This example of the
'   Decimal.Multiply( Decimal, Decimal ),
'   Decimal.Divide( Decimal, Decimal ), and
'   Decimal.Remainder( Decimal, Decimal )
' methods generates the following output. It displays the product,
' quotient, and remainder of several pairs of Decimal objects.
'
' Decimal Left                                                  1000
' Decimal Right                                                    7
' Decimal.Multiply( Left, Right )                               7000
' Decimal.Divide( Left, Right )       142.85714285714285714285714286
' Decimal.Remainder( Left, Right )                                 6
'
' Decimal Left                                                 -1000
' Decimal Right                                                    7
' Decimal.Multiply( Left, Right )                              -7000
' Decimal.Divide( Left, Right )      -142.85714285714285714285714286
' Decimal.Remainder( Left, Right )                                -6
'
' Decimal Left                                           123.0000000
' Decimal Right                                              0.00123
' Decimal.Multiply( Left, Right )                     0.151290000000
' Decimal.Divide( Left, Right )                            100000.00
' Decimal.Remainder( Left, Right )                                 0
'
' Decimal Left                                     12345678900000000
' Decimal Right                                   0.0000000012345678
' Decimal.Multiply( Left, Right )          15241577.6390794200000000
' Decimal.Divide( Left, Right )       10000000729000059778004901.796
' Decimal.Remainder( Left, Right )                    0.000000000983
'
' Decimal Left                                  123456789.0123456789
' Decimal Right                                 123456789.1123456789
' Decimal.Multiply( Left, Right )     15241578765584515.651425087878
' Decimal.Divide( Left, Right )       0.9999999991899999933660999449
' Decimal.Remainder( Left, Right )              123456789.0123456789

// Example of the decimal.Multiply, decimal.Divide, and
// decimal.Remainder methods.
using System;
using Microsoft.VisualBasic;

class DecimalMulDivRemDemo
{
    const string dataFmt = "{0,-35}{1,31}";

    // Display decimal parameters and their product, quotient, and
    // remainder.
    public static void ShowDecimalProQuoRem( decimal Left, decimal Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Left", Left );
        Console.WriteLine( dataFmt, "decimal Right", Right );
        Console.WriteLine( dataFmt, "decimal.Multiply( Left, Right )",
            decimal.Multiply( Left, Right ) );
        Console.WriteLine( dataFmt, "decimal.Divide( Left, Right )",
            decimal.Divide( Left, Right ) );
        Console.WriteLine( dataFmt, "decimal.Remainder( Left, Right )",
            decimal.Remainder( Left, Right ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.Multiply( decimal, decimal ), \n" +
            "  decimal.Divide( decimal, decimal ), and \n" +
            "  decimal.Remainder( decimal, decimal ) \n" +
            "methods generates the following output. It displays " +
            "the product, \nquotient, and remainder of several " +
            "pairs of decimal objects." );

        // Create pairs of decimal objects.
        ShowDecimalProQuoRem( 1000M, 7M );
        ShowDecimalProQuoRem( -1000M, 7M );
        ShowDecimalProQuoRem(
            new decimal( 1230000000, 0, 0, false, 7 ), 0.0012300M );
        ShowDecimalProQuoRem( 12345678900000000M,
            0.0000000012345678M );
        ShowDecimalProQuoRem( 123456789.0123456789M,
            123456789.1123456789M );
    }
}

/*
This example of the
  decimal.Multiply( decimal, decimal ),
  decimal.Divide( decimal, decimal ), and
  decimal.Remainder( decimal, decimal )
methods generates the following output. It displays the product,
quotient, and remainder of several pairs of decimal objects.

decimal Left                                                  1000
decimal Right                                                    7
decimal.Multiply( Left, Right )                               7000
decimal.Divide( Left, Right )       142.85714285714285714285714286
decimal.Remainder( Left, Right )                                 6

decimal Left                                                 -1000
decimal Right                                                    7
decimal.Multiply( Left, Right )                              -7000
decimal.Divide( Left, Right )      -142.85714285714285714285714286
decimal.Remainder( Left, Right )                                -6

decimal Left                                           123.0000000
decimal Right                                            0.0012300
decimal.Multiply( Left, Right )                   0.15129000000000
decimal.Divide( Left, Right )                               100000
decimal.Remainder( Left, Right )                                 0

decimal Left                                     12345678900000000
decimal Right                                   0.0000000012345678
decimal.Multiply( Left, Right )          15241577.6390794200000000
decimal.Divide( Left, Right )       10000000729000059778004901.796
decimal.Remainder( Left, Right )                    0.000000000983

decimal Left                                  123456789.0123456789
decimal Right                                 123456789.1123456789
decimal.Multiply( Left, Right )     15241578765584515.651425087878
decimal.Divide( Left, Right )       0.9999999991899999933660999449
decimal.Remainder( Left, Right )              123456789.0123456789
*/

// Example of the Decimal::Multiply, Decimal::Divide, and
// Decimal::Remainder methods.
using namespace System;

// Display Decimal parameters and their product, quotient, and
// remainder.
void ShowDecimalProQuoRem( Decimal Left, Decimal Right )
{
   String^ dataFmt = "{0,-35}{1,31}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Left", Left );
   Console::WriteLine( dataFmt, "Decimal Right", Right );
   Console::WriteLine( dataFmt, "Decimal::Multiply( Left, Right )", Decimal::Multiply( Left, Right ) );
   Console::WriteLine( dataFmt, "Decimal::Divide( Left, Right )", Decimal::Divide( Left, Right ) );
   Console::WriteLine( dataFmt, "Decimal::Remainder( Left, Right )", Decimal::Remainder( Left, Right ) );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::Multiply( Decimal, Decimal ), \n"
   "  Decimal::Divide( Decimal, Decimal ), and \n"
   "  Decimal::Remainder( Decimal, Decimal ) \n"
   "methods generates the following output. It displays "
   "the product, \nquotient, and remainder of several "
   "pairs of Decimal objects." );

   // Create pairs of Decimal objects.
   ShowDecimalProQuoRem( Decimal::Parse( "1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "-1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal(1230000000,0,0,false,7), Decimal::Parse( "0.0012300" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "12345678900000000" ), Decimal::Parse( "0.0000000012345678" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "123456789.0123456789" ), Decimal::Parse( "123456789.1123456789" ) );
}

/*
This example of the
  Decimal::Multiply( Decimal, Decimal ),
  Decimal::Divide( Decimal, Decimal ), and
  Decimal::Remainder( Decimal, Decimal )
methods generates the following output. It displays the product,
quotient, and remainder of several pairs of Decimal objects.

Decimal Left                                                  1000
Decimal Right                                                    7
Decimal::Multiply( Left, Right )                              7000
Decimal::Divide( Left, Right )      142.85714285714285714285714286
Decimal::Remainder( Left, Right )                                6

Decimal Left                                                 -1000
Decimal Right                                                    7
Decimal::Multiply( Left, Right )                             -7000
Decimal::Divide( Left, Right )     -142.85714285714285714285714286
Decimal::Remainder( Left, Right )                               -6

Decimal Left                                           123.0000000
Decimal Right                                            0.0012300
Decimal::Multiply( Left, Right )                  0.15129000000000
Decimal::Divide( Left, Right )                              100000
Decimal::Remainder( Left, Right )                                0

Decimal Left                                     12345678900000000
Decimal Right                                   0.0000000012345678
Decimal::Multiply( Left, Right )         15241577.6390794200000000
Decimal::Divide( Left, Right )      10000000729000059778004901.796
Decimal::Remainder( Left, Right )                   0.000000000983

Decimal Left                                  123456789.0123456789
Decimal Right                                 123456789.1123456789
Decimal::Multiply( Left, Right )    15241578765584515.651425087878
Decimal::Divide( Left, Right )      0.9999999991899999933660999449
Decimal::Remainder( Left, Right )             123456789.0123456789
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Add
Subtract
Multiply


Decimal ..::.Equals 方法

Decimal
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

返回一个值，该值指示 Decimal 的两个实例是否表示同一个值。

名称 说明
页首

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.Equals 方法 (Decimal)

Decimal
.
.
::
.
Equals 方法 (Decimal)
Decimal 结构

返回一个值，该值指示此实例和指定的 Decimal 对象是否表示相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    value As Decimal _
) As Boolean
public bool Equals(
    decimal value
)
public:
virtual bool Equals(
    Decimal value
) sealed
abstract Equals :
        value:decimal -> bool
override Equals :
        value:decimal -> bool

参数

value
类型： System Decimal
要与此实例进行比较的 Decimal 对象。

返回值

类型： System Boolean
如果 value 等于此实例，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 value 参数转换为对象。

如果 value 包含的位数少于（窄于）实例类型，则某些编程语言将执行隐式扩大转换，以将参数值转换为具有更多位数的值。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和参数表示形式。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和参数表示形式。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Equals 重载
System 命名空间
Equals
CompareTo
Compare


Decimal ..::.Equals 方法 (Object)

Decimal
.
.
::
.
Equals 方法 (Object)
Decimal 结构

返回一个值，该值指示此实例和指定的 Object 是否表示相同的类型和值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    value As Object _
) As Boolean
public override bool Equals(
    Object value
)
public:
virtual bool Equals(
    Object^ value
) override
abstract Equals :
        value:Object -> bool
override Equals :
        value:Object -> bool

参数

value
类型： System Object
一个 Object。

返回值

类型： System Boolean
如果 value 是 Decimal 且与此实例相等，则为 true；否则为 false。

下面的代码示例使用 Equals 方法，将几个 Decimal 和其他对象同一个参考 Decimal 值进行比较。

' Example of the Decimal.CompareTo and Decimal.Equals instance methods.
Imports System
Imports Microsoft.VisualBasic

Module DecCompToEqualsObjDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Compare the Decimal to the Object parameters,
    ' and display the Object parameters with the results.
    Sub CompDecimalToObject( Left as Decimal, Right as Object, _
        RightText as String )

        Console.WriteLine( "{0,-46}{1}", "Object: " & RightText, _
            Right )
        Console.WriteLine( "{0,-46}{1}", "Left.Equals( Object )", _
            Left.Equals( Right ) )
        Console.Write( "{0,-46}", "Left.CompareTo( Object )" )

        ' Catch the exception if CompareTo( ) throws one.
        Try
            Console.WriteLine( "{0}" & vbCrLf, _
                Left.CompareTo( Right ) )
        Catch ex As Exception
            Console.WriteLine( "{0}" & vbCrLf, _
                GetExceptionType( ex ) )
        End Try
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal.Equals( Object ) " & _
            "and " & vbCrLf & "Decimal.CompareTo( Object ) " & _
            "methods generates the " & vbCrLf & _
            "following output. It creates several different " & _
            "Decimal " & vbCrLf & "values and compares them " & _
            "with the following reference value." & vbCrLf )

        ' Create a reference Decimal value.
        Dim Left as New Decimal( 987.654 )

        Console.WriteLine( "{0,-46}{1}" & vbCrLf, _
            "Left: Decimal( 987.654 )", Left )

        ' Create objects to compare with the reference.
        CompDecimalToObject( Left, New Decimal( 9.8765400E+2 ), _
            "Decimal( 9.8765400E+2 )" )
        CompDecimalToObject( Left, 987.6541D, "987.6541D" )
        CompDecimalToObject( Left, 987.6539D, "987.6539D" )
        CompDecimalToObject( Left, _
            New Decimal( 987654000, 0, 0, false, 6 ), _
            "Decimal( 987654000, 0, 0, false, 6 )" )
        CompDecimalToObject( Left, 9.8765400E+2, _
            "Double 9.8765400E+2" )
        CompDecimalToObject( Left, "987.654", _
            "String ""987.654""" )
    End Sub
End Module

' This example of the Decimal.Equals( Object ) and
' Decimal.CompareTo( Object ) methods generates the
' following output. It creates several different Decimal
' values and compares them with the following reference value.
'
' Left: Decimal( 987.654 )                      987.654
'
' Object: Decimal( 9.8765400E+2 )               987.654
' Left.Equals( Object )                         True
' Left.CompareTo( Object )                      0
'
' Object: 987.6541D                             987.6541
' Left.Equals( Object )                         False
' Left.CompareTo( Object )                      -1
'
' Object: 987.6539D                             987.6539
' Left.Equals( Object )                         False
' Left.CompareTo( Object )                      1
'
' Object: Decimal( 987654000, 0, 0, false, 6 )  987.654000
' Left.Equals( Object )                         True
' Left.CompareTo( Object )                      0
'
' Object: Double 9.8765400E+2                   987.654
' Left.Equals( Object )                         False
' Left.CompareTo( Object )                      ArgumentException
'
' Object: String "987.654"                      987.654
' Left.Equals( Object )                         False
' Left.CompareTo( Object )                      ArgumentException

// Example of the decimal.CompareTo and decimal.Equals instance
// methods.
using System;

class DecCompToEqualsObjDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Compare the decimal to the object parameters,
    // and display the object parameters with the results.
    public static void CompDecimalToObject( decimal Left,
        object Right, string RightText )
    {

        Console.WriteLine( "{0,-46}{1}", "object: "+RightText,
            Right );
        Console.WriteLine( "{0,-46}{1}", "Left.Equals( object )",
            Left.Equals( Right ) );
        Console.Write( "{0,-46}", "Left.CompareTo( object )" );

        try
        {
            // Catch the exception if CompareTo( ) throws one.
            Console.WriteLine( "{0}\n", Left.CompareTo( Right ) );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}\n", GetExceptionType( ex ) );
        }
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the decimal.Equals( object ) and \n" +
            "decimal.CompareTo( object ) methods generates the \n" +
            "following output. It creates several different " +
            "decimal \nvalues and compares them with the following " +
            "reference value.\n" );

        // Create a reference decimal value.
        decimal Left = new decimal( 987.654 );

        Console.WriteLine( "{0,-46}{1}\n",
            "Left: decimal( 987.654 )", Left );

        // Create objects to compare with the reference.
        CompDecimalToObject( Left, new decimal( 9.8765400E+2 ),
            "decimal( 9.8765400E+2 )" );
        CompDecimalToObject( Left, 987.6541M, "987.6541D" );
        CompDecimalToObject( Left, 987.6539M, "987.6539D" );
        CompDecimalToObject( Left,
            new decimal( 987654000, 0, 0, false, 6 ),
            "decimal( 987654000, 0, 0, false, 6 )" );
        CompDecimalToObject( Left, 9.8765400E+2,
            "Double 9.8765400E+2" );
        CompDecimalToObject( Left, "987.654", "String \"987.654\"" );
    }
}

/*
This example of the decimal.Equals( object ) and
decimal.CompareTo( object ) methods generates the
following output. It creates several different decimal
values and compares them with the following reference value.

Left: decimal( 987.654 )                      987.654

object: decimal( 9.8765400E+2 )               987.654
Left.Equals( object )                         True
Left.CompareTo( object )                      0

object: 987.6541D                             987.6541
Left.Equals( object )                         False
Left.CompareTo( object )                      -1

object: 987.6539D                             987.6539
Left.Equals( object )                         False
Left.CompareTo( object )                      1

object: decimal( 987654000, 0, 0, false, 6 )  987.654000
Left.Equals( object )                         True
Left.CompareTo( object )                      0

object: Double 9.8765400E+2                   987.654
Left.Equals( object )                         False
Left.CompareTo( object )                      ArgumentException

object: String "987.654"                      987.654
Left.Equals( object )                         False
Left.CompareTo( object )                      ArgumentException
*/

// Example of the Decimal::CompareTo and Decimal::Equals instance
// methods.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Compare the Decimal to the Object parameters,
// and display the Object parameters with the results.
void CompDecimalToObject( Decimal Left, Object^ Right, String^ RightText )
{
   Console::WriteLine( "{0,-46}{1}", String::Concat( "Object: ", RightText ), Right );
   Console::WriteLine( "{0,-46}{1}", "Left.Equals( Object )", Left.Equals( Right ) );
   Console::Write( "{0,-46}", "Left.CompareTo( Object )" );
   try
   {

      // Catch the exception if CompareTo( ) throws one.
      Console::WriteLine( "{0}\n", Left.CompareTo( Right ) );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}\n", GetExceptionType( ex ) );
   }

}

int main()
{
   Console::WriteLine( "This example of the Decimal::Equals( Object* ) and \n"
   "Decimal::CompareTo( Object* ) methods generates the \n"
   "following output. It creates several different "
   "Decimal \nvalues and compares them with the following "
   "reference value.\n" );

   // Create a reference Decimal value.
   Decimal Left = Decimal(987.654);
   Console::WriteLine( "{0,-46}{1}\n", "Left: Decimal( 987.654 )", Left );

   // Create objects to compare with the reference.
   CompDecimalToObject( Left, Decimal(9.8765400E+2), "Decimal( 9.8765400E+2 )" );
   CompDecimalToObject( Left, Decimal::Parse( "987.6541" ), "Decimal::Parse( \"987.6541\" )" );
   CompDecimalToObject( Left, Decimal::Parse( "987.6539" ), "Decimal::Parse( \"987.6539\" )" );
   CompDecimalToObject( Left, Decimal(987654000,0,0,false,6), "Decimal( 987654000, 0, 0, false, 6 )" );
   CompDecimalToObject( Left, 9.8765400E+2, "Double 9.8765400E+2" );
   CompDecimalToObject( Left, "987.654", "String \"987.654\"" );
}

/*
This example of the Decimal::Equals( Object* ) and
Decimal::CompareTo( Object* ) methods generates the
following output. It creates several different Decimal
values and compares them with the following reference value.

Left: Decimal( 987.654 )                      987.654

Object: Decimal( 9.8765400E+2 )               987.654
Left.Equals( Object )                         True
Left.CompareTo( Object )                      0

Object: Decimal::Parse( "987.6541" )          987.6541
Left.Equals( Object )                         False
Left.CompareTo( Object )                      -1

Object: Decimal::Parse( "987.6539" )          987.6539
Left.Equals( Object )                         False
Left.CompareTo( Object )                      1

Object: Decimal( 987654000, 0, 0, false, 6 )  987.654000
Left.Equals( Object )                         True
Left.CompareTo( Object )                      0

Object: Double 9.8765400E+2                   987.654
Left.Equals( Object )                         False
Left.CompareTo( Object )                      ArgumentException

Object: String "987.654"                      987.654
Left.Equals( Object )                         False
Left.CompareTo( Object )                      ArgumentException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Equals 重载
System 命名空间
Compare
CompareTo


Decimal ..::.Equals 方法 (Decimal, Decimal)

Decimal
.
.
::
.
Equals 方法 (Decimal, Decimal)
Decimal 结构

返回一个值，该值指示 Decimal 的两个指定实例是否表示同一个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Equals ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Boolean
public static bool Equals(
    decimal d1,
    decimal d2
)
public:
static bool Equals(
    Decimal d1,
    Decimal d2
)
static member Equals :
        d1:decimal *
        d2:decimal -> bool

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Boolean
如果 d1 和 d2 相等，则为 true；否则为 false。

下面的代码示例使用静态 Equals 方法，将几个 Decimal 值同一个参考 Decimal 值进行比较。

' Example of the Decimal.Compare and static Decimal.Equals methods.
Imports System
Imports Microsoft.VisualBasic

Module DecCompareEqualsDemo

    Const dataFmt As String = "{0,-45}{1}"

    ' Compare Decimal parameters, and display them with the results.
    Sub CompareDecimals( Left as Decimal, Right as Decimal, _
        RightText as String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, "Decimal.Equals( Left, Right )", _
            Decimal.Equals( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Compare( Left, Right )", _
            Decimal.Compare( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal.Equals( Decimal, " & _
            "Decimal ) and " & vbCrLf & "Decimal.Compare( " & _
            "Decimal, Decimal ) methods generates the " & vbCrLf & _
            "following output. It creates several different " & _
            "Decimal " & vbCrLf & "values and compares them " & _
            "with the following reference value." & vbCrLf )

        ' Create a reference Decimal value.
        Dim Left as New Decimal( 123.456 )

        Console.WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left )

        ' Create Decimal values to compare with the reference.
        CompareDecimals( Left, New Decimal( 1.2345600E+2 ), _
            "Decimal( 1.2345600E+2 )" )
        CompareDecimals( Left, 123.4561D, "123.4561D" )
        CompareDecimals( Left, 123.4559D, "123.4559D" )
        CompareDecimals( Left, 123.456000D, "123.456000D" )
        CompareDecimals( Left, _
            New Decimal( 123456000, 0, 0, false, 6 ), _
            "Decimal( 123456000, 0, 0, false, 6 )" )
    End Sub
End Module

' This example of the Decimal.Equals( Decimal, Decimal ) and
' Decimal.Compare( Decimal, Decimal ) methods generates the
' following output. It creates several different Decimal
' values and compares them with the following reference value.
'
' Left: Decimal( 123.456 )                     123.456
'
' Right: Decimal( 1.2345600E+2 )               123.456
' Decimal.Equals( Left, Right )                True
' Decimal.Compare( Left, Right )               0
'
' Right: 123.4561D                             123.4561
' Decimal.Equals( Left, Right )                False
' Decimal.Compare( Left, Right )               -1
'
' Right: 123.4559D                             123.4559
' Decimal.Equals( Left, Right )                False
' Decimal.Compare( Left, Right )               1
'
' Right: 123.456000D                           123.456
' Decimal.Equals( Left, Right )                True
' Decimal.Compare( Left, Right )               0
'
' Right: Decimal( 123456000, 0, 0, false, 6 )  123.456000
' Decimal.Equals( Left, Right )                True
' Decimal.Compare( Left, Right )               0

// Example of the decimal.Compare and static decimal.Equals methods.
using System;

class DecCompareEqualsDemo
{
    const string dataFmt = "{0,-45}{1}";

    // Compare decimal parameters, and display them with the results.
    public static void CompareDecimals( decimal Left, decimal Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: "+RightText, Right );
        Console.WriteLine( dataFmt, "decimal.Equals( Left, Right )",
            Decimal.Equals( Left, Right ) );
        Console.WriteLine( dataFmt, "decimal.Compare( Left, Right )",
            Decimal.Compare( Left, Right ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the " +
            "decimal.Equals( decimal, decimal ) and \n" +
            "decimal.Compare( decimal, decimal ) methods " +
            "generates the \nfollowing output. It creates several " +
            "different decimal \nvalues and compares them with " +
            "the following reference value.\n" );

        // Create a reference decimal value.
        decimal Left = new decimal( 123.456 );

        Console.WriteLine( dataFmt, "Left: decimal( 123.456 )",
            Left );

        // Create decimal values to compare with the reference.
        CompareDecimals( Left, new decimal( 1.2345600E+2 ),
            "decimal( 1.2345600E+2 )" );
        CompareDecimals( Left, 123.4561M, "123.4561M" );
        CompareDecimals( Left, 123.4559M, "123.4559M" );
        CompareDecimals( Left, 123.456000M, "123.456000M" );
        CompareDecimals( Left,
            new decimal( 123456000, 0, 0, false, 6 ),
            "decimal( 123456000, 0, 0, false, 6 )" );
    }
}

/*
This example of the decimal.Equals( decimal, decimal ) and
decimal.Compare( decimal, decimal ) methods generates the
following output. It creates several different decimal
values and compares them with the following reference value.

Left: decimal( 123.456 )                     123.456

Right: decimal( 1.2345600E+2 )               123.456
decimal.Equals( Left, Right )                True
decimal.Compare( Left, Right )               0

Right: 123.4561M                             123.4561
decimal.Equals( Left, Right )                False
decimal.Compare( Left, Right )               -1

Right: 123.4559M                             123.4559
decimal.Equals( Left, Right )                False
decimal.Compare( Left, Right )               1

Right: 123.456000M                           123.456000
decimal.Equals( Left, Right )                True
decimal.Compare( Left, Right )               0

Right: decimal( 123456000, 0, 0, false, 6 )  123.456000
decimal.Equals( Left, Right )                True
decimal.Compare( Left, Right )               0
*/

// Example of the Decimal::Compare and static Decimal::Equals methods.
using namespace System;
const __wchar_t * protoFmt = L"{0,-45}{1}";

// Compare Decimal parameters, and display them with the results.
void CompareDecimals( Decimal Left, Decimal Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Decimal::Equals( Left, Right )", Decimal::Equals( Left, Right ) );
   Console::WriteLine( dataFmt, "Decimal::Compare( Left, Right )", Decimal::Compare( Left, Right ) );
}

int main()
{
   Console::WriteLine( "This example of the Decimal::Equals( Decimal, Decimal "
   ") and \nDecimal::Compare( Decimal, Decimal ) "
   "methods generates the \nfollowing output. It creates "
   "several different Decimal \nvalues and compares them "
   "with the following reference value.\n" );

   // Create a reference Decimal value.
   Decimal Left = Decimal(123.456);
   Console::WriteLine( gcnew String( protoFmt ), "Left: Decimal( 123.456 )", Left );

   // Create Decimal values to compare with the reference.
   CompareDecimals( Left, Decimal(1.2345600E+2), "Decimal( 1.2345600E+2 )" );
   CompareDecimals( Left, Decimal::Parse( "123.4561" ), "Decimal::Parse( \"123.4561\" )" );
   CompareDecimals( Left, Decimal::Parse( "123.4559" ), "Decimal::Parse( \"123.4559\" )" );
   CompareDecimals( Left, Decimal::Parse( "123.456000" ), "Decimal::Parse( \"123.456000\" )" );
   CompareDecimals( Left, Decimal(123456000,0,0,false,6), "Decimal( 123456000, 0, 0, false, 6 )" );
}

/*
This example of the Decimal::Equals( Decimal, Decimal ) and
Decimal::Compare( Decimal, Decimal ) methods generates the
following output. It creates several different Decimal
values and compares them with the following reference value.

Left: Decimal( 123.456 )                     123.456

Right: Decimal( 1.2345600E+2 )               123.456
Decimal::Equals( Left, Right )               True
Decimal::Compare( Left, Right )              0

Right: Decimal::Parse( "123.4561" )          123.4561
Decimal::Equals( Left, Right )               False
Decimal::Compare( Left, Right )              -1

Right: Decimal::Parse( "123.4559" )          123.4559
Decimal::Equals( Left, Right )               False
Decimal::Compare( Left, Right )              1

Right: Decimal::Parse( "123.456000" )        123.456000
Decimal::Equals( Left, Right )               True
Decimal::Compare( Left, Right )              0

Right: Decimal( 123456000, 0, 0, false, 6 )  123.456000
Decimal::Equals( Left, Right )               True
Decimal::Compare( Left, Right )              0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Equals 重载
System 命名空间
Compare
CompareTo


Decimal ..::.Floor 方法

Decimal
.
.
::
.
Floor 方法
Decimal 结构

将指定的 Decimal 数字向负无穷方向舍入为最接近的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Floor ( _
    d As Decimal _
) As Decimal
public static decimal Floor(
    decimal d
)
public:
static Decimal Floor(
    Decimal d
)
static member Floor :
        d:decimal -> decimal

参数

d
类型： System Decimal
Decimal。

返回值

类型： System Decimal
如果 d 有小数部分，则为负无穷方向上小于 d 的下一个整 Decimal 数字。
- 或 -
如果 d 没有小数部分，则 d 原样返回。

下面的代码阐释了如何使用 Floor。

Class PiggyBank
    Public ReadOnly Property Dollars() As Decimal
        Get
            Return [Decimal].Floor(MyFortune)
        End Get
    End Property

    Protected MyFortune As Decimal

    Public Sub AddPenny()
        MyFortune += 0.01D
    End Sub
End Class

    class PiggyBank {
        public decimal Dollars {
            get {
                return Decimal.Floor(MyFortune);
            }
        }

        protected decimal MyFortune;

        public void AddPenny() {
            MyFortune += .01m;
        }
    }

   public ref class PiggyBank
   {
   public:
      Decimal Dollars()
      {
         return Decimal::Floor( MyFortune );
      }

      void AddPenny()
      {
         MyFortune = Decimal::Add(MyFortune, (Decimal).01);
      }

   protected:
      Decimal MyFortune;
   };

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Round
Truncate


Decimal ..::.FromOACurrency 方法

Decimal
.
.
::
.
FromOACurrency 方法
Decimal 结构

将指定的 64 位有符号整数（它包含 OLE 自动化货币值）转换为等效的 Decimal 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromOACurrency ( _
    cy As Long _
) As Decimal
public static decimal FromOACurrency(
    long cy
)
public:
static Decimal FromOACurrency(
    long long cy
)
static member FromOACurrency :
        cy:int64 -> decimal

参数

cy
类型： System Int64
一个 OLE 自动化货币值。

返回值

类型： System Decimal
包含 cy 的等效数的 Decimal。

下面的代码示例使用 FromOACurrency 方法，将包含 OLE 自动化货币值的 Int64 字段转换为等效的 Decimal 数字。

' Example of the Decimal.FromOACurrency method.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFromOACurrencyDemo

    Const dataFmt As String = "{0,21}{1,25}"

    ' Display the Decimal.FromOACurrency parameter and Decimal result.
    Sub ShowDecimalFromOACurrency( Argument As Long )

        Dim decCurrency As Decimal = _
            Decimal.FromOACurrency( Argument )

        Console.WriteLine( dataFmt, Argument, decCurrency )
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & _
            "Decimal.FromOACurrency( ) method generates " & vbCrLf & _
            "the following output. It displays the OLE Automation " & _
            "Currency " & vbCrLf & "value as a Long and the " & _
            "result as a Decimal." & vbCrLf )
        Console.WriteLine( dataFmt, "OA Currency", "Decimal Value" )
        Console.WriteLine( dataFmt, "-----------", "-------------" )

        ' Convert OLE Automation Currency values to Decimal objects.
        ShowDecimalFromOACurrency( 0L )
        ShowDecimalFromOACurrency( 1L )
        ShowDecimalFromOACurrency( 100000L )
        ShowDecimalFromOACurrency( 100000000000L )
        ShowDecimalFromOACurrency( 1000000000000000000L )
        ShowDecimalFromOACurrency( 1000000000000000001L )
        ShowDecimalFromOACurrency( Long.MaxValue )
        ShowDecimalFromOACurrency( Long.MinValue )
        ShowDecimalFromOACurrency( 123456789L )
        ShowDecimalFromOACurrency( 1234567890000L )
        ShowDecimalFromOACurrency( 1234567890987654321 )
        ShowDecimalFromOACurrency( 4294967295L )
    End Sub
End Module

' This example of the Decimal.FromOACurrency( ) method generates
' the following output. It displays the OLE Automation Currency
' value as a Long and the result as a Decimal.
'
'           OA Currency            Decimal Value
'           -----------            -------------
'                     0                        0
'                     1                   0.0001
'                100000                       10
'          100000000000                 10000000
'   1000000000000000000          100000000000000
'   1000000000000000001     100000000000000.0001
'   9223372036854775807     922337203685477.5807
'  -9223372036854775808    -922337203685477.5808
'             123456789               12345.6789
'         1234567890000                123456789
'   1234567890987654321     123456789098765.4321
'            4294967295              429496.7295

// Example of the decimal.FromOACurrency method.
using System;

class DecimalFromOACurrencyDemo
{
    const string dataFmt = "{0,21}{1,25}";

    // Display the decimal.FromOACurrency parameter and decimal result.
    public static void ShowDecimalFromOACurrency( long Argument )
    {
        decimal decCurrency = decimal.FromOACurrency( Argument );

        Console.WriteLine( dataFmt, Argument, decCurrency );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the " +
            "decimal.FromOACurrency( ) method generates \nthe " +
            "following output. It displays the OLE Automation " +
            "Currency \nvalue as a long and the result as a " +
            "decimal.\n" );
        Console.WriteLine( dataFmt, "OA Currency", "Decimal Value" );
        Console.WriteLine( dataFmt, "-----------", "-------------" );

        // Convert OLE Automation Currency values to decimal objects.
        ShowDecimalFromOACurrency( 0L );
        ShowDecimalFromOACurrency( 1L );
        ShowDecimalFromOACurrency( 100000L );
        ShowDecimalFromOACurrency( 100000000000L );
        ShowDecimalFromOACurrency( 1000000000000000000L );
        ShowDecimalFromOACurrency( 1000000000000000001L );
        ShowDecimalFromOACurrency( long.MaxValue );
        ShowDecimalFromOACurrency( long.MinValue );
        ShowDecimalFromOACurrency( 123456789L );
        ShowDecimalFromOACurrency( 1234567890000L );
        ShowDecimalFromOACurrency( 1234567890987654321 );
        ShowDecimalFromOACurrency( 4294967295L );
    }
}

/*
This example of the decimal.FromOACurrency( ) method generates
the following output. It displays the OLE Automation Currency
value as a long and the result as a decimal.

          OA Currency            Decimal Value
          -----------            -------------
                    0                        0
                    1                   0.0001
               100000                       10
         100000000000                 10000000
  1000000000000000000          100000000000000
  1000000000000000001     100000000000000.0001
  9223372036854775807     922337203685477.5807
 -9223372036854775808    -922337203685477.5808
            123456789               12345.6789
        1234567890000                123456789
  1234567890987654321     123456789098765.4321
           4294967295              429496.7295
*/

// Example of the Decimal::FromOACurrency method.
using namespace System;
#define dataFmt "{0,21}{1,25}"

// Display the Decimal::FromOACurrency parameter and Decimal result.
void ShowDecimalFromOACurrency( __int64 Argument )
{
   Decimal decCurrency = Decimal::FromOACurrency( Argument );
   Console::WriteLine( dataFmt, Argument, decCurrency );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Decimal::FromOACurrency( ) method generates \nthe "
   "following output. It displays the OLE Automation "
   "Currency \nvalue as an __int64 and the result as a "
   "Decimal.\n" );
   Console::WriteLine( dataFmt, "OA Currency", "Decimal Value" );
   Console::WriteLine( dataFmt, "-----------", "-------------" );

   // Convert OLE Automation Currency values to Decimal objects.
   ShowDecimalFromOACurrency( 0L );
   ShowDecimalFromOACurrency( 1L );
   ShowDecimalFromOACurrency( 100000L );
   ShowDecimalFromOACurrency( 100000000000L );
   ShowDecimalFromOACurrency( 1000000000000000000L );
   ShowDecimalFromOACurrency( 1000000000000000001L );
   ShowDecimalFromOACurrency( Int64::MaxValue );
   ShowDecimalFromOACurrency( Int64::MinValue );
   ShowDecimalFromOACurrency( 123456789L );
   ShowDecimalFromOACurrency( 1234567890000L );
   ShowDecimalFromOACurrency( 1234567890987654321 );
   ShowDecimalFromOACurrency( 4294967295L );
}

/*
This example of the Decimal::FromOACurrency( ) method generates
the following output. It displays the OLE Automation Currency
value as an __int64 and the result as a Decimal.

          OA Currency            Decimal Value
          -----------            -------------
                    0                        0
                    1                   0.0001
               100000                       10
         100000000000                 10000000
  1000000000000000000          100000000000000
  1000000000000000001     100000000000000.0001
  9223372036854775807     922337203685477.5807
 -9223372036854775808    -922337203685477.5808
            123456789               12345.6789
        1234567890000                123456789
  1234567890987654321     123456789098765.4321
           4294967295              429496.7295
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
System 命名空间
ToOACurrency


Decimal ..::.GetBits 方法

Decimal
.
.
::
.
GetBits 方法
Decimal 结构

将 Decimal 的指定实例的值转换为其等效的二进制表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetBits ( _
    d As Decimal _
) As Integer()
public static int[] GetBits(
    decimal d
)
public:
static array<int>^ GetBits(
    Decimal d
)
static member GetBits :
        d:decimal -> int[]

参数

d
类型： System Decimal
Decimal 值。

返回值

类型：
array<
System Int32
>
[]
()
[]

包含 d 二进制表示形式、由四个元素组成的 32 位有符号整数数组。

Decimal 数字的二进制表示由 1 位符号、一个 96 位的整数以及一个比例因子组成，比例因子用以分隔该整数以指定它的哪一部分为小数部分。比例因子隐式地定为数字 10 的幂，指数范围从 0 到 28。 Decimal 数字的二进制表示由 1 位符号、一个 96 位的整数以及一个比例因子组成，比例因子用以分隔该整数以指定它的哪一部分为小数部分。比例因子隐式地定为数字 10 的幂，指数范围从 0 到 28。

返回值是由 32 位有符号整数构成的四元素数组。

返回数组的第一个、第二个和第三个元素分别包含 96 位整数的低 32 位、中间 32 位和高 32 位。

返回数组的第四个元素包含比例因子和符号。该元素由以下部分组成： 返回数组的第四个元素包含比例因子和符号。该元素由以下部分组成：

0 到 15 位（即字的低位部分）不被使用且必须为零。

16 到 23 位必须包含一个 0 到 28 之间的指数，指示 10 的幂，用以分隔该整数。

24 到 30 位不被使用且必须为零。

31 位包含符号，0 表示正，1 表示负。

请注意，位的表示有正零和负零之分。在所有运算中，这些值被视为相等。 请注意，位的表示有正零和负零之分。在所有运算中，这些值被视为相等。

下面的代码示例使用 GetBits 方法，将几个 Decimal 值转换为它们的等效二进制表示形式。

' Example of the Decimal.GetBits method.
Imports System
Imports Microsoft.VisualBasic

Module DecimalGetBitsDemo

    Const dataFmt As String = _
        "{0,31}  {1,10:X8}{2,10:X8}{3,10:X8}{4,10:X8}"

    ' Display the Decimal.GetBits argument and the result array.
    Sub ShowDecimalGetBits( Argument As Decimal )

        Dim Bits As Integer( ) = Decimal.GetBits( Argument )

        Console.WriteLine( dataFmt, Argument, _
            Bits( 3 ), Bits( 2 ), Bits( 1 ), Bits( 0 ) )
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & _
            "Decimal.GetBits( Decimal ) method " & vbCrLf & _
            "generates the following output. It displays " & _
            "the argument " & vbCrLf & "as a Decimal and the result " & _
            "array in hexadecimal." & vbCrLf )
        Console.WriteLine( dataFmt, "Argument", "Bits(3)", _
            "Bits(2)", "Bits(1)", "Bits(0)" )
        Console.WriteLine( dataFmt, "--------", "-------", _
            "-------", "-------", "-------" )

        ' Get internal bits for Decimal objects.
        ShowDecimalGetBits( 1D )
        ShowDecimalGetBits( 100000000000000D )
        ShowDecimalGetBits( 10000000000000000000000000000D )
        ShowDecimalGetBits( _
            Decimal.Parse( "100000000000000.00000000000000" ) )
        ShowDecimalGetBits( _
            Decimal.Parse( "1.0000000000000000000000000000" ) )
        ShowDecimalGetBits( 123456789D )
        ShowDecimalGetBits( 0.123456789D )
        ShowDecimalGetBits( 0.000000000123456789D )
        ShowDecimalGetBits( 0.000000000000000000123456789D )
        ShowDecimalGetBits( 4294967295D )
        ShowDecimalGetBits( 18446744073709551615D )
        ShowDecimalGetBits( Decimal.MaxValue )
        ShowDecimalGetBits( Decimal.MinValue )
        ShowDecimalGetBits( -7.9228162514264337593543950335D )
    End Sub
End Module

' This example of the Decimal.GetBits( Decimal ) method
' generates the following output. It displays the argument
' as a Decimal and the result array in hexadecimal.
'
'                        Argument     Bits(3)   Bits(2)   Bits(1)   Bits(0)
'                        --------     -------   -------   -------   -------
'                               1    00000000  00000000  00000000  00000001
'                 100000000000000    00000000  00000000  00005AF3  107A4000
'   10000000000000000000000000000    00000000  204FCE5E  3E250261  10000000
'  100000000000000.00000000000000    000E0000  204FCE5E  3E250261  10000000
'  1.0000000000000000000000000000    001C0000  204FCE5E  3E250261  10000000
'                       123456789    00000000  00000000  00000000  075BCD15
'                     0.123456789    00090000  00000000  00000000  075BCD15
'            0.000000000123456789    00120000  00000000  00000000  075BCD15
'   0.000000000000000000123456789    001B0000  00000000  00000000  075BCD15
'                      4294967295    00000000  00000000  00000000  FFFFFFFF
'            18446744073709551615    00000000  00000000  FFFFFFFF  FFFFFFFF
'   79228162514264337593543950335    00000000  FFFFFFFF  FFFFFFFF  FFFFFFFF
'  -79228162514264337593543950335    80000000  FFFFFFFF  FFFFFFFF  FFFFFFFF
' -7.9228162514264337593543950335    801C0000  FFFFFFFF  FFFFFFFF  FFFFFFFF

// Example of the decimal.GetBits method.
using System;

class DecimalGetBitsDemo
{
    const string dataFmt = "{0,31}  {1,10:X8}{2,10:X8}{3,10:X8}{4,10:X8}";

    // Display the decimal.GetBits argument and the result array.
    public static void ShowDecimalGetBits( decimal Argument )
    {
        int[ ] Bits = decimal.GetBits( Argument );

        Console.WriteLine( dataFmt, Argument,
            Bits[ 3 ], Bits[ 2 ], Bits[ 1 ], Bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the " +
            "decimal.GetBits( decimal ) method \ngenerates the " +
            "following output. It displays the argument \nas a " +
            "decimal and the result array in hexadecimal.\n" );
        Console.WriteLine( dataFmt, "Argument", "Bits[3]",
            "Bits[2]", "Bits[1]", "Bits[0]" );
        Console.WriteLine( dataFmt, "--------", "-------",
            "-------", "-------", "-------" );

        // Get internal bits for decimal objects.
        ShowDecimalGetBits( 1M );
        ShowDecimalGetBits( 100000000000000M );
        ShowDecimalGetBits( 10000000000000000000000000000M );
        ShowDecimalGetBits( 100000000000000.00000000000000M );
        ShowDecimalGetBits( 1.0000000000000000000000000000M );
        ShowDecimalGetBits( 123456789M );
        ShowDecimalGetBits( 0.123456789M );
        ShowDecimalGetBits( 0.000000000123456789M );
        ShowDecimalGetBits( 0.000000000000000000123456789M );
        ShowDecimalGetBits( 4294967295M );
        ShowDecimalGetBits( 18446744073709551615M );
        ShowDecimalGetBits( decimal.MaxValue );
        ShowDecimalGetBits( decimal.MinValue );
        ShowDecimalGetBits( -7.9228162514264337593543950335M );
    }
}

/*
This example of the decimal.GetBits( decimal ) method
generates the following output. It displays the argument
as a decimal and the result array in hexadecimal.

                       Argument     Bits[3]   Bits[2]   Bits[1]   Bits[0]
                       --------     -------   -------   -------   -------
                              1    00000000  00000000  00000000  00000001
                100000000000000    00000000  00000000  00005AF3  107A4000
  10000000000000000000000000000    00000000  204FCE5E  3E250261  10000000
 100000000000000.00000000000000    000E0000  204FCE5E  3E250261  10000000
 1.0000000000000000000000000000    001C0000  204FCE5E  3E250261  10000000
                      123456789    00000000  00000000  00000000  075BCD15
                    0.123456789    00090000  00000000  00000000  075BCD15
           0.000000000123456789    00120000  00000000  00000000  075BCD15
  0.000000000000000000123456789    001B0000  00000000  00000000  075BCD15
                     4294967295    00000000  00000000  00000000  FFFFFFFF
           18446744073709551615    00000000  00000000  FFFFFFFF  FFFFFFFF
  79228162514264337593543950335    00000000  FFFFFFFF  FFFFFFFF  FFFFFFFF
 -79228162514264337593543950335    80000000  FFFFFFFF  FFFFFFFF  FFFFFFFF
-7.9228162514264337593543950335    801C0000  FFFFFFFF  FFFFFFFF  FFFFFFFF
*/

// Example of the Decimal::GetBits method.
using namespace System;
const __wchar_t * dataFmt = L"{0,31}  {1,10:X8}{2,10:X8}{3,10:X8}{4,10:X8}";

// Display the Decimal::GetBits argument and the result array.
void ShowDecimalGetBits( Decimal Argument )
{
   array<int>^Bits = Decimal::GetBits( Argument );
   Console::WriteLine( gcnew String( dataFmt ), Argument, Bits[ 3 ], Bits[ 2 ], Bits[ 1 ], Bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Decimal::GetBits( Decimal ) method \ngenerates the "
   "following output. It displays the argument \nas a "
   "Decimal and the result array in hexadecimal.\n" );
   Console::WriteLine( gcnew String( dataFmt ), "Argument", "Bits[3]", "Bits[2]", "Bits[1]", "Bits[0]" );
   Console::WriteLine( gcnew String( dataFmt ), "--------", "-------", "-------", "-------", "-------" );

   // Get internal bits for Decimal objects.
   ShowDecimalGetBits( Decimal::Parse( "1" ) );
   ShowDecimalGetBits( Decimal::Parse( "100000000000000" ) );
   ShowDecimalGetBits( Decimal::Parse( "10000000000000000000000000000" ) );
   ShowDecimalGetBits( Decimal::Parse( "100000000000000.00000000000000" ) );
   ShowDecimalGetBits( Decimal::Parse( "1.0000000000000000000000000000" ) );
   ShowDecimalGetBits( Decimal::Parse( "123456789" ) );
   ShowDecimalGetBits( Decimal::Parse( "0.123456789" ) );
   ShowDecimalGetBits( Decimal::Parse( "0.000000000123456789" ) );
   ShowDecimalGetBits( Decimal::Parse( "0.000000000000000000123456789" ) );
   ShowDecimalGetBits( Decimal::Parse( "4294967295" ) );
   ShowDecimalGetBits( Decimal::Parse( "18446744073709551615" ) );
   ShowDecimalGetBits( Decimal::MaxValue );
   ShowDecimalGetBits( Decimal::MinValue );
   ShowDecimalGetBits( Decimal::Parse( "-7.9228162514264337593543950335" ) );
}

/*
This example of the Decimal::GetBits( Decimal ) method
generates the following output. It displays the argument
as a Decimal and the result array in hexadecimal.

                       Argument     Bits[3]   Bits[2]   Bits[1]   Bits[0]
                       --------     -------   -------   -------   -------
                              1    00000000  00000000  00000000  00000001
                100000000000000    00000000  00000000  00005AF3  107A4000
  10000000000000000000000000000    00000000  204FCE5E  3E250261  10000000
 100000000000000.00000000000000    000E0000  204FCE5E  3E250261  10000000
 1.0000000000000000000000000000    001C0000  204FCE5E  3E250261  10000000
                      123456789    00000000  00000000  00000000  075BCD15
                    0.123456789    00090000  00000000  00000000  075BCD15
           0.000000000123456789    00120000  00000000  00000000  075BCD15
  0.000000000000000000123456789    001B0000  00000000  00000000  075BCD15
                     4294967295    00000000  00000000  00000000  FFFFFFFF
           18446744073709551615    00000000  00000000  FFFFFFFF  FFFFFFFF
  79228162514264337593543950335    00000000  FFFFFFFF  FFFFFFFF  FFFFFFFF
 -79228162514264337593543950335    80000000  FFFFFFFF  FFFFFFFF  FFFFFFFF
-7.9228162514264337593543950335    801C0000  FFFFFFFF  FFFFFFFF  FFFFFFFF
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Decimal


Decimal ..::.GetHashCode 方法

Decimal
.
.
::
.
GetHashCode 方法
Decimal 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

下面的代码示例使用 GetHashCode 方法，返回几个 Decimal 值的哈希代码。

' Example of the Decimal.GetHashCode method.
Imports System
Imports Microsoft.VisualBasic

Module DecimalGetHashCodeDemo

    ' Display the Decimal.GetHashCode argument and the result array.
    Sub ShowDecimalGetHashCode( Argument As Decimal )

        Dim hashCode As Integer = Argument.GetHashCode( )

        Console.WriteLine( "{0,31}{1,14}  0x{1:X8}", Argument, _
            hashCode )
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & _
            "Decimal.GetHashCode( ) method generates " & vbCrLf & _
            "the following output. It displays the hash code of " & _
            "the " & vbCrLf & "Decimal argument in decimal and " & _
            "hexadecimal." & vbCrLf )
        Console.WriteLine( "{0,31}{1,14}", "Argument", "Hash Code" )
        Console.WriteLine( "{0,31}{1,14}", "--------", "---------" )

        ' Generate hash codes for Decimal objects.
        ShowDecimalGetHashCode( 0D )
        ShowDecimalGetHashCode( 1D )
        ShowDecimalGetHashCode( _
            Decimal.Parse( "1.0000000000000000000000000000" ) )
        ShowDecimalGetHashCode( 100000000000000D )
        ShowDecimalGetHashCode( _
            Decimal.Parse( "100000000000000.00000000000000" ) )
        ShowDecimalGetHashCode( 10000000000000000000000000000D )
        ShowDecimalGetHashCode( 10000000000000000000000009999D )
        ShowDecimalGetHashCode( 10000000000000000004294967295D )
        ShowDecimalGetHashCode( 123456789D )
        ShowDecimalGetHashCode( 0.123456789D )
        ShowDecimalGetHashCode( 0.000000000123456789D )
        ShowDecimalGetHashCode( 0.000000000000000000123456789D )
        ShowDecimalGetHashCode( 4294967295D )
        ShowDecimalGetHashCode( 18446744073709551615D )
        ShowDecimalGetHashCode( Decimal.MaxValue )
        ShowDecimalGetHashCode( Decimal.MinValue )
        ShowDecimalGetHashCode( -7.9228162514264337593543950335D )
    End Sub
End Module

' This example of the Decimal.GetHashCode( ) method generates
' the following output. It displays the hash code of the
' Decimal argument in decimal and hexadecimal.
'
'                        Argument     Hash Code
'                        --------     ---------
'                               0             0  0x00000000
'                               1    1072693248  0x3FF00000
'  1.0000000000000000000000000000    1072693248  0x3FF00000
'                 100000000000000    1548139716  0x5C46BCC4
'  100000000000000.00000000000000    1548139716  0x5C46BCC4
'   10000000000000000000000000000    1793013094  0x6ADF3566
'   10000000000000000000000009999    1793013094  0x6ADF3566
'   10000000000000000004294967295    1793013094  0x6ADF3566
'                       123456789     362639156  0x159D6F34
'                     0.123456789     143063426  0x0886F982
'            0.000000000123456789    -667156908  0xD83BFE54
'   0.000000000000000000123456789    -261016360  0xF07134D8
'                      4294967295   -1106247681  0xBE0FFFFF
'            18446744073709551615    1139802112  0x43F00000
'   79228162514264337593543950335    1173356544  0x45F00000
'  -79228162514264337593543950335    -974127104  0xC5F00000
' -7.9228162514264337593543950335    2119160044  0x7E4FD0EC

// Example of the decimal.GetHashCode method.
using System;

class DecimalGetHashCodeDemo
{
    // Display the decimal.GetHashCode argument and the result array.
    public static void ShowDecimalGetHashCode( decimal Argument )
    {
        int hashCode = Argument.GetHashCode( );

        Console.WriteLine( "{0,31}{1,14}  0x{1:X8}",
            Argument, hashCode );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the " +
            "decimal.GetHashCode( ) method generates \nthe " +
            "following output. It displays the hash code of the \n" +
            "decimal argument in decimal and hexadecimal.\n" );
        Console.WriteLine( "{0,31}{1,14}", "Argument", "Hash Code" );
        Console.WriteLine( "{0,31}{1,14}", "--------", "---------" );

        // Generate hash codes for decimal objects.
        ShowDecimalGetHashCode( 0M );
        ShowDecimalGetHashCode( 1M );
        ShowDecimalGetHashCode( 1.0000000000000000000000000000M );
        ShowDecimalGetHashCode( 100000000000000M );
        ShowDecimalGetHashCode( 100000000000000.00000000000000M );
        ShowDecimalGetHashCode( 10000000000000000000000000000M );
        ShowDecimalGetHashCode( 10000000000000000000000009999M );
        ShowDecimalGetHashCode( 10000000000000000004294967295M );
        ShowDecimalGetHashCode( 123456789M );
        ShowDecimalGetHashCode( 0.123456789M );
        ShowDecimalGetHashCode( 0.000000000123456789M );
        ShowDecimalGetHashCode( 0.000000000000000000123456789M );
        ShowDecimalGetHashCode( 4294967295M );
        ShowDecimalGetHashCode( 18446744073709551615M );
        ShowDecimalGetHashCode( decimal.MaxValue );
        ShowDecimalGetHashCode( decimal.MinValue );
        ShowDecimalGetHashCode( -7.9228162514264337593543950335M );
    }
}

/*
This example of the decimal.GetHashCode( ) method generates
the following output. It displays the hash code of the
decimal argument in decimal and hexadecimal.

                       Argument     Hash Code
                       --------     ---------
                              0             0  0x00000000
                              1    1072693248  0x3FF00000
 1.0000000000000000000000000000    1072693248  0x3FF00000
                100000000000000    1548139716  0x5C46BCC4
 100000000000000.00000000000000    1548139716  0x5C46BCC4
  10000000000000000000000000000    1793013094  0x6ADF3566
  10000000000000000000000009999    1793013094  0x6ADF3566
  10000000000000000004294967295    1793013094  0x6ADF3566
                      123456789     362639156  0x159D6F34
                    0.123456789     143063426  0x0886F982
           0.000000000123456789    -667156908  0xD83BFE54
  0.000000000000000000123456789    -261016360  0xF07134D8
                     4294967295   -1106247681  0xBE0FFFFF
           18446744073709551615    1139802112  0x43F00000
  79228162514264337593543950335    1173356544  0x45F00000
 -79228162514264337593543950335    -974127104  0xC5F00000
-7.9228162514264337593543950335    2119160044  0x7E4FD0EC
*/

// Example of the Decimal::GetHashCode method.
using namespace System;

// Display the Decimal::GetHashCode argument and the result array.
void ShowDecimalGetHashCode( Decimal Argument )
{
   int hashCode = Argument.GetHashCode();
   Console::WriteLine( "{0,31}{1,14}  0x{1:X8}", Argument, hashCode );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Decimal::GetHashCode( ) method generates \nthe "
   "following output. It displays the hash code of the \n"
   "Decimal argument in decimal and hexadecimal.\n" );
   Console::WriteLine( "{0,31}{1,14}", "Argument", "Hash Code" );
   Console::WriteLine( "{0,31}{1,14}", "--------", "---------" );

   // Generate hash codes for Decimal objects.
   ShowDecimalGetHashCode( Decimal(0) );
   ShowDecimalGetHashCode( Decimal(1) );
   ShowDecimalGetHashCode( Decimal::Parse( "1.0000000000000000000000000000" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "100000000000000" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "100000000000000.00000000000000" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "10000000000000000000000000000" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "10000000000000000000000009999" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "10000000000000000004294967295" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "123456789" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "0.123456789" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "0.000000000123456789" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "0.000000000000000000123456789" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "4294967295" ) );
   ShowDecimalGetHashCode( Decimal::Parse( "18446744073709551615" ) );
   ShowDecimalGetHashCode( Decimal::MaxValue );
   ShowDecimalGetHashCode( Decimal::MinValue );
   ShowDecimalGetHashCode( Decimal::Parse( "-7.9228162514264337593543950335" ) );
}

/*
This example of the Decimal::GetHashCode( ) method generates
the following output. It displays the hash code of the
Decimal argument in decimal and hexadecimal.

                       Argument     Hash Code
                       --------     ---------
                              0             0  0x00000000
                              1    1072693248  0x3FF00000
 1.0000000000000000000000000000    1072693248  0x3FF00000
                100000000000000    1548139716  0x5C46BCC4
 100000000000000.00000000000000    1548139716  0x5C46BCC4
  10000000000000000000000000000    1793013094  0x6ADF3566
  10000000000000000000000009999    1793013094  0x6ADF3566
  10000000000000000004294967295    1793013094  0x6ADF3566
                      123456789     362639156  0x159D6F34
                    0.123456789     143063426  0x0886F982
           0.000000000123456789    -667156908  0xD83BFE54
  0.000000000000000000123456789    -261016360  0xF07134D8
                     4294967295   -1106247681  0xBE0FFFFF
           18446744073709551615    1139802112  0x43F00000
  79228162514264337593543950335    1173356544  0x45F00000
 -79228162514264337593543950335    -974127104  0xC5F00000
-7.9228162514264337593543950335    2119160044  0x7E4FD0EC
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.GetTypeCode 方法

Decimal
.
.
::
.
GetTypeCode 方法
Decimal 结构

返回值类型 Decimal 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.Decimal。

实现

下面的代码示例使用 GetTypeCode 方法，返回 Decimal 值类型的类型代码。

' Example of the Decimal.GetTypeCode method.
Imports System
Imports Microsoft.VisualBasic

Module DecimalGetTypeCodeDemo

    Sub Main( )
        Console.WriteLine( "This example of the " & _
            "Decimal.GetTypeCode( ) " & vbCrLf & "method " & _
            "generates the following output." & vbCrLf )

        ' Create a Decimal object and get its type code.
        Dim aDecimal    As Decimal  = New Decimal( 1.0 )
        Dim typCode     As TypeCode = aDecimal.GetTypeCode( )

        Console.WriteLine( "Type Code:      ""{0}""", typCode )
        Console.WriteLine( "Numeric value:  {0}", CInt( typCode ) )
    End Sub
End Module

' This example of the Decimal.GetTypeCode( )
' method generates the following output.
'
' Type Code:      "Decimal"
' Numeric value:  15

// Example of the decimal.GetTypeCode method.
using System;

class DecimalGetTypeCodeDemo
{
    public static void Main( )
    {
        Console.WriteLine( "This example of the " +
            "decimal.GetTypeCode( ) \nmethod " +
            "generates the following output.\n" );

        // Create a decimal object and get its type code.
        decimal aDecimal = new decimal( 1.0 );
        TypeCode typCode = aDecimal.GetTypeCode( );

        Console.WriteLine( "Type Code:      \"{0}\"", typCode );
        Console.WriteLine( "Numeric value:  {0}", (int)typCode );
    }
}

/*
This example of the decimal.GetTypeCode( )
method generates the following output.

Type Code:      "Decimal"
Numeric value:  15
*/

// Example of the Decimal::GetTypeCode method.
using namespace System;
int main()
{
   Console::WriteLine( "This example of the "
   "Decimal::GetTypeCode( ) \nmethod "
   "generates the following output.\n" );

   // Create a Decimal object and get its type code.
   Decimal aDecimal = Decimal(1.0);
   TypeCode typCode = aDecimal.GetTypeCode();
   Console::WriteLine( "Type Code:      \"{0}\"", typCode );
   Console::WriteLine( "Numeric value:  {0}", (int)typCode );
}

/*
This example of the Decimal::GetTypeCode( )
method generates the following output.

Type Code:      "Decimal"
Numeric value:  15
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToBoolean 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Decimal) 方法。 此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Decimal) 方法。 此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Decimal) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToByte 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

异常 | 条件
OverflowException | 所得到的整数值小于 MinValue 或大于 MaxValue。

此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToByte 方法或 Convert..::.ToByte 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToByte 方法或 Convert..::.ToByte 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToByte 方法或 Convert..::.ToByte 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToChar 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToDateTime 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToDecimal 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
当前实例的值，未更改。

实现

此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。 此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToDouble 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，已转换为 Double。

实现

此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToDouble 方法或 Convert..::.ToDouble 方法。 此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToDouble 方法或 Convert..::.ToDouble 方法。 此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToDouble 方法或 Convert..::.ToDouble 方法。

由于 Double 的有效位比 Decimal 少，所以此运算可能会产生舍入误差。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToInt16 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，已转换为 Int16。

实现

异常 | 条件
OverflowException | 所得到的整数值小于 MinValue 或大于 MaxValue。

此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToInt16 方法或 Convert..::.ToInt16 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToInt16 方法或 Convert..::.ToInt16 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToInt16 方法或 Convert..::.ToInt16 方法。

Decimal 值舍入为最接近的整数值（舍入位舍入为零）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToInt32 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，已转换为 Int32。

实现

异常 | 条件
OverflowException | 所得到的整数值小于 MinValue 或大于 MaxValue。

此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToInt32 方法或 Convert..::.ToInt32 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToInt32 方法或 Convert..::.ToInt32 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToInt32 方法或 Convert..::.ToInt32 方法。

Decimal 值舍入为最接近的整数值（舍入位舍入为零）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToInt64 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，已转换为 Int64。

实现

异常 | 条件
OverflowException | 所得到的整数值小于 MinValue 或大于 MaxValue。

此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToInt64 方法或 Convert..::.ToInt64 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToInt64 方法或 Convert..::.ToInt64 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToInt64 方法或 Convert..::.ToInt64 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToSByte 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，已转换为 SByte。

实现

异常 | 条件
OverflowException | 所得到的整数值小于 MinValue 或大于 MaxValue。

此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToSByte 方法或 Convert..::.ToSByte 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToSByte 方法或 Convert..::.ToSByte 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToSByte 方法或 Convert..::.ToSByte 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToSingle 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，已转换为 Single。

实现

此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToSingle 方法或 Convert..::.ToSingle 方法。 此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToSingle 方法或 Convert..::.ToSingle 方法。 此成员是显式接口成员的实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToSingle 方法或 Convert..::.ToSingle 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToType 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要将此 Decimal 实例的值转换为的类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的区域性特定信息。

返回值

类型： System Object
当前实例的值，已转换为 type。

实现

异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | 不支持所请求的类型转换。

此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是改为调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是改为调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是改为调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToUInt16 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，已转换为 UInt16。

实现

异常 | 条件
OverflowException | 所得到的整数值小于 MinValue 或大于 MaxValue。

此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToUInt16 方法或 Convert..::.ToUInt16 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToUInt16 方法或 Convert..::.ToUInt16 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToUInt16 方法或 Convert..::.ToUInt16 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToUInt32 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，已转换为 UInt32。

实现

异常 | 条件
OverflowException | 所得到的整数值小于 MinValue 或大于 MaxValue。

此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToUInt32 方法或 Convert..::.ToUInt32 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToUInt32 方法或 Convert..::.ToUInt32 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Decimal..::.ToUInt32 方法或 Convert..::.ToUInt32 方法。

Decimal 值舍入为最接近的整数值（舍入位舍入为零）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IConvertible ..::.ToUInt64 方法

Decimal
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，已转换为 UInt64。

实现

异常 | 条件
OverflowException | 所得到的整数值小于 MinValue 或大于 MaxValue。

此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。推荐使用的替代方法是调用 Decimal..::.ToUInt64 方法或 Convert..::.ToUInt64 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。推荐使用的替代方法是调用 Decimal..::.ToUInt64 方法或 Convert..::.ToUInt64 方法。 此成员是显式的接口成员实现。它只能在 Decimal 实例被强制转换为 IConvertible 接口时使用。推荐使用的替代方法是调用 Decimal..::.ToUInt64 方法或 Convert..::.ToUInt64 方法。

Decimal 值舍入为最接近的整数值（舍入位舍入为零）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.IDeserializationCallback ..::.OnDeserialization 方法

Decimal
.
.
::
.
IDeserializationCallback
.
.
::
.
OnDeserialization 方法
Decimal 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

在对象的反序列化完成时运行。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub OnDeserialization ( _
    sender As Object _
) Implements IDeserializationCallback.OnDeserialization
void IDeserializationCallback.OnDeserialization(
    Object sender
)
private:
virtual void OnDeserialization(
    Object^ sender
) sealed = IDeserializationCallback::OnDeserialization
private abstract OnDeserialization :
        sender:Object -> unit
private override OnDeserialization :
        sender:Object -> unit

参数

sender
类型： System Object
开始回调的对象。当前未实现该参数的功能。 开始回调的对象。当前未实现该参数的功能。

实现

异常 | 条件
SerializationException | Decimal 对象包含无效数据或损坏的数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.Multiply 方法

Decimal
.
.
::
.
Multiply 方法
Decimal 结构

两个指定的 Decimal 值相乘。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Multiply ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal Multiply(
    decimal d1,
    decimal d2
)
public:
static Decimal Multiply(
    Decimal d1,
    Decimal d2
)
static member Multiply :
        d1:decimal *
        d2:decimal -> decimal

参数

d1
类型： System Decimal
Decimal（被乘数）。
d2
类型： System Decimal
Decimal（乘数）。

返回值

类型： System Decimal
Decimal，它是 d1 和 d2 相乘的结果。
异常 | 条件
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的代码示例创建几对 Decimal 值，并使用 Multiply 方法计算它们的积。

' Example of the Decimal.Multiply, Decimal.Divide, and
' Decimal.Remainder methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalMulDivRemDemo

    Const dataFmt As String = "{0,-35}{1,31}"

    ' Display Decimal parameters and their product, quotient, and
    ' remainder.
    Sub ShowDecimalProQuoRem( Left as Decimal, Right as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Left", Left )
        Console.WriteLine( dataFmt, "Decimal Right", Right )
        Console.WriteLine( dataFmt, _
            "Decimal.Multiply( Left, Right )", _
            Decimal.Multiply( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Divide( Left, Right )", _
            Decimal.Divide( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Remainder( Left, Right )", _
            Decimal.Remainder( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.Multiply( Decimal, Decimal ), " & vbCrLf & _
            "  Decimal.Divide( Decimal, Decimal ), and " & vbCrLf & _
            "  Decimal.Remainder( Decimal, Decimal ) " & vbCrLf & _
            "methods generates the following output. It displays " & _
            "the product, " & vbCrLf & "quotient, and remainder " & _
            "of several pairs of Decimal objects." )

        ' Create pairs of Decimal objects.
        ShowDecimalProQuoRem( 1000D, 7D )
        ShowDecimalProQuoRem( -1000D, 7D )
        ShowDecimalProQuoRem( _
            new Decimal( 1230000000, 0, 0, False, 7 ), _
            0.0012300D )
        ShowDecimalProQuoRem( 12345678900000000D, _
            0.0000000012345678D )
        ShowDecimalProQuoRem( 123456789.0123456789D, _
            123456789.1123456789D )
    End Sub
End Module

' This example of the
'   Decimal.Multiply( Decimal, Decimal ),
'   Decimal.Divide( Decimal, Decimal ), and
'   Decimal.Remainder( Decimal, Decimal )
' methods generates the following output. It displays the product,
' quotient, and remainder of several pairs of Decimal objects.
'
' Decimal Left                                                  1000
' Decimal Right                                                    7
' Decimal.Multiply( Left, Right )                               7000
' Decimal.Divide( Left, Right )       142.85714285714285714285714286
' Decimal.Remainder( Left, Right )                                 6
'
' Decimal Left                                                 -1000
' Decimal Right                                                    7
' Decimal.Multiply( Left, Right )                              -7000
' Decimal.Divide( Left, Right )      -142.85714285714285714285714286
' Decimal.Remainder( Left, Right )                                -6
'
' Decimal Left                                           123.0000000
' Decimal Right                                              0.00123
' Decimal.Multiply( Left, Right )                     0.151290000000
' Decimal.Divide( Left, Right )                            100000.00
' Decimal.Remainder( Left, Right )                                 0
'
' Decimal Left                                     12345678900000000
' Decimal Right                                   0.0000000012345678
' Decimal.Multiply( Left, Right )          15241577.6390794200000000
' Decimal.Divide( Left, Right )       10000000729000059778004901.796
' Decimal.Remainder( Left, Right )                    0.000000000983
'
' Decimal Left                                  123456789.0123456789
' Decimal Right                                 123456789.1123456789
' Decimal.Multiply( Left, Right )     15241578765584515.651425087878
' Decimal.Divide( Left, Right )       0.9999999991899999933660999449
' Decimal.Remainder( Left, Right )              123456789.0123456789

// Example of the decimal.Multiply, decimal.Divide, and
// decimal.Remainder methods.
using System;
using Microsoft.VisualBasic;

class DecimalMulDivRemDemo
{
    const string dataFmt = "{0,-35}{1,31}";

    // Display decimal parameters and their product, quotient, and
    // remainder.
    public static void ShowDecimalProQuoRem( decimal Left, decimal Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Left", Left );
        Console.WriteLine( dataFmt, "decimal Right", Right );
        Console.WriteLine( dataFmt, "decimal.Multiply( Left, Right )",
            decimal.Multiply( Left, Right ) );
        Console.WriteLine( dataFmt, "decimal.Divide( Left, Right )",
            decimal.Divide( Left, Right ) );
        Console.WriteLine( dataFmt, "decimal.Remainder( Left, Right )",
            decimal.Remainder( Left, Right ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.Multiply( decimal, decimal ), \n" +
            "  decimal.Divide( decimal, decimal ), and \n" +
            "  decimal.Remainder( decimal, decimal ) \n" +
            "methods generates the following output. It displays " +
            "the product, \nquotient, and remainder of several " +
            "pairs of decimal objects." );

        // Create pairs of decimal objects.
        ShowDecimalProQuoRem( 1000M, 7M );
        ShowDecimalProQuoRem( -1000M, 7M );
        ShowDecimalProQuoRem(
            new decimal( 1230000000, 0, 0, false, 7 ), 0.0012300M );
        ShowDecimalProQuoRem( 12345678900000000M,
            0.0000000012345678M );
        ShowDecimalProQuoRem( 123456789.0123456789M,
            123456789.1123456789M );
    }
}

/*
This example of the
  decimal.Multiply( decimal, decimal ),
  decimal.Divide( decimal, decimal ), and
  decimal.Remainder( decimal, decimal )
methods generates the following output. It displays the product,
quotient, and remainder of several pairs of decimal objects.

decimal Left                                                  1000
decimal Right                                                    7
decimal.Multiply( Left, Right )                               7000
decimal.Divide( Left, Right )       142.85714285714285714285714286
decimal.Remainder( Left, Right )                                 6

decimal Left                                                 -1000
decimal Right                                                    7
decimal.Multiply( Left, Right )                              -7000
decimal.Divide( Left, Right )      -142.85714285714285714285714286
decimal.Remainder( Left, Right )                                -6

decimal Left                                           123.0000000
decimal Right                                            0.0012300
decimal.Multiply( Left, Right )                   0.15129000000000
decimal.Divide( Left, Right )                               100000
decimal.Remainder( Left, Right )                                 0

decimal Left                                     12345678900000000
decimal Right                                   0.0000000012345678
decimal.Multiply( Left, Right )          15241577.6390794200000000
decimal.Divide( Left, Right )       10000000729000059778004901.796
decimal.Remainder( Left, Right )                    0.000000000983

decimal Left                                  123456789.0123456789
decimal Right                                 123456789.1123456789
decimal.Multiply( Left, Right )     15241578765584515.651425087878
decimal.Divide( Left, Right )       0.9999999991899999933660999449
decimal.Remainder( Left, Right )              123456789.0123456789
*/

// Example of the Decimal::Multiply, Decimal::Divide, and
// Decimal::Remainder methods.
using namespace System;

// Display Decimal parameters and their product, quotient, and
// remainder.
void ShowDecimalProQuoRem( Decimal Left, Decimal Right )
{
   String^ dataFmt = "{0,-35}{1,31}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Left", Left );
   Console::WriteLine( dataFmt, "Decimal Right", Right );
   Console::WriteLine( dataFmt, "Decimal::Multiply( Left, Right )", Decimal::Multiply( Left, Right ) );
   Console::WriteLine( dataFmt, "Decimal::Divide( Left, Right )", Decimal::Divide( Left, Right ) );
   Console::WriteLine( dataFmt, "Decimal::Remainder( Left, Right )", Decimal::Remainder( Left, Right ) );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::Multiply( Decimal, Decimal ), \n"
   "  Decimal::Divide( Decimal, Decimal ), and \n"
   "  Decimal::Remainder( Decimal, Decimal ) \n"
   "methods generates the following output. It displays "
   "the product, \nquotient, and remainder of several "
   "pairs of Decimal objects." );

   // Create pairs of Decimal objects.
   ShowDecimalProQuoRem( Decimal::Parse( "1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "-1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal(1230000000,0,0,false,7), Decimal::Parse( "0.0012300" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "12345678900000000" ), Decimal::Parse( "0.0000000012345678" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "123456789.0123456789" ), Decimal::Parse( "123456789.1123456789" ) );
}

/*
This example of the
  Decimal::Multiply( Decimal, Decimal ),
  Decimal::Divide( Decimal, Decimal ), and
  Decimal::Remainder( Decimal, Decimal )
methods generates the following output. It displays the product,
quotient, and remainder of several pairs of Decimal objects.

Decimal Left                                                  1000
Decimal Right                                                    7
Decimal::Multiply( Left, Right )                              7000
Decimal::Divide( Left, Right )      142.85714285714285714285714286
Decimal::Remainder( Left, Right )                                6

Decimal Left                                                 -1000
Decimal Right                                                    7
Decimal::Multiply( Left, Right )                             -7000
Decimal::Divide( Left, Right )     -142.85714285714285714285714286
Decimal::Remainder( Left, Right )                               -6

Decimal Left                                           123.0000000
Decimal Right                                            0.0012300
Decimal::Multiply( Left, Right )                  0.15129000000000
Decimal::Divide( Left, Right )                              100000
Decimal::Remainder( Left, Right )                                0

Decimal Left                                     12345678900000000
Decimal Right                                   0.0000000012345678
Decimal::Multiply( Left, Right )         15241577.6390794200000000
Decimal::Divide( Left, Right )      10000000729000059778004901.796
Decimal::Remainder( Left, Right )                   0.000000000983

Decimal Left                                  123456789.0123456789
Decimal Right                                 123456789.1123456789
Decimal::Multiply( Left, Right )    15241578765584515.651425087878
Decimal::Divide( Left, Right )      0.9999999991899999933660999449
Decimal::Remainder( Left, Right )             123456789.0123456789
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Add
Subtract
Divide


Decimal ..::.Negate 方法

Decimal
.
.
::
.
Negate 方法
Decimal 结构

返回指定的 Decimal 值乘以 -1 的结果。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Negate ( _
    d As Decimal _
) As Decimal
public static decimal Negate(
    decimal d
)
public:
static Decimal Negate(
    Decimal d
)
static member Negate :
        d:decimal -> decimal

参数

d
类型： System Decimal
Decimal。

返回值

类型： System Decimal
值为 d 的 Decimal，但符号相反。
- 或 -
如果 d 为零，则为零。

下面的代码示例使用 Negate 方法，更改几个 Decimal 值的符号。

' Example of the Decimal.Negate, Decimal.Floor, and Decimal.Truncate
' methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFloorNegTruncDemo

    Const dataFmt As String = "{0,-30}{1,26}"

    ' Display Decimal parameters and their product, quotient, and
    ' remainder.
    Sub ShowDecimalFloorNegTrunc( Argument as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Argument", Argument )
        Console.WriteLine( dataFmt, _
            "Decimal.Negate( Argument )", _
            Decimal.Negate( Argument ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Floor( Argument )", _
            Decimal.Floor( Argument ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Truncate( Argument )", _
            Decimal.Truncate( Argument ) )
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.Negate( Decimal ), " & vbCrLf & _
            "  Decimal.Floor( Decimal ), and " & vbCrLf & _
            "  Decimal.Truncate( Decimal ) " & vbCrLf & _
            "methods generates the following output." )

        ' Create pairs of Decimal objects.
        ShowDecimalFloorNegTrunc( 0D )
        ShowDecimalFloorNegTrunc( 123.456D )
        ShowDecimalFloorNegTrunc( -123.456D )
        ShowDecimalFloorNegTrunc( _
            new Decimal( 1230000000, 0, 0, True, 7 ) )
        ShowDecimalFloorNegTrunc( -9999999999.9999999999D )
    End Sub
End Module

' This example of the
'   Decimal.Negate( Decimal ),
'   Decimal.Floor( Decimal ), and
'   Decimal.Truncate( Decimal )
' methods generates the following output.
'
' Decimal Argument                                       0
' Decimal.Negate( Argument )                             0
' Decimal.Floor( Argument )                              0
' Decimal.Truncate( Argument )                           0
'
' Decimal Argument                                 123.456
' Decimal.Negate( Argument )                      -123.456
' Decimal.Floor( Argument )                            123
' Decimal.Truncate( Argument )                         123
'
' Decimal Argument                                -123.456
' Decimal.Negate( Argument )                       123.456
' Decimal.Floor( Argument )                           -124
' Decimal.Truncate( Argument )                        -123
'
' Decimal Argument                            -123.0000000
' Decimal.Negate( Argument )                   123.0000000
' Decimal.Floor( Argument )                           -123
' Decimal.Truncate( Argument )                        -123
'
' Decimal Argument                  -9999999999.9999999999
' Decimal.Negate( Argument )         9999999999.9999999999
' Decimal.Floor( Argument )                   -10000000000
' Decimal.Truncate( Argument )                 -9999999999

// Example of the decimal.Negate, decimal.Floor, and decimal.Truncate
// methods.
using System;

class DecimalFloorNegTruncDemo
{
    const string dataFmt = "{0,-30}{1,26}";

    // Display decimal parameters and the method results.
    public static void ShowDecimalFloorNegTrunc( decimal Argument )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Argument", Argument );
        Console.WriteLine( dataFmt, "decimal.Negate( Argument )",
            decimal.Negate( Argument ) );
        Console.WriteLine( dataFmt, "decimal.Floor( Argument )",
            decimal.Floor( Argument ) );
        Console.WriteLine( dataFmt, "decimal.Truncate( Argument )",
            decimal.Truncate( Argument ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.Negate( decimal ), \n" +
            "  decimal.Floor( decimal ), and \n" +
            "  decimal.Truncate( decimal ) \n" +
            "methods generates the following output." );

        // Create pairs of decimal objects.
        ShowDecimalFloorNegTrunc( 0M );
        ShowDecimalFloorNegTrunc( 123.456M );
        ShowDecimalFloorNegTrunc( -123.456M );
        ShowDecimalFloorNegTrunc(
            new decimal( 1230000000, 0, 0, true, 7 ) );
        ShowDecimalFloorNegTrunc( -9999999999.9999999999M );
    }
}

/*
This example of the
  decimal.Negate( decimal ),
  decimal.Floor( decimal ), and
  decimal.Truncate( decimal )
methods generates the following output.

decimal Argument                                       0
decimal.Negate( Argument )                             0
decimal.Floor( Argument )                              0
decimal.Truncate( Argument )                           0

decimal Argument                                 123.456
decimal.Negate( Argument )                      -123.456
decimal.Floor( Argument )                            123
decimal.Truncate( Argument )                         123

decimal Argument                                -123.456
decimal.Negate( Argument )                       123.456
decimal.Floor( Argument )                           -124
decimal.Truncate( Argument )                        -123

decimal Argument                            -123.0000000
decimal.Negate( Argument )                   123.0000000
decimal.Floor( Argument )                           -123
decimal.Truncate( Argument )                        -123

decimal Argument                  -9999999999.9999999999
decimal.Negate( Argument )         9999999999.9999999999
decimal.Floor( Argument )                   -10000000000
decimal.Truncate( Argument )                 -9999999999
*/

// Example of the Decimal::Negate, Decimal::Floor, and
// Decimal::Truncate methods.
using namespace System;

// Display Decimal parameters and the method results.
void ShowDecimalFloorNegTrunc( Decimal Argument )
{
   String^ dataFmt = "{0,-30}{1,26}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Argument", Argument );
   Console::WriteLine( dataFmt, "Decimal::Negate( Argument )", Decimal::Negate( Argument ) );
   Console::WriteLine( dataFmt, "Decimal::Floor( Argument )", Decimal::Floor( Argument ) );
   Console::WriteLine( dataFmt, "Decimal::Truncate( Argument )", Decimal::Truncate( Argument ) );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::Negate( Decimal ), \n"
   "  Decimal::Floor( Decimal ), and \n"
   "  Decimal::Truncate( Decimal ) \n"
   "methods generates the following output." );

   // Create pairs of Decimal objects.
   ShowDecimalFloorNegTrunc( Decimal::Parse( "0" ) );
   ShowDecimalFloorNegTrunc( Decimal::Parse( "123.456" ) );
   ShowDecimalFloorNegTrunc( Decimal::Parse( "-123.456" ) );
   ShowDecimalFloorNegTrunc( Decimal(1230000000,0,0,true,7) );
   ShowDecimalFloorNegTrunc( Decimal::Parse( "-9999999999.9999999999" ) );
}

/*
This example of the
  Decimal::Negate( Decimal ),
  Decimal::Floor( Decimal ), and
  Decimal::Truncate( Decimal )
methods generates the following output.

Decimal Argument                                       0
Decimal::Negate( Argument )                            0
Decimal::Floor( Argument )                             0
Decimal::Truncate( Argument )                          0

Decimal Argument                                 123.456
Decimal::Negate( Argument )                     -123.456
Decimal::Floor( Argument )                           123
Decimal::Truncate( Argument )                        123

Decimal Argument                                -123.456
Decimal::Negate( Argument )                      123.456
Decimal::Floor( Argument )                          -124
Decimal::Truncate( Argument )                       -123

Decimal Argument                            -123.0000000
Decimal::Negate( Argument )                  123.0000000
Decimal::Floor( Argument )                          -123
Decimal::Truncate( Argument )                       -123

Decimal Argument                  -9999999999.9999999999
Decimal::Negate( Argument )        9999999999.9999999999
Decimal::Floor( Argument )                  -10000000000
Decimal::Truncate( Argument )                -9999999999
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.Parse 方法

Decimal
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

将数字的字符串表示形式转换为它的等效 Decimal 表示形式。

名称 说明
页首

参考

Decimal 结构
Decimal 成员
System 命名空间
TryParse


Decimal ..::.Parse 方法 (String)

Decimal
.
.
::
.
Parse 方法 (String)
Decimal 结构

将数字的字符串表示形式转换为它的等效 Decimal 表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As Decimal
public static decimal Parse(
    string s
)
public:
static Decimal Parse(
    String^ s
)
static member Parse :
        s:string -> decimal

参数

s
类型： System String
要转换的数字的字符串表示形式。

返回值

类型： System Decimal
与 s 中包含的数字等效的 Decimal 数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数中包含一个如下形式的数：

[ws][sign][digits,]digits[.fractional-digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。
, | 区域性特定的千位分隔符。
. | 区域性特定的小数点符号。
fractional-digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Number 样式解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Decimal..::.Parse(String, NumberStyles) 或 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Number 样式解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Decimal..::.Parse(String, NumberStyles) 或 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Number 样式解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Decimal..::.Parse(String, NumberStyles) 或 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法。

使用为当前系统区域性初始化的 NumberFormatInfo 中的格式信息分析参数 s。有关更多信息，请参见 CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Decimal..::.Parse(String, IFormatProvider) 或 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用为当前系统区域性初始化的 NumberFormatInfo 中的格式信息分析参数 s。有关更多信息，请参见 CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Decimal..::.Parse(String, IFormatProvider) 或 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用为当前系统区域性初始化的 NumberFormatInfo 中的格式信息分析参数 s。有关更多信息，请参见 CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Decimal..::.Parse(String, IFormatProvider) 或 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法。

如有必要，则用就近舍入的方法舍入 s 的值。

Decimal 的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。 Decimal 的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，而适用的货币分隔符或小数点分隔符和组分隔符是相同的，则分析操作会假定该分隔符是小数点分隔符而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，而适用的货币分隔符或小数点分隔符和组分隔符是相同的，则分析操作会假定该分隔符是小数点分隔符而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的代码示例使用 Parse(String) 方法来分析 Decimal 值的字符串表示形式。

Dim value As String
Dim number As Decimal

' Parse an integer with thousands separators.
value = "16,523,421"
number = Decimal.Parse(value)
Console.WriteLine("'{0}' converted to {1}.", value, number)
' Displays:
'    16,523,421' converted to 16523421.

' Parse a floating point value with thousands separators
value = "25,162.1378"
number = Decimal.Parse(value)
Console.WriteLine("'{0}' converted to {1}.", value, number)
' Displays:
'    25,162.1378' converted to 25162.1378.

' Parse a floating point number with US currency symbol.
value = "$16,321,421.75"
Try
   number = Decimal.Parse(value)
   Console.WriteLine("'{0}' converted to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", value)
End Try
' Displays:
'    Unable to parse '$16,321,421.75'.

' Parse a number in exponential notation
value = "1.62345e-02"
Try
   number = Decimal.Parse(value)
   Console.WriteLine("'{0}' converted to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", value)
End Try
' Displays:
'    Unable to parse '1.62345e-02'.

string value;
decimal number;
// Parse an integer with thousands separators.
value = "16,523,421";
number = Decimal.Parse(value);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
//    16,523,421' converted to 16523421.

// Parse a floating point value with thousands separators
value = "25,162.1378";
number = Decimal.Parse(value);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
//    25,162.1378' converted to 25162.1378.

// Parse a floating point number with US currency symbol.
value = "$16,321,421.75";
try
{
   number = Decimal.Parse(value);
   Console.WriteLine("'{0}' converted to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", value);
}
// Displays:
//    Unable to parse '$16,321,421.75'.

// Parse a number in exponential notation
value = "1.62345e-02";
try
{
   number = Decimal.Parse(value);
   Console.WriteLine("'{0}' converted to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", value);
}
// Displays:
//    Unable to parse '1.62345e-02'.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Parse 重载
System 命名空间
TryParse
ToString

其他资源

分析数值字符串


Decimal ..::.Parse 方法 (String, NumberStyles)

Decimal
.
.
::
.
Parse 方法 (String, NumberStyles)
Decimal 结构

将指定样式的数字的字符串表示形式转换为它的等效 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As Decimal
public static decimal Parse(
    string s,
    NumberStyles style
)
public:
static Decimal Parse(
    String^ s,
    NumberStyles style
)
static member Parse :
        s:string *
        style:NumberStyles -> decimal

参数

s
类型： System String
要转换的数字的字符串表示形式。
style
类型： System.Globalization NumberStyles
NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个用来指定的典型值为 Number。 NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个用来指定的典型值为 Number。

返回值

类型： System Decimal
Decimal 数，它与 style 所指定的 s 中包含的数字等效。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 为 AllowHexSpecifier 值。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字

style 参数定义 s 参数中允许的样式元素（例如，千位分隔符、空白或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，千位分隔符、空白或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，千位分隔符、空白或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员：

  • NumberStyles AllowHexSpecifier

  • HexNumber

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional-digits][e[sign]digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits | 一系列从 0 到 9 之间的数字。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可以出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional-digits | 一系列从 0 到 9 之间的数字。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 一系列从 0 到 9 之间的数字。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
e | “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。

仅带有数字的字符串（与 None 样式对应）总是可以分析成功。剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 None 样式对应）总是可以分析成功。剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 None 样式对应）总是可以分析成功。剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 digits 元素。
AllowDecimalPoint | . 和 fractional-digits 元素。
AllowExponent | s 参数也可以使用指数表示法。此标志支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。 s 参数也可以使用指数表示法。此标志支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | , 元素。
AllowCurrencySymbol | $ 元素。
Currency | 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 开头的 sign 以及 . 符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 开头的 sign 以及 . 符号。s 参数也可以使用指数表示法。
Number | ws、sign、, 和 . 元素。
Any | 所有样式（除 s 之外）都不能表示十六进制数字。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。

Decimal 的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。 Decimal 的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，且 styles 包含 NumberStyles..::.AllowThousands 和 NumberStyles..::.AllowDecimalPoint 值，并且适用的货币分隔符或数字小数点分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，且 styles 包含 NumberStyles..::.AllowThousands 和 NumberStyles..::.AllowDecimalPoint 值，并且适用的货币分隔符或数字小数点分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的代码示例通过 Parse(String, NumberStyles) 方法分析使用 en-US 区域性的 Decimal 值的字符串表示形式。

Dim value As String
Dim number As Decimal
Dim style As NumberStyles

' Parse string with a floating point value using NumberStyles.None.
value = "8694.12"
style = NumberStyles.None
Try
   number = Decimal.Parse(value, style)
   Console.WriteLine("'{0}' converted to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", value)
End Try
' Displays:
'    Unable to parse '8694.12'.

' Parse string with a floating point value and allow decimal point.
style = NumberStyles.AllowDecimalPoint
number = Decimal.Parse(value, style)
Console.WriteLine("'{0}' converted to {1}.", value, number)
' Displays:
'    '8694.12' converted to 8694.12.

' Parse string with negative value in parentheses
value = "(1,789.34)"
style = NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands Or _
        NumberStyles.AllowParentheses
number = Decimal.Parse(value, style)
Console.WriteLine("'{0}' converted to {1}.", value, number)
' Displays:
'    '(1,789.34)' converted to -1789.34.

' Parse string using Number style
value = " -17,623.49 "
style = NumberStyles.Number
number = Decimal.Parse(value, style)
Console.WriteLine("'{0}' converted to {1}.", value, number)
' Displays:
'    ' -17,623.49 ' converted to -17623.49.

string value;
decimal number;
NumberStyles style;

// Parse string with a floating point value using NumberStyles.None.
value = "8694.12";
style = NumberStyles.None;
try
{
   number = Decimal.Parse(value, style);
   Console.WriteLine("'{0}' converted to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", value);
}
// Displays:
//    Unable to parse '8694.12'.

// Parse string with a floating point value and allow decimal point.
style = NumberStyles.AllowDecimalPoint;
number = Decimal.Parse(value, style);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
//    '8694.12' converted to 8694.12.

// Parse string with negative value in parentheses
value = "(1,789.34)";
style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands |
        NumberStyles.AllowParentheses;
number = Decimal.Parse(value, style);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
//    '(1,789.34)' converted to -1789.34.

// Parse string using Number style
value = " -17,623.49 ";
style = NumberStyles.Number;
number = Decimal.Parse(value, style);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
//    ' -17,623.49 ' converted to -17623.49.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Parse 重载
System 命名空间
TryParse
ToString

其他资源

分析数值字符串


Decimal ..::.Parse 方法 (String, IFormatProvider)

Decimal
.
.
::
.
Parse 方法 (String, IFormatProvider)
Decimal 结构

使用指定的区域性特定的格式信息将数字的字符串表示形式转换为它的 Decimal 等效项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As Decimal
public static decimal Parse(
    string s,
    IFormatProvider provider
)
public:
static Decimal Parse(
    String^ s,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        provider:IFormatProvider -> decimal

参数

s
类型： System String
要转换的数字的字符串表示形式。
provider
类型： System IFormatProvider
一个 IFormatProvider，它提供有关 s 的区域性特定分析信息。

返回值

类型： System Decimal
Decimal 数字，它等效于 provider 所指定的 s 包含的数字。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字

此 Parse(String, IFormatProvider) 方法重载通常用于将可以多种方式格式化的文本转换为 Decimal 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。 此 Parse(String, IFormatProvider) 方法重载通常用于将可以多种方式格式化的文本转换为 Decimal 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。

s 参数包含一个如下形式的数字：

[ws][sign][digits,]digits[.fractional-digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。
, | 区域性特定的千位分隔符。
. | 区域性特定的小数点符号。
fractional-digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Number 样式解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Number 样式解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Number 样式解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法。

provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

Decimal 对象的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。 Decimal 对象的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Decimal 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Decimal 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Decimal 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Decimal 值。

Protected Sub OkToDecimal_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OkToDecimal.Click
   Dim locale As String
   Dim culture As CultureInfo
   Dim number As Decimal

   ' Return if string is empty
   If String.IsNullOrEmpty(Me.inputNumber.Text) Then Exit Sub

   ' Get locale of web request to determine possible format of number
   If Request.UserLanguages.Length = 0 Then Exit Sub
   locale = Request.UserLanguages(0)
   If String.IsNullOrEmpty(locale) Then Exit Sub

   ' Instantiate CultureInfo object for the user's locale
   culture = New CultureInfo(locale)

   ' Convert user input from a string to a number
   Try
      number = Decimal.Parse(Me.inputNumber.Text, culture.NumberFormat)
   Catch ex As FormatException
      Exit Sub
   Catch ex As Exception
      Exit Sub
   End Try

   ' Output number to label on web form
   Me.outputNumber.Text = "Number is " & number.ToString()
End Sub

protected void OkToDecimal_Click(object sender, EventArgs e)
{
   string locale;
   decimal number;
   CultureInfo culture;

   // Return if string is empty
   if (String.IsNullOrEmpty(this.inputNumber.Text))
      return;

   // Get locale of web request to determine possible format of number
   if (Request.UserLanguages.Length == 0)
      return;
   locale = Request.UserLanguages[0];
   if (String.IsNullOrEmpty(locale))
      return;

  // Instantiate CultureInfo object for the user's locale
   culture = new CultureInfo(locale);

   // Convert user input from a string to a number
   try
   {
      number = Decimal.Parse(this.inputNumber.Text, culture.NumberFormat);
   }
   catch (FormatException)
   {
      return;
   }
   catch (Exception)
   {
      return;
   }
   // Output number to label on web form
   this.outputNumber.Text = "Number is " + number.ToString();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Parse 重载
System 命名空间
TryParse
ToString

其他资源

分析数值字符串


Decimal ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

Decimal
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
Decimal 结构

使用指定样式和区域性特定格式将数字的字符串表示形式转换为其 Decimal 等效项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As Decimal
public static decimal Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
public:
static Decimal Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> decimal

参数

s
类型： System String
要转换的数字的字符串表示形式。
style
类型： System.Globalization NumberStyles
NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个用来指定的典型值为 Number。 NumberStyles 值的按位组合，指示可出现在 s 中的样式元素。一个用来指定的典型值为 Number。
provider
类型： System IFormatProvider
IFormatProvider 对象，提供有关 s 的格式的区域性特定的信息。

返回值

类型： System Decimal
Decimal 数，它与 style 和 provider 所指定的 s 中包含的数字等效。
异常 | 条件
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 为 AllowHexSpecifier 值。

style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员：

  • NumberStyles AllowHexSpecifier

  • HexNumber

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional-digits][e[sign]digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyNegativePattern 和 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyNegativePattern 和 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyNegativePattern 和 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits | 一系列从 0 到 9 之间的数字。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 定义的区域性的千位分隔符可以出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 定义的区域性的千位分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 定义的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 定义的区域性的小数点符号可以出现在 s 中。
fractional-digits | 一系列从 0 到 9 之间的数字。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 一系列从 0 到 9 之间的数字。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
e | “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。

仅带有数字的字符串（与 None 样式对应）总是可以分析成功。剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 None 样式对应）总是可以分析成功。剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 None 样式对应）总是可以分析成功。剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 digits 元素。
AllowDecimalPoint | . 和 fractional-digits 元素。
AllowExponent | s 参数也可以使用指数表示法。此标志支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。 s 参数也可以使用指数表示法。此标志支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | , 元素。
AllowCurrencySymbol | $ 元素。
Currency | 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 元素和 . 符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 元素和 . 符号。s 参数也可以使用指数表示法。
Number | ws、sign、, 和 . 元素。
Any | 所有样式（除 s 之外）都不能表示十六进制数字。

provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

Decimal 对象的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。 Decimal 对象的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例使用各种 style 和 provider 参数来分析 Decimal 值的字符串表示形式。

Dim value As String
Dim number As Decimal
Dim style As NumberStyles
Dim provider As CultureInfo

' Parse string using "." as the thousands separator
' and " " as the decimal separator.
value = "892 694,12"
style = NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands
provider = New CultureInfo("fr-FR")

number = Decimal.Parse(value, style, provider)
Console.WriteLine("'{0}' converted to {1}.", value, number)
' Displays:
'    892 694,12' converted to 892694.12.

Try
   number = Decimal.Parse(value, style, CultureInfo.InvariantCulture)
   Console.WriteLine("'{0}' converted to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", value)
End Try
' Displays:
'    Unable to parse '892 694,12'.

' Parse string using "$" as the currency symbol for en-GB and
' en-us cultures.
value = "$6,032.51"
style = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
provider = New CultureInfo("en-GB")

Try
   number = Decimal.Parse(value, style, provider)
   Console.WriteLine("'{0}' converted to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", value)
End Try
' Displays:
'    Unable to parse '$6,032.51'.

provider = New CultureInfo("en-US")
number = Decimal.Parse(value, style, provider)
Console.WriteLine("'{0}' converted to {1}.", value, number)
' Displays:
'    '$6,032.51' converted to 6032.51.

string value;
decimal number;
NumberStyles style;
CultureInfo provider;

// Parse string using "." as the thousands separator
// and " " as the decimal separator.
value = "892 694,12";
style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
provider = new CultureInfo("fr-FR");

number = Decimal.Parse(value, style, provider);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
//    892 694,12' converted to 892694.12.

try
{
   number = Decimal.Parse(value, style, CultureInfo.InvariantCulture);
   Console.WriteLine("'{0}' converted to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", value);
}
// Displays:
//    Unable to parse '892 694,12'.

// Parse string using "$" as the currency symbol for en-GB and
// en-us cultures.
value = "$6,032.51";
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
provider = new CultureInfo("en-GB");

try
{
   number = Decimal.Parse(value, style, provider);
   Console.WriteLine("'{0}' converted to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", value);
}
// Displays:
//    Unable to parse '$6,032.51'.

provider = new CultureInfo("en-US");
number = Decimal.Parse(value, style, provider);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
//    '$6,032.51' converted to 6032.51.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Parse 重载
System 命名空间
TryParse
ToString

其他资源

分析数值字符串


Decimal ..::.Remainder 方法

Decimal
.
.
::
.
Remainder 方法
Decimal 结构

计算两个 Decimal 值相除后的余数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Remainder ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal Remainder(
    decimal d1,
    decimal d2
)
public:
static Decimal Remainder(
    Decimal d1,
    Decimal d2
)
static member Remainder :
        d1:decimal *
        d2:decimal -> decimal

参数

d1
类型： System Decimal
Decimal（被除数）。
d2
类型： System Decimal
Decimal（除数）。

返回值

类型： System Decimal
Decimal，它是 d1 除以 d2 所得的余数。
异常 | 条件
DivideByZeroException | d2 是零。
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的代码示例创建几对 Decimal 值，并使用 Remainder 方法计算两个值相除所得到的余数。

' Example of the Decimal.Multiply, Decimal.Divide, and
' Decimal.Remainder methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalMulDivRemDemo

    Const dataFmt As String = "{0,-35}{1,31}"

    ' Display Decimal parameters and their product, quotient, and
    ' remainder.
    Sub ShowDecimalProQuoRem( Left as Decimal, Right as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Left", Left )
        Console.WriteLine( dataFmt, "Decimal Right", Right )
        Console.WriteLine( dataFmt, _
            "Decimal.Multiply( Left, Right )", _
            Decimal.Multiply( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Divide( Left, Right )", _
            Decimal.Divide( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Remainder( Left, Right )", _
            Decimal.Remainder( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.Multiply( Decimal, Decimal ), " & vbCrLf & _
            "  Decimal.Divide( Decimal, Decimal ), and " & vbCrLf & _
            "  Decimal.Remainder( Decimal, Decimal ) " & vbCrLf & _
            "methods generates the following output. It displays " & _
            "the product, " & vbCrLf & "quotient, and remainder " & _
            "of several pairs of Decimal objects." )

        ' Create pairs of Decimal objects.
        ShowDecimalProQuoRem( 1000D, 7D )
        ShowDecimalProQuoRem( -1000D, 7D )
        ShowDecimalProQuoRem( _
            new Decimal( 1230000000, 0, 0, False, 7 ), _
            0.0012300D )
        ShowDecimalProQuoRem( 12345678900000000D, _
            0.0000000012345678D )
        ShowDecimalProQuoRem( 123456789.0123456789D, _
            123456789.1123456789D )
    End Sub
End Module

' This example of the
'   Decimal.Multiply( Decimal, Decimal ),
'   Decimal.Divide( Decimal, Decimal ), and
'   Decimal.Remainder( Decimal, Decimal )
' methods generates the following output. It displays the product,
' quotient, and remainder of several pairs of Decimal objects.
'
' Decimal Left                                                  1000
' Decimal Right                                                    7
' Decimal.Multiply( Left, Right )                               7000
' Decimal.Divide( Left, Right )       142.85714285714285714285714286
' Decimal.Remainder( Left, Right )                                 6
'
' Decimal Left                                                 -1000
' Decimal Right                                                    7
' Decimal.Multiply( Left, Right )                              -7000
' Decimal.Divide( Left, Right )      -142.85714285714285714285714286
' Decimal.Remainder( Left, Right )                                -6
'
' Decimal Left                                           123.0000000
' Decimal Right                                              0.00123
' Decimal.Multiply( Left, Right )                     0.151290000000
' Decimal.Divide( Left, Right )                            100000.00
' Decimal.Remainder( Left, Right )                                 0
'
' Decimal Left                                     12345678900000000
' Decimal Right                                   0.0000000012345678
' Decimal.Multiply( Left, Right )          15241577.6390794200000000
' Decimal.Divide( Left, Right )       10000000729000059778004901.796
' Decimal.Remainder( Left, Right )                    0.000000000983
'
' Decimal Left                                  123456789.0123456789
' Decimal Right                                 123456789.1123456789
' Decimal.Multiply( Left, Right )     15241578765584515.651425087878
' Decimal.Divide( Left, Right )       0.9999999991899999933660999449
' Decimal.Remainder( Left, Right )              123456789.0123456789

// Example of the decimal.Multiply, decimal.Divide, and
// decimal.Remainder methods.
using System;
using Microsoft.VisualBasic;

class DecimalMulDivRemDemo
{
    const string dataFmt = "{0,-35}{1,31}";

    // Display decimal parameters and their product, quotient, and
    // remainder.
    public static void ShowDecimalProQuoRem( decimal Left, decimal Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Left", Left );
        Console.WriteLine( dataFmt, "decimal Right", Right );
        Console.WriteLine( dataFmt, "decimal.Multiply( Left, Right )",
            decimal.Multiply( Left, Right ) );
        Console.WriteLine( dataFmt, "decimal.Divide( Left, Right )",
            decimal.Divide( Left, Right ) );
        Console.WriteLine( dataFmt, "decimal.Remainder( Left, Right )",
            decimal.Remainder( Left, Right ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.Multiply( decimal, decimal ), \n" +
            "  decimal.Divide( decimal, decimal ), and \n" +
            "  decimal.Remainder( decimal, decimal ) \n" +
            "methods generates the following output. It displays " +
            "the product, \nquotient, and remainder of several " +
            "pairs of decimal objects." );

        // Create pairs of decimal objects.
        ShowDecimalProQuoRem( 1000M, 7M );
        ShowDecimalProQuoRem( -1000M, 7M );
        ShowDecimalProQuoRem(
            new decimal( 1230000000, 0, 0, false, 7 ), 0.0012300M );
        ShowDecimalProQuoRem( 12345678900000000M,
            0.0000000012345678M );
        ShowDecimalProQuoRem( 123456789.0123456789M,
            123456789.1123456789M );
    }
}

/*
This example of the
  decimal.Multiply( decimal, decimal ),
  decimal.Divide( decimal, decimal ), and
  decimal.Remainder( decimal, decimal )
methods generates the following output. It displays the product,
quotient, and remainder of several pairs of decimal objects.

decimal Left                                                  1000
decimal Right                                                    7
decimal.Multiply( Left, Right )                               7000
decimal.Divide( Left, Right )       142.85714285714285714285714286
decimal.Remainder( Left, Right )                                 6

decimal Left                                                 -1000
decimal Right                                                    7
decimal.Multiply( Left, Right )                              -7000
decimal.Divide( Left, Right )      -142.85714285714285714285714286
decimal.Remainder( Left, Right )                                -6

decimal Left                                           123.0000000
decimal Right                                            0.0012300
decimal.Multiply( Left, Right )                   0.15129000000000
decimal.Divide( Left, Right )                               100000
decimal.Remainder( Left, Right )                                 0

decimal Left                                     12345678900000000
decimal Right                                   0.0000000012345678
decimal.Multiply( Left, Right )          15241577.6390794200000000
decimal.Divide( Left, Right )       10000000729000059778004901.796
decimal.Remainder( Left, Right )                    0.000000000983

decimal Left                                  123456789.0123456789
decimal Right                                 123456789.1123456789
decimal.Multiply( Left, Right )     15241578765584515.651425087878
decimal.Divide( Left, Right )       0.9999999991899999933660999449
decimal.Remainder( Left, Right )              123456789.0123456789
*/

// Example of the Decimal::Multiply, Decimal::Divide, and
// Decimal::Remainder methods.
using namespace System;

// Display Decimal parameters and their product, quotient, and
// remainder.
void ShowDecimalProQuoRem( Decimal Left, Decimal Right )
{
   String^ dataFmt = "{0,-35}{1,31}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Left", Left );
   Console::WriteLine( dataFmt, "Decimal Right", Right );
   Console::WriteLine( dataFmt, "Decimal::Multiply( Left, Right )", Decimal::Multiply( Left, Right ) );
   Console::WriteLine( dataFmt, "Decimal::Divide( Left, Right )", Decimal::Divide( Left, Right ) );
   Console::WriteLine( dataFmt, "Decimal::Remainder( Left, Right )", Decimal::Remainder( Left, Right ) );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::Multiply( Decimal, Decimal ), \n"
   "  Decimal::Divide( Decimal, Decimal ), and \n"
   "  Decimal::Remainder( Decimal, Decimal ) \n"
   "methods generates the following output. It displays "
   "the product, \nquotient, and remainder of several "
   "pairs of Decimal objects." );

   // Create pairs of Decimal objects.
   ShowDecimalProQuoRem( Decimal::Parse( "1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "-1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal(1230000000,0,0,false,7), Decimal::Parse( "0.0012300" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "12345678900000000" ), Decimal::Parse( "0.0000000012345678" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "123456789.0123456789" ), Decimal::Parse( "123456789.1123456789" ) );
}

/*
This example of the
  Decimal::Multiply( Decimal, Decimal ),
  Decimal::Divide( Decimal, Decimal ), and
  Decimal::Remainder( Decimal, Decimal )
methods generates the following output. It displays the product,
quotient, and remainder of several pairs of Decimal objects.

Decimal Left                                                  1000
Decimal Right                                                    7
Decimal::Multiply( Left, Right )                              7000
Decimal::Divide( Left, Right )      142.85714285714285714285714286
Decimal::Remainder( Left, Right )                                6

Decimal Left                                                 -1000
Decimal Right                                                    7
Decimal::Multiply( Left, Right )                             -7000
Decimal::Divide( Left, Right )     -142.85714285714285714285714286
Decimal::Remainder( Left, Right )                               -6

Decimal Left                                           123.0000000
Decimal Right                                            0.0012300
Decimal::Multiply( Left, Right )                  0.15129000000000
Decimal::Divide( Left, Right )                              100000
Decimal::Remainder( Left, Right )                                0

Decimal Left                                     12345678900000000
Decimal Right                                   0.0000000012345678
Decimal::Multiply( Left, Right )         15241577.6390794200000000
Decimal::Divide( Left, Right )      10000000729000059778004901.796
Decimal::Remainder( Left, Right )                   0.000000000983

Decimal Left                                  123456789.0123456789
Decimal Right                                 123456789.1123456789
Decimal::Multiply( Left, Right )    15241578765584515.651425087878
Decimal::Divide( Left, Right )      0.9999999991899999933660999449
Decimal::Remainder( Left, Right )             123456789.0123456789
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.Round 方法

Decimal
.
.
::
.
Round 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

将值舍入到最接近的整数或指定的小数位数。

名称 说明
页首

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.Round 方法 (Decimal)

Decimal
.
.
::
.
Round 方法 (Decimal)
Decimal 结构

将小数值舍入到最接近的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    d As Decimal _
) As Decimal
public static decimal Round(
    decimal d
)
public:
static Decimal Round(
    Decimal d
)
static member Round :
        d:decimal -> decimal

参数

d
类型： System Decimal
要舍入的小数。

返回值

类型： System Decimal
最接近 d 参数的整数。如果 d 正好处于两个整数中间，其中一个整数为偶数，另一个整数为奇数，则返回偶数。 最接近 d 参数的整数。如果 d 正好处于两个整数中间，其中一个整数为偶数，另一个整数为奇数，则返回偶数。
异常 | 条件
OverflowException | 结果超出了 Decimal 对象的范围。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
Round 重载
System 命名空间


Decimal ..::.Round 方法 (Decimal, Int32)

Decimal
.
.
::
.
Round 方法 (Decimal, Int32)
Decimal 结构

将 Decimal 值舍入到指定的小数位数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    d As Decimal, _
    decimals As Integer _
) As Decimal
public static decimal Round(
    decimal d,
    int decimals
)
public:
static Decimal Round(
    Decimal d,
    int decimals
)
static member Round :
        d:decimal *
        decimals:int -> decimal

参数

d
类型： System Decimal
要舍入的 Decimal 值。
decimals
类型： System Int32
指定数字要舍入到的小数位数的值，该值范围是从 0 到 28。

返回值

类型： System Decimal
Decimal 数等于舍入到 d 小数位数的 decimals。
异常 | 条件
ArgumentOutOfRangeException | decimals 不是 0 到 28 之间的值。

当 d 正好位于两个舍入值的正中间时，结果将是最右边小数位中有偶数位的舍入值。例如，当舍入为两位小数时，值 2.345 变成 2.34，而值 2.355 变成 2.36。此过程称为向偶舍入或就近舍入。 当 d 正好位于两个舍入值的正中间时，结果将是最右边小数位中有偶数位的舍入值。例如，当舍入为两位小数时，值 2.345 变成 2.34，而值 2.355 变成 2.36。此过程称为向偶舍入或就近舍入。 当 d 正好位于两个舍入值的正中间时，结果将是最右边小数位中有偶数位的舍入值。例如，当舍入为两位小数时，值 2.345 变成 2.34，而值 2.355 变成 2.36。此过程称为向偶舍入或就近舍入。

下面的代码示例使用 Round 方法，将几个 Decimal 值舍入为指定的小数位数。

' Example of the Decimal.Round method.
Imports System
Imports Microsoft.VisualBasic

Module DecimalRoundDemo

    Const dataFmt As String = "{0,26}{1,8}{2,26}"

    ' Display Decimal.Round parameters and the result.
    Sub ShowDecimalRound( Argument As Decimal, Digits As Integer )

        Dim rounded As Decimal = Decimal.Round( Argument, Digits )

        Console.WriteLine( dataFmt, Argument, Digits, rounded )
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & _
            "Decimal.Round( Decimal, Integer ) " & vbCrLf & _
            "method generates the following output." & vbCrLf )
        Console.WriteLine( dataFmt, "Argument", "Digits", "Result" )
        Console.WriteLine( dataFmt, "--------", "------", "------" )

        ' Create pairs of Decimal objects.
        ShowDecimalRound( 1.45D, 1 )
        ShowDecimalRound( 1.55D, 1 )
        ShowDecimalRound( 123.456789D, 4 )
        ShowDecimalRound( 123.456789D, 6 )
        ShowDecimalRound( 123.456789D, 8 )
        ShowDecimalRound( -123.456D, 0 )
        ShowDecimalRound( _
            New Decimal( 1230000000, 0, 0, True, 7 ), 3 )
        ShowDecimalRound( _
            New Decimal( 1230000000, 0, 0, True, 7 ), 11 )
        ShowDecimalRound( -9999999999.9999999999D, 9 )
        ShowDecimalRound( -9999999999.9999999999D, 10 )
    End Sub
End Module

' This example of the Decimal.Round( Decimal, Integer )
' method generates the following output.
'
'                  Argument  Digits                    Result
'                  --------  ------                    ------
'                      1.45       1                       1.4
'                      1.55       1                       1.6
'                123.456789       4                  123.4568
'                123.456789       6                123.456789
'                123.456789       8                123.456789
'                  -123.456       0                      -123
'              -123.0000000       3                  -123.000
'              -123.0000000      11              -123.0000000
'    -9999999999.9999999999       9    -10000000000.000000000
'    -9999999999.9999999999      10    -9999999999.9999999999

// Example of the decimal.Round method.
using System;

class DecimalRoundDemo
{
    const string dataFmt = "{0,26}{1,8}{2,26}";

    // Display decimal.Round parameters and the result.
    public static void ShowDecimalRound( decimal Argument, int Digits )
    {
        decimal rounded = decimal.Round( Argument, Digits );

        Console.WriteLine( dataFmt, Argument, Digits, rounded );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the " +
            "decimal.Round( decimal, Integer ) \n" +
            "method generates the following output.\n" );
        Console.WriteLine( dataFmt, "Argument", "Digits", "Result" );
        Console.WriteLine( dataFmt, "--------", "------", "------" );

        // Create pairs of decimal objects.
        ShowDecimalRound( 1.45M, 1 );
        ShowDecimalRound( 1.55M, 1 );
        ShowDecimalRound( 123.456789M, 4 );
        ShowDecimalRound( 123.456789M, 6 );
        ShowDecimalRound( 123.456789M, 8 );
        ShowDecimalRound( -123.456M, 0 );
        ShowDecimalRound(
            new decimal( 1230000000, 0, 0, true, 7 ), 3 );
        ShowDecimalRound(
            new decimal( 1230000000, 0, 0, true, 7 ), 11 );
        ShowDecimalRound( -9999999999.9999999999M, 9 );
        ShowDecimalRound( -9999999999.9999999999M, 10 );
    }
}

/*
This example of the decimal.Round( decimal, Integer )
method generates the following output.

                  Argument  Digits                    Result
                  --------  ------                    ------
                      1.45       1                       1.4
                      1.55       1                       1.6
                123.456789       4                  123.4568
                123.456789       6                123.456789
                123.456789       8                123.456789
                  -123.456       0                      -123
              -123.0000000       3                  -123.000
              -123.0000000      11              -123.0000000
    -9999999999.9999999999       9    -10000000000.000000000
    -9999999999.9999999999      10    -9999999999.9999999999
*/

// Example of the Decimal::Round method.
using namespace System;
#define dataFmt "{0,26}{1,8}{2,26}"

// Display Decimal::Round parameters and the result.
void ShowDecimalRound( Decimal Argument, int Digits )
{
   Decimal rounded = Decimal::Round( Argument, Digits );
   Console::WriteLine( dataFmt, Argument, Digits, rounded );
}

int main()
{
   Console::WriteLine( "This example of the "
   "Decimal::Round( Decimal, Integer ) \n"
   "method generates the following output.\n" );
   Console::WriteLine( dataFmt, "Argument", "Digits", "Result" );
   Console::WriteLine( dataFmt, "--------", "------", "------" );

   // Create pairs of Decimal objects.
   ShowDecimalRound( Decimal::Parse( "1.45" ), 1 );
   ShowDecimalRound( Decimal::Parse( "1.55" ), 1 );
   ShowDecimalRound( Decimal::Parse( "123.456789" ), 4 );
   ShowDecimalRound( Decimal::Parse( "123.456789" ), 6 );
   ShowDecimalRound( Decimal::Parse( "123.456789" ), 8 );
   ShowDecimalRound( Decimal::Parse( "-123.456" ), 0 );
   ShowDecimalRound( Decimal(1230000000,0,0,true,7), 3 );
   ShowDecimalRound( Decimal(1230000000,0,0,true,7), 11 );
   ShowDecimalRound( Decimal::Parse( "-9999999999.9999999999" ), 9 );
   ShowDecimalRound( Decimal::Parse( "-9999999999.9999999999" ), 10 );
}

/*
This example of the Decimal::Round( Decimal, Integer )
method generates the following output.

                  Argument  Digits                    Result
                  --------  ------                    ------
                      1.45       1                       1.4
                      1.55       1                       1.6
                123.456789       4                  123.4568
                123.456789       6                123.456789
                123.456789       8                123.456789
                  -123.456       0                      -123
              -123.0000000       3                  -123.000
              -123.0000000      11              -123.0000000
    -9999999999.9999999999       9    -10000000000.000000000
    -9999999999.9999999999      10    -9999999999.9999999999
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
Round 重载
System 命名空间
Floor
Truncate


Decimal ..::.Round 方法 (Decimal, MidpointRounding)

Decimal
.
.
::
.
Round 方法 (Decimal, MidpointRounding)
Decimal 结构

将小数值舍入到最接近的整数。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。 将小数值舍入到最接近的整数。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    d As Decimal, _
    mode As MidpointRounding _
) As Decimal
public static decimal Round(
    decimal d,
    MidpointRounding mode
)
public:
static Decimal Round(
    Decimal d,
    MidpointRounding mode
)
static member Round :
        d:decimal *
        mode:MidpointRounding -> decimal

参数

d
类型： System Decimal
要舍入的小数。
mode
类型： System MidpointRounding
一个值，指定当 d 正好处于另两个数字中间时如何舍入。

返回值

类型： System Decimal
最接近 d 参数的整数。如果 d 位于两个数字的中间，其中一个为偶数，另一个为奇数，则 mode 参数确定返回这两个数字中的哪一个。 最接近 d 参数的整数。如果 d 位于两个数字的中间，其中一个为偶数，另一个为奇数，则 mode 参数确定返回这两个数字中的哪一个。
异常 | 条件
ArgumentException | mode 不是一个 System..::.MidpointRounding 值。
OverflowException | 结果超出了 Decimal 对象的范围。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
Round 重载
System 命名空间


Decimal ..::.Round 方法 (Decimal, Int32, MidpointRounding)

Decimal
.
.
::
.
Round 方法 (Decimal, Int32, MidpointRounding)
Decimal 结构

将小数值舍入到指定精度。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。 将小数值舍入到指定精度。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    d As Decimal, _
    decimals As Integer, _
    mode As MidpointRounding _
) As Decimal
public static decimal Round(
    decimal d,
    int decimals,
    MidpointRounding mode
)
public:
static Decimal Round(
    Decimal d,
    int decimals,
    MidpointRounding mode
)
static member Round :
        d:decimal *
        decimals:int *
        mode:MidpointRounding -> decimal

参数

d
类型： System Decimal
要舍入的小数。
decimals
类型： System Int32
返回值中的有效小数位数（精度）。
mode
类型： System MidpointRounding
一个值，指定当 d 正好处于另两个数字中间时如何舍入。

返回值

类型： System Decimal
最接近 d 参数的数字，其精度等于 decimals 参数。如果 d 位于两个数字的中间，其中一个为偶数，另一个为奇数，则 mode 参数确定返回这两个数字中的哪一个。如果 d 的精度小于 decimals，则返回 d 而不做更改。 最接近 d 参数的数字，其精度等于 decimals 参数。如果 d 位于两个数字的中间，其中一个为偶数，另一个为奇数，则 mode 参数确定返回这两个数字中的哪一个。如果 d 的精度小于 decimals，则返回 d 而不做更改。 最接近 d 参数的数字，其精度等于 decimals 参数。如果 d 位于两个数字的中间，其中一个为偶数，另一个为奇数，则 mode 参数确定返回这两个数字中的哪一个。如果 d 的精度小于 decimals，则返回 d 而不做更改。
异常 | 条件
ArgumentOutOfRangeException | decimals 小于 0 或大于 28。
ArgumentException | mode 不是一个 System..::.MidpointRounding 值。
OverflowException | 结果超出了 Decimal 对象的范围。

decimals 参数指定返回值中的有效小数位数以及范围 0 和 28。如果 decimals 等于零，则返回整数。 decimals 参数指定返回值中的有效小数位数以及范围 0 和 28。如果 decimals 等于零，则返回整数。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。如果 decimals 为零，则这种舍入有时称为“向零舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。如果 decimals 为零，则这种舍入有时称为“向零舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。如果 decimals 为零，则这种舍入有时称为“向零舍入”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
Round 重载
System 命名空间


Decimal ..::.Subtract 方法

Decimal
.
.
::
.
Subtract 方法
Decimal 结构

从一个 Decimal 值中减去指定的另一个这种类型的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Subtract ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal Subtract(
    decimal d1,
    decimal d2
)
public:
static Decimal Subtract(
    Decimal d1,
    Decimal d2
)
static member Subtract :
        d1:decimal *
        d2:decimal -> decimal

参数

d1
类型： System Decimal
Decimal（被减数）。
d2
类型： System Decimal
Decimal（减数）。

返回值

类型： System Decimal
d1 减 d2 所得的 Decimal 结果。
异常 | 条件
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的示例阐释 Subtract 的用法。

Class PiggyBank
    Public ReadOnly Property Cents() As Decimal
        Get
            Return [Decimal].Subtract(MyFortune, [Decimal].Floor(MyFortune))
        End Get
    End Property

    Protected MyFortune As Decimal

    Public Sub AddPenny()
        MyFortune += 0.01D
    End Sub
End Class

    class PiggyBank {
        public decimal Cents {
            get {
                return Decimal.Subtract(MyFortune, Decimal.Floor(MyFortune));
            }
        }

        protected decimal MyFortune;

        public void AddPenny() {
            MyFortune += .01m;
        }
    }

   public ref class PiggyBank
   {
   public:
      Decimal Cents()
      {
         return Decimal::Subtract( MyFortune, Decimal::Floor( MyFortune ) );
      }

      void AddPenny()
      {
         MyFortune = Decimal::Add(MyFortune, (Decimal).01);
      }

   protected:
      Decimal MyFortune;
   };
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Add
Multiply
Divide


Decimal ..::.ToByte 方法

Decimal
.
.
::
.
ToByte 方法
Decimal 结构

将指定的 Decimal 的值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToByte ( _
    value As Decimal _
) As Byte
public static byte ToByte(
    decimal value
)
public:
static unsigned char ToByte(
    Decimal value
)
static member ToByte :
        value:decimal -> byte

参数

value
类型： System Decimal
Decimal 值。

返回值

类型： System Byte
等效于 value 的 8 位无符号整数。
异常 | 条件
OverflowException | value 小于 Byte..::.MinValue 或大于 Byte..::.MaxValue。

value 参数向零舍入为最接近的整数值，并返回该结果。

下面的代码示例使用 ToByte 方法，将 Decimal 数字转换为 Byte 值。

' Example of the Decimal.ToSByte and Decimal.ToByte methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToS_ByteDemo

    Dim formatter As String = "{0,16}{1,19}{2,19}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return  exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Decimal argument; catch exceptions that are thrown.
    Sub DecimalToS_Byte( argument As Decimal )

        Dim SByteValue    As Object
        Dim ByteValue   As Object

        ' Convert the argument to an SByte value.
        Try
            SByteValue = Decimal.ToSByte( argument )
        Catch ex As Exception
            SByteValue = GetExceptionType( ex )
        End Try

        ' Convert the argument to a Byte value.
        Try
            ByteValue = Decimal.ToByte( argument )
        Catch ex As Exception
            ByteValue = GetExceptionType( ex )
        End Try

        Console.WriteLine( formatter, argument, _
            SByteValue, ByteValue )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToSByte( Decimal ) and " & vbCrLf & _
            "  Decimal.ToByte( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "SByte/exception", "Byte/exception" )
        Console.WriteLine( formatter, "----------------", _
            "---------------", "--------------" )

        ' Convert Decimal values and display the results.
        DecimalToS_Byte( 78D )
        DecimalToS_Byte( New Decimal( 78000, 0, 0, False, 3 ) )
        DecimalToS_Byte( 78.999D )
        DecimalToS_Byte( 255.999D )
        DecimalToS_Byte( 256D )
        DecimalToS_Byte( 127.999D )
        DecimalToS_Byte( 128D )
        DecimalToS_Byte( - 0.999D )
        DecimalToS_Byte( - 1D )
        DecimalToS_Byte( - 128.999D )
        DecimalToS_Byte( - 129D )
    End Sub
End Module

' This example of the
'   Decimal.ToSByte( Decimal ) and
'   Decimal.ToByte( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
' Decimal argument    SByte/exception     Byte/exception
' ----------------    ---------------     --------------
'               78                 78                 78
'           78.000                 78                 78
'           78.999                 78                 78
'          255.999  OverflowException                255
'              256  OverflowException  OverflowException
'          127.999                127                127
'              128  OverflowException                128
'           -0.999                  0                  0
'               -1                 -1  OverflowException
'         -128.999               -128  OverflowException
'             -129  OverflowException  OverflowException

// Example of the decimal.ToSByte and decimal.ToByte methods.
using System;

class DecimalToS_ByteDemo
{
    const string formatter = "{0,16}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToS_Byte( decimal argument )
    {
        object SByteValue;
        object ByteValue;

        // Convert the argument to an sbyte value.
        try
        {
            SByteValue = decimal.ToSByte( argument );
        }
        catch( Exception ex )
        {
            SByteValue = GetExceptionType( ex );
        }

        // Convert the argument to a byte value.
        try
        {
            ByteValue = decimal.ToByte( argument );
        }
        catch( Exception ex )
        {
            ByteValue = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            SByteValue, ByteValue );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToSByte( decimal ) and \n" +
            "  decimal.ToByte( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "sbyte/exception", "byte/exception" );
        Console.WriteLine( formatter, "----------------",
            "---------------", "--------------" );

        // Convert decimal values and display the results.
        DecimalToS_Byte( 78M );
        DecimalToS_Byte( new decimal( 78000, 0, 0, false, 3 ) );
        DecimalToS_Byte( 78.999M );
        DecimalToS_Byte( 255.999M );
        DecimalToS_Byte( 256M );
        DecimalToS_Byte( 127.999M );
        DecimalToS_Byte( 128M );
        DecimalToS_Byte( -0.999M );
        DecimalToS_Byte( -1M );
        DecimalToS_Byte( -128.999M );
        DecimalToS_Byte( -129M );
    }
}

/*
This example of the
  decimal.ToSByte( decimal ) and
  decimal.ToByte( decimal )
methods generates the following output. It
displays several converted decimal values.

decimal argument    sbyte/exception     byte/exception
----------------    ---------------     --------------
              78                 78                 78
          78.000                 78                 78
          78.999                 78                 78
         255.999  OverflowException                255
             256  OverflowException  OverflowException
         127.999                127                127
             128  OverflowException                128
          -0.999                  0                  0
              -1                 -1  OverflowException
        -128.999               -128  OverflowException
            -129  OverflowException  OverflowException
*/

// Example of the Decimal::ToByte and Decimal::ToSByte methods.
using namespace System;
#define formatter "{0,16}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToS_Byte( Decimal argument )
{
   Object^ ByteValue;
   Object^ SByteValue;

   // Convert the argument to an unsigned char value.
   try
   {
      ByteValue = Decimal::ToByte( argument );
   }
   catch ( Exception^ ex )
   {
      ByteValue = GetExceptionType( ex );
   }

   // Convert the argument to a signed char value.
   try
   {
      SByteValue = Decimal::ToSByte( argument );
   }
   catch ( Exception^ ex )
   {
      SByteValue = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, ByteValue, SByteValue );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToByte( Decimal ) and \n"
   "  Decimal::ToSByte( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "unsigned char", "(signed) char" );
   Console::WriteLine( formatter, "----------------", "-------------", "-------------" );

   // Convert Decimal values and display the results.
   DecimalToS_Byte( Decimal::Parse(  "78" ) );
   DecimalToS_Byte( Decimal(78000,0,0,false,3) );
   DecimalToS_Byte( Decimal::Parse(  "78.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "255.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "256" ) );
   DecimalToS_Byte( Decimal::Parse(  "127.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "128" ) );
   DecimalToS_Byte( Decimal::Parse(  "-0.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "-1" ) );
   DecimalToS_Byte( Decimal::Parse(  "-128.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "-129" ) );
}

/*
This example of the
  Decimal::ToByte( Decimal ) and
  Decimal::ToSByte( Decimal )
methods generates the following output. It
displays several converted Decimal values.

Decimal argument      unsigned char      (signed) char
----------------      -------------      -------------
              78                 78                 78
          78.000                 78                 78
          78.999                 78                 78
         255.999                255  OverflowException
             256  OverflowException  OverflowException
         127.999                127                127
             128                128  OverflowException
          -0.999                  0                  0
              -1  OverflowException                 -1
        -128.999  OverflowException               -128
            -129  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Byte


Decimal ..::.ToDouble 方法

Decimal
.
.
::
.
ToDouble 方法
Decimal 结构

将指定的 Decimal 的值转换为等效的双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToDouble ( _
    d As Decimal _
) As Double
public static double ToDouble(
    decimal d
)
public:
static double ToDouble(
    Decimal d
)
static member ToDouble :
        d:decimal -> float

参数

d
类型： System Decimal
要转换的 Decimal 值。

返回值

类型： System Double
等效于 d 的双精度浮点数。

此运算可能会产生舍入误差，这是由于双精度浮点数的有效位比 Decimal 少。

下面的代码示例使用 ToDouble 方法，将 Decimal 数字转换为 Double 值。

' Example of the Decimal.ToSingle and Decimal.ToDouble methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToSgl_DblDemo

    Dim formatter As String = "{0,30}{1,17}{2,23}"

    ' Convert the Decimal argument; no exceptions are thrown.
    Sub DecimalToSgl_Dbl( argument As Decimal )

        Dim SingleValue   As Object
        Dim DoubleValue   As Object

        ' Convert the argument to a Single value.
        SingleValue = Decimal.ToSingle( argument )

        ' Convert the argument to a Double value.
        DoubleValue = Decimal.ToDouble( argument )

        Console.WriteLine( formatter, argument, _
            SingleValue, DoubleValue )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToSingle( Decimal ) and " & vbCrLf & _
            "  Decimal.ToDouble( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "Single", "Double" )
        Console.WriteLine( formatter, "----------------", _
            "------", "------" )

        ' Convert Decimal values and display the results.
        DecimalToSgl_Dbl( 0.0000000000000000000000000001D )
        DecimalToSgl_Dbl( 0.0000000000112233445566778899D )
        DecimalToSgl_Dbl( 123D )
        DecimalToSgl_Dbl( New Decimal( 123000000, 0, 0, False, 6 ) )
        DecimalToSgl_Dbl( 123456789.123456789D )
        DecimalToSgl_Dbl( 123456789123456789123456789D )
        DecimalToSgl_Dbl( Decimal.MinValue )
        DecimalToSgl_Dbl( Decimal.MaxValue )
    End Sub
End Module

' This example of the
'   Decimal.ToSingle( Decimal ) and
'   Decimal.ToDouble( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
'               Decimal argument           Single                 Double
'               ----------------           ------                 ------
' 0.0000000000000000000000000001            1E-28                  1E-28
' 0.0000000000112233445566778899     1.122334E-11   1.12233445566779E-11
'                            123              123                    123
'                     123.000000              123                    123
'            123456789.123456789     1.234568E+08       123456789.123457
'    123456789123456789123456789     1.234568E+26   1.23456789123457E+26
' -79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
'  79228162514264337593543950335     7.922816E+28   7.92281625142643E+28

// Example of the decimal.ToSingle and decimal.ToDouble methods.
using System;

class DecimalToSgl_DblDemo
{
    static string formatter = "{0,30}{1,17}{2,23}";

    // Convert the decimal argument; no exceptions are thrown.
    public static void DecimalToSgl_Dbl( decimal argument )
    {
        object SingleValue;
        object DoubleValue;

        // Convert the argument to a float value.
        SingleValue = decimal.ToSingle( argument );

        // Convert the argument to a double value.
        DoubleValue = decimal.ToDouble( argument );

        Console.WriteLine( formatter, argument,
            SingleValue, DoubleValue );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToSingle( decimal ) and \n" +
            "  decimal.ToDouble( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "float", "double" );
        Console.WriteLine( formatter, "----------------",
            "-----", "------" );

        // Convert decimal values and display the results.
        DecimalToSgl_Dbl( 0.0000000000000000000000000001M );
        DecimalToSgl_Dbl( 0.0000000000123456789123456789M );
        DecimalToSgl_Dbl( 123M );
        DecimalToSgl_Dbl( new decimal( 123000000, 0, 0, false, 6 ) );
        DecimalToSgl_Dbl( 123456789.123456789M );
        DecimalToSgl_Dbl( 123456789123456789123456789M );
        DecimalToSgl_Dbl( decimal.MinValue );
        DecimalToSgl_Dbl( decimal.MaxValue );
    }
}

/*
This example of the
  decimal.ToSingle( decimal ) and
  decimal.ToDouble( decimal )
methods generates the following output. It
displays several converted decimal values.

              decimal argument            float                 double
              ----------------            -----                 ------
0.0000000000000000000000000001            1E-28                  1E-28
0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
                           123              123                    123
                    123.000000              123                    123
           123456789.123456789     1.234568E+08       123456789.123457
   123456789123456789123456789     1.234568E+26   1.23456789123457E+26
-79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
 79228162514264337593543950335     7.922816E+28   7.92281625142643E+28
*/

// Example of the Decimal::ToSingle and Decimal::ToDouble methods.
using namespace System;
#define formatter "{0,30}{1,17}{2,23}"

// Convert the Decimal argument; no exceptions are thrown.
void DecimalToSgl_Dbl( Decimal argument )
{
   Object^ SingleValue;
   Object^ DoubleValue;

   // Convert the argument to a float value.
   SingleValue = Decimal::ToSingle( argument );

   // Convert the argument to a double value.
   DoubleValue = Decimal::ToDouble( argument );
   Console::WriteLine( formatter, argument, SingleValue, DoubleValue );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToSingle( Decimal ) and \n"
   "  Decimal::ToDouble( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "float", "double" );
   Console::WriteLine( formatter, "----------------", "-----", "------" );

   // Convert Decimal values and display the results.
   DecimalToSgl_Dbl( Decimal::Parse(  "0.0000000000000000000000000001" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "0.0000000000123456789123456789" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123" ) );
   DecimalToSgl_Dbl( Decimal(123000000,0,0,false,6) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123456789.123456789" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123456789123456789123456789" ) );
   DecimalToSgl_Dbl( Decimal::MinValue );
   DecimalToSgl_Dbl( Decimal::MaxValue );
}

/*
This example of the
  Decimal::ToSingle( Decimal ) and
  Decimal::ToDouble( Decimal )
methods generates the following output. It
displays several converted Decimal values.

              Decimal argument            float                 double
              ----------------            -----                 ------
0.0000000000000000000000000001            1E-28                  1E-28
0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
                           123              123                    123
                    123.000000              123                    123
           123456789.123456789     1.234568E+08       123456789.123457
   123456789123456789123456789     1.234568E+26   1.23456789123457E+26
-79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
 79228162514264337593543950335     7.922816E+28   7.92281625142643E+28
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Double


Decimal ..::.ToInt16 方法

Decimal
.
.
::
.
ToInt16 方法
Decimal 结构

将指定的 Decimal 值转换为等效的 16 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt16 ( _
    value As Decimal _
) As Short
public static short ToInt16(
    decimal value
)
public:
static short ToInt16(
    Decimal value
)
static member ToInt16 :
        value:decimal -> int16

参数

value
类型： System Decimal
Decimal 值。

返回值

类型： System Int16
等效于 value 的 16 位有符号整数。
异常 | 条件
OverflowException | value 小于 Int16..::.MinValue 或大于 Int16..::.MaxValue。

下面的代码示例使用 ToInt16 方法，将 Decimal 数字转换为 Int16 值。

' Example of the Decimal.ToInt16 and Decimal.ToUInt16 methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToU_Int16Demo

    Dim formatter As String = "{0,16}{1,19}{2,19}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return  exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Decimal argument; catch exceptions that are thrown.
    Sub DecimalToU_Int16( argument As Decimal )

        Dim Int16Value    As Object
        Dim UInt16Value   As Object

        ' Convert the argument to a Short value.
        Try
            Int16Value = Decimal.ToInt16( argument )
        Catch ex As Exception
            Int16Value = GetExceptionType( ex )
        End Try

        ' Convert the argument to a UInt16 value.
        Try
            UInt16Value = Decimal.ToUInt16( argument )
        Catch ex As Exception
            UInt16Value = GetExceptionType( ex )
        End Try

        Console.WriteLine( formatter, argument, _
            Int16Value, UInt16Value )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToInt16( Decimal ) and " & vbCrLf & _
            "  Decimal.ToUInt16( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "Short/exception", "UInt16/exception" )
        Console.WriteLine( formatter, "----------------", _
            "---------------", "----------------" )

        ' Convert Decimal values and display the results.
        DecimalToU_Int16( 123D )
        DecimalToU_Int16( New Decimal( 123000, 0, 0, False, 3 ) )
        DecimalToU_Int16( 123.999D )
        DecimalToU_Int16( 65535.999D )
        DecimalToU_Int16( 65536D )
        DecimalToU_Int16( 32767.999D )
        DecimalToU_Int16( 32768D )
        DecimalToU_Int16( - 0.999D )
        DecimalToU_Int16( - 1D )
        DecimalToU_Int16( - 32768.999D )
        DecimalToU_Int16( - 32769D )
    End Sub
End Module

' This example of the
'   Decimal.ToInt16( Decimal ) and
'   Decimal.ToUInt16( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
' Decimal argument    Short/exception   UInt16/exception
' ----------------    ---------------   ----------------
'              123                123                123
'          123.000                123                123
'          123.999                123                123
'        65535.999  OverflowException              65535
'            65536  OverflowException  OverflowException
'        32767.999              32767              32767
'            32768  OverflowException              32768
'           -0.999                  0                  0
'               -1                 -1  OverflowException
'       -32768.999             -32768  OverflowException
'           -32769  OverflowException  OverflowException

// Example of the decimal.ToInt16 and decimal.ToUInt16 methods.
using System;

class DecimalToU_Int16Demo
{
    const string formatter = "{0,16}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int16( decimal argument )
    {
        object Int16Value;
        object UInt16Value;

        // Convert the argument to a short value.
        try
        {
            Int16Value = decimal.ToInt16( argument );
        }
        catch( Exception ex )
        {
            Int16Value = GetExceptionType( ex );
        }

        // Convert the argument to a ushort value.
        try
        {
            UInt16Value = decimal.ToUInt16( argument );
        }
        catch( Exception ex )
        {
            UInt16Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int16Value, UInt16Value );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToInt16( decimal ) and \n" +
            "  decimal.ToUInt16( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "short/exception", "ushort/exception" );
        Console.WriteLine( formatter, "----------------",
            "---------------", "----------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int16( 123M );
        DecimalToU_Int16( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int16( 123.999M );
        DecimalToU_Int16( 65535.999M );
        DecimalToU_Int16( 65536M );
        DecimalToU_Int16( 32767.999M );
        DecimalToU_Int16( 32768M );
        DecimalToU_Int16( - 0.999M );
        DecimalToU_Int16( - 1M );
        DecimalToU_Int16( - 32768.999M );
        DecimalToU_Int16( - 32769M );
    }
}

/*
This example of the
  decimal.ToInt16( decimal ) and
  decimal.ToUInt16( decimal )
methods generates the following output. It
displays several converted decimal values.

decimal argument    short/exception   ushort/exception
----------------    ---------------   ----------------
             123                123                123
         123.000                123                123
         123.999                123                123
       65535.999  OverflowException              65535
           65536  OverflowException  OverflowException
       32767.999              32767              32767
           32768  OverflowException              32768
          -0.999                  0                  0
              -1                 -1  OverflowException
      -32768.999             -32768  OverflowException
          -32769  OverflowException  OverflowException
*/

// Example of the Decimal::ToInt16 and Decimal::ToUInt16 methods.
using namespace System;
#define formatter "{0,16}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int16( Decimal argument )
{
   Object^ Int16Value;
   Object^ UInt16Value;

   // Convert the argument to a short value.
   try
   {
      Int16Value = Decimal::ToInt16( argument );
   }
   catch ( Exception^ ex )
   {
      Int16Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned short value.
   try
   {
      UInt16Value = Decimal::ToUInt16( argument );
   }
   catch ( Exception^ ex )
   {
      UInt16Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int16Value, UInt16Value );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToInt16( Decimal ) and \n"
   "  Decimal::ToUInt16( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "short/exception", "unsigned short" );
   Console::WriteLine( formatter, "----------------", "---------------", "--------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int16( Decimal::Parse(  "123" ) );
   DecimalToU_Int16( Decimal(123000,0,0,false,3) );
   DecimalToU_Int16( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "65535.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "65536" ) );
   DecimalToU_Int16( Decimal::Parse(  "32767.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "32768" ) );
   DecimalToU_Int16( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "-1" ) );
   DecimalToU_Int16( Decimal::Parse(  "-32768.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "-32769" ) );
}

/*
This example of the
  Decimal::ToInt16( Decimal ) and
  Decimal::ToUInt16( Decimal )
methods generates the following output. It
displays several converted Decimal values.

Decimal argument    short/exception     unsigned short
----------------    ---------------     --------------
             123                123                123
         123.000                123                123
         123.999                123                123
       65535.999  OverflowException              65535
           65536  OverflowException  OverflowException
       32767.999              32767              32767
           32768  OverflowException              32768
          -0.999                  0                  0
              -1                 -1  OverflowException
      -32768.999             -32768  OverflowException
          -32769  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Int16


Decimal ..::.ToInt32 方法

Decimal
.
.
::
.
ToInt32 方法
Decimal 结构

将指定的 Decimal 值转换为等效的 32 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt32 ( _
    d As Decimal _
) As Integer
public static int ToInt32(
    decimal d
)
public:
static int ToInt32(
    Decimal d
)
static member ToInt32 :
        d:decimal -> int

参数

d
类型： System Decimal
要转换的 Decimal 值。

返回值

类型： System Int32
与 d 的值等效的 32 位有符号整数。
异常 | 条件
OverflowException | d 小于 Int32..::.MinValue 或大于 Int32..::.MaxValue。

返回值是十进制值的整数部分；小数位被截断。

下面的代码示例使用 ToInt32 方法，将 Decimal 数字转换为 Int32 值。

' Example of the Decimal.ToInt32 and Decimal.ToUInt32 methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToU_Int32Demo

    Dim formatter As String = "{0,17}{1,19}{2,19}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return  exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Decimal argument; catch exceptions that are thrown.
    Sub DecimalToU_Int32( argument As Decimal )

        Dim Int32Value    As Object
        Dim UInt32Value   As Object

        ' Convert the argument to an Integer value.
        Try
            Int32Value = Decimal.ToInt32( argument )
        Catch ex As Exception
            Int32Value = GetExceptionType( ex )
        End Try

        ' Convert the argument to a UInt32 value.
        Try
            UInt32Value = Decimal.ToUInt32( argument )
        Catch ex As Exception
            UInt32Value = GetExceptionType( ex )
        End Try

        Console.WriteLine( formatter, argument, _
            Int32Value, UInt32Value )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToInt32( Decimal ) and " & vbCrLf & _
            "  Decimal.ToUInt32( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "Integer/exception", "UInt32/exception" )
        Console.WriteLine( formatter, "----------------", _
            "-----------------", "----------------" )

        ' Convert Decimal values and display the results.
        DecimalToU_Int32( 123D )
        DecimalToU_Int32( New Decimal( 123000, 0, 0, False, 3 ) )
        DecimalToU_Int32( 123.999D )
        DecimalToU_Int32( 4294967295.999D )
        DecimalToU_Int32( 4294967296D )
        DecimalToU_Int32( 2147483647.999D )
        DecimalToU_Int32( 2147483648D )
        DecimalToU_Int32( - 0.999D )
        DecimalToU_Int32( - 1D )
        DecimalToU_Int32( - 2147483648.999D )
        DecimalToU_Int32( - 2147483649D )
    End Sub
End Module

' This example of the
'   Decimal.ToInt32( Decimal ) and
'   Decimal.ToUInt32( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
'  Decimal argument  Integer/exception   UInt32/exception
'  ----------------  -----------------   ----------------
'               123                123                123
'           123.000                123                123
'           123.999                123                123
'    4294967295.999  OverflowException         4294967295
'        4294967296  OverflowException  OverflowException
'    2147483647.999         2147483647         2147483647
'        2147483648  OverflowException         2147483648
'            -0.999                  0                  0
'                -1                 -1  OverflowException
'   -2147483648.999        -2147483648  OverflowException
'       -2147483649  OverflowException  OverflowException

// Example of the decimal.ToInt32 and decimal.ToUInt32 methods.
using System;

class DecimalToU_Int32Demo
{
    const string formatter = "{0,17}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int32( decimal argument )
    {
        object Int32Value;
        object UInt32Value;

        // Convert the argument to an int value.
        try
        {
            Int32Value = decimal.ToInt32( argument );
        }
        catch( Exception ex )
        {
            Int32Value = GetExceptionType( ex );
        }

        // Convert the argument to a uint value.
        try
        {
            UInt32Value = decimal.ToUInt32( argument );
        }
        catch( Exception ex )
        {
            UInt32Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int32Value, UInt32Value );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToInt32( decimal ) and \n" +
            "  decimal.ToUInt32( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "int/exception", "uint/exception" );
        Console.WriteLine( formatter, "----------------",
            "-------------", "--------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int32( 123M );
        DecimalToU_Int32( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int32( 123.999M );
        DecimalToU_Int32( 4294967295.999M );
        DecimalToU_Int32( 4294967296M );
        DecimalToU_Int32( 2147483647.999M );
        DecimalToU_Int32( 2147483648M );
        DecimalToU_Int32( - 0.999M );
        DecimalToU_Int32( - 1M );
        DecimalToU_Int32( - 2147483648.999M );
        DecimalToU_Int32( - 2147483649M );
    }
}

/*
This example of the
  decimal.ToInt32( decimal ) and
  decimal.ToUInt32( decimal )
methods generates the following output. It
displays several converted decimal values.

 decimal argument      int/exception     uint/exception
 ----------------      -------------     --------------
              123                123                123
          123.000                123                123
          123.999                123                123
   4294967295.999  OverflowException         4294967295
       4294967296  OverflowException  OverflowException
   2147483647.999         2147483647         2147483647
       2147483648  OverflowException         2147483648
           -0.999                  0                  0
               -1                 -1  OverflowException
  -2147483648.999        -2147483648  OverflowException
      -2147483649  OverflowException  OverflowException
*/

// Example of the Decimal::ToInt32 and Decimal::ToUInt32 methods.
using namespace System;
#define formatter "{0,17}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int32( Decimal argument )
{
   Object^ Int32Value;
   Object^ UInt32Value;

   // Convert the argument to an int value.
   try
   {
      Int32Value = Decimal::ToInt32( argument );
   }
   catch ( Exception^ ex )
   {
      Int32Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned int value.
   try
   {
      UInt32Value = Decimal::ToUInt32( argument );
   }
   catch ( Exception^ ex )
   {
      UInt32Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int32Value, UInt32Value );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToInt32( Decimal ) and \n"
   "  Decimal::ToUInt32( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "int/exception", "unsigned int" );
   Console::WriteLine( formatter, "----------------", "-------------", "------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int32( Decimal::Parse(  "123" ) );
   DecimalToU_Int32( Decimal(123000,0,0,false,3) );
   DecimalToU_Int32( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "4294967295.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "4294967296" ) );
   DecimalToU_Int32( Decimal::Parse(  "2147483647.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "2147483648" ) );
   DecimalToU_Int32( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "-1" ) );
   DecimalToU_Int32( Decimal::Parse(  "-2147483648.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "-2147483649" ) );
}

/*
This example of the
  Decimal::ToInt32( Decimal ) and
  Decimal::ToUInt32( Decimal )
methods generates the following output. It
displays several converted Decimal values.

 Decimal argument      int/exception       unsigned int
 ----------------      -------------       ------------
              123                123                123
          123.000                123                123
          123.999                123                123
   4294967295.999  OverflowException         4294967295
       4294967296  OverflowException  OverflowException
   2147483647.999         2147483647         2147483647
       2147483648  OverflowException         2147483648
           -0.999                  0                  0
               -1                 -1  OverflowException
  -2147483648.999        -2147483648  OverflowException
      -2147483649  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Int32


Decimal ..::.ToInt64 方法

Decimal
.
.
::
.
ToInt64 方法
Decimal 结构

将指定的 Decimal 值转换为等效的 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToInt64 ( _
    d As Decimal _
) As Long
public static long ToInt64(
    decimal d
)
public:
static long long ToInt64(
    Decimal d
)
static member ToInt64 :
        d:decimal -> int64

参数

d
类型： System Decimal
要转换的 Decimal 值。

返回值

类型： System Int64
与 d 的值等效的 64 位有符号整数。
异常 | 条件
OverflowException | d 小于 Int64..::.MinValue 或大于 Int64..::.MaxValue。

返回值是十进制值的整数部分；小数位被截断。

下面的代码示例使用 ToInt64 方法，将 Decimal 数字转换为 Int64 值。

' Example of the Decimal.ToInt64 and Decimal.ToUInt64 methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToU_Int64Demo

    Dim formatter As String = "{0,25}{1,22}{2,22}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Decimal argument; catch exceptions that are thrown.
    Sub DecimalToU_Int64( argument As Decimal )

        Dim Int64Value    As Object
        Dim UInt64Value   As Object

        ' Convert the argument to a Long value.
        Try
            Int64Value = Decimal.ToInt64( argument )
        Catch ex As Exception
            Int64Value = GetExceptionType( ex )
        End Try

        ' Convert the argument to a UInt64 value.
        Try
            UInt64Value = Decimal.ToUInt64( argument )
        Catch ex As Exception
            UInt64Value = GetExceptionType( ex )
        End Try

        Console.WriteLine( formatter, argument, _
            Int64Value, UInt64Value )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToInt64( Decimal ) and " & vbCrLf & _
            "  Decimal.ToUInt64( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "Long/exception", "UInt64/exception" )
        Console.WriteLine( formatter, "----------------", _
            "--------------", "----------------" )

        ' Convert Decimal values and display the results.
        DecimalToU_Int64( 123D )
        DecimalToU_Int64( New Decimal( 123000, 0, 0, False, 3 ) )
        DecimalToU_Int64( 123.999D )
        DecimalToU_Int64( 18446744073709551615.999D )
        DecimalToU_Int64( 18446744073709551616D )
        DecimalToU_Int64( 9223372036854775807.999D )
        DecimalToU_Int64( 9223372036854775808D )
        DecimalToU_Int64( - 0.999D )
        DecimalToU_Int64( - 1D )
        DecimalToU_Int64( - 9223372036854775808.999D )
        DecimalToU_Int64( - 9223372036854775809D )
    End Sub
End Module

' This example of the
'   Decimal.ToInt64( Decimal ) and
'   Decimal.ToUInt64( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
'          Decimal argument        Long/exception      UInt64/exception
'          ----------------        --------------      ----------------
'                       123                   123                   123
'                   123.000                   123                   123
'                   123.999                   123                   123
'  18446744073709551615.999     OverflowException  18446744073709551615
'      18446744073709551616     OverflowException     OverflowException
'   9223372036854775807.999   9223372036854775807   9223372036854775807
'       9223372036854775808     OverflowException   9223372036854775808
'                    -0.999                     0                     0
'                        -1                    -1     OverflowException
'  -9223372036854775808.999  -9223372036854775808     OverflowException
'      -9223372036854775809     OverflowException     OverflowException

// Example of the decimal.ToInt64 and decimal.ToUInt64 methods.
using System;

class DecimalToU_Int64Demo
{
    const string formatter = "{0,25}{1,22}{2,22}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int64( decimal argument )
    {
        object Int64Value;
        object UInt64Value;

        // Convert the argument to a long value.
        try
        {
            Int64Value = decimal.ToInt64( argument );
        }
        catch( Exception ex )
        {
            Int64Value = GetExceptionType( ex );
        }

        // Convert the argument to a ulong value.
        try
        {
            UInt64Value = decimal.ToUInt64( argument );
        }
        catch( Exception ex )
        {
            UInt64Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int64Value, UInt64Value );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToInt64( decimal ) and \n" +
            "  decimal.ToUInt64( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "long/exception", "ulong/exception" );
        Console.WriteLine( formatter, "----------------",
            "--------------", "---------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int64( 123M );
        DecimalToU_Int64( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int64( 123.999M );
        DecimalToU_Int64( 18446744073709551615.999M );
        DecimalToU_Int64( 18446744073709551616M );
        DecimalToU_Int64( 9223372036854775807.999M );
        DecimalToU_Int64( 9223372036854775808M );
        DecimalToU_Int64( - 0.999M );
        DecimalToU_Int64( - 1M );
        DecimalToU_Int64( - 9223372036854775808.999M );
        DecimalToU_Int64( - 9223372036854775809M );
    }
}

/*
This example of the
  decimal.ToInt64( decimal ) and
  decimal.ToUInt64( decimal )
methods generates the following output. It
displays several converted decimal values.

         decimal argument        long/exception       ulong/exception
         ----------------        --------------       ---------------
                      123                   123                   123
                  123.000                   123                   123
                  123.999                   123                   123
 18446744073709551615.999     OverflowException  18446744073709551615
     18446744073709551616     OverflowException     OverflowException
  9223372036854775807.999   9223372036854775807   9223372036854775807
      9223372036854775808     OverflowException   9223372036854775808
                   -0.999                     0                     0
                       -1                    -1     OverflowException
 -9223372036854775808.999  -9223372036854775808     OverflowException
     -9223372036854775809     OverflowException     OverflowException
*/

// Example of the Decimal::ToInt64 and Decimal::ToUInt64 methods.
using namespace System;
#define formatter "{0,25}{1,22}{2,22}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int64( Decimal argument )
{
   Object^ Int64Value;
   Object^ UInt64Value;

   // Convert the argument to an __int64 value.
   try
   {
      Int64Value = Decimal::ToInt64( argument );
   }
   catch ( Exception^ ex )
   {
      Int64Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned __int64 value.
   try
   {
      UInt64Value = Decimal::ToUInt64( argument );
   }
   catch ( Exception^ ex )
   {
      UInt64Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int64Value, UInt64Value );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToInt64( Decimal ) and \n"
   "  Decimal::ToUInt64( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "__int64/exception", "unsigned __int64" );
   Console::WriteLine( formatter, "----------------", "-----------------", "----------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int64( Decimal::Parse(  "123" ) );
   DecimalToU_Int64( Decimal(123000,0,0,false,3) );
   DecimalToU_Int64( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "18446744073709551615.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "18446744073709551616" ) );
   DecimalToU_Int64( Decimal::Parse(  "9223372036854775807.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "9223372036854775808" ) );
   DecimalToU_Int64( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "-1" ) );
   DecimalToU_Int64( Decimal::Parse(  "-9223372036854775808.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "-9223372036854775809" ) );
}

/*
This example of the
  Decimal::ToInt64( Decimal ) and
  Decimal::ToUInt64( Decimal )
methods generates the following output. It
displays several converted Decimal values.

         Decimal argument     __int64/exception      unsigned __int64
         ----------------     -----------------      ----------------
                      123                   123                   123
                  123.000                   123                   123
                  123.999                   123                   123
 18446744073709551615.999     OverflowException  18446744073709551615
     18446744073709551616     OverflowException     OverflowException
  9223372036854775807.999   9223372036854775807   9223372036854775807
      9223372036854775808     OverflowException   9223372036854775808
                   -0.999                     0                     0
                       -1                    -1     OverflowException
 -9223372036854775808.999  -9223372036854775808     OverflowException
     -9223372036854775809     OverflowException     OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Int64


Decimal ..::.ToOACurrency 方法

Decimal
.
.
::
.
ToOACurrency 方法
Decimal 结构

将指定的 Decimal 值转换为等效的 OLE 自动化货币值，该值包含在一个 64 位有符号整数中。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToOACurrency ( _
    value As Decimal _
) As Long
public static long ToOACurrency(
    decimal value
)
public:
static long long ToOACurrency(
    Decimal value
)
static member ToOACurrency :
        value:decimal -> int64

参数

value
类型： System Decimal
Decimal 值。

返回值

类型： System Int64
包含 value 的 OLE 自动化等效值的 64 位有符号整数。

下面的代码示例使用 ToOACurrency 方法，将 Decimal 数字转换为 Int64 字段中包含的等效 OLE 自动化货币值。

' Example of the Decimal.ToOACurrency method.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToOACurrencyDemo

    Const dataFmt As String = "{0,31}{1,27}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Display the Decimal.ToOACurrency parameter and the result
    ' or exception.
    Sub ShowDecimalToOACurrency( Argument As Decimal )

        ' Catch the exception if ToOACurrency( ) throws one.
        Try
            Dim oaCurrency As Long = Decimal.ToOACurrency( Argument )
            Console.WriteLine( dataFmt, Argument, _
                oaCurrency )

        Catch ex As Exception
            Console.WriteLine( dataFmt, Argument, _
                GetExceptionType( ex ) )
        End Try
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & _
            "Decimal.ToOACurrency( ) method generates " & vbCrLf & _
            "the following output. It displays the argument as " & _
            "a Decimal " & vbCrLf & "and the OLE Automation " & _
            "Currency value as a Long." & vbCrLf )
        Console.WriteLine( dataFmt, "Argument", _
            "OA Currency or Exception" )
        Console.WriteLine( dataFmt, "--------", _
            "------------------------" )

        ' Convert Decimal values to OLE Automation Currency values.
        ShowDecimalToOACurrency( 0D )
        ShowDecimalToOACurrency( 1D )
        ShowDecimalToOACurrency( _
            Decimal.Parse( "1.0000000000000000000000000000" ) )
        ShowDecimalToOACurrency( 100000000000000D )
        ShowDecimalToOACurrency( _
            Decimal.Parse( "100000000000000.00000000000000" ) )
        ShowDecimalToOACurrency( 10000000000000000000000000000D )
        ShowDecimalToOACurrency( 0.000000000123456789D )
        ShowDecimalToOACurrency( 0.123456789D )
        ShowDecimalToOACurrency( 123456789D )
        ShowDecimalToOACurrency( 123456789000000000D )
        ShowDecimalToOACurrency( 4294967295D )
        ShowDecimalToOACurrency( 18446744073709551615D )
        ShowDecimalToOACurrency( -79.228162514264337593543950335D )
        ShowDecimalToOACurrency( -79228162514264.337593543950335D )
    End Sub
End Module

' This example of the Decimal.ToOACurrency( ) method generates
' the following output. It displays the argument as a Decimal
' and the OLE Automation Currency value as a Long.
'
'                        Argument   OA Currency or Exception
'                        --------   ------------------------
'                               0                          0
'                               1                      10000
'  1.0000000000000000000000000000                      10000
'                 100000000000000        1000000000000000000
'  100000000000000.00000000000000        1000000000000000000
'   10000000000000000000000000000          OverflowException
'            0.000000000123456789                          0
'                     0.123456789                       1235
'                       123456789              1234567890000
'              123456789000000000          OverflowException
'                      4294967295             42949672950000
'            18446744073709551615          OverflowException
' -79.228162514264337593543950335                    -792282
' -79228162514264.337593543950335        -792281625142643376

// Example of the decimal.ToOACurrency method.
using System;

class DecimalToOACurrencyDemo
{
    const string dataFmt = "{0,31}{1,27}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Display the decimal.ToOACurrency parameter and the result
    // or exception.
    public static void ShowDecimalToOACurrency( decimal Argument )
    {
        // Catch the exception if ToOACurrency( ) throws one.
        try
        {
            long oaCurrency = decimal.ToOACurrency( Argument );
            Console.WriteLine( dataFmt, Argument, oaCurrency );
        }
        catch( Exception ex )
        {
            Console.WriteLine( dataFmt, Argument,
                GetExceptionType( ex ) );
        }
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the " +
            "decimal.ToOACurrency( ) method generates \nthe " +
            "following output. It displays the argument as a " +
            "decimal \nand the OLE Automation Currency value " +
            "as a long.\n" );
        Console.WriteLine( dataFmt, "Argument",
            "OA Currency or Exception" );
        Console.WriteLine( dataFmt, "--------",
            "------------------------" );

        // Convert decimal values to OLE Automation Currency values.
        ShowDecimalToOACurrency( 0M );
        ShowDecimalToOACurrency( 1M );
        ShowDecimalToOACurrency( 1.0000000000000000000000000000M );
        ShowDecimalToOACurrency( 100000000000000M );
        ShowDecimalToOACurrency( 100000000000000.00000000000000M );
        ShowDecimalToOACurrency( 10000000000000000000000000000M );
        ShowDecimalToOACurrency( 0.000000000123456789M );
        ShowDecimalToOACurrency( 0.123456789M );
        ShowDecimalToOACurrency( 123456789M );
        ShowDecimalToOACurrency( 123456789000000000M );
        ShowDecimalToOACurrency( 4294967295M );
        ShowDecimalToOACurrency( 18446744073709551615M );
        ShowDecimalToOACurrency( -79.228162514264337593543950335M );
        ShowDecimalToOACurrency( -79228162514264.337593543950335M );
    }
}

/*
This example of the decimal.ToOACurrency( ) method generates
the following output. It displays the argument as a decimal
and the OLE Automation Currency value as a long.

                       Argument   OA Currency or Exception
                       --------   ------------------------
                              0                          0
                              1                      10000
 1.0000000000000000000000000000                      10000
                100000000000000        1000000000000000000
 100000000000000.00000000000000        1000000000000000000
  10000000000000000000000000000          OverflowException
           0.000000000123456789                          0
                    0.123456789                       1235
                      123456789              1234567890000
             123456789000000000          OverflowException
                     4294967295             42949672950000
           18446744073709551615          OverflowException
-79.228162514264337593543950335                    -792282
-79228162514264.337593543950335        -792281625142643376
*/

// Example of the Decimal::ToOACurrency method.
using namespace System;
#define dataFmt "{0,31}{1,27}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Display the Decimal::ToOACurrency parameter and the result
// or exception.
void ShowDecimalToOACurrency( Decimal Argument )
{

   // Catch the exception if ToOACurrency( ) throws one.
   try
   {
      __int64 oaCurrency = Decimal::ToOACurrency( Argument );
      Console::WriteLine( dataFmt, Argument, oaCurrency );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( dataFmt, Argument, GetExceptionType( ex ) );
   }

}

int main()
{
   Console::WriteLine( "This example of the "
   "Decimal::ToOACurrency( ) method generates \nthe "
   "following output. It displays the argument as a "
   "Decimal \nand the OLE Automation Currency value "
   "as an __int64.\n" );
   Console::WriteLine( dataFmt, "Argument", "OA Currency or Exception" );
   Console::WriteLine( dataFmt, "--------", "------------------------" );

   // Convert Decimal values to OLE Automation Currency values.
   ShowDecimalToOACurrency( Decimal(0) );
   ShowDecimalToOACurrency( Decimal(1) );
   ShowDecimalToOACurrency( Decimal::Parse( "1.0000000000000000000000000000" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "100000000000000" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "100000000000000.00000000000000" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "10000000000000000000000000000" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "0.000000000123456789" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "0.123456789" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "123456789" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "123456789000000000" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "4294967295" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "18446744073709551615" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "-79.228162514264337593543950335" ) );
   ShowDecimalToOACurrency( Decimal::Parse( "-79228162514264.337593543950335" ) );
}

/*
This example of the Decimal::ToOACurrency( ) method generates
the following output. It displays the argument as a Decimal
and the OLE Automation Currency value as an __int64.

                       Argument   OA Currency or Exception
                       --------   ------------------------
                              0                          0
                              1                      10000
 1.0000000000000000000000000000                      10000
                100000000000000        1000000000000000000
 100000000000000.00000000000000        1000000000000000000
  10000000000000000000000000000          OverflowException
           0.000000000123456789                          0
                    0.123456789                       1235
                      123456789              1234567890000
             123456789000000000          OverflowException
                     4294967295             42949672950000
           18446744073709551615          OverflowException
-79.228162514264337593543950335                    -792282
-79228162514264.337593543950335        -792281625142643376
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
System 命名空间
FromOACurrency


Decimal ..::.ToSByte 方法

Decimal
.
.
::
.
ToSByte 方法
Decimal 结构

将指定的 Decimal 值转换为等效的 8 位有符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 ToInt16(Decimal)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToSByte ( _
    value As Decimal _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte ToSByte(
    decimal value
)
[CLSCompliantAttribute(false)]
public:
static signed char ToSByte(
    Decimal value
)
[<CLSCompliantAttribute(false)>]
static member ToSByte :
        value:decimal -> sbyte

参数

value
类型： System Decimal
Decimal 值。

返回值

类型： System SByte
等效于 value 的 8 位有符号整数。
异常 | 条件
OverflowException | value 小于 SByte..::.MinValue 或大于 SByte..::.MaxValue。

下面的代码示例使用 ToSByte 方法，将 Decimal 数字转换为 SByte 值。

' Example of the Decimal.ToSByte and Decimal.ToByte methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToS_ByteDemo

    Dim formatter As String = "{0,16}{1,19}{2,19}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return  exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Decimal argument; catch exceptions that are thrown.
    Sub DecimalToS_Byte( argument As Decimal )

        Dim SByteValue    As Object
        Dim ByteValue   As Object

        ' Convert the argument to an SByte value.
        Try
            SByteValue = Decimal.ToSByte( argument )
        Catch ex As Exception
            SByteValue = GetExceptionType( ex )
        End Try

        ' Convert the argument to a Byte value.
        Try
            ByteValue = Decimal.ToByte( argument )
        Catch ex As Exception
            ByteValue = GetExceptionType( ex )
        End Try

        Console.WriteLine( formatter, argument, _
            SByteValue, ByteValue )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToSByte( Decimal ) and " & vbCrLf & _
            "  Decimal.ToByte( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "SByte/exception", "Byte/exception" )
        Console.WriteLine( formatter, "----------------", _
            "---------------", "--------------" )

        ' Convert Decimal values and display the results.
        DecimalToS_Byte( 78D )
        DecimalToS_Byte( New Decimal( 78000, 0, 0, False, 3 ) )
        DecimalToS_Byte( 78.999D )
        DecimalToS_Byte( 255.999D )
        DecimalToS_Byte( 256D )
        DecimalToS_Byte( 127.999D )
        DecimalToS_Byte( 128D )
        DecimalToS_Byte( - 0.999D )
        DecimalToS_Byte( - 1D )
        DecimalToS_Byte( - 128.999D )
        DecimalToS_Byte( - 129D )
    End Sub
End Module

' This example of the
'   Decimal.ToSByte( Decimal ) and
'   Decimal.ToByte( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
' Decimal argument    SByte/exception     Byte/exception
' ----------------    ---------------     --------------
'               78                 78                 78
'           78.000                 78                 78
'           78.999                 78                 78
'          255.999  OverflowException                255
'              256  OverflowException  OverflowException
'          127.999                127                127
'              128  OverflowException                128
'           -0.999                  0                  0
'               -1                 -1  OverflowException
'         -128.999               -128  OverflowException
'             -129  OverflowException  OverflowException

// Example of the decimal.ToSByte and decimal.ToByte methods.
using System;

class DecimalToS_ByteDemo
{
    const string formatter = "{0,16}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToS_Byte( decimal argument )
    {
        object SByteValue;
        object ByteValue;

        // Convert the argument to an sbyte value.
        try
        {
            SByteValue = decimal.ToSByte( argument );
        }
        catch( Exception ex )
        {
            SByteValue = GetExceptionType( ex );
        }

        // Convert the argument to a byte value.
        try
        {
            ByteValue = decimal.ToByte( argument );
        }
        catch( Exception ex )
        {
            ByteValue = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            SByteValue, ByteValue );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToSByte( decimal ) and \n" +
            "  decimal.ToByte( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "sbyte/exception", "byte/exception" );
        Console.WriteLine( formatter, "----------------",
            "---------------", "--------------" );

        // Convert decimal values and display the results.
        DecimalToS_Byte( 78M );
        DecimalToS_Byte( new decimal( 78000, 0, 0, false, 3 ) );
        DecimalToS_Byte( 78.999M );
        DecimalToS_Byte( 255.999M );
        DecimalToS_Byte( 256M );
        DecimalToS_Byte( 127.999M );
        DecimalToS_Byte( 128M );
        DecimalToS_Byte( -0.999M );
        DecimalToS_Byte( -1M );
        DecimalToS_Byte( -128.999M );
        DecimalToS_Byte( -129M );
    }
}

/*
This example of the
  decimal.ToSByte( decimal ) and
  decimal.ToByte( decimal )
methods generates the following output. It
displays several converted decimal values.

decimal argument    sbyte/exception     byte/exception
----------------    ---------------     --------------
              78                 78                 78
          78.000                 78                 78
          78.999                 78                 78
         255.999  OverflowException                255
             256  OverflowException  OverflowException
         127.999                127                127
             128  OverflowException                128
          -0.999                  0                  0
              -1                 -1  OverflowException
        -128.999               -128  OverflowException
            -129  OverflowException  OverflowException
*/

// Example of the Decimal::ToByte and Decimal::ToSByte methods.
using namespace System;
#define formatter "{0,16}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToS_Byte( Decimal argument )
{
   Object^ ByteValue;
   Object^ SByteValue;

   // Convert the argument to an unsigned char value.
   try
   {
      ByteValue = Decimal::ToByte( argument );
   }
   catch ( Exception^ ex )
   {
      ByteValue = GetExceptionType( ex );
   }

   // Convert the argument to a signed char value.
   try
   {
      SByteValue = Decimal::ToSByte( argument );
   }
   catch ( Exception^ ex )
   {
      SByteValue = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, ByteValue, SByteValue );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToByte( Decimal ) and \n"
   "  Decimal::ToSByte( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "unsigned char", "(signed) char" );
   Console::WriteLine( formatter, "----------------", "-------------", "-------------" );

   // Convert Decimal values and display the results.
   DecimalToS_Byte( Decimal::Parse(  "78" ) );
   DecimalToS_Byte( Decimal(78000,0,0,false,3) );
   DecimalToS_Byte( Decimal::Parse(  "78.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "255.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "256" ) );
   DecimalToS_Byte( Decimal::Parse(  "127.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "128" ) );
   DecimalToS_Byte( Decimal::Parse(  "-0.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "-1" ) );
   DecimalToS_Byte( Decimal::Parse(  "-128.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "-129" ) );
}

/*
This example of the
  Decimal::ToByte( Decimal ) and
  Decimal::ToSByte( Decimal )
methods generates the following output. It
displays several converted Decimal values.

Decimal argument      unsigned char      (signed) char
----------------      -------------      -------------
              78                 78                 78
          78.000                 78                 78
          78.999                 78                 78
         255.999                255  OverflowException
             256  OverflowException  OverflowException
         127.999                127                127
             128                128  OverflowException
          -0.999                  0                  0
              -1  OverflowException                 -1
        -128.999  OverflowException               -128
            -129  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
SByte


Decimal ..::.ToSingle 方法

Decimal
.
.
::
.
ToSingle 方法
Decimal 结构

将指定的 Decimal 的值转换为等效的单精度浮点数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToSingle ( _
    d As Decimal _
) As Single
public static float ToSingle(
    decimal d
)
public:
static float ToSingle(
    Decimal d
)
static member ToSingle :
        d:decimal -> float32

参数

d
类型： System Decimal
要转换的 Decimal 值。

返回值

类型： System Single
等效于 d 的值的单精度浮点数字。

此运算可能会产生舍入误差，这是由于单精度浮点数字的有效位比 Decimal 少。

下面的代码示例使用 ToSingle 方法，将 Decimal 数字转换为 Single 值。

' Example of the Decimal.ToSingle and Decimal.ToDouble methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToSgl_DblDemo

    Dim formatter As String = "{0,30}{1,17}{2,23}"

    ' Convert the Decimal argument; no exceptions are thrown.
    Sub DecimalToSgl_Dbl( argument As Decimal )

        Dim SingleValue   As Object
        Dim DoubleValue   As Object

        ' Convert the argument to a Single value.
        SingleValue = Decimal.ToSingle( argument )

        ' Convert the argument to a Double value.
        DoubleValue = Decimal.ToDouble( argument )

        Console.WriteLine( formatter, argument, _
            SingleValue, DoubleValue )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToSingle( Decimal ) and " & vbCrLf & _
            "  Decimal.ToDouble( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "Single", "Double" )
        Console.WriteLine( formatter, "----------------", _
            "------", "------" )

        ' Convert Decimal values and display the results.
        DecimalToSgl_Dbl( 0.0000000000000000000000000001D )
        DecimalToSgl_Dbl( 0.0000000000112233445566778899D )
        DecimalToSgl_Dbl( 123D )
        DecimalToSgl_Dbl( New Decimal( 123000000, 0, 0, False, 6 ) )
        DecimalToSgl_Dbl( 123456789.123456789D )
        DecimalToSgl_Dbl( 123456789123456789123456789D )
        DecimalToSgl_Dbl( Decimal.MinValue )
        DecimalToSgl_Dbl( Decimal.MaxValue )
    End Sub
End Module

' This example of the
'   Decimal.ToSingle( Decimal ) and
'   Decimal.ToDouble( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
'               Decimal argument           Single                 Double
'               ----------------           ------                 ------
' 0.0000000000000000000000000001            1E-28                  1E-28
' 0.0000000000112233445566778899     1.122334E-11   1.12233445566779E-11
'                            123              123                    123
'                     123.000000              123                    123
'            123456789.123456789     1.234568E+08       123456789.123457
'    123456789123456789123456789     1.234568E+26   1.23456789123457E+26
' -79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
'  79228162514264337593543950335     7.922816E+28   7.92281625142643E+28

// Example of the decimal.ToSingle and decimal.ToDouble methods.
using System;

class DecimalToSgl_DblDemo
{
    static string formatter = "{0,30}{1,17}{2,23}";

    // Convert the decimal argument; no exceptions are thrown.
    public static void DecimalToSgl_Dbl( decimal argument )
    {
        object SingleValue;
        object DoubleValue;

        // Convert the argument to a float value.
        SingleValue = decimal.ToSingle( argument );

        // Convert the argument to a double value.
        DoubleValue = decimal.ToDouble( argument );

        Console.WriteLine( formatter, argument,
            SingleValue, DoubleValue );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToSingle( decimal ) and \n" +
            "  decimal.ToDouble( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "float", "double" );
        Console.WriteLine( formatter, "----------------",
            "-----", "------" );

        // Convert decimal values and display the results.
        DecimalToSgl_Dbl( 0.0000000000000000000000000001M );
        DecimalToSgl_Dbl( 0.0000000000123456789123456789M );
        DecimalToSgl_Dbl( 123M );
        DecimalToSgl_Dbl( new decimal( 123000000, 0, 0, false, 6 ) );
        DecimalToSgl_Dbl( 123456789.123456789M );
        DecimalToSgl_Dbl( 123456789123456789123456789M );
        DecimalToSgl_Dbl( decimal.MinValue );
        DecimalToSgl_Dbl( decimal.MaxValue );
    }
}

/*
This example of the
  decimal.ToSingle( decimal ) and
  decimal.ToDouble( decimal )
methods generates the following output. It
displays several converted decimal values.

              decimal argument            float                 double
              ----------------            -----                 ------
0.0000000000000000000000000001            1E-28                  1E-28
0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
                           123              123                    123
                    123.000000              123                    123
           123456789.123456789     1.234568E+08       123456789.123457
   123456789123456789123456789     1.234568E+26   1.23456789123457E+26
-79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
 79228162514264337593543950335     7.922816E+28   7.92281625142643E+28
*/

// Example of the Decimal::ToSingle and Decimal::ToDouble methods.
using namespace System;
#define formatter "{0,30}{1,17}{2,23}"

// Convert the Decimal argument; no exceptions are thrown.
void DecimalToSgl_Dbl( Decimal argument )
{
   Object^ SingleValue;
   Object^ DoubleValue;

   // Convert the argument to a float value.
   SingleValue = Decimal::ToSingle( argument );

   // Convert the argument to a double value.
   DoubleValue = Decimal::ToDouble( argument );
   Console::WriteLine( formatter, argument, SingleValue, DoubleValue );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToSingle( Decimal ) and \n"
   "  Decimal::ToDouble( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "float", "double" );
   Console::WriteLine( formatter, "----------------", "-----", "------" );

   // Convert Decimal values and display the results.
   DecimalToSgl_Dbl( Decimal::Parse(  "0.0000000000000000000000000001" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "0.0000000000123456789123456789" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123" ) );
   DecimalToSgl_Dbl( Decimal(123000000,0,0,false,6) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123456789.123456789" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123456789123456789123456789" ) );
   DecimalToSgl_Dbl( Decimal::MinValue );
   DecimalToSgl_Dbl( Decimal::MaxValue );
}

/*
This example of the
  Decimal::ToSingle( Decimal ) and
  Decimal::ToDouble( Decimal )
methods generates the following output. It
displays several converted Decimal values.

              Decimal argument            float                 double
              ----------------            -----                 ------
0.0000000000000000000000000001            1E-28                  1E-28
0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
                           123              123                    123
                    123.000000              123                    123
           123456789.123456789     1.234568E+08       123456789.123457
   123456789123456789123456789     1.234568E+26   1.23456789123457E+26
-79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
 79228162514264337593543950335     7.922816E+28   7.92281625142643E+28
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Single


Decimal ..::.ToString 方法

Decimal
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

将此实例的数字值转换为其等效的 String 表示。

名称 说明
页首

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ..::.ToString 方法

Decimal
.
.
::
.
ToString 方法
Decimal 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
表示此实例的值的字符串。

返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 对象进行格式设置。若要定义十进制值的字符串表达形式的格式设置，请调用 Decimal..::.ToString(String) 方法。若要定义十进制值的字符串表达形式中使用的格式设置所属的区域性，请调用 Decimal..::.ToString(IFormatProvider) 方法。若要同时定义用于创建十进制值的字符串表示形式的格式说明符和区域性，请调用 Decimal..::.ToString(String, IFormatProvider) 方法。 返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 对象进行格式设置。若要定义十进制值的字符串表达形式的格式设置，请调用 Decimal..::.ToString(String) 方法。若要定义十进制值的字符串表达形式中使用的格式设置所属的区域性，请调用 Decimal..::.ToString(IFormatProvider) 方法。若要同时定义用于创建十进制值的字符串表示形式的格式说明符和区域性，请调用 Decimal..::.ToString(String, IFormatProvider) 方法。 返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 对象进行格式设置。若要定义十进制值的字符串表达形式的格式设置，请调用 Decimal..::.ToString(String) 方法。若要定义十进制值的字符串表达形式中使用的格式设置所属的区域性，请调用 Decimal..::.ToString(IFormatProvider) 方法。若要同时定义用于创建十进制值的字符串表示形式的格式说明符和区域性，请调用 Decimal..::.ToString(String, IFormatProvider) 方法。 返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 对象进行格式设置。若要定义十进制值的字符串表达形式的格式设置，请调用 Decimal..::.ToString(String) 方法。若要定义十进制值的字符串表达形式中使用的格式设置所属的区域性，请调用 Decimal..::.ToString(IFormatProvider) 方法。若要同时定义用于创建十进制值的字符串表示形式的格式说明符和区域性，请调用 Decimal..::.ToString(String, IFormatProvider) 方法。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用默认的 ToString()()() 方法显示 Decimal 值。该示例还显示通过使用大量标准格式说明符所产生的 Decimal 值的字符串表示形式。 下面的示例使用默认的 ToString()()() 方法显示 Decimal 值。该示例还显示通过使用大量标准格式说明符所产生的 Decimal 值的字符串表示形式。

Dim value As Decimal = -16325.62d
' Display value using default ToString method.
Console.WriteLine(value.ToString())            ' Displays -16325.62
' Display value using some standard format specifiers.
Console.WriteLine(value.ToString("G"))         ' Displays -16325.62
Console.WriteLine(value.ToString("C"))         ' Displays ($16,325.62)
Console.WriteLine(value.ToString("F"))         ' Displays -16325.62

decimal value = -16325.62m;
// Display value using default ToString method.
Console.WriteLine(value.ToString());            // Displays -16325.62
// Display value using some standard format specifiers.
Console.WriteLine(value.ToString("G"));         // Displays -16325.62
Console.WriteLine(value.ToString("C"));         // Displays ($16,325.62)
Console.WriteLine(value.ToString("F"));         // Displays -16325.62

下面的示例显示帐户中的金额。

Class PiggyBank

    Public Sub AddPenny()
        MyFortune = [Decimal].Add(MyFortune, 0.01D)
    End Sub

    Public Overrides Function ToString() As String
        Return MyFortune.ToString("C") + " in piggy bank"
    End Function

    Protected MyFortune As Decimal
End Class

    class PiggyBank {
        public void AddPenny() {
            MyFortune = Decimal.Add(MyFortune, .01m);
        }

        public override string ToString() {
            return MyFortune.ToString("C")+" in piggy bank";
        }

        protected decimal MyFortune;
    }

   public ref class PiggyBank
   {
   public:
      void AddPenny()
      {
         MyFortune = Decimal::Add( MyFortune, (Decimal).01 );
      }

      virtual System::String^ ToString() override
      {
         return MyFortune.ToString("C")+" in piggy bank";
      }

   protected:
      Decimal MyFortune;
   };
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
标准数字格式字符串


Decimal ..::.ToString 方法 (IFormatProvider)

Decimal
.
.
::
.
ToString 方法 (IFormatProvider)
Decimal 结构

使用指定的区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由 provider 指定。

实现

返回值由通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 NumberFormatInfo 对象或 CultureInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 NumberFormatInfo 对象或 CultureInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 NumberFormatInfo 对象或 CultureInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 NumberFormatInfo 对象或 CultureInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

若要使用指定的区域性和特定的格式字符串将 Decimal 值转换为它的字符串表示形式，请调用 Decimal..::.ToString(String, IFormatProvider) 方法。

下面的示例使用表示一些不同的区域性的 CultureInfo 对象来显示 Decimal 值的字符串表示形式。

Dim value As Decimal = -16325.62d
' Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture))
' Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")))
' Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")))
' This example displays the following output to the console:
'       -16325.62
'       -16325.62
'       -16325,62

decimal value = -16325.62m;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
// This example displays the following output to the console:
//       -16325.62
//       -16325.62
//       -16325,62

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
标准数字格式字符串


Decimal ..::.ToString 方法 (String)

Decimal
.
.
::
.
ToString 方法 (String)
Decimal 结构

使用指定的格式，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
标准或自定义的数值格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 无效。

format 参数可以是任何有效的标准数值格式说明符（除了 D、R 和 X 之外）以及任何自定义数值格式说明符的组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串，则此实例的返回值使用通用数值格式说明符 (G) 进行格式设置。 format 参数可以是任何有效的标准数值格式说明符（除了 D、R 和 X 之外）以及任何自定义数值格式说明符的组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串，则此实例的返回值使用通用数值格式说明符 (G) 进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

使用当前区域性的 NumberFormatInfo 格式化返回值。

下面的示例通过将每个支持的标准数值格式说明符与两个自定义的数值格式字符串一起使用来显示 Decimal 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。 下面的示例通过将每个支持的标准数值格式说明符与两个自定义的数值格式字符串一起使用来显示 Decimal 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。

Dim value As Decimal = 16325.62d
Dim specifier As String

' Use standard numeric format specifiers.
specifier = "G"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    G: 16325.62
specifier = "C"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    C: $16,325.62
specifier = "E04"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    E04: 1.6326E+004
specifier = "F"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    F: 16325.62
specifier = "N"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    N: 16,325.62
specifier = "P"
Console.WriteLine("{0}: {1}", specifier, (value/10000).ToString(specifier))
' Displays:    P: 163.26 %

' Use custom numeric format specifiers.
specifier = "0,0.000"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    0,0.000: 16,325.620
specifier = "#,#.00#;(#,#.00#)"
Console.WriteLine("{0}: {1}", specifier, (value*-1).ToString(specifier))
' Displays:    #,#.00#;(#,#.00#): (16,325.62)

decimal value = 16325.62m;
string specifier;

// Use standard numeric format specifiers.
specifier = "G";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    G: 16325.62
specifier = "C";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    C: $16,325.62
specifier = "E04";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    E04: 1.6326E+004
specifier = "F";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    F: 16325.62
specifier = "N";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    N: 16,325.62
specifier = "P";
Console.WriteLine("{0}: {1}", specifier, (value/10000).ToString(specifier));
// Displays:    P: 163.26 %

// Use custom numeric format specifiers.
specifier = "0,0.000";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    0,0.000: 16,325.620
specifier = "#,#.00#;(#,#.00#)";
Console.WriteLine("{0}: {1}", specifier, (value*-1).ToString(specifier));
// Displays:    #,#.00#;(#,#.00#): (16,325.62)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
标准数字格式字符串
自定义数字格式字符串
如何：用前导零填充数字


Decimal ..::.ToString 方法 (String, IFormatProvider)

Decimal
.
.
::
.
ToString 方法 (String, IFormatProvider)
Decimal 结构

使用指定的格式和区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
一个数值格式的字符串
provider
类型： System IFormatProvider
一个 IFormatProvider，它提供区域性特定的格式设置信息。

返回值

类型： System String
此实例的值的字符串表示形式形式，由 format 和 provider 指定。

实现

异常 | 条件
FormatException | format 无效。

format 参数可以是任何有效的标准数值格式说明符（除了 D、R 和 X 之外）以及任何自定义数值格式说明符的组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是任何有效的标准数值格式说明符（除了 D、R 和 X 之外）以及任何自定义数值格式说明符的组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是一个 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是一个 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是一个 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是一个 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

下面的示例使用一些不同的区域性的每个支持的标准数值格式说明符来显示 Decimal 值。

Dim value As Decimal = 16325.62d
Dim specifier As String
Dim culture As CultureInfo

' Use standard numeric format specifiers.
specifier = "G"
culture = CultureInfo.CreateSpecificCulture("eu-ES")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16325,62
Console.WriteLine(value.ToString(specifier, CultureInfo.InvariantCulture))
' Displays:    16325.62

specifier = "C"
culture = CultureInfo.CreateSpecificCulture("en-US")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    $16,325.62
culture = CultureInfo.CreateSpecificCulture("en-GB")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:     16,325.62

specifier = "E04"
culture = CultureInfo.CreateSpecificCulture("sv-SE")
Console.WriteLine(value.ToString(specifier, culture))
' Displays: 1,6326E+004
 culture = CultureInfo.CreateSpecificCulture("en-NZ")
 Console.WriteLine(value.ToString(specifier, culture))
' Displays:    1.6326E+004

specifier = "F"
culture = CultureInfo.CreateSpecificCulture("fr-FR")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16325,62
culture = CultureInfo.CreateSpecificCulture("en-CA")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16325.62

specifier = "N"
culture = CultureInfo.CreateSpecificCulture("es-ES")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16.325,62
culture = CultureInfo.CreateSpecificCulture("fr-CA")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16 325,62

specifier = "P"
culture = CultureInfo.InvariantCulture
Console.WriteLine((value/10000).ToString(specifier, culture))
' Displays:    163.26 %
culture = CultureInfo.CreateSpecificCulture("ar-EG")
Console.WriteLine((value/10000).ToString(specifier, culture))
' Displays:    163.256 %

decimal value = 16325.62m;
string specifier;
CultureInfo culture;

// Use standard numeric format specifiers.
specifier = "G";
culture = CultureInfo.CreateSpecificCulture("eu-ES");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16325,62
Console.WriteLine(value.ToString(specifier, CultureInfo.InvariantCulture));
// Displays:    16325.62

specifier = "C";
culture = CultureInfo.CreateSpecificCulture("en-US");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    $16,325.62
culture = CultureInfo.CreateSpecificCulture("en-GB");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:     16,325.62

specifier = "E04";
culture = CultureInfo.CreateSpecificCulture("sv-SE");
Console.WriteLine(value.ToString(specifier, culture));
// Displays: 1,6326E+004
 culture = CultureInfo.CreateSpecificCulture("en-NZ");
 Console.WriteLine(value.ToString(specifier, culture));
// Displays:    1.6326E+004

specifier = "F";
culture = CultureInfo.CreateSpecificCulture("fr-FR");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16325,62
culture = CultureInfo.CreateSpecificCulture("en-CA");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16325.62

specifier = "N";
culture = CultureInfo.CreateSpecificCulture("es-ES");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16.325,62
culture = CultureInfo.CreateSpecificCulture("fr-CA");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16 325,62

specifier = "P";
culture = CultureInfo.InvariantCulture;
Console.WriteLine((value/10000).ToString(specifier, culture));
// Displays:    163.26 %
culture = CultureInfo.CreateSpecificCulture("ar-EG");
Console.WriteLine((value/10000).ToString(specifier, culture));
// Displays:    163.256 %

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
标准数字格式字符串
自定义数字格式字符串
如何：用前导零填充数字


Decimal ..::.ToUInt16 方法

Decimal
.
.
::
.
ToUInt16 方法
Decimal 结构

将指定的 Decimal 的值转换为等效的 16 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 ToInt32(Decimal)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt16 ( _
    value As Decimal _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort ToUInt16(
    decimal value
)
[CLSCompliantAttribute(false)]
public:
static unsigned short ToUInt16(
    Decimal value
)
[<CLSCompliantAttribute(false)>]
static member ToUInt16 :
        value:decimal -> uint16

参数

value
类型： System Decimal
要转换的 Decimal 值。

返回值

类型： System UInt16
等效于 value 的值的 16 位无符号整数。
异常 | 条件
OverflowException | value 大于 UInt16..::.MaxValue 或小于 UInt16..::.MinValue。

返回值是十进制值的整数部分；小数位被截断。

下面的代码示例使用 ToUInt16 方法，将 Decimal 数字转换为 UInt16 值。

' Example of the Decimal.ToInt16 and Decimal.ToUInt16 methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToU_Int16Demo

    Dim formatter As String = "{0,16}{1,19}{2,19}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return  exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Decimal argument; catch exceptions that are thrown.
    Sub DecimalToU_Int16( argument As Decimal )

        Dim Int16Value    As Object
        Dim UInt16Value   As Object

        ' Convert the argument to a Short value.
        Try
            Int16Value = Decimal.ToInt16( argument )
        Catch ex As Exception
            Int16Value = GetExceptionType( ex )
        End Try

        ' Convert the argument to a UInt16 value.
        Try
            UInt16Value = Decimal.ToUInt16( argument )
        Catch ex As Exception
            UInt16Value = GetExceptionType( ex )
        End Try

        Console.WriteLine( formatter, argument, _
            Int16Value, UInt16Value )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToInt16( Decimal ) and " & vbCrLf & _
            "  Decimal.ToUInt16( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "Short/exception", "UInt16/exception" )
        Console.WriteLine( formatter, "----------------", _
            "---------------", "----------------" )

        ' Convert Decimal values and display the results.
        DecimalToU_Int16( 123D )
        DecimalToU_Int16( New Decimal( 123000, 0, 0, False, 3 ) )
        DecimalToU_Int16( 123.999D )
        DecimalToU_Int16( 65535.999D )
        DecimalToU_Int16( 65536D )
        DecimalToU_Int16( 32767.999D )
        DecimalToU_Int16( 32768D )
        DecimalToU_Int16( - 0.999D )
        DecimalToU_Int16( - 1D )
        DecimalToU_Int16( - 32768.999D )
        DecimalToU_Int16( - 32769D )
    End Sub
End Module

' This example of the
'   Decimal.ToInt16( Decimal ) and
'   Decimal.ToUInt16( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
' Decimal argument    Short/exception   UInt16/exception
' ----------------    ---------------   ----------------
'              123                123                123
'          123.000                123                123
'          123.999                123                123
'        65535.999  OverflowException              65535
'            65536  OverflowException  OverflowException
'        32767.999              32767              32767
'            32768  OverflowException              32768
'           -0.999                  0                  0
'               -1                 -1  OverflowException
'       -32768.999             -32768  OverflowException
'           -32769  OverflowException  OverflowException

// Example of the decimal.ToInt16 and decimal.ToUInt16 methods.
using System;

class DecimalToU_Int16Demo
{
    const string formatter = "{0,16}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int16( decimal argument )
    {
        object Int16Value;
        object UInt16Value;

        // Convert the argument to a short value.
        try
        {
            Int16Value = decimal.ToInt16( argument );
        }
        catch( Exception ex )
        {
            Int16Value = GetExceptionType( ex );
        }

        // Convert the argument to a ushort value.
        try
        {
            UInt16Value = decimal.ToUInt16( argument );
        }
        catch( Exception ex )
        {
            UInt16Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int16Value, UInt16Value );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToInt16( decimal ) and \n" +
            "  decimal.ToUInt16( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "short/exception", "ushort/exception" );
        Console.WriteLine( formatter, "----------------",
            "---------------", "----------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int16( 123M );
        DecimalToU_Int16( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int16( 123.999M );
        DecimalToU_Int16( 65535.999M );
        DecimalToU_Int16( 65536M );
        DecimalToU_Int16( 32767.999M );
        DecimalToU_Int16( 32768M );
        DecimalToU_Int16( - 0.999M );
        DecimalToU_Int16( - 1M );
        DecimalToU_Int16( - 32768.999M );
        DecimalToU_Int16( - 32769M );
    }
}

/*
This example of the
  decimal.ToInt16( decimal ) and
  decimal.ToUInt16( decimal )
methods generates the following output. It
displays several converted decimal values.

decimal argument    short/exception   ushort/exception
----------------    ---------------   ----------------
             123                123                123
         123.000                123                123
         123.999                123                123
       65535.999  OverflowException              65535
           65536  OverflowException  OverflowException
       32767.999              32767              32767
           32768  OverflowException              32768
          -0.999                  0                  0
              -1                 -1  OverflowException
      -32768.999             -32768  OverflowException
          -32769  OverflowException  OverflowException
*/

// Example of the Decimal::ToInt16 and Decimal::ToUInt16 methods.
using namespace System;
#define formatter "{0,16}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int16( Decimal argument )
{
   Object^ Int16Value;
   Object^ UInt16Value;

   // Convert the argument to a short value.
   try
   {
      Int16Value = Decimal::ToInt16( argument );
   }
   catch ( Exception^ ex )
   {
      Int16Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned short value.
   try
   {
      UInt16Value = Decimal::ToUInt16( argument );
   }
   catch ( Exception^ ex )
   {
      UInt16Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int16Value, UInt16Value );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToInt16( Decimal ) and \n"
   "  Decimal::ToUInt16( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "short/exception", "unsigned short" );
   Console::WriteLine( formatter, "----------------", "---------------", "--------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int16( Decimal::Parse(  "123" ) );
   DecimalToU_Int16( Decimal(123000,0,0,false,3) );
   DecimalToU_Int16( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "65535.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "65536" ) );
   DecimalToU_Int16( Decimal::Parse(  "32767.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "32768" ) );
   DecimalToU_Int16( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "-1" ) );
   DecimalToU_Int16( Decimal::Parse(  "-32768.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "-32769" ) );
}

/*
This example of the
  Decimal::ToInt16( Decimal ) and
  Decimal::ToUInt16( Decimal )
methods generates the following output. It
displays several converted Decimal values.

Decimal argument    short/exception     unsigned short
----------------    ---------------     --------------
             123                123                123
         123.000                123                123
         123.999                123                123
       65535.999  OverflowException              65535
           65536  OverflowException  OverflowException
       32767.999              32767              32767
           32768  OverflowException              32768
          -0.999                  0                  0
              -1                 -1  OverflowException
      -32768.999             -32768  OverflowException
          -32769  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
UInt16


Decimal ..::.ToUInt32 方法

Decimal
.
.
::
.
ToUInt32 方法
Decimal 结构

将指定的 Decimal 的值转换为等效的 32 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 ToInt64(Decimal)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt32 ( _
    d As Decimal _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint ToUInt32(
    decimal d
)
[CLSCompliantAttribute(false)]
public:
static unsigned int ToUInt32(
    Decimal d
)
[<CLSCompliantAttribute(false)>]
static member ToUInt32 :
        d:decimal -> uint32

参数

d
类型： System Decimal
要转换的 Decimal 值。

返回值

类型： System UInt32
等效于 d 的值的 32 位无符号整数。
异常 | 条件
OverflowException | d 为负数或大于 UInt32..::.MaxValue。

返回值是十进制值的整数部分；小数位被截断。

下面的代码示例使用 ToUInt32 方法，将 Decimal 数字转换为 UInt32 值。

' Example of the Decimal.ToInt32 and Decimal.ToUInt32 methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToU_Int32Demo

    Dim formatter As String = "{0,17}{1,19}{2,19}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return  exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Decimal argument; catch exceptions that are thrown.
    Sub DecimalToU_Int32( argument As Decimal )

        Dim Int32Value    As Object
        Dim UInt32Value   As Object

        ' Convert the argument to an Integer value.
        Try
            Int32Value = Decimal.ToInt32( argument )
        Catch ex As Exception
            Int32Value = GetExceptionType( ex )
        End Try

        ' Convert the argument to a UInt32 value.
        Try
            UInt32Value = Decimal.ToUInt32( argument )
        Catch ex As Exception
            UInt32Value = GetExceptionType( ex )
        End Try

        Console.WriteLine( formatter, argument, _
            Int32Value, UInt32Value )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToInt32( Decimal ) and " & vbCrLf & _
            "  Decimal.ToUInt32( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "Integer/exception", "UInt32/exception" )
        Console.WriteLine( formatter, "----------------", _
            "-----------------", "----------------" )

        ' Convert Decimal values and display the results.
        DecimalToU_Int32( 123D )
        DecimalToU_Int32( New Decimal( 123000, 0, 0, False, 3 ) )
        DecimalToU_Int32( 123.999D )
        DecimalToU_Int32( 4294967295.999D )
        DecimalToU_Int32( 4294967296D )
        DecimalToU_Int32( 2147483647.999D )
        DecimalToU_Int32( 2147483648D )
        DecimalToU_Int32( - 0.999D )
        DecimalToU_Int32( - 1D )
        DecimalToU_Int32( - 2147483648.999D )
        DecimalToU_Int32( - 2147483649D )
    End Sub
End Module

' This example of the
'   Decimal.ToInt32( Decimal ) and
'   Decimal.ToUInt32( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
'  Decimal argument  Integer/exception   UInt32/exception
'  ----------------  -----------------   ----------------
'               123                123                123
'           123.000                123                123
'           123.999                123                123
'    4294967295.999  OverflowException         4294967295
'        4294967296  OverflowException  OverflowException
'    2147483647.999         2147483647         2147483647
'        2147483648  OverflowException         2147483648
'            -0.999                  0                  0
'                -1                 -1  OverflowException
'   -2147483648.999        -2147483648  OverflowException
'       -2147483649  OverflowException  OverflowException

// Example of the decimal.ToInt32 and decimal.ToUInt32 methods.
using System;

class DecimalToU_Int32Demo
{
    const string formatter = "{0,17}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int32( decimal argument )
    {
        object Int32Value;
        object UInt32Value;

        // Convert the argument to an int value.
        try
        {
            Int32Value = decimal.ToInt32( argument );
        }
        catch( Exception ex )
        {
            Int32Value = GetExceptionType( ex );
        }

        // Convert the argument to a uint value.
        try
        {
            UInt32Value = decimal.ToUInt32( argument );
        }
        catch( Exception ex )
        {
            UInt32Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int32Value, UInt32Value );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToInt32( decimal ) and \n" +
            "  decimal.ToUInt32( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "int/exception", "uint/exception" );
        Console.WriteLine( formatter, "----------------",
            "-------------", "--------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int32( 123M );
        DecimalToU_Int32( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int32( 123.999M );
        DecimalToU_Int32( 4294967295.999M );
        DecimalToU_Int32( 4294967296M );
        DecimalToU_Int32( 2147483647.999M );
        DecimalToU_Int32( 2147483648M );
        DecimalToU_Int32( - 0.999M );
        DecimalToU_Int32( - 1M );
        DecimalToU_Int32( - 2147483648.999M );
        DecimalToU_Int32( - 2147483649M );
    }
}

/*
This example of the
  decimal.ToInt32( decimal ) and
  decimal.ToUInt32( decimal )
methods generates the following output. It
displays several converted decimal values.

 decimal argument      int/exception     uint/exception
 ----------------      -------------     --------------
              123                123                123
          123.000                123                123
          123.999                123                123
   4294967295.999  OverflowException         4294967295
       4294967296  OverflowException  OverflowException
   2147483647.999         2147483647         2147483647
       2147483648  OverflowException         2147483648
           -0.999                  0                  0
               -1                 -1  OverflowException
  -2147483648.999        -2147483648  OverflowException
      -2147483649  OverflowException  OverflowException
*/

// Example of the Decimal::ToInt32 and Decimal::ToUInt32 methods.
using namespace System;
#define formatter "{0,17}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int32( Decimal argument )
{
   Object^ Int32Value;
   Object^ UInt32Value;

   // Convert the argument to an int value.
   try
   {
      Int32Value = Decimal::ToInt32( argument );
   }
   catch ( Exception^ ex )
   {
      Int32Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned int value.
   try
   {
      UInt32Value = Decimal::ToUInt32( argument );
   }
   catch ( Exception^ ex )
   {
      UInt32Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int32Value, UInt32Value );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToInt32( Decimal ) and \n"
   "  Decimal::ToUInt32( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "int/exception", "unsigned int" );
   Console::WriteLine( formatter, "----------------", "-------------", "------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int32( Decimal::Parse(  "123" ) );
   DecimalToU_Int32( Decimal(123000,0,0,false,3) );
   DecimalToU_Int32( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "4294967295.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "4294967296" ) );
   DecimalToU_Int32( Decimal::Parse(  "2147483647.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "2147483648" ) );
   DecimalToU_Int32( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "-1" ) );
   DecimalToU_Int32( Decimal::Parse(  "-2147483648.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "-2147483649" ) );
}

/*
This example of the
  Decimal::ToInt32( Decimal ) and
  Decimal::ToUInt32( Decimal )
methods generates the following output. It
displays several converted Decimal values.

 Decimal argument      int/exception       unsigned int
 ----------------      -------------       ------------
              123                123                123
          123.000                123                123
          123.999                123                123
   4294967295.999  OverflowException         4294967295
       4294967296  OverflowException  OverflowException
   2147483647.999         2147483647         2147483647
       2147483648  OverflowException         2147483648
           -0.999                  0                  0
               -1                 -1  OverflowException
  -2147483648.999        -2147483648  OverflowException
      -2147483649  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
UInt32


Decimal ..::.ToUInt64 方法

Decimal
.
.
::
.
ToUInt64 方法
Decimal 结构

将指定的 Decimal 的值转换为等效的 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function ToUInt64 ( _
    d As Decimal _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong ToUInt64(
    decimal d
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long ToUInt64(
    Decimal d
)
[<CLSCompliantAttribute(false)>]
static member ToUInt64 :
        d:decimal -> uint64

参数

d
类型： System Decimal
要转换的 Decimal 值。

返回值

类型： System UInt64
等效于 d 的值的 64 位无符号整数。
异常 | 条件
OverflowException | d 为负数或大于 UInt64..::.MaxValue。

返回值是十进制值的整数部分；小数位被截断。

下面的代码示例使用 ToUInt64 方法，将 Decimal 数字转换为 UInt64 值。

' Example of the Decimal.ToInt64 and Decimal.ToUInt64 methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalToU_Int64Demo

    Dim formatter As String = "{0,25}{1,22}{2,22}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Decimal argument; catch exceptions that are thrown.
    Sub DecimalToU_Int64( argument As Decimal )

        Dim Int64Value    As Object
        Dim UInt64Value   As Object

        ' Convert the argument to a Long value.
        Try
            Int64Value = Decimal.ToInt64( argument )
        Catch ex As Exception
            Int64Value = GetExceptionType( ex )
        End Try

        ' Convert the argument to a UInt64 value.
        Try
            UInt64Value = Decimal.ToUInt64( argument )
        Catch ex As Exception
            UInt64Value = GetExceptionType( ex )
        End Try

        Console.WriteLine( formatter, argument, _
            Int64Value, UInt64Value )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.ToInt64( Decimal ) and " & vbCrLf & _
            "  Decimal.ToUInt64( Decimal ) " & vbCrLf & "methods " & _
            "generates the following output. It " & vbCrLf & _
            "displays several converted Decimal values." & vbCrLf )
        Console.WriteLine( formatter, "Decimal argument", _
            "Long/exception", "UInt64/exception" )
        Console.WriteLine( formatter, "----------------", _
            "--------------", "----------------" )

        ' Convert Decimal values and display the results.
        DecimalToU_Int64( 123D )
        DecimalToU_Int64( New Decimal( 123000, 0, 0, False, 3 ) )
        DecimalToU_Int64( 123.999D )
        DecimalToU_Int64( 18446744073709551615.999D )
        DecimalToU_Int64( 18446744073709551616D )
        DecimalToU_Int64( 9223372036854775807.999D )
        DecimalToU_Int64( 9223372036854775808D )
        DecimalToU_Int64( - 0.999D )
        DecimalToU_Int64( - 1D )
        DecimalToU_Int64( - 9223372036854775808.999D )
        DecimalToU_Int64( - 9223372036854775809D )
    End Sub
End Module

' This example of the
'   Decimal.ToInt64( Decimal ) and
'   Decimal.ToUInt64( Decimal )
' methods generates the following output. It
' displays several converted Decimal values.
'
'          Decimal argument        Long/exception      UInt64/exception
'          ----------------        --------------      ----------------
'                       123                   123                   123
'                   123.000                   123                   123
'                   123.999                   123                   123
'  18446744073709551615.999     OverflowException  18446744073709551615
'      18446744073709551616     OverflowException     OverflowException
'   9223372036854775807.999   9223372036854775807   9223372036854775807
'       9223372036854775808     OverflowException   9223372036854775808
'                    -0.999                     0                     0
'                        -1                    -1     OverflowException
'  -9223372036854775808.999  -9223372036854775808     OverflowException
'      -9223372036854775809     OverflowException     OverflowException

// Example of the decimal.ToInt64 and decimal.ToUInt64 methods.
using System;

class DecimalToU_Int64Demo
{
    const string formatter = "{0,25}{1,22}{2,22}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int64( decimal argument )
    {
        object Int64Value;
        object UInt64Value;

        // Convert the argument to a long value.
        try
        {
            Int64Value = decimal.ToInt64( argument );
        }
        catch( Exception ex )
        {
            Int64Value = GetExceptionType( ex );
        }

        // Convert the argument to a ulong value.
        try
        {
            UInt64Value = decimal.ToUInt64( argument );
        }
        catch( Exception ex )
        {
            UInt64Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int64Value, UInt64Value );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.ToInt64( decimal ) and \n" +
            "  decimal.ToUInt64( decimal ) \nmethods " +
            "generates the following output. It \ndisplays " +
            "several converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "long/exception", "ulong/exception" );
        Console.WriteLine( formatter, "----------------",
            "--------------", "---------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int64( 123M );
        DecimalToU_Int64( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int64( 123.999M );
        DecimalToU_Int64( 18446744073709551615.999M );
        DecimalToU_Int64( 18446744073709551616M );
        DecimalToU_Int64( 9223372036854775807.999M );
        DecimalToU_Int64( 9223372036854775808M );
        DecimalToU_Int64( - 0.999M );
        DecimalToU_Int64( - 1M );
        DecimalToU_Int64( - 9223372036854775808.999M );
        DecimalToU_Int64( - 9223372036854775809M );
    }
}

/*
This example of the
  decimal.ToInt64( decimal ) and
  decimal.ToUInt64( decimal )
methods generates the following output. It
displays several converted decimal values.

         decimal argument        long/exception       ulong/exception
         ----------------        --------------       ---------------
                      123                   123                   123
                  123.000                   123                   123
                  123.999                   123                   123
 18446744073709551615.999     OverflowException  18446744073709551615
     18446744073709551616     OverflowException     OverflowException
  9223372036854775807.999   9223372036854775807   9223372036854775807
      9223372036854775808     OverflowException   9223372036854775808
                   -0.999                     0                     0
                       -1                    -1     OverflowException
 -9223372036854775808.999  -9223372036854775808     OverflowException
     -9223372036854775809     OverflowException     OverflowException
*/

// Example of the Decimal::ToInt64 and Decimal::ToUInt64 methods.
using namespace System;
#define formatter "{0,25}{1,22}{2,22}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int64( Decimal argument )
{
   Object^ Int64Value;
   Object^ UInt64Value;

   // Convert the argument to an __int64 value.
   try
   {
      Int64Value = Decimal::ToInt64( argument );
   }
   catch ( Exception^ ex )
   {
      Int64Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned __int64 value.
   try
   {
      UInt64Value = Decimal::ToUInt64( argument );
   }
   catch ( Exception^ ex )
   {
      UInt64Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int64Value, UInt64Value );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::ToInt64( Decimal ) and \n"
   "  Decimal::ToUInt64( Decimal ) \nmethods "
   "generates the following output. It \ndisplays "
   "several converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "__int64/exception", "unsigned __int64" );
   Console::WriteLine( formatter, "----------------", "-----------------", "----------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int64( Decimal::Parse(  "123" ) );
   DecimalToU_Int64( Decimal(123000,0,0,false,3) );
   DecimalToU_Int64( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "18446744073709551615.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "18446744073709551616" ) );
   DecimalToU_Int64( Decimal::Parse(  "9223372036854775807.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "9223372036854775808" ) );
   DecimalToU_Int64( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "-1" ) );
   DecimalToU_Int64( Decimal::Parse(  "-9223372036854775808.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "-9223372036854775809" ) );
}

/*
This example of the
  Decimal::ToInt64( Decimal ) and
  Decimal::ToUInt64( Decimal )
methods generates the following output. It
displays several converted Decimal values.

         Decimal argument     __int64/exception      unsigned __int64
         ----------------     -----------------      ----------------
                      123                   123                   123
                  123.000                   123                   123
                  123.999                   123                   123
 18446744073709551615.999     OverflowException  18446744073709551615
     18446744073709551616     OverflowException     OverflowException
  9223372036854775807.999   9223372036854775807   9223372036854775807
      9223372036854775808     OverflowException   9223372036854775808
                   -0.999                     0                     0
                       -1                    -1     OverflowException
 -9223372036854775808.999  -9223372036854775808     OverflowException
     -9223372036854775809     OverflowException     OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
UInt64


Decimal ..::.Truncate 方法

Decimal
.
.
::
.
Truncate 方法
Decimal 结构

返回指定的 Decimal 的整数位，所有小数位均被放弃。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Truncate ( _
    d As Decimal _
) As Decimal
public static decimal Truncate(
    decimal d
)
public:
static Decimal Truncate(
    Decimal d
)
static member Truncate :
        d:decimal -> decimal

参数

d
类型： System Decimal
要截断的 Decimal。

返回值

类型： System Decimal
d 向零舍入为最接近的整数后的 Decimal 结果。

此方法将 d 向零舍入为最接近的整数，相当于放弃小数点后的所有位。

下面的代码示例使用 Truncate 方法，丢弃几个 Decimal 值的小数位。

' Example of the Decimal.Negate, Decimal.Floor, and Decimal.Truncate
' methods.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFloorNegTruncDemo

    Const dataFmt As String = "{0,-30}{1,26}"

    ' Display Decimal parameters and their product, quotient, and
    ' remainder.
    Sub ShowDecimalFloorNegTrunc( Argument as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Argument", Argument )
        Console.WriteLine( dataFmt, _
            "Decimal.Negate( Argument )", _
            Decimal.Negate( Argument ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Floor( Argument )", _
            Decimal.Floor( Argument ) )
        Console.WriteLine( dataFmt, _
            "Decimal.Truncate( Argument )", _
            Decimal.Truncate( Argument ) )
    End Sub

    Sub Main( )
        Console.WriteLine( "This example of the " & vbCrLf & _
            "  Decimal.Negate( Decimal ), " & vbCrLf & _
            "  Decimal.Floor( Decimal ), and " & vbCrLf & _
            "  Decimal.Truncate( Decimal ) " & vbCrLf & _
            "methods generates the following output." )

        ' Create pairs of Decimal objects.
        ShowDecimalFloorNegTrunc( 0D )
        ShowDecimalFloorNegTrunc( 123.456D )
        ShowDecimalFloorNegTrunc( -123.456D )
        ShowDecimalFloorNegTrunc( _
            new Decimal( 1230000000, 0, 0, True, 7 ) )
        ShowDecimalFloorNegTrunc( -9999999999.9999999999D )
    End Sub
End Module

' This example of the
'   Decimal.Negate( Decimal ),
'   Decimal.Floor( Decimal ), and
'   Decimal.Truncate( Decimal )
' methods generates the following output.
'
' Decimal Argument                                       0
' Decimal.Negate( Argument )                             0
' Decimal.Floor( Argument )                              0
' Decimal.Truncate( Argument )                           0
'
' Decimal Argument                                 123.456
' Decimal.Negate( Argument )                      -123.456
' Decimal.Floor( Argument )                            123
' Decimal.Truncate( Argument )                         123
'
' Decimal Argument                                -123.456
' Decimal.Negate( Argument )                       123.456
' Decimal.Floor( Argument )                           -124
' Decimal.Truncate( Argument )                        -123
'
' Decimal Argument                            -123.0000000
' Decimal.Negate( Argument )                   123.0000000
' Decimal.Floor( Argument )                           -123
' Decimal.Truncate( Argument )                        -123
'
' Decimal Argument                  -9999999999.9999999999
' Decimal.Negate( Argument )         9999999999.9999999999
' Decimal.Floor( Argument )                   -10000000000
' Decimal.Truncate( Argument )                 -9999999999

// Example of the decimal.Negate, decimal.Floor, and decimal.Truncate
// methods.
using System;

class DecimalFloorNegTruncDemo
{
    const string dataFmt = "{0,-30}{1,26}";

    // Display decimal parameters and the method results.
    public static void ShowDecimalFloorNegTrunc( decimal Argument )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Argument", Argument );
        Console.WriteLine( dataFmt, "decimal.Negate( Argument )",
            decimal.Negate( Argument ) );
        Console.WriteLine( dataFmt, "decimal.Floor( Argument )",
            decimal.Floor( Argument ) );
        Console.WriteLine( dataFmt, "decimal.Truncate( Argument )",
            decimal.Truncate( Argument ) );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the \n" +
            "  decimal.Negate( decimal ), \n" +
            "  decimal.Floor( decimal ), and \n" +
            "  decimal.Truncate( decimal ) \n" +
            "methods generates the following output." );

        // Create pairs of decimal objects.
        ShowDecimalFloorNegTrunc( 0M );
        ShowDecimalFloorNegTrunc( 123.456M );
        ShowDecimalFloorNegTrunc( -123.456M );
        ShowDecimalFloorNegTrunc(
            new decimal( 1230000000, 0, 0, true, 7 ) );
        ShowDecimalFloorNegTrunc( -9999999999.9999999999M );
    }
}

/*
This example of the
  decimal.Negate( decimal ),
  decimal.Floor( decimal ), and
  decimal.Truncate( decimal )
methods generates the following output.

decimal Argument                                       0
decimal.Negate( Argument )                             0
decimal.Floor( Argument )                              0
decimal.Truncate( Argument )                           0

decimal Argument                                 123.456
decimal.Negate( Argument )                      -123.456
decimal.Floor( Argument )                            123
decimal.Truncate( Argument )                         123

decimal Argument                                -123.456
decimal.Negate( Argument )                       123.456
decimal.Floor( Argument )                           -124
decimal.Truncate( Argument )                        -123

decimal Argument                            -123.0000000
decimal.Negate( Argument )                   123.0000000
decimal.Floor( Argument )                           -123
decimal.Truncate( Argument )                        -123

decimal Argument                  -9999999999.9999999999
decimal.Negate( Argument )         9999999999.9999999999
decimal.Floor( Argument )                   -10000000000
decimal.Truncate( Argument )                 -9999999999
*/

// Example of the Decimal::Negate, Decimal::Floor, and
// Decimal::Truncate methods.
using namespace System;

// Display Decimal parameters and the method results.
void ShowDecimalFloorNegTrunc( Decimal Argument )
{
   String^ dataFmt = "{0,-30}{1,26}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Argument", Argument );
   Console::WriteLine( dataFmt, "Decimal::Negate( Argument )", Decimal::Negate( Argument ) );
   Console::WriteLine( dataFmt, "Decimal::Floor( Argument )", Decimal::Floor( Argument ) );
   Console::WriteLine( dataFmt, "Decimal::Truncate( Argument )", Decimal::Truncate( Argument ) );
}

int main()
{
   Console::WriteLine( "This example of the \n"
   "  Decimal::Negate( Decimal ), \n"
   "  Decimal::Floor( Decimal ), and \n"
   "  Decimal::Truncate( Decimal ) \n"
   "methods generates the following output." );

   // Create pairs of Decimal objects.
   ShowDecimalFloorNegTrunc( Decimal::Parse( "0" ) );
   ShowDecimalFloorNegTrunc( Decimal::Parse( "123.456" ) );
   ShowDecimalFloorNegTrunc( Decimal::Parse( "-123.456" ) );
   ShowDecimalFloorNegTrunc( Decimal(1230000000,0,0,true,7) );
   ShowDecimalFloorNegTrunc( Decimal::Parse( "-9999999999.9999999999" ) );
}

/*
This example of the
  Decimal::Negate( Decimal ),
  Decimal::Floor( Decimal ), and
  Decimal::Truncate( Decimal )
methods generates the following output.

Decimal Argument                                       0
Decimal::Negate( Argument )                            0
Decimal::Floor( Argument )                             0
Decimal::Truncate( Argument )                          0

Decimal Argument                                 123.456
Decimal::Negate( Argument )                     -123.456
Decimal::Floor( Argument )                           123
Decimal::Truncate( Argument )                        123

Decimal Argument                                -123.456
Decimal::Negate( Argument )                      123.456
Decimal::Floor( Argument )                          -124
Decimal::Truncate( Argument )                       -123

Decimal Argument                            -123.0000000
Decimal::Negate( Argument )                  123.0000000
Decimal::Floor( Argument )                          -123
Decimal::Truncate( Argument )                       -123

Decimal Argument                  -9999999999.9999999999
Decimal::Negate( Argument )        9999999999.9999999999
Decimal::Floor( Argument )                  -10000000000
Decimal::Truncate( Argument )                -9999999999
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Round
Floor


Decimal ..::.TryParse 方法

Decimal
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

将数字的字符串表示形式转换为它的等效 Decimal 表示形式。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效 Decimal 表示形式。一个指示转换是否成功的返回值。

名称 说明
页首

参考

Decimal 结构
Decimal 成员
System 命名空间
Parse


Decimal ..::.TryParse 方法 (String, Decimal%)

Decimal
.
.
::
.
TryParse 方法 (String, Decimal%)
Decimal 结构

将数字的字符串表示形式转换为它的等效 Decimal 表示形式。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效 Decimal 表示形式。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As Decimal _
) As Boolean
public static bool TryParse(
    string s,
    out decimal result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] Decimal% result
)
static member TryParse :
        s:string *
        result:decimal byref -> bool

参数

s
类型： System String
要转换的数字的字符串表示形式。
result
类型： System Decimal %
当此方法返回时，如果转换成功，则返回值包含与 s 中包含的数值等效的 Decimal 数；如果转换失败，则返回值包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不是有效格式的数字或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则返回值包含与 s 中包含的数值等效的 Decimal 数；如果转换失败，则返回值包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不是有效格式的数字或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则返回值包含与 s 中包含的数值等效的 Decimal 数；如果转换失败，则返回值包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不是有效格式的数字或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。

此重载与 Decimal..::.Parse(String) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 此重载与 Decimal..::.Parse(String) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

s 参数中包含一个如下形式的数：

[ws][sign][digits,]digits[.fractional-digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。
, | 区域性特定的千位分隔符。
. | 区域性特定的小数点符号。
fractional-digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Number 样式解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Decimal..::.TryParse(String, NumberStyles, IFormatProvider, Decimal%) 方法重载。 使用 NumberStyles..::.Number 样式解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Decimal..::.TryParse(String, NumberStyles, IFormatProvider, Decimal%) 方法重载。 使用 NumberStyles..::.Number 样式解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Decimal..::.TryParse(String, NumberStyles, IFormatProvider, Decimal%) 方法重载。

使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析参数 s。有关更多信息，请参见 CurrentInfo。若要使用其他一些指定区域性的格式设置信息分析字符串，请使用 Decimal..::.TryParse(String, NumberStyles, IFormatProvider, Decimal%) 方法重载。 使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析参数 s。有关更多信息，请参见 CurrentInfo。若要使用其他一些指定区域性的格式设置信息分析字符串，请使用 Decimal..::.TryParse(String, NumberStyles, IFormatProvider, Decimal%) 方法重载。 使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析参数 s。有关更多信息，请参见 CurrentInfo。若要使用其他一些指定区域性的格式设置信息分析字符串，请使用 Decimal..::.TryParse(String, NumberStyles, IFormatProvider, Decimal%) 方法重载。

如有必要，则用就近舍入的方法舍入 s 的值。

Decimal 对象的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。 Decimal 对象的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，而适用的货币分隔符或小数点分隔符和组分隔符是相同的，则分析操作会假定该分隔符是小数点分隔符而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，而适用的货币分隔符或小数点分隔符和组分隔符是相同的，则分析操作会假定该分隔符是小数点分隔符而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的代码示例使用 Decimal..::.TryParse(String, Decimal%) 方法将数值的字符串表示形式转换为 Decimal 值。该示例假定当前区域性为 en-US。 下面的代码示例使用 Decimal..::.TryParse(String, Decimal%) 方法将数值的字符串表示形式转换为 Decimal 值。该示例假定当前区域性为 en-US。

Dim value As String
Dim number As Decimal

' Parse a floating-point value with a thousands separator.
value = "1,643.57"
If Decimal.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If

' Parse a floating-point value with a currency symbol and a
' thousands separator.
value = "$1,643.57"
If Decimal.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If

' Parse value in exponential notation.
value = "-1.643e6"
If Decimal.TryParse(value, number)
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If

' Parse a negative integer value.
value = "-1689346178821"
If Decimal.TryParse(value, number)
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If
' The example displays the following output to the console:
'       1643.57
'       Unable to parse '$1,643.57'.
'       Unable to parse '-1.643e6'.
'       -1689346178821

string value;
decimal number;

// Parse a floating-point value with a thousands separator.
value = "1,643.57";
if (Decimal.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);

// Parse a floating-point value with a currency symbol and a
// thousands separator.
value = "$1,643.57";
if (Decimal.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);

// Parse value in exponential notation.
value = "-1.643e6";
if (Decimal.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);

// Parse a negative integer value.
value = "-1689346178821";
if (Decimal.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);
// The example displays the following output to the console:
//       1643.57
//       Unable to parse '$1,643.57'.
//       Unable to parse '-1.643e6'.
//       -1689346178821

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


Decimal ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, Decimal%)

Decimal
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, Decimal%)
Decimal 结构

使用指定样式和区域性特定格式将数字的字符串表示形式转换为其 Decimal 等效项。一个指示转换是否成功的返回值。 使用指定样式和区域性特定格式将数字的字符串表示形式转换为其 Decimal 等效项。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As Decimal _
) As Boolean
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out decimal result
)
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] Decimal% result
)
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:decimal byref -> bool

参数

s
类型： System String
要转换的数字的字符串表示形式。
style
类型： System.Globalization NumberStyles
NumberStyles 值的按位组合，指示 s 允许使用的格式。一个用来指定的典型值为 Number。 NumberStyles 值的按位组合，指示 s 允许使用的格式。一个用来指定的典型值为 Number。
provider
类型： System IFormatProvider
一个 IFormatProvider 对象，它提供有关 s 的区域性特定分析信息。
result
类型： System Decimal %
当此方法返回时，如果转换成功，则返回值包含与 s 中包含的数值等效的 Decimal 数；如果转换失败，则返回值包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则返回值包含与 s 中包含的数值等效的 Decimal 数；如果转换失败，则返回值包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则返回值包含与 s 中包含的数值等效的 Decimal 数；如果转换失败，则返回值包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 为 AllowHexSpecifier 值。

此重载与 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 此重载与 Decimal..::.Parse(String, NumberStyles, IFormatProvider) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员：

  • NumberStyles AllowHexSpecifier

  • NumberStyles HexNumber

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional-digits][e[sign]digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头。如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头。如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头。如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 IFormatProvider..::.GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyNegativePattern 或 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 IFormatProvider..::.GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyNegativePattern 或 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 IFormatProvider..::.GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyNegativePattern 或 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。
. | 区域性特定的小数点符号。
fractional-digits | 一系列从 0 到 9 之间的数字。

style 参数指定 s 参数所允许的格式，可以是通过使用按位“或”运算组合的一个或多个 NumberStyles 枚举常数。如果 style 为空，则使用 NumberStyles..::.Number 样式解释 s。 style 参数指定 s 参数所允许的格式，可以是通过使用按位“或”运算组合的一个或多个 NumberStyles 枚举常数。如果 style 为空，则使用 NumberStyles..::.Number 样式解释 s。

provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

Decimal 对象的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。 Decimal 对象的精度为 29 位。如果 s 表示的数字的位数多于 29 位，但是有小数部分，且落在 MaxValue 和 MinValue 范围内，则使用就近舍入方法将该数字舍入到（而非截断为）29 位。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例演示如何使用 TryParse(String, NumberStyles, IFormatProvider, Decimal%) 方法来分析具有特定样式并使用特定区域性的约定进行格式设置的数字的字符串表示形式。

Dim value As String
Dim style As NumberStyles
Dim culture As CultureInfo
Dim number As Decimal

' Parse currency value using en-GB culture.
value = " 1,097.63"
style = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
culture = CultureInfo.CreateSpecificCulture("en-GB")
If Decimal.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
'       Converted ' 1,097.63' to 1097.63.

value = "1345,978"
style = NumberStyles.AllowDecimalPoint
culture = CultureInfo.CreateSpecificCulture("fr-FR")
If Decimal.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
'       Converted '1345,978' to 1345.978.

value = "1.345,978"
style = NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands
culture = CultureInfo.CreateSpecificCulture("es-ES")
If Decimal.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
'       Converted '1.345,978' to 1345.978.

value = "1 345,978"
If Decimal.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
'       Unable to convert '1 345,978'.

string value;
NumberStyles style;
CultureInfo culture;
decimal number;

// Parse currency value using en-GB culture.
value = " 1,097.63";
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
culture = CultureInfo.CreateSpecificCulture("en-GB");
if (Decimal.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted ' 1,097.63' to 1097.63.

value = "1345,978";
style = NumberStyles.AllowDecimalPoint;
culture = CultureInfo.CreateSpecificCulture("fr-FR");
if (Decimal.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted '1345,978' to 1345.978.

value = "1.345,978";
style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
culture = CultureInfo.CreateSpecificCulture("es-ES");
if (Decimal.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted '1.345,978' to 1345.978.

value = "1 345,978";
if (Decimal.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Unable to convert '1 345,978'.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


Decimal 运算符和类型转换

Decimal 运算符和类型转换
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

Decimal 类型公开以下成员。

名称 说明
页首

参考

Decimal 结构
System 命名空间


Decimal ..::.Addition 运算符

Decimal
.
.
::
.
Addition 运算符
Decimal 结构

两个指定的 Decimal 值相加。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator + ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal operator +(
    decimal d1,
    decimal d2
)
public:
static Decimal operator +(
    Decimal d1,
    Decimal d2
)
static let inline (+)
        d1:decimal *
        d2:decimal  : decimal

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Decimal
d1 与 d2 相加的 Decimal 结果。
异常 | 条件
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的代码示例创建几对 Decimal 值，并使用 Addition 运算符计算它们的和。

' Example of the Decimal addition and subtraction operators.
Imports System
Imports Microsoft.VisualBasic

Module DecimalAddSubOpsDemo

    Const dataFmt As String = "{0,-38}{1,31}"

    ' Display Decimal parameters and their sum and difference.
    Sub ShowDecimalSumDiff( Left as Decimal, Right as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Left", Left )
        Console.WriteLine( dataFmt, "Decimal Right", Right )

        ' The op_Addition and op_Subtraction operators must be
        ' explicitely coded in Visual Basic. If binary + or - are
        ' used, other methods are called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Addition( Left, Right )", _
            Decimal.op_Addition( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Subtraction( Left, Right )", _
            Decimal.op_Subtraction( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal addition and " & _
            "subtraction operators " & vbCrLf & "generates the " & _
            "following output. It displays the sum and " & vbCrLf & _
            "difference of several pairs of Decimal objects." )

        ' Create pairs of Decimal objects.
        ShowDecimalSumDiff( _
            new Decimal( 1230000000, 0, 0, False, 7 ), _
            0.0012300D )
        ShowDecimalSumDiff( 123.456789D, 0.006789D )
        ShowDecimalSumDiff( 12345678900000000D, _
            0.00000000123456789D )
        ShowDecimalSumDiff( 123456789.0123456789D, _
            123456789.1123456789D )
    End Sub
End Module

' This example of the Decimal addition and subtraction operators
' generates the following output. It displays the sum and
' difference of several pairs of Decimal objects.
'
' Decimal Left                                              123.0000000
' Decimal Right                                                 0.00123
' Decimal.op_Addition( Left, Right )                        123.0012300
' Decimal.op_Subtraction( Left, Right )                     122.9987700
'
' Decimal Left                                               123.456789
' Decimal Right                                                0.006789
' Decimal.op_Addition( Left, Right )                         123.463578
' Decimal.op_Subtraction( Left, Right )                      123.450000
'
' Decimal Left                                        12345678900000000
' Decimal Right                                     0.00000000123456789
' Decimal.op_Addition( Left, Right )     12345678900000000.000000001235
' Decimal.op_Subtraction( Left, Right )  12345678899999999.999999998765
'
' Decimal Left                                     123456789.0123456789
' Decimal Right                                    123456789.1123456789
' Decimal.op_Addition( Left, Right )               246913578.1246913578
' Decimal.op_Subtraction( Left, Right )                   -0.1000000000

// Example of the decimal addition and subtraction operators.
using System;

class DecimalAddSubOpsDemo
{
    const string dataFmt = "   {0,-18}{1,31}" ;

    // Display decimal parameters and their sum and difference.
    static void ShowDecimalSumDiff( decimal Left, decimal Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Left", Left );
        Console.WriteLine( dataFmt, "decimal Right", Right );
        Console.WriteLine( dataFmt, "Left + Right",
            Left + Right );
        Console.WriteLine( dataFmt, "Left - Right",
            Left - Right );
    }

    static void Main( )
    {
        Console.WriteLine( "This example of the decimal " +
            "addition and subtraction operators \ngenerates the " +
            "following output. It displays the sum and \n" +
            "difference of several pairs of decimal objects."  );

        // Create pairs of decimal objects.
        ShowDecimalSumDiff(
            new decimal( 1230000000, 0, 0, false, 7 ),
            0.0012300M );
        ShowDecimalSumDiff( 123.456789M, 0.006789M );
        ShowDecimalSumDiff( 12345678900000000M,
            0.00000000123456789M );
        ShowDecimalSumDiff( 123456789.0123456789M,
            123456789.1123456789M );
    }
}

/*
This example of the decimal addition and subtraction operators
generates the following output. It displays the sum and
difference of several pairs of decimal objects.

   decimal Left                          123.0000000
   decimal Right                           0.0012300
   Left + Right                          123.0012300
   Left - Right                          122.9987700

   decimal Left                           123.456789
   decimal Right                            0.006789
   Left + Right                           123.463578
   Left - Right                           123.450000

   decimal Left                    12345678900000000
   decimal Right                 0.00000000123456789
   Left + Right       12345678900000000.000000001235
   Left - Right       12345678899999999.999999998765

   decimal Left                 123456789.0123456789
   decimal Right                123456789.1123456789
   Left + Right                 246913578.1246913578
   Left - Right                        -0.1000000000
*/

// Example of the Decimal addition and subtraction operators.
using namespace System;

// Display Decimal parameters and their sum and difference.
void ShowDecimalSumDiff( Decimal Left, Decimal Right )
{
   String^ dataFmt = "   {0,-18}{1,31}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Left", Left );
   Console::WriteLine( dataFmt, "Decimal Right", Right );
   Console::WriteLine( dataFmt, "Left + Right", Left + Right );
   Console::WriteLine( dataFmt, "Left - Right", Left - Right );
}

int main()
{
   Console::WriteLine( "This example of the Decimal "
   "addition and subtraction operators \ngenerates the "
   "following output. It displays the sum and \n"
   "difference of several pairs of Decimal objects." );

   // Create pairs of Decimal objects.
   ShowDecimalSumDiff( Decimal(1230000000,0,0,false,7), Decimal::Parse( "0.0012300" ) );
   ShowDecimalSumDiff( Decimal::Parse( "123.456789" ), Decimal::Parse( "0.006789" ) );
   ShowDecimalSumDiff( Decimal::Parse( "12345678900000000" ), Decimal::Parse( "0.00000000123456789" ) );
   ShowDecimalSumDiff( Decimal::Parse( "123456789.0123456789" ), Decimal::Parse( "123456789.1123456789" ) );
}

/*
This example of the Decimal addition and subtraction operators
generates the following output. It displays the sum and
difference of several pairs of Decimal objects.

   Decimal Left                          123.0000000
   Decimal Right                           0.0012300
   Left + Right                          123.0012300
   Left - Right                          122.9987700

   Decimal Left                           123.456789
   Decimal Right                            0.006789
   Left + Right                           123.463578
   Left - Right                           123.450000

   Decimal Left                    12345678900000000
   Decimal Right                 0.00000000123456789
   Left + Right       12345678900000000.000000001235
   Left - Right       12345678899999999.999999998765

   Decimal Left                 123456789.0123456789
   Decimal Right                123456789.1123456789
   Left + Right                 246913578.1246913578
   Left - Right                        -0.1000000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Add


Decimal ..::.Decrement 运算符

Decimal
.
.
::
.
Decrement 运算符
Decimal 结构

Decimal 操作数减 1。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator -- ( _
    d As Decimal _
) As Decimal
public static decimal operator --(
    decimal d
)
public:
static Decimal operator --(
    Decimal d
)
static let inline (--)
        d:decimal  : decimal

参数

d
类型： System Decimal
Decimal 操作数。

返回值

类型： System Decimal
d 减 1 所得的值。
异常 | 条件
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的代码示例对几个 Decimal 值应用 Decrement 运算符。

' Example of the Decimal increment, decrement, unary negation, and
' unary plus operators.
Imports System
Imports Microsoft.VisualBasic

Module DecIncrDecrUnaryDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Display the argument and the incremented and decremented values.
    Sub DecIncrDecrUnary( argument as Decimal )

        Dim toBeIncr As Decimal = argument
        Dim toBeDecr As Decimal = argument

        Console.WriteLine( "{0,-36}{1}", "Decimal argument: ", _
            argument )

        ' The op_Increment and op_Decrement operators must be
        ' explicitly coded in Visual Basic.

        ' Catch the exception if the increment operator throws one.
        Console.Write( "{0,-36}", "Decimal.op_Increment( argument )" )
        Try
            toBeIncr = Decimal.op_Increment( toBeIncr )
            Console.WriteLine( "{0}", toBeIncr )
        Catch ex As Exception
            Console.WriteLine( "{0}", GetExceptionType( ex ) )
        End Try

        ' Catch the exception if the decrement operator throws one.
        Console.Write( "{0,-36}", "Decimal.op_Decrement( argument )" )
        Try
            toBeDecr = Decimal.op_Decrement( toBeDecr )
            Console.WriteLine( "{0}", toBeDecr )
        Catch ex As Exception
            Console.WriteLine( "{0}", GetExceptionType( ex ) )
        End Try

        Console.WriteLine( )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal increment, decrement, " & _
            "unary negation, " & vbCrLf & "and unary plus " & _
            "operators generates the following output. It " & vbCrLf & _
            "displays the results of the operators on several " & _
            "Decimal values." & vbCrLf  )

        ' Create objects to compare with the reference.
        DecIncrDecrUnary( 0.000000123D )
        DecIncrDecrUnary( New Decimal( 123000000, 0, 0, false, 9 ) )

        ' The op_UnaryNegation and op_UnaryPlus operators must be
        ' explicitly coded in Visual Basic. If unary + or - is used,
        ' other methods are called.
        DecIncrDecrUnary( Decimal.op_UnaryNegation( _
            New Decimal( 123000000, 0, 0, false, 9 ) ) )
        DecIncrDecrUnary( Decimal.op_UnaryPlus( Decimal.MaxValue ) )
        DecIncrDecrUnary( Decimal.op_UnaryNegation( Decimal.MaxValue ) )
        DecIncrDecrUnary( Decimal.op_UnaryPlus( _
            7.5000000000000000000000000001D ) )
    End Sub
End Module

' This example of the Decimal increment, decrement, unary negation,
' and unary plus operators generates the following output. It
' displays the results of the operators on several Decimal values.
'
' Decimal argument:                   0.000000123
' Decimal.op_Increment( argument )    1.000000123
' Decimal.op_Decrement( argument )    -0.999999877
'
' Decimal argument:                   0.123000000
' Decimal.op_Increment( argument )    1.123000000
' Decimal.op_Decrement( argument )    -0.877000000
'
' Decimal argument:                   -0.123000000
' Decimal.op_Increment( argument )    0.877000000
' Decimal.op_Decrement( argument )    -1.123000000
'
' Decimal argument:                   79228162514264337593543950335
' Decimal.op_Increment( argument )    OverflowException
' Decimal.op_Decrement( argument )    79228162514264337593543950334
'
' Decimal argument:                   -79228162514264337593543950335
' Decimal.op_Increment( argument )    -79228162514264337593543950334
' Decimal.op_Decrement( argument )    OverflowException
'
' Decimal argument:                   7.5000000000000000000000000001
' Decimal.op_Increment( argument )    8.500000000000000000000000000
' Decimal.op_Decrement( argument )    6.5000000000000000000000000001

// Example of the decimal increment, decrement, unary negation, and
// unary plus operators.
using System;

class DecIncrDecrUnaryDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Display the argument and the incremented and decremented values.
    public static void DecIncrDecrUnary( decimal argument )
    {
        decimal toBeIncr = argument;
        decimal toBeDecr = argument;

        Console.WriteLine( "{0,-26}{1}", "decimal argument: ",
            argument );

        // Catch the exception if the increment operator throws one.
        Console.Write( "{0,-26}", "argument ++" );
        try
        {
            toBeIncr ++;
            Console.WriteLine( "{0}", toBeIncr );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}", GetExceptionType( ex ) );
        }

        // Catch the exception if the decrement operator throws one.
        Console.Write( "{0,-26}", "argument --" );
        try
        {
            toBeDecr --;
            Console.WriteLine( "{0}", toBeDecr );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}", GetExceptionType( ex ) );
        }

        Console.WriteLine( );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the decimal increment, " +
            "decrement, unary negation, \nand unary plus operators " +
            "generates the following output. It \ndisplays the " +
            "results of the operators on several decimal values.\n" );

        // Create objects to compare with the reference.
        DecIncrDecrUnary( 0.000000123M );
        DecIncrDecrUnary( new decimal( 123000000, 0, 0, false, 9 ) );
        DecIncrDecrUnary( - new decimal( 123000000, 0, 0, false, 9 ) );
        DecIncrDecrUnary( + decimal.MaxValue );
        DecIncrDecrUnary( - decimal.MaxValue );
        DecIncrDecrUnary( + 7.5000000000000000000000000001M );
    }
}

/*
This example of the decimal increment, decrement, unary negation,
and unary plus operators generates the following output. It
displays the results of the operators on several decimal values.

decimal argument:         0.000000123
argument ++               1.000000123
argument --               -0.999999877

decimal argument:         0.123000000
argument ++               1.123000000
argument --               -0.877000000

decimal argument:         -0.123000000
argument ++               0.877000000
argument --               -1.123000000

decimal argument:         79228162514264337593543950335
argument ++               OverflowException
argument --               79228162514264337593543950334

decimal argument:         -79228162514264337593543950335
argument ++               -79228162514264337593543950334
argument --               OverflowException

decimal argument:         7.5000000000000000000000000001
argument ++               8.500000000000000000000000000
argument --               6.5000000000000000000000000001
*/

// Example of the Decimal increment, decrement, unary negation, and
// unary plus operators.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Display the argument and the incremented and decremented values.
void DecIncrDecrUnary( Decimal argument )
{
   Decimal toBeIncr = argument;
   Decimal toBeDecr = argument;
   Console::WriteLine( "{0,-26}{1}", "Decimal argument: ", argument );

   // Catch the exception if the increment operator throws one.
   Console::Write( "{0,-26}", "argument ++" );
   try
   {
      toBeIncr++;
      Console::WriteLine( "{0}", toBeIncr );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}", GetExceptionType( ex ) );
   }

   // Catch the exception if the decrement operator throws one.
   Console::Write( "{0,-26}", "argument --" );
   try
   {
      toBeDecr--;
      Console::WriteLine( "{0}", toBeDecr );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}", GetExceptionType( ex ) );
   }

   Console::WriteLine();
}

int main()
{
   Console::WriteLine( "This example of the Decimal increment, "
   "decrement, unary negation, \nand unary plus operators "
   "generates the following output. It \ndisplays the "
   "results of the operators on several Decimal values.\n" );

   // Create objects to compare with the reference.
   DecIncrDecrUnary( Decimal::Parse( "0.000000123" ) );
   DecIncrDecrUnary( Decimal(123000000,0,0,false,9) );
   DecIncrDecrUnary(  -Decimal(123000000,0,0,false,9) );
   DecIncrDecrUnary(  +Decimal::MaxValue );
   DecIncrDecrUnary(  -Decimal::MaxValue );
   DecIncrDecrUnary(  +Decimal::Parse( "7.5000000000000000000000000001" ) );
}

/*
This example of the Decimal increment, decrement, unary negation,
and unary plus operators generates the following output. It
displays the results of the operators on several Decimal values.

Decimal argument:         0.000000123
argument ++               1.000000123
argument --               -0.999999877

Decimal argument:         0.123000000
argument ++               1.123000000
argument --               -0.877000000

Decimal argument:         -0.123000000
argument ++               0.877000000
argument --               -1.123000000

Decimal argument:         79228162514264337593543950335
argument ++               OverflowException
argument --               79228162514264337593543950334

Decimal argument:         -79228162514264337593543950335
argument ++               -79228162514264337593543950334
argument --               OverflowException

Decimal argument:         7.5000000000000000000000000001
argument ++               8.500000000000000000000000000
argument --               6.5000000000000000000000000001
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Subtract


Decimal ..::.Division 运算符

Decimal
.
.
::
.
Division 运算符
Decimal 结构

两个指定的 Decimal 值相除。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator / ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal operator /(
    decimal d1,
    decimal d2
)
public:
static Decimal operator /(
    Decimal d1,
    Decimal d2
)
static let inline (/)
        d1:decimal *
        d2:decimal  : decimal

参数

d1
类型： System Decimal
Decimal（被除数）。
d2
类型： System Decimal
Decimal（除数）。

返回值

类型： System Decimal
d1 除以 d2 的 Decimal 结果。
异常 | 条件
DivideByZeroException | d2 是零。
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的代码示例创建几对 Decimal 值，并使用 Division 运算符计算它们的商。

' Example of the Decimal multiplication, division, and modulus
' operators.
Imports System
Imports Microsoft.VisualBasic

Module DecimalMulDivRemOpsDemo

    Const dataFmt As String = "{0,-38}{1,31}"

    ' Display Decimal parameters and their product, quotient, and
    ' remainder.
    Sub ShowDecimalProQuoRem( Left as Decimal, Right as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Left", Left )
        Console.WriteLine( dataFmt, "Decimal Right", Right )

        ' The op_Multiply, op_Division, and op_Modulus operators must
        ' be explicitly coded in Visual Basic. If binary *, /, or
        ' Mod are used, other methods are called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Multiply( Left, Right )", _
            Decimal.op_Multiply( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Division( Left, Right )", _
            Decimal.op_Division( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Modulus( Left, Right )", _
            Decimal.op_Modulus( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal multiplication, " & _
            "division, and modulus " & vbCrLf & "operators " & _
            "generates the following output. It displays the " & _
            "product, " & vbCrLf & "quotient, and remainder of " & _
            "several pairs of Decimal objects." )

        ' Create pairs of Decimal objects.
        ShowDecimalProQuoRem( 1000D, 7D )
        ShowDecimalProQuoRem( -1000D, 7D )
        ShowDecimalProQuoRem( _
            new Decimal( 1230000000, 0, 0, False, 7 ), _
            0.0012300D )
        ShowDecimalProQuoRem( 12345678900000000D, _
            0.0000000012345678D )
        ShowDecimalProQuoRem( 123456789.0123456789D, _
            123456789.1123456789D )
    End Sub
End Module

' This example of the Decimal multiplication, division, and modulus
' operators generates the following output. It displays the product,
' quotient, and remainder of several pairs of Decimal objects.
'
' Decimal Left                                                     1000
' Decimal Right                                                       7
' Decimal.op_Multiply( Left, Right )                               7000
' Decimal.op_Division( Left, Right )     142.85714285714285714285714286
' Decimal.op_Modulus( Left, Right )                                   6
'
' Decimal Left                                                    -1000
' Decimal Right                                                       7
' Decimal.op_Multiply( Left, Right )                              -7000
' Decimal.op_Division( Left, Right )    -142.85714285714285714285714286
' Decimal.op_Modulus( Left, Right )                                  -6
'
' Decimal Left                                              123.0000000
' Decimal Right                                                 0.00123
' Decimal.op_Multiply( Left, Right )                     0.151290000000
' Decimal.op_Division( Left, Right )                          100000.00
' Decimal.op_Modulus( Left, Right )                                   0
'
' Decimal Left                                        12345678900000000
' Decimal Right                                      0.0000000012345678
' Decimal.op_Multiply( Left, Right )          15241577.6390794200000000
' Decimal.op_Division( Left, Right )     10000000729000059778004901.796
' Decimal.op_Modulus( Left, Right )                      0.000000000983
'
' Decimal Left                                     123456789.0123456789
' Decimal Right                                    123456789.1123456789
' Decimal.op_Multiply( Left, Right )     15241578765584515.651425087878
' Decimal.op_Division( Left, Right )     0.9999999991899999933660999449
' Decimal.op_Modulus( Left, Right )                123456789.0123456789

// Example of the decimal multiplication, division, and modulus
// operators.
using System;

class DecimalMulDivRemOpsDemo
{
    const string dataFmt = "   {0,-18}{1,31}";

    // Display decimal parameters and their product, quotient, and
    // remainder.
    public static void ShowDecimalProQuoRem( decimal Left, decimal Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Left", Left );
        Console.WriteLine( dataFmt, "decimal Right", Right );
        Console.WriteLine( dataFmt, "Left * Right", Left * Right );
        Console.WriteLine( dataFmt, "Left / Right", Left / Right );
        Console.WriteLine( dataFmt, "Left % Right", Left % Right );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the decimal multiplication, division, " +
            "and modulus \noperators generates the following " +
            "output. It displays the product, \nquotient, and " +
            "remainder of several pairs of decimal objects." );

        // Create pairs of decimal objects.
        ShowDecimalProQuoRem( 1000M, 7M );
        ShowDecimalProQuoRem( -1000M, 7M );
        ShowDecimalProQuoRem(
            new decimal( 1230000000, 0, 0, false, 7 ), 0.0012300M );
        ShowDecimalProQuoRem( 12345678900000000M,
            0.0000000012345678M );
        ShowDecimalProQuoRem( 123456789.0123456789M,
            123456789.1123456789M );
    }
}

/*
This example of the decimal multiplication, division, and modulus
operators generates the following output. It displays the product,
quotient, and remainder of several pairs of decimal objects.

   decimal Left                                 1000
   decimal Right                                   7
   Left * Right                                 7000
   Left / Right       142.85714285714285714285714286
   Left % Right                                    6

   decimal Left                                -1000
   decimal Right                                   7
   Left * Right                                -7000
   Left / Right      -142.85714285714285714285714286
   Left % Right                                   -6

   decimal Left                          123.0000000
   decimal Right                           0.0012300
   Left * Right                     0.15129000000000
   Left / Right                               100000
   Left % Right                                    0

   decimal Left                    12345678900000000
   decimal Right                  0.0000000012345678
   Left * Right            15241577.6390794200000000
   Left / Right       10000000729000059778004901.796
   Left % Right                       0.000000000983

   decimal Left                 123456789.0123456789
   decimal Right                123456789.1123456789
   Left * Right       15241578765584515.651425087878
   Left / Right       0.9999999991899999933660999449
   Left % Right                 123456789.0123456789
*/

// Example of the Decimal multiplication, division, and modulus
// operators.
using namespace System;

// Display Decimal parameters and their product, quotient, and
// remainder.
void ShowDecimalProQuoRem( Decimal Left, Decimal Right )
{
   String^ dataFmt = "   {0,-18}{1,31}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Left", Left );
   Console::WriteLine( dataFmt, "Decimal Right", Right );
   Console::WriteLine( dataFmt, "Left * Right", Left * Right );
   Console::WriteLine( dataFmt, "Left / Right", Left / Right );
   Console::WriteLine( dataFmt, "Left % Right", Left % Right );
}

int main()
{
   Console::WriteLine( "This example of the Decimal multiplication, division, "
   "and modulus \noperators generates the following "
   "output. It displays the product, \nquotient, and "
   "remainder of several pairs of Decimal objects." );

   // Create pairs of Decimal objects.
   ShowDecimalProQuoRem( Decimal::Parse( "1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "-1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal(1230000000,0,0,false,7), Decimal::Parse( "0.0012300" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "12345678900000000" ), Decimal::Parse( "0.0000000012345678" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "123456789.0123456789" ), Decimal::Parse( "123456789.1123456789" ) );
}

/*
This example of the Decimal multiplication, division, and modulus
operators generates the following output. It displays the product,
quotient, and remainder of several pairs of Decimal objects.

   Decimal Left                                 1000
   Decimal Right                                   7
   Left * Right                                 7000
   Left / Right       142.85714285714285714285714286
   Left % Right                                    6

   Decimal Left                                -1000
   Decimal Right                                   7
   Left * Right                                -7000
   Left / Right      -142.85714285714285714285714286
   Left % Right                                   -6

   Decimal Left                          123.0000000
   Decimal Right                           0.0012300
   Left * Right                     0.15129000000000
   Left / Right                               100000
   Left % Right                                    0

   Decimal Left                    12345678900000000
   Decimal Right                  0.0000000012345678
   Left * Right            15241577.6390794200000000
   Left / Right       10000000729000059778004901.796
   Left % Right                       0.000000000983

   Decimal Left                 123456789.0123456789
   Decimal Right                123456789.1123456789
   Left * Right       15241578765584515.651425087878
   Left / Right       0.9999999991899999933660999449
   Left % Right                 123456789.0123456789
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Divide


Decimal ..::.Equality 运算符

Decimal
.
.
::
.
Equality 运算符
Decimal 结构

返回一个值，该值指示 Decimal 的两个实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Boolean
public static bool operator ==(
    decimal d1,
    decimal d2
)
public:
static bool operator ==(
    Decimal d1,
    Decimal d2
)
static let inline (=)
        d1:decimal *
        d2:decimal  : bool

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Boolean
如果 d1 和 d2 相等，则为 true；否则为 false。

下面的代码示例使用 Equality 运算符，将几个 Decimal 值同一个参考 Decimal 值进行比较。

' Example of the Decimal relational operators.
Imports System
Imports Microsoft.VisualBasic

Module DecRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare Decimal parameters, and display them with the results.
    Sub CompareDecimals( Left As Decimal, Right As Decimal, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )

        ' The op_Equality, op_GreaterThan, op_GreaterThanOrEqual,
        ' op_Inequality, op_LessThan, and op_LessThanOrEqual operators
        ' must be explicitly coded in Visual Basic. If binary =, >,
        ' >=, <>, <, or <= are used, the Compare method is called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Equality( Left, Right )", _
            Decimal.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThan( Left, Right )", _
            Decimal.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThanOrEqual( Left, Right )", _
            Decimal.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Inequality( Left, Right )", _
            Decimal.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThan( Left, Right )", _
            Decimal.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThanOrEqual( Left, Right )", _
            Decimal.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New Decimal( 123.456 )

        Console.WriteLine( _
            "This example of the Decimal relational operators " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several different Decimal values " & vbCrLf & _
            "and compares them with the following reference " & _
            "value." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left )

        ' Create objects to compare with a 2-hour Decimal.
        CompareDecimals( Left, New Decimal( 1.23456E+2 ), _
            "Decimal( 1.23456E+2 )" )
        CompareDecimals( Left, New Decimal( 123.4567 ), _
            "Decimal( 123.4567 )" )
        CompareDecimals( Left, New Decimal( 123.4553 ), _
            "Decimal( 123.4553 )" )
        CompareDecimals( Left, New Decimal( 123456000, 0, 0, False, 6 ), _
            "Decimal( 123456000, 0, 0, False, 6 )" )
    End Sub
End Module

' This example of the Decimal relational operators generates the
' following output. It creates several different Decimal values
' and compares them with the following reference value.
'
' Left: Decimal( 123.456 )                       123.456
'
' Right: Decimal( 1.23456E+2 )                   123.456
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4567 )                     123.4567
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   False
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             True
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4553 )                     123.4553
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          True
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      False
'
' Right: Decimal( 123456000, 0, 0, False, 6 )    123.456000
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True

// Example of the decimal relational operators.
using System;

class DecRelationalOpsDemo
{
    const string dataFmt = "{0,43}    {1}" ;

    // Compare decimal parameters, and display them with the results.
    static void CompareDecimals( decimal Left, decimal Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        decimal Left = new decimal( 123.456 );

        Console.WriteLine(
            "This example of the decimal relational operators " +
            "generates the \nfollowing output. It creates several " +
            "different decimal values \nand compares them with " +
            "the following reference value.\n" );
        Console.WriteLine( dataFmt,
            "Left: decimal( 123.456 )", Left );

        // Create objects to compare with a 2-hour decimal.
        CompareDecimals( Left, new decimal( 1.23456E+2 ),
            "decimal( 1.23456E+2 )" );
        CompareDecimals( Left, new decimal( 123.4567 ),
            "decimal( 123.4567 )" );
        CompareDecimals( Left, new decimal( 123.4553 ),
            "decimal( 123.4553 )" );
        CompareDecimals( Left, new decimal( 123456000, 0, 0, false, 6 ),
            "decimal( 123456000, 0, 0, false, 6 )" );
    }
}

/*
This example of the decimal relational operators generates the
following output. It creates several different decimal values
and compares them with the following reference value.

                   Left: decimal( 123.456 )    123.456

               Right: decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

// Example of the Decimal relational operators.
using namespace System;
#define dataFmt "{0,43}    {1}"

// Compare Decimal parameters, and display them with the results.
void CompareDecimals( Decimal Left, Decimal Right, String^ RightText )
{
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   Decimal Left = Decimal(123.456);
   Console::WriteLine( "This example of the Decimal relational operators "
   "generates the \nfollowing output. It creates several "
   "different Decimal values \nand compares them with "
   "the following reference value.\n" );
   Console::WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left );

   // Create objects to compare with a 2-hour Decimal.
   CompareDecimals( Left, Decimal(1.23456E+2), "Decimal( 1.23456E+2 )" );
   CompareDecimals( Left, Decimal(123.4567), "Decimal( 123.4567 )" );
   CompareDecimals( Left, Decimal(123.4553), "Decimal( 123.4553 )" );
   CompareDecimals( Left, Decimal(123456000,0,0,false,6), "Decimal( 123456000, 0, 0, false, 6 )" );
}

/*
This example of the Decimal relational operators generates the
following output. It creates several different Decimal values
and compares them with the following reference value.

                   Left: Decimal( 123.456 )    123.456

               Right: Decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: Decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: Decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: Decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Compare
Equals


Decimal ExplicitNarrowingExplicitExplicit 转换运算符

Decimal
Explicit
Narrowing
Explicit
Explicit
转换运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

将 Decimal 对象的值转换为其他类型。

名称 说明
页首

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to Byte)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to Byte)
Decimal 结构

将 Decimal 转换为 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As Byte
public static explicit operator byte (
    decimal value
)
static explicit operator unsigned char (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System Byte
8 位无符号整数，它表示转换后的 Decimal。
异常 | 条件
OverflowException | value 小于 Byte..::.MinValue 或大于 Byte..::.MaxValue。

此运算符支持将 Decimal 显式转换为 Byte。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Byte 值时的不同返回值。若要执行与语言无关的转换，您可以调用 Decimal..::.ToByte 或 Convert..::.ToByte(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Byte。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Byte 值时的不同返回值。若要执行与语言无关的转换，您可以调用 Decimal..::.ToByte 或 Convert..::.ToByte(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Byte。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Byte 值时的不同返回值。若要执行与语言无关的转换，您可以调用 Decimal..::.ToByte 或 Convert..::.ToByte(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Byte。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Byte 值时的不同返回值。若要执行与语言无关的转换，您可以调用 Decimal..::.ToByte 或 Convert..::.ToByte(Decimal) 方法。

下面的代码示例使用显式 Decimal to Byte 转换，将 Decimal 数字转换为 Byte 值。

' Example of the explicit conversions from Decimal to Byte and
' Decimal to SByte.
'
' Option Strict must be on, or compiler will attempt to perform explicit
' conversions without an explicit conversion method call.
Option Strict On

Module DecimalToS_ByteDemo

    Const formatter As String = "{0,16}{1,19}{2,19}"

    ' Convert the decimal argument; catch exceptions that are thrown.
    Public Sub DecimalToS_Byte(argument As Decimal)
        Dim sByteValue As Object
        Dim byteValue As Object

        ' Convert the argument to an sbyte value.
        Try
            sByteValue = CByte(argument)
        Catch ex As Exception
            sByteValue = ex.GetType().Name
        End Try

        ' Convert the argument to a byte value.
        Try
            byteValue = CType(argument, Byte)
        Catch ex As Exception
            byteValue = ex.GetType().Name
        End Try

        Console.WriteLine( formatter, argument, sbyteValue, byteValue )
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal argument", _
            "SByte/Exception", "Byte/Exception" )
        Console.WriteLine( formatter, "----------------", _
            "---------------", "--------------" )

        ' Convert decimal values and display the results.
        DecimalToS_Byte(78d)
        DecimalToS_Byte(New Decimal(78000, 0, 0, false, 3))
        DecimalToS_Byte(78.999d)
        DecimalToS_Byte(255.999d)
        DecimalToS_Byte(256d)
        DecimalToS_Byte(127.999d)
        DecimalToS_Byte(128d)
        DecimalToS_Byte(-0.999d)
        DecimalToS_Byte(-1d)
        DecimalToS_Byte(-128.999d)
        DecimalToS_Byte(-129d)
    End Sub
End Module
' The example displays the following output to the console:
'    Decimal argument    SByte/Exception     Byte/Exception
'    ----------------    ---------------     --------------
'                  78                 78                 78
'              78.000                 78                 78
'              78.999                 79                 79
'             255.999  OverflowException  OverflowException
'                 256  OverflowException  OverflowException
'             127.999                128                128
'                 128                128                128
'              -0.999  OverflowException  OverflowException
'                  -1  OverflowException  OverflowException
'            -128.999  OverflowException  OverflowException
'                -129  OverflowException  OverflowException

// Example of the explicit conversions from decimal to byte and
// decimal to sbyte.
using System;

class DecimalToS_ByteDemo
{
    const string formatter = "{0,16}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToS_Byte( decimal argument )
    {
        object SByteValue;
        object ByteValue;

        // Convert the argument to an sbyte value.
        try
        {
            SByteValue = (sbyte)argument;
        }
        catch( Exception ex )
        {
            SByteValue = GetExceptionType( ex );
        }

        // Convert the argument to a byte value.
        try
        {
            ByteValue = (byte)argument;
        }
        catch( Exception ex )
        {
            ByteValue = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            SByteValue, ByteValue );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to sbyte \nand decimal to byte generates the following " +
            "output. It displays \nseveral converted decimal " +
            "values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "sbyte/exception", "byte/exception" );
        Console.WriteLine( formatter, "----------------",
            "---------------", "--------------" );

        // Convert decimal values and display the results.
        DecimalToS_Byte( 78M );
        DecimalToS_Byte( new decimal( 78000, 0, 0, false, 3 ) );
        DecimalToS_Byte( 78.999M );
        DecimalToS_Byte( 255.999M );
        DecimalToS_Byte( 256M );
        DecimalToS_Byte( 127.999M );
        DecimalToS_Byte( 128M );
        DecimalToS_Byte( -0.999M );
        DecimalToS_Byte( -1M );
        DecimalToS_Byte( -128.999M );
        DecimalToS_Byte( -129M );
    }
}

/*
This example of the explicit conversions from decimal to sbyte
and decimal to byte generates the following output. It displays
several converted decimal values.

decimal argument    sbyte/exception     byte/exception
----------------    ---------------     --------------
              78                 78                 78
          78.000                 78                 78
          78.999                 78                 78
         255.999  OverflowException                255
             256  OverflowException  OverflowException
         127.999                127                127
             128  OverflowException                128
          -0.999                  0                  0
              -1                 -1  OverflowException
        -128.999               -128  OverflowException
            -129  OverflowException  OverflowException
*/

// Example of the explicit conversions from Decimal to char and
// Decimal to unsigned char.
using namespace System;
#define formatter "{0,16}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToS_Byte( Decimal argument )
{
   Object^ ByteValue;
   Object^ SByteValue;

   // Convert the argument to an unsigned byte value.
   try
   {
      ByteValue = (unsigned char)argument;
   }
   catch ( Exception^ ex )
   {
      ByteValue = GetExceptionType( ex );
   }

   // Convert the argument to a signed byte value.
   // The cast (char) causes a compile error.
   try
   {
      SByteValue = (signed char)argument;
   }
   catch ( Exception^ ex )
   {
      SByteValue = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, ByteValue, SByteValue );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal "
   "to signed \nand unsigned 8-bit char generates the "
   "following output. It \ndisplays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "unsigned char", "signed char" );
   Console::WriteLine( formatter, "----------------", "-------------", "-----------" );

   // Convert Decimal values and display the results.
   DecimalToS_Byte( Decimal::Parse(  "78" ) );
   DecimalToS_Byte( Decimal(78000,0,0,false,3) );
   DecimalToS_Byte( Decimal::Parse(  "78.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "255.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "256" ) );
   DecimalToS_Byte( Decimal::Parse(  "127.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "128" ) );
   DecimalToS_Byte( Decimal::Parse(  "-0.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "-1" ) );
   DecimalToS_Byte( Decimal::Parse(  "-128.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "-129" ) );
}

/*
This example of the explicit conversions from Decimal to signed
and unsigned 8-bit char generates the following output. It
displays several converted Decimal values.

Decimal argument      unsigned char        signed char
----------------      -------------        -----------
              78                 78                 78
          78.000                 78                 78
          78.999                 78                 78
         255.999                255  OverflowException
             256  OverflowException  OverflowException
         127.999                127                127
             128                128  OverflowException
          -0.999                  0                  0
              -1  OverflowException                 -1
        -128.999  OverflowException               -128
            -129  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Byte


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to UInt16)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to UInt16)
Decimal 结构

将 Decimal 转换成 16 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As UShort
public static explicit operator ushort (
    decimal value
)
static explicit operator unsigned short (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System UInt16
16 位无符号整数，它表示转换后的 Decimal。
异常 | 条件
OverflowException | value 大于 UInt16..::.MaxValue 或小于 UInt16..::.MinValue。

此运算符支持将 Decimal 显式转换为 UInt16。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt16 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt16 或 Convert..::.ToUInt16(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 UInt16。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt16 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt16 或 Convert..::.ToUInt16(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 UInt16。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt16 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt16 或 Convert..::.ToUInt16(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 UInt16。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt16 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt16 或 Convert..::.ToUInt16(Decimal) 方法。

下面的代码示例使用显式 Decimal to UInt16 转换，将 Decimal 数字转换为 UInt16 值。

' Example of the explicit conversions from Decimal to Short and
' Decimal to UShort.
Module DecimalToU_Int16Demo

    Const formatter As String = "{0,16}{1,19}{2,19}"

    ' Convert the decimal argument and catch exceptions that are thrown.
    Public Sub DecimalToU_Int16(argument As Decimal)
        Dim Int16Value As Object
        Dim UInt16Value As Object

        ' Convert the argument to a Short value.
        Try
            Int16Value = CShort(argument)
        Catch ex As Exception
            Int16Value = ex.GetType().Name
        End Try

        ' Convert the argument to a UShort value.
        Try
            UInt16Value = CUShort(argument)
        Catch ex As Exception
            UInt16Value = ex.GetType().Name
        End Try

        Console.WriteLine( formatter, argument, _
            Int16Value, UInt16Value )
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal argument", _
            "Short/Exception", "UShort/Exception" )
        Console.WriteLine( formatter, "----------------", _
            "---------------", "----------------" )

        ' Convert decimal values and display the results.
        DecimalToU_Int16(123d)
        DecimalToU_Int16(New Decimal( 123000, 0, 0, False, 3 ))
        DecimalToU_Int16(123.999d)
        DecimalToU_Int16(65535.999d)
        DecimalToU_Int16(65536d)
        DecimalToU_Int16(32767.999d)
        DecimalToU_Int16(32768d)
        DecimalToU_Int16(-0.999d)
        DecimalToU_Int16(-1d)
        DecimalToU_Int16(-32768.999d)
        DecimalToU_Int16(-32769d)
    End Sub
End Module
' This example displays the following output to the console:
'    Decimal argument    Short/Exception   UShort/Exception
'    ----------------    ---------------   ----------------
'                 123                123                123
'             123.000                123                123
'             123.999                124                124
'           65535.999  OverflowException  OverflowException
'               65536  OverflowException  OverflowException
'           32767.999  OverflowException              32768
'               32768  OverflowException              32768
'              -0.999                 -1  OverflowException
'                  -1                 -1  OverflowException
'          -32768.999  OverflowException  OverflowException
'              -32769  OverflowException  OverflowException

// Example of the explicit conversions from decimal to short and
// decimal to ushort.
using System;

class DecimalToU_Int16Demo
{
    const string formatter = "{0,16}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int16( decimal argument )
    {
        object Int16Value;
        object UInt16Value;

        // Convert the argument to a short value.
        try
        {
            Int16Value = (short)argument;
        }
        catch( Exception ex )
        {
            Int16Value = GetExceptionType( ex );
        }

        // Convert the argument to a ushort value.
        try
        {
            UInt16Value = (ushort)argument;
        }
        catch( Exception ex )
        {
            UInt16Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int16Value, UInt16Value );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to short \nand decimal to ushort generates the " +
            "following output. It displays \nseveral converted " +
            "decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "short/exception", "ushort/exception" );
        Console.WriteLine( formatter, "----------------",
            "---------------", "----------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int16( 123M );
        DecimalToU_Int16( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int16( 123.999M );
        DecimalToU_Int16( 65535.999M );
        DecimalToU_Int16( 65536M );
        DecimalToU_Int16( 32767.999M );
        DecimalToU_Int16( 32768M );
        DecimalToU_Int16( - 0.999M );
        DecimalToU_Int16( - 1M );
        DecimalToU_Int16( - 32768.999M );
        DecimalToU_Int16( - 32769M );
    }
}

/*
This example of the explicit conversions from decimal to short
and decimal to ushort generates the following output. It displays
several converted decimal values.

decimal argument    short/exception   ushort/exception
----------------    ---------------   ----------------
             123                123                123
         123.000                123                123
         123.999                123                123
       65535.999  OverflowException              65535
           65536  OverflowException  OverflowException
       32767.999              32767              32767
           32768  OverflowException              32768
          -0.999                  0                  0
              -1                 -1  OverflowException
      -32768.999             -32768  OverflowException
          -32769  OverflowException  OverflowException
*/

// Example of the explicit conversions from Decimal to short and
// Decimal to unsigned short.
using namespace System;
#define formatter "{0,16}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int16( Decimal argument )
{
   Object^ Int16Value;
   Object^ UInt16Value;

   // Convert the argument to a short value.
   try
   {
      Int16Value = (short)argument;
   }
   catch ( Exception^ ex )
   {
      Int16Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned short value.
   try
   {
      UInt16Value = (unsigned short)argument;
   }
   catch ( Exception^ ex )
   {
      UInt16Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int16Value, UInt16Value );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal to "
   "short \nand Decimal to unsigned short generates the "
   "following output. \nIt displays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "short", "unsigned short" );
   Console::WriteLine( formatter, "----------------", "-----", "--------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int16( Decimal::Parse(  "123" ) );
   DecimalToU_Int16( Decimal(123000,0,0,false,3) );
   DecimalToU_Int16( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "65535.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "65536" ) );
   DecimalToU_Int16( Decimal::Parse(  "32767.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "32768" ) );
   DecimalToU_Int16( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "-1" ) );
   DecimalToU_Int16( Decimal::Parse(  "-32768.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "-32769" ) );
}

/*
This example of the explicit conversions from Decimal to short
and Decimal to unsigned short generates the following output.
It displays several converted Decimal values.

Decimal argument              short     unsigned short
----------------              -----     --------------
             123                123                123
         123.000                123                123
         123.999                123                123
       65535.999  OverflowException              65535
           65536  OverflowException  OverflowException
       32767.999              32767              32767
           32768  OverflowException              32768
          -0.999                  0                  0
              -1                 -1  OverflowException
      -32768.999             -32768  OverflowException
          -32769  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
UInt16


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to SByte)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to SByte)
Decimal 结构

将 Decimal 转换成 8 位有符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 ToInt16(Decimal)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As SByte
public static explicit operator sbyte (
    decimal value
)
static explicit operator signed char (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System SByte
8 位有符号整数，它表示转换后的 Decimal。
异常 | 条件
OverflowException | value 小于 SByte..::.MinValue 或大于 SByte..::.MaxValue。

此运算符支持将 Decimal 显式转换为 SByte。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Byte 和 SByte 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToSByte 方法或 Convert..::.ToSByte(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 SByte。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Byte 和 SByte 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToSByte 方法或 Convert..::.ToSByte(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 SByte。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Byte 和 SByte 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToSByte 方法或 Convert..::.ToSByte(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 SByte。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Byte 和 SByte 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToSByte 方法或 Convert..::.ToSByte(Decimal) 方法。

下面的代码示例使用显式 Decimal to SByte 转换，将 Decimal 数字转换为 SByte 值。

' Example of the explicit conversions from Decimal to Byte and
' Decimal to SByte.
'
' Option Strict must be on, or compiler will attempt to perform explicit
' conversions without an explicit conversion method call.
Option Strict On

Module DecimalToS_ByteDemo

    Const formatter As String = "{0,16}{1,19}{2,19}"

    ' Convert the decimal argument; catch exceptions that are thrown.
    Public Sub DecimalToS_Byte(argument As Decimal)
        Dim sByteValue As Object
        Dim byteValue As Object

        ' Convert the argument to an sbyte value.
        Try
            sByteValue = CByte(argument)
        Catch ex As Exception
            sByteValue = ex.GetType().Name
        End Try

        ' Convert the argument to a byte value.
        Try
            byteValue = CType(argument, Byte)
        Catch ex As Exception
            byteValue = ex.GetType().Name
        End Try

        Console.WriteLine( formatter, argument, sbyteValue, byteValue )
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal argument", _
            "SByte/Exception", "Byte/Exception" )
        Console.WriteLine( formatter, "----------------", _
            "---------------", "--------------" )

        ' Convert decimal values and display the results.
        DecimalToS_Byte(78d)
        DecimalToS_Byte(New Decimal(78000, 0, 0, false, 3))
        DecimalToS_Byte(78.999d)
        DecimalToS_Byte(255.999d)
        DecimalToS_Byte(256d)
        DecimalToS_Byte(127.999d)
        DecimalToS_Byte(128d)
        DecimalToS_Byte(-0.999d)
        DecimalToS_Byte(-1d)
        DecimalToS_Byte(-128.999d)
        DecimalToS_Byte(-129d)
    End Sub
End Module
' The example displays the following output to the console:
'    Decimal argument    SByte/Exception     Byte/Exception
'    ----------------    ---------------     --------------
'                  78                 78                 78
'              78.000                 78                 78
'              78.999                 79                 79
'             255.999  OverflowException  OverflowException
'                 256  OverflowException  OverflowException
'             127.999                128                128
'                 128                128                128
'              -0.999  OverflowException  OverflowException
'                  -1  OverflowException  OverflowException
'            -128.999  OverflowException  OverflowException
'                -129  OverflowException  OverflowException

// Example of the explicit conversions from decimal to byte and
// decimal to sbyte.
using System;

class DecimalToS_ByteDemo
{
    const string formatter = "{0,16}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToS_Byte( decimal argument )
    {
        object SByteValue;
        object ByteValue;

        // Convert the argument to an sbyte value.
        try
        {
            SByteValue = (sbyte)argument;
        }
        catch( Exception ex )
        {
            SByteValue = GetExceptionType( ex );
        }

        // Convert the argument to a byte value.
        try
        {
            ByteValue = (byte)argument;
        }
        catch( Exception ex )
        {
            ByteValue = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            SByteValue, ByteValue );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to sbyte \nand decimal to byte generates the following " +
            "output. It displays \nseveral converted decimal " +
            "values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "sbyte/exception", "byte/exception" );
        Console.WriteLine( formatter, "----------------",
            "---------------", "--------------" );

        // Convert decimal values and display the results.
        DecimalToS_Byte( 78M );
        DecimalToS_Byte( new decimal( 78000, 0, 0, false, 3 ) );
        DecimalToS_Byte( 78.999M );
        DecimalToS_Byte( 255.999M );
        DecimalToS_Byte( 256M );
        DecimalToS_Byte( 127.999M );
        DecimalToS_Byte( 128M );
        DecimalToS_Byte( -0.999M );
        DecimalToS_Byte( -1M );
        DecimalToS_Byte( -128.999M );
        DecimalToS_Byte( -129M );
    }
}

/*
This example of the explicit conversions from decimal to sbyte
and decimal to byte generates the following output. It displays
several converted decimal values.

decimal argument    sbyte/exception     byte/exception
----------------    ---------------     --------------
              78                 78                 78
          78.000                 78                 78
          78.999                 78                 78
         255.999  OverflowException                255
             256  OverflowException  OverflowException
         127.999                127                127
             128  OverflowException                128
          -0.999                  0                  0
              -1                 -1  OverflowException
        -128.999               -128  OverflowException
            -129  OverflowException  OverflowException
*/

// Example of the explicit conversions from Decimal to char and
// Decimal to unsigned char.
using namespace System;
#define formatter "{0,16}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToS_Byte( Decimal argument )
{
   Object^ ByteValue;
   Object^ SByteValue;

   // Convert the argument to an unsigned byte value.
   try
   {
      ByteValue = (unsigned char)argument;
   }
   catch ( Exception^ ex )
   {
      ByteValue = GetExceptionType( ex );
   }

   // Convert the argument to a signed byte value.
   // The cast (char) causes a compile error.
   try
   {
      SByteValue = (signed char)argument;
   }
   catch ( Exception^ ex )
   {
      SByteValue = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, ByteValue, SByteValue );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal "
   "to signed \nand unsigned 8-bit char generates the "
   "following output. It \ndisplays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "unsigned char", "signed char" );
   Console::WriteLine( formatter, "----------------", "-------------", "-----------" );

   // Convert Decimal values and display the results.
   DecimalToS_Byte( Decimal::Parse(  "78" ) );
   DecimalToS_Byte( Decimal(78000,0,0,false,3) );
   DecimalToS_Byte( Decimal::Parse(  "78.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "255.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "256" ) );
   DecimalToS_Byte( Decimal::Parse(  "127.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "128" ) );
   DecimalToS_Byte( Decimal::Parse(  "-0.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "-1" ) );
   DecimalToS_Byte( Decimal::Parse(  "-128.999" ) );
   DecimalToS_Byte( Decimal::Parse(  "-129" ) );
}

/*
This example of the explicit conversions from Decimal to signed
and unsigned 8-bit char generates the following output. It
displays several converted Decimal values.

Decimal argument      unsigned char        signed char
----------------      -------------        -----------
              78                 78                 78
          78.000                 78                 78
          78.999                 78                 78
         255.999                255  OverflowException
             256  OverflowException  OverflowException
         127.999                127                127
             128                128  OverflowException
          -0.999                  0                  0
              -1  OverflowException                 -1
        -128.999  OverflowException               -128
            -129  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
SByte


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to Int16)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to Int16)
Decimal 结构

将 Decimal 转换成 16 位有符号的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As Short
public static explicit operator short (
    decimal value
)
static explicit operator short (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System Int16
16 位有符号整数，它表示转换后的 Decimal。
异常 | 条件
OverflowException | value 小于 Int16..::.MinValue 或大于 Int16..::.MaxValue。

此运算符支持将 Decimal 显式转换为 Int16。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int16 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt16 或 Convert..::.ToInt16(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Int16。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int16 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt16 或 Convert..::.ToInt16(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Int16。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int16 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt16 或 Convert..::.ToInt16(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Int16。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int16 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt16 或 Convert..::.ToInt16(Decimal) 方法。

下面的代码示例使用显式 Decimal to Int16 转换，将 Decimal 数字转换为 Int16 值。

' Example of the explicit conversions from Decimal to Short and
' Decimal to UShort.
Module DecimalToU_Int16Demo

    Const formatter As String = "{0,16}{1,19}{2,19}"

    ' Convert the decimal argument and catch exceptions that are thrown.
    Public Sub DecimalToU_Int16(argument As Decimal)
        Dim Int16Value As Object
        Dim UInt16Value As Object

        ' Convert the argument to a Short value.
        Try
            Int16Value = CShort(argument)
        Catch ex As Exception
            Int16Value = ex.GetType().Name
        End Try

        ' Convert the argument to a UShort value.
        Try
            UInt16Value = CUShort(argument)
        Catch ex As Exception
            UInt16Value = ex.GetType().Name
        End Try

        Console.WriteLine( formatter, argument, _
            Int16Value, UInt16Value )
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal argument", _
            "Short/Exception", "UShort/Exception" )
        Console.WriteLine( formatter, "----------------", _
            "---------------", "----------------" )

        ' Convert decimal values and display the results.
        DecimalToU_Int16(123d)
        DecimalToU_Int16(New Decimal( 123000, 0, 0, False, 3 ))
        DecimalToU_Int16(123.999d)
        DecimalToU_Int16(65535.999d)
        DecimalToU_Int16(65536d)
        DecimalToU_Int16(32767.999d)
        DecimalToU_Int16(32768d)
        DecimalToU_Int16(-0.999d)
        DecimalToU_Int16(-1d)
        DecimalToU_Int16(-32768.999d)
        DecimalToU_Int16(-32769d)
    End Sub
End Module
' This example displays the following output to the console:
'    Decimal argument    Short/Exception   UShort/Exception
'    ----------------    ---------------   ----------------
'                 123                123                123
'             123.000                123                123
'             123.999                124                124
'           65535.999  OverflowException  OverflowException
'               65536  OverflowException  OverflowException
'           32767.999  OverflowException              32768
'               32768  OverflowException              32768
'              -0.999                 -1  OverflowException
'                  -1                 -1  OverflowException
'          -32768.999  OverflowException  OverflowException
'              -32769  OverflowException  OverflowException

// Example of the explicit conversions from decimal to short and
// decimal to ushort.
using System;

class DecimalToU_Int16Demo
{
    const string formatter = "{0,16}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int16( decimal argument )
    {
        object Int16Value;
        object UInt16Value;

        // Convert the argument to a short value.
        try
        {
            Int16Value = (short)argument;
        }
        catch( Exception ex )
        {
            Int16Value = GetExceptionType( ex );
        }

        // Convert the argument to a ushort value.
        try
        {
            UInt16Value = (ushort)argument;
        }
        catch( Exception ex )
        {
            UInt16Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int16Value, UInt16Value );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to short \nand decimal to ushort generates the " +
            "following output. It displays \nseveral converted " +
            "decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "short/exception", "ushort/exception" );
        Console.WriteLine( formatter, "----------------",
            "---------------", "----------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int16( 123M );
        DecimalToU_Int16( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int16( 123.999M );
        DecimalToU_Int16( 65535.999M );
        DecimalToU_Int16( 65536M );
        DecimalToU_Int16( 32767.999M );
        DecimalToU_Int16( 32768M );
        DecimalToU_Int16( - 0.999M );
        DecimalToU_Int16( - 1M );
        DecimalToU_Int16( - 32768.999M );
        DecimalToU_Int16( - 32769M );
    }
}

/*
This example of the explicit conversions from decimal to short
and decimal to ushort generates the following output. It displays
several converted decimal values.

decimal argument    short/exception   ushort/exception
----------------    ---------------   ----------------
             123                123                123
         123.000                123                123
         123.999                123                123
       65535.999  OverflowException              65535
           65536  OverflowException  OverflowException
       32767.999              32767              32767
           32768  OverflowException              32768
          -0.999                  0                  0
              -1                 -1  OverflowException
      -32768.999             -32768  OverflowException
          -32769  OverflowException  OverflowException
*/

// Example of the explicit conversions from Decimal to short and
// Decimal to unsigned short.
using namespace System;
#define formatter "{0,16}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int16( Decimal argument )
{
   Object^ Int16Value;
   Object^ UInt16Value;

   // Convert the argument to a short value.
   try
   {
      Int16Value = (short)argument;
   }
   catch ( Exception^ ex )
   {
      Int16Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned short value.
   try
   {
      UInt16Value = (unsigned short)argument;
   }
   catch ( Exception^ ex )
   {
      UInt16Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int16Value, UInt16Value );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal to "
   "short \nand Decimal to unsigned short generates the "
   "following output. \nIt displays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "short", "unsigned short" );
   Console::WriteLine( formatter, "----------------", "-----", "--------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int16( Decimal::Parse(  "123" ) );
   DecimalToU_Int16( Decimal(123000,0,0,false,3) );
   DecimalToU_Int16( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "65535.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "65536" ) );
   DecimalToU_Int16( Decimal::Parse(  "32767.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "32768" ) );
   DecimalToU_Int16( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "-1" ) );
   DecimalToU_Int16( Decimal::Parse(  "-32768.999" ) );
   DecimalToU_Int16( Decimal::Parse(  "-32769" ) );
}

/*
This example of the explicit conversions from Decimal to short
and Decimal to unsigned short generates the following output.
It displays several converted Decimal values.

Decimal argument              short     unsigned short
----------------              -----     --------------
             123                123                123
         123.000                123                123
         123.999                123                123
       65535.999  OverflowException              65535
           65536  OverflowException  OverflowException
       32767.999              32767              32767
           32768  OverflowException              32768
          -0.999                  0                  0
              -1                 -1  OverflowException
      -32768.999             -32768  OverflowException
          -32769  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Int16


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to Single)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to Single)
Decimal 结构

将 Decimal 转换为单精度浮点数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As Single
public static explicit operator float (
    decimal value
)
static explicit operator float (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System Single
单精度浮点数字，它表示转换后的 Decimal。

此运算可能会产生舍入误差，这是由于单精度浮点数字的有效位比 Decimal 少。

此运算符支持将 Decimal 显式转换为 Single。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Single 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToSingle 或 Convert..::.ToSingle(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Single。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Single 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToSingle 或 Convert..::.ToSingle(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Single。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Single 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToSingle 或 Convert..::.ToSingle(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Single。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Single 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToSingle 或 Convert..::.ToSingle(Decimal) 方法。

下面的代码示例使用显式 Decimal to Single 转换，将 Decimal 数字转换为 Single 值。

' Example of the explicit conversions from decimal to float and
' decimal to double.
Module DecimalToSgl_DblDemo

    Const formatter As String = "{0,30}{1,17}{2,23}"

    ' Convert the Decimal argument to a floating point value
    ' No exceptions are thrown.
    Public Sub DecimalToSgl_Dbl(argument As Decimal)
        Dim SingleValue As Single
        Dim DoubleValue As Double

        ' Convert the argument to a Single value.
        SingleValue = CSng(argument)

        ' Convert the argument to a Double value.
        DoubleValue = CDbl(argument)

        Console.WriteLine(formatter, argument, _
            SingleValue, DoubleValue )
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal argument", _
            "Single", "Double" )
        Console.WriteLine( formatter, "----------------", _
            "-----", "------" )

        ' Convert decimal values and display the results.
        DecimalToSgl_Dbl(0.0000000000000000000000000001d)
        DecimalToSgl_Dbl(0.0000000000123456789123456789d)
        DecimalToSgl_Dbl(123d)
        DecimalToSgl_Dbl(New Decimal( 123000000, 0, 0, False, 6))
        DecimalToSgl_Dbl(123456789.123456789d)
        DecimalToSgl_Dbl(123456789123456789123456789d)
        DecimalToSgl_Dbl(Decimal.MinValue )
        DecimalToSgl_Dbl(Decimal.MaxValue )
    End Sub
End Module
' The example displays the following output to the console:
'                  Decimal argument           Single                 Double
'                  ----------------            -----                 ------
'    0.0000000000000000000000000001            1E-28                  1E-28
'    0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
'                               123              123                    123
'                        123.000000              123                    123
'               123456789.123456789     1.234568E+08       123456789.123457
'       123456789123456789123456789     1.234568E+26   1.23456789123457E+26
'    -79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
'     79228162514264337593543950335     7.922816E+28   7.92281625142643E+28

// Example of the explicit conversions from decimal to float and
// decimal to double.
using System;

class DecimalToSgl_DblDemo
{
    static string formatter = "{0,30}{1,17}{2,23}";

    // Convert the decimal argument; no exceptions are thrown.
    public static void DecimalToSgl_Dbl( decimal argument )
    {
        object SingleValue;
        object DoubleValue;

        // Convert the argument to a single value.
        SingleValue = (float)argument;

        // Convert the argument to a double value.
        DoubleValue = (double)argument;

        Console.WriteLine( formatter, argument,
            SingleValue, DoubleValue );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to float \nand decimal to double generates the " +
            "following output. It displays \nseveral converted " +
            "decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "float", "double" );
        Console.WriteLine( formatter, "----------------",
            "-----", "------" );

        // Convert decimal values and display the results.
        DecimalToSgl_Dbl( 0.0000000000000000000000000001M );
        DecimalToSgl_Dbl( 0.0000000000123456789123456789M );
        DecimalToSgl_Dbl( 123M );
        DecimalToSgl_Dbl( new decimal( 123000000, 0, 0, false, 6 ) );
        DecimalToSgl_Dbl( 123456789.123456789M );
        DecimalToSgl_Dbl( 123456789123456789123456789M );
        DecimalToSgl_Dbl( decimal.MinValue );
        DecimalToSgl_Dbl( decimal.MaxValue );
    }
}

/*
This example of the explicit conversions from decimal to float
and decimal to double generates the following output. It displays
several converted decimal values.

              decimal argument            float                 double
              ----------------            -----                 ------
0.0000000000000000000000000001            1E-28                  1E-28
0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
                           123              123                    123
                    123.000000              123                    123
           123456789.123456789     1.234568E+08       123456789.123457
   123456789123456789123456789     1.234568E+26   1.23456789123457E+26
-79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
 79228162514264337593543950335     7.922816E+28   7.92281625142643E+28
*/

// Example of the explicit conversions from Decimal to float and
// Decimal to double.
using namespace System;
#define formatter "{0,30}{1,17}{2,23}"

// Convert the Decimal argument; no exceptions are thrown.
void DecimalToSgl_Dbl( Decimal argument )
{
   Object^ SingleValue;
   Object^ DoubleValue;

   // Convert the argument to a float value.
   SingleValue = (float)argument;

   // Convert the argument to a double value.
   DoubleValue = (double)argument;
   Console::WriteLine( formatter, argument, SingleValue, DoubleValue );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal to "
   "float \nand Decimal to double generates the "
   "following output. It \ndisplays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "float", "double" );
   Console::WriteLine( formatter, "----------------", "-----", "------" );

   // Convert Decimal values and display the results.
   DecimalToSgl_Dbl( Decimal::Parse(  "0.0000000000000000000000000001" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "0.0000000000123456789123456789" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123" ) );
   DecimalToSgl_Dbl( Decimal(123000000,0,0,false,6) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123456789.123456789" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123456789123456789123456789" ) );
   DecimalToSgl_Dbl( Decimal::MinValue );
   DecimalToSgl_Dbl( Decimal::MaxValue );
}

/*
This example of the explicit conversions from Decimal to float
and Decimal to double generates the following output. It
displays several converted Decimal values.

              Decimal argument            float                 double
              ----------------            -----                 ------
0.0000000000000000000000000001            1E-28                  1E-28
0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
                           123              123                    123
                    123.000000              123                    123
           123456789.123456789     1.234568E+08       123456789.123457
   123456789123456789123456789     1.234568E+26   1.23456789123457E+26
-79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
 79228162514264337593543950335     7.922816E+28   7.92281625142643E+28
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Single


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to Double)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to Double)
Decimal 结构

将 Decimal 转换为双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As Double
public static explicit operator double (
    decimal value
)
static explicit operator double (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System Double
双精度浮点数，它表示转换后的 Decimal。

此运算可能会产生舍入误差，这是由于双精度浮点数的有效位比 Decimal 少。

此运算符支持将 Decimal 显式转换为 Double。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Double 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToDouble 或 Convert..::.ToDouble(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Double。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Double 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToDouble 或 Convert..::.ToDouble(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Double。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Double 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToDouble 或 Convert..::.ToDouble(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Double。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Double 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToDouble 或 Convert..::.ToDouble(Decimal) 方法。

下面的代码示例使用显式 Decimal to Double 转换，将 Decimal 数字转换为 Double 值。

' Example of the explicit conversions from decimal to float and
' decimal to double.
Module DecimalToSgl_DblDemo

    Const formatter As String = "{0,30}{1,17}{2,23}"

    ' Convert the Decimal argument to a floating point value
    ' No exceptions are thrown.
    Public Sub DecimalToSgl_Dbl(argument As Decimal)
        Dim SingleValue As Single
        Dim DoubleValue As Double

        ' Convert the argument to a Single value.
        SingleValue = CSng(argument)

        ' Convert the argument to a Double value.
        DoubleValue = CDbl(argument)

        Console.WriteLine(formatter, argument, _
            SingleValue, DoubleValue )
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal argument", _
            "Single", "Double" )
        Console.WriteLine( formatter, "----------------", _
            "-----", "------" )

        ' Convert decimal values and display the results.
        DecimalToSgl_Dbl(0.0000000000000000000000000001d)
        DecimalToSgl_Dbl(0.0000000000123456789123456789d)
        DecimalToSgl_Dbl(123d)
        DecimalToSgl_Dbl(New Decimal( 123000000, 0, 0, False, 6))
        DecimalToSgl_Dbl(123456789.123456789d)
        DecimalToSgl_Dbl(123456789123456789123456789d)
        DecimalToSgl_Dbl(Decimal.MinValue )
        DecimalToSgl_Dbl(Decimal.MaxValue )
    End Sub
End Module
' The example displays the following output to the console:
'                  Decimal argument           Single                 Double
'                  ----------------            -----                 ------
'    0.0000000000000000000000000001            1E-28                  1E-28
'    0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
'                               123              123                    123
'                        123.000000              123                    123
'               123456789.123456789     1.234568E+08       123456789.123457
'       123456789123456789123456789     1.234568E+26   1.23456789123457E+26
'    -79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
'     79228162514264337593543950335     7.922816E+28   7.92281625142643E+28

// Example of the explicit conversions from decimal to float and
// decimal to double.
using System;

class DecimalToSgl_DblDemo
{
    static string formatter = "{0,30}{1,17}{2,23}";

    // Convert the decimal argument; no exceptions are thrown.
    public static void DecimalToSgl_Dbl( decimal argument )
    {
        object SingleValue;
        object DoubleValue;

        // Convert the argument to a single value.
        SingleValue = (float)argument;

        // Convert the argument to a double value.
        DoubleValue = (double)argument;

        Console.WriteLine( formatter, argument,
            SingleValue, DoubleValue );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to float \nand decimal to double generates the " +
            "following output. It displays \nseveral converted " +
            "decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "float", "double" );
        Console.WriteLine( formatter, "----------------",
            "-----", "------" );

        // Convert decimal values and display the results.
        DecimalToSgl_Dbl( 0.0000000000000000000000000001M );
        DecimalToSgl_Dbl( 0.0000000000123456789123456789M );
        DecimalToSgl_Dbl( 123M );
        DecimalToSgl_Dbl( new decimal( 123000000, 0, 0, false, 6 ) );
        DecimalToSgl_Dbl( 123456789.123456789M );
        DecimalToSgl_Dbl( 123456789123456789123456789M );
        DecimalToSgl_Dbl( decimal.MinValue );
        DecimalToSgl_Dbl( decimal.MaxValue );
    }
}

/*
This example of the explicit conversions from decimal to float
and decimal to double generates the following output. It displays
several converted decimal values.

              decimal argument            float                 double
              ----------------            -----                 ------
0.0000000000000000000000000001            1E-28                  1E-28
0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
                           123              123                    123
                    123.000000              123                    123
           123456789.123456789     1.234568E+08       123456789.123457
   123456789123456789123456789     1.234568E+26   1.23456789123457E+26
-79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
 79228162514264337593543950335     7.922816E+28   7.92281625142643E+28
*/

// Example of the explicit conversions from Decimal to float and
// Decimal to double.
using namespace System;
#define formatter "{0,30}{1,17}{2,23}"

// Convert the Decimal argument; no exceptions are thrown.
void DecimalToSgl_Dbl( Decimal argument )
{
   Object^ SingleValue;
   Object^ DoubleValue;

   // Convert the argument to a float value.
   SingleValue = (float)argument;

   // Convert the argument to a double value.
   DoubleValue = (double)argument;
   Console::WriteLine( formatter, argument, SingleValue, DoubleValue );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal to "
   "float \nand Decimal to double generates the "
   "following output. It \ndisplays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "float", "double" );
   Console::WriteLine( formatter, "----------------", "-----", "------" );

   // Convert Decimal values and display the results.
   DecimalToSgl_Dbl( Decimal::Parse(  "0.0000000000000000000000000001" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "0.0000000000123456789123456789" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123" ) );
   DecimalToSgl_Dbl( Decimal(123000000,0,0,false,6) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123456789.123456789" ) );
   DecimalToSgl_Dbl( Decimal::Parse(  "123456789123456789123456789" ) );
   DecimalToSgl_Dbl( Decimal::MinValue );
   DecimalToSgl_Dbl( Decimal::MaxValue );
}

/*
This example of the explicit conversions from Decimal to float
and Decimal to double generates the following output. It
displays several converted Decimal values.

              Decimal argument            float                 double
              ----------------            -----                 ------
0.0000000000000000000000000001            1E-28                  1E-28
0.0000000000123456789123456789     1.234568E-11   1.23456789123457E-11
                           123              123                    123
                    123.000000              123                    123
           123456789.123456789     1.234568E+08       123456789.123457
   123456789123456789123456789     1.234568E+26   1.23456789123457E+26
-79228162514264337593543950335    -7.922816E+28  -7.92281625142643E+28
 79228162514264337593543950335     7.922816E+28   7.92281625142643E+28
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Double


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to Char)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to Char)
Decimal 结构

将 Decimal 转换为 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As Char
public static explicit operator char (
    decimal value
)
static explicit operator wchar_t (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System Char
表示转换后的 Decimal 的 Unicode 字符。
异常 | 条件
OverflowException | value 小于 Int16..::.MinValue 或大于 Int16..::.MaxValue。

下面的代码示例通过显式 Decimal to Char 转换，将 Decimal 数字转换为 Char 值（Unicode 字符）。

' Visual Basic does not support explicit Decimal-to-Char
' conversion using either CType or CChar.

// Example of the explicit conversion from decimal to char.
using System;

class DecimalToCharDemo
{
    const string formatter = "{0,17}{1,19}{2,12}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToChar( decimal argument )
    {
        object CharValue;

        // Convert the argument to a char value.
        try
        {
            CharValue = (char)argument;
            Console.WriteLine( formatter, argument, CharValue,
                ( (ushort)(char)CharValue ).ToString( "X4" ) );
        }
        catch( Exception ex )
        {
            CharValue = GetExceptionType( ex );
            Console.WriteLine( formatter, argument, CharValue, null );
        }
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversion from decimal " +
            "\nto char generates the following output. It " +
            "displays \nseveral converted decimal values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "char/exception", "hex code" );
        Console.WriteLine( formatter, "----------------",
            "--------------", "--------" );

        // Convert decimal values and display the results.
        DecimalToChar( 33.33M );
        DecimalToChar( 55.5M );
        DecimalToChar( 77.7M );
        DecimalToChar( 123M );
        DecimalToChar( 123.999M );
        DecimalToChar( 143.43M );
        DecimalToChar( 170M );
        DecimalToChar( 188.88M );
        DecimalToChar( 222M );
        DecimalToChar( 244M );
        DecimalToChar( 488M );
        DecimalToChar( 8217M );
        DecimalToChar( 8250M );
        DecimalToChar( 16383M );
        DecimalToChar( 32768M );
        DecimalToChar( 65535.999M );
        DecimalToChar( 65536M );
        DecimalToChar( - 0.999M );
        DecimalToChar( - 1M );
    }
}

/*
This example of the explicit conversion from decimal
to char generates the following output. It displays
several converted decimal values.

 decimal argument     char/exception    hex code
 ----------------     --------------    --------
            33.33                  !        0021
             55.5                  7        0037
             77.7                  M        004D
              123                  {        007B
          123.999                  {        007B
           143.43                  ?        008F
              170                           00AA
           188.88                           00BC
              222                  _        00DE
              244                           00F4
              488                  K        01E8
             8217                  '        2019
             8250                  >        203A
            16383                  ?        3FFF
            32768                  ?        8000
        65535.999                  ?        FFFF
            65536  OverflowException
           -0.999                           0000
               -1  OverflowException
*/

// Example of the explicit conversion from Decimal to __wchar_t.
using namespace System;
#define formatter "{0,17}{1,19}{2,12}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToChar( Decimal argument )
{
   Object^ CharValue;

   // Convert the argument to a __wchar_t value.
   try
   {
      CharValue = (__wchar_t)argument;
      Console::WriteLine( formatter, argument, CharValue, ((unsigned short)( *static_cast<__wchar_t^>(CharValue))).ToString( "X4" ) );
   }
   catch ( Exception^ ex )
   {
      CharValue = GetExceptionType( ex );
      Console::WriteLine( formatter, argument, CharValue, String::Empty );
   }

}

int main()
{
   Console::WriteLine( "This example of the explicit conversion from Decimal to "
   "\n__wchar_t generates the following output. It "
   "displays \nseveral converted Decimal values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "__wchar_t", "hex code" );
   Console::WriteLine( formatter, "----------------", "---------", "--------" );

   // Convert Decimal values and display the results.
   DecimalToChar( Decimal::Parse(  "33.33" ) );
   DecimalToChar( Decimal::Parse(  "55.5" ) );
   DecimalToChar( Decimal::Parse(  "77.7" ) );
   DecimalToChar( Decimal::Parse(  "123" ) );
   DecimalToChar( Decimal::Parse(  "123.999" ) );
   DecimalToChar( Decimal::Parse(  "170" ) );
   DecimalToChar( Decimal::Parse(  "188.88" ) );
   DecimalToChar( Decimal::Parse(  "222" ) );
   DecimalToChar( Decimal::Parse(  "244" ) );
   DecimalToChar( Decimal::Parse(  "488" ) );
   DecimalToChar( Decimal::Parse(  "8217" ) );
   DecimalToChar( Decimal::Parse(  "8250" ) );
   DecimalToChar( Decimal::Parse(  "16383" ) );
   DecimalToChar( Decimal::Parse(  "65535.999" ) );
   DecimalToChar( Decimal::Parse(  "65536" ) );
   DecimalToChar( Decimal::Parse(  "-0.999" ) );
   DecimalToChar( Decimal::Parse(  "-1" ) );
}

/*
This example of the explicit conversion from Decimal to
__wchar_t generates the following output. It displays
several converted Decimal values.

 Decimal argument          __wchar_t    hex code
 ----------------          ---------    --------
            33.33                  !        0021
             55.5                  7        0037
             77.7                  M        004D
              123                  {        007B
          123.999                  {        007B
              170                           00AA
           188.88                           00BC
              222                  _        00DE
              244                           00F4
              488                  K        01E8
             8217                  '        2019
             8250                  >        203A
            16383                  ?        3FFF
        65535.999                  ?        FFFF
            65536  OverflowException
           -0.999                           0000
               -1  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Char


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to UInt64)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to UInt64)
Decimal 结构

将 Decimal 转换成 64 位无符号整数。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As ULong
public static explicit operator ulong (
    decimal value
)
static explicit operator unsigned long long (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System UInt64
64 位无符号整数，它表示转换后的 Decimal。
异常 | 条件
OverflowException | value 为负数或大于 UInt64..::.MaxValue。

此运算符支持将 Decimal 显式转换为 UInt64。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt64 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt64 或 Convert..::.ToUInt64(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 UInt64。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt64 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt64 或 Convert..::.ToUInt64(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 UInt64。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt64 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt64 或 Convert..::.ToUInt64(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 UInt64。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt64 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt64 或 Convert..::.ToUInt64(Decimal) 方法。

下面的代码示例使用显式 Decimal to UInt64 转换，将 Decimal 数字转换为 UInt64 值。

' Example of the explicit conversions from Decimal to Long and
' Decimal to ULong.
Module DecimalToU_Int64Demo

    Const formatter As String = "{0,25}{1,22}{2,22}"

    ' Convert the decimal argument catch exceptions that are thrown.
    Public Sub DecimalToU_Int64(argument As Decimal)
        Dim Int64Value As Object
        Dim UInt64Value As Object

        ' Convert the argument to a long value.
        Try
            Int64Value = CLng(argument)
        Catch ex As Exception
            Int64Value = ex.GetType().Name
        End Try

        ' Convert the argument to a ulong value.
        Try
            UInt64Value = CULng(argument)
        Catch ex As Exception
            UInt64Value = ex.GetType().Name
        End Try

        Console.WriteLine(formatter, argument, _
            Int64Value, UInt64Value)
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal argument", _
            "Long/Exception", "ULong/Exception" )
        Console.WriteLine( formatter, "----------------", _
            "--------------", "---------------" )

        ' Convert decimal values and display the results.
        DecimalToU_Int64(123d)
        DecimalToU_Int64(New Decimal(123000, 0, 0, False, 3))
        DecimalToU_Int64(123.999d)
        DecimalToU_Int64(18446744073709551615.999d)
        DecimalToU_Int64(18446744073709551616d)
        DecimalToU_Int64(9223372036854775807.999d)
        DecimalToU_Int64(9223372036854775808d)
        DecimalToU_Int64(-0.999d)
        DecimalToU_Int64(-1d)
        DecimalToU_Int64(-9223372036854775808.999d)
        DecimalToU_Int64(-9223372036854775809d)
    End Sub
End Module
' The example displays the following output to the console:
'             Decimal argument        Long/Exception       ULong/Exception
'             ----------------        --------------       ---------------
'                          123                   123                   123
'                      123.000                   123                   123
'                      123.999                   124                   124
'     18446744073709551615.999     OverflowException     OverflowException
'         18446744073709551616     OverflowException     OverflowException
'      9223372036854775807.999     OverflowException   9223372036854775808
'          9223372036854775808     OverflowException   9223372036854775808
'                       -0.999                    -1     OverflowException
'                           -1                    -1     OverflowException
'     -9223372036854775808.999     OverflowException     OverflowException
'         -9223372036854775809     OverflowException     OverflowException

// Example of the explicit conversions from decimal to long and
// decimal to ulong.
using System;

class DecimalToU_Int64Demo
{
    const string formatter = "{0,25}{1,22}{2,22}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int64( decimal argument )
    {
        object Int64Value;
        object UInt64Value;

        // Convert the argument to a long value.
        try
        {
            Int64Value = (long)argument;
        }
        catch( Exception ex )
        {
            Int64Value = GetExceptionType( ex );
        }

        // Convert the argument to a ulong value.
        try
        {
            UInt64Value = (ulong)argument;
        }
        catch( Exception ex )
        {
            UInt64Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int64Value, UInt64Value );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to long \nand decimal to ulong generates the following " +
            "output. It displays \nseveral converted decimal " +
            "values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "long/exception", "ulong/exception" );
        Console.WriteLine( formatter, "----------------",
            "--------------", "---------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int64( 123M );
        DecimalToU_Int64( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int64( 123.999M );
        DecimalToU_Int64( 18446744073709551615.999M );
        DecimalToU_Int64( 18446744073709551616M );
        DecimalToU_Int64( 9223372036854775807.999M );
        DecimalToU_Int64( 9223372036854775808M );
        DecimalToU_Int64( - 0.999M );
        DecimalToU_Int64( - 1M );
        DecimalToU_Int64( - 9223372036854775808.999M );
        DecimalToU_Int64( - 9223372036854775809M );
    }
}

/*
This example of the explicit conversions from decimal to long
and decimal to ulong generates the following output. It displays
several converted decimal values.

         decimal argument        long/exception       ulong/exception
         ----------------        --------------       ---------------
                      123                   123                   123
                  123.000                   123                   123
                  123.999                   123                   123
 18446744073709551615.999     OverflowException  18446744073709551615
     18446744073709551616     OverflowException     OverflowException
  9223372036854775807.999   9223372036854775807   9223372036854775807
      9223372036854775808     OverflowException   9223372036854775808
                   -0.999                     0                     0
                       -1                    -1     OverflowException
 -9223372036854775808.999  -9223372036854775808     OverflowException
     -9223372036854775809     OverflowException     OverflowException
*/

// Example of the explicit conversions from Decimal to __int64 and
// Decimal to unsigned __int64.
using namespace System;
#define formatter "{0,25}{1,22}{2,22}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int64( Decimal argument )
{
   Object^ Int64Value;
   Object^ UInt64Value;

   // Convert the argument to an __int64 value.
   try
   {
      Int64Value = (__int64)argument;
   }
   catch ( Exception^ ex )
   {
      Int64Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned __int64 value.
   try
   {
      UInt64Value = (unsigned __int64)argument;
   }
   catch ( Exception^ ex )
   {
      UInt64Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int64Value, UInt64Value );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal to "
   "__int64 \nand Decimal to unsigned __int64 generates the "
   "following output. \nIt displays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "__int64", "unsigned __int64" );
   Console::WriteLine( formatter, "----------------", "-------", "----------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int64( Decimal::Parse(  "123" ) );
   DecimalToU_Int64( Decimal(123000,0,0,false,3) );
   DecimalToU_Int64( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "18446744073709551615.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "18446744073709551616" ) );
   DecimalToU_Int64( Decimal::Parse(  "9223372036854775807.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "9223372036854775808" ) );
   DecimalToU_Int64( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "-1" ) );
   DecimalToU_Int64( Decimal::Parse(  "-9223372036854775808.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "-9223372036854775809" ) );
}

/*
This example of the explicit conversions from Decimal to __int64
and Decimal to unsigned __int64 generates the following output.
It displays several converted Decimal values.

         Decimal argument               __int64      unsigned __int64
         ----------------               -------      ----------------
                      123                   123                   123
                  123.000                   123                   123
                  123.999                   123                   123
 18446744073709551615.999     OverflowException  18446744073709551615
     18446744073709551616     OverflowException     OverflowException
  9223372036854775807.999   9223372036854775807   9223372036854775807
      9223372036854775808     OverflowException   9223372036854775808
                   -0.999                     0                     0
                       -1                    -1     OverflowException
 -9223372036854775808.999  -9223372036854775808     OverflowException
     -9223372036854775809     OverflowException     OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
UInt64


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to Int32)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to Int32)
Decimal 结构

将 Decimal 转换成 32 位有符号的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As Integer
public static explicit operator int (
    decimal value
)
static explicit operator int (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System Int32
32 位有符号整数，它表示转换后的 Decimal。
异常 | 条件
OverflowException | value 小于 Int32..::.MinValue 或大于 Int32..::.MaxValue。

此运算符支持将 Decimal 显式转换为 Int32。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int32 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt32 或 Convert..::.ToInt32(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Int32。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int32 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt32 或 Convert..::.ToInt32(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Int32。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int32 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt32 或 Convert..::.ToInt32(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Int32。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int32 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt32 或 Convert..::.ToInt32(Decimal) 方法。

下面的代码示例使用显式 Decimal to Int32 转换，将 Decimal 数字转换为 Int32 值。

' Example of the explicit conversions from Decimal to Integer and
' Decimal to UInteger.
Module DecimalToU_Int32Demo

    Const formatter As String = "{0,17}{1,19}{2,19}"

    ' Convert the decimal argument catch exceptions that are thrown.
    Public Sub DecimalToU_Int32(argument As Decimal)
        Dim Int32Value As Object
        Dim UInt32Value As Object

        ' Convert the argument to an int value.
        Try
            Int32Value = CInt(argument)
        Catch ex As Exception
            Int32Value = ex.GetType().Name
        End Try

        ' Convert the argument to a uint value.
        Try
            UInt32Value = CUInt(argument)
        Catch ex As Exception
            UInt32Value = ex.GetType().Name
        End Try

        Console.WriteLine(formatter, argument, _
            Int32Value, UInt32Value)
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal Argument", _
            "Integer/Exception", "UInteger/Exception" )
        Console.WriteLine( formatter, "----------------", _
            "-------------", "--------------" )

        ' Convert decimal values and display the results.
        DecimalToU_Int32( 123d)
        DecimalToU_Int32(New Decimal(123000, 0, 0, False, 3))
        DecimalToU_Int32(123.999d)
        DecimalToU_Int32(4294967295.999d)
        DecimalToU_Int32(4294967296d)
        DecimalToU_Int32(2147483647.999d)
        DecimalToU_Int32(2147483648d)
        DecimalToU_Int32(-0.999d)
        DecimalToU_Int32(-1d)
        DecimalToU_Int32(-2147483648.999d)
        DecimalToU_Int32(-2147483649d)
    End Sub
End Module
' The example displays the following output to the console:
'     Decimal Argument  Integer/Exception UInteger/Exception
'     ----------------      -------------     --------------
'                  123                123                123
'              123.000                123                123
'              123.999                124                124
'       4294967295.999  OverflowException  OverflowException
'           4294967296  OverflowException  OverflowException
'       2147483647.999  OverflowException         2147483648
'           2147483648  OverflowException         2147483648
'               -0.999                 -1  OverflowException
'                   -1                 -1  OverflowException
'      -2147483648.999  OverflowException  OverflowException
'          -2147483649  OverflowException  OverflowException

// Example of the explicit conversions from decimal to int and
// decimal to uint.
using System;

class DecimalToU_Int32Demo
{
    const string formatter = "{0,17}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int32( decimal argument )
    {
        object Int32Value;
        object UInt32Value;

        // Convert the argument to an int value.
        try
        {
            Int32Value = (int)argument;
        }
        catch( Exception ex )
        {
            Int32Value = GetExceptionType( ex );
        }

        // Convert the argument to a uint value.
        try
        {
            UInt32Value = (uint)argument;
        }
        catch( Exception ex )
        {
            UInt32Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int32Value, UInt32Value );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to int \nand decimal to uint generates the following " +
            "output. It displays \nseveral converted decimal " +
            "values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "int/exception", "uint/exception" );
        Console.WriteLine( formatter, "----------------",
            "-------------", "--------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int32( 123M );
        DecimalToU_Int32( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int32( 123.999M );
        DecimalToU_Int32( 4294967295.999M );
        DecimalToU_Int32( 4294967296M );
        DecimalToU_Int32( 2147483647.999M );
        DecimalToU_Int32( 2147483648M );
        DecimalToU_Int32( - 0.999M );
        DecimalToU_Int32( - 1M );
        DecimalToU_Int32( - 2147483648.999M );
        DecimalToU_Int32( - 2147483649M );
    }
}

/*
This example of the explicit conversions from decimal to int
and decimal to uint generates the following output. It displays
several converted decimal values.

 decimal argument      int/exception     uint/exception
 ----------------      -------------     --------------
              123                123                123
          123.000                123                123
          123.999                123                123
   4294967295.999  OverflowException         4294967295
       4294967296  OverflowException  OverflowException
   2147483647.999         2147483647         2147483647
       2147483648  OverflowException         2147483648
           -0.999                  0                  0
               -1                 -1  OverflowException
  -2147483648.999        -2147483648  OverflowException
      -2147483649  OverflowException  OverflowException
*/

// Example of the explicit conversions from Decimal to int and
// Decimal to unsigned int.
using namespace System;
#define formatter "{0,17}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int32( Decimal argument )
{
   Object^ Int32Value;
   Object^ UInt32Value;

   // Convert the argument to an int value.
   try
   {
      Int32Value = (int)argument;
   }
   catch ( Exception^ ex )
   {
      Int32Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned int value.
   try
   {
      UInt32Value = (unsigned int)argument;
   }
   catch ( Exception^ ex )
   {
      UInt32Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int32Value, UInt32Value );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal to "
   "int \nand Decimal to unsigned int generates the "
   "following output. \nIt displays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "int", "unsigned int" );
   Console::WriteLine( formatter, "----------------", "---", "------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int32( Decimal::Parse(  "123" ) );
   DecimalToU_Int32( Decimal(123000,0,0,false,3) );
   DecimalToU_Int32( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "4294967295.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "4294967296" ) );
   DecimalToU_Int32( Decimal::Parse(  "2147483647.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "2147483648" ) );
   DecimalToU_Int32( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "-1" ) );
   DecimalToU_Int32( Decimal::Parse(  "-2147483648.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "-2147483649" ) );
}

/*
This example of the explicit conversions from Decimal to int
and Decimal to unsigned int generates the following output.
It displays several converted Decimal values.

 Decimal argument                int       unsigned int
 ----------------                ---       ------------
              123                123                123
          123.000                123                123
          123.999                123                123
   4294967295.999  OverflowException         4294967295
       4294967296  OverflowException  OverflowException
   2147483647.999         2147483647         2147483647
       2147483648  OverflowException         2147483648
           -0.999                  0                  0
               -1                 -1  OverflowException
  -2147483648.999        -2147483648  OverflowException
      -2147483649  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Int32


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to UInt32)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to UInt32)
Decimal 结构

将 Decimal 转换成 32 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 ToInt64(Decimal)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As UInteger
public static explicit operator uint (
    decimal value
)
static explicit operator unsigned int (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System UInt32
32 位无符号整数，它表示转换后的 Decimal。
异常 | 条件
OverflowException | value 为负数或大于 UInt32..::.MaxValue。

此运算符支持将 Decimal 显式转换为 UInt32。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt32 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt32 或 Convert..::.ToUInt32(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 UInt32。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt32 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt32 或 Convert..::.ToUInt32(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 UInt32。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt32 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt32 或 Convert..::.ToUInt32(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 UInt32。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 UInt32 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToUInt32 或 Convert..::.ToUInt32(Decimal) 方法。

下面的代码示例使用显式 Decimal to UInt32 转换，将 Decimal 数字转换为 UInt32 值。

' Example of the explicit conversions from Decimal to Integer and
' Decimal to UInteger.
Module DecimalToU_Int32Demo

    Const formatter As String = "{0,17}{1,19}{2,19}"

    ' Convert the decimal argument catch exceptions that are thrown.
    Public Sub DecimalToU_Int32(argument As Decimal)
        Dim Int32Value As Object
        Dim UInt32Value As Object

        ' Convert the argument to an int value.
        Try
            Int32Value = CInt(argument)
        Catch ex As Exception
            Int32Value = ex.GetType().Name
        End Try

        ' Convert the argument to a uint value.
        Try
            UInt32Value = CUInt(argument)
        Catch ex As Exception
            UInt32Value = ex.GetType().Name
        End Try

        Console.WriteLine(formatter, argument, _
            Int32Value, UInt32Value)
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal Argument", _
            "Integer/Exception", "UInteger/Exception" )
        Console.WriteLine( formatter, "----------------", _
            "-------------", "--------------" )

        ' Convert decimal values and display the results.
        DecimalToU_Int32( 123d)
        DecimalToU_Int32(New Decimal(123000, 0, 0, False, 3))
        DecimalToU_Int32(123.999d)
        DecimalToU_Int32(4294967295.999d)
        DecimalToU_Int32(4294967296d)
        DecimalToU_Int32(2147483647.999d)
        DecimalToU_Int32(2147483648d)
        DecimalToU_Int32(-0.999d)
        DecimalToU_Int32(-1d)
        DecimalToU_Int32(-2147483648.999d)
        DecimalToU_Int32(-2147483649d)
    End Sub
End Module
' The example displays the following output to the console:
'     Decimal Argument  Integer/Exception UInteger/Exception
'     ----------------      -------------     --------------
'                  123                123                123
'              123.000                123                123
'              123.999                124                124
'       4294967295.999  OverflowException  OverflowException
'           4294967296  OverflowException  OverflowException
'       2147483647.999  OverflowException         2147483648
'           2147483648  OverflowException         2147483648
'               -0.999                 -1  OverflowException
'                   -1                 -1  OverflowException
'      -2147483648.999  OverflowException  OverflowException
'          -2147483649  OverflowException  OverflowException

// Example of the explicit conversions from decimal to int and
// decimal to uint.
using System;

class DecimalToU_Int32Demo
{
    const string formatter = "{0,17}{1,19}{2,19}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int32( decimal argument )
    {
        object Int32Value;
        object UInt32Value;

        // Convert the argument to an int value.
        try
        {
            Int32Value = (int)argument;
        }
        catch( Exception ex )
        {
            Int32Value = GetExceptionType( ex );
        }

        // Convert the argument to a uint value.
        try
        {
            UInt32Value = (uint)argument;
        }
        catch( Exception ex )
        {
            UInt32Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int32Value, UInt32Value );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to int \nand decimal to uint generates the following " +
            "output. It displays \nseveral converted decimal " +
            "values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "int/exception", "uint/exception" );
        Console.WriteLine( formatter, "----------------",
            "-------------", "--------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int32( 123M );
        DecimalToU_Int32( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int32( 123.999M );
        DecimalToU_Int32( 4294967295.999M );
        DecimalToU_Int32( 4294967296M );
        DecimalToU_Int32( 2147483647.999M );
        DecimalToU_Int32( 2147483648M );
        DecimalToU_Int32( - 0.999M );
        DecimalToU_Int32( - 1M );
        DecimalToU_Int32( - 2147483648.999M );
        DecimalToU_Int32( - 2147483649M );
    }
}

/*
This example of the explicit conversions from decimal to int
and decimal to uint generates the following output. It displays
several converted decimal values.

 decimal argument      int/exception     uint/exception
 ----------------      -------------     --------------
              123                123                123
          123.000                123                123
          123.999                123                123
   4294967295.999  OverflowException         4294967295
       4294967296  OverflowException  OverflowException
   2147483647.999         2147483647         2147483647
       2147483648  OverflowException         2147483648
           -0.999                  0                  0
               -1                 -1  OverflowException
  -2147483648.999        -2147483648  OverflowException
      -2147483649  OverflowException  OverflowException
*/

// Example of the explicit conversions from Decimal to int and
// Decimal to unsigned int.
using namespace System;
#define formatter "{0,17}{1,19}{2,19}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int32( Decimal argument )
{
   Object^ Int32Value;
   Object^ UInt32Value;

   // Convert the argument to an int value.
   try
   {
      Int32Value = (int)argument;
   }
   catch ( Exception^ ex )
   {
      Int32Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned int value.
   try
   {
      UInt32Value = (unsigned int)argument;
   }
   catch ( Exception^ ex )
   {
      UInt32Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int32Value, UInt32Value );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal to "
   "int \nand Decimal to unsigned int generates the "
   "following output. \nIt displays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "int", "unsigned int" );
   Console::WriteLine( formatter, "----------------", "---", "------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int32( Decimal::Parse(  "123" ) );
   DecimalToU_Int32( Decimal(123000,0,0,false,3) );
   DecimalToU_Int32( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "4294967295.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "4294967296" ) );
   DecimalToU_Int32( Decimal::Parse(  "2147483647.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "2147483648" ) );
   DecimalToU_Int32( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "-1" ) );
   DecimalToU_Int32( Decimal::Parse(  "-2147483648.999" ) );
   DecimalToU_Int32( Decimal::Parse(  "-2147483649" ) );
}

/*
This example of the explicit conversions from Decimal to int
and Decimal to unsigned int generates the following output.
It displays several converted Decimal values.

 Decimal argument                int       unsigned int
 ----------------                ---       ------------
              123                123                123
          123.000                123                123
          123.999                123                123
   4294967295.999  OverflowException         4294967295
       4294967296  OverflowException  OverflowException
   2147483647.999         2147483647         2147483647
       2147483648  OverflowException         2147483648
           -0.999                  0                  0
               -1                 -1  OverflowException
  -2147483648.999        -2147483648  OverflowException
      -2147483649  OverflowException  OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
UInt32


Decimal ExplicitNarrowingExplicitExplicit 转换 (Decimal to Int64)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Decimal to Int64)
Decimal 结构

将 Decimal 转换成 64 位有符号的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Decimal _
) As Long
public static explicit operator long (
    decimal value
)
static explicit operator long long (
    Decimal value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Decimal
要转换的 Decimal。

返回值

类型： System Int64
64 位有符号整数，它表示转换后的 Decimal。
异常 | 条件
OverflowException | value 小于 Int64..::.MinValue 或大于 Int64..::.MaxValue。

此运算符支持将 Decimal 显式转换为 Int64。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int64 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt64 或 Convert..::.ToInt64(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Int64。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int64 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt64 或 Convert..::.ToInt64(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Int64。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int64 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt64 或 Convert..::.ToInt64(Decimal) 方法。 此运算符支持将 Decimal 显式转换为 Int64。此类显式转换的语法与语言有关，各个语言编译器可提供不同的实现并返回不同的结果。该示例阐释了在使用 C# 和 Visual Basic 将 Decimal 值显式转换为 Int64 值时的不同返回值。若要执行与语言无关的转换，您可以调用 ToInt64 或 Convert..::.ToInt64(Decimal) 方法。

下面的代码示例通过显式 Decimal to Int64 转换，将 Decimal 数字转换为 Int64 值。

' Example of the explicit conversions from Decimal to Long and
' Decimal to ULong.
Module DecimalToU_Int64Demo

    Const formatter As String = "{0,25}{1,22}{2,22}"

    ' Convert the decimal argument catch exceptions that are thrown.
    Public Sub DecimalToU_Int64(argument As Decimal)
        Dim Int64Value As Object
        Dim UInt64Value As Object

        ' Convert the argument to a long value.
        Try
            Int64Value = CLng(argument)
        Catch ex As Exception
            Int64Value = ex.GetType().Name
        End Try

        ' Convert the argument to a ulong value.
        Try
            UInt64Value = CULng(argument)
        Catch ex As Exception
            UInt64Value = ex.GetType().Name
        End Try

        Console.WriteLine(formatter, argument, _
            Int64Value, UInt64Value)
    End Sub

    Public Sub Main( )
        Console.WriteLine( formatter, "Decimal argument", _
            "Long/Exception", "ULong/Exception" )
        Console.WriteLine( formatter, "----------------", _
            "--------------", "---------------" )

        ' Convert decimal values and display the results.
        DecimalToU_Int64(123d)
        DecimalToU_Int64(New Decimal(123000, 0, 0, False, 3))
        DecimalToU_Int64(123.999d)
        DecimalToU_Int64(18446744073709551615.999d)
        DecimalToU_Int64(18446744073709551616d)
        DecimalToU_Int64(9223372036854775807.999d)
        DecimalToU_Int64(9223372036854775808d)
        DecimalToU_Int64(-0.999d)
        DecimalToU_Int64(-1d)
        DecimalToU_Int64(-9223372036854775808.999d)
        DecimalToU_Int64(-9223372036854775809d)
    End Sub
End Module
' The example displays the following output to the console:
'             Decimal argument        Long/Exception       ULong/Exception
'             ----------------        --------------       ---------------
'                          123                   123                   123
'                      123.000                   123                   123
'                      123.999                   124                   124
'     18446744073709551615.999     OverflowException     OverflowException
'         18446744073709551616     OverflowException     OverflowException
'      9223372036854775807.999     OverflowException   9223372036854775808
'          9223372036854775808     OverflowException   9223372036854775808
'                       -0.999                    -1     OverflowException
'                           -1                    -1     OverflowException
'     -9223372036854775808.999     OverflowException     OverflowException
'         -9223372036854775809     OverflowException     OverflowException

// Example of the explicit conversions from decimal to long and
// decimal to ulong.
using System;

class DecimalToU_Int64Demo
{
    const string formatter = "{0,25}{1,22}{2,22}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the decimal argument; catch exceptions that are thrown.
    public static void DecimalToU_Int64( decimal argument )
    {
        object Int64Value;
        object UInt64Value;

        // Convert the argument to a long value.
        try
        {
            Int64Value = (long)argument;
        }
        catch( Exception ex )
        {
            Int64Value = GetExceptionType( ex );
        }

        // Convert the argument to a ulong value.
        try
        {
            UInt64Value = (ulong)argument;
        }
        catch( Exception ex )
        {
            UInt64Value = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument,
            Int64Value, UInt64Value );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversions from decimal " +
            "to long \nand decimal to ulong generates the following " +
            "output. It displays \nseveral converted decimal " +
            "values.\n" );
        Console.WriteLine( formatter, "decimal argument",
            "long/exception", "ulong/exception" );
        Console.WriteLine( formatter, "----------------",
            "--------------", "---------------" );

        // Convert decimal values and display the results.
        DecimalToU_Int64( 123M );
        DecimalToU_Int64( new decimal( 123000, 0, 0, false, 3 ) );
        DecimalToU_Int64( 123.999M );
        DecimalToU_Int64( 18446744073709551615.999M );
        DecimalToU_Int64( 18446744073709551616M );
        DecimalToU_Int64( 9223372036854775807.999M );
        DecimalToU_Int64( 9223372036854775808M );
        DecimalToU_Int64( - 0.999M );
        DecimalToU_Int64( - 1M );
        DecimalToU_Int64( - 9223372036854775808.999M );
        DecimalToU_Int64( - 9223372036854775809M );
    }
}

/*
This example of the explicit conversions from decimal to long
and decimal to ulong generates the following output. It displays
several converted decimal values.

         decimal argument        long/exception       ulong/exception
         ----------------        --------------       ---------------
                      123                   123                   123
                  123.000                   123                   123
                  123.999                   123                   123
 18446744073709551615.999     OverflowException  18446744073709551615
     18446744073709551616     OverflowException     OverflowException
  9223372036854775807.999   9223372036854775807   9223372036854775807
      9223372036854775808     OverflowException   9223372036854775808
                   -0.999                     0                     0
                       -1                    -1     OverflowException
 -9223372036854775808.999  -9223372036854775808     OverflowException
     -9223372036854775809     OverflowException     OverflowException
*/

// Example of the explicit conversions from Decimal to __int64 and
// Decimal to unsigned __int64.
using namespace System;
#define formatter "{0,25}{1,22}{2,22}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the Decimal argument; catch exceptions that are thrown.
void DecimalToU_Int64( Decimal argument )
{
   Object^ Int64Value;
   Object^ UInt64Value;

   // Convert the argument to an __int64 value.
   try
   {
      Int64Value = (__int64)argument;
   }
   catch ( Exception^ ex )
   {
      Int64Value = GetExceptionType( ex );
   }

   // Convert the argument to an unsigned __int64 value.
   try
   {
      UInt64Value = (unsigned __int64)argument;
   }
   catch ( Exception^ ex )
   {
      UInt64Value = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, Int64Value, UInt64Value );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversions from Decimal to "
   "__int64 \nand Decimal to unsigned __int64 generates the "
   "following output. \nIt displays several converted Decimal "
   "values.\n" );
   Console::WriteLine( formatter, "Decimal argument", "__int64", "unsigned __int64" );
   Console::WriteLine( formatter, "----------------", "-------", "----------------" );

   // Convert Decimal values and display the results.
   DecimalToU_Int64( Decimal::Parse(  "123" ) );
   DecimalToU_Int64( Decimal(123000,0,0,false,3) );
   DecimalToU_Int64( Decimal::Parse(  "123.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "18446744073709551615.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "18446744073709551616" ) );
   DecimalToU_Int64( Decimal::Parse(  "9223372036854775807.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "9223372036854775808" ) );
   DecimalToU_Int64( Decimal::Parse(  "-0.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "-1" ) );
   DecimalToU_Int64( Decimal::Parse(  "-9223372036854775808.999" ) );
   DecimalToU_Int64( Decimal::Parse(  "-9223372036854775809" ) );
}

/*
This example of the explicit conversions from Decimal to __int64
and Decimal to unsigned __int64 generates the following output.
It displays several converted Decimal values.

         Decimal argument               __int64      unsigned __int64
         ----------------               -------      ----------------
                      123                   123                   123
                  123.000                   123                   123
                  123.999                   123                   123
 18446744073709551615.999     OverflowException  18446744073709551615
     18446744073709551616     OverflowException     OverflowException
  9223372036854775807.999   9223372036854775807   9223372036854775807
      9223372036854775808     OverflowException   9223372036854775808
                   -0.999                     0                     0
                       -1                    -1     OverflowException
 -9223372036854775808.999  -9223372036854775808     OverflowException
     -9223372036854775809     OverflowException     OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Int64


Decimal ExplicitNarrowingExplicitExplicit 转换 (Double to Decimal)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Double to Decimal)
Decimal 结构

将双精度浮点数转换为 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Double _
) As Decimal
public static explicit operator decimal (
    double value
)
static explicit operator Decimal (
    double value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Double
一个双精度浮点数。

返回值

类型： System Decimal
一个 Decimal，它表示转换后的双精度浮点数。
异常 | 条件
OverflowException | value 小于 MinValue 或大于 MaxValue。 - 或 - value 是 Double..::.NaN、Double..::.PositiveInfinity 或 Double..::.NegativeInfinity。

下面的代码示例通过 Double to Decimal 转换，将 Double 值转换为 Decimal 数字。在 Visual Basic 中，该转换需要 op_Explicit 运算符。 下面的代码示例通过 Double to Decimal 转换，将 Double 值转换为 Decimal 数字。在 Visual Basic 中，该转换需要 op_Explicit 运算符。

' Example of the explicit conversion from Double to Decimal.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFromDoubleDemo

    Const formatter As String = "{0,25:E16}{1,33}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Double argument; catch exceptions that are thrown.
    Sub DecimalFromDouble( argument As Double )

        Dim decValue    As Object

        ' Convert the Double argument to a Decimal value.
        Try
            decValue = Decimal.op_Explicit( argument )
        Catch ex As Exception
            decValue = GetExceptionType( ex )
        End Try

        ' Display the Decimal.
        Console.WriteLine( formatter, argument, decValue )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the explicit conversion from Double " & _
            "to Decimal " & vbCrLf & "generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "Double argument", _
            "Decimal value" )
        Console.WriteLine( formatter, "---------------", _
            "-------------" )

        ' Convert Double values and display the results.
        DecimalFromDouble( 1.234567890123E-30 )
        DecimalFromDouble( 1.2345678901234E-25 )
        DecimalFromDouble( 1.23456789012345E-20 )
        DecimalFromDouble( 1.234567890123456E-10 )
        DecimalFromDouble( 1.2345678901234567 )
        DecimalFromDouble( 1.23456789012345678E+12 )
        DecimalFromDouble( 1.234567890123456789E+28 )
        DecimalFromDouble( 1.234567890123456789E+30 )
    End Sub
End Module

' This example of the explicit conversion from Double to Decimal
' generates the following output.
'
'           Double argument                    Decimal value
'           ---------------                    -------------
'   1.2345678901230000E-030                                0
'   1.2345678901233999E-025   0.0000000000000000000000001235
'   1.2345678901234499E-020   0.0000000000000000000123456789
'   1.2345678901234560E-010       0.000000000123456789012346
'   1.2345678901234567E+000                 1.23456789012346
'   1.2345678901234568E+012                 1234567890123.46
'   1.2345678901234568E+028    12345678901234600000000000000
'   1.2345678901234569E+030                OverflowException

// Example of the explicit conversion from double to decimal.
using System;

class DecimalFromDoubleDemo
{
    const string formatter = "{0,25:E16}{1,33}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the double argument; catch exceptions that are thrown.
    public static void DecimalFromDouble( double argument )
    {
        object decValue;

        // Convert the double argument to a decimal value.
        try
        {
            decValue = (decimal)argument;
        }
        catch( Exception ex )
        {
            decValue = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument, decValue );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversion from double " +
            "to decimal \ngenerates the following output.\n" );
        Console.WriteLine( formatter, "double argument",
            "decimal value" );
        Console.WriteLine( formatter, "---------------",
            "-------------" );

        // Convert double values and display the results.
        DecimalFromDouble( 1.234567890123E-30 );
        DecimalFromDouble( 1.2345678901234E-25 );
        DecimalFromDouble( 1.23456789012345E-20 );
        DecimalFromDouble( 1.234567890123456E-10 );
        DecimalFromDouble( 1.2345678901234567 );
        DecimalFromDouble( 1.23456789012345678E+12 );
        DecimalFromDouble( 1.234567890123456789E+28 );
        DecimalFromDouble( 1.234567890123456789E+30 );
    }
}

/*
This example of the explicit conversion from double to decimal
generates the following output.

          double argument                    decimal value
          ---------------                    -------------
  1.2345678901230000E-030                                0
  1.2345678901233999E-025   0.0000000000000000000000001235
  1.2345678901234499E-020   0.0000000000000000000123456789
  1.2345678901234560E-010       0.000000000123456789012346
  1.2345678901234567E+000                 1.23456789012346
  1.2345678901234568E+012                 1234567890123.46
  1.2345678901234568E+028    12345678901234600000000000000
  1.2345678901234569E+030                OverflowException
*/

// Example of the explicit conversion from double to Decimal.
using namespace System;
#define formatter "{0,25:E16}{1,33}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the double argument; catch exceptions that are thrown.
void DecimalFromDouble( double argument )
{
   Object^ decValue;

   // Convert the double argument to a Decimal value.
   try
   {
      decValue = (Decimal)argument;
   }
   catch ( Exception^ ex )
   {
      decValue = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, decValue );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversion from double "
   "to Decimal \ngenerates the following output.\n" );
   Console::WriteLine( formatter, "double argument", "Decimal value" );
   Console::WriteLine( formatter, "---------------", "-------------" );

   // Convert double values and display the results.
   DecimalFromDouble( 1.234567890123E-30 );
   DecimalFromDouble( 1.2345678901234E-25 );
   DecimalFromDouble( 1.23456789012345E-20 );
   DecimalFromDouble( 1.234567890123456E-10 );
   DecimalFromDouble( 1.2345678901234567 );
   DecimalFromDouble( 1.23456789012345678E+12 );
   DecimalFromDouble( 1.234567890123456789E+28 );
   DecimalFromDouble( 1.234567890123456789E+30 );
}

/*
This example of the explicit conversion from double to Decimal
generates the following output.

          double argument                    Decimal value
          ---------------                    -------------
  1.2345678901230000E-030                                0
  1.2345678901233999E-025   0.0000000000000000000000001235
  1.2345678901234499E-020   0.0000000000000000000123456789
  1.2345678901234560E-010       0.000000000123456789012346
  1.2345678901234567E+000                 1.23456789012346
  1.2345678901234568E+012                 1234567890123.46
  1.2345678901234568E+028    12345678901234600000000000000
  1.2345678901234569E+030                OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Double


Decimal ExplicitNarrowingExplicitExplicit 转换 (Single to Decimal)

Decimal
Explicit
Narrowing
Explicit
Explicit
转换 (Single to Decimal)
Decimal 结构

将单精度浮点数字转换为 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Single _
) As Decimal
public static explicit operator decimal (
    float value
)
static explicit operator Decimal (
    float value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Single
一个单精度浮点数字。

返回值

类型： System Decimal
一个 Decimal，它表示已转换的单精度浮点数字。
异常 | 条件
OverflowException | value 小于 MinValue 或大于 MaxValue。 - 或 - value 是 Single..::.NaN、Single..::.PositiveInfinity 或 Single..::.NegativeInfinity。

下面的代码示例通过 Single to Decimal 转换，将 Single 值转换为 Decimal 数字。在 Visual Basic 中，该转换需要 op_Explicit 运算符。 下面的代码示例通过 Single to Decimal 转换，将 Single 值转换为 Decimal 数字。在 Visual Basic 中，该转换需要 op_Explicit 运算符。

' Example of the explicit conversion from Single to Decimal.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFromSingleDemo

    Const formatter As String = "{0,16:E7}{1,33}"

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Convert the Single argument; catch exceptions that are thrown.
    Sub DecimalFromSingle( argument As Single )

        Dim decValue    As Object

        ' Convert the Single argument to a Decimal value.
        Try
            decValue = Decimal.op_Explicit( argument )
        Catch ex As Exception
            decValue = GetExceptionType( ex )
        End Try

        ' Display the Decimal.
        Console.WriteLine( formatter, argument, decValue )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the explicit conversion from Single " & _
            "to Decimal " & vbCrLf & "generates the following " & _
            "output." & vbCrLf )
        Console.WriteLine( formatter, "Single argument", _
            "Decimal value" )
        Console.WriteLine( formatter, "---------------", _
            "-------------" )

        ' Convert Single values and display the results.
        DecimalFromSingle( 1.2345E-30 )
        DecimalFromSingle( 1.2345E-26 )
        DecimalFromSingle( 1.23456E-22 )
        DecimalFromSingle( 1.23456E-12 )
        DecimalFromSingle( 1.234567 )
        DecimalFromSingle( 1.234567E+12 )
        DecimalFromSingle( 1.2345678E+28 )
        DecimalFromSingle( 1.2345678E+30 )
    End Sub
End Module

' This example of the explicit conversion from Single to Decimal
' generates the following output.
'
'  Single argument                    Decimal value
'  ---------------                    -------------
'   1.2345000E-030                                0
'   1.2345000E-026   0.0000000000000000000000000123
'   1.2345600E-022    0.000000000000000000000123456
'   1.2345600E-012              0.00000000000123456
'   1.2345671E+000                         1.234567
'   1.2345670E+012                    1234567000000
'   1.2345678E+028    12345680000000000000000000000
'   1.2345678E+030                OverflowException

// Example of the explicit conversion from float to decimal.
using System;

class DecimalFromSingleDemo
{
    const string formatter = "{0,16:E7}{1,33}";

    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Convert the float argument; catch exceptions that are thrown.
    public static void DecimalFromSingle( float argument )
    {
        object decValue;

        // Convert the float argument to a decimal value.
        try
        {
            decValue = (decimal)argument;
        }
        catch( Exception ex )
        {
            decValue = GetExceptionType( ex );
        }

        Console.WriteLine( formatter, argument, decValue );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the explicit conversion from float " +
            "to decimal \ngenerates the following output.\n" );
        Console.WriteLine( formatter, "float argument",
            "decimal value" );
        Console.WriteLine( formatter, "--------------",
            "-------------" );

        // Convert float values and display the results.
        DecimalFromSingle( 1.2345E-30F );
        DecimalFromSingle( 1.2345E-26F );
        DecimalFromSingle( 1.23456E-22F );
        DecimalFromSingle( 1.23456E-12F );
        DecimalFromSingle( 1.234567F );
        DecimalFromSingle( 1.234567E+12F );
        DecimalFromSingle( 1.2345678E+28F );
        DecimalFromSingle( 1.2345678E+30F );
    }
}

/*
This example of the explicit conversion from float to decimal
generates the following output.

  float argument                    decimal value
  --------------                    -------------
  1.2345000E-030                                0
  1.2345000E-026   0.0000000000000000000000000123
  1.2345600E-022    0.000000000000000000000123456
  1.2345600E-012              0.00000000000123456
  1.2345671E+000                         1.234567
  1.2345670E+012                    1234567000000
  1.2345678E+028    12345680000000000000000000000
  1.2345678E+030                OverflowException
*/

// Example of the explicit conversion from float to Decimal.
using namespace System;
#define formatter "{0,16:E7}{1,33}"

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Convert the float argument; catch exceptions that are thrown.
void DecimalFromSingle( float argument )
{
   Object^ decValue;

   // Convert the float argument to a Decimal value.
   try
   {
      decValue = (Decimal)argument;
   }
   catch ( Exception^ ex )
   {
      decValue = GetExceptionType( ex );
   }

   Console::WriteLine( formatter, argument, decValue );
}

int main()
{
   Console::WriteLine( "This example of the explicit conversion from float "
   "to Decimal \ngenerates the following output.\n" );
   Console::WriteLine( formatter, "float argument", "Decimal value" );
   Console::WriteLine( formatter, "--------------", "-------------" );

   // Convert float values and display the results.
   DecimalFromSingle( 1.2345E-30F );
   DecimalFromSingle( 1.2345E-26F );
   DecimalFromSingle( 1.23456E-22F );
   DecimalFromSingle( 1.23456E-12F );
   DecimalFromSingle( 1.234567F );
   DecimalFromSingle( 1.234567E+12F );
   DecimalFromSingle( 1.2345678E+28F );
   DecimalFromSingle( 1.2345678E+30F );
}

/*
This example of the explicit conversion from float to Decimal
generates the following output.

  float argument                    Decimal value
  --------------                    -------------
  1.2345000E-030                                0
  1.2345000E-026   0.0000000000000000000000000123
  1.2345600E-022    0.000000000000000000000123456
  1.2345600E-012              0.00000000000123456
  1.2345671E+000                         1.234567
  1.2345670E+012                    1234567000000
  1.2345678E+028    12345680000000000000000000000
  1.2345678E+030                OverflowException
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Single


Decimal ..::.GreaterThan 运算符

Decimal
.
.
::
.
GreaterThan 运算符
Decimal 结构

返回一个值，该值指示指定的 Decimal 是否大于另一个指定的 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator > ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Boolean
public static bool operator >(
    decimal d1,
    decimal d2
)
public:
static bool operator >(
    Decimal d1,
    Decimal d2
)
static let inline (>)
        d1:decimal *
        d2:decimal  : bool

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Boolean
如果 d1 大于 d2，则为 true；否则为 false。

下面的代码示例使用 Greater Than 运算符，将几个 Decimal 值同一个参考 Decimal 值进行比较。

' Example of the Decimal relational operators.
Imports System
Imports Microsoft.VisualBasic

Module DecRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare Decimal parameters, and display them with the results.
    Sub CompareDecimals( Left As Decimal, Right As Decimal, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )

        ' The op_Equality, op_GreaterThan, op_GreaterThanOrEqual,
        ' op_Inequality, op_LessThan, and op_LessThanOrEqual operators
        ' must be explicitly coded in Visual Basic. If binary =, >,
        ' >=, <>, <, or <= are used, the Compare method is called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Equality( Left, Right )", _
            Decimal.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThan( Left, Right )", _
            Decimal.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThanOrEqual( Left, Right )", _
            Decimal.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Inequality( Left, Right )", _
            Decimal.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThan( Left, Right )", _
            Decimal.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThanOrEqual( Left, Right )", _
            Decimal.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New Decimal( 123.456 )

        Console.WriteLine( _
            "This example of the Decimal relational operators " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several different Decimal values " & vbCrLf & _
            "and compares them with the following reference " & _
            "value." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left )

        ' Create objects to compare with a 2-hour Decimal.
        CompareDecimals( Left, New Decimal( 1.23456E+2 ), _
            "Decimal( 1.23456E+2 )" )
        CompareDecimals( Left, New Decimal( 123.4567 ), _
            "Decimal( 123.4567 )" )
        CompareDecimals( Left, New Decimal( 123.4553 ), _
            "Decimal( 123.4553 )" )
        CompareDecimals( Left, New Decimal( 123456000, 0, 0, False, 6 ), _
            "Decimal( 123456000, 0, 0, False, 6 )" )
    End Sub
End Module

' This example of the Decimal relational operators generates the
' following output. It creates several different Decimal values
' and compares them with the following reference value.
'
' Left: Decimal( 123.456 )                       123.456
'
' Right: Decimal( 1.23456E+2 )                   123.456
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4567 )                     123.4567
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   False
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             True
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4553 )                     123.4553
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          True
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      False
'
' Right: Decimal( 123456000, 0, 0, False, 6 )    123.456000
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True

// Example of the decimal relational operators.
using System;

class DecRelationalOpsDemo
{
    const string dataFmt = "{0,43}    {1}" ;

    // Compare decimal parameters, and display them with the results.
    static void CompareDecimals( decimal Left, decimal Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        decimal Left = new decimal( 123.456 );

        Console.WriteLine(
            "This example of the decimal relational operators " +
            "generates the \nfollowing output. It creates several " +
            "different decimal values \nand compares them with " +
            "the following reference value.\n" );
        Console.WriteLine( dataFmt,
            "Left: decimal( 123.456 )", Left );

        // Create objects to compare with a 2-hour decimal.
        CompareDecimals( Left, new decimal( 1.23456E+2 ),
            "decimal( 1.23456E+2 )" );
        CompareDecimals( Left, new decimal( 123.4567 ),
            "decimal( 123.4567 )" );
        CompareDecimals( Left, new decimal( 123.4553 ),
            "decimal( 123.4553 )" );
        CompareDecimals( Left, new decimal( 123456000, 0, 0, false, 6 ),
            "decimal( 123456000, 0, 0, false, 6 )" );
    }
}

/*
This example of the decimal relational operators generates the
following output. It creates several different decimal values
and compares them with the following reference value.

                   Left: decimal( 123.456 )    123.456

               Right: decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

// Example of the Decimal relational operators.
using namespace System;
#define dataFmt "{0,43}    {1}"

// Compare Decimal parameters, and display them with the results.
void CompareDecimals( Decimal Left, Decimal Right, String^ RightText )
{
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   Decimal Left = Decimal(123.456);
   Console::WriteLine( "This example of the Decimal relational operators "
   "generates the \nfollowing output. It creates several "
   "different Decimal values \nand compares them with "
   "the following reference value.\n" );
   Console::WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left );

   // Create objects to compare with a 2-hour Decimal.
   CompareDecimals( Left, Decimal(1.23456E+2), "Decimal( 1.23456E+2 )" );
   CompareDecimals( Left, Decimal(123.4567), "Decimal( 123.4567 )" );
   CompareDecimals( Left, Decimal(123.4553), "Decimal( 123.4553 )" );
   CompareDecimals( Left, Decimal(123456000,0,0,false,6), "Decimal( 123456000, 0, 0, false, 6 )" );
}

/*
This example of the Decimal relational operators generates the
following output. It creates several different Decimal values
and compares them with the following reference value.

                   Left: Decimal( 123.456 )    123.456

               Right: Decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: Decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: Decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: Decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Compare


Decimal ..::.GreaterThanOrEqual 运算符

Decimal
.
.
::
.
GreaterThanOrEqual 运算符
Decimal 结构

返回一个值，该值指示指定的 Decimal 是否大于等于另一个指定的 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator >= ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Boolean
public static bool operator >=(
    decimal d1,
    decimal d2
)
public:
static bool operator >=(
    Decimal d1,
    Decimal d2
)
static let inline (>=)
        d1:decimal *
        d2:decimal  : bool

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Boolean
如果 d1 大于等于 d2，则为 true；否则为 false。

下面的代码示例使用 Greater Than or Equal 运算符，将几个 Decimal 值同一个参考 Decimal 值进行比较。

' Example of the Decimal relational operators.
Imports System
Imports Microsoft.VisualBasic

Module DecRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare Decimal parameters, and display them with the results.
    Sub CompareDecimals( Left As Decimal, Right As Decimal, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )

        ' The op_Equality, op_GreaterThan, op_GreaterThanOrEqual,
        ' op_Inequality, op_LessThan, and op_LessThanOrEqual operators
        ' must be explicitly coded in Visual Basic. If binary =, >,
        ' >=, <>, <, or <= are used, the Compare method is called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Equality( Left, Right )", _
            Decimal.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThan( Left, Right )", _
            Decimal.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThanOrEqual( Left, Right )", _
            Decimal.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Inequality( Left, Right )", _
            Decimal.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThan( Left, Right )", _
            Decimal.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThanOrEqual( Left, Right )", _
            Decimal.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New Decimal( 123.456 )

        Console.WriteLine( _
            "This example of the Decimal relational operators " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several different Decimal values " & vbCrLf & _
            "and compares them with the following reference " & _
            "value." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left )

        ' Create objects to compare with a 2-hour Decimal.
        CompareDecimals( Left, New Decimal( 1.23456E+2 ), _
            "Decimal( 1.23456E+2 )" )
        CompareDecimals( Left, New Decimal( 123.4567 ), _
            "Decimal( 123.4567 )" )
        CompareDecimals( Left, New Decimal( 123.4553 ), _
            "Decimal( 123.4553 )" )
        CompareDecimals( Left, New Decimal( 123456000, 0, 0, False, 6 ), _
            "Decimal( 123456000, 0, 0, False, 6 )" )
    End Sub
End Module

' This example of the Decimal relational operators generates the
' following output. It creates several different Decimal values
' and compares them with the following reference value.
'
' Left: Decimal( 123.456 )                       123.456
'
' Right: Decimal( 1.23456E+2 )                   123.456
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4567 )                     123.4567
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   False
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             True
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4553 )                     123.4553
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          True
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      False
'
' Right: Decimal( 123456000, 0, 0, False, 6 )    123.456000
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True

// Example of the decimal relational operators.
using System;

class DecRelationalOpsDemo
{
    const string dataFmt = "{0,43}    {1}" ;

    // Compare decimal parameters, and display them with the results.
    static void CompareDecimals( decimal Left, decimal Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        decimal Left = new decimal( 123.456 );

        Console.WriteLine(
            "This example of the decimal relational operators " +
            "generates the \nfollowing output. It creates several " +
            "different decimal values \nand compares them with " +
            "the following reference value.\n" );
        Console.WriteLine( dataFmt,
            "Left: decimal( 123.456 )", Left );

        // Create objects to compare with a 2-hour decimal.
        CompareDecimals( Left, new decimal( 1.23456E+2 ),
            "decimal( 1.23456E+2 )" );
        CompareDecimals( Left, new decimal( 123.4567 ),
            "decimal( 123.4567 )" );
        CompareDecimals( Left, new decimal( 123.4553 ),
            "decimal( 123.4553 )" );
        CompareDecimals( Left, new decimal( 123456000, 0, 0, false, 6 ),
            "decimal( 123456000, 0, 0, false, 6 )" );
    }
}

/*
This example of the decimal relational operators generates the
following output. It creates several different decimal values
and compares them with the following reference value.

                   Left: decimal( 123.456 )    123.456

               Right: decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

// Example of the Decimal relational operators.
using namespace System;
#define dataFmt "{0,43}    {1}"

// Compare Decimal parameters, and display them with the results.
void CompareDecimals( Decimal Left, Decimal Right, String^ RightText )
{
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   Decimal Left = Decimal(123.456);
   Console::WriteLine( "This example of the Decimal relational operators "
   "generates the \nfollowing output. It creates several "
   "different Decimal values \nand compares them with "
   "the following reference value.\n" );
   Console::WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left );

   // Create objects to compare with a 2-hour Decimal.
   CompareDecimals( Left, Decimal(1.23456E+2), "Decimal( 1.23456E+2 )" );
   CompareDecimals( Left, Decimal(123.4567), "Decimal( 123.4567 )" );
   CompareDecimals( Left, Decimal(123.4553), "Decimal( 123.4553 )" );
   CompareDecimals( Left, Decimal(123456000,0,0,false,6), "Decimal( 123456000, 0, 0, false, 6 )" );
}

/*
This example of the Decimal relational operators generates the
following output. It creates several different Decimal values
and compares them with the following reference value.

                   Left: Decimal( 123.456 )    123.456

               Right: Decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: Decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: Decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: Decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Compare


Decimal ImplicitWideningImplicitImplicit 转换运算符

Decimal
Implicit
Widening
Implicit
Implicit
转换运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Decimal 结构

将类型的值转换为 Decimal 值。

名称 说明
页首

参考

Decimal 结构
Decimal 成员
System 命名空间


Decimal ImplicitWideningImplicitImplicit 转换 (Byte to Decimal)

Decimal
Implicit
Widening
Implicit
Implicit
转换 (Byte to Decimal)
Decimal 结构

将 8 位无符号整数转换成 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As Byte _
) As Decimal
public static implicit operator decimal (
    byte value
)
static implicit operator Decimal (
    unsigned char value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Byte
8 位无符号整数。

返回值

类型： System Decimal
表示转换后的 8 位无符号整数的 Decimal。

下面的代码示例通过 Byte to Decimal 转换，将 Byte 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 Byte to Decimal 转换，将 Byte 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 Byte to Decimal 转换，将 Byte 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。

' Example of the op_Implicit conversion from Byte to Decimal.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFromByteDemo

    Const formatter As String = _
        "{0,16}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

    ' Convert the Byte argument and display the Decimal value.
    Sub DecimalFromByte( argument As Byte )

        Dim decValue    As Decimal
        Dim bits( )     As Integer

        ' The compiler invokes a constructor in Visual Basic
        ' unless op_Implicit is explicitly called.
        decValue = Decimal.op_Implicit( argument )

        ' Display the Decimal and its binary representation.
        bits = Decimal.GetBits( decValue )
        Console.WriteLine( formatter, argument, decValue, _
            bits( 3 ), bits( 2 ), bits( 1 ), bits( 0 ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the op_Implicit conversion from Byte " & _
            "to Decimal generates the " & vbCrLf & "following " & _
            "output. It displays the Decimal value and its " & _
            "binary representation." & vbCrLf )
        Console.WriteLine( formatter, "Byte argument", _
            "Decimal value", "bits(3)", "bits(2)", _
            "bits(1)", "bits(0)" )
        Console.WriteLine( formatter, "-------------", _
            "-------------", "-------", "-------", _
            "-------", "-------" )

        ' Convert Byte values and display the results.
        DecimalFromByte( Byte.MinValue )
        DecimalFromByte( Byte.MaxValue )
        DecimalFromByte( &H3F )
        DecimalFromByte( 123 )
        DecimalFromByte( 200 )
    End Sub
End Module

' This example of the op_Implicit conversion from Byte to Decimal generates the
' following output. It displays the Decimal value and its binary representation.
'
'    Byte argument  Decimal value   bits(3)  bits(2)  bits(1)  bits(0)
'    -------------  -------------   -------  -------  -------  -------
'                0              0  00000000 00000000 00000000 00000000
'              255            255  00000000 00000000 00000000 000000FF
'               63             63  00000000 00000000 00000000 0000003F
'              123            123  00000000 00000000 00000000 0000007B
'              200            200  00000000 00000000 00000000 000000C8

// Example of the implicit conversion from byte to decimal.
using System;

class DecimalFromByteDemo
{
    const string formatter =
        "{0,15}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}";

    // Convert the byte argument and display the decimal value.
    public static void DecimalFromByte( byte argument )
    {
        decimal decValue;
        int[ ]  bits;

        // Display the decimal and its binary representation.
        decValue = argument;
        bits = decimal.GetBits( decValue );

        Console.WriteLine( formatter, argument, decValue,
            bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the implicit conversion from byte " +
            "to decimal generates the \nfollowing output. It " +
            "displays the decimal value and its binary " +
            "representation.\n" );
        Console.WriteLine( formatter, "byte argument",
            "decimal value", "bits[3]", "bits[2]",
            "bits[1]", "bits[0]" );
        Console.WriteLine( formatter, "-------------",
            "-------------", "-------", "-------",
            "-------", "-------" );

        // Convert byte values and display the results.
        DecimalFromByte( byte.MinValue );
        DecimalFromByte( byte.MaxValue );
        DecimalFromByte( 0x3F );
        DecimalFromByte( 123 );
        DecimalFromByte( 200 );
    }
}

/*
This example of the implicit conversion from byte to decimal generates the
following output. It displays the decimal value and its binary representation.

  byte argument  decimal value   bits[3]  bits[2]  bits[1]  bits[0]
  -------------  -------------   -------  -------  -------  -------
              0              0  00000000 00000000 00000000 00000000
            255            255  00000000 00000000 00000000 000000FF
             63             63  00000000 00000000 00000000 0000003F
            123            123  00000000 00000000 00000000 0000007B
            200            200  00000000 00000000 00000000 000000C8
*/

// Example of the op_Implicit conversion from unsigned char to Decimal.
using namespace System;
#define formatter "{0,14}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

// Convert the unsigned char argument and display the Decimal value.
void DecimalFromByte( unsigned char argument )
{
   Decimal decValue;
   array<Int32>^bits;

   // The compiler invokes a constructor in the Managed Extensions
   // for C++ unless op_Implicit is explicitly called.
   decValue = argument;

   // Display the Decimal and its binary representation.
   bits = Decimal::GetBits( decValue );
   Console::WriteLine( formatter, argument, decValue, bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the op_Implicit conversion from unsigned "
   "char to Decimal \ngenerates the following output. "
   "It displays the Decimal value and its \nbinary "
   "representation.\n" );
   Console::WriteLine( formatter, "unsigned char", "Decimal value", "bits[3]", "bits[2]", "bits[1]", "bits[0]" );
   Console::WriteLine( formatter, "-------------", "-------------", "-------", "-------", "-------", "-------" );

   // Convert unsigned char values and display the results.
   DecimalFromByte( Byte::MinValue );
   DecimalFromByte( Byte::MaxValue );
   DecimalFromByte( 0x3F );
   DecimalFromByte( 123 );
   DecimalFromByte( 200 );
}

/*
This example of the op_Implicit conversion from unsigned char to Decimal
generates the following output. It displays the Decimal value and its
binary representation.

 unsigned char  Decimal value   bits[3]  bits[2]  bits[1]  bits[0]
 -------------  -------------   -------  -------  -------  -------
             0              0  00000000 00000000 00000000 00000000
           255            255  00000000 00000000 00000000 000000FF
            63             63  00000000 00000000 00000000 0000003F
           123            123  00000000 00000000 00000000 0000007B
           200            200  00000000 00000000 00000000 000000C8
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Byte


Decimal ImplicitWideningImplicitImplicit 转换 (Char to Decimal)

Decimal
Implicit
Widening
Implicit
Implicit
转换 (Char to Decimal)
Decimal 结构

将 Unicode 字符转换为 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As Char _
) As Decimal
public static implicit operator decimal (
    char value
)
static implicit operator Decimal (
    wchar_t value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Char
一个 Unicode 字符。

返回值

类型： System Decimal
表示转换后的 Unicode 字符的 Decimal。

下面的代码示例使用 Char to Decimal 转换，将 Char 值（Unicode 字符）转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例使用 Char to Decimal 转换，将 Char 值（Unicode 字符）转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例使用 Char to Decimal 转换，将 Char 值（Unicode 字符）转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。

' Example of the op_Implicit conversion from Char to Decimal.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module DecimalFromCharDemo

    Const formatter As String = _
        "{0,6}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

    ' Convert the Char argument and display the Decimal value.
    Sub DecimalFromChar( argument As Char )

        Dim decValue    As Decimal
        Dim bits( )     As Integer

        ' The compiler invokes a constructor in Visual Basic
        ' unless op_Implicit is explicitly called.
        decValue = Decimal.op_Implicit( argument )

        ' Display the Decimal and its binary representation.
        bits = Decimal.GetBits( decValue )
        Console.WriteLine( formatter, argument, decValue, _
            bits( 3 ), bits( 2 ), bits( 1 ), bits( 0 ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the op_Implicit conversion from Char " & _
            "to Decimal generates the " & vbCrLf & "following " & _
            "output. It displays the Decimal value and its " & _
            "binary representation." & vbCrLf )
        Console.WriteLine( formatter, "Char", _
            "Decimal value", "bits(3)", "bits(2)", _
            "bits(1)", "bits(0)" )
        Console.WriteLine( formatter, "----", _
            "-------------", "-------", "-------", _
            "-------", "-------" )

        ' Convert Char values and display the results.
        DecimalFromChar( Chr( 0 ) )
        DecimalFromChar( " "c )
        DecimalFromChar( "*"c )
        DecimalFromChar( "A"c )
        DecimalFromChar( "a"c )
        DecimalFromChar( "{"c )
        DecimalFromChar( " "c )
    End Sub
End Module

' This example of the op_Implicit conversion from Char to Decimal generates the
' following output. It displays the Decimal value and its binary representation.
'
'   Char  Decimal value   bits(3)  bits(2)  bits(1)  bits(0)
'   ----  -------------   -------  -------  -------  -------
'                     0  00000000 00000000 00000000 00000000
'                    32  00000000 00000000 00000000 00000020
'      *             42  00000000 00000000 00000000 0000002A
'      A             65  00000000 00000000 00000000 00000041
'      a             97  00000000 00000000 00000000 00000061
'      {            123  00000000 00000000 00000000 0000007B
'                   198  00000000 00000000 00000000 000000C6

// Example of the implicit conversion from char to decimal.
using System;

class DecimalFromCharDemo
{
    const string formatter =
        "{0,6}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}";

    // Convert the char argument and display the decimal value.
    public static void DecimalFromChar( char argument )
    {
        decimal decValue;
        int[ ]  bits;

        // Display the decimal and its binary representation.
        decValue = argument;
        bits = decimal.GetBits( decValue );

        Console.WriteLine( formatter, argument, decValue,
            bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the implicit conversion from char to " +
            "decimal generates the \nfollowing output. It displays " +
            "the decimal value and its binary representation.\n" );
        Console.WriteLine( formatter, "char",
            "decimal value", "bits[3]", "bits[2]",
            "bits[1]", "bits[0]" );
        Console.WriteLine( formatter, "----",
            "-------------", "-------", "-------",
            "-------", "-------" );

        // Convert char values and display the results.
        DecimalFromChar( '\0' );
        DecimalFromChar( ' ' );
        DecimalFromChar( '*' );
        DecimalFromChar( 'A' );
        DecimalFromChar( 'a' );
        DecimalFromChar( '{' );
        DecimalFromChar( ' ' );
    }
}

/*
This example of the implicit conversion from char to decimal generates the
following output. It displays the decimal value and its binary representation.

  char  decimal value   bits[3]  bits[2]  bits[1]  bits[0]
  ----  -------------   -------  -------  -------  -------
                    0  00000000 00000000 00000000 00000000
                   32  00000000 00000000 00000000 00000020
     *             42  00000000 00000000 00000000 0000002A
     A             65  00000000 00000000 00000000 00000041
     a             97  00000000 00000000 00000000 00000061
     {            123  00000000 00000000 00000000 0000007B
                  198  00000000 00000000 00000000 000000C6
*/

// Example of the op_Implicit conversion from __wchar_t to Decimal.
using namespace System;
#define formatter "{0,10}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

// Convert the __wchar_t argument and display the Decimal value.
void DecimalFromChar( __wchar_t argument )
{
   Decimal decValue;
   array<Int32>^bits;

   // The compiler invokes a constructor in the Managed Extensions
   // for C++ unless op_Implicit is explicitly called.
   decValue = argument;

   // Display the Decimal and its binary representation.
   bits = Decimal::GetBits( decValue );
   Console::WriteLine( formatter, argument, decValue, bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the op_Implicit conversion from "
   "__wchar_t to Decimal \ngenerates the following output. "
   "It displays the Decimal value and \nits binary "
   "representation.\n" );
   Console::WriteLine( formatter, "__wchar_t", "Decimal value", "bits[3]", "bits[2]", "bits[1]", "bits[0]" );
   Console::WriteLine( formatter, "---------", "-------------", "-------", "-------", "-------", "-------" );

   // Convert __wchar_t values and display the results.
   DecimalFromChar( L'\0' );
   DecimalFromChar( L' ' );
   DecimalFromChar( L'*' );
   DecimalFromChar( L'A' );
   DecimalFromChar( L'a' );
   DecimalFromChar( L'{' );
   DecimalFromChar( L' ' );
}

/*
This example of the op_Implicit conversion from __wchar_t to Decimal
generates the following output. It displays the Decimal value and
its binary representation.

 __wchar_t  Decimal value   bits[3]  bits[2]  bits[1]  bits[0]
 ---------  -------------   -------  -------  -------  -------
                        0  00000000 00000000 00000000 00000000
                       32  00000000 00000000 00000000 00000020
         *             42  00000000 00000000 00000000 0000002A
         A             65  00000000 00000000 00000000 00000041
         a             97  00000000 00000000 00000000 00000061
         {            123  00000000 00000000 00000000 0000007B
                      198  00000000 00000000 00000000 000000C6
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Char


Decimal ImplicitWideningImplicitImplicit 转换 (Int16 to Decimal)

Decimal
Implicit
Widening
Implicit
Implicit
转换 (Int16 to Decimal)
Decimal 结构

将 16 位有符号的整数转换成 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As Short _
) As Decimal
public static implicit operator decimal (
    short value
)
static implicit operator Decimal (
    short value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Int16
16 位有符号整数。

返回值

类型： System Decimal
表示转换后的 16 位有符号整数的 Decimal。

下面的代码示例通过 Int16 to Decimal 转换，将 Int16 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 Int16 to Decimal 转换，将 Int16 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 Int16 to Decimal 转换，将 Int16 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。

' Example of the op_Implicit conversion from Short to Decimal.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFromInt16Demo

    Const formatter As String = _
        "{0,16}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

    ' Convert the Short argument and display the Decimal value.
    Sub DecimalFromInt16( argument As Short )

        Dim decValue    As Decimal
        Dim bits( )     As Integer

        ' The compiler invokes a constructor in Visual Basic
        ' unless op_Implicit is explicitly called.
        decValue = Decimal.op_Implicit( argument )

        ' Display the Decimal and its binary representation.
        bits = Decimal.GetBits( decValue )
        Console.WriteLine( formatter, argument, decValue, _
            bits( 3 ), bits( 2 ), bits( 1 ), bits( 0 ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the op_Implicit conversion from " & _
            "Short to Decimal generates the " & vbCrLf & _
            "following output. It displays the Decimal value " & _
            "and its binary representation." & vbCrLf )
        Console.WriteLine( formatter, "Short argument", _
            "Decimal value", "bits(3)", "bits(2)", _
            "bits(1)", "bits(0)" )
        Console.WriteLine( formatter, "--------------", _
            "-------------", "-------", "-------", _
            "-------", "-------" )

        ' Convert Short values and display the results.
        DecimalFromInt16( Short.MinValue )
        DecimalFromInt16( Short.MaxValue )
        DecimalFromInt16( &HFFF )
        DecimalFromInt16( 12345 )
        DecimalFromInt16( -10000 )
    End Sub
End Module

' This example of the op_Implicit conversion from Short to Decimal generates the
' following output. It displays the Decimal value and its binary representation.
'
'   Short argument  Decimal value   bits(3)  bits(2)  bits(1)  bits(0)
'   --------------  -------------   -------  -------  -------  -------
'           -32768         -32768  80000000 00000000 00000000 00008000
'            32767          32767  00000000 00000000 00000000 00007FFF
'             4095           4095  00000000 00000000 00000000 00000FFF
'            12345          12345  00000000 00000000 00000000 00003039
'           -10000         -10000  80000000 00000000 00000000 00002710

// Example of the implicit conversion from short to decimal.
using System;

class DecimalFromInt16Demo
{
    const string formatter =
        "{0,15}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}";

    // Convert the short argument and display the decimal value.
    public static void DecimalFromInt16( short argument )
    {
        decimal decValue;
        int[ ]  bits;

        // Display the decimal and its binary representation.
        decValue = argument;
        bits = decimal.GetBits( decValue );

        Console.WriteLine( formatter, argument, decValue,
            bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the implicit conversion from short " +
            "to decimal generates the \nfollowing output. It " +
            "displays the decimal value and its binary " +
            "representation.\n" );
        Console.WriteLine( formatter, "short argument",
            "decimal value", "bits[3]", "bits[2]",
            "bits[1]", "bits[0]" );
        Console.WriteLine( formatter, "--------------",
            "-------------", "-------", "-------",
            "-------", "-------" );

        // Convert short values and display the results.
        DecimalFromInt16( short.MinValue );
        DecimalFromInt16( short.MaxValue );
        DecimalFromInt16( 0xFFF );
        DecimalFromInt16( 12345 );
        DecimalFromInt16( -10000 );
    }
}

/*
This example of the implicit conversion from short to decimal generates the
following output. It displays the decimal value and its binary representation.

 short argument  decimal value   bits[3]  bits[2]  bits[1]  bits[0]
 --------------  -------------   -------  -------  -------  -------
         -32768         -32768  80000000 00000000 00000000 00008000
          32767          32767  00000000 00000000 00000000 00007FFF
           4095           4095  00000000 00000000 00000000 00000FFF
          12345          12345  00000000 00000000 00000000 00003039
         -10000         -10000  80000000 00000000 00000000 00002710
*/

// Example of the op_Implicit conversion from short to Decimal.
using namespace System;
#define formatter "{0,14}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

// Convert the short argument and display the Decimal value.
void DecimalFromInt16( short argument )
{
   Decimal decValue;
   array<Int32>^bits;

   // The compiler invokes a constructor in the Managed Extensions
   // for C++ unless op_Implicit is explicitly called.
   decValue = argument;

   // Display the Decimal and its binary representation.
   bits = Decimal::GetBits( decValue );
   Console::WriteLine( formatter, argument, decValue, bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the op_Implicit conversion from "
   "short to Decimal \ngenerates the following output. "
   "It displays the Decimal value \nand its binary "
   "representation.\n" );
   Console::WriteLine( formatter, "short argument", "Decimal value", "bits[3]", "bits[2]", "bits[1]", "bits[0]" );
   Console::WriteLine( formatter, "--------------", "-------------", "-------", "-------", "-------", "-------" );

   // Convert short values and display the results.
   DecimalFromInt16( Int16::MinValue );
   DecimalFromInt16( Int16::MaxValue );
   DecimalFromInt16( 0xFFF );
   DecimalFromInt16( 12345 );
   DecimalFromInt16(  -10000 );
}

/*
This example of the op_Implicit conversion from short to Decimal
generates the following output. It displays the Decimal value
and its binary representation.

short argument  Decimal value   bits[3]  bits[2]  bits[1]  bits[0]
--------------  -------------   -------  -------  -------  -------
        -32768         -32768  80000000 00000000 00000000 00008000
         32767          32767  00000000 00000000 00000000 00007FFF
          4095           4095  00000000 00000000 00000000 00000FFF
         12345          12345  00000000 00000000 00000000 00003039
        -10000         -10000  80000000 00000000 00000000 00002710
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Int16


Decimal ImplicitWideningImplicitImplicit 转换 (Int32 to Decimal)

Decimal
Implicit
Widening
Implicit
Implicit
转换 (Int32 to Decimal)
Decimal 结构

将 32 位有符号的整数转换成 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As Integer _
) As Decimal
public static implicit operator decimal (
    int value
)
static implicit operator Decimal (
    int value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Int32
32 位有符号整数。

返回值

类型： System Decimal
表示转换后的 32 位有符号整数的 Decimal。

下面的代码示例通过 Int32 to Decimal 转换，将 Int32 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 Int32 to Decimal 转换，将 Int32 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 Int32 to Decimal 转换，将 Int32 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。

' Example of the op_Implicit conversion from Integer to Decimal.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFromInt32Demo

    Const formatter As String = _
        "{0,16}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

    ' Convert the Integer argument and display the Decimal value.
    Sub DecimalFromInt32( argument As Integer )

        Dim decValue    As Decimal
        Dim bits( )     As Integer

        ' The compiler invokes a constructor in Visual Basic
        ' unless op_Implicit is explicitly called.
        decValue = Decimal.op_Implicit( argument )

        ' Display the Decimal and its binary representation.
        bits = Decimal.GetBits( decValue )
        Console.WriteLine( formatter, argument, decValue, _
            bits( 3 ), bits( 2 ), bits( 1 ), bits( 0 ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the op_Implicit conversion from " & _
            "Integer to Decimal " & vbCrLf & "generates the " & _
            "following output. It displays the Decimal value and " & _
            vbCrLf & "its binary representation." & vbCrLf )
        Console.WriteLine( formatter, "Integer argument", _
            "Decimal value", "bits(3)", "bits(2)", _
            "bits(1)", "bits(0)" )
        Console.WriteLine( formatter, "----------------", _
            "-------------", "-------", "-------", _
            "-------", "-------" )

        ' Convert Integer values and display the results.
        DecimalFromInt32( Integer.MinValue )
        DecimalFromInt32( Integer.MaxValue )
        DecimalFromInt32( &HFFFFFF )
        DecimalFromInt32( 123456789 )
        DecimalFromInt32( - 1000000000 )
    End Sub
End Module

' This example of the op_Implicit conversion from Integer to Decimal
' generates the following output. It displays the Decimal value and
' its binary representation.
'
' Integer argument  Decimal value   bits(3)  bits(2)  bits(1)  bits(0)
' ----------------  -------------   -------  -------  -------  -------
'      -2147483648    -2147483648  80000000 00000000 00000000 80000000
'       2147483647     2147483647  00000000 00000000 00000000 7FFFFFFF
'         16777215       16777215  00000000 00000000 00000000 00FFFFFF
'        123456789      123456789  00000000 00000000 00000000 075BCD15
'      -1000000000    -1000000000  80000000 00000000 00000000 3B9ACA00

// Example of the implicit conversion from int to decimal.
using System;

class DecimalFromInt32Demo
{
    const string formatter =
        "{0,13}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}";

    // Convert the int argument and display the decimal value.
    public static void DecimalFromInt32( int argument )
    {
        decimal decValue;
        int[ ]  bits;

        // Display the decimal and its binary representation.
        decValue = argument;
        bits = decimal.GetBits( decValue );

        Console.WriteLine( formatter, argument, decValue,
            bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the implicit conversion from int " +
            "to decimal generates the \nfollowing output. It " +
            "displays the decimal value and its binary " +
            "representation.\n" );
        Console.WriteLine( formatter, "int argument",
            "decimal value", "bits[3]", "bits[2]",
            "bits[1]", "bits[0]" );
        Console.WriteLine( formatter, "------------",
            "-------------", "-------", "-------",
            "-------", "-------" );

        // Convert int values and display the results.
        DecimalFromInt32( int.MinValue );
        DecimalFromInt32( int.MaxValue );
        DecimalFromInt32( 0xFFFFFF );
        DecimalFromInt32( 123456789 );
        DecimalFromInt32( -1000000000 );
    }
}

/*
This example of the implicit conversion from int to decimal generates the
following output. It displays the decimal value and its binary representation.

 int argument  decimal value   bits[3]  bits[2]  bits[1]  bits[0]
 ------------  -------------   -------  -------  -------  -------
  -2147483648    -2147483648  80000000 00000000 00000000 80000000
   2147483647     2147483647  00000000 00000000 00000000 7FFFFFFF
     16777215       16777215  00000000 00000000 00000000 00FFFFFF
    123456789      123456789  00000000 00000000 00000000 075BCD15
  -1000000000    -1000000000  80000000 00000000 00000000 3B9ACA00
*/

// Example of the op_Implicit conversion from int to Decimal.
using namespace System;
#define formatter "{0,14}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

// Convert the int argument and display the Decimal value.
void DecimalFromInt32( int argument )
{
   Decimal decValue;
   array<Int32>^bits;

   // The compiler invokes a constructor in the Managed Extensions
   // for C++ unless op_Implicit is explicitly called.
   decValue = argument;

   // Display the Decimal and its binary representation.
   bits = Decimal::GetBits( decValue );
   Console::WriteLine( formatter, argument, decValue, bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the op_Implicit conversion from "
   "int to Decimal \ngenerates the following output. "
   "It displays the Decimal value \nand its binary "
   "representation.\n" );
   Console::WriteLine( formatter, "int argument", "Decimal value", "bits[3]", "bits[2]", "bits[1]", "bits[0]" );
   Console::WriteLine( formatter, "------------", "-------------", "-------", "-------", "-------", "-------" );

   // Convert int values and display the results.
   DecimalFromInt32( Int32::MinValue );
   DecimalFromInt32( Int32::MaxValue );
   DecimalFromInt32( 0xFFFFFF );
   DecimalFromInt32( 123456789 );
   DecimalFromInt32(  -1000000000 );
}

/*
This example of the op_Implicit conversion from int to Decimal
generates the following output. It displays the Decimal value
and its binary representation.

  int argument  Decimal value   bits[3]  bits[2]  bits[1]  bits[0]
  ------------  -------------   -------  -------  -------  -------
   -2147483648    -2147483648  80000000 00000000 00000000 80000000
    2147483647     2147483647  00000000 00000000 00000000 7FFFFFFF
      16777215       16777215  00000000 00000000 00000000 00FFFFFF
     123456789      123456789  00000000 00000000 00000000 075BCD15
   -1000000000    -1000000000  80000000 00000000 00000000 3B9ACA00
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Int32


Decimal ImplicitWideningImplicitImplicit 转换 (Int64 to Decimal)

Decimal
Implicit
Widening
Implicit
Implicit
转换 (Int64 to Decimal)
Decimal 结构

将 64 位有符号的整数转换成 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As Long _
) As Decimal
public static implicit operator decimal (
    long value
)
static implicit operator Decimal (
    long long value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Int64
64 位有符号整数。

返回值

类型： System Decimal
表示转换后的 64 位有符号整数的 Decimal。

下面的代码示例通过 Int64 to Decimal 转换，将 Int64 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 Int64 to Decimal 转换，将 Int64 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 Int64 to Decimal 转换，将 Int64 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。

' Example of the op_Implicit conversion from Long to Decimal.
Imports System
Imports Microsoft.VisualBasic

Module DecimalFromInt64Demo

    Const formatter As String = _
        "{0,20}{1,21}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

    ' Convert the Long argument and display the Decimal value.
    Sub DecimalFromInt64( argument As Long )

        Dim decValue    As Decimal
        Dim bits( )     As Integer

        ' The compiler invokes a constructor in Visual Basic
        ' unless op_Implicit is explicitly called.
        decValue = Decimal.op_Implicit( argument )

        ' Display the Decimal and its binary representation.
        bits = Decimal.GetBits( decValue )
        Console.WriteLine( formatter, argument, decValue, _
            bits( 3 ), bits( 2 ), bits( 1 ), bits( 0 ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the op_Implicit conversion from Long " & _
            "to Decimal generates the " & vbCrLf & "following " & _
            "output. It displays the Decimal value and its " & _
            "binary representation." & vbCrLf )
        Console.WriteLine( formatter, "Long argument", _
            "Decimal value", "bits(3)", "bits(2)", _
            "bits(1)", "bits(0)" )
        Console.WriteLine( formatter, "-------------", _
            "-------------", "-------", "-------", _
            "-------", "-------" )

        ' Convert Long values and display the results.
        DecimalFromInt64( Long.MinValue )
        DecimalFromInt64( Long.MaxValue )
        DecimalFromInt64( &HFFFFFFFFFFFF )
        DecimalFromInt64( 123456789123456789 )
        DecimalFromInt64( - 1000000000000000 )
    End Sub
End Module

' This example of the op_Implicit conversion from Long to Decimal generates the
' following output. It displays the Decimal value and its binary representation.
'
'        Long argument        Decimal value   bits(3)  bits(2)  bits(1)  bits(0)
'        -------------        -------------   -------  -------  -------  -------
' -9223372036854775808 -9223372036854775808  80000000 00000000 80000000 00000000
'  9223372036854775807  9223372036854775807  00000000 00000000 7FFFFFFF FFFFFFFF
'      281474976710655      281474976710655  00000000 00000000 0000FFFF FFFFFFFF
'   123456789123456789   123456789123456789  00000000 00000000 01B69B4B ACD05F15
'    -1000000000000000    -1000000000000000  80000000 00000000 00038D7E A4C68000

// Example of the implicit conversion from long to decimal.
using System;

class DecimalFromInt64Demo
{
    const string formatter =
        "{0,20}{1,21}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}";

    // Convert the long argument and display the decimal value.
    public static void DecimalFromInt64( long argument )
    {
        decimal decValue;
        int[ ]  bits;

        // Display the decimal and its binary representation.
        decValue = argument;
        bits = decimal.GetBits( decValue );

        Console.WriteLine( formatter, argument, decValue,
            bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the implicit conversion from long " +
            "to decimal generates the \nfollowing output. It " +
            "displays the decimal value and its binary " +
            "representation.\n" );
        Console.WriteLine( formatter, "long argument",
            "decimal value", "bits[3]", "bits[2]",
            "bits[1]", "bits[0]" );
        Console.WriteLine( formatter, "-------------",
            "-------------", "-------", "-------",
            "-------", "-------" );

        // Convert long values and display the results.
        DecimalFromInt64( long.MinValue );
        DecimalFromInt64( long.MaxValue );
        DecimalFromInt64( 0xFFFFFFFFFFFF );
        DecimalFromInt64( 123456789123456789 );
        DecimalFromInt64( -1000000000000000 );
    }
}

/*
This example of the implicit conversion from long to decimal generates the
following output. It displays the decimal value and its binary representation.

       long argument        decimal value   bits[3]  bits[2]  bits[1]  bits[0]
       -------------        -------------   -------  -------  -------  -------
-9223372036854775808 -9223372036854775808  80000000 00000000 80000000 00000000
 9223372036854775807  9223372036854775807  00000000 00000000 7FFFFFFF FFFFFFFF
     281474976710655      281474976710655  00000000 00000000 0000FFFF FFFFFFFF
  123456789123456789   123456789123456789  00000000 00000000 01B69B4B ACD05F15
   -1000000000000000    -1000000000000000  80000000 00000000 00038D7E A4C68000
*/

// Example of the op_Implicit conversion from __int64 to Decimal.
using namespace System;
#define formatter "{0,20}{1,21}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

// Convert the __int64 argument and display the Decimal value.
void DecimalFromInt64( __int64 argument )
{
   Decimal decValue;
   array<Int32>^bits;

   // The compiler invokes a constructor in the Managed Extensions
   // for C++ unless op_Implicit is explicitly called.
   decValue = argument;

   // Display the Decimal and its binary representation.
   bits = Decimal::GetBits( decValue );
   Console::WriteLine( formatter, argument, decValue, bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the op_Implicit conversion from "
   "__int64 to Decimal \ngenerates the following output. "
   "It displays the Decimal value and \nits binary "
   "representation.\n" );
   Console::WriteLine( formatter, "__int64 argument", "Decimal value", "bits[3]", "bits[2]", "bits[1]", "bits[0]" );
   Console::WriteLine( formatter, "----------------", "-------------", "-------", "-------", "-------", "-------" );

   // Convert __int64 values and display the results.
   DecimalFromInt64( Int64::MinValue );
   DecimalFromInt64( Int64::MaxValue );
   DecimalFromInt64( 0xFFFFFFFFFFFF );
   DecimalFromInt64( 123456789123456789 );
   DecimalFromInt64(  -1000000000000000 );
}

/*
This example of the op_Implicit conversion from __int64 to Decimal
generates the following output. It displays the Decimal value and
its binary representation.

    __int64 argument        Decimal value   bits[3]  bits[2]  bits[1]  bits[0]
    ----------------        -------------   -------  -------  -------  -------
-9223372036854775808 -9223372036854775808  80000000 00000000 80000000 00000000
 9223372036854775807  9223372036854775807  00000000 00000000 7FFFFFFF FFFFFFFF
     281474976710655      281474976710655  00000000 00000000 0000FFFF FFFFFFFF
  123456789123456789   123456789123456789  00000000 00000000 01B69B4B ACD05F15
   -1000000000000000    -1000000000000000  80000000 00000000 00038D7E A4C68000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
Int64


Decimal ImplicitWideningImplicitImplicit 转换 (SByte to Decimal)

Decimal
Implicit
Widening
Implicit
Implicit
转换 (SByte to Decimal)
Decimal 结构

将 8 位有符号整数转换成 Decimal。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As SByte _
) As Decimal
public static implicit operator decimal (
    sbyte value
)
static implicit operator Decimal (
    signed char value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System SByte
8 位有符号整数。

返回值

类型： System Decimal
表示转换后的 8 位有符号整数的 Decimal。

下面的代码示例通过 SByte to Decimal 转换，将 SByte 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 SByte to Decimal 转换，将 SByte 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 SByte to Decimal 转换，将 SByte 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。

' Example of the op_Implicit conversion from SByte to Decimal.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module DecimalFromSByteDemo

    Const formatter As String = _
        "{0,15}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

    ' Convert the SByte argument and display the Decimal value.
    Sub DecimalFromSByte( argument As SByte )

        Dim decValue    As Decimal
        Dim bits( )     As Integer

        ' The compiler invokes a constructor in Visual Basic
        ' unless op_Implicit is explicitly called.
        decValue = Decimal.op_Implicit( argument )

        ' Display the Decimal and its binary representation.
        bits = Decimal.GetBits( decValue )
        Console.WriteLine( formatter, argument, decValue, _
            bits( 3 ), bits( 2 ), bits( 1 ), bits( 0 ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the op_Implicit conversion from " & _
            "SByte to Decimal generates the " & vbCrLf & _
            "following output. It displays the Decimal value " & _
            "and its binary representation." & vbCrLf )
        Console.WriteLine( formatter, "SByte argument", _
            "Decimal value", "bits(3)", "bits(2)", _
            "bits(1)", "bits(0)" )
        Console.WriteLine( formatter, "--------------", _
            "-------------", "-------", "-------", _
            "-------", "-------" )

        ' Convert SByte values and display the results.
        DecimalFromSByte( SByte.Parse( "-128" ) )
        DecimalFromSByte( SByte.Parse( "127" ) )
        DecimalFromSByte( SByte.Parse( "3F", _
            NumberStyles.HexNumber ) )
        DecimalFromSByte( SByte.Parse( "123" ) )
        DecimalFromSByte( SByte.Parse( "-100" ) )
    End Sub
End Module

' This example of the op_Implicit conversion from SByte to Decimal generates the
' following output. It displays the Decimal value and its binary representation.
'
'  SByte argument  Decimal value   bits(3)  bits(2)  bits(1)  bits(0)
'  --------------  -------------   -------  -------  -------  -------
'            -128           -128  80000000 00000000 00000000 00000080
'             127            127  00000000 00000000 00000000 0000007F
'              63             63  00000000 00000000 00000000 0000003F
'             123            123  00000000 00000000 00000000 0000007B
'            -100           -100  80000000 00000000 00000000 00000064

// Example of the implicit conversion from sbyte to decimal.
using System;

class DecimalFromSByteDemo
{
    const string formatter =
        "{0,15}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}";

    // Convert the sbyte argument and display the decimal value.
    public static void DecimalFromSByte( sbyte argument )
    {
        decimal decValue;
        int[ ]  bits;

        // Display the decimal and its binary representation.
        decValue = argument;
        bits = decimal.GetBits( decValue );

        Console.WriteLine( formatter, argument, decValue,
            bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the implicit conversion from sbyte " +
            "to decimal generates the \nfollowing output. It " +
            "displays the decimal value and its binary " +
            "representation.\n" );
        Console.WriteLine( formatter, "sbyte argument",
            "decimal value", "bits[3]", "bits[2]",
            "bits[1]", "bits[0]" );
        Console.WriteLine( formatter, "--------------",
            "-------------", "-------", "-------",
            "-------", "-------" );

        // Convert sbyte values and display the results.
        DecimalFromSByte( sbyte.MinValue );
        DecimalFromSByte( sbyte.MaxValue );
        DecimalFromSByte( 0x3F );
        DecimalFromSByte( 123 );
        DecimalFromSByte( - 100 );
    }
}

/*
This example of the implicit conversion from sbyte to decimal generates the
following output. It displays the decimal value and its binary representation.

 sbyte argument  decimal value   bits[3]  bits[2]  bits[1]  bits[0]
 --------------  -------------   -------  -------  -------  -------
           -128           -128  80000000 00000000 00000000 00000080
            127            127  00000000 00000000 00000000 0000007F
             63             63  00000000 00000000 00000000 0000003F
            123            123  00000000 00000000 00000000 0000007B
           -100           -100  80000000 00000000 00000000 00000064
*/

// Example of the op_Implicit conversion from 8-bit char to Decimal.
using namespace System;
#define formatter "{0,14}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

// Convert the char argument and display the Decimal value.
void DecimalFromSByte( char argument )
{
   Decimal decValue;
   array<Int32>^bits;

   // The compiler invokes a constructor in the Managed Extensions
   // for C++ unless op_Implicit is explicitly called.
   decValue = argument;

   // Display the Decimal and its binary representation.
   bits = Decimal::GetBits( decValue );
   Console::WriteLine( formatter, argument, decValue, bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the op_Implicit conversion from "
   "8-bit char to Decimal \ngenerates the following output. "
   "It displays the Decimal value and its \nbinary "
   "representation.\n" );
   Console::WriteLine( formatter, "char argument", "Decimal value", "bits[3]", "bits[2]", "bits[1]", "bits[0]" );
   Console::WriteLine( formatter, "-------------", "-------------", "-------", "-------", "-------", "-------" );

   // Convert (signed) char and display the results.
   DecimalFromSByte( SByte::MinValue );
   DecimalFromSByte( SByte::MaxValue );
   DecimalFromSByte( 0x3F );
   DecimalFromSByte( 123 );
   DecimalFromSByte(  -100 );
}

/*
This example of the op_Implicit conversion from 8-bit char to Decimal
generates the following output. It displays the Decimal value and its
binary representation.

 char argument  Decimal value   bits[3]  bits[2]  bits[1]  bits[0]
 -------------  -------------   -------  -------  -------  -------
          -128           -128  80000000 00000000 00000000 00000080
           127            127  00000000 00000000 00000000 0000007F
            63             63  00000000 00000000 00000000 0000003F
           123            123  00000000 00000000 00000000 0000007B
          -100           -100  80000000 00000000 00000000 00000064
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
SByte


Decimal ImplicitWideningImplicitImplicit 转换 (UInt16 to Decimal)

Decimal
Implicit
Widening
Implicit
Implicit
转换 (UInt16 to Decimal)
Decimal 结构

将 16 位无符号的整数转换成 Decimal。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As UShort _
) As Decimal
public static implicit operator decimal (
    ushort value
)
static implicit operator Decimal (
    unsigned short value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System UInt16
16 位无符号整数。

返回值

类型： System Decimal
表示转换后的 16 位无符号整数的 Decimal。

下面的代码示例通过 UInt16 to Decimal 转换，将 UInt16 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 UInt16 to Decimal 转换，将 UInt16 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 UInt16 to Decimal 转换，将 UInt16 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。

' Example of the op_Implicit conversion from UInt16 to Decimal.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module DecimalFromUInt16Demo

    Const formatter As String = _
        "{0,15}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

    ' Convert the UInt16 argument and display the Decimal value.
    Sub DecimalFromUInt16( argument As UInt16 )

        Dim decValue    As Decimal
        Dim bits( )     As Integer

        ' The compiler invokes a constructor in Visual Basic
        ' unless op_Implicit is explicitly called.
        decValue = Decimal.op_Implicit( argument )

        ' Display the Decimal and its binary representation.
        bits = Decimal.GetBits( decValue )
        Console.WriteLine( formatter, argument, decValue, _
            bits( 3 ), bits( 2 ), bits( 1 ), bits( 0 ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the op_Implicit conversion from " & _
            "UInt16 to Decimal generates the " & vbCrLf & _
            "following output. It displays the Decimal value " & _
            "and its binary representation." & vbCrLf )
        Console.WriteLine( formatter, "UInt16 argument", _
            "Decimal value", "bits(3)", "bits(2)", _
            "bits(1)", "bits(0)" )
        Console.WriteLine( formatter, "---------------", _
            "-------------", "-------", "-------", _
            "-------", "-------" )

        ' Convert UInt16 values and display the results.
        DecimalFromUInt16( UInt16.Parse( "0" ) )
        DecimalFromUInt16( UInt16.Parse( "65535" ) )
        DecimalFromUInt16( UInt16.Parse( "FFF", _
            NumberStyles.HexNumber ) )
        DecimalFromUInt16( UInt16.Parse( "12345" ) )
        DecimalFromUInt16( UInt16.Parse( "40000" ) )
    End Sub
End Module

' This example of the op_Implicit conversion from UInt16 to Decimal generates the
' following output. It displays the Decimal value and its binary representation.
'
' UInt16 argument  Decimal value   bits(3)  bits(2)  bits(1)  bits(0)
' ---------------  -------------   -------  -------  -------  -------
'               0              0  00000000 00000000 00000000 00000000
'           65535          65535  00000000 00000000 00000000 0000FFFF
'            4095           4095  00000000 00000000 00000000 00000FFF
'           12345          12345  00000000 00000000 00000000 00003039
'           40000          40000  00000000 00000000 00000000 00009C40

// Example of the implicit conversion from ushort to decimal.
using System;

class DecimalFromUInt16Demo
{
    const string formatter =
        "{0,15}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}";

    // Convert the ushort argument and display the decimal value.
    public static void DecimalFromUInt16( ushort argument )
    {
        decimal decValue;
        int[ ]  bits;

        // Display the decimal and its binary representation.
        decValue = argument;
        bits = decimal.GetBits( decValue );

        Console.WriteLine( formatter, argument, decValue,
            bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the implicit conversion from ushort " +
            "to decimal generates the \nfollowing output. It " +
            "displays the decimal value and its binary " +
            "representation.\n" );
        Console.WriteLine( formatter, "ushort argument",
            "decimal value", "bits[3]", "bits[2]",
            "bits[1]", "bits[0]" );
        Console.WriteLine( formatter, "---------------",
            "-------------", "-------", "-------",
            "-------", "-------" );

        // Convert ushort values and display the results.
        DecimalFromUInt16( ushort.MinValue );
        DecimalFromUInt16( ushort.MaxValue );
        DecimalFromUInt16( 0xFFF );
        DecimalFromUInt16( 12345 );
        DecimalFromUInt16( 40000 );
    }
}

/*
This example of the implicit conversion from ushort to decimal generates the
following output. It displays the decimal value and its binary representation.

ushort argument  decimal value   bits[3]  bits[2]  bits[1]  bits[0]
---------------  -------------   -------  -------  -------  -------
              0              0  00000000 00000000 00000000 00000000
          65535          65535  00000000 00000000 00000000 0000FFFF
           4095           4095  00000000 00000000 00000000 00000FFF
          12345          12345  00000000 00000000 00000000 00003039
          40000          40000  00000000 00000000 00000000 00009C40
*/

// Example of the op_Implicit conversion from unsigned short to Decimal.
using namespace System;
#define formatter "{0,14}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

// Convert the unsigned short argument and display the Decimal value.
void DecimalFromUInt16( unsigned short argument )
{
   Decimal decValue;
   array<Int32>^bits;

   // The compiler invokes a constructor in the Managed Extensions
   // for C++ unless op_Implicit is explicitly called.
   decValue = argument;

   // Display the Decimal and its binary representation.
   bits = Decimal::GetBits( decValue );
   Console::WriteLine( formatter, argument, decValue, bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the op_Implicit conversion from unsigned "
   "short to Decimal \ngenerates the following output. "
   "It displays the Decimal value and its \nbinary "
   "representation.\n" );
   Console::WriteLine( formatter, "unsigned short", "Decimal value", "bits[3]", "bits[2]", "bits[1]", "bits[0]" );
   Console::WriteLine( formatter, "--------------", "-------------", "-------", "-------", "-------", "-------" );

   // Convert unsigned short and display the results.
   DecimalFromUInt16( UInt16::MinValue );
   DecimalFromUInt16( UInt16::MaxValue );
   DecimalFromUInt16( 0xFFF );
   DecimalFromUInt16( 12345 );
   DecimalFromUInt16( 40000 );
}

/*
This example of the op_Implicit conversion from unsigned short to Decimal
generates the following output. It displays the Decimal value and its
binary representation.

unsigned short  Decimal value   bits[3]  bits[2]  bits[1]  bits[0]
--------------  -------------   -------  -------  -------  -------
             0              0  00000000 00000000 00000000 00000000
         65535          65535  00000000 00000000 00000000 0000FFFF
          4095           4095  00000000 00000000 00000000 00000FFF
         12345          12345  00000000 00000000 00000000 00003039
         40000          40000  00000000 00000000 00000000 00009C40
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
UInt16


Decimal ImplicitWideningImplicitImplicit 转换 (UInt32 to Decimal)

Decimal
Implicit
Widening
Implicit
Implicit
转换 (UInt32 to Decimal)
Decimal 结构

将 32 位无符号的整数转换成 Decimal。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As UInteger _
) As Decimal
public static implicit operator decimal (
    uint value
)
static implicit operator Decimal (
    unsigned int value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System UInt32
32 位无符号整数。

返回值

类型： System Decimal
表示转换后的 32 位无符号整数的 Decimal。

下面的代码示例通过 UInt32 to Decimal 转换，将 UInt32 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 UInt32 to Decimal 转换，将 UInt32 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 UInt32 to Decimal 转换，将 UInt32 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。

' Example of the op_Implicit conversion from UInt32 to Decimal.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module DecimalFromUInt32Demo

    Const formatter As String = _
        "{0,15}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

    ' Convert the UInt32 argument and display the Decimal value.
    Sub DecimalFromUInt32( argument As UInt32 )

        Dim decValue    As Decimal
        Dim bits( )     As Integer

        ' The compiler invokes a constructor in Visual Basic
        ' unless op_Implicit is explicitly called.
        decValue = Decimal.op_Implicit( argument )

        ' Display the Decimal and its binary representation.
        bits = Decimal.GetBits( decValue )
        Console.WriteLine( formatter, argument, decValue, _
            bits( 3 ), bits( 2 ), bits( 1 ), bits( 0 ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the op_Implicit conversion from " & _
            "UInt32 to Decimal generates the " & vbCrLf & _
            "following output. It displays the Decimal value " & _
            "and its binary representation." & vbCrLf )
        Console.WriteLine( formatter, "UInt32 argument", _
            "Decimal value", "bits(3)", "bits(2)", _
            "bits(1)", "bits(0)" )
        Console.WriteLine( formatter, "---------------", _
            "-------------", "-------", "-------", _
            "-------", "-------" )

        ' Convert UInt32 values and display the results.
        DecimalFromUInt32( UInt32.Parse( "0" ) )
        DecimalFromUInt32( UInt32.Parse( "4294967295" ) )
        DecimalFromUInt32( UInt32.Parse( "FFFFFF", _
            NumberStyles.HexNumber ) )
        DecimalFromUInt32( UInt32.Parse( "123456789" ) )
        DecimalFromUInt32( UInt32.Parse( "4000000000" ) )
    End Sub
End Module

' This example of the op_Implicit conversion from UInt32 to Decimal generates the
' following output. It displays the Decimal value and its binary representation.
'
' UInt32 argument  Decimal value   bits(3)  bits(2)  bits(1)  bits(0)
' ---------------  -------------   -------  -------  -------  -------
'               0              0  00000000 00000000 00000000 00000000
'      4294967295     4294967295  00000000 00000000 00000000 FFFFFFFF
'        16777215       16777215  00000000 00000000 00000000 00FFFFFF
'       123456789      123456789  00000000 00000000 00000000 075BCD15
'      4000000000     4000000000  00000000 00000000 00000000 EE6B2800

// Example of the implicit conversion from uint to decimal.
using System;

class DecimalFromUInt32Demo
{
    const string formatter =
        "{0,15}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}";

    // Convert the uint argument and display the decimal value.
    public static void DecimalFromUInt32( uint argument )
    {
        decimal decValue;
        int[ ]  bits;

        // Display the decimal and its binary representation.
        decValue = argument;
        bits = decimal.GetBits( decValue );

        Console.WriteLine( formatter, argument, decValue,
            bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the implicit conversion from uint " +
            "to decimal generates the \nfollowing output. It " +
            "displays the decimal value and its binary " +
            "representation.\n" );
        Console.WriteLine( formatter, "uint argument",
            "decimal value", "bits[3]", "bits[2]",
            "bits[1]", "bits[0]" );
        Console.WriteLine( formatter, "-------------",
            "-------------", "-------", "-------",
            "-------", "-------" );

        // Convert uint values and display the results.
        DecimalFromUInt32( uint.MinValue );
        DecimalFromUInt32( uint.MaxValue );
        DecimalFromUInt32( 0xFFFFFF );
        DecimalFromUInt32( 123456789 );
        DecimalFromUInt32( 4000000000 );
    }
}

/*
This example of the implicit conversion from uint to decimal generates the
following output. It displays the decimal value and its binary representation.

  uint argument  decimal value   bits[3]  bits[2]  bits[1]  bits[0]
  -------------  -------------   -------  -------  -------  -------
              0              0  00000000 00000000 00000000 00000000
     4294967295     4294967295  00000000 00000000 00000000 FFFFFFFF
       16777215       16777215  00000000 00000000 00000000 00FFFFFF
      123456789      123456789  00000000 00000000 00000000 075BCD15
     4000000000     4000000000  00000000 00000000 00000000 EE6B2800
*/

// Example of the op_Implicit conversion from unsigned int to Decimal.
using namespace System;
#define formatter "{0,14}{1,15}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

// Convert the unsigned int argument and display the Decimal value.
void DecimalFromUInt32( unsigned int argument )
{
   Decimal decValue;
   array<Int32>^bits;

   // The compiler invokes a constructor in the Managed Extensions
   // for C++ unless op_Implicit is explicitly called.
   decValue = argument;

   // Display the Decimal and its binary representation.
   bits = Decimal::GetBits( decValue );
   Console::WriteLine( formatter, argument, decValue, bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the op_Implicit conversion from unsigned "
   "int to Decimal \ngenerates the following output. "
   "It displays the Decimal value and \nits binary "
   "representation.\n" );
   Console::WriteLine( formatter, "unsigned int", "Decimal value", "bits[3]", "bits[2]", "bits[1]", "bits[0]" );
   Console::WriteLine( formatter, "------------", "-------------", "-------", "-------", "-------", "-------" );

   // Convert unsigned int values and display the results.
   DecimalFromUInt32( UInt32::MinValue );
   DecimalFromUInt32( UInt32::MaxValue );
   DecimalFromUInt32( 0xFFFFFF );
   DecimalFromUInt32( 123456789 );
   DecimalFromUInt32( 4000000000 );
}

/*
This example of the op_Implicit conversion from unsigned int to Decimal
generates the following output. It displays the Decimal value and
its binary representation.

  unsigned int  Decimal value   bits[3]  bits[2]  bits[1]  bits[0]
  ------------  -------------   -------  -------  -------  -------
             0              0  00000000 00000000 00000000 00000000
    4294967295     4294967295  00000000 00000000 00000000 FFFFFFFF
      16777215       16777215  00000000 00000000 00000000 00FFFFFF
     123456789      123456789  00000000 00000000 00000000 075BCD15
    4000000000     4000000000  00000000 00000000 00000000 EE6B2800
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
UInt32


Decimal ImplicitWideningImplicitImplicit 转换 (UInt64 to Decimal)

Decimal
Implicit
Widening
Implicit
Implicit
转换 (UInt64 to Decimal)
Decimal 结构

将 64 位无符号的整数转换成 Decimal。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As ULong _
) As Decimal
public static implicit operator decimal (
    ulong value
)
static implicit operator Decimal (
    unsigned long long value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System UInt64
64 位无符号整数。

返回值

类型： System Decimal
表示转换后的 64 位无符号整数的 Decimal。

下面的代码示例通过 UInt64 to Decimal 转换，将 UInt64 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 UInt64 to Decimal 转换，将 UInt64 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。 下面的代码示例通过 UInt64 to Decimal 转换，将 UInt64 值转换为 Decimal 数字。该转换在 C# 中是隐式的，但在 Visual Basic 和 C++ 中需要 op_Implicit 运算符。在这些语言中，到 Decimal 的隐式转换使用其他方法。

' Example of the op_Implicit conversion from UInt64 to Decimal.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module DecimalFromUInt64Demo

    Const formatter As String = _
        "{0,20}{1,21}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

    ' Convert the UInt64 argument and display the Decimal value.
    Sub DecimalFromUInt64( argument As UInt64 )

        Dim decValue    As Decimal
        Dim bits( )     As Integer

        ' The compiler invokes a constructor in Visual Basic
        ' unless op_Implicit is explicitly called.
        decValue = Decimal.op_Implicit( argument )

        ' Display the Decimal and its binary representation.
        bits = Decimal.GetBits( decValue )
        Console.WriteLine( formatter, argument, decValue, _
            bits( 3 ), bits( 2 ), bits( 1 ), bits( 0 ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the op_Implicit conversion from " & _
            "UInt64 to Decimal generates the " & vbCrLf & _
            "following output. It displays the Decimal value " & _
            "and its binary representation." & vbCrLf )
        Console.WriteLine( formatter, "UInt64 argument", _
            "Decimal value", "bits(3)", "bits(2)", _
            "bits(1)", "bits(0)" )
        Console.WriteLine( formatter, "---------------", _
            "-------------", "-------", "-------", _
            "-------", "-------" )

        ' Convert UInt64 values and display the results.
        DecimalFromUInt64( UInt64.Parse( "0" ) )
        DecimalFromUInt64( UInt64.Parse( "18446744073709551615" ) )
        DecimalFromUInt64( UInt64.Parse( "FFFFFFFFFFFF", _
            NumberStyles.HexNumber ) )
        DecimalFromUInt64( UInt64.Parse( "123456789123456789" ) )
        DecimalFromUInt64( UInt64.Parse( "1000000000000000" ) )
    End Sub
End Module

' This example of the op_Implicit conversion from UInt64 to Decimal generates the
' following output. It displays the Decimal value and its binary representation.
'
'      UInt64 argument        Decimal value   bits(3)  bits(2)  bits(1)  bits(0)
'      ---------------        -------------   -------  -------  -------  -------
'                    0                    0  00000000 00000000 00000000 00000000
' 18446744073709551615 18446744073709551615  00000000 00000000 FFFFFFFF FFFFFFFF
'      281474976710655      281474976710655  00000000 00000000 0000FFFF FFFFFFFF
'   123456789123456789   123456789123456789  00000000 00000000 01B69B4B ACD05F15
'     1000000000000000     1000000000000000  00000000 00000000 00038D7E A4C68000

// Example of the implicit conversion from ulong to decimal.
using System;

class DecimalFromUInt64Demo
{
    const string formatter =
        "{0,20}{1,21}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}";

    // Convert the ulong argument and display the decimal value.
    public static void DecimalFromUInt64( ulong argument )
    {
        decimal decValue;
        int[ ]  bits;

        // Display the decimal and its binary representation.
        decValue = argument;
        bits = decimal.GetBits( decValue );

        Console.WriteLine( formatter, argument, decValue,
            bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the implicit conversion from ulong " +
            "to decimal generates the \nfollowing output. It " +
            "displays the decimal value and its binary " +
            "representation.\n" );
        Console.WriteLine( formatter, "ulong argument",
            "decimal value", "bits[3]", "bits[2]",
            "bits[1]", "bits[0]" );
        Console.WriteLine( formatter, "--------------",
            "-------------", "-------", "-------",
            "-------", "-------" );

        // Convert ulong values and display the results.
        DecimalFromUInt64( ulong.MinValue );
        DecimalFromUInt64( ulong.MaxValue );
        DecimalFromUInt64( 0xFFFFFFFFFFFF );
        DecimalFromUInt64( 123456789123456789 );
        DecimalFromUInt64( 1000000000000000 );
    }
}

/*
This example of the implicit conversion from ulong to decimal generates the
following output. It displays the decimal value and its binary representation.

      ulong argument        decimal value   bits[3]  bits[2]  bits[1]  bits[0]
      --------------        -------------   -------  -------  -------  -------
                   0                    0  00000000 00000000 00000000 00000000
18446744073709551615 18446744073709551615  00000000 00000000 FFFFFFFF FFFFFFFF
     281474976710655      281474976710655  00000000 00000000 0000FFFF FFFFFFFF
  123456789123456789   123456789123456789  00000000 00000000 01B69B4B ACD05F15
    1000000000000000     1000000000000000  00000000 00000000 00038D7E A4C68000
*/

// Example of the op_Implicit conversion from unsigned __int64 to
// Decimal.
using namespace System;
#define formatter "{0,20}{1,21}{2,10:X8}{3,9:X8}{4,9:X8}{5,9:X8}"

// Convert the unsigned __int64 argument and display the Decimal value.
void DecimalFromInt64( unsigned __int64 argument )
{
   Decimal decValue;
   array<Int32>^bits;

   // The compiler invokes a constructor in the Managed Extensions
   // for C++ unless op_Implicit is explicitly called.
   decValue = argument;

   // Display the Decimal and its binary representation.
   bits = Decimal::GetBits( decValue );
   Console::WriteLine( formatter, argument, decValue, bits[ 3 ], bits[ 2 ], bits[ 1 ], bits[ 0 ] );
}

int main()
{
   Console::WriteLine( "This example of the op_Implicit conversion from unsigned "
   "__int64 to Decimal \ngenerates the following output. "
   "It displays the Decimal value and its \nbinary "
   "representation.\n" );
   Console::WriteLine( formatter, "unsigned __int64", "Decimal value", "bits[3]", "bits[2]", "bits[1]", "bits[0]" );
   Console::WriteLine( formatter, "----------------", "-------------", "-------", "-------", "-------", "-------" );

   // Convert unsigned __int64 values and display the results.
   DecimalFromInt64( UInt64::MinValue );
   DecimalFromInt64( UInt64::MaxValue );
   DecimalFromInt64( 0xFFFFFFFFFFFF );
   DecimalFromInt64( 123456789123456789 );
   DecimalFromInt64( 1000000000000000 );
}

/*
This example of the op_Implicit conversion from unsigned __int64 to Decimal
generates the following output. It displays the Decimal value and its
binary representation.

    unsigned __int64        Decimal value   bits[3]  bits[2]  bits[1]  bits[0]
    ----------------        -------------   -------  -------  -------  -------
                   0                    0  00000000 00000000 00000000 00000000
18446744073709551615 18446744073709551615  00000000 00000000 FFFFFFFF FFFFFFFF
     281474976710655      281474976710655  00000000 00000000 0000FFFF FFFFFFFF
  123456789123456789   123456789123456789  00000000 00000000 01B69B4B ACD05F15
    1000000000000000     1000000000000000  00000000 00000000 00038D7E A4C68000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
重载
System 命名空间
UInt64


Decimal ..::.Increment 运算符

Decimal
.
.
::
.
Increment 运算符
Decimal 结构

将 Decimal 操作数增加 1。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator ++ ( _
    d As Decimal _
) As Decimal
public static decimal operator ++(
    decimal d
)
public:
static Decimal operator ++(
    Decimal d
)
static let inline (++)
        d:decimal  : decimal

参数

d
类型： System Decimal
Decimal 操作数。

返回值

类型： System Decimal
d 增加 1 后的值。
异常 | 条件
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的代码示例对几个 Decimal 值应用 Increment 运算符。

' Example of the Decimal increment, decrement, unary negation, and
' unary plus operators.
Imports System
Imports Microsoft.VisualBasic

Module DecIncrDecrUnaryDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Display the argument and the incremented and decremented values.
    Sub DecIncrDecrUnary( argument as Decimal )

        Dim toBeIncr As Decimal = argument
        Dim toBeDecr As Decimal = argument

        Console.WriteLine( "{0,-36}{1}", "Decimal argument: ", _
            argument )

        ' The op_Increment and op_Decrement operators must be
        ' explicitly coded in Visual Basic.

        ' Catch the exception if the increment operator throws one.
        Console.Write( "{0,-36}", "Decimal.op_Increment( argument )" )
        Try
            toBeIncr = Decimal.op_Increment( toBeIncr )
            Console.WriteLine( "{0}", toBeIncr )
        Catch ex As Exception
            Console.WriteLine( "{0}", GetExceptionType( ex ) )
        End Try

        ' Catch the exception if the decrement operator throws one.
        Console.Write( "{0,-36}", "Decimal.op_Decrement( argument )" )
        Try
            toBeDecr = Decimal.op_Decrement( toBeDecr )
            Console.WriteLine( "{0}", toBeDecr )
        Catch ex As Exception
            Console.WriteLine( "{0}", GetExceptionType( ex ) )
        End Try

        Console.WriteLine( )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal increment, decrement, " & _
            "unary negation, " & vbCrLf & "and unary plus " & _
            "operators generates the following output. It " & vbCrLf & _
            "displays the results of the operators on several " & _
            "Decimal values." & vbCrLf  )

        ' Create objects to compare with the reference.
        DecIncrDecrUnary( 0.000000123D )
        DecIncrDecrUnary( New Decimal( 123000000, 0, 0, false, 9 ) )

        ' The op_UnaryNegation and op_UnaryPlus operators must be
        ' explicitly coded in Visual Basic. If unary + or - is used,
        ' other methods are called.
        DecIncrDecrUnary( Decimal.op_UnaryNegation( _
            New Decimal( 123000000, 0, 0, false, 9 ) ) )
        DecIncrDecrUnary( Decimal.op_UnaryPlus( Decimal.MaxValue ) )
        DecIncrDecrUnary( Decimal.op_UnaryNegation( Decimal.MaxValue ) )
        DecIncrDecrUnary( Decimal.op_UnaryPlus( _
            7.5000000000000000000000000001D ) )
    End Sub
End Module

' This example of the Decimal increment, decrement, unary negation,
' and unary plus operators generates the following output. It
' displays the results of the operators on several Decimal values.
'
' Decimal argument:                   0.000000123
' Decimal.op_Increment( argument )    1.000000123
' Decimal.op_Decrement( argument )    -0.999999877
'
' Decimal argument:                   0.123000000
' Decimal.op_Increment( argument )    1.123000000
' Decimal.op_Decrement( argument )    -0.877000000
'
' Decimal argument:                   -0.123000000
' Decimal.op_Increment( argument )    0.877000000
' Decimal.op_Decrement( argument )    -1.123000000
'
' Decimal argument:                   79228162514264337593543950335
' Decimal.op_Increment( argument )    OverflowException
' Decimal.op_Decrement( argument )    79228162514264337593543950334
'
' Decimal argument:                   -79228162514264337593543950335
' Decimal.op_Increment( argument )    -79228162514264337593543950334
' Decimal.op_Decrement( argument )    OverflowException
'
' Decimal argument:                   7.5000000000000000000000000001
' Decimal.op_Increment( argument )    8.500000000000000000000000000
' Decimal.op_Decrement( argument )    6.5000000000000000000000000001

// Example of the decimal increment, decrement, unary negation, and
// unary plus operators.
using System;

class DecIncrDecrUnaryDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Display the argument and the incremented and decremented values.
    public static void DecIncrDecrUnary( decimal argument )
    {
        decimal toBeIncr = argument;
        decimal toBeDecr = argument;

        Console.WriteLine( "{0,-26}{1}", "decimal argument: ",
            argument );

        // Catch the exception if the increment operator throws one.
        Console.Write( "{0,-26}", "argument ++" );
        try
        {
            toBeIncr ++;
            Console.WriteLine( "{0}", toBeIncr );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}", GetExceptionType( ex ) );
        }

        // Catch the exception if the decrement operator throws one.
        Console.Write( "{0,-26}", "argument --" );
        try
        {
            toBeDecr --;
            Console.WriteLine( "{0}", toBeDecr );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}", GetExceptionType( ex ) );
        }

        Console.WriteLine( );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the decimal increment, " +
            "decrement, unary negation, \nand unary plus operators " +
            "generates the following output. It \ndisplays the " +
            "results of the operators on several decimal values.\n" );

        // Create objects to compare with the reference.
        DecIncrDecrUnary( 0.000000123M );
        DecIncrDecrUnary( new decimal( 123000000, 0, 0, false, 9 ) );
        DecIncrDecrUnary( - new decimal( 123000000, 0, 0, false, 9 ) );
        DecIncrDecrUnary( + decimal.MaxValue );
        DecIncrDecrUnary( - decimal.MaxValue );
        DecIncrDecrUnary( + 7.5000000000000000000000000001M );
    }
}

/*
This example of the decimal increment, decrement, unary negation,
and unary plus operators generates the following output. It
displays the results of the operators on several decimal values.

decimal argument:         0.000000123
argument ++               1.000000123
argument --               -0.999999877

decimal argument:         0.123000000
argument ++               1.123000000
argument --               -0.877000000

decimal argument:         -0.123000000
argument ++               0.877000000
argument --               -1.123000000

decimal argument:         79228162514264337593543950335
argument ++               OverflowException
argument --               79228162514264337593543950334

decimal argument:         -79228162514264337593543950335
argument ++               -79228162514264337593543950334
argument --               OverflowException

decimal argument:         7.5000000000000000000000000001
argument ++               8.500000000000000000000000000
argument --               6.5000000000000000000000000001
*/

// Example of the Decimal increment, decrement, unary negation, and
// unary plus operators.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Display the argument and the incremented and decremented values.
void DecIncrDecrUnary( Decimal argument )
{
   Decimal toBeIncr = argument;
   Decimal toBeDecr = argument;
   Console::WriteLine( "{0,-26}{1}", "Decimal argument: ", argument );

   // Catch the exception if the increment operator throws one.
   Console::Write( "{0,-26}", "argument ++" );
   try
   {
      toBeIncr++;
      Console::WriteLine( "{0}", toBeIncr );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}", GetExceptionType( ex ) );
   }

   // Catch the exception if the decrement operator throws one.
   Console::Write( "{0,-26}", "argument --" );
   try
   {
      toBeDecr--;
      Console::WriteLine( "{0}", toBeDecr );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}", GetExceptionType( ex ) );
   }

   Console::WriteLine();
}

int main()
{
   Console::WriteLine( "This example of the Decimal increment, "
   "decrement, unary negation, \nand unary plus operators "
   "generates the following output. It \ndisplays the "
   "results of the operators on several Decimal values.\n" );

   // Create objects to compare with the reference.
   DecIncrDecrUnary( Decimal::Parse( "0.000000123" ) );
   DecIncrDecrUnary( Decimal(123000000,0,0,false,9) );
   DecIncrDecrUnary(  -Decimal(123000000,0,0,false,9) );
   DecIncrDecrUnary(  +Decimal::MaxValue );
   DecIncrDecrUnary(  -Decimal::MaxValue );
   DecIncrDecrUnary(  +Decimal::Parse( "7.5000000000000000000000000001" ) );
}

/*
This example of the Decimal increment, decrement, unary negation,
and unary plus operators generates the following output. It
displays the results of the operators on several Decimal values.

Decimal argument:         0.000000123
argument ++               1.000000123
argument --               -0.999999877

Decimal argument:         0.123000000
argument ++               1.123000000
argument --               -0.877000000

Decimal argument:         -0.123000000
argument ++               0.877000000
argument --               -1.123000000

Decimal argument:         79228162514264337593543950335
argument ++               OverflowException
argument --               79228162514264337593543950334

Decimal argument:         -79228162514264337593543950335
argument ++               -79228162514264337593543950334
argument --               OverflowException

Decimal argument:         7.5000000000000000000000000001
argument ++               8.500000000000000000000000000
argument --               6.5000000000000000000000000001
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Add


Decimal ..::.Inequality 运算符

Decimal
.
.
::
.
Inequality 运算符
Decimal 结构

返回一个值，该值指示 Decimal 的两个实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Boolean
public static bool operator !=(
    decimal d1,
    decimal d2
)
public:
static bool operator !=(
    Decimal d1,
    Decimal d2
)
static let inline (<>)
        d1:decimal *
        d2:decimal  : bool

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Boolean
如果 d1 和 d2 不相等，则为 true；否则为 false。

下面的代码示例使用 Inequality 运算符，将几个 Decimal 值同一个参考 Decimal 值进行比较。

' Example of the Decimal relational operators.
Imports System
Imports Microsoft.VisualBasic

Module DecRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare Decimal parameters, and display them with the results.
    Sub CompareDecimals( Left As Decimal, Right As Decimal, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )

        ' The op_Equality, op_GreaterThan, op_GreaterThanOrEqual,
        ' op_Inequality, op_LessThan, and op_LessThanOrEqual operators
        ' must be explicitly coded in Visual Basic. If binary =, >,
        ' >=, <>, <, or <= are used, the Compare method is called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Equality( Left, Right )", _
            Decimal.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThan( Left, Right )", _
            Decimal.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThanOrEqual( Left, Right )", _
            Decimal.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Inequality( Left, Right )", _
            Decimal.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThan( Left, Right )", _
            Decimal.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThanOrEqual( Left, Right )", _
            Decimal.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New Decimal( 123.456 )

        Console.WriteLine( _
            "This example of the Decimal relational operators " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several different Decimal values " & vbCrLf & _
            "and compares them with the following reference " & _
            "value." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left )

        ' Create objects to compare with a 2-hour Decimal.
        CompareDecimals( Left, New Decimal( 1.23456E+2 ), _
            "Decimal( 1.23456E+2 )" )
        CompareDecimals( Left, New Decimal( 123.4567 ), _
            "Decimal( 123.4567 )" )
        CompareDecimals( Left, New Decimal( 123.4553 ), _
            "Decimal( 123.4553 )" )
        CompareDecimals( Left, New Decimal( 123456000, 0, 0, False, 6 ), _
            "Decimal( 123456000, 0, 0, False, 6 )" )
    End Sub
End Module

' This example of the Decimal relational operators generates the
' following output. It creates several different Decimal values
' and compares them with the following reference value.
'
' Left: Decimal( 123.456 )                       123.456
'
' Right: Decimal( 1.23456E+2 )                   123.456
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4567 )                     123.4567
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   False
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             True
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4553 )                     123.4553
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          True
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      False
'
' Right: Decimal( 123456000, 0, 0, False, 6 )    123.456000
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True

// Example of the decimal relational operators.
using System;

class DecRelationalOpsDemo
{
    const string dataFmt = "{0,43}    {1}" ;

    // Compare decimal parameters, and display them with the results.
    static void CompareDecimals( decimal Left, decimal Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        decimal Left = new decimal( 123.456 );

        Console.WriteLine(
            "This example of the decimal relational operators " +
            "generates the \nfollowing output. It creates several " +
            "different decimal values \nand compares them with " +
            "the following reference value.\n" );
        Console.WriteLine( dataFmt,
            "Left: decimal( 123.456 )", Left );

        // Create objects to compare with a 2-hour decimal.
        CompareDecimals( Left, new decimal( 1.23456E+2 ),
            "decimal( 1.23456E+2 )" );
        CompareDecimals( Left, new decimal( 123.4567 ),
            "decimal( 123.4567 )" );
        CompareDecimals( Left, new decimal( 123.4553 ),
            "decimal( 123.4553 )" );
        CompareDecimals( Left, new decimal( 123456000, 0, 0, false, 6 ),
            "decimal( 123456000, 0, 0, false, 6 )" );
    }
}

/*
This example of the decimal relational operators generates the
following output. It creates several different decimal values
and compares them with the following reference value.

                   Left: decimal( 123.456 )    123.456

               Right: decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

// Example of the Decimal relational operators.
using namespace System;
#define dataFmt "{0,43}    {1}"

// Compare Decimal parameters, and display them with the results.
void CompareDecimals( Decimal Left, Decimal Right, String^ RightText )
{
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   Decimal Left = Decimal(123.456);
   Console::WriteLine( "This example of the Decimal relational operators "
   "generates the \nfollowing output. It creates several "
   "different Decimal values \nand compares them with "
   "the following reference value.\n" );
   Console::WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left );

   // Create objects to compare with a 2-hour Decimal.
   CompareDecimals( Left, Decimal(1.23456E+2), "Decimal( 1.23456E+2 )" );
   CompareDecimals( Left, Decimal(123.4567), "Decimal( 123.4567 )" );
   CompareDecimals( Left, Decimal(123.4553), "Decimal( 123.4553 )" );
   CompareDecimals( Left, Decimal(123456000,0,0,false,6), "Decimal( 123456000, 0, 0, false, 6 )" );
}

/*
This example of the Decimal relational operators generates the
following output. It creates several different Decimal values
and compares them with the following reference value.

                   Left: Decimal( 123.456 )    123.456

               Right: Decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: Decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: Decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: Decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Compare
Equals


Decimal ..::.LessThan 运算符

Decimal
.
.
::
.
LessThan 运算符
Decimal 结构

返回一个值，该值指示指定的 Decimal 是否小于另一个指定的 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator < ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Boolean
public static bool operator <(
    decimal d1,
    decimal d2
)
public:
static bool operator <(
    Decimal d1,
    Decimal d2
)
static let inline (<)
        d1:decimal *
        d2:decimal  : bool

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Boolean
如果 d1 小于 d2，则为 true；否则为 false。

下面的代码示例使用 Less Than 运算符，将几个 Decimal 值同一个参考 Decimal 值进行比较。

' Example of the Decimal relational operators.
Imports System
Imports Microsoft.VisualBasic

Module DecRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare Decimal parameters, and display them with the results.
    Sub CompareDecimals( Left As Decimal, Right As Decimal, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )

        ' The op_Equality, op_GreaterThan, op_GreaterThanOrEqual,
        ' op_Inequality, op_LessThan, and op_LessThanOrEqual operators
        ' must be explicitly coded in Visual Basic. If binary =, >,
        ' >=, <>, <, or <= are used, the Compare method is called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Equality( Left, Right )", _
            Decimal.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThan( Left, Right )", _
            Decimal.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThanOrEqual( Left, Right )", _
            Decimal.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Inequality( Left, Right )", _
            Decimal.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThan( Left, Right )", _
            Decimal.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThanOrEqual( Left, Right )", _
            Decimal.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New Decimal( 123.456 )

        Console.WriteLine( _
            "This example of the Decimal relational operators " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several different Decimal values " & vbCrLf & _
            "and compares them with the following reference " & _
            "value." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left )

        ' Create objects to compare with a 2-hour Decimal.
        CompareDecimals( Left, New Decimal( 1.23456E+2 ), _
            "Decimal( 1.23456E+2 )" )
        CompareDecimals( Left, New Decimal( 123.4567 ), _
            "Decimal( 123.4567 )" )
        CompareDecimals( Left, New Decimal( 123.4553 ), _
            "Decimal( 123.4553 )" )
        CompareDecimals( Left, New Decimal( 123456000, 0, 0, False, 6 ), _
            "Decimal( 123456000, 0, 0, False, 6 )" )
    End Sub
End Module

' This example of the Decimal relational operators generates the
' following output. It creates several different Decimal values
' and compares them with the following reference value.
'
' Left: Decimal( 123.456 )                       123.456
'
' Right: Decimal( 1.23456E+2 )                   123.456
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4567 )                     123.4567
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   False
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             True
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4553 )                     123.4553
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          True
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      False
'
' Right: Decimal( 123456000, 0, 0, False, 6 )    123.456000
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True

// Example of the decimal relational operators.
using System;

class DecRelationalOpsDemo
{
    const string dataFmt = "{0,43}    {1}" ;

    // Compare decimal parameters, and display them with the results.
    static void CompareDecimals( decimal Left, decimal Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        decimal Left = new decimal( 123.456 );

        Console.WriteLine(
            "This example of the decimal relational operators " +
            "generates the \nfollowing output. It creates several " +
            "different decimal values \nand compares them with " +
            "the following reference value.\n" );
        Console.WriteLine( dataFmt,
            "Left: decimal( 123.456 )", Left );

        // Create objects to compare with a 2-hour decimal.
        CompareDecimals( Left, new decimal( 1.23456E+2 ),
            "decimal( 1.23456E+2 )" );
        CompareDecimals( Left, new decimal( 123.4567 ),
            "decimal( 123.4567 )" );
        CompareDecimals( Left, new decimal( 123.4553 ),
            "decimal( 123.4553 )" );
        CompareDecimals( Left, new decimal( 123456000, 0, 0, false, 6 ),
            "decimal( 123456000, 0, 0, false, 6 )" );
    }
}

/*
This example of the decimal relational operators generates the
following output. It creates several different decimal values
and compares them with the following reference value.

                   Left: decimal( 123.456 )    123.456

               Right: decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

// Example of the Decimal relational operators.
using namespace System;
#define dataFmt "{0,43}    {1}"

// Compare Decimal parameters, and display them with the results.
void CompareDecimals( Decimal Left, Decimal Right, String^ RightText )
{
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   Decimal Left = Decimal(123.456);
   Console::WriteLine( "This example of the Decimal relational operators "
   "generates the \nfollowing output. It creates several "
   "different Decimal values \nand compares them with "
   "the following reference value.\n" );
   Console::WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left );

   // Create objects to compare with a 2-hour Decimal.
   CompareDecimals( Left, Decimal(1.23456E+2), "Decimal( 1.23456E+2 )" );
   CompareDecimals( Left, Decimal(123.4567), "Decimal( 123.4567 )" );
   CompareDecimals( Left, Decimal(123.4553), "Decimal( 123.4553 )" );
   CompareDecimals( Left, Decimal(123456000,0,0,false,6), "Decimal( 123456000, 0, 0, false, 6 )" );
}

/*
This example of the Decimal relational operators generates the
following output. It creates several different Decimal values
and compares them with the following reference value.

                   Left: Decimal( 123.456 )    123.456

               Right: Decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: Decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: Decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: Decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Compare


Decimal ..::.LessThanOrEqual 运算符

Decimal
.
.
::
.
LessThanOrEqual 运算符
Decimal 结构

返回一个值，该值指示指定的 Decimal 是小于还是等于另一个指定的 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <= ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Boolean
public static bool operator <=(
    decimal d1,
    decimal d2
)
public:
static bool operator <=(
    Decimal d1,
    Decimal d2
)
static let inline (<=)
        d1:decimal *
        d2:decimal  : bool

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Boolean
如果 d1 小于或等于 d2，则为 true；否则为 false。

下面的代码示例使用 Less Than or Equal 运算符，将几个 Decimal 值同一个参考 Decimal 值进行比较。

' Example of the Decimal relational operators.
Imports System
Imports Microsoft.VisualBasic

Module DecRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare Decimal parameters, and display them with the results.
    Sub CompareDecimals( Left As Decimal, Right As Decimal, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )

        ' The op_Equality, op_GreaterThan, op_GreaterThanOrEqual,
        ' op_Inequality, op_LessThan, and op_LessThanOrEqual operators
        ' must be explicitly coded in Visual Basic. If binary =, >,
        ' >=, <>, <, or <= are used, the Compare method is called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Equality( Left, Right )", _
            Decimal.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThan( Left, Right )", _
            Decimal.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_GreaterThanOrEqual( Left, Right )", _
            Decimal.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Inequality( Left, Right )", _
            Decimal.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThan( Left, Right )", _
            Decimal.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_LessThanOrEqual( Left, Right )", _
            Decimal.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New Decimal( 123.456 )

        Console.WriteLine( _
            "This example of the Decimal relational operators " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several different Decimal values " & vbCrLf & _
            "and compares them with the following reference " & _
            "value." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left )

        ' Create objects to compare with a 2-hour Decimal.
        CompareDecimals( Left, New Decimal( 1.23456E+2 ), _
            "Decimal( 1.23456E+2 )" )
        CompareDecimals( Left, New Decimal( 123.4567 ), _
            "Decimal( 123.4567 )" )
        CompareDecimals( Left, New Decimal( 123.4553 ), _
            "Decimal( 123.4553 )" )
        CompareDecimals( Left, New Decimal( 123456000, 0, 0, False, 6 ), _
            "Decimal( 123456000, 0, 0, False, 6 )" )
    End Sub
End Module

' This example of the Decimal relational operators generates the
' following output. It creates several different Decimal values
' and compares them with the following reference value.
'
' Left: Decimal( 123.456 )                       123.456
'
' Right: Decimal( 1.23456E+2 )                   123.456
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4567 )                     123.4567
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   False
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             True
' Decimal.op_LessThanOrEqual( Left, Right )      True
'
' Right: Decimal( 123.4553 )                     123.4553
' Decimal.op_Equality( Left, Right )             False
' Decimal.op_GreaterThan( Left, Right )          True
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           True
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      False
'
' Right: Decimal( 123456000, 0, 0, False, 6 )    123.456000
' Decimal.op_Equality( Left, Right )             True
' Decimal.op_GreaterThan( Left, Right )          False
' Decimal.op_GreaterThanOrEqual( Left, Right )   True
' Decimal.op_Inequality( Left, Right )           False
' Decimal.op_LessThan( Left, Right )             False
' Decimal.op_LessThanOrEqual( Left, Right )      True

// Example of the decimal relational operators.
using System;

class DecRelationalOpsDemo
{
    const string dataFmt = "{0,43}    {1}" ;

    // Compare decimal parameters, and display them with the results.
    static void CompareDecimals( decimal Left, decimal Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        decimal Left = new decimal( 123.456 );

        Console.WriteLine(
            "This example of the decimal relational operators " +
            "generates the \nfollowing output. It creates several " +
            "different decimal values \nand compares them with " +
            "the following reference value.\n" );
        Console.WriteLine( dataFmt,
            "Left: decimal( 123.456 )", Left );

        // Create objects to compare with a 2-hour decimal.
        CompareDecimals( Left, new decimal( 1.23456E+2 ),
            "decimal( 1.23456E+2 )" );
        CompareDecimals( Left, new decimal( 123.4567 ),
            "decimal( 123.4567 )" );
        CompareDecimals( Left, new decimal( 123.4553 ),
            "decimal( 123.4553 )" );
        CompareDecimals( Left, new decimal( 123456000, 0, 0, false, 6 ),
            "decimal( 123456000, 0, 0, false, 6 )" );
    }
}

/*
This example of the decimal relational operators generates the
following output. It creates several different decimal values
and compares them with the following reference value.

                   Left: decimal( 123.456 )    123.456

               Right: decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

// Example of the Decimal relational operators.
using namespace System;
#define dataFmt "{0,43}    {1}"

// Compare Decimal parameters, and display them with the results.
void CompareDecimals( Decimal Left, Decimal Right, String^ RightText )
{
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   Decimal Left = Decimal(123.456);
   Console::WriteLine( "This example of the Decimal relational operators "
   "generates the \nfollowing output. It creates several "
   "different Decimal values \nand compares them with "
   "the following reference value.\n" );
   Console::WriteLine( dataFmt, "Left: Decimal( 123.456 )", Left );

   // Create objects to compare with a 2-hour Decimal.
   CompareDecimals( Left, Decimal(1.23456E+2), "Decimal( 1.23456E+2 )" );
   CompareDecimals( Left, Decimal(123.4567), "Decimal( 123.4567 )" );
   CompareDecimals( Left, Decimal(123.4553), "Decimal( 123.4553 )" );
   CompareDecimals( Left, Decimal(123456000,0,0,false,6), "Decimal( 123456000, 0, 0, false, 6 )" );
}

/*
This example of the Decimal relational operators generates the
following output. It creates several different Decimal values
and compares them with the following reference value.

                   Left: Decimal( 123.456 )    123.456

               Right: Decimal( 1.23456E+2 )    123.456
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True

                 Right: Decimal( 123.4567 )    123.4567
                              Left == Right    False
                              Left >  Right    False
                              Left >= Right    False
                              Left != Right    True
                              Left <  Right    True
                              Left <= Right    True

                 Right: Decimal( 123.4553 )    123.4553
                              Left == Right    False
                              Left >  Right    True
                              Left >= Right    True
                              Left != Right    True
                              Left <  Right    False
                              Left <= Right    False

Right: Decimal( 123456000, 0, 0, false, 6 )    123.456000
                              Left == Right    True
                              Left >  Right    False
                              Left >= Right    True
                              Left != Right    False
                              Left <  Right    False
                              Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Compare


Decimal ..::.Modulus 运算符

Decimal
.
.
::
.
Modulus 运算符
Decimal 结构

返回两个指定 Decimal 值相除所得的余数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator Mod ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal operator %(
    decimal d1,
    decimal d2
)
public:
static Decimal operator %(
    Decimal d1,
    Decimal d2
)
static let inline (%)
        d1:decimal *
        d2:decimal  : decimal

参数

d1
类型： System Decimal
Decimal（被除数）。
d2
类型： System Decimal
Decimal（除数）。

返回值

类型： System Decimal
d1 除以 d2 所得的 Decimal 余数。
异常 | 条件
DivideByZeroException | d2 为 zero。
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的代码示例创建几对 Decimal 值，并使用 Modulus 运算符计算两个值相除所得到的余数。

' Example of the Decimal multiplication, division, and modulus
' operators.
Imports System
Imports Microsoft.VisualBasic

Module DecimalMulDivRemOpsDemo

    Const dataFmt As String = "{0,-38}{1,31}"

    ' Display Decimal parameters and their product, quotient, and
    ' remainder.
    Sub ShowDecimalProQuoRem( Left as Decimal, Right as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Left", Left )
        Console.WriteLine( dataFmt, "Decimal Right", Right )

        ' The op_Multiply, op_Division, and op_Modulus operators must
        ' be explicitly coded in Visual Basic. If binary *, /, or
        ' Mod are used, other methods are called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Multiply( Left, Right )", _
            Decimal.op_Multiply( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Division( Left, Right )", _
            Decimal.op_Division( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Modulus( Left, Right )", _
            Decimal.op_Modulus( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal multiplication, " & _
            "division, and modulus " & vbCrLf & "operators " & _
            "generates the following output. It displays the " & _
            "product, " & vbCrLf & "quotient, and remainder of " & _
            "several pairs of Decimal objects." )

        ' Create pairs of Decimal objects.
        ShowDecimalProQuoRem( 1000D, 7D )
        ShowDecimalProQuoRem( -1000D, 7D )
        ShowDecimalProQuoRem( _
            new Decimal( 1230000000, 0, 0, False, 7 ), _
            0.0012300D )
        ShowDecimalProQuoRem( 12345678900000000D, _
            0.0000000012345678D )
        ShowDecimalProQuoRem( 123456789.0123456789D, _
            123456789.1123456789D )
    End Sub
End Module

' This example of the Decimal multiplication, division, and modulus
' operators generates the following output. It displays the product,
' quotient, and remainder of several pairs of Decimal objects.
'
' Decimal Left                                                     1000
' Decimal Right                                                       7
' Decimal.op_Multiply( Left, Right )                               7000
' Decimal.op_Division( Left, Right )     142.85714285714285714285714286
' Decimal.op_Modulus( Left, Right )                                   6
'
' Decimal Left                                                    -1000
' Decimal Right                                                       7
' Decimal.op_Multiply( Left, Right )                              -7000
' Decimal.op_Division( Left, Right )    -142.85714285714285714285714286
' Decimal.op_Modulus( Left, Right )                                  -6
'
' Decimal Left                                              123.0000000
' Decimal Right                                                 0.00123
' Decimal.op_Multiply( Left, Right )                     0.151290000000
' Decimal.op_Division( Left, Right )                          100000.00
' Decimal.op_Modulus( Left, Right )                                   0
'
' Decimal Left                                        12345678900000000
' Decimal Right                                      0.0000000012345678
' Decimal.op_Multiply( Left, Right )          15241577.6390794200000000
' Decimal.op_Division( Left, Right )     10000000729000059778004901.796
' Decimal.op_Modulus( Left, Right )                      0.000000000983
'
' Decimal Left                                     123456789.0123456789
' Decimal Right                                    123456789.1123456789
' Decimal.op_Multiply( Left, Right )     15241578765584515.651425087878
' Decimal.op_Division( Left, Right )     0.9999999991899999933660999449
' Decimal.op_Modulus( Left, Right )                123456789.0123456789

// Example of the decimal multiplication, division, and modulus
// operators.
using System;

class DecimalMulDivRemOpsDemo
{
    const string dataFmt = "   {0,-18}{1,31}";

    // Display decimal parameters and their product, quotient, and
    // remainder.
    public static void ShowDecimalProQuoRem( decimal Left, decimal Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Left", Left );
        Console.WriteLine( dataFmt, "decimal Right", Right );
        Console.WriteLine( dataFmt, "Left * Right", Left * Right );
        Console.WriteLine( dataFmt, "Left / Right", Left / Right );
        Console.WriteLine( dataFmt, "Left % Right", Left % Right );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the decimal multiplication, division, " +
            "and modulus \noperators generates the following " +
            "output. It displays the product, \nquotient, and " +
            "remainder of several pairs of decimal objects." );

        // Create pairs of decimal objects.
        ShowDecimalProQuoRem( 1000M, 7M );
        ShowDecimalProQuoRem( -1000M, 7M );
        ShowDecimalProQuoRem(
            new decimal( 1230000000, 0, 0, false, 7 ), 0.0012300M );
        ShowDecimalProQuoRem( 12345678900000000M,
            0.0000000012345678M );
        ShowDecimalProQuoRem( 123456789.0123456789M,
            123456789.1123456789M );
    }
}

/*
This example of the decimal multiplication, division, and modulus
operators generates the following output. It displays the product,
quotient, and remainder of several pairs of decimal objects.

   decimal Left                                 1000
   decimal Right                                   7
   Left * Right                                 7000
   Left / Right       142.85714285714285714285714286
   Left % Right                                    6

   decimal Left                                -1000
   decimal Right                                   7
   Left * Right                                -7000
   Left / Right      -142.85714285714285714285714286
   Left % Right                                   -6

   decimal Left                          123.0000000
   decimal Right                           0.0012300
   Left * Right                     0.15129000000000
   Left / Right                               100000
   Left % Right                                    0

   decimal Left                    12345678900000000
   decimal Right                  0.0000000012345678
   Left * Right            15241577.6390794200000000
   Left / Right       10000000729000059778004901.796
   Left % Right                       0.000000000983

   decimal Left                 123456789.0123456789
   decimal Right                123456789.1123456789
   Left * Right       15241578765584515.651425087878
   Left / Right       0.9999999991899999933660999449
   Left % Right                 123456789.0123456789
*/

// Example of the Decimal multiplication, division, and modulus
// operators.
using namespace System;

// Display Decimal parameters and their product, quotient, and
// remainder.
void ShowDecimalProQuoRem( Decimal Left, Decimal Right )
{
   String^ dataFmt = "   {0,-18}{1,31}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Left", Left );
   Console::WriteLine( dataFmt, "Decimal Right", Right );
   Console::WriteLine( dataFmt, "Left * Right", Left * Right );
   Console::WriteLine( dataFmt, "Left / Right", Left / Right );
   Console::WriteLine( dataFmt, "Left % Right", Left % Right );
}

int main()
{
   Console::WriteLine( "This example of the Decimal multiplication, division, "
   "and modulus \noperators generates the following "
   "output. It displays the product, \nquotient, and "
   "remainder of several pairs of Decimal objects." );

   // Create pairs of Decimal objects.
   ShowDecimalProQuoRem( Decimal::Parse( "1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "-1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal(1230000000,0,0,false,7), Decimal::Parse( "0.0012300" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "12345678900000000" ), Decimal::Parse( "0.0000000012345678" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "123456789.0123456789" ), Decimal::Parse( "123456789.1123456789" ) );
}

/*
This example of the Decimal multiplication, division, and modulus
operators generates the following output. It displays the product,
quotient, and remainder of several pairs of Decimal objects.

   Decimal Left                                 1000
   Decimal Right                                   7
   Left * Right                                 7000
   Left / Right       142.85714285714285714285714286
   Left % Right                                    6

   Decimal Left                                -1000
   Decimal Right                                   7
   Left * Right                                -7000
   Left / Right      -142.85714285714285714285714286
   Left % Right                                   -6

   Decimal Left                          123.0000000
   Decimal Right                           0.0012300
   Left * Right                     0.15129000000000
   Left / Right                               100000
   Left % Right                                    0

   Decimal Left                    12345678900000000
   Decimal Right                  0.0000000012345678
   Left * Right            15241577.6390794200000000
   Left / Right       10000000729000059778004901.796
   Left % Right                       0.000000000983

   Decimal Left                 123456789.0123456789
   Decimal Right                123456789.1123456789
   Left * Right       15241578765584515.651425087878
   Left / Right       0.9999999991899999933660999449
   Left % Right                 123456789.0123456789
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Remainder


Decimal ..::.Multiply 运算符

Decimal
.
.
::
.
Multiply 运算符
Decimal 结构

两个指定的 Decimal 值相乘。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator * ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal operator *(
    decimal d1,
    decimal d2
)
public:
static Decimal operator *(
    Decimal d1,
    Decimal d2
)
static let inline (*)
        d1:decimal *
        d2:decimal  : decimal

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Decimal
d1 乘以 d2 的 Decimal 结果。
异常 | 条件
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的代码示例创建几对 Decimal 值，并使用 Multiplication 运算符计算它们的积。

' Example of the Decimal multiplication, division, and modulus
' operators.
Imports System
Imports Microsoft.VisualBasic

Module DecimalMulDivRemOpsDemo

    Const dataFmt As String = "{0,-38}{1,31}"

    ' Display Decimal parameters and their product, quotient, and
    ' remainder.
    Sub ShowDecimalProQuoRem( Left as Decimal, Right as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Left", Left )
        Console.WriteLine( dataFmt, "Decimal Right", Right )

        ' The op_Multiply, op_Division, and op_Modulus operators must
        ' be explicitly coded in Visual Basic. If binary *, /, or
        ' Mod are used, other methods are called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Multiply( Left, Right )", _
            Decimal.op_Multiply( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Division( Left, Right )", _
            Decimal.op_Division( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Modulus( Left, Right )", _
            Decimal.op_Modulus( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal multiplication, " & _
            "division, and modulus " & vbCrLf & "operators " & _
            "generates the following output. It displays the " & _
            "product, " & vbCrLf & "quotient, and remainder of " & _
            "several pairs of Decimal objects." )

        ' Create pairs of Decimal objects.
        ShowDecimalProQuoRem( 1000D, 7D )
        ShowDecimalProQuoRem( -1000D, 7D )
        ShowDecimalProQuoRem( _
            new Decimal( 1230000000, 0, 0, False, 7 ), _
            0.0012300D )
        ShowDecimalProQuoRem( 12345678900000000D, _
            0.0000000012345678D )
        ShowDecimalProQuoRem( 123456789.0123456789D, _
            123456789.1123456789D )
    End Sub
End Module

' This example of the Decimal multiplication, division, and modulus
' operators generates the following output. It displays the product,
' quotient, and remainder of several pairs of Decimal objects.
'
' Decimal Left                                                     1000
' Decimal Right                                                       7
' Decimal.op_Multiply( Left, Right )                               7000
' Decimal.op_Division( Left, Right )     142.85714285714285714285714286
' Decimal.op_Modulus( Left, Right )                                   6
'
' Decimal Left                                                    -1000
' Decimal Right                                                       7
' Decimal.op_Multiply( Left, Right )                              -7000
' Decimal.op_Division( Left, Right )    -142.85714285714285714285714286
' Decimal.op_Modulus( Left, Right )                                  -6
'
' Decimal Left                                              123.0000000
' Decimal Right                                                 0.00123
' Decimal.op_Multiply( Left, Right )                     0.151290000000
' Decimal.op_Division( Left, Right )                          100000.00
' Decimal.op_Modulus( Left, Right )                                   0
'
' Decimal Left                                        12345678900000000
' Decimal Right                                      0.0000000012345678
' Decimal.op_Multiply( Left, Right )          15241577.6390794200000000
' Decimal.op_Division( Left, Right )     10000000729000059778004901.796
' Decimal.op_Modulus( Left, Right )                      0.000000000983
'
' Decimal Left                                     123456789.0123456789
' Decimal Right                                    123456789.1123456789
' Decimal.op_Multiply( Left, Right )     15241578765584515.651425087878
' Decimal.op_Division( Left, Right )     0.9999999991899999933660999449
' Decimal.op_Modulus( Left, Right )                123456789.0123456789

// Example of the decimal multiplication, division, and modulus
// operators.
using System;

class DecimalMulDivRemOpsDemo
{
    const string dataFmt = "   {0,-18}{1,31}";

    // Display decimal parameters and their product, quotient, and
    // remainder.
    public static void ShowDecimalProQuoRem( decimal Left, decimal Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Left", Left );
        Console.WriteLine( dataFmt, "decimal Right", Right );
        Console.WriteLine( dataFmt, "Left * Right", Left * Right );
        Console.WriteLine( dataFmt, "Left / Right", Left / Right );
        Console.WriteLine( dataFmt, "Left % Right", Left % Right );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the decimal multiplication, division, " +
            "and modulus \noperators generates the following " +
            "output. It displays the product, \nquotient, and " +
            "remainder of several pairs of decimal objects." );

        // Create pairs of decimal objects.
        ShowDecimalProQuoRem( 1000M, 7M );
        ShowDecimalProQuoRem( -1000M, 7M );
        ShowDecimalProQuoRem(
            new decimal( 1230000000, 0, 0, false, 7 ), 0.0012300M );
        ShowDecimalProQuoRem( 12345678900000000M,
            0.0000000012345678M );
        ShowDecimalProQuoRem( 123456789.0123456789M,
            123456789.1123456789M );
    }
}

/*
This example of the decimal multiplication, division, and modulus
operators generates the following output. It displays the product,
quotient, and remainder of several pairs of decimal objects.

   decimal Left                                 1000
   decimal Right                                   7
   Left * Right                                 7000
   Left / Right       142.85714285714285714285714286
   Left % Right                                    6

   decimal Left                                -1000
   decimal Right                                   7
   Left * Right                                -7000
   Left / Right      -142.85714285714285714285714286
   Left % Right                                   -6

   decimal Left                          123.0000000
   decimal Right                           0.0012300
   Left * Right                     0.15129000000000
   Left / Right                               100000
   Left % Right                                    0

   decimal Left                    12345678900000000
   decimal Right                  0.0000000012345678
   Left * Right            15241577.6390794200000000
   Left / Right       10000000729000059778004901.796
   Left % Right                       0.000000000983

   decimal Left                 123456789.0123456789
   decimal Right                123456789.1123456789
   Left * Right       15241578765584515.651425087878
   Left / Right       0.9999999991899999933660999449
   Left % Right                 123456789.0123456789
*/

// Example of the Decimal multiplication, division, and modulus
// operators.
using namespace System;

// Display Decimal parameters and their product, quotient, and
// remainder.
void ShowDecimalProQuoRem( Decimal Left, Decimal Right )
{
   String^ dataFmt = "   {0,-18}{1,31}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Left", Left );
   Console::WriteLine( dataFmt, "Decimal Right", Right );
   Console::WriteLine( dataFmt, "Left * Right", Left * Right );
   Console::WriteLine( dataFmt, "Left / Right", Left / Right );
   Console::WriteLine( dataFmt, "Left % Right", Left % Right );
}

int main()
{
   Console::WriteLine( "This example of the Decimal multiplication, division, "
   "and modulus \noperators generates the following "
   "output. It displays the product, \nquotient, and "
   "remainder of several pairs of Decimal objects." );

   // Create pairs of Decimal objects.
   ShowDecimalProQuoRem( Decimal::Parse( "1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "-1000" ), Decimal::Parse( "7" ) );
   ShowDecimalProQuoRem( Decimal(1230000000,0,0,false,7), Decimal::Parse( "0.0012300" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "12345678900000000" ), Decimal::Parse( "0.0000000012345678" ) );
   ShowDecimalProQuoRem( Decimal::Parse( "123456789.0123456789" ), Decimal::Parse( "123456789.1123456789" ) );
}

/*
This example of the Decimal multiplication, division, and modulus
operators generates the following output. It displays the product,
quotient, and remainder of several pairs of Decimal objects.

   Decimal Left                                 1000
   Decimal Right                                   7
   Left * Right                                 7000
   Left / Right       142.85714285714285714285714286
   Left % Right                                    6

   Decimal Left                                -1000
   Decimal Right                                   7
   Left * Right                                -7000
   Left / Right      -142.85714285714285714285714286
   Left % Right                                   -6

   Decimal Left                          123.0000000
   Decimal Right                           0.0012300
   Left * Right                     0.15129000000000
   Left / Right                               100000
   Left % Right                                    0

   Decimal Left                    12345678900000000
   Decimal Right                  0.0000000012345678
   Left * Right            15241577.6390794200000000
   Left / Right       10000000729000059778004901.796
   Left % Right                       0.000000000983

   Decimal Left                 123456789.0123456789
   Decimal Right                123456789.1123456789
   Left * Right       15241578765584515.651425087878
   Left / Right       0.9999999991899999933660999449
   Left % Right                 123456789.0123456789
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Multiply


Decimal ..::.Subtraction 运算符

Decimal
.
.
::
.
Subtraction 运算符
Decimal 结构

两个指定的 Decimal 值相减。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    d1 As Decimal, _
    d2 As Decimal _
) As Decimal
public static decimal operator -(
    decimal d1,
    decimal d2
)
public:
static Decimal operator -(
    Decimal d1,
    Decimal d2
)
static let inline (-)
        d1:decimal *
        d2:decimal  : decimal

参数

d1
类型： System Decimal
Decimal。
d2
类型： System Decimal
Decimal。

返回值

类型： System Decimal
从 d1 减去 d2 所得的 Decimal 结果。
异常 | 条件
OverflowException | 返回值小于 MinValue 或大于 MaxValue。

下面的代码示例创建几对 Decimal 值，并使用 Subtraction 运算符计算它们的差。

' Example of the Decimal addition and subtraction operators.
Imports System
Imports Microsoft.VisualBasic

Module DecimalAddSubOpsDemo

    Const dataFmt As String = "{0,-38}{1,31}"

    ' Display Decimal parameters and their sum and difference.
    Sub ShowDecimalSumDiff( Left as Decimal, Right as Decimal )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Decimal Left", Left )
        Console.WriteLine( dataFmt, "Decimal Right", Right )

        ' The op_Addition and op_Subtraction operators must be
        ' explicitely coded in Visual Basic. If binary + or - are
        ' used, other methods are called.
        Console.WriteLine( dataFmt, _
            "Decimal.op_Addition( Left, Right )", _
            Decimal.op_Addition( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "Decimal.op_Subtraction( Left, Right )", _
            Decimal.op_Subtraction( Left, Right ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal addition and " & _
            "subtraction operators " & vbCrLf & "generates the " & _
            "following output. It displays the sum and " & vbCrLf & _
            "difference of several pairs of Decimal objects." )

        ' Create pairs of Decimal objects.
        ShowDecimalSumDiff( _
            new Decimal( 1230000000, 0, 0, False, 7 ), _
            0.0012300D )
        ShowDecimalSumDiff( 123.456789D, 0.006789D )
        ShowDecimalSumDiff( 12345678900000000D, _
            0.00000000123456789D )
        ShowDecimalSumDiff( 123456789.0123456789D, _
            123456789.1123456789D )
    End Sub
End Module

' This example of the Decimal addition and subtraction operators
' generates the following output. It displays the sum and
' difference of several pairs of Decimal objects.
'
' Decimal Left                                              123.0000000
' Decimal Right                                                 0.00123
' Decimal.op_Addition( Left, Right )                        123.0012300
' Decimal.op_Subtraction( Left, Right )                     122.9987700
'
' Decimal Left                                               123.456789
' Decimal Right                                                0.006789
' Decimal.op_Addition( Left, Right )                         123.463578
' Decimal.op_Subtraction( Left, Right )                      123.450000
'
' Decimal Left                                        12345678900000000
' Decimal Right                                     0.00000000123456789
' Decimal.op_Addition( Left, Right )     12345678900000000.000000001235
' Decimal.op_Subtraction( Left, Right )  12345678899999999.999999998765
'
' Decimal Left                                     123456789.0123456789
' Decimal Right                                    123456789.1123456789
' Decimal.op_Addition( Left, Right )               246913578.1246913578
' Decimal.op_Subtraction( Left, Right )                   -0.1000000000

// Example of the decimal addition and subtraction operators.
using System;

class DecimalAddSubOpsDemo
{
    const string dataFmt = "   {0,-18}{1,31}" ;

    // Display decimal parameters and their sum and difference.
    static void ShowDecimalSumDiff( decimal Left, decimal Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "decimal Left", Left );
        Console.WriteLine( dataFmt, "decimal Right", Right );
        Console.WriteLine( dataFmt, "Left + Right",
            Left + Right );
        Console.WriteLine( dataFmt, "Left - Right",
            Left - Right );
    }

    static void Main( )
    {
        Console.WriteLine( "This example of the decimal " +
            "addition and subtraction operators \ngenerates the " +
            "following output. It displays the sum and \n" +
            "difference of several pairs of decimal objects."  );

        // Create pairs of decimal objects.
        ShowDecimalSumDiff(
            new decimal( 1230000000, 0, 0, false, 7 ),
            0.0012300M );
        ShowDecimalSumDiff( 123.456789M, 0.006789M );
        ShowDecimalSumDiff( 12345678900000000M,
            0.00000000123456789M );
        ShowDecimalSumDiff( 123456789.0123456789M,
            123456789.1123456789M );
    }
}

/*
This example of the decimal addition and subtraction operators
generates the following output. It displays the sum and
difference of several pairs of decimal objects.

   decimal Left                          123.0000000
   decimal Right                           0.0012300
   Left + Right                          123.0012300
   Left - Right                          122.9987700

   decimal Left                           123.456789
   decimal Right                            0.006789
   Left + Right                           123.463578
   Left - Right                           123.450000

   decimal Left                    12345678900000000
   decimal Right                 0.00000000123456789
   Left + Right       12345678900000000.000000001235
   Left - Right       12345678899999999.999999998765

   decimal Left                 123456789.0123456789
   decimal Right                123456789.1123456789
   Left + Right                 246913578.1246913578
   Left - Right                        -0.1000000000
*/

// Example of the Decimal addition and subtraction operators.
using namespace System;

// Display Decimal parameters and their sum and difference.
void ShowDecimalSumDiff( Decimal Left, Decimal Right )
{
   String^ dataFmt = "   {0,-18}{1,31}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "Decimal Left", Left );
   Console::WriteLine( dataFmt, "Decimal Right", Right );
   Console::WriteLine( dataFmt, "Left + Right", Left + Right );
   Console::WriteLine( dataFmt, "Left - Right", Left - Right );
}

int main()
{
   Console::WriteLine( "This example of the Decimal "
   "addition and subtraction operators \ngenerates the "
   "following output. It displays the sum and \n"
   "difference of several pairs of Decimal objects." );

   // Create pairs of Decimal objects.
   ShowDecimalSumDiff( Decimal(1230000000,0,0,false,7), Decimal::Parse( "0.0012300" ) );
   ShowDecimalSumDiff( Decimal::Parse( "123.456789" ), Decimal::Parse( "0.006789" ) );
   ShowDecimalSumDiff( Decimal::Parse( "12345678900000000" ), Decimal::Parse( "0.00000000123456789" ) );
   ShowDecimalSumDiff( Decimal::Parse( "123456789.0123456789" ), Decimal::Parse( "123456789.1123456789" ) );
}

/*
This example of the Decimal addition and subtraction operators
generates the following output. It displays the sum and
difference of several pairs of Decimal objects.

   Decimal Left                          123.0000000
   Decimal Right                           0.0012300
   Left + Right                          123.0012300
   Left - Right                          122.9987700

   Decimal Left                           123.456789
   Decimal Right                            0.006789
   Left + Right                           123.463578
   Left - Right                           123.450000

   Decimal Left                    12345678900000000
   Decimal Right                 0.00000000123456789
   Left + Right       12345678900000000.000000001235
   Left - Right       12345678899999999.999999998765

   Decimal Left                 123456789.0123456789
   Decimal Right                123456789.1123456789
   Left + Right                 246913578.1246913578
   Left - Right                        -0.1000000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Subtract


Decimal ..::.UnaryNegation 运算符

Decimal
.
.
::
.
UnaryNegation 运算符
Decimal 结构

对指定 Decimal 操作数的值求反。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    d As Decimal _
) As Decimal
public static decimal operator -(
    decimal d
)
public:
static Decimal operator -(
    Decimal d
)
static let inline (-)
        d:decimal  : decimal

参数

d
类型： System Decimal
Decimal 操作数。

返回值

类型： System Decimal
d 乘以负一 (-1) 的结果。

下面的代码示例对几个 Decimal 值应用 Unary Negation 运算符。

' Example of the Decimal increment, decrement, unary negation, and
' unary plus operators.
Imports System
Imports Microsoft.VisualBasic

Module DecIncrDecrUnaryDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Display the argument and the incremented and decremented values.
    Sub DecIncrDecrUnary( argument as Decimal )

        Dim toBeIncr As Decimal = argument
        Dim toBeDecr As Decimal = argument

        Console.WriteLine( "{0,-36}{1}", "Decimal argument: ", _
            argument )

        ' The op_Increment and op_Decrement operators must be
        ' explicitly coded in Visual Basic.

        ' Catch the exception if the increment operator throws one.
        Console.Write( "{0,-36}", "Decimal.op_Increment( argument )" )
        Try
            toBeIncr = Decimal.op_Increment( toBeIncr )
            Console.WriteLine( "{0}", toBeIncr )
        Catch ex As Exception
            Console.WriteLine( "{0}", GetExceptionType( ex ) )
        End Try

        ' Catch the exception if the decrement operator throws one.
        Console.Write( "{0,-36}", "Decimal.op_Decrement( argument )" )
        Try
            toBeDecr = Decimal.op_Decrement( toBeDecr )
            Console.WriteLine( "{0}", toBeDecr )
        Catch ex As Exception
            Console.WriteLine( "{0}", GetExceptionType( ex ) )
        End Try

        Console.WriteLine( )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal increment, decrement, " & _
            "unary negation, " & vbCrLf & "and unary plus " & _
            "operators generates the following output. It " & vbCrLf & _
            "displays the results of the operators on several " & _
            "Decimal values." & vbCrLf  )

        ' Create objects to compare with the reference.
        DecIncrDecrUnary( 0.000000123D )
        DecIncrDecrUnary( New Decimal( 123000000, 0, 0, false, 9 ) )

        ' The op_UnaryNegation and op_UnaryPlus operators must be
        ' explicitly coded in Visual Basic. If unary + or - is used,
        ' other methods are called.
        DecIncrDecrUnary( Decimal.op_UnaryNegation( _
            New Decimal( 123000000, 0, 0, false, 9 ) ) )
        DecIncrDecrUnary( Decimal.op_UnaryPlus( Decimal.MaxValue ) )
        DecIncrDecrUnary( Decimal.op_UnaryNegation( Decimal.MaxValue ) )
        DecIncrDecrUnary( Decimal.op_UnaryPlus( _
            7.5000000000000000000000000001D ) )
    End Sub
End Module

' This example of the Decimal increment, decrement, unary negation,
' and unary plus operators generates the following output. It
' displays the results of the operators on several Decimal values.
'
' Decimal argument:                   0.000000123
' Decimal.op_Increment( argument )    1.000000123
' Decimal.op_Decrement( argument )    -0.999999877
'
' Decimal argument:                   0.123000000
' Decimal.op_Increment( argument )    1.123000000
' Decimal.op_Decrement( argument )    -0.877000000
'
' Decimal argument:                   -0.123000000
' Decimal.op_Increment( argument )    0.877000000
' Decimal.op_Decrement( argument )    -1.123000000
'
' Decimal argument:                   79228162514264337593543950335
' Decimal.op_Increment( argument )    OverflowException
' Decimal.op_Decrement( argument )    79228162514264337593543950334
'
' Decimal argument:                   -79228162514264337593543950335
' Decimal.op_Increment( argument )    -79228162514264337593543950334
' Decimal.op_Decrement( argument )    OverflowException
'
' Decimal argument:                   7.5000000000000000000000000001
' Decimal.op_Increment( argument )    8.500000000000000000000000000
' Decimal.op_Decrement( argument )    6.5000000000000000000000000001

// Example of the decimal increment, decrement, unary negation, and
// unary plus operators.
using System;

class DecIncrDecrUnaryDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Display the argument and the incremented and decremented values.
    public static void DecIncrDecrUnary( decimal argument )
    {
        decimal toBeIncr = argument;
        decimal toBeDecr = argument;

        Console.WriteLine( "{0,-26}{1}", "decimal argument: ",
            argument );

        // Catch the exception if the increment operator throws one.
        Console.Write( "{0,-26}", "argument ++" );
        try
        {
            toBeIncr ++;
            Console.WriteLine( "{0}", toBeIncr );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}", GetExceptionType( ex ) );
        }

        // Catch the exception if the decrement operator throws one.
        Console.Write( "{0,-26}", "argument --" );
        try
        {
            toBeDecr --;
            Console.WriteLine( "{0}", toBeDecr );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}", GetExceptionType( ex ) );
        }

        Console.WriteLine( );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the decimal increment, " +
            "decrement, unary negation, \nand unary plus operators " +
            "generates the following output. It \ndisplays the " +
            "results of the operators on several decimal values.\n" );

        // Create objects to compare with the reference.
        DecIncrDecrUnary( 0.000000123M );
        DecIncrDecrUnary( new decimal( 123000000, 0, 0, false, 9 ) );
        DecIncrDecrUnary( - new decimal( 123000000, 0, 0, false, 9 ) );
        DecIncrDecrUnary( + decimal.MaxValue );
        DecIncrDecrUnary( - decimal.MaxValue );
        DecIncrDecrUnary( + 7.5000000000000000000000000001M );
    }
}

/*
This example of the decimal increment, decrement, unary negation,
and unary plus operators generates the following output. It
displays the results of the operators on several decimal values.

decimal argument:         0.000000123
argument ++               1.000000123
argument --               -0.999999877

decimal argument:         0.123000000
argument ++               1.123000000
argument --               -0.877000000

decimal argument:         -0.123000000
argument ++               0.877000000
argument --               -1.123000000

decimal argument:         79228162514264337593543950335
argument ++               OverflowException
argument --               79228162514264337593543950334

decimal argument:         -79228162514264337593543950335
argument ++               -79228162514264337593543950334
argument --               OverflowException

decimal argument:         7.5000000000000000000000000001
argument ++               8.500000000000000000000000000
argument --               6.5000000000000000000000000001
*/

// Example of the Decimal increment, decrement, unary negation, and
// unary plus operators.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Display the argument and the incremented and decremented values.
void DecIncrDecrUnary( Decimal argument )
{
   Decimal toBeIncr = argument;
   Decimal toBeDecr = argument;
   Console::WriteLine( "{0,-26}{1}", "Decimal argument: ", argument );

   // Catch the exception if the increment operator throws one.
   Console::Write( "{0,-26}", "argument ++" );
   try
   {
      toBeIncr++;
      Console::WriteLine( "{0}", toBeIncr );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}", GetExceptionType( ex ) );
   }

   // Catch the exception if the decrement operator throws one.
   Console::Write( "{0,-26}", "argument --" );
   try
   {
      toBeDecr--;
      Console::WriteLine( "{0}", toBeDecr );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}", GetExceptionType( ex ) );
   }

   Console::WriteLine();
}

int main()
{
   Console::WriteLine( "This example of the Decimal increment, "
   "decrement, unary negation, \nand unary plus operators "
   "generates the following output. It \ndisplays the "
   "results of the operators on several Decimal values.\n" );

   // Create objects to compare with the reference.
   DecIncrDecrUnary( Decimal::Parse( "0.000000123" ) );
   DecIncrDecrUnary( Decimal(123000000,0,0,false,9) );
   DecIncrDecrUnary(  -Decimal(123000000,0,0,false,9) );
   DecIncrDecrUnary(  +Decimal::MaxValue );
   DecIncrDecrUnary(  -Decimal::MaxValue );
   DecIncrDecrUnary(  +Decimal::Parse( "7.5000000000000000000000000001" ) );
}

/*
This example of the Decimal increment, decrement, unary negation,
and unary plus operators generates the following output. It
displays the results of the operators on several Decimal values.

Decimal argument:         0.000000123
argument ++               1.000000123
argument --               -0.999999877

Decimal argument:         0.123000000
argument ++               1.123000000
argument --               -0.877000000

Decimal argument:         -0.123000000
argument ++               0.877000000
argument --               -1.123000000

Decimal argument:         79228162514264337593543950335
argument ++               OverflowException
argument --               79228162514264337593543950334

Decimal argument:         -79228162514264337593543950335
argument ++               -79228162514264337593543950334
argument --               OverflowException

Decimal argument:         7.5000000000000000000000000001
argument ++               8.500000000000000000000000000
argument --               6.5000000000000000000000000001
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间
Negate


Decimal ..::.UnaryPlus 运算符

Decimal
.
.
::
.
UnaryPlus 运算符
Decimal 结构

返回 Decimal 操作数的值（操作数符号不变）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator + ( _
    d As Decimal _
) As Decimal
public static decimal operator +(
    decimal d
)
public:
static Decimal operator +(
    Decimal d
)
static let inline (+)
        d:decimal  : decimal

参数

d
类型： System Decimal
Decimal 操作数。

返回值

类型： System Decimal
操作数 d 的值。

下面的代码示例对几个 Decimal 值应用 Unary Plus 运算符。

' Example of the Decimal increment, decrement, unary negation, and
' unary plus operators.
Imports System
Imports Microsoft.VisualBasic

Module DecIncrDecrUnaryDemo

    ' Get the exception type name; remove the namespace prefix.
    Function GetExceptionType( ex As Exception ) As String

        Dim exceptionType   As String = ex.GetType( ).ToString( )
        Return exceptionType.Substring( _
            exceptionType.LastIndexOf( "."c ) + 1 )
    End Function

    ' Display the argument and the incremented and decremented values.
    Sub DecIncrDecrUnary( argument as Decimal )

        Dim toBeIncr As Decimal = argument
        Dim toBeDecr As Decimal = argument

        Console.WriteLine( "{0,-36}{1}", "Decimal argument: ", _
            argument )

        ' The op_Increment and op_Decrement operators must be
        ' explicitly coded in Visual Basic.

        ' Catch the exception if the increment operator throws one.
        Console.Write( "{0,-36}", "Decimal.op_Increment( argument )" )
        Try
            toBeIncr = Decimal.op_Increment( toBeIncr )
            Console.WriteLine( "{0}", toBeIncr )
        Catch ex As Exception
            Console.WriteLine( "{0}", GetExceptionType( ex ) )
        End Try

        ' Catch the exception if the decrement operator throws one.
        Console.Write( "{0,-36}", "Decimal.op_Decrement( argument )" )
        Try
            toBeDecr = Decimal.op_Decrement( toBeDecr )
            Console.WriteLine( "{0}", toBeDecr )
        Catch ex As Exception
            Console.WriteLine( "{0}", GetExceptionType( ex ) )
        End Try

        Console.WriteLine( )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Decimal increment, decrement, " & _
            "unary negation, " & vbCrLf & "and unary plus " & _
            "operators generates the following output. It " & vbCrLf & _
            "displays the results of the operators on several " & _
            "Decimal values." & vbCrLf  )

        ' Create objects to compare with the reference.
        DecIncrDecrUnary( 0.000000123D )
        DecIncrDecrUnary( New Decimal( 123000000, 0, 0, false, 9 ) )

        ' The op_UnaryNegation and op_UnaryPlus operators must be
        ' explicitly coded in Visual Basic. If unary + or - is used,
        ' other methods are called.
        DecIncrDecrUnary( Decimal.op_UnaryNegation( _
            New Decimal( 123000000, 0, 0, false, 9 ) ) )
        DecIncrDecrUnary( Decimal.op_UnaryPlus( Decimal.MaxValue ) )
        DecIncrDecrUnary( Decimal.op_UnaryNegation( Decimal.MaxValue ) )
        DecIncrDecrUnary( Decimal.op_UnaryPlus( _
            7.5000000000000000000000000001D ) )
    End Sub
End Module

' This example of the Decimal increment, decrement, unary negation,
' and unary plus operators generates the following output. It
' displays the results of the operators on several Decimal values.
'
' Decimal argument:                   0.000000123
' Decimal.op_Increment( argument )    1.000000123
' Decimal.op_Decrement( argument )    -0.999999877
'
' Decimal argument:                   0.123000000
' Decimal.op_Increment( argument )    1.123000000
' Decimal.op_Decrement( argument )    -0.877000000
'
' Decimal argument:                   -0.123000000
' Decimal.op_Increment( argument )    0.877000000
' Decimal.op_Decrement( argument )    -1.123000000
'
' Decimal argument:                   79228162514264337593543950335
' Decimal.op_Increment( argument )    OverflowException
' Decimal.op_Decrement( argument )    79228162514264337593543950334
'
' Decimal argument:                   -79228162514264337593543950335
' Decimal.op_Increment( argument )    -79228162514264337593543950334
' Decimal.op_Decrement( argument )    OverflowException
'
' Decimal argument:                   7.5000000000000000000000000001
' Decimal.op_Increment( argument )    8.500000000000000000000000000
' Decimal.op_Decrement( argument )    6.5000000000000000000000000001

// Example of the decimal increment, decrement, unary negation, and
// unary plus operators.
using System;

class DecIncrDecrUnaryDemo
{
    // Get the exception type name; remove the namespace prefix.
    public static string GetExceptionType( Exception ex )
    {
        string exceptionType = ex.GetType( ).ToString( );
        return exceptionType.Substring(
            exceptionType.LastIndexOf( '.' ) + 1 );
    }

    // Display the argument and the incremented and decremented values.
    public static void DecIncrDecrUnary( decimal argument )
    {
        decimal toBeIncr = argument;
        decimal toBeDecr = argument;

        Console.WriteLine( "{0,-26}{1}", "decimal argument: ",
            argument );

        // Catch the exception if the increment operator throws one.
        Console.Write( "{0,-26}", "argument ++" );
        try
        {
            toBeIncr ++;
            Console.WriteLine( "{0}", toBeIncr );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}", GetExceptionType( ex ) );
        }

        // Catch the exception if the decrement operator throws one.
        Console.Write( "{0,-26}", "argument --" );
        try
        {
            toBeDecr --;
            Console.WriteLine( "{0}", toBeDecr );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "{0}", GetExceptionType( ex ) );
        }

        Console.WriteLine( );
    }

    public static void Main( )
    {
        Console.WriteLine( "This example of the decimal increment, " +
            "decrement, unary negation, \nand unary plus operators " +
            "generates the following output. It \ndisplays the " +
            "results of the operators on several decimal values.\n" );

        // Create objects to compare with the reference.
        DecIncrDecrUnary( 0.000000123M );
        DecIncrDecrUnary( new decimal( 123000000, 0, 0, false, 9 ) );
        DecIncrDecrUnary( - new decimal( 123000000, 0, 0, false, 9 ) );
        DecIncrDecrUnary( + decimal.MaxValue );
        DecIncrDecrUnary( - decimal.MaxValue );
        DecIncrDecrUnary( + 7.5000000000000000000000000001M );
    }
}

/*
This example of the decimal increment, decrement, unary negation,
and unary plus operators generates the following output. It
displays the results of the operators on several decimal values.

decimal argument:         0.000000123
argument ++               1.000000123
argument --               -0.999999877

decimal argument:         0.123000000
argument ++               1.123000000
argument --               -0.877000000

decimal argument:         -0.123000000
argument ++               0.877000000
argument --               -1.123000000

decimal argument:         79228162514264337593543950335
argument ++               OverflowException
argument --               79228162514264337593543950334

decimal argument:         -79228162514264337593543950335
argument ++               -79228162514264337593543950334
argument --               OverflowException

decimal argument:         7.5000000000000000000000000001
argument ++               8.500000000000000000000000000
argument --               6.5000000000000000000000000001
*/

// Example of the Decimal increment, decrement, unary negation, and
// unary plus operators.
using namespace System;

// Get the exception type name; remove the namespace prefix.
String^ GetExceptionType( Exception^ ex )
{
   String^ exceptionType = ex->GetType()->ToString();
   return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

// Display the argument and the incremented and decremented values.
void DecIncrDecrUnary( Decimal argument )
{
   Decimal toBeIncr = argument;
   Decimal toBeDecr = argument;
   Console::WriteLine( "{0,-26}{1}", "Decimal argument: ", argument );

   // Catch the exception if the increment operator throws one.
   Console::Write( "{0,-26}", "argument ++" );
   try
   {
      toBeIncr++;
      Console::WriteLine( "{0}", toBeIncr );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}", GetExceptionType( ex ) );
   }

   // Catch the exception if the decrement operator throws one.
   Console::Write( "{0,-26}", "argument --" );
   try
   {
      toBeDecr--;
      Console::WriteLine( "{0}", toBeDecr );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "{0}", GetExceptionType( ex ) );
   }

   Console::WriteLine();
}

int main()
{
   Console::WriteLine( "This example of the Decimal increment, "
   "decrement, unary negation, \nand unary plus operators "
   "generates the following output. It \ndisplays the "
   "results of the operators on several Decimal values.\n" );

   // Create objects to compare with the reference.
   DecIncrDecrUnary( Decimal::Parse( "0.000000123" ) );
   DecIncrDecrUnary( Decimal(123000000,0,0,false,9) );
   DecIncrDecrUnary(  -Decimal(123000000,0,0,false,9) );
   DecIncrDecrUnary(  +Decimal::MaxValue );
   DecIncrDecrUnary(  -Decimal::MaxValue );
   DecIncrDecrUnary(  +Decimal::Parse( "7.5000000000000000000000000001" ) );
}

/*
This example of the Decimal increment, decrement, unary negation,
and unary plus operators generates the following output. It
displays the results of the operators on several Decimal values.

Decimal argument:         0.000000123
argument ++               1.000000123
argument --               -0.999999877

Decimal argument:         0.123000000
argument ++               1.123000000
argument --               -0.877000000

Decimal argument:         -0.123000000
argument ++               0.877000000
argument --               -1.123000000

Decimal argument:         79228162514264337593543950335
argument ++               OverflowException
argument --               79228162514264337593543950334

Decimal argument:         -79228162514264337593543950335
argument ++               -79228162514264337593543950334
argument --               OverflowException

Decimal argument:         7.5000000000000000000000000001
argument ++               8.500000000000000000000000000
argument --               6.5000000000000000000000000001
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Decimal 结构
Decimal 成员
System 命名空间


Delegate 类

Delegate 类
成员

表示委托，委托是一种数据结构，它引用静态方法或引用类实例及该类的实例方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ClassInterfaceAttribute(ClassInterfaceType.AutoDual)> _
<ComVisibleAttribute(True)> _
Public MustInherit Class Delegate _
    Implements ICloneable, ISerializable
[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
[ComVisibleAttribute(true)]
public abstract class Delegate : ICloneable,
    ISerializable
[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType::AutoDual)]
[ComVisibleAttribute(true)]
public ref class Delegate abstract : ICloneable,
    ISerializable
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ClassInterfaceAttribute(ClassInterfaceType.AutoDual)>]
[<ComVisibleAttribute(true)>]
type Delegate =
    class
        interface ICloneable
        interface ISerializable
    end

Delegate 类是委托类型的基类。然而，只有系统和编译器可以显式地从 Delegate 类或 MulticastDelegate 类派生。此外，还不允许从委托类型派生新类型。Delegate 类不是委托类型，该类用于派生委托类型。 Delegate 类是委托类型的基类。然而，只有系统和编译器可以显式地从 Delegate 类或 MulticastDelegate 类派生。此外，还不允许从委托类型派生新类型。Delegate 类不是委托类型，该类用于派生委托类型。 Delegate 类是委托类型的基类。然而，只有系统和编译器可以显式地从 Delegate 类或 MulticastDelegate 类派生。此外，还不允许从委托类型派生新类型。Delegate 类不是委托类型，该类用于派生委托类型。 Delegate 类是委托类型的基类。然而，只有系统和编译器可以显式地从 Delegate 类或 MulticastDelegate 类派生。此外，还不允许从委托类型派生新类型。Delegate 类不是委托类型，该类用于派生委托类型。

大多数语言实现 delegate 关键字，这些语言的编译器能够从 MulticastDelegate 类进行派生；所以，用户应当使用语言所提供的 delegate 关键字。

除了继承的方法，公共语言运行时还为委托类型提供两个特殊方法：BeginInvoke 和 EndInvoke。有关这些方法的更多信息，请参见使用异步方式调用同步方法。 除了继承的方法，公共语言运行时还为委托类型提供两个特殊方法：BeginInvoke 和 EndInvoke。有关这些方法的更多信息，请参见使用异步方式调用同步方法。

委托类型的声明建立了一个协定，该协定指定一个或多个方法的签名。委托是具有对以下内容的引用的委托类型的实例： 委托类型的声明建立了一个协定，该协定指定一个或多个方法的签名。委托是具有对以下内容的引用的委托类型的实例：

  • 某种类型的实例方法和可分配给该类型的目标对象。

  • 某种类型的实例方法（包含在形参表中公开的隐藏 this 参数）。该委托称为开放式实例委托。 某种类型的实例方法（包含在形参表中公开的隐藏 this 参数）。该委托称为开放式实例委托。

  • 静态方法。

  • 静态方法和可分配给该方法的第一个参数的目标对象。该委托称为通过其第一个参数关闭。 静态方法和可分配给该方法的第一个参数的目标对象。该委托称为通过其第一个参数关闭。

有关委托绑定的更多信息，请参见 CreateDelegate(Type, Object, MethodInfo, Boolean) 方法重载。

说明 说明

在 .NET Framework 1.0 版和 1.1 版中，仅当方法的签名与委托类型指定的签名完全匹配时，委托才可以表示方法。因此，仅支持上面列表中的第一项和第三项，且第一项要求与类型完全匹配。 在 .NET Framework 1.0 版和 1.1 版中，仅当方法的签名与委托类型指定的签名完全匹配时，委托才可以表示方法。因此，仅支持上面列表中的第一项和第三项，且第一项要求与类型完全匹配。

当委托表示通过其第一个参数关闭的实例方法（最常见的情况）时，委托存储对该方法的入口点的引用和对称为目标的对象（该对象具有可分配给定义该方法的类型的类型）的引用。当委托表示开放式实例方法时，它存储对该方法入口点的引用。委托签名必须在其形参表中包括隐藏的 this 参数；在这种情况下，委托不具有对目标对象的引用，必须在调用委托时提供目标对象。 当委托表示通过其第一个参数关闭的实例方法（最常见的情况）时，委托存储对该方法的入口点的引用和对称为目标的对象（该对象具有可分配给定义该方法的类型的类型）的引用。当委托表示开放式实例方法时，它存储对该方法入口点的引用。委托签名必须在其形参表中包括隐藏的 this 参数；在这种情况下，委托不具有对目标对象的引用，必须在调用委托时提供目标对象。 当委托表示通过其第一个参数关闭的实例方法（最常见的情况）时，委托存储对该方法的入口点的引用和对称为目标的对象（该对象具有可分配给定义该方法的类型的类型）的引用。当委托表示开放式实例方法时，它存储对该方法入口点的引用。委托签名必须在其形参表中包括隐藏的 this 参数；在这种情况下，委托不具有对目标对象的引用，必须在调用委托时提供目标对象。

当委托表示静态方法时，委托存储对该方法入口点的引用。当委托表示通过其第一个参数关闭的静态方法时，委托存储对该方法入口点的引用和对目标对象（该对象可分配给方法第一个参数的类型）的引用。调用该委托时，静态方法的第一个参数接收目标对象。 当委托表示静态方法时，委托存储对该方法入口点的引用。当委托表示通过其第一个参数关闭的静态方法时，委托存储对该方法入口点的引用和对目标对象（该对象可分配给方法第一个参数的类型）的引用。调用该委托时，静态方法的第一个参数接收目标对象。 当委托表示静态方法时，委托存储对该方法入口点的引用。当委托表示通过其第一个参数关闭的静态方法时，委托存储对该方法入口点的引用和对目标对象（该对象可分配给方法第一个参数的类型）的引用。调用该委托时，静态方法的第一个参数接收目标对象。

委托的调用列表就是已排序的委托集，其中列表的每个元素恰好调用该委托表示的一个方法。调用列表可以包含重复的方法。在调用期间，按方法出现在调用列表中的顺序来调用它们。委托尝试调用其调用列表中的每个方法，而重复方法在调用列表中出现一次就调用一次。委托是不可变的；一旦创建，委托的调用列表便无法更改。 委托的调用列表就是已排序的委托集，其中列表的每个元素恰好调用该委托表示的一个方法。调用列表可以包含重复的方法。在调用期间，按方法出现在调用列表中的顺序来调用它们。委托尝试调用其调用列表中的每个方法，而重复方法在调用列表中出现一次就调用一次。委托是不可变的；一旦创建，委托的调用列表便无法更改。 委托的调用列表就是已排序的委托集，其中列表的每个元素恰好调用该委托表示的一个方法。调用列表可以包含重复的方法。在调用期间，按方法出现在调用列表中的顺序来调用它们。委托尝试调用其调用列表中的每个方法，而重复方法在调用列表中出现一次就调用一次。委托是不可变的；一旦创建，委托的调用列表便无法更改。 委托的调用列表就是已排序的委托集，其中列表的每个元素恰好调用该委托表示的一个方法。调用列表可以包含重复的方法。在调用期间，按方法出现在调用列表中的顺序来调用它们。委托尝试调用其调用列表中的每个方法，而重复方法在调用列表中出现一次就调用一次。委托是不可变的；一旦创建，委托的调用列表便无法更改。 委托的调用列表就是已排序的委托集，其中列表的每个元素恰好调用该委托表示的一个方法。调用列表可以包含重复的方法。在调用期间，按方法出现在调用列表中的顺序来调用它们。委托尝试调用其调用列表中的每个方法，而重复方法在调用列表中出现一次就调用一次。委托是不可变的；一旦创建，委托的调用列表便无法更改。

委托被称作多路广播委托或可组合委托，因为委托可以调用一种或多种方法，并且可以用在组合操作中。

合并操作（如 Combine 和 Remove）并不改变现有委托。相反，这样的操作返回一个新委托，其中包含操作结果、未更改的委托或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。当合并操作的结果是没有引用任何方法的委托时，该操作返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。当所请求的操作无效时，合并操作返回未更改的委托。 合并操作（如 Combine 和 Remove）并不改变现有委托。相反，这样的操作返回一个新委托，其中包含操作结果、未更改的委托或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。当合并操作的结果是没有引用任何方法的委托时，该操作返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。当所请求的操作无效时，合并操作返回未更改的委托。 合并操作（如 Combine 和 Remove）并不改变现有委托。相反，这样的操作返回一个新委托，其中包含操作结果、未更改的委托或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。当合并操作的结果是没有引用任何方法的委托时，该操作返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。当所请求的操作无效时，合并操作返回未更改的委托。 合并操作（如 Combine 和 Remove）并不改变现有委托。相反，这样的操作返回一个新委托，其中包含操作结果、未更改的委托或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。当合并操作的结果是没有引用任何方法的委托时，该操作返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。当所请求的操作无效时，合并操作返回未更改的委托。

说明 说明

托管语言使用 Combine 和 Remove 方法实现委托操作。示例包括 Visual Basic 中的 AddHandler 和 RemoveHandler 语句以及 C# 中委托类型上的 += 和 -= 运算符。 托管语言使用 Combine 和 Remove 方法实现委托操作。示例包括 Visual Basic 中的 AddHandler 和 RemoveHandler 语句以及 C# 中委托类型上的 += 和 -= 运算符。

从 .NET Framework 4 版 开始，泛型委托类型可以具有变体类型参数。可以将逆变类型参数用作委托的参数类型，将协变类型参数用作返回类型。此功能允许从同一泛型类型定义的泛型委托类型是赋值兼容的，如果其类型参数是具有继承关系的引用类型，（如泛型中的协变和逆变中所述）。 从 .NET Framework 4 版 开始，泛型委托类型可以具有变体类型参数。可以将逆变类型参数用作委托的参数类型，将协变类型参数用作返回类型。此功能允许从同一泛型类型定义的泛型委托类型是赋值兼容的，如果其类型参数是具有继承关系的引用类型，（如泛型中的协变和逆变中所述）。 从 .NET Framework 4 版 开始，泛型委托类型可以具有变体类型参数。可以将逆变类型参数用作委托的参数类型，将协变类型参数用作返回类型。此功能允许从同一泛型类型定义的泛型委托类型是赋值兼容的，如果其类型参数是具有继承关系的引用类型，（如泛型中的协变和逆变中所述）。

说明 说明

赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，但是无法组合两个委托，因为类型不完全匹配。 赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，但是无法组合两个委托，因为类型不完全匹配。 赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，但是无法组合两个委托，因为类型不完全匹配。 赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，但是无法组合两个委托，因为类型不完全匹配。

如果所调用的方法引发异常，则方法停止执行，并将异常向回传递给委托的调用方，且不再调用调用列表中其余的方法。捕捉调用方的异常并不改变此行为。 如果所调用的方法引发异常，则方法停止执行，并将异常向回传递给委托的调用方，且不再调用调用列表中其余的方法。捕捉调用方的异常并不改变此行为。

当委托所调用的方法的签名包含返回值时，委托返回调用列表中最后一个元素的返回值。当签名包含由引用传递的参数时，该参数的最终值就是调用列表中每个方法的结果，这些方法依序执行并更新参数的值。 当委托所调用的方法的签名包含返回值时，委托返回调用列表中最后一个元素的返回值。当签名包含由引用传递的参数时，该参数的最终值就是调用列表中每个方法的结果，这些方法依序执行并更新参数的值。

在 C 或 C++ 中与委托最为相似的是函数指针。委托可以表示静态方法或实例方法。当委托表示实例方法时，委托不仅存储对方法入口点的引用，还存储对类实例的引用。与函数指针不同，委托是面向对象和类型安全的。 在 C 或 C++ 中与委托最为相似的是函数指针。委托可以表示静态方法或实例方法。当委托表示实例方法时，委托不仅存储对方法入口点的引用，还存储对类实例的引用。与函数指针不同，委托是面向对象和类型安全的。 在 C 或 C++ 中与委托最为相似的是函数指针。委托可以表示静态方法或实例方法。当委托表示实例方法时，委托不仅存储对方法入口点的引用，还存储对类实例的引用。与函数指针不同，委托是面向对象和类型安全的。 在 C 或 C++ 中与委托最为相似的是函数指针。委托可以表示静态方法或实例方法。当委托表示实例方法时，委托不仅存储对方法入口点的引用，还存储对类实例的引用。与函数指针不同，委托是面向对象和类型安全的。

下面的示例说明如何定义名为 myMethodDelegate 的委托。为嵌套的 mySampleClass 类的一个实例方法和一个静态方法创建此委托的实例。实例方法的委托需要 mySampleClass 的一个实例。mySampleClass 实例保存在名为 mySC 的变量中。 下面的示例说明如何定义名为 myMethodDelegate 的委托。为嵌套的 mySampleClass 类的一个实例方法和一个静态方法创建此委托的实例。实例方法的委托需要 mySampleClass 的一个实例。mySampleClass 实例保存在名为 mySC 的变量中。 下面的示例说明如何定义名为 myMethodDelegate 的委托。为嵌套的 mySampleClass 类的一个实例方法和一个静态方法创建此委托的实例。实例方法的委托需要 mySampleClass 的一个实例。mySampleClass 实例保存在名为 mySC 的变量中。 下面的示例说明如何定义名为 myMethodDelegate 的委托。为嵌套的 mySampleClass 类的一个实例方法和一个静态方法创建此委托的实例。实例方法的委托需要 mySampleClass 的一个实例。mySampleClass 实例保存在名为 mySC 的变量中。

Imports System

Public Class SamplesDelegate

   ' Declares a delegate for a method that takes in an int and returns a String.
   Delegate Function myMethodDelegate(myInt As Integer) As [String]

   ' Defines some methods to which the delegate can point.
   Public Class mySampleClass

      ' Defines an instance method.
      Public Function myStringMethod(myInt As Integer) As [String]
         If myInt > 0 Then
            Return "positive"
         End If
         If myInt < 0 Then
            Return "negative"
         End If
         Return "zero"
      End Function 'myStringMethod

      ' Defines a static method.
      Public Shared Function mySignMethod(myInt As Integer) As [String]
         If myInt > 0 Then
            Return "+"
         End If
         If myInt < 0 Then
            Return "-"
         End If
         Return ""
      End Function 'mySignMethod
   End Class 'mySampleClass

   Public Shared Sub Main()

      ' Creates one delegate for each method. For the instance method, an
      ' instance (mySC) must be supplied. For the Shared method, the
      ' method name is qualified by the class name.
      Dim mySC As New mySampleClass()
      Dim myD1 As New myMethodDelegate(AddressOf mySC.myStringMethod)
      Dim myD2 As New myMethodDelegate(AddressOf mySampleClass.mySignMethod)

      ' Invokes the delegates.
      Console.WriteLine("{0} is {1}; use the sign ""{2}"".", 5, myD1(5), myD2(5))
      Console.WriteLine("{0} is {1}; use the sign ""{2}"".", - 3, myD1(- 3), myD2(- 3))
      Console.WriteLine("{0} is {1}; use the sign ""{2}"".", 0, myD1(0), myD2(0))

   End Sub 'Main

End Class 'SamplesDelegate

'This code produces the following output:
'
'5 is positive; use the sign "+".
'-3 is negative; use the sign "-".
'0 is zero; use the sign "".

using System;
public class SamplesDelegate  {

   // Declares a delegate for a method that takes in an int and returns a String.
   public delegate String myMethodDelegate( int myInt );

   // Defines some methods to which the delegate can point.
   public class mySampleClass  {

      // Defines an instance method.
      public String myStringMethod ( int myInt )  {
         if ( myInt > 0 )
            return( "positive" );
         if ( myInt < 0 )
            return( "negative" );
         return ( "zero" );
      }

      // Defines a static method.
      public static String mySignMethod ( int myInt )  {
         if ( myInt > 0 )
            return( "+" );
         if ( myInt < 0 )
            return( "-" );
         return ( "" );
      }
   }

   public static void Main()  {

      // Creates one delegate for each method. For the instance method, an
      // instance (mySC) must be supplied. For the static method, use the
      // class name.
      mySampleClass mySC = new mySampleClass();
      myMethodDelegate myD1 = new myMethodDelegate( mySC.myStringMethod );
      myMethodDelegate myD2 = new myMethodDelegate( mySampleClass.mySignMethod );

      // Invokes the delegates.
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 5, myD1( 5 ), myD2( 5 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", -3, myD1( -3 ), myD2( -3 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 0, myD1( 0 ), myD2( 0 ) );
   }

}

/*
This code produces the following output:

5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".
*/

using namespace System;
delegate String^ myMethodDelegate( // Declares a delegate for a method that takes in an int and returns a String.
int myInt );

// Defines some methods to which the delegate can point.
ref class mySampleClass
{
public:

   // Defines an instance method.
   String^ myStringMethod( int myInt )
   {
      if ( myInt > 0 )
            return ("positive");

      if ( myInt < 0 )
            return ("negative");

      return ("zero");
   }

   // Defines a static method.
   static String^ mySignMethod( int myInt )
   {
      if ( myInt > 0 )
            return ("+");

      if ( myInt < 0 )
            return ("-");

      return ("");
   }

};

int main()
{

   // Creates one delegate for each method. For the instance method, an
   // instance (mySC) must be supplied. For the static method, only the
   // method name is needed.
   mySampleClass^ mySC = gcnew mySampleClass;
   myMethodDelegate^ myD1 = gcnew myMethodDelegate( mySC, &mySampleClass::myStringMethod );
   myMethodDelegate^ myD2 = gcnew myMethodDelegate( mySampleClass::mySignMethod );

   // Invokes the delegates.
   Console::WriteLine( "{0} is {1}; use the sign \"{2}\".", 5, myD1( 5 ), myD2( 5 ) );
   Console::WriteLine( "{0} is {1}; use the sign \"{2}\".",  -3, myD1(  -3 ), myD2(  -3 ) );
   Console::WriteLine( "{0} is {1}; use the sign \"{2}\".", 0, myD1( 0 ), myD2( 0 ) );
}

/*
This code produces the following output:

5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".
*/

System System..::.DelegateDelegate

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 成员
System 命名空间
MulticastDelegate

其他资源

使用异步方式调用同步方法


Delegate 成员

Delegate 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Delegate 类

表示委托，委托是一种数据结构，它引用静态方法或引用类实例及该类的实例方法。

Delegate 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Delegate 类
System 命名空间


Delegate 构造函数

Delegate 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Delegate 类

初始化一个新委托。

名称 说明
页首

参考

Delegate 类
Delegate 成员
System 命名空间


Delegate 构造函数 (Object, String)

Delegate 构造函数 (Object, String)
Delegate 类

初始化一个委托，该委托对指定的类实例调用指定的实例方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    target As Object, _
    method As String _
)
protected Delegate(
    Object target,
    string method
)
protected:
Delegate(
    Object^ target,
    String^ method
)
new :
        target:Object *
        method:string -> Delegate

参数

target
类型： System Object
类实例，委托对其调用 method。
method
类型： System String
委托表示的实例方法的名称。
异常 | 条件
ArgumentNullException | target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 绑定到目标方法时出错。

编译器生成的委托类型会调用此构造函数，以根据实例方法名称和定义该方法的类的实例创建委托。

此构造函数只为实例方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。 此构造函数只为实例方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
Delegate 重载
System 命名空间
Object
String


Delegate 构造函数 (Type, String)

Delegate 构造函数 (Type, String)
Delegate 类

初始化一个委托，该委托从指定的类调用指定的静态方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    target As Type, _
    method As String _
)
protected Delegate(
    Type target,
    string method
)
protected:
Delegate(
    Type^ target,
    String^ method
)
new :
        target:Type *
        method:string -> Delegate

参数

target
类型： System Type
Type，它表示定义 method 的类。
method
类型： System String
委托表示的静态方法的名称。
异常 | 条件
ArgumentNullException | target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | target 不是 RuntimeType。请参见 反射中的运行时类型。 target 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - target 表示开放式泛型类型。

编译器生成的委托类型会调用此构造函数，以根据一个静态方法的名称和表示定义该方法的类的 Type 创建委托。

此构造函数只为静态方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。 此构造函数只为静态方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。

要获得表示类的 Type，请使用具有该类的完全限定（包括命名空间）名的 Type..::.GetType 方法。例如，如果将“System.Threading.ThreadStart”传递给 Type..::.GetType，将返回 ThreadStart 类的 Type。 要获得表示类的 Type，请使用具有该类的完全限定（包括命名空间）名的 Type..::.GetType 方法。例如，如果将“System.Threading.ThreadStart”传递给 Type..::.GetType，将返回 ThreadStart 类的 Type。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
Delegate 重载
System 命名空间
Type
String


Delegate 方法

Delegate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Delegate 类

Delegate 类型公开以下成员。

名称 说明
页首

参考

Delegate 类
System 命名空间


Delegate ..::.Clone 方法

Delegate
.
.
::
.
Clone 方法
Delegate 类

创建委托的浅表副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Clone As Object
public virtual Object Clone()
public:
virtual Object^ Clone()
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
委托的浅表副本。

实现

复本与原始委托有相同的 Type、目标、方法和调用列表。

浅表副本创建与原始对象具有相同类型的新实例，然后复制原始对象的非静态字段。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制该引用但不复制被引用的对象；这样，原始对象中的引用和复本中的引用指向同一个对象。相反，对象的深层副本复制对象中字段直接或间接引用的全部内容。 浅表副本创建与原始对象具有相同类型的新实例，然后复制原始对象的非静态字段。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制该引用但不复制被引用的对象；这样，原始对象中的引用和复本中的引用指向同一个对象。相反，对象的深层副本复制对象中字段直接或间接引用的全部内容。 浅表副本创建与原始对象具有相同类型的新实例，然后复制原始对象的非静态字段。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制该引用但不复制被引用的对象；这样，原始对象中的引用和复本中的引用指向同一个对象。相反，对象的深层副本复制对象中字段直接或间接引用的全部内容。 浅表副本创建与原始对象具有相同类型的新实例，然后复制原始对象的非静态字段。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制该引用但不复制被引用的对象；这样，原始对象中的引用和复本中的引用指向同一个对象。相反，对象的深层副本复制对象中字段直接或间接引用的全部内容。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
System 命名空间


Delegate ..::.Combine 方法

Delegate
.
.
::
.
Combine 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Delegate 类

将指定的多路广播（可组合）委托的调用列表连接起来。

名称 说明
页首

参考

Delegate 类
Delegate 成员
System 命名空间


Delegate ..::.Combine 方法 ( array<Delegate >[]()[])

Delegate
.
.
::
.
Combine 方法 (
array<
Delegate
>
[]
()
[]
)
Delegate 类

将委托数组的调用列表连接在一起。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function Combine ( _
    ParamArray delegates As Delegate() _
) As Delegate
[ComVisibleAttribute(true)]
public static Delegate Combine(
    params Delegate[] delegates
)
[ComVisibleAttribute(true)]
public:
static Delegate^ Combine(
    ... array<Delegate^>^ delegates
)
[<ComVisibleAttribute(true)>]
static member Combine :
        delegates:Delegate[] -> Delegate

参数

delegates
类型：
array<
System Delegate
>
[]
()
[]

要组合的委托数组。

返回值

类型： System Delegate
新的委托，该委托的调用列表将 delegates 数组中的委托的调用列表连接在一起。如果 delegates 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），delegates 包含零个元素，或 delegates 中的每项均为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 新的委托，该委托的调用列表将 delegates 数组中的委托的调用列表连接在一起。如果 delegates 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），delegates 包含零个元素，或 delegates 中的每项均为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentException | 并非 delegates 中的所有非空项都是同一委托类型的实例。

如果 delegates 数组包含为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的项，则将忽略这些项。

调用列表中可包含重复项目，即引用同一对象上同一种方法的项目。

说明 说明

赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，如泛型中的协变和逆变中所述，但是无法组合两个委托，因为类型不完全匹配。 赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，如泛型中的协变和逆变中所述，但是无法组合两个委托，因为类型不完全匹配。 赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，如泛型中的协变和逆变中所述，但是无法组合两个委托，因为类型不完全匹配。 赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，如泛型中的协变和逆变中所述，但是无法组合两个委托，因为类型不完全匹配。

Combine 对于创建在每次发生事件时都调用多种方法的事件处理程序非常有用。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
Combine 重载
System 命名空间
MulticastDelegate
CombineImpl


Delegate ..::.Combine 方法 (Delegate, Delegate)

Delegate
.
.
::
.
Combine 方法 (Delegate, Delegate)
Delegate 类

将两个委托的调用列表连接在一起。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Combine ( _
    a As Delegate, _
    b As Delegate _
) As Delegate
public static Delegate Combine(
    Delegate a,
    Delegate b
)
public:
static Delegate^ Combine(
    Delegate^ a,
    Delegate^ b
)
static member Combine :
        a:Delegate *
        b:Delegate -> Delegate

参数

a
类型： System Delegate
最先出现其调用列表的委托。
b
类型： System Delegate
最后出现其调用列表的委托。

返回值

类型： System Delegate
新的委托，它的调用列表将 a 和 b 的调用列表按该顺序连接在一起。如果 b 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回 a，如果 a 为空引用，则返回 b，如果 a 和 b 均为空引用，则返回空引用。 新的委托，它的调用列表将 a 和 b 的调用列表按该顺序连接在一起。如果 b 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回 a，如果 a 为空引用，则返回 b，如果 a 和 b 均为空引用，则返回空引用。
异常 | 条件
ArgumentException | a 和 b 均不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 a 和 b 不是同一委托类型的实例。

调用列表中可包含重复项目，即引用同一对象上同一种方法的项目。

说明 说明

赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，如泛型中的协变和逆变中所述，但是无法组合两个委托，因为类型不完全匹配。 赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，如泛型中的协变和逆变中所述，但是无法组合两个委托，因为类型不完全匹配。 赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，如泛型中的协变和逆变中所述，但是无法组合两个委托，因为类型不完全匹配。 赋值兼容的泛型委托由于变化不一定可组合。若要可组合，类型必须完全匹配。例如，假设一个名为 Derived 的类派生自名为 Base 的类。类型为 Action<Base>（在 Visual Basic 中为 Action(Of Base)）的委托可以赋值给类型为 Action<Derived> 的变量，如泛型中的协变和逆变中所述，但是无法组合两个委托，因为类型不完全匹配。

Combine 对于创建在每次发生事件时都调用多种方法的事件处理程序非常有用。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
Combine 重载
System 命名空间
MulticastDelegate
CombineImpl


Delegate ..::.CombineImpl 方法

Delegate
.
.
::
.
CombineImpl 方法
Delegate 类

将指定多路广播（可组合）委托和当前多路广播（可组合）委托的调用列表连接起来。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function CombineImpl ( _
    d As Delegate _
) As Delegate
protected virtual Delegate CombineImpl(
    Delegate d
)
protected:
virtual Delegate^ CombineImpl(
    Delegate^ d
)
abstract CombineImpl :
        d:Delegate -> Delegate
override CombineImpl :
        d:Delegate -> Delegate

参数

d
类型： System Delegate
多路广播（可组合）委托，其调用列表要追加到当前多路广播（可组合）委托的调用列表的结尾。

返回值

类型： System Delegate
新的多路广播（可组合）委托，其调用列表将当前多路广播（可组合）委托的调用列表和 d 的调用列表连接在一起；或者如果 d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回当前多路广播（可组合）委托。
异常 | 条件
MulticastNotSupportedException | 总是被引发。

仅在当前委托是多路广播（可组合）时才可应用此方法。

当前实现仅引发 MulticastNotSupportedException。

调用列表中可包含重复项目，即引用同一对象上同一种方法的项目。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
System 命名空间
Combine


Delegate ..::.CreateDelegate 方法

Delegate
.
.
::
.
CreateDelegate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Delegate 类

创建指定类型的委托。

名称 说明
页首

参考

Delegate 类
Delegate 成员
System 命名空间


Delegate ..::.CreateDelegate 方法 (Type, MethodInfo)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, MethodInfo)
Delegate 类

创建指定类型的委托以表示指定的静态方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    method As MethodInfo _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    MethodInfo method
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    MethodInfo^ method
)
static member CreateDelegate :
        type:Type *
        method:MethodInfo -> Delegate

参数

type
类型： System Type
要创建的委托的 Type。
method
类型： System.Reflection MethodInfo
描述委托要表示的静态或实例方法的 MethodInfo。.NET Framework 1.0 和 1.1 版中仅支持静态方法。 描述委托要表示的静态或实例方法的 MethodInfo。.NET Framework 1.0 和 1.1 版中仅支持静态方法。

返回值

类型： System Delegate
表示指定静态方法的指定类型的委托。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - method 不是静态方法，并且 .NET Framework 的版本为 1.0 或 1.1。 - 或 - 不能绑定 method。 - 或 - method 不是 RuntimeMethodInfo。请参见 反射中的运行时类型。 method 不是 RuntimeMethodInfo。请参见 反射中的运行时类型。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

在 .NET Framework 1.0 和 1.1 版中，此方法重载仅为静态方法创建委托。在 .NET Framework 2.0 版中，此方法重载还可以创建开放的实例方法委托，即显式提供实例方法的第一个隐藏参数的委托。有关详细说明，请参见更一般的 CreateDelegate(Type, Object, MethodInfo) 方法重载，它允许您为实例或静态方法创建开放或封闭委托的所有组合，并且还可选择指定第一个参数。 在 .NET Framework 1.0 和 1.1 版中，此方法重载仅为静态方法创建委托。在 .NET Framework 2.0 版中，此方法重载还可以创建开放的实例方法委托，即显式提供实例方法的第一个隐藏参数的委托。有关详细说明，请参见更一般的 CreateDelegate(Type, Object, MethodInfo) 方法重载，它允许您为实例或静态方法创建开放或封闭委托的所有组合，并且还可选择指定第一个参数。 在 .NET Framework 1.0 和 1.1 版中，此方法重载仅为静态方法创建委托。在 .NET Framework 2.0 版中，此方法重载还可以创建开放的实例方法委托，即显式提供实例方法的第一个隐藏参数的委托。有关详细说明，请参见更一般的 CreateDelegate(Type, Object, MethodInfo) 方法重载，它允许您为实例或静态方法创建开放或封闭委托的所有组合，并且还可选择指定第一个参数。

说明 说明

当委托不是通过它的第一个参数封闭时，应使用此方法重载，因为在这种情况下速度会更快些。

此方法重载等效于调用 CreateDelegate(Type, MethodInfo, Boolean) 方法重载并为 throwOnBindFailure 指定 true。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。

兼容的参数类型和返回类型

在 .NET Framework 2.0 版中，使用此方法重载创建的委托的参数类型和返回类型必须与该委托表示的方法的参数类型和返回类型兼容；但这些类型不必精确匹配。这表示放宽了对 .NET Framework 1.0 和 1.1 版中的绑定行为的要求，在 .NET Framework 1.0 和 1.1 中类型必须精确匹配。 在 .NET Framework 2.0 版中，使用此方法重载创建的委托的参数类型和返回类型必须与该委托表示的方法的参数类型和返回类型兼容；但这些类型不必精确匹配。这表示放宽了对 .NET Framework 1.0 和 1.1 版中的绑定行为的要求，在 .NET Framework 1.0 和 1.1 中类型必须精确匹配。

如果委托参数的类型的限制性强于方法参数的类型，则该委托的参数与该方法的相应参数兼容，因为这可保证传递给委托的参数可以安全地传递给方法。

同样，如果方法的返回类型的限制性强于委托的返回类型，则该委托的返回类型与该方法的返回类型兼容，因为这可保证方法的返回值可以安全地强制转换为委托的返回类型。

例如，具有类型为 Hashtable 的参数和 Object 返回类型的委托可以表示具有类型为 Object 的参数和类型为 Hashtable 的返回值的方法。

本节包含两个代码示例。第一个示例演示可以使用此方法重载创建的两种委托：通过实例方法开放的委托和通过静态方法开放的委托。 本节包含两个代码示例。第一个示例演示可以使用此方法重载创建的两种委托：通过实例方法开放的委托和通过静态方法开放的委托。

第二个代码示例演示兼容的参数类型和返回类型。

示例 1

下面的代码示例演示可以使用此 CreateDelegate 方法重载创建委托的两种方式。

说明 说明

有两种 CreateDelegate 方法重载，它们指定 MethodInfo 但不指定第一个参数；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。 有两种 CreateDelegate 方法重载，它们指定 MethodInfo 但不指定第一个参数；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。

此示例声明一个 C 类和两个委托类型，前者包含一个静态方法 M2 和一个实例方法 M1，后者包含接受 C 的一个实例和一个字符串的 D1 以及接受一个字符串的 D2。

另一个名为 Example 的类包含创建委托的代码。

  • 为实例方法 M1 创建一个表示开放式实例方法的 D1 类型的委托。必须在调用委托时传递实例。 为实例方法 M1 创建一个表示开放式实例方法的 D1 类型的委托。必须在调用委托时传递实例。

  • 为静态方法 M2 创建一个表示开放式静态方法的 D2 类型的委托。

Imports System
Imports System.Reflection
Imports System.Security.Permissions

' Declare three delegate types for demonstrating the combinations
' of Shared versus instance methods and open versus closed
' delegates.
'
Public Delegate Sub D1(ByVal c As C, ByVal s As String)
Public Delegate Sub D2(ByVal s As String)
Public Delegate Sub D3()

' A sample class with an instance method and a Shared method.
'
Public Class C
    Private id As Integer
    Public Sub New(ByVal id As Integer)
        Me.id = id
    End Sub 'New

    Public Sub M1(ByVal s As String)
        Console.WriteLine("Instance method M1 on C:  id = {0}, s = {1}", _
            Me.id, s)
    End Sub

    Public Shared Sub M2(ByVal s As String)
        Console.WriteLine("Shared method M2 on C:  s = {0}", s)
    End Sub
End Class

Public Class Example

    Public Shared Sub Main()

        Dim c1 As New C(42)

        ' Get a MethodInfo for each method.
        '
        Dim mi1 As MethodInfo = GetType(C).GetMethod("M1", _
            BindingFlags.Public Or BindingFlags.Instance)
        Dim mi2 As MethodInfo = GetType(C).GetMethod("M2", _
            BindingFlags.Public Or BindingFlags.Static)

        Dim d1 As D1
        Dim d2 As D2
        Dim d3 As D3

        Console.WriteLine(vbLf & "An instance method closed over C.")
        ' In this case, the delegate and the
        ' method must have the same list of argument types; use
        ' delegate type D2 with instance method M1.
        '
        Dim test As [Delegate] = _
            [Delegate].CreateDelegate(GetType(D2), c1, mi1, False)

        ' Because False was specified for throwOnBindFailure
        ' in the call to CreateDelegate, the variable 'test'
        ' contains Nothing if the method fails to bind (for
        ' example, if mi1 happened to represent a method of
        ' some class other than C).
        '
        If test IsNot Nothing Then
            d2 = CType(test, D2)

            ' The same instance of C is used every time the
            ' delegate is invoked.
            d2("Hello, World!")
            d2("Hi, Mom!")
        End If

        Console.WriteLine(vbLf & "An open instance method.")
        ' In this case, the delegate has one more
        ' argument than the instance method; this argument comes
        ' at the beginning, and represents the hidden instance
        ' argument of the instance method. Use delegate type D1
        ' with instance method M1.
        '
        d1 = CType([Delegate].CreateDelegate(GetType(D1), Nothing, mi1), D1)

        ' An instance of C must be passed in each time the
        ' delegate is invoked.
        '
        d1(c1, "Hello, World!")
        d1(New C(5280), "Hi, Mom!")

        Console.WriteLine(vbLf & "An open Shared method.")
        ' In this case, the delegate and the method must
        ' have the same list of argument types; use delegate type
        ' D2 with Shared method M2.
        '
        d2 = CType([Delegate].CreateDelegate(GetType(D2), Nothing, mi2), D2)

        ' No instances of C are involved, because this is a Shared
        ' method.
        '
        d2("Hello, World!")
        d2("Hi, Mom!")

        Console.WriteLine(vbLf & "A Shared method closed over the first argument (String).")
        ' The delegate must omit the first argument of the method.
        ' A string is passed as the firstArgument parameter, and
        ' the delegate is bound to this string. Use delegate type
        ' D3 with Shared method M2.
        '
        d3 = CType([Delegate].CreateDelegate(GetType(D3), "Hello, World!", mi2), D3)

        ' Each time the delegate is invoked, the same string is
        ' used.
        d3()

    End Sub
End Class

' This code example produces the following output:
'
'An instance method closed over C.
'Instance method M1 on C:  id = 42, s = Hello, World!
'Instance method M1 on C:  id = 42, s = Hi, Mom!
'
'An open instance method.
'Instance method M1 on C:  id = 42, s = Hello, World!
'Instance method M1 on C:  id = 5280, s = Hi, Mom!
'
'An open Shared method.
'Shared method M2 on C:  s = Hello, World!
'Shared method M2 on C:  s = Hi, Mom!
'
'A Shared method closed over the first argument (String).
'Shared method M2 on C:  s = Hello, World!
'

using System;
using System.Reflection;
using System.Security.Permissions;

// Declare three delegate types for demonstrating the combinations
// of static versus instance methods and open versus closed
// delegates.
//
public delegate void D1(C c, string s);
public delegate void D2(string s);
public delegate void D3();

// A sample class with an instance method and a static method.
//
public class C
{
    private int id;
    public C(int id) { this.id = id; }

    public void M1(string s)
    {
        Console.WriteLine("Instance method M1 on C:  id = {0}, s = {1}",
            this.id, s);
    }

    public static void M2(string s)
    {
        Console.WriteLine("Static method M2 on C:  s = {0}", s);
    }
}

public class Example
{
    public static void Main()
    {
        C c1 = new C(42);

        // Get a MethodInfo for each method.
        //
        MethodInfo mi1 = typeof(C).GetMethod("M1",
            BindingFlags.Public | BindingFlags.Instance);
        MethodInfo mi2 = typeof(C).GetMethod("M2",
            BindingFlags.Public | BindingFlags.Static);

        D1 d1;
        D2 d2;
        D3 d3;

        Console.WriteLine("\nAn instance method closed over C.");
        // In this case, the delegate and the
        // method must have the same list of argument types; use
        // delegate type D2 with instance method M1.
        //
        Delegate test =
            Delegate.CreateDelegate(typeof(D2), c1, mi1, false);

        // Because false was specified for throwOnBindFailure
        // in the call to CreateDelegate, the variable 'test'
        // contains null if the method fails to bind (for
        // example, if mi1 happened to represent a method of
        // some class other than C).
        //
        if (test != null)
        {
            d2 = (D2) test;

            // The same instance of C is used every time the
            // delegate is invoked.
            d2("Hello, World!");
            d2("Hi, Mom!");
        }

        Console.WriteLine("\nAn open instance method.");
        // In this case, the delegate has one more
        // argument than the instance method; this argument comes
        // at the beginning, and represents the hidden instance
        // argument of the instance method. Use delegate type D1
        // with instance method M1.
        //
        d1 = (D1) Delegate.CreateDelegate(typeof(D1), null, mi1);

        // An instance of C must be passed in each time the
        // delegate is invoked.
        //
        d1(c1, "Hello, World!");
        d1(new C(5280), "Hi, Mom!");

        Console.WriteLine("\nAn open static method.");
        // In this case, the delegate and the method must
        // have the same list of argument types; use delegate type
        // D2 with static method M2.
        //
        d2 = (D2) Delegate.CreateDelegate(typeof(D2), null, mi2);

        // No instances of C are involved, because this is a static
        // method.
        //
        d2("Hello, World!");
        d2("Hi, Mom!");

        Console.WriteLine("\nA static method closed over the first argument (String).");
        // The delegate must omit the first argument of the method.
        // A string is passed as the firstArgument parameter, and
        // the delegate is bound to this string. Use delegate type
        // D3 with static method M2.
        //
        d3 = (D3) Delegate.CreateDelegate(typeof(D3),
            "Hello, World!", mi2);

        // Each time the delegate is invoked, the same string is
        // used.
        d3();
    }
}

/* This code example produces the following output:

An instance method closed over C.
Instance method M1 on C:  id = 42, s = Hello, World!
Instance method M1 on C:  id = 42, s = Hi, Mom!

An open instance method.
Instance method M1 on C:  id = 42, s = Hello, World!
Instance method M1 on C:  id = 5280, s = Hi, Mom!

An open static method.
Static method M2 on C:  s = Hello, World!
Static method M2 on C:  s = Hi, Mom!

A static method closed over the first argument (String).
Static method M2 on C:  s = Hello, World!
 */

示例 2

下面的代码示例演示参数类型和返回类型的兼容性。

该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。 该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。 该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。

该代码示例演示名为 Example 的委托可用于表示 MyMethod 方法。该方法可以绑定到该委托，原因是： 该代码示例演示名为 Example 的委托可用于表示 MyMethod 方法。该方法可以绑定到该委托，原因是：

  • 委托的参数类型 (Derived) 的限制性强于 MyMethod 的参数类型 (Base)，因此将委托的参数传递给 MyMethod 始终是安全的。

  • MyMethod 的返回类型 (Derived) 的限制性强于委托的参数类型 (Base)，因此将方法的返回类型强制转换为委托的返回类型始终是安全的。

该代码示例不生成任何输出。

Imports System
Imports System.Reflection

' Define two classes to use in the demonstration, a base class and
' a class that derives from it.
'
Public Class Base
End Class

Public Class Derived
    Inherits Base

    ' Define a Shared method to use in the demonstration. The method
    ' takes an instance of Base and returns an instance of Derived.
    ' For the purposes of the demonstration, it is not necessary for
    ' the method to do anything useful.
    '
    Public Shared Function MyMethod(ByVal arg As Base) As Derived
        Dim dummy As Base = arg
        Return New Derived()
    End Function

End Class

' Define a delegate that takes an instance of Derived and returns an
' instance of Base.
'
Public Delegate Function Example(ByVal arg As Derived) As Base

Module Test

    Sub Main()

        ' The binding flags needed to retrieve MyMethod.
        Dim flags As BindingFlags = _
            BindingFlags.Public Or BindingFlags.Static

        ' Get a MethodInfo that represents MyMethod.
        Dim minfo As MethodInfo = _
            GetType(Derived).GetMethod("MyMethod", flags)

        ' Demonstrate contravariance of parameter types and covariance
        ' of return types by using the delegate Example to represent
        ' MyMethod. The delegate binds to the method because the
        ' parameter of the delegate is more restrictive than the
        ' parameter of the method (that is, the delegate accepts an
        ' instance of Derived, which can always be safely passed to
        ' a parameter of type Base), and the return type of MyMethod
        ' is more restrictive than the return type of Example (that
        ' is, the method returns an instance of Derived, which can
        ' always be safely cast to type Base).
        '
        Dim ex As Example = CType( _
            [Delegate].CreateDelegate(GetType(Example), minfo), _
            Example _
        )

        ' Execute MyMethod using the delegate Example.
        '
        Dim b As Base = ex(New Derived())
    End Sub
End Module

using System;
using System.Reflection;

// Define two classes to use in the demonstration, a base class and
// a class that derives from it.
//
public class Base {}

public class Derived : Base
{
    // Define a static method to use in the demonstration. The method
    // takes an instance of Base and returns an instance of Derived.
    // For the purposes of the demonstration, it is not necessary for
    // the method to do anything useful.
    //
    public static Derived MyMethod(Base arg)
    {
        Base dummy = arg;
        return new Derived();
    }
}

// Define a delegate that takes an instance of Derived and returns an
// instance of Base.
//
public delegate Base Example(Derived arg);

class Test
{
    public static void Main()
    {
        // The binding flags needed to retrieve MyMethod.
        BindingFlags flags = BindingFlags.Public | BindingFlags.Static;

        // Get a MethodInfo that represents MyMethod.
        MethodInfo minfo = typeof(Derived).GetMethod("MyMethod", flags);

        // Demonstrate contravariance of parameter types and covariance
        // of return types by using the delegate Example to represent
        // MyMethod. The delegate binds to the method because the
        // parameter of the delegate is more restrictive than the
        // parameter of the method (that is, the delegate accepts an
        // instance of Derived, which can always be safely passed to
        // a parameter of type Base), and the return type of MyMethod
        // is more restrictive than the return type of Example (that
        // is, the method returns an instance of Derived, which can
        // always be safely cast to type Base).
        //
        Example ex =
            (Example) Delegate.CreateDelegate(typeof(Example), minfo);

        // Execute MyMethod using the delegate Example.
        //
        Base b = ex(new Derived());
    }
}

using namespace System;
using namespace System::Reflection;

// Define two classes to use in the demonstration, a base class and
// a class that derives from it.
//
public ref class Base {};

public ref class Derived : Base
{
    // Define a static method to use in the demonstration. The method
    // takes an instance of Base and returns an instance of Derived.
    // For the purposes of the demonstration, it is not necessary for
    // the method to do anything useful.
    //
public:
    static Derived^ MyMethod(Base^ arg)
    {
        Base^ dummy = arg;
        return gcnew Derived();
    }
};

// Define a delegate that takes an instance of Derived and returns an
// instance of Base.
//
public delegate Base^ Example(Derived^ arg);

void main()
{
    // The binding flags needed to retrieve MyMethod.
    BindingFlags flags = BindingFlags::Public | BindingFlags::Static;

    // Get a MethodInfo that represents MyMethod.
    MethodInfo^ minfo = Derived::typeid->GetMethod("MyMethod", flags);

    // Demonstrate contravariance of parameter types and covariance
    // of return types by using the delegate Example to represent
    // MyMethod. The delegate binds to the method because the
    // parameter of the delegate is more restrictive than the
    // parameter of the method (that is, the delegate accepts an
    // instance of Derived, which can always be safely passed to
    // a parameter of type Base), and the return type of MyMethod
    // is more restrictive than the return type of Example (that
    // is, the method returns an instance of Derived, which can
    // always be safely cast to type Base).
    //
    Example^ ex =
        (Example^) Delegate::CreateDelegate(Example::typeid, minfo);

    // Execute MyMethod using the delegate Example.
    //
    Base^ b = ex(gcnew Derived());
}
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
MethodInfo


Delegate ..::.CreateDelegate 方法 (Type, Object, MethodInfo)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, Object, MethodInfo)
Delegate 类

使用指定的第一个参数创建指定类型的委托，该委托表示指定的静态方法或实例方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    firstArgument As Object, _
    method As MethodInfo _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    Object firstArgument,
    MethodInfo method
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    Object^ firstArgument,
    MethodInfo^ method
)
static member CreateDelegate :
        type:Type *
        firstArgument:Object *
        method:MethodInfo -> Delegate

参数

type
类型： System Type
要创建的委托的 Type。
firstArgument
类型： System Object
委托要绑定到的对象，或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），后者表示将 method 视为 static（在 Visual Basic 中为 Shared）。
method
类型： System.Reflection MethodInfo
描述委托要表示的静态或实例方法的 MethodInfo。

返回值

类型： System Delegate
指定类型的委托，表示指定的静态或实例方法。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - 不能绑定 method。 - 或 - method 不是 RuntimeMethodInfo。请参见 反射中的运行时类型。 method 不是 RuntimeMethodInfo。请参见 反射中的运行时类型。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

调用此方法重载等效于调用 CreateDelegate(Type, Object, MethodInfo, Boolean) 方法重载并为 throwOnBindFailure 指定 true。这两种重载提供非常灵活的用于创建委托的方式。可以使用这两种重载创建静态方法或实例方法的委托，并可以选择指定第一个参数。 调用此方法重载等效于调用 CreateDelegate(Type, Object, MethodInfo, Boolean) 方法重载并为 throwOnBindFailure 指定 true。这两种重载提供非常灵活的用于创建委托的方式。可以使用这两种重载创建静态方法或实例方法的委托，并可以选择指定第一个参数。 调用此方法重载等效于调用 CreateDelegate(Type, Object, MethodInfo, Boolean) 方法重载并为 throwOnBindFailure 指定 true。这两种重载提供非常灵活的用于创建委托的方式。可以使用这两种重载创建静态方法或实例方法的委托，并可以选择指定第一个参数。

说明 说明

如果不提供第一个参数，则使用 CreateDelegate(Type, MethodInfo) 方法重载以获得更好的性能。

委托类型和方法必须具有兼容的返回类型。即，method 的返回类型必须可以分配给 type 的返回类型。 委托类型和方法必须具有兼容的返回类型。即，method 的返回类型必须可以分配给 type 的返回类型。

如果提供了 firstArgument，则在每次调用委托时将其传递给 method；firstArgument 被称为绑定到委托，而委托被称为通过其第一个参数封闭。如果 method 为 static（在 Visual Basic 中为 Shared），则调用委托时提供的参数列表包括除第一个参数以外的所有参数；如果 method 为实例方法，则 firstArgument 被传递给隐藏的实例参数（在 C# 中由 this 表示，在 Visual Basic 中由 Me 表示）。 如果提供了 firstArgument，则在每次调用委托时将其传递给 method；firstArgument 被称为绑定到委托，而委托被称为通过其第一个参数封闭。如果 method 为 static（在 Visual Basic 中为 Shared），则调用委托时提供的参数列表包括除第一个参数以外的所有参数；如果 method 为实例方法，则 firstArgument 被传递给隐藏的实例参数（在 C# 中由 this 表示，在 Visual Basic 中由 Me 表示）。

如果提供了 firstArgument，则 method 的第一个参数必须为引用类型，并且 firstArgument 必须与该类型兼容。

重要说明 重要事项

如果 method 为 static（在 Visual Basic 中为 Shared）并且其第一个参数的类型为 Object 或 ValueType，则 firstArgument 可以为值类型。在这种情况下，firstArgument 会自动装箱。与在 C# 或 Visual Basic 函数调用中不同，任何其他参数都不会发生自动装箱。 如果 method 为 static（在 Visual Basic 中为 Shared）并且其第一个参数的类型为 Object 或 ValueType，则 firstArgument 可以为值类型。在这种情况下，firstArgument 会自动装箱。与在 C# 或 Visual Basic 函数调用中不同，任何其他参数都不会发生自动装箱。 如果 method 为 static（在 Visual Basic 中为 Shared）并且其第一个参数的类型为 Object 或 ValueType，则 firstArgument 可以为值类型。在这种情况下，firstArgument 会自动装箱。与在 C# 或 Visual Basic 函数调用中不同，任何其他参数都不会发生自动装箱。

如果 firstArgument 为空引用并且 method 为实例方法，则结果取决于委托类型 type 的签名和 method 的签名：

  • 如果 type 的签名显式包括 method 的第一个隐藏参数，则委托被称为表示开放的实例方法。调用委托时，参数列表中的第一个参数被传递给 method 的隐藏实例参数。 如果 type 的签名显式包括 method 的第一个隐藏参数，则委托被称为表示开放的实例方法。调用委托时，参数列表中的第一个参数被传递给 method 的隐藏实例参数。

  • 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为通过空引用封闭。调用委托类似于对空实例调用实例方法，执行此操作不是特别有用。 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为通过空引用封闭。调用委托类似于对空实例调用实例方法，执行此操作不是特别有用。

如果 firstArgument 为空引用并且 method 为静态方法，则结果取决于委托类型 type 的签名和 method 的签名：

  • 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为表示开放的静态方法。这是静态方法最常见的情况。在这种情况下，可以使用 CreateDelegate(Type, MethodInfo) 方法重载获得略优的性能。 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为表示开放的静态方法。这是静态方法最常见的情况。在这种情况下，可以使用 CreateDelegate(Type, MethodInfo) 方法重载获得略优的性能。 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为表示开放的静态方法。这是静态方法最常见的情况。在这种情况下，可以使用 CreateDelegate(Type, MethodInfo) 方法重载获得略优的性能。

  • 如果 type 的签名以 method 的第二个参数开头，并且其余参数类型均兼容，则委托被称为通过空引用封闭。调用委托时，空引用被传递给 method 的第一个参数。 如果 type 的签名以 method 的第二个参数开头，并且其余参数类型均兼容，则委托被称为通过空引用封闭。调用委托时，空引用被传递给 method 的第一个参数。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。

兼容的参数类型和返回类型

委托的参数类型和返回类型必须与委托所表示的方法的参数类型和返回类型兼容；但类型不必精确匹配。

说明 说明

在 .NET Framework 1.0 和 1.1 版中，类型必须精确匹配。

如果委托参数的类型的限制性强于方法参数的类型，则该委托的参数与该方法的相应参数兼容，因为这可保证传递给委托的参数可以安全地传递给方法。

同样，如果方法的返回类型的限制性强于委托的返回类型，则该委托的返回类型与该方法的返回类型兼容，因为这可保证方法的返回值可以安全地强制转换为委托的返回类型。

例如，具有类型为 Hashtable 的参数和 Object 返回类型的委托可以表示具有类型为 Object 的参数和类型为 Hashtable 的返回值的方法。

确定委托可以表示的方法

CreateDelegate 的此重载所提供的灵活性还表现在任何给定的委托都可以表示方法签名和方法种类（静态与实例）的四种不同组合。考虑具有一个 C 类型参数的 D 委托类型。下面描述 D 可以表示的方法，忽略返回类型，因为返回类型在所有情况下都必须匹配： CreateDelegate 的此重载所提供的灵活性还表现在任何给定的委托都可以表示方法签名和方法种类（静态与实例）的四种不同组合。考虑具有一个 C 类型参数的 D 委托类型。下面描述 D 可以表示的方法，忽略返回类型，因为返回类型在所有情况下都必须匹配： CreateDelegate 的此重载所提供的灵活性还表现在任何给定的委托都可以表示方法签名和方法种类（静态与实例）的四种不同组合。考虑具有一个 C 类型参数的 D 委托类型。下面描述 D 可以表示的方法，忽略返回类型，因为返回类型在所有情况下都必须匹配：

  • D 可以表示任何仅具有一个 C 类型的参数的实例方法，与实例方法所属的类型无关。调用 CreateDelegate 时，firstArgument 是 method 所属类型的实例，并且结果委托被称为通过该实例封闭。（一般而言，如果 firstArgument 为空引用，则 D 还可以通过空引用封闭。） D 可以表示任何仅具有一个 C 类型的参数的实例方法，与实例方法所属的类型无关。调用 CreateDelegate 时，firstArgument 是 method 所属类型的实例，并且结果委托被称为通过该实例封闭。（一般而言，如果 firstArgument 为空引用，则 D 还可以通过空引用封闭。） D 可以表示任何仅具有一个 C 类型的参数的实例方法，与实例方法所属的类型无关。调用 CreateDelegate 时，firstArgument 是 method 所属类型的实例，并且结果委托被称为通过该实例封闭。（一般而言，如果 firstArgument 为空引用，则 D 还可以通过空引用封闭。）

  • D 可以表示没有参数的 C 的实例方法。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的实例方法，并且每次调用时都必须提供 C 的实例。 D 可以表示没有参数的 C 的实例方法。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的实例方法，并且每次调用时都必须提供 C 的实例。 D 可以表示没有参数的 C 的实例方法。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的实例方法，并且每次调用时都必须提供 C 的实例。

  • D 可以表示采用一个 C 类型的参数的静态方法，并且该方法可以属于任何类型。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的静态方法，并且每次调用时都必须提供 C 的实例。 D 可以表示采用一个 C 类型的参数的静态方法，并且该方法可以属于任何类型。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的静态方法，并且每次调用时都必须提供 C 的实例。 D 可以表示采用一个 C 类型的参数的静态方法，并且该方法可以属于任何类型。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的静态方法，并且每次调用时都必须提供 C 的实例。

  • D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为空引用，则 D 通过空引用封闭。） D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为空引用，则 D 通过空引用封闭。） D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为空引用，则 D 通过空引用封闭。） D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为空引用，则 D 通过空引用封闭。） D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为空引用，则 D 通过空引用封闭。）

本节包含三个代码示例。第一个示例演示可以创建的四种委托：通过实例方法封闭的委托、通过实例方法开放的委托、通过静态方法开放的委托和通过静态方法封闭的委托。 本节包含三个代码示例。第一个示例演示可以创建的四种委托：通过实例方法封闭的委托、通过实例方法开放的委托、通过静态方法开放的委托和通过静态方法封闭的委托。

第二个代码示例演示兼容的参数类型和返回类型。

第三个代码示例定义单个委托类型，并显示该委托类型可以表示的所有方法。

示例 1

下面的代码示例演示可以使用此 CreateDelegate 方法重载创建委托的四种方式。

说明 说明

有两种 CreateDelegate 方法重载，它们指定 firstArgument 和 MethodInfo；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。 有两种 CreateDelegate 方法重载，它们指定 firstArgument 和 MethodInfo；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。

该示例声明一个 C 类和三个委托类型，前者包含一个静态方法 M2 和一个实例方法 M1，后者包含接受 C 的一个实例和一个字符串的 D1、接受一个字符串的 D2 和不带参数的 D3。

另一个名为 Example 的类包含创建委托的代码。

  • 为实例方法 M1 创建 D2 类型的委托，该委托通过 C 的实例封闭。使用不同的字符串调用该委托，以显示始终会使用 C 的绑定实例。 为实例方法 M1 创建 D2 类型的委托，该委托通过 C 的实例封闭。使用不同的字符串调用该委托，以显示始终会使用 C 的绑定实例。

  • 为实例方法 M1 创建一个表示开放式实例方法的 D1 类型的委托。必须在调用委托时传递实例。 为实例方法 M1 创建一个表示开放式实例方法的 D1 类型的委托。必须在调用委托时传递实例。

  • 为静态方法 M2 创建一个表示开放式静态方法的 D2 类型的委托。

  • 最后，为静态方法 M2 创建一个 D3 类型的委托，该委托通过字符串封闭。调用该方法可显示它使用绑定字符串。 最后，为静态方法 M2 创建一个 D3 类型的委托，该委托通过字符串封闭。调用该方法可显示它使用绑定字符串。

Imports System
Imports System.Reflection
Imports System.Security.Permissions

' Declare three delegate types for demonstrating the combinations
' of Shared versus instance methods and open versus closed
' delegates.
'
Public Delegate Sub D1(ByVal c As C, ByVal s As String)
Public Delegate Sub D2(ByVal s As String)
Public Delegate Sub D3()

' A sample class with an instance method and a Shared method.
'
Public Class C
    Private id As Integer
    Public Sub New(ByVal id As Integer)
        Me.id = id
    End Sub 'New

    Public Sub M1(ByVal s As String)
        Console.WriteLine("Instance method M1 on C:  id = {0}, s = {1}", _
            Me.id, s)
    End Sub

    Public Shared Sub M2(ByVal s As String)
        Console.WriteLine("Shared method M2 on C:  s = {0}", s)
    End Sub
End Class

Public Class Example

    Public Shared Sub Main()

        Dim c1 As New C(42)

        ' Get a MethodInfo for each method.
        '
        Dim mi1 As MethodInfo = GetType(C).GetMethod("M1", _
            BindingFlags.Public Or BindingFlags.Instance)
        Dim mi2 As MethodInfo = GetType(C).GetMethod("M2", _
            BindingFlags.Public Or BindingFlags.Static)

        Dim d1 As D1
        Dim d2 As D2
        Dim d3 As D3

        Console.WriteLine(vbLf & "An instance method closed over C.")
        ' In this case, the delegate and the
        ' method must have the same list of argument types; use
        ' delegate type D2 with instance method M1.
        '
        Dim test As [Delegate] = _
            [Delegate].CreateDelegate(GetType(D2), c1, mi1, False)

        ' Because False was specified for throwOnBindFailure
        ' in the call to CreateDelegate, the variable 'test'
        ' contains Nothing if the method fails to bind (for
        ' example, if mi1 happened to represent a method of
        ' some class other than C).
        '
        If test IsNot Nothing Then
            d2 = CType(test, D2)

            ' The same instance of C is used every time the
            ' delegate is invoked.
            d2("Hello, World!")
            d2("Hi, Mom!")
        End If

        Console.WriteLine(vbLf & "An open instance method.")
        ' In this case, the delegate has one more
        ' argument than the instance method; this argument comes
        ' at the beginning, and represents the hidden instance
        ' argument of the instance method. Use delegate type D1
        ' with instance method M1.
        '
        d1 = CType([Delegate].CreateDelegate(GetType(D1), Nothing, mi1), D1)

        ' An instance of C must be passed in each time the
        ' delegate is invoked.
        '
        d1(c1, "Hello, World!")
        d1(New C(5280), "Hi, Mom!")

        Console.WriteLine(vbLf & "An open Shared method.")
        ' In this case, the delegate and the method must
        ' have the same list of argument types; use delegate type
        ' D2 with Shared method M2.
        '
        d2 = CType([Delegate].CreateDelegate(GetType(D2), Nothing, mi2), D2)

        ' No instances of C are involved, because this is a Shared
        ' method.
        '
        d2("Hello, World!")
        d2("Hi, Mom!")

        Console.WriteLine(vbLf & "A Shared method closed over the first argument (String).")
        ' The delegate must omit the first argument of the method.
        ' A string is passed as the firstArgument parameter, and
        ' the delegate is bound to this string. Use delegate type
        ' D3 with Shared method M2.
        '
        d3 = CType([Delegate].CreateDelegate(GetType(D3), "Hello, World!", mi2), D3)

        ' Each time the delegate is invoked, the same string is
        ' used.
        d3()

    End Sub
End Class

' This code example produces the following output:
'
'An instance method closed over C.
'Instance method M1 on C:  id = 42, s = Hello, World!
'Instance method M1 on C:  id = 42, s = Hi, Mom!
'
'An open instance method.
'Instance method M1 on C:  id = 42, s = Hello, World!
'Instance method M1 on C:  id = 5280, s = Hi, Mom!
'
'An open Shared method.
'Shared method M2 on C:  s = Hello, World!
'Shared method M2 on C:  s = Hi, Mom!
'
'A Shared method closed over the first argument (String).
'Shared method M2 on C:  s = Hello, World!
'

using System;
using System.Reflection;
using System.Security.Permissions;

// Declare three delegate types for demonstrating the combinations
// of static versus instance methods and open versus closed
// delegates.
//
public delegate void D1(C c, string s);
public delegate void D2(string s);
public delegate void D3();

// A sample class with an instance method and a static method.
//
public class C
{
    private int id;
    public C(int id) { this.id = id; }

    public void M1(string s)
    {
        Console.WriteLine("Instance method M1 on C:  id = {0}, s = {1}",
            this.id, s);
    }

    public static void M2(string s)
    {
        Console.WriteLine("Static method M2 on C:  s = {0}", s);
    }
}

public class Example
{
    public static void Main()
    {
        C c1 = new C(42);

        // Get a MethodInfo for each method.
        //
        MethodInfo mi1 = typeof(C).GetMethod("M1",
            BindingFlags.Public | BindingFlags.Instance);
        MethodInfo mi2 = typeof(C).GetMethod("M2",
            BindingFlags.Public | BindingFlags.Static);

        D1 d1;
        D2 d2;
        D3 d3;

        Console.WriteLine("\nAn instance method closed over C.");
        // In this case, the delegate and the
        // method must have the same list of argument types; use
        // delegate type D2 with instance method M1.
        //
        Delegate test =
            Delegate.CreateDelegate(typeof(D2), c1, mi1, false);

        // Because false was specified for throwOnBindFailure
        // in the call to CreateDelegate, the variable 'test'
        // contains null if the method fails to bind (for
        // example, if mi1 happened to represent a method of
        // some class other than C).
        //
        if (test != null)
        {
            d2 = (D2) test;

            // The same instance of C is used every time the
            // delegate is invoked.
            d2("Hello, World!");
            d2("Hi, Mom!");
        }

        Console.WriteLine("\nAn open instance method.");
        // In this case, the delegate has one more
        // argument than the instance method; this argument comes
        // at the beginning, and represents the hidden instance
        // argument of the instance method. Use delegate type D1
        // with instance method M1.
        //
        d1 = (D1) Delegate.CreateDelegate(typeof(D1), null, mi1);

        // An instance of C must be passed in each time the
        // delegate is invoked.
        //
        d1(c1, "Hello, World!");
        d1(new C(5280), "Hi, Mom!");

        Console.WriteLine("\nAn open static method.");
        // In this case, the delegate and the method must
        // have the same list of argument types; use delegate type
        // D2 with static method M2.
        //
        d2 = (D2) Delegate.CreateDelegate(typeof(D2), null, mi2);

        // No instances of C are involved, because this is a static
        // method.
        //
        d2("Hello, World!");
        d2("Hi, Mom!");

        Console.WriteLine("\nA static method closed over the first argument (String).");
        // The delegate must omit the first argument of the method.
        // A string is passed as the firstArgument parameter, and
        // the delegate is bound to this string. Use delegate type
        // D3 with static method M2.
        //
        d3 = (D3) Delegate.CreateDelegate(typeof(D3),
            "Hello, World!", mi2);

        // Each time the delegate is invoked, the same string is
        // used.
        d3();
    }
}

/* This code example produces the following output:

An instance method closed over C.
Instance method M1 on C:  id = 42, s = Hello, World!
Instance method M1 on C:  id = 42, s = Hi, Mom!

An open instance method.
Instance method M1 on C:  id = 42, s = Hello, World!
Instance method M1 on C:  id = 5280, s = Hi, Mom!

An open static method.
Static method M2 on C:  s = Hello, World!
Static method M2 on C:  s = Hi, Mom!

A static method closed over the first argument (String).
Static method M2 on C:  s = Hello, World!
 */

示例 2

下面的代码示例演示参数类型和返回类型的兼容性。

说明 说明

此代码示例使用 CreateDelegate(Type, MethodInfo) 方法重载。采用 MethodInfo 的其他重载的用法类似。 此代码示例使用 CreateDelegate(Type, MethodInfo) 方法重载。采用 MethodInfo 的其他重载的用法类似。

该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。 该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。 该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。

该代码示例演示名为 Example 的委托可用于表示 MyMethod 方法。该方法可以绑定到该委托，原因是： 该代码示例演示名为 Example 的委托可用于表示 MyMethod 方法。该方法可以绑定到该委托，原因是：

  • 委托的参数类型 (Derived) 的限制性强于 MyMethod 的参数类型 (Base)，因此将委托的参数传递给 MyMethod 始终是安全的。

  • MyMethod 的返回类型 (Derived) 的限制性强于委托的参数类型 (Base)，因此将方法的返回类型强制转换为委托的返回类型始终是安全的。

该代码示例不生成任何输出。

Imports System
Imports System.Reflection

' Define two classes to use in the demonstration, a base class and
' a class that derives from it.
'
Public Class Base
End Class

Public Class Derived
    Inherits Base

    ' Define a Shared method to use in the demonstration. The method
    ' takes an instance of Base and returns an instance of Derived.
    ' For the purposes of the demonstration, it is not necessary for
    ' the method to do anything useful.
    '
    Public Shared Function MyMethod(ByVal arg As Base) As Derived
        Dim dummy As Base = arg
        Return New Derived()
    End Function

End Class

' Define a delegate that takes an instance of Derived and returns an
' instance of Base.
'
Public Delegate Function Example(ByVal arg As Derived) As Base

Module Test

    Sub Main()

        ' The binding flags needed to retrieve MyMethod.
        Dim flags As BindingFlags = _
            BindingFlags.Public Or BindingFlags.Static

        ' Get a MethodInfo that represents MyMethod.
        Dim minfo As MethodInfo = _
            GetType(Derived).GetMethod("MyMethod", flags)

        ' Demonstrate contravariance of parameter types and covariance
        ' of return types by using the delegate Example to represent
        ' MyMethod. The delegate binds to the method because the
        ' parameter of the delegate is more restrictive than the
        ' parameter of the method (that is, the delegate accepts an
        ' instance of Derived, which can always be safely passed to
        ' a parameter of type Base), and the return type of MyMethod
        ' is more restrictive than the return type of Example (that
        ' is, the method returns an instance of Derived, which can
        ' always be safely cast to type Base).
        '
        Dim ex As Example = CType( _
            [Delegate].CreateDelegate(GetType(Example), minfo), _
            Example _
        )

        ' Execute MyMethod using the delegate Example.
        '
        Dim b As Base = ex(New Derived())
    End Sub
End Module

using System;
using System.Reflection;

// Define two classes to use in the demonstration, a base class and
// a class that derives from it.
//
public class Base {}

public class Derived : Base
{
    // Define a static method to use in the demonstration. The method
    // takes an instance of Base and returns an instance of Derived.
    // For the purposes of the demonstration, it is not necessary for
    // the method to do anything useful.
    //
    public static Derived MyMethod(Base arg)
    {
        Base dummy = arg;
        return new Derived();
    }
}

// Define a delegate that takes an instance of Derived and returns an
// instance of Base.
//
public delegate Base Example(Derived arg);

class Test
{
    public static void Main()
    {
        // The binding flags needed to retrieve MyMethod.
        BindingFlags flags = BindingFlags.Public | BindingFlags.Static;

        // Get a MethodInfo that represents MyMethod.
        MethodInfo minfo = typeof(Derived).GetMethod("MyMethod", flags);

        // Demonstrate contravariance of parameter types and covariance
        // of return types by using the delegate Example to represent
        // MyMethod. The delegate binds to the method because the
        // parameter of the delegate is more restrictive than the
        // parameter of the method (that is, the delegate accepts an
        // instance of Derived, which can always be safely passed to
        // a parameter of type Base), and the return type of MyMethod
        // is more restrictive than the return type of Example (that
        // is, the method returns an instance of Derived, which can
        // always be safely cast to type Base).
        //
        Example ex =
            (Example) Delegate.CreateDelegate(typeof(Example), minfo);

        // Execute MyMethod using the delegate Example.
        //
        Base b = ex(new Derived());
    }
}

using namespace System;
using namespace System::Reflection;

// Define two classes to use in the demonstration, a base class and
// a class that derives from it.
//
public ref class Base {};

public ref class Derived : Base
{
    // Define a static method to use in the demonstration. The method
    // takes an instance of Base and returns an instance of Derived.
    // For the purposes of the demonstration, it is not necessary for
    // the method to do anything useful.
    //
public:
    static Derived^ MyMethod(Base^ arg)
    {
        Base^ dummy = arg;
        return gcnew Derived();
    }
};

// Define a delegate that takes an instance of Derived and returns an
// instance of Base.
//
public delegate Base^ Example(Derived^ arg);

void main()
{
    // The binding flags needed to retrieve MyMethod.
    BindingFlags flags = BindingFlags::Public | BindingFlags::Static;

    // Get a MethodInfo that represents MyMethod.
    MethodInfo^ minfo = Derived::typeid->GetMethod("MyMethod", flags);

    // Demonstrate contravariance of parameter types and covariance
    // of return types by using the delegate Example to represent
    // MyMethod. The delegate binds to the method because the
    // parameter of the delegate is more restrictive than the
    // parameter of the method (that is, the delegate accepts an
    // instance of Derived, which can always be safely passed to
    // a parameter of type Base), and the return type of MyMethod
    // is more restrictive than the return type of Example (that
    // is, the method returns an instance of Derived, which can
    // always be safely cast to type Base).
    //
    Example^ ex =
        (Example^) Delegate::CreateDelegate(Example::typeid, minfo);

    // Execute MyMethod using the delegate Example.
    //
    Base^ b = ex(gcnew Derived());
}

示例 3

下面的代码示例演示单个委托类型可以表示的所有方法，并使用 CreateDelegate 方法创建委托。

说明 说明

有两种 CreateDelegate 方法重载，它们指定 firstArgument 和 MethodInfo；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。 有两种 CreateDelegate 方法重载，它们指定 firstArgument 和 MethodInfo；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。

该代码示例定义两个类 C 和 F 以及一个 D 委托类型，该委托类型具有一个 C 类型的参数。这两个类具有匹配的静态方法和实例方法 M1、M3 和 M4，并且 C 类还包含不带任何参数的实例方法 M2。 该代码示例定义两个类 C 和 F 以及一个 D 委托类型，该委托类型具有一个 C 类型的参数。这两个类具有匹配的静态方法和实例方法 M1、M3 和 M4，并且 C 类还包含不带任何参数的实例方法 M2。

第三个名为 Example 的类包含创建委托的代码。

  • 为 C 类型和 F 类型的实例方法 M1 创建委托；每个委托都通过各自类型的实例封闭。C 类型的方法 M1 显示绑定实例和参数的 ID 属性。 为 C 类型和 F 类型的实例方法 M1 创建委托；每个委托都通过各自类型的实例封闭。C 类型的方法 M1 显示绑定实例和参数的 ID 属性。

  • 为 C 类型的方法 M2 创建委托。这是开放的实例委托，其中委托的参数表示实例方法的第一个隐藏参数。该方法没有其他参数。此方法的调用方式与静态方法类似。 为 C 类型的方法 M2 创建委托。这是开放的实例委托，其中委托的参数表示实例方法的第一个隐藏参数。该方法没有其他参数。此方法的调用方式与静态方法类似。 为 C 类型的方法 M2 创建委托。这是开放的实例委托，其中委托的参数表示实例方法的第一个隐藏参数。该方法没有其他参数。此方法的调用方式与静态方法类似。 为 C 类型的方法 M2 创建委托。这是开放的实例委托，其中委托的参数表示实例方法的第一个隐藏参数。该方法没有其他参数。此方法的调用方式与静态方法类似。

  • 为 C 类型和 F 类型的静态方法 M3 创建委托；这些委托是开放的静态委托。

  • 最后，为 C 类型和 F 类型的静态方法 M4 创建委托；每种方法都将声明类型作为第一个参数，并提供该类型的实例，因此委托通过它们的第一个参数封闭。C 类型的方法 M4 显示绑定实例和参数的 ID 属性。 最后，为 C 类型和 F 类型的静态方法 M4 创建委托；每种方法都将声明类型作为第一个参数，并提供该类型的实例，因此委托通过它们的第一个参数封闭。C 类型的方法 M4 显示绑定实例和参数的 ID 属性。

Imports System
Imports System.Reflection
Imports System.Security.Permissions

' Declare a delegate type. The object of this code example
' is to show all the methods this delegate can bind to.
'
Public Delegate Sub D(ByVal c As C)

' Declare two sample classes, C and F. Class C has an ID
' property so instances can be identified.
'
Public Class C

    Private _id As Integer

    Public ReadOnly Property ID() As Integer
        Get
            Return _id
        End Get
    End Property

    Public Sub New(ByVal newId As Integer)
        Me._id = newId
    End Sub

    Public Sub M1(ByVal c As C)
        Console.WriteLine("Instance method M1(c As C) on C:  this.id = {0}, c.ID = {1}", _
            Me.id, c.ID)
    End Sub

    Public Sub M2()
        Console.WriteLine("Instance method M2() on C:  this.id = {0}", Me.id)
    End Sub

    Public Shared Sub M3(ByVal c As C)
        Console.WriteLine("Shared method M3(c As C) on C:  c.ID = {0}", c.ID)
    End Sub

    Public Shared Sub M4(ByVal c1 As C, ByVal c2 As C)
        Console.WriteLine("Shared method M4(c1 As C, c2 As C) on C:  c1.ID = {0}, c2.ID = {1}", _
            c1.ID, c2.ID)
    End Sub
End Class

Public Class F

    Public Sub M1(ByVal c As C)
        Console.WriteLine("Instance method M1(c As C) on F:  c.ID = {0}", c.ID)
    End Sub

    Public Shared Sub M3(ByVal c As C)
        Console.WriteLine("Shared method M3(c As C) on F:  c.ID = {0}", c.ID)
    End Sub

    Public Shared Sub M4(ByVal f As F, ByVal c As C)
        Console.WriteLine("Shared method M4(f As F, c As C) on F:  c.ID = {0}", c.ID)
    End Sub
End Class

Public Class Example

    Public Shared Sub Main()

        Dim c1 As New C(42)
        Dim c2 As New C(1491)
        Dim f1 As New F()

        Dim d As D

        ' Instance method with one argument of type C.
        Dim cmi1 As MethodInfo = GetType(C).GetMethod("M1")
        ' Instance method with no arguments.
        Dim cmi2 As MethodInfo = GetType(C).GetMethod("M2")
        ' Shared method with one argument of type C.
        Dim cmi3 As MethodInfo = GetType(C).GetMethod("M3")
        ' Shared method with two arguments of type C.
        Dim cmi4 As MethodInfo = GetType(C).GetMethod("M4")

        ' Instance method with one argument of type C.
        Dim fmi1 As MethodInfo = GetType(F).GetMethod("M1")
        ' Shared method with one argument of type C.
        Dim fmi3 As MethodInfo = GetType(F).GetMethod("M3")
        ' Shared method with an argument of type F and an
        ' argument of type C.
        Dim fmi4 As MethodInfo = GetType(F).GetMethod("M4")

        Console.WriteLine(vbLf & "An instance method on any type, with an argument of type C.")
        ' D can represent any instance method that exactly matches its
        ' signature. Methods on C and F are shown here.
        '
        d = CType([Delegate].CreateDelegate(GetType(D), c1, cmi1), D)
        d(c2)
        d = CType([Delegate].CreateDelegate(GetType(D), f1, fmi1), D)
        d(c2)

        Console.WriteLine(vbLf & "An instance method on C with no arguments.")
        ' D can represent an instance method on C that has no arguments;
        ' in this case, the argument of D represents the hidden first
        ' argument of any instance method. The delegate acts like a
        ' Shared method, and an instance of C must be passed each time
        ' it is invoked.
        '
        d = CType([Delegate].CreateDelegate(GetType(D), Nothing, cmi2), D)
        d(c1)

        Console.WriteLine(vbLf & "A Shared method on any type, with an argument of type C.")
        ' D can represent any Shared method with the same signature.
        ' Methods on F and C are shown here.
        '
        d = CType([Delegate].CreateDelegate(GetType(D), Nothing, cmi3), D)
        d(c1)
        d = CType([Delegate].CreateDelegate(GetType(D), Nothing, fmi3), D)
        d(c1)

        Console.WriteLine(vbLf & "A Shared method on any type, with an argument of")
        Console.WriteLine("    that type and an argument of type C.")
        ' D can represent any Shared method with one argument of the
        ' type the method belongs and a second argument of type C.
        ' In this case, the method is closed over the instance of
        ' supplied for the its first argument, and acts like an instance
        ' method. Methods on F and C are shown here.
        '
        d = CType([Delegate].CreateDelegate(GetType(D), c1, cmi4), D)
        d(c2)
        Dim test As [Delegate] = _
            [Delegate].CreateDelegate(GetType(D), f1, fmi4, false)

        ' This final example specifies False for throwOnBindFailure
        ' in the call to CreateDelegate, so the variable 'test'
        ' contains Nothing if the method fails to bind (for
        ' example, if fmi4 happened to represent a method of
        ' some class other than F).
        '
        If test IsNot Nothing Then
            d = CType(test, D)
            d(c2)
        End If

    End Sub
End Class

' This code example produces the following output:
'
'An instance method on any type, with an argument of type C.
'Instance method M1(c As C) on C:  this.id = 42, c.ID = 1491
'Instance method M1(c As C) on F:  c.ID = 1491
'
'An instance method on C with no arguments.
'Instance method M2() on C:  this.id = 42
'
'A Shared method on any type, with an argument of type C.
'Shared method M3(c As C) on C:  c.ID = 42
'Shared method M3(c As C) on F:  c.ID = 42
'
'A Shared method on any type, with an argument of
'    that type and an argument of type C.
'Shared method M4(c1 As C, c2 As C) on C:  c1.ID = 42, c2.ID = 1491
'Shared method M4(f As F, c As C) on F:  c.ID = 1491
'

using System;
using System.Reflection;
using System.Security.Permissions;

// Declare a delegate type. The object of this code example
// is to show all the methods this delegate can bind to.
//
public delegate void D(C c);

// Declare two sample classes, C and F. Class C has an ID
// property so instances can be identified.
//
public class C
{
    private int id;
    public int ID { get { return id; }}
    public C(int id) { this.id = id; }

    public void M1(C c)
    {
        Console.WriteLine("Instance method M1(C c) on C:  this.id = {0}, c.ID = {1}",
            this.id, c.ID);
    }

    public void M2()
    {
        Console.WriteLine("Instance method M2() on C:  this.id = {0}",
            this.id);
    }

    public static void M3(C c)
    {
        Console.WriteLine("Static method M3(C c) on C:  c.ID = {0}", c.ID);
    }

    public static void M4(C c1, C c2)
    {
        Console.WriteLine("Static method M4(C c1, C c2) on C:  c1.ID = {0}, c2.ID = {1}",
            c1.ID, c2.ID);
    }
}

public class F
{
    public void M1(C c)
    {
        Console.WriteLine("Instance method M1(C c) on F:  c.ID = {0}",
            c.ID);
    }

    public static void M3(C c)
    {
        Console.WriteLine("Static method M3(C c) on F:  c.ID = {0}", c.ID);
    }

    public static void M4(F f, C c)
    {
        Console.WriteLine("Static method M4(F f, C c) on F:  c.ID = {0}",
            c.ID);
    }
}

public class Example
{
    public static void Main()
    {
        C c1 = new C(42);
        C c2 = new C(1491);
        F f1 = new F();

        D d;

        // Instance method with one argument of type C.
        MethodInfo cmi1 = typeof(C).GetMethod("M1");
        // Instance method with no arguments.
        MethodInfo cmi2 = typeof(C).GetMethod("M2");
        // Static method with one argument of type C.
        MethodInfo cmi3 = typeof(C).GetMethod("M3");
        // Static method with two arguments of type C.
        MethodInfo cmi4 = typeof(C).GetMethod("M4");

        // Instance method with one argument of type C.
        MethodInfo fmi1 = typeof(F).GetMethod("M1");
        // Static method with one argument of type C.
        MethodInfo fmi3 = typeof(F).GetMethod("M3");
        // Static method with an argument of type F and an argument
        // of type C.
        MethodInfo fmi4 = typeof(F).GetMethod("M4");

        Console.WriteLine("\nAn instance method on any type, with an argument of type C.");
        // D can represent any instance method that exactly matches its
        // signature. Methods on C and F are shown here.
        //
        d = (D) Delegate.CreateDelegate(typeof(D), c1, cmi1);
        d(c2);
        d = (D) Delegate.CreateDelegate(typeof(D), f1, fmi1);
        d(c2);

        Console.WriteLine("\nAn instance method on C with no arguments.");
        // D can represent an instance method on C that has no arguments;
        // in this case, the argument of D represents the hidden first
        // argument of any instance method. The delegate acts like a
        // static method, and an instance of C must be passed each time
        // it is invoked.
        //
        d = (D) Delegate.CreateDelegate(typeof(D), null, cmi2);
        d(c1);

        Console.WriteLine("\nA static method on any type, with an argument of type C.");
        // D can represent any static method with the same signature.
        // Methods on F and C are shown here.
        //
        d = (D) Delegate.CreateDelegate(typeof(D), null, cmi3);
        d(c1);
        d = (D) Delegate.CreateDelegate(typeof(D), null, fmi3);
        d(c1);

        Console.WriteLine("\nA static method on any type, with an argument of");
        Console.WriteLine("    that type and an argument of type C.");
        // D can represent any static method with one argument of the
        // type the method belongs and a second argument of type C.
        // In this case, the method is closed over the instance of
        // supplied for the its first argument, and acts like an instance
        // method. Methods on F and C are shown here.
        //
        d = (D) Delegate.CreateDelegate(typeof(D), c1, cmi4);
        d(c2);
        Delegate test =
            Delegate.CreateDelegate(typeof(D), f1, fmi4, false);

        // This final example specifies false for throwOnBindFailure
        // in the call to CreateDelegate, so the variable 'test'
        // contains Nothing if the method fails to bind (for
        // example, if fmi4 happened to represent a method of
        // some class other than F).
        //
        if (test != null)
        {
            d = (D) test;
            d(c2);
        }
    }
}

/* This code example produces the following output:

An instance method on any type, with an argument of type C.
Instance method M1(C c) on C:  this.id = 42, c.ID = 1491
Instance method M1(C c) on F:  c.ID = 1491

An instance method on C with no arguments.
Instance method M2() on C:  this.id = 42

A static method on any type, with an argument of type C.
Static method M3(C c) on C:  c.ID = 42
Static method M3(C c) on F:  c.ID = 42

A static method on any type, with an argument of
    that type and an argument of type C.
Static method M4(C c1, C c2) on C:  c1.ID = 42, c2.ID = 1491
Static method M4(F f, C c) on F:  c.ID = 1491
*/
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
MethodInfo


Delegate ..::.CreateDelegate 方法 (Type, Object, String)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, Object, String)
Delegate 类

创建指定类型的委托，该委托表示要对指定的类实例调用的指定实例方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    target As Object, _
    method As String _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    Object target,
    string method
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    Object^ target,
    String^ method
)
static member CreateDelegate :
        type:Type *
        target:Object *
        method:string -> Delegate

参数

type
类型： System Type
要创建的委托的 Type。
target
类型： System Object
类实例，对其调用 method。
method
类型： System String
委托要表示的实例方法的名称。

返回值

类型： System Delegate
指定的类型的委托，表示要对指定的类实例调用的指定的实例方法。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - method 不是实例方法。 - 或 - 无法绑定 method，因为找不到它（举例来说）。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

此方法只为实例方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。 此方法只为实例方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。

此方法重载等效于调用 CreateDelegate(Type, Object, String, Boolean, Boolean) 方法重载，并为 ignoreCase 指定 false，为 throwOnBindFailure 指定 true。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
Object


Delegate ..::.CreateDelegate 方法 (Type, MethodInfo, Boolean)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, MethodInfo, Boolean)
Delegate 类

使用针对绑定失败的指定行为，创建用于表示指定静态方法的指定类型的委托。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    method As MethodInfo, _
    throwOnBindFailure As Boolean _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    MethodInfo method,
    bool throwOnBindFailure
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    MethodInfo^ method,
    bool throwOnBindFailure
)
static member CreateDelegate :
        type:Type *
        method:MethodInfo *
        throwOnBindFailure:bool -> Delegate

参数

type
类型： System Type
要创建的委托的 Type。
method
类型： System.Reflection MethodInfo
描述委托要表示的静态或实例方法的 MethodInfo。
throwOnBindFailure
类型： System Boolean
为 true，表示无法绑定 method 时引发异常；否则为 false。

返回值

类型： System Delegate
表示指定静态方法的指定类型的委托。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - 无法绑定 method，并且 throwOnBindFailure 为 true。 - 或 - method 不是 RuntimeMethodInfo。请参见 反射中的运行时类型。 method 不是 RuntimeMethodInfo。请参见 反射中的运行时类型。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

此方法重载可以创建开放的静态方法委托和开放的实例方法委托，即公开实例方法的第一个隐藏参数的委托。有关详细说明，请参见更一般的 CreateDelegate(Type, Object, MethodInfo, Boolean) 方法重载，它允许您为实例方法或静态方法创建开放或封闭委托的所有组合。 此方法重载可以创建开放的静态方法委托和开放的实例方法委托，即公开实例方法的第一个隐藏参数的委托。有关详细说明，请参见更一般的 CreateDelegate(Type, Object, MethodInfo, Boolean) 方法重载，它允许您为实例方法或静态方法创建开放或封闭委托的所有组合。

说明 说明

当委托不是通过它的第一个参数封闭时，应使用此方法重载，因为在这种情况下速度会更快些。
说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。

兼容的参数类型和返回类型

委托的参数类型和返回类型必须与委托所表示的方法的参数类型和返回类型兼容；但类型不必精确匹配。

说明 说明

在 .NET Framework 1.0 和 1.1 版中，类型必须精确匹配。

如果委托参数的类型的限制性强于方法参数的类型，则该委托的参数与该方法的相应参数兼容，因为这可保证传递给委托的参数可以安全地传递给方法。

同样，如果方法的返回类型的限制性强于委托的返回类型，则该委托的返回类型与该方法的返回类型兼容，因为这可保证方法的返回值可以安全地强制转换为委托的返回类型。

例如，具有类型为 Hashtable 的参数和 Object 返回类型的委托可以表示具有类型为 Object 的参数和类型为 Hashtable 的返回值的方法。

本节包含两个代码示例。第一个示例演示可以使用此方法重载创建的两种委托：通过实例方法开放的委托和通过静态方法开放的委托。 本节包含两个代码示例。第一个示例演示可以使用此方法重载创建的两种委托：通过实例方法开放的委托和通过静态方法开放的委托。

第二个代码示例演示兼容的参数类型和返回类型。

示例 1

下面的代码示例演示可以使用此 CreateDelegate 方法重载创建委托的两种方式。

说明 说明

有两种 CreateDelegate 方法重载，它们指定 MethodInfo 但不指定第一个参数；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。 有两种 CreateDelegate 方法重载，它们指定 MethodInfo 但不指定第一个参数；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。

此示例声明一个 C 类和两个委托类型，前者包含一个静态方法 M2 和一个实例方法 M1，后者包含接受 C 的一个实例和一个字符串的 D1 以及接受一个字符串的 D2。

另一个名为 Example 的类包含创建委托的代码。

  • 为实例方法 M1 创建一个表示开放式实例方法的 D1 类型的委托。必须在调用委托时传递实例。 为实例方法 M1 创建一个表示开放式实例方法的 D1 类型的委托。必须在调用委托时传递实例。

  • 为静态方法 M2 创建一个表示开放式静态方法的 D2 类型的委托。

Imports System
Imports System.Reflection
Imports System.Security.Permissions

' Declare three delegate types for demonstrating the combinations
' of Shared versus instance methods and open versus closed
' delegates.
'
Public Delegate Sub D1(ByVal c As C, ByVal s As String)
Public Delegate Sub D2(ByVal s As String)
Public Delegate Sub D3()

' A sample class with an instance method and a Shared method.
'
Public Class C
    Private id As Integer
    Public Sub New(ByVal id As Integer)
        Me.id = id
    End Sub 'New

    Public Sub M1(ByVal s As String)
        Console.WriteLine("Instance method M1 on C:  id = {0}, s = {1}", _
            Me.id, s)
    End Sub

    Public Shared Sub M2(ByVal s As String)
        Console.WriteLine("Shared method M2 on C:  s = {0}", s)
    End Sub
End Class

Public Class Example

    Public Shared Sub Main()

        Dim c1 As New C(42)

        ' Get a MethodInfo for each method.
        '
        Dim mi1 As MethodInfo = GetType(C).GetMethod("M1", _
            BindingFlags.Public Or BindingFlags.Instance)
        Dim mi2 As MethodInfo = GetType(C).GetMethod("M2", _
            BindingFlags.Public Or BindingFlags.Static)

        Dim d1 As D1
        Dim d2 As D2
        Dim d3 As D3

        Console.WriteLine(vbLf & "An instance method closed over C.")
        ' In this case, the delegate and the
        ' method must have the same list of argument types; use
        ' delegate type D2 with instance method M1.
        '
        Dim test As [Delegate] = _
            [Delegate].CreateDelegate(GetType(D2), c1, mi1, False)

        ' Because False was specified for throwOnBindFailure
        ' in the call to CreateDelegate, the variable 'test'
        ' contains Nothing if the method fails to bind (for
        ' example, if mi1 happened to represent a method of
        ' some class other than C).
        '
        If test IsNot Nothing Then
            d2 = CType(test, D2)

            ' The same instance of C is used every time the
            ' delegate is invoked.
            d2("Hello, World!")
            d2("Hi, Mom!")
        End If

        Console.WriteLine(vbLf & "An open instance method.")
        ' In this case, the delegate has one more
        ' argument than the instance method; this argument comes
        ' at the beginning, and represents the hidden instance
        ' argument of the instance method. Use delegate type D1
        ' with instance method M1.
        '
        d1 = CType([Delegate].CreateDelegate(GetType(D1), Nothing, mi1), D1)

        ' An instance of C must be passed in each time the
        ' delegate is invoked.
        '
        d1(c1, "Hello, World!")
        d1(New C(5280), "Hi, Mom!")

        Console.WriteLine(vbLf & "An open Shared method.")
        ' In this case, the delegate and the method must
        ' have the same list of argument types; use delegate type
        ' D2 with Shared method M2.
        '
        d2 = CType([Delegate].CreateDelegate(GetType(D2), Nothing, mi2), D2)

        ' No instances of C are involved, because this is a Shared
        ' method.
        '
        d2("Hello, World!")
        d2("Hi, Mom!")

        Console.WriteLine(vbLf & "A Shared method closed over the first argument (String).")
        ' The delegate must omit the first argument of the method.
        ' A string is passed as the firstArgument parameter, and
        ' the delegate is bound to this string. Use delegate type
        ' D3 with Shared method M2.
        '
        d3 = CType([Delegate].CreateDelegate(GetType(D3), "Hello, World!", mi2), D3)

        ' Each time the delegate is invoked, the same string is
        ' used.
        d3()

    End Sub
End Class

' This code example produces the following output:
'
'An instance method closed over C.
'Instance method M1 on C:  id = 42, s = Hello, World!
'Instance method M1 on C:  id = 42, s = Hi, Mom!
'
'An open instance method.
'Instance method M1 on C:  id = 42, s = Hello, World!
'Instance method M1 on C:  id = 5280, s = Hi, Mom!
'
'An open Shared method.
'Shared method M2 on C:  s = Hello, World!
'Shared method M2 on C:  s = Hi, Mom!
'
'A Shared method closed over the first argument (String).
'Shared method M2 on C:  s = Hello, World!
'

using System;
using System.Reflection;
using System.Security.Permissions;

// Declare three delegate types for demonstrating the combinations
// of static versus instance methods and open versus closed
// delegates.
//
public delegate void D1(C c, string s);
public delegate void D2(string s);
public delegate void D3();

// A sample class with an instance method and a static method.
//
public class C
{
    private int id;
    public C(int id) { this.id = id; }

    public void M1(string s)
    {
        Console.WriteLine("Instance method M1 on C:  id = {0}, s = {1}",
            this.id, s);
    }

    public static void M2(string s)
    {
        Console.WriteLine("Static method M2 on C:  s = {0}", s);
    }
}

public class Example
{
    public static void Main()
    {
        C c1 = new C(42);

        // Get a MethodInfo for each method.
        //
        MethodInfo mi1 = typeof(C).GetMethod("M1",
            BindingFlags.Public | BindingFlags.Instance);
        MethodInfo mi2 = typeof(C).GetMethod("M2",
            BindingFlags.Public | BindingFlags.Static);

        D1 d1;
        D2 d2;
        D3 d3;

        Console.WriteLine("\nAn instance method closed over C.");
        // In this case, the delegate and the
        // method must have the same list of argument types; use
        // delegate type D2 with instance method M1.
        //
        Delegate test =
            Delegate.CreateDelegate(typeof(D2), c1, mi1, false);

        // Because false was specified for throwOnBindFailure
        // in the call to CreateDelegate, the variable 'test'
        // contains null if the method fails to bind (for
        // example, if mi1 happened to represent a method of
        // some class other than C).
        //
        if (test != null)
        {
            d2 = (D2) test;

            // The same instance of C is used every time the
            // delegate is invoked.
            d2("Hello, World!");
            d2("Hi, Mom!");
        }

        Console.WriteLine("\nAn open instance method.");
        // In this case, the delegate has one more
        // argument than the instance method; this argument comes
        // at the beginning, and represents the hidden instance
        // argument of the instance method. Use delegate type D1
        // with instance method M1.
        //
        d1 = (D1) Delegate.CreateDelegate(typeof(D1), null, mi1);

        // An instance of C must be passed in each time the
        // delegate is invoked.
        //
        d1(c1, "Hello, World!");
        d1(new C(5280), "Hi, Mom!");

        Console.WriteLine("\nAn open static method.");
        // In this case, the delegate and the method must
        // have the same list of argument types; use delegate type
        // D2 with static method M2.
        //
        d2 = (D2) Delegate.CreateDelegate(typeof(D2), null, mi2);

        // No instances of C are involved, because this is a static
        // method.
        //
        d2("Hello, World!");
        d2("Hi, Mom!");

        Console.WriteLine("\nA static method closed over the first argument (String).");
        // The delegate must omit the first argument of the method.
        // A string is passed as the firstArgument parameter, and
        // the delegate is bound to this string. Use delegate type
        // D3 with static method M2.
        //
        d3 = (D3) Delegate.CreateDelegate(typeof(D3),
            "Hello, World!", mi2);

        // Each time the delegate is invoked, the same string is
        // used.
        d3();
    }
}

/* This code example produces the following output:

An instance method closed over C.
Instance method M1 on C:  id = 42, s = Hello, World!
Instance method M1 on C:  id = 42, s = Hi, Mom!

An open instance method.
Instance method M1 on C:  id = 42, s = Hello, World!
Instance method M1 on C:  id = 5280, s = Hi, Mom!

An open static method.
Static method M2 on C:  s = Hello, World!
Static method M2 on C:  s = Hi, Mom!

A static method closed over the first argument (String).
Static method M2 on C:  s = Hello, World!
 */

示例 2

下面的代码示例演示参数类型和返回类型的兼容性。

说明 说明

此代码示例使用 CreateDelegate(Type, MethodInfo) 方法重载。采用 MethodInfo 的其他重载的用法类似。 此代码示例使用 CreateDelegate(Type, MethodInfo) 方法重载。采用 MethodInfo 的其他重载的用法类似。

该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。 该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。 该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。

该代码示例演示名为 Example 的委托可用于表示 MyMethod 方法。该方法可以绑定到该委托，原因是： 该代码示例演示名为 Example 的委托可用于表示 MyMethod 方法。该方法可以绑定到该委托，原因是：

  • 委托的参数类型 (Derived) 的限制性强于 MyMethod 的参数类型 (Base)，因此将委托的参数传递给 MyMethod 始终是安全的。

  • MyMethod 的返回类型 (Derived) 的限制性强于委托的参数类型 (Base)，因此将方法的返回类型强制转换为委托的返回类型始终是安全的。

该代码示例不生成任何输出。

Imports System
Imports System.Reflection

' Define two classes to use in the demonstration, a base class and
' a class that derives from it.
'
Public Class Base
End Class

Public Class Derived
    Inherits Base

    ' Define a Shared method to use in the demonstration. The method
    ' takes an instance of Base and returns an instance of Derived.
    ' For the purposes of the demonstration, it is not necessary for
    ' the method to do anything useful.
    '
    Public Shared Function MyMethod(ByVal arg As Base) As Derived
        Dim dummy As Base = arg
        Return New Derived()
    End Function

End Class

' Define a delegate that takes an instance of Derived and returns an
' instance of Base.
'
Public Delegate Function Example(ByVal arg As Derived) As Base

Module Test

    Sub Main()

        ' The binding flags needed to retrieve MyMethod.
        Dim flags As BindingFlags = _
            BindingFlags.Public Or BindingFlags.Static

        ' Get a MethodInfo that represents MyMethod.
        Dim minfo As MethodInfo = _
            GetType(Derived).GetMethod("MyMethod", flags)

        ' Demonstrate contravariance of parameter types and covariance
        ' of return types by using the delegate Example to represent
        ' MyMethod. The delegate binds to the method because the
        ' parameter of the delegate is more restrictive than the
        ' parameter of the method (that is, the delegate accepts an
        ' instance of Derived, which can always be safely passed to
        ' a parameter of type Base), and the return type of MyMethod
        ' is more restrictive than the return type of Example (that
        ' is, the method returns an instance of Derived, which can
        ' always be safely cast to type Base).
        '
        Dim ex As Example = CType( _
            [Delegate].CreateDelegate(GetType(Example), minfo), _
            Example _
        )

        ' Execute MyMethod using the delegate Example.
        '
        Dim b As Base = ex(New Derived())
    End Sub
End Module

using System;
using System.Reflection;

// Define two classes to use in the demonstration, a base class and
// a class that derives from it.
//
public class Base {}

public class Derived : Base
{
    // Define a static method to use in the demonstration. The method
    // takes an instance of Base and returns an instance of Derived.
    // For the purposes of the demonstration, it is not necessary for
    // the method to do anything useful.
    //
    public static Derived MyMethod(Base arg)
    {
        Base dummy = arg;
        return new Derived();
    }
}

// Define a delegate that takes an instance of Derived and returns an
// instance of Base.
//
public delegate Base Example(Derived arg);

class Test
{
    public static void Main()
    {
        // The binding flags needed to retrieve MyMethod.
        BindingFlags flags = BindingFlags.Public | BindingFlags.Static;

        // Get a MethodInfo that represents MyMethod.
        MethodInfo minfo = typeof(Derived).GetMethod("MyMethod", flags);

        // Demonstrate contravariance of parameter types and covariance
        // of return types by using the delegate Example to represent
        // MyMethod. The delegate binds to the method because the
        // parameter of the delegate is more restrictive than the
        // parameter of the method (that is, the delegate accepts an
        // instance of Derived, which can always be safely passed to
        // a parameter of type Base), and the return type of MyMethod
        // is more restrictive than the return type of Example (that
        // is, the method returns an instance of Derived, which can
        // always be safely cast to type Base).
        //
        Example ex =
            (Example) Delegate.CreateDelegate(typeof(Example), minfo);

        // Execute MyMethod using the delegate Example.
        //
        Base b = ex(new Derived());
    }
}

using namespace System;
using namespace System::Reflection;

// Define two classes to use in the demonstration, a base class and
// a class that derives from it.
//
public ref class Base {};

public ref class Derived : Base
{
    // Define a static method to use in the demonstration. The method
    // takes an instance of Base and returns an instance of Derived.
    // For the purposes of the demonstration, it is not necessary for
    // the method to do anything useful.
    //
public:
    static Derived^ MyMethod(Base^ arg)
    {
        Base^ dummy = arg;
        return gcnew Derived();
    }
};

// Define a delegate that takes an instance of Derived and returns an
// instance of Base.
//
public delegate Base^ Example(Derived^ arg);

void main()
{
    // The binding flags needed to retrieve MyMethod.
    BindingFlags flags = BindingFlags::Public | BindingFlags::Static;

    // Get a MethodInfo that represents MyMethod.
    MethodInfo^ minfo = Derived::typeid->GetMethod("MyMethod", flags);

    // Demonstrate contravariance of parameter types and covariance
    // of return types by using the delegate Example to represent
    // MyMethod. The delegate binds to the method because the
    // parameter of the delegate is more restrictive than the
    // parameter of the method (that is, the delegate accepts an
    // instance of Derived, which can always be safely passed to
    // a parameter of type Base), and the return type of MyMethod
    // is more restrictive than the return type of Example (that
    // is, the method returns an instance of Derived, which can
    // always be safely cast to type Base).
    //
    Example^ ex =
        (Example^) Delegate::CreateDelegate(Example::typeid, minfo);

    // Execute MyMethod using the delegate Example.
    //
    Base^ b = ex(gcnew Derived());
}
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
MethodInfo


Delegate ..::.CreateDelegate 方法 (Type, Type, String)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, Type, String)
Delegate 类

创建指定类型的委托，该委托表示指定类的指定静态方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    target As Type, _
    method As String _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    Type target,
    string method
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    Type^ target,
    String^ method
)
static member CreateDelegate :
        type:Type *
        target:Type *
        method:string -> Delegate

参数

type
类型： System Type
要创建的委托的 Type。
target
类型： System Type
表示实现 method 的类的 Type。
method
类型： System String
委托要表示的静态方法的名称。

返回值

类型： System Delegate
指定类型的委托，该委托表示指定类的指定静态方法。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - target 不是 RuntimeType。 - 或 - target 是一个开放式泛型类型。即，其 ContainsGenericParameters 属性为 true。 target 是一个开放式泛型类型。即，其 ContainsGenericParameters 属性为 true。 - 或 - method 不是 static 方法（在 Visual Basic 中为 Shared 方法）。 - 或 - 无法绑定 method，因为找不到它并且 throwOnBindFailure 为 true（举例来说）。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

此方法只为静态方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。 此方法只为静态方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。

此方法重载等效于调用 CreateDelegate(Type, Type, String, Boolean, Boolean) 方法重载，并为 ignoreCase 指定 false，为 throwOnBindFailure 指定 true。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
Object


Delegate ..::.CreateDelegate 方法 (Type, Object, MethodInfo, Boolean)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, Object, MethodInfo, Boolean)
Delegate 类

使用指定的第一个参数和针对绑定失败的指定行为，创建表示指定的静态方法或实例方法的指定类型的委托。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    firstArgument As Object, _
    method As MethodInfo, _
    throwOnBindFailure As Boolean _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    Object firstArgument,
    MethodInfo method,
    bool throwOnBindFailure
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    Object^ firstArgument,
    MethodInfo^ method,
    bool throwOnBindFailure
)
static member CreateDelegate :
        type:Type *
        firstArgument:Object *
        method:MethodInfo *
        throwOnBindFailure:bool -> Delegate

参数

type
类型： System Type
一个 Type，表示要创建的委托的类型。
firstArgument
类型： System Object
一个 Object，它是委托表示的方法的第一个参数。对于实例方法，它必须与实例类型兼容。 一个 Object，它是委托表示的方法的第一个参数。对于实例方法，它必须与实例类型兼容。
method
类型： System.Reflection MethodInfo
描述委托要表示的静态或实例方法的 MethodInfo。
throwOnBindFailure
类型： System Boolean
为 true，表示无法绑定 method 时引发异常；否则为 false。

返回值

类型： System Delegate
表示指定的静态方法或实例方法的指定类型的委托，如果 throwOnBindFailure 为 false，并且委托无法绑定到 method，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - 无法绑定 method，并且 throwOnBindFailure 为 true。 - 或 - method 不是 RuntimeMethodInfo。请参见 反射中的运行时类型。 method 不是 RuntimeMethodInfo。请参见 反射中的运行时类型。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

此方法重载和 CreateDelegate(Type, Object, MethodInfo) 方法重载（后者在绑定失败时始终引发异常）提供非常灵活的用于创建委托的方式。可以使用这两种方法重载创建静态方法或实例方法的委托，可以提供也可以不提供第一个参数。 此方法重载和 CreateDelegate(Type, Object, MethodInfo) 方法重载（后者在绑定失败时始终引发异常）提供非常灵活的用于创建委托的方式。可以使用这两种方法重载创建静态方法或实例方法的委托，可以提供也可以不提供第一个参数。

说明 说明

如果不提供第一个参数，则使用 CreateDelegate(Type, MethodInfo, Boolean) 方法重载以获得更好的性能。

委托类型和方法必须具有兼容的返回类型。即，method 的返回类型必须可以分配给 type 的返回类型。 委托类型和方法必须具有兼容的返回类型。即，method 的返回类型必须可以分配给 type 的返回类型。

如果提供了 firstArgument，则在每次调用委托时将其传递给 method；firstArgument 被称为绑定到委托，而委托被称为通过其第一个参数封闭。如果 method 为 static（在 Visual Basic 中为 Shared），则调用委托时提供的参数列表包括除第一个参数以外的所有参数；如果 method 为实例方法，则 firstArgument 被传递给隐藏的实例参数（在 C# 中由 this 表示，在 Visual Basic 中由 Me 表示）。 如果提供了 firstArgument，则在每次调用委托时将其传递给 method；firstArgument 被称为绑定到委托，而委托被称为通过其第一个参数封闭。如果 method 为 static（在 Visual Basic 中为 Shared），则调用委托时提供的参数列表包括除第一个参数以外的所有参数；如果 method 为实例方法，则 firstArgument 被传递给隐藏的实例参数（在 C# 中由 this 表示，在 Visual Basic 中由 Me 表示）。

如果提供了 firstArgument，则 method 的第一个参数必须为引用类型，并且 firstArgument 必须与该类型兼容。

重要说明 重要事项

如果 method 为 static（在 Visual Basic 中为 Shared）并且其第一个参数的类型为 Object 或 ValueType，则 firstArgument 可以为值类型。在这种情况下，firstArgument 会自动装箱。与在 C# 或 Visual Basic 函数调用中不同，任何其他参数都不会发生自动装箱。 如果 method 为 static（在 Visual Basic 中为 Shared）并且其第一个参数的类型为 Object 或 ValueType，则 firstArgument 可以为值类型。在这种情况下，firstArgument 会自动装箱。与在 C# 或 Visual Basic 函数调用中不同，任何其他参数都不会发生自动装箱。 如果 method 为 static（在 Visual Basic 中为 Shared）并且其第一个参数的类型为 Object 或 ValueType，则 firstArgument 可以为值类型。在这种情况下，firstArgument 会自动装箱。与在 C# 或 Visual Basic 函数调用中不同，任何其他参数都不会发生自动装箱。

如果 firstArgument 为空引用并且 method 为实例方法，则结果取决于委托类型 type 的签名和 method 的签名：

  • 如果 type 的签名显式包括 method 的第一个隐藏参数，则委托被称为表示开放的实例方法。调用委托时，参数列表中的第一个参数被传递给 method 的隐藏实例参数。 如果 type 的签名显式包括 method 的第一个隐藏参数，则委托被称为表示开放的实例方法。调用委托时，参数列表中的第一个参数被传递给 method 的隐藏实例参数。

  • 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为通过空引用封闭。调用委托类似于对空实例调用实例方法，执行此操作不是特别有用。 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为通过空引用封闭。调用委托类似于对空实例调用实例方法，执行此操作不是特别有用。

如果 firstArgument 为空引用并且 method 为静态方法，则结果取决于委托类型 type 的签名和 method 的签名：

  • 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为表示开放的静态方法。这是静态方法最常见的情况。在这种情况下，可以使用 CreateDelegate(Type, MethodInfo, Boolean) 方法重载获得略优的性能。 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为表示开放的静态方法。这是静态方法最常见的情况。在这种情况下，可以使用 CreateDelegate(Type, MethodInfo, Boolean) 方法重载获得略优的性能。 如果 method 和 type 的签名匹配（即，所有参数类型都兼容），则委托被称为表示开放的静态方法。这是静态方法最常见的情况。在这种情况下，可以使用 CreateDelegate(Type, MethodInfo, Boolean) 方法重载获得略优的性能。

  • 如果 type 的签名以 method 的第二个参数开头，并且其余参数类型均兼容，则委托被称为通过空引用封闭。调用委托时，空引用被传递给 method 的第一个参数。 如果 type 的签名以 method 的第二个参数开头，并且其余参数类型均兼容，则委托被称为通过空引用封闭。调用委托时，空引用被传递给 method 的第一个参数。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。

兼容的参数类型和返回类型

委托的参数类型和返回类型必须与委托所表示的方法的参数类型和返回类型兼容；但类型不必精确匹配。

说明 说明

在 .NET Framework 1.0 和 1.1 版中，类型必须精确匹配。

如果委托参数的类型的限制性强于方法参数的类型，则该委托的参数与该方法的相应参数兼容，因为这可保证传递给委托的参数可以安全地传递给方法。

同样，如果方法的返回类型的限制性强于委托的返回类型，则该委托的返回类型与该方法的返回类型兼容，因为这可保证方法的返回值可以安全地强制转换为委托的返回类型。

例如，具有类型为 Hashtable 的参数和 Object 返回类型的委托可以表示具有类型为 Object 的参数和类型为 Hashtable 的返回值的方法。

确定委托可以表示的方法

CreateDelegate 的此重载所提供的灵活性还表现在任何给定的委托都可以表示方法签名和方法种类（静态与实例）的四种不同组合。考虑具有一个 C 类型参数的 D 委托类型。下面描述 D 可以表示的方法，忽略返回类型，因为返回类型在所有情况下都必须匹配： CreateDelegate 的此重载所提供的灵活性还表现在任何给定的委托都可以表示方法签名和方法种类（静态与实例）的四种不同组合。考虑具有一个 C 类型参数的 D 委托类型。下面描述 D 可以表示的方法，忽略返回类型，因为返回类型在所有情况下都必须匹配： CreateDelegate 的此重载所提供的灵活性还表现在任何给定的委托都可以表示方法签名和方法种类（静态与实例）的四种不同组合。考虑具有一个 C 类型参数的 D 委托类型。下面描述 D 可以表示的方法，忽略返回类型，因为返回类型在所有情况下都必须匹配：

  • D 可以表示任何仅具有一个 C 类型的参数的实例方法，与实例方法所属的类型无关。调用 CreateDelegate 时，firstArgument 是 method 所属类型的实例，并且结果委托被称为通过该实例封闭。（一般而言，如果 firstArgument 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 D 还可以通过空引用封闭。） D 可以表示任何仅具有一个 C 类型的参数的实例方法，与实例方法所属的类型无关。调用 CreateDelegate 时，firstArgument 是 method 所属类型的实例，并且结果委托被称为通过该实例封闭。（一般而言，如果 firstArgument 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 D 还可以通过空引用封闭。） D 可以表示任何仅具有一个 C 类型的参数的实例方法，与实例方法所属的类型无关。调用 CreateDelegate 时，firstArgument 是 method 所属类型的实例，并且结果委托被称为通过该实例封闭。（一般而言，如果 firstArgument 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 D 还可以通过空引用封闭。）

  • D 可以表示没有参数的 C 的实例方法。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的实例方法，并且每次调用时都必须提供 C 的实例。 D 可以表示没有参数的 C 的实例方法。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的实例方法，并且每次调用时都必须提供 C 的实例。 D 可以表示没有参数的 C 的实例方法。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的实例方法，并且每次调用时都必须提供 C 的实例。

  • D 可以表示采用一个 C 类型的参数的静态方法，并且该方法可以属于任何类型。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的静态方法，并且每次调用时都必须提供 C 的实例。 D 可以表示采用一个 C 类型的参数的静态方法，并且该方法可以属于任何类型。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的静态方法，并且每次调用时都必须提供 C 的实例。 D 可以表示采用一个 C 类型的参数的静态方法，并且该方法可以属于任何类型。调用 CreateDelegate 时，firstArgument 为空引用。结果委托表示开放的静态方法，并且每次调用时都必须提供 C 的实例。

  • D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 D 通过空引用封闭。） D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 D 通过空引用封闭。） D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 D 通过空引用封闭。） D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 D 通过空引用封闭。） D 可以表示一个属于 F 类型的静态方法，并且有两个参数，分别为 F 类型和 C 类型。调用 CreateDelegate 时，firstArgument 为 F 的实例。结果委托表示通过 F 的该实例封闭的静态方法。注意，当 F 和 C 为相同类型时，静态方法具有两个该类型的参数。（在这种情况下，如果 firstArgument 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 D 通过空引用封闭。）

本节包含三个代码示例。第一个示例演示可以创建的四种委托：通过实例方法封闭的委托、通过实例方法开放的委托、通过静态方法开放的委托和通过静态方法封闭的委托。 本节包含三个代码示例。第一个示例演示可以创建的四种委托：通过实例方法封闭的委托、通过实例方法开放的委托、通过静态方法开放的委托和通过静态方法封闭的委托。

第二个代码示例演示兼容的参数类型和返回类型。

第三个代码示例定义单个委托类型，并显示该委托类型可以表示的所有方法。

示例 1

下面的代码示例演示可以使用此 CreateDelegate 方法重载创建委托的四种方式。

说明 说明

有两种 CreateDelegate 方法重载，它们指定 firstArgument 和 MethodInfo；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。 有两种 CreateDelegate 方法重载，它们指定 firstArgument 和 MethodInfo；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。

该示例声明一个 C 类和三个委托类型，前者包含一个静态方法 M2 和一个实例方法 M1，后者包含接受 C 的一个实例和一个字符串的 D1、接受一个字符串的 D2 和不带参数的 D3。

另一个名为 Example 的类包含创建委托的代码。

  • 为实例方法 M1 创建 D2 类型的委托，该委托通过 C 的实例封闭。使用不同的字符串调用该委托，以显示始终会使用 C 的绑定实例。 为实例方法 M1 创建 D2 类型的委托，该委托通过 C 的实例封闭。使用不同的字符串调用该委托，以显示始终会使用 C 的绑定实例。

  • 为实例方法 M1 创建一个表示开放式实例方法的 D1 类型的委托。必须在调用委托时传递实例。 为实例方法 M1 创建一个表示开放式实例方法的 D1 类型的委托。必须在调用委托时传递实例。

  • 为静态方法 M2 创建一个表示开放式静态方法的 D2 类型的委托。

  • 最后，为静态方法 M2 创建一个 D3 类型的委托，该委托通过字符串封闭。调用该方法可显示它使用绑定字符串。 最后，为静态方法 M2 创建一个 D3 类型的委托，该委托通过字符串封闭。调用该方法可显示它使用绑定字符串。

Imports System
Imports System.Reflection
Imports System.Security.Permissions

' Declare three delegate types for demonstrating the combinations
' of Shared versus instance methods and open versus closed
' delegates.
'
Public Delegate Sub D1(ByVal c As C, ByVal s As String)
Public Delegate Sub D2(ByVal s As String)
Public Delegate Sub D3()

' A sample class with an instance method and a Shared method.
'
Public Class C
    Private id As Integer
    Public Sub New(ByVal id As Integer)
        Me.id = id
    End Sub 'New

    Public Sub M1(ByVal s As String)
        Console.WriteLine("Instance method M1 on C:  id = {0}, s = {1}", _
            Me.id, s)
    End Sub

    Public Shared Sub M2(ByVal s As String)
        Console.WriteLine("Shared method M2 on C:  s = {0}", s)
    End Sub
End Class

Public Class Example

    Public Shared Sub Main()

        Dim c1 As New C(42)

        ' Get a MethodInfo for each method.
        '
        Dim mi1 As MethodInfo = GetType(C).GetMethod("M1", _
            BindingFlags.Public Or BindingFlags.Instance)
        Dim mi2 As MethodInfo = GetType(C).GetMethod("M2", _
            BindingFlags.Public Or BindingFlags.Static)

        Dim d1 As D1
        Dim d2 As D2
        Dim d3 As D3

        Console.WriteLine(vbLf & "An instance method closed over C.")
        ' In this case, the delegate and the
        ' method must have the same list of argument types; use
        ' delegate type D2 with instance method M1.
        '
        Dim test As [Delegate] = _
            [Delegate].CreateDelegate(GetType(D2), c1, mi1, False)

        ' Because False was specified for throwOnBindFailure
        ' in the call to CreateDelegate, the variable 'test'
        ' contains Nothing if the method fails to bind (for
        ' example, if mi1 happened to represent a method of
        ' some class other than C).
        '
        If test IsNot Nothing Then
            d2 = CType(test, D2)

            ' The same instance of C is used every time the
            ' delegate is invoked.
            d2("Hello, World!")
            d2("Hi, Mom!")
        End If

        Console.WriteLine(vbLf & "An open instance method.")
        ' In this case, the delegate has one more
        ' argument than the instance method; this argument comes
        ' at the beginning, and represents the hidden instance
        ' argument of the instance method. Use delegate type D1
        ' with instance method M1.
        '
        d1 = CType([Delegate].CreateDelegate(GetType(D1), Nothing, mi1), D1)

        ' An instance of C must be passed in each time the
        ' delegate is invoked.
        '
        d1(c1, "Hello, World!")
        d1(New C(5280), "Hi, Mom!")

        Console.WriteLine(vbLf & "An open Shared method.")
        ' In this case, the delegate and the method must
        ' have the same list of argument types; use delegate type
        ' D2 with Shared method M2.
        '
        d2 = CType([Delegate].CreateDelegate(GetType(D2), Nothing, mi2), D2)

        ' No instances of C are involved, because this is a Shared
        ' method.
        '
        d2("Hello, World!")
        d2("Hi, Mom!")

        Console.WriteLine(vbLf & "A Shared method closed over the first argument (String).")
        ' The delegate must omit the first argument of the method.
        ' A string is passed as the firstArgument parameter, and
        ' the delegate is bound to this string. Use delegate type
        ' D3 with Shared method M2.
        '
        d3 = CType([Delegate].CreateDelegate(GetType(D3), "Hello, World!", mi2), D3)

        ' Each time the delegate is invoked, the same string is
        ' used.
        d3()

    End Sub
End Class

' This code example produces the following output:
'
'An instance method closed over C.
'Instance method M1 on C:  id = 42, s = Hello, World!
'Instance method M1 on C:  id = 42, s = Hi, Mom!
'
'An open instance method.
'Instance method M1 on C:  id = 42, s = Hello, World!
'Instance method M1 on C:  id = 5280, s = Hi, Mom!
'
'An open Shared method.
'Shared method M2 on C:  s = Hello, World!
'Shared method M2 on C:  s = Hi, Mom!
'
'A Shared method closed over the first argument (String).
'Shared method M2 on C:  s = Hello, World!
'

using System;
using System.Reflection;
using System.Security.Permissions;

// Declare three delegate types for demonstrating the combinations
// of static versus instance methods and open versus closed
// delegates.
//
public delegate void D1(C c, string s);
public delegate void D2(string s);
public delegate void D3();

// A sample class with an instance method and a static method.
//
public class C
{
    private int id;
    public C(int id) { this.id = id; }

    public void M1(string s)
    {
        Console.WriteLine("Instance method M1 on C:  id = {0}, s = {1}",
            this.id, s);
    }

    public static void M2(string s)
    {
        Console.WriteLine("Static method M2 on C:  s = {0}", s);
    }
}

public class Example
{
    public static void Main()
    {
        C c1 = new C(42);

        // Get a MethodInfo for each method.
        //
        MethodInfo mi1 = typeof(C).GetMethod("M1",
            BindingFlags.Public | BindingFlags.Instance);
        MethodInfo mi2 = typeof(C).GetMethod("M2",
            BindingFlags.Public | BindingFlags.Static);

        D1 d1;
        D2 d2;
        D3 d3;

        Console.WriteLine("\nAn instance method closed over C.");
        // In this case, the delegate and the
        // method must have the same list of argument types; use
        // delegate type D2 with instance method M1.
        //
        Delegate test =
            Delegate.CreateDelegate(typeof(D2), c1, mi1, false);

        // Because false was specified for throwOnBindFailure
        // in the call to CreateDelegate, the variable 'test'
        // contains null if the method fails to bind (for
        // example, if mi1 happened to represent a method of
        // some class other than C).
        //
        if (test != null)
        {
            d2 = (D2) test;

            // The same instance of C is used every time the
            // delegate is invoked.
            d2("Hello, World!");
            d2("Hi, Mom!");
        }

        Console.WriteLine("\nAn open instance method.");
        // In this case, the delegate has one more
        // argument than the instance method; this argument comes
        // at the beginning, and represents the hidden instance
        // argument of the instance method. Use delegate type D1
        // with instance method M1.
        //
        d1 = (D1) Delegate.CreateDelegate(typeof(D1), null, mi1);

        // An instance of C must be passed in each time the
        // delegate is invoked.
        //
        d1(c1, "Hello, World!");
        d1(new C(5280), "Hi, Mom!");

        Console.WriteLine("\nAn open static method.");
        // In this case, the delegate and the method must
        // have the same list of argument types; use delegate type
        // D2 with static method M2.
        //
        d2 = (D2) Delegate.CreateDelegate(typeof(D2), null, mi2);

        // No instances of C are involved, because this is a static
        // method.
        //
        d2("Hello, World!");
        d2("Hi, Mom!");

        Console.WriteLine("\nA static method closed over the first argument (String).");
        // The delegate must omit the first argument of the method.
        // A string is passed as the firstArgument parameter, and
        // the delegate is bound to this string. Use delegate type
        // D3 with static method M2.
        //
        d3 = (D3) Delegate.CreateDelegate(typeof(D3),
            "Hello, World!", mi2);

        // Each time the delegate is invoked, the same string is
        // used.
        d3();
    }
}

/* This code example produces the following output:

An instance method closed over C.
Instance method M1 on C:  id = 42, s = Hello, World!
Instance method M1 on C:  id = 42, s = Hi, Mom!

An open instance method.
Instance method M1 on C:  id = 42, s = Hello, World!
Instance method M1 on C:  id = 5280, s = Hi, Mom!

An open static method.
Static method M2 on C:  s = Hello, World!
Static method M2 on C:  s = Hi, Mom!

A static method closed over the first argument (String).
Static method M2 on C:  s = Hello, World!
 */

示例 2

下面的代码示例演示参数类型和返回类型的兼容性。

说明 说明

此代码示例使用 CreateDelegate(Type, MethodInfo) 方法重载。采用 MethodInfo 的其他重载的用法类似。 此代码示例使用 CreateDelegate(Type, MethodInfo) 方法重载。采用 MethodInfo 的其他重载的用法类似。

该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。 该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。 该代码示例定义名为 Base 的基类和从 Base 派生的名为 Derived 的类。派生类具有一个名为 MyMethod 的 static（在 Visual Basic 中为 Shared）方法，该方法具有一个 Base 类型的参数并且其返回类型为 Derived。该代码示例还定义名为 Example 的委托，该委托具有一个 Derived 类型的参数并且其返回类型为 Base。

该代码示例演示名为 Example 的委托可用于表示 MyMethod 方法。该方法可以绑定到该委托，原因是： 该代码示例演示名为 Example 的委托可用于表示 MyMethod 方法。该方法可以绑定到该委托，原因是：

  • 委托的参数类型 (Derived) 的限制性强于 MyMethod 的参数类型 (Base)，因此将委托的参数传递给 MyMethod 始终是安全的。

  • MyMethod 的返回类型 (Derived) 的限制性强于委托的参数类型 (Base)，因此将方法的返回类型强制转换为委托的返回类型始终是安全的。

该代码示例不生成任何输出。

Imports System
Imports System.Reflection

' Define two classes to use in the demonstration, a base class and
' a class that derives from it.
'
Public Class Base
End Class

Public Class Derived
    Inherits Base

    ' Define a Shared method to use in the demonstration. The method
    ' takes an instance of Base and returns an instance of Derived.
    ' For the purposes of the demonstration, it is not necessary for
    ' the method to do anything useful.
    '
    Public Shared Function MyMethod(ByVal arg As Base) As Derived
        Dim dummy As Base = arg
        Return New Derived()
    End Function

End Class

' Define a delegate that takes an instance of Derived and returns an
' instance of Base.
'
Public Delegate Function Example(ByVal arg As Derived) As Base

Module Test

    Sub Main()

        ' The binding flags needed to retrieve MyMethod.
        Dim flags As BindingFlags = _
            BindingFlags.Public Or BindingFlags.Static

        ' Get a MethodInfo that represents MyMethod.
        Dim minfo As MethodInfo = _
            GetType(Derived).GetMethod("MyMethod", flags)

        ' Demonstrate contravariance of parameter types and covariance
        ' of return types by using the delegate Example to represent
        ' MyMethod. The delegate binds to the method because the
        ' parameter of the delegate is more restrictive than the
        ' parameter of the method (that is, the delegate accepts an
        ' instance of Derived, which can always be safely passed to
        ' a parameter of type Base), and the return type of MyMethod
        ' is more restrictive than the return type of Example (that
        ' is, the method returns an instance of Derived, which can
        ' always be safely cast to type Base).
        '
        Dim ex As Example = CType( _
            [Delegate].CreateDelegate(GetType(Example), minfo), _
            Example _
        )

        ' Execute MyMethod using the delegate Example.
        '
        Dim b As Base = ex(New Derived())
    End Sub
End Module

using System;
using System.Reflection;

// Define two classes to use in the demonstration, a base class and
// a class that derives from it.
//
public class Base {}

public class Derived : Base
{
    // Define a static method to use in the demonstration. The method
    // takes an instance of Base and returns an instance of Derived.
    // For the purposes of the demonstration, it is not necessary for
    // the method to do anything useful.
    //
    public static Derived MyMethod(Base arg)
    {
        Base dummy = arg;
        return new Derived();
    }
}

// Define a delegate that takes an instance of Derived and returns an
// instance of Base.
//
public delegate Base Example(Derived arg);

class Test
{
    public static void Main()
    {
        // The binding flags needed to retrieve MyMethod.
        BindingFlags flags = BindingFlags.Public | BindingFlags.Static;

        // Get a MethodInfo that represents MyMethod.
        MethodInfo minfo = typeof(Derived).GetMethod("MyMethod", flags);

        // Demonstrate contravariance of parameter types and covariance
        // of return types by using the delegate Example to represent
        // MyMethod. The delegate binds to the method because the
        // parameter of the delegate is more restrictive than the
        // parameter of the method (that is, the delegate accepts an
        // instance of Derived, which can always be safely passed to
        // a parameter of type Base), and the return type of MyMethod
        // is more restrictive than the return type of Example (that
        // is, the method returns an instance of Derived, which can
        // always be safely cast to type Base).
        //
        Example ex =
            (Example) Delegate.CreateDelegate(typeof(Example), minfo);

        // Execute MyMethod using the delegate Example.
        //
        Base b = ex(new Derived());
    }
}

using namespace System;
using namespace System::Reflection;

// Define two classes to use in the demonstration, a base class and
// a class that derives from it.
//
public ref class Base {};

public ref class Derived : Base
{
    // Define a static method to use in the demonstration. The method
    // takes an instance of Base and returns an instance of Derived.
    // For the purposes of the demonstration, it is not necessary for
    // the method to do anything useful.
    //
public:
    static Derived^ MyMethod(Base^ arg)
    {
        Base^ dummy = arg;
        return gcnew Derived();
    }
};

// Define a delegate that takes an instance of Derived and returns an
// instance of Base.
//
public delegate Base^ Example(Derived^ arg);

void main()
{
    // The binding flags needed to retrieve MyMethod.
    BindingFlags flags = BindingFlags::Public | BindingFlags::Static;

    // Get a MethodInfo that represents MyMethod.
    MethodInfo^ minfo = Derived::typeid->GetMethod("MyMethod", flags);

    // Demonstrate contravariance of parameter types and covariance
    // of return types by using the delegate Example to represent
    // MyMethod. The delegate binds to the method because the
    // parameter of the delegate is more restrictive than the
    // parameter of the method (that is, the delegate accepts an
    // instance of Derived, which can always be safely passed to
    // a parameter of type Base), and the return type of MyMethod
    // is more restrictive than the return type of Example (that
    // is, the method returns an instance of Derived, which can
    // always be safely cast to type Base).
    //
    Example^ ex =
        (Example^) Delegate::CreateDelegate(Example::typeid, minfo);

    // Execute MyMethod using the delegate Example.
    //
    Base^ b = ex(gcnew Derived());
}

示例 3

下面的代码示例演示单个委托类型可以表示的所有方法。

说明 说明

有两种 CreateDelegate 方法重载，它们指定 firstArgument 和 MethodInfo；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。 有两种 CreateDelegate 方法重载，它们指定 firstArgument 和 MethodInfo；其功能基本相同，不同之处在于一个允许您指定是否在绑定失败时引发异常，而另一个始终引发异常。此代码示例使用这两种重载。

该代码示例定义两个类 C 和 F 以及一个 D 委托类型，该委托类型具有一个 C 类型的参数。这两个类具有匹配的静态方法和实例方法 M1、M3 和 M4，并且 C 类还包含不带任何参数的实例方法 M2。 该代码示例定义两个类 C 和 F 以及一个 D 委托类型，该委托类型具有一个 C 类型的参数。这两个类具有匹配的静态方法和实例方法 M1、M3 和 M4，并且 C 类还包含不带任何参数的实例方法 M2。

第三个名为 Example 的类包含创建委托的代码。

  • 为 C 类型和 F 类型的实例方法 M1 创建委托；每个委托都通过各自类型的实例封闭。C 类型的方法 M1 显示绑定实例和参数的 ID 属性。 为 C 类型和 F 类型的实例方法 M1 创建委托；每个委托都通过各自类型的实例封闭。C 类型的方法 M1 显示绑定实例和参数的 ID 属性。

  • 为 C 类型的方法 M2 创建委托。这是开放的实例委托，其中委托的参数表示实例方法的第一个隐藏参数。该方法没有其他参数。 为 C 类型的方法 M2 创建委托。这是开放的实例委托，其中委托的参数表示实例方法的第一个隐藏参数。该方法没有其他参数。 为 C 类型的方法 M2 创建委托。这是开放的实例委托，其中委托的参数表示实例方法的第一个隐藏参数。该方法没有其他参数。

  • 为 C 类型和 F 类型的静态方法 M3 创建委托；这些委托是开放的静态委托。

  • 最后，为 C 类型和 F 类型的静态方法 M4 创建委托；每种方法都将声明类型作为第一个参数，并提供该类型的实例，因此委托通过它们的第一个参数封闭。C 类型的方法 M4 显示绑定实例和参数的 ID 属性。 最后，为 C 类型和 F 类型的静态方法 M4 创建委托；每种方法都将声明类型作为第一个参数，并提供该类型的实例，因此委托通过它们的第一个参数封闭。C 类型的方法 M4 显示绑定实例和参数的 ID 属性。

Imports System
Imports System.Reflection
Imports System.Security.Permissions

' Declare a delegate type. The object of this code example
' is to show all the methods this delegate can bind to.
'
Public Delegate Sub D(ByVal c As C)

' Declare two sample classes, C and F. Class C has an ID
' property so instances can be identified.
'
Public Class C

    Private _id As Integer

    Public ReadOnly Property ID() As Integer
        Get
            Return _id
        End Get
    End Property

    Public Sub New(ByVal newId As Integer)
        Me._id = newId
    End Sub

    Public Sub M1(ByVal c As C)
        Console.WriteLine("Instance method M1(c As C) on C:  this.id = {0}, c.ID = {1}", _
            Me.id, c.ID)
    End Sub

    Public Sub M2()
        Console.WriteLine("Instance method M2() on C:  this.id = {0}", Me.id)
    End Sub

    Public Shared Sub M3(ByVal c As C)
        Console.WriteLine("Shared method M3(c As C) on C:  c.ID = {0}", c.ID)
    End Sub

    Public Shared Sub M4(ByVal c1 As C, ByVal c2 As C)
        Console.WriteLine("Shared method M4(c1 As C, c2 As C) on C:  c1.ID = {0}, c2.ID = {1}", _
            c1.ID, c2.ID)
    End Sub
End Class

Public Class F

    Public Sub M1(ByVal c As C)
        Console.WriteLine("Instance method M1(c As C) on F:  c.ID = {0}", c.ID)
    End Sub

    Public Shared Sub M3(ByVal c As C)
        Console.WriteLine("Shared method M3(c As C) on F:  c.ID = {0}", c.ID)
    End Sub

    Public Shared Sub M4(ByVal f As F, ByVal c As C)
        Console.WriteLine("Shared method M4(f As F, c As C) on F:  c.ID = {0}", c.ID)
    End Sub
End Class

Public Class Example

    Public Shared Sub Main()

        Dim c1 As New C(42)
        Dim c2 As New C(1491)
        Dim f1 As New F()

        Dim d As D

        ' Instance method with one argument of type C.
        Dim cmi1 As MethodInfo = GetType(C).GetMethod("M1")
        ' Instance method with no arguments.
        Dim cmi2 As MethodInfo = GetType(C).GetMethod("M2")
        ' Shared method with one argument of type C.
        Dim cmi3 As MethodInfo = GetType(C).GetMethod("M3")
        ' Shared method with two arguments of type C.
        Dim cmi4 As MethodInfo = GetType(C).GetMethod("M4")

        ' Instance method with one argument of type C.
        Dim fmi1 As MethodInfo = GetType(F).GetMethod("M1")
        ' Shared method with one argument of type C.
        Dim fmi3 As MethodInfo = GetType(F).GetMethod("M3")
        ' Shared method with an argument of type F and an
        ' argument of type C.
        Dim fmi4 As MethodInfo = GetType(F).GetMethod("M4")

        Console.WriteLine(vbLf & "An instance method on any type, with an argument of type C.")
        ' D can represent any instance method that exactly matches its
        ' signature. Methods on C and F are shown here.
        '
        d = CType([Delegate].CreateDelegate(GetType(D), c1, cmi1), D)
        d(c2)
        d = CType([Delegate].CreateDelegate(GetType(D), f1, fmi1), D)
        d(c2)

        Console.WriteLine(vbLf & "An instance method on C with no arguments.")
        ' D can represent an instance method on C that has no arguments;
        ' in this case, the argument of D represents the hidden first
        ' argument of any instance method. The delegate acts like a
        ' Shared method, and an instance of C must be passed each time
        ' it is invoked.
        '
        d = CType([Delegate].CreateDelegate(GetType(D), Nothing, cmi2), D)
        d(c1)

        Console.WriteLine(vbLf & "A Shared method on any type, with an argument of type C.")
        ' D can represent any Shared method with the same signature.
        ' Methods on F and C are shown here.
        '
        d = CType([Delegate].CreateDelegate(GetType(D), Nothing, cmi3), D)
        d(c1)
        d = CType([Delegate].CreateDelegate(GetType(D), Nothing, fmi3), D)
        d(c1)

        Console.WriteLine(vbLf & "A Shared method on any type, with an argument of")
        Console.WriteLine("    that type and an argument of type C.")
        ' D can represent any Shared method with one argument of the
        ' type the method belongs and a second argument of type C.
        ' In this case, the method is closed over the instance of
        ' supplied for the its first argument, and acts like an instance
        ' method. Methods on F and C are shown here.
        '
        d = CType([Delegate].CreateDelegate(GetType(D), c1, cmi4), D)
        d(c2)
        Dim test As [Delegate] = _
            [Delegate].CreateDelegate(GetType(D), f1, fmi4, false)

        ' This final example specifies False for throwOnBindFailure
        ' in the call to CreateDelegate, so the variable 'test'
        ' contains Nothing if the method fails to bind (for
        ' example, if fmi4 happened to represent a method of
        ' some class other than F).
        '
        If test IsNot Nothing Then
            d = CType(test, D)
            d(c2)
        End If

    End Sub
End Class

' This code example produces the following output:
'
'An instance method on any type, with an argument of type C.
'Instance method M1(c As C) on C:  this.id = 42, c.ID = 1491
'Instance method M1(c As C) on F:  c.ID = 1491
'
'An instance method on C with no arguments.
'Instance method M2() on C:  this.id = 42
'
'A Shared method on any type, with an argument of type C.
'Shared method M3(c As C) on C:  c.ID = 42
'Shared method M3(c As C) on F:  c.ID = 42
'
'A Shared method on any type, with an argument of
'    that type and an argument of type C.
'Shared method M4(c1 As C, c2 As C) on C:  c1.ID = 42, c2.ID = 1491
'Shared method M4(f As F, c As C) on F:  c.ID = 1491
'

using System;
using System.Reflection;
using System.Security.Permissions;

// Declare a delegate type. The object of this code example
// is to show all the methods this delegate can bind to.
//
public delegate void D(C c);

// Declare two sample classes, C and F. Class C has an ID
// property so instances can be identified.
//
public class C
{
    private int id;
    public int ID { get { return id; }}
    public C(int id) { this.id = id; }

    public void M1(C c)
    {
        Console.WriteLine("Instance method M1(C c) on C:  this.id = {0}, c.ID = {1}",
            this.id, c.ID);
    }

    public void M2()
    {
        Console.WriteLine("Instance method M2() on C:  this.id = {0}",
            this.id);
    }

    public static void M3(C c)
    {
        Console.WriteLine("Static method M3(C c) on C:  c.ID = {0}", c.ID);
    }

    public static void M4(C c1, C c2)
    {
        Console.WriteLine("Static method M4(C c1, C c2) on C:  c1.ID = {0}, c2.ID = {1}",
            c1.ID, c2.ID);
    }
}

public class F
{
    public void M1(C c)
    {
        Console.WriteLine("Instance method M1(C c) on F:  c.ID = {0}",
            c.ID);
    }

    public static void M3(C c)
    {
        Console.WriteLine("Static method M3(C c) on F:  c.ID = {0}", c.ID);
    }

    public static void M4(F f, C c)
    {
        Console.WriteLine("Static method M4(F f, C c) on F:  c.ID = {0}",
            c.ID);
    }
}

public class Example
{
    public static void Main()
    {
        C c1 = new C(42);
        C c2 = new C(1491);
        F f1 = new F();

        D d;

        // Instance method with one argument of type C.
        MethodInfo cmi1 = typeof(C).GetMethod("M1");
        // Instance method with no arguments.
        MethodInfo cmi2 = typeof(C).GetMethod("M2");
        // Static method with one argument of type C.
        MethodInfo cmi3 = typeof(C).GetMethod("M3");
        // Static method with two arguments of type C.
        MethodInfo cmi4 = typeof(C).GetMethod("M4");

        // Instance method with one argument of type C.
        MethodInfo fmi1 = typeof(F).GetMethod("M1");
        // Static method with one argument of type C.
        MethodInfo fmi3 = typeof(F).GetMethod("M3");
        // Static method with an argument of type F and an argument
        // of type C.
        MethodInfo fmi4 = typeof(F).GetMethod("M4");

        Console.WriteLine("\nAn instance method on any type, with an argument of type C.");
        // D can represent any instance method that exactly matches its
        // signature. Methods on C and F are shown here.
        //
        d = (D) Delegate.CreateDelegate(typeof(D), c1, cmi1);
        d(c2);
        d = (D) Delegate.CreateDelegate(typeof(D), f1, fmi1);
        d(c2);

        Console.WriteLine("\nAn instance method on C with no arguments.");
        // D can represent an instance method on C that has no arguments;
        // in this case, the argument of D represents the hidden first
        // argument of any instance method. The delegate acts like a
        // static method, and an instance of C must be passed each time
        // it is invoked.
        //
        d = (D) Delegate.CreateDelegate(typeof(D), null, cmi2);
        d(c1);

        Console.WriteLine("\nA static method on any type, with an argument of type C.");
        // D can represent any static method with the same signature.
        // Methods on F and C are shown here.
        //
        d = (D) Delegate.CreateDelegate(typeof(D), null, cmi3);
        d(c1);
        d = (D) Delegate.CreateDelegate(typeof(D), null, fmi3);
        d(c1);

        Console.WriteLine("\nA static method on any type, with an argument of");
        Console.WriteLine("    that type and an argument of type C.");
        // D can represent any static method with one argument of the
        // type the method belongs and a second argument of type C.
        // In this case, the method is closed over the instance of
        // supplied for the its first argument, and acts like an instance
        // method. Methods on F and C are shown here.
        //
        d = (D) Delegate.CreateDelegate(typeof(D), c1, cmi4);
        d(c2);
        Delegate test =
            Delegate.CreateDelegate(typeof(D), f1, fmi4, false);

        // This final example specifies false for throwOnBindFailure
        // in the call to CreateDelegate, so the variable 'test'
        // contains Nothing if the method fails to bind (for
        // example, if fmi4 happened to represent a method of
        // some class other than F).
        //
        if (test != null)
        {
            d = (D) test;
            d(c2);
        }
    }
}

/* This code example produces the following output:

An instance method on any type, with an argument of type C.
Instance method M1(C c) on C:  this.id = 42, c.ID = 1491
Instance method M1(C c) on F:  c.ID = 1491

An instance method on C with no arguments.
Instance method M2() on C:  this.id = 42

A static method on any type, with an argument of type C.
Static method M3(C c) on C:  c.ID = 42
Static method M3(C c) on F:  c.ID = 42

A static method on any type, with an argument of
    that type and an argument of type C.
Static method M4(C c1, C c2) on C:  c1.ID = 42, c2.ID = 1491
Static method M4(F f, C c) on F:  c.ID = 1491
*/
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
MethodInfo


Delegate ..::.CreateDelegate 方法 (Type, Object, String, Boolean)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, Object, String, Boolean)
Delegate 类

创建指定类型的委托，该委托表示要按指定的大小写敏感度对指定类实例调用的指定实例方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    target As Object, _
    method As String, _
    ignoreCase As Boolean _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    Object target,
    string method,
    bool ignoreCase
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    Object^ target,
    String^ method,
    bool ignoreCase
)
static member CreateDelegate :
        type:Type *
        target:Object *
        method:string *
        ignoreCase:bool -> Delegate

参数

type
类型： System Type
要创建的委托的 Type。
target
类型： System Object
类实例，对其调用 method。
method
类型： System String
委托要表示的实例方法的名称。
ignoreCase
类型： System Boolean
一个布尔值，它指示在比较方法名称时是否忽略大小写。

返回值

类型： System Delegate
指定的类型的委托，表示要对指定的类实例调用的指定的实例方法。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - method 不是实例方法。 - 或 - 无法绑定 method，因为找不到它（举例来说）。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

此方法只为实例方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。 此方法只为实例方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。

此方法重载等效于调用 CreateDelegate(Type, Object, String, Boolean, Boolean) 方法重载并为 throwOnBindFailure 指定 true。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
Object


Delegate ..::.CreateDelegate 方法 (Type, Type, String, Boolean)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, Type, String, Boolean)
Delegate 类

使用用于指定是否区分大小写的值创建指定类型的委托，该委托表示指定类的指定静态方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    target As Type, _
    method As String, _
    ignoreCase As Boolean _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    Type target,
    string method,
    bool ignoreCase
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    Type^ target,
    String^ method,
    bool ignoreCase
)
static member CreateDelegate :
        type:Type *
        target:Type *
        method:string *
        ignoreCase:bool -> Delegate

参数

type
类型： System Type
要创建的委托的 Type。
target
类型： System Type
表示实现 method 的类的 Type。
method
类型： System String
委托要表示的静态方法的名称。
ignoreCase
类型： System Boolean
一个布尔值，它指示在比较方法名称时是否忽略大小写。

返回值

类型： System Delegate
指定类型的委托，该委托表示指定类的指定静态方法。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - target 不是 RuntimeType。 - 或 - target 是一个开放式泛型类型。即，其 ContainsGenericParameters 属性为 true。 target 是一个开放式泛型类型。即，其 ContainsGenericParameters 属性为 true。 - 或 - method 不是 static 方法（在 Visual Basic 中为 Shared 方法）。 - 或 - 无法绑定 method，因为找不到它（举例来说）。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

此方法只为静态方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。 此方法只为静态方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。

此方法重载等效于调用 CreateDelegate(Type, Type, String, Boolean, Boolean) 方法重载并为 throwOnBindFailure 指定 true。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
Object


Delegate ..::.CreateDelegate 方法 (Type, Object, String, Boolean, Boolean)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, Object, String, Boolean, Boolean)
Delegate 类

使用用于指定是否区分大小写的值和针对绑定失败的指定行为，创建指定类型的委托，该委托表示要对指定类实例调用的指定实例方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    target As Object, _
    method As String, _
    ignoreCase As Boolean, _
    throwOnBindFailure As Boolean _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    Object target,
    string method,
    bool ignoreCase,
    bool throwOnBindFailure
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    Object^ target,
    String^ method,
    bool ignoreCase,
    bool throwOnBindFailure
)
static member CreateDelegate :
        type:Type *
        target:Object *
        method:string *
        ignoreCase:bool *
        throwOnBindFailure:bool -> Delegate

参数

type
类型： System Type
要创建的委托的 Type。
target
类型： System Object
类实例，对其调用 method。
method
类型： System String
委托要表示的实例方法的名称。
ignoreCase
类型： System Boolean
一个布尔值，它指示在比较方法名称时是否忽略大小写。
throwOnBindFailure
类型： System Boolean
为 true，表示无法绑定 method 时引发异常；否则为 false。

返回值

类型： System Delegate
指定的类型的委托，表示要对指定的类实例调用的指定的实例方法。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - method 不是实例方法。 - 或 - 无法绑定 method，因为找不到它并且 throwOnBindFailure 为 true（举例来说）。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

此方法只为实例方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。 此方法只为实例方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
Object


Delegate ..::.CreateDelegate 方法 (Type, Type, String, Boolean, Boolean)

Delegate
.
.
::
.
CreateDelegate 方法 (Type, Type, String, Boolean, Boolean)
Delegate 类

使用用于指定是否区分大小写的值和针对绑定失败的指定行为，创建指定类型的委托，该委托表示指定类的指定静态方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateDelegate ( _
    type As Type, _
    target As Type, _
    method As String, _
    ignoreCase As Boolean, _
    throwOnBindFailure As Boolean _
) As Delegate
public static Delegate CreateDelegate(
    Type type,
    Type target,
    string method,
    bool ignoreCase,
    bool throwOnBindFailure
)
public:
static Delegate^ CreateDelegate(
    Type^ type,
    Type^ target,
    String^ method,
    bool ignoreCase,
    bool throwOnBindFailure
)
static member CreateDelegate :
        type:Type *
        target:Type *
        method:string *
        ignoreCase:bool *
        throwOnBindFailure:bool -> Delegate

参数

type
类型： System Type
要创建的委托的 Type。
target
类型： System Type
表示实现 method 的类的 Type。
method
类型： System String
委托要表示的静态方法的名称。
ignoreCase
类型： System Boolean
一个布尔值，它指示在比较方法名称时是否忽略大小写。
throwOnBindFailure
类型： System Boolean
为 true，表示无法绑定 method 时引发异常；否则为 false。

返回值

类型： System Delegate
指定类型的委托，该委托表示指定类的指定静态方法。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - method 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | type 不继承 MulticastDelegate。 - 或 - type 不是 RuntimeType。请参见 反射中的运行时类型。 type 不是 RuntimeType。请参见 反射中的运行时类型。 - 或 - target 不是 RuntimeType。 - 或 - target 是一个开放式泛型类型。即，其 ContainsGenericParameters 属性为 true。 target 是一个开放式泛型类型。即，其 ContainsGenericParameters 属性为 true。 - 或 - method 不是 static 方法（在 Visual Basic 中为 Shared 方法）。 - 或 - 无法绑定 method，因为找不到它并且 throwOnBindFailure 为 true（举例来说）。
MissingMethodException | 未找到 type 的 Invoke 方法。
MethodAccessException | 调用方无权访问 method。

此方法只为静态方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。 此方法只为静态方法创建委托。实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共方法的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共方法。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • ReflectionPermission

    用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共方法的授予集限制为调用方的授予集或其子集时，访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共方法。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
CreateDelegate 重载
System 命名空间
Type
MulticastDelegate
ReflectionPermission
Object


Delegate ..::.DynamicInvoke 方法

Delegate
.
.
::
.
DynamicInvoke 方法
Delegate 类

动态调用（后期绑定）由当前委托所表示的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function DynamicInvoke ( _
    ParamArray args As Object() _
) As Object
public Object DynamicInvoke(
    params Object[] args
)
public:
Object^ DynamicInvoke(
    ... array<Object^>^ args
)
member DynamicInvoke :
        args:Object[] -> Object

参数

args
类型：
array<
System Object
>
[]
()
[]

作为参数传递给当前委托所表示的方法的对象数组。
- 或 -
如果当前委托所表示的方法不需要参数，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Object
委托所表示的方法返回的对象。
异常 | 条件
MemberAccessException | 调用方不能访问委托所表示的方法（例如，当该方法为私有时）。 - 或 - args 中列出的参数的数目、顺序或类型无效。
TargetException | 委托所表示的方法是实例方法，目标对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - 对对象或类调用委托所表示的方法，但该对象或类不支持这种方法。
TargetInvocationException | 封装的方法之一引发异常。

此方法调用 DynamicInvokeImpl 方法。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
System 命名空间
DynamicInvokeImpl
Object


Delegate ..::.DynamicInvokeImpl 方法

Delegate
.
.
::
.
DynamicInvokeImpl 方法
Delegate 类

动态调用（后期绑定）由当前委托所表示的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function DynamicInvokeImpl ( _
    args As Object() _
) As Object
protected virtual Object DynamicInvokeImpl(
    Object[] args
)
protected:
virtual Object^ DynamicInvokeImpl(
    array<Object^>^ args
)
abstract DynamicInvokeImpl :
        args:Object[] -> Object
override DynamicInvokeImpl :
        args:Object[] -> Object

参数

args
类型：
array<
System Object
>
[]
()
[]

作为参数传递给当前委托所表示的方法的对象数组。
- 或 -
如果当前委托所表示的方法不需要参数，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Object
委托所表示的方法返回的对象。
异常 | 条件
MemberAccessException | 调用方不能访问委托所表示的方法（例如，当该方法为私有时）。 - 或 - args 中列出的参数的数目、顺序或类型无效。
TargetException | 委托所表示的方法是实例方法，目标对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - 对对象或类调用委托所表示的方法，但该对象或类不支持这种方法。
TargetInvocationException | 封装的方法之一引发异常。

此方法实现 DynamicInvoke 方法。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
System 命名空间
DynamicInvoke
Object


Delegate ..::.Equals 方法

Delegate
.
.
::
.
Equals 方法
Delegate 类

确定指定的对象和当前委托的类型是否相同，是否共享相同的目标、方法和调用列表。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与当前委托进行比较的对象。

返回值

类型： System Boolean
如果 obj 和当前委托有相同的目标、方法和调用列表，则为 true；否则为 false。
异常 | 条件
MemberAccessException | 调用方不能访问委托所表示的方法（例如，当该方法为私有时）。

如果两个委托的类型不相同，则它们被视为不相等。

重要说明 重要事项

在 .NET Framework 1.0 和 1.1 版中，如果两个委托的目标、方法和调用列表都相等，则即使这两个委托的类型不相同，它们也被视为相等。

按照以下方式比较这些方法和目标是否相等：

  • 如果所比较的两种方法都是静态的且对同一类为同一方法，则这些方法被视为相等，这些目标也被视为相等。

  • 如果所比较的两种方法都是实例方法且对同一个对象为同一种方法，则这些方法被视为相等，这些目标也被视为相等。

  • 否则，这些方法被视为不相等，这些目标也被视为不相等。

仅当两个调用列表具有相同顺序，并且两个列表的对应元素表示相同的方法和目标时，这两个调用列表才会被视为相同。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
System 命名空间
Object


Delegate ..::.GetHashCode 方法

Delegate
.
.
::
.
GetHashCode 方法
Delegate 类

返回委托的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
委托的哈希代码。

此方法的返回值决不能持久，这有两个原因。首先，可能改变类的哈希函数以生成一个更好的分布，并使旧哈希函数中的所有值都无用。其次，该类的默认实现不保证不同的实例返回相同的值。 此方法的返回值决不能持久，这有两个原因。首先，可能改变类的哈希函数以生成一个更好的分布，并使旧哈希函数中的所有值都无用。其次，该类的默认实现不保证不同的实例返回相同的值。 此方法的返回值决不能持久，这有两个原因。首先，可能改变类的哈希函数以生成一个更好的分布，并使旧哈希函数中的所有值都无用。其次，该类的默认实现不保证不同的实例返回相同的值。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
System 命名空间
Object GetHashCode


Delegate ..::.GetInvocationList 方法

Delegate
.
.
::
.
GetInvocationList 方法
Delegate 类

返回委托的调用列表。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetInvocationList As Delegate()
public virtual Delegate[] GetInvocationList()
public:
virtual array<Delegate^>^ GetInvocationList()
abstract GetInvocationList : unit -> Delegate[]
override GetInvocationList : unit -> Delegate[]

返回值

类型：
array<
System Delegate
>
[]
()
[]

委托构成的数组，表示当前委托的调用列表。

数组中的每个委托都仅表示一种方法。

数组中委托的顺序与当前委托调用数组中那些委托所表示方法的顺序相同。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
System 命名空间


Delegate ..::.GetMethodImpl 方法

Delegate
.
.
::
.
GetMethodImpl 方法
Delegate 类

获取当前委托所表示的静态方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function GetMethodImpl As MethodInfo
protected virtual MethodInfo GetMethodImpl()
protected:
virtual MethodInfo^ GetMethodImpl()
abstract GetMethodImpl : unit -> MethodInfo
override GetMethodImpl : unit -> MethodInfo

返回值

类型： System.Reflection MethodInfo
描述当前委托表示的静态方法的 MethodInfo。
异常 | 条件
MemberAccessException | 调用方不能访问委托所表示的方法（例如，当该方法为私有时）。

仅在当前委托表示静态方法时才可应用此方法。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
System 命名空间
MethodInfo
Method


Delegate ..::.GetObjectData 方法

Delegate
.
.
::
.
GetObjectData 方法
Delegate 类

不支持。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public virtual void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
)
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
不支持。
context
类型： System.Runtime.Serialization StreamingContext
不支持。

实现

异常 | 条件
NotSupportedException | 不支持此方法。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
System 命名空间
ISerializable
SerializationInfo
StreamingContext


Delegate ..::.Remove 方法

Delegate
.
.
::
.
Remove 方法
Delegate 类

从一个委托的调用列表中移除另一个委托的最后一个调用列表。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Remove ( _
    source As Delegate, _
    value As Delegate _
) As Delegate
public static Delegate Remove(
    Delegate source,
    Delegate value
)
public:
static Delegate^ Remove(
    Delegate^ source,
    Delegate^ value
)
static member Remove :
        source:Delegate *
        value:Delegate -> Delegate

参数

source
类型： System Delegate
委托，将从中移除 value 的调用列表。
value
类型： System Delegate
委托，它提供将从其中移除 source 的调用列表的调用列表。

返回值

类型： System Delegate
一个新委托，其调用列表的构成方法为：获取 source 的调用列表，如果在 source 的调用列表中找到了 value 的调用列表，则从中移除 value 的最后一个调用列表。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或在 source 的调用列表中没有找到 value 的调用列表，则返回 source。如果 value 的调用列表等于 source 的调用列表，或 source 为空引用，则返回空引用。 一个新委托，其调用列表的构成方法为：获取 source 的调用列表，如果在 source 的调用列表中找到了 value 的调用列表，则从中移除 value 的最后一个调用列表。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或在 source 的调用列表中没有找到 value 的调用列表，则返回 source。如果 value 的调用列表等于 source 的调用列表，或 source 为空引用，则返回空引用。 一个新委托，其调用列表的构成方法为：获取 source 的调用列表，如果在 source 的调用列表中找到了 value 的调用列表，则从中移除 value 的最后一个调用列表。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或在 source 的调用列表中没有找到 value 的调用列表，则返回 source。如果 value 的调用列表等于 source 的调用列表，或 source 为空引用，则返回空引用。
异常 | 条件
MemberAccessException | 调用方不能访问委托所表示的方法（例如，当该方法为私有时）。
ArgumentException | 委托类型不匹配。

如果 value 的调用列表与 source 的调用列表中一组相邻的元素相匹配，则认为 source 的调用列表内存在 value 的调用列表。如果 value 的调用列表在 source 的调用列表中多次出现，则移除最后一个匹配项。 如果 value 的调用列表与 source 的调用列表中一组相邻的元素相匹配，则认为 source 的调用列表内存在 value 的调用列表。如果 value 的调用列表在 source 的调用列表中多次出现，则移除最后一个匹配项。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
System 命名空间
RemoveAll
RemoveImpl
Equals


Delegate ..::.RemoveAll 方法

Delegate
.
.
::
.
RemoveAll 方法
Delegate 类

从一个委托的调用列表中移除另一个委托的所有调用列表。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function RemoveAll ( _
    source As Delegate, _
    value As Delegate _
) As Delegate
public static Delegate RemoveAll(
    Delegate source,
    Delegate value
)
public:
static Delegate^ RemoveAll(
    Delegate^ source,
    Delegate^ value
)
static member RemoveAll :
        source:Delegate *
        value:Delegate -> Delegate

参数

source
类型： System Delegate
委托，将从中移除 value 的调用列表。
value
类型： System Delegate
委托，它提供将从其中移除 source 的调用列表的调用列表。

返回值

类型： System Delegate
一个新委托，其调用列表的构成方法为：获取 source 的调用列表，如果在 source 的调用列表中找到了 value 的调用列表，则从中移除 value 的所有调用列表。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或在 source 的调用列表中没有找到 value 的调用列表，则返回 source。如果 value 的调用列表等于 source 的调用列表，如果 source 只包含等于 value 的调用列表的一系列调用列表，或者如果 source 为空引用，则返回空引用。 一个新委托，其调用列表的构成方法为：获取 source 的调用列表，如果在 source 的调用列表中找到了 value 的调用列表，则从中移除 value 的所有调用列表。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或在 source 的调用列表中没有找到 value 的调用列表，则返回 source。如果 value 的调用列表等于 source 的调用列表，如果 source 只包含等于 value 的调用列表的一系列调用列表，或者如果 source 为空引用，则返回空引用。 一个新委托，其调用列表的构成方法为：获取 source 的调用列表，如果在 source 的调用列表中找到了 value 的调用列表，则从中移除 value 的所有调用列表。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或在 source 的调用列表中没有找到 value 的调用列表，则返回 source。如果 value 的调用列表等于 source 的调用列表，如果 source 只包含等于 value 的调用列表的一系列调用列表，或者如果 source 为空引用，则返回空引用。
异常 | 条件
MemberAccessException | 调用方不能访问委托所表示的方法（例如，当该方法为私有时）。
ArgumentException | 委托类型不匹配。

如果 value 的调用列表与 source 的调用列表中一组相邻的元素相匹配，则认为 source 的调用列表内存在 value 的调用列表。如果 value 的调用列表在 source 的调用列表中多次出现，则移除所有调用列表。 如果 value 的调用列表与 source 的调用列表中一组相邻的元素相匹配，则认为 source 的调用列表内存在 value 的调用列表。如果 value 的调用列表在 source 的调用列表中多次出现，则移除所有调用列表。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Delegate 类
Delegate 成员
System 命名空间
Remove
RemoveImpl
Equals


Delegate ..::.RemoveImpl 方法

Delegate
.
.
::
.
RemoveImpl 方法
Delegate 类

从一个委托的调用列表中移除另一个委托的调用列表。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function RemoveImpl ( _
    d As Delegate _
) As Delegate
protected virtual Delegate RemoveImpl(
    Delegate d
)
protected:
virtual Delegate^ RemoveImpl(
    Delegate^ d
)
abstract RemoveImpl :
        d:Delegate -> Delegate
override RemoveImpl :
        d:Delegate -> Delegate

参数

d
类型： System Delegate
委托，它提供要从当前委托的调用列表中移除的调用列表。

返回值

类型： System Delegate
一个新委托，其调用列表的构成方法为：获取当前委托的调用列表，如果在当前委托的调用列表中找到了 value 的调用列表，则从中移除 value 的调用列表。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者在当前委托的调用列表中没有找到 value 的调用列表，则返回当前委托。如果 value 的调用列表等于当前委托的调用列表，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 一个新委托，其调用列表的构成方法为：获取当前委托的调用列表，如果在当前委托的调用列表中找到了 value 的调用列表，则从中移除 value 的调用列表。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者在当前委托的调用列表中没有找到 value 的调用列表，则返回当前委托。如果 value 的调用列表等于当前委托的调用列表，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 一个新委托，其调用列表的构成方法为：获取当前委托的调用列表，如果在当前委托的调用列表中找到了 value 的调用列表，则从中移除 value 的调用列表。如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者在当前委托的调用列表中没有找到 value 的调用列表，则返回当前委托。如果 value 的调用列表等于当前委托的调用列表，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
MemberAccessException | 调用方不能访问委托所表示的方法（例如，当该方法为私有时）。

如果 value 的调用列表与当前委托的调用列表中一组相邻的元素相匹配，则认为当前委托的调用列表内存在 value 的调用列表。如果 value 的调用列表在当前委托的调用列表中多次出现，则移除最后一个匹配项。 如果 value 的调用列表与当前委托的调用列表中一组相邻的元素相匹配，则认为当前委托的调用列表内存在 value 的调用列表。如果 value 的调用列表在当前委托的调用列表中多次出现，则移除最后一个匹配项。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
System 命名空间
Remove
Equals


Delegate 运算符

Delegate 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Delegate 类

Delegate 类型公开以下成员。

名称 说明
页首

参考

Delegate 类
System 命名空间


Delegate ..::.Equality 运算符

Delegate
.
.
::
.
Equality 运算符
Delegate 类

确定指定的委托是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    d1 As Delegate, _
    d2 As Delegate _
) As Boolean
public static bool operator ==(
    Delegate d1,
    Delegate d2
)
public:
static bool operator ==(
    Delegate^ d1,
    Delegate^ d2
)
static let inline (=)
        d1:Delegate *
        d2:Delegate  : bool

参数

d1
类型： System Delegate
要比较的第一个委托。
d2
类型： System Delegate
要比较的第二个委托。

返回值

类型： System Boolean
如果 d1 等于 d2，则为 true；否则为 false。

具有相同的目标、方法和调用列表的同一类型的两个委托被视为相等。

如果两个委托的类型不相同，则它们被视为不相等。

重要说明 重要事项

在 .NET Framework 1.0 和 1.1 版中，如果两个委托的目标、方法和调用列表都相等，则即使这两个委托的类型不相同，它们也被视为相等。

按照以下方式比较这些方法和目标是否相等：

  • 如果所比较的两种方法都是静态的且对同一类为同一方法，则这些方法被视为相等，这些目标也被视为相等。

  • 如果所比较的两种方法都是实例方法且对同一个对象为同一种方法，则这些方法被视为相等，这些目标也被视为相等。

  • 否则，这些方法被视为不相等，这些目标也被视为不相等。

如果两个调用列表有相同的顺序，并且两个列表的对应元素表示相同的方法和目标，则认为这两个调用列表相同。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
System 命名空间
Equals


Delegate ..::.Inequality 运算符

Delegate
.
.
::
.
Inequality 运算符
Delegate 类

确定指定的委托是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    d1 As Delegate, _
    d2 As Delegate _
) As Boolean
public static bool operator !=(
    Delegate d1,
    Delegate d2
)
public:
static bool operator !=(
    Delegate^ d1,
    Delegate^ d2
)
static let inline (<>)
        d1:Delegate *
        d2:Delegate  : bool

参数

d1
类型： System Delegate
要比较的第一个委托。
d2
类型： System Delegate
要比较的第二个委托。

返回值

类型： System Boolean
如果 d1 不等于 d2，则为 true；否则为 false。

如果两个委托的类型不相同，或具有不同的方法、不同的目标或不同的调用列表，则它们被视为不相等。

如果两个委托的类型不相同，则它们被视为不相等。

重要说明 重要事项

在 .NET Framework 1.0 和 1.1 版中，如果两个委托的目标、方法和调用列表都相等，则即使这两个委托的类型不相同，它们也被视为相等。

按照以下方式比较这些方法和目标是否相等：

  • 如果所比较的两种方法都是静态的且对同一类为同一方法，则这些方法被视为相等，这些目标也被视为相等。

  • 如果所比较的两种方法都是实例方法且对同一个对象为同一种方法，则这些方法被视为相等，这些目标也被视为相等。

  • 否则，这些方法被视为不相等，这些目标也被视为不相等。

如果两个调用列表大小不同、顺序排列不同，或其中一个列表至少有一个元素所表示的方法或目标与另一个列表中相对应的元素所表示的不同，则认为这两个调用列表不相等。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Delegate 类
Delegate 成员
System 命名空间
Equals


Delegate 属性

Delegate 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Delegate 类

Delegate 类型公开以下成员。

名称 说明
页首

参考

Delegate 类
System 命名空间


Delegate ..::.Method 属性

Delegate
.
.
::
.
Method 属性
Delegate 类

获取委托所表示的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Method As MethodInfo
    Get
public MethodInfo Method { get; }
public:
property MethodInfo^ Method {
    MethodInfo^ get ();
}
member Method : MethodInfo

属性值

类型： System.Reflection MethodInfo
描述委托所表示的方法的 MethodInfo。
异常 | 条件
MemberAccessException | 调用方不能访问委托所表示的方法（例如，当该方法为私有时）。
  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

Delegate 类
Delegate 成员
System 命名空间
MethodInfo
GetMethodImpl


Delegate ..::.Target 属性

Delegate
.
.
::
.
Target 属性
Delegate 类

获取类实例，当前委托将对其调用实例方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Target As Object
    Get
public Object Target { get; }
public:
property Object^ Target {
    Object^ get ();
}
member Target : Object

属性值

类型： System Object
如果委托表示实例方法，则为当前委托对其调用实例方法的对象；如果委托表示静态方法，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实例方法是指与类的实例相关联的方法；静态方法是指与类本身相关联的方法。

如果委托调用一个或多个实例方法，则此属性返回调用列表中最后一个实例方法的目标。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

Delegate 类
Delegate 成员
System 命名空间


DivideByZeroException 类

DivideByZeroException 类
成员

尝试用零除整数值或十进制数值时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class DivideByZeroException _
    Inherits ArithmeticException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class DivideByZeroException : ArithmeticException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class DivideByZeroException : public ArithmeticException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type DivideByZeroException =
    class
        inherit ArithmeticException
    end

根据 IEEE 754 算法规则，用零除浮点值将产生正无穷大、负无穷大或非数字 (NaN)。浮点运算永远不会引发异常。有关更多信息，请参见Single和 Double。 根据 IEEE 754 算法规则，用零除浮点值将产生正无穷大、负无穷大或非数字 (NaN)。浮点运算永远不会引发异常。有关更多信息，请参见Single和 Double。 根据 IEEE 754 算法规则，用零除浮点值将产生正无穷大、负无穷大或非数字 (NaN)。浮点运算永远不会引发异常。有关更多信息，请参见Single和 Double。

下面的 Microsoft 中间语言 (MSIL) 指令引发 DivideByZeroException：

  • div

  • div.un

  • rem

  • rem.un

DivideByZeroException 使用值为 0x80020012 的 HRESULT COR_E_DIVIDEBYZERO。

有关 DivideByZeroException 实例的初始属性值列表，请参见 DivideByZeroException 构造函数。

System System..::.DivideByZeroExceptionDivideByZeroException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DivideByZeroException 成员
System 命名空间
Exception

其他资源

处理和引发异常


DivideByZeroException 成员

DivideByZeroException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DivideByZeroException 类

尝试用零除整数值或十进制数值时引发的异常。

DivideByZeroException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DivideByZeroException 类
System 命名空间


DivideByZeroException 构造函数

DivideByZeroException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DivideByZeroException 类

初始化 DivideByZeroException 类的新实例。

名称 说明
页首

参考

DivideByZeroException 类
DivideByZeroException 成员
System 命名空间


DivideByZeroException 构造函数

DivideByZeroException 构造函数
DivideByZeroException 类

初始化 DivideByZeroException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public DivideByZeroException()
public:
DivideByZeroException()
new : unit -> DivideByZeroException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“尝试除以零。”。此消息将考虑当前系统区域性。

下表显示 DivideByZeroException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DivideByZeroException 类
DivideByZeroException 成员
DivideByZeroException 重载
System 命名空间


DivideByZeroException 构造函数 (String)

DivideByZeroException 构造函数 (String)
DivideByZeroException 类

使用指定错误信息初始化 DivideByZeroException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public DivideByZeroException(
    string message
)
public:
DivideByZeroException(
    String^ message
)
new :
        message:string -> DivideByZeroException

参数

message
类型： System String
描述该错误的 String。

message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 DivideByZeroException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DivideByZeroException 类
DivideByZeroException 成员
DivideByZeroException 重载
System 命名空间


DivideByZeroException 构造函数 (SerializationInfo, StreamingContext)

DivideByZeroException 构造函数 (SerializationInfo, StreamingContext)
DivideByZeroException 类

用序列化数据初始化 DivideByZeroException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected DivideByZeroException(
    SerializationInfo info,
    StreamingContext context
)
protected:
DivideByZeroException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> DivideByZeroException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DivideByZeroException 类
DivideByZeroException 成员
DivideByZeroException 重载
System 命名空间


DivideByZeroException 构造函数 (String, Exception)

DivideByZeroException 构造函数 (String, Exception)
DivideByZeroException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 DivideByZeroException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public DivideByZeroException(
    string message,
    Exception innerException
)
public:
DivideByZeroException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> DivideByZeroException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 DivideByZeroException 实例的初始属性值。

属性类型 | 条件
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DivideByZeroException 类
DivideByZeroException 成员
DivideByZeroException 重载
System 命名空间
Exception

其他资源

处理和引发异常


DivideByZeroException 方法

DivideByZeroException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DivideByZeroException 类

DivideByZeroException 类型公开以下成员。

名称 说明
页首

参考

DivideByZeroException 类
System 命名空间


DivideByZeroException 属性

DivideByZeroException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DivideByZeroException 类

DivideByZeroException 类型公开以下成员。

名称 说明
页首

参考

DivideByZeroException 类
System 命名空间


DivideByZeroException 事件

DivideByZeroException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DivideByZeroException 类

DivideByZeroException 类型公开以下成员。

名称 说明
页首

参考

DivideByZeroException 类
System 命名空间


DllNotFoundException 类

DllNotFoundException 类
成员

当未找到在 DLL 导入中指定的 DLL 时所引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class DllNotFoundException _
    Inherits TypeLoadException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class DllNotFoundException : TypeLoadException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class DllNotFoundException : public TypeLoadException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type DllNotFoundException =
    class
        inherit TypeLoadException
    end

DllNotFoundException 使用值为 0x80131524 的 HRESULT COR_E_DLLNOTFOUND。

有关 DllNotFoundException 实例的初始属性值列表，请参见 DllNotFoundException 构造函数。

在找不到由 System.Runtime.InteropServices..::.DllImportAttribute 特性或可比较语言构造（如 Visual Basic Declare 语句）定义的动态链接库时，会引发 DllNotFoundException。当公共语言运行时无法加载一个 .NET Framework 程序集时，系统不会引发它。 在找不到由 System.Runtime.InteropServices..::.DllImportAttribute 特性或可比较语言构造（如 Visual Basic Declare 语句）定义的动态链接库时，会引发 DllNotFoundException。当公共语言运行时无法加载一个 .NET Framework 程序集时，系统不会引发它。

请注意，DllImportAttribute 可以指定 DLL 驻留的目录的路径。如果未指定路径，则 Windows 将使用 Dynamic-Link Library Search Order（动态链接库搜索顺序）中所述的搜索顺序。 请注意，DllImportAttribute 可以指定 DLL 驻留的目录的路径。如果未指定路径，则 Windows 将使用 Dynamic-Link Library Search Order（动态链接库搜索顺序）中所述的搜索顺序。

System System..::.DllNotFoundExceptionDllNotFoundException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DllNotFoundException 成员
System 命名空间
Exception

其他资源

处理和引发异常


DllNotFoundException 成员

DllNotFoundException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DllNotFoundException 类

当未找到在 DLL 导入中指定的 DLL 时所引发的异常。

DllNotFoundException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DllNotFoundException 类
System 命名空间


DllNotFoundException 构造函数

DllNotFoundException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DllNotFoundException 类

初始化 DllNotFoundException 类的新实例。

名称 说明
页首

参考

DllNotFoundException 类
DllNotFoundException 成员
System 命名空间


DllNotFoundException 构造函数

DllNotFoundException 构造函数
DllNotFoundException 类

使用默认属性初始化 DllNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public DllNotFoundException()
public:
DllNotFoundException()
new : unit -> DllNotFoundException

下表显示 DllNotFoundException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DllNotFoundException 类
DllNotFoundException 成员
DllNotFoundException 重载
System 命名空间


DllNotFoundException 构造函数 (String)

DllNotFoundException 构造函数 (String)
DllNotFoundException 类

使用指定错误信息初始化 DllNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public DllNotFoundException(
    string message
)
public:
DllNotFoundException(
    String^ message
)
new :
        message:string -> DllNotFoundException

参数

message
类型： System String
解释异常原因的错误信息。

下表显示 DllNotFoundException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DllNotFoundException 类
DllNotFoundException 成员
DllNotFoundException 重载
System 命名空间


DllNotFoundException 构造函数 (SerializationInfo, StreamingContext)

DllNotFoundException 构造函数 (SerializationInfo, StreamingContext)
DllNotFoundException 类

用序列化数据初始化 DllNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected DllNotFoundException(
    SerializationInfo info,
    StreamingContext context
)
protected:
DllNotFoundException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> DllNotFoundException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DllNotFoundException 类
DllNotFoundException 成员
DllNotFoundException 重载
System 命名空间


DllNotFoundException 构造函数 (String, Exception)

DllNotFoundException 构造函数 (String, Exception)
DllNotFoundException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 DllNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public DllNotFoundException(
    string message,
    Exception inner
)
public:
DllNotFoundException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> DllNotFoundException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 DllNotFoundException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DllNotFoundException 类
DllNotFoundException 成员
DllNotFoundException 重载
System 命名空间
Exception

其他资源

处理和引发异常


DllNotFoundException 方法

DllNotFoundException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DllNotFoundException 类

DllNotFoundException 类型公开以下成员。

名称 说明
页首

参考

DllNotFoundException 类
System 命名空间


DllNotFoundException 属性

DllNotFoundException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DllNotFoundException 类

DllNotFoundException 类型公开以下成员。

名称 说明
页首

参考

DllNotFoundException 类
System 命名空间


DllNotFoundException 事件

DllNotFoundException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DllNotFoundException 类

DllNotFoundException 类型公开以下成员。

名称 说明
页首

参考

DllNotFoundException 类
System 命名空间


Double 结构

Double 结构
成员

表示一个双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Double _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of Double),  _
    IEquatable(Of Double)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Double : IComparable, IFormattable,
    IConvertible, IComparable<double>, IEquatable<double>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Double : IComparable,
    IFormattable, IConvertible, IComparable<double>, IEquatable<double>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Double =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<float>
        interface IEquatable<float>
    end

Double 值类型表示一个值介于 -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字，以及 +0 或 -0、PositiveInfinity、NegativeInfinity 和非数字 (NaN)。

Double 符合二进制浮点算法的 IEC 60559:1989 (IEEE 754) 标准。

Double 为比较此类型的实例，将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。有关格式规范代码如何控制值类型的字符串表示形式的信息，请参见 格式化类型、标准数字格式字符串 和 自定义数字格式字符串。 Double 为比较此类型的实例，将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。有关格式规范代码如何控制值类型的字符串表示形式的信息，请参见 格式化类型、标准数字格式字符串 和 自定义数字格式字符串。

使用浮点数

在执行二进制运算时，如果其中一个操作数为 Double，那么另一个操作数必须是整数类型或浮点类型（Double 或 Single）。在执行运算之前，如果另一个操作数不是 Double，应将其转换为 Double，并且至少要使用 Double 的范围和精度来执行运算。如果此运算得到一个数字结果，则结果的类型为 Double。 在执行二进制运算时，如果其中一个操作数为 Double，那么另一个操作数必须是整数类型或浮点类型（Double 或 Single）。在执行运算之前，如果另一个操作数不是 Double，应将其转换为 Double，并且至少要使用 Double 的范围和精度来执行运算。如果此运算得到一个数字结果，则结果的类型为 Double。 在执行二进制运算时，如果其中一个操作数为 Double，那么另一个操作数必须是整数类型或浮点类型（Double 或 Single）。在执行运算之前，如果另一个操作数不是 Double，应将其转换为 Double，并且至少要使用 Double 的范围和精度来执行运算。如果此运算得到一个数字结果，则结果的类型为 Double。

浮点运算符（包括赋值运算符）不会引发异常。在异常情况下，浮点运算的结果为零、无穷或 NaN，如下所述： 浮点运算符（包括赋值运算符）不会引发异常。在异常情况下，浮点运算的结果为零、无穷或 NaN，如下所述：

  • 如果浮点运算的结果对于目标格式来说太小，则运算的结果为零。

  • 如果浮点运算结果的数值对于目标格式来说太大，则运算的结果为 PositiveInfinity 或 NegativeInfinity（具体取决于结果的符号）。

  • 如果浮点运算无效，则运算的结果为 NaN。

  • 如果浮点运算的一个或两个操作数为 NaN，则运算的结果为 NaN。

请记住，浮点数只能近似于十进制数字，浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下，Double 值的精度是 15 个十进制位，但内部维护的最大精度是 17 位。浮点数的精度有几种结果： 请记住，浮点数只能近似于十进制数字，浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下，Double 值的精度是 15 个十进制位，但内部维护的最大精度是 17 位。浮点数的精度有几种结果： 请记住，浮点数只能近似于十进制数字，浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下，Double 值的精度是 15 个十进制位，但内部维护的最大精度是 17 位。浮点数的精度有几种结果：

  • 特定精度下看似相等的两个浮点数可能并不相等，因为它们的最小有效位数不同。

  • 由于浮点数可能无法精确近似于十进制数，如果使用十进制数，则使用浮点数的数学或比较运算可能不会产生相同的结果。

  • 如果涉及浮点数，值可能不往返。值的往返是指，某个运算将原始浮点数转换为另一种格式，而反向运算又将转换后的格式转换回浮点数，且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改，往返可能会失败。 如果涉及浮点数，值可能不往返。值的往返是指，某个运算将原始浮点数转换为另一种格式，而反向运算又将转换后的格式转换回浮点数，且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改，往返可能会失败。 如果涉及浮点数，值可能不往返。值的往返是指，某个运算将原始浮点数转换为另一种格式，而反向运算又将转换后的格式转换回浮点数，且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改，往返可能会失败。

此外，由于 Double 类型的精度损失，使用 Double 值进行的算数运算和赋值运算的结果在不同平台上可能稍有不同。例如，分配文本 Double 值的结果可能在 32 位和 64 位版本的 .NET Framework 中有所不同。下面的示例阐释了为 Double 变量分配文本值 -4.42330604244772E-305 与分配值为 -4.42330604244772E-305 的变量之间的差异。请注意在这种情况下，Parse(String) 方法的结果不会受到精度损失。 此外，由于 Double 类型的精度损失，使用 Double 值进行的算数运算和赋值运算的结果在不同平台上可能稍有不同。例如，分配文本 Double 值的结果可能在 32 位和 64 位版本的 .NET Framework 中有所不同。下面的示例阐释了为 Double 变量分配文本值 -4.42330604244772E-305 与分配值为 -4.42330604244772E-305 的变量之间的差异。请注意在这种情况下，Parse(String) 方法的结果不会受到精度损失。 此外，由于 Double 类型的精度损失，使用 Double 值进行的算数运算和赋值运算的结果在不同平台上可能稍有不同。例如，分配文本 Double 值的结果可能在 32 位和 64 位版本的 .NET Framework 中有所不同。下面的示例阐释了为 Double 变量分配文本值 -4.42330604244772E-305 与分配值为 -4.42330604244772E-305 的变量之间的差异。请注意在这种情况下，Parse(String) 方法的结果不会受到精度损失。 此外，由于 Double 类型的精度损失，使用 Double 值进行的算数运算和赋值运算的结果在不同平台上可能稍有不同。例如，分配文本 Double 值的结果可能在 32 位和 64 位版本的 .NET Framework 中有所不同。下面的示例阐释了为 Double 变量分配文本值 -4.42330604244772E-305 与分配值为 -4.42330604244772E-305 的变量之间的差异。请注意在这种情况下，Parse(String) 方法的结果不会受到精度损失。

Dim value As Double = -4.42330604244772E-305

Dim fromLiteral As Double = -4.42330604244772E-305
Dim fromVariable As Double = value
Dim fromParse As Double = Double.Parse("-4.42330604244772E-305")

Console.WriteLine("Double value from literal: {0,29:R}", fromLiteral)
Console.WriteLine("Double value from variable: {0,28:R}", fromVariable)
Console.WriteLine("Double value from Parse method: {0,24:R}", fromParse)
' On 32-bit versions of the .NET Framework, the output is:
'    Double value from literal:        -4.42330604244772E-305
'    Double value from variable:       -4.42330604244772E-305
'    Double value from Parse method:   -4.42330604244772E-305
'
' On other versions of the .NET Framework, the output is:
'    Double value from literal:        -4.4233060424477198E-305
'    Double value from variable:       -4.4233060424477198E-305
'    Double value from Parse method:     -4.42330604244772E-305

double value = -4.42330604244772E-305;

double fromLiteral = -4.42330604244772E-305;
double fromVariable = value;
double fromParse = Double.Parse("-4.42330604244772E-305");

Console.WriteLine("Double value from literal: {0,29:R}", fromLiteral);
Console.WriteLine("Double value from variable: {0,28:R}", fromVariable);
Console.WriteLine("Double value from Parse method: {0,24:R}", fromParse);
// On 32-bit versions of the .NET Framework, the output is:
//    Double value from literal:        -4.42330604244772E-305
//    Double value from variable:       -4.42330604244772E-305
//    Double value from Parse method:   -4.42330604244772E-305
//
// On other versions of the .NET Framework, the output is:
//    Double value from literal:      -4.4233060424477198E-305
//    Double value from variable:     -4.4233060424477198E-305
//    Double value from Parse method:   -4.42330604244772E-305

下面的代码示例演示 Double 的用法：

' Temperature class stores the value as Double
' and delegates most of the functionality
' to the Double implementation.
Public Class Temperature
    Implements IComparable, IFormattable

    Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
        Implements IComparable.CompareTo

        If TypeOf obj Is Temperature Then
            Dim temp As Temperature = CType(obj, Temperature)

            Return m_value.CompareTo(temp.m_value)
        End If

        Throw New ArgumentException("object is not a Temperature")
    End Function

    Public Overloads Function ToString(ByVal format As String, ByVal provider As IFormatProvider) As String _
        Implements IFormattable.ToString

        If Not (format Is Nothing) Then
            If format.Equals("F") Then
                Return [String].Format("{0}'F", Me.Value.ToString())
            End If
            If format.Equals("C") Then
                Return [String].Format("{0}'C", Me.Celsius.ToString())
            End If
        End If

        Return m_value.ToString(format, provider)
    End Function

    ' Parses the temperature from a string in form
    ' [ws][sign]digits['F|'C][ws]
    Public Shared Function Parse(ByVal s As String, ByVal styles As NumberStyles, ByVal provider As IFormatProvider) As Temperature
        Dim temp As New Temperature()

        If s.TrimEnd(Nothing).EndsWith("'F") Then
            temp.Value = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2), styles, provider)
        Else
            If s.TrimEnd(Nothing).EndsWith("'C") Then
                temp.Celsius = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2), styles, provider)
            Else
                temp.Value = Double.Parse(s, styles, provider)
            End If
        End If
        Return temp
    End Function

    ' The value holder
    Protected m_value As Double

    Public Property Value() As Double
        Get
            Return m_value
        End Get
        Set(ByVal Value As Double)
            m_value = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (m_value - 32) / 1.8
        End Get
        Set(ByVal Value As Double)
            m_value = Value * 1.8 + 32
        End Set
    End Property
End Class

    /// <summary>
    /// Temperature class stores the value as Double
    /// and delegates most of the functionality
    /// to the Double implementation.
    /// </summary>
    public class Temperature : IComparable, IFormattable {
        /// <summary>
        /// IComparable.CompareTo implementation.
        /// </summary>
        public int CompareTo(object obj) {
            if(obj is Temperature) {
                Temperature temp = (Temperature) obj;

                return m_value.CompareTo(temp.m_value);
            }

            throw new ArgumentException("object is not a Temperature");
        }

        /// <summary>
        /// IFormattable.ToString implementation.
        /// </summary>
        public string ToString(string format, IFormatProvider provider) {
            if( format != null ) {
                if( format.Equals("F") ) {
                    return String.Format("{0}'F", this.Value.ToString());
                }
                if( format.Equals("C") ) {
                    return String.Format("{0}'C", this.Celsius.ToString());
                }
            }

            return m_value.ToString(format, provider);
        }

        /// <summary>
        /// Parses the temperature from a string in form
        /// [ws][sign]digits['F|'C][ws]
        /// </summary>
        public static Temperature Parse(string s, NumberStyles styles, IFormatProvider provider) {
            Temperature temp = new Temperature();

            if( s.TrimEnd(null).EndsWith("'F") ) {
                temp.Value = Double.Parse( s.Remove(s.LastIndexOf('\''), 2), styles, provider);
            }
            else if( s.TrimEnd(null).EndsWith("'C") ) {
                temp.Celsius = Double.Parse( s.Remove(s.LastIndexOf('\''), 2), styles, provider);
            }
            else {
                temp.Value = Double.Parse(s, styles, provider);
            }

            return temp;
        }

        // The value holder
        protected double m_value;

        public double Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }

        public double Celsius {
            get {
                return (m_value-32.0)/1.8;
            }
            set {
                m_value = 1.8*value+32.0;
            }
        }
    }

/// <summary>
/// Temperature class stores the value as Double
/// and delegates most of the functionality
/// to the Double implementation.
/// </summary>
public ref class Temperature: public IComparable, public IFormattable
{
   /// <summary>
   /// IComparable.CompareTo implementation.
   /// </summary>
public:
   virtual int CompareTo( Object^ obj )
   {
      if ( dynamic_cast<Temperature^>(obj) )
      {
         Temperature^ temp = (Temperature^)(obj);
         return m_value.CompareTo( temp->m_value );
      }

      throw gcnew ArgumentException( "object is not a Temperature" );
   }

   /// <summary>
   /// IFormattable.ToString implementation.
   /// </summary>
   virtual String^ ToString( String^ format, IFormatProvider^ provider )
   {
      if ( format != nullptr )
      {
         if ( format->Equals( "F" ) )
         {
            return String::Format( "{0}'F", this->Value.ToString() );
         }

         if ( format->Equals( "C" ) )
         {
            return String::Format( "{0}'C", this->Celsius.ToString() );
         }
      }

      return m_value.ToString( format, provider );
   }

   /// <summary>
   /// Parses the temperature from a string in form
   /// [ws][sign]digits['F|'C][ws]
   /// </summary>
   static Temperature^ Parse( String^ s, NumberStyles styles, IFormatProvider^ provider )
   {
      Temperature^ temp = gcnew Temperature;

      if ( s->TrimEnd( 0 )->EndsWith( "'F" ) )
      {
         temp->Value = Double::Parse( s->Remove( s->LastIndexOf( '\'' ), 2 ), styles, provider );
      }
      else
      if ( s->TrimEnd( 0 )->EndsWith( "'C" ) )
      {
         temp->Celsius = Double::Parse( s->Remove( s->LastIndexOf( '\'' ), 2 ), styles, provider );
      }
      else
      {
         temp->Value = Double::Parse( s, styles, provider );
      }

      return temp;
   }

protected:
   // The value holder
   double m_value;

public:
   property double Value
   {
      double get()
      {
         return m_value;
      }
      void set( double value )
      {
         m_value = value;
      }

   }

   property double Celsius
   {
      double get()
      {
         return (m_value - 32.0) / 1.8;
      }
      void set( double value )
      {
         m_value = 1.8 * value + 32.0;
      }

   }

};

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

警告说明 警告

在所有的硬件平台上都分配该类型的一个实例不是线程安全的，因为该实例的二进制表示形式可能太大，无法在单个原子操作中分配。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 成员
System 命名空间


Double 成员

Double 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Double 结构

表示一个双精度浮点数。

Double 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Double 结构
System 命名空间


Double 字段

Double 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Double 结构

Double 类型公开以下成员。

名称 说明
页首

参考

Double 结构
System 命名空间


Double ..::.Epsilon 字段

Double
.
.
::
.
Epsilon 字段
Double 结构

表示大于零的最小正 Double 值。此字段为常数。 表示大于零的最小正 Double 值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const Epsilon As Double
public const double Epsilon
public:
literal double Epsilon
static val mutable Epsilon: float

Epsilon 属性的值反映最小正数 Double 值，当 Double 实例的值为零时，此值在数值运算或比较中有意义。例如，下面的代码演示零和 Epsilon 被认为是不相等的值，而零和 Epsilon 值的一半被认为是相等的。 Epsilon 属性的值反映最小正数 Double 值，当 Double 实例的值为零时，此值在数值运算或比较中有意义。例如，下面的代码演示零和 Epsilon 被认为是不相等的值，而零和 Epsilon 值的一半被认为是相等的。

Module Example
   Public Sub Main()
      Dim values() As Double = { 0, Double.Epsilon, Double.Epsilon * .5 }

      For ctr As Integer = 0 To values.Length - 2
         For ctr2 As Integer = ctr + 1 To values.Length - 1
            Console.WriteLine("{0:r} = {1:r}: {2}", _
                              values(ctr), values(ctr2), _
                              values(ctr).Equals(values(ctr2)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       0 = 4.94065645841247E-324: False
'       0 = 0: True
'
'       4.94065645841247E-324 = 0: False

using System;

public class Example
{
   public static void Main()
   {
      double[] values = { 0, Double.Epsilon, Double.Epsilon * .5 };

      for (int ctr = 0; ctr <= values.Length - 2; ctr++)
      {
         for (int ctr2 = ctr + 1; ctr2 <= values.Length - 1; ctr2++)
         {
            Console.WriteLine("{0:r} = {1:r}: {2}",
                              values[ctr], values[ctr2],
                              values[ctr].Equals(values[ctr2]));
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       0 = 4.94065645841247E-324: False
//       0 = 0: True
//
//       4.94065645841247E-324 = 0: False

但是，Epsilon 属性不是 Double 类型的通用精度度量值，它只应用于具有零值的 Double 实例。

说明 说明

Epsilon 属性的值不等同于计算机 epsilon，其代表由于浮点算术中的舍入引起的相关错误的上限。

该常数值为 4.94065645841247e-324。

两个看似相等的浮点数字的比较结果可能为不相等，因为它们的最低有效位不同。例如，C# 表达式 (double)1/3 == (double)0.33333 的比较结果为不相等，因为左侧的除法运算具有最大精度，而右侧的常数仅精确到指定的位。如果创建自定义算法来确定两个浮点数是否可以被视为相等，则必须使用大于 Epsilon 常数的值，为两个将被视为相等的值建立可接受的绝对差值幅度。（通常，该差值幅度比 Epsilon 大许多倍。） 两个看似相等的浮点数字的比较结果可能为不相等，因为它们的最低有效位不同。例如，C# 表达式 (double)1/3 == (double)0.33333 的比较结果为不相等，因为左侧的除法运算具有最大精度，而右侧的常数仅精确到指定的位。如果创建自定义算法来确定两个浮点数是否可以被视为相等，则必须使用大于 Epsilon 常数的值，为两个将被视为相等的值建立可接受的绝对差值幅度。（通常，该差值幅度比 Epsilon 大许多倍。） 两个看似相等的浮点数字的比较结果可能为不相等，因为它们的最低有效位不同。例如，C# 表达式 (double)1/3 == (double)0.33333 的比较结果为不相等，因为左侧的除法运算具有最大精度，而右侧的常数仅精确到指定的位。如果创建自定义算法来确定两个浮点数是否可以被视为相等，则必须使用大于 Epsilon 常数的值，为两个将被视为相等的值建立可接受的绝对差值幅度。（通常，该差值幅度比 Epsilon 大许多倍。） 两个看似相等的浮点数字的比较结果可能为不相等，因为它们的最低有效位不同。例如，C# 表达式 (double)1/3 == (double)0.33333 的比较结果为不相等，因为左侧的除法运算具有最大精度，而右侧的常数仅精确到指定的位。如果创建自定义算法来确定两个浮点数是否可以被视为相等，则必须使用大于 Epsilon 常数的值，为两个将被视为相等的值建立可接受的绝对差值幅度。（通常，该差值幅度比 Epsilon 大许多倍。）

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.MaxValue 字段

Double
.
.
::
.
MaxValue 字段
Double 结构

表示 Double 的最大可能值。此字段为常数。 表示 Double 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As Double
public const double MaxValue
public:
literal double MaxValue
static val mutable MaxValue: float

此常量的值为正 1.7976931348623157E+308。

下面的代码示例演示 MaxValue 的用法：

Public Class Temperature

    Public Shared ReadOnly Property MinValue() As Double
        Get
            Return Double.MinValue
        End Get
    End Property

    Public Shared ReadOnly Property MaxValue() As Double
        Get
            Return Double.MaxValue
        End Get
    End Property

    ' The value holder
    Protected m_value As Double

    Public Property Value() As Double
        Get
            Return m_value
        End Get
        Set(ByVal Value As Double)
            m_value = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (m_value - 32) / 1.8
        End Get
        Set(ByVal Value As Double)
            m_value = Value * 1.8 + 32
        End Set
    End Property
End Class

    public class Temperature {
        public static double MinValue {
            get {
                return Double.MinValue;
            }
        }

        public static double MaxValue {
            get {
                return Double.MaxValue;
            }
        }

        // The value holder
        protected double m_value;

        public double Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }

        public double Celsius {
            get {
                return (m_value-32.0)/1.8;
            }
            set {
                m_value = 1.8*value+32.0;
            }
        }
    }

public ref class Temperature
{
public:
   static property double MinValue
   {
      double get()
      {
         return Double::MinValue;
      }
   }

   static property double MaxValue
   {
      double get()
      {
         return Double::MaxValue;
      }
   }

protected:
   // The value holder
   double m_value;

public:
   property double Value
   {
      double get()
      {
         return m_value;
      }
      void set( double value )
      {
         m_value = value;
      }
   }

   property double Celsius
   {
      double get()
      {
         return (m_value - 32.0) / 1.8;
      }
      void set( double value )
      {
         m_value = 1.8 * value + 32.0;
      }
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.MinValue 字段

Double
.
.
::
.
MinValue 字段
Double 结构

表示 Double 的最小可能值。此字段为常数。 表示 Double 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As Double
public const double MinValue
public:
literal double MinValue
static val mutable MinValue: float

此常数的值为负 1.7976931348623157E+308。

下面的代码示例演示 MinValue 的用法：

Public Class Temperature

    Public Shared ReadOnly Property MinValue() As Double
        Get
            Return Double.MinValue
        End Get
    End Property

    Public Shared ReadOnly Property MaxValue() As Double
        Get
            Return Double.MaxValue
        End Get
    End Property

    ' The value holder
    Protected m_value As Double

    Public Property Value() As Double
        Get
            Return m_value
        End Get
        Set(ByVal Value As Double)
            m_value = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (m_value - 32) / 1.8
        End Get
        Set(ByVal Value As Double)
            m_value = Value * 1.8 + 32
        End Set
    End Property
End Class

    public class Temperature {
        public static double MinValue {
            get {
                return Double.MinValue;
            }
        }

        public static double MaxValue {
            get {
                return Double.MaxValue;
            }
        }

        // The value holder
        protected double m_value;

        public double Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }

        public double Celsius {
            get {
                return (m_value-32.0)/1.8;
            }
            set {
                m_value = 1.8*value+32.0;
            }
        }
    }

public ref class Temperature
{
public:
   static property double MinValue
   {
      double get()
      {
         return Double::MinValue;
      }
   }

   static property double MaxValue
   {
      double get()
      {
         return Double::MaxValue;
      }
   }

protected:
   // The value holder
   double m_value;

public:
   property double Value
   {
      double get()
      {
         return m_value;
      }
      void set( double value )
      {
         m_value = value;
      }
   }

   property double Celsius
   {
      double get()
      {
         return (m_value - 32.0) / 1.8;
      }
      void set( double value )
      {
         m_value = 1.8 * value + 32.0;
      }
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.NaN 字段

Double
.
.
::
.
NaN 字段
Double 结构

表示不是数字 (NaN) 的值。此字段为常数。 表示不是数字 (NaN) 的值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const NaN As Double
public const double NaN
public:
literal double NaN
static val mutable NaN: float

此常数的值是零被零除所得到的结果。

当运算结果未定义时返回此常数。

使用 IsNaN 确定值是否为非数字。不可能通过将某个值与另一个等于 NaN 的值进行比较来确定该值是否不是数字。 使用 IsNaN 确定值是否为非数字。不可能通过将某个值与另一个等于 NaN 的值进行比较来确定该值是否不是数字。

下面的代码示例演示 NaN 的用法：

Dim zero As Double = 0

' This condition will return false.
If (0 / zero) = Double.NaN Then
    Console.WriteLine("0 / 0 can be tested with Double.NaN.")
Else
    Console.WriteLine("0 / 0 cannot be tested with Double.NaN; use Double.IsNan() instead.")
End If

            Double zero = 0;

            // This condition will return false.
            if ((0 / zero) == Double.NaN)
            {
                Console.WriteLine("0 / 0 can be tested with Double.NaN.");
            }
            else
            {
                Console.WriteLine("0 / 0 cannot be tested with Double.NaN; use Double.IsNan() instead.");
            }

Double zero = 0;

// This condition will return false.
if ( (0 / zero) == Double::NaN )
{
   Console::WriteLine( "0 / 0 can be tested with Double::NaN." );
}
else
{
   Console::WriteLine( "0 / 0 cannot be tested with Double::NaN; use Double::IsNan() instead." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间
IsNaN


Double ..::.NegativeInfinity 字段

Double
.
.
::
.
NegativeInfinity 字段
Double 结构

表示负无穷。此字段为常数。 表示负无穷。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const NegativeInfinity As Double
public const double NegativeInfinity
public:
literal double NegativeInfinity
static val mutable NegativeInfinity: float

此常数的值是负数被零除所得到的结果。

当运算结果小于 MinValue 时，返回此常数。

使用 IsNegativeInfinity 确定值是否计算为负无穷大。不可能通过将某个值与另一个等于 NegativeInfinity 的值进行比较来确定该值是否计算为负无穷大。 使用 IsNegativeInfinity 确定值是否计算为负无穷大。不可能通过将某个值与另一个等于 NegativeInfinity 的值进行比较来确定该值是否计算为负无穷大。

下面的代码示例演示 NegativeInfinity 的用法：

' This will equal Infinity.
Console.WriteLine("10.0 minus NegativeInfinity equals " + (10 - Double.NegativeInfinity).ToString() + ".")

            // This will equal Infinity.
            Console.WriteLine("10.0 minus NegativeInfinity equals {0}.", (10.0 - Double.NegativeInfinity).ToString());

// This will equal Infinity.
Console::WriteLine( "10.0 minus NegativeInfinity equals {0}.", (10.0 - Double::NegativeInfinity) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间
IsNegativeInfinity
IsInfinity
PositiveInfinity


Double ..::.PositiveInfinity 字段

Double
.
.
::
.
PositiveInfinity 字段
Double 结构

表示正无穷。此字段为常数。 表示正无穷。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const PositiveInfinity As Double
public const double PositiveInfinity
public:
literal double PositiveInfinity
static val mutable PositiveInfinity: float

此常数的值是正数被零除所得到的结果。

当运算结果大于 MaxValue 时，返回此常数。

使用 IsPositiveInfinity 确定值是否计算为正无穷大。不可能通过将某个值与另一个等于 PositiveInfinity 的值进行比较来确定该值是否计算为正无穷大。 使用 IsPositiveInfinity 确定值是否计算为正无穷大。不可能通过将某个值与另一个等于 PositiveInfinity 的值进行比较来确定该值是否计算为正无穷大。

下面的代码示例演示 PositiveInfinity 的用法：

' This will equal Infinity.
Console.WriteLine("PositiveInfinity plus 10.0 equals " + (Double.PositiveInfinity + 10).ToString() + ".")

            // This will equal Infinity.
            Console.WriteLine("PositiveInfinity plus 10.0 equals {0}.", (Double.PositiveInfinity + 10.0).ToString());

// This will equal Infinity.
Console::WriteLine( "PositiveInfinity plus 10.0 equals {0}.", (Double::PositiveInfinity + 10.0) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间
IsPositiveInfinity
IsInfinity
NegativeInfinity


Double 方法

Double 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Double 结构

Double 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Double 结构
System 命名空间


Double ..::.CompareTo 方法

Double
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Double 结构

将此实例与指定的对象或 Double 对象进行比较，并返回一个整数，该整数指示此实例的值是小于、等于还是大于指定对象或 Double 对象的值。

名称 说明
页首

参考

Double 结构
Double 成员
System 命名空间


Double ..::.CompareTo 方法 (Double)

Double
.
.
::
.
CompareTo 方法 (Double)
Double 结构

将此实例与指定的双精度浮点数进行比较，并返回一个整数，该整数指示此实例的值是小于、等于还是大于指定双精度浮点数的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Double _ ) As Integer
public int CompareTo( double value )
public: virtual int CompareTo( double value ) sealed
abstract CompareTo : value:float -> int override CompareTo : value:float -> int
参数
value
类型： System Double
要比较的双精度浮点数。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
- 或 -
此实例不是数字 (
NaN
) 而
value
是数字。
零
此实例等于
value
。
- 或 -
此实例和
value
都不是数字 (
NaN
)、
PositiveInfinity
或
NegativeInfinity
。
大于零
此实例大于
value
。
- 或 -
此实例是数字而
value
不是数字 (
NaN
)。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Double..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

注意，尽管值为 NaN 的对象不视为等于另一个值为 NaN 的对象（即使是其自身），IComparable<(Of <(T>)>) 接口也要求 A.CompareTo(A) 返回零。

扩大转换

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Double 且参数类型是 Int32。Microsoft C# 编译器生成将参数值表示为 Double 对象的指令，然后生成一个 Double..::.CompareTo(Double) 方法来比较实例的值和参数的扩大表示形式。 例如，假定实例类型是 Double 且参数类型是 Int32。Microsoft C# 编译器生成将参数值表示为 Double 对象的指令，然后生成一个 Double..::.CompareTo(Double) 方法来比较实例的值和参数的扩大表示形式。

请参考所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。有关更多信息，请参见主题类型转换表。 请参考所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。有关更多信息，请参见主题类型转换表。

比较精度

超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。 超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。

下面的代码示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
CompareTo 重载
System 命名空间
Equals


Double ..::.CompareTo 方法 (Object)

Double
.
.
::
.
CompareTo 方法 (Object)
Double 结构

将此实例与指定对象进行比较，并返回一个整数，该整数指示此实例的值是小于、等于还是大于指定对象的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
值
说明
负整数
此实例小于
value
。
- 或 -
此实例不是数字 (
NaN
) 而
value
是数字。
零
此实例等于
value
。
- 或 -
此实例和
value
都是
Double.NaN
、
PositiveInfinity
或
NegativeInfinity
正整数
此实例大于
value
。
- 或 -
此实例是数字而
value
不是数字 (
NaN
)。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 Double。

无论 Double 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 参数必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是 Double 的实例；否则将引发异常。

实现此方法是为了支持 IComparable 接口。注意，尽管一个 NaN 不视为等于另一个 NaN（即使是其自身），IComparable 接口也要求 A.CompareTo(A) 返回零。 实现此方法是为了支持 IComparable 接口。注意，尽管一个 NaN 不视为等于另一个 NaN（即使是其自身），IComparable 接口也要求 A.CompareTo(A) 返回零。

比较精度

超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。 超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。

下面的代码示例演示在 Double 上下文中 CompareTo 的用法。

Obj1 = CType(450, Double)

If A.CompareTo(Obj1) < 0 Then
    Console.WriteLine(A.ToString() + " is less than " + Obj1.ToString() + ".")
End If

If (A.CompareTo(Obj1) > 0) Then
    Console.WriteLine(A.ToString() + " is greater than " + Obj1.ToString() + ".")
End If

If (A.CompareTo(Obj1) = 0) Then
    Console.WriteLine(A.ToString() + " equals " + Obj1.ToString() + ".")
End If

            obj1 = (Double)450;

            if (a.CompareTo(obj1) < 0)
            {
                Console.WriteLine("{0} is less than {1}.", a.ToString(), obj1.ToString());
            }

            if (a.CompareTo(obj1) > 0)
            {
                Console.WriteLine("{0} is greater than {1}.", a.ToString(), obj1.ToString());
            }

            if (a.CompareTo(obj1) == 0)
            {
                Console.WriteLine("{0} equals {1}.", a.ToString(), obj1.ToString());
            }

obj1 = (Double)450;
if ( a.CompareTo( obj1 ) < 0 )
{
   Console::WriteLine( "{0} is less than {1}.", a, obj1 );
}

if ( a.CompareTo( obj1 ) > 0 )
{
   Console::WriteLine( "{0} is greater than {1}.", a, obj1 );
}

if ( a.CompareTo( obj1 ) == 0 )
{
   Console::WriteLine( "{0} equals {1}.", a, obj1 );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
CompareTo 重载
System 命名空间
Equals


Double ..::.Equals 方法

Double
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Double 结构

返回一个值，该值指示 Double 的两个实例是否表示同一个值。

名称 说明
页首

参考

Double 结构
Double 成员
System 命名空间


Double ..::.Equals 方法 (Double)

Double
.
.
::
.
Equals 方法 (Double)
Double 结构

返回一个值，该值指示此实例和指定的 Double 对象是否表示相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As Double _
) As Boolean
public bool Equals(
    double obj
)
public:
virtual bool Equals(
    double obj
) sealed
abstract Equals :
        obj:float -> bool
override Equals :
        obj:float -> bool

参数

obj
类型： System Double
要与此实例进行比较的 Double 对象。

返回值

类型： System Boolean
如果 obj 等于此实例，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

扩大转换

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 Equals 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 Equals 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Double 且参数类型是 Int32。Microsoft C# 编译器生成将参数值表示为 Double 对象的指令，然后生成一个 Double..::.Equals(Double) 方法来比较实例的值和参数的扩大表示形式。 例如，假定实例类型是 Double 且参数类型是 Int32。Microsoft C# 编译器生成将参数值表示为 Double 对象的指令，然后生成一个 Double..::.Equals(Double) 方法来比较实例的值和参数的扩大表示形式。

请参考所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。有关更多信息，请参见主题类型转换表。 请参考所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。有关更多信息，请参见主题类型转换表。

比较精度

应小心使用 Equals 方法，因为两个显然相等的值可能因两个值的精度不同而不相等。下面的示例报告 Double 值 .3333 与 1 除以 3 所返回的 Double 不相等。 应小心使用 Equals 方法，因为两个显然相等的值可能因两个值的精度不同而不相等。下面的示例报告 Double 值 .3333 与 1 除以 3 所返回的 Double 不相等。

' Initialize two doubles with apparently identical values
Dim double1 As Double = .33333
Dim double2 As Double = 1/3
' Compare them for equality
Console.WriteLine(double1.Equals(double2))    ' displays False

// Initialize two doubles with apparently identical values
double double1 = .33333;
double double2 = 1/3;
// Compare them for equality
Console.WriteLine(double1.Equals(double2));    // displays false

建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Double 值。 建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Double 值。 建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Double 值。

' Initialize two doubles with apparently identical values
Dim double1 As Double = .33333
Dim double2 As Double = 1/3
' Define the tolerance for variation in their values
Dim difference As Double = double1 * .0001

' Compare the values
' The output to the console indicates that the two values are equal
If Math.Abs(double1 - double2) <= difference Then
   Console.WriteLine("double1 and double2 are equal.")
Else
   Console.WriteLine("double1 and double2 are unequal.")
End If

// Initialize two doubles with apparently identical values
double double1 = .33333;
double double2 = (double) 1/3;
// Define the tolerance for variation in their values
double difference = double1 * .0001;

// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(double1 - double2) <= difference)
   Console.WriteLine("double1 and double2 are equal.");
else
   Console.WriteLine("double1 and double2 are unequal.");

在这种情况下，两个值相等。

说明 说明

由于 Epsilon 定义其范围接近于零的正值的最小表达式，因此两个相似值之间的差值幅度必须大于 Epsilon。通常，该差值幅度比 Epsilon 大许多倍。 由于 Epsilon 定义其范围接近于零的正值的最小表达式，因此两个相似值之间的差值幅度必须大于 Epsilon。通常，该差值幅度比 Epsilon 大许多倍。

超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。 超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
Equals 重载
System 命名空间
Equals
CompareTo


Double ..::.Equals 方法 (Object)

Double
.
.
::
.
Equals 方法 (Object)
Double 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 Double 的实例并且等于此实例的值，则为 true；否则为 false。

应小心使用 Equals 方法，因为两个显然相等的值可能因两个值的精度不同而不相等。下面的示例报告 Double 值 .3333 与 1 除以 3 所返回的 Double 不相等。 应小心使用 Equals 方法，因为两个显然相等的值可能因两个值的精度不同而不相等。下面的示例报告 Double 值 .3333 与 1 除以 3 所返回的 Double 不相等。

' Initialize two doubles with apparently identical values
Dim double1 As Double = .33333
Dim double2 As Object = 1/3
' Compare them for equality
Console.WriteLine(double1.Equals(double2))    ' displays False

// Initialize two doubles with apparently identical values
double double1 = .33333;
object double2 = 1/3;
// Compare them for equality
Console.WriteLine(double1.Equals(double2));    // displays false

建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Double 值。 建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Double 值。 建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Double 值。

' Initialize two doubles with apparently identical values
Dim double1 As Double = .33333
Dim double2 As Object = 1/3
' Define the tolerance for variation in their values
Dim difference As Double = double1 * .0001

' Compare the values
' The output to the console indicates that the two values are equal
If Math.Abs(double1 - CDbl(double2)) <= difference Then
   Console.WriteLine("double1 and double2 are equal.")
Else
   Console.WriteLine("double1 and double2 are unequal.")
End If

// Initialize two doubles with apparently identical values
double double1 = .33333;
object double2 = (double) 1/3;
// Define the tolerance for variation in their values
double difference = double1 * .0001;

// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(double1 - (double) double2) <= difference)
   Console.WriteLine("double1 and double2 are equal.");
else
   Console.WriteLine("double1 and double2 are unequal.");

在这种情况下，两个值相等。

说明 说明

由于 Epsilon 定义其范围接近于零的正值的最小表达式，因此两个相似值之间的差值幅度必须大于 Epsilon。通常，该差值幅度比 Epsilon 大许多倍。 由于 Epsilon 定义其范围接近于零的正值的最小表达式，因此两个相似值之间的差值幅度必须大于 Epsilon。通常，该差值幅度比 Epsilon 大许多倍。

超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。 超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。

下面的代码示例说明了 Equals 方法。

Obj1 = CType(500, Double)

If A.Equals(Obj1) Then
    Console.WriteLine("The value type and reference type values are equal.")
End If

            obj1 = (Double)500;
            if (a.Equals(obj1)) {
                Console.WriteLine("The value type and reference type values are equal.");
            }

obj1 = (Double)500;
if ( a.Equals( obj1 ) )
{
   Console::WriteLine( "The value type and reference type values are equal." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
Equals 重载
System 命名空间
CompareTo


Double ..::.GetHashCode 方法

Double
.
.
::
.
GetHashCode 方法
Double 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.GetTypeCode 方法

Double
.
.
::
.
GetTypeCode 方法
Double 结构

返回值类型 Double 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.Double。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间
TypeCode


Double ..::.IConvertible ..::.ToBoolean 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToByte 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToChar 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToDateTime 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToDecimal 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
当前实例的值，已转换为 Decimal。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToDouble 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，未更改。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToInt16 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，已转换为 Int16。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToInt32 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，已转换为 Int32。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToInt64 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，已转换为 Int64。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToSByte 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，已转换为 SByte。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToSingle 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，已转换为 Single。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToType 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要将此 Double 值转换为的类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的区域性特定信息。

返回值

类型： System Object
当前实例的值，已转换为 type。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToUInt16 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，已转换为 UInt16。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToUInt32 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，已转换为 UInt32。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IConvertible ..::.ToUInt64 方法

Double
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Double 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，已转换为 UInt64。

实现

此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(Double) 方法。 此成员是显式的接口成员实现。只能在 Double 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(Double) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间


Double ..::.IsInfinity 方法

Double
.
.
::
.
IsInfinity 方法
Double 结构

返回一个值，该值指示指定数字是计算为负无穷大还是正无穷大。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsInfinity ( _
    d As Double _
) As Boolean
public static bool IsInfinity(
    double d
)
public:
static bool IsInfinity(
    double d
)
static member IsInfinity :
        d:float -> bool

参数

d
类型： System Double
一个双精度浮点数。

返回值

类型： System Boolean
如果 d 的计算结果为 PositiveInfinity 或 NegativeInfinity，则为 true；否则为 false。

浮点运算返回 PositiveInfinity 或 NegativeInfinity，以发出信号表示溢出状况。

下面的代码示例演示 IsInfinity 的用法：

' This will return "True".
Console.Write("IsInfinity(3.0 / 0) = ")
If Double.IsPositiveInfinity(3 / 0) Then
    Console.WriteLine("True.")
Else
    Console.WriteLine("False.")
End If

            // This will return "true".
            Console.WriteLine("IsInfinity(3.0 / 0) == {0}.", Double.IsInfinity(3.0 / 0) ? "true" : "false");

// This will return S"true".
Console::WriteLine( "IsInfinity(3.0 / 0) == {0}.", Double::IsInfinity( 3.0 / zero ) ? (String^)"true" : "false" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间
IsPositiveInfinity
IsNegativeInfinity
PositiveInfinity
NegativeInfinity


Double ..::.IsNaN 方法

Double
.
.
::
.
IsNaN 方法
Double 结构

返回一个值，该值指示指定数字的计算结果是否为不是数字 (NaN) 的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsNaN ( _
    d As Double _
) As Boolean
public static bool IsNaN(
    double d
)
public:
static bool IsNaN(
    double d
)
static member IsNaN :
        d:float -> bool

参数

d
类型： System Double
一个双精度浮点数。

返回值

类型： System Boolean
如果 d 的计算结果为 NaN，则为 true；否则为 false。

浮点运算返回 NaN，以发出信号表示运算结果尚未定义。例如，将 0.0 除以 0.0 会得到 NaN。 浮点运算返回 NaN，以发出信号表示运算结果尚未定义。例如，将 0.0 除以 0.0 会得到 NaN。

下面的代码示例演示 IsNaN 的用法：

' This will return true.
If Double.IsNaN(0 / zero) Then
    Console.WriteLine("Double.IsNan() can determine whether a value is not-a-number.")
End If

            // This will return true.
            if (Double.IsNaN(0 / zero))
            {
                Console.WriteLine("Double.IsNan() can determine whether a value is not-a-number.");
            }

// This will return true.
if ( Double::IsNaN( 0 / zero ) )
{
   Console::WriteLine( "Double::IsNan() can determine whether a value is not-a-number." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间
NaN


Double ..::.IsNegativeInfinity 方法

Double
.
.
::
.
IsNegativeInfinity 方法
Double 结构

返回一个值，通过该值指示指定数字是否计算为负无穷大。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsNegativeInfinity ( _
    d As Double _
) As Boolean
public static bool IsNegativeInfinity(
    double d
)
public:
static bool IsNegativeInfinity(
    double d
)
static member IsNegativeInfinity :
        d:float -> bool

参数

d
类型： System Double
一个双精度浮点数。

返回值

类型： System Boolean
如果 d 的计算结果为 NegativeInfinity，则为 true；否则为 false。

浮点运算返回 NegativeInfinity 以发出信号表示溢出状况。

下面的代码示例演示 IsNegativeInfinity 的用法：

' This will return "True".
Console.Write("IsNegativeInfinity(-5.0 / 0) = ")
If Double.IsNegativeInfinity(-5 / 0) Then
    Console.WriteLine("True.")
Else
    Console.WriteLine("False.")
End If

...

If D > Double.MaxValue Then
    Console.WriteLine("Your number is bigger than a double.")
End If

...

' This will equal Infinity.
Console.WriteLine("10.0 minus NegativeInfinity equals " + (10 - Double.NegativeInfinity).ToString() + ".")

            // This will return "true".
            Console.WriteLine("IsNegativeInfinity(-5.0 / 0) == {0}.", Double.IsNegativeInfinity(-5.0 / 0) ? "true" : "false");

...

            if (d > Double.MaxValue)
            {
                Console.WriteLine("Your number is bigger than a double.");
            }

...

            // This will equal Infinity.
            Console.WriteLine("10.0 minus NegativeInfinity equals {0}.", (10.0 - Double.NegativeInfinity).ToString());

// This will return S"true".
Console::WriteLine( "IsNegativeInfinity(-5.0 / 0) == {0}.", Double::IsNegativeInfinity(  -5.0 / zero ) ? (String^)"true" : "false" );

...

if ( d > Double::MaxValue )
{
   Console::WriteLine( "Your number is bigger than a double." );
}

...

// This will equal Infinity.
Console::WriteLine( "10.0 minus NegativeInfinity equals {0}.", (10.0 - Double::NegativeInfinity) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间
IsInfinity
IsPositiveInfinity
PositiveInfinity
NegativeInfinity


Double ..::.IsPositiveInfinity 方法

Double
.
.
::
.
IsPositiveInfinity 方法
Double 结构

返回一个值，通过该值指示指定数字是否计算为正无穷大。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsPositiveInfinity ( _
    d As Double _
) As Boolean
public static bool IsPositiveInfinity(
    double d
)
public:
static bool IsPositiveInfinity(
    double d
)
static member IsPositiveInfinity :
        d:float -> bool

参数

d
类型： System Double
一个双精度浮点数。

返回值

类型： System Boolean
如果 d 的计算结果为 PositiveInfinity，则为 true；否则为 false。

浮点运算返回 PositiveInfinity 以发出信号表示溢出状况。

下面的代码示例演示 IsPositiveInfinity 的用法：

' This will return "True".
Console.Write("IsPositiveInfinity(4.0 / 0) = ")
If Double.IsPositiveInfinity(4 / 0) Then
    Console.WriteLine("True.")
Else
    Console.WriteLine("False.")
End If

            // This will return "true".
            Console.WriteLine("IsPositiveInfinity(4.0 / 0) == {0}.", Double.IsPositiveInfinity(4.0 / 0) ? "true" : "false");

// This will return S"true".
Console::WriteLine( "IsPositiveInfinity(4.0 / 0) == {0}.", Double::IsPositiveInfinity( 4.0 / zero ) ? (String^)"true" : "false" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
System 命名空间
IsInfinity
IsNegativeInfinity
PositiveInfinity
NegativeInfinity


Double ..::.Parse 方法

Double
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Double 结构

将数字的字符串表示形式转换为它的等效双精度浮点数。

名称 说明
页首

参考

Double 结构
Double 成员
System 命名空间
TryParse


Double ..::.Parse 方法 (String)

Double
.
.
::
.
Parse 方法 (String)
Double 结构

将数字的字符串表示形式转换为它的等效双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As Double
public static double Parse(
    string s
)
public:
static double Parse(
    String^ s
)
static member Parse :
        s:string -> float

参数

s
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Double
一个双精度浮点数，等于 s 中指定的数值或符号。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 不表示一个有效格式的数字。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数可包含当前区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol、NumberFormatInfo..::.NaNSymbol 或以下格式的字符串：

[ws][sign][integral-digits[,]]integral-digits[.[fractional-digits]][E[sign]exponential-digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | Description
ws | 一系列空白字符。
sign | 负号 (-) 或正号 (+)。仅可以使用一个前导符号。 负号 (-) 或正号 (+)。仅可以使用一个前导符号。
integral-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。
, | 区域性特定的千位分隔符。
. | 区域性特定的小数点符号。
fractional-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。
E | "e"或"E"字符，指示用指数（科学型）表示法表示值。
exponential-digits | 一系列介于 0 到 9 之间的数字，用于指定指数。

通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。例如，这意味着允许使用空白和千位分隔符，但不允许使用货币符号。若要对 s 中允许的样式元素进行更细致的控制以便分析操作成功，请调用 Double..::.Parse(String, NumberStyles) 或 Double..::.Parse(String, NumberStyles, IFormatProvider) 方法。 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。例如，这意味着允许使用空白和千位分隔符，但不允许使用货币符号。若要对 s 中允许的样式元素进行更细致的控制以便分析操作成功，请调用 Double..::.Parse(String, NumberStyles) 或 Double..::.Parse(String, NumberStyles, IFormatProvider) 方法。 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。例如，这意味着允许使用空白和千位分隔符，但不允许使用货币符号。若要对 s 中允许的样式元素进行更细致的控制以便分析操作成功，请调用 Double..::.Parse(String, NumberStyles) 或 Double..::.Parse(String, NumberStyles, IFormatProvider) 方法。

s 参数是使用针对当前线程区域性初始化的 NumberFormatInfo 对象中的格式设置信息解释的。有关更多信息，请参见CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请调用 Double..::.Parse(String, IFormatProvider) 或 Double..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前线程区域性初始化的 NumberFormatInfo 对象中的格式设置信息解释的。有关更多信息，请参见CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请调用 Double..::.Parse(String, IFormatProvider) 或 Double..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前线程区域性初始化的 NumberFormatInfo 对象中的格式设置信息解释的。有关更多信息，请参见CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请调用 Double..::.Parse(String, IFormatProvider) 或 Double..::.Parse(String, NumberStyles, IFormatProvider) 方法。

通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。

Dim value As String

value = Double.MinValue.ToString()
Try
   Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
   Console.WriteLine("{0} is outside the range of the Double type.", _
                     value)
End Try

value = Double.MaxValue.ToString()
Try
   Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
   Console.WriteLine("{0} is outside the range of the Double type.", _
                     value)
End Try
' The example displays the following output:
'    -1.79769313486232E+308 is outside the range of the Double type.
'    1.79769313486232E+308 is outside the range of the Double type.

   string value;

   value = Double.MinValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }

   value = Double.MaxValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例阐释了 Parse(String) 方法的用法。

Public Class Temperature
    ' Parses the temperature from a string in form
    ' [ws][sign]digits['F|'C][ws]
    Public Shared Function Parse(ByVal s As String) As Temperature
        Dim temp As New Temperature()

        If s.TrimEnd(Nothing).EndsWith("'F") Then
            temp.Value = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2))
        Else
            If s.TrimEnd(Nothing).EndsWith("'C") Then
                temp.Celsius = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2))
            Else
                temp.Value = Double.Parse(s)
            End If
        End If
        Return temp
    End Function 'Parse

    ' The value holder
    Protected m_value As Double

    Public Property Value() As Double
        Get
            Return m_value
        End Get
        Set(ByVal Value As Double)
            m_value = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (m_value - 32) / 1.8
        End Get
        Set(ByVal Value As Double)
            m_value = Value * 1.8 + 32
        End Set
    End Property
End Class

    public class Temperature {
        /// <summary>
        /// Parses the temperature from a string in form
        /// [ws][sign]digits['F|'C][ws]
        /// </summary>
        public static Temperature Parse(string s) {
            Temperature temp = new Temperature();

            if( s.TrimEnd(null).EndsWith("'F") ) {
                temp.Value = Double.Parse( s.Remove(s.LastIndexOf('\''), 2) );
            }
            else if( s.TrimEnd(null).EndsWith("'C") ) {
                temp.Celsius = Double.Parse( s.Remove(s.LastIndexOf('\''), 2) );
            }
            else {
                temp.Value = Double.Parse(s);
            }

            return temp;
        }

        // The value holder
        protected double m_value;

        public double Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }

        public double Celsius {
            get {
                return (m_value-32.0)/1.8;
            }
            set {
                m_value = 1.8*value+32.0;
            }
        }
    }

public ref class Temperature
{
   /// <summary>
   /// Parses the temperature from a string in form
   /// [ws][sign]digits['F|'C][ws]
   /// </summary>
public:
   static Temperature^ Parse( String^ s )
   {
      Temperature^ temp = gcnew Temperature;
      if ( s->TrimEnd( 0 )->EndsWith( "'F" ) )
      {
         temp->Value = Double::Parse( s->Remove( s->LastIndexOf( '\'' ), 2 ) );
      }
      else
      if ( s->TrimEnd( 0 )->EndsWith( "'C" ) )
      {
         temp->Celsius = Double::Parse( s->Remove( s->LastIndexOf( '\'' ), 2 ) );
      }
      else
      {
         temp->Value = Double::Parse( s );
      }

      return temp;
   }

protected:
   // The value holder
   double m_value;

public:
   property double Value
   {
      double get()
      {
         return m_value;
      }
      void set( double value )
      {
         m_value = value;
      }
   }

   property double Celsius
   {
      double get()
      {
         return (m_value - 32.0) / 1.8;
      }
      void set( double value )
      {
         m_value = 1.8 * value + 32.0;
      }
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
Parse 重载
System 命名空间
ToString
Double TryParse

其他资源

分析数值字符串


Double ..::.Parse 方法 (String, NumberStyles)

Double
.
.
::
.
Parse 方法 (String, NumberStyles)
Double 结构

将指定样式的数字的字符串表示形式转换为它的等效双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As Double
public static double Parse(
    string s,
    NumberStyles style
)
public:
static double Parse(
    String^ s,
    NumberStyles style
)
static member Parse :
        s:string *
        style:NumberStyles -> float

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，这些枚举值指示可出现在 s 中的样式元素。一个要指定的典型值为 Float 与 AllowThousands 的组合。 枚举值的按位组合，这些枚举值指示可出现在 s 中的样式元素。一个要指定的典型值为 Float 与 AllowThousands 的组合。

返回值

类型： System Double
一个双精度浮点数，等于 s 中指定的数值或符号。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 不表示一个有效格式的数字。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 包括 AllowHexSpecifier 值。

style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员：

  • AllowHexSpecifier

  • HexNumber

s 参数可包含当前区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol。它也可以采用以下形式，具体取决于 style 的值： s 参数可包含当前区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol。它也可以采用以下形式，具体取决于 style 的值：

[ws][$][sign][integral-digits[,]]integral-digits[.[fractional-digits]][E[sign]exponential-digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | Description
ws | 一系列空白字符。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 一系列空白字符。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
integral-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。
, | 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。
E | "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential-digits | 一系列介于 0 到 9 之间的数字，用于指定指数。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 integral-digits 元素。
AllowDecimalPoint | 小数点 (.)和 fractional-digits 元素。
AllowExponent | "e"或"E"字符，指示指数表示法。此标志自身支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。 "e"或"E"字符，指示指数表示法。此标志自身支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 千位分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、千位分隔符 (,) 以及小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数字。 所有元素。但是，s 不能表示十六进制数字。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见CurrentInfo。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见CurrentInfo。

通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。

Dim value As String

value = Double.MinValue.ToString()
Try
   Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
   Console.WriteLine("{0} is outside the range of the Double type.", _
                     value)
End Try

value = Double.MaxValue.ToString()
Try
   Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
   Console.WriteLine("{0} is outside the range of the Double type.", _
                     value)
End Try
' The example displays the following output:
'    -1.79769313486232E+308 is outside the range of the Double type.
'    1.79769313486232E+308 is outside the range of the Double type.

   string value;

   value = Double.MinValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }

   value = Double.MaxValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例通过 Parse(String, NumberStyles) 方法分析使用 en-US 区域性的 Double 值的字符串表示形式。

Public Sub Main()
   ' Set current thread culture to en-US.
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")

   Dim value As String
   Dim styles As NumberStyles

   ' Parse a string in exponential notation with only the AllowExponent flag.
   value = "-1.063E-02"
   styles = NumberStyles.AllowExponent
   ShowNumericValue(value, styles)

   ' Parse a string in exponential notation
   ' with the AllowExponent and Number flags.
   styles = NumberStyles.AllowExponent Or NumberStyles.Number
   ShowNumericValue(value, styles)

   ' Parse a currency value with leading and trailing white space, and
   ' white space after the U.S. currency symbol.
   value = " $ 6,164.3299  "
   styles = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
   ShowNumericValue(value, styles)

   ' Parse negative value with thousands separator and decimal.
   value = "(4,320.64)"
   styles = NumberStyles.AllowParentheses Or NumberStyles.AllowTrailingSign _
            Or NumberStyles.Float
   ShowNumericValue(value, styles)

   styles = NumberStyles.AllowParentheses Or NumberStyles.AllowTrailingSign _
            Or NumberStyles.Float Or NumberStyles.AllowThousands
   ShowNumericValue(value, styles)
End Sub

Private Sub ShowNumericValue(value As String, styles As NumberStyles)
   Dim number As Double
   Try
      number = Double.Parse(value, styles)
      Console.WriteLine("Converted '{0}' using {1} to {2}.", _
                        value, styles.ToString(), number)
   Catch e As FormatException
      Console.WriteLine("Unable to parse '{0}' with styles {1}.", _
                        value, styles.ToString())
   End Try
   Console.WriteLine()
End Sub
' The example displays the following output to the console:
'    Unable to parse '-1.063E-02' with styles AllowExponent.
'
'    Converted '-1.063E-02' using AllowTrailingSign, AllowThousands, Float to -0.01063.
'
'    Converted ' $ 6,164.3299  ' using Number, AllowCurrencySymbol to 6164.3299.
'
'    Unable to parse '(4,320.64)' with styles AllowTrailingSign, AllowParentheses, Float.
'
'    Converted '(4,320.64)' using AllowTrailingSign, AllowParentheses, AllowThousands, Float to -4320.64.

public static void Main()
{
   // Set current thread culture to en-US.
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");

   string value;
   NumberStyles styles;

   // Parse a string in exponential notation with only the AllowExponent flag.
   value = "-1.063E-02";
   styles = NumberStyles.AllowExponent;
   ShowNumericValue(value, styles);

   // Parse a string in exponential notation
   // with the AllowExponent and Number flags.
   styles = NumberStyles.AllowExponent | NumberStyles.Number;
   ShowNumericValue(value, styles);

   // Parse a currency value with leading and trailing white space, and
   // white space after the U.S. currency symbol.
   value = " $ 6,164.3299  ";
   styles = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
   ShowNumericValue(value, styles);

   // Parse negative value with thousands separator and decimal.
   value = "(4,320.64)";
   styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |
            NumberStyles.Float;
   ShowNumericValue(value, styles);

   styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |
            NumberStyles.Float | NumberStyles.AllowThousands;
   ShowNumericValue(value, styles);
}

private static void ShowNumericValue(string value, NumberStyles styles)
{
   double number;
   try
   {
      number = Double.Parse(value, styles);
      Console.WriteLine("Converted '{0}' using {1} to {2}.",
                        value, styles.ToString(), number);
   }
   catch (FormatException)
   {
      Console.WriteLine("Unable to parse '{0}' with styles {1}.",
                        value, styles.ToString());
   }
   Console.WriteLine();
}
// The example displays the following output to the console:
//    Unable to parse '-1.063E-02' with styles AllowExponent.
//
//    Converted '-1.063E-02' using AllowTrailingSign, AllowThousands, Float to -0.01063.
//
//    Converted ' $ 6,164.3299  ' using Number, AllowCurrencySymbol to 6164.3299.
//
//    Unable to parse '(4,320.64)' with styles AllowTrailingSign, AllowParentheses, Float.
//
//    Converted '(4,320.64)' using AllowTrailingSign, AllowParentheses, AllowThousands, Float to -4320.64.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


Double ..::.Parse 方法 (String, IFormatProvider)

Double
.
.
::
.
Parse 方法 (String, IFormatProvider)
Double 结构

将指定的区域性特定格式的数字的字符串表示形式转换为它的等效双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As Double
public static double Parse(
    string s,
    IFormatProvider provider
)
public:
static double Parse(
    String^ s,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        provider:IFormatProvider -> float

参数

s
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System Double
一个双精度浮点数，等于 s 中指定的数值或符号。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 不表示一个有效格式的数字。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

此 Parse(String, IFormatProvider) 方法重载通常用于将可以多种方式格式化的文本转换为 Double 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。 此 Parse(String, IFormatProvider) 方法重载通常用于将可以多种方式格式化的文本转换为 Double 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。

通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol，也可包含以下格式的字符串： 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol，也可包含以下格式的字符串：

[ws][sign]integral-digits[.[fractional-digits]][E[sign]exponential-digits][ws]

可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。 可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。

元素 | Description
ws | 一系列空白字符。
sign | 负号 (-) 或正号 (+)。
integral-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。
. | 区域性特定的小数点符号。
fractional-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。
E | "e"或"E"字符，指示用指数（科学型）表示法表示值。
exponential-digits | 一系列介于 0 到 9 之间的数字，用于指定指数。

有关数值格式的更多信息，请参见格式化类型主题。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回一个 NumberFormatInfo 对象，该对象提供用于解释 s 的格式的区域性特定信息。通常，它是 NumberFormatInfo 或 CultureInfo 对象。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法获取 NumberFormatInfo，则使用当前系统区域性的格式设置信息。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回一个 NumberFormatInfo 对象，该对象提供用于解释 s 的格式的区域性特定信息。通常，它是 NumberFormatInfo 或 CultureInfo 对象。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法获取 NumberFormatInfo，则使用当前系统区域性的格式设置信息。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回一个 NumberFormatInfo 对象，该对象提供用于解释 s 的格式的区域性特定信息。通常，它是 NumberFormatInfo 或 CultureInfo 对象。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法获取 NumberFormatInfo，则使用当前系统区域性的格式设置信息。

通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。

Dim value As String

value = Double.MinValue.ToString()
Try
   Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
   Console.WriteLine("{0} is outside the range of the Double type.", _
                     value)
End Try

value = Double.MaxValue.ToString()
Try
   Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
   Console.WriteLine("{0} is outside the range of the Double type.", _
                     value)
End Try
' The example displays the following output:
'    -1.79769313486232E+308 is outside the range of the Double type.
'    1.79769313486232E+308 is outside the range of the Double type.

   string value;

   value = Double.MinValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }

   value = Double.MaxValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Double 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Double 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Double 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Double 值。

Protected Sub OkToDouble_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OkToDouble.Click
   Dim locale As String
   Dim culture As CultureInfo
   Dim number As Double

   ' Return if string is empty
   If String.IsNullOrEmpty(Me.inputNumber.Text) Then Exit Sub

   ' Get locale of web request to determine possible format of number
   If Request.UserLanguages.Length = 0 Then Exit Sub
   locale = Request.UserLanguages(0)
   If String.IsNullOrEmpty(locale) Then Exit Sub

   ' Instantiate CultureInfo object for the user's locale
   culture = New CultureInfo(locale)

   ' Convert user input from a string to a number
   Try
      number = Double.Parse(Me.inputNumber.Text, culture.NumberFormat)
   Catch ex As FormatException
      Exit Sub
   Catch ex As Exception
      Exit Sub
   End Try

   ' Output number to label on web form
   Me.outputNumber.Text = "Number is " & number.ToString()
End Sub

protected void OkToDouble_Click(object sender, EventArgs e)
{
   string locale;
   double number;
   CultureInfo culture;

   // Return if string is empty
   if (String.IsNullOrEmpty(this.inputNumber.Text))
      return;

   // Get locale of web request to determine possible format of number
   if (Request.UserLanguages.Length == 0)
      return;
   locale = Request.UserLanguages[0];
   if (String.IsNullOrEmpty(locale))
      return;

  // Instantiate CultureInfo object for the user's locale
   culture = new CultureInfo(locale);

   // Convert user input from a string to a number
   try
   {
      number = Double.Parse(this.inputNumber.Text, culture.NumberFormat);
   }
   catch (FormatException)
   {
      return;
   }
   catch (Exception)
   {
      return;
   }
   // Output number to label on web form
   this.outputNumber.Text = "Number is " + number.ToString();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


Double ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

Double
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
Double 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As Double
public static double Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
public:
static double Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> float

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，这些枚举值指示可出现在 s 中的样式元素。一个要指定的典型值为 Float 与 AllowThousands 的组合。 枚举值的按位组合，这些枚举值指示可出现在 s 中的样式元素。一个要指定的典型值为 Float 与 AllowThousands 的组合。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System Double
一个双精度浮点数，等于 s 中指定的数值或符号。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 不代表数字值。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 为 NumberStyles..::.AllowHexSpecifier 值。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员：

  • AllowHexSpecifier

  • HexNumber

s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol。它也可以采用以下形式，具体取决于 style 的值： s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol。它也可以采用以下形式，具体取决于 style 的值：

[ws] [$] [sign][integral-digits,]integral-digits[.[fractional-digits]][E[sign]exponential-digits][ws]

括在方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 括在方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | Description
ws | 一系列空白字符。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 一系列空白字符。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
integral-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。
, | 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。
E | "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential-digits | 一系列介于 0 到 9 之间的数字，用于指定指数。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 integral-digits 元素。
AllowDecimalPoint | 小数点 (.)和 fractional-digits 元素。
AllowExponent | "e"或"E"字符，指示指数表示法。此标志自身支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。 "e"或"E"字符，指示指数表示法。此标志自身支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 千位分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、千位分隔符 (,) 以及小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数字。 所有元素。但是，s 不能表示十六进制数字。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回一个 NumberFormatInfo 对象，该对象提供用于解释 s 的格式的区域性特定信息。通常，它是 NumberFormatInfo 或 CultureInfo 对象。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法获取 NumberFormatInfo，则使用当前系统区域性的格式设置信息。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回一个 NumberFormatInfo 对象，该对象提供用于解释 s 的格式的区域性特定信息。通常，它是 NumberFormatInfo 或 CultureInfo 对象。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法获取 NumberFormatInfo，则使用当前系统区域性的格式设置信息。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回一个 NumberFormatInfo 对象，该对象提供用于解释 s 的格式的区域性特定信息。通常，它是 NumberFormatInfo 或 CultureInfo 对象。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法获取 NumberFormatInfo，则使用当前系统区域性的格式设置信息。

通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.Parse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。

Dim value As String

value = Double.MinValue.ToString()
Try
   Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
   Console.WriteLine("{0} is outside the range of the Double type.", _
                     value)
End Try

value = Double.MaxValue.ToString()
Try
   Console.WriteLine(Double.Parse(value))
Catch e As OverflowException
   Console.WriteLine("{0} is outside the range of the Double type.", _
                     value)
End Try
' The example displays the following output:
'    -1.79769313486232E+308 is outside the range of the Double type.
'    1.79769313486232E+308 is outside the range of the Double type.

   string value;

   value = Double.MinValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }

   value = Double.MaxValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Double type.",
                        value);
   }
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例演示如何使用 Parse(String, NumberStyles, IFormatProvider) 方法将温度值的一些字符串表示形式分配给 Temperature 对象。

Imports System.Globalization

Public Class Temperature
   ' Parses the temperature from a string. Temperature scale is
   ' indicated by 'F (for Fahrenheit) or 'C (for Celcius) at the end
   ' of the string.
   Public Shared Function Parse(s As String, styles As NumberStyles, _
                                provider As IFormatProvider) As Temperature
      Dim temp As New Temperature()

      If s.TrimEnd(Nothing).EndsWith("'F") Then
         temp.Value = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2), _
                                   styles, provider)
      Else
         If s.TrimEnd(Nothing).EndsWith("'C") Then
            temp.Celsius = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2), _
                                        styles, provider)
         Else
            temp.Value = Double.Parse(s, styles, provider)
         End If
      End If
      Return temp
   End Function

   ' Declare private constructor so Temperature so only Parse method can
   ' create a new instance
   Private Sub New
   End Sub

   Protected m_value As Double

   Public Property Value() As Double
      Get
         Return m_value
      End Get

      Private Set
         m_value = Value
      End Set
   End Property

   Public Property Celsius() As Double
      Get
         Return (m_value - 32) / 1.8
      End Get
      Private Set
         m_value = Value * 1.8 + 32
      End Set
   End Property

   Public ReadOnly Property Fahrenheit() As Double
      Get
         Return m_Value
      End Get
   End Property
End Class

Public Module TestTemperature
   Public Sub Main
      Dim value As String
      Dim styles As NumberStyles
      Dim provider As IFormatProvider
      Dim temp As Temperature

      value = "25,3'C"
      styles = NumberStyles.Float
      provider = CultureInfo.CreateSpecificCulture("fr-FR")
      temp = Temperature.Parse(value, styles, provider)
      Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.", _
                        temp.Fahrenheit, temp.Celsius)

      value = " (40) 'C"
      styles = NumberStyles.AllowLeadingWhite Or NumberStyles.AllowTrailingWhite _
               Or NumberStyles.AllowParentheses
      provider = NumberFormatInfo.InvariantInfo
      temp = Temperature.Parse(value, styles, provider)
      Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.", _
                        temp.Fahrenheit, temp.Celsius)

      value = "5,778E03'C"      ' Approximate surface temperature of the Sun
      styles = NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands Or _
               NumberStyles.AllowExponent
      provider = CultureInfo.CreateSpecificCulture("en-GB")
      temp = Temperature.Parse(value, styles, provider)
      Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.", _
                        temp.Fahrenheit.ToString("N"), temp.Celsius.ToString("N"))

   End Sub
End Module

using System;
using System.Globalization;

public class Temperature
{
   // Parses the temperature from a string. Temperature scale is
   // indicated by 'F (for Fahrenheit) or 'C (for Celcius) at the end
   // of the string.
   public static Temperature Parse(string s, NumberStyles styles,
                                   IFormatProvider provider)
   {
      Temperature temp = new Temperature();

      if (s.TrimEnd(null).EndsWith("'F"))
      {
         temp.Value = Double.Parse(s.Remove(s.LastIndexOf((char)39), 2),
                                   styles, provider);
      }
      else
      {
         if (s.TrimEnd(null).EndsWith("'C"))
            temp.Celsius = Double.Parse(s.Remove(s.LastIndexOf((char)39), 2),
                                        styles, provider);
         else
            temp.Value = Double.Parse(s, styles, provider);
      }
      return temp;
   }

   // Declare private constructor so Temperature so only Parse method can
   // create a new instance
   private Temperature()   {}

   protected double m_value;

   public double Value
   {
      get { return m_value; }
      private set { m_value = value; }
   }

   public double Celsius
   {
      get { return (m_value - 32) / 1.8; }
      private set { m_value = value * 1.8 + 32; }
   }

   public double Fahrenheit
   {
      get {return m_value; }
   }
}

public class TestTemperature
{
   public static void Main()
   {
      string value;
      NumberStyles styles;
      IFormatProvider provider;
      Temperature temp;

      value = "25,3'C";
      styles = NumberStyles.Float;
      provider = CultureInfo.CreateSpecificCulture("fr-FR");
      temp = Temperature.Parse(value, styles, provider);
      Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.",
                        temp.Fahrenheit, temp.Celsius);

      value = " (40) 'C";
      styles = NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite
               | NumberStyles.AllowParentheses;
      provider = NumberFormatInfo.InvariantInfo;
      temp = Temperature.Parse(value, styles, provider);
      Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.",
                        temp.Fahrenheit, temp.Celsius);

      value = "5,778E03'C";      // Approximate surface temperature of the Sun
      styles = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands |
               NumberStyles.AllowExponent;
      provider = CultureInfo.CreateSpecificCulture("en-GB");
      temp = Temperature.Parse(value, styles, provider);
      Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.",
                        temp.Fahrenheit.ToString("N"), temp.Celsius.ToString("N"));
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


Double ..::.ToString 方法

Double
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Double 结构

将此实例的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

Double 结构
Double 成员
System 命名空间


Double ..::.ToString 方法

Double
.
.
::
.
ToString 方法
Double 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示。

返回值可以是 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或如下形式的字符串：

[sign]integral-digits[.[fractional-digits]][e[sign]exponential-digits]

可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。支持下表列出的元素。 可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。支持下表列出的元素。 可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。支持下表列出的元素。

元素 | Description
sign | 负号或正号。
integral-digits | 指定数字整数部分的一系列数字。有小数位时可以没有整数位。 指定数字整数部分的一系列数字。有小数位时可以没有整数位。
'.' | 区域性特定的小数点符号。
fractional-digits | 指定数字小数部分的一系列数字。
“e” | 小写字符“e”，指示指数（科学型）表示法。
exponential-digits | 指定指数的一系列数字。

返回值的示例包括“100”、“-123,456,789”、“123.45e+6”、“500”、“3.1416”、“600”、“-0.123”和“负无穷大”。

此版本的 ToString 方法隐式使用通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用默认的 Double..::.ToString()()() 方法显示许多 Double 值的字符串表示形式。

Dim number As Double

number = 1.6E20
' Displays 1.6E+20.
Console.WriteLIne(number.ToString())

number = 1.6E2
' Displays 160.
Console.WriteLine(number.ToString())

number = -3.541
' Displays -3.541.
Console.WriteLine(number.ToString())

number = -1502345222199E-07
' Displays -150234.5222199.
Console.WriteLine(number.ToString())

number = -15023452221990199574E-09
' Displays -15023452221.9902.
Console.WriteLine(number.ToString())

number = .60344
' Displays 0.60344.
Console.WriteLine(number.ToString())

number = .000000001
' Displays 1E-09.
Console.WriteLine(number.ToString())

double number;

number = 1.6E20;
// Displays 1.6E+20.
Console.WriteLine(number.ToString());

number = 1.6E2;
// Displays 160.
Console.WriteLine(number.ToString());

number = -3.541;
// Displays -3.541.
Console.WriteLine(number.ToString());

number = -1502345222199E-07;
// Displays -150234.5222199.
Console.WriteLine(number.ToString());

number = -15023452221990199574E-09;
// Displays -15023452221.9902.
Console.WriteLine(number.ToString());

number = .60344;
// Displays 0.60344.
Console.WriteLine(number.ToString());

number = .000000001;
// Displays 1E-09.
Console.WriteLine(number.ToString());

下面的示例阐释 ToString 的用法。

Dim Done As Boolean = False
Dim Inp As String
Do

    Console.Write("Enter a real number: ")
    inp = Console.ReadLine()
    Try
        D = Double.Parse(inp)
        Console.WriteLine("You entered " + D.ToString() + ".")
        Done = True
    Catch E As FormatException
        Console.WriteLine("You did not enter a number.")
    Catch E As Exception
        Console.WriteLine("An exception occurred while parsing your response: " + E.ToString())
    End Try
Loop While Not Done

            bool done = false;
            string inp;
            do
            {
                Console.Write("Enter a real number: ");
                inp = Console.ReadLine();
                try
                {
                    d = Double.Parse(inp);
                    Console.WriteLine("You entered {0}.", d.ToString());
                    done = true;
                }
                catch (FormatException)
                {
                    Console.WriteLine("You did not enter a number.");
                }
                catch (Exception e)
                {
                    Console.WriteLine("An exception occurred while parsing your response: {0}", e.ToString());
                }
            } while (!done);

bool done = false;
String^ inp;
do
{
   Console::Write( "Enter a real number: " );
   inp = Console::ReadLine();
   try
   {
      d = Double::Parse( inp );
      Console::WriteLine( "You entered {0}.", d );
      done = true;
   }
   catch ( FormatException^ )
   {
      Console::WriteLine( "You did not enter a number." );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "An exception occurred while parsing your response: {0}", e );
   }

}
while (  !done );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Double ..::.ToString 方法 (IFormatProvider)

Double
.
.
::
.
ToString 方法 (IFormatProvider)
Double 结构

使用指定的区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由 provider 指定。

实现

返回值可以是 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或如下形式的字符串：

[sign]integral-digits[.[fractional-digits]][e[sign]exponential-digits]

可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。支持下表列出的元素。 可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。支持下表列出的元素。 可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。支持下表列出的元素。

元素 | Description
sign | 负号或正号。
integral-digits | 指定数字整数部分的一系列数字。有小数位时可以没有整数位。 指定数字整数部分的一系列数字。有小数位时可以没有整数位。
'.' | 区域性特定的小数点符号。
fractional-digits | 指定数字小数部分的一系列数字。
“e” | 小写字符“e”，指示指数（科学型）表示法。
exponential-digits | 指定指数的一系列数字。

返回值的示例包括“100”、“-123,456,789”、“123.45e+6”、“500”、“3.1416”、“600”、“-0.123”和“负无穷大”。

此实例使用通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。

若要使用指定的区域性和特定的格式字符串将 Double 值转换为它的字符串表示形式，请调用 Double..::.ToString(String, IFormatProvider) 方法。

下面的示例使用表示多个不同区域性的 CultureInfo 对象显示两个 Double 值的字符串表示形式。

Dim value As Double

value = -16325.62015
' Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture))
' Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")))
' Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")))

value = 16034.125E21
' Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture))
' Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")))
' Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")))
' This example displays the following output to the console:
'       -16325.62015
'       -16325.62015
'       -16325,62015
'       1.6034125E+25
'       1.6034125E+25
'       1,6034125E+25

double value;

value = -16325.62015;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));

value = 16034.125E21;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
// This example displays the following output to the console:
//       -16325.62015
//       -16325.62015
//       -16325,62015
//       1.6034125E+25
//       1.6034125E+25
//       1,6034125E+25

下面的示例以 String 和 IFormatProvider 作为参数演示 ToString 的用法。

Public Class Temperature
    Implements IFormattable

    Public Overloads Function ToString(ByVal format As String, ByVal provider As IFormatProvider) As String _
        Implements IFormattable.ToString

        If Not (format Is Nothing) Then
            If format.Equals("F") Then
                Return [String].Format("{0}'F", Me.Value.ToString())
            End If
            If format.Equals("C") Then
                Return [String].Format("{0}'C", Me.Celsius.ToString())
            End If
        End If

        Return m_value.ToString(format, provider)
    End Function

    ' The value holder
    Protected m_value As Double

    Public Property Value() As Double
        Get
            Return m_value
        End Get
        Set(ByVal Value As Double)
            m_value = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (m_value - 32) / 1.8
        End Get
        Set(ByVal Value As Double)
            m_value = Value * 1.8 + 32
        End Set
    End Property
End Class

    public class Temperature : IFormattable {
        /// <summary>
        /// IFormattable.ToString implementation.
        /// </summary>
        public string ToString(string format, IFormatProvider provider) {
            if( format != null ) {
                if( format.Equals("F") ) {
                    return String.Format("{0}'F", this.Value.ToString());
                }
                if( format.Equals("C") ) {
                    return String.Format("{0}'C", this.Celsius.ToString());
                }
            }

            return m_value.ToString(format, provider);
        }

        // The value holder
        protected double m_value;

        public double Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }

        public double Celsius {
            get {
                return (m_value-32.0)/1.8;
            }
            set {
                m_value = 1.8*value+32.0;
            }
        }
    }

public ref class Temperature: public IFormattable
{
   /// <summary>
   /// IFormattable.ToString implementation.
   /// </summary>
public:
   virtual String^ ToString( String^ format, IFormatProvider^ provider )
   {
      if ( format != nullptr )
      {
         if ( format->Equals( "F" ) )
         {
            return String::Format( "{0}'F", this->Value.ToString() );
         }

         if ( format->Equals( "C" ) )
         {
            return String::Format( "{0}'C", this->Celsius.ToString() );
         }
      }

      return m_value.ToString( format, provider );
   }

protected:
   // The value holder
   double m_value;

public:
   property double Value
   {
      double get()
      {
         return m_value;
      }
      void set( double value )
      {
         m_value = value;
      }
   }

   property double Celsius
   {
      double get()
      {
         return (m_value - 32.0) / 1.8;
      }
      void set( double value )
      {
         m_value = 1.8 * value + 32.0;
      }
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Double ..::.ToString 方法 (String)

Double
.
.
::
.
ToString 方法 (String)
Double 结构

使用指定的格式，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
一个数值格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 无效。

返回值可以是 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或由 format 指定的数字字符串表示形式。

format 参数可以是 D 和 X 之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则返回值由通用数值格式说明符（“G”）进行格式设置。 format 参数可以是 D 和 X 之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则返回值由通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。若要应用指定区域性的格式设置约定，请调用 Double..::.ToString(String, IFormatProvider) 方法。 返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。若要应用指定区域性的格式设置约定，请调用 Double..::.ToString(String, IFormatProvider) 方法。

默认情况下，返回值只包含 15 位精度，但内部维护的最大精度是 17 位。如果此实例的值超过 15 位，则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G17”或“R”格式规范指定 format；前一种格式总是返回 17 位精度；而后一种格式在数字可以用 15 位精度表示时返回 15 位精度，在数字只能用最大精度表示时返回 17 位精度。 默认情况下，返回值只包含 15 位精度，但内部维护的最大精度是 17 位。如果此实例的值超过 15 位，则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G17”或“R”格式规范指定 format；前一种格式总是返回 17 位精度；而后一种格式在数字可以用 15 位精度表示时返回 15 位精度，在数字只能用最大精度表示时返回 17 位精度。 默认情况下，返回值只包含 15 位精度，但内部维护的最大精度是 17 位。如果此实例的值超过 15 位，则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G17”或“R”格式规范指定 format；前一种格式总是返回 17 位精度；而后一种格式在数字可以用 15 位精度表示时返回 15 位精度，在数字只能用最大精度表示时返回 17 位精度。

返回值由当前区域性的 NumberFormatInfo 数据格式化。

下面的示例使用每个受支持的标准数值格式说明符以及两个自定义数值格式字符串来显示几个 Double 值。这些自定义格式字符串之一阐释如何用前导零填充 Single 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。 下面的示例使用每个受支持的标准数值格式说明符以及两个自定义数值格式字符串来显示几个 Double 值。这些自定义格式字符串之一阐释如何用前导零填充 Single 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。 下面的示例使用每个受支持的标准数值格式说明符以及两个自定义数值格式字符串来显示几个 Double 值。这些自定义格式字符串之一阐释如何用前导零填充 Single 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。

Dim numbers() As Double = {1054.32179, -195489100.8377, 1.0437E21, _
                         -1.0573e-05}
Dim specifiers() As String = { "C", "E", "e", "F", "G", "N", "P", _
                               "R", "#,000.000", "0.###E-000", _
                               "000,000,000,000.00###" }
For Each number As Double In numbers
   Console.WriteLine("Formatting of {0}:", number)
   For Each specifier As String In specifiers
      Console.WriteLine("   {0,5}: {1}", _
                        specifier, number.ToString(specifier))
   Next
   Console.WriteLine()
Next
' The example displays the following output to the console:
'       Formatting of 1054.32179:
'              C: $1,054.32
'              E: 1.054322E+003
'              e: 1.054322e+003
'              F: 1054.32
'              G: 1054.32179
'              N: 1,054.32
'              P: 105,432.18 %
'              R: 1054.32179
'          #,000.000: 1,054.322
'          0.###E-000: 1.054E003
'          000,000,000,000.00###: 000,000,001,054.322
'
'       Formatting of -195489100.8377:
'              C: ($195,489,100.84)
'              E: -1.954891E+008
'              e: -1.954891e+008
'              F: -195489100.84
'              G: -195489100.8377
'              N: -195,489,100.84
'              P: -19,548,910,083.77 %
'              R: -195489100.8377
'          #,000.000: -195,489,100.838
'          0.###E-000: -1.955E008
'          000,000,000,000.00###: -000,195,489,100.00
'
'       Formatting of 1.0437E+21:
'              C: $1,043,700,000,000,000,000,000.00
'              E: 1.043700E+021
'              e: 1.043700e+021
'              F: 1043700000000000000000.00
'              G: 1.0437E+21
'              N: 1,043,700,000,000,000,000,000.00
'              P: 104,370,000,000,000,000,000,000.00 %
'              R: 1.0437E+21
'          #,000.000: 1,043,700,000,000,000,000,000.000
'          0.###E-000: 1.044E021
'          000,000,000,000.00###: 1,043,700,000,000,000,000,000.00
'
'       Formatting of -1.0573E-05:
'              C: $0.00
'              E: -1.057300E-005
'              e: -1.057300e-005
'              F: 0.00
'              G: -1.0573E-05
'              N: 0.00
'              P: 0.00 %
'              R: -1.0573E-05
'          #,000.000: 000.000
'          0.###E-000: -1.057E-005
'          000,000,000,000.00###: -000,000,000,000.00001

double[] numbers= {1054.32179, -195489100.8377, 1.0437E21,
                   -1.0573e-05};
string[] specifiers = { "C", "E", "e", "F", "G", "N", "P",
                        "R", "#,000.000", "0.###E-000",
                        "000,000,000,000.00###" };
foreach (double number in numbers)
{
   Console.WriteLine("Formatting of {0}:", number);
   foreach (string specifier in specifiers)
      Console.WriteLine("   {0,5}: {1}",
                        specifier, number.ToString(specifier));

   Console.WriteLine();
}
// The example displays the following output to the console:
//       Formatting of 1054.32179:
//              C: $1,054.32
//              E: 1.054322E+003
//              e: 1.054322e+003
//              F: 1054.32
//              G: 1054.32179
//              N: 1,054.32
//              P: 105,432.18 %
//              R: 1054.32179
//          #,000.000: 1,054.322
//          0.###E-000: 1.054E003
//          000,000,000,000.00###: 000,000,001,054.322
//
//       Formatting of -195489100.8377:
//              C: ($195,489,100.84)
//              E: -1.954891E+008
//              e: -1.954891e+008
//              F: -195489100.84
//              G: -195489100.8377
//              N: -195,489,100.84
//              P: -19,548,910,083.77 %
//              R: -195489100.8377
//          #,000.000: -195,489,100.838
//          0.###E-000: -1.955E008
//          000,000,000,000.00###: -000,195,489,100.00
//
//       Formatting of 1.0437E+21:
//              C: $1,043,700,000,000,000,000,000.00
//              E: 1.043700E+021
//              e: 1.043700e+021
//              F: 1043700000000000000000.00
//              G: 1.0437E+21
//              N: 1,043,700,000,000,000,000,000.00
//              P: 104,370,000,000,000,000,000,000.00 %
//              R: 1.0437E+21
//          #,000.000: 1,043,700,000,000,000,000,000.000
//          0.###E-000: 1.044E021
//          000,000,000,000.00###: 1,043,700,000,000,000,000,000.00
//
//       Formatting of -1.0573E-05:
//              C: $0.00
//              E: -1.057300E-005
//              e: -1.057300e-005
//              F: 0.00
//              G: -1.0573E-05
//              N: 0.00
//              P: 0.00 %
//              R: -1.0573E-05
//          #,000.000: 000.000
//          000,000,000,000.00###: -000,000,000,000.00001

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
如何：用前导零填充数字


Double ..::.ToString 方法 (String, IFormatProvider)

Double
.
.
::
.
ToString 方法 (String, IFormatProvider)
Double 结构

使用指定的格式和区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
一个数值格式字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 和 provider 指定。

实现

返回值可以是 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或由 format 指定的数字字符串表示形式。

format 参数可以是 D 和 X 之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是 D 和 X 之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。

默认情况下，返回值只包含 15 位精度，但内部维护的最大精度是 17 位。如果此实例的值超过 15 位，则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G17”或“R”格式规范指定 format；前一种格式总是返回 17 位精度；而后一种格式在数字可以用 15 位精度表示时返回 15 位精度，在数字只能用最大精度表示时返回 17 位精度。 默认情况下，返回值只包含 15 位精度，但内部维护的最大精度是 17 位。如果此实例的值超过 15 位，则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G17”或“R”格式规范指定 format；前一种格式总是返回 17 位精度；而后一种格式在数字可以用 15 位精度表示时返回 15 位精度，在数字只能用最大精度表示时返回 17 位精度。 默认情况下，返回值只包含 15 位精度，但内部维护的最大精度是 17 位。如果此实例的值超过 15 位，则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G17”或“R”格式规范指定 format；前一种格式总是返回 17 位精度；而后一种格式在数字可以用 15 位精度表示时返回 15 位精度，在数字只能用最大精度表示时返回 17 位精度。

下面的示例使用一些不同的区域性的每个支持的标准数值格式说明符来显示 Double 值。

Dim value As Double = 16325.62901
Dim specifier As String
Dim culture As CultureInfo

' Use standard numeric format specifiers.
specifier = "G"
culture = CultureInfo.CreateSpecificCulture("eu-ES")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16325,62901
Console.WriteLine(value.ToString(specifier, CultureInfo.InvariantCulture))
' Displays:    16325.62901

specifier = "C"
culture = CultureInfo.CreateSpecificCulture("en-US")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    $16,325.63
culture = CultureInfo.CreateSpecificCulture("en-GB")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:     16,325.63

specifier = "E04"
culture = CultureInfo.CreateSpecificCulture("sv-SE")
Console.WriteLine(value.ToString(specifier, culture))
' Displays: 1,6326E+004
 culture = CultureInfo.CreateSpecificCulture("en-NZ")
 Console.WriteLine(value.ToString(specifier, culture))
' Displays:    1.6326E+004

specifier = "F"
culture = CultureInfo.CreateSpecificCulture("fr-FR")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16325,63
culture = CultureInfo.CreateSpecificCulture("en-CA")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16325.63

specifier = "N"
culture = CultureInfo.CreateSpecificCulture("es-ES")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16.325,63
culture = CultureInfo.CreateSpecificCulture("fr-CA")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16 325,63

specifier = "P"
culture = CultureInfo.InvariantCulture
Console.WriteLine((value/10000).ToString(specifier, culture))
' Displays:    163.26 %
culture = CultureInfo.CreateSpecificCulture("ar-EG")
Console.WriteLine((value/10000).ToString(specifier, culture))
' Displays:    163.256 %

double value = 16325.62901;
string specifier;
CultureInfo culture;

// Use standard numeric format specifiers.
specifier = "G";
culture = CultureInfo.CreateSpecificCulture("eu-ES");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16325,62901
Console.WriteLine(value.ToString(specifier, CultureInfo.InvariantCulture));
// Displays:    16325.62901

specifier = "C";
culture = CultureInfo.CreateSpecificCulture("en-US");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    $16,325.63
culture = CultureInfo.CreateSpecificCulture("en-GB");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:     16,325.63

specifier = "E04";
culture = CultureInfo.CreateSpecificCulture("sv-SE");
Console.WriteLine(value.ToString(specifier, culture));
// Displays: 1,6326E+004
 culture = CultureInfo.CreateSpecificCulture("en-NZ");
 Console.WriteLine(value.ToString(specifier, culture));
// Displays:    1.6326E+004

specifier = "F";
culture = CultureInfo.CreateSpecificCulture("fr-FR");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16325,63
culture = CultureInfo.CreateSpecificCulture("en-CA");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16325.63

specifier = "N";
culture = CultureInfo.CreateSpecificCulture("es-ES");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16.325,63
culture = CultureInfo.CreateSpecificCulture("fr-CA");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16 325,63

specifier = "P";
culture = CultureInfo.InvariantCulture;
Console.WriteLine((value/10000).ToString(specifier, culture));
// Displays:    163.26 %
culture = CultureInfo.CreateSpecificCulture("ar-EG");
Console.WriteLine((value/10000).ToString(specifier, culture));
// Displays:    163.256 %

下面的示例以 String 和 IFormatProvider 作为参数演示 ToString 的用法。

Public Class Temperature
    Implements IFormattable

    Public Overloads Function ToString(ByVal format As String, ByVal provider As IFormatProvider) As String _
        Implements IFormattable.ToString

        If Not (format Is Nothing) Then
            If format.Equals("F") Then
                Return [String].Format("{0}'F", Me.Value.ToString())
            End If
            If format.Equals("C") Then
                Return [String].Format("{0}'C", Me.Celsius.ToString())
            End If
        End If

        Return m_value.ToString(format, provider)
    End Function

    ' The value holder
    Protected m_value As Double

    Public Property Value() As Double
        Get
            Return m_value
        End Get
        Set(ByVal Value As Double)
            m_value = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (m_value - 32) / 1.8
        End Get
        Set(ByVal Value As Double)
            m_value = Value * 1.8 + 32
        End Set
    End Property
End Class

    public class Temperature : IFormattable {
        /// <summary>
        /// IFormattable.ToString implementation.
        /// </summary>
        public string ToString(string format, IFormatProvider provider) {
            if( format != null ) {
                if( format.Equals("F") ) {
                    return String.Format("{0}'F", this.Value.ToString());
                }
                if( format.Equals("C") ) {
                    return String.Format("{0}'C", this.Celsius.ToString());
                }
            }

            return m_value.ToString(format, provider);
        }

        // The value holder
        protected double m_value;

        public double Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }

        public double Celsius {
            get {
                return (m_value-32.0)/1.8;
            }
            set {
                m_value = 1.8*value+32.0;
            }
        }
    }

public ref class Temperature: public IFormattable
{
   /// <summary>
   /// IFormattable.ToString implementation.
   /// </summary>
public:
   virtual String^ ToString( String^ format, IFormatProvider^ provider )
   {
      if ( format != nullptr )
      {
         if ( format->Equals( "F" ) )
         {
            return String::Format( "{0}'F", this->Value.ToString() );
         }

         if ( format->Equals( "C" ) )
         {
            return String::Format( "{0}'C", this->Celsius.ToString() );
         }
      }

      return m_value.ToString( format, provider );
   }

protected:
   // The value holder
   double m_value;

public:
   property double Value
   {
      double get()
      {
         return m_value;
      }
      void set( double value )
      {
         m_value = value;
      }
   }

   property double Celsius
   {
      double get()
      {
         return (m_value - 32.0) / 1.8;
      }
      void set( double value )
      {
         m_value = 1.8 * value + 32.0;
      }
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Double 结构
Double 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
如何：用前导零填充数字


Double ..::.TryParse 方法

Double
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Double 结构

将数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。

名称 说明
页首

参考

Double 结构
Double 成员
System 命名空间
Parse


Double ..::.TryParse 方法 (String, Double%)

Double
.
.
::
.
TryParse 方法 (String, Double%)
Double 结构

将数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As Double _
) As Boolean
public static bool TryParse(
    string s,
    out double result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] double% result
)
static member TryParse :
        s:string *
        result:float byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。
result
类型： System Double %
当此方法返回时，如果转换成功，则包含与 s 参数等效的双精度浮点数；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不是有效格式的数字或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 参数等效的双精度浮点数；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不是有效格式的数字或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 参数等效的双精度浮点数；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不是有效格式的数字或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。

此重载与 Double..::.Parse(String) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 此重载与 Double..::.Parse(String) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

s 参数可包含当前区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol、NumberFormatInfo..::.NaNSymbol（字符串比较区分大小写）或以下格式的字符串：

[ws][sign][integral-digits,]integral-digits[.[fractional-digits]][e[sign]exponential-digits][ws]

方括号中的元素是可选的。下表描述每个元素。 方括号中的元素是可选的。下表描述每个元素。

元素 | Description
ws | 一系列空白字符。
sign | 负号或正号。
integral-digits | 一系列介于 0 到 9 之间的数字字符，用于指定数字的整数部分。有小数位时可以没有整数位。 一系列介于 0 到 9 之间的数字字符，用于指定数字的整数部分。有小数位时可以没有整数位。
, | 区域性特定的组分隔符。
. | 区域性特定的小数点符号。
fractional-digits | 一系列介于 0 到 9 之间的数字字符，用于指定数字的小数部分。
E | 大写或小写字符“e”，表示指数（科学型）表示法。
exponential-digits | 一系列介于 0 到 9 之间的数字字符，用于指定指数。

有关数值格式的更多信息，请参见格式化类型。

通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Double..::.TryParse(String, NumberStyles, IFormatProvider, Double%) 方法重载。 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Double..::.TryParse(String, NumberStyles, IFormatProvider, Double%) 方法重载。 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Double..::.TryParse(String, NumberStyles, IFormatProvider, Double%) 方法重载。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用其他一些指定区域性的格式设置信息分析字符串，请使用 Double..::.TryParse(String, NumberStyles, IFormatProvider, Double%) 方法重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用其他一些指定区域性的格式设置信息分析字符串，请使用 Double..::.TryParse(String, NumberStyles, IFormatProvider, Double%) 方法重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用其他一些指定区域性的格式设置信息分析字符串，请使用 Double..::.TryParse(String, NumberStyles, IFormatProvider, Double%) 方法重载。

通常，如果向 Double..::.TryParse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.TryParse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.TryParse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。

Dim value As String
Dim number As Double

value = Double.MinValue.ToString()
If Double.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("{0} is outside the range of a Double.", _
                     value)
End If

value = Double.MaxValue.ToString()
If Double.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("{0} is outside the range of a Double.", _
                     value)
End If
' The example displays the following output:
'    -1.79769313486232E+308 is outside the range of the Double type.
'    1.79769313486232E+308 is outside the range of the Double type.

string value;
double number;

value = Double.MinValue.ToString();
if (Double.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("{0} is outside the range of a Double.",
                     value);

value = Double.MaxValue.ToString();
if (Double.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("{0} is outside the range of a Double.",
                     value);
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且小数点分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且小数点分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的代码示例使用 TryParse(String, Double%) 方法将数值的字符串表示形式转换为 Double 值。该示例假定当前区域性为 en-US。 下面的代码示例使用 TryParse(String, Double%) 方法将数值的字符串表示形式转换为 Double 值。该示例假定当前区域性为 en-US。

Dim value As String
Dim number As Double

' Parse a floating-point value with a thousands separator.
value = "1,643.57"
If Double.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If

' Parse a floating-point value with a currency symbol and a
' thousands separator.
value = "$1,643.57"
If Double.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If

' Parse value in exponential notation.
value = "-1.643e6"
If Double.TryParse(value, number)
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If

' Parse a negative integer number.
value = "-168934617882109132"
If Double.TryParse(value, number)
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If
' The example displays the following output to the console:
'       1643.57
'       Unable to parse '$1,643.57'.
'       -1643000
'       -1.68934617882109E+17

string value;
double number;

// Parse a floating-point value with a thousands separator.
value = "1,643.57";
if (Double.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);

// Parse a floating-point value with a currency symbol and a
// thousands separator.
value = "$1,643.57";
if (Double.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);

// Parse value in exponential notation.
value = "-1.643e6";
if (Double.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);

// Parse a negative integer value.
value = "-168934617882109132";
if (Double.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);
// The example displays the following output to the console:
//       1643.57
//       Unable to parse '$1,643.57'.
//       -164300
//       -1.68934617882109E+17

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Double 结构
Double 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


Double ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, Double%)

Double
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, Double%)
Double 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。 将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As Double _
) As Boolean
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out double result
)
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] double% result
)
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:float byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
NumberStyles 值的按位组合，指示 s 允许使用的格式。一个用来指定的典型值为 NumberStyles..::.Float 与 NumberStyles..::.AllowThousands 的组合。 NumberStyles 值的按位组合，指示 s 允许使用的格式。一个用来指定的典型值为 NumberStyles..::.Float 与 NumberStyles..::.AllowThousands 的组合。
provider
类型： System IFormatProvider
一个 IFormatProvider，它提供有关 s 的区域性特定格式设置信息。
result
类型： System Double %
当此方法返回时，如果转换成功，则包含与 s 中所包含的数值或符号等效的双精度浮点数；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），其格式不符合 style，表示的数字小于 MinValue 或大于 MaxValue，或者 style 不是 NumberStyles 枚举的常数的有效组合，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所包含的数值或符号等效的双精度浮点数；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），其格式不符合 style，表示的数字小于 MinValue 或大于 MaxValue，或者 style 不是 NumberStyles 枚举的常数的有效组合，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所包含的数值或符号等效的双精度浮点数；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），其格式不符合 style，表示的数字小于 MinValue 或大于 MaxValue，或者 style 不是 NumberStyles 枚举的常数的有效组合，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 包括 NumberStyles..::.AllowHexSpecifier 值。

TryParse 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于该方法在转换失败时不引发异常。如果转换成功，返回值为 true，result 参数设置为转换的结果。如果转换失败，则返回值为 false，result 参数设置为零。这样，在 s 无效因而无法成功分析的情况下，就不需要使用异常处理来测试 FormatException。 TryParse 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于该方法在转换失败时不引发异常。如果转换成功，返回值为 true，result 参数设置为转换的结果。如果转换失败，则返回值为 false，result 参数设置为零。这样，在 s 无效因而无法成功分析的情况下，就不需要使用异常处理来测试 FormatException。 TryParse 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于该方法在转换失败时不引发异常。如果转换成功，返回值为 true，result 参数设置为转换的结果。如果转换失败，则返回值为 false，result 参数设置为零。这样，在 s 无效因而无法成功分析的情况下，就不需要使用异常处理来测试 FormatException。 TryParse 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于该方法在转换失败时不引发异常。如果转换成功，返回值为 true，result 参数设置为转换的结果。如果转换失败，则返回值为 false，result 参数设置为零。这样，在 s 无效因而无法成功分析的情况下，就不需要使用异常处理来测试 FormatException。

style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员：

  • NumberStyles AllowHexSpecifier

  • NumberStyles HexNumber

s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol。此外，根据 style 的值，s 参数还可以包括下列元素： s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol。此外，根据 style 的值，s 参数还可以包括下列元素：

[ws] [$] [sign][integral-digits,]integral-digits[.fractional-digits][e[sign]exponential-digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | Description
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头。如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头。如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头。如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 IFormatProvider..::.GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyNegativePattern 或 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 IFormatProvider..::.GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyNegativePattern 或 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 IFormatProvider..::.GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyNegativePattern 或 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
integral-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。有小数位时可以没有整数位。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。有小数位时可以没有整数位。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。
e | 字符 e 或 E，用于指示 s 可使用指数表示法表示数字。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 字符 e 或 E，用于指示 s 可使用指数表示法表示数字。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential-digits | 一系列介于 0 到 9 之间的数字，用于指定指数。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 integral-digits 元素。
AllowDecimalPoint | . 和 fractional-digits 元素。
AllowExponent | s 参数也可以使用指数表示法。此标志自身支持 integral-digitsEexponential-digits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的、采用指数表示法的字符串所必需的。 s 参数也可以使用指数表示法。此标志自身支持 integral-digitsEexponential-digits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的、采用指数表示法的字符串所必需的。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | , 元素。
AllowCurrencySymbol | $ 元素。
Currency | 所有人。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有人。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 开头的 sign 以及 . 符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 开头的 sign 以及 . 符号。s 参数也可以使用指数表示法。
Number | ws、sign、千位分隔符 (,) 以及小数点 (.)元素。
Any | 所有样式（除 s 之外）都不能表示十六进制数字。

provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者无法获取 NumberFormatInfo 对象，则使用当前区域性的格式设置信息。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者无法获取 NumberFormatInfo 对象，则使用当前区域性的格式设置信息。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者无法获取 NumberFormatInfo 对象，则使用当前区域性的格式设置信息。

如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不是数值、provider 参数不产生 NumberFormatInfo 对象，或者 style 参数不是 NumberStyles 枚举的位标志的组合，则转换失败。

通常，如果向 Double..::.TryParse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.TryParse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。 通常，如果向 Double..::.TryParse 方法传递通过调用 Double..::.ToString 方法创建的字符串，将返回原始 Double 值。但是，由于精度损失，这些值可能不相等。此外，尝试分析 MinValue 或 MaxValue 的字符串表示形式会引发 OverflowException，如下面的示例所示。

Dim value As String
Dim number As Double

value = Double.MinValue.ToString()
If Double.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("{0} is outside the range of a Double.", _
                     value)
End If

value = Double.MaxValue.ToString()
If Double.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("{0} is outside the range of a Double.", _
                     value)
End If
' The example displays the following output:
'    -1.79769313486232E+308 is outside the range of the Double type.
'    1.79769313486232E+308 is outside the range of the Double type.

string value;
double number;

value = Double.MinValue.ToString();
if (Double.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("{0} is outside the range of a Double.",
                     value);

value = Double.MaxValue.ToString();
if (Double.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("{0} is outside the range of a Double.",
                     value);
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例演示如何使用 Double..::.TryParse(String, NumberStyles, IFormatProvider, Double%) 方法分析具有特定样式并使用特定区域性约定进行了格式设置的数字字符串表示形式。

Dim value As String
Dim style As NumberStyles
Dim culture As CultureInfo
Dim number As Double

' Parse currency value using en-GB culture.
value = " 1,097.63"
style = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
culture = CultureInfo.CreateSpecificCulture("en-GB")
If Double.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
'       Converted ' 1,097.63' to 1097.63.

value = "1345,978"
style = NumberStyles.AllowDecimalPoint
culture = CultureInfo.CreateSpecificCulture("fr-FR")
If Double.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
'       Converted '1345,978' to 1345.978.

value = "1.345,978"
style = NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands
culture = CultureInfo.CreateSpecificCulture("es-ES")
If Double.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
'       Converted '1.345,978' to 1345.978.

value = "1 345,978"
If Double.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If
' Displays:
'       Unable to convert '1 345,978'.

string value;
NumberStyles style;
CultureInfo culture;
double number;

// Parse currency value using en-GB culture.
value = " 1,097.63";
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
culture = CultureInfo.CreateSpecificCulture("en-GB");
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted ' 1,097.63' to 1097.63.

value = "1345,978";
style = NumberStyles.AllowDecimalPoint;
culture = CultureInfo.CreateSpecificCulture("fr-FR");
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted '1345,978' to 1345.978.

value = "1.345,978";
style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
culture = CultureInfo.CreateSpecificCulture("es-ES");
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted '1.345,978' to 1345.978.

value = "1 345,978";
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Unable to convert '1 345,978'.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Double 结构
Double 成员
TryParse 重载
System 命名空间
ToString

其他资源

分析数值字符串


Double 运算符

Double 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Double 结构

Double 类型公开以下成员。

名称 说明
页首

参考

Double 结构
System 命名空间


Double ..::.Equality 运算符

Double
.
.
::
.
Equality 运算符
Double 结构

返回一个值，该值指示两个指定的 Double 值是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    left As Double, _
    right As Double _
) As Boolean
public static bool operator ==(
    double left,
    double right
)
public:
static bool operator ==(
    double left,
    double right
)
static let inline (=)
        left:float *
        right:float  : bool

参数

left
类型： System Double
要比较的第一个值。
right
类型： System Double
要比较的第二个值。

返回值

类型： System Boolean
如果 left 和 right 相等，则为 true；否则为 false。

Equality 方法定义了 Double 值的相等运算符。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Double 结构
Double 成员
System 命名空间


Double ..::.GreaterThan 运算符

Double
.
.
::
.
GreaterThan 运算符
Double 结构

返回一个值，该值指示指定的 Double 值是否大于另一个指定的 Double 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator > ( _
    left As Double, _
    right As Double _
) As Boolean
public static bool operator >(
    double left,
    double right
)
public:
static bool operator >(
    double left,
    double right
)
static let inline (>)
        left:float *
        right:float  : bool

参数

left
类型： System Double
要比较的第一个值。
right
类型： System Double
要比较的第二个值。

返回值

类型： System Boolean
如果 left 大于 right，则为 true；否则为 false。

GreaterThan 方法为 Double 值定义了大于运算符的运算。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Double 结构
Double 成员
System 命名空间


Double ..::.GreaterThanOrEqual 运算符

Double
.
.
::
.
GreaterThanOrEqual 运算符
Double 结构

返回一个值，该值指示指定的 Double 值是否大于或等于另一个指定的 Double 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator >= ( _
    left As Double, _
    right As Double _
) As Boolean
public static bool operator >=(
    double left,
    double right
)
public:
static bool operator >=(
    double left,
    double right
)
static let inline (>=)
        left:float *
        right:float  : bool

参数

left
类型： System Double
要比较的第一个值。
right
类型： System Double
要比较的第二个值。

返回值

类型： System Boolean
如果 left 大于或等于 right，则为 true；否则为 false。

GreaterThanOrEqual 方法为 Double 值定义了大于或等于运算符的运算。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Double 结构
Double 成员
System 命名空间


Double ..::.Inequality 运算符

Double
.
.
::
.
Inequality 运算符
Double 结构

返回一个值，该值指示两个指定的 Double 值是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    left As Double, _
    right As Double _
) As Boolean
public static bool operator !=(
    double left,
    double right
)
public:
static bool operator !=(
    double left,
    double right
)
static let inline (<>)
        left:float *
        right:float  : bool

参数

left
类型： System Double
要比较的第一个值。
right
类型： System Double
要比较的第二个值。

返回值

类型： System Boolean
如果 left 与 right 不相等，则为 true；否则为 false。

Inequality 方法定义了 Double 值的不相等运算符。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Double 结构
Double 成员
System 命名空间


Double ..::.LessThan 运算符

Double
.
.
::
.
LessThan 运算符
Double 结构

返回一个值，该值指示指定的 Double 值是否小于另一个指定的 Double 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator < ( _
    left As Double, _
    right As Double _
) As Boolean
public static bool operator <(
    double left,
    double right
)
public:
static bool operator <(
    double left,
    double right
)
static let inline (<)
        left:float *
        right:float  : bool

参数

left
类型： System Double
要比较的第一个值。
right
类型： System Double
要比较的第二个值。

返回值

类型： System Boolean
如果 left 小于 right，则为 true；否则为 false。

LessThan 方法为 Double 值定义了小于运算符的运算。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Double 结构
Double 成员
System 命名空间


Double ..::.LessThanOrEqual 运算符

Double
.
.
::
.
LessThanOrEqual 运算符
Double 结构

返回一个值，该值指示指定的 Double 值是否小于或等于另一个指定的 Double 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <= ( _
    left As Double, _
    right As Double _
) As Boolean
public static bool operator <=(
    double left,
    double right
)
public:
static bool operator <=(
    double left,
    double right
)
static let inline (<=)
        left:float *
        right:float  : bool

参数

left
类型： System Double
要比较的第一个值。
right
类型： System Double
要比较的第二个值。

返回值

类型： System Boolean
如果 left 小于或等于 right，则为 true；否则为 false。

LessThanOrEqual 方法为 Double 值定义了小于或等于运算符的运算。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Double 结构
Double 成员
System 命名空间


DuplicateWaitObjectException 类

DuplicateWaitObjectException 类
成员

当对象在同步对象数组中不止一次出现时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class DuplicateWaitObjectException _
    Inherits ArgumentException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class DuplicateWaitObjectException : ArgumentException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class DuplicateWaitObjectException : public ArgumentException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type DuplicateWaitObjectException =
    class
        inherit ArgumentException
    end

公共语言运行时提供了一个线程同步机制，该机制基于等待在 WaitHandle 对象数组中执行的同步对象。如果传递到 WaitAll 或 WaitAny 的 WaitHandle 对象数组包含任何重复的操作系统句柄，则将引发 DuplicateWaitObjectException。有关更多信息，请参见 WaitHandle。 公共语言运行时提供了一个线程同步机制，该机制基于等待在 WaitHandle 对象数组中执行的同步对象。如果传递到 WaitAll 或 WaitAny 的 WaitHandle 对象数组包含任何重复的操作系统句柄，则将引发 DuplicateWaitObjectException。有关更多信息，请参见 WaitHandle。 公共语言运行时提供了一个线程同步机制，该机制基于等待在 WaitHandle 对象数组中执行的同步对象。如果传递到 WaitAll 或 WaitAny 的 WaitHandle 对象数组包含任何重复的操作系统句柄，则将引发 DuplicateWaitObjectException。有关更多信息，请参见 WaitHandle。

DuplicateWaitObjectException 使用值为 0x80131529 的 HRESULT COR_E_DUPLICATEWAITOBJECT。

有关 DuplicateWaitObjectException 实例的初始属性值列表，请参见 DuplicateWaitObjectException 构造函数。

System System..::.DuplicateWaitObjectExceptionDuplicateWaitObjectException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateWaitObjectException 成员
System 命名空间
WaitHandle
Exception

其他资源

托管线程处理
处理和引发异常


DuplicateWaitObjectException 成员

DuplicateWaitObjectException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateWaitObjectException 类

当对象在同步对象数组中不止一次出现时引发的异常。

DuplicateWaitObjectException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DuplicateWaitObjectException 类
System 命名空间


DuplicateWaitObjectException 构造函数

DuplicateWaitObjectException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateWaitObjectException 类

初始化 DuplicateWaitObjectException 类的新实例。

名称 说明
页首

参考

DuplicateWaitObjectException 类
DuplicateWaitObjectException 成员
System 命名空间


DuplicateWaitObjectException 构造函数

DuplicateWaitObjectException 构造函数
DuplicateWaitObjectException 类

初始化 DuplicateWaitObjectException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public DuplicateWaitObjectException()
public:
DuplicateWaitObjectException()
new : unit -> DuplicateWaitObjectException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“参数中的重复对象。”。此消息将考虑当前系统区域性。

下表显示 DuplicateWaitObjectException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateWaitObjectException 类
DuplicateWaitObjectException 成员
DuplicateWaitObjectException 重载
System 命名空间


DuplicateWaitObjectException 构造函数 (String)

DuplicateWaitObjectException 构造函数 (String)
DuplicateWaitObjectException 类

使用导致此异常的参数的名称初始化 DuplicateWaitObjectException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    parameterName As String _
)
public DuplicateWaitObjectException(
    string parameterName
)
public:
DuplicateWaitObjectException(
    String^ parameterName
)
new :
        parameterName:string -> DuplicateWaitObjectException

参数

parameterName
类型： System String
导致异常的参数的名称。

parameterName 的内容被设计为人可理解的形式。

下表显示 DuplicateWaitObjectException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。
ParamName | 参数名字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateWaitObjectException 类
DuplicateWaitObjectException 成员
DuplicateWaitObjectException 重载
System 命名空间


DuplicateWaitObjectException 构造函数 (SerializationInfo, StreamingContext)

DuplicateWaitObjectException 构造函数 (SerializationInfo, StreamingContext)
DuplicateWaitObjectException 类

用序列化数据初始化 DuplicateWaitObjectException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected DuplicateWaitObjectException(
    SerializationInfo info,
    StreamingContext context
)
protected:
DuplicateWaitObjectException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> DuplicateWaitObjectException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateWaitObjectException 类
DuplicateWaitObjectException 成员
DuplicateWaitObjectException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


DuplicateWaitObjectException 构造函数 (String, Exception)

DuplicateWaitObjectException 构造函数 (String, Exception)
DuplicateWaitObjectException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 DuplicateWaitObjectException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public DuplicateWaitObjectException(
    string message,
    Exception innerException
)
public:
DuplicateWaitObjectException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> DuplicateWaitObjectException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递给此构造函数的值相同。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递给此构造函数的值相同。

下表显示 DuplicateWaitObjectException 实例的初始属性值。

属性 | 值
InnerException | 由 innerException 指定的异常。
Message | 由 message 指定的错误信息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateWaitObjectException 类
DuplicateWaitObjectException 成员
DuplicateWaitObjectException 重载
System 命名空间


DuplicateWaitObjectException 构造函数 (String, String)

DuplicateWaitObjectException 构造函数 (String, String)
DuplicateWaitObjectException 类

使用指定错误消息和导致此异常的参数的名称来初始化 DuplicateWaitObjectException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    parameterName As String, _
    message As String _
)
public DuplicateWaitObjectException(
    string parameterName,
    string message
)
public:
DuplicateWaitObjectException(
    String^ parameterName,
    String^ message
)
new :
        parameterName:string *
        message:string -> DuplicateWaitObjectException

参数

parameterName
类型： System String
导致异常的参数的名称。
message
类型： System String
描述错误的消息。

parameterName 和 message 参数的内容应为人所理解。此构造函数的调用方必须确保这些字符串已针对当前系统区域性进行了本地化。 parameterName 和 message 参数的内容应为人所理解。此构造函数的调用方必须确保这些字符串已针对当前系统区域性进行了本地化。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 DuplicateWaitObjectException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。
ParamName | 参数名字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateWaitObjectException 类
DuplicateWaitObjectException 成员
DuplicateWaitObjectException 重载
System 命名空间
Exception

其他资源

处理和引发异常


DuplicateWaitObjectException 方法

DuplicateWaitObjectException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateWaitObjectException 类

DuplicateWaitObjectException 类型公开以下成员。

名称 说明
页首

参考

DuplicateWaitObjectException 类
System 命名空间


DuplicateWaitObjectException 属性

DuplicateWaitObjectException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateWaitObjectException 类

DuplicateWaitObjectException 类型公开以下成员。

名称 说明
页首

参考

DuplicateWaitObjectException 类
System 命名空间


DuplicateWaitObjectException 事件

DuplicateWaitObjectException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateWaitObjectException 类

DuplicateWaitObjectException 类型公开以下成员。

名称 说明
页首

参考

DuplicateWaitObjectException 类
System 命名空间


EntryPointNotFoundException 类

EntryPointNotFoundException 类
成员

因不存在项方法而导致加载类的尝试失败时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class EntryPointNotFoundException _
    Inherits TypeLoadException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class EntryPointNotFoundException : TypeLoadException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class EntryPointNotFoundException : public TypeLoadException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type EntryPointNotFoundException =
    class
        inherit TypeLoadException
    end

表示因缺少入口点而导致加载 Assembly 的尝试失败时出现的错误。

有关 EntryPointNotFoundException 实例的初始属性值列表，请参见 EntryPointNotFoundException 构造函数。

System System..::.EntryPointNotFoundExceptionEntryPointNotFoundException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EntryPointNotFoundException 成员
System 命名空间
Exception

其他资源

处理和引发异常


EntryPointNotFoundException 成员

EntryPointNotFoundException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntryPointNotFoundException 类

因不存在项方法而导致加载类的尝试失败时引发的异常。

EntryPointNotFoundException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntryPointNotFoundException 类
System 命名空间


EntryPointNotFoundException 构造函数

EntryPointNotFoundException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntryPointNotFoundException 类

初始化 EntryPointNotFoundException 类的新实例。

名称 说明
页首

参考

EntryPointNotFoundException 类
EntryPointNotFoundException 成员
System 命名空间


EntryPointNotFoundException 构造函数

EntryPointNotFoundException 构造函数
EntryPointNotFoundException 类

初始化 EntryPointNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public EntryPointNotFoundException()
public:
EntryPointNotFoundException()
new : unit -> EntryPointNotFoundException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“未发现入口点。”。此消息将考虑当前系统区域性。

下表显示 EntryPointNotFoundException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EntryPointNotFoundException 类
EntryPointNotFoundException 成员
EntryPointNotFoundException 重载
System 命名空间


EntryPointNotFoundException 构造函数 (String)

EntryPointNotFoundException 构造函数 (String)
EntryPointNotFoundException 类

用指定的错误消息初始化 EntryPointNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public EntryPointNotFoundException(
    string message
)
public:
EntryPointNotFoundException(
    String^ message
)
new :
        message:string -> EntryPointNotFoundException

参数

message
类型： System String
解释异常原因的错误信息。

message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 EntryPointNotFoundException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EntryPointNotFoundException 类
EntryPointNotFoundException 成员
EntryPointNotFoundException 重载
System 命名空间


EntryPointNotFoundException 构造函数 (SerializationInfo, StreamingContext)

EntryPointNotFoundException 构造函数 (SerializationInfo, StreamingContext)
EntryPointNotFoundException 类

用序列化数据初始化 EntryPointNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected EntryPointNotFoundException(
    SerializationInfo info,
    StreamingContext context
)
protected:
EntryPointNotFoundException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> EntryPointNotFoundException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

EntryPointNotFoundException 类
EntryPointNotFoundException 成员
EntryPointNotFoundException 重载
System 命名空间


EntryPointNotFoundException 构造函数 (String, Exception)

EntryPointNotFoundException 构造函数 (String, Exception)
EntryPointNotFoundException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 EntryPointNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public EntryPointNotFoundException(
    string message,
    Exception inner
)
public:
EntryPointNotFoundException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> EntryPointNotFoundException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 EntryPointNotFoundException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EntryPointNotFoundException 类
EntryPointNotFoundException 成员
EntryPointNotFoundException 重载
System 命名空间
Exception

其他资源

处理和引发异常


EntryPointNotFoundException 方法

EntryPointNotFoundException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntryPointNotFoundException 类

EntryPointNotFoundException 类型公开以下成员。

名称 说明
页首

参考

EntryPointNotFoundException 类
System 命名空间


EntryPointNotFoundException 属性

EntryPointNotFoundException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntryPointNotFoundException 类

EntryPointNotFoundException 类型公开以下成员。

名称 说明
页首

参考

EntryPointNotFoundException 类
System 命名空间


EntryPointNotFoundException 事件

EntryPointNotFoundException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntryPointNotFoundException 类

EntryPointNotFoundException 类型公开以下成员。

名称 说明
页首

参考

EntryPointNotFoundException 类
System 命名空间


Enum 类

Enum 类
成员

为枚举提供基类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class Enum _
    Inherits ValueType _
    Implements IComparable, IFormattable, IConvertible
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Enum : ValueType,
    IComparable, IFormattable, IConvertible
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Enum abstract : public ValueType,
    IComparable, IFormattable, IConvertible
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Enum =
    class
        inherit ValueType
        interface IComparable
        interface IFormattable
        interface IConvertible
    end

枚举是一个指定的常数，其基础类型可以是除 Char 外的任何整型。如果没有显式声明基础类型，则使用 Int32。编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。 枚举是一个指定的常数，其基础类型可以是除 Char 外的任何整型。如果没有显式声明基础类型，则使用 Int32。编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。 枚举是一个指定的常数，其基础类型可以是除 Char 外的任何整型。如果没有显式声明基础类型，则使用 Int32。编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。

Enum 提供比较此类的实例的方法、将实例的值转换为其字符串表示形式的方法、将数字的字符串表示形式转换为此类的实例的方法和创建指定枚举和值的实例的方法。

也可以将枚举视为位域。有关更多信息，请参见FlagsAttribute。 也可以将枚举视为位域。有关更多信息，请参见FlagsAttribute。

实现的接口

此类从 ValueType 继承，并实现 IComparable、IFormattable 和 IConvertible 接口。使用 Convert 类来进行转换，而不使用此类的 IConvertible 的显式接口成员实现。 此类从 ValueType 继承，并实现 IComparable、IFormattable 和 IConvertible 接口。使用 Convert 类来进行转换，而不使用此类的 IConvertible 的显式接口成员实现。

用于 FlagsAttribute 和 Enum 的准则

  • 只有要对数值执行按位运算（AND、OR、XOR）时才对枚举使用 FlagsAttribute 自定义特性。

  • 用 2 的幂（即 1、2、4、8 等）定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。 用 2 的幂（即 1、2、4、8 等）定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。

  • 请考虑为常用标志组合创建一个枚举常量。例如，如果用于文件 I/O 操作的枚举包含枚举常量 Read = 1 和 Write = 2，请考虑创建枚举常量 ReadWrite = Read OR Write，该常量组合了 Read 和 Write 标志。此外，在某些情况下，可能会将用于组合标志的按位 OR 运算视为一种高级概念，在简单任务中不需要执行此操作。 请考虑为常用标志组合创建一个枚举常量。例如，如果用于文件 I/O 操作的枚举包含枚举常量 Read = 1 和 Write = 2，请考虑创建枚举常量 ReadWrite = Read OR Write，该常量组合了 Read 和 Write 标志。此外，在某些情况下，可能会将用于组合标志的按位 OR 运算视为一种高级概念，在简单任务中不需要执行此操作。 请考虑为常用标志组合创建一个枚举常量。例如，如果用于文件 I/O 操作的枚举包含枚举常量 Read = 1 和 Write = 2，请考虑创建枚举常量 ReadWrite = Read OR Write，该常量组合了 Read 和 Write 标志。此外，在某些情况下，可能会将用于组合标志的按位 OR 运算视为一种高级概念，在简单任务中不需要执行此操作。

  • 将负数定义为标志枚举常量时应谨慎，因为很多标志位置都可能设置为 1，这可能使您的代码产生混淆并易于发生代码错误。

  • 测试数值中是否已设置标志的一种简便方法为：在数值和标志枚举常量之间执行按位“与”操作，这种方法会将数值中与标志不对应的所有位都设置为零，然后测试该操作的结果是否等于该标志枚举常量。

  • 将 None 用作值为零的标志枚举常量的名称。在按位 AND 运算中，不能使用 None 枚举常量测试标志，因为所得的结果始终为零。但是，您可以在数值与 None 枚举常量之间执行逻辑（不是按位）比较，以确定数值中是否已设置任何位。 将 None 用作值为零的标志枚举常量的名称。在按位 AND 运算中，不能使用 None 枚举常量测试标志，因为所得的结果始终为零。但是，您可以在数值与 None 枚举常量之间执行逻辑（不是按位）比较，以确定数值中是否已设置任何位。 将 None 用作值为零的标志枚举常量的名称。在按位 AND 运算中，不能使用 None 枚举常量测试标志，因为所得的结果始终为零。但是，您可以在数值与 None 枚举常量之间执行逻辑（不是按位）比较，以确定数值中是否已设置任何位。

    如果创建的是值枚举而不是标志枚举，创建 None 枚举常量仍十分有用。原因是在默认情况下，公共语言运行时会将用于枚举的内存初始化为零。因此，如果不定义值为零的常量，则枚举在创建时将包含非法值。 如果创建的是值枚举而不是标志枚举，创建 None 枚举常量仍十分有用。原因是在默认情况下，公共语言运行时会将用于枚举的内存初始化为零。因此，如果不定义值为零的常量，则枚举在创建时将包含非法值。 如果创建的是值枚举而不是标志枚举，创建 None 枚举常量仍十分有用。原因是在默认情况下，公共语言运行时会将用于枚举的内存初始化为零。因此，如果不定义值为零的常量，则枚举在创建时将包含非法值。

    如果明显存在应用程序需要表示的默认情况，请考虑使用值为零的枚举常量表示默认值。如果不存在默认情况，请考虑使用值为零的枚举常量（这意味着该情况不由任何其他枚举常量表示）。 如果明显存在应用程序需要表示的默认情况，请考虑使用值为零的枚举常量表示默认值。如果不存在默认情况，请考虑使用值为零的枚举常量（这意味着该情况不由任何其他枚举常量表示）。

  • 不要仅为了反映枚举自身的状态而定义枚举值。例如，不要定义仅用于标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值，请显式检查该值。此外，如果枚举常量范围中的所有值都有效，还可以对第一个和最后一个枚举常量执行范围检查。 不要仅为了反映枚举自身的状态而定义枚举值。例如，不要定义仅用于标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值，请显式检查该值。此外，如果枚举常量范围中的所有值都有效，还可以对第一个和最后一个枚举常量执行范围检查。 不要仅为了反映枚举自身的状态而定义枚举值。例如，不要定义仅用于标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值，请显式检查该值。此外，如果枚举常量范围中的所有值都有效，还可以对第一个和最后一个枚举常量执行范围检查。 不要仅为了反映枚举自身的状态而定义枚举值。例如，不要定义仅用于标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值，请显式检查该值。此外，如果枚举常量范围中的所有值都有效，还可以对第一个和最后一个枚举常量执行范围检查。

  • 不要指定保留供将来使用的枚举常量。

  • 在定义采用枚举常量作为值的方法或属性时，应考虑对该值进行验证。原因是即使没有在枚举中定义某个数值，也可以将该数值强制转换为枚举类型。 在定义采用枚举常量作为值的方法或属性时，应考虑对该值进行验证。原因是即使没有在枚举中定义某个数值，也可以将该数值强制转换为枚举类型。

下面的示例演示使用一个枚举表示已命名的值，并使用另一个枚举表示已命名位域。

Public Class EnumTest
    Enum Days
        Saturday
        Sunday
        Monday
        Tuesday
        Wednesday
        Thursday
        Friday
    End Enum

    Enum BoilingPoints
        Celsius = 100
        Fahrenheit = 212
    End Enum

    <FlagsAttribute()> _
    Enum Colors
        Red = 1
        Green = 2
        Blue = 4
        Yellow = 8
    End Enum

    Public Shared Sub Main()
        Dim weekdays As Type = GetType(Days)
        Dim boiling As Type = GetType(BoilingPoints)

        Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:")

        Dim s As String
        For Each s In  [Enum].GetNames(weekdays)
            Console.WriteLine("{0,-11} = {1}", s, [Enum].Format(weekdays, [Enum].Parse(weekdays, s), "d"))

        Next s
        Console.WriteLine()
        Console.WriteLine("Enums can also be created which have values that represent some meaningful amount.")
        Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:")

        For Each s In  [Enum].GetNames(boiling)
            Console.WriteLine("{0,-11} = {1}", s, [Enum].Format(boiling, [Enum].Parse(boiling, s), "d"))
        Next s

        Dim myColors As Colors = Colors.Red Or Colors.Blue Or Colors.Yellow
        Console.WriteLine()
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors)
    End Sub
End Class

using System;

public class EnumTest {
    enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
    enum BoilingPoints { Celsius = 100, Fahrenheit = 212 };
    [FlagsAttribute]
    enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

    public static void Main() {

        Type weekdays = typeof(Days);
        Type boiling = typeof(BoilingPoints);

        Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:");

        foreach ( string s in Enum.GetNames(weekdays) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( weekdays, Enum.Parse(weekdays, s), "d"));

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:");

        foreach ( string s in Enum.GetNames(boiling) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d"));

        Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors);
    }
}

using namespace System;
enum class Days
{
   Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday
};

enum class BoilingPoints
{
   Celsius = 100,
   Fahrenheit = 212
};

[FlagsAttribute]

enum class Colors
{
   Red = 1,
   Green = 2,
   Blue = 4,
   Yellow = 8
};

int main()
{
   Type^ weekdays = Days::typeid;
   Type^ boiling = BoilingPoints::typeid;
   Console::WriteLine(  "The days of the week, and their corresponding values in the Days Enum are:" );
   Array^ a = Enum::GetNames( weekdays );
   Int32 i = 0;
   do
   {
      Object^ o = a->GetValue( i );
      Console::WriteLine(  "{0,-11}= {1}", o->ToString(), Enum::Format( weekdays, Enum::Parse( weekdays, o->ToString() ),  "d" ) );
   }
   while ( ++i < a->Length );

   Console::WriteLine();
   Console::WriteLine(  "Enums can also be created which have values that represent some meaningful amount." );
   Console::WriteLine(  "The BoilingPoints Enum defines the following items, and corresponding values:" );
   i = 0;
   Array^ b = Enum::GetNames( boiling );
   do
   {
      Object^ o = b->GetValue( i );
      Console::WriteLine(  "{0,-11}= {1}", o->ToString(), Enum::Format( boiling, Enum::Parse( boiling, o->ToString() ),  "d" ) );
   }
   while ( ++i < b->Length );

   Array^ c = Enum::GetNames( Colors::typeid );
   Colors myColors = Colors::Red | Colors::Blue | Colors::Yellow;
   Console::WriteLine();
   Console::Write(  "myColors holds a combination of colors. Namely:" );
   for ( i = 0; i < 3; i++ )
      Console::Write(  " {0}", c->GetValue( i ) );
}

System System..::.EnumEnum

此类型是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 成员
System 命名空间
ValueType
FlagsAttribute
Char
Int32


Enum 成员

Enum 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Enum 类

为枚举提供基类。

Enum 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Enum 类
System 命名空间


Enum 构造函数

Enum 构造函数
Enum 类

初始化 Enum 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected Enum()
protected:
Enum()
new : unit -> Enum

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum 方法

Enum 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Enum 类

Enum 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Enum 类
System 命名空间


Enum ..::.CompareTo 方法

Enum
.
.
::
.
CompareTo 方法
Enum 类

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ target As Object _ ) As Integer
public int CompareTo( Object target )
public: virtual int CompareTo( Object^ target ) sealed
abstract CompareTo : target:Object -> int override CompareTo : target:Object -> int
参数
target
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号数，用于指示此实例和
target
的相对值。
值
含义
小于零
此实例的值小于
target
的值。
零
此实例的值等于
target
的值。
大于零
此实例的值大于
target
的值。
- 或 -
target
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | target 与此实例不是同一类型。
InvalidOperationException | 此实例不是 SByte、Int16、Int32、Int64、Byte、UInt16、UInt32 或 UInt64 类型。
NullReferenceException | 此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例演示在 Enum 上下文中 CompareTo 的用法。

Imports System

Public Class CompareToTest

    Enum VehicleDoors
        Motorbike = 0
        Sportscar = 2
        Sedan = 4
        Hatchback = 5
    End Enum

    Public Shared Sub Main()
        Dim myVeh As VehicleDoors = VehicleDoors.Sportscar
        Dim yourVeh As VehicleDoors = VehicleDoors.Motorbike
        Dim otherVeh As VehicleDoors = VehicleDoors.Sedan

        Dim output as String

        If myVeh.CompareTo(yourVeh) > 0 Then output = "Yes" Else output = "No"
        Console.WriteLine("Does a {0} have more doors than a {1}?", myVeh, yourVeh)
        Console.WriteLine("{0}{1}", output, Environment.NewLine)

        Console.WriteLine("Does a {0} have more doors than a {1}?", myVeh, otherVeh)
        If myVeh.CompareTo(otherVeh) > 0 Then output = "Yes" Else output = "No"
        Console.WriteLine("{0}", output)
    End Sub 'Main
End Class 'CompareToTest

using System;

public class CompareToTest {
    enum VehicleDoors { Motorbike = 0, Sportscar = 2, Sedan = 4, Hatchback = 5 };

    public static void Main() {
        VehicleDoors myVeh = VehicleDoors.Sportscar;
        VehicleDoors yourVeh = VehicleDoors.Motorbike;
        VehicleDoors otherVeh = VehicleDoors.Sedan;

        Console.WriteLine("Does a {0} have more doors than a {1}?", myVeh, yourVeh);
        Console.WriteLine( "{0}{1}", myVeh.CompareTo(yourVeh) > 0 ? "Yes" : "No", Environment.NewLine );

        Console.WriteLine("Does a {0} have more doors than a {1}?", myVeh, otherVeh);
        Console.WriteLine( "{0}", myVeh.CompareTo(otherVeh) > 0 ? "Yes" : "No" );
    }
}

using namespace System;
enum class VehicleDoors
{
   Motorbike = 0,
   Sportscar = 2,
   Sedan = 4,
   Hatchback = 5
};

int main()
{
   VehicleDoors myVeh = VehicleDoors::Sportscar;
   VehicleDoors yourVeh = VehicleDoors::Motorbike;
   VehicleDoors otherVeh = VehicleDoors::Sedan;
   Console::WriteLine(  "Does a {0} have more doors than a {1}?", myVeh, yourVeh );
   Int32 iRes = myVeh.CompareTo( yourVeh );
   Console::WriteLine(  "{0}{1}", iRes > 0 ? (String^)"Yes" : "No", Environment::NewLine );
   Console::WriteLine(  "Does a {0} have more doors than a {1}?", myVeh, otherVeh );
   iRes = myVeh.CompareTo( otherVeh );
   Console::WriteLine(  "{0}", iRes > 0 ? (String^)"Yes" : "No" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间
Equals


Enum ..::.Equals 方法

Enum
.
.
::
.
Equals 方法
Enum 类

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的 object，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 obj 是具有与此实例相同的基础类型和值的 Enum，则为 true；否则为 false。

下面的示例演示在 Enum 上下文中 Equals 的用法。

Imports System

Public Class EqualsTest

    Enum Colors
        Red
        Green
        Blue
        Yellow
    End Enum 'Colors

    Enum Mammals
        Cat
        Dog
        Horse
        Dolphin
    End Enum 'Mammals

    Public Shared Sub Main()
        Dim myPet As Mammals = Mammals.Cat
        Dim myColor As Colors = Colors.Red
        Dim yourPet As Mammals = Mammals.Dog
        Dim yourColor As Colors = Colors.Red
        Dim output as string

        Console.WriteLine("My favorite animal is a {0}", myPet)
        Console.WriteLine("Your favorite animal is a {0}", yourPet)
        If myPet.Equals(yourPet) Then output = "Yes" Else output = "No"
        Console.WriteLine("Do we like the same animal? {0}", output)

        Console.WriteLine()
        Console.WriteLine("My favorite color is {0}", myColor)
        Console.WriteLine("Your favorite color is {0}", yourColor)
        If myColor.Equals(yourColor) Then output = "Yes" Else output = "No"
        Console.WriteLine("Do we like the same color? {0}", output)

        Console.WriteLine()
        Console.WriteLine("The value of my color ({0}) is {1}", myColor, [Enum].Format(GetType(Colors), myColor, "d"))
        Console.WriteLine("The value of my pet (a {0}) is {1}", myPet, [Enum].Format(GetType(Mammals), myPet, "d"))
        If myColor.Equals(myPet) Then output = "Yes" Else output = "No"
        Console.WriteLine("Even though they have the same value, are they equal? {0}", output)
    End Sub 'Main
End Class 'EqualsTest

using System;

public class EqualsTest {
    enum Colors { Red, Green, Blue, Yellow };
    enum Mammals { Cat, Dog, Horse, Dolphin };

    public static void Main() {
        Mammals myPet = Mammals.Cat;
        Colors myColor = Colors.Red;
        Mammals yourPet = Mammals.Dog;
        Colors yourColor = Colors.Red;

        Console.WriteLine("My favorite animal is a {0}", myPet);
        Console.WriteLine("Your favorite animal is a {0}", yourPet);
        Console.WriteLine("Do we like the same animal? {0}", myPet.Equals(yourPet) ? "Yes" : "No");

        Console.WriteLine();
        Console.WriteLine("My favorite color is {0}", myColor);
        Console.WriteLine("Your favorite color is {0}", yourColor);
        Console.WriteLine("Do we like the same color? {0}", myColor.Equals(yourColor) ? "Yes" : "No");

        Console.WriteLine();
        Console.WriteLine("The value of my color ({0}) is {1}", myColor, Enum.Format(typeof(Colors), myColor, "d"));
        Console.WriteLine("The value of my pet (a {0}) is {1}", myPet, Enum.Format(typeof(Mammals), myPet, "d"));
        Console.WriteLine("Even though they have the same value, are they equal? {0}",
                    myColor.Equals(myPet) ? "Yes" : "No");
    }
}

using namespace System;
enum class Colors
{
   Red, Green, Blue, Yellow
};

enum class Mammals
{
   Cat, Dog, Horse, Dolphin
};

int main()
{
   Mammals myPet = Mammals::Cat;
   Colors myColor = Colors::Red;
   Mammals yourPet = Mammals::Dog;
   Colors yourColor = Colors::Red;
   Console::WriteLine(  "My favorite animal is a {0}", myPet );
   Console::WriteLine(  "Your favorite animal is a {0}", yourPet );
   Console::WriteLine(  "Do we like the same animal? {0}", myPet.Equals( yourPet ) ? (String^)"Yes" : "No" );
   Console::WriteLine();
   Console::WriteLine(  "My favorite color is {0}", myColor );
   Console::WriteLine(  "Your favorite color is {0}", yourColor );
   Console::WriteLine(  "Do we like the same color? {0}", myColor.Equals( yourColor ) ? (String^)"Yes" : "No" );
   Console::WriteLine();
   Console::WriteLine(  "The value of my color ({0}) is {1}", myColor, Enum::Format( Colors::typeid, myColor,  "d" ) );
   Console::WriteLine(  "The value of my pet (a {0}) is {1}", myPet, Enum::Format( Mammals::typeid, myPet,  "d" ) );
   Console::WriteLine(  "Even though they have the same value, are they equal? {0}", myColor.Equals( myPet ) ? (String^)"Yes" : "No" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间
CompareTo


Enum ..::.Format 方法

Enum
.
.
::
.
Format 方法
Enum 类

根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function Format ( _
    enumType As Type, _
    value As Object, _
    format As String _
) As String
[ComVisibleAttribute(true)]
public static string Format(
    Type enumType,
    Object value,
    string format
)
[ComVisibleAttribute(true)]
public:
static String^ Format(
    Type^ enumType,
    Object^ value,
    String^ format
)
[<ComVisibleAttribute(true)>]
static member Format :
        enumType:Type *
        value:Object *
        format:string -> string

参数

enumType
类型： System Type
要转换的值的枚举类型。
value
类型： System Object
要转换的值。
format
类型： System String
要使用的输出格式。

返回值

类型： System String
value 的字符串表示形式。
异常 | 条件
ArgumentNullException | enumType、value 或 format 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 参数不是 Enum 类型。 - 或 - value 来自于其类型与 enumType 不同的枚举。 - 或 - value 的类型不是 enumType 的基础类型。
FormatException | format 参数包含无效值。
InvalidOperationException | format 等于“X”，但枚举类型未知。

下表显示 format 参数的有效值。

格式

说明

“G”或“g”

如果 value 等于某个已命名的枚举常数，则返回该常数的名称；否则返回 value 的等效十进制数。

例如，假定唯一的枚举常数命名为“Red”，其值为 1。如果将 value 指定为 1，则此格式返回“Red”。然而，如果将 value 指定为 2，则此格式返回“2”。 例如，假定唯一的枚举常数命名为“Red”，其值为 1。如果将 value 指定为 1，则此格式返回“Red”。然而，如果将 value 指定为 2，则此格式返回“2”。 例如，假定唯一的枚举常数命名为“Red”，其值为 1。如果将 value 指定为 1，则此格式返回“Red”。然而，如果将 value 指定为 2，则此格式返回“2”。

- 或 -

如果将 FlagsAttribute 自定义特性应用于枚举，则 value 将被视为位域，该位域包含一个或多个由一位或多位组成的标志。

如果 value 等于命名枚举常数的组合，则将返回这些常量名的分隔符分隔列表。将在 value 中搜索标志，从具有最大值的标志到具有最小值的标志进行搜索。对于与 value 中的位域相对应的每个标志，常数的名称连接到用分隔符分隔的列表。则将不再考虑该标记的值，而继续搜索下一个标志。 如果 value 等于命名枚举常数的组合，则将返回这些常量名的分隔符分隔列表。将在 value 中搜索标志，从具有最大值的标志到具有最小值的标志进行搜索。对于与 value 中的位域相对应的每个标志，常数的名称连接到用分隔符分隔的列表。则将不再考虑该标记的值，而继续搜索下一个标志。 如果 value 等于命名枚举常数的组合，则将返回这些常量名的分隔符分隔列表。将在 value 中搜索标志，从具有最大值的标志到具有最小值的标志进行搜索。对于与 value 中的位域相对应的每个标志，常数的名称连接到用分隔符分隔的列表。则将不再考虑该标记的值，而继续搜索下一个标志。 如果 value 等于命名枚举常数的组合，则将返回这些常量名的分隔符分隔列表。将在 value 中搜索标志，从具有最大值的标志到具有最小值的标志进行搜索。对于与 value 中的位域相对应的每个标志，常数的名称连接到用分隔符分隔的列表。则将不再考虑该标记的值，而继续搜索下一个标志。

如果 value 不等于已命名的枚举常数的组合，则返回 value 的等效十进制数。

“X”或“x”

以十六进制格式表示 value（不带前导“0x”）。

“D”或“d”

以十进制形式表示 value。

“F”或“f”

对于“G”或“g”执行的行为是相同的，只是在 Enum 声明中不需要 FlagsAttribute。

下面的示例演示在 Enum 上下文中 Format 的用法。

 Enum Colors
     Red
     Green
     Blue
     Yellow
 End Enum

Public Class FormatTest
    Public Shared Sub Main()
        Dim myColor As Colors = Colors.Blue

        Console.WriteLine("My favorite color is {0}.", myColor)
        Console.WriteLine("The value of my favorite color is {0}.", [Enum].Format(GetType(Colors), myColor, "d"))
        Console.WriteLine("The hex value of my favorite color is {0}.", [Enum].Format(GetType(Colors), myColor, "x"))
    End Sub
End Class
' The example displays the following output:
'    My favorite color is Blue.
'    The value of my favorite color is 2.
'    The hex value of my favorite color is 00000002.

using System;

enum Colors { Red, Green, Blue, Yellow };

public class FormatTest {
    public static void Main() {
        Colors myColor = Colors.Blue;

        Console.WriteLine("My favorite color is {0}.", myColor);
        Console.WriteLine("The value of my favorite color is {0}.", Enum.Format(typeof(Colors), myColor, "d"));
        Console.WriteLine("The hex value of my favorite color is {0}.", Enum.Format(typeof(Colors), myColor, "x"));
    }
}
// The example displays the following output:
//    My favorite color is Blue.
//    The value of my favorite color is 2.
//    The hex value of my favorite color is 00000002.

using namespace System;
enum class Colors
{
   Red, Green, Blue, Yellow
};

int main()
{
   Colors myColor = Colors::Blue;
   Console::WriteLine(  "My favorite color is {0}.", myColor );
   Console::WriteLine(  "The value of my favorite color is {0}.", Enum::Format( Colors::typeid, myColor,  "d" ) );
   Console::WriteLine(  "The hex value of my favorite color is {0}.", Enum::Format( Colors::typeid, myColor,  "x" ) );
}
// The example displays the folowing output:
//    My favorite color is Blue.
//    The value of my favorite color is 2.
//    The hex value of my favorite color is 00000002.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
System 命名空间
ToString

其他资源

格式化类型
枚举格式字符串


Enum ..::.GetHashCode 方法

Enum
.
.
::
.
GetHashCode 方法
Enum 类

返回该实例的值的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.GetName 方法

Enum
.
.
::
.
GetName 方法
Enum 类

在指定枚举中检索具有指定值的常数的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function GetName ( _
    enumType As Type, _
    value As Object _
) As String
[ComVisibleAttribute(true)]
public static string GetName(
    Type enumType,
    Object value
)
[ComVisibleAttribute(true)]
public:
static String^ GetName(
    Type^ enumType,
    Object^ value
)
[<ComVisibleAttribute(true)>]
static member GetName :
        enumType:Type *
        value:Object -> string

参数

enumType
类型： System Type
枚举类型。
value
类型： System Object
特定枚举常数的值（根据其基础类型）。

返回值

类型： System String
一个字符串，其中包含 enumType 中值为 value 的枚举常数的名称；如果没有找到这样的常数，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | enumType 或 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。 - 或 - value 既不是 enumType 类型，也没有与 enumType 相同的基础类型。

如果多个枚举成员具有相同的基础值，则 GetName 方法可保证它将返回其中一个枚举成员的名称。但是，它并不保证它将始终返回相同枚举成员的名称。因此，如果多个枚举成员具有相同的值，应用程序代码决不应依赖于返回特定成员名称的方法。 如果多个枚举成员具有相同的基础值，则 GetName 方法可保证它将返回其中一个枚举成员的名称。但是，它并不保证它将始终返回相同枚举成员的名称。因此，如果多个枚举成员具有相同的值，应用程序代码决不应依赖于返回特定成员名称的方法。 如果多个枚举成员具有相同的基础值，则 GetName 方法可保证它将返回其中一个枚举成员的名称。但是，它并不保证它将始终返回相同枚举成员的名称。因此，如果多个枚举成员具有相同的值，应用程序代码决不应依赖于返回特定成员名称的方法。

下面的示例演示 GetName 的用法。

Imports System

Public Class GetNameTest

    Enum Colors
        Red
        Green
        Blue
        Yellow
    End Enum 'Colors

    Enum Styles
        Plaid
        Striped
        Tartan
        Corduroy
    End Enum 'Styles

    Public Shared Sub Main()
        Console.WriteLine("The 4th value of the Colors Enum is {0}", [Enum].GetName(GetType(Colors), 3))
        Console.WriteLine("The 4th value of the Styles Enum is {0}", [Enum].GetName(GetType(Styles), 3))
    End Sub 'Main
End Class 'GetNameTest
' The example displays the following output:
'       The 4th value of the Colors Enum is Yellow
'       The 4th value of the Styles Enum is Corduroy

using System;

public class GetNameTest {
    enum Colors { Red, Green, Blue, Yellow };
    enum Styles { Plaid, Striped, Tartan, Corduroy };

    public static void Main() {

        Console.WriteLine("The 4th value of the Colors Enum is {0}", Enum.GetName(typeof(Colors), 3));
        Console.WriteLine("The 4th value of the Styles Enum is {0}", Enum.GetName(typeof(Styles), 3));
    }
}
// The example displays the following output:
//       The 4th value of the Colors Enum is Yellow
//       The 4th value of the Styles Enum is Corduroy

using namespace System;

enum class Colors
{
   Red, Green, Blue, Yellow
};

enum class Styles
{
   Plaid, Striped, Tartan, Corduroy
};

int main()
{
   Console::WriteLine(  "The 4th value of the Colors Enum is {0}", Enum::GetName( Colors::typeid, 3 ) );
   Console::WriteLine(  "The 4th value of the Styles Enum is {0}", Enum::GetName( Styles::typeid, 3 ) );
}
// The example displays the following output:
//       The 4th value of the Colors Enum is Yellow
//       The 4th value of the Styles Enum is Corduroy

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.GetNames 方法

Enum
.
.
::
.
GetNames 方法
Enum 类

检索指定枚举中常数名称的数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function GetNames ( _
    enumType As Type _
) As String()
[ComVisibleAttribute(true)]
public static string[] GetNames(
    Type enumType
)
[ComVisibleAttribute(true)]
public:
static array<String^>^ GetNames(
    Type^ enumType
)
[<ComVisibleAttribute(true)>]
static member GetNames :
        enumType:Type -> string[]

参数

enumType
类型： System Type
枚举类型。

返回值

类型：
array<
System String
>
[]
()
[]

enumType 的常数名称的字符串数组。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 参数不是 Enum。

返回值数组的元素按枚举常量的值排序。如果存在具有相同值的枚举常量，则不指定其相应名称的顺序。 返回值数组的元素按枚举常量的值排序。如果存在具有相同值的枚举常量，则不指定其相应名称的顺序。

下面的示例演示 GetNames 的用法。

Imports System

Public Class GetNamesTest

    Enum Colors
        Red
        Green
        Blue
        Yellow
    End Enum 'Colors

    Enum Styles
        Plaid
        Striped
        Tartan
        Corduroy
    End Enum 'Styles

    Public Shared Sub Main()

        Console.WriteLine("The values of the Colors Enum are:")
        Dim s As String
        For Each s In  [Enum].GetNames(GetType(Colors))
            Console.WriteLine(s)
        Next s

        Console.WriteLine()

        Console.WriteLine("The values of the Styles Enum are:")

        For Each s In  [Enum].GetNames(GetType(Styles))
            Console.WriteLine(s)
        Next s
    End Sub 'Main
End Class 'GetNamesTest

using System;

public class GetNamesTest {
    enum Colors { Red, Green, Blue, Yellow };
    enum Styles { Plaid, Striped, Tartan, Corduroy };

    public static void Main() {

        Console.WriteLine("The values of the Colors Enum are:");
        foreach(string s in Enum.GetNames(typeof(Colors)))
            Console.WriteLine(s);

        Console.WriteLine();

        Console.WriteLine("The values of the Styles Enum are:");
        foreach(string s in Enum.GetNames(typeof(Styles)))
            Console.WriteLine(s);
    }
}

using namespace System;
enum class Colors
{
   Red, Green, Blue, Yellow
};

enum class Styles
{
   Plaid, Striped, Tartan, Corduroy
};

int main()
{
   Console::WriteLine( "The values of the Colors Enum are:" );
   Array^ a = Enum::GetNames( Colors::typeid );
   Int32 i = 0;
   do
   {
      Object^ o = a->GetValue( i );
      Console::WriteLine( o->ToString() );
   }
   while ( ++i < a->Length );

   Console::WriteLine();
   Console::WriteLine( "The values of the Styles Enum are:" );
   Array^ b = Enum::GetNames( Styles::typeid );
   i = 0;
   do
   {
      Object^ o = b->GetValue( i );
      Console::WriteLine( o->ToString() );
   }
   while ( ++i < b->Length );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.GetTypeCode 方法

Enum
.
.
::
.
GetTypeCode 方法
Enum 类

返回此实例的基础 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
此实例的类型。

实现

异常 | 条件
InvalidOperationException | 枚举类型未知。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间
GetUnderlyingType


Enum ..::.GetUnderlyingType 方法

Enum
.
.
::
.
GetUnderlyingType 方法
Enum 类

返回指定枚举的基础类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function GetUnderlyingType ( _
    enumType As Type _
) As Type
[ComVisibleAttribute(true)]
public static Type GetUnderlyingType(
    Type enumType
)
[ComVisibleAttribute(true)]
public:
static Type^ GetUnderlyingType(
    Type^ enumType
)
[<ComVisibleAttribute(true)>]
static member GetUnderlyingType :
        enumType:Type -> Type

参数

enumType
类型： System Type
枚举类型。

返回值

类型： System Type
enumType 的基础类型。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

下面的代码示例说明如何使用 GetUnderlyingType：

Shared Function GetAsUnderlyingType(enval As [Enum]) As Object
   Dim entype As Type = enval.GetType()

   Dim undertype As Type = [Enum].GetUnderlyingType(entype)

   Return Convert.ChangeType(enval, undertype)
End Function

        static object GetAsUnderlyingType(Enum enval)
        {
            Type entype = enval.GetType();

            Type undertype = Enum.GetUnderlyingType(entype);

            return Convert.ChangeType( enval, undertype );
        }

Object^ GetAsUnderlyingType( Enum ^ enval )
{
   Console::WriteLine(  "GetAsUnderlying" );
   Type^ entype = enval->GetType();
   Type^ undertype = Enum::GetUnderlyingType( entype );
   return Convert::ChangeType( (Object^)(enval), undertype );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间
GetTypeCode


Enum ..::.GetValues 方法

Enum
.
.
::
.
GetValues 方法
Enum 类

检索指定枚举中常数值的数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function GetValues ( _
    enumType As Type _
) As Array
[ComVisibleAttribute(true)]
public static Array GetValues(
    Type enumType
)
[ComVisibleAttribute(true)]
public:
static Array^ GetValues(
    Type^ enumType
)
[<ComVisibleAttribute(true)>]
static member GetValues :
        enumType:Type -> Array

参数

enumType
类型： System Type
枚举类型。

返回值

类型： System Array
一个数组，其中包含 enumType 中实例的值。该数组的元素按枚举常数的二进制值排序。 一个数组，其中包含 enumType 中实例的值。该数组的元素按枚举常数的二进制值排序。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

下面的示例演示 GetValues 的用法。

Public Class GetValuesTest

    Enum Colors
        Red
        Green
        Blue
        Yellow
    End Enum 'Colors

    Enum Styles
        Plaid = 0
        Striped = 23
        Tartan = 65
        Corduroy = 78
    End Enum 'Styles

    Public Shared Sub Main()

        Console.WriteLine("The values of the Colors Enum are:")
        Dim i As Integer
        For Each i In  [Enum].GetValues(GetType(Colors))
            Console.WriteLine(i)
        Next

        Console.WriteLine()

        Console.WriteLine("The values of the Styles Enum are:")
        For Each i In  [Enum].GetValues(GetType(Styles))
            Console.WriteLine(i)
        Next
    End Sub
End Class
' The example produces the following output:
'       The values of the Colors Enum are:
'       0
'       1
'       2
'       3
'
'       The values of the Styles Enum are:
'       0
'       23
'       65
'       78

using System;

public class GetValuesTest {
    enum Colors { Red, Green, Blue, Yellow };
    enum Styles { Plaid = 0, Striped = 23, Tartan = 65, Corduroy = 78 };

    public static void Main() {

        Console.WriteLine("The values of the Colors Enum are:");
        foreach(int i in Enum.GetValues(typeof(Colors)))
            Console.WriteLine(i);

        Console.WriteLine();

        Console.WriteLine("The values of the Styles Enum are:");
        foreach(int i in Enum.GetValues(typeof(Styles)))
            Console.WriteLine(i);
    }
}
// The example produces the following output:
//       The values of the Colors Enum are:
//       0
//       1
//       2
//       3
//
//       The values of the Styles Enum are:
//       0
//       23
//       65
//       78

using namespace System;
enum class Colors
{
   Red, Green, Blue, Yellow
};

enum class Styles
{
   Plaid = 0,
   Striped = 23,
   Tartan = 65,
   Corduroy = 78
};

int main()
{
   Console::WriteLine(  "The values of the Colors Enum are:" );
   Array^ a = Enum::GetValues( Colors::typeid );
   for ( Int32 i = 0; i < a->Length; i++ )
   {
      Object^ o = a->GetValue( i );
      Console::WriteLine(  "{0}", Enum::Format( Colors::typeid, o,  "D" ) );
   }
   Console::WriteLine();
   Console::WriteLine(  "The values of the Styles Enum are:" );
   Array^ b = Enum::GetValues( Styles::typeid );
   for ( Int32 i = 0; i < b->Length; i++ )
   {
      Object^ o = b->GetValue( i );
      Console::WriteLine(  "{0}", Enum::Format( Styles::typeid, o,  "D" ) );

   }
}
// The example produces the following output:
//       The values of the Colors Enum are:
//       0
//       1
//       2
//       3
//
//       The values of the Styles Enum are:
//       0
//       23
//       65
//       78

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.HasFlag 方法

Enum
.
.
::
.
HasFlag 方法
Enum 类

确定当前实例中是否设置了一个或多个位域。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function HasFlag ( _
    flag As Enum _
) As Boolean
public bool HasFlag(
    Enum flag
)
public:
bool HasFlag(
    Enum^ flag
)
member HasFlag :
        flag:Enum -> bool

参数

flag
类型： System Enum
一个枚举值。

返回值

类型： System Boolean
如果在 flag 中设置的位域也在当前实例中进行了设置，则为 true；否则为 false。
异常 | 条件
ArgumentException | flag 具有与当前实例不同的类型。

HasFlag 方法返回下列布尔表达式的结果。

thisInstance And flag = flag

如果 flag 的基础值为零，则方法将返回 true。如果此行为不理想，您可以使用 Equals 方法测试是否与零相等，并只在 flag 的值是非零时调用 HasFlag，如下面的示例所示。 如果 flag 的基础值为零，则方法将返回 true。如果此行为不理想，您可以使用 Equals 方法测试是否与零相等，并只在 flag 的值是非零时调用 HasFlag，如下面的示例所示。

System.Enum.HasFlag#1

HasFlag 方法旨在用于使用 FlagsAttribute 特性标记的枚举类型。对于没有标记 FlagsAttribute 特性的枚举类型，调用 Equals 方法或 CompareTo 方法。 HasFlag 方法旨在用于使用 FlagsAttribute 特性标记的枚举类型。对于没有标记 FlagsAttribute 特性的枚举类型，调用 Equals 方法或 CompareTo 方法。

下面的示例定义一个 ItemsOrdered 枚举，反映了客户可以在一个餐厅中订购的项目类别。该示例测试是否客户已经同时点了主菜和饮料。 下面的示例定义一个 ItemsOrdered 枚举，反映了客户可以在一个餐厅中订购的项目类别。该示例测试是否客户已经同时点了主菜和饮料。

<Flags> Public Enum DinnerItems As Integer
   None = 0
   Entree = 1
   Appetizer = 2
   Side = 4
   Dessert = 8
   Beverage = 16
   BarBeverage = 32
End Enum

Module Example
   Public Sub Main()
      Dim myOrder As DinnerItems = DinnerItems.Appetizer Or DinnerItems.Entree Or
                                   DinnerItems.Beverage Or DinnerItems.Dessert
      Dim flagValue As DinnerItems = DinnerItems.Entree Or DinnerItems.Beverage
      Console.WriteLine("{0} includes {1}: {2}",
                        myOrder, flagValue, myOrder.HasFlag(flagValue))
   End Sub
End Module
' The example displays the following output:
'    Entree, Appetizer, Dessert, Beverage includes Entree, Beverage: True

using System;

[Flags] public enum DinnerItems {
   None = 0,
   Entree = 1,
   Appetizer = 2,
   Side = 4,
   Dessert = 8,
   Beverage = 16,
   BarBeverage = 32
}

public class Example
{
   public static void Main()
   {
      DinnerItems myOrder = DinnerItems.Appetizer | DinnerItems.Entree |
                            DinnerItems.Beverage | DinnerItems.Dessert;
      DinnerItems flagValue = DinnerItems.Entree | DinnerItems.Beverage;
      Console.WriteLine("{0} includes {1}: {2}",
                        myOrder, flagValue, myOrder.HasFlag(flagValue));
   }
}
// The example displays the following output:
//    Entree, Appetizer, Dessert, Beverage includes Entree, Beverage: True

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
System 命名空间
FlagsAttribute
Equals


Enum ..::.IConvertible ..::.ToBoolean 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Boolean
此成员总是引发异常。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

当前未实现。始终引发异常。 当前未实现。始终引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToByte 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Byte
转换后的值。

实现

使用 Convert 执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToChar 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Char
此成员总是引发异常。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

当前未实现。始终引发异常。 当前未实现。始终引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToDateTime 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System DateTime
此成员总是引发异常。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

当前未实现。始终引发异常。 当前未实现。始终引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToDecimal 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Decimal
此成员总是引发异常。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

当前未实现。始终引发异常。 当前未实现。始终引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToDouble 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为双精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Double
此成员总是引发异常。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

当前未实现。始终引发异常。 当前未实现。始终引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToInt16 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 16 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Int16
转换后的值。

实现

使用 Convert 执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToInt32 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 32 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Int32
转换后的值。

实现

使用 Convert 执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToInt64 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Int64
转换后的值。

实现

使用 Convert 执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToSByte 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 8 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System SByte
转换后的值。

实现

使用 Convert 执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToSingle 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为单精度浮点数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Single
此成员总是引发异常。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

当前未实现。始终引发异常。 当前未实现。始终引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToType 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为指定类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要转换到的类型。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System Object
转换后的值。

实现

使用 Convert 执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToUInt16 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 16 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System UInt16
转换后的值。

实现

使用 Convert 执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToUInt32 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 32 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System UInt32
转换后的值。

实现

使用 Convert 执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IConvertible ..::.ToUInt64 方法

Enum
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Enum 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

根据基础类型将当前值转换为 64 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System UInt64
转换后的值。

实现

使用 Convert 执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.IsDefined 方法

Enum
.
.
::
.
IsDefined 方法
Enum 类

返回指定枚举中是否存在具有指定值的常数的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function IsDefined ( _
    enumType As Type, _
    value As Object _
) As Boolean
[ComVisibleAttribute(true)]
public static bool IsDefined(
    Type enumType,
    Object value
)
[ComVisibleAttribute(true)]
public:
static bool IsDefined(
    Type^ enumType,
    Object^ value
)
[<ComVisibleAttribute(true)>]
static member IsDefined :
        enumType:Type *
        value:Object -> bool

参数

enumType
类型： System Type
枚举类型。
value
类型： System Object
enumType 的常数的值或名称。

返回值

类型： System Boolean
如果 enumType 的某个常数具有等于 value 的值，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | enumType 或 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。 - 或 - value 的类型是枚举，但不是 enumType 类型的枚举。 - 或 - value 的类型不是 enumType 的基础类型。
InvalidOperationException | value 不是 SByte、Int16、Int32、Int64、Byte、UInt16、UInt32、UInt64 或 String 类型。

value 参数可以是以下任意一项：

  • enumType 类型的任何成员。

  • 一个变量，其值是 enumType 类型的一个枚举成员。

  • 表示枚举成员名称的字符串。该字符串中字符的大小写必须与枚举成员名称的大小写相同。 表示枚举成员名称的字符串。该字符串中字符的大小写必须与枚举成员名称的大小写相同。

  • enumType 的基础类型的一个值。

如果 enumType 中的常量定义一组位字段，且 value 包含多个位字段的值、名称或基础值，则 IsDefined 方法返回 false。也就是说，对于定义一组位字段的枚举，该方法仅用于确定单个位字段是否属于该枚举。 如果 enumType 中的常量定义一组位字段，且 value 包含多个位字段的值、名称或基础值，则 IsDefined 方法返回 false。也就是说，对于定义一组位字段的枚举，该方法仅用于确定单个位字段是否属于该枚举。

下面的示例定义一个名为 PetType 的枚举，该枚举包含若干位字段。然后，它使用通过设置多个位字段而生成的可能基础枚举值、字符串名称和组合值来调用 IsDefined 方法。 下面的示例定义一个名为 PetType 的枚举，该枚举包含若干位字段。然后，它使用通过设置多个位字段而生成的可能基础枚举值、字符串名称和组合值来调用 IsDefined 方法。

<Flags> Public Enum PetType As Integer
   None = 0
   Dog = 1
   Cat = 2
   Rodent = 4
   Bird = 8
   Reptile = 16
   Other = 32
End Enum

Module Example
   Public Sub Main()
      Dim value As Object

      ' Call IsDefined with underlying integral value of member.
      value = 1
      Console.WriteLine("{0}: {1}", value, [Enum].IsDefined(GetType(PetType), value))
      ' Call IsDefined with invalid underlying integral value.
      value = 64
      Console.WriteLine("{0}: {1}", value, [Enum].IsDefined(GetType(PetType), value))
      ' Call IsDefined with string containing member name.
      value = "Rodent"
      Console.WriteLine("{0}: {1}", value, [Enum].IsDefined(GetType(PetType), value))
      ' Call IsDefined with a variable of type PetType.
      value = PetType.Dog
      Console.WriteLine("{0}: {1}", value, [Enum].IsDefined(GetType(PetType), value))
      value = PetType.Dog Or PetType.Cat
      Console.WriteLine("{0}: {1}", value, [Enum].IsDefined(GetType(PetType), value))
      ' Call IsDefined with uppercase member name.
      value = "None"
      Console.WriteLine("{0}: {1}", value, [Enum].IsDefined(GetType(PetType), value))
      value = "NONE"
      Console.WriteLine("{0}: {1}", value, [Enum].IsDefined(GetType(PetType), value))
      ' Call IsDefined with combined value
      value = PetType.Dog Or PetType.Bird
      Console.WriteLine("{0:D}: {1}", value, [Enum].IsDefined(GetType(PetType), value))
      value = value.ToString()
      Console.WriteLine("{0:D}: {1}", value, [Enum].IsDefined(GetType(PetType), value))
   End Sub
End Module
' The example displays the following output:
'       1: True
'       64: False
'       Rodent: True
'       Dog: True
'       Dog, Cat: False
'       None: True
'       NONE: False
'       9: False
'       Dog, Bird: False

using System;

[Flags] public enum PetType
{
   None = 0, Dog = 1, Cat = 2, Rodent = 4, Bird = 8, Reptile = 16, Other = 32
};

public class Example
{
   public static void Main()
   {
      object value;

      // Call IsDefined with underlying integral value of member.
      value = 1;
      Console.WriteLine("{0}: {1}", value, Enum.IsDefined(typeof(PetType), value));
      // Call IsDefined with invalid underlying integral value.
      value = 64;
      Console.WriteLine("{0}: {1}", value, Enum.IsDefined(typeof(PetType), value));
      // Call IsDefined with string containing member name.
      value = "Rodent";
      Console.WriteLine("{0}: {1}", value, Enum.IsDefined(typeof(PetType), value));
      // Call IsDefined with a variable of type PetType.
      value = PetType.Dog;
      Console.WriteLine("{0}: {1}", value, Enum.IsDefined(typeof(PetType), value));
      value = PetType.Dog | PetType.Cat;
      Console.WriteLine("{0}: {1}", value, Enum.IsDefined(typeof(PetType), value));
      // Call IsDefined with uppercase member name.
      value = "None";
      Console.WriteLine("{0}: {1}", value, Enum.IsDefined(typeof(PetType), value));
      value = "NONE";
      Console.WriteLine("{0}: {1}", value, Enum.IsDefined(typeof(PetType), value));
      // Call IsDefined with combined value
      value = PetType.Dog | PetType.Bird;
      Console.WriteLine("{0:D}: {1}", value, Enum.IsDefined(typeof(PetType), value));
      value = value.ToString();
      Console.WriteLine("{0:D}: {1}", value, Enum.IsDefined(typeof(PetType), value));
   }
}
// The example displays the following output:
//       1: True
//       64: False
//       Rodent: True
//       Dog: True
//       Dog, Cat: False
//       None: True
//       NONE: False
//       9: False
//       Dog, Bird: False

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
System 命名空间
GetName
GetNames
GetValues


Enum ..::.Parse 方法

Enum
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Enum 类

将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。

名称 说明
页首

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.Parse 方法 (Type, String)

Enum
.
.
::
.
Parse 方法 (Type, String)
Enum 类

将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function Parse ( _
    enumType As Type, _
    value As String _
) As Object
[ComVisibleAttribute(true)]
public static Object Parse(
    Type enumType,
    string value
)
[ComVisibleAttribute(true)]
public:
static Object^ Parse(
    Type^ enumType,
    String^ value
)
[<ComVisibleAttribute(true)>]
static member Parse :
        enumType:Type *
        value:string -> Object

参数

enumType
类型： System Type
枚举类型。
value
类型： System String
包含要转换的值或名称的字符串。

返回值

类型： System Object
enumType 类型的对象，其值由 value 表示。
异常 | 条件
ArgumentNullException | enumType 或 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。 - 或 - value 为空字符串或只包含空白。 - 或 - value 是一个名称，但不是为该枚举定义的命名常量之一。
OverflowException | value 超出 enumType 基础类型的范围。

value 参数中包含枚举成员基础值字符串表示形式、已命名的常数或由逗号 (,) 分隔的已命名常数列表。在 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则返回值是各指定名称通过按位 OR 运算结合而成的值。 value 参数中包含枚举成员基础值字符串表示形式、已命名的常数或由逗号 (,) 分隔的已命名常数列表。在 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则返回值是各指定名称通过按位 OR 运算结合而成的值。 value 参数中包含枚举成员基础值字符串表示形式、已命名的常数或由逗号 (,) 分隔的已命名常数列表。在 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则返回值是各指定名称通过按位 OR 运算结合而成的值。

如果 value 是一个不与 enumType 的命名常数对应的名称，则此方法将引发 ArgumentException。如果 value 是一个不表示 enumType 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 enumType 的成员。下面的示例定义 Colors 枚举，调用 Parse(Type, String) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。 如果 value 是一个不与 enumType 的命名常数对应的名称，则此方法将引发 ArgumentException。如果 value 是一个不表示 enumType 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 enumType 的成员。下面的示例定义 Colors 枚举，调用 Parse(Type, String) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。 如果 value 是一个不与 enumType 的命名常数对应的名称，则此方法将引发 ArgumentException。如果 value 是一个不表示 enumType 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 enumType 的成员。下面的示例定义 Colors 枚举，调用 Parse(Type, String) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。 如果 value 是一个不与 enumType 的命名常数对应的名称，则此方法将引发 ArgumentException。如果 value 是一个不表示 enumType 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 enumType 的成员。下面的示例定义 Colors 枚举，调用 Parse(Type, String) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。

<Flags> Enum Colors As Integer
   None = 0
   Red = 1
   Green = 2
   Blue = 4
End Enum

Module Example
   Public Sub Main()
      Dim colorStrings() As String = {"0", "2", "8", "blue", "Blue", "Yellow", "Red, Green"}
      For Each colorString As String In colorStrings
         Try
            Dim colorValue As Colors = CType([Enum].Parse(GetType(Colors), colorString), Colors)
            If [Enum].IsDefined(GetType(Colors), colorValue) Or colorValue.ToString().Contains(",") Then
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString())
            Else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString)
            End If
         Catch e As ArgumentException
            Console.WriteLine("'{0}' is not a member of the Colors enumeration.", colorString)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '0' to None.
'       Converted '2' to Green.
'       8 is not an underlying value of the Colors enumeration.
'       'blue' is not a member of the Colors enumeration.
'       Converted 'Blue' to Blue.
'       'Yellow' is not a member of the Colors enumeration.
'       Converted 'Red, Green' to Red, Green.

using System;

[Flags] enum Colors { None=0, Red = 1, Green = 2, Blue = 4 };

public class Example
{
   public static void Main()
   {
      string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
      foreach (string colorString in colorStrings)
      {
         try {
            Colors colorValue = (Colors) Enum.Parse(typeof(Colors), colorString);
            if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
            else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
         }
         catch (ArgumentException) {
            Console.WriteLine("'{0}' is not a member of the Colors enumeration.", colorString);
         }
      }
   }
}
// The example displays the following output:
//       Converted '0' to None.
//       Converted '2' to Green.
//       8 is not an underlying value of the Colors enumeration.
//       'blue' is not a member of the Colors enumeration.
//       Converted 'Blue' to Blue.
//       'Yellow' is not a member of the Colors enumeration.
//       Converted 'Red, Green' to Red, Green.

此运算区分大小写。

下面的示例使用 Parse(Type, String) 方法解析通过调用 GetNames 方法创建的字符串数组。它还使用 Parse(Type, String) 方法来分析组成位字段的枚举值。 下面的示例使用 Parse(Type, String) 方法解析通过调用 GetNames 方法创建的字符串数组。它还使用 Parse(Type, String) 方法来分析组成位字段的枚举值。

<Flags> Enum Colors As Integer
   None = 0
   Red = 1
   Green = 2
   Blue = 4
End Enum

Module Example
   Public Sub Main()
      Dim colorStrings() As String = {"0", "2", "8", "blue", "Blue", "Yellow", "Red, Green"}
      For Each colorString As String In colorStrings
         Try
            Dim colorValue As Colors = CType([Enum].Parse(GetType(Colors), colorString), Colors)
            If [Enum].IsDefined(GetType(Colors), colorValue) Or colorValue.ToString().Contains(",") Then
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString())
            Else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString)
            End If
         Catch e As ArgumentException
            Console.WriteLine("'{0}' is not a member of the Colors enumeration.", colorString)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '0' to None.
'       Converted '2' to Green.
'       8 is not an underlying value of the Colors enumeration.
'       'blue' is not a member of the Colors enumeration.
'       Converted 'Blue' to Blue.
'       'Yellow' is not a member of the Colors enumeration.
'       Converted 'Red, Green' to Red, Green.

using System;

[Flags] enum Colors { None=0, Red = 1, Green = 2, Blue = 4 };

public class Example
{
   public static void Main()
   {
      string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
      foreach (string colorString in colorStrings)
      {
         try {
            Colors colorValue = (Colors) Enum.Parse(typeof(Colors), colorString);
            if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
            else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
         }
         catch (ArgumentException) {
            Console.WriteLine("'{0}' is not a member of the Colors enumeration.", colorString);
         }
      }
   }
}
// The example displays the following output:
//       Converted '0' to None.
//       Converted '2' to Green.
//       8 is not an underlying value of the Colors enumeration.
//       'blue' is not a member of the Colors enumeration.
//       Converted 'Blue' to Blue.
//       'Yellow' is not a member of the Colors enumeration.
//       Converted 'Red, Green' to Red, Green.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
Parse 重载
System 命名空间
IsDefined


Enum ..::.Parse 方法 (Type, String, Boolean)

Enum
.
.
::
.
Parse 方法 (Type, String, Boolean)
Enum 类

将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。一个参数指定该操作是否区分大小写。 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。一个参数指定该操作是否区分大小写。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function Parse ( _
    enumType As Type, _
    value As String, _
    ignoreCase As Boolean _
) As Object
[ComVisibleAttribute(true)]
public static Object Parse(
    Type enumType,
    string value,
    bool ignoreCase
)
[ComVisibleAttribute(true)]
public:
static Object^ Parse(
    Type^ enumType,
    String^ value,
    bool ignoreCase
)
[<ComVisibleAttribute(true)>]
static member Parse :
        enumType:Type *
        value:string *
        ignoreCase:bool -> Object

参数

enumType
类型： System Type
枚举类型。
value
类型： System String
包含要转换的值或名称的字符串。
ignoreCase
类型： System Boolean
true 为忽略大小写；false 为考虑大小写。

返回值

类型： System Object
enumType 类型的对象，其值由 value 表示。
异常 | 条件
ArgumentNullException | enumType 或 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。 - 或 - value 是空字符串 ("") 或只包含空白。 - 或 - value 是一个名称，但不是为该枚举定义的命名常量之一。
OverflowException | value 超出 enumType 基础类型的范围。

value 参数中包含枚举成员基础值字符串表示形式、已命名的常数或由逗号 (,) 分隔的已命名常数列表。在 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则返回值是各指定名称通过按位 OR 运算结合而成的值。 value 参数中包含枚举成员基础值字符串表示形式、已命名的常数或由逗号 (,) 分隔的已命名常数列表。在 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则返回值是各指定名称通过按位 OR 运算结合而成的值。 value 参数中包含枚举成员基础值字符串表示形式、已命名的常数或由逗号 (,) 分隔的已命名常数列表。在 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则返回值是各指定名称通过按位 OR 运算结合而成的值。

如果 value 是一个不与 enumType 的命名常数对应的名称，则此方法将引发 ArgumentException。如果 value 是一个不表示 enumType 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 enumType 的成员。下面的示例定义 Colors 枚举，调用 Parse(Type, String, Boolean) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。 如果 value 是一个不与 enumType 的命名常数对应的名称，则此方法将引发 ArgumentException。如果 value 是一个不表示 enumType 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 enumType 的成员。下面的示例定义 Colors 枚举，调用 Parse(Type, String, Boolean) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。 如果 value 是一个不与 enumType 的命名常数对应的名称，则此方法将引发 ArgumentException。如果 value 是一个不表示 enumType 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 enumType 的成员。下面的示例定义 Colors 枚举，调用 Parse(Type, String, Boolean) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。 如果 value 是一个不与 enumType 的命名常数对应的名称，则此方法将引发 ArgumentException。如果 value 是一个不表示 enumType 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 enumType 的成员。下面的示例定义 Colors 枚举，调用 Parse(Type, String, Boolean) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。

<Flags> Enum Colors As Integer
   None = 0
   Red = 1
   Green = 2
   Blue = 4
End Enum

Module Example
   Public Sub Main()
      Dim colorStrings() As String = {"0", "2", "8", "blue", "Blue", "Yellow", "Red, Green"}
      For Each colorString As String In colorStrings
         Try
            Dim colorValue As Colors = CType([Enum].Parse(GetType(Colors), colorString, True), Colors)
            If [Enum].IsDefined(GetType(Colors), colorValue) Or colorValue.ToString().Contains(",") Then
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString())
            Else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString)
            End If
         Catch e As ArgumentException
            Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '0' to None.
'       Converted '2' to Green.
'       8 is not an underlying value of the Colors enumeration.
'       Converted 'blue' to Blue.
'       Converted 'Blue' to Blue.
'       Yellow is not a member of the Colors enumeration.
'       Converted 'Red, Green' to Red, Green.

using System;

[Flags] enum Colors { None=0, Red = 1, Green = 2, Blue = 4 };

public class Example
{
   public static void Main()
   {
      string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
      foreach (string colorString in colorStrings)
      {
         try {
            Colors colorValue = (Colors) Enum.Parse(typeof(Colors), colorString, true);
            if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
            else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
         }
         catch (ArgumentException) {
            Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString);
         }
      }
   }
}
// The example displays the following output:
//       Converted '0' to None.
//       Converted '2' to Green.
//       8 is not an underlying value of the Colors enumeration.
//       Converted 'blue' to Blue.
//       Converted 'Blue' to Blue.
//       Yellow is not a member of the Colors enumeration.
//       Converted 'Red, Green' to Red, Green.

ignoreCase 参数指定此运算是否区分大小写。

下面的示例使用 Parse(Type, String, Boolean) 方法解析通过调用 GetNames 方法创建的字符串数组。它还使用 Parse(Type, String) 方法来分析组成位字段的枚举值。 下面的示例使用 Parse(Type, String, Boolean) 方法解析通过调用 GetNames 方法创建的字符串数组。它还使用 Parse(Type, String) 方法来分析组成位字段的枚举值。

<Flags> Enum Colors As Integer
   None = 0
   Red = 1
   Green = 2
   Blue = 4
End Enum

Module Example
   Public Sub Main()
      Dim colorStrings() As String = {"0", "2", "8", "blue", "Blue", "Yellow", "Red, Green"}
      For Each colorString As String In colorStrings
         Try
            Dim colorValue As Colors = CType([Enum].Parse(GetType(Colors), colorString, True), Colors)
            If [Enum].IsDefined(GetType(Colors), colorValue) Or colorValue.ToString().Contains(",") Then
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString())
            Else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString)
            End If
         Catch e As ArgumentException
            Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '0' to None.
'       Converted '2' to Green.
'       8 is not an underlying value of the Colors enumeration.
'       Converted 'blue' to Blue.
'       Converted 'Blue' to Blue.
'       Yellow is not a member of the Colors enumeration.
'       Converted 'Red, Green' to Red, Green.

using System;

[Flags] enum Colors { None=0, Red = 1, Green = 2, Blue = 4 };

public class Example
{
   public static void Main()
   {
      string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
      foreach (string colorString in colorStrings)
      {
         try {
            Colors colorValue = (Colors) Enum.Parse(typeof(Colors), colorString, true);
            if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
            else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
         }
         catch (ArgumentException) {
            Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString);
         }
      }
   }
}
// The example displays the following output:
//       Converted '0' to None.
//       Converted '2' to Green.
//       8 is not an underlying value of the Colors enumeration.
//       Converted 'blue' to Blue.
//       Converted 'Blue' to Blue.
//       Yellow is not a member of the Colors enumeration.
//       Converted 'Red, Green' to Red, Green.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
Parse 重载
System 命名空间
IsDefined


Enum ..::.ToObject 方法

Enum
.
.
::
.
ToObject 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Enum 类

将指定的整数值转换为枚举成员。

名称 说明
页首

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.ToObject 方法 (Type, Byte)

Enum
.
.
::
.
ToObject 方法 (Type, Byte)
Enum 类

将指定的 8 位无符号整数转换为枚举成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function ToObject ( _
    enumType As Type, _
    value As Byte _
) As Object
[ComVisibleAttribute(true)]
public static Object ToObject(
    Type enumType,
    byte value
)
[ComVisibleAttribute(true)]
public:
static Object^ ToObject(
    Type^ enumType,
    unsigned char value
)
[<ComVisibleAttribute(true)>]
static member ToObject :
        enumType:Type *
        value:byte -> Object

参数

enumType
类型： System Type
要返回的枚举类型。
value
类型： System Byte
要转换为枚举成员的值。

返回值

类型： System Object
设置为 value 的枚举的实例。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

ToObject(Type, Byte) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。 ToObject(Type, Byte) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。

此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。 此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
ToObject 重载
System 命名空间


Enum ..::.ToObject 方法 (Type, Int16)

Enum
.
.
::
.
ToObject 方法 (Type, Int16)
Enum 类

将指定的 16 位有符号整数转换为枚举成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function ToObject ( _
    enumType As Type, _
    value As Short _
) As Object
[ComVisibleAttribute(true)]
public static Object ToObject(
    Type enumType,
    short value
)
[ComVisibleAttribute(true)]
public:
static Object^ ToObject(
    Type^ enumType,
    short value
)
[<ComVisibleAttribute(true)>]
static member ToObject :
        enumType:Type *
        value:int16 -> Object

参数

enumType
类型： System Type
要返回的枚举类型。
value
类型： System Int16
要转换为枚举成员的值。

返回值

类型： System Object
设置为 value 的枚举的实例。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

ToObject(Type, Int16) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。 ToObject(Type, Int16) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。

此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。 此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
ToObject 重载
System 命名空间


Enum ..::.ToObject 方法 (Type, Int32)

Enum
.
.
::
.
ToObject 方法 (Type, Int32)
Enum 类

将指定的 32 位有符号整数转换为枚举成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function ToObject ( _
    enumType As Type, _
    value As Integer _
) As Object
[ComVisibleAttribute(true)]
public static Object ToObject(
    Type enumType,
    int value
)
[ComVisibleAttribute(true)]
public:
static Object^ ToObject(
    Type^ enumType,
    int value
)
[<ComVisibleAttribute(true)>]
static member ToObject :
        enumType:Type *
        value:int -> Object

参数

enumType
类型： System Type
要返回的枚举类型。
value
类型： System Int32
要转换为枚举成员的值。

返回值

类型： System Object
设置为 value 的枚举的实例。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

ToObject(Type, Int32) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。 ToObject(Type, Int32) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。

此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。 此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
ToObject 重载
System 命名空间


Enum ..::.ToObject 方法 (Type, Int64)

Enum
.
.
::
.
ToObject 方法 (Type, Int64)
Enum 类

将指定的 64 位有符号整数转换为枚举成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function ToObject ( _
    enumType As Type, _
    value As Long _
) As Object
[ComVisibleAttribute(true)]
public static Object ToObject(
    Type enumType,
    long value
)
[ComVisibleAttribute(true)]
public:
static Object^ ToObject(
    Type^ enumType,
    long long value
)
[<ComVisibleAttribute(true)>]
static member ToObject :
        enumType:Type *
        value:int64 -> Object

参数

enumType
类型： System Type
要返回的枚举类型。
value
类型： System Int64
要转换为枚举成员的值。

返回值

类型： System Object
设置为 value 的枚举的实例。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

ToObject(Type, Int64) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。 ToObject(Type, Int64) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。

此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。 此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
ToObject 重载
System 命名空间


Enum ..::.ToObject 方法 (Type, Object)

Enum
.
.
::
.
ToObject 方法 (Type, Object)
Enum 类

将具有整数值的指定对象转换为枚举成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Shared Function ToObject ( _
    enumType As Type, _
    value As Object _
) As Object
[ComVisibleAttribute(true)]
public static Object ToObject(
    Type enumType,
    Object value
)
[ComVisibleAttribute(true)]
public:
static Object^ ToObject(
    Type^ enumType,
    Object^ value
)
[<ComVisibleAttribute(true)>]
static member ToObject :
        enumType:Type *
        value:Object -> Object

参数

enumType
类型： System Type
要返回的枚举类型。
value
类型： System Object
要转换为枚举成员的值。

返回值

类型： System Object
值为 value 的枚举对象。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。 - 或 - value 不是 SByte、Int16、Int32、Int64、Byte、UInt16、UInt32 和 UInt64 类型。

ToObject(Type, Object) 方法将整数值 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。 ToObject(Type, Object) 方法将整数值 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。

此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。 此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
ToObject 重载
System 命名空间


Enum ..::.ToObject 方法 (Type, SByte)

Enum
.
.
::
.
ToObject 方法 (Type, SByte)
Enum 类

将指定的 8 位有符号整数值转换为枚举成员。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public Shared Function ToObject ( _
    enumType As Type, _
    value As SByte _
) As Object
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public static Object ToObject(
    Type enumType,
    sbyte value
)
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public:
static Object^ ToObject(
    Type^ enumType,
    signed char value
)
[<CLSCompliantAttribute(false)>]
[<ComVisibleAttribute(true)>]
static member ToObject :
        enumType:Type *
        value:sbyte -> Object

参数

enumType
类型： System Type
要返回的枚举类型。
value
类型： System SByte
要转换为枚举成员的值。

返回值

类型： System Object
设置为 value 的枚举的实例。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

ToObject(Type, SByte) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。 ToObject(Type, SByte) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。

此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。 此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
ToObject 重载
System 命名空间


Enum ..::.ToObject 方法 (Type, UInt16)

Enum
.
.
::
.
ToObject 方法 (Type, UInt16)
Enum 类

将指定的 16 位无符号整数值转换为枚举成员。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<CLSCompliantAttribute(False)> _
Public Shared Function ToObject ( _
    enumType As Type, _
    value As UShort _
) As Object
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public static Object ToObject(
    Type enumType,
    ushort value
)
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public:
static Object^ ToObject(
    Type^ enumType,
    unsigned short value
)
[<ComVisibleAttribute(true)>]
[<CLSCompliantAttribute(false)>]
static member ToObject :
        enumType:Type *
        value:uint16 -> Object

参数

enumType
类型： System Type
要返回的枚举类型。
value
类型： System UInt16
要转换为枚举成员的值。

返回值

类型： System Object
设置为 value 的枚举的实例。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

ToObject(Type, UInt16) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。 ToObject(Type, UInt16) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。

此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。 此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
ToObject 重载
System 命名空间


Enum ..::.ToObject 方法 (Type, UInt32)

Enum
.
.
::
.
ToObject 方法 (Type, UInt32)
Enum 类

将指定的 32 位无符号整数值转换为枚举成员。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public Shared Function ToObject ( _
    enumType As Type, _
    value As UInteger _
) As Object
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public static Object ToObject(
    Type enumType,
    uint value
)
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public:
static Object^ ToObject(
    Type^ enumType,
    unsigned int value
)
[<CLSCompliantAttribute(false)>]
[<ComVisibleAttribute(true)>]
static member ToObject :
        enumType:Type *
        value:uint32 -> Object

参数

enumType
类型： System Type
要返回的枚举类型。
value
类型： System UInt32
要转换为枚举成员的值。

返回值

类型： System Object
设置为 value 的枚举的实例。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

ToObject(Type, UInt32) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。 ToObject(Type, UInt32) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。

此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。 此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
ToObject 重载
System 命名空间


Enum ..::.ToObject 方法 (Type, UInt64)

Enum
.
.
::
.
ToObject 方法 (Type, UInt64)
Enum 类

将指定的 64 位无符号整数值转换为枚举成员。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<CLSCompliantAttribute(False)> _
Public Shared Function ToObject ( _
    enumType As Type, _
    value As ULong _
) As Object
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public static Object ToObject(
    Type enumType,
    ulong value
)
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public:
static Object^ ToObject(
    Type^ enumType,
    unsigned long long value
)
[<ComVisibleAttribute(true)>]
[<CLSCompliantAttribute(false)>]
static member ToObject :
        enumType:Type *
        value:uint64 -> Object

参数

enumType
类型： System Type
要返回的枚举类型。
value
类型： System UInt64
要转换为枚举成员的值。

返回值

类型： System Object
设置为 value 的枚举的实例。
异常 | 条件
ArgumentNullException | enumType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | enumType 不是 Enum。

ToObject(Type, UInt64) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。 ToObject(Type, UInt64) 方法将 value 转换为枚举成员，其基础值为 value。请注意，即使值超出 enumType 成员界限，该转换也会成功。

此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。 此转换方法返回一个类型为 Object 的值。然后，可以将其强制转换或转换为 enumType 类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
ToObject 重载
System 命名空间


Enum ..::.ToString 方法

Enum
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Enum 类

将此实例的值转换为其等效的字符串表示形式。

名称 说明
页首

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.ToString 方法

Enum
.
.
::
.
ToString 方法
Enum 类

将此实例的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示形式。

使用此方法就如同指定了通用格式字符“G”一样。也就是说，如果未将 FlagsAttribute 应用到此枚举类型，且存在与此实例的值相等的已命名常数，则返回值为包含该常数名称的字符串。如果应用了 FlagsAttribute，且存在与此实例的值相等的一个或多个已命名常数的组合，则返回值是一个字符串，该字符串包含用分隔符分隔的常数名称列表。其他情况下，返回值是此实例的数值的字符串表示形式。 使用此方法就如同指定了通用格式字符“G”一样。也就是说，如果未将 FlagsAttribute 应用到此枚举类型，且存在与此实例的值相等的已命名常数，则返回值为包含该常数名称的字符串。如果应用了 FlagsAttribute，且存在与此实例的值相等的一个或多个已命名常数的组合，则返回值是一个字符串，该字符串包含用分隔符分隔的常数名称列表。其他情况下，返回值是此实例的数值的字符串表示形式。 使用此方法就如同指定了通用格式字符“G”一样。也就是说，如果未将 FlagsAttribute 应用到此枚举类型，且存在与此实例的值相等的已命名常数，则返回值为包含该常数名称的字符串。如果应用了 FlagsAttribute，且存在与此实例的值相等的一个或多个已命名常数的组合，则返回值是一个字符串，该字符串包含用分隔符分隔的常数名称列表。其他情况下，返回值是此实例的数值的字符串表示形式。 使用此方法就如同指定了通用格式字符“G”一样。也就是说，如果未将 FlagsAttribute 应用到此枚举类型，且存在与此实例的值相等的已命名常数，则返回值为包含该常数名称的字符串。如果应用了 FlagsAttribute，且存在与此实例的值相等的一个或多个已命名常数的组合，则返回值是一个字符串，该字符串包含用分隔符分隔的常数名称列表。其他情况下，返回值是此实例的数值的字符串表示形式。

有关格式字符的更多信息，请参见 Format 方法的备注部分。有关一般格式化的更多信息，请参见格式化类型。 有关格式字符的更多信息，请参见 Format 方法的备注部分。有关一般格式化的更多信息，请参见格式化类型。

对调用者的说明

如果多个枚举成员具有相同的基础值，且您尝试基于其基础值检索枚举成员名称的字符串表示，则您的代码不做有关该方法将返回哪个姓名的假设。例如，下列枚举定义了两个具有相同基础值的成员，Shade.Gray 和 Shade.Grey。 如果多个枚举成员具有相同的基础值，且您尝试基于其基础值检索枚举成员名称的字符串表示，则您的代码不做有关该方法将返回哪个姓名的假设。例如，下列枚举定义了两个具有相同基础值的成员，Shade.Gray 和 Shade.Grey。

Public Enum Shade
   White = 0
   Gray = 1
   Grey = 1
   Black = 2
End Enum

enum Shade
{
    White = 0, Gray = 1, Grey = 1, Black = 2
}

下面的方法调用尝试检索基础值为 1 的 Shade 枚举成员的名称。该方法可能返回 "Gray" 或 "Grey"，您的代码不应进行任何有关将返回哪个字符串的假设。 下面的方法调用尝试检索基础值为 1 的 Shade 枚举成员的名称。该方法可能返回 "Gray" 或 "Grey"，您的代码不应进行任何有关将返回哪个字符串的假设。

Dim shadeName As String = CType(1, Shade).ToString()

string shadeName = ((Shade) 1).ToString();

下面的示例演示将枚举值转换为字符串。

Imports System

Public Class EnumSample
    Enum Colors
        Red = 1
        Blue = 2
    End Enum

    Public Shared Sub Main()
        Dim myColors As Colors = Colors.Red
        Console.WriteLine("The value of this instance is '{0}'", _
           myColors.ToString())
    End Sub
End Class

'Output.
'The value of this instance is 'Red'.

using System;

public class EnumSample {
    enum Colors {Red = 1, Blue = 2};

    public static void Main() {
        Enum myColors = Colors.Red;
        Console.WriteLine("The value of this instance is '{0}'",
           myColors.ToString());
    }
}
/*
Output.
The value of this instance is 'Red'.
*/

using namespace System;
public ref class EnumSample
{
public:
   enum class Colors
   {
      Red = 1,
      Blue = 2
   };

   static void main()
   {
      Enum ^ myColors = Colors::Red;
      Console::WriteLine( "The value of this instance is '{0}'", myColors );
   }

};

int main()
{
   EnumSample::main();
}

/*
Output.
The value of this instance is 'Red'.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
ToString 重载
System 命名空间
Format
Parse


Enum ..::.ToString 方法 (IFormatProvider)

Enum
.
.
::
.
ToString 方法 (IFormatProvider)
Enum 类

注意：此 API 现在已过时。

此方法重载已过时；请使用 Enum..::.ToString()()()。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("The provider argument is not used. Please use ToString().")> _
Public Function ToString ( _
    provider As IFormatProvider _
) As String
[ObsoleteAttribute("The provider argument is not used. Please use ToString().")]
public string ToString(
    IFormatProvider provider
)
[ObsoleteAttribute(L"The provider argument is not used. Please use ToString().")]
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
[<ObsoleteAttribute("The provider argument is not used. Please use ToString().")>]
abstract ToString :
        provider:IFormatProvider -> string
[<ObsoleteAttribute("The provider argument is not used. Please use ToString().")>]
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
（已过时）

返回值

类型： System String
此实例的值的字符串表示形式。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Enum 类
Enum 成员
ToString 重载
System 命名空间


Enum ..::.ToString 方法 (String)

Enum
.
.
::
.
ToString 方法 (String)
Enum 类

使用指定格式将此实例的值转换成其等效的字符串表示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 包含无效规范。
InvalidOperationException | format 等于“X”，但枚举类型未知。

format 参数中可包含格式字符“G”或“g”、“D”或“d”、“X”或“x”、“F”或“f”。如果 format 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用一般格式说明符 ("G")。有关这些格式字符的更多信息，请参见 Format 方法的备注部分。有关一般格式化的更多信息，请参见格式化类型。 format 参数中可包含格式字符“G”或“g”、“D”或“d”、“X”或“x”、“F”或“f”。如果 format 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用一般格式说明符 ("G")。有关这些格式字符的更多信息，请参见 Format 方法的备注部分。有关一般格式化的更多信息，请参见格式化类型。 format 参数中可包含格式字符“G”或“g”、“D”或“d”、“X”或“x”、“F”或“f”。如果 format 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用一般格式说明符 ("G")。有关这些格式字符的更多信息，请参见 Format 方法的备注部分。有关一般格式化的更多信息，请参见格式化类型。 format 参数中可包含格式字符“G”或“g”、“D”或“d”、“X”或“x”、“F”或“f”。如果 format 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用一般格式说明符 ("G")。有关这些格式字符的更多信息，请参见 Format 方法的备注部分。有关一般格式化的更多信息，请参见格式化类型。

对调用者的说明

如果多个枚举成员具有相同的基础值，且您尝试基于其基础值检索枚举成员名称的字符串表示，则您的代码不做有关该方法将返回哪个姓名的假设。例如，下列枚举定义了两个具有相同基础值的成员，Shade.Gray 和 Shade.Grey。 如果多个枚举成员具有相同的基础值，且您尝试基于其基础值检索枚举成员名称的字符串表示，则您的代码不做有关该方法将返回哪个姓名的假设。例如，下列枚举定义了两个具有相同基础值的成员，Shade.Gray 和 Shade.Grey。

Public Enum Shade
   White = 0
   Gray = 1
   Grey = 1
   Black = 2
End Enum

enum Shade
{
    White = 0, Gray = 1, Grey = 1, Black = 2
}

下面的方法调用尝试检索基础值为 1 的 Shade 枚举成员的名称。该方法可能返回 "Gray" 或 "Grey"，您的代码不应进行任何有关将返回哪个字符串的假设。 下面的方法调用尝试检索基础值为 1 的 Shade 枚举成员的名称。该方法可能返回 "Gray" 或 "Grey"，您的代码不应进行任何有关将返回哪个字符串的假设。

Dim shadeName As String = CType(1, Shade).ToString("F")

string shadeName = ((Shade) 1).ToString("F");

下面的示例演示如何将枚举值转换为字符串。

' Sample for Enum.ToString(String)
Imports System

Class Sample
   Enum Colors
      Red
      Green
      Blue
      Yellow = 12
   End Enum 'Colors

   Public Shared Sub Main()
      Dim myColor As Colors = Colors.Yellow

      Console.WriteLine("Colors.Red = {0}", Colors.Red.ToString("d"))
      Console.WriteLine("Colors.Green = {0}", Colors.Green.ToString("d"))
      Console.WriteLine("Colors.Blue = {0}", Colors.Blue.ToString("d"))
      Console.WriteLine("Colors.Yellow = {0}", Colors.Yellow.ToString("d"))

      Console.WriteLine("{0}myColor = Colors.Yellow{0}", Environment.NewLine)

      Console.WriteLine("myColor.ToString(""g"") = {0}", myColor.ToString("g"))
      Console.WriteLine("myColor.ToString(""G"") = {0}", myColor.ToString("G"))

      Console.WriteLine("myColor.ToString(""x"") = {0}", myColor.ToString("x"))
      Console.WriteLine("myColor.ToString(""X"") = {0}", myColor.ToString("X"))

      Console.WriteLine("myColor.ToString(""d"") = {0}", myColor.ToString("d"))
      Console.WriteLine("myColor.ToString(""D"") = {0}", myColor.ToString("D"))

      Console.WriteLine("myColor.ToString(""f"") = {0}", myColor.ToString("f"))
      Console.WriteLine("myColor.ToString(""F"") = {0}", myColor.ToString("F"))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Colors.Red = 0
'Colors.Green = 1
'Colors.Blue = 2
'Colors.Yellow = 12
'
'myColor = Colors.Yellow
'
'myColor.ToString("g") = Yellow
'myColor.ToString("G") = Yellow
'myColor.ToString("x") = 0000000C
'myColor.ToString("X") = 0000000C
'myColor.ToString("d") = 12
'myColor.ToString("D") = 12
'myColor.ToString("f") = Yellow
'myColor.ToString("F") = Yellow
'

// Sample for Enum.ToString(String)
using System;

class Sample
{
    enum Colors {Red, Green, Blue, Yellow = 12};

    public static void Main()
    {
    Colors myColor = Colors.Yellow;

    Console.WriteLine("Colors.Red = {0}", Colors.Red.ToString("d"));
    Console.WriteLine("Colors.Green = {0}", Colors.Green.ToString("d"));
    Console.WriteLine("Colors.Blue = {0}", Colors.Blue.ToString("d"));
    Console.WriteLine("Colors.Yellow = {0}", Colors.Yellow.ToString("d"));

    Console.WriteLine("{0}myColor = Colors.Yellow{0}", Environment.NewLine);

    Console.WriteLine("myColor.ToString(\"g\") = {0}", myColor.ToString("g"));
    Console.WriteLine("myColor.ToString(\"G\") = {0}", myColor.ToString("G"));

    Console.WriteLine("myColor.ToString(\"x\") = {0}", myColor.ToString("x"));
    Console.WriteLine("myColor.ToString(\"X\") = {0}", myColor.ToString("X"));

    Console.WriteLine("myColor.ToString(\"d\") = {0}", myColor.ToString("d"));
    Console.WriteLine("myColor.ToString(\"D\") = {0}", myColor.ToString("D"));

    Console.WriteLine("myColor.ToString(\"f\") = {0}", myColor.ToString("f"));
    Console.WriteLine("myColor.ToString(\"F\") = {0}", myColor.ToString("F"));
    }
}
/*
This example produces the following results:
Colors.Red = 0
Colors.Green = 1
Colors.Blue = 2
Colors.Yellow = 12

myColor = Colors.Yellow

myColor.ToString("g") = Yellow
myColor.ToString("G") = Yellow
myColor.ToString("x") = 0000000C
myColor.ToString("X") = 0000000C
myColor.ToString("d") = 12
myColor.ToString("D") = 12
myColor.ToString("f") = Yellow
myColor.ToString("F") = Yellow
*/

// Sample for Enum::ToString(String)

using namespace System;

enum class Colors
{
   Red, Green, Blue, Yellow = 12
};

int main()
{
   Colors myColor = Colors::Yellow;
   Console::WriteLine( "Colors::Red = {0}", Colors::Red.ToString( "d" ) );
   Console::WriteLine( "Colors::Green = {0}", Colors::Green.ToString( "d" ) );
   Console::WriteLine( "Colors::Blue = {0}", Colors::Blue.ToString( "d" ) );
   Console::WriteLine( "Colors::Yellow = {0}", Colors::Yellow.ToString( "d" ) );
   Console::WriteLine( " {0}myColor = Colors::Yellow {0}", Environment::NewLine );
   Console::WriteLine( "myColor->ToString(\"g\") = {0}", myColor.ToString( "g" ) );
   Console::WriteLine( "myColor->ToString(\"G\") = {0}", myColor.ToString( "G" ) );
   Console::WriteLine( "myColor->ToString(\"x\") = {0}", myColor.ToString( "x" ) );
   Console::WriteLine( "myColor->ToString(\"X\") = {0}", myColor.ToString( "X" ) );
   Console::WriteLine( "myColor->ToString(\"d\") = {0}", myColor.ToString( "d" ) );
   Console::WriteLine( "myColor->ToString(\"D\") = {0}", myColor.ToString( "D" ) );
   Console::WriteLine( "myColor->ToString(\"f\") = {0}", myColor.ToString( "f" ) );
   Console::WriteLine( "myColor->ToString(\"F\") = {0}", myColor.ToString( "F" ) );
}

/*
This example produces the following results:
Colors::Red = 0
Colors::Green = 1
Colors::Blue = 2
Colors::Yellow = 12

myColor = Colors::Yellow

myColor->ToString("g") = Yellow
myColor->ToString("G") = Yellow
myColor->ToString("x") = 0000000C
myColor->ToString("X") = 0000000C
myColor->ToString("d") = 12
myColor->ToString("D") = 12
myColor->ToString("f") = Yellow
myColor->ToString("F") = Yellow
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Enum 类
Enum 成员
ToString 重载
System 命名空间
Format
Parse

其他资源

格式化类型
枚举格式字符串


Enum ..::.ToString 方法 (String, IFormatProvider)

Enum
.
.
::
.
ToString 方法 (String, IFormatProvider)
Enum 类

注意：此 API 现在已过时。

此方法重载已过时；请使用 Enum..::.ToString(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("The provider argument is not used. Please use ToString(String).")> _
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
[ObsoleteAttribute("The provider argument is not used. Please use ToString(String).")]
public string ToString(
    string format,
    IFormatProvider provider
)
[ObsoleteAttribute(L"The provider argument is not used. Please use ToString(String).")]
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
[<ObsoleteAttribute("The provider argument is not used. Please use ToString(String).")>]
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
[<ObsoleteAttribute("The provider argument is not used. Please use ToString(String).")>]
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
格式规范。
provider
类型： System IFormatProvider
（已过时。）

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。

实现

异常 | 条件
FormatException | format 未包含有效的格式规范。
InvalidOperationException | format 等于“X”，但枚举类型未知。

请仅指定 format；provider 参数已过时。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Enum 类
Enum 成员
ToString 重载
System 命名空间
Format

其他资源

格式化类型
枚举格式字符串


Enum ..::.TryParse 方法

Enum
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Enum 类

将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。用于指示转换是否成功的返回值。 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。用于指示转换是否成功的返回值。

名称 说明
页首

参考

Enum 类
Enum 成员
System 命名空间


Enum ..::.TryParse <(Of <(TEnum >)>) 方法 (String, TEnum%)

Enum
.
.
::
.
TryParse
<
(Of
<
(
TEnum
>
)
>
)
方法 (String, TEnum%)
Enum 类

将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。用于指示转换是否成功的返回值。 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。用于指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse(Of TEnum As {Structure, New}) ( _
    value As String, _
    <OutAttribute> ByRef result As TEnum _
) As Boolean
public static bool TryParse<TEnum>(
    string value,
    out TEnum result
)
where TEnum : struct, new()

public:
generic<typename TEnum>
where TEnum : value class, gcnew()
static bool TryParse(
    String^ value,
    [OutAttribute] TEnum% result
)
static member TryParse :
        value:string *
        result:'TEnum byref -> bool  when 'TEnum : struct, new()

类型参数

TEnum

要将 value 转换为的枚举类型。

参数

value
类型： System String
要转换的枚举名称或基础值的字符串表示形式。
result
类型：TEnum%
此方法在返回时包含一个类型为 TEnum 的一个对象，其值由 value 表示。该参数未经初始化即被传递。 此方法在返回时包含一个类型为 TEnum 的一个对象，其值由 value 表示。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 value 参数成功转换，则为 true；否则为 false。
异常 | 条件
ArgumentException | TEnum 不是枚举类型。

TryParse<(Of <(TEnum>)>)(String, TEnum%) 与 Parse(Type, String) 方法完全相同，不同之处在于转换失败时，返回 false，而不引发异常。它消除了在分析的枚举值字符串表示形式时对异常处理的需要。 TryParse<(Of <(TEnum>)>)(String, TEnum%) 与 Parse(Type, String) 方法完全相同，不同之处在于转换失败时，返回 false，而不引发异常。它消除了在分析的枚举值字符串表示形式时对异常处理的需要。

value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。如果 value 包含多个命名常数或值，则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则 result 反映了指定名称的值或与位 OR 运算合并的基础值。如果 value 是枚举值名称的字符串表示形式，则 value 与枚举名称的比较是分大小写的。 value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。如果 value 包含多个命名常数或值，则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则 result 反映了指定名称的值或与位 OR 运算合并的基础值。如果 value 是枚举值名称的字符串表示形式，则 value 与枚举名称的比较是分大小写的。 value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。如果 value 包含多个命名常数或值，则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则 result 反映了指定名称的值或与位 OR 运算合并的基础值。如果 value 是枚举值名称的字符串表示形式，则 value 与枚举名称的比较是分大小写的。 value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。如果 value 包含多个命名常数或值，则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则 result 反映了指定名称的值或与位 OR 运算合并的基础值。如果 value 是枚举值名称的字符串表示形式，则 value 与枚举名称的比较是分大小写的。

如果 value 是一个不对应 TEnum 的命名常数的名称，则该方法将返回 false。如果 value 是一个不表示 TEnum 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 TEnum 的成员。 如果 value 是一个不对应 TEnum 的命名常数的名称，则该方法将返回 false。如果 value 是一个不表示 TEnum 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 TEnum 的成员。 如果 value 是一个不对应 TEnum 的命名常数的名称，则该方法将返回 false。如果 value 是一个不表示 TEnum 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 TEnum 的成员。

下面的示例定义 Colors 枚举，调用 TryParse<(Of <(TEnum>)>)(String, TEnum%) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。

<Flags> Enum Colors As Integer
   None = 0
   Red = 1
   Green = 2
   Blue = 4
End Enum

Module Example
   Public Sub Main()
      Dim colorStrings() As String = {"0", "2", "8", "blue", "Blue", "Yellow", "Red, Green"}
      For Each colorString As String In colorStrings
         Dim colorValue As Colors
         If [Enum].TryParse(colorString, colorValue) Then
            If [Enum].IsDefined(GetType(Colors), colorValue) Or colorValue.ToString().Contains(",") Then
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString())
            Else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString)
            End If
         Else
            Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString)
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'    Converted '0' to None.
'    Converted '2' to Green.
'    8 is not an underlying value of the Colors enumeration.
'    blue is not a member of the Colors enumeration.
'    Converted 'Blue' to Blue.
'    Yellow is not a member of the Colors enumeration.
'    Converted 'Red, Green' to Red, Green.

using System;

[Flags] enum Colors { None=0, Red = 1, Green = 2, Blue = 4 };

public class Example
{
   public static void Main()
   {
      string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
      foreach (string colorString in colorStrings)
      {
         Colors colorValue;
         if (Enum.TryParse(colorString, out colorValue))
            if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
            else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
         else
            Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString);
      }
   }
}
// The example displays the following output:
//       Converted '0' to None.
//       Converted '2' to Green.
//       8 is not an underlying value of the Colors enumeration.
//       blue is not a member of the Colors enumeration.
//       Converted 'Blue' to Blue.
//       Yellow is not a member of the Colors enumeration.
//       Converted 'Red, Green' to Red, Green.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
TryParse 重载
System 命名空间


Enum ..::.TryParse <(Of <(TEnum >)>) 方法 (String, Boolean, TEnum%)

Enum
.
.
::
.
TryParse
<
(Of
<
(
TEnum
>
)
>
)
方法 (String, Boolean, TEnum%)
Enum 类

将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。一个参数指定该操作是否区分大小写。用于指示转换是否成功的返回值。 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。一个参数指定该操作是否区分大小写。用于指示转换是否成功的返回值。 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。一个参数指定该操作是否区分大小写。用于指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse(Of TEnum As {Structure, New}) ( _
    value As String, _
    ignoreCase As Boolean, _
    <OutAttribute> ByRef result As TEnum _
) As Boolean
public static bool TryParse<TEnum>(
    string value,
    bool ignoreCase,
    out TEnum result
)
where TEnum : struct, new()

public:
generic<typename TEnum>
where TEnum : value class, gcnew()
static bool TryParse(
    String^ value,
    bool ignoreCase,
    [OutAttribute] TEnum% result
)
static member TryParse :
        value:string *
        ignoreCase:bool *
        result:'TEnum byref -> bool  when 'TEnum : struct, new()

类型参数

TEnum

要将 value 转换为的枚举类型。

参数

value
类型： System String
要转换的枚举名称或基础值的字符串表示形式。
ignoreCase
类型： System Boolean
true 表示不区分大小写；false 表示区分大小写。
result
类型：TEnum%
此方法在返回时包含一个类型为 TEnum 的一个对象，其值由 value 表示。该参数未经初始化即被传递。 此方法在返回时包含一个类型为 TEnum 的一个对象，其值由 value 表示。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 value 参数成功转换，则为 true；否则为 false。
异常 | 条件
ArgumentException | TEnum 不是枚举类型。

TryParse<(Of <(TEnum>)>)(String, Boolean, TEnum%) 与 Parse(Type, String, Boolean) 方法完全相同，不同之处在于转换失败时，返回 false，而不引发异常。它消除了在分析的枚举值字符串表示形式时对异常处理的需要。 TryParse<(Of <(TEnum>)>)(String, Boolean, TEnum%) 与 Parse(Type, String, Boolean) 方法完全相同，不同之处在于转换失败时，返回 false，而不引发异常。它消除了在分析的枚举值字符串表示形式时对异常处理的需要。

value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。如果 value 包含多个命名常数或值，则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则 result 反映了指定名称的值或与位 OR 运算合并的基础值。如果 value 是枚举值名称的字符串表示形式，则 value 与枚举名称的比较取决于 ignoreCase 参数。如果为 true，则比较为不分大小写的；如果为 false，则为区分大小写的。 value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。如果 value 包含多个命名常数或值，则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则 result 反映了指定名称的值或与位 OR 运算合并的基础值。如果 value 是枚举值名称的字符串表示形式，则 value 与枚举名称的比较取决于 ignoreCase 参数。如果为 true，则比较为不分大小写的；如果为 false，则为区分大小写的。 value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。如果 value 包含多个命名常数或值，则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则 result 反映了指定名称的值或与位 OR 运算合并的基础值。如果 value 是枚举值名称的字符串表示形式，则 value 与枚举名称的比较取决于 ignoreCase 参数。如果为 true，则比较为不分大小写的；如果为 false，则为区分大小写的。 value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。如果 value 包含多个命名常数或值，则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则 result 反映了指定名称的值或与位 OR 运算合并的基础值。如果 value 是枚举值名称的字符串表示形式，则 value 与枚举名称的比较取决于 ignoreCase 参数。如果为 true，则比较为不分大小写的；如果为 false，则为区分大小写的。 value 参数中包含枚举成员的基础值或已命名常数、或者用逗号 (,) 分隔的已命名常数或基础值列表的字符串表现形式。如果 value 包含多个命名常数或值，则 value 中的每个值、名称或逗号的前面或后面都可以有一个或多个空格。如果 value 是一个列表，则 result 反映了指定名称的值或与位 OR 运算合并的基础值。如果 value 是枚举值名称的字符串表示形式，则 value 与枚举名称的比较取决于 ignoreCase 参数。如果为 true，则比较为不分大小写的；如果为 false，则为区分大小写的。

如果 value 是一个不对应 TEnum 的命名常数的名称，则该方法将返回 false。如果 value 是一个不表示 TEnum 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 TEnum 的成员。 如果 value 是一个不对应 TEnum 的命名常数的名称，则该方法将返回 false。如果 value 是一个不表示 TEnum 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 TEnum 的成员。 如果 value 是一个不对应 TEnum 的命名常数的名称，则该方法将返回 false。如果 value 是一个不表示 TEnum 枚举基础值的整数的字符串表示形式，则此方法将返回基础值是已转换为整型的 value 的枚举成员。如果不希望此行为发生，则请调用 IsDefined 方法以确保整数的特定字符串表示形式实际是 TEnum 的成员。

下面的示例定义 Colors 枚举，调用 TryParse<(Of <(TEnum>)>)(String, Boolean, TEnum%) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。在尝试将命名常数的字符串表现形式转换为其等效的枚举值时，TryParse<(Of <(TEnum>)>)(String, Boolean, TEnum%) 方法将使用不区分大小写的比较。 下面的示例定义 Colors 枚举，调用 TryParse<(Of <(TEnum>)>)(String, Boolean, TEnum%) 方法将字符串转换为其对应的枚举值，并调用 IsDefined 方法以确保特定整数值是 Colors 枚举中的基础值。在尝试将命名常数的字符串表现形式转换为其等效的枚举值时，TryParse<(Of <(TEnum>)>)(String, Boolean, TEnum%) 方法将使用不区分大小写的比较。

<Flags> Enum Colors As Integer
   None = 0
   Red = 1
   Green = 2
   Blue = 4
End Enum

Module Example
   Public Sub Main()
      Dim colorStrings() As String = {"0", "2", "8", "blue", "Blue", "Yellow", "Red, Green"}
      For Each colorString As String In colorStrings
         Dim colorValue As Colors
         If [Enum].TryParse(colorString, True, colorValue) Then
            If [Enum].IsDefined(GetType(Colors), colorValue) Or colorValue.ToString().Contains(",") Then
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString())
            Else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString)
            End If
         Else
            Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString)
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '0' to None.
'       Converted '2' to Green.
'       8 is not an underlying value of the Colors enumeration.
'       Converted 'blue' to Blue.
'       Converted 'Blue' to Blue.
'       Yellow is not a member of the Colors enumeration.
'       Converted 'Red, Green' to Red, Green.

using System;

[Flags] enum Colors { None=0, Red = 1, Green = 2, Blue = 4 };

public class Example
{
   public static void Main()
   {
      string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
      foreach (string colorString in colorStrings)
      {
         Colors colorValue;
         if (Enum.TryParse(colorString, true, out colorValue))
            if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))
               Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
            else
               Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
         else
            Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString);
      }
   }
}
// The example displays the following output:
//       Converted '0' to None.
//       Converted '2' to Green.
//       8 is not an underlying value of the Colors enumeration.
//       Converted 'blue' to Blue.
//       Converted 'Blue' to Blue.
//       Yellow is not a member of the Colors enumeration.
//       Converted 'Red, Green' to Red, Green.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Enum 类
Enum 成员
TryParse 重载
System 命名空间


Environment 类

Environment 类
成员

提供有关当前环境和平台的信息以及操作它们的方法。此类不能被继承。 提供有关当前环境和平台的信息以及操作它们的方法。此类不能被继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public NotInheritable Class Environment
[ComVisibleAttribute(true)]
public static class Environment
[ComVisibleAttribute(true)]
public ref class Environment abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
type Environment =  class end

使用 Environment 类可检索信息，如命令行参数、退出代码、环境变量设置、调用堆栈的内容、自上次系统启动以来的时间，以及公共语言运行时的版本。

下面的示例演示如何显示有关当前环境的信息列表。

' Sample for Environment class summary
Imports System
Imports System.Collections

Class Sample
   Public Shared Sub Main()
      Dim str As [String]
      Dim nl As [String] = Environment.NewLine
      '
      Console.WriteLine()
      Console.WriteLine("-- Environment members --")

      '  Invoke this sample with an arbitrary set of command line arguments.
      Console.WriteLine("CommandLine: {0}", Environment.CommandLine)

      Dim arguments As [String]() = Environment.GetCommandLineArgs()
      Console.WriteLine("GetCommandLineArgs: {0}", [String].Join(", ", arguments))

      '  <-- Keep this information secure! -->
      Console.WriteLine("CurrentDirectory: {0}", Environment.CurrentDirectory)

      Console.WriteLine("ExitCode: {0}", Environment.ExitCode)

      Console.WriteLine("HasShutdownStarted: {0}", Environment.HasShutdownStarted)

      '  <-- Keep this information secure! -->
      Console.WriteLine("MachineName: {0}", Environment.MachineName)

      Console.WriteLine("NewLine: {0}  first line{0}  second line{0}" & _
                        "  third line", Environment.NewLine)

      Console.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString())

      Console.WriteLine("StackTrace: '{0}'", Environment.StackTrace)

      '  <-- Keep this information secure! -->
      Console.WriteLine("SystemDirectory: {0}", Environment.SystemDirectory)

      Console.WriteLine("TickCount: {0}", Environment.TickCount)

      '  <-- Keep this information secure! -->
      Console.WriteLine("UserDomainName: {0}", Environment.UserDomainName)

      Console.WriteLine("UserInteractive: {0}", Environment.UserInteractive)

      '  <-- Keep this information secure! -->
      Console.WriteLine("UserName: {0}", Environment.UserName)

      Console.WriteLine("Version: {0}", Environment.Version.ToString())

      Console.WriteLine("WorkingSet: {0}", Environment.WorkingSet)

      '  No example for Exit(exitCode) because doing so would terminate this example.

      '  <-- Keep this information secure! -->
      Dim query As [String] = "My system drive is %SystemDrive% and my" & _
                              " system root is %SystemRoot%"
      str = Environment.ExpandEnvironmentVariables(query)
      Console.WriteLine("ExpandEnvironmentVariables: {0}  {1}", nl, str)

      Console.WriteLine("GetEnvironmentVariable: {0}  My temporary directory is {1}.", _
                        nl, Environment.GetEnvironmentVariable("TEMP"))

      Console.WriteLine("GetEnvironmentVariables: ")
      Dim environmentVariables As IDictionary = Environment.GetEnvironmentVariables()
      Dim de As DictionaryEntry
      For Each de In environmentVariables
         Console.WriteLine("  {0} = {1}", de.Key, de.Value)
      Next de

      Console.WriteLine("GetFolderPath: {0}", _
              Environment.GetFolderPath(Environment.SpecialFolder.System))

      Dim drives As [String]() = Environment.GetLogicalDrives()
      Console.WriteLine("GetLogicalDrives: {0}", [String].Join(", ", drives))
   End Sub 'Main
End Class 'Sample
'
'This example produces results similar to the following:
'(Any result that is lengthy or reveals information that should remain
'secure has been omitted and marked "!---OMITTED---!".)
'
'C:\>env0 ARBITRARY TEXT
'
'-- Environment members --
'CommandLine: env0 ARBITRARY TEXT
'GetCommandLineArgs: env0, ARBITRARY, TEXT
'CurrentDirectory: C:\Documents and Settings\!---OMITTED---!
'ExitCode: 0
'HasShutdownStarted: False
'MachineName: !---OMITTED---!
'NewLine:
'  first line
'  second line
'  third line
'OSVersion: Microsoft Windows NT 5.1.2600.0
'StackTrace: '   at System.Environment.GetStackTrace(Exception e)
'   at System.Environment.GetStackTrace(Exception e)
'   at System.Environment.get_StackTrace()
'   at Sample.Main()'
'SystemDirectory: C:\WINNT\System32
'TickCount: 17995355
'UserDomainName: !---OMITTED---!
'UserInteractive: True
'UserName: !---OMITTED---!
'Version: !---OMITTED---!
'WorkingSet: 5038080
'ExpandEnvironmentVariables:
'  My system drive is C: and my system root is C:\WINNT
'GetEnvironmentVariable:
'  My temporary directory is C:\DOCUME~1\!---OMITTED---!\LOCALS~1\Temp.
'GetEnvironmentVariables:
'  !---OMITTED---!
'GetFolderPath: C:\WINNT\System32
'GetLogicalDrives: A:\, C:\, D:\
'

// Sample for Environment class summary
using System;
using System.Collections;

class Sample
{
    public static void Main()
    {
    String str;
    String nl = Environment.NewLine;
//
    Console.WriteLine();
    Console.WriteLine("-- Environment members --");

//  Invoke this sample with an arbitrary set of command line arguments.
    Console.WriteLine("CommandLine: {0}", Environment.CommandLine);

    String[] arguments = Environment.GetCommandLineArgs();
    Console.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", arguments));

//  <-- Keep this information secure! -->
    Console.WriteLine("CurrentDirectory: {0}", Environment.CurrentDirectory);

    Console.WriteLine("ExitCode: {0}", Environment.ExitCode);

    Console.WriteLine("HasShutdownStarted: {0}", Environment.HasShutdownStarted);

//  <-- Keep this information secure! -->
    Console.WriteLine("MachineName: {0}", Environment.MachineName);

    Console.WriteLine("NewLine: {0}  first line{0}  second line{0}  third line",
                          Environment.NewLine);

    Console.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString());

    Console.WriteLine("StackTrace: '{0}'", Environment.StackTrace);

//  <-- Keep this information secure! -->
    Console.WriteLine("SystemDirectory: {0}", Environment.SystemDirectory);

    Console.WriteLine("TickCount: {0}", Environment.TickCount);

//  <-- Keep this information secure! -->
    Console.WriteLine("UserDomainName: {0}", Environment.UserDomainName);

    Console.WriteLine("UserInteractive: {0}", Environment.UserInteractive);

//  <-- Keep this information secure! -->
    Console.WriteLine("UserName: {0}", Environment.UserName);

    Console.WriteLine("Version: {0}", Environment.Version.ToString());

    Console.WriteLine("WorkingSet: {0}", Environment.WorkingSet);

//  No example for Exit(exitCode) because doing so would terminate this example.

//  <-- Keep this information secure! -->
    String query = "My system drive is %SystemDrive% and my system root is %SystemRoot%";
    str = Environment.ExpandEnvironmentVariables(query);
    Console.WriteLine("ExpandEnvironmentVariables: {0}  {1}", nl, str);

    Console.WriteLine("GetEnvironmentVariable: {0}  My temporary directory is {1}.", nl,
                           Environment.GetEnvironmentVariable("TEMP"));

    Console.WriteLine("GetEnvironmentVariables: ");
    IDictionary	environmentVariables = Environment.GetEnvironmentVariables();
    foreach (DictionaryEntry de in environmentVariables)
        {
        Console.WriteLine("  {0} = {1}", de.Key, de.Value);
        }

    Console.WriteLine("GetFolderPath: {0}",
                 Environment.GetFolderPath(Environment.SpecialFolder.System));

    String[] drives = Environment.GetLogicalDrives();
    Console.WriteLine("GetLogicalDrives: {0}", String.Join(", ", drives));
    }
}
/*
This example produces results similar to the following:
(Any result that is lengthy or reveals information that should remain
secure has been omitted and marked "!---OMITTED---!".)

C:\>env0 ARBITRARY TEXT

-- Environment members --
CommandLine: env0 ARBITRARY TEXT
GetCommandLineArgs: env0, ARBITRARY, TEXT
CurrentDirectory: C:\Documents and Settings\!---OMITTED---!
ExitCode: 0
HasShutdownStarted: False
MachineName: !---OMITTED---!
NewLine:
  first line
  second line
  third line
OSVersion: Microsoft Windows NT 5.1.2600.0
StackTrace: '   at System.Environment.GetStackTrace(Exception e)
   at System.Environment.GetStackTrace(Exception e)
   at System.Environment.get_StackTrace()
   at Sample.Main()'
SystemDirectory: C:\WINNT\System32
TickCount: 17995355
UserDomainName: !---OMITTED---!
UserInteractive: True
UserName: !---OMITTED---!
Version: !---OMITTED---!
WorkingSet: 5038080
ExpandEnvironmentVariables:
  My system drive is C: and my system root is C:\WINNT
GetEnvironmentVariable:
  My temporary directory is C:\DOCUME~1\!---OMITTED---!\LOCALS~1\Temp.
GetEnvironmentVariables:
  !---OMITTED---!
GetFolderPath: C:\WINNT\System32
GetLogicalDrives: A:\, C:\, D:\

*/

// Sample for Environment class summary
using namespace System;
using namespace System::Collections;
int main()
{
   String^ str;
   String^ nl = Environment::NewLine;

   //
   Console::WriteLine();
   Console::WriteLine( "-- Environment members --" );

   //  Invoke this sample with an arbitrary set of command line arguments.
   Console::WriteLine( "CommandLine: {0}", Environment::CommandLine );
   array<String^>^arguments = Environment::GetCommandLineArgs();
   Console::WriteLine( "GetCommandLineArgs: {0}", String::Join( ", ", arguments ) );

   //  <-- Keep this information secure! -->
   Console::WriteLine( "CurrentDirectory: {0}", Environment::CurrentDirectory );
   Console::WriteLine( "ExitCode: {0}", Environment::ExitCode );
   Console::WriteLine( "HasShutdownStarted: {0}", Environment::HasShutdownStarted );

   //  <-- Keep this information secure! -->
   Console::WriteLine( "MachineName: {0}", Environment::MachineName );
   Console::WriteLine( "NewLine: {0}  first line {0}  second line {0}  third line", Environment::NewLine );
   Console::WriteLine( "OSVersion: {0}", Environment::OSVersion );
   Console::WriteLine( "StackTrace: ' {0}'", Environment::StackTrace );

   //  <-- Keep this information secure! -->
   Console::WriteLine( "SystemDirectory: {0}", Environment::SystemDirectory );
   Console::WriteLine( "TickCount: {0}", Environment::TickCount );

   //  <-- Keep this information secure! -->
   Console::WriteLine( "UserDomainName: {0}", Environment::UserDomainName );
   Console::WriteLine( "UserInteractive: {0}", Environment::UserInteractive );

   //  <-- Keep this information secure! -->
   Console::WriteLine( "UserName: {0}", Environment::UserName );
   Console::WriteLine( "Version: {0}", Environment::Version );
   Console::WriteLine( "WorkingSet: {0}", Environment::WorkingSet );

   //  No example for Exit(exitCode) because doing so would terminate this example.
   //  <-- Keep this information secure! -->
   String^ query = "My system drive is %SystemDrive% and my system root is %SystemRoot%";
   str = Environment::ExpandEnvironmentVariables( query );
   Console::WriteLine( "ExpandEnvironmentVariables: {0} {1}", nl, str );
   Console::WriteLine( "GetEnvironmentVariable: {0}  My temporary directory is {1}.", nl, Environment::GetEnvironmentVariable( "TEMP" ) );
   Console::WriteLine( "GetEnvironmentVariables: " );
   IDictionary^ environmentVariables = Environment::GetEnvironmentVariables();
   IEnumerator^ myEnum = environmentVariables->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry^ de = safe_cast<DictionaryEntry^>(myEnum->Current);
      Console::WriteLine( " {0} = {1}", de->Key, de->Value );
   }

   Console::WriteLine( "GetFolderPath: {0}", Environment::GetFolderPath( Environment::SpecialFolder::System ) );
   array<String^>^drives = Environment::GetLogicalDrives();
   Console::WriteLine( "GetLogicalDrives: {0}", String::Join( ", ", drives ) );
}

/*
This example produces results similar to the following:
(Any result that is lengthy or reveals information that should remain
secure has been omitted and marked S"!---OMITTED---!".)

C:\>env0 ARBITRARY TEXT

-- Environment members --
CommandLine: env0 ARBITRARY TEXT
GetCommandLineArgs: env0, ARBITRARY, TEXT
CurrentDirectory: C:\Documents and Settings\!---OMITTED---!
ExitCode: 0
HasShutdownStarted: False
MachineName: !---OMITTED---!
NewLine:
  first line
  second line
  third line
OSVersion: Microsoft Windows NT 5.1.2600.0
StackTrace: '   at System::Environment::GetStackTrace(Exception e)
   at System::Environment::GetStackTrace(Exception e)
   at System::Environment::get_StackTrace()
   at Sample::Main()'
SystemDirectory: C:\WINNT\System32
TickCount: 17995355
UserDomainName: !---OMITTED---!
UserInteractive: True
UserName: !---OMITTED---!
Version: !---OMITTED---!
WorkingSet: 5038080
ExpandEnvironmentVariables:
  My system drive is C: and my system root is C:\WINNT
GetEnvironmentVariable:
  My temporary directory is C:\DOCUME~1\!---OMITTED---!\LOCALS~1\Temp.
GetEnvironmentVariables:
  !---OMITTED---!
GetFolderPath: C:\WINNT\System32
GetLogicalDrives: A:\, C:\, D:\

*/

System System..::.EnvironmentEnvironment
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Environment 成员
System 命名空间


Environment 成员

Environment 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Environment 类

提供有关当前环境和平台的信息以及操作它们的方法。此类不能被继承。 提供有关当前环境和平台的信息以及操作它们的方法。此类不能被继承。

Environment 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Environment 类
System 命名空间


Environment 方法

Environment 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Environment 类

Environment 类型公开以下成员。

名称 说明
页首

参考

Environment 类
System 命名空间


Environment ..::.Exit 方法

Environment
.
.
::
.
Exit 方法
Environment 类

终止此进程并为基础操作系统提供指定的退出代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SecurityPermissionAttribute(SecurityAction.Demand, Flags := SecurityPermissionFlag.UnmanagedCode)> _
Public Shared Sub Exit ( _
    exitCode As Integer _
)
[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public static void Exit(
    int exitCode
)
[SecurityPermissionAttribute(SecurityAction::Demand, Flags = SecurityPermissionFlag::UnmanagedCode)]
public:
static void Exit(
    int exitCode
)
[<SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)>]
static member Exit :
        exitCode:int -> unit

参数

exitCode
类型： System Int32
提供给操作系统的退出代码。
异常 | 条件
SecurityException | 调用方没有足够的安全权限来执行此函数。

下面的示例说明如何使用 Exit 方法终止程序执行并向操作系统返回退出代码。

' Example for the Environment.Exit( Integer ) method.
Imports System

Module ExitTest

    Sub Main()
        Console.WriteLine( _
            "If this program is invoked with [{0}] " & _
            "from the command prompt,", _
            Environment.CommandLine)

        Dim args As String() = Environment.GetCommandLineArgs()

        ' args[0] is the program name, and args[1] is the first argument.
        ' Test for a command-line argument.
        If args.Length > 1 Then

            ' Parse the argument. If successful, exit with the parsed code.
            Try
                Dim exitCode As Integer = Integer.Parse(args(1))

                Console.WriteLine("it exits with code: 0x{0:X8}.", exitCode)
                Environment.Exit(exitCode)

            ' If the parse fails, you fall out of the program.
            Catch
            End Try
        End If
        Console.WriteLine("it exits by falling through.")
    End Sub 'Main
End Module 'ExitTest

' If this program is invoked with [EnvExit -2147480000] from the command prompt,
' it exits with code: 0x80000E40.

// Example for the Environment.Exit( int ) method.
using System;

class ExitTest
{
    public static void Main( )
    {
        Console.WriteLine(
            "If this program is invoked with [{0}] " +
            "from the command prompt,",
            Environment.CommandLine );

        String[ ]   args = Environment.GetCommandLineArgs( );

        // args[0] is the program name and, args[1] is the first argument.
        // Test for a command-line argument.
        if( args.Length > 1 )
        {

            // Parse the argument. If successful, exit with the parsed code.
            try
            {
                int     exitCode = int.Parse( args[1] );

                Console.WriteLine( "it exits with code: 0x{0:X8}.", exitCode );
                Environment.Exit( exitCode );
            }
            // If the parse fails, you fall out of the program.
            catch
            { }
        }
        Console.WriteLine( "it exits by falling through." );
    }
}

/*
If this program is invoked with [EnvExit -2147480000] from the command prompt,
it exits with code: 0x80000E40.
*/

// Example for the Environment::Exit( int ) method.
using namespace System;
int main()
{
   Console::WriteLine( "If this program is invoked with [{0}] "
   "from the command prompt,", Environment::CommandLine );
   array<String^>^args = Environment::GetCommandLineArgs();

   // args[0] is the program name, and args[1] is the first argument.
   // Test for a command-line argument.
   if ( args->Length > 1 )
   {

      // Parse the argument. If successful, exit with the parsed code.
      try
      {
         int exitCode = Int32::Parse( args[ 1 ] );
         Console::WriteLine( "it exits with code: 0x{0:X8}.", exitCode );
         Environment::Exit( exitCode );
      }
      // If the parse fails, you fall out of the program.
      catch ( Exception^ e )
      {
      }

   }

   Console::WriteLine( "it exits by falling through." );
}

/*
If this program is invoked with [EnvExit -2147480000] from the command prompt,
it exits with code: 0x80000E40.
*/
  • SecurityPermission

    允许调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 允许调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.ExpandEnvironmentVariables 方法

Environment
.
.
::
.
ExpandEnvironmentVariables 方法
Environment 类

将嵌入到指定字符串中的每个环境变量的名称替换为该变量的值的等效字符串，然后返回结果字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ExpandEnvironmentVariables ( _
    name As String _
) As String
public static string ExpandEnvironmentVariables(
    string name
)
public:
static String^ ExpandEnvironmentVariables(
    String^ name
)
static member ExpandEnvironmentVariables :
        name:string -> string

参数

name
类型： System String
包含零个或多个环境变量名的字符串。每个环境变量都用百分号 (%) 引起来。 包含零个或多个环境变量名的字符串。每个环境变量都用百分号 (%) 引起来。

返回值

类型： System String
一个字符串，其中的每个环境变量均被替换为该变量的值。
异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

COM 互操作用于从操作系统中检索环境变量。如果由于 COM 错误不能检索环境变量，则使用解释失败原因的 HRESULT 生成几个可能的异常之一；即异常取决于 HRESULT。有关如何处理 HRESULT 的更多信息，请参见 Marshal..::.ThrowExceptionForHR 方法的“备注”部分。 COM 互操作用于从操作系统中检索环境变量。如果由于 COM 错误不能检索环境变量，则使用解释失败原因的 HRESULT 生成几个可能的异常之一；即异常取决于 HRESULT。有关如何处理 HRESULT 的更多信息，请参见 Marshal..::.ThrowExceptionForHR 方法的“备注”部分。 COM 互操作用于从操作系统中检索环境变量。如果由于 COM 错误不能检索环境变量，则使用解释失败原因的 HRESULT 生成几个可能的异常之一；即异常取决于 HRESULT。有关如何处理 HRESULT 的更多信息，请参见 Marshal..::.ThrowExceptionForHR 方法的“备注”部分。

只有经过设置的环境变量才会被替换。例如，假设 name 是“MyENV = %MyENV%”。如果环境变量 MyENV 设置为 42，则此方法返回“MyENV = 42”。如果未设置 MyENV，则不发生任何更改；此方法将返回“MyENV = %MyENV%”。 只有经过设置的环境变量才会被替换。例如，假设 name 是“MyENV = %MyENV%”。如果环境变量 MyENV 设置为 42，则此方法返回“MyENV = 42”。如果未设置 MyENV，则不发生任何更改；此方法将返回“MyENV = %MyENV%”。 只有经过设置的环境变量才会被替换。例如，假设 name 是“MyENV = %MyENV%”。如果环境变量 MyENV 设置为 42，则此方法返回“MyENV = 42”。如果未设置 MyENV，则不发生任何更改；此方法将返回“MyENV = %MyENV%”。 只有经过设置的环境变量才会被替换。例如，假设 name 是“MyENV = %MyENV%”。如果环境变量 MyENV 设置为 42，则此方法返回“MyENV = 42”。如果未设置 MyENV，则不发生任何更改；此方法将返回“MyENV = %MyENV%”。

返回值的大小在 Windows NT 4.0 或更早版本以及 Windows 2000 和更新版本中限制为 32K。在 Windows 98 和 Windows Me 中没有大小限制。 返回值的大小在 Windows NT 4.0 或更早版本以及 Windows 2000 和更新版本中限制为 32K。在 Windows 98 和 Windows Me 中没有大小限制。

下面的示例显示如何获得系统驱动器和系统根变量。

' Sample for the Environment.ExpandEnvironmentVariables method
Imports System

Class Sample
   Public Shared Sub Main()
      Dim str As [String]
      Dim nl As [String] = Environment.NewLine

      Console.WriteLine()
      '  <-- Keep this information secure! -->
      Dim query As [String] = "My system drive is %SystemDrive% and" & _
                              "my system root is %SystemRoot%"
      str = Environment.ExpandEnvironmentVariables(query)
      Console.WriteLine("ExpandEnvironmentVariables: {0}  {1}", nl, str)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'ExpandEnvironmentVariables:
'  My system drive is C: and my system root is C:\WINNT
'

// Sample for the Environment.ExpandEnvironmentVariables method
using System;

class Sample
{
    public static void Main()
    {
    String str;
    String nl = Environment.NewLine;

    Console.WriteLine();
//  <-- Keep this information secure! -->
    String query = "My system drive is %SystemDrive% and my system root is %SystemRoot%";
    str = Environment.ExpandEnvironmentVariables(query);
    Console.WriteLine("ExpandEnvironmentVariables: {0}  {1}", nl, str);
    }
}
/*
This example produces the following results:

ExpandEnvironmentVariables:
  My system drive is C: and my system root is C:\WINNT
*/

// Sample for the Environment::ExpandEnvironmentVariables method
using namespace System;
int main()
{
   String^ str;
   String^ nl = Environment::NewLine;
   Console::WriteLine();

   //  <-- Keep this information secure! -->
   String^ query = "My system drive is %SystemDrive% and my system root is %SystemRoot%";
   str = Environment::ExpandEnvironmentVariables( query );
   Console::WriteLine( "ExpandEnvironmentVariables: {0} {1}", nl, str );
}

/*
This example produces the following results:

ExpandEnvironmentVariables:
My system drive is C: and my system root is C:\WINNT
*/
  • EnvironmentPermission

    用于访问 name 中的环境变量。关联的枚举：EnvironmentPermissionAccess..::.Read 用于访问 name 中的环境变量。关联的枚举：EnvironmentPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.FailFast 方法

Environment
.
.
::
.
FailFast 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Environment 类

向 Windows 的应用程序事件日志写入消息后立即终止进程，然后在发往 Microsoft 的错误报告中加入该消息和可选的异常信息。

名称 说明
页首

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.FailFast 方法 (String)

Environment
.
.
::
.
FailFast 方法 (String)
Environment 类

向 Windows 的应用程序事件日志写入消息后立即终止进程，然后在发往 Microsoft 的错误报告中加入该消息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub FailFast ( _
    message As String _
)
public static void FailFast(
    string message
)
public:
static void FailFast(
    String^ message
)
static member FailFast :
        message:string -> unit

参数

message
类型： System String
解释进程终止原因的消息，或者如果未提供解释则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法终止进程而不需要运行任何活动的 try/finally 块或终结器；但是，它运行 CriticalFinalizerObject 对象。

FailFast 方法将 message 字符串写入 Windows 应用程序事件日志，创建应用程序的转储，然后终止当前进程。message 字符串也包含在报告给 Microsoft 的错误中。 FailFast 方法将 message 字符串写入 Windows 应用程序事件日志，创建应用程序的转储，然后终止当前进程。message 字符串也包含在报告给 Microsoft 的错误中。

如果应用程序状态为损坏且无法修复，并且执行应用程序的try/finally块和终结器将损坏程序资源，请使用 FailFast 方法而不是 Exit 方法终止应用程序。

下面的示例向 Windows Application 事件日志写入日志项并终止当前进程。

' This code example demonstrates the Environment.FailFast()
' method.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim causeOfFailure As String = "A castrophic failure has occured."

        ' Assume your application has failed catastrophically and must
        ' terminate immediately. The try-finally block is not executed
        ' and is included only to demonstrate that instructions within
        ' try-catch blocks and finalizers are not performed.

        Try
            Environment.FailFast(causeOfFailure)
        Finally
            Console.WriteLine("This finally block will not be executed.")
        End Try

    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'(No output is produced because the application is terminated. However,
'an entry is made in the Windows Application event log, and the log
'entry contains the text from the causeOfFailure variable.)
'

// This code example demonstrates the Environment.FailFast()
// method.

using System;

class Sample
{
    public static void Main()
    {
    string causeOfFailure = "A castrophic failure has occured.";

// Assume your application has failed catastrophically and must
// terminate immediately. The try-finally block is not executed
// and is included only to demonstrate that instructions within
// try-catch blocks and finalizers are not performed.

    try
        {
        Environment.FailFast(causeOfFailure);
        }
    finally
        {
        Console.WriteLine("This finally block will not be executed.");
        }
    }
}

/*
This code example produces the following results:

(No output is produced because the application is terminated. However,
an entry is made in the Windows Application event log, and the log
entry contains the text from the causeOfFailure variable.)

*/
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
FailFast 重载
System 命名空间


Environment ..::.FailFast 方法 (String, Exception)

Environment
.
.
::
.
FailFast 方法 (String, Exception)
Environment 类

向 Windows 的应用程序事件日志写入消息后立即终止进程，然后在发往 Microsoft 的错误报告中加入该消息和异常信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub FailFast ( _
    message As String, _
    exception As Exception _
)
public static void FailFast(
    string message,
    Exception exception
)
public:
static void FailFast(
    String^ message,
    Exception^ exception
)
static member FailFast :
        message:string *
        exception:Exception -> unit

参数

message
类型： System String
解释进程终止原因的消息，或者如果未提供解释则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
exception
类型： System Exception
一个异常，表示导致终止的错误。通常这是 catch 块中的异常。 一个异常，表示导致终止的错误。通常这是 catch 块中的异常。

此方法终止进程而不需要运行任何活动的 try/finally 块或终结器；但是，它运行 CriticalFinalizerObject 对象。

FailFast 方法将 message 字符串写入 Windows 应用程序事件日志，创建应用程序的转储，然后终止当前进程。

对 Microsoft 的错误报告包括 message 和 exception 信息，其提供用于错误分类的详细信息。尽管 exception 由于进程终止而未处理，仍会获得引发异常的上下文信息。 对 Microsoft 的错误报告包括 message 和 exception 信息，其提供用于错误分类的详细信息。尽管 exception 由于进程终止而未处理，仍会获得引发异常的上下文信息。

如果 exception 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者如果 exception 未引发，该方法的操作方式将与 FailFast(String) 方法重载相同。

如果应用程序状态为损坏且无法修复，并且执行应用程序的try/finally块和终结器将损坏程序资源，请使用 FailFast 方法而不是 Exit 方法终止应用程序。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
FailFast 重载
System 命名空间


Environment ..::.GetCommandLineArgs 方法

Environment
.
.
::
.
GetCommandLineArgs 方法
Environment 类

返回包含当前进程的命令行参数的字符串数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetCommandLineArgs As String()
public static string[] GetCommandLineArgs()
public:
static array<String^>^ GetCommandLineArgs()
static member GetCommandLineArgs : unit -> string[]

返回值

类型：
array<
System String
>
[]
()
[]

字符串数组，其中的每个元素都包含一个命令行参数。第一个元素是可执行文件名，后面的零个或多个元素包含其余的命令行参数。 字符串数组，其中的每个元素都包含一个命令行参数。第一个元素是可执行文件名，后面的零个或多个元素包含其余的命令行参数。
异常 | 条件
NotSupportedException | 系统不支持命令行参数。

数组中的第一个元素包含执行程序的文件名。如果该文件名不可用，则第一个元素等于 String..::.Empty。其他元素包含在命令行输入的任何附加标记。
数组中的第一个元素包含执行程序的文件名。如果该文件名不可用，则第一个元素等于 String..::.Empty。其他元素包含在命令行输入的任何附加标记。
数组中的第一个元素包含执行程序的文件名。如果该文件名不可用，则第一个元素等于 String..::.Empty。其他元素包含在命令行输入的任何附加标记。

程序文件名可以（但不是必须）包含路径信息。

命令行参数由空格分隔。可以使用双引号 (") 在参数中包含空格。但是，单引号 (') 不提供此功能。 命令行参数由空格分隔。可以使用双引号 (") 在参数中包含空格。但是，单引号 (') 不提供此功能。 命令行参数由空格分隔。可以使用双引号 (") 在参数中包含空格。但是，单引号 (') 不提供此功能。

如果两个或偶数个反斜杠后跟双引号，则前面的每个反斜杠对被一个反斜杠替代，并且双引号被删除。如果奇数个（包括仅仅一个）反斜杠后跟双引号，则前面的每个反斜杠对被一个反斜杠替代，其余的反斜杠被删除；但在此情况下，双引号不会被删除。 如果两个或偶数个反斜杠后跟双引号，则前面的每个反斜杠对被一个反斜杠替代，并且双引号被删除。如果奇数个（包括仅仅一个）反斜杠后跟双引号，则前面的每个反斜杠对被一个反斜杠替代，其余的反斜杠被删除；但在此情况下，双引号不会被删除。

下表显示如何分隔命令行参数，并假定 MyApp 为当前执行的应用程序。

命令行上的输入内容 | 生成的命令行参数
MyApp alpha beta | MyApp, alpha, beta
MyApp "alpha with spaces" "beta with spaces" | MyApp, alpha with spaces, beta with spaces
MyApp 'alpha with spaces' beta | MyApp, 'alpha, with, spaces', beta
MyApp \\\alpha \\\\"beta | MyApp, \\\alpha, \\bet
MyApp \\\\\"alpha \"beta | MyApp, \\"alpha, "beta

若要获取作为单个字符串的命令行，请使用 CommandLine 属性。

Windows NT 4.0, Windows 2000 平台说明： Windows NT 4.0, Windows 2000 平台说明：可执行文件的名称不包含该路径。

Windows 98, Windows Millennium Edition 平台说明： Windows 98, Windows Millennium Edition 平台说明：可执行文件的名称包含该路径。长文件名（非 8.3 名称）可以缩短到它们的 8.3 表示形式。 Windows 98, Windows Millennium Edition 平台说明：可执行文件的名称包含该路径。长文件名（非 8.3 名称）可以缩短到它们的 8.3 表示形式。

下面的示例显示应用程序的命令行参数。

' Sample for the Environment.GetCommandLineArgs method
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      '  Invoke this sample with an arbitrary set of command line arguments.
      Dim arguments As [String]() = Environment.GetCommandLineArgs()
      Console.WriteLine("GetCommandLineArgs: {0}", [String].Join(", ", arguments))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'C:\>GetCommandLineArgs ARBITRARY TEXT
'
'GetCommandLineArgs: GetCommandLineArgs, ARBITRARY, TEXT
'

// Sample for the Environment.GetCommandLineArgs method
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
//  Invoke this sample with an arbitrary set of command line arguments.
    String[] arguments = Environment.GetCommandLineArgs();
    Console.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", arguments));
    }
}
/*
This example produces the following results:

C:\>GetCommandLineArgs ARBITRARY TEXT

GetCommandLineArgs: GetCommandLineArgs, ARBITRARY, TEXT
*/

// Sample for the Environment::GetCommandLineArgs method
using namespace System;
int main()
{
   Console::WriteLine();

   //  Invoke this sample with an arbitrary set of command line arguments.
   array<String^>^arguments = Environment::GetCommandLineArgs();
   Console::WriteLine( "GetCommandLineArgs: {0}", String::Join( ", ", arguments ) );
}

/*
This example produces the following results:

C:\>GetCommandLineArgs ARBITRARY TEXT

GetCommandLineArgs: GetCommandLineArgs, ARBITRARY, TEXT
*/
  • EnvironmentPermission

    用于对 PATH 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read 用于对 PATH 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间
CommandLine


Environment ..::.GetEnvironmentVariable 方法

Environment
.
.
::
.
GetEnvironmentVariable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Environment 类

检索环境变量的值。

名称 说明
页首

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.GetEnvironmentVariable 方法 (String)

Environment
.
.
::
.
GetEnvironmentVariable 方法 (String)
Environment 类

从当前进程检索环境变量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetEnvironmentVariable ( _
    variable As String _
) As String
public static string GetEnvironmentVariable(
    string variable
)
public:
static String^ GetEnvironmentVariable(
    String^ variable
)
static member GetEnvironmentVariable :
        variable:string -> string

参数

variable
类型： System String
环境变量名。

返回值

类型： System String
variable 指定的环境变量的值；或者如果找不到环境变量，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | variable 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SecurityException | 调用方不具有执行此操作所需的权限。

环境变量名不区分大小写。

下面的示例说明 GetEnvironmentVariable 方法。

' Change the directory to %WINDIR%
Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir")
Dim info As New DirectoryInfo(".")
Console.WriteLine(("Directory Info:   " + info.FullName))

        // Change the directory to %WINDIR%
        Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir");
        DirectoryInfo info = new DirectoryInfo(".");
            lock(info)
            {
            Console.WriteLine("Directory Info:   "+info.FullName);
            }

// Change the directory to %WINDIR%
Environment::CurrentDirectory = Environment::GetEnvironmentVariable( "windir" );
DirectoryInfo^ info = gcnew DirectoryInfo( "." );
System::Threading::Monitor::Enter( info );
try
{
   Console::WriteLine( "Directory Info:   {0}", info->FullName );
}
finally
{
   System::Threading::Monitor::Exit( info );
}
  • EnvironmentPermission

    用于读取 variable 的值。关联的枚举：EnvironmentPermissionAccess..::.Read 用于读取 variable 的值。关联的枚举：EnvironmentPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
GetEnvironmentVariable 重载
System 命名空间
GetEnvironmentVariables
SetEnvironmentVariable


Environment ..::.GetEnvironmentVariable 方法 (String, EnvironmentVariableTarget)

Environment
.
.
::
.
GetEnvironmentVariable 方法 (String, EnvironmentVariableTarget)
Environment 类

从当前进程或者从当前用户或本地计算机的 Windows 操作系统注册表项检索环境变量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetEnvironmentVariable ( _
    variable As String, _
    target As EnvironmentVariableTarget _
) As String
public static string GetEnvironmentVariable(
    string variable,
    EnvironmentVariableTarget target
)
public:
static String^ GetEnvironmentVariable(
    String^ variable,
    EnvironmentVariableTarget target
)
static member GetEnvironmentVariable :
        variable:string *
        target:EnvironmentVariableTarget -> string

参数

variable
类型： System String
环境变量名。
target
类型： System EnvironmentVariableTarget
EnvironmentVariableTarget 值之一。

返回值

类型： System String
variable 和 target 参数指定的环境变量的值；或者如果找不到环境变量，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | variable 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | target 是 User 或 Machine，当前操作系统为 Windows 95、Windows 98 或 Windows Me。
ArgumentException | target 不是有效的 EnvironmentVariableTarget 值。
SecurityException | 调用方不具有执行此操作所需的权限。

target 参数指定是从当前进程还是从当前用户或本地计算机的 Windows 操作系统注册表项检索环境变量。

环境变量名不区分大小写。

下面的示例创建 Process、User 和 Machine 目标的环境变量，并检查操作系统注册表是否包含 User 和 Machine 环境变量，然后删除环境变量。

' This example demonstrates the
'     Environment.GetEnvironmentVariable,
'     Environment.SetEnvironmentVariable, and
'     Environment.GetEnvironmentVariables overloaded methods.
Imports System
Imports System.Collections
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Class Sample
   '-------------------------------------------------------------------------------------
   ' Globals:
   '-------------------------------------------------------------------------------------
   Protected Shared fmtNameValue As String = "  {0} {1}."
   Protected Shared myVarSuffix As String = "_GETSET_ENVAR_SAMPLE"

   ' Four relatively unique environment variable names.
   Protected Shared myVarA As String = "A" & myVarSuffix ' default process
   Protected Shared myVarB As String = "B" & myVarSuffix ' Current Process
   Protected Shared myVarC As String = "C" & myVarSuffix ' Current User
   Protected Shared myVarD As String = "D" & myVarSuffix ' Local Machine
   '=====================================================================================
   ' EachVariable:
   ' Test whether a specific environment variable exists in a target.
   ' This section demonstrates Environment.GetEnvironmentVariable.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub EachVariable(var As String, tgt As EnvironmentVariableTarget)
      Dim str As String
      '
      If 0 = tgt Then ' Zero means use the default target.
         str = Environment.GetEnvironmentVariable(var)
      Else
         str = Environment.GetEnvironmentVariable(var, tgt)
      End If
      Console.WriteLine(fmtNameValue, var, IIf(String.IsNullOrEmpty(str), _
                                              "doesn't exist", str))
   End Sub 'EachVariable

   '-------------------------------------------------------------------------------------
   ' CheckEachVariable:
   ' Uses EachVariable to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckEachVariable()
      Console.WriteLine("Process:")
      EachVariable(myVarA, 0) ' Check the default target (current process)
      EachVariable(myVarB, EnvironmentVariableTarget.Process)
      EachVariable(myVarC, EnvironmentVariableTarget.Process)
      EachVariable(myVarD, EnvironmentVariableTarget.Process)
      Console.WriteLine()

      Console.WriteLine("User:")
      EachVariable(myVarA, EnvironmentVariableTarget.User)
      EachVariable(myVarB, EnvironmentVariableTarget.User)
      EachVariable(myVarC, EnvironmentVariableTarget.User)
      EachVariable(myVarD, EnvironmentVariableTarget.User)
      Console.WriteLine()

      Console.WriteLine("Machine:")
      EachVariable(myVarA, EnvironmentVariableTarget.Machine)
      EachVariable(myVarB, EnvironmentVariableTarget.Machine)
      EachVariable(myVarC, EnvironmentVariableTarget.Machine)
      EachVariable(myVarD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
   End Sub 'CheckEachVariable

   '=====================================================================================
   ' AllVariables: CheckAllVariables helper function.
   ' This section demonstrates Environment.GetEnvironmentVariables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub AllVariables(tgt As EnvironmentVariableTarget)
      Dim value As String
      Dim key As String

      Dim de As DictionaryEntry
      For Each de In Environment.GetEnvironmentVariables(tgt)
         key = CStr(de.Key)
         value = CStr(de.Value)
         If key.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, key, value)
         End If
      Next de
      Console.WriteLine()
   End Sub 'AllVariables

   '=====================================================================================
   ' CheckAllVariables:
   ' Uses AllVariables to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckAllVariables()
      Console.WriteLine("Process:")
      AllVariables(EnvironmentVariableTarget.Process)

      Console.WriteLine("User:")
      AllVariables(EnvironmentVariableTarget.User)

      Console.WriteLine("Machine:")
      AllVariables(EnvironmentVariableTarget.Machine)
   End Sub 'CheckAllVariables

   '=====================================================================================
   ' ChkReg: CheckRegistry helper function.
   ' This function filters out irrelevant environment variables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub ChkReg(rk As RegistryKey)
      Dim exists As Boolean = False
      Dim registryNone As String = "  Environment variable doesn't exist."

      Dim s As String
      For Each s In rk.GetValueNames()
         If s.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, s, CStr(rk.GetValue(s)))
            exists = True
         End If
      Next s
      If exists = False Then
         Console.WriteLine(registryNone)
      End If
      Console.WriteLine()
   End Sub 'ChkReg

   '-------------------------------------------------------------------------------------
   ' CheckRegistry:
   ' Uses ChkReg to display the User and Machine environment variables in the registry.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckRegistry()
      Dim subkeyU As String = "Environment"
      Dim subkeyM As String = "System\CurrentControlSet\Control\Session Manager\Environment"
      Dim fmtSubkey As String = """{0}"" key:"

      Console.WriteLine(fmtSubkey, subkeyU)
      ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU))

      Console.WriteLine(fmtSubkey, subkeyM)
      ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM))
   End Sub 'CheckRegistry

   '=====================================================================================
   ' Main:
   '-------------------------------------------------------------------------------------
   Public Shared Sub Main()
      '-------------------------------------------------------------------------------------
      ' Environment variable values
      '-------------------------------------------------------------------------------------
      Dim existsA As String = "exists in the default target (Process)"
      Dim existsB As String = "exists in Process"
      Dim existsC As String = "exists in User"
      Dim existsD As String = "exists in Machine"
      '-------------------------------------------------------------------------------------
      ' Messages:
      '-------------------------------------------------------------------------------------
      Dim msg1  As String = "Step 1:" & vbCrLf & _
                            "  Check whether the environment variables already exist in " _
                 & vbCrLf & "  the various targets..." & vbCrLf
      Dim msg2  As String = "Step 2:" & vbCrLf & _
                            "  Set the environment variable for each target..." & vbCrLf
      Dim msg31 As String = "Step 3, part 1:" & vbCrLf & _
                            "  Display the environment variables in each target..." & vbCrLf
      Dim msg32 As String = "Step 3, part 2:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were created in the Windows operating system registry..." _
                 & vbCrLf
      Dim msg41 As String = "Step 4, part 1:" & vbCrLf & _
                            "  Delete the environment variables created for this sample..." _
                 & vbCrLf
      Dim msg42 As String = "Step 4, part 2:" & vbCrLf & _
                            "  Check whether the environment variables were deleted " _
                 & vbCrLf & "  in each target..." & vbCrLf
      Dim msg43 As String = "Step 4, part 3:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were deleted from the Windows operating system registry..." _
                 & vbCrLf
      Dim fmt2x As String = "  {0,9}: Set {1} = ""{2}"""
      '-------------------------------------------------------------------------------------
      ' Step 1:
      ' Check whether the sample environment variables already exist.
      ' WARNING: These variables will be deleted at the end of this sample.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg1)
      CheckEachVariable()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 2:
      ' Set the environment variable for each target.
      ' This section demonstrates Environment.SetEnvironmentVariable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg2)
      ' Set the environment variable for the default target (the current process).
      Console.WriteLine(fmt2x, "(default)", myVarA, existsA)
      Environment.SetEnvironmentVariable(myVarA, existsA)

      ' Set the environment variable for the the current process.
      Console.WriteLine(fmt2x, "Process", myVarB, existsB)
      Environment.SetEnvironmentVariable(myVarB, existsB, EnvironmentVariableTarget.Process)

      ' Set the environment variable for the the current user.
      Console.WriteLine(fmt2x, "User", myVarC, existsC)
      Environment.SetEnvironmentVariable(myVarC, existsC, EnvironmentVariableTarget.User)

      ' Set the environment variable for the the local machine.
      Console.WriteLine(fmt2x, "Machine", myVarD, existsD)
      Environment.SetEnvironmentVariable(myVarD, existsD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 1:
      ' Display the environment variables in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg31)
      CheckAllVariables()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 2:
      ' Check whether the User and Machine environment variables were created in the Windows
      ' operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg32)
      CheckRegistry()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 1:
      ' Delete the environment variables created for this sample.
      ' This section demonstrates using Environment.SetEnvironmentVariable to delete an
      ' environment variable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg41)
      Environment.SetEnvironmentVariable(myVarA, Nothing)
      Environment.SetEnvironmentVariable(myVarB, Nothing, EnvironmentVariableTarget.Process)
      Environment.SetEnvironmentVariable(myVarC, Nothing, EnvironmentVariableTarget.User)
      Environment.SetEnvironmentVariable(myVarD, Nothing, EnvironmentVariableTarget.Machine)
      '-------------------------------------------------------------------------------------
      ' Step 4, part 2:
      ' Check whether the environment variables were deleted in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg42)
      CheckEachVariable()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 3:
      ' Check whether the User and Machine environment variables were deleted from the
      ' Windows operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg43)
      CheckRegistry()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Step 1:
'  Check whether the environment variables already exist in
'  the various targets...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'
'Step 2:
'  Set the environment variable for each target...
'
'  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
'    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
'       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
'    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"
'
'Step 3, part 1:
'  Display the environment variables in each target...
'
'Process:
'  B_GETSET_ENVAR_SAMPLE exists in Process.
'  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).
'
'User:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'Machine:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 3, part 2:
'  Check whether the User and Machine environment variables
'  were created in the Windows operating system registry...
'
'"Environment" key:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 4, part 1:
'  Delete the environment variables created for this sample...
'
'Step 4, part 2:
'  Check whether the environment variables were deleted
'  in each target...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Step 4, part 3:
'  Check whether the User and Machine environment variables
'  were deleted from the Windows operating system registry...
'
'"Environment" key:
'  Environment variable doesn't exist.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  Environment variable doesn't exist.
'

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using System;
using System.Collections;
using Microsoft.Win32;

class Sample
{
//-------------------------------------------------------------------------------------
// Globals:
//-------------------------------------------------------------------------------------
    protected static string fmtNameValue = "  {0} {1}.";
    protected static string myVarSuffix = "_GETSET_ENVAR_SAMPLE";

// Four relatively unique environment variable names.
    protected static string myVarA = "A" + myVarSuffix; // default process
    protected static string myVarB = "B" + myVarSuffix; // Current Process
    protected static string myVarC = "C" + myVarSuffix; // Current User
    protected static string myVarD = "D" + myVarSuffix; // Local Machine
//=====================================================================================
// EachVariable:
// Test whether a specific environment variable exists in a target.
// This section demonstrates Environment.GetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    protected static void EachVariable(string var, EnvironmentVariableTarget tgt)
    {
    string str;
    //
    if (0 == tgt)          // Zero means use the default target.
        str = Environment.GetEnvironmentVariable(var);
    else
        str = Environment.GetEnvironmentVariable(var, tgt);
    Console.WriteLine(fmtNameValue,
                      var, (String.IsNullOrEmpty(str) ? "doesn't exist" : str));
    }
//-------------------------------------------------------------------------------------
// CheckEachVariable:
// Uses EachVariable to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckEachVariable()
    {
    Console.WriteLine("Process:");
    EachVariable(myVarA, 0);  // Check the default target (current process)
    EachVariable(myVarB, EnvironmentVariableTarget.Process);
    EachVariable(myVarC, EnvironmentVariableTarget.Process);
    EachVariable(myVarD, EnvironmentVariableTarget.Process);
    Console.WriteLine();

    Console.WriteLine("User:");
    EachVariable(myVarA, EnvironmentVariableTarget.User);
    EachVariable(myVarB, EnvironmentVariableTarget.User);
    EachVariable(myVarC, EnvironmentVariableTarget.User);
    EachVariable(myVarD, EnvironmentVariableTarget.User);
    Console.WriteLine();

    Console.WriteLine("Machine:");
    EachVariable(myVarA, EnvironmentVariableTarget.Machine);
    EachVariable(myVarB, EnvironmentVariableTarget.Machine);
    EachVariable(myVarC, EnvironmentVariableTarget.Machine);
    EachVariable(myVarD, EnvironmentVariableTarget.Machine);
    Console.WriteLine();
    }
//=====================================================================================
// AllVariables: CheckAllVariables helper function.
// This section demonstrates Environment.GetEnvironmentVariables.
//-------------------------------------------------------------------------------------
    private static void AllVariables(EnvironmentVariableTarget tgt)
    {
    string value;
    string key;

    foreach(DictionaryEntry de in Environment.GetEnvironmentVariables(tgt))
        {
        key   = (string)de.Key;
        value = (string)de.Value;
        if (key.Contains(myVarSuffix))
            Console.WriteLine(fmtNameValue, key, value);
        }
    Console.WriteLine();
    }
//=====================================================================================
// CheckAllVariables:
// Uses AllVariables to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckAllVariables()
    {
    Console.WriteLine("Process:");
    AllVariables(EnvironmentVariableTarget.Process);

    Console.WriteLine("User:");
    AllVariables(EnvironmentVariableTarget.User);

    Console.WriteLine("Machine:");
    AllVariables(EnvironmentVariableTarget.Machine);
    }
//=====================================================================================
// ChkReg: CheckRegistry helper function.
// This function filters out irrelevant environment variables.
//-------------------------------------------------------------------------------------
    private static void ChkReg(RegistryKey rk)
    {
    bool exists = false;
    string registryNone = "  Environment variable doesn't exist.";

    foreach (string s in rk.GetValueNames())
        {
        if (s.Contains(myVarSuffix))
            {
            Console.WriteLine(fmtNameValue, s, (string)rk.GetValue(s));
            exists = true;
            }
        }
    if (exists == false)
        Console.WriteLine(registryNone);
    Console.WriteLine();
    }
//-------------------------------------------------------------------------------------
// CheckRegistry:
// Uses ChkReg to display the User and Machine environment variables in the registry.
//-------------------------------------------------------------------------------------
    protected static void CheckRegistry()
    {
    string subkeyU = @"Environment";
    string subkeyM = @"System\CurrentControlSet\Control\Session Manager\Environment";
    string fmtSubkey = "\"{0}\" key:";

    Console.WriteLine(fmtSubkey, subkeyU);
    ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU));

    Console.WriteLine(fmtSubkey, subkeyM);
    ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM));
    }
//=====================================================================================
// Main:
//-------------------------------------------------------------------------------------
    public static void Main()
    {
//-------------------------------------------------------------------------------------
// Environment variable values
//-------------------------------------------------------------------------------------
    string existsA = "exists in the default target (Process)";
    string existsB = "exists in Process";
    string existsC = "exists in User";
    string existsD = "exists in Machine";
//-------------------------------------------------------------------------------------
// Messages:
//-------------------------------------------------------------------------------------
    string msg1  = "Step 1:\n" +
                       "  Check whether the environment variables already exist in \n" +
                       "  the various targets...\n";
    string msg2  = "Step 2:\n" +
                       "  Set the environment variable for each target...\n";
    string msg31 = "Step 3, part 1:\n" +
                       "  Display the environment variables in each target...\n";
    string msg32 = "Step 3, part 2:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were created in the Windows operating system registry...\n";
    string msg41 = "Step 4, part 1:\n" +
                       "  Delete the environment variables created for this sample...\n";
    string msg42 = "Step 4, part 2:\n" +
                       "  Check whether the environment variables were deleted \n" +
                       "  in each target...\n";
    string msg43 = "Step 4, part 3:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were deleted from the Windows operating system registry...\n";
    string fmt2x   = "  {0,9}: Set {1} = \"{2}\"";
//-------------------------------------------------------------------------------------
// Step 1:
// Check whether the sample environment variables already exist.
// WARNING: These variables will be deleted at the end of this sample.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg1);
    CheckEachVariable();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 2:
// Set the environment variable for each target.
// This section demonstrates Environment.SetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg2);
// Set the environment variable for the default target (the current process).
    Console.WriteLine(fmt2x, "(default)", myVarA, existsA);
    Environment.SetEnvironmentVariable(myVarA, existsA);

// Set the environment variable for the the current process.
    Console.WriteLine(fmt2x, "Process", myVarB, existsB);
    Environment.SetEnvironmentVariable(myVarB, existsB,
        EnvironmentVariableTarget.Process);

// Set the environment variable for the the current user.
    Console.WriteLine(fmt2x, "User", myVarC, existsC);
    Environment.SetEnvironmentVariable(myVarC, existsC,
        EnvironmentVariableTarget.User);

// Set the environment variable for the the local machine.
    Console.WriteLine(fmt2x, "Machine", myVarD, existsD);
    Environment.SetEnvironmentVariable(myVarD, existsD,
        EnvironmentVariableTarget.Machine);
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 1:
// Display the environment variables in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg31);
    CheckAllVariables();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 2:
// Check whether the User and Machine environment variables were created in the Windows
// operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg32);
    CheckRegistry();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 4, part 1:
// Delete the environment variables created for this sample.
// This section demonstrates using Environment.SetEnvironmentVariable to delete an
// environment variable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg41);
    Environment.SetEnvironmentVariable(myVarA, null);
    Environment.SetEnvironmentVariable(myVarB, null, EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable(myVarC, null, EnvironmentVariableTarget.User);
    Environment.SetEnvironmentVariable(myVarD, null, EnvironmentVariableTarget.Machine);
//-------------------------------------------------------------------------------------
// Step 4, part 2:
// Check whether the environment variables were deleted in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg42);
    CheckEachVariable();
//-------------------------------------------------------------------------------------
// Step 4, part 3:
// Check whether the User and Machine environment variables were deleted from the
// Windows operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg43);
    CheckRegistry();
    }
}
/*
This example produces the following results:

Step 1:
  Check whether the environment variables already exist in
  the various targets...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
  Set the environment variable for each target...

  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
  Display the environment variables in each target...

Process:
  B_GETSET_ENVAR_SAMPLE exists in Process.
  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
  C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
  Check whether the User and Machine environment variables
  were created in the Windows operating system registry...

"Environment" key:
  C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
  Delete the environment variables created for this sample...

Step 4, part 2:
  Check whether the environment variables were deleted
  in each target...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
  Check whether the User and Machine environment variables
  were deleted from the Windows operating system registry...

"Environment" key:
  Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  Environment variable doesn't exist.
*/

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using namespace System;
using namespace System::Collections;
using namespace Microsoft::Win32;

namespace EnvironmentVariablesSample
{
    public ref class TestEnvironmentVariables sealed
    {
    public:
        // DoTest: Test get/set environment variables
        static void DoTest()
        {
            // Environment variable values
            String^ existsA = "exists in the default target"
                " (Process)";
            String^ existsB = "exists in Process";
            String^ existsC = "exists in User";
            String^ existsD = "exists in Machine";
            // Messages:
            String^ messageStep1 = "Step 1:\n"
                "  Check whether the environment variables already"
                " exist in \n"
                "  the various targets...\n";
            String^ messageStep2 = "Step 2:\n"
                "  Set the environment variable for each"
                " target...\n";
            String^ messageStep3Part1 = "Step 3, part 1:\n"
                "  Display the environment variables in each"
                " target...\n";
            String^ messageStep3Part2 = "Step 3, part 2:\n"
                "  Check whether the User and Machine "
                " environment variables \n"
                "  were created in the Windows operating"
                " system registry...\n";
            String^ messageStep4Part1 = "Step 4, part 1:\n"
                "  Delete the environment variables created "
                "for this sample...\n";
            String^ messageStep4Part2 = "Step 4, part 2:\n"
                "  Check whether the environment variables were "
                "deleted \n"
                "  in each target...\n";
            String^ messageStep4Part3 = "Step 4, part 3:\n"
                "  Check whether the User and Machine environment "
                "variables \n"
                "  were deleted from the Windows operating system "
                "registry...\n";
            String^ step2Format = "  {0,9}: Set {1} = \"{2}\"";

            // Step 1:
            // Check whether the sample environment variables already
            // exist.
            // WARNING: These variables will be deleted at the end of
            // this sample.
            Console::WriteLine(messageStep1);
            CheckVariables();
            Console::WriteLine();

            // Step 2:
            // Set the environment variable for each target.
            // This section demonstrates
            // Environment.SetEnvironmentVariable.
            Console::WriteLine(messageStep2);

            // Set the environment variable for the default target
            // (the current process).
            Console::WriteLine(step2Format, "(default)", VariableA,
                existsA);
            Environment::SetEnvironmentVariable(VariableA, existsA);

            // Set the environment variable
            // for the the current process.
            Console::WriteLine(step2Format, "Process", VariableB,
                existsB);
            Environment::SetEnvironmentVariable(VariableB, existsB,
                EnvironmentVariableTarget::Process);

            // Set the environment variable for the the current user.
            Console::WriteLine(step2Format, "User", VariableC,
                existsC);
            Environment::SetEnvironmentVariable(VariableC, existsC,
                EnvironmentVariableTarget::User);

            // Set the environment variable for the the local machine.
            Console::WriteLine(step2Format, "Machine", VariableD,
                existsD);
            Environment::SetEnvironmentVariable(VariableD, existsD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();

            // Step 3, part 1:
            // Display the environment variables in each target.
            Console::WriteLine(messageStep3Part1);
            PrintVariables();
            Console::WriteLine();

            // Step 3, part 2:
            // Check whether the User and Machine environment
            // variables were created in the Windows operating system
            // registry.
            Console::WriteLine(messageStep3Part2);
            CheckRegistryVariables();
            Console::WriteLine();

            // Step 4, part 1:
            // Delete the environment variables created for this
            // sample. This section demonstrates using
            // Environment.SetEnvironmentVariable to delete an
            // environment variable.
            Console::WriteLine(messageStep4Part1);
            Environment::SetEnvironmentVariable(VariableA, nullptr);
            Environment::SetEnvironmentVariable(VariableB, nullptr,
                EnvironmentVariableTarget::Process);
            Environment::SetEnvironmentVariable(VariableC, nullptr,
                EnvironmentVariableTarget::User);
            Environment::SetEnvironmentVariable(VariableD, nullptr,
                EnvironmentVariableTarget::Machine);

            // Step 4, part 2:
            // Check whether the environment variables were deleted
            // in each target.
            Console::WriteLine(messageStep4Part2);
            CheckVariables();

            // Step 4, part 3:
            // Check whether the User and Machine environment
            // variables were deleted from the Windows operating
            // system registry.
            Console::WriteLine(messageStep4Part3);
            CheckRegistryVariables();
        }

    protected:
        // Globals:
        literal String^ NameValueFormat = "  {0} {1}.";
        literal String^ VariableSuffix = "_GETSET_ENVAR_SAMPLE";

        // Four relatively unique environment variable names.
        // default process

        literal String^ VariableA = "A_GETSET_ENVAR_SAMPLE";

        // Current Process
        literal String^ VariableB = "B_GETSET_ENVAR_SAMPLE";

        // Current User
        literal String^ VariableC = "C_GETSET_ENVAR_SAMPLE";

        // Local Machine
        literal String^ VariableD = "D_GETSET_ENVAR_SAMPLE";

    private:
        // CheckVariablesInTarget:
        // Test whether a specific environment variable exists
        // in a target. This section demonstrates
        // Environment.GetEnvironmentVariable.
        static void CheckVariablesInTarget(String^ variable,
            EnvironmentVariableTarget target)
        {
            String^ variableName;

            // Zero means use the default target.
            if (target == (EnvironmentVariableTarget) 0)
            {
                variableName =
                    Environment::GetEnvironmentVariable(variable);
            }
            else
            {
                variableName = Environment::GetEnvironmentVariable(
                    variable, target);
            }
            Console::WriteLine(NameValueFormat, variable,
                (String::IsNullOrEmpty(variableName) ?
                "doesn't exist" : variableName));
        }

        // CheckVariable:
        // Uses CheckVariablesInTarget to test whether each
        // environment variable exists in a target.
        static void CheckVariables()
        {
            Console::WriteLine("Process:");

            // Check the default target(current process)
            CheckVariablesInTarget(VariableA,
                (EnvironmentVariableTarget) 0);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Process);
            Console::WriteLine();

            Console::WriteLine("User:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::User);
            Console::WriteLine();

            Console::WriteLine("Machine:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();
        }

        // PrintVariablesFromTarget: PrintVariables helper function.
        // This section demonstrates
        // Environment.GetEnvironmentVariables.
        static void PrintVariablesFromTarget(
            EnvironmentVariableTarget target)
        {
            String^ valueString;
            String^ keyString;

            for each (DictionaryEntry^ dictionary in
                Environment::GetEnvironmentVariables(target))
            {
                keyString = safe_cast<String^> (dictionary->Key);
                valueString = safe_cast<String^> (dictionary->Value);
                if (keyString->Contains(VariableSuffix))
                    Console::WriteLine(NameValueFormat, keyString,
                    valueString);
            }
            Console::WriteLine();
        }

        // PrintVariables:
        // Uses PrintVariablesFromTarget to test whether
        // each environment variable exists in a target.
        static void PrintVariables()
        {
            Console::WriteLine("Process:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Process);

            Console::WriteLine("User:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::User);

            Console::WriteLine("Machine:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Machine);
        }

        // CheckRegistryVariablesForKey: CheckRegistryVariables
        // helper function. This function filters out irrelevant
        // environment variables.
        static void CheckRegistryVariablesForKey(RegistryKey^ targetKey)
        {
            bool exists = false;

            for each (
                String^ variableName in targetKey->GetValueNames())
            {
                if (variableName->Contains(VariableSuffix))
                {
                    String^ variableValue =
                        safe_cast<String^>
                        (targetKey->GetValue(variableName));
                    Console::WriteLine(NameValueFormat, variableName,
                        variableValue);
                    exists = true;
                }
            }
            if (!exists)
            {
                Console::WriteLine(
                    "  Environment variable doesn't exist.");
            }
            Console::WriteLine();
        }

        // CheckRegistryVariables:
        // Uses CheckRegistryVariables to display the User and
        // Machine environment variables in the registry.
        static void CheckRegistryVariables()
        {
            String^ subkeyUser = "Environment";
            String^ subkeyMachine = "System\\CurrentControlSet\\"
                "Control\\Session Manager\\Environment";
            String^ subkeyFormat = "\"{0}\" key:";

            Console::WriteLine(subkeyFormat, subkeyUser);
            CheckRegistryVariablesForKey(
                Registry::CurrentUser->OpenSubKey(subkeyUser));

            Console::WriteLine(subkeyFormat, subkeyMachine);
            CheckRegistryVariablesForKey(
                Registry::LocalMachine->OpenSubKey(subkeyMachine));
        }
    };
};

using namespace EnvironmentVariablesSample;

int main()
{
    TestEnvironmentVariables::DoTest();
}

/*
This example produces the following results:

Step 1:
Check whether the environment variables already exist in
the various targets...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
Set the environment variable for each target...

(default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
Display the environment variables in each target...

Process:
B_GETSET_ENVAR_SAMPLE exists in Process.
A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
Check whether the User and Machine environment variables
were created in the Windows operating system registry...

"Environment" key:
C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
Delete the environment variables created for this sample...

Step 4, part 2:
Check whether the environment variables were deleted
in each target...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
Check whether the User and Machine environment variables
were deleted from the Windows operating system registry...

"Environment" key:
Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
Environment variable doesn't exist.
*/
  • EnvironmentPermission

    如果 target 为 Process（关联枚举：EnvironmentPermissionAccess..::.Read），则用于读取 variable 的值；

    或

    如果 target 为 User 或 Machine（关联枚举：PermissionState..::.Unrestricted），则用于完全访问环境变量。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
GetEnvironmentVariable 重载
System 命名空间
SetEnvironmentVariable
GetEnvironmentVariables


Environment ..::.GetEnvironmentVariables 方法

Environment
.
.
::
.
GetEnvironmentVariables 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Environment 类

检索所有环境变量名及其值。

名称 说明
页首

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.GetEnvironmentVariables 方法

Environment
.
.
::
.
GetEnvironmentVariables 方法
Environment 类

从当前进程检索所有环境变量名及其值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetEnvironmentVariables As IDictionary
public static IDictionary GetEnvironmentVariables()
public:
static IDictionary^ GetEnvironmentVariables()
static member GetEnvironmentVariables : unit -> IDictionary

返回值

类型： System.Collections IDictionary
包含所有环境变量名及其值的字典；如果找不到任何环境变量，则返回空字典。
异常 | 条件
SecurityException | 调用方不具有执行此操作所需的权限。
OutOfMemoryException | 缓冲区内存不足。

环境变量的名称和值以键值对形式存储在返回的 IDictionary 中。

下面的示例说明 GetEnvironmentVariables 方法。

' Sample for the Environment.GetEnvironmentVariables method
Imports System
Imports System.Collections

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("GetEnvironmentVariables: ")
      Dim environmentVariables As IDictionary = Environment.GetEnvironmentVariables()
      Dim de As DictionaryEntry
      For Each de In  environmentVariables
         Console.WriteLine("  {0} = {1}", de.Key, de.Value)
      Next de
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'(Any result that is lengthy, specific to the machine on which this sample was tested,
'or reveals information that should remain secure, has been omitted
'and marked "!---OMITTED---!".)
'
'GetEnvironmentVariables:
'  !---OMITTED---!
'

// Sample for the Environment.GetEnvironmentVariables method
using System;
using System.Collections;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("GetEnvironmentVariables: ");
    IDictionary	environmentVariables = Environment.GetEnvironmentVariables();
    foreach (DictionaryEntry de in environmentVariables)
        {
        Console.WriteLine("  {0} = {1}", de.Key, de.Value);
        }
    }
}
/*
This example produces the following results:
(Any result that is lengthy, specific to the machine on which this sample was tested, or reveals information that should remain secure, has been omitted and marked "!---OMITTED---!".)

GetEnvironmentVariables:
  !---OMITTED---!
*/

// Sample for the Environment::GetEnvironmentVariables method
using namespace System;
using namespace System::Collections;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "GetEnvironmentVariables: " );
   IDictionary^ environmentVariables = Environment::GetEnvironmentVariables();
   IEnumerator^ myEnum = environmentVariables->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry^ de = safe_cast<DictionaryEntry^>(myEnum->Current);
      Console::WriteLine( " {0} = {1}", de->Key, de->Value );
   }
}

/*
This example produces the following results:
(Any result that is lengthy, specific to the machine on which this sample was tested, or reveals information that should remain secure, has been omitted and marked S"!---OMITTED---!".)

GetEnvironmentVariables:
!---OMITTED---!
*/
  • EnvironmentPermission

    用于读取环境变量的名称和值。关联的枚举：EnvironmentPermissionAccess..::.Read 用于读取环境变量的名称和值。关联的枚举：EnvironmentPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
GetEnvironmentVariables 重载
System 命名空间
GetEnvironmentVariable


Environment ..::.GetEnvironmentVariables 方法 (EnvironmentVariableTarget)

Environment
.
.
::
.
GetEnvironmentVariables 方法 (EnvironmentVariableTarget)
Environment 类

从当前进程或者从当前用户或本地计算机的 Windows 操作系统注册表项检索所有环境变量名及其值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetEnvironmentVariables ( _
    target As EnvironmentVariableTarget _
) As IDictionary
public static IDictionary GetEnvironmentVariables(
    EnvironmentVariableTarget target
)
public:
static IDictionary^ GetEnvironmentVariables(
    EnvironmentVariableTarget target
)
static member GetEnvironmentVariables :
        target:EnvironmentVariableTarget -> IDictionary

参数

target
类型： System EnvironmentVariableTarget
EnvironmentVariableTarget 值之一。

返回值

类型： System.Collections IDictionary
包含 target 参数所指定的源中所有环境变量名及其值的字典；否则，如果找不到任何环境变量，则返回空字典。
异常 | 条件
SecurityException | 调用方没有为 target 的指定值执行此操作所需具备的权限。
NotSupportedException | 此方法不能用在 Windows 95 或 Windows 98 平台上。
ArgumentException | target 包含非法值。

target 参数指定源为当前进程、当前用户的注册表项还是本地计算机的注册表项。

环境变量的名称和值以键/值对的形式存储在返回的 IDictionary 对象中。

下面的示例创建 Process、User 和 Machine 目标的环境变量，并检查操作系统注册表是否包含 User 和 Machine 环境变量，然后删除环境变量。

' This example demonstrates the
'     Environment.GetEnvironmentVariable,
'     Environment.SetEnvironmentVariable, and
'     Environment.GetEnvironmentVariables overloaded methods.
Imports System
Imports System.Collections
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Class Sample
   '-------------------------------------------------------------------------------------
   ' Globals:
   '-------------------------------------------------------------------------------------
   Protected Shared fmtNameValue As String = "  {0} {1}."
   Protected Shared myVarSuffix As String = "_GETSET_ENVAR_SAMPLE"

   ' Four relatively unique environment variable names.
   Protected Shared myVarA As String = "A" & myVarSuffix ' default process
   Protected Shared myVarB As String = "B" & myVarSuffix ' Current Process
   Protected Shared myVarC As String = "C" & myVarSuffix ' Current User
   Protected Shared myVarD As String = "D" & myVarSuffix ' Local Machine
   '=====================================================================================
   ' EachVariable:
   ' Test whether a specific environment variable exists in a target.
   ' This section demonstrates Environment.GetEnvironmentVariable.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub EachVariable(var As String, tgt As EnvironmentVariableTarget)
      Dim str As String
      '
      If 0 = tgt Then ' Zero means use the default target.
         str = Environment.GetEnvironmentVariable(var)
      Else
         str = Environment.GetEnvironmentVariable(var, tgt)
      End If
      Console.WriteLine(fmtNameValue, var, IIf(String.IsNullOrEmpty(str), _
                                              "doesn't exist", str))
   End Sub 'EachVariable

   '-------------------------------------------------------------------------------------
   ' CheckEachVariable:
   ' Uses EachVariable to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckEachVariable()
      Console.WriteLine("Process:")
      EachVariable(myVarA, 0) ' Check the default target (current process)
      EachVariable(myVarB, EnvironmentVariableTarget.Process)
      EachVariable(myVarC, EnvironmentVariableTarget.Process)
      EachVariable(myVarD, EnvironmentVariableTarget.Process)
      Console.WriteLine()

      Console.WriteLine("User:")
      EachVariable(myVarA, EnvironmentVariableTarget.User)
      EachVariable(myVarB, EnvironmentVariableTarget.User)
      EachVariable(myVarC, EnvironmentVariableTarget.User)
      EachVariable(myVarD, EnvironmentVariableTarget.User)
      Console.WriteLine()

      Console.WriteLine("Machine:")
      EachVariable(myVarA, EnvironmentVariableTarget.Machine)
      EachVariable(myVarB, EnvironmentVariableTarget.Machine)
      EachVariable(myVarC, EnvironmentVariableTarget.Machine)
      EachVariable(myVarD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
   End Sub 'CheckEachVariable

   '=====================================================================================
   ' AllVariables: CheckAllVariables helper function.
   ' This section demonstrates Environment.GetEnvironmentVariables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub AllVariables(tgt As EnvironmentVariableTarget)
      Dim value As String
      Dim key As String

      Dim de As DictionaryEntry
      For Each de In Environment.GetEnvironmentVariables(tgt)
         key = CStr(de.Key)
         value = CStr(de.Value)
         If key.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, key, value)
         End If
      Next de
      Console.WriteLine()
   End Sub 'AllVariables

   '=====================================================================================
   ' CheckAllVariables:
   ' Uses AllVariables to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckAllVariables()
      Console.WriteLine("Process:")
      AllVariables(EnvironmentVariableTarget.Process)

      Console.WriteLine("User:")
      AllVariables(EnvironmentVariableTarget.User)

      Console.WriteLine("Machine:")
      AllVariables(EnvironmentVariableTarget.Machine)
   End Sub 'CheckAllVariables

   '=====================================================================================
   ' ChkReg: CheckRegistry helper function.
   ' This function filters out irrelevant environment variables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub ChkReg(rk As RegistryKey)
      Dim exists As Boolean = False
      Dim registryNone As String = "  Environment variable doesn't exist."

      Dim s As String
      For Each s In rk.GetValueNames()
         If s.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, s, CStr(rk.GetValue(s)))
            exists = True
         End If
      Next s
      If exists = False Then
         Console.WriteLine(registryNone)
      End If
      Console.WriteLine()
   End Sub 'ChkReg

   '-------------------------------------------------------------------------------------
   ' CheckRegistry:
   ' Uses ChkReg to display the User and Machine environment variables in the registry.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckRegistry()
      Dim subkeyU As String = "Environment"
      Dim subkeyM As String = "System\CurrentControlSet\Control\Session Manager\Environment"
      Dim fmtSubkey As String = """{0}"" key:"

      Console.WriteLine(fmtSubkey, subkeyU)
      ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU))

      Console.WriteLine(fmtSubkey, subkeyM)
      ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM))
   End Sub 'CheckRegistry

   '=====================================================================================
   ' Main:
   '-------------------------------------------------------------------------------------
   Public Shared Sub Main()
      '-------------------------------------------------------------------------------------
      ' Environment variable values
      '-------------------------------------------------------------------------------------
      Dim existsA As String = "exists in the default target (Process)"
      Dim existsB As String = "exists in Process"
      Dim existsC As String = "exists in User"
      Dim existsD As String = "exists in Machine"
      '-------------------------------------------------------------------------------------
      ' Messages:
      '-------------------------------------------------------------------------------------
      Dim msg1  As String = "Step 1:" & vbCrLf & _
                            "  Check whether the environment variables already exist in " _
                 & vbCrLf & "  the various targets..." & vbCrLf
      Dim msg2  As String = "Step 2:" & vbCrLf & _
                            "  Set the environment variable for each target..." & vbCrLf
      Dim msg31 As String = "Step 3, part 1:" & vbCrLf & _
                            "  Display the environment variables in each target..." & vbCrLf
      Dim msg32 As String = "Step 3, part 2:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were created in the Windows operating system registry..." _
                 & vbCrLf
      Dim msg41 As String = "Step 4, part 1:" & vbCrLf & _
                            "  Delete the environment variables created for this sample..." _
                 & vbCrLf
      Dim msg42 As String = "Step 4, part 2:" & vbCrLf & _
                            "  Check whether the environment variables were deleted " _
                 & vbCrLf & "  in each target..." & vbCrLf
      Dim msg43 As String = "Step 4, part 3:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were deleted from the Windows operating system registry..." _
                 & vbCrLf
      Dim fmt2x As String = "  {0,9}: Set {1} = ""{2}"""
      '-------------------------------------------------------------------------------------
      ' Step 1:
      ' Check whether the sample environment variables already exist.
      ' WARNING: These variables will be deleted at the end of this sample.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg1)
      CheckEachVariable()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 2:
      ' Set the environment variable for each target.
      ' This section demonstrates Environment.SetEnvironmentVariable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg2)
      ' Set the environment variable for the default target (the current process).
      Console.WriteLine(fmt2x, "(default)", myVarA, existsA)
      Environment.SetEnvironmentVariable(myVarA, existsA)

      ' Set the environment variable for the the current process.
      Console.WriteLine(fmt2x, "Process", myVarB, existsB)
      Environment.SetEnvironmentVariable(myVarB, existsB, EnvironmentVariableTarget.Process)

      ' Set the environment variable for the the current user.
      Console.WriteLine(fmt2x, "User", myVarC, existsC)
      Environment.SetEnvironmentVariable(myVarC, existsC, EnvironmentVariableTarget.User)

      ' Set the environment variable for the the local machine.
      Console.WriteLine(fmt2x, "Machine", myVarD, existsD)
      Environment.SetEnvironmentVariable(myVarD, existsD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 1:
      ' Display the environment variables in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg31)
      CheckAllVariables()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 2:
      ' Check whether the User and Machine environment variables were created in the Windows
      ' operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg32)
      CheckRegistry()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 1:
      ' Delete the environment variables created for this sample.
      ' This section demonstrates using Environment.SetEnvironmentVariable to delete an
      ' environment variable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg41)
      Environment.SetEnvironmentVariable(myVarA, Nothing)
      Environment.SetEnvironmentVariable(myVarB, Nothing, EnvironmentVariableTarget.Process)
      Environment.SetEnvironmentVariable(myVarC, Nothing, EnvironmentVariableTarget.User)
      Environment.SetEnvironmentVariable(myVarD, Nothing, EnvironmentVariableTarget.Machine)
      '-------------------------------------------------------------------------------------
      ' Step 4, part 2:
      ' Check whether the environment variables were deleted in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg42)
      CheckEachVariable()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 3:
      ' Check whether the User and Machine environment variables were deleted from the
      ' Windows operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg43)
      CheckRegistry()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Step 1:
'  Check whether the environment variables already exist in
'  the various targets...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'
'Step 2:
'  Set the environment variable for each target...
'
'  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
'    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
'       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
'    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"
'
'Step 3, part 1:
'  Display the environment variables in each target...
'
'Process:
'  B_GETSET_ENVAR_SAMPLE exists in Process.
'  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).
'
'User:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'Machine:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 3, part 2:
'  Check whether the User and Machine environment variables
'  were created in the Windows operating system registry...
'
'"Environment" key:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 4, part 1:
'  Delete the environment variables created for this sample...
'
'Step 4, part 2:
'  Check whether the environment variables were deleted
'  in each target...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Step 4, part 3:
'  Check whether the User and Machine environment variables
'  were deleted from the Windows operating system registry...
'
'"Environment" key:
'  Environment variable doesn't exist.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  Environment variable doesn't exist.
'

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using System;
using System.Collections;
using Microsoft.Win32;

class Sample
{
//-------------------------------------------------------------------------------------
// Globals:
//-------------------------------------------------------------------------------------
    protected static string fmtNameValue = "  {0} {1}.";
    protected static string myVarSuffix = "_GETSET_ENVAR_SAMPLE";

// Four relatively unique environment variable names.
    protected static string myVarA = "A" + myVarSuffix; // default process
    protected static string myVarB = "B" + myVarSuffix; // Current Process
    protected static string myVarC = "C" + myVarSuffix; // Current User
    protected static string myVarD = "D" + myVarSuffix; // Local Machine
//=====================================================================================
// EachVariable:
// Test whether a specific environment variable exists in a target.
// This section demonstrates Environment.GetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    protected static void EachVariable(string var, EnvironmentVariableTarget tgt)
    {
    string str;
    //
    if (0 == tgt)          // Zero means use the default target.
        str = Environment.GetEnvironmentVariable(var);
    else
        str = Environment.GetEnvironmentVariable(var, tgt);
    Console.WriteLine(fmtNameValue,
                      var, (String.IsNullOrEmpty(str) ? "doesn't exist" : str));
    }
//-------------------------------------------------------------------------------------
// CheckEachVariable:
// Uses EachVariable to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckEachVariable()
    {
    Console.WriteLine("Process:");
    EachVariable(myVarA, 0);  // Check the default target (current process)
    EachVariable(myVarB, EnvironmentVariableTarget.Process);
    EachVariable(myVarC, EnvironmentVariableTarget.Process);
    EachVariable(myVarD, EnvironmentVariableTarget.Process);
    Console.WriteLine();

    Console.WriteLine("User:");
    EachVariable(myVarA, EnvironmentVariableTarget.User);
    EachVariable(myVarB, EnvironmentVariableTarget.User);
    EachVariable(myVarC, EnvironmentVariableTarget.User);
    EachVariable(myVarD, EnvironmentVariableTarget.User);
    Console.WriteLine();

    Console.WriteLine("Machine:");
    EachVariable(myVarA, EnvironmentVariableTarget.Machine);
    EachVariable(myVarB, EnvironmentVariableTarget.Machine);
    EachVariable(myVarC, EnvironmentVariableTarget.Machine);
    EachVariable(myVarD, EnvironmentVariableTarget.Machine);
    Console.WriteLine();
    }
//=====================================================================================
// AllVariables: CheckAllVariables helper function.
// This section demonstrates Environment.GetEnvironmentVariables.
//-------------------------------------------------------------------------------------
    private static void AllVariables(EnvironmentVariableTarget tgt)
    {
    string value;
    string key;

    foreach(DictionaryEntry de in Environment.GetEnvironmentVariables(tgt))
        {
        key   = (string)de.Key;
        value = (string)de.Value;
        if (key.Contains(myVarSuffix))
            Console.WriteLine(fmtNameValue, key, value);
        }
    Console.WriteLine();
    }
//=====================================================================================
// CheckAllVariables:
// Uses AllVariables to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckAllVariables()
    {
    Console.WriteLine("Process:");
    AllVariables(EnvironmentVariableTarget.Process);

    Console.WriteLine("User:");
    AllVariables(EnvironmentVariableTarget.User);

    Console.WriteLine("Machine:");
    AllVariables(EnvironmentVariableTarget.Machine);
    }
//=====================================================================================
// ChkReg: CheckRegistry helper function.
// This function filters out irrelevant environment variables.
//-------------------------------------------------------------------------------------
    private static void ChkReg(RegistryKey rk)
    {
    bool exists = false;
    string registryNone = "  Environment variable doesn't exist.";

    foreach (string s in rk.GetValueNames())
        {
        if (s.Contains(myVarSuffix))
            {
            Console.WriteLine(fmtNameValue, s, (string)rk.GetValue(s));
            exists = true;
            }
        }
    if (exists == false)
        Console.WriteLine(registryNone);
    Console.WriteLine();
    }
//-------------------------------------------------------------------------------------
// CheckRegistry:
// Uses ChkReg to display the User and Machine environment variables in the registry.
//-------------------------------------------------------------------------------------
    protected static void CheckRegistry()
    {
    string subkeyU = @"Environment";
    string subkeyM = @"System\CurrentControlSet\Control\Session Manager\Environment";
    string fmtSubkey = "\"{0}\" key:";

    Console.WriteLine(fmtSubkey, subkeyU);
    ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU));

    Console.WriteLine(fmtSubkey, subkeyM);
    ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM));
    }
//=====================================================================================
// Main:
//-------------------------------------------------------------------------------------
    public static void Main()
    {
//-------------------------------------------------------------------------------------
// Environment variable values
//-------------------------------------------------------------------------------------
    string existsA = "exists in the default target (Process)";
    string existsB = "exists in Process";
    string existsC = "exists in User";
    string existsD = "exists in Machine";
//-------------------------------------------------------------------------------------
// Messages:
//-------------------------------------------------------------------------------------
    string msg1  = "Step 1:\n" +
                       "  Check whether the environment variables already exist in \n" +
                       "  the various targets...\n";
    string msg2  = "Step 2:\n" +
                       "  Set the environment variable for each target...\n";
    string msg31 = "Step 3, part 1:\n" +
                       "  Display the environment variables in each target...\n";
    string msg32 = "Step 3, part 2:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were created in the Windows operating system registry...\n";
    string msg41 = "Step 4, part 1:\n" +
                       "  Delete the environment variables created for this sample...\n";
    string msg42 = "Step 4, part 2:\n" +
                       "  Check whether the environment variables were deleted \n" +
                       "  in each target...\n";
    string msg43 = "Step 4, part 3:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were deleted from the Windows operating system registry...\n";
    string fmt2x   = "  {0,9}: Set {1} = \"{2}\"";
//-------------------------------------------------------------------------------------
// Step 1:
// Check whether the sample environment variables already exist.
// WARNING: These variables will be deleted at the end of this sample.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg1);
    CheckEachVariable();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 2:
// Set the environment variable for each target.
// This section demonstrates Environment.SetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg2);
// Set the environment variable for the default target (the current process).
    Console.WriteLine(fmt2x, "(default)", myVarA, existsA);
    Environment.SetEnvironmentVariable(myVarA, existsA);

// Set the environment variable for the the current process.
    Console.WriteLine(fmt2x, "Process", myVarB, existsB);
    Environment.SetEnvironmentVariable(myVarB, existsB,
        EnvironmentVariableTarget.Process);

// Set the environment variable for the the current user.
    Console.WriteLine(fmt2x, "User", myVarC, existsC);
    Environment.SetEnvironmentVariable(myVarC, existsC,
        EnvironmentVariableTarget.User);

// Set the environment variable for the the local machine.
    Console.WriteLine(fmt2x, "Machine", myVarD, existsD);
    Environment.SetEnvironmentVariable(myVarD, existsD,
        EnvironmentVariableTarget.Machine);
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 1:
// Display the environment variables in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg31);
    CheckAllVariables();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 2:
// Check whether the User and Machine environment variables were created in the Windows
// operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg32);
    CheckRegistry();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 4, part 1:
// Delete the environment variables created for this sample.
// This section demonstrates using Environment.SetEnvironmentVariable to delete an
// environment variable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg41);
    Environment.SetEnvironmentVariable(myVarA, null);
    Environment.SetEnvironmentVariable(myVarB, null, EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable(myVarC, null, EnvironmentVariableTarget.User);
    Environment.SetEnvironmentVariable(myVarD, null, EnvironmentVariableTarget.Machine);
//-------------------------------------------------------------------------------------
// Step 4, part 2:
// Check whether the environment variables were deleted in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg42);
    CheckEachVariable();
//-------------------------------------------------------------------------------------
// Step 4, part 3:
// Check whether the User and Machine environment variables were deleted from the
// Windows operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg43);
    CheckRegistry();
    }
}
/*
This example produces the following results:

Step 1:
  Check whether the environment variables already exist in
  the various targets...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
  Set the environment variable for each target...

  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
  Display the environment variables in each target...

Process:
  B_GETSET_ENVAR_SAMPLE exists in Process.
  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
  C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
  Check whether the User and Machine environment variables
  were created in the Windows operating system registry...

"Environment" key:
  C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
  Delete the environment variables created for this sample...

Step 4, part 2:
  Check whether the environment variables were deleted
  in each target...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
  Check whether the User and Machine environment variables
  were deleted from the Windows operating system registry...

"Environment" key:
  Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  Environment variable doesn't exist.
*/

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using namespace System;
using namespace System::Collections;
using namespace Microsoft::Win32;

namespace EnvironmentVariablesSample
{
    public ref class TestEnvironmentVariables sealed
    {
    public:
        // DoTest: Test get/set environment variables
        static void DoTest()
        {
            // Environment variable values
            String^ existsA = "exists in the default target"
                " (Process)";
            String^ existsB = "exists in Process";
            String^ existsC = "exists in User";
            String^ existsD = "exists in Machine";
            // Messages:
            String^ messageStep1 = "Step 1:\n"
                "  Check whether the environment variables already"
                " exist in \n"
                "  the various targets...\n";
            String^ messageStep2 = "Step 2:\n"
                "  Set the environment variable for each"
                " target...\n";
            String^ messageStep3Part1 = "Step 3, part 1:\n"
                "  Display the environment variables in each"
                " target...\n";
            String^ messageStep3Part2 = "Step 3, part 2:\n"
                "  Check whether the User and Machine "
                " environment variables \n"
                "  were created in the Windows operating"
                " system registry...\n";
            String^ messageStep4Part1 = "Step 4, part 1:\n"
                "  Delete the environment variables created "
                "for this sample...\n";
            String^ messageStep4Part2 = "Step 4, part 2:\n"
                "  Check whether the environment variables were "
                "deleted \n"
                "  in each target...\n";
            String^ messageStep4Part3 = "Step 4, part 3:\n"
                "  Check whether the User and Machine environment "
                "variables \n"
                "  were deleted from the Windows operating system "
                "registry...\n";
            String^ step2Format = "  {0,9}: Set {1} = \"{2}\"";

            // Step 1:
            // Check whether the sample environment variables already
            // exist.
            // WARNING: These variables will be deleted at the end of
            // this sample.
            Console::WriteLine(messageStep1);
            CheckVariables();
            Console::WriteLine();

            // Step 2:
            // Set the environment variable for each target.
            // This section demonstrates
            // Environment.SetEnvironmentVariable.
            Console::WriteLine(messageStep2);

            // Set the environment variable for the default target
            // (the current process).
            Console::WriteLine(step2Format, "(default)", VariableA,
                existsA);
            Environment::SetEnvironmentVariable(VariableA, existsA);

            // Set the environment variable
            // for the the current process.
            Console::WriteLine(step2Format, "Process", VariableB,
                existsB);
            Environment::SetEnvironmentVariable(VariableB, existsB,
                EnvironmentVariableTarget::Process);

            // Set the environment variable for the the current user.
            Console::WriteLine(step2Format, "User", VariableC,
                existsC);
            Environment::SetEnvironmentVariable(VariableC, existsC,
                EnvironmentVariableTarget::User);

            // Set the environment variable for the the local machine.
            Console::WriteLine(step2Format, "Machine", VariableD,
                existsD);
            Environment::SetEnvironmentVariable(VariableD, existsD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();

            // Step 3, part 1:
            // Display the environment variables in each target.
            Console::WriteLine(messageStep3Part1);
            PrintVariables();
            Console::WriteLine();

            // Step 3, part 2:
            // Check whether the User and Machine environment
            // variables were created in the Windows operating system
            // registry.
            Console::WriteLine(messageStep3Part2);
            CheckRegistryVariables();
            Console::WriteLine();

            // Step 4, part 1:
            // Delete the environment variables created for this
            // sample. This section demonstrates using
            // Environment.SetEnvironmentVariable to delete an
            // environment variable.
            Console::WriteLine(messageStep4Part1);
            Environment::SetEnvironmentVariable(VariableA, nullptr);
            Environment::SetEnvironmentVariable(VariableB, nullptr,
                EnvironmentVariableTarget::Process);
            Environment::SetEnvironmentVariable(VariableC, nullptr,
                EnvironmentVariableTarget::User);
            Environment::SetEnvironmentVariable(VariableD, nullptr,
                EnvironmentVariableTarget::Machine);

            // Step 4, part 2:
            // Check whether the environment variables were deleted
            // in each target.
            Console::WriteLine(messageStep4Part2);
            CheckVariables();

            // Step 4, part 3:
            // Check whether the User and Machine environment
            // variables were deleted from the Windows operating
            // system registry.
            Console::WriteLine(messageStep4Part3);
            CheckRegistryVariables();
        }

    protected:
        // Globals:
        literal String^ NameValueFormat = "  {0} {1}.";
        literal String^ VariableSuffix = "_GETSET_ENVAR_SAMPLE";

        // Four relatively unique environment variable names.
        // default process

        literal String^ VariableA = "A_GETSET_ENVAR_SAMPLE";

        // Current Process
        literal String^ VariableB = "B_GETSET_ENVAR_SAMPLE";

        // Current User
        literal String^ VariableC = "C_GETSET_ENVAR_SAMPLE";

        // Local Machine
        literal String^ VariableD = "D_GETSET_ENVAR_SAMPLE";

    private:
        // CheckVariablesInTarget:
        // Test whether a specific environment variable exists
        // in a target. This section demonstrates
        // Environment.GetEnvironmentVariable.
        static void CheckVariablesInTarget(String^ variable,
            EnvironmentVariableTarget target)
        {
            String^ variableName;

            // Zero means use the default target.
            if (target == (EnvironmentVariableTarget) 0)
            {
                variableName =
                    Environment::GetEnvironmentVariable(variable);
            }
            else
            {
                variableName = Environment::GetEnvironmentVariable(
                    variable, target);
            }
            Console::WriteLine(NameValueFormat, variable,
                (String::IsNullOrEmpty(variableName) ?
                "doesn't exist" : variableName));
        }

        // CheckVariable:
        // Uses CheckVariablesInTarget to test whether each
        // environment variable exists in a target.
        static void CheckVariables()
        {
            Console::WriteLine("Process:");

            // Check the default target(current process)
            CheckVariablesInTarget(VariableA,
                (EnvironmentVariableTarget) 0);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Process);
            Console::WriteLine();

            Console::WriteLine("User:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::User);
            Console::WriteLine();

            Console::WriteLine("Machine:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();
        }

        // PrintVariablesFromTarget: PrintVariables helper function.
        // This section demonstrates
        // Environment.GetEnvironmentVariables.
        static void PrintVariablesFromTarget(
            EnvironmentVariableTarget target)
        {
            String^ valueString;
            String^ keyString;

            for each (DictionaryEntry^ dictionary in
                Environment::GetEnvironmentVariables(target))
            {
                keyString = safe_cast<String^> (dictionary->Key);
                valueString = safe_cast<String^> (dictionary->Value);
                if (keyString->Contains(VariableSuffix))
                    Console::WriteLine(NameValueFormat, keyString,
                    valueString);
            }
            Console::WriteLine();
        }

        // PrintVariables:
        // Uses PrintVariablesFromTarget to test whether
        // each environment variable exists in a target.
        static void PrintVariables()
        {
            Console::WriteLine("Process:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Process);

            Console::WriteLine("User:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::User);

            Console::WriteLine("Machine:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Machine);
        }

        // CheckRegistryVariablesForKey: CheckRegistryVariables
        // helper function. This function filters out irrelevant
        // environment variables.
        static void CheckRegistryVariablesForKey(RegistryKey^ targetKey)
        {
            bool exists = false;

            for each (
                String^ variableName in targetKey->GetValueNames())
            {
                if (variableName->Contains(VariableSuffix))
                {
                    String^ variableValue =
                        safe_cast<String^>
                        (targetKey->GetValue(variableName));
                    Console::WriteLine(NameValueFormat, variableName,
                        variableValue);
                    exists = true;
                }
            }
            if (!exists)
            {
                Console::WriteLine(
                    "  Environment variable doesn't exist.");
            }
            Console::WriteLine();
        }

        // CheckRegistryVariables:
        // Uses CheckRegistryVariables to display the User and
        // Machine environment variables in the registry.
        static void CheckRegistryVariables()
        {
            String^ subkeyUser = "Environment";
            String^ subkeyMachine = "System\\CurrentControlSet\\"
                "Control\\Session Manager\\Environment";
            String^ subkeyFormat = "\"{0}\" key:";

            Console::WriteLine(subkeyFormat, subkeyUser);
            CheckRegistryVariablesForKey(
                Registry::CurrentUser->OpenSubKey(subkeyUser));

            Console::WriteLine(subkeyFormat, subkeyMachine);
            CheckRegistryVariablesForKey(
                Registry::LocalMachine->OpenSubKey(subkeyMachine));
        }
    };
};

using namespace EnvironmentVariablesSample;

int main()
{
    TestEnvironmentVariables::DoTest();
}

/*
This example produces the following results:

Step 1:
Check whether the environment variables already exist in
the various targets...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
Set the environment variable for each target...

(default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
Display the environment variables in each target...

Process:
B_GETSET_ENVAR_SAMPLE exists in Process.
A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
Check whether the User and Machine environment variables
were created in the Windows operating system registry...

"Environment" key:
C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
Delete the environment variables created for this sample...

Step 4, part 2:
Check whether the environment variables were deleted
in each target...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
Check whether the User and Machine environment variables
were deleted from the Windows operating system registry...

"Environment" key:
Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
Environment variable doesn't exist.
*/
  • EnvironmentPermission

    如果 target 为 Process（关联枚举：EnvironmentPermissionAccess..::.Read），则用于读取环境变量的名称和值；

    或

    如果 target 为 User 或 Machine（关联枚举：PermissionState..::.Unrestricted），则用于完全访问环境变量。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
GetEnvironmentVariables 重载
System 命名空间
SetEnvironmentVariable
EnvironmentVariableTarget


Environment ..::.GetFolderPath 方法

Environment
.
.
::
.
GetFolderPath 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Environment 类

获取由指定枚举标识的系统特殊文件夹的路径。

名称 说明
页首

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.GetFolderPath 方法 (Environment ..::.SpecialFolder)

Environment
.
.
::
.
GetFolderPath 方法 (Environment
.
.
::
.
SpecialFolder)
Environment 类

获取由指定枚举标识的系统特殊文件夹的路径。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetFolderPath ( _
    folder As Environment..::..SpecialFolder _
) As String
public static string GetFolderPath(
    Environment..::..SpecialFolder folder
)
public:
static String^ GetFolderPath(
    Environment..::..SpecialFolder folder
)
static member GetFolderPath :
        folder:Environment..::..SpecialFolder -> string

参数

folder
类型： System Environment SpecialFolder
标识系统特殊文件夹的枚举常数。

返回值

类型： System String
如果指定的系统特殊文件夹实际存在于您的计算机上，则为到该文件夹的路径；否则为空字符串 ("")。
如果操作系统未创建文件夹、已删除现有文件夹，或者文件夹是不对应物理路径的虚拟目录（例如“我的电脑”），则该文件夹不会实际存在。
异常 | 条件
ArgumentException | folder 不是 System..::.Environment..::.SpecialFolder 的成员。
PlatformNotSupportedException | 当前平台不受支持。

此方法检索指向系统特殊文件夹（如 Program Files、Programs、System 或 Startup）的路径，可用于访问公共信息。特殊文件夹在默认情况下由系统设置，或者由用户在安装 Windows 的某个版本时显式进行设置。 此方法检索指向系统特殊文件夹（如 Program Files、Programs、System 或 Startup）的路径，可用于访问公共信息。特殊文件夹在默认情况下由系统设置，或者由用户在安装 Windows 的某个版本时显式进行设置。

folder 参数指定要检索的特殊文件夹，且该参数必须是 Environment..::.SpecialFolder 枚举中的一个值；任何其他值都将引发异常。

有关特殊文件夹的更多信息，请参见 CSIDL 值主题。

下面的示例演示如何使用 GetFolderPath 方法返回并显示与 folder 参数相关联的路径。

' Sample for the Environment.GetFolderPath method
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("GetFolderPath: {0}", Environment.GetFolderPath(Environment.SpecialFolder.System))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'GetFolderPath: C:\WINNT\System32
'

// Sample for the Environment.GetFolderPath method
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("GetFolderPath: {0}",
                 Environment.GetFolderPath(Environment.SpecialFolder.System));
    }
}
/*
This example produces the following results:

GetFolderPath: C:\WINNT\System32
*/

// Sample for the Environment::GetFolderPath method
using namespace System;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "GetFolderPath: {0}", Environment::GetFolderPath( Environment::SpecialFolder::System ) );
}

/*
This example produces the following results:

GetFolderPath: C:\WINNT\System32
*/
  • FileIOPermission

    用于读取和写入文件。关联枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.Write 用于读取和写入文件。关联枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.Write

  • FileIOPermission

    用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：2.0、1.0

参考

Environment 类
Environment 成员
GetFolderPath 重载
System 命名空间


Environment ..::.GetFolderPath 方法 (Environment ..::.SpecialFolder, Environment ..::.SpecialFolderOption)

Environment
.
.
::
.
GetFolderPath 方法 (Environment
.
.
::
.
SpecialFolder, Environment
.
.
::
.
SpecialFolderOption)
Environment 类

获取由指定枚举标识的系统特殊文件夹的路径，并使用用于访问特殊文件夹的指定选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetFolderPath ( _
    folder As Environment..::..SpecialFolder, _
    option As Environment..::..SpecialFolderOption _
) As String
public static string GetFolderPath(
    Environment..::..SpecialFolder folder,
    Environment..::..SpecialFolderOption option
)
public:
static String^ GetFolderPath(
    Environment..::..SpecialFolder folder,
    Environment..::..SpecialFolderOption option
)
static member GetFolderPath :
        folder:Environment..::..SpecialFolder *
        option:Environment..::..SpecialFolderOption -> string

参数

folder
类型： System Environment SpecialFolder
标识系统特殊文件夹的枚举常数。
option
类型： System Environment SpecialFolderOption
指定用于访问特殊文件夹的选项。

返回值

类型： System String
如果指定的系统特殊文件夹实际存在于您的计算机上，则为到该文件夹的路径；否则为空字符串 ("")。
如果操作系统未创建文件夹、已删除现有文件夹，或者文件夹是不对应物理路径的虚拟目录（例如“我的电脑”），则该文件夹不会实际存在。
异常 | 条件
ArgumentException | folder 不是 System..::.Environment..::.SpecialFolder 的成员。
PlatformNotSupportedException | PlatformNotSupportedException

此方法检索指向系统特殊文件夹（如 Program Files、Programs、System 或 Startup）的路径，可用于访问公共信息。特殊文件夹在默认情况下由系统设置，或者由用户在安装 Windows 的某个版本时显式进行设置。 此方法检索指向系统特殊文件夹（如 Program Files、Programs、System 或 Startup）的路径，可用于访问公共信息。特殊文件夹在默认情况下由系统设置，或者由用户在安装 Windows 的某个版本时显式进行设置。

folder 参数指定要检索的特殊文件夹，且该参数必须是 Environment..::.SpecialFolder 枚举中的一个值；任何其他值都将引发异常。

有关特殊文件夹的更多信息，请参见 CSIDL 值主题。

  • FileIOPermission

    用于读取和写入文件。关联枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.Write 用于读取和写入文件。关联枚举：FileIOPermissionAccess..::.Read、FileIOPermissionAccess..::.Write

  • FileIOPermission

    用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
GetFolderPath 重载
System 命名空间


Environment ..::.GetLogicalDrives 方法

Environment
.
.
::
.
GetLogicalDrives 方法
Environment 类

返回包含当前计算机中的逻辑驱动器名称的字符串数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetLogicalDrives As String()
public static string[] GetLogicalDrives()
public:
static array<String^>^ GetLogicalDrives()
static member GetLogicalDrives : unit -> string[]

返回值

类型：
array<
System String
>
[]
()
[]

字符串数组，其中的每个元素都包含逻辑驱动器名称。例如，如果计算机的硬盘是第一个逻辑驱动器，则返回的第一个元素是“C:\”。 字符串数组，其中的每个元素都包含逻辑驱动器名称。例如，如果计算机的硬盘是第一个逻辑驱动器，则返回的第一个元素是“C:\”。
异常 | 条件
IOException | 发生 I/O 错误。
SecurityException | 调用方没有所需的权限。

下面的示例演示如何使用 GetLogicalDrives 方法显示当前计算机的逻辑驱动器。

' Sample for the Environment.GetLogicalDrives method
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Dim drives As [String]() = Environment.GetLogicalDrives()
      Console.WriteLine("GetLogicalDrives: {0}", [String].Join(", ", drives))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'GetLogicalDrives: A:\, C:\, D:\
'

// Sample for the Environment.GetLogicalDrives method
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    String[] drives = Environment.GetLogicalDrives();
    Console.WriteLine("GetLogicalDrives: {0}", String.Join(", ", drives));
    }
}
/*
This example produces the following results:

GetLogicalDrives: A:\, C:\, D:\
*/

// Sample for the Environment::GetLogicalDrives method
using namespace System;
int main()
{
   Console::WriteLine();
   array<String^>^drives = Environment::GetLogicalDrives();
   Console::WriteLine( "GetLogicalDrives: {0}", String::Join( ", ", drives ) );
}

/*
This example produces the following results:

GetLogicalDrives: A:\, C:\, D:\
*/
  • EnvironmentPermission

    用于完全访问受此权限保护的资源。关联的枚举：PermissionState..::.Unrestricted 用于完全访问受此权限保护的资源。关联的枚举：PermissionState..::.Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.SetEnvironmentVariable 方法

Environment
.
.
::
.
SetEnvironmentVariable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Environment 类

创建、修改或删除环境变量。

名称 说明
页首

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.SetEnvironmentVariable 方法 (String, String)

Environment
.
.
::
.
SetEnvironmentVariable 方法 (String, String)
Environment 类

创建、修改或删除当前进程中存储的环境变量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SetEnvironmentVariable ( _
    variable As String, _
    value As String _
)
public static void SetEnvironmentVariable(
    string variable,
    string value
)
public:
static void SetEnvironmentVariable(
    String^ variable,
    String^ value
)
static member SetEnvironmentVariable :
        variable:string *
        value:string -> unit

参数

variable
类型： System String
环境变量名。
value
类型： System String
要分配给 variable 的值。
异常 | 条件
ArgumentNullException | variable 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | variable 包含零长度字符串、起始十六进制零字符 (0x00) 或等号（“=”）。 - 或 - variable 或 value 的长度大于等于 32,767 个字符。 - 或 - 在执行此操作的过程中发生错误。
SecurityException | 调用方不具有执行此操作所需的权限。

如果 value 参数不为空并且variable 参数命名的环境变量不存在，则会创建该环境变量并为其分配 value 的内容。完全为此操作考虑，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、包含零长度字符串或包含起始十六进制零字符 (0x00)，则此参数视为空。 如果 value 参数不为空并且variable 参数命名的环境变量不存在，则会创建该环境变量并为其分配 value 的内容。完全为此操作考虑，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、包含零长度字符串或包含起始十六进制零字符 (0x00)，则此参数视为空。

如果 variable 包含非起始十六进制零字符，则零字符之前的字符将被视为环境变量名称，而且所有后续字符都将被忽略。

如果 value 包含非起始十六进制零字符，则零字符之前的字符将被分配给环境变量，而且所有后续字符都将被忽略。

如果 value 为空且 variable 命名的环境变量存在，则删除该环境变量。如果 variable 不存在，则即使无法执行该操作也不会发生错误。 如果 value 为空且 variable 命名的环境变量存在，则删除该环境变量。如果 variable 不存在，则即使无法执行该操作也不会发生错误。

下面的示例创建 Process、User 和 Machine 目标的环境变量，并检查操作系统注册表是否包含 User 和 Machine 环境变量，然后删除环境变量。

' This example demonstrates the
'     Environment.GetEnvironmentVariable,
'     Environment.SetEnvironmentVariable, and
'     Environment.GetEnvironmentVariables overloaded methods.
Imports System
Imports System.Collections
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Class Sample
   '-------------------------------------------------------------------------------------
   ' Globals:
   '-------------------------------------------------------------------------------------
   Protected Shared fmtNameValue As String = "  {0} {1}."
   Protected Shared myVarSuffix As String = "_GETSET_ENVAR_SAMPLE"

   ' Four relatively unique environment variable names.
   Protected Shared myVarA As String = "A" & myVarSuffix ' default process
   Protected Shared myVarB As String = "B" & myVarSuffix ' Current Process
   Protected Shared myVarC As String = "C" & myVarSuffix ' Current User
   Protected Shared myVarD As String = "D" & myVarSuffix ' Local Machine
   '=====================================================================================
   ' EachVariable:
   ' Test whether a specific environment variable exists in a target.
   ' This section demonstrates Environment.GetEnvironmentVariable.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub EachVariable(var As String, tgt As EnvironmentVariableTarget)
      Dim str As String
      '
      If 0 = tgt Then ' Zero means use the default target.
         str = Environment.GetEnvironmentVariable(var)
      Else
         str = Environment.GetEnvironmentVariable(var, tgt)
      End If
      Console.WriteLine(fmtNameValue, var, IIf(String.IsNullOrEmpty(str), _
                                              "doesn't exist", str))
   End Sub 'EachVariable

   '-------------------------------------------------------------------------------------
   ' CheckEachVariable:
   ' Uses EachVariable to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckEachVariable()
      Console.WriteLine("Process:")
      EachVariable(myVarA, 0) ' Check the default target (current process)
      EachVariable(myVarB, EnvironmentVariableTarget.Process)
      EachVariable(myVarC, EnvironmentVariableTarget.Process)
      EachVariable(myVarD, EnvironmentVariableTarget.Process)
      Console.WriteLine()

      Console.WriteLine("User:")
      EachVariable(myVarA, EnvironmentVariableTarget.User)
      EachVariable(myVarB, EnvironmentVariableTarget.User)
      EachVariable(myVarC, EnvironmentVariableTarget.User)
      EachVariable(myVarD, EnvironmentVariableTarget.User)
      Console.WriteLine()

      Console.WriteLine("Machine:")
      EachVariable(myVarA, EnvironmentVariableTarget.Machine)
      EachVariable(myVarB, EnvironmentVariableTarget.Machine)
      EachVariable(myVarC, EnvironmentVariableTarget.Machine)
      EachVariable(myVarD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
   End Sub 'CheckEachVariable

   '=====================================================================================
   ' AllVariables: CheckAllVariables helper function.
   ' This section demonstrates Environment.GetEnvironmentVariables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub AllVariables(tgt As EnvironmentVariableTarget)
      Dim value As String
      Dim key As String

      Dim de As DictionaryEntry
      For Each de In Environment.GetEnvironmentVariables(tgt)
         key = CStr(de.Key)
         value = CStr(de.Value)
         If key.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, key, value)
         End If
      Next de
      Console.WriteLine()
   End Sub 'AllVariables

   '=====================================================================================
   ' CheckAllVariables:
   ' Uses AllVariables to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckAllVariables()
      Console.WriteLine("Process:")
      AllVariables(EnvironmentVariableTarget.Process)

      Console.WriteLine("User:")
      AllVariables(EnvironmentVariableTarget.User)

      Console.WriteLine("Machine:")
      AllVariables(EnvironmentVariableTarget.Machine)
   End Sub 'CheckAllVariables

   '=====================================================================================
   ' ChkReg: CheckRegistry helper function.
   ' This function filters out irrelevant environment variables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub ChkReg(rk As RegistryKey)
      Dim exists As Boolean = False
      Dim registryNone As String = "  Environment variable doesn't exist."

      Dim s As String
      For Each s In rk.GetValueNames()
         If s.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, s, CStr(rk.GetValue(s)))
            exists = True
         End If
      Next s
      If exists = False Then
         Console.WriteLine(registryNone)
      End If
      Console.WriteLine()
   End Sub 'ChkReg

   '-------------------------------------------------------------------------------------
   ' CheckRegistry:
   ' Uses ChkReg to display the User and Machine environment variables in the registry.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckRegistry()
      Dim subkeyU As String = "Environment"
      Dim subkeyM As String = "System\CurrentControlSet\Control\Session Manager\Environment"
      Dim fmtSubkey As String = """{0}"" key:"

      Console.WriteLine(fmtSubkey, subkeyU)
      ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU))

      Console.WriteLine(fmtSubkey, subkeyM)
      ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM))
   End Sub 'CheckRegistry

   '=====================================================================================
   ' Main:
   '-------------------------------------------------------------------------------------
   Public Shared Sub Main()
      '-------------------------------------------------------------------------------------
      ' Environment variable values
      '-------------------------------------------------------------------------------------
      Dim existsA As String = "exists in the default target (Process)"
      Dim existsB As String = "exists in Process"
      Dim existsC As String = "exists in User"
      Dim existsD As String = "exists in Machine"
      '-------------------------------------------------------------------------------------
      ' Messages:
      '-------------------------------------------------------------------------------------
      Dim msg1  As String = "Step 1:" & vbCrLf & _
                            "  Check whether the environment variables already exist in " _
                 & vbCrLf & "  the various targets..." & vbCrLf
      Dim msg2  As String = "Step 2:" & vbCrLf & _
                            "  Set the environment variable for each target..." & vbCrLf
      Dim msg31 As String = "Step 3, part 1:" & vbCrLf & _
                            "  Display the environment variables in each target..." & vbCrLf
      Dim msg32 As String = "Step 3, part 2:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were created in the Windows operating system registry..." _
                 & vbCrLf
      Dim msg41 As String = "Step 4, part 1:" & vbCrLf & _
                            "  Delete the environment variables created for this sample..." _
                 & vbCrLf
      Dim msg42 As String = "Step 4, part 2:" & vbCrLf & _
                            "  Check whether the environment variables were deleted " _
                 & vbCrLf & "  in each target..." & vbCrLf
      Dim msg43 As String = "Step 4, part 3:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were deleted from the Windows operating system registry..." _
                 & vbCrLf
      Dim fmt2x As String = "  {0,9}: Set {1} = ""{2}"""
      '-------------------------------------------------------------------------------------
      ' Step 1:
      ' Check whether the sample environment variables already exist.
      ' WARNING: These variables will be deleted at the end of this sample.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg1)
      CheckEachVariable()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 2:
      ' Set the environment variable for each target.
      ' This section demonstrates Environment.SetEnvironmentVariable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg2)
      ' Set the environment variable for the default target (the current process).
      Console.WriteLine(fmt2x, "(default)", myVarA, existsA)
      Environment.SetEnvironmentVariable(myVarA, existsA)

      ' Set the environment variable for the the current process.
      Console.WriteLine(fmt2x, "Process", myVarB, existsB)
      Environment.SetEnvironmentVariable(myVarB, existsB, EnvironmentVariableTarget.Process)

      ' Set the environment variable for the the current user.
      Console.WriteLine(fmt2x, "User", myVarC, existsC)
      Environment.SetEnvironmentVariable(myVarC, existsC, EnvironmentVariableTarget.User)

      ' Set the environment variable for the the local machine.
      Console.WriteLine(fmt2x, "Machine", myVarD, existsD)
      Environment.SetEnvironmentVariable(myVarD, existsD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 1:
      ' Display the environment variables in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg31)
      CheckAllVariables()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 2:
      ' Check whether the User and Machine environment variables were created in the Windows
      ' operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg32)
      CheckRegistry()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 1:
      ' Delete the environment variables created for this sample.
      ' This section demonstrates using Environment.SetEnvironmentVariable to delete an
      ' environment variable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg41)
      Environment.SetEnvironmentVariable(myVarA, Nothing)
      Environment.SetEnvironmentVariable(myVarB, Nothing, EnvironmentVariableTarget.Process)
      Environment.SetEnvironmentVariable(myVarC, Nothing, EnvironmentVariableTarget.User)
      Environment.SetEnvironmentVariable(myVarD, Nothing, EnvironmentVariableTarget.Machine)
      '-------------------------------------------------------------------------------------
      ' Step 4, part 2:
      ' Check whether the environment variables were deleted in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg42)
      CheckEachVariable()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 3:
      ' Check whether the User and Machine environment variables were deleted from the
      ' Windows operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg43)
      CheckRegistry()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Step 1:
'  Check whether the environment variables already exist in
'  the various targets...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'
'Step 2:
'  Set the environment variable for each target...
'
'  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
'    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
'       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
'    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"
'
'Step 3, part 1:
'  Display the environment variables in each target...
'
'Process:
'  B_GETSET_ENVAR_SAMPLE exists in Process.
'  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).
'
'User:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'Machine:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 3, part 2:
'  Check whether the User and Machine environment variables
'  were created in the Windows operating system registry...
'
'"Environment" key:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 4, part 1:
'  Delete the environment variables created for this sample...
'
'Step 4, part 2:
'  Check whether the environment variables were deleted
'  in each target...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Step 4, part 3:
'  Check whether the User and Machine environment variables
'  were deleted from the Windows operating system registry...
'
'"Environment" key:
'  Environment variable doesn't exist.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  Environment variable doesn't exist.
'

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using System;
using System.Collections;
using Microsoft.Win32;

class Sample
{
//-------------------------------------------------------------------------------------
// Globals:
//-------------------------------------------------------------------------------------
    protected static string fmtNameValue = "  {0} {1}.";
    protected static string myVarSuffix = "_GETSET_ENVAR_SAMPLE";

// Four relatively unique environment variable names.
    protected static string myVarA = "A" + myVarSuffix; // default process
    protected static string myVarB = "B" + myVarSuffix; // Current Process
    protected static string myVarC = "C" + myVarSuffix; // Current User
    protected static string myVarD = "D" + myVarSuffix; // Local Machine
//=====================================================================================
// EachVariable:
// Test whether a specific environment variable exists in a target.
// This section demonstrates Environment.GetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    protected static void EachVariable(string var, EnvironmentVariableTarget tgt)
    {
    string str;
    //
    if (0 == tgt)          // Zero means use the default target.
        str = Environment.GetEnvironmentVariable(var);
    else
        str = Environment.GetEnvironmentVariable(var, tgt);
    Console.WriteLine(fmtNameValue,
                      var, (String.IsNullOrEmpty(str) ? "doesn't exist" : str));
    }
//-------------------------------------------------------------------------------------
// CheckEachVariable:
// Uses EachVariable to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckEachVariable()
    {
    Console.WriteLine("Process:");
    EachVariable(myVarA, 0);  // Check the default target (current process)
    EachVariable(myVarB, EnvironmentVariableTarget.Process);
    EachVariable(myVarC, EnvironmentVariableTarget.Process);
    EachVariable(myVarD, EnvironmentVariableTarget.Process);
    Console.WriteLine();

    Console.WriteLine("User:");
    EachVariable(myVarA, EnvironmentVariableTarget.User);
    EachVariable(myVarB, EnvironmentVariableTarget.User);
    EachVariable(myVarC, EnvironmentVariableTarget.User);
    EachVariable(myVarD, EnvironmentVariableTarget.User);
    Console.WriteLine();

    Console.WriteLine("Machine:");
    EachVariable(myVarA, EnvironmentVariableTarget.Machine);
    EachVariable(myVarB, EnvironmentVariableTarget.Machine);
    EachVariable(myVarC, EnvironmentVariableTarget.Machine);
    EachVariable(myVarD, EnvironmentVariableTarget.Machine);
    Console.WriteLine();
    }
//=====================================================================================
// AllVariables: CheckAllVariables helper function.
// This section demonstrates Environment.GetEnvironmentVariables.
//-------------------------------------------------------------------------------------
    private static void AllVariables(EnvironmentVariableTarget tgt)
    {
    string value;
    string key;

    foreach(DictionaryEntry de in Environment.GetEnvironmentVariables(tgt))
        {
        key   = (string)de.Key;
        value = (string)de.Value;
        if (key.Contains(myVarSuffix))
            Console.WriteLine(fmtNameValue, key, value);
        }
    Console.WriteLine();
    }
//=====================================================================================
// CheckAllVariables:
// Uses AllVariables to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckAllVariables()
    {
    Console.WriteLine("Process:");
    AllVariables(EnvironmentVariableTarget.Process);

    Console.WriteLine("User:");
    AllVariables(EnvironmentVariableTarget.User);

    Console.WriteLine("Machine:");
    AllVariables(EnvironmentVariableTarget.Machine);
    }
//=====================================================================================
// ChkReg: CheckRegistry helper function.
// This function filters out irrelevant environment variables.
//-------------------------------------------------------------------------------------
    private static void ChkReg(RegistryKey rk)
    {
    bool exists = false;
    string registryNone = "  Environment variable doesn't exist.";

    foreach (string s in rk.GetValueNames())
        {
        if (s.Contains(myVarSuffix))
            {
            Console.WriteLine(fmtNameValue, s, (string)rk.GetValue(s));
            exists = true;
            }
        }
    if (exists == false)
        Console.WriteLine(registryNone);
    Console.WriteLine();
    }
//-------------------------------------------------------------------------------------
// CheckRegistry:
// Uses ChkReg to display the User and Machine environment variables in the registry.
//-------------------------------------------------------------------------------------
    protected static void CheckRegistry()
    {
    string subkeyU = @"Environment";
    string subkeyM = @"System\CurrentControlSet\Control\Session Manager\Environment";
    string fmtSubkey = "\"{0}\" key:";

    Console.WriteLine(fmtSubkey, subkeyU);
    ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU));

    Console.WriteLine(fmtSubkey, subkeyM);
    ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM));
    }
//=====================================================================================
// Main:
//-------------------------------------------------------------------------------------
    public static void Main()
    {
//-------------------------------------------------------------------------------------
// Environment variable values
//-------------------------------------------------------------------------------------
    string existsA = "exists in the default target (Process)";
    string existsB = "exists in Process";
    string existsC = "exists in User";
    string existsD = "exists in Machine";
//-------------------------------------------------------------------------------------
// Messages:
//-------------------------------------------------------------------------------------
    string msg1  = "Step 1:\n" +
                       "  Check whether the environment variables already exist in \n" +
                       "  the various targets...\n";
    string msg2  = "Step 2:\n" +
                       "  Set the environment variable for each target...\n";
    string msg31 = "Step 3, part 1:\n" +
                       "  Display the environment variables in each target...\n";
    string msg32 = "Step 3, part 2:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were created in the Windows operating system registry...\n";
    string msg41 = "Step 4, part 1:\n" +
                       "  Delete the environment variables created for this sample...\n";
    string msg42 = "Step 4, part 2:\n" +
                       "  Check whether the environment variables were deleted \n" +
                       "  in each target...\n";
    string msg43 = "Step 4, part 3:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were deleted from the Windows operating system registry...\n";
    string fmt2x   = "  {0,9}: Set {1} = \"{2}\"";
//-------------------------------------------------------------------------------------
// Step 1:
// Check whether the sample environment variables already exist.
// WARNING: These variables will be deleted at the end of this sample.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg1);
    CheckEachVariable();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 2:
// Set the environment variable for each target.
// This section demonstrates Environment.SetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg2);
// Set the environment variable for the default target (the current process).
    Console.WriteLine(fmt2x, "(default)", myVarA, existsA);
    Environment.SetEnvironmentVariable(myVarA, existsA);

// Set the environment variable for the the current process.
    Console.WriteLine(fmt2x, "Process", myVarB, existsB);
    Environment.SetEnvironmentVariable(myVarB, existsB,
        EnvironmentVariableTarget.Process);

// Set the environment variable for the the current user.
    Console.WriteLine(fmt2x, "User", myVarC, existsC);
    Environment.SetEnvironmentVariable(myVarC, existsC,
        EnvironmentVariableTarget.User);

// Set the environment variable for the the local machine.
    Console.WriteLine(fmt2x, "Machine", myVarD, existsD);
    Environment.SetEnvironmentVariable(myVarD, existsD,
        EnvironmentVariableTarget.Machine);
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 1:
// Display the environment variables in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg31);
    CheckAllVariables();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 2:
// Check whether the User and Machine environment variables were created in the Windows
// operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg32);
    CheckRegistry();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 4, part 1:
// Delete the environment variables created for this sample.
// This section demonstrates using Environment.SetEnvironmentVariable to delete an
// environment variable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg41);
    Environment.SetEnvironmentVariable(myVarA, null);
    Environment.SetEnvironmentVariable(myVarB, null, EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable(myVarC, null, EnvironmentVariableTarget.User);
    Environment.SetEnvironmentVariable(myVarD, null, EnvironmentVariableTarget.Machine);
//-------------------------------------------------------------------------------------
// Step 4, part 2:
// Check whether the environment variables were deleted in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg42);
    CheckEachVariable();
//-------------------------------------------------------------------------------------
// Step 4, part 3:
// Check whether the User and Machine environment variables were deleted from the
// Windows operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg43);
    CheckRegistry();
    }
}
/*
This example produces the following results:

Step 1:
  Check whether the environment variables already exist in
  the various targets...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
  Set the environment variable for each target...

  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
  Display the environment variables in each target...

Process:
  B_GETSET_ENVAR_SAMPLE exists in Process.
  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
  C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
  Check whether the User and Machine environment variables
  were created in the Windows operating system registry...

"Environment" key:
  C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
  Delete the environment variables created for this sample...

Step 4, part 2:
  Check whether the environment variables were deleted
  in each target...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
  Check whether the User and Machine environment variables
  were deleted from the Windows operating system registry...

"Environment" key:
  Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  Environment variable doesn't exist.
*/

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using namespace System;
using namespace System::Collections;
using namespace Microsoft::Win32;

namespace EnvironmentVariablesSample
{
    public ref class TestEnvironmentVariables sealed
    {
    public:
        // DoTest: Test get/set environment variables
        static void DoTest()
        {
            // Environment variable values
            String^ existsA = "exists in the default target"
                " (Process)";
            String^ existsB = "exists in Process";
            String^ existsC = "exists in User";
            String^ existsD = "exists in Machine";
            // Messages:
            String^ messageStep1 = "Step 1:\n"
                "  Check whether the environment variables already"
                " exist in \n"
                "  the various targets...\n";
            String^ messageStep2 = "Step 2:\n"
                "  Set the environment variable for each"
                " target...\n";
            String^ messageStep3Part1 = "Step 3, part 1:\n"
                "  Display the environment variables in each"
                " target...\n";
            String^ messageStep3Part2 = "Step 3, part 2:\n"
                "  Check whether the User and Machine "
                " environment variables \n"
                "  were created in the Windows operating"
                " system registry...\n";
            String^ messageStep4Part1 = "Step 4, part 1:\n"
                "  Delete the environment variables created "
                "for this sample...\n";
            String^ messageStep4Part2 = "Step 4, part 2:\n"
                "  Check whether the environment variables were "
                "deleted \n"
                "  in each target...\n";
            String^ messageStep4Part3 = "Step 4, part 3:\n"
                "  Check whether the User and Machine environment "
                "variables \n"
                "  were deleted from the Windows operating system "
                "registry...\n";
            String^ step2Format = "  {0,9}: Set {1} = \"{2}\"";

            // Step 1:
            // Check whether the sample environment variables already
            // exist.
            // WARNING: These variables will be deleted at the end of
            // this sample.
            Console::WriteLine(messageStep1);
            CheckVariables();
            Console::WriteLine();

            // Step 2:
            // Set the environment variable for each target.
            // This section demonstrates
            // Environment.SetEnvironmentVariable.
            Console::WriteLine(messageStep2);

            // Set the environment variable for the default target
            // (the current process).
            Console::WriteLine(step2Format, "(default)", VariableA,
                existsA);
            Environment::SetEnvironmentVariable(VariableA, existsA);

            // Set the environment variable
            // for the the current process.
            Console::WriteLine(step2Format, "Process", VariableB,
                existsB);
            Environment::SetEnvironmentVariable(VariableB, existsB,
                EnvironmentVariableTarget::Process);

            // Set the environment variable for the the current user.
            Console::WriteLine(step2Format, "User", VariableC,
                existsC);
            Environment::SetEnvironmentVariable(VariableC, existsC,
                EnvironmentVariableTarget::User);

            // Set the environment variable for the the local machine.
            Console::WriteLine(step2Format, "Machine", VariableD,
                existsD);
            Environment::SetEnvironmentVariable(VariableD, existsD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();

            // Step 3, part 1:
            // Display the environment variables in each target.
            Console::WriteLine(messageStep3Part1);
            PrintVariables();
            Console::WriteLine();

            // Step 3, part 2:
            // Check whether the User and Machine environment
            // variables were created in the Windows operating system
            // registry.
            Console::WriteLine(messageStep3Part2);
            CheckRegistryVariables();
            Console::WriteLine();

            // Step 4, part 1:
            // Delete the environment variables created for this
            // sample. This section demonstrates using
            // Environment.SetEnvironmentVariable to delete an
            // environment variable.
            Console::WriteLine(messageStep4Part1);
            Environment::SetEnvironmentVariable(VariableA, nullptr);
            Environment::SetEnvironmentVariable(VariableB, nullptr,
                EnvironmentVariableTarget::Process);
            Environment::SetEnvironmentVariable(VariableC, nullptr,
                EnvironmentVariableTarget::User);
            Environment::SetEnvironmentVariable(VariableD, nullptr,
                EnvironmentVariableTarget::Machine);

            // Step 4, part 2:
            // Check whether the environment variables were deleted
            // in each target.
            Console::WriteLine(messageStep4Part2);
            CheckVariables();

            // Step 4, part 3:
            // Check whether the User and Machine environment
            // variables were deleted from the Windows operating
            // system registry.
            Console::WriteLine(messageStep4Part3);
            CheckRegistryVariables();
        }

    protected:
        // Globals:
        literal String^ NameValueFormat = "  {0} {1}.";
        literal String^ VariableSuffix = "_GETSET_ENVAR_SAMPLE";

        // Four relatively unique environment variable names.
        // default process

        literal String^ VariableA = "A_GETSET_ENVAR_SAMPLE";

        // Current Process
        literal String^ VariableB = "B_GETSET_ENVAR_SAMPLE";

        // Current User
        literal String^ VariableC = "C_GETSET_ENVAR_SAMPLE";

        // Local Machine
        literal String^ VariableD = "D_GETSET_ENVAR_SAMPLE";

    private:
        // CheckVariablesInTarget:
        // Test whether a specific environment variable exists
        // in a target. This section demonstrates
        // Environment.GetEnvironmentVariable.
        static void CheckVariablesInTarget(String^ variable,
            EnvironmentVariableTarget target)
        {
            String^ variableName;

            // Zero means use the default target.
            if (target == (EnvironmentVariableTarget) 0)
            {
                variableName =
                    Environment::GetEnvironmentVariable(variable);
            }
            else
            {
                variableName = Environment::GetEnvironmentVariable(
                    variable, target);
            }
            Console::WriteLine(NameValueFormat, variable,
                (String::IsNullOrEmpty(variableName) ?
                "doesn't exist" : variableName));
        }

        // CheckVariable:
        // Uses CheckVariablesInTarget to test whether each
        // environment variable exists in a target.
        static void CheckVariables()
        {
            Console::WriteLine("Process:");

            // Check the default target(current process)
            CheckVariablesInTarget(VariableA,
                (EnvironmentVariableTarget) 0);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Process);
            Console::WriteLine();

            Console::WriteLine("User:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::User);
            Console::WriteLine();

            Console::WriteLine("Machine:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();
        }

        // PrintVariablesFromTarget: PrintVariables helper function.
        // This section demonstrates
        // Environment.GetEnvironmentVariables.
        static void PrintVariablesFromTarget(
            EnvironmentVariableTarget target)
        {
            String^ valueString;
            String^ keyString;

            for each (DictionaryEntry^ dictionary in
                Environment::GetEnvironmentVariables(target))
            {
                keyString = safe_cast<String^> (dictionary->Key);
                valueString = safe_cast<String^> (dictionary->Value);
                if (keyString->Contains(VariableSuffix))
                    Console::WriteLine(NameValueFormat, keyString,
                    valueString);
            }
            Console::WriteLine();
        }

        // PrintVariables:
        // Uses PrintVariablesFromTarget to test whether
        // each environment variable exists in a target.
        static void PrintVariables()
        {
            Console::WriteLine("Process:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Process);

            Console::WriteLine("User:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::User);

            Console::WriteLine("Machine:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Machine);
        }

        // CheckRegistryVariablesForKey: CheckRegistryVariables
        // helper function. This function filters out irrelevant
        // environment variables.
        static void CheckRegistryVariablesForKey(RegistryKey^ targetKey)
        {
            bool exists = false;

            for each (
                String^ variableName in targetKey->GetValueNames())
            {
                if (variableName->Contains(VariableSuffix))
                {
                    String^ variableValue =
                        safe_cast<String^>
                        (targetKey->GetValue(variableName));
                    Console::WriteLine(NameValueFormat, variableName,
                        variableValue);
                    exists = true;
                }
            }
            if (!exists)
            {
                Console::WriteLine(
                    "  Environment variable doesn't exist.");
            }
            Console::WriteLine();
        }

        // CheckRegistryVariables:
        // Uses CheckRegistryVariables to display the User and
        // Machine environment variables in the registry.
        static void CheckRegistryVariables()
        {
            String^ subkeyUser = "Environment";
            String^ subkeyMachine = "System\\CurrentControlSet\\"
                "Control\\Session Manager\\Environment";
            String^ subkeyFormat = "\"{0}\" key:";

            Console::WriteLine(subkeyFormat, subkeyUser);
            CheckRegistryVariablesForKey(
                Registry::CurrentUser->OpenSubKey(subkeyUser));

            Console::WriteLine(subkeyFormat, subkeyMachine);
            CheckRegistryVariablesForKey(
                Registry::LocalMachine->OpenSubKey(subkeyMachine));
        }
    };
};

using namespace EnvironmentVariablesSample;

int main()
{
    TestEnvironmentVariables::DoTest();
}

/*
This example produces the following results:

Step 1:
Check whether the environment variables already exist in
the various targets...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
Set the environment variable for each target...

(default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
Display the environment variables in each target...

Process:
B_GETSET_ENVAR_SAMPLE exists in Process.
A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
Check whether the User and Machine environment variables
were created in the Windows operating system registry...

"Environment" key:
C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
Delete the environment variables created for this sample...

Step 4, part 2:
Check whether the environment variables were deleted
in each target...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
Check whether the User and Machine environment variables
were deleted from the Windows operating system registry...

"Environment" key:
Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
Environment variable doesn't exist.
*/
  • EnvironmentPermission

    用于对环境变量的完全访问。关联的枚举：Unrestricted 用于对环境变量的完全访问。关联的枚举：Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
SetEnvironmentVariable 重载
System 命名空间
GetEnvironmentVariable
GetEnvironmentVariables


Environment ..::.SetEnvironmentVariable 方法 (String, String, EnvironmentVariableTarget)

Environment
.
.
::
.
SetEnvironmentVariable 方法 (String, String, EnvironmentVariableTarget)
Environment 类

创建、修改或删除当前进程中或者为当前用户或本地计算机保留的 Windows 操作系统注册表项中存储的环境变量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SetEnvironmentVariable ( _
    variable As String, _
    value As String, _
    target As EnvironmentVariableTarget _
)
public static void SetEnvironmentVariable(
    string variable,
    string value,
    EnvironmentVariableTarget target
)
public:
static void SetEnvironmentVariable(
    String^ variable,
    String^ value,
    EnvironmentVariableTarget target
)
static member SetEnvironmentVariable :
        variable:string *
        value:string *
        target:EnvironmentVariableTarget -> unit

参数

variable
类型： System String
环境变量名。
value
类型： System String
要分配给 variable 的值。
target
类型： System EnvironmentVariableTarget
EnvironmentVariableTarget 值之一。
异常 | 条件
ArgumentNullException | variable 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | variable 包含零长度字符串、起始十六进制零字符 (0x00) 或等号（“=”）。 - 或 - variable 的长度大于等于 32,767 个字符。 - 或 - target 不是 EnvironmentVariableTarget 枚举的成员。 - 或 - target 为 Machine 或 User，并且 variable 的长度大于等于 255。 - 或 - target 为 Process，并且 value 的长度大于等于 32,767 个字符。 - 或 - 在执行此操作的过程中发生错误。
NotSupportedException | target 是 User 或 Machine，当前操作系统为 Windows 95、Windows 98 或 Windows Me。
SecurityException | 调用方不具有执行此操作所需的权限。

如果 value 参数不为空并且variable 参数命名的环境变量不存在，则会创建该环境变量并为其分配 value 的内容。完全为此操作考虑，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、包含零长度字符串或包含起始十六进制零字符 (0x00)，则此参数视为空。 如果 value 参数不为空并且variable 参数命名的环境变量不存在，则会创建该环境变量并为其分配 value 的内容。完全为此操作考虑，如果 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、包含零长度字符串或包含起始十六进制零字符 (0x00)，则此参数视为空。

如果 variable 包含非起始十六进制零字符，则零字符之前的字符将被视为环境变量名称，而且所有后续字符都将被忽略。

如果 value 包含非起始十六进制零字符，则零字符之前的字符将被分配给环境变量，而且所有后续字符都将被忽略。

如果 value 为空且 variable 命名的环境变量存在，则删除该环境变量。如果 variable 不存在，则即使无法执行该操作也不会发生错误。当 target 为 Machine 时应注意，因为有可能会删除影响整个本地计算机而不仅仅是影响当前进程或用户的环境变量。 如果 value 为空且 variable 命名的环境变量存在，则删除该环境变量。如果 variable 不存在，则即使无法执行该操作也不会发生错误。当 target 为 Machine 时应注意，因为有可能会删除影响整个本地计算机而不仅仅是影响当前进程或用户的环境变量。 如果 value 为空且 variable 命名的环境变量存在，则删除该环境变量。如果 variable 不存在，则即使无法执行该操作也不会发生错误。当 target 为 Machine 时应注意，因为有可能会删除影响整个本地计算机而不仅仅是影响当前进程或用户的环境变量。

如果 target 为 User，则环境变量存储在为当前用户保留的 Windows 注册表项中。它还将复制到以当前用户身份运行的 Windows 资源管理器的实例。然后，用户从 Windows 资源管理器启动的任何新进程将继承该环境变量。 如果 target 为 User，则环境变量存储在为当前用户保留的 Windows 注册表项中。它还将复制到以当前用户身份运行的 Windows 资源管理器的实例。然后，用户从 Windows 资源管理器启动的任何新进程将继承该环境变量。 如果 target 为 User，则环境变量存储在为当前用户保留的 Windows 注册表项中。它还将复制到以当前用户身份运行的 Windows 资源管理器的实例。然后，用户从 Windows 资源管理器启动的任何新进程将继承该环境变量。

同样，如果 target 为 Machine，则环境变量存储在为本地计算机保留的 Windows 注册表项中。它还将复制到 Windows 资源管理器的所有实例。然后，从 Windows 资源管理器启动的任何新进程将继承该环境变量。 同样，如果 target 为 Machine，则环境变量存储在为本地计算机保留的 Windows 注册表项中。它还将复制到 Windows 资源管理器的所有实例。然后，从 Windows 资源管理器启动的任何新进程将继承该环境变量。 同样，如果 target 为 Machine，则环境变量存储在为本地计算机保留的 Windows 注册表项中。它还将复制到 Windows 资源管理器的所有实例。然后，从 Windows 资源管理器启动的任何新进程将继承该环境变量。

如果 target 为 User 或 Machine，则 Windows WM_SETTINGCHANGE 消息将向其他应用程序通知 SET 操作。

如果 target 为 User 或 Machine，则建议 value 的长度小于 2048 个字符。

下面的示例创建 Process、User 和 Machine 目标的环境变量，并检查操作系统注册表是否包含 User 和 Machine 环境变量，然后删除环境变量。

' This example demonstrates the
'     Environment.GetEnvironmentVariable,
'     Environment.SetEnvironmentVariable, and
'     Environment.GetEnvironmentVariables overloaded methods.
Imports System
Imports System.Collections
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Class Sample
   '-------------------------------------------------------------------------------------
   ' Globals:
   '-------------------------------------------------------------------------------------
   Protected Shared fmtNameValue As String = "  {0} {1}."
   Protected Shared myVarSuffix As String = "_GETSET_ENVAR_SAMPLE"

   ' Four relatively unique environment variable names.
   Protected Shared myVarA As String = "A" & myVarSuffix ' default process
   Protected Shared myVarB As String = "B" & myVarSuffix ' Current Process
   Protected Shared myVarC As String = "C" & myVarSuffix ' Current User
   Protected Shared myVarD As String = "D" & myVarSuffix ' Local Machine
   '=====================================================================================
   ' EachVariable:
   ' Test whether a specific environment variable exists in a target.
   ' This section demonstrates Environment.GetEnvironmentVariable.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub EachVariable(var As String, tgt As EnvironmentVariableTarget)
      Dim str As String
      '
      If 0 = tgt Then ' Zero means use the default target.
         str = Environment.GetEnvironmentVariable(var)
      Else
         str = Environment.GetEnvironmentVariable(var, tgt)
      End If
      Console.WriteLine(fmtNameValue, var, IIf(String.IsNullOrEmpty(str), _
                                              "doesn't exist", str))
   End Sub 'EachVariable

   '-------------------------------------------------------------------------------------
   ' CheckEachVariable:
   ' Uses EachVariable to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckEachVariable()
      Console.WriteLine("Process:")
      EachVariable(myVarA, 0) ' Check the default target (current process)
      EachVariable(myVarB, EnvironmentVariableTarget.Process)
      EachVariable(myVarC, EnvironmentVariableTarget.Process)
      EachVariable(myVarD, EnvironmentVariableTarget.Process)
      Console.WriteLine()

      Console.WriteLine("User:")
      EachVariable(myVarA, EnvironmentVariableTarget.User)
      EachVariable(myVarB, EnvironmentVariableTarget.User)
      EachVariable(myVarC, EnvironmentVariableTarget.User)
      EachVariable(myVarD, EnvironmentVariableTarget.User)
      Console.WriteLine()

      Console.WriteLine("Machine:")
      EachVariable(myVarA, EnvironmentVariableTarget.Machine)
      EachVariable(myVarB, EnvironmentVariableTarget.Machine)
      EachVariable(myVarC, EnvironmentVariableTarget.Machine)
      EachVariable(myVarD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
   End Sub 'CheckEachVariable

   '=====================================================================================
   ' AllVariables: CheckAllVariables helper function.
   ' This section demonstrates Environment.GetEnvironmentVariables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub AllVariables(tgt As EnvironmentVariableTarget)
      Dim value As String
      Dim key As String

      Dim de As DictionaryEntry
      For Each de In Environment.GetEnvironmentVariables(tgt)
         key = CStr(de.Key)
         value = CStr(de.Value)
         If key.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, key, value)
         End If
      Next de
      Console.WriteLine()
   End Sub 'AllVariables

   '=====================================================================================
   ' CheckAllVariables:
   ' Uses AllVariables to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckAllVariables()
      Console.WriteLine("Process:")
      AllVariables(EnvironmentVariableTarget.Process)

      Console.WriteLine("User:")
      AllVariables(EnvironmentVariableTarget.User)

      Console.WriteLine("Machine:")
      AllVariables(EnvironmentVariableTarget.Machine)
   End Sub 'CheckAllVariables

   '=====================================================================================
   ' ChkReg: CheckRegistry helper function.
   ' This function filters out irrelevant environment variables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub ChkReg(rk As RegistryKey)
      Dim exists As Boolean = False
      Dim registryNone As String = "  Environment variable doesn't exist."

      Dim s As String
      For Each s In rk.GetValueNames()
         If s.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, s, CStr(rk.GetValue(s)))
            exists = True
         End If
      Next s
      If exists = False Then
         Console.WriteLine(registryNone)
      End If
      Console.WriteLine()
   End Sub 'ChkReg

   '-------------------------------------------------------------------------------------
   ' CheckRegistry:
   ' Uses ChkReg to display the User and Machine environment variables in the registry.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckRegistry()
      Dim subkeyU As String = "Environment"
      Dim subkeyM As String = "System\CurrentControlSet\Control\Session Manager\Environment"
      Dim fmtSubkey As String = """{0}"" key:"

      Console.WriteLine(fmtSubkey, subkeyU)
      ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU))

      Console.WriteLine(fmtSubkey, subkeyM)
      ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM))
   End Sub 'CheckRegistry

   '=====================================================================================
   ' Main:
   '-------------------------------------------------------------------------------------
   Public Shared Sub Main()
      '-------------------------------------------------------------------------------------
      ' Environment variable values
      '-------------------------------------------------------------------------------------
      Dim existsA As String = "exists in the default target (Process)"
      Dim existsB As String = "exists in Process"
      Dim existsC As String = "exists in User"
      Dim existsD As String = "exists in Machine"
      '-------------------------------------------------------------------------------------
      ' Messages:
      '-------------------------------------------------------------------------------------
      Dim msg1  As String = "Step 1:" & vbCrLf & _
                            "  Check whether the environment variables already exist in " _
                 & vbCrLf & "  the various targets..." & vbCrLf
      Dim msg2  As String = "Step 2:" & vbCrLf & _
                            "  Set the environment variable for each target..." & vbCrLf
      Dim msg31 As String = "Step 3, part 1:" & vbCrLf & _
                            "  Display the environment variables in each target..." & vbCrLf
      Dim msg32 As String = "Step 3, part 2:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were created in the Windows operating system registry..." _
                 & vbCrLf
      Dim msg41 As String = "Step 4, part 1:" & vbCrLf & _
                            "  Delete the environment variables created for this sample..." _
                 & vbCrLf
      Dim msg42 As String = "Step 4, part 2:" & vbCrLf & _
                            "  Check whether the environment variables were deleted " _
                 & vbCrLf & "  in each target..." & vbCrLf
      Dim msg43 As String = "Step 4, part 3:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were deleted from the Windows operating system registry..." _
                 & vbCrLf
      Dim fmt2x As String = "  {0,9}: Set {1} = ""{2}"""
      '-------------------------------------------------------------------------------------
      ' Step 1:
      ' Check whether the sample environment variables already exist.
      ' WARNING: These variables will be deleted at the end of this sample.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg1)
      CheckEachVariable()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 2:
      ' Set the environment variable for each target.
      ' This section demonstrates Environment.SetEnvironmentVariable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg2)
      ' Set the environment variable for the default target (the current process).
      Console.WriteLine(fmt2x, "(default)", myVarA, existsA)
      Environment.SetEnvironmentVariable(myVarA, existsA)

      ' Set the environment variable for the the current process.
      Console.WriteLine(fmt2x, "Process", myVarB, existsB)
      Environment.SetEnvironmentVariable(myVarB, existsB, EnvironmentVariableTarget.Process)

      ' Set the environment variable for the the current user.
      Console.WriteLine(fmt2x, "User", myVarC, existsC)
      Environment.SetEnvironmentVariable(myVarC, existsC, EnvironmentVariableTarget.User)

      ' Set the environment variable for the the local machine.
      Console.WriteLine(fmt2x, "Machine", myVarD, existsD)
      Environment.SetEnvironmentVariable(myVarD, existsD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 1:
      ' Display the environment variables in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg31)
      CheckAllVariables()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 2:
      ' Check whether the User and Machine environment variables were created in the Windows
      ' operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg32)
      CheckRegistry()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 1:
      ' Delete the environment variables created for this sample.
      ' This section demonstrates using Environment.SetEnvironmentVariable to delete an
      ' environment variable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg41)
      Environment.SetEnvironmentVariable(myVarA, Nothing)
      Environment.SetEnvironmentVariable(myVarB, Nothing, EnvironmentVariableTarget.Process)
      Environment.SetEnvironmentVariable(myVarC, Nothing, EnvironmentVariableTarget.User)
      Environment.SetEnvironmentVariable(myVarD, Nothing, EnvironmentVariableTarget.Machine)
      '-------------------------------------------------------------------------------------
      ' Step 4, part 2:
      ' Check whether the environment variables were deleted in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg42)
      CheckEachVariable()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 3:
      ' Check whether the User and Machine environment variables were deleted from the
      ' Windows operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg43)
      CheckRegistry()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Step 1:
'  Check whether the environment variables already exist in
'  the various targets...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'
'Step 2:
'  Set the environment variable for each target...
'
'  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
'    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
'       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
'    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"
'
'Step 3, part 1:
'  Display the environment variables in each target...
'
'Process:
'  B_GETSET_ENVAR_SAMPLE exists in Process.
'  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).
'
'User:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'Machine:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 3, part 2:
'  Check whether the User and Machine environment variables
'  were created in the Windows operating system registry...
'
'"Environment" key:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 4, part 1:
'  Delete the environment variables created for this sample...
'
'Step 4, part 2:
'  Check whether the environment variables were deleted
'  in each target...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Step 4, part 3:
'  Check whether the User and Machine environment variables
'  were deleted from the Windows operating system registry...
'
'"Environment" key:
'  Environment variable doesn't exist.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  Environment variable doesn't exist.
'

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using System;
using System.Collections;
using Microsoft.Win32;

class Sample
{
//-------------------------------------------------------------------------------------
// Globals:
//-------------------------------------------------------------------------------------
    protected static string fmtNameValue = "  {0} {1}.";
    protected static string myVarSuffix = "_GETSET_ENVAR_SAMPLE";

// Four relatively unique environment variable names.
    protected static string myVarA = "A" + myVarSuffix; // default process
    protected static string myVarB = "B" + myVarSuffix; // Current Process
    protected static string myVarC = "C" + myVarSuffix; // Current User
    protected static string myVarD = "D" + myVarSuffix; // Local Machine
//=====================================================================================
// EachVariable:
// Test whether a specific environment variable exists in a target.
// This section demonstrates Environment.GetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    protected static void EachVariable(string var, EnvironmentVariableTarget tgt)
    {
    string str;
    //
    if (0 == tgt)          // Zero means use the default target.
        str = Environment.GetEnvironmentVariable(var);
    else
        str = Environment.GetEnvironmentVariable(var, tgt);
    Console.WriteLine(fmtNameValue,
                      var, (String.IsNullOrEmpty(str) ? "doesn't exist" : str));
    }
//-------------------------------------------------------------------------------------
// CheckEachVariable:
// Uses EachVariable to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckEachVariable()
    {
    Console.WriteLine("Process:");
    EachVariable(myVarA, 0);  // Check the default target (current process)
    EachVariable(myVarB, EnvironmentVariableTarget.Process);
    EachVariable(myVarC, EnvironmentVariableTarget.Process);
    EachVariable(myVarD, EnvironmentVariableTarget.Process);
    Console.WriteLine();

    Console.WriteLine("User:");
    EachVariable(myVarA, EnvironmentVariableTarget.User);
    EachVariable(myVarB, EnvironmentVariableTarget.User);
    EachVariable(myVarC, EnvironmentVariableTarget.User);
    EachVariable(myVarD, EnvironmentVariableTarget.User);
    Console.WriteLine();

    Console.WriteLine("Machine:");
    EachVariable(myVarA, EnvironmentVariableTarget.Machine);
    EachVariable(myVarB, EnvironmentVariableTarget.Machine);
    EachVariable(myVarC, EnvironmentVariableTarget.Machine);
    EachVariable(myVarD, EnvironmentVariableTarget.Machine);
    Console.WriteLine();
    }
//=====================================================================================
// AllVariables: CheckAllVariables helper function.
// This section demonstrates Environment.GetEnvironmentVariables.
//-------------------------------------------------------------------------------------
    private static void AllVariables(EnvironmentVariableTarget tgt)
    {
    string value;
    string key;

    foreach(DictionaryEntry de in Environment.GetEnvironmentVariables(tgt))
        {
        key   = (string)de.Key;
        value = (string)de.Value;
        if (key.Contains(myVarSuffix))
            Console.WriteLine(fmtNameValue, key, value);
        }
    Console.WriteLine();
    }
//=====================================================================================
// CheckAllVariables:
// Uses AllVariables to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckAllVariables()
    {
    Console.WriteLine("Process:");
    AllVariables(EnvironmentVariableTarget.Process);

    Console.WriteLine("User:");
    AllVariables(EnvironmentVariableTarget.User);

    Console.WriteLine("Machine:");
    AllVariables(EnvironmentVariableTarget.Machine);
    }
//=====================================================================================
// ChkReg: CheckRegistry helper function.
// This function filters out irrelevant environment variables.
//-------------------------------------------------------------------------------------
    private static void ChkReg(RegistryKey rk)
    {
    bool exists = false;
    string registryNone = "  Environment variable doesn't exist.";

    foreach (string s in rk.GetValueNames())
        {
        if (s.Contains(myVarSuffix))
            {
            Console.WriteLine(fmtNameValue, s, (string)rk.GetValue(s));
            exists = true;
            }
        }
    if (exists == false)
        Console.WriteLine(registryNone);
    Console.WriteLine();
    }
//-------------------------------------------------------------------------------------
// CheckRegistry:
// Uses ChkReg to display the User and Machine environment variables in the registry.
//-------------------------------------------------------------------------------------
    protected static void CheckRegistry()
    {
    string subkeyU = @"Environment";
    string subkeyM = @"System\CurrentControlSet\Control\Session Manager\Environment";
    string fmtSubkey = "\"{0}\" key:";

    Console.WriteLine(fmtSubkey, subkeyU);
    ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU));

    Console.WriteLine(fmtSubkey, subkeyM);
    ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM));
    }
//=====================================================================================
// Main:
//-------------------------------------------------------------------------------------
    public static void Main()
    {
//-------------------------------------------------------------------------------------
// Environment variable values
//-------------------------------------------------------------------------------------
    string existsA = "exists in the default target (Process)";
    string existsB = "exists in Process";
    string existsC = "exists in User";
    string existsD = "exists in Machine";
//-------------------------------------------------------------------------------------
// Messages:
//-------------------------------------------------------------------------------------
    string msg1  = "Step 1:\n" +
                       "  Check whether the environment variables already exist in \n" +
                       "  the various targets...\n";
    string msg2  = "Step 2:\n" +
                       "  Set the environment variable for each target...\n";
    string msg31 = "Step 3, part 1:\n" +
                       "  Display the environment variables in each target...\n";
    string msg32 = "Step 3, part 2:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were created in the Windows operating system registry...\n";
    string msg41 = "Step 4, part 1:\n" +
                       "  Delete the environment variables created for this sample...\n";
    string msg42 = "Step 4, part 2:\n" +
                       "  Check whether the environment variables were deleted \n" +
                       "  in each target...\n";
    string msg43 = "Step 4, part 3:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were deleted from the Windows operating system registry...\n";
    string fmt2x   = "  {0,9}: Set {1} = \"{2}\"";
//-------------------------------------------------------------------------------------
// Step 1:
// Check whether the sample environment variables already exist.
// WARNING: These variables will be deleted at the end of this sample.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg1);
    CheckEachVariable();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 2:
// Set the environment variable for each target.
// This section demonstrates Environment.SetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg2);
// Set the environment variable for the default target (the current process).
    Console.WriteLine(fmt2x, "(default)", myVarA, existsA);
    Environment.SetEnvironmentVariable(myVarA, existsA);

// Set the environment variable for the the current process.
    Console.WriteLine(fmt2x, "Process", myVarB, existsB);
    Environment.SetEnvironmentVariable(myVarB, existsB,
        EnvironmentVariableTarget.Process);

// Set the environment variable for the the current user.
    Console.WriteLine(fmt2x, "User", myVarC, existsC);
    Environment.SetEnvironmentVariable(myVarC, existsC,
        EnvironmentVariableTarget.User);

// Set the environment variable for the the local machine.
    Console.WriteLine(fmt2x, "Machine", myVarD, existsD);
    Environment.SetEnvironmentVariable(myVarD, existsD,
        EnvironmentVariableTarget.Machine);
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 1:
// Display the environment variables in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg31);
    CheckAllVariables();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 2:
// Check whether the User and Machine environment variables were created in the Windows
// operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg32);
    CheckRegistry();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 4, part 1:
// Delete the environment variables created for this sample.
// This section demonstrates using Environment.SetEnvironmentVariable to delete an
// environment variable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg41);
    Environment.SetEnvironmentVariable(myVarA, null);
    Environment.SetEnvironmentVariable(myVarB, null, EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable(myVarC, null, EnvironmentVariableTarget.User);
    Environment.SetEnvironmentVariable(myVarD, null, EnvironmentVariableTarget.Machine);
//-------------------------------------------------------------------------------------
// Step 4, part 2:
// Check whether the environment variables were deleted in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg42);
    CheckEachVariable();
//-------------------------------------------------------------------------------------
// Step 4, part 3:
// Check whether the User and Machine environment variables were deleted from the
// Windows operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg43);
    CheckRegistry();
    }
}
/*
This example produces the following results:

Step 1:
  Check whether the environment variables already exist in
  the various targets...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
  Set the environment variable for each target...

  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
  Display the environment variables in each target...

Process:
  B_GETSET_ENVAR_SAMPLE exists in Process.
  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
  C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
  Check whether the User and Machine environment variables
  were created in the Windows operating system registry...

"Environment" key:
  C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
  Delete the environment variables created for this sample...

Step 4, part 2:
  Check whether the environment variables were deleted
  in each target...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
  Check whether the User and Machine environment variables
  were deleted from the Windows operating system registry...

"Environment" key:
  Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  Environment variable doesn't exist.
*/

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using namespace System;
using namespace System::Collections;
using namespace Microsoft::Win32;

namespace EnvironmentVariablesSample
{
    public ref class TestEnvironmentVariables sealed
    {
    public:
        // DoTest: Test get/set environment variables
        static void DoTest()
        {
            // Environment variable values
            String^ existsA = "exists in the default target"
                " (Process)";
            String^ existsB = "exists in Process";
            String^ existsC = "exists in User";
            String^ existsD = "exists in Machine";
            // Messages:
            String^ messageStep1 = "Step 1:\n"
                "  Check whether the environment variables already"
                " exist in \n"
                "  the various targets...\n";
            String^ messageStep2 = "Step 2:\n"
                "  Set the environment variable for each"
                " target...\n";
            String^ messageStep3Part1 = "Step 3, part 1:\n"
                "  Display the environment variables in each"
                " target...\n";
            String^ messageStep3Part2 = "Step 3, part 2:\n"
                "  Check whether the User and Machine "
                " environment variables \n"
                "  were created in the Windows operating"
                " system registry...\n";
            String^ messageStep4Part1 = "Step 4, part 1:\n"
                "  Delete the environment variables created "
                "for this sample...\n";
            String^ messageStep4Part2 = "Step 4, part 2:\n"
                "  Check whether the environment variables were "
                "deleted \n"
                "  in each target...\n";
            String^ messageStep4Part3 = "Step 4, part 3:\n"
                "  Check whether the User and Machine environment "
                "variables \n"
                "  were deleted from the Windows operating system "
                "registry...\n";
            String^ step2Format = "  {0,9}: Set {1} = \"{2}\"";

            // Step 1:
            // Check whether the sample environment variables already
            // exist.
            // WARNING: These variables will be deleted at the end of
            // this sample.
            Console::WriteLine(messageStep1);
            CheckVariables();
            Console::WriteLine();

            // Step 2:
            // Set the environment variable for each target.
            // This section demonstrates
            // Environment.SetEnvironmentVariable.
            Console::WriteLine(messageStep2);

            // Set the environment variable for the default target
            // (the current process).
            Console::WriteLine(step2Format, "(default)", VariableA,
                existsA);
            Environment::SetEnvironmentVariable(VariableA, existsA);

            // Set the environment variable
            // for the the current process.
            Console::WriteLine(step2Format, "Process", VariableB,
                existsB);
            Environment::SetEnvironmentVariable(VariableB, existsB,
                EnvironmentVariableTarget::Process);

            // Set the environment variable for the the current user.
            Console::WriteLine(step2Format, "User", VariableC,
                existsC);
            Environment::SetEnvironmentVariable(VariableC, existsC,
                EnvironmentVariableTarget::User);

            // Set the environment variable for the the local machine.
            Console::WriteLine(step2Format, "Machine", VariableD,
                existsD);
            Environment::SetEnvironmentVariable(VariableD, existsD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();

            // Step 3, part 1:
            // Display the environment variables in each target.
            Console::WriteLine(messageStep3Part1);
            PrintVariables();
            Console::WriteLine();

            // Step 3, part 2:
            // Check whether the User and Machine environment
            // variables were created in the Windows operating system
            // registry.
            Console::WriteLine(messageStep3Part2);
            CheckRegistryVariables();
            Console::WriteLine();

            // Step 4, part 1:
            // Delete the environment variables created for this
            // sample. This section demonstrates using
            // Environment.SetEnvironmentVariable to delete an
            // environment variable.
            Console::WriteLine(messageStep4Part1);
            Environment::SetEnvironmentVariable(VariableA, nullptr);
            Environment::SetEnvironmentVariable(VariableB, nullptr,
                EnvironmentVariableTarget::Process);
            Environment::SetEnvironmentVariable(VariableC, nullptr,
                EnvironmentVariableTarget::User);
            Environment::SetEnvironmentVariable(VariableD, nullptr,
                EnvironmentVariableTarget::Machine);

            // Step 4, part 2:
            // Check whether the environment variables were deleted
            // in each target.
            Console::WriteLine(messageStep4Part2);
            CheckVariables();

            // Step 4, part 3:
            // Check whether the User and Machine environment
            // variables were deleted from the Windows operating
            // system registry.
            Console::WriteLine(messageStep4Part3);
            CheckRegistryVariables();
        }

    protected:
        // Globals:
        literal String^ NameValueFormat = "  {0} {1}.";
        literal String^ VariableSuffix = "_GETSET_ENVAR_SAMPLE";

        // Four relatively unique environment variable names.
        // default process

        literal String^ VariableA = "A_GETSET_ENVAR_SAMPLE";

        // Current Process
        literal String^ VariableB = "B_GETSET_ENVAR_SAMPLE";

        // Current User
        literal String^ VariableC = "C_GETSET_ENVAR_SAMPLE";

        // Local Machine
        literal String^ VariableD = "D_GETSET_ENVAR_SAMPLE";

    private:
        // CheckVariablesInTarget:
        // Test whether a specific environment variable exists
        // in a target. This section demonstrates
        // Environment.GetEnvironmentVariable.
        static void CheckVariablesInTarget(String^ variable,
            EnvironmentVariableTarget target)
        {
            String^ variableName;

            // Zero means use the default target.
            if (target == (EnvironmentVariableTarget) 0)
            {
                variableName =
                    Environment::GetEnvironmentVariable(variable);
            }
            else
            {
                variableName = Environment::GetEnvironmentVariable(
                    variable, target);
            }
            Console::WriteLine(NameValueFormat, variable,
                (String::IsNullOrEmpty(variableName) ?
                "doesn't exist" : variableName));
        }

        // CheckVariable:
        // Uses CheckVariablesInTarget to test whether each
        // environment variable exists in a target.
        static void CheckVariables()
        {
            Console::WriteLine("Process:");

            // Check the default target(current process)
            CheckVariablesInTarget(VariableA,
                (EnvironmentVariableTarget) 0);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Process);
            Console::WriteLine();

            Console::WriteLine("User:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::User);
            Console::WriteLine();

            Console::WriteLine("Machine:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();
        }

        // PrintVariablesFromTarget: PrintVariables helper function.
        // This section demonstrates
        // Environment.GetEnvironmentVariables.
        static void PrintVariablesFromTarget(
            EnvironmentVariableTarget target)
        {
            String^ valueString;
            String^ keyString;

            for each (DictionaryEntry^ dictionary in
                Environment::GetEnvironmentVariables(target))
            {
                keyString = safe_cast<String^> (dictionary->Key);
                valueString = safe_cast<String^> (dictionary->Value);
                if (keyString->Contains(VariableSuffix))
                    Console::WriteLine(NameValueFormat, keyString,
                    valueString);
            }
            Console::WriteLine();
        }

        // PrintVariables:
        // Uses PrintVariablesFromTarget to test whether
        // each environment variable exists in a target.
        static void PrintVariables()
        {
            Console::WriteLine("Process:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Process);

            Console::WriteLine("User:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::User);

            Console::WriteLine("Machine:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Machine);
        }

        // CheckRegistryVariablesForKey: CheckRegistryVariables
        // helper function. This function filters out irrelevant
        // environment variables.
        static void CheckRegistryVariablesForKey(RegistryKey^ targetKey)
        {
            bool exists = false;

            for each (
                String^ variableName in targetKey->GetValueNames())
            {
                if (variableName->Contains(VariableSuffix))
                {
                    String^ variableValue =
                        safe_cast<String^>
                        (targetKey->GetValue(variableName));
                    Console::WriteLine(NameValueFormat, variableName,
                        variableValue);
                    exists = true;
                }
            }
            if (!exists)
            {
                Console::WriteLine(
                    "  Environment variable doesn't exist.");
            }
            Console::WriteLine();
        }

        // CheckRegistryVariables:
        // Uses CheckRegistryVariables to display the User and
        // Machine environment variables in the registry.
        static void CheckRegistryVariables()
        {
            String^ subkeyUser = "Environment";
            String^ subkeyMachine = "System\\CurrentControlSet\\"
                "Control\\Session Manager\\Environment";
            String^ subkeyFormat = "\"{0}\" key:";

            Console::WriteLine(subkeyFormat, subkeyUser);
            CheckRegistryVariablesForKey(
                Registry::CurrentUser->OpenSubKey(subkeyUser));

            Console::WriteLine(subkeyFormat, subkeyMachine);
            CheckRegistryVariablesForKey(
                Registry::LocalMachine->OpenSubKey(subkeyMachine));
        }
    };
};

using namespace EnvironmentVariablesSample;

int main()
{
    TestEnvironmentVariables::DoTest();
}

/*
This example produces the following results:

Step 1:
Check whether the environment variables already exist in
the various targets...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
Set the environment variable for each target...

(default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
Display the environment variables in each target...

Process:
B_GETSET_ENVAR_SAMPLE exists in Process.
A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
Check whether the User and Machine environment variables
were created in the Windows operating system registry...

"Environment" key:
C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
Delete the environment variables created for this sample...

Step 4, part 2:
Check whether the environment variables were deleted
in each target...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
Check whether the User and Machine environment variables
were deleted from the Windows operating system registry...

"Environment" key:
Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
Environment variable doesn't exist.
*/
  • EnvironmentPermission

    用于对环境变量的完全访问。关联的枚举：PermissionState..::.Unrestricted 用于对环境变量的完全访问。关联的枚举：PermissionState..::.Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
SetEnvironmentVariable 重载
System 命名空间
GetEnvironmentVariable
GetEnvironmentVariables
EnvironmentVariableTarget


Environment 属性

Environment 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Environment 类

Environment 类型公开以下成员。

名称 说明
页首

参考

Environment 类
System 命名空间


Environment ..::.CommandLine 属性

Environment
.
.
::
.
CommandLine 属性
Environment 类

获取该进程的命令行。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property CommandLine As String
    Get
public static string CommandLine { get; }
public:
static property String^ CommandLine {
    String^ get ();
}
static member CommandLine : string

属性值

类型： System String
包含命令行参数的字符串。

该属性允许访问在启动当前进程时在命令行上指定的程序名和任何参数。

程序名可以（但不是必须）包含路径信息。使用 GetCommandLineArgs 方法可检索在字符串数组中分析和存储的命令行信息。 程序名可以（但不是必须）包含路径信息。使用 GetCommandLineArgs 方法可检索在字符串数组中分析和存储的命令行信息。

命令行缓冲区的最大大小并不设置为特定字符数；它根据计算机上运行的 Windows 操作系统而有所不同。

Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional x64 Edition, Windows Server 2003 平台说明： Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional x64 Edition, Windows Server 2003 平台说明：可执行文件的名称不包含该路径。

Windows 98, Windows Millennium Edition 平台说明： Windows 98, Windows Millennium Edition 平台说明：可执行文件的名称包含该路径。长文件名（非 8.3 名称）可以缩短到它们的 8.3 表示形式。 Windows 98, Windows Millennium Edition 平台说明：可执行文件的名称包含该路径。长文件名（非 8.3 名称）可以缩短到它们的 8.3 表示形式。

下面的示例显示其自己的命令行。

' Sample for the Environment.CommandLine property.
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      '  Invoke this sample with an arbitrary set of command line arguments.
      Console.WriteLine("CommandLine: {0}", Environment.CommandLine)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'C:\>CommandLine ARBITRARY TEXT
'
'CommandLine: CommandLine ARBITRARY TEXT
'

// Sample for the Environment.CommandLine property.
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
//  Invoke this sample with an arbitrary set of command line arguments.
    Console.WriteLine("CommandLine: {0}", Environment.CommandLine);
    }
}
/*
This example produces the following results:

C:\>env0 ARBITRARY TEXT

CommandLine: env0 ARBITRARY TEXT
*/

// Sample for the Environment::CommandLine property.
using namespace System;
int main()
{
   Console::WriteLine();

   //  Invoke this sample with an arbitrary set of command line arguments.
   Console::WriteLine( "CommandLine: {0}", Environment::CommandLine );
}

/*
This example produces the following results:

C:\>env0 ARBITRARY TEXT

CommandLine: env0 ARBITRARY TEXT
*/
  • EnvironmentPermission

    用于对 PATH 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read 用于对 PATH 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间
GetCommandLineArgs


Environment ..::.CurrentDirectory 属性

Environment
.
.
::
.
CurrentDirectory 属性
Environment 类

获取或设置当前工作目录的完全限定路径。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property CurrentDirectory As String
    Get
    Set
public static string CurrentDirectory { get; set; }
public:
static property String^ CurrentDirectory {
    String^ get ();
    void set (String^ value);
}
static member CurrentDirectory : string with get, set

属性值

类型： System String
包含目录路径的字符串。
异常 | 条件
ArgumentException | 尝试设置为空字符串 ("")。
ArgumentNullException | 尝试设置为 null.
IOException | 发生了 I/O 错误。
DirectoryNotFoundException | 尝试设置一个无法找到的本地路径。
SecurityException | 调用方没有适当的权限。

按照定义，如果该进程在本地或网络驱动器的根目录中启动，则此属性的值为驱动器名称后跟一个尾部反斜杠（如“C:\”）。如果该进程在子目录中启动，则此属性的值为不带尾部反斜杠的驱动器和子目录路径（如“C:\mySubDirectory”）。 按照定义，如果该进程在本地或网络驱动器的根目录中启动，则此属性的值为驱动器名称后跟一个尾部反斜杠（如“C:\”）。如果该进程在子目录中启动，则此属性的值为不带尾部反斜杠的驱动器和子目录路径（如“C:\mySubDirectory”）。

下面的示例演示如何设置 CurrentDirectory 属性。

' Change the directory to %WINDIR%
Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir")
Dim info As New DirectoryInfo(".")
Console.WriteLine(("Directory Info:   " + info.FullName))

        // Change the directory to %WINDIR%
        Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir");
        DirectoryInfo info = new DirectoryInfo(".");
            lock(info)
            {
            Console.WriteLine("Directory Info:   "+info.FullName);
            }

// Change the directory to %WINDIR%
Environment::CurrentDirectory = Environment::GetEnvironmentVariable( "windir" );
DirectoryInfo^ info = gcnew DirectoryInfo( "." );
System::Threading::Monitor::Enter( info );
try
{
   Console::WriteLine( "Directory Info:   {0}", info->FullName );
}
finally
{
   System::Threading::Monitor::Exit( info );
}
  • SecurityPermission

    用于在 SET 操作中向文件或目录写入信息。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 用于在 SET 操作中向文件或目录写入信息。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

  • FileIOPermission

    用于在 GET 操作中访问路径本身包含的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于在 GET 操作中访问路径本身包含的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.ExitCode 属性

Environment
.
.
::
.
ExitCode 属性
Environment 类

获取或设置进程的退出代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Property ExitCode As Integer
    Get
    Set
public static int ExitCode { get; set; }
public:
static property int ExitCode {
    int get ();
    void set (int value);
}
static member ExitCode : int with get, set

属性值

类型： System Int32
包含退出代码的 32 位带符号整数。默认值为零。 包含退出代码的 32 位带符号整数。默认值为零。

如果 Main 方法返回 void，则您可以使用此属性来设置将返回到调用环境的退出代码。如果 Main 没有返回 void，则忽略此属性。此属性的初始值为零。 如果 Main 方法返回 void，则您可以使用此属性来设置将返回到调用环境的退出代码。如果 Main 没有返回 void，则忽略此属性。此属性的初始值为零。 如果 Main 方法返回 void，则您可以使用此属性来设置将返回到调用环境的退出代码。如果 Main 没有返回 void，则忽略此属性。此属性的初始值为零。

可以使用此属性从应用程序返回成功代码。例如，您可以使用此属性来控制脚本所调用的一组应用程序的执行。 可以使用此属性从应用程序返回成功代码。例如，您可以使用此属性来控制脚本所调用的一组应用程序的执行。

下面的示例显示其本身的退出代码。

' Sample for the Environment.ExitCode property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("ExitCode: {0}", Environment.ExitCode)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'ExitCode: 0
'

// Sample for the Environment.ExitCode property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("ExitCode: {0}", Environment.ExitCode);
    }
}
/*
This example produces the following results:

ExitCode: 0
*/

// Sample for the Environment::ExitCode property
using namespace System;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "ExitCode: {0}", Environment::ExitCode );
}

/*
This example produces the following results:

ExitCode: 0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.HasShutdownStarted 属性

Environment
.
.
::
.
HasShutdownStarted 属性
Environment 类

获取一个值，该值指示公共语言运行时 (CLR) 是否正在关闭。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property HasShutdownStarted As Boolean
    Get
public static bool HasShutdownStarted { get; }
public:
static property bool HasShutdownStarted {
    bool get ();
}
static member HasShutdownStarted : bool

属性值

类型： System Boolean
如果公共语言运行时正在关闭，则为 true；否则为 false。

将代码中的此属性用于 Finalize 方法，以避免访问静态字段所引用的对象，因为可能已经终止了该对象。

当 CLR 关闭时，CLR 的执行引擎会启动终结器线程以最终确定对象，然后再通过垃圾回收器回收。接着，它引发 ProcessExit 事件。此时，系统行为不再正常。 当 CLR 关闭时，CLR 的执行引擎会启动终结器线程以最终确定对象，然后再通过垃圾回收器回收。接着，它引发 ProcessExit 事件。此时，系统行为不再正常。 当 CLR 关闭时，CLR 的执行引擎会启动终结器线程以最终确定对象，然后再通过垃圾回收器回收。接着，它引发 ProcessExit 事件。此时，系统行为不再正常。

HasShutdownStarted 属性仅在启动了终结器线程之后返回 true。如果尚未启动终结器线程，此属性将返回 false。 HasShutdownStarted 属性仅在启动了终结器线程之后返回 true。如果尚未启动终结器线程，此属性将返回 false。

使用 HasShutdownStarted 属性确定当 CLR 正在关闭时是否应该在对象的 Finalize 方法中执行任何必要的清理操作。完成后仍可访问对象，但对象处于无效状态，因而无法使用。在终止代码中确定关闭非常重要，因为很难对已终止的对象执行终止。 使用 HasShutdownStarted 属性确定当 CLR 正在关闭时是否应该在对象的 Finalize 方法中执行任何必要的清理操作。完成后仍可访问对象，但对象处于无效状态，因而无法使用。在终止代码中确定关闭非常重要，因为很难对已终止的对象执行终止。 使用 HasShutdownStarted 属性确定当 CLR 正在关闭时是否应该在对象的 Finalize 方法中执行任何必要的清理操作。完成后仍可访问对象，但对象处于无效状态，因而无法使用。在终止代码中确定关闭非常重要，因为很难对已终止的对象执行终止。

还可以通过监视 ProcessExit 事件来确定 CLR 是否正在关闭。但是，可以只从默认的应用程序域执行此操作。 还可以通过监视 ProcessExit 事件来确定 CLR 是否正在关闭。但是，可以只从默认的应用程序域执行此操作。

在 Finalize 方法中，不要访问静态字段所引用的以及具有终止方法的其他对象，因为可能已经终止了这些对象。此规则的例外是 Console 类，该类包含引用流对象的静态字段；您始终能够向系统控制台进行写入（即使在系统关闭期间也能进行写入）。 在 Finalize 方法中，不要访问静态字段所引用的以及具有终止方法的其他对象，因为可能已经终止了这些对象。此规则的例外是 Console 类，该类包含引用流对象的静态字段；您始终能够向系统控制台进行写入（即使在系统关闭期间也能进行写入）。

终结器不应依赖可能使用可终结对象的静态变量

下面的示例显示公共语言运行时是否正在关闭。

' Sample for the Environment.HasShutdownStarted property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("HasShutdownStarted: {0}", Environment.HasShutdownStarted)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'HasShutdownStarted: False
'

// Sample for the Environment.HasShutdownStarted property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("HasShutdownStarted: {0}", Environment.HasShutdownStarted);
    }
}
/*
This example produces the following results:

HasShutdownStarted: False
*/

// Sample for the Environment::HasShutdownStarted property
using namespace System;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "HasShutdownStarted: {0}", Environment::HasShutdownStarted );
}

/*
This example produces the following results:

HasShutdownStarted: False
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间
AppDomain IsFinalizingForUnload


Environment ..::.Is64BitOperatingSystem 属性

Environment
.
.
::
.
Is64BitOperatingSystem 属性
Environment 类

确定当前操作系统是否为 64 位操作系统。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Is64BitOperatingSystem As Boolean
    Get
public static bool Is64BitOperatingSystem { get; }
public:
static property bool Is64BitOperatingSystem {
    bool get ();
}
static member Is64BitOperatingSystem : bool

属性值

类型： System Boolean
如果操作系统为 64 位操作系统，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.Is64BitProcess 属性

Environment
.
.
::
.
Is64BitProcess 属性
Environment 类

确定当前进程是否为 64 位进程。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Is64BitProcess As Boolean
    Get
public static bool Is64BitProcess { get; }
public:
static property bool Is64BitProcess {
    bool get ();
}
static member Is64BitProcess : bool

属性值

类型： System Boolean
如果进程为 64 位进程，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.MachineName 属性

Environment
.
.
::
.
MachineName 属性
Environment 类

获取此本地计算机的 NetBIOS 名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property MachineName As String
    Get
public static string MachineName { get; }
public:
static property String^ MachineName {
    String^ get ();
}
static member MachineName : string

属性值

类型： System String
包含此计算机的名称的字符串。
异常 | 条件
InvalidOperationException | 无法获取此计算机的名称。

此计算机的名称是在系统启动期间从注册表中读取名称时建立的。如果此计算机是群集中的节点，则返回该节点的名称。 此计算机的名称是在系统启动期间从注册表中读取名称时建立的。如果此计算机是群集中的节点，则返回该节点的名称。

下面的示例显示运行代码示例的计算机名。（出于安全原因，示例输出中省略了计算机名。） 下面的示例显示运行代码示例的计算机名。（出于安全原因，示例输出中省略了计算机名。）

' Sample for the Environment.MachineName property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      '  <-- Keep this information secure! -->
      Console.WriteLine("MachineName: {0}", Environment.MachineName)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'(Any result that is lengthy, specific to the machine on which this sample was tested,
'or reveals information that should remain secure, has been omitted
'and marked "!---OMITTED---!".)
'
'MachineName: !---OMITTED---!
'

// Sample for the Environment.MachineName property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
//  <-- Keep this information secure! -->
    Console.WriteLine("MachineName: {0}", Environment.MachineName);
    }
}
/*
This example produces the following results:
(Any result that is lengthy, specific to the machine on which this sample was tested, or reveals information that should remain secure, has been omitted and marked "!---OMITTED---!".)

MachineName: !---OMITTED---!
*/

// Sample for the Environment::MachineName property
using namespace System;
int main()
{
   Console::WriteLine();

   //  <-- Keep this information secure! -->
   Console::WriteLine( "MachineName: {0}", Environment::MachineName );
}

/*
This example produces the following results:
(Any result that is lengthy, specific to the machine on which this sample was tested, or reveals information that should remain secure, has been omitted and marked S"!---OMITTED---!".)

MachineName: !---OMITTED---!
*/
  • EnvironmentPermission

    用于对 COMPUTERNAME 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read 用于对 COMPUTERNAME 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.NewLine 属性

Environment
.
.
::
.
NewLine 属性
Environment 类

获取为此环境定义的换行字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property NewLine As String
    Get
public static string NewLine { get; }
public:
static property String^ NewLine {
    String^ get ();
}
static member NewLine : string

属性值

类型： System String
对于非 Unix 平台为包含“\r\n”的字符串，对于 Unix 平台则为包含“\n”的字符串。

NewLine 的属性值是一个专门为当前平台和 .NET Framework 实现而自定义的常数。有关属性值中转义字符的更多信息，请参见 字符转义。 NewLine 的属性值是一个专门为当前平台和 .NET Framework 实现而自定义的常数。有关属性值中转义字符的更多信息，请参见 字符转义。

NewLine 提供的功能常常是换行符 (newline)、换行符 (line feed)、分行符、回车符、CRLF 和行尾等术语表示的含义。

NewLine 可以与语言特定的换行支持一起使用，如 Microsoft C# 和 C/C++ 中的“\r”和“\n”，或 Microsoft Visual Basic 中的 vbCrLf。

NewLine 自动附加到 Console..::.WriteLine 和 StringBuilder..::.AppendLine 方法处理的文本。

下面的示例显示由换行符分隔的三行。

' Sample for the Environment.NewLine property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("NewLine: {0}  first line{0}  second line{0}  third line", _
                             Environment.NewLine)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'NewLine:
'  first line
'  second line
'  third line
'

// Sample for the Environment.NewLine property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("NewLine: {0}  first line{0}  second line{0}  third line",
                          Environment.NewLine);
    }
}
/*
This example produces the following results:

NewLine:
  first line
  second line
  third line
*/

// Sample for the Environment::NewLine property
using namespace System;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "NewLine: {0}  first line {0}  second line {0}  third line", Environment::NewLine );
}

/*
This example produces the following results:

NewLine:
first line
second line
third line
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.OSVersion 属性

Environment
.
.
::
.
OSVersion 属性
Environment 类

获取包含当前平台标识符和版本号的 OperatingSystem 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property OSVersion As OperatingSystem
    Get
public static OperatingSystem OSVersion { get; }
public:
static property OperatingSystem^ OSVersion {
    OperatingSystem^ get ();
}
static member OSVersion : OperatingSystem

属性值

类型： System OperatingSystem
一个包含平台标识符和版本号的对象。
异常 | 条件
InvalidOperationException | 该属性无法获得系统版本。 - 或 - 获得的平台标识符不是 PlatformID 的成员。

在某些情况下，OSVersion 属性无法返回与指定用于 Windows 程序兼容性模式功能的版本相匹配的操作系统版本。

下面的示例显示运行代码示例的计算机的平台标识符和版本号。

' Sample for the Environment.OSVersion property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString())
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'OSVersion: Microsoft Windows NT 5.1.2600.0
'

// Sample for the Environment.OSVersion property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString());
    }
}
/*
This example produces the following results:

OSVersion: Microsoft Windows NT 5.1.2600.0
*/

// Sample for the Environment::OSVersion property
using namespace System;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "OSVersion: {0}", Environment::OSVersion );
}

/*
This example produces the following results:

OSVersion: Microsoft Windows NT 5.1.2600.0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.ProcessorCount 属性

Environment
.
.
::
.
ProcessorCount 属性
Environment 类

获取当前计算机上的处理器数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property ProcessorCount As Integer
    Get
public static int ProcessorCount { get; }
public:
static property int ProcessorCount {
    int get ();
}
static member ProcessorCount : int

属性值

类型： System Int32
指定当前计算机上处理器个数的 32 位带符号整数。没有默认值。 指定当前计算机上处理器个数的 32 位带符号整数。没有默认值。

下面的示例阐释了 ProcessorCount 属性。

' This example demonstrates the
'     Environment.ProcessorCount property.
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine("The number of processors " & _
                        "on this computer is {0}.", _
                        Environment.ProcessorCount)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'The number of processors on this computer is 1.
'

// This example demonstrates the
//     Environment.ProcessorCount property.
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine("The number of processors " +
        "on this computer is {0}.",
        Environment.ProcessorCount);
    }
}
/*
This example produces the following results:

The number of processors on this computer is 1.
*/

// This example demonstrates the
//     Environment.ProcessorCount property.
using namespace System;
int main()
{
   Console::WriteLine( "The number of processors on this computer is {0}.", Environment::ProcessorCount );
}

/*
This example produces the following results:

The number of processors on this computer is 1.
*/
  • EnvironmentPermission

    用于对 NUMBER_OF_PROCESSORS 环境变量进行读访问。关联的枚举：Read 用于对 NUMBER_OF_PROCESSORS 环境变量进行读访问。关联的枚举：Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.StackTrace 属性

Environment
.
.
::
.
StackTrace 属性
Environment 类

获取当前的堆栈跟踪信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property StackTrace As String
    Get
public static string StackTrace { get; }
public:
static property String^ StackTrace {
    String^ get ();
}
static member StackTrace : string

属性值

类型： System String
包含堆栈跟踪信息的字符串。此值可为 String..::.Empty。 包含堆栈跟踪信息的字符串。此值可为 String..::.Empty。
异常 | 条件
ArgumentOutOfRangeException | 请求的堆栈跟踪信息超出范围。

StackTrace 属性以逆向时间顺序列出了方法调用，即首先描述最近的方法调用，然后为堆栈上的每个方法调用都列出一行堆栈跟踪信息。但是，由于优化期间发生的代码转换，StackTrace 属性报告的方法调用可能没有预期的多。 StackTrace 属性以逆向时间顺序列出了方法调用，即首先描述最近的方法调用，然后为堆栈上的每个方法调用都列出一行堆栈跟踪信息。但是，由于优化期间发生的代码转换，StackTrace 属性报告的方法调用可能没有预期的多。

说明 说明

对于堆栈跟踪信息的按类分层视图，请使用 StackTrace 类。

StackTrace 属性按如下所示设置每个方法调用的堆栈跟踪信息：

“at FullClassName .MethodName ( MethodParams ) in FileName :line LineNumber” “at FullClassName .MethodName ( MethodParams ) in FileName :line LineNumber”

文字“at”前面有三个空格，如果调试符号不可用，文字“in”和“:line”将被忽略。占位符 FullClassName、MethodName、MethodParms、FileName 和 LineNumber 均由实际的值替换，这些值定义如下： 文字“at”前面有三个空格，如果调试符号不可用，文字“in”和“:line”将被忽略。占位符 FullClassName、MethodName、MethodParms、FileName 和 LineNumber 均由实际的值替换，这些值定义如下：

FullClassName

类的全名，其中包括命名空间。

MethodName

方法名。

MethodParms

参数类型/名称对的列表。每对用逗号（“,”）分隔。如果 MethodName 不带参数，则省略此信息。 参数类型/名称对的列表。每对用逗号（“,”）分隔。如果 MethodName 不带参数，则省略此信息。 参数类型/名称对的列表。每对用逗号（“,”）分隔。如果 MethodName 不带参数，则省略此信息。

FileName

在其中声明 MethodName 方法的源文件的名称。如果调试符号不可用，则省略此信息。 在其中声明 MethodName 方法的源文件的名称。如果调试符号不可用，则省略此信息。

LineNumber

FileName 中某一行的行号，该行包含的源代码来自调用堆栈中指令的 MethodName。如果调试符号不可用，则省略此信息。 FileName 中某一行的行号，该行包含的源代码来自调用堆栈中指令的 MethodName。如果调试符号不可用，则省略此信息。

下面的示例阐释了 StackTrace 属性。

' Sample for the Environment.StackTrace property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("StackTrace: '{0}'", Environment.StackTrace)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'StackTrace: '   at System.Environment.GetStackTrace(Exception e)
'   at System.Environment.GetStackTrace(Exception e)
'   at System.Environment.get_StackTrace()
'   at Sample.Main()'
'

// Sample for the Environment.StackTrace property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("StackTrace: '{0}'", Environment.StackTrace);
    }
}
/*
This example produces the following results:

StackTrace: '   at System.Environment.GetStackTrace(Exception e)
   at System.Environment.GetStackTrace(Exception e)
   at System.Environment.get_StackTrace()
   at Sample.Main()'
*/

// Sample for the Environment::StackTrace property
using namespace System;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "StackTrace: ' {0}'", Environment::StackTrace );
}

/*
This example produces the following results:

StackTrace: '   at System::Environment::GetStackTrace(Exception e)
at System::Environment::GetStackTrace(Exception e)
at System::Environment::get_StackTrace()
at Sample::Main()'
*/
  • EnvironmentPermission

    用于对受权限保护的资源进行完全访问。关联的枚举：PermissionState..::.Unrestricted 用于对受权限保护的资源进行完全访问。关联的枚举：PermissionState..::.Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.SystemDirectory 属性

Environment
.
.
::
.
SystemDirectory 属性
Environment 类

获取系统目录的完全限定路径。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property SystemDirectory As String
    Get
public static string SystemDirectory { get; }
public:
static property String^ SystemDirectory {
    String^ get ();
}
static member SystemDirectory : string

属性值

类型： System String
包含目录路径的字符串。

例如，返回值为字符串“C:\WinNT\System32”。

下面的示例显示运行代码示例的计算机的系统目录。（出于安全原因，示例输出中省略了系统目录。） 下面的示例显示运行代码示例的计算机的系统目录。（出于安全原因，示例输出中省略了系统目录。）

' Sample for the Environment.SystemDirectory property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      '  <-- Keep this information secure! -->
      Console.WriteLine("SystemDirectory: {0}", Environment.SystemDirectory)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'SystemDirectory: C:\WINNT\System32
'

// Sample for the Environment.SystemDirectory property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
//  <-- Keep this information secure! -->
    Console.WriteLine("SystemDirectory: {0}", Environment.SystemDirectory);
    }
}
/*
This example produces the following results:

SystemDirectory: C:\WINNT\System32
*/

// Sample for the Environment::SystemDirectory property
using namespace System;
int main()
{
   Console::WriteLine();

   //  <-- Keep this information secure! -->
   Console::WriteLine( "SystemDirectory: {0}", Environment::SystemDirectory );
}

/*
This example produces the following results:

SystemDirectory: C:\WINNT\System32
*/
  • FileIOPermission

    用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery 用于访问路径本身的信息。关联的枚举：FileIOPermissionAccess..::.PathDiscovery

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.SystemPageSize 属性

Environment
.
.
::
.
SystemPageSize 属性
Environment 类

获取操作系统的页面文件的内存量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property SystemPageSize As Integer
    Get
public static int SystemPageSize { get; }
public:
static property int SystemPageSize {
    int get ();
}
static member SystemPageSize : int

属性值

类型： System Int32
系统页面文件中的字节数。

在确定处理内存映射文件时是否使用 MemoryMappedFileOptions..::.DelayAllocatePages 选项时，此选项可能非常有用。

在 Windows 中，此值是 SYSTEM_INFO 结构中的 dwPageSize 成员。

  • EnvironmentPermission

    用于访问系统和用户环境变量。关联的异常： 用于访问系统和用户环境变量。关联的异常：

    SecurityException PermissionState

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.TickCount 属性

Environment
.
.
::
.
TickCount 属性
Environment 类

获取系统启动后经过的毫秒数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property TickCount As Integer
    Get
public static int TickCount { get; }
public:
static property int TickCount {
    int get ();
}
static member TickCount : int

属性值

类型： System Int32
一个 32 位带符号整数，它包含自上次启动计算机以来所经过的时间（以毫秒为单位）。

该属性的值从系统计时器派生，并以 32 位有符号整数的形式存储。因此，如果系统连续运行，TickCount 将在约 24.9 天内从零递增至 Int32..::.MaxValue，然后跳至 Int32..::.MinValue（这是一个负数），再在接下来的 24.9 天内递增至零。 该属性的值从系统计时器派生，并以 32 位有符号整数的形式存储。因此，如果系统连续运行，TickCount 将在约 24.9 天内从零递增至 Int32..::.MaxValue，然后跳至 Int32..::.MinValue（这是一个负数），再在接下来的 24.9 天内递增至零。

TickCount 不同于 Ticks 属性，后者是自 1/1/0001 中午 12:00 以后经过的 100 毫微秒间隔数。

使用 DateTime..::.Now 属性可获取此计算机上的当前本地日期和时间。

下面的示例演示如何检索 TickCount 属性返回的正值。TickCount 属性以 49.8 天为一个周期在 Int32..::.MinValue（这是一个负数）和 Int32..::.MaxValue 间来回增减。此代码示例删除符号位以生成以 24.9 天为周期在零和 MaxValue 间来回增减的非负数。 下面的示例演示如何检索 TickCount 属性返回的正值。TickCount 属性以 49.8 天为一个周期在 Int32..::.MinValue（这是一个负数）和 Int32..::.MaxValue 间来回增减。此代码示例删除符号位以生成以 24.9 天为周期在零和 MaxValue 间来回增减的非负数。 下面的示例演示如何检索 TickCount 属性返回的正值。TickCount 属性以 49.8 天为一个周期在 Int32..::.MinValue（这是一个负数）和 Int32..::.MaxValue 间来回增减。此代码示例删除符号位以生成以 24.9 天为周期在零和 MaxValue 间来回增减的非负数。

' Sample for the Environment.TickCount property.
' TickCount cycles between Int32.MinValue, which is a negative
' number, and Int32.MaxValue once every 49.8 days. This sample
' removes the sign bit to yield a nonnegative number that cycles
' between zero and Int32.MaxValue once every 24.9 days.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim result As Integer = Environment.TickCount And Int32.MaxValue

      Console.WriteLine("TickCount: {0}", result)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'TickCount: 101931139
'

// Sample for the Environment.TickCount property.

// TickCount cycles between Int32.MinValue, which is a negative
// number, and Int32.MaxValue once every 49.8 days. This sample
// removes the sign bit to yield a nonnegative number that cycles
// between zero and Int32.MaxValue once every 24.9 days.

using System;

class Sample
{
    public static void Main()
    {
    int result = Environment.TickCount & Int32.MaxValue;
    Console.WriteLine("TickCount: {0}", result);
    }
}
/*
This example produces the following results:

TickCount: 101931139
*/

// Sample for the Environment::TickCount property
// TickCount cycles between Int32::MinValue, which is a negative
// number, and Int32::MaxValue once every 49.8 days. This sample
// removes the sign bit to yield a nonnegative number that cycles
// between zero and Int32::MaxValue once every 24.9 days.
using namespace System;
int main()
{
   int result = Environment::TickCount & Int32::MaxValue;
   Console::WriteLine( "TickCount: {0}", result );
}

/*
This example produces the following results:

TickCount: 101931139
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.UserDomainName 属性

Environment
.
.
::
.
UserDomainName 属性
Environment 类

获取与当前用户关联的网络域名。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property UserDomainName As String
    Get
public static string UserDomainName { get; }
public:
static property String^ UserDomainName {
    String^ get ();
}
static member UserDomainName : string

属性值

类型： System String
与当前用户关联的网络域名。
异常 | 条件
PlatformNotSupportedException | 该操作系统不支持检索网络域名。
InvalidOperationException | 无法检索此网络域名。

用户的域帐户凭据格式设置为用户的域名、'\' 字符和用户名。使用 UserDomainName 属性获取用户的域名，使用 UserName 属性获取用户名。用户名通常是用户姓和名的首字母缩写组合。 用户的域帐户凭据格式设置为用户的域名、'\' 字符和用户名。使用 UserDomainName 属性获取用户的域名，使用 UserName 属性获取用户名。用户名通常是用户姓和名的首字母缩写组合。 用户的域帐户凭据格式设置为用户的域名、'\' 字符和用户名。使用 UserDomainName 属性获取用户的域名，使用 UserName 属性获取用户名。用户名通常是用户姓和名的首字母缩写组合。

UserDomainName 属性首先尝试获取当前用户 Windows 帐户名的域名部分。如果该尝试失败，此属性将尝试获取与 UserName 属性提供的用户名相关联的域名。如果该尝试因主机未与域连接而失败，则返回主机名。 UserDomainName 属性首先尝试获取当前用户 Windows 帐户名的域名部分。如果该尝试失败，此属性将尝试获取与 UserName 属性提供的用户名相关联的域名。如果该尝试因主机未与域连接而失败，则返回主机名。 UserDomainName 属性首先尝试获取当前用户 Windows 帐户名的域名部分。如果该尝试失败，此属性将尝试获取与 UserName 属性提供的用户名相关联的域名。如果该尝试因主机未与域连接而失败，则返回主机名。

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明： Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：此平台不支持 UserDomainName 属性。

下面的示例显示运行代码示例的计算机的用户域名。（出于安全原因，示例输出中省略了用户域名。） 下面的示例显示运行代码示例的计算机的用户域名。（出于安全原因，示例输出中省略了用户域名。）

' Sample for the Environment.UserDomainName property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      '  <-- Keep this information secure! -->
      Console.WriteLine("UserDomainName: {0}", Environment.UserDomainName)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'(Any result that is lengthy, specific to the machine on which this sample was tested,
'or reveals information that should remain secure, has been omitted
'and marked "!---OMITTED---!".)
'
'UserDomainName: !---OMITTED---!
'

// Sample for the Environment.UserDomainName property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
//  <-- Keep this information secure! -->
    Console.WriteLine("UserDomainName: {0}", Environment.UserDomainName);
    }
}
/*
This example produces the following results:
(Any result that is lengthy, specific to the machine on which this sample was tested, or reveals information that should remain secure, has been omitted and marked "!---OMITTED---!".)

UserDomainName: !---OMITTED---!
*/

// Sample for the Environment::UserDomainName property
using namespace System;
int main()
{
   Console::WriteLine();

   //  <-- Keep this information secure! -->
   Console::WriteLine( "UserDomainName: {0}", Environment::UserDomainName );
}

/*
This example produces the following results:
(Any result that is lengthy, specific to the machine on which this sample was tested, or reveals information that should remain secure, has been omitted and marked S"!---OMITTED---!".)

UserDomainName: !---OMITTED---!
*/
  • EnvironmentPermission

    用于对 USERDOMAIN 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read 用于对 USERDOMAIN 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间
UserName


Environment ..::.UserInteractive 属性

Environment
.
.
::
.
UserInteractive 属性
Environment 类

获取一个值，用以指示当前进程是否在用户交互模式中运行。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property UserInteractive As Boolean
    Get
public static bool UserInteractive { get; }
public:
static property bool UserInteractive {
    bool get ();
}
static member UserInteractive : bool

属性值

类型： System Boolean
如果当前进程在用户交互模式中运行，则为 true；否则为 false。

UserInteractive 属性为运行时无用户界面的 Windows 进程或一个服务（如 IIS）报告 false。如果此属性为 false，请不要显示模式对话框或消息框，因为没有用来与用户进行交互的图形用户界面。 UserInteractive 属性为运行时无用户界面的 Windows 进程或一个服务（如 IIS）报告 false。如果此属性为 false，请不要显示模式对话框或消息框，因为没有用来与用户进行交互的图形用户界面。

下面的示例显示当前进程是否正以用户交互模式运行。

' Sample for the Environment.UserInteractive property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("UserInteractive: {0}", Environment.UserInteractive)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'UserInteractive: True
'

// Sample for the Environment.UserInteractive property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("UserInteractive: {0}", Environment.UserInteractive);
    }
}
/*
This example produces the following results:

UserInteractive: True
*/

// Sample for the Environment::UserInteractive property
using namespace System;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "UserInteractive: {0}", Environment::UserInteractive );
}

/*
This example produces the following results:

UserInteractive: True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间
SystemInformation


Environment ..::.UserName 属性

Environment
.
.
::
.
UserName 属性
Environment 类

获取当前已登录到 Windows 操作系统的人员的用户名。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property UserName As String
    Get
public static string UserName { get; }
public:
static property String^ UserName {
    String^ get ();
}
static member UserName : string

属性值

类型： System String
已登录到 Windows 的人员的用户名。

您可以使用 UserName 属性向系统和应用程序标识当前线程上的用户（用于安全性或访问目的）。它还可用于为每个用户自定义特定的应用程序。 您可以使用 UserName 属性向系统和应用程序标识当前线程上的用户（用于安全性或访问目的）。它还可用于为每个用户自定义特定的应用程序。

用户的域帐户凭据格式设置为用户的域名、'\' 字符和用户名。使用 UserDomainName 属性获取用户的域名，使用 UserName 属性获取用户名。用户名通常是用户姓和名的首字母缩写组合。 用户的域帐户凭据格式设置为用户的域名、'\' 字符和用户名。使用 UserDomainName 属性获取用户的域名，使用 UserName 属性获取用户名。用户名通常是用户姓和名的首字母缩写组合。 用户的域帐户凭据格式设置为用户的域名、'\' 字符和用户名。使用 UserDomainName 属性获取用户的域名，使用 UserName 属性获取用户名。用户名通常是用户姓和名的首字母缩写组合。

下面的示例显示启动了当前线程的那个人的用户名。

' Sample for the Environment.UserName property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      '  <-- Keep this information secure! -->
      Console.WriteLine("UserName: {0}", Environment.UserName)
   End Sub 'Main
End Class

// Sample for the Environment.UserName property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
//  <-- Keep this information secure! -->
    Console.WriteLine("UserName: {0}", Environment.UserName);
    }
}

// Sample for the Environment::UserName property
using namespace System;
int main()
{
   Console::WriteLine();

   //  <-- Keep this information secure! -->
   Console::WriteLine( "UserName: {0}", Environment::UserName );
}
  • EnvironmentPermission

    用于对 USERNAME 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read 用于对 USERNAME 环境变量进行读访问。关联的枚举：EnvironmentPermissionAccess..::.Read

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间
UserDomainName


Environment ..::.Version 属性

Environment
.
.
::
.
Version 属性
Environment 类

获取一个 Version 对象，该对象描述公共语言运行时的主版本、次版本、内部版本和修订号。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Version As Version
    Get
public static Version Version { get; }
public:
static property Version^ Version {
    Version^ get ();
}
static member Version : Version

属性值

类型： System Version
用于显示公共语言运行时版本的对象。

下面的示例显示公共语言运行时的版本。（出于安全原因，示例输出中省略了版本。） 下面的示例显示公共语言运行时的版本。（出于安全原因，示例输出中省略了版本。）

' Sample for the Environment.Version property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("Version: {0}", Environment.Version.ToString())
   End Sub 'Main
End Class 'Sample

// Sample for the Environment.Version property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("Version: {0}", Environment.Version.ToString());
    }
}

// Sample for the Environment::Version property
using namespace System;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "Version: {0}", Environment::Version );
}

/*
This example produces the following results:
(Any result that is lengthy, specific to the machine on which this sample was tested, or reveals information that should remain secure, has been omitted and marked S"!---OMITTED---!".)

Version: !---OMITTED---!
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.WorkingSet 属性

Environment
.
.
::
.
WorkingSet 属性
Environment 类

获取映射到进程上下文的物理内存量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property WorkingSet As Long
    Get
public static long WorkingSet { get; }
public:
static property long long WorkingSet {
    long long get ();
}
static member WorkingSet : int64

属性值

类型： System Int64
一个 64 位带符号整数，包含映射到进程上下文的物理内存字节的数目。

Windows 98, Windows Millennium Edition 平台说明： Windows 98, Windows Millennium Edition 平台说明：此属性始终返回零。

下面的示例显示运行代码示例的计算机的工作集大小。

' Sample for the Environment.WorkingSet property
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine("WorkingSet: {0}", Environment.WorkingSet)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'WorkingSet: 5038080
'

// Sample for the Environment.WorkingSet property
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine("WorkingSet: {0}", Environment.WorkingSet);
    }
}
/*
This example produces the following results:

WorkingSet: 5038080
*/

// Sample for the Environment::WorkingSet property
using namespace System;
int main()
{
   Console::WriteLine( "WorkingSet: {0}", Environment::WorkingSet );
}

/*
This example produces the following results:

WorkingSet: 5038080
*/
  • EnvironmentPermission

    用于完全访问受此权限保护的资源。关联的枚举：PermissionState..::.Unrestricted 用于完全访问受此权限保护的资源。关联的枚举：PermissionState..::.Unrestricted

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Environment 类
Environment 成员
System 命名空间


Environment ..::.SpecialFolder 枚举

Environment
.
.
::
.
SpecialFolder 枚举
Environment 类

指定用于检索系统特殊文件夹的目录路径的枚举常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Enumeration SpecialFolder
[ComVisibleAttribute(true)]
public enum SpecialFolder
[ComVisibleAttribute(true)]
public enum class SpecialFolder
[<ComVisibleAttribute(true)>]
type SpecialFolder
 | 成员名称 | 说明
由 XNA Framework 提供支持 | ApplicationData | 目录，它用作当前漫游用户的应用程序特定数据的公共储存库。 漫游用户在网络上的多台计算机上工作。漫游用户的配置文件保存在网络服务器上，当用户登录到某个系统上时，它会加载到该系统。 漫游用户在网络上的多台计算机上工作。漫游用户的配置文件保存在网络服务器上，当用户登录到某个系统上时，它会加载到该系统。
 | CommonApplicationData | 目录，它用作所有用户使用的应用程序特定数据的公共储存库。
 | LocalApplicationData | 目录，它用作当前非漫游用户使用的应用程序特定数据的公共储存库。
 | Cookies | 用作 Internet Cookie 的公共储存库的目录。
 | Desktop | 逻辑桌面，而不是物理文件系统位置。
由 XNA Framework 提供支持 | Favorites | 用作用户收藏夹项的公共储存库的目录。
 | History | 用作 Internet 历史记录项的公共储存库的目录。
 | InternetCache | 用作 Internet 临时文件的公共储存库的目录。
由 XNA Framework 提供支持 | Programs | 包含用户程序组的目录。
 | MyComputer | “我的电脑”文件夹。 说明 说明 由于没有为“我的电脑”文件夹定义路径，因此 MyComputer 常数将始终生成空字符串 ("")。
 | MyMusic | “我的音乐”文件夹。
 | MyPictures | “我的图片”文件夹。
 | Recent | 包含用户最近使用过的文档的目录。
 | SendTo | 包含“发送”菜单项的目录。
由 XNA Framework 提供支持 | StartMenu | 包含“开始”菜单项的目录。
由 XNA Framework 提供支持 | Startup | 对应于用户的“启动”程序组的目录。 每当用户登录、启动 Windows NT 或更高版本或启动 Windows 98 时，系统均会启动这些程序。
 | System | “System”目录。
 | Templates | 用作文档模板的公共储存库的目录。
 | DesktopDirectory | 用于物理上存储桌面上的文件对象的目录。 不应将此目录与桌面文件夹本身混淆，后者是虚拟文件夹。
由 XNA Framework 提供支持 | Personal | 用作文档的公共储存库的目录。 此成员等效于 MyDocuments。
 | MyDocuments | “我的文档”文件夹。 此成员等效于 Personal。
 | ProgramFiles | “Program files”目录。
 | CommonProgramFiles | 用于应用程序间共享的组件的目录。
 | AdminTools | 文件系统目录，用于存储各个用户的管理工具。Microsoft Management Console (MMC) 会将自定义的控制台保存在此目录中，并且此目录将随用户一起漫游。 文件系统目录，用于存储各个用户的管理工具。Microsoft Management Console (MMC) 会将自定义的控制台保存在此目录中，并且此目录将随用户一起漫游。
 | CDBurning | 文件系统目录，充当等待写入 CD 的文件的临时区域。
 | CommonAdminTools | 文件系统目录，包含计算机所有用户的管理工具。
 | CommonDocuments | 文件系统目录，包含所有用户共有的文档。此特殊文件夹仅对装有 Shfolder.dll 的 Windows NT 系统、Windows 95 和 Windows 98 系统有效。 文件系统目录，包含所有用户共有的文档。此特殊文件夹仅对装有 Shfolder.dll 的 Windows NT 系统、Windows 95 和 Windows 98 系统有效。
 | CommonMusic | 文件系统目录，充当所有用户共有的音乐文件的存储库。
 | CommonOemLinks | 为了实现向后兼容，Windows Vista 中可以识别此值，但该特殊文件夹本身已不再使用。
 | CommonPictures | 文件系统目录，充当所有用户共有的图像文件的存储库。
 | CommonStartMenu | 文件系统目录，包含在所有用户的“开始”菜单上都出现的程序和文件夹。此特殊文件夹仅对 Windows NT 系统有效。 文件系统目录，包含在所有用户的“开始”菜单上都出现的程序和文件夹。此特殊文件夹仅对 Windows NT 系统有效。
 | CommonPrograms | 存放多个应用程序共享的组件的文件夹。此特殊文件夹仅对 Windows NT、Windows 2000 和 Windows XP 系统有效。 存放多个应用程序共享的组件的文件夹。此特殊文件夹仅对 Windows NT、Windows 2000 和 Windows XP 系统有效。
 | CommonStartup | 文件系统目录，包含在所有用户的“启动”文件夹中都出现的程序。此特殊文件夹仅对 Windows NT 系统有效。 文件系统目录，包含在所有用户的“启动”文件夹中都出现的程序。此特殊文件夹仅对 Windows NT 系统有效。
 | CommonDesktopDirectory | 文件系统目录，包含在所有用户桌面上出现的文件和文件夹。此特殊文件夹仅对 Windows NT 系统有效。 文件系统目录，包含在所有用户桌面上出现的文件和文件夹。此特殊文件夹仅对 Windows NT 系统有效。
 | CommonTemplates | 文件系统目录，包含所有用户都可以使用的模板。此特殊文件夹仅对 Windows NT 系统有效。 文件系统目录，包含所有用户都可以使用的模板。此特殊文件夹仅对 Windows NT 系统有效。
 | CommonVideos | 文件系统目录，充当所有用户共有的视频文件的存储库。
 | Fonts | 包含字体的虚拟文件夹。
 | MyVideos | 文件系统目录，充当属于某个用户的视频的存储库。
 | NetworkShortcuts | 文件系统目录，包含“网上邻居”虚拟文件夹中可能存在的链接对象。
 | PrinterShortcuts | 文件系统目录，包含“打印机”虚拟文件夹中可能存在的链接对象。
 | UserProfile | 用户的配置文件文件夹。应用程序不应在此级别上创建文件或文件夹；它们应将其数据放在 ApplicationData 所引用的位置之下。 用户的配置文件文件夹。应用程序不应在此级别上创建文件或文件夹；它们应将其数据放在 ApplicationData 所引用的位置之下。
 | CommonProgramFilesX86 | “Program Files”文件夹。
 | ProgramFilesX86 | “Program Files”文件夹。
 | Resources | 文件系统目录，包含资源数据。
 | LocalizedResources | 文件系统目录，包含本地化资源数据。
 | SystemX86 | Windows“System”文件夹。
 | Windows | Windows 目录或 SYSROOT。它与 %windir% 或 %SYSTEMROOT% 环境变量相对应。 Windows 目录或 SYSROOT。它与 %windir% 或 %SYSTEMROOT% 环境变量相对应。

系统特殊文件夹是包含公共信息的文件夹，如“Program Files”、“Programs”,、“System”或“Startup”。特殊文件夹在默认情况下由系统设置，或者由用户在安装 Windows 的某个版本时显式进行设置。 系统特殊文件夹是包含公共信息的文件夹，如“Program Files”、“Programs”,、“System”或“Startup”。特殊文件夹在默认情况下由系统设置，或者由用户在安装 Windows 的某个版本时显式进行设置。

GetFolderPath 方法返回与此枚举关联的位置。对于不同的操作系统，这些文件夹的位置可能具有不同的值，用户也可能会更改某些位置，或者这些位置已经进行了本地化。 GetFolderPath 方法返回与此枚举关联的位置。对于不同的操作系统，这些文件夹的位置可能具有不同的值，用户也可能会更改某些位置，或者这些位置已经进行了本地化。

有关特殊文件夹的更多信息，请参见 CSIDL 值主题。

下面的示例演示如何通过 GetFolderPath 方法使用 Environment..::.SpecialFolder 来获取系统目录。

' Sample for the Environment.GetFolderPath method
Imports System

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("GetFolderPath: {0}", Environment.GetFolderPath(Environment.SpecialFolder.System))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'GetFolderPath: C:\WINNT\System32
'

// Sample for the Environment.GetFolderPath method
using System;

class Sample
{
    public static void Main()
    {
    Console.WriteLine();
    Console.WriteLine("GetFolderPath: {0}",
                 Environment.GetFolderPath(Environment.SpecialFolder.System));
    }
}
/*
This example produces the following results:

GetFolderPath: C:\WINNT\System32
*/

// Sample for the Environment::GetFolderPath method
using namespace System;
int main()
{
   Console::WriteLine();
   Console::WriteLine( "GetFolderPath: {0}", Environment::GetFolderPath( Environment::SpecialFolder::System ) );
}

/*
This example produces the following results:

GetFolderPath: C:\WINNT\System32
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：2.0、1.0

参考

System 命名空间


Environment ..::.SpecialFolderOption 枚举

Environment
.
.
::
.
SpecialFolderOption 枚举
Environment 类

指定用于获取特殊文件夹路径的选项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Enumeration SpecialFolderOption
public enum SpecialFolderOption
public enum class SpecialFolderOption
type SpecialFolderOption
成员名称 | 说明
None | 返回路径，但不验证该路径是否存在。如果文件夹位于网络上，则指定此选项可以缩短延隔时间。 返回路径，但不验证该路径是否存在。如果文件夹位于网络上，则指定此选项可以缩短延隔时间。
Create | 验证文件夹的路径。如果文件夹不存在，则返回空字符串。这是默认行为。 验证文件夹的路径。如果文件夹不存在，则返回空字符串。这是默认行为。 验证文件夹的路径。如果文件夹不存在，则返回空字符串。这是默认行为。
DoNotVerify | 如果文件夹尚未存在，则强制创建它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间


EnvironmentVariableTarget 枚举

EnvironmentVariableTarget 枚举

指定在 Set 或 Get 操作中存储或检索环境变量的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Enumeration EnvironmentVariableTarget
[ComVisibleAttribute(true)]
public enum EnvironmentVariableTarget
[ComVisibleAttribute(true)]
public enum class EnvironmentVariableTarget
[<ComVisibleAttribute(true)>]
type EnvironmentVariableTarget
成员名称 说明
Process 环境变量存储在与当前进程关联的环境块中，或者从其中检索。

用户在 Set 操作中创建环境变量。

进程终止时，操作系统将销毁该进程中的环境变量。
User 环境变量存储在 Windows 操作系统注册表的 HKEY_CURRENT_USER\Environment 项中，或从其中检索。

当用户在 Set 操作中创建环境变量时，操作系统将环境变量存储在系统注册表中，而非当前进程中。如果用户启动一个新进程，操作系统将把环境变量从注册表复制到该进程中。 当用户在 Set 操作中创建环境变量时，操作系统将环境变量存储在系统注册表中，而非当前进程中。如果用户启动一个新进程，操作系统将把环境变量从注册表复制到该进程中。

进程终止时，操作系统将销毁该进程中的环境变量。然而，在用户以编程方式或通过操作系统工具移除环境变量之前，环境变量将一直保持在注册表中。 进程终止时，操作系统将销毁该进程中的环境变量。然而，在用户以编程方式或通过操作系统工具移除环境变量之前，环境变量将一直保持在注册表中。
Machine 环境变量存储在 Windows 操作系统注册表的 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 项中，或从其中检索。

当用户在 Set 操作中创建环境变量时，操作系统将环境变量存储在系统注册表中，而非当前进程中。如果本地计算机上的任何用户启动一个新进程，操作系统都会将环境变量从注册表复制到该进程中。 当用户在 Set 操作中创建环境变量时，操作系统将环境变量存储在系统注册表中，而非当前进程中。如果本地计算机上的任何用户启动一个新进程，操作系统都会将环境变量从注册表复制到该进程中。

进程终止时，操作系统将销毁该进程中的环境变量。然而，在用户以编程方式或通过操作系统工具移除环境变量之前，环境变量将一直保持在注册表中。 进程终止时，操作系统将销毁该进程中的环境变量。然而，在用户以编程方式或通过操作系统工具移除环境变量之前，环境变量将一直保持在注册表中。

SetEnvironmentVariable、GetEnvironmentVariable 和 GetEnvironmentVariables 方法的某些重载使用 EnvironmentVariableTarget 枚举，以指定存储或检索环境变量的名称及值的位置或目标。

目标可以是下列三个位置之一：与当前进程关联的环境块、为与当前用户关联的环境变量保留的 Windows 操作系统注册表项，或者为与本地计算机上所有用户关联的环境变量保留的注册表项。

下面的代码示例演示创建、修改以及删除环境变量的方法中的 EnvironmentVariableTarget 枚举。

' This example demonstrates the
'     Environment.GetEnvironmentVariable,
'     Environment.SetEnvironmentVariable, and
'     Environment.GetEnvironmentVariables overloaded methods.
Imports System
Imports System.Collections
Imports Microsoft.Win32
Imports Microsoft.VisualBasic

Class Sample
   '-------------------------------------------------------------------------------------
   ' Globals:
   '-------------------------------------------------------------------------------------
   Protected Shared fmtNameValue As String = "  {0} {1}."
   Protected Shared myVarSuffix As String = "_GETSET_ENVAR_SAMPLE"

   ' Four relatively unique environment variable names.
   Protected Shared myVarA As String = "A" & myVarSuffix ' default process
   Protected Shared myVarB As String = "B" & myVarSuffix ' Current Process
   Protected Shared myVarC As String = "C" & myVarSuffix ' Current User
   Protected Shared myVarD As String = "D" & myVarSuffix ' Local Machine
   '=====================================================================================
   ' EachVariable:
   ' Test whether a specific environment variable exists in a target.
   ' This section demonstrates Environment.GetEnvironmentVariable.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub EachVariable(var As String, tgt As EnvironmentVariableTarget)
      Dim str As String
      '
      If 0 = tgt Then ' Zero means use the default target.
         str = Environment.GetEnvironmentVariable(var)
      Else
         str = Environment.GetEnvironmentVariable(var, tgt)
      End If
      Console.WriteLine(fmtNameValue, var, IIf(String.IsNullOrEmpty(str), _
                                              "doesn't exist", str))
   End Sub 'EachVariable

   '-------------------------------------------------------------------------------------
   ' CheckEachVariable:
   ' Uses EachVariable to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckEachVariable()
      Console.WriteLine("Process:")
      EachVariable(myVarA, 0) ' Check the default target (current process)
      EachVariable(myVarB, EnvironmentVariableTarget.Process)
      EachVariable(myVarC, EnvironmentVariableTarget.Process)
      EachVariable(myVarD, EnvironmentVariableTarget.Process)
      Console.WriteLine()

      Console.WriteLine("User:")
      EachVariable(myVarA, EnvironmentVariableTarget.User)
      EachVariable(myVarB, EnvironmentVariableTarget.User)
      EachVariable(myVarC, EnvironmentVariableTarget.User)
      EachVariable(myVarD, EnvironmentVariableTarget.User)
      Console.WriteLine()

      Console.WriteLine("Machine:")
      EachVariable(myVarA, EnvironmentVariableTarget.Machine)
      EachVariable(myVarB, EnvironmentVariableTarget.Machine)
      EachVariable(myVarC, EnvironmentVariableTarget.Machine)
      EachVariable(myVarD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
   End Sub 'CheckEachVariable

   '=====================================================================================
   ' AllVariables: CheckAllVariables helper function.
   ' This section demonstrates Environment.GetEnvironmentVariables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub AllVariables(tgt As EnvironmentVariableTarget)
      Dim value As String
      Dim key As String

      Dim de As DictionaryEntry
      For Each de In Environment.GetEnvironmentVariables(tgt)
         key = CStr(de.Key)
         value = CStr(de.Value)
         If key.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, key, value)
         End If
      Next de
      Console.WriteLine()
   End Sub 'AllVariables

   '=====================================================================================
   ' CheckAllVariables:
   ' Uses AllVariables to test whether each environment variable exists in a target.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckAllVariables()
      Console.WriteLine("Process:")
      AllVariables(EnvironmentVariableTarget.Process)

      Console.WriteLine("User:")
      AllVariables(EnvironmentVariableTarget.User)

      Console.WriteLine("Machine:")
      AllVariables(EnvironmentVariableTarget.Machine)
   End Sub 'CheckAllVariables

   '=====================================================================================
   ' ChkReg: CheckRegistry helper function.
   ' This function filters out irrelevant environment variables.
   '-------------------------------------------------------------------------------------
   Private Shared Sub ChkReg(rk As RegistryKey)
      Dim exists As Boolean = False
      Dim registryNone As String = "  Environment variable doesn't exist."

      Dim s As String
      For Each s In rk.GetValueNames()
         If s.Contains(myVarSuffix) Then
            Console.WriteLine(fmtNameValue, s, CStr(rk.GetValue(s)))
            exists = True
         End If
      Next s
      If exists = False Then
         Console.WriteLine(registryNone)
      End If
      Console.WriteLine()
   End Sub 'ChkReg

   '-------------------------------------------------------------------------------------
   ' CheckRegistry:
   ' Uses ChkReg to display the User and Machine environment variables in the registry.
   '-------------------------------------------------------------------------------------
   Protected Shared Sub CheckRegistry()
      Dim subkeyU As String = "Environment"
      Dim subkeyM As String = "System\CurrentControlSet\Control\Session Manager\Environment"
      Dim fmtSubkey As String = """{0}"" key:"

      Console.WriteLine(fmtSubkey, subkeyU)
      ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU))

      Console.WriteLine(fmtSubkey, subkeyM)
      ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM))
   End Sub 'CheckRegistry

   '=====================================================================================
   ' Main:
   '-------------------------------------------------------------------------------------
   Public Shared Sub Main()
      '-------------------------------------------------------------------------------------
      ' Environment variable values
      '-------------------------------------------------------------------------------------
      Dim existsA As String = "exists in the default target (Process)"
      Dim existsB As String = "exists in Process"
      Dim existsC As String = "exists in User"
      Dim existsD As String = "exists in Machine"
      '-------------------------------------------------------------------------------------
      ' Messages:
      '-------------------------------------------------------------------------------------
      Dim msg1  As String = "Step 1:" & vbCrLf & _
                            "  Check whether the environment variables already exist in " _
                 & vbCrLf & "  the various targets..." & vbCrLf
      Dim msg2  As String = "Step 2:" & vbCrLf & _
                            "  Set the environment variable for each target..." & vbCrLf
      Dim msg31 As String = "Step 3, part 1:" & vbCrLf & _
                            "  Display the environment variables in each target..." & vbCrLf
      Dim msg32 As String = "Step 3, part 2:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were created in the Windows operating system registry..." _
                 & vbCrLf
      Dim msg41 As String = "Step 4, part 1:" & vbCrLf & _
                            "  Delete the environment variables created for this sample..." _
                 & vbCrLf
      Dim msg42 As String = "Step 4, part 2:" & vbCrLf & _
                            "  Check whether the environment variables were deleted " _
                 & vbCrLf & "  in each target..." & vbCrLf
      Dim msg43 As String = "Step 4, part 3:" & vbCrLf & _
                            "  Check whether the User and Machine environment variables " _
                 & vbCrLf & "  were deleted from the Windows operating system registry..." _
                 & vbCrLf
      Dim fmt2x As String = "  {0,9}: Set {1} = ""{2}"""
      '-------------------------------------------------------------------------------------
      ' Step 1:
      ' Check whether the sample environment variables already exist.
      ' WARNING: These variables will be deleted at the end of this sample.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg1)
      CheckEachVariable()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 2:
      ' Set the environment variable for each target.
      ' This section demonstrates Environment.SetEnvironmentVariable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg2)
      ' Set the environment variable for the default target (the current process).
      Console.WriteLine(fmt2x, "(default)", myVarA, existsA)
      Environment.SetEnvironmentVariable(myVarA, existsA)

      ' Set the environment variable for the the current process.
      Console.WriteLine(fmt2x, "Process", myVarB, existsB)
      Environment.SetEnvironmentVariable(myVarB, existsB, EnvironmentVariableTarget.Process)

      ' Set the environment variable for the the current user.
      Console.WriteLine(fmt2x, "User", myVarC, existsC)
      Environment.SetEnvironmentVariable(myVarC, existsC, EnvironmentVariableTarget.User)

      ' Set the environment variable for the the local machine.
      Console.WriteLine(fmt2x, "Machine", myVarD, existsD)
      Environment.SetEnvironmentVariable(myVarD, existsD, EnvironmentVariableTarget.Machine)
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 1:
      ' Display the environment variables in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg31)
      CheckAllVariables()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 3, part 2:
      ' Check whether the User and Machine environment variables were created in the Windows
      ' operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg32)
      CheckRegistry()
      Console.WriteLine()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 1:
      ' Delete the environment variables created for this sample.
      ' This section demonstrates using Environment.SetEnvironmentVariable to delete an
      ' environment variable.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg41)
      Environment.SetEnvironmentVariable(myVarA, Nothing)
      Environment.SetEnvironmentVariable(myVarB, Nothing, EnvironmentVariableTarget.Process)
      Environment.SetEnvironmentVariable(myVarC, Nothing, EnvironmentVariableTarget.User)
      Environment.SetEnvironmentVariable(myVarD, Nothing, EnvironmentVariableTarget.Machine)
      '-------------------------------------------------------------------------------------
      ' Step 4, part 2:
      ' Check whether the environment variables were deleted in each target.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg42)
      CheckEachVariable()
      '-------------------------------------------------------------------------------------
      ' Step 4, part 3:
      ' Check whether the User and Machine environment variables were deleted from the
      ' Windows operating system registry.
      '-------------------------------------------------------------------------------------
      Console.WriteLine(msg43)
      CheckRegistry()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Step 1:
'  Check whether the environment variables already exist in
'  the various targets...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'
'Step 2:
'  Set the environment variable for each target...
'
'  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
'    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
'       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
'    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"
'
'Step 3, part 1:
'  Display the environment variables in each target...
'
'Process:
'  B_GETSET_ENVAR_SAMPLE exists in Process.
'  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).
'
'User:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'Machine:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 3, part 2:
'  Check whether the User and Machine environment variables
'  were created in the Windows operating system registry...
'
'"Environment" key:
'  C_GETSET_ENVAR_SAMPLE exists in User.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  D_GETSET_ENVAR_SAMPLE exists in Machine.
'
'
'Step 4, part 1:
'  Delete the environment variables created for this sample...
'
'Step 4, part 2:
'  Check whether the environment variables were deleted
'  in each target...
'
'Process:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'User:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Machine:
'  A_GETSET_ENVAR_SAMPLE doesn't exist.
'  B_GETSET_ENVAR_SAMPLE doesn't exist.
'  C_GETSET_ENVAR_SAMPLE doesn't exist.
'  D_GETSET_ENVAR_SAMPLE doesn't exist.
'
'Step 4, part 3:
'  Check whether the User and Machine environment variables
'  were deleted from the Windows operating system registry...
'
'"Environment" key:
'  Environment variable doesn't exist.
'
'"System\CurrentControlSet\Control\Session Manager\Environment" key:
'  Environment variable doesn't exist.
'

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using System;
using System.Collections;
using Microsoft.Win32;

class Sample
{
//-------------------------------------------------------------------------------------
// Globals:
//-------------------------------------------------------------------------------------
    protected static string fmtNameValue = "  {0} {1}.";
    protected static string myVarSuffix = "_GETSET_ENVAR_SAMPLE";

// Four relatively unique environment variable names.
    protected static string myVarA = "A" + myVarSuffix; // default process
    protected static string myVarB = "B" + myVarSuffix; // Current Process
    protected static string myVarC = "C" + myVarSuffix; // Current User
    protected static string myVarD = "D" + myVarSuffix; // Local Machine
//=====================================================================================
// EachVariable:
// Test whether a specific environment variable exists in a target.
// This section demonstrates Environment.GetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    protected static void EachVariable(string var, EnvironmentVariableTarget tgt)
    {
    string str;
    //
    if (0 == tgt)          // Zero means use the default target.
        str = Environment.GetEnvironmentVariable(var);
    else
        str = Environment.GetEnvironmentVariable(var, tgt);
    Console.WriteLine(fmtNameValue,
                      var, (String.IsNullOrEmpty(str) ? "doesn't exist" : str));
    }
//-------------------------------------------------------------------------------------
// CheckEachVariable:
// Uses EachVariable to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckEachVariable()
    {
    Console.WriteLine("Process:");
    EachVariable(myVarA, 0);  // Check the default target (current process)
    EachVariable(myVarB, EnvironmentVariableTarget.Process);
    EachVariable(myVarC, EnvironmentVariableTarget.Process);
    EachVariable(myVarD, EnvironmentVariableTarget.Process);
    Console.WriteLine();

    Console.WriteLine("User:");
    EachVariable(myVarA, EnvironmentVariableTarget.User);
    EachVariable(myVarB, EnvironmentVariableTarget.User);
    EachVariable(myVarC, EnvironmentVariableTarget.User);
    EachVariable(myVarD, EnvironmentVariableTarget.User);
    Console.WriteLine();

    Console.WriteLine("Machine:");
    EachVariable(myVarA, EnvironmentVariableTarget.Machine);
    EachVariable(myVarB, EnvironmentVariableTarget.Machine);
    EachVariable(myVarC, EnvironmentVariableTarget.Machine);
    EachVariable(myVarD, EnvironmentVariableTarget.Machine);
    Console.WriteLine();
    }
//=====================================================================================
// AllVariables: CheckAllVariables helper function.
// This section demonstrates Environment.GetEnvironmentVariables.
//-------------------------------------------------------------------------------------
    private static void AllVariables(EnvironmentVariableTarget tgt)
    {
    string value;
    string key;

    foreach(DictionaryEntry de in Environment.GetEnvironmentVariables(tgt))
        {
        key   = (string)de.Key;
        value = (string)de.Value;
        if (key.Contains(myVarSuffix))
            Console.WriteLine(fmtNameValue, key, value);
        }
    Console.WriteLine();
    }
//=====================================================================================
// CheckAllVariables:
// Uses AllVariables to test whether each environment variable exists in a target.
//-------------------------------------------------------------------------------------
    protected static void CheckAllVariables()
    {
    Console.WriteLine("Process:");
    AllVariables(EnvironmentVariableTarget.Process);

    Console.WriteLine("User:");
    AllVariables(EnvironmentVariableTarget.User);

    Console.WriteLine("Machine:");
    AllVariables(EnvironmentVariableTarget.Machine);
    }
//=====================================================================================
// ChkReg: CheckRegistry helper function.
// This function filters out irrelevant environment variables.
//-------------------------------------------------------------------------------------
    private static void ChkReg(RegistryKey rk)
    {
    bool exists = false;
    string registryNone = "  Environment variable doesn't exist.";

    foreach (string s in rk.GetValueNames())
        {
        if (s.Contains(myVarSuffix))
            {
            Console.WriteLine(fmtNameValue, s, (string)rk.GetValue(s));
            exists = true;
            }
        }
    if (exists == false)
        Console.WriteLine(registryNone);
    Console.WriteLine();
    }
//-------------------------------------------------------------------------------------
// CheckRegistry:
// Uses ChkReg to display the User and Machine environment variables in the registry.
//-------------------------------------------------------------------------------------
    protected static void CheckRegistry()
    {
    string subkeyU = @"Environment";
    string subkeyM = @"System\CurrentControlSet\Control\Session Manager\Environment";
    string fmtSubkey = "\"{0}\" key:";

    Console.WriteLine(fmtSubkey, subkeyU);
    ChkReg(Registry.CurrentUser.OpenSubKey(subkeyU));

    Console.WriteLine(fmtSubkey, subkeyM);
    ChkReg(Registry.LocalMachine.OpenSubKey(subkeyM));
    }
//=====================================================================================
// Main:
//-------------------------------------------------------------------------------------
    public static void Main()
    {
//-------------------------------------------------------------------------------------
// Environment variable values
//-------------------------------------------------------------------------------------
    string existsA = "exists in the default target (Process)";
    string existsB = "exists in Process";
    string existsC = "exists in User";
    string existsD = "exists in Machine";
//-------------------------------------------------------------------------------------
// Messages:
//-------------------------------------------------------------------------------------
    string msg1  = "Step 1:\n" +
                       "  Check whether the environment variables already exist in \n" +
                       "  the various targets...\n";
    string msg2  = "Step 2:\n" +
                       "  Set the environment variable for each target...\n";
    string msg31 = "Step 3, part 1:\n" +
                       "  Display the environment variables in each target...\n";
    string msg32 = "Step 3, part 2:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were created in the Windows operating system registry...\n";
    string msg41 = "Step 4, part 1:\n" +
                       "  Delete the environment variables created for this sample...\n";
    string msg42 = "Step 4, part 2:\n" +
                       "  Check whether the environment variables were deleted \n" +
                       "  in each target...\n";
    string msg43 = "Step 4, part 3:\n" +
                       "  Check whether the User and Machine environment variables \n" +
                       "  were deleted from the Windows operating system registry...\n";
    string fmt2x   = "  {0,9}: Set {1} = \"{2}\"";
//-------------------------------------------------------------------------------------
// Step 1:
// Check whether the sample environment variables already exist.
// WARNING: These variables will be deleted at the end of this sample.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg1);
    CheckEachVariable();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 2:
// Set the environment variable for each target.
// This section demonstrates Environment.SetEnvironmentVariable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg2);
// Set the environment variable for the default target (the current process).
    Console.WriteLine(fmt2x, "(default)", myVarA, existsA);
    Environment.SetEnvironmentVariable(myVarA, existsA);

// Set the environment variable for the the current process.
    Console.WriteLine(fmt2x, "Process", myVarB, existsB);
    Environment.SetEnvironmentVariable(myVarB, existsB,
        EnvironmentVariableTarget.Process);

// Set the environment variable for the the current user.
    Console.WriteLine(fmt2x, "User", myVarC, existsC);
    Environment.SetEnvironmentVariable(myVarC, existsC,
        EnvironmentVariableTarget.User);

// Set the environment variable for the the local machine.
    Console.WriteLine(fmt2x, "Machine", myVarD, existsD);
    Environment.SetEnvironmentVariable(myVarD, existsD,
        EnvironmentVariableTarget.Machine);
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 1:
// Display the environment variables in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg31);
    CheckAllVariables();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 3, part 2:
// Check whether the User and Machine environment variables were created in the Windows
// operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg32);
    CheckRegistry();
    Console.WriteLine();
//-------------------------------------------------------------------------------------
// Step 4, part 1:
// Delete the environment variables created for this sample.
// This section demonstrates using Environment.SetEnvironmentVariable to delete an
// environment variable.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg41);
    Environment.SetEnvironmentVariable(myVarA, null);
    Environment.SetEnvironmentVariable(myVarB, null, EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable(myVarC, null, EnvironmentVariableTarget.User);
    Environment.SetEnvironmentVariable(myVarD, null, EnvironmentVariableTarget.Machine);
//-------------------------------------------------------------------------------------
// Step 4, part 2:
// Check whether the environment variables were deleted in each target.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg42);
    CheckEachVariable();
//-------------------------------------------------------------------------------------
// Step 4, part 3:
// Check whether the User and Machine environment variables were deleted from the
// Windows operating system registry.
//-------------------------------------------------------------------------------------
    Console.WriteLine(msg43);
    CheckRegistry();
    }
}
/*
This example produces the following results:

Step 1:
  Check whether the environment variables already exist in
  the various targets...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
  Set the environment variable for each target...

  (default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
    Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
       User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
    Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
  Display the environment variables in each target...

Process:
  B_GETSET_ENVAR_SAMPLE exists in Process.
  A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
  C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
  Check whether the User and Machine environment variables
  were created in the Windows operating system registry...

"Environment" key:
  C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
  Delete the environment variables created for this sample...

Step 4, part 2:
  Check whether the environment variables were deleted
  in each target...

Process:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
  A_GETSET_ENVAR_SAMPLE doesn't exist.
  B_GETSET_ENVAR_SAMPLE doesn't exist.
  C_GETSET_ENVAR_SAMPLE doesn't exist.
  D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
  Check whether the User and Machine environment variables
  were deleted from the Windows operating system registry...

"Environment" key:
  Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
  Environment variable doesn't exist.
*/

// This example demonstrates the
//     Environment.GetEnvironmentVariable,
//     Environment.SetEnvironmentVariable, and
//     Environment.GetEnvironmentVariables overloaded methods.

using namespace System;
using namespace System::Collections;
using namespace Microsoft::Win32;

namespace EnvironmentVariablesSample
{
    public ref class TestEnvironmentVariables sealed
    {
    public:
        // DoTest: Test get/set environment variables
        static void DoTest()
        {
            // Environment variable values
            String^ existsA = "exists in the default target"
                " (Process)";
            String^ existsB = "exists in Process";
            String^ existsC = "exists in User";
            String^ existsD = "exists in Machine";
            // Messages:
            String^ messageStep1 = "Step 1:\n"
                "  Check whether the environment variables already"
                " exist in \n"
                "  the various targets...\n";
            String^ messageStep2 = "Step 2:\n"
                "  Set the environment variable for each"
                " target...\n";
            String^ messageStep3Part1 = "Step 3, part 1:\n"
                "  Display the environment variables in each"
                " target...\n";
            String^ messageStep3Part2 = "Step 3, part 2:\n"
                "  Check whether the User and Machine "
                " environment variables \n"
                "  were created in the Windows operating"
                " system registry...\n";
            String^ messageStep4Part1 = "Step 4, part 1:\n"
                "  Delete the environment variables created "
                "for this sample...\n";
            String^ messageStep4Part2 = "Step 4, part 2:\n"
                "  Check whether the environment variables were "
                "deleted \n"
                "  in each target...\n";
            String^ messageStep4Part3 = "Step 4, part 3:\n"
                "  Check whether the User and Machine environment "
                "variables \n"
                "  were deleted from the Windows operating system "
                "registry...\n";
            String^ step2Format = "  {0,9}: Set {1} = \"{2}\"";

            // Step 1:
            // Check whether the sample environment variables already
            // exist.
            // WARNING: These variables will be deleted at the end of
            // this sample.
            Console::WriteLine(messageStep1);
            CheckVariables();
            Console::WriteLine();

            // Step 2:
            // Set the environment variable for each target.
            // This section demonstrates
            // Environment.SetEnvironmentVariable.
            Console::WriteLine(messageStep2);

            // Set the environment variable for the default target
            // (the current process).
            Console::WriteLine(step2Format, "(default)", VariableA,
                existsA);
            Environment::SetEnvironmentVariable(VariableA, existsA);

            // Set the environment variable
            // for the the current process.
            Console::WriteLine(step2Format, "Process", VariableB,
                existsB);
            Environment::SetEnvironmentVariable(VariableB, existsB,
                EnvironmentVariableTarget::Process);

            // Set the environment variable for the the current user.
            Console::WriteLine(step2Format, "User", VariableC,
                existsC);
            Environment::SetEnvironmentVariable(VariableC, existsC,
                EnvironmentVariableTarget::User);

            // Set the environment variable for the the local machine.
            Console::WriteLine(step2Format, "Machine", VariableD,
                existsD);
            Environment::SetEnvironmentVariable(VariableD, existsD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();

            // Step 3, part 1:
            // Display the environment variables in each target.
            Console::WriteLine(messageStep3Part1);
            PrintVariables();
            Console::WriteLine();

            // Step 3, part 2:
            // Check whether the User and Machine environment
            // variables were created in the Windows operating system
            // registry.
            Console::WriteLine(messageStep3Part2);
            CheckRegistryVariables();
            Console::WriteLine();

            // Step 4, part 1:
            // Delete the environment variables created for this
            // sample. This section demonstrates using
            // Environment.SetEnvironmentVariable to delete an
            // environment variable.
            Console::WriteLine(messageStep4Part1);
            Environment::SetEnvironmentVariable(VariableA, nullptr);
            Environment::SetEnvironmentVariable(VariableB, nullptr,
                EnvironmentVariableTarget::Process);
            Environment::SetEnvironmentVariable(VariableC, nullptr,
                EnvironmentVariableTarget::User);
            Environment::SetEnvironmentVariable(VariableD, nullptr,
                EnvironmentVariableTarget::Machine);

            // Step 4, part 2:
            // Check whether the environment variables were deleted
            // in each target.
            Console::WriteLine(messageStep4Part2);
            CheckVariables();

            // Step 4, part 3:
            // Check whether the User and Machine environment
            // variables were deleted from the Windows operating
            // system registry.
            Console::WriteLine(messageStep4Part3);
            CheckRegistryVariables();
        }

    protected:
        // Globals:
        literal String^ NameValueFormat = "  {0} {1}.";
        literal String^ VariableSuffix = "_GETSET_ENVAR_SAMPLE";

        // Four relatively unique environment variable names.
        // default process

        literal String^ VariableA = "A_GETSET_ENVAR_SAMPLE";

        // Current Process
        literal String^ VariableB = "B_GETSET_ENVAR_SAMPLE";

        // Current User
        literal String^ VariableC = "C_GETSET_ENVAR_SAMPLE";

        // Local Machine
        literal String^ VariableD = "D_GETSET_ENVAR_SAMPLE";

    private:
        // CheckVariablesInTarget:
        // Test whether a specific environment variable exists
        // in a target. This section demonstrates
        // Environment.GetEnvironmentVariable.
        static void CheckVariablesInTarget(String^ variable,
            EnvironmentVariableTarget target)
        {
            String^ variableName;

            // Zero means use the default target.
            if (target == (EnvironmentVariableTarget) 0)
            {
                variableName =
                    Environment::GetEnvironmentVariable(variable);
            }
            else
            {
                variableName = Environment::GetEnvironmentVariable(
                    variable, target);
            }
            Console::WriteLine(NameValueFormat, variable,
                (String::IsNullOrEmpty(variableName) ?
                "doesn't exist" : variableName));
        }

        // CheckVariable:
        // Uses CheckVariablesInTarget to test whether each
        // environment variable exists in a target.
        static void CheckVariables()
        {
            Console::WriteLine("Process:");

            // Check the default target(current process)
            CheckVariablesInTarget(VariableA,
                (EnvironmentVariableTarget) 0);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Process);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Process);
            Console::WriteLine();

            Console::WriteLine("User:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::User);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::User);
            Console::WriteLine();

            Console::WriteLine("Machine:");
            CheckVariablesInTarget(VariableA,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableB,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableC,
                EnvironmentVariableTarget::Machine);
            CheckVariablesInTarget(VariableD,
                EnvironmentVariableTarget::Machine);
            Console::WriteLine();
        }

        // PrintVariablesFromTarget: PrintVariables helper function.
        // This section demonstrates
        // Environment.GetEnvironmentVariables.
        static void PrintVariablesFromTarget(
            EnvironmentVariableTarget target)
        {
            String^ valueString;
            String^ keyString;

            for each (DictionaryEntry^ dictionary in
                Environment::GetEnvironmentVariables(target))
            {
                keyString = safe_cast<String^> (dictionary->Key);
                valueString = safe_cast<String^> (dictionary->Value);
                if (keyString->Contains(VariableSuffix))
                    Console::WriteLine(NameValueFormat, keyString,
                    valueString);
            }
            Console::WriteLine();
        }

        // PrintVariables:
        // Uses PrintVariablesFromTarget to test whether
        // each environment variable exists in a target.
        static void PrintVariables()
        {
            Console::WriteLine("Process:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Process);

            Console::WriteLine("User:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::User);

            Console::WriteLine("Machine:");
            PrintVariablesFromTarget(EnvironmentVariableTarget::Machine);
        }

        // CheckRegistryVariablesForKey: CheckRegistryVariables
        // helper function. This function filters out irrelevant
        // environment variables.
        static void CheckRegistryVariablesForKey(RegistryKey^ targetKey)
        {
            bool exists = false;

            for each (
                String^ variableName in targetKey->GetValueNames())
            {
                if (variableName->Contains(VariableSuffix))
                {
                    String^ variableValue =
                        safe_cast<String^>
                        (targetKey->GetValue(variableName));
                    Console::WriteLine(NameValueFormat, variableName,
                        variableValue);
                    exists = true;
                }
            }
            if (!exists)
            {
                Console::WriteLine(
                    "  Environment variable doesn't exist.");
            }
            Console::WriteLine();
        }

        // CheckRegistryVariables:
        // Uses CheckRegistryVariables to display the User and
        // Machine environment variables in the registry.
        static void CheckRegistryVariables()
        {
            String^ subkeyUser = "Environment";
            String^ subkeyMachine = "System\\CurrentControlSet\\"
                "Control\\Session Manager\\Environment";
            String^ subkeyFormat = "\"{0}\" key:";

            Console::WriteLine(subkeyFormat, subkeyUser);
            CheckRegistryVariablesForKey(
                Registry::CurrentUser->OpenSubKey(subkeyUser));

            Console::WriteLine(subkeyFormat, subkeyMachine);
            CheckRegistryVariablesForKey(
                Registry::LocalMachine->OpenSubKey(subkeyMachine));
        }
    };
};

using namespace EnvironmentVariablesSample;

int main()
{
    TestEnvironmentVariables::DoTest();
}

/*
This example produces the following results:

Step 1:
Check whether the environment variables already exist in
the various targets...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 2:
Set the environment variable for each target...

(default): Set A_GETSET_ENVAR_SAMPLE = "exists in the default target (Process)"
Process: Set B_GETSET_ENVAR_SAMPLE = "exists in Process"
User: Set C_GETSET_ENVAR_SAMPLE = "exists in User"
Machine: Set D_GETSET_ENVAR_SAMPLE = "exists in Machine"

Step 3, part 1:
Display the environment variables in each target...

Process:
B_GETSET_ENVAR_SAMPLE exists in Process.
A_GETSET_ENVAR_SAMPLE exists in the default target (Process).

User:
C_GETSET_ENVAR_SAMPLE exists in User.

Machine:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 3, part 2:
Check whether the User and Machine environment variables
were created in the Windows operating system registry...

"Environment" key:
C_GETSET_ENVAR_SAMPLE exists in User.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
D_GETSET_ENVAR_SAMPLE exists in Machine.

Step 4, part 1:
Delete the environment variables created for this sample...

Step 4, part 2:
Check whether the environment variables were deleted
in each target...

Process:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

User:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Machine:
A_GETSET_ENVAR_SAMPLE doesn't exist.
B_GETSET_ENVAR_SAMPLE doesn't exist.
C_GETSET_ENVAR_SAMPLE doesn't exist.
D_GETSET_ENVAR_SAMPLE doesn't exist.

Step 4, part 3:
Check whether the User and Machine environment variables
were deleted from the Windows operating system registry...

"Environment" key:
Environment variable doesn't exist.

"System\CurrentControlSet\Control\Session Manager\Environment" key:
Environment variable doesn't exist.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间


EventArgs 类

EventArgs 类
成员

EventArgs 是包含事件数据的类的基类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class EventArgs
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class EventArgs
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class EventArgs
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type EventArgs =  class end

此类不包含事件数据，在事件引发时不向事件处理程序传递状态信息的事件会使用此类。如果事件处理程序需要状态信息，则应用程序必须从此类派生一个类来保存数据。 此类不包含事件数据，在事件引发时不向事件处理程序传递状态信息的事件会使用此类。如果事件处理程序需要状态信息，则应用程序必须从此类派生一个类来保存数据。

例如，System..::.AssemblyLoadEventArgs 类用于保存程序集加载事件的数据，并包含描述所加载程序集的 System.Reflection..::.Assembly。

有关事件的更多信息，请参见 EventHandler 主题。

下面的代码阐释了如何使用 EventArgs。

在此示例中，FireEventArgs 是从 EventArgs 派生的事件参数集，它在调用 ActivateFireAlarm 引发事件时被传递到 FireEventHandler。

Imports System

 _

' FireEventArgs: a custom event inherited from EventArgs.

Public Class FireEventArgs
   Inherits EventArgs

   Public Sub New(room As String, ferocity As Integer)
      Me.room = room
      Me.ferocity = ferocity
   End Sub 'New

   ' The fire event will have two pieces of information--
   ' 1) Where the fire is, and 2) how "ferocious" it is.

   Public room As String
   Public ferocity As Integer
End Class 'FireEventArgs
 _
'end of class FireEventArgs

Public Class FireAlarm

   ' Events are handled with delegates, so we must establish a FireEventHandler
   ' as a delegate:

   Delegate Sub FireEventHandler(sender As Object, fe As FireEventArgs)

   ' Now, create a public event "FireEvent" whose type is our FireEventHandler delegate.

   Public Event FireEvent As FireEventHandler

   ' This will be the starting point of our event-- it will create FireEventArgs,
   ' and then raise the event, passing FireEventArgs.

   Public Sub ActivateFireAlarm(room As String, ferocity As Integer)

      Dim fireArgs As New FireEventArgs(room, ferocity)

      '  Now, raise the event by invoking the delegate. Pass in
      '  the object that initated the event (Me) as well as FireEventArgs.
      '  The call must match the signature of FireEventHandler.

      RaiseEvent FireEvent(Me, fireArgs)

   End Sub 'ActivateFireAlarm
End Class 'FireAlarm

' The following event will be the EventHandler.

Class FireHandlerClass

   ' Create a FireAlarm to handle and raise the fire events.

   Public Sub New(fireAlarm As FireAlarm)

      ' Add a delegate containing the ExtinguishFire function to the class'
      ' event so that when FireAlarm is raised, it will subsequently execute
      ' ExtinguishFire.

      AddHandler fireAlarm.FireEvent, AddressOf ExtinguishFire

   End Sub 'New

   ' This is the function to be executed when a fire event is raised.

   Sub ExtinguishFire(sender As Object, fe As FireEventArgs)

      Console.WriteLine()
      Console.WriteLine("The ExtinguishFire function was called by {0}.", sender.ToString())

      ' Now, act in response to the event.

      If fe.ferocity < 2 Then
         Console.WriteLine("This fire in the {0} is no problem.  I'm going to pour some water on it.", fe.room)
      Else
         If fe.ferocity < 5 Then
            Console.WriteLine("Using Fire Extinguisher to put out the fire in the {0}.", fe.room)
         Else
            Console.WriteLine("The fire in the {0} is out of control.  I'm calling the fire department.", fe.room)
         End If
      End If 'end of class FireHandlerClass
   End Sub 'ExtinguishFire
End Class 'FireHandlerClass

Public Class FireEventTest

   Public Shared Sub Main()

      ' Create an instance of the class that will be raising the event.
      Dim myFireAlarm As New FireAlarm()

      ' Create an instance of the class that will be handling the event. Note that
      ' it receives the class that will fire the event as a parameter.

     Dim myFireHandler As New FireHandlerClass(myFireAlarm)

      ' Now, use the FireAlarm class to raise a few events.

      myFireAlarm.ActivateFireAlarm("Kitchen", 3)
      myFireAlarm.ActivateFireAlarm("Study", 1)
      myFireAlarm.ActivateFireAlarm("Porch", 5)

      Return
   End Sub 'Main 'end of main
End Class 'FireEventTest ' end of FireEventTest

using System;

// FireEventArgs: a custom event inherited from EventArgs.

public class FireEventArgs: EventArgs {
    public FireEventArgs(string room, int ferocity) {
        this.room = room;
        this.ferocity = ferocity;
    }

    // The fire event will have two pieces of information--
    // 1) Where the fire is, and 2) how "ferocious" it is.

    public string room;
    public int ferocity;

}	//end of class FireEventArgs

// Class with a function that creates the eventargs and initiates the event
public class FireAlarm {

    // Events are handled with delegates, so we must establish a FireEventHandler
    // as a delegate:

    public delegate void FireEventHandler(object sender, FireEventArgs fe);

    // Now, create a public event "FireEvent" whose type is our FireEventHandler delegate.

    public event FireEventHandler FireEvent;

    // This will be the starting point of our event-- it will create FireEventArgs,
    // and then raise the event, passing FireEventArgs.

    public void ActivateFireAlarm(string room, int ferocity) {

        FireEventArgs fireArgs = new FireEventArgs(room, ferocity);

        // Now, raise the event by invoking the delegate. Pass in
        // the object that initated the event (this) as well as FireEventArgs.
        // The call must match the signature of FireEventHandler.

        FireEvent(this, fireArgs);
    }
}	// end of class FireAlarm

// Class which handles the event

class FireHandlerClass {

    // Create a FireAlarm to handle and raise the fire events.

    public FireHandlerClass(FireAlarm fireAlarm)	{

        // Add a delegate containing the ExtinguishFire function to the class'
        // event so that when FireAlarm is raised, it will subsequently execute
        // ExtinguishFire.

        fireAlarm.FireEvent += new FireAlarm.FireEventHandler(ExtinguishFire);
    }

    // This is the function to be executed when a fire event is raised.

    void ExtinguishFire(object sender, FireEventArgs fe) {

        Console.WriteLine("\nThe ExtinguishFire function was called by {0}.", sender.ToString());

        // Now, act in response to the event.

        if (fe.ferocity < 2)
            Console.WriteLine("This fire in the {0} is no problem.  I'm going to pour some water on it.", fe.room);
        else if (fe.ferocity < 5)
            Console.WriteLine("I'm using FireExtinguisher to put out the fire in the {0}.",  fe.room);
        else
            Console.WriteLine("The fire in the {0} is out of control.  I'm calling the fire department!", fe.room);
    }
}	//end of class FireHandlerClass

public class FireEventTest {
    public static void Main () 	{

        // Create an instance of the class that will be firing an event.

        FireAlarm myFireAlarm = new FireAlarm();

        // Create an instance of the class that will be handling the event. Note that
        // it receives the class that will fire the event as a parameter.

        FireHandlerClass myFireHandler = new FireHandlerClass(myFireAlarm);

        //use our class to raise a few events and watch them get handled
        myFireAlarm.ActivateFireAlarm("Kitchen", 3);
        myFireAlarm.ActivateFireAlarm("Study", 1);
        myFireAlarm.ActivateFireAlarm("Porch", 5);

        return;

    }	//end of main

}	// end of FireEventTest

using namespace System;

// FireEventArgs: a custom event inherited from EventArgs.
public ref class FireEventArgs: public EventArgs
{
public:
   FireEventArgs( String^ room, int ferocity )
   {
      this->room = room;
      this->ferocity = ferocity;
   }

   // The fire event will have two pieces of information--
   // 1) Where the fire is, and 2) how "ferocious" it is.
   String^ room;
   int ferocity;
};

//end of class FireEventArgs
// Class with a function that creates the eventargs and initiates the event
public ref class FireAlarm
{
public:
   delegate void FireEventHandler(    // Events are handled with delegates, so we must establish a FireEventHandler
   // as a delegate:
   Object^ sender, FireEventArgs^ fe );
   event FireEventHandler^ FireEvent;

   // Now, create a public event "FireEvent" whose type is our FireEventHandler delegate.
   // This will be the starting point of our event-- it will create FireEventArgs,
   // and then raise the event, passing FireEventArgs.
   void ActivateFireAlarm( String^ room, int ferocity )
   {
      FireEventArgs^ fireArgs = gcnew FireEventArgs( room,ferocity );

      // Now, raise the event by invoking the delegate. Pass in
      // the object that initated the event (this) as well as FireEventArgs.
      // The call must match the signature of FireEventHandler.
      FireEvent( this, fireArgs );
   }

};

// end of class FireAlarm
// Class which handles the event
ref class FireHandlerClass
{
public:

   // Create a FireAlarm to handle and raise the fire events.
   FireHandlerClass( FireAlarm^ fireAlarm )
   {

      // Add a delegate containing the ExtinguishFire function to the class'
      // event so that when FireAlarm is raised, it will subsequently execute
      // ExtinguishFire.
      fireAlarm->FireEvent += gcnew FireAlarm::FireEventHandler( this, &FireHandlerClass::ExtinguishFire );
   }

   // This is the function to be executed when a fire event is raised.
   void ExtinguishFire( Object^ sender, FireEventArgs^ fe )
   {
      Console::WriteLine( "\nThe ExtinguishFire function was called by {0}.", sender );

      // Now, act in response to the event.
      if ( fe->ferocity < 2 )
            Console::WriteLine( "This fire in the {0} is no problem.  I'm going to pour some water on it.", fe->room );
      else
      if ( fe->ferocity < 5 )
            Console::WriteLine( "I'm using FireExtinguisher to put out the fire in the {0}.", fe->room );
      else
            Console::WriteLine( "The fire in the {0} is out of control.  I'm calling the fire department!", fe->room );
   }

};

//end of class FireHandlerClass
int main()
{

   // Create an instance of the class that will be firing an event.
   FireAlarm^ myFireAlarm = gcnew FireAlarm;

   // Create an instance of the class that will be handling the event. Note that
   // it receives the class that will fire the event as a parameter.
   FireHandlerClass^ myFireHandler = gcnew FireHandlerClass( myFireAlarm );

   //use our class to raise a few events and watch them get handled
   myFireAlarm->ActivateFireAlarm( "Kitchen", 3 );
   myFireAlarm->ActivateFireAlarm( "Study", 1 );
   myFireAlarm->ActivateFireAlarm( "Porch", 5 );
} //end of main

System System..::.EventArgsEventArgs

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EventArgs 成员
System 命名空间


EventArgs 成员

EventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EventArgs 类

EventArgs 是包含事件数据的类的基类。

EventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EventArgs 类
System 命名空间


EventArgs 构造函数

EventArgs 构造函数
EventArgs 类

初始化 EventArgs 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public EventArgs()
public:
EventArgs()
new : unit -> EventArgs

此构造函数只能由公共语言运行时调用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EventArgs 类
EventArgs 成员
System 命名空间


EventArgs 字段

EventArgs 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EventArgs 类

EventArgs 类型公开以下成员。

名称 说明
页首

参考

EventArgs 类
System 命名空间


EventArgs ..::.Empty 字段

EventArgs
.
.
::
.
Empty 字段
EventArgs 类

表示没有事件数据的事件。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Empty As EventArgs
public static readonly EventArgs Empty
public:
static initonly EventArgs^ Empty
static val Empty: EventArgs

Empty 的值是 EventArgs 的只读实例，后者等效于调用 EventArgs 构造函数的结果。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EventArgs 类
EventArgs 成员
System 命名空间


EventArgs 方法

EventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EventArgs 类

EventArgs 类型公开以下成员。

名称 说明
页首

参考

EventArgs 类
System 命名空间


EventHandler 委托

EventHandler 委托

表示将处理不包含事件数据的事件的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Delegate Sub EventHandler ( _
    sender As Object, _
    e As EventArgs _
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void EventHandler(
    Object sender,
    EventArgs e
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void EventHandler(
    Object^ sender,
    EventArgs^ e
)
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type EventHandler =
    delegate of
        sender:Object *
        e:EventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System EventArgs
不包含任何事件数据的 EventArgs。

.NET Framework 中的事件模型基于具有事件委托，该委托将事件与事件处理程序连接。引发事件需要两个元素： .NET Framework 中的事件模型基于具有事件委托，该委托将事件与事件处理程序连接。引发事件需要两个元素：

  • 标识对事件提供响应的方法的委托。

  • 保存事件数据的类。

委托是一个定义签名的类型，即方法的返回值类型和参数列表类型。可以使用委托类型来声明一个变量，该变量可以引用与委托签名相同的所有方法。 委托是一个定义签名的类型，即方法的返回值类型和参数列表类型。可以使用委托类型来声明一个变量，该变量可以引用与委托签名相同的所有方法。

事件处理程序委托的标准签名定义一个没有返回值的方法，其第一个参数的类型为 Object，它引用引发事件的实例，第二个参数从 EventArgs 类型派生，它保存事件数据。如果事件不生成事件数据，则第二个参数只是 EventArgs 的一个实例。否则，第二个参数为从 EventArgs 派生的自定义类型，提供保存事件数据所需的全部字段或属性。 事件处理程序委托的标准签名定义一个没有返回值的方法，其第一个参数的类型为 Object，它引用引发事件的实例，第二个参数从 EventArgs 类型派生，它保存事件数据。如果事件不生成事件数据，则第二个参数只是 EventArgs 的一个实例。否则，第二个参数为从 EventArgs 派生的自定义类型，提供保存事件数据所需的全部字段或属性。 事件处理程序委托的标准签名定义一个没有返回值的方法，其第一个参数的类型为 Object，它引用引发事件的实例，第二个参数从 EventArgs 类型派生，它保存事件数据。如果事件不生成事件数据，则第二个参数只是 EventArgs 的一个实例。否则，第二个参数为从 EventArgs 派生的自定义类型，提供保存事件数据所需的全部字段或属性。

EventHandler 是一个预定义的委托，专用于表示不生成数据的事件的事件处理程序方法。如果事件生成数据，则必须提供自己的自定义事件数据类型，并且必须要么创建一个委托，其中第二个参数的类型为自定义类型，要么使用泛型 EventHandler<(Of <(TEventArgs>)>) 委托类并用自定义类型替代泛型类型参数。 EventHandler 是一个预定义的委托，专用于表示不生成数据的事件的事件处理程序方法。如果事件生成数据，则必须提供自己的自定义事件数据类型，并且必须要么创建一个委托，其中第二个参数的类型为自定义类型，要么使用泛型 EventHandler<(Of <(TEventArgs>)>) 委托类并用自定义类型替代泛型类型参数。

若要将事件与处理事件的方法关联，请向事件添加委托的实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。 若要将事件与处理事件的方法关联，请向事件添加委托的实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。

有关事件处理程序委托的更多信息，请参见 事件和委托。

下面的代码示例演示不使用事件数据的事件处理程序委托的声明。EventHandler 类是事件委托的类型，sender 是引发事件的对象，而 e 则是不包含任何数据的事件数据对象。示例的第二行代码为类中没有数据的事件定义事件成员。 下面的代码示例演示不使用事件数据的事件处理程序委托的声明。EventHandler 类是事件委托的类型，sender 是引发事件的对象，而 e 则是不包含任何数据的事件数据对象。示例的第二行代码为类中没有数据的事件定义事件成员。 下面的代码示例演示不使用事件数据的事件处理程序委托的声明。EventHandler 类是事件委托的类型，sender 是引发事件的对象，而 e 则是不包含任何数据的事件数据对象。示例的第二行代码为类中没有数据的事件定义事件成员。

Delegate Sub EventHandler(sender As Object, e As EventArgs)

Public Event NoDataEventHandler As EventHandler

public delegate void EventHandler(Object sender, EventArgs e);
public event EventHandler NoDataEventHandler;

public:
   delegate void EventHandler( Object^ sender, EventArgs^ e );

   event EventHandler^ NoDataEventHandler;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间
EventHandler TEventArgs
EventArgs
Delegate

其他资源

事件和委托


EventHandler <(Of <(TEventArgs >)>) 委托

EventHandler
<
(Of
<
(
TEventArgs
>
)
>
)
委托

表示将处理事件的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Delegate Sub EventHandler(Of TEventArgs As EventArgs) ( _
    sender As Object, _
    e As TEventArgs _
)
[SerializableAttribute]
public delegate void EventHandler<TEventArgs>(
    Object sender,
    TEventArgs e
)
where TEventArgs : EventArgs

[SerializableAttribute]
generic<typename TEventArgs>
where TEventArgs : EventArgs
public delegate void EventHandler(
    Object^ sender,
    TEventArgs e
)
[<SerializableAttribute>]
type EventHandler =
    delegate of
        sender:Object *
        e:'TEventArgs -> unit

类型参数

TEventArgs

由该事件生成的事件数据的类型。

参数

sender
类型： System Object
事件源。
e
类型：TEventArgs
一个包含事件数据的 EventArgs。

.NET Framework 中的事件模型基于具有事件委托，该委托将事件与事件处理程序连接。引发事件需要两个元素： .NET Framework 中的事件模型基于具有事件委托，该委托将事件与事件处理程序连接。引发事件需要两个元素：

  • 引用向事件提供响应的方法的委托。

  • 保存事件数据的类。

委托是一个定义签名的类型，即方法的返回值类型和参数列表类型。可以使用委托类型来声明一个变量，该变量可以引用与委托签名相同的所有方法。 委托是一个定义签名的类型，即方法的返回值类型和参数列表类型。可以使用委托类型来声明一个变量，该变量可以引用与委托签名相同的所有方法。

事件处理程序委托的标准签名定义一个没有返回值的方法，其第一个参数的类型为 Object，它引用引发事件的实例，第二个参数从 EventArgs 类型派生，它保存事件数据。如果事件不生成事件数据，则第二个参数只是 EventArgs 的一个实例。否则，第二个参数为从 EventArgs 派生的自定义类型，提供保存事件数据所需的全部字段或属性。 事件处理程序委托的标准签名定义一个没有返回值的方法，其第一个参数的类型为 Object，它引用引发事件的实例，第二个参数从 EventArgs 类型派生，它保存事件数据。如果事件不生成事件数据，则第二个参数只是 EventArgs 的一个实例。否则，第二个参数为从 EventArgs 派生的自定义类型，提供保存事件数据所需的全部字段或属性。 事件处理程序委托的标准签名定义一个没有返回值的方法，其第一个参数的类型为 Object，它引用引发事件的实例，第二个参数从 EventArgs 类型派生，它保存事件数据。如果事件不生成事件数据，则第二个参数只是 EventArgs 的一个实例。否则，第二个参数为从 EventArgs 派生的自定义类型，提供保存事件数据所需的全部字段或属性。

EventHandler<(Of <(TEventArgs>)>) 是一种预定义委托，表示事件的事件处理程序方法，它与事件是否生成事件数据无关。如果事件不生成事件数据，则用 EventArgs 替代泛型类型参数；否则，提供自己的自定义事件数据类型并用该类型替代泛型类型参数。 EventHandler<(Of <(TEventArgs>)>) 是一种预定义委托，表示事件的事件处理程序方法，它与事件是否生成事件数据无关。如果事件不生成事件数据，则用 EventArgs 替代泛型类型参数；否则，提供自己的自定义事件数据类型并用该类型替代泛型类型参数。

使用 EventHandler<(Of <(TEventArgs>)>) 的优点在于，如果事件生成事件数据，则无需编写自己的自定义委托代码。此外，.NET Framework 只需一个实现就能支持 EventHandler<(Of <(TEventArgs>)>)，这与替代泛型类型参数的事件数据类型无关。 使用 EventHandler<(Of <(TEventArgs>)>) 的优点在于，如果事件生成事件数据，则无需编写自己的自定义委托代码。此外，.NET Framework 只需一个实现就能支持 EventHandler<(Of <(TEventArgs>)>)，这与替代泛型类型参数的事件数据类型无关。

若要将事件与处理事件的方法关联，请向事件添加委托的实例。除非您移除委托，否则只要该事件发生，便会调用事件处理程序。 若要将事件与处理事件的方法关联，请向事件添加委托的实例。除非您移除委托，否则只要该事件发生，便会调用事件处理程序。

有关事件处理程序委托的更多信息，请参见 事件和委托。

下面的代码示例声明事件数据和使用该事件数据的 EventHandler<(Of <(TEventArgs>)>) 泛型委托，并演示如何引发该事件。

请注意，该示例的 Visual C++ 版本自动提供线程安全访问，使您能够直接引发该事件。因此，与 C# 和 Visual Basic 示例相比，Visual C++ 代码示例不要求您创建线程安全的临时变量。 请注意，该示例的 Visual C++ 版本自动提供线程安全访问，使您能够直接引发该事件。因此，与 C# 和 Visual Basic 示例相比，Visual C++ 代码示例不要求您创建线程安全的临时变量。

' This example demonstrates the EventHandler(Of T) delegate.
Imports System
Imports System.Collections.Generic

'---------------------------------------------------------
Public Class MyEventArgs
   Inherits EventArgs
   Private msg As String

   Public Sub New(messageData As String)
      msg = messageData
   End Sub 'New

   Public Property Message() As String
      Get
         Return msg
      End Get
      Set
         msg = value
      End Set
   End Property
End Class 'MyEventArgs
'---------------------------------------------------------
Public Class HasEvent
   ' Declare an event of delegate type EventHandler of
   ' MyEventArgs.
   Public Event SampleEvent As EventHandler(Of MyEventArgs)

   Public Sub DemoEvent(val As String)
      RaiseEvent SampleEvent(Me, New MyEventArgs(val))
   End Sub 'DemoEvent
End Class 'HasEvent
'---------------------------------------------------------
Public Class Sample
   Public Shared Sub Main()
      Dim he As New HasEvent()
      AddHandler he.SampleEvent, AddressOf SampleEventHandler
      he.DemoEvent("Hey there, Bruce!")
      he.DemoEvent("How are you today?")
      he.DemoEvent("I'm pretty good.")
      he.DemoEvent("Thanks for asking!")
   End Sub 'Main

   Private Shared Sub SampleEventHandler(src As Object, _
                                         mea As MyEventArgs)
      Console.WriteLine(mea.Message)
   End Sub 'SampleEventHandler
End Class 'Sample
'---------------------------------------------------------
'
'This example produces the following results:
'
'Hey there, Bruce!
'How are you today?
'I'm pretty good.
'Thanks for asking!
'

// This example demonstrates the EventHandler<T> delegate.

using System;
using System.Collections.Generic;

//---------------------------------------------------------
public class MyEventArgs : EventArgs
{
    private string msg;

    public MyEventArgs( string messageData ) {
        msg = messageData;
    }
    public string Message {
        get { return msg; }
        set { msg = value; }
    }
}
//---------------------------------------------------------
public class HasEvent
{
// Declare an event of delegate type EventHandler of
// MyEventArgs.

    public event EventHandler<MyEventArgs> SampleEvent;

    public void DemoEvent(string val)
    {
    // Copy to a temporary variable to be thread-safe.
        EventHandler<MyEventArgs> temp = SampleEvent;
        if (temp != null)
            temp(this, new MyEventArgs(val));
    }
}
//---------------------------------------------------------
public class Sample
{
    public static void Main()
    {
        HasEvent he = new HasEvent();
        he.SampleEvent +=
                   new EventHandler<MyEventArgs>(SampleEventHandler);
        he.DemoEvent("Hey there, Bruce!");
        he.DemoEvent("How are you today?");
        he.DemoEvent("I'm pretty good.");
        he.DemoEvent("Thanks for asking!");
    }
    private static void SampleEventHandler(object src, MyEventArgs mea)
    {
        Console.WriteLine(mea.Message);
    }
}
//---------------------------------------------------------
/*
This example produces the following results:

Hey there, Bruce!
How are you today?
I'm pretty good.
Thanks for asking!

*/

// This example demonstrates the EventHandler<T> delegate.

using namespace System;
using namespace System::Collections::Generic;

//---------------------------------------------------------
public ref class MyEventArgs: public EventArgs
{
private:
   String^ msg;

public:
   MyEventArgs( String^ messageData )
   { msg = messageData; }

   property String^ Message
   {
      String^ get()
      { return msg; }

      void set( String^ value )
      { msg = value; }
   }
};

public ref class HasEvent
{
public:
   event EventHandler< MyEventArgs^ >^ SampleEvent;

   // Declare an event of delegate type EventHandler of MyEventArgs.
   void DemoEvent( String^ val )
   {
   //  The CPP compiler automatically provides threadsafe access,
   //  which allows you to raise the event directly:

       SampleEvent(this, gcnew MyEventArgs(val));
   }
};

public ref class Sample
{
public:
   static void TestHandler()
   {
      HasEvent^ he = gcnew HasEvent;
      he->SampleEvent += gcnew EventHandler< MyEventArgs^ >( SampleEventHandler );
      he->DemoEvent( L"Hey there, Bruce!" );
      he->DemoEvent( L"How are you today?" );
      he->DemoEvent( L"I'm pretty good." );
      he->DemoEvent( L"Thanks for asking!" );
   }
private:
   static void SampleEventHandler( Object^ src, MyEventArgs^ mea )
   {
      Console::WriteLine( mea->Message );
   }
};

int main() {
    Sample::TestHandler();
}

//---------------------------------------------------------
/*
This example produces the following results:

Hey there, Bruce!
How are you today?
I'm pretty good.
Thanks for asking!
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间
EventHandler
EventArgs
Delegate

其他资源

事件和委托


Exception 类

Exception 类
成员

表示在应用程序执行期间发生的错误。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public Class Exception _
    Implements ISerializable, _Exception
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public class Exception : ISerializable, _Exception
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
public ref class Exception : ISerializable,
    _Exception
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
type Exception =
    class
        interface ISerializable
        interface _Exception
    end

此类是所有异常的基类。当发生错误时，系统或当前执行的应用程序将通过引发包含错误信息的异常来报告该错误。引发异常之后，将由应用程序或默认异常处理程序处理该异常。 此类是所有异常的基类。当发生错误时，系统或当前执行的应用程序将通过引发包含错误信息的异常来报告该错误。引发异常之后，将由应用程序或默认异常处理程序处理该异常。 此类是所有异常的基类。当发生错误时，系统或当前执行的应用程序将通过引发包含错误信息的异常来报告该错误。引发异常之后，将由应用程序或默认异常处理程序处理该异常。

Try-Catch 块

公共语言运行时提供一种异常处理模型，该模型基于对象形式的异常表示形式，并且将程序代码和异常处理代码分到 try 块和 catch 块中。可以有一个或多个 catch 块，每个块都设计为处理一种特定类型的异常，或者将一个块设计为捕捉比其他块更具体的异常。 公共语言运行时提供一种异常处理模型，该模型基于对象形式的异常表示形式，并且将程序代码和异常处理代码分到 try 块和 catch 块中。可以有一个或多个 catch 块，每个块都设计为处理一种特定类型的异常，或者将一个块设计为捕捉比其他块更具体的异常。

如果应用程序将处理在执行应用程序代码块期间发生的异常，则代码必须放置在 try 语句中。try 语句中的应用程序代码是 try 块。处理由 try 块引发的异常的应用程序代码放在 catch 语句中，称为 catch 块。零个或多个 catch 块与一个 try 块相关联，每个 catch 块均包含一个确定该块处理的异常类型的类型筛选器。 如果应用程序将处理在执行应用程序代码块期间发生的异常，则代码必须放置在 try 语句中。try 语句中的应用程序代码是 try 块。处理由 try 块引发的异常的应用程序代码放在 catch 语句中，称为 catch 块。零个或多个 catch 块与一个 try 块相关联，每个 catch 块均包含一个确定该块处理的异常类型的类型筛选器。 如果应用程序将处理在执行应用程序代码块期间发生的异常，则代码必须放置在 try 语句中。try 语句中的应用程序代码是 try 块。处理由 try 块引发的异常的应用程序代码放在 catch 语句中，称为 catch 块。零个或多个 catch 块与一个 try 块相关联，每个 catch 块均包含一个确定该块处理的异常类型的类型筛选器。 如果应用程序将处理在执行应用程序代码块期间发生的异常，则代码必须放置在 try 语句中。try 语句中的应用程序代码是 try 块。处理由 try 块引发的异常的应用程序代码放在 catch 语句中，称为 catch 块。零个或多个 catch 块与一个 try 块相关联，每个 catch 块均包含一个确定该块处理的异常类型的类型筛选器。

在 try 块中出现异常时，系统按所关联 catch 块在应用程序代码中出现的顺序搜索它们，直到定位到处理该异常的 catch 块为止。如果某 Catch 块的类型筛选器指定 T 或任何派生出 T 的类型，则该 catch 块处理 T 类型的异常。系统在找到第一个处理该异常的 catch 块后即停止搜索。因此，正如本节后面的示例所演示的那样，在应用程序代码中处理某类型的 catch 块必须在处理其基类型的 catch 块之前指定。处理 System.Exception 的 Catch 块最后指定。 在 try 块中出现异常时，系统按所关联 catch 块在应用程序代码中出现的顺序搜索它们，直到定位到处理该异常的 catch 块为止。如果某 Catch 块的类型筛选器指定 T 或任何派生出 T 的类型，则该 catch 块处理 T 类型的异常。系统在找到第一个处理该异常的 catch 块后即停止搜索。因此，正如本节后面的示例所演示的那样，在应用程序代码中处理某类型的 catch 块必须在处理其基类型的 catch 块之前指定。处理 System.Exception 的 Catch 块最后指定。 在 try 块中出现异常时，系统按所关联 catch 块在应用程序代码中出现的顺序搜索它们，直到定位到处理该异常的 catch 块为止。如果某 Catch 块的类型筛选器指定 T 或任何派生出 T 的类型，则该 catch 块处理 T 类型的异常。系统在找到第一个处理该异常的 catch 块后即停止搜索。因此，正如本节后面的示例所演示的那样，在应用程序代码中处理某类型的 catch 块必须在处理其基类型的 catch 块之前指定。处理 System.Exception 的 Catch 块最后指定。 在 try 块中出现异常时，系统按所关联 catch 块在应用程序代码中出现的顺序搜索它们，直到定位到处理该异常的 catch 块为止。如果某 Catch 块的类型筛选器指定 T 或任何派生出 T 的类型，则该 catch 块处理 T 类型的异常。系统在找到第一个处理该异常的 catch 块后即停止搜索。因此，正如本节后面的示例所演示的那样，在应用程序代码中处理某类型的 catch 块必须在处理其基类型的 catch 块之前指定。处理 System.Exception 的 Catch 块最后指定。 在 try 块中出现异常时，系统按所关联 catch 块在应用程序代码中出现的顺序搜索它们，直到定位到处理该异常的 catch 块为止。如果某 Catch 块的类型筛选器指定 T 或任何派生出 T 的类型，则该 catch 块处理 T 类型的异常。系统在找到第一个处理该异常的 catch 块后即停止搜索。因此，正如本节后面的示例所演示的那样，在应用程序代码中处理某类型的 catch 块必须在处理其基类型的 catch 块之前指定。处理 System.Exception 的 Catch 块最后指定。

如果当前 try 块所关联的所有 catch 块均不处理该异常，且当前 try 块嵌套在当前调用的其他 try 块中，则搜索与下一个封闭 try 块相关联的 catch 块。如果没有找到用于该异常的 catch 块，则系统搜索当前调用中前面的嵌套级别。如果在当前调用中没有找到用于该异常的 catch 块，则将该异常沿调用堆栈向上传递，搜索上一个堆栈帧来查找处理该异常的 catch 块。继续搜索调用堆栈，直到该异常得到处理或调用堆栈中没有更多的帧为止。如果到达调用堆栈顶部却没有找到处理该异常的 catch 块，则由默认的异常处理程序处理该异常，然后应用程序终止。 如果当前 try 块所关联的所有 catch 块均不处理该异常，且当前 try 块嵌套在当前调用的其他 try 块中，则搜索与下一个封闭 try 块相关联的 catch 块。如果没有找到用于该异常的 catch 块，则系统搜索当前调用中前面的嵌套级别。如果在当前调用中没有找到用于该异常的 catch 块，则将该异常沿调用堆栈向上传递，搜索上一个堆栈帧来查找处理该异常的 catch 块。继续搜索调用堆栈，直到该异常得到处理或调用堆栈中没有更多的帧为止。如果到达调用堆栈顶部却没有找到处理该异常的 catch 块，则由默认的异常处理程序处理该异常，然后应用程序终止。 如果当前 try 块所关联的所有 catch 块均不处理该异常，且当前 try 块嵌套在当前调用的其他 try 块中，则搜索与下一个封闭 try 块相关联的 catch 块。如果没有找到用于该异常的 catch 块，则系统搜索当前调用中前面的嵌套级别。如果在当前调用中没有找到用于该异常的 catch 块，则将该异常沿调用堆栈向上传递，搜索上一个堆栈帧来查找处理该异常的 catch 块。继续搜索调用堆栈，直到该异常得到处理或调用堆栈中没有更多的帧为止。如果到达调用堆栈顶部却没有找到处理该异常的 catch 块，则由默认的异常处理程序处理该异常，然后应用程序终止。 如果当前 try 块所关联的所有 catch 块均不处理该异常，且当前 try 块嵌套在当前调用的其他 try 块中，则搜索与下一个封闭 try 块相关联的 catch 块。如果没有找到用于该异常的 catch 块，则系统搜索当前调用中前面的嵌套级别。如果在当前调用中没有找到用于该异常的 catch 块，则将该异常沿调用堆栈向上传递，搜索上一个堆栈帧来查找处理该异常的 catch 块。继续搜索调用堆栈，直到该异常得到处理或调用堆栈中没有更多的帧为止。如果到达调用堆栈顶部却没有找到处理该异常的 catch 块，则由默认的异常处理程序处理该异常，然后应用程序终止。 如果当前 try 块所关联的所有 catch 块均不处理该异常，且当前 try 块嵌套在当前调用的其他 try 块中，则搜索与下一个封闭 try 块相关联的 catch 块。如果没有找到用于该异常的 catch 块，则系统搜索当前调用中前面的嵌套级别。如果在当前调用中没有找到用于该异常的 catch 块，则将该异常沿调用堆栈向上传递，搜索上一个堆栈帧来查找处理该异常的 catch 块。继续搜索调用堆栈，直到该异常得到处理或调用堆栈中没有更多的帧为止。如果到达调用堆栈顶部却没有找到处理该异常的 catch 块，则由默认的异常处理程序处理该异常，然后应用程序终止。

异常类型的功能

异常类型支持下面的功能：

  • 描述错误的可读文本。当异常发生时，运行时产生文本消息通知用户错误的性质并提供解决该问题的操作建议。此文本消息保存在异常对象的 Message 属性中。在创建异常对象过程中，可以将文本字符串传递给构造函数以描述该特定异常的详细信息。如果没有向构造函数提供错误消息参数，则将使用默认错误消息。 描述错误的可读文本。当异常发生时，运行时产生文本消息通知用户错误的性质并提供解决该问题的操作建议。此文本消息保存在异常对象的 Message 属性中。在创建异常对象过程中，可以将文本字符串传递给构造函数以描述该特定异常的详细信息。如果没有向构造函数提供错误消息参数，则将使用默认错误消息。 描述错误的可读文本。当异常发生时，运行时产生文本消息通知用户错误的性质并提供解决该问题的操作建议。此文本消息保存在异常对象的 Message 属性中。在创建异常对象过程中，可以将文本字符串传递给构造函数以描述该特定异常的详细信息。如果没有向构造函数提供错误消息参数，则将使用默认错误消息。 描述错误的可读文本。当异常发生时，运行时产生文本消息通知用户错误的性质并提供解决该问题的操作建议。此文本消息保存在异常对象的 Message 属性中。在创建异常对象过程中，可以将文本字符串传递给构造函数以描述该特定异常的详细信息。如果没有向构造函数提供错误消息参数，则将使用默认错误消息。 描述错误的可读文本。当异常发生时，运行时产生文本消息通知用户错误的性质并提供解决该问题的操作建议。此文本消息保存在异常对象的 Message 属性中。在创建异常对象过程中，可以将文本字符串传递给构造函数以描述该特定异常的详细信息。如果没有向构造函数提供错误消息参数，则将使用默认错误消息。

  • 发生异常时调用堆栈的状态。StackTrace 属性包含可以用来确定代码中错误发生位置的堆栈跟踪。堆栈跟踪列出所有调用的方法和源文件中这些调用所在的行号。 发生异常时调用堆栈的状态。StackTrace 属性包含可以用来确定代码中错误发生位置的堆栈跟踪。堆栈跟踪列出所有调用的方法和源文件中这些调用所在的行号。 发生异常时调用堆栈的状态。StackTrace 属性包含可以用来确定代码中错误发生位置的堆栈跟踪。堆栈跟踪列出所有调用的方法和源文件中这些调用所在的行号。

异常类型的类别

基类 Exception 下存在两类异常：

  • 从 SystemException 派生的预定义公共语言运行时异常类。

  • 从 ApplicationException 派生的用户定义的应用程序异常类。

异常类属性

Exception 包含很多属性，可以帮助标识异常的代码位置、类型、帮助文件和原因：StackTrace、InnerException、Message、HelpLink、HResult、Source、TargetSite 和 Data。

当在两个或多个异常之间存在因果关系时，InnerException 属性会维护此信息。作为对此内部异常的反应将引发外部异常。处理外部异常的代码可利用以前的内部异常的信息更妥当地处理错误。关于异常的补充信息可以存储在 Data 属性中。 当在两个或多个异常之间存在因果关系时，InnerException 属性会维护此信息。作为对此内部异常的反应将引发外部异常。处理外部异常的代码可利用以前的内部异常的信息更妥当地处理错误。关于异常的补充信息可以存储在 Data 属性中。 当在两个或多个异常之间存在因果关系时，InnerException 属性会维护此信息。作为对此内部异常的反应将引发外部异常。处理外部异常的代码可利用以前的内部异常的信息更妥当地处理错误。关于异常的补充信息可以存储在 Data 属性中。 当在两个或多个异常之间存在因果关系时，InnerException 属性会维护此信息。作为对此内部异常的反应将引发外部异常。处理外部异常的代码可利用以前的内部异常的信息更妥当地处理错误。关于异常的补充信息可以存储在 Data 属性中。

应本地化在创建异常对象过程中传递给构造函数的错误消息字符串，这种字符串可以使用 ResourceManager 从资源文件提供。有关本地化资源的更多信息，请参见“System.Resources 命名空间概述”和“打包和部署资源”。 应本地化在创建异常对象过程中传递给构造函数的错误消息字符串，这种字符串可以使用 ResourceManager 从资源文件提供。有关本地化资源的更多信息，请参见“System.Resources 命名空间概述”和“打包和部署资源”。

若要向用户提供有关异常发生原因的大量信息，可以使用 HelpLink 属性保存帮助文件的 URL（或 URN）。

Exception 使用具有值 0x80131500 的 HRESULT COR_E_EXCEPTION。

有关 Exception 实例的初始属性值列表，请参见 Exception 构造函数。

性能注意事项

引发或处理异常时，将使用大量的系统资源和执行时间。引发异常只是为了处理确实异常的情况，而不是为了处理可预知的事件或流控制。例如，如果方法参数无效，而应用程序需要使用有效的参数调用方法，则可以引发异常。无效的方法参数意味着出现了异常情况。相反，用户偶尔会输入无效数据，这是可以预见的，因此如果用户输入无效，则不要引发异常。在这种情况下，请提供重试机制以便用户输入有效输入。 引发或处理异常时，将使用大量的系统资源和执行时间。引发异常只是为了处理确实异常的情况，而不是为了处理可预知的事件或流控制。例如，如果方法参数无效，而应用程序需要使用有效的参数调用方法，则可以引发异常。无效的方法参数意味着出现了异常情况。相反，用户偶尔会输入无效数据，这是可以预见的，因此如果用户输入无效，则不要引发异常。在这种情况下，请提供重试机制以便用户输入有效输入。 引发或处理异常时，将使用大量的系统资源和执行时间。引发异常只是为了处理确实异常的情况，而不是为了处理可预知的事件或流控制。例如，如果方法参数无效，而应用程序需要使用有效的参数调用方法，则可以引发异常。无效的方法参数意味着出现了异常情况。相反，用户偶尔会输入无效数据，这是可以预见的，因此如果用户输入无效，则不要引发异常。在这种情况下，请提供重试机制以便用户输入有效输入。 引发或处理异常时，将使用大量的系统资源和执行时间。引发异常只是为了处理确实异常的情况，而不是为了处理可预知的事件或流控制。例如，如果方法参数无效，而应用程序需要使用有效的参数调用方法，则可以引发异常。无效的方法参数意味着出现了异常情况。相反，用户偶尔会输入无效数据，这是可以预见的，因此如果用户输入无效，则不要引发异常。在这种情况下，请提供重试机制以便用户输入有效输入。 引发或处理异常时，将使用大量的系统资源和执行时间。引发异常只是为了处理确实异常的情况，而不是为了处理可预知的事件或流控制。例如，如果方法参数无效，而应用程序需要使用有效的参数调用方法，则可以引发异常。无效的方法参数意味着出现了异常情况。相反，用户偶尔会输入无效数据，这是可以预见的，因此如果用户输入无效，则不要引发异常。在这种情况下，请提供重试机制以便用户输入有效输入。 引发或处理异常时，将使用大量的系统资源和执行时间。引发异常只是为了处理确实异常的情况，而不是为了处理可预知的事件或流控制。例如，如果方法参数无效，而应用程序需要使用有效的参数调用方法，则可以引发异常。无效的方法参数意味着出现了异常情况。相反，用户偶尔会输入无效数据，这是可以预见的，因此如果用户输入无效，则不要引发异常。在这种情况下，请提供重试机制以便用户输入有效输入。

仅对特别条件引发异常，然后在应用于大多数应用程序的常规异常处理程序中捕捉异常，而不是在应用于特定异常的处理程序中捕捉异常。此方法的基础在于，大多数错误都可以通过验证以及与错误接近的错误处理代码进行处理；不需要引发和捕捉异常。通用目的异常处理程序捕捉的是在应用程序任意位置引发的、真正不可预期的异常。 仅对特别条件引发异常，然后在应用于大多数应用程序的常规异常处理程序中捕捉异常，而不是在应用于特定异常的处理程序中捕捉异常。此方法的基础在于，大多数错误都可以通过验证以及与错误接近的错误处理代码进行处理；不需要引发和捕捉异常。通用目的异常处理程序捕捉的是在应用程序任意位置引发的、真正不可预期的异常。 仅对特别条件引发异常，然后在应用于大多数应用程序的常规异常处理程序中捕捉异常，而不是在应用于特定异常的处理程序中捕捉异常。此方法的基础在于，大多数错误都可以通过验证以及与错误接近的错误处理代码进行处理；不需要引发和捕捉异常。通用目的异常处理程序捕捉的是在应用程序任意位置引发的、真正不可预期的异常。

此外，返回代码正常时不要引发异常；不要将返回代码转换为异常；也不要例行公事地捕捉异常、忽略异常，然后继续处理。

下面的代码示例说明如何定义 catch 块来处理 ArithmeticException 错误。此 catch 块还捕捉 DivideByZeroException 错误，因为 DivideByZeroException 从 ArithmeticException 派生，且没有为 DivideByZeroException 错误显式定义 catch 块。 下面的代码示例说明如何定义 catch 块来处理 ArithmeticException 错误。此 catch 块还捕捉 DivideByZeroException 错误，因为 DivideByZeroException 从 ArithmeticException 派生，且没有为 DivideByZeroException 错误显式定义 catch 块。

Imports System

Class ExceptionTestClass

   Public Shared Sub Main()
      Dim x As Integer = 0
      Try
         Dim y As Integer = 100 / x
      Catch e As ArithmeticException
         Console.WriteLine("ArithmeticException Handler: {0}", e.ToString())
      Catch e As Exception
         Console.WriteLine("Generic Exception Handler: {0}", e.ToString())
      End Try
   End Sub 'Main
End Class 'ExceptionTestClass
'
'This code example produces the following results:
'
'ArithmeticException Handler: System.OverflowException: Arithmetic operation resulted in an overflow.
'   at ExceptionTestClass.Main()
'

using System;

class ExceptionTestClass
{
   public static void Main()
   {
      int x = 0;
      try
      {
         int y = 100/x;
      }
         catch (ArithmeticException e)
         {
            Console.WriteLine("ArithmeticException Handler: {0}", e.ToString());
         }
         catch (Exception e)
         {
            Console.WriteLine("Generic Exception Handler: {0}", e.ToString());
         }
   }
}
/*
This code example produces the following results:

ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
   at ExceptionTestClass.Main()

*/

using namespace System;
int main()
{
    int x = 0;
    try
    {
        int y = 100 / x;
    }
    catch ( ArithmeticException^ e )
    {
        Console::WriteLine( "ArithmeticException Handler: {0}", e );
    }
    catch ( Exception^ e )
    {
        Console::WriteLine( "Generic Exception Handler: {0}", e );
    }
}
/*
This code example produces the following results:

ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
   at main()

*/

System System..::.ExceptionException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 成员
System 命名空间
SystemException
ApplicationException

其他资源

处理和引发异常
打包和部署资源


Exception 成员

Exception 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Exception 类

表示在应用程序执行期间发生的错误。

Exception 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Exception 类
System 命名空间


Exception 构造函数

Exception 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Exception 类

初始化 Exception 类的新实例。

名称 说明
页首

参考

Exception 类
Exception 成员
System 命名空间


Exception 构造函数

Exception 构造函数
Exception 类

初始化 Exception 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public Exception()
public:
Exception()
new : unit -> Exception

此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息描述错误并考虑当前系统区域性。

所有派生类均应提供此默认构造函数。下表显示 Exception 实例的初始属性值。 所有派生类均应提供此默认构造函数。下表显示 Exception 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 系统提供的本地化说明。

下面的代码示例派生一个使用预定义消息的 Exception。代码阐释了如何对派生类和 Exception 基类使用无参数构造函数。 下面的代码示例派生一个使用预定义消息的 Exception。代码阐释了如何对派生类和 Exception 基类使用无参数构造函数。

' Example for the Exception( ) constructor.
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Derive an exception with a predefined message.
    Class NotEvenException
        Inherits Exception

        Public Sub New( )
            MyBase.New( _
                "The argument to a function requiring " & _
                "even input is not divisible by 2." )
        End Sub ' New
    End Class ' NotEvenException

    Module NewExceptionDemo

        Sub Main( )
            Console.WriteLine( _
                "This example of the Exception( ) constructor " & _
                "generates the following output." )
            Console.WriteLine( vbCrLf & _
                "Here, an exception is thrown using the " & vbCrLf & _
                "parameterless constructor of the base class." & _
                vbCrLf )

            CalcHalf( 12 )
            CalcHalf( 15 )

            Console.WriteLine(vbCrLf & _
                "Here, an exception is thrown using the " & vbCrLf & _
                "parameterless constructor of a derived class." & _
                vbCrLf )

            CalcHalf2( 24 )
            CalcHalf2( 27 )
        End Sub ' Main

        ' Half throws a base exception if the input is not even.
        Function Half( input As Integer ) As Integer

            If input Mod 2 <> 0 Then
                Throw New Exception( )
            Else
                Return input / 2
            End If
        End Function ' Half

        ' Half2 throws a derived exception if the input is not even.
        Function Half2( input As Integer ) As Integer

            If input Mod 2 <> 0 Then
                Throw New NotEvenException( )
            Else
                Return input / 2
            End If
        End Function ' Half2

        ' CalcHalf calls Half and catches any thrown exceptions.
        Sub CalcHalf( input As Integer )

            Try
                Dim halfInput As Integer = Half( input )
                Console.WriteLine( _
                    "Half of {0} is {1}.", input, halfInput )

            Catch ex As Exception
                Console.WriteLine( ex.ToString( ) )
            End Try
        End Sub ' CalcHalf

        ' CalcHalf2 calls Half2 and catches any thrown exceptions.
        Sub CalcHalf2( input As Integer )

            Try
                Dim halfInput As Integer = Half2( input )
                Console.WriteLine( _
                    "Half of {0} is {1}.", input, halfInput )

            Catch ex As Exception
                Console.WriteLine( ex.ToString( ) )
            End Try
        End Sub ' CalcHalf2

    End Module ' NewExceptionDemo
End Namespace ' NDP_UE_VB

' This example of the Exception( ) constructor generates the following output.
'
' Here, an exception is thrown using the
' parameterless constructor of the base class.
'
' Half of 12 is 6.
' System.Exception: Exception of type System.Exception was thrown.
'    at NDP_UE_VB.NewExceptionDemo.Half(Int32 input)
'    at NDP_UE_VB.NewExceptionDemo.CalcHalf(Int32 input)
'
' Here, an exception is thrown using the
' parameterless constructor of a derived class.
'
' Half of 24 is 12.
' NDP_UE_VB.NotEvenException: The argument to a function requiring even input i
' s not divisible by 2.
'    at NDP_UE_VB.NewExceptionDemo.Half2(Int32 input)
'    at NDP_UE_VB.NewExceptionDemo.CalcHalf2(Int32 input)

// Example for the Exception( ) constructor.
using System;

namespace NDP_UE_CS
{
    // Derive an exception with a predefined message.
    class NotEvenException : Exception
    {
        public NotEvenException( ) :
            base( "The argument to a function requiring " +
                "even input is not divisible by 2." )
        { }
    }

    class NewExceptionDemo
    {
        public static void Main()
        {
            Console.WriteLine(
                "This example of the Exception( ) constructor " +
                "generates the following output." );
            Console.WriteLine(
                "\nHere, an exception is thrown using the \n" +
                "parameterless constructor of the base class.\n" );

            CalcHalf( 12 );
            CalcHalf( 15 );

            Console.WriteLine(
                "\nHere, an exception is thrown using the \n" +
                "parameterless constructor of a derived class.\n" );

            CalcHalf2( 24 );
            CalcHalf2( 27 );
        }

        // Half throws a base exception if the input is not even.
        static int Half( int input )
        {
            if( input % 2 != 0 )
                throw new Exception( );

            else return input / 2;
        }

        // Half2 throws a derived exception if the input is not even.
        static int Half2( int input )
        {
            if( input % 2 != 0 )
                throw new NotEvenException( );

            else return input / 2;
        }

        // CalcHalf calls Half and catches any thrown exceptions.
        static void CalcHalf(int input )
        {
            try
            {
                int halfInput = Half( input );
                Console.WriteLine(
                    "Half of {0} is {1}.", input, halfInput );
            }
            catch( Exception ex )
            {
                Console.WriteLine( ex.ToString( ) );
            }
        }

        // CalcHalf2 calls Half2 and catches any thrown exceptions.
        static void CalcHalf2(int input )
        {
            try
            {
                int halfInput = Half2( input );
                Console.WriteLine(
                    "Half of {0} is {1}.", input, halfInput );
            }
            catch( Exception ex )
            {
                Console.WriteLine( ex.ToString( ) );
            }
        }
    }
}

/*
This example of the Exception( ) constructor generates the following output.

Here, an exception is thrown using the
parameterless constructor of the base class.

Half of 12 is 6.
System.Exception: Exception of type System.Exception was thrown.
   at NDP_UE_CS.NewExceptionDemo.Half(Int32 input)
   at NDP_UE_CS.NewExceptionDemo.CalcHalf(Int32 input)

Here, an exception is thrown using the
parameterless constructor of a derived class.

Half of 24 is 12.
NDP_UE_CS.NotEvenException: The argument to a function requiring even input is
not divisible by 2.
   at NDP_UE_CS.NewExceptionDemo.Half2(Int32 input)
   at NDP_UE_CS.NewExceptionDemo.CalcHalf2(Int32 input)
*/

// Example for the Exception( ) constructor.
using namespace System;

namespace NDP_UE_CPP
{

   // Derive an exception with a predefined message.
   public ref class NotEvenException: public Exception
   {
   public:
      NotEvenException()
         : Exception( "The argument to a function requiring "
      "even input is not divisible by 2." )
      {}

   };

   // Half throws a base exception if the input is not even.
   int Half( int input )
   {
      if ( input % 2 != 0 )
            throw gcnew Exception;
      else
            return input / 2;
   }

   // Half2 throws a derived exception if the input is not even.
   int Half2( int input )
   {
      if ( input % 2 != 0 )
            throw gcnew NotEvenException;
      else
            return input / 2;
   }

   // CalcHalf calls Half and catches any thrown exceptions.
   void CalcHalf( int input )
   {
      try
      {
         int halfInput = Half( input );
         Console::WriteLine( "Half of {0} is {1}.", input, halfInput );
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( ex->ToString() );
      }

   }

   // CalcHalf2 calls Half2 and catches any thrown exceptions.
   void CalcHalf2( int input )
   {
      try
      {
         int halfInput = Half2( input );
         Console::WriteLine( "Half of {0} is {1}.", input, halfInput );
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( ex->ToString() );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of the Exception( ) constructor "
   "generates the following output." );
   Console::WriteLine( "\nHere, an exception is thrown using the \n"
   "parameterless constructor of the base class.\n" );
   NDP_UE_CPP::CalcHalf( 12 );
   NDP_UE_CPP::CalcHalf( 15 );
   Console::WriteLine( "\nHere, an exception is thrown using the \n"
   "parameterless constructor of a derived class.\n" );
   NDP_UE_CPP::CalcHalf2( 24 );
   NDP_UE_CPP::CalcHalf2( 27 );
}

/*
This example of the Exception( ) constructor generates the following output.

Here, an exception is thrown using the
parameterless constructor of the base class.

Half of 12 is 6.
System.Exception: Exception of type System.Exception was thrown.
   at NDP_UE_CPP.Half(Int32 input)
   at NDP_UE_CPP.CalcHalf(Int32 input)

Here, an exception is thrown using the
parameterless constructor of a derived class.

Half of 24 is 12.
NDP_UE_CPP.NotEvenException: The argument to a function requiring even input is
 not divisible by 2.
   at NDP_UE_CPP.Half2(Int32 input)
   at NDP_UE_CPP.CalcHalf2(Int32 input)
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 类
Exception 成员
Exception 重载
System 命名空间


Exception 构造函数 (String)

Exception 构造函数 (String)
Exception 类

使用指定的错误消息初始化 Exception 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public Exception(
    string message
)
public:
Exception(
    String^ message
)
new :
        message:string -> Exception

参数

message
类型： System String
描述错误的消息。

此构造函数用 message 参数初始化新实例的 Message 属性。

下表显示 Exception 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

下面的代码示例派生一个用于特定条件的 Exception。代码阐释了如何对派生类和 Exception 基类使用接受调用方指定的消息作为参数的构造函数。 下面的代码示例派生一个用于特定条件的 Exception。代码阐释了如何对派生类和 Exception 基类使用接受调用方指定的消息作为参数的构造函数。

' Example for the Exception( String ) constructor( String ).
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Derive an exception with a specifiable message.
    Class NotEvenException
        Inherits Exception

        Private Const notEvenMessage As String = _
            "The argument to a function requiring " & _
            "even input is not divisible by 2."

        Public Sub New()
            MyBase.New(notEvenMessage)
        End Sub ' New

        Public Sub New(auxMessage As String)
            MyBase.New(String.Format("{0} - {1}", _
                auxMessage, notEvenMessage))
        End Sub ' New
    End Class ' NotEvenException

    Module NewSExceptionDemo

        Sub Main()
            Console.WriteLine( _
                "This example of the Exception( String )" & vbCrLf & _
                "constructor generates the following output." )
            Console.WriteLine( vbCrLf & _
                "Here, an exception is thrown using the " & vbCrLf & _
                "constructor of the base class." & vbCrLf )

            CalcHalf(18)
            CalcHalf(21)

            Console.WriteLine(vbCrLf & _
                "Here, an exception is thrown using the " & vbCrLf & _
                "constructor of a derived class." & vbCrLf )

            CalcHalf2(30)
            CalcHalf2(33)
        End Sub ' Main

        ' Half throws a base exception if the input is not even.
        Function Half(input As Integer) As Integer

            If input Mod 2 <> 0 Then
                Throw New Exception( String.Format( _
                    "The argument {0} is not divisible by 2.", _
                    input ) )
            Else
                Return input / 2
            End If
        End Function ' Half

        ' Half2 throws a derived exception if the input is not even.
        Function Half2(input As Integer) As Integer

            If input Mod 2 <> 0 Then
                Throw New NotEvenException( _
                    String.Format( "Invalid argument: {0}", input ) )
            Else
                Return input / 2
            End If
        End Function ' Half2

        ' CalcHalf calls Half and catches any thrown exceptions.
        Sub CalcHalf(input As Integer)

            Try
                Dim halfInput As Integer = Half(input)
                Console.WriteLine( _
                    "Half of {0} is {1}.", input, halfInput )

            Catch ex As Exception
                Console.WriteLine( ex.ToString( ) )
            End Try
        End Sub ' CalcHalf

        ' CalcHalf2 calls Half2 and catches any thrown exceptions.
        Sub CalcHalf2( input As Integer )

            Try
                Dim halfInput As Integer = Half2( input )
                Console.WriteLine( _
                    "Half of {0} is {1}.", input, halfInput )

            Catch ex As Exception
                Console.WriteLine( ex.ToString( ) )
            End Try
        End Sub ' CalcHalf2

    End Module ' NewSExceptionDemo
End Namespace ' NDP_UE_VB

' This example of the Exception( String )
' constructor generates the following output.
'
' Here, an exception is thrown using the
' constructor of the base class.
'
' Half of 18 is 9.
' System.Exception: The argument 21 is not divisible by 2.
'    at NDP_UE_VB.NewSExceptionDemo.Half(Int32 input)
'    at NDP_UE_VB.NewSExceptionDemo.CalcHalf(Int32 input)
'
' Here, an exception is thrown using the
' constructor of a derived class.
'
' Half of 30 is 15.
' NDP_UE_VB.NotEvenException: Invalid argument: 33 - The argument to a function
'  requiring even input is not divisible by 2.
'    at NDP_UE_VB.NewSExceptionDemo.Half2(Int32 input)
'    at NDP_UE_VB.NewSExceptionDemo.CalcHalf2(Int32 input)

// Example for the Exception( string ) constructor.
using System;

namespace NDP_UE_CS
{
    // Derive an exception with a specifiable message.
    class NotEvenException : Exception
    {
        const string notEvenMessage =
            "The argument to a function requiring " +
            "even input is not divisible by 2.";

        public NotEvenException( ) :
            base( notEvenMessage )
        { }

        public NotEvenException( string auxMessage ) :
            base( String.Format( "{0} - {1}",
                auxMessage, notEvenMessage ) )
        { }
    }

    class NewSExceptionDemo
    {
        public static void Main()
        {
            Console.WriteLine(
                "This example of the Exception( string )\n" +
                "constructor generates the following output." );
            Console.WriteLine(
                "\nHere, an exception is thrown using the \n" +
                "constructor of the base class.\n" );

            CalcHalf( 18 );
            CalcHalf( 21 );

            Console.WriteLine(
                "\nHere, an exception is thrown using the \n" +
                "constructor of a derived class.\n" );

            CalcHalf2( 30 );
            CalcHalf2( 33 );
        }

        // Half throws a base exception if the input is not even.
        static int Half( int input )
        {
            if( input % 2 != 0 )
                throw new Exception( String.Format(
                    "The argument {0} is not divisible by 2.",
                    input ) );

            else return input / 2;
        }

        // Half2 throws a derived exception if the input is not even.
        static int Half2( int input )
        {
            if( input % 2 != 0 )
                throw new NotEvenException(
                    String.Format( "Invalid argument: {0}", input ) );

            else return input / 2;
        }

        // CalcHalf calls Half and catches any thrown exceptions.
        static void CalcHalf(int input )
        {
            try
            {
                int halfInput = Half( input );
                Console.WriteLine(
                    "Half of {0} is {1}.", input, halfInput );
            }
            catch( Exception ex )
            {
                Console.WriteLine( ex.ToString( ) );
            }
        }

        // CalcHalf2 calls Half2 and catches any thrown exceptions.
        static void CalcHalf2(int input )
        {
            try
            {
                int halfInput = Half2( input );
                Console.WriteLine(
                    "Half of {0} is {1}.", input, halfInput );
            }
            catch( Exception ex )
            {
                Console.WriteLine( ex.ToString( ) );
            }
        }
    }
}

/*
This example of the Exception( string )
constructor generates the following output.

Here, an exception is thrown using the
constructor of the base class.

Half of 18 is 9.
System.Exception: The argument 21 is not divisible by 2.
   at NDP_UE_CS.NewSExceptionDemo.Half(Int32 input)
   at NDP_UE_CS.NewSExceptionDemo.CalcHalf(Int32 input)

Here, an exception is thrown using the
constructor of a derived class.

Half of 30 is 15.
NDP_UE_CS.NotEvenException: Invalid argument: 33 - The argument to a function r
equiring even input is not divisible by 2.
   at NDP_UE_CS.NewSExceptionDemo.Half2(Int32 input)
   at NDP_UE_CS.NewSExceptionDemo.CalcHalf2(Int32 input)
*/

// Example for the Exception( String* ) constructor.
using namespace System;

namespace NDP_UE_CPP
{

   // Derive an exception with a specifiable message.
   public ref class NotEvenException: public Exception
   {
   private:
      static String^ notEvenMessage = "The argument to a function requiring "
      "even input is not divisible by 2.";

   public:
      NotEvenException()
         : Exception( notEvenMessage )
      {}

      NotEvenException( String^ auxMessage )
         : Exception( String::Format( "{0} - {1}", auxMessage, notEvenMessage ) )
      {}

   };

   // Half throws a base exception if the input is not even.
   int Half( int input )
   {
      if ( input % 2 != 0 )
            throw gcnew Exception( String::Format( "The argument {0} is not divisible by 2.", input ) );
      else
            return input / 2;
   }

   // Half2 throws a derived exception if the input is not even.
   int Half2( int input )
   {
      if ( input % 2 != 0 )
            throw gcnew NotEvenException( String::Format( "Invalid argument: {0}", input ) );
      else
            return input / 2;
   }

   // CalcHalf calls Half and catches any thrown exceptions.
   void CalcHalf( int input )
   {
      try
      {
         int halfInput = Half( input );
         Console::WriteLine( "Half of {0} is {1}.", input, halfInput );
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( ex->ToString() );
      }

   }

   // CalcHalf2 calls Half2 and catches any thrown exceptions.
   void CalcHalf2( int input )
   {
      try
      {
         int halfInput = Half2( input );
         Console::WriteLine( "Half of {0} is {1}.", input, halfInput );
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( ex->ToString() );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of the Exception( String* )\n"
   "constructor generates the following output." );
   Console::WriteLine( "\nHere, an exception is thrown using the \n"
   "constructor of the base class.\n" );
   NDP_UE_CPP::CalcHalf( 18 );
   NDP_UE_CPP::CalcHalf( 21 );
   Console::WriteLine( "\nHere, an exception is thrown using the \n"
   "constructor of a derived class.\n" );
   NDP_UE_CPP::CalcHalf2( 30 );
   NDP_UE_CPP::CalcHalf2( 33 );
}

/*
This example of the Exception( String* )
constructor generates the following output.

Here, an exception is thrown using the
constructor of the base class.

Half of 18 is 9.
System.Exception: The argument 21 is not divisible by 2.
   at NDP_UE_CPP.Half(Int32 input)
   at NDP_UE_CPP.CalcHalf(Int32 input)

Here, an exception is thrown using the
constructor of a derived class.

Half of 30 is 15.
NDP_UE_CPP.NotEvenException: Invalid argument: 33 - The argument to a function
requiring even input is not divisible by 2.
   at NDP_UE_CPP.Half2(Int32 input)
   at NDP_UE_CPP.CalcHalf2(Int32 input)
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 类
Exception 成员
Exception 重载
System 命名空间


Exception 构造函数 (SerializationInfo, StreamingContext)

Exception 构造函数 (SerializationInfo, StreamingContext)
Exception 类

用序列化数据初始化 Exception 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected Exception(
    SerializationInfo info,
    StreamingContext context
)
protected:
Exception(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> Exception

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。
异常 | 条件
ArgumentNullException | info 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SerializationException | 类名为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 HResult 为零 (0)。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。 在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。

下面的代码示例定义一个派生的可序列化 Exception 类。代码强行产生一个被零除错误，然后使用 ( SerializationInfo，StreamingContext ) 构造函数创建派生异常的一个实例。代码将该实例序列化为一个文件，并将该文件反序列化为一个它引发的新异常，然后捕捉并显示该异常的数据。 下面的代码示例定义一个派生的可序列化 Exception 类。代码强行产生一个被零除错误，然后使用 ( SerializationInfo，StreamingContext ) 构造函数创建派生异常的一个实例。代码将该实例序列化为一个文件，并将该文件反序列化为一个它引发的新异常，然后捕捉并显示该异常的数据。 下面的代码示例定义一个派生的可序列化 Exception 类。代码强行产生一个被零除错误，然后使用 ( SerializationInfo，StreamingContext ) 构造函数创建派生异常的一个实例。代码将该实例序列化为一个文件，并将该文件反序列化为一个它引发的新异常，然后捕捉并显示该异常的数据。

' Example for the Exception( SerializationInfo, StreamingContext )
' constructor and the Exception.GetObjectData( SerializationInfo,
' StreamingContext ) method.
'
' If compiling with the Visual Basic compiler (VBC) from the command
' prompt, be sure to add the following switch:
'    /reference:System.Runtime.Serialization.Formatters.Soap.dll
Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Imports Microsoft.VisualBasic
Imports System.Security.Permissions

Namespace NDP_UE_VB

    ' Define a serializable derived exception class.
    <Serializable()>  _
    Class SecondLevelException
        Inherits Exception

        ' This public constructor is used by class instantiators.
        Public Sub New( message As String, inner As Exception )
            MyBase.New( message, inner )

            HelpLink = "http://MSDN.Microsoft.com"
            Source = "Exception_Class_Samples"
        End Sub ' New

        ' This protected constructor is used for deserialization.
        Protected Sub New( info As SerializationInfo, _
            context As StreamingContext )
                MyBase.New( info, context )
        End Sub ' New

        ' GetObjectData performs a custom serialization.
        <SecurityPermissionAttribute(SecurityAction.Demand, _
                                     SerializationFormatter:=True)> _
        Overrides Sub GetObjectData( info As SerializationInfo, _
            context As StreamingContext)

            ' Change the case of two properties, and then use the
            ' method of the base class.
            HelpLink = HelpLink.ToLower()
            Source = Source.ToUpper()

            MyBase.GetObjectData(info, context)

        End Sub ' ISerializable.GetObjectData
    End Class ' SecondLevelException

    Module SerializationDemo

        Sub Main()
            Console.WriteLine( _
                "This example of the Exception constructor " & _
                "and Exception.GetObjectData " & vbCrLf & _
                "with SerializationInfo and StreamingContext " & _
                "parameters generates " & vbCrLf & _
                "the following output." & vbCrLf )

            ' This code forces a division by 0 and catches the
            ' resulting exception.
            Try
                Try
                    Dim zero As Integer = 0
                    Dim ecks As Integer = 1 \ zero

                ' Create a new exception to throw again.
                Catch ex As Exception

                    Dim newExcept As New SecondLevelException( _
                        "Forced a division by 0 and threw " & _
                        "another exception.", ex )

                    Console.WriteLine( _
                        "Forced a division by 0, caught the " & _
                        "resulting exception, " & vbCrLf & _
                        "and created a derived exception:" & vbCrLf )
                    Console.WriteLine( "HelpLink: {0}", _
                        newExcept.HelpLink )
                    Console.WriteLine( "Source:   {0}", _
                        newExcept.Source )

                    ' This FileStream is used for the serialization.
                    Dim stream As New FileStream( _
                        "NewException.dat", FileMode.Create )

                    ' Serialize the derived exception.
                    Try
                        Dim formatter As New SoapFormatter( Nothing, _
                            New StreamingContext( _
                                StreamingContextStates.File ) )
                        formatter.Serialize( stream, newExcept )

                        ' Rewind the stream and deserialize the
                        ' exception.
                        stream.Position = 0
                        Dim deserExcept As SecondLevelException = _
                            CType( formatter.Deserialize( stream ), _
                                SecondLevelException )

                        Console.WriteLine( vbCrLf & _
                            "Serialized the exception, and then " & _
                            "deserialized the resulting stream " & _
                            "into a " & vbCrLf & "new exception. " & _
                            "The deserialization changed the case " & _
                            "of certain properties:" & vbCrLf )

                        ' Throw the deserialized exception again.
                        Throw deserExcept

                    Catch se As SerializationException
                        Console.WriteLine( "Failed to serialize: {0}", _
                            se.ToString( ) )

                    Finally
                        stream.Close( )
                    End Try
                End Try

            Catch ex As Exception
                Console.WriteLine( "HelpLink: {0}", ex.HelpLink )
                Console.WriteLine( "Source:   {0}", ex.Source )

                Console.WriteLine( )
                Console.WriteLine( ex.ToString( ) )
            End Try
        End Sub ' Main

    End Module ' SerializationDemo
End Namespace ' NDP_UE_VB

' This example of the Exception constructor and Exception.GetObjectData
' with SerializationInfo and StreamingContext parameters generates
' the following output.
'
' Forced a division by 0, caught the resulting exception,
' and created a derived exception:
'
' HelpLink: http://MSDN.Microsoft.com
' Source:   Exception_Class_Samples
'
' Serialized the exception, and then deserialized the resulting stream into a
' new exception. The deserialization changed the case of certain properties:
'
' HelpLink: http://msdn.microsoft.com
' Source:   EXCEPTION_CLASS_SAMPLES
'
' NDP_UE_VB.SecondLevelException: Forced a division by 0 and threw another exce
' ption. ---> System.DivideByZeroException: Attempted to divide by zero.
'    at NDP_UE_VB.SerializationDemo.Main()
'    --- End of inner exception stack trace ---
'    at NDP_UE_VB.SerializationDemo.Main()

// Example for the Exception( SerializationInfo, StreamingContext )
// constructor and the Exception.GetObjectData( SerializationInfo,
// StreamingContext ) method.
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.Security.Permissions;

namespace NDP_UE_CS
{
    // Define a serializable derived exception class.
    [Serializable()]
    class SecondLevelException : Exception, ISerializable
    {
        // This public constructor is used by class instantiators.
        public SecondLevelException( string message, Exception inner ) :
            base( message, inner )
        {
            HelpLink = "http://MSDN.Microsoft.com";
            Source = "Exception_Class_Samples";
        }

        // This protected constructor is used for deserialization.
        protected SecondLevelException( SerializationInfo info,
            StreamingContext context ) :
                base( info, context )
        { }

        // GetObjectData performs a custom serialization.
        [SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)]
        public override void GetObjectData( SerializationInfo info,
            StreamingContext context )
        {
            // Change the case of two properties, and then use the
            // method of the base class.
            HelpLink = HelpLink.ToLower( );
            Source = Source.ToUpper( );

            base.GetObjectData( info, context );
        }
    }

    class SerializationDemo
    {
        public static void Main()
        {
            Console.WriteLine(
                "This example of the Exception constructor " +
                "and Exception.GetObjectData\nwith Serialization" +
                "Info and StreamingContext parameters " +
                "generates \nthe following output.\n" );

            try
            {
                // This code forces a division by 0 and catches the
                // resulting exception.
                try
                {
                    int  zero = 0;
                    int  ecks = 1 / zero;
                }
                catch( Exception ex )
                {
                    // Create a new exception to throw again.
                    SecondLevelException newExcept =
                        new SecondLevelException(
                            "Forced a division by 0 and threw " +
                            "another exception.", ex );

                    Console.WriteLine(
                        "Forced a division by 0, caught the " +
                        "resulting exception, \n" +
                        "and created a derived exception:\n" );
                    Console.WriteLine( "HelpLink: {0}",
                        newExcept.HelpLink );
                    Console.WriteLine( "Source:   {0}",
                        newExcept.Source );

                    // This FileStream is used for the serialization.
                    FileStream stream =
                        new FileStream( "NewException.dat",
                            FileMode.Create );

                    try
                    {
                        // Serialize the derived exception.
                        SoapFormatter formatter =
                            new SoapFormatter( null,
                                new StreamingContext(
                                    StreamingContextStates.File ) );
                        formatter.Serialize( stream, newExcept );

                        // Rewind the stream and deserialize the
                        // exception.
                        stream.Position = 0;
                        SecondLevelException deserExcept =
                            (SecondLevelException)
                                formatter.Deserialize( stream );

                        Console.WriteLine(
                            "\nSerialized the exception, and then " +
                            "deserialized the resulting stream " +
                            "into a \nnew exception. " +
                            "The deserialization changed the case " +
                            "of certain properties:\n" );

                        // Throw the deserialized exception again.
                        throw deserExcept;
                    }
                    catch( SerializationException se )
                    {
                        Console.WriteLine( "Failed to serialize: {0}",
                            se.ToString( ) );
                    }
                    finally
                    {
                        stream.Close( );
                    }
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( "HelpLink: {0}", ex.HelpLink );
                Console.WriteLine( "Source:   {0}", ex.Source );

                Console.WriteLine( );
                Console.WriteLine( ex.ToString( ) );
            }
        }
    }
}

/*
This example of the Exception constructor and Exception.GetObjectData
with SerializationInfo and StreamingContext parameters generates
the following output.

Forced a division by 0, caught the resulting exception,
and created a derived exception:

HelpLink: http://MSDN.Microsoft.com
Source:   Exception_Class_Samples

Serialized the exception, and then deserialized the resulting stream into a
new exception. The deserialization changed the case of certain properties:

HelpLink: http://msdn.microsoft.com
Source:   EXCEPTION_CLASS_SAMPLES

NDP_UE_CS.SecondLevelException: Forced a division by 0 and threw another except
ion. ---> System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.SerializationDemo.Main()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.SerializationDemo.Main()
*/

// Example for the Exception( SerializationInfo, StreamingContext )
// constructor and the Exception.GetObjectData( SerializationInfo,
// StreamingContext ) method.
#using <System.Runtime.Serialization.Formatters.Soap.dll>

using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Soap;

// Define a serializable derived exception class.

[Serializable]
ref class SecondLevelException: public Exception, public ISerializable
{
public:

   // This public constructor is used by class instantiators.
   SecondLevelException( String^ message, Exception^ inner )
      : Exception( message, inner )
   {
      HelpLink = "http://MSDN.Microsoft.com";
      Source = "Exception_Class_Samples";
   }

protected:

   // This protected constructor is used for deserialization.
   SecondLevelException( SerializationInfo^ info, StreamingContext context )
      : Exception( info, context )
   {}

public:

   // GetObjectData performs a custom serialization.
   [System::Security::Permissions::SecurityPermissionAttribute
   (System::Security::Permissions::SecurityAction::LinkDemand,
   Flags=System::Security::Permissions::SecurityPermissionFlag::SerializationFormatter)]
   virtual void GetObjectData( SerializationInfo^ info, StreamingContext context ) override
   {

      // Change the case of two properties, and then use the
      // method of the base class.
      HelpLink = HelpLink->ToLower();
      Source = Source->ToUpper();
      Exception::GetObjectData( info, context );
   }

};

int main()
{
   Console::WriteLine( "This example of the Exception constructor "
   "and Exception.GetObjectData\nwith Serialization"
   "Info and StreamingContext parameters "
   "generates \nthe following output.\n" );
   try
   {

      // This code forces a division by 0 and catches the
      // resulting exception.
      try
      {
         int zero = 0;
         int ecks = 1 / zero;
      }
      catch ( Exception^ ex )
      {

         // Create a new exception to throw again.
         SecondLevelException^ newExcept = gcnew SecondLevelException( "Forced a division by 0 and threw "
         "another exception.",ex );
         Console::WriteLine( "Forced a division by 0, caught the "
         "resulting exception, \n"
         "and created a derived exception:\n" );
         Console::WriteLine( "HelpLink: {0}", newExcept->HelpLink );
         Console::WriteLine( "Source:   {0}", newExcept->Source );

         // This FileStream is used for the serialization.
         FileStream^ stream = gcnew FileStream( "NewException.dat",FileMode::Create );
         try
         {

            // Serialize the derived exception.
            SoapFormatter^ formatter = gcnew SoapFormatter( nullptr,StreamingContext(StreamingContextStates::File) );
            formatter->Serialize( stream, newExcept );

            // Rewind the stream and deserialize the
            // exception.
            stream->Position = 0;
            SecondLevelException^ deserExcept = dynamic_cast<SecondLevelException^>(formatter->Deserialize( stream ));
            Console::WriteLine( "\nSerialized the exception, and then "
            "deserialized the resulting stream "
            "into a \nnew exception. "
            "The deserialization changed the case "
            "of certain properties:\n" );

            // Throw the deserialized exception again.
            throw deserExcept;
         }
         catch ( SerializationException^ se )
         {
            Console::WriteLine( "Failed to serialize: {0}", se->ToString() );
         }
         finally
         {
            stream->Close();
         }

      }

   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "HelpLink: {0}", ex->HelpLink );
      Console::WriteLine( "Source:   {0}", ex->Source );
      Console::WriteLine();
      Console::WriteLine( ex->ToString() );
   }

}

/*
This example of the Exception constructor and Exception.GetObjectData
with SerializationInfo and StreamingContext parameters generates
the following output.

Forced a division by 0, caught the resulting exception,
and created a derived exception:

HelpLink: http://MSDN.Microsoft.com
Source:   Exception_Class_Samples

Serialized the exception, and then deserialized the resulting stream into a
new exception. The deserialization changed the case of certain properties:

HelpLink: http://msdn.microsoft.com
Source:   EXCEPTION_CLASS_SAMPLES

SecondLevelException: Forced a division by 0 and threw another exception. ---> S
ystem.DivideByZeroException: Attempted to divide by zero.
   at main()
   --- End of inner exception stack trace ---
   at main()

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Exception 类
Exception 成员
Exception 重载
System 命名空间
SerializationInfo
StreamingContext

其他资源

[<topic://cpconSerialization>]


Exception 构造函数 (String, Exception)

Exception 构造函数 (String, Exception)
Exception 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 Exception 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public Exception(
    string message,
    Exception innerException
)
public:
Exception(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> Exception

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个 null 引用（在 Visual Basic 中为 Nothing）。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 Exception 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

下面的代码示例派生一个用于特定条件的 Exception。代码阐释了如何对派生类和 Exception 基类使用接受消息和内部异常作为参数的构造函数。 下面的代码示例派生一个用于特定条件的 Exception。代码阐释了如何对派生类和 Exception 基类使用接受消息和内部异常作为参数的构造函数。

' Sample for Exception( String, Exception ) constructor.
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Derive an exception with a specifiable message and inner exception.
    Class LogTableOverflowException
        Inherits Exception

        Private Const overflowMessage As String = _
            "The log table has overflowed."

        Public Sub New( )
            MyBase.New( overflowMessage )
        End Sub ' New

        Public Sub New( auxMessage As String )
            MyBase.New( String.Format( "{0} - {1}", _
                overflowMessage, auxMessage ) )
        End Sub ' New

        Public Sub New( auxMessage As String, inner As Exception )
            MyBase.New( String.Format( "{0} - {1}", _
                overflowMessage, auxMessage ), inner )
        End Sub ' New
    End Class ' LogTableOverflowException

    Class LogTable

        Public Sub New( numElements As Integer )
            logArea = New String( numElements ) { }
            elemInUse = 0
        End Sub ' New

        Protected logArea( ) As String
        Protected elemInUse As Integer

        ' The AddRecord method throws a derived exception
        ' if the array bounds exception is caught.
        Public Function AddRecord( newRecord As String ) As Integer

            Try
                Dim curElement as Integer = elemInUse
                logArea( elemInUse ) = newRecord
                elemInUse += 1
                Return curElement

            Catch ex As Exception
                Throw New LogTableOverflowException( String.Format( _
                    "Record ""{0}"" was not logged.", newRecord ), ex )
            End Try
        End Function ' AddRecord
        End Class ' LogTable

        Module OverflowDemo

        ' Create a log table and force an overflow.
        Sub Main()
            Dim log As New LogTable(4)

            Console.WriteLine( _
                "This example of the Exception( String, Exception )" & _
                vbCrLf & "constructor generates the following output." )
            Console.WriteLine( vbCrLf & _
                "Example of a derived exception " & vbCrLf & _
                "that references an inner exception:" & vbCrLf )
            Try
                Dim count As Integer = 0

                Do
                    log.AddRecord( _
                        String.Format( _
                            "Log record number {0}", count ) )
                    count += 1
                Loop

            Catch ex As Exception
                Console.WriteLine( ex.ToString( ) )
            End Try
        End Sub ' Main

    End Module ' OverflowDemo
End Namespace ' NDP_UE_VB

' This example of the Exception( String, Exception )
' constructor generates the following output.
'
' Example of a derived exception
' that references an inner exception:
'
' NDP_UE_VB.LogTableOverflowException: The log table has overflowed. - Record "
' Log record number 5" was not logged. ---> System.IndexOutOfRangeException: In
' dex was outside the bounds of the array.
'    at NDP_UE_VB.LogTable.AddRecord(String newRecord)
'    --- End of inner exception stack trace ---
'    at NDP_UE_VB.LogTable.AddRecord(String newRecord)
'    at NDP_UE_VB.OverflowDemo.Main()

// Example for the Exception( string, Exception ) constructor.
using System;

namespace NDP_UE_CS
{
    // Derive an exception with a specifiable message and inner exception.
    class LogTableOverflowException : Exception
    {
        const string overflowMessage =
            "The log table has overflowed.";

        public LogTableOverflowException( ) :
            base( overflowMessage )
        { }

        public LogTableOverflowException( string auxMessage ) :
            base( String.Format( "{0} - {1}",
                overflowMessage, auxMessage ) )
        { }

        public LogTableOverflowException(
            string auxMessage, Exception inner ) :
                base( String.Format( "{0} - {1}",
                    overflowMessage, auxMessage ), inner )
        { }
    }

    class LogTable
    {
        public LogTable( int numElements )
        {
            logArea = new string[ numElements ];
            elemInUse = 0;
        }

        protected string[ ] logArea;
        protected int       elemInUse;

        // The AddRecord method throws a derived exception
        // if the array bounds exception is caught.
        public    int       AddRecord( string newRecord )
        {
            try
            {
                logArea[ elemInUse ] = newRecord;
                return elemInUse++;
            }
            catch( Exception ex )
            {
                throw new LogTableOverflowException(
                    String.Format( "Record \"{0}\" was not logged.",
                        newRecord ), ex );
            }
        }
    }

    class OverflowDemo
    {
        // Create a log table and force an overflow.
        public static void Main()
        {
            LogTable log = new LogTable( 4 );

            Console.WriteLine(
                "This example of the Exception( string, Exception )" +
                "\nconstructor generates the following output." );
            Console.WriteLine(
                "\nExample of a derived exception " +
                "that references an inner exception:\n" );
            try
            {
                for( int count = 1; ; count++ )
                {
                    log.AddRecord(
                        String.Format(
                            "Log record number {0}", count ) );
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( ex.ToString( ) );
            }
        }
    }
}

/*
This example of the Exception( string, Exception )
constructor generates the following output.

Example of a derived exception that references an inner exception:

NDP_UE_CS.LogTableOverflowException: The log table has overflowed. - Record "Lo
g record number 5" was not logged. ---> System.IndexOutOfRangeException: Index
was outside the bounds of the array.
   at NDP_UE_CS.LogTable.AddRecord(String newRecord)
   --- End of inner exception stack trace ---
   at NDP_UE_CS.LogTable.AddRecord(String newRecord)
   at NDP_UE_CS.OverflowDemo.Main()
*/

// Example for the Exception( String*, Exception* ) constructor.
using namespace System;

namespace NDP_UE_CPP
{

   // Derive an exception with a specifiable message and inner exception.
   public ref class LogTableOverflowException: public Exception
   {
   private:
      static String^ overflowMessage =  "The log table has overflowed.";

   public:
      LogTableOverflowException()
         : Exception( overflowMessage )
      {}

      LogTableOverflowException( String^ auxMessage )
         : Exception( String::Format( "{0} - {1}", overflowMessage, auxMessage ) )
      {}

      LogTableOverflowException( String^ auxMessage, Exception^ inner )
         : Exception( String::Format( "{0} - {1}", overflowMessage, auxMessage ), inner )
      {}

   };

   public ref class LogTable
   {
   public:
      LogTable( int numElements )
      {
         logArea = gcnew array<String^>(numElements);
         elemInUse = 0;
      }

   protected:
      array<String^>^logArea;
      int elemInUse;

   public:

      // The AddRecord method throws a derived exception
      // if the array bounds exception is caught.
      int AddRecord( String^ newRecord )
      {
         try
         {
            logArea[ elemInUse ] = newRecord;
            return elemInUse++;
         }
         catch ( Exception^ ex )
         {
            throw gcnew LogTableOverflowException( String::Format( "Record \"{0}\" was not logged.", newRecord ),ex );
         }

      }

   };

   // Create a log table and force an overflow.
   void ForceOverflow()
   {
      LogTable^ log = gcnew LogTable( 4 );
      try
      {
         for ( int count = 1; ; count++ )
         {
            log->AddRecord( String::Format( "Log record number {0}", count ) );

         }
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( ex->ToString() );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of the Exception( String*, Exception* )\n"
   "constructor generates the following output." );
   Console::WriteLine( "\nExample of a derived exception "
   "that references an inner exception:\n" );
   NDP_UE_CPP::ForceOverflow();
}

/*
This example of the Exception( String*, Exception* )
constructor generates the following output.

Example of a derived exception that references an inner exception:

NDP_UE_CPP.LogTableOverflowException: The log table has overflowed. - Record "L
og record number 5" was not logged. ---> System.IndexOutOfRangeException: Index
 was outside the bounds of the array.
   at NDP_UE_CPP.LogTable.AddRecord(String newRecord)
   --- End of inner exception stack trace ---
   at NDP_UE_CPP.LogTable.AddRecord(String newRecord)
   at NDP_UE_CPP.ForceOverflow()
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 类
Exception 成员
Exception 重载
System 命名空间


Exception 方法

Exception 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Exception 类

Exception 类型公开以下成员。

名称 说明
页首

参考

Exception 类
System 命名空间


Exception ..::.GetBaseException 方法

Exception
.
.
::
.
GetBaseException 方法
Exception 类

当在派生类中重写时，返回 Exception，它是一个或多个并发的异常的根源。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetBaseException As Exception
public virtual Exception GetBaseException()
public:
virtual Exception^ GetBaseException()
abstract GetBaseException : unit -> Exception
override GetBaseException : unit -> Exception

返回值

类型： System Exception
异常链中第一个被引发的异常。如果当前异常的 InnerException 属性是 null 引用（Visual Basic 中为 Nothing），则此属性返回当前异常。 异常链中第一个被引发的异常。如果当前异常的 InnerException 属性是 null 引用（Visual Basic 中为 Nothing），则此属性返回当前异常。

实现

异常链由这样一组异常组成：该链中的每个异常都是作为其 InnerException 属性中所引用异常的直接结果而引发的。对于一个给定的链，只能有一个异常是该链中其他所有异常的根源。此异常称为基异常，其 InnerException 属性总是包含 null 引用。 异常链由这样一组异常组成：该链中的每个异常都是作为其 InnerException 属性中所引用异常的直接结果而引发的。对于一个给定的链，只能有一个异常是该链中其他所有异常的根源。此异常称为基异常，其 InnerException 属性总是包含 null 引用。 异常链由这样一组异常组成：该链中的每个异常都是作为其 InnerException 属性中所引用异常的直接结果而引发的。对于一个给定的链，只能有一个异常是该链中其他所有异常的根源。此异常称为基异常，其 InnerException 属性总是包含 null 引用。

对于一个异常链中的所有异常，GetBaseException 方法必须返回同一对象（基异常）。

当需要查找异常的根源，但又不需要当前异常和第一个异常之间可能发生的异常的信息时，可以使用 GetBaseException 方法。

对继承者的说明

在需要控制异常内容或格式的类中重写 GetBaseException 方法。

下面的代码示例定义两个 Exception 派生类。它强行产生一个异常，然后用每个派生类再次引发该异常。代码演示如何使用 GetBaseException 方法检索原始异常。 下面的代码示例定义两个 Exception 派生类。它强行产生一个异常，然后用每个派生类再次引发该异常。代码演示如何使用 GetBaseException 方法检索原始异常。 下面的代码示例定义两个 Exception 派生类。它强行产生一个异常，然后用每个派生类再次引发该异常。代码演示如何使用 GetBaseException 方法检索原始异常。

' Example for the Exception.GetBaseException method.
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Define two derived exceptions to demonstrate nested exceptions.
    Class SecondLevelException
        Inherits Exception

        Public Sub New( message As String, inner As Exception )
            MyBase.New( message, inner )
        End Sub ' New
    End Class ' SecondLevelException

    Class ThirdLevelException
        Inherits Exception

        Public Sub New( message As String, inner As Exception )
            MyBase.New( message, inner )
        End Sub ' New
    End Class ' ThirdLevelException

    Class NestedExceptions

        Public Shared Sub Main( )
            Console.WriteLine( _
                "This example of Exception.GetBaseException " & _
                "generates the following output." )
            Console.WriteLine( vbCrLf & _
                "The program forces a division by 0, then throws " & _
                "the exception " & vbCrLf & "twice more, using " & _
                "a different derived exception each time:" & vbCrLf )

            Try
                ' This sub calls another that forces a division by 0.
                Rethrow()

            Catch ex As Exception
                Dim current As Exception

                Console.WriteLine( _
                    "Unwind the nested exceptions using the " & _
                    "InnerException property:" & vbCrLf )

                ' This code unwinds the nested exceptions using the
                ' InnerException property.
                current = ex
                While Not ( current Is Nothing )
                    Console.WriteLine( current.ToString( ) )
                    Console.WriteLine( )
                    current = current.InnerException
                End While

                ' Display the innermost exception.
                Console.WriteLine( _
                    "Display the base exception using the " & _
                    "GetBaseException method:" & vbCrLf )
                Console.WriteLine( _
                    ex.GetBaseException( ).ToString( ) )
            End Try
        End Sub ' Main

        ' This sub catches the exception from the called sub
        ' DivideBy0( ) and throws another in response.
        Shared Sub Rethrow( )
            Try
                DivideBy0( )

            Catch ex As Exception
                Throw New ThirdLevelException( _
                    "Caught the second exception and " & _
                    "threw a third in response.", ex )
            End Try
        End Sub ' Rethrow

        ' This sub forces a division by 0 and throws a second
        ' exception.
        Shared Sub DivideBy0( )
            Try
                Dim zero As Integer = 0
                Dim ecks As Integer = 1 \ zero

            Catch ex As Exception
                Throw New SecondLevelException( _
                    "Forced a division by 0 and threw " & _
                    "a second exception.", ex )
            End Try
        End Sub ' DivideBy0
    End Class ' NestedExceptions
End Namespace ' NDP_UE_VB

' This example of Exception.GetBaseException generates the following output.
'
' The program forces a division by 0, then throws the exception
' twice more, using a different derived exception each time:
'
' Unwind the nested exceptions using the InnerException property:
'
' NDP_UE_VB.ThirdLevelException: Caught the second exception and threw a third
' in response. ---> NDP_UE_VB.SecondLevelException: Forced a division by 0 and
' threw a second exception. ---> System.DivideByZeroException: Attempted to div
' ide by zero.
'    at NDP_UE_VB.NestedExceptions.DivideBy0()
'    --- End of inner exception stack trace ---
'    at NDP_UE_VB.NestedExceptions.DivideBy0()
'    at NDP_UE_VB.NestedExceptions.Rethrow()
'    --- End of inner exception stack trace ---
'    at NDP_UE_VB.NestedExceptions.Rethrow()
'    at NDP_UE_VB.NestedExceptions.Main()
'
' NDP_UE_VB.SecondLevelException: Forced a division by 0 and threw a second exc
' eption. ---> System.DivideByZeroException: Attempted to divide by zero.
'    at NDP_UE_VB.NestedExceptions.DivideBy0()
'    --- End of inner exception stack trace ---
'    at NDP_UE_VB.NestedExceptions.DivideBy0()
'    at NDP_UE_VB.NestedExceptions.Rethrow()
'
' System.DivideByZeroException: Attempted to divide by zero.
'    at NDP_UE_VB.NestedExceptions.DivideBy0()
'
' Display the base exception using the GetBaseException method:
'
' System.DivideByZeroException: Attempted to divide by zero.
'    at NDP_UE_VB.NestedExceptions.DivideBy0()

// Example for the Exception.GetBaseException method.
using System;

namespace NDP_UE_CS
{
    // Define two derived exceptions to demonstrate nested exceptions.
    class SecondLevelException : Exception
    {
        public SecondLevelException( string message, Exception inner )
            : base( message, inner )
        { }
    }
    class ThirdLevelException : Exception
    {
        public ThirdLevelException( string message, Exception inner )
            : base( message, inner )
        { }
    }

    class NestedExceptions
    {
        public static void Main()
        {
            Console.WriteLine(
                "This example of Exception.GetBaseException " +
                "generates the following output." );
            Console.WriteLine(
                "\nThe program forces a division by 0, then " +
                "throws the exception \ntwice more, " +
                "using a different derived exception each time.\n" );

            try
            {
                // This function calls another that forces a
                // division by 0.
                Rethrow( );
            }
            catch( Exception ex )
            {
                Exception current;

                Console.WriteLine(
                    "Unwind the nested exceptions " +
                    "using the InnerException property:\n" );

                // This code unwinds the nested exceptions using the
                // InnerException property.
                current = ex;
                while( current != null )
                {
                    Console.WriteLine( current.ToString( ) );
                    Console.WriteLine( );
                    current = current.InnerException;
                }

                // Display the innermost exception.
                Console.WriteLine(
                    "Display the base exception " +
                    "using the GetBaseException method:\n" );
                Console.WriteLine(
                    ex.GetBaseException( ).ToString( ) );
            }
        }

        // This function catches the exception from the called
        // function DivideBy0( ) and throws another in response.
        static void Rethrow()
        {
            try
            {
                DivideBy0( );
            }
            catch( Exception ex )
            {
                throw new ThirdLevelException(
                    "Caught the second exception and " +
                    "threw a third in response.", ex );
            }
        }

        // This function forces a division by 0 and throws a second
        // exception.
        static void DivideBy0( )
        {
            try
            {
                int  zero = 0;
                int  ecks = 1 / zero;
            }
            catch( Exception ex )
            {
                throw new SecondLevelException(
                    "Forced a division by 0 and threw " +
                    "a second exception.", ex );
            }
        }
    }
}

/*
This example of Exception.GetBaseException generates the following output.

The program forces a division by 0, then throws the exception
twice more, using a different derived exception each time.

Unwind the nested exceptions using the InnerException property:

NDP_UE_CS.ThirdLevelException: Caught the second exception and threw a third in
 response. ---> NDP_UE_CS.SecondLevelException: Forced a division by 0 and thre
w a second exception. ---> System.DivideByZeroException: Attempted to divide by
 zero.
   at NDP_UE_CS.NestedExceptions.DivideBy0()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.NestedExceptions.DivideBy0()
   at NDP_UE_CS.NestedExceptions.Rethrow()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.NestedExceptions.Rethrow()
   at NDP_UE_CS.NestedExceptions.Main()

NDP_UE_CS.SecondLevelException: Forced a division by 0 and threw a second excep
tion. ---> System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.NestedExceptions.DivideBy0()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.NestedExceptions.DivideBy0()
   at NDP_UE_CS.NestedExceptions.Rethrow()

System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.NestedExceptions.DivideBy0()

Display the base exception using the GetBaseException method:

System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.NestedExceptions.DivideBy0()
*/

// Example for the Exception::GetBaseException method.
using namespace System;

namespace NDP_UE_CPP
{

   // Define two derived exceptions to demonstrate nested exceptions.
   ref class SecondLevelException: public Exception
   {
   public:
      SecondLevelException( String^ message, Exception^ inner )
         : Exception( message, inner )
      {}

   };

   ref class ThirdLevelException: public Exception
   {
   public:
      ThirdLevelException( String^ message, Exception^ inner )
         : Exception( message, inner )
      {}

   };

   // DivideBy0 forces a division by 0 and throws a second exception.
   void DivideBy0()
   {
      try
      {
         int zero = 0;
         int ecks = 1 / zero;
      }
      catch ( Exception^ ex )
      {
         throw gcnew SecondLevelException( "Forced a division by 0 and threw "
         "a second exception.",ex );
      }

   }

   // This function catches the exception from the called function
   // DivideBy0( ) and throws another in response.
   void Rethrow()
   {
      try
      {
         DivideBy0();
      }
      catch ( Exception^ ex )
      {
         throw gcnew ThirdLevelException( "Caught the second exception and "
         "threw a third in response.",ex );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of Exception.GetBaseException "
   "generates the following output." );
   Console::WriteLine( "\nThe program forces a division by 0, "
   "then throws the exception \ntwice more, "
   "using a different derived exception each time.\n" );
   try
   {

      // This function calls another that forces a division by 0.
      NDP_UE_CPP::Rethrow();
   }
   catch ( Exception^ e )
   {
      Exception^ current;
      Console::WriteLine( "Unwind the nested exceptions using "
      "the InnerException property:\n" );

      // This code unwinds the nested exceptions using the
      // InnerException property.
      current = e;
      while ( current != (Object^)0 )
      {
         Console::WriteLine( current->ToString() );
         Console::WriteLine();
         current = current->InnerException;
      }

      // Display the innermost exception.
      Console::WriteLine( "Display the base exception using the \n"
      "GetBaseException method:\n" );
      Console::WriteLine( e->GetBaseException()->ToString() );
   }

}

/*
This example of Exception.GetBaseException generates the following output.

The program forces a division by 0, then throws the exception
twice more, using a different derived exception each time.

Unwind the nested exceptions using the InnerException property:

NDP_UE_CPP.ThirdLevelException: Caught the second exception and threw a third i
n response. ---> NDP_UE_CPP.SecondLevelException: Forced a division by 0 and th
rew a second exception. ---> System.DivideByZeroException: Attempted to divide
by zero.
   at NDP_UE_CPP.DivideBy0()
   --- End of inner exception stack trace ---
   at NDP_UE_CPP.DivideBy0()
   at NDP_UE_CPP.Rethrow()
   --- End of inner exception stack trace ---
   at NDP_UE_CPP.Rethrow()
   at main()

NDP_UE_CPP.SecondLevelException: Forced a division by 0 and threw a second exce
ption. ---> System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CPP.DivideBy0()
   --- End of inner exception stack trace ---
   at NDP_UE_CPP.DivideBy0()
   at NDP_UE_CPP.Rethrow()

System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CPP.DivideBy0()

Display the base exception using the
GetBaseException method:

System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CPP.DivideBy0()
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 类
Exception 成员
System 命名空间


Exception ..::.GetObjectData 方法

Exception
.
.
::
.
GetObjectData 方法
Exception 类

当在派生类中重写时，用关于异常的信息设置 SerializationInfo。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public virtual void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
)
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

实现

异常 | 条件
ArgumentNullException | info 参数是空引用（Visual Basic 中为 Nothing）。

GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常。 GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常。

下面的代码示例定义一个派生的可序列化 Exception 类，该类实现了 GetObjectData，后者对两个属性做一些小的改动，然后调用基类以执行序列化。该示例强制产生一个被零除错误，然后创建派生异常的一个实例。代码将该实例序列化为一个文件，并将该文件反序列化为一个它引发的新异常，然后捕捉并显示该异常的数据。 下面的代码示例定义一个派生的可序列化 Exception 类，该类实现了 GetObjectData，后者对两个属性做一些小的改动，然后调用基类以执行序列化。该示例强制产生一个被零除错误，然后创建派生异常的一个实例。代码将该实例序列化为一个文件，并将该文件反序列化为一个它引发的新异常，然后捕捉并显示该异常的数据。 下面的代码示例定义一个派生的可序列化 Exception 类，该类实现了 GetObjectData，后者对两个属性做一些小的改动，然后调用基类以执行序列化。该示例强制产生一个被零除错误，然后创建派生异常的一个实例。代码将该实例序列化为一个文件，并将该文件反序列化为一个它引发的新异常，然后捕捉并显示该异常的数据。

' Example for the Exception( SerializationInfo, StreamingContext )
' constructor and the Exception.GetObjectData( SerializationInfo,
' StreamingContext ) method.
'
' If compiling with the Visual Basic compiler (VBC) from the command
' prompt, be sure to add the following switch:
'    /reference:System.Runtime.Serialization.Formatters.Soap.dll
Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Imports Microsoft.VisualBasic
Imports System.Security.Permissions

Namespace NDP_UE_VB

    ' Define a serializable derived exception class.
    <Serializable()>  _
    Class SecondLevelException
        Inherits Exception

        ' This public constructor is used by class instantiators.
        Public Sub New( message As String, inner As Exception )
            MyBase.New( message, inner )

            HelpLink = "http://MSDN.Microsoft.com"
            Source = "Exception_Class_Samples"
        End Sub ' New

        ' This protected constructor is used for deserialization.
        Protected Sub New( info As SerializationInfo, _
            context As StreamingContext )
                MyBase.New( info, context )
        End Sub ' New

        ' GetObjectData performs a custom serialization.
        <SecurityPermissionAttribute(SecurityAction.Demand, _
                                     SerializationFormatter:=True)> _
        Overrides Sub GetObjectData( info As SerializationInfo, _
            context As StreamingContext)

            ' Change the case of two properties, and then use the
            ' method of the base class.
            HelpLink = HelpLink.ToLower()
            Source = Source.ToUpper()

            MyBase.GetObjectData(info, context)

        End Sub ' ISerializable.GetObjectData
    End Class ' SecondLevelException

    Module SerializationDemo

        Sub Main()
            Console.WriteLine( _
                "This example of the Exception constructor " & _
                "and Exception.GetObjectData " & vbCrLf & _
                "with SerializationInfo and StreamingContext " & _
                "parameters generates " & vbCrLf & _
                "the following output." & vbCrLf )

            ' This code forces a division by 0 and catches the
            ' resulting exception.
            Try
                Try
                    Dim zero As Integer = 0
                    Dim ecks As Integer = 1 \ zero

                ' Create a new exception to throw again.
                Catch ex As Exception

                    Dim newExcept As New SecondLevelException( _
                        "Forced a division by 0 and threw " & _
                        "another exception.", ex )

                    Console.WriteLine( _
                        "Forced a division by 0, caught the " & _
                        "resulting exception, " & vbCrLf & _
                        "and created a derived exception:" & vbCrLf )
                    Console.WriteLine( "HelpLink: {0}", _
                        newExcept.HelpLink )
                    Console.WriteLine( "Source:   {0}", _
                        newExcept.Source )

                    ' This FileStream is used for the serialization.
                    Dim stream As New FileStream( _
                        "NewException.dat", FileMode.Create )

                    ' Serialize the derived exception.
                    Try
                        Dim formatter As New SoapFormatter( Nothing, _
                            New StreamingContext( _
                                StreamingContextStates.File ) )
                        formatter.Serialize( stream, newExcept )

                        ' Rewind the stream and deserialize the
                        ' exception.
                        stream.Position = 0
                        Dim deserExcept As SecondLevelException = _
                            CType( formatter.Deserialize( stream ), _
                                SecondLevelException )

                        Console.WriteLine( vbCrLf & _
                            "Serialized the exception, and then " & _
                            "deserialized the resulting stream " & _
                            "into a " & vbCrLf & "new exception. " & _
                            "The deserialization changed the case " & _
                            "of certain properties:" & vbCrLf )

                        ' Throw the deserialized exception again.
                        Throw deserExcept

                    Catch se As SerializationException
                        Console.WriteLine( "Failed to serialize: {0}", _
                            se.ToString( ) )

                    Finally
                        stream.Close( )
                    End Try
                End Try

            Catch ex As Exception
                Console.WriteLine( "HelpLink: {0}", ex.HelpLink )
                Console.WriteLine( "Source:   {0}", ex.Source )

                Console.WriteLine( )
                Console.WriteLine( ex.ToString( ) )
            End Try
        End Sub ' Main

    End Module ' SerializationDemo
End Namespace ' NDP_UE_VB

' This example of the Exception constructor and Exception.GetObjectData
' with SerializationInfo and StreamingContext parameters generates
' the following output.
'
' Forced a division by 0, caught the resulting exception,
' and created a derived exception:
'
' HelpLink: http://MSDN.Microsoft.com
' Source:   Exception_Class_Samples
'
' Serialized the exception, and then deserialized the resulting stream into a
' new exception. The deserialization changed the case of certain properties:
'
' HelpLink: http://msdn.microsoft.com
' Source:   EXCEPTION_CLASS_SAMPLES
'
' NDP_UE_VB.SecondLevelException: Forced a division by 0 and threw another exce
' ption. ---> System.DivideByZeroException: Attempted to divide by zero.
'    at NDP_UE_VB.SerializationDemo.Main()
'    --- End of inner exception stack trace ---
'    at NDP_UE_VB.SerializationDemo.Main()

// Example for the Exception( SerializationInfo, StreamingContext )
// constructor and the Exception.GetObjectData( SerializationInfo,
// StreamingContext ) method.
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.Security.Permissions;

namespace NDP_UE_CS
{
    // Define a serializable derived exception class.
    [Serializable()]
    class SecondLevelException : Exception, ISerializable
    {
        // This public constructor is used by class instantiators.
        public SecondLevelException( string message, Exception inner ) :
            base( message, inner )
        {
            HelpLink = "http://MSDN.Microsoft.com";
            Source = "Exception_Class_Samples";
        }

        // This protected constructor is used for deserialization.
        protected SecondLevelException( SerializationInfo info,
            StreamingContext context ) :
                base( info, context )
        { }

        // GetObjectData performs a custom serialization.
        [SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)]
        public override void GetObjectData( SerializationInfo info,
            StreamingContext context )
        {
            // Change the case of two properties, and then use the
            // method of the base class.
            HelpLink = HelpLink.ToLower( );
            Source = Source.ToUpper( );

            base.GetObjectData( info, context );
        }
    }

    class SerializationDemo
    {
        public static void Main()
        {
            Console.WriteLine(
                "This example of the Exception constructor " +
                "and Exception.GetObjectData\nwith Serialization" +
                "Info and StreamingContext parameters " +
                "generates \nthe following output.\n" );

            try
            {
                // This code forces a division by 0 and catches the
                // resulting exception.
                try
                {
                    int  zero = 0;
                    int  ecks = 1 / zero;
                }
                catch( Exception ex )
                {
                    // Create a new exception to throw again.
                    SecondLevelException newExcept =
                        new SecondLevelException(
                            "Forced a division by 0 and threw " +
                            "another exception.", ex );

                    Console.WriteLine(
                        "Forced a division by 0, caught the " +
                        "resulting exception, \n" +
                        "and created a derived exception:\n" );
                    Console.WriteLine( "HelpLink: {0}",
                        newExcept.HelpLink );
                    Console.WriteLine( "Source:   {0}",
                        newExcept.Source );

                    // This FileStream is used for the serialization.
                    FileStream stream =
                        new FileStream( "NewException.dat",
                            FileMode.Create );

                    try
                    {
                        // Serialize the derived exception.
                        SoapFormatter formatter =
                            new SoapFormatter( null,
                                new StreamingContext(
                                    StreamingContextStates.File ) );
                        formatter.Serialize( stream, newExcept );

                        // Rewind the stream and deserialize the
                        // exception.
                        stream.Position = 0;
                        SecondLevelException deserExcept =
                            (SecondLevelException)
                                formatter.Deserialize( stream );

                        Console.WriteLine(
                            "\nSerialized the exception, and then " +
                            "deserialized the resulting stream " +
                            "into a \nnew exception. " +
                            "The deserialization changed the case " +
                            "of certain properties:\n" );

                        // Throw the deserialized exception again.
                        throw deserExcept;
                    }
                    catch( SerializationException se )
                    {
                        Console.WriteLine( "Failed to serialize: {0}",
                            se.ToString( ) );
                    }
                    finally
                    {
                        stream.Close( );
                    }
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( "HelpLink: {0}", ex.HelpLink );
                Console.WriteLine( "Source:   {0}", ex.Source );

                Console.WriteLine( );
                Console.WriteLine( ex.ToString( ) );
            }
        }
    }
}

/*
This example of the Exception constructor and Exception.GetObjectData
with SerializationInfo and StreamingContext parameters generates
the following output.

Forced a division by 0, caught the resulting exception,
and created a derived exception:

HelpLink: http://MSDN.Microsoft.com
Source:   Exception_Class_Samples

Serialized the exception, and then deserialized the resulting stream into a
new exception. The deserialization changed the case of certain properties:

HelpLink: http://msdn.microsoft.com
Source:   EXCEPTION_CLASS_SAMPLES

NDP_UE_CS.SecondLevelException: Forced a division by 0 and threw another except
ion. ---> System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.SerializationDemo.Main()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.SerializationDemo.Main()
*/

// Example for the Exception( SerializationInfo, StreamingContext )
// constructor and the Exception.GetObjectData( SerializationInfo,
// StreamingContext ) method.
#using <System.Runtime.Serialization.Formatters.Soap.dll>

using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Soap;

// Define a serializable derived exception class.

[Serializable]
ref class SecondLevelException: public Exception, public ISerializable
{
public:

   // This public constructor is used by class instantiators.
   SecondLevelException( String^ message, Exception^ inner )
      : Exception( message, inner )
   {
      HelpLink = "http://MSDN.Microsoft.com";
      Source = "Exception_Class_Samples";
   }

protected:

   // This protected constructor is used for deserialization.
   SecondLevelException( SerializationInfo^ info, StreamingContext context )
      : Exception( info, context )
   {}

public:

   // GetObjectData performs a custom serialization.
   [System::Security::Permissions::SecurityPermissionAttribute
   (System::Security::Permissions::SecurityAction::LinkDemand,
   Flags=System::Security::Permissions::SecurityPermissionFlag::SerializationFormatter)]
   virtual void GetObjectData( SerializationInfo^ info, StreamingContext context ) override
   {

      // Change the case of two properties, and then use the
      // method of the base class.
      HelpLink = HelpLink->ToLower();
      Source = Source->ToUpper();
      Exception::GetObjectData( info, context );
   }

};

int main()
{
   Console::WriteLine( "This example of the Exception constructor "
   "and Exception.GetObjectData\nwith Serialization"
   "Info and StreamingContext parameters "
   "generates \nthe following output.\n" );
   try
   {

      // This code forces a division by 0 and catches the
      // resulting exception.
      try
      {
         int zero = 0;
         int ecks = 1 / zero;
      }
      catch ( Exception^ ex )
      {

         // Create a new exception to throw again.
         SecondLevelException^ newExcept = gcnew SecondLevelException( "Forced a division by 0 and threw "
         "another exception.",ex );
         Console::WriteLine( "Forced a division by 0, caught the "
         "resulting exception, \n"
         "and created a derived exception:\n" );
         Console::WriteLine( "HelpLink: {0}", newExcept->HelpLink );
         Console::WriteLine( "Source:   {0}", newExcept->Source );

         // This FileStream is used for the serialization.
         FileStream^ stream = gcnew FileStream( "NewException.dat",FileMode::Create );
         try
         {

            // Serialize the derived exception.
            SoapFormatter^ formatter = gcnew SoapFormatter( nullptr,StreamingContext(StreamingContextStates::File) );
            formatter->Serialize( stream, newExcept );

            // Rewind the stream and deserialize the
            // exception.
            stream->Position = 0;
            SecondLevelException^ deserExcept = dynamic_cast<SecondLevelException^>(formatter->Deserialize( stream ));
            Console::WriteLine( "\nSerialized the exception, and then "
            "deserialized the resulting stream "
            "into a \nnew exception. "
            "The deserialization changed the case "
            "of certain properties:\n" );

            // Throw the deserialized exception again.
            throw deserExcept;
         }
         catch ( SerializationException^ se )
         {
            Console::WriteLine( "Failed to serialize: {0}", se->ToString() );
         }
         finally
         {
            stream->Close();
         }

      }

   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "HelpLink: {0}", ex->HelpLink );
      Console::WriteLine( "Source:   {0}", ex->Source );
      Console::WriteLine();
      Console::WriteLine( ex->ToString() );
   }

}

/*
This example of the Exception constructor and Exception.GetObjectData
with SerializationInfo and StreamingContext parameters generates
the following output.

Forced a division by 0, caught the resulting exception,
and created a derived exception:

HelpLink: http://MSDN.Microsoft.com
Source:   Exception_Class_Samples

Serialized the exception, and then deserialized the resulting stream into a
new exception. The deserialization changed the case of certain properties:

HelpLink: http://msdn.microsoft.com
Source:   EXCEPTION_CLASS_SAMPLES

SecondLevelException: Forced a division by 0 and threw another exception. ---> S
ystem.DivideByZeroException: Attempted to divide by zero.
   at main()
   --- End of inner exception stack trace ---
   at main()

*/
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Exception 类
Exception 成员
System 命名空间
SerializationInfo
StreamingContext


Exception ..::.GetType 方法

Exception
.
.
::
.
GetType 方法
Exception 类

获取当前实例的运行时类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetType As Type
public Type GetType()
public:
virtual Type^ GetType() sealed
abstract GetType : unit -> Type
override GetType : unit -> Type

返回值

类型： System Type
一个 Type 对象，表示当前实例的确切运行时类型。

实现

GetType 方法的存在是为了支持 .NET Framework 基础结构，并在内部调用基本方法 Object..::.GetType。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Exception 类
Exception 成员
System 命名空间
Type
Object


Exception ..::.ToString 方法

Exception
.
.
::
.
ToString 方法
Exception 类

创建并返回当前异常的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前异常的字符串表示形式。

实现

ToString 返回当前异常的可读表示形式。当该异常包含区分区域性的数据时，ToString 所返回的字符串表示形式需要考虑当前系统区域性。虽然对于所返回字符串的格式没有确切的要求，但应当努力从用户的角度反映对象的值。 ToString 返回当前异常的可读表示形式。当该异常包含区分区域性的数据时，ToString 所返回的字符串表示形式需要考虑当前系统区域性。虽然对于所返回字符串的格式没有确切的要求，但应当努力从用户的角度反映对象的值。 ToString 返回当前异常的可读表示形式。当该异常包含区分区域性的数据时，ToString 所返回的字符串表示形式需要考虑当前系统区域性。虽然对于所返回字符串的格式没有确切的要求，但应当努力从用户的角度反映对象的值。

ToString 的默认实现获取引发当前异常的类名、消息、对内部异常调用 ToString 的结果和调用 Environment..::.StackTrace 的结果。如果这些成员中有任何为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则它的值不包含在返回的字符串中。 ToString 的默认实现获取引发当前异常的类名、消息、对内部异常调用 ToString 的结果和调用 Environment..::.StackTrace 的结果。如果这些成员中有任何为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则它的值不包含在返回的字符串中。

如果没有错误消息或者错误消息是空字符串 ("")，则不返回错误消息。仅当内部异常的名称和堆栈跟踪不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，才返回它们。 如果没有错误消息或者错误消息是空字符串 ("")，则不返回错误消息。仅当内部异常的名称和堆栈跟踪不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，才返回它们。

此方法重写 Object..::.ToString。

下面的示例将导致异常并显示对该异常调用 ToString 的结果。

Imports System

Public Class [MyClass]
End Class '[MyClass]

Public Class ArgExceptionExample

   Public Shared Sub Main()
      Dim my As New [MyClass]()
      Dim s As String = "sometext"
      Try
         Dim i As Integer = s.CompareTo(my)
      Catch e As Exception
         Console.WriteLine("Error: {0}", e.ToString())
      End Try
   End Sub 'Main
End Class 'ArgExceptionExample

using System;

public class MyClass {}
public class ArgExceptionExample
   {
   public static void Main()
      {
      MyClass my = new MyClass();
      string s = "sometext";
      try
         {
         int i = s.CompareTo(my);
         }
            catch (Exception e)
            {
            Console.WriteLine("Error: {0}",e.ToString());
            }
      }
}

using namespace System;
public ref class MyClass{};

int main()
{
   MyClass^ my = gcnew MyClass;
   String^ s = "sometext";
   try
   {
      int i = s->CompareTo( my );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Error: {0}", e->ToString() );
   }

}

此代码的输出如下：

Error: System.ArgumentException: Object must be of type String.at System.String.CompareTo(Object value) at ArgExceptionExample.Main()

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 类
Exception 成员
System 命名空间


Exception 属性

Exception 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Exception 类

Exception 类型公开以下成员。

名称 说明
页首

参考

Exception 类
System 命名空间


Exception ..::.Data 属性

Exception
.
.
::
.
Data 属性
Exception 类

获取一个提供用户定义的其他异常信息的键/值对的集合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Data As IDictionary
    Get
public virtual IDictionary Data { get; }
public:
virtual property IDictionary^ Data {
    IDictionary^ get ();
}
abstract Data : IDictionary
override Data : IDictionary

属性值

类型： System.Collections IDictionary
一个对象，它实现 System.Collections..::.IDictionary 接口并包含用户定义的键/值对的集合。默认为空集合。 一个对象，它实现 System.Collections..::.IDictionary 接口并包含用户定义的键/值对的集合。默认为空集合。

使用由 Data 属性返回的 System.Collections..::.IDictionary 对象来存储和检索与异常相关的补充信息。信息的形式为任意数目的用户定义的键/值对。键/值对中的键通常是一个标识字符串，而键/值对中的值则可以是任何对象类型。
使用由 Data 属性返回的 System.Collections..::.IDictionary 对象来存储和检索与异常相关的补充信息。信息的形式为任意数目的用户定义的键/值对。键/值对中的键通常是一个标识字符串，而键/值对中的值则可以是任何对象类型。
使用由 Data 属性返回的 System.Collections..::.IDictionary 对象来存储和检索与异常相关的补充信息。信息的形式为任意数目的用户定义的键/值对。键/值对中的键通常是一个标识字符串，而键/值对中的值则可以是任何对象类型。

键/值对安全性

存储在由 Data 属性返回的集合中的键/值对是不安全的。如果应用程序调用一系列嵌套的例程，每个例程都包含异常处理程序，则产生的调用堆栈包含这些异常处理程序层次结构。如果一个较低级别的例程引发了一个异常，则调用堆栈层次结构中的所有较高级别的异常处理程序都可以通过其他任何异常处理程序读取和/或修改存储在集合中的键/值对。这意味着必须保证键/值对中没有机密信息，如果键/值对中的信息被破坏，还必须保证应用程序可以正常运行。 存储在由 Data 属性返回的集合中的键/值对是不安全的。如果应用程序调用一系列嵌套的例程，每个例程都包含异常处理程序，则产生的调用堆栈包含这些异常处理程序层次结构。如果一个较低级别的例程引发了一个异常，则调用堆栈层次结构中的所有较高级别的异常处理程序都可以通过其他任何异常处理程序读取和/或修改存储在集合中的键/值对。这意味着必须保证键/值对中没有机密信息，如果键/值对中的信息被破坏，还必须保证应用程序可以正常运行。 存储在由 Data 属性返回的集合中的键/值对是不安全的。如果应用程序调用一系列嵌套的例程，每个例程都包含异常处理程序，则产生的调用堆栈包含这些异常处理程序层次结构。如果一个较低级别的例程引发了一个异常，则调用堆栈层次结构中的所有较高级别的异常处理程序都可以通过其他任何异常处理程序读取和/或修改存储在集合中的键/值对。这意味着必须保证键/值对中没有机密信息，如果键/值对中的信息被破坏，还必须保证应用程序可以正常运行。 存储在由 Data 属性返回的集合中的键/值对是不安全的。如果应用程序调用一系列嵌套的例程，每个例程都包含异常处理程序，则产生的调用堆栈包含这些异常处理程序层次结构。如果一个较低级别的例程引发了一个异常，则调用堆栈层次结构中的所有较高级别的异常处理程序都可以通过其他任何异常处理程序读取和/或修改存储在集合中的键/值对。这意味着必须保证键/值对中没有机密信息，如果键/值对中的信息被破坏，还必须保证应用程序可以正常运行。

键冲突

如果不同的异常处理程序指定相同的键来访问键/值对，则发生键冲突。键冲突可能引起较低级别的异常处理程序与较高级别的异常处理程序进行意外通信，而这种通信可能导致难以察觉的程序错误，因此在开发应用程序时应十分谨慎。只要谨慎处理，键冲突还可以用来增强应用程序。 如果不同的异常处理程序指定相同的键来访问键/值对，则发生键冲突。键冲突可能引起较低级别的异常处理程序与较高级别的异常处理程序进行意外通信，而这种通信可能导致难以察觉的程序错误，因此在开发应用程序时应十分谨慎。只要谨慎处理，键冲突还可以用来增强应用程序。 如果不同的异常处理程序指定相同的键来访问键/值对，则发生键冲突。键冲突可能引起较低级别的异常处理程序与较高级别的异常处理程序进行意外通信，而这种通信可能导致难以察觉的程序错误，因此在开发应用程序时应十分谨慎。只要谨慎处理，键冲突还可以用来增强应用程序。

避免键冲突

通过采用命名约定来为键/值对生成唯一的键，可以避免键冲突。例如，命名约定可以产生一个由以句点分隔的应用程序名称、为键/值对提供补充信息的方法以及一个唯一标识符组成的键。 通过采用命名约定来为键/值对生成唯一的键，可以避免键冲突。例如，命名约定可以产生一个由以句点分隔的应用程序名称、为键/值对提供补充信息的方法以及一个唯一标识符组成的键。

假设有两个应用程序，分别名为 Products 和 Suppliers，每个应用程序都有一个名为 Sales 的方法。Products 应用程序中的 Sales 方法提供某种产品的标识号（库存单元或 SKU）。Suppliers 应用程序中的 Sales 方法提供供应商的标识号（或 SID）。因此，此示例的命名约定生成键“Products.Sales.SKU”和“Suppliers.Sales.SID”。 假设有两个应用程序，分别名为 Products 和 Suppliers，每个应用程序都有一个名为 Sales 的方法。Products 应用程序中的 Sales 方法提供某种产品的标识号（库存单元或 SKU）。Suppliers 应用程序中的 Sales 方法提供供应商的标识号（或 SID）。因此，此示例的命名约定生成键“Products.Sales.SKU”和“Suppliers.Sales.SID”。 假设有两个应用程序，分别名为 Products 和 Suppliers，每个应用程序都有一个名为 Sales 的方法。Products 应用程序中的 Sales 方法提供某种产品的标识号（库存单元或 SKU）。Suppliers 应用程序中的 Sales 方法提供供应商的标识号（或 SID）。因此，此示例的命名约定生成键“Products.Sales.SKU”和“Suppliers.Sales.SID”。 假设有两个应用程序，分别名为 Products 和 Suppliers，每个应用程序都有一个名为 Sales 的方法。Products 应用程序中的 Sales 方法提供某种产品的标识号（库存单元或 SKU）。Suppliers 应用程序中的 Sales 方法提供供应商的标识号（或 SID）。因此，此示例的命名约定生成键“Products.Sales.SKU”和“Suppliers.Sales.SID”。

利用键冲突

通过使用存在的一个或多个预排列的特定键来控制过程，可以对键冲突进行利用。假设一种方案，调用堆栈层次结构中的最高级别异常处理程序捕捉了由较低级别异常处理程序引发的所有异常。如果存在具有特定键的键/值对，则高级别异常处理程序以某种非标准方式格式化 IDictionary 对象中的其余键/值对；否则以某种一般方式格式化其余键/值对。 通过使用存在的一个或多个预排列的特定键来控制过程，可以对键冲突进行利用。假设一种方案，调用堆栈层次结构中的最高级别异常处理程序捕捉了由较低级别异常处理程序引发的所有异常。如果存在具有特定键的键/值对，则高级别异常处理程序以某种非标准方式格式化 IDictionary 对象中的其余键/值对；否则以某种一般方式格式化其余键/值对。 通过使用存在的一个或多个预排列的特定键来控制过程，可以对键冲突进行利用。假设一种方案，调用堆栈层次结构中的最高级别异常处理程序捕捉了由较低级别异常处理程序引发的所有异常。如果存在具有特定键的键/值对，则高级别异常处理程序以某种非标准方式格式化 IDictionary 对象中的其余键/值对；否则以某种一般方式格式化其余键/值对。

现在假设另外一种方案，调用堆栈层次结构每个级别的异常处理程序都捕捉下一级别的异常处理程序引发的异常。此外，每个异常处理程序都知道由 Data 属性返回的集合中包含可使用预排列的一组键访问的一组键/值对。 现在假设另外一种方案，调用堆栈层次结构每个级别的异常处理程序都捕捉下一级别的异常处理程序引发的异常。此外，每个异常处理程序都知道由 Data 属性返回的集合中包含可使用预排列的一组键访问的一组键/值对。

每个异常处理程序都使用这组预排列的键和该异常处理程序的唯一信息来更新相应键/值对的值。更新过程完成之后，异常处理程序即向上一级别的异常处理程序引发异常。最后，最高级别异常处理程序访问该键/值对，并显示来自所有较低级别异常处理程序的合并更新信息。 每个异常处理程序都使用这组预排列的键和该异常处理程序的唯一信息来更新相应键/值对的值。更新过程完成之后，异常处理程序即向上一级别的异常处理程序引发异常。最后，最高级别异常处理程序访问该键/值对，并显示来自所有较低级别异常处理程序的合并更新信息。 每个异常处理程序都使用这组预排列的键和该异常处理程序的唯一信息来更新相应键/值对的值。更新过程完成之后，异常处理程序即向上一级别的异常处理程序引发异常。最后，最高级别异常处理程序访问该键/值对，并显示来自所有较低级别异常处理程序的合并更新信息。

说明 说明

对于 Data 属性的值，ExecutionEngineException、OutOfMemoryException、StackOverflowException 和 ThreadAbortException 类始终返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例演示如何使用 Data 属性添加和检索信息。

' This example demonstrates the Exception.Data property.
Imports System
Imports System.Collections

Class Sample
   Public Shared Sub Main()
      Console.WriteLine()
      Console.WriteLine("Exception with some extra information...")
      RunTest(False)
      Console.WriteLine()
      Console.WriteLine("Exception with all extra information...")
      RunTest(True)
   End Sub 'Main

   Public Shared Sub RunTest(displayDetails As Boolean)
      Try
         NestedRoutine1(displayDetails)
      Catch e As Exception
         Console.WriteLine("An exception was thrown.")
         Console.WriteLine(e.Message)
         If Not (e.Data Is Nothing) Then
            Console.WriteLine("  Extra details:")
            Dim de As DictionaryEntry
            For Each de In  e.Data
               Console.WriteLine("    The key is '{0}' and the value is: {1}", de.Key, de.Value)
            Next de
         End If
      End Try
   End Sub 'RunTest

   Public Shared Sub NestedRoutine1(displayDetails As Boolean)
      Try
         NestedRoutine2(displayDetails)
      Catch e As Exception
         e.Data("ExtraInfo") = "Information from NestedRoutine1."
         e.Data.Add("MoreExtraInfo", "More information from NestedRoutine1.")
         Throw e
      End Try
   End Sub 'NestedRoutine1

   Public Shared Sub NestedRoutine2(displayDetails As Boolean)
      Dim e As New Exception("This statement is the original exception message.")
      If displayDetails Then
         Dim s As String = "Information from NestedRoutine2."
         Dim i As Integer = - 903
         Dim dt As DateTime = DateTime.Now
         e.Data.Add("stringInfo", s)
         e.Data("IntInfo") = i
         e.Data("DateTimeInfo") = dt
      End If
      Throw e
   End Sub 'NestedRoutine2
End Class 'Sample
'
'This example produces the following results:
'
'Exception with some extra information...
'An exception was thrown.
'This statement is the original exception message.
'  Extra details:
'    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
'    The key is 'MoreExtraInfo' and the value is: More information from NestedRoutine1.
'
'Exception with all extra information...
'An exception was thrown.
'This statement is the original exception message.
'  Extra details:
'    The key is 'stringInfo' and the value is: Information from NestedRoutine2.
'    The key is 'IntInfo' and the value is: -903
'    The key is 'DateTimeInfo' and the value is: 11/26/2002 2:12:58 PM
'    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
'    The key is 'MoreExtraInfo' and the value is: More information from NestedRoutine1.
'

// This example demonstrates the Exception.Data property.
using System;
using System.Collections;

class Sample
    {
    public static void Main()
        {
        Console.WriteLine();
        Console.WriteLine("Exception with some extra information...");
        RunTest(false);
        Console.WriteLine();
        Console.WriteLine("Exception with all extra information...");
        RunTest(true);
        }
    public static void RunTest(bool displayDetails)
        {
        try
            {
            NestedRoutine1(displayDetails);
            }
        catch (Exception e)
            {
            Console.WriteLine("An exception was thrown.");
            Console.WriteLine(e.Message);
            if (e.Data != null)
                {
                Console.WriteLine("  Extra details:");
                foreach (DictionaryEntry de in e.Data)
                Console.WriteLine("    The key is '{0}' and the value is: {1}",
                                                    de.Key, de.Value);
                }
            }
        }
    public static void NestedRoutine1(bool displayDetails)
        {
        try
            {
            NestedRoutine2(displayDetails);
            }
        catch (Exception e)
            {
            e.Data["ExtraInfo"] = "Information from NestedRoutine1.";
            e.Data.Add("MoreExtraInfo", "More information from NestedRoutine1.");
            throw e;
            }
        }
    public static void NestedRoutine2(bool displayDetails)
        {
        Exception e = new Exception("This statement is the original exception message.");
        if (displayDetails)
            {
            string s = "Information from NestedRoutine2.";
            int i = -903;
            DateTime dt = DateTime.Now;
            e.Data.Add("stringInfo", s);
            e.Data["IntInfo"] = i;
            e.Data["DateTimeInfo"] = dt;
            }
        throw e;
        }
    }
/*
This example produces the following results:

Exception with some extra information...
An exception was thrown.
This statement is the original exception message.
  Extra details:
    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
    The key is 'MoreExtraInfo' and the value is: More information from NestedRoutine1.

Exception with all extra information...
An exception was thrown.
This statement is the original exception message.
  Extra details:
    The key is 'stringInfo' and the value is: Information from NestedRoutine2.
    The key is 'IntInfo' and the value is: -903
    The key is 'DateTimeInfo' and the value is: 11/26/2002 2:12:58 PM
    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
    The key is 'MoreExtraInfo' and the value is: More information from NestedRoutine1.
*/

// This example demonstrates the Exception.Data property.
using namespace System;
using namespace System::Collections;
void NestedRunTest( bool displayDetails ); // forward declarations

void NestedRoutine1( bool displayDetails );
void NestedRoutine2( bool displayDetails );
void RunTest( bool displayDetails );

int main()
{
   Console::WriteLine();
   Console::WriteLine( "Exception with some extra information..." );
   RunTest( false );
   Console::WriteLine();
   Console::WriteLine( "Exception with all extra information..." );
   RunTest( true );
}

void RunTest( bool displayDetails )
{
   try
   {
      NestedRoutine1( displayDetails );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "An exception was thrown." );
      Console::WriteLine( e->Message );
      if ( e->Data != nullptr )
      {
         Console::WriteLine( "  Extra details:" );

         for each (DictionaryEntry de in e->Data)
            Console::WriteLine("    The key is '{0}' and the value is: {1}",
                                                 de.Key, de.Value);
      }
   }
}

void NestedRoutine1( bool displayDetails )
{
   try
   {
      NestedRoutine2( displayDetails );
   }
   catch ( Exception^ e )
   {
      e->Data[ "ExtraInfo" ] = "Information from NestedRoutine1.";
      e->Data->Add( "MoreExtraInfo", "More information from NestedRoutine1." );
      throw e;
   }
}

void NestedRoutine2( bool displayDetails )
{
   Exception^ e = gcnew Exception( "This statement is the original exception message." );
   if ( displayDetails )
   {
      String^ s = "Information from NestedRoutine2.";
      int i = -903;
      DateTime dt = DateTime::Now;
      e->Data->Add( "stringInfo", s );
      e->Data[ "IntInfo" ] = i;
      e->Data[ "DateTimeInfo" ] = dt;
   }

   throw e;
}

/*
This example produces the following results:

Exception with some extra information...
An exception was thrown.
This statement is the original exception message.
  Extra details:
    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
    The key is 'MoreExtraInfo' and the value is: More information from NestedRoutine1.

Exception with all extra information...
An exception was thrown.
This statement is the original exception message.
  Extra details:
    The key is 'stringInfo' and the value is: Information from NestedRoutine2.
    The key is 'IntInfo' and the value is: -903
    The key is 'DateTimeInfo' and the value is: 11/26/2002 2:12:58 PM
    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
    The key is 'MoreExtraInfo' and the value is: More information from NestedRoutine1.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Exception 类
Exception 成员
System 命名空间
System.Collections DictionaryEntry


Exception ..::.HelpLink 属性

Exception
.
.
::
.
HelpLink 属性
Exception 类

获取或设置指向此异常所关联帮助文件的链接。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Property HelpLink As String
    Get
    Set
public virtual string HelpLink { get; set; }
public:
virtual property String^ HelpLink {
    String^ get ();
    void set (String^ value);
}
abstract HelpLink : string with get, set
override HelpLink : string with get, set

属性值

类型： System String
统一资源名称 (URN) 或统一资源定位器 (URL)。

实现

表示帮助文件的返回值是 URN 或 URL。例如，HelpLink 值可以是： 表示帮助文件的返回值是 URN 或 URL。例如，HelpLink 值可以是：

“file:///C:/Applications/Bazzal/help.html#ErrorNum42”

下面的代码示例引发一个在其构造函数中设置了 HelpLink 属性的 Exception，然后捕捉该异常并显示 HelpLink。

' Example for the Exception.HelpLink, Exception.Source,
' Exception.StackTrace, and Exception.TargetSite properties.
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Derive an exception; the constructor sets the HelpLink and
    ' Source properties.
    Class LogTableOverflowException
        Inherits Exception

        Private Const overflowMessage As String = _
            "The log table has overflowed."

        Public Sub New( auxMessage As String, inner As Exception )
            MyBase.New( String.Format( "{0} - {1}", _
                overflowMessage, auxMessage ), inner )

            Me.HelpLink = "http://msdn.microsoft.com"
            Me.Source = "Exception_Class_Samples"

        End Sub ' New
    End Class ' LogTableOverflowException

    Class LogTable

        Public Sub New(numElements As Integer)
            logArea = New String(numElements) {}
            elemInUse = 0
        End Sub ' New

        Protected logArea() As String
        Protected elemInUse As Integer

        ' The AddRecord method throws a derived exception if
        ' the array bounds exception is caught.
        Public Function AddRecord( newRecord As String ) As Integer

            Try
                Dim curElement as Integer = elemInUse
                logArea( elemInUse ) = newRecord
                elemInUse += 1
                Return curElement

            Catch ex As Exception
                Throw New LogTableOverflowException( _
                    String.Format( "Record ""{0}"" was not logged.", _
                        newRecord ), ex )
            End Try
        End Function ' AddRecord
    End Class ' LogTable

    Module OverflowDemo

        ' Create a log table and force an overflow.
        Sub Main( )
            Dim log As New LogTable( 4 )

            Console.WriteLine( "This example of " & vbCrLf & _
                "   Exception.Message, " & vbCrLf & _
                "   Exception.HelpLink, " & vbCrLf & _
                "   Exception.Source, " & vbCrLf & _
                "   Exception.StackTrace, and " & vbCrLf & _
                "   Exception.TargetSite " & vbCrLf & _
                "generates the following output." )

            Try
                Dim count As Integer = 0

                Do
                    log.AddRecord( _
                        String.Format( "Log record number {0}", count ) )
                    count += 1
                Loop

            Catch ex As Exception
                Console.WriteLine( vbCrLf & _
                    "Message ---" & vbCrLf & ex.Message )
                Console.WriteLine( vbCrLf & _
                    "HelpLink ---" & vbCrLf & ex.HelpLink )
                Console.WriteLine( vbCrLf & _
                    "Source ---" & vbCrLf & ex.Source )
                Console.WriteLine( vbCrLf & _
                    "StackTrace ---" & vbCrLf & ex.StackTrace )
                Console.WriteLine( vbCrLf & "TargetSite ---" & _
                    vbCrLf & ex.TargetSite.ToString( ) )
            End Try
        End Sub ' Main

    End Module ' OverflowDemo
End Namespace ' NDP_UE_VB

' This example of
'    Exception.Message,
'    Exception.HelpLink,
'    Exception.Source,
'    Exception.StackTrace, and
'    Exception.TargetSite
' generates the following output.
'
' Message ---
' The log table has overflowed. - Record "Log record number 5" was not logged.
'
' HelpLink ---
' http://msdn.microsoft.com
'
' Source ---
' Exception_Class_Samples
'
' StackTrace ---
'    at NDP_UE_VB.LogTable.AddRecord(String newRecord)
'    at NDP_UE_VB.OverflowDemo.Main()
'
' TargetSite ---
' Int32 AddRecord(System.String)

// Example for the Exception.HelpLink, Exception.Source,
// Exception.StackTrace, and Exception.TargetSite properties.
using System;

namespace NDP_UE_CS
{
    // Derive an exception; the constructor sets the HelpLink and
    // Source properties.
    class LogTableOverflowException : Exception
    {
        const string overflowMessage = "The log table has overflowed.";

        public LogTableOverflowException(
            string auxMessage, Exception inner ) :
                base( String.Format( "{0} - {1}",
                    overflowMessage, auxMessage ), inner )
        {
            this.HelpLink = "http://msdn.microsoft.com";
            this.Source = "Exception_Class_Samples";
        }
    }

    class LogTable
    {
        public LogTable( int numElements )
        {
            logArea = new string[ numElements ];
            elemInUse = 0;
        }

        protected string[ ] logArea;
        protected int       elemInUse;

        // The AddRecord method throws a derived exception if
        // the array bounds exception is caught.
        public    int       AddRecord( string newRecord )
        {
            try
            {
                logArea[ elemInUse ] = newRecord;
                return elemInUse++;
            }
            catch( Exception e )
            {
                throw new LogTableOverflowException(
                    String.Format( "Record \"{0}\" was not logged.",
                        newRecord ), e );
            }
        }
    }

    class OverflowDemo
    {
        // Create a log table and force an overflow.
        public static void Main()
        {
            LogTable log = new LogTable( 4 );

            Console.WriteLine(
                "This example of \n   Exception.Message, \n" +
                "   Exception.HelpLink, \n   Exception.Source, \n" +
                "   Exception.StackTrace, and \n   Exception." +
                "TargetSite \ngenerates the following output." );

            try
            {
                for( int count = 1; ; count++ )
                {
                    log.AddRecord(
                        String.Format(
                            "Log record number {0}", count ) );
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( "\nMessage ---\n{0}", ex.Message );
                Console.WriteLine(
                    "\nHelpLink ---\n{0}", ex.HelpLink );
                Console.WriteLine( "\nSource ---\n{0}", ex.Source );
                Console.WriteLine(
                    "\nStackTrace ---\n{0}", ex.StackTrace );
                Console.WriteLine(
                    "\nTargetSite ---\n{0}", ex.TargetSite );
            }
        }
    }
}

/*
This example of
   Exception.Message,
   Exception.HelpLink,
   Exception.Source,
   Exception.StackTrace, and
   Exception.TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CS.LogTable.AddRecord(String newRecord)
   at NDP_UE_CS.OverflowDemo.Main()

TargetSite ---
Int32 AddRecord(System.String)
*/

// Example for the Exception::HelpLink, Exception::Source,
// Exception::StackTrace, and Exception::TargetSite properties.
using namespace System;

namespace NDP_UE_CPP
{

   // Derive an exception; the constructor sets the HelpLink and
   // Source properties.
   public ref class LogTableOverflowException: public Exception
   {
   private:
      static String^ overflowMessage = "The log table has overflowed.";

   public:
      LogTableOverflowException( String^ auxMessage, Exception^ inner )
         : Exception( String::Format( "{0} - {1}", overflowMessage, auxMessage ), inner )
      {
         this->HelpLink = "http://msdn.microsoft.com";
         this->Source = "Exception_Class_Samples";
      }

   };

   public ref class LogTable
   {
   public:
      LogTable( int numElements )
      {
         logArea = gcnew array<String^>(numElements);
         elemInUse = 0;
      }

   protected:
      array<String^>^logArea;
      int elemInUse;

   public:

      // The AddRecord method throws a derived exception if
      // the array bounds exception is caught.
      int AddRecord( String^ newRecord )
      {
         try
         {
            logArea[ elemInUse ] = newRecord;
            return elemInUse++;
         }
         catch ( Exception^ ex )
         {
            throw gcnew LogTableOverflowException( String::Format( "Record \"{0}\" was not logged.", newRecord ),ex );
         }

      }

   };

   // Create a log table and force an overflow.
   void ForceOverflow()
   {
      LogTable^ log = gcnew LogTable( 4 );
      try
      {
         for ( int count = 1; ; count++ )
         {
            log->AddRecord( String::Format( "Log record number {0}", count ) );

         }
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( "\nMessage ---\n{0}", ex->Message );
         Console::WriteLine( "\nHelpLink ---\n{0}", ex->HelpLink );
         Console::WriteLine( "\nSource ---\n{0}", ex->Source );
         Console::WriteLine( "\nStackTrace ---\n{0}", ex->StackTrace );
         Console::WriteLine( "\nTargetSite ---\n{0}", ex->TargetSite->ToString() );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of \n   Exception::Message, \n"
   "   Exception::HelpLink, \n   Exception::Source, \n"
   "   Exception::StackTrace, and \n   Exception::"
   "TargetSite \ngenerates the following output." );
   NDP_UE_CPP::ForceOverflow();
}

/*
This example of
   Exception::Message,
   Exception::HelpLink,
   Exception::Source,
   Exception::StackTrace, and
   Exception::TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CPP.LogTable.AddRecord(String newRecord)
   at NDP_UE_CPP.ForceOverflow()

TargetSite ---
Int32 AddRecord(System.String)
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Exception 类
Exception 成员
System 命名空间


Exception ..::.HResult 属性

Exception
.
.
::
.
HResult 属性
Exception 类

获取或设置 HRESULT，它是分配给特定异常的编码数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Property HResult As Integer
    Get
    Set
protected int HResult { get; set; }
protected:
property int HResult {
    int get ();
    void set (int value);
}
member HResult : int with get, set

属性值

类型： System Int32
HRESULT 值。

HRESULT 是 32 位值，分为三个不同的域：严重性代码、功能代码和错误代码。严重性代码指示返回值是表示信息、警告还是错误。功能代码标识负责该错误的系统区域。错误代码是所分配的、表示异常的唯一编号。每个异常都映射到一个不同的 HRESULT。当托管代码引发异常时，运行时将 HRESULT 传递给 COM 客户端。当非托管代码返回错误时，相应的 HRESULT 被转换为异常，然后由运行时引发该异常。 HRESULT 是 32 位值，分为三个不同的域：严重性代码、功能代码和错误代码。严重性代码指示返回值是表示信息、警告还是错误。功能代码标识负责该错误的系统区域。错误代码是所分配的、表示异常的唯一编号。每个异常都映射到一个不同的 HRESULT。当托管代码引发异常时，运行时将 HRESULT 传递给 COM 客户端。当非托管代码返回错误时，相应的 HRESULT 被转换为异常，然后由运行时引发该异常。 HRESULT 是 32 位值，分为三个不同的域：严重性代码、功能代码和错误代码。严重性代码指示返回值是表示信息、警告还是错误。功能代码标识负责该错误的系统区域。错误代码是所分配的、表示异常的唯一编号。每个异常都映射到一个不同的 HRESULT。当托管代码引发异常时，运行时将 HRESULT 传递给 COM 客户端。当非托管代码返回错误时，相应的 HRESULT 被转换为异常，然后由运行时引发该异常。 HRESULT 是 32 位值，分为三个不同的域：严重性代码、功能代码和错误代码。严重性代码指示返回值是表示信息、警告还是错误。功能代码标识负责该错误的系统区域。错误代码是所分配的、表示异常的唯一编号。每个异常都映射到一个不同的 HRESULT。当托管代码引发异常时，运行时将 HRESULT 传递给 COM 客户端。当非托管代码返回错误时，相应的 HRESULT 被转换为异常，然后由运行时引发该异常。 HRESULT 是 32 位值，分为三个不同的域：严重性代码、功能代码和错误代码。严重性代码指示返回值是表示信息、警告还是错误。功能代码标识负责该错误的系统区域。错误代码是所分配的、表示异常的唯一编号。每个异常都映射到一个不同的 HRESULT。当托管代码引发异常时，运行时将 HRESULT 传递给 COM 客户端。当非托管代码返回错误时，相应的 HRESULT 被转换为异常，然后由运行时引发该异常。 HRESULT 是 32 位值，分为三个不同的域：严重性代码、功能代码和错误代码。严重性代码指示返回值是表示信息、警告还是错误。功能代码标识负责该错误的系统区域。错误代码是所分配的、表示异常的唯一编号。每个异常都映射到一个不同的 HRESULT。当托管代码引发异常时，运行时将 HRESULT 传递给 COM 客户端。当非托管代码返回错误时，相应的 HRESULT 被转换为异常，然后由运行时引发该异常。 HRESULT 是 32 位值，分为三个不同的域：严重性代码、功能代码和错误代码。严重性代码指示返回值是表示信息、警告还是错误。功能代码标识负责该错误的系统区域。错误代码是所分配的、表示异常的唯一编号。每个异常都映射到一个不同的 HRESULT。当托管代码引发异常时，运行时将 HRESULT 传递给 COM 客户端。当非托管代码返回错误时，相应的 HRESULT 被转换为异常，然后由运行时引发该异常。

下面的代码示例定义一个在其构造函数中设置了 HResult 属性的 Exception 派生类。

' Example for the Exception.HResult property.
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Create the derived exception class.
    Class SecondLevelException
        Inherits Exception

        Private Const SecondLevelHResult As Integer = &H81234567

        ' Set HResult for this exception, and include it in
        ' the exception message.
        Public Sub New(message As String, inner As Exception)

            MyBase.New( String.Format( "(HRESULT:0x{1:X8}) {0}", _
                message, SecondLevelHResult ), inner )
            HResult = SecondLevelHResult
        End Sub ' New
    End Class ' SecondLevelException

    Module HResultDemo

        Sub Main()
            Console.WriteLine( _
                "This example of Exception.HResult " & _
                "generates the following output." & vbCrLf )

            ' This function forces a division by 0 and throws
            ' a second exception.
            Try
                Try
                    Dim zero As Integer = 0
                    Dim ecks As Integer = 1 \ zero

                Catch ex As Exception
                    Throw New SecondLevelException( _
                        "Forced a division by 0 and threw " & _
                        "a second exception.", ex )
                End Try

            Catch ex As Exception
                Console.WriteLine( ex.ToString( ) )
            End Try
        End Sub ' Main

    End Module ' HResultDemo
End Namespace ' NDP_UE_VB

' This example of Exception.HResult generates the following output.
'
' NDP_UE_VB.SecondLevelException: (HRESULT:0x81234567) Forced a division by 0 a
' nd threw a second exception. ---> System.DivideByZeroException: Attempted to
' divide by zero.
'    at NDP_UE_VB.HResultDemo.Main()
'    --- End of inner exception stack trace ---
'    at NDP_UE_VB.HResultDemo.Main()

// Example for the Exception.HResult property.
using System;

namespace NDP_UE_CS
{
    // Create the derived exception class.
    class SecondLevelException : Exception
    {
        const int SecondLevelHResult = unchecked( (int)0x81234567 );

        // Set HResult for this exception, and include it in
        // the exception message.
        public SecondLevelException( string message, Exception inner ) :
            base( string.Format( "(HRESULT:0x{1:X8}) {0}",
                message, SecondLevelHResult ), inner )
        {
            HResult = SecondLevelHResult;
        }
    }

    class HResultDemo
    {
        public static void Main()
        {
            Console.WriteLine(
                "This example of Exception.HResult " +
                "generates the following output.\n" );

            // This function forces a division by 0 and throws
            // a second exception.
            try
            {
                try
                {
                    int  zero = 0;
                    int  ecks = 1 / zero;
                }
                catch( Exception ex )
                {
                    throw new SecondLevelException(
                        "Forced a division by 0 and threw " +
                        "a second exception.", ex );
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( ex.ToString( ) );
            }
        }
    }
}

/*
This example of Exception.HResult generates the following output.

NDP_UE_CS.SecondLevelException: (HRESULT:0x81234567) Forced a division by 0 and
 threw a second exception. ---> System.DivideByZeroException: Attempted to divi
de by zero.
   at NDP_UE_CS.HResultDemo.Main()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.HResultDemo.Main()
*/

// Example for the Exception::HResult property.
using namespace System;

namespace NDP_UE_CPP
{

   // Create the derived exception class.
   ref class SecondLevelException: public Exception
   {
   private:
      static int SecondLevelHResult = (int)0x81234567;

   public:

      // Set HResult for this exception, and include it in
      // the exception message.
      SecondLevelException( String^ message, Exception^ inner )
         : Exception( String::Format( "(HRESULT:0x{1:X8}) {0}", message, SecondLevelHResult ), inner )
      {
         HResult = SecondLevelHResult;
      }

   };

   // This function forces a division by 0 and throws
   // a second exception.
   void DivideBy0()
   {
      try
      {
         try
         {
            int zero = 0;
            int ecks = 1 / zero;
         }
         catch ( Exception^ ex )
         {
            throw gcnew SecondLevelException( "Forced a division by 0 and threw "
            "a second exception.",ex );
         }

      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( ex->ToString() );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of Exception::HResult "
   "generates the following output.\n" );
   NDP_UE_CPP::DivideBy0();
}

/*
This example of Exception::HResult generates the following output.

NDP_UE_CPP.SecondLevelException: (HRESULT:0x81234567) Forced a division by 0 an
d threw a second exception. ---> System.DivideByZeroException: Attempted to div
ide by zero.
   at NDP_UE_CPP.DivideBy0()
   --- End of inner exception stack trace ---
   at NDP_UE_CPP.DivideBy0()
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 类
Exception 成员
System 命名空间


Exception ..::.InnerException 属性

Exception
.
.
::
.
InnerException 属性
Exception 类

获取导致当前异常的 Exception 实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property InnerException As Exception
    Get
public Exception InnerException { get; }
public:
virtual property Exception^ InnerException {
    Exception^ get () sealed;
}
abstract InnerException : Exception
override InnerException : Exception

属性值

类型： System Exception
一个 Exception 实例，它描述导致当前异常的错误。InnerException 属性返回与传递给构造函数的值相同的值，或者，如果没有向构造函数提供内部异常值，则返回 null 引用（Visual Basic 中为 Nothing）。此属性为只读。 一个 Exception 实例，它描述导致当前异常的错误。InnerException 属性返回与传递给构造函数的值相同的值，或者，如果没有向构造函数提供内部异常值，则返回 null 引用（Visual Basic 中为 Nothing）。此属性为只读。 一个 Exception 实例，它描述导致当前异常的错误。InnerException 属性返回与传递给构造函数的值相同的值，或者，如果没有向构造函数提供内部异常值，则返回 null 引用（Visual Basic 中为 Nothing）。此属性为只读。

实现

当异常 X 作为以前的异常 Y 的直接结果发生时，X 的 InnerException 属性应当包含对 Y 的引用。

使用 InnerException 属性获得导致当前异常的异常集。

您可以创建对以前的异常进行捕捉的新异常。处理第二个异常的代码可利用前一个异常的其他信息更适当地处理错误。 您可以创建对以前的异常进行捕捉的新异常。处理第二个异常的代码可利用前一个异常的其他信息更适当地处理错误。

假定有一个可以读取文件并格式化该文件中数据的函数。在此示例中，当代码尝试读取文件时引发 IOException。该函数捕捉 IOException 并引发 FileNotFoundException。IOException 可以保存在 FileNotFoundException 的 InnerException 属性中，从而使捕捉 FileNotFoundException 的代码可以检查导致初始错误的原因。 假定有一个可以读取文件并格式化该文件中数据的函数。在此示例中，当代码尝试读取文件时引发 IOException。该函数捕捉 IOException 并引发 FileNotFoundException。IOException 可以保存在 FileNotFoundException 的 InnerException 属性中，从而使捕捉 FileNotFoundException 的代码可以检查导致初始错误的原因。 假定有一个可以读取文件并格式化该文件中数据的函数。在此示例中，当代码尝试读取文件时引发 IOException。该函数捕捉 IOException 并引发 FileNotFoundException。IOException 可以保存在 FileNotFoundException 的 InnerException 属性中，从而使捕捉 FileNotFoundException 的代码可以检查导致初始错误的原因。 假定有一个可以读取文件并格式化该文件中数据的函数。在此示例中，当代码尝试读取文件时引发 IOException。该函数捕捉 IOException 并引发 FileNotFoundException。IOException 可以保存在 FileNotFoundException 的 InnerException 属性中，从而使捕捉 FileNotFoundException 的代码可以检查导致初始错误的原因。

保存对内部异常引用的 InnerException 属性在初始化异常对象时设置。

下面的示例演示引发和捕捉引用内部异常的异常。

Imports System

Public Class MyAppException
   Inherits ApplicationException

   Public Sub New(message As [String])
      MyBase.New(message)
   End Sub 'New

   Public Sub New(message As [String], inner As Exception)
      MyBase.New(message, inner)
   End Sub 'New
End Class 'MyAppException

Public Class ExceptExample

   Public Sub ThrowInner()
      Throw New MyAppException("ExceptExample inner exception")
   End Sub 'ThrowInner

   Public Sub CatchInner()
      Try
         Me.ThrowInner()
      Catch e As Exception
         Throw New MyAppException("Error caused by trying ThrowInner.", e)
      End Try
   End Sub 'CatchInner
End Class 'ExceptExample

Public Class Test

   Public Shared Sub Main()
      Dim testInstance As New ExceptExample()
      Try
         testInstance.CatchInner()
      Catch e As Exception
         Console.WriteLine("In Main catch block. Caught: {0}", e.Message)
         Console.WriteLine("Inner Exception is {0}", e.InnerException)
      End Try
   End Sub 'Main
End Class 'Test

using System;
public class MyAppException:ApplicationException
{
   public MyAppException (String message) : base (message)
   {}
   public MyAppException (String message, Exception inner) : base(message,inner) {}
   }
public class ExceptExample
{
   public void ThrowInner ()
   {
   throw new MyAppException("ExceptExample inner exception");
   }
   public void CatchInner()
   {
      try
      {
      this.ThrowInner();
      }
         catch (Exception e)
         {
         throw new MyAppException("Error caused by trying ThrowInner.",e);
         }
      }
   }
public class Test
{
   public static void Main()
   {
   ExceptExample testInstance = new ExceptExample();
      try
      {
      testInstance.CatchInner();
      }
         catch(Exception e)
         {
         Console.WriteLine ("In Main catch block. Caught: {0}", e.Message);
         Console.WriteLine ("Inner Exception is {0}",e.InnerException);
         }
      }
}

using namespace System;
public ref class MyAppException: public ApplicationException
{
public:
   MyAppException( String^ message )
      : ApplicationException( message )
   {}

   MyAppException( String^ message, Exception^ inner )
      : ApplicationException( message, inner )
   {}

};

public ref class ExceptExample
{
public:
   void ThrowInner()
   {
      throw gcnew MyAppException( "ExceptExample inner exception" );
   }

   void CatchInner()
   {
      try
      {
         this->ThrowInner();
      }
      catch ( Exception^ e )
      {
         throw gcnew MyAppException( "Error caused by trying ThrowInner.",e );
      }

   }

};

int main()
{
   ExceptExample^ testInstance = gcnew ExceptExample;
   try
   {
      testInstance->CatchInner();
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "In Main catch block. Caught: {0}", e->Message );
      Console::WriteLine( "Inner Exception is {0}", e->InnerException );
   }

}

此代码的输出如下：

In Main
  catch block.Caught: Error caused by trying ThrowInner.Inner Exception is
  MyAppException: ExceptExample inner exception at ExceptExample.ThrowInner() at
  ExceptExample.CatchInner()

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 类
Exception 成员
System 命名空间


Exception ..::.Message 属性

Exception
.
.
::
.
Message 属性
Exception 类

获取描述当前异常的消息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Message As String
    Get
public virtual string Message { get; }
public:
virtual property String^ Message {
    String^ get ();
}
abstract Message : string
override Message : string

属性值

类型： System String
解释异常原因的错误消息或空字符串 ("")。

实现

Message 的文本应当完全描述错误，并且如果可能，应阐释如何纠正错误。Message 属性的值包含在 ToString 所返回的信息中。 Message 的文本应当完全描述错误，并且如果可能，应阐释如何纠正错误。Message 属性的值包含在 ToString 所返回的信息中。

仅当创建 Exception 时才设置 Message 属性。如果对于当前实例没有向构造函数提供消息，则系统将提供使用当前系统区域性格式化的默认消息。 仅当创建 Exception 时才设置 Message 属性。如果对于当前实例没有向构造函数提供消息，则系统将提供使用当前系统区域性格式化的默认消息。

对实现者的说明

如果您从某个属性引发了异常，而且需要在 Message 文本中引用您所设置或获取的属性参数，请使用“value”作为属性参数的名称。

对继承者的说明

在需要控制消息内容或格式的类中重写 Message 属性。应用程序代码在需要显示捕捉到的异常的信息时通常会访问此属性。 在需要控制消息内容或格式的类中重写 Message 属性。应用程序代码在需要显示捕捉到的异常的信息时通常会访问此属性。

应本地化错误信息。

下面的代码示例引发然后捕捉一个 Exception，并使用 Message 属性显示该异常的文本消息。

' Example for the Exception.HelpLink, Exception.Source,
' Exception.StackTrace, and Exception.TargetSite properties.
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Derive an exception; the constructor sets the HelpLink and
    ' Source properties.
    Class LogTableOverflowException
        Inherits Exception

        Private Const overflowMessage As String = _
            "The log table has overflowed."

        Public Sub New( auxMessage As String, inner As Exception )
            MyBase.New( String.Format( "{0} - {1}", _
                overflowMessage, auxMessage ), inner )

            Me.HelpLink = "http://msdn.microsoft.com"
            Me.Source = "Exception_Class_Samples"

        End Sub ' New
    End Class ' LogTableOverflowException

    Class LogTable

        Public Sub New(numElements As Integer)
            logArea = New String(numElements) {}
            elemInUse = 0
        End Sub ' New

        Protected logArea() As String
        Protected elemInUse As Integer

        ' The AddRecord method throws a derived exception if
        ' the array bounds exception is caught.
        Public Function AddRecord( newRecord As String ) As Integer

            Try
                Dim curElement as Integer = elemInUse
                logArea( elemInUse ) = newRecord
                elemInUse += 1
                Return curElement

            Catch ex As Exception
                Throw New LogTableOverflowException( _
                    String.Format( "Record ""{0}"" was not logged.", _
                        newRecord ), ex )
            End Try
        End Function ' AddRecord
    End Class ' LogTable

    Module OverflowDemo

        ' Create a log table and force an overflow.
        Sub Main( )
            Dim log As New LogTable( 4 )

            Console.WriteLine( "This example of " & vbCrLf & _
                "   Exception.Message, " & vbCrLf & _
                "   Exception.HelpLink, " & vbCrLf & _
                "   Exception.Source, " & vbCrLf & _
                "   Exception.StackTrace, and " & vbCrLf & _
                "   Exception.TargetSite " & vbCrLf & _
                "generates the following output." )

            Try
                Dim count As Integer = 0

                Do
                    log.AddRecord( _
                        String.Format( "Log record number {0}", count ) )
                    count += 1
                Loop

            Catch ex As Exception
                Console.WriteLine( vbCrLf & _
                    "Message ---" & vbCrLf & ex.Message )
                Console.WriteLine( vbCrLf & _
                    "HelpLink ---" & vbCrLf & ex.HelpLink )
                Console.WriteLine( vbCrLf & _
                    "Source ---" & vbCrLf & ex.Source )
                Console.WriteLine( vbCrLf & _
                    "StackTrace ---" & vbCrLf & ex.StackTrace )
                Console.WriteLine( vbCrLf & "TargetSite ---" & _
                    vbCrLf & ex.TargetSite.ToString( ) )
            End Try
        End Sub ' Main

    End Module ' OverflowDemo
End Namespace ' NDP_UE_VB

' This example of
'    Exception.Message,
'    Exception.HelpLink,
'    Exception.Source,
'    Exception.StackTrace, and
'    Exception.TargetSite
' generates the following output.
'
' Message ---
' The log table has overflowed. - Record "Log record number 5" was not logged.
'
' HelpLink ---
' http://msdn.microsoft.com
'
' Source ---
' Exception_Class_Samples
'
' StackTrace ---
'    at NDP_UE_VB.LogTable.AddRecord(String newRecord)
'    at NDP_UE_VB.OverflowDemo.Main()
'
' TargetSite ---
' Int32 AddRecord(System.String)

// Example for the Exception.HelpLink, Exception.Source,
// Exception.StackTrace, and Exception.TargetSite properties.
using System;

namespace NDP_UE_CS
{
    // Derive an exception; the constructor sets the HelpLink and
    // Source properties.
    class LogTableOverflowException : Exception
    {
        const string overflowMessage = "The log table has overflowed.";

        public LogTableOverflowException(
            string auxMessage, Exception inner ) :
                base( String.Format( "{0} - {1}",
                    overflowMessage, auxMessage ), inner )
        {
            this.HelpLink = "http://msdn.microsoft.com";
            this.Source = "Exception_Class_Samples";
        }
    }

    class LogTable
    {
        public LogTable( int numElements )
        {
            logArea = new string[ numElements ];
            elemInUse = 0;
        }

        protected string[ ] logArea;
        protected int       elemInUse;

        // The AddRecord method throws a derived exception if
        // the array bounds exception is caught.
        public    int       AddRecord( string newRecord )
        {
            try
            {
                logArea[ elemInUse ] = newRecord;
                return elemInUse++;
            }
            catch( Exception e )
            {
                throw new LogTableOverflowException(
                    String.Format( "Record \"{0}\" was not logged.",
                        newRecord ), e );
            }
        }
    }

    class OverflowDemo
    {
        // Create a log table and force an overflow.
        public static void Main()
        {
            LogTable log = new LogTable( 4 );

            Console.WriteLine(
                "This example of \n   Exception.Message, \n" +
                "   Exception.HelpLink, \n   Exception.Source, \n" +
                "   Exception.StackTrace, and \n   Exception." +
                "TargetSite \ngenerates the following output." );

            try
            {
                for( int count = 1; ; count++ )
                {
                    log.AddRecord(
                        String.Format(
                            "Log record number {0}", count ) );
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( "\nMessage ---\n{0}", ex.Message );
                Console.WriteLine(
                    "\nHelpLink ---\n{0}", ex.HelpLink );
                Console.WriteLine( "\nSource ---\n{0}", ex.Source );
                Console.WriteLine(
                    "\nStackTrace ---\n{0}", ex.StackTrace );
                Console.WriteLine(
                    "\nTargetSite ---\n{0}", ex.TargetSite );
            }
        }
    }
}

/*
This example of
   Exception.Message,
   Exception.HelpLink,
   Exception.Source,
   Exception.StackTrace, and
   Exception.TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CS.LogTable.AddRecord(String newRecord)
   at NDP_UE_CS.OverflowDemo.Main()

TargetSite ---
Int32 AddRecord(System.String)
*/

// Example for the Exception::HelpLink, Exception::Source,
// Exception::StackTrace, and Exception::TargetSite properties.
using namespace System;

namespace NDP_UE_CPP
{

   // Derive an exception; the constructor sets the HelpLink and
   // Source properties.
   public ref class LogTableOverflowException: public Exception
   {
   private:
      static String^ overflowMessage = "The log table has overflowed.";

   public:
      LogTableOverflowException( String^ auxMessage, Exception^ inner )
         : Exception( String::Format( "{0} - {1}", overflowMessage, auxMessage ), inner )
      {
         this->HelpLink = "http://msdn.microsoft.com";
         this->Source = "Exception_Class_Samples";
      }

   };

   public ref class LogTable
   {
   public:
      LogTable( int numElements )
      {
         logArea = gcnew array<String^>(numElements);
         elemInUse = 0;
      }

   protected:
      array<String^>^logArea;
      int elemInUse;

   public:

      // The AddRecord method throws a derived exception if
      // the array bounds exception is caught.
      int AddRecord( String^ newRecord )
      {
         try
         {
            logArea[ elemInUse ] = newRecord;
            return elemInUse++;
         }
         catch ( Exception^ ex )
         {
            throw gcnew LogTableOverflowException( String::Format( "Record \"{0}\" was not logged.", newRecord ),ex );
         }

      }

   };

   // Create a log table and force an overflow.
   void ForceOverflow()
   {
      LogTable^ log = gcnew LogTable( 4 );
      try
      {
         for ( int count = 1; ; count++ )
         {
            log->AddRecord( String::Format( "Log record number {0}", count ) );

         }
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( "\nMessage ---\n{0}", ex->Message );
         Console::WriteLine( "\nHelpLink ---\n{0}", ex->HelpLink );
         Console::WriteLine( "\nSource ---\n{0}", ex->Source );
         Console::WriteLine( "\nStackTrace ---\n{0}", ex->StackTrace );
         Console::WriteLine( "\nTargetSite ---\n{0}", ex->TargetSite->ToString() );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of \n   Exception::Message, \n"
   "   Exception::HelpLink, \n   Exception::Source, \n"
   "   Exception::StackTrace, and \n   Exception::"
   "TargetSite \ngenerates the following output." );
   NDP_UE_CPP::ForceOverflow();
}

/*
This example of
   Exception::Message,
   Exception::HelpLink,
   Exception::Source,
   Exception::StackTrace, and
   Exception::TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CPP.LogTable.AddRecord(String newRecord)
   at NDP_UE_CPP.ForceOverflow()

TargetSite ---
Int32 AddRecord(System.String)
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 类
Exception 成员
System 命名空间


Exception ..::.Source 属性

Exception
.
.
::
.
Source 属性
Exception 类

获取或设置导致错误的应用程序或对象的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Property Source As String
    Get
    Set
public virtual string Source { get; set; }
public:
virtual property String^ Source {
    String^ get ();
    void set (String^ value);
}
abstract Source : string with get, set
override Source : string with get, set

属性值

类型： System String
导致错误的应用程序或对象的名称。

实现

异常 | 条件
ArgumentException | 该对象必须为运行时 System.Reflection 对象

如果未设置 Source，将返回产生异常的程序集的名称。

下面的代码示例引发一个在其构造函数中设置 Source 属性的 Exception，然后捕捉该异常并显示 Source。

' Example for the Exception.HelpLink, Exception.Source,
' Exception.StackTrace, and Exception.TargetSite properties.
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Derive an exception; the constructor sets the HelpLink and
    ' Source properties.
    Class LogTableOverflowException
        Inherits Exception

        Private Const overflowMessage As String = _
            "The log table has overflowed."

        Public Sub New( auxMessage As String, inner As Exception )
            MyBase.New( String.Format( "{0} - {1}", _
                overflowMessage, auxMessage ), inner )

            Me.HelpLink = "http://msdn.microsoft.com"
            Me.Source = "Exception_Class_Samples"

        End Sub ' New
    End Class ' LogTableOverflowException

    Class LogTable

        Public Sub New(numElements As Integer)
            logArea = New String(numElements) {}
            elemInUse = 0
        End Sub ' New

        Protected logArea() As String
        Protected elemInUse As Integer

        ' The AddRecord method throws a derived exception if
        ' the array bounds exception is caught.
        Public Function AddRecord( newRecord As String ) As Integer

            Try
                Dim curElement as Integer = elemInUse
                logArea( elemInUse ) = newRecord
                elemInUse += 1
                Return curElement

            Catch ex As Exception
                Throw New LogTableOverflowException( _
                    String.Format( "Record ""{0}"" was not logged.", _
                        newRecord ), ex )
            End Try
        End Function ' AddRecord
    End Class ' LogTable

    Module OverflowDemo

        ' Create a log table and force an overflow.
        Sub Main( )
            Dim log As New LogTable( 4 )

            Console.WriteLine( "This example of " & vbCrLf & _
                "   Exception.Message, " & vbCrLf & _
                "   Exception.HelpLink, " & vbCrLf & _
                "   Exception.Source, " & vbCrLf & _
                "   Exception.StackTrace, and " & vbCrLf & _
                "   Exception.TargetSite " & vbCrLf & _
                "generates the following output." )

            Try
                Dim count As Integer = 0

                Do
                    log.AddRecord( _
                        String.Format( "Log record number {0}", count ) )
                    count += 1
                Loop

            Catch ex As Exception
                Console.WriteLine( vbCrLf & _
                    "Message ---" & vbCrLf & ex.Message )
                Console.WriteLine( vbCrLf & _
                    "HelpLink ---" & vbCrLf & ex.HelpLink )
                Console.WriteLine( vbCrLf & _
                    "Source ---" & vbCrLf & ex.Source )
                Console.WriteLine( vbCrLf & _
                    "StackTrace ---" & vbCrLf & ex.StackTrace )
                Console.WriteLine( vbCrLf & "TargetSite ---" & _
                    vbCrLf & ex.TargetSite.ToString( ) )
            End Try
        End Sub ' Main

    End Module ' OverflowDemo
End Namespace ' NDP_UE_VB

' This example of
'    Exception.Message,
'    Exception.HelpLink,
'    Exception.Source,
'    Exception.StackTrace, and
'    Exception.TargetSite
' generates the following output.
'
' Message ---
' The log table has overflowed. - Record "Log record number 5" was not logged.
'
' HelpLink ---
' http://msdn.microsoft.com
'
' Source ---
' Exception_Class_Samples
'
' StackTrace ---
'    at NDP_UE_VB.LogTable.AddRecord(String newRecord)
'    at NDP_UE_VB.OverflowDemo.Main()
'
' TargetSite ---
' Int32 AddRecord(System.String)

// Example for the Exception.HelpLink, Exception.Source,
// Exception.StackTrace, and Exception.TargetSite properties.
using System;

namespace NDP_UE_CS
{
    // Derive an exception; the constructor sets the HelpLink and
    // Source properties.
    class LogTableOverflowException : Exception
    {
        const string overflowMessage = "The log table has overflowed.";

        public LogTableOverflowException(
            string auxMessage, Exception inner ) :
                base( String.Format( "{0} - {1}",
                    overflowMessage, auxMessage ), inner )
        {
            this.HelpLink = "http://msdn.microsoft.com";
            this.Source = "Exception_Class_Samples";
        }
    }

    class LogTable
    {
        public LogTable( int numElements )
        {
            logArea = new string[ numElements ];
            elemInUse = 0;
        }

        protected string[ ] logArea;
        protected int       elemInUse;

        // The AddRecord method throws a derived exception if
        // the array bounds exception is caught.
        public    int       AddRecord( string newRecord )
        {
            try
            {
                logArea[ elemInUse ] = newRecord;
                return elemInUse++;
            }
            catch( Exception e )
            {
                throw new LogTableOverflowException(
                    String.Format( "Record \"{0}\" was not logged.",
                        newRecord ), e );
            }
        }
    }

    class OverflowDemo
    {
        // Create a log table and force an overflow.
        public static void Main()
        {
            LogTable log = new LogTable( 4 );

            Console.WriteLine(
                "This example of \n   Exception.Message, \n" +
                "   Exception.HelpLink, \n   Exception.Source, \n" +
                "   Exception.StackTrace, and \n   Exception." +
                "TargetSite \ngenerates the following output." );

            try
            {
                for( int count = 1; ; count++ )
                {
                    log.AddRecord(
                        String.Format(
                            "Log record number {0}", count ) );
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( "\nMessage ---\n{0}", ex.Message );
                Console.WriteLine(
                    "\nHelpLink ---\n{0}", ex.HelpLink );
                Console.WriteLine( "\nSource ---\n{0}", ex.Source );
                Console.WriteLine(
                    "\nStackTrace ---\n{0}", ex.StackTrace );
                Console.WriteLine(
                    "\nTargetSite ---\n{0}", ex.TargetSite );
            }
        }
    }
}

/*
This example of
   Exception.Message,
   Exception.HelpLink,
   Exception.Source,
   Exception.StackTrace, and
   Exception.TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CS.LogTable.AddRecord(String newRecord)
   at NDP_UE_CS.OverflowDemo.Main()

TargetSite ---
Int32 AddRecord(System.String)
*/

// Example for the Exception::HelpLink, Exception::Source,
// Exception::StackTrace, and Exception::TargetSite properties.
using namespace System;

namespace NDP_UE_CPP
{

   // Derive an exception; the constructor sets the HelpLink and
   // Source properties.
   public ref class LogTableOverflowException: public Exception
   {
   private:
      static String^ overflowMessage = "The log table has overflowed.";

   public:
      LogTableOverflowException( String^ auxMessage, Exception^ inner )
         : Exception( String::Format( "{0} - {1}", overflowMessage, auxMessage ), inner )
      {
         this->HelpLink = "http://msdn.microsoft.com";
         this->Source = "Exception_Class_Samples";
      }

   };

   public ref class LogTable
   {
   public:
      LogTable( int numElements )
      {
         logArea = gcnew array<String^>(numElements);
         elemInUse = 0;
      }

   protected:
      array<String^>^logArea;
      int elemInUse;

   public:

      // The AddRecord method throws a derived exception if
      // the array bounds exception is caught.
      int AddRecord( String^ newRecord )
      {
         try
         {
            logArea[ elemInUse ] = newRecord;
            return elemInUse++;
         }
         catch ( Exception^ ex )
         {
            throw gcnew LogTableOverflowException( String::Format( "Record \"{0}\" was not logged.", newRecord ),ex );
         }

      }

   };

   // Create a log table and force an overflow.
   void ForceOverflow()
   {
      LogTable^ log = gcnew LogTable( 4 );
      try
      {
         for ( int count = 1; ; count++ )
         {
            log->AddRecord( String::Format( "Log record number {0}", count ) );

         }
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( "\nMessage ---\n{0}", ex->Message );
         Console::WriteLine( "\nHelpLink ---\n{0}", ex->HelpLink );
         Console::WriteLine( "\nSource ---\n{0}", ex->Source );
         Console::WriteLine( "\nStackTrace ---\n{0}", ex->StackTrace );
         Console::WriteLine( "\nTargetSite ---\n{0}", ex->TargetSite->ToString() );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of \n   Exception::Message, \n"
   "   Exception::HelpLink, \n   Exception::Source, \n"
   "   Exception::StackTrace, and \n   Exception::"
   "TargetSite \ngenerates the following output." );
   NDP_UE_CPP::ForceOverflow();
}

/*
This example of
   Exception::Message,
   Exception::HelpLink,
   Exception::Source,
   Exception::StackTrace, and
   Exception::TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CPP.LogTable.AddRecord(String newRecord)
   at NDP_UE_CPP.ForceOverflow()

TargetSite ---
Int32 AddRecord(System.String)
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Exception 类
Exception 成员
System 命名空间


Exception ..::.StackTrace 属性

Exception
.
.
::
.
StackTrace 属性
Exception 类

获取调用堆栈上直接帧的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property StackTrace As String
    Get
public virtual string StackTrace { get; }
public:
virtual property String^ StackTrace {
    String^ get ();
}
abstract StackTrace : string
override StackTrace : string

属性值

类型： System String
用于描述调用堆栈的直接帧的字符串。

实现

执行堆栈跟踪在给定时刻正在执行的所有方法。对方法调用的跟踪称为堆栈跟踪。堆栈跟踪列表提供了一种循着调用堆叠跟踪到方法中异常发生处行号的手段。 执行堆栈跟踪在给定时刻正在执行的所有方法。对方法调用的跟踪称为堆栈跟踪。堆栈跟踪列表提供了一种循着调用堆叠跟踪到方法中异常发生处行号的手段。 执行堆栈跟踪在给定时刻正在执行的所有方法。对方法调用的跟踪称为堆栈跟踪。堆栈跟踪列表提供了一种循着调用堆叠跟踪到方法中异常发生处行号的手段。

StackTrace 属性返回源于异常引发位置的调用堆栈的框架。您可以通过创建 StackTrace 类的新实例并使用它的 ToString 方法获得有关调用堆栈中的其他帧的信息。 StackTrace 属性返回源于异常引发位置的调用堆栈的框架。您可以通过创建 StackTrace 类的新实例并使用它的 ToString 方法获得有关调用堆栈中的其他帧的信息。

因为优化过程中的代码转换（如内联），StackTrace 属性可能无法按预期报告许多方法调用。

对继承者的说明

在需要控制堆栈跟踪内容或格式的类中重写 StackTrace 属性。

默认情况下，在引发异常对象前一刻捕获堆栈跟踪。在没有发生异常时，可以使用 Environment..::.StackTrace 来获取堆栈跟踪信息。 默认情况下，在引发异常对象前一刻捕获堆栈跟踪。在没有发生异常时，可以使用 Environment..::.StackTrace 来获取堆栈跟踪信息。

下面的代码示例引发一个 Exception，然后捕捉该异常，并使用 StackTrace 属性显示堆栈跟踪。

' Example for the Exception.HelpLink, Exception.Source,
' Exception.StackTrace, and Exception.TargetSite properties.
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Derive an exception; the constructor sets the HelpLink and
    ' Source properties.
    Class LogTableOverflowException
        Inherits Exception

        Private Const overflowMessage As String = _
            "The log table has overflowed."

        Public Sub New( auxMessage As String, inner As Exception )
            MyBase.New( String.Format( "{0} - {1}", _
                overflowMessage, auxMessage ), inner )

            Me.HelpLink = "http://msdn.microsoft.com"
            Me.Source = "Exception_Class_Samples"

        End Sub ' New
    End Class ' LogTableOverflowException

    Class LogTable

        Public Sub New(numElements As Integer)
            logArea = New String(numElements) {}
            elemInUse = 0
        End Sub ' New

        Protected logArea() As String
        Protected elemInUse As Integer

        ' The AddRecord method throws a derived exception if
        ' the array bounds exception is caught.
        Public Function AddRecord( newRecord As String ) As Integer

            Try
                Dim curElement as Integer = elemInUse
                logArea( elemInUse ) = newRecord
                elemInUse += 1
                Return curElement

            Catch ex As Exception
                Throw New LogTableOverflowException( _
                    String.Format( "Record ""{0}"" was not logged.", _
                        newRecord ), ex )
            End Try
        End Function ' AddRecord
    End Class ' LogTable

    Module OverflowDemo

        ' Create a log table and force an overflow.
        Sub Main( )
            Dim log As New LogTable( 4 )

            Console.WriteLine( "This example of " & vbCrLf & _
                "   Exception.Message, " & vbCrLf & _
                "   Exception.HelpLink, " & vbCrLf & _
                "   Exception.Source, " & vbCrLf & _
                "   Exception.StackTrace, and " & vbCrLf & _
                "   Exception.TargetSite " & vbCrLf & _
                "generates the following output." )

            Try
                Dim count As Integer = 0

                Do
                    log.AddRecord( _
                        String.Format( "Log record number {0}", count ) )
                    count += 1
                Loop

            Catch ex As Exception
                Console.WriteLine( vbCrLf & _
                    "Message ---" & vbCrLf & ex.Message )
                Console.WriteLine( vbCrLf & _
                    "HelpLink ---" & vbCrLf & ex.HelpLink )
                Console.WriteLine( vbCrLf & _
                    "Source ---" & vbCrLf & ex.Source )
                Console.WriteLine( vbCrLf & _
                    "StackTrace ---" & vbCrLf & ex.StackTrace )
                Console.WriteLine( vbCrLf & "TargetSite ---" & _
                    vbCrLf & ex.TargetSite.ToString( ) )
            End Try
        End Sub ' Main

    End Module ' OverflowDemo
End Namespace ' NDP_UE_VB

' This example of
'    Exception.Message,
'    Exception.HelpLink,
'    Exception.Source,
'    Exception.StackTrace, and
'    Exception.TargetSite
' generates the following output.
'
' Message ---
' The log table has overflowed. - Record "Log record number 5" was not logged.
'
' HelpLink ---
' http://msdn.microsoft.com
'
' Source ---
' Exception_Class_Samples
'
' StackTrace ---
'    at NDP_UE_VB.LogTable.AddRecord(String newRecord)
'    at NDP_UE_VB.OverflowDemo.Main()
'
' TargetSite ---
' Int32 AddRecord(System.String)

// Example for the Exception.HelpLink, Exception.Source,
// Exception.StackTrace, and Exception.TargetSite properties.
using System;

namespace NDP_UE_CS
{
    // Derive an exception; the constructor sets the HelpLink and
    // Source properties.
    class LogTableOverflowException : Exception
    {
        const string overflowMessage = "The log table has overflowed.";

        public LogTableOverflowException(
            string auxMessage, Exception inner ) :
                base( String.Format( "{0} - {1}",
                    overflowMessage, auxMessage ), inner )
        {
            this.HelpLink = "http://msdn.microsoft.com";
            this.Source = "Exception_Class_Samples";
        }
    }

    class LogTable
    {
        public LogTable( int numElements )
        {
            logArea = new string[ numElements ];
            elemInUse = 0;
        }

        protected string[ ] logArea;
        protected int       elemInUse;

        // The AddRecord method throws a derived exception if
        // the array bounds exception is caught.
        public    int       AddRecord( string newRecord )
        {
            try
            {
                logArea[ elemInUse ] = newRecord;
                return elemInUse++;
            }
            catch( Exception e )
            {
                throw new LogTableOverflowException(
                    String.Format( "Record \"{0}\" was not logged.",
                        newRecord ), e );
            }
        }
    }

    class OverflowDemo
    {
        // Create a log table and force an overflow.
        public static void Main()
        {
            LogTable log = new LogTable( 4 );

            Console.WriteLine(
                "This example of \n   Exception.Message, \n" +
                "   Exception.HelpLink, \n   Exception.Source, \n" +
                "   Exception.StackTrace, and \n   Exception." +
                "TargetSite \ngenerates the following output." );

            try
            {
                for( int count = 1; ; count++ )
                {
                    log.AddRecord(
                        String.Format(
                            "Log record number {0}", count ) );
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( "\nMessage ---\n{0}", ex.Message );
                Console.WriteLine(
                    "\nHelpLink ---\n{0}", ex.HelpLink );
                Console.WriteLine( "\nSource ---\n{0}", ex.Source );
                Console.WriteLine(
                    "\nStackTrace ---\n{0}", ex.StackTrace );
                Console.WriteLine(
                    "\nTargetSite ---\n{0}", ex.TargetSite );
            }
        }
    }
}

/*
This example of
   Exception.Message,
   Exception.HelpLink,
   Exception.Source,
   Exception.StackTrace, and
   Exception.TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CS.LogTable.AddRecord(String newRecord)
   at NDP_UE_CS.OverflowDemo.Main()

TargetSite ---
Int32 AddRecord(System.String)
*/

// Example for the Exception::HelpLink, Exception::Source,
// Exception::StackTrace, and Exception::TargetSite properties.
using namespace System;

namespace NDP_UE_CPP
{

   // Derive an exception; the constructor sets the HelpLink and
   // Source properties.
   public ref class LogTableOverflowException: public Exception
   {
   private:
      static String^ overflowMessage = "The log table has overflowed.";

   public:
      LogTableOverflowException( String^ auxMessage, Exception^ inner )
         : Exception( String::Format( "{0} - {1}", overflowMessage, auxMessage ), inner )
      {
         this->HelpLink = "http://msdn.microsoft.com";
         this->Source = "Exception_Class_Samples";
      }

   };

   public ref class LogTable
   {
   public:
      LogTable( int numElements )
      {
         logArea = gcnew array<String^>(numElements);
         elemInUse = 0;
      }

   protected:
      array<String^>^logArea;
      int elemInUse;

   public:

      // The AddRecord method throws a derived exception if
      // the array bounds exception is caught.
      int AddRecord( String^ newRecord )
      {
         try
         {
            logArea[ elemInUse ] = newRecord;
            return elemInUse++;
         }
         catch ( Exception^ ex )
         {
            throw gcnew LogTableOverflowException( String::Format( "Record \"{0}\" was not logged.", newRecord ),ex );
         }

      }

   };

   // Create a log table and force an overflow.
   void ForceOverflow()
   {
      LogTable^ log = gcnew LogTable( 4 );
      try
      {
         for ( int count = 1; ; count++ )
         {
            log->AddRecord( String::Format( "Log record number {0}", count ) );

         }
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( "\nMessage ---\n{0}", ex->Message );
         Console::WriteLine( "\nHelpLink ---\n{0}", ex->HelpLink );
         Console::WriteLine( "\nSource ---\n{0}", ex->Source );
         Console::WriteLine( "\nStackTrace ---\n{0}", ex->StackTrace );
         Console::WriteLine( "\nTargetSite ---\n{0}", ex->TargetSite->ToString() );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of \n   Exception::Message, \n"
   "   Exception::HelpLink, \n   Exception::Source, \n"
   "   Exception::StackTrace, and \n   Exception::"
   "TargetSite \ngenerates the following output." );
   NDP_UE_CPP::ForceOverflow();
}

/*
This example of
   Exception::Message,
   Exception::HelpLink,
   Exception::Source,
   Exception::StackTrace, and
   Exception::TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CPP.LogTable.AddRecord(String newRecord)
   at NDP_UE_CPP.ForceOverflow()

TargetSite ---
Int32 AddRecord(System.String)
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Exception 类
Exception 成员
System 命名空间
Environment StackTrace


Exception ..::.TargetSite 属性

Exception
.
.
::
.
TargetSite 属性
Exception 类

获取引发当前异常的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TargetSite As MethodBase
    Get
public MethodBase TargetSite { get; }
public:
virtual property MethodBase^ TargetSite {
    MethodBase^ get () sealed;
}
abstract TargetSite : MethodBase
override TargetSite : MethodBase

属性值

类型： System.Reflection MethodBase
引发当前异常的 MethodBase。

实现

如果引发此异常的方法不可用且堆栈跟踪不是 null 引用（Visual Basic 中为 Nothing），则 TargetSite 从堆栈跟踪中获取该方法。如果堆栈跟踪为空引用，TargetSite 也返回空引用。 如果引发此异常的方法不可用且堆栈跟踪不是 null 引用（Visual Basic 中为 Nothing），则 TargetSite 从堆栈跟踪中获取该方法。如果堆栈跟踪为空引用，TargetSite 也返回空引用。

说明 说明

如果异常处理程序跨应用程序域边界处理异常，则 TargetSite 属性可能无法准确报告引发了异常的方法的名称。

下面的代码示例引发一个 Exception，然后捕捉该异常，并使用 TargetSite 属性显示源发方法。

' Example for the Exception.HelpLink, Exception.Source,
' Exception.StackTrace, and Exception.TargetSite properties.
Imports System
Imports Microsoft.VisualBasic

Namespace NDP_UE_VB

    ' Derive an exception; the constructor sets the HelpLink and
    ' Source properties.
    Class LogTableOverflowException
        Inherits Exception

        Private Const overflowMessage As String = _
            "The log table has overflowed."

        Public Sub New( auxMessage As String, inner As Exception )
            MyBase.New( String.Format( "{0} - {1}", _
                overflowMessage, auxMessage ), inner )

            Me.HelpLink = "http://msdn.microsoft.com"
            Me.Source = "Exception_Class_Samples"

        End Sub ' New
    End Class ' LogTableOverflowException

    Class LogTable

        Public Sub New(numElements As Integer)
            logArea = New String(numElements) {}
            elemInUse = 0
        End Sub ' New

        Protected logArea() As String
        Protected elemInUse As Integer

        ' The AddRecord method throws a derived exception if
        ' the array bounds exception is caught.
        Public Function AddRecord( newRecord As String ) As Integer

            Try
                Dim curElement as Integer = elemInUse
                logArea( elemInUse ) = newRecord
                elemInUse += 1
                Return curElement

            Catch ex As Exception
                Throw New LogTableOverflowException( _
                    String.Format( "Record ""{0}"" was not logged.", _
                        newRecord ), ex )
            End Try
        End Function ' AddRecord
    End Class ' LogTable

    Module OverflowDemo

        ' Create a log table and force an overflow.
        Sub Main( )
            Dim log As New LogTable( 4 )

            Console.WriteLine( "This example of " & vbCrLf & _
                "   Exception.Message, " & vbCrLf & _
                "   Exception.HelpLink, " & vbCrLf & _
                "   Exception.Source, " & vbCrLf & _
                "   Exception.StackTrace, and " & vbCrLf & _
                "   Exception.TargetSite " & vbCrLf & _
                "generates the following output." )

            Try
                Dim count As Integer = 0

                Do
                    log.AddRecord( _
                        String.Format( "Log record number {0}", count ) )
                    count += 1
                Loop

            Catch ex As Exception
                Console.WriteLine( vbCrLf & _
                    "Message ---" & vbCrLf & ex.Message )
                Console.WriteLine( vbCrLf & _
                    "HelpLink ---" & vbCrLf & ex.HelpLink )
                Console.WriteLine( vbCrLf & _
                    "Source ---" & vbCrLf & ex.Source )
                Console.WriteLine( vbCrLf & _
                    "StackTrace ---" & vbCrLf & ex.StackTrace )
                Console.WriteLine( vbCrLf & "TargetSite ---" & _
                    vbCrLf & ex.TargetSite.ToString( ) )
            End Try
        End Sub ' Main

    End Module ' OverflowDemo
End Namespace ' NDP_UE_VB

' This example of
'    Exception.Message,
'    Exception.HelpLink,
'    Exception.Source,
'    Exception.StackTrace, and
'    Exception.TargetSite
' generates the following output.
'
' Message ---
' The log table has overflowed. - Record "Log record number 5" was not logged.
'
' HelpLink ---
' http://msdn.microsoft.com
'
' Source ---
' Exception_Class_Samples
'
' StackTrace ---
'    at NDP_UE_VB.LogTable.AddRecord(String newRecord)
'    at NDP_UE_VB.OverflowDemo.Main()
'
' TargetSite ---
' Int32 AddRecord(System.String)

// Example for the Exception.HelpLink, Exception.Source,
// Exception.StackTrace, and Exception.TargetSite properties.
using System;

namespace NDP_UE_CS
{
    // Derive an exception; the constructor sets the HelpLink and
    // Source properties.
    class LogTableOverflowException : Exception
    {
        const string overflowMessage = "The log table has overflowed.";

        public LogTableOverflowException(
            string auxMessage, Exception inner ) :
                base( String.Format( "{0} - {1}",
                    overflowMessage, auxMessage ), inner )
        {
            this.HelpLink = "http://msdn.microsoft.com";
            this.Source = "Exception_Class_Samples";
        }
    }

    class LogTable
    {
        public LogTable( int numElements )
        {
            logArea = new string[ numElements ];
            elemInUse = 0;
        }

        protected string[ ] logArea;
        protected int       elemInUse;

        // The AddRecord method throws a derived exception if
        // the array bounds exception is caught.
        public    int       AddRecord( string newRecord )
        {
            try
            {
                logArea[ elemInUse ] = newRecord;
                return elemInUse++;
            }
            catch( Exception e )
            {
                throw new LogTableOverflowException(
                    String.Format( "Record \"{0}\" was not logged.",
                        newRecord ), e );
            }
        }
    }

    class OverflowDemo
    {
        // Create a log table and force an overflow.
        public static void Main()
        {
            LogTable log = new LogTable( 4 );

            Console.WriteLine(
                "This example of \n   Exception.Message, \n" +
                "   Exception.HelpLink, \n   Exception.Source, \n" +
                "   Exception.StackTrace, and \n   Exception." +
                "TargetSite \ngenerates the following output." );

            try
            {
                for( int count = 1; ; count++ )
                {
                    log.AddRecord(
                        String.Format(
                            "Log record number {0}", count ) );
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( "\nMessage ---\n{0}", ex.Message );
                Console.WriteLine(
                    "\nHelpLink ---\n{0}", ex.HelpLink );
                Console.WriteLine( "\nSource ---\n{0}", ex.Source );
                Console.WriteLine(
                    "\nStackTrace ---\n{0}", ex.StackTrace );
                Console.WriteLine(
                    "\nTargetSite ---\n{0}", ex.TargetSite );
            }
        }
    }
}

/*
This example of
   Exception.Message,
   Exception.HelpLink,
   Exception.Source,
   Exception.StackTrace, and
   Exception.TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CS.LogTable.AddRecord(String newRecord)
   at NDP_UE_CS.OverflowDemo.Main()

TargetSite ---
Int32 AddRecord(System.String)
*/

// Example for the Exception::HelpLink, Exception::Source,
// Exception::StackTrace, and Exception::TargetSite properties.
using namespace System;

namespace NDP_UE_CPP
{

   // Derive an exception; the constructor sets the HelpLink and
   // Source properties.
   public ref class LogTableOverflowException: public Exception
   {
   private:
      static String^ overflowMessage = "The log table has overflowed.";

   public:
      LogTableOverflowException( String^ auxMessage, Exception^ inner )
         : Exception( String::Format( "{0} - {1}", overflowMessage, auxMessage ), inner )
      {
         this->HelpLink = "http://msdn.microsoft.com";
         this->Source = "Exception_Class_Samples";
      }

   };

   public ref class LogTable
   {
   public:
      LogTable( int numElements )
      {
         logArea = gcnew array<String^>(numElements);
         elemInUse = 0;
      }

   protected:
      array<String^>^logArea;
      int elemInUse;

   public:

      // The AddRecord method throws a derived exception if
      // the array bounds exception is caught.
      int AddRecord( String^ newRecord )
      {
         try
         {
            logArea[ elemInUse ] = newRecord;
            return elemInUse++;
         }
         catch ( Exception^ ex )
         {
            throw gcnew LogTableOverflowException( String::Format( "Record \"{0}\" was not logged.", newRecord ),ex );
         }

      }

   };

   // Create a log table and force an overflow.
   void ForceOverflow()
   {
      LogTable^ log = gcnew LogTable( 4 );
      try
      {
         for ( int count = 1; ; count++ )
         {
            log->AddRecord( String::Format( "Log record number {0}", count ) );

         }
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( "\nMessage ---\n{0}", ex->Message );
         Console::WriteLine( "\nHelpLink ---\n{0}", ex->HelpLink );
         Console::WriteLine( "\nSource ---\n{0}", ex->Source );
         Console::WriteLine( "\nStackTrace ---\n{0}", ex->StackTrace );
         Console::WriteLine( "\nTargetSite ---\n{0}", ex->TargetSite->ToString() );
      }

   }

}

int main()
{
   Console::WriteLine( "This example of \n   Exception::Message, \n"
   "   Exception::HelpLink, \n   Exception::Source, \n"
   "   Exception::StackTrace, and \n   Exception::"
   "TargetSite \ngenerates the following output." );
   NDP_UE_CPP::ForceOverflow();
}

/*
This example of
   Exception::Message,
   Exception::HelpLink,
   Exception::Source,
   Exception::StackTrace, and
   Exception::TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
http://msdn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CPP.LogTable.AddRecord(String newRecord)
   at NDP_UE_CPP.ForceOverflow()

TargetSite ---
Int32 AddRecord(System.String)
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Exception 类
Exception 成员
System 命名空间


Exception 事件

Exception 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Exception 类

Exception 类型公开以下成员。

名称 说明
页首

参考

Exception 类
System 命名空间


Exception ..::.SerializeObjectState 事件

Exception
.
.
::
.
SerializeObjectState 事件
Exception 类

在序列化异常，以创建包含有关异常的序列化数据的异常状态对象时发生。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Event SerializeObjectState As EventHandler(Of SafeSerializationEventArgs)
protected event EventHandler<SafeSerializationEventArgs> SerializeObjectState
protected:
 event EventHandler<SafeSerializationEventArgs^>^ SerializeObjectState {
    void add (EventHandler<SafeSerializationEventArgs^>^ value);
    void remove (EventHandler<SafeSerializationEventArgs^>^ value);
}
member SerializeObjectState : IEvent<EventHandler<SafeSerializationEventArgs>,
    SafeSerializationEventArgs>

该异常状态对象实现 ISafeSerializationData 接口。

当订阅 SerializeObjectState 事件时，系统会反序列化该异常，将其创建为空异常。该异常的构造函数未运行，异常状态也被反序列化。然后，通知异常状态对象的 CompleteDeserialization 回调方法，以便将反序列化的数据推入空异常。 当订阅 SerializeObjectState 事件时，系统会反序列化该异常，将其创建为空异常。该异常的构造函数未运行，异常状态也被反序列化。然后，通知异常状态对象的 CompleteDeserialization 回调方法，以便将反序列化的数据推入空异常。 当订阅 SerializeObjectState 事件时，系统会反序列化该异常，将其创建为空异常。该异常的构造函数未运行，异常状态也被反序列化。然后，通知异常状态对象的 CompleteDeserialization 回调方法，以便将反序列化的数据推入空异常。

SerializeObjectState 事件启用序列化和反序列化异常数据的透明异常类型。透明代码可以在操作所用权限集的边界内执行命令，但不能执行、调用、派生或包含关键代码。 SerializeObjectState 事件启用序列化和反序列化异常数据的透明异常类型。透明代码可以在操作所用权限集的边界内执行命令，但不能执行、调用、派生或包含关键代码。

如果未订阅 SerializeObjectState 事件，则会照常使用 Exception 构造函数进行反序列化。

对实现者的说明

如果订阅并使用此事件，则继承层次结构中所有跟着的派生类型都必须实现相同序列化机制。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Exception 类
Exception 成员
System 命名空间


ExecutionEngineException 类

ExecutionEngineException 类
成员

注意：此 API 现在已过时。 非过时替代项是 InvalidOperationException。

当公共语言运行时的执行引擎中发生内部错误时引发的异常。此类不能被继承。 当公共语言运行时的执行引擎中发生内部错误时引发的异常。此类不能被继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<ObsoleteAttribute("This type previously indicated an unspecified fatal error in the runtime. The runtime no longer raises this exception so this type is obsolete.")> _
Public NotInheritable Class ExecutionEngineException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ObsoleteAttribute("This type previously indicated an unspecified fatal error in the runtime. The runtime no longer raises this exception so this type is obsolete.")]
public sealed class ExecutionEngineException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ObsoleteAttribute(L"This type previously indicated an unspecified fatal error in the runtime. The runtime no longer raises this exception so this type is obsolete.")]
public ref class ExecutionEngineException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
[<ObsoleteAttribute("This type previously indicated an unspecified fatal error in the runtime. The runtime no longer raises this exception so this type is obsolete.")>]
type ExecutionEngineException =
    class
        inherit SystemException
    end

ExecutionEngineException 表示公共语言运行时 (CLR) 中的致命错误。不可能继续执行 CLR 时, 通常是由于致命的内部错误，CLR 调用 FailFast 方法并补充 ExecutionEngineException 作为第二个参数。CLR 从来不会以托管代码可以捕获的方式引发此异常。 ExecutionEngineException 表示公共语言运行时 (CLR) 中的致命错误。不可能继续执行 CLR 时, 通常是由于致命的内部错误，CLR 调用 FailFast 方法并补充 ExecutionEngineException 作为第二个参数。CLR 从来不会以托管代码可以捕获的方式引发此异常。 ExecutionEngineException 表示公共语言运行时 (CLR) 中的致命错误。不可能继续执行 CLR 时, 通常是由于致命的内部错误，CLR 调用 FailFast 方法并补充 ExecutionEngineException 作为第二个参数。CLR 从来不会以托管代码可以捕获的方式引发此异常。

应用程序不应引发 ExecutionEngineException。

ExecutionEngineException 使用值为 0x80131506 的 HRESULT COR_E_EXECUTIONENGINE。

有关 ExecutionEngineException 实例的初始属性值列表，请参见 ExecutionEngineException 构造函数。

说明 说明

该继承的 Data 属性的值始终是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

System System..::.ExecutionEngineExceptionExecutionEngineException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5、3.0、2.0、1.1、1.0
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

ExecutionEngineException 成员
System 命名空间
Exception

其他资源

处理和引发异常


ExecutionEngineException 成员

ExecutionEngineException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ExecutionEngineException 类

当公共语言运行时的执行引擎中发生内部错误时引发的异常。此类不能被继承。 当公共语言运行时的执行引擎中发生内部错误时引发的异常。此类不能被继承。

ExecutionEngineException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ExecutionEngineException 类
System 命名空间


ExecutionEngineException 构造函数

ExecutionEngineException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ExecutionEngineException 类

初始化 ExecutionEngineException 类的新实例。

名称 说明
页首

参考

ExecutionEngineException 类
ExecutionEngineException 成员
System 命名空间


ExecutionEngineException 构造函数

ExecutionEngineException 构造函数
ExecutionEngineException 类

初始化 ExecutionEngineException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ExecutionEngineException()
public:
ExecutionEngineException()
new : unit -> ExecutionEngineException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“发生内部错误。”。此消息将考虑当前系统区域性。

下表显示 ExecutionEngineException 实例的初始属性值。

Property | Value
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ExecutionEngineException 类
ExecutionEngineException 成员
ExecutionEngineException 重载
System 命名空间


ExecutionEngineException 构造函数 (String)

ExecutionEngineException 构造函数 (String)
ExecutionEngineException 类

使用指定的错误消息初始化 ExecutionEngineException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public ExecutionEngineException(
    string message
)
public:
ExecutionEngineException(
    String^ message
)
new :
        message:string -> ExecutionEngineException

参数

message
类型： System String
描述错误的消息。

此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 ExecutionEngineException 实例的初始属性值。

Property | Value
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ExecutionEngineException 类
ExecutionEngineException 成员
ExecutionEngineException 重载
System 命名空间


ExecutionEngineException 构造函数 (String, Exception)

ExecutionEngineException 构造函数 (String, Exception)
ExecutionEngineException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 ExecutionEngineException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ExecutionEngineException(
    string message,
    Exception innerException
)
public:
ExecutionEngineException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ExecutionEngineException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 ExecutionEngineException 实例的初始属性值。

Property | Value
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ExecutionEngineException 类
ExecutionEngineException 成员
ExecutionEngineException 重载
System 命名空间
Exception

其他资源

处理和引发异常


ExecutionEngineException 方法

ExecutionEngineException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ExecutionEngineException 类

ExecutionEngineException 类型公开以下成员。

名称 说明
页首

参考

ExecutionEngineException 类
System 命名空间


ExecutionEngineException 属性

ExecutionEngineException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ExecutionEngineException 类

ExecutionEngineException 类型公开以下成员。

名称 说明
页首

参考

ExecutionEngineException 类
System 命名空间


ExecutionEngineException 事件

ExecutionEngineException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ExecutionEngineException 类

ExecutionEngineException 类型公开以下成员。

名称 说明
页首

参考

ExecutionEngineException 类
System 命名空间


FieldAccessException 类

FieldAccessException 类
成员

当尝试非法访问类中的私有字段或受保护字段时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class FieldAccessException _
    Inherits MemberAccessException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class FieldAccessException : MemberAccessException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class FieldAccessException : public MemberAccessException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type FieldAccessException =
    class
        inherit MemberAccessException
    end

当更改了类库中字段的访问级别，而引用该库的一个或多个程序集还没有重新编译时，通常就会引发此异常。

FieldAccessException 使用值为 0x80131507 的 HRESULT COR_E_FIELDACCESS。

有关 FieldAccessException 实例的初始属性值列表，请参见 FieldAccessException 构造函数。

System System..::.FieldAccessExceptionFieldAccessException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

FieldAccessException 成员
System 命名空间
Exception

其他资源

处理和引发异常


FieldAccessException 成员

FieldAccessException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FieldAccessException 类

当尝试非法访问类中的私有字段或受保护字段时引发的异常。

FieldAccessException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

FieldAccessException 类
System 命名空间


FieldAccessException 构造函数

FieldAccessException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FieldAccessException 类

初始化 FieldAccessException 类的新实例。

名称 说明
页首

参考

FieldAccessException 类
FieldAccessException 成员
System 命名空间


FieldAccessException 构造函数

FieldAccessException 构造函数
FieldAccessException 类

初始化 FieldAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public FieldAccessException()
public:
FieldAccessException()
new : unit -> FieldAccessException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“尝试访问某类型内的私有字段或受保护字段。”。此消息将考虑当前系统区域性。

下表显示 FieldAccessException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

FieldAccessException 类
FieldAccessException 成员
FieldAccessException 重载
System 命名空间


FieldAccessException 构造函数 (String)

FieldAccessException 构造函数 (String)
FieldAccessException 类

使用指定错误信息初始化 FieldAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public FieldAccessException(
    string message
)
public:
FieldAccessException(
    String^ message
)
new :
        message:string -> FieldAccessException

参数

message
类型： System String
描述错误的消息。

此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 FieldAccessException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

FieldAccessException 类
FieldAccessException 成员
FieldAccessException 重载
System 命名空间


FieldAccessException 构造函数 (SerializationInfo, StreamingContext)

FieldAccessException 构造函数 (SerializationInfo, StreamingContext)
FieldAccessException 类

用序列化数据初始化 FieldAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected FieldAccessException(
    SerializationInfo info,
    StreamingContext context
)
protected:
FieldAccessException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> FieldAccessException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

FieldAccessException 类
FieldAccessException 成员
FieldAccessException 重载
System 命名空间


FieldAccessException 构造函数 (String, Exception)

FieldAccessException 构造函数 (String, Exception)
FieldAccessException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 FieldAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public FieldAccessException(
    string message,
    Exception inner
)
public:
FieldAccessException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> FieldAccessException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 FieldAccessException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

FieldAccessException 类
FieldAccessException 成员
FieldAccessException 重载
System 命名空间
Exception

其他资源

处理和引发异常


FieldAccessException 方法

FieldAccessException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FieldAccessException 类

FieldAccessException 类型公开以下成员。

名称 说明
页首

参考

FieldAccessException 类
System 命名空间


FieldAccessException 属性

FieldAccessException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FieldAccessException 类

FieldAccessException 类型公开以下成员。

名称 说明
页首

参考

FieldAccessException 类
System 命名空间


FieldAccessException 事件

FieldAccessException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FieldAccessException 类

FieldAccessException 类型公开以下成员。

名称 说明
页首

参考

FieldAccessException 类
System 命名空间


FileStyleUriParser 类

FileStyleUriParser 类
成员

基于 File 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Class FileStyleUriParser _
    Inherits UriParser
public class FileStyleUriParser : UriParser
public ref class FileStyleUriParser : public UriParser
type FileStyleUriParser =
    class
        inherit UriParser
    end

System System..::.FileStyleUriParserFileStyleUriParser
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileStyleUriParser 成员
System 命名空间


FileStyleUriParser 成员

FileStyleUriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileStyleUriParser 类

基于 File 方案的可自定义分析器。

FileStyleUriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

FileStyleUriParser 类
System 命名空间


FileStyleUriParser 构造函数

FileStyleUriParser 构造函数
FileStyleUriParser 类

创建一个基于 File 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public FileStyleUriParser()
public:
FileStyleUriParser()
new : unit -> FileStyleUriParser

使用此构造函数作为 UriParser..::.Register(UriParser, String, Int32) 的参数

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

FileStyleUriParser 类
FileStyleUriParser 成员
System 命名空间


FileStyleUriParser 方法

FileStyleUriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FileStyleUriParser 类

FileStyleUriParser 类型公开以下成员。

名称 说明
页首

参考

FileStyleUriParser 类
System 命名空间


FlagsAttribute 类

FlagsAttribute 类
成员

指示可以将枚举作为位域（即一组标志）处理。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Enum, Inherited := False)> _
Public Class FlagsAttribute _
    Inherits Attribute
[SerializableAttribute]
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Enum, Inherited = false)]
public class FlagsAttribute : Attribute
[SerializableAttribute]
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::Enum, Inherited = false)]
public ref class FlagsAttribute : public Attribute
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
[<AttributeUsageAttribute(AttributeTargets.Enum, Inherited = false)>]
type FlagsAttribute =
    class
        inherit Attribute
    end

位域通常用于由可组合出现的元素组成的列表，而枚举常数通常用于由互相排斥的元素组成的列表。因此，位域设计为通过按位“或”运算组合来生成未命名的值，而枚举常数则不是。语言在对位域的使用和对枚举常数的使用上不同。 位域通常用于由可组合出现的元素组成的列表，而枚举常数通常用于由互相排斥的元素组成的列表。因此，位域设计为通过按位“或”运算组合来生成未命名的值，而枚举常数则不是。语言在对位域的使用和对枚举常数的使用上不同。 位域通常用于由可组合出现的元素组成的列表，而枚举常数通常用于由互相排斥的元素组成的列表。因此，位域设计为通过按位“或”运算组合来生成未命名的值，而枚举常数则不是。语言在对位域的使用和对枚举常数的使用上不同。

FlagsAttribute 的特性

AttributeUsageAttribute 应用于此类，其 Inherited 属性指定 false。此特性只能应用于枚举。 AttributeUsageAttribute 应用于此类，其 Inherited 属性指定 false。此特性只能应用于枚举。

用于 FlagsAttribute 和 Enum 的准则

  • 只有要对数值执行按位运算（AND、OR、XOR）时才对枚举使用 FlagsAttribute 自定义特性。

  • 用 2 的幂（即 1、2、4、8 等）定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。 用 2 的幂（即 1、2、4、8 等）定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。

  • 请考虑为常用标志组合创建一个枚举常量。例如，如果用于文件 I/O 操作的枚举包含枚举常量 Read = 1 和 Write = 2，请考虑创建枚举常量 ReadWrite = Read OR Write，该常量组合了 Read 和 Write 标志。此外，在某些情况下，可能会将用于组合标志的按位 OR 运算视为一种高级概念，在简单任务中不需要执行此操作。 请考虑为常用标志组合创建一个枚举常量。例如，如果用于文件 I/O 操作的枚举包含枚举常量 Read = 1 和 Write = 2，请考虑创建枚举常量 ReadWrite = Read OR Write，该常量组合了 Read 和 Write 标志。此外，在某些情况下，可能会将用于组合标志的按位 OR 运算视为一种高级概念，在简单任务中不需要执行此操作。 请考虑为常用标志组合创建一个枚举常量。例如，如果用于文件 I/O 操作的枚举包含枚举常量 Read = 1 和 Write = 2，请考虑创建枚举常量 ReadWrite = Read OR Write，该常量组合了 Read 和 Write 标志。此外，在某些情况下，可能会将用于组合标志的按位 OR 运算视为一种高级概念，在简单任务中不需要执行此操作。

  • 将负数定义为标志枚举常量时应谨慎，因为很多标志位置都可能设置为 1，这可能使您的代码产生混淆并易于发生代码错误。

  • 测试数值中是否已设置标志的一种简便方法为：在数值和标志枚举常量之间执行按位“与”操作，这种方法会将数值中与标志不对应的所有位都设置为零，然后测试该操作的结果是否等于该标志枚举常量。

  • 将 None 用作值为零的标志枚举常量的名称。在按位 AND 运算中，不能使用 None 枚举常量测试标志，因为所得的结果始终为零。但是，您可以在数值与 None 枚举常量之间执行逻辑（不是按位）比较，以确定数值中是否已设置任何位。 将 None 用作值为零的标志枚举常量的名称。在按位 AND 运算中，不能使用 None 枚举常量测试标志，因为所得的结果始终为零。但是，您可以在数值与 None 枚举常量之间执行逻辑（不是按位）比较，以确定数值中是否已设置任何位。 将 None 用作值为零的标志枚举常量的名称。在按位 AND 运算中，不能使用 None 枚举常量测试标志，因为所得的结果始终为零。但是，您可以在数值与 None 枚举常量之间执行逻辑（不是按位）比较，以确定数值中是否已设置任何位。

    如果创建的是值枚举而不是标志枚举，创建 None 枚举常量仍十分有用。原因是在默认情况下，公共语言运行时会将用于枚举的内存初始化为零。因此，如果不定义值为零的常量，则枚举在创建时将包含非法值。 如果创建的是值枚举而不是标志枚举，创建 None 枚举常量仍十分有用。原因是在默认情况下，公共语言运行时会将用于枚举的内存初始化为零。因此，如果不定义值为零的常量，则枚举在创建时将包含非法值。 如果创建的是值枚举而不是标志枚举，创建 None 枚举常量仍十分有用。原因是在默认情况下，公共语言运行时会将用于枚举的内存初始化为零。因此，如果不定义值为零的常量，则枚举在创建时将包含非法值。

    如果明显存在应用程序需要表示的默认情况，请考虑使用值为零的枚举常量表示默认值。如果不存在默认情况，请考虑使用值为零的枚举常量（这意味着该情况不由任何其他枚举常量表示）。 如果明显存在应用程序需要表示的默认情况，请考虑使用值为零的枚举常量表示默认值。如果不存在默认情况，请考虑使用值为零的枚举常量（这意味着该情况不由任何其他枚举常量表示）。

  • 不要仅为了反映枚举自身的状态而定义枚举值。例如，不要定义仅用于标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值，请显式检查该值。此外，如果枚举常量范围中的所有值都有效，还可以对第一个和最后一个枚举常量执行范围检查。 不要仅为了反映枚举自身的状态而定义枚举值。例如，不要定义仅用于标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值，请显式检查该值。此外，如果枚举常量范围中的所有值都有效，还可以对第一个和最后一个枚举常量执行范围检查。 不要仅为了反映枚举自身的状态而定义枚举值。例如，不要定义仅用于标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值，请显式检查该值。此外，如果枚举常量范围中的所有值都有效，还可以对第一个和最后一个枚举常量执行范围检查。 不要仅为了反映枚举自身的状态而定义枚举值。例如，不要定义仅用于标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值，请显式检查该值。此外，如果枚举常量范围中的所有值都有效，还可以对第一个和最后一个枚举常量执行范围检查。

  • 不要指定保留供将来使用的枚举常量。

  • 在定义采用枚举常量作为值的方法或属性时，应考虑对该值进行验证。原因是即使没有在枚举中定义某个数值，也可以将该数值强制转换为枚举类型。 在定义采用枚举常量作为值的方法或属性时，应考虑对该值进行验证。原因是即使没有在枚举中定义某个数值，也可以将该数值强制转换为枚举类型。

下面的代码示例阐释了如何使用 FlagsAttribute 特性，并显示了使用 Enum 声明的 FlagsAttribute 在 ToString 方法上的效果。

' Example of the FlagsAttribute attribute.
Imports System
Imports Microsoft.VisualBasic

Module FlagsAttributeDemo

    ' Define an Enum without FlagsAttribute.
    Enum SingleHue as Short
        Black = 0
        Red = 1
        Green = 2
        Blue = 4
    End Enum

    ' Define an Enum with FlagsAttribute.
    <FlagsAttribute( )> _
    Enum MultiHue as Short
        Black = 0
        Red = 1
        Green = 2
        Blue = 4
    End Enum

    Sub Main( )
        Console.WriteLine( _
            "This example of the FlagsAttribute attribute " & _
            vbCrLf & "generates the following output." )
        Console.WriteLine( vbCrLf & _
            "All possible combinations of values of an " & _
            vbCrLf & "Enum without FlagsAttribute:" & vbCrLf )

        ' Display all possible combinations of values.
        Dim val as Integer
        For val = 0 to 8
            Console.WriteLine( "{0,3} - {1}", _
                val, CType( val, SingleHue ).ToString( ) )
        Next val

        Console.WriteLine( vbCrLf & _
            "All possible combinations of values of an " & _
            vbCrLf & "Enum with FlagsAttribute:" & vbCrLf )

        ' Display all possible combinations of values.
        ' Also display an invalid value.
        For val = 0 to 8
            Console.WriteLine( "{0,3} - {1}", _
                val, CType( val, MultiHue ).ToString( ) )
        Next val
    End Sub
End Module

' This example of the FlagsAttribute attribute
' generates the following output.
'
' All possible combinations of values of an
' Enum without FlagsAttribute:
'
'   0 - Black
'   1 - Red
'   2 - Green
'   3 - 3
'   4 - Blue
'   5 - 5
'   6 - 6
'   7 - 7
'   8 - 8
'
' All possible combinations of values of an
' Enum with FlagsAttribute:
'
'   0 - Black
'   1 - Red
'   2 - Green
'   3 - Red, Green
'   4 - Blue
'   5 - Red, Blue
'   6 - Green, Blue
'   7 - Red, Green, Blue
'   8 - 8

// Example of the FlagsAttribute attribute.
using System;

class FlagsAttributeDemo
{
    // Define an Enum without FlagsAttribute.
    enum SingleHue : short
    {
        Black = 0,
        Red = 1,
        Green = 2,
        Blue = 4
    };

    // Define an Enum with FlagsAttribute.
    [FlagsAttribute]
    enum MultiHue : short
    {
        Black = 0,
        Red = 1,
        Green = 2,
        Blue = 4
    };

    static void Main( )
    {
        Console.WriteLine(
            "This example of the FlagsAttribute attribute \n" +
            "generates the following output." );
        Console.WriteLine(
            "\nAll possible combinations of values of an \n" +
            "Enum without FlagsAttribute:\n" );

        // Display all possible combinations of values.
        for( int val = 0; val <= 8; val++ )
            Console.WriteLine( "{0,3} - {1}",
                val, ( (SingleHue)val ).ToString( ) );

        Console.WriteLine(
            "\nAll possible combinations of values of an \n" +
            "Enum with FlagsAttribute:\n" );

        // Display all possible combinations of values.
        // Also display an invalid value.
        for( int val = 0; val <= 8; val++ )
            Console.WriteLine( "{0,3} - {1}",
                val, ( (MultiHue)val ).ToString( ) );
    }
}

/*
This example of the FlagsAttribute attribute
generates the following output.

All possible combinations of values of an
Enum without FlagsAttribute:

  0 - Black
  1 - Red
  2 - Green
  3 - 3
  4 - Blue
  5 - 5
  6 - 6
  7 - 7
  8 - 8

All possible combinations of values of an
Enum with FlagsAttribute:

  0 - Black
  1 - Red
  2 - Green
  3 - Red, Green
  4 - Blue
  5 - Red, Blue
  6 - Green, Blue
  7 - Red, Green, Blue
  8 - 8
*/

// Example of the FlagsAttribute attribute.
using namespace System;

// Define an Enum without FlagsAttribute.
enum class SingleHue : short
{
   Black = 0,
   Red = 1,
   Green = 2,
   Blue = 4
};

// Define an Enum with FlagsAttribute.

[FlagsAttribute]
enum class MultiHue : short
{
   Black = 0,
   Red = 1,
   Green = 2,
   Blue = 4
};

int main()
{
   Console::WriteLine( "This example of the FlagsAttribute attribute \n"
   "generates the following output." );
   Console::WriteLine( "\nAll possible combinations of values of an \n"
   "Enum without FlagsAttribute:\n" );

   // Display all possible combinations of values.
   for ( int val = 0; val <= 8; val++ )
      Console::WriteLine( "{0,3} - {1}", val, ((SingleHue)val).ToString() );
   Console::WriteLine( "\nAll possible combinations of values of an \n"
   "Enum with FlagsAttribute:\n" );

   // Display all possible combinations of values.
   // Also display an invalid value.
   for ( int val = 0; val <= 8; val++ )
      Console::WriteLine( "{0,3} - {1}", val, ((MultiHue)val).ToString() );
}

/*
This example of the FlagsAttribute attribute
generates the following output.

All possible combinations of values of an
Enum without FlagsAttribute:

  0 - Black
  1 - Red
  2 - Green
  3 - 3
  4 - Blue
  5 - 5
  6 - 6
  7 - 7
  8 - 8

All possible combinations of values of an
Enum with FlagsAttribute:

  0 - Black
  1 - Red
  2 - Green
  3 - Red, Green
  4 - Blue
  5 - Red, Blue
  6 - Green, Blue
  7 - Red, Green, Blue
  8 - 8
*/

System System..::.FlagsAttributeFlagsAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FlagsAttribute 成员
System 命名空间


FlagsAttribute 成员

FlagsAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FlagsAttribute 类

指示可以将枚举作为位域（即一组标志）处理。

FlagsAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

FlagsAttribute 类
System 命名空间


FlagsAttribute 构造函数

FlagsAttribute 构造函数
FlagsAttribute 类

初始化 FlagsAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public FlagsAttribute()
public:
FlagsAttribute()
new : unit -> FlagsAttribute

下面的代码示例阐释了如何使用 FlagsAttribute 特性，并显示了使用 Enum 声明的 FlagsAttribute 在 ToString 方法上的效果。

' Example of the FlagsAttribute attribute.
Imports System
Imports Microsoft.VisualBasic

Module FlagsAttributeDemo

    ' Define an Enum without FlagsAttribute.
    Enum SingleHue as Short
        Black = 0
        Red = 1
        Green = 2
        Blue = 4
    End Enum

    ' Define an Enum with FlagsAttribute.
    <FlagsAttribute( )> _
    Enum MultiHue as Short
        Black = 0
        Red = 1
        Green = 2
        Blue = 4
    End Enum

    Sub Main( )
        Console.WriteLine( _
            "This example of the FlagsAttribute attribute " & _
            vbCrLf & "generates the following output." )
        Console.WriteLine( vbCrLf & _
            "All possible combinations of values of an " & _
            vbCrLf & "Enum without FlagsAttribute:" & vbCrLf )

        ' Display all possible combinations of values.
        Dim val as Integer
        For val = 0 to 8
            Console.WriteLine( "{0,3} - {1}", _
                val, CType( val, SingleHue ).ToString( ) )
        Next val

        Console.WriteLine( vbCrLf & _
            "All possible combinations of values of an " & _
            vbCrLf & "Enum with FlagsAttribute:" & vbCrLf )

        ' Display all possible combinations of values.
        ' Also display an invalid value.
        For val = 0 to 8
            Console.WriteLine( "{0,3} - {1}", _
                val, CType( val, MultiHue ).ToString( ) )
        Next val
    End Sub
End Module

' This example of the FlagsAttribute attribute
' generates the following output.
'
' All possible combinations of values of an
' Enum without FlagsAttribute:
'
'   0 - Black
'   1 - Red
'   2 - Green
'   3 - 3
'   4 - Blue
'   5 - 5
'   6 - 6
'   7 - 7
'   8 - 8
'
' All possible combinations of values of an
' Enum with FlagsAttribute:
'
'   0 - Black
'   1 - Red
'   2 - Green
'   3 - Red, Green
'   4 - Blue
'   5 - Red, Blue
'   6 - Green, Blue
'   7 - Red, Green, Blue
'   8 - 8

// Example of the FlagsAttribute attribute.
using System;

class FlagsAttributeDemo
{
    // Define an Enum without FlagsAttribute.
    enum SingleHue : short
    {
        Black = 0,
        Red = 1,
        Green = 2,
        Blue = 4
    };

    // Define an Enum with FlagsAttribute.
    [FlagsAttribute]
    enum MultiHue : short
    {
        Black = 0,
        Red = 1,
        Green = 2,
        Blue = 4
    };

    static void Main( )
    {
        Console.WriteLine(
            "This example of the FlagsAttribute attribute \n" +
            "generates the following output." );
        Console.WriteLine(
            "\nAll possible combinations of values of an \n" +
            "Enum without FlagsAttribute:\n" );

        // Display all possible combinations of values.
        for( int val = 0; val <= 8; val++ )
            Console.WriteLine( "{0,3} - {1}",
                val, ( (SingleHue)val ).ToString( ) );

        Console.WriteLine(
            "\nAll possible combinations of values of an \n" +
            "Enum with FlagsAttribute:\n" );

        // Display all possible combinations of values.
        // Also display an invalid value.
        for( int val = 0; val <= 8; val++ )
            Console.WriteLine( "{0,3} - {1}",
                val, ( (MultiHue)val ).ToString( ) );
    }
}

/*
This example of the FlagsAttribute attribute
generates the following output.

All possible combinations of values of an
Enum without FlagsAttribute:

  0 - Black
  1 - Red
  2 - Green
  3 - 3
  4 - Blue
  5 - 5
  6 - 6
  7 - 7
  8 - 8

All possible combinations of values of an
Enum with FlagsAttribute:

  0 - Black
  1 - Red
  2 - Green
  3 - Red, Green
  4 - Blue
  5 - Red, Blue
  6 - Green, Blue
  7 - Red, Green, Blue
  8 - 8
*/

// Example of the FlagsAttribute attribute.
using namespace System;

// Define an Enum without FlagsAttribute.
enum class SingleHue : short
{
   Black = 0,
   Red = 1,
   Green = 2,
   Blue = 4
};

// Define an Enum with FlagsAttribute.

[FlagsAttribute]
enum class MultiHue : short
{
   Black = 0,
   Red = 1,
   Green = 2,
   Blue = 4
};

int main()
{
   Console::WriteLine( "This example of the FlagsAttribute attribute \n"
   "generates the following output." );
   Console::WriteLine( "\nAll possible combinations of values of an \n"
   "Enum without FlagsAttribute:\n" );

   // Display all possible combinations of values.
   for ( int val = 0; val <= 8; val++ )
      Console::WriteLine( "{0,3} - {1}", val, ((SingleHue)val).ToString() );
   Console::WriteLine( "\nAll possible combinations of values of an \n"
   "Enum with FlagsAttribute:\n" );

   // Display all possible combinations of values.
   // Also display an invalid value.
   for ( int val = 0; val <= 8; val++ )
      Console::WriteLine( "{0,3} - {1}", val, ((MultiHue)val).ToString() );
}

/*
This example of the FlagsAttribute attribute
generates the following output.

All possible combinations of values of an
Enum without FlagsAttribute:

  0 - Black
  1 - Red
  2 - Green
  3 - 3
  4 - Blue
  5 - 5
  6 - 6
  7 - 7
  8 - 8

All possible combinations of values of an
Enum with FlagsAttribute:

  0 - Black
  1 - Red
  2 - Green
  3 - Red, Green
  4 - Blue
  5 - Red, Blue
  6 - Green, Blue
  7 - Red, Green, Blue
  8 - 8
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FlagsAttribute 类
FlagsAttribute 成员
System 命名空间


FlagsAttribute 方法

FlagsAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FlagsAttribute 类

FlagsAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

FlagsAttribute 类
System 命名空间


FlagsAttribute 属性

FlagsAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FlagsAttribute 类

FlagsAttribute 类型公开以下成员。

名称 说明
页首

参考

FlagsAttribute 类
System 命名空间


FormatException 类

FormatException 类
成员

当参数格式不符合调用的方法的参数规范时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class FormatException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class FormatException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class FormatException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type FormatException =
    class
        inherit SystemException
    end

当方法调用中参数的格式不符合对应的形参类型的格式时，引发 FormatException。例如，如果某方法指定一个 String 参数，该参数由带有嵌入句点的两位数组成，则向该方法传递仅包含两位数的对应字符串参数将导致引发 FormatException。 当方法调用中参数的格式不符合对应的形参类型的格式时，引发 FormatException。例如，如果某方法指定一个 String 参数，该参数由带有嵌入句点的两位数组成，则向该方法传递仅包含两位数的对应字符串参数将导致引发 FormatException。

FormatException 使用值为 0x80131537 的 HRESULT COR_E_FORMAT。

有关 FormatException 实例的初始属性值列表，请参见 FormatException 构造函数。

System System..::.FormatExceptionFormatException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FormatException 成员
System 命名空间
Exception

其他资源

处理和引发异常


FormatException 成员

FormatException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FormatException 类

当参数格式不符合调用的方法的参数规范时引发的异常。

FormatException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

FormatException 类
System 命名空间


FormatException 构造函数

FormatException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FormatException 类

初始化 FormatException 类的新实例。

名称 说明
页首

参考

FormatException 类
FormatException 成员
System 命名空间


FormatException 构造函数

FormatException 构造函数
FormatException 类

初始化 FormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public FormatException()
public:
FormatException()
new : unit -> FormatException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“格式无效。”。此消息将考虑当前系统区域性。

下表显示 FormatException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FormatException 类
FormatException 成员
FormatException 重载
System 命名空间


FormatException 构造函数 (String)

FormatException 构造函数 (String)
FormatException 类

使用指定错误消息初始化 FormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public FormatException(
    string message
)
public:
FormatException(
    String^ message
)
new :
        message:string -> FormatException

参数

message
类型： System String
描述错误的消息。

此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 FormatException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FormatException 类
FormatException 成员
FormatException 重载
System 命名空间


FormatException 构造函数 (SerializationInfo, StreamingContext)

FormatException 构造函数 (SerializationInfo, StreamingContext)
FormatException 类

用序列化数据初始化 FormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected FormatException(
    SerializationInfo info,
    StreamingContext context
)
protected:
FormatException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> FormatException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

FormatException 类
FormatException 成员
FormatException 重载
System 命名空间


FormatException 构造函数 (String, Exception)

FormatException 构造函数 (String, Exception)
FormatException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 FormatException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public FormatException(
    string message,
    Exception innerException
)
public:
FormatException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> FormatException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 FormatException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FormatException 类
FormatException 成员
FormatException 重载
System 命名空间
Exception

其他资源

处理和引发异常


FormatException 方法

FormatException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FormatException 类

FormatException 类型公开以下成员。

名称 说明
页首

参考

FormatException 类
System 命名空间


FormatException 属性

FormatException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FormatException 类

FormatException 类型公开以下成员。

名称 说明
页首

参考

FormatException 类
System 命名空间


FormatException 事件

FormatException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FormatException 类

FormatException 类型公开以下成员。

名称 说明
页首

参考

FormatException 类
System 命名空间


FtpStyleUriParser 类

FtpStyleUriParser 类
成员

基于文件传输协议 (FTP) 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Class FtpStyleUriParser _
    Inherits UriParser
public class FtpStyleUriParser : UriParser
public ref class FtpStyleUriParser : public UriParser
type FtpStyleUriParser =
    class
        inherit UriParser
    end

System System..::.FtpStyleUriParserFtpStyleUriParser
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

FtpStyleUriParser 成员
System 命名空间


FtpStyleUriParser 成员

FtpStyleUriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FtpStyleUriParser 类

基于文件传输协议 (FTP) 方案的可自定义分析器。

FtpStyleUriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

FtpStyleUriParser 类
System 命名空间


FtpStyleUriParser 构造函数

FtpStyleUriParser 构造函数
FtpStyleUriParser 类

创建一个基于文件传输协议 (FTP) 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public FtpStyleUriParser()
public:
FtpStyleUriParser()
new : unit -> FtpStyleUriParser

使用此构造函数作为 UriParser..::.Register(UriParser, String, Int32) 的参数

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

FtpStyleUriParser 类
FtpStyleUriParser 成员
System 命名空间


FtpStyleUriParser 方法

FtpStyleUriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FtpStyleUriParser 类

FtpStyleUriParser 类型公开以下成员。

名称 说明
页首

参考

FtpStyleUriParser 类
System 命名空间


Func <(Of <(TResult >)>) 委托

Func
<
(Of
<
(
TResult
>
)
>
)
委托

封装一个不具有参数但却返回 TResult 参数指定的类型值的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Func(Of Out TResult) As TResult
public delegate TResult Func<out TResult>()

generic<typename TResult>
public delegate TResult Func()
type Func =
    delegate of unit -> 'TResult

类型参数

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。这意味着封装的方法不得具有参数，但必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。这意味着封装的方法不得具有参数，但必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。这意味着封装的方法不得具有参数，但必须返回值。

说明 说明

若要引用不具有参数但却返回 void 的方法（或者在 Visual Basic 中，被声明为 Sub 而不是被声明为 Function 的方法），请改用 Action 委托。

在使用 Func<(Of <(TResult>)>) 委托时，不必显式定义一个封装无参数方法的委托。例如，以下代码显式声明了一个名为 WriteMethod 的委托，并将对 OutputTarget.SendToFile 实例方法的引用分配给其委托实例。 在使用 Func<(Of <(TResult>)>) 委托时，不必显式定义一个封装无参数方法的委托。例如，以下代码显式声明了一个名为 WriteMethod 的委托，并将对 OutputTarget.SendToFile 实例方法的引用分配给其委托实例。

Imports System.IO

Delegate Function WriteMethod As Boolean

Module TestDelegate
   Public Sub Main()
      Dim output As New OutputTarget()
      Dim methodCall As WriteMethod = AddressOf output.SendToFile
      If methodCall() Then
         Console.WriteLine("Success!")
      Else
         Console.WriteLine("File write operation failed.")
      End If
   End Sub
End Module

Public Class OutputTarget
   Public Function SendToFile() As Boolean
      Try
         Dim fn As String = Path.GetTempFileName
         Dim sw As StreamWriter = New StreamWriter(fn)
         sw.WriteLine("Hello, World!")
         sw.Close
         Return True
      Catch
         Return False
      End Try
   End Function
End Class

using System;
using System.IO;

delegate bool WriteMethod();

public class TestDelegate
{
   public static void Main()
   {
      OutputTarget output = new OutputTarget();
      WriteMethod methodCall = output.SendToFile;
      if (methodCall())
         Console.WriteLine("Success!");
      else
         Console.WriteLine("File write operation failed.");
   }
}

public class OutputTarget
{
   public bool SendToFile()
   {
      try
      {
         string fn = Path.GetTempFileName();
         StreamWriter sw = new StreamWriter(fn);
         sw.WriteLine("Hello, World!");
         sw.Close();
         return true;
      }
      catch
      {
         return false;
      }
   }
}

以下示例简化了此代码，它所用的方法是实例化 Func<(Of <(TResult>)>) 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Imports System.IO

Module TestDelegate
   Public Sub Main()
      Dim output As New OutputTarget()
      Dim methodCall As Func(Of Boolean) = AddressOf output.SendToFile
      If methodCall() Then
         Console.WriteLine("Success!")
      Else
         Console.WriteLine("File write operation failed.")
      End If
   End Sub
End Module

Public Class OutputTarget
   Public Function SendToFile() As Boolean
      Try
         Dim fn As String = Path.GetTempFileName
         Dim sw As StreamWriter = New StreamWriter(fn)
         sw.WriteLine("Hello, World!")
         sw.Close
         Return True
      Catch
         Return False
      End Try
   End Function
End Class

using System;
using System.IO;

public class TestDelegate
{
   public static void Main()
   {
      OutputTarget output = new OutputTarget();
      Func<bool> methodCall = output.SendToFile;
      if (methodCall())
         Console.WriteLine("Success!");
      else
         Console.WriteLine("File write operation failed.");
   }
}

public class OutputTarget
{
   public bool SendToFile()
   {
      try
      {
         string fn = Path.GetTempFileName();
         StreamWriter sw = new StreamWriter(fn);
         sw.WriteLine("Hello, World!");
         sw.Close();
         return true;
      }
      catch
      {
         return false;
      }
   }
}

您可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;
using System.IO;

public class Anonymous
{
   public static void Main()
   {
      OutputTarget output = new OutputTarget();
      Func<bool> methodCall = delegate() { return output.SendToFile(); };
      if (methodCall())
         Console.WriteLine("Success!");
      else
         Console.WriteLine("File write operation failed.");
   }
}

public class OutputTarget
{
   public bool SendToFile()
   {
      try
      {
         string fn = Path.GetTempFileName();
         StreamWriter sw = new StreamWriter(fn);
         sw.WriteLine("Hello, World!");
         sw.Close();
         return true;
      }
      catch
      {
         return false;
      }
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。）

Imports System.IO

Module TestDelegate
   Public Sub Main()
      Dim output As New OutputTarget()
      Dim methodCall As Func(Of Boolean) = Function() output.SendToFile()
      If methodCall() Then
         Console.WriteLine("Success!")
      Else
         Console.WriteLine("File write operation failed.")
      End If
   End Sub
End Module

Public Class OutputTarget
   Public Function SendToFile() As Boolean
      Try
         Dim fn As String = Path.GetTempFileName
         Dim sw As StreamWriter = New StreamWriter(fn)
         sw.WriteLine("Hello, World!")
         sw.Close
         Return True
      Catch
         Return False
      End Try
   End Function
End Class

using System;
using System.IO;

public class Anonymous
{
   public static void Main()
   {
      OutputTarget output = new OutputTarget();
      Func<bool> methodCall = () => output.SendToFile();
      if (methodCall())
         Console.WriteLine("Success!");
      else
         Console.WriteLine("File write operation failed.");
   }
}

public class OutputTarget
{
   public bool SendToFile()
   {
      try
      {
         string fn = Path.GetTempFileName();
         StreamWriter sw = new StreamWriter(fn);
         sw.WriteLine("Hello, World!");
         sw.Close();
         return true;
      }
      catch
      {
         return false;
      }
   }
}

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func 委托。

如果具有只在实际需要结果时才要执行的高开销计算，则可以将高开销函数分配给 Func<(Of <(TResult>)>) 委托。然后可以推迟到在表达式中使用访问值的属性时执行此函数。下一部分中的示例演示了如何完成此过程。 如果具有只在实际需要结果时才要执行的高开销计算，则可以将高开销函数分配给 Func<(Of <(TResult>)>) 委托。然后可以推迟到在表达式中使用访问值的属性时执行此函数。下一部分中的示例演示了如何完成此过程。 如果具有只在实际需要结果时才要执行的高开销计算，则可以将高开销函数分配给 Func<(Of <(TResult>)>) 委托。然后可以推迟到在表达式中使用访问值的属性时执行此函数。下一部分中的示例演示了如何完成此过程。

下面的示例演示如何使用不带参数的委托。此代码创建了一个具有 Func<(Of <(TResult>)>) 类型字段的名为 LazyValue 的泛型类。此委托字段可以存储所返回的类型值与 LazyValue 对象的类型参数相对应的任何函数引用。LazyValue 类型也具有执行函数（如果尚未执行函数）并返回结果值的 Value 属性。 下面的示例演示如何使用不带参数的委托。此代码创建了一个具有 Func<(Of <(TResult>)>) 类型字段的名为 LazyValue 的泛型类。此委托字段可以存储所返回的类型值与 LazyValue 对象的类型参数相对应的任何函数引用。LazyValue 类型也具有执行函数（如果尚未执行函数）并返回结果值的 Value 属性。 下面的示例演示如何使用不带参数的委托。此代码创建了一个具有 Func<(Of <(TResult>)>) 类型字段的名为 LazyValue 的泛型类。此委托字段可以存储所返回的类型值与 LazyValue 对象的类型参数相对应的任何函数引用。LazyValue 类型也具有执行函数（如果尚未执行函数）并返回结果值的 Value 属性。 下面的示例演示如何使用不带参数的委托。此代码创建了一个具有 Func<(Of <(TResult>)>) 类型字段的名为 LazyValue 的泛型类。此委托字段可以存储所返回的类型值与 LazyValue 对象的类型参数相对应的任何函数引用。LazyValue 类型也具有执行函数（如果尚未执行函数）并返回结果值的 Value 属性。

此示例创建了两个方法并用调用这些方法的 lambda 表达式实例化两个 LazyValue 对象。Lambda 表达式并不采用参数，因为它们只需要调用方法。正如输出所显示的那样，只有当检索到每个 LazyValue 对象的值时才会执行这两个方法。 此示例创建了两个方法并用调用这些方法的 lambda 表达式实例化两个 LazyValue 对象。Lambda 表达式并不采用参数，因为它们只需要调用方法。正如输出所显示的那样，只有当检索到每个 LazyValue 对象的值时才会执行这两个方法。 此示例创建了两个方法并用调用这些方法的 lambda 表达式实例化两个 LazyValue 对象。Lambda 表达式并不采用参数，因为它们只需要调用方法。正如输出所显示的那样，只有当检索到每个 LazyValue 对象的值时才会执行这两个方法。

Public Module Func
   Public Sub Main()
      ' Note that each lambda expression has no parameters.
      Dim lazyOne As New LazyValue(Of Integer)(Function() ExpensiveOne())
      Dim lazyTwo As New LazyValue(Of Long)(Function() ExpensiveTwo("apple"))

      Console.WriteLine("LazyValue objects have been created.")

      ' Get the values of the LazyValue objects.
      Console.WriteLine(lazyOne.Value)
      Console.WriteLine(lazyTwo.Value)
   End Sub

   Public Function ExpensiveOne() As Integer
      Console.WriteLine()
      Console.WriteLine("ExpensiveOne() is executing.")
      Return 1
   End Function

   Public Function ExpensiveTwo(input As String) As Long
      Console.WriteLine()
      Console.WriteLine("ExpensiveTwo() is executing.")
      Return input.Length
   End Function
End Module

Public Class LazyValue(Of T As Structure)
   Private val As Nullable(Of T)
   Private getValue As Func(Of T)

   ' Constructor.
   Public Sub New(func As Func(Of T))
      Me.val = Nothing
      Me.getValue = func
   End Sub

   Public ReadOnly Property Value() As T
      Get
         If Me.val Is Nothing Then
            ' Execute the delegate.
            Me.val = Me.getValue()
         End If
         Return CType(val, T)
      End Get
   End Property
End Class

using System;

static class Func1
{
   public static void Main()
   {
      // Note that each lambda expression has no parameters.
      LazyValue<int> lazyOne = new LazyValue<int>(() => ExpensiveOne());
      LazyValue<long> lazyTwo = new LazyValue<long>(() => ExpensiveTwo("apple"));

      Console.WriteLine("LazyValue objects have been created.");

      // Get the values of the LazyValue objects.
      Console.WriteLine(lazyOne.Value);
      Console.WriteLine(lazyTwo.Value);
   }

   static int ExpensiveOne()
   {
      Console.WriteLine("\nExpensiveOne() is executing.");
      return 1;
   }

   static long ExpensiveTwo(string input)
   {
      Console.WriteLine("\nExpensiveTwo() is executing.");
      return (long)input.Length;
   }
}

class LazyValue<T> where T : struct
{
   private Nullable<T> val;
   private Func<T> getValue;

   // Constructor.
   public LazyValue(Func<T> func)
   {
      val = null;
      getValue = func;
   }

   public T Value
   {
      get
      {
         if (val == null)
            // Execute the delegate.
            val = getValue();
         return (T)val;
      }
   }
}
/* The example produces the following output:

    LazyValue objects have been created.

    ExpensiveOne() is executing.
    1

    ExpensiveTwo() is executing.
    5
*/

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

XNA Framework

受以下版本支持：3.0

参考

System 命名空间

其他资源

Lambda 表达式（C# 编程指南）
lambda 表达式
委托（C# 编程指南）
委托 (Visual Basic)


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult
>
)
>
)
委托

封装一个方法，该方法具有九个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有九个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有九个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有九个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有九个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7, T8, T9


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult
>
)
>
)
委托

封装一个方法，该方法具有 10 个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 10 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 10 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 10 个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有 10 个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult
>
)
>
)
委托

封装一个方法，该方法具有 11 个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 11 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 11 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 11 个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有 11 个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult
>
)
>
)
委托

封装一个方法，该方法具有 12 个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 12 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 12 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 12 个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有 12 个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult
>
)
>
)
委托

封装一个方法，该方法具有 13 个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, In T13, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12, _
    arg13 As T13 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 *
        arg13:'T13 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

inInininT13T13

此委托封装的方法的第十三个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。
arg13
类型：T13
此委托封装的方法的第十三个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 13 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 13 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 13 个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有 13 个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult
>
)
>
)
委托

封装一个方法，该方法具有 14 个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, In T13, In T14, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12, _
    arg13 As T13, _
    arg14 As T14 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 *
        arg13:'T13 *
        arg14:'T14 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

inInininT13T13

此委托封装的方法的第十三个参数的类型。

inInininT14T14

此委托封装的方法的第十四个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。
arg13
类型：T13
此委托封装的方法的第十三个参数。
arg14
类型：T14
此委托封装的方法的第十四个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 14 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 14 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 14 个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有 14 个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult
>
)
>
)
委托

封装一个方法，该方法具有 15 个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, In T13, In T14, In T15, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12, _
    arg13 As T13, _
    arg14 As T14, _
    arg15 As T15 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14,
    T15 arg15
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14,
    T15 arg15
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 *
        arg13:'T13 *
        arg14:'T14 *
        arg15:'T15 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

inInininT13T13

此委托封装的方法的第十三个参数的类型。

inInininT14T14

此委托封装的方法的第十四个参数的类型。

inInininT15T15

此委托封装的方法的第十五个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。
arg13
类型：T13
此委托封装的方法的第十三个参数。
arg14
类型：T14
此委托封装的方法的第十四个参数。
arg15
类型：T15
此委托封装的方法的第十五个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 15 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 15 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 15 个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有 15 个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult
>
)
>
)
委托

封装一个方法，该方法具有 16 个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： System.Core（在 System.Core.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, In T9, In T10, In T11, In T12, In T13, In T14, In T15, In T16, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8, _
    arg9 As T9, _
    arg10 As T10, _
    arg11 As T11, _
    arg12 As T12, _
    arg13 As T13, _
    arg14 As T14, _
    arg15 As T15, _
    arg16 As T16 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14,
    T15 arg15,
    T16 arg16
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8,
    T9 arg9,
    T10 arg10,
    T11 arg11,
    T12 arg12,
    T13 arg13,
    T14 arg14,
    T15 arg15,
    T16 arg16
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 *
        arg9:'T9 *
        arg10:'T10 *
        arg11:'T11 *
        arg12:'T12 *
        arg13:'T13 *
        arg14:'T14 *
        arg15:'T15 *
        arg16:'T16 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

inInininT9T9

此委托封装的方法的第九个参数的类型。

inInininT10T10

此委托封装的方法的第十个参数的类型。

inInininT11T11

此委托封装的方法的第十一个参数的类型。

inInininT12T12

此委托封装的方法的第十二个参数的类型。

inInininT13T13

此委托封装的方法的第十三个参数的类型。

inInininT14T14

此委托封装的方法的第十四个参数的类型。

inInininT15T15

此委托封装的方法的第十五个参数的类型。

inInininT16T16

此委托封装的方法的第十六个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。
arg9
类型：T9
此委托封装的方法的第九个参数。
arg10
类型：T10
此委托封装的方法的第十个参数。
arg11
类型：T11
此委托封装的方法的第十一个参数。
arg12
类型：T12
此委托封装的方法的第十二个参数。
arg13
类型：T13
此委托封装的方法的第十三个参数。
arg14
类型：T14
此委托封装的方法的第十四个参数。
arg15
类型：T15
此委托封装的方法的第十五个参数。
arg16
类型：T16
此委托封装的方法的第十六个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 16 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 16 个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有 16 个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有 16 个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16


Func <(Of <(T, TResult >)>) 委托

Func
<
(Of
<
(
T, TResult
>
)
>
)
委托

封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Func(Of In T, Out TResult) ( _
    arg As T _
) As TResult
public delegate TResult Func<in T, out TResult>(
    T arg
)

generic<typename T, typename TResult>
public delegate TResult Func(
    T arg
)
type Func =
    delegate of
        arg:'T -> 'TResult

类型参数

inInininTT

此委托封装的方法的参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg
类型：T
此委托封装的方法的参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有一个通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有一个通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有一个通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有一个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T>)>) 委托。

在使用 Func<(Of <(T, TResult>)>) 委托时，不必显式定义一个封装只有一个参数的方法的委托。例如，以下代码显式声明了一个名为 ConvertMethod 的委托，并将对 UppercaseString 方法的引用分配给其委托实例。 在使用 Func<(Of <(T, TResult>)>) 委托时，不必显式定义一个封装只有一个参数的方法的委托。例如，以下代码显式声明了一个名为 ConvertMethod 的委托，并将对 UppercaseString 方法的引用分配给其委托实例。

' Declare a delegate to represent string conversion method
Delegate Function ConvertMethod(ByVal inString As String) As String

Module DelegateExample
   Public Sub Main()
      ' Instantiate delegate to reference UppercaseString method
      Dim convertMeth As ConvertMethod = AddressOf UppercaseString
      Dim name As String = "Dakota"
      ' Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMeth(name))
   End Sub

   Private Function UppercaseString(inputString As String) As String
      Return inputString.ToUpper()
   End Function
End Module

using System;

delegate string ConvertMethod(string inString);

public class DelegateExample
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      ConvertMethod convertMeth = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMeth(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}

以下示例简化了此代码，它所用的方法是实例化 Func<(Of <(T, TResult>)>) 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Module GenericFunc
   Public Sub Main()
      ' Instantiate delegate to reference UppercaseString method
      Dim convertMethod As Func(Of String, String) = AddressOf UppercaseString
      Dim name As String = "Dakota"
      ' Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMethod(name))
   End Sub

   Private Function UppercaseString(inputString As String) As String
      Return inputString.ToUpper()
   End Function
End Module

using System;

public class GenericFunc
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      Func<string, string> convertMethod = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMethod(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}

您也可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(T, TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您也可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(T, TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;

public class Anonymous
{
   public static void Main()
   {
      Func<string, string> convert = delegate(string s)
         { return s.ToUpper();};

      string name = "Dakota";
      Console.WriteLine(convert(name));
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。）

Module LambdaExpression
   Public Sub Main()
      Dim convert As Func(Of String, String) = Function(s) s.ToUpper()

      Dim name As String = "Dakota"
      Console.WriteLine(convert(name))
   End Sub
End Module

using System;

public class LambdaExpression
{
   public static void Main()
   {
      Func<string, string> convert = s => s.ToUpper();

      string name = "Dakota";
      Console.WriteLine(convert(name));
   }
}

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func<(Of <(T, TResult>)>) 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func<(Of <(T, TResult>)>) 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func<(Of <(T, TResult>)>) 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func<(Of <(T, TResult>)>) 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func<(Of <(T, TResult>)>) 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func<(Of <(T, TResult>)>) 委托。

下面的示例演示如何声明和使用 Func<(Of <(T, TResult>)>) 委托。此示例声明一个 Func<(Of <(T, TResult>)>) 变量，并为其分配了一个将字符串中的字符转换为大写的 lambda 表达式。随后将封装此方法的委托传递给 Enumerable..::.Select 方法，以将字符串数组中的字符串更改为大写。 下面的示例演示如何声明和使用 Func<(Of <(T, TResult>)>) 委托。此示例声明一个 Func<(Of <(T, TResult>)>) 变量，并为其分配了一个将字符串中的字符转换为大写的 lambda 表达式。随后将封装此方法的委托传递给 Enumerable..::.Select 方法，以将字符串数组中的字符串更改为大写。 下面的示例演示如何声明和使用 Func<(Of <(T, TResult>)>) 委托。此示例声明一个 Func<(Of <(T, TResult>)>) 变量，并为其分配了一个将字符串中的字符转换为大写的 lambda 表达式。随后将封装此方法的委托传递给 Enumerable..::.Select 方法，以将字符串数组中的字符串更改为大写。

Imports System.Collections.Generic
Imports System.Linq

Module Func
   Public Sub Main()
      ' Declare a Func variable and assign a lambda expression to the
      ' variable. The method takes a string and converts it to uppercase.
      Dim selector As Func(Of String, String) = Function(str) str.ToUpper()

      ' Create an array of strings.
      Dim words() As String = { "orange", "apple", "Article", "elephant" }
      ' Query the array and select strings according to the selector method.
      Dim aWords As IEnumerable(Of String) = words.Select(selector)

      ' Output the results to the console.
      For Each word As String In aWords
         Console.WriteLine(word)
      Next
   End Sub
End Module
' This code example produces the following output:
'
'   ORANGE
'   APPLE
'   ARTICLE
'   ELEPHANT

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

static class Func
{
   static void Main(string[] args)
   {
      // Declare a Func variable and assign a lambda expression to the
      // variable. The method takes a string and converts it to uppercase.
      Func<string, string> selector = str => str.ToUpper();

      // Create an array of strings.
      string[] words = { "orange", "apple", "Article", "elephant" };
      // Query the array and select strings according to the selector method.
      IEnumerable<String> aWords = words.Select(selector);

      // Output the results to the console.
      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}
/*
This code example produces the following output:

   ORANGE
   APPLE
   ARTICLE
   ELEPHANT
*/

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

XNA Framework

受以下版本支持：3.0

参考

System 命名空间

其他资源

Lambda 表达式（C# 编程指南）
lambda 表达式
委托（C# 编程指南）
委托 (Visual Basic)


Func <(Of <(T1, T2, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, TResult
>
)
>
)
委托

封装一个具有两个参数并返回 TResult 参数指定的类型值的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Func(Of In T1, In T2, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2 _
) As TResult
public delegate TResult Func<in T1, in T2, out TResult>(
    T1 arg1,
    T2 arg2
)

generic<typename T1, typename T2, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有两个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有两个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有两个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有两个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2>)>) 委托。

在使用 Func<(Of <(T1, T2, TResult>)>) 委托时，不必显式定义一个封装具有两个参数的方法的委托。例如，以下代码显式声明了一个名为 ExtractMethod 的委托，并将对 ExtractWords 方法的引用分配给其委托实例。 在使用 Func<(Of <(T1, T2, TResult>)>) 委托时，不必显式定义一个封装具有两个参数的方法的委托。例如，以下代码显式声明了一个名为 ExtractMethod 的委托，并将对 ExtractWords 方法的引用分配给其委托实例。

' Declare a delegate to represent string extraction method
Delegate Function ExtractMethod(ByVal stringToManipulate As String, _
                                ByVal maximum As Integer) As String()

Module DelegateExample
   Public Sub Main()
      ' Instantiate delegate to reference ExtractWords method
      Dim extractMeth As ExtractMethod = AddressOf ExtractWords
      Dim title As String = "The Scarlet Letter"
      ' Use delegate instance to call ExtractWords method and display result
      For Each word As String In extractMeth(title, 5)
         Console.WriteLine(word)
      Next
   End Sub

   Private Function ExtractWords(phrase As String, limit As Integer) As String()
      Dim delimiters() As Char = {" "c}
      If limit > 0 Then
         Return phrase.Split(delimiters, limit)
      Else
         Return phrase.Split(delimiters)
      End If
   End Function
End Module

using System;

delegate string[] ExtractMethod(string stringToManipulate, int maximum);

public class DelegateExample
{
   public static void Main()
   {
      // Instantiate delegate to reference ExtractWords method
      ExtractMethod extractMeth = ExtractWords;
      string title = "The Scarlet Letter";
      // Use delegate instance to call ExtractWords method and display result
      foreach (string word in extractMeth(title, 5))
         Console.WriteLine(word);
   }

   private static string[] ExtractWords(string phrase, int limit)
   {
      char[] delimiters = new char[] {' '};
      if (limit > 0)
         return phrase.Split(delimiters, limit);
      else
         return phrase.Split(delimiters);
   }
}

以下示例简化了此代码，它所用的方法是实例化 Func<(Of <(T1, T2, TResult>)>) 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Module GenericFunc
   Public Sub Main()
      ' Instantiate delegate to reference ExtractWords method
      Dim extractMeth As Func(Of String, Integer, String()) = AddressOf ExtractWords
      Dim title As String = "The Scarlet Letter"
      ' Use delegate instance to call ExtractWords method and display result
      For Each word As String In extractMeth(title, 5)
         Console.WriteLine(word)
      Next
   End Sub

   Private Function ExtractWords(phrase As String, limit As Integer) As String()
      Dim delimiters() As Char = {" "c}
      If limit > 0 Then
         Return phrase.Split(delimiters, limit)
      Else
         Return phrase.Split(delimiters)
      End If
   End Function
End Module

using System;

public class GenericFunc
{
   public static void Main()
   {
      // Instantiate delegate to reference ExtractWords method
      Func<string, int, string[]> extractMethod = ExtractWords;
      string title = "The Scarlet Letter";
      // Use delegate instance to call ExtractWords method and display result
      foreach (string word in extractMethod(title, 5))
         Console.WriteLine(word);
   }

   private static string[] ExtractWords(string phrase, int limit)
   {
      char[] delimiters = new char[] {' '};
      if (limit > 0)
         return phrase.Split(delimiters, limit);
      else
         return phrase.Split(delimiters);
   }
}

您可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(T1, T2, TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(T1, T2, TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;

public class Anonymous
{
   public static void Main()
   {
      Func<string, int, string[]> extractMeth = delegate(string s, int i)
         { char[] delimiters = new char[] {' '};
           return i > 0 ? s.Split(delimiters, i) : s.Split(delimiters);
         };

      string title = "The Scarlet Letter";
      // Use Func instance to call ExtractWords method and display result
      foreach (string word in extractMeth(title, 5))
         Console.WriteLine(word);
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T1, T2, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T1, T2, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。）

Module LambdaExpression
   Public Sub Main()
      Dim separators() As Char = {" "c}
      Dim extract As Func(Of String, Integer, String()) = Function(s, i) _
          CType(iif(i > 0, s.Split(separators, i), s.Split(separators)), String())

      Dim title As String = "The Scarlet Letter"
      For Each word As String In extract(title, 5)
         Console.WriteLine(word)
      Next
   End Sub
End Module

using System;

public class LambdaExpression
{
   public static void Main()
   {
      char[] separators = new char[] {' '};
      Func<string, int, string[]> extract = (s, i) =>
           i > 0 ? s.Split(separators, i) : s.Split(separators) ;

      string title = "The Scarlet Letter";
      // Use Func instance to call ExtractWords method and display result
      foreach (string word in extract(title, 5))
         Console.WriteLine(word);
   }
}

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func<(Of <(T1, T2, TResult>)>) 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func<(Of <(T1, T2, TResult>)>) 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func<(Of <(T1, T2, TResult>)>) 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func<(Of <(T1, T2, TResult>)>) 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func<(Of <(T1, T2, TResult>)>) 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func<(Of <(T1, T2, TResult>)>) 委托。

下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。 下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。 下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。 下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。

Imports System.Collections.Generic
Imports System.Linq

Public Module Func3Example

   Public Sub Main()
      Dim predicate As Func(Of String, Integer, Boolean) = Function(str, index) str.Length = index

      Dim words() As String = { "orange", "apple", "Article", "elephant", "star", "and" }
      Dim aWords As IEnumerable(Of String) = words.Where(predicate)

      For Each word As String In aWords
         Console.WriteLine(word)
      Next
   End Sub
End Module

using System;
using System.Collections.Generic;
using System.Linq;

public class Func3Example
{
   public static void Main()
   {
      Func<String, int, bool> predicate = (str, index) => str.Length == index;

      String[] words = { "orange", "apple", "Article", "elephant", "star", "and" };
      IEnumerable<String> aWords = words.Where(predicate).Select(str => str);

      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

XNA Framework

受以下版本支持：3.0

参考

System 命名空间

其他资源

Lambda 表达式（C# 编程指南）
lambda 表达式
委托（C# 编程指南）
委托 (Visual Basic)


Func <(Of <(T1, T2, T3, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, TResult
>
)
>
)
委托

封装一个具有三个参数并返回 TResult 参数指定的类型值的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3
)

generic<typename T1, typename T2, typename T3, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有三个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有三个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有三个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有三个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3>)>) 委托。

在使用 Func<(Of <(T1, T2, T3, TResult>)>) 委托时，不必显式定义一个封装具有三个参数的方法的委托。例如，以下代码显式声明了一个名为 ParseNumber 的泛型委托，并将对 Parse 方法的引用分配给其委托实例。 在使用 Func<(Of <(T1, T2, T3, TResult>)>) 委托时，不必显式定义一个封装具有三个参数的方法的委托。例如，以下代码显式声明了一个名为 ParseNumber 的泛型委托，并将对 Parse 方法的引用分配给其委托实例。

Imports System.Globalization

Delegate Function ParseNumber(Of T)(input As String, styles As NumberStyles, _
                                    provider As IFormatProvider) As T

Module DelegateExample
   Public Sub Main()
      Dim numericString As String = "-1,234"
      Dim parser As ParseNumber(Of Integer) = AddressOf Integer.Parse
      Console.WriteLine(parser(numericString, _
                        NumberStyles.Integer Or NumberStyles.AllowThousands, _
                        CultureInfo.InvariantCulture))
   End Sub
End Module

using System;
using System.Globalization;

delegate T ParseNumber<T>(string input, NumberStyles styles,
                         IFormatProvider provider);

public class DelegateExample
{
   public static void Main()
   {
      string numericString = "-1,234";
      ParseNumber<int> parser = int.Parse;
      Console.WriteLine(parser(numericString,
                        NumberStyles.Integer | NumberStyles.AllowThousands,
                        CultureInfo.InvariantCulture));
   }
}

以下示例简化了此代码，它所用的方法是实例化 Func<(Of <(T1, T2, T3, TResult>)>) 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Imports System.Globalization

Module GenericFunc
   Public Sub Main()
      Dim numericString As String = "-1,234"
      Dim parser As Func(Of String, NumberStyles, IFormatProvider, Integer) _
                         = AddressOf Integer.Parse
      Console.WriteLine(parser(numericString, _
                        NumberStyles.Integer Or NumberStyles.AllowThousands, _
                        CultureInfo.InvariantCulture))
   End Sub
End Module

using System;
using System.Globalization;

public class GenericFunc
{
   public static void Main()
   {
      string numericString = "-1,234";
      Func<string, NumberStyles, IFormatProvider, int> parser = int.Parse;
      Console.WriteLine(parser(numericString,
                        NumberStyles.Integer | NumberStyles.AllowThousands,
                        CultureInfo.InvariantCulture));
   }
}

您可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(T1, T2, T3, TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(T1, T2, T3, TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;
using System.Globalization;

public class Anonymous
{
   public static void Main()
   {
      string numericString = "-1,234";
      Func<string, NumberStyles, IFormatProvider, int> parser =
           delegate(string s, NumberStyles sty, IFormatProvider p)
           { return int.Parse(s, sty, p); };
      Console.WriteLine(parser(numericString,
                        NumberStyles.Integer | NumberStyles.AllowThousands,
                        CultureInfo.InvariantCulture));
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T1, T2, T3, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T1, T2, T3, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。）

Imports System.Globalization

Module LambdaExpression
   Public Sub Main()
      Dim numericString As String = "-1,234"
      Dim parser As Func(Of String, NumberStyles, IFormatProvider, Integer) _
                         = Function(s, sty, p) Integer.Parse(s, sty, p)
      Console.WriteLine(parser(numericString, _
                        NumberStyles.Integer Or NumberStyles.AllowThousands, _
                        CultureInfo.InvariantCulture))
   End Sub
End Module

using System;
using System.Globalization;

public class LambdaExpression
{
   public static void Main()
   {
      string numericString = "-1,234";
      Func<string, NumberStyles, IFormatProvider, int> parser = (s, sty, p)
                   => int.Parse(s, sty, p);
      Console.WriteLine(parser(numericString,
                        NumberStyles.Integer | NumberStyles.AllowThousands,
                        CultureInfo.InvariantCulture));
   }
}

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func 委托。

下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。 下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。 下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。 下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。

Imports System.Collections.Generic
Imports System.Linq

Public Module Func3Example

   Public Sub Main()
      Dim predicate As Func(Of String, Integer, Boolean) = Function(str, index) str.Length = index

      Dim words() As String = { "orange", "apple", "Article", "elephant", "star", "and" }
      Dim aWords As IEnumerable(Of String) = words.Where(predicate)

      For Each word As String In aWords
         Console.WriteLine(word)
      Next
   End Sub
End Module

using System;
using System.Collections.Generic;
using System.Linq;

public class Func3Example
{
   public static void Main()
   {
      Func<String, int, bool> predicate = (str, index) => str.Length == index;

      String[] words = { "orange", "apple", "Article", "elephant", "star", "and" };
      IEnumerable<String> aWords = words.Where(predicate).Select(str => str);

      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

XNA Framework

受以下版本支持：3.0

参考

System 命名空间

其他资源

Lambda 表达式（C# 编程指南）
lambda 表达式
委托（C# 编程指南）
委托 (Visual Basic)


Func <(Of <(T1, T2, T3, T4, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, TResult
>
)
>
)
委托

封装一个具有四个参数并返回 TResult 参数指定的类型值的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4
)

generic<typename T1, typename T2, typename T3, typename T4, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有四个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有四个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有四个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有四个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4>)>) 委托。

在使用 Func<(Of <(T1, T2, T3, T4, TResult>)>) 委托时，不必显式定义一个封装具有四个参数的方法的委托。例如，以下代码显式声明了一个名为 Searcher 的泛型委托，并将对 IndexOf 方法的引用分配给其委托实例。 在使用 Func<(Of <(T1, T2, T3, T4, TResult>)>) 委托时，不必显式定义一个封装具有四个参数的方法的委托。例如，以下代码显式声明了一个名为 Searcher 的泛型委托，并将对 IndexOf 方法的引用分配给其委托实例。

Delegate Function Searcher(searchString As String, _
                           start As Integer,  _
                           count As Integer, _
                           type As StringComparison) As Integer

Module DelegateExample
   Public Sub Main()
      Dim title As String = "The House of the Seven Gables"
      Dim position As Integer = 0
      Dim finder As Searcher = AddressOf title.IndexOf
      Do
         Dim characters As Integer = title.Length - position
         position = finder("the", position, characters, _
                         StringComparison.InvariantCultureIgnoreCase)
         If position >= 0 Then
            position += 1
            Console.WriteLine("'The' found at position {0} in {1}.", _
                              position, title)
         End If
      Loop While position > 0
   End Sub
End Module

using System;

delegate int Searcher(string searchString, int start, int count,
                         StringComparison type);

public class DelegateExample
{
   public static void Main()
   {
      string title = "The House of the Seven Gables";
      int position = 0;
      Searcher finder = title.IndexOf;
      do
      {
         int characters = title.Length - position;
         position = finder("the", position, characters,
                         StringComparison.InvariantCultureIgnoreCase);
         if (position >= 0)
         {
            position++;
            Console.WriteLine("'The' found at position {0} in {1}.",
                              position, title);
         }
      } while (position > 0);
   }
}

以下示例简化了此代码，它所用的方法是实例化 Func<(Of <(T1, T2, T3, T4, TResult>)>) 委托，而不是显式定义一个新委托并将命名方法分配给该委托。

Module DelegateExample
   Public Sub Main()
      Dim title As String = "The House of the Seven Gables"
      Dim position As Integer = 0
      Dim finder As Func(Of String, Integer, Integer, StringComparison, Integer) _
                    = AddressOf title.IndexOf
      Do
         Dim characters As Integer = title.Length - position
         position = finder("the", position, characters, _
                         StringComparison.InvariantCultureIgnoreCase)
         If position >= 0 Then
            position += 1
            Console.WriteLine("'The' found at position {0} in {1}.", _
                              position, title)
         End If
      Loop While position > 0
   End Sub
End Module

using System;

public class DelegateExample
{
   public static void Main()
   {
      string title = "The House of the Seven Gables";
      int position = 0;
      Func<string, int, int, StringComparison, int> finder = title.IndexOf;
      do
      {
         int characters = title.Length - position;
         position = finder("the", position, characters,
                         StringComparison.InvariantCultureIgnoreCase);
         if (position >= 0)
         {
            position++;
            Console.WriteLine("'The' found at position {0} in {1}.",
                              position, title);
         }
      } while (position > 0);
   }
}

您可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(T1, T2, T3, T4, TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。） 您可以按照以下示例所演示的那样在 C# 中将 Func<(Of <(T1, T2, T3, T4, TResult>)>) 委托与匿名方法一起使用。（有关匿名方法的简介，请参见匿名方法（C# 编程指南）。）

using System;

public class DelegateExample
{
   public static void Main()
   {
      string title = "The House of the Seven Gables";
      int position = 0;
      Func<string, int, int, StringComparison, int> finder =
           delegate(string s, int pos, int chars, StringComparison type)
           { return title.IndexOf(s, pos, chars, type); };
      do
      {
         int characters = title.Length - position;
         position = finder("the", position, characters,
                         StringComparison.InvariantCultureIgnoreCase);
         if (position >= 0)
         {
            position++;
            Console.WriteLine("'The' found at position {0} in {1}.",
                              position, title);
         }
      } while (position > 0);
   }
}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T1, T2, T3, T4, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。） 您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Func<(Of <(T1, T2, T3, T4, TResult>)>) 委托。（有关 lambda 表达式的简介，请参见 lambda 表达式和 Lambda 表达式（C# 编程指南）。）

Module DelegateExample
   Public Sub Main()
      Dim title As String = "The House of the Seven Gables"
      Dim position As Integer = 0
      Dim finder As Func(Of String, Integer, Integer, StringComparison, Integer) _
                    = Function(s, pos, chars, type) _
                    title.IndexOf(s, pos, chars, type)
      Do
         Dim characters As Integer = title.Length - position
         position = finder("the", position, characters, _
                         StringComparison.InvariantCultureIgnoreCase)
         If position >= 0 Then
            position += 1
            Console.WriteLine("'The' found at position {0} in {1}.", _
                              position, title)
         End If
      Loop While position > 0
   End Sub
End Module

using System;

public class DelegateExample
{
   public static void Main()
   {
      string title = "The House of the Seven Gables";
      int position = 0;
      Func<string, int, int, StringComparison, int> finder =
           (s, pos, chars, type) => title.IndexOf(s, pos, chars, type);
      do
      {
         int characters = title.Length - position;
         position = finder("the", position, characters,
                         StringComparison.InvariantCultureIgnoreCase);
         if (position >= 0)
         {
            position++;
            Console.WriteLine("'The' found at position {0} in {1}.",
                              position, title);
         }
      } while (position > 0);
   }
}

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func 委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。尤其是，因为 System.Linq 命名空间中许多类型方法具有 Func 参数，因此可以给这些方法传递 lambda 表达式，而不用显式实例化 Func 委托。

下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。 下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。 下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。 下面的示例演示如何声明和使用 Func<(Of <(T1, T2, TResult>)>) 委托。此示例声明一个 Func<(Of <(T1, T2, TResult>)>) 变量，并将其分配给一个采用 String 值和 Int32 值作为参数的 lambda 表达式。如果 String 参数的长度等于 Int32 参数的值，则此 lambda 表达式将返回 true。随后在查询中使用封装此方法的委托来筛选字符串数组中的字符串。

Imports System.Collections.Generic
Imports System.Linq

Public Module Func3Example

   Public Sub Main()
      Dim predicate As Func(Of String, Integer, Boolean) = Function(str, index) str.Length = index

      Dim words() As String = { "orange", "apple", "Article", "elephant", "star", "and" }
      Dim aWords As IEnumerable(Of String) = words.Where(predicate)

      For Each word As String In aWords
         Console.WriteLine(word)
      Next
   End Sub
End Module

using System;
using System.Collections.Generic;
using System.Linq;

public class Func3Example
{
   public static void Main()
   {
      Func<String, int, bool> predicate = (str, index) => str.Length == index;

      String[] words = { "orange", "apple", "Article", "elephant", "star", "and" };
      IEnumerable<String> aWords = words.Where(predicate).Select(str => str);

      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

XNA Framework

受以下版本支持：3.0

参考

System 命名空间

其他资源

Lambda 表达式（C# 编程指南）
lambda 表达式
委托（C# 编程指南）
委托 (Visual Basic)


Func <(Of <(T1, T2, T3, T4, T5, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, TResult
>
)
>
)
委托

封装一个方法，该方法具有五个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有五个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有五个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有五个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有五个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5


Func <(Of <(T1, T2, T3, T4, T5, T6, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, TResult
>
)
>
)
委托

封装一个方法，该方法有六个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有六个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有六个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有六个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有六个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TResult
>
)
>
)
委托

封装一个函数，该方法具有三个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有七个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有七个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有七个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有七个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7


Func <(Of <(T1, T2, T3, T4, T5, T6, T7, T8, TResult >)>) 委托

Func
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8, TResult
>
)
>
)
委托

封装一个方法，该方法具有八个参数，并返回 TResult 参数所指定的类型的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Func(Of In T1, In T2, In T3, In T4, In T5, In T6, In T7, In T8, Out TResult) ( _
    arg1 As T1, _
    arg2 As T2, _
    arg3 As T3, _
    arg4 As T4, _
    arg5 As T5, _
    arg6 As T6, _
    arg7 As T7, _
    arg8 As T8 _
) As TResult
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, out TResult>(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8
)

generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename TResult>
public delegate TResult Func(
    T1 arg1,
    T2 arg2,
    T3 arg3,
    T4 arg4,
    T5 arg5,
    T6 arg6,
    T7 arg7,
    T8 arg8
)
type Func =
    delegate of
        arg1:'T1 *
        arg2:'T2 *
        arg3:'T3 *
        arg4:'T4 *
        arg5:'T5 *
        arg6:'T6 *
        arg7:'T7 *
        arg8:'T8 -> 'TResult

类型参数

inInininT1T1

此委托封装的方法的第一个参数类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

inInininT2T2

此委托封装的方法的第二个参数类型。

inInininT3T3

此委托封装的方法的第三个参数类型。

inInininT4T4

此委托封装的方法的第四个参数类型。

inInininT5T5

此委托封装的方法的第五个参数的类型。

inInininT6T6

此委托封装的方法的第六个参数的类型。

inInininT7T7

此委托封装的方法的第七个参数的类型。

inInininT8T8

此委托封装的方法的第八个参数的类型。

outOutoutoutTResultTResult

此委托封装的方法的返回值类型。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

arg1
类型：T1
此委托封装的方法的第一个参数。
arg2
类型：T2
此委托封装的方法的第二个参数。
arg3
类型：T3
此委托封装的方法的第三个参数。
arg4
类型：T4
此委托封装的方法的第四个参数。
arg5
类型：T5
此委托封装的方法的第五个参数。
arg6
类型：T6
此委托封装的方法的第六个参数。
arg7
类型：T7
此委托封装的方法的第七个参数。
arg8
类型：T8
此委托封装的方法的第八个参数。

返回值

类型：TResult
此委托封装的方法的返回值。

可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有八个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有八个均通过值传递给它的参数，并且必须返回值。 可以使用此委托表示一种能以参数形式传递的方法，而不用显式声明自定义委托。封装的方法必须与此委托定义的方法签名相对应。也就是说，封装的方法必须具有八个均通过值传递给它的参数，并且必须返回值。

说明 说明

若要引用具有八个参数并返回 void 的方法（或者要在 Visual Basic 中引用被声明为 Sub 而不是被声明为 Function 的方法），请改用泛型 Action<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>) 委托。

也可以将 Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, TResult>)>) 委托与匿名方法和 lambda 表达式一起使用。

Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。 Lambda 表达式的基础类型是泛型 Func 委托之一。这样能以参数形式传递 lambda 表达式，而不用显式将其分配给委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Action T1, T2, T3, T4, T5, T6, T7, T8


GC 类

GC 类
成员

控制系统垃圾回收器（一种自动回收未使用内存的服务）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public NotInheritable Class GC
public static class GC
public ref class GC abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type GC =  class end

此类中的方法影响何时对对象进行垃圾回收以及何时释放对象所分配的资源。此类中的属性提供以下信息：系统可用内存总量、分配给对象的内存的周期类别（代）。 此类中的方法影响何时对对象进行垃圾回收以及何时释放对象所分配的资源。此类中的属性提供以下信息：系统可用内存总量、分配给对象的内存的周期类别（代）。

垃圾回收器跟踪并回收托管内存中分配的对象。垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时，垃圾回收会自动进行。或者，应用程序可以使用 Collect 方法强制进行垃圾回收。 垃圾回收器跟踪并回收托管内存中分配的对象。垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时，垃圾回收会自动进行。或者，应用程序可以使用 Collect 方法强制进行垃圾回收。 垃圾回收器跟踪并回收托管内存中分配的对象。垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时，垃圾回收会自动进行。或者，应用程序可以使用 Collect 方法强制进行垃圾回收。 垃圾回收器跟踪并回收托管内存中分配的对象。垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时，垃圾回收会自动进行。或者，应用程序可以使用 Collect 方法强制进行垃圾回收。

垃圾回收由以下步骤组成：

  1. 垃圾回收器搜索托管代码中引用的托管对象。

  2. 垃圾回收器尝试完成没有被引用的对象。

  3. 垃圾回收器释放没有被引用的对象并回收它们的内存。

在回收期间，如果垃圾回收器在托管代码中找到对某对象的一个或多个引用，则不会释放该对象。然而，垃圾回收器不识别非托管代码中对对象的引用，因此，除非明确禁止，否则它有可能释放非托管代码中以独占方式使用的对象。KeepAlive 方法提供一种机制，该机制可防止垃圾回收器回收在非托管代码中仍使用的对象。 在回收期间，如果垃圾回收器在托管代码中找到对某对象的一个或多个引用，则不会释放该对象。然而，垃圾回收器不识别非托管代码中对对象的引用，因此，除非明确禁止，否则它有可能释放非托管代码中以独占方式使用的对象。KeepAlive 方法提供一种机制，该机制可防止垃圾回收器回收在非托管代码中仍使用的对象。 在回收期间，如果垃圾回收器在托管代码中找到对某对象的一个或多个引用，则不会释放该对象。然而，垃圾回收器不识别非托管代码中对对象的引用，因此，除非明确禁止，否则它有可能释放非托管代码中以独占方式使用的对象。KeepAlive 方法提供一种机制，该机制可防止垃圾回收器回收在非托管代码中仍使用的对象。

除托管内存分配外，垃圾回收器的实现不维护有关一个对象所保持的资源（如文件句柄或数据库连接）的信息。当某个类型使用的非托管资源在回收该类型的实例之前必须释放时，该类型可以实现终结器。 除托管内存分配外，垃圾回收器的实现不维护有关一个对象所保持的资源（如文件句柄或数据库连接）的信息。当某个类型使用的非托管资源在回收该类型的实例之前必须释放时，该类型可以实现终结器。

多数情况下，终结器通过重写 Object..::.Finalize 方法来实现，但是，用 C# 或 C++ 编写的类型实现析构函数，由编译器将析构函数转换为对 Object..::.Finalize 的重写。多数情况下，如果某对象有终结器，则垃圾回收器会在释放该对象前调用其终结器。不过，垃圾回收器并不是在所有情况下都需要调用终结器；例如，当 SuppressFinalize 方法显式禁止调用终结器时，垃圾回收器就不需要调用终结器。此外，不需要垃圾回收器使用特定线程来完成对象，也不需要垃圾回收器为相互引用、但能以其他方式用于垃圾回收的对象保证终结器的调用顺序。 多数情况下，终结器通过重写 Object..::.Finalize 方法来实现，但是，用 C# 或 C++ 编写的类型实现析构函数，由编译器将析构函数转换为对 Object..::.Finalize 的重写。多数情况下，如果某对象有终结器，则垃圾回收器会在释放该对象前调用其终结器。不过，垃圾回收器并不是在所有情况下都需要调用终结器；例如，当 SuppressFinalize 方法显式禁止调用终结器时，垃圾回收器就不需要调用终结器。此外，不需要垃圾回收器使用特定线程来完成对象，也不需要垃圾回收器为相互引用、但能以其他方式用于垃圾回收的对象保证终结器的调用顺序。 多数情况下，终结器通过重写 Object..::.Finalize 方法来实现，但是，用 C# 或 C++ 编写的类型实现析构函数，由编译器将析构函数转换为对 Object..::.Finalize 的重写。多数情况下，如果某对象有终结器，则垃圾回收器会在释放该对象前调用其终结器。不过，垃圾回收器并不是在所有情况下都需要调用终结器；例如，当 SuppressFinalize 方法显式禁止调用终结器时，垃圾回收器就不需要调用终结器。此外，不需要垃圾回收器使用特定线程来完成对象，也不需要垃圾回收器为相互引用、但能以其他方式用于垃圾回收的对象保证终结器的调用顺序。 多数情况下，终结器通过重写 Object..::.Finalize 方法来实现，但是，用 C# 或 C++ 编写的类型实现析构函数，由编译器将析构函数转换为对 Object..::.Finalize 的重写。多数情况下，如果某对象有终结器，则垃圾回收器会在释放该对象前调用其终结器。不过，垃圾回收器并不是在所有情况下都需要调用终结器；例如，当 SuppressFinalize 方法显式禁止调用终结器时，垃圾回收器就不需要调用终结器。此外，不需要垃圾回收器使用特定线程来完成对象，也不需要垃圾回收器为相互引用、但能以其他方式用于垃圾回收的对象保证终结器的调用顺序。

在资源必须在特定时间释放的方案中，类可以实现 IDisposable 接口，该接口包含执行资源管理和清理任务的 IDisposable..::.Dispose 方法。实现 Dispose 的类作为它们的类协定的一部分，必须指定类使用者是否需要及在什么时候调用该方法来清理对象。默认情况下，垃圾回收器并不调用 Dispose 方法，然而 Dispose 方法的实现可以调用 GC 类中的方法来自定义垃圾回收器的完成行为。 在资源必须在特定时间释放的方案中，类可以实现 IDisposable 接口，该接口包含执行资源管理和清理任务的 IDisposable..::.Dispose 方法。实现 Dispose 的类作为它们的类协定的一部分，必须指定类使用者是否需要及在什么时候调用该方法来清理对象。默认情况下，垃圾回收器并不调用 Dispose 方法，然而 Dispose 方法的实现可以调用 GC 类中的方法来自定义垃圾回收器的完成行为。 在资源必须在特定时间释放的方案中，类可以实现 IDisposable 接口，该接口包含执行资源管理和清理任务的 IDisposable..::.Dispose 方法。实现 Dispose 的类作为它们的类协定的一部分，必须指定类使用者是否需要及在什么时候调用该方法来清理对象。默认情况下，垃圾回收器并不调用 Dispose 方法，然而 Dispose 方法的实现可以调用 GC 类中的方法来自定义垃圾回收器的完成行为。

建议垃圾回收器使用代来支持对象老化，但这不是必需的。代是对象在内存中相对存现时期的度量单位。对象的代数或存在时期指示对象所属的代。较近创建的对象属于较新的代，比在应用程序生命周期中较早创建的对象的代数低。最近代中的对象位于零代中。 建议垃圾回收器使用代来支持对象老化，但这不是必需的。代是对象在内存中相对存现时期的度量单位。对象的代数或存在时期指示对象所属的代。较近创建的对象属于较新的代，比在应用程序生命周期中较早创建的对象的代数低。最近代中的对象位于零代中。 建议垃圾回收器使用代来支持对象老化，但这不是必需的。代是对象在内存中相对存现时期的度量单位。对象的代数或存在时期指示对象所属的代。较近创建的对象属于较新的代，比在应用程序生命周期中较早创建的对象的代数低。最近代中的对象位于零代中。 建议垃圾回收器使用代来支持对象老化，但这不是必需的。代是对象在内存中相对存现时期的度量单位。对象的代数或存在时期指示对象所属的代。较近创建的对象属于较新的代，比在应用程序生命周期中较早创建的对象的代数低。最近代中的对象位于零代中。 建议垃圾回收器使用代来支持对象老化，但这不是必需的。代是对象在内存中相对存现时期的度量单位。对象的代数或存在时期指示对象所属的代。较近创建的对象属于较新的代，比在应用程序生命周期中较早创建的对象的代数低。最近代中的对象位于零代中。

对实现者的说明

垃圾回收器的此实现支持三代对象。

使用 MaxGeneration 确定系统所支持的最大代数。对象老化允许应用程序针对一组特定的代进行垃圾回收，而不需要垃圾回收器计算所有代。 使用 MaxGeneration 确定系统所支持的最大代数。对象老化允许应用程序针对一组特定的代进行垃圾回收，而不需要垃圾回收器计算所有代。

下面的示例使用一些 GC 方法来获取有关未使用的对象块的代和内存信息，并将其输出到控制台上。然后回收未使用的对象，并显示所生成的内存总量。 下面的示例使用一些 GC 方法来获取有关未使用的对象块的代和内存信息，并将其输出到控制台上。然后回收未使用的对象，并显示所生成的内存总量。

Imports System

Namespace GCCollectInt_Example
    Class MyGCCollectClass
        Private maxGarbage As Long = 10000

        Public Shared Sub Main()
            Dim myGCCol As New MyGCCollectClass

            'Determine the maximum number of generations the system
            'garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration)

            myGCCol.MakeSomeGarbage()

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            'Determine the best available approximation of the number
            'of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of generation 0 only.
            GC.Collect(0)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of all generations up to and including 2.
            GC.Collect(2)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
            Console.Read()

        End Sub

        Sub MakeSomeGarbage()
            Dim vt As Version

            Dim i As Integer
            For i = 0 To maxGarbage - 1
                'Create objects and release them to fill up memory
                'with unused objects.
                vt = New Version
            Next i
        End Sub
    End Class
End Namespace

using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
        // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number
        // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
        // with unused objects.
                vt = new Version();
            }
        }
    }
}

using namespace System;
const long maxGarbage = 1000;
ref class MyGCCollectClass
{
public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++ )
      {

         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{
   MyGCCollectClass^ myGCCol = gcnew MyGCCollectClass;

   // Determine the maximum number of generations the system
   // garbage collector currently supports.
   Console::WriteLine( "The highest generation is {0}", GC::MaxGeneration );
   myGCCol->MakeSomeGarbage();

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );

   // Determine the best available approximation of the number
   // of bytes currently allocated in managed memory.
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of generation 0 only.
   GC::Collect( 0 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of all generations up to and including 2.
   GC::Collect( 2 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );
}

System System..::.GCGC
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

GC 成员
System 命名空间


GC 成员

GC 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GC 类

控制系统垃圾回收器（一种自动回收未使用内存的服务）。

GC 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

GC 类
System 命名空间


GC 方法

GC 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GC 类

GC 类型公开以下成员。

名称 说明
页首

参考

GC 类
System 命名空间


GC ..::.AddMemoryPressure 方法

GC
.
.
::
.
AddMemoryPressure 方法
GC 类

通知运行时在安排垃圾回收时应考虑分配大量的非托管内存。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub AddMemoryPressure ( _
    bytesAllocated As Long _
)
public static void AddMemoryPressure(
    long bytesAllocated
)
public:
static void AddMemoryPressure(
    long long bytesAllocated
)
static member AddMemoryPressure :
        bytesAllocated:int64 -> unit

参数

bytesAllocated
类型： System Int64
已分配的非托管内存的增量。
异常 | 条件
ArgumentOutOfRangeException | bytesAllocated 小于或等于零。 - 或 - 在 32 位的计算机上，bytesAllocated 大于 Int32..::.MaxValue。

在确定何时安排垃圾回收时，运行时将考虑分配多少托管内存。如果一个小的托管对象分配了大量非托管内存，运行时将只考虑托管内存，从而低估安排垃圾回收的紧迫性。AddMemoryPressure 方法会将这一对系统内存的额外压力通知运行时。 在确定何时安排垃圾回收时，运行时将考虑分配多少托管内存。如果一个小的托管对象分配了大量非托管内存，运行时将只考虑托管内存，从而低估安排垃圾回收的紧迫性。AddMemoryPressure 方法会将这一对系统内存的额外压力通知运行时。 在确定何时安排垃圾回收时，运行时将考虑分配多少托管内存。如果一个小的托管对象分配了大量非托管内存，运行时将只考虑托管内存，从而低估安排垃圾回收的紧迫性。AddMemoryPressure 方法会将这一对系统内存的额外压力通知运行时。

在最简单的用法模式下，托管对象将在构造函数中分配非托管内存，而在 Dispose 或 Finalize 方法中释放内存。在分配非托管内存之后，将调用 AddMemoryPressure 方法，而在释放了非托管内存之后，将调用 RemoveMemoryPressure 方法。 在最简单的用法模式下，托管对象将在构造函数中分配非托管内存，而在 Dispose 或 Finalize 方法中释放内存。在分配非托管内存之后，将调用 AddMemoryPressure 方法，而在释放了非托管内存之后，将调用 RemoveMemoryPressure 方法。

在复杂一些的情形中，非托管内存的分配在托管对象的生存期内会出现非常大的变化，此时您可以调用 AddMemoryPressure 和 RemoveMemoryPressure 方法将这些增量更改传递到运行时。

警告说明 警告

必须确保您移除的压力量与您添加的压力量完全相同。如果不这样做会对长时间运行的应用程序的系统性能产生不利影响。 必须确保您移除的压力量与您添加的压力量完全相同。如果不这样做会对长时间运行的应用程序的系统性能产生不利影响。
  • SecurityPermission

    表示在操作垃圾回收优先级时调用非托管代码的能力。关联的枚举：UnmanagedCode 表示在操作垃圾回收优先级时调用非托管代码的能力。关联的枚举：UnmanagedCode

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
System 命名空间


GC ..::.CancelFullGCNotification 方法

GC
.
.
::
.
CancelFullGCNotification 方法
GC 类

取消注册垃圾回收通知。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub CancelFullGCNotification
public static void CancelFullGCNotification()
public:
static void CancelFullGCNotification()
static member CancelFullGCNotification : unit -> unit

异常 | 条件
InvalidOperationException | 此成员在启用并发垃圾回收时不可用。有关如何禁用并发垃圾回收的信息，请参见 <gcConcurrent> 运行时设置。 此成员在启用并发垃圾回收时不可用。有关如何禁用并发垃圾回收的信息，请参见 <gcConcurrent> 运行时设置。

此方法可取消使用 RegisterForFullGCNotification 方法注册的垃圾回收通知。在调整对 RegisterForFullGCNotification 方法的后续调用中的阈值参数值之前，不必调用此方法。 此方法可取消使用 RegisterForFullGCNotification 方法注册的垃圾回收通知。在调整对 RegisterForFullGCNotification 方法的后续调用中的阈值参数值之前，不必调用此方法。

下面的示例取消垃圾回收注册。此示例摘自为垃圾回收通知主题提供的一个更大的示例。 下面的示例取消垃圾回收注册。此示例摘自为垃圾回收通知主题提供的一个更大的示例。

finalExit = True
checkForNotify = False
GC.CancelFullGCNotification()

finalExit = true;
checkForNotify = false;
GC.CancelFullGCNotification();
  • LinkDemand

    表示完全信任直接调用方。此成员不能由部分受信任的代码使用。 表示完全信任直接调用方。此成员不能由部分受信任的代码使用。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
System 命名空间

其他资源

垃圾回收通知


GC ..::.Collect 方法

GC
.
.
::
.
Collect 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GC 类

强制进行垃圾回收。

名称 说明
页首

参考

GC 类
GC 成员
System 命名空间


GC ..::.Collect 方法

GC
.
.
::
.
Collect 方法
GC 类

强制对所有代进行即时垃圾回收。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Collect
public static void Collect()
public:
static void Collect()
static member Collect : unit -> unit

使用此方法尝试回收无法访问的所有内存。

无论对象在内存中的时间有多长，所有的对象均被考虑回收；不过，在托管代码中引用的对象不会被回收。使用此方法强制系统尝试回收最大可用内存量。 无论对象在内存中的时间有多长，所有的对象均被考虑回收；不过，在托管代码中引用的对象不会被回收。使用此方法强制系统尝试回收最大可用内存量。

下面的示例演示如何使用 Collect 方法对内存的所有代执行回收。代码将生成许多未使用的对象，然后调用 Collect 方法从内存中清理这些对象。 下面的示例演示如何使用 Collect 方法对内存的所有代执行回收。代码将生成许多未使用的对象，然后调用 Collect 方法从内存中清理这些对象。

Imports System

Namespace GCCollect_Example
    Class MyGCCollectClass
        Private Const maxGarbage As Integer = 1000

        Shared Sub Main()
            'Put some objects in memory.
            MyGCCollectClass.MakeSomeGarbage()
            Console.WriteLine("Memory used before collection: {0}", GC.GetTotalMemory(False))

            'Collect all generations of memory.
            GC.Collect()
            Console.WriteLine("Memory used after full collection: {0}", GC.GetTotalMemory(True))
        End Sub

        Shared Sub MakeSomeGarbage()
            Dim vt As Version

            Dim i As Integer
            For i = 0 To maxGarbage - 1
                'Create objects and release them to fill up memory
                'with unused objects.
                vt = New Version()
            Next i
        End Sub
    End Class
End Namespace

using System;

namespace GCCollectExample
{
    class MyGCCollectClass
    {
        private const int maxGarbage = 1000;

        static void Main()
        {
            // Put some objects in memory.
            MyGCCollectClass.MakeSomeGarbage();
            Console.WriteLine("Memory used before collection: {0}", GC.GetTotalMemory(false));

            // Collect all generations of memory.
            GC.Collect();
            Console.WriteLine("Memory used after full collection: {0}", GC.GetTotalMemory(true));
        }

        static void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
                // with unused objects.
                vt = new Version();
            }
        }
    }
}

using namespace System;
const int maxGarbage = 1000;
void MakeSomeGarbage()
{
   Version^ vt;
   for ( int i = 0; i < maxGarbage; i++ )
   {

      // Create objects and release them to fill up memory
      // with unused objects.
      vt = gcnew Version;

   }
}

int main()
{

   // Put some objects in memory.
   MakeSomeGarbage();
   Console::WriteLine( "Memory used before collection: {0}", GC::GetTotalMemory( false ) );

   // Collect all generations of memory.
   GC::Collect();
   Console::WriteLine( "Memory used after full collection: {0}", GC::GetTotalMemory( true ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

GC 类
GC 成员
Collect 重载
System 命名空间

其他资源

被动回收


GC ..::.Collect 方法 (Int32)

GC
.
.
::
.
Collect 方法 (Int32)
GC 类

强制对零代到指定代进行即时垃圾回收。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Collect ( _
    generation As Integer _
)
public static void Collect(
    int generation
)
public:
static void Collect(
    int generation
)
static member Collect :
        generation:int -> unit

参数

generation
类型： System Int32
可执行垃圾回收的最早的代的编号。
异常 | 条件
ArgumentOutOfRangeException | generation 无效。

使用此方法尝试回收无法访问的内存。然而，使用此方法并不保证可以回收指定代中所有无法访问的内存。 使用此方法尝试回收无法访问的内存。然而，使用此方法并不保证可以回收指定代中所有无法访问的内存。

如果实现对象老化，则垃圾回收器不会回收代编号高于所指定代的对象。如果没有实现对象老化，则垃圾回收器将在垃圾回收期间考虑所有对象。 如果实现对象老化，则垃圾回收器不会回收代编号高于所指定代的对象。如果没有实现对象老化，则垃圾回收器将在垃圾回收期间考虑所有对象。

使用 MaxGeneration 属性确定 generation 参数的最大有效值。

若要让垃圾回收器考虑所有对象而不管它们所在的代，请使用此方法的无参数版本。若要让垃圾回收器根据 GCCollectionMode 设置回收对象，请使用 GC..::.Collect(Int32, GCCollectionMode) 方法重载。 若要让垃圾回收器考虑所有对象而不管它们所在的代，请使用此方法的无参数版本。若要让垃圾回收器根据 GCCollectionMode 设置回收对象，请使用 GC..::.Collect(Int32, GCCollectionMode) 方法重载。

下面的示例演示如何使用 Collect 方法对个别层的内存执行回收。代码将生成许多未使用的对象，然后调用 Collect 方法从内存中清理这些对象。 下面的示例演示如何使用 Collect 方法对个别层的内存执行回收。代码将生成许多未使用的对象，然后调用 Collect 方法从内存中清理这些对象。

Imports System

Namespace GCCollectInt_Example
    Class MyGCCollectClass
        Private maxGarbage As Long = 10000

        Public Shared Sub Main()
            Dim myGCCol As New MyGCCollectClass

            'Determine the maximum number of generations the system
            'garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration)

            myGCCol.MakeSomeGarbage()

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            'Determine the best available approximation of the number
            'of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of generation 0 only.
            GC.Collect(0)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of all generations up to and including 2.
            GC.Collect(2)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
            Console.Read()

        End Sub

        Sub MakeSomeGarbage()
            Dim vt As Version

            Dim i As Integer
            For i = 0 To maxGarbage - 1
                'Create objects and release them to fill up memory
                'with unused objects.
                vt = New Version
            Next i
        End Sub
    End Class
End Namespace

using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
        // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number
        // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
        // with unused objects.
                vt = new Version();
            }
        }
    }
}

using namespace System;
const long maxGarbage = 1000;
ref class MyGCCollectClass
{
public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++ )
      {

         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{
   MyGCCollectClass^ myGCCol = gcnew MyGCCollectClass;

   // Determine the maximum number of generations the system
   // garbage collector currently supports.
   Console::WriteLine( "The highest generation is {0}", GC::MaxGeneration );
   myGCCol->MakeSomeGarbage();

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );

   // Determine the best available approximation of the number
   // of bytes currently allocated in managed memory.
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of generation 0 only.
   GC::Collect( 0 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of all generations up to and including 2.
   GC::Collect( 2 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
Collect 重载
System 命名空间

其他资源

被动回收


GC ..::.Collect 方法 (Int32, GCCollectionMode)

GC
.
.
::
.
Collect 方法 (Int32, GCCollectionMode)
GC 类

强制在 GCCollectionMode 值所指定的时间对零代到指定代进行垃圾回收。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub Collect ( _
    generation As Integer, _
    mode As GCCollectionMode _
)
public static void Collect(
    int generation,
    GCCollectionMode mode
)
public:
static void Collect(
    int generation,
    GCCollectionMode mode
)
static member Collect :
        generation:int *
        mode:GCCollectionMode -> unit

参数

generation
类型： System Int32
可执行垃圾回收的最早的代的编号。
mode
类型： System GCCollectionMode
GCCollectionMode 值之一。
异常 | 条件
ArgumentOutOfRangeException | generation 无效。 - 或 - mode 不是 GCCollectionMode 值之一。

使用 mode 参数指定是应该立即进行垃圾回收，还是只在回收对象的最佳时间进行垃圾回收。使用此方法并不保证可以回收指定代中所有无法访问的内存。 使用 mode 参数指定是应该立即进行垃圾回收，还是只在回收对象的最佳时间进行垃圾回收。使用此方法并不保证可以回收指定代中所有无法访问的内存。

若要调整应用程序中重要期间的垃圾回收的侵入性，请设置 LatencyMode 属性。

垃圾回收器不会回收代编号高于 generation 参数所指定代的对象。使用 MaxGeneration 属性确定 generation 的最大有效值。 垃圾回收器不会回收代编号高于 generation 参数所指定代的对象。使用 MaxGeneration 属性确定 generation 的最大有效值。

若要让垃圾回收器考虑所有对象而不管它们所在的代，请使用此方法的无参数版本。

若要让垃圾回收器在回收对象时一直回收到指定的对象代，请使用 GC..::.Collect(Int32) 方法重载。如果指定最大代数，则将回收所有对象。 若要让垃圾回收器在回收对象时一直回收到指定的对象代，请使用 GC..::.Collect(Int32) 方法重载。如果指定最大代数，则将回收所有对象。

下面的示例使用 Optimized 设置对第 2 代对象进行垃圾回收。

Imports System

Class Program

    Public Shared Sub Main()
        GC.Collect(2, GCCollectionMode.Optimized)
    End Sub
End Class

using System;

class Program
{
    static void Main(string[] args)
    {
        GC.Collect(2, GCCollectionMode.Optimized);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
Collect 重载
System 命名空间

其他资源

被动回收


GC ..::.CollectionCount 方法

GC
.
.
::
.
CollectionCount 方法
GC 类

返回已经对对象的指定代进行的垃圾回收次数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CollectionCount ( _
    generation As Integer _
) As Integer
public static int CollectionCount(
    int generation
)
public:
static int CollectionCount(
    int generation
)
static member CollectionCount :
        generation:int -> int

参数

generation
类型： System Int32
对象的代，将针对此代确定垃圾回收计数。

返回值

类型： System Int32
自启动进程以来已经对指定代进行的垃圾回收次数。
异常 | 条件
ArgumentOutOfRangeException | generation 小于 0。

在实现您自己的资源管理时，可能需要通过调用 Collect 方法定期强制进行垃圾回收。由于这是一项高开销的操作，因此如果最近进行过垃圾回收，则可以通过跳过该调用来提高性能。在调用 Collect 之后，立即保存 CollectionCount 返回的值。当下次需要调用 Collect 时，将 CollectionCount 返回的当前值与保存值进行比较。如果这两个值相等，说明这期间没有进行过垃圾回收，因此，可以再次调用 Collect。 在实现您自己的资源管理时，可能需要通过调用 Collect 方法定期强制进行垃圾回收。由于这是一项高开销的操作，因此如果最近进行过垃圾回收，则可以通过跳过该调用来提高性能。在调用 Collect 之后，立即保存 CollectionCount 返回的值。当下次需要调用 Collect 时，将 CollectionCount 返回的当前值与保存值进行比较。如果这两个值相等，说明这期间没有进行过垃圾回收，因此，可以再次调用 Collect。 在实现您自己的资源管理时，可能需要通过调用 Collect 方法定期强制进行垃圾回收。由于这是一项高开销的操作，因此如果最近进行过垃圾回收，则可以通过跳过该调用来提高性能。在调用 Collect 之后，立即保存 CollectionCount 返回的值。当下次需要调用 Collect 时，将 CollectionCount 返回的当前值与保存值进行比较。如果这两个值相等，说明这期间没有进行过垃圾回收，因此，可以再次调用 Collect。 在实现您自己的资源管理时，可能需要通过调用 Collect 方法定期强制进行垃圾回收。由于这是一项高开销的操作，因此如果最近进行过垃圾回收，则可以通过跳过该调用来提高性能。在调用 Collect 之后，立即保存 CollectionCount 返回的值。当下次需要调用 Collect 时，将 CollectionCount 返回的当前值与保存值进行比较。如果这两个值相等，说明这期间没有进行过垃圾回收，因此，可以再次调用 Collect。 在实现您自己的资源管理时，可能需要通过调用 Collect 方法定期强制进行垃圾回收。由于这是一项高开销的操作，因此如果最近进行过垃圾回收，则可以通过跳过该调用来提高性能。在调用 Collect 之后，立即保存 CollectionCount 返回的值。当下次需要调用 Collect 时，将 CollectionCount 返回的当前值与保存值进行比较。如果这两个值相等，说明这期间没有进行过垃圾回收，因此，可以再次调用 Collect。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
System 命名空间


GC ..::.GetGeneration 方法

GC
.
.
::
.
GetGeneration 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GC 类

返回对象的当前代数。

名称 说明
页首

参考

GC 类
GC 成员
System 命名空间


GC ..::.GetGeneration 方法 (Object)

GC
.
.
::
.
GetGeneration 方法 (Object)
GC 类

返回指定对象的当前代数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetGeneration ( _
    obj As Object _
) As Integer
public static int GetGeneration(
    Object obj
)
public:
static int GetGeneration(
    Object^ obj
)
static member GetGeneration :
        obj:Object -> int

参数

obj
类型： System Object
检索其代信息的对象。

返回值

类型： System Int32
obj 的当前代数。

使用此方法确定对象的存现时期，然后将该信息与 Collect 方法一起使用以强制垃圾回收器回收同一代中的对象。例如，可在作为一个组创建的一组对象同时变为无法访问时使用此方法。 使用此方法确定对象的存现时期，然后将该信息与 Collect 方法一起使用以强制垃圾回收器回收同一代中的对象。例如，可在作为一个组创建的一组对象同时变为无法访问时使用此方法。

下面的示例演示如何使用 GetGeneration 方法来确定对象的存现时期。然后，此示例将执行垃圾回收来清理内存，并在控制台中比较回收前后的内存总量。 下面的示例演示如何使用 GetGeneration 方法来确定对象的存现时期。然后，此示例将执行垃圾回收来清理内存，并在控制台中比较回收前后的内存总量。

Imports System

Namespace GCCollectInt_Example
    Class MyGCCollectClass
        Private maxGarbage As Long = 10000

        Public Shared Sub Main()
            Dim myGCCol As New MyGCCollectClass

            'Determine the maximum number of generations the system
            'garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration)

            myGCCol.MakeSomeGarbage()

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            'Determine the best available approximation of the number
            'of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of generation 0 only.
            GC.Collect(0)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of all generations up to and including 2.
            GC.Collect(2)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
            Console.Read()

        End Sub

        Sub MakeSomeGarbage()
            Dim vt As Version

            Dim i As Integer
            For i = 0 To maxGarbage - 1
                'Create objects and release them to fill up memory
                'with unused objects.
                vt = New Version
            Next i
        End Sub
    End Class
End Namespace

using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
        // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number
        // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
        // with unused objects.
                vt = new Version();
            }
        }
    }
}

using namespace System;
const long maxGarbage = 1000;
ref class MyGCCollectClass
{
public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++ )
      {

         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{
   MyGCCollectClass^ myGCCol = gcnew MyGCCollectClass;

   // Determine the maximum number of generations the system
   // garbage collector currently supports.
   Console::WriteLine( "The highest generation is {0}", GC::MaxGeneration );
   myGCCol->MakeSomeGarbage();

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );

   // Determine the best available approximation of the number
   // of bytes currently allocated in managed memory.
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of generation 0 only.
   GC::Collect( 0 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of all generations up to and including 2.
   GC::Collect( 2 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
GetGeneration 重载
System 命名空间
MaxGeneration


GC ..::.GetGeneration 方法 (WeakReference)

GC
.
.
::
.
GetGeneration 方法 (WeakReference)
GC 类

返回指定弱引用的目标的当前代数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetGeneration ( _
    wo As WeakReference _
) As Integer
public static int GetGeneration(
    WeakReference wo
)
public:
static int GetGeneration(
    WeakReference^ wo
)
static member GetGeneration :
        wo:WeakReference -> int

参数

wo
类型： System WeakReference
引用要确定其代数的目标对象的 WeakReference。

返回值

类型： System Int32
wo 的目标的当前代数。
异常 | 条件
ArgumentException | 已经对 wo 执行了垃圾回收。

下面的示例演示如何使用 GetGeneration 方法来确定弱引用对象的存现时期。

Imports System

Namespace GCGetGenerationWeakExample

   Class MyGCCollectClass
      Private maxGarbage As Long = 1000

      Public Shared Sub Main()
         ' Create a strong reference to an object.
         Dim myGCCol As New MyGCCollectClass

         ' Put some objects in memory.
         myGCCol.MakeSomeGarbage()

         ' Get the generation of managed memory where myGCCol is stored.
         Console.WriteLine("The object is in generation: {0}", _
                            GC.GetGeneration(myGCCol))

         ' Perform a full garbage collection.
         ' Because there is a strong reference to myGCCol, it will
         ' not be garbage collected.
         GC.Collect()

         ' Get the generation of managed memory where myGCCol is stored.
         Console.WriteLine("The object is in generation: {0}", _
                            GC.GetGeneration(myGCCol))

         ' Create a WeakReference to myGCCol.
         Dim wkref As New WeakReference(myGCCol)
         ' Remove the strong reference to myGCCol.
         myGCCol = Nothing

         ' Get the generation of managed memory where wkref is stored.
         Console.WriteLine("The WeakReference to the object is in generation: {0}", _
                           GC.GetGeneration(wkref))

         ' Perform another full garbage collection.
         ' A WeakReference will not survive a garbage collection.
         GC.Collect()

         ' Try to get the generation of managed memory where wkref is stored.
         ' Because it has been collected, an exception will be thrown.
         Try
            Console.WriteLine("The WeakReference to the object is in generation: {0}", _
                               GC.GetGeneration(wkref))
            Console.Read()
         Catch e As Exception
            Console.WriteLine("The WeakReference to the object " & _
                              "has been garbage collected: '{0}'", e)
            Console.Read()
         End Try
      End Sub

      Sub MakeSomeGarbage()
         Dim vt As Version

         Dim i As Integer
         For i = 0 To maxGarbage - 1
            ' Create objects and release them to fill up memory
            ' with unused objects.
            vt = New Version
         Next i
      End Sub
   End Class
End Namespace

using System;

namespace GCGetGenerationWeakExample
{
    public class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            // Create a strong reference to an object.
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Put some objects in memory.
            myGCCol.MakeSomeGarbage();

            // Get the generation of managed memory where myGCCol is stored.
            Console.WriteLine("The object is in generation: {0}", GC.GetGeneration(myGCCol));

            // Perform a full garbage collection.
            // Because there is a strong reference to myGCCol, it will
            // not be garbage collected.
            GC.Collect();

            // Get the generation of managed memory where myGCCol is stored.
            Console.WriteLine("The object is in generation: {0}", GC.GetGeneration(myGCCol));

            // Create a WeakReference to myGCCol.
            WeakReference wkref = new WeakReference(myGCCol);
            // Remove the strong reference to myGCCol.
            myGCCol = null;

            // Get the generation of managed memory where wkref is stored.
            Console.WriteLine("The WeakReference to the object is in generation: {0}", GC.GetGeneration(wkref));

            // Perform another full garbage collection.
            // A WeakReference will not survive a garbage collection.
            GC.Collect();

            // Try to get the generation of managed memory where wkref is stored.
            // Because it has been collected, an exception will be thrown.
            try
            {
                Console.WriteLine("The WeakReference to the object is in generation: {0}", GC.GetGeneration(wkref));
                Console.Read();
            }
            catch(Exception e)
            {
                Console.WriteLine("The WeakReference to the object has been garbage collected: '{0}'", e);
                Console.Read();
            }
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
                // with unused objects.
                vt = new Version();
            }
        }
    }
}

using namespace System;
ref class MyGCCollectClass
{
private:
   static const long maxGarbage = 1000;

public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++ )
      {

         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{

   // Create a strong reference to an Object.
   MyGCCollectClass^ myGCCol = gcnew MyGCCollectClass;

   // Put some objects in memory.
   myGCCol->MakeSomeGarbage();

   // Get the generation of managed memory where myGCCol is stored.
   Console::WriteLine( "The object is in generation: {0}", GC::GetGeneration( myGCCol ) );

   // Perform a full garbage collection.
   // Because there is a strong reference to myGCCol, it will
   // not be garbage collected.
   GC::Collect();

   // Get the generation of managed memory where myGCCol is stored.
   Console::WriteLine( "The object is in generation: {0}", GC::GetGeneration( myGCCol ) );

   // Create a WeakReference to myGCCol.
   WeakReference^ wkref = gcnew WeakReference( myGCCol );

   // Remove the strong reference to myGCCol.
   myGCCol = nullptr;

   // Get the generation of managed memory where wkref is stored.
   Console::WriteLine( "The WeakReference to the object is in generation: {0}", GC::GetGeneration( wkref ) );

   // Perform another full garbage collection.
   // A WeakReference will not survive a garbage collection.
   GC::Collect();

   // Try to get the generation of managed memory where wkref is stored.
   // Because it has been collected, an exception will be thrown.
   try
   {
      Console::WriteLine( "The WeakReference to the object is in generation: {0}", GC::GetGeneration( wkref ) );
      Console::Read();
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "The WeakReference to the object has been garbage collected: ' {0}'", e );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
GetGeneration 重载
System 命名空间
MaxGeneration


GC ..::.GetTotalMemory 方法

GC
.
.
::
.
GetTotalMemory 方法
GC 类

检索当前认为要分配的字节数。一个参数，指示此方法是否可以等待较短间隔再返回，以便系统回收垃圾和终结对象。 检索当前认为要分配的字节数。一个参数，指示此方法是否可以等待较短间隔再返回，以便系统回收垃圾和终结对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTotalMemory ( _
    forceFullCollection As Boolean _
) As Long
public static long GetTotalMemory(
    bool forceFullCollection
)
public:
static long long GetTotalMemory(
    bool forceFullCollection
)
static member GetTotalMemory :
        forceFullCollection:bool -> int64

参数

forceFullCollection
类型： System Boolean
如果此方法可以在返回之前等待垃圾回收发生，则为 true；否则为 false。

返回值

类型： System Int64
一个数字，它是托管内存中当前所分配字节数的可用的最佳近似值。

如果 forceFullCollection 参数为 true，则此方法将在系统回收垃圾和完成对象过程中等待较短间隔然后再返回。间隔的持续时间是内部指定的限制，它由已完成的垃圾回收循环次数与循环之间恢复的内存量变化来确定。垃圾回收器不保证可以回收所有无法访问的内存。 如果 forceFullCollection 参数为 true，则此方法将在系统回收垃圾和完成对象过程中等待较短间隔然后再返回。间隔的持续时间是内部指定的限制，它由已完成的垃圾回收循环次数与循环之间恢复的内存量变化来确定。垃圾回收器不保证可以回收所有无法访问的内存。 如果 forceFullCollection 参数为 true，则此方法将在系统回收垃圾和完成对象过程中等待较短间隔然后再返回。间隔的持续时间是内部指定的限制，它由已完成的垃圾回收循环次数与循环之间恢复的内存量变化来确定。垃圾回收器不保证可以回收所有无法访问的内存。

下面的示例演示如何使用 GetTotalMemory 方法获取并显示当前在托管内存中分配的字节数。

Imports System

Namespace GCCollectInt_Example
    Class MyGCCollectClass
        Private maxGarbage As Long = 10000

        Public Shared Sub Main()
            Dim myGCCol As New MyGCCollectClass

            'Determine the maximum number of generations the system
            'garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration)

            myGCCol.MakeSomeGarbage()

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            'Determine the best available approximation of the number
            'of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of generation 0 only.
            GC.Collect(0)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of all generations up to and including 2.
            GC.Collect(2)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
            Console.Read()

        End Sub

        Sub MakeSomeGarbage()
            Dim vt As Version

            Dim i As Integer
            For i = 0 To maxGarbage - 1
                'Create objects and release them to fill up memory
                'with unused objects.
                vt = New Version
            Next i
        End Sub
    End Class
End Namespace

using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
        // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number
        // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
        // with unused objects.
                vt = new Version();
            }
        }
    }
}

using namespace System;
const long maxGarbage = 1000;
ref class MyGCCollectClass
{
public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++ )
      {

         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{
   MyGCCollectClass^ myGCCol = gcnew MyGCCollectClass;

   // Determine the maximum number of generations the system
   // garbage collector currently supports.
   Console::WriteLine( "The highest generation is {0}", GC::MaxGeneration );
   myGCCol->MakeSomeGarbage();

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );

   // Determine the best available approximation of the number
   // of bytes currently allocated in managed memory.
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of generation 0 only.
   GC::Collect( 0 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of all generations up to and including 2.
   GC::Collect( 2 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

GC 类
GC 成员
System 命名空间


GC ..::.KeepAlive 方法

GC
.
.
::
.
KeepAlive 方法
GC 类

引用指定对象，使其从当前例程开始到调用此方法的那一刻为止均不符合进行垃圾回收的条件。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub KeepAlive ( _
    obj As Object _
)
public static void KeepAlive(
    Object obj
)
public:
static void KeepAlive(
    Object^ obj
)
static member KeepAlive :
        obj:Object -> unit

参数

obj
类型： System Object
要引用的对象。

KeepAlive 方法的目的是确保对对象的引用存在，该对象有被垃圾回收器过早回收的危险。这种现象可能发生的一种常见情形是，当在托管代码或数据中已没有对该对象的引用，但该对象仍然在非托管代码（如 Win32 API、非托管 DLL 或使用 COM 的方法）中使用。 KeepAlive 方法的目的是确保对对象的引用存在，该对象有被垃圾回收器过早回收的危险。这种现象可能发生的一种常见情形是，当在托管代码或数据中已没有对该对象的引用，但该对象仍然在非托管代码（如 Win32 API、非托管 DLL 或使用 COM 的方法）中使用。

此方法引用 obj 参数，从而使该对象从例程开始到调用此方法的那个位置（按执行顺序）均不符合进行垃圾回收的条件。在 obj 必须可用的指令范围的结尾（而不是开头）编写此方法的代码。 此方法引用 obj 参数，从而使该对象从例程开始到调用此方法的那个位置（按执行顺序）均不符合进行垃圾回收的条件。在 obj 必须可用的指令范围的结尾（而不是开头）编写此方法的代码。

KeepAlive 方法除了延长作为参数传递的对象的生存期之外，不会执行任何操作，也会不产生任何其他副作用。

下面的代码示例在其 Main 方法开始处创建一个对象，但直到代码结尾处调用 KeepAlive 方法时才再次引用该对象。在 Main 方法 30 秒的持续期间，即使调用 Collect 和 WaitForPendingFinalizers 方法，该对象会一直保持。 下面的代码示例在其 Main 方法开始处创建一个对象，但直到代码结尾处调用 KeepAlive 方法时才再次引用该对象。在 Main 方法 30 秒的持续期间，即使调用 Collect 和 WaitForPendingFinalizers 方法，该对象会一直保持。

Imports System
Imports System.Threading
Imports System.Runtime.InteropServices

' A simple class that exposes two static Win32 functions.
' One is a delegate type and the other is an enumerated type.

Public Class MyWin32

   ' Declare the SetConsoleCtrlHandler function as external
   ' and receiving a delegate.
   <DllImport("Kernel32")> _
   Public Shared Function SetConsoleCtrlHandler(ByVal Handler As HandlerRoutine, _
         ByVal Add As Boolean) As Boolean
   End Function

   ' A delegate type to be used as the handler routine
   ' for SetConsoleCtrlHandler.
   Delegate Function HandlerRoutine(ByVal CtrlType As CtrlTypes) As [Boolean]

   ' An enumerated type for the control messages
   ' sent to the handler routine.

   Public Enum CtrlTypes
      CTRL_C_EVENT = 0
      CTRL_BREAK_EVENT
      CTRL_CLOSE_EVENT
      CTRL_LOGOFF_EVENT = 5
      CTRL_SHUTDOWN_EVENT
   End Enum
End Class

Public Class MyApp

   ' A private static handler function in the MyApp class.
   Shared Function Handler(ByVal CtrlType As MyWin32.CtrlTypes) As [Boolean]
      Dim message As [String] = "This message should never be seen!"

      ' A select case to handle the event type.
      Select Case CtrlType
         Case MyWin32.CtrlTypes.CTRL_C_EVENT
            message = "A CTRL_C_EVENT was raised by the user."
         Case MyWin32.CtrlTypes.CTRL_BREAK_EVENT
            message = "A CTRL_BREAK_EVENT was raised by the user."
         Case MyWin32.CtrlTypes.CTRL_CLOSE_EVENT
            message = "A CTRL_CLOSE_EVENT was raised by the user."
         Case MyWin32.CtrlTypes.CTRL_LOGOFF_EVENT
            message = "A CTRL_LOGOFF_EVENT was raised by the user."
         Case MyWin32.CtrlTypes.CTRL_SHUTDOWN_EVENT
            message = "A CTRL_SHUTDOWN_EVENT was raised by the user."
      End Select

      ' Use interop to display a message for the type of event.
      Console.WriteLine(message)

      Return True
   End Function

   Public Shared Sub Main()
      ' Use interop to set a console control handler.
      Dim hr As New MyWin32.HandlerRoutine(AddressOf Handler)
      MyWin32.SetConsoleCtrlHandler(hr, True)

      ' Give the user some time to raise a few events.
      Console.WriteLine("Waiting 30 seconds for console ctrl events...")

      ' The object hr is not referred to again.
      ' The garbage collector can detect that the object has no
      ' more managed references and might clean it up here while
      ' the unmanaged SetConsoleCtrlHandler method is still using it.
      ' Force a garbage collection to demonstrate how the hr
      ' object will be handled.
      GC.Collect()
      GC.WaitForPendingFinalizers()
      GC.Collect()

      Thread.Sleep(30000)

      ' Display a message to the console when the unmanaged method
      ' has finished its work.
      Console.WriteLine("Finished!")

      ' Call GC.KeepAlive(hr) at this point to maintain a reference to hr.
      ' This will prevent the garbage collector from collecting the
      ' object during the execution of the SetConsoleCtrlHandler method.
      GC.KeepAlive(hr)
      Console.Read()
   End Sub
End Class

using System;
using System.Threading;
using System.Runtime.InteropServices;

// A simple class that exposes two static Win32 functions.
// One is a delegate type and the other is an enumerated type.
public class MyWin32
{
    // Declare the SetConsoleCtrlHandler function
    // as external and receiving a delegate.
    [DllImport("Kernel32")]
    public static extern Boolean SetConsoleCtrlHandler(HandlerRoutine Handler,
        Boolean Add);

    // A delegate type to be used as the handler routine
    // for SetConsoleCtrlHandler.
    public delegate Boolean HandlerRoutine(CtrlTypes CtrlType);

    // An enumerated type for the control messages
    // sent to the handler routine.
    public enum CtrlTypes
    {
        CTRL_C_EVENT = 0,
        CTRL_BREAK_EVENT,
        CTRL_CLOSE_EVENT,
        CTRL_LOGOFF_EVENT = 5,
        CTRL_SHUTDOWN_EVENT
    }
}

public class MyApp
{
    // A private static handler function in the MyApp class.
    static Boolean Handler(MyWin32.CtrlTypes CtrlType)
    {
        String message = "This message should never be seen!";

        // A switch to handle the event type.
        switch(CtrlType)
        {
            case MyWin32.CtrlTypes.CTRL_C_EVENT:
                message = "A CTRL_C_EVENT was raised by the user.";
                break;
            case MyWin32.CtrlTypes.CTRL_BREAK_EVENT:
                message = "A CTRL_BREAK_EVENT was raised by the user.";
                break;
            case MyWin32.CtrlTypes.CTRL_CLOSE_EVENT:
                message = "A CTRL_CLOSE_EVENT was raised by the user.";
                break;
            case MyWin32.CtrlTypes.CTRL_LOGOFF_EVENT:
                message = "A CTRL_LOGOFF_EVENT was raised by the user.";
                break;
            case MyWin32.CtrlTypes.CTRL_SHUTDOWN_EVENT:
                message = "A CTRL_SHUTDOWN_EVENT was raised by the user.";
                break;
        }

        // Use interop to display a message for the type of event.
        Console.WriteLine(message);

        return true;
    }

    public static void Main()
    {

        // Use interop to set a console control handler.
        MyWin32.HandlerRoutine hr = new MyWin32.HandlerRoutine(Handler);
        MyWin32.SetConsoleCtrlHandler(hr, true);

        // Give the user some time to raise a few events.
        Console.WriteLine("Waiting 30 seconds for console ctrl events...");

        // The object hr is not referred to again.
        // The garbage collector can detect that the object has no
        // more managed references and might clean it up here while
        // the unmanaged SetConsoleCtrlHandler method is still using it.

        // Force a garbage collection to demonstrate how the hr
        // object will be handled.
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();

        Thread.Sleep(30000);

        // Display a message to the console when the unmanaged method
        // has finished its work.
        Console.WriteLine("Finished!");

        // Call GC.KeepAlive(hr) at this point to maintain a reference to hr.
        // This will prevent the garbage collector from collecting the
        // object during the execution of the SetConsoleCtrlHandler method.
        GC.KeepAlive(hr);
        Console.Read();
    }
}

using namespace System;
using namespace System::Threading;
using namespace System::Runtime::InteropServices;

// A simple class that exposes two static Win32 functions.
// One is a delegate type and the other is an enumerated type.
public ref class MyWin32
{
public:

   // An enumerated type for the control messages sent to the handler routine.
   enum class CtrlTypes
   {
      CTRL_C_EVENT = 0,
      CTRL_BREAK_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT = 5,
      CTRL_SHUTDOWN_EVENT
   };

   delegate Boolean HandlerRoutine(    // A delegate type to be used as the Handler Routine for SetConsoleCtrlHandler.
   CtrlTypes CtrlType );

   // Declare the SetConsoleCtrlHandler function as external and receiving a delegate.

   [DllImport("Kernel32")]
   static Boolean SetConsoleCtrlHandler( HandlerRoutine^ Handler, Boolean Add );
};

public ref class MyApp
{
private:

   // A private static handler function in the MyApp class.
   static Boolean Handler( MyWin32::CtrlTypes CtrlType )
   {
      String^ message = "This message should never be seen!";

      // A switch to handle the event type.
      switch ( CtrlType )
      {
         case MyWin32::CtrlTypes::CTRL_C_EVENT:
            message = "A CTRL_C_EVENT was raised by the user.";
            break;

         case MyWin32::CtrlTypes::CTRL_BREAK_EVENT:
            message = "A CTRL_BREAK_EVENT was raised by the user.";
            break;

         case MyWin32::CtrlTypes::CTRL_CLOSE_EVENT:
            message = "A CTRL_CLOSE_EVENT was raised by the user.";
            break;

         case MyWin32::CtrlTypes::CTRL_LOGOFF_EVENT:
            message = "A CTRL_LOGOFF_EVENT was raised by the user.";
            break;

         case MyWin32::CtrlTypes::CTRL_SHUTDOWN_EVENT:
            message = "A CTRL_SHUTDOWN_EVENT was raised by the user.";
            break;
      }

      // Use interop to display a message for the type of event.
      Console::WriteLine( message );
      return true;
   }

public:
   static void Test()
   {

      // Use interop to set a console control handler.
      MyWin32::HandlerRoutine^ hr = gcnew MyWin32::HandlerRoutine( Handler );
      MyWin32::SetConsoleCtrlHandler( hr, true );

      // Give the user some time to raise a few events.
      Console::WriteLine( "Waiting 30 seconds for console ctrl events..." );

      // The Object hr is not referred to again.
      // The garbage collector can detect that the object has no
      // more managed references and might clean it up here while
      // the unmanaged SetConsoleCtrlHandler method is still using it.
      // Force a garbage collection to demonstrate how the hr
      // object will be handled.
      GC::Collect();
      GC::WaitForPendingFinalizers();
      GC::Collect();
      Thread::Sleep( 30000 );

      // Display a message to the console when the unmanaged method
      // has finished its work.
      Console::WriteLine( "Finished!" );

      // Call GC::KeepAlive(hr) at this point to maintain a reference to hr.
      // This will prevent the garbage collector from collecting the
      // object during the execution of the SetConsoleCtrlHandler method.
      GC::KeepAlive( hr );
   }

};

int main()
{
   MyApp::Test();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

GC 类
GC 成员
System 命名空间


GC ..::.RegisterForFullGCNotification 方法

GC
.
.
::
.
RegisterForFullGCNotification 方法
GC 类

指定当条件支持完整垃圾回收以及回收完成时，应引发垃圾回收通知。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub RegisterForFullGCNotification ( _
    maxGenerationThreshold As Integer, _
    largeObjectHeapThreshold As Integer _
)
public static void RegisterForFullGCNotification(
    int maxGenerationThreshold,
    int largeObjectHeapThreshold
)
public:
static void RegisterForFullGCNotification(
    int maxGenerationThreshold,
    int largeObjectHeapThreshold
)
static member RegisterForFullGCNotification :
        maxGenerationThreshold:int *
        largeObjectHeapThreshold:int -> unit

参数

maxGenerationThreshold
类型： System Int32
一个介于 1 和 99 之间的数字，指定根据第 2 代中保留的对象，应何时引发通知。
largeObjectHeapThreshold
类型： System Int32
一个介于 1 和 99 之间的数字，指定根据大对象堆中分配的对象，应何时引发通知。
异常 | 条件
InvalidOperationException | 此成员在启用并发垃圾回收时不可用。有关如何禁用并发垃圾回收的信息，请参见 <gcConcurrent> 运行时设置。 此成员在启用并发垃圾回收时不可用。有关如何禁用并发垃圾回收的信息，请参见 <gcConcurrent> 运行时设置。
ArgumentOutOfRangeException | maxGenerationThreshold 或 largeObjectHeapThreshold 不在 1 和 99 之间。

如果您遇到公共语言运行时引发的完整垃圾回收会对应用程序性能产生不利影响的情况，则您可以确定运行时是否即将引发完整垃圾回收，然后在条件仍支持时，通过自行引发回收（使用 Collect 方法）来避开该回收。有关哪一内容表示完整垃圾回收的更多信息，请参见垃圾回收通知。 如果您遇到公共语言运行时引发的完整垃圾回收会对应用程序性能产生不利影响的情况，则您可以确定运行时是否即将引发完整垃圾回收，然后在条件仍支持时，通过自行引发回收（使用 Collect 方法）来避开该回收。有关哪一内容表示完整垃圾回收的更多信息，请参见垃圾回收通知。

在注册垃圾回收通知时，可以通过检查垃圾回收通知的状态，确定是否已引发表示临近的完整垃圾回收的事件。此模式与操作系统监视内存不足通知的方式类似。 在注册垃圾回收通知时，可以通过检查垃圾回收通知的状态，确定是否已引发表示临近的完整垃圾回收的事件。此模式与操作系统监视内存不足通知的方式类似。

使用以下准则来指定 maxGenerationThreshold 和 largeObjectHeapThreshold 参数：

  • 阈值越大，可能发生回收的时间就越晚，引发通知的时间就越早。

    阈值越大，运行时检查临近的回收的机会就越多。这将增加您收到通知的可能性。但是，不应将阈值设置得过高，因为那样会导致运行时需等待较长的时间才能引发下次回收。 阈值越大，运行时检查临近的回收的机会就越多。这将增加您收到通知的可能性。但是，不应将阈值设置得过高，因为那样会导致运行时需等待较长的时间才能引发下次回收。 阈值越大，运行时检查临近的回收的机会就越多。这将增加您收到通知的可能性。但是，不应将阈值设置得过高，因为那样会导致运行时需等待较长的时间才能引发下次回收。

    当您使用高阈值在收到通知时自行引发回收时，所回收的对象将比运行时的下次回收所回收的对象多。

  • 阈值越小，较早发生回收的可能性就越大，引发通知的时间就越晚。

下面的示例演示如何注册垃圾回收通知，以及如何启动线程来监视垃圾回收通知的状态。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。 下面的示例演示如何注册垃圾回收通知，以及如何启动线程来监视垃圾回收通知的状态。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。

    ' Variables for continual checking in the
    ' While loop in the WaitForFullGcProc method.
    Private Shared checkForNotify As Boolean = False

    ' Variable for suspending work
    ' (such as servicing allocated server requests)
    ' after a notification is received and then
    ' resuming allocation after inducing a garbage collection.
    Private Shared bAllocate As Boolean = False

    ' Variable for ending the example.
    Private Shared finalExit As Boolean = False

    ' Collection for objects that
    ' simulate the server request workload.
    Private Shared load As New List(Of Byte())

    Public Shared Sub Main(ByVal args() As String)
        Try
            ' Register for a notification.
            GC.RegisterForFullGCNotification(10, 10)
            Console.WriteLine("Registered for GC notification.")

            bAllocate = True
            checkForNotify = True

            ' Start a thread using WaitForFullGCProc.
            Dim thWaitForFullGC As Thread = _
                New Thread(New ThreadStart(AddressOf WaitForFullGCProc))
            thWaitForFullGC.Start()

            ' While the thread is checking for notifications in
            ' WaitForFullGCProc, create objects to simulate a server workload.
            Try
                Dim lastCollCount As Integer = 0
                Dim newCollCount As Integer = 0

                While (True)
                    If bAllocate = True Then

                        load.Add(New Byte(1000) {})
                        newCollCount = GC.CollectionCount(2)
                        If (newCollCount <> lastCollCount) Then
                            ' Show collection count when it increases:
                            Console.WriteLine("Gen 2 collection count: {0}", _
                                              GC.CollectionCount(2).ToString)
                            lastCollCount = newCollCount
                        End If

                        ' For ending the example (arbitrary).
                        If newCollCount = 500 Then
                            finalExit = True
                            checkForNotify = False
                            bAllocate = False
                            Exit While
                        End If

                    End If
                End While

            Catch outofMem As OutOfMemoryException
                Console.WriteLine("Out of memory.")
            End Try

            finalExit = True
            checkForNotify = False
            GC.CancelFullGCNotification()

        Catch invalidOp As InvalidOperationException
            Console.WriteLine("GC Notifications are not supported while concurrent GC is enabled." _
                              & vbLf & invalidOp.Message)
        End Try
    End Sub

// Variable for continual checking in the
// While loop in the WaitForFullGCProc method.
static bool checkForNotify = false;

// Variable for suspending work
// (such servicing allocated server requests)
// after a notification is received and then
// resuming allocation after inducing a garbage collection.
static bool bAllocate = false;

// Variable for ending the example.
static bool finalExit = false;

// Collection for objects that
// simulate the server request workload.
static List<byte[]> load = new List<byte[]>();

public static void Main(string[] args)
{
    try
    {
        // Register for a notification.
        GC.RegisterForFullGCNotification(10, 10);
        Console.WriteLine("Registered for GC notification.");

        checkForNotify = true;
        bAllocate = true;

        // Start a thread using WaitForFullGCProc.
        Thread thWaitForFullGC = new Thread(new ThreadStart(WaitForFullGCProc));
        thWaitForFullGC.Start();

        // While the thread is checking for notifications in
        // WaitForFullGCProc, create objects to simulate a server workload.
        try
        {

            int lastCollCount = 0;
            int newCollCount = 0;

            while (true)
            {
                if (bAllocate)
                {
                    load.Add(new byte[1000]);
                    newCollCount = GC.CollectionCount(2);
                    if (newCollCount != lastCollCount)
                    {
                        // Show collection count when it increases:
                        Console.WriteLine("Gen 2 collection count: {0}", GC.CollectionCount(2).ToString());
                        lastCollCount = newCollCount;
                    }

                    // For ending the example (arbitrary).
                    if (newCollCount == 500)
                    {
                        finalExit = true;
                        checkForNotify = false;
                        break;
                    }
                }
            }

        }
        catch (OutOfMemoryException)
        {
            Console.WriteLine("Out of memory.");
        }

        finalExit = true;
        checkForNotify = false;
        GC.CancelFullGCNotification();

    }
    catch (InvalidOperationException invalidOp)
    {

        Console.WriteLine("GC Notifications are not supported while concurrent GC is enabled.\n"
            + invalidOp.Message);
    }
}
  • LinkDemand

    表示完全信任直接调用方。此成员不能由部分受信任的代码使用。 表示完全信任直接调用方。此成员不能由部分受信任的代码使用。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
System 命名空间

其他资源

垃圾回收通知


GC ..::.RemoveMemoryPressure 方法

GC
.
.
::
.
RemoveMemoryPressure 方法
GC 类

通知运行时已释放非托管内存，在安排垃圾回收时不需要再考虑它。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub RemoveMemoryPressure ( _
    bytesAllocated As Long _
)
public static void RemoveMemoryPressure(
    long bytesAllocated
)
public:
static void RemoveMemoryPressure(
    long long bytesAllocated
)
static member RemoveMemoryPressure :
        bytesAllocated:int64 -> unit

参数

bytesAllocated
类型： System Int64
已释放的非托管内存量。
异常 | 条件
ArgumentOutOfRangeException | bytesAllocated 小于或等于零。 - 或 - 在 32 位的计算机上，bytesAllocated 大于 Int32..::.MaxValue。

在确定何时安排垃圾回收时，运行时将考虑分配多少托管内存。如果一个小的托管对象分配了大量非托管内存，运行时将只考虑托管内存，从而低估安排垃圾回收的紧迫性。AddMemoryPressure 方法会将这一对系统内存的额外压力通知运行时，而 RemoveMemoryPressure 方法则通知运行时已释放额外压力。 在确定何时安排垃圾回收时，运行时将考虑分配多少托管内存。如果一个小的托管对象分配了大量非托管内存，运行时将只考虑托管内存，从而低估安排垃圾回收的紧迫性。AddMemoryPressure 方法会将这一对系统内存的额外压力通知运行时，而 RemoveMemoryPressure 方法则通知运行时已释放额外压力。 在确定何时安排垃圾回收时，运行时将考虑分配多少托管内存。如果一个小的托管对象分配了大量非托管内存，运行时将只考虑托管内存，从而低估安排垃圾回收的紧迫性。AddMemoryPressure 方法会将这一对系统内存的额外压力通知运行时，而 RemoveMemoryPressure 方法则通知运行时已释放额外压力。

在最简单的用法模式下，托管对象将在构造函数中分配非托管内存，而在 Dispose 或 Finalize 方法中释放内存。在分配非托管内存之后，将调用 AddMemoryPressure 方法，而在释放了非托管内存之后，将调用 RemoveMemoryPressure 方法。 在最简单的用法模式下，托管对象将在构造函数中分配非托管内存，而在 Dispose 或 Finalize 方法中释放内存。在分配非托管内存之后，将调用 AddMemoryPressure 方法，而在释放了非托管内存之后，将调用 RemoveMemoryPressure 方法。

在复杂一些的情形中，非托管内存的分配在托管对象的生存期内会出现非常大的变化，此时您可以调用 AddMemoryPressure 和 RemoveMemoryPressure 方法将这些增量更改传递到运行时。

警告说明 警告

必须确保您移除的压力量与您添加的压力量完全相同。如果不这样做会对长时间运行的应用程序的系统性能产生不利影响。 必须确保您移除的压力量与您添加的压力量完全相同。如果不这样做会对长时间运行的应用程序的系统性能产生不利影响。
  • SecurityPermission

    表示在操作垃圾回收优先级时调用非托管代码的能力。关联的枚举：UnmanagedCode 表示在操作垃圾回收优先级时调用非托管代码的能力。关联的枚举：UnmanagedCode

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
System 命名空间


GC ..::.ReRegisterForFinalize 方法

GC
.
.
::
.
ReRegisterForFinalize 方法
GC 类

请求系统调用指定对象的终结器，此前已为该对象调用 SuppressFinalize。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub ReRegisterForFinalize ( _
    obj As Object _
)
public static void ReRegisterForFinalize(
    Object obj
)
public:
static void ReRegisterForFinalize(
    Object^ obj
)
static member ReRegisterForFinalize :
        obj:Object -> unit

参数

obj
类型： System Object
必须为其调用终结器的对象。
异常 | 条件
ArgumentNullException | obj 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

ReRegisterForFinalize 方法将 obj 参数添加到在垃圾回收器释放对象前会请求终止的对象列表中。obj 参数必须是此方法的调用方。 ReRegisterForFinalize 方法将 obj 参数添加到在垃圾回收器释放对象前会请求终止的对象列表中。obj 参数必须是此方法的调用方。

调用 ReRegisterForFinalize 方法并不保证垃圾回收器将调用对象的终结器。

默认情况下，实现终结器的所有对象都会被添加到需要终止的对象列表中；但是，对象可能已经完成，或已通过调用 SuppressFinalize 方法禁用了终止。

终结器可以使用此方法使自己或引用的对象重新起用。

下面的示例演示如何使用 ReRegisterForFinalize 方法在垃圾回收后再次完成对象。

Imports System

Namespace ReRegisterForFinalizeExample
    Class MyMainClass
        Shared Sub Main()
            'Create a MyFinalizeObject.
            Dim mfo As New MyFinalizeObject()

            'Release the reference to mfo.
            mfo = Nothing

            'Force a garbage collection.
            GC.Collect()

            'At this point mfo will have gone through the first Finalize.
            'There should now be a reference to mfo in the static
            'MyFinalizeObject.currentInstance field.  Setting this value
            'to null and forcing another garbage collection will now
            'cause the object to Finalize permanently.
            MyFinalizeObject.currentInstance = Nothing
            GC.Collect()
        End Sub
    End Class

    Class MyFinalizeObject
        Public Shared currentInstance As MyFinalizeObject = Nothing
        Private hasFinalized As Boolean = False

        Protected Overrides Sub Finalize()
            If hasFinalized = False Then
                Console.WriteLine("First finalization")

                'Put this object back into a root by creating
                'a reference to it.
                MyFinalizeObject.currentInstance = Me

                'Indicate that this instance has finalized once.
                hasFinalized = True

                'Place a reference to this object back in the
                'finalization queue.
                GC.ReRegisterForFinalize(Me)
            Else
                Console.WriteLine("Second finalization")
            End If
            MyBase.Finalize()
        End Sub
    End Class
End Namespace

using System;

namespace ReRegisterForFinalizeExample
{
    class MyMainClass
    {
        static void Main()
        {
            // Create a MyFinalizeObject.
            MyFinalizeObject mfo = new MyFinalizeObject();

            // Release the reference to mfo.
            mfo = null;

            // Force a garbage collection.
            GC.Collect();

            // At this point mfo will have gone through the first Finalize.
            // There should now be a reference to mfo in the static
            // MyFinalizeObject.currentInstance field.  Setting this value
            // to null and forcing another garbage collection will now
            // cause the object to Finalize permanently.
            MyFinalizeObject.currentInstance = null;
            GC.Collect();
        }
    }

    class MyFinalizeObject
    {
        public static MyFinalizeObject currentInstance = null;
        private bool hasFinalized = false;

        ~MyFinalizeObject()
        {
            if(hasFinalized == false)
            {
                Console.WriteLine("First finalization");

                // Put this object back into a root by creating
                // a reference to it.
                MyFinalizeObject.currentInstance = this;

                // Indicate that this instance has finalized once.
                hasFinalized = true;

                // Place a reference to this object back in the
                // finalization queue.
                GC.ReRegisterForFinalize(this);
            }
            else
            {
                Console.WriteLine("Second finalization");
            }
        }
    }
}

using namespace System;
ref class MyFinalizeObject
{
public:
   static MyFinalizeObject^ currentInstance = nullptr;

private:
   bool hasFinalized;

public:
   MyFinalizeObject()
   {
      hasFinalized = false;
   }

   ~MyFinalizeObject()
   {
      if ( hasFinalized == false )
      {
         Console::WriteLine( "First finalization" );

         // Put this object back into a root by creating
         // a reference to it.
         MyFinalizeObject::currentInstance = this;

         // Indicate that this instance has finalized once.
         hasFinalized = true;

         // Place a reference to this object back in the
         // finalization queue.
         GC::ReRegisterForFinalize( this );
      }
      else
      {
         Console::WriteLine( "Second finalization" );
      }
   }

};

int main()
{

   // Create a MyFinalizeObject.
   MyFinalizeObject^ mfo = gcnew MyFinalizeObject;

   // Release the reference to mfo.
   mfo = nullptr;

   // Force a garbage collection.
   GC::Collect();

   // At this point mfo will have gone through the first Finalize.
   // There should now be a reference to mfo in the static
   // MyFinalizeObject::currentInstance field.  Setting this value
   // to 0 and forcing another garbage collection will now
   // cause the object to Finalize permanently.
   MyFinalizeObject::currentInstance = nullptr;
   GC::Collect();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

GC 类
GC 成员
System 命名空间
SuppressFinalize


GC ..::.SuppressFinalize 方法

GC
.
.
::
.
SuppressFinalize 方法
GC 类

请求系统不要调用指定对象的终结器。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub SuppressFinalize ( _
    obj As Object _
)
public static void SuppressFinalize(
    Object obj
)
public:
static void SuppressFinalize(
    Object^ obj
)
static member SuppressFinalize :
        obj:Object -> unit

参数

obj
类型： System Object
不得为其调用终结器的对象。
异常 | 条件
ArgumentNullException | obj 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

该方法在对象头中设置一个位，系统在调用终结器时将检查这个位。obj 参数应为此方法的调用方。 该方法在对象头中设置一个位，系统在调用终结器时将检查这个位。obj 参数应为此方法的调用方。

实现 IDisposable 接口的对象可以从 IDisposable..::.Dispose 方法调用此方法，以防止垃圾回收器对不需要终止的对象调用 Object..::.Finalize。

下面的示例演示如何使用资源类中的 SuppressFinalize 方法阻止调用多余的垃圾回收。

Imports System
Imports System.ComponentModel

' The following example demonstrates how to use the
' GC.SuppressFinalize method in a resource class to prevent
' the clean-up code for the object from being called twice.
Public Class DisposeExample

   ' A class that implements IDisposable.
   ' By implementing IDisposable, you are announcing that
   ' instances of this type allocate scarce resources.
   Public Class MyResource
      Implements IDisposable
      ' Pointer to an external unmanaged resource.
      Private handle As IntPtr
      ' Other managed resource this class uses.
      Private component As Component
      ' Track whether Dispose has been called.
      Private disposed As Boolean = False

      ' The class constructor initializes the handle and component.
      Public Sub New(ByVal handle As IntPtr)
         Me.handle = handle
      End Sub

      ' Implement IDisposable.
      ' Do not make this method virtual.
      ' A derived class should not be able to override this method.
      Public Overloads Sub Dispose() Implements IDisposable.Dispose
         Dispose(True)
         ' This object will be cleaned up by the Dispose method.
         ' Therefore, you should call GC.SupressFinalize to
         ' take this object off the finalization queue
         ' and prevent finalization code for this object
         ' from executing a second time.
         GC.SuppressFinalize(Me)
      End Sub

      ' Dispose(bool disposing) executes in two distinct scenarios.
      ' If disposing equals true, the method has been called directly
      ' or indirectly by a user's code. Managed and unmanaged resources
      ' can be disposed.
      ' If disposing equals false, the method has been called by the
      ' runtime from inside the finalizer and you should not reference
      ' other objects. Only unmanaged resources can be disposed.
      Private Overloads Sub Dispose(ByVal disposing As Boolean)
         ' Check to see if Dispose has already been called.
         If Not Me.disposed Then
            ' If disposing equals true, dispose all managed
            ' and unmanaged resources.
            If disposing Then
               ' Dispose managed resources.
               component.Dispose()
            End If

            ' Call the appropriate methods to clean up
            ' unmanaged resources here.
            ' If disposing is false,
            ' only the following code is executed.
            CloseHandle(handle)
            handle = IntPtr.Zero
         End If
         disposed = True
      End Sub

      ' Use interop to call the method necessary
      ' to clean up the unmanaged resource.
      <System.Runtime.InteropServices.DllImport("Kernel32")> _
      Private Shared Function CloseHandle(ByVal handle As IntPtr) As [Boolean]
      End Function

      ' This finalizer will run only if the Dispose method
      ' does not get called.
      ' It gives your base class the opportunity to finalize.
      ' Do not provide finalize methods in types derived from this class.
      Protected Overrides Sub Finalize()
         ' Do not re-create Dispose clean-up code here.
         ' Calling Dispose(false) is optimal in terms of
         ' readability and maintainability.
         Dispose(False)
         MyBase.Finalize()
      End Sub
   End Class

Public Shared Sub Main()
   ' Insert code here to create
   ' and use a MyResource object.
End Sub
End Class

using System;
using System.ComponentModel;

// The following example demonstrates how to use the
// GC.SuppressFinalize method in a resource class to prevent
// the clean-up code for the object from being called twice.

public class DisposeExample
{
    // A class that implements IDisposable.
    // By implementing IDisposable, you are announcing that
    // instances of this type allocate scarce resources.
    public class MyResource: IDisposable
    {
        // Pointer to an external unmanaged resource.
        private IntPtr handle;
        // Other managed resource this class uses.
        private Component component = new Component();
        // Track whether Dispose has been called.
        private bool disposed = false;

        // The class constructor.
        public MyResource(IntPtr handle)
        {
            this.handle = handle;
        }

        // Implement IDisposable.
        // Do not make this method virtual.
        // A derived class should not be able to override this method.
        public void Dispose()
        {
            Dispose(true);
            // This object will be cleaned up by the Dispose method.
            // Therefore, you should call GC.SupressFinalize to
            // take this object off the finalization queue
            // and prevent finalization code for this object
            // from executing a second time.
            GC.SuppressFinalize(this);
        }

        // Dispose(bool disposing) executes in two distinct scenarios.
        // If disposing equals true, the method has been called directly
        // or indirectly by a user's code. Managed and unmanaged resources
        // can be disposed.
        // If disposing equals false, the method has been called by the
        // runtime from inside the finalizer and you should not reference
        // other objects. Only unmanaged resources can be disposed.
        private void Dispose(bool disposing)
        {
            // Check to see if Dispose has already been called.
            if(!this.disposed)
            {
                // If disposing equals true, dispose all managed
                // and unmanaged resources.
                if(disposing)
                {
                    // Dispose managed resources.
                    component.Dispose();
                }

                // Call the appropriate methods to clean up
                // unmanaged resources here.
                // If disposing is false,
                // only the following code is executed.
                CloseHandle(handle);
                handle = IntPtr.Zero;
            }
            disposed = true;
        }

        // Use interop to call the method necessary
        // to clean up the unmanaged resource.
        [System.Runtime.InteropServices.DllImport("Kernel32")]
        private extern static Boolean CloseHandle(IntPtr handle);

        // Use C# destructor syntax for finalization code.
        // This destructor will run only if the Dispose method
        // does not get called.
        // It gives your base class the opportunity to finalize.
        // Do not provide destructors in types derived from this class.
        ~MyResource()
        {
            // Do not re-create Dispose clean-up code here.
            // Calling Dispose(false) is optimal in terms of
            // readability and maintainability.
            Dispose(false);
        }
    }

    public static void Main()
    {
        // Insert code here to create
        // and use a MyResource object.
    }
}

#using <System.dll>
#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::ComponentModel;
using namespace System::Windows::Forms;

// The following example demonstrates how to use the
// GC::SuppressFinalize method to prevent finalization of an
// object that has been disposed. For C++, the call to
// GC::SuppressFinalize is not explicit; it is emitted by the
// compiler, in the Dispose() method. The comments in this code
// example explain where that call occurs and its part in the
// overall Dispose/Finalize pattern.
//
// The code example demonstrates how to create a class that
// implements the IDisposable interface and the IDisposable.Dispose
// method. By implementing IDisposable, you are announcing that
// instances of this type allocate scarce resources, which can be
// released by calling Dispose() when the programmer is finished
// with the object or which will be released when the finalizer
// is executed.
//
// Note that for This code example
//
public ref class MyResource: public IDisposable
{
private:

   // Pointer to an external unmanaged resource.
   IntPtr handle;

   // A managed resource this class uses.
   Component^ component;

   // Track whether Dispose has been called.
   bool disposed;

public:
   // The class constructor.
   MyResource( IntPtr handle, Component^ component )
   {
      this->handle = handle;
      this->component = component;
      disposed = false;
   }

   // In managed code, the destructor contains code to clean up managed
   // resources. This method is called by Dispose(bool disposing),
   // which the C++ compiler emits for you when you implement the
   // destructor; it is only called if disposing == true -- that is,
   // if the user has called Dispose(). (In C++, the user calls
   // ~MyResource(), which the compiler emits as a call to Dispose().)
   // The emitted Dispose() method calls GC::SuppressFinalize( this )
   // for you, so there is no need to call it here.
   ~MyResource()
   {
      // Dispose of managed resources.
      component->~Component();

      disposed = true;
   }

   // Use interop to call the method necessary to clean up the
   // unmanaged resource.
   //
   [System::Runtime::InteropServices::DllImport("Kernel32")]
   static Boolean CloseHandle( IntPtr handle );

   // Note: The Dispose(bool disposing) method emitted by the
   // compiler executes in two distinct scenarios. If disposing ==
   // true, the method has been called directly or indirectly by a
   // user's code. Managed and unmanaged resources can be disposed,
   // so both ~MyResource() and !MyResource() are called.
   //
   // If disposing equals false, the method has been called by the
   // runtime from inside the finalizer and you should not reference
   // other objects. Only unmanaged resources can be disposed, so
   // only !MyResource() is called.

   // This destructor runs when the Dispose method gets called
   // explicitly, and also when (and if) the Finalizer is run.
   !MyResource()
   {
      // Call the appropriate methods to clean up unmanaged
      // resources here. If disposing is false when Dispose(bool,
      // disposing) is called, only the following code is executed.
      CloseHandle( handle );
      handle = IntPtr::Zero;
   }

};

void main()
{
   // Insert code here to create and use the MyResource object.
   MyResource^ mr = gcnew MyResource((IntPtr) 42, (Component^) gcnew Button());
   mr->~MyResource();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

GC 类
GC 成员
System 命名空间
ReRegisterForFinalize


GC ..::.WaitForFullGCApproach 方法

GC
.
.
::
.
WaitForFullGCApproach 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GC 类

返回已注册通知的状态，用于确定公共语言运行时是否即将引发完整垃圾回收。

名称 说明
页首

参考

GC 类
GC 成员
System 命名空间


GC ..::.WaitForFullGCApproach 方法

GC
.
.
::
.
WaitForFullGCApproach 方法
GC 类

返回已注册通知的状态，用于确定公共语言运行时是否即将引发完整垃圾回收。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function WaitForFullGCApproach As GCNotificationStatus
public static GCNotificationStatus WaitForFullGCApproach()
public:
static GCNotificationStatus WaitForFullGCApproach()
static member WaitForFullGCApproach : unit -> GCNotificationStatus

返回值

类型： System GCNotificationStatus
已注册垃圾回收通知的状态。

使用此方法返回的 GCNotificationStatus 枚举，确定使用 RegisterForFullGCNotification 方法注册的当前垃圾回收通知的状态。还可以使用 WaitForFullGCComplete 方法来确定完整垃圾回收是否已完成。 使用此方法返回的 GCNotificationStatus 枚举，确定使用 RegisterForFullGCNotification 方法注册的当前垃圾回收通知的状态。还可以使用 WaitForFullGCComplete 方法来确定完整垃圾回收是否已完成。

当枚举返回 Succeeded 时，您可以执行一些任务，例如：阻止分配其他对象以及使用 Collect 方法自行引发回收。请注意，通知不保证将发生完整垃圾回收，只保证条件已达到阈值，支持发生完整垃圾回收。 当枚举返回 Succeeded 时，您可以执行一些任务，例如：阻止分配其他对象以及使用 Collect 方法自行引发回收。请注意，通知不保证将发生完整垃圾回收，只保证条件已达到阈值，支持发生完整垃圾回收。

此方法会无限期等待获取垃圾回收通知。如果要指定此方法在无法获取通知时返回的超时期限，请使用 GC..::.WaitForFullGCApproach(Int32) 方法重载。如果在调用此方法时未指定超时期限，则可以在等待时间过长时调用 CancelFullGCNotification 方法。
此方法会无限期等待获取垃圾回收通知。如果要指定此方法在无法获取通知时返回的超时期限，请使用 GC..::.WaitForFullGCApproach(Int32) 方法重载。如果在调用此方法时未指定超时期限，则可以在等待时间过长时调用 CancelFullGCNotification 方法。
此方法会无限期等待获取垃圾回收通知。如果要指定此方法在无法获取通知时返回的超时期限，请使用 GC..::.WaitForFullGCApproach(Int32) 方法重载。如果在调用此方法时未指定超时期限，则可以在等待时间过长时调用 CancelFullGCNotification 方法。

应在此方法之后调用 WaitForFullGCComplete 方法，以确保已进行过完整垃圾回收。单独调用此方法会导致不确定结果。 应在此方法之后调用 WaitForFullGCComplete 方法，以确保已进行过完整垃圾回收。单独调用此方法会导致不确定结果。

下面的示例演示如何使用此方法来确定是否已临近完整垃圾回收。每当通知的状态为 Succeeded 时，都会调用用户方法 OnFullGCApproachNotify，以执行响应临近的回收的操作。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。 下面的示例演示如何使用此方法来确定是否已临近完整垃圾回收。每当通知的状态为 Succeeded 时，都会调用用户方法 OnFullGCApproachNotify，以执行响应临近的回收的操作。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。 下面的示例演示如何使用此方法来确定是否已临近完整垃圾回收。每当通知的状态为 Succeeded 时，都会调用用户方法 OnFullGCApproachNotify，以执行响应临近的回收的操作。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。

' Check for a notification of an approaching collection.
Dim s As GCNotificationStatus = GC.WaitForFullGCApproach
If (s = GCNotificationStatus.Succeeded) Then
    Console.WriteLine("GC Notifiction raised.")
    OnFullGCApproachNotify()
ElseIf (s = GCNotificationStatus.Canceled) Then
    Console.WriteLine("GC Notification cancelled.")
    Exit While
Else
    ' This can occur if a timeout period
    ' is specified for WaitForFullGCApproach(Timeout)
    ' or WaitForFullGCComplete(Timeout)
    ' and the time out period has elapsed.
    Console.WriteLine("GC Notification not applicable.")
    Exit While
End If

// Check for a notification of an approaching collection.
GCNotificationStatus s = GC.WaitForFullGCApproach();
if (s == GCNotificationStatus.Succeeded)
{
    Console.WriteLine("GC Notifiction raised.");
    OnFullGCApproachNotify();
}
else if (s == GCNotificationStatus.Canceled)
{
    Console.WriteLine("GC Notification cancelled.");
    break;
}
else
{
    // This can occur if a timeout period
    // is specified for WaitForFullGCApproach(Timeout)
    // or WaitForFullGCComplete(Timeout)
    // and the time out period has elapsed.
    Console.WriteLine("GC Notification not applicable.");
    break;
}
  • LinkDemand

    表示完全信任直接调用方。此成员不能由部分受信任的代码使用。 表示完全信任直接调用方。此成员不能由部分受信任的代码使用。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
WaitForFullGCApproach 重载
System 命名空间

其他资源

垃圾回收通知


GC ..::.WaitForFullGCApproach 方法 (Int32)

GC
.
.
::
.
WaitForFullGCApproach 方法 (Int32)
GC 类

在指定的超时期限内，返回已注册通知的状态，用于确定公共语言运行时是否即将引发完整垃圾回收。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function WaitForFullGCApproach ( _
    millisecondsTimeout As Integer _
) As GCNotificationStatus
public static GCNotificationStatus WaitForFullGCApproach(
    int millisecondsTimeout
)
public:
static GCNotificationStatus WaitForFullGCApproach(
    int millisecondsTimeout
)
static member WaitForFullGCApproach :
        millisecondsTimeout:int -> GCNotificationStatus

参数

millisecondsTimeout
类型： System Int32
在获取通知状态前等待的时间长度。指定 -1 表示无限期等待。 在获取通知状态前等待的时间长度。指定 -1 表示无限期等待。

返回值

类型： System GCNotificationStatus
已注册垃圾回收通知的状态。
异常 | 条件
ArgumentOutOfRangeException | millisecondsTimeout 必须为非负数或小于或等于 MaxValue 或 -1。

使用此方法返回的 GCNotificationStatus 枚举，确定使用 RegisterForFullGCNotification 方法注册的当前垃圾回收通知的状态。还可以使用 WaitForFullGCComplete 方法来确定完整垃圾回收是否已完成。 使用此方法返回的 GCNotificationStatus 枚举，确定使用 RegisterForFullGCNotification 方法注册的当前垃圾回收通知的状态。还可以使用 WaitForFullGCComplete 方法来确定完整垃圾回收是否已完成。

请注意，每当获取了垃圾回收通知状态时，此方法都会立即返回，无论 millisecondsTimeout 指定的值是什么。如果在 millisecondsTimeout 超时前未获取垃圾回收通知状态，则此方法返回 NotApplicable。 请注意，每当获取了垃圾回收通知状态时，此方法都会立即返回，无论 millisecondsTimeout 指定的值是什么。如果在 millisecondsTimeout 超时前未获取垃圾回收通知状态，则此方法返回 NotApplicable。

当枚举返回 Succeeded 时，您可以执行一些任务，例如：阻止分配其他对象以及使用 Collect 方法自行引发回收。请注意，通知不保证将发生完整垃圾回收，只保证条件已达到阈值，支持发生完整垃圾回收。 当枚举返回 Succeeded 时，您可以执行一些任务，例如：阻止分配其他对象以及使用 Collect 方法自行引发回收。请注意，通知不保证将发生完整垃圾回收，只保证条件已达到阈值，支持发生完整垃圾回收。

无法等待超时期限时，可以调用 CancelFullGCNotification 方法。

应在此方法之后调用 WaitForFullGCComplete 方法，以确保已进行过完整垃圾回收。单独调用此方法会导致不确定结果。 应在此方法之后调用 WaitForFullGCComplete 方法，以确保已进行过完整垃圾回收。单独调用此方法会导致不确定结果。

  • LinkDemand

    表示完全信任直接调用方。此成员不能由部分受信任的代码使用。 表示完全信任直接调用方。此成员不能由部分受信任的代码使用。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
WaitForFullGCApproach 重载
System 命名空间

其他资源

垃圾回收通知


GC ..::.WaitForFullGCComplete 方法

GC
.
.
::
.
WaitForFullGCComplete 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GC 类

返回已注册通知的状态，用于确定公共语言运行时引发的完整垃圾回收是否已完成。

名称 说明
页首

参考

GC 类
GC 成员
System 命名空间


GC ..::.WaitForFullGCComplete 方法

GC
.
.
::
.
WaitForFullGCComplete 方法
GC 类

返回已注册通知的状态，用于确定公共语言运行时引发的完整垃圾回收是否已完成。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function WaitForFullGCComplete As GCNotificationStatus
public static GCNotificationStatus WaitForFullGCComplete()
public:
static GCNotificationStatus WaitForFullGCComplete()
static member WaitForFullGCComplete : unit -> GCNotificationStatus

返回值

类型： System GCNotificationStatus
已注册垃圾回收通知的状态。

使用此方法返回的 GCNotificationStatus 枚举，确定使用 RegisterForFullGCNotification 方法注册的当前垃圾回收通知的状态。还可以使用 WaitForFullGCApproach 方法来确定完整垃圾回收是否已临近。 使用此方法返回的 GCNotificationStatus 枚举，确定使用 RegisterForFullGCNotification 方法注册的当前垃圾回收通知的状态。还可以使用 WaitForFullGCApproach 方法来确定完整垃圾回收是否已临近。

枚举返回 Succeeded 时，您可以执行一些任务，如继续工作和通过 CollectionCount 属性获取回收计数。

此方法会无限期等待获取垃圾回收通知。如果要指定此方法在无法获取通知时返回的超时期限，请使用 GC..::.WaitForFullGCApproach(Int32) 方法重载。如果在调用此方法时未指定超时期限，则可以在等待时间过长时调用 CancelFullGCNotification 方法。
此方法会无限期等待获取垃圾回收通知。如果要指定此方法在无法获取通知时返回的超时期限，请使用 GC..::.WaitForFullGCApproach(Int32) 方法重载。如果在调用此方法时未指定超时期限，则可以在等待时间过长时调用 CancelFullGCNotification 方法。
此方法会无限期等待获取垃圾回收通知。如果要指定此方法在无法获取通知时返回的超时期限，请使用 GC..::.WaitForFullGCApproach(Int32) 方法重载。如果在调用此方法时未指定超时期限，则可以在等待时间过长时调用 CancelFullGCNotification 方法。

在调用此方法之前应先调用 WaitForFullGCApproach 方法，以确保已进行过完整垃圾回收。单独调用此方法会产生不确定结果。 在调用此方法之前应先调用 WaitForFullGCApproach 方法，以确保已进行过完整垃圾回收。单独调用此方法会产生不确定结果。

下面的示例演示如何使用此方法来确定完整垃圾回收是否已完成。每当通知的状态为 Succeeded 时，都会调用用户方法 OnFullGCCompletedNotify，以执行响应已完成的回收的操作。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。 下面的示例演示如何使用此方法来确定完整垃圾回收是否已完成。每当通知的状态为 Succeeded 时，都会调用用户方法 OnFullGCCompletedNotify，以执行响应已完成的回收的操作。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。 下面的示例演示如何使用此方法来确定完整垃圾回收是否已完成。每当通知的状态为 Succeeded 时，都会调用用户方法 OnFullGCCompletedNotify，以执行响应已完成的回收的操作。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。

' Check for a notification of a completed collection.
s = GC.WaitForFullGCComplete
If (s = GCNotificationStatus.Succeeded) Then
    Console.WriteLine("GC Notifiction raised.")
    OnFullGCCompleteEndNotify()
ElseIf (s = GCNotificationStatus.Canceled) Then
    Console.WriteLine("GC Notification cancelled.")
    Exit While
Else
    ' Could be a time out.
    Console.WriteLine("GC Notification not applicable.")
    Exit While
End If

// Check for a notification of a completed collection.
s = GC.WaitForFullGCComplete();
if (s == GCNotificationStatus.Succeeded)
{
    Console.WriteLine("GC Notifiction raised.");
    OnFullGCCompleteEndNotify();
}
else if (s == GCNotificationStatus.Canceled)
{
    Console.WriteLine("GC Notification cancelled.");
    break;
}
else
{
    // Could be a time out.
    Console.WriteLine("GC Notification not applicable.");
    break;
}
  • LinkDemand

    表示完全信任直接调用方。此成员不能由部分受信任的代码使用。 表示完全信任直接调用方。此成员不能由部分受信任的代码使用。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
WaitForFullGCComplete 重载
System 命名空间

其他资源

垃圾回收通知


GC ..::.WaitForFullGCComplete 方法 (Int32)

GC
.
.
::
.
WaitForFullGCComplete 方法 (Int32)
GC 类

在指定的超时期限内，返回已注册通知的状态，用于确定公共语言运行时引发的完整垃圾回收是否已完成。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function WaitForFullGCComplete ( _
    millisecondsTimeout As Integer _
) As GCNotificationStatus
public static GCNotificationStatus WaitForFullGCComplete(
    int millisecondsTimeout
)
public:
static GCNotificationStatus WaitForFullGCComplete(
    int millisecondsTimeout
)
static member WaitForFullGCComplete :
        millisecondsTimeout:int -> GCNotificationStatus

参数

millisecondsTimeout
类型： System Int32
在获取通知状态前等待的时间长度。指定 -1 表示无限期等待。 在获取通知状态前等待的时间长度。指定 -1 表示无限期等待。

返回值

类型： System GCNotificationStatus
已注册垃圾回收通知的状态。
异常 | 条件
InvalidOperationException | millisecondsTimeout 必须为非负数或小于或等于 MaxValue 或 -1。

使用此方法返回的 GCNotificationStatus 枚举，确定使用 RegisterForFullGCNotification 方法注册的当前垃圾回收通知的状态。还可以使用 WaitForFullGCApproach 方法来确定完整垃圾回收是否已临近。 使用此方法返回的 GCNotificationStatus 枚举，确定使用 RegisterForFullGCNotification 方法注册的当前垃圾回收通知的状态。还可以使用 WaitForFullGCApproach 方法来确定完整垃圾回收是否已临近。

请注意，每当获取了垃圾回收通知状态时，此方法都会立即返回，无论 millisecondsTimeout 指定的值是什么。如果在 millisecondsTimeout 超时前未获取垃圾回收通知状态，则此方法返回 NotApplicable。 请注意，每当获取了垃圾回收通知状态时，此方法都会立即返回，无论 millisecondsTimeout 指定的值是什么。如果在 millisecondsTimeout 超时前未获取垃圾回收通知状态，则此方法返回 NotApplicable。

枚举返回 Succeeded 时，您可以执行一些任务，如继续工作和通过 CollectionCount 属性获取回收计数。

无法等待超时期限时，可以调用 CancelFullGCNotification 方法。

在调用此方法之前应先调用 WaitForFullGCApproach 方法，以确保已进行过完整垃圾回收。单独调用此方法会产生不确定结果。 在调用此方法之前应先调用 WaitForFullGCApproach 方法，以确保已进行过完整垃圾回收。单独调用此方法会产生不确定结果。

  • LinkDemand

    表示完全信任直接调用方。此成员不能由部分受信任的代码使用。 表示完全信任直接调用方。此成员不能由部分受信任的代码使用。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

GC 类
GC 成员
WaitForFullGCComplete 重载
System 命名空间

其他资源

垃圾回收通知


GC ..::.WaitForPendingFinalizers 方法

GC
.
.
::
.
WaitForPendingFinalizers 方法
GC 类

挂起当前线程，直到处理终结器队列的线程清空该队列为止。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub WaitForPendingFinalizers
public static void WaitForPendingFinalizers()
public:
static void WaitForPendingFinalizers()
static member WaitForPendingFinalizers : unit -> unit

当垃圾回收器找到可以回收的对象时，它会检查每个对象以确定对象的终止要求。如果对象实现终结器，并且尚未通过调用 SuppressFinalize 禁用终止，则会将该对象置于标记为准备终止的对象的列表中。垃圾回收器将为此列表中的对象调用 Finalize 方法，并从该列表中移除这些项。此方法将一直阻止，直到所有终结器均运行结束为止。 当垃圾回收器找到可以回收的对象时，它会检查每个对象以确定对象的终止要求。如果对象实现终结器，并且尚未通过调用 SuppressFinalize 禁用终止，则会将该对象置于标记为准备终止的对象的列表中。垃圾回收器将为此列表中的对象调用 Finalize 方法，并从该列表中移除这些项。此方法将一直阻止，直到所有终结器均运行结束为止。 当垃圾回收器找到可以回收的对象时，它会检查每个对象以确定对象的终止要求。如果对象实现终结器，并且尚未通过调用 SuppressFinalize 禁用终止，则会将该对象置于标记为准备终止的对象的列表中。垃圾回收器将为此列表中的对象调用 Finalize 方法，并从该列表中移除这些项。此方法将一直阻止，直到所有终结器均运行结束为止。 当垃圾回收器找到可以回收的对象时，它会检查每个对象以确定对象的终止要求。如果对象实现终结器，并且尚未通过调用 SuppressFinalize 禁用终止，则会将该对象置于标记为准备终止的对象的列表中。垃圾回收器将为此列表中的对象调用 Finalize 方法，并从该列表中移除这些项。此方法将一直阻止，直到所有终结器均运行结束为止。

未指定运行终结器的线程，因此不能保证此方法将会终止。然而，在 WaitForPendingFinalizers 方法正在执行时，此线程可以由另一个线程中断。例如，可以启动另一个线程，该线程在等待一段时间后，如果此线程仍然挂起，则中断此线程。 未指定运行终结器的线程，因此不能保证此方法将会终止。然而，在 WaitForPendingFinalizers 方法正在执行时，此线程可以由另一个线程中断。例如，可以启动另一个线程，该线程在等待一段时间后，如果此线程仍然挂起，则中断此线程。 未指定运行终结器的线程，因此不能保证此方法将会终止。然而，在 WaitForPendingFinalizers 方法正在执行时，此线程可以由另一个线程中断。例如，可以启动另一个线程，该线程在等待一段时间后，如果此线程仍然挂起，则中断此线程。

下面的示例演示如何使用 WaitForPendingFinalizers 方法挂起当前线程，直到所有回收的对象终止。

Imports System

Namespace WaitForPendingFinalizersExample
   Class MyWaitForPendingFinalizersClass

    ' You can increase this number to fill up more memory.
      Private Const numMfos As Integer = 1000
      ' You can increase this number to cause more
      ' post-finalization work to be done.
      Private Const maxIterations As Integer = 100

      Overloads Shared Sub Main()
         Dim mfo As MyFinalizeObject = Nothing

         ' Create and release a large number of objects
         ' that require finalization.
         Dim j As Integer
         For j = 0 To numMfos - 1
            mfo = New MyFinalizeObject()
         Next j

         'Release the last object created in the loop.
         mfo = Nothing

         'Force garbage collection.
         GC.Collect()

         ' Wait for all finalizers to complete before continuing.
         ' Without this call to GC.WaitForPendingFinalizers,
         ' the worker loop below might execute at the same time
         ' as the finalizers.
         ' With this call, the worker loop executes only after
         ' all finalizers have been called.
         GC.WaitForPendingFinalizers()

         ' Worker loop to perform post-finalization code.
         Dim i As Integer
         For i = 0 To maxIterations - 1
            Console.WriteLine("Doing some post-finalize work")
         Next i
      End Sub
   End Class

   Class MyFinalizeObject
      ' Make this number very large to cause the finalizer to
      ' do more work.
      Private maxIterations As Integer = 10000

      Protected Overrides Sub Finalize()
         Console.WriteLine("Finalizing a MyFinalizeObject")

         ' Do some work.
         Dim i As Integer
         For i = 0 To maxIterations - 1
            ' This method performs no operation on i, but prevents
            ' the JIT compiler from optimizing away the code inside
            ' the loop.
            GC.KeepAlive(i)
         Next i
         MyBase.Finalize()
      End Sub
   End Class
End Namespace

using System;

namespace WaitForPendingFinalizersExample
{
   class MyWaitForPendingFinalizersClass
   {
    // You can increase this number to fill up more memory.
    const int numMfos = 1000;
    // You can increase this number to cause more
    // post-finalization work to be done.
    const int maxIterations = 100;

    static void Main(string[] args)
    {
       MyFinalizeObject mfo = null;

       // Create and release a large number of objects
       // that require finalization.
       for(int j = 0; j < numMfos; j++)
       {
          mfo = new MyFinalizeObject();
       }

       //Release the last object created in the loop.
       mfo = null;

       //Force garbage collection.
       GC.Collect();

       // Wait for all finalizers to complete before continuing.
       // Without this call to GC.WaitForPendingFinalizers,
       // the worker loop below might execute at the same time
       // as the finalizers.
       // With this call, the worker loop executes only after
       // all finalizers have been called.
       GC.WaitForPendingFinalizers();

       // Worker loop to perform post-finalization code.
       for(int i = 0; i < maxIterations; i++)
       {
          Console.WriteLine("Doing some post-finalize work");
       }
    }
   }

   class MyFinalizeObject
   {
    // Make this number very large to cause the finalizer to
    // do more work.
    private const int maxIterations = 10000;

    ~MyFinalizeObject()
    {
       Console.WriteLine("Finalizing a MyFinalizeObject");

       // Do some work.
       for(int i = 0; i < maxIterations; i++)
       {
          // This method performs no operation on i, but prevents
          // the JIT compiler from optimizing away the code inside
          // the loop.
          GC.KeepAlive(i);
       }
        }
    }
}

using namespace System;
ref class MyFinalizeObject
{
private:

   // Make this number very large to cause the finalizer to
   // do more work.
   literal int maxIterations = 10000;
   ~MyFinalizeObject()
   {
      Console::WriteLine( "Finalizing a MyFinalizeObject" );

      // Do some work.
      for ( int i = 0; i < maxIterations; i++ )
      {

         // This method performs no operation on i, but prevents
         // the JIT compiler from optimizing away the code inside
         // the loop.
         GC::KeepAlive( i );

      }
   }

};

// You can increase this number to fill up more memory.
const int numMfos = 1000;

// You can increase this number to cause more
// post-finalization work to be done.
const int maxIterations = 100;
int main()
{
   MyFinalizeObject^ mfo = nullptr;

   // Create and release a large number of objects
   // that require finalization.
   for ( int j = 0; j < numMfos; j++ )
   {
      mfo = gcnew MyFinalizeObject;

   }

   //Release the last object created in the loop.
   mfo = nullptr;

   //Force garbage collection.
   GC::Collect();

   // Wait for all finalizers to complete before continuing.
   // Without this call to GC::WaitForPendingFinalizers,
   // the worker loop below might execute at the same time
   // as the finalizers.
   // With this call, the worker loop executes only after
   // all finalizers have been called.
   GC::WaitForPendingFinalizers();

   // Worker loop to perform post-finalization code.
   for ( int i = 0; i < maxIterations; i++ )
   {
      Console::WriteLine( "Doing some post-finalize work" );

   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

GC 类
GC 成员
System 命名空间


GC 属性

GC 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GC 类

GC 类型公开以下成员。

名称 说明
页首

参考

GC 类
System 命名空间


GC ..::.MaxGeneration 属性

GC
.
.
::
.
MaxGeneration 属性
GC 类

获取系统当前支持的最大代数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property MaxGeneration As Integer
    Get
public static int MaxGeneration { get; }
public:
static property int MaxGeneration {
    int get ();
}
static member MaxGeneration : int

属性值

类型： System Int32
从零到所支持的最大代数间的一个值。

对象的代数或存现时期是对象生存期的由实现定义的相对度量。最近创建的对象位于零代中，而最老对象所在的代小于或等于 MaxGeneration 属性所返回的代。 对象的代数或存现时期是对象生存期的由实现定义的相对度量。最近创建的对象位于零代中，而最老对象所在的代小于或等于 MaxGeneration 属性所返回的代。

垃圾回收器假定较新的内存比较早的内存更适合进行垃圾回收。所以，垃圾回收器通过在每次回收内存时调整代数来改善其性能，MaxGeneration 属性值会随着时间而增大。 垃圾回收器假定较新的内存比较早的内存更适合进行垃圾回收。所以，垃圾回收器通过在每次回收内存时调整代数来改善其性能，MaxGeneration 属性值会随着时间而增大。

如果实现对象老化，则 MaxGeneration 属性返回系统所使用的最大代数；否则，此属性返回零。

对实现者的说明

对于此实现，MaxGeneration 属性所返回的值保证在执行应用程序的生存期中保持不变。

当调用采用代参数的 Collect 方法时，可使用 MaxGeneration 属性来确定可以指定的最大值。

下面的示例演示如何使用 MaxGeneration 属性显示当前正在使用的最大代数。

Imports System

Namespace GCCollectInt_Example
    Class MyGCCollectClass
        Private maxGarbage As Long = 10000

        Public Shared Sub Main()
            Dim myGCCol As New MyGCCollectClass

            'Determine the maximum number of generations the system
            'garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration)

            myGCCol.MakeSomeGarbage()

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            'Determine the best available approximation of the number
            'of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of generation 0 only.
            GC.Collect(0)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))

            'Perform a collection of all generations up to and including 2.
            GC.Collect(2)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
            Console.Read()

        End Sub

        Sub MakeSomeGarbage()
            Dim vt As Version

            Dim i As Integer
            For i = 0 To maxGarbage - 1
                'Create objects and release them to fill up memory
                'with unused objects.
                vt = New Version
            Next i
        End Sub
    End Class
End Namespace

using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
        // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number
        // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
        // with unused objects.
                vt = new Version();
            }
        }
    }
}

using namespace System;
const long maxGarbage = 1000;
ref class MyGCCollectClass
{
public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++ )
      {

         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{
   MyGCCollectClass^ myGCCol = gcnew MyGCCollectClass;

   // Determine the maximum number of generations the system
   // garbage collector currently supports.
   Console::WriteLine( "The highest generation is {0}", GC::MaxGeneration );
   myGCCol->MakeSomeGarbage();

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );

   // Determine the best available approximation of the number
   // of bytes currently allocated in managed memory.
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of generation 0 only.
   GC::Collect( 0 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );

   // Perform a collection of all generations up to and including 2.
   GC::Collect( 2 );

   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol ) );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

GC 类
GC 成员
System 命名空间
GetGeneration


GCCollectionMode 枚举

GCCollectionMode 枚举

指定强制执行的垃圾回收的行为。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Enumeration GCCollectionMode
[SerializableAttribute]
public enum GCCollectionMode
[SerializableAttribute]
public enum class GCCollectionMode
[<SerializableAttribute>]
type GCCollectionMode
成员名称 | 说明
Default | 此枚举的默认设置，它当前为 Forced。
Forced | 强制立即执行垃圾回收。
Optimized | 使垃圾回收器可以确定当前时间是否是回收对象的最佳时间。

请使用 GC..::.Collect 方法重载指定 GCCollectionMode 值。

下面的示例使用 Optimized 设置对第 2 代对象进行垃圾回收。

Imports System

Class Program

    Public Shared Sub Main()
        GC.Collect(2, GCCollectionMode.Optimized)
    End Sub
End Class

using System;

class Program
{
    static void Main(string[] args)
    {
        GC.Collect(2, GCCollectionMode.Optimized);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间

其他资源

被动回收


GCNotificationStatus 枚举

GCNotificationStatus 枚举

提供针对下一次完整垃圾回收通知的当前注册的相关信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Enumeration GCNotificationStatus
[SerializableAttribute]
public enum GCNotificationStatus
[SerializableAttribute]
public enum class GCNotificationStatus
[<SerializableAttribute>]
type GCNotificationStatus
成员名称 | 说明
Succeeded | 通知已成功，并且未取消注册。
Failed | 通知因某种原因而失败。
Canceled | 用户取消了当前注册。
Timeout | millisecondsTimeout 参数为 GC..::.WaitForFullGCApproach(Int32) 或 GC..::.WaitForFullGCComplete(Int32) 指定的时间已经过去。
NotApplicable | 此结果可能由以下原因导致：当前没有注册垃圾回收通知、启用了并发垃圾回收，或者为 millisecondsTimeout 参数指定的时间已过期并且未获得任何垃圾回收通知。（有关如何禁用并发垃圾回收的信息，请参见 <gcConcurrent> 运行时设置。） 此结果可能由以下原因导致：当前没有注册垃圾回收通知、启用了并发垃圾回收，或者为 millisecondsTimeout 参数指定的时间已过期并且未获得任何垃圾回收通知。（有关如何禁用并发垃圾回收的信息，请参见 <gcConcurrent> 运行时设置。）

使用 RegisterForFullGCNotification 方法来注册完整垃圾回收通知。然后，使用 WaitForFullGCApproach 方法或 WaitForFullGCComplete 方法返回一个 GCNotificationStatus 枚举，其中包含通知的状态。 使用 RegisterForFullGCNotification 方法来注册完整垃圾回收通知。然后，使用 WaitForFullGCApproach 方法或 WaitForFullGCComplete 方法返回一个 GCNotificationStatus 枚举，其中包含通知的状态。

下面的示例从 WaitForFullGCApproach 方法中获取 GCNotificationStatus 枚举。如果枚举返回 Succeeded，它将调用自定义方法 OnFullGCApproachNotify 执行操作以响应正在接近的完整垃圾回收。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。 下面的示例从 WaitForFullGCApproach 方法中获取 GCNotificationStatus 枚举。如果枚举返回 Succeeded，它将调用自定义方法 OnFullGCApproachNotify 执行操作以响应正在接近的完整垃圾回收。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。 下面的示例从 WaitForFullGCApproach 方法中获取 GCNotificationStatus 枚举。如果枚举返回 Succeeded，它将调用自定义方法 OnFullGCApproachNotify 执行操作以响应正在接近的完整垃圾回收。此代码示例摘自为垃圾回收通知主题提供的一个更大示例。

    Public Shared Sub WaitForFullGCProc()

        While True
            ' CheckForNotify is set to true and false in Main.

            While checkForNotify
                ' Check for a notification of an approaching collection.
                Dim s As GCNotificationStatus = GC.WaitForFullGCApproach
                If (s = GCNotificationStatus.Succeeded) Then
                    Console.WriteLine("GC Notifiction raised.")
                    OnFullGCApproachNotify()
                ElseIf (s = GCNotificationStatus.Canceled) Then
                    Console.WriteLine("GC Notification cancelled.")
                    Exit While
                Else
                    ' This can occur if a timeout period
                    ' is specified for WaitForFullGCApproach(Timeout)
                    ' or WaitForFullGCComplete(Timeout)
                    ' and the time out period has elapsed.
                    Console.WriteLine("GC Notification not applicable.")
                    Exit While
                End If

                ' Check for a notification of a completed collection.
                s = GC.WaitForFullGCComplete
                If (s = GCNotificationStatus.Succeeded) Then
                    Console.WriteLine("GC Notifiction raised.")
                    OnFullGCCompleteEndNotify()
                ElseIf (s = GCNotificationStatus.Canceled) Then
                    Console.WriteLine("GC Notification cancelled.")
                    Exit While
                Else
                    ' Could be a time out.
                    Console.WriteLine("GC Notification not applicable.")
                    Exit While
                End If

            End While
            Thread.Sleep(500)
            ' FinalExit is set to true right before
            ' the main thread cancelled notification.
            If finalExit Then
                Exit While
            End If

        End While
    End Sub

public static void WaitForFullGCProc()
{
    while (true)
    {
        // CheckForNotify is set to true and false in Main.
        while (checkForNotify)
        {
            // Check for a notification of an approaching collection.
            GCNotificationStatus s = GC.WaitForFullGCApproach();
            if (s == GCNotificationStatus.Succeeded)
            {
                Console.WriteLine("GC Notifiction raised.");
                OnFullGCApproachNotify();
            }
            else if (s == GCNotificationStatus.Canceled)
            {
                Console.WriteLine("GC Notification cancelled.");
                break;
            }
            else
            {
                // This can occur if a timeout period
                // is specified for WaitForFullGCApproach(Timeout)
                // or WaitForFullGCComplete(Timeout)
                // and the time out period has elapsed.
                Console.WriteLine("GC Notification not applicable.");
                break;
            }

            // Check for a notification of a completed collection.
            s = GC.WaitForFullGCComplete();
            if (s == GCNotificationStatus.Succeeded)
            {
                Console.WriteLine("GC Notifiction raised.");
                OnFullGCCompleteEndNotify();
            }
            else if (s == GCNotificationStatus.Canceled)
            {
                Console.WriteLine("GC Notification cancelled.");
                break;
            }
            else
            {
                // Could be a time out.
                Console.WriteLine("GC Notification not applicable.");
                break;
            }
        }

        Thread.Sleep(500);
        // FinalExit is set to true right before
        // the main thread cancelled notification.
        if (finalExit)
        {
            break;
        }
    }

}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间

其他资源

垃圾回收通知


GenericUriParser 类

GenericUriParser 类
成员

用于分层 URI 的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Class GenericUriParser _
    Inherits UriParser
public class GenericUriParser : UriParser
public ref class GenericUriParser : public UriParser
type GenericUriParser =
    class
        inherit UriParser
    end

如果要创建基于已知方案的分析器，请使用 HttpStyleUriParser、FtpStyleUriParser、GopherStyleUriParser、LdapStyleUriParser 或 NewsStyleUriParser。

在创建可自定义的分析器时，通过向 GenericUriParser 构造函数传递 System..::.GenericUriParserOptions 枚举中提供的值的按位组合，可以指定分析器的行为。

现有的 System..::.Uri 类已经进行了扩展，以便提供国际资源标识符 (IRI) 和国际化域名 (IDN) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。 现有的 System..::.Uri 类已经进行了扩展，以便提供国际资源标识符 (IRI) 和国际化域名 (IDN) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。 现有的 System..::.Uri 类已经进行了扩展，以便提供国际资源标识符 (IRI) 和国际化域名 (IDN) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。

默认情况下，派生自 GenericUriParser 的所有分析器都不会获得 IRI 和 IDN 支持。Default 选项不包括 IRI 和 IDN 支持。两个新值被添加到 System..::.GenericUriParserOptions 枚举中，以指示自定义分析器是否支持 IRI 和 IDN。 默认情况下，派生自 GenericUriParser 的所有分析器都不会获得 IRI 和 IDN 支持。Default 选项不包括 IRI 和 IDN 支持。两个新值被添加到 System..::.GenericUriParserOptions 枚举中，以指示自定义分析器是否支持 IRI 和 IDN。 默认情况下，派生自 GenericUriParser 的所有分析器都不会获得 IRI 和 IDN 支持。Default 选项不包括 IRI 和 IDN 支持。两个新值被添加到 System..::.GenericUriParserOptions 枚举中，以指示自定义分析器是否支持 IRI 和 IDN。

有关 IRI 和 IDN 支持的更多信息，请参见 System..::.Uri 类的“备注”部分。

System System..::.GenericUriParserGenericUriParser
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

GenericUriParser 成员
System 命名空间


GenericUriParser 成员

GenericUriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GenericUriParser 类

用于分层 URI 的可自定义分析器。

GenericUriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

GenericUriParser 类
System 命名空间


GenericUriParser 构造函数

GenericUriParser 构造函数
GenericUriParser 类

创建用于分层 URI 的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    options As GenericUriParserOptions _
)
public GenericUriParser(
    GenericUriParserOptions options
)
public:
GenericUriParser(
    GenericUriParserOptions options
)
new :
        options:GenericUriParserOptions -> GenericUriParser

参数

options
类型： System GenericUriParserOptions
为此 GenericUriParser 指定选项。

使用此构造函数作为 UriParser..::.Register(UriParser, String, Int32) 的参数

如果要创建基于已知方案的分析器，请使用 HttpStyleUriParser、FtpStyleUriParser、GopherStyleUriParser、LdapStyleUriParser 或 NewsStyleUriParser。

在创建可自定义的分析器时，通过向 GenericUriParser 构造函数传递 System..::.GenericUriParserOptions 枚举中提供的值的按位组合，可以指定分析器的行为。

现有的 System..::.Uri 类已经进行了扩展，以便提供国际资源标识符 (IRI) 和国际化域名 (IDN) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。 现有的 System..::.Uri 类已经进行了扩展，以便提供国际资源标识符 (IRI) 和国际化域名 (IDN) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。 现有的 System..::.Uri 类已经进行了扩展，以便提供国际资源标识符 (IRI) 和国际化域名 (IDN) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。

默认情况下，派生自 GenericUriParser 的所有分析器都不会获得 IRI 和 IDN 支持。Default 选项不包括 IRI 和 IDN 支持。两个新值被添加到 System..::.GenericUriParserOptions 枚举中，以指示自定义分析器是否支持 IRI 和 IDN。 默认情况下，派生自 GenericUriParser 的所有分析器都不会获得 IRI 和 IDN 支持。Default 选项不包括 IRI 和 IDN 支持。两个新值被添加到 System..::.GenericUriParserOptions 枚举中，以指示自定义分析器是否支持 IRI 和 IDN。 默认情况下，派生自 GenericUriParser 的所有分析器都不会获得 IRI 和 IDN 支持。Default 选项不包括 IRI 和 IDN 支持。两个新值被添加到 System..::.GenericUriParserOptions 枚举中，以指示自定义分析器是否支持 IRI 和 IDN。

IriParsing 类型指示分析器支持 RFC 3987 中指定的国际资源标识符 (IRI) 语法分析规则。是否使用 IRI 由配置值指定。 IriParsing 类型指示分析器支持 RFC 3987 中指定的国际资源标识符 (IRI) 语法分析规则。是否使用 IRI 由配置值指定。

Idn 类型指示分析器支持对主机名进行国际化域名 (IDN) 语法分析。是否使用 IDN 由配置值指定。 Idn 类型指示分析器支持对主机名进行国际化域名 (IDN) 语法分析。是否使用 IDN 由配置值指定。

System.Configuration..::.IdnElement 的配置设置由 System..::.Uri 类中控制 IRI 处理的 System.Configuration..::.IriParsingElement 配置设置间接控制。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。 System.Configuration..::.IdnElement 的配置设置由 System..::.Uri 类中控制 IRI 处理的 System.Configuration..::.IriParsingElement 配置设置间接控制。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。 System.Configuration..::.IdnElement 的配置设置由 System..::.Uri 类中控制 IRI 处理的 System.Configuration..::.IriParsingElement 配置设置间接控制。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。

国际化域名 (IDN) 特性仅控制 IDN 处理。默认情况下会执行所有其他 IRI 处理（例如，字符规范化）。 国际化域名 (IDN) 特性仅控制 IDN 处理。默认情况下会执行所有其他 IRI 处理（例如，字符规范化）。

有关 IRI 和 IDN 支持的更多信息，请参见 System..::.Uri 类的“备注”部分。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

GenericUriParser 类
GenericUriParser 成员
System 命名空间
System.Configuration IdnElement
System.Configuration IriParsingElement
System GenericUriParserOptions
System Uri


GenericUriParser 方法

GenericUriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GenericUriParser 类

GenericUriParser 类型公开以下成员。

名称 说明
页首

参考

GenericUriParser 类
System 命名空间


GenericUriParserOptions 枚举

GenericUriParserOptions 枚举

指定 UriParser 的选项。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System
程序集： System（在 System.dll 中）
<FlagsAttribute> _
Public Enumeration GenericUriParserOptions
[FlagsAttribute]
public enum GenericUriParserOptions
[FlagsAttribute]
public enum class GenericUriParserOptions
[<FlagsAttribute>]
type GenericUriParserOptions
成员名称 | 说明
Default 分析器：

  • 要求有证书颁发机构

  • 将反斜杠转换为正斜杠

  • 对路径点、正斜杠和反斜杠进行转义还原
GenericAuthority | 此分析器允许基于注册表的证书颁发机构。
AllowEmptyAuthority | 此分析器允许没有证书颁发机构的 URI。
NoUserInfo | 此方案不定义用户信息部分。
NoPort | 此方案不定义端口。
NoQuery | 此方案不定义查询部分。
NoFragment | 此方案不定义段部分。
DontConvertPathBackslashes | 此分析器不将反斜杠转换为正斜杠。
DontCompressPath | 此分析器不对 URI 进行规范化。
DontUnescapePathDotsAndSlashes | 此分析器不对路径点、正斜杠或反斜杠进行转义还原。
Idn | 分析器支持对主机名进行国际化域名 (IDN) 语法分析。是否使用 IDN 由配置值指定。有关更多信息，请参见“备注”。 分析器支持对主机名进行国际化域名 (IDN) 语法分析。是否使用 IDN 由配置值指定。有关更多信息，请参见“备注”。 分析器支持对主机名进行国际化域名 (IDN) 语法分析。是否使用 IDN 由配置值指定。有关更多信息，请参见“备注”。
IriParsing | 分析器支持 RFC 3987 中指定的国际资源标识符 (IRI) 语法分析规则。是否使用 IRI 由配置值指定。有关更多信息，请参见“备注”。 分析器支持 RFC 3987 中指定的国际资源标识符 (IRI) 语法分析规则。是否使用 IRI 由配置值指定。有关更多信息，请参见“备注”。 分析器支持 RFC 3987 中指定的国际资源标识符 (IRI) 语法分析规则。是否使用 IRI 由配置值指定。有关更多信息，请参见“备注”。

通过将这些选项作为参数传递给 GenericUriParser..::.GenericUriParser(GenericUriParserOptions) 构造函数，您可以使用这些选项的任意组合来配置一般的 URI 分析器。

现有的 System..::.Uri 类已经进行了扩展，以便提供基于 RFC 3987 的国际资源标识符 (IRI) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。 现有的 System..::.Uri 类已经进行了扩展，以便提供基于 RFC 3987 的国际资源标识符 (IRI) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。 现有的 System..::.Uri 类已经进行了扩展，以便提供基于 RFC 3987 的国际资源标识符 (IRI) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。

System.Configuration..::.IdnElement 的配置设置由 System..::.Uri 类中控制 IRI 处理的 System.Configuration..::.IriParsingElement 配置设置间接控制。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。 System.Configuration..::.IdnElement 的配置设置由 System..::.Uri 类中控制 IRI 处理的 System.Configuration..::.IriParsingElement 配置设置间接控制。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。 System.Configuration..::.IdnElement 的配置设置由 System..::.Uri 类中控制 IRI 处理的 System.Configuration..::.IriParsingElement 配置设置间接控制。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。

国际化域名 (IDN) 特性仅控制 IDN 处理。默认情况下会执行所有其他 IRI 处理（例如，字符规范化）。 国际化域名 (IDN) 特性仅控制 IDN 处理。默认情况下会执行所有其他 IRI 处理（例如，字符规范化）。

有关 IRI 支持的更多信息，请参见 System..::.Uri 类的“备注”部分。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
System.Configuration IdnElement
System.Configuration IriParsingElement
System Uri


GopherStyleUriParser 类

GopherStyleUriParser 类
成员

基于 Gopher 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Class GopherStyleUriParser _
    Inherits UriParser
public class GopherStyleUriParser : UriParser
public ref class GopherStyleUriParser : public UriParser
type GopherStyleUriParser =
    class
        inherit UriParser
    end

System System..::.GopherStyleUriParserGopherStyleUriParser
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

GopherStyleUriParser 成员
System 命名空间


GopherStyleUriParser 成员

GopherStyleUriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GopherStyleUriParser 类

基于 Gopher 方案的可自定义分析器。

GopherStyleUriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

GopherStyleUriParser 类
System 命名空间


GopherStyleUriParser 构造函数

GopherStyleUriParser 构造函数
GopherStyleUriParser 类

创建一个基于 Gopher 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public GopherStyleUriParser()
public:
GopherStyleUriParser()
new : unit -> GopherStyleUriParser

使用此构造函数作为 UriParser..::.Register(UriParser, String, Int32) 的参数

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

GopherStyleUriParser 类
GopherStyleUriParser 成员
System 命名空间


GopherStyleUriParser 方法

GopherStyleUriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
GopherStyleUriParser 类

GopherStyleUriParser 类型公开以下成员。

名称 说明
页首

参考

GopherStyleUriParser 类
System 命名空间


Guid 结构

Guid 结构
成员

表示全局唯一标识符 (GUID)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Guid _
    Implements IFormattable, IComparable, IComparable(Of Guid),  _
    IEquatable(Of Guid)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Guid : IFormattable, IComparable,
    IComparable<Guid>, IEquatable<Guid>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Guid : IFormattable, IComparable,
    IComparable<Guid>, IEquatable<Guid>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Guid =
    struct
        interface IFormattable
        interface IComparable
        interface IComparable<Guid>
        interface IEquatable<Guid>
    end

GUID 是一个 128 位整数（16 字节），可用于所有需要唯一标识符的计算机和网络。此标识符重复的可能性非常小。 GUID 是一个 128 位整数（16 字节），可用于所有需要唯一标识符的计算机和网络。此标识符重复的可能性非常小。

下面的代码示例说明如何在用户定义的类或接口上作为特性附加和读取 Guid 对象。

Imports System
Imports System.Runtime.InteropServices

' Guid for the interface IMyInterface.
<Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")> _
Interface IMyInterface
    Sub MyMethod()
End Interface

' Guid for the coclass MyTestClass.
<Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")> _
Public Class MyTestClass
    Implements IMyInterface

    ' Run regasm on this assembly to create .reg and .tlb files.
    ' Reg file can be used to register this coclass in the registry.
    ' Tlb file will be used to do interop.
    Public Sub MyMethod() Implements IMyInterface.MyMethod
    End Sub

    Public Shared Sub Main()
        ' Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
        ' How to specify the attribute on interface/coclass.
        ' Retrieve the GuidAttribute from an interface/coclass.
        ' Value property on GuidAttribute class.
        ' Example addresses the following in System.Guid.
        ' Constructor Guid(string).
        ' Constructor Guid(ByteArray).
        ' Equals.
        ' Operator ==.
        ' CompareTo.
        Dim IMyInterfaceAttribute As Attribute = Attribute.GetCustomAttribute(GetType(IMyInterface), GetType(GuidAttribute))

        ' The Value property of GuidAttribute returns a string.
        System.Console.WriteLine("IMyInterface Attribute: " + CType(IMyInterfaceAttribute, GuidAttribute).Value)

        ' Using the string to create a guid.
        Dim myGuid1 As New Guid(CType(IMyInterfaceAttribute, GuidAttribute).Value)
        ' Using a byte array to create a guid.
        Dim myGuid2 As New Guid(myGuid1.ToByteArray())

        ' Equals is overridden and so value comparison is done though references are different.
        If myGuid1.Equals(myGuid2) Then
            System.Console.WriteLine("myGuid1 equals myGuid2")
        Else
            System.Console.WriteLine("myGuid1 not equals myGuid2")
        End If
        ' Equality operator can also be used to determine if two guids have same value.
        If myGuid1.ToString() = myGuid2.ToString() Then
            System.Console.WriteLine("myGuid1 == myGuid2")
        Else
            System.Console.WriteLine("myGuid1 != myGuid2")
        End If
        ' CompareTo returns 0 if the guids have same value.
        If myGuid1.CompareTo(myGuid2) = 0 Then
            System.Console.WriteLine("myGuid1 compares to myGuid2")
        Else
            System.Console.WriteLine("myGuid1 does not compare to myGuid2")
        End If

        System.Console.ReadLine()

        'Output:
        'IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        'myGuid1 equals myGuid2
        'myGuid1 == myGuid2
        'myGuid1 compares to myGuid2
    End Sub
End Class

using System;
using System.Runtime.InteropServices;

// Guid for the interface IMyInterface.
[Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")]
interface IMyInterface
{
    void MyMethod();
}

// Guid for the coclass MyTestClass.
[Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
public class MyTestClass : IMyInterface
{
    // Run regasm on this assembly to create .reg and .tlb files.
    // Reg file can be used to register this coclass in the registry.
    // Tlb file will be used to do interop.

    public void MyMethod() {}

    public static void Main( string []args )
    {
        // Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
        // How to specify the attribute on interface/coclass.
        // Retrieve the GuidAttribute from an interface/coclass.
        // Value property on GuidAttribute class.

        // Example addresses the following in System.Guid.
        // Constructor Guid(string).
        // Constructor Guid(ByteArray).
        // Equals.
        // Operator ==.
        // CompareTo.

        Attribute IMyInterfaceAttribute = Attribute.GetCustomAttribute( typeof( IMyInterface ), typeof( GuidAttribute ) );

        // The Value property of GuidAttribute returns a string.
        System.Console.WriteLine( "IMyInterface Attribute: " + ((GuidAttribute)IMyInterfaceAttribute).Value );

        // Using the string to create a guid.
        Guid myGuid1 = new Guid( ((GuidAttribute)IMyInterfaceAttribute).Value );
        // Using a byte array to create a guid.
        Guid myGuid2 = new Guid ( myGuid1.ToByteArray() );

        // Equals is overridden and so value comparison is done though references are different.
        if ( myGuid1.Equals( myGuid2 ) )
            System.Console.WriteLine( "myGuid1 equals myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 not equals myGuid2" );

        // Equality operator can also be used to determine if two guids have same value.
        if ( myGuid1 == myGuid2 )
            System.Console.WriteLine( "myGuid1 == myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 != myGuid2" );

        // CompareTo returns 0 if the guids have same value.
        if ( myGuid1.CompareTo( myGuid2 ) == 0 )
            System.Console.WriteLine( "myGuid1 compares to myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 does not compare to myGuid2" );

        System.Console.ReadLine();

        //Output.
        //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        //myGuid1 equals myGuid2
        //myGuid1 == myGuid2
        //myGuid1 compares to myGuid2
    }
}

using namespace System;
using namespace System::Runtime::InteropServices;

// Guid for the interface IMyInterface.

[Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")]
public interface class IMyInterface
{
public:
   void MyMethod();
};

// Guid for the coclass MyTestClass.

[Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
public ref class MyTestClass: public IMyInterface
{
public:

   // Run regasm on this assembly to create .reg and .tlb files.
   // Reg file can be used to register this coclass in the registry.
   // Tlb file will be used to do interop.
   virtual void MyMethod(){}
};

int main()
{
   // Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
   // How to specify the attribute on interface/coclass.
   // Retrieve the GuidAttribute from an interface/coclass.
   // Value property on GuidAttribute class.
   // Example addresses the following in System.Guid.
   // Constructor Guid(string).
   // Constructor Guid(ByteArray).
   // Equals.
   // Operator ==.
   // CompareTo.
   Attribute^ IMyInterfaceAttribute = Attribute::GetCustomAttribute( IMyInterface::typeid, GuidAttribute::typeid );

   // The Value property of GuidAttribute returns a string.
   System::Console::WriteLine( String::Concat(  "IMyInterface Attribute: ", (dynamic_cast<GuidAttribute^>(IMyInterfaceAttribute))->Value ) );

   // Using the string to create a guid.
   Guid myGuid1 = Guid(dynamic_cast<GuidAttribute^>(IMyInterfaceAttribute)->Value);

   // Using a byte array to create a guid.
   Guid myGuid2 = Guid(myGuid1.ToByteArray());

   // Equals is overridden and so value comparison is done though references are different.
   if ( myGuid1.Equals( myGuid2 ) )
      System::Console::WriteLine(  "myGuid1 equals myGuid2" );
   else
      System::Console::WriteLine(  "myGuid1 not equals myGuid2" );

   // Equality operator can also be used to determine if two guids have same value.
   if ( myGuid1 == myGuid2 )
      System::Console::WriteLine(  "myGuid1 == myGuid2" );
   else
      System::Console::WriteLine(  "myGuid1 != myGuid2" );

   // CompareTo returns 0 if the guids have same value.
   if ( myGuid1.CompareTo( myGuid2 ) == 0 )
      System::Console::WriteLine(  "myGuid1 compares to myGuid2" );
   else
      System::Console::WriteLine(  "myGuid1 does not compare to myGuid2" );

   //Output.
   //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
   //myGuid1 equals myGuid2
   //myGuid1 == myGuid2
   //myGuid1 compares to myGuid2
}
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 成员
System 命名空间


Guid 成员

Guid 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Guid 结构

表示全局唯一标识符 (GUID)。

Guid 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Guid 结构
System 命名空间


Guid 构造函数

Guid 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Guid 结构

初始化 Guid 类的新实例。

名称 说明
页首

参考

Guid 结构
Guid 成员
System 命名空间


Guid 构造函数 ( array<Byte >[]()[])

Guid 构造函数 (
array<
Byte
>
[]
()
[]
)
Guid 结构

使用指定的字节数组初始化 Guid 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    b As Byte() _
)
public Guid(
    byte[] b
)
public:
Guid(
    array<unsigned char>^ b
)
new :
        b:byte[] -> Guid

参数

b
类型：
array<
System Byte
>
[]
()
[]

包含初始化 GUID 的值的 16 元素字节数组。
异常 | 条件
ArgumentNullException | b 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | b 的长度不是 16 个字节。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
Guid 重载
System 命名空间


Guid 构造函数 (String)

Guid 构造函数 (String)
Guid 结构

使用指定字符串所表示的值初始化 Guid 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    g As String _
)
public Guid(
    string g
)
public:
Guid(
    String^ g
)
new :
        g:string -> Guid

参数

g
类型： System String
包含下面任一格式的 GUID 的字符串（“d”表示忽略大小写的十六进制数字）：
32 个连续的数字：
dddddddddddddddddddddddddddddddd
- 或 -
8、4、4、4 和 12 位数字的分组，各组之间有连线符。也可以用一对大括号或者圆括号将整个 GUID 括起来： 8、4、4、4 和 12 位数字的分组，各组之间有连线符。也可以用一对大括号或者圆括号将整个 GUID 括起来：
dddddddd-dddd-dddd-dddd-dddddddddddd
- 或 -
{dddddddd-dddd-dddd-dddd-dddddddddddd}
- 或 -
(dddddddd-dddd-dddd-dddd-dddddddddddd)
- 或 -
8、4 和 4 位数字的分组，和一个 8 组 2 位数字的子集，每组都带有前缀“0x”或“0X”，以逗号分隔。整个 GUID 和子集用大括号括起来： 8、4 和 4 位数字的分组，和一个 8 组 2 位数字的子集，每组都带有前缀“0x”或“0X”，以逗号分隔。整个 GUID 和子集用大括号括起来：
{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}
所有大括号、逗号和“0x”前缀都是必需的。所有内置的空格都将被忽略。组中的所有前导零都将被忽略。 所有大括号、逗号和“0x”前缀都是必需的。所有内置的空格都将被忽略。组中的所有前导零都将被忽略。 所有大括号、逗号和“0x”前缀都是必需的。所有内置的空格都将被忽略。组中的所有前导零都将被忽略。
组中显示的数字为可在该组显示的有意义数字的最大数目。您可以指定从 1 到为组显示的位数。指定的位数被认为是该组低序位的位数。 组中显示的数字为可在该组显示的有意义数字的最大数目。您可以指定从 1 到为组显示的位数。指定的位数被认为是该组低序位的位数。 组中显示的数字为可在该组显示的有意义数字的最大数目。您可以指定从 1 到为组显示的位数。指定的位数被认为是该组低序位的位数。
异常 | 条件
ArgumentNullException | g 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | g 的格式无效。
OverflowException | g 的格式无效。
Exception | 出现了内部类型转换错误。

g 参数中的字母十六进制数字可以是大写也可以是小写。例如，下面的字符串表示相同的 GUID。 g 参数中的字母十六进制数字可以是大写也可以是小写。例如，下面的字符串表示相同的 GUID。

"ca761232ed4211cebacd00aa0057b223"

"CA761232-ED42-11CE-BACD-00AA0057B223"

"{CA761232-ED42-11CE-BACD-00AA0057B223}"

"(CA761232-ED42-11CE-BACD-00AA0057B223)"

"{0xCA761232, 0xED42, 0x11CE, {0xBA, 0xCD, 0x00, 0xAA, 0x00, 0x57, 0xB2, 0x23}}"

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
Guid 重载
System 命名空间


Guid 构造函数 (Int32, Int16, Int16, array<Byte >[]()[])

Guid 构造函数 (Int32, Int16, Int16,
array<
Byte
>
[]
()
[]
)
Guid 结构

使用指定的整数和字节数组初始化 Guid 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    a As Integer, _
    b As Short, _
    c As Short, _
    d As Byte() _
)
public Guid(
    int a,
    short b,
    short c,
    byte[] d
)
public:
Guid(
    int a,
    short b,
    short c,
    array<unsigned char>^ d
)
new :
        a:int *
        b:int16 *
        c:int16 *
        d:byte[] -> Guid

参数

a
类型： System Int32
GUID 的前 4 个字节。
b
类型： System Int16
GUID 的下两个字节。
c
类型： System Int16
GUID 的下两个字节。
d
类型：
array<
System Byte
>
[]
()
[]

GUID 的其余 8 个字节。
异常 | 条件
ArgumentNullException | d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | d 的长度不是 8 个字节。

Guid(1,2,3,new byte[]{0,1,2,3,4,5,6,7}) 创建与“00000001-0002-0003-0001-020304050607”相对应的 Guid。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
Guid 重载
System 命名空间


Guid 构造函数 (Int32, Int16, Int16, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte)

Guid 构造函数 (Int32, Int16, Int16, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte)
Guid 结构

使用指定的整数和字节初始化 Guid 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    a As Integer, _
    b As Short, _
    c As Short, _
    d As Byte, _
    e As Byte, _
    f As Byte, _
    g As Byte, _
    h As Byte, _
    i As Byte, _
    j As Byte, _
    k As Byte _
)
public Guid(
    int a,
    short b,
    short c,
    byte d,
    byte e,
    byte f,
    byte g,
    byte h,
    byte i,
    byte j,
    byte k
)
public:
Guid(
    int a,
    short b,
    short c,
    unsigned char d,
    unsigned char e,
    unsigned char f,
    unsigned char g,
    unsigned char h,
    unsigned char i,
    unsigned char j,
    unsigned char k
)
new :
        a:int *
        b:int16 *
        c:int16 *
        d:byte *
        e:byte *
        f:byte *
        g:byte *
        h:byte *
        i:byte *
        j:byte *
        k:byte -> Guid

参数

a
类型： System Int32
GUID 的前 4 个字节。
b
类型： System Int16
GUID 的下两个字节。
c
类型： System Int16
GUID 的下两个字节。
d
类型： System Byte
GUID 的下一个字节。
e
类型： System Byte
GUID 的下一个字节。
f
类型： System Byte
GUID 的下一个字节。
g
类型： System Byte
GUID 的下一个字节。
h
类型： System Byte
GUID 的下一个字节。
i
类型： System Byte
GUID 的下一个字节。
j
类型： System Byte
GUID 的下一个字节。
k
类型： System Byte
GUID 的下一个字节。

以此方式指定单个字节可以回避特定类型计算机中的字节顺序限制（“Big-Endian”或“Little-Endian”字节顺序）。

Guid(0xa,0xb,0xc,0,1,2,3,4,5,6,7) 创建与“0000000a-000b-000c-0001-020304050607”相对应的 Guid。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
Guid 重载
System 命名空间


Guid 构造函数 (UInt32, UInt16, UInt16, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte)

Guid 构造函数 (UInt32, UInt16, UInt16, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte)
Guid 结构

使用指定的无符号整数和字节初始化 Guid 类的新实例。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Sub New ( _
    a As UInteger, _
    b As UShort, _
    c As UShort, _
    d As Byte, _
    e As Byte, _
    f As Byte, _
    g As Byte, _
    h As Byte, _
    i As Byte, _
    j As Byte, _
    k As Byte _
)
[CLSCompliantAttribute(false)]
public Guid(
    uint a,
    ushort b,
    ushort c,
    byte d,
    byte e,
    byte f,
    byte g,
    byte h,
    byte i,
    byte j,
    byte k
)
[CLSCompliantAttribute(false)]
public:
Guid(
    unsigned int a,
    unsigned short b,
    unsigned short c,
    unsigned char d,
    unsigned char e,
    unsigned char f,
    unsigned char g,
    unsigned char h,
    unsigned char i,
    unsigned char j,
    unsigned char k
)
[<CLSCompliantAttribute(false)>]
new :
        a:uint32 *
        b:uint16 *
        c:uint16 *
        d:byte *
        e:byte *
        f:byte *
        g:byte *
        h:byte *
        i:byte *
        j:byte *
        k:byte -> Guid

参数

a
类型： System UInt32
GUID 的前 4 个字节。
b
类型： System UInt16
GUID 的下两个字节。
c
类型： System UInt16
GUID 的下两个字节。
d
类型： System Byte
GUID 的下一个字节。
e
类型： System Byte
GUID 的下一个字节。
f
类型： System Byte
GUID 的下一个字节。
g
类型： System Byte
GUID 的下一个字节。
h
类型： System Byte
GUID 的下一个字节。
i
类型： System Byte
GUID 的下一个字节。
j
类型： System Byte
GUID 的下一个字节。
k
类型： System Byte
GUID 的下一个字节。

以此方式指定字节可以避免 Endianness 问题。

Guid(0xa,0xb,0xc,0,1,2,3,4,5,6,7) 创建与“0000000a-000b-000c-0001-020304050607”相对应的 Guid。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Guid 结构
Guid 成员
Guid 重载
System 命名空间


Guid 字段

Guid 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Guid 结构

Guid 类型公开以下成员。

名称 说明
页首

参考

Guid 结构
System 命名空间


Guid ..::.Empty 字段

Guid
.
.
::
.
Empty 字段
Guid 结构

Guid 类的只读实例，其值保证均为零。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Empty As Guid
public static readonly Guid Empty
public:
static initonly Guid Empty
static val Empty: Guid

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
System 命名空间


Guid 方法

Guid 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Guid 结构

Guid 类型公开以下成员。

名称 说明
页首

参考

Guid 结构
System 命名空间


Guid ..::.CompareTo 方法

Guid
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Guid 结构

将此实例与指定的对象或 Guid 进行比较，并返回二者相对值的指示。

名称 说明
页首

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.CompareTo 方法 (Guid)

Guid
.
.
::
.
CompareTo 方法 (Guid)
Guid 结构

将此实例与指定 Guid 对象进行比较并返回对其相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Guid _ ) As Integer
public int CompareTo( Guid value )
public: virtual int CompareTo( Guid value ) sealed
abstract CompareTo : value:Guid -> int override CompareTo : value:Guid -> int
参数
value
类型： System Guid
要与此实例进行比较的对象。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
返回值
说明
负整数
此实例小于
value
。
零
此实例等于
value
。
正整数
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Guid..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

下面的示例演示多个值类型和引用类型的 CompareTo 的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
CompareTo 重载
System 命名空间


Guid ..::.CompareTo 方法 (Object)

Guid
.
.
::
.
CompareTo 方法 (Object)
Guid 结构

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
返回值
说明
负整数
此实例小于
value
。
零
此实例等于
value
。
正整数
此实例大于
value
，或
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 Guid。

无论 Guid 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 参数必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是 Guid 的实例；否则将引发异常。

下面的示例说明如何在用户定义的类或接口上作为特性附加和读取 Guid 对象。

Imports System
Imports System.Runtime.InteropServices

' Guid for the interface IMyInterface.
<Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")> _
Interface IMyInterface
    Sub MyMethod()
End Interface

' Guid for the coclass MyTestClass.
<Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")> _
Public Class MyTestClass
    Implements IMyInterface

    ' Run regasm on this assembly to create .reg and .tlb files.
    ' Reg file can be used to register this coclass in the registry.
    ' Tlb file will be used to do interop.
    Public Sub MyMethod() Implements IMyInterface.MyMethod
    End Sub

    Public Shared Sub Main()
        ' Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
        ' How to specify the attribute on interface/coclass.
        ' Retrieve the GuidAttribute from an interface/coclass.
        ' Value property on GuidAttribute class.
        ' Example addresses the following in System.Guid.
        ' Constructor Guid(string).
        ' Constructor Guid(ByteArray).
        ' Equals.
        ' Operator ==.
        ' CompareTo.
        Dim IMyInterfaceAttribute As Attribute = Attribute.GetCustomAttribute(GetType(IMyInterface), GetType(GuidAttribute))

        ' The Value property of GuidAttribute returns a string.
        System.Console.WriteLine("IMyInterface Attribute: " + CType(IMyInterfaceAttribute, GuidAttribute).Value)

        ' Using the string to create a guid.
        Dim myGuid1 As New Guid(CType(IMyInterfaceAttribute, GuidAttribute).Value)
        ' Using a byte array to create a guid.
        Dim myGuid2 As New Guid(myGuid1.ToByteArray())

        ' Equals is overridden and so value comparison is done though references are different.
        If myGuid1.Equals(myGuid2) Then
            System.Console.WriteLine("myGuid1 equals myGuid2")
        Else
            System.Console.WriteLine("myGuid1 not equals myGuid2")
        End If
        ' Equality operator can also be used to determine if two guids have same value.
        If myGuid1.ToString() = myGuid2.ToString() Then
            System.Console.WriteLine("myGuid1 == myGuid2")
        Else
            System.Console.WriteLine("myGuid1 != myGuid2")
        End If
        ' CompareTo returns 0 if the guids have same value.
        If myGuid1.CompareTo(myGuid2) = 0 Then
            System.Console.WriteLine("myGuid1 compares to myGuid2")
        Else
            System.Console.WriteLine("myGuid1 does not compare to myGuid2")
        End If

        System.Console.ReadLine()

        'Output:
        'IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        'myGuid1 equals myGuid2
        'myGuid1 == myGuid2
        'myGuid1 compares to myGuid2
    End Sub
End Class

using System;
using System.Runtime.InteropServices;

// Guid for the interface IMyInterface.
[Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")]
interface IMyInterface
{
    void MyMethod();
}

// Guid for the coclass MyTestClass.
[Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
public class MyTestClass : IMyInterface
{
    // Run regasm on this assembly to create .reg and .tlb files.
    // Reg file can be used to register this coclass in the registry.
    // Tlb file will be used to do interop.

    public void MyMethod() {}

    public static void Main( string []args )
    {
        // Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
        // How to specify the attribute on interface/coclass.
        // Retrieve the GuidAttribute from an interface/coclass.
        // Value property on GuidAttribute class.

        // Example addresses the following in System.Guid.
        // Constructor Guid(string).
        // Constructor Guid(ByteArray).
        // Equals.
        // Operator ==.
        // CompareTo.

        Attribute IMyInterfaceAttribute = Attribute.GetCustomAttribute( typeof( IMyInterface ), typeof( GuidAttribute ) );

        // The Value property of GuidAttribute returns a string.
        System.Console.WriteLine( "IMyInterface Attribute: " + ((GuidAttribute)IMyInterfaceAttribute).Value );

        // Using the string to create a guid.
        Guid myGuid1 = new Guid( ((GuidAttribute)IMyInterfaceAttribute).Value );
        // Using a byte array to create a guid.
        Guid myGuid2 = new Guid ( myGuid1.ToByteArray() );

        // Equals is overridden and so value comparison is done though references are different.
        if ( myGuid1.Equals( myGuid2 ) )
            System.Console.WriteLine( "myGuid1 equals myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 not equals myGuid2" );

        // Equality operator can also be used to determine if two guids have same value.
        if ( myGuid1 == myGuid2 )
            System.Console.WriteLine( "myGuid1 == myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 != myGuid2" );

        // CompareTo returns 0 if the guids have same value.
        if ( myGuid1.CompareTo( myGuid2 ) == 0 )
            System.Console.WriteLine( "myGuid1 compares to myGuid2" );
        else
            System.Console.WriteLine( "myGuid1 does not compare to myGuid2" );

        System.Console.ReadLine();

        //Output.
        //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        //myGuid1 equals myGuid2
        //myGuid1 == myGuid2
        //myGuid1 compares to myGuid2
    }
}

using namespace System;
using namespace System::Runtime::InteropServices;

// Guid for the interface IMyInterface.

[Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")]
public interface class IMyInterface
{
public:
   void MyMethod();
};

// Guid for the coclass MyTestClass.

[Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
public ref class MyTestClass: public IMyInterface
{
public:

   // Run regasm on this assembly to create .reg and .tlb files.
   // Reg file can be used to register this coclass in the registry.
   // Tlb file will be used to do interop.
   virtual void MyMethod(){}
};

int main()
{
   // Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
   // How to specify the attribute on interface/coclass.
   // Retrieve the GuidAttribute from an interface/coclass.
   // Value property on GuidAttribute class.
   // Example addresses the following in System.Guid.
   // Constructor Guid(string).
   // Constructor Guid(ByteArray).
   // Equals.
   // Operator ==.
   // CompareTo.
   Attribute^ IMyInterfaceAttribute = Attribute::GetCustomAttribute( IMyInterface::typeid, GuidAttribute::typeid );

   // The Value property of GuidAttribute returns a string.
   System::Console::WriteLine( String::Concat(  "IMyInterface Attribute: ", (dynamic_cast<GuidAttribute^>(IMyInterfaceAttribute))->Value ) );

   // Using the string to create a guid.
   Guid myGuid1 = Guid(dynamic_cast<GuidAttribute^>(IMyInterfaceAttribute)->Value);

   // Using a byte array to create a guid.
   Guid myGuid2 = Guid(myGuid1.ToByteArray());

   // Equals is overridden and so value comparison is done though references are different.
   if ( myGuid1.Equals( myGuid2 ) )
      System::Console::WriteLine(  "myGuid1 equals myGuid2" );
   else
      System::Console::WriteLine(  "myGuid1 not equals myGuid2" );

   // Equality operator can also be used to determine if two guids have same value.
   if ( myGuid1 == myGuid2 )
      System::Console::WriteLine(  "myGuid1 == myGuid2" );
   else
      System::Console::WriteLine(  "myGuid1 != myGuid2" );

   // CompareTo returns 0 if the guids have same value.
   if ( myGuid1.CompareTo( myGuid2 ) == 0 )
      System::Console::WriteLine(  "myGuid1 compares to myGuid2" );
   else
      System::Console::WriteLine(  "myGuid1 does not compare to myGuid2" );

   //Output.
   //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
   //myGuid1 equals myGuid2
   //myGuid1 == myGuid2
   //myGuid1 compares to myGuid2
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
CompareTo 重载
System 命名空间


Guid ..::.Equals 方法

Guid
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Guid 结构

返回一个值，该值指示 Guid 的两个实例是否表示同一个值。

名称 说明
页首

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.Equals 方法 (Guid)

Guid
.
.
::
.
Equals 方法 (Guid)
Guid 结构

返回一个值，该值指示此实例和指定的 Guid 对象是否表示相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    g As Guid _
) As Boolean
public bool Equals(
    Guid g
)
public:
virtual bool Equals(
    Guid g
) sealed
abstract Equals :
        g:Guid -> bool
override Equals :
        g:Guid -> bool

参数

g
类型： System Guid
要与此实例进行比较的对象。

返回值

类型： System Boolean
如果 g 等于此实例，则为 true；否则为 false。

实现

此方法执行效果略好于 Equals 方法，因为它不必将 g 参数装箱。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
Equals 重载
System 命名空间
Equals
CompareTo


Guid ..::.Equals 方法 (Object)

Guid
.
.
::
.
Equals 方法 (Object)
Guid 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    o As Object _
) As Boolean
public override bool Equals(
    Object o
)
public:
virtual bool Equals(
    Object^ o
) override
abstract Equals :
        o:Object -> bool
override Equals :
        o:Object -> bool

参数

o
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果 o 是值与此实例相等的 Guid，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
Equals 重载
System 命名空间


Guid ..::.GetHashCode 方法

Guid
.
.
::
.
GetHashCode 方法
Guid 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
此实例的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.NewGuid 方法

Guid
.
.
::
.
NewGuid 方法
Guid 结构

初始化 Guid 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function NewGuid As Guid
public static Guid NewGuid()
public:
static Guid NewGuid()
static member NewGuid : unit -> Guid

返回值

类型： System Guid
一个新的 GUID 对象。

这是一个便捷的 static 方法，可以调用它获取新的 Guid。

新 Guid 的值均为零或者等于任何其他 Guid 的可能性非常低。

下面的示例创建并显示两个 Guid 对象的值。

' This code example demonstrates the Guid.NewGuid() method.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim g As Guid
' Create and display the value of two GUIDs.
        g = Guid.NewGuid()
        Console.WriteLine(g)
        Console.WriteLine(Guid.NewGuid())
    End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'0f8fad5b-d9cb-469f-a165-70867728950e
'7c9e6679-7425-40de-944b-e07fc1f90ae7
'

// This code example demonstrates the Guid.NewGuid() method.

using System;

class Sample
{
    public static void Main()
    {
    Guid g;
// Create and display the value of two GUIDs.
    g = Guid.NewGuid();
    Console.WriteLine(g);
    Console.WriteLine(Guid.NewGuid());
    }
}

/*
This code example produces the following results:

0f8fad5b-d9cb-469f-a165-70867728950e
7c9e6679-7425-40de-944b-e07fc1f90ae7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.Parse 方法

Guid
.
.
::
.
Parse 方法
Guid 结构

将 GUID 的字符串表示形式转换为等效的 Guid 结构。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    input As String _
) As Guid
public static Guid Parse(
    string input
)
public:
static Guid Parse(
    String^ input
)
static member Parse :
        input:string -> Guid

参数

input
类型： System String
要转换的 GUID。

返回值

类型： System Guid
一个结构，包含已分析的值。
异常 | 条件
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 的格式无法识别。
Exception | 出现了内部类型转换错误。

使用 TryParse 方法捕捉任何不成功的分析操作。

下面的示例演示以下分析操作。

  • 新建 Guid 结构 GStart，并为之新建 GUID。将其 GUID 写入 "B" 格式的字符串。 新建 Guid 结构 GStart，并为之新建 GUID。将其 GUID 写入 "B" 格式的字符串。

  • 通过使用 Parse 方法，借助从字符串分析的 GUID，创建另一 Guid 结构 GCurrent。将其 GUID 写入 "X" 格式的字符串。 通过使用 Parse 方法，借助从字符串分析的 GUID，创建另一 Guid 结构 GCurrent。将其 GUID 写入 "X" 格式的字符串。

  • 使用 TryParse 方法将 "X" 格式的字符串分析成 GCurrent。将其 GUID 写入 "X" 格式的字符串。 使用 TryParse 方法将 "X" 格式的字符串分析成 GCurrent。将其 GUID 写入 "X" 格式的字符串。

  • 重复上一步，但改用 TryParseExact 方法分析仅使用 "X" 格式的内容。

Sub Main()
    Dim GStart As Guid = Guid.NewGuid()
    Dim guidB As String = GStart.ToString("B")

    Dim GCurrent As Guid = Guid.Parse(guidB)
    Dim guidX As String = GCurrent.ToString("X")

    If Guid.TryParse(guidX, GCurrent) Then
        Console.WriteLine(GCurrent.ToString("X"))
    Else
        Console.WriteLine("Last parse operation unsuccessful.")
    End If

    If Guid.TryParseExact(guidX, "X", GCurrent) Then
        Console.WriteLine(GCurrent.ToString("X"))
    Else
        Console.WriteLine("Last parse operation unsuccessful.")
    End If
End Sub

static void Main(string[] args)
{
    Guid GStart = Guid.NewGuid();
    string guidB = GStart.ToString("B");

    Guid GCurrent = Guid.Parse(guidB);
    string guidX = GCurrent.ToString("X");

    if (Guid.TryParse(guidX, out GCurrent))
        Console.WriteLine(GCurrent.ToString("X"));
    else
        Console.WriteLine("Last parse operation unsuccessful.");

    if (Guid.TryParseExact(guidX, "X", out GCurrent))
        Console.WriteLine(GCurrent.ToString("X"));
    else
        Console.WriteLine("Last parse operation unsuccessful.");
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.ParseExact 方法

Guid
.
.
::
.
ParseExact 方法
Guid 结构

将 GUID 的字符串表示形式转换为等效的 Guid 结构，前提是该字符串采用的是指定格式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    input As String, _
    format As String _
) As Guid
public static Guid ParseExact(
    string input,
    string format
)
public:
static Guid ParseExact(
    String^ input,
    String^ format
)
static member ParseExact :
        input:string *
        format:string -> Guid

参数

input
类型： System String
要转换的 GUID。
format
类型： System String
下列说明符之一，指示当解释 input 时要使用的确切格式：“N”、“D”、“B”、“P”或“X”。

返回值

类型： System Guid
一个结构，包含已分析的值。
异常 | 条件
ArgumentNullException | input 或 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 的格式无法识别。
Exception | 出现了内部类型转换错误。

下表显示 format 参数接受的格式说明符。“0" 表示数字；连字符 ("-")、大括号 ("{"，"}") 和括号 （"("，")"） 的显示如下所示。 下表显示 format 参数接受的格式说明符。“0" 表示数字；连字符 ("-")、大括号 ("{"，"}") 和括号 （"("，")"） 的显示如下所示。

说明符 | input 参数的格式
否 | 32 位： 00000000000000000000000000000000
D | 由连字符分隔的 32 位数字： 00000000-0000-0000-0000-000000000000
B | 括在大括号中、由连字符分隔的 32 位数字： {00000000-0000-0000-0000-000000000000}
P | 括在圆括号中、由连字符分隔的 32 位数字： (00000000-0000-0000-0000-000000000000)
X | 括在大括号的 4 个十六进制值，其中第 4 个值是 8 个十六进制值的子集（也括在大括号中）： {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.ToByteArray 方法

Guid
.
.
::
.
ToByteArray 方法
Guid 结构

返回包含此实例的值的 16 元素字节数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToByteArray As Byte()
public byte[] ToByteArray()
public:
array<unsigned char>^ ToByteArray()
member ToByteArray : unit -> byte[]

返回值

类型：
array<
System Byte
>
[]
()
[]

16 元素字节数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.ToString 方法

Guid
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Guid 结构

返回 Guid 类的此实例值的字符串表示形式。

名称 说明
页首

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.ToString 方法

Guid
.
.
::
.
ToString 方法
Guid 结构

返回注册表格式的此实例值的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此 Guid 的值，格式如下：
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
其中 GUID 的值表示为一系列小写的十六进制位，这些十六进制位分别以 8 个、4 个、4 个、4 个和 12 个位为一组并由连字符分隔开。例如，返回值可以是“382c74c3-721d-4f34-80e5-57657b6cbc27”。 其中 GUID 的值表示为一系列小写的十六进制位，这些十六进制位分别以 8 个、4 个、4 个、4 个和 12 个位为一组并由连字符分隔开。例如，返回值可以是“382c74c3-721d-4f34-80e5-57657b6cbc27”。

此方法提供一个默认的 GUID 格式，可满足典型情况下的使用要求；但此方法的其他一些采用 format 参数的版本提供了几种常见的格式变体。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
ToString 重载
System 命名空间


Guid ..::.ToString 方法 (String)

Guid
.
.
::
.
ToString 方法 (String)
Guid 结构

根据所提供的格式说明符，返回此 Guid 实例值的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
一个单格式说明符，它指示如何格式化此 Guid 的值。format 参数可以是“N”、“D”、“B”、“P”或“X”。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用“D”。 一个单格式说明符，它指示如何格式化此 Guid 的值。format 参数可以是“N”、“D”、“B”、“P”或“X”。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用“D”。 一个单格式说明符，它指示如何格式化此 Guid 的值。format 参数可以是“N”、“D”、“B”、“P”或“X”。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用“D”。

返回值

类型： System String
此 Guid 的值，用一系列指定格式的小写十六进制位表示。
异常 | 条件
FormatException | format 的值不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、空字符串 ("")、"N"、"D"、"B"、"P" 或 "X"。

下表显示 format 参数接受的格式说明符。“0" 表示数字；连字符 ("-")、大括号 ("{"，"}") 和括号 （"("，")"） 的显示如下所示。 下表显示 format 参数接受的格式说明符。“0" 表示数字；连字符 ("-")、大括号 ("{"，"}") 和括号 （"("，")"） 的显示如下所示。

说明符 | 返回值的格式
否 | 32 位： 00000000000000000000000000000000
D | 由连字符分隔的 32 位数字： 00000000-0000-0000-0000-000000000000
B | 括在大括号中、由连字符分隔的 32 位数字： {00000000-0000-0000-0000-000000000000}
P | 括在圆括号中、由连字符分隔的 32 位数字： (00000000-0000-0000-0000-000000000000)
X | 括在大括号的 4 个十六进制值，其中第 4 个值是 8 个十六进制值的子集（也括在大括号中）： {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
ToString 重载
System 命名空间


Guid ..::.ToString 方法 (String, IFormatProvider)

Guid
.
.
::
.
ToString 方法 (String, IFormatProvider)
Guid 结构

根据所提供的格式说明符和区域性特定的格式信息，返回 Guid 类的此实例值的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
一个单格式说明符，它指示如何格式化此 Guid 的值。format 参数可以是“N”、“D”、“B”、“P”或“X”。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用“D”。 一个单格式说明符，它指示如何格式化此 Guid 的值。format 参数可以是“N”、“D”、“B”、“P”或“X”。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用“D”。 一个单格式说明符，它指示如何格式化此 Guid 的值。format 参数可以是“N”、“D”、“B”、“P”或“X”。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则使用“D”。
provider
类型： System IFormatProvider
（保留）一个对象，用于提供区域性特定的格式设置服务。

返回值

类型： System String
此 Guid 的值，用一系列指定格式的小写十六进制位表示。

实现

异常 | 条件
FormatException | format 的值不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、空字符串 ("")、"N"、"D"、"B"、"P" 或 "X"。

provider 参数被保留供将来使用，而不用于此方法的执行。可以为该参数编写空引用代码。 provider 参数被保留供将来使用，而不用于此方法的执行。可以为该参数编写空引用代码。

下表显示 format 参数接受的格式说明符。“0" 表示数字；连字符 ("-")、大括号 ("{"，"}") 和括号 （"("，")"） 的显示如下所示。 下表显示 format 参数接受的格式说明符。“0" 表示数字；连字符 ("-")、大括号 ("{"，"}") 和括号 （"("，")"） 的显示如下所示。

说明符 | 返回值的格式
否 | 32 位： 00000000000000000000000000000000
D | 由连字符分隔的 32 位数字： 00000000-0000-0000-0000-000000000000
B | 括在大括号中、由连字符分隔的 32 位数字： {00000000-0000-0000-0000-000000000000}
P | 括在圆括号中、由连字符分隔的 32 位数字： (00000000-0000-0000-0000-000000000000)
X | 括在大括号的 4 个十六进制值，其中第 4 个值是 8 个十六进制值的子集（也括在大括号中）： {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
ToString 重载
System 命名空间


Guid ..::.TryParse 方法

Guid
.
.
::
.
TryParse 方法
Guid 结构

将 GUID 的字符串表示形式转换为等效的 Guid 结构。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    input As String, _
    <OutAttribute> ByRef result As Guid _
) As Boolean
public static bool TryParse(
    string input,
    out Guid result
)
public:
static bool TryParse(
    String^ input,
    [OutAttribute] Guid% result
)
static member TryParse :
        input:string *
        result:Guid byref -> bool

参数

input
类型： System String
要转换的 GUID。
result
类型： System Guid %
将包含已分析的值的结构。

返回值

类型： System Boolean
如果分析操作成功，则为 true；否则为 false。

如果 input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或格式无法识别，此方法返回 false，不返回异常。

下面的示例演示使用 GUID 和 Guid 结构进行的下列测试：

  • 新建 Guid 结构 GStart，其具有新 GUID。将该 GUID 写入 "B" 格式的字符串变量。 新建 Guid 结构 GStart，其具有新 GUID。将该 GUID 写入 "B" 格式的字符串变量。

  • 通过分析字符串变量，创建另一 Guid 结构 GCurrent。将该 GUID 写入 "P" 格式的另一个字符串变量。 通过分析字符串变量，创建另一 Guid 结构 GCurrent。将该 GUID 写入 "P" 格式的另一个字符串变量。

  • 分析字符串变量，在"P"GCurrent 设置的格式。将该 GUID 写入 "X" 格式的字符串变量。 分析字符串变量，在"P"GCurrent 设置的格式。将该 GUID 写入 "X" 格式的字符串变量。

  • 将 "X" 格式的字符串变量分析成 GCurrent。使用“X”格式显示 GUID。 将 "X" 格式的字符串变量分析成 GCurrent。使用“X”格式显示 GUID。

Sub Main()
    Dim GStart As Guid = Guid.NewGuid()
    Dim guidB As String = GStart.ToString("B")

    Dim GCurrent As Guid = Guid.Parse(guidB)
    Dim guidX As String = GCurrent.ToString("X")

    If Guid.TryParse(guidX, GCurrent) Then
        Console.WriteLine(GCurrent.ToString("X"))
    Else
        Console.WriteLine("Last parse operation unsuccessful.")
    End If

    If Guid.TryParseExact(guidX, "X", GCurrent) Then
        Console.WriteLine(GCurrent.ToString("X"))
    Else
        Console.WriteLine("Last parse operation unsuccessful.")
    End If
End Sub

static void Main(string[] args)
{
    Guid GStart = Guid.NewGuid();
    string guidB = GStart.ToString("B");

    Guid GCurrent = Guid.Parse(guidB);
    string guidX = GCurrent.ToString("X");

    if (Guid.TryParse(guidX, out GCurrent))
        Console.WriteLine(GCurrent.ToString("X"));
    else
        Console.WriteLine("Last parse operation unsuccessful.");

    if (Guid.TryParseExact(guidX, "X", out GCurrent))
        Console.WriteLine(GCurrent.ToString("X"));
    else
        Console.WriteLine("Last parse operation unsuccessful.");
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.TryParseExact 方法

Guid
.
.
::
.
TryParseExact 方法
Guid 结构

将 GUID 的字符串表示形式转换为等效的 Guid 结构，前提是该字符串采用的是指定格式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParseExact ( _
    input As String, _
    format As String, _
    <OutAttribute> ByRef result As Guid _
) As Boolean
public static bool TryParseExact(
    string input,
    string format,
    out Guid result
)
public:
static bool TryParseExact(
    String^ input,
    String^ format,
    [OutAttribute] Guid% result
)
static member TryParseExact :
        input:string *
        format:string *
        result:Guid byref -> bool

参数

input
类型： System String
要转换的 GUID。
format
类型： System String
下列说明符之一，指示当解释 input 时要使用的确切格式：“N”、“D”、“B”、“P”或“X”。
result
类型： System Guid %
将包含已分析的值的结构。

返回值

类型： System Boolean
如果分析操作成功，则为 true；否则为 false。

如果 input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或格式无法识别，此方法返回 false，不返回异常。

下表显示 format 参数接受的格式说明符。“0" 表示数字；连字符 ("-")、大括号 ("{"，"}") 和括号 （"("，")"） 的显示如下所示。 下表显示 format 参数接受的格式说明符。“0" 表示数字；连字符 ("-")、大括号 ("{"，"}") 和括号 （"("，")"） 的显示如下所示。

说明符 | input 参数的格式
否 | 32 位： 00000000000000000000000000000000
D | 由连字符分隔的 32 位数字： 00000000-0000-0000-0000-000000000000
B | 括在大括号中、由连字符分隔的 32 位数字： {00000000-0000-0000-0000-000000000000}
P | 括在圆括号中、由连字符分隔的 32 位数字： (00000000-0000-0000-0000-000000000000)
X | 括在大括号的 4 个十六进制值，其中第 4 个值是 8 个十六进制值的子集（也括在大括号中）： {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}

下面的示例演示使用 GUID 和 Guid 结构进行的下列测试：

  • 新建 Guid 结构 GStart，其具有新 GUID。将该 GUID 写入 "B" 格式的字符串变量。 新建 Guid 结构 GStart，其具有新 GUID。将该 GUID 写入 "B" 格式的字符串变量。

  • 通过分析字符串变量，创建另一 Guid 结构 GCurrent。将该 GUID 写入 "P" 格式的另一个字符串变量。 通过分析字符串变量，创建另一 Guid 结构 GCurrent。将该 GUID 写入 "P" 格式的另一个字符串变量。

  • 分析字符串变量，在"P"GCurrent 设置的格式。将该 GUID 写入 "X" 格式的字符串变量。 分析字符串变量，在"P"GCurrent 设置的格式。将该 GUID 写入 "X" 格式的字符串变量。

  • 将 "X" 格式的字符串变量分析成 GCurrent。使用“X”格式显示 GUID。 将 "X" 格式的字符串变量分析成 GCurrent。使用“X”格式显示 GUID。

Sub Main()
    Dim GStart As Guid = Guid.NewGuid()
    Dim guidB As String = GStart.ToString("B")

    Dim GCurrent As Guid = Guid.Parse(guidB)
    Dim guidX As String = GCurrent.ToString("X")

    If Guid.TryParse(guidX, GCurrent) Then
        Console.WriteLine(GCurrent.ToString("X"))
    Else
        Console.WriteLine("Last parse operation unsuccessful.")
    End If

    If Guid.TryParseExact(guidX, "X", GCurrent) Then
        Console.WriteLine(GCurrent.ToString("X"))
    Else
        Console.WriteLine("Last parse operation unsuccessful.")
    End If
End Sub

static void Main(string[] args)
{
    Guid GStart = Guid.NewGuid();
    string guidB = GStart.ToString("B");

    Guid GCurrent = Guid.Parse(guidB);
    string guidX = GCurrent.ToString("X");

    if (Guid.TryParse(guidX, out GCurrent))
        Console.WriteLine(GCurrent.ToString("X"));
    else
        Console.WriteLine("Last parse operation unsuccessful.");

    if (Guid.TryParseExact(guidX, "X", out GCurrent))
        Console.WriteLine(GCurrent.ToString("X"));
    else
        Console.WriteLine("Last parse operation unsuccessful.");
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Guid 结构
Guid 成员
System 命名空间


Guid 运算符

Guid 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Guid 结构

Guid 类型公开以下成员。

名称 说明
页首

参考

Guid 结构
System 命名空间


Guid ..::.Equality 运算符

Guid
.
.
::
.
Equality 运算符
Guid 结构

指示两个指定的 Guid 对象的值是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    a As Guid, _
    b As Guid _
) As Boolean
public static bool operator ==(
    Guid a,
    Guid b
)
public:
static bool operator ==(
    Guid a,
    Guid b
)
static let inline (=)
        a:Guid *
        b:Guid  : bool

参数

a
类型： System Guid
要比较的第一个对象。
b
类型： System Guid
要比较的第二个对象。

返回值

类型： System Boolean
如果 a 和 b 相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
System 命名空间


Guid ..::.Inequality 运算符

Guid
.
.
::
.
Inequality 运算符
Guid 结构

指示两个指定的 Guid 对象的值是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    a As Guid, _
    b As Guid _
) As Boolean
public static bool operator !=(
    Guid a,
    Guid b
)
public:
static bool operator !=(
    Guid a,
    Guid b
)
static let inline (<>)
        a:Guid *
        b:Guid  : bool

参数

a
类型： System Guid
要比较的第一个对象。
b
类型： System Guid
要比较的第二个对象。

返回值

类型： System Boolean
如果 a 和 b 不相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Guid 结构
Guid 成员
System 命名空间


HttpStyleUriParser 类

HttpStyleUriParser 类
成员

基于 HTTP 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Class HttpStyleUriParser _
    Inherits UriParser
public class HttpStyleUriParser : UriParser
public ref class HttpStyleUriParser : public UriParser
type HttpStyleUriParser =
    class
        inherit UriParser
    end

System System..::.HttpStyleUriParserHttpStyleUriParser
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

HttpStyleUriParser 成员
System 命名空间


HttpStyleUriParser 成员

HttpStyleUriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
HttpStyleUriParser 类

基于 HTTP 方案的可自定义分析器。

HttpStyleUriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

HttpStyleUriParser 类
System 命名空间


HttpStyleUriParser 构造函数

HttpStyleUriParser 构造函数
HttpStyleUriParser 类

创建基于 HTTP 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public HttpStyleUriParser()
public:
HttpStyleUriParser()
new : unit -> HttpStyleUriParser

使用此构造函数作为 UriParser..::.Register(UriParser, String, Int32) 的参数

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

HttpStyleUriParser 类
HttpStyleUriParser 成员
System 命名空间


HttpStyleUriParser 方法

HttpStyleUriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
HttpStyleUriParser 类

HttpStyleUriParser 类型公开以下成员。

名称 说明
页首

参考

HttpStyleUriParser 类
System 命名空间


IAppDomainSetup 接口

IAppDomainSetup 接口
成员

表示可以添加到 AppDomain 的实例的程序集绑定信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<GuidAttribute("27FFF232-A7A8-40dd-8D4A-734AD59FCD41")> _
<ComVisibleAttribute(True)> _
<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _
Public Interface IAppDomainSetup
[GuidAttribute("27FFF232-A7A8-40dd-8D4A-734AD59FCD41")]
[ComVisibleAttribute(true)]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAppDomainSetup
[GuidAttribute(L"27FFF232-A7A8-40dd-8D4A-734AD59FCD41")]
[ComVisibleAttribute(true)]
[InterfaceTypeAttribute(ComInterfaceType::InterfaceIsIUnknown)]
public interface class IAppDomainSetup
[<GuidAttribute("27FFF232-A7A8-40dd-8D4A-734AD59FCD41")>]
[<ComVisibleAttribute(true)>]
[<InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)>]
type IAppDomainSetup =  interface end

此接口的成员与 AppDomain..::.GetData 和 AppDomain..::.SetData 方法一起使用以标识要使用的 AppDomain 数据。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 成员
System 命名空间


IAppDomainSetup 成员

IAppDomainSetup 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IAppDomainSetup 接口

表示可以添加到 AppDomain 的实例的程序集绑定信息。

IAppDomainSetup 类型公开以下成员。

名称 说明
页首

参考

IAppDomainSetup 接口
System 命名空间


IAppDomainSetup 属性

IAppDomainSetup 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IAppDomainSetup 接口

IAppDomainSetup 类型公开以下成员。

名称 说明
页首

参考

IAppDomainSetup 接口
System 命名空间


IAppDomainSetup ..::.ApplicationBase 属性

IAppDomainSetup
.
.
::
.
ApplicationBase 属性
IAppDomainSetup 接口

获取或设置包含该应用程序的目录的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property ApplicationBase As String
    Get
    Set
string ApplicationBase { get; set; }
property String^ ApplicationBase {
    String^ get ();
    void set (String^ value);
}
abstract ApplicationBase : string with get, set

属性值

类型： System String
包含应用程序基目录名称的 String。

在获取或设置程序集缓存管理器的 APPBASE 变量时使用。这是程序集管理器开始探测程序集的目录。当 AppDomain 完成它的第一次绑定后，此属性不得更改。 在获取或设置程序集缓存管理器的 APPBASE 变量时使用。这是程序集管理器开始探测程序集的目录。当 AppDomain 完成它的第一次绑定后，此属性不得更改。 在获取或设置程序集缓存管理器的 APPBASE 变量时使用。这是程序集管理器开始探测程序集的目录。当 AppDomain 完成它的第一次绑定后，此属性不得更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间


IAppDomainSetup ..::.ApplicationName 属性

IAppDomainSetup
.
.
::
.
ApplicationName 属性
IAppDomainSetup 接口

获取或设置应用程序的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property ApplicationName As String
    Get
    Set
string ApplicationName { get; set; }
property String^ ApplicationName {
    String^ get ();
    void set (String^ value);
}
abstract ApplicationName : string with get, set

属性值

类型： System String
作为应用程序名称的 String。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间


IAppDomainSetup ..::.CachePath 属性

IAppDomainSetup
.
.
::
.
CachePath 属性
IAppDomainSetup 接口

获取和设置特定于应用程序的区域名称，在该区域中影像复制文件。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property CachePath As String
    Get
    Set
string CachePath { get; set; }
property String^ CachePath {
    String^ get ();
    void set (String^ value);
}
abstract CachePath : string with get, set

属性值

类型： System String
一个 String，它是在其中进行文件影像复制的完全限定的目录路径名称和文件名。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间
ShadowCopyFiles
ShadowCopyDirectories


IAppDomainSetup ..::.ConfigurationFile 属性

IAppDomainSetup
.
.
::
.
ConfigurationFile 属性
IAppDomainSetup 接口

获取和设置应用程序域的配置文件的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property ConfigurationFile As String
    Get
    Set
string ConfigurationFile { get; set; }
property String^ ConfigurationFile {
    String^ get ();
    void set (String^ value);
}
abstract ConfigurationFile : string with get, set

属性值

类型： System String
指定配置文件名称的 String。

配置文件描述应用程序域的搜索规则和配置数据。创建应用程序域的宿主负责提供此数据，因为有意义的值因情况不同而异。 配置文件描述应用程序域的搜索规则和配置数据。创建应用程序域的宿主负责提供此数据，因为有意义的值因情况不同而异。

例如，ASP.NET 应用程序的配置数据针对每个应用程序、站点和计算机进行存储，而可执行文件的配置数据针对每个应用程序、用户和计算机进行存储。只有宿主知道针对特定情况的配置数据的细节。 例如，ASP.NET 应用程序的配置数据针对每个应用程序、站点和计算机进行存储，而可执行文件的配置数据针对每个应用程序、用户和计算机进行存储。只有宿主知道针对特定情况的配置数据的细节。

当 AppDomain 完成它的第一次绑定后，此属性不得更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间


IAppDomainSetup ..::.DynamicBase 属性

IAppDomainSetup
.
.
::
.
DynamicBase 属性
IAppDomainSetup 接口

获取或设置将在其中存储和访问动态生成文件的目录。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property DynamicBase As String
    Get
    Set
string DynamicBase { get; set; }
property String^ DynamicBase {
    String^ get ();
    void set (String^ value);
}
abstract DynamicBase : string with get, set

属性值

类型： System String
指定包含动态程序集的目录的 String。

当创建 AppDomain 时，可以指定名为“动态目录”的目录来存储动态程序集。此目录在逻辑上位于 ApplicationBase 下，尽管它可以驻留在该目录的其他部分。 当创建 AppDomain 时，可以指定名为“动态目录”的目录来存储动态程序集。此目录在逻辑上位于 ApplicationBase 下，尽管它可以驻留在该目录的其他部分。

当 AppDomain 完成它的第一次绑定后，此属性不得更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间


IAppDomainSetup ..::.LicenseFile 属性

IAppDomainSetup
.
.
::
.
LicenseFile 属性
IAppDomainSetup 接口

获取或设置与此域关联的许可证文件的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property LicenseFile As String
    Get
    Set
string LicenseFile { get; set; }
property String^ LicenseFile {
    String^ get ();
    void set (String^ value);
}
abstract LicenseFile : string with get, set

属性值

类型： System String
指定许可证文件名称的 String。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间


IAppDomainSetup ..::.PrivateBinPath 属性

IAppDomainSetup
.
.
::
.
PrivateBinPath 属性
IAppDomainSetup 接口

获取或设置目录列表，它与 ApplicationBase 目录结合来探测专用程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property PrivateBinPath As String
    Get
    Set
string PrivateBinPath { get; set; }
property String^ PrivateBinPath {
    String^ get ();
    void set (String^ value);
}
abstract PrivateBinPath : string with get, set

属性值

类型： System String
包含目录名称列表的 String，其中每个名称都用分号隔开。

专用程序集与应用程序部署在同一目录结构中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间


IAppDomainSetup ..::.PrivateBinPathProbe 属性

IAppDomainSetup
.
.
::
.
PrivateBinPathProbe 属性
IAppDomainSetup 接口

获取或设置用于定位应用程序的专用二进制目录路径。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property PrivateBinPathProbe As String
    Get
    Set
string PrivateBinPathProbe { get; set; }
property String^ PrivateBinPathProbe {
    String^ get ();
    void set (String^ value);
}
abstract PrivateBinPathProbe : string with get, set

属性值

类型： System String
包含目录名称列表的 String，其中每个名称都用分号隔开。

设置此属性将应用程序目录路径从搜索应用程序的范围中排除。搜索被限制在专用和全局二进制目录路径及全局程序集缓存内。 设置此属性将应用程序目录路径从搜索应用程序的范围中排除。搜索被限制在专用和全局二进制目录路径及全局程序集缓存内。

当 AppDomain 完成它的第一次绑定后，此属性不得更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间


IAppDomainSetup ..::.ShadowCopyDirectories 属性

IAppDomainSetup
.
.
::
.
ShadowCopyDirectories 属性
IAppDomainSetup 接口

获取或设置目录的名称，这些目录包含要影像复制的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property ShadowCopyDirectories As String
    Get
    Set
string ShadowCopyDirectories { get; set; }
property String^ ShadowCopyDirectories {
    String^ get ();
    void set (String^ value);
}
abstract ShadowCopyDirectories : string with get, set

属性值

类型： System String
包含目录名称列表的 String，其中每个名称都用分号隔开。

如果没有设置此属性，则默认情况下会影像复制由 PrivateBinPath 指定的所有目录，包括 ApplicationBase 所指定的目录。

如果某可执行文件正在使用，则对该可执行文件的更新将存储在影像复制目录中。现有用户继续使用原始的可执行文件直到其终止，而新用户则使用影像复制的可执行文件。 如果某可执行文件正在使用，则对该可执行文件的更新将存储在影像复制目录中。现有用户继续使用原始的可执行文件直到其终止，而新用户则使用影像复制的可执行文件。

当 AppDomain 完成它的第一次绑定后，此属性不得更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间


IAppDomainSetup ..::.ShadowCopyFiles 属性

IAppDomainSetup
.
.
::
.
ShadowCopyFiles 属性
IAppDomainSetup 接口

获取或设置指示影像复制是打开还是关闭的字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Property ShadowCopyFiles As String
    Get
    Set
string ShadowCopyFiles { get; set; }
property String^ ShadowCopyFiles {
    String^ get ();
    void set (String^ value);
}
abstract ShadowCopyFiles : string with get, set

属性值

类型： System String
如果 String 包含值“true”，则指示影像复制已打开；如果包含值“false”，则指示影像复制已关闭。

当 AppDomain 完成它的第一次绑定后，此属性不得更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IAppDomainSetup 接口
IAppDomainSetup 成员
System 命名空间


IAsyncResult 接口

IAsyncResult 接口
成员

表示异步操作的状态。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IAsyncResult
[ComVisibleAttribute(true)]
public interface IAsyncResult
[ComVisibleAttribute(true)]
public interface class IAsyncResult
[<ComVisibleAttribute(true)>]
type IAsyncResult =  interface end

IAsyncResult 接口由包含可异步操作的方法的类实现。它是启动异步操作的方法（如 FileStream..::.BeginRead）的返回类型，也是结束异步操作的方法（如 FileStream..::.EndRead）的第三个参数的类型。当异步操作完成时，IAsyncResult 对象也将传递给由 AsyncCallback 委托调用的方法。 IAsyncResult 接口由包含可异步操作的方法的类实现。它是启动异步操作的方法（如 FileStream..::.BeginRead）的返回类型，也是结束异步操作的方法（如 FileStream..::.EndRead）的第三个参数的类型。当异步操作完成时，IAsyncResult 对象也将传递给由 AsyncCallback 委托调用的方法。 IAsyncResult 接口由包含可异步操作的方法的类实现。它是启动异步操作的方法（如 FileStream..::.BeginRead）的返回类型，也是结束异步操作的方法（如 FileStream..::.EndRead）的第三个参数的类型。当异步操作完成时，IAsyncResult 对象也将传递给由 AsyncCallback 委托调用的方法。

支持 IAsyncResult 接口的对象存储异步操作的状态信息，并提供同步对象以允许线程在操作完成时终止。

说明 说明

AsyncResult 类是在使用委托异步调用方法时 BeginInvoke 方法返回的 IAsyncResult 的实现。

有关如何使用 IAsyncResult 接口的详细说明，请参见使用异步方式调用同步方法主题。

下面的示例演示如何使用 AsyncWaitHandle 属性来获取 WaitHandle，以及如何等待对委托的异步调用。异步调用完成时会发出 WaitHandle 信号，您可以通过调用 WaitOne 方法等待它。 下面的示例演示如何使用 AsyncWaitHandle 属性来获取 WaitHandle，以及如何等待对委托的异步调用。异步调用完成时会发出 WaitHandle 信号，您可以通过调用 WaitOne 方法等待它。

此示例包含两个类：包含异步调用的方法的类和包含进行调用的 Main 方法的类。

有关使用委托异步调用方法的更多信息和更多示例，请参见使用异步方式调用同步方法。

Imports System
Imports System.Threading
Imports System.Runtime.InteropServices

Namespace Examples.AdvancedProgramming.AsynchronousOperations
    Public Class AsyncDemo
        ' The method to be executed asynchronously.
        Public Function TestMethod(ByVal callDuration As Integer, _
                <Out> ByRef threadId As Integer) As String
            Console.WriteLine("Test method begins.")
            Thread.Sleep(callDuration)
            threadId = Thread.CurrentThread.ManagedThreadId()
            return String.Format("My call time was {0}.", callDuration.ToString())
        End Function
    End Class

    ' The delegate must have the same signature as the method
    ' it will call asynchronously.
    Public Delegate Function AsyncMethodCaller(ByVal callDuration As Integer, _
        <Out> ByRef threadId As Integer) As String
End Namespace

...

Imports System
Imports System.Threading
Imports System.Runtime.InteropServices

Namespace Examples.AdvancedProgramming.AsynchronousOperations

    Public Class AsyncMain
        Shared Sub Main()
            ' The asynchronous method puts the thread id here.
            Dim threadId As Integer

            ' Create an instance of the test class.
            Dim ad As New AsyncDemo()

            ' Create the delegate.
            Dim caller As New AsyncMethodCaller(AddressOf ad.TestMethod)

            ' Initiate the asynchronous call.
            Dim result As IAsyncResult = caller.BeginInvoke(3000, _
                threadId, Nothing, Nothing)

            Thread.Sleep(0)
            Console.WriteLine("Main thread {0} does some work.", _
                Thread.CurrentThread.ManagedThreadId)
            ' Perform additional processing here and then
            ' wait for the WaitHandle to be signaled.
            result.AsyncWaitHandle.WaitOne()

            ' Call EndInvoke to retrieve the results.
            Dim returnValue As String = caller.EndInvoke(threadId, result)

            ' Close the wait handle.
            result.AsyncWaitHandle.Close()

            Console.WriteLine("The call executed on thread {0}, with return value ""{1}"".", _
                threadId, returnValue)
        End Sub
    End Class
End Namespace

'This example produces output similar to the following:
'
'Main thread 1 does some work.
'Test method begins.
'The call executed on thread 3, with return value "My call time was 3000.".

using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncDemo
    {
        // The method to be executed asynchronously.
        public string TestMethod(int callDuration, out int threadId)
        {
            Console.WriteLine("Test method begins.");
            Thread.Sleep(callDuration);
            threadId = Thread.CurrentThread.ManagedThreadId;
            return String.Format("My call time was {0}.", callDuration.ToString());
        }
    }
    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate string AsyncMethodCaller(int callDuration, out int threadId);
}

...

using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncMain
    {
        static void Main()
        {
            // The asynchronous method puts the thread id here.
            int threadId;

            // Create an instance of the test class.
            AsyncDemo ad = new AsyncDemo();

            // Create the delegate.
            AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);

            // Initiate the asychronous call.
            IAsyncResult result = caller.BeginInvoke(3000,
                out threadId, null, null);

            Thread.Sleep(0);
            Console.WriteLine("Main thread {0} does some work.",
                Thread.CurrentThread.ManagedThreadId);

            // Wait for the WaitHandle to become signaled.
            result.AsyncWaitHandle.WaitOne();

            // Perform additional processing here.
            // Call EndInvoke to retrieve the results.
            string returnValue = caller.EndInvoke(out threadId, result);

            // Close the wait handle.
            result.AsyncWaitHandle.Close();

            Console.WriteLine("The call executed on thread {0}, with return value \"{1}\".",
                threadId, returnValue);
        }
    }
}

/* This example produces output similar to the following:

Main thread 1 does some work.
Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".
 */

using namespace System;
using namespace System::Threading;
using namespace System::Runtime::InteropServices;

namespace Examples {
namespace AdvancedProgramming {
namespace AsynchronousOperations
{
    public ref class AsyncDemo
    {
    public:
        // The method to be executed asynchronously.
        String^ TestMethod(int callDuration, [OutAttribute] int% threadId)
        {
            Console::WriteLine("Test method begins.");
            Thread::Sleep(callDuration);
            threadId = Thread::CurrentThread->ManagedThreadId;
            return String::Format("My call time was {0}.", callDuration);
        }
    };

    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate String^ AsyncMethodCaller(int callDuration, [OutAttribute] int% threadId);
}}}

...

#using <TestMethod.dll>

using namespace System;
using namespace System::Threading;
using namespace Examples::AdvancedProgramming::AsynchronousOperations;

void main()
{
    // The asynchronous method puts the thread id here.
    int threadId;

    // Create an instance of the test class.
    AsyncDemo^ ad = gcnew AsyncDemo();

    // Create the delegate.
    AsyncMethodCaller^ caller = gcnew AsyncMethodCaller(ad, &AsyncDemo::TestMethod);

    // Initiate the asychronous call.
    IAsyncResult^ result = caller->BeginInvoke(3000,
        threadId, nullptr, nullptr);

    Thread::Sleep(0);
    Console::WriteLine("Main thread {0} does some work.",
        Thread::CurrentThread->ManagedThreadId);

    // Wait for the WaitHandle to become signaled.
    result->AsyncWaitHandle->WaitOne();

    // Perform additional processing here.
    // Call EndInvoke to retrieve the results.
    String^ returnValue = caller->EndInvoke(threadId, result);

    // Close the wait handle.
    result->AsyncWaitHandle->Close();

    Console::WriteLine("The call executed on thread {0}, with return value \"{1}\".",
        threadId, returnValue);
}

/* This example produces output similar to the following:

Main thread 1 does some work.
Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IAsyncResult 成员
System 命名空间


IAsyncResult 成员

IAsyncResult 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IAsyncResult 接口

表示异步操作的状态。

IAsyncResult 类型公开以下成员。

名称 说明
页首

参考

IAsyncResult 接口
System 命名空间


IAsyncResult 属性

IAsyncResult 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IAsyncResult 接口

IAsyncResult 类型公开以下成员。

名称 说明
页首

参考

IAsyncResult 接口
System 命名空间


IAsyncResult ..::.AsyncState 属性

IAsyncResult
.
.
::
.
AsyncState 属性
IAsyncResult 接口

获取用户定义的对象，它限定或包含关于异步操作的信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property AsyncState As Object
    Get
Object AsyncState { get; }
property Object^ AsyncState {
    Object^ get ();
}
abstract AsyncState : Object

属性值

类型： System Object
用户定义的对象，它限定或包含关于异步操作的信息。

此属性返回一个对象，该对象是启动异步操作的方法的最后一个参数。

对实现者的说明

实现此属性以允许异步操作的调用方获取在操作开始指定的应用程序定义的对象。

对调用者的说明

可以使用此对象将异步操作的状态信息传递给您提供的 AsyncCallback。

下面的代码示例演示如何使用 AsyncState 属性来向回调方法传递信息。BeginInvoke 方法调用的最后一个参数是格式字符串，回调方法将使用该字符串来设置输出消息的格式。 下面的代码示例演示如何使用 AsyncState 属性来向回调方法传递信息。BeginInvoke 方法调用的最后一个参数是格式字符串，回调方法将使用该字符串来设置输出消息的格式。

此示例包含两个类：包含异步调用的方法的类和包含进行调用的 Main 方法的类。

有关此回调示例的工作方式的更多信息，以及如何使用委托异步调用方法的更多示例，请参见使用异步方式调用同步方法。

Imports System
Imports System.Threading
Imports System.Runtime.InteropServices

Namespace Examples.AdvancedProgramming.AsynchronousOperations
    Public Class AsyncDemo
        ' The method to be executed asynchronously.
        Public Function TestMethod(ByVal callDuration As Integer, _
                <Out> ByRef threadId As Integer) As String
            Console.WriteLine("Test method begins.")
            Thread.Sleep(callDuration)
            threadId = Thread.CurrentThread.ManagedThreadId()
            return String.Format("My call time was {0}.", callDuration.ToString())
        End Function
    End Class

    ' The delegate must have the same signature as the method
    ' it will call asynchronously.
    Public Delegate Function AsyncMethodCaller(ByVal callDuration As Integer, _
        <Out> ByRef threadId As Integer) As String
End Namespace

...

Imports System
Imports System.Threading
Imports System.Runtime.Remoting.Messaging

Namespace Examples.AdvancedProgramming.AsynchronousOperations

    Public Class AsyncMain

        Shared Sub Main()

            ' Create an instance of the test class.
            Dim ad As New AsyncDemo()

            ' Create the delegate.
            Dim caller As New AsyncMethodCaller(AddressOf ad.TestMethod)

            ' The threadId parameter of TestMethod is an <Out> parameter, so
            ' its input value is never used by TestMethod. Therefore, a dummy
            ' variable can be passed to the BeginInvoke call. If the threadId
            ' parameter were a ByRef parameter, it would have to be a class-
            ' level field so that it could be passed to both BeginInvoke and
            ' EndInvoke.
            Dim dummy As Integer = 0

            ' Initiate the asynchronous call, passing three seconds (3000 ms)
            ' for the callDuration parameter of TestMethod; a dummy variable
            ' for the <Out> parameter (threadId); the callback delegate; and
            ' state information that can be retrieved by the callback method.
            ' In this case, the state information is a string that can be used
            ' to format a console message.
            Dim result As IAsyncResult = caller.BeginInvoke(3000, _
                dummy, _
                AddressOf CallbackMethod, _
                "The call executed on thread {0}, with return value ""{1}"".")

            Console.WriteLine("The main thread {0} continues to execute...", _
                Thread.CurrentThread.ManagedThreadId)

            ' The callback is made on a ThreadPool thread. ThreadPool threads
            ' are background threads, which do not keep the application running
            ' if the main thread ends. Comment out the next line to demonstrate
            ' this.
            Thread.Sleep(4000)

            Console.WriteLine("The main thread ends.")
        End Sub

        ' The callback method must have the same signature as the
        ' AsyncCallback delegate.
        Shared Sub CallbackMethod(ByVal ar As IAsyncResult)
            ' Retrieve the delegate.
            Dim result As AsyncResult = CType(ar, AsyncResult)
            Dim caller As AsyncMethodCaller = CType(result.AsyncDelegate, AsyncMethodCaller)

            ' Retrieve the format string that was passed as state
            ' information.
            Dim formatString As String = CType(ar.AsyncState, String)

            ' Define a variable to receive the value of the <Out> parameter.
            ' If the parameter were ByRef rather than <Out> then it would have to
            ' be a class-level field so it could also be passed to BeginInvoke.
            Dim threadId As Integer = 0

            ' Call EndInvoke to retrieve the results.
            Dim returnValue As String = caller.EndInvoke(threadId, ar)

            ' Use the format string to format the output message.
            Console.WriteLine(formatString, threadId, returnValue)
        End Sub
    End Class
End Namespace

' This example produces output similar to the following:
'
'The main thread 1 continues to execute...
'Test method begins.
'The call executed on thread 3, with return value "My call time was 3000.".
'The main thread ends.

using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncDemo
    {
        // The method to be executed asynchronously.
        public string TestMethod(int callDuration, out int threadId)
        {
            Console.WriteLine("Test method begins.");
            Thread.Sleep(callDuration);
            threadId = Thread.CurrentThread.ManagedThreadId;
            return String.Format("My call time was {0}.", callDuration.ToString());
        }
    }
    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate string AsyncMethodCaller(int callDuration, out int threadId);
}

...

using System;
using System.Threading;
using System.Runtime.Remoting.Messaging;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncMain
    {
        static void Main()
        {
            // Create an instance of the test class.
            AsyncDemo ad = new AsyncDemo();

            // Create the delegate.
            AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);

            // The threadId parameter of TestMethod is an out parameter, so
            // its input value is never used by TestMethod. Therefore, a dummy
            // variable can be passed to the BeginInvoke call. If the threadId
            // parameter were a ref parameter, it would have to be a class-
            // level field so that it could be passed to both BeginInvoke and
            // EndInvoke.
            int dummy = 0;

            // Initiate the asynchronous call, passing three seconds (3000 ms)
            // for the callDuration parameter of TestMethod; a dummy variable
            // for the out parameter (threadId); the callback delegate; and
            // state information that can be retrieved by the callback method.
            // In this case, the state information is a string that can be used
            // to format a console message.
            IAsyncResult result = caller.BeginInvoke(3000,
                out dummy,
                new AsyncCallback(CallbackMethod),
                "The call executed on thread {0}, with return value \"{1}\".");

            Console.WriteLine("The main thread {0} continues to execute...",
                Thread.CurrentThread.ManagedThreadId);

            // The callback is made on a ThreadPool thread. ThreadPool threads
            // are background threads, which do not keep the application running
            // if the main thread ends. Comment out the next line to demonstrate
            // this.
            Thread.Sleep(4000);

            Console.WriteLine("The main thread ends.");
        }

        // The callback method must have the same signature as the
        // AsyncCallback delegate.
        static void CallbackMethod(IAsyncResult ar)
        {
            // Retrieve the delegate.
            AsyncResult result = (AsyncResult) ar;
            AsyncMethodCaller caller = (AsyncMethodCaller) result.AsyncDelegate;

            // Retrieve the format string that was passed as state
            // information.
            string formatString = (string) ar.AsyncState;

            // Define a variable to receive the value of the out parameter.
            // If the parameter were ref rather than out then it would have to
            // be a class-level field so it could also be passed to BeginInvoke.
            int threadId = 0;

            // Call EndInvoke to retrieve the results.
            string returnValue = caller.EndInvoke(out threadId, ar);

            // Use the format string to format the output message.
            Console.WriteLine(formatString, threadId, returnValue);
        }
    }
}

/* This example produces output similar to the following:

The main thread 1 continues to execute...
Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".
The main thread ends.
 */

using namespace System;
using namespace System::Threading;
using namespace System::Runtime::InteropServices;

namespace Examples {
namespace AdvancedProgramming {
namespace AsynchronousOperations
{
    public ref class AsyncDemo
    {
    public:
        // The method to be executed asynchronously.
        String^ TestMethod(int callDuration, [OutAttribute] int% threadId)
        {
            Console::WriteLine("Test method begins.");
            Thread::Sleep(callDuration);
            threadId = Thread::CurrentThread->ManagedThreadId;
            return String::Format("My call time was {0}.", callDuration);
        }
    };

    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate String^ AsyncMethodCaller(int callDuration, [OutAttribute] int% threadId);
}}}

...

#using <TestMethod.dll>

using namespace System;
using namespace System::Threading;
using namespace System::Runtime::Remoting::Messaging;
using namespace Examples::AdvancedProgramming::AsynchronousOperations;

// The callback method must have the same signature as the
// AsyncCallback delegate.
void CallbackMethod(IAsyncResult^ ar)
{
    // Retrieve the delegate.
    AsyncResult^ result = (AsyncResult^) ar;
    AsyncMethodCaller^ caller = (AsyncMethodCaller^) result->AsyncDelegate;

    // Retrieve the format string that was passed as state
    // information.
    String^ formatString = (String^) ar->AsyncState;

    // Define a variable to receive the value of the out parameter.
    // If the parameter were ref rather than out then it would have to
    // be a class-level field so it could also be passed to BeginInvoke.
    int threadId = 0;

    // Call EndInvoke to retrieve the results.
    String^ returnValue = caller->EndInvoke(threadId, ar);

    // Use the format string to format the output message.
    Console::WriteLine(formatString, threadId, returnValue);
};

void main()
{
    // Create an instance of the test class.
    AsyncDemo^ ad = gcnew AsyncDemo();

    // Create the delegate.
    AsyncMethodCaller^ caller = gcnew AsyncMethodCaller(ad, &AsyncDemo::TestMethod);

    // The threadId parameter of TestMethod is an out parameter, so
    // its input value is never used by TestMethod. Therefore, a dummy
    // variable can be passed to the BeginInvoke call. If the threadId
    // parameter were a ref parameter, it would have to be a class-
    // level field so that it could be passed to both BeginInvoke and
    // EndInvoke.
    int dummy = 0;

    // Initiate the asynchronous call, passing three seconds (3000 ms)
    // for the callDuration parameter of TestMethod; a dummy variable
    // for the out parameter (threadId); the callback delegate; and
    // state information that can be retrieved by the callback method.
    // In this case, the state information is a string that can be used
    // to format a console message.
    IAsyncResult^ result = caller->BeginInvoke(3000,
        dummy,
        gcnew AsyncCallback(&CallbackMethod),
        "The call executed on thread {0}, with return value \"{1}\".");

    Console::WriteLine("The main thread {0} continues to execute...",
        Thread::CurrentThread->ManagedThreadId);

    // The callback is made on a ThreadPool thread. ThreadPool threads
    // are background threads, which do not keep the application running
    // if the main thread ends. Comment out the next line to demonstrate
    // this.
    Thread::Sleep(4000);
    Console::WriteLine("The main thread ends.");
}

/* This example produces output similar to the following:

The main thread 1 continues to execute...
Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".
The main thread ends.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IAsyncResult 接口
IAsyncResult 成员
System 命名空间
AsyncCallback


IAsyncResult ..::.AsyncWaitHandle 属性

IAsyncResult
.
.
::
.
AsyncWaitHandle 属性
IAsyncResult 接口

获取用于等待异步操作完成的 WaitHandle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property AsyncWaitHandle As WaitHandle
    Get
WaitHandle AsyncWaitHandle { get; }
property WaitHandle^ AsyncWaitHandle {
    WaitHandle^ get ();
}
abstract AsyncWaitHandle : WaitHandle

属性值

类型： System.Threading WaitHandle
用于等待异步操作完成的 WaitHandle。

返回值允许客户端等待异步操作完成，而不是轮询 IsCompleted 直到操作结束。返回值可用于执行 WaitOne、WaitAny 或 WaitAll 操作。 返回值允许客户端等待异步操作完成，而不是轮询 IsCompleted 直到操作结束。返回值可用于执行 WaitOne、WaitAny 或 WaitAll 操作。

公共语言运行时提供若干可等待对象，如 ManualResetEvent、AutoResetEvent 和 Mutex，所有这些对象均镜像 Win32 同步基元。

对实现者的说明

实现 IAsyncResult 的对象直到读取 AsyncWaitHandle 属性时才需要创建 WaitHandle。具体由 IAsyncResult 实施者所选择。但是，如果实施者创建 AsyncWaitHandle，则应由该实施者发出信号说明 WaitHandle 将在合适的时间终止该等待。例如，System.Runtime.Remoting.Messaging..::.AsyncResult 在异步调用的方法返回时会代表调用方结束等待。创建后，AsyncWaitHandle 应保持活动状态，直至用户调用结束异步操作的方法。此时，可以放弃 AsyncWaitHandle 之后的对象。 实现 IAsyncResult 的对象直到读取 AsyncWaitHandle 属性时才需要创建 WaitHandle。具体由 IAsyncResult 实施者所选择。但是，如果实施者创建 AsyncWaitHandle，则应由该实施者发出信号说明 WaitHandle 将在合适的时间终止该等待。例如，System.Runtime.Remoting.Messaging..::.AsyncResult 在异步调用的方法返回时会代表调用方结束等待。创建后，AsyncWaitHandle 应保持活动状态，直至用户调用结束异步操作的方法。此时，可以放弃 AsyncWaitHandle 之后的对象。 实现 IAsyncResult 的对象直到读取 AsyncWaitHandle 属性时才需要创建 WaitHandle。具体由 IAsyncResult 实施者所选择。但是，如果实施者创建 AsyncWaitHandle，则应由该实施者发出信号说明 WaitHandle 将在合适的时间终止该等待。例如，System.Runtime.Remoting.Messaging..::.AsyncResult 在异步调用的方法返回时会代表调用方结束等待。创建后，AsyncWaitHandle 应保持活动状态，直至用户调用结束异步操作的方法。此时，可以放弃 AsyncWaitHandle 之后的对象。 实现 IAsyncResult 的对象直到读取 AsyncWaitHandle 属性时才需要创建 WaitHandle。具体由 IAsyncResult 实施者所选择。但是，如果实施者创建 AsyncWaitHandle，则应由该实施者发出信号说明 WaitHandle 将在合适的时间终止该等待。例如，System.Runtime.Remoting.Messaging..::.AsyncResult 在异步调用的方法返回时会代表调用方结束等待。创建后，AsyncWaitHandle 应保持活动状态，直至用户调用结束异步操作的方法。此时，可以放弃 AsyncWaitHandle 之后的对象。 实现 IAsyncResult 的对象直到读取 AsyncWaitHandle 属性时才需要创建 WaitHandle。具体由 IAsyncResult 实施者所选择。但是，如果实施者创建 AsyncWaitHandle，则应由该实施者发出信号说明 WaitHandle 将在合适的时间终止该等待。例如，System.Runtime.Remoting.Messaging..::.AsyncResult 在异步调用的方法返回时会代表调用方结束等待。创建后，AsyncWaitHandle 应保持活动状态，直至用户调用结束异步操作的方法。此时，可以放弃 AsyncWaitHandle 之后的对象。 实现 IAsyncResult 的对象直到读取 AsyncWaitHandle 属性时才需要创建 WaitHandle。具体由 IAsyncResult 实施者所选择。但是，如果实施者创建 AsyncWaitHandle，则应由该实施者发出信号说明 WaitHandle 将在合适的时间终止该等待。例如，System.Runtime.Remoting.Messaging..::.AsyncResult 在异步调用的方法返回时会代表调用方结束等待。创建后，AsyncWaitHandle 应保持活动状态，直至用户调用结束异步操作的方法。此时，可以放弃 AsyncWaitHandle 之后的对象。

对调用者的说明

等待操作完成（与轮询相对）的客户端使用此属性来获得要等待的同步对象。

说明 说明

使用委托的 BeginInvoke 方法异步调用方法并从产生的 IAsyncResult 获取等待句柄时，建议您通过调用 WaitHandle..::.Close 方法，在使用完等待句柄后关闭它。如果仅释放对等待句柄的所有引用，则在垃圾回收回收等待句柄时会释放系统资源，但是如果显式关闭或释放可释放对象，则垃圾回收工作的效率会更高。有关更多信息，请参见 AsyncResult..::.AsyncWaitHandle 属性。 使用委托的 BeginInvoke 方法异步调用方法并从产生的 IAsyncResult 获取等待句柄时，建议您通过调用 WaitHandle..::.Close 方法，在使用完等待句柄后关闭它。如果仅释放对等待句柄的所有引用，则在垃圾回收回收等待句柄时会释放系统资源，但是如果显式关闭或释放可释放对象，则垃圾回收工作的效率会更高。有关更多信息，请参见 AsyncResult..::.AsyncWaitHandle 属性。 使用委托的 BeginInvoke 方法异步调用方法并从产生的 IAsyncResult 获取等待句柄时，建议您通过调用 WaitHandle..::.Close 方法，在使用完等待句柄后关闭它。如果仅释放对等待句柄的所有引用，则在垃圾回收回收等待句柄时会释放系统资源，但是如果显式关闭或释放可释放对象，则垃圾回收工作的效率会更高。有关更多信息，请参见 AsyncResult..::.AsyncWaitHandle 属性。

下面的示例演示如何使用 AsyncWaitHandle 属性来获取 WaitHandle，以及如何等待对委托的异步调用。异步调用完成时会发出 WaitHandle 信号，您可以通过调用 WaitOne 方法等待它。 下面的示例演示如何使用 AsyncWaitHandle 属性来获取 WaitHandle，以及如何等待对委托的异步调用。异步调用完成时会发出 WaitHandle 信号，您可以通过调用 WaitOne 方法等待它。

此示例包含两个类：包含异步调用的方法的类和包含进行调用的 Main 方法的类。

有关使用委托异步调用方法的更多信息和更多示例，请参见使用异步方式调用同步方法。

Imports System
Imports System.Threading
Imports System.Runtime.InteropServices

Namespace Examples.AdvancedProgramming.AsynchronousOperations
    Public Class AsyncDemo
        ' The method to be executed asynchronously.
        Public Function TestMethod(ByVal callDuration As Integer, _
                <Out> ByRef threadId As Integer) As String
            Console.WriteLine("Test method begins.")
            Thread.Sleep(callDuration)
            threadId = Thread.CurrentThread.ManagedThreadId()
            return String.Format("My call time was {0}.", callDuration.ToString())
        End Function
    End Class

    ' The delegate must have the same signature as the method
    ' it will call asynchronously.
    Public Delegate Function AsyncMethodCaller(ByVal callDuration As Integer, _
        <Out> ByRef threadId As Integer) As String
End Namespace

...

Imports System
Imports System.Threading
Imports System.Runtime.InteropServices

Namespace Examples.AdvancedProgramming.AsynchronousOperations

    Public Class AsyncMain
        Shared Sub Main()
            ' The asynchronous method puts the thread id here.
            Dim threadId As Integer

            ' Create an instance of the test class.
            Dim ad As New AsyncDemo()

            ' Create the delegate.
            Dim caller As New AsyncMethodCaller(AddressOf ad.TestMethod)

            ' Initiate the asynchronous call.
            Dim result As IAsyncResult = caller.BeginInvoke(3000, _
                threadId, Nothing, Nothing)

            Thread.Sleep(0)
            Console.WriteLine("Main thread {0} does some work.", _
                Thread.CurrentThread.ManagedThreadId)
            ' Perform additional processing here and then
            ' wait for the WaitHandle to be signaled.
            result.AsyncWaitHandle.WaitOne()

            ' Call EndInvoke to retrieve the results.
            Dim returnValue As String = caller.EndInvoke(threadId, result)

            ' Close the wait handle.
            result.AsyncWaitHandle.Close()

            Console.WriteLine("The call executed on thread {0}, with return value ""{1}"".", _
                threadId, returnValue)
        End Sub
    End Class
End Namespace

'This example produces output similar to the following:
'
'Main thread 1 does some work.
'Test method begins.
'The call executed on thread 3, with return value "My call time was 3000.".

using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncDemo
    {
        // The method to be executed asynchronously.
        public string TestMethod(int callDuration, out int threadId)
        {
            Console.WriteLine("Test method begins.");
            Thread.Sleep(callDuration);
            threadId = Thread.CurrentThread.ManagedThreadId;
            return String.Format("My call time was {0}.", callDuration.ToString());
        }
    }
    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate string AsyncMethodCaller(int callDuration, out int threadId);
}

...

using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncMain
    {
        static void Main()
        {
            // The asynchronous method puts the thread id here.
            int threadId;

            // Create an instance of the test class.
            AsyncDemo ad = new AsyncDemo();

            // Create the delegate.
            AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);

            // Initiate the asychronous call.
            IAsyncResult result = caller.BeginInvoke(3000,
                out threadId, null, null);

            Thread.Sleep(0);
            Console.WriteLine("Main thread {0} does some work.",
                Thread.CurrentThread.ManagedThreadId);

            // Wait for the WaitHandle to become signaled.
            result.AsyncWaitHandle.WaitOne();

            // Perform additional processing here.
            // Call EndInvoke to retrieve the results.
            string returnValue = caller.EndInvoke(out threadId, result);

            // Close the wait handle.
            result.AsyncWaitHandle.Close();

            Console.WriteLine("The call executed on thread {0}, with return value \"{1}\".",
                threadId, returnValue);
        }
    }
}

/* This example produces output similar to the following:

Main thread 1 does some work.
Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".
 */

using namespace System;
using namespace System::Threading;
using namespace System::Runtime::InteropServices;

namespace Examples {
namespace AdvancedProgramming {
namespace AsynchronousOperations
{
    public ref class AsyncDemo
    {
    public:
        // The method to be executed asynchronously.
        String^ TestMethod(int callDuration, [OutAttribute] int% threadId)
        {
            Console::WriteLine("Test method begins.");
            Thread::Sleep(callDuration);
            threadId = Thread::CurrentThread->ManagedThreadId;
            return String::Format("My call time was {0}.", callDuration);
        }
    };

    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate String^ AsyncMethodCaller(int callDuration, [OutAttribute] int% threadId);
}}}

...

#using <TestMethod.dll>

using namespace System;
using namespace System::Threading;
using namespace Examples::AdvancedProgramming::AsynchronousOperations;

void main()
{
    // The asynchronous method puts the thread id here.
    int threadId;

    // Create an instance of the test class.
    AsyncDemo^ ad = gcnew AsyncDemo();

    // Create the delegate.
    AsyncMethodCaller^ caller = gcnew AsyncMethodCaller(ad, &AsyncDemo::TestMethod);

    // Initiate the asychronous call.
    IAsyncResult^ result = caller->BeginInvoke(3000,
        threadId, nullptr, nullptr);

    Thread::Sleep(0);
    Console::WriteLine("Main thread {0} does some work.",
        Thread::CurrentThread->ManagedThreadId);

    // Wait for the WaitHandle to become signaled.
    result->AsyncWaitHandle->WaitOne();

    // Perform additional processing here.
    // Call EndInvoke to retrieve the results.
    String^ returnValue = caller->EndInvoke(threadId, result);

    // Close the wait handle.
    result->AsyncWaitHandle->Close();

    Console::WriteLine("The call executed on thread {0}, with return value \"{1}\".",
        threadId, returnValue);
}

/* This example produces output similar to the following:

Main thread 1 does some work.
Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IAsyncResult 接口
IAsyncResult 成员
System 命名空间


IAsyncResult ..::.CompletedSynchronously 属性

IAsyncResult
.
.
::
.
CompletedSynchronously 属性
IAsyncResult 接口

获取一个值，该值指示异步操作是否同步完成。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property CompletedSynchronously As Boolean
    Get
bool CompletedSynchronously { get; }
property bool CompletedSynchronously {
    bool get ();
}
abstract CompletedSynchronously : bool

属性值

类型： System Boolean
如果异步操作同步完成，则为 true；否则为 false。

如果在 AsyncCallback 委托中检测到调用同步完成，则启动该异步操作的线程可能是当前线程。

对实现者的说明

IAsyncResult 接口的大多数实施者不会使用此属性，应当返回 false。

对调用者的说明

使用此属性确定异步操作是否同步完成。例如，如果 I/O 请求很小，则此属性可以对异步 I/O 操作返回 true。 使用此属性确定异步操作是否同步完成。例如，如果 I/O 请求很小，则此属性可以对异步 I/O 操作返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IAsyncResult 接口
IAsyncResult 成员
System 命名空间


IAsyncResult ..::.IsCompleted 属性

IAsyncResult
.
.
::
.
IsCompleted 属性
IAsyncResult 接口

获取一个值，该值指示异步操作是否已完成。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property IsCompleted As Boolean
    Get
bool IsCompleted { get; }
property bool IsCompleted {
    bool get ();
}
abstract IsCompleted : bool

属性值

类型： System Boolean
如果操作完成则为 true，否则为 false。

当此属性为 true 时，您可以假定可以放弃为异步操作使用而分配的任何资源，这是安全的。

对实现者的说明

实施者通常返回私有字段或内部测试的值作为此属性的值。

对调用者的说明

轮询操作状态（与等候同步对象相对）的客户端使用此属性来确定操作的状态。

下面的示例演示如何使用 IAsyncResult 的 IsCompleted 属性来发现异步调用何时完成。在这种情况下，使用委托的 BeginInvoke 方法进行异步调用。从服务用户界面的线程进行异步调用时，可以使用 IsCompleted 属性轮询完成。通过轮询完成，调用线程可以在异步调用在 ThreadPool 线程上执行时继续执行。 下面的示例演示如何使用 IAsyncResult 的 IsCompleted 属性来发现异步调用何时完成。在这种情况下，使用委托的 BeginInvoke 方法进行异步调用。从服务用户界面的线程进行异步调用时，可以使用 IsCompleted 属性轮询完成。通过轮询完成，调用线程可以在异步调用在 ThreadPool 线程上执行时继续执行。 下面的示例演示如何使用 IAsyncResult 的 IsCompleted 属性来发现异步调用何时完成。在这种情况下，使用委托的 BeginInvoke 方法进行异步调用。从服务用户界面的线程进行异步调用时，可以使用 IsCompleted 属性轮询完成。通过轮询完成，调用线程可以在异步调用在 ThreadPool 线程上执行时继续执行。 下面的示例演示如何使用 IAsyncResult 的 IsCompleted 属性来发现异步调用何时完成。在这种情况下，使用委托的 BeginInvoke 方法进行异步调用。从服务用户界面的线程进行异步调用时，可以使用 IsCompleted 属性轮询完成。通过轮询完成，调用线程可以在异步调用在 ThreadPool 线程上执行时继续执行。

此示例包含两个类：包含异步调用的方法的类和包含进行调用的 Main 方法的类。

有关使用委托异步调用方法的更多信息和更多示例，请参见使用异步方式调用同步方法。

Imports System
Imports System.Threading
Imports System.Runtime.InteropServices

Namespace Examples.AdvancedProgramming.AsynchronousOperations
    Public Class AsyncDemo
        ' The method to be executed asynchronously.
        Public Function TestMethod(ByVal callDuration As Integer, _
                <Out> ByRef threadId As Integer) As String
            Console.WriteLine("Test method begins.")
            Thread.Sleep(callDuration)
            threadId = Thread.CurrentThread.ManagedThreadId()
            return String.Format("My call time was {0}.", callDuration.ToString())
        End Function
    End Class

    ' The delegate must have the same signature as the method
    ' it will call asynchronously.
    Public Delegate Function AsyncMethodCaller(ByVal callDuration As Integer, _
        <Out> ByRef threadId As Integer) As String
End Namespace

...

Imports System
Imports System.Threading
Imports System.Runtime.InteropServices

Namespace Examples.AdvancedProgramming.AsynchronousOperations

    Public Class AsyncMain
        Shared Sub Main()
            ' The asynchronous method puts the thread id here.
            Dim threadId As Integer

            ' Create an instance of the test class.
            Dim ad As New AsyncDemo()

            ' Create the delegate.
            Dim caller As New AsyncMethodCaller(AddressOf ad.TestMethod)

            ' Initiate the asynchronous call.
            Dim result As IAsyncResult = caller.BeginInvoke(3000, _
                threadId, Nothing, Nothing)

            ' Poll while simulating work.
            While result.IsCompleted = False
                Thread.Sleep(250)
                Console.Write(".")
            End While

            ' Call EndInvoke to retrieve the results.
            Dim returnValue As String = caller.EndInvoke(threadId, result)

            Console.WriteLine(vbCrLf & _
                "The call executed on thread {0}, with return value ""{1}"".", _
                threadId, returnValue)
        End Sub
    End Class
End Namespace

' This example produces output similar to the following:
'
'Test method begins.
'.............
'The call executed on thread 3, with return value "My call time was 3000.".

using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncDemo
    {
        // The method to be executed asynchronously.
        public string TestMethod(int callDuration, out int threadId)
        {
            Console.WriteLine("Test method begins.");
            Thread.Sleep(callDuration);
            threadId = Thread.CurrentThread.ManagedThreadId;
            return String.Format("My call time was {0}.", callDuration.ToString());
        }
    }
    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate string AsyncMethodCaller(int callDuration, out int threadId);
}

...

using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncMain
    {
        static void Main() {
            // The asynchronous method puts the thread id here.
            int threadId;

            // Create an instance of the test class.
            AsyncDemo ad = new AsyncDemo();

            // Create the delegate.
            AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);

            // Initiate the asychronous call.
            IAsyncResult result = caller.BeginInvoke(3000,
                out threadId, null, null);

            // Poll while simulating work.
            while(result.IsCompleted == false) {
                Thread.Sleep(250);
                Console.Write(".");
            }

            // Call EndInvoke to retrieve the results.
            string returnValue = caller.EndInvoke(out threadId, result);

            Console.WriteLine("\nThe call executed on thread {0}, with return value \"{1}\".",
                threadId, returnValue);
        }
    }
}

/* This example produces output similar to the following:

Test method begins.
.............
The call executed on thread 3, with return value "My call time was 3000.".
 */

using namespace System;
using namespace System::Threading;
using namespace System::Runtime::InteropServices;

namespace Examples {
namespace AdvancedProgramming {
namespace AsynchronousOperations
{
    public ref class AsyncDemo
    {
    public:
        // The method to be executed asynchronously.
        String^ TestMethod(int callDuration, [OutAttribute] int% threadId)
        {
            Console::WriteLine("Test method begins.");
            Thread::Sleep(callDuration);
            threadId = Thread::CurrentThread->ManagedThreadId;
            return String::Format("My call time was {0}.", callDuration);
        }
    };

    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate String^ AsyncMethodCaller(int callDuration, [OutAttribute] int% threadId);
}}}

...

#using <TestMethod.dll>

using namespace System;
using namespace System::Threading;
using namespace Examples::AdvancedProgramming::AsynchronousOperations;

void main()
{
    // The asynchronous method puts the thread id here.
    int threadId;

    // Create an instance of the test class.
    AsyncDemo^ ad = gcnew AsyncDemo();

    // Create the delegate.
    AsyncMethodCaller^ caller = gcnew AsyncMethodCaller(ad, &AsyncDemo::TestMethod);

    // Initiate the asychronous call.
    IAsyncResult^ result = caller->BeginInvoke(3000,
        threadId, nullptr, nullptr);

    // Poll while simulating work.
    while(result->IsCompleted == false)
    {
        Thread::Sleep(250);
        Console::Write(".");
    }

    // Call EndInvoke to retrieve the results.
    String^ returnValue = caller->EndInvoke(threadId, result);

    Console::WriteLine("\nThe call executed on thread {0}, with return value \"{1}\".",
        threadId, returnValue);
}

/* This example produces output similar to the following:

Test method begins.
.............
The call executed on thread 3, with return value "My call time was 3000.".
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IAsyncResult 接口
IAsyncResult 成员
System 命名空间


ICloneable 接口

ICloneable 接口
成员

支持克隆，即用与现有实例相同的值创建类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface ICloneable
[ComVisibleAttribute(true)]
public interface ICloneable
[ComVisibleAttribute(true)]
public interface class ICloneable
[<ComVisibleAttribute(true)>]
type ICloneable =  interface end

ICloneable 接口包含一个成员 Clone，它用于支持除 MemberwiseClone 所提供的克隆之外的克隆。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ICloneable 成员
System 命名空间


ICloneable 成员

ICloneable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ICloneable 接口

支持克隆，即用与现有实例相同的值创建类的新实例。

ICloneable 类型公开以下成员。

名称 说明
页首

参考

ICloneable 接口
System 命名空间


ICloneable 方法

ICloneable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ICloneable 接口

ICloneable 类型公开以下成员。

名称 说明
页首

参考

ICloneable 接口
System 命名空间


ICloneable ..::.Clone 方法

ICloneable
.
.
::
.
Clone 方法
ICloneable 接口

创建作为当前实例副本的新对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Clone As Object
Object Clone()
Object^ Clone()
abstract Clone : unit -> Object

返回值

类型： System Object
作为此实例副本的新对象。

Clone 既可作为深层副本实现，也可作为浅表副本实现。在深层副本中，所有的对象都是重复的；而在浅表副本中，只有顶级对象是重复的，并且顶级以下的对象包含引用。 Clone 既可作为深层副本实现，也可作为浅表副本实现。在深层副本中，所有的对象都是重复的；而在浅表副本中，只有顶级对象是重复的，并且顶级以下的对象包含引用。

结果克隆必须与原始实例具有相同的类型或是原始实例的兼容类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ICloneable 接口
ICloneable 成员
System 命名空间


IComparable 接口

IComparable 接口
成员

定义一种特定于类型的通用比较方法，值类型或类通过实现此方法对其实例进行排序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IComparable
[ComVisibleAttribute(true)]
public interface IComparable
[ComVisibleAttribute(true)]
public interface class IComparable
[<ComVisibleAttribute(true)>]
type IComparable =  interface end

此接口由具有可排序值的类型实现。它要求实现类型定义单个方法 CompareTo(Object)，该方法指示当前实例在排序顺序中的位置是位于同一类型的另一个对象之前、之后还是与其位置相同。实例的 IComparable 实现由 Array..::.Sort 和 ArrayList..::.Sort 等方法自动调用。 此接口由具有可排序值的类型实现。它要求实现类型定义单个方法 CompareTo(Object)，该方法指示当前实例在排序顺序中的位置是位于同一类型的另一个对象之前、之后还是与其位置相同。实例的 IComparable 实现由 Array..::.Sort 和 ArrayList..::.Sort 等方法自动调用。 此接口由具有可排序值的类型实现。它要求实现类型定义单个方法 CompareTo(Object)，该方法指示当前实例在排序顺序中的位置是位于同一类型的另一个对象之前、之后还是与其位置相同。实例的 IComparable 实现由 Array..::.Sort 和 ArrayList..::.Sort 等方法自动调用。

CompareTo(Object) 方法的实现必须返回有三个值之一的 Int32，如下表中所示。

Value | 含义
小于零 | 此对象小于 CompareTo 方法指定的对象。
零 | 此对象等于 CompareTo 方法指定的对象。
大于零 | 此对象大于 CompareTo 方法指定的对象。

所有数值类型（如 Int32 和 Double）均实现 IComparable，这一点与 String、Char 和 DateTime 是相同的。此外，自定义类型还应提供自己的 IComparable 实现，以便允许对象实例进行排序。 所有数值类型（如 Int32 和 Double）均实现 IComparable，这一点与 String、Char 和 DateTime 是相同的。此外，自定义类型还应提供自己的 IComparable 实现，以便允许对象实例进行排序。

下面的代码示例说明 IComparable 的实现，以及必需的 CompareTo 方法。

Imports System.Collections

Public Class Temperature
    Implements IComparable
    ' The temperature value
    Protected temperatureF As Double

    Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
        Implements IComparable.CompareTo

        Dim otherTemperature As Temperature = TryCast(obj, Temperature)
        If otherTemperature IsNot Nothing Then
            Return Me.temperatureF.CompareTo(otherTemperature.temperatureF)
        Else
           Throw New ArgumentException("Object is not a Temperature")
        End If
    End Function

    Public Property Fahrenheit() As Double
        Get
            Return temperatureF
        End Get
        Set(ByVal Value As Double)
            Me.temperatureF = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (temperatureF - 32) * (5/9)
        End Get
        Set(ByVal Value As Double)
            Me.temperatureF = (Value * 9/5) + 32
        End Set
    End Property
End Class

Public Module CompareTemperatures
   Public Sub Main()
      Dim temperatures As New ArrayList
      ' Initialize random number generator.
      Dim rnd As New Random()

      ' Generate 10 temperatures between 0 and 100 randomly.
      For ctr As Integer = 1 To 10
         Dim degrees As Integer = rnd.Next(0, 100)
         Dim temp As New Temperature
         temp.Fahrenheit = degrees
         temperatures.Add(temp)
      Next

      ' Sort ArrayList.
      temperatures.Sort()

      For Each temp As Temperature In temperatures
         Console.WriteLine(temp.Fahrenheit)
      Next
   End Sub
End Module
' The example displays the following output to the console (individual
' values may vary because they are randomly generated):
'       2
'       7
'       16
'       17
'       31
'       37
'       58
'       66
'       72
'       95

using System;
using System.Collections;

public class Temperature : IComparable
{
    // The temperature value
    protected double temperatureF;

    public int CompareTo(object obj) {
        Temperature otherTemperature = obj as Temperature;
        if (otherTemperature != null)
            return this.temperatureF.CompareTo(otherTemperature.temperatureF);
        else
           throw new ArgumentException("Object is not a Temperature");
    }

    public double Fahrenheit
    {
        get
        {
            return this.temperatureF;
        }
        set {
            this.temperatureF = value;
        }
    }

    public double Celsius
    {
        get
        {
            return (this.temperatureF - 32) * (5.0/9);
        }
        set
        {
            this.temperatureF = (value * 9.0/5) + 32;
        }
    }
}

public class CompareTemperatures
{
   public static void Main()
   {
      ArrayList temperatures = new ArrayList();
      // Initialize random number generator.
      Random rnd = new Random();

      // Generate 10 temperatures between 0 and 100 randomly.
      for (int ctr = 1; ctr <= 10; ctr++)
      {
         int degrees = rnd.Next(0, 100);
         Temperature temp = new Temperature();
         temp.Fahrenheit = degrees;
         temperatures.Add(temp);
      }

      // Sort ArrayList.
      temperatures.Sort();

      foreach (Temperature temp in temperatures)
         Console.WriteLine(temp.Fahrenheit);

   }
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95

using namespace System;
using namespace System::Collections;

public ref class Temperature: public IComparable {
   /// <summary>
   /// IComparable.CompareTo implementation.
   /// </summary>
protected:
   // The value holder
   Double m_value;

public:
   virtual Int32 CompareTo( Object^ obj ) {
      if ( obj->GetType() == Temperature::typeid ) {
         Temperature^ temp = dynamic_cast<Temperature^>(obj);

         return m_value.CompareTo( temp->m_value );
      }
      throw gcnew ArgumentException(  "object is not a Temperature" );
   }

   property Double Value {
      Double get() {
         return m_value;
      }
      void set( Double value ) {
         m_value = value;
      }
   }

   property Double Celsius  {
      Double get() {
         return (m_value - 32) / 1.8;
      }
      void set( Double value ) {
         m_value = (value * 1.8) + 32;
      }
   }
};

int main()
{
   ArrayList^ temperatures = gcnew ArrayList;
   // Initialize random number generator.
   Random^ rnd = gcnew Random;

   // Generate 10 temperatures between 0 and 100 randomly.
   for (int ctr = 1; ctr <= 10; ctr++)
   {
      int degrees = rnd->Next(0, 100);
      Temperature^ temp = gcnew Temperature;
      temp->Value = degrees;
      temperatures->Add(temp);
   }

   // Sort ArrayList.
   temperatures->Sort();

   for each (Temperature^ temp in temperatures)
      Console::WriteLine(temp->Value);
   return 0;
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IComparable 成员
System 命名空间


IComparable 成员

IComparable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IComparable 接口

定义一种特定于类型的通用比较方法，值类型或类通过实现此方法对其实例进行排序。

IComparable 类型公开以下成员。

名称 说明
页首

参考

IComparable 接口
System 命名空间


IComparable 方法

IComparable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IComparable 接口

IComparable 类型公开以下成员。

名称 说明
页首

参考

IComparable 接口
System 命名空间


IComparable ..::.CompareTo 方法

IComparable
.
.
::
.
CompareTo 方法
IComparable 接口

将当前实例与同一类型的另一个对象进行比较，并返回一个整数，该整数指示当前实例在排序顺序中的位置是位于另一个对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function CompareTo ( _ obj As Object _ ) As Integer
int CompareTo( Object obj )
int CompareTo( Object^ obj )
abstract CompareTo : obj:Object -> int
参数
obj
类型： System Object
与此实例进行比较的对象。
返回值
类型： System Int32
一个值，指示要比较的对象的相对顺序。
返回值的含义如下：
一个值，指示要比较的对象的相对顺序。
返回值的含义如下：
值
含义
小于零
此实例小于
obj
。
零
此实例等于
obj
。
大于零
此实例大于
obj
。
异常 | 条件
ArgumentException | obj 不具有与此实例相同的类型。

CompareTo 方法由具有可排序值的类型实现。它由非泛型集合对象（如 Array..::.Sort）的方法自动调用来对数组中的每个成员进行排序。如果自定义类或结构未实现 IComparable，则其成员将无法排序，并且排序操作会引发 InvalidOperationException。
CompareTo 方法由具有可排序值的类型实现。它由非泛型集合对象（如 Array..::.Sort）的方法自动调用来对数组中的每个成员进行排序。如果自定义类或结构未实现 IComparable，则其成员将无法排序，并且排序操作会引发 InvalidOperationException。
CompareTo 方法由具有可排序值的类型实现。它由非泛型集合对象（如 Array..::.Sort）的方法自动调用来对数组中的每个成员进行排序。如果自定义类或结构未实现 IComparable，则其成员将无法排序，并且排序操作会引发 InvalidOperationException。

此方法只是一个定义，必须由特定的类或值类型实现才能生效。“小于”、“等于”和“大于”这几种比较的含义取决于具体的实现。 此方法只是一个定义，必须由特定的类或值类型实现才能生效。“小于”、“等于”和“大于”这几种比较的含义取决于具体的实现。

根据定义，任何对象与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 相比较都要大，两个 null 引用的比较结果为彼此相等。

参数 obj 必须与实现此接口的类或值类型具有相同的类型；否则将引发 ArgumentException。

对实现者的说明

对于对象 A、B 和 C，以下条件必须为真：

A.CompareTo(A) 必须返回零。

如果 A.CompareTo(B) 返回零，则 B.CompareTo(A) 必须返回零。

如果 A.CompareTo(B) 返回零并且 B.CompareTo(C) 返回零，则 A.CompareTo(C) 必须返回零。

如果 A.CompareTo(B) 返回一个非零值，则 B.CompareTo(A) 必须返回符号相反的值。

如果 A.CompareTo(B) 返回一个不等于零的值 x，并且 B.CompareTo(C) 返回一个与 x 符号相同的值 y，则 A.CompareTo(C) 必须返回与 x 和 y 符号相同的值。

对调用者的说明

使用 CompareTo 方法可确定类的实例的排序。

下面的代码示例说明如何使用 CompareTo 将实现 IComparable 的 Temperature 对象与其他对象进行比较。Temperature 对象只需对 CompareTo 方法的调用进行简单包装即可实现 Int32..::.CompareTo。 下面的代码示例说明如何使用 CompareTo 将实现 IComparable 的 Temperature 对象与其他对象进行比较。Temperature 对象只需对 CompareTo 方法的调用进行简单包装即可实现 Int32..::.CompareTo。

Imports System.Collections

Public Class Temperature
    Implements IComparable
    ' The temperature value
    Protected temperatureF As Double

    Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
        Implements IComparable.CompareTo

        Dim otherTemperature As Temperature = TryCast(obj, Temperature)
        If otherTemperature IsNot Nothing Then
            Return Me.temperatureF.CompareTo(otherTemperature.temperatureF)
        Else
           Throw New ArgumentException("Object is not a Temperature")
        End If
    End Function

    Public Property Fahrenheit() As Double
        Get
            Return temperatureF
        End Get
        Set(ByVal Value As Double)
            Me.temperatureF = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (temperatureF - 32) * (5/9)
        End Get
        Set(ByVal Value As Double)
            Me.temperatureF = (Value * 9/5) + 32
        End Set
    End Property
End Class

Public Module CompareTemperatures
   Public Sub Main()
      Dim temperatures As New ArrayList
      ' Initialize random number generator.
      Dim rnd As New Random()

      ' Generate 10 temperatures between 0 and 100 randomly.
      For ctr As Integer = 1 To 10
         Dim degrees As Integer = rnd.Next(0, 100)
         Dim temp As New Temperature
         temp.Fahrenheit = degrees
         temperatures.Add(temp)
      Next

      ' Sort ArrayList.
      temperatures.Sort()

      For Each temp As Temperature In temperatures
         Console.WriteLine(temp.Fahrenheit)
      Next
   End Sub
End Module
' The example displays the following output to the console (individual
' values may vary because they are randomly generated):
'       2
'       7
'       16
'       17
'       31
'       37
'       58
'       66
'       72
'       95

using System;
using System.Collections;

public class Temperature : IComparable
{
    // The temperature value
    protected double temperatureF;

    public int CompareTo(object obj) {
        Temperature otherTemperature = obj as Temperature;
        if (otherTemperature != null)
            return this.temperatureF.CompareTo(otherTemperature.temperatureF);
        else
           throw new ArgumentException("Object is not a Temperature");
    }

    public double Fahrenheit
    {
        get
        {
            return this.temperatureF;
        }
        set {
            this.temperatureF = value;
        }
    }

    public double Celsius
    {
        get
        {
            return (this.temperatureF - 32) * (5.0/9);
        }
        set
        {
            this.temperatureF = (value * 9.0/5) + 32;
        }
    }
}

public class CompareTemperatures
{
   public static void Main()
   {
      ArrayList temperatures = new ArrayList();
      // Initialize random number generator.
      Random rnd = new Random();

      // Generate 10 temperatures between 0 and 100 randomly.
      for (int ctr = 1; ctr <= 10; ctr++)
      {
         int degrees = rnd.Next(0, 100);
         Temperature temp = new Temperature();
         temp.Fahrenheit = degrees;
         temperatures.Add(temp);
      }

      // Sort ArrayList.
      temperatures.Sort();

      foreach (Temperature temp in temperatures)
         Console.WriteLine(temp.Fahrenheit);

   }
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95

using namespace System;
using namespace System::Collections;

public ref class Temperature: public IComparable {
   /// <summary>
   /// IComparable.CompareTo implementation.
   /// </summary>
protected:
   // The value holder
   Double m_value;

public:
   virtual Int32 CompareTo( Object^ obj ) {
      if ( obj->GetType() == Temperature::typeid ) {
         Temperature^ temp = dynamic_cast<Temperature^>(obj);

         return m_value.CompareTo( temp->m_value );
      }
      throw gcnew ArgumentException(  "object is not a Temperature" );
   }

   property Double Value {
      Double get() {
         return m_value;
      }
      void set( Double value ) {
         m_value = value;
      }
   }

   property Double Celsius  {
      Double get() {
         return (m_value - 32) / 1.8;
      }
      void set( Double value ) {
         m_value = (value * 1.8) + 32;
      }
   }
};

int main()
{
   ArrayList^ temperatures = gcnew ArrayList;
   // Initialize random number generator.
   Random^ rnd = gcnew Random;

   // Generate 10 temperatures between 0 and 100 randomly.
   for (int ctr = 1; ctr <= 10; ctr++)
   {
      int degrees = rnd->Next(0, 100);
      Temperature^ temp = gcnew Temperature;
      temp->Value = degrees;
      temperatures->Add(temp);
   }

   // Sort ArrayList.
   temperatures->Sort();

   for each (Temperature^ temp in temperatures)
      Console::WriteLine(temp->Value);
   return 0;
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IComparable 接口
IComparable 成员
System 命名空间
Object


IComparable <(Of <(T >)>) 接口

IComparable
<
(Of
<
(
T
>
)
>
)
接口
成员

定义由值类型或类实现的通用的比较方法，以为排序实例创建类型特定的比较方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Interface IComparable(Of In T)
public interface IComparable<in T>

generic<typename T>
public interface class IComparable
type IComparable<'T> =  interface end

类型参数

inInininTT

要比较的对象的类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

此接口由值可以排序的类型实现；例如数值或字符串类。值类型或类实现 CompareTo(T) 方法以创建适合排序等目的的类型特定的比较方法。 此接口由值可以排序的类型实现；例如数值或字符串类。值类型或类实现 CompareTo(T) 方法以创建适合排序等目的的类型特定的比较方法。

IComparable<(Of <(T>)>) 接口定义 CompareTo(T) 方法，该方法确定实现类型的实例的排序顺序。IEquatable<(Of <(T>)>) 接口定义 Equals 方法，该方法确定实现类型的实例的相等性。 IComparable<(Of <(T>)>) 接口定义 CompareTo(T) 方法，该方法确定实现类型的实例的排序顺序。IEquatable<(Of <(T>)>) 接口定义 Equals 方法，该方法确定实现类型的实例的相等性。

CompareTo(T) 方法的实现必须返回有三个值之一的 Int32，如下表中所示。

Value | 含义
小于零 | 此对象小于 CompareTo 方法指定的对象。
零 | 此对象等于方法参数。
大于零 | 此对象大于方法参数。

IComparable<(Of <(T>)>) 接口提供强类型的比较方法，以排序泛型集合对象的成员。因此，通常不从开发人员代码直接调用该方法。List<(Of <(T>)>)..::.Sort()()() 和 Add 等方法会自动调用它。 IComparable<(Of <(T>)>) 接口提供强类型的比较方法，以排序泛型集合对象的成员。因此，通常不从开发人员代码直接调用该方法。List<(Of <(T>)>)..::.Sort()()() 和 Add 等方法会自动调用它。 IComparable<(Of <(T>)>) 接口提供强类型的比较方法，以排序泛型集合对象的成员。因此，通常不从开发人员代码直接调用该方法。List<(Of <(T>)>)..::.Sort()()() 和 Add 等方法会自动调用它。

对实现者的说明

用实现此接口的类型替换 IComparable<(Of <(T>)>) 接口的类型参数。

下面的代码示例演示一个简单的 Temperature 对象的 IComparable 实现。该示例创建带有 Temperature 对象键的字符串的 SortedList<(Of <(TKey, TValue>)>) 集合，并将多个温度和字符串对添加到无序列表中。在调用 Add 方法时，SortedList<(Of <(TKey, TValue>)>) 集合使用 IComparable<(Of <(T>)>) 实现对列表项进行排序，然后，这些列表项将按温度的升序显示。 下面的代码示例演示一个简单的 Temperature 对象的 IComparable 实现。该示例创建带有 Temperature 对象键的字符串的 SortedList<(Of <(TKey, TValue>)>) 集合，并将多个温度和字符串对添加到无序列表中。在调用 Add 方法时，SortedList<(Of <(TKey, TValue>)>) 集合使用 IComparable<(Of <(T>)>) 实现对列表项进行排序，然后，这些列表项将按温度的升序显示。 下面的代码示例演示一个简单的 Temperature 对象的 IComparable 实现。该示例创建带有 Temperature 对象键的字符串的 SortedList<(Of <(TKey, TValue>)>) 集合，并将多个温度和字符串对添加到无序列表中。在调用 Add 方法时，SortedList<(Of <(TKey, TValue>)>) 集合使用 IComparable<(Of <(T>)>) 实现对列表项进行排序，然后，这些列表项将按温度的升序显示。

Imports System
Imports System.Collections.Generic

Public Class Temperature
    Implements IComparable(Of Temperature)

    ' Implement the generic CompareTo method. In the Implements statement,
    ' specify the Temperature class for the type parameter of the
    ' generic IComparable interface. Use that type for the parameter
    ' of the CompareTo method.
    '
    Public Overloads Function CompareTo(ByVal other As Temperature) As Integer _
        Implements IComparable(Of Temperature).CompareTo

        ' The temperature comparison depends on the comparison of the
        ' the underlying Double values. Because the CompareTo method is
        ' strongly typed, it is not necessary to test for the correct
        ' object type.
        Return m_value.CompareTo(other.m_value)
    End Function

    ' The underlying temperature value.
    Protected m_value As Double = 0.0

    Public ReadOnly Property Celsius() As Double
        Get
            Return m_value - 273.15
        End Get
    End Property

    Public Property Kelvin() As Double
        Get
            Return m_value
        End Get
        Set(ByVal Value As Double)
            If value < 0.0 Then
                Throw New ArgumentException("Temperature cannot be less than absolute zero.")
            Else
                m_value = Value
            End If
        End Set
    End Property

    Public Sub New(ByVal degreesKelvin As Double)
        Me.Kelvin = degreesKelvin
    End Sub
End Class

Public Class Example
    Public Shared Sub Main()
        Dim temps As New SortedList(Of Temperature, String)

        ' Add entries to the sorted list, out of order.
        temps.Add(New Temperature(2017.15), "Boiling point of Lead")
        temps.Add(New Temperature(0), "Absolute zero")
        temps.Add(New Temperature(273.15), "Freezing point of water")
        temps.Add(New Temperature(5100.15), "Boiling point of Carbon")
        temps.Add(New Temperature(373.15), "Boiling point of water")
        temps.Add(New Temperature(600.65), "Melting point of Lead")

        For Each kvp As KeyValuePair(Of Temperature, String) In temps
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius)
        Next
    End Sub
End Class

' This code example produces the following output:
'
'Absolute zero is -273.15 degrees Celsius.
'Freezing point of water is 0 degrees Celsius.
'Boiling point of water is 100 degrees Celsius.
'Melting point of Lead is 327.5 degrees Celsius.
'Boiling point of Lead is 1744 degrees Celsius.
'Boiling point of Carbon is 4827 degrees Celsius.
'

using System;
using System.Collections.Generic;

public class Temperature : IComparable<Temperature>
{
    // Implement the CompareTo method. For the parameter type, Use
    // the type specified for the type parameter of the generic
    // IComparable interface.
    //
    public int CompareTo(Temperature other)
    {
        // The temperature comparison depends on the comparison of the
        // the underlying Double values. Because the CompareTo method is
        // strongly typed, it is not necessary to test for the correct
        // object type.
        return m_value.CompareTo(other.m_value);
    }

    // The underlying temperature value.
    protected double m_value = 0.0;

    public double Celsius
    {
        get
        {
            return m_value - 273.15;
        }
    }

    public double Kelvin
    {
        get
        {
            return m_value;
        }
        set
        {
            if (value < 0.0)
            {
                throw new ArgumentException("Temperature cannot be less than absolute zero.");
            }
            else
            {
                m_value = value;
            }
        }
    }

    public Temperature(double degreesKelvin)
    {
        this.Kelvin = degreesKelvin;
    }
}

public class Example
{
    public static void Main()
    {
        SortedList<Temperature, string> temps =
            new SortedList<Temperature, string>();

        // Add entries to the sorted list, out of order.
        temps.Add(new Temperature(2017.15), "Boiling point of Lead");
        temps.Add(new Temperature(0), "Absolute zero");
        temps.Add(new Temperature(273.15), "Freezing point of water");
        temps.Add(new Temperature(5100.15), "Boiling point of Carbon");
        temps.Add(new Temperature(373.15), "Boiling point of water");
        temps.Add(new Temperature(600.65), "Melting point of Lead");

        foreach( KeyValuePair<Temperature, string> kvp in temps )
        {
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius);
        }
    }
}

/* This code example produces the following output:

Absolute zero is -273.15 degrees Celsius.
Freezing point of water is 0 degrees Celsius.
Boiling point of water is 100 degrees Celsius.
Melting point of Lead is 327.5 degrees Celsius.
Boiling point of Lead is 1744 degrees Celsius.
Boiling point of Carbon is 4827 degrees Celsius.

*/

#using <System.dll>

using namespace System;
using namespace System::Collections::Generic;

public ref class Temperature: public IComparable<Temperature^> {

protected:
   // The value holder
   Double m_value;

public:
   // Implement the CompareTo method. For the parameter type, Use
   // the type specified for the type parameter of the generic
   // IComparable interface.
   //
   virtual Int32 CompareTo( Temperature^ other ) {

      // The temperature comparison depends on the comparison of the
      // the underlying Double values. Because the CompareTo method is
      // strongly typed, it is not necessary to test for the correct
      // object type.
      return m_value.CompareTo( other->m_value );
   }

   property Double Celsius {
      Double get() {
         return m_value + 273.15;
      }
   }

   property Double Kelvin {
      Double get() {
         return m_value;
      }
      void set( Double value ) {
         if (value < 0)
            throw gcnew ArgumentException("Temperature cannot be less than absolute zero.");
         else
            m_value = value;
      }
   }

   Temperature(Double degreesKelvin) {
      this->Kelvin = degreesKelvin;
   }
};

int main() {
   SortedList<Temperature^, String^>^ temps =
      gcnew SortedList<Temperature^, String^>();

   // Add entries to the sorted list, out of order.
   temps->Add(gcnew Temperature(2017.15), "Boiling point of Lead");
   temps->Add(gcnew Temperature(0), "Absolute zero");
   temps->Add(gcnew Temperature(273.15), "Freezing point of water");
   temps->Add(gcnew Temperature(5100.15), "Boiling point of Carbon");
   temps->Add(gcnew Temperature(373.15), "Boiling point of water");
   temps->Add(gcnew Temperature(600.65), "Melting point of Lead");

   for each( KeyValuePair<Temperature^, String^>^ kvp in temps )
   {
      Console::WriteLine("{0} is {1} degrees Celsius.", kvp->Value, kvp->Key->Celsius);
   }
}

/* This code example productes the following output:

Absolute zero is 273.15 degrees Celsius.
Freezing point of water is 546.3 degrees Celsius.
Boiling point of water is 646.3 degrees Celsius.
Melting point of Lead is 873.8 degrees Celsius.
Boiling point of Lead is 2290.3 degrees Celsius.
Boiling point of Carbon is 5373.3 degrees Celsius.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IComparable T 成员
System 命名空间
IComparable
IEquatable T


IComparable <(Of <(T >)>) 成员

IComparable
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IComparable

定义由值类型或类实现的通用的比较方法，以为排序实例创建类型特定的比较方法。

IComparable T 类型公开以下成员。

名称 说明
页首

参考

IComparable T 接口
System 命名空间


IComparable <(Of <(T >)>) 方法

IComparable
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IComparable

IComparable T 类型公开以下成员。

名称 说明
页首

参考

IComparable T 接口
System 命名空间


IComparable <(Of <(T >)>) ..::.CompareTo 方法

IComparable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
CompareTo 方法
IComparable

比较当前对象和同一类型的另一对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function CompareTo ( _ other As T _ ) As Integer
int CompareTo( T other )
int CompareTo( T other )
abstract CompareTo : other:'T -> int
参数
other
类型：
T
与此对象进行比较的对象。
返回值
类型： System Int32
一个值，指示要比较的对象的相对顺序。
返回值的含义如下：
一个值，指示要比较的对象的相对顺序。
返回值的含义如下：
值
含义
小于零
此对象小于
other
参数。
零
此对象等于
other
。
大于零
此对象大于
other
。

CompareTo 提供强类型的比较方法，以排序泛型集合对象的成员。因此，通常不从开发人员代码直接调用该方法。List<(Of <(T>)>)..::.Sort()()() 和 Add 等方法会自动调用它。
CompareTo 提供强类型的比较方法，以排序泛型集合对象的成员。因此，通常不从开发人员代码直接调用该方法。List<(Of <(T>)>)..::.Sort()()() 和 Add 等方法会自动调用它。
CompareTo 提供强类型的比较方法，以排序泛型集合对象的成员。因此，通常不从开发人员代码直接调用该方法。List<(Of <(T>)>)..::.Sort()()() 和 Add 等方法会自动调用它。

此方法只是一个定义，必须由特定的类或值类型实现才能生效。“小于”、“等于”和“大于”这几种比较的含义取决于具体的实现。 此方法只是一个定义，必须由特定的类或值类型实现才能生效。“小于”、“等于”和“大于”这几种比较的含义取决于具体的实现。

根据定义，任何对象与 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 相比较都要大，两个空引用的比较结果为彼此相等。

对实现者的说明

对于对象 A、B 和 C，以下条件必须为真：

A.CompareTo(A) 必须返回零。

如果 A.CompareTo(B) 返回零，则 B.CompareTo(A) 必须返回零。

如果 A.CompareTo(B) 返回零并且 B.CompareTo(C) 返回零，则 A.CompareTo(C) 必须返回零。

如果 A.CompareTo(B) 返回一个非零值，则 B.CompareTo(A) 必须返回符号相反的值。

如果 A.CompareTo(B) 返回一个不等于零的值 x，并且 B.CompareTo(C) 返回一个与 x 符号相同的值 y，则 A.CompareTo(C) 必须返回与 x 和 y 都符号相同的值。

对调用者的说明

使用 CompareTo 方法可确定类的实例的排序。

下面的代码示例演示一个简单的 Temperature 对象的 IComparable 实现。该示例创建带有 Temperature 对象键的字符串的 SortedList<(Of <(TKey, TValue>)>) 集合，并将多个温度和字符串对添加到无序列表中。在调用 Add 方法时，SortedList<(Of <(TKey, TValue>)>) 集合使用 IComparable<(Of <(T>)>) 实现对列表项进行排序，然后，这些列表项将按温度的升序显示。 下面的代码示例演示一个简单的 Temperature 对象的 IComparable 实现。该示例创建带有 Temperature 对象键的字符串的 SortedList<(Of <(TKey, TValue>)>) 集合，并将多个温度和字符串对添加到无序列表中。在调用 Add 方法时，SortedList<(Of <(TKey, TValue>)>) 集合使用 IComparable<(Of <(T>)>) 实现对列表项进行排序，然后，这些列表项将按温度的升序显示。 下面的代码示例演示一个简单的 Temperature 对象的 IComparable 实现。该示例创建带有 Temperature 对象键的字符串的 SortedList<(Of <(TKey, TValue>)>) 集合，并将多个温度和字符串对添加到无序列表中。在调用 Add 方法时，SortedList<(Of <(TKey, TValue>)>) 集合使用 IComparable<(Of <(T>)>) 实现对列表项进行排序，然后，这些列表项将按温度的升序显示。

Imports System
Imports System.Collections.Generic

Public Class Temperature
    Implements IComparable(Of Temperature)

    ' Implement the generic CompareTo method. In the Implements statement,
    ' specify the Temperature class for the type parameter of the
    ' generic IComparable interface. Use that type for the parameter
    ' of the CompareTo method.
    '
    Public Overloads Function CompareTo(ByVal other As Temperature) As Integer _
        Implements IComparable(Of Temperature).CompareTo

        ' The temperature comparison depends on the comparison of the
        ' the underlying Double values. Because the CompareTo method is
        ' strongly typed, it is not necessary to test for the correct
        ' object type.
        Return m_value.CompareTo(other.m_value)
    End Function

    ' The underlying temperature value.
    Protected m_value As Double = 0.0

    Public ReadOnly Property Celsius() As Double
        Get
            Return m_value - 273.15
        End Get
    End Property

    Public Property Kelvin() As Double
        Get
            Return m_value
        End Get
        Set(ByVal Value As Double)
            If value < 0.0 Then
                Throw New ArgumentException("Temperature cannot be less than absolute zero.")
            Else
                m_value = Value
            End If
        End Set
    End Property

    Public Sub New(ByVal degreesKelvin As Double)
        Me.Kelvin = degreesKelvin
    End Sub
End Class

Public Class Example
    Public Shared Sub Main()
        Dim temps As New SortedList(Of Temperature, String)

        ' Add entries to the sorted list, out of order.
        temps.Add(New Temperature(2017.15), "Boiling point of Lead")
        temps.Add(New Temperature(0), "Absolute zero")
        temps.Add(New Temperature(273.15), "Freezing point of water")
        temps.Add(New Temperature(5100.15), "Boiling point of Carbon")
        temps.Add(New Temperature(373.15), "Boiling point of water")
        temps.Add(New Temperature(600.65), "Melting point of Lead")

        For Each kvp As KeyValuePair(Of Temperature, String) In temps
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius)
        Next
    End Sub
End Class

' This code example produces the following output:
'
'Absolute zero is -273.15 degrees Celsius.
'Freezing point of water is 0 degrees Celsius.
'Boiling point of water is 100 degrees Celsius.
'Melting point of Lead is 327.5 degrees Celsius.
'Boiling point of Lead is 1744 degrees Celsius.
'Boiling point of Carbon is 4827 degrees Celsius.
'

using System;
using System.Collections.Generic;

public class Temperature : IComparable<Temperature>
{
    // Implement the CompareTo method. For the parameter type, Use
    // the type specified for the type parameter of the generic
    // IComparable interface.
    //
    public int CompareTo(Temperature other)
    {
        // The temperature comparison depends on the comparison of the
        // the underlying Double values. Because the CompareTo method is
        // strongly typed, it is not necessary to test for the correct
        // object type.
        return m_value.CompareTo(other.m_value);
    }

    // The underlying temperature value.
    protected double m_value = 0.0;

    public double Celsius
    {
        get
        {
            return m_value - 273.15;
        }
    }

    public double Kelvin
    {
        get
        {
            return m_value;
        }
        set
        {
            if (value < 0.0)
            {
                throw new ArgumentException("Temperature cannot be less than absolute zero.");
            }
            else
            {
                m_value = value;
            }
        }
    }

    public Temperature(double degreesKelvin)
    {
        this.Kelvin = degreesKelvin;
    }
}

public class Example
{
    public static void Main()
    {
        SortedList<Temperature, string> temps =
            new SortedList<Temperature, string>();

        // Add entries to the sorted list, out of order.
        temps.Add(new Temperature(2017.15), "Boiling point of Lead");
        temps.Add(new Temperature(0), "Absolute zero");
        temps.Add(new Temperature(273.15), "Freezing point of water");
        temps.Add(new Temperature(5100.15), "Boiling point of Carbon");
        temps.Add(new Temperature(373.15), "Boiling point of water");
        temps.Add(new Temperature(600.65), "Melting point of Lead");

        foreach( KeyValuePair<Temperature, string> kvp in temps )
        {
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius);
        }
    }
}

/* This code example produces the following output:

Absolute zero is -273.15 degrees Celsius.
Freezing point of water is 0 degrees Celsius.
Boiling point of water is 100 degrees Celsius.
Melting point of Lead is 327.5 degrees Celsius.
Boiling point of Lead is 1744 degrees Celsius.
Boiling point of Carbon is 4827 degrees Celsius.

*/

#using <System.dll>

using namespace System;
using namespace System::Collections::Generic;

public ref class Temperature: public IComparable<Temperature^> {

protected:
   // The value holder
   Double m_value;

public:
   // Implement the CompareTo method. For the parameter type, Use
   // the type specified for the type parameter of the generic
   // IComparable interface.
   //
   virtual Int32 CompareTo( Temperature^ other ) {

      // The temperature comparison depends on the comparison of the
      // the underlying Double values. Because the CompareTo method is
      // strongly typed, it is not necessary to test for the correct
      // object type.
      return m_value.CompareTo( other->m_value );
   }

   property Double Celsius {
      Double get() {
         return m_value + 273.15;
      }
   }

   property Double Kelvin {
      Double get() {
         return m_value;
      }
      void set( Double value ) {
         if (value < 0)
            throw gcnew ArgumentException("Temperature cannot be less than absolute zero.");
         else
            m_value = value;
      }
   }

   Temperature(Double degreesKelvin) {
      this->Kelvin = degreesKelvin;
   }
};

int main() {
   SortedList<Temperature^, String^>^ temps =
      gcnew SortedList<Temperature^, String^>();

   // Add entries to the sorted list, out of order.
   temps->Add(gcnew Temperature(2017.15), "Boiling point of Lead");
   temps->Add(gcnew Temperature(0), "Absolute zero");
   temps->Add(gcnew Temperature(273.15), "Freezing point of water");
   temps->Add(gcnew Temperature(5100.15), "Boiling point of Carbon");
   temps->Add(gcnew Temperature(373.15), "Boiling point of water");
   temps->Add(gcnew Temperature(600.65), "Melting point of Lead");

   for each( KeyValuePair<Temperature^, String^>^ kvp in temps )
   {
      Console::WriteLine("{0} is {1} degrees Celsius.", kvp->Value, kvp->Key->Celsius);
   }
}

/* This code example productes the following output:

Absolute zero is 273.15 degrees Celsius.
Freezing point of water is 546.3 degrees Celsius.
Boiling point of water is 646.3 degrees Celsius.
Melting point of Lead is 873.8 degrees Celsius.
Boiling point of Lead is 2290.3 degrees Celsius.
Boiling point of Carbon is 5373.3 degrees Celsius.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IComparable T 接口
IComparable T 成员
System 命名空间
Object
IComparable


IConvertible 接口

IConvertible 接口
成员

定义特定的方法，这些方法将实现引用或值类型的值转换为具有等效值的公共语言运行时类型。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<CLSCompliantAttribute(False)> _
Public Interface IConvertible
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public interface IConvertible
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public interface class IConvertible
[<ComVisibleAttribute(true)>]
[<CLSCompliantAttribute(false)>]
type IConvertible =  interface end

此接口提供特定的方法，用以将实现类型的实例值转换为具有等效值的公共语言运行时类型。公共语言运行时类型包括 Boolean、SByte、Byte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Single、Double、Decimal、DateTime、Char 和 String。 此接口提供特定的方法，用以将实现类型的实例值转换为具有等效值的公共语言运行时类型。公共语言运行时类型包括 Boolean、SByte、Byte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Single、Double、Decimal、DateTime、Char 和 String。

如果转换为公共语言运行时类型不具有任何意义，特定的接口方法实现则会引发 InvalidCastException。例如，如果该接口在 Boolean 类型上实现，由于没有与 Boolean 类型等效且具有意义的 DateTime，ToDateTime 方法的实现会引发异常。 如果转换为公共语言运行时类型不具有任何意义，特定的接口方法实现则会引发 InvalidCastException。例如，如果该接口在 Boolean 类型上实现，由于没有与 Boolean 类型等效且具有意义的 DateTime，ToDateTime 方法的实现会引发异常。

通常，公共语言运行时通过 Convert 类公开 IConvertible 接口。在接口的显式实现中，公共语言运行时还在内部使用 IConvertible 接口来简化特定的代码，这些代码用于支持 Convert 类和基本公共语言运行时类型中的转换。 通常，公共语言运行时通过 Convert 类公开 IConvertible 接口。在接口的显式实现中，公共语言运行时还在内部使用 IConvertible 接口来简化特定的代码，这些代码用于支持 Convert 类和基本公共语言运行时类型中的转换。

除了 IConvertible 接口之外，.NET Framework 还提供称作类型转换器的类来将用户定义的数据类型转换为其他数据类型。有关更多信息，请参见主题通用类型转换。 除了 IConvertible 接口之外，.NET Framework 还提供称作类型转换器的类来将用户定义的数据类型转换为其他数据类型。有关更多信息，请参见主题通用类型转换。

对实现者的说明

如果实现 IConvertible 接口，则在 Object 参数是您的实现类型的实例并且 Type 参数是公共语言运行时类型的情况下，Convert..::.ChangeType 方法会自动调用您的实现。

大多数转换方法有一个类型为 IFormatProvider 的参数，代表当前区域性 (CultureInfo..::.CurrentCulture) 或特定区域性。大多数情况下，基类型的 IConvertible 实现将忽略此参数。但是，可以选择是否在您的代码中使用它。 大多数转换方法有一个类型为 IFormatProvider 的参数，代表当前区域性 (CultureInfo..::.CurrentCulture) 或特定区域性。大多数情况下，基类型的 IConvertible 实现将忽略此参数。但是，可以选择是否在您的代码中使用它。 大多数转换方法有一个类型为 IFormatProvider 的参数，代表当前区域性 (CultureInfo..::.CurrentCulture) 或特定区域性。大多数情况下，基类型的 IConvertible 实现将忽略此参数。但是，可以选择是否在您的代码中使用它。

下面的代码示例演示 Complex 数字类的 IConvertible 的一个实现，使该类首先可强制转换为 Double，然后调用该 Double 的静态 Convert 成员。

Public Class Complex : Implements IConvertible
   Private x, y As Double

   Public Sub New(ByVal x As Double, ByVal y As Double)
      Me.x = x
      Me.y = y
   End Sub

   Function GetDoubleValue() As Double
      Return Math.Sqrt((x * x + y * y))
   End Function

   ' The remaining code provides IConvertible method implementations.
   Public Function GetTypeCode() As TypeCode Implements IConvertible.GetTypeCode
      Return TypeCode.Object
   End Function

   Function ToBoolean(ByVal provider As IFormatProvider) As Boolean _
            Implements IConvertible.ToBoolean
      Return x <> 0 OrElse y <> 0
   End Function

   Function ToByte(ByVal provider As IFormatProvider) As Byte Implements IConvertible.ToByte
       Return Convert.ToByte(GetDoubleValue())
   End Function

   Function ToChar(ByVal provider As IFormatProvider) As Char Implements IConvertible.ToChar
      Return Convert.ToChar(GetDoubleValue())
   End Function

   Function ToDateTime(ByVal provider As IFormatProvider) As DateTime Implements IConvertible.ToDateTime
      Return Convert.ToDateTime(GetDoubleValue())
   End Function

   Function ToDecimal(ByVal provider As IFormatProvider) As Decimal Implements IConvertible.ToDecimal
      Return Convert.ToDecimal(GetDoubleValue())
   End Function

   Function ToDouble(ByVal provider As IFormatProvider) As Double Implements IConvertible.ToDouble
      Return GetDoubleValue()
   End Function

   Function ToInt16(ByVal provider As IFormatProvider) As Short Implements IConvertible.ToInt16
      Return Convert.ToInt16(GetDoubleValue())
   End Function

   Function ToInt32(ByVal provider As IFormatProvider) As Integer Implements IConvertible.ToInt32
      Return Convert.ToInt32(GetDoubleValue())
   End Function

   Function ToInt64(ByVal provider As IFormatProvider) As Long Implements IConvertible.ToInt64
      Return Convert.ToInt64(GetDoubleValue())
   End Function

   Function ToSByte(ByVal provider As IFormatProvider) As SByte Implements IConvertible.ToSByte
      Return Convert.ToSByte(GetDoubleValue())
   End Function

   Function ToSingle(ByVal provider As IFormatProvider) As Single Implements IConvertible.ToSingle
      Return Convert.ToSingle(GetDoubleValue())
   End Function

   Overloads Function ToString(ByVal provider As IFormatProvider) As String Implements IConvertible.ToString
      Return String.Format("({0}, {1})", x, y)
   End Function

   Function ToType(ByVal conversionType As Type, ByVal provider As IFormatProvider) As Object Implements IConvertible.ToType
      Return Convert.ChangeType(GetDoubleValue(), conversionType)
   End Function

   Function ToUInt16(ByVal provider As IFormatProvider) As UInt16 Implements IConvertible.ToUInt16
      Return Convert.ToUInt16(GetDoubleValue())
   End Function

   Function ToUInt32(ByVal provider As IFormatProvider) As UInt32 Implements IConvertible.ToUInt32
      Return Convert.ToUInt32(GetDoubleValue())
   End Function

   Function ToUInt64(ByVal provider As IFormatProvider) As UInt64 Implements IConvertible.ToUInt64
      Return Convert.ToUInt64(GetDoubleValue())
   End Function
End Class

Public Module Example
   Sub Main()
      Dim testComplex As New Complex(4, 7)

      WriteObjectInfo(testComplex)
      WriteObjectInfo(Convert.ToBoolean(testComplex))
      WriteObjectInfo(Convert.ToDecimal(testComplex))
      WriteObjectInfo(Convert.ToString(testComplex))
   End Sub

   Sub WriteObjectInfo(ByVal testObject As Object)
      Dim typeCode As TypeCode = Type.GetTypeCode(testObject.GetType())

      Select Case typeCode
         Case typeCode.Boolean
            Console.WriteLine("Boolean: {0}", testObject)

         Case typeCode.Double
            Console.WriteLine("Double: {0}", testObject)

         Case Else
            Console.WriteLine("{0}: {1}", typeCode.ToString(), testObject)
      End Select
   End Sub
End Module

using System;

namespace ConsoleApplication2
{

    /// Class that implements IConvertible
    class Complex : IConvertible
    {
        double	x;
        double	y;

        public Complex(double x, double y)
        {
            this.x = x;
            this.y = y;
        }

        public TypeCode GetTypeCode()
        {
            return TypeCode.Object;
        }

        bool IConvertible.ToBoolean(IFormatProvider provider)
        {
            if(	(x != 0.0) || (y != 0.0) )
                return true;
            else
                return false;
        }

        double GetDoubleValue()
        {
            return Math.Sqrt(x*x + y*y);
        }

        byte IConvertible.ToByte(IFormatProvider provider)
        {
            return Convert.ToByte(GetDoubleValue());
        }

        char IConvertible.ToChar(IFormatProvider provider)
        {
            return Convert.ToChar(GetDoubleValue());
        }

        DateTime IConvertible.ToDateTime(IFormatProvider provider)
        {
            return Convert.ToDateTime(GetDoubleValue());
        }

        decimal IConvertible.ToDecimal(IFormatProvider provider)
        {
            return Convert.ToDecimal(GetDoubleValue());
        }

        double IConvertible.ToDouble(IFormatProvider provider)
        {
            return GetDoubleValue();
        }

        short IConvertible.ToInt16(IFormatProvider provider)
        {
            return Convert.ToInt16(GetDoubleValue());
        }

        int IConvertible.ToInt32(IFormatProvider provider)
        {
            return Convert.ToInt32(GetDoubleValue());
        }

        long IConvertible.ToInt64(IFormatProvider provider)
        {
            return Convert.ToInt64(GetDoubleValue());
        }

        sbyte IConvertible.ToSByte(IFormatProvider provider)
        {
            return Convert.ToSByte(GetDoubleValue());
        }

        float IConvertible.ToSingle(IFormatProvider provider)
        {
            return Convert.ToSingle(GetDoubleValue());
        }

        string IConvertible.ToString(IFormatProvider provider)
        {
            return String.Format("({0}, {1})", x, y);
        }

        object IConvertible.ToType(Type conversionType, IFormatProvider provider)
        {
            return Convert.ChangeType(GetDoubleValue(),conversionType);
        }

        ushort IConvertible.ToUInt16(IFormatProvider provider)
        {
            return Convert.ToUInt16(GetDoubleValue());
        }

        uint IConvertible.ToUInt32(IFormatProvider provider)
        {
            return Convert.ToUInt32(GetDoubleValue());
        }

        ulong IConvertible.ToUInt64(IFormatProvider provider)
        {
            return Convert.ToUInt64(GetDoubleValue());
        }

    }

    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {

            Complex		testComplex = new Complex(4,7);

            WriteObjectInfo(testComplex);
            WriteObjectInfo(Convert.ToBoolean(testComplex));
            WriteObjectInfo(Convert.ToDecimal(testComplex));
            WriteObjectInfo(Convert.ToString(testComplex));

        }

        static void WriteObjectInfo(object testObject)
        {
            TypeCode	typeCode = Type.GetTypeCode( testObject.GetType() );

            switch( typeCode )
            {
                case TypeCode.Boolean:
                    Console.WriteLine("Boolean: {0}", testObject);
                    break;

                case TypeCode.Double:
                    Console.WriteLine("Double: {0}", testObject);
                    break;

                default:
                    Console.WriteLine("{0}: {1}", typeCode.ToString(), testObject);
                    break;
            }
        }
    }
}

#using <System.dll>

using namespace System;

/// Class that implements IConvertible
ref class Complex: public IConvertible
{
private:
   double x;
   double y;

public:
   Complex( double x, double y )
   {
      this->x = x;
      this->y = y;
   }

   virtual TypeCode GetTypeCode()
   {
      return TypeCode::Object;
   }

   virtual bool ToBoolean( IFormatProvider^ /*provider*/ ) = IConvertible::ToBoolean
   {
      if ( (x != 0.0) || (y != 0.0) )
            return true;
      else
            return false;
   }

   double GetDoubleValue()
   {
      return Math::Sqrt( x * x + y * y );
   }

   virtual Byte ToByte( IFormatProvider^ /*provider*/ ) = IConvertible::ToByte
   {
      return Convert::ToByte( GetDoubleValue() );
   }

   virtual Char ToChar( IFormatProvider^ /*provider*/ ) = IConvertible::ToChar
   {
      return Convert::ToChar( GetDoubleValue() );
   }

   virtual DateTime ToDateTime( IFormatProvider^ /*provider*/ ) = IConvertible::ToDateTime
   {
      return Convert::ToDateTime( GetDoubleValue() );
   }

   virtual Decimal ToDecimal( IFormatProvider^ /*provider*/ ) = IConvertible::ToDecimal
   {
      return Convert::ToDecimal( GetDoubleValue() );
   }

   virtual double ToDouble( IFormatProvider^ /*provider*/ ) = IConvertible::ToDouble
   {
      return GetDoubleValue();
   }

   virtual short ToInt16( IFormatProvider^ /*provider*/ ) = IConvertible::ToInt16
   {
      return Convert::ToInt16( GetDoubleValue() );
   }

   virtual int ToInt32( IFormatProvider^ /*provider*/ ) = IConvertible::ToInt32
   {
      return Convert::ToInt32( GetDoubleValue() );
   }

   virtual Int64 ToInt64( IFormatProvider^ /*provider*/ ) = IConvertible::ToInt64
   {
      return Convert::ToInt64( GetDoubleValue() );
   }

   virtual signed char ToSByte( IFormatProvider^ /*provider*/ ) = IConvertible::ToSByte
   {
      return Convert::ToSByte( GetDoubleValue() );
   }

   virtual float ToSingle( IFormatProvider^ /*provider*/ ) = IConvertible::ToSingle
   {
      return Convert::ToSingle( GetDoubleValue() );
   }

   virtual String^ ToString( IFormatProvider^ /*provider*/ ) = IConvertible::ToString
   {
      return String::Format( "( {0} , {1} )", x, y );
   }

   virtual Object^ ToType( Type^ conversionType, IFormatProvider^ /*provider*/ ) = IConvertible::ToType
   {
      return Convert::ChangeType( GetDoubleValue(), conversionType );
   }

   virtual UInt16 ToUInt16( IFormatProvider^ /*provider*/ ) = IConvertible::ToUInt16
   {
      return Convert::ToUInt16( GetDoubleValue() );
   }

   virtual UInt32 ToUInt32( IFormatProvider^ /*provider*/ ) = IConvertible::ToUInt32
   {
      return Convert::ToUInt32( GetDoubleValue() );
   }

   virtual UInt64 ToUInt64( IFormatProvider^ /*provider*/ ) = IConvertible::ToUInt64
   {
      return Convert::ToUInt64( GetDoubleValue() );
   }

};

void WriteObjectInfo( Object^ testObject )
{
   TypeCode typeCode = Type::GetTypeCode( testObject->GetType() );
   switch ( typeCode )
   {
      case TypeCode::Boolean:
         Console::WriteLine( "Boolean: {0}", testObject );
         break;

      case TypeCode::Double:
         Console::WriteLine( "Double: {0}", testObject );
         break;

      default:
         Console::WriteLine( "{0}: {1}", typeCode, testObject );
         break;
   }
}

int main()
{
   Complex^ testComplex = gcnew Complex( 4,7 );
   WriteObjectInfo( testComplex );
   WriteObjectInfo( Convert::ToBoolean( testComplex ) );
   WriteObjectInfo( Convert::ToDecimal( testComplex ) );
   WriteObjectInfo( Convert::ToString( testComplex ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 成员
System 命名空间

其他资源

.NET Framework 中的类型转换


IConvertible 成员

IConvertible 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IConvertible 接口

定义特定的方法，这些方法将实现引用或值类型的值转换为具有等效值的公共语言运行时类型。

IConvertible 类型公开以下成员。

名称 说明
页首

参考

IConvertible 接口
System 命名空间


IConvertible 方法

IConvertible 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IConvertible 接口

IConvertible 类型公开以下成员。

名称 说明
页首

参考

IConvertible 接口
System 命名空间


IConvertible ..::.GetTypeCode 方法

IConvertible
.
.
::
.
GetTypeCode 方法
IConvertible 接口

返回此实例的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function GetTypeCode As TypeCode
TypeCode GetTypeCode()
TypeCode GetTypeCode()
abstract GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数，它是实现该接口的类或值类型的 TypeCode。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToBoolean 方法

IConvertible
.
.
::
.
ToBoolean 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的 Boolean 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean
bool ToBoolean(
    IFormatProvider provider
)
bool ToBoolean(
    IFormatProvider^ provider
)
abstract ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Boolean
与此实例的值等效的 Boolean 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToByte 方法

IConvertible
.
.
::
.
ToByte 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将该实例的值转换为等效的 8 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToByte ( _
    provider As IFormatProvider _
) As Byte
byte ToByte(
    IFormatProvider provider
)
unsigned char ToByte(
    IFormatProvider^ provider
)
abstract ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Byte
与该实例的值等效的 8 位无符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToChar 方法

IConvertible
.
.
::
.
ToChar 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToChar ( _
    provider As IFormatProvider _
) As Char
char ToChar(
    IFormatProvider provider
)
wchar_t ToChar(
    IFormatProvider^ provider
)
abstract ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Char
与此实例的值等效的 Unicode 字符。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToDateTime 方法

IConvertible
.
.
::
.
ToDateTime 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的 DateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime
DateTime ToDateTime(
    IFormatProvider provider
)
DateTime ToDateTime(
    IFormatProvider^ provider
)
abstract ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System DateTime
与此实例的值等效的 DateTime 实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToDecimal 方法

IConvertible
.
.
::
.
ToDecimal 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的 Decimal 数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal
decimal ToDecimal(
    IFormatProvider provider
)
Decimal ToDecimal(
    IFormatProvider^ provider
)
abstract ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Decimal
与此实例的值等效的 Decimal 数字。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToDouble 方法

IConvertible
.
.
::
.
ToDouble 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的双精度浮点数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToDouble ( _
    provider As IFormatProvider _
) As Double
double ToDouble(
    IFormatProvider provider
)
double ToDouble(
    IFormatProvider^ provider
)
abstract ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Double
与此实例的值等效的双精度浮点数字。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToInt16 方法

IConvertible
.
.
::
.
ToInt16 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的 16 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToInt16 ( _
    provider As IFormatProvider _
) As Short
short ToInt16(
    IFormatProvider provider
)
short ToInt16(
    IFormatProvider^ provider
)
abstract ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Int16
与此实例的值等效的 16 位有符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToInt32 方法

IConvertible
.
.
::
.
ToInt32 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的 32 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer
int ToInt32(
    IFormatProvider provider
)
int ToInt32(
    IFormatProvider^ provider
)
abstract ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Int32
与此实例的值等效的 32 位有符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToInt64 方法

IConvertible
.
.
::
.
ToInt64 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToInt64 ( _
    provider As IFormatProvider _
) As Long
long ToInt64(
    IFormatProvider provider
)
long long ToInt64(
    IFormatProvider^ provider
)
abstract ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Int64
与此实例的值等效的 64 位有符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToSByte 方法

IConvertible
.
.
::
.
ToSByte 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的 8 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToSByte ( _
    provider As IFormatProvider _
) As SByte
sbyte ToSByte(
    IFormatProvider provider
)
signed char ToSByte(
    IFormatProvider^ provider
)
abstract ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System SByte
与此实例的值等效的 8 位有符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToSingle 方法

IConvertible
.
.
::
.
ToSingle 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的单精度浮点数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToSingle ( _
    provider As IFormatProvider _
) As Single
float ToSingle(
    IFormatProvider provider
)
float ToSingle(
    IFormatProvider^ provider
)
abstract ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Single
与此实例的值等效的单精度浮点数字。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToString 方法

IConvertible
.
.
::
.
ToString 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为等效的 String。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToString ( _
    provider As IFormatProvider _
) As String
string ToString(
    IFormatProvider provider
)
String^ ToString(
    IFormatProvider^ provider
)
abstract ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System String
与此实例的值等效的 String 实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToType 方法

IConvertible
.
.
::
.
ToType 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将此实例的值转换为具有等效值的指定 Type 的 Object。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToType ( _
    conversionType As Type, _
    provider As IFormatProvider _
) As Object
Object ToType(
    Type conversionType,
    IFormatProvider provider
)
Object^ ToType(
    Type^ conversionType,
    IFormatProvider^ provider
)
abstract ToType :
        conversionType:Type *
        provider:IFormatProvider -> Object

参数

conversionType
类型： System Type
要将此实例的值转换为的 Type。
provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System Object
其值与此实例值等效的 conversionType 类型的 Object 实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToUInt16 方法

IConvertible
.
.
::
.
ToUInt16 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将该实例的值转换为等效的 16 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort
ushort ToUInt16(
    IFormatProvider provider
)
unsigned short ToUInt16(
    IFormatProvider^ provider
)
abstract ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System UInt16
与该实例的值等效的 16 位无符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToUInt32 方法

IConvertible
.
.
::
.
ToUInt32 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将该实例的值转换为等效的 32 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger
uint ToUInt32(
    IFormatProvider provider
)
unsigned int ToUInt32(
    IFormatProvider^ provider
)
abstract ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System UInt32
与该实例的值等效的 32 位无符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


IConvertible ..::.ToUInt64 方法

IConvertible
.
.
::
.
ToUInt64 方法
IConvertible 接口

使用指定的区域性特定格式设置信息将该实例的值转换为等效的 64 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong
ulong ToUInt64(
    IFormatProvider provider
)
unsigned long long ToUInt64(
    IFormatProvider^ provider
)
abstract ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
IFormatProvider 接口实现，提供区域性特定的格式设置信息。

返回值

类型： System UInt64
与该实例的值等效的 64 位无符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IConvertible 接口
IConvertible 成员
System 命名空间


ICustomFormatter 接口

ICustomFormatter 接口
成员

定义一种方法，它支持自定义设置对象的值的格式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface ICustomFormatter
[ComVisibleAttribute(true)]
public interface ICustomFormatter
[ComVisibleAttribute(true)]
public interface class ICustomFormatter
[<ComVisibleAttribute(true)>]
type ICustomFormatter =  interface end

ICustomFormatter 接口包含单个方法：ICustomFormatter..::.Format。当此接口由引用或值类型实现时，Format 方法会返回对象值的自定义格式字符串表示形式。 ICustomFormatter 接口包含单个方法：ICustomFormatter..::.Format。当此接口由引用或值类型实现时，Format 方法会返回对象值的自定义格式字符串表示形式。

通常，ICustomFormatter 接口与 IFormatProvider 接口一起实现，用于自定义包含 IFormatProvider 参数的 .NET Framework 字符串格式设置方法的行为。例如，ICustomFormatter 接口可提供传递到 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法的对象值自定义格式设置。 通常，ICustomFormatter 接口与 IFormatProvider 接口一起实现，用于自定义包含 IFormatProvider 参数的 .NET Framework 字符串格式设置方法的行为。例如，ICustomFormatter 接口可提供传递到 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法的对象值自定义格式设置。

提供对象值的自定义的表示形式时，需要下列操作：

  1. 定义一个类，它实现 ICustomFormatter 接口及其单个成员（Format 方法）。

  2. 定义一个类，它实现 IFormatProvider 接口及其单个成员（GetFormat 方法）。GetFormat 方法返回一个 ICustomFormatter 实现的实例。通常，单个类同时实现 ICustomFormatter 和 IFormatProvider。在这种情况下，类的 GetFormat 实现仅返回其自身的实例。 定义一个类，它实现 IFormatProvider 接口及其单个成员（GetFormat 方法）。GetFormat 方法返回一个 ICustomFormatter 实现的实例。通常，单个类同时实现 ICustomFormatter 和 IFormatProvider。在这种情况下，类的 GetFormat 实现仅返回其自身的实例。 定义一个类，它实现 IFormatProvider 接口及其单个成员（GetFormat 方法）。GetFormat 方法返回一个 ICustomFormatter 实现的实例。通常，单个类同时实现 ICustomFormatter 和 IFormatProvider。在这种情况下，类的 GetFormat 实现仅返回其自身的实例。 定义一个类，它实现 IFormatProvider 接口及其单个成员（GetFormat 方法）。GetFormat 方法返回一个 ICustomFormatter 实现的实例。通常，单个类同时实现 ICustomFormatter 和 IFormatProvider。在这种情况下，类的 GetFormat 实现仅返回其自身的实例。

  3. 传递 IFormatProvider 实现作为 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法或可比较方法的 provider 参数。

然后，.NET Framework 方法将使用您的自定义格式设置来替代它自己的格式设置。

对实现者的说明

公共语言运行库将尝试为复合格式字符串中每个格式项使用 ICustomFormatter 实现。因此，可以预期将调用 ICustomFormatter 实现以提供未设计为处理对象或值的格式化服务。在这些情况下，Format 方法必须为该对象或值调用适当的格式设置方法。 公共语言运行库将尝试为复合格式字符串中每个格式项使用 ICustomFormatter 实现。因此，可以预期将调用 ICustomFormatter 实现以提供未设计为处理对象或值的格式化服务。在这些情况下，Format 方法必须为该对象或值调用适当的格式设置方法。 公共语言运行库将尝试为复合格式字符串中每个格式项使用 ICustomFormatter 实现。因此，可以预期将调用 ICustomFormatter 实现以提供未设计为处理对象或值的格式化服务。在这些情况下，Format 方法必须为该对象或值调用适当的格式设置方法。

有两种 ICustomFormatter 实现：内部和扩展。

固有的实现都是为应用程序定义的对象提供自定义格式设置的实现。在这种情况下，您的实现应包括以下内容： 固有的实现都是为应用程序定义的对象提供自定义格式设置的实现。在这种情况下，您的实现应包括以下内容：

  • 定义对象的格式设置的格式字符串的定义。格式化字符串是可选的。通常，“G”或“g”格式字符串定义了常规（或最常用的）格式。但是，您可以随意定义您选择的任何格式字符串。您还可以随意决定它们是否区分大小写。 定义对象的格式设置的格式字符串的定义。格式化字符串是可选的。通常，“G”或“g”格式字符串定义了常规（或最常用的）格式。但是，您可以随意定义您选择的任何格式字符串。您还可以随意决定它们是否区分大小写。 定义对象的格式设置的格式字符串的定义。格式化字符串是可选的。通常，“G”或“g”格式字符串定义了常规（或最常用的）格式。但是，您可以随意定义您选择的任何格式字符串。您还可以随意决定它们是否区分大小写。 定义对象的格式设置的格式字符串的定义。格式化字符串是可选的。通常，“G”或“g”格式字符串定义了常规（或最常用的）格式。但是，您可以随意定义您选择的任何格式字符串。您还可以随意决定它们是否区分大小写。 定义对象的格式设置的格式字符串的定义。格式化字符串是可选的。通常，“G”或“g”格式字符串定义了常规（或最常用的）格式。但是，您可以随意定义您选择的任何格式字符串。您还可以随意决定它们是否区分大小写。

  • 用于确保对象类型传递至 Format 方法的测试是应用程序定义的类型。如果不是，则在存在时，应调用对象的 IFormattable 实现，在不存在时，调用其 ToString 方法。应准备好处理这些方法调用可能会引发的任何异常。 用于确保对象类型传递至 Format 方法的测试是应用程序定义的类型。如果不是，则在存在时，应调用对象的 IFormattable 实现，在不存在时，调用其 ToString 方法。应准备好处理这些方法调用可能会引发的任何异常。 用于确保对象类型传递至 Format 方法的测试是应用程序定义的类型。如果不是，则在存在时，应调用对象的 IFormattable 实现，在不存在时，调用其 ToString 方法。应准备好处理这些方法调用可能会引发的任何异常。

  • 如果您的实现支持格式字符串，则为处理空格式字符串的代码。最常见的方法是将空格式字符串替换为常规格式说明符。 如果您的实现支持格式字符串，则为处理空格式字符串的代码。最常见的方法是将空格式字符串替换为常规格式说明符。

  • 处理实现支持的任何格式字符串的代码。

  • 处理您不支持的格式字符串的代码。最常见的方法是引发 FormatException，尽管您也可以提供默认格式设置。 处理您不支持的格式字符串的代码。最常见的方法是引发 FormatException，尽管您也可以提供默认格式设置。

扩展实现是为有格式设置支持的类型提供自定义格式设置的实现。例如，您可以定义 CustomerNumberFormatter，将整型的格式设置为在特定的数字间具有连字符 。在这种情况下，您的实现应包括以下内容： 扩展实现是为有格式设置支持的类型提供自定义格式设置的实现。例如，您可以定义 CustomerNumberFormatter，将整型的格式设置为在特定的数字间具有连字符 。在这种情况下，您的实现应包括以下内容： 扩展实现是为有格式设置支持的类型提供自定义格式设置的实现。例如，您可以定义 CustomerNumberFormatter，将整型的格式设置为在特定的数字间具有连字符 。在这种情况下，您的实现应包括以下内容：

  • 扩展对象的格式设置的格式字符串的定义。这些格式字符串是必需的，但是它们不能与类型的现有格式字符串冲突。例如，如果您正在扩展 Int32 类型的格式设置，则不应在其他格式说明符中实现“C”、“D”、“E”、“F”和“G”格式说明符。 扩展对象的格式设置的格式字符串的定义。这些格式字符串是必需的，但是它们不能与类型的现有格式字符串冲突。例如，如果您正在扩展 Int32 类型的格式设置，则不应在其他格式说明符中实现“C”、“D”、“E”、“F”和“G”格式说明符。 扩展对象的格式设置的格式字符串的定义。这些格式字符串是必需的，但是它们不能与类型的现有格式字符串冲突。例如，如果您正在扩展 Int32 类型的格式设置，则不应在其他格式说明符中实现“C”、“D”、“E”、“F”和“G”格式说明符。

  • 对象类型传递至 Format 方法的测试是设置扩展名支持的类型。如果不是，则在存在时，调用对象的 IFormattable 实现，在不存在时，调用对象的无参数 ToString 方法。应准备好处理这些方法调用可能会引发的任何异常。 对象类型传递至 Format 方法的测试是设置扩展名支持的类型。如果不是，则在存在时，调用对象的 IFormattable 实现，在不存在时，调用对象的无参数 ToString 方法。应准备好处理这些方法调用可能会引发的任何异常。 对象类型传递至 Format 方法的测试是设置扩展名支持的类型。如果不是，则在存在时，调用对象的 IFormattable 实现，在不存在时，调用对象的无参数 ToString 方法。应准备好处理这些方法调用可能会引发的任何异常。

  • 处理扩展支持的任何格式字符串的代码。

  • 处理扩展不支持的任何格式字符串的代码。这些应传递到该类型的 IFormattable 实现。应准备好处理这些方法调用可能会引发的任何异常。 处理扩展不支持的任何格式字符串的代码。这些应传递到该类型的 IFormattable 实现。应准备好处理这些方法调用可能会引发的任何异常。 处理扩展不支持的任何格式字符串的代码。这些应传递到该类型的 IFormattable 实现。应准备好处理这些方法调用可能会引发的任何异常。

下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。在此示例中国，单个类 IBinaryFormatter 实现 ICustomFormatter 和 IFormatProvider。它的 IFormatProvider..::.GetFormat 方法确定 formatType 参数是否表示 ICustomFormatter 类型。如果是，BinaryFormatter 返回其自身的实例；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。 下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。在此示例中国，单个类 IBinaryFormatter 实现 ICustomFormatter 和 IFormatProvider。它的 IFormatProvider..::.GetFormat 方法确定 formatType 参数是否表示 ICustomFormatter 类型。如果是，BinaryFormatter 返回其自身的实例；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。 下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。在此示例中国，单个类 IBinaryFormatter 实现 ICustomFormatter 和 IFormatProvider。它的 IFormatProvider..::.GetFormat 方法确定 formatType 参数是否表示 ICustomFormatter 类型。如果是，BinaryFormatter 返回其自身的实例；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。 下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。在此示例中国，单个类 IBinaryFormatter 实现 ICustomFormatter 和 IFormatProvider。它的 IFormatProvider..::.GetFormat 方法确定 formatType 参数是否表示 ICustomFormatter 类型。如果是，BinaryFormatter 返回其自身的实例；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。 下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。在此示例中国，单个类 IBinaryFormatter 实现 ICustomFormatter 和 IFormatProvider。它的 IFormatProvider..::.GetFormat 方法确定 formatType 参数是否表示 ICustomFormatter 类型。如果是，BinaryFormatter 返回其自身的实例；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。 下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。在此示例中国，单个类 IBinaryFormatter 实现 ICustomFormatter 和 IFormatProvider。它的 IFormatProvider..::.GetFormat 方法确定 formatType 参数是否表示 ICustomFormatter 类型。如果是，BinaryFormatter 返回其自身的实例；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。 下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。在此示例中国，单个类 IBinaryFormatter 实现 ICustomFormatter 和 IFormatProvider。它的 IFormatProvider..::.GetFormat 方法确定 formatType 参数是否表示 ICustomFormatter 类型。如果是，BinaryFormatter 返回其自身的实例；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。

Imports System.Globalization
Imports System.Numerics

Public Class BinaryFormatter : Implements IFormatProvider, ICustomFormatter
   ' IFormatProvider.GetFormat implementation.
   Public Function GetFormat(formatType As Type) As Object _
                   Implements IFormatProvider.GetFormat
      ' Determine whether custom formatting object is requested.
      If formatType Is GetType(ICustomFormatter) Then
         Return Me
      Else
         Return Nothing
      End If
   End Function

   ' Format number in binary (B), octal (O), or hexadecimal (H).
   Public Function Format(fmt As String, arg As Object, _
                          formatProvider As IFormatProvider) As String _
                   Implements ICustomFormatter.Format

     ' Handle format string.
      Dim base As Integer
      ' Handle null or empty format string, string with precision specifier.
      Dim thisFmt As String = String.Empty
      ' Extract first character of format string (precision specifiers
      ' are not supported by BinaryFormatter).
      If Not String.IsNullOrEmpty(fmt) Then
         thisFmt = CStr(IIf(fmt.Length > 1, fmt.Substring(0, 1), fmt))
      End If

      ' Get a byte array representing the numeric value.
      Dim bytes() As Byte
      If TypeOf(arg) Is SByte Then
         Dim byteString As String = CType(arg, SByte).ToString("X2")
         bytes = New Byte(0) { Byte.Parse(byteString, System.Globalization.NumberStyles.HexNumber ) }
      ElseIf TypeOf(arg) Is Byte Then
         bytes = New Byte(0) { CType(arg, Byte) }
      ElseIf TypeOf(arg) Is Int16 Then
         bytes = BitConverter.GetBytes(CType(arg, Int16))
      ElseIf TypeOf(arg) Is Int32 Then
         bytes = BitConverter.GetBytes(CType(arg, Int32))
      ElseIf TypeOf(arg) Is Int64 Then
         bytes = BitConverter.GetBytes(CType(arg, Int64))
      ElseIf TypeOf(arg) Is UInt16 Then
         bytes = BitConverter.GetBytes(CType(arg, UInt16))
      ElseIf TypeOf(arg) Is UInt32 Then
         bytes = BitConverter.GetBytes(CType(arg, UInt64))
      ElseIf TypeOf(arg) Is UInt64 Then
         bytes = BitConverter.GetBytes(CType(arg, UInt64))
      ElseIf TypeOf(arg) Is BigInteger Then
         bytes = CType(arg, BigInteger).ToByteArray()
      Else
         Try
            Return HandleOtherFormats(fmt, arg)
         Catch e As FormatException
            Throw New FormatException(String.Format("The format of '{0}' is invalid.", fmt), e)
         End Try
      End If

      Select Case thisFmt.ToUpper()
         ' Binary formatting.
         Case "B"
            base = 2
         Case "O"
            base = 8
         Case "H"
            base = 16
         ' Handle unsupported format strings.
         Case Else
            Try
               Return HandleOtherFormats(fmt, arg)
            Catch e As FormatException
               Throw New FormatException(String.Format("The format of '{0}' is invalid.", fmt), e)
            End Try
      End Select

      ' Return a formatted string.
      Dim numericString As String = String.Empty
      For ctr As Integer = bytes.GetUpperBound(0) To bytes.GetLowerBound(0) Step -1
         Dim byteString As String = Convert.ToString(bytes(ctr), base)
         If base = 2 Then
            byteString = New String("0"c, 8 - byteString.Length) + byteString
         ElseIf base = 8 Then
            byteString = New String("0"c, 4 - byteString.Length) + byteString
         ' Base is 16.
         Else
            byteString = New String("0"c, 2 - byteString.Length) + byteString
         End If
         numericString +=  byteString + " "
      Next
      Return numericString.Trim()
   End Function

   Private Function HandleOtherFormats(fmt As String, arg As Object) As String
      If TypeOf arg Is IFormattable Then
         Return DirectCast(arg, IFormattable).ToString(fmt, CultureInfo.CurrentCulture)
      ElseIf arg IsNot Nothing Then
         Return arg.ToString()
      Else
         Return String.Empty
      End If
   End Function
End Class

using System;
using System.Globalization;
using System.Numerics;

public class BinaryFormatter : IFormatProvider, ICustomFormatter
{
   // IFormatProvider.GetFormat implementation.
   public object GetFormat(Type formatType)
   {
      // Determine whether custom formatting object is requested.
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   // Format number in binary (B), octal (O), or hexadecimal (H).
   public string Format(string format, object arg, IFormatProvider formatProvider)
   {
      // Handle format string.
      int baseNumber;
      // Handle null or empty format string, string with precision specifier.
      string thisFmt = String.Empty;
      // Extract first character of format string (precision specifiers
      // are not supported).
      if (! String.IsNullOrEmpty(format))
         thisFmt = format.Length > 1 ? format.Substring(0, 1) : format;

      // Get a byte array representing the numeric value.
      byte[] bytes;
      if (arg is sbyte)
      {
         string byteString = ((sbyte) arg).ToString("X2");
         bytes = new byte[1] { Byte.Parse(byteString, System.Globalization.NumberStyles.HexNumber ) };
      }
      else if (arg is byte) {
         bytes = new byte[1] { (byte) arg };
      }
      else if (arg is short) {
         bytes = BitConverter.GetBytes((short) arg);
      }
      else if (arg is int) {
         bytes = BitConverter.GetBytes((int) arg);
      }
      else if (arg is long) {
         bytes = BitConverter.GetBytes((long) arg);
      }
      else if (arg is ushort) {
         bytes = BitConverter.GetBytes((ushort) arg);
      }
      else if (arg is uint) {
         bytes = BitConverter.GetBytes((uint) arg);
      }
      else if (arg is ulong) {
         bytes = BitConverter.GetBytes((ulong) arg);
      }
      else if (arg is BigInteger) {
         bytes = ((BigInteger) arg).ToByteArray();
      }
      else {
         try {
            return HandleOtherFormats(format, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", format), e);
         }
      }

      switch (thisFmt.ToUpper())
      {
         // Binary formatting.
         case "B":
            baseNumber = 2;
            break;
         case "O":
            baseNumber = 8;
            break;
         case "H":
            baseNumber = 16;
            break;
         // Handle unsupported format strings.
         default:
         try {
            return HandleOtherFormats(format, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", format), e);
         }
      }

      // Return a formatted string.
      string numericString = String.Empty;
      for (int ctr = bytes.GetUpperBound(0); ctr >= bytes.GetLowerBound(0); ctr--)
      {
         string byteString = Convert.ToString(bytes[ctr], baseNumber);
         if (baseNumber == 2)
            byteString = new String('0', 8 - byteString.Length) + byteString;
         else if (baseNumber == 8)
            byteString = new String('0', 4 - byteString.Length) + byteString;
         // Base is 16.
         else
            byteString = new String('0', 2 - byteString.Length) + byteString;

         numericString +=  byteString + " ";
      }
      return numericString.Trim();
   }

   private string HandleOtherFormats(string format, object arg)
   {
      if (arg is IFormattable)
         return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
      else if (arg != null)
         return arg.ToString();
      else
         return String.Empty;
   }
}

然后，通过将 BinaryFormatter 对象作为 Format 方法的 provider 参数传递，BinaryFormatter 可用于提供自定义格式设置，如下例所示。

Public Module Example
   Public Sub Main
      Console.WindowWidth = 100

      Dim byteValue As Byte = 124
      Console.WriteLine(String.Format(New BinaryFormatter(), _
                                      "{0} (binary: {0:B}) (hex: {0:H})", byteValue))

      Dim intValue As Integer = 23045
      Console.WriteLine(String.Format(New BinaryFormatter(), _
                                      "{0} (binary: {0:B}) (hex: {0:H})", intValue))

      Dim ulngValue As ULong = 31906574882
      Console.WriteLine(String.Format(New BinaryFormatter(), _
                                      "{0} {1}   (binary: {0:B}) {1}   (hex: {0:H})", _
                                      ulngValue, vbCrLf))

      Dim bigIntValue As BigInteger = BigInteger.Multiply(Int64.MaxValue, 2)
      Console.WriteLine(String.Format(New BinaryFormatter(), _
                                      "{0} {1}   (binary: {0:B}) {1}   (hex: {0:H})", _
                                      bigIntValue, vbCrLf))
   End Sub
End Module
' The example displays the following output:
'    124 (binary: 01111100) (hex: 7c)
'    23045 (binary: 00000000 00000000 01011010 00000101) (hex: 00 00 5a 05)
'    31906574882
'       (binary: 00000000 00000000 00000000 00000111 01101101 11000111 10110010 00100010)
'       (hex: 00 00 00 07 6d c7 b2 22)
'    18446744073709551614
'       (binary: 00000000 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111110)
'       (hex: 00 ff ff ff ff ff ff ff fe)

public class Example
{
   public static void Main()
   {
      Console.WindowWidth = 100;

      byte byteValue = 124;
      Console.WriteLine(String.Format(new BinaryFormatter(),
                                      "{0} (binary: {0:B}) (hex: {0:H})", byteValue));

      int intValue = 23045;
      Console.WriteLine(String.Format(new BinaryFormatter(),
                                      "{0} (binary: {0:B}) (hex: {0:H})", intValue));

      ulong ulngValue = 31906574882;
      Console.WriteLine(String.Format(new BinaryFormatter(),
                                      "{0}\n   (binary: {0:B})\n   (hex: {0:H})",
                                      ulngValue));

      BigInteger bigIntValue = BigInteger.Multiply(Int64.MaxValue, 2);
      Console.WriteLine(String.Format(new BinaryFormatter(),
                                      "{0}\n   (binary: {0:B})\n   (hex: {0:H})",
                                      bigIntValue));
   }
}
// The example displays the following output:
//    124 (binary: 01111100) (hex: 7c)
//    23045 (binary: 00000000 00000000 01011010 00000101) (hex: 00 00 5a 05)
//    31906574882
//       (binary: 00000000 00000000 00000000 00000111 01101101 11000111 10110010 00100010)
//       (hex: 00 00 00 07 6d c7 b2 22)
//    18446744073709551614
//       (binary: 00000000 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111110)
//       (hex: 00 ff ff ff ff ff ff ff fe)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ICustomFormatter 成员
System 命名空间
IFormatProvider


ICustomFormatter 成员

ICustomFormatter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ICustomFormatter 接口

定义一种方法，它支持自定义设置对象的值的格式。

ICustomFormatter 类型公开以下成员。

名称 说明
页首

参考

ICustomFormatter 接口
System 命名空间


ICustomFormatter 方法

ICustomFormatter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ICustomFormatter 接口

ICustomFormatter 类型公开以下成员。

名称 说明
页首

参考

ICustomFormatter 接口
System 命名空间


ICustomFormatter ..::.Format 方法

ICustomFormatter
.
.
::
.
Format 方法
ICustomFormatter 接口

使用指定的格式和区域性特定格式设置信息将指定对象的值转换为等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Format ( _
    format As String, _
    arg As Object, _
    formatProvider As IFormatProvider _
) As String
string Format(
    string format,
    Object arg,
    IFormatProvider formatProvider
)
String^ Format(
    String^ format,
    Object^ arg,
    IFormatProvider^ formatProvider
)
abstract Format :
        format:string *
        arg:Object *
        formatProvider:IFormatProvider -> string

参数

format
类型： System String
包含格式规范的格式字符串。
arg
类型： System Object
要设置格式的对象。
formatProvider
类型： System IFormatProvider
一个对象，它提供有关当前实例的格式信息。

返回值

类型： System String
arg 的值的字符串表示形式，按照 format 和 formatProvider 的指定来进行格式设置。

ICustomFormatter..::.Format 为回调方法。它被支持自定义格式的方法（如 String..::.Format(IFormatProvider, String, array<Object>[]()[])）调用。对于复合格式字符串中的每个格式项调用该实现一次。例如，在下列语句中，ICustomFormatter..::.Format 方法被调用了三次。
ICustomFormatter..::.Format 为回调方法。它被支持自定义格式的方法（如 String..::.Format(IFormatProvider, String, array<Object>[]()[])）调用。对于复合格式字符串中的每个格式项调用该实现一次。例如，在下列语句中，ICustomFormatter..::.Format 方法被调用了三次。
ICustomFormatter..::.Format 为回调方法。它被支持自定义格式的方法（如 String..::.Format(IFormatProvider, String, array<Object>[]()[])）调用。对于复合格式字符串中的每个格式项调用该实现一次。例如，在下列语句中，ICustomFormatter..::.Format 方法被调用了三次。
ICustomFormatter..::.Format 为回调方法。它被支持自定义格式的方法（如 String..::.Format(IFormatProvider, String, array<Object>[]()[])）调用。对于复合格式字符串中的每个格式项调用该实现一次。例如，在下列语句中，ICustomFormatter..::.Format 方法被调用了三次。

Console.WriteLine(String.Format(New BinaryFormatter(), _
                                "{0} (binary: {0:B}) (hex: {0:H})", byteValue))

Console.WriteLine(String.Format(new BinaryFormatter(),
                                "{0} (binary: {0:B}) (hex: {0:H})", byteValue));

arg 参数是对象列表中的对象，列表中从零开始的位置对应于特殊格式项的索引。

format 参数包含一个格式字符串，该字符串是某个格式项的 formatString 组件。如果格式项没有 formatString 组件，则 format 的值是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则根据 arg 的类型，您可能能够使用您所选择的默认格式规范。 format 参数包含一个格式字符串，该字符串是某个格式项的 formatString 组件。如果格式项没有 formatString 组件，则 format 的值是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则根据 arg 的类型，您可能能够使用您所选择的默认格式规范。 format 参数包含一个格式字符串，该字符串是某个格式项的 formatString 组件。如果格式项没有 formatString 组件，则 format 的值是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则根据 arg 的类型，您可能能够使用您所选择的默认格式规范。

formatProvider 参数是 IFormatProvider 实现，为 arg 提供格式设置。通常，它是 ICustomFormatter 实现的实例。如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则忽略该参数。 formatProvider 参数是 IFormatProvider 实现，为 arg 提供格式设置。通常，它是 ICustomFormatter 实现的实例。如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则忽略该参数。 formatProvider 参数是 IFormatProvider 实现，为 arg 提供格式设置。通常，它是 ICustomFormatter 实现的实例。如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则忽略该参数。

您的 Format 方法实现必须包含以下功能，以使得 .NET Framework 可以提供您不支持的格式设置。如果您的格式方法不支持格式，则确定正在设置格式的对象是否实现 IFormattable 接口。如果实现，请调用该接口的 IFormattable..::.ToString 方法。否则，调用基础对象的默认 Object..::.ToString 方法。下面的代码说明了这种模式。 您的 Format 方法实现必须包含以下功能，以使得 .NET Framework 可以提供您不支持的格式设置。如果您的格式方法不支持格式，则确定正在设置格式的对象是否实现 IFormattable 接口。如果实现，请调用该接口的 IFormattable..::.ToString 方法。否则，调用基础对象的默认 Object..::.ToString 方法。下面的代码说明了这种模式。 您的 Format 方法实现必须包含以下功能，以使得 .NET Framework 可以提供您不支持的格式设置。如果您的格式方法不支持格式，则确定正在设置格式的对象是否实现 IFormattable 接口。如果实现，请调用该接口的 IFormattable..::.ToString 方法。否则，调用基础对象的默认 Object..::.ToString 方法。下面的代码说明了这种模式。 您的 Format 方法实现必须包含以下功能，以使得 .NET Framework 可以提供您不支持的格式设置。如果您的格式方法不支持格式，则确定正在设置格式的对象是否实现 IFormattable 接口。如果实现，请调用该接口的 IFormattable..::.ToString 方法。否则，调用基础对象的默认 Object..::.ToString 方法。下面的代码说明了这种模式。 您的 Format 方法实现必须包含以下功能，以使得 .NET Framework 可以提供您不支持的格式设置。如果您的格式方法不支持格式，则确定正在设置格式的对象是否实现 IFormattable 接口。如果实现，请调用该接口的 IFormattable..::.ToString 方法。否则，调用基础对象的默认 Object..::.ToString 方法。下面的代码说明了这种模式。

If TypeOf arg Is IFormattable Then
   Return DirectCast(arg, IFormattable).ToString(fmt, CultureInfo.CurrentCulture)
ElseIf arg IsNot Nothing Then
   Return arg.ToString()

if (arg is IFormattable)
   return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
else if (arg != null)
   return arg.ToString();

下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。 下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。 下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。 下面的示例通过实现 ICustomFormatter 来允许使用二进制、八进制、十六进制格式表示整数值。它的 ICustomFormatter..::.Format 实现确定格式参数是否是三种受支持的格式字符串（如 "B" 为二进制，"O" 为八进制，"H" 为十六进制） 之一，并相应地设置 arg 参数的格式。否则，如果 arg 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它调用 arg 参数的 IFormattable..::.ToString 实现（如果存在），或者其无参数 ToString 方法（如果不存在）。如果 arg 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 String..::.Empty。

Imports System.Globalization
Imports System.Numerics

Public Class BinaryFormatter : Implements IFormatProvider, ICustomFormatter
   ' IFormatProvider.GetFormat implementation.
   Public Function GetFormat(formatType As Type) As Object _
                   Implements IFormatProvider.GetFormat
      ' Determine whether custom formatting object is requested.
      If formatType Is GetType(ICustomFormatter) Then
         Return Me
      Else
         Return Nothing
      End If
   End Function

   ' Format number in binary (B), octal (O), or hexadecimal (H).
   Public Function Format(fmt As String, arg As Object, _
                          formatProvider As IFormatProvider) As String _
                   Implements ICustomFormatter.Format

     ' Handle format string.
      Dim base As Integer
      ' Handle null or empty format string, string with precision specifier.
      Dim thisFmt As String = String.Empty
      ' Extract first character of format string (precision specifiers
      ' are not supported by BinaryFormatter).
      If Not String.IsNullOrEmpty(fmt) Then
         thisFmt = CStr(IIf(fmt.Length > 1, fmt.Substring(0, 1), fmt))
      End If

      ' Get a byte array representing the numeric value.
      Dim bytes() As Byte
      If TypeOf(arg) Is SByte Then
         Dim byteString As String = CType(arg, SByte).ToString("X2")
         bytes = New Byte(0) { Byte.Parse(byteString, System.Globalization.NumberStyles.HexNumber ) }
      ElseIf TypeOf(arg) Is Byte Then
         bytes = New Byte(0) { CType(arg, Byte) }
      ElseIf TypeOf(arg) Is Int16 Then
         bytes = BitConverter.GetBytes(CType(arg, Int16))
      ElseIf TypeOf(arg) Is Int32 Then
         bytes = BitConverter.GetBytes(CType(arg, Int32))
      ElseIf TypeOf(arg) Is Int64 Then
         bytes = BitConverter.GetBytes(CType(arg, Int64))
      ElseIf TypeOf(arg) Is UInt16 Then
         bytes = BitConverter.GetBytes(CType(arg, UInt16))
      ElseIf TypeOf(arg) Is UInt32 Then
         bytes = BitConverter.GetBytes(CType(arg, UInt64))
      ElseIf TypeOf(arg) Is UInt64 Then
         bytes = BitConverter.GetBytes(CType(arg, UInt64))
      ElseIf TypeOf(arg) Is BigInteger Then
         bytes = CType(arg, BigInteger).ToByteArray()
      Else
         Try
            Return HandleOtherFormats(fmt, arg)
         Catch e As FormatException
            Throw New FormatException(String.Format("The format of '{0}' is invalid.", fmt), e)
         End Try
      End If

      Select Case thisFmt.ToUpper()
         ' Binary formatting.
         Case "B"
            base = 2
         Case "O"
            base = 8
         Case "H"
            base = 16
         ' Handle unsupported format strings.
         Case Else
            Try
               Return HandleOtherFormats(fmt, arg)
            Catch e As FormatException
               Throw New FormatException(String.Format("The format of '{0}' is invalid.", fmt), e)
            End Try
      End Select

      ' Return a formatted string.
      Dim numericString As String = String.Empty
      For ctr As Integer = bytes.GetUpperBound(0) To bytes.GetLowerBound(0) Step -1
         Dim byteString As String = Convert.ToString(bytes(ctr), base)
         If base = 2 Then
            byteString = New String("0"c, 8 - byteString.Length) + byteString
         ElseIf base = 8 Then
            byteString = New String("0"c, 4 - byteString.Length) + byteString
         ' Base is 16.
         Else
            byteString = New String("0"c, 2 - byteString.Length) + byteString
         End If
         numericString +=  byteString + " "
      Next
      Return numericString.Trim()
   End Function

   Private Function HandleOtherFormats(fmt As String, arg As Object) As String
      If TypeOf arg Is IFormattable Then
         Return DirectCast(arg, IFormattable).ToString(fmt, CultureInfo.CurrentCulture)
      ElseIf arg IsNot Nothing Then
         Return arg.ToString()
      Else
         Return String.Empty
      End If
   End Function
End Class

using System;
using System.Globalization;
using System.Numerics;

public class BinaryFormatter : IFormatProvider, ICustomFormatter
{
   // IFormatProvider.GetFormat implementation.
   public object GetFormat(Type formatType)
   {
      // Determine whether custom formatting object is requested.
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   // Format number in binary (B), octal (O), or hexadecimal (H).
   public string Format(string format, object arg, IFormatProvider formatProvider)
   {
      // Handle format string.
      int baseNumber;
      // Handle null or empty format string, string with precision specifier.
      string thisFmt = String.Empty;
      // Extract first character of format string (precision specifiers
      // are not supported).
      if (! String.IsNullOrEmpty(format))
         thisFmt = format.Length > 1 ? format.Substring(0, 1) : format;

      // Get a byte array representing the numeric value.
      byte[] bytes;
      if (arg is sbyte)
      {
         string byteString = ((sbyte) arg).ToString("X2");
         bytes = new byte[1] { Byte.Parse(byteString, System.Globalization.NumberStyles.HexNumber ) };
      }
      else if (arg is byte) {
         bytes = new byte[1] { (byte) arg };
      }
      else if (arg is short) {
         bytes = BitConverter.GetBytes((short) arg);
      }
      else if (arg is int) {
         bytes = BitConverter.GetBytes((int) arg);
      }
      else if (arg is long) {
         bytes = BitConverter.GetBytes((long) arg);
      }
      else if (arg is ushort) {
         bytes = BitConverter.GetBytes((ushort) arg);
      }
      else if (arg is uint) {
         bytes = BitConverter.GetBytes((uint) arg);
      }
      else if (arg is ulong) {
         bytes = BitConverter.GetBytes((ulong) arg);
      }
      else if (arg is BigInteger) {
         bytes = ((BigInteger) arg).ToByteArray();
      }
      else {
         try {
            return HandleOtherFormats(format, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", format), e);
         }
      }

      switch (thisFmt.ToUpper())
      {
         // Binary formatting.
         case "B":
            baseNumber = 2;
            break;
         case "O":
            baseNumber = 8;
            break;
         case "H":
            baseNumber = 16;
            break;
         // Handle unsupported format strings.
         default:
         try {
            return HandleOtherFormats(format, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", format), e);
         }
      }

      // Return a formatted string.
      string numericString = String.Empty;
      for (int ctr = bytes.GetUpperBound(0); ctr >= bytes.GetLowerBound(0); ctr--)
      {
         string byteString = Convert.ToString(bytes[ctr], baseNumber);
         if (baseNumber == 2)
            byteString = new String('0', 8 - byteString.Length) + byteString;
         else if (baseNumber == 8)
            byteString = new String('0', 4 - byteString.Length) + byteString;
         // Base is 16.
         else
            byteString = new String('0', 2 - byteString.Length) + byteString;

         numericString +=  byteString + " ";
      }
      return numericString.Trim();
   }

   private string HandleOtherFormats(string format, object arg)
   {
      if (arg is IFormattable)
         return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
      else if (arg != null)
         return arg.ToString();
      else
         return String.Empty;
   }
}

然后，通过将 BinaryFormatter 对象作为 Format 方法的 provider 参数传递，BinaryFormatter 可用于提供自定义格式设置，如下例所示。

Public Module Example
   Public Sub Main
      Console.WindowWidth = 100

      Dim byteValue As Byte = 124
      Console.WriteLine(String.Format(New BinaryFormatter(), _
                                      "{0} (binary: {0:B}) (hex: {0:H})", byteValue))

      Dim intValue As Integer = 23045
      Console.WriteLine(String.Format(New BinaryFormatter(), _
                                      "{0} (binary: {0:B}) (hex: {0:H})", intValue))

      Dim ulngValue As ULong = 31906574882
      Console.WriteLine(String.Format(New BinaryFormatter(), _
                                      "{0} {1}   (binary: {0:B}) {1}   (hex: {0:H})", _
                                      ulngValue, vbCrLf))

      Dim bigIntValue As BigInteger = BigInteger.Multiply(Int64.MaxValue, 2)
      Console.WriteLine(String.Format(New BinaryFormatter(), _
                                      "{0} {1}   (binary: {0:B}) {1}   (hex: {0:H})", _
                                      bigIntValue, vbCrLf))
   End Sub
End Module
' The example displays the following output:
'    124 (binary: 01111100) (hex: 7c)
'    23045 (binary: 00000000 00000000 01011010 00000101) (hex: 00 00 5a 05)
'    31906574882
'       (binary: 00000000 00000000 00000000 00000111 01101101 11000111 10110010 00100010)
'       (hex: 00 00 00 07 6d c7 b2 22)
'    18446744073709551614
'       (binary: 00000000 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111110)
'       (hex: 00 ff ff ff ff ff ff ff fe)

public class Example
{
   public static void Main()
   {
      Console.WindowWidth = 100;

      byte byteValue = 124;
      Console.WriteLine(String.Format(new BinaryFormatter(),
                                      "{0} (binary: {0:B}) (hex: {0:H})", byteValue));

      int intValue = 23045;
      Console.WriteLine(String.Format(new BinaryFormatter(),
                                      "{0} (binary: {0:B}) (hex: {0:H})", intValue));

      ulong ulngValue = 31906574882;
      Console.WriteLine(String.Format(new BinaryFormatter(),
                                      "{0}\n   (binary: {0:B})\n   (hex: {0:H})",
                                      ulngValue));

      BigInteger bigIntValue = BigInteger.Multiply(Int64.MaxValue, 2);
      Console.WriteLine(String.Format(new BinaryFormatter(),
                                      "{0}\n   (binary: {0:B})\n   (hex: {0:H})",
                                      bigIntValue));
   }
}
// The example displays the following output:
//    124 (binary: 01111100) (hex: 7c)
//    23045 (binary: 00000000 00000000 01011010 00000101) (hex: 00 00 5a 05)
//    31906574882
//       (binary: 00000000 00000000 00000000 00000111 01101101 11000111 10110010 00100010)
//       (hex: 00 00 00 07 6d c7 b2 22)
//    18446744073709551614
//       (binary: 00000000 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111110)
//       (hex: 00 ff ff ff ff ff ff ff fe)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ICustomFormatter 接口
ICustomFormatter 成员
System 命名空间
IFormattable

其他资源

格式化类型
复合格式


IDisposable 接口

IDisposable 接口
成员

定义一种释放分配的资源的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IDisposable
[ComVisibleAttribute(true)]
public interface IDisposable
[ComVisibleAttribute(true)]
public interface class IDisposable
[<ComVisibleAttribute(true)>]
type IDisposable =  interface end

此接口的主要用途是释放非托管资源。当不再使用托管对象时，垃圾回收器会自动释放分配给该对象的内存。但无法预测进行垃圾回收的时间。另外，垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知。 此接口的主要用途是释放非托管资源。当不再使用托管对象时，垃圾回收器会自动释放分配给该对象的内存。但无法预测进行垃圾回收的时间。另外，垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知。 此接口的主要用途是释放非托管资源。当不再使用托管对象时，垃圾回收器会自动释放分配给该对象的内存。但无法预测进行垃圾回收的时间。另外，垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知。 此接口的主要用途是释放非托管资源。当不再使用托管对象时，垃圾回收器会自动释放分配给该对象的内存。但无法预测进行垃圾回收的时间。另外，垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知。

将此接口的 Dispose 方法与垃圾回收器一起使用来显式释放非托管资源。当不再需要对象时，对象的使用者可以调用此方法。 将此接口的 Dispose 方法与垃圾回收器一起使用来显式释放非托管资源。当不再需要对象时，对象的使用者可以调用此方法。

重要说明 重要事项

C++ 程序员应当阅读 Destructors and Finalizers in Visual C++。在 .NET Framework 版本中，C++ 编译器为实现资源的确定释放提供支持，同时不允许 Dispose 方法的直接实现。 C++ 程序员应当阅读 Destructors and Finalizers in Visual C++。在 .NET Framework 版本中，C++ 编译器为实现资源的确定释放提供支持，同时不允许 Dispose 方法的直接实现。

向现有类添加 IDisposable 接口是重大的更改，因为这更改了类的语义。

有关如何使用此接口和 Object..::.Finalize 方法的详细讨论，请参见垃圾回收和实现 Dispose 方法主题。

调用 IDisposable 接口

在调用可实现 IDisposable 接口的类时，请使用 try/finally 模式来确保非托管资源能够释放出来，即使应用程序因出现异常而中断也是如此。

有关 try/finally 模式的更多信息，请参见 Try...Catch...Finally 语句 (Visual Basic)、try-finally (C# Reference)或 The try-finally Statement。

请注意，您可以使用 using 语句（在 Visual Basic 中为 Using）来代替 try/finally 模式。有关更多信息，请参见 Using 语句 (Visual Basic) 文档或 using 语句（C# 参考） 文档。 请注意，您可以使用 using 语句（在 Visual Basic 中为 Using）来代替 try/finally 模式。有关更多信息，请参见 Using 语句 (Visual Basic) 文档或 using 语句（C# 参考） 文档。

下面的示例演示如何创建用来实现 IDisposable 接口的资源类。

Imports System
Imports System.ComponentModel

' The following example demonstrates how to create
' a resource class that implements the IDisposable interface
' and the IDisposable.Dispose method.
Public Class DisposeExample

   ' A class that implements IDisposable.
   ' By implementing IDisposable, you are announcing that
   ' instances of this type allocate scarce resources.
   Public Class MyResource
      Implements IDisposable
      ' Pointer to an external unmanaged resource.
      Private handle As IntPtr
      ' Other managed resource this class uses.
      Private component As component
      ' Track whether Dispose has been called.
      Private disposed As Boolean = False

      ' The class constructor.
      Public Sub New(ByVal handle As IntPtr)
         Me.handle = handle
      End Sub

      ' Implement IDisposable.
      ' Do not make this method virtual.
      ' A derived class should not be able to override this method.
      Public Overloads Sub Dispose() Implements IDisposable.Dispose
         Dispose(True)
         ' This object will be cleaned up by the Dispose method.
         ' Therefore, you should call GC.SupressFinalize to
         ' take this object off the finalization queue
         ' and prevent finalization code for this object
         ' from executing a second time.
         GC.SuppressFinalize(Me)
      End Sub

      ' Dispose(bool disposing) executes in two distinct scenarios.
      ' If disposing equals true, the method has been called directly
      ' or indirectly by a user's code. Managed and unmanaged resources
      ' can be disposed.
      ' If disposing equals false, the method has been called by the
      ' runtime from inside the finalizer and you should not reference
      ' other objects. Only unmanaged resources can be disposed.
      Private Overloads Sub Dispose(ByVal disposing As Boolean)
         ' Check to see if Dispose has already been called.
         If Not Me.disposed Then
            ' If disposing equals true, dispose all managed
            ' and unmanaged resources.
            If disposing Then
               ' Dispose managed resources.
               component.Dispose()
            End If

            ' Call the appropriate methods to clean up
            ' unmanaged resources here.
            ' If disposing is false,
            ' only the following code is executed.
            CloseHandle(handle)
            handle = IntPtr.Zero

            ' Note disposing has been done.
            disposed = True

         End If
      End Sub

      ' Use interop to call the method necessary
      ' to clean up the unmanaged resource.
      <System.Runtime.InteropServices.DllImport("Kernel32")> _
      Private Shared Function CloseHandle(ByVal handle As IntPtr) As [Boolean]
      End Function

      ' This finalizer will run only if the Dispose method
      ' does not get called.
      ' It gives your base class the opportunity to finalize.
      ' Do not provide finalize methods in types derived from this class.
      Protected Overrides Sub Finalize()
         ' Do not re-create Dispose clean-up code here.
         ' Calling Dispose(false) is optimal in terms of
         ' readability and maintainability.
         Dispose(False)
         MyBase.Finalize()
      End Sub
   End Class

   Public Shared Sub Main()
      ' Insert code here to create
      ' and use the MyResource object.
   End Sub

End Class

using System;
using System.ComponentModel;

// The following example demonstrates how to create
// a resource class that implements the IDisposable interface
// and the IDisposable.Dispose method.

public class DisposeExample
{
    // A base class that implements IDisposable.
    // By implementing IDisposable, you are announcing that
    // instances of this type allocate scarce resources.
    public class MyResource: IDisposable
    {
        // Pointer to an external unmanaged resource.
        private IntPtr handle;
        // Other managed resource this class uses.
        private Component component = new Component();
        // Track whether Dispose has been called.
        private bool disposed = false;

        // The class constructor.
        public MyResource(IntPtr handle)
        {
            this.handle = handle;
        }

        // Implement IDisposable.
        // Do not make this method virtual.
        // A derived class should not be able to override this method.
        public void Dispose()
        {
            Dispose(true);
            // This object will be cleaned up by the Dispose method.
            // Therefore, you should call GC.SupressFinalize to
            // take this object off the finalization queue
            // and prevent finalization code for this object
            // from executing a second time.
            GC.SuppressFinalize(this);
        }

        // Dispose(bool disposing) executes in two distinct scenarios.
        // If disposing equals true, the method has been called directly
        // or indirectly by a user's code. Managed and unmanaged resources
        // can be disposed.
        // If disposing equals false, the method has been called by the
        // runtime from inside the finalizer and you should not reference
        // other objects. Only unmanaged resources can be disposed.
        private void Dispose(bool disposing)
        {
            // Check to see if Dispose has already been called.
            if(!this.disposed)
            {
                // If disposing equals true, dispose all managed
                // and unmanaged resources.
                if(disposing)
                {
                    // Dispose managed resources.
                    component.Dispose();
                }

                // Call the appropriate methods to clean up
                // unmanaged resources here.
                // If disposing is false,
                // only the following code is executed.
                CloseHandle(handle);
                handle = IntPtr.Zero;

                // Note disposing has been done.
                disposed = true;

            }
        }

        // Use interop to call the method necessary
        // to clean up the unmanaged resource.
        [System.Runtime.InteropServices.DllImport("Kernel32")]
        private extern static Boolean CloseHandle(IntPtr handle);

        // Use C# destructor syntax for finalization code.
        // This destructor will run only if the Dispose method
        // does not get called.
        // It gives your base class the opportunity to finalize.
        // Do not provide destructors in types derived from this class.
        ~MyResource()
        {
            // Do not re-create Dispose clean-up code here.
            // Calling Dispose(false) is optimal in terms of
            // readability and maintainability.
            Dispose(false);
        }
    }
    public static void Main()
    {
        // Insert code here to create
        // and use the MyResource object.
    }
}

#using <System.dll>
#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::ComponentModel;
using namespace System::Windows::Forms;

// The following example demonstrates how to create a class that
// implements the IDisposable interface and the IDisposable.Dispose
// method with finalization to clean up unmanaged resources.
//
public ref class MyResource: public IDisposable
{
private:

   // Pointer to an external unmanaged resource.
   IntPtr handle;

   // A managed resource this class uses.
   Component^ component;

   // Track whether Dispose has been called.
   bool disposed;

public:
   // The class constructor.
   MyResource( IntPtr handle, Component^ component )
   {
      this->handle = handle;
      this->component = component;
      disposed = false;
   }

   // This method is called if the user explicitly disposes of the
   // object (by calling the Dispose method in other managed languages,
   // or the destructor in C++). The compiler emits as a call to
   // GC::SuppressFinalize( this ) for you, so there is no need to
   // call it here.
   ~MyResource()
   {
      // Dispose of managed resources.
      component->~Component();

      // Call C++ finalizer to clean up unmanaged resources.
      this->!MyResource();

      // Mark the class as disposed. This flag allows you to throw an
      // exception if a disposed object is accessed.
      disposed = true;
   }

   // Use interop to call the method necessary to clean up the
   // unmanaged resource.
   //
   [System::Runtime::InteropServices::DllImport("Kernel32")]
   static Boolean CloseHandle( IntPtr handle );

   // The C++ finalizer destructor ensures that unmanaged resources get
   // released if the user releases the object without explicitly
   // disposing of it.
   //
   !MyResource()
   {
      // Call the appropriate methods to clean up unmanaged
      // resources here. If disposing is false when Dispose(bool,
      // disposing) is called, only the following code is executed.
      CloseHandle( handle );
      handle = IntPtr::Zero;
   }

};

void main()
{
   // Insert code here to create and use the MyResource object.
   MyResource^ mr = gcnew MyResource((IntPtr) 42, (Component^) gcnew Button());
   mr->~MyResource();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDisposable 成员
System 命名空间


IDisposable 成员

IDisposable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDisposable 接口

定义一种释放分配的资源的方法。

IDisposable 类型公开以下成员。

名称 说明
页首

参考

IDisposable 接口
System 命名空间


IDisposable 方法

IDisposable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDisposable 接口

IDisposable 类型公开以下成员。

名称 说明
页首

参考

IDisposable 接口
System 命名空间


IDisposable ..::.Dispose 方法

IDisposable
.
.
::
.
Dispose 方法
IDisposable 接口

执行与释放或重置非托管资源相关的应用程序定义的任务。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub Dispose
void Dispose()
void Dispose()
abstract Dispose : unit -> unit

使用此方法关闭或释放由实现此接口的类的实例保持的文件、流和句柄等非托管资源。根据约定，此方法用于与释放对象所持有的资源或准备对象以便重新使用关联的所有任务。 使用此方法关闭或释放由实现此接口的类的实例保持的文件、流和句柄等非托管资源。根据约定，此方法用于与释放对象所持有的资源或准备对象以便重新使用关联的所有任务。

重要说明 重要事项

C++ 程序员应当阅读 Destructors and Finalizers in Visual C++。在 .NET Framework 2.0 版中，C++ 编译器为实现资源的确定释放提供支持，同时不允许 Dispose 方法的直接实现。 C++ 程序员应当阅读 Destructors and Finalizers in Visual C++。在 .NET Framework 2.0 版中，C++ 编译器为实现资源的确定释放提供支持，同时不允许 Dispose 方法的直接实现。

实现此方法时，可通过在包容层次结构中传播调用来确保释放所有保持的资源。例如，如果对象 A 分配一个对象 B，对象 B 分配一个对象 C，那么 A 的 Dispose 实现必须调用 B 上的 Dispose，B 必须调用 C 上的 Dispose。如果一个对象的基类实现 Dispose，该对象还必须调用其基类的 IDisposable 方法。 实现此方法时，可通过在包容层次结构中传播调用来确保释放所有保持的资源。例如，如果对象 A 分配一个对象 B，对象 B 分配一个对象 C，那么 A 的 Dispose 实现必须调用 B 上的 Dispose，B 必须调用 C 上的 Dispose。如果一个对象的基类实现 Dispose，该对象还必须调用其基类的 IDisposable 方法。 实现此方法时，可通过在包容层次结构中传播调用来确保释放所有保持的资源。例如，如果对象 A 分配一个对象 B，对象 B 分配一个对象 C，那么 A 的 Dispose 实现必须调用 B 上的 Dispose，B 必须调用 C 上的 Dispose。如果一个对象的基类实现 Dispose，该对象还必须调用其基类的 IDisposable 方法。

如果某对象的 Dispose 方法被调用一次以上，则该对象必须忽略第一次调用后的所有调用。如果对象的 Dispose 方法被多次调用，该对象一定不要引发异常。除 Dispose 之外的实例方法在资源已释放时会引发 ObjectDisposedException。 如果某对象的 Dispose 方法被调用一次以上，则该对象必须忽略第一次调用后的所有调用。如果对象的 Dispose 方法被多次调用，该对象一定不要引发异常。除 Dispose 之外的实例方法在资源已释放时会引发 ObjectDisposedException。 如果某对象的 Dispose 方法被调用一次以上，则该对象必须忽略第一次调用后的所有调用。如果对象的 Dispose 方法被多次调用，该对象一定不要引发异常。除 Dispose 之外的实例方法在资源已释放时会引发 ObjectDisposedException。

用户可能期望资源类型使用特定的约定来表示已分配状态和已释放状态。流类即是这样一种示例，传统上认为它们要么打开要么关闭。具有此种约定的类的实施者可能选择实现具有自定义名称（如“Close”）的公用方法来调用 Dispose 方法。 用户可能期望资源类型使用特定的约定来表示已分配状态和已释放状态。流类即是这样一种示例，传统上认为它们要么打开要么关闭。具有此种约定的类的实施者可能选择实现具有自定义名称（如“Close”）的公用方法来调用 Dispose 方法。 用户可能期望资源类型使用特定的约定来表示已分配状态和已释放状态。流类即是这样一种示例，传统上认为它们要么打开要么关闭。具有此种约定的类的实施者可能选择实现具有自定义名称（如“Close”）的公用方法来调用 Dispose 方法。

因为 Dispose 方法必须显式进行调用，所以，实现 IDisposable 的对象还必须实现一个终结器，以便在未调用 Dispose 时处理释放资源问题。默认情况下，垃圾回收器会在回收一个对象的内存之前自动调用该对象的终结器。然而，在调用 Dispose 方法后，通常不需要垃圾回收器调用已释放对象的终结器。为防止自动终止，Dispose 实现可以调用 GC..::.SuppressFinalize 方法。 因为 Dispose 方法必须显式进行调用，所以，实现 IDisposable 的对象还必须实现一个终结器，以便在未调用 Dispose 时处理释放资源问题。默认情况下，垃圾回收器会在回收一个对象的内存之前自动调用该对象的终结器。然而，在调用 Dispose 方法后，通常不需要垃圾回收器调用已释放对象的终结器。为防止自动终止，Dispose 实现可以调用 GC..::.SuppressFinalize 方法。 因为 Dispose 方法必须显式进行调用，所以，实现 IDisposable 的对象还必须实现一个终结器，以便在未调用 Dispose 时处理释放资源问题。默认情况下，垃圾回收器会在回收一个对象的内存之前自动调用该对象的终结器。然而，在调用 Dispose 方法后，通常不需要垃圾回收器调用已释放对象的终结器。为防止自动终止，Dispose 实现可以调用 GC..::.SuppressFinalize 方法。 因为 Dispose 方法必须显式进行调用，所以，实现 IDisposable 的对象还必须实现一个终结器，以便在未调用 Dispose 时处理释放资源问题。默认情况下，垃圾回收器会在回收一个对象的内存之前自动调用该对象的终结器。然而，在调用 Dispose 方法后，通常不需要垃圾回收器调用已释放对象的终结器。为防止自动终止，Dispose 实现可以调用 GC..::.SuppressFinalize 方法。

有关实现终结器和 Dispose 方法的更多信息，请参见 GC 类、Object..::.Finalize 方法和 实现 Finalize 和 Dispose 以清理非托管资源。

当您使用的对象访问非托管的资源（如 StreamWriter）时，一种很好的做法是用 using 语句创建该实例。using 语句在使用它的代码完成后，将自动关闭流冰调用对象上的 Dispose。有关示例，请参见 StreamWriter 类。 当您使用的对象访问非托管的资源（如 StreamWriter）时，一种很好的做法是用 using 语句创建该实例。using 语句在使用它的代码完成后，将自动关闭流冰调用对象上的 Dispose。有关示例，请参见 StreamWriter 类。 当您使用的对象访问非托管的资源（如 StreamWriter）时，一种很好的做法是用 using 语句创建该实例。using 语句在使用它的代码完成后，将自动关闭流冰调用对象上的 Dispose。有关示例，请参见 StreamWriter 类。

下面的示例演示如何实现 Dispose 方法。

Imports System
Imports System.ComponentModel

' The following example demonstrates how to create
' a resource class that implements the IDisposable interface
' and the IDisposable.Dispose method.
Public Class DisposeExample

   ' A class that implements IDisposable.
   ' By implementing IDisposable, you are announcing that
   ' instances of this type allocate scarce resources.
   Public Class MyResource
      Implements IDisposable
      ' Pointer to an external unmanaged resource.
      Private handle As IntPtr
      ' Other managed resource this class uses.
      Private component As component
      ' Track whether Dispose has been called.
      Private disposed As Boolean = False

      ' The class constructor.
      Public Sub New(ByVal handle As IntPtr)
         Me.handle = handle
      End Sub

      ' Implement IDisposable.
      ' Do not make this method virtual.
      ' A derived class should not be able to override this method.
      Public Overloads Sub Dispose() Implements IDisposable.Dispose
         Dispose(True)
         ' This object will be cleaned up by the Dispose method.
         ' Therefore, you should call GC.SupressFinalize to
         ' take this object off the finalization queue
         ' and prevent finalization code for this object
         ' from executing a second time.
         GC.SuppressFinalize(Me)
      End Sub

      ' Dispose(bool disposing) executes in two distinct scenarios.
      ' If disposing equals true, the method has been called directly
      ' or indirectly by a user's code. Managed and unmanaged resources
      ' can be disposed.
      ' If disposing equals false, the method has been called by the
      ' runtime from inside the finalizer and you should not reference
      ' other objects. Only unmanaged resources can be disposed.
      Private Overloads Sub Dispose(ByVal disposing As Boolean)
         ' Check to see if Dispose has already been called.
         If Not Me.disposed Then
            ' If disposing equals true, dispose all managed
            ' and unmanaged resources.
            If disposing Then
               ' Dispose managed resources.
               component.Dispose()
            End If

            ' Call the appropriate methods to clean up
            ' unmanaged resources here.
            ' If disposing is false,
            ' only the following code is executed.
            CloseHandle(handle)
            handle = IntPtr.Zero

            ' Note disposing has been done.
            disposed = True

         End If
      End Sub

      ' Use interop to call the method necessary
      ' to clean up the unmanaged resource.
      <System.Runtime.InteropServices.DllImport("Kernel32")> _
      Private Shared Function CloseHandle(ByVal handle As IntPtr) As [Boolean]
      End Function

      ' This finalizer will run only if the Dispose method
      ' does not get called.
      ' It gives your base class the opportunity to finalize.
      ' Do not provide finalize methods in types derived from this class.
      Protected Overrides Sub Finalize()
         ' Do not re-create Dispose clean-up code here.
         ' Calling Dispose(false) is optimal in terms of
         ' readability and maintainability.
         Dispose(False)
         MyBase.Finalize()
      End Sub
   End Class

   Public Shared Sub Main()
      ' Insert code here to create
      ' and use the MyResource object.
   End Sub

End Class

using System;
using System.ComponentModel;

// The following example demonstrates how to create
// a resource class that implements the IDisposable interface
// and the IDisposable.Dispose method.

public class DisposeExample
{
    // A base class that implements IDisposable.
    // By implementing IDisposable, you are announcing that
    // instances of this type allocate scarce resources.
    public class MyResource: IDisposable
    {
        // Pointer to an external unmanaged resource.
        private IntPtr handle;
        // Other managed resource this class uses.
        private Component component = new Component();
        // Track whether Dispose has been called.
        private bool disposed = false;

        // The class constructor.
        public MyResource(IntPtr handle)
        {
            this.handle = handle;
        }

        // Implement IDisposable.
        // Do not make this method virtual.
        // A derived class should not be able to override this method.
        public void Dispose()
        {
            Dispose(true);
            // This object will be cleaned up by the Dispose method.
            // Therefore, you should call GC.SupressFinalize to
            // take this object off the finalization queue
            // and prevent finalization code for this object
            // from executing a second time.
            GC.SuppressFinalize(this);
        }

        // Dispose(bool disposing) executes in two distinct scenarios.
        // If disposing equals true, the method has been called directly
        // or indirectly by a user's code. Managed and unmanaged resources
        // can be disposed.
        // If disposing equals false, the method has been called by the
        // runtime from inside the finalizer and you should not reference
        // other objects. Only unmanaged resources can be disposed.
        private void Dispose(bool disposing)
        {
            // Check to see if Dispose has already been called.
            if(!this.disposed)
            {
                // If disposing equals true, dispose all managed
                // and unmanaged resources.
                if(disposing)
                {
                    // Dispose managed resources.
                    component.Dispose();
                }

                // Call the appropriate methods to clean up
                // unmanaged resources here.
                // If disposing is false,
                // only the following code is executed.
                CloseHandle(handle);
                handle = IntPtr.Zero;

                // Note disposing has been done.
                disposed = true;

            }
        }

        // Use interop to call the method necessary
        // to clean up the unmanaged resource.
        [System.Runtime.InteropServices.DllImport("Kernel32")]
        private extern static Boolean CloseHandle(IntPtr handle);

        // Use C# destructor syntax for finalization code.
        // This destructor will run only if the Dispose method
        // does not get called.
        // It gives your base class the opportunity to finalize.
        // Do not provide destructors in types derived from this class.
        ~MyResource()
        {
            // Do not re-create Dispose clean-up code here.
            // Calling Dispose(false) is optimal in terms of
            // readability and maintainability.
            Dispose(false);
        }
    }
    public static void Main()
    {
        // Insert code here to create
        // and use the MyResource object.
    }
}

#using <System.dll>
#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::ComponentModel;
using namespace System::Windows::Forms;

// The following example demonstrates how to create a class that
// implements the IDisposable interface and the IDisposable.Dispose
// method with finalization to clean up unmanaged resources.
//
public ref class MyResource: public IDisposable
{
private:

   // Pointer to an external unmanaged resource.
   IntPtr handle;

   // A managed resource this class uses.
   Component^ component;

   // Track whether Dispose has been called.
   bool disposed;

public:
   // The class constructor.
   MyResource( IntPtr handle, Component^ component )
   {
      this->handle = handle;
      this->component = component;
      disposed = false;
   }

   // This method is called if the user explicitly disposes of the
   // object (by calling the Dispose method in other managed languages,
   // or the destructor in C++). The compiler emits as a call to
   // GC::SuppressFinalize( this ) for you, so there is no need to
   // call it here.
   ~MyResource()
   {
      // Dispose of managed resources.
      component->~Component();

      // Call C++ finalizer to clean up unmanaged resources.
      this->!MyResource();

      // Mark the class as disposed. This flag allows you to throw an
      // exception if a disposed object is accessed.
      disposed = true;
   }

   // Use interop to call the method necessary to clean up the
   // unmanaged resource.
   //
   [System::Runtime::InteropServices::DllImport("Kernel32")]
   static Boolean CloseHandle( IntPtr handle );

   // The C++ finalizer destructor ensures that unmanaged resources get
   // released if the user releases the object without explicitly
   // disposing of it.
   //
   !MyResource()
   {
      // Call the appropriate methods to clean up unmanaged
      // resources here. If disposing is false when Dispose(bool,
      // disposing) is called, only the following code is executed.
      CloseHandle( handle );
      handle = IntPtr::Zero;
   }

};

void main()
{
   // Insert code here to create and use the MyResource object.
   MyResource^ mr = gcnew MyResource((IntPtr) 42, (Component^) gcnew Button());
   mr->~MyResource();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDisposable 接口
IDisposable 成员
System 命名空间


IEquatable <(Of <(T >)>) 接口

IEquatable
<
(Of
<
(
T
>
)
>
)
接口
成员

定义一个通用的方法，由值类型或类实现以创建类型特定的方法，用于确定实例间的相等性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Interface IEquatable(Of T)
public interface IEquatable<T>

generic<typename T>
public interface class IEquatable
type IEquatable<'T> =  interface end

类型参数

T

要比较的对象的类型。

此接口由其值可以比较相等性的类型（例如数值或字符串类）实现。值类型或类实现 Equals 方法以创建适合确定实例相等性的类型特定的方法。 此接口由其值可以比较相等性的类型（例如数值或字符串类）实现。值类型或类实现 Equals 方法以创建适合确定实例相等性的类型特定的方法。

说明 说明

IComparable<(Of <(T>)>) 接口定义 CompareTo 方法，该方法确定实现类型的实例的排序顺序。IEquatable<(Of <(T>)>) 接口定义 Equals 方法，该方法确定实现类型的实例的相等性。 IComparable<(Of <(T>)>) 接口定义 CompareTo 方法，该方法确定实现类型的实例的排序顺序。IEquatable<(Of <(T>)>) 接口定义 Equals 方法，该方法确定实现类型的实例的相等性。

在 Contains、IndexOf、LastIndexOf 和 Remove 等方法中测试相等性时，泛型集合对象（如 Dictionary<(Of <(TKey, TValue>)>)、List<(Of <(T>)>) 和 LinkedList<(Of <(T>)>) 等）将使用 IEquatable<(Of <(T>)>) 接口。对于任何可能存储在泛型集合中的对象，都应实现此接口。 在 Contains、IndexOf、LastIndexOf 和 Remove 等方法中测试相等性时，泛型集合对象（如 Dictionary<(Of <(TKey, TValue>)>)、List<(Of <(T>)>) 和 LinkedList<(Of <(T>)>) 等）将使用 IEquatable<(Of <(T>)>) 接口。对于任何可能存储在泛型集合中的对象，都应实现此接口。

对实现者的说明

用实现此接口的类型替换 IEquatable<(Of <(T>)>) 接口的类型参数。

如果实现 IEquatable<(Of <(T>)>)，还应重写 Object..::.Equals(Object) 和 GetHashCode 的基类实现，以便其行为与 IEquatable<(Of <(T>)>)..::.Equals 方法的行为一致。如果重写 Object..::.Equals(Object)，则对相应类调用静态 Equals(System.Object, System.Object) 方法时也会调用重写的实现。这可确保 Equals 方法的所有调用都返回一致的结果。 如果实现 IEquatable<(Of <(T>)>)，还应重写 Object..::.Equals(Object) 和 GetHashCode 的基类实现，以便其行为与 IEquatable<(Of <(T>)>)..::.Equals 方法的行为一致。如果重写 Object..::.Equals(Object)，则对相应类调用静态 Equals(System.Object, System.Object) 方法时也会调用重写的实现。这可确保 Equals 方法的所有调用都返回一致的结果。 如果实现 IEquatable<(Of <(T>)>)，还应重写 Object..::.Equals(Object) 和 GetHashCode 的基类实现，以便其行为与 IEquatable<(Of <(T>)>)..::.Equals 方法的行为一致。如果重写 Object..::.Equals(Object)，则对相应类调用静态 Equals(System.Object, System.Object) 方法时也会调用重写的实现。这可确保 Equals 方法的所有调用都返回一致的结果。

请参见 IEquatable<(Of <(T>)>)..::.Equals 方法的示例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEquatable T 成员
System 命名空间
IComparable T
IComparable


IEquatable <(Of <(T >)>) 成员

IEquatable
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IEquatable

定义一个通用的方法，由值类型或类实现以创建类型特定的方法，用于确定实例间的相等性。

IEquatable T 类型公开以下成员。

名称 说明
页首

参考

IEquatable T 接口
System 命名空间


IEquatable <(Of <(T >)>) 方法

IEquatable
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IEquatable

IEquatable T 类型公开以下成员。

名称 说明
页首

参考

IEquatable T 接口
System 命名空间


IEquatable <(Of <(T >)>) ..::.Equals 方法

IEquatable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Equals 方法
IEquatable

指示当前对象是否等于同一类型的另一个对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Equals ( _
    other As T _
) As Boolean
bool Equals(
    T other
)
bool Equals(
    T other
)
abstract Equals :
        other:'T -> bool

参数

other
类型： T
与此对象进行比较的对象。

返回值

类型： System Boolean
如果当前对象等于 other 参数，则为 true；否则为 false。

Equals 方法的实现用于测试是否与另一个类型为 T（与当前对象类型相同）的对象相等。在下列情况下将调用 Equals 方法： Equals 方法的实现用于测试是否与另一个类型为 T（与当前对象类型相同）的对象相等。在下列情况下将调用 Equals 方法：

  • 调用 Equals 方法并且 other 参数表示类型为 T 的强类型对象时。（如果 other 的类型为 Object，则调用基方法 Object..::.Equals(Object)。在这两种方法中，IEquatable<(Of <(T>)>)..::.Equals 提供稍好一点的性能。） 调用 Equals 方法并且 other 参数表示类型为 T 的强类型对象时。（如果 other 的类型为 Object，则调用基方法 Object..::.Equals(Object)。在这两种方法中，IEquatable<(Of <(T>)>)..::.Equals 提供稍好一点的性能。） 调用 Equals 方法并且 other 参数表示类型为 T 的强类型对象时。（如果 other 的类型为 Object，则调用基方法 Object..::.Equals(Object)。在这两种方法中，IEquatable<(Of <(T>)>)..::.Equals 提供稍好一点的性能。）

  • 调用许多泛型集合对象的搜索方法时。其中某些类型及其方法包括： 调用许多泛型集合对象的搜索方法时。其中某些类型及其方法包括：

    • BinarySearch 方法的某些泛型重载。

    • List<(Of <(T>)>) 类的搜索方法，包括 List<(Of <(T>)>)..::.Contains(T)、List<(Of <(T>)>)..::.IndexOf、List<(Of <(T>)>)..::.LastIndexOf 和 List<(Of <(T>)>)..::.Remove。

    • Dictionary<(Of <(TKey, TValue>)>) 类的搜索方法，包括 ContainsKey 和 Remove。

    • LinkedList<(Of <(T>)>) 泛型类的搜索方法，包括 LinkedList<(Of <(T>)>)..::.Contains 和 Remove。

换句话说，若要处理类的对象将存储在数组或泛型集合对象中的可能性，最好实现 IEquatable<(Of <(T>)>) 以便可轻松地识别和操作该对象。

实现 Equals 方法时，为泛型类型参数指定的类型定义相应的相等性。例如，如果类型参数为 Int32，则为两个 32 位有符号整数的比较定义相应的相等性。 实现 Equals 方法时，为泛型类型参数指定的类型定义相应的相等性。例如，如果类型参数为 Int32，则为两个 32 位有符号整数的比较定义相应的相等性。

对实现者的说明

如果实现 Equals，还应重写 Object..::.Equals(Object) 和 GetHashCode 的基类实现，以便其行为与 IEquatable<(Of <(T>)>)..::.Equals 方法的行为一致。如果重写 Object..::.Equals(Object)，则对相应类调用静态 Equals(System.Object, System.Object) 方法时也会调用重写的实现。这可确保 Equals 方法的所有调用都返回一致的结果，如下面的示例所示。 如果实现 Equals，还应重写 Object..::.Equals(Object) 和 GetHashCode 的基类实现，以便其行为与 IEquatable<(Of <(T>)>)..::.Equals 方法的行为一致。如果重写 Object..::.Equals(Object)，则对相应类调用静态 Equals(System.Object, System.Object) 方法时也会调用重写的实现。这可确保 Equals 方法的所有调用都返回一致的结果，如下面的示例所示。 如果实现 Equals，还应重写 Object..::.Equals(Object) 和 GetHashCode 的基类实现，以便其行为与 IEquatable<(Of <(T>)>)..::.Equals 方法的行为一致。如果重写 Object..::.Equals(Object)，则对相应类调用静态 Equals(System.Object, System.Object) 方法时也会调用重写的实现。这可确保 Equals 方法的所有调用都返回一致的结果，如下面的示例所示。

下面的示例演示 Person 类的部分实现，该类实现 IEquatable<(Of <(T>)>) 并具有两个属性 LastName 和 SSN。如果两个 Person 对象的 SSN 属性相等，则 Equals 方法返回 True；否则该方法返回 False。 下面的示例演示 Person 类的部分实现，该类实现 IEquatable<(Of <(T>)>) 并具有两个属性 LastName 和 SSN。如果两个 Person 对象的 SSN 属性相等，则 Equals 方法返回 True；否则该方法返回 False。

Imports System.Collections.Generic
Imports System.Text.RegularExpressions

Public Class Person : Implements IEquatable(Of Person)
   Private uniqueSsn As String
   Private lName As String

   Public Sub New(lastName As String, ssn As String)
      Me.SSN = ssn
      Me.LastName = lastName
   End Sub

   Public Property SSN As String
      Set
         If Regex.IsMatch(value, "\d{9}") Then
            uniqueSsn = String.Format("{0}-(1}-{2}", value.Substring(0, 3), _
                                                     value.Substring(3, 2), _
                                                     value.Substring(5, 3))
         ElseIf Regex.IsMatch(value, "\d{3}-\d{2}-\d{3}") Then
            uniqueSsn = value
         Else
            Throw New FormatException("The social security number has an invalid format.")
         End If
      End Set
      Get
         Return Me.uniqueSsn
      End Get
   End Property

   Public Property LastName As String
      Get
         Return Me.lName
      End Get
      Set
         If String.IsNullOrEmpty(value) Then
            Throw New NullReferenceException("The last name cannot be null or empty.")
         Else
            lname = value
         End If
      End Set
   End Property

   Public Overloads Function Equals(other As Person) As Boolean _
                   Implements IEquatable(Of Person).Equals
      If Me.uniqueSsn = other.SSN Then
         Return True
      Else
         Return False
      End If
   End Function

   Public Overrides Function Equals(obj As Object) As Boolean
      If obj Is Nothing Then Return MyBase.Equals(obj)

      If Not TypeOf obj Is Person
         Throw New InvalidCastException("The 'obj' argument is not a Person object.")
      Else
         Return Equals(DirectCast(obj, Person))
      End If
   End Function

   Public Overrides Function GetHashCode() As Integer
      Return Me.SSN.GetHashCode()
   End Function

   Public Shared Operator = (person1 As Person, person2 As Person) As Boolean
      Return person1.Equals(person2)
   End Operator

   Public Shared Operator <> (person1 As Person, person2 As Person) As Boolean
      Return Not person1.Equals(person2)
   End Operator
End Class

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class Person : IEquatable<Person>
{
   private string uniqueSsn;
   private string lName;

   public Person(string lastName, string ssn)
   {
      this.SSN = ssn;
      this.LastName = lastName;
   }

   public string SSN
   {
      get { return this.uniqueSsn; }
      set {
         if (Regex.IsMatch(value, @"\d{9}"))
            uniqueSsn = String.Format("{0}-(1}-{2}", value.Substring(0, 3),
                                                     value.Substring(3, 2),
                                                     value.Substring(5, 3));
         else if (Regex.IsMatch(value, @"\d{3}-\d{2}-\d{3}"))
            uniqueSsn = value;
         else
            throw new FormatException("The social security number has an invalid format.");
      }
   }

   public string LastName
   {
      get { return this.lName; }
      set {
         if (String.IsNullOrEmpty(value))
            throw new NullReferenceException("The last name cannot be null or empty.");
         else
            lName = value;
      }
   }

   public bool Equals(Person other)
   {
      if (this.uniqueSsn == other.SSN)
         return true;
      else
         return false;
   }

   public override bool Equals(Object obj)
   {
      if (obj == null) return base.Equals(obj);

      if (! (obj is Person))
         throw new InvalidCastException("The 'obj' argument is not a Person object.");
      else
         return Equals(obj as Person);
   }

   public override int GetHashCode()
   {
      return this.SSN.GetHashCode();
   }

   public static bool operator ==(Person person1, Person person2)
   {
      return person1.Equals(person2);
   }

   public static bool operator !=(Person person1, Person person2)
   {
      return (! person1.Equals(person2));
   }
}

然后，Person 对象可存储在 List<(Of <(T>)>) 对象中，并可通过 Contains 方法进行识别，如下面的示例所示。

Module TestIEquatable
   Public Sub Main()
      ' Create a Person object for each job applicant.
      Dim applicant1 As New Person("Jones", "099-29-4999")
      Dim applicant2 As New Person("Jones", "199-29-3999")
      Dim applicant3 As New Person("Jones", "299-49-6999")

      ' Add applicants to a List object.
      Dim applicants As New List(Of Person)
      applicants.Add(applicant1)
      applicants.Add(applicant2)
      applicants.Add(applicant3)

      ' Create a Person object for the final candidate.
      Dim candidate As New Person("Jones", "199-29-3999")

      If applicants.Contains(candidate) Then
         Console.WriteLine("Found {0} (SSN {1}).", _
                            candidate.LastName, candidate.SSN)
      Else
         Console.WriteLine("Applicant {0} not found.", candidate.SSN)
      End If

      ' Call the shared inherited Equals(Object, Object) method.
      ' It will in turn call the IEquatable(Of T).Equals implementation.
      Console.WriteLine("{0}({1}) already on file: {2}.", _
                        applicant2.LastName, _
                        applicant2.SSN, _
                        Person.Equals(applicant2, candidate))
   End Sub
End Module
' The example displays the following output:
'       Found Jones (SSN 199-29-3999).
'       Jones(199-29-3999) already on file: True.

public class TestIEquatable
{
   public static void Main()
   {
      // Create a Person object for each job applicant.
      Person applicant1 = new Person("Jones", "099-29-4999");
      Person applicant2 = new Person("Jones", "199-29-3999");
      Person applicant3 = new Person("Jones", "299-49-6999");

      // Add applicants to a List object.
      List<Person> applicants = new List<Person>();
      applicants.Add(applicant1);
      applicants.Add(applicant2);
      applicants.Add(applicant3);

      // Create a Person object for the final candidate.
      Person candidate = new Person("Jones", "199-29-3999");

      if (applicants.Contains(candidate))
         Console.WriteLine("Found {0} (SSN {1}).",
                            candidate.LastName, candidate.SSN);
      else
         Console.WriteLine("Applicant {0} not found.", candidate.SSN);

      // Call the shared inherited Equals(Object, Object) method.
      // It will in turn call the IEquatable(Of T).Equals implementation.
      Console.WriteLine("{0}({1}) already on file: {2}.",
                        applicant2.LastName,
                        applicant2.SSN,
                        Person.Equals(applicant2, candidate));
   }
}
// The example displays the following output:
//       Found Jones (SSN 199-29-3999).
//       Jones(199-29-3999) already on file: True.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEquatable T 接口
IEquatable T 成员
System 命名空间


IFormatProvider 接口

IFormatProvider 接口
成员

提供用于检索控制格式化的对象的机制。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IFormatProvider
[ComVisibleAttribute(true)]
public interface IFormatProvider
[ComVisibleAttribute(true)]
public interface class IFormatProvider
[<ComVisibleAttribute(true)>]
type IFormatProvider =  interface end

IFormatProvider 接口提供了一个对象，该对象提供格式设置信息用于格式设置和分析操作。格式设置操作将类型的值转换为该值的字符串表示形式。典型的格式设置方法包括类型的 ToString 方法以及 Format。分析操作将值的字符串表示形式转换为具有该值的类型。典型的分析方法包括 Parse 和 TryParse。 IFormatProvider 接口提供了一个对象，该对象提供格式设置信息用于格式设置和分析操作。格式设置操作将类型的值转换为该值的字符串表示形式。典型的格式设置方法包括类型的 ToString 方法以及 Format。分析操作将值的字符串表示形式转换为具有该值的类型。典型的分析方法包括 Parse 和 TryParse。 IFormatProvider 接口提供了一个对象，该对象提供格式设置信息用于格式设置和分析操作。格式设置操作将类型的值转换为该值的字符串表示形式。典型的格式设置方法包括类型的 ToString 方法以及 Format。分析操作将值的字符串表示形式转换为具有该值的类型。典型的分析方法包括 Parse 和 TryParse。 IFormatProvider 接口提供了一个对象，该对象提供格式设置信息用于格式设置和分析操作。格式设置操作将类型的值转换为该值的字符串表示形式。典型的格式设置方法包括类型的 ToString 方法以及 Format。分析操作将值的字符串表示形式转换为具有该值的类型。典型的分析方法包括 Parse 和 TryParse。 IFormatProvider 接口提供了一个对象，该对象提供格式设置信息用于格式设置和分析操作。格式设置操作将类型的值转换为该值的字符串表示形式。典型的格式设置方法包括类型的 ToString 方法以及 Format。分析操作将值的字符串表示形式转换为具有该值的类型。典型的分析方法包括 Parse 和 TryParse。

IFormatProvider 接口由一个方法构成：IFormatProvider..::.GetFormat。GetFormat 为回调方法：分析或格式设置方法可以将其调用并传递至一个 Type 对象，该对象表示格式或设置分析方法要求提供格式设置信息的对象类型。GetFormat 方法负责返回该类型的对象。
IFormatProvider 接口由一个方法构成：IFormatProvider..::.GetFormat。GetFormat 为回调方法：分析或格式设置方法可以将其调用并传递至一个 Type 对象，该对象表示格式或设置分析方法要求提供格式设置信息的对象类型。GetFormat 方法负责返回该类型的对象。
IFormatProvider 接口由一个方法构成：IFormatProvider..::.GetFormat。GetFormat 为回调方法：分析或格式设置方法可以将其调用并传递至一个 Type 对象，该对象表示格式或设置分析方法要求提供格式设置信息的对象类型。GetFormat 方法负责返回该类型的对象。

IFormatProvider 实现经常通过格式设置和分析方法来隐式使用。例如，DateTime..::.ToString(String) 方法隐式使用 IFormatProvider 实现表示系统的当前区域性。还可以通过具有 IFormatProvider 类型的参数的方法（Int32..::.Parse(String, IFormatProvider) 和 String..::.Format(IFormatProvider, String, array<Object>[]()[])）来显式指定 IFormatProvider 实现。 IFormatProvider 实现经常通过格式设置和分析方法来隐式使用。例如，DateTime..::.ToString(String) 方法隐式使用 IFormatProvider 实现表示系统的当前区域性。还可以通过具有 IFormatProvider 类型的参数的方法（Int32..::.Parse(String, IFormatProvider) 和 String..::.Format(IFormatProvider, String, array<Object>[]()[])）来显式指定 IFormatProvider 实现。 IFormatProvider 实现经常通过格式设置和分析方法来隐式使用。例如，DateTime..::.ToString(String) 方法隐式使用 IFormatProvider 实现表示系统的当前区域性。还可以通过具有 IFormatProvider 类型的参数的方法（Int32..::.Parse(String, IFormatProvider) 和 String..::.Format(IFormatProvider, String, array<Object>[]()[])）来显式指定 IFormatProvider 实现。

.NET Framework 包括以下三个预定义的 IFormatProvider 实现，以提供在格式设置或分析数值和日期和时间值中使用的特定于区域性的信息：

  • NumberFormatInfo 类可为特定区域提供用于设置数字格式的信息，例如货币符号、千位分隔符和小数点分隔符。

  • DateTimeFormatInfo 类，提供用于设置日期和时间格式的信息，如用于特定区域性的日期和时间分隔符符号，或者日期的年、月和日部分的顺序和格式。

  • CultureInfo 类，表示一个特殊的区域性。它的 GetFormat 方法返回特定于区域性的 NumberFormatInfo 或 DateTimeFormatInfo 对象，取决于涉及数字或日期和时间的一个格式设置或分析操作中是否使用了 CultureInfo 对象是否。 CultureInfo 类，表示一个特殊的区域性。它的 GetFormat 方法返回特定于区域性的 NumberFormatInfo 或 DateTimeFormatInfo 对象，取决于涉及数字或日期和时间的一个格式设置或分析操作中是否使用了 CultureInfo 对象是否。

.NET Framework 还支持自定义格式。这通常需要创建格式设置类，而该类将实现 IFormatProvider 和 ICustomFormatter。然后将此类的实例作为参数传递给执行自定义格式设置操作的方法，例如 String..::.Format(IFormatProvider, String, array<Object>[]()[])；本示例为这种将数字的格式设置为 12 位帐号的自定义实现提供了说明。 .NET Framework 还支持自定义格式。这通常需要创建格式设置类，而该类将实现 IFormatProvider 和 ICustomFormatter。然后将此类的实例作为参数传递给执行自定义格式设置操作的方法，例如 String..::.Format(IFormatProvider, String, array<Object>[]()[])；本示例为这种将数字的格式设置为 12 位帐号的自定义实现提供了说明。 .NET Framework 还支持自定义格式。这通常需要创建格式设置类，而该类将实现 IFormatProvider 和 ICustomFormatter。然后将此类的实例作为参数传递给执行自定义格式设置操作的方法，例如 String..::.Format(IFormatProvider, String, array<Object>[]()[])；本示例为这种将数字的格式设置为 12 位帐号的自定义实现提供了说明。

下面的示例阐释 IFormatProvider 实现如何更改日期和时间值的表示形式。在这种情况下，通过使用表示四种不同区域的 CultureInfo 对象显示单个日期。 下面的示例阐释 IFormatProvider 实现如何更改日期和时间值的表示形式。在这种情况下，通过使用表示四种不同区域的 CultureInfo 对象显示单个日期。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateValue As Date = #06/01/2009 4:37PM#
      Dim cultures() As CultureInfo = {New CultureInfo("en-US"), _
                                       New CultureInfo("fr-FR"), _
                                       New CultureInfo("it-IT"), _
                                       New CultureInfo("de-DE") }
      For Each culture As CultureInfo In cultures
         Console.WriteLine("{0}: {1}", culture.Name, dateValue.ToString(culture))
      Next
   End Sub
End Module
' The example displays the following output:
'       en-US: 6/1/2009 4:37:00 PM
'       fr-FR: 01/06/2009 16:37:00
'       it-IT: 01/06/2009 16.37.00
'       de-DE: 01.06.2009 16:37:00

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2009, 6, 1, 4, 37, 0);
      CultureInfo[] cultures = { new CultureInfo("en-US"),
                                 new CultureInfo("fr-FR"),
                                 new CultureInfo("it-IT"),
                                 new CultureInfo("de-DE") };
      foreach (CultureInfo culture in cultures)
         Console.WriteLine("{0}: {1}", culture.Name, dateValue.ToString(culture));
   }
}
// The example displays the following output:
//       en-US: 6/1/2009 4:37:00 PM
//       fr-FR: 01/06/2009 16:37:00
//       it-IT: 01/06/2009 16.37.00
//       de-DE: 01.06.2009 16:37:00

下面的示例演示如何使用一个类来实现 IFormatProvider 接口和 GetFormat 方法。AcctNumberFormat 类将表示帐号的 Int64 值转换为格式化的 12 位帐号。如果 formatType 参数引用的类实现 ICustomFormatter，则其 GetFormat 方法返回对当前 AcctNumberFormat 实例的引用；否则，GetFormat 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 下面的示例演示如何使用一个类来实现 IFormatProvider 接口和 GetFormat 方法。AcctNumberFormat 类将表示帐号的 Int64 值转换为格式化的 12 位帐号。如果 formatType 参数引用的类实现 ICustomFormatter，则其 GetFormat 方法返回对当前 AcctNumberFormat 实例的引用；否则，GetFormat 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 下面的示例演示如何使用一个类来实现 IFormatProvider 接口和 GetFormat 方法。AcctNumberFormat 类将表示帐号的 Int64 值转换为格式化的 12 位帐号。如果 formatType 参数引用的类实现 ICustomFormatter，则其 GetFormat 方法返回对当前 AcctNumberFormat 实例的引用；否则，GetFormat 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Public Class AcctNumberFormat : Implements IFormatProvider, ICustomFormatter

   Private Const ACCT_LENGTH As Integer = 12

   Public Function GetFormat(formatType As Type) As Object _
                   Implements IFormatProvider.GetFormat
      If formatType Is GetType(ICustomFormatter) Then
         Return Me
      Else
         Return Nothing
      End If
   End Function

   Public Function Format(fmt As String, arg As Object, formatProvider As IFormatProvider) As String _
                          Implements ICustomFormatter.Format

      ' Provide default formatting if arg is not an Int64.
       If Not TypeOf arg Is Int64 Then
         Try
            Return HandleOtherFormats(fmt, arg)
         Catch e As FormatException
            Throw New FormatException(String.Format("The format of '{0}' is invalid.", fmt), e)
         End Try
       End If

      ' Provider default formatting for unsupported format strings.
      Dim ufmt As String = fmt.ToUpper(CultureInfo.InvariantCulture)
      If Not (ufmt = "H" Or ufmt = "I") Then
         Try
            Return HandleOtherFormats(fmt, arg)
         Catch e As FormatException
            Throw New FormatException(String.Format("The format of '{0}' is invalid.", fmt), e)
         End Try
      End If

      ' Convert argument to a string.
      Dim result As String = arg.ToString()

      ' If account number is less than 12 characters, pad with leading zeroes.
      If result.Length < ACCT_LENGTH Then result = result.PadLeft(ACCT_LENGTH, "0"c)
      ' If account number is more than 12 characters, truncate to 12 characters.
      If result.Length > ACCT_LENGTH Then result = Left(result, ACCT_LENGTH)

      If ufmt = "I"                              ' Integer-only format.
         Return result
      ' Add hyphens for H format specifier.
      Else                                       ' Hypenated format.
         Return Left(result, 5) & "-" & Mid(result, 6, 3) & "-" & Right(result, 4)
      End If
   End Function

   Private Function HandleOtherFormats(fmt As String, arg As Object) As String
      If TypeOf arg Is IFormattable Then
         Return DirectCast(arg, IFormattable).ToString(fmt, CultureInfo.CurrentCulture)
      ElseIf arg IsNot Nothing Then
         Return arg.ToString()
      Else
         Return String.Empty
      End If
   End Function
End Class

public class AcctNumberFormat : IFormatProvider, ICustomFormatter
{
   private const int ACCT_LENGTH = 12;

   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(string fmt, object arg, IFormatProvider formatProvider)
   {
      // Provide default formatting if arg is not an Int64.
      if (arg.GetType() != typeof(Int64))
         try {
            return HandleOtherFormats(fmt, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }

      // Provide default formatting for unsupported format strings.
      string ufmt = fmt.ToUpper(CultureInfo.InvariantCulture);
      if (! (ufmt == "H" || ufmt == "I"))
         try {
            return HandleOtherFormats(fmt, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }

      // Convert argument to a string.
      string result = arg.ToString();

      // If account number is less than 12 characters, pad with leading zeroes.
      if (result.Length < ACCT_LENGTH)
         result = result.PadLeft(ACCT_LENGTH, '0');
      // If account number is more than 12 characters, truncate to 12 characters.
      if (result.Length > ACCT_LENGTH)
         result = result.Substring(0, ACCT_LENGTH);

      if (ufmt == "I")                    // Integer-only format.
         return result;
      // Add hyphens for H format specifier.
      else                                         // Hyphenated format.
         return result.Substring(0, 5) + "-" + result.Substring(5, 3) + "-" + result.Substring(8);
   }

   private string HandleOtherFormats(string format, object arg)
   {
      if (arg is IFormattable)
         return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
      else if (arg != null)
         return arg.ToString();
      else
         return String.Empty;
   }
}

实现 IFormatProvider 的类随后可以用于调用格式设置和分析操作。例如，下面的代码调用 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法以生成一个包含设置了格式的 12 位帐号的字符串。 实现 IFormatProvider 的类随后可以用于调用格式设置和分析操作。例如，下面的代码调用 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法以生成一个包含设置了格式的 12 位帐号的字符串。

Imports System.Globalization

Public Enum DaysOfWeek As Long
   Monday = 1
   Tuesday = 2
End Enum

Module TestFormatting
   Public Sub Main()
      Dim acctNumber As Long, balance As Double
      Dim wday As DaysOfWeek
      Dim output As String

      acctNumber = 104254567890
      balance = 16.34
      wday = DaysOfWeek.Monday

      output = String.Format(New AcctNumberFormat(), "On {2}, the balance of account {0:H} was {1:C2}.", acctNumber, balance, wday)
      Console.WriteLine(output)

      wday = DaysOfWeek.Tuesday
      output = String.Format(New AcctNumberFormat(), "On {2}, the balance of account {0:I} was {1:C2}.", acctNumber, balance, wday)
      Console.WriteLine(output)
   End Sub
End Module
' The example displays the following output:
'    On Monday, the balance of account 10425-456-7890 was $16.34.
'    On Tuesday, the balance of account 104254567890 was $16.34.

using System;
using System.Globalization;

public enum DaysOfWeek { Monday=1, Tuesday=2 };

public class TestFormatting
{
   public static void Main()
   {
      long acctNumber;
      double balance;
      DaysOfWeek wday;
      string output;

      acctNumber = 104254567890;
      balance = 16.34;
      wday = DaysOfWeek.Monday;

      output = String.Format(new AcctNumberFormat(),
                             "On {2}, the balance of account {0:H} was {1:C2}.",
                             acctNumber, balance, wday);
      Console.WriteLine(output);

      wday = DaysOfWeek.Tuesday;
      output = String.Format(new AcctNumberFormat(),
                             "On {2}, the balance of account {0:I} was {1:C2}.",
                             acctNumber, balance, wday);
      Console.WriteLine(output);
   }
}
// The example displays the following output:
//       On Monday, the balance of account 10425-456-7890 was $16.34.
//       On Tuesday, the balance of account 104254567890 was $16.34.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IFormatProvider 成员
System 命名空间
ICustomFormatter
IFormattable

其他资源

格式化类型
如何：定义和使用自定义数值格式提供程序


IFormatProvider 成员

IFormatProvider 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IFormatProvider 接口

提供用于检索控制格式化的对象的机制。

IFormatProvider 类型公开以下成员。

名称 说明
页首

参考

IFormatProvider 接口
System 命名空间


IFormatProvider 方法

IFormatProvider 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IFormatProvider 接口

IFormatProvider 类型公开以下成员。

名称 说明
页首

参考

IFormatProvider 接口
System 命名空间


IFormatProvider ..::.GetFormat 方法

IFormatProvider
.
.
::
.
GetFormat 方法
IFormatProvider 接口

返回一个对象，该对象为指定类型提供格式设置服务。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function GetFormat ( _
    formatType As Type _
) As Object
Object GetFormat(
    Type formatType
)
Object^ GetFormat(
    Type^ formatType
)
abstract GetFormat :
        formatType:Type -> Object

参数

formatType
类型： System Type
一个对象，该对象指定要返回的格式对象的类型。

返回值

类型： System Object
如果 IFormatProvider 实现能够提供该类型的对象，则为 formatType 所指定对象的实例；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

GetFormat 是一种回调方法，其格式设置方法和分析方法通过调用它，可检索分析操作中输入字符串的格式或格式设置操作中输出字符串的格式的相关信息。在 formatType 参数中，格式设置或分析方法可传递执行其操作所需的对象类型。如果 IFormatProvider 实现可提供该格式设置或分析对象，它将返回该对象。否则，它将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetFormat 是一种回调方法，其格式设置方法和分析方法通过调用它，可检索分析操作中输入字符串的格式或格式设置操作中输出字符串的格式的相关信息。在 formatType 参数中，格式设置或分析方法可传递执行其操作所需的对象类型。如果 IFormatProvider 实现可提供该格式设置或分析对象，它将返回该对象。否则，它将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetFormat 是一种回调方法，其格式设置方法和分析方法通过调用它，可检索分析操作中输入字符串的格式或格式设置操作中输出字符串的格式的相关信息。在 formatType 参数中，格式设置或分析方法可传递执行其操作所需的对象类型。如果 IFormatProvider 实现可提供该格式设置或分析对象，它将返回该对象。否则，它将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetFormat 是一种回调方法，其格式设置方法和分析方法通过调用它，可检索分析操作中输入字符串的格式或格式设置操作中输出字符串的格式的相关信息。在 formatType 参数中，格式设置或分析方法可传递执行其操作所需的对象类型。如果 IFormatProvider 实现可提供该格式设置或分析对象，它将返回该对象。否则，它将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

例如，在调用 Int32..::.ToString(IFormatProvider) 方法时，方法参数为 IFormatProvider 对象，该对象可提供关于如何设置当前整数实例的字符串表示形式的格式的信息。运行时执行该方法时会调用 IFormatProvider 对象的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。如果 IFormatProvider 对象可以提供 NumberFormatInfo 对象，它将返回该对象。如果无法提供该类型的对象，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 例如，在调用 Int32..::.ToString(IFormatProvider) 方法时，方法参数为 IFormatProvider 对象，该对象可提供关于如何设置当前整数实例的字符串表示形式的格式的信息。运行时执行该方法时会调用 IFormatProvider 对象的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。如果 IFormatProvider 对象可以提供 NumberFormatInfo 对象，它将返回该对象。如果无法提供该类型的对象，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 例如，在调用 Int32..::.ToString(IFormatProvider) 方法时，方法参数为 IFormatProvider 对象，该对象可提供关于如何设置当前整数实例的字符串表示形式的格式的信息。运行时执行该方法时会调用 IFormatProvider 对象的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。如果 IFormatProvider 对象可以提供 NumberFormatInfo 对象，它将返回该对象。如果无法提供该类型的对象，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 例如，在调用 Int32..::.ToString(IFormatProvider) 方法时，方法参数为 IFormatProvider 对象，该对象可提供关于如何设置当前整数实例的字符串表示形式的格式的信息。运行时执行该方法时会调用 IFormatProvider 对象的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。如果 IFormatProvider 对象可以提供 NumberFormatInfo 对象，它将返回该对象。如果无法提供该类型的对象，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

您可以在提供自定义格式设置或分析服务的类中实现 IFormatProvider 接口和 GetFormat 方法。IFormatProvider 实现然后会作为参数传递到参数类型为 IFormatProvider（例如 String..::.Format(IFormatProvider, String, array<Object>[]()[])、Int32..::.ToString(String, IFormatProvider) 或 DateTime..::.Parse(String, IFormatProvider)）的分析或格式设置方法的任何重载。 您可以在提供自定义格式设置或分析服务的类中实现 IFormatProvider 接口和 GetFormat 方法。IFormatProvider 实现然后会作为参数传递到参数类型为 IFormatProvider（例如 String..::.Format(IFormatProvider, String, array<Object>[]()[])、Int32..::.ToString(String, IFormatProvider) 或 DateTime..::.Parse(String, IFormatProvider)）的分析或格式设置方法的任何重载。

下面的示例演示如何使用一个类来实现 IFormatProvider 接口和 GetFormat 方法。AcctNumberFormat 类将表示帐号的 Int64 值转换为格式化的 12 位帐号。如果 formatType 参数引用的类实现 ICustomFormatter，其 GetFormat 方法返回对自身的引用；否则，GetFormat 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 下面的示例演示如何使用一个类来实现 IFormatProvider 接口和 GetFormat 方法。AcctNumberFormat 类将表示帐号的 Int64 值转换为格式化的 12 位帐号。如果 formatType 参数引用的类实现 ICustomFormatter，其 GetFormat 方法返回对自身的引用；否则，GetFormat 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 下面的示例演示如何使用一个类来实现 IFormatProvider 接口和 GetFormat 方法。AcctNumberFormat 类将表示帐号的 Int64 值转换为格式化的 12 位帐号。如果 formatType 参数引用的类实现 ICustomFormatter，其 GetFormat 方法返回对自身的引用；否则，GetFormat 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Public Class AcctNumberFormat : Implements IFormatProvider, ICustomFormatter

   Private Const ACCT_LENGTH As Integer = 12

   Public Function GetFormat(formatType As Type) As Object _
                   Implements IFormatProvider.GetFormat
      If formatType Is GetType(ICustomFormatter) Then
         Return Me
      Else
         Return Nothing
      End If
   End Function

   Public Function Format(fmt As String, arg As Object, formatProvider As IFormatProvider) As String _
                          Implements ICustomFormatter.Format

      ' Provide default formatting if arg is not an Int64.
       If Not TypeOf arg Is Int64 Then
         Try
            Return HandleOtherFormats(fmt, arg)
         Catch e As FormatException
            Throw New FormatException(String.Format("The format of '{0}' is invalid.", fmt), e)
         End Try
       End If

      ' Provider default formatting for unsupported format strings.
      Dim ufmt As String = fmt.ToUpper(CultureInfo.InvariantCulture)
      If Not (ufmt = "H" Or ufmt = "I") Then
         Try
            Return HandleOtherFormats(fmt, arg)
         Catch e As FormatException
            Throw New FormatException(String.Format("The format of '{0}' is invalid.", fmt), e)
         End Try
      End If

      ' Convert argument to a string.
      Dim result As String = arg.ToString()

      ' If account number is less than 12 characters, pad with leading zeroes.
      If result.Length < ACCT_LENGTH Then result = result.PadLeft(ACCT_LENGTH, "0"c)
      ' If account number is more than 12 characters, truncate to 12 characters.
      If result.Length > ACCT_LENGTH Then result = Left(result, ACCT_LENGTH)

      If ufmt = "I"                              ' Integer-only format.
         Return result
      ' Add hyphens for H format specifier.
      Else                                       ' Hypenated format.
         Return Left(result, 5) & "-" & Mid(result, 6, 3) & "-" & Right(result, 4)
      End If
   End Function

   Private Function HandleOtherFormats(fmt As String, arg As Object) As String
      If TypeOf arg Is IFormattable Then
         Return DirectCast(arg, IFormattable).ToString(fmt, CultureInfo.CurrentCulture)
      ElseIf arg IsNot Nothing Then
         Return arg.ToString()
      Else
         Return String.Empty
      End If
   End Function
End Class

public class AcctNumberFormat : IFormatProvider, ICustomFormatter
{
   private const int ACCT_LENGTH = 12;

   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(string fmt, object arg, IFormatProvider formatProvider)
   {
      // Provide default formatting if arg is not an Int64.
      if (arg.GetType() != typeof(Int64))
         try {
            return HandleOtherFormats(fmt, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }

      // Provide default formatting for unsupported format strings.
      string ufmt = fmt.ToUpper(CultureInfo.InvariantCulture);
      if (! (ufmt == "H" || ufmt == "I"))
         try {
            return HandleOtherFormats(fmt, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }

      // Convert argument to a string.
      string result = arg.ToString();

      // If account number is less than 12 characters, pad with leading zeroes.
      if (result.Length < ACCT_LENGTH)
         result = result.PadLeft(ACCT_LENGTH, '0');
      // If account number is more than 12 characters, truncate to 12 characters.
      if (result.Length > ACCT_LENGTH)
         result = result.Substring(0, ACCT_LENGTH);

      if (ufmt == "I")                    // Integer-only format.
         return result;
      // Add hyphens for H format specifier.
      else                                         // Hyphenated format.
         return result.Substring(0, 5) + "-" + result.Substring(5, 3) + "-" + result.Substring(8);
   }

   private string HandleOtherFormats(string format, object arg)
   {
      if (arg is IFormattable)
         return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
      else if (arg != null)
         return arg.ToString();
      else
         return String.Empty;
   }
}

AcctNumberFormat 类的实例然后可以作为参数传递到提供格式设置或分析服务的方法中。例如，下面的代码将 AcctNumberFormat 类传递到 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法，以生成设置了格式的 12 位帐号。 AcctNumberFormat 类的实例然后可以作为参数传递到提供格式设置或分析服务的方法中。例如，下面的代码将 AcctNumberFormat 类传递到 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法，以生成设置了格式的 12 位帐号。

Imports System.Globalization

Public Enum DaysOfWeek As Long
   Monday = 1
   Tuesday = 2
End Enum

Module TestFormatting
   Public Sub Main()
      Dim acctNumber As Long, balance As Double
      Dim wday As DaysOfWeek
      Dim output As String

      acctNumber = 104254567890
      balance = 16.34
      wday = DaysOfWeek.Monday

      output = String.Format(New AcctNumberFormat(), "On {2}, the balance of account {0:H} was {1:C2}.", acctNumber, balance, wday)
      Console.WriteLine(output)

      wday = DaysOfWeek.Tuesday
      output = String.Format(New AcctNumberFormat(), "On {2}, the balance of account {0:I} was {1:C2}.", acctNumber, balance, wday)
      Console.WriteLine(output)
   End Sub
End Module
' The example displays the following output:
'    On Monday, the balance of account 10425-456-7890 was $16.34.
'    On Tuesday, the balance of account 104254567890 was $16.34.

using System;
using System.Globalization;

public enum DaysOfWeek { Monday=1, Tuesday=2 };

public class TestFormatting
{
   public static void Main()
   {
      long acctNumber;
      double balance;
      DaysOfWeek wday;
      string output;

      acctNumber = 104254567890;
      balance = 16.34;
      wday = DaysOfWeek.Monday;

      output = String.Format(new AcctNumberFormat(),
                             "On {2}, the balance of account {0:H} was {1:C2}.",
                             acctNumber, balance, wday);
      Console.WriteLine(output);

      wday = DaysOfWeek.Tuesday;
      output = String.Format(new AcctNumberFormat(),
                             "On {2}, the balance of account {0:I} was {1:C2}.",
                             acctNumber, balance, wday);
      Console.WriteLine(output);
   }
}
// The example displays the following output:
//       On Monday, the balance of account 10425-456-7890 was $16.34.
//       On Tuesday, the balance of account 104254567890 was $16.34.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IFormatProvider 接口
IFormatProvider 成员
System 命名空间


IFormattable 接口

IFormattable 接口
成员

提供将对象的值格式化为字符串表示形式的功能。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IFormattable
[ComVisibleAttribute(true)]
public interface IFormattable
[ComVisibleAttribute(true)]
public interface class IFormattable
[<ComVisibleAttribute(true)>]
type IFormattable =  interface end

IFormattable 接口基于格式字符串和格式提供程序，将对象转换为其字符串表现形式。

格式字符串通常定义对象的常规外观。例如，.NET Framework 支持下列： 格式字符串通常定义对象的常规外观。例如，.NET Framework 支持下列：

  • 用于枚举值格式设置的标准格式字符串（请参见 枚举格式字符串）。

  • 用于数字值格式设置的标准和自定义格式字符串（请参见 标准数字格式字符串 和 自定义数字格式字符串）。

  • 用于日期和时间值格式设置的标准和自定义格式字符串（请参见 标准日期和时间格式字符串 和 自定义日期和时间格式字符串）。

  • 用于时间间隔格式设置的标准和自定义格式字符串（请参见 标准 TimeSpan 格式字符串 和 自定义的 TimeSpan 格式字符串）。

还可以定义自己的格式字符串，以便支持应用程序所定义的类型的格式设置。

格式提供程序返回一个格式设置对象，该对象通常定义用于将对象转换为其字符串表示形式的符号。例如，将数字转换为货币值时，定义货币符号的格式提供程序出现在结果字符串中。.NET Framework 定义了三种格式提供程序： 格式提供程序返回一个格式设置对象，该对象通常定义用于将对象转换为其字符串表示形式的符号。例如，将数字转换为货币值时，定义货币符号的格式提供程序出现在结果字符串中。.NET Framework 定义了三种格式提供程序： 格式提供程序返回一个格式设置对象，该对象通常定义用于将对象转换为其字符串表示形式的符号。例如，将数字转换为货币值时，定义货币符号的格式提供程序出现在结果字符串中。.NET Framework 定义了三种格式提供程序：

  • System.Globalization..::.CultureInfo 类，返回 NumberFormatInfo 对象用于设置数字值格式，或者返回 DateTimeFormatInfo 对象用于设置日期和时间值的格式。

  • System.Globalization..::.NumberFormatInfo 类，返回自身的实例用于设置数字值的格式。

  • System.Globalization..::.DateTimeFormatInfo 类，返回自身的实例用于设置日期和时间值的格式。

此外，您可以定义您自己的自定义格式提供程序，以提供在格式中使用的区域性特定、职业特定或行业特定的信息。有关通过使用自定义格式提供程序实现自定义格式的更多信息，请参见 ICustomFormatter。 此外，您可以定义您自己的自定义格式提供程序，以提供在格式中使用的区域性特定、职业特定或行业特定的信息。有关通过使用自定义格式提供程序实现自定义格式的更多信息，请参见 ICustomFormatter。

IFormattable 接口定义一个方法 ToString，为实现类型提供格式设置服务。ToString 方法可直接调用。此外，它通过 Convert..::.ToString(Object) 和 Convert..::.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中 复合格式设置功能的方法自动调用。其中，这些方法包括 Console..::.WriteLine(String, Object)、String..::.Format 和 StringBuilder..::.AppendFormat(String, Object)。ToString 方法为方法的格式字符串中每一个格式项进行调用。 IFormattable 接口定义一个方法 ToString，为实现类型提供格式设置服务。ToString 方法可直接调用。此外，它通过 Convert..::.ToString(Object) 和 Convert..::.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中 复合格式设置功能的方法自动调用。其中，这些方法包括 Console..::.WriteLine(String, Object)、String..::.Format 和 StringBuilder..::.AppendFormat(String, Object)。ToString 方法为方法的格式字符串中每一个格式项进行调用。 IFormattable 接口定义一个方法 ToString，为实现类型提供格式设置服务。ToString 方法可直接调用。此外，它通过 Convert..::.ToString(Object) 和 Convert..::.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中 复合格式设置功能的方法自动调用。其中，这些方法包括 Console..::.WriteLine(String, Object)、String..::.Format 和 StringBuilder..::.AppendFormat(String, Object)。ToString 方法为方法的格式字符串中每一个格式项进行调用。 IFormattable 接口定义一个方法 ToString，为实现类型提供格式设置服务。ToString 方法可直接调用。此外，它通过 Convert..::.ToString(Object) 和 Convert..::.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中 复合格式设置功能的方法自动调用。其中，这些方法包括 Console..::.WriteLine(String, Object)、String..::.Format 和 StringBuilder..::.AppendFormat(String, Object)。ToString 方法为方法的格式字符串中每一个格式项进行调用。 IFormattable 接口定义一个方法 ToString，为实现类型提供格式设置服务。ToString 方法可直接调用。此外，它通过 Convert..::.ToString(Object) 和 Convert..::.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中 复合格式设置功能的方法自动调用。其中，这些方法包括 Console..::.WriteLine(String, Object)、String..::.Format 和 StringBuilder..::.AppendFormat(String, Object)。ToString 方法为方法的格式字符串中每一个格式项进行调用。

IFormattable 接口由基础数据类型实现。

对实现者的说明

需要的字符串格式化控件比 Object..::.ToString 提供的多的类应实现 IFormattable。

实现 IFormattable 的类必须支持“G”（常规）格式说明符。除“G”说明符外，该类还可以定义它支持的格式说明符的列表。此外，类必须准备处理的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 格式说明符。有关格式化和格式化代码的更多信息，请参见 格式化类型。 实现 IFormattable 的类必须支持“G”（常规）格式说明符。除“G”说明符外，该类还可以定义它支持的格式说明符的列表。此外，类必须准备处理的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 格式说明符。有关格式化和格式化代码的更多信息，请参见 格式化类型。 实现 IFormattable 的类必须支持“G”（常规）格式说明符。除“G”说明符外，该类还可以定义它支持的格式说明符的列表。此外，类必须准备处理的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 格式说明符。有关格式化和格式化代码的更多信息，请参见 格式化类型。 实现 IFormattable 的类必须支持“G”（常规）格式说明符。除“G”说明符外，该类还可以定义它支持的格式说明符的列表。此外，类必须准备处理的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 格式说明符。有关格式化和格式化代码的更多信息，请参见 格式化类型。

下面的示例定义一个实现 IFormattable 接口的 Temperature 类。该类支持四个格式说明符："G" 和 "C"，指示温度以摄氏度显示；"F"，指示温度以华氏度显示；"K"，指示温度以开氏度显示。此外，IFormattable..::.ToString 实现还可以处理为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或为空的格式字符串。Temperature 类定义的其他两个 ToString 方法只是将调用包装到 IFormattable..::.ToString 实现。 下面的示例定义一个实现 IFormattable 接口的 Temperature 类。该类支持四个格式说明符："G" 和 "C"，指示温度以摄氏度显示；"F"，指示温度以华氏度显示；"K"，指示温度以开氏度显示。此外，IFormattable..::.ToString 实现还可以处理为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或为空的格式字符串。Temperature 类定义的其他两个 ToString 方法只是将调用包装到 IFormattable..::.ToString 实现。 下面的示例定义一个实现 IFormattable 接口的 Temperature 类。该类支持四个格式说明符："G" 和 "C"，指示温度以摄氏度显示；"F"，指示温度以华氏度显示；"K"，指示温度以开氏度显示。此外，IFormattable..::.ToString 实现还可以处理为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或为空的格式字符串。Temperature 类定义的其他两个 ToString 方法只是将调用包装到 IFormattable..::.ToString 实现。 下面的示例定义一个实现 IFormattable 接口的 Temperature 类。该类支持四个格式说明符："G" 和 "C"，指示温度以摄氏度显示；"F"，指示温度以华氏度显示；"K"，指示温度以开氏度显示。此外，IFormattable..::.ToString 实现还可以处理为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或为空的格式字符串。Temperature 类定义的其他两个 ToString 方法只是将调用包装到 IFormattable..::.ToString 实现。

Imports System.Globalization

Public Class Temperature : Implements IFormattable
   Private temp As Decimal

   Public Sub New(temperature As Decimal)
      If temperature < -273.15 Then _
        Throw New ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.", _
                                              temperature))
      Me.temp = temperature
   End Sub

   Public ReadOnly Property Celsius As Decimal
      Get
         Return temp
      End Get
   End Property

   Public ReadOnly Property Fahrenheit As Decimal
      Get
         Return temp * 9 / 5 + 32
      End Get
   End Property

   Public ReadOnly Property Kelvin As Decimal
      Get
         Return temp + 273.15d
      End Get
   End Property

   Public Overrides Function ToString() As String
      Return Me.ToString("G", CultureInfo.CurrentCulture)
   End Function

   Public Overloads Function ToString(fmt As String) As String
      Return Me.ToString(fmt, CultureInfo.CurrentCulture)
   End Function

   Public Overloads Function ToString(fmt As String, provider As IFormatProvider) _
                   As String _
                   Implements IFormattable.ToString
      If String.IsNullOrEmpty(fmt) Then fmt = "G"
      If provider Is Nothing Then provider = CultureInfo.CurrentCulture

      Select Case fmt.ToUpperInvariant()
         Case "G", "C"
            Return temp.ToString("F2", provider) + "  C"
         Case "F"
            Return Fahrenheit.ToString("F2", provider) + "  F"
         Case "K"
            Return Kelvin.ToString("F2", provider) + "  K"
         Case Else
            Throw New FormatException(String.Format("The {0} format string is not supported.", fmt))
      End Select
   End Function
End Class

using System;
using System.Globalization;

public class Temperature : IFormattable
{
   private decimal temp;

   public Temperature(decimal temperature)
   {
      if (temperature < -273.15m)
        throw new ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.",
                                              temperature));
      this.temp = temperature;
   }

   public decimal Celsius
   {
      get { return temp; }
   }

   public decimal Fahrenheit
   {
      get { return temp * 9 / 5 + 32; }
   }

   public decimal Kelvin
   {
      get { return temp + 273.15m; }
   }

   public override string ToString()
   {
      return this.ToString("G", CultureInfo.CurrentCulture);
   }

   public string ToString(string format)
   {
      return this.ToString(format, CultureInfo.CurrentCulture);
   }

   public string ToString(string format, IFormatProvider provider)
   {
      if (String.IsNullOrEmpty(format)) format = "G";
      if (provider == null) provider = CultureInfo.CurrentCulture;

      switch (format.ToUpperInvariant())
      {
         case "G":
         case "C":
            return temp.ToString("F2", provider) + " °C";
         case "F":
            return Fahrenheit.ToString("F2", provider) + " °F";
         case "K":
            return Kelvin.ToString("F2", provider) + " °K";
         default:
            throw new FormatException(String.Format("The {0} format string is not supported.", format));
      }
   }
}

下面的示例则直接或使用复合格式字符串调用 IFormattable..::.ToString 实现。

Module Example
   Public Sub Main()
      ' Use composite formatting with format string in the format item.
      Dim temp1 As New Temperature(0)
      Console.WriteLine("{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1)
      Console.WriteLine()

      ' Use composite formatting with a format provider.
      temp1 = New Temperature(-40)
      Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1))
      Console.WriteLine(String.Format(New CultureInfo("fr-FR"), "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1))
      Console.WriteLine()

      ' Call ToString method with format string.
      temp1 = New Temperature(32)
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)", _
                        temp1.ToString("C"), temp1.ToString("K"), temp1.ToString("F"))
      Console.WriteLine()

      ' Call ToString with format string and format provider
      temp1 = New Temperature(100)
      Dim current As NumberFormatInfo = NumberFormatInfo.CurrentInfo
      Dim nl As New CultureInfo("nl-NL")
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)", _
                        temp1.ToString("C", current), temp1.ToString("K", current), temp1.ToString("F", current))
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)", _
                        temp1.ToString("C", nl), temp1.ToString("K", nl), temp1.ToString("F", nl))
   End Sub
End Module
' The example displays the following output:
'    0.00  C (Celsius) = 273.15  K (Kelvin) = 32.00  F (Fahrenheit)
'
'    -40.00  C (Celsius) = 233.15  K (Kelvin) = -40.00  F (Fahrenheit)
'    -40,00  C (Celsius) = 233,15  K (Kelvin) = -40,00  F (Fahrenheit)
'
'    32.00  C (Celsius) = 305.15  K (Kelvin) = 89.60  F (Fahrenheit)
'
'    100.00  C (Celsius) = 373.15  K (Kelvin) = 212.00  F (Fahrenheit)
'    100,00  C (Celsius) = 373,15  K (Kelvin) = 212,00  F (Fahrenheit)

public class Example
{
   public static void Main()
   {
      // Use composite formatting with format string in the format item.
      Temperature temp1 = new Temperature(0);
      Console.WriteLine("{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1);

      // Use composite formatting with a format provider.
      temp1 = new Temperature(-40);
      Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1));
      Console.WriteLine(String.Format(new CultureInfo("fr-FR"), "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1));

      // Call ToString method with format string.
      temp1 = new Temperature(32);
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)\n",
                        temp1.ToString("C"), temp1.ToString("K"), temp1.ToString("F"));

      // Call ToString with format string and format provider
      temp1 = new Temperature(100)      ;
      NumberFormatInfo current = NumberFormatInfo.CurrentInfo;
      CultureInfo nl = new CultureInfo("nl-NL");
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)",
                        temp1.ToString("C", current), temp1.ToString("K", current), temp1.ToString("F", current));
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)",
                        temp1.ToString("C", nl), temp1.ToString("K", nl), temp1.ToString("F", nl));
   }
}
// The example displays the following output:
//    0.00 °C (Celsius) = 273.15 °K (Kelvin) = 32.00 °F (Fahrenheit)
//
//    -40.00 °C (Celsius) = 233.15 °K (Kelvin) = -40.00 °F (Fahrenheit)
//    -40,00 °C (Celsius) = 233,15 °K (Kelvin) = -40,00 °F (Fahrenheit)
//
//    32.00 °C (Celsius) = 305.15 °K (Kelvin) = 89.60 °F (Fahrenheit)
//
//    100.00 °C (Celsius) = 373.15 °K (Kelvin) = 212.00 °F (Fahrenheit)
//    100,00 °C (Celsius) = 373,15 °K (Kelvin) = 212,00 °F (Fahrenheit)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IFormattable 成员
System 命名空间
IFormatProvider
Object ToString
CurrentCulture

其他资源

格式化类型


IFormattable 成员

IFormattable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IFormattable 接口

提供将对象的值格式化为字符串表示形式的功能。

IFormattable 类型公开以下成员。

名称 说明
页首

参考

IFormattable 接口
System 命名空间


IFormattable 方法

IFormattable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IFormattable 接口

IFormattable 类型公开以下成员。

名称 说明
页首

参考

IFormattable 接口
System 命名空间


IFormattable ..::.ToString 方法

IFormattable
.
.
::
.
ToString 方法
IFormattable 接口

使用指定的格式格式化当前实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function ToString ( _
    format As String, _
    formatProvider As IFormatProvider _
) As String
string ToString(
    string format,
    IFormatProvider formatProvider
)
String^ ToString(
    String^ format,
    IFormatProvider^ formatProvider
)
abstract ToString :
        format:string *
        formatProvider:IFormatProvider -> string

参数

format
类型： System String
要使用的格式。
- 或 -
null 引用（Visual Basic 中为 Nothing）将使用为 IFormattable 实现的类型所定义的默认格式。
formatProvider
类型： System IFormatProvider
要用于设置值格式的提供程序。
- 或 -
null 引用（Visual Basic 中为 Nothing）将从操作系统的当前区域设置中获取数字格式信息。

返回值

类型： System String
当前实例的值，以指定格式表示。

ToString 方法将值转换为可以用多种方式来表示的字符串表示形式。其精确格式取决于由特定区域性、专业或行业定义的特定符号或指定顺序。可以直接调用该方法。此外，它通过 Convert..::.ToString(Object) 和 Convert..::.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中复合格式设置功能的方法（如 String..::.Format(String, array<Object>[]()[])、 Console..::.WriteLine(String, array<Object>[]()[]) 和 StringBuilder..::.AppendFormat(String, array<Object>[]()[])）自动调用。（有关详情，请参阅 复合格式。） ToString 方法将值转换为可以用多种方式来表示的字符串表示形式。其精确格式取决于由特定区域性、专业或行业定义的特定符号或指定顺序。可以直接调用该方法。此外，它通过 Convert..::.ToString(Object) 和 Convert..::.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中复合格式设置功能的方法（如 String..::.Format(String, array<Object>[]()[])、 Console..::.WriteLine(String, array<Object>[]()[]) 和 StringBuilder..::.AppendFormat(String, array<Object>[]()[])）自动调用。（有关详情，请参阅 复合格式。） ToString 方法将值转换为可以用多种方式来表示的字符串表示形式。其精确格式取决于由特定区域性、专业或行业定义的特定符号或指定顺序。可以直接调用该方法。此外，它通过 Convert..::.ToString(Object) 和 Convert..::.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中复合格式设置功能的方法（如 String..::.Format(String, array<Object>[]()[])、 Console..::.WriteLine(String, array<Object>[]()[]) 和 StringBuilder..::.AppendFormat(String, array<Object>[]()[])）自动调用。（有关详情，请参阅 复合格式。） ToString 方法将值转换为可以用多种方式来表示的字符串表示形式。其精确格式取决于由特定区域性、专业或行业定义的特定符号或指定顺序。可以直接调用该方法。此外，它通过 Convert..::.ToString(Object) 和 Convert..::.ToString(Object, IFormatProvider) 方法以及使用 .NET Framework 中复合格式设置功能的方法（如 String..::.Format(String, array<Object>[]()[])、 Console..::.WriteLine(String, array<Object>[]()[]) 和 StringBuilder..::.AppendFormat(String, array<Object>[]()[])）自动调用。（有关详情，请参阅 复合格式。）

复合格式设置方法为格式字符串中的每一格式项自动调用一次 ToString 方法。传递到方法的参数取决于调用的特定格式设置方法以及格式项的内容，如下所述： 复合格式设置方法为格式字符串中的每一格式项自动调用一次 ToString 方法。传递到方法的参数取决于调用的特定格式设置方法以及格式项的内容，如下所述：

  • 如果格式项不包含格式字符串（例如，如果格式项只是 {0}），则它将把 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为 System..::.String 参数的值。

  • 如果格式项包含格式字符串（例如，{0:G}），则将该格式字符串作为 System..::.String 参数的值。

  • 如果原始的方法调用不包含 System..::.IFormatProvider 参数，则 CultureInfo..::.CurrentCulture 将作为 System..::.IFormatProvider 参数的值。

  • 如果原始的方法调用包含 System..::.IFormatProvider 参数，则随方法调用提供的提供程序将作为 System..::.IFormatProvider 参数的值。

说明 说明

仅当向复合格式设置方法传递 ICustomFormatter 格式提供程序或自定义格式提供程序的 Format 方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，此复合格式设置方法将调用对象的 ToString 实现。

.NET Framework 包括三种格式的提供程序，都实现了 IFormatProvider 接口：

  • NumberFormatInfo 提供数字格式信息，如用于小数分隔符和组分隔符的字符，以及货币值中货币符号的拼写和位置。

  • DateTimeFormatInfo 提供与日期、时间相关的格式信息，如日期模式中月、日和年的位置。

  • CultureInfo 包含特定区域中的默认格式信息，其中包括数字格式信息以及与日期、时间相关的格式信息。

此外，您还可以定义自己的自定义格式提供程序。

对实现者的说明

ToString 方法必须支持 "G"（常规）格式说明符。除“G”说明符外，该类还可以定义它支持的格式说明符的列表。此外，类必须准备处理的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 格式说明符。有关格式化和格式化代码的更多信息，请参见 格式化类型。 ToString 方法必须支持 "G"（常规）格式说明符。除“G”说明符外，该类还可以定义它支持的格式说明符的列表。此外，类必须准备处理的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 格式说明符。有关格式化和格式化代码的更多信息，请参见 格式化类型。 ToString 方法必须支持 "G"（常规）格式说明符。除“G”说明符外，该类还可以定义它支持的格式说明符的列表。此外，类必须准备处理的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 格式说明符。有关格式化和格式化代码的更多信息，请参见 格式化类型。 ToString 方法必须支持 "G"（常规）格式说明符。除“G”说明符外，该类还可以定义它支持的格式说明符的列表。此外，类必须准备处理的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 格式说明符。有关格式化和格式化代码的更多信息，请参见 格式化类型。

下面的示例演示了实现 ToString 方法的 Temperature 类。此代码示例摘自为 IFormattable 类提供的一个更大的示例。 下面的示例演示了实现 ToString 方法的 Temperature 类。此代码示例摘自为 IFormattable 类提供的一个更大的示例。

Imports System.Globalization

Public Class Temperature : Implements IFormattable
   Private temp As Decimal

   Public Sub New(temperature As Decimal)
      If temperature < -273.15 Then _
        Throw New ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.", _
                                              temperature))
      Me.temp = temperature
   End Sub

   Public ReadOnly Property Celsius As Decimal
      Get
         Return temp
      End Get
   End Property

   Public ReadOnly Property Fahrenheit As Decimal
      Get
         Return temp * 9 / 5 + 32
      End Get
   End Property

   Public ReadOnly Property Kelvin As Decimal
      Get
         Return temp + 273.15d
      End Get
   End Property

   Public Overrides Function ToString() As String
      Return Me.ToString("G", CultureInfo.CurrentCulture)
   End Function

   Public Overloads Function ToString(fmt As String) As String
      Return Me.ToString(fmt, CultureInfo.CurrentCulture)
   End Function

   Public Overloads Function ToString(fmt As String, provider As IFormatProvider) _
                   As String _
                   Implements IFormattable.ToString
      If String.IsNullOrEmpty(fmt) Then fmt = "G"
      If provider Is Nothing Then provider = CultureInfo.CurrentCulture

      Select Case fmt.ToUpperInvariant()
         Case "G", "C"
            Return temp.ToString("F2", provider) + "  C"
         Case "F"
            Return Fahrenheit.ToString("F2", provider) + "  F"
         Case "K"
            Return Kelvin.ToString("F2", provider) + "  K"
         Case Else
            Throw New FormatException(String.Format("The {0} format string is not supported.", fmt))
      End Select
   End Function
End Class

using System;
using System.Globalization;

public class Temperature : IFormattable
{
   private decimal temp;

   public Temperature(decimal temperature)
   {
      if (temperature < -273.15m)
        throw new ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.",
                                              temperature));
      this.temp = temperature;
   }

   public decimal Celsius
   {
      get { return temp; }
   }

   public decimal Fahrenheit
   {
      get { return temp * 9 / 5 + 32; }
   }

   public decimal Kelvin
   {
      get { return temp + 273.15m; }
   }

   public override string ToString()
   {
      return this.ToString("G", CultureInfo.CurrentCulture);
   }

   public string ToString(string format)
   {
      return this.ToString(format, CultureInfo.CurrentCulture);
   }

   public string ToString(string format, IFormatProvider provider)
   {
      if (String.IsNullOrEmpty(format)) format = "G";
      if (provider == null) provider = CultureInfo.CurrentCulture;

      switch (format.ToUpperInvariant())
      {
         case "G":
         case "C":
            return temp.ToString("F2", provider) + " °C";
         case "F":
            return Fahrenheit.ToString("F2", provider) + " °F";
         case "K":
            return Kelvin.ToString("F2", provider) + " °K";
         default:
            throw new FormatException(String.Format("The {0} format string is not supported.", format));
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IFormattable 接口
IFormattable 成员
System 命名空间
String
IFormatProvider
System.Globalization NumberFormatInfo
System.Globalization DateTimeFormatInfo
System.Globalization CultureInfo


IndexOutOfRangeException 类

IndexOutOfRangeException 类
成员

尝试访问索引超出数组界限的数组元素时引发的异常。无法继承此类。 尝试访问索引超出数组界限的数组元素时引发的异常。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class IndexOutOfRangeException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class IndexOutOfRangeException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class IndexOutOfRangeException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type IndexOutOfRangeException =
    class
        inherit SystemException
    end

下面的 Microsoft 中间语言 (MSIL) 指令引发 IndexOutOfRangeException：

  • ldelem.<type>

  • ldelema

  • stelem.<type>

IndexOutOfRangeException 使用值为 0x80131508 的 HRESULT COR_E_INDEXOUTOFRANGE。

此异常的最常见原因是循环访问时错误计算了查找索引或使用了错误的起始点或结束点。有关其他原因，请参见 关于异常的疑难解答：System.IndexOutOfRangeException。 此异常的最常见原因是循环访问时错误计算了查找索引或使用了错误的起始点或结束点。有关其他原因，请参见 关于异常的疑难解答：System.IndexOutOfRangeException。

有关 IndexOutOfRangeException 实例的初始属性值列表，请参见 IndexOutOfRangeException 构造函数。

System System..::.IndexOutOfRangeExceptionIndexOutOfRangeException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IndexOutOfRangeException 成员
System 命名空间
Exception

其他资源

处理和引发异常


IndexOutOfRangeException 成员

IndexOutOfRangeException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IndexOutOfRangeException 类

尝试访问索引超出数组界限的数组元素时引发的异常。无法继承此类。 尝试访问索引超出数组界限的数组元素时引发的异常。无法继承此类。

IndexOutOfRangeException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

IndexOutOfRangeException 类
System 命名空间


IndexOutOfRangeException 构造函数

IndexOutOfRangeException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IndexOutOfRangeException 类

初始化 IndexOutOfRangeException 类的新实例。

名称 说明
页首

参考

IndexOutOfRangeException 类
IndexOutOfRangeException 成员
System 命名空间


IndexOutOfRangeException 构造函数

IndexOutOfRangeException 构造函数
IndexOutOfRangeException 类

初始化 IndexOutOfRangeException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public IndexOutOfRangeException()
public:
IndexOutOfRangeException()
new : unit -> IndexOutOfRangeException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“数组索引超出范围。”。此消息将考虑当前系统区域性。

下表显示 IndexOutOfRangeException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IndexOutOfRangeException 类
IndexOutOfRangeException 成员
IndexOutOfRangeException 重载
System 命名空间


IndexOutOfRangeException 构造函数 (String)

IndexOutOfRangeException 构造函数 (String)
IndexOutOfRangeException 类

使用指定错误信息初始化 IndexOutOfRangeException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public IndexOutOfRangeException(
    string message
)
public:
IndexOutOfRangeException(
    String^ message
)
new :
        message:string -> IndexOutOfRangeException

参数

message
类型： System String
描述错误的消息。

此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 IndexOutOfRangeException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IndexOutOfRangeException 类
IndexOutOfRangeException 成员
IndexOutOfRangeException 重载
System 命名空间


IndexOutOfRangeException 构造函数 (String, Exception)

IndexOutOfRangeException 构造函数 (String, Exception)
IndexOutOfRangeException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 IndexOutOfRangeException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public IndexOutOfRangeException(
    string message,
    Exception innerException
)
public:
IndexOutOfRangeException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> IndexOutOfRangeException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 IndexOutOfRangeException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IndexOutOfRangeException 类
IndexOutOfRangeException 成员
IndexOutOfRangeException 重载
System 命名空间
Exception


IndexOutOfRangeException 方法

IndexOutOfRangeException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IndexOutOfRangeException 类

IndexOutOfRangeException 类型公开以下成员。

名称 说明
页首

参考

IndexOutOfRangeException 类
System 命名空间


IndexOutOfRangeException 属性

IndexOutOfRangeException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IndexOutOfRangeException 类

IndexOutOfRangeException 类型公开以下成员。

名称 说明
页首

参考

IndexOutOfRangeException 类
System 命名空间


IndexOutOfRangeException 事件

IndexOutOfRangeException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IndexOutOfRangeException 类

IndexOutOfRangeException 类型公开以下成员。

名称 说明
页首

参考

IndexOutOfRangeException 类
System 命名空间


InsufficientExecutionStackException 类

InsufficientExecutionStackException 类
成员

执行堆栈不足，大多数方法无法执行时所引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public NotInheritable Class InsufficientExecutionStackException _
    Inherits SystemException
[SerializableAttribute]
public sealed class InsufficientExecutionStackException : SystemException
[SerializableAttribute]
public ref class InsufficientExecutionStackException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
type InsufficientExecutionStackException =
    class
        inherit SystemException
    end

System System..::.InsufficientExecutionStackExceptionInsufficientExecutionStackException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

InsufficientExecutionStackException 成员
System 命名空间


InsufficientExecutionStackException 成员

InsufficientExecutionStackException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientExecutionStackException 类

执行堆栈不足，大多数方法无法执行时所引发的异常。

InsufficientExecutionStackException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InsufficientExecutionStackException 类
System 命名空间


InsufficientExecutionStackException 构造函数

InsufficientExecutionStackException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientExecutionStackException 类

初始化 InsufficientExecutionStackException 类的新实例。

名称 说明
页首

参考

InsufficientExecutionStackException 类
InsufficientExecutionStackException 成员
System 命名空间


InsufficientExecutionStackException 构造函数

InsufficientExecutionStackException 构造函数
InsufficientExecutionStackException 类

初始化 InsufficientExecutionStackException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public InsufficientExecutionStackException()
public:
InsufficientExecutionStackException()
new : unit -> InsufficientExecutionStackException

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

InsufficientExecutionStackException 类
InsufficientExecutionStackException 成员
InsufficientExecutionStackException 重载
System 命名空间


InsufficientExecutionStackException 构造函数 (String)

InsufficientExecutionStackException 构造函数 (String)
InsufficientExecutionStackException 类

用指定的错误消息初始化 InsufficientExecutionStackException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public InsufficientExecutionStackException(
    string message
)
public:
InsufficientExecutionStackException(
    String^ message
)
new :
        message:string -> InsufficientExecutionStackException

参数

message
类型： System String
解释异常原因的错误信息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

InsufficientExecutionStackException 类
InsufficientExecutionStackException 成员
InsufficientExecutionStackException 重载
System 命名空间


InsufficientExecutionStackException 构造函数 (String, Exception)

InsufficientExecutionStackException 构造函数 (String, Exception)
InsufficientExecutionStackException 类

用指定的错误消息并引用作为此异常的原因的内部异常来初始化 InsufficientExecutionStackException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public InsufficientExecutionStackException(
    string message,
    Exception innerException
)
public:
InsufficientExecutionStackException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> InsufficientExecutionStackException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则将在处理内部异常的 catch 块中引发当前的异常。 导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则将在处理内部异常的 catch 块中引发当前的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

InsufficientExecutionStackException 类
InsufficientExecutionStackException 成员
InsufficientExecutionStackException 重载
System 命名空间


InsufficientExecutionStackException 方法

InsufficientExecutionStackException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientExecutionStackException 类

InsufficientExecutionStackException 类型公开以下成员。

名称 说明
页首

参考

InsufficientExecutionStackException 类
System 命名空间


InsufficientExecutionStackException 属性

InsufficientExecutionStackException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientExecutionStackException 类

InsufficientExecutionStackException 类型公开以下成员。

名称 说明
页首

参考

InsufficientExecutionStackException 类
System 命名空间


InsufficientExecutionStackException 事件

InsufficientExecutionStackException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientExecutionStackException 类

InsufficientExecutionStackException 类型公开以下成员。

名称 说明
页首

参考

InsufficientExecutionStackException 类
System 命名空间


InsufficientMemoryException 类

InsufficientMemoryException 类
成员

当检测到没有足够的可用内存时引发的异常。无法继承此类。 当检测到没有足够的可用内存时引发的异常。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public NotInheritable Class InsufficientMemoryException _
    Inherits OutOfMemoryException
[SerializableAttribute]
public sealed class InsufficientMemoryException : OutOfMemoryException
[SerializableAttribute]
public ref class InsufficientMemoryException sealed : public OutOfMemoryException
[<SealedAttribute>]
[<SerializableAttribute>]
type InsufficientMemoryException =
    class
        inherit OutOfMemoryException
    end

与 OutOfMemoryException 不同，InsufficientMemoryException 在操作开始之前引发，因此不会导致状态损坏。应用程序可以捕获这个异常，对内存的使用加以控制，避免真的产生内存用尽的情况以及由此可能导致的程序状态损坏。 与 OutOfMemoryException 不同，InsufficientMemoryException 在操作开始之前引发，因此不会导致状态损坏。应用程序可以捕获这个异常，对内存的使用加以控制，避免真的产生内存用尽的情况以及由此可能导致的程序状态损坏。

当指定要分配的内存多于当前可用内存量时，由 MemoryFailPoint 构造函数引发此异常。您的程序可以捕获此异常，然后推迟需要这些内存的任务，或者将该任务分解为更小的步骤，使每一步需要的内存更少一些。 当指定要分配的内存多于当前可用内存量时，由 MemoryFailPoint 构造函数引发此异常。您的程序可以捕获此异常，然后推迟需要这些内存的任务，或者将该任务分解为更小的步骤，使每一步需要的内存更少一些。

请参见 MemoryFailPoint 类中的代码示例。

System System..::.InsufficientMemoryExceptionInsufficientMemoryException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

InsufficientMemoryException 成员
System 命名空间
MemoryFailPoint


InsufficientMemoryException 成员

InsufficientMemoryException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientMemoryException 类

当检测到没有足够的可用内存时引发的异常。无法继承此类。 当检测到没有足够的可用内存时引发的异常。无法继承此类。

InsufficientMemoryException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InsufficientMemoryException 类
System 命名空间


InsufficientMemoryException 构造函数

InsufficientMemoryException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientMemoryException 类

初始化 InsufficientMemoryException 类的新实例。

名称 说明
页首

参考

InsufficientMemoryException 类
InsufficientMemoryException 成员
System 命名空间


InsufficientMemoryException 构造函数

InsufficientMemoryException 构造函数
InsufficientMemoryException 类

使用由系统提供的用来描述错误的消息初始化 InsufficientMemoryException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public InsufficientMemoryException()
public:
InsufficientMemoryException()
new : unit -> InsufficientMemoryException

此构造函数将新实例的 Message 属性初始化为由系统提供的错误描述消息，如“此时无足够的可用内存，无法满足操作的预期要求。请稍后重试。”此消息将考虑当前系统区域性。 此构造函数将新实例的 Message 属性初始化为由系统提供的错误描述消息，如“此时无足够的可用内存，无法满足操作的预期要求。请稍后重试。”此消息将考虑当前系统区域性。

下表显示 InsufficientMemoryException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

InsufficientMemoryException 类
InsufficientMemoryException 成员
InsufficientMemoryException 重载
System 命名空间

其他资源

处理和引发异常


InsufficientMemoryException 构造函数 (String)

InsufficientMemoryException 构造函数 (String)
InsufficientMemoryException 类

使用描述错误的指定消息初始化 InsufficientMemoryException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public InsufficientMemoryException(
    string message
)
public:
InsufficientMemoryException(
    String^ message
)
new :
        message:string -> InsufficientMemoryException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 InsufficientMemoryException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

InsufficientMemoryException 类
InsufficientMemoryException 成员
InsufficientMemoryException 重载
System 命名空间

其他资源

处理和引发异常


InsufficientMemoryException 构造函数 (String, Exception)

InsufficientMemoryException 构造函数 (String, Exception)
InsufficientMemoryException 类

使用指定错误消息和对导致此异常的内部异常的引用来初始化 InsufficientMemoryException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public InsufficientMemoryException(
    string message,
    Exception innerException
)
public:
InsufficientMemoryException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> InsufficientMemoryException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 InsufficientMemoryException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

InsufficientMemoryException 类
InsufficientMemoryException 成员
InsufficientMemoryException 重载
System 命名空间

其他资源

处理和引发异常


InsufficientMemoryException 方法

InsufficientMemoryException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientMemoryException 类

InsufficientMemoryException 类型公开以下成员。

名称 说明
页首

参考

InsufficientMemoryException 类
System 命名空间


InsufficientMemoryException 属性

InsufficientMemoryException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientMemoryException 类

InsufficientMemoryException 类型公开以下成员。

名称 说明
页首

参考

InsufficientMemoryException 类
System 命名空间


InsufficientMemoryException 事件

InsufficientMemoryException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InsufficientMemoryException 类

InsufficientMemoryException 类型公开以下成员。

名称 说明
页首

参考

InsufficientMemoryException 类
System 命名空间


Int16 结构

Int16 结构
成员

表示 16 位有符号的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Int16 _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of Short),  _
    IEquatable(Of Short)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Int16 : IComparable, IFormattable,
    IConvertible, IComparable<short>, IEquatable<short>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Int16 : IComparable,
    IFormattable, IConvertible, IComparable<short>, IEquatable<short>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Int16 =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<int16>
        interface IEquatable<int16>
    end

Int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数。

此类型提供了一些方法，用于将此类型的实例值转换为其字符串表示形式，将数字的字符串表示形式转换为此类型的实例，以及比较此类型的实例。

有关格式规范代码如何控制值类型的字符串表示形式的信息，请参见 格式化类型。

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 成员
System 命名空间
UInt16


Int16 成员

Int16 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int16 结构

表示 16 位有符号的整数。

Int16 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Int16 结构
System 命名空间


Int16 字段

Int16 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int16 结构

Int16 类型公开以下成员。

名称 说明
页首

参考

Int16 结构
System 命名空间


Int16 ..::.MaxValue 字段

Int16
.
.
::
.
MaxValue 字段
Int16 结构

表示 Int16 的最大可能值。此字段为常数。 表示 Int16 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As Short
public const short MaxValue
public:
literal short MaxValue
static val mutable MaxValue: int16

该常数的值为 32767；即十六进制的 0x7FFF。

在从上限较大的数值类型（如 UInt16 或 Int32）转换为 Int16 时，MaxValue 属性通常用于防止引发 OverflowException。下面的示例演示此用法。 在从上限较大的数值类型（如 UInt16 或 Int32）转换为 Int16 时，MaxValue 属性通常用于防止引发 OverflowException。下面的示例演示此用法。

下面的示例使用 MaxValue 属性防止在转换为 Int16 值时引发 OverflowException。

Dim numbersToConvert() As Long = {162345, 32183, -54000}
Dim newNumber As Int16
For Each number As Long In NumbersToConvert
   If number >= Int16.MinValue And number <= Int16.MaxValue Then
      newNumber = Convert.ToInt16(number)
      Console.WriteLine("Successfully converted {0} to an Int16.", _
                        newNumber)
   Else
      Console.WriteLine("Unable to convert {0} to an Int16.", number)
   End If
Next
' The example displays the following output to the console:
'       Unable to convert 162345 to an Int16.
'       Successfully converted 32183 to an Int16.
'       Unable to convert -54000 to an Int16.

long[] numbersToConvert = {162345, 32183, -54000};
short newNumber;
foreach (long number in numbersToConvert)
{
   if (number >= Int16.MinValue && number <= Int16.MaxValue)
   {
      newNumber = Convert.ToInt16(number);
      Console.WriteLine("Successfully converted {0} to an Int16.",
                        newNumber);
   }
   else
   {
      Console.WriteLine("Unable to convert {0} to an Int16.", number);
   }
}
// The example displays the following output to the console:
//       Unable to convert 162345 to an Int16.
//       Successfully converted 32183 to an Int16.
//       Unable to convert -54000 to an Int16.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间
MinValue


Int16 ..::.MinValue 字段

Int16
.
.
::
.
MinValue 字段
Int16 结构

表示 Int16 的最小可能值。此字段为常数。 表示 Int16 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As Short
public const short MinValue
public:
literal short MinValue
static val mutable MinValue: int16

该常数的值为 -32768；即十六进制的 0x8000。

在从下限较大的数值类型（如 Int32 或 Int64）转换为 Int16 时，MinValue 属性通常用于防止引发 OverflowException。下面的示例演示此用法。 在从下限较大的数值类型（如 Int32 或 Int64）转换为 Int16 时，MinValue 属性通常用于防止引发 OverflowException。下面的示例演示此用法。

下面的示例使用 MinValue 属性防止在转换为 Int16 值时引发 OverflowException。

Dim numbersToConvert() As Long = {162345, 32183, -54000}
Dim newNumber As Int16
For Each number As Long In NumbersToConvert
   If number >= Int16.MinValue And number <= Int16.MaxValue Then
      newNumber = Convert.ToInt16(number)
      Console.WriteLine("Successfully converted {0} to an Int16.", _
                        newNumber)
   Else
      Console.WriteLine("Unable to convert {0} to an Int16.", number)
   End If
Next
' The example displays the following output to the console:
'       Unable to convert 162345 to an Int16.
'       Successfully converted 32183 to an Int16.
'       Unable to convert -54000 to an Int16.

long[] numbersToConvert = {162345, 32183, -54000};
short newNumber;
foreach (long number in numbersToConvert)
{
   if (number >= Int16.MinValue && number <= Int16.MaxValue)
   {
      newNumber = Convert.ToInt16(number);
      Console.WriteLine("Successfully converted {0} to an Int16.",
                        newNumber);
   }
   else
   {
      Console.WriteLine("Unable to convert {0} to an Int16.", number);
   }
}
// The example displays the following output to the console:
//       Unable to convert 162345 to an Int16.
//       Successfully converted 32183 to an Int16.
//       Unable to convert -54000 to an Int16.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间
MaxValue


Int16 方法

Int16 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int16 结构

Int16 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Int16 结构
System 命名空间


Int16 ..::.CompareTo 方法

Int16
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int16 结构

将此实例与指定对象或其他 Int16 实例进行比较，并返回一个整数，该整数指示此实例的值是小于、等于还是大于指定对象或其他 Int16 实例的值。

名称 说明
页首

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.CompareTo 方法 (Int16)

Int16
.
.
::
.
CompareTo 方法 (Int16)
Int16 结构

将此实例与指定的 16 位有符号整数进行比较，并返回一个整数，该整数指示此实例的值是小于、等于还是大于指定的 16 位有符号整数的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Short _ ) As Integer
public int CompareTo( short value )
public: virtual int CompareTo( short value ) sealed
abstract CompareTo : value:int16 -> int override CompareTo : value:int16 -> int
参数
value
类型： System Int16
要比较的整数。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Int16..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的代码示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
CompareTo 重载
System 命名空间
UInt16
Equals


Int16 ..::.CompareTo 方法 (Object)

Int16
.
.
::
.
CompareTo 方法 (Object)
Int16 结构

将此实例与指定对象进行比较，并返回一个整数，该整数指示此实例的值是小于、等于还是大于指定对象的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 Int16。

无论 Int16 的值如何，它都被认为大于空引用。

value 参数必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是 Int16 的实例；否则将引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
CompareTo 重载
System 命名空间
UInt16


Int16 ..::.Equals 方法

Int16
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int16 结构

返回一个值，该值指示此实例是否与指定的对象或 Int16 相等。

名称 说明
页首

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.Equals 方法 (Int16)

Int16
.
.
::
.
Equals 方法 (Int16)
Int16 结构

返回一个值，该值指示此实例是否与指定的 Int16 值相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As Short _
) As Boolean
public bool Equals(
    short obj
)
public:
virtual bool Equals(
    short obj
) sealed
abstract Equals :
        obj:int16 -> bool
override Equals :
        obj:int16 -> bool

参数

obj
类型： System Int16
要与此实例进行比较的 Int16 值。

返回值

类型： System Boolean
如果 obj 的值与此实例相同，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
Equals 重载
System 命名空间
Equals
CompareTo


Int16 ..::.Equals 方法 (Object)

Int16
.
.
::
.
Equals 方法 (Object)
Int16 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 Int16 的实例并且等于此实例的值，则为 true；否则为 false。

下面的代码示例演示如何在 Int16 的上下文中使用 Equals 对两个 short 值进行比较，如果它们表示相同的数字则返回 true，否则返回 false。

  Dim myVariable1 As Int16 = 20
  Dim myVariable2 As Int16 = 20

' Get and display the declaring type.
Console.WriteLine(ControlChars.NewLine + "Type of 'myVariable1' is '{0}' and" +  _
              " value is :{1}", myVariable1.GetType().ToString(), myVariable1.ToString())
Console.WriteLine("Type of 'myVariable2' is '{0}' and" +  _
           " value is :{1}", myVariable2.GetType().ToString(), myVariable2.ToString())

  ' Compare 'myVariable1' instance with 'myVariable2' Object.
  If myVariable1.Equals(myVariable2) Then
     Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and " +  _
                 "'myVariable2' are equal")
  Else
     Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and " +   _
              "'myVariable2' are not equal")
  End If

Int16 myVariable1 = 20;
Int16 myVariable2 = 20;

// Get and display the declaring type.
Console.WriteLine("\nType of 'myVariable1' is '{0}' and"+
     " value is :{1}",myVariable1.GetType(), myVariable1);
Console.WriteLine("Type of 'myVariable2' is '{0}' and"+
     " value is :{1}",myVariable2.GetType(), myVariable2);

// Compare 'myVariable1' instance with 'myVariable2' Object.
if( myVariable1.Equals( myVariable2 ) )
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are equal");
else
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are not equal");

Int16 myVariable1 = 20;
Int16 myVariable2 = 20;

// Get and display the declaring type.
Console::WriteLine( "\nType of 'myVariable1' is '{0}' and  value is : {1}", myVariable1.GetType(), myVariable1 );
Console::WriteLine( "Type of 'myVariable2' is '{0}' and  value is : {1}", myVariable2.GetType(), myVariable2 );

// Compare 'myVariable1' instance with 'myVariable2' Object.
if ( myVariable1.Equals( myVariable2 ) )
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are equal" );
else
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are not equal" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
Equals 重载
System 命名空间


Int16 ..::.GetHashCode 方法

Int16
.
.
::
.
GetHashCode 方法
Int16 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.GetTypeCode 方法

Int16
.
.
::
.
GetTypeCode 方法
Int16 结构

返回值类型 Int16 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.Int16。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间
TypeCode


Int16 ..::.IConvertible ..::.ToBoolean 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToByte 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(Int16) 方法 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(Int16) 方法 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(Int16) 方法

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToChar 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
当前实例的值，已转换为 Char。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToDateTime 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToDecimal 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
当前实例的值，已转换为 Decimal。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToDouble 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，已转换为 Double。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToInt16 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，未更改。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToInt32 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，已转换为 Int32。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToInt64 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，已转换为 Int64。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToSByte 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，已转换为 SByte。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToSingle 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，已转换为 Single。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToType 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要将此 Int16 值转换为的类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的信息。

返回值

类型： System Object
当前实例的值，已转换为 type。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToUInt16 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，未更改。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToUInt32 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，已转换为 UInt32。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.IConvertible ..::.ToUInt64 方法

Int16
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Int16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，已转换为 UInt64。

实现

此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(Int16) 方法。 此成员是显式接口成员的实现。它只能在 Int16 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(Int16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.Parse 方法

Int16
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int16 结构

将数字的字符串表示形式转换为它的等效 16 位有符号整数。

名称 说明
页首

参考

Int16 结构
Int16 成员
System 命名空间
TryParse


Int16 ..::.Parse 方法 (String)

Int16
.
.
::
.
Parse 方法 (String)
Int16 结构

将数字的字符串表示形式转换为它的等效 16 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As Short
public static short Parse(
    string s
)
public:
static short Parse(
    String^ s
)
static member Parse :
        s:string -> int16

参数

s
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Int16
与 s 中包含的数字等效的 16 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了整数值的十进制数字之外，只允许使用前导和尾随空格以及前导符号。若要显式定义可出现在 s 中的样式元素，请使用 Int16..::.Parse(String, NumberStyles) 或 Parse 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了整数值的十进制数字之外，只允许使用前导和尾随空格以及前导符号。若要显式定义可出现在 s 中的样式元素，请使用 Int16..::.Parse(String, NumberStyles) 或 Parse 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了整数值的十进制数字之外，只允许使用前导和尾随空格以及前导符号。若要显式定义可出现在 s 中的样式元素，请使用 Int16..::.Parse(String, NumberStyles) 或 Parse 方法。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。若要使用某个其他区域性的格式设置信息对字符串进行分析，请使用 Int16..::.Parse(String, IFormatProvider) 或 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。若要使用某个其他区域性的格式设置信息对字符串进行分析，请使用 Int16..::.Parse(String, IFormatProvider) 或 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。若要使用某个其他区域性的格式设置信息对字符串进行分析，请使用 Int16..::.Parse(String, IFormatProvider) 或 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法。

下面的示例演示如何使用 Int16..::.Parse(String) 方法将字符串值转换为 16 位有符号整数值。然后，将生成的整数值显示到控制台。 下面的示例演示如何使用 Int16..::.Parse(String) 方法将字符串值转换为 16 位有符号整数值。然后，将生成的整数值显示到控制台。

Dim value As String
Dim number As Short

value = " 12603 "
Try
   number = Short.Parse(value)
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to convert '{0}' to a 16-bit signed integer.", _
                     value)
End Try

value = " 16,054"
Try
   number = Short.Parse(value)
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to convert '{0}' to a 16-bit signed integer.", _
                     value)
End Try

value = " -17264"
Try
   number = Short.Parse(value)
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to convert '{0}' to a 16-bit signed integer.", _
                     value)
End Try
' The example displays the following output to the console:
'       Converted ' 12603 ' to 12603.
'       Unable to convert ' 16,054' to a 16-bit signed integer.
'       Converted ' -17264' to -17264.

string value;
short number;

value = " 12603 ";
try
{
   number = Int16.Parse(value);
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to convert '{0}' to a 16-bit signed integer.",
                     value);
}

value = " 16,054";
try
{
   number = Int16.Parse(value);
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to convert '{0}' to a 16-bit signed integer.",
                     value);
}

value = " -17264";
try
{
   number = Int16.Parse(value);
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to convert '{0}' to a 16-bit signed integer.",
                     value);
}
// The example displays the following output to the console:
//       Converted ' 12603 ' to 12603.
//       Unable to convert ' 16,054' to a 16-bit signed integer.
//       Converted ' -17264' to -17264.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


Int16 ..::.Parse 方法 (String, NumberStyles)

Int16
.
.
::
.
Parse 方法 (String, NumberStyles)
Int16 结构

将指定样式的数字的字符串表示形式转换为它的等效 16 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As Short
public static short Parse(
    string s,
    NumberStyles style
)
public:
static short Parse(
    String^ s,
    NumberStyles style
)
static member Parse :
        s:string *
        style:NumberStyles -> int16

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。

返回值

类型： System Int16
与 s 中指定的数字等效的 16 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或符号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或符号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或符号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][e[sign]digits][ws]

或者，如果 style 包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 和 NumberFormatInfo..::.CurrencyNegativePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 和 NumberFormatInfo..::.CurrencyNegativePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 和 NumberFormatInfo..::.CurrencyNegativePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits | 由从 0 到 9 的数字组成的序列。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional_digits | 由 0 数位组成的序列。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。如果有 0 以外的任何数字出现在 fractional_digits 中，该方法就会引发 OverflowException。 由 0 数位组成的序列。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。如果有 0 以外的任何数字出现在 fractional_digits 中，该方法就会引发 OverflowException。 由 0 数位组成的序列。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。如果有 0 以外的任何数字出现在 fractional_digits 中，该方法就会引发 OverflowException。
e | “e”或“E”字符，指示 s 可用指数表示法表示。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。但是，s 参数必须表示一个 Int16 数据类型范围内的数字并且不能带非零小数部分。 “e”或“E”字符，指示 s 可用指数表示法表示。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。但是，s 参数必须表示一个 Int16 数据类型范围内的数字并且不能带非零小数部分。 “e”或“E”字符，指示 s 可用指数表示法表示。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。但是，s 参数必须表示一个 Int16 数据类型范围内的数字并且不能带非零小数部分。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则将引发 OverflowException。 . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则将引发 OverflowException。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 符号可出现在 digits 之前。
NumberStyles AllowTrailingSign | 符号可出现在 digits 之后。
NumberStyles AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
NumberStyles AllowThousands | , 元素。
NumberStyles AllowCurrencySymbol | $ 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进值的字符串表示形式。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进值的字符串表示形式。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进值的字符串表示形式。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息对 s 进行分析，请调用 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息对 s 进行分析，请调用 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息对 s 进行分析，请调用 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法。

下面的示例通过 Int16..::.Parse(String, NumberStyles) 方法分析使用 en-US 区域性的 Int16 值的字符串表示形式。

Imports System.Globalization

Module ParseSample
   Public Sub Main()
      Dim value As String
      Dim style As NumberStyles

      ' Parse a number with a thousands separator (throws an exception).
      value = "14,644"
      style = NumberStyles.None
      ParseToInt16(value, style)

      style = NumberStyles.AllowThousands
      ParseToInt16(value, style)

      ' Parse a number with a thousands separator and decimal point.
      value = "14,644.00"
      style = NumberStyles.AllowThousands Or NumberStyles.Integer Or _
              NumberStyles.AllowDecimalPoint
      ParseToInt16(value, style)

      ' Parse a number with a fractional component (throws an exception).
      value = "14,644.001"
      ParseToInt16(value, style)

      ' Parse a number in exponential notation.
      value = "145E02"
      style = style Or NumberStyles.AllowExponent
      ParseToInt16(value, style)

      ' Parse a number in exponential notation with a positive sign.
      value = "145E+02"
      ParseToInt16(value, style)

      ' Parse a number in exponential notation with a negative sign
      ' (throws an exception).
      value = "145E-02"
      ParseToInt16(value, style)
   End Sub

   Private Sub ParseToInt16(value As String, style As NumberStyles)
      Try
         Dim number As Short = Int16.Parse(value, style)
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Catch e As FormatException
         Console.WriteLine("Unable to parse '{0}' with style {1}.", value, _
                           style.ToString())
      Catch e As OverflowException
         Console.WriteLine("'{0}' is out of range of the Int16 type.", value)
      End Try
   End Sub
End Module
' The example displays the following output to the console:
'       Unable to parse '14,644' with style None.
'       Converted '14,644' to 14644.
'       Converted '14,644.00' to 14644.
'       '14,644.001' is out of range of the Int16 type.
'       Converted '145E02' to 14500.
'       Converted '145E+02' to 14500.
'       '145E-02' is out of range of the Int16 type.

using System;
using System.Globalization;

public class ParseSample
{
   public static void Main()
   {
      string value;
      NumberStyles style;

      // Parse a number with a thousands separator (throws an exception).
      value = "14,644";
      style = NumberStyles.None;
      ParseToInt16(value, style);

      style = NumberStyles.AllowThousands;
      ParseToInt16(value, style);

      // Parse a number with a thousands separator and decimal point.
      value = "14,644.00";
      style = NumberStyles.AllowThousands | NumberStyles.Integer |
              NumberStyles.AllowDecimalPoint;
      ParseToInt16(value, style);

      // Parse a number with a fractional component (throws an exception).
      value = "14,644.001";
      ParseToInt16(value, style);

      // Parse a number in exponential notation.
      value = "145E02";
      style = style | NumberStyles.AllowExponent;
      ParseToInt16(value, style);

      // Parse a number in exponential notation with a positive sign.
      value = "145E+02";
      ParseToInt16(value, style);

      // Parse a number in exponential notation with a negative sign
      // (throws an exception).
      value = "145E-02";
      ParseToInt16(value, style);
   }

   private static void ParseToInt16(string value, NumberStyles style)
   {
      try
      {
         short number = Int16.Parse(value, style);
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      catch (FormatException)
      {
         Console.WriteLine("Unable to parse '{0}' with style {1}.", value,
                           style.ToString());
      }
      catch (OverflowException)
      {
         Console.WriteLine("'{0}' is out of range of the Int16 type.", value);
      }
   }
}
// The example displays the following output to the console:
//       Unable to parse '14,644' with style None.
//       Converted '14,644' to 14644.
//       Converted '14,644.00' to 14644.
//       '14,644.001' is out of range of the Int16 type.
//       Converted '145E02' to 14500.
//       Converted '145E+02' to 14500.
//       '145E-02' is out of range of the Int16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
Parse 重载
System 命名空间
NumberStyles
ToString
TryParse

其他资源

分析数值字符串


Int16 ..::.Parse 方法 (String, IFormatProvider)

Int16
.
.
::
.
Parse 方法 (String, IFormatProvider)
Int16 结构

将指定的区域性特定格式的数字的字符串表示形式转换为它的等效 16 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As Short
public static short Parse(
    string s,
    IFormatProvider provider
)
public:
static short Parse(
    String^ s,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        provider:IFormatProvider -> int16

参数

s
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个 IFormatProvider，它提供有关 s 的区域性特定格式设置信息。

返回值

类型： System Int16
与 s 中指定的数字等效的 16 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。在 s 中，除了十进制数字之外，只允许使用前导和尾随空格以及前导符号。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。在 s 中，除了十进制数字之外，只允许使用前导和尾随空格以及前导符号。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。在 s 中，除了十进制数字之外，只允许使用前导和尾随空格以及前导符号。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法。

provider 参数是 IFormatProvider 实现，它获取 NumberFormatInfo 对象。NumberFormatInfo 提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 参数是 IFormatProvider 实现，它获取 NumberFormatInfo 对象。NumberFormatInfo 提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 参数是 IFormatProvider 实现，它获取 NumberFormatInfo 对象。NumberFormatInfo 提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

下面的示例使用 Int16..::.Parse(String, IFormatProvider) 方法来分析 Int16 值的字符串表示形式。

Dim stringToConvert As String
Dim number As Short

stringToConvert = " 214 "
Try
   number = Int16.Parse(stringToConvert, CultureInfo.InvariantCulture)
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert)
Catch e As OverflowException
   Console.WriteLine("'{0'} is out of range of the Int16 data type.", _
                     stringToConvert)
End Try

stringToConvert = " + 214"
Try
   number = Int16.Parse(stringToConvert, CultureInfo.InvariantCulture)
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert)
Catch e As OverflowException
   Console.WriteLine("'{0'} is out of range of the Int16 data type.", _
                     stringToConvert)
End Try

stringToConvert = " +214 "
Try
   number = Int16.Parse(stringToConvert, CultureInfo.InvariantCulture)
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert)
Catch e As OverflowException
   Console.WriteLine("'{0'} is out of range of the Int16 data type.", _
                     stringToConvert)
End Try
' The example displays the following output to the console:
'       Converted ' 214 ' to 214.
'       Unable to parse ' + 214'.
'       Converted ' +214 ' to 214.

string stringToConvert;
short number;

stringToConvert = " 214 ";
try
{
   number = Int16.Parse(stringToConvert, CultureInfo.InvariantCulture);
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert);
}
catch (OverflowException)
{
   Console.WriteLine("'{0'} is out of range of the Int16 data type.",
                     stringToConvert);
}

stringToConvert = " + 214";
try
{
   number = Int16.Parse(stringToConvert, CultureInfo.InvariantCulture);
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert);
}
catch (OverflowException)
{
   Console.WriteLine("'{0'} is out of range of the Int16 data type.",
                     stringToConvert);
}

stringToConvert = " +214 ";
try
{
   number = Int16.Parse(stringToConvert, CultureInfo.InvariantCulture);
   Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", stringToConvert);
}
catch (OverflowException)
{
   Console.WriteLine("'{0'} is out of range of the Int16 data type.",
                     stringToConvert);
}
// The example displays the following output to the console:
//       Converted ' 214 ' to 214.
//       Unable to parse ' + 214'.
//       Converted ' +214 ' to 214.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Int16 结构
Int16 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


Int16 ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

Int16
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
Int16 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 16 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As Short
public static short Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
public:
static short Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> int16

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。
provider
类型： System IFormatProvider
一个 IFormatProvider，它提供有关 s 的区域性特定格式设置信息。

返回值

类型： System Int16
与 s 中指定的数字等效的 16 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义为了分析操作能够成功，s 参数中允许的样式元素，例如空白或正号。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义为了分析操作能够成功，s 参数中允许的样式元素，例如空白或正号。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义为了分析操作能够成功，s 参数中允许的样式元素，例如空白或正号。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][e[sign]digits][ws]

或者，如果 style 包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 和 NumberFormatInfo..::.CurrencyNegativePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 和 NumberFormatInfo..::.CurrencyNegativePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 和 NumberFormatInfo..::.CurrencyNegativePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits | 由从 0 到 9 的数字组成的序列。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional_digits | 由 0 数位组成的序列。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。如果有 0 以外的任何数字出现在 fractional_digits 中，该方法就会引发 OverflowException。 由 0 数位组成的序列。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。如果有 0 以外的任何数字出现在 fractional_digits 中，该方法就会引发 OverflowException。 由 0 数位组成的序列。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。如果有 0 以外的任何数字出现在 fractional_digits 中，该方法就会引发 OverflowException。
e | “e”或“E”字符，指示 s 可用指数表示法表示。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。但是，s 参数必须表示一个 Int16 数据类型范围内的数字并且不能带非零小数部分。 “e”或“E”字符，指示 s 可用指数表示法表示。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。但是，s 参数必须表示一个 Int16 数据类型范围内的数字并且不能带非零小数部分。 “e”或“E”字符，指示 s 可用指数表示法表示。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。但是，s 参数必须表示一个 Int16 数据类型范围内的数字并且不能带非零小数部分。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则将引发 OverflowException。 . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则将引发 OverflowException。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 符号可出现在 digits 之前。
NumberStyles AllowTrailingSign | 符号可出现在 digits 之后。
NumberStyles AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
NumberStyles AllowThousands | , 元素。
NumberStyles AllowCurrencySymbol | $ 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进值的字符串表示形式。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进值的字符串表示形式。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进值的字符串表示形式。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

provider 参数是 IFormatProvider 实现，其 GetFormat 方法获取 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 实现，其 GetFormat 方法获取 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 实现，其 GetFormat 方法获取 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例使用各种 style 和 provider 参数来分析 Int16 值的字符串表示形式。

Dim value As String
Dim number As Short
Dim style As NumberStyles
Dim provider As CultureInfo

' Parse string using "." as the thousands separator
' and " " as the decimal separator.
value = "19 694,00"
style = NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands
provider = New CultureInfo("fr-FR")

number = Int16.Parse(value, style, provider)
Console.WriteLine("'{0}' converted to {1}.", value, number)
' Displays:
'    '19 694,00' converted to 19694.

Try
   number = Int16.Parse(value, style, CultureInfo.InvariantCulture)
   Console.WriteLine("'{0}' converted to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", value)
End Try
' Displays:
'    Unable to parse '19 694,00'.

' Parse string using "$" as the currency symbol for en_GB and
' en-US cultures.
value = "$6,032.00"
style = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
provider = New CultureInfo("en-GB")

Try
   number = Int16.Parse(value, style, CultureInfo.InvariantCulture)
   Console.WriteLine("'{0}' converted to {1}.", value, number)
Catch e As FormatException
   Console.WriteLine("Unable to parse '{0}'.", value)
End Try
' Displays:
'    Unable to parse '$6,032.00'.

provider = New CultureInfo("en-US")
number = Int16.Parse(value, style, provider)
Console.WriteLine("'{0}' converted to {1}.", value, number)
' Displays:
'    '$6,032.00' converted to 6032.

string value;
short number;
NumberStyles style;
CultureInfo provider;

// Parse string using "." as the thousands separator
// and " " as the decimal separator.
value = "19 694,00";
style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
provider = new CultureInfo("fr-FR");

number = Int16.Parse(value, style, provider);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
//    '19 694,00' converted to 19694.

try
{
   number = Int16.Parse(value, style, CultureInfo.InvariantCulture);
   Console.WriteLine("'{0}' converted to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", value);
}
// Displays:
//    Unable to parse '19 694,00'.

// Parse string using "$" as the currency symbol for en_GB and
// en-US cultures.
value = "$6,032.00";
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
provider = new CultureInfo("en-GB");

try
{
   number = Int16.Parse(value, style, CultureInfo.InvariantCulture);
   Console.WriteLine("'{0}' converted to {1}.", value, number);
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse '{0}'.", value);
}
// Displays:
//    Unable to parse '$6,032.00'.

provider = new CultureInfo("en-US");
number = Int16.Parse(value, style, provider);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
//    '$6,032.00' converted to 6032.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
Parse 重载
System 命名空间
NumberStyles
ToString

其他资源

分析数值字符串


Int16 ..::.ToString 方法

Int16
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int16 结构

将此实例的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

Int16 结构
Int16 成员
System 命名空间


Int16 ..::.ToString 方法

Int16
.
.
::
.
ToString 方法
Int16 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示形式，由减号（如果值为负）和没有前导零的从 0 到 9 的数字序列组成。

返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 进行格式设置。若要定义 Int16 值的字符串表示形式的格式设置，请调用 Int16..::.ToString(String) 方法。若要同时定义用于创建 Int16 值的字符串表示形式的格式设置和区域性，请调用 Int16..::.ToString(String, IFormatProvider) 方法。 返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 进行格式设置。若要定义 Int16 值的字符串表示形式的格式设置，请调用 Int16..::.ToString(String) 方法。若要同时定义用于创建 Int16 值的字符串表示形式的格式设置和区域性，请调用 Int16..::.ToString(String, IFormatProvider) 方法。 返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 进行格式设置。若要定义 Int16 值的字符串表示形式的格式设置，请调用 Int16..::.ToString(String) 方法。若要同时定义用于创建 Int16 值的字符串表示形式的格式设置和区域性，请调用 Int16..::.ToString(String, IFormatProvider) 方法。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用 ToString()()() 方法将 Int16 值的数组显示到控制台。

Dim numbers() As Short = {0, 14624, 13982, Short.MaxValue, _
                         Short.MinValue, -16667}
For Each number As Short In numbers
   Console.WriteLine(number.ToString())
Next
' The example displays the following output to the console:
'       0
'       14624
'       13982
'       32767
'       -32768
'       -16667

short[] numbers = {0, 14624, 13982, short.MaxValue,
                   short.MinValue, -16667};
foreach (short number in numbers)
{
   Console.WriteLine(number.ToString());
}
// The example displays the following output to the console:
//       0
//       14624
//       13982
//       32767
//       -32768
//       -16667

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Int16 ..::.ToString 方法 (IFormatProvider)

Int16
.
.
::
.
ToString 方法 (IFormatProvider)
Int16 结构

使用指定的区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个 IFormatProvider，它提供区域性特定的格式设置信息。

返回值

类型： System String
此实例的值的字符串表示形式，由 provider 指定。

实现

返回值由通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 NumberFormatInfo 对象或 CultureInfo 对象。NumberFormatInfo 对象提供此方法所返回的字符串格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此实例使用当前区域性的 NumberFormatInfo 对象进行格式设置。 provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 NumberFormatInfo 对象或 CultureInfo 对象。NumberFormatInfo 对象提供此方法所返回的字符串格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此实例使用当前区域性的 NumberFormatInfo 对象进行格式设置。 provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 NumberFormatInfo 对象或 CultureInfo 对象。NumberFormatInfo 对象提供此方法所返回的字符串格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此实例使用当前区域性的 NumberFormatInfo 对象进行格式设置。 provider 参数是 IFormatProvider 的实现，其 IFormatProvider..::.GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 NumberFormatInfo 对象或 CultureInfo 对象。NumberFormatInfo 对象提供此方法所返回的字符串格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此实例使用当前区域性的 NumberFormatInfo 对象进行格式设置。

下面的示例循环访问 Int16 值的数组，并使用不同格式提供程序调用 Int16..::.ToString(IFormatProvider) 方法将每个值显示到控制台。由于使用的是默认“G”格式说明符所定义的简单格式设置，因此无论 provider 参数的值是什么，为每个 Int16 值所生成的格式字符串都是相同的。 下面的示例循环访问 Int16 值的数组，并使用不同格式提供程序调用 Int16..::.ToString(IFormatProvider) 方法将每个值显示到控制台。由于使用的是默认“G”格式说明符所定义的简单格式设置，因此无论 provider 参数的值是什么，为每个 Int16 值所生成的格式字符串都是相同的。

Dim numbers() As Short = {-23092, 0, 14894, Int16.MaxValue}
Dim providers() As CultureInfo = {New CultureInfo("en-us"), _
                                  New CultureInfo("fr-fr"), _
                                  New CultureInfo("de-de"), _
                                  New CultureInfo("es-es")}
For Each int16Value As Short In Numbers
   For Each provider As CultureInfo In providers
      Console.Write("{0, 6} ({1})     ", _
                    int16Value.ToString(provider), _
                    provider.Name)
   Next
   Console.WriteLine()
Next
' The example displays the following output to the console:
'       -23092 (en-US)     -23092 (fr-FR)     -23092 (de-DE)     -23092 (es-ES)
'            0 (en-US)          0 (fr-FR)          0 (de-DE)          0 (es-ES)
'        14894 (en-US)      14894 (fr-FR)      14894 (de-DE)      14894 (es-ES)
'        32767 (en-US)      32767 (fr-FR)      32767 (de-DE)      32767 (es-ES)

short[] numbers = {-23092, 0, 14894, Int16.MaxValue};
CultureInfo[] providers = {new CultureInfo("en-us"),
                           new CultureInfo("fr-fr"),
                           new CultureInfo("de-de"),
                           new CultureInfo("es-es")};
foreach (Int16 int16Value in numbers)
{
   foreach (CultureInfo provider in providers)
   {
      Console.Write("{0, 6} ({1})     ",
                    int16Value.ToString(provider),
                    provider.Name);
   }
   Console.WriteLine();
}
// The example displays the following output to the console:
//       -23092 (en-US)     -23092 (fr-FR)     -23092 (de-DE)     -23092 (es-ES)
//            0 (en-US)          0 (fr-FR)          0 (de-DE)          0 (es-ES)
//        14894 (en-US)      14894 (fr-FR)      14894 (de-DE)      14894 (es-ES)
//        32767 (en-US)      32767 (fr-FR)      32767 (de-DE)      32767 (es-ES)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Int16 ..::.ToString 方法 (String)

Int16
.
.
::
.
ToString 方法 (String)
Int16 结构

使用指定的格式，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
一个数值格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。

format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

此实例的返回值用当前区域性的 NumberFormatInfo 设置格式。

下面的示例初始化两个 Int16 值，并使用每个受支持的标准格式字符串和几个自定义格式字符串将这两个值显示到控制台。使用 en-US 作为当前区域性来运行此示例。 下面的示例初始化两个 Int16 值，并使用每个受支持的标准格式字符串和几个自定义格式字符串将这两个值显示到控制台。使用 en-US 作为当前区域性来运行此示例。

Dim values() As Int16 = {-23805, 32194}
Dim formats() As String = {"C4", "D6", "e1", "E2", "F1", "G", "N1", _
                           "P0", "X4", "000000.0000", "##000.0"}
For Each format As String In formats
   Console.WriteLine("'{0,2}' format specifier: {1,17}   {2,17}", _
                     format, _
                     values(0).ToString(format), _
                     values(1).ToString(format))
Next
' The example displays the following output to the console:
'    'C4' format specifier:    ($23,805.0000)        $32,194.0000
'    'D6' format specifier:           -023805              032194
'    'e1' format specifier:         -2.4e+004            3.2e+004
'    'E2' format specifier:        -2.38E+004           3.22E+004
'    'F1' format specifier:          -23805.0             32194.0
'    ' G' format specifier:            -23805               32194
'    'N1' format specifier:         -23,805.0            32,194.0
'    'P0' format specifier:      -2,380,500 %         3,219,400 %
'    'X4' format specifier:              A303                7DC2
'    '000000.0000' format specifier:      -023805.0000         032194.0000
'    '##000.0' format specifier:          -23805.0             32194.0

Int16[] values = {-23805, 32194};
string[] formats = {"C4", "D6", "e1", "E2", "F1", "G", "N1",
                    "P0", "X4", "000000.0000", "##000.0"};
foreach (string format in formats)
{
   Console.WriteLine("'{0,2}' format specifier: {1,17}   {2,17}",
                     format,
                     values[0].ToString(format),
                     values[1].ToString(format));
}
// The example displays the following output to the console:
//    'C4' format specifier:    ($23,805.0000)        $32,194.0000
//    'D6' format specifier:           -023805              032194
//    'e1' format specifier:         -2.4e+004            3.2e+004
//    'E2' format specifier:        -2.38E+004           3.22E+004
//    'F1' format specifier:          -23805.0             32194.0
//    ' G' format specifier:            -23805               32194
//    'N1' format specifier:         -23,805.0            32,194.0
//    'P0' format specifier:      -2,380,500 %         3,219,400 %
//    'X4' format specifier:              A303                7DC2
//    '000000.0000' format specifier:      -023805.0000         032194.0000
//    '##000.0' format specifier:          -23805.0             32194.0

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
标准数字格式字符串
自定义数字格式字符串
如何：用前导零填充数字


Int16 ..::.ToString 方法 (String, IFormatProvider)

Int16
.
.
::
.
ToString 方法 (String, IFormatProvider)
Int16 结构

使用指定的格式和区域性特定格式设置信息，将此实例的数值转换为其等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
一个数值格式字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 和 provider 指定。

实现

format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此方法返回的字符串使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此方法返回的字符串使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此方法返回的字符串使用通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象：

  • 一个 CultureInfo 对象，它表示要使用其格式设置规则的区域性。

  • 一个 NumberFormatInfo 对象，它包含此值的特定数值格式设置信息。

  • 一个实现 IFormatProvider 的自定义对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法从 provider 获取 NumberFormatInfo 对象，则使用当前区域性的 NumberFormatInfo 对返回值进行格式设置。

下面的示例通过对四种不同区域性使用每个受支持的标准格式字符串来显示 Int16 值。

Dim value As Int16 = 14603
Dim formats() As String = {"C", "D6", "e1", "E2", "F1", "G", "N1", _
                           "P0", "X4", "000000.0000", "##000.0"}
Dim providers() As CultureInfo = {New CultureInfo("en-us"), _
                                  New CultureInfo("fr-fr"), _
                                  New CultureInfo("de-de"), _
                                  New CultureInfo("es-es")}
' Display header.
Console.WriteLine("{0,24}{1,14}{2,14}{3,14}", providers(0), providers(1), _
                  providers(2), providers(3))
Console.WriteLine()
' Display a value using each format string.
For Each format As String In formats
   ' Display the value for each provider on the same line.
   Console.Write("{0,-12}", format)
   For Each provider As CultureInfo In providers
      Console.Write("{0,12}  ", _
                    value.ToString(format, provider))
   Next
   Console.WriteLine()
Next
' The example displays the following output to the console:
'                       en-US         fr-FR         de-DE         es-ES
'
'    C             $14,603.00   14 603,00 ?   14.603,00 ?   14.603,00 ?
'    D6                014603        014603        014603        014603
'    e1              1.5e+004      1,5e+004      1,5e+004      1,5e+004
'    E2             1.46E+004     1,46E+004     1,46E+004     1,46E+004
'    F1               14603.0       14603,0       14603,0       14603,0
'    G                  14603         14603         14603         14603
'    N1              14,603.0      14 603,0      14.603,0      14.603,0
'    P0           1,460,300 %   1 460 300 %    1.460.300%   1.460.300 %
'    X4                  390B          390B          390B          390B
'    000000.0000  014603.0000   014603,0000   014603,0000   014603,0000
'    ##000.0          14603.0       14603,0       14603,0       14603,0

Int16 value = 14603;
string[] formats = {"C", "D6", "e1", "E2", "F1", "G", "N1",
                    "P0", "X4", "000000.0000", "##000.0"};
CultureInfo[] providers = {new CultureInfo("en-us"),
                           new CultureInfo("fr-fr"),
                           new CultureInfo("de-de"),
                           new CultureInfo("es-es")};
// Display header.
Console.WriteLine("{0,24}{1,14}{2,14}{3,14}", providers[0], providers[1],
                  providers[2], providers[3]);
Console.WriteLine();
// Display a value using each format string.
foreach (string format in formats)
{
   // Display the value for each provider on the same line.
   Console.Write("{0,-12}", format);
   foreach (CultureInfo provider in providers)
   {
      Console.Write("{0,12}  ",
                    value.ToString(format, provider));
   }
   Console.WriteLine();
}
// The example displays the following output to the console:
//                       en-US         fr-FR         de-DE         es-ES
//
//    C             $14,603.00   14 603,00 ?   14.603,00 ?   14.603,00 ?
//    D6                014603        014603        014603        014603
//    e1              1.5e+004      1,5e+004      1,5e+004      1,5e+004
//    E2             1.46E+004     1,46E+004     1,46E+004     1,46E+004
//    F1               14603.0       14603,0       14603,0       14603,0
//    G                  14603         14603         14603         14603
//    N1              14,603.0      14 603,0      14.603,0      14.603,0
//    P0           1,460,300 %   1 460 300 %    1.460.300%   1.460.300 %
//    X4                  390B          390B          390B          390B
//    000000.0000  014603.0000   014603,0000   014603,0000   014603,0000
//    ##000.0          14603.0       14603,0       14603,0       14603,0

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int16 结构
Int16 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
标准数字格式字符串
自定义数字格式字符串
如何：用前导零填充数字


Int16 ..::.TryParse 方法

Int16
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int16 结构

将数字的字符串表示形式转换为它的等效 16 位有符号整数。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效 16 位有符号整数。一个指示转换是否成功的返回值。

名称 说明
页首

参考

Int16 结构
Int16 成员
System 命名空间
Parse


Int16 ..::.TryParse 方法 (String, Int16%)

Int16
.
.
::
.
TryParse 方法 (String, Int16%)
Int16 结构

将数字的字符串表示形式转换为它的等效 16 位有符号整数。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效 16 位有符号整数。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As Short _
) As Boolean
public static bool TryParse(
    string s,
    out short result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] short% result
)
static member TryParse :
        s:string *
        result:int16 byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。
result
类型： System Int16 %
当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 16 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 16 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 16 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。

Int16..::.TryParse(String, Int16%) 方法与 Int16..::.Parse(String) 方法不同，它返回一个指示分析操作是否成功的布尔值，而不是返回已分析的 Int16 值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 Int16..::.TryParse(String, Int16%) 方法与 Int16..::.Parse(String) 方法不同，它返回一个指示分析操作是否成功的布尔值，而不是返回已分析的 Int16 值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

s 参数应为数字的字符串表示形式，其形式如下：

[ws][sign]digits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int16..::.TryParse(String, NumberStyles, IFormatProvider, Int16%) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int16..::.TryParse(String, NumberStyles, IFormatProvider, Int16%) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int16..::.TryParse(String, NumberStyles, IFormatProvider, Int16%) 方法。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。

此 TryParse 方法重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 Int16..::.TryParse(String, NumberStyles, IFormatProvider, Int16%) 重载。 此 TryParse 方法重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 Int16..::.TryParse(String, NumberStyles, IFormatProvider, Int16%) 重载。

下面的示例将 Int16..::.TryParse(String, Int16%) 方法与一些不同的字符串值一起调用。

Module StringParsing
   Public Sub Main()
      TryToParse(Nothing)
      TryToParse("16051")
      TryToParse("9432.0")
      TryToParse("16,667")
      TryToParse("   -322   ")
      TryToParse("+4302")
      TryToParse("(100)")
      TryToParse("01FA")

   End Sub

   Private Sub TryToParse(value As String)
      Dim number As Int16
      Dim result As Boolean = Int16.TryParse(value, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Else
         If value Is Nothing Then value = ""
         Console.WriteLine("Attempted conversion of '{0}' failed.", value)
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Attempted conversion of '' failed.
'       Converted '16051' to 16051.
'       Attempted conversion of '9432.0' failed.
'       Attempted conversion of '16,667' failed.
'       Converted '   -322   ' to -322.
'       Converted '+4302' to 4302.
'       Attempted conversion of '(100)' failed.
'       Attempted conversion of '01FA' failed.

using System;

public class StringParsing
{
   public static void Main()
   {
      TryToParse(null);
      TryToParse("16051");
      TryToParse("9432.0");
      TryToParse("16,667");
      TryToParse("   -322   ");
      TryToParse("+4302");
      TryToParse("(100);");
      TryToParse("01FA");
   }

   private static void TryToParse(string value)
   {
      short number;
      bool result = Int16.TryParse(value, out number);
      if (result)
      {
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      else
      {
         if (value == null) value = "";
         Console.WriteLine("Attempted conversion of '{0}' failed.", value);
      }
   }
}
// The example displays the following output to the console:
//       Attempted conversion of '' failed.
//       Converted '16051' to 16051.
//       Attempted conversion of '9432.0' failed.
//       Attempted conversion of '16,667' failed.
//       Converted '   -322   ' to -322.
//       Converted '+4302' to 4302.
//       Attempted conversion of '(100)' failed.
//       Attempted conversion of '01FA' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Int16 结构
Int16 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


Int16 ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, Int16%)

Int16
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, Int16%)
Int16 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 16 位有符号整数。一个指示转换是否成功的返回值。 将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 16 位有符号整数。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As Short _
) As Boolean
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out short result
)
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] short% result
)
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:int16 byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。 包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
result
类型： System Int16 %
当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 16 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 16 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 16 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。

Int16..::.TryParse(String, NumberStyles, IFormatProvider, Int16%) 方法与 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法不同，它返回一个指示分析操作是否成功的布尔值，而不是返回已分析的 Int16 值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 Int16..::.TryParse(String, NumberStyles, IFormatProvider, Int16%) 方法与 Int16..::.Parse(String, NumberStyles, IFormatProvider) 方法不同，它返回一个指示分析操作是否成功的布尔值，而不是返回已分析的 Int16 值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][e[sign]digits][ws]

或者，如果 style 参数包含 NumberStyles..::.AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。
digits | 由从 0 到 9 的数字组成的序列。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。
fractional_digits | 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
e | “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。 . 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。如果 s 用指数表示法表示一个数字，则它必须表示一个 Int16 数据类型范围内的不带非零小数部分的整数。 s 参数也可以使用指数表示法。如果 s 用指数表示法表示一个数字，则它必须表示一个 Int16 数据类型范围内的不带非零小数部分的整数。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 符号可出现在 digits 之前。
NumberStyles AllowTrailingSign | 符号可出现在 digits 之后。
NumberStyles AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
NumberStyles AllowThousands | , 元素。
NumberStyles AllowCurrencySymbol | $ 元素。
NumberStyles Currency | 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。
NumberStyles Float | 位于 s 的开头或结尾的 ws 元素、位于 s 开头的 sign 以及 . 符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 开头的 sign 以及 . 符号。s 参数也可以使用指数表示法。
NumberStyles Number | ws、符号、千位分隔符 (,) 以及小数点 (.)元素。
NumberStyles Any | 所有样式（除 s 之外）都不能表示十六进制数字。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 NumberStyles..::.HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 NumberStyles..::.HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 NumberStyles..::.HexNumber。）

provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例将 Int16..::.TryParse(String, NumberStyles, IFormatProvider, Int16%) 方法与一些不同的字符串值一起调用。

Imports System.Globalization

Module StringParsing
   Public Sub Main()
      Dim numericString As String
      Dim styles As NumberStyles

      numericString = "10677"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)

      numericString = "-30677"
      styles = NumberStyles.None
      CallTryParse(numericString, styles)

      numericString = "10345.00"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "10345.72"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "22,593"
      styles = NumberStyles.Integer Or NumberStyles.AllowThousands
      CallTryParse(numericString, styles)

      numericString = "12E-01"
      styles = NumberStyles.Integer Or NumberStyles.AllowExponent
      CallTryParse(numericString, styles)

      numericString = "12E03"
      CallTryParse(numericString, styles)

      numericString = "80c1"
      CallTryParse(numericString, NumberStyles.HexNumber)

      numericString = "0x80C1"
      CallTryParse(numericString, NumberStyles.HexNumber)
   End Sub

   Private Sub CallTryParse(stringToConvert As String, styles AS NumberStyles)
      Dim number As Short
      Dim result As Boolean = Int16.TryParse(stringToConvert, styles, _
                                             CultureInfo.InvariantCulture, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
      Else
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           Convert.ToString(stringToConvert))
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '10677' to 10677.
'       Attempted conversion of '-30677' failed.
'       Converted '10345.00' to 10345.
'       Attempted conversion of '10345.72' failed.
'       Converted '22,593' to 22593.
'       Attempted conversion of '12E-01' failed.
'       Converted '12E03' to 12000.
'       Converted '80c1' to -32575.
'       Attempted conversion of '0x80C1' failed.

using System;
using System.Globalization;

public class StringParsing
{
   public static void Main()
   {
      string numericString;
      NumberStyles styles;

      numericString = "10677";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      numericString = "-30677";
      styles = NumberStyles.None;
      CallTryParse(numericString, styles);

      numericString = "10345.00";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "10345.72";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "22,593";
      styles = NumberStyles.Integer | NumberStyles.AllowThousands;
      CallTryParse(numericString, styles);

      numericString = "12E-01";
      styles = NumberStyles.Integer | NumberStyles.AllowExponent;
      CallTryParse(numericString, styles);

      numericString = "12E03";
      CallTryParse(numericString, styles);

      numericString = "80c1";
      CallTryParse(numericString, NumberStyles.HexNumber);

      numericString = "0x80C1";
      CallTryParse(numericString, NumberStyles.HexNumber);
   }

   private static void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      short number;
      bool result = Int16.TryParse(stringToConvert, styles,
                                   CultureInfo.InvariantCulture, out number);
      if (result)
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
      else
         Console.WriteLine("Attempted conversion of '{0}' failed.",
                           Convert.ToString(stringToConvert));
   }
}
// The example displays the following output to the console:
//       Converted '10677' to 10677.
//       Attempted conversion of '-30677' failed.
//       Converted '10345.00' to 10345.
//       Attempted conversion of '10345.72' failed.
//       Converted '22,593' to 22593.
//       Attempted conversion of '12E-01' failed.
//       Converted '12E03' to 12000.
//       Converted '80c1' to -32575.
//       Attempted conversion of '0x80C1' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Int16 结构
Int16 成员
TryParse 重载
System 命名空间
Parse
NumberStyles
ToString

其他资源

分析数值字符串


Int32 结构

Int32 结构
成员

表示 32 位有符号的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Int32 _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of Integer),  _
    IEquatable(Of Integer)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Int32 : IComparable, IFormattable,
    IConvertible, IComparable<int>, IEquatable<int>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Int32 : IComparable,
    IFormattable, IConvertible, IComparable<int>, IEquatable<int>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Int32 =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<int>
        interface IEquatable<int>
    end

Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数。

Int32 为比较该类型的实例、将实例值转换为它的 String 表示形式以及将数字的 String 表示形式转换为该类型的实例提供了相应的方法。

有关格式规范代码如何控制值类型的 String 表示形式的信息，请参见格式化类型。

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 成员
System 命名空间
UInt32


Int32 成员

Int32 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int32 结构

表示 32 位有符号的整数。

Int32 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Int32 结构
System 命名空间


Int32 字段

Int32 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int32 结构

Int32 类型公开以下成员。

名称 说明
页首

参考

Int32 结构
System 命名空间


Int32 ..::.MaxValue 字段

Int32
.
.
::
.
MaxValue 字段
Int32 结构

表示 Int32 的最大可能值。此字段为常数。 表示 Int32 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As Integer
public const int MaxValue
public:
literal int MaxValue
static val mutable MaxValue: int

该常数的值为 2,147,483,647；即十六进制的 0x7FFFFFFF。

下面的示例使用 MaxValue 属性防止在转换为 Int32 值时引发 OverflowException。

Dim numbersToConvert() As Long = { 162345, 32183, -54000, Int64.MaxValue\2 }
Dim newNumber As Integer
For Each number As Long In NumbersToConvert
   If number >= Int32.MinValue And number <= Int32.MaxValue Then
      newNumber = Convert.ToInt32(number)
      Console.WriteLine("Successfully converted {0} to an Int32.", _
                        newNumber)
   Else
      Console.WriteLine("Unable to convert {0} to an Int32.", number)
   End If
Next
' The example displays the following output to the console:
'       Successfully converted 162345 to an Int32.
'       Successfully converted 32183 to an Int32.
'       Successfully converted -54000 to an Int32.
'       Unable to convert 4611686018427387903 to an Int32.

long[] numbersToConvert = { 162345, 32183, -54000, Int64.MaxValue/2 };
int newNumber;
foreach (long number in numbersToConvert)
{
   if (number >= Int32.MinValue && number <= Int32.MaxValue)
   {
      newNumber = Convert.ToInt32(number);
      Console.WriteLine("Successfully converted {0} to an Int32.",
                        newNumber);
   }
   else
   {
      Console.WriteLine("Unable to convert {0} to an Int32.", number);
   }
}
// The example displays the following output to the console:
//    Successfully converted 162345 to an Int32.
//    Successfully converted 32183 to an Int32.
//    Successfully converted -54000 to an Int32.
//    Unable to convert 4611686018427387903 to an Int32.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间
MinValue


Int32 ..::.MinValue 字段

Int32
.
.
::
.
MinValue 字段
Int32 结构

表示 Int32 的最小可能值。此字段为常数。 表示 Int32 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As Integer
public const int MinValue
public:
literal int MinValue
static val mutable MinValue: int

该常数的值为 -2,147,483,648；即十六进制的 0x80000000。

下面的示例使用 MinValue 属性防止在转换为 Int32 值时引发 OverflowException。

Dim numbersToConvert() As Long = { 162345, 32183, -54000, Int64.MaxValue\2 }
Dim newNumber As Integer
For Each number As Long In NumbersToConvert
   If number >= Int32.MinValue And number <= Int32.MaxValue Then
      newNumber = Convert.ToInt32(number)
      Console.WriteLine("Successfully converted {0} to an Int32.", _
                        newNumber)
   Else
      Console.WriteLine("Unable to convert {0} to an Int32.", number)
   End If
Next
' The example displays the following output to the console:
'       Successfully converted 162345 to an Int32.
'       Successfully converted 32183 to an Int32.
'       Successfully converted -54000 to an Int32.
'       Unable to convert 4611686018427387903 to an Int32.

long[] numbersToConvert = { 162345, 32183, -54000, Int64.MaxValue/2 };
int newNumber;
foreach (long number in numbersToConvert)
{
   if (number >= Int32.MinValue && number <= Int32.MaxValue)
   {
      newNumber = Convert.ToInt32(number);
      Console.WriteLine("Successfully converted {0} to an Int32.",
                        newNumber);
   }
   else
   {
      Console.WriteLine("Unable to convert {0} to an Int32.", number);
   }
}
// The example displays the following output to the console:
//    Successfully converted 162345 to an Int32.
//    Successfully converted 32183 to an Int32.
//    Successfully converted -54000 to an Int32.
//    Unable to convert 4611686018427387903 to an Int32.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间
MaxValue


Int32 方法

Int32 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int32 结构

Int32 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Int32 结构
System 命名空间


Int32 ..::.CompareTo 方法

Int32
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int32 结构

将此实例与指定的对象或 Int32 进行比较，并返回二者相对值的指示。

名称 说明
页首

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.CompareTo 方法 (Int32)

Int32
.
.
::
.
CompareTo 方法 (Int32)
Int32 结构

将此实例与指定的 32 位有符号整数进行比较并返回对其相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Integer _ ) As Integer
public int CompareTo( int value )
public: virtual int CompareTo( int value ) sealed
abstract CompareTo : value:int -> int override CompareTo : value:int -> int
参数
value
类型： System Int32
要比较的整数。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Int32..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为 Int32，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为 Int32，然后生成 Int32..::.CompareTo 方法来比较 Int32 实例和 Int32 参数表示形式的值。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的示例说明 Int32..::.CompareTo(Int32) 方法。除了显示该方法在四项不同的比较中所返回的值之外，该示例还将返回值转换为自定义 Comparison 枚举的成员并显示其值。 下面的示例说明 Int32..::.CompareTo(Int32) 方法。除了显示该方法在四项不同的比较中所返回的值之外，该示例还将返回值转换为自定义 Comparison 枚举的成员并显示其值。

Public Enum Comparison As Integer
   LessThan = -1
   Equal = 0
   GreaterThan = 1
End Enum

Module ValueComparison
   Public Sub Main()
      Dim mainValue As Integer = 16325
      Dim zeroValue As Integer = 0
      Dim negativeValue As Integer = -1934
      Dim positiveValue As Integer = 903624
      Dim sameValue As Integer = 16325

      Console.WriteLine("Comparing {0} and {1}: {2} ({3}).", _
                        mainValue, zeroValue, _
                        mainValue.CompareTo(zeroValue), _
                        CType(mainValue.CompareTo(zeroValue), Comparison))

      Console.WriteLine("Comparing {0} and {1}: {2} ({3}).", _
                        mainValue, sameValue, _
                        mainValue.CompareTo(sameValue), _
                        CType(mainValue.CompareTo(sameValue), Comparison))

      Console.WriteLine("Comparing {0} and {1}: {2} ({3}).", _
                        mainValue, negativeValue, _
                        mainValue.CompareTo(negativeValue), _
                        CType(mainValue.CompareTo(negativeValue), Comparison))

      Console.WriteLine("Comparing {0} and {1}: {2} ({3}).", _
                        mainValue, positiveValue, _
                        mainValue.CompareTo(positiveValue), _
                        CType(mainValue.CompareTo(positiveValue), Comparison))
   End Sub
End Module

using System;

enum Comparison {
   LessThan=-1, Equal=0, GreaterThan=1};

public class ValueComparison
{
   public static void Main()
   {
      int mainValue = 16325;
      int zeroValue = 0;
      int negativeValue = -1934;
      int positiveValue = 903624;
      int sameValue = 16325;

      Console.WriteLine("Comparing {0} and {1}: {2} ({3}).",
                        mainValue, zeroValue,
                        mainValue.CompareTo(zeroValue),
                        (Comparison) mainValue.CompareTo(zeroValue));

      Console.WriteLine("Comparing {0} and {1}: {2} ({3}).",
                        mainValue, sameValue,
                        mainValue.CompareTo(sameValue),
                        (Comparison) mainValue.CompareTo(sameValue));

      Console.WriteLine("Comparing {0} and {1}: {2} ({3}).",
                        mainValue, negativeValue,
                        mainValue.CompareTo(negativeValue),
                        (Comparison) mainValue.CompareTo(negativeValue));

      Console.WriteLine("Comparing {0} and {1}: {2} ({3}).",
                        mainValue, positiveValue,
                        mainValue.CompareTo(positiveValue),
                        (Comparison) mainValue.CompareTo(positiveValue));
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
CompareTo 重载
System 命名空间
UInt32
Equals


Int32 ..::.CompareTo 方法 (Object)

Int32
.
.
::
.
CompareTo 方法 (Object)
Int32 结构

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 Int32。

无论 Int32 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者是 Int32 的实例；否则将引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
CompareTo 重载
System 命名空间
UInt32
Equals


Int32 ..::.Equals 方法

Int32
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int32 结构

返回一个值，该值指示此实例是否与指定的对象或 Int32 相等。

名称 说明
页首

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.Equals 方法 (Int32)

Int32
.
.
::
.
Equals 方法 (Int32)
Int32 结构

返回一个值，该值指示此实例是否与指定的 Int32 值相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As Integer _
) As Boolean
public bool Equals(
    int obj
)
public:
virtual bool Equals(
    int obj
) sealed
abstract Equals :
        obj:int -> bool
override Equals :
        obj:int -> bool

参数

obj
类型： System Int32
要与此实例进行比较的 Int32 值。

返回值

类型： System Boolean
如果 obj 的值与此实例相同，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Int32..::.Equals(Object)，这是因为它不必将 obj 参数转换为对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
Equals 重载
System 命名空间


Int32 ..::.Equals 方法 (Object)

Int32
.
.
::
.
Equals 方法 (Object)
Int32 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 Int32 的实例并且等于此实例的值，则为 true；否则为 false。

下面的代码示例演示如何在 Int32 的上下文中使用 Equals 对两个 int 值进行比较，如果它们表示相同的数字则返回 true，否则返回 false。

Dim myVariable1 As Int32 = 60
Dim myVariable2 As Int32 = 60

' Get and display the declaring type.
Console.WriteLine(ControlChars.NewLine + "Type of 'myVariable1' is '{0}' and" +  _
         " value is :{1}", myVariable1.GetType().ToString(), myVariable1.ToString())
Console.WriteLine("Type of 'myVariable2' is '{0}' and" +  _
         " value is :{1}", myVariable2.GetType().ToString(), myVariable2.ToString())

' Compare 'myVariable1' instance with 'myVariable2' Object.
If myVariable1.Equals(myVariable2) Then
   Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and " +  _
            "'myVariable2' are equal")
Else
   Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and " + _
         "'myVariable2' are not equal")
End If

Int32 myVariable1 = 60;
Int32 myVariable2 = 60;

// Get and display the declaring type.
Console.WriteLine("\nType of 'myVariable1' is '{0}' and"+
     " value is :{1}",myVariable1.GetType(), myVariable1);
Console.WriteLine("Type of 'myVariable2' is '{0}' and"+
     " value is :{1}",myVariable2.GetType(), myVariable2);

// Compare 'myVariable1' instance with 'myVariable2' Object.
if( myVariable1.Equals( myVariable2 ) )
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are equal");
else
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are not equal");

Int32 myVariable1 = 60;
Int32 myVariable2 = 60;

// Get and display the declaring type.
Console::WriteLine( "\nType of 'myVariable1' is '{0}' and  value is : {1}", myVariable1.GetType(), myVariable1 );
Console::WriteLine( "Type of 'myVariable2' is '{0}' and  value is : {1}", myVariable2.GetType(), myVariable2 );

// Compare 'myVariable1' instance with 'myVariable2' Object.
if ( myVariable1.Equals( myVariable2 ) )
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are equal" );
else
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are not equal" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
Equals 重载
System 命名空间
CompareTo


Int32 ..::.GetHashCode 方法

Int32
.
.
::
.
GetHashCode 方法
Int32 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.GetTypeCode 方法

Int32
.
.
::
.
GetTypeCode 方法
Int32 结构

返回值类型 Int32 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.Int32。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间
TypeCode


Int32 ..::.IConvertible ..::.ToBoolean 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToByte 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToChar 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
当前实例的值，已转换为 Char。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToDateTime 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToDecimal 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
当前实例的值，已转换为 Decimal。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToDouble 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，已转换为 Double。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToInt16 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，已转换为 Int16。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToInt32 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，未更改。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToInt64 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，已转换为 Int64。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToSByte 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，已转换为 SByte。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToSingle 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，已转换为 Single。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToType 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要将此 Int32 值转换为的类型。
provider
类型： System IFormatProvider
一个对象，用于提供有关返回值格式的信息。

返回值

类型： System Object
当前实例的值，已转换为 type。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是改为调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是改为调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是改为调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToUInt16 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，已转换为 UInt16。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToUInt32 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，已转换为 UInt32。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.IConvertible ..::.ToUInt64 方法

Int32
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Int32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，已转换为 UInt64。

实现

此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(Int32) 方法。 此成员是显式接口成员的实现。它只能在 Int32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(Int32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.Parse 方法

Int32
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int32 结构

将数字的字符串表示形式转换为其等效的 32 位有符号整数。

名称 说明
页首

参考

Int32 结构
Int32 成员
System 命名空间
TryParse


Int32 ..::.Parse 方法 (String)

Int32
.
.
::
.
Parse 方法 (String)
Int32 结构

将数字的字符串表示形式转换为它的等效 32 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As Integer
public static int Parse(
    string s
)
public:
static int Parse(
    String^ s
)
static member Parse :
        s:string -> int

参数

s
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Int32
与 s 中包含的数字等效的 32 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int32..::.Parse(String, NumberStyles) 或 Int32..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int32..::.Parse(String, NumberStyles) 或 Int32..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int32..::.Parse(String, NumberStyles) 或 Int32..::.Parse(String, NumberStyles, IFormatProvider) 方法。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Int32..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Int32..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Int32..::.Parse(String, NumberStyles, IFormatProvider) 方法。

下面的示例演示如何使用 Int32..::.Parse(String) 方法将字符串值转换为 32 位有符号整数值。然后，将生成的整数值显示到控制台。 下面的示例演示如何使用 Int32..::.Parse(String) 方法将字符串值转换为 32 位有符号整数值。然后，将生成的整数值显示到控制台。

Module ParseInt32
   Public Sub Main()
      Convert("  179  ")
      Convert(" -204 ")
      Convert(" +809 ")
      Convert("  178.3")
   End Sub

   Private Sub Convert(value As String)
      Try
         Dim number As Integer = Int32.Parse(value)
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", value)
      End Try
   End Sub
End Module
' This example displays the following output to the console:
'       Converted '  179  ' to 179.
'       Converted ' -204 ' to -204.
'       Converted ' +809 ' to 809.
'       Unable to convert '  178.3'.

using System;

public class ParseInt32
{
   public static void Main()
   {
      Convert("  179  ");
      Convert(" -204 ");
      Convert(" +809 ");
      Convert("  178.3");
   }

   private static void Convert(string value)
   {
      try
      {
         int number = Int32.Parse(value);
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      catch (FormatException)
      {
         Console.WriteLine("Unable to convert '{0}'.", value);
      }
   }
}
// This example displays the following output to the console:
//       Converted '  179  ' to 179.
//       Converted ' -204 ' to -204.
//       Converted ' +809 ' to 809.
//       Unable to convert '  178.3'.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


Int32 ..::.Parse 方法 (String, NumberStyles)

Int32
.
.
::
.
Parse 方法 (String, NumberStyles)
Int32 结构

将指定样式的数字的字符串表示形式转换为它的等效 32 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As Integer
public static int Parse(
    string s,
    NumberStyles style
)
public:
static int Parse(
    String^ s,
    NumberStyles style
)
static member Parse :
        s:string *
        style:NumberStyles -> int

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。

返回值

类型： System Int32
与 s 中指定的数字等效的 32 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空白、正负号或千位分隔符）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空白、正负号或千位分隔符）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空白、正负号或千位分隔符）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][e[sign]exponential_digits][ws]

或者，如果 style 包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits fractional_digits exponential_digits | 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可以出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 OverflowException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 OverflowException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 OverflowException。
e | “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 digits 元素。
AllowDecimalPoint | 小数点 (.) 和 fractional-digits 元素。
AllowExponent | s 参数也可以使用指数表示法。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 千位分隔符 (,) 元素。
AllowCurrencySymbol | $ 元素。
Currency | 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.) 符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.) 符号。s 参数也可以使用指数表示法。
Number | ws、sign、千位分隔符 (,) 以及小数点 (.) 元素。
Any | 所有样式（除 s 之外）都不能表示十六进制数字。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与 s 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与 s 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与 s 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Int32..::.Parse(String, NumberStyles, IFormatProvider) 重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Int32..::.Parse(String, NumberStyles, IFormatProvider) 重载。

下面的示例使用 Int32..::.Parse(String, NumberStyles) 方法对多个 Int32 值的字符串表示形式进行分析。此示例的当前区域性为 en-US。 下面的示例使用 Int32..::.Parse(String, NumberStyles) 方法对多个 Int32 值的字符串表示形式进行分析。此示例的当前区域性为 en-US。

Imports System.Globalization

Module ParseInt32
   Public Sub Main()
      Convert("104.0", NumberStyles.AllowDecimalPoint)
      Convert("104.9", NumberStyles.AllowDecimalPoint)
      Convert(" $17,198,064.42", NumberStyles.AllowCurrencySymbol Or _
                                 NumberStyles.Number)
      Convert("103E06", NumberStyles.AllowExponent)
      Convert("-1,345,791", NumberStyles.AllowThousands)
      Convert("(1,345,791)", NumberStyles.AllowThousands Or _
                             NumberStyles.AllowParentheses)
   End Sub

   Private Sub Convert(value As String, style As NumberStyles)
      Try
         Dim number As Integer = Int32.Parse(value, style)
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", value)
      Catch e As OverflowException
         Console.WriteLine("'{0}' is out of range of the Int32 type.", value)
      End Try
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '104.0' to 104.
'       '104.9' is out of range of the Int32 type.
'       ' $17,198,064.42' is out of range of the Int32 type.
'       Converted '103E06' to 103000000.
'       Unable to convert '-1,345,791'.
'       Converted '(1,345,791)' to -1345791.

using System;
using System.Globalization;

public class ParseInt32
{
   public static void Main()
   {
      Convert("104.0", NumberStyles.AllowDecimalPoint);
      Convert("104.9", NumberStyles.AllowDecimalPoint);
      Convert(" $17,198,064.42", NumberStyles.AllowCurrencySymbol |
                                 NumberStyles.Number);
      Convert("103E06", NumberStyles.AllowExponent);
      Convert("-1,345,791", NumberStyles.AllowThousands);
      Convert("(1,345,791)", NumberStyles.AllowThousands |
                             NumberStyles.AllowParentheses);
   }

   private static void Convert(string value, NumberStyles style)
   {
      try
      {
         int number = Int32.Parse(value, style);
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      catch (FormatException)
      {
         Console.WriteLine("Unable to convert '{0}'.", value);
      }
      catch (OverflowException)
      {
         Console.WriteLine("'{0}' is out of range of the Int32 type.", value);
      }
   }
}
// The example displays the following output to the console:
//       Converted '104.0' to 104.
//       '104.9' is out of range of the Int32 type.
//       ' $17,198,064.42' is out of range of the Int32 type.
//       Converted '103E06' to 103000000.
//       Unable to convert '-1,345,791'.
//       Converted '(1,345,791)' to -1345791.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


Int32 ..::.Parse 方法 (String, IFormatProvider)

Int32
.
.
::
.
Parse 方法 (String, IFormatProvider)
Int32 结构

将数字的指定区域性特定格式的字符串表示形式转换为其等效的 32 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As Integer
public static int Parse(
    string s,
    IFormatProvider provider
)
public:
static int Parse(
    String^ s,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        provider:IFormatProvider -> int

参数

s
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System Int32
与 s 中指定的数字等效的 32 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

此 Parse(String, IFormatProvider) 方法重载通常用于将可以多种方式格式化的文本转换为 Int32 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。 此 Parse(String, IFormatProvider) 方法重载通常用于将可以多种方式格式化的文本转换为 Int32 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int32..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int32..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int32..::.Parse(String, NumberStyles, IFormatProvider) 方法。

provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供有关 s 的格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供有关 s 的格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供有关 s 的格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Int32 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Int32 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Int32 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Int32 值。

Protected Sub OkToInteger_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OkToInteger.Click
   Dim locale As String
   Dim culture As CultureInfo
   Dim number As Integer

   ' Return if string is empty
   If String.IsNullOrEmpty(Me.inputNumber.Text) Then Exit Sub

   ' Get locale of web request to determine possible format of number
   If Request.UserLanguages.Length = 0 Then Exit Sub
   locale = Request.UserLanguages(0)
   If String.IsNullOrEmpty(locale) Then Exit Sub

   ' Instantiate CultureInfo object for the user's locale
   culture = New CultureInfo(locale)

   ' Convert user input from a string to a number
   Try
      number = Int32.Parse(Me.inputNumber.Text, culture.NumberFormat)
   Catch ex As FormatException
      Exit Sub
   Catch ex As Exception
      Exit Sub
   End Try

   ' Output number to label on web form
   Me.outputNumber.Text = "Number is " & number.ToString()
End Sub

protected void OkToInteger_Click(object sender, EventArgs e)
{
   string locale;
   int number;
   CultureInfo culture;

   // Return if string is empty
   if (String.IsNullOrEmpty(this.inputNumber.Text))
      return;

   // Get locale of web request to determine possible format of number
   if (Request.UserLanguages.Length == 0)
      return;
   locale = Request.UserLanguages[0];
   if (String.IsNullOrEmpty(locale))
      return;

  // Instantiate CultureInfo object for the user's locale
   culture = new CultureInfo(locale);

   // Convert user input from a string to a number
   try
   {
      number = Int32.Parse(this.inputNumber.Text, culture.NumberFormat);
   }
   catch (FormatException)
   {
      return;
   }
   catch (Exception)
   {
      return;
   }
   // Output number to label on web form
   this.outputNumber.Text = "Number is " + number.ToString();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


Int32 ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

Int32
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
Int32 结构

将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 32 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As Integer
public static int Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
public:
static int Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> int

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个用来指定的典型值为 Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个用来指定的典型值为 Integer。
provider
类型： System IFormatProvider
一个对象，用于提供有关 s 格式的区域性特定信息。

返回值

类型： System Int32
与 s 中指定的数字等效的 32 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digist][e[sign]exponential_digits][ws]

或者，如果 style 包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits fractional_digits exponential_digits | 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 OverflowException。
e | “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

如果仅带有十进制数字的字符串（与 NumberStyles..::.None 样式相对应）在 Int32 类型范围内，则总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 如果仅带有十进制数字的字符串（与 NumberStyles..::.None 样式相对应）在 Int32 类型范围内，则总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 如果仅带有十进制数字的字符串（与 NumberStyles..::.None 样式相对应）在 Int32 类型范围内，则总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | 小数点 (.) 和 fractional-digits 元素。但 fractional-digits 只能由一个或多个 0 数字组成，否则会引发 OverflowException。 小数点 (.) 和 fractional-digits 元素。但 fractional-digits 只能由一个或多个 0 数字组成，否则会引发 OverflowException。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。如果 s 用指数表示法表示一个数字，则它必须表示一个 Int32 数据类型范围内的不带非零小数部分的整数。 s 参数也可以使用指数表示法。如果 s 用指数表示法表示一个数字，则它必须表示一个 Int32 数据类型范围内的不带非零小数部分的整数。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 正号可以出现在 digits 之前。
NumberStyles AllowTrailingSign | 正号可以出现在 digits 之后。
NumberStyles AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
NumberStyles AllowThousands | 千位分隔符 (,) 元素。
NumberStyles AllowCurrencySymbol | $ 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例使用各种 style 和 provider 参数来分析 Int32 值的字符串表示形式。此示例还演示其他一些方法，根据分析操作所用的格式设置信息的区域性，对同一字符串进行解释。 下面的示例使用各种 style 和 provider 参数来分析 Int32 值的字符串表示形式。此示例还演示其他一些方法，根据分析操作所用的格式设置信息的区域性，对同一字符串进行解释。

Imports System.Globalization

Module ParseInt32
   Public Sub Main()
      Convert("12,000", NumberStyles.Float Or NumberStyles.AllowThousands, _
              New CultureInfo("en-GB"))
      Convert("12,000", NumberStyles.Float Or NumberStyles.AllowThousands, _
              New CultureInfo("fr-FR"))
      Convert("12,000", NumberStyles.Float, New CultureInfo("en-US"))

      Convert("12 425,00", NumberStyles.Float Or NumberStyles.AllowThousands, _
              New CultureInfo("sv-SE"))
      Convert("12,425.00", NumberStyles.Float Or NumberStyles.AllowThousands, _
              NumberFormatInfo.InvariantInfo)
      Convert("631,900", NumberStyles.Integer Or NumberStyles.AllowDecimalPoint, _
              New CultureInfo("fr-FR"))
      Convert("631,900", NumberStyles.Integer Or NumberStyles.AllowDecimalPoint, _
              New CultureInfo("en-US"))
      Convert("631,900", NumberStyles.Integer Or NumberStyles.AllowThousands, _
              New CultureInfo("en-US"))
   End Sub

   Private Sub Convert(value As String, style As NumberStyles, _
                       provider As IFormatProvider)
      Try
         Dim number As Integer = Int32.Parse(value, style, provider)
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", value)
      Catch e As OverflowException
         Console.WriteLine("'{0}' is out of range of the Int32 type.", value)
      End Try
   End Sub
End Module
' This example displays the following output to the console:
'       Converted '12,000' to 12000.
'       Converted '12,000' to 12.
'       Unable to convert '12,000'.
'       Converted '12 425,00' to 12425.
'       Converted '12,425.00' to 12425.
'       '631,900' is out of range of the Int32 type.
'       Unable to convert '631,900'.
'       Converted '631,900' to 631900.

using System;
using System.Globalization;

public class ParseInt32
{
   public static void Main()
   {
      Convert("12,000", NumberStyles.Float | NumberStyles.AllowThousands,
              new CultureInfo("en-GB"));
      Convert("12,000", NumberStyles.Float | NumberStyles.AllowThousands,
              new CultureInfo("fr-FR"));
      Convert("12,000", NumberStyles.Float, new CultureInfo("en-US"));

      Convert("12 425,00", NumberStyles.Float | NumberStyles.AllowThousands,
              new CultureInfo("sv-SE"));
      Convert("12,425.00", NumberStyles.Float | NumberStyles.AllowThousands,
              NumberFormatInfo.InvariantInfo);
      Convert("631,900", NumberStyles.Integer | NumberStyles.AllowDecimalPoint,
              new CultureInfo("fr-FR"));
      Convert("631,900", NumberStyles.Integer | NumberStyles.AllowDecimalPoint,
              new CultureInfo("en-US"));
      Convert("631,900", NumberStyles.Integer | NumberStyles.AllowThousands,
              new CultureInfo("en-US"));
   }

   private static void Convert(string value, NumberStyles style,
                               IFormatProvider provider)
   {
      try
      {
         int number = Int32.Parse(value, style, provider);
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      catch (FormatException)
      {
         Console.WriteLine("Unable to convert '{0}'.", value);
      }
      catch (OverflowException)
      {
         Console.WriteLine("'{0}' is out of range of the Int32 type.", value);
      }
   }
}
// This example displays the following output to the console:
//       Converted '12,000' to 12000.
//       Converted '12,000' to 12.
//       Unable to convert '12,000'.
//       Converted '12 425,00' to 12425.
//       Converted '12,425.00' to 12425.
//       '631,900' is out of range of the Int32 type.
//       Unable to convert '631,900'.
//       Converted '631,900' to 631900.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


Int32 ..::.ToString 方法

Int32
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int32 结构

将此实例的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

Int32 结构
Int32 成员
System 命名空间


Int32 ..::.ToString 方法

Int32
.
.
::
.
ToString 方法
Int32 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示形式，由减号（如果值为负）和没有前导零的从 0 到 9 的数字序列组成。

返回值是使用通用数值格式说明符 ("G") 和当前区域性的 NumberFormatInfo 对象进行设置格式的。若要定义整数值的字符串表示形式的格式设置，请调用 Int32..::.ToString(String) 方法。若要定义其格式设置用于整数值的字符串表示形式的区域性，请调用 Int32..::.ToString(IFormatProvider) 方法。若要同时定义用于创建整数值的字符串表示形式的格式说明符和区域性，请调用 Int32..::.ToString(String, IFormatProvider) 方法。 返回值是使用通用数值格式说明符 ("G") 和当前区域性的 NumberFormatInfo 对象进行设置格式的。若要定义整数值的字符串表示形式的格式设置，请调用 Int32..::.ToString(String) 方法。若要定义其格式设置用于整数值的字符串表示形式的区域性，请调用 Int32..::.ToString(IFormatProvider) 方法。若要同时定义用于创建整数值的字符串表示形式的格式说明符和区域性，请调用 Int32..::.ToString(String, IFormatProvider) 方法。 返回值是使用通用数值格式说明符 ("G") 和当前区域性的 NumberFormatInfo 对象进行设置格式的。若要定义整数值的字符串表示形式的格式设置，请调用 Int32..::.ToString(String) 方法。若要定义其格式设置用于整数值的字符串表示形式的区域性，请调用 Int32..::.ToString(IFormatProvider) 方法。若要同时定义用于创建整数值的字符串表示形式的格式说明符和区域性，请调用 Int32..::.ToString(String, IFormatProvider) 方法。 返回值是使用通用数值格式说明符 ("G") 和当前区域性的 NumberFormatInfo 对象进行设置格式的。若要定义整数值的字符串表示形式的格式设置，请调用 Int32..::.ToString(String) 方法。若要定义其格式设置用于整数值的字符串表示形式的区域性，请调用 Int32..::.ToString(IFormatProvider) 方法。若要同时定义用于创建整数值的字符串表示形式的格式说明符和区域性，请调用 Int32..::.ToString(String, IFormatProvider) 方法。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用默认的 ToString()()() 方法显示 Int32 值。此示例还显示通过使用许多标准格式说明符得到的 Int32 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 Int32 值。此示例还显示通过使用许多标准格式说明符得到的 Int32 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 Int32 值。此示例还显示通过使用许多标准格式说明符得到的 Int32 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。

Dim value As Integer = -16325
' Display value using default ToString method.
Console.WriteLine(value.ToString())            ' Displays -16325
' Display value using some standard format specifiers.
Console.WriteLine(value.ToString("G"))         ' Displays -16325
Console.WriteLine(value.ToString("C"))         ' Displays ($16,325.00)
Console.WriteLine(value.ToString("D"))         ' Displays -16325
Console.WriteLine(value.ToString("F"))         ' Displays -16325.00
Console.WriteLine(value.ToString("N"))         ' Displays -16,325.00
Console.WriteLine(value.ToString("X"))         ' Displays FFFFC03B

int value = -16325;
// Display value using default ToString method.
Console.WriteLine(value.ToString());            // Displays -16325
// Display value using some standard format specifiers.
Console.WriteLine(value.ToString("G"));         // Displays -16325
Console.WriteLine(value.ToString("C"));         // Displays ($16,325.00)
Console.WriteLine(value.ToString("D"));         // Displays -16325
Console.WriteLine(value.ToString("F"));         // Displays -16325.00
Console.WriteLine(value.ToString("N"));         // Displays -16,325.00
Console.WriteLine(value.ToString("X"));         // Displays FFFFC03B

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Int32 ..::.ToString 方法 (IFormatProvider)

Int32
.
.
::
.
ToString 方法 (IFormatProvider)
Int32 结构

使用指定的区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由 provider 指定。

实现

此实例使用通用数值格式说明符（“G”）进行格式设置。

provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象：

  • 一个 CultureInfo 对象，它表示要使用其格式设置规则的区域性。

  • 一个 NumberFormatInfo 对象，它包含此值的特定数值格式设置信息。

  • 一个实现 IFormatProvider 的自定义对象，其 GetFormat 方法返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 null ，或者无法从 provider 中获得 NumberFormatInfo 对象，则使用线程的当前区域性的 NumberFormatInfo 对象对返回值进行格式设置。有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。 如果 provider 为 null ，或者无法从 provider 中获得 NumberFormatInfo 对象，则使用线程的当前区域性的 NumberFormatInfo 对象对返回值进行格式设置。有关线程的当前区域性的信息，请参见 Thread..::.CurrentCulture。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用表示多种不同区域性的 CultureInfo 对象显示 Int32 值的字符串表示形式。

Dim value As Integer = -16325
' Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture))
' Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")))
' Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")))
' This example displays the following output to the console:
'       -16325
'       -16325
'       -16325

int value = -16325;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
// This example displays the following output to the console:
//       -16325
//       -16325
//       -16325

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Int32 ..::.ToString 方法 (String)

Int32
.
.
::
.
ToString 方法 (String)
Int32 结构

使用指定的格式，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
标准或自定义的数值格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 无效或不受支持。

format 参数可以为“R”之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以为“R”之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

此实例的返回值用当前区域性的 NumberFormatInfo 设置格式。

下面的示例使用每个受支持的标准数值格式说明符以及两个自定义数值格式字符串来显示 Int32 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。 下面的示例使用每个受支持的标准数值格式说明符以及两个自定义数值格式字符串来显示 Int32 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。

Dim value As Integer = -16325
Dim specifier As String

' Use standard numeric format specifier.
specifier = "G"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    G: -16325
specifier = "C"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    C: ($16,325.00)
specifier = "D8"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    D8: -00016325
specifier = "E4"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    E4: -1.6325E+004
specifier = "e3"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    e3: -1.633e+004
specifier = "F"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    F: -16325.00
specifier = "N"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    N: -16,325.00
specifier = "P"
Console.WriteLine("{0}: {1}", specifier, (value/100000).ToString(specifier))
' Displays:    P: -16.33 %
specifier = "X"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    X: FFFFC03B

' Use custom numeric format specifiers.
specifier = "0,0.000"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    0,0.000: -16,325.000
specifier = "#,#.00#;(#,#.00#)"
Console.WriteLine("{0}: {1}", specifier, (value*-1).ToString(specifier))
' Displays:    #,#.00#;(#,#.00#): 16,325.00

int value = -16325;
string specifier;

// Use standard numeric format specifier.
specifier = "G";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    G: -16325
specifier = "C";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    C: ($16,325.00)
specifier = "D8";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    D8: -00016325
specifier = "E4";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    E4: -1.6325E+004
specifier = "e3";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    e3: -1.633e+004
specifier = "F";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    F: -16325.00
specifier = "N";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    N: -16,325.00
specifier = "P";
Console.WriteLine("{0}: {1}", specifier, (value/100000).ToString(specifier));
// Displays:    P: -16.33 %
specifier = "X";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    X: FFFFC03B

// Use custom numeric format specifiers.
specifier = "0,0.000";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    0,0.000: -16,325.000
specifier = "#,#.00#;(#,#.00#)";
Console.WriteLine("{0}: {1}", specifier, (value*-1).ToString(specifier));
// Displays:    #,#.00#;(#,#.00#): 16,325.00

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
标准数字格式字符串
自定义数字格式字符串
如何：用前导零填充数字


Int32 ..::.ToString 方法 (String, IFormatProvider)

Int32
.
.
::
.
ToString 方法 (String, IFormatProvider)
Int32 结构

使用指定的格式和区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
标准或自定义的数值格式字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 和 provider 指定。

实现

异常 | 条件
FormatException | format 无效或不受支持。

format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。

provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供有关此方法所返回的字符串格式的区域性特定的格式信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供有关此方法所返回的字符串格式的区域性特定的格式信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供有关此方法所返回的字符串格式的区域性特定的格式信息。实现 IFormatProvider 的对象可以是以下任何对象：

  • 一个 CultureInfo 对象，它表示要使用其格式设置规则的区域性。

  • 一个 NumberFormatInfo 对象，它包含此值的特定数值格式设置信息。

  • 一个实现 IFormatProvider 的自定义对象，其 GetFormat 方法返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法从 provider 中获取 NumberFormatInfo 对象，则使用当前区域性的 NumberFormatInfo 对此实例的返回值进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例通过对三种不同区域性使用每个受支持的标准数值格式说明符来显示正值和负值。

' Define cultures whose formatting conventions are to be used.
Dim cultures() As CultureInfo = {CultureInfo.CreateSpecificCulture("en-US"), _
                                 CultureInfo.CreateSpecificCulture("fr-FR"), _
                                 CultureInfo.CreateSpecificCulture("es-ES") }
Dim positiveNumber As Integer = 1679
Dim negativeNumber As Integer = -3045
Dim specifiers() As String = {"G", "C", "D8", "E2", "F", "N", "P", "X8"}

For Each specifier As String In specifiers
   For Each culture As CultureInfo In Cultures
      ' Display values with "G" format specifier.
      Console.WriteLine("{0} format using {1} culture: {2, 16} {3, 16}", _
                        specifier, culture.Name, _
                        positiveNumber.ToString(specifier, culture), _
                        negativeNumber.ToString(specifier, culture))

   Next
   Console.WriteLine()
Next
' The example displays the following output to the console:
'    G format using en-US culture:             1679            -3045
'    G format using fr-FR culture:             1679            -3045
'    G format using es-ES culture:             1679            -3045
'
'    C format using en-US culture:        $1,679.00      ($3,045.00)
'    C format using fr-FR culture:       1 679,00 ?      -3 045,00 ?
'    C format using es-ES culture:       1.679,00 ?      -3.045,00 ?
'
'    D8 format using en-US culture:         00001679        -00003045
'    D8 format using fr-FR culture:         00001679        -00003045
'    D8 format using es-ES culture:         00001679        -00003045
'
'    E2 format using en-US culture:        1.68E+003       -3.05E+003
'    E2 format using fr-FR culture:        1,68E+003       -3,05E+003
'    E2 format using es-ES culture:        1,68E+003       -3,05E+003
'
'    F format using en-US culture:          1679.00         -3045.00
'    F format using fr-FR culture:          1679,00         -3045,00
'    F format using es-ES culture:          1679,00         -3045,00
'
'    N format using en-US culture:         1,679.00        -3,045.00
'    N format using fr-FR culture:         1 679,00        -3 045,00
'    N format using es-ES culture:         1.679,00        -3.045,00
'
'    P format using en-US culture:     167,900.00 %    -304,500.00 %
'    P format using fr-FR culture:     167 900,00 %    -304 500,00 %
'    P format using es-ES culture:     167.900,00 %    -304.500,00 %
'
'    X8 format using en-US culture:         0000068F         FFFFF41B
'    X8 format using fr-FR culture:         0000068F         FFFFF41B
'    X8 format using es-ES culture:         0000068F         FFFFF41B

// Define cultures whose formatting conventions are to be used.
CultureInfo[] cultures = {CultureInfo.CreateSpecificCulture("en-US"),
                          CultureInfo.CreateSpecificCulture("fr-FR"),
                          CultureInfo.CreateSpecificCulture("es-ES") };
int positiveNumber = 1679;
int negativeNumber = -3045;
string[] specifiers = {"G", "C", "D8", "E2", "F", "N", "P", "X8"};

foreach (string specifier in specifiers)
{
   foreach (CultureInfo culture in cultures)
   {
      // Display values with "G" format specifier.
      Console.WriteLine("{0} format using {1} culture: {2, 16} {3, 16}",
                        specifier, culture.Name,
                        positiveNumber.ToString(specifier, culture),
                        negativeNumber.ToString(specifier, culture));
   }
   Console.WriteLine();
}
// The example displays the following output to the console:
//    G format using en-US culture:             1679            -3045
//    G format using fr-FR culture:             1679            -3045
//    G format using es-ES culture:             1679            -3045
//
//    C format using en-US culture:        $1,679.00      ($3,045.00)
//    C format using fr-FR culture:       1 679,00 ?      -3 045,00 ?
//    C format using es-ES culture:       1.679,00 ?      -3.045,00 ?
//
//    D8 format using en-US culture:         00001679        -00003045
//    D8 format using fr-FR culture:         00001679        -00003045
//    D8 format using es-ES culture:         00001679        -00003045
//
//    E2 format using en-US culture:        1.68E+003       -3.05E+003
//    E2 format using fr-FR culture:        1,68E+003       -3,05E+003
//    E2 format using es-ES culture:        1,68E+003       -3,05E+003
//
//    F format using en-US culture:          1679.00         -3045.00
//    F format using fr-FR culture:          1679,00         -3045,00
//    F format using es-ES culture:          1679,00         -3045,00
//
//    N format using en-US culture:         1,679.00        -3,045.00
//    N format using fr-FR culture:         1 679,00        -3 045,00
//    N format using es-ES culture:         1.679,00        -3.045,00
//
//    P format using en-US culture:     167,900.00 %    -304,500.00 %
//    P format using fr-FR culture:     167 900,00 %    -304 500,00 %
//    P format using es-ES culture:     167.900,00 %    -304.500,00 %
//
//    X8 format using en-US culture:         0000068F         FFFFF41B
//    X8 format using fr-FR culture:         0000068F         FFFFF41B
//    X8 format using es-ES culture:         0000068F         FFFFF41B

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int32 结构
Int32 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
标准数字格式字符串
自定义数字格式字符串
如何：用前导零填充数字


Int32 ..::.TryParse 方法

Int32
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int32 结构

将数字的字符串表示形式转换为它的等效 32 位有符号整数。一个指示操作是否成功的返回值。 将数字的字符串表示形式转换为它的等效 32 位有符号整数。一个指示操作是否成功的返回值。

名称 说明
页首

参考

Int32 结构
Int32 成员
System 命名空间
Parse


Int32 ..::.TryParse 方法 (String, Int32%)

Int32
.
.
::
.
TryParse 方法 (String, Int32%)
Int32 结构

将数字的字符串表示形式转换为它的等效 32 位有符号整数。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效 32 位有符号整数。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As Integer _
) As Boolean
public static bool TryParse(
    string s,
    out int result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] int% result
)
static member TryParse :
        s:string *
        result:int byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。
result
类型： System Int32 %
当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 32 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 32 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 32 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。

TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 方法。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。

此 TryParse 方法重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 重载。 此 TryParse 方法重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 重载。

下面的示例将 Int32..::.TryParse(String, Int32%) 方法与一些不同的字符串值一起调用。

Module StringParsing
   Public Sub Main()
      TryToParse(Nothing)
      TryToParse("160519")
      TryToParse("9432.0")
      TryToParse("16,667")
      TryToParse("   -322   ")
      TryToParse("+4302")
      TryToParse("(100)")
      TryToParse("01FA")
   End Sub

   Private Sub TryToParse(value As String)
      Dim number As Integer
      Dim result As Boolean = Int32.TryParse(value, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Else
         If value Is Nothing Then value = ""
         Console.WriteLine("Attempted conversion of '{0}' failed.", value)
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Attempted conversion of '' failed.
'       Converted '160519' to 160519.
'       Attempted conversion of '9432.0' failed.
'       Attempted conversion of '16,667' failed.
'       Converted '   -322   ' to -322.
'       Converted '+4302' to 4302.
'       Attempted conversion of '(100)' failed.
'       Attempted conversion of '01FA' failed.

using System;

public class StringParsing
{
   public static void Main()
   {
      TryToParse(null);
      TryToParse("160519");
      TryToParse("9432.0");
      TryToParse("16,667");
      TryToParse("   -322   ");
      TryToParse("+4302");
      TryToParse("(100);");
      TryToParse("01FA");
   }

   private static void TryToParse(string value)
   {
      int number;
      bool result = Int32.TryParse(value, out number);
      if (result)
      {
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      else
      {
         if (value == null) value = "";
         Console.WriteLine("Attempted conversion of '{0}' failed.", value);
      }
   }
}
// The example displays the following output to the console:
//       Attempted conversion of '' failed.
//       Converted '160519' to 160519.
//       Attempted conversion of '9432.0' failed.
//       Attempted conversion of '16,667' failed.
//       Converted '   -322   ' to -322.
//       Converted '+4302' to 4302.
//       Attempted conversion of '(100);' failed.
//       Attempted conversion of '01FA' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Int32 结构
Int32 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


Int32 ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, Int32%)

Int32
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, Int32%)
Int32 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 32 位有符号整数。一个指示转换是否成功的返回值。 将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 32 位有符号整数。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As Integer _
) As Boolean
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out int result
)
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] int% result
)
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:int byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。 包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
result
类型： System Int32 %
当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 32 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 32 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 32 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。

TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][e[sign]digits][ws]

或者，如果 style 参数包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。如果style包含 NumberStyles..::.AllowLeadingSign 或 NumberStyles..::.AllowTrailingSign 标志，则正负符号可以出现在 s 中。 一个可选符号。如果style包含 NumberStyles..::.AllowLeadingSign 或 NumberStyles..::.AllowTrailingSign 标志，则正负符号可以出现在 s 中。
digits | 由从 0 到 9 的数字组成的序列。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。
fractional_digits | 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
e | “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。如果 s 用指数表示法表示一个数字，则它必须表示一个 Int32 数据类型范围内的不带非零小数部分的整数。 s 参数也可以使用指数表示法。如果 s 用指数表示法表示一个数字，则它必须表示一个 Int32 数据类型范围内的不带非零小数部分的整数。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 符号可出现在 digits 之前。
NumberStyles AllowTrailingSign | 符号可出现在 digits 之后。
NumberStyles AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
NumberStyles AllowThousands | 千位分隔符 (,) 元素。
NumberStyles AllowCurrencySymbol | $ 元素。
NumberStyles Currency | 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。
NumberStyles Float | 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。
NumberStyles Number | ws、符号、千位分隔符 (,) 以及小数点 (.)元素。
NumberStyles Any | 所有样式（除 s 之外）都不能表示十六进制数字。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 NumberStyles..::.HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 NumberStyles..::.HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 NumberStyles..::.HexNumber。）

provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例将 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 方法与许多不同的字符串和 NumberStyles 值一起调用。

Imports System.Globalization

Module StringParsing
   Public Sub Main()
      Dim numericString As String
      Dim styles As NumberStyles

      numericString = "106779"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)

      numericString = "-30677"
      styles = NumberStyles.None
      CallTryParse(numericString, styles)

      styles = NumberStyles.AllowLeadingSign
      CallTryParse(numericString, styles)

      numericString = "301677-"
      CallTryParse(numericString, styles)

      styles = styles Or NumberStyles.AllowTrailingSign
      CallTryParse(numericString, styles)

      numericString = "$10634"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)

      styles = NumberStyles.Integer Or NumberStyles.AllowCurrencySymbol
      CallTryParse(numericString, styles)

      numericString = "10345.00"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "10345.72"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "22,593"
      styles = NumberStyles.Integer Or NumberStyles.AllowThousands
      CallTryParse(numericString, styles)

      numericString = "12E-01"
      styles = NumberStyles.Integer Or NumberStyles.AllowExponent
      CallTryParse(numericString, styles)

      numericString = "12E03"
      CallTryParse(numericString, styles)

      numericString = "80c1"
      CallTryParse(numericString, NumberStyles.HexNumber)

      numericString = "0x80C1"
      CallTryParse(numericString, NumberStyles.HexNumber)
   End Sub

   Private Sub CallTryParse(stringToConvert As String, styles AS NumberStyles)
      Dim number As Integer
      Dim provider As CultureInfo

      ' If currency symbol is allowed, use en-US culture.
      If CBool(styles And NumberStyles.AllowCurrencySymbol) Then
         provider = CultureInfo.CurrentCulture
      Else
         provider = New CultureInfo("en-US")
      End If

      Dim result As Boolean = Int32.TryParse(stringToConvert, styles, _
                                             provider, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
      Else
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           Convert.ToString(stringToConvert))
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '106779' to 106779.
'       Attempted conversion of '-30677' failed.
'       Converted '-30677' to -30677.
'       Attempted conversion of '301677-' failed.
'       Converted '301677-' to -301677.
'       Attempted conversion of '$10634' failed.
'       Converted '$10634' to 10634.
'       Converted '10345.00' to 10345.
'       Attempted conversion of '10345.72' failed.
'       Converted '22,593' to 22593.
'       Attempted conversion of '12E-01' failed.
'       Converted '12E03' to 12000.
'       Converted '80c1' to 32961.
'       Attempted conversion of '0x80C1' failed.

using System;
using System.Globalization;

public class StringParsing
{
   public static void Main()
   {
      string numericString;
      NumberStyles styles;

      numericString = "106779";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      numericString = "-30677";
      styles = NumberStyles.None;
      CallTryParse(numericString, styles);

      styles = NumberStyles.AllowLeadingSign;
      CallTryParse(numericString, styles);

      numericString = "301677-";
      CallTryParse(numericString, styles);

      styles = styles | NumberStyles.AllowTrailingSign;
      CallTryParse(numericString, styles);

      numericString = "$10634";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      styles = NumberStyles.Integer | NumberStyles.AllowCurrencySymbol;
      CallTryParse(numericString, styles);

      numericString = "10345.00";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "10345.72";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "22,593";
      styles = NumberStyles.Integer | NumberStyles.AllowThousands;
      CallTryParse(numericString, styles);

      numericString = "12E-01";
      styles = NumberStyles.Integer | NumberStyles.AllowExponent;
      CallTryParse(numericString, styles);

      numericString = "12E03";
      CallTryParse(numericString, styles);

      numericString = "80c1";
      CallTryParse(numericString, NumberStyles.HexNumber);

      numericString = "0x80C1";
      CallTryParse(numericString, NumberStyles.HexNumber);
   }

   private static void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      int number;
      CultureInfo provider;

      // If currency symbol is allowed, use en-US culture.
      if ((styles & NumberStyles.AllowCurrencySymbol) > 0)
         provider = new CultureInfo("en-US");
      else
         provider = CultureInfo.InvariantCulture;

      bool result = Int32.TryParse(stringToConvert, styles,
                                   provider, out number);
      if (result)
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
      else
         Console.WriteLine("Attempted conversion of '{0}' failed.",
                           Convert.ToString(stringToConvert));
   }
}
// The example displays the following output to the console:
//       Converted '106779' to 106779.
//       Attempted conversion of '-30677' failed.
//       Converted '-30677' to -30677.
//       Attempted conversion of '301677-' failed.
//       Converted '301677-' to -301677.
//       Attempted conversion of '$10634' failed.
//       Converted '$10634' to 10634.
//       Converted '10345.00' to 10345.
//       Attempted conversion of '10345.72' failed.
//       Converted '22,593' to 22593.
//       Attempted conversion of '12E-01' failed.
//       Converted '12E03' to 12000.
//       Converted '80c1' to 32961.
//       Attempted conversion of '0x80C1' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Int32 结构
Int32 成员
TryParse 重载
System 命名空间
Parse
NumberStyles
ToString

其他资源

分析数值字符串


Int64 结构

Int64 结构
成员

表示 64 位有符号的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Int64 _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of Long),  _
    IEquatable(Of Long)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Int64 : IComparable, IFormattable,
    IConvertible, IComparable<long>, IEquatable<long>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Int64 : IComparable,
    IFormattable, IConvertible, IComparable<long long>, IEquatable<long long>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Int64 =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<int64>
        interface IEquatable<int64>
    end

Int64 值类型表示值介于 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之间的整数。

Int64 为比较此类型的实例，将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

警告说明 警告

在所有的硬件平台上都分配该类型的一个实例不是线程安全的，因为该实例的二进制表示形式可能太大，无法在单个原子操作中分配。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 成员
System 命名空间
UInt64


Int64 成员

Int64 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int64 结构

表示 64 位有符号的整数。

Int64 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Int64 结构
System 命名空间


Int64 字段

Int64 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int64 结构

Int64 类型公开以下成员。

名称 说明
页首

参考

Int64 结构
System 命名空间


Int64 ..::.MaxValue 字段

Int64
.
.
::
.
MaxValue 字段
Int64 结构

表示 Int64 的最大可能值。此字段为常数。 表示 Int64 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As Long
public const long MaxValue
public:
literal long long MaxValue
static val mutable MaxValue: int64

该常数的值为 9,223,372,036,854,775,807；即十六进制的 0x7FFFFFFFFFFFFFFF。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间
MinValue


Int64 ..::.MinValue 字段

Int64
.
.
::
.
MinValue 字段
Int64 结构

表示 Int64 的最小可能值。此字段为常数。 表示 Int64 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As Long
public const long MinValue
public:
literal long long MinValue
static val mutable MinValue: int64

该常数的值为 -9,223,372,036,854,775,808；即十六进制的 0x8000000000000000。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间
MaxValue


Int64 方法

Int64 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int64 结构

Int64 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Int64 结构
System 命名空间


Int64 ..::.CompareTo 方法

Int64
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int64 结构

将此实例与指定的对象或 Int64 进行比较，并返回二者相对值的指示。

名称 说明
页首

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.CompareTo 方法 (Int64)

Int64
.
.
::
.
CompareTo 方法 (Int64)
Int64 结构

将此实例与指定的 64 位有符号整数进行比较并返回对其相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Long _ ) As Integer
public int CompareTo( long value )
public: virtual int CompareTo( long long value ) sealed
abstract CompareTo : value:int64 -> int override CompareTo : value:int64 -> int
参数
value
类型： System Int64
要比较的整数。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Int64..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的代码示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
CompareTo 重载
System 命名空间
UInt64
Equals


Int64 ..::.CompareTo 方法 (Object)

Int64
.
.
::
.
CompareTo 方法 (Object)
Int64 结构

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 Int64。

无论 Int64 的值如何，它都被认为大于空引用。

value 参数必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是 Int64 的实例；否则将引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
CompareTo 重载
System 命名空间
UInt64
Equals


Int64 ..::.Equals 方法

Int64
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int64 结构

返回一个值，该值指示此实例是否与指定的对象或 Int64 相等。

名称 说明
页首

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.Equals 方法 (Int64)

Int64
.
.
::
.
Equals 方法 (Int64)
Int64 结构

返回一个值，该值指示此实例是否与指定的 Int64 值相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As Long _
) As Boolean
public bool Equals(
    long obj
)
public:
virtual bool Equals(
    long long obj
) sealed
abstract Equals :
        obj:int64 -> bool
override Equals :
        obj:int64 -> bool

参数

obj
类型： System Int64
要与此实例进行比较的 Int64 值。

返回值

类型： System Boolean
如果 obj 的值与此实例相同，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
Equals 重载
System 命名空间


Int64 ..::.Equals 方法 (Object)

Int64
.
.
::
.
Equals 方法 (Object)
Int64 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 Int64 的实例并且与此实例的值相等，则为 true；否则为 false。

下面的代码示例演示如何在 Int64 的上下文中使用 Equals 对两个 long 值进行比较，如果它们表示相同的数字则返回 true，否则返回 false。

Dim myVariable1 As Int64 = 80
Dim myVariable2 As Int64 = 80

' Get and display the declaring type.
Console.WriteLine(ControlChars.NewLine + "Type of 'myVariable1' is '{0}' and" +  _
            " value is :{1}", myVariable1.GetType().ToString(), myVariable1.ToString())
Console.WriteLine("Type of 'myVariable2' is '{0}' and" +  _
         " value is :{1}", myVariable2.GetType().ToString(), myVariable2.ToString())

' Compare 'myVariable1' instance with 'myVariable2' Object.
If myVariable1.Equals(myVariable2) Then
   Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and " + _
            "'myVariable2' are equal")
Else
   Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and " +  _
         "'myVariable2' are not equal")
End If

Int64 myVariable1 = 80;
Int64 myVariable2 = 80;

// Get and display the declaring type.
Console.WriteLine("\nType of 'myVariable1' is '{0}' and"+
     " value is :{1}",myVariable1.GetType(), myVariable1);
Console.WriteLine("Type of 'myVariable2' is '{0}' and"+
     " value is :{1}",myVariable2.GetType(), myVariable2);

// Compare 'myVariable1' instance with 'myVariable2' Object.
if( myVariable1.Equals( myVariable2 ) )
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are equal");
else
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are not equal");

Int64 myVariable1 = 80;
Int64 myVariable2 = 80;

// Get and display the declaring type.
Console::WriteLine( "\nType of 'myVariable1' is ' {0}' and  value is : {1}", myVariable1.GetType(), myVariable1 );
Console::WriteLine( "Type of 'myVariable2' is ' {0}' and  value is : {1}", myVariable2.GetType(), myVariable2 );

// Compare 'myVariable1' instance with 'myVariable2' Object.
if ( myVariable1.Equals( myVariable2 ) )
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are equal" );
else
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are not equal" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
Equals 重载
System 命名空间
CompareTo


Int64 ..::.GetHashCode 方法

Int64
.
.
::
.
GetHashCode 方法
Int64 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.GetTypeCode 方法

Int64
.
.
::
.
GetTypeCode 方法
Int64 结构

返回值类型 Int64 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.Int64。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间
TypeCode


Int64 ..::.IConvertible ..::.ToBoolean 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToByte 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToChar 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
当前实例的值，已转换为 Char。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToDateTime 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToDecimal 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
当前实例的值，已转换为 Decimal。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToDouble 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，已转换为 Double。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToInt16 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，已转换为 Int16。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToInt32 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，已转换为 Int32。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToInt64 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，未更改。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToSByte 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，已转换为 SByte。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToSingle 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，已转换为 Single。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToType 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
此 Int64 值要转换为的类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的信息。

返回值

类型： System Object
当前实例的值，已转换为 type。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToUInt16 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，已转换为 UInt16。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToUInt32 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，已转换为 UInt32。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.IConvertible ..::.ToUInt64 方法

Int64
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Int64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，已转换为 UInt64。

实现

此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(Int64) 方法。 此成员是显式接口成员的实现。只能在 Int64 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(Int64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.Parse 方法

Int64
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int64 结构

将数字的字符串表示形式转换为它的等效 64 位有符号整数。

名称 说明
页首

参考

Int64 结构
Int64 成员
System 命名空间
TryParse


Int64 ..::.Parse 方法 (String)

Int64
.
.
::
.
Parse 方法 (String)
Int64 结构

将数字的字符串表示形式转换为它的等效 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As Long
public static long Parse(
    string s
)
public:
static long long Parse(
    String^ s
)
static member Parse :
        s:string -> int64

参数

s
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Int64
与 s 中包含的数字等效的 64 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int64..::.Parse(String, NumberStyles) 或 Int64..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int64..::.Parse(String, NumberStyles) 或 Int64..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int64..::.Parse(String, NumberStyles) 或 Int64..::.Parse(String, NumberStyles, IFormatProvider) 方法。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Int64..::.Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Int64..::.Parse(String, NumberStyles, IFormatProvider) 方法。

下面的示例演示如何使用 Int64..::.Parse(String) 方法将字符串值转换为 64 位有符号整数值，然后显示得到的长整数值。 下面的示例演示如何使用 Int64..::.Parse(String) 方法将字符串值转换为 64 位有符号整数值，然后显示得到的长整数值。

Module ParseInt64
   Public Sub Main()
      Convert("  179032  ")
      Convert(" -2041326 ")
      Convert(" +8091522 ")
      Convert("   1064.0   ")
      Convert("  178.3")
      Convert(String.Empty)
      Convert((CDec(Int64.MaxValue) + 1).ToString())
   End Sub

   Private Sub Convert(value As String)
      Try
         Dim number As Long = Int64.Parse(value)
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", value)
      Catch e As OverflowException
         Console.WriteLine("'{0}' is out of range.", value)
      End Try
   End Sub
End Module
' This example displays the following output to the console:
'       Converted '  179032  ' to 179032.
'       Converted ' -2041326 ' to -2041326.
'       Converted ' +8091522 ' to 8091522.
'       Unable to convert '   1064.0   '.
'       Unable to convert '  178.3'.
'       Unable to convert ''.
'       '9223372036854775808' is out of range.

using System;

public class ParseInt64
{
   public static void Main()
   {
      Convert("  179042  ");
      Convert(" -2041326 ");
      Convert(" +8091522 ");
      Convert("   1064.0   ");
      Convert("  178.3");
      Convert(String.Empty);
      Convert(((decimal) Int64.MaxValue) + 1.ToString());
   }

   private static void Convert(string value)
   {
      try
      {
         long number = Int64.Parse(value);
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      catch (FormatException)
      {
         Console.WriteLine("Unable to convert '{0}'.", value);
      }
      catch (OverflowException)
      {
         Console.WriteLine("'{0}' is out of range.", value);
      }
   }
}
// This example displays the following output to the console:
//       Converted '  179042  ' to 179042.
//       Converted ' -2041326 ' to -2041326.
//       Converted ' +8091522 ' to 8091522.
//       Unable to convert '   1064.0   '.
//       Unable to convert '  178.3'.
//       Unable to convert ''.
//       '92233720368547758071' is out of range.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


Int64 ..::.Parse 方法 (String, NumberStyles)

Int64
.
.
::
.
Parse 方法 (String, NumberStyles)
Int64 结构

将指定样式的数字的字符串表示形式转换为它的等效 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As Long
public static long Parse(
    string s,
    NumberStyles style
)
public:
static long long Parse(
    String^ s,
    NumberStyles style
)
static member Parse :
        s:string *
        style:NumberStyles -> int64

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
NumberStyles 值的按位组合，指示 s 允许使用的格式。一个要指定的典型值为 Integer。 NumberStyles 值的按位组合，指示 s 允许使用的格式。一个要指定的典型值为 Integer。

返回值

类型： System Int64
与 s 中指定的数字等效的 64 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。 - 或 - style 支持小数位但 s 包含非零的小数位。

style 参数定义 s 参数中允许的样式元素（如空白、正负号或千位分隔符）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（如空白、正负号或千位分隔符）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（如空白、正负号或千位分隔符）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][e[sign]exponential_digits][ws]

或者，如果 style 包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits fractional_digits exponential_digits | 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可以出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 OverflowException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 OverflowException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 OverflowException。
e | “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

如果仅带有数字的字符串（与 NumberStyles..::.None 样式相对应）在 Int64 类型范围内，则总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 如果仅带有数字的字符串（与 NumberStyles..::.None 样式相对应）在 Int64 类型范围内，则总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 如果仅带有数字的字符串（与 NumberStyles..::.None 样式相对应）在 Int64 类型范围内，则总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 digits 元素。
AllowDecimalPoint | 小数点 (.) 和 fractional-digits 元素。
AllowExponent | s 参数也可以使用指数表示法。如果 s 表示使用指数表示法的数字，则得到的数值不能包含任何非零的小数位。 s 参数也可以使用指数表示法。如果 s 表示使用指数表示法的数字，则得到的数值不能包含任何非零的小数位。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 千位分隔符 (,) 元素。
AllowCurrencySymbol | $ 元素。
Currency | 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.) 符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.) 符号。s 参数也可以使用指数表示法。
Number | ws、符号、千位分隔符 (,) 以及小数点 (.) 元素。
Any | 所有样式（除 s 之外）都不能表示十六进制数字。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与 s 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与 s 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与 s 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Int64..::.Parse(String, NumberStyles, IFormatProvider) 重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Int64..::.Parse(String, NumberStyles, IFormatProvider) 重载。

下面的示例使用 Int64..::.Parse(String, NumberStyles) 方法对多个 Int64 值的字符串表示形式进行分析。此示例的当前区域性为 en-US。 下面的示例使用 Int64..::.Parse(String, NumberStyles) 方法对多个 Int64 值的字符串表示形式进行分析。此示例的当前区域性为 en-US。

Imports System.Globalization

Module ParseInt64
   Public Sub Main()
      Convert("104.0", NumberStyles.AllowDecimalPoint)
      Convert("104.9", NumberStyles.AllowDecimalPoint)
      Convert (" 106034", NumberStyles.None)
      Convert(" $17,198,064.42", NumberStyles.AllowCurrencySymbol Or _
                                 NumberStyles.Number)
      Convert(" $17,198,064.00", NumberStyles.AllowCurrencySymbol Or _
                                 NumberStyles.Number)
      Convert("103E06", NumberStyles.AllowExponent)
      Convert("1200E-02", NumberStyles.AllowExponent)
      Convert("1200E-03", NumberStyles.AllowExponent)
      Convert("-1,345,791", NumberStyles.AllowThousands)
      Convert("(1,345,791)", NumberStyles.AllowThousands Or _
                             NumberStyles.AllowParentheses)
      Convert("FFCA00A0", NumberStyles.HexNumber)
      Convert("0xFFCA00A0", NumberStyles.HexNumber)
   End Sub

   Private Sub Convert(value As String, style As NumberStyles)
      Try
         Dim number As Long = Int64.Parse(value, style)
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", value)
      Catch e As OverflowException
         Console.WriteLine("'{0}' is out of range of the Int64 type.", value)
      End Try
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '104.0' to 104.
'       '104.9' is out of range of the Int64 type.
'       Unable to convert ' 106034'.
'       ' $17,198,064.42' is out of range of the Int64 type.
'       Converted ' $17,198,064.00' to 17198064.
'       Converted '103E06' to 103000000.
'       Converted '1200E-02' to 12.
'       '1200E-03' is out of range of the Int64 type.
'       Unable to convert '-1,345,791'.
'       Converted '(1,345,791)' to -1345791.
'       Converted 'FFCA00A0' to 4291428512.
'       Unable to convert '0xFFCA00A0'.

using System;
using System.Globalization;

public class ParseInt32
{
   public static void Main()
   {
      Convert("104.0", NumberStyles.AllowDecimalPoint);
      Convert("104.9", NumberStyles.AllowDecimalPoint);
      Convert (" 106034", NumberStyles.None);
      Convert(" $17,198,064.42", NumberStyles.AllowCurrencySymbol |
                                 NumberStyles.Number);
      Convert(" $17,198,064.00", NumberStyles.AllowCurrencySymbol |
                                 NumberStyles.Number);
      Convert("103E06", NumberStyles.AllowExponent);
      Convert("1200E-02", NumberStyles.AllowExponent);
      Convert("1200E-03", NumberStyles.AllowExponent);
      Convert("-1,345,791", NumberStyles.AllowThousands);
      Convert("(1,345,791)", NumberStyles.AllowThousands |
                             NumberStyles.AllowParentheses);
      Convert("FFCA00A0", NumberStyles.HexNumber);
      Convert("0xFFCA00A0", NumberStyles.HexNumber);
   }

   private static void Convert(string value, NumberStyles style)
   {
      try
      {
         long number = Int64.Parse(value, style);
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      catch (FormatException)
      {
         Console.WriteLine("Unable to convert '{0}'.", value);
      }
      catch (OverflowException)
      {
         Console.WriteLine("'{0}' is out of range of the Int64 type.", value);
      }
   }
}
// The example displays the following output to the console:
//       Converted '104.0' to 104.
//       '104.9' is out of range of the Int64 type.
//       Unable to convert ' 106034'.
//       ' $17,198,064.42' is out of range of the Int64 type.
//       Converted ' $17,198,064.00' to 17198064.
//       Converted '103E06' to 103000000.
//       Converted '1200E-02' to 12.
//       '1200E-03' is out of range of the Int64 type.
//       Unable to convert '-1,345,791'.
//       Converted '(1,345,791)' to -1345791.
//       Converted 'FFCA00A0' to 4291428512.
//       Unable to convert '0xFFCA00A0'.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


Int64 ..::.Parse 方法 (String, IFormatProvider)

Int64
.
.
::
.
Parse 方法 (String, IFormatProvider)
Int64 结构

将指定区域性特定格式的数字的字符串表示形式转换为其等效的 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As Long
public static long Parse(
    string s,
    IFormatProvider provider
)
public:
static long long Parse(
    String^ s,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        provider:IFormatProvider -> int64

参数

s
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System Int64
与 s 中指定的数字等效的 64 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

此 Parse(String, IFormatProvider) 方法重载通常用于将可以多种方式格式化的文本转换为 Int64 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。 此 Parse(String, IFormatProvider) 方法重载通常用于将可以多种方式格式化的文本转换为 Int64 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的项是可选的，其他的项如下所示。

ws

可选的空白。

sign

一个可选符号。

digits

一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int64..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int64..::.Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要显式定义可出现在 s 中的样式元素，请使用 Int64..::.Parse(String, NumberStyles, IFormatProvider) 方法。

provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供有关 s 的格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供有关 s 的格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供有关 s 的格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Int64 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Int64 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Int64 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Int64 值。

Protected Sub OkToLong_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OkToLong.Click
   Dim locale As String
   Dim culture As CultureInfo
   Dim number As Long

   ' Return if string is empty
   If String.IsNullOrEmpty(Me.inputNumber.Text) Then Exit Sub

   ' Get locale of web request to determine possible format of number
   If Request.UserLanguages.Length = 0 Then Exit Sub
   locale = Request.UserLanguages(0)
   If String.IsNullOrEmpty(locale) Then Exit Sub

   ' Instantiate CultureInfo object for the user's locale
   culture = New CultureInfo(locale)

   ' Convert user input from a string to a number
   Try
      number = Int64.Parse(Me.inputNumber.Text, culture.NumberFormat)
   Catch ex As FormatException
      Exit Sub
   Catch ex As Exception
      Exit Sub
   End Try

   ' Output number to label on web form
   Me.outputNumber.Text = "Number is " & number.ToString()
End Sub

protected void OkToLong_Click(object sender, EventArgs e)
{
   string locale;
   long number;
   CultureInfo culture;

   // Return if string is empty
   if (String.IsNullOrEmpty(this.inputNumber.Text))
      return;

   // Get locale of web request to determine possible format of number
   if (Request.UserLanguages.Length == 0)
      return;
   locale = Request.UserLanguages[0];
   if (String.IsNullOrEmpty(locale))
      return;

  // Instantiate CultureInfo object for the user's locale
   culture = new CultureInfo(locale);

   // Convert user input from a string to a number
   try
   {
      number = Int64.Parse(this.inputNumber.Text, culture.NumberFormat);
   }
   catch (FormatException)
   {
      return;
   }
   catch (Exception)
   {
      return;
   }
   // Output number to label on web form
   this.outputNumber.Text = "Number is " + number.ToString();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Int64 结构
Int64 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


Int64 ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

Int64
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
Int64 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为其等效的 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As Long
public static long Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
public:
static long long Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> int64

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。
provider
类型： System IFormatProvider
一个 IFormatProvider，它提供有关 s 的区域性特定格式设置信息。

返回值

类型： System Int64
与 s 中指定的数字等效的 64 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。 - 或 - style 支持小数位但 s 包含非零的小数位。

style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数中允许的样式元素（例如，空白或正号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][e[sign]exponential_digits][ws]

或者，如果 style 包含 AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits fractional_digits exponential_digits | 由从 0 到 9 的数字组成的序列。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 OverflowException。
e | “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

如果仅带有十进制数字的字符串（与 NumberStyles..::.None 样式相对应）在 Int64 类型范围内，则总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 如果仅带有十进制数字的字符串（与 NumberStyles..::.None 样式相对应）在 Int64 类型范围内，则总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 如果仅带有十进制数字的字符串（与 NumberStyles..::.None 样式相对应）在 Int64 类型范围内，则总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | 小数点 (.) 和 fractional-digits 元素。但 fractional-digits 只能由一个或多个 0 数字组成，否则会引发 OverflowException。 小数点 (.) 和 fractional-digits 元素。但 fractional-digits 只能由一个或多个 0 数字组成，否则会引发 OverflowException。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 符号可出现在 digits 之前。
NumberStyles AllowTrailingSign | 符号可出现在 digits 之后。
NumberStyles AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
NumberStyles AllowThousands | 千位分隔符 (,) 元素。
NumberStyles AllowCurrencySymbol | $ 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。 provider 参数是 IFormatProvider 的实现，例如 NumberFormatInfo 或 CultureInfo 对象。provider 参数提供用于进行分析的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

下面的示例使用各种 style 和 provider 参数来分析 Int64 值的字符串表示形式。此示例还演示其他一些方法，根据分析操作所用的格式设置信息的区域性，对同一字符串进行解释。 下面的示例使用各种 style 和 provider 参数来分析 Int64 值的字符串表示形式。此示例还演示其他一些方法，根据分析操作所用的格式设置信息的区域性，对同一字符串进行解释。

Imports System.Globalization

Module ParseInt64
   Public Sub Main()
      Convert("12,000", NumberStyles.Float Or NumberStyles.AllowThousands, _
              New CultureInfo("en-GB"))
      Convert("12,000", NumberStyles.Float Or NumberStyles.AllowThousands, _
              New CultureInfo("fr-FR"))
      Convert("12,000", NumberStyles.Float, New CultureInfo("en-US"))

      Convert("12 425,00", NumberStyles.Float Or NumberStyles.AllowThousands, _
              New CultureInfo("sv-SE"))
      Convert("12,425.00", NumberStyles.Float Or NumberStyles.AllowThousands, _
              NumberFormatInfo.InvariantInfo)
      Convert("631,900", NumberStyles.Integer Or NumberStyles.AllowDecimalPoint, _
              New CultureInfo("fr-FR"))
      Convert("631,900", NumberStyles.Integer Or NumberStyles.AllowDecimalPoint, _
              New CultureInfo("en-US"))
      Convert("631,900", NumberStyles.Integer Or NumberStyles.AllowThousands, _
              New CultureInfo("en-US"))
   End Sub

   Private Sub Convert(value As String, style As NumberStyles, _
                       provider As IFormatProvider)
      Try
         Dim number As Long = Int64.Parse(value, style, provider)
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", value)
      Catch e As OverflowException
         Console.WriteLine("'{0}' is out of range of the Int64 type.", value)
      End Try
   End Sub
End Module
' This example displays the following output to the console:
'       Converted '12,000' to 12000.
'       Converted '12,000' to 12.
'       Unable to convert '12,000'.
'       Converted '12 425,00' to 12425.
'       Converted '12,425.00' to 12425.
'       '631,900' is out of range of the Int64 type.
'       Unable to convert '631,900'.
'       Converted '631,900' to 631900.

using System;
using System.Globalization;

public class ParseInt64
{
   public static void Main()
   {
      Convert("12,000", NumberStyles.Float | NumberStyles.AllowThousands,
              new CultureInfo("en-GB"));
      Convert("12,000", NumberStyles.Float | NumberStyles.AllowThousands,
              new CultureInfo("fr-FR"));
      Convert("12,000", NumberStyles.Float, new CultureInfo("en-US"));

      Convert("12 425,00", NumberStyles.Float | NumberStyles.AllowThousands,
              new CultureInfo("sv-SE"));
      Convert("12,425.00", NumberStyles.Float | NumberStyles.AllowThousands,
              NumberFormatInfo.InvariantInfo);
      Convert("631,900", NumberStyles.Integer | NumberStyles.AllowDecimalPoint,
              new CultureInfo("fr-FR"));
      Convert("631,900", NumberStyles.Integer | NumberStyles.AllowDecimalPoint,
              new CultureInfo("en-US"));
      Convert("631,900", NumberStyles.Integer | NumberStyles.AllowThousands,
              new CultureInfo("en-US"));
   }

   private static void Convert(string value, NumberStyles style,
                               IFormatProvider provider)
   {
      try
      {
         long number = Int64.Parse(value, style, provider);
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      catch (FormatException)
      {
         Console.WriteLine("Unable to convert '{0}'.", value);
      }
      catch (OverflowException)
      {
         Console.WriteLine("'{0}' is out of range of the Int64 type.", value);
      }
   }
}
// This example displays the following output to the console:
//       Converted '12,000' to 12000.
//       Converted '12,000' to 12.
//       Unable to convert '12,000'.
//       Converted '12 425,00' to 12425.
//       Converted '12,425.00' to 12425.
//       '631,900' is out of range of the Int64 type.
//       Unable to convert '631,900'.
//       Converted '631,900' to 631900.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


Int64 ..::.ToString 方法

Int64
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int64 结构

将此实例的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

Int64 结构
Int64 成员
System 命名空间


Int64 ..::.ToString 方法

Int64
.
.
::
.
ToString 方法
Int64 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示形式，由减号（如果值为负）和没有前导零的从 0 到 9 的数字序列组成。

返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 进行格式设置。若要定义 Int64 值的字符串表示形式的格式设置，请调用 Int64..::.ToString(String) 方法。若要定义 Int64 值的字符串表示形式中使用的格式设置所属的区域性，请调用 Int64..::.ToString(IFormatProvider) 方法。若要同时定义用于创建整数值的字符串表示形式的格式说明符和区域性，请调用 Int64..::.ToString(String, IFormatProvider) 方法。 返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 进行格式设置。若要定义 Int64 值的字符串表示形式的格式设置，请调用 Int64..::.ToString(String) 方法。若要定义 Int64 值的字符串表示形式中使用的格式设置所属的区域性，请调用 Int64..::.ToString(IFormatProvider) 方法。若要同时定义用于创建整数值的字符串表示形式的格式说明符和区域性，请调用 Int64..::.ToString(String, IFormatProvider) 方法。 返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 进行格式设置。若要定义 Int64 值的字符串表示形式的格式设置，请调用 Int64..::.ToString(String) 方法。若要定义 Int64 值的字符串表示形式中使用的格式设置所属的区域性，请调用 Int64..::.ToString(IFormatProvider) 方法。若要同时定义用于创建整数值的字符串表示形式的格式说明符和区域性，请调用 Int64..::.ToString(String, IFormatProvider) 方法。 返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 进行格式设置。若要定义 Int64 值的字符串表示形式的格式设置，请调用 Int64..::.ToString(String) 方法。若要定义 Int64 值的字符串表示形式中使用的格式设置所属的区域性，请调用 Int64..::.ToString(IFormatProvider) 方法。若要同时定义用于创建整数值的字符串表示形式的格式说明符和区域性，请调用 Int64..::.ToString(String, IFormatProvider) 方法。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用默认的 ToString()()() 方法显示 Int64 值。此示例还显示通过使用许多标准格式说明符得到的 Int64 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 Int64 值。此示例还显示通过使用许多标准格式说明符得到的 Int64 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 Int64 值。此示例还显示通过使用许多标准格式说明符得到的 Int64 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。

Dim value As Long = -16325091
' Display value using default ToString method.
Console.WriteLine(value.ToString())            ' Displays -16325091
' Display value using some standard format specifiers.
Console.WriteLine(value.ToString("G"))         ' Displays -16325091
Console.WriteLine(value.ToString("C"))         ' Displays ($16,325,091.00)
Console.WriteLine(value.ToString("D"))         ' Displays -16325091
Console.WriteLine(value.ToString("F"))         ' Displays -16325091.00
Console.WriteLine(value.ToString("N"))         ' Displays -16,325091.00
Console.WriteLine(value.ToString("X"))         ' Displays FFFFFFFFFF06E61D

long value = -16325091;
// Display value using default ToString method.
Console.WriteLine(value.ToString());            // Displays -16325091
// Display value using some standard format specifiers.
Console.WriteLine(value.ToString("G"));         // Displays -16325091
Console.WriteLine(value.ToString("C"));         // Displays ($16,325,091.00)
Console.WriteLine(value.ToString("D"));         // Displays -16325091
Console.WriteLine(value.ToString("F"));         // Displays -16325091.00
Console.WriteLine(value.ToString("N"));         // Displays -16,325,091.00
Console.WriteLine(value.ToString("X"));         // Displays FFFFFFFFFF06E61D

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Int64 ..::.ToString 方法 (IFormatProvider)

Int64
.
.
::
.
ToString 方法 (IFormatProvider)
Int64 结构

使用指定的区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个 IFormatProvider，它提供区域性特定的格式设置信息。

返回值

类型： System String
此实例的值的字符串表示形式，由 provider 指定。

实现

此实例使用通用数值格式说明符（“G”）进行格式设置。

provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象：

  • 一个 CultureInfo 对象，它表示要使用其格式设置规则的区域性。

  • 一个 NumberFormatInfo 对象，它包含此值的特定数值格式设置信息。

  • 一个实现 IFormatProvider 的自定义对象，其 GetFormat 方法返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法从 provider 获取 NumberFormatInfo 对象，则使用当前区域性的 NumberFormatInfo 对象对返回值进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用表示多种不同区域性的 CultureInfo 对象显示 Int64 值的字符串表示形式。

Dim value As Long = -16325801
' Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture))
' Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")))
' Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")))
' This example displays the following output to the console:
'       -16325901
'       -16325901
'       -16325901

long value = -16325901;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
// This example displays the following output to the console:
//       -16325901
//       -16325901
//       -16325901

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Int64 ..::.ToString 方法 (String)

Int64
.
.
::
.
ToString 方法 (String)
Int64 结构

使用指定的格式，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
一个数值格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 无效或不受支持。

format 参数可以为“R”之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以为“R”之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

此实例的返回值用当前区域性的 NumberFormatInfo 设置格式。

下面的示例使用每个支持的标准数值格式说明符以及两个自定义数值格式字符串来显示 Int64 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。 下面的示例使用每个支持的标准数值格式说明符以及两个自定义数值格式字符串来显示 Int64 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。

Dim value As Long = -16325
Dim specifier As String

' Use standard numeric format specifier.
specifier = "G"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    G: -16325
specifier = "C"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    C: ($16,325.00)
specifier = "D8"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    D8: -00016325
specifier = "E4"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    E4: -1.6325E+004
specifier = "e3"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    e3: -1.633e+004
specifier = "F"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    F: -16325.00
specifier = "N"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    N: -16,325.00
specifier = "P"
Console.WriteLine("{0}: {1}", specifier, (value/100000).ToString(specifier))
' Displays:    P: -16.33 %
specifier = "X"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    X: FFFFC03B

' Use custom numeric format specifiers.
specifier = "0,0.000"
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
' Displays:    0,0.000: -16,325.000
specifier = "#,#.00#;(#,#.00#)"
Console.WriteLine("{0}: {1}", specifier, (value*-1).ToString(specifier))
' Displays:    #,#.00#;(#,#.00#): 16,325.00

long value = -16325;
string specifier;

// Use standard numeric format specifier.
specifier = "G";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    G: -16325
specifier = "C";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    C: ($16,325.00)
specifier = "D8";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    D8: -00016325
specifier = "E4";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    E4: -1.6325E+004
specifier = "e3";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    e3: -1.633e+004
specifier = "F";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    F: -16325.00
specifier = "N";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    N: -16,325.00
specifier = "P";
Console.WriteLine("{0}: {1}", specifier, (value/100000).ToString(specifier));
// Displays:    P: -16.33 %
specifier = "X";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    X: FFFFC03B

// Use custom numeric format specifiers.
specifier = "0,0.000";
Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
// Displays:    0,0.000: -16,325.000
specifier = "#,#.00#;(#,#.00#)";
Console.WriteLine("{0}: {1}", specifier, (value*-1).ToString(specifier));
// Displays:    #,#.00#;(#,#.00#): 16,325.00

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
标准数字格式字符串
自定义数字格式字符串
如何：用前导零填充数字


Int64 ..::.ToString 方法 (String, IFormatProvider)

Int64
.
.
::
.
ToString 方法 (String, IFormatProvider)
Int64 结构

使用指定的格式和区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
一个数值格式字符串。
provider
类型： System IFormatProvider
一个对象，它提供有关此实例的区域性特定格式设置信息。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 和 provider 指定。

实现

异常 | 条件
FormatException | format 无效或不受支持。

format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是标准的或自定义的数值格式字符串。除“R”（或“r”）以外的所有标准数值格式字符串均受支持，所有自定义的数值格式字符也是如此。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。

provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象： provider 参数是实现 IFormatProvider 接口的对象。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。实现 IFormatProvider 的对象可以是以下任何对象：

  • 一个 CultureInfo 对象，它表示要使用其格式设置规则的区域性。

  • 一个 NumberFormatInfo 对象，它包含此值的特定数值格式设置信息。

  • 一个实现 IFormatProvider 的自定义对象，其 GetFormat 方法返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法从 provider 中获取 NumberFormatInfo 对象，则使用当前区域性的 NumberFormatInfo 对此实例的返回值进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例通过对三种不同区域性使用每个受支持的标准数值格式说明符来显示正值和负值。

' Define cultures whose formatting conventions are to be used.
Dim cultures() As CultureInfo = {CultureInfo.CreateSpecificCulture("en-US"), _
                                 CultureInfo.CreateSpecificCulture("fr-FR"), _
                                 CultureInfo.CreateSpecificCulture("es-ES") }
Dim positiveNumber As Long = 1679
Dim negativeNumber As Long = -3045
Dim specifiers() As String = {"G", "C", "D8", "E2", "F", "N", "P", "X8"}

For Each specifier As String In specifiers
   For Each culture As CultureInfo In Cultures
      ' Display values with "G" format specifier.
      Console.WriteLine("{0} format using {1} culture: {2, 16} {3, 16}", _
                        specifier, culture.Name, _
                        positiveNumber.ToString(specifier, culture), _
                        negativeNumber.ToString(specifier, culture))

   Next
   Console.WriteLine()
Next
' The example displays the following output to the console:
'    G format using en-US culture:             1679            -3045
'    G format using fr-FR culture:             1679            -3045
'    G format using es-ES culture:             1679            -3045
'
'    C format using en-US culture:        $1,679.00      ($3,045.00)
'    C format using fr-FR culture:       1 679,00 ?      -3 045,00 ?
'    C format using es-ES culture:       1.679,00 ?      -3.045,00 ?
'
'    D8 format using en-US culture:         00001679        -00003045
'    D8 format using fr-FR culture:         00001679        -00003045
'    D8 format using es-ES culture:         00001679        -00003045
'
'    E2 format using en-US culture:        1.68E+003       -3.05E+003
'    E2 format using fr-FR culture:        1,68E+003       -3,05E+003
'    E2 format using es-ES culture:        1,68E+003       -3,05E+003
'
'    F format using en-US culture:          1679.00         -3045.00
'    F format using fr-FR culture:          1679,00         -3045,00
'    F format using es-ES culture:          1679,00         -3045,00
'
'    N format using en-US culture:         1,679.00        -3,045.00
'    N format using fr-FR culture:         1 679,00        -3 045,00
'    N format using es-ES culture:         1.679,00        -3.045,00
'
'    P format using en-US culture:     167,900.00 %    -304,500.00 %
'    P format using fr-FR culture:     167 900,00 %    -304 500,00 %
'    P format using es-ES culture:     167.900,00 %    -304.500,00 %
'
'    X8 format using en-US culture:         0000068F         FFFFF41B
'    X8 format using fr-FR culture:         0000068F         FFFFF41B
'    X8 format using es-ES culture:         0000068F         FFFFF41B

// Define cultures whose formatting conventions are to be used.
CultureInfo[] cultures = {CultureInfo.CreateSpecificCulture("en-US"),
                          CultureInfo.CreateSpecificCulture("fr-FR"),
                          CultureInfo.CreateSpecificCulture("es-ES") };
long positiveNumber = 1679;
long negativeNumber = -3045;
string[] specifiers = {"G", "C", "D8", "E2", "F", "N", "P", "X8"};

foreach (string specifier in specifiers)
{
   foreach (CultureInfo culture in cultures)
   {
      // Display values with "G" format specifier.
      Console.WriteLine("{0} format using {1} culture: {2, 16} {3, 16}",
                        specifier, culture.Name,
                        positiveNumber.ToString(specifier, culture),
                        negativeNumber.ToString(specifier, culture));
   }
   Console.WriteLine();
}
// The example displays the following output to the console:
//    G format using en-US culture:             1679            -3045
//    G format using fr-FR culture:             1679            -3045
//    G format using es-ES culture:             1679            -3045
//
//    C format using en-US culture:        $1,679.00      ($3,045.00)
//    C format using fr-FR culture:       1 679,00 ?      -3 045,00 ?
//    C format using es-ES culture:       1.679,00 ?      -3.045,00 ?
//
//    D8 format using en-US culture:         00001679        -00003045
//    D8 format using fr-FR culture:         00001679        -00003045
//    D8 format using es-ES culture:         00001679        -00003045
//
//    E2 format using en-US culture:        1.68E+003       -3.05E+003
//    E2 format using fr-FR culture:        1,68E+003       -3,05E+003
//    E2 format using es-ES culture:        1,68E+003       -3,05E+003
//
//    F format using en-US culture:          1679.00         -3045.00
//    F format using fr-FR culture:          1679,00         -3045,00
//    F format using es-ES culture:          1679,00         -3045,00
//
//    N format using en-US culture:         1,679.00        -3,045.00
//    N format using fr-FR culture:         1 679,00        -3 045,00
//    N format using es-ES culture:         1.679,00        -3.045,00
//
//    P format using en-US culture:     167,900.00 %    -304,500.00 %
//    P format using fr-FR culture:     167 900,00 %    -304 500,00 %
//    P format using es-ES culture:     167.900,00 %    -304.500,00 %
//
//    X8 format using en-US culture:         0000068F         FFFFF41B
//    X8 format using fr-FR culture:         0000068F         FFFFF41B
//    X8 format using es-ES culture:         0000068F         FFFFF41B

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Int64 结构
Int64 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
标准数字格式字符串
自定义数字格式字符串
如何：用前导零填充数字


Int64 ..::.TryParse 方法

Int64
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Int64 结构

将数字的字符串表示形式转换为它的等效 64 位有符号整数。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效 64 位有符号整数。一个指示转换是否成功的返回值。

名称 说明
页首

参考

Int64 结构
Int64 成员
System 命名空间
Parse


Int64 ..::.TryParse 方法 (String, Int64%)

Int64
.
.
::
.
TryParse 方法 (String, Int64%)
Int64 结构

将数字的字符串表示形式转换为它的等效 64 位有符号整数。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效 64 位有符号整数。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As Long _
) As Boolean
public static bool TryParse(
    string s,
    out long result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] long long% result
)
static member TryParse :
        s:string *
        result:int64 byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。
result
类型： System Int64 %
当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。

TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 方法。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见 CurrentInfo。

此 TryParse 方法重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 重载。 此 TryParse 方法重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 Int32..::.TryParse(String, NumberStyles, IFormatProvider, Int32%) 重载。

下面的示例将 Int32..::.TryParse(String, Int32%) 方法与一些不同的字符串值一起调用。

Module StringParsing
   Public Sub Main()
      TryToParse(Nothing)
      TryToParse("160519")
      TryToParse("9432.0")
      TryToParse("16,667")
      TryToParse("   -322   ")
      TryToParse("+4302")
      TryToParse("(100)")
      TryToParse("01FA")
   End Sub

   Private Sub TryToParse(value As String)
      Dim number As Long
      Dim result As Boolean = Int64.TryParse(value, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Else
         If value Is Nothing Then value = ""
         Console.WriteLine("Attempted conversion of '{0}' failed.", value)
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Attempted conversion of '' failed.
'       Converted '160519' to 160519.
'       Attempted conversion of '9432.0' failed.
'       Attempted conversion of '16,667' failed.
'       Converted '   -322   ' to -322.
'       Converted '+4302' to 4302.
'       Attempted conversion of '(100)' failed.
'       Attempted conversion of '01FA' failed.

using System;

public class StringParsing
{
   public static void Main()
   {
      TryToParse(null);
      TryToParse("160519");
      TryToParse("9432.0");
      TryToParse("16,667");
      TryToParse("   -322   ");
      TryToParse("+4302");
      TryToParse("(100);");
      TryToParse("01FA");
   }

   private static void TryToParse(string value)
   {
      int number;
      bool result = Int32.TryParse(value, out number);
      if (result)
      {
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      else
      {
         if (value == null) value = "";
         Console.WriteLine("Attempted conversion of '{0}' failed.", value);
      }
   }
}
// The example displays the following output to the console:
//       Attempted conversion of '' failed.
//       Converted '160519' to 160519.
//       Attempted conversion of '9432.0' failed.
//       Attempted conversion of '16,667' failed.
//       Converted '   -322   ' to -322.
//       Converted '+4302' to 4302.
//       Attempted conversion of '(100);' failed.
//       Attempted conversion of '01FA' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Int64 结构
Int64 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


Int64 ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, Int64%)

Int64
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, Int64%)
Int64 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 64 位有符号整数。一个指示转换是否成功的返回值。 将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 64 位有符号整数。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As Long _
) As Boolean
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out long result
)
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] long long% result
)
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:int64 byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。 包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
result
类型： System Int64 %
当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。

TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse 方法类似于 Parse 方法，不同之处在于 TryParse 方法在转换失败时不引发异常。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][e[sign]exponential_digits][ws]

或者，如果 style 参数包含 NumberStyles..::.AllowHexSpecifier：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 或 NumberStyles..::.AllowTrailingSign 标志，则正负符号可以出现在 s 中。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 或 NumberStyles..::.AllowTrailingSign 标志，则正负符号可以出现在 s 中。
digits fractional_digits exponential_digits | 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的千位分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。
e | “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | 小数点 (.) 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。 小数点 (.) 和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。
NumberStyles AllowExponent | s 参数也可以使用指数表示法。s 参数必须表示一个 Int64 数据类型范围内的整数，并且不能带非零小数部分。 s 参数也可以使用指数表示法。s 参数必须表示一个 Int64 数据类型范围内的整数，并且不能带非零小数部分。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | 符号可出现在 digits 之前。
NumberStyles AllowTrailingSign | 符号可出现在 digits 之后。
NumberStyles AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
NumberStyles AllowThousands | 千位分隔符 (,) 元素。
NumberStyles AllowCurrencySymbol | $ 元素。
NumberStyles Currency | 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。
NumberStyles Float | 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.) 符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.) 符号。s 参数也可以使用指数表示法。
NumberStyles Number | ws、符号、千位分隔符 (,) 以及小数点 (.)元素。
NumberStyles Any | 所有样式（除 s 之外）都不能表示十六进制数字。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 NumberStyles..::.HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 NumberStyles..::.HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 NumberStyles..::.HexNumber。）

provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。 provider 参数是 IFormatProvider 的实现，例如 CultureInfo 对象或 NumberFormatInfo 对象，其 GetFormat 方法将返回 NumberFormatInfo 对象。NumberFormatInfo 对象提供有关 s 格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例将 TryParse(String, NumberStyles, IFormatProvider, Int64%) 方法与许多不同的字符串和 NumberStyles 值一起调用。

Imports System.Globalization

Module StringParsing
   Public Sub Main()
      Dim numericString As String
      Dim styles As NumberStyles

      numericString = "106779"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)

      numericString = "-30677"
      styles = NumberStyles.None
      CallTryParse(numericString, styles)

      styles = NumberStyles.AllowLeadingSign
      CallTryParse(numericString, styles)

      numericString = "301677-"
      CallTryParse(numericString, styles)

      styles = styles Or NumberStyles.AllowTrailingSign
      CallTryParse(numericString, styles)

      numericString = "$10634"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)

      styles = NumberStyles.Integer Or NumberStyles.AllowCurrencySymbol
      CallTryParse(numericString, styles)

      numericString = "10345.00"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "10345.72"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "22,593"
      styles = NumberStyles.Integer Or NumberStyles.AllowThousands
      CallTryParse(numericString, styles)

      numericString = "12E-01"
      styles = NumberStyles.Integer Or NumberStyles.AllowExponent
      CallTryParse(numericString, styles)

      numericString = "12E03"
      CallTryParse(numericString, styles)

      numericString = "80c1"
      CallTryParse(numericString, NumberStyles.HexNumber)

      numericString = "0x80C1"
      CallTryParse(numericString, NumberStyles.HexNumber)
   End Sub

   Private Sub CallTryParse(stringToConvert As String, styles AS NumberStyles)
      Dim number As Long
      Dim provider As CultureInfo

      ' If currency symbol is allowed, use en-US culture.
      If CBool(styles And NumberStyles.AllowCurrencySymbol) Then
         provider = CultureInfo.CurrentCulture
      Else
         provider = New CultureInfo("en-US")
      End If

      Dim result As Boolean = Int64.TryParse(stringToConvert, styles, _
                                             provider, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
      Else
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           Convert.ToString(stringToConvert))
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '106779' to 106779.
'       Attempted conversion of '-30677' failed.
'       Converted '-30677' to -30677.
'       Attempted conversion of '301677-' failed.
'       Converted '301677-' to -301677.
'       Attempted conversion of '$10634' failed.
'       Converted '$10634' to 10634.
'       Converted '10345.00' to 10345.
'       Attempted conversion of '10345.72' failed.
'       Converted '22,593' to 22593.
'       Attempted conversion of '12E-01' failed.
'       Converted '12E03' to 12000.
'       Converted '80c1' to 32961.
'       Attempted conversion of '0x80C1' failed.

using System;
using System.Globalization;

public class StringParsing
{
   public static void Main()
   {
      string numericString;
      NumberStyles styles;

      numericString = "106779";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      numericString = "-30677";
      styles = NumberStyles.None;
      CallTryParse(numericString, styles);

      styles = NumberStyles.AllowLeadingSign;
      CallTryParse(numericString, styles);

      numericString = "301677-";
      CallTryParse(numericString, styles);

      styles = styles | NumberStyles.AllowTrailingSign;
      CallTryParse(numericString, styles);

      numericString = "$10634";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      styles = NumberStyles.Integer | NumberStyles.AllowCurrencySymbol;
      CallTryParse(numericString, styles);

      numericString = "10345.00";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "10345.72";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "22,593";
      styles = NumberStyles.Integer | NumberStyles.AllowThousands;
      CallTryParse(numericString, styles);

      numericString = "12E-01";
      styles = NumberStyles.Integer | NumberStyles.AllowExponent;
      CallTryParse(numericString, styles);

      numericString = "12E03";
      CallTryParse(numericString, styles);

      numericString = "80c1";
      CallTryParse(numericString, NumberStyles.HexNumber);

      numericString = "0x80C1";
      CallTryParse(numericString, NumberStyles.HexNumber);
   }

   private static void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      int number;
      CultureInfo provider;

      // If currency symbol is allowed, use en-US culture.
      if ((styles & NumberStyles.AllowCurrencySymbol) > 0)
         provider = new CultureInfo("en-US");
      else
         provider = CultureInfo.InvariantCulture;

      bool result = Int32.TryParse(stringToConvert, styles,
                                   provider, out number);
      if (result)
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
      else
         Console.WriteLine("Attempted conversion of '{0}' failed.",
                           Convert.ToString(stringToConvert));
   }
}
// The example displays the following output to the console:
//       Converted '106779' to 106779.
//       Attempted conversion of '-30677' failed.
//       Converted '-30677' to -30677.
//       Attempted conversion of '301677-' failed.
//       Converted '301677-' to -301677.
//       Attempted conversion of '$10634' failed.
//       Converted '$10634' to 10634.
//       Converted '10345.00' to 10345.
//       Attempted conversion of '10345.72' failed.
//       Converted '22,593' to 22593.
//       Attempted conversion of '12E-01' failed.
//       Converted '12E03' to 12000.
//       Converted '80c1' to 32961.
//       Attempted conversion of '0x80C1' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Int64 结构
Int64 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


IntPtr 结构

IntPtr 结构
成员

用于表示指针或句柄的平台特定类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure IntPtr _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct IntPtr : ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class IntPtr : ISerializable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type IntPtr =
    struct
        interface ISerializable
    end

IntPtr 类型被设计成整数，其大小适用于特定平台。即是说，此类型的实例在 32 位硬件和操作系统中将是 32 位，在 64 位硬件和操作系统上将是 64 位。 IntPtr 类型被设计成整数，其大小适用于特定平台。即是说，此类型的实例在 32 位硬件和操作系统中将是 32 位，在 64 位硬件和操作系统上将是 64 位。

IntPtr 类型可以由支持指针的语言使用，并可作为在支持与不支持指针的语言间引用数据的一种通用方式。

IntPtr 对象也可用于保持句柄。例如，IntPtr 的实例广泛地用在 System.IO..::.FileStream 类中来保持文件句柄。 IntPtr 对象也可用于保持句柄。例如，IntPtr 的实例广泛地用在 System.IO..::.FileStream 类中来保持文件句柄。

IntPtr 类型符合 CLS，而 UIntPtr 类型却不符合。只有 IntPtr 类型可用在公共语言运行时中。UIntPtr 类型大多数是提供来维护与 IntPtr 类型之间的体系结构上的对称性。 IntPtr 类型符合 CLS，而 UIntPtr 类型却不符合。只有 IntPtr 类型可用在公共语言运行时中。UIntPtr 类型大多数是提供来维护与 IntPtr 类型之间的体系结构上的对称性。 IntPtr 类型符合 CLS，而 UIntPtr 类型却不符合。只有 IntPtr 类型可用在公共语言运行时中。UIntPtr 类型大多数是提供来维护与 IntPtr 类型之间的体系结构上的对称性。

此类型实现 ISerializable 接口。

此类型是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 成员
System 命名空间
UIntPtr


IntPtr 成员

IntPtr 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntPtr 结构

用于表示指针或句柄的平台特定类型。

IntPtr 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

IntPtr 结构
System 命名空间


IntPtr 构造函数

IntPtr 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntPtr 结构

初始化 IntPtr 的新实例。

名称 说明
页首

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr 构造函数 (Int32)

IntPtr 构造函数 (Int32)
IntPtr 结构

使用指定的 32 位指针或句柄初始化 IntPtr 的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As Integer _
)
public IntPtr(
    int value
)
public:
IntPtr(
    int value
)
new :
        value:int -> IntPtr

参数

value
类型： System Int32
32 位有符号的整数中包含的指针或句柄。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
IntPtr 重载
System 命名空间


IntPtr 构造函数 (Int64)

IntPtr 构造函数 (Int64)
IntPtr 结构

使用指定的 64 位指针初始化 IntPtr 的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As Long _
)
public IntPtr(
    long value
)
public:
IntPtr(
    long long value
)
new :
        value:int64 -> IntPtr

参数

value
类型： System Int64
64 位有符号的整数中包含的指针或句柄。
异常 | 条件
OverflowException | 在 32 位的平台上，value 太大或太小，无法表示为 IntPtr。

只要 value 的值要求的位数多于当前平台所支持的位数，就会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
IntPtr 重载
System 命名空间


IntPtr 构造函数 (Void*)

IntPtr 构造函数 (Void*)
IntPtr 结构

使用指向未指定类型的指定指针初始化 IntPtr 的新实例。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用或返回不安全类型的 API。
[CLSCompliantAttribute(false)]
public IntPtr(
    void* value
)
[CLSCompliantAttribute(false)]
public:
IntPtr(
    void* value
)
[<CLSCompliantAttribute(false)>]
new :
        value:nativeptr<unit> -> IntPtr

参数

value
类型： System Void*
指向未指定类型的指针。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
IntPtr 重载
System 命名空间
Void


IntPtr 字段

IntPtr 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntPtr 结构

IntPtr 类型公开以下成员。

名称 说明
页首

参考

IntPtr 结构
System 命名空间


IntPtr ..::.Zero 字段

IntPtr
.
.
::
.
Zero 字段
IntPtr 结构

一个只读字段，代表已初始化为零的指针或句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Zero As IntPtr
public static readonly IntPtr Zero
public:
static initonly IntPtr Zero
static val Zero: IntPtr

此字段的值并不等效于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。使用该字段可有效地确定 IntPtr 的实例是否已被设置为非零值。 此字段的值并不等效于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。使用该字段可有效地确定 IntPtr 的实例是否已被设置为非零值。

例如，假设变量 ip 是 IntPtr 的实例。通过将它与某个构造函数返回的值相比较，就可确定它是否已被设置，例如：“if ip != new IntPtr(0)...”。但是，通过调用构造函数来获得未被初始化的指针效率很低。代码最好编写为“if ip != IntPtr.Zero...”或“if !IntPtr.Zero.Equals(ip)...”。 例如，假设变量 ip 是 IntPtr 的实例。通过将它与某个构造函数返回的值相比较，就可确定它是否已被设置，例如：“if ip != new IntPtr(0)...”。但是，通过调用构造函数来获得未被初始化的指针效率很低。代码最好编写为“if ip != IntPtr.Zero...”或“if !IntPtr.Zero.Equals(ip)...”。 例如，假设变量 ip 是 IntPtr 的实例。通过将它与某个构造函数返回的值相比较，就可确定它是否已被设置，例如：“if ip != new IntPtr(0)...”。但是，通过调用构造函数来获得未被初始化的指针效率很低。代码最好编写为“if ip != IntPtr.Zero...”或“if !IntPtr.Zero.Equals(ip)...”。 例如，假设变量 ip 是 IntPtr 的实例。通过将它与某个构造函数返回的值相比较，就可确定它是否已被设置，例如：“if ip != new IntPtr(0)...”。但是，通过调用构造函数来获得未被初始化的指针效率很低。代码最好编写为“if ip != IntPtr.Zero...”或“if !IntPtr.Zero.Equals(ip)...”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr 方法

IntPtr 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntPtr 结构

IntPtr 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IntPtr 结构
System 命名空间


IntPtr ..::.Add 方法

IntPtr
.
.
::
.
Add 方法
IntPtr 结构

为指针值增加偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Add ( _
    pointer As IntPtr, _
    offset As Integer _
) As IntPtr
public static IntPtr Add(
    IntPtr pointer,
    int offset
)
public:
static IntPtr Add(
    IntPtr pointer,
    int offset
)
static member Add :
        pointer:IntPtr *
        offset:int -> IntPtr

参数

pointer
类型： System IntPtr
要为其增加偏移量的指针。
offset
类型： System Int32
要增加的偏移量。

返回值

类型： System IntPtr
一个新指针，它反映了为 pointer 增加 offset。

如果结果太大而无法表示为指定平台上的指针，Add 方法不会引发异常。而是在未检查的上下文中执行加法运算。 如果结果太大而无法表示为指定平台上的指针，Add 方法不会引发异常。而是在未检查的上下文中执行加法运算。

不支持运算符重载或自定义运算符的语言可以使用此方法为指针的值添加偏移量。

下面的示例实例化一个指向十元素数组开头的 IntPtr 对象，然后调用 Add 方法来循环访问数组中的元素。

Module Example
   Public Sub Main()
      Dim arr() As Integer = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
      Dim ptr As New IntPtr(arr(0))
      For ctr As Integer= 0 To arr.Length - 1
         Dim newPtr As IntPtr = IntPtr.Add(ptr, ctr)
         Console.Write("{0}   ", newPtr)
      Next
   End Sub
End Module
' The example displays the following output:
'       1   2   3   4   5   6   7   8   9   10

using System;

public class Example
{
   public static void Main()
   {
      int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
      IntPtr ptr = new IntPtr(arr[0]);
      for (int ctr = 0; ctr < arr.Length; ctr++)
      {
         IntPtr newPtr = IntPtr.Add(ptr, ctr);
         Console.Write("{0}   ", newPtr);
      }
   }
}
// The example displays the following output:
//       1   2   3   4   5   6   7   8   9   10

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IntPtr 结构
IntPtr 成员
System 命名空间
Addition


IntPtr ..::.Equals 方法

IntPtr
.
.
::
.
Equals 方法
IntPtr 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的对象或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 obj 是 IntPtr 的实例并且等于此实例的值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ..::.GetHashCode 方法

IntPtr
.
.
::
.
GetHashCode 方法
IntPtr 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ..::.ISerializable ..::.GetObjectData 方法

IntPtr
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
IntPtr 结构

使用序列化当前 IntPtr 对象所需的数据来填充 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
private:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
private override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要填充数据的 SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
此序列化的目标。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 此序列化的目标。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法使用当前 IntPtr 对象的值来填充 info 参数。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ..::.Subtract 方法

IntPtr
.
.
::
.
Subtract 方法
IntPtr 结构

从指针值中减去偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Subtract ( _
    pointer As IntPtr, _
    offset As Integer _
) As IntPtr
public static IntPtr Subtract(
    IntPtr pointer,
    int offset
)
public:
static IntPtr Subtract(
    IntPtr pointer,
    int offset
)
static member Subtract :
        pointer:IntPtr *
        offset:int -> IntPtr

参数

pointer
类型： System IntPtr
要从中减去偏移量的指针。
offset
类型： System Int32
要减去的偏移量。

返回值

类型： System IntPtr
一个新指针，它反映了从 pointer 减去 offset。

如果结果太小而无法表示为指定平台上的指针，Subtract 方法不会引发异常。而是在未检查的上下文中执行减法运算。 如果结果太小而无法表示为指定平台上的指针，Subtract 方法不会引发异常。而是在未检查的上下文中执行减法运算。

不支持运算符重载或自定义运算符的语言可以使用此方法从指针值中减去偏移量。

下面的示例实例化一个指向十元素数组末尾的 IntPtr 对象，然后调用 Subtract 方法按反序循环访问数组中的元素。

Module Example
   Public Sub Main()
      Dim arr() As Integer = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
      Dim ptr As IntPtr = CType(arr(arr.GetUpperBound(0)), IntPtr)
      For ctr As Integer= 0 To arr.GetUpperBound(0)
         Dim newPtr As IntPtr = IntPtr.Subtract(ptr, ctr)
         Console.Write("{0}   ", newPtr)
      Next
   End Sub
End Module
' The example displays the following output:
'       10   9   8   7   6   5   4   3   2   1

using System;

public class Example
{
   public static void Main()
   {
      int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
      IntPtr ptr = (IntPtr) arr[arr.GetUpperBound(0)];
      for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
      {
         IntPtr newPtr = IntPtr.Subtract(ptr, ctr);
         Console.Write("{0}   ", newPtr);
      }
   }
}
// The example displays the following output:
//       10   9   8   7   6   5   4   3   2   1

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IntPtr 结构
IntPtr 成员
System 命名空间
Subtraction


IntPtr ..::.ToInt32 方法

IntPtr
.
.
::
.
ToInt32 方法
IntPtr 结构

将此实例的值转换为 32 位有符号的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToInt32 As Integer
public int ToInt32()
public:
int ToInt32()
member ToInt32 : unit -> int

返回值

类型： System Int32
与此实例的值相等的 32 位有符号整数。
异常 | 条件
OverflowException | 在 64 位平台上，此实例的值太大或太小，无法表示为一个 32 位有符号的整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ..::.ToInt64 方法

IntPtr
.
.
::
.
ToInt64 方法
IntPtr 结构

将此实例的值转换为 64 位有符号的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToInt64 As Long
public long ToInt64()
public:
long long ToInt64()
member ToInt64 : unit -> int64

返回值

类型： System Int64
与此实例的值相等的 64 位有符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ..::.ToPointer 方法

IntPtr
.
.
::
.
ToPointer 方法
IntPtr 结构

将此实例的值转换为指向未指定的类型的指针。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Function ToPointer As Void*
[CLSCompliantAttribute(false)]
public void* ToPointer()
[CLSCompliantAttribute(false)]
public:
void* ToPointer()
[<CLSCompliantAttribute(false)>]
member ToPointer : unit -> nativeptr<unit>

返回值

类型： System Void*
指向 Void 的指针，即是说，该指针所指向的内存包含有未指定的类型的数据。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ..::.ToString 方法

IntPtr
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntPtr 结构

将当前 IntPtr 对象的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ..::.ToString 方法

IntPtr
.
.
::
.
ToString 方法
IntPtr 结构

将当前 IntPtr 对象的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示。

如果此实例的 Size 属性的值为 4，则此方法等效于 Int32..::.ToString；否则，此方法等效于 Int64..::.ToString。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
ToString 重载
System 命名空间


IntPtr ..::.ToString 方法 (String)

IntPtr
.
.
::
.
ToString 方法 (String)
IntPtr 结构

将当前 IntPtr 对象的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
格式规范，控制当前 IntPtr 对象的转换方式。

返回值

类型： System String
当前 IntPtr 对象的值的字符串表示形式。

如果 format 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则返回值由通用格式说明符 ("G") 进行格式设置。有关数值格式说明符的更多信息，请参见标准数字格式字符串主题。 如果 format 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则返回值由通用格式说明符 ("G") 进行格式设置。有关数值格式说明符的更多信息，请参见标准数字格式字符串主题。

使用固定区域性设置返回值的格式。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

IntPtr 结构
IntPtr 成员
ToString 重载
System 命名空间
InvariantCulture

其他资源

标准数字格式字符串
自定义数字格式字符串
格式化类型


IntPtr 运算符和类型转换

IntPtr 运算符和类型转换
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntPtr 结构

IntPtr 类型公开以下成员。

名称 说明
页首

参考

IntPtr 结构
System 命名空间


IntPtr ..::.Addition 运算符

IntPtr
.
.
::
.
Addition 运算符
IntPtr 结构

为指针值增加偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator + ( _
    pointer As IntPtr, _
    offset As Integer _
) As IntPtr
public static IntPtr operator +(
    IntPtr pointer,
    int offset
)
public:
static IntPtr operator +(
    IntPtr pointer,
    int offset
)
static let inline (+)
        pointer:IntPtr *
        offset:int  : IntPtr

参数

pointer
类型： System IntPtr
要为其增加偏移量的指针。
offset
类型： System Int32
要增加的偏移量。

返回值

类型： System IntPtr
一个新指针，它反映了为 pointer 增加 offset。

Addition 方法定义了 IntPtr 对象的加法运算。它启用了诸如以下内容的代码。 Addition 方法定义了 IntPtr 对象的加法运算。它启用了诸如以下内容的代码。

Dim arr() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
Dim ptr = New IntPtr(arr(0))
For ctr As Integer = 0 To arr.Length - 1
   Dim newPtr As IntPtr = ptr + ctr
   Console.WriteLine(newPtr)
Next

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
IntPtr ptr = (IntPtr) arr[0];
for (int ctr = 0; ctr < arr.Length; ctr++)
{
   IntPtr newPtr = ptr + ctr;
   Console.WriteLine(newPtr);
}

不支持自定义运算符的语言可以改为调用 Add 方法。

如果结果太大而无法表示为指定平台上的指针，加法运算不会引发异常。而是在未检查的上下文中执行。 如果结果太大而无法表示为指定平台上的指针，加法运算不会引发异常。而是在未检查的上下文中执行。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IntPtr 结构
IntPtr 成员
System 命名空间
Add


IntPtr ..::.Equality 运算符

IntPtr
.
.
::
.
Equality 运算符
IntPtr 结构

确定 IntPtr 的两个指定实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    value1 As IntPtr, _
    value2 As IntPtr _
) As Boolean
public static bool operator ==(
    IntPtr value1,
    IntPtr value2
)
public:
static bool operator ==(
    IntPtr value1,
    IntPtr value2
)
static let inline (=)
        value1:IntPtr *
        value2:IntPtr  : bool

参数

value1
类型： System IntPtr
要比较的第一个指针或句柄。
value2
类型： System IntPtr
要比较的第二个指针或句柄。

返回值

类型： System Boolean
如果 value1 等于 value2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ExplicitNarrowingExplicitExplicit 转换运算符

IntPtr
Explicit
Narrowing
Explicit
Explicit
转换运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntPtr 结构

将指定的数据类型转换为 IntPtr 值，或将 IntPtr 值转换为指定的数据类型。

名称 说明
页首

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ExplicitNarrowingExplicitExplicit 转换 (Int32 to IntPtr)

IntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (Int32 to IntPtr)
IntPtr 结构

将 32 位有符号的整数值转换成 IntPtr。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Integer _
) As IntPtr
public static explicit operator IntPtr (
    int value
)
static explicit operator IntPtr (
    int value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Int32
32 位有符号整数。

返回值

类型： System IntPtr
初始化为 value 的 IntPtr 新实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
重载
System 命名空间
IntPtr


IntPtr ExplicitNarrowingExplicitExplicit 转换 (Int64 to IntPtr)

IntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (Int64 to IntPtr)
IntPtr 结构

将 64 位有符号的整数值转换成 IntPtr。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Long _
) As IntPtr
public static explicit operator IntPtr (
    long value
)
static explicit operator IntPtr (
    long long value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Int64
64 位有符号整数。

返回值

类型： System IntPtr
初始化为 value 的 IntPtr 新实例。
异常 | 条件
OverflowException | 在 32 位的平台上，value 太大，无法表示为一个 IntPtr。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
重载
System 命名空间
IntPtr


IntPtr ExplicitNarrowingExplicitExplicit 转换 (IntPtr to Void*)

IntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (IntPtr to Void*)
IntPtr 结构

将指定的 IntPtr 的值转换为指向未指定类型的指针。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As IntPtr _
) As Void*
public static explicit operator void* (
    IntPtr value
)
static explicit operator void* (
    IntPtr value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System IntPtr
要转换的指针或句柄。

返回值

类型： System Void*
value 的内容。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
重载
System 命名空间
ToPointer


IntPtr ExplicitNarrowingExplicitExplicit 转换 (IntPtr to Int32)

IntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (IntPtr to Int32)
IntPtr 结构

将指定的 IntPtr 的值转换为 32 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As IntPtr _
) As Integer
public static explicit operator int (
    IntPtr value
)
static explicit operator int (
    IntPtr value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System IntPtr
要转换的指针或句柄。

返回值

类型： System Int32
value 的内容。
异常 | 条件
OverflowException | 在 64 位平台上，value 的值太大，无法表示为一个 32 位有符号整数。

只要 value 的值要求的位数多于当前平台所支持的位数，就会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
重载
System 命名空间
ToInt32


IntPtr ExplicitNarrowingExplicitExplicit 转换 (IntPtr to Int64)

IntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (IntPtr to Int64)
IntPtr 结构

将指定的 IntPtr 的值转换为 64 位有符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As IntPtr _
) As Long
public static explicit operator long (
    IntPtr value
)
static explicit operator long long (
    IntPtr value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System IntPtr
要转换的指针或句柄。

返回值

类型： System Int64
value 的内容。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
重载
System 命名空间
ToInt64


IntPtr ExplicitNarrowingExplicitExplicit 转换 (Void* to IntPtr)

IntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (Void* to IntPtr)
IntPtr 结构

将指向未指定类型的指定指针转换为 IntPtr。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Void* _
) As IntPtr
public static explicit operator IntPtr (
    void* value
)
static explicit operator IntPtr (
    void* value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Void*
指向未指定类型的指针。

返回值

类型： System IntPtr
IntPtr 的新实例，其初始化为 value。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
重载
System 命名空间
IntPtr


IntPtr ..::.Inequality 运算符

IntPtr
.
.
::
.
Inequality 运算符
IntPtr 结构

确定 IntPtr 的两个指定实例是否不等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    value1 As IntPtr, _
    value2 As IntPtr _
) As Boolean
public static bool operator !=(
    IntPtr value1,
    IntPtr value2
)
public:
static bool operator !=(
    IntPtr value1,
    IntPtr value2
)
static let inline (<>)
        value1:IntPtr *
        value2:IntPtr  : bool

参数

value1
类型： System IntPtr
要比较的第一个指针或句柄。
value2
类型： System IntPtr
要比较的第二个指针或句柄。

返回值

类型： System Boolean
如果 value1 不等于 value2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
System 命名空间


IntPtr ..::.Subtraction 运算符

IntPtr
.
.
::
.
Subtraction 运算符
IntPtr 结构

从指针值中减去偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    pointer As IntPtr, _
    offset As Integer _
) As IntPtr
public static IntPtr operator -(
    IntPtr pointer,
    int offset
)
public:
static IntPtr operator -(
    IntPtr pointer,
    int offset
)
static let inline (-)
        pointer:IntPtr *
        offset:int  : IntPtr

参数

pointer
类型： System IntPtr
要从中减去偏移量的指针。
offset
类型： System Int32
要减去的偏移量。

返回值

类型： System IntPtr
一个新指针，它反映了从 pointer 减去 offset。

Subtraction 方法为 IntPtr 对象定义了减法运算。它启用了诸如以下内容的代码。 Subtraction 方法为 IntPtr 对象定义了减法运算。它启用了诸如以下内容的代码。

Dim arr() As Integer = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim ptr As IntPtr = CType(arr(arr.GetUpperBound(0)), IntPtr)
For ctr As Integer= 0 To arr.GetUpperBound(0)
   Dim newPtr As IntPtr = IntPtr.Subtract(ptr, ctr)
   Console.Write("{0}   ", newPtr)
Next

int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
IntPtr ptr = (IntPtr) arr[arr.GetUpperBound(0)];
for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
{
   IntPtr newPtr = ptr - ctr;
   Console.Write("{0}   ", newPtr);
}

不支持自定义运算符的语言可以改为调用 Subtract 方法。

如果结果太小而无法表示为指定平台上的指针，减法运算不会引发异常。而是在未检查的上下文中执行。 如果结果太小而无法表示为指定平台上的指针，减法运算不会引发异常。而是在未检查的上下文中执行。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IntPtr 结构
IntPtr 成员
System 命名空间
Subtract


IntPtr 属性

IntPtr 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IntPtr 结构

IntPtr 类型公开以下成员。

名称 说明
页首

参考

IntPtr 结构
System 命名空间


IntPtr ..::.Size 属性

IntPtr
.
.
::
.
Size 属性
IntPtr 结构

获得此实例的大小。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Size As Integer
    Get
public static int Size { get; }
public:
static property int Size {
    int get ();
}
static member Size : int

属性值

类型： System Int32
此平台上的指针或句柄的大小，按字节计。此属性的值在 32 位平台上为 4，在 64 位平台上为 8。 此平台上的指针或句柄的大小，按字节计。此属性的值在 32 位平台上为 4，在 64 位平台上为 8。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IntPtr 结构
IntPtr 成员
System 命名空间


InvalidCastException 类

InvalidCastException 类
成员

因无效类型转换或显式转换引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class InvalidCastException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class InvalidCastException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class InvalidCastException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type InvalidCastException =
    class
        inherit SystemException
    end

如果发生如下情况，则引发 InvalidCastException：

  • 对于从 Single 或 Double 到 Decimal 的转换，源值为无穷大、非数字 (NaN) 或太大以至无法表示为目标类型。

  • 显式引用转换期间发生失败。

为使显式引用转换成功进行，源值必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者源参数引用的对象类型必须可以通过隐式引用转换来转换为目标类型。

有关系统所支持的转换的信息，请参见 Convert 类。有关当目标类型可以存储源类型值，但其大小不足以存储特定源值时所发生的错误，请参见 OverflowException 异常。 有关系统所支持的转换的信息，请参见 Convert 类。有关当目标类型可以存储源类型值，但其大小不足以存储特定源值时所发生的错误，请参见 OverflowException 异常。

下面的 Microsoft 中间语言 (MSIL) 指令引发 InvalidCastException

  • castclass

  • refanyval

  • unbox

InvalidCastException 使用值为 0x80004002 的 HRESULT COR_E_INVALIDCAST。

有关 InvalidCastException 实例的初始属性值列表，请参见 InvalidCastException 构造函数。

System System..::.InvalidCastExceptionInvalidCastException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidCastException 成员
System 命名空间
Exception

其他资源

处理和引发异常


InvalidCastException 成员

InvalidCastException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCastException 类

因无效类型转换或显式转换引发的异常。

InvalidCastException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InvalidCastException 类
System 命名空间


InvalidCastException 构造函数

InvalidCastException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCastException 类

初始化 InvalidCastException 类的新实例。

名称 说明
页首

参考

InvalidCastException 类
InvalidCastException 成员
System 命名空间


InvalidCastException 构造函数

InvalidCastException 构造函数
InvalidCastException 类

初始化 InvalidCastException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public InvalidCastException()
public:
InvalidCastException()
new : unit -> InvalidCastException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“无法从源类型转换为目标类型。”。此消息将考虑当前系统区域性。

下表显示 InvalidCastException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidCastException 类
InvalidCastException 成员
InvalidCastException 重载
System 命名空间


InvalidCastException 构造函数 (String)

InvalidCastException 构造函数 (String)
InvalidCastException 类

使用指定错误信息初始化 InvalidCastException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public InvalidCastException(
    string message
)
public:
InvalidCastException(
    String^ message
)
new :
        message:string -> InvalidCastException

参数

message
类型： System String
描述错误的消息。

此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 InvalidCastException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidCastException 类
InvalidCastException 成员
InvalidCastException 重载
System 命名空间


InvalidCastException 构造函数 (SerializationInfo, StreamingContext)

InvalidCastException 构造函数 (SerializationInfo, StreamingContext)
InvalidCastException 类

用序列化数据初始化 InvalidCastException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected InvalidCastException(
    SerializationInfo info,
    StreamingContext context
)
protected:
InvalidCastException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> InvalidCastException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

InvalidCastException 类
InvalidCastException 成员
InvalidCastException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


InvalidCastException 构造函数 (String, Exception)

InvalidCastException 构造函数 (String, Exception)
InvalidCastException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 InvalidCastException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public InvalidCastException(
    string message,
    Exception innerException
)
public:
InvalidCastException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> InvalidCastException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 InvalidCastException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidCastException 类
InvalidCastException 成员
InvalidCastException 重载
System 命名空间
Exception

其他资源

处理和引发异常


InvalidCastException 构造函数 (String, Int32)

InvalidCastException 构造函数 (String, Int32)
InvalidCastException 类

使用指定的消息和错误代码初始化 InvalidCastException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    errorCode As Integer _
)
public InvalidCastException(
    string message,
    int errorCode
)
public:
InvalidCastException(
    String^ message,
    int errorCode
)
new :
        message:string *
        errorCode:int -> InvalidCastException

参数

message
类型： System String
指示所发生异常的原因的消息。
errorCode
类型： System Int32
与异常关联的错误代码 (HRESULT) 值。

此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

此构造函数提供了一个 HRESULT 值，InvalidCastException 类的继承者可以通过 Exception 类的受保护 HResult 属性访问该值。

下表显示 InvalidCastException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

InvalidCastException 类
InvalidCastException 成员
InvalidCastException 重载
System 命名空间


InvalidCastException 方法

InvalidCastException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCastException 类

InvalidCastException 类型公开以下成员。

名称 说明
页首

参考

InvalidCastException 类
System 命名空间


InvalidCastException 属性

InvalidCastException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCastException 类

InvalidCastException 类型公开以下成员。

名称 说明
页首

参考

InvalidCastException 类
System 命名空间


InvalidCastException 事件

InvalidCastException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCastException 类

InvalidCastException 类型公开以下成员。

名称 说明
页首

参考

InvalidCastException 类
System 命名空间


InvalidOperationException 类

InvalidOperationException 类
成员

当方法调用对于对象的当前状态无效时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class InvalidOperationException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class InvalidOperationException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class InvalidOperationException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type InvalidOperationException =
    class
        inherit SystemException
    end

如果调用方法失败不是由无效参数造成的，则使用 InvalidOperationException。例如，对于 InvalidOperationException 而言： 如果调用方法失败不是由无效参数造成的，则使用 InvalidOperationException。例如，对于 InvalidOperationException 而言：

  • 如果创建枚举数后修改了集合中的对象，则由 MoveNext 引发该异常。

  • 如果执行方法调用前关闭了资源集，则由 GetString 引发该异常。

如果方法调用失败是由无效参数造成的，则应改为引发 ArgumentException 或其派生类 ArgumentNullException 或 ArgumentOutOfRangeException。

  • LdfldaMicrosoft 中间语言 (MSIL) 指令引发 InvalidOperationException。

InvalidOperationException 使用值为 0x80131509 的 HRESULT COR_E_INVALIDOPERATION。

有关 InvalidOperationException 实例的初始属性值列表，请参见 InvalidOperationException 构造函数。

System System..::.InvalidOperationExceptionInvalidOperationException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidOperationException 成员
System 命名空间
Exception
IEnumerator
ResourceSet

其他资源

处理和引发异常


InvalidOperationException 成员

InvalidOperationException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidOperationException 类

当方法调用对于对象的当前状态无效时引发的异常。

InvalidOperationException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InvalidOperationException 类
System 命名空间


InvalidOperationException 构造函数

InvalidOperationException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidOperationException 类

初始化 InvalidOperationException 类的新实例。

名称 说明
页首

参考

InvalidOperationException 类
InvalidOperationException 成员
System 命名空间


InvalidOperationException 构造函数

InvalidOperationException 构造函数
InvalidOperationException 类

初始化 InvalidOperationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public InvalidOperationException()
public:
InvalidOperationException()
new : unit -> InvalidOperationException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“无法执行所请求的操作。”。此消息将考虑当前系统区域性。

下表显示 InvalidOperationException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidOperationException 类
InvalidOperationException 成员
InvalidOperationException 重载
System 命名空间


InvalidOperationException 构造函数 (String)

InvalidOperationException 构造函数 (String)
InvalidOperationException 类

使用指定错误信息初始化 InvalidOperationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public InvalidOperationException(
    string message
)
public:
InvalidOperationException(
    String^ message
)
new :
        message:string -> InvalidOperationException

参数

message
类型： System String
描述错误的消息。

此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 InvalidOperationException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidOperationException 类
InvalidOperationException 成员
InvalidOperationException 重载
System 命名空间


InvalidOperationException 构造函数 (SerializationInfo, StreamingContext)

InvalidOperationException 构造函数 (SerializationInfo, StreamingContext)
InvalidOperationException 类

用序列化数据初始化 InvalidOperationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected InvalidOperationException(
    SerializationInfo info,
    StreamingContext context
)
protected:
InvalidOperationException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> InvalidOperationException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

InvalidOperationException 类
InvalidOperationException 成员
InvalidOperationException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


InvalidOperationException 构造函数 (String, Exception)

InvalidOperationException 构造函数 (String, Exception)
InvalidOperationException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 InvalidOperationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public InvalidOperationException(
    string message,
    Exception innerException
)
public:
InvalidOperationException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> InvalidOperationException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 InvalidOperationException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidOperationException 类
InvalidOperationException 成员
InvalidOperationException 重载
System 命名空间
Exception

其他资源

处理和引发异常


InvalidOperationException 方法

InvalidOperationException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidOperationException 类

InvalidOperationException 类型公开以下成员。

名称 说明
页首

参考

InvalidOperationException 类
System 命名空间


InvalidOperationException 属性

InvalidOperationException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidOperationException 类

InvalidOperationException 类型公开以下成员。

名称 说明
页首

参考

InvalidOperationException 类
System 命名空间


InvalidOperationException 事件

InvalidOperationException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidOperationException 类

InvalidOperationException 类型公开以下成员。

名称 说明
页首

参考

InvalidOperationException 类
System 命名空间


InvalidProgramException 类

InvalidProgramException 类
成员

当程序包含无效 Microsoft 中间语言 (MSIL) 或元数据时将引发的异常。这通常表示生成程序的编译器中有 bug。 当程序包含无效 Microsoft 中间语言 (MSIL) 或元数据时将引发的异常。这通常表示生成程序的编译器中有 bug。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class InvalidProgramException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class InvalidProgramException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class InvalidProgramException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type InvalidProgramException =
    class
        inherit SystemException
    end

InvalidProgramException 使用值为 0x8013153A 的 HRESULT COR_E_INVALIDPROGRAM。

有关 InvalidProgramException 实例的初始属性值列表，请参见 InvalidProgramException 构造函数。

有关 InvalidProgramException 的更多信息，请参见位于 http://support.microsoft.com/default.aspx?ln=zh-cn 的 Microsoft 知识库文章 Q312544“What to Do If You Receive an InvalidProgramException Error Message”。

System System..::.InvalidProgramExceptionInvalidProgramException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidProgramException 成员
System 命名空间
Exception

其他资源

处理和引发异常


InvalidProgramException 成员

InvalidProgramException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidProgramException 类

当程序包含无效 Microsoft 中间语言 (MSIL) 或元数据时将引发的异常。这通常表示生成程序的编译器中有 bug。 当程序包含无效 Microsoft 中间语言 (MSIL) 或元数据时将引发的异常。这通常表示生成程序的编译器中有 bug。

InvalidProgramException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InvalidProgramException 类
System 命名空间


InvalidProgramException 构造函数

InvalidProgramException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidProgramException 类

初始化 InvalidProgramException 类的新实例。

名称 说明
页首

参考

InvalidProgramException 类
InvalidProgramException 成员
System 命名空间


InvalidProgramException 构造函数

InvalidProgramException 构造函数
InvalidProgramException 类

使用默认属性初始化 InvalidProgramException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public InvalidProgramException()
public:
InvalidProgramException()
new : unit -> InvalidProgramException

构造函数将新异常的 Exception..::.Message 属性初始化为系统提供的描述错误的消息，如“元数据不正确”。此消息将考虑当前系统区域性。

下表显示 InvalidProgramException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidProgramException 类
InvalidProgramException 成员
InvalidProgramException 重载
System 命名空间


InvalidProgramException 构造函数 (String)

InvalidProgramException 构造函数 (String)
InvalidProgramException 类

用指定的错误消息初始化 InvalidProgramException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public InvalidProgramException(
    string message
)
public:
InvalidProgramException(
    String^ message
)
new :
        message:string -> InvalidProgramException

参数

message
类型： System String
解释异常原因的错误信息。

此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
此构造函数用 message 参数初始化新异常的 Exception..::.Message 属性。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 InvalidProgramException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidProgramException 类
InvalidProgramException 成员
InvalidProgramException 重载
System 命名空间


InvalidProgramException 构造函数 (String, Exception)

InvalidProgramException 构造函数 (String, Exception)
InvalidProgramException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 InvalidProgramException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public InvalidProgramException(
    string message,
    Exception inner
)
public:
InvalidProgramException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> InvalidProgramException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 InvalidProgramException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidProgramException 类
InvalidProgramException 成员
InvalidProgramException 重载
System 命名空间
Exception
InnerException
Message

其他资源

处理和引发异常


InvalidProgramException 方法

InvalidProgramException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidProgramException 类

InvalidProgramException 类型公开以下成员。

名称 说明
页首

参考

InvalidProgramException 类
System 命名空间


InvalidProgramException 属性

InvalidProgramException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidProgramException 类

InvalidProgramException 类型公开以下成员。

名称 说明
页首

参考

InvalidProgramException 类
System 命名空间


InvalidProgramException 事件

InvalidProgramException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidProgramException 类

InvalidProgramException 类型公开以下成员。

名称 说明
页首

参考

InvalidProgramException 类
System 命名空间


InvalidTimeZoneException 类

InvalidTimeZoneException 类
成员

时区信息无效时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Class InvalidTimeZoneException _
    Inherits Exception
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class InvalidTimeZoneException : Exception
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public ref class InvalidTimeZoneException : public Exception
[<SerializableAttribute>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type InvalidTimeZoneException =
    class
        inherit Exception
    end

当 TimeZoneInfo 对象包含无效数据、不完整数据或者缺少数据时会引发该异常。在注册表中找到了时区但时区中包含损坏的数据时，FindSystemTimeZoneById 方法会引发该异常。在以下任何情况下，CreateCustomTimeZone 方法也会引发该异常： 当 TimeZoneInfo 对象包含无效数据、不完整数据或者缺少数据时会引发该异常。在注册表中找到了时区但时区中包含损坏的数据时，FindSystemTimeZoneById 方法会引发该异常。在以下任何情况下，CreateCustomTimeZone 方法也会引发该异常： 当 TimeZoneInfo 对象包含无效数据、不完整数据或者缺少数据时会引发该异常。在注册表中找到了时区但时区中包含损坏的数据时，FindSystemTimeZoneById 方法会引发该异常。在以下任何情况下，CreateCustomTimeZone 方法也会引发该异常：

  • 调整规则重叠。

  • 调整规则包含一个或多个空元素。

  • 协调世界时 (UTC) 偏移量与白昼增量之和超出范围。（大于 14 小时或小于 -14 小时。） 协调世界时 (UTC) 偏移量与白昼增量之和超出范围。（大于 14 小时或小于 -14 小时。）

  • 单个日期具有多个应用于该日期的调整规则。

如果未引发此异常，则表明未在特定系统上定义时区；系统将对这种情况使用 TimeZoneNotFoundException。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

System System..::.InvalidTimeZoneExceptionInvalidTimeZoneException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

InvalidTimeZoneException 成员
System 命名空间


InvalidTimeZoneException 成员

InvalidTimeZoneException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidTimeZoneException 类

时区信息无效时引发的异常。

InvalidTimeZoneException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InvalidTimeZoneException 类
System 命名空间


InvalidTimeZoneException 构造函数

InvalidTimeZoneException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidTimeZoneException 类

初始化 InvalidTimeZoneException 类的新实例。

名称 说明
页首

参考

InvalidTimeZoneException 类
InvalidTimeZoneException 成员
System 命名空间


InvalidTimeZoneException 构造函数

InvalidTimeZoneException 构造函数
InvalidTimeZoneException 类

使用系统提供的消息初始化 InvalidTimeZoneException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public InvalidTimeZoneException()
public:
InvalidTimeZoneException()
new : unit -> InvalidTimeZoneException

这是 InvalidTimeZoneException 类的默认构造函数。此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“引发了类型为“System.InvalidTimeZoneException”的异常”。此消息将针对当前系统区域性进行本地化。 这是 InvalidTimeZoneException 类的默认构造函数。此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“引发了类型为“System.InvalidTimeZoneException”的异常”。此消息将针对当前系统区域性进行本地化。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

InvalidTimeZoneException 类
InvalidTimeZoneException 成员
InvalidTimeZoneException 重载
System 命名空间


InvalidTimeZoneException 构造函数 (String)

InvalidTimeZoneException 构造函数 (String)
InvalidTimeZoneException 类

使用指定的消息字符串初始化 InvalidTimeZoneException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public InvalidTimeZoneException(
    string message
)
public:
InvalidTimeZoneException(
    String^ message
)
new :
        message:string -> InvalidTimeZoneException

参数

message
类型： System String
描述异常的字符串。

作为 message 参数提供的字符串将分配给 Message 属性。应针对当前区域性对该字符串进行本地化。 作为 message 参数提供的字符串将分配给 Message 属性。应针对当前区域性对该字符串进行本地化。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

InvalidTimeZoneException 类
InvalidTimeZoneException 成员
InvalidTimeZoneException 重载
System 命名空间


InvalidTimeZoneException 构造函数 (SerializationInfo, StreamingContext)

InvalidTimeZoneException 构造函数 (SerializationInfo, StreamingContext)
InvalidTimeZoneException 类

用序列化数据初始化 InvalidTimeZoneException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected InvalidTimeZoneException(
    SerializationInfo info,
    StreamingContext context
)
protected:
InvalidTimeZoneException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> InvalidTimeZoneException

参数

info
类型： System.Runtime.Serialization SerializationInfo
包含序列化数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
包含序列化数据的流。
异常 | 条件
ArgumentNullException | info 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - context 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此构造函数不直接由代码调用来实例化 InvalidTimeZoneException 对象，而是在从流反序列化 InvalidTimeZoneException 对象时，由 IFormatter 对象的 Deserialize 方法调用。 此构造函数不直接由代码调用来实例化 InvalidTimeZoneException 对象，而是在从流反序列化 InvalidTimeZoneException 对象时，由 IFormatter 对象的 Deserialize 方法调用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

InvalidTimeZoneException 类
InvalidTimeZoneException 成员
InvalidTimeZoneException 重载
System 命名空间


InvalidTimeZoneException 构造函数 (String, Exception)

InvalidTimeZoneException 构造函数 (String, Exception)
InvalidTimeZoneException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 InvalidTimeZoneException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public InvalidTimeZoneException(
    string message,
    Exception innerException
)
public:
InvalidTimeZoneException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> InvalidTimeZoneException

参数

message
类型： System String
描述异常的字符串。
innerException
类型： System Exception
导致当前异常的异常。

通常可使用 InvalidTimeZoneException 类的此重载来处理 try…catch 块中的异常。innerException 参数应为对在 catch 块中处理的异常对象的引用，否则该参数可能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。该值随后被分配给 InvalidTimeZoneException 对象的 InnerException 属性。 通常可使用 InvalidTimeZoneException 类的此重载来处理 try…catch 块中的异常。innerException 参数应为对在 catch 块中处理的异常对象的引用，否则该参数可能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。该值随后被分配给 InvalidTimeZoneException 对象的 InnerException 属性。 通常可使用 InvalidTimeZoneException 类的此重载来处理 try…catch 块中的异常。innerException 参数应为对在 catch 块中处理的异常对象的引用，否则该参数可能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。该值随后被分配给 InvalidTimeZoneException 对象的 InnerException 属性。

message 字符串被分配给 Message 属性。应针对当前区域性对该字符串进行本地化。 message 字符串被分配给 Message 属性。应针对当前区域性对该字符串进行本地化。

下面的代码尝试检索表示中部标准时区的 TimeZoneInfo 对象。如果在 RetrieveTimeZone 方法调用中发生 InvalidTimeZoneException，则异常处理程序会将异常包装在新的 InvalidTimeZoneException 对象中，然后将其返回至调用方。调用方的异常处理程序随后显示外部和内部异常的相关信息。 下面的代码尝试检索表示中部标准时区的 TimeZoneInfo 对象。如果在 RetrieveTimeZone 方法调用中发生 InvalidTimeZoneException，则异常处理程序会将异常包装在新的 InvalidTimeZoneException 对象中，然后将其返回至调用方。调用方的异常处理程序随后显示外部和内部异常的相关信息。 下面的代码尝试检索表示中部标准时区的 TimeZoneInfo 对象。如果在 RetrieveTimeZone 方法调用中发生 InvalidTimeZoneException，则异常处理程序会将异常包装在新的 InvalidTimeZoneException 对象中，然后将其返回至调用方。调用方的异常处理程序随后显示外部和内部异常的相关信息。

Private Sub HandleInnerException()
   Dim timeZoneName As String = "Any Standard Time"
   Dim tz As TimeZoneInfo
   Try
      tz = RetrieveTimeZone(timeZoneName)
      Console.WriteLine("The time zone display name is {0}.", tz.DisplayName)
   Catch e As TimeZoneNotFoundException
      Console.WriteLine("{0} thrown by application", e.GetType().Name)
      Console.WriteLine("   Message: {0}", e.Message)
      If e.InnerException IsNot Nothing Then
         Console.WriteLine("   Inner Exception Information:")
         Dim innerEx As Exception = e.InnerException
         Do
            Console.WriteLine("      {0}: {1}", innerEx.GetType().Name, innerEx.Message)
            innerEx = innerEx.InnerException
         Loop While innerEx IsNot Nothing
      End If
   End Try
End Sub

Private Function RetrieveTimeZone(tzName As String) As TimeZoneInfo
   Try
      Return TimeZoneInfo.FindSystemTimeZoneById(tzName)
   Catch ex1 As TimeZoneNotFoundException
      Throw New TimeZoneNotFoundException( _
            String.Format("The time zone '{0}' cannot be found.", tzName), _
            ex1)
   Catch ex2 As InvalidTimeZoneException
      Throw New InvalidTimeZoneException( _
            String.Format("The time zone {0} contains invalid data.", tzName), _
            ex2)
   End Try
End Function

private void HandleInnerException()
{
   string timeZoneName = "Any Standard Time";
   TimeZoneInfo tz;
   try
   {
      tz = RetrieveTimeZone(timeZoneName);
      Console.WriteLine("The time zone display name is {0}.", tz.DisplayName);
   }
   catch (TimeZoneNotFoundException e)
   {
      Console.WriteLine("{0} thrown by application", e.GetType().Name);
      Console.WriteLine("   Message: {0}", e.Message);
      if (e.InnerException != null)
      {
         Console.WriteLine("   Inner Exception Information:");
         Exception innerEx = e.InnerException;
         while (innerEx != null)
         {
            Console.WriteLine("      {0}: {1}", innerEx.GetType().Name, innerEx.Message);
            innerEx = innerEx.InnerException;
         }
      }
   }
}

private TimeZoneInfo RetrieveTimeZone(string tzName)
{
   try
   {
      return TimeZoneInfo.FindSystemTimeZoneById(tzName);
   }
   catch (TimeZoneNotFoundException ex1)
   {
      throw new TimeZoneNotFoundException(
            String.Format("The time zone '{0}' cannot be found.", tzName),
            ex1);
   }
   catch (InvalidTimeZoneException ex2)
   {
      throw new InvalidTimeZoneException(
            String.Format("The time zone {0} contains invalid data.", tzName),
            ex2);
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

InvalidTimeZoneException 类
InvalidTimeZoneException 成员
InvalidTimeZoneException 重载
System 命名空间


InvalidTimeZoneException 方法

InvalidTimeZoneException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidTimeZoneException 类

InvalidTimeZoneException 类型公开以下成员。

名称 说明
页首

参考

InvalidTimeZoneException 类
System 命名空间


InvalidTimeZoneException 属性

InvalidTimeZoneException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidTimeZoneException 类

InvalidTimeZoneException 类型公开以下成员。

名称 说明
页首

参考

InvalidTimeZoneException 类
System 命名空间


InvalidTimeZoneException 事件

InvalidTimeZoneException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidTimeZoneException 类

InvalidTimeZoneException 类型公开以下成员。

名称 说明
页首

参考

InvalidTimeZoneException 类
System 命名空间


IObservable <(Of <(T >)>) 接口

IObservable
<
(Of
<
(
T
>
)
>
)
接口
成员

定义基于推送的通知的提供程序。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Interface IObservable(Of Out T)
public interface IObservable<out T>

generic<typename T>
public interface class IObservable
type IObservable<'T> =  interface end

类型参数

outOutoutoutTT

提供通知信息的对象。

该类型参数是协变的。即可以使用指定的类型或派生程度更高的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

IObserver<(Of <(T>)>) 和 IObservable<(Of <(T>)>) 接口为基于推送的通知提供通用机制，也称为观察者设计模式。。IObservable<(Of <(T>)>) 接口表示发送通知（提供程序）的类；IObserver<(Of <(T>)>) 接口表示接收通知（观察器）的类。T 表示提供通知信息的类。在某些基于推送的通知中，IObserver<(Of <(T>)>) 实现和 T 可以表示相同的类型。 IObserver<(Of <(T>)>) 和 IObservable<(Of <(T>)>) 接口为基于推送的通知提供通用机制，也称为观察者设计模式。。IObservable<(Of <(T>)>) 接口表示发送通知（提供程序）的类；IObserver<(Of <(T>)>) 接口表示接收通知（观察器）的类。T 表示提供通知信息的类。在某些基于推送的通知中，IObserver<(Of <(T>)>) 实现和 T 可以表示相同的类型。 IObserver<(Of <(T>)>) 和 IObservable<(Of <(T>)>) 接口为基于推送的通知提供通用机制，也称为观察者设计模式。。IObservable<(Of <(T>)>) 接口表示发送通知（提供程序）的类；IObserver<(Of <(T>)>) 接口表示接收通知（观察器）的类。T 表示提供通知信息的类。在某些基于推送的通知中，IObserver<(Of <(T>)>) 实现和 T 可以表示相同的类型。 IObserver<(Of <(T>)>) 和 IObservable<(Of <(T>)>) 接口为基于推送的通知提供通用机制，也称为观察者设计模式。。IObservable<(Of <(T>)>) 接口表示发送通知（提供程序）的类；IObserver<(Of <(T>)>) 接口表示接收通知（观察器）的类。T 表示提供通知信息的类。在某些基于推送的通知中，IObserver<(Of <(T>)>) 实现和 T 可以表示相同的类型。

该提供程序必须实现一个方法 Subscribe，指出某个观察器要接收基于推送的通知。该方法的调用方传递观察器的实例。 该提供程序必须实现一个方法 Subscribe，指出某个观察器要接收基于推送的通知。该方法的调用方传递观察器的实例。

在任何给定时间，给定的提供程序可能具有零个、一个或多个观察器。该提供程序负责存储对观察器的引用，并且在发送通知之前确保它们有效。IObservable<(Of <(T>)>) 接口对于观察器的个数或发送通知的顺序不作任何假设。 在任何给定时间，给定的提供程序可能具有零个、一个或多个观察器。该提供程序负责存储对观察器的引用，并且在发送通知之前确保它们有效。IObservable<(Of <(T>)>) 接口对于观察器的个数或发送通知的顺序不作任何假设。 在任何给定时间，给定的提供程序可能具有零个、一个或多个观察器。该提供程序负责存储对观察器的引用，并且在发送通知之前确保它们有效。IObservable<(Of <(T>)>) 接口对于观察器的个数或发送通知的顺序不作任何假设。

该提供程序通过调用 IObserver<(Of <(T>)>) 方法向观察器发送以下三种通知：

  • 当前数据。提供程序可以调用 IObserver<(Of <(T>)>)..::.OnNext 方法来为观察器传递包含当前数据、更改的数据或全新数据的 T 对象。 当前数据。提供程序可以调用 IObserver<(Of <(T>)>)..::.OnNext 方法来为观察器传递包含当前数据、更改的数据或全新数据的 T 对象。

  • 一个异常情况。提供程序可以调用 IObserver<(Of <(T>)>)..::.OnError 方法来通知观察器出现了某种错误情况。 一个异常情况。提供程序可以调用 IObserver<(Of <(T>)>)..::.OnError 方法来通知观察器出现了某种错误情况。

  • 没有进一步的数据。提供程序可以调用 IObserver<(Of <(T>)>)..::.OnCompleted 方法来通知观察器它已经完成通知的发送。 没有进一步的数据。提供程序可以调用 IObserver<(Of <(T>)>)..::.OnCompleted 方法来通知观察器它已经完成通知的发送。

下面的示例简单地阐释了观察程序设计模式。它定义了跟踪纬度和经度并作为数据源的 Location 类。Location 类包括 Status 属性，该属性返回 LocationStatus 枚举的成员。以下源代码同时定义了 Location 和 LocationStatus 类型。 下面的示例简单地阐释了观察程序设计模式。它定义了跟踪纬度和经度并作为数据源的 Location 类。Location 类包括 Status 属性，该属性返回 LocationStatus 枚举的成员。以下源代码同时定义了 Location 和 LocationStatus 类型。 下面的示例简单地阐释了观察程序设计模式。它定义了跟踪纬度和经度并作为数据源的 Location 类。Location 类包括 Status 属性，该属性返回 LocationStatus 枚举的成员。以下源代码同时定义了 Location 和 LocationStatus 类型。 下面的示例简单地阐释了观察程序设计模式。它定义了跟踪纬度和经度并作为数据源的 Location 类。Location 类包括 Status 属性，该属性返回 LocationStatus 枚举的成员。以下源代码同时定义了 Location 和 LocationStatus 类型。

Public Enum LocationStatus As Integer
   Started = 1
   EnRoute = 2
   Finished = 3
End Enum

Public Structure Location
   Public ReadOnly Latitude As Decimal
   Public ReadOnly Longitude As Decimal
   Public ReadOnly DateAndTime As Date
   Public ReadOnly Status As LocationStatus

   Public Sub New(lat As Decimal, lon As Decimal, dateAndTime As Date, status As LocationStatus)
      Me.Latitude = lat
      Me.Longitude = lon
      Me.DateAndTime = dateAndTime
      Me.Status = status
   End Sub
End Structure

public enum LocationStatus { Started = 1, EnRoute = 2, Finished = 3 };

public struct Location
{
   public readonly decimal Latitude;
   public readonly decimal Longitude;
   public readonly DateTime DateAndTime;
   public readonly LocationStatus Status;

   public Location(decimal lat, decimal lon, DateTime dateAndTime, LocationStatus status)
   {
      this.Latitude = lat;
      this.Longitude = lon;
      this.DateAndTime = dateAndTime;
      this.Status = status;
   }
}

LocationSimulator 类提供 IObservable<(Of <(T>)>) 实现。它以固定的位置开始，然后使用随机数生成器每 2,500 毫秒更新一次位置。每当位置更新时，LocationSimulator 将通知存储在其 observers 集合中的每个观察器。当纬度变化达到 3 度时，它将停止对位置变化的跟踪并调用其观察器的 OnCompleted 方法。 LocationSimulator 类提供 IObservable<(Of <(T>)>) 实现。它以固定的位置开始，然后使用随机数生成器每 2,500 毫秒更新一次位置。每当位置更新时，LocationSimulator 将通知存储在其 observers 集合中的每个观察器。当纬度变化达到 3 度时，它将停止对位置变化的跟踪并调用其观察器的 OnCompleted 方法。 LocationSimulator 类提供 IObservable<(Of <(T>)>) 实现。它以固定的位置开始，然后使用随机数生成器每 2,500 毫秒更新一次位置。每当位置更新时，LocationSimulator 将通知存储在其 observers 集合中的每个观察器。当纬度变化达到 3 度时，它将停止对位置变化的跟踪并调用其观察器的 OnCompleted 方法。 LocationSimulator 类提供 IObservable<(Of <(T>)>) 实现。它以固定的位置开始，然后使用随机数生成器每 2,500 毫秒更新一次位置。每当位置更新时，LocationSimulator 将通知存储在其 observers 集合中的每个观察器。当纬度变化达到 3 度时，它将停止对位置变化的跟踪并调用其观察器的 OnCompleted 方法。

Public Class LocationSimulator : Implements IObservable(Of Location)
   Dim observers As New List(Of IObserver(Of Location))
   Dim _location, _lastLocation, _startLocation As Location

   Public Shared Function SetStartingLocation() As LocationSimulator
      Return New LocationSimulator(42.2857d, -83.7213d, LocationStatus.Started)
   End Function

   Private Sub New(latitude As Decimal, longitude As Decimal, status As LocationStatus)
      _location = New Location(latitude, longitude, DateTime.UtcNow, status)
      _lastLocation = location
      If status = LocationStatus.Started Then
         _startLocation = _location
      End If
   End Sub

   Public ReadOnly Property Location As Location
      Get
         Return Me._location
      End Get
   End Property

   Public Function GetCurrentLocation() As Location
      Dim rnd As New Random()
      Dim newLat As Decimal = location.Latitude + rnd.Next(-1, 2)
      Dim newLong As Decimal = location.Longitude + rnd.Next(-1, 2)
      ' Assume arrival if the difference in latitude is 3.
      _lastLocation = _location
      Dim status As LocationStatus = If(Math.Abs(_startLocation.Latitude - newLat) >= 3, _
                  LocationStatus.Finished, LocationStatus.EnRoute)
      _location = New Location(_location.Latitude + rnd.Next(-1, 2),
                               _location.Longitude + rnd.Next(-1, 2),
                               Date.UtcNow, status)
      If Not _location.Equals(_lastLocation) Then
         ' Notify observers.
         For Each observer In observers
            observer.OnNext(Me.Location)
            If _location.Status = LocationStatus.Finished Then
               observer.OnCompleted()
            End If
         Next
      End If
      Return Me.Location
   End Function

   Public Function Subscribe(observer As IObserver(Of Location)) As IDisposable _
                   Implements IObservable(Of Location).Subscribe
      observers.Add(observer)
      ' Announce current location to new observer.
      observer.OnNext(Me.Location)
      Return TryCast(observer, IDisposable)
   End Function
End Class

public class LocationSimulator : IObservable<Location>
{
   List<IObserver<Location>> observers = new List<IObserver<Location>>();
   Location _location, _lastLocation, _startLocation;

   public static LocationSimulator SetStartingLocation()
   {
      return new LocationSimulator(42.2857m, -83.7213m, LocationStatus.Started);
   }

   private LocationSimulator(decimal latitude, decimal longitude, LocationStatus status)
   {
      _location = new Location(latitude, longitude, DateTime.UtcNow, status);
      _lastLocation = _location;
      if (status == LocationStatus.Started)
         _startLocation = _location;
   }

   public Location Location
   {
      get { return this._location; }
   }

   public Location GetCurrentLocation()
   {
      Random rnd = new Random();
      decimal newLat = _location.Latitude + rnd.Next(-1, 2);
      decimal newLong = _location.Longitude + rnd.Next(-1, 2);
      // Assume arrival if the difference in latitude is 3.
      _lastLocation = _location;
      LocationStatus status = Math.Abs(_startLocation.Latitude - newLat) >= 3 ?
                  LocationStatus.Finished : LocationStatus.EnRoute;
      _location = new Location(_location.Latitude + rnd.Next(-1, 2),
                               _location.Longitude + rnd.Next(-1, 2),
                               DateTime.UtcNow, status);
      if (! _location.Equals(_lastLocation))
      {
         // Notify observers.
         foreach (IObserver<Location> observer in observers)
         {
            observer.OnNext(this.Location);
            // Assume that we've arrived at location of Latitude has changed by 4.
            if (_location.Status == LocationStatus.Finished)
               observer.OnCompleted();
         }
      }
      return this.Location;
   }

   public IDisposable Subscribe(IObserver<Location> observer)
   {
      observers.Add(observer);
      // Announce current location to new observer.
      observer.OnNext(this.Location);
      return observer as IDisposable;
   }
}

在此示例中，LocationDisplay 类提供 IObserver<(Of <(T>)>) 实现。它将当前的位置有关的信息显示到控制台。下面的代码定义 LocationDisplay 类。 在此示例中，LocationDisplay 类提供 IObserver<(Of <(T>)>) 实现。它将当前的位置有关的信息显示到控制台。下面的代码定义 LocationDisplay 类。 在此示例中，LocationDisplay 类提供 IObserver<(Of <(T>)>) 实现。它将当前的位置有关的信息显示到控制台。下面的代码定义 LocationDisplay 类。

Public Class LocationDisplay : Implements IObserver(Of Location)
   Public Sub OnNext(value As Location) _
              Implements IObserver(Of Location).OnNext
      Console.WriteLine("{3}At {0}, Latitude = {1:N4}, Longitude = {2:N4}", value.DateAndTime, value.Latitude, value.Longitude,
                        If(value.Status = LocationStatus.Started, "Starting ", ""))
   End Sub

   Public Sub OnError(ex As Exception) _
              Implements IObserver(Of Location).OnError
      Console.WriteLine("Unable to determine the current location.")
   End Sub

   Public Sub OnCompleted() _
              Implements IObserver(Of Location).OnCompleted
      Console.WriteLine("Finished tracking the current location.")
   End Sub
End Class

public class LocationDisplay : IObserver<Location>
{
   public void OnNext(Location value)
   {
      Console.WriteLine("{3}At {0}, Latitude = {1:N4}, Longitude = {2:N4}", value.DateAndTime, value.Latitude, value.Longitude,
                        value.Status == LocationStatus.Started ? "Starting " : "");
   }

   public void OnError(Exception error)
   {
      Console.WriteLine("Unable to determine the current location.");
   }

   public void OnCompleted()
   {
      Console.WriteLine("Finished tracking the current location.");
   }
}

下面的代码然后实例化提供程序和观察器。

Module Example
   Public Sub Main()
       Dim simulator As LocationSimulator = LocationSimulator.SetStartingLocation()

       ' Subscribe with class that implements IObserver<Location>
       Dim d As IDisposable = simulator.Subscribe(New LocationDisplay())
       Dim loc As Location
       Do
          loc = simulator.GetCurrentLocation()
          Thread.Sleep(2500)
       Loop While loc.Status <> LocationStatus.Finished
   End Sub
End Module

public class Example
{
   public static void Main()
   {
       LocationSimulator simulator = LocationSimulator.SetStartingLocation();

       // Subscribe with class that implements IObserver<Location>
       IDisposable d = simulator.Subscribe(new LocationDisplay());
       Location loc;
       do {
          loc = simulator.GetCurrentLocation();
          Thread.Sleep(2500);
       } while (loc.Status != LocationStatus.Finished);
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObservable T 成员
System 命名空间
IObserver T


IObservable <(Of <(T >)>) 成员

IObservable
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IObservable

定义基于推送的通知的提供程序。

IObservable T 类型公开以下成员。

名称 说明
页首

参考

IObservable T 接口
System 命名空间


IObservable <(Of <(T >)>) 方法

IObservable
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IObservable

IObservable T 类型公开以下成员。

名称 说明
页首

参考

IObservable T 接口
System 命名空间


IObservable <(Of <(T >)>) ..::.Subscribe 方法

IObservable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Subscribe 方法
IObservable

通知提供程序：某观察程序将要接收通知。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function Subscribe ( _
    observer As IObserver(Of T) _
) As IDisposable
IDisposable Subscribe(
    IObserver<T> observer
)
IDisposable^ Subscribe(
    IObserver<T>^ observer
)
abstract Subscribe :
        observer:IObserver<'T> -> IDisposable

参数

observer
类型： System IObserver
<
(Of
<
(
T
>
)
>
)

要接收通知的对象。

返回值

类型： System IDisposable
使资源释放的观察程序的接口。

必须调用 Subscribe 方法为基本推送的通知注册观察器。

在任何给定的时间，IObservable<(Of <(T>)>) 实现的特定实例负责处理所有订阅并通知所有订户。除非特定的 IObservable<(Of <(T>)>) 实现文档另行指示，否则观察器对 IObservable<(Of <(T>)>) 实现不应做任何假设，例如多个观察器接收的通知顺序。 在任何给定的时间，IObservable<(Of <(T>)>) 实现的特定实例负责处理所有订阅并通知所有订户。除非特定的 IObservable<(Of <(T>)>) 实现文档另行指示，否则观察器对 IObservable<(Of <(T>)>) 实现不应做任何假设，例如多个观察器接收的通知顺序。

该方法返回对 IDisposable 接口的引用。这使观察器能够在提供程序完成发送并调用订户的 OnCompleted 方法之前取消订阅（即，停止接收通知）。 该方法返回对 IDisposable 接口的引用。这使观察器能够在提供程序完成发送并调用订户的 OnCompleted 方法之前取消订阅（即，停止接收通知）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObservable T 接口
IObservable T 成员
System 命名空间
IObserver T


IObserver <(Of <(T >)>) 接口

IObserver
<
(Of
<
(
T
>
)
>
)
接口
成员

提供用于接收基于推送的通知的机制。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Interface IObserver(Of In T)
public interface IObserver<in T>

generic<typename T>
public interface class IObserver
type IObserver<'T> =  interface end

类型参数

inInininTT

提供通知信息的对象。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

IObserver<(Of <(T>)>) 和 IObservable<(Of <(T>)>) 接口为基于推送的通知提供通用机制，也称为观察器设计模式。IObservable<(Of <(T>)>) 接口表示发送通知（提供程序）的类；IObserver<(Of <(T>)>) 接口表示接收通知（观察器）的类。T 表示提供通知信息的类。 IObserver<(Of <(T>)>) 和 IObservable<(Of <(T>)>) 接口为基于推送的通知提供通用机制，也称为观察器设计模式。IObservable<(Of <(T>)>) 接口表示发送通知（提供程序）的类；IObserver<(Of <(T>)>) 接口表示接收通知（观察器）的类。T 表示提供通知信息的类。 IObserver<(Of <(T>)>) 和 IObservable<(Of <(T>)>) 接口为基于推送的通知提供通用机制，也称为观察器设计模式。IObservable<(Of <(T>)>) 接口表示发送通知（提供程序）的类；IObserver<(Of <(T>)>) 接口表示接收通知（观察器）的类。T 表示提供通知信息的类。

IObserver<(Of <(T>)>) 实现通过将其本身的实例传递至提供程序 IObservable<(Of <(T>)>)..::.Subscribe 方法来排列以接收来自提供程序（IObservable<(Of <(T>)>) 实现）的通知。此方法返回 IDisposable 对象，可用于在提供程序完成发送通知之前取消订阅观察器。 IObserver<(Of <(T>)>) 实现通过将其本身的实例传递至提供程序 IObservable<(Of <(T>)>)..::.Subscribe 方法来排列以接收来自提供程序（IObservable<(Of <(T>)>) 实现）的通知。此方法返回 IDisposable 对象，可用于在提供程序完成发送通知之前取消订阅观察器。

IObserver<(Of <(T>)>) 接口定义了以下观察器必须实现的三种方法：

  • OnNext 方法，通常由提供程序调用来向观察器提供新的数据或状态信息。

  • OnError 方法，通常被提供程序调用来指示数据是不可用、无法访问、或已损坏，或提供程序遇到其他错误条件。

  • OnCompleted 方法，通常被提供程序调用以指示它已完成将通知发送给观察器。

下面的示例简单地阐释了观察程序设计模式。它定义了跟踪纬度和经度并作为数据源的 Location 类。Location 类包括 Status 属性，该属性返回 LocationStatus 枚举的成员。以下源代码同时定义了 Location 和 LocationStatus 类型。 下面的示例简单地阐释了观察程序设计模式。它定义了跟踪纬度和经度并作为数据源的 Location 类。Location 类包括 Status 属性，该属性返回 LocationStatus 枚举的成员。以下源代码同时定义了 Location 和 LocationStatus 类型。 下面的示例简单地阐释了观察程序设计模式。它定义了跟踪纬度和经度并作为数据源的 Location 类。Location 类包括 Status 属性，该属性返回 LocationStatus 枚举的成员。以下源代码同时定义了 Location 和 LocationStatus 类型。 下面的示例简单地阐释了观察程序设计模式。它定义了跟踪纬度和经度并作为数据源的 Location 类。Location 类包括 Status 属性，该属性返回 LocationStatus 枚举的成员。以下源代码同时定义了 Location 和 LocationStatus 类型。

Public Enum LocationStatus As Integer
   Started = 1
   EnRoute = 2
   Finished = 3
End Enum

Public Structure Location
   Public ReadOnly Latitude As Decimal
   Public ReadOnly Longitude As Decimal
   Public ReadOnly DateAndTime As Date
   Public ReadOnly Status As LocationStatus

   Public Sub New(lat As Decimal, lon As Decimal, dateAndTime As Date, status As LocationStatus)
      Me.Latitude = lat
      Me.Longitude = lon
      Me.DateAndTime = dateAndTime
      Me.Status = status
   End Sub
End Structure

public enum LocationStatus { Started = 1, EnRoute = 2, Finished = 3 };

public struct Location
{
   public readonly decimal Latitude;
   public readonly decimal Longitude;
   public readonly DateTime DateAndTime;
   public readonly LocationStatus Status;

   public Location(decimal lat, decimal lon, DateTime dateAndTime, LocationStatus status)
   {
      this.Latitude = lat;
      this.Longitude = lon;
      this.DateAndTime = dateAndTime;
      this.Status = status;
   }
}

在此示例中，LocationDisplay 类提供 IObserver<(Of <(T>)>) 实现。它将当前的位置有关的信息显示到控制台。下面的代码定义 LocationDisplay 类。 在此示例中，LocationDisplay 类提供 IObserver<(Of <(T>)>) 实现。它将当前的位置有关的信息显示到控制台。下面的代码定义 LocationDisplay 类。 在此示例中，LocationDisplay 类提供 IObserver<(Of <(T>)>) 实现。它将当前的位置有关的信息显示到控制台。下面的代码定义 LocationDisplay 类。

Public Class LocationDisplay : Implements IObserver(Of Location)
   Public Sub OnNext(value As Location) _
              Implements IObserver(Of Location).OnNext
      Console.WriteLine("{3}At {0}, Latitude = {1:N4}, Longitude = {2:N4}", value.DateAndTime, value.Latitude, value.Longitude,
                        If(value.Status = LocationStatus.Started, "Starting ", ""))
   End Sub

   Public Sub OnError(ex As Exception) _
              Implements IObserver(Of Location).OnError
      Console.WriteLine("Unable to determine the current location.")
   End Sub

   Public Sub OnCompleted() _
              Implements IObserver(Of Location).OnCompleted
      Console.WriteLine("Finished tracking the current location.")
   End Sub
End Class

public class LocationDisplay : IObserver<Location>
{
   public void OnNext(Location value)
   {
      Console.WriteLine("{3}At {0}, Latitude = {1:N4}, Longitude = {2:N4}", value.DateAndTime, value.Latitude, value.Longitude,
                        value.Status == LocationStatus.Started ? "Starting " : "");
   }

   public void OnError(Exception error)
   {
      Console.WriteLine("Unable to determine the current location.");
   }

   public void OnCompleted()
   {
      Console.WriteLine("Finished tracking the current location.");
   }
}

LocationSimulator 类提供 IObservable<(Of <(T>)>) 实现。它以固定的位置开始，然后使用随机数生成器每 2,500 毫秒更新一次位置。每当位置更新时，LocationSimulator 将通知存储在其 observers 集合中的每个观察器。当纬度变化达到 3 度时，它将停止对位置变化的跟踪并调用其观察器的 OnCompleted 方法。 LocationSimulator 类提供 IObservable<(Of <(T>)>) 实现。它以固定的位置开始，然后使用随机数生成器每 2,500 毫秒更新一次位置。每当位置更新时，LocationSimulator 将通知存储在其 observers 集合中的每个观察器。当纬度变化达到 3 度时，它将停止对位置变化的跟踪并调用其观察器的 OnCompleted 方法。 LocationSimulator 类提供 IObservable<(Of <(T>)>) 实现。它以固定的位置开始，然后使用随机数生成器每 2,500 毫秒更新一次位置。每当位置更新时，LocationSimulator 将通知存储在其 observers 集合中的每个观察器。当纬度变化达到 3 度时，它将停止对位置变化的跟踪并调用其观察器的 OnCompleted 方法。 LocationSimulator 类提供 IObservable<(Of <(T>)>) 实现。它以固定的位置开始，然后使用随机数生成器每 2,500 毫秒更新一次位置。每当位置更新时，LocationSimulator 将通知存储在其 observers 集合中的每个观察器。当纬度变化达到 3 度时，它将停止对位置变化的跟踪并调用其观察器的 OnCompleted 方法。

Public Class LocationSimulator : Implements IObservable(Of Location)
   Dim observers As New List(Of IObserver(Of Location))
   Dim _location, _lastLocation, _startLocation As Location

   Public Shared Function SetStartingLocation() As LocationSimulator
      Return New LocationSimulator(42.2857d, -83.7213d, LocationStatus.Started)
   End Function

   Private Sub New(latitude As Decimal, longitude As Decimal, status As LocationStatus)
      _location = New Location(latitude, longitude, DateTime.UtcNow, status)
      _lastLocation = location
      If status = LocationStatus.Started Then
         _startLocation = _location
      End If
   End Sub

   Public ReadOnly Property Location As Location
      Get
         Return Me._location
      End Get
   End Property

   Public Function GetCurrentLocation() As Location
      Dim rnd As New Random()
      Dim newLat As Decimal = location.Latitude + rnd.Next(-1, 2)
      Dim newLong As Decimal = location.Longitude + rnd.Next(-1, 2)
      ' Assume arrival if the difference in latitude is 3.
      _lastLocation = _location
      Dim status As LocationStatus = If(Math.Abs(_startLocation.Latitude - newLat) >= 3, _
                  LocationStatus.Finished, LocationStatus.EnRoute)
      _location = New Location(_location.Latitude + rnd.Next(-1, 2),
                               _location.Longitude + rnd.Next(-1, 2),
                               Date.UtcNow, status)
      If Not _location.Equals(_lastLocation) Then
         ' Notify observers.
         For Each observer In observers
            observer.OnNext(Me.Location)
            If _location.Status = LocationStatus.Finished Then
               observer.OnCompleted()
            End If
         Next
      End If
      Return Me.Location
   End Function

   Public Function Subscribe(observer As IObserver(Of Location)) As IDisposable _
                   Implements IObservable(Of Location).Subscribe
      observers.Add(observer)
      ' Announce current location to new observer.
      observer.OnNext(Me.Location)
      Return TryCast(observer, IDisposable)
   End Function
End Class

public class LocationSimulator : IObservable<Location>
{
   List<IObserver<Location>> observers = new List<IObserver<Location>>();
   Location _location, _lastLocation, _startLocation;

   public static LocationSimulator SetStartingLocation()
   {
      return new LocationSimulator(42.2857m, -83.7213m, LocationStatus.Started);
   }

   private LocationSimulator(decimal latitude, decimal longitude, LocationStatus status)
   {
      _location = new Location(latitude, longitude, DateTime.UtcNow, status);
      _lastLocation = _location;
      if (status == LocationStatus.Started)
         _startLocation = _location;
   }

   public Location Location
   {
      get { return this._location; }
   }

   public Location GetCurrentLocation()
   {
      Random rnd = new Random();
      decimal newLat = _location.Latitude + rnd.Next(-1, 2);
      decimal newLong = _location.Longitude + rnd.Next(-1, 2);
      // Assume arrival if the difference in latitude is 3.
      _lastLocation = _location;
      LocationStatus status = Math.Abs(_startLocation.Latitude - newLat) >= 3 ?
                  LocationStatus.Finished : LocationStatus.EnRoute;
      _location = new Location(_location.Latitude + rnd.Next(-1, 2),
                               _location.Longitude + rnd.Next(-1, 2),
                               DateTime.UtcNow, status);
      if (! _location.Equals(_lastLocation))
      {
         // Notify observers.
         foreach (IObserver<Location> observer in observers)
         {
            observer.OnNext(this.Location);
            // Assume that we've arrived at location of Latitude has changed by 4.
            if (_location.Status == LocationStatus.Finished)
               observer.OnCompleted();
         }
      }
      return this.Location;
   }

   public IDisposable Subscribe(IObserver<Location> observer)
   {
      observers.Add(observer);
      // Announce current location to new observer.
      observer.OnNext(this.Location);
      return observer as IDisposable;
   }
}

下面的代码然后实例化提供程序和观察器。

Module Example
   Public Sub Main()
       Dim simulator As LocationSimulator = LocationSimulator.SetStartingLocation()

       ' Subscribe with class that implements IObserver<Location>
       Dim d As IDisposable = simulator.Subscribe(New LocationDisplay())
       Dim loc As Location
       Do
          loc = simulator.GetCurrentLocation()
          Thread.Sleep(2500)
       Loop While loc.Status <> LocationStatus.Finished
   End Sub
End Module

public class Example
{
   public static void Main()
   {
       LocationSimulator simulator = LocationSimulator.SetStartingLocation();

       // Subscribe with class that implements IObserver<Location>
       IDisposable d = simulator.Subscribe(new LocationDisplay());
       Location loc;
       do {
          loc = simulator.GetCurrentLocation();
          Thread.Sleep(2500);
       } while (loc.Status != LocationStatus.Finished);
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObserver T 成员
System 命名空间
IObservable T


IObserver <(Of <(T >)>) 成员

IObserver
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IObserver

提供用于接收基于推送的通知的机制。

IObserver T 类型公开以下成员。

名称 说明
页首

参考

IObserver T 接口
System 命名空间


IObserver <(Of <(T >)>) 方法

IObserver
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IObserver

IObserver T 类型公开以下成员。

名称 说明
页首

参考

IObserver T 接口
System 命名空间


IObserver <(Of <(T >)>) ..::.OnCompleted 方法

IObserver
<
(Of
<
(
T
>
)
>
)
.
.
::
.
OnCompleted 方法
IObserver

通知观察者，提供程序已完成发送基于推送的通知。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub OnCompleted
void OnCompleted()
void OnCompleted()
abstract OnCompleted : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObserver T 接口
IObserver T 成员
System 命名空间


IObserver <(Of <(T >)>) ..::.OnError 方法

IObserver
<
(Of
<
(
T
>
)
>
)
.
.
::
.
OnError 方法
IObserver

通知观察者，提供程序遇到错误情况。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub OnError ( _
    error As Exception _
)
void OnError(
    Exception error
)
void OnError(
    Exception^ error
)
abstract OnError :
        error:Exception -> unit

参数

error
类型： System Exception
一个提供有关错误的附加信息的对象。

尽管 error 是从 System..::.Exception 派生的对象，它不一定表示提供程序引发的异常。它还可以表示某个例程或预期的错误条件，如数据丢失或不可用。OnError 方法应看作为是信息性的，而且提供程序不应期望观察器提供的错误处理。
尽管 error 是从 System..::.Exception 派生的对象，它不一定表示提供程序引发的异常。它还可以表示某个例程或预期的错误条件，如数据丢失或不可用。OnError 方法应看作为是信息性的，而且提供程序不应期望观察器提供的错误处理。
尽管 error 是从 System..::.Exception 派生的对象，它不一定表示提供程序引发的异常。它还可以表示某个例程或预期的错误条件，如数据丢失或不可用。OnError 方法应看作为是信息性的，而且提供程序不应期望观察器提供的错误处理。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObserver T 接口
IObserver T 成员
System 命名空间


IObserver <(Of <(T >)>) ..::.OnNext 方法

IObserver
<
(Of
<
(
T
>
)
>
)
.
.
::
.
OnNext 方法
IObserver

向观察者提供新数据。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Sub OnNext ( _
    value As T _
)
void OnNext(
    T value
)
void OnNext(
    T value
)
abstract OnNext :
        value:'T -> unit

参数

value
类型： T
当前的通知信息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObserver T 接口
IObserver T 成员
System 命名空间


IServiceProvider 接口

IServiceProvider 接口
成员

定义一种检索服务对象的机制，服务对象是为其他对象提供自定义支持的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Interface IServiceProvider
public interface IServiceProvider
public interface class IServiceProvider
type IServiceProvider =  interface end

此接口由为其他对象提供服务的类或值类型实现。

此接口的 GetService 方法可以获取提供服务的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IServiceProvider 成员
System 命名空间
Type


IServiceProvider 成员

IServiceProvider 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IServiceProvider 接口

定义一种检索服务对象的机制，服务对象是为其他对象提供自定义支持的对象。

IServiceProvider 类型公开以下成员。

名称 说明
页首

参考

IServiceProvider 接口
System 命名空间


IServiceProvider 方法

IServiceProvider 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IServiceProvider 接口

IServiceProvider 类型公开以下成员。

名称 说明
页首

参考

IServiceProvider 接口
System 命名空间


IServiceProvider ..::.GetService 方法

IServiceProvider
.
.
::
.
GetService 方法
IServiceProvider 接口

获取指定类型的服务对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Function GetService ( _
    serviceType As Type _
) As Object
Object GetService(
    Type serviceType
)
Object^ GetService(
    Type^ serviceType
)
abstract GetService :
        serviceType:Type -> Object

参数

serviceType
类型： System Type
一个对象，它指定要获取的服务对象的类型。

返回值

类型： System Object
serviceType 类型的服务对象。
- 或 -
如果没有 serviceType 类型的服务对象，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IServiceProvider 接口
IServiceProvider 成员
System 命名空间


Lazy <(Of <(T >)>) 类

Lazy
<
(Of
<
(
T
>
)
>
)
类
成员

提供对延迟初始化的支持。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(False)> _
<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True,  _
    ExternalThreading := True)> _
Public Class Lazy(Of T)
[SerializableAttribute]
[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true,
    ExternalThreading = true)]
public class Lazy<T>

[SerializableAttribute]
[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true,
    ExternalThreading = true)]
generic<typename T>
public ref class Lazy
[<SerializableAttribute>]
[<ComVisibleAttribute(false)>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true,
    ExternalThreading = true)>]
type Lazy<'T> =  class end

类型参数

T

指定正在延迟初始化的对象的类型。

首次访问 Lazy<(Of <(T>)>)..::.Value 属性或调用 Lazy<(Of <(T>)>)..::.ToString 方法时会发生惰性初始化。

使用 Lazy<(Of <(T>)>) 实例推迟创建大型或资源密集型对象或推迟执行资源密集型任务，尤其当这样的创建或执行不能在程序的生存期中发生时。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：Synchronization | ExternalThreading。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

System
System..::.Lazy<(Of <(T>)>)Lazy
System..::.Lazy<(Of <(T>)>)T
System..::.Lazy<(Of <(T>)>)

默认设置下，Lazy<(Of <(T>)>) 类的所有公共和受保护的成员都是线程安全的，可从多个线程同时使用。可根据需要以及按实例删除这些线程安全保证，使用该类型的构造函数的参数。 默认设置下，Lazy<(Of <(T>)>) 类的所有公共和受保护的成员都是线程安全的，可从多个线程同时使用。可根据需要以及按实例删除这些线程安全保证，使用该类型的构造函数的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 成员
System 命名空间

其他资源

延迟初始化


Lazy <(Of <(T >)>) 成员

Lazy
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Lazy

提供对延迟初始化的支持。

Lazy T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Lazy T 类
System 命名空间


Lazy <(Of <(T >)>) 构造函数

Lazy
<
(Of
<
(
T
>
)
>
)
构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Lazy

初始化 Lazy<(Of <(T>)>) 类的新实例。

名称 说明
页首

参考

Lazy T 类
Lazy T 成员
System 命名空间


Lazy <(Of <(T >)>) 构造函数

Lazy
<
(Of
<
(
T
>
)
>
)
构造函数
Lazy

初始化 Lazy<(Of <(T>)>) 类的新实例。发生延迟初始化时，使用目标类型的默认构造函数。 初始化 Lazy<(Of <(T>)>) 类的新实例。发生延迟初始化时，使用目标类型的默认构造函数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public Lazy()
public:
Lazy()
new : unit -> Lazy

使用该构造函数创建的实例可从多个线程同时使用。

此构造函数初始化的 Lazy<(Of <(T>)>) 实例的线程安全模式是 LazyThreadSafetyMode..::.ExecutionAndPublication。线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当默认构造函数出现异常时的行为。 此构造函数初始化的 Lazy<(Of <(T>)>) 实例的线程安全模式是 LazyThreadSafetyMode..::.ExecutionAndPublication。线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当默认构造函数出现异常时的行为。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 类
Lazy T 成员
Lazy T 重载
System 命名空间

其他资源

延迟初始化


Lazy <(Of <(T >)>) 构造函数 (Boolean)

Lazy
<
(Of
<
(
T
>
)
>
)
构造函数 (Boolean)
Lazy

初始化 Lazy<(Of <(T>)>) 类的新实例。发生延迟初始化时，使用目标类型的默认构造函数和指定的初始化模式。 初始化 Lazy<(Of <(T>)>) 类的新实例。发生延迟初始化时，使用目标类型的默认构造函数和指定的初始化模式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    isThreadSafe As Boolean _
)
public Lazy(
    bool isThreadSafe
)
public:
Lazy(
    bool isThreadSafe
)
new :
        isThreadSafe:bool -> Lazy

参数

isThreadSafe
类型： System Boolean
true 表示此示例可由多个线程同时使用；false 表示此实例一次只能由一个线程使用。

如果 isThreadSafe 为 true，则由此构造函数初始化的 Lazy<(Of <(T>)>) 实例的线程安全模式是 LazyThreadSafetyMode..::.ExecutionAndPublication；否则该模式是 LazyThreadSafetyMode..::.None。线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当默认构造函数出现异常时的行为。 如果 isThreadSafe 为 true，则由此构造函数初始化的 Lazy<(Of <(T>)>) 实例的线程安全模式是 LazyThreadSafetyMode..::.ExecutionAndPublication；否则该模式是 LazyThreadSafetyMode..::.None。线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当默认构造函数出现异常时的行为。

若要指定 LazyThreadSafetyMode..::.PublicationOnly 模式，请使用 Lazy<(Of <(T>)>)(Func<(Of <(T>)>), LazyThreadSafetyMode) 或 Lazy<(Of <(T>)>)(LazyThreadSafetyMode) 构造函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 类
Lazy T 成员
Lazy T 重载
System 命名空间

其他资源

延迟初始化


Lazy <(Of <(T >)>) 构造函数 (Func <(Of <(T >)>))

Lazy
<
(Of
<
(
T
>
)
>
)
构造函数 (Func
<
(Of
<
(
T
>
)
>
)
)
Lazy

初始化 Lazy<(Of <(T>)>) 类的新实例。发生延迟初始化时，使用指定的初始化函数。 初始化 Lazy<(Of <(T>)>) 类的新实例。发生延迟初始化时，使用指定的初始化函数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    valueFactory As Func(Of T) _
)
public Lazy(
    Func<T> valueFactory
)
public:
Lazy(
    Func<T>^ valueFactory
)
new :
        valueFactory:Func<'T> -> Lazy

参数

valueFactory
类型： System Func
<
(Of
<
(
T
>
)
>
)

在需要时被调用以产生延迟初始化值的委托。
异常 | 条件
ArgumentNullException | valueFactory 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

使用该构造函数创建的实例可从多个线程同时使用。

此构造函数初始化的 Lazy<(Of <(T>)>) 实例的线程安全模式是 LazyThreadSafetyMode..::.ExecutionAndPublication。线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当 valueFactory 出现异常时的行为。 此构造函数初始化的 Lazy<(Of <(T>)>) 实例的线程安全模式是 LazyThreadSafetyMode..::.ExecutionAndPublication。线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当 valueFactory 出现异常时的行为。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 类
Lazy T 成员
Lazy T 重载
System 命名空间

其他资源

延迟初始化


Lazy <(Of <(T >)>) 构造函数 (LazyThreadSafetyMode)

Lazy
<
(Of
<
(
T
>
)
>
)
构造函数 (LazyThreadSafetyMode)
Lazy

初始化 Lazy<(Of <(T>)>) 类的新实例，其中使用 T 的默认构造函数和指定的线程安全性模式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    mode As LazyThreadSafetyMode _
)
public Lazy(
    LazyThreadSafetyMode mode
)
public:
Lazy(
    LazyThreadSafetyMode mode
)
new :
        mode:LazyThreadSafetyMode -> Lazy

参数

mode
类型： System.Threading LazyThreadSafetyMode
线程安全性模式。
异常 | 条件
ArgumentOutOfRangeException | mode 包含无效值。

Lazy<(Of <(T>)>) 实例的线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当 valueFactory 出现异常时的行为。有关更多信息，请参见 System.Threading..::.LazyThreadSafetyMode。 Lazy<(Of <(T>)>) 实例的线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当 valueFactory 出现异常时的行为。有关更多信息，请参见 System.Threading..::.LazyThreadSafetyMode。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 类
Lazy T 成员
Lazy T 重载
System 命名空间

其他资源

延迟初始化


Lazy <(Of <(T >)>) 构造函数 (Func <(Of <(T >)>), Boolean)

Lazy
<
(Of
<
(
T
>
)
>
)
构造函数 (Func
<
(Of
<
(
T
>
)
>
)
, Boolean)
Lazy

初始化 Lazy<(Of <(T>)>) 类的新实例。发生延迟初始化时，使用指定的初始化函数和初始化模式。 初始化 Lazy<(Of <(T>)>) 类的新实例。发生延迟初始化时，使用指定的初始化函数和初始化模式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    valueFactory As Func(Of T), _
    isThreadSafe As Boolean _
)
public Lazy(
    Func<T> valueFactory,
    bool isThreadSafe
)
public:
Lazy(
    Func<T>^ valueFactory,
    bool isThreadSafe
)
new :
        valueFactory:Func<'T> *
        isThreadSafe:bool -> Lazy

参数

valueFactory
类型： System Func
<
(Of
<
(
T
>
)
>
)

在需要时被调用以产生延迟初始化值的委托。
isThreadSafe
类型： System Boolean
true 表示此示例可由多个线程同时使用；false 表示此实例一次只能由一个线程使用。
异常 | 条件
ArgumentNullException | valueFactory 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果 isThreadSafe 为 true，则由此构造函数初始化的 Lazy<(Of <(T>)>) 实例的线程安全模式是 LazyThreadSafetyMode..::.ExecutionAndPublication；否则该模式是 LazyThreadSafetyMode..::.None。线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当 valueFactory 出现异常时的行为。 如果 isThreadSafe 为 true，则由此构造函数初始化的 Lazy<(Of <(T>)>) 实例的线程安全模式是 LazyThreadSafetyMode..::.ExecutionAndPublication；否则该模式是 LazyThreadSafetyMode..::.None。线程安全模式描述的行为包括：当多个线程尝试初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当 valueFactory 出现异常时的行为。

若要指定 LazyThreadSafetyMode..::.PublicationOnly 模式，请使用 Lazy<(Of <(T>)>)(Func<(Of <(T>)>), LazyThreadSafetyMode) 或 Lazy<(Of <(T>)>)(LazyThreadSafetyMode) 构造函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 类
Lazy T 成员
Lazy T 重载
System 命名空间

其他资源

延迟初始化


Lazy <(Of <(T >)>) 构造函数 (Func <(Of <(T >)>), LazyThreadSafetyMode)

Lazy
<
(Of
<
(
T
>
)
>
)
构造函数 (Func
<
(Of
<
(
T
>
)
>
)
, LazyThreadSafetyMode)
Lazy

初始化 Lazy<(Of <(T>)>) 类的新实例，其中使用指定的初始化函数和线程安全性模式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    valueFactory As Func(Of T), _
    mode As LazyThreadSafetyMode _
)
public Lazy(
    Func<T> valueFactory,
    LazyThreadSafetyMode mode
)
public:
Lazy(
    Func<T>^ valueFactory,
    LazyThreadSafetyMode mode
)
new :
        valueFactory:Func<'T> *
        mode:LazyThreadSafetyMode -> Lazy

参数

valueFactory
类型： System Func
<
(Of
<
(
T
>
)
>
)

在需要时被调用以产生延迟初始化值的委托。
mode
类型： System.Threading LazyThreadSafetyMode
线程安全性模式。
异常 | 条件
ArgumentOutOfRangeException | mode 包含无效值。
ArgumentNullException | valueFactory 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Lazy<(Of <(T>)>) 实例的线程安全模式描述的行为包括：当多个线程实体初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当默认构造函数出现异常时的行为。有关更多信息，请参见 System.Threading..::.LazyThreadSafetyMode。 Lazy<(Of <(T>)>) 实例的线程安全模式描述的行为包括：当多个线程实体初始化 Lazy<(Of <(T>)>) 实例时的行为，以及当默认构造函数出现异常时的行为。有关更多信息，请参见 System.Threading..::.LazyThreadSafetyMode。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 类
Lazy T 成员
Lazy T 重载
System 命名空间

其他资源

延迟初始化


Lazy <(Of <(T >)>) 方法

Lazy
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Lazy

Lazy T 类型公开以下成员。

名称 说明
页首

参考

Lazy T 类
System 命名空间


Lazy <(Of <(T >)>) ..::.ToString 方法

Lazy
<
(Of
<
(
T
>
)
>
)
.
.
::
.
ToString 方法
Lazy

创建并返回此实例的 Lazy<(Of <(T>)>)..::.Value 属性的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
对此实例的 Lazy<(Of <(T>)>)..::.Value 属性调用 Object..::.ToString 方法的结果。
异常 | 条件
NullReferenceException | Lazy<(Of <(T>)>)..::.Value 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

调用此方法会导致初始化。

如果为 Lazy<(Of <(T>)>)(Func<(Of <(T>)>))、Lazy<(Of <(T>)>)(Func<(Of <(T>)>), LazyThreadSafetyMode) 或 Lazy<(Of <(T>)>)(Func<(Of <(T>)>), Boolean) 构造函数的 valueFactory 参数指定的工厂方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），Lazy<(Of <(T>)>)..::.Value 属性在惰性初始化后可能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 类
Lazy T 成员
System 命名空间


Lazy <(Of <(T >)>) 属性

Lazy
<
(Of
<
(
T
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Lazy

Lazy T 类型公开以下成员。

名称 说明
页首

参考

Lazy T 类
System 命名空间


Lazy <(Of <(T >)>) ..::.IsValueCreated 属性

Lazy
<
(Of
<
(
T
>
)
>
)
.
.
::
.
IsValueCreated 属性
Lazy

获取一个值，该值指示是否已为此 Lazy<(Of <(T>)>) 实例创建一个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsValueCreated As Boolean
    Get
public bool IsValueCreated { get; }
public:
property bool IsValueCreated {
    bool get ();
}
member IsValueCreated : bool

属性值

类型： System Boolean
如果已为此 Lazy<(Of <(T>)>) 实例创建了一个值，则为 true；否则为 false。

当 Lazy<(Of <(T>)>) 实例发生惰性初始化时，可能导致生成一个值或引发异常。Lazy<(Of <(T>)>) 实例的后续行为取决于线程安全模式。 当 Lazy<(Of <(T>)>) 实例发生惰性初始化时，可能导致生成一个值或引发异常。Lazy<(Of <(T>)>) 实例的后续行为取决于线程安全模式。

  • 如果模式为 LazyThreadSafetyMode..::.ExecutionAndPublication 或 LazyThreadSafetyMode..::.None，则没有第二个机会来初始化 Lazy<(Of <(T>)>) 实例。如果出现异常并且在初始化函数（或默认构造函数）中未处理，则会在后续访问 Lazy<(Of <(T>)>)..::.Value 属性或调用 Lazy<(Of <(T>)>)..::.ToString 方法时出现该异常。在引发异常时不创建任何值，因此在此情况下，IsValueCreated 返回 false。 如果模式为 LazyThreadSafetyMode..::.ExecutionAndPublication 或 LazyThreadSafetyMode..::.None，则没有第二个机会来初始化 Lazy<(Of <(T>)>) 实例。如果出现异常并且在初始化函数（或默认构造函数）中未处理，则会在后续访问 Lazy<(Of <(T>)>)..::.Value 属性或调用 Lazy<(Of <(T>)>)..::.ToString 方法时出现该异常。在引发异常时不创建任何值，因此在此情况下，IsValueCreated 返回 false。 如果模式为 LazyThreadSafetyMode..::.ExecutionAndPublication 或 LazyThreadSafetyMode..::.None，则没有第二个机会来初始化 Lazy<(Of <(T>)>) 实例。如果出现异常并且在初始化函数（或默认构造函数）中未处理，则会在后续访问 Lazy<(Of <(T>)>)..::.Value 属性或调用 Lazy<(Of <(T>)>)..::.ToString 方法时出现该异常。在引发异常时不创建任何值，因此在此情况下，IsValueCreated 返回 false。

  • 如果模式为 LazyThreadSafetyMode..::.PublicationOnly，则成功运行初始化函数（或默认构造函数）的第一个线程将为 Lazy<(Of <(T>)>) 实例创建该值。如果初始化函数在一个线程上引发异常，其他线程仍可以尝试初始化 Lazy<(Of <(T>)>) 实例。直到创建该值后，IsValueCreated 属性才返回 false。 如果模式为 LazyThreadSafetyMode..::.PublicationOnly，则成功运行初始化函数（或默认构造函数）的第一个线程将为 Lazy<(Of <(T>)>) 实例创建该值。如果初始化函数在一个线程上引发异常，其他线程仍可以尝试初始化 Lazy<(Of <(T>)>) 实例。直到创建该值后，IsValueCreated 属性才返回 false。 如果模式为 LazyThreadSafetyMode..::.PublicationOnly，则成功运行初始化函数（或默认构造函数）的第一个线程将为 Lazy<(Of <(T>)>) 实例创建该值。如果初始化函数在一个线程上引发异常，其他线程仍可以尝试初始化 Lazy<(Of <(T>)>) 实例。直到创建该值后，IsValueCreated 属性才返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 类
Lazy T 成员
System 命名空间

其他资源

延迟初始化


Lazy <(Of <(T >)>) ..::.Value 属性

Lazy
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Value 属性
Lazy

获取当前 Lazy<(Of <(T>)>) 实例的延迟初始化值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Value As T
    Get
public T Value { get; }
public:
property T Value {
    T get ();
}
member Value : 'T

属性值

类型： T
当前 Lazy<(Of <(T>)>) 实例的延迟初始化值。
异常 | 条件
MemberAccessException | Lazy<(Of <(T>)>) 实例初始化为使用正在惰性初始化的类型的默认构造函数，并且缺少访问该构造函数的权限。
MissingMemberException | Lazy<(Of <(T>)>) 实例初始化为使用正在惰性初始化的类型的默认构造函数，并且该类型没有无参数的公共构造函数。
InvalidOperationException | 初始化函数尝试访问此实例上的 Value。

如果 Lazy<(Of <(T>)>)..::.IsValueCreated 属性为 false，则访问 Value 属性将强制初始化。

除了列出的异常之外，Value 属性还可能引发由传递到 Lazy<(Of <(T>)>)(Func<(Of <(T>)>))、Lazy<(Of <(T>)>)(Func<(Of <(T>)>), LazyThreadSafetyMode) 或 Lazy<(Of <(T>)>)(Func<(Of <(T>)>), Boolean) 构造函数的 valueFactory 参数的工厂方法所引发的任何未经处理的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T 类
Lazy T 成员
System 命名空间

其他资源

延迟初始化


Lazy <(Of <(T, TMetadata >)>) 类

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
类
成员

提供对对象及其关联的元数据的延迟间接引用，以供 Managed Extensibility Framework 使用。

命名空间： System
程序集： System.ComponentModel.Composition（在 System.ComponentModel.Composition.dll 中）
<SerializableAttribute> _
Public Class Lazy(Of T, TMetadata) _
    Inherits Lazy(Of T)
[SerializableAttribute]
public class Lazy<T, TMetadata> : Lazy<T>

[SerializableAttribute]
generic<typename T, typename TMetadata>
public ref class Lazy : public Lazy<T>
[<SerializableAttribute>]
type Lazy<'T, 'TMetadata> =
    class
        inherit Lazy<'T>
    end

类型参数

T

所引用对象的类型。

TMetadata

元数据的类型。

T
System
System..::.Lazy<(Of <(T, TMetadata>)>)Lazy
System..::.Lazy<(Of <(T, TMetadata>)>)T, TMetadata
System..::.Lazy<(Of <(T, TMetadata>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T, TMetadata 成员
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 成员

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Lazy

提供对对象及其关联的元数据的延迟间接引用，以供 Managed Extensibility Framework 使用。

Lazy T, TMetadata 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Lazy T, TMetadata 类
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 构造函数

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Lazy

初始化 Lazy<(Of <(T, TMetadata>)>) 类的新实例。

名称 说明
页首

参考

Lazy T, TMetadata 类
Lazy T, TMetadata 成员
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 构造函数 (TMetadata)

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
构造函数 (TMetadata)
Lazy

使用指定的元数据初始化 Lazy<(Of <(T, TMetadata>)>) 类的新实例。

命名空间： System
程序集： System.ComponentModel.Composition（在 System.ComponentModel.Composition.dll 中）
Public Sub New ( _
    metadata As TMetadata _
)
public Lazy(
    TMetadata metadata
)
public:
Lazy(
    TMetadata metadata
)
new :
        metadata:'TMetadata -> Lazy

参数

metadata
类型： TMetadata
与引用的对象关联的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T, TMetadata 类
Lazy T, TMetadata 成员
Lazy T, TMetadata 重载
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 构造函数 (TMetadata, Boolean)

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
构造函数 (TMetadata, Boolean)
Lazy

使用指定的元数据和线程安全值初始化 Lazy<(Of <(T, TMetadata>)>) 类的新实例。

命名空间： System
程序集： System.ComponentModel.Composition（在 System.ComponentModel.Composition.dll 中）
Public Sub New ( _
    metadata As TMetadata, _
    isThreadSafe As Boolean _
)
public Lazy(
    TMetadata metadata,
    bool isThreadSafe
)
public:
Lazy(
    TMetadata metadata,
    bool isThreadSafe
)
new :
        metadata:'TMetadata *
        isThreadSafe:bool -> Lazy

参数

metadata
类型： TMetadata
与引用的对象关联的元数据。
isThreadSafe
类型： System Boolean
指示创建的 Lazy<(Of <(T, TMetadata>)>) 对象是否是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T, TMetadata 类
Lazy T, TMetadata 成员
Lazy T, TMetadata 重载
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 构造函数 (TMetadata, LazyThreadSafetyMode)

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
构造函数 (TMetadata, LazyThreadSafetyMode)
Lazy

使用指定的元数据和线程同步模式初始化 Lazy<(Of <(T, TMetadata>)>) 类的新实例。

命名空间： System
程序集： System.ComponentModel.Composition（在 System.ComponentModel.Composition.dll 中）
Public Sub New ( _
    metadata As TMetadata, _
    mode As LazyThreadSafetyMode _
)
public Lazy(
    TMetadata metadata,
    LazyThreadSafetyMode mode
)
public:
Lazy(
    TMetadata metadata,
    LazyThreadSafetyMode mode
)
new :
        metadata:'TMetadata *
        mode:LazyThreadSafetyMode -> Lazy

参数

metadata
类型： TMetadata
与引用的对象关联的元数据。
mode
类型： System.Threading LazyThreadSafetyMode
线程同步模式。

有关线程同步和Lazy<(Of <(T, TMetadata>)>) 的更多信息，请参见 LazyThreadSafetyMode。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T, TMetadata 类
Lazy T, TMetadata 成员
Lazy T, TMetadata 重载
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 构造函数 (Func <(Of <(T >)>), TMetadata)

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
构造函数 (Func
<
(Of
<
(
T
>
)
>
)
, TMetadata)
Lazy

使用指定的元数据初始化 Lazy<(Of <(T, TMetadata>)>) 类的新实例，该实例使用指定函数来获取所引用对象。

命名空间： System
程序集： System.ComponentModel.Composition（在 System.ComponentModel.Composition.dll 中）
Public Sub New ( _
    valueFactory As Func(Of T), _
    metadata As TMetadata _
)
public Lazy(
    Func<T> valueFactory,
    TMetadata metadata
)
public:
Lazy(
    Func<T>^ valueFactory,
    TMetadata metadata
)
new :
        valueFactory:Func<'T> *
        metadata:'TMetadata -> Lazy

参数

valueFactory
类型： System Func
<
(Of
<
(
T
>
)
>
)

返回所引用对象的函数。
metadata
类型： TMetadata
与引用的对象关联的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T, TMetadata 类
Lazy T, TMetadata 成员
Lazy T, TMetadata 重载
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 构造函数 (Func <(Of <(T >)>), TMetadata, Boolean)

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
构造函数 (Func
<
(Of
<
(
T
>
)
>
)
, TMetadata, Boolean)
Lazy

使用指定的元数据和线程安全值初始化 Lazy<(Of <(T, TMetadata>)>) 类的新实例，该实例使用指定函数来获取所引用对象。

命名空间： System
程序集： System.ComponentModel.Composition（在 System.ComponentModel.Composition.dll 中）
Public Sub New ( _
    valueFactory As Func(Of T), _
    metadata As TMetadata, _
    isThreadSafe As Boolean _
)
public Lazy(
    Func<T> valueFactory,
    TMetadata metadata,
    bool isThreadSafe
)
public:
Lazy(
    Func<T>^ valueFactory,
    TMetadata metadata,
    bool isThreadSafe
)
new :
        valueFactory:Func<'T> *
        metadata:'TMetadata *
        isThreadSafe:bool -> Lazy

参数

valueFactory
类型： System Func
<
(Of
<
(
T
>
)
>
)

返回所引用对象的函数。
metadata
类型： TMetadata
与引用的对象关联的元数据。
isThreadSafe
类型： System Boolean
指示创建的 Lazy<(Of <(T, TMetadata>)>) 对象是否是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T, TMetadata 类
Lazy T, TMetadata 成员
Lazy T, TMetadata 重载
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 构造函数 (Func <(Of <(T >)>), TMetadata, LazyThreadSafetyMode)

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
构造函数 (Func
<
(Of
<
(
T
>
)
>
)
, TMetadata, LazyThreadSafetyMode)
Lazy

使用指定的元数据和线程同步模式初始化 Lazy<(Of <(T, TMetadata>)>) 类的新实例，该实例使用指定函数来获取所引用对象。

命名空间： System
程序集： System.ComponentModel.Composition（在 System.ComponentModel.Composition.dll 中）
Public Sub New ( _
    valueFactory As Func(Of T), _
    metadata As TMetadata, _
    mode As LazyThreadSafetyMode _
)
public Lazy(
    Func<T> valueFactory,
    TMetadata metadata,
    LazyThreadSafetyMode mode
)
public:
Lazy(
    Func<T>^ valueFactory,
    TMetadata metadata,
    LazyThreadSafetyMode mode
)
new :
        valueFactory:Func<'T> *
        metadata:'TMetadata *
        mode:LazyThreadSafetyMode -> Lazy

参数

valueFactory
类型： System Func
<
(Of
<
(
T
>
)
>
)

返回所引用对象的函数
metadata
类型： TMetadata
与引用的对象关联的元数据。
mode
类型： System.Threading LazyThreadSafetyMode
线程同步模式

有关线程同步和Lazy<(Of <(T, TMetadata>)>) 的更多信息，请参见 LazyThreadSafetyMode。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T, TMetadata 类
Lazy T, TMetadata 成员
Lazy T, TMetadata 重载
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 方法

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Lazy

Lazy T, TMetadata 类型公开以下成员。

名称 说明
页首

参考

Lazy T, TMetadata 类
System 命名空间


Lazy <(Of <(T, TMetadata >)>) 属性

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Lazy

Lazy T, TMetadata 类型公开以下成员。

名称 说明
页首

参考

Lazy T, TMetadata 类
System 命名空间


Lazy <(Of <(T, TMetadata >)>) ..::.Metadata 属性

Lazy
<
(Of
<
(
T, TMetadata
>
)
>
)
.
.
::
.
Metadata 属性
Lazy

获取与引用的对象关联的元数据。

命名空间： System
程序集： System.ComponentModel.Composition（在 System.ComponentModel.Composition.dll 中）
Public ReadOnly Property Metadata As TMetadata
    Get
public TMetadata Metadata { get; }
public:
property TMetadata Metadata {
    TMetadata get ();
}
member Metadata : 'TMetadata

属性值

类型： TMetadata
与引用的对象关联的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Lazy T, TMetadata 类
Lazy T, TMetadata 成员
System 命名空间


LdapStyleUriParser 类

LdapStyleUriParser 类
成员

基于 轻型目录访问协议 (LDAP) 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Class LdapStyleUriParser _
    Inherits UriParser
public class LdapStyleUriParser : UriParser
public ref class LdapStyleUriParser : public UriParser
type LdapStyleUriParser =
    class
        inherit UriParser
    end

System System..::.LdapStyleUriParserLdapStyleUriParser
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

LdapStyleUriParser 成员
System 命名空间


LdapStyleUriParser 成员

LdapStyleUriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
LdapStyleUriParser 类

基于 轻型目录访问协议 (LDAP) 方案的可自定义分析器。

LdapStyleUriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

LdapStyleUriParser 类
System 命名空间


LdapStyleUriParser 构造函数

LdapStyleUriParser 构造函数
LdapStyleUriParser 类

创建一个基于轻型目录访问协议 (LDAP) 方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public LdapStyleUriParser()
public:
LdapStyleUriParser()
new : unit -> LdapStyleUriParser

使用此构造函数作为 UriParser..::.Register(UriParser, String, Int32) 的参数

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

LdapStyleUriParser 类
LdapStyleUriParser 成员
System 命名空间


LdapStyleUriParser 方法

LdapStyleUriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
LdapStyleUriParser 类

LdapStyleUriParser 类型公开以下成员。

名称 说明
页首

参考

LdapStyleUriParser 类
System 命名空间


LoaderOptimization 枚举

LoaderOptimization 枚举

一个枚举，它与 LoaderOptimizationAttribute 类一起使用为可执行文件指定加载程序优化。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration LoaderOptimization
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum LoaderOptimization
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class LoaderOptimization
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type LoaderOptimization
成员名称 | 说明
NotSpecified | 指示未指定共享内部资源的优化。如果默认域或宿主接口指定了优化，则加载程序将使用该优化；否则，加载程序将使用 SingleDomain。 指示未指定共享内部资源的优化。如果默认域或宿主接口指定了优化，则加载程序将使用该优化；否则，加载程序将使用 SingleDomain。
SingleDomain | 指示应用程序可能有一个域，加载程序不得在应用程序域之间共享内部资源。
MultiDomain | 指示应用程序可能有许多域使用相同的代码，加载程序必须在应用程序域之间最大限度地共享内部资源。
MultiDomainHost | 指示应用程序将可能在多个域中承载唯一代码，而且加载程序必须在应用程序域之间仅共享已添加至全局程序集缓存中的全局可用（具有强名称）的程序集资源。
DomainMask | 已过时。 不要使用。此掩码选择与域相关的值，筛选出未使用的 DisallowBindings 标志。 不要使用。此掩码选择与域相关的值，筛选出未使用的 DisallowBindings 标志。
DisallowBindings | 已过时。 被公共语言运行时忽略。

MultiDomainHost 的含义在 .NET Framework 2.0 版中已更改。现在，加载程序只在应用程序域之间共享已添加至全局程序集缓存的程序集的资源。 MultiDomainHost 的含义在 .NET Framework 2.0 版中已更改。现在，加载程序只在应用程序域之间共享已添加至全局程序集缓存的程序集的资源。

说明 说明

使用 SetAppDomainPolicy 属性为 AppDomain 设置自定义代码访问安全策略，以及使用 MultiDomain 标志创建 AppDomain，其效果与指定 MultiDomainHost 标志相同，都是仅共享 GAC 中的程序集。发生这种情况时，加载程序不会引发异常，应用程序也不会得到与 MultiDomain 标志关联的性能收益。 使用 SetAppDomainPolicy 属性为 AppDomain 设置自定义代码访问安全策略，以及使用 MultiDomain 标志创建 AppDomain，其效果与指定 MultiDomainHost 标志相同，都是仅共享 GAC 中的程序集。发生这种情况时，加载程序不会引发异常，应用程序也不会得到与 MultiDomain 标志关联的性能收益。

有关程序集共享以及非特定于域的程序集加载的更多信息，请参见应用程序域和程序集。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
LoaderOptimizationAttribute

其他资源

应用程序域和程序集


LoaderOptimizationAttribute 类

LoaderOptimizationAttribute 类
成员

用于为可执行应用程序的主方法设置默认的加载程序优化策略。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<AttributeUsageAttribute(AttributeTargets.Method)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class LoaderOptimizationAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method)]
[ComVisibleAttribute(true)]
public sealed class LoaderOptimizationAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method)]
[ComVisibleAttribute(true)]
public ref class LoaderOptimizationAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Method)>]
[<ComVisibleAttribute(true)>]
type LoaderOptimizationAttribute =
    class
        inherit Attribute
    end

只能对可执行应用程序的主方法设置 LoaderOptimizationAttribute，对所有其他方法设置它均会被忽略。

使用 LoaderOptimization 枚举值指定 LoaderOptimizationAttribute 特性，该值通知加载程序为什么类型的应用程序进行优化：SingleDomain、MultiDomain 或 MultiDomainHost。

此特性只是对加载程序的提示，不影响程序行为。

说明 说明

使用 SetAppDomainPolicy 属性为 AppDomain 设置自定义代码访问安全策略，以及使用 MultiDomain 标志创建 AppDomain，其效果与指定 MultiDomainHost 标志相同，都是仅共享 GAC 中的程序集。发生这种情况时，加载程序不会引发异常，应用程序也不会得到与 MultiDomain 标志关联的性能收益。 使用 SetAppDomainPolicy 属性为 AppDomain 设置自定义代码访问安全策略，以及使用 MultiDomain 标志创建 AppDomain，其效果与指定 MultiDomainHost 标志相同，都是仅共享 GAC 中的程序集。发生这种情况时，加载程序不会引发异常，应用程序也不会得到与 MultiDomain 标志关联的性能收益。

System System..::.LoaderOptimizationAttributeLoaderOptimizationAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

LoaderOptimizationAttribute 成员
System 命名空间
LoaderOptimization


LoaderOptimizationAttribute 成员

LoaderOptimizationAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
LoaderOptimizationAttribute 类

用于为可执行应用程序的主方法设置默认的加载程序优化策略。

LoaderOptimizationAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

LoaderOptimizationAttribute 类
System 命名空间


LoaderOptimizationAttribute 构造函数

LoaderOptimizationAttribute 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
LoaderOptimizationAttribute 类

初始化 LoaderOptimizationAttribute 类的新实例。

名称 说明
页首

参考

LoaderOptimizationAttribute 类
LoaderOptimizationAttribute 成员
System 命名空间


LoaderOptimizationAttribute 构造函数 (Byte)

LoaderOptimizationAttribute 构造函数 (Byte)
LoaderOptimizationAttribute 类

将 LoaderOptimizationAttribute 类的新实例初始化为指定值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As Byte _
)
public LoaderOptimizationAttribute(
    byte value
)
public:
LoaderOptimizationAttribute(
    unsigned char value
)
new :
        value:byte -> LoaderOptimizationAttribute

参数

value
类型： System Byte
等效于 System..::.LoaderOptimization 常数的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

LoaderOptimizationAttribute 类
LoaderOptimizationAttribute 成员
LoaderOptimizationAttribute 重载
System 命名空间


LoaderOptimizationAttribute 构造函数 (LoaderOptimization)

LoaderOptimizationAttribute 构造函数 (LoaderOptimization)
LoaderOptimizationAttribute 类

将 LoaderOptimizationAttribute 类的新实例初始化为指定值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As LoaderOptimization _
)
public LoaderOptimizationAttribute(
    LoaderOptimization value
)
public:
LoaderOptimizationAttribute(
    LoaderOptimization value
)
new :
        value:LoaderOptimization -> LoaderOptimizationAttribute

参数

value
类型： System LoaderOptimization
System..::.LoaderOptimization 常数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

LoaderOptimizationAttribute 类
LoaderOptimizationAttribute 成员
LoaderOptimizationAttribute 重载
System 命名空间


LoaderOptimizationAttribute 方法

LoaderOptimizationAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
LoaderOptimizationAttribute 类

LoaderOptimizationAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

LoaderOptimizationAttribute 类
System 命名空间


LoaderOptimizationAttribute 属性

LoaderOptimizationAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
LoaderOptimizationAttribute 类

LoaderOptimizationAttribute 类型公开以下成员。

名称 说明
页首

参考

LoaderOptimizationAttribute 类
System 命名空间


LoaderOptimizationAttribute ..::.Value 属性

LoaderOptimizationAttribute
.
.
::
.
Value 属性
LoaderOptimizationAttribute 类

获取此实例的当前 LoaderOptimization 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Value As LoaderOptimization
    Get
public LoaderOptimization Value { get; }
public:
property LoaderOptimization Value {
    LoaderOptimization get ();
}
member Value : LoaderOptimization

属性值

类型： System LoaderOptimization
一个 LoaderOptimization 常数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

LoaderOptimizationAttribute 类
LoaderOptimizationAttribute 成员
System 命名空间


LocalDataStoreSlot 类

LocalDataStoreSlot 类
成员

封装内存槽以存储本地数据。无法继承此类。 封装内存槽以存储本地数据。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public NotInheritable Class LocalDataStoreSlot
[ComVisibleAttribute(true)]
public sealed class LocalDataStoreSlot
[ComVisibleAttribute(true)]
public ref class LocalDataStoreSlot sealed
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
type LocalDataStoreSlot =  class end

.NET Framework 提供了两个使用线程本地存储区 (TLS) 的机制：线程相关的静态字段和数据槽。

  • 线程相关的静态字段是用 ThreadStaticAttribute 特性标记的 static 字段（Visual Basic 中的 Shared 字段）。这些字段提供的性能比数据槽的性能好，而且它还启用了编译时类型检查。 线程相关的静态字段是用 ThreadStaticAttribute 特性标记的 static 字段（Visual Basic 中的 Shared 字段）。这些字段提供的性能比数据槽的性能好，而且它还启用了编译时类型检查。

  • 与线程相关的静态字段相比，数据槽性能较低，并且比较难使用。此外，数据被存储为 Object 类型，因此在使用之前必须将其强制转换为正确的类型。但是，如果在编译时所具有的信息不足以分配静态字段，则可以使用数据槽。 与线程相关的静态字段相比，数据槽性能较低，并且比较难使用。此外，数据被存储为 Object 类型，因此在使用之前必须将其强制转换为正确的类型。但是，如果在编译时所具有的信息不足以分配静态字段，则可以使用数据槽。 与线程相关的静态字段相比，数据槽性能较低，并且比较难使用。此外，数据被存储为 Object 类型，因此在使用之前必须将其强制转换为正确的类型。但是，如果在编译时所具有的信息不足以分配静态字段，则可以使用数据槽。

有关使用 TLS 的更多信息，请参见线程本地存储区：线程相关的静态字段和数据槽。

同样，.NET Framework 提供了两个使用上下文本地存储区的机制：上下文相关的静态字段和数据槽。上下文相关的静态字段是用 ContextStaticAttribute 特性标记的静态字段。使用这两种机制之间的折衷方案类似于使用线程相关的静态字段与使用数据槽之间的折衷方案。 同样，.NET Framework 提供了两个使用上下文本地存储区的机制：上下文相关的静态字段和数据槽。上下文相关的静态字段是用 ContextStaticAttribute 特性标记的静态字段。使用这两种机制之间的折衷方案类似于使用线程相关的静态字段与使用数据槽之间的折衷方案。 同样，.NET Framework 提供了两个使用上下文本地存储区的机制：上下文相关的静态字段和数据槽。上下文相关的静态字段是用 ContextStaticAttribute 特性标记的静态字段。使用这两种机制之间的折衷方案类似于使用线程相关的静态字段与使用数据槽之间的折衷方案。

LocalDataStoreSlot 结构可用作本地存储内存机制，线程和上下文可以使用此机制分别存储线程特定的数据和上下文特定的数据。公共语言运行时在创建每个进程时给它分配一个多槽数据存储区数组。线程或上下文调用各种函数在数据存储区中分配数据槽、在槽内存储和检索数据值、以及释放数据槽以便在线程或上下文过期后重新使用它。 LocalDataStoreSlot 结构可用作本地存储内存机制，线程和上下文可以使用此机制分别存储线程特定的数据和上下文特定的数据。公共语言运行时在创建每个进程时给它分配一个多槽数据存储区数组。线程或上下文调用各种函数在数据存储区中分配数据槽、在槽内存储和检索数据值、以及释放数据槽以便在线程或上下文过期后重新使用它。 LocalDataStoreSlot 结构可用作本地存储内存机制，线程和上下文可以使用此机制分别存储线程特定的数据和上下文特定的数据。公共语言运行时在创建每个进程时给它分配一个多槽数据存储区数组。线程或上下文调用各种函数在数据存储区中分配数据槽、在槽内存储和检索数据值、以及释放数据槽以便在线程或上下文过期后重新使用它。

对于每个线程或上下文，数据槽都是唯一的；它们的值在线程或上下文对象之间不共享。数据槽可根据名称或根据索引号来分配。 对于每个线程或上下文，数据槽都是唯一的；它们的值在线程或上下文对象之间不共享。数据槽可根据名称或根据索引号来分配。

有关存储本地数据的更多信息，请参见 Thread 或 Context。LocalDataStoreSlot 类与诸如 Thread..::.AllocateNamedDataSlot、Context..::.AllocateNamedDataSlot、Thread..::.GetData 和 Context..::.GetData 之类的方法一起使用；它自己不具有您需要使用的任何方法。 有关存储本地数据的更多信息，请参见 Thread 或 Context。LocalDataStoreSlot 类与诸如 Thread..::.AllocateNamedDataSlot、Context..::.AllocateNamedDataSlot、Thread..::.GetData 和 Context..::.GetData 之类的方法一起使用；它自己不具有您需要使用的任何方法。

System System..::.LocalDataStoreSlotLocalDataStoreSlot
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

LocalDataStoreSlot 成员
System 命名空间
Thread
Context


LocalDataStoreSlot 成员

LocalDataStoreSlot 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
LocalDataStoreSlot 类

封装内存槽以存储本地数据。无法继承此类。 封装内存槽以存储本地数据。无法继承此类。

LocalDataStoreSlot 类型公开以下成员。

名称 说明
页首

参考

LocalDataStoreSlot 类
System 命名空间


LocalDataStoreSlot 方法

LocalDataStoreSlot 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
LocalDataStoreSlot 类

LocalDataStoreSlot 类型公开以下成员。

名称 说明
页首

参考

LocalDataStoreSlot 类
System 命名空间


MarshalByRefObject 类

MarshalByRefObject 类
成员

允许在支持远程处理的应用程序中跨应用程序域边界访问对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class MarshalByRefObject
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class MarshalByRefObject
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class MarshalByRefObject abstract
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type MarshalByRefObject =  class end

应用程序域是一个操作系统进程中一个或多个应用程序所驻留的分区。同一应用程序域中的对象直接通信。不同应用程序域中的对象的通信方式有两种：一种是跨应用程序域边界传输对象副本，一种是使用代理交换消息。 应用程序域是一个操作系统进程中一个或多个应用程序所驻留的分区。同一应用程序域中的对象直接通信。不同应用程序域中的对象的通信方式有两种：一种是跨应用程序域边界传输对象副本，一种是使用代理交换消息。 应用程序域是一个操作系统进程中一个或多个应用程序所驻留的分区。同一应用程序域中的对象直接通信。不同应用程序域中的对象的通信方式有两种：一种是跨应用程序域边界传输对象副本，一种是使用代理交换消息。

MarshalByRefObject 是通过使用代理交换消息来跨应用程序域边界进行通信的对象的基类。不是从 MarshalByRefObject 继承的对象根据值隐式封送。当远程应用程序引用根据值封送的对象时，将跨应用程序域边界传递该对象的副本。 MarshalByRefObject 是通过使用代理交换消息来跨应用程序域边界进行通信的对象的基类。不是从 MarshalByRefObject 继承的对象根据值隐式封送。当远程应用程序引用根据值封送的对象时，将跨应用程序域边界传递该对象的副本。 MarshalByRefObject 是通过使用代理交换消息来跨应用程序域边界进行通信的对象的基类。不是从 MarshalByRefObject 继承的对象根据值隐式封送。当远程应用程序引用根据值封送的对象时，将跨应用程序域边界传递该对象的副本。

MarshalByRefObject 对象在本地应用程序域的边界内可直接访问。远程应用程序域中的应用程序首次访问 MarshalByRefObject 时，会向该远程应用程序传递代理。对该代理后面的调用将封送回驻留在本地应用程序域中的对象。 MarshalByRefObject 对象在本地应用程序域的边界内可直接访问。远程应用程序域中的应用程序首次访问 MarshalByRefObject 时，会向该远程应用程序传递代理。对该代理后面的调用将封送回驻留在本地应用程序域中的对象。 MarshalByRefObject 对象在本地应用程序域的边界内可直接访问。远程应用程序域中的应用程序首次访问 MarshalByRefObject 时，会向该远程应用程序传递代理。对该代理后面的调用将封送回驻留在本地应用程序域中的对象。

当跨应用程序域边界使用类型时，类型必须是从 MarshalByRefObject 继承的，而且由于对象的成员在创建它们的应用程序域之外无法使用，所以不得复制对象的状态。

本节包含两个代码示例。第一个代码示例演示如何在另一个应用程序域中创建类的实例。第二个代码示例演示可用于远程处理的简单类。 本节包含两个代码示例。第一个代码示例演示如何在另一个应用程序域中创建类的实例。第二个代码示例演示可用于远程处理的简单类。 本节包含两个代码示例。第一个代码示例演示如何在另一个应用程序域中创建类的实例。第二个代码示例演示可用于远程处理的简单类。

示例 1

下面的代码示例演示在另一个应用程序域中执行代码的最简单方法。该示例定义一个继承 MarshalByRefObject 的 Worker 类，该类的某个方法可用来显示在其中执行代码的应用程序域的名称。该示例在默认应用程序域和新的应用程序域中创建 Worker 的实例。 下面的代码示例演示在另一个应用程序域中执行代码的最简单方法。该示例定义一个继承 MarshalByRefObject 的 Worker 类，该类的某个方法可用来显示在其中执行代码的应用程序域的名称。该示例在默认应用程序域和新的应用程序域中创建 Worker 的实例。 下面的代码示例演示在另一个应用程序域中执行代码的最简单方法。该示例定义一个继承 MarshalByRefObject 的 Worker 类，该类的某个方法可用来显示在其中执行代码的应用程序域的名称。该示例在默认应用程序域和新的应用程序域中创建 Worker 的实例。

说明 说明

包含 Worker 的程序集必须既加载到默认应用程序域又加载到新应用程序域中，但是它可以加载仅在新应用程序域中存在的其他程序集。

Imports System
Imports System.Reflection

Public Class Worker
    Inherits MarshalByRefObject

    Public Sub PrintDomain()
        Console.WriteLine("Object is executing in AppDomain ""{0}""", _
            AppDomain.CurrentDomain.FriendlyName)
    End Sub
End Class

Class Example

    Public Shared Sub Main()

        ' Create an ordinary instance in the current AppDomain
        Dim localWorker As New Worker()
        localWorker.PrintDomain()

        ' Create a new application domain, create an instance
        ' of Worker in the application domain, and execute code
        ' there.
        Dim ad As AppDomain = AppDomain.CreateDomain("New domain")
        Dim remoteWorker As Worker = CType( _
            ad.CreateInstanceAndUnwrap( _
                [Assembly].GetExecutingAssembly().FullName, _
                "Worker"), _
            Worker)
        remoteWorker.PrintDomain()

    End Sub
End Class

' This code produces output similar to the following:
'
'Object is executing in AppDomain "source.exe"
'Object is executing in AppDomain "New domain"

using System;
using System.Reflection;

public class Worker : MarshalByRefObject
{
    public void PrintDomain()
    {
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName);
    }
}

class Example
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        Worker localWorker = new Worker();
        localWorker.PrintDomain();

        // Create a new application domain, create an instance
        // of Worker in the application domain, and execute code
        // there.
        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
            Assembly.GetExecutingAssembly().FullName,
            "Worker");
        remoteWorker.PrintDomain();
    }
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */

using namespace System;
using namespace System::Reflection;

public ref class Worker : MarshalByRefObject
{
public:
    void PrintDomain()
    {
        Console::WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain::CurrentDomain->FriendlyName);
    }
};

void main()
{
    // Create an ordinary instance in the current AppDomain
    Worker^ localWorker = gcnew Worker();
    localWorker->PrintDomain();

    // Create a new application domain, create an instance
    // of Worker in the application domain, and execute code
    // there.
    AppDomain^ ad = AppDomain::CreateDomain("New domain");
    Worker^ remoteWorker = (Worker^) ad->CreateInstanceAndUnwrap(
        Assembly::GetExecutingAssembly()->FullName,
        "Worker");
    remoteWorker->PrintDomain();
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */

示例 2

下面的示例演示从 MarshalByRefObject 派生的、随后将在远程处理中使用的类。

Imports System.Runtime.Remoting
Imports System.Security.Permissions

Public Class SetObjectUriForMarshalTest

    Class TestClass
        Inherits MarshalByRefObject
    End Class

    <SecurityPermission(SecurityAction.Demand, Flags:= SecurityPermissionFlag.RemotingConfiguration )> _
    Public Shared Sub Main()
        Dim obj As TestClass = New TestClass()

        RemotingServices.SetObjectUriForMarshal(obj, "testUri")
        RemotingServices.Marshal(obj)

        Console.WriteLine(RemotingServices.GetObjectUri(obj))
    End Sub

End Class

using System;
using System.Runtime.Remoting;
using System.Security.Permissions;

public class SetObjectUriForMarshalTest  {

    class TestClass : MarshalByRefObject {
    }

    [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.RemotingConfiguration)]
    public static void Main()  {

        TestClass obj = new TestClass();

        RemotingServices.SetObjectUriForMarshal(obj, "testUri");
        RemotingServices.Marshal(obj);

        Console.WriteLine(RemotingServices.GetObjectUri(obj));
    }
}

using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Security::Permissions;

public ref class SetObjectUriForMarshalTest
{
public:
   ref class TestClass: public MarshalByRefObject{};

   [SecurityPermissionAttribute(SecurityAction::Demand, Flags=SecurityPermissionFlag::RemotingConfiguration)]
   static void Main()
   {
      TestClass^ obj = gcnew TestClass;
      RemotingServices::SetObjectUriForMarshal( obj,  "testUri" );
      RemotingServices::Marshal(obj);
      Console::WriteLine( RemotingServices::GetObjectUri( obj ) );
   }

};

System System..::.MarshalByRefObjectMarshalByRefObject

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MarshalByRefObject 成员
System 命名空间


MarshalByRefObject 成员

MarshalByRefObject 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MarshalByRefObject 类

允许在支持远程处理的应用程序中跨应用程序域边界访问对象。

MarshalByRefObject 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

MarshalByRefObject 类
System 命名空间


MarshalByRefObject 构造函数

MarshalByRefObject 构造函数
MarshalByRefObject 类

初始化 MarshalByRefObject 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected MarshalByRefObject()
protected:
MarshalByRefObject()
new : unit -> MarshalByRefObject

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MarshalByRefObject 类
MarshalByRefObject 成员
System 命名空间


MarshalByRefObject 方法

MarshalByRefObject 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MarshalByRefObject 类

MarshalByRefObject 类型公开以下成员。

名称 说明
页首

参考

MarshalByRefObject 类
System 命名空间


MarshalByRefObject ..::.CreateObjRef 方法

MarshalByRefObject
.
.
::
.
CreateObjRef 方法
MarshalByRefObject 类

创建一个对象，该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function CreateObjRef ( _
    requestedType As Type _
) As ObjRef
public virtual ObjRef CreateObjRef(
    Type requestedType
)
public:
virtual ObjRef^ CreateObjRef(
    Type^ requestedType
)
abstract CreateObjRef :
        requestedType:Type -> ObjRef
override CreateObjRef :
        requestedType:Type -> ObjRef

参数

requestedType
类型： System Type
新的 ObjRef 将引用的对象的 Type。

返回值

类型： System.Runtime.Remoting ObjRef
生成代理所需要的信息。
异常 | 条件
RemotingException | 此实例不是有效的远程处理对象。
SecurityException | 直接调用方没有基础结构权限。

CreateObjRef 方法被远程对象创建方法调用，如 AppDomain..::.CreateInstance 和 AppDomain..::.CreateInstanceAndUnwrap。在大多数的情况下没有必要重写此方法。 CreateObjRef 方法被远程对象创建方法调用，如 AppDomain..::.CreateInstance 和 AppDomain..::.CreateInstanceAndUnwrap。在大多数的情况下没有必要重写此方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MarshalByRefObject 类
MarshalByRefObject 成员
System 命名空间


MarshalByRefObject ..::.GetLifetimeService 方法

MarshalByRefObject
.
.
::
.
GetLifetimeService 方法
MarshalByRefObject 类

检索控制此实例的生存期策略的当前生存期服务对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetLifetimeService As Object
public Object GetLifetimeService()
public:
virtual Object^ GetLifetimeService() sealed
abstract GetLifetimeService : unit -> Object
override GetLifetimeService : unit -> Object

返回值

类型： System Object
ILease 类型的对象，用于控制此实例的生存期策略。
异常 | 条件
SecurityException | 直接调用方没有基础结构权限。

有关生存期服务的更多信息，请参见 LifetimeServices 类。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MarshalByRefObject 类
MarshalByRefObject 成员
System 命名空间


MarshalByRefObject ..::.InitializeLifetimeService 方法

MarshalByRefObject
.
.
::
.
InitializeLifetimeService 方法
MarshalByRefObject 类

获取控制此实例的生存期策略的生存期服务对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function InitializeLifetimeService As Object
public virtual Object InitializeLifetimeService()
public:
virtual Object^ InitializeLifetimeService()
abstract InitializeLifetimeService : unit -> Object
override InitializeLifetimeService : unit -> Object

返回值

类型： System Object
ILease 类型的对象，用于控制此实例的生存期策略。这是此实例当前的生存期服务对象（如果存在）；否则为初始化为 LifetimeServices..::.LeaseManagerPollTime 属性的值的新生存期服务对象。 ILease 类型的对象，用于控制此实例的生存期策略。这是此实例当前的生存期服务对象（如果存在）；否则为初始化为 LifetimeServices..::.LeaseManagerPollTime 属性的值的新生存期服务对象。
异常 | 条件
SecurityException | 直接调用方没有基础结构权限。

有关生存期服务的更多信息，请参见 LifetimeServices 类。

下面的代码示例展示创建租约。

Public Class LSClass
    Inherits MarshalByRefObject

    <SecurityPermissionAttribute(SecurityAction.Demand, _
                                 Flags:=SecurityPermissionFlag.Infrastructure)> _
    Public Overrides Function InitializeLifetimeService() As Object
        Dim lease As ILease = CType(MyBase.InitializeLifetimeService(), ILease)
        If lease.CurrentState = LeaseState.Initial Then
            lease.InitialLeaseTime = TimeSpan.FromMinutes(1)
            lease.SponsorshipTimeout = TimeSpan.FromMinutes(2)
            lease.RenewOnCallTime = TimeSpan.FromSeconds(2)
        End If
        Return lease
    End Function

    Public Shared Sub Main()
    ' The main thread processing is here.
    End Sub
End Class

public class MyClass : MarshalByRefObject
{
  [SecurityPermissionAttribute(SecurityAction.Demand,
                               Flags=SecurityPermissionFlag.Infrastructure)]
  public override Object InitializeLifetimeService()
  {
    ILease lease = (ILease)base.InitializeLifetimeService();
    if (lease.CurrentState == LeaseState.Initial)
    {
         lease.InitialLeaseTime = TimeSpan.FromMinutes(1);
         lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
          lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
    }
      return lease;
  }
}

public ref class MyClass: public MarshalByRefObject
{
public:

   [System::Security::Permissions::SecurityPermissionAttribute
   (System::Security::Permissions::SecurityAction::Demand,
   Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]
   virtual Object^ InitializeLifetimeService() override
   {
      ILease^ lease = dynamic_cast<ILease^>(MarshalByRefObject::InitializeLifetimeService());
      if ( lease->CurrentState == LeaseState::Initial )
      {
         lease->InitialLeaseTime = TimeSpan::FromMinutes( 1 );
         lease->SponsorshipTimeout = TimeSpan::FromMinutes( 2 );
         lease->RenewOnCallTime = TimeSpan::FromSeconds( 2 );
      }

      return lease;
   }

};
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MarshalByRefObject 类
MarshalByRefObject 成员
System 命名空间


MarshalByRefObject ..::.MemberwiseClone 方法

MarshalByRefObject
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MarshalByRefObject 类

名称 说明
页首

参考

MarshalByRefObject 类
MarshalByRefObject 成员
System 命名空间


MarshalByRefObject ..::.MemberwiseClone 方法 (Boolean)

MarshalByRefObject
.
.
::
.
MemberwiseClone 方法 (Boolean)
MarshalByRefObject 类

创建当前 MarshalByRefObject 对象的浅表副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Function MemberwiseClone ( _
    cloneIdentity As Boolean _
) As MarshalByRefObject
protected MarshalByRefObject MemberwiseClone(
    bool cloneIdentity
)
protected:
MarshalByRefObject^ MemberwiseClone(
    bool cloneIdentity
)
member MemberwiseClone :
        cloneIdentity:bool -> MarshalByRefObject

参数

cloneIdentity
类型： System Boolean
如果要删除当前 MarshalByRefObject 对象的标识，则为 false，这使该对象在跨远程边界封送时分配一个新标识。值 false 通常比较合适。如果为 true，则将当前 MarshalByRefObject 对象的标识复制到它的克隆项，这会将远程客户端调用路由到远程服务器对象。 如果要删除当前 MarshalByRefObject 对象的标识，则为 false，这使该对象在跨远程边界封送时分配一个新标识。值 false 通常比较合适。如果为 true，则将当前 MarshalByRefObject 对象的标识复制到它的克隆项，这会将远程客户端调用路由到远程服务器对象。 如果要删除当前 MarshalByRefObject 对象的标识，则为 false，这使该对象在跨远程边界封送时分配一个新标识。值 false 通常比较合适。如果为 true，则将当前 MarshalByRefObject 对象的标识复制到它的克隆项，这会将远程客户端调用路由到远程服务器对象。

返回值

类型： System MarshalByRefObject
当前 MarshalByRefObject 对象的浅表副本。

MemberwiseClone(Boolean) 方法创建一个浅表副本，方法是创建一个新的 MarshalByRefObject 对象，然后将当前 MarshalByRefObject 对象的非静态字段复制到该新对象。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制引用但不复制引用的对象；因此，原始对象及其复本引用同一对象。 MemberwiseClone(Boolean) 方法创建一个浅表副本，方法是创建一个新的 MarshalByRefObject 对象，然后将当前 MarshalByRefObject 对象的非静态字段复制到该新对象。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制引用但不复制引用的对象；因此，原始对象及其复本引用同一对象。 MemberwiseClone(Boolean) 方法创建一个浅表副本，方法是创建一个新的 MarshalByRefObject 对象，然后将当前 MarshalByRefObject 对象的非静态字段复制到该新对象。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制引用但不复制引用的对象；因此，原始对象及其复本引用同一对象。

例如，考虑引用对象 A 和 B 的被称为 X 的 MarshalByRefObject 对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的 MarshalByRefObject 对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的 MarshalByRefObject 对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的 MarshalByRefObject 对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的 MarshalByRefObject 对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的 MarshalByRefObject 对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。

MarshalByRefObject 对象的标识定义为远程服务器对象，该远程服务器对象是远程客户端调用的目标。默认情况下，MarshalByRefObject 对象针对成员的复本与原始对象具有相同标识，这通常不是服务器端对象复本（跨远程边界封送到客户端）的正确行为。若要删除复本的标识并在跨远程边界封送复本时向其分配新标识，则指定 false（通常合理），或者指定 true 以便复本保留原始 MarshalByRefObject 对象的标识。MemberwiseClone(Boolean) 方法旨在由开发人员用于实现远程服务器对象。 MarshalByRefObject 对象的标识定义为远程服务器对象，该远程服务器对象是远程客户端调用的目标。默认情况下，MarshalByRefObject 对象针对成员的复本与原始对象具有相同标识，这通常不是服务器端对象复本（跨远程边界封送到客户端）的正确行为。若要删除复本的标识并在跨远程边界封送复本时向其分配新标识，则指定 false（通常合理），或者指定 true 以便复本保留原始 MarshalByRefObject 对象的标识。MemberwiseClone(Boolean) 方法旨在由开发人员用于实现远程服务器对象。 MarshalByRefObject 对象的标识定义为远程服务器对象，该远程服务器对象是远程客户端调用的目标。默认情况下，MarshalByRefObject 对象针对成员的复本与原始对象具有相同标识，这通常不是服务器端对象复本（跨远程边界封送到客户端）的正确行为。若要删除复本的标识并在跨远程边界封送复本时向其分配新标识，则指定 false（通常合理），或者指定 true 以便复本保留原始 MarshalByRefObject 对象的标识。MemberwiseClone(Boolean) 方法旨在由开发人员用于实现远程服务器对象。 MarshalByRefObject 对象的标识定义为远程服务器对象，该远程服务器对象是远程客户端调用的目标。默认情况下，MarshalByRefObject 对象针对成员的复本与原始对象具有相同标识，这通常不是服务器端对象复本（跨远程边界封送到客户端）的正确行为。若要删除复本的标识并在跨远程边界封送复本时向其分配新标识，则指定 false（通常合理），或者指定 true 以便复本保留原始 MarshalByRefObject 对象的标识。MemberwiseClone(Boolean) 方法旨在由开发人员用于实现远程服务器对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

MarshalByRefObject 类
MarshalByRefObject 成员
MemberwiseClone 重载
System 命名空间


Math 类

Math 类
成员

为三角函数、对数函数和其他通用数学函数提供常数和静态方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public NotInheritable Class Math
public static class Math
public ref class Math abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type Math =  class end

下面的示例使用 Math 类中的几个数学函数和三角函数来计算一个梯形的几个内角。

'The following class represents simple functionality of the trapezoid.
Class MathTrapezoidSample

    Private m_longBase As Double
    Private m_shortBase As Double
    Private m_leftLeg As Double
    Private m_rightLeg As Double

    Public Sub New(ByVal longbase As Double, ByVal shortbase As Double, ByVal leftLeg As Double, ByVal rightLeg As Double)
        m_longBase = Math.Abs(longbase)
        m_shortBase = Math.Abs(shortbase)
        m_leftLeg = Math.Abs(leftLeg)
        m_rightLeg = Math.Abs(rightLeg)
    End Sub

    Private Function GetRightSmallBase() As Double
        GetRightSmallBase = (Math.Pow(m_rightLeg, 2) - Math.Pow(m_leftLeg, 2) + Math.Pow(m_longBase, 2) + Math.Pow(m_shortBase, 2) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase))
    End Function

    Public Function GetHeight() As Double
        Dim x As Double = GetRightSmallBase()
        GetHeight = Math.Sqrt(Math.Pow(m_rightLeg, 2) - Math.Pow(x, 2))
    End Function

    Public Function GetSquare() As Double
        GetSquare = GetHeight() * m_longBase / 2
    End Function

    Public Function GetLeftBaseRadianAngle() As Double
        Dim sinX As Double = GetHeight() / m_leftLeg
        GetLeftBaseRadianAngle = Math.Round(Math.Asin(sinX), 2)
    End Function

    Public Function GetRightBaseRadianAngle() As Double
        Dim x As Double = GetRightSmallBase()
        Dim cosX As Double = (Math.Pow(m_rightLeg, 2) + Math.Pow(x, 2) - Math.Pow(GetHeight(), 2)) / (2 * x * m_rightLeg)
        GetRightBaseRadianAngle = Math.Round(Math.Acos(cosX), 2)
    End Function

    Public Function GetLeftBaseDegreeAngle() As Double
        Dim x As Double = GetLeftBaseRadianAngle() * 180 / Math.PI
        GetLeftBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Function GetRightBaseDegreeAngle() As Double
        Dim x As Double = GetRightBaseRadianAngle() * 180 / Math.PI
        GetRightBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Shared Sub Main()
        Dim trpz As MathTrapezoidSample = New MathTrapezoidSample(20, 10, 8, 6)
        Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0")
        Dim h As Double = trpz.GetHeight()
        Console.WriteLine("Trapezoid height is: " + h.ToString())
        Dim dxR As Double = trpz.GetLeftBaseRadianAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians")
        Dim dyR As Double = trpz.GetRightBaseRadianAngle()
        Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians")
        Dim dxD As Double = trpz.GetLeftBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees")
        Dim dyD As Double = trpz.GetRightBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees")
    End Sub

End Class

    /// <summary>
    /// The following class represents simple functionality of the trapezoid.
    /// </summary>
    class MathTrapezoidSample
    {
        private double m_longBase;
        private double m_shortBase;
        private double m_leftLeg;
        private double m_rightLeg;

        public MathTrapezoidSample(double longbase, double shortbase, double leftLeg, double rightLeg)
        {
            m_longBase = Math.Abs(longbase);
            m_shortBase = Math.Abs(shortbase);
            m_leftLeg = Math.Abs(leftLeg);
            m_rightLeg = Math.Abs(rightLeg);
        }

        private double GetRightSmallBase()
        {
            return (Math.Pow(m_rightLeg,2.0) - Math.Pow(m_leftLeg,2.0) + Math.Pow(m_longBase,2.0) + Math.Pow(m_shortBase,2.0) - 2* m_shortBase * m_longBase)/ (2*(m_longBase - m_shortBase));
        }

        public double GetHeight()
        {
            double x = GetRightSmallBase();
            return Math.Sqrt(Math.Pow(m_rightLeg,2.0) - Math.Pow(x,2.0));
        }

        public double GetSquare()
        {
            return GetHeight() * m_longBase / 2.0;
        }

        public double GetLeftBaseRadianAngle()
        {
            double sinX = GetHeight()/m_leftLeg;
            return Math.Round(Math.Asin(sinX),2);
        }

        public double GetRightBaseRadianAngle()
        {
            double x = GetRightSmallBase();
            double cosX = (Math.Pow(m_rightLeg,2.0) + Math.Pow(x,2.0) - Math.Pow(GetHeight(),2.0))/(2*x*m_rightLeg);
            return Math.Round(Math.Acos(cosX),2);
        }

        public double GetLeftBaseDegreeAngle()
        {
            double x = GetLeftBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        public double GetRightBaseDegreeAngle()
        {
            double x = GetRightBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        static void Main(string[] args)
        {
            MathTrapezoidSample trpz = new MathTrapezoidSample(20.0, 10.0, 8.0, 6.0);
            Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0");
            double h = trpz.GetHeight();
            Console.WriteLine("Trapezoid height is: " + h.ToString());
            double dxR = trpz.GetLeftBaseRadianAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians");
            double dyR = trpz.GetRightBaseRadianAngle();
            Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians");
            double dxD = trpz.GetLeftBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees");
            double dyD = trpz.GetRightBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees");
        }
    }

/// <summary>
/// The following class represents simple functionality of the trapezoid.
/// </summary>
public ref class MathTrapezoidSample
{
private:
   double m_longBase;
   double m_shortBase;
   double m_leftLeg;
   double m_rightLeg;

public:
   MathTrapezoidSample( double longbase, double shortbase, double leftLeg, double rightLeg )
   {
      m_longBase = Math::Abs( longbase );
      m_shortBase = Math::Abs( shortbase );
      m_leftLeg = Math::Abs( leftLeg );
      m_rightLeg = Math::Abs( rightLeg );
   }

private:
   double GetRightSmallBase()
   {
      return (Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( m_leftLeg, 2.0 ) + Math::Pow( m_longBase, 2.0 ) + Math::Pow( m_shortBase, 2.0 ) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase));
   }

public:
   double GetHeight()
   {
      double x = GetRightSmallBase();
      return Math::Sqrt( Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( x, 2.0 ) );
   }

   double GetSquare()
   {
      return GetHeight() * m_longBase / 2.0;
   }

   double GetLeftBaseRadianAngle()
   {
      double sinX = GetHeight() / m_leftLeg;
      return Math::Round( Math::Asin( sinX ), 2 );
   }

   double GetRightBaseRadianAngle()
   {
      double x = GetRightSmallBase();
      double cosX = (Math::Pow( m_rightLeg, 2.0 ) + Math::Pow( x, 2.0 ) - Math::Pow( GetHeight(), 2.0 )) / (2 * x * m_rightLeg);
      return Math::Round( Math::Acos( cosX ), 2 );
   }

   double GetLeftBaseDegreeAngle()
   {
      double x = GetLeftBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

   double GetRightBaseDegreeAngle()
   {
      double x = GetRightBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

};

int main()
{
   MathTrapezoidSample^ trpz = gcnew MathTrapezoidSample( 20.0,10.0,8.0,6.0 );
   Console::WriteLine( "The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0" );
   double h = trpz->GetHeight();
   Console::WriteLine( "Trapezoid height is: {0}", h.ToString() );
   double dxR = trpz->GetLeftBaseRadianAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Radians", dxR.ToString() );
   double dyR = trpz->GetRightBaseRadianAngle();
   Console::WriteLine( "Trapezoid right base angle is: {0} Radians", dyR.ToString() );
   double dxD = trpz->GetLeftBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dxD.ToString() );
   double dyD = trpz->GetRightBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dyD.ToString() );
}

System System..::.MathMath
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 成员
System 命名空间


Math 成员

Math 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

为三角函数、对数函数和其他通用数学函数提供常数和静态方法。

Math 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Math 类
System 命名空间


Math 字段

Math 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

Math 类型公开以下成员。

名称 说明
页首

参考

Math 类
System 命名空间


Math ..::.E 字段

Math
.
.
::
.
E 字段
Math 类

表示自然对数的底，它由常数 e 指定。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const E As Double
public const double E
public:
literal double E
static val mutable E: float

此字段的值为 2.7182818284590452354。

下面的示例将 E 同通过幂级数计算出的值进行比较。

' Example for the Math.E field.
Imports System
Imports Microsoft.VisualBasic

Module EField

    Sub Main()
        Console.WriteLine( _
            "This example of Math.E = {0:E16}" & vbCrLf & _
            "generates the following output." & vbCrLf, _
            Math.E )
        Console.WriteLine( _
            "Define the power series PS(n) = Sum(k->0,n)[1/k!]" )
        Console.WriteLine( " (limit n->infinity)PS(n) = e" )
        Console.WriteLine( _
            "Display PS(n) and Math.E - PS(n), " & _
            "and stop when delta < 1.0E-15" & vbCrLf )

        CalcPowerSeries()
    End Sub 'Main

    ' Approximate E with a power series.
    Sub CalcPowerSeries()
        Dim factorial As Double = 1.0
        Dim PS As Double = 0.0

        ' Stop iterating when the series converges,
        ' and prevent a runaway process.
        Dim n As Integer
        For n = 0 To 999

            ' Calculate a running factorial.
            If n > 0 Then
                factorial *= System.Convert.ToDouble(n)
            End If

            ' Calculate and display the power series.
            PS += 1.0 / factorial
            Console.WriteLine( _
                "PS({0:D2}) = {1:E16},  Math.E - PS({0:D2}) = {2:E16}", _
                n, PS, Math.E - PS )

            ' Exit when the series converges.
            If Math.Abs( Math.E - PS ) < 1.0E-15 Then
                Exit For
            End If
        Next n
    End Sub 'CalcPowerSeries
    End Module 'EField

' This example of Math.E = 2.7182818284590451E+000
' generates the following output.
'
' Define the power series PS(n) = Sum(k->0,n)[1/k!]
'  (limit n->infinity)PS(n) = e
' Display PS(n) and Math.E - PS(n), and stop when delta < 1.0E-15
'
' PS(00) = 1.0000000000000000E+000,  Math.E - PS(00) = 1.7182818284590451E+000
' PS(01) = 2.0000000000000000E+000,  Math.E - PS(01) = 7.1828182845904509E-001
' PS(02) = 2.5000000000000000E+000,  Math.E - PS(02) = 2.1828182845904509E-001
' PS(03) = 2.6666666666666665E+000,  Math.E - PS(03) = 5.1615161792378572E-002
' PS(04) = 2.7083333333333330E+000,  Math.E - PS(04) = 9.9484951257120535E-003
' PS(05) = 2.7166666666666663E+000,  Math.E - PS(05) = 1.6151617923787498E-003
' PS(06) = 2.7180555555555554E+000,  Math.E - PS(06) = 2.2627290348964380E-004
' PS(07) = 2.7182539682539684E+000,  Math.E - PS(07) = 2.7860205076724043E-005
' PS(08) = 2.7182787698412700E+000,  Math.E - PS(08) = 3.0586177750535626E-006
' PS(09) = 2.7182815255731922E+000,  Math.E - PS(09) = 3.0288585284310443E-007
' PS(10) = 2.7182818011463845E+000,  Math.E - PS(10) = 2.7312660577649694E-008
' PS(11) = 2.7182818261984929E+000,  Math.E - PS(11) = 2.2605521898810821E-009
' PS(12) = 2.7182818282861687E+000,  Math.E - PS(12) = 1.7287637987806193E-010
' PS(13) = 2.7182818284467594E+000,  Math.E - PS(13) = 1.2285727990501982E-011
' PS(14) = 2.7182818284582302E+000,  Math.E - PS(14) = 8.1490370007486490E-013
' PS(15) = 2.7182818284589949E+000,  Math.E - PS(15) = 5.0182080713057076E-014
' PS(16) = 2.7182818284590429E+000,  Math.E - PS(16) = 2.2204460492503131E-015
' PS(17) = 2.7182818284590455E+000,  Math.E - PS(17) = -4.4408920985006262E-016

// Example for the Math.E field.
using System;

class EField
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of Math.E == {0:E16}\n" +
            "generates the following output.\n",
            Math.E );
        Console.WriteLine(
            "Define the power series PS(n) = Sum(k->0,n)[1/k!]" );
        Console.WriteLine( " (limit n->infinity)PS(n) == e" );
        Console.WriteLine(
            "Display PS(n) and Math.E - PS(n), " +
            "and stop when delta < 1.0E-15\n" );

        CalcPowerSeries();
    }

    // Approximate E with a power series.
    static void CalcPowerSeries()
    {
        double factorial = 1.0;
        double PS = 0.0;

        // Stop iterating when the series converges,
        // and prevent a runaway process.
        for( int n = 0; n < 999 && Math.Abs( Math.E - PS ) > 1.0E-15; n++ )
        {
            // Calculate a running factorial.
            if( n > 0 )
                factorial *= (double)n;

            // Calculate and display the power series.
            PS += 1.0 / factorial;
            Console.WriteLine(
                "PS({0:D2}) == {1:E16},  Math.E - PS({0:D2}) == {2:E16}",
                n, PS, Math.E - PS );
        }
    }
}

/*
This example of Math.E == 2.7182818284590451E+000
generates the following output.

Define the power series PS(n) = Sum(k->0,n)[1/k!]
 (limit n->infinity)PS(n) == e
Display PS(n) and Math.E - PS(n), and stop when delta < 1.0E-15

PS(00) == 1.0000000000000000E+000,  Math.E - PS(00) == 1.7182818284590451E+000
PS(01) == 2.0000000000000000E+000,  Math.E - PS(01) == 7.1828182845904509E-001
PS(02) == 2.5000000000000000E+000,  Math.E - PS(02) == 2.1828182845904509E-001
PS(03) == 2.6666666666666665E+000,  Math.E - PS(03) == 5.1615161792378572E-002
PS(04) == 2.7083333333333330E+000,  Math.E - PS(04) == 9.9484951257120535E-003
PS(05) == 2.7166666666666663E+000,  Math.E - PS(05) == 1.6151617923787498E-003
PS(06) == 2.7180555555555554E+000,  Math.E - PS(06) == 2.2627290348964380E-004
PS(07) == 2.7182539682539684E+000,  Math.E - PS(07) == 2.7860205076724043E-005
PS(08) == 2.7182787698412700E+000,  Math.E - PS(08) == 3.0586177750535626E-006
PS(09) == 2.7182815255731922E+000,  Math.E - PS(09) == 3.0288585284310443E-007
PS(10) == 2.7182818011463845E+000,  Math.E - PS(10) == 2.7312660577649694E-008
PS(11) == 2.7182818261984929E+000,  Math.E - PS(11) == 2.2605521898810821E-009
PS(12) == 2.7182818282861687E+000,  Math.E - PS(12) == 1.7287637987806193E-010
PS(13) == 2.7182818284467594E+000,  Math.E - PS(13) == 1.2285727990501982E-011
PS(14) == 2.7182818284582302E+000,  Math.E - PS(14) == 8.1490370007486490E-013
PS(15) == 2.7182818284589949E+000,  Math.E - PS(15) == 5.0182080713057076E-014
PS(16) == 2.7182818284590429E+000,  Math.E - PS(16) == 2.2204460492503131E-015
PS(17) == 2.7182818284590455E+000,  Math.E - PS(17) == -4.4408920985006262E-016
*/

// Example for the Math::E field.
using namespace System;

// Approximate E with a power series.
void CalcPowerSeries()
{
   double factorial = 1.0;
   double PS = 0.0;

   // Stop iterating when the series converges,
   // and prevent a runaway process.
   for ( int n = 0; n < 999 && Math::Abs( Math::E - PS ) > 1.0E-15; n++ )
   {

      // Calculate a running factorial.
      if ( n > 0 )
            factorial *= (double)n;

      // Calculate and display the power series.
      PS += 1.0 / factorial;
      Console::WriteLine( "PS({0:D2}) == {1:E16},  Math::E - PS({0:D2}) == {2:E16}", n, PS, Math::E - PS );

   }
}

int main()
{
   Console::WriteLine( "This example of Math::E == {0:E16}\n"
   "generates the following output.\n", Math::E );
   Console::WriteLine( "Define the power series PS(n) = Sum(k->0,n)[1/k!]" );
   Console::WriteLine( " (limit n->infinity)PS(n) == e" );
   Console::WriteLine( "Display PS(n) and Math::E - PS(n), "
   "and stop when delta < 1.0E-15\n" );
   CalcPowerSeries();
}

/*
This example of Math::E == 2.7182818284590451E+000
generates the following output.

Define the power series PS(n) = Sum(k->0,n)[1/k!]
 (limit n->infinity)PS(n) == e
Display PS(n) and Math::E - PS(n), and stop when delta < 1.0E-15

PS(00) == 1.0000000000000000E+000,  Math::E - PS(00) == 1.7182818284590451E+000
PS(01) == 2.0000000000000000E+000,  Math::E - PS(01) == 7.1828182845904509E-001
PS(02) == 2.5000000000000000E+000,  Math::E - PS(02) == 2.1828182845904509E-001
PS(03) == 2.6666666666666665E+000,  Math::E - PS(03) == 5.1615161792378572E-002
PS(04) == 2.7083333333333330E+000,  Math::E - PS(04) == 9.9484951257120535E-003
PS(05) == 2.7166666666666663E+000,  Math::E - PS(05) == 1.6151617923787498E-003
PS(06) == 2.7180555555555554E+000,  Math::E - PS(06) == 2.2627290348964380E-004
PS(07) == 2.7182539682539684E+000,  Math::E - PS(07) == 2.7860205076724043E-005
PS(08) == 2.7182787698412700E+000,  Math::E - PS(08) == 3.0586177750535626E-006
PS(09) == 2.7182815255731922E+000,  Math::E - PS(09) == 3.0288585284310443E-007
PS(10) == 2.7182818011463845E+000,  Math::E - PS(10) == 2.7312660577649694E-008
PS(11) == 2.7182818261984929E+000,  Math::E - PS(11) == 2.2605521898810821E-009
PS(12) == 2.7182818282861687E+000,  Math::E - PS(12) == 1.7287637987806193E-010
PS(13) == 2.7182818284467594E+000,  Math::E - PS(13) == 1.2285727990501982E-011
PS(14) == 2.7182818284582302E+000,  Math::E - PS(14) == 8.1490370007486490E-013
PS(15) == 2.7182818284589949E+000,  Math::E - PS(15) == 5.0182080713057076E-014
PS(16) == 2.7182818284590429E+000,  Math::E - PS(16) == 2.2204460492503131E-015
PS(17) == 2.7182818284590455E+000,  Math::E - PS(17) == -4.4408920985006262E-016
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.PI 字段

Math
.
.
::
.
PI 字段
Math 类

表示圆的周长与其直径的比值，它通过常数 n 指定。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const PI As Double
public const double PI
public:
literal double PI
static val mutable PI: float

此字段的值为 3.14159265358979323846。

下面的示例使用 PI 来帮助计算给定梯形的内角。

'The following class represents simple functionality of the trapezoid.
Class MathTrapezoidSample

    Private m_longBase As Double
    Private m_shortBase As Double
    Private m_leftLeg As Double
    Private m_rightLeg As Double

    Public Sub New(ByVal longbase As Double, ByVal shortbase As Double, ByVal leftLeg As Double, ByVal rightLeg As Double)
        m_longBase = Math.Abs(longbase)
        m_shortBase = Math.Abs(shortbase)
        m_leftLeg = Math.Abs(leftLeg)
        m_rightLeg = Math.Abs(rightLeg)
    End Sub

    Private Function GetRightSmallBase() As Double
        GetRightSmallBase = (Math.Pow(m_rightLeg, 2) - Math.Pow(m_leftLeg, 2) + Math.Pow(m_longBase, 2) + Math.Pow(m_shortBase, 2) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase))
    End Function

    Public Function GetHeight() As Double
        Dim x As Double = GetRightSmallBase()
        GetHeight = Math.Sqrt(Math.Pow(m_rightLeg, 2) - Math.Pow(x, 2))
    End Function

    Public Function GetSquare() As Double
        GetSquare = GetHeight() * m_longBase / 2
    End Function

    Public Function GetLeftBaseRadianAngle() As Double
        Dim sinX As Double = GetHeight() / m_leftLeg
        GetLeftBaseRadianAngle = Math.Round(Math.Asin(sinX), 2)
    End Function

    Public Function GetRightBaseRadianAngle() As Double
        Dim x As Double = GetRightSmallBase()
        Dim cosX As Double = (Math.Pow(m_rightLeg, 2) + Math.Pow(x, 2) - Math.Pow(GetHeight(), 2)) / (2 * x * m_rightLeg)
        GetRightBaseRadianAngle = Math.Round(Math.Acos(cosX), 2)
    End Function

    Public Function GetLeftBaseDegreeAngle() As Double
        Dim x As Double = GetLeftBaseRadianAngle() * 180 / Math.PI
        GetLeftBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Function GetRightBaseDegreeAngle() As Double
        Dim x As Double = GetRightBaseRadianAngle() * 180 / Math.PI
        GetRightBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Shared Sub Main()
        Dim trpz As MathTrapezoidSample = New MathTrapezoidSample(20, 10, 8, 6)
        Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0")
        Dim h As Double = trpz.GetHeight()
        Console.WriteLine("Trapezoid height is: " + h.ToString())
        Dim dxR As Double = trpz.GetLeftBaseRadianAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians")
        Dim dyR As Double = trpz.GetRightBaseRadianAngle()
        Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians")
        Dim dxD As Double = trpz.GetLeftBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees")
        Dim dyD As Double = trpz.GetRightBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees")
    End Sub

End Class

    /// <summary>
    /// The following class represents simple functionality of the trapezoid.
    /// </summary>
    class MathTrapezoidSample
    {
        private double m_longBase;
        private double m_shortBase;
        private double m_leftLeg;
        private double m_rightLeg;

        public MathTrapezoidSample(double longbase, double shortbase, double leftLeg, double rightLeg)
        {
            m_longBase = Math.Abs(longbase);
            m_shortBase = Math.Abs(shortbase);
            m_leftLeg = Math.Abs(leftLeg);
            m_rightLeg = Math.Abs(rightLeg);
        }

        private double GetRightSmallBase()
        {
            return (Math.Pow(m_rightLeg,2.0) - Math.Pow(m_leftLeg,2.0) + Math.Pow(m_longBase,2.0) + Math.Pow(m_shortBase,2.0) - 2* m_shortBase * m_longBase)/ (2*(m_longBase - m_shortBase));
        }

        public double GetHeight()
        {
            double x = GetRightSmallBase();
            return Math.Sqrt(Math.Pow(m_rightLeg,2.0) - Math.Pow(x,2.0));
        }

        public double GetSquare()
        {
            return GetHeight() * m_longBase / 2.0;
        }

        public double GetLeftBaseRadianAngle()
        {
            double sinX = GetHeight()/m_leftLeg;
            return Math.Round(Math.Asin(sinX),2);
        }

        public double GetRightBaseRadianAngle()
        {
            double x = GetRightSmallBase();
            double cosX = (Math.Pow(m_rightLeg,2.0) + Math.Pow(x,2.0) - Math.Pow(GetHeight(),2.0))/(2*x*m_rightLeg);
            return Math.Round(Math.Acos(cosX),2);
        }

        public double GetLeftBaseDegreeAngle()
        {
            double x = GetLeftBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        public double GetRightBaseDegreeAngle()
        {
            double x = GetRightBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        static void Main(string[] args)
        {
            MathTrapezoidSample trpz = new MathTrapezoidSample(20.0, 10.0, 8.0, 6.0);
            Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0");
            double h = trpz.GetHeight();
            Console.WriteLine("Trapezoid height is: " + h.ToString());
            double dxR = trpz.GetLeftBaseRadianAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians");
            double dyR = trpz.GetRightBaseRadianAngle();
            Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians");
            double dxD = trpz.GetLeftBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees");
            double dyD = trpz.GetRightBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees");
        }
    }

/// <summary>
/// The following class represents simple functionality of the trapezoid.
/// </summary>
public ref class MathTrapezoidSample
{
private:
   double m_longBase;
   double m_shortBase;
   double m_leftLeg;
   double m_rightLeg;

public:
   MathTrapezoidSample( double longbase, double shortbase, double leftLeg, double rightLeg )
   {
      m_longBase = Math::Abs( longbase );
      m_shortBase = Math::Abs( shortbase );
      m_leftLeg = Math::Abs( leftLeg );
      m_rightLeg = Math::Abs( rightLeg );
   }

private:
   double GetRightSmallBase()
   {
      return (Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( m_leftLeg, 2.0 ) + Math::Pow( m_longBase, 2.0 ) + Math::Pow( m_shortBase, 2.0 ) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase));
   }

public:
   double GetHeight()
   {
      double x = GetRightSmallBase();
      return Math::Sqrt( Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( x, 2.0 ) );
   }

   double GetSquare()
   {
      return GetHeight() * m_longBase / 2.0;
   }

   double GetLeftBaseRadianAngle()
   {
      double sinX = GetHeight() / m_leftLeg;
      return Math::Round( Math::Asin( sinX ), 2 );
   }

   double GetRightBaseRadianAngle()
   {
      double x = GetRightSmallBase();
      double cosX = (Math::Pow( m_rightLeg, 2.0 ) + Math::Pow( x, 2.0 ) - Math::Pow( GetHeight(), 2.0 )) / (2 * x * m_rightLeg);
      return Math::Round( Math::Acos( cosX ), 2 );
   }

   double GetLeftBaseDegreeAngle()
   {
      double x = GetLeftBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

   double GetRightBaseDegreeAngle()
   {
      double x = GetRightBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

};

int main()
{
   MathTrapezoidSample^ trpz = gcnew MathTrapezoidSample( 20.0,10.0,8.0,6.0 );
   Console::WriteLine( "The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0" );
   double h = trpz->GetHeight();
   Console::WriteLine( "Trapezoid height is: {0}", h.ToString() );
   double dxR = trpz->GetLeftBaseRadianAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Radians", dxR.ToString() );
   double dyR = trpz->GetRightBaseRadianAngle();
   Console::WriteLine( "Trapezoid right base angle is: {0} Radians", dyR.ToString() );
   double dxD = trpz->GetLeftBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dxD.ToString() );
   double dyD = trpz->GetRightBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dyD.ToString() );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math 方法

Math 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

Math 类型公开以下成员。

名称 说明
页首

参考

Math 类
System 命名空间


Math ..::.Abs 方法

Math
.
.
::
.
Abs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

返回指定数字的绝对值。

名称 说明
页首

参考

Math 类
Math 成员
System 命名空间


Math ..::.Abs 方法 (Decimal)

Math
.
.
::
.
Abs 方法 (Decimal)
Math 类

返回 Decimal 数字的绝对值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Abs ( _
    value As Decimal _
) As Decimal
public static decimal Abs(
    decimal value
)
public:
static Decimal Abs(
    Decimal value
)
static member Abs :
        value:decimal -> decimal

参数

value
类型： System Decimal
MinValue≤ 值 ≤MaxValue 范围内的一个数字。

返回值

类型： System Decimal
Decimal 值 x，满足 0 ≤ x ≤MaxValue。

下面的示例使用 Abs(Decimal) 方法获取许多 Decimal 值的绝对值。

Dim decimals() As Decimal = { Decimal.MaxValue, 12.45D, 0D, -19.69D, _
                              Decimal.MinValue }
For Each value As Decimal In decimals
   Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value))
Next
' The example displays the following output:
'       Abs(79228162514264337593543950335) = 79228162514264337593543950335
'       Abs(12.45) = 12.45
'       Abs(0) = 0
'       Abs(-19.69) = 19.69
'       Abs(-79228162514264337593543950335) = 79228162514264337593543950335

decimal[] decimals = { Decimal.MaxValue, 12.45M, 0M, -19.69M,
                       Decimal.MinValue };
foreach (decimal value in decimals)
   Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value));

// The example displays the following output:
//       Abs(79228162514264337593543950335) = 79228162514264337593543950335
//       Abs(12.45) = 12.45
//       Abs(0) = 0
//       Abs(-19.69) = 19.69
//       Abs(-79228162514264337593543950335) = 79228162514264337593543950335

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Abs 重载
System 命名空间


Math ..::.Abs 方法 (Double)

Math
.
.
::
.
Abs 方法 (Double)
Math 类

返回双精度浮点数字的绝对值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Abs ( _
    value As Double _
) As Double
public static double Abs(
    double value
)
public:
static double Abs(
    double value
)
static member Abs :
        value:float -> float

参数

value
类型： System Double
MinValue≤value≤MaxValue 范围内的一个数字。

返回值

类型： System Double
一个双精度浮点数 x，满足 0 ≤ x ≤MaxValue。

如果 value 等于 NegativeInfinity 或 PositiveInfinity，则返回值为 PositiveInfinity。如果 value 等于 NaN，则返回值为 NaN。 如果 value 等于 NegativeInfinity 或 PositiveInfinity，则返回值为 PositiveInfinity。如果 value 等于 NaN，则返回值为 NaN。

下面的示例使用 Abs(Double) 方法获取许多 Double 值的绝对值。

Dim doubles() As Double = { Double.MaxValue, 16.354e-17, 15.098123, 0, _
                            -19.069713, -15.058e18, Double.MinValue }
For Each value As Double In doubles
   Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value))
Next
' The example displays the following output:
'       Abs(1.79769313486232E+308) = 1.79769313486232E+308
'       Abs(1.6354E-16) = 1.6354E-16
'       Abs(15.098123) = 15.098123
'       Abs(0) = 0
'       Abs(-19.069713) = 19.069713
'       Abs(-1.5058E+19) = 1.5058E+19
'       Abs(-1.79769313486232E+308) = 1.79769313486232E+308

double[] doubles = { Double.MaxValue, 16.354e-17, 15.098123, 0,
                     -19.069713, -15.058e18, Double.MinValue };
foreach (double value in doubles)
   Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value));

// The example displays the following output:
//       Abs(1.79769313486232E+308) = 1.79769313486232E+308
//       Abs(1.6354E-16) = 1.6354E-16
//       Abs(15.098123) = 15.098123
//       Abs(0) = 0
//       Abs(-19.069713) = 19.069713
//       Abs(-1.5058E+19) = 1.5058E+19
//       Abs(-1.79769313486232E+308) = 1.79769313486232E+308

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Abs 重载
System 命名空间


Math ..::.Abs 方法 (Int16)

Math
.
.
::
.
Abs 方法 (Int16)
Math 类

返回 16 位有符号整数的绝对值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Abs ( _
    value As Short _
) As Short
public static short Abs(
    short value
)
public:
static short Abs(
    short value
)
static member Abs :
        value:int16 -> int16

参数

value
类型： System Int16
MinValue < value≤MaxValue 范围内的一个数字。

返回值

类型： System Int16
16 位有符号整数 x，满足 0 ≤ x ≤MaxValue。
异常 | 条件
OverflowException | value 等于 MinValue。

下面的示例使用 Abs(Int16) 方法获取许多 Int16 值的绝对值。

Dim values() As Short = { Int16.MaxValue, 10328, 0, -1476, Int16.MinValue }
For Each value As Short In values
   Try
      Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value))
   Catch e As OverflowException
      Console.WriteLine("Unable to calculate the absolute value of {0}.", _
                        value)
   End Try
Next
' The example displays the following output:
'       Abs(32767) = 32767
'       Abs(10328) = 10328
'       Abs(0) = 0
'       Abs(-1476) = 1476
'       Unable to calculate the absolute value of -32768.

short[] values = { Int16.MaxValue, 10328, 0, -1476, Int16.MinValue };
foreach (short value in values)
{
   try {
      Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value));
   }
   catch (OverflowException) {
      Console.WriteLine("Unable to calculate the absolute value of {0}.",
                        value);
   }
}
// The example displays the following output:
//       Abs(32767) = 32767
//       Abs(10328) = 10328
//       Abs(0) = 0
//       Abs(-1476) = 1476
//       Unable to calculate the absolute value of -32768.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Abs 重载
System 命名空间


Math ..::.Abs 方法 (Int32)

Math
.
.
::
.
Abs 方法 (Int32)
Math 类

返回 32 位有符号整数的绝对值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Abs ( _
    value As Integer _
) As Integer
public static int Abs(
    int value
)
public:
static int Abs(
    int value
)
static member Abs :
        value:int -> int

参数

value
类型： System Int32
MinValue < value≤MaxValue 范围内的一个数字。

返回值

类型： System Int32
32 位有符号整数 x，满足 0 ≤ x ≤MaxValue。
异常 | 条件
OverflowException | value 等于 MinValue。

下面的示例使用 Abs(Int32) 方法获取许多 Int32 值的绝对值。

Dim values() As Integer = { Int32.MaxValue, 16921, 0, -804128, Int32.MinValue }
For Each value As Integer In values
   Try
      Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value))
   Catch e As OverflowException
      Console.WriteLine("Unable to calculate the absolute value of {0}.", _
                        value)
   End Try
Next
' The example displays the following output:
'       Abs(2147483647) = 2147483647
'       Abs(16921) = 16921
'       Abs(0) = 0
'       Abs(-804128) = 804128
'       Unable to calculate the absolute value of -2147483648.

int[] values = { Int32.MaxValue, 16921, 0, -804128, Int32.MinValue };
foreach (int value in values)
{
   try {
      Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value));
   }
   catch (OverflowException) {
      Console.WriteLine("Unable to calculate the absolute value of {0}.",
                        value);
   }
}
// The example displays the following output:
//       Abs(2147483647) = 2147483647
//       Abs(16921) = 16921
//       Abs(0) = 0
//       Abs(-804128) = 804128
//       Unable to calculate the absolute value of -2147483648.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Abs 重载
System 命名空间


Math ..::.Abs 方法 (Int64)

Math
.
.
::
.
Abs 方法 (Int64)
Math 类

返回 64 位有符号整数的绝对值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Abs ( _
    value As Long _
) As Long
public static long Abs(
    long value
)
public:
static long long Abs(
    long long value
)
static member Abs :
        value:int64 -> int64

参数

value
类型： System Int64
MinValue < value≤MaxValue 范围内的一个数字。

返回值

类型： System Int64
64 位有符号整数 x，满足 0 ≤ x ≤MaxValue。
异常 | 条件
OverflowException | value 等于 MinValue。

下面的示例使用 Abs(Int64) 方法获取许多 Int64 值的绝对值。

Dim values() As Long = { Int64.MaxValue, 109013, 0, -6871982, Int64.MinValue }
For Each value As Long In values
   Try
      Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value))
   Catch e As OverflowException
      Console.WriteLine("Unable to calculate the absolute value of {0}.", _
                        value)
   End Try
Next
' The example displays the following output:
'       Abs(9223372036854775807) = 9223372036854775807
'       Abs(109013) = 109013
'       Abs(0) = 0
'       Abs(-6871982) = 6871982
'       Unable to calculate the absolute value of -9223372036854775808.

long[] values = { Int64.MaxValue, 109013, 0, -6871982, Int64.MinValue };
foreach (long value in values)
{
   try {
      Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value));
   }
   catch (OverflowException) {
      Console.WriteLine("Unable to calculate the absolute value of {0}.",
                        value);
   }
}
// The example displays the following output:
//       Abs(9223372036854775807) = 9223372036854775807
//       Abs(109013) = 109013
//       Abs(0) = 0
//       Abs(-6871982) = 6871982
//       Unable to calculate the absolute value of -9223372036854775808.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Abs 重载
System 命名空间


Math ..::.Abs 方法 (SByte)

Math
.
.
::
.
Abs 方法 (SByte)
Math 类

返回 8 位有符号整数的绝对值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Abs ( _
    value As SByte _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte Abs(
    sbyte value
)
[CLSCompliantAttribute(false)]
public:
static signed char Abs(
    signed char value
)
[<CLSCompliantAttribute(false)>]
static member Abs :
        value:sbyte -> sbyte

参数

value
类型： System SByte
MinValue < value≤MaxValue 范围内的一个数字。

返回值

类型： System SByte
8 位有符号整数 x，满足 0 ≤ x ≤MaxValue。
异常 | 条件
OverflowException | value 等于 MinValue。

下面的示例使用 Abs(SByte) 方法获取许多 SByte 值的绝对值。

Dim values() As SByte = { SByte.MaxValue, 98, 0, -32, SByte.MinValue }
For Each value As SByte In values
   Try
      Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value))
   Catch e As OverflowException
      Console.WriteLine("Unable to calculate the absolute value of {0}.", _
                        value)
   End Try
Next
' The example displays the following output:
'       Abs(127) = 127
'       Abs(98) = 98
'       Abs(0) = 0
'       Abs(-32) = 32
'       Unable to calculate the absolute value of -128.

sbyte[] values = { SByte.MaxValue, 98, 0, -32, SByte.MinValue };
foreach (sbyte value in values)
{
   try {
      Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value));
   }
   catch (OverflowException) {
      Console.WriteLine("Unable to calculate the absolute value of {0}.",
                        value);
   }
}
// The example displays the following output:
//       Abs(127) = 127
//       Abs(98) = 98
//       Abs(0) = 0
//       Abs(-32) = 32
//       Unable to calculate the absolute value of -128.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Abs 重载
System 命名空间


Math ..::.Abs 方法 (Single)

Math
.
.
::
.
Abs 方法 (Single)
Math 类

返回单精度浮点数字的绝对值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Abs ( _
    value As Single _
) As Single
public static float Abs(
    float value
)
public:
static float Abs(
    float value
)
static member Abs :
        value:float32 -> float32

参数

value
类型： System Single
MinValue≤value≤MaxValue 范围内的一个数字。

返回值

类型： System Single
单精度浮点数 x，满足 0 ≤ x ≤MaxValue。

如果 value 等于 NegativeInfinity 或 PositiveInfinity，则返回值为 PositiveInfinity。如果 value 等于 NaN，则返回值为 NaN。 如果 value 等于 NegativeInfinity 或 PositiveInfinity，则返回值为 PositiveInfinity。如果 value 等于 NaN，则返回值为 NaN。

下面的示例使用 Abs(Single) 方法获取许多 Single 值的绝对值。

Dim values() As Single = { Single.MaxValue, 16.354e-12, 15.098123, 0, _
                            -19.069713, -15.058e17, Single.MinValue }
For Each value As Single In values
   Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value))
Next
' The example displays the following output:
'       Abs(3.402823E+38) = 3.402823E+38
'       Abs(1.6354E-11) = 1.6354E-11
'       Abs(15.09812) = 15.09812
'       Abs(0) = 0
'       Abs(-19.06971) = 19.06971
'       Abs(-1.5058E+18) = 1.5058E+18
'       Abs(-3.402823E+38) = 3.402823E+38

float[] values= { Single.MaxValue, 16.354e-12F, 15.098123F, 0F,
                  -19.069713F, -15.058e17F, Single.MinValue };
foreach (float value in values)
   Console.WriteLine("Abs({0}) = {1}", value, Math.Abs(value));

// The example displays the following output:
//       Abs(3.402823E+38) = 3.402823E+38
//       Abs(1.6354E-11) = 1.6354E-11
//       Abs(15.09812) = 15.09812
//       Abs(0) = 0
//       Abs(-19.06971) = 19.06971
//       Abs(-1.5058E+18) = 1.5058E+18
//       Abs(-3.402823E+38) = 3.402823E+38

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Abs 重载
System 命名空间


Math ..::.Acos 方法

Math
.
.
::
.
Acos 方法
Math 类

返回余弦值为指定数字的角度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Acos ( _
    d As Double _
) As Double
public static double Acos(
    double d
)
public:
static double Acos(
    double d
)
static member Acos :
        d:float -> float

参数

d
类型： System Double
一个表示余弦值的数字，其中 -1 ≤d≤ 1。

返回值

类型： System Double
角度 θ，以弧度为单位，满足 0 ≤θ≤π
- 或 -
如果 d < -1 或 d > 1，则为 NaN。

返回值乘以 180/Math..::.PI，将弧度转换为角度。

下面的示例使用 Acos 方法来帮助计算给定梯形的内角。

'The following class represents simple functionality of the trapezoid.
Class MathTrapezoidSample

    Private m_longBase As Double
    Private m_shortBase As Double
    Private m_leftLeg As Double
    Private m_rightLeg As Double

    Public Sub New(ByVal longbase As Double, ByVal shortbase As Double, ByVal leftLeg As Double, ByVal rightLeg As Double)
        m_longBase = Math.Abs(longbase)
        m_shortBase = Math.Abs(shortbase)
        m_leftLeg = Math.Abs(leftLeg)
        m_rightLeg = Math.Abs(rightLeg)
    End Sub

    Private Function GetRightSmallBase() As Double
        GetRightSmallBase = (Math.Pow(m_rightLeg, 2) - Math.Pow(m_leftLeg, 2) + Math.Pow(m_longBase, 2) + Math.Pow(m_shortBase, 2) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase))
    End Function

    Public Function GetHeight() As Double
        Dim x As Double = GetRightSmallBase()
        GetHeight = Math.Sqrt(Math.Pow(m_rightLeg, 2) - Math.Pow(x, 2))
    End Function

    Public Function GetSquare() As Double
        GetSquare = GetHeight() * m_longBase / 2
    End Function

    Public Function GetLeftBaseRadianAngle() As Double
        Dim sinX As Double = GetHeight() / m_leftLeg
        GetLeftBaseRadianAngle = Math.Round(Math.Asin(sinX), 2)
    End Function

    Public Function GetRightBaseRadianAngle() As Double
        Dim x As Double = GetRightSmallBase()
        Dim cosX As Double = (Math.Pow(m_rightLeg, 2) + Math.Pow(x, 2) - Math.Pow(GetHeight(), 2)) / (2 * x * m_rightLeg)
        GetRightBaseRadianAngle = Math.Round(Math.Acos(cosX), 2)
    End Function

    Public Function GetLeftBaseDegreeAngle() As Double
        Dim x As Double = GetLeftBaseRadianAngle() * 180 / Math.PI
        GetLeftBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Function GetRightBaseDegreeAngle() As Double
        Dim x As Double = GetRightBaseRadianAngle() * 180 / Math.PI
        GetRightBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Shared Sub Main()
        Dim trpz As MathTrapezoidSample = New MathTrapezoidSample(20, 10, 8, 6)
        Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0")
        Dim h As Double = trpz.GetHeight()
        Console.WriteLine("Trapezoid height is: " + h.ToString())
        Dim dxR As Double = trpz.GetLeftBaseRadianAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians")
        Dim dyR As Double = trpz.GetRightBaseRadianAngle()
        Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians")
        Dim dxD As Double = trpz.GetLeftBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees")
        Dim dyD As Double = trpz.GetRightBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees")
    End Sub

End Class

    /// <summary>
    /// The following class represents simple functionality of the trapezoid.
    /// </summary>
    class MathTrapezoidSample
    {
        private double m_longBase;
        private double m_shortBase;
        private double m_leftLeg;
        private double m_rightLeg;

        public MathTrapezoidSample(double longbase, double shortbase, double leftLeg, double rightLeg)
        {
            m_longBase = Math.Abs(longbase);
            m_shortBase = Math.Abs(shortbase);
            m_leftLeg = Math.Abs(leftLeg);
            m_rightLeg = Math.Abs(rightLeg);
        }

        private double GetRightSmallBase()
        {
            return (Math.Pow(m_rightLeg,2.0) - Math.Pow(m_leftLeg,2.0) + Math.Pow(m_longBase,2.0) + Math.Pow(m_shortBase,2.0) - 2* m_shortBase * m_longBase)/ (2*(m_longBase - m_shortBase));
        }

        public double GetHeight()
        {
            double x = GetRightSmallBase();
            return Math.Sqrt(Math.Pow(m_rightLeg,2.0) - Math.Pow(x,2.0));
        }

        public double GetSquare()
        {
            return GetHeight() * m_longBase / 2.0;
        }

        public double GetLeftBaseRadianAngle()
        {
            double sinX = GetHeight()/m_leftLeg;
            return Math.Round(Math.Asin(sinX),2);
        }

        public double GetRightBaseRadianAngle()
        {
            double x = GetRightSmallBase();
            double cosX = (Math.Pow(m_rightLeg,2.0) + Math.Pow(x,2.0) - Math.Pow(GetHeight(),2.0))/(2*x*m_rightLeg);
            return Math.Round(Math.Acos(cosX),2);
        }

        public double GetLeftBaseDegreeAngle()
        {
            double x = GetLeftBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        public double GetRightBaseDegreeAngle()
        {
            double x = GetRightBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        static void Main(string[] args)
        {
            MathTrapezoidSample trpz = new MathTrapezoidSample(20.0, 10.0, 8.0, 6.0);
            Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0");
            double h = trpz.GetHeight();
            Console.WriteLine("Trapezoid height is: " + h.ToString());
            double dxR = trpz.GetLeftBaseRadianAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians");
            double dyR = trpz.GetRightBaseRadianAngle();
            Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians");
            double dxD = trpz.GetLeftBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees");
            double dyD = trpz.GetRightBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees");
        }
    }

/// <summary>
/// The following class represents simple functionality of the trapezoid.
/// </summary>
public ref class MathTrapezoidSample
{
private:
   double m_longBase;
   double m_shortBase;
   double m_leftLeg;
   double m_rightLeg;

public:
   MathTrapezoidSample( double longbase, double shortbase, double leftLeg, double rightLeg )
   {
      m_longBase = Math::Abs( longbase );
      m_shortBase = Math::Abs( shortbase );
      m_leftLeg = Math::Abs( leftLeg );
      m_rightLeg = Math::Abs( rightLeg );
   }

private:
   double GetRightSmallBase()
   {
      return (Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( m_leftLeg, 2.0 ) + Math::Pow( m_longBase, 2.0 ) + Math::Pow( m_shortBase, 2.0 ) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase));
   }

public:
   double GetHeight()
   {
      double x = GetRightSmallBase();
      return Math::Sqrt( Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( x, 2.0 ) );
   }

   double GetSquare()
   {
      return GetHeight() * m_longBase / 2.0;
   }

   double GetLeftBaseRadianAngle()
   {
      double sinX = GetHeight() / m_leftLeg;
      return Math::Round( Math::Asin( sinX ), 2 );
   }

   double GetRightBaseRadianAngle()
   {
      double x = GetRightSmallBase();
      double cosX = (Math::Pow( m_rightLeg, 2.0 ) + Math::Pow( x, 2.0 ) - Math::Pow( GetHeight(), 2.0 )) / (2 * x * m_rightLeg);
      return Math::Round( Math::Acos( cosX ), 2 );
   }

   double GetLeftBaseDegreeAngle()
   {
      double x = GetLeftBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

   double GetRightBaseDegreeAngle()
   {
      double x = GetRightBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

};

int main()
{
   MathTrapezoidSample^ trpz = gcnew MathTrapezoidSample( 20.0,10.0,8.0,6.0 );
   Console::WriteLine( "The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0" );
   double h = trpz->GetHeight();
   Console::WriteLine( "Trapezoid height is: {0}", h.ToString() );
   double dxR = trpz->GetLeftBaseRadianAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Radians", dxR.ToString() );
   double dyR = trpz->GetRightBaseRadianAngle();
   Console::WriteLine( "Trapezoid right base angle is: {0} Radians", dyR.ToString() );
   double dxD = trpz->GetLeftBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dxD.ToString() );
   double dyD = trpz->GetRightBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dyD.ToString() );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Asin 方法

Math
.
.
::
.
Asin 方法
Math 类

返回正弦值为指定数字的角度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Asin ( _
    d As Double _
) As Double
public static double Asin(
    double d
)
public:
static double Asin(
    double d
)
static member Asin :
        d:float -> float

参数

d
类型： System Double
一个表示正弦值的数字，其中 -1 ≤d≤ 1。

返回值

类型： System Double
角度 θ，以弧度为单位，满足 -π/2 ≤θ≤π/2
- 或 -
如果 d < -1 或 d > 1，则为 NaN。

返回正数值表示相对于 x 轴的逆时针转角，返回负数值则表示顺时针转角。

返回值乘以 180/Math..::.PI，将弧度转换为角度。

下面的示例使用 Asin 来帮助计算给定梯形的内角。

'The following class represents simple functionality of the trapezoid.
Class MathTrapezoidSample

    Private m_longBase As Double
    Private m_shortBase As Double
    Private m_leftLeg As Double
    Private m_rightLeg As Double

    Public Sub New(ByVal longbase As Double, ByVal shortbase As Double, ByVal leftLeg As Double, ByVal rightLeg As Double)
        m_longBase = Math.Abs(longbase)
        m_shortBase = Math.Abs(shortbase)
        m_leftLeg = Math.Abs(leftLeg)
        m_rightLeg = Math.Abs(rightLeg)
    End Sub

    Private Function GetRightSmallBase() As Double
        GetRightSmallBase = (Math.Pow(m_rightLeg, 2) - Math.Pow(m_leftLeg, 2) + Math.Pow(m_longBase, 2) + Math.Pow(m_shortBase, 2) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase))
    End Function

    Public Function GetHeight() As Double
        Dim x As Double = GetRightSmallBase()
        GetHeight = Math.Sqrt(Math.Pow(m_rightLeg, 2) - Math.Pow(x, 2))
    End Function

    Public Function GetSquare() As Double
        GetSquare = GetHeight() * m_longBase / 2
    End Function

    Public Function GetLeftBaseRadianAngle() As Double
        Dim sinX As Double = GetHeight() / m_leftLeg
        GetLeftBaseRadianAngle = Math.Round(Math.Asin(sinX), 2)
    End Function

    Public Function GetRightBaseRadianAngle() As Double
        Dim x As Double = GetRightSmallBase()
        Dim cosX As Double = (Math.Pow(m_rightLeg, 2) + Math.Pow(x, 2) - Math.Pow(GetHeight(), 2)) / (2 * x * m_rightLeg)
        GetRightBaseRadianAngle = Math.Round(Math.Acos(cosX), 2)
    End Function

    Public Function GetLeftBaseDegreeAngle() As Double
        Dim x As Double = GetLeftBaseRadianAngle() * 180 / Math.PI
        GetLeftBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Function GetRightBaseDegreeAngle() As Double
        Dim x As Double = GetRightBaseRadianAngle() * 180 / Math.PI
        GetRightBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Shared Sub Main()
        Dim trpz As MathTrapezoidSample = New MathTrapezoidSample(20, 10, 8, 6)
        Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0")
        Dim h As Double = trpz.GetHeight()
        Console.WriteLine("Trapezoid height is: " + h.ToString())
        Dim dxR As Double = trpz.GetLeftBaseRadianAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians")
        Dim dyR As Double = trpz.GetRightBaseRadianAngle()
        Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians")
        Dim dxD As Double = trpz.GetLeftBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees")
        Dim dyD As Double = trpz.GetRightBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees")
    End Sub

End Class

    /// <summary>
    /// The following class represents simple functionality of the trapezoid.
    /// </summary>
    class MathTrapezoidSample
    {
        private double m_longBase;
        private double m_shortBase;
        private double m_leftLeg;
        private double m_rightLeg;

        public MathTrapezoidSample(double longbase, double shortbase, double leftLeg, double rightLeg)
        {
            m_longBase = Math.Abs(longbase);
            m_shortBase = Math.Abs(shortbase);
            m_leftLeg = Math.Abs(leftLeg);
            m_rightLeg = Math.Abs(rightLeg);
        }

        private double GetRightSmallBase()
        {
            return (Math.Pow(m_rightLeg,2.0) - Math.Pow(m_leftLeg,2.0) + Math.Pow(m_longBase,2.0) + Math.Pow(m_shortBase,2.0) - 2* m_shortBase * m_longBase)/ (2*(m_longBase - m_shortBase));
        }

        public double GetHeight()
        {
            double x = GetRightSmallBase();
            return Math.Sqrt(Math.Pow(m_rightLeg,2.0) - Math.Pow(x,2.0));
        }

        public double GetSquare()
        {
            return GetHeight() * m_longBase / 2.0;
        }

        public double GetLeftBaseRadianAngle()
        {
            double sinX = GetHeight()/m_leftLeg;
            return Math.Round(Math.Asin(sinX),2);
        }

        public double GetRightBaseRadianAngle()
        {
            double x = GetRightSmallBase();
            double cosX = (Math.Pow(m_rightLeg,2.0) + Math.Pow(x,2.0) - Math.Pow(GetHeight(),2.0))/(2*x*m_rightLeg);
            return Math.Round(Math.Acos(cosX),2);
        }

        public double GetLeftBaseDegreeAngle()
        {
            double x = GetLeftBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        public double GetRightBaseDegreeAngle()
        {
            double x = GetRightBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        static void Main(string[] args)
        {
            MathTrapezoidSample trpz = new MathTrapezoidSample(20.0, 10.0, 8.0, 6.0);
            Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0");
            double h = trpz.GetHeight();
            Console.WriteLine("Trapezoid height is: " + h.ToString());
            double dxR = trpz.GetLeftBaseRadianAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians");
            double dyR = trpz.GetRightBaseRadianAngle();
            Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians");
            double dxD = trpz.GetLeftBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees");
            double dyD = trpz.GetRightBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees");
        }
    }

/// <summary>
/// The following class represents simple functionality of the trapezoid.
/// </summary>
public ref class MathTrapezoidSample
{
private:
   double m_longBase;
   double m_shortBase;
   double m_leftLeg;
   double m_rightLeg;

public:
   MathTrapezoidSample( double longbase, double shortbase, double leftLeg, double rightLeg )
   {
      m_longBase = Math::Abs( longbase );
      m_shortBase = Math::Abs( shortbase );
      m_leftLeg = Math::Abs( leftLeg );
      m_rightLeg = Math::Abs( rightLeg );
   }

private:
   double GetRightSmallBase()
   {
      return (Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( m_leftLeg, 2.0 ) + Math::Pow( m_longBase, 2.0 ) + Math::Pow( m_shortBase, 2.0 ) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase));
   }

public:
   double GetHeight()
   {
      double x = GetRightSmallBase();
      return Math::Sqrt( Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( x, 2.0 ) );
   }

   double GetSquare()
   {
      return GetHeight() * m_longBase / 2.0;
   }

   double GetLeftBaseRadianAngle()
   {
      double sinX = GetHeight() / m_leftLeg;
      return Math::Round( Math::Asin( sinX ), 2 );
   }

   double GetRightBaseRadianAngle()
   {
      double x = GetRightSmallBase();
      double cosX = (Math::Pow( m_rightLeg, 2.0 ) + Math::Pow( x, 2.0 ) - Math::Pow( GetHeight(), 2.0 )) / (2 * x * m_rightLeg);
      return Math::Round( Math::Acos( cosX ), 2 );
   }

   double GetLeftBaseDegreeAngle()
   {
      double x = GetLeftBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

   double GetRightBaseDegreeAngle()
   {
      double x = GetRightBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

};

int main()
{
   MathTrapezoidSample^ trpz = gcnew MathTrapezoidSample( 20.0,10.0,8.0,6.0 );
   Console::WriteLine( "The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0" );
   double h = trpz->GetHeight();
   Console::WriteLine( "Trapezoid height is: {0}", h.ToString() );
   double dxR = trpz->GetLeftBaseRadianAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Radians", dxR.ToString() );
   double dyR = trpz->GetRightBaseRadianAngle();
   Console::WriteLine( "Trapezoid right base angle is: {0} Radians", dyR.ToString() );
   double dxD = trpz->GetLeftBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dxD.ToString() );
   double dyD = trpz->GetRightBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dyD.ToString() );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Atan 方法

Math
.
.
::
.
Atan 方法
Math 类

返回正切值为指定数字的角度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Atan ( _
    d As Double _
) As Double
public static double Atan(
    double d
)
public:
static double Atan(
    double d
)
static member Atan :
        d:float -> float

参数

d
类型： System Double
表示正切值的数字。

返回值

类型： System Double
角度 θ，以弧度为单位，满足 -π/2 ≤θ≤π/2。
- 或 -
如果 d 等于 NaN，则为 NaN；如果 d 等于 NegativeInfinity，则为舍入为双精度值 (-1.5707963267949) 的 -π/2；或者如果 d 等于 PositiveInfinity，则为舍入为双精度值 (1.5707963267949) 的 π/2。

返回正数值表示相对于 x 轴的逆时针转角，返回负数值则表示顺时针转角。

返回值乘以 180/Math..::.PI，将弧度转换为角度。

下面的示例演示如何计算一个值的反正切并将其显示在控制台中。

' This example demonstrates Math.Atan()
'                           Math.Atan2()
'                           Math.Tan()
Imports System

Class Sample
   Public Shared Sub Main()
      Dim x As Double = 1.0
      Dim y As Double = 2.0
      Dim angle As Double
      Dim radians As Double
      Dim result As Double

      ' Calculate the tangent of 30 degrees.
      angle = 30
      radians = angle *(Math.PI / 180)
      result = Math.Tan(radians)
      Console.WriteLine("The tangent of 30 degrees is {0}.", result)

      ' Calculate the arctangent of the previous tangent.
      radians = Math.Atan(result)
      angle = radians *(180 / Math.PI)
      Console.WriteLine("The previous tangent is equivalent to {0} degrees.", angle)

      ' Calculate the arctangent of an angle.
      Dim line1 As [String] = "{0}The arctangent of the angle formed by the x-axis and "
      Dim line2 As [String] = "a vector to point ({0},{1}) is {2}, "
      Dim line3 As [String] = "which is equivalent to {0} degrees."

      radians = Math.Atan2(y, x)
      angle = radians *(180 / Math.PI)

      Console.WriteLine(line1, Environment.NewLine)
      Console.WriteLine(line2, x, y, radians)
      Console.WriteLine(line3, angle)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'The tangent of 30 degrees is 0.577350269189626.
'The previous tangent is equivalent to 30 degrees.
'
'The arctangent of the angle formed by the x-axis and
'a vector to point (1,2) is 1.10714871779409,
'which is equivalent to 63.434948822922 degrees.
'

// This example demonstrates Math.Atan()
//                           Math.Atan2()
//                           Math.Tan()
using System;

class Sample
{
    public static void Main()
    {
    double x = 1.0;
    double y = 2.0;
    double angle;
    double radians;
    double result;

// Calculate the tangent of 30 degrees.
    angle = 30;
    radians = angle * (Math.PI/180);
    result = Math.Tan(radians);
    Console.WriteLine("The tangent of 30 degrees is {0}.", result);

// Calculate the arctangent of the previous tangent.
    radians = Math.Atan(result);
    angle = radians * (180/Math.PI);
    Console.WriteLine("The previous tangent is equivalent to {0} degrees.", angle);

// Calculate the arctangent of an angle.
    String line1 = "{0}The arctangent of the angle formed by the x-axis and ";
    String line2 = "a vector to point ({0},{1}) is {2}, ";
    String line3 = "which is equivalent to {0} degrees.";

    radians = Math.Atan2(y, x);
    angle = radians * (180/Math.PI);

    Console.WriteLine(line1, Environment.NewLine);
    Console.WriteLine(line2, x, y, radians);
    Console.WriteLine(line3, angle);
    }
}
/*
This example produces the following results:

The tangent of 30 degrees is 0.577350269189626.
The previous tangent is equivalent to 30 degrees.

The arctangent of the angle formed by the x-axis and
a vector to point (1,2) is 1.10714871779409,
which is equivalent to 63.434948822922 degrees.
*/

// This example demonstrates Math.Atan()
//                           Math.Atan2()
//                           Math.Tan()
using namespace System;
int main()
{
   double x = 1.0;
   double y = 2.0;
   double angle;
   double radians;
   double result;

   // Calculate the tangent of 30 degrees.
   angle = 30;
   radians = angle * (Math::PI / 180);
   result = Math::Tan( radians );
   Console::WriteLine( "The tangent of 30 degrees is {0}.", result );

   // Calculate the arctangent of the previous tangent.
   radians = Math::Atan( result );
   angle = radians * (180 / Math::PI);
   Console::WriteLine( "The previous tangent is equivalent to {0} degrees.", angle );

   // Calculate the arctangent of an angle.
   String^ line1 = "{0}The arctangent of the angle formed by the x-axis and ";
   String^ line2 = "a vector to point ({0},{1}) is {2}, ";
   String^ line3 = "which is equivalent to {0} degrees.";
   radians = Math::Atan2( y, x );
   angle = radians * (180 / Math::PI);
   Console::WriteLine( line1, Environment::NewLine );
   Console::WriteLine( line2, x, y, radians );
   Console::WriteLine( line3, angle );
}

/*
This example produces the following results:

The tangent of 30 degrees is 0.577350269189626.
The previous tangent is equivalent to 30 degrees.

The arctangent of the angle formed by the x-axis and
a vector to point (1,2) is 1.10714871779409,
which is equivalent to 63.434948822922 degrees.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Atan2 方法

Math
.
.
::
.
Atan2 方法
Math 类

返回正切值为两个指定数字的商的角度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Atan2 ( _
    y As Double, _
    x As Double _
) As Double
public static double Atan2(
    double y,
    double x
)
public:
static double Atan2(
    double y,
    double x
)
static member Atan2 :
        y:float *
        x:float -> float

参数

y
类型： System Double
点的 y 坐标。
x
类型： System Double
点的 x 坐标。

返回值

类型： System Double
角度 θ，以弧度为单位，满足 -π≤θ≤π，且 tan(θ) = y / x，其中 (x, y) 是笛卡尔平面中的一个点。请看下面： 角度 θ，以弧度为单位，满足 -π≤θ≤π，且 tan(θ) = y / x，其中 (x, y) 是笛卡尔平面中的一个点。请看下面：

  • 如果 (x, y) 在第 1 象限，则 0 < θ < π/2。

  • 如果 (x, y) 在第 2 象限，则 π/2 < θ≤π。

  • 如果 (x, y) 在第 3 象限，则 -π < θ < -π/2。

  • 如果 (x, y) 在第 4 象限，则 -π/2 < θ < 0。

如果点在象限的边界上，则返回值如下：

  • 如果 y 为 0 并且 x 不为负值，则 θ = 0。

  • 如果 y 为 0 并且 x 为负值，则 θ = π。

  • 如果 y 为正值并且 x 为 0，则 θ = π/2。

  • 如果 y 负值并且 x 为 0，则 θ = -π/2。

返回值为笛卡尔平面中的角度，该角度由 x 轴和起点为原点 (0,0)、终点为 (x,y) 的向量构成。

下面的示例演示如何计算角和向量的反正切。结果值会显示在控制台中。 下面的示例演示如何计算角和向量的反正切。结果值会显示在控制台中。

' This example demonstrates Math.Atan()
'                           Math.Atan2()
'                           Math.Tan()
Imports System

Class Sample
   Public Shared Sub Main()
      Dim x As Double = 1.0
      Dim y As Double = 2.0
      Dim angle As Double
      Dim radians As Double
      Dim result As Double

      ' Calculate the tangent of 30 degrees.
      angle = 30
      radians = angle *(Math.PI / 180)
      result = Math.Tan(radians)
      Console.WriteLine("The tangent of 30 degrees is {0}.", result)

      ' Calculate the arctangent of the previous tangent.
      radians = Math.Atan(result)
      angle = radians *(180 / Math.PI)
      Console.WriteLine("The previous tangent is equivalent to {0} degrees.", angle)

      ' Calculate the arctangent of an angle.
      Dim line1 As [String] = "{0}The arctangent of the angle formed by the x-axis and "
      Dim line2 As [String] = "a vector to point ({0},{1}) is {2}, "
      Dim line3 As [String] = "which is equivalent to {0} degrees."

      radians = Math.Atan2(y, x)
      angle = radians *(180 / Math.PI)

      Console.WriteLine(line1, Environment.NewLine)
      Console.WriteLine(line2, x, y, radians)
      Console.WriteLine(line3, angle)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'The tangent of 30 degrees is 0.577350269189626.
'The previous tangent is equivalent to 30 degrees.
'
'The arctangent of the angle formed by the x-axis and
'a vector to point (1,2) is 1.10714871779409,
'which is equivalent to 63.434948822922 degrees.
'

// This example demonstrates Math.Atan()
//                           Math.Atan2()
//                           Math.Tan()
using System;

class Sample
{
    public static void Main()
    {
    double x = 1.0;
    double y = 2.0;
    double angle;
    double radians;
    double result;

// Calculate the tangent of 30 degrees.
    angle = 30;
    radians = angle * (Math.PI/180);
    result = Math.Tan(radians);
    Console.WriteLine("The tangent of 30 degrees is {0}.", result);

// Calculate the arctangent of the previous tangent.
    radians = Math.Atan(result);
    angle = radians * (180/Math.PI);
    Console.WriteLine("The previous tangent is equivalent to {0} degrees.", angle);

// Calculate the arctangent of an angle.
    String line1 = "{0}The arctangent of the angle formed by the x-axis and ";
    String line2 = "a vector to point ({0},{1}) is {2}, ";
    String line3 = "which is equivalent to {0} degrees.";

    radians = Math.Atan2(y, x);
    angle = radians * (180/Math.PI);

    Console.WriteLine(line1, Environment.NewLine);
    Console.WriteLine(line2, x, y, radians);
    Console.WriteLine(line3, angle);
    }
}
/*
This example produces the following results:

The tangent of 30 degrees is 0.577350269189626.
The previous tangent is equivalent to 30 degrees.

The arctangent of the angle formed by the x-axis and
a vector to point (1,2) is 1.10714871779409,
which is equivalent to 63.434948822922 degrees.
*/

// This example demonstrates Math.Atan()
//                           Math.Atan2()
//                           Math.Tan()
using namespace System;
int main()
{
   double x = 1.0;
   double y = 2.0;
   double angle;
   double radians;
   double result;

   // Calculate the tangent of 30 degrees.
   angle = 30;
   radians = angle * (Math::PI / 180);
   result = Math::Tan( radians );
   Console::WriteLine( "The tangent of 30 degrees is {0}.", result );

   // Calculate the arctangent of the previous tangent.
   radians = Math::Atan( result );
   angle = radians * (180 / Math::PI);
   Console::WriteLine( "The previous tangent is equivalent to {0} degrees.", angle );

   // Calculate the arctangent of an angle.
   String^ line1 = "{0}The arctangent of the angle formed by the x-axis and ";
   String^ line2 = "a vector to point ({0},{1}) is {2}, ";
   String^ line3 = "which is equivalent to {0} degrees.";
   radians = Math::Atan2( y, x );
   angle = radians * (180 / Math::PI);
   Console::WriteLine( line1, Environment::NewLine );
   Console::WriteLine( line2, x, y, radians );
   Console::WriteLine( line3, angle );
}

/*
This example produces the following results:

The tangent of 30 degrees is 0.577350269189626.
The previous tangent is equivalent to 30 degrees.

The arctangent of the angle formed by the x-axis and
a vector to point (1,2) is 1.10714871779409,
which is equivalent to 63.434948822922 degrees.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.BigMul 方法

Math
.
.
::
.
BigMul 方法
Math 类

生成两个 32 位数字的完整乘积。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function BigMul ( _
    a As Integer, _
    b As Integer _
) As Long
public static long BigMul(
    int a,
    int b
)
public:
static long long BigMul(
    int a,
    int b
)
static member BigMul :
        a:int *
        b:int -> int64

参数

a
类型： System Int32
第一个乘数 Int32。
b
类型： System Int32
第二个乘数 Int32。

返回值

类型： System Int64
包含指定数字乘积的 Int64。

下面的示例演示如何使用 BigMul 方法计算两个整数值的乘积。

' This example demonstrates Math.BigMul()
Imports System

Class Sample
   Public Shared Sub Main()
      Dim int1 As Integer = Int32.MaxValue
      Dim int2 As Integer = Int32.MaxValue
      Dim longResult As Long
      '
      longResult = Math.BigMul(int1, int2)
      Console.WriteLine("Calculate the product of two Int32 values:")
      Console.WriteLine("{0} * {1} = {2}", int1, int2, longResult)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'Calculate the product of two Int32 values:
'2147483647 * 2147483647 = 4611686014132420609
'

// This example demonstrates Math.BigMul()
using System;

class Sample
{
    public static void Main()
    {
    int int1 = Int32.MaxValue;
    int int2 = Int32.MaxValue;
    long longResult;
//
    longResult = Math.BigMul(int1, int2);
    Console.WriteLine("Calculate the product of two Int32 values:");
    Console.WriteLine("{0} * {1} = {2}", int1, int2, longResult);
    }
}
/*
This example produces the following results:
Calculate the product of two Int32 values:
2147483647 * 2147483647 = 4611686014132420609
*/

// This example demonstrates Math.BigMul()
using namespace System;
int main()
{
   int int1 = Int32::MaxValue;
   int int2 = Int32::MaxValue;
   Int64 longResult;

   //
   longResult = Math::BigMul( int1, int2 );
   Console::WriteLine( "Calculate the product of two Int32 values:" );
   Console::WriteLine( "{0} * {1} = {2}", int1, int2, longResult );
}

/*
This example produces the following results:
Calculate the product of two Int32 values:
2147483647 * 2147483647 = 4611686014132420609
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
System 命名空间


Math ..::.Ceiling 方法

Math
.
.
::
.
Ceiling 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

返回大于或等于指定数字的最小整数。

名称 说明
页首

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。

参考

Math 类
Math 成员
System 命名空间


Math ..::.Ceiling 方法 (Decimal)

Math
.
.
::
.
Ceiling 方法 (Decimal)
Math 类

返回大于或等于指定的十进制数的最小整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Ceiling ( _
    d As Decimal _
) As Decimal
public static decimal Ceiling(
    decimal d
)
public:
static Decimal Ceiling(
    Decimal d
)
static member Ceiling :
        d:decimal -> decimal

参数

d
类型： System Decimal
一个小数。

返回值

类型： System Decimal
大于或等于 d 的最小整数值。请注意，此方法返回 Decimal，而不是整数类型。 大于或等于 d 的最小整数值。请注意，此方法返回 Decimal，而不是整数类型。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 d 为正，则任何小数部分的存在都会使 d 舍入为下一个最大整数。如果 d 为负，则舍入运算会导致 d 的全部小数部分被丢弃。此方法的运算不同于 Floor(Decimal) 方法，后者支持“向负无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 d 为正，则任何小数部分的存在都会使 d 舍入为下一个最大整数。如果 d 为负，则舍入运算会导致 d 的全部小数部分被丢弃。此方法的运算不同于 Floor(Decimal) 方法，后者支持“向负无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 d 为正，则任何小数部分的存在都会使 d 舍入为下一个最大整数。如果 d 为负，则舍入运算会导致 d 的全部小数部分被丢弃。此方法的运算不同于 Floor(Decimal) 方法，后者支持“向负无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 d 为正，则任何小数部分的存在都会使 d 舍入为下一个最大整数。如果 d 为负，则舍入运算会导致 d 的全部小数部分被丢弃。此方法的运算不同于 Floor(Decimal) 方法，后者支持“向负无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 d 为正，则任何小数部分的存在都会使 d 舍入为下一个最大整数。如果 d 为负，则舍入运算会导致 d 的全部小数部分被丢弃。此方法的运算不同于 Floor(Decimal) 方法，后者支持“向负无穷舍入”。

下面的示例演示 Math..::.Ceiling(Decimal) 方法并将此方法与 Floor(Decimal) 方法进行比较。

Dim values() As Decimal = {7.03d, 7.64d, 0.12d, -0.12d, -7.1d, -7.6d}
Console.WriteLine("  Value          Ceiling          Floor")
Console.WriteLine()
For Each value As Decimal In values
   Console.WriteLine("{0,7} {1,16} {2,14}", _
                     value, Math.Ceiling(value), Math.Floor(value))
Next
' The example displays the following output to the console:
'         Value          Ceiling          Floor
'
'          7.03                8              7
'          7.64                8              7
'          0.12                1              0
'         -0.12                0             -1
'          -7.1               -7             -8
'          -7.6               -7             -8

decimal[] values = {7.03m, 7.64m, 0.12m, -0.12m, -7.1m, -7.6m};
Console.WriteLine("  Value          Ceiling          Floor\n");
foreach (decimal value in values)
   Console.WriteLine("{0,7} {1,16} {2,14}",
                     value, Math.Ceiling(value), Math.Floor(value));
// The example displays the following output to the console:
//         Value          Ceiling          Floor
//
//          7.03                8              7
//          7.64                8              7
//          0.12                1              0
//         -0.12                0             -1
//          -7.1               -7             -8
//          -7.6               -7             -8

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
Ceiling 重载
System 命名空间
Round
Floor


Math ..::.Ceiling 方法 (Double)

Math
.
.
::
.
Ceiling 方法 (Double)
Math 类

返回大于或等于指定的双精度浮点数的最小整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Ceiling ( _
    a As Double _
) As Double
public static double Ceiling(
    double a
)
public:
static double Ceiling(
    double a
)
static member Ceiling :
        a:float -> float

参数

a
类型： System Double
一个双精度浮点数。

返回值

类型： System Double
大于或等于 a 的最小整数值。如果 a 等于 NaN、NegativeInfinity 或 PositiveInfinity，则返回该值。请注意，此方法返回 Double，而不是整数类型。 大于或等于 a 的最小整数值。如果 a 等于 NaN、NegativeInfinity 或 PositiveInfinity，则返回该值。请注意，此方法返回 Double，而不是整数类型。 大于或等于 a 的最小整数值。如果 a 等于 NaN、NegativeInfinity 或 PositiveInfinity，则返回该值。请注意，此方法返回 Double，而不是整数类型。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 a 为正，则任何小数部分的存在都会使 a 舍入为下一个最大整数。如果 a 为负，则舍入运算会导致 a 的全部小数部分被丢弃。此方法的运算不同于 Floor(Double) 方法，后者支持“向负无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 a 为正，则任何小数部分的存在都会使 a 舍入为下一个最大整数。如果 a 为负，则舍入运算会导致 a 的全部小数部分被丢弃。此方法的运算不同于 Floor(Double) 方法，后者支持“向负无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 a 为正，则任何小数部分的存在都会使 a 舍入为下一个最大整数。如果 a 为负，则舍入运算会导致 a 的全部小数部分被丢弃。此方法的运算不同于 Floor(Double) 方法，后者支持“向负无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 a 为正，则任何小数部分的存在都会使 a 舍入为下一个最大整数。如果 a 为负，则舍入运算会导致 a 的全部小数部分被丢弃。此方法的运算不同于 Floor(Double) 方法，后者支持“向负无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向正无穷舍入”。换句话说，如果 a 为正，则任何小数部分的存在都会使 a 舍入为下一个最大整数。如果 a 为负，则舍入运算会导致 a 的全部小数部分被丢弃。此方法的运算不同于 Floor(Double) 方法，后者支持“向负无穷舍入”。

下面的示例演示 Math..::.Ceiling(Double) 方法并将此方法与 Floor(Double) 方法进行比较。

Dim values() As Double = {7.03, 7.64, 0.12, -0.12, -7.1, -7.6}
Console.WriteLine("  Value          Ceiling          Floor")
Console.WriteLine()
For Each value As Double In values
   Console.WriteLine("{0,7} {1,16} {2,14}", _
                     value, Math.Ceiling(value), Math.Floor(value))
Next
' The example displays the following output to the console:
'         Value          Ceiling          Floor
'
'          7.03                8              7
'          7.64                8              7
'          0.12                1              0
'         -0.12                0             -1
'          -7.1               -7             -8
'          -7.6               -7             -8

double[] values = {7.03, 7.64, 0.12, -0.12, -7.1, -7.6};
Console.WriteLine("  Value          Ceiling          Floor\n");
foreach (double value in values)
   Console.WriteLine("{0,7} {1,16} {2,14}",
                     value, Math.Ceiling(value), Math.Floor(value));
// The example displays the following output to the console:
//         Value          Ceiling          Floor
//
//          7.03                8              7
//          7.64                8              7
//          0.12                1              0
//         -0.12                0             -1
//          -7.1               -7             -8
//          -7.6               -7             -8

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Ceiling 重载
System 命名空间
Round
Floor


Math ..::.Cos 方法

Math
.
.
::
.
Cos 方法
Math 类

返回指定角度的余弦值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Cos ( _
    d As Double _
) As Double
public static double Cos(
    double d
)
public:
static double Cos(
    double d
)
static member Cos :
        d:float -> float

参数

d
类型： System Double
以弧度为单位的角。

返回值

类型： System Double
d 的余弦。如果 d 等于 NaN、NegativeInfinity 或 PositiveInfinity，此方法将返回 NaN。 d 的余弦。如果 d 等于 NaN、NegativeInfinity 或 PositiveInfinity，此方法将返回 NaN。

角度 d 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。 角度 d 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。

d 的可接受值的范围从约 -9223372036854775295 至约 9223372036854775295。对于超出此范围的值，Cos 方法返回未更改的 d，而不是引发异常。 d 的可接受值的范围从约 -9223372036854775295 至约 9223372036854775295。对于超出此范围的值，Cos 方法返回未更改的 d，而不是引发异常。

下面的示例使用 Cos 计算所选角度的特定三角恒等式。

' Example for the trigonometric Math.Sin( Double ) and Math.Cos( Double ) methods.
Imports System
Imports Microsoft.VisualBasic

Module SinCos

    Sub Main()
        Console.WriteLine( _
            "This example of trigonometric " & _
            "Math.Sin( double ) and Math.Cos( double )" & vbCrLf & _
            "generates the following output." & vbCrLf)
        Console.WriteLine( _
            "Convert selected values for X to radians " & vbCrLf & _
            "and evaluate these trigonometric identities:")
        Console.WriteLine( _
            "   sin^2(X) + cos^2(X) = 1" & vbCrLf & _
            "   sin(2 * X) = 2 * sin(X) * cos(X)")
        Console.WriteLine("   cos(2 * X) = cos^2(X) - sin^2(X)")

        UseSineCosine(15.0)
        UseSineCosine(30.0)
        UseSineCosine(45.0)

        Console.WriteLine( _
            vbCrLf & "Convert selected values for X and Y to radians" & _
            vbCrLf & "and evaluate these trigonometric identities:")
        Console.WriteLine("   sin(X + Y) = sin(X) * cos(Y) + cos(X) * sin(Y)")
        Console.WriteLine("   cos(X + Y) = cos(X) * cos(Y) - sin(X) * sin(Y)")

        UseTwoAngles(15.0, 30.0)
        UseTwoAngles(30.0, 45.0)
    End Sub 'Main

    ' Evaluate trigonometric identities with a given angle.
    Sub UseSineCosine(degrees As Double)

        Dim angle As Double = Math.PI * degrees / 180.0
        Dim sinAngle As Double = Math.Sin(angle)
        Dim cosAngle As Double = Math.Cos(angle)

        ' Evaluate sin^2(X) + cos^2(X) = 1.
        Console.WriteLine( _
            vbCrLf & "                           Math.Sin({0} deg) = {1:E16}" & _
            vbCrLf & "                           Math.Cos({0} deg) = {2:E16}", _
            degrees, Math.Sin(angle), Math.Cos(angle))
        Console.WriteLine( _
            "(Math.Sin({0} deg))^2 + (Math.Cos({0} deg))^2 = {1:E16}", _
            degrees, sinAngle * sinAngle + cosAngle * cosAngle)

        ' Evaluate sin(2 * X) = 2 * sin(X) * cos(X).
        Console.WriteLine( _
            "                           Math.Sin({0} deg) = {1:E16}", _
            2.0 * degrees, Math.Sin(2.0 * angle))
        Console.WriteLine( _
            "    2 * Math.Sin({0} deg) * Math.Cos({0} deg) = {1:E16}", _
            degrees, 2.0 * sinAngle * cosAngle)

        ' Evaluate cos(2 * X) = cos^2(X) - sin^2(X).
        Console.WriteLine( _
            "                           Math.Cos({0} deg) = {1:E16}", _
            2.0 * degrees, Math.Cos(2.0 * angle))
        Console.WriteLine( _
            "(Math.Cos({0} deg))^2 - (Math.Sin({0} deg))^2 = {1:E16}", _
            degrees, cosAngle * cosAngle - sinAngle * sinAngle)

    End Sub 'UseSineCosine

    ' Evaluate trigonometric identities that are functions of two angles.
    Sub UseTwoAngles(degreesX As Double, degreesY As Double)

        Dim angleX As Double = Math.PI * degreesX / 180.0
        Dim angleY As Double = Math.PI * degreesY / 180.0

        ' Evaluate sin(X + Y) = sin(X) * cos(Y) + cos(X) * sin(Y).
        Console.WriteLine( _
            vbCrLf & "        Math.Sin({0} deg) * Math.Cos({1} deg) +" & _
            vbCrLf & "        Math.Cos({0} deg) * Math.Sin({1} deg) = {2:E16}", _
            degreesX, degreesY, Math.Sin(angleX) * Math.Cos(angleY) + _
            Math.Cos(angleX) * Math.Sin(angleY))
        Console.WriteLine( _
            "                           Math.Sin({0} deg) = {1:E16}", _
            degreesX + degreesY, Math.Sin(angleX + angleY))

        ' Evaluate cos(X + Y) = cos(X) * cos(Y) - sin(X) * sin(Y).
        Console.WriteLine( _
            "        Math.Cos({0} deg) * Math.Cos({1} deg) -" & vbCrLf & _
            "        Math.Sin({0} deg) * Math.Sin({1} deg) = {2:E16}", _
            degreesX, degreesY, Math.Cos(angleX) * Math.Cos(angleY) - _
            Math.Sin(angleX) * Math.Sin(angleY))
        Console.WriteLine( _
            "                           Math.Cos({0} deg) = {1:E16}", _
            degreesX + degreesY, Math.Cos(angleX + angleY))

    End Sub 'UseTwoAngles
End Module 'SinCos

' This example of trigonometric Math.Sin( double ) and Math.Cos( double )
' generates the following output.
'
' Convert selected values for X to radians
' and evaluate these trigonometric identities:
'    sin^2(X) + cos^2(X) = 1
'    sin(2 * X) = 2 * sin(X) * cos(X)
'    cos(2 * X) = cos^2(X) - sin^2(X)
'
'                            Math.Sin(15 deg) = 2.5881904510252074E-001
'                            Math.Cos(15 deg) = 9.6592582628906831E-001
' (Math.Sin(15 deg))^2 + (Math.Cos(15 deg))^2 = 1.0000000000000000E+000
'                            Math.Sin(30 deg) = 4.9999999999999994E-001
'     2 * Math.Sin(15 deg) * Math.Cos(15 deg) = 4.9999999999999994E-001
'                            Math.Cos(30 deg) = 8.6602540378443871E-001
' (Math.Cos(15 deg))^2 - (Math.Sin(15 deg))^2 = 8.6602540378443871E-001
'
'                            Math.Sin(30 deg) = 4.9999999999999994E-001
'                            Math.Cos(30 deg) = 8.6602540378443871E-001
' (Math.Sin(30 deg))^2 + (Math.Cos(30 deg))^2 = 1.0000000000000000E+000
'                            Math.Sin(60 deg) = 8.6602540378443860E-001
'     2 * Math.Sin(30 deg) * Math.Cos(30 deg) = 8.6602540378443860E-001
'                            Math.Cos(60 deg) = 5.0000000000000011E-001
' (Math.Cos(30 deg))^2 - (Math.Sin(30 deg))^2 = 5.0000000000000022E-001
'
'                            Math.Sin(45 deg) = 7.0710678118654746E-001
'                            Math.Cos(45 deg) = 7.0710678118654757E-001
' (Math.Sin(45 deg))^2 + (Math.Cos(45 deg))^2 = 1.0000000000000000E+000
'                            Math.Sin(90 deg) = 1.0000000000000000E+000
'     2 * Math.Sin(45 deg) * Math.Cos(45 deg) = 1.0000000000000000E+000
'                            Math.Cos(90 deg) = 6.1230317691118863E-017
' (Math.Cos(45 deg))^2 - (Math.Sin(45 deg))^2 = 2.2204460492503131E-016
'
' Convert selected values for X and Y to radians
' and evaluate these trigonometric identities:
'    sin(X + Y) = sin(X) * cos(Y) + cos(X) * sin(Y)
'    cos(X + Y) = cos(X) * cos(Y) - sin(X) * sin(Y)
'
'         Math.Sin(15 deg) * Math.Cos(30 deg) +
'         Math.Cos(15 deg) * Math.Sin(30 deg) = 7.0710678118654746E-001
'                            Math.Sin(45 deg) = 7.0710678118654746E-001
'         Math.Cos(15 deg) * Math.Cos(30 deg) -
'         Math.Sin(15 deg) * Math.Sin(30 deg) = 7.0710678118654757E-001
'                            Math.Cos(45 deg) = 7.0710678118654757E-001
'
'         Math.Sin(30 deg) * Math.Cos(45 deg) +
'         Math.Cos(30 deg) * Math.Sin(45 deg) = 9.6592582628906831E-001
'                            Math.Sin(75 deg) = 9.6592582628906820E-001
'         Math.Cos(30 deg) * Math.Cos(45 deg) -
'         Math.Sin(30 deg) * Math.Sin(45 deg) = 2.5881904510252085E-001
'                            Math.Cos(75 deg) = 2.5881904510252096E-001

// Example for the trigonometric Math.Sin( double )
// and Math.Cos( double ) methods.
using System;

class SinCos
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of trigonometric " +
            "Math.Sin( double ) and Math.Cos( double )\n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Convert selected values for X to radians \n" +
            "and evaluate these trigonometric identities:" );
        Console.WriteLine( "   sin^2(X) + cos^2(X) == 1\n" +
                           "   sin(2 * X) == 2 * sin(X) * cos(X)" );
        Console.WriteLine( "   cos(2 * X) == cos^2(X) - sin^2(X)" );

        UseSineCosine(15.0);
        UseSineCosine(30.0);
        UseSineCosine(45.0);

        Console.WriteLine(
            "\nConvert selected values for X and Y to radians \n" +
            "and evaluate these trigonometric identities:" );
        Console.WriteLine( "   sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y)" );
        Console.WriteLine( "   cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y)" );

        UseTwoAngles(15.0, 30.0);
        UseTwoAngles(30.0, 45.0);
    }

    // Evaluate trigonometric identities with a given angle.
    static void UseSineCosine(double degrees)
    {
        double angle    = Math.PI * degrees / 180.0;
        double sinAngle = Math.Sin(angle);
        double cosAngle = Math.Cos(angle);

        // Evaluate sin^2(X) + cos^2(X) == 1.
        Console.WriteLine(
            "\n                           Math.Sin({0} deg) == {1:E16}\n" +
            "                           Math.Cos({0} deg) == {2:E16}",
            degrees, Math.Sin(angle), Math.Cos(angle) );
        Console.WriteLine(
            "(Math.Sin({0} deg))^2 + (Math.Cos({0} deg))^2 == {1:E16}",
            degrees, sinAngle * sinAngle + cosAngle * cosAngle );

        // Evaluate sin(2 * X) == 2 * sin(X) * cos(X).
        Console.WriteLine(
            "                           Math.Sin({0} deg) == {1:E16}",
            2.0 * degrees, Math.Sin(2.0 * angle) );
        Console.WriteLine(
            "    2 * Math.Sin({0} deg) * Math.Cos({0} deg) == {1:E16}",
            degrees, 2.0 * sinAngle * cosAngle );

        // Evaluate cos(2 * X) == cos^2(X) - sin^2(X).
        Console.WriteLine(
            "                           Math.Cos({0} deg) == {1:E16}",
            2.0 * degrees, Math.Cos(2.0 * angle) );
        Console.WriteLine(
            "(Math.Cos({0} deg))^2 - (Math.Sin({0} deg))^2 == {1:E16}",
            degrees, cosAngle * cosAngle - sinAngle * sinAngle );
    }

    // Evaluate trigonometric identities that are functions of two angles.
    static void UseTwoAngles(double degreesX, double degreesY)
    {
        double  angleX  = Math.PI * degreesX / 180.0;
        double  angleY  = Math.PI * degreesY / 180.0;

        // Evaluate sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y).
        Console.WriteLine(
            "\n        Math.Sin({0} deg) * Math.Cos({1} deg) +\n" +
            "        Math.Cos({0} deg) * Math.Sin({1} deg) == {2:E16}",
            degreesX, degreesY, Math.Sin(angleX) * Math.Cos(angleY) +
            Math.Cos(angleX) * Math.Sin(angleY));
        Console.WriteLine(
            "                           Math.Sin({0} deg) == {1:E16}",
            degreesX + degreesY, Math.Sin(angleX + angleY));

        // Evaluate cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y).
        Console.WriteLine(
            "        Math.Cos({0} deg) * Math.Cos({1} deg) -\n" +
            "        Math.Sin({0} deg) * Math.Sin({1} deg) == {2:E16}",
            degreesX, degreesY, Math.Cos(angleX) * Math.Cos(angleY) -
            Math.Sin(angleX) * Math.Sin(angleY));
        Console.WriteLine(
            "                           Math.Cos({0} deg) == {1:E16}",
            degreesX + degreesY, Math.Cos(angleX + angleY));
    }
}

/*
This example of trigonometric Math.Sin( double ) and Math.Cos( double )
generates the following output.

Convert selected values for X to radians
and evaluate these trigonometric identities:
   sin^2(X) + cos^2(X) == 1
   sin(2 * X) == 2 * sin(X) * cos(X)
   cos(2 * X) == cos^2(X) - sin^2(X)

                           Math.Sin(15 deg) == 2.5881904510252074E-001
                           Math.Cos(15 deg) == 9.6592582628906831E-001
(Math.Sin(15 deg))^2 + (Math.Cos(15 deg))^2 == 1.0000000000000000E+000
                           Math.Sin(30 deg) == 4.9999999999999994E-001
    2 * Math.Sin(15 deg) * Math.Cos(15 deg) == 4.9999999999999994E-001
                           Math.Cos(30 deg) == 8.6602540378443871E-001
(Math.Cos(15 deg))^2 - (Math.Sin(15 deg))^2 == 8.6602540378443871E-001

                           Math.Sin(30 deg) == 4.9999999999999994E-001
                           Math.Cos(30 deg) == 8.6602540378443871E-001
(Math.Sin(30 deg))^2 + (Math.Cos(30 deg))^2 == 1.0000000000000000E+000
                           Math.Sin(60 deg) == 8.6602540378443860E-001
    2 * Math.Sin(30 deg) * Math.Cos(30 deg) == 8.6602540378443860E-001
                           Math.Cos(60 deg) == 5.0000000000000011E-001
(Math.Cos(30 deg))^2 - (Math.Sin(30 deg))^2 == 5.0000000000000022E-001

                           Math.Sin(45 deg) == 7.0710678118654746E-001
                           Math.Cos(45 deg) == 7.0710678118654757E-001
(Math.Sin(45 deg))^2 + (Math.Cos(45 deg))^2 == 1.0000000000000000E+000
                           Math.Sin(90 deg) == 1.0000000000000000E+000
    2 * Math.Sin(45 deg) * Math.Cos(45 deg) == 1.0000000000000000E+000
                           Math.Cos(90 deg) == 6.1230317691118863E-017
(Math.Cos(45 deg))^2 - (Math.Sin(45 deg))^2 == 2.2204460492503131E-016

Convert selected values for X and Y to radians
and evaluate these trigonometric identities:
   sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y)
   cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y)

        Math.Sin(15 deg) * Math.Cos(30 deg) +
        Math.Cos(15 deg) * Math.Sin(30 deg) == 7.0710678118654746E-001
                           Math.Sin(45 deg) == 7.0710678118654746E-001
        Math.Cos(15 deg) * Math.Cos(30 deg) -
        Math.Sin(15 deg) * Math.Sin(30 deg) == 7.0710678118654757E-001
                           Math.Cos(45 deg) == 7.0710678118654757E-001

        Math.Sin(30 deg) * Math.Cos(45 deg) +
        Math.Cos(30 deg) * Math.Sin(45 deg) == 9.6592582628906831E-001
                           Math.Sin(75 deg) == 9.6592582628906820E-001
        Math.Cos(30 deg) * Math.Cos(45 deg) -
        Math.Sin(30 deg) * Math.Sin(45 deg) == 2.5881904510252085E-001
                           Math.Cos(75 deg) == 2.5881904510252096E-001
*/

// Example for the trigonometric Math.Sin( double )
// and Math.Cos( double ) methods.
using namespace System;

// Evaluate trigonometric identities with a given angle.
void UseSineCosine( double degrees )
{
   double angle = Math::PI * degrees / 180.0;
   double sinAngle = Math::Sin( angle );
   double cosAngle = Math::Cos( angle );

   // Evaluate sin^2(X) + cos^2(X) == 1.
   Console::WriteLine( "\n                            Math::Sin({0} deg) == {1:E16}\n"
   "                            Math::Cos({0} deg) == {2:E16}", degrees, Math::Sin( angle ), Math::Cos( angle ) );
   Console::WriteLine( "(Math::Sin({0} deg))^2 + (Math::Cos({0} deg))^2 == {1:E16}", degrees, sinAngle * sinAngle + cosAngle * cosAngle );

   // Evaluate sin(2 * X) == 2 * sin(X) * cos(X).
   Console::WriteLine( "                            Math::Sin({0} deg) == {1:E16}", 2.0 * degrees, Math::Sin( 2.0 * angle ) );
   Console::WriteLine( "    2 * Math::Sin({0} deg) * Math::Cos({0} deg) == {1:E16}", degrees, 2.0 * sinAngle * cosAngle );

   // Evaluate cos(2 * X) == cos^2(X) - sin^2(X).
   Console::WriteLine( "                            Math::Cos({0} deg) == {1:E16}", 2.0 * degrees, Math::Cos( 2.0 * angle ) );
   Console::WriteLine( "(Math::Cos({0} deg))^2 - (Math::Sin({0} deg))^2 == {1:E16}", degrees, cosAngle * cosAngle - sinAngle * sinAngle );
}

// Evaluate trigonometric identities that are functions of two angles.
void UseTwoAngles( double degreesX, double degreesY )
{
   double angleX = Math::PI * degreesX / 180.0;
   double angleY = Math::PI * degreesY / 180.0;

   // Evaluate sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y).
   Console::WriteLine( "\n        Math::Sin({0} deg) * Math::Cos({1} deg) +\n"
   "        Math::Cos({0} deg) * Math::Sin({1} deg) == {2:E16}", degreesX, degreesY, Math::Sin( angleX ) * Math::Cos( angleY ) + Math::Cos( angleX ) * Math::Sin( angleY ) );
   Console::WriteLine( "                            Math::Sin({0} deg) == {1:E16}", degreesX + degreesY, Math::Sin( angleX + angleY ) );

   // Evaluate cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y).
   Console::WriteLine( "        Math::Cos({0} deg) * Math::Cos({1} deg) -\n"
   "        Math::Sin({0} deg) * Math::Sin({1} deg) == {2:E16}", degreesX, degreesY, Math::Cos( angleX ) * Math::Cos( angleY ) - Math::Sin( angleX ) * Math::Sin( angleY ) );
   Console::WriteLine( "                            Math::Cos({0} deg) == {1:E16}", degreesX + degreesY, Math::Cos( angleX + angleY ) );
}

int main()
{
   Console::WriteLine( "This example of trigonometric "
   "Math::Sin( double ) and Math::Cos( double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "Convert selected values for X to radians \n"
   "and evaluate these trigonometric identities:" );
   Console::WriteLine( "   sin^2(X) + cos^2(X) == 1\n"
   "   sin(2 * X) == 2 * sin(X) * cos(X)" );
   Console::WriteLine( "   cos(2 * X) == cos^2(X) - sin^2(X)" );
   UseSineCosine( 15.0 );
   UseSineCosine( 30.0 );
   UseSineCosine( 45.0 );
   Console::WriteLine( "\nConvert selected values for X and Y to radians \n"
   "and evaluate these trigonometric identities:" );
   Console::WriteLine( "   sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y)" );
   Console::WriteLine( "   cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y)" );
   UseTwoAngles( 15.0, 30.0 );
   UseTwoAngles( 30.0, 45.0 );
}

/*
This example of trigonometric Math::Sin( double ) and Math::Cos( double )
generates the following output.

Convert selected values for X to radians
and evaluate these trigonometric identities:
   sin^2(X) + cos^2(X) == 1
   sin(2 * X) == 2 * sin(X) * cos(X)
   cos(2 * X) == cos^2(X) - sin^2(X)

                            Math::Sin(15 deg) == 2.5881904510252074E-001
                            Math::Cos(15 deg) == 9.6592582628906831E-001
(Math::Sin(15 deg))^2 + (Math::Cos(15 deg))^2 == 1.0000000000000000E+000
                            Math::Sin(30 deg) == 4.9999999999999994E-001
    2 * Math::Sin(15 deg) * Math::Cos(15 deg) == 4.9999999999999994E-001
                            Math::Cos(30 deg) == 8.6602540378443871E-001
(Math::Cos(15 deg))^2 - (Math::Sin(15 deg))^2 == 8.6602540378443871E-001

                            Math::Sin(30 deg) == 4.9999999999999994E-001
                            Math::Cos(30 deg) == 8.6602540378443871E-001
(Math::Sin(30 deg))^2 + (Math::Cos(30 deg))^2 == 1.0000000000000000E+000
                            Math::Sin(60 deg) == 8.6602540378443860E-001
    2 * Math::Sin(30 deg) * Math::Cos(30 deg) == 8.6602540378443860E-001
                            Math::Cos(60 deg) == 5.0000000000000011E-001
(Math::Cos(30 deg))^2 - (Math::Sin(30 deg))^2 == 5.0000000000000022E-001

                            Math::Sin(45 deg) == 7.0710678118654746E-001
                            Math::Cos(45 deg) == 7.0710678118654757E-001
(Math::Sin(45 deg))^2 + (Math::Cos(45 deg))^2 == 1.0000000000000000E+000
                            Math::Sin(90 deg) == 1.0000000000000000E+000
    2 * Math::Sin(45 deg) * Math::Cos(45 deg) == 1.0000000000000000E+000
                            Math::Cos(90 deg) == 6.1230317691118863E-017
(Math::Cos(45 deg))^2 - (Math::Sin(45 deg))^2 == 2.2204460492503131E-016

Convert selected values for X and Y to radians
and evaluate these trigonometric identities:
   sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y)
   cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y)

        Math::Sin(15 deg) * Math::Cos(30 deg) +
        Math::Cos(15 deg) * Math::Sin(30 deg) == 7.0710678118654746E-001
                            Math::Sin(45 deg) == 7.0710678118654746E-001
        Math::Cos(15 deg) * Math::Cos(30 deg) -
        Math::Sin(15 deg) * Math::Sin(30 deg) == 7.0710678118654757E-001
                            Math::Cos(45 deg) == 7.0710678118654757E-001

        Math::Sin(30 deg) * Math::Cos(45 deg) +
        Math::Cos(30 deg) * Math::Sin(45 deg) == 9.6592582628906831E-001
                            Math::Sin(75 deg) == 9.6592582628906820E-001
        Math::Cos(30 deg) * Math::Cos(45 deg) -
        Math::Sin(30 deg) * Math::Sin(45 deg) == 2.5881904510252085E-001
                            Math::Cos(75 deg) == 2.5881904510252096E-001
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Cosh 方法

Math
.
.
::
.
Cosh 方法
Math 类

返回指定角度的双曲余弦值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Cosh ( _
    value As Double _
) As Double
public static double Cosh(
    double value
)
public:
static double Cosh(
    double value
)
static member Cosh :
        value:float -> float

参数

value
类型： System Double
以弧度为单位的角。

返回值

类型： System Double
value 的双曲余弦值。如果 value 等于 NegativeInfinity 或 PositiveInfinity，则返回 PositiveInfinity。如果 value 等于 NaN，则返回 NaN。 value 的双曲余弦值。如果 value 等于 NegativeInfinity 或 PositiveInfinity，则返回 PositiveInfinity。如果 value 等于 NaN，则返回 NaN。 value 的双曲余弦值。如果 value 等于 NegativeInfinity 或 PositiveInfinity，则返回 PositiveInfinity。如果 value 等于 NaN，则返回 NaN。

角度 value 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。 角度 value 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。

下面的示例使用 Cosh 计算所选值的特定双曲线恒等式。

' Example for the hyperbolic Math.Sinh( Double ) and Math.Cosh( Double ) methods.
Imports System
Imports Microsoft.VisualBasic

Module SinhCosh

    Sub Main()
        Console.WriteLine( _
            "This example of hyperbolic " & _
            "Math.Sinh( Double ) and Math.Cosh( Double )" & vbCrLf & _
            "generates the following output." & vbCrLf)
        Console.WriteLine( _
            "Evaluate these hyperbolic identities " & _
            "with selected values for X:")
        Console.WriteLine( _
            "   cosh^2(X) - sinh^2(X) = 1" & vbCrLf & _
            "   sinh(2 * X) = 2 * sinh(X) * cosh(X)")
        Console.WriteLine("   cosh(2 * X) = cosh^2(X) + sinh^2(X)")

        UseSinhCosh(0.1)
        UseSinhCosh(1.2)
        UseSinhCosh(4.9)

        Console.WriteLine( _
            vbCrLf & "Evaluate these hyperbolic " & _
            "identities with selected values for X and Y:")
        Console.WriteLine( _
            "   sinh(X + Y) = sinh(X) * cosh(Y) + cosh(X) * sinh(Y)")
        Console.WriteLine( _
            "   cosh(X + Y) = cosh(X) * cosh(Y) + sinh(X) * sinh(Y)")

        UseTwoArgs(0.1, 1.2)
        UseTwoArgs(1.2, 4.9)
    End Sub 'Main

    ' Evaluate hyperbolic identities with a given argument.
    Sub UseSinhCosh(arg As Double)
        Dim sinhArg As Double = Math.Sinh(arg)
        Dim coshArg As Double = Math.Cosh(arg)

        ' Evaluate cosh^2(X) - sinh^2(X) = 1.
        Console.WriteLine( _
            vbCrLf & "                         Math.Sinh({0}) = {1:E16}" + _
            vbCrLf & "                         Math.Cosh({0}) = {2:E16}", _
            arg, Math.Sinh(arg), Math.Cosh(arg))
        Console.WriteLine( _
            "(Math.Cosh({0}))^2 - (Math.Sinh({0}))^2 = {1:E16}", _
            arg, coshArg * coshArg - sinhArg * sinhArg)

        ' Evaluate sinh(2 * X) = 2 * sinh(X) * cosh(X).
        Console.WriteLine( _
            "                         Math.Sinh({0}) = {1:E16}", _
            2.0 * arg, Math.Sinh((2.0 * arg)))
        Console.WriteLine( _
            "    2 * Math.Sinh({0}) * Math.Cosh({0}) = {1:E16}", _
            arg, 2.0 * sinhArg * coshArg)

        ' Evaluate cosh(2 * X) = cosh^2(X) + sinh^2(X).
        Console.WriteLine( _
            "                         Math.Cosh({0}) = {1:E16}", _
            2.0 * arg, Math.Cosh((2.0 * arg)))
        Console.WriteLine( _
            "(Math.Cosh({0}))^2 + (Math.Sinh({0}))^2 = {1:E16}", _
            arg, coshArg * coshArg + sinhArg * sinhArg)

    End Sub 'UseSinhCosh

    ' Evaluate hyperbolic identities that are functions of two arguments.
    Sub UseTwoArgs(argX As Double, argY As Double)

        ' Evaluate sinh(X + Y) = sinh(X) * cosh(Y) + cosh(X) * sinh(Y).
        Console.WriteLine( _
            vbCrLf & "        Math.Sinh({0}) * Math.Cosh({1}) +" + _
            vbCrLf & "        Math.Cosh({0}) * Math.Sinh({1}) = {2:E16}", _
            argX, argY, Math.Sinh(argX) * Math.Cosh(argY) + _
            Math.Cosh(argX) * Math.Sinh(argY))
        Console.WriteLine( _
            "                         Math.Sinh({0}) = {1:E16}", _
            argX + argY, Math.Sinh((argX + argY)))

        ' Evaluate cosh(X + Y) = cosh(X) * cosh(Y) + sinh(X) * sinh(Y).
        Console.WriteLine( _
            "        Math.Cosh({0}) * Math.Cosh({1}) +" + _
            vbCrLf & "        Math.Sinh({0}) * Math.Sinh({1}) = {2:E16}", _
            argX, argY, Math.Cosh(argX) * Math.Cosh(argY) + _
            Math.Sinh(argX) * Math.Sinh(argY))
        Console.WriteLine( _
            "                         Math.Cosh({0}) = {1:E16}", _
            argX + argY, Math.Cosh((argX + argY)))

    End Sub 'UseTwoArgs
End Module 'SinhCosh

' This example of hyperbolic Math.Sinh( Double ) and Math.Cosh( Double )
' generates the following output.
'
' Evaluate these hyperbolic identities with selected values for X:
'    cosh^2(X) - sinh^2(X) = 1
'    sinh(2 * X) = 2 * sinh(X) * cosh(X)
'    cosh(2 * X) = cosh^2(X) + sinh^2(X)
'
'                          Math.Sinh(0.1) = 1.0016675001984403E-001
'                          Math.Cosh(0.1) = 1.0050041680558035E+000
' (Math.Cosh(0.1))^2 - (Math.Sinh(0.1))^2 = 9.9999999999999989E-001
'                          Math.Sinh(0.2) = 2.0133600254109399E-001
'     2 * Math.Sinh(0.1) * Math.Cosh(0.1) = 2.0133600254109396E-001
'                          Math.Cosh(0.2) = 1.0200667556190759E+000
' (Math.Cosh(0.1))^2 + (Math.Sinh(0.1))^2 = 1.0200667556190757E+000
'
'                          Math.Sinh(1.2) = 1.5094613554121725E+000
'                          Math.Cosh(1.2) = 1.8106555673243747E+000
' (Math.Cosh(1.2))^2 - (Math.Sinh(1.2))^2 = 1.0000000000000000E+000
'                          Math.Sinh(2.4) = 5.4662292136760939E+000
'     2 * Math.Sinh(1.2) * Math.Cosh(1.2) = 5.4662292136760939E+000
'                          Math.Cosh(2.4) = 5.5569471669655064E+000
' (Math.Cosh(1.2))^2 + (Math.Sinh(1.2))^2 = 5.5569471669655064E+000
'
'                          Math.Sinh(4.9) = 6.7141166550932297E+001
'                          Math.Cosh(4.9) = 6.7148613134003227E+001
' (Math.Cosh(4.9))^2 - (Math.Sinh(4.9))^2 = 1.0000000000000000E+000
'                          Math.Sinh(9.8) = 9.0168724361884615E+003
'     2 * Math.Sinh(4.9) * Math.Cosh(4.9) = 9.0168724361884615E+003
'                          Math.Cosh(9.8) = 9.0168724916400624E+003
' (Math.Cosh(4.9))^2 + (Math.Sinh(4.9))^2 = 9.0168724916400606E+003
'
' Evaluate these hyperbolic identities with selected values for X and Y:
'    sinh(X + Y) = sinh(X) * cosh(Y) + cosh(X) * sinh(Y)
'    cosh(X + Y) = cosh(X) * cosh(Y) + sinh(X) * sinh(Y)
'
'         Math.Sinh(0.1) * Math.Cosh(1.2) +
'         Math.Cosh(0.1) * Math.Sinh(1.2) = 1.6983824372926155E+000
'                          Math.Sinh(1.3) = 1.6983824372926160E+000
'         Math.Cosh(0.1) * Math.Cosh(1.2) +
'         Math.Sinh(0.1) * Math.Sinh(1.2) = 1.9709142303266281E+000
'                          Math.Cosh(1.3) = 1.9709142303266285E+000
'
'         Math.Sinh(1.2) * Math.Cosh(4.9) +
'         Math.Cosh(1.2) * Math.Sinh(4.9) = 2.2292776360739879E+002
'                          Math.Sinh(6.1) = 2.2292776360739885E+002
'         Math.Cosh(1.2) * Math.Cosh(4.9) +
'         Math.Sinh(1.2) * Math.Sinh(4.9) = 2.2293000647511826E+002
'                          Math.Cosh(6.1) = 2.2293000647511832E+002

// Example for the hyperbolic Math.Sinh( double )
// and Math.Cosh( double ) methods.
using System;

class SinhCosh
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of hyperbolic Math.Sinh( double ) " +
            "and Math.Cosh( double )\n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Evaluate these hyperbolic identities " +
            "with selected values for X:" );
        Console.WriteLine(
            "   cosh^2(X) - sinh^2(X) == 1\n" +
            "   sinh(2 * X) == 2 * sinh(X) * cosh(X)" );
        Console.WriteLine( "   cosh(2 * X) == cosh^2(X) + sinh^2(X)" );

        UseSinhCosh(0.1);
        UseSinhCosh(1.2);
        UseSinhCosh(4.9);

        Console.WriteLine(
            "\nEvaluate these hyperbolic identities " +
            "with selected values for X and Y:" );
        Console.WriteLine(
            "   sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y)" );
        Console.WriteLine(
            "   cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y)" );

        UseTwoArgs(0.1, 1.2);
        UseTwoArgs(1.2, 4.9);
    }

    // Evaluate hyperbolic identities with a given argument.
    static void UseSinhCosh(double arg)
    {
        double sinhArg = Math.Sinh(arg);
        double coshArg = Math.Cosh(arg);

        // Evaluate cosh^2(X) - sinh^2(X) == 1.
        Console.WriteLine(
            "\n                         Math.Sinh({0}) == {1:E16}\n" +
            "                         Math.Cosh({0}) == {2:E16}",
            arg, Math.Sinh(arg), Math.Cosh(arg) );
        Console.WriteLine(
            "(Math.Cosh({0}))^2 - (Math.Sinh({0}))^2 == {1:E16}",
            arg, coshArg * coshArg - sinhArg * sinhArg );

        // Evaluate sinh(2 * X) == 2 * sinh(X) * cosh(X).
        Console.WriteLine(
            "                         Math.Sinh({0}) == {1:E16}",
            2.0 * arg, Math.Sinh(2.0 * arg) );
        Console.WriteLine(
            "    2 * Math.Sinh({0}) * Math.Cosh({0}) == {1:E16}",
            arg, 2.0 * sinhArg * coshArg );

        // Evaluate cosh(2 * X) == cosh^2(X) + sinh^2(X).
        Console.WriteLine(
            "                         Math.Cosh({0}) == {1:E16}",
            2.0 * arg, Math.Cosh(2.0 * arg) );
        Console.WriteLine(
            "(Math.Cosh({0}))^2 + (Math.Sinh({0}))^2 == {1:E16}",
            arg, coshArg * coshArg + sinhArg * sinhArg );
    }

    // Evaluate hyperbolic identities that are functions of two arguments.
    static void UseTwoArgs(double argX, double argY)
    {
        // Evaluate sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y).
        Console.WriteLine(
            "\n        Math.Sinh({0}) * Math.Cosh({1}) +\n" +
            "        Math.Cosh({0}) * Math.Sinh({1}) == {2:E16}",
            argX, argY, Math.Sinh(argX) * Math.Cosh(argY) +
            Math.Cosh(argX) * Math.Sinh(argY));
        Console.WriteLine(
            "                         Math.Sinh({0}) == {1:E16}",
            argX + argY, Math.Sinh(argX + argY));

        // Evaluate cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y).
        Console.WriteLine(
            "        Math.Cosh({0}) * Math.Cosh({1}) +\n" +
            "        Math.Sinh({0}) * Math.Sinh({1}) == {2:E16}",
            argX, argY, Math.Cosh(argX) * Math.Cosh(argY) +
            Math.Sinh(argX) * Math.Sinh(argY));
        Console.WriteLine(
            "                         Math.Cosh({0}) == {1:E16}",
            argX + argY, Math.Cosh(argX + argY));
    }
}

/*
This example of hyperbolic Math.Sinh( double ) and Math.Cosh( double )
generates the following output.

Evaluate these hyperbolic identities with selected values for X:
   cosh^2(X) - sinh^2(X) == 1
   sinh(2 * X) == 2 * sinh(X) * cosh(X)
   cosh(2 * X) == cosh^2(X) + sinh^2(X)

                         Math.Sinh(0.1) == 1.0016675001984403E-001
                         Math.Cosh(0.1) == 1.0050041680558035E+000
(Math.Cosh(0.1))^2 - (Math.Sinh(0.1))^2 == 9.9999999999999989E-001
                         Math.Sinh(0.2) == 2.0133600254109399E-001
    2 * Math.Sinh(0.1) * Math.Cosh(0.1) == 2.0133600254109396E-001
                         Math.Cosh(0.2) == 1.0200667556190759E+000
(Math.Cosh(0.1))^2 + (Math.Sinh(0.1))^2 == 1.0200667556190757E+000

                         Math.Sinh(1.2) == 1.5094613554121725E+000
                         Math.Cosh(1.2) == 1.8106555673243747E+000
(Math.Cosh(1.2))^2 - (Math.Sinh(1.2))^2 == 1.0000000000000000E+000
                         Math.Sinh(2.4) == 5.4662292136760939E+000
    2 * Math.Sinh(1.2) * Math.Cosh(1.2) == 5.4662292136760939E+000
                         Math.Cosh(2.4) == 5.5569471669655064E+000
(Math.Cosh(1.2))^2 + (Math.Sinh(1.2))^2 == 5.5569471669655064E+000

                         Math.Sinh(4.9) == 6.7141166550932297E+001
                         Math.Cosh(4.9) == 6.7148613134003227E+001
(Math.Cosh(4.9))^2 - (Math.Sinh(4.9))^2 == 1.0000000000000000E+000
                         Math.Sinh(9.8) == 9.0168724361884615E+003
    2 * Math.Sinh(4.9) * Math.Cosh(4.9) == 9.0168724361884615E+003
                         Math.Cosh(9.8) == 9.0168724916400624E+003
(Math.Cosh(4.9))^2 + (Math.Sinh(4.9))^2 == 9.0168724916400606E+003

Evaluate these hyperbolic identities with selected values for X and Y:
   sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y)
   cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y)

        Math.Sinh(0.1) * Math.Cosh(1.2) +
        Math.Cosh(0.1) * Math.Sinh(1.2) == 1.6983824372926155E+000
                         Math.Sinh(1.3) == 1.6983824372926160E+000
        Math.Cosh(0.1) * Math.Cosh(1.2) +
        Math.Sinh(0.1) * Math.Sinh(1.2) == 1.9709142303266281E+000
                         Math.Cosh(1.3) == 1.9709142303266285E+000

        Math.Sinh(1.2) * Math.Cosh(4.9) +
        Math.Cosh(1.2) * Math.Sinh(4.9) == 2.2292776360739879E+002
                         Math.Sinh(6.1) == 2.2292776360739885E+002
        Math.Cosh(1.2) * Math.Cosh(4.9) +
        Math.Sinh(1.2) * Math.Sinh(4.9) == 2.2293000647511826E+002
                         Math.Cosh(6.1) == 2.2293000647511832E+002
*/

// Example for the hyperbolic Math.Sinh( double )
// and Math.Cosh( double ) methods.
using namespace System;

// Evaluate hyperbolic identities with a given argument.
void UseSinhCosh( double arg )
{
   double sinhArg = Math::Sinh( arg );
   double coshArg = Math::Cosh( arg );

   // Evaluate cosh^2(X) - sinh^2(X) == 1.
   Console::WriteLine( "\n                          Math::Sinh({0}) == {1:E16}\n"
   "                          Math::Cosh({0}) == {2:E16}", arg, Math::Sinh( arg ), Math::Cosh( arg ) );
   Console::WriteLine( "(Math::Cosh({0}))^2 - (Math::Sinh({0}))^2 == {1:E16}", arg, coshArg * coshArg - sinhArg * sinhArg );

   // Evaluate sinh(2 * X) == 2 * sinh(X) * cosh(X).
   Console::WriteLine( "                          Math::Sinh({0}) == {1:E16}", 2.0 * arg, Math::Sinh( 2.0 * arg ) );
   Console::WriteLine( "    2 * Math::Sinh({0}) * Math::Cosh({0}) == {1:E16}", arg, 2.0 * sinhArg * coshArg );

   // Evaluate cosh(2 * X) == cosh^2(X) + sinh^2(X).
   Console::WriteLine( "                          Math::Cosh({0}) == {1:E16}", 2.0 * arg, Math::Cosh( 2.0 * arg ) );
   Console::WriteLine( "(Math::Cosh({0}))^2 + (Math::Sinh({0}))^2 == {1:E16}", arg, coshArg * coshArg + sinhArg * sinhArg );
}

// Evaluate hyperbolic identities that are functions of two arguments.
void UseTwoArgs( double argX, double argY )
{

   // Evaluate sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y).
   Console::WriteLine( "\n        Math::Sinh({0}) * Math::Cosh({1}) +\n"
   "        Math::Cosh({0}) * Math::Sinh({1}) == {2:E16}", argX, argY, Math::Sinh( argX ) * Math::Cosh( argY ) + Math::Cosh( argX ) * Math::Sinh( argY ) );
   Console::WriteLine( "                          Math::Sinh({0}) == {1:E16}", argX + argY, Math::Sinh( argX + argY ) );

   // Evaluate cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y).
   Console::WriteLine( "        Math::Cosh({0}) * Math::Cosh({1}) +\n"
   "        Math::Sinh({0}) * Math::Sinh({1}) == {2:E16}", argX, argY, Math::Cosh( argX ) * Math::Cosh( argY ) + Math::Sinh( argX ) * Math::Sinh( argY ) );
   Console::WriteLine( "                          Math::Cosh({0}) == {1:E16}", argX + argY, Math::Cosh( argX + argY ) );
}

int main()
{
   Console::WriteLine( "This example of hyperbolic "
   "Math::Sinh( double ) and Math::Cosh( double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "Evaluate these hyperbolic identities "
   "with selected values for X:" );
   Console::WriteLine( "   cosh^2(X) - sinh^2(X) == 1\n"
   "   sinh(2 * X) == 2 * sinh(X) * cosh(X)" );
   Console::WriteLine( "   cosh(2 * X) == cosh^2(X) + sinh^2(X)" );
   UseSinhCosh( 0.1 );
   UseSinhCosh( 1.2 );
   UseSinhCosh( 4.9 );
   Console::WriteLine( "\nEvaluate these hyperbolic identities "
   "with selected values for X and Y:" );
   Console::WriteLine( "   sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y)" );
   Console::WriteLine( "   cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y)" );
   UseTwoArgs( 0.1, 1.2 );
   UseTwoArgs( 1.2, 4.9 );
}

/*
This example of hyperbolic Math::Sinh( double ) and Math::Cosh( double )
generates the following output.

Evaluate these hyperbolic identities with selected values for X:
   cosh^2(X) - sinh^2(X) == 1
   sinh(2 * X) == 2 * sinh(X) * cosh(X)
   cosh(2 * X) == cosh^2(X) + sinh^2(X)

                          Math::Sinh(0.1) == 1.0016675001984403E-001
                          Math::Cosh(0.1) == 1.0050041680558035E+000
(Math::Cosh(0.1))^2 - (Math::Sinh(0.1))^2 == 9.9999999999999989E-001
                          Math::Sinh(0.2) == 2.0133600254109399E-001
    2 * Math::Sinh(0.1) * Math::Cosh(0.1) == 2.0133600254109396E-001
                          Math::Cosh(0.2) == 1.0200667556190759E+000
(Math::Cosh(0.1))^2 + (Math::Sinh(0.1))^2 == 1.0200667556190757E+000

                          Math::Sinh(1.2) == 1.5094613554121725E+000
                          Math::Cosh(1.2) == 1.8106555673243747E+000
(Math::Cosh(1.2))^2 - (Math::Sinh(1.2))^2 == 1.0000000000000000E+000
                          Math::Sinh(2.4) == 5.4662292136760939E+000
    2 * Math::Sinh(1.2) * Math::Cosh(1.2) == 5.4662292136760939E+000
                          Math::Cosh(2.4) == 5.5569471669655064E+000
(Math::Cosh(1.2))^2 + (Math::Sinh(1.2))^2 == 5.5569471669655064E+000

                          Math::Sinh(4.9) == 6.7141166550932297E+001
                          Math::Cosh(4.9) == 6.7148613134003227E+001
(Math::Cosh(4.9))^2 - (Math::Sinh(4.9))^2 == 1.0000000000000000E+000
                          Math::Sinh(9.8) == 9.0168724361884615E+003
    2 * Math::Sinh(4.9) * Math::Cosh(4.9) == 9.0168724361884615E+003
                          Math::Cosh(9.8) == 9.0168724916400624E+003
(Math::Cosh(4.9))^2 + (Math::Sinh(4.9))^2 == 9.0168724916400606E+003

Evaluate these hyperbolic identities with selected values for X and Y:
   sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y)
   cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y)

        Math::Sinh(0.1) * Math::Cosh(1.2) +
        Math::Cosh(0.1) * Math::Sinh(1.2) == 1.6983824372926155E+000
                          Math::Sinh(1.3) == 1.6983824372926160E+000
        Math::Cosh(0.1) * Math::Cosh(1.2) +
        Math::Sinh(0.1) * Math::Sinh(1.2) == 1.9709142303266281E+000
                          Math::Cosh(1.3) == 1.9709142303266285E+000

        Math::Sinh(1.2) * Math::Cosh(4.9) +
        Math::Cosh(1.2) * Math::Sinh(4.9) == 2.2292776360739879E+002
                          Math::Sinh(6.1) == 2.2292776360739885E+002
        Math::Cosh(1.2) * Math::Cosh(4.9) +
        Math::Sinh(1.2) * Math::Sinh(4.9) == 2.2293000647511826E+002
                          Math::Cosh(6.1) == 2.2293000647511832E+002
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.DivRem 方法

Math
.
.
::
.
DivRem 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

计算两个数字的商，并在输出参数中返回余数。

名称 说明
页首

参考

Math 类
Math 成员
System 命名空间


Math ..::.DivRem 方法 (Int32, Int32, Int32%)

Math
.
.
::
.
DivRem 方法 (Int32, Int32, Int32%)
Math 类

计算两个 32 位有符号整数的商，并通过输出参数返回余数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function DivRem ( _
    a As Integer, _
    b As Integer, _
    <OutAttribute> ByRef result As Integer _
) As Integer
public static int DivRem(
    int a,
    int b,
    out int result
)
public:
static int DivRem(
    int a,
    int b,
    [OutAttribute] int% result
)
static member DivRem :
        a:int *
        b:int *
        result:int byref -> int

参数

a
类型： System Int32
被除数。
b
类型： System Int32
除数。
result
类型： System Int32 %
余数。

返回值

类型： System Int32
指定数字的商。
异常 | 条件
DivideByZeroException | b 是零。

使用取模运算计算余数。

下面的示例说明 Math..::.DivRem(Int32, Int32, Int32%) 方法。

Module Example
   Public Sub Main()
      ' Define several positive and negative dividends.
      Dim dividends() As Integer = { Int32.MaxValue, 13952, 0, -14032, _
                                     Int32.MinValue }
      ' Define one positive and one negative divisor.
      Dim divisors() As Integer = { 2000, -2000 }

      For Each divisor As Integer In divisors
         For Each dividend As Integer In dividends
            Dim remainder As Integer
            Dim quotient As Integer = Math.DivRem(dividend, divisor, remainder)
            Console.WriteLine("{0:N0} \ {1:N0} = {2:N0}, remainder {3:N0}", _
                              dividend, divisor, quotient, remainder)
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'       2,147,483,647 \ 2,000 = 1,073,741, remainder 1,647
'       13,952 \ 2,000 = 6, remainder 1,952
'       0 \ 2,000 = 0, remainder 0
'       -14,032 \ 2,000 = -7, remainder -32
'       -2,147,483,648 \ 2,000 = -1,073,741, remainder -1,648
'       2,147,483,647 \ -2,000 = -1,073,741, remainder 1,647
'       13,952 \ -2,000 = -6, remainder 1,952
'       0 \ -2,000 = 0, remainder 0
'       -14,032 \ -2,000 = 7, remainder -32
'       -2,147,483,648 \ -2,000 = 1,073,741, remainder -1,648

using System;

public class Example
{
   public static void Main()
   {
      // Define several positive and negative dividends.
      int[] dividends = { Int32.MaxValue, 13952, 0, -14032,
                                     Int32.MinValue };
      // Define one positive and one negative divisor.
      int[] divisors = { 2000, -2000 };

      foreach (int divisor in divisors)
      {
         foreach (int dividend in dividends)
         {
            int remainder;
            int quotient = Math.DivRem(dividend, divisor, out remainder);
            Console.WriteLine(@"{0:N0} \ {1:N0} = {2:N0}, remainder {3:N0}",
                              dividend, divisor, quotient, remainder);
         }
      }
   }
}
// The example displays the following output:
//       2,147,483,647 \ 2,000 = 1,073,741, remainder 1,647
//       13,952 \ 2,000 = 6, remainder 1,952
//       0 \ 2,000 = 0, remainder 0
//       -14,032 \ 2,000 = -7, remainder -32
//       -2,147,483,648 \ 2,000 = -1,073,741, remainder -1,648
//       2,147,483,647 \ -2,000 = -1,073,741, remainder 1,647
//       13,952 \ -2,000 = -6, remainder 1,952
//       0 \ -2,000 = 0, remainder 0
//       -14,032 \ -2,000 = 7, remainder -32
//       -2,147,483,648 \ -2,000 = 1,073,741, remainder -1,648

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
DivRem 重载
System 命名空间
IEEERemainder


Math ..::.DivRem 方法 (Int64, Int64, Int64%)

Math
.
.
::
.
DivRem 方法 (Int64, Int64, Int64%)
Math 类

计算两个 64 位有符号整数的商，并通过输出参数返回余数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function DivRem ( _
    a As Long, _
    b As Long, _
    <OutAttribute> ByRef result As Long _
) As Long
public static long DivRem(
    long a,
    long b,
    out long result
)
public:
static long long DivRem(
    long long a,
    long long b,
    [OutAttribute] long long% result
)
static member DivRem :
        a:int64 *
        b:int64 *
        result:int64 byref -> int64

参数

a
类型： System Int64
被除数。
b
类型： System Int64
除数。
result
类型： System Int64 %
余数。

返回值

类型： System Int64
指定数字的商。
异常 | 条件
DivideByZeroException | b 是零。

使用取模运算计算余数。

下面的示例说明 Math..::.DivRem(Int64, Int64, Int64%) 方法。

Module Example
   Public Sub Main()
      ' Define several positive and negative dividends.
      Dim dividends() As Long = { Int64.MaxValue, 13952, 0, -14032, _
                                     Int64.MinValue }
      ' Define one positive and one negative divisor.
      Dim divisors() As Long = { 2000, -2000 }

      For Each divisor As Long In divisors
         For Each dividend As Long In dividends
            Dim remainder As Long
            Dim quotient As Long = Math.DivRem(dividend, divisor, remainder)
            Console.WriteLine("{0:N0} \ {1:N0} = {2:N0}, remainder {3:N0}", _
                              dividend, divisor, quotient, remainder)
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'    9,223,372,036,854,775,807 \ 2,000 = 4,611,686,018,427,387, remainder 1,807
'    13,952 \ 2,000 = 6, remainder 1,952
'    0 \ 2,000 = 0, remainder 0
'    -14,032 \ 2,000 = -7, remainder -32
'    -9,223,372,036,854,775,808 \ 2,000 = -4,611,686,018,427,387, remainder -1,808
'    9,223,372,036,854,775,807 \ -2,000 = -4,611,686,018,427,387, remainder 1,807
'    13,952 \ -2,000 = -6, remainder 1,952
'    0 \ -2,000 = 0, remainder 0
'    -14,032 \ -2,000 = 7, remainder -32
'    -9,223,372,036,854,775,808 \ -2,000 = 4,611,686,018,427,387, remainder -1,808

using System;

public class Example
{
   public static void Main()
   {
      // Define several positive and negative dividends.
      long[] dividends = { Int64.MaxValue, 13952, 0, -14032,
                           Int64.MinValue };
      // Define one positive and one negative divisor.
      long[] divisors = { 2000, -2000 };

      foreach (long divisor in divisors)
      {
         foreach (long dividend in dividends)
         {
            long remainder;
            long quotient = Math.DivRem(dividend, divisor, out remainder);
            Console.WriteLine(@"{0:N0} \ {1:N0} = {2:N0}, remainder {3:N0}",
                              dividend, divisor, quotient, remainder);
         }
      }
   }
}
// The example displays the following output:
//    9,223,372,036,854,775,807 \ 2,000 = 4,611,686,018,427,387, remainder 1,807
//    13,952 \ 2,000 = 6, remainder 1,952
//    0 \ 2,000 = 0, remainder 0
//    -14,032 \ 2,000 = -7, remainder -32
//    -9,223,372,036,854,775,808 \ 2,000 = -4,611,686,018,427,387, remainder -1,808
//    9,223,372,036,854,775,807 \ -2,000 = -4,611,686,018,427,387, remainder 1,807
//    13,952 \ -2,000 = -6, remainder 1,952
//    0 \ -2,000 = 0, remainder 0
//    -14,032 \ -2,000 = 7, remainder -32
//    -9,223,372,036,854,775,808 \ -2,000 = 4,611,686,018,427,387, remainder -1,808

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
DivRem 重载
System 命名空间
IEEERemainder


Math ..::.Exp 方法

Math
.
.
::
.
Exp 方法
Math 类

返回 e 的指定次幂。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Exp ( _
    d As Double _
) As Double
public static double Exp(
    double d
)
public:
static double Exp(
    double d
)
static member Exp :
        d:float -> float

参数

d
类型： System Double
指定幂的数字。

返回值

类型： System Double
数字 e 的 d 次幂。如果 d 等于 NaN 或 PositiveInfinity，则返回该值。如果 d 等于 NegativeInfinity，则返回 0。 数字 e 的 d 次幂。如果 d 等于 NaN 或 PositiveInfinity，则返回该值。如果 d 等于 NegativeInfinity，则返回 0。 数字 e 的 d 次幂。如果 d 等于 NaN 或 PositiveInfinity，则返回该值。如果 d 等于 NegativeInfinity，则返回 0。

使用 Pow 方法来计算其他底数的幂。

Exp 是 Log 的反函数。

下面的示例使用 Exp 计算所选值的特定指数和对数恒等式。

' Example for the Math.Exp( Double ) method.
Imports System
Imports Microsoft.VisualBasic

Module ExpDemo

    Sub Main()
        Console.WriteLine( _
            "This example of Math.Exp( Double ) " & _
            "generates the following output." & vbCrLf)
        Console.WriteLine( _
            "Evaluate [e ^ ln(X) == ln(e ^ X) == X] " & _
            "with selected values for X:")

        UseLnExp(0.1)
        UseLnExp(1.2)
        UseLnExp(4.9)
        UseLnExp(9.9)

        Console.WriteLine( vbCrLf & _
            "Evaluate these identities with selected values for X and Y:")
        Console.WriteLine("   (e ^ X) * (e ^ Y) = e ^ (X + Y)")
        Console.WriteLine("   (e ^ X) ^ Y = e ^ (X * Y)")
        Console.WriteLine("   X ^ Y = e ^ (Y * ln(X))")

        UseTwoArgs(0.1, 1.2)
        UseTwoArgs(1.2, 4.9)
        UseTwoArgs(4.9, 9.9)
    End Sub 'Main

    ' Evaluate logarithmic/exponential identity with a given argument.
    Sub UseLnExp(arg As Double)

        ' Evaluate e ^ ln(X) = ln(e ^ X) = X.
        Console.WriteLine( _
            vbCrLf & "      Math.Exp(Math.Log({0})) = {1:E16}" + _
            vbCrLf & "      Math.Log(Math.Exp({0})) = {2:E16}", _
            arg, Math.Exp(Math.Log(arg)), Math.Log(Math.Exp(arg)))
    End Sub 'UseLnExp

    ' Evaluate exponential identities that are functions of two arguments.
    Sub UseTwoArgs(argX As Double, argY As Double)

        ' Evaluate (e ^ X) * (e ^ Y) = e ^ (X + Y).
        Console.WriteLine( _
            vbCrLf & "Math.Exp({0}) * Math.Exp({1}) = {2:E16}" + _
            vbCrLf & "          Math.Exp({0} + {1}) = {3:E16}", _
            argX, argY, Math.Exp(argX) * Math.Exp(argY), _
            Math.Exp((argX + argY)))

        ' Evaluate (e ^ X) ^ Y = e ^ (X * Y).
        Console.WriteLine( _
            " Math.Pow(Math.Exp({0}), {1}) = {2:E16}" + _
            vbCrLf & "          Math.Exp({0} * {1}) = {3:E16}", _
            argX, argY, Math.Pow(Math.Exp(argX), argY), _
            Math.Exp((argX * argY)))

        ' Evaluate X ^ Y = e ^ (Y * ln(X)).
        Console.WriteLine( _
            "           Math.Pow({0}, {1}) = {2:E16}" + _
            vbCrLf & "Math.Exp({1} * Math.Log({0})) = {3:E16}", _
            argX, argY, Math.Pow(argX, argY), _
            Math.Exp((argY * Math.Log(argX))))

    End Sub 'UseTwoArgs
End Module 'ExpDemo

' This example of Math.Exp( Double ) generates the following output.
'
' Evaluate [e ^ ln(X) == ln(e ^ X) == X] with selected values for X:
'
'       Math.Exp(Math.Log(0.1)) = 1.0000000000000001E-001
'       Math.Log(Math.Exp(0.1)) = 1.0000000000000008E-001
'
'       Math.Exp(Math.Log(1.2)) = 1.2000000000000000E+000
'       Math.Log(Math.Exp(1.2)) = 1.2000000000000000E+000
'
'       Math.Exp(Math.Log(4.9)) = 4.9000000000000012E+000
'       Math.Log(Math.Exp(4.9)) = 4.9000000000000004E+000
'
'       Math.Exp(Math.Log(9.9)) = 9.9000000000000004E+000
'       Math.Log(Math.Exp(9.9)) = 9.9000000000000004E+000
'
' Evaluate these identities with selected values for X and Y:
'    (e ^ X) * (e ^ Y) = e ^ (X + Y)
'    (e ^ X) ^ Y = e ^ (X * Y)
'    X ^ Y = e ^ (Y * ln(X))
'
' Math.Exp(0.1) * Math.Exp(1.2) = 3.6692966676192444E+000
'           Math.Exp(0.1 + 1.2) = 3.6692966676192444E+000
'  Math.Pow(Math.Exp(0.1), 1.2) = 1.1274968515793757E+000
'           Math.Exp(0.1 * 1.2) = 1.1274968515793757E+000
'            Math.Pow(0.1, 1.2) = 6.3095734448019331E-002
' Math.Exp(1.2 * Math.Log(0.1)) = 6.3095734448019344E-002
'
' Math.Exp(1.2) * Math.Exp(4.9) = 4.4585777008251705E+002
'           Math.Exp(1.2 + 4.9) = 4.4585777008251716E+002
'  Math.Pow(Math.Exp(1.2), 4.9) = 3.5780924170885260E+002
'           Math.Exp(1.2 * 4.9) = 3.5780924170885277E+002
'            Math.Pow(1.2, 4.9) = 2.4433636334442981E+000
' Math.Exp(4.9 * Math.Log(1.2)) = 2.4433636334442981E+000
'
' Math.Exp(4.9) * Math.Exp(9.9) = 2.6764450551890982E+006
'           Math.Exp(4.9 + 9.9) = 2.6764450551891015E+006
'  Math.Pow(Math.Exp(4.9), 9.9) = 1.1684908531676833E+021
'           Math.Exp(4.9 * 9.9) = 1.1684908531676829E+021
'            Math.Pow(4.9, 9.9) = 6.8067718210957060E+006
' Math.Exp(9.9 * Math.Log(4.9)) = 6.8067718210956985E+006

// Example for the Math.Exp( double ) method.
using System;

class ExpDemo
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of Math.Exp( double ) " +
            "generates the following output.\n" );
        Console.WriteLine(
            "Evaluate [e ^ ln(X) == ln(e ^ X) == X] " +
            "with selected values for X:" );

        UseLnExp(0.1);
        UseLnExp(1.2);
        UseLnExp(4.9);
        UseLnExp(9.9);

        Console.WriteLine(
            "\nEvaluate these identities with " +
            "selected values for X and Y:" );
        Console.WriteLine( "   (e ^ X) * (e ^ Y) == e ^ (X + Y)" );
        Console.WriteLine( "   (e ^ X) ^ Y == e ^ (X * Y)" );
        Console.WriteLine( "   X ^ Y == e ^ (Y * ln(X))" );

        UseTwoArgs(0.1, 1.2);
        UseTwoArgs(1.2, 4.9);
        UseTwoArgs(4.9, 9.9);
    }

    // Evaluate logarithmic/exponential identity with a given argument.
    static void UseLnExp(double arg)
    {
        // Evaluate e ^ ln(X) == ln(e ^ X) == X.
        Console.WriteLine(
            "\n      Math.Exp(Math.Log({0})) == {1:E16}\n" +
            "      Math.Log(Math.Exp({0})) == {2:E16}",
            arg, Math.Exp(Math.Log(arg)), Math.Log(Math.Exp(arg)) );
    }

    // Evaluate exponential identities that are functions of two arguments.
    static void UseTwoArgs(double argX, double argY)
    {
        // Evaluate (e ^ X) * (e ^ Y) == e ^ (X + Y).
        Console.WriteLine(
            "\nMath.Exp({0}) * Math.Exp({1}) == {2:E16}" +
            "\n          Math.Exp({0} + {1}) == {3:E16}",
            argX, argY, Math.Exp(argX) * Math.Exp(argY),
            Math.Exp(argX + argY) );

        // Evaluate (e ^ X) ^ Y == e ^ (X * Y).
        Console.WriteLine(
            " Math.Pow(Math.Exp({0}), {1}) == {2:E16}" +
            "\n          Math.Exp({0} * {1}) == {3:E16}",
            argX, argY, Math.Pow(Math.Exp(argX), argY),
            Math.Exp(argX * argY) );

        // Evaluate X ^ Y == e ^ (Y * ln(X)).
        Console.WriteLine(
            "           Math.Pow({0}, {1}) == {2:E16}" +
            "\nMath.Exp({1} * Math.Log({0})) == {3:E16}",
            argX, argY, Math.Pow(argX, argY),
            Math.Exp(argY * Math.Log(argX)) );
    }
}

/*
This example of Math.Exp( double ) generates the following output.

Evaluate [e ^ ln(X) == ln(e ^ X) == X] with selected values for X:

      Math.Exp(Math.Log(0.1)) == 1.0000000000000001E-001
      Math.Log(Math.Exp(0.1)) == 1.0000000000000008E-001

      Math.Exp(Math.Log(1.2)) == 1.2000000000000000E+000
      Math.Log(Math.Exp(1.2)) == 1.2000000000000000E+000

      Math.Exp(Math.Log(4.9)) == 4.9000000000000012E+000
      Math.Log(Math.Exp(4.9)) == 4.9000000000000004E+000

      Math.Exp(Math.Log(9.9)) == 9.9000000000000004E+000
      Math.Log(Math.Exp(9.9)) == 9.9000000000000004E+000

Evaluate these identities with selected values for X and Y:
   (e ^ X) * (e ^ Y) == e ^ (X + Y)
   (e ^ X) ^ Y == e ^ (X * Y)
   X ^ Y == e ^ (Y * ln(X))

Math.Exp(0.1) * Math.Exp(1.2) == 3.6692966676192444E+000
          Math.Exp(0.1 + 1.2) == 3.6692966676192444E+000
 Math.Pow(Math.Exp(0.1), 1.2) == 1.1274968515793757E+000
          Math.Exp(0.1 * 1.2) == 1.1274968515793757E+000
           Math.Pow(0.1, 1.2) == 6.3095734448019331E-002
Math.Exp(1.2 * Math.Log(0.1)) == 6.3095734448019344E-002

Math.Exp(1.2) * Math.Exp(4.9) == 4.4585777008251705E+002
          Math.Exp(1.2 + 4.9) == 4.4585777008251716E+002
 Math.Pow(Math.Exp(1.2), 4.9) == 3.5780924170885260E+002
          Math.Exp(1.2 * 4.9) == 3.5780924170885277E+002
           Math.Pow(1.2, 4.9) == 2.4433636334442981E+000
Math.Exp(4.9 * Math.Log(1.2)) == 2.4433636334442981E+000

Math.Exp(4.9) * Math.Exp(9.9) == 2.6764450551890982E+006
          Math.Exp(4.9 + 9.9) == 2.6764450551891015E+006
 Math.Pow(Math.Exp(4.9), 9.9) == 1.1684908531676833E+021
          Math.Exp(4.9 * 9.9) == 1.1684908531676829E+021
           Math.Pow(4.9, 9.9) == 6.8067718210957060E+006
Math.Exp(9.9 * Math.Log(4.9)) == 6.8067718210956985E+006
*/

// Example for the Math::Exp( double ) method.
using namespace System;

// Evaluate logarithmic/exponential identity with a given argument.
void UseLnExp( double arg )
{

   // Evaluate e ^ ln(X) == ln(e ^ X) == X.
   Console::WriteLine( "\n      Math::Exp(Math::Log({0})) == {1:E16}\n"
   "      Math::Log(Math::Exp({0})) == {2:E16}", arg, Math::Exp( Math::Log( arg ) ), Math::Log( Math::Exp( arg ) ) );
}

// Evaluate exponential identities that are functions of two arguments.
void UseTwoArgs( double argX, double argY )
{

   // Evaluate (e ^ X) * (e ^ Y) == e ^ (X + Y).
   Console::WriteLine( "\nMath::Exp({0}) * Math::Exp({1}) == {2:E16}"
   "\n           Math::Exp({0} + {1}) == {3:E16}", argX, argY, Math::Exp( argX ) * Math::Exp( argY ), Math::Exp( argX + argY ) );

   // Evaluate (e ^ X) ^ Y == e ^ (X * Y).
   Console::WriteLine( " Math::Pow(Math::Exp({0}), {1}) == {2:E16}"
   "\n           Math::Exp({0} * {1}) == {3:E16}", argX, argY, Math::Pow( Math::Exp( argX ), argY ), Math::Exp( argX * argY ) );

   // Evaluate X ^ Y == e ^ (Y * ln(X)).
   Console::WriteLine( "            Math::Pow({0}, {1}) == {2:E16}"
   "\nMath::Exp({1} * Math::Log({0})) == {3:E16}", argX, argY, Math::Pow( argX, argY ), Math::Exp( argY * Math::Log( argX ) ) );
}

int main()
{
   Console::WriteLine( "This example of Math::Exp( double ) "
   "generates the following output.\n" );
   Console::WriteLine( "Evaluate [e ^ ln(X) == ln(e ^ X) == X] "
   "with selected values for X:" );
   UseLnExp( 0.1 );
   UseLnExp( 1.2 );
   UseLnExp( 4.9 );
   UseLnExp( 9.9 );
   Console::WriteLine( "\nEvaluate these identities with "
   "selected values for X and Y:" );
   Console::WriteLine( "   (e ^ X) * (e ^ Y) == e ^ (X + Y)" );
   Console::WriteLine( "   (e ^ X) ^ Y == e ^ (X * Y)" );
   Console::WriteLine( "   X ^ Y == e ^ (Y * ln(X))" );
   UseTwoArgs( 0.1, 1.2 );
   UseTwoArgs( 1.2, 4.9 );
   UseTwoArgs( 4.9, 9.9 );
}

/*
This example of Math::Exp( double ) generates the following output.

Evaluate [e ^ ln(X) == ln(e ^ X) == X] with selected values for X:

      Math::Exp(Math::Log(0.1)) == 1.0000000000000001E-001
      Math::Log(Math::Exp(0.1)) == 1.0000000000000008E-001

      Math::Exp(Math::Log(1.2)) == 1.2000000000000000E+000
      Math::Log(Math::Exp(1.2)) == 1.2000000000000000E+000

      Math::Exp(Math::Log(4.9)) == 4.9000000000000012E+000
      Math::Log(Math::Exp(4.9)) == 4.9000000000000004E+000

      Math::Exp(Math::Log(9.9)) == 9.9000000000000004E+000
      Math::Log(Math::Exp(9.9)) == 9.9000000000000004E+000

Evaluate these identities with selected values for X and Y:
   (e ^ X) * (e ^ Y) == e ^ (X + Y)
   (e ^ X) ^ Y == e ^ (X * Y)
   X ^ Y == e ^ (Y * ln(X))

Math::Exp(0.1) * Math::Exp(1.2) == 3.6692966676192444E+000
           Math::Exp(0.1 + 1.2) == 3.6692966676192444E+000
 Math::Pow(Math::Exp(0.1), 1.2) == 1.1274968515793757E+000
           Math::Exp(0.1 * 1.2) == 1.1274968515793757E+000
            Math::Pow(0.1, 1.2) == 6.3095734448019331E-002
Math::Exp(1.2 * Math::Log(0.1)) == 6.3095734448019344E-002

Math::Exp(1.2) * Math::Exp(4.9) == 4.4585777008251705E+002
           Math::Exp(1.2 + 4.9) == 4.4585777008251716E+002
 Math::Pow(Math::Exp(1.2), 4.9) == 3.5780924170885260E+002
           Math::Exp(1.2 * 4.9) == 3.5780924170885277E+002
            Math::Pow(1.2, 4.9) == 2.4433636334442981E+000
Math::Exp(4.9 * Math::Log(1.2)) == 2.4433636334442981E+000

Math::Exp(4.9) * Math::Exp(9.9) == 2.6764450551890982E+006
           Math::Exp(4.9 + 9.9) == 2.6764450551891015E+006
 Math::Pow(Math::Exp(4.9), 9.9) == 1.1684908531676833E+021
           Math::Exp(4.9 * 9.9) == 1.1684908531676829E+021
            Math::Pow(4.9, 9.9) == 6.8067718210957060E+006
Math::Exp(9.9 * Math::Log(4.9)) == 6.8067718210956985E+006
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间
E
Pow
Log


Math ..::.Floor 方法

Math
.
.
::
.
Floor 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

返回小于或等于指定数字的最大整数。

名称 说明
页首

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。

参考

Math 类
Math 成员
System 命名空间


Math ..::.Floor 方法 (Decimal)

Math
.
.
::
.
Floor 方法 (Decimal)
Math 类

返回小于或等于指定小数的最大整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Floor ( _
    d As Decimal _
) As Decimal
public static decimal Floor(
    decimal d
)
public:
static Decimal Floor(
    Decimal d
)
static member Floor :
        d:decimal -> decimal

参数

d
类型： System Decimal
一个小数。

返回值

类型： System Decimal
小于或等于 d 的最大整数。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。

下面的示例演示 Math..::.Floor(Decimal) 方法并将此方法与 Ceiling(Decimal) 方法进行比较。

Dim values() As Decimal = {7.03d, 7.64d, 0.12d, -0.12d, -7.1d, -7.6d}
Console.WriteLine("  Value          Ceiling          Floor")
Console.WriteLine()
For Each value As Decimal In values
   Console.WriteLine("{0,7} {1,16} {2,14}", _
                     value, Math.Ceiling(value), Math.Floor(value))
Next
' The example displays the following output to the console:
'         Value          Ceiling          Floor
'
'          7.03                8              7
'          7.64                8              7
'          0.12                1              0
'         -0.12                0             -1
'          -7.1               -7             -8
'          -7.6               -7             -8

decimal[] values = {7.03m, 7.64m, 0.12m, -0.12m, -7.1m, -7.6m};
Console.WriteLine("  Value          Ceiling          Floor\n");
foreach (decimal value in values)
   Console.WriteLine("{0,7} {1,16} {2,14}",
                     value, Math.Ceiling(value), Math.Floor(value));
// The example displays the following output to the console:
//         Value          Ceiling          Floor
//
//          7.03                8              7
//          7.64                8              7
//          0.12                1              0
//         -0.12                0             -1
//          -7.1               -7             -8
//          -7.6               -7             -8

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
Floor 重载
System 命名空间
Round
Ceiling


Math ..::.Floor 方法 (Double)

Math
.
.
::
.
Floor 方法 (Double)
Math 类

返回小于或等于指定双精度浮点数的最大整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Floor ( _
    d As Double _
) As Double
public static double Floor(
    double d
)
public:
static double Floor(
    double d
)
static member Floor :
        d:float -> float

参数

d
类型： System Double
一个双精度浮点数。

返回值

类型： System Double
小于或等于 d 的最大整数。如果 d 等于 NaN、NegativeInfinity 或 PositiveInfinity，则返回该值。 小于或等于 d 的最大整数。如果 d 等于 NaN、NegativeInfinity 或 PositiveInfinity，则返回该值。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为“向负无穷舍入”。换句话中，如果 d 为正，则任何小数部分都将被截断。如果 d 为负，则任何小数部分的存在都会使它舍入为较小的整数。此方法的运算不同于 Ceiling 方法，后者支持“向正无穷舍入”。

下面的示例演示 Math..::.Floor(Double) 方法并将此方法与 Ceiling(Double) 方法进行比较。

Dim values() As Double = {7.03, 7.64, 0.12, -0.12, -7.1, -7.6}
Console.WriteLine("  Value          Ceiling          Floor")
Console.WriteLine()
For Each value As Double In values
   Console.WriteLine("{0,7} {1,16} {2,14}", _
                     value, Math.Ceiling(value), Math.Floor(value))
Next
' The example displays the following output to the console:
'         Value          Ceiling          Floor
'
'          7.03                8              7
'          7.64                8              7
'          0.12                1              0
'         -0.12                0             -1
'          -7.1               -7             -8
'          -7.6               -7             -8

double[] values = {7.03, 7.64, 0.12, -0.12, -7.1, -7.6};
Console.WriteLine("  Value          Ceiling          Floor\n");
foreach (double value in values)
   Console.WriteLine("{0,7} {1,16} {2,14}",
                     value, Math.Ceiling(value), Math.Floor(value));
// The example displays the following output to the console:
//         Value          Ceiling          Floor
//
//          7.03                8              7
//          7.64                8              7
//          0.12                1              0
//         -0.12                0             -1
//          -7.1               -7             -8
//          -7.6               -7             -8

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Floor 重载
System 命名空间
Round
Ceiling


Math ..::.IEEERemainder 方法

Math
.
.
::
.
IEEERemainder 方法
Math 类

返回一指定数字被另一指定数字相除的余数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IEEERemainder ( _
    x As Double, _
    y As Double _
) As Double
public static double IEEERemainder(
    double x,
    double y
)
public:
static double IEEERemainder(
    double x,
    double y
)
static member IEEERemainder :
        x:float *
        y:float -> float

参数

x
类型： System Double
被除数。
y
类型： System Double
除数。

返回值

类型： System Double
该数等于 x - ( y Q)，其中 Q 是 x / y 的商的最接近整数（如果 x / y 在两个整数中间，则返回偶数）。
如果 x - ( y Q) 为零，则在 x 为正时返回值 +0，而在 x 为负时返回 -0。
如果 y 等于 0，则返回 NaN。

此操作遵守电气和电子工程师协会于 1985 年制定的 IEEE 二进制浮点数算术标准、ANSI/IEEE 标准 754-1985 第 5.1 节中定义的余数运算。

IEEERemainder 方法与取模运算符不同。虽然这两者都返回相除后的余数，但它们使用的公式不同。IEEERemainder 方法的公式为： IEEERemainder 方法与取模运算符不同。虽然这两者都返回相除后的余数，但它们使用的公式不同。IEEERemainder 方法的公式为： IEEERemainder 方法与取模运算符不同。虽然这两者都返回相除后的余数，但它们使用的公式不同。IEEERemainder 方法的公式为：

IEEERemainder = dividend - (divisor * Math.Round(dividend / divisor))

相比而言，取模运算符的公式为：

Modulus = (Math.Abs(dividend) - (Math.Abs(divisor) *
          (Math.Floor(Math.Abs(dividend) / Math.Abs(divisor))))) *
          Math.Sign(dividend)

下面的示例将 IEEERemainder 方法返回的余数与模数除法运算符返回的余数作比较。

Module Example
   Public Sub Main()
      Console.WriteLine("{0,35} {1,20}", "IEEERemainder", "Modulus")
      ShowRemainders(3, 2)
      ShowRemainders(4, 2)
      ShowRemainders(10, 3)
      ShowRemainders(11, 3)
      ShowRemainders(27, 4)
      ShowRemainders(28, 5)
      ShowRemainders(17.8, 4)
      ShowRemainders(17.8, 4.1)
      ShowRemainders(-16.3, 4.1)
      ShowRemainders(17.8, -4.1)
      ShowRemainders(-17.8, -4.1)
   End Sub

   Private Sub ShowRemainders(number1 As Double, number2 As Double)
      Dim formula As String = String.Format("{0} / {1} = ", number1, number2)
      Console.WriteLine("{0,-16} {1,18} {2,20}", _
                       formula, _
                       Math.IEEERemainder(number1, number2), _
                       number1 Mod number2)
   End Sub
End Module
' The example displays the following output:
'
'                             IEEERemainder              Modulus
'       3 / 2 =                          -1                    1
'       4 / 2 =                           0                    0
'       10 / 3 =                          1                    1
'       11 / 3 =                         -1                    2
'       27 / 4 =                         -1                    3
'       28 / 5 =                         -2                    3
'       17.8 / 4 =                      1.8                  1.8
'       17.8 / 4.1 =                    1.4                  1.4
'       -16.3 / 4.1 =    0.0999999999999979                   -4
'       17.8 / -4.1 =                   1.4                  1.4
'       -17.8 / -4.1 =                 -1.4                 -1.4

using System;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("{0,35} {1,20}", "IEEERemainder", "Modulus");
      ShowRemainders(3, 2);
      ShowRemainders(4, 2);
      ShowRemainders(10, 3);
      ShowRemainders(11, 3);
      ShowRemainders(27, 4);
      ShowRemainders(28, 5);
      ShowRemainders(17.8, 4);
      ShowRemainders(17.8, 4.1);
      ShowRemainders(-16.3, 4.1);
      ShowRemainders(17.8, -4.1);
      ShowRemainders(-17.8, -4.1);
   }

   private static void ShowRemainders(double number1, double number2)
   {
      string formula = String.Format("{0} / {1} = ", number1, number2);
      Console.WriteLine("{0,-16} {1,18} {2,20}",
                       formula,
                       Math.IEEERemainder(number1, number2),
                       number1 % number2);
   }
}
// The example displays the following output:
//
//                             IEEERemainder              Modulus
//       3 / 2 =                          -1                    1
//       4 / 2 =                           0                    0
//       10 / 3 =                          1                    1
//       11 / 3 =                         -1                    2
//       27 / 4 =                         -1                    3
//       28 / 5 =                         -2                    3
//       17.8 / 4 =                      1.8                  1.8
//       17.8 / 4.1 =                    1.4                  1.4
//       -16.3 / 4.1 =    0.0999999999999979                   -4
//       17.8 / -4.1 =                   1.4                  1.4
//       -17.8 / -4.1 =                 -1.4                 -1.4

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Log 方法

Math
.
.
::
.
Log 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

返回指定数字的对数。

名称 说明
页首

参考

Math 类
Math 成员
System 命名空间


Math ..::.Log 方法 (Double)

Math
.
.
::
.
Log 方法 (Double)
Math 类

返回指定数字的自然对数（底为 e）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Log ( _ d As Double _ ) As Double
public static double Log( double d )
public: static double Log( double d )
static member Log : d:float -> float
参数
d
类型： System Double
要查找其对数的数字。
返回值
类型： System Double
下表中的值之一。
d
参数
返回值
正
d
的自然对数；即 ln
d
或 log
e
d
零
NegativeInfinity
负
NaN
等于
NaN
NaN
等于
PositiveInfinity
PositiveInfinity

d 参数被指定为以 10 为基数的数字。

下面的示例演示 Log 方法。

Module Example
   Sub Main()
      Console.WriteLine( _
         "  Evaluate this identity with selected values for X:")
      Console.WriteLine("                              ln(x) = 1 / log[X](B)")
      Console.WriteLine()

      Dim XArgs() As Double = { 1.2, 4.9, 9.9, 0.1 }

      For Each argX As Double In XArgs
         ' Find natural log of argX.
         Console.WriteLine("                      Math.Log({0}) = {1:E16}", _
                           argX, Math.Log(argX))

         ' Evaluate 1 / log[X](e).
         Console.WriteLine("             1.0 / Math.Log(e, {0}) = {1:E16}", _
                           argX, 1.0 / Math.Log(Math.E, argX))
         Console.WriteLine()
      Next
   End Sub
End Module
' This example displays the following output:
'         Evaluate this identity with selected values for X:
'                                     ln(x) = 1 / log[X](B)
'
'                             Math.Log(1.2) = 1.8232155679395459E-001
'                    1.0 / Math.Log(e, 1.2) = 1.8232155679395459E-001
'
'                             Math.Log(4.9) = 1.5892352051165810E+000
'                    1.0 / Math.Log(e, 4.9) = 1.5892352051165810E+000
'
'                             Math.Log(9.9) = 2.2925347571405443E+000
'                    1.0 / Math.Log(e, 9.9) = 2.2925347571405443E+000
'
'                             Math.Log(0.1) = -2.3025850929940455E+000
'                    1.0 / Math.Log(e, 0.1) = -2.3025850929940455E+000

using System;
public class Example
{
   public static void Main()
   {
      Console.WriteLine("  Evaluate this identity with selected values for X:");
      Console.WriteLine("                              ln(x) = 1 / log[X](B)");
      Console.WriteLine();

      double[] XArgs = { 1.2, 4.9, 9.9, 0.1 };

      foreach (double argX in XArgs)
      {
         // Find natural log of argX.
         Console.WriteLine("                      Math.Log({0}) = {1:E16}",
                           argX, Math.Log(argX));

         // Evaluate 1 / log[X](e).
         Console.WriteLine("             1.0 / Math.Log(e, {0}) = {1:E16}",
                           argX, 1.0 / Math.Log(Math.E, argX));
         Console.WriteLine();
      }
   }
}
// This example displays the following output:
//         Evaluate this identity with selected values for X:
//                                     ln(x) = 1 / log[X](B)
//
//                             Math.Log(1.2) = 1.8232155679395459E-001
//                    1.0 / Math.Log(e, 1.2) = 1.8232155679395459E-001
//
//                             Math.Log(4.9) = 1.5892352051165810E+000
//                    1.0 / Math.Log(e, 4.9) = 1.5892352051165810E+000
//
//                             Math.Log(9.9) = 2.2925347571405443E+000
//                    1.0 / Math.Log(e, 9.9) = 2.2925347571405443E+000
//
//                             Math.Log(0.1) = -2.3025850929940455E+000
//                    1.0 / Math.Log(e, 0.1) = -2.3025850929940455E+000

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Log 重载
System 命名空间
E
Exp


Math ..::.Log 方法 (Double, Double)

Math
.
.
::
.
Log 方法 (Double, Double)
Math 类

返回指定数字在使用指定底时的对数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Log ( _ a As Double, _ newBase As Double _ ) As Double
public static double Log( double a, double newBase )
public: static double Log( double a, double newBase )
static member Log : a:float * newBase:float -> float
参数
a
类型： System Double
要查找其对数的数字。
newBase
类型： System Double
对数的底。
返回值
类型： System Double
下表中的值之一。
（+Infinity 表示
PositiveInfinity
，-Infinity 表示
NegativeInfinity
，NaN 表示
NaN
。）
下表中的值之一。
（+Infinity 表示
PositiveInfinity
，-Infinity 表示
NegativeInfinity
，NaN 表示
NaN
。）
a
newBase
返回值
a
a
>
0
(0
<
newBase
<
1) - 或 -(
newBase
>
1)
log
newBase
(a)
a
a
<
0
（任意值）
NaN
（任意值）
newBase
newBase
<
0
NaN
a
!= 1
newBase
= 0
NaN
a
!= 1
newBase
= +Infinity
NaN
a
= NaN
（任意值）
NaN
（任意值）
newBase
= NaN
NaN
（任意值）
newBase
= 1
NaN
a
= 0
0
<
newBase
<
1
+Infinity
a
= 0
newBase
newBase
>
1
-Infinity
a
= +Infinity
0
<
newBase
<
1
-Infinity
a
= +Infinity
newBase
newBase
>
1
+Infinity
a
= 1
newBase
= 0
0
a
= 1
newBase
= +Infinity
0

参数 a 和 newBase 都被指定为以 10 为基数的数字。

下面的示例使用 Log 计算所选值的特定对数恒等式。

' Example for the Math.Log( Double ) and Math.Log( Double, Double ) methods.
Imports System
Imports Microsoft.VisualBasic

Module LogDLogDD

    Sub Main()
        Console.WriteLine( _
            "This example of Math.Log( Double ) and " + _
            "Math.Log( Double, Double )" & vbCrLf & _
            "generates the following output." & vbCrLf)
        Console.WriteLine( _
            "Evaluate these identities with selected " & _
            "values for X and B (base):")
        Console.WriteLine("   log(B)[X] = 1 / log(X)[B]")
        Console.WriteLine("   log(B)[X] = ln[X] / ln[B]")
        Console.WriteLine("   log(B)[X] = log(B)[e] * ln[X]")

        UseBaseAndArg(0.1, 1.2)
        UseBaseAndArg(1.2, 4.9)
        UseBaseAndArg(4.9, 9.9)
        UseBaseAndArg(9.9, 0.1)
    End Sub 'Main

    ' Evaluate logarithmic identities that are functions of two arguments.
    Sub UseBaseAndArg(argB As Double, argX As Double)

        ' Evaluate log(B)[X] = 1 / log(X)[B].
        Console.WriteLine( _
            vbCrLf & "                   Math.Log({1}, {0}) = {2:E16}" + _
            vbCrLf & "             1.0 / Math.Log({0}, {1}) = {3:E16}", _
            argB, argX, Math.Log(argX, argB), _
            1.0 / Math.Log(argB, argX))

        ' Evaluate log(B)[X] = ln[X] / ln[B].
        Console.WriteLine( _
            "        Math.Log({1}) / Math.Log({0}) = {2:E16}", _
            argB, argX, Math.Log(argX) / Math.Log(argB))

        ' Evaluate log(B)[X] = log(B)[e] * ln[X].
        Console.WriteLine( _
            "Math.Log(Math.E, {0}) * Math.Log({1}) = {2:E16}", _
            argB, argX, Math.Log(Math.E, argB) * Math.Log(argX))

    End Sub 'UseBaseAndArg
End Module 'LogDLogDD

' This example of Math.Log( Double ) and Math.Log( Double, Double )
' generates the following output.
'
' Evaluate these identities with selected values for X and B (base):
'    log(B)[X] = 1 / log(X)[B]
'    log(B)[X] = ln[X] / ln[B]
'    log(B)[X] = log(B)[e] * ln[X]
'
'                    Math.Log(1.2, 0.1) = -7.9181246047624818E-002
'              1.0 / Math.Log(0.1, 1.2) = -7.9181246047624818E-002
'         Math.Log(1.2) / Math.Log(0.1) = -7.9181246047624818E-002
' Math.Log(Math.E, 0.1) * Math.Log(1.2) = -7.9181246047624804E-002
'
'                    Math.Log(4.9, 1.2) = 8.7166610085093179E+000
'              1.0 / Math.Log(1.2, 4.9) = 8.7166610085093161E+000
'         Math.Log(4.9) / Math.Log(1.2) = 8.7166610085093179E+000
' Math.Log(Math.E, 1.2) * Math.Log(4.9) = 8.7166610085093179E+000
'
'                    Math.Log(9.9, 4.9) = 1.4425396251981288E+000
'              1.0 / Math.Log(4.9, 9.9) = 1.4425396251981288E+000
'         Math.Log(9.9) / Math.Log(4.9) = 1.4425396251981288E+000
' Math.Log(Math.E, 4.9) * Math.Log(9.9) = 1.4425396251981288E+000
'
'                    Math.Log(0.1, 9.9) = -1.0043839404494075E+000
'              1.0 / Math.Log(9.9, 0.1) = -1.0043839404494075E+000
'         Math.Log(0.1) / Math.Log(9.9) = -1.0043839404494075E+000
' Math.Log(Math.E, 9.9) * Math.Log(0.1) = -1.0043839404494077E+000

// Example for the Math.Log( double ) and Math.Log( double, double ) methods.
using System;

class LogDLogDD
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of Math.Log( double ) and " +
            "Math.Log( double, double )\n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Evaluate these identities with " +
            "selected values for X and B (base):" );
        Console.WriteLine( "   log(B)[X] == 1 / log(X)[B]" );
        Console.WriteLine( "   log(B)[X] == ln[X] / ln[B]" );
        Console.WriteLine( "   log(B)[X] == log(B)[e] * ln[X]" );

        UseBaseAndArg(0.1, 1.2);
        UseBaseAndArg(1.2, 4.9);
        UseBaseAndArg(4.9, 9.9);
        UseBaseAndArg(9.9, 0.1);
    }

    // Evaluate logarithmic identities that are functions of two arguments.
    static void UseBaseAndArg(double argB, double argX)
    {
        // Evaluate log(B)[X] == 1 / log(X)[B].
        Console.WriteLine(
            "\n                   Math.Log({1}, {0}) == {2:E16}" +
            "\n             1.0 / Math.Log({0}, {1}) == {3:E16}",
            argB, argX, Math.Log(argX, argB),
            1.0 / Math.Log(argB, argX) );

        // Evaluate log(B)[X] == ln[X] / ln[B].
        Console.WriteLine(
            "        Math.Log({1}) / Math.Log({0}) == {2:E16}",
            argB, argX, Math.Log(argX) / Math.Log(argB) );

        // Evaluate log(B)[X] == log(B)[e] * ln[X].
        Console.WriteLine(
            "Math.Log(Math.E, {0}) * Math.Log({1}) == {2:E16}",
            argB, argX, Math.Log(Math.E, argB) * Math.Log(argX) );
    }
}

/*
This example of Math.Log( double ) and Math.Log( double, double )
generates the following output.

Evaluate these identities with selected values for X and B (base):
   log(B)[X] == 1 / log(X)[B]
   log(B)[X] == ln[X] / ln[B]
   log(B)[X] == log(B)[e] * ln[X]

                   Math.Log(1.2, 0.1) == -7.9181246047624818E-002
             1.0 / Math.Log(0.1, 1.2) == -7.9181246047624818E-002
        Math.Log(1.2) / Math.Log(0.1) == -7.9181246047624818E-002
Math.Log(Math.E, 0.1) * Math.Log(1.2) == -7.9181246047624804E-002

                   Math.Log(4.9, 1.2) == 8.7166610085093179E+000
             1.0 / Math.Log(1.2, 4.9) == 8.7166610085093161E+000
        Math.Log(4.9) / Math.Log(1.2) == 8.7166610085093179E+000
Math.Log(Math.E, 1.2) * Math.Log(4.9) == 8.7166610085093179E+000

                   Math.Log(9.9, 4.9) == 1.4425396251981288E+000
             1.0 / Math.Log(4.9, 9.9) == 1.4425396251981288E+000
        Math.Log(9.9) / Math.Log(4.9) == 1.4425396251981288E+000
Math.Log(Math.E, 4.9) * Math.Log(9.9) == 1.4425396251981288E+000

                   Math.Log(0.1, 9.9) == -1.0043839404494075E+000
             1.0 / Math.Log(9.9, 0.1) == -1.0043839404494075E+000
        Math.Log(0.1) / Math.Log(9.9) == -1.0043839404494075E+000
Math.Log(Math.E, 9.9) * Math.Log(0.1) == -1.0043839404494077E+000
*/

// Example for the Math::Log( double ) and Math::Log( double, double ) methods.
using namespace System;

// Evaluate logarithmic identities that are functions of two arguments.
void UseBaseAndArg( double argB, double argX )
{

   // Evaluate log(B)[X] == 1 / log(X)[B].
   Console::WriteLine( "\n                     Math::Log({1}, {0}) == {2:E16}"
   "\n               1.0 / Math::Log({0}, {1}) == {3:E16}", argB, argX, Math::Log( argX, argB ), 1.0 / Math::Log( argB, argX ) );

   // Evaluate log(B)[X] == ln[X] / ln[B].
   Console::WriteLine( "         Math::Log({1}) / Math::Log({0}) == {2:E16}", argB, argX, Math::Log( argX ) / Math::Log( argB ) );

   // Evaluate log(B)[X] == log(B)[e] * ln[X].
   Console::WriteLine( "Math::Log(Math::E, {0}) * Math::Log({1}) == {2:E16}", argB, argX, Math::Log( Math::E, argB ) * Math::Log( argX ) );
}

void main()
{
   Console::WriteLine( "This example of Math::Log( double ) and "
   "Math::Log( double, double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "Evaluate these identities with "
   "selected values for X and B (base):" );
   Console::WriteLine( "   log(B)[X] == 1 / log(X)[B]" );
   Console::WriteLine( "   log(B)[X] == ln[X] / ln[B]" );
   Console::WriteLine( "   log(B)[X] == log(B)[e] * ln[X]" );
   UseBaseAndArg( 0.1, 1.2 );
   UseBaseAndArg( 1.2, 4.9 );
   UseBaseAndArg( 4.9, 9.9 );
   UseBaseAndArg( 9.9, 0.1 );
}

/*
This example of Math::Log( double ) and Math::Log( double, double )
generates the following output.

Evaluate these identities with selected values for X and B (base):
   log(B)[X] == 1 / log(X)[B]
   log(B)[X] == ln[X] / ln[B]
   log(B)[X] == log(B)[e] * ln[X]

                     Math::Log(1.2, 0.1) == -7.9181246047624818E-002
               1.0 / Math::Log(0.1, 1.2) == -7.9181246047624818E-002
         Math::Log(1.2) / Math::Log(0.1) == -7.9181246047624818E-002
Math::Log(Math::E, 0.1) * Math::Log(1.2) == -7.9181246047624804E-002

                     Math::Log(4.9, 1.2) == 8.7166610085093179E+000
               1.0 / Math::Log(1.2, 4.9) == 8.7166610085093161E+000
         Math::Log(4.9) / Math::Log(1.2) == 8.7166610085093179E+000
Math::Log(Math::E, 1.2) * Math::Log(4.9) == 8.7166610085093179E+000

                     Math::Log(9.9, 4.9) == 1.4425396251981288E+000
               1.0 / Math::Log(4.9, 9.9) == 1.4425396251981288E+000
         Math::Log(9.9) / Math::Log(4.9) == 1.4425396251981288E+000
Math::Log(Math::E, 4.9) * Math::Log(9.9) == 1.4425396251981288E+000

                     Math::Log(0.1, 9.9) == -1.0043839404494075E+000
               1.0 / Math::Log(9.9, 0.1) == -1.0043839404494075E+000
         Math::Log(0.1) / Math::Log(9.9) == -1.0043839404494075E+000
Math::Log(Math::E, 9.9) * Math::Log(0.1) == -1.0043839404494077E+000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
Log 重载
System 命名空间


Math ..::.Log10 方法

Math
.
.
::
.
Log10 方法
Math 类

返回指定数字以 10 为底的对数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Log10 ( _ d As Double _ ) As Double
public static double Log10( double d )
public: static double Log10( double d )
static member Log10 : d:float -> float
参数
d
类型： System Double
要查找其对数的数字。
返回值
类型： System Double
下表中的值之一。
d
参数
返回值
正
d
的以 10 为底的对数，即 log
10
d
。
零
NegativeInfinity
负
NaN
等于
NaN
NaN
等于
PositiveInfinity
PositiveInfinity

d 参数被指定为以 10 为基数的数字。

下面的示例使用 Log10 方法为所选值返回以 10 为底的对数。

Module Example
   Public Sub Main()
      Dim numbers() As Double = {-1, 0, .105, .5, .798, 1, 4, 6.9, 10, 50, _
                                 100, 500, 1000, Double.MaxValue}

      For Each number As Double In numbers
         Console.WriteLine("The natural log of {0} is {1}.", _
                           number, Math.Log10(number))
      Next
   End Sub
End Module
' The example displays the following output:
'       The natural log of -1 is NaN.
'       The natural log of 0 is -Infinity.
'       The natural log of 0.105 is -0.978810700930062.
'       The natural log of 0.5 is -0.301029995663981.
'       The natural log of 0.798 is -0.0979971086492706.
'       The natural log of 1 is 0.
'       The natural log of 4 is 0.602059991327962.
'       The natural log of 6.9 is 0.838849090737255.
'       The natural log of 10 is 1.
'       The natural log of 50 is 1.69897000433602.
'       The natural log of 100 is 2.
'       The natural log of 500 is 2.69897000433602.
'       The natural log of 1000 is 3.
'       The natural log of 1.79769313486232E+308 is 308.254715559917.

using System;

public class Example
{
   public static void Main()
   {
      double[] numbers = {-1, 0, .105, .5, .798, 1, 4, 6.9, 10, 50,
                          100, 500, 1000, Double.MaxValue};

      foreach (double number in numbers)
         Console.WriteLine("The natural log of {0} is {1}.",
                           number, Math.Log10(number));
   }
}
// The example dislays the following output:
//       The natural log of -1 is NaN.
//       The natural log of 0 is -Infinity.
//       The natural log of 0.105 is -0.978810700930062.
//       The natural log of 0.5 is -0.301029995663981.
//       The natural log of 0.798 is -0.0979971086492706.
//       The natural log of 1 is 0.
//       The natural log of 4 is 0.602059991327962.
//       The natural log of 6.9 is 0.838849090737255.
//       The natural log of 10 is 1.
//       The natural log of 50 is 1.69897000433602.
//       The natural log of 100 is 2.
//       The natural log of 500 is 2.69897000433602.
//       The natural log of 1000 is 3.
//       The natural log of 1.79769313486232E+308 is 308.254715559917.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Max 方法

Math
.
.
::
.
Max 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

返回两个指定数字中较大的一个。

名称 说明
页首

参考

Math 类
Math 成员
System 命名空间


Math ..::.Max 方法 (Byte, Byte)

Math
.
.
::
.
Max 方法 (Byte, Byte)
Math 类

返回两个 8 位无符号整数中较大的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Max ( _
    val1 As Byte, _
    val2 As Byte _
) As Byte
public static byte Max(
    byte val1,
    byte val2
)
public:
static unsigned char Max(
    unsigned char val1,
    unsigned char val2
)
static member Max :
        val1:byte *
        val2:byte -> byte

参数

val1
类型： System Byte
要比较的两个 8 位无符号整数中的第一个。
val2
类型： System Byte
要比较的两个 8 位无符号整数中的第二个。

返回值

类型： System Byte
val1 或 val2 参数中较大的一个。

下面的示例演示如何使用 Max 方法返回并显示两个 Byte 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (Decimal, Decimal)

Math
.
.
::
.
Max 方法 (Decimal, Decimal)
Math 类

返回两个十进制数中较大的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Max ( _
    val1 As Decimal, _
    val2 As Decimal _
) As Decimal
public static decimal Max(
    decimal val1,
    decimal val2
)
public:
static Decimal Max(
    Decimal val1,
    Decimal val2
)
static member Max :
        val1:decimal *
        val2:decimal -> decimal

参数

val1
类型： System Decimal
要比较的两个 Decimal 数字中的第一个。
val2
类型： System Decimal
要比较的两个 Decimal 数字中的第二个。

返回值

类型： System Decimal
val1 或 val2 参数中较大的一个。

下面的示例演示如何使用 Max 方法返回并显示两个 Decimal 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (Double, Double)

Math
.
.
::
.
Max 方法 (Double, Double)
Math 类

返回两个双精度浮点数字中较大的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Max ( _
    val1 As Double, _
    val2 As Double _
) As Double
public static double Max(
    double val1,
    double val2
)
public:
static double Max(
    double val1,
    double val2
)
static member Max :
        val1:float *
        val2:float -> float

参数

val1
类型： System Double
要比较的两个双精度浮点数中的第一个。
val2
类型： System Double
要比较的两个双精度浮点数中的第二个。

返回值

类型： System Double
val1 或 val2 参数中较大的一个。如果 val1 或 val2 或者 val1 和 val2 都等于 NaN，则返回 NaN。 val1 或 val2 参数中较大的一个。如果 val1 或 val2 或者 val1 和 val2 都等于 NaN，则返回 NaN。

下面的示例演示如何使用 Max 方法返回并显示两个 Double 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (Int16, Int16)

Math
.
.
::
.
Max 方法 (Int16, Int16)
Math 类

返回两个 16 位有符号的整数中较大的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Max ( _
    val1 As Short, _
    val2 As Short _
) As Short
public static short Max(
    short val1,
    short val2
)
public:
static short Max(
    short val1,
    short val2
)
static member Max :
        val1:int16 *
        val2:int16 -> int16

参数

val1
类型： System Int16
要比较的两个 16 位有符号的整数中的第一个。
val2
类型： System Int16
要比较的两个 16 位有符号的整数中的第二个。

返回值

类型： System Int16
val1 或 val2 参数中较大的一个。

下面的示例演示如何使用 Max 方法返回并显示两个 Int16 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (Int32, Int32)

Math
.
.
::
.
Max 方法 (Int32, Int32)
Math 类

返回两个 32 位有符号的整数中较大的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Max ( _
    val1 As Integer, _
    val2 As Integer _
) As Integer
public static int Max(
    int val1,
    int val2
)
public:
static int Max(
    int val1,
    int val2
)
static member Max :
        val1:int *
        val2:int -> int

参数

val1
类型： System Int32
要比较的两个 32 位有符号的整数中的第一个。
val2
类型： System Int32
要比较的两个 32 位有符号的整数中的第二个。

返回值

类型： System Int32
val1 或 val2 参数中较大的一个。

下面的示例演示如何使用 Max 方法返回并显示两个 Int32 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (Int64, Int64)

Math
.
.
::
.
Max 方法 (Int64, Int64)
Math 类

返回两个 64 位有符号的整数中较大的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Max ( _
    val1 As Long, _
    val2 As Long _
) As Long
public static long Max(
    long val1,
    long val2
)
public:
static long long Max(
    long long val1,
    long long val2
)
static member Max :
        val1:int64 *
        val2:int64 -> int64

参数

val1
类型： System Int64
要比较的两个 64 位有符号的整数中的第一个。
val2
类型： System Int64
要比较的两个 64 位有符号的整数中的第二个。

返回值

类型： System Int64
val1 或 val2 参数中较大的一个。

下面的示例演示如何使用 Max 方法返回并显示两个 Int64 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (SByte, SByte)

Math
.
.
::
.
Max 方法 (SByte, SByte)
Math 类

返回两个 8 位有符号的整数中较大的一个。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Max ( _
    val1 As SByte, _
    val2 As SByte _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte Max(
    sbyte val1,
    sbyte val2
)
[CLSCompliantAttribute(false)]
public:
static signed char Max(
    signed char val1,
    signed char val2
)
[<CLSCompliantAttribute(false)>]
static member Max :
        val1:sbyte *
        val2:sbyte -> sbyte

参数

val1
类型： System SByte
要比较的两个 8 位有符号的整数中的第一个。
val2
类型： System SByte
要比较的两个 8 位有符号的整数中的第二个。

返回值

类型： System SByte
val1 或 val2 参数中较大的一个。

下面的示例演示如何使用 Max 方法返回并显示两个 SByte 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (Single, Single)

Math
.
.
::
.
Max 方法 (Single, Single)
Math 类

返回两个单精度浮点数字中较大的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Max ( _
    val1 As Single, _
    val2 As Single _
) As Single
public static float Max(
    float val1,
    float val2
)
public:
static float Max(
    float val1,
    float val2
)
static member Max :
        val1:float32 *
        val2:float32 -> float32

参数

val1
类型： System Single
要比较的两个单精度浮点数中的第一个。
val2
类型： System Single
要比较的两个单精度浮点数中的第二个。

返回值

类型： System Single
val1 或 val2 参数中较大的一个。如果 val1、val2 或者 val1 和 val2 都等于 NaN，则返回 NaN。 val1 或 val2 参数中较大的一个。如果 val1、val2 或者 val1 和 val2 都等于 NaN，则返回 NaN。

下面的示例演示如何使用 Max 方法返回并显示两个 Single 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (UInt16, UInt16)

Math
.
.
::
.
Max 方法 (UInt16, UInt16)
Math 类

返回两个 16 位无符号整数中较大的一个。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Max ( _
    val1 As UShort, _
    val2 As UShort _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort Max(
    ushort val1,
    ushort val2
)
[CLSCompliantAttribute(false)]
public:
static unsigned short Max(
    unsigned short val1,
    unsigned short val2
)
[<CLSCompliantAttribute(false)>]
static member Max :
        val1:uint16 *
        val2:uint16 -> uint16

参数

val1
类型： System UInt16
要比较的两个 16 位无符号整数中的第一个。
val2
类型： System UInt16
要比较的两个 16 位无符号整数中的第二个。

返回值

类型： System UInt16
val1 或 val2 参数中较大的一个。

下面的示例演示如何使用 Max 方法返回并显示两个 UInt16 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (UInt32, UInt32)

Math
.
.
::
.
Max 方法 (UInt32, UInt32)
Math 类

返回两个 32 位无符号整数中较大的一个。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Max ( _
    val1 As UInteger, _
    val2 As UInteger _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint Max(
    uint val1,
    uint val2
)
[CLSCompliantAttribute(false)]
public:
static unsigned int Max(
    unsigned int val1,
    unsigned int val2
)
[<CLSCompliantAttribute(false)>]
static member Max :
        val1:uint32 *
        val2:uint32 -> uint32

参数

val1
类型： System UInt32
要比较的两个 32 位无符号整数中的第一个。
val2
类型： System UInt32
要比较的两个 32 位无符号整数中的第二个。

返回值

类型： System UInt32
val1 或 val2 参数中较大的一个。

下面的示例演示如何使用 Max 方法返回并显示两个 UInt32 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Max 方法 (UInt64, UInt64)

Math
.
.
::
.
Max 方法 (UInt64, UInt64)
Math 类

返回两个 64 位无符号整数中较大的一个。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Max ( _
    val1 As ULong, _
    val2 As ULong _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong Max(
    ulong val1,
    ulong val2
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long Max(
    unsigned long long val1,
    unsigned long long val2
)
[<CLSCompliantAttribute(false)>]
static member Max :
        val1:uint64 *
        val2:uint64 -> uint64

参数

val1
类型： System UInt64
要比较的两个 64 位无符号整数中的第一个。
val2
类型： System UInt64
要比较的两个 64 位无符号整数中的第二个。

返回值

类型： System UInt64
val1 或 val2 参数中较大的一个。

下面的示例演示如何使用 Max 方法返回并显示两个 UInt64 变量中较大的一个。

' This example demonstrates Math.Max()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The greater of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSByte1 As SByte = 101
      Dim xSByte2 As SByte = 111
      Dim xUShort1 As UShort = 102
      Dim xUShort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the greater of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}(The following types are not CLS-compliant.){0}", nl)
      Console.WriteLine(str, "SByte  ", xSByte1, xSByte2, Math.Max(xSByte1, xSByte2))
      Console.WriteLine(str, "UInt16 ", xUShort1, xUShort2, Math.Max(xUShort1, xUShort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Display the greater of two values:
'
'Byte   : The greater of   1 and  51 is 51.
'Int16  : The greater of  -2 and  52 is 52.
'Int32  : The greater of  -3 and  53 is 53.
'Int64  : The greater of  -4 and  54 is 54.
'Single : The greater of   5 and  55 is 55.
'Double : The greater of   6 and  56 is 56.
'Decimal: The greater of   7 and  57 is 57.
'
' (The following types are not CLS-compliant.)
'
' SByte  : The greater of 101 and 111 is 111.
' UInt16 : The greater of 102 and 112 is 112.
' UInt32 : The greater of 103 and 113 is 113.
' UInt64 : The greater of 104 and 114 is 114.

// This example demonstrates Math.Max()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The greater of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the greater of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Max(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Max(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Max(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Max(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Max(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Max(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Max(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant.{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Max(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Max(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Max(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Max(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

// This example demonstrates Math.Max()
using namespace System;
int main()
{
   String^ str = "{0}: The greater of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the greater of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Max( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Max( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Max( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Max( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Max( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Max( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Max( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant.{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Max( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Max( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Max( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Max( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the greater of two values:

Byte   : The greater of   1 and  51 is 51.
Int16  : The greater of  -2 and  52 is 52.
Int32  : The greater of  -3 and  53 is 53.
Int64  : The greater of  -4 and  54 is 54.
Single : The greater of   5 and  55 is 55.
Double : The greater of   6 and  56 is 56.
Decimal: The greater of   7 and  57 is 57.

(The following types are not CLS-compliant.)

SByte  : The greater of 101 and 111 is 111.
UInt16 : The greater of 102 and 112 is 112.
UInt32 : The greater of 103 and 113 is 113.
UInt64 : The greater of 104 and 114 is 114.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Max 重载
System 命名空间


Math ..::.Min 方法

Math
.
.
::
.
Min 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

返回两个数字中较小的一个。

名称 说明
页首

参考

Math 类
Math 成员
System 命名空间


Math ..::.Min 方法 (Byte, Byte)

Math
.
.
::
.
Min 方法 (Byte, Byte)
Math 类

返回两个 8 位无符号整数中较小的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Min ( _
    val1 As Byte, _
    val2 As Byte _
) As Byte
public static byte Min(
    byte val1,
    byte val2
)
public:
static unsigned char Min(
    unsigned char val1,
    unsigned char val2
)
static member Min :
        val1:byte *
        val2:byte -> byte

参数

val1
类型： System Byte
要比较的两个 8 位无符号整数中的第一个。
val2
类型： System Byte
要比较的两个 8 位无符号整数中的第二个。

返回值

类型： System Byte
val1 或 val2 参数中较小的一个。

下面的示例演示如何使用 Min 方法返回并显示两个 Byte 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (Decimal, Decimal)

Math
.
.
::
.
Min 方法 (Decimal, Decimal)
Math 类

返回两个十进制数中较小的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Min ( _
    val1 As Decimal, _
    val2 As Decimal _
) As Decimal
public static decimal Min(
    decimal val1,
    decimal val2
)
public:
static Decimal Min(
    Decimal val1,
    Decimal val2
)
static member Min :
        val1:decimal *
        val2:decimal -> decimal

参数

val1
类型： System Decimal
要比较的两个 Decimal 数字中的第一个。
val2
类型： System Decimal
要比较的两个 Decimal 数字中的第二个。

返回值

类型： System Decimal
val1 或 val2 参数中较小的一个。

下面的示例演示如何使用 Min 方法返回并显示两个 Decimal 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (Double, Double)

Math
.
.
::
.
Min 方法 (Double, Double)
Math 类

返回两个双精度浮点数字中较小的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Min ( _
    val1 As Double, _
    val2 As Double _
) As Double
public static double Min(
    double val1,
    double val2
)
public:
static double Min(
    double val1,
    double val2
)
static member Min :
        val1:float *
        val2:float -> float

参数

val1
类型： System Double
要比较的两个双精度浮点数中的第一个。
val2
类型： System Double
要比较的两个双精度浮点数中的第二个。

返回值

类型： System Double
val1 或 val2 参数中较小的一个。如果 val1 或 val2 或者 val1 和 val2 都等于 NaN，则返回 NaN。 val1 或 val2 参数中较小的一个。如果 val1 或 val2 或者 val1 和 val2 都等于 NaN，则返回 NaN。

下面的示例演示如何使用 Min 方法返回并显示两个 Double 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (Int16, Int16)

Math
.
.
::
.
Min 方法 (Int16, Int16)
Math 类

返回两个 16 位有符号整数中较小的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Min ( _
    val1 As Short, _
    val2 As Short _
) As Short
public static short Min(
    short val1,
    short val2
)
public:
static short Min(
    short val1,
    short val2
)
static member Min :
        val1:int16 *
        val2:int16 -> int16

参数

val1
类型： System Int16
要比较的两个 16 位有符号的整数中的第一个。
val2
类型： System Int16
要比较的两个 16 位有符号的整数中的第二个。

返回值

类型： System Int16
val1 或 val2 参数中较小的一个。

下面的示例演示如何使用 Min 方法返回并显示两个 Int16 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (Int32, Int32)

Math
.
.
::
.
Min 方法 (Int32, Int32)
Math 类

返回两个 32 位有符号整数中较小的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Min ( _
    val1 As Integer, _
    val2 As Integer _
) As Integer
public static int Min(
    int val1,
    int val2
)
public:
static int Min(
    int val1,
    int val2
)
static member Min :
        val1:int *
        val2:int -> int

参数

val1
类型： System Int32
要比较的两个 32 位有符号的整数中的第一个。
val2
类型： System Int32
要比较的两个 32 位有符号的整数中的第二个。

返回值

类型： System Int32
val1 或 val2 参数中较小的一个。

下面的示例演示如何使用 Min 方法返回并显示两个 Int32 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (Int64, Int64)

Math
.
.
::
.
Min 方法 (Int64, Int64)
Math 类

返回两个 64 位有符号整数中较小的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Min ( _
    val1 As Long, _
    val2 As Long _
) As Long
public static long Min(
    long val1,
    long val2
)
public:
static long long Min(
    long long val1,
    long long val2
)
static member Min :
        val1:int64 *
        val2:int64 -> int64

参数

val1
类型： System Int64
要比较的两个 64 位有符号的整数中的第一个。
val2
类型： System Int64
要比较的两个 64 位有符号的整数中的第二个。

返回值

类型： System Int64
val1 或 val2 参数中较小的一个。

下面的示例演示如何使用 Min 方法返回并显示两个 Int64 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (SByte, SByte)

Math
.
.
::
.
Min 方法 (SByte, SByte)
Math 类

返回两个 8 位有符号整数中较小的一个。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Min ( _
    val1 As SByte, _
    val2 As SByte _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte Min(
    sbyte val1,
    sbyte val2
)
[CLSCompliantAttribute(false)]
public:
static signed char Min(
    signed char val1,
    signed char val2
)
[<CLSCompliantAttribute(false)>]
static member Min :
        val1:sbyte *
        val2:sbyte -> sbyte

参数

val1
类型： System SByte
要比较的两个 8 位有符号的整数中的第一个。
val2
类型： System SByte
要比较的两个 8 位有符号的整数中的第二个。

返回值

类型： System SByte
val1 或 val2 参数中较小的一个。

下面的示例演示如何使用 Min 方法返回并显示两个 SByte 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (Single, Single)

Math
.
.
::
.
Min 方法 (Single, Single)
Math 类

返回两个单精度浮点数字中较小的一个。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Min ( _
    val1 As Single, _
    val2 As Single _
) As Single
public static float Min(
    float val1,
    float val2
)
public:
static float Min(
    float val1,
    float val2
)
static member Min :
        val1:float32 *
        val2:float32 -> float32

参数

val1
类型： System Single
要比较的两个单精度浮点数中的第一个。
val2
类型： System Single
要比较的两个单精度浮点数中的第二个。

返回值

类型： System Single
val1 或 val2 参数中较小的一个。如果 val1 或 val2 或者 val1 和 val2 都等于 NaN，则返回 NaN。 val1 或 val2 参数中较小的一个。如果 val1 或 val2 或者 val1 和 val2 都等于 NaN，则返回 NaN。

下面的示例演示如何使用 Min 方法返回并显示两个 Single 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (UInt16, UInt16)

Math
.
.
::
.
Min 方法 (UInt16, UInt16)
Math 类

返回两个 16 位无符号整数中较小的一个。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Min ( _
    val1 As UShort, _
    val2 As UShort _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort Min(
    ushort val1,
    ushort val2
)
[CLSCompliantAttribute(false)]
public:
static unsigned short Min(
    unsigned short val1,
    unsigned short val2
)
[<CLSCompliantAttribute(false)>]
static member Min :
        val1:uint16 *
        val2:uint16 -> uint16

参数

val1
类型： System UInt16
要比较的两个 16 位无符号整数中的第一个。
val2
类型： System UInt16
要比较的两个 16 位无符号整数中的第二个。

返回值

类型： System UInt16
val1 或 val2 参数中较小的一个。

下面的示例演示如何使用 Min 方法返回并显示两个 UInt16 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (UInt32, UInt32)

Math
.
.
::
.
Min 方法 (UInt32, UInt32)
Math 类

返回两个 32 位无符号整数中较小的一个。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Min ( _
    val1 As UInteger, _
    val2 As UInteger _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint Min(
    uint val1,
    uint val2
)
[CLSCompliantAttribute(false)]
public:
static unsigned int Min(
    unsigned int val1,
    unsigned int val2
)
[<CLSCompliantAttribute(false)>]
static member Min :
        val1:uint32 *
        val2:uint32 -> uint32

参数

val1
类型： System UInt32
要比较的两个 32 位无符号整数中的第一个。
val2
类型： System UInt32
要比较的两个 32 位无符号整数中的第二个。

返回值

类型： System UInt32
val1 或 val2 参数中较小的一个。

下面的示例演示如何使用 Min 方法返回并显示两个 UInt32 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Min 方法 (UInt64, UInt64)

Math
.
.
::
.
Min 方法 (UInt64, UInt64)
Math 类

返回两个 64 位无符号整数中较小的一个。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Min ( _
    val1 As ULong, _
    val2 As ULong _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong Min(
    ulong val1,
    ulong val2
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long Min(
    unsigned long long val1,
    unsigned long long val2
)
[<CLSCompliantAttribute(false)>]
static member Min :
        val1:uint64 *
        val2:uint64 -> uint64

参数

val1
类型： System UInt64
要比较的两个 64 位无符号整数中的第一个。
val2
类型： System UInt64
要比较的两个 64 位无符号整数中的第二个。

返回值

类型： System UInt64
val1 或 val2 参数中较小的一个。

下面的示例演示如何使用 Min 方法返回并显示两个 UInt64 变量中较小的一个。

' This example demonstrates Math.Min()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: The lesser of {1,3} and {2,3} is {3}."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 1
      Dim xByte2 As Byte = 51
      Dim xShort1 As Short = - 2
      Dim xShort2 As Short = 52
      Dim xInt1 As Integer = - 3
      Dim xInt2 As Integer = 53
      Dim xLong1 As Long = - 4
      Dim xLong2 As Long = 54
      Dim xSingle1 As Single = 5F
      Dim xSingle2 As Single = 55F
      Dim xDouble1 As Double = 6.0
      Dim xDouble2 As Double = 56.0
      Dim xDecimal1 As [Decimal] = 7D
      Dim xDecimal2 As [Decimal] = 57D

      ' The following types are not CLS-compliant.
      Dim xSbyte1 As SByte = 101
      Dim xSbyte2 As SByte = 111
      Dim xUshort1 As UShort = 102
      Dim xUshort2 As UShort = 112
      Dim xUint1 As UInteger = 103
      Dim xUint2 As UInteger = 113
      Dim xUlong1 As ULong = 104
      Dim xUlong2 As ULong = 114

      Console.WriteLine("{0}Display the lesser of two values:{0}", nl)
      Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2))
      Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2))
      Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2))
      Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2))
      Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2))
      Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2))
      Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2))
      '
      Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2))
      Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2))
      Console.WriteLine(str, "UInt32 ", xUint1, xUInt2, Math.Min(xUInt1, xUInt2))
      Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2))
   End Sub 'Main
End Class 'Sample
'
' This example produces the following results:
'
' Display the lesser of two values:
'
' Byte   : The lesser of   1 and  51 is 1.
' Int16  : The lesser of  -2 and  52 is -2.
' Int32  : The lesser of  -3 and  53 is -3.
' Int64  : The lesser of  -4 and  54 is -4.
' Single : The lesser of   5 and  55 is 5.
' Double : The lesser of   6 and  56 is 6.
' Decimal: The lesser of   7 and  57 is 7.
'
' The following types are not CLS-compliant:
'
' SByte  : The lesser of 101 and 111 is 101.
' UInt16 : The lesser of 102 and 112 is 102.
' UInt32 : The lesser of 103 and 113 is 103.
' UInt64 : The lesser of 104 and 114 is 104.

// This example demonstrates Math.Min()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
    string nl = Environment.NewLine;

    byte     xByte1    = 1,    xByte2    = 51;
    short    xShort1   = -2,   xShort2   = 52;
    int      xInt1     = -3,   xInt2     = 53;
    long     xLong1    = -4,   xLong2    = 54;
    float    xSingle1  = 5.0f, xSingle2  = 55.0f;
    double   xDouble1  = 6.0,  xDouble2  = 56.0;
    Decimal  xDecimal1 = 7m,   xDecimal2 = 57m;

// The following types are not CLS-compliant.
    sbyte    xSbyte1   = 101, xSbyte2  = 111;
    ushort   xUshort1  = 102, xUshort2 = 112;
    uint     xUint1    = 103, xUint2   = 113;
    ulong    xUlong1   = 104, xUlong2  = 114;

    Console.WriteLine("{0}Display the lesser of two values:{0}", nl);
    Console.WriteLine(str, "Byte   ", xByte1, xByte2, Math.Min(xByte1, xByte2));
    Console.WriteLine(str, "Int16  ", xShort1, xShort2, Math.Min(xShort1, xShort2));
    Console.WriteLine(str, "Int32  ", xInt1, xInt2, Math.Min(xInt1, xInt2));
    Console.WriteLine(str, "Int64  ", xLong1, xLong2, Math.Min(xLong1, xLong2));
    Console.WriteLine(str, "Single ", xSingle1, xSingle2, Math.Min(xSingle1, xSingle2));
    Console.WriteLine(str, "Double ", xDouble1, xDouble2, Math.Min(xDouble1, xDouble2));
    Console.WriteLine(str, "Decimal", xDecimal1, xDecimal2, Math.Min(xDecimal1, xDecimal2));
//
    Console.WriteLine("{0}The following types are not CLS-compliant:{0}", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, xSbyte2, Math.Min(xSbyte1, xSbyte2));
    Console.WriteLine(str, "UInt16 ", xUshort1, xUshort2, Math.Min(xUshort1, xUshort2));
    Console.WriteLine(str, "UInt32 ", xUint1, xUint2, Math.Min(xUint1, xUint2));
    Console.WriteLine(str, "UInt64 ", xUlong1, xUlong2, Math.Min(xUlong1, xUlong2));
    }
}
/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

// This example demonstrates Math.Min()
using namespace System;
int main()
{
   String^ str = "{0}: The lesser of {1,3} and {2,3} is {3}.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 1,xByte2 = 51;
   short xShort1 = -2,xShort2 = 52;
   int xInt1 = -3,xInt2 = 53;
   long xLong1 = -4,xLong2 = 54;
   float xSingle1 = 5.0f,xSingle2 = 55.0f;
   double xDouble1 = 6.0,xDouble2 = 56.0;
   Decimal xDecimal1 = 7,xDecimal2 = 57;

   // The following types are not CLS-compliant.
   SByte xSbyte1 = 101,xSbyte2 = 111;
   UInt16 xUshort1 = 102,xUshort2 = 112;
   UInt32 xUint1 = 103,xUint2 = 113;
   UInt64 xUlong1 = 104,xUlong2 = 114;
   Console::WriteLine( "{0}Display the lesser of two values:{0}", nl );
   Console::WriteLine( str, "Byte   ", xByte1, xByte2, Math::Min( xByte1, xByte2 ) );
   Console::WriteLine( str, "Int16  ", xShort1, xShort2, Math::Min( xShort1, xShort2 ) );
   Console::WriteLine( str, "Int32  ", xInt1, xInt2, Math::Min( xInt1, xInt2 ) );
   Console::WriteLine( str, "Int64  ", xLong1, xLong2, Math::Min( xLong1, xLong2 ) );
   Console::WriteLine( str, "Single ", xSingle1, xSingle2, Math::Min( xSingle1, xSingle2 ) );
   Console::WriteLine( str, "Double ", xDouble1, xDouble2, Math::Min( xDouble1, xDouble2 ) );
   Console::WriteLine( str, "Decimal", xDecimal1, xDecimal2, Math::Min( xDecimal1, xDecimal2 ) );

   //
   Console::WriteLine( "{0}The following types are not CLS-compliant:{0}", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, xSbyte2, Math::Min( xSbyte1, xSbyte2 ) );
   Console::WriteLine( str, "UInt16 ", xUshort1, xUshort2, Math::Min( xUshort1, xUshort2 ) );
   Console::WriteLine( str, "UInt32 ", xUint1, xUint2, Math::Min( xUint1, xUint2 ) );
   Console::WriteLine( str, "UInt64 ", xUlong1, xUlong2, Math::Min( xUlong1, xUlong2 ) );
}

/*
This example produces the following results:

Display the lesser of two values:

Byte   : The lesser of   1 and  51 is 1.
Int16  : The lesser of  -2 and  52 is -2.
Int32  : The lesser of  -3 and  53 is -3.
Int64  : The lesser of  -4 and  54 is -4.
Single : The lesser of   5 and  55 is 5.
Double : The lesser of   6 and  56 is 6.
Decimal: The lesser of   7 and  57 is 7.

The following types are not CLS-compliant:

SByte  : The lesser of 101 and 111 is 101.
UInt16 : The lesser of 102 and 112 is 102.
UInt32 : The lesser of 103 and 113 is 103.
UInt64 : The lesser of 104 and 114 is 104.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Min 重载
System 命名空间


Math ..::.Pow 方法

Math
.
.
::
.
Pow 方法
Math 类

返回指定数字的指定次幂。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Pow ( _
    x As Double, _
    y As Double _
) As Double
public static double Pow(
    double x,
    double y
)
public:
static double Pow(
    double x,
    double y
)
static member Pow :
        x:float *
        y:float -> float

参数

x
类型： System Double
要乘幂的双精度浮点数。
y
类型： System Double
指定幂的双精度浮点数。

返回值

类型： System Double
数字 x 的 y 次幂。

下表显示了为 x 和 y 参数指定不同的值或值范围时的返回值。有关更多信息，请参见Double..::.PositiveInfinity、Double..::.NegativeInfinity和Double..::.NaN。 下表显示了为 x 和 y 参数指定不同的值或值范围时的返回值。有关更多信息，请参见Double..::.PositiveInfinity、Double..::.NegativeInfinity和Double..::.NaN。

参数 | 返回值
x 或 y = NaN。 | NaN
x = 除 NaN 以外的任何值；y = 0。 | 1
x = NegativeInfinity；y < 0。 | 0
x = NegativeInfinity；y 为正奇数。 | NegativeInfinity
x = NegativeInfinity；y 为正，但不为奇数。 | PositiveInfinity
x < 0 但不为 NegativeInfinity；y 不为整数、NegativeInfinity 或 PositiveInfinity。 | NaN
x = -1；y = NegativeInfinity 或 PositiveInfinity。 | NaN
-1 < x < 1；y = NegativeInfinity。 | PositiveInfinity
-1 < x < 1；y = PositiveInfinity。 | 0
x < -1 或 x > 1；y = NegativeInfinity。 | 0
x < -1 或 x > 1；y = PositiveInfinity。 | PositiveInfinity
x = 0；y < 0。 | PositiveInfinity
x = 0；y > 0。 | 0
x = 1；y 为 NaN 以外的任何值。 | 1
x = PositiveInfinity；y < 0。 | 0
x = PositiveInfinity；y > 0。 | PositiveInfinity

下面的示例使用 Pow 方法计算 2 的 n 次幂（n 的范围为 0 至 32）。

Public Module Example
   Public Sub Main
      Dim value As Integer = 2
      For power As Integer = 0 To 32
         Console.WriteLine("{0}^{1} = {2:N0} (0x{2:X})", _
                           value, power, CLng(Math.Pow(value, power)))
      Next
   End Sub
End Module
' The example displays the following output:
'       2^0 = 1 (0x1)
'       2^1 = 2 (0x2)
'       2^2 = 4 (0x4)
'       2^3 = 8 (0x8)
'       2^4 = 16 (0x10)
'       2^5 = 32 (0x20)
'       2^6 = 64 (0x40)
'       2^7 = 128 (0x80)
'       2^8 = 256 (0x100)
'       2^9 = 512 (0x200)
'       2^10 = 1,024 (0x400)
'       2^11 = 2,048 (0x800)
'       2^12 = 4,096 (0x1000)
'       2^13 = 8,192 (0x2000)
'       2^14 = 16,384 (0x4000)
'       2^15 = 32,768 (0x8000)
'       2^16 = 65,536 (0x10000)
'       2^17 = 131,072 (0x20000)
'       2^18 = 262,144 (0x40000)
'       2^19 = 524,288 (0x80000)
'       2^20 = 1,048,576 (0x100000)
'       2^21 = 2,097,152 (0x200000)
'       2^22 = 4,194,304 (0x400000)
'       2^23 = 8,388,608 (0x800000)
'       2^24 = 16,777,216 (0x1000000)
'       2^25 = 33,554,432 (0x2000000)
'       2^26 = 67,108,864 (0x4000000)
'       2^27 = 134,217,728 (0x8000000)
'       2^28 = 268,435,456 (0x10000000)
'       2^29 = 536,870,912 (0x20000000)
'       2^30 = 1,073,741,824 (0x40000000)
'       2^31 = 2,147,483,648 (0x80000000)
'       2^32 = 4,294,967,296 (0x100000000)

using System;

public class Example
{
   public static void Main()
   {
      int value = 2;
      for (int power = 0; power <= 32; power++)
         Console.WriteLine("{0}^{1} = {2:N0} (0x{2:X})",
                           value, power, (long)Math.Pow(value, power));
   }
}
// The example displays the following output:
//       2^0 = 1 (0x1)
//       2^1 = 2 (0x2)
//       2^2 = 4 (0x4)
//       2^3 = 8 (0x8)
//       2^4 = 16 (0x10)
//       2^5 = 32 (0x20)
//       2^6 = 64 (0x40)
//       2^7 = 128 (0x80)
//       2^8 = 256 (0x100)
//       2^9 = 512 (0x200)
//       2^10 = 1,024 (0x400)
//       2^11 = 2,048 (0x800)
//       2^12 = 4,096 (0x1000)
//       2^13 = 8,192 (0x2000)
//       2^14 = 16,384 (0x4000)
//       2^15 = 32,768 (0x8000)
//       2^16 = 65,536 (0x10000)
//       2^17 = 131,072 (0x20000)
//       2^18 = 262,144 (0x40000)
//       2^19 = 524,288 (0x80000)
//       2^20 = 1,048,576 (0x100000)
//       2^21 = 2,097,152 (0x200000)
//       2^22 = 4,194,304 (0x400000)
//       2^23 = 8,388,608 (0x800000)
//       2^24 = 16,777,216 (0x1000000)
//       2^25 = 33,554,432 (0x2000000)
//       2^26 = 67,108,864 (0x4000000)
//       2^27 = 134,217,728 (0x8000000)
//       2^28 = 268,435,456 (0x10000000)
//       2^29 = 536,870,912 (0x20000000)
//       2^30 = 1,073,741,824 (0x40000000)
//       2^31 = 2,147,483,648 (0x80000000)
//       2^32 = 4,294,967,296 (0x100000000)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Round 方法

Math
.
.
::
.
Round 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

将值舍入到最接近的整数或指定的小数位数。

名称 说明
页首

参考

Math 类
Math 成员
System 命名空间


Math ..::.Round 方法 (Decimal)

Math
.
.
::
.
Round 方法 (Decimal)
Math 类

将小数值舍入到最接近的整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    d As Decimal _
) As Decimal
public static decimal Round(
    decimal d
)
public:
static Decimal Round(
    Decimal d
)
static member Round :
        d:decimal -> decimal

参数

d
类型： System Decimal
要舍入的小数。

返回值

类型： System Decimal
最接近参数 d 的整数。如果 d 的小数部分正好处于两个整数中间，其中一个整数为偶数，另一个整数为奇数，则返回偶数。请注意，此方法返回 Decimal，而不是整数类型。 最接近参数 d 的整数。如果 d 的小数部分正好处于两个整数中间，其中一个整数为偶数，另一个整数为奇数，则返回偶数。请注意，此方法返回 Decimal，而不是整数类型。 最接近参数 d 的整数。如果 d 的小数部分正好处于两个整数中间，其中一个整数为偶数，另一个整数为奇数，则返回偶数。请注意，此方法返回 Decimal，而不是整数类型。
异常 | 条件
OverflowException | 结果超出了 Decimal 的范围。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。

若要控制 Round(Decimal) 方法使用的舍入类型，请调用 Math..::.Round(Decimal, MidpointRounding) 重载。

下面的示例演示就近舍入。

Imports System

Module Module1

    Sub Main()
    Console.WriteLine("Classic Math.Round in Visual Basic")
    Console.WriteLine(Math.Round(4.4)) ' 4
    Console.WriteLine(Math.Round(4.5)) ' 4
    Console.WriteLine(Math.Round(4.6)) ' 5
    Console.WriteLine(Math.Round(5.5)) ' 6
    End Sub

End Module

using System;

class Program
{
    static void Main()
    {
    Console.WriteLine("Classic Math.Round in CSharp");
    Console.WriteLine(Math.Round(4.4)); // 4
    Console.WriteLine(Math.Round(4.5)); // 4
    Console.WriteLine(Math.Round(4.6)); // 5
    Console.WriteLine(Math.Round(5.5)); // 6
    }
}

using namespace System;

void main()
{
    Console::WriteLine("Classic Math.Round in CPP");
    Console::WriteLine(Math::Round(4.4));     // 4
    Console::WriteLine(Math::Round(4.5));     // 4
    Console::WriteLine(Math::Round(4.6));     // 5
    Console::WriteLine(Math::Round(5.5));     // 6
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Round 重载
System 命名空间
Ceiling
Floor


Math ..::.Round 方法 (Double)

Math
.
.
::
.
Round 方法 (Double)
Math 类

将双精度浮点值舍入为最接近的整数值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    a As Double _
) As Double
public static double Round(
    double a
)
public:
static double Round(
    double a
)
static member Round :
        a:float -> float

参数

a
类型： System Double
要舍入的双精度浮点数。

返回值

类型： System Double
最接近 a 的整数。如果 a 的小数部分正好处于两个整数中间，其中一个整数为偶数，另一个整数为奇数，则返回偶数。请注意，此方法返回 Double，而不是整数类型。 最接近 a 的整数。如果 a 的小数部分正好处于两个整数中间，其中一个整数为偶数，另一个整数为奇数，则返回偶数。请注意，此方法返回 Double，而不是整数类型。 最接近 a 的整数。如果 a 的小数部分正好处于两个整数中间，其中一个整数为偶数，另一个整数为奇数，则返回偶数。请注意，此方法返回 Double，而不是整数类型。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。

若要控制 Round 方法使用的舍入类型，请调用 Math..::.Round(Double, MidpointRounding) 重载。

下面的示例演示如何舍入为最接近的整数值。

Imports System

Module Module1

    Sub Main()
    Console.WriteLine("Classic Math.Round in Visual Basic")
    Console.WriteLine(Math.Round(4.4)) ' 4
    Console.WriteLine(Math.Round(4.5)) ' 4
    Console.WriteLine(Math.Round(4.6)) ' 5
    Console.WriteLine(Math.Round(5.5)) ' 6
    End Sub

End Module

using System;

class Program
{
    static void Main()
    {
    Console.WriteLine("Classic Math.Round in CSharp");
    Console.WriteLine(Math.Round(4.4)); // 4
    Console.WriteLine(Math.Round(4.5)); // 4
    Console.WriteLine(Math.Round(4.6)); // 5
    Console.WriteLine(Math.Round(5.5)); // 6
    }
}

using namespace System;

void main()
{
    Console::WriteLine("Classic Math.Round in CPP");
    Console::WriteLine(Math::Round(4.4));     // 4
    Console::WriteLine(Math::Round(4.5));     // 4
    Console::WriteLine(Math::Round(4.6));     // 5
    Console::WriteLine(Math::Round(5.5));     // 6
}

下面的示例使用 Round 来帮助计算给定梯形的内角。

'The following class represents simple functionality of the trapezoid.
Class MathTrapezoidSample

    Private m_longBase As Double
    Private m_shortBase As Double
    Private m_leftLeg As Double
    Private m_rightLeg As Double

    Public Sub New(ByVal longbase As Double, ByVal shortbase As Double, ByVal leftLeg As Double, ByVal rightLeg As Double)
        m_longBase = Math.Abs(longbase)
        m_shortBase = Math.Abs(shortbase)
        m_leftLeg = Math.Abs(leftLeg)
        m_rightLeg = Math.Abs(rightLeg)
    End Sub

    Private Function GetRightSmallBase() As Double
        GetRightSmallBase = (Math.Pow(m_rightLeg, 2) - Math.Pow(m_leftLeg, 2) + Math.Pow(m_longBase, 2) + Math.Pow(m_shortBase, 2) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase))
    End Function

    Public Function GetHeight() As Double
        Dim x As Double = GetRightSmallBase()
        GetHeight = Math.Sqrt(Math.Pow(m_rightLeg, 2) - Math.Pow(x, 2))
    End Function

    Public Function GetSquare() As Double
        GetSquare = GetHeight() * m_longBase / 2
    End Function

    Public Function GetLeftBaseRadianAngle() As Double
        Dim sinX As Double = GetHeight() / m_leftLeg
        GetLeftBaseRadianAngle = Math.Round(Math.Asin(sinX), 2)
    End Function

    Public Function GetRightBaseRadianAngle() As Double
        Dim x As Double = GetRightSmallBase()
        Dim cosX As Double = (Math.Pow(m_rightLeg, 2) + Math.Pow(x, 2) - Math.Pow(GetHeight(), 2)) / (2 * x * m_rightLeg)
        GetRightBaseRadianAngle = Math.Round(Math.Acos(cosX), 2)
    End Function

    Public Function GetLeftBaseDegreeAngle() As Double
        Dim x As Double = GetLeftBaseRadianAngle() * 180 / Math.PI
        GetLeftBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Function GetRightBaseDegreeAngle() As Double
        Dim x As Double = GetRightBaseRadianAngle() * 180 / Math.PI
        GetRightBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Shared Sub Main()
        Dim trpz As MathTrapezoidSample = New MathTrapezoidSample(20, 10, 8, 6)
        Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0")
        Dim h As Double = trpz.GetHeight()
        Console.WriteLine("Trapezoid height is: " + h.ToString())
        Dim dxR As Double = trpz.GetLeftBaseRadianAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians")
        Dim dyR As Double = trpz.GetRightBaseRadianAngle()
        Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians")
        Dim dxD As Double = trpz.GetLeftBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees")
        Dim dyD As Double = trpz.GetRightBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees")
    End Sub

End Class

    /// <summary>
    /// The following class represents simple functionality of the trapezoid.
    /// </summary>
    class MathTrapezoidSample
    {
        private double m_longBase;
        private double m_shortBase;
        private double m_leftLeg;
        private double m_rightLeg;

        public MathTrapezoidSample(double longbase, double shortbase, double leftLeg, double rightLeg)
        {
            m_longBase = Math.Abs(longbase);
            m_shortBase = Math.Abs(shortbase);
            m_leftLeg = Math.Abs(leftLeg);
            m_rightLeg = Math.Abs(rightLeg);
        }

        private double GetRightSmallBase()
        {
            return (Math.Pow(m_rightLeg,2.0) - Math.Pow(m_leftLeg,2.0) + Math.Pow(m_longBase,2.0) + Math.Pow(m_shortBase,2.0) - 2* m_shortBase * m_longBase)/ (2*(m_longBase - m_shortBase));
        }

        public double GetHeight()
        {
            double x = GetRightSmallBase();
            return Math.Sqrt(Math.Pow(m_rightLeg,2.0) - Math.Pow(x,2.0));
        }

        public double GetSquare()
        {
            return GetHeight() * m_longBase / 2.0;
        }

        public double GetLeftBaseRadianAngle()
        {
            double sinX = GetHeight()/m_leftLeg;
            return Math.Round(Math.Asin(sinX),2);
        }

        public double GetRightBaseRadianAngle()
        {
            double x = GetRightSmallBase();
            double cosX = (Math.Pow(m_rightLeg,2.0) + Math.Pow(x,2.0) - Math.Pow(GetHeight(),2.0))/(2*x*m_rightLeg);
            return Math.Round(Math.Acos(cosX),2);
        }

        public double GetLeftBaseDegreeAngle()
        {
            double x = GetLeftBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        public double GetRightBaseDegreeAngle()
        {
            double x = GetRightBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        static void Main(string[] args)
        {
            MathTrapezoidSample trpz = new MathTrapezoidSample(20.0, 10.0, 8.0, 6.0);
            Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0");
            double h = trpz.GetHeight();
            Console.WriteLine("Trapezoid height is: " + h.ToString());
            double dxR = trpz.GetLeftBaseRadianAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians");
            double dyR = trpz.GetRightBaseRadianAngle();
            Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians");
            double dxD = trpz.GetLeftBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees");
            double dyD = trpz.GetRightBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees");
        }
    }

/// <summary>
/// The following class represents simple functionality of the trapezoid.
/// </summary>
public ref class MathTrapezoidSample
{
private:
   double m_longBase;
   double m_shortBase;
   double m_leftLeg;
   double m_rightLeg;

public:
   MathTrapezoidSample( double longbase, double shortbase, double leftLeg, double rightLeg )
   {
      m_longBase = Math::Abs( longbase );
      m_shortBase = Math::Abs( shortbase );
      m_leftLeg = Math::Abs( leftLeg );
      m_rightLeg = Math::Abs( rightLeg );
   }

private:
   double GetRightSmallBase()
   {
      return (Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( m_leftLeg, 2.0 ) + Math::Pow( m_longBase, 2.0 ) + Math::Pow( m_shortBase, 2.0 ) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase));
   }

public:
   double GetHeight()
   {
      double x = GetRightSmallBase();
      return Math::Sqrt( Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( x, 2.0 ) );
   }

   double GetSquare()
   {
      return GetHeight() * m_longBase / 2.0;
   }

   double GetLeftBaseRadianAngle()
   {
      double sinX = GetHeight() / m_leftLeg;
      return Math::Round( Math::Asin( sinX ), 2 );
   }

   double GetRightBaseRadianAngle()
   {
      double x = GetRightSmallBase();
      double cosX = (Math::Pow( m_rightLeg, 2.0 ) + Math::Pow( x, 2.0 ) - Math::Pow( GetHeight(), 2.0 )) / (2 * x * m_rightLeg);
      return Math::Round( Math::Acos( cosX ), 2 );
   }

   double GetLeftBaseDegreeAngle()
   {
      double x = GetLeftBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

   double GetRightBaseDegreeAngle()
   {
      double x = GetRightBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

};

int main()
{
   MathTrapezoidSample^ trpz = gcnew MathTrapezoidSample( 20.0,10.0,8.0,6.0 );
   Console::WriteLine( "The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0" );
   double h = trpz->GetHeight();
   Console::WriteLine( "Trapezoid height is: {0}", h.ToString() );
   double dxR = trpz->GetLeftBaseRadianAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Radians", dxR.ToString() );
   double dyR = trpz->GetRightBaseRadianAngle();
   Console::WriteLine( "Trapezoid right base angle is: {0} Radians", dyR.ToString() );
   double dxD = trpz->GetLeftBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dxD.ToString() );
   double dyD = trpz->GetRightBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dyD.ToString() );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Round 重载
System 命名空间
Ceiling
Floor


Math ..::.Round 方法 (Decimal, Int32)

Math
.
.
::
.
Round 方法 (Decimal, Int32)
Math 类

将小数值按指定的小数位数舍入。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    d As Decimal, _
    decimals As Integer _
) As Decimal
public static decimal Round(
    decimal d,
    int decimals
)
public:
static Decimal Round(
    Decimal d,
    int decimals
)
static member Round :
        d:decimal *
        decimals:int -> decimal

参数

d
类型： System Decimal
要舍入的小数。
decimals
类型： System Int32
返回值中的小数位数。

返回值

类型： System Decimal
其小数数字等于 decimals 的 d 的最接近的数字。
异常 | 条件
ArgumentOutOfRangeException | decimals 小于 0 或大于 28。
OverflowException | 结果超出了 Decimal 的范围。

decimals 参数指定返回值中的小数位数以及范围 0 和 28。如果 decimals 等于零，则返回整数。 decimals 参数指定返回值中的小数位数以及范围 0 和 28。如果 decimals 等于零，则返回整数。

如果 d 中 decimals 小数位置右侧的第一位数字的值为 5，则 decimals 位置中的数字向上舍入（如果为奇数）或不变（如果为偶数）。如果 d 的精度小于 decimals，则返回 d 而不做更改。 如果 d 中 decimals 小数位置右侧的第一位数字的值为 5，则 decimals 位置中的数字向上舍入（如果为奇数）或不变（如果为偶数）。如果 d 的精度小于 decimals，则返回 d 而不做更改。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。

若要控制 Round(Decimal, Int32) 方法使用的舍入类型，请调用 Decimal..::.Round(Decimal, Int32, MidpointRounding) 重载。

下面的示例演示就近舍入。

Math.Round(3.44, 1) 'Returns 3.4.
Math.Round(3.45, 1) 'Returns 3.4.
Math.Round(3.46, 1) 'Returns 3.5.

Math.Round(4.34, 1) ' Returns 4.3
Math.Round(4.35, 1) ' Returns 4.4
Math.Round(4.36, 1) ' Returns 4.4

Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4.
Math.Round(3.46, 1); //Returns 3.5.

Math.Round(4.34, 1); // Returns 4.3
Math.Round(4.35, 1); // Returns 4.4
Math.Round(4.36, 1); // Returns 4.4

Math::Round(3.44, 1); //Returns 3.4.
Math::Round(3.45, 1); //Returns 3.4.
Math::Round(3.46, 1); //Returns 3.5.

Math::Round(4.34, 1); // Returns 4.3
Math::Round(4.35, 1); // Returns 4.4
Math::Round(4.36, 1); // Returns 4.4

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Round 重载
System 命名空间


Math ..::.Round 方法 (Decimal, MidpointRounding)

Math
.
.
::
.
Round 方法 (Decimal, MidpointRounding)
Math 类

将小数值舍入到最接近的整数。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。 将小数值舍入到最接近的整数。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    d As Decimal, _
    mode As MidpointRounding _
) As Decimal
public static decimal Round(
    decimal d,
    MidpointRounding mode
)
public:
static Decimal Round(
    Decimal d,
    MidpointRounding mode
)
static member Round :
        d:decimal *
        mode:MidpointRounding -> decimal

参数

d
类型： System Decimal
要舍入的小数。
mode
类型： System MidpointRounding
d 在两个数字之间时如何舍入的规范。

返回值

类型： System Decimal
最接近 d 的整数。如果 d 是两个数字的中值，这两个数字一个为偶数，另一个为奇数，则 mode 确定返回两个数字中的哪一个。 最接近 d 的整数。如果 d 是两个数字的中值，这两个数字一个为偶数，另一个为奇数，则 mode 确定返回两个数字中的哪一个。
异常 | 条件
ArgumentException | mode 不是有效的 System..::.MidpointRounding 值。
OverflowException | 结果超出了 Decimal 的范围。

如果在 d 中的第一个十进制数字为 5，也就是说处于数字和比该数字大一的值之间的中间位置，mode 参数控制如何 d 被舍入。mode 可具有下列两个值之一： 如果在 d 中的第一个十进制数字为 5，也就是说处于数字和比该数字大一的值之间的中间位置，mode 参数控制如何 d 被舍入。mode 可具有下列两个值之一：

  • MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。

  • MidpointRounding..::.AwayFromZero.数值的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。
MidpointRounding..::.AwayFromZero.数值的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。
MidpointRounding..::.AwayFromZero.数值的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。
MidpointRounding..::.AwayFromZero.数值的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。

下面的代码示例演示与 MidpointRounding 枚举结合使用的 Round 方法。

' This example demonstrates the Math.Round() method in conjunction
' with the MidpointRounding enumeration.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim result As Decimal = 0D
        Dim posValue As Decimal = 3.45D
        Dim negValue As Decimal = -3.45D

        ' By default, round a positive and a negative value to the nearest even number.
        ' The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue)
        result = Math.Round(negValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue)
        Console.WriteLine()

        ' Round a positive value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                           result, posValue)
        result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, posValue)
        Console.WriteLine()

        ' Round a negative value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(negValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                            result, negValue)
        result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, negValue)
        Console.WriteLine()

    End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
' 3.4 = Math.Round( 3.45, 1)
'-3.4 = Math.Round(-3.45, 1)
'
' 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
' 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)
'
'-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
'-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
'

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using System;

class Sample
{
    public static void Main()
    {
    decimal result = 0.0m;
    decimal posValue =  3.45m;
    decimal negValue = -3.45m;

// By default, round a positive and a negative value to the nearest even number.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math.Round(negValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console.WriteLine();

// Round a positive value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, posValue);
    result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, posValue);
    Console.WriteLine();

// Round a negative value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(negValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, negValue);
    result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, negValue);
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

 3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using namespace System;

void main()
{
    Decimal result = (Decimal) 0.0;
    Decimal posValue = (Decimal) 3.45;
    Decimal negValue = (Decimal) -3.45;

    // By default, round a positive and a negative value to the nearest
    // even number. The precision of the result is 1 decimal place.
    result = Math::Round(posValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math::Round(negValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console::WriteLine();

    // Round a positive value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(posValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, posValue);
    result = Math::Round(posValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, posValue);
    Console::WriteLine();

    // Round a negative value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(negValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, negValue);
    result = Math::Round(negValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, negValue);
    Console::WriteLine();
}

/*
This code example produces the following results:

3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
Round 重载
System 命名空间


Math ..::.Round 方法 (Double, Int32)

Math
.
.
::
.
Round 方法 (Double, Int32)
Math 类

将双精度浮点值按指定的小数位数舍入。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    value As Double, _
    digits As Integer _
) As Double
public static double Round(
    double value,
    int digits
)
public:
static double Round(
    double value,
    int digits
)
static member Round :
        value:float *
        digits:int -> float

参数

value
类型： System Double
要舍入的双精度浮点数。
digits
类型： System Int32
返回值中的小数数字。

返回值

类型： System Double
其小数数字等于 digits 的 value 的最接近的数字。
异常 | 条件
ArgumentOutOfRangeException | digits 小于 0 或大于 15。

digits 参数指定返回值中的小数位数以及范围 0 和 15。如果 digits 等于零，则返回整数。 digits 参数指定返回值中的小数位数以及范围 0 和 15。如果 digits 等于零，则返回整数。

可返回的整数和小数最大总位数为 15。如果舍入的值包含 15 个以上的数字，则返回 15 个最重要的数字。如果舍入的值包含的位数小于或等于 15，则返回整数位数和 digits 参数指定的小数位数。 可返回的整数和小数最大总位数为 15。如果舍入的值包含 15 个以上的数字，则返回 15 个最重要的数字。如果舍入的值包含的位数小于或等于 15，则返回整数位数和 digits 参数指定的小数位数。 可返回的整数和小数最大总位数为 15。如果舍入的值包含 15 个以上的数字，则返回 15 个最重要的数字。如果舍入的值包含的位数小于或等于 15，则返回整数位数和 digits 参数指定的小数位数。

如果 value 中 digits 小数位置右侧的第一位数字的值为 5，则 digits 位置中的数字向上舍入（如果为奇数）或不变（如果为偶数）。如果 value 的精度小于 digits，则返回 value 而不做更改。 如果 value 中 digits 小数位置右侧的第一位数字的值为 5，则 digits 位置中的数字向上舍入（如果为奇数）或不变（如果为偶数）。如果 value 的精度小于 digits，则返回 value 而不做更改。

此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。若要控制 Round(Double, Int32) 方法使用的舍入类型，请调用 Math..::.Round(Double, Int32, MidpointRounding) 重载。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。若要控制 Round(Double, Int32) 方法使用的舍入类型，请调用 Math..::.Round(Double, Int32, MidpointRounding) 重载。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。若要控制 Round(Double, Int32) 方法使用的舍入类型，请调用 Math..::.Round(Double, Int32, MidpointRounding) 重载。 此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。若要控制 Round(Double, Int32) 方法使用的舍入类型，请调用 Math..::.Round(Double, Int32, MidpointRounding) 重载。

下面的示例演示就近舍入。

Math.Round(3.44, 1) 'Returns 3.4.
Math.Round(3.45, 1) 'Returns 3.4.
Math.Round(3.46, 1) 'Returns 3.5.

Math.Round(4.34, 1) ' Returns 4.3
Math.Round(4.35, 1) ' Returns 4.4
Math.Round(4.36, 1) ' Returns 4.4

Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4.
Math.Round(3.46, 1); //Returns 3.5.

Math.Round(4.34, 1); // Returns 4.3
Math.Round(4.35, 1); // Returns 4.4
Math.Round(4.36, 1); // Returns 4.4

Math::Round(3.44, 1); //Returns 3.4.
Math::Round(3.45, 1); //Returns 3.4.
Math::Round(3.46, 1); //Returns 3.5.

Math::Round(4.34, 1); // Returns 4.3
Math::Round(4.35, 1); // Returns 4.4
Math::Round(4.36, 1); // Returns 4.4

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Round 重载
System 命名空间
Ceiling
Floor


Math ..::.Round 方法 (Double, MidpointRounding)

Math
.
.
::
.
Round 方法 (Double, MidpointRounding)
Math 类

将双精度浮点值舍入为最接近的整数。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。 将双精度浮点值舍入为最接近的整数。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    value As Double, _
    mode As MidpointRounding _
) As Double
public static double Round(
    double value,
    MidpointRounding mode
)
public:
static double Round(
    double value,
    MidpointRounding mode
)
static member Round :
        value:float *
        mode:MidpointRounding -> float

参数

value
类型： System Double
要舍入的双精度浮点数。
mode
类型： System MidpointRounding
value 在两个数字之间时如何舍入的规范。

返回值

类型： System Double
最接近 value 的整数。如果 value 是两个整数的中值，这两个整数一个为偶数，另一个为奇数，则 mode 确定返回两个整数中的哪一个。 最接近 value 的整数。如果 value 是两个整数的中值，这两个整数一个为偶数，另一个为奇数，则 mode 确定返回两个整数中的哪一个。
异常 | 条件
ArgumentException | mode 不是有效的 System..::.MidpointRounding 值。

如果在 value 中的第一个十进制数字为 5，也就是说处于数字和比该数字大一的值之间的中间位置，mode 参数控制如何 value 被舍入。mode 可以具有下列两个值之一： 如果在 value 中的第一个十进制数字为 5，也就是说处于数字和比该数字大一的值之间的中间位置，mode 参数控制如何 value 被舍入。mode 可以具有下列两个值之一：

  • MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果某数字为奇数，则它将更改为偶数。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。

  • MidpointRounding..::.AwayFromZero.数值的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。
MidpointRounding..::.AwayFromZero.数值的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。
MidpointRounding..::.AwayFromZero.数值的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。
MidpointRounding..::.AwayFromZero.数值的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。

下面的代码示例演示与 MidpointRounding 枚举结合使用的 Round 方法。尽管该代码示例对小数进行舍入，但 Round 方法以类似的方式对双精度浮点数进行舍入。 下面的代码示例演示与 MidpointRounding 枚举结合使用的 Round 方法。尽管该代码示例对小数进行舍入，但 Round 方法以类似的方式对双精度浮点数进行舍入。

' This example demonstrates the Math.Round() method in conjunction
' with the MidpointRounding enumeration.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim result As Decimal = 0D
        Dim posValue As Decimal = 3.45D
        Dim negValue As Decimal = -3.45D

        ' By default, round a positive and a negative value to the nearest even number.
        ' The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue)
        result = Math.Round(negValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue)
        Console.WriteLine()

        ' Round a positive value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                           result, posValue)
        result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, posValue)
        Console.WriteLine()

        ' Round a negative value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(negValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                            result, negValue)
        result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, negValue)
        Console.WriteLine()

    End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
' 3.4 = Math.Round( 3.45, 1)
'-3.4 = Math.Round(-3.45, 1)
'
' 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
' 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)
'
'-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
'-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
'

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using System;

class Sample
{
    public static void Main()
    {
    decimal result = 0.0m;
    decimal posValue =  3.45m;
    decimal negValue = -3.45m;

// By default, round a positive and a negative value to the nearest even number.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math.Round(negValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console.WriteLine();

// Round a positive value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, posValue);
    result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, posValue);
    Console.WriteLine();

// Round a negative value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(negValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, negValue);
    result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, negValue);
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

 3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using namespace System;

void main()
{
    Decimal result = (Decimal) 0.0;
    Decimal posValue = (Decimal) 3.45;
    Decimal negValue = (Decimal) -3.45;

    // By default, round a positive and a negative value to the nearest
    // even number. The precision of the result is 1 decimal place.
    result = Math::Round(posValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math::Round(negValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console::WriteLine();

    // Round a positive value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(posValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, posValue);
    result = Math::Round(posValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, posValue);
    Console::WriteLine();

    // Round a negative value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(negValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, negValue);
    result = Math::Round(negValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, negValue);
    Console::WriteLine();
}

/*
This code example produces the following results:

3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
Round 重载
System 命名空间


Math ..::.Round 方法 (Decimal, Int32, MidpointRounding)

Math
.
.
::
.
Round 方法 (Decimal, Int32, MidpointRounding)
Math 类

将小数值按指定的小数位数舍入。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。 将小数值按指定的小数位数舍入。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    d As Decimal, _
    decimals As Integer, _
    mode As MidpointRounding _
) As Decimal
public static decimal Round(
    decimal d,
    int decimals,
    MidpointRounding mode
)
public:
static Decimal Round(
    Decimal d,
    int decimals,
    MidpointRounding mode
)
static member Round :
        d:decimal *
        decimals:int *
        mode:MidpointRounding -> decimal

参数

d
类型： System Decimal
要舍入的小数。
decimals
类型： System Int32
返回值中的小数位数。
mode
类型： System MidpointRounding
d 在两个数字之间时如何舍入的规范。

返回值

类型： System Decimal
最接近 d 的 decimals 位小数的数字。如果 d 的小数数字小于 decimals，则返回的 d 保持不变。 最接近 d 的 decimals 位小数的数字。如果 d 的小数数字小于 decimals，则返回的 d 保持不变。
异常 | 条件
ArgumentOutOfRangeException | decimals 小于 0 或大于 28。
ArgumentException | mode 不是有效的 System..::.MidpointRounding 值。
OverflowException | 结果超出了 Decimal 的范围。

decimals 参数指定返回值中的小数位数以及范围 0 和 28。如果 decimals 等于零，则返回整数。 decimals 参数指定返回值中的小数位数以及范围 0 和 28。如果 decimals 等于零，则返回整数。

如果在 decimals 小数位置右边的 d 中的第一个十进制数字为 5，也就是说 decimals 位置的数字与下一个最高位之间的中间位置，mode 参数控制如何 d 被舍入。mode 可具有下列两个值之一： 如果在 decimals 小数位置右边的 d 中的第一个十进制数字为 5，也就是说 decimals 位置的数字与下一个最高位之间的中间位置，mode 参数控制如何 d 被舍入。mode 可具有下列两个值之一：

  • MidpointRounding..::.ToEven.如果 decimals 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 decimals 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 decimals 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 decimals 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 decimals 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 decimals 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。

  • AwayFromZero.decimals 位置处的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。 AwayFromZero.decimals 位置处的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。 AwayFromZero.decimals 位置处的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。 AwayFromZero.decimals 位置处的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。

下面的代码示例演示与 MidpointRounding 枚举结合使用的 Round 方法。

' This example demonstrates the Math.Round() method in conjunction
' with the MidpointRounding enumeration.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim result As Decimal = 0D
        Dim posValue As Decimal = 3.45D
        Dim negValue As Decimal = -3.45D

        ' By default, round a positive and a negative value to the nearest even number.
        ' The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue)
        result = Math.Round(negValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue)
        Console.WriteLine()

        ' Round a positive value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                           result, posValue)
        result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, posValue)
        Console.WriteLine()

        ' Round a negative value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(negValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                            result, negValue)
        result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, negValue)
        Console.WriteLine()

    End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
' 3.4 = Math.Round( 3.45, 1)
'-3.4 = Math.Round(-3.45, 1)
'
' 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
' 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)
'
'-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
'-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
'

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using System;

class Sample
{
    public static void Main()
    {
    decimal result = 0.0m;
    decimal posValue =  3.45m;
    decimal negValue = -3.45m;

// By default, round a positive and a negative value to the nearest even number.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math.Round(negValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console.WriteLine();

// Round a positive value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, posValue);
    result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, posValue);
    Console.WriteLine();

// Round a negative value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(negValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, negValue);
    result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, negValue);
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

 3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using namespace System;

void main()
{
    Decimal result = (Decimal) 0.0;
    Decimal posValue = (Decimal) 3.45;
    Decimal negValue = (Decimal) -3.45;

    // By default, round a positive and a negative value to the nearest
    // even number. The precision of the result is 1 decimal place.
    result = Math::Round(posValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math::Round(negValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console::WriteLine();

    // Round a positive value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(posValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, posValue);
    result = Math::Round(posValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, posValue);
    Console::WriteLine();

    // Round a negative value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(negValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, negValue);
    result = Math::Round(negValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, negValue);
    Console::WriteLine();
}

/*
This code example produces the following results:

3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
Round 重载
System 命名空间


Math ..::.Round 方法 (Double, Int32, MidpointRounding)

Math
.
.
::
.
Round 方法 (Double, Int32, MidpointRounding)
Math 类

将双精度浮点值按指定的小数位数舍入。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。 将双精度浮点值按指定的小数位数舍入。一个参数，指定当一个值正好处于另两个数中间时如何舍入这个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Round ( _
    value As Double, _
    digits As Integer, _
    mode As MidpointRounding _
) As Double
public static double Round(
    double value,
    int digits,
    MidpointRounding mode
)
public:
static double Round(
    double value,
    int digits,
    MidpointRounding mode
)
static member Round :
        value:float *
        digits:int *
        mode:MidpointRounding -> float

参数

value
类型： System Double
要舍入的双精度浮点数。
digits
类型： System Int32
返回值中的小数数字。
mode
类型： System MidpointRounding
value 在两个数字之间时如何舍入的规范。

返回值

类型： System Double
其小数数字等于 digits 的 value 的最接近的数字。如果 value 的小数数字小于 digits，则返回的 value 保持不变。 其小数数字等于 digits 的 value 的最接近的数字。如果 value 的小数数字小于 digits，则返回的 value 保持不变。
异常 | 条件
ArgumentOutOfRangeException | digits 小于 0 或大于 15。
ArgumentException | mode 不是有效的 System..::.MidpointRounding 值。

digits 参数指定返回值中的小数位数以及范围 0 和 15。如果 digits 等于零，则返回整数。 digits 参数指定返回值中的小数位数以及范围 0 和 15。如果 digits 等于零，则返回整数。

如果在 digits 小数位置右边的 value 中的第一个十进制数字为 5，也就是说 digits 位置的数字与下一个最高位之间的中间位置，mode 参数控制如何 value 被舍入。mode 可具有下列两个值之一： 如果在 digits 小数位置右边的 value 中的第一个十进制数字为 5，也就是说 digits 位置的数字与下一个最高位之间的中间位置，mode 参数控制如何 value 被舍入。mode 可具有下列两个值之一：

  • MidpointRounding..::.ToEven.如果 digits 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 digits 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 digits 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 digits 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 digits 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 MidpointRounding..::.ToEven.如果 digits 位置中的数字为奇数，它将更改为偶数数字。否则，它保持不变。此行为遵循 IEEE 标准 754 的第 4 节。它有时称为就近舍入或四舍六入五成双。它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。

  • MidpointRounding..::.AwayFromZero.digits 位置处的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。
MidpointRounding..::.AwayFromZero.digits 位置处的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。
MidpointRounding..::.AwayFromZero.digits 位置处的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。
MidpointRounding..::.AwayFromZero.digits 位置处的数字始终四舍五入到下一个数字。这是最常见的舍入方法。它被称为对称算术舍入。

可返回的整数和小数最大总位数为 15。如果舍入的值包含 15 个以上的数字，则返回 15 个最重要的数字。如果舍入的值包含的位数小于或等于 15，则返回整数位数和 digits 参数指定的小数位数。 可返回的整数和小数最大总位数为 15。如果舍入的值包含 15 个以上的数字，则返回 15 个最重要的数字。如果舍入的值包含的位数小于或等于 15，则返回整数位数和 digits 参数指定的小数位数。 可返回的整数和小数最大总位数为 15。如果舍入的值包含 15 个以上的数字，则返回 15 个最重要的数字。如果舍入的值包含的位数小于或等于 15，则返回整数位数和 digits 参数指定的小数位数。

下面的代码示例演示与 MidpointRounding 枚举结合使用的 Round 方法。尽管该代码示例对小数进行舍入，但 Round 方法以类似的方式对双精度浮点数进行舍入。 下面的代码示例演示与 MidpointRounding 枚举结合使用的 Round 方法。尽管该代码示例对小数进行舍入，但 Round 方法以类似的方式对双精度浮点数进行舍入。

' This example demonstrates the Math.Round() method in conjunction
' with the MidpointRounding enumeration.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim result As Decimal = 0D
        Dim posValue As Decimal = 3.45D
        Dim negValue As Decimal = -3.45D

        ' By default, round a positive and a negative value to the nearest even number.
        ' The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue)
        result = Math.Round(negValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue)
        Console.WriteLine()

        ' Round a positive value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                           result, posValue)
        result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, posValue)
        Console.WriteLine()

        ' Round a negative value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(negValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                            result, negValue)
        result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, negValue)
        Console.WriteLine()

    End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
' 3.4 = Math.Round( 3.45, 1)
'-3.4 = Math.Round(-3.45, 1)
'
' 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
' 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)
'
'-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
'-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
'

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using System;

class Sample
{
    public static void Main()
    {
    decimal result = 0.0m;
    decimal posValue =  3.45m;
    decimal negValue = -3.45m;

// By default, round a positive and a negative value to the nearest even number.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math.Round(negValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console.WriteLine();

// Round a positive value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, posValue);
    result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, posValue);
    Console.WriteLine();

// Round a negative value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(negValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, negValue);
    result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, negValue);
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

 3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using namespace System;

void main()
{
    Decimal result = (Decimal) 0.0;
    Decimal posValue = (Decimal) 3.45;
    Decimal negValue = (Decimal) -3.45;

    // By default, round a positive and a negative value to the nearest
    // even number. The precision of the result is 1 decimal place.
    result = Math::Round(posValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math::Round(negValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console::WriteLine();

    // Round a positive value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(posValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, posValue);
    result = Math::Round(posValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, posValue);
    Console::WriteLine();

    // Round a negative value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(negValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, negValue);
    result = Math::Round(negValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, negValue);
    Console::WriteLine();
}

/*
This code example produces the following results:

3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
Round 重载
System 命名空间


Math ..::.Sign 方法

Math
.
.
::
.
Sign 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

返回表示数字符号的值。

名称 说明
页首

参考

Math 类
Math 成员
System 命名空间


Math ..::.Sign 方法 (Decimal)

Math
.
.
::
.
Sign 方法 (Decimal)
Math 类

返回表示数字符号的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Sign ( _ value As Decimal _ ) As Integer
public static int Sign( decimal value )
public: static int Sign( Decimal value )
static member Sign : value:decimal -> int
参数
value
类型： System Decimal
有符号的
Decimal
数。
返回值
类型： System Int32
一个指示
value
的符号的数字，如下表所示。
返回值
含义
-1
value
小于零。
0
value
等于零。
1
value
大于零。

下面的示例演示如何使用 Sign(Decimal) 方法确定 Decimal 值的符号并将其显示到控制台。

' This example demonstrates Math.Sign()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: {1,3} is {2} zero."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 0
      Dim xShort1 As Short = -2
      Dim xInt1 As Integer = -3
      Dim xLong1 As Long = -4
      Dim xSingle1 As Single = 0F
      Dim xDouble1 As Double = 6.0
      Dim xDecimal1 As [Decimal] = -7D

      ' The following type is not CLS-compliant.
      Dim xSbyte1 As SByte = -101

      Console.WriteLine("{0}Test the sign of the following types of values:", nl)
      Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)))
      Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)))
      Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)))
      Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)))
      Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)))
      Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)))
      Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)))
      '
      Console.WriteLine("{0}The following type is not CLS-compliant.", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)))
   End Sub 'Main
   '
   Public Shared Function Test([compare] As Integer) As [String]
      If [compare] = 0 Then
         Return "equal to"
      ElseIf [compare] < 0 Then
         Return "less than"
      Else
         Return "greater than"
      End If
   End Function 'Test
End Class 'Sample
'
'This example produces the following results:
'
'Test the sign of the following types of values:
'Byte   :   0 is equal to zero.
'Int16  :  -2 is less than zero.
'Int32  :  -3 is less than zero.
'Int64  :  -4 is less than zero.
'Single :   0 is equal to zero.
'Double :   6 is greater than zero.
'Decimal:  -7 is less than zero.
'
'The following type is not CLS-compliant.
'SByte  : -101 is less than zero.

// This example demonstrates Math.Sign()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: {1,3} is {2} zero.";
    string nl = Environment.NewLine;

    byte     xByte1    = 0;
    short    xShort1   = -2;
    int      xInt1     = -3;
    long     xLong1    = -4;
    float    xSingle1  = 0.0f;
    double   xDouble1  = 6.0;
    Decimal  xDecimal1 = -7m;

// The following type is not CLS-compliant.
    sbyte    xSbyte1   = -101;

    Console.WriteLine("{0}Test the sign of the following types of values:", nl);
    Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)));
    Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)));
    Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)));
    Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)));
    Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)));
    Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)));
    Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)));
//
    Console.WriteLine("{0}The following type is not CLS-compliant.", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)));
    }
//
    public static String Test(int compare)
    {
    if (compare == 0)
       return "equal to";
    else if (compare < 0)
        return "less than";
    else
        return "greater than";
    }
}
/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

// This example demonstrates Math.Sign()
using namespace System;
String^ Test( int compare )
{
   if ( compare == 0 )
      return "equal to";
   else
   if ( compare < 0 )
      return "less than";
   else
      return "greater than";
}

int main()
{
   String^ str = "{0}: {1,3} is {2} zero.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 0;
   short xShort1 = -2;
   int xInt1 = -3;
   long xLong1 = -4;
   float xSingle1 = 0.0f;
   double xDouble1 = 6.0;
   Decimal xDecimal1 = -7;

   // The following type is not CLS-compliant.
   SByte xSbyte1 = -101;
   Console::WriteLine( "{0}Test the sign of the following types of values:", nl );
   Console::WriteLine( str, "Byte   ", xByte1, Test( Math::Sign( xByte1 ) ) );
   Console::WriteLine( str, "Int16  ", xShort1, Test( Math::Sign( xShort1 ) ) );
   Console::WriteLine( str, "Int32  ", xInt1, Test( Math::Sign( xInt1 ) ) );
   Console::WriteLine( str, "Int64  ", xLong1, Test( Math::Sign( xLong1 ) ) );
   Console::WriteLine( str, "Single ", xSingle1, Test( Math::Sign( xSingle1 ) ) );
   Console::WriteLine( str, "Double ", xDouble1, Test( Math::Sign( xDouble1 ) ) );
   Console::WriteLine( str, "Decimal", xDecimal1, Test( Math::Sign( xDecimal1 ) ) );

   //
   Console::WriteLine( "{0}The following type is not CLS-compliant.", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, Test( Math::Sign( xSbyte1 ) ) );
}

/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Sign 重载
System 命名空间


Math ..::.Sign 方法 (Double)

Math
.
.
::
.
Sign 方法 (Double)
Math 类

返回表示双精度浮点数字的符号的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Sign ( _ value As Double _ ) As Integer
public static int Sign( double value )
public: static int Sign( double value )
static member Sign : value:float -> int
参数
value
类型： System Double
有符号的数字。
返回值
类型： System Int32
一个指示
value
的符号的数字，如下表所示。
返回值
含义
-1
value
小于零。
0
value
等于零。
1
value
大于零。
异常 | 条件
ArithmeticException | value 等于 NaN。

下面的示例演示如何使用 Sign(Double) 方法确定 Double 值的符号并将其显示到控制台。

' This example demonstrates Math.Sign()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: {1,3} is {2} zero."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 0
      Dim xShort1 As Short = -2
      Dim xInt1 As Integer = -3
      Dim xLong1 As Long = -4
      Dim xSingle1 As Single = 0F
      Dim xDouble1 As Double = 6.0
      Dim xDecimal1 As [Decimal] = -7D

      ' The following type is not CLS-compliant.
      Dim xSbyte1 As SByte = -101

      Console.WriteLine("{0}Test the sign of the following types of values:", nl)
      Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)))
      Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)))
      Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)))
      Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)))
      Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)))
      Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)))
      Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)))
      '
      Console.WriteLine("{0}The following type is not CLS-compliant.", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)))
   End Sub 'Main
   '
   Public Shared Function Test([compare] As Integer) As [String]
      If [compare] = 0 Then
         Return "equal to"
      ElseIf [compare] < 0 Then
         Return "less than"
      Else
         Return "greater than"
      End If
   End Function 'Test
End Class 'Sample
'
'This example produces the following results:
'
'Test the sign of the following types of values:
'Byte   :   0 is equal to zero.
'Int16  :  -2 is less than zero.
'Int32  :  -3 is less than zero.
'Int64  :  -4 is less than zero.
'Single :   0 is equal to zero.
'Double :   6 is greater than zero.
'Decimal:  -7 is less than zero.
'
'The following type is not CLS-compliant.
'SByte  : -101 is less than zero.

// This example demonstrates Math.Sign()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: {1,3} is {2} zero.";
    string nl = Environment.NewLine;

    byte     xByte1    = 0;
    short    xShort1   = -2;
    int      xInt1     = -3;
    long     xLong1    = -4;
    float    xSingle1  = 0.0f;
    double   xDouble1  = 6.0;
    Decimal  xDecimal1 = -7m;

// The following type is not CLS-compliant.
    sbyte    xSbyte1   = -101;

    Console.WriteLine("{0}Test the sign of the following types of values:", nl);
    Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)));
    Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)));
    Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)));
    Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)));
    Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)));
    Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)));
    Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)));
//
    Console.WriteLine("{0}The following type is not CLS-compliant.", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)));
    }
//
    public static String Test(int compare)
    {
    if (compare == 0)
       return "equal to";
    else if (compare < 0)
        return "less than";
    else
        return "greater than";
    }
}
/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

// This example demonstrates Math.Sign()
using namespace System;
String^ Test( int compare )
{
   if ( compare == 0 )
      return "equal to";
   else
   if ( compare < 0 )
      return "less than";
   else
      return "greater than";
}

int main()
{
   String^ str = "{0}: {1,3} is {2} zero.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 0;
   short xShort1 = -2;
   int xInt1 = -3;
   long xLong1 = -4;
   float xSingle1 = 0.0f;
   double xDouble1 = 6.0;
   Decimal xDecimal1 = -7;

   // The following type is not CLS-compliant.
   SByte xSbyte1 = -101;
   Console::WriteLine( "{0}Test the sign of the following types of values:", nl );
   Console::WriteLine( str, "Byte   ", xByte1, Test( Math::Sign( xByte1 ) ) );
   Console::WriteLine( str, "Int16  ", xShort1, Test( Math::Sign( xShort1 ) ) );
   Console::WriteLine( str, "Int32  ", xInt1, Test( Math::Sign( xInt1 ) ) );
   Console::WriteLine( str, "Int64  ", xLong1, Test( Math::Sign( xLong1 ) ) );
   Console::WriteLine( str, "Single ", xSingle1, Test( Math::Sign( xSingle1 ) ) );
   Console::WriteLine( str, "Double ", xDouble1, Test( Math::Sign( xDouble1 ) ) );
   Console::WriteLine( str, "Decimal", xDecimal1, Test( Math::Sign( xDecimal1 ) ) );

   //
   Console::WriteLine( "{0}The following type is not CLS-compliant.", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, Test( Math::Sign( xSbyte1 ) ) );
}

/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Sign 重载
System 命名空间


Math ..::.Sign 方法 (Int16)

Math
.
.
::
.
Sign 方法 (Int16)
Math 类

返回一个值，该值表示 16 位有符号整数的符号。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Sign ( _ value As Short _ ) As Integer
public static int Sign( short value )
public: static int Sign( short value )
static member Sign : value:int16 -> int
参数
value
类型： System Int16
有符号的数字。
返回值
类型： System Int32
一个指示
value
的符号的数字，如下表所示。
返回值
含义
-1
value
小于零。
0
value
等于零。
1
value
大于零。

下面的示例演示如何使用 Sign(Int16) 方法确定 Int16 值的符号并将其显示到控制台。

' This example demonstrates Math.Sign()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: {1,3} is {2} zero."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 0
      Dim xShort1 As Short = -2
      Dim xInt1 As Integer = -3
      Dim xLong1 As Long = -4
      Dim xSingle1 As Single = 0F
      Dim xDouble1 As Double = 6.0
      Dim xDecimal1 As [Decimal] = -7D

      ' The following type is not CLS-compliant.
      Dim xSbyte1 As SByte = -101

      Console.WriteLine("{0}Test the sign of the following types of values:", nl)
      Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)))
      Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)))
      Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)))
      Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)))
      Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)))
      Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)))
      Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)))
      '
      Console.WriteLine("{0}The following type is not CLS-compliant.", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)))
   End Sub 'Main
   '
   Public Shared Function Test([compare] As Integer) As [String]
      If [compare] = 0 Then
         Return "equal to"
      ElseIf [compare] < 0 Then
         Return "less than"
      Else
         Return "greater than"
      End If
   End Function 'Test
End Class 'Sample
'
'This example produces the following results:
'
'Test the sign of the following types of values:
'Byte   :   0 is equal to zero.
'Int16  :  -2 is less than zero.
'Int32  :  -3 is less than zero.
'Int64  :  -4 is less than zero.
'Single :   0 is equal to zero.
'Double :   6 is greater than zero.
'Decimal:  -7 is less than zero.
'
'The following type is not CLS-compliant.
'SByte  : -101 is less than zero.

// This example demonstrates Math.Sign()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: {1,3} is {2} zero.";
    string nl = Environment.NewLine;

    byte     xByte1    = 0;
    short    xShort1   = -2;
    int      xInt1     = -3;
    long     xLong1    = -4;
    float    xSingle1  = 0.0f;
    double   xDouble1  = 6.0;
    Decimal  xDecimal1 = -7m;

// The following type is not CLS-compliant.
    sbyte    xSbyte1   = -101;

    Console.WriteLine("{0}Test the sign of the following types of values:", nl);
    Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)));
    Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)));
    Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)));
    Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)));
    Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)));
    Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)));
    Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)));
//
    Console.WriteLine("{0}The following type is not CLS-compliant.", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)));
    }
//
    public static String Test(int compare)
    {
    if (compare == 0)
       return "equal to";
    else if (compare < 0)
        return "less than";
    else
        return "greater than";
    }
}
/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

// This example demonstrates Math.Sign()
using namespace System;
String^ Test( int compare )
{
   if ( compare == 0 )
      return "equal to";
   else
   if ( compare < 0 )
      return "less than";
   else
      return "greater than";
}

int main()
{
   String^ str = "{0}: {1,3} is {2} zero.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 0;
   short xShort1 = -2;
   int xInt1 = -3;
   long xLong1 = -4;
   float xSingle1 = 0.0f;
   double xDouble1 = 6.0;
   Decimal xDecimal1 = -7;

   // The following type is not CLS-compliant.
   SByte xSbyte1 = -101;
   Console::WriteLine( "{0}Test the sign of the following types of values:", nl );
   Console::WriteLine( str, "Byte   ", xByte1, Test( Math::Sign( xByte1 ) ) );
   Console::WriteLine( str, "Int16  ", xShort1, Test( Math::Sign( xShort1 ) ) );
   Console::WriteLine( str, "Int32  ", xInt1, Test( Math::Sign( xInt1 ) ) );
   Console::WriteLine( str, "Int64  ", xLong1, Test( Math::Sign( xLong1 ) ) );
   Console::WriteLine( str, "Single ", xSingle1, Test( Math::Sign( xSingle1 ) ) );
   Console::WriteLine( str, "Double ", xDouble1, Test( Math::Sign( xDouble1 ) ) );
   Console::WriteLine( str, "Decimal", xDecimal1, Test( Math::Sign( xDecimal1 ) ) );

   //
   Console::WriteLine( "{0}The following type is not CLS-compliant.", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, Test( Math::Sign( xSbyte1 ) ) );
}

/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Sign 重载
System 命名空间


Math ..::.Sign 方法 (Int32)

Math
.
.
::
.
Sign 方法 (Int32)
Math 类

返回一个值，该值表示 32 位有符号整数的符号。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Sign ( _ value As Integer _ ) As Integer
public static int Sign( int value )
public: static int Sign( int value )
static member Sign : value:int -> int
参数
value
类型： System Int32
有符号的数字。
返回值
类型： System Int32
一个指示
value
的符号的数字，如下表所示。
返回值
含义
-1
value
小于零。
0
value
等于零。
1
value
大于零。

下面的示例演示如何使用 Sign(Int32) 方法确定 Int32 值的符号并将其显示到控制台。

' This example demonstrates Math.Sign()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: {1,3} is {2} zero."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 0
      Dim xShort1 As Short = -2
      Dim xInt1 As Integer = -3
      Dim xLong1 As Long = -4
      Dim xSingle1 As Single = 0F
      Dim xDouble1 As Double = 6.0
      Dim xDecimal1 As [Decimal] = -7D

      ' The following type is not CLS-compliant.
      Dim xSbyte1 As SByte = -101

      Console.WriteLine("{0}Test the sign of the following types of values:", nl)
      Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)))
      Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)))
      Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)))
      Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)))
      Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)))
      Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)))
      Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)))
      '
      Console.WriteLine("{0}The following type is not CLS-compliant.", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)))
   End Sub 'Main
   '
   Public Shared Function Test([compare] As Integer) As [String]
      If [compare] = 0 Then
         Return "equal to"
      ElseIf [compare] < 0 Then
         Return "less than"
      Else
         Return "greater than"
      End If
   End Function 'Test
End Class 'Sample
'
'This example produces the following results:
'
'Test the sign of the following types of values:
'Byte   :   0 is equal to zero.
'Int16  :  -2 is less than zero.
'Int32  :  -3 is less than zero.
'Int64  :  -4 is less than zero.
'Single :   0 is equal to zero.
'Double :   6 is greater than zero.
'Decimal:  -7 is less than zero.
'
'The following type is not CLS-compliant.
'SByte  : -101 is less than zero.

// This example demonstrates Math.Sign()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: {1,3} is {2} zero.";
    string nl = Environment.NewLine;

    byte     xByte1    = 0;
    short    xShort1   = -2;
    int      xInt1     = -3;
    long     xLong1    = -4;
    float    xSingle1  = 0.0f;
    double   xDouble1  = 6.0;
    Decimal  xDecimal1 = -7m;

// The following type is not CLS-compliant.
    sbyte    xSbyte1   = -101;

    Console.WriteLine("{0}Test the sign of the following types of values:", nl);
    Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)));
    Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)));
    Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)));
    Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)));
    Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)));
    Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)));
    Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)));
//
    Console.WriteLine("{0}The following type is not CLS-compliant.", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)));
    }
//
    public static String Test(int compare)
    {
    if (compare == 0)
       return "equal to";
    else if (compare < 0)
        return "less than";
    else
        return "greater than";
    }
}
/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

// This example demonstrates Math.Sign()
using namespace System;
String^ Test( int compare )
{
   if ( compare == 0 )
      return "equal to";
   else
   if ( compare < 0 )
      return "less than";
   else
      return "greater than";
}

int main()
{
   String^ str = "{0}: {1,3} is {2} zero.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 0;
   short xShort1 = -2;
   int xInt1 = -3;
   long xLong1 = -4;
   float xSingle1 = 0.0f;
   double xDouble1 = 6.0;
   Decimal xDecimal1 = -7;

   // The following type is not CLS-compliant.
   SByte xSbyte1 = -101;
   Console::WriteLine( "{0}Test the sign of the following types of values:", nl );
   Console::WriteLine( str, "Byte   ", xByte1, Test( Math::Sign( xByte1 ) ) );
   Console::WriteLine( str, "Int16  ", xShort1, Test( Math::Sign( xShort1 ) ) );
   Console::WriteLine( str, "Int32  ", xInt1, Test( Math::Sign( xInt1 ) ) );
   Console::WriteLine( str, "Int64  ", xLong1, Test( Math::Sign( xLong1 ) ) );
   Console::WriteLine( str, "Single ", xSingle1, Test( Math::Sign( xSingle1 ) ) );
   Console::WriteLine( str, "Double ", xDouble1, Test( Math::Sign( xDouble1 ) ) );
   Console::WriteLine( str, "Decimal", xDecimal1, Test( Math::Sign( xDecimal1 ) ) );

   //
   Console::WriteLine( "{0}The following type is not CLS-compliant.", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, Test( Math::Sign( xSbyte1 ) ) );
}

/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Sign 重载
System 命名空间


Math ..::.Sign 方法 (Int64)

Math
.
.
::
.
Sign 方法 (Int64)
Math 类

返回一个值，表示 64 位有符号整数的符号。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Sign ( _ value As Long _ ) As Integer
public static int Sign( long value )
public: static int Sign( long long value )
static member Sign : value:int64 -> int
参数
value
类型： System Int64
有符号的数字。
返回值
类型： System Int32
一个指示
value
的符号的数字，如下表所示。
返回值
含义
-1
value
小于零。
0
value
等于零。
1
value
大于零。

下面的示例演示如何使用 Sign(Int64) 方法确定 Int64 值的符号并将其显示到控制台。

' This example demonstrates Math.Sign()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: {1,3} is {2} zero."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 0
      Dim xShort1 As Short = -2
      Dim xInt1 As Integer = -3
      Dim xLong1 As Long = -4
      Dim xSingle1 As Single = 0F
      Dim xDouble1 As Double = 6.0
      Dim xDecimal1 As [Decimal] = -7D

      ' The following type is not CLS-compliant.
      Dim xSbyte1 As SByte = -101

      Console.WriteLine("{0}Test the sign of the following types of values:", nl)
      Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)))
      Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)))
      Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)))
      Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)))
      Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)))
      Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)))
      Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)))
      '
      Console.WriteLine("{0}The following type is not CLS-compliant.", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)))
   End Sub 'Main
   '
   Public Shared Function Test([compare] As Integer) As [String]
      If [compare] = 0 Then
         Return "equal to"
      ElseIf [compare] < 0 Then
         Return "less than"
      Else
         Return "greater than"
      End If
   End Function 'Test
End Class 'Sample
'
'This example produces the following results:
'
'Test the sign of the following types of values:
'Byte   :   0 is equal to zero.
'Int16  :  -2 is less than zero.
'Int32  :  -3 is less than zero.
'Int64  :  -4 is less than zero.
'Single :   0 is equal to zero.
'Double :   6 is greater than zero.
'Decimal:  -7 is less than zero.
'
'The following type is not CLS-compliant.
'SByte  : -101 is less than zero.

// This example demonstrates Math.Sign()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: {1,3} is {2} zero.";
    string nl = Environment.NewLine;

    byte     xByte1    = 0;
    short    xShort1   = -2;
    int      xInt1     = -3;
    long     xLong1    = -4;
    float    xSingle1  = 0.0f;
    double   xDouble1  = 6.0;
    Decimal  xDecimal1 = -7m;

// The following type is not CLS-compliant.
    sbyte    xSbyte1   = -101;

    Console.WriteLine("{0}Test the sign of the following types of values:", nl);
    Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)));
    Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)));
    Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)));
    Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)));
    Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)));
    Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)));
    Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)));
//
    Console.WriteLine("{0}The following type is not CLS-compliant.", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)));
    }
//
    public static String Test(int compare)
    {
    if (compare == 0)
       return "equal to";
    else if (compare < 0)
        return "less than";
    else
        return "greater than";
    }
}
/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

// This example demonstrates Math.Sign()
using namespace System;
String^ Test( int compare )
{
   if ( compare == 0 )
      return "equal to";
   else
   if ( compare < 0 )
      return "less than";
   else
      return "greater than";
}

int main()
{
   String^ str = "{0}: {1,3} is {2} zero.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 0;
   short xShort1 = -2;
   int xInt1 = -3;
   long xLong1 = -4;
   float xSingle1 = 0.0f;
   double xDouble1 = 6.0;
   Decimal xDecimal1 = -7;

   // The following type is not CLS-compliant.
   SByte xSbyte1 = -101;
   Console::WriteLine( "{0}Test the sign of the following types of values:", nl );
   Console::WriteLine( str, "Byte   ", xByte1, Test( Math::Sign( xByte1 ) ) );
   Console::WriteLine( str, "Int16  ", xShort1, Test( Math::Sign( xShort1 ) ) );
   Console::WriteLine( str, "Int32  ", xInt1, Test( Math::Sign( xInt1 ) ) );
   Console::WriteLine( str, "Int64  ", xLong1, Test( Math::Sign( xLong1 ) ) );
   Console::WriteLine( str, "Single ", xSingle1, Test( Math::Sign( xSingle1 ) ) );
   Console::WriteLine( str, "Double ", xDouble1, Test( Math::Sign( xDouble1 ) ) );
   Console::WriteLine( str, "Decimal", xDecimal1, Test( Math::Sign( xDecimal1 ) ) );

   //
   Console::WriteLine( "{0}The following type is not CLS-compliant.", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, Test( Math::Sign( xSbyte1 ) ) );
}

/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Sign 重载
System 命名空间


Math ..::.Sign 方法 (SByte)

Math
.
.
::
.
Sign 方法 (SByte)
Math 类

返回表示 8 位有符号整数的符号的值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _ Public Shared Function Sign ( _ value As SByte _ ) As Integer
[CLSCompliantAttribute(false)] public static int Sign( sbyte value )
[CLSCompliantAttribute(false)] public: static int Sign( signed char value )
[<CLSCompliantAttribute(false)>] static member Sign : value:sbyte -> int
参数
value
类型： System SByte
有符号的数字。
返回值
类型： System Int32
一个指示
value
的符号的数字，如下表所示。
返回值
含义
-1
value
小于零。
0
value
等于零。
1
value
大于零。

下面的示例演示如何使用 Sign(SByte) 方法确定 SByte 值的符号并将其显示到控制台。

' This example demonstrates Math.Sign()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: {1,3} is {2} zero."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 0
      Dim xShort1 As Short = -2
      Dim xInt1 As Integer = -3
      Dim xLong1 As Long = -4
      Dim xSingle1 As Single = 0F
      Dim xDouble1 As Double = 6.0
      Dim xDecimal1 As [Decimal] = -7D

      ' The following type is not CLS-compliant.
      Dim xSbyte1 As SByte = -101

      Console.WriteLine("{0}Test the sign of the following types of values:", nl)
      Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)))
      Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)))
      Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)))
      Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)))
      Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)))
      Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)))
      Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)))
      '
      Console.WriteLine("{0}The following type is not CLS-compliant.", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)))
   End Sub 'Main
   '
   Public Shared Function Test([compare] As Integer) As [String]
      If [compare] = 0 Then
         Return "equal to"
      ElseIf [compare] < 0 Then
         Return "less than"
      Else
         Return "greater than"
      End If
   End Function 'Test
End Class 'Sample
'
'This example produces the following results:
'
'Test the sign of the following types of values:
'Byte   :   0 is equal to zero.
'Int16  :  -2 is less than zero.
'Int32  :  -3 is less than zero.
'Int64  :  -4 is less than zero.
'Single :   0 is equal to zero.
'Double :   6 is greater than zero.
'Decimal:  -7 is less than zero.
'
'The following type is not CLS-compliant.
'SByte  : -101 is less than zero.

// This example demonstrates Math.Sign()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: {1,3} is {2} zero.";
    string nl = Environment.NewLine;

    byte     xByte1    = 0;
    short    xShort1   = -2;
    int      xInt1     = -3;
    long     xLong1    = -4;
    float    xSingle1  = 0.0f;
    double   xDouble1  = 6.0;
    Decimal  xDecimal1 = -7m;

// The following type is not CLS-compliant.
    sbyte    xSbyte1   = -101;

    Console.WriteLine("{0}Test the sign of the following types of values:", nl);
    Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)));
    Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)));
    Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)));
    Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)));
    Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)));
    Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)));
    Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)));
//
    Console.WriteLine("{0}The following type is not CLS-compliant.", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)));
    }
//
    public static String Test(int compare)
    {
    if (compare == 0)
       return "equal to";
    else if (compare < 0)
        return "less than";
    else
        return "greater than";
    }
}
/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

// This example demonstrates Math.Sign()
using namespace System;
String^ Test( int compare )
{
   if ( compare == 0 )
      return "equal to";
   else
   if ( compare < 0 )
      return "less than";
   else
      return "greater than";
}

int main()
{
   String^ str = "{0}: {1,3} is {2} zero.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 0;
   short xShort1 = -2;
   int xInt1 = -3;
   long xLong1 = -4;
   float xSingle1 = 0.0f;
   double xDouble1 = 6.0;
   Decimal xDecimal1 = -7;

   // The following type is not CLS-compliant.
   SByte xSbyte1 = -101;
   Console::WriteLine( "{0}Test the sign of the following types of values:", nl );
   Console::WriteLine( str, "Byte   ", xByte1, Test( Math::Sign( xByte1 ) ) );
   Console::WriteLine( str, "Int16  ", xShort1, Test( Math::Sign( xShort1 ) ) );
   Console::WriteLine( str, "Int32  ", xInt1, Test( Math::Sign( xInt1 ) ) );
   Console::WriteLine( str, "Int64  ", xLong1, Test( Math::Sign( xLong1 ) ) );
   Console::WriteLine( str, "Single ", xSingle1, Test( Math::Sign( xSingle1 ) ) );
   Console::WriteLine( str, "Double ", xDouble1, Test( Math::Sign( xDouble1 ) ) );
   Console::WriteLine( str, "Decimal", xDecimal1, Test( Math::Sign( xDecimal1 ) ) );

   //
   Console::WriteLine( "{0}The following type is not CLS-compliant.", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, Test( Math::Sign( xSbyte1 ) ) );
}

/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Sign 重载
System 命名空间


Math ..::.Sign 方法 (Single)

Math
.
.
::
.
Sign 方法 (Single)
Math 类

返回表示单精度浮点数字的符号的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Sign ( _ value As Single _ ) As Integer
public static int Sign( float value )
public: static int Sign( float value )
static member Sign : value:float32 -> int
参数
value
类型： System Single
有符号的数字。
返回值
类型： System Int32
一个指示
value
的符号的数字，如下表所示。
返回值
含义
-1
value
小于零。
0
value
等于零。
1
value
大于零。
异常 | 条件
ArithmeticException | value 等于 NaN。

下面的示例演示如何使用 Sign(Single) 方法确定 Single 值的符号并将其显示到控制台。

' This example demonstrates Math.Sign()
Class Sample
   Public Shared Sub Main()
      Dim str As String = "{0}: {1,3} is {2} zero."
      Dim nl As String = Environment.NewLine

      Dim xByte1 As Byte = 0
      Dim xShort1 As Short = -2
      Dim xInt1 As Integer = -3
      Dim xLong1 As Long = -4
      Dim xSingle1 As Single = 0F
      Dim xDouble1 As Double = 6.0
      Dim xDecimal1 As [Decimal] = -7D

      ' The following type is not CLS-compliant.
      Dim xSbyte1 As SByte = -101

      Console.WriteLine("{0}Test the sign of the following types of values:", nl)
      Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)))
      Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)))
      Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)))
      Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)))
      Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)))
      Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)))
      Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)))
      '
      Console.WriteLine("{0}The following type is not CLS-compliant.", nl)
      Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)))
   End Sub 'Main
   '
   Public Shared Function Test([compare] As Integer) As [String]
      If [compare] = 0 Then
         Return "equal to"
      ElseIf [compare] < 0 Then
         Return "less than"
      Else
         Return "greater than"
      End If
   End Function 'Test
End Class 'Sample
'
'This example produces the following results:
'
'Test the sign of the following types of values:
'Byte   :   0 is equal to zero.
'Int16  :  -2 is less than zero.
'Int32  :  -3 is less than zero.
'Int64  :  -4 is less than zero.
'Single :   0 is equal to zero.
'Double :   6 is greater than zero.
'Decimal:  -7 is less than zero.
'
'The following type is not CLS-compliant.
'SByte  : -101 is less than zero.

// This example demonstrates Math.Sign()
using System;

class Sample
{
    public static void Main()
    {
    string str = "{0}: {1,3} is {2} zero.";
    string nl = Environment.NewLine;

    byte     xByte1    = 0;
    short    xShort1   = -2;
    int      xInt1     = -3;
    long     xLong1    = -4;
    float    xSingle1  = 0.0f;
    double   xDouble1  = 6.0;
    Decimal  xDecimal1 = -7m;

// The following type is not CLS-compliant.
    sbyte    xSbyte1   = -101;

    Console.WriteLine("{0}Test the sign of the following types of values:", nl);
    Console.WriteLine(str, "Byte   ", xByte1, Test(Math.Sign(xByte1)));
    Console.WriteLine(str, "Int16  ", xShort1, Test(Math.Sign(xShort1)));
    Console.WriteLine(str, "Int32  ", xInt1, Test(Math.Sign(xInt1)));
    Console.WriteLine(str, "Int64  ", xLong1, Test(Math.Sign(xLong1)));
    Console.WriteLine(str, "Single ", xSingle1, Test(Math.Sign(xSingle1)));
    Console.WriteLine(str, "Double ", xDouble1, Test(Math.Sign(xDouble1)));
    Console.WriteLine(str, "Decimal", xDecimal1, Test(Math.Sign(xDecimal1)));
//
    Console.WriteLine("{0}The following type is not CLS-compliant.", nl);
    Console.WriteLine(str, "SByte  ", xSbyte1, Test(Math.Sign(xSbyte1)));
    }
//
    public static String Test(int compare)
    {
    if (compare == 0)
       return "equal to";
    else if (compare < 0)
        return "less than";
    else
        return "greater than";
    }
}
/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

// This example demonstrates Math.Sign()
using namespace System;
String^ Test( int compare )
{
   if ( compare == 0 )
      return "equal to";
   else
   if ( compare < 0 )
      return "less than";
   else
      return "greater than";
}

int main()
{
   String^ str = "{0}: {1,3} is {2} zero.";
   String^ nl = Environment::NewLine;
   Byte xByte1 = 0;
   short xShort1 = -2;
   int xInt1 = -3;
   long xLong1 = -4;
   float xSingle1 = 0.0f;
   double xDouble1 = 6.0;
   Decimal xDecimal1 = -7;

   // The following type is not CLS-compliant.
   SByte xSbyte1 = -101;
   Console::WriteLine( "{0}Test the sign of the following types of values:", nl );
   Console::WriteLine( str, "Byte   ", xByte1, Test( Math::Sign( xByte1 ) ) );
   Console::WriteLine( str, "Int16  ", xShort1, Test( Math::Sign( xShort1 ) ) );
   Console::WriteLine( str, "Int32  ", xInt1, Test( Math::Sign( xInt1 ) ) );
   Console::WriteLine( str, "Int64  ", xLong1, Test( Math::Sign( xLong1 ) ) );
   Console::WriteLine( str, "Single ", xSingle1, Test( Math::Sign( xSingle1 ) ) );
   Console::WriteLine( str, "Double ", xDouble1, Test( Math::Sign( xDouble1 ) ) );
   Console::WriteLine( str, "Decimal", xDecimal1, Test( Math::Sign( xDecimal1 ) ) );

   //
   Console::WriteLine( "{0}The following type is not CLS-compliant.", nl );
   Console::WriteLine( str, "SByte  ", xSbyte1, Test( Math::Sign( xSbyte1 ) ) );
}

/*
This example produces the following results:

Test the sign of the following types of values:
Byte   :   0 is equal to zero.
Int16  :  -2 is less than zero.
Int32  :  -3 is less than zero.
Int64  :  -4 is less than zero.
Single :   0 is equal to zero.
Double :   6 is greater than zero.
Decimal:  -7 is less than zero.

The following type is not CLS-compliant.
SByte  : -101 is less than zero.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
Sign 重载
System 命名空间


Math ..::.Sin 方法

Math
.
.
::
.
Sin 方法
Math 类

返回指定角度的正弦值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Sin ( _
    a As Double _
) As Double
public static double Sin(
    double a
)
public:
static double Sin(
    double a
)
static member Sin :
        a:float -> float

参数

a
类型： System Double
以弧度为单位的角。

返回值

类型： System Double
a 的正弦值。如果 a 等于 NaN、NegativeInfinity 或 PositiveInfinity，此方法将返回 NaN。 a 的正弦值。如果 a 等于 NaN、NegativeInfinity 或 PositiveInfinity，此方法将返回 NaN。

角度 a 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。 角度 a 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。

a 的可接受值的范围从约 -9223372036854775295 至约 9223372036854775295。对于超出此范围的值，Sin 方法返回未更改的 a，而不是引发异常。 a 的可接受值的范围从约 -9223372036854775295 至约 9223372036854775295。对于超出此范围的值，Sin 方法返回未更改的 a，而不是引发异常。

下面的示例使用 Sin 计算所选角度的特定三角恒等式。

' Example for the trigonometric Math.Sin( Double ) and Math.Cos( Double ) methods.
Imports System
Imports Microsoft.VisualBasic

Module SinCos

    Sub Main()
        Console.WriteLine( _
            "This example of trigonometric " & _
            "Math.Sin( double ) and Math.Cos( double )" & vbCrLf & _
            "generates the following output." & vbCrLf)
        Console.WriteLine( _
            "Convert selected values for X to radians " & vbCrLf & _
            "and evaluate these trigonometric identities:")
        Console.WriteLine( _
            "   sin^2(X) + cos^2(X) = 1" & vbCrLf & _
            "   sin(2 * X) = 2 * sin(X) * cos(X)")
        Console.WriteLine("   cos(2 * X) = cos^2(X) - sin^2(X)")

        UseSineCosine(15.0)
        UseSineCosine(30.0)
        UseSineCosine(45.0)

        Console.WriteLine( _
            vbCrLf & "Convert selected values for X and Y to radians" & _
            vbCrLf & "and evaluate these trigonometric identities:")
        Console.WriteLine("   sin(X + Y) = sin(X) * cos(Y) + cos(X) * sin(Y)")
        Console.WriteLine("   cos(X + Y) = cos(X) * cos(Y) - sin(X) * sin(Y)")

        UseTwoAngles(15.0, 30.0)
        UseTwoAngles(30.0, 45.0)
    End Sub 'Main

    ' Evaluate trigonometric identities with a given angle.
    Sub UseSineCosine(degrees As Double)

        Dim angle As Double = Math.PI * degrees / 180.0
        Dim sinAngle As Double = Math.Sin(angle)
        Dim cosAngle As Double = Math.Cos(angle)

        ' Evaluate sin^2(X) + cos^2(X) = 1.
        Console.WriteLine( _
            vbCrLf & "                           Math.Sin({0} deg) = {1:E16}" & _
            vbCrLf & "                           Math.Cos({0} deg) = {2:E16}", _
            degrees, Math.Sin(angle), Math.Cos(angle))
        Console.WriteLine( _
            "(Math.Sin({0} deg))^2 + (Math.Cos({0} deg))^2 = {1:E16}", _
            degrees, sinAngle * sinAngle + cosAngle * cosAngle)

        ' Evaluate sin(2 * X) = 2 * sin(X) * cos(X).
        Console.WriteLine( _
            "                           Math.Sin({0} deg) = {1:E16}", _
            2.0 * degrees, Math.Sin(2.0 * angle))
        Console.WriteLine( _
            "    2 * Math.Sin({0} deg) * Math.Cos({0} deg) = {1:E16}", _
            degrees, 2.0 * sinAngle * cosAngle)

        ' Evaluate cos(2 * X) = cos^2(X) - sin^2(X).
        Console.WriteLine( _
            "                           Math.Cos({0} deg) = {1:E16}", _
            2.0 * degrees, Math.Cos(2.0 * angle))
        Console.WriteLine( _
            "(Math.Cos({0} deg))^2 - (Math.Sin({0} deg))^2 = {1:E16}", _
            degrees, cosAngle * cosAngle - sinAngle * sinAngle)

    End Sub 'UseSineCosine

    ' Evaluate trigonometric identities that are functions of two angles.
    Sub UseTwoAngles(degreesX As Double, degreesY As Double)

        Dim angleX As Double = Math.PI * degreesX / 180.0
        Dim angleY As Double = Math.PI * degreesY / 180.0

        ' Evaluate sin(X + Y) = sin(X) * cos(Y) + cos(X) * sin(Y).
        Console.WriteLine( _
            vbCrLf & "        Math.Sin({0} deg) * Math.Cos({1} deg) +" & _
            vbCrLf & "        Math.Cos({0} deg) * Math.Sin({1} deg) = {2:E16}", _
            degreesX, degreesY, Math.Sin(angleX) * Math.Cos(angleY) + _
            Math.Cos(angleX) * Math.Sin(angleY))
        Console.WriteLine( _
            "                           Math.Sin({0} deg) = {1:E16}", _
            degreesX + degreesY, Math.Sin(angleX + angleY))

        ' Evaluate cos(X + Y) = cos(X) * cos(Y) - sin(X) * sin(Y).
        Console.WriteLine( _
            "        Math.Cos({0} deg) * Math.Cos({1} deg) -" & vbCrLf & _
            "        Math.Sin({0} deg) * Math.Sin({1} deg) = {2:E16}", _
            degreesX, degreesY, Math.Cos(angleX) * Math.Cos(angleY) - _
            Math.Sin(angleX) * Math.Sin(angleY))
        Console.WriteLine( _
            "                           Math.Cos({0} deg) = {1:E16}", _
            degreesX + degreesY, Math.Cos(angleX + angleY))

    End Sub 'UseTwoAngles
End Module 'SinCos

' This example of trigonometric Math.Sin( double ) and Math.Cos( double )
' generates the following output.
'
' Convert selected values for X to radians
' and evaluate these trigonometric identities:
'    sin^2(X) + cos^2(X) = 1
'    sin(2 * X) = 2 * sin(X) * cos(X)
'    cos(2 * X) = cos^2(X) - sin^2(X)
'
'                            Math.Sin(15 deg) = 2.5881904510252074E-001
'                            Math.Cos(15 deg) = 9.6592582628906831E-001
' (Math.Sin(15 deg))^2 + (Math.Cos(15 deg))^2 = 1.0000000000000000E+000
'                            Math.Sin(30 deg) = 4.9999999999999994E-001
'     2 * Math.Sin(15 deg) * Math.Cos(15 deg) = 4.9999999999999994E-001
'                            Math.Cos(30 deg) = 8.6602540378443871E-001
' (Math.Cos(15 deg))^2 - (Math.Sin(15 deg))^2 = 8.6602540378443871E-001
'
'                            Math.Sin(30 deg) = 4.9999999999999994E-001
'                            Math.Cos(30 deg) = 8.6602540378443871E-001
' (Math.Sin(30 deg))^2 + (Math.Cos(30 deg))^2 = 1.0000000000000000E+000
'                            Math.Sin(60 deg) = 8.6602540378443860E-001
'     2 * Math.Sin(30 deg) * Math.Cos(30 deg) = 8.6602540378443860E-001
'                            Math.Cos(60 deg) = 5.0000000000000011E-001
' (Math.Cos(30 deg))^2 - (Math.Sin(30 deg))^2 = 5.0000000000000022E-001
'
'                            Math.Sin(45 deg) = 7.0710678118654746E-001
'                            Math.Cos(45 deg) = 7.0710678118654757E-001
' (Math.Sin(45 deg))^2 + (Math.Cos(45 deg))^2 = 1.0000000000000000E+000
'                            Math.Sin(90 deg) = 1.0000000000000000E+000
'     2 * Math.Sin(45 deg) * Math.Cos(45 deg) = 1.0000000000000000E+000
'                            Math.Cos(90 deg) = 6.1230317691118863E-017
' (Math.Cos(45 deg))^2 - (Math.Sin(45 deg))^2 = 2.2204460492503131E-016
'
' Convert selected values for X and Y to radians
' and evaluate these trigonometric identities:
'    sin(X + Y) = sin(X) * cos(Y) + cos(X) * sin(Y)
'    cos(X + Y) = cos(X) * cos(Y) - sin(X) * sin(Y)
'
'         Math.Sin(15 deg) * Math.Cos(30 deg) +
'         Math.Cos(15 deg) * Math.Sin(30 deg) = 7.0710678118654746E-001
'                            Math.Sin(45 deg) = 7.0710678118654746E-001
'         Math.Cos(15 deg) * Math.Cos(30 deg) -
'         Math.Sin(15 deg) * Math.Sin(30 deg) = 7.0710678118654757E-001
'                            Math.Cos(45 deg) = 7.0710678118654757E-001
'
'         Math.Sin(30 deg) * Math.Cos(45 deg) +
'         Math.Cos(30 deg) * Math.Sin(45 deg) = 9.6592582628906831E-001
'                            Math.Sin(75 deg) = 9.6592582628906820E-001
'         Math.Cos(30 deg) * Math.Cos(45 deg) -
'         Math.Sin(30 deg) * Math.Sin(45 deg) = 2.5881904510252085E-001
'                            Math.Cos(75 deg) = 2.5881904510252096E-001

// Example for the trigonometric Math.Sin( double )
// and Math.Cos( double ) methods.
using System;

class SinCos
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of trigonometric " +
            "Math.Sin( double ) and Math.Cos( double )\n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Convert selected values for X to radians \n" +
            "and evaluate these trigonometric identities:" );
        Console.WriteLine( "   sin^2(X) + cos^2(X) == 1\n" +
                           "   sin(2 * X) == 2 * sin(X) * cos(X)" );
        Console.WriteLine( "   cos(2 * X) == cos^2(X) - sin^2(X)" );

        UseSineCosine(15.0);
        UseSineCosine(30.0);
        UseSineCosine(45.0);

        Console.WriteLine(
            "\nConvert selected values for X and Y to radians \n" +
            "and evaluate these trigonometric identities:" );
        Console.WriteLine( "   sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y)" );
        Console.WriteLine( "   cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y)" );

        UseTwoAngles(15.0, 30.0);
        UseTwoAngles(30.0, 45.0);
    }

    // Evaluate trigonometric identities with a given angle.
    static void UseSineCosine(double degrees)
    {
        double angle    = Math.PI * degrees / 180.0;
        double sinAngle = Math.Sin(angle);
        double cosAngle = Math.Cos(angle);

        // Evaluate sin^2(X) + cos^2(X) == 1.
        Console.WriteLine(
            "\n                           Math.Sin({0} deg) == {1:E16}\n" +
            "                           Math.Cos({0} deg) == {2:E16}",
            degrees, Math.Sin(angle), Math.Cos(angle) );
        Console.WriteLine(
            "(Math.Sin({0} deg))^2 + (Math.Cos({0} deg))^2 == {1:E16}",
            degrees, sinAngle * sinAngle + cosAngle * cosAngle );

        // Evaluate sin(2 * X) == 2 * sin(X) * cos(X).
        Console.WriteLine(
            "                           Math.Sin({0} deg) == {1:E16}",
            2.0 * degrees, Math.Sin(2.0 * angle) );
        Console.WriteLine(
            "    2 * Math.Sin({0} deg) * Math.Cos({0} deg) == {1:E16}",
            degrees, 2.0 * sinAngle * cosAngle );

        // Evaluate cos(2 * X) == cos^2(X) - sin^2(X).
        Console.WriteLine(
            "                           Math.Cos({0} deg) == {1:E16}",
            2.0 * degrees, Math.Cos(2.0 * angle) );
        Console.WriteLine(
            "(Math.Cos({0} deg))^2 - (Math.Sin({0} deg))^2 == {1:E16}",
            degrees, cosAngle * cosAngle - sinAngle * sinAngle );
    }

    // Evaluate trigonometric identities that are functions of two angles.
    static void UseTwoAngles(double degreesX, double degreesY)
    {
        double  angleX  = Math.PI * degreesX / 180.0;
        double  angleY  = Math.PI * degreesY / 180.0;

        // Evaluate sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y).
        Console.WriteLine(
            "\n        Math.Sin({0} deg) * Math.Cos({1} deg) +\n" +
            "        Math.Cos({0} deg) * Math.Sin({1} deg) == {2:E16}",
            degreesX, degreesY, Math.Sin(angleX) * Math.Cos(angleY) +
            Math.Cos(angleX) * Math.Sin(angleY));
        Console.WriteLine(
            "                           Math.Sin({0} deg) == {1:E16}",
            degreesX + degreesY, Math.Sin(angleX + angleY));

        // Evaluate cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y).
        Console.WriteLine(
            "        Math.Cos({0} deg) * Math.Cos({1} deg) -\n" +
            "        Math.Sin({0} deg) * Math.Sin({1} deg) == {2:E16}",
            degreesX, degreesY, Math.Cos(angleX) * Math.Cos(angleY) -
            Math.Sin(angleX) * Math.Sin(angleY));
        Console.WriteLine(
            "                           Math.Cos({0} deg) == {1:E16}",
            degreesX + degreesY, Math.Cos(angleX + angleY));
    }
}

/*
This example of trigonometric Math.Sin( double ) and Math.Cos( double )
generates the following output.

Convert selected values for X to radians
and evaluate these trigonometric identities:
   sin^2(X) + cos^2(X) == 1
   sin(2 * X) == 2 * sin(X) * cos(X)
   cos(2 * X) == cos^2(X) - sin^2(X)

                           Math.Sin(15 deg) == 2.5881904510252074E-001
                           Math.Cos(15 deg) == 9.6592582628906831E-001
(Math.Sin(15 deg))^2 + (Math.Cos(15 deg))^2 == 1.0000000000000000E+000
                           Math.Sin(30 deg) == 4.9999999999999994E-001
    2 * Math.Sin(15 deg) * Math.Cos(15 deg) == 4.9999999999999994E-001
                           Math.Cos(30 deg) == 8.6602540378443871E-001
(Math.Cos(15 deg))^2 - (Math.Sin(15 deg))^2 == 8.6602540378443871E-001

                           Math.Sin(30 deg) == 4.9999999999999994E-001
                           Math.Cos(30 deg) == 8.6602540378443871E-001
(Math.Sin(30 deg))^2 + (Math.Cos(30 deg))^2 == 1.0000000000000000E+000
                           Math.Sin(60 deg) == 8.6602540378443860E-001
    2 * Math.Sin(30 deg) * Math.Cos(30 deg) == 8.6602540378443860E-001
                           Math.Cos(60 deg) == 5.0000000000000011E-001
(Math.Cos(30 deg))^2 - (Math.Sin(30 deg))^2 == 5.0000000000000022E-001

                           Math.Sin(45 deg) == 7.0710678118654746E-001
                           Math.Cos(45 deg) == 7.0710678118654757E-001
(Math.Sin(45 deg))^2 + (Math.Cos(45 deg))^2 == 1.0000000000000000E+000
                           Math.Sin(90 deg) == 1.0000000000000000E+000
    2 * Math.Sin(45 deg) * Math.Cos(45 deg) == 1.0000000000000000E+000
                           Math.Cos(90 deg) == 6.1230317691118863E-017
(Math.Cos(45 deg))^2 - (Math.Sin(45 deg))^2 == 2.2204460492503131E-016

Convert selected values for X and Y to radians
and evaluate these trigonometric identities:
   sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y)
   cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y)

        Math.Sin(15 deg) * Math.Cos(30 deg) +
        Math.Cos(15 deg) * Math.Sin(30 deg) == 7.0710678118654746E-001
                           Math.Sin(45 deg) == 7.0710678118654746E-001
        Math.Cos(15 deg) * Math.Cos(30 deg) -
        Math.Sin(15 deg) * Math.Sin(30 deg) == 7.0710678118654757E-001
                           Math.Cos(45 deg) == 7.0710678118654757E-001

        Math.Sin(30 deg) * Math.Cos(45 deg) +
        Math.Cos(30 deg) * Math.Sin(45 deg) == 9.6592582628906831E-001
                           Math.Sin(75 deg) == 9.6592582628906820E-001
        Math.Cos(30 deg) * Math.Cos(45 deg) -
        Math.Sin(30 deg) * Math.Sin(45 deg) == 2.5881904510252085E-001
                           Math.Cos(75 deg) == 2.5881904510252096E-001
*/

// Example for the trigonometric Math.Sin( double )
// and Math.Cos( double ) methods.
using namespace System;

// Evaluate trigonometric identities with a given angle.
void UseSineCosine( double degrees )
{
   double angle = Math::PI * degrees / 180.0;
   double sinAngle = Math::Sin( angle );
   double cosAngle = Math::Cos( angle );

   // Evaluate sin^2(X) + cos^2(X) == 1.
   Console::WriteLine( "\n                            Math::Sin({0} deg) == {1:E16}\n"
   "                            Math::Cos({0} deg) == {2:E16}", degrees, Math::Sin( angle ), Math::Cos( angle ) );
   Console::WriteLine( "(Math::Sin({0} deg))^2 + (Math::Cos({0} deg))^2 == {1:E16}", degrees, sinAngle * sinAngle + cosAngle * cosAngle );

   // Evaluate sin(2 * X) == 2 * sin(X) * cos(X).
   Console::WriteLine( "                            Math::Sin({0} deg) == {1:E16}", 2.0 * degrees, Math::Sin( 2.0 * angle ) );
   Console::WriteLine( "    2 * Math::Sin({0} deg) * Math::Cos({0} deg) == {1:E16}", degrees, 2.0 * sinAngle * cosAngle );

   // Evaluate cos(2 * X) == cos^2(X) - sin^2(X).
   Console::WriteLine( "                            Math::Cos({0} deg) == {1:E16}", 2.0 * degrees, Math::Cos( 2.0 * angle ) );
   Console::WriteLine( "(Math::Cos({0} deg))^2 - (Math::Sin({0} deg))^2 == {1:E16}", degrees, cosAngle * cosAngle - sinAngle * sinAngle );
}

// Evaluate trigonometric identities that are functions of two angles.
void UseTwoAngles( double degreesX, double degreesY )
{
   double angleX = Math::PI * degreesX / 180.0;
   double angleY = Math::PI * degreesY / 180.0;

   // Evaluate sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y).
   Console::WriteLine( "\n        Math::Sin({0} deg) * Math::Cos({1} deg) +\n"
   "        Math::Cos({0} deg) * Math::Sin({1} deg) == {2:E16}", degreesX, degreesY, Math::Sin( angleX ) * Math::Cos( angleY ) + Math::Cos( angleX ) * Math::Sin( angleY ) );
   Console::WriteLine( "                            Math::Sin({0} deg) == {1:E16}", degreesX + degreesY, Math::Sin( angleX + angleY ) );

   // Evaluate cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y).
   Console::WriteLine( "        Math::Cos({0} deg) * Math::Cos({1} deg) -\n"
   "        Math::Sin({0} deg) * Math::Sin({1} deg) == {2:E16}", degreesX, degreesY, Math::Cos( angleX ) * Math::Cos( angleY ) - Math::Sin( angleX ) * Math::Sin( angleY ) );
   Console::WriteLine( "                            Math::Cos({0} deg) == {1:E16}", degreesX + degreesY, Math::Cos( angleX + angleY ) );
}

int main()
{
   Console::WriteLine( "This example of trigonometric "
   "Math::Sin( double ) and Math::Cos( double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "Convert selected values for X to radians \n"
   "and evaluate these trigonometric identities:" );
   Console::WriteLine( "   sin^2(X) + cos^2(X) == 1\n"
   "   sin(2 * X) == 2 * sin(X) * cos(X)" );
   Console::WriteLine( "   cos(2 * X) == cos^2(X) - sin^2(X)" );
   UseSineCosine( 15.0 );
   UseSineCosine( 30.0 );
   UseSineCosine( 45.0 );
   Console::WriteLine( "\nConvert selected values for X and Y to radians \n"
   "and evaluate these trigonometric identities:" );
   Console::WriteLine( "   sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y)" );
   Console::WriteLine( "   cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y)" );
   UseTwoAngles( 15.0, 30.0 );
   UseTwoAngles( 30.0, 45.0 );
}

/*
This example of trigonometric Math::Sin( double ) and Math::Cos( double )
generates the following output.

Convert selected values for X to radians
and evaluate these trigonometric identities:
   sin^2(X) + cos^2(X) == 1
   sin(2 * X) == 2 * sin(X) * cos(X)
   cos(2 * X) == cos^2(X) - sin^2(X)

                            Math::Sin(15 deg) == 2.5881904510252074E-001
                            Math::Cos(15 deg) == 9.6592582628906831E-001
(Math::Sin(15 deg))^2 + (Math::Cos(15 deg))^2 == 1.0000000000000000E+000
                            Math::Sin(30 deg) == 4.9999999999999994E-001
    2 * Math::Sin(15 deg) * Math::Cos(15 deg) == 4.9999999999999994E-001
                            Math::Cos(30 deg) == 8.6602540378443871E-001
(Math::Cos(15 deg))^2 - (Math::Sin(15 deg))^2 == 8.6602540378443871E-001

                            Math::Sin(30 deg) == 4.9999999999999994E-001
                            Math::Cos(30 deg) == 8.6602540378443871E-001
(Math::Sin(30 deg))^2 + (Math::Cos(30 deg))^2 == 1.0000000000000000E+000
                            Math::Sin(60 deg) == 8.6602540378443860E-001
    2 * Math::Sin(30 deg) * Math::Cos(30 deg) == 8.6602540378443860E-001
                            Math::Cos(60 deg) == 5.0000000000000011E-001
(Math::Cos(30 deg))^2 - (Math::Sin(30 deg))^2 == 5.0000000000000022E-001

                            Math::Sin(45 deg) == 7.0710678118654746E-001
                            Math::Cos(45 deg) == 7.0710678118654757E-001
(Math::Sin(45 deg))^2 + (Math::Cos(45 deg))^2 == 1.0000000000000000E+000
                            Math::Sin(90 deg) == 1.0000000000000000E+000
    2 * Math::Sin(45 deg) * Math::Cos(45 deg) == 1.0000000000000000E+000
                            Math::Cos(90 deg) == 6.1230317691118863E-017
(Math::Cos(45 deg))^2 - (Math::Sin(45 deg))^2 == 2.2204460492503131E-016

Convert selected values for X and Y to radians
and evaluate these trigonometric identities:
   sin(X + Y) == sin(X) * cos(Y) + cos(X) * sin(Y)
   cos(X + Y) == cos(X) * cos(Y) - sin(X) * sin(Y)

        Math::Sin(15 deg) * Math::Cos(30 deg) +
        Math::Cos(15 deg) * Math::Sin(30 deg) == 7.0710678118654746E-001
                            Math::Sin(45 deg) == 7.0710678118654746E-001
        Math::Cos(15 deg) * Math::Cos(30 deg) -
        Math::Sin(15 deg) * Math::Sin(30 deg) == 7.0710678118654757E-001
                            Math::Cos(45 deg) == 7.0710678118654757E-001

        Math::Sin(30 deg) * Math::Cos(45 deg) +
        Math::Cos(30 deg) * Math::Sin(45 deg) == 9.6592582628906831E-001
                            Math::Sin(75 deg) == 9.6592582628906820E-001
        Math::Cos(30 deg) * Math::Cos(45 deg) -
        Math::Sin(30 deg) * Math::Sin(45 deg) == 2.5881904510252085E-001
                            Math::Cos(75 deg) == 2.5881904510252096E-001
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Sinh 方法

Math
.
.
::
.
Sinh 方法
Math 类

返回指定角度的双曲正弦值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Sinh ( _
    value As Double _
) As Double
public static double Sinh(
    double value
)
public:
static double Sinh(
    double value
)
static member Sinh :
        value:float -> float

参数

value
类型： System Double
以弧度为单位的角。

返回值

类型： System Double
value 的双曲正弦值。如果 value 等于 NegativeInfinity、PositiveInfinity 或 NaN，则此方法返回等于 value 的 Double。 value 的双曲正弦值。如果 value 等于 NegativeInfinity、PositiveInfinity 或 NaN，则此方法返回等于 value 的 Double。

角度 value 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。 角度 value 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。

下面的示例使用 Sinh 计算所选值的特定双曲线恒等式。

' Example for the hyperbolic Math.Sinh( Double ) and Math.Cosh( Double ) methods.
Imports System
Imports Microsoft.VisualBasic

Module SinhCosh

    Sub Main()
        Console.WriteLine( _
            "This example of hyperbolic " & _
            "Math.Sinh( Double ) and Math.Cosh( Double )" & vbCrLf & _
            "generates the following output." & vbCrLf)
        Console.WriteLine( _
            "Evaluate these hyperbolic identities " & _
            "with selected values for X:")
        Console.WriteLine( _
            "   cosh^2(X) - sinh^2(X) = 1" & vbCrLf & _
            "   sinh(2 * X) = 2 * sinh(X) * cosh(X)")
        Console.WriteLine("   cosh(2 * X) = cosh^2(X) + sinh^2(X)")

        UseSinhCosh(0.1)
        UseSinhCosh(1.2)
        UseSinhCosh(4.9)

        Console.WriteLine( _
            vbCrLf & "Evaluate these hyperbolic " & _
            "identities with selected values for X and Y:")
        Console.WriteLine( _
            "   sinh(X + Y) = sinh(X) * cosh(Y) + cosh(X) * sinh(Y)")
        Console.WriteLine( _
            "   cosh(X + Y) = cosh(X) * cosh(Y) + sinh(X) * sinh(Y)")

        UseTwoArgs(0.1, 1.2)
        UseTwoArgs(1.2, 4.9)
    End Sub 'Main

    ' Evaluate hyperbolic identities with a given argument.
    Sub UseSinhCosh(arg As Double)
        Dim sinhArg As Double = Math.Sinh(arg)
        Dim coshArg As Double = Math.Cosh(arg)

        ' Evaluate cosh^2(X) - sinh^2(X) = 1.
        Console.WriteLine( _
            vbCrLf & "                         Math.Sinh({0}) = {1:E16}" + _
            vbCrLf & "                         Math.Cosh({0}) = {2:E16}", _
            arg, Math.Sinh(arg), Math.Cosh(arg))
        Console.WriteLine( _
            "(Math.Cosh({0}))^2 - (Math.Sinh({0}))^2 = {1:E16}", _
            arg, coshArg * coshArg - sinhArg * sinhArg)

        ' Evaluate sinh(2 * X) = 2 * sinh(X) * cosh(X).
        Console.WriteLine( _
            "                         Math.Sinh({0}) = {1:E16}", _
            2.0 * arg, Math.Sinh((2.0 * arg)))
        Console.WriteLine( _
            "    2 * Math.Sinh({0}) * Math.Cosh({0}) = {1:E16}", _
            arg, 2.0 * sinhArg * coshArg)

        ' Evaluate cosh(2 * X) = cosh^2(X) + sinh^2(X).
        Console.WriteLine( _
            "                         Math.Cosh({0}) = {1:E16}", _
            2.0 * arg, Math.Cosh((2.0 * arg)))
        Console.WriteLine( _
            "(Math.Cosh({0}))^2 + (Math.Sinh({0}))^2 = {1:E16}", _
            arg, coshArg * coshArg + sinhArg * sinhArg)

    End Sub 'UseSinhCosh

    ' Evaluate hyperbolic identities that are functions of two arguments.
    Sub UseTwoArgs(argX As Double, argY As Double)

        ' Evaluate sinh(X + Y) = sinh(X) * cosh(Y) + cosh(X) * sinh(Y).
        Console.WriteLine( _
            vbCrLf & "        Math.Sinh({0}) * Math.Cosh({1}) +" + _
            vbCrLf & "        Math.Cosh({0}) * Math.Sinh({1}) = {2:E16}", _
            argX, argY, Math.Sinh(argX) * Math.Cosh(argY) + _
            Math.Cosh(argX) * Math.Sinh(argY))
        Console.WriteLine( _
            "                         Math.Sinh({0}) = {1:E16}", _
            argX + argY, Math.Sinh((argX + argY)))

        ' Evaluate cosh(X + Y) = cosh(X) * cosh(Y) + sinh(X) * sinh(Y).
        Console.WriteLine( _
            "        Math.Cosh({0}) * Math.Cosh({1}) +" + _
            vbCrLf & "        Math.Sinh({0}) * Math.Sinh({1}) = {2:E16}", _
            argX, argY, Math.Cosh(argX) * Math.Cosh(argY) + _
            Math.Sinh(argX) * Math.Sinh(argY))
        Console.WriteLine( _
            "                         Math.Cosh({0}) = {1:E16}", _
            argX + argY, Math.Cosh((argX + argY)))

    End Sub 'UseTwoArgs
End Module 'SinhCosh

' This example of hyperbolic Math.Sinh( Double ) and Math.Cosh( Double )
' generates the following output.
'
' Evaluate these hyperbolic identities with selected values for X:
'    cosh^2(X) - sinh^2(X) = 1
'    sinh(2 * X) = 2 * sinh(X) * cosh(X)
'    cosh(2 * X) = cosh^2(X) + sinh^2(X)
'
'                          Math.Sinh(0.1) = 1.0016675001984403E-001
'                          Math.Cosh(0.1) = 1.0050041680558035E+000
' (Math.Cosh(0.1))^2 - (Math.Sinh(0.1))^2 = 9.9999999999999989E-001
'                          Math.Sinh(0.2) = 2.0133600254109399E-001
'     2 * Math.Sinh(0.1) * Math.Cosh(0.1) = 2.0133600254109396E-001
'                          Math.Cosh(0.2) = 1.0200667556190759E+000
' (Math.Cosh(0.1))^2 + (Math.Sinh(0.1))^2 = 1.0200667556190757E+000
'
'                          Math.Sinh(1.2) = 1.5094613554121725E+000
'                          Math.Cosh(1.2) = 1.8106555673243747E+000
' (Math.Cosh(1.2))^2 - (Math.Sinh(1.2))^2 = 1.0000000000000000E+000
'                          Math.Sinh(2.4) = 5.4662292136760939E+000
'     2 * Math.Sinh(1.2) * Math.Cosh(1.2) = 5.4662292136760939E+000
'                          Math.Cosh(2.4) = 5.5569471669655064E+000
' (Math.Cosh(1.2))^2 + (Math.Sinh(1.2))^2 = 5.5569471669655064E+000
'
'                          Math.Sinh(4.9) = 6.7141166550932297E+001
'                          Math.Cosh(4.9) = 6.7148613134003227E+001
' (Math.Cosh(4.9))^2 - (Math.Sinh(4.9))^2 = 1.0000000000000000E+000
'                          Math.Sinh(9.8) = 9.0168724361884615E+003
'     2 * Math.Sinh(4.9) * Math.Cosh(4.9) = 9.0168724361884615E+003
'                          Math.Cosh(9.8) = 9.0168724916400624E+003
' (Math.Cosh(4.9))^2 + (Math.Sinh(4.9))^2 = 9.0168724916400606E+003
'
' Evaluate these hyperbolic identities with selected values for X and Y:
'    sinh(X + Y) = sinh(X) * cosh(Y) + cosh(X) * sinh(Y)
'    cosh(X + Y) = cosh(X) * cosh(Y) + sinh(X) * sinh(Y)
'
'         Math.Sinh(0.1) * Math.Cosh(1.2) +
'         Math.Cosh(0.1) * Math.Sinh(1.2) = 1.6983824372926155E+000
'                          Math.Sinh(1.3) = 1.6983824372926160E+000
'         Math.Cosh(0.1) * Math.Cosh(1.2) +
'         Math.Sinh(0.1) * Math.Sinh(1.2) = 1.9709142303266281E+000
'                          Math.Cosh(1.3) = 1.9709142303266285E+000
'
'         Math.Sinh(1.2) * Math.Cosh(4.9) +
'         Math.Cosh(1.2) * Math.Sinh(4.9) = 2.2292776360739879E+002
'                          Math.Sinh(6.1) = 2.2292776360739885E+002
'         Math.Cosh(1.2) * Math.Cosh(4.9) +
'         Math.Sinh(1.2) * Math.Sinh(4.9) = 2.2293000647511826E+002
'                          Math.Cosh(6.1) = 2.2293000647511832E+002

// Example for the hyperbolic Math.Sinh( double )
// and Math.Cosh( double ) methods.
using System;

class SinhCosh
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of hyperbolic Math.Sinh( double ) " +
            "and Math.Cosh( double )\n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Evaluate these hyperbolic identities " +
            "with selected values for X:" );
        Console.WriteLine(
            "   cosh^2(X) - sinh^2(X) == 1\n" +
            "   sinh(2 * X) == 2 * sinh(X) * cosh(X)" );
        Console.WriteLine( "   cosh(2 * X) == cosh^2(X) + sinh^2(X)" );

        UseSinhCosh(0.1);
        UseSinhCosh(1.2);
        UseSinhCosh(4.9);

        Console.WriteLine(
            "\nEvaluate these hyperbolic identities " +
            "with selected values for X and Y:" );
        Console.WriteLine(
            "   sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y)" );
        Console.WriteLine(
            "   cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y)" );

        UseTwoArgs(0.1, 1.2);
        UseTwoArgs(1.2, 4.9);
    }

    // Evaluate hyperbolic identities with a given argument.
    static void UseSinhCosh(double arg)
    {
        double sinhArg = Math.Sinh(arg);
        double coshArg = Math.Cosh(arg);

        // Evaluate cosh^2(X) - sinh^2(X) == 1.
        Console.WriteLine(
            "\n                         Math.Sinh({0}) == {1:E16}\n" +
            "                         Math.Cosh({0}) == {2:E16}",
            arg, Math.Sinh(arg), Math.Cosh(arg) );
        Console.WriteLine(
            "(Math.Cosh({0}))^2 - (Math.Sinh({0}))^2 == {1:E16}",
            arg, coshArg * coshArg - sinhArg * sinhArg );

        // Evaluate sinh(2 * X) == 2 * sinh(X) * cosh(X).
        Console.WriteLine(
            "                         Math.Sinh({0}) == {1:E16}",
            2.0 * arg, Math.Sinh(2.0 * arg) );
        Console.WriteLine(
            "    2 * Math.Sinh({0}) * Math.Cosh({0}) == {1:E16}",
            arg, 2.0 * sinhArg * coshArg );

        // Evaluate cosh(2 * X) == cosh^2(X) + sinh^2(X).
        Console.WriteLine(
            "                         Math.Cosh({0}) == {1:E16}",
            2.0 * arg, Math.Cosh(2.0 * arg) );
        Console.WriteLine(
            "(Math.Cosh({0}))^2 + (Math.Sinh({0}))^2 == {1:E16}",
            arg, coshArg * coshArg + sinhArg * sinhArg );
    }

    // Evaluate hyperbolic identities that are functions of two arguments.
    static void UseTwoArgs(double argX, double argY)
    {
        // Evaluate sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y).
        Console.WriteLine(
            "\n        Math.Sinh({0}) * Math.Cosh({1}) +\n" +
            "        Math.Cosh({0}) * Math.Sinh({1}) == {2:E16}",
            argX, argY, Math.Sinh(argX) * Math.Cosh(argY) +
            Math.Cosh(argX) * Math.Sinh(argY));
        Console.WriteLine(
            "                         Math.Sinh({0}) == {1:E16}",
            argX + argY, Math.Sinh(argX + argY));

        // Evaluate cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y).
        Console.WriteLine(
            "        Math.Cosh({0}) * Math.Cosh({1}) +\n" +
            "        Math.Sinh({0}) * Math.Sinh({1}) == {2:E16}",
            argX, argY, Math.Cosh(argX) * Math.Cosh(argY) +
            Math.Sinh(argX) * Math.Sinh(argY));
        Console.WriteLine(
            "                         Math.Cosh({0}) == {1:E16}",
            argX + argY, Math.Cosh(argX + argY));
    }
}

/*
This example of hyperbolic Math.Sinh( double ) and Math.Cosh( double )
generates the following output.

Evaluate these hyperbolic identities with selected values for X:
   cosh^2(X) - sinh^2(X) == 1
   sinh(2 * X) == 2 * sinh(X) * cosh(X)
   cosh(2 * X) == cosh^2(X) + sinh^2(X)

                         Math.Sinh(0.1) == 1.0016675001984403E-001
                         Math.Cosh(0.1) == 1.0050041680558035E+000
(Math.Cosh(0.1))^2 - (Math.Sinh(0.1))^2 == 9.9999999999999989E-001
                         Math.Sinh(0.2) == 2.0133600254109399E-001
    2 * Math.Sinh(0.1) * Math.Cosh(0.1) == 2.0133600254109396E-001
                         Math.Cosh(0.2) == 1.0200667556190759E+000
(Math.Cosh(0.1))^2 + (Math.Sinh(0.1))^2 == 1.0200667556190757E+000

                         Math.Sinh(1.2) == 1.5094613554121725E+000
                         Math.Cosh(1.2) == 1.8106555673243747E+000
(Math.Cosh(1.2))^2 - (Math.Sinh(1.2))^2 == 1.0000000000000000E+000
                         Math.Sinh(2.4) == 5.4662292136760939E+000
    2 * Math.Sinh(1.2) * Math.Cosh(1.2) == 5.4662292136760939E+000
                         Math.Cosh(2.4) == 5.5569471669655064E+000
(Math.Cosh(1.2))^2 + (Math.Sinh(1.2))^2 == 5.5569471669655064E+000

                         Math.Sinh(4.9) == 6.7141166550932297E+001
                         Math.Cosh(4.9) == 6.7148613134003227E+001
(Math.Cosh(4.9))^2 - (Math.Sinh(4.9))^2 == 1.0000000000000000E+000
                         Math.Sinh(9.8) == 9.0168724361884615E+003
    2 * Math.Sinh(4.9) * Math.Cosh(4.9) == 9.0168724361884615E+003
                         Math.Cosh(9.8) == 9.0168724916400624E+003
(Math.Cosh(4.9))^2 + (Math.Sinh(4.9))^2 == 9.0168724916400606E+003

Evaluate these hyperbolic identities with selected values for X and Y:
   sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y)
   cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y)

        Math.Sinh(0.1) * Math.Cosh(1.2) +
        Math.Cosh(0.1) * Math.Sinh(1.2) == 1.6983824372926155E+000
                         Math.Sinh(1.3) == 1.6983824372926160E+000
        Math.Cosh(0.1) * Math.Cosh(1.2) +
        Math.Sinh(0.1) * Math.Sinh(1.2) == 1.9709142303266281E+000
                         Math.Cosh(1.3) == 1.9709142303266285E+000

        Math.Sinh(1.2) * Math.Cosh(4.9) +
        Math.Cosh(1.2) * Math.Sinh(4.9) == 2.2292776360739879E+002
                         Math.Sinh(6.1) == 2.2292776360739885E+002
        Math.Cosh(1.2) * Math.Cosh(4.9) +
        Math.Sinh(1.2) * Math.Sinh(4.9) == 2.2293000647511826E+002
                         Math.Cosh(6.1) == 2.2293000647511832E+002
*/

// Example for the hyperbolic Math.Sinh( double )
// and Math.Cosh( double ) methods.
using namespace System;

// Evaluate hyperbolic identities with a given argument.
void UseSinhCosh( double arg )
{
   double sinhArg = Math::Sinh( arg );
   double coshArg = Math::Cosh( arg );

   // Evaluate cosh^2(X) - sinh^2(X) == 1.
   Console::WriteLine( "\n                          Math::Sinh({0}) == {1:E16}\n"
   "                          Math::Cosh({0}) == {2:E16}", arg, Math::Sinh( arg ), Math::Cosh( arg ) );
   Console::WriteLine( "(Math::Cosh({0}))^2 - (Math::Sinh({0}))^2 == {1:E16}", arg, coshArg * coshArg - sinhArg * sinhArg );

   // Evaluate sinh(2 * X) == 2 * sinh(X) * cosh(X).
   Console::WriteLine( "                          Math::Sinh({0}) == {1:E16}", 2.0 * arg, Math::Sinh( 2.0 * arg ) );
   Console::WriteLine( "    2 * Math::Sinh({0}) * Math::Cosh({0}) == {1:E16}", arg, 2.0 * sinhArg * coshArg );

   // Evaluate cosh(2 * X) == cosh^2(X) + sinh^2(X).
   Console::WriteLine( "                          Math::Cosh({0}) == {1:E16}", 2.0 * arg, Math::Cosh( 2.0 * arg ) );
   Console::WriteLine( "(Math::Cosh({0}))^2 + (Math::Sinh({0}))^2 == {1:E16}", arg, coshArg * coshArg + sinhArg * sinhArg );
}

// Evaluate hyperbolic identities that are functions of two arguments.
void UseTwoArgs( double argX, double argY )
{

   // Evaluate sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y).
   Console::WriteLine( "\n        Math::Sinh({0}) * Math::Cosh({1}) +\n"
   "        Math::Cosh({0}) * Math::Sinh({1}) == {2:E16}", argX, argY, Math::Sinh( argX ) * Math::Cosh( argY ) + Math::Cosh( argX ) * Math::Sinh( argY ) );
   Console::WriteLine( "                          Math::Sinh({0}) == {1:E16}", argX + argY, Math::Sinh( argX + argY ) );

   // Evaluate cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y).
   Console::WriteLine( "        Math::Cosh({0}) * Math::Cosh({1}) +\n"
   "        Math::Sinh({0}) * Math::Sinh({1}) == {2:E16}", argX, argY, Math::Cosh( argX ) * Math::Cosh( argY ) + Math::Sinh( argX ) * Math::Sinh( argY ) );
   Console::WriteLine( "                          Math::Cosh({0}) == {1:E16}", argX + argY, Math::Cosh( argX + argY ) );
}

int main()
{
   Console::WriteLine( "This example of hyperbolic "
   "Math::Sinh( double ) and Math::Cosh( double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "Evaluate these hyperbolic identities "
   "with selected values for X:" );
   Console::WriteLine( "   cosh^2(X) - sinh^2(X) == 1\n"
   "   sinh(2 * X) == 2 * sinh(X) * cosh(X)" );
   Console::WriteLine( "   cosh(2 * X) == cosh^2(X) + sinh^2(X)" );
   UseSinhCosh( 0.1 );
   UseSinhCosh( 1.2 );
   UseSinhCosh( 4.9 );
   Console::WriteLine( "\nEvaluate these hyperbolic identities "
   "with selected values for X and Y:" );
   Console::WriteLine( "   sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y)" );
   Console::WriteLine( "   cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y)" );
   UseTwoArgs( 0.1, 1.2 );
   UseTwoArgs( 1.2, 4.9 );
}

/*
This example of hyperbolic Math::Sinh( double ) and Math::Cosh( double )
generates the following output.

Evaluate these hyperbolic identities with selected values for X:
   cosh^2(X) - sinh^2(X) == 1
   sinh(2 * X) == 2 * sinh(X) * cosh(X)
   cosh(2 * X) == cosh^2(X) + sinh^2(X)

                          Math::Sinh(0.1) == 1.0016675001984403E-001
                          Math::Cosh(0.1) == 1.0050041680558035E+000
(Math::Cosh(0.1))^2 - (Math::Sinh(0.1))^2 == 9.9999999999999989E-001
                          Math::Sinh(0.2) == 2.0133600254109399E-001
    2 * Math::Sinh(0.1) * Math::Cosh(0.1) == 2.0133600254109396E-001
                          Math::Cosh(0.2) == 1.0200667556190759E+000
(Math::Cosh(0.1))^2 + (Math::Sinh(0.1))^2 == 1.0200667556190757E+000

                          Math::Sinh(1.2) == 1.5094613554121725E+000
                          Math::Cosh(1.2) == 1.8106555673243747E+000
(Math::Cosh(1.2))^2 - (Math::Sinh(1.2))^2 == 1.0000000000000000E+000
                          Math::Sinh(2.4) == 5.4662292136760939E+000
    2 * Math::Sinh(1.2) * Math::Cosh(1.2) == 5.4662292136760939E+000
                          Math::Cosh(2.4) == 5.5569471669655064E+000
(Math::Cosh(1.2))^2 + (Math::Sinh(1.2))^2 == 5.5569471669655064E+000

                          Math::Sinh(4.9) == 6.7141166550932297E+001
                          Math::Cosh(4.9) == 6.7148613134003227E+001
(Math::Cosh(4.9))^2 - (Math::Sinh(4.9))^2 == 1.0000000000000000E+000
                          Math::Sinh(9.8) == 9.0168724361884615E+003
    2 * Math::Sinh(4.9) * Math::Cosh(4.9) == 9.0168724361884615E+003
                          Math::Cosh(9.8) == 9.0168724916400624E+003
(Math::Cosh(4.9))^2 + (Math::Sinh(4.9))^2 == 9.0168724916400606E+003

Evaluate these hyperbolic identities with selected values for X and Y:
   sinh(X + Y) == sinh(X) * cosh(Y) + cosh(X) * sinh(Y)
   cosh(X + Y) == cosh(X) * cosh(Y) + sinh(X) * sinh(Y)

        Math::Sinh(0.1) * Math::Cosh(1.2) +
        Math::Cosh(0.1) * Math::Sinh(1.2) == 1.6983824372926155E+000
                          Math::Sinh(1.3) == 1.6983824372926160E+000
        Math::Cosh(0.1) * Math::Cosh(1.2) +
        Math::Sinh(0.1) * Math::Sinh(1.2) == 1.9709142303266281E+000
                          Math::Cosh(1.3) == 1.9709142303266285E+000

        Math::Sinh(1.2) * Math::Cosh(4.9) +
        Math::Cosh(1.2) * Math::Sinh(4.9) == 2.2292776360739879E+002
                          Math::Sinh(6.1) == 2.2292776360739885E+002
        Math::Cosh(1.2) * Math::Cosh(4.9) +
        Math::Sinh(1.2) * Math::Sinh(4.9) == 2.2293000647511826E+002
                          Math::Cosh(6.1) == 2.2293000647511832E+002
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Sqrt 方法

Math
.
.
::
.
Sqrt 方法
Math 类

返回指定数字的平方根。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Sqrt ( _ d As Double _ ) As Double
public static double Sqrt( double d )
public: static double Sqrt( double d )
static member Sqrt : d:float -> float
参数
d
类型： System Double
数字。
返回值
类型： System Double
下表中的值之一。
d
参数
返回值
零或正数
d
的正平方根。
负
NaN
等于
NaN
NaN
等于
PositiveInfinity
PositiveInfinity

下面的示例使用 Sqrt 来帮助计算给定梯形的内角。

'The following class represents simple functionality of the trapezoid.
Class MathTrapezoidSample

    Private m_longBase As Double
    Private m_shortBase As Double
    Private m_leftLeg As Double
    Private m_rightLeg As Double

    Public Sub New(ByVal longbase As Double, ByVal shortbase As Double, ByVal leftLeg As Double, ByVal rightLeg As Double)
        m_longBase = Math.Abs(longbase)
        m_shortBase = Math.Abs(shortbase)
        m_leftLeg = Math.Abs(leftLeg)
        m_rightLeg = Math.Abs(rightLeg)
    End Sub

    Private Function GetRightSmallBase() As Double
        GetRightSmallBase = (Math.Pow(m_rightLeg, 2) - Math.Pow(m_leftLeg, 2) + Math.Pow(m_longBase, 2) + Math.Pow(m_shortBase, 2) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase))
    End Function

    Public Function GetHeight() As Double
        Dim x As Double = GetRightSmallBase()
        GetHeight = Math.Sqrt(Math.Pow(m_rightLeg, 2) - Math.Pow(x, 2))
    End Function

    Public Function GetSquare() As Double
        GetSquare = GetHeight() * m_longBase / 2
    End Function

    Public Function GetLeftBaseRadianAngle() As Double
        Dim sinX As Double = GetHeight() / m_leftLeg
        GetLeftBaseRadianAngle = Math.Round(Math.Asin(sinX), 2)
    End Function

    Public Function GetRightBaseRadianAngle() As Double
        Dim x As Double = GetRightSmallBase()
        Dim cosX As Double = (Math.Pow(m_rightLeg, 2) + Math.Pow(x, 2) - Math.Pow(GetHeight(), 2)) / (2 * x * m_rightLeg)
        GetRightBaseRadianAngle = Math.Round(Math.Acos(cosX), 2)
    End Function

    Public Function GetLeftBaseDegreeAngle() As Double
        Dim x As Double = GetLeftBaseRadianAngle() * 180 / Math.PI
        GetLeftBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Function GetRightBaseDegreeAngle() As Double
        Dim x As Double = GetRightBaseRadianAngle() * 180 / Math.PI
        GetRightBaseDegreeAngle = Math.Round(x, 2)
    End Function

    Public Shared Sub Main()
        Dim trpz As MathTrapezoidSample = New MathTrapezoidSample(20, 10, 8, 6)
        Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0")
        Dim h As Double = trpz.GetHeight()
        Console.WriteLine("Trapezoid height is: " + h.ToString())
        Dim dxR As Double = trpz.GetLeftBaseRadianAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians")
        Dim dyR As Double = trpz.GetRightBaseRadianAngle()
        Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians")
        Dim dxD As Double = trpz.GetLeftBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees")
        Dim dyD As Double = trpz.GetRightBaseDegreeAngle()
        Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees")
    End Sub

End Class

    /// <summary>
    /// The following class represents simple functionality of the trapezoid.
    /// </summary>
    class MathTrapezoidSample
    {
        private double m_longBase;
        private double m_shortBase;
        private double m_leftLeg;
        private double m_rightLeg;

        public MathTrapezoidSample(double longbase, double shortbase, double leftLeg, double rightLeg)
        {
            m_longBase = Math.Abs(longbase);
            m_shortBase = Math.Abs(shortbase);
            m_leftLeg = Math.Abs(leftLeg);
            m_rightLeg = Math.Abs(rightLeg);
        }

        private double GetRightSmallBase()
        {
            return (Math.Pow(m_rightLeg,2.0) - Math.Pow(m_leftLeg,2.0) + Math.Pow(m_longBase,2.0) + Math.Pow(m_shortBase,2.0) - 2* m_shortBase * m_longBase)/ (2*(m_longBase - m_shortBase));
        }

        public double GetHeight()
        {
            double x = GetRightSmallBase();
            return Math.Sqrt(Math.Pow(m_rightLeg,2.0) - Math.Pow(x,2.0));
        }

        public double GetSquare()
        {
            return GetHeight() * m_longBase / 2.0;
        }

        public double GetLeftBaseRadianAngle()
        {
            double sinX = GetHeight()/m_leftLeg;
            return Math.Round(Math.Asin(sinX),2);
        }

        public double GetRightBaseRadianAngle()
        {
            double x = GetRightSmallBase();
            double cosX = (Math.Pow(m_rightLeg,2.0) + Math.Pow(x,2.0) - Math.Pow(GetHeight(),2.0))/(2*x*m_rightLeg);
            return Math.Round(Math.Acos(cosX),2);
        }

        public double GetLeftBaseDegreeAngle()
        {
            double x = GetLeftBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        public double GetRightBaseDegreeAngle()
        {
            double x = GetRightBaseRadianAngle() * 180/ Math.PI;
            return Math.Round(x,2);
        }

        static void Main(string[] args)
        {
            MathTrapezoidSample trpz = new MathTrapezoidSample(20.0, 10.0, 8.0, 6.0);
            Console.WriteLine("The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0");
            double h = trpz.GetHeight();
            Console.WriteLine("Trapezoid height is: " + h.ToString());
            double dxR = trpz.GetLeftBaseRadianAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxR.ToString() + " Radians");
            double dyR = trpz.GetRightBaseRadianAngle();
            Console.WriteLine("Trapezoid right base angle is: " + dyR.ToString() + " Radians");
            double dxD = trpz.GetLeftBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dxD.ToString() + " Degrees");
            double dyD = trpz.GetRightBaseDegreeAngle();
            Console.WriteLine("Trapezoid left base angle is: " + dyD.ToString() + " Degrees");
        }
    }

/// <summary>
/// The following class represents simple functionality of the trapezoid.
/// </summary>
public ref class MathTrapezoidSample
{
private:
   double m_longBase;
   double m_shortBase;
   double m_leftLeg;
   double m_rightLeg;

public:
   MathTrapezoidSample( double longbase, double shortbase, double leftLeg, double rightLeg )
   {
      m_longBase = Math::Abs( longbase );
      m_shortBase = Math::Abs( shortbase );
      m_leftLeg = Math::Abs( leftLeg );
      m_rightLeg = Math::Abs( rightLeg );
   }

private:
   double GetRightSmallBase()
   {
      return (Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( m_leftLeg, 2.0 ) + Math::Pow( m_longBase, 2.0 ) + Math::Pow( m_shortBase, 2.0 ) - 2 * m_shortBase * m_longBase) / (2 * (m_longBase - m_shortBase));
   }

public:
   double GetHeight()
   {
      double x = GetRightSmallBase();
      return Math::Sqrt( Math::Pow( m_rightLeg, 2.0 ) - Math::Pow( x, 2.0 ) );
   }

   double GetSquare()
   {
      return GetHeight() * m_longBase / 2.0;
   }

   double GetLeftBaseRadianAngle()
   {
      double sinX = GetHeight() / m_leftLeg;
      return Math::Round( Math::Asin( sinX ), 2 );
   }

   double GetRightBaseRadianAngle()
   {
      double x = GetRightSmallBase();
      double cosX = (Math::Pow( m_rightLeg, 2.0 ) + Math::Pow( x, 2.0 ) - Math::Pow( GetHeight(), 2.0 )) / (2 * x * m_rightLeg);
      return Math::Round( Math::Acos( cosX ), 2 );
   }

   double GetLeftBaseDegreeAngle()
   {
      double x = GetLeftBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

   double GetRightBaseDegreeAngle()
   {
      double x = GetRightBaseRadianAngle() * 180 / Math::PI;
      return Math::Round( x, 2 );
   }

};

int main()
{
   MathTrapezoidSample^ trpz = gcnew MathTrapezoidSample( 20.0,10.0,8.0,6.0 );
   Console::WriteLine( "The trapezoid's bases are 20.0 and 10.0, the trapezoid's legs are 8.0 and 6.0" );
   double h = trpz->GetHeight();
   Console::WriteLine( "Trapezoid height is: {0}", h.ToString() );
   double dxR = trpz->GetLeftBaseRadianAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Radians", dxR.ToString() );
   double dyR = trpz->GetRightBaseRadianAngle();
   Console::WriteLine( "Trapezoid right base angle is: {0} Radians", dyR.ToString() );
   double dxD = trpz->GetLeftBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dxD.ToString() );
   double dyD = trpz->GetRightBaseDegreeAngle();
   Console::WriteLine( "Trapezoid left base angle is: {0} Degrees", dyD.ToString() );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Tan 方法

Math
.
.
::
.
Tan 方法
Math 类

返回指定角度的正切值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Tan ( _
    a As Double _
) As Double
public static double Tan(
    double a
)
public:
static double Tan(
    double a
)
static member Tan :
        a:float -> float

参数

a
类型： System Double
以弧度为单位的角。

返回值

类型： System Double
a 的正切值。如果 a 等于 NaN、NegativeInfinity 或 PositiveInfinity，此方法将返回 NaN。 a 的正切值。如果 a 等于 NaN、NegativeInfinity 或 PositiveInfinity，此方法将返回 NaN。

角度 a 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。 角度 a 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。

下面的示例演示如何计算一个角的正切并将其显示在控制台中。

' This example demonstrates Math.Atan()
'                           Math.Atan2()
'                           Math.Tan()
Imports System

Class Sample
   Public Shared Sub Main()
      Dim x As Double = 1.0
      Dim y As Double = 2.0
      Dim angle As Double
      Dim radians As Double
      Dim result As Double

      ' Calculate the tangent of 30 degrees.
      angle = 30
      radians = angle *(Math.PI / 180)
      result = Math.Tan(radians)
      Console.WriteLine("The tangent of 30 degrees is {0}.", result)

      ' Calculate the arctangent of the previous tangent.
      radians = Math.Atan(result)
      angle = radians *(180 / Math.PI)
      Console.WriteLine("The previous tangent is equivalent to {0} degrees.", angle)

      ' Calculate the arctangent of an angle.
      Dim line1 As [String] = "{0}The arctangent of the angle formed by the x-axis and "
      Dim line2 As [String] = "a vector to point ({0},{1}) is {2}, "
      Dim line3 As [String] = "which is equivalent to {0} degrees."

      radians = Math.Atan2(y, x)
      angle = radians *(180 / Math.PI)

      Console.WriteLine(line1, Environment.NewLine)
      Console.WriteLine(line2, x, y, radians)
      Console.WriteLine(line3, angle)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'The tangent of 30 degrees is 0.577350269189626.
'The previous tangent is equivalent to 30 degrees.
'
'The arctangent of the angle formed by the x-axis and
'a vector to point (1,2) is 1.10714871779409,
'which is equivalent to 63.434948822922 degrees.
'

// This example demonstrates Math.Atan()
//                           Math.Atan2()
//                           Math.Tan()
using System;

class Sample
{
    public static void Main()
    {
    double x = 1.0;
    double y = 2.0;
    double angle;
    double radians;
    double result;

// Calculate the tangent of 30 degrees.
    angle = 30;
    radians = angle * (Math.PI/180);
    result = Math.Tan(radians);
    Console.WriteLine("The tangent of 30 degrees is {0}.", result);

// Calculate the arctangent of the previous tangent.
    radians = Math.Atan(result);
    angle = radians * (180/Math.PI);
    Console.WriteLine("The previous tangent is equivalent to {0} degrees.", angle);

// Calculate the arctangent of an angle.
    String line1 = "{0}The arctangent of the angle formed by the x-axis and ";
    String line2 = "a vector to point ({0},{1}) is {2}, ";
    String line3 = "which is equivalent to {0} degrees.";

    radians = Math.Atan2(y, x);
    angle = radians * (180/Math.PI);

    Console.WriteLine(line1, Environment.NewLine);
    Console.WriteLine(line2, x, y, radians);
    Console.WriteLine(line3, angle);
    }
}
/*
This example produces the following results:

The tangent of 30 degrees is 0.577350269189626.
The previous tangent is equivalent to 30 degrees.

The arctangent of the angle formed by the x-axis and
a vector to point (1,2) is 1.10714871779409,
which is equivalent to 63.434948822922 degrees.
*/

// This example demonstrates Math.Atan()
//                           Math.Atan2()
//                           Math.Tan()
using namespace System;
int main()
{
   double x = 1.0;
   double y = 2.0;
   double angle;
   double radians;
   double result;

   // Calculate the tangent of 30 degrees.
   angle = 30;
   radians = angle * (Math::PI / 180);
   result = Math::Tan( radians );
   Console::WriteLine( "The tangent of 30 degrees is {0}.", result );

   // Calculate the arctangent of the previous tangent.
   radians = Math::Atan( result );
   angle = radians * (180 / Math::PI);
   Console::WriteLine( "The previous tangent is equivalent to {0} degrees.", angle );

   // Calculate the arctangent of an angle.
   String^ line1 = "{0}The arctangent of the angle formed by the x-axis and ";
   String^ line2 = "a vector to point ({0},{1}) is {2}, ";
   String^ line3 = "which is equivalent to {0} degrees.";
   radians = Math::Atan2( y, x );
   angle = radians * (180 / Math::PI);
   Console::WriteLine( line1, Environment::NewLine );
   Console::WriteLine( line2, x, y, radians );
   Console::WriteLine( line3, angle );
}

/*
This example produces the following results:

The tangent of 30 degrees is 0.577350269189626.
The previous tangent is equivalent to 30 degrees.

The arctangent of the angle formed by the x-axis and
a vector to point (1,2) is 1.10714871779409,
which is equivalent to 63.434948822922 degrees.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Tanh 方法

Math
.
.
::
.
Tanh 方法
Math 类

返回指定角度的双曲正切值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Tanh ( _
    value As Double _
) As Double
public static double Tanh(
    double value
)
public:
static double Tanh(
    double value
)
static member Tanh :
        value:float -> float

参数

value
类型： System Double
以弧度为单位的角。

返回值

类型： System Double
value 的双曲正切值。如果 value 等于 NegativeInfinity，则此方法返回 -1。如果值等于 PositiveInfinity，则此方法返回 1。如果 value 等于 NaN，则此方法返回 NaN。 value 的双曲正切值。如果 value 等于 NegativeInfinity，则此方法返回 -1。如果值等于 PositiveInfinity，则此方法返回 1。如果 value 等于 NaN，则此方法返回 NaN。 value 的双曲正切值。如果 value 等于 NegativeInfinity，则此方法返回 -1。如果值等于 PositiveInfinity，则此方法返回 1。如果 value 等于 NaN，则此方法返回 NaN。 value 的双曲正切值。如果 value 等于 NegativeInfinity，则此方法返回 -1。如果值等于 PositiveInfinity，则此方法返回 1。如果 value 等于 NaN，则此方法返回 NaN。

角度 value 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。 角度 value 必须用弧度表示。乘以 Math..::.PI/180 将角度转换成弧度。

下面的示例使用 Tanh 计算所选值的特定双曲线正切恒等式。

' Example for the hyperbolic Math.Tanh( Double ) method.
Imports System
Imports Microsoft.VisualBasic

Module DemoTanh

    Sub Main()
        Console.WriteLine( _
            "This example of hyperbolic Math.Tanh( Double )" & _
            vbCrLf & "generates the following output.")
        Console.WriteLine( _
            vbCrLf & "Evaluate these hyperbolic " & _
            "identities with selected values for X:")
        Console.WriteLine("   tanh(X) = sinh(X) / cosh(X)")
        Console.WriteLine("   tanh(2 * X) = 2 * tanh(X) / (1 + tanh^2(X))")

        UseTanh(0.1)
        UseTanh(1.2)
        UseTanh(4.9)

        Console.WriteLine( _
            vbCrLf & "Evaluate [tanh(X + Y) == (tanh(X) + " & _
            "tanh(Y)) / (1 + tanh(X) * tanh(Y))]" & _
            vbCrLf & "with selected values for X and Y:")

        UseTwoArgs(0.1, 1.2)
        UseTwoArgs(1.2, 4.9)
    End Sub 'Main

    ' Evaluate hyperbolic identities with a given argument.
    Sub UseTanh(arg As Double)
        Dim tanhArg As Double = Math.Tanh(arg)

        ' Evaluate tanh(X) = sinh(X) / cosh(X).
        Console.WriteLine( _
            vbCrLf & "                       Math.Tanh({0}) = {1:E16}" & _
            vbCrLf & "      Math.Sinh({0}) / Math.Cosh({0}) = {2:E16}", _
            arg, tanhArg, Math.Sinh(arg) / Math.Cosh(arg))

        ' Evaluate tanh(2 * X) = 2 * tanh(X) / (1 + tanh^2(X)).
        Console.WriteLine( _
            "                   2 * Math.Tanh({0}) /", _
            arg, 2.0 * tanhArg)
        Console.WriteLine( _
            "             (1 + (Math.Tanh({0}))^2) = {1:E16}", _
            arg, 2.0 * tanhArg /(1.0 + tanhArg * tanhArg))
        Console.WriteLine( _
            "                       Math.Tanh({0}) = {1:E16}", _
            2.0 * arg, Math.Tanh((2.0 * arg)))
    End Sub 'UseTanh

    ' Evaluate a hyperbolic identity that is a function of two arguments.
    Sub UseTwoArgs(argX As Double, argY As Double)

        ' Evaluate tanh(X + Y) = (tanh(X) + tanh(Y)) / (1 + tanh(X) * tanh(Y)).
        Console.WriteLine( _
            vbCrLf & "    (Math.Tanh({0}) + Math.Tanh({1})) /" & _
            vbCrLf & "(1 + Math.Tanh({0}) * Math.Tanh({1})) = {2:E16}", _
            argX, argY, (Math.Tanh(argX) + Math.Tanh(argY)) / _
            (1.0 + Math.Tanh(argX) * Math.Tanh(argY)))
        Console.WriteLine( _
            "                       Math.Tanh({0}) = {1:E16}", _
            argX + argY, Math.Tanh(argX + argY))

    End Sub 'UseTwoArgs
End Module 'DemoTanh

' This example of hyperbolic Math.Tanh( Double )
' generates the following output.
'
' Evaluate these hyperbolic identities with selected values for X:
'    tanh(X) = sinh(X) / cosh(X)
'    tanh(2 * X) = 2 * tanh(X) / (1 + tanh^2(X))
'
'                        Math.Tanh(0.1) = 9.9667994624955819E-002
'       Math.Sinh(0.1) / Math.Cosh(0.1) = 9.9667994624955819E-002
'                    2 * Math.Tanh(0.1) /
'              (1 + (Math.Tanh(0.1))^2) = 1.9737532022490401E-001
'                        Math.Tanh(0.2) = 1.9737532022490401E-001
'
'                        Math.Tanh(1.2) = 8.3365460701215521E-001
'       Math.Sinh(1.2) / Math.Cosh(1.2) = 8.3365460701215521E-001
'                    2 * Math.Tanh(1.2) /
'              (1 + (Math.Tanh(1.2))^2) = 9.8367485769368024E-001
'                        Math.Tanh(2.4) = 9.8367485769368024E-001
'
'                        Math.Tanh(4.9) = 9.9988910295055444E-001
'       Math.Sinh(4.9) / Math.Cosh(4.9) = 9.9988910295055433E-001
'                    2 * Math.Tanh(4.9) /
'              (1 + (Math.Tanh(4.9))^2) = 9.9999999385024030E-001
'                        Math.Tanh(9.8) = 9.9999999385024030E-001
'
' Evaluate [tanh(X + Y) == (tanh(X) + tanh(Y)) / (1 + tanh(X) * tanh(Y))]
' with selected values for X and Y:
'
'     (Math.Tanh(0.1) + Math.Tanh(1.2)) /
' (1 + Math.Tanh(0.1) * Math.Tanh(1.2)) = 8.6172315931330645E-001
'                        Math.Tanh(1.3) = 8.6172315931330634E-001
'
'     (Math.Tanh(1.2) + Math.Tanh(4.9)) /
' (1 + Math.Tanh(1.2) * Math.Tanh(4.9)) = 9.9998993913939649E-001
'                        Math.Tanh(6.1) = 9.9998993913939649E-001

// Example for the hyperbolic Math.Tanh( double ) method.
using System;

class DemoTanh
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of hyperbolic Math.Tanh( double )\n" +
            "generates the following output." );
        Console.WriteLine(
            "\nEvaluate these hyperbolic identities " +
            "with selected values for X:" );
        Console.WriteLine( "   tanh(X) == sinh(X) / cosh(X)" );
        Console.WriteLine(
            "   tanh(2 * X) == 2 * tanh(X) / (1 + tanh^2(X))" );

        UseTanh(0.1);
        UseTanh(1.2);
        UseTanh(4.9);

        Console.WriteLine(
            "\nEvaluate [tanh(X + Y) == (tanh(X) + tanh(Y)) " +
            "/ (1 + tanh(X) * tanh(Y))]" +
            "\nwith selected values for X and Y:" );

        UseTwoArgs(0.1, 1.2);
        UseTwoArgs(1.2, 4.9);
    }

    // Evaluate hyperbolic identities with a given argument.
    static void UseTanh(double arg)
    {
        double tanhArg = Math.Tanh(arg);

        // Evaluate tanh(X) == sinh(X) / cosh(X).
        Console.WriteLine(
            "\n                       Math.Tanh({0}) == {1:E16}\n" +
            "      Math.Sinh({0}) / Math.Cosh({0}) == {2:E16}",
            arg, tanhArg, (Math.Sinh(arg) / Math.Cosh(arg)) );

        // Evaluate tanh(2 * X) == 2 * tanh(X) / (1 + tanh^2(X)).
        Console.WriteLine(
            "                   2 * Math.Tanh({0}) /",
            arg, 2.0 * tanhArg );
        Console.WriteLine(
            "             (1 + (Math.Tanh({0}))^2) == {1:E16}",
            arg, 2.0 * tanhArg / (1.0 + tanhArg * tanhArg ) );
        Console.WriteLine(
            "                       Math.Tanh({0}) == {1:E16}",
            2.0 * arg, Math.Tanh(2.0 * arg) );
    }

    // Evaluate a hyperbolic identity that is a function of two arguments.
    static void UseTwoArgs(double argX, double argY)
    {
        // Evaluate tanh(X + Y) == (tanh(X) + tanh(Y)) / (1 + tanh(X) * tanh(Y)).
        Console.WriteLine(
            "\n    (Math.Tanh({0}) + Math.Tanh({1})) /\n" +
            "(1 + Math.Tanh({0}) * Math.Tanh({1})) == {2:E16}",
            argX, argY, (Math.Tanh(argX) + Math.Tanh(argY)) /
            (1.0 + Math.Tanh(argX) * Math.Tanh(argY)) );
        Console.WriteLine(
            "                       Math.Tanh({0}) == {1:E16}",
            argX + argY, Math.Tanh(argX + argY));
    }
}

/*
This example of hyperbolic Math.Tanh( double )
generates the following output.

Evaluate these hyperbolic identities with selected values for X:
   tanh(X) == sinh(X) / cosh(X)
   tanh(2 * X) == 2 * tanh(X) / (1 + tanh^2(X))

                       Math.Tanh(0.1) == 9.9667994624955819E-002
      Math.Sinh(0.1) / Math.Cosh(0.1) == 9.9667994624955819E-002
                   2 * Math.Tanh(0.1) /
             (1 + (Math.Tanh(0.1))^2) == 1.9737532022490401E-001
                       Math.Tanh(0.2) == 1.9737532022490401E-001

                       Math.Tanh(1.2) == 8.3365460701215521E-001
      Math.Sinh(1.2) / Math.Cosh(1.2) == 8.3365460701215521E-001
                   2 * Math.Tanh(1.2) /
             (1 + (Math.Tanh(1.2))^2) == 9.8367485769368024E-001
                       Math.Tanh(2.4) == 9.8367485769368024E-001

                       Math.Tanh(4.9) == 9.9988910295055444E-001
      Math.Sinh(4.9) / Math.Cosh(4.9) == 9.9988910295055433E-001
                   2 * Math.Tanh(4.9) /
             (1 + (Math.Tanh(4.9))^2) == 9.9999999385024030E-001
                       Math.Tanh(9.8) == 9.9999999385024030E-001

Evaluate [tanh(X + Y) == (tanh(X) + tanh(Y)) / (1 + tanh(X) * tanh(Y))]
with selected values for X and Y:

    (Math.Tanh(0.1) + Math.Tanh(1.2)) /
(1 + Math.Tanh(0.1) * Math.Tanh(1.2)) == 8.6172315931330645E-001
                       Math.Tanh(1.3) == 8.6172315931330634E-001

    (Math.Tanh(1.2) + Math.Tanh(4.9)) /
(1 + Math.Tanh(1.2) * Math.Tanh(4.9)) == 9.9998993913939649E-001
                       Math.Tanh(6.1) == 9.9998993913939649E-001
*/

// Example for the hyperbolic Math::Tanh( double ) method.
using namespace System;

// Evaluate hyperbolic identities with a given argument.
void UseTanh( double arg )
{
   double tanhArg = Math::Tanh( arg );

   // Evaluate tanh(X) == sinh(X) / cosh(X).
   Console::WriteLine( "\n                        Math::Tanh({0}) == {1:E16}\n"
   "      Math::Sinh({0}) / Math::Cosh({0}) == {2:E16}", arg, tanhArg, (Math::Sinh( arg ) / Math::Cosh( arg )) );

   // Evaluate tanh(2 * X) == 2 * tanh(X) / (1 + tanh^2(X)).
   Console::WriteLine( "                    2 * Math::Tanh({0}) /", arg, 2.0 * tanhArg );
   Console::WriteLine( "              (1 + (Math::Tanh({0}))^2) == {1:E16}", arg, 2.0 * tanhArg / (1.0 + tanhArg * tanhArg) );
   Console::WriteLine( "                        Math::Tanh({0}) == {1:E16}", 2.0 * arg, Math::Tanh( 2.0 * arg ) );
}

// Evaluate a hyperbolic identity that is a function of two arguments.
void UseTwoArgs( double argX, double argY )
{

   // Evaluate tanh(X + Y) == (tanh(X) + tanh(Y)) / (1 + tanh(X) * tanh(Y)).
   Console::WriteLine( "\n    (Math::Tanh({0}) + Math::Tanh({1})) /\n"
   "(1 + Math::Tanh({0}) * Math::Tanh({1})) == {2:E16}", argX, argY, (Math::Tanh( argX ) + Math::Tanh( argY )) / (1.0 + Math::Tanh( argX ) * Math::Tanh( argY )) );
   Console::WriteLine( "                        Math::Tanh({0}) == {1:E16}", argX + argY, Math::Tanh( argX + argY ) );
}

int main()
{
   Console::WriteLine( "This example of hyperbolic Math::Tanh( double )\n"
   "generates the following output." );
   Console::WriteLine( "\nEvaluate these hyperbolic identities "
   "with selected values for X:" );
   Console::WriteLine( "   tanh(X) == sinh(X) / cosh(X)" );
   Console::WriteLine( "   tanh(2 * X) == 2 * tanh(X) / (1 + tanh^2(X))" );
   UseTanh( 0.1 );
   UseTanh( 1.2 );
   UseTanh( 4.9 );
   Console::WriteLine( "\nEvaluate [tanh(X + Y) == "
   "(tanh(X) + tanh(Y)) / (1 + tanh(X) * tanh(Y))]"
   "\nwith selected values for X and Y:" );
   UseTwoArgs( 0.1, 1.2 );
   UseTwoArgs( 1.2, 4.9 );
}

/*
This example of hyperbolic Math::Tanh( double )
generates the following output.

Evaluate these hyperbolic identities with selected values for X:
   tanh(X) == sinh(X) / cosh(X)
   tanh(2 * X) == 2 * tanh(X) / (1 + tanh^2(X))

                        Math::Tanh(0.1) == 9.9667994624955819E-002
      Math::Sinh(0.1) / Math::Cosh(0.1) == 9.9667994624955819E-002
                    2 * Math::Tanh(0.1) /
              (1 + (Math::Tanh(0.1))^2) == 1.9737532022490401E-001
                        Math::Tanh(0.2) == 1.9737532022490401E-001

                        Math::Tanh(1.2) == 8.3365460701215521E-001
      Math::Sinh(1.2) / Math::Cosh(1.2) == 8.3365460701215521E-001
                    2 * Math::Tanh(1.2) /
              (1 + (Math::Tanh(1.2))^2) == 9.8367485769368024E-001
                        Math::Tanh(2.4) == 9.8367485769368024E-001

                        Math::Tanh(4.9) == 9.9988910295055444E-001
      Math::Sinh(4.9) / Math::Cosh(4.9) == 9.9988910295055433E-001
                    2 * Math::Tanh(4.9) /
              (1 + (Math::Tanh(4.9))^2) == 9.9999999385024030E-001
                        Math::Tanh(9.8) == 9.9999999385024030E-001

Evaluate [tanh(X + Y) == (tanh(X) + tanh(Y)) / (1 + tanh(X) * tanh(Y))]
with selected values for X and Y:

    (Math::Tanh(0.1) + Math::Tanh(1.2)) /
(1 + Math::Tanh(0.1) * Math::Tanh(1.2)) == 8.6172315931330645E-001
                        Math::Tanh(1.3) == 8.6172315931330634E-001

    (Math::Tanh(1.2) + Math::Tanh(4.9)) /
(1 + Math::Tanh(1.2) * Math::Tanh(4.9)) == 9.9998993913939649E-001
                        Math::Tanh(6.1) == 9.9998993913939649E-001
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Math 类
Math 成员
System 命名空间


Math ..::.Truncate 方法

Math
.
.
::
.
Truncate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Math 类

计算一个数字的整数部分。

名称 说明
页首

将这个数字向零舍入为最接近的整数。

参考

Math 类
Math 成员
System 命名空间


Math ..::.Truncate 方法 (Decimal)

Math
.
.
::
.
Truncate 方法 (Decimal)
Math 类

计算指定小数的整数部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Truncate ( _
    d As Decimal _
) As Decimal
public static decimal Truncate(
    decimal d
)
public:
static Decimal Truncate(
    Decimal d
)
static member Truncate :
        d:decimal -> decimal

参数

d
类型： System Decimal
要截断的数字。

返回值

类型： System Decimal
d 的整数部分（即舍弃小数位后剩余的数）。

Truncate 将 d 向零舍入为最接近的整数。

下面的示例调用 Truncate(Decimal) 方法同时截断正负 Decimal 值。

Dim decimalNumber As Decimal

decimalNumber = 32.7865d
' Displays 32
Console.WriteLine(Math.Truncate(decimalNumber))

decimalNumber = -32.9012d
' Displays -32
Console.WriteLine(Math.Truncate(decimalNumber))

decimal decimalNumber;

decimalNumber = 32.7865m;
// Displays 32
Console.WriteLine(Math.Truncate(decimalNumber));

decimalNumber = -32.9012m;
// Displays -32
Console.WriteLine(Math.Truncate(decimalNumber));

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
Truncate 重载
System 命名空间
Round
Ceiling
Floor


Math ..::.Truncate 方法 (Double)

Math
.
.
::
.
Truncate 方法 (Double)
Math 类

计算指定双精度浮点数的整数部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Truncate ( _
    d As Double _
) As Double
public static double Truncate(
    double d
)
public:
static double Truncate(
    double d
)
static member Truncate :
        d:float -> float

参数

d
类型： System Double
要截断的数字。

返回值

类型： System Double
d 的整数部分（即舍弃小数位后剩余的数）。

Truncate 将 d 向零舍入为最接近的整数。

下面的示例调用 Truncate(Double) 方法同时截断正负 Double 值。

Dim floatNumber As Double

floatNumber = 32.7865
' Displays 32
Console.WriteLine(Math.Truncate(floatNumber))

floatNumber = -32.9012
' Displays -32
Console.WriteLine(Math.Truncate(floatNumber))

double floatNumber;

floatNumber = 32.7865;
// Displays 32
Console.WriteLine(Math.Truncate(floatNumber));

floatNumber = -32.9012;
// Displays -32
Console.WriteLine(Math.Truncate(floatNumber));

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Math 类
Math 成员
Truncate 重载
System 命名空间
Round
Ceiling
Floor


MemberAccessException 类

MemberAccessException 类
成员

访问类成员的尝试失败时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class MemberAccessException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class MemberAccessException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class MemberAccessException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type MemberAccessException =
    class
        inherit SystemException
    end

MemberAccessException 是 FieldAccessException、MethodAccessException、MissingMemberException、MissingMethodException 和 MissingFieldException 的基类。当找不到类成员或不允许访问成员时，将引发这些异常。 MemberAccessException 是 FieldAccessException、MethodAccessException、MissingMemberException、MissingMethodException 和 MissingFieldException 的基类。当找不到类成员或不允许访问成员时，将引发这些异常。

MemberAccessException 由下列方法引发：

System.Reflection 类的 Invoke、FieldInfo 类的 GetValue 以及 Delegate 类的 DynamicInvoke。

MemberAccessException 使用值为 0x8013151A 的 HRESULT COR_E_MEMBERACCESS。

有关 MemberAccessException 实例的初始属性值列表，请参见 MemberAccessException 构造函数。

System System..::.MemberAccessExceptionMemberAccessException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MemberAccessException 成员
System 命名空间
Exception

其他资源

处理和引发异常


MemberAccessException 成员

MemberAccessException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MemberAccessException 类

访问类成员的尝试失败时引发的异常。

MemberAccessException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MemberAccessException 类
System 命名空间


MemberAccessException 构造函数

MemberAccessException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MemberAccessException 类

初始化 MemberAccessException 类的新实例。

名称 说明
页首

参考

MemberAccessException 类
MemberAccessException 成员
System 命名空间


MemberAccessException 构造函数

MemberAccessException 构造函数
MemberAccessException 类

初始化 MemberAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public MemberAccessException()
public:
MemberAccessException()
new : unit -> MemberAccessException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“无法访问成员。”。此消息将考虑当前系统区域性。

下表显示 MemberAccessException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MemberAccessException 类
MemberAccessException 成员
MemberAccessException 重载
System 命名空间


MemberAccessException 构造函数 (String)

MemberAccessException 构造函数 (String)
MemberAccessException 类

使用指定错误信息初始化 MemberAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public MemberAccessException(
    string message
)
public:
MemberAccessException(
    String^ message
)
new :
        message:string -> MemberAccessException

参数

message
类型： System String
描述错误的消息。

message 的内容应该是用户可以理解的。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容应该是用户可以理解的。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 MemberAccessException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MemberAccessException 类
MemberAccessException 成员
MemberAccessException 重载
System 命名空间


MemberAccessException 构造函数 (SerializationInfo, StreamingContext)

MemberAccessException 构造函数 (SerializationInfo, StreamingContext)
MemberAccessException 类

用序列化数据初始化 MemberAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected MemberAccessException(
    SerializationInfo info,
    StreamingContext context
)
protected:
MemberAccessException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> MemberAccessException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MemberAccessException 类
MemberAccessException 成员
MemberAccessException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


MemberAccessException 构造函数 (String, Exception)

MemberAccessException 构造函数 (String, Exception)
MemberAccessException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 MemberAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public MemberAccessException(
    string message,
    Exception inner
)
public:
MemberAccessException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> MemberAccessException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 MemberAccessException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MemberAccessException 类
MemberAccessException 成员
MemberAccessException 重载
System 命名空间
Exception

其他资源

处理和引发异常


MemberAccessException 方法

MemberAccessException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MemberAccessException 类

MemberAccessException 类型公开以下成员。

名称 说明
页首

参考

MemberAccessException 类
System 命名空间


MemberAccessException 属性

MemberAccessException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MemberAccessException 类

MemberAccessException 类型公开以下成员。

名称 说明
页首

参考

MemberAccessException 类
System 命名空间


MemberAccessException 事件

MemberAccessException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MemberAccessException 类

MemberAccessException 类型公开以下成员。

名称 说明
页首

参考

MemberAccessException 类
System 命名空间


MethodAccessException 类

MethodAccessException 类
成员

存在想要访问某个方法（如访问部分可信代码中的私有方法）的无效尝试时，所引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class MethodAccessException _
    Inherits MemberAccessException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class MethodAccessException : MemberAccessException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class MethodAccessException : public MemberAccessException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type MethodAccessException =
    class
        inherit MemberAccessException
    end

引发此异常的情况如下所示：

  • 从普通的编译代码中不可访问的私有、受保护或内部方法通过利用反射可以从部分信任的代码中访问。

  • 从透明代码访问安全关键方法。

  • 类库中某方法的访问级别已经改变，一个或多个引用该库的程序集还未重新编译。

说明 说明

从 .NET Framework 4 版 开始，公共语言运行时将以部分信任级别运行的应用程序代码视为透明。请参见 反射的安全注意事项。 从 .NET Framework 4 版 开始，公共语言运行时将以部分信任级别运行的应用程序代码视为透明。请参见 反射的安全注意事项。

MethodAccessException 使用值为 0x80131510 的 HRESULT COR_E_METHODACCESS。

有关 MethodAccessException 实例的初始属性值列表，请参见 MethodAccessException 构造函数。

System System..::.MethodAccessExceptionMethodAccessException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MethodAccessException 成员
System 命名空间
Exception

其他资源

处理和引发异常


MethodAccessException 成员

MethodAccessException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MethodAccessException 类

存在想要访问某个方法（如访问部分可信代码中的私有方法）的无效尝试时，所引发的异常。

MethodAccessException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MethodAccessException 类
System 命名空间


MethodAccessException 构造函数

MethodAccessException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MethodAccessException 类

初始化 MethodAccessException 类的新实例。

名称 说明
页首

参考

MethodAccessException 类
MethodAccessException 成员
System 命名空间


MethodAccessException 构造函数

MethodAccessException 构造函数
MethodAccessException 类

初始化 MethodAccessException 类的新实例，将新实例的 Message 属性设置为系统提供的描述错误的消息，如“尝试访问该方法时失败”。此消息将考虑当前系统区域性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public MethodAccessException()
public:
MethodAccessException()
new : unit -> MethodAccessException

下表显示 MethodAccessException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MethodAccessException 类
MethodAccessException 成员
MethodAccessException 重载
System 命名空间


MethodAccessException 构造函数 (String)

MethodAccessException 构造函数 (String)
MethodAccessException 类

使用指定错误消息初始化 MethodAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public MethodAccessException(
    string message
)
public:
MethodAccessException(
    String^ message
)
new :
        message:string -> MethodAccessException

参数

message
类型： System String
描述该错误的 String。

message 的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 MethodAccessException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MethodAccessException 类
MethodAccessException 成员
MethodAccessException 重载
System 命名空间


MethodAccessException 构造函数 (SerializationInfo, StreamingContext)

MethodAccessException 构造函数 (SerializationInfo, StreamingContext)
MethodAccessException 类

用序列化数据初始化 MethodAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected MethodAccessException(
    SerializationInfo info,
    StreamingContext context
)
protected:
MethodAccessException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> MethodAccessException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。 在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MethodAccessException 类
MethodAccessException 成员
MethodAccessException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


MethodAccessException 构造函数 (String, Exception)

MethodAccessException 构造函数 (String, Exception)
MethodAccessException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 MethodAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public MethodAccessException(
    string message,
    Exception inner
)
public:
MethodAccessException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> MethodAccessException

参数

message
类型： System String
解释异常原因的错误消息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 MethodAccessException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MethodAccessException 类
MethodAccessException 成员
MethodAccessException 重载
System 命名空间
Exception


MethodAccessException 方法

MethodAccessException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MethodAccessException 类

MethodAccessException 类型公开以下成员。

名称 说明
页首

参考

MethodAccessException 类
System 命名空间


MethodAccessException 属性

MethodAccessException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MethodAccessException 类

MethodAccessException 类型公开以下成员。

名称 说明
页首

参考

MethodAccessException 类
System 命名空间


MethodAccessException 事件

MethodAccessException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MethodAccessException 类

MethodAccessException 类型公开以下成员。

名称 说明
页首

参考

MethodAccessException 类
System 命名空间


MidpointRounding 枚举

MidpointRounding 枚举

指定数学舍入方法应如何处理两个数字间的中间值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Enumeration MidpointRounding
[ComVisibleAttribute(true)]
public enum MidpointRounding
[ComVisibleAttribute(true)]
public enum class MidpointRounding
[<ComVisibleAttribute(true)>]
type MidpointRounding
成员名称 | 说明
ToEven | 当一个数字是其他两个数字的中间值时，会将其舍入为最接近的偶数。
AwayFromZero | 当一个数字是其他两个数字的中间值时，会将其舍入为两个值中绝对值较小的值。

使用带有适当的 Math..::.Round 重载的 MidpointRounding 可以更精确地控制舍入过程。

舍入运算以隐式精度或指定精度提取原始数字；检查下一个数字（其精度等于隐式进度或指定精度加一）；并以与原始数字相同的精度返回与它最接近的数字。对于正数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向负无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向正无穷大。对于负数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向正无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向负无穷大。 舍入运算以隐式精度或指定精度提取原始数字；检查下一个数字（其精度等于隐式进度或指定精度加一）；并以与原始数字相同的精度返回与它最接近的数字。对于正数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向负无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向正无穷大。对于负数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向正无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向负无穷大。 舍入运算以隐式精度或指定精度提取原始数字；检查下一个数字（其精度等于隐式进度或指定精度加一）；并以与原始数字相同的精度返回与它最接近的数字。对于正数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向负无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向正无穷大。对于负数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向正无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向负无穷大。 舍入运算以隐式精度或指定精度提取原始数字；检查下一个数字（其精度等于隐式进度或指定精度加一）；并以与原始数字相同的精度返回与它最接近的数字。对于正数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向负无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向正无穷大。对于负数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向正无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向负无穷大。 舍入运算以隐式精度或指定精度提取原始数字；检查下一个数字（其精度等于隐式进度或指定精度加一）；并以与原始数字相同的精度返回与它最接近的数字。对于正数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向负无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向正无穷大。对于负数，如果下一个数字是从 0 到 4 的数字，则最接近的数字朝向正无穷大。如果下一个数字是从 6 到 9 的数字，则最接近的数字朝向负无穷大。

在上述情况下，MidpointRounding 枚举不会影响舍入运算的结果。但是，如果下一个数字是 5（即两个可能值的中间值），则最接近的数字并不明确。在这种情况下，可以使用 MidpointRounding 枚举来指定舍入运算是返回与零最接近的数字还是返回最接近的偶数。 在上述情况下，MidpointRounding 枚举不会影响舍入运算的结果。但是，如果下一个数字是 5（即两个可能值的中间值），则最接近的数字并不明确。在这种情况下，可以使用 MidpointRounding 枚举来指定舍入运算是返回与零最接近的数字还是返回最接近的偶数。 在上述情况下，MidpointRounding 枚举不会影响舍入运算的结果。但是，如果下一个数字是 5（即两个可能值的中间值），则最接近的数字并不明确。在这种情况下，可以使用 MidpointRounding 枚举来指定舍入运算是返回与零最接近的数字还是返回最接近的偶数。

下表演示与 MidpointRounding 的值结合使用的某些正数和负数的舍入结果。在舍入数字时所使用的精度是零，这意味着小数点之后的数字会影响舍入运算。例如，对于数字 -2.5，小数点之后的数字是 5。由于该数字是中间值，因此您可以使用 MidpointRounding 值来确定舍入结果。如果指定了 AwayFromZero，则将返回 -3，因为它是精度为零且与零最接近的数字。如果指定了 ToEven，则将返回 -2，因为它是精度为零的最接近的偶数。 下表演示与 MidpointRounding 的值结合使用的某些正数和负数的舍入结果。在舍入数字时所使用的精度是零，这意味着小数点之后的数字会影响舍入运算。例如，对于数字 -2.5，小数点之后的数字是 5。由于该数字是中间值，因此您可以使用 MidpointRounding 值来确定舍入结果。如果指定了 AwayFromZero，则将返回 -3，因为它是精度为零且与零最接近的数字。如果指定了 ToEven，则将返回 -2，因为它是精度为零的最接近的偶数。 下表演示与 MidpointRounding 的值结合使用的某些正数和负数的舍入结果。在舍入数字时所使用的精度是零，这意味着小数点之后的数字会影响舍入运算。例如，对于数字 -2.5，小数点之后的数字是 5。由于该数字是中间值，因此您可以使用 MidpointRounding 值来确定舍入结果。如果指定了 AwayFromZero，则将返回 -3，因为它是精度为零且与零最接近的数字。如果指定了 ToEven，则将返回 -2，因为它是精度为零的最接近的偶数。 下表演示与 MidpointRounding 的值结合使用的某些正数和负数的舍入结果。在舍入数字时所使用的精度是零，这意味着小数点之后的数字会影响舍入运算。例如，对于数字 -2.5，小数点之后的数字是 5。由于该数字是中间值，因此您可以使用 MidpointRounding 值来确定舍入结果。如果指定了 AwayFromZero，则将返回 -3，因为它是精度为零且与零最接近的数字。如果指定了 ToEven，则将返回 -2，因为它是精度为零的最接近的偶数。 下表演示与 MidpointRounding 的值结合使用的某些正数和负数的舍入结果。在舍入数字时所使用的精度是零，这意味着小数点之后的数字会影响舍入运算。例如，对于数字 -2.5，小数点之后的数字是 5。由于该数字是中间值，因此您可以使用 MidpointRounding 值来确定舍入结果。如果指定了 AwayFromZero，则将返回 -3，因为它是精度为零且与零最接近的数字。如果指定了 ToEven，则将返回 -2，因为它是精度为零的最接近的偶数。 下表演示与 MidpointRounding 的值结合使用的某些正数和负数的舍入结果。在舍入数字时所使用的精度是零，这意味着小数点之后的数字会影响舍入运算。例如，对于数字 -2.5，小数点之后的数字是 5。由于该数字是中间值，因此您可以使用 MidpointRounding 值来确定舍入结果。如果指定了 AwayFromZero，则将返回 -3，因为它是精度为零且与零最接近的数字。如果指定了 ToEven，则将返回 -2，因为它是精度为零的最接近的偶数。

原始数字 | 取绝对值较大的值 | 取偶数
3.5 | 4 | 4
2.8 | 3 | 3
2.5 | 3 | 2
2.1 | 2 | 2
-2.1 | -2 | -2
-2.5 | -3 | -2
-2.8 | -3 | -3
-3.5 | -4 | -4

下面的代码示例演示与 MidpointRounding 枚举结合使用的 Round 方法。

' This example demonstrates the Math.Round() method in conjunction
' with the MidpointRounding enumeration.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim result As Decimal = 0D
        Dim posValue As Decimal = 3.45D
        Dim negValue As Decimal = -3.45D

        ' By default, round a positive and a negative value to the nearest even number.
        ' The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue)
        result = Math.Round(negValue, 1)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue)
        Console.WriteLine()

        ' Round a positive value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(posValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                           result, posValue)
        result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, posValue)
        Console.WriteLine()

        ' Round a negative value to the nearest even number, then to the nearest number
        ' away from zero. The precision of the result is 1 decimal place.
        result = Math.Round(negValue, 1, MidpointRounding.ToEven)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", _
                            result, negValue)
        result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero)
        Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", _
                           result, negValue)
        Console.WriteLine()

    End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
' 3.4 = Math.Round( 3.45, 1)
'-3.4 = Math.Round(-3.45, 1)
'
' 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
' 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)
'
'-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
'-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
'

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using System;

class Sample
{
    public static void Main()
    {
    decimal result = 0.0m;
    decimal posValue =  3.45m;
    decimal negValue = -3.45m;

// By default, round a positive and a negative value to the nearest even number.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math.Round(negValue, 1);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console.WriteLine();

// Round a positive value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(posValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, posValue);
    result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, posValue);
    Console.WriteLine();

// Round a negative value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

    result = Math.Round(negValue, 1, MidpointRounding.ToEven);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, negValue);
    result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero);
    Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, negValue);
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

 3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

// This example demonstrates the Math.Round() method in conjunction
// with the MidpointRounding enumeration.
using namespace System;

void main()
{
    Decimal result = (Decimal) 0.0;
    Decimal posValue = (Decimal) 3.45;
    Decimal negValue = (Decimal) -3.45;

    // By default, round a positive and a negative value to the nearest
    // even number. The precision of the result is 1 decimal place.
    result = Math::Round(posValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
    result = Math::Round(negValue, 1);
    Console::WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
    Console::WriteLine();

    // Round a positive value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(posValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, posValue);
    result = Math::Round(posValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, posValue);
    Console::WriteLine();

    // Round a negative value to the nearest even number, then to the
    // nearest number away from zero. The precision of the result is 1
    // decimal place.
    result = Math::Round(negValue, 1, MidpointRounding::ToEven);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
        result, negValue);
    result = Math::Round(negValue, 1, MidpointRounding::AwayFromZero);
    Console::WriteLine(
        "{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
        result, negValue);
    Console::WriteLine();
}

/*
This code example produces the following results:

3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间


MissingFieldException 类

MissingFieldException 类
成员

尝试动态访问不存在的字段时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class MissingFieldException _
    Inherits MissingMemberException _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class MissingFieldException : MissingMemberException,
    ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class MissingFieldException : public MissingMemberException,
    ISerializable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type MissingFieldException =
    class
        inherit MissingMemberException
        interface ISerializable
    end

通常，如果代码尝试访问不存在的类成员，会生成编译错误。MissingFieldException 则设计来处理这样一种情况：尝试动态访问程序集中已重命名或已删除的字段，而该程序集并不是按其强名称来引用的。当相关程序集中的代码尝试访问已经修改的程序集中已不存在的字段时，就会引发 MissingFieldException。 通常，如果代码尝试访问不存在的类成员，会生成编译错误。MissingFieldException 则设计来处理这样一种情况：尝试动态访问程序集中已重命名或已删除的字段，而该程序集并不是按其强名称来引用的。当相关程序集中的代码尝试访问已经修改的程序集中已不存在的字段时，就会引发 MissingFieldException。 通常，如果代码尝试访问不存在的类成员，会生成编译错误。MissingFieldException 则设计来处理这样一种情况：尝试动态访问程序集中已重命名或已删除的字段，而该程序集并不是按其强名称来引用的。当相关程序集中的代码尝试访问已经修改的程序集中已不存在的字段时，就会引发 MissingFieldException。

MissingFieldException 使用值为 0x80131511 的 HRESULT COR_E_MISSINGFIELD。

有关 MissingFieldException 实例的初始属性值列表，请参见 MissingFieldException 构造函数。

此示例演示在您尝试使用反射来调用不存在的方法和访问不存在的字段时所发生的情况。应用程序通过捕捉 MissingMethodException、MissingFieldException 和 MissingMemberException 来恢复。 此示例演示在您尝试使用反射来调用不存在的方法和访问不存在的字段时所发生的情况。应用程序通过捕捉 MissingMethodException、MissingFieldException 和 MissingMemberException 来恢复。

Imports System
Imports System.Reflection

Public Class App
    Public Shared Sub Main()
        Try
            ' Attempt to call a static DoSomething method defined in the App class.
            ' However, because the App class does not define this method,
            ' a MissingMethodException is thrown.
            GetType(App).InvokeMember("DoSomething", BindingFlags.Static Or BindingFlags.InvokeMethod, _
                                       Nothing, Nothing, Nothing)
        Catch e As MissingMethodException
            ' Show the user that the DoSomething method cannot be called.
            Console.WriteLine("Unable to call the DoSomething method: {0}", e.Message)
        End Try
        Try
            ' Attempt to access a static AField field defined in the App class.
            ' However, because the App class does not define this field,
            ' a MissingFieldException is thrown.
            GetType(App).InvokeMember("AField", BindingFlags.Static Or BindingFlags.SetField, _
                                       Nothing, Nothing, New [Object]() {5})
        Catch e As MissingFieldException
            ' Show the user that the AField field cannot be accessed.
            Console.WriteLine("Unable to access the AField field: {0}", e.Message)
        End Try
        Try
            ' Attempt to access a static AnotherField field defined in the App class.
            ' However, because the App class does not define this field,
            ' a MissingFieldException is thrown.
            GetType(App).InvokeMember("AnotherField", BindingFlags.Static Or BindingFlags.GetField, _
                                       Nothing, Nothing, Nothing)
        Catch e As MissingMemberException
            ' Notice that this code is catching MissingMemberException which is the
            ' base class of MissingMethodException and MissingFieldException.
            ' Show the user that the AnotherField field cannot be accessed.
            Console.WriteLine("Unable to access the AnotherField field: {0}", e.Message)
        End Try
    End Sub
End Class
' This code example produces the following output:
'
' Unable to call the DoSomething method: Method 'App.DoSomething' not found.
' Unable to access the AField field: Field 'App.AField' not found.
' Unable to access the AnotherField field: Field 'App.AnotherField' not found.

using System;
using System.Reflection;

public class App
{
    public static void Main()
    {

        try
        {
            // Attempt to call a static DoSomething method defined in the App class.
            // However, because the App class does not define this method,
            // a MissingMethodException is thrown.
            typeof(App).InvokeMember("DoSomething", BindingFlags.Static |
                BindingFlags.InvokeMethod, null, null, null);
        }
        catch (MissingMethodException e)
        {
            // Show the user that the DoSomething method cannot be called.
            Console.WriteLine("Unable to call the DoSomething method: {0}", e.Message);
        }

        try
        {
            // Attempt to access a static AField field defined in the App class.
            // However, because the App class does not define this field,
            // a MissingFieldException is thrown.
            typeof(App).InvokeMember("AField", BindingFlags.Static | BindingFlags.SetField,
                null, null, new Object[] { 5 });
        }
        catch (MissingFieldException e)
        {
         // Show the user that the AField field cannot be accessed.
         Console.WriteLine("Unable to access the AField field: {0}", e.Message);
        }

        try
        {
            // Attempt to access a static AnotherField field defined in the App class.
            // However, because the App class does not define this field,
            // a MissingFieldException is thrown.
            typeof(App).InvokeMember("AnotherField", BindingFlags.Static |
                BindingFlags.GetField, null, null, null);
        }
        catch (MissingMemberException e)
        {
         // Notice that this code is catching MissingMemberException which is the
         // base class of MissingMethodException and MissingFieldException.
         // Show the user that the AnotherField field cannot be accessed.
         Console.WriteLine("Unable to access the AnotherField field: {0}", e.Message);
        }
    }
}
// This code example produces the following output:
//
// Unable to call the DoSomething method: Method 'App.DoSomething' not found.
// Unable to access the AField field: Field 'App.AField' not found.
// Unable to access the AnotherField field: Field 'App.AnotherField' not found.

using namespace System;
using namespace System::Reflection;

ref class App
{
};

int main()
{
    try
    {
        // Attempt to call a static DoSomething method defined in the App class.
        // However, because the App class does not define this method,
        // a MissingMethodException is thrown.
        App::typeid->InvokeMember("DoSomething", BindingFlags::Static |
            BindingFlags::InvokeMethod, nullptr, nullptr, nullptr);
    }
    catch (MissingMethodException^ ex)
    {
        // Show the user that the DoSomething method cannot be called.
        Console::WriteLine("Unable to call the DoSomething method: {0}",
            ex->Message);
    }

    try
    {
        // Attempt to access a static AField field defined in the App class.
        // However, because the App class does not define this field,
        // a MissingFieldException is thrown.
        App::typeid->InvokeMember("AField", BindingFlags::Static |
            BindingFlags::SetField, nullptr, nullptr, gcnew array<Object^>{5});
    }
    catch (MissingFieldException^ ex)
    {
        // Show the user that the AField field cannot be accessed.
        Console::WriteLine("Unable to access the AField field: {0}",
            ex->Message);
    }

    try
    {
        // Attempt to access a static AnotherField field defined in the App class.
        // However, because the App class does not define this field,
        // a MissingFieldException is thrown.
        App::typeid->InvokeMember("AnotherField", BindingFlags::Static |
            BindingFlags::GetField, nullptr, nullptr, nullptr);
    }
    catch (MissingMemberException^ ex)
    {
        // Notice that this code is catching MissingMemberException which is the
        // base class of MissingMethodException and MissingFieldException.
        // Show the user that the AnotherField field cannot be accessed.
        Console::WriteLine("Unable to access the AnotherField field: {0}",
            ex->Message);
    }
}
// This code produces the following output.
//
// Unable to call the DoSomething method: Method 'App.DoSomething' not found.
// Unable to access the AField field: Field 'App.AField' not found.
// Unable to access the AnotherField field: Field 'App.AnotherField' not found.

System System..::.MissingFieldExceptionMissingFieldException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingFieldException 成员
System 命名空间
Exception

其他资源

处理和引发异常


MissingFieldException 成员

MissingFieldException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingFieldException 类

尝试动态访问不存在的字段时引发的异常。

MissingFieldException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MissingFieldException 类
System 命名空间


MissingFieldException 构造函数

MissingFieldException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingFieldException 类

初始化 MissingFieldException 类的新实例。

名称 说明
页首

参考

MissingFieldException 类
MissingFieldException 成员
System 命名空间


MissingFieldException 构造函数

MissingFieldException 构造函数
MissingFieldException 类

初始化 MissingFieldException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public MissingFieldException()
public:
MissingFieldException()
new : unit -> MissingFieldException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“尝试访问不存在的字段。”。此消息将考虑当前系统区域性。

下表显示 MissingFieldException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingFieldException 类
MissingFieldException 成员
MissingFieldException 重载
System 命名空间


MissingFieldException 构造函数 (String)

MissingFieldException 构造函数 (String)
MissingFieldException 类

使用指定错误信息初始化 MissingFieldException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public MissingFieldException(
    string message
)
public:
MissingFieldException(
    String^ message
)
new :
        message:string -> MissingFieldException

参数

message
类型： System String
描述该错误的 String。

message 的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 MissingFieldException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingFieldException 类
MissingFieldException 成员
MissingFieldException 重载
System 命名空间


MissingFieldException 构造函数 (SerializationInfo, StreamingContext)

MissingFieldException 构造函数 (SerializationInfo, StreamingContext)
MissingFieldException 类

用序列化数据初始化 MissingFieldException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected MissingFieldException(
    SerializationInfo info,
    StreamingContext context
)
protected:
MissingFieldException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> MissingFieldException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingFieldException 类
MissingFieldException 成员
MissingFieldException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


MissingFieldException 构造函数 (String, Exception)

MissingFieldException 构造函数 (String, Exception)
MissingFieldException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 MissingFieldException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public MissingFieldException(
    string message,
    Exception inner
)
public:
MissingFieldException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> MissingFieldException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 MissingFieldException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingFieldException 类
MissingFieldException 成员
MissingFieldException 重载
System 命名空间
Exception


MissingFieldException 构造函数 (String, String)

MissingFieldException 构造函数 (String, String)
MissingFieldException 类

使用指定的类名称和字段名称初始化 MissingFieldException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    className As String, _
    fieldName As String _
)
public MissingFieldException(
    string className,
    string fieldName
)
public:
MissingFieldException(
    String^ className,
    String^ fieldName
)
new :
        className:string *
        fieldName:string -> MissingFieldException

参数

className
类型： System String
尝试访问不存在的字段时所用的类名。
fieldName
类型： System String
无法访问的字段名。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingFieldException 类
MissingFieldException 成员
MissingFieldException 重载
System 命名空间


MissingFieldException 字段

MissingFieldException 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingFieldException 类

MissingFieldException 类型公开以下成员。

名称 说明
页首

参考

MissingFieldException 类
System 命名空间


MissingFieldException 方法

MissingFieldException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingFieldException 类

MissingFieldException 类型公开以下成员。

名称 说明
页首

参考

MissingFieldException 类
System 命名空间


MissingFieldException 属性

MissingFieldException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingFieldException 类

MissingFieldException 类型公开以下成员。

名称 说明
页首

参考

MissingFieldException 类
System 命名空间


MissingFieldException ..::.Message 属性

MissingFieldException
.
.
::
.
Message 属性
MissingFieldException 类

获取显示缺少字段的签名、类名和字段名的文本字符串。此属性为只读。 获取显示缺少字段的签名、类名和字段名的文本字符串。此属性为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property Message As String
    Get
public override string Message { get; }
public:
virtual property String^ Message {
    String^ get () override;
}
abstract Message : string
override Message : string

属性值

类型： System String
错误信息字符串。

实现

如果构造对象时没有指定类名，则返回从基类继承的默认文本字符串。此属性重写 Message。应本地化错误信息。 如果构造对象时没有指定类名，则返回从基类继承的默认文本字符串。此属性重写 Message。应本地化错误信息。 如果构造对象时没有指定类名，则返回从基类继承的默认文本字符串。此属性重写 Message。应本地化错误信息。

下面的示例阐释了 Message 属性。此代码示例摘自一个为 MissingFieldException 类提供的更大的示例。 下面的示例阐释了 Message 属性。此代码示例摘自一个为 MissingFieldException 类提供的更大的示例。

Try
    ' Attempt to access a static AField field defined in the App class.
    ' However, because the App class does not define this field,
    ' a MissingFieldException is thrown.
    GetType(App).InvokeMember("AField", BindingFlags.Static Or BindingFlags.SetField, _
                               Nothing, Nothing, New [Object]() {5})
Catch e As MissingFieldException
    ' Show the user that the AField field cannot be accessed.
    Console.WriteLine("Unable to access the AField field: {0}", e.Message)
End Try

try
{
    // Attempt to access a static AField field defined in the App class.
    // However, because the App class does not define this field,
    // a MissingFieldException is thrown.
    typeof(App).InvokeMember("AField", BindingFlags.Static | BindingFlags.SetField,
        null, null, new Object[] { 5 });
}
catch (MissingFieldException e)
{
 // Show the user that the AField field cannot be accessed.
 Console.WriteLine("Unable to access the AField field: {0}", e.Message);
}

try
{
    // Attempt to access a static AField field defined in the App class.
    // However, because the App class does not define this field,
    // a MissingFieldException is thrown.
    App::typeid->InvokeMember("AField", BindingFlags::Static |
        BindingFlags::SetField, nullptr, nullptr, gcnew array<Object^>{5});
}
catch (MissingFieldException^ ex)
{
    // Show the user that the AField field cannot be accessed.
    Console::WriteLine("Unable to access the AField field: {0}",
        ex->Message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingFieldException 类
MissingFieldException 成员
System 命名空间


MissingFieldException 事件

MissingFieldException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingFieldException 类

MissingFieldException 类型公开以下成员。

名称 说明
页首

参考

MissingFieldException 类
System 命名空间


MissingMemberException 类

MissingMemberException 类
成员

尝试动态访问不存在的类成员时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class MissingMemberException _
    Inherits MemberAccessException _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class MissingMemberException : MemberAccessException,
    ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class MissingMemberException : public MemberAccessException,
    ISerializable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type MissingMemberException =
    class
        inherit MemberAccessException
        interface ISerializable
    end

通常如果代码尝试访问不存在类的成员，则生成编译错误。MissingMemberException 旨在处理字段或方法在一个程序集内被删除或重命名，但此更改没有反映在第二个程序集中的情况。运行时，当第二个程序集中的代码尝试访问第一个程序集中缺少的成员时，将引发 MissingMemberException。 通常如果代码尝试访问不存在类的成员，则生成编译错误。MissingMemberException 旨在处理字段或方法在一个程序集内被删除或重命名，但此更改没有反映在第二个程序集中的情况。运行时，当第二个程序集中的代码尝试访问第一个程序集中缺少的成员时，将引发 MissingMemberException。 通常如果代码尝试访问不存在类的成员，则生成编译错误。MissingMemberException 旨在处理字段或方法在一个程序集内被删除或重命名，但此更改没有反映在第二个程序集中的情况。运行时，当第二个程序集中的代码尝试访问第一个程序集中缺少的成员时，将引发 MissingMemberException。

MissingMemberException 是 MissingFieldException 和 MissingMethodException 的基类。一般情况下，最好使用 MissingMemberException 的一个派生类来更精确地指示错误的具体特性。如果只对捕获缺少成员这样的一般错误情况感兴趣，则引发 MissingMemberException。 MissingMemberException 是 MissingFieldException 和 MissingMethodException 的基类。一般情况下，最好使用 MissingMemberException 的一个派生类来更精确地指示错误的具体特性。如果只对捕获缺少成员这样的一般错误情况感兴趣，则引发 MissingMemberException。 MissingMemberException 是 MissingFieldException 和 MissingMethodException 的基类。一般情况下，最好使用 MissingMemberException 的一个派生类来更精确地指示错误的具体特性。如果只对捕获缺少成员这样的一般错误情况感兴趣，则引发 MissingMemberException。

MissingMemberException 使用值为 0x80131512 的 HRESULT COR_E_MISSINGMEMBER。

有关 MissingMemberException 实例的初始属性值列表，请参见 MissingMemberException 构造函数。

此示例演示在您尝试使用反射来调用不存在的方法和访问不存在的字段时所发生的情况。应用程序通过捕捉 MissingMethodException、MissingFieldException 和 MissingMemberException 来恢复。 此示例演示在您尝试使用反射来调用不存在的方法和访问不存在的字段时所发生的情况。应用程序通过捕捉 MissingMethodException、MissingFieldException 和 MissingMemberException 来恢复。

Imports System
Imports System.Reflection

Public Class App
    Public Shared Sub Main()
        Try
            ' Attempt to call a static DoSomething method defined in the App class.
            ' However, because the App class does not define this method,
            ' a MissingMethodException is thrown.
            GetType(App).InvokeMember("DoSomething", BindingFlags.Static Or BindingFlags.InvokeMethod, _
                                       Nothing, Nothing, Nothing)
        Catch e As MissingMethodException
            ' Show the user that the DoSomething method cannot be called.
            Console.WriteLine("Unable to call the DoSomething method: {0}", e.Message)
        End Try
        Try
            ' Attempt to access a static AField field defined in the App class.
            ' However, because the App class does not define this field,
            ' a MissingFieldException is thrown.
            GetType(App).InvokeMember("AField", BindingFlags.Static Or BindingFlags.SetField, _
                                       Nothing, Nothing, New [Object]() {5})
        Catch e As MissingFieldException
            ' Show the user that the AField field cannot be accessed.
            Console.WriteLine("Unable to access the AField field: {0}", e.Message)
        End Try
        Try
            ' Attempt to access a static AnotherField field defined in the App class.
            ' However, because the App class does not define this field,
            ' a MissingFieldException is thrown.
            GetType(App).InvokeMember("AnotherField", BindingFlags.Static Or BindingFlags.GetField, _
                                       Nothing, Nothing, Nothing)
        Catch e As MissingMemberException
            ' Notice that this code is catching MissingMemberException which is the
            ' base class of MissingMethodException and MissingFieldException.
            ' Show the user that the AnotherField field cannot be accessed.
            Console.WriteLine("Unable to access the AnotherField field: {0}", e.Message)
        End Try
    End Sub
End Class
' This code example produces the following output:
'
' Unable to call the DoSomething method: Method 'App.DoSomething' not found.
' Unable to access the AField field: Field 'App.AField' not found.
' Unable to access the AnotherField field: Field 'App.AnotherField' not found.

using System;
using System.Reflection;

public class App
{
    public static void Main()
    {

        try
        {
            // Attempt to call a static DoSomething method defined in the App class.
            // However, because the App class does not define this method,
            // a MissingMethodException is thrown.
            typeof(App).InvokeMember("DoSomething", BindingFlags.Static |
                BindingFlags.InvokeMethod, null, null, null);
        }
        catch (MissingMethodException e)
        {
            // Show the user that the DoSomething method cannot be called.
            Console.WriteLine("Unable to call the DoSomething method: {0}", e.Message);
        }

        try
        {
            // Attempt to access a static AField field defined in the App class.
            // However, because the App class does not define this field,
            // a MissingFieldException is thrown.
            typeof(App).InvokeMember("AField", BindingFlags.Static | BindingFlags.SetField,
                null, null, new Object[] { 5 });
        }
        catch (MissingFieldException e)
        {
         // Show the user that the AField field cannot be accessed.
         Console.WriteLine("Unable to access the AField field: {0}", e.Message);
        }

        try
        {
            // Attempt to access a static AnotherField field defined in the App class.
            // However, because the App class does not define this field,
            // a MissingFieldException is thrown.
            typeof(App).InvokeMember("AnotherField", BindingFlags.Static |
                BindingFlags.GetField, null, null, null);
        }
        catch (MissingMemberException e)
        {
         // Notice that this code is catching MissingMemberException which is the
         // base class of MissingMethodException and MissingFieldException.
         // Show the user that the AnotherField field cannot be accessed.
         Console.WriteLine("Unable to access the AnotherField field: {0}", e.Message);
        }
    }
}
// This code example produces the following output:
//
// Unable to call the DoSomething method: Method 'App.DoSomething' not found.
// Unable to access the AField field: Field 'App.AField' not found.
// Unable to access the AnotherField field: Field 'App.AnotherField' not found.

using namespace System;
using namespace System::Reflection;

ref class App
{
};

int main()
{
    try
    {
        // Attempt to call a static DoSomething method defined in the App class.
        // However, because the App class does not define this method,
        // a MissingMethodException is thrown.
        App::typeid->InvokeMember("DoSomething", BindingFlags::Static |
            BindingFlags::InvokeMethod, nullptr, nullptr, nullptr);
    }
    catch (MissingMethodException^ ex)
    {
        // Show the user that the DoSomething method cannot be called.
        Console::WriteLine("Unable to call the DoSomething method: {0}",
            ex->Message);
    }

    try
    {
        // Attempt to access a static AField field defined in the App class.
        // However, because the App class does not define this field,
        // a MissingFieldException is thrown.
        App::typeid->InvokeMember("AField", BindingFlags::Static |
            BindingFlags::SetField, nullptr, nullptr, gcnew array<Object^>{5});
    }
    catch (MissingFieldException^ ex)
    {
        // Show the user that the AField field cannot be accessed.
        Console::WriteLine("Unable to access the AField field: {0}",
            ex->Message);
    }

    try
    {
        // Attempt to access a static AnotherField field defined in the App class.
        // However, because the App class does not define this field,
        // a MissingFieldException is thrown.
        App::typeid->InvokeMember("AnotherField", BindingFlags::Static |
            BindingFlags::GetField, nullptr, nullptr, nullptr);
    }
    catch (MissingMemberException^ ex)
    {
        // Notice that this code is catching MissingMemberException which is the
        // base class of MissingMethodException and MissingFieldException.
        // Show the user that the AnotherField field cannot be accessed.
        Console::WriteLine("Unable to access the AnotherField field: {0}",
            ex->Message);
    }
}
// This code produces the following output.
//
// Unable to call the DoSomething method: Method 'App.DoSomething' not found.
// Unable to access the AField field: Field 'App.AField' not found.
// Unable to access the AnotherField field: Field 'App.AnotherField' not found.

System System..::.MissingMemberExceptionMissingMemberException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingMemberException 成员
System 命名空间
Exception
MissingFieldException
MissingMethodException

其他资源

处理和引发异常


MissingMemberException 成员

MissingMemberException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMemberException 类

尝试动态访问不存在的类成员时引发的异常。

MissingMemberException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MissingMemberException 类
System 命名空间


MissingMemberException 构造函数

MissingMemberException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMemberException 类

初始化 MissingMemberException 类的一个新实例。

名称 说明
页首

参考

MissingMemberException 类
MissingMemberException 成员
System 命名空间


MissingMemberException 构造函数

MissingMemberException 构造函数
MissingMemberException 类

初始化 MissingMemberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public MissingMemberException()
public:
MissingMemberException()
new : unit -> MissingMemberException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“尝试访问缺少的成员。”。此消息将考虑当前系统区域性。

下表显示 MissingMemberException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误信息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingMemberException 类
MissingMemberException 成员
MissingMemberException 重载
System 命名空间


MissingMemberException 构造函数 (String)

MissingMemberException 构造函数 (String)
MissingMemberException 类

使用指定错误消息初始化 MissingMemberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public MissingMemberException(
    string message
)
public:
MissingMemberException(
    String^ message
)
new :
        message:string -> MissingMemberException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 MissingMemberException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingMemberException 类
MissingMemberException 成员
MissingMemberException 重载
System 命名空间


MissingMemberException 构造函数 (SerializationInfo, StreamingContext)

MissingMemberException 构造函数 (SerializationInfo, StreamingContext)
MissingMemberException 类

用序列化数据初始化 MissingMemberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected MissingMemberException(
    SerializationInfo info,
    StreamingContext context
)
protected:
MissingMemberException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> MissingMemberException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。 在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMemberException 类
MissingMemberException 成员
MissingMemberException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


MissingMemberException 构造函数 (String, Exception)

MissingMemberException 构造函数 (String, Exception)
MissingMemberException 类

使用指定错误消息以及对内部异常（为该异常的根源）的引用来初始化 MissingMemberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public MissingMemberException(
    string message,
    Exception inner
)
public:
MissingMemberException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> MissingMemberException

参数

message
类型： System String
inner
类型： System Exception
导致当前 Exception 的 Exception 的实例。如果 inner 不是空引用（在 Visual Basic 中为 Nothing），则在处理 inner 的 catch 块中引发当前的 Exception。 导致当前 Exception 的 Exception 的实例。如果 inner 不是空引用（在 Visual Basic 中为 Nothing），则在处理 inner 的 catch 块中引发当前的 Exception。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 MissingMemberException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingMemberException 类
MissingMemberException 成员
MissingMemberException 重载
System 命名空间
Exception

其他资源

处理和引发异常


MissingMemberException 构造函数 (String, String)

MissingMemberException 构造函数 (String, String)
MissingMemberException 类

使用指定的类名称和成员名称初始化 MissingMemberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    className As String, _
    memberName As String _
)
public MissingMemberException(
    string className,
    string memberName
)
public:
MissingMemberException(
    String^ className,
    String^ memberName
)
new :
        className:string *
        memberName:string -> MissingMemberException

参数

className
类型： System String
尝试访问不存在的成员所用的类名称。
memberName
类型： System String
无法访问的成员名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMemberException 类
MissingMemberException 成员
MissingMemberException 重载
System 命名空间


MissingMemberException 字段

MissingMemberException 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMemberException 类

MissingMemberException 类型公开以下成员。

名称 说明
页首

参考

MissingMemberException 类
System 命名空间


MissingMemberException ..::.ClassName 字段

MissingMemberException
.
.
::
.
ClassName 字段
MissingMemberException 类

保留缺少成员的类名。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected ClassName As String
protected string ClassName
protected:
String^ ClassName
val mutable ClassName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMemberException 类
MissingMemberException 成员
System 命名空间


MissingMemberException ..::.MemberName 字段

MissingMemberException
.
.
::
.
MemberName 字段
MissingMemberException 类

保留缺少成员的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MemberName As String
protected string MemberName
protected:
String^ MemberName
val mutable MemberName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMemberException 类
MissingMemberException 成员
System 命名空间


MissingMemberException ..::.Signature 字段

MissingMemberException
.
.
::
.
Signature 字段
MissingMemberException 类

保留缺少成员的签名。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Signature As Byte()
protected byte[] Signature
protected:
array<unsigned char>^ Signature
val mutable Signature: byte[]

Signature 包含表示缺少成员签名的 Byte 值。

Format 用于格式化签名。有关附加信息，请参见 SignatureHelper、SignatureToken 和 String。 Format 用于格式化签名。有关附加信息，请参见 SignatureHelper、SignatureToken 和 String。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMemberException 类
MissingMemberException 成员
System 命名空间
SignatureHelper
SignatureToken


MissingMemberException 方法

MissingMemberException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMemberException 类

MissingMemberException 类型公开以下成员。

名称 说明
页首

参考

MissingMemberException 类
System 命名空间


MissingMemberException ..::.GetObjectData 方法

MissingMemberException
.
.
::
.
GetObjectData 方法
MissingMemberException 类

用类名、成员名、缺少成员的签名和其他异常信息设置 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

实现

异常 | 条件
ArgumentNullException | info 对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。 GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。

有关更多信息，请参见 SerializationInfo。

  • SecurityPermission

    用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand 用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMemberException 类
MissingMemberException 成员
System 命名空间
SerializationInfo
StreamingContext


MissingMemberException 属性

MissingMemberException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMemberException 类

MissingMemberException 类型公开以下成员。

名称 说明
页首

参考

MissingMemberException 类
System 命名空间


MissingMemberException ..::.Message 属性

MissingMemberException
.
.
::
.
Message 属性
MissingMemberException 类

获取显示类名、成员名和缺少成员签名的文本字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property Message As String
    Get
public override string Message { get; }
public:
virtual property String^ Message {
    String^ get () override;
}
abstract Message : string
override Message : string

属性值

类型： System String
错误消息字符串。

实现

如果构造对象时没有指定类名，则返回从基类继承的默认文本字符串。

此属性重写 Message。应本地化错误消息。 此属性重写 Message。应本地化错误消息。

此属性为只读。

下面的示例阐释了 Message 属性。此代码示例摘自一个为 MissingMemberException 类提供的更大的示例。 下面的示例阐释了 Message 属性。此代码示例摘自一个为 MissingMemberException 类提供的更大的示例。

    Try
        ' Attempt to access a static AnotherField field defined in the App class.
        ' However, because the App class does not define this field,
        ' a MissingFieldException is thrown.
        GetType(App).InvokeMember("AnotherField", BindingFlags.Static Or BindingFlags.GetField, _
                                   Nothing, Nothing, Nothing)
    Catch e As MissingMemberException
        ' Notice that this code is catching MissingMemberException which is the
        ' base class of MissingMethodException and MissingFieldException.
        ' Show the user that the AnotherField field cannot be accessed.
        Console.WriteLine("Unable to access the AnotherField field: {0}", e.Message)
    End Try
End Sub

try
{
    // Attempt to access a static AnotherField field defined in the App class.
    // However, because the App class does not define this field,
    // a MissingFieldException is thrown.
    typeof(App).InvokeMember("AnotherField", BindingFlags.Static |
        BindingFlags.GetField, null, null, null);
}
catch (MissingMemberException e)
{
 // Notice that this code is catching MissingMemberException which is the
 // base class of MissingMethodException and MissingFieldException.
 // Show the user that the AnotherField field cannot be accessed.
 Console.WriteLine("Unable to access the AnotherField field: {0}", e.Message);
}

try
{
    // Attempt to access a static AnotherField field defined in the App class.
    // However, because the App class does not define this field,
    // a MissingFieldException is thrown.
    App::typeid->InvokeMember("AnotherField", BindingFlags::Static |
        BindingFlags::GetField, nullptr, nullptr, nullptr);
}
catch (MissingMemberException^ ex)
{
    // Notice that this code is catching MissingMemberException which is the
    // base class of MissingMethodException and MissingFieldException.
    // Show the user that the AnotherField field cannot be accessed.
    Console::WriteLine("Unable to access the AnotherField field: {0}",
        ex->Message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMemberException 类
MissingMemberException 成员
System 命名空间
Exception
MissingFieldException
MissingMethodException

其他资源

处理和引发异常


MissingMemberException 事件

MissingMemberException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMemberException 类

MissingMemberException 类型公开以下成员。

名称 说明
页首

参考

MissingMemberException 类
System 命名空间


MissingMethodException 类

MissingMethodException 类
成员

尝试动态访问不存在的方法时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class MissingMethodException _
    Inherits MissingMemberException _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class MissingMethodException : MissingMemberException,
    ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class MissingMethodException : public MissingMemberException,
    ISerializable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type MissingMethodException =
    class
        inherit MissingMemberException
        interface ISerializable
    end

通常，如果代码尝试访问不存在的类方法，会生成编译错误。MissingMethodException 则设计来处理这样一种情况：尝试动态访问程序集中已重命名或已删除的方法，而该程序集并不是按其强名称来引用的。当相关程序集中的代码尝试访问已经修改的程序集中已不存在的方法时，就会引发 MissingMethodException。 通常，如果代码尝试访问不存在的类方法，会生成编译错误。MissingMethodException 则设计来处理这样一种情况：尝试动态访问程序集中已重命名或已删除的方法，而该程序集并不是按其强名称来引用的。当相关程序集中的代码尝试访问已经修改的程序集中已不存在的方法时，就会引发 MissingMethodException。 通常，如果代码尝试访问不存在的类方法，会生成编译错误。MissingMethodException 则设计来处理这样一种情况：尝试动态访问程序集中已重命名或已删除的方法，而该程序集并不是按其强名称来引用的。当相关程序集中的代码尝试访问已经修改的程序集中已不存在的方法时，就会引发 MissingMethodException。

MissingMethodException 使用值为 0x80131513 的 HRESULT COR_E_MISSINGMETHOD。

有关 MissingMethodException 实例的初始属性值列表，请参见 MissingMethodException 构造函数。

此示例演示在您尝试使用反射来调用不存在的方法和访问不存在的字段时所发生的情况。应用程序通过捕捉 MissingMethodException、MissingFieldException 和 MissingMemberException 来恢复。 此示例演示在您尝试使用反射来调用不存在的方法和访问不存在的字段时所发生的情况。应用程序通过捕捉 MissingMethodException、MissingFieldException 和 MissingMemberException 来恢复。

Imports System
Imports System.Reflection

Public Class App
    Public Shared Sub Main()
        Try
            ' Attempt to call a static DoSomething method defined in the App class.
            ' However, because the App class does not define this method,
            ' a MissingMethodException is thrown.
            GetType(App).InvokeMember("DoSomething", BindingFlags.Static Or BindingFlags.InvokeMethod, _
                                       Nothing, Nothing, Nothing)
        Catch e As MissingMethodException
            ' Show the user that the DoSomething method cannot be called.
            Console.WriteLine("Unable to call the DoSomething method: {0}", e.Message)
        End Try
        Try
            ' Attempt to access a static AField field defined in the App class.
            ' However, because the App class does not define this field,
            ' a MissingFieldException is thrown.
            GetType(App).InvokeMember("AField", BindingFlags.Static Or BindingFlags.SetField, _
                                       Nothing, Nothing, New [Object]() {5})
        Catch e As MissingFieldException
            ' Show the user that the AField field cannot be accessed.
            Console.WriteLine("Unable to access the AField field: {0}", e.Message)
        End Try
        Try
            ' Attempt to access a static AnotherField field defined in the App class.
            ' However, because the App class does not define this field,
            ' a MissingFieldException is thrown.
            GetType(App).InvokeMember("AnotherField", BindingFlags.Static Or BindingFlags.GetField, _
                                       Nothing, Nothing, Nothing)
        Catch e As MissingMemberException
            ' Notice that this code is catching MissingMemberException which is the
            ' base class of MissingMethodException and MissingFieldException.
            ' Show the user that the AnotherField field cannot be accessed.
            Console.WriteLine("Unable to access the AnotherField field: {0}", e.Message)
        End Try
    End Sub
End Class
' This code example produces the following output:
'
' Unable to call the DoSomething method: Method 'App.DoSomething' not found.
' Unable to access the AField field: Field 'App.AField' not found.
' Unable to access the AnotherField field: Field 'App.AnotherField' not found.

using System;
using System.Reflection;

public class App
{
    public static void Main()
    {

        try
        {
            // Attempt to call a static DoSomething method defined in the App class.
            // However, because the App class does not define this method,
            // a MissingMethodException is thrown.
            typeof(App).InvokeMember("DoSomething", BindingFlags.Static |
                BindingFlags.InvokeMethod, null, null, null);
        }
        catch (MissingMethodException e)
        {
            // Show the user that the DoSomething method cannot be called.
            Console.WriteLine("Unable to call the DoSomething method: {0}", e.Message);
        }

        try
        {
            // Attempt to access a static AField field defined in the App class.
            // However, because the App class does not define this field,
            // a MissingFieldException is thrown.
            typeof(App).InvokeMember("AField", BindingFlags.Static | BindingFlags.SetField,
                null, null, new Object[] { 5 });
        }
        catch (MissingFieldException e)
        {
         // Show the user that the AField field cannot be accessed.
         Console.WriteLine("Unable to access the AField field: {0}", e.Message);
        }

        try
        {
            // Attempt to access a static AnotherField field defined in the App class.
            // However, because the App class does not define this field,
            // a MissingFieldException is thrown.
            typeof(App).InvokeMember("AnotherField", BindingFlags.Static |
                BindingFlags.GetField, null, null, null);
        }
        catch (MissingMemberException e)
        {
         // Notice that this code is catching MissingMemberException which is the
         // base class of MissingMethodException and MissingFieldException.
         // Show the user that the AnotherField field cannot be accessed.
         Console.WriteLine("Unable to access the AnotherField field: {0}", e.Message);
        }
    }
}
// This code example produces the following output:
//
// Unable to call the DoSomething method: Method 'App.DoSomething' not found.
// Unable to access the AField field: Field 'App.AField' not found.
// Unable to access the AnotherField field: Field 'App.AnotherField' not found.

using namespace System;
using namespace System::Reflection;

ref class App
{
};

int main()
{
    try
    {
        // Attempt to call a static DoSomething method defined in the App class.
        // However, because the App class does not define this method,
        // a MissingMethodException is thrown.
        App::typeid->InvokeMember("DoSomething", BindingFlags::Static |
            BindingFlags::InvokeMethod, nullptr, nullptr, nullptr);
    }
    catch (MissingMethodException^ ex)
    {
        // Show the user that the DoSomething method cannot be called.
        Console::WriteLine("Unable to call the DoSomething method: {0}",
            ex->Message);
    }

    try
    {
        // Attempt to access a static AField field defined in the App class.
        // However, because the App class does not define this field,
        // a MissingFieldException is thrown.
        App::typeid->InvokeMember("AField", BindingFlags::Static |
            BindingFlags::SetField, nullptr, nullptr, gcnew array<Object^>{5});
    }
    catch (MissingFieldException^ ex)
    {
        // Show the user that the AField field cannot be accessed.
        Console::WriteLine("Unable to access the AField field: {0}",
            ex->Message);
    }

    try
    {
        // Attempt to access a static AnotherField field defined in the App class.
        // However, because the App class does not define this field,
        // a MissingFieldException is thrown.
        App::typeid->InvokeMember("AnotherField", BindingFlags::Static |
            BindingFlags::GetField, nullptr, nullptr, nullptr);
    }
    catch (MissingMemberException^ ex)
    {
        // Notice that this code is catching MissingMemberException which is the
        // base class of MissingMethodException and MissingFieldException.
        // Show the user that the AnotherField field cannot be accessed.
        Console::WriteLine("Unable to access the AnotherField field: {0}",
            ex->Message);
    }
}
// This code produces the following output.
//
// Unable to call the DoSomething method: Method 'App.DoSomething' not found.
// Unable to access the AField field: Field 'App.AField' not found.
// Unable to access the AnotherField field: Field 'App.AnotherField' not found.

System System..::.MissingMethodExceptionMissingMethodException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingMethodException 成员
System 命名空间
Exception

其他资源

处理和引发异常


MissingMethodException 成员

MissingMethodException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMethodException 类

尝试动态访问不存在的方法时引发的异常。

MissingMethodException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MissingMethodException 类
System 命名空间


MissingMethodException 构造函数

MissingMethodException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMethodException 类

初始化 MissingMethodException 类的新实例。

名称 说明
页首

参考

MissingMethodException 类
MissingMethodException 成员
System 命名空间


MissingMethodException 构造函数

MissingMethodException 构造函数
MissingMethodException 类

初始化 MissingMethodException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public MissingMethodException()
public:
MissingMethodException()
new : unit -> MissingMethodException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“尝试访问缺少的方法。”。此消息将考虑当前系统区域性。

下表显示 MissingMethodException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingMethodException 类
MissingMethodException 成员
MissingMethodException 重载
System 命名空间


MissingMethodException 构造函数 (String)

MissingMethodException 构造函数 (String)
MissingMethodException 类

使用指定错误信息初始化 MissingMethodException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public MissingMethodException(
    string message
)
public:
MissingMethodException(
    String^ message
)
new :
        message:string -> MissingMethodException

参数

message
类型： System String
描述该错误的 String。

message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 MissingMethodException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingMethodException 类
MissingMethodException 成员
MissingMethodException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


MissingMethodException 构造函数 (SerializationInfo, StreamingContext)

MissingMethodException 构造函数 (SerializationInfo, StreamingContext)
MissingMethodException 类

用序列化数据初始化 MissingMethodException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected MissingMethodException(
    SerializationInfo info,
    StreamingContext context
)
protected:
MissingMethodException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> MissingMethodException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMethodException 类
MissingMethodException 成员
MissingMethodException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


MissingMethodException 构造函数 (String, Exception)

MissingMethodException 构造函数 (String, Exception)
MissingMethodException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 MissingMethodException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public MissingMethodException(
    string message,
    Exception inner
)
public:
MissingMethodException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> MissingMethodException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 MissingMethodException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingMethodException 类
MissingMethodException 成员
MissingMethodException 重载
System 命名空间
Exception

其他资源

处理和引发异常


MissingMethodException 构造函数 (String, String)

MissingMethodException 构造函数 (String, String)
MissingMethodException 类

使用指定的类名称和方法名称初始化 MissingMethodException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    className As String, _
    methodName As String _
)
public MissingMethodException(
    string className,
    string methodName
)
public:
MissingMethodException(
    String^ className,
    String^ methodName
)
new :
        className:string *
        methodName:string -> MissingMethodException

参数

className
类型： System String
尝试访问不存在的方法时所用的类名。
methodName
类型： System String
无法访问的方法名。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMethodException 类
MissingMethodException 成员
MissingMethodException 重载
System 命名空间


MissingMethodException 字段

MissingMethodException 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMethodException 类

MissingMethodException 类型公开以下成员。

名称 说明
页首

参考

MissingMethodException 类
System 命名空间


MissingMethodException 方法

MissingMethodException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMethodException 类

MissingMethodException 类型公开以下成员。

名称 说明
页首

参考

MissingMethodException 类
System 命名空间


MissingMethodException 属性

MissingMethodException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMethodException 类

MissingMethodException 类型公开以下成员。

名称 说明
页首

参考

MissingMethodException 类
System 命名空间


MissingMethodException ..::.Message 属性

MissingMethodException
.
.
::
.
Message 属性
MissingMethodException 类

获取显示类名、方法名称和缺少方法签名的文本字符串。此属性为只读。 获取显示类名、方法名称和缺少方法签名的文本字符串。此属性为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property Message As String
    Get
public override string Message { get; }
public:
virtual property String^ Message {
    String^ get () override;
}
abstract Message : string
override Message : string

属性值

类型： System String
错误信息字符串。

实现

如果构造对象时没有指定类名，则返回从基类继承的默认文本字符串。

此属性重写 Message。应本地化错误信息。 此属性重写 Message。应本地化错误信息。

下面的示例阐释了 Message 属性。此代码示例摘自一个为 MissingMethodException 类提供的更大的示例。 下面的示例阐释了 Message 属性。此代码示例摘自一个为 MissingMethodException 类提供的更大的示例。

Try
    ' Attempt to call a static DoSomething method defined in the App class.
    ' However, because the App class does not define this method,
    ' a MissingMethodException is thrown.
    GetType(App).InvokeMember("DoSomething", BindingFlags.Static Or BindingFlags.InvokeMethod, _
                               Nothing, Nothing, Nothing)
Catch e As MissingMethodException
    ' Show the user that the DoSomething method cannot be called.
    Console.WriteLine("Unable to call the DoSomething method: {0}", e.Message)
End Try

try
{
    // Attempt to call a static DoSomething method defined in the App class.
    // However, because the App class does not define this method,
    // a MissingMethodException is thrown.
    typeof(App).InvokeMember("DoSomething", BindingFlags.Static |
        BindingFlags.InvokeMethod, null, null, null);
}
catch (MissingMethodException e)
{
    // Show the user that the DoSomething method cannot be called.
    Console.WriteLine("Unable to call the DoSomething method: {0}", e.Message);
}

try
{
    // Attempt to call a static DoSomething method defined in the App class.
    // However, because the App class does not define this method,
    // a MissingMethodException is thrown.
    App::typeid->InvokeMember("DoSomething", BindingFlags::Static |
        BindingFlags::InvokeMethod, nullptr, nullptr, nullptr);
}
catch (MissingMethodException^ ex)
{
    // Show the user that the DoSomething method cannot be called.
    Console::WriteLine("Unable to call the DoSomething method: {0}",
        ex->Message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingMethodException 类
MissingMethodException 成员
System 命名空间


MissingMethodException 事件

MissingMethodException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingMethodException 类

MissingMethodException 类型公开以下成员。

名称 说明
页首

参考

MissingMethodException 类
System 命名空间


ModuleHandle 结构

ModuleHandle 结构
成员

表示模块的运行时句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Structure ModuleHandle
[ComVisibleAttribute(true)]
public struct ModuleHandle
[ComVisibleAttribute(true)]
public value class ModuleHandle
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
type ModuleHandle =  struct end

静态 ResolveFieldHandle、ResolveMethodHandle 和 ResolveTypeHandle 方法向当前模块中的字段、方法和类型的运行时句柄提供有效的元数据标记解析。

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 成员
System 命名空间
Module


ModuleHandle 成员

ModuleHandle 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModuleHandle 结构

表示模块的运行时句柄。

ModuleHandle 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ModuleHandle 结构
System 命名空间


ModuleHandle 字段

ModuleHandle 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModuleHandle 结构

ModuleHandle 类型公开以下成员。

名称 说明
页首

参考

ModuleHandle 结构
System 命名空间


ModuleHandle ..::.EmptyHandle 字段

ModuleHandle
.
.
::
.
EmptyHandle 字段
ModuleHandle 结构

表示一个空模块句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly EmptyHandle As ModuleHandle
public static readonly ModuleHandle EmptyHandle
public:
static initonly ModuleHandle EmptyHandle
static val EmptyHandle: ModuleHandle

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle 方法

ModuleHandle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModuleHandle 结构

ModuleHandle 类型公开以下成员。

名称 说明
页首

参考

ModuleHandle 结构
System 命名空间


ModuleHandle ..::.Equals 方法

ModuleHandle
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModuleHandle 结构

确定指定的 ModuleHandle 结构是否等于当前的 ModuleHandle。

名称 说明
页首

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle ..::.Equals 方法 (ModuleHandle)

ModuleHandle
.
.
::
.
Equals 方法 (ModuleHandle)
ModuleHandle 结构

返回一个 Boolean 值，该值指示指定的 ModuleHandle 结构是否等于当前的 ModuleHandle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    handle As ModuleHandle _
) As Boolean
public bool Equals(
    ModuleHandle handle
)
public:
bool Equals(
    ModuleHandle handle
)
member Equals :
        handle:ModuleHandle -> bool

参数

handle
类型： System ModuleHandle
要与当前 ModuleHandle 比较的 ModuleHandle 结构。

返回值

类型： System Boolean
如果 handle 等于当前的 ModuleHandle 结构，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
Equals 重载
System 命名空间


ModuleHandle ..::.Equals 方法 (Object)

ModuleHandle
.
.
::
.
Equals 方法 (Object)
ModuleHandle 结构

返回一个 Boolean 值，该值指示指定对象是否是一个 ModuleHandle 结构，以及是否等于当前的 ModuleHandle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与当前 ModuleHandle 结构比较的对象。

返回值

类型： System Boolean
如果 obj 是 ModuleHandle 结构，且等于当前 ModuleHandle 结构，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
Equals 重载
System 命名空间


ModuleHandle ..::.GetHashCode 方法

ModuleHandle
.
.
::
.
GetHashCode 方法
ModuleHandle 结构
此成员重写 ValueType GetHashCode ，且该主题可能包括更完整的文档。

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32

一个 32 位有符号整数，它是该实例的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle ..::.GetRuntimeFieldHandleFromMetadataToken 方法

ModuleHandle
.
.
::
.
GetRuntimeFieldHandleFromMetadataToken 方法
ModuleHandle 结构

返回由指定元数据标记标识的字段的运行时句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetRuntimeFieldHandleFromMetadataToken ( _
    fieldToken As Integer _
) As RuntimeFieldHandle
public RuntimeFieldHandle GetRuntimeFieldHandleFromMetadataToken(
    int fieldToken
)
public:
RuntimeFieldHandle GetRuntimeFieldHandleFromMetadataToken(
    int fieldToken
)
member GetRuntimeFieldHandleFromMetadataToken :
        fieldToken:int -> RuntimeFieldHandle

参数

fieldToken
类型： System Int32
一个元数据标记，用于标识模块中的一个字段。

返回值

类型： System RuntimeFieldHandle
由 fieldToken 标识的字段的 RuntimeFieldHandle。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle ..::.GetRuntimeMethodHandleFromMetadataToken 方法

ModuleHandle
.
.
::
.
GetRuntimeMethodHandleFromMetadataToken 方法
ModuleHandle 结构

返回由指定元数据标记标识的方法或构造函数的运行时方法句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetRuntimeMethodHandleFromMetadataToken ( _
    methodToken As Integer _
) As RuntimeMethodHandle
public RuntimeMethodHandle GetRuntimeMethodHandleFromMetadataToken(
    int methodToken
)
public:
RuntimeMethodHandle GetRuntimeMethodHandleFromMetadataToken(
    int methodToken
)
member GetRuntimeMethodHandleFromMetadataToken :
        methodToken:int -> RuntimeMethodHandle

参数

methodToken
类型： System Int32
一个元数据标记，用于标识模块中的方法或构造函数。

返回值

类型： System RuntimeMethodHandle
由 methodToken 标识的方法或构造函数的 RuntimeMethodHandle。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle ..::.GetRuntimeTypeHandleFromMetadataToken 方法

ModuleHandle
.
.
::
.
GetRuntimeTypeHandleFromMetadataToken 方法
ModuleHandle 结构

返回由指定元数据标记标识的类型的运行时类型句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetRuntimeTypeHandleFromMetadataToken ( _
    typeToken As Integer _
) As RuntimeTypeHandle
public RuntimeTypeHandle GetRuntimeTypeHandleFromMetadataToken(
    int typeToken
)
public:
RuntimeTypeHandle GetRuntimeTypeHandleFromMetadataToken(
    int typeToken
)
member GetRuntimeTypeHandleFromMetadataToken :
        typeToken:int -> RuntimeTypeHandle

参数

typeToken
类型： System Int32
一个元数据标记，用于标识模块中的一个类型。

返回值

类型： System RuntimeTypeHandle
由 typeToken 标识的类型的 RuntimeTypeHandle。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle ..::.ResolveFieldHandle 方法

ModuleHandle
.
.
::
.
ResolveFieldHandle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModuleHandle 结构

返回由元数据标记标识的字段的运行时字段句柄。

名称 说明
页首

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle ..::.ResolveFieldHandle 方法 (Int32)

ModuleHandle
.
.
::
.
ResolveFieldHandle 方法 (Int32)
ModuleHandle 结构

返回由指定元数据标记标识的字段的运行时句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ResolveFieldHandle ( _
    fieldToken As Integer _
) As RuntimeFieldHandle
public RuntimeFieldHandle ResolveFieldHandle(
    int fieldToken
)
public:
RuntimeFieldHandle ResolveFieldHandle(
    int fieldToken
)
member ResolveFieldHandle :
        fieldToken:int -> RuntimeFieldHandle

参数

fieldToken
类型： System Int32
一个元数据标记，用于标识模块中的一个字段。

返回值

类型： System RuntimeFieldHandle
由 fieldToken 标识的字段的 RuntimeFieldHandle。
异常 | 条件
BadImageFormatException | metadataToken 不是当前模块范围内的有效标记。 - 或 - metadataToken 不是当前模块范围内的字段的标记。 - 或 - metadataToken 标识了一个字段，该字段的父 TypeSpec 有一个包含元素类型 var 或 mvar 的签名。
InvalidOperationException | 该方法在空字段句柄上调用。

要解析标识一个字段（该字段的父 TypeSpec 具有包含元素类型 var 或 mvar 的签名）的元数据标记，请使用 ResolveFieldHandle(Int32, array<RuntimeTypeHandle>[]()[], array<RuntimeTypeHandle>[]()[]) 方法重载，该重载允许您提供必要的上下文。

说明 说明

有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。 有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
ResolveFieldHandle 重载
System 命名空间


ModuleHandle ..::.ResolveFieldHandle 方法 (Int32, array<RuntimeTypeHandle >[]()[], array<RuntimeTypeHandle >[]()[])

ModuleHandle
.
.
::
.
ResolveFieldHandle 方法 (Int32,
array<
RuntimeTypeHandle
>
[]
()
[]
,
array<
RuntimeTypeHandle
>
[]
()
[]
)
ModuleHandle 结构

返回由指定元数据标记标识的字段的运行时字段句柄，指定标记所在范围内的类型和方法的泛型类型参数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ResolveFieldHandle ( _
    fieldToken As Integer, _
    typeInstantiationContext As RuntimeTypeHandle(), _
    methodInstantiationContext As RuntimeTypeHandle() _
) As RuntimeFieldHandle
public RuntimeFieldHandle ResolveFieldHandle(
    int fieldToken,
    RuntimeTypeHandle[] typeInstantiationContext,
    RuntimeTypeHandle[] methodInstantiationContext
)
public:
RuntimeFieldHandle ResolveFieldHandle(
    int fieldToken,
    array<RuntimeTypeHandle>^ typeInstantiationContext,
    array<RuntimeTypeHandle>^ methodInstantiationContext
)
member ResolveFieldHandle :
        fieldToken:int *
        typeInstantiationContext:RuntimeTypeHandle[] *
        methodInstantiationContext:RuntimeTypeHandle[] -> RuntimeFieldHandle

参数

fieldToken
类型： System Int32
一个元数据标记，用于标识模块中的一个字段。
typeInstantiationContext
类型：
array<
System RuntimeTypeHandle
>
[]
()
[]

RuntimeTypeHandle 结构的数组，表示标记所在范围内的类型的泛型类型参数，如果类型不是泛型，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
methodInstantiationContext
类型：
array<
System RuntimeTypeHandle
>
[]
()
[]

RuntimeTypeHandle 结构的数组，表示标记所在范围内的方法的泛型类型参数，如果方法不是泛型，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System RuntimeFieldHandle
由 fieldToken 标识的字段的 RuntimeFieldHandle。
异常 | 条件
BadImageFormatException | metadataToken 不是当前模块范围内的有效标记。 - 或 - metadataToken 不是当前模块范围内的字段的标记。 - 或 - metadataToken 标识了一个字段，该字段的父 TypeSpec 有一个包含元素类型 var 或 mvar 的签名。
InvalidOperationException | 该方法在空字段句柄上调用。
ArgumentOutOfRangeException | fieldToken 不是有效的标记。
说明 说明

有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。 有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
ResolveFieldHandle 重载
System 命名空间


ModuleHandle ..::.ResolveMethodHandle 方法

ModuleHandle
.
.
::
.
ResolveMethodHandle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModuleHandle 结构

返回由元数据标记标识的方法或构造函数的运行时方法句柄。

名称 说明
页首

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle ..::.ResolveMethodHandle 方法 (Int32)

ModuleHandle
.
.
::
.
ResolveMethodHandle 方法 (Int32)
ModuleHandle 结构

返回由指定元数据标记标识的方法或构造函数的运行时方法句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ResolveMethodHandle ( _
    methodToken As Integer _
) As RuntimeMethodHandle
public RuntimeMethodHandle ResolveMethodHandle(
    int methodToken
)
public:
RuntimeMethodHandle ResolveMethodHandle(
    int methodToken
)
member ResolveMethodHandle :
        methodToken:int -> RuntimeMethodHandle

参数

methodToken
类型： System Int32
一个元数据标记，用于标识模块中的方法或构造函数。

返回值

类型： System RuntimeMethodHandle
由 methodToken 标识的方法或构造函数的 RuntimeMethodHandle。
异常 | 条件
BadImageFormatException | methodToken 不是当前模块中方法的有效元数据标记。 - 或 - metadataToken 不是当前模块范围内的方法或构造函数的标记。 - 或 - metadataToken 是一个 MethodSpec，它的签名中包含元素类型 var 或 mvar。
InvalidOperationException | 该方法在空方法句柄上调用。

若要解析 MethodSpec（签名包含元素类型 var 或 mvar）的元数据标记，请使用 ResolveMethodHandle(Int32, array<RuntimeTypeHandle>[]()[], array<RuntimeTypeHandle>[]()[]) 方法重载，该方法允许您提供必要的上下文。

说明 说明

有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。 有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
ResolveMethodHandle 重载
System 命名空间


ModuleHandle ..::.ResolveMethodHandle 方法 (Int32, array<RuntimeTypeHandle >[]()[], array<RuntimeTypeHandle >[]()[])

ModuleHandle
.
.
::
.
ResolveMethodHandle 方法 (Int32,
array<
RuntimeTypeHandle
>
[]
()
[]
,
array<
RuntimeTypeHandle
>
[]
()
[]
)
ModuleHandle 结构

返回由指定元数据标记标识的方法或构造函数的运行时方法句柄，指定标记所在范围内的类型和方法的泛型类型参数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ResolveMethodHandle ( _
    methodToken As Integer, _
    typeInstantiationContext As RuntimeTypeHandle(), _
    methodInstantiationContext As RuntimeTypeHandle() _
) As RuntimeMethodHandle
public RuntimeMethodHandle ResolveMethodHandle(
    int methodToken,
    RuntimeTypeHandle[] typeInstantiationContext,
    RuntimeTypeHandle[] methodInstantiationContext
)
public:
RuntimeMethodHandle ResolveMethodHandle(
    int methodToken,
    array<RuntimeTypeHandle>^ typeInstantiationContext,
    array<RuntimeTypeHandle>^ methodInstantiationContext
)
member ResolveMethodHandle :
        methodToken:int *
        typeInstantiationContext:RuntimeTypeHandle[] *
        methodInstantiationContext:RuntimeTypeHandle[] -> RuntimeMethodHandle

参数

methodToken
类型： System Int32
一个元数据标记，用于标识模块中的方法或构造函数。
typeInstantiationContext
类型：
array<
System RuntimeTypeHandle
>
[]
()
[]

RuntimeTypeHandle 结构的数组，表示标记所在范围内的类型的泛型类型参数，如果类型不是泛型，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
methodInstantiationContext
类型：
array<
System RuntimeTypeHandle
>
[]
()
[]

返回值

类型： System RuntimeMethodHandle
由 methodToken 标识的方法或构造函数的 RuntimeMethodHandle。
异常 | 条件
BadImageFormatException | methodToken 不是当前模块中方法的有效元数据标记。 - 或 - metadataToken 不是当前模块范围内的方法或构造函数的标记。 - 或 - metadataToken 是一个 MethodSpec，它的签名中包含元素类型 var 或 mvar。
InvalidOperationException | 该方法在空方法句柄上调用。
ArgumentOutOfRangeException | methodToken 不是有效的标记。
说明 说明

有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。 有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
ResolveMethodHandle 重载
System 命名空间


ModuleHandle ..::.ResolveTypeHandle 方法

ModuleHandle
.
.
::
.
ResolveTypeHandle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModuleHandle 结构

返回由元数据标记标识的类型的运行时类型句柄。

名称 说明
页首

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle ..::.ResolveTypeHandle 方法 (Int32)

ModuleHandle
.
.
::
.
ResolveTypeHandle 方法 (Int32)
ModuleHandle 结构

返回由指定元数据标记标识的类型的运行时类型句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ResolveTypeHandle ( _
    typeToken As Integer _
) As RuntimeTypeHandle
public RuntimeTypeHandle ResolveTypeHandle(
    int typeToken
)
public:
RuntimeTypeHandle ResolveTypeHandle(
    int typeToken
)
member ResolveTypeHandle :
        typeToken:int -> RuntimeTypeHandle

参数

typeToken
类型： System Int32
一个元数据标记，用于标识模块中的一个类型。

返回值

类型： System RuntimeTypeHandle
由 typeToken 标识的类型的 RuntimeTypeHandle。
异常 | 条件
BadImageFormatException | typeToken 不是当前模块中类型的有效元数据标记。 - 或 - metadataToken 不是当前模块范围内的类型的标记。 - 或 - metadataToken 是一个 TypeSpec，它的签名中包含元素类型 var 或 mvar。
InvalidOperationException | 该方法在空类型句柄上调用。

若要解析 TypeSpec（签名包含元素类型 var 或 mvar）的元数据标记，请使用 ResolveTypeHandle(Int32, array<RuntimeTypeHandle>[]()[], array<RuntimeTypeHandle>[]()[]) 方法重载，该方法允许您提供必要的上下文。

说明 说明

有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。 有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
ResolveTypeHandle 重载
System 命名空间


ModuleHandle ..::.ResolveTypeHandle 方法 (Int32, array<RuntimeTypeHandle >[]()[], array<RuntimeTypeHandle >[]()[])

ModuleHandle
.
.
::
.
ResolveTypeHandle 方法 (Int32,
array<
RuntimeTypeHandle
>
[]
()
[]
,
array<
RuntimeTypeHandle
>
[]
()
[]
)
ModuleHandle 结构

返回由指定元数据标记标识的类型的运行时类型句柄，指定标记所在范围内的类型和方法的泛型类型参数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ResolveTypeHandle ( _
    typeToken As Integer, _
    typeInstantiationContext As RuntimeTypeHandle(), _
    methodInstantiationContext As RuntimeTypeHandle() _
) As RuntimeTypeHandle
public RuntimeTypeHandle ResolveTypeHandle(
    int typeToken,
    RuntimeTypeHandle[] typeInstantiationContext,
    RuntimeTypeHandle[] methodInstantiationContext
)
public:
RuntimeTypeHandle ResolveTypeHandle(
    int typeToken,
    array<RuntimeTypeHandle>^ typeInstantiationContext,
    array<RuntimeTypeHandle>^ methodInstantiationContext
)
member ResolveTypeHandle :
        typeToken:int *
        typeInstantiationContext:RuntimeTypeHandle[] *
        methodInstantiationContext:RuntimeTypeHandle[] -> RuntimeTypeHandle

参数

typeToken
类型： System Int32
一个元数据标记，用于标识模块中的一个类型。
typeInstantiationContext
类型：
array<
System RuntimeTypeHandle
>
[]
()
[]

RuntimeTypeHandle 结构的数组，表示标记所在范围内的类型的泛型类型参数，如果类型不是泛型，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
methodInstantiationContext
类型：
array<
System RuntimeTypeHandle
>
[]
()
[]

RuntimeTypeHandle 结构对象的数组，表示标记所在范围内的方法的泛型类型参数，如果方法不是泛型，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System RuntimeTypeHandle
由 typeToken 标识的类型的 RuntimeTypeHandle。
异常 | 条件
BadImageFormatException | typeToken 不是当前模块中类型的有效元数据标记。 - 或 - metadataToken 不是当前模块范围内的类型的标记。 - 或 - metadataToken 是一个 TypeSpec，它的签名中包含元素类型 var 或 mvar。
InvalidOperationException | 该方法在空类型句柄上调用。
ArgumentOutOfRangeException | typeToken 不是有效的标记。
说明 说明

有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。 有关元数据标记的信息，请参考公共语言基础结构 (Common Language Infrastructure, CLI) 文档，特别是其中的第二部分：元数据定义和语义 (Partition II: Metadata Definition and Semantics)。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
ResolveTypeHandle 重载
System 命名空间


ModuleHandle 运算符

ModuleHandle 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModuleHandle 结构

ModuleHandle 类型公开以下成员。

名称 说明
页首

参考

ModuleHandle 结构
System 命名空间


ModuleHandle ..::.Equality 运算符

ModuleHandle
.
.
::
.
Equality 运算符
ModuleHandle 结构

测试两个 ModuleHandle 结构是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    left As ModuleHandle, _
    right As ModuleHandle _
) As Boolean
public static bool operator ==(
    ModuleHandle left,
    ModuleHandle right
)
public:
static bool operator ==(
    ModuleHandle left,
    ModuleHandle right
)
static let inline (=)
        left:ModuleHandle *
        right:ModuleHandle  : bool

参数

left
类型： System ModuleHandle
相等运算符左侧的 ModuleHandle 结构。
right
类型： System ModuleHandle
相等运算符右侧的 ModuleHandle 结构。

返回值

类型： System Boolean
如果 ModuleHandle 结构相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle ..::.Inequality 运算符

ModuleHandle
.
.
::
.
Inequality 运算符
ModuleHandle 结构

测试两个 ModuleHandle 结构是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    left As ModuleHandle, _
    right As ModuleHandle _
) As Boolean
public static bool operator !=(
    ModuleHandle left,
    ModuleHandle right
)
public:
static bool operator !=(
    ModuleHandle left,
    ModuleHandle right
)
static let inline (<>)
        left:ModuleHandle *
        right:ModuleHandle  : bool

参数

left
类型： System ModuleHandle
不等运算符左侧的 ModuleHandle 结构。
right
类型： System ModuleHandle
不等运算符右侧的 ModuleHandle 结构。

返回值

类型： System Boolean
如果 ModuleHandle 结构不相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


ModuleHandle 属性

ModuleHandle 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModuleHandle 结构

ModuleHandle 类型公开以下成员。

名称 说明
页首

参考

ModuleHandle 结构
System 命名空间


ModuleHandle ..::.MDStreamVersion 属性

ModuleHandle
.
.
::
.
MDStreamVersion 属性
ModuleHandle 结构

获取元数据流版本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property MDStreamVersion As Integer
    Get
public int MDStreamVersion { get; }
public:
property int MDStreamVersion {
    int get ();
}
member MDStreamVersion : int

属性值

类型： System Int32
表示元数据流版本的 32 位整数。高序位的两个字节表示主版本号，低序位的两个字节表示次版本号。 表示元数据流版本的 32 位整数。高序位的两个字节表示主版本号，低序位的两个字节表示次版本号。
说明 说明

有关元数据标头的更多信息，请参见“Partition II: Metadata Definition and Semantics”（第二部分：元数据和语义）文档。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。 有关元数据标头的更多信息，请参见“Partition II: Metadata Definition and Semantics”（第二部分：元数据和语义）文档。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ModuleHandle 结构
ModuleHandle 成员
System 命名空间


MTAThreadAttribute 类

MTAThreadAttribute 类
成员

指示应用程序的 COM 线程模型为多线程单元 (MTA)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Method)> _
Public NotInheritable Class MTAThreadAttribute _
    Inherits Attribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Method)]
public sealed class MTAThreadAttribute : Attribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::Method)]
public ref class MTAThreadAttribute sealed : public Attribute
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
[<AttributeUsageAttribute(AttributeTargets.Method)>]
type MTAThreadAttribute =
    class
        inherit Attribute
    end

将此特性应用于入口点方法（C# 和 Visual Basic 中的 Main() 方法）。它对其他方法无效。若要设置在代码中启动的线程的单元状态，请在启动线程前使用 Thread..::.SetApartmentState 方法。 将此特性应用于入口点方法（C# 和 Visual Basic 中的 Main() 方法）。它对其他方法无效。若要设置在代码中启动的线程的单元状态，请在启动线程前使用 Thread..::.SetApartmentState 方法。 将此特性应用于入口点方法（C# 和 Visual Basic 中的 Main() 方法）。它对其他方法无效。若要设置在代码中启动的线程的单元状态，请在启动线程前使用 Thread..::.SetApartmentState 方法。

说明 说明

在 .NET Framework 1.0 版和 1.1 版中，在启动线程之前设置 Thread..::.ApartmentState 属性。

COM 线程模型只适用于使用 COM 互操作 的应用程序。如果将此特性应用到不使用 COM 互操作 的应用程序，将没有任何效果。 COM 线程模型只适用于使用 COM 互操作 的应用程序。如果将此特性应用到不使用 COM 互操作 的应用程序，将没有任何效果。

COM 线程模型可设置为单线程单元或多线程单元。如果应用程序线程实际调用了 COM 组件，则仅为 COM 互操作 初始化该线程。如果没有使用 COM 互操作，则不初始化该线程。 COM 线程模型可设置为单线程单元或多线程单元。如果应用程序线程实际调用了 COM 组件，则仅为 COM 互操作 初始化该线程。如果没有使用 COM 互操作，则不初始化该线程。 COM 线程模型可设置为单线程单元或多线程单元。如果应用程序线程实际调用了 COM 组件，则仅为 COM 互操作 初始化该线程。如果没有使用 COM 互操作，则不初始化该线程。

在 .NET Framework 1.0 版和 1.1 版中，在 Main() 上使用此特性（而不是在第一行代码上设置 Thread..::.ApartmentState 属性），以确保在执行任何启动代码之前设置线程模型。

重要说明 重要事项

在 .NET Framework 2.0 版中，如果在启动新线程之前尚未设置它们的单元状态，则这些新线程将初始化为 ApartmentState..::.MTA。默认情况下，主应用程序线程被初始化为 ApartmentState..::.MTA。您无法再通过在第一行代码上设置 Thread..::.ApartmentState 属性来将主应用程序线程设置为 ApartmentState..::.STA。应改用 STAThreadAttribute。 在 .NET Framework 2.0 版中，如果在启动新线程之前尚未设置它们的单元状态，则这些新线程将初始化为 ApartmentState..::.MTA。默认情况下，主应用程序线程被初始化为 ApartmentState..::.MTA。您无法再通过在第一行代码上设置 Thread..::.ApartmentState 属性来将主应用程序线程设置为 ApartmentState..::.STA。应改用 STAThreadAttribute。 在 .NET Framework 2.0 版中，如果在启动新线程之前尚未设置它们的单元状态，则这些新线程将初始化为 ApartmentState..::.MTA。默认情况下，主应用程序线程被初始化为 ApartmentState..::.MTA。您无法再通过在第一行代码上设置 Thread..::.ApartmentState 属性来将主应用程序线程设置为 ApartmentState..::.STA。应改用 STAThreadAttribute。 在 .NET Framework 2.0 版中，如果在启动新线程之前尚未设置它们的单元状态，则这些新线程将初始化为 ApartmentState..::.MTA。默认情况下，主应用程序线程被初始化为 ApartmentState..::.MTA。您无法再通过在第一行代码上设置 Thread..::.ApartmentState 属性来将主应用程序线程设置为 ApartmentState..::.STA。应改用 STAThreadAttribute。

在 .NET Framework 2.0 版中，还可以使用 /CLRTHREADATTRIBUTE（设置 CLR 线程特性） 链接器选项指定 C++ 应用程序的 COM 线程模型。

ASP.NET 应用程序应该将 @ Page 指令的 ASPCompat 特性设置为 true，以强制由 STA 线程池提供页面服务。

System System..::.MTAThreadAttributeMTAThreadAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MTAThreadAttribute 成员
System 命名空间
STAThreadAttribute


MTAThreadAttribute 成员

MTAThreadAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MTAThreadAttribute 类

指示应用程序的 COM 线程模型为多线程单元 (MTA)。

MTAThreadAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MTAThreadAttribute 类
System 命名空间


MTAThreadAttribute 构造函数

MTAThreadAttribute 构造函数
MTAThreadAttribute 类

初始化 MTAThreadAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public MTAThreadAttribute()
public:
MTAThreadAttribute()
new : unit -> MTAThreadAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MTAThreadAttribute 类
MTAThreadAttribute 成员
System 命名空间
STAThreadAttribute


MTAThreadAttribute 方法

MTAThreadAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MTAThreadAttribute 类

MTAThreadAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

MTAThreadAttribute 类
System 命名空间


MTAThreadAttribute 属性

MTAThreadAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MTAThreadAttribute 类

MTAThreadAttribute 类型公开以下成员。

名称 说明
页首

参考

MTAThreadAttribute 类
System 命名空间


MulticastDelegate 类

MulticastDelegate 类
成员

表示多路广播委托；即，其调用列表中可以拥有多个元素的委托。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class MulticastDelegate _
    Inherits Delegate
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class MulticastDelegate : Delegate
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class MulticastDelegate abstract : public Delegate
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type MulticastDelegate =
    class
        inherit Delegate
    end

MulticastDelegate 是一个特殊类。编译器和其他工具可以从此类派生，但是您不能显式地从此类进行派生。Delegate 类也是如此。 MulticastDelegate 是一个特殊类。编译器和其他工具可以从此类派生，但是您不能显式地从此类进行派生。Delegate 类也是如此。 MulticastDelegate 是一个特殊类。编译器和其他工具可以从此类派生，但是您不能显式地从此类进行派生。Delegate 类也是如此。

除了委托类型从 MulticastDelegate 继承的方法外，公共语言运行时还提供了两个特殊方法：BeginInvoke 和 EndInvoke。有关这些方法的更多信息，请参见使用异步方式调用同步方法。 除了委托类型从 MulticastDelegate 继承的方法外，公共语言运行时还提供了两个特殊方法：BeginInvoke 和 EndInvoke。有关这些方法的更多信息，请参见使用异步方式调用同步方法。

MulticastDelegate 拥有一个带有链接的委托列表，该列表称为调用列表，它包含一个或多个元素。在调用多路广播委托时，将按照调用列表中的委托出现的顺序来同步调用这些委托。如果在该列表的执行过程中发生错误，则会引发异常。 MulticastDelegate 拥有一个带有链接的委托列表，该列表称为调用列表，它包含一个或多个元素。在调用多路广播委托时，将按照调用列表中的委托出现的顺序来同步调用这些委托。如果在该列表的执行过程中发生错误，则会引发异常。 MulticastDelegate 拥有一个带有链接的委托列表，该列表称为调用列表，它包含一个或多个元素。在调用多路广播委托时，将按照调用列表中的委托出现的顺序来同步调用这些委托。如果在该列表的执行过程中发生错误，则会引发异常。

下面的示例说明如何使用从 MulticastDelegate 派生的类。

Imports System
Imports Microsoft.VisualBasic

' This class contains strings. It has a member method that
' accepts a multicast delegate as a parameter and calls it

Class HoldsStrings

    ' The following line causes the compiler to generate
    ' a new delegate class named CheckAndPrintDelegate that
    ' inherits from System.MulticastDelegate.
    Delegate Sub CheckAndPrintDelegate(ByVal str As String)

    ' An ArrayList that holds strings
    Private myStringArray As New System.Collections.ArrayList()

    Public Sub addstring(ByVal str As String)
        myStringArray.Add(str)
    End Sub 'addstring

    ' Iterate through the strings and invoke the method(s) that the delegate points to
    Public Sub PrintAllQualified(ByVal myDelegate As CheckAndPrintDelegate)
        Dim str As String
        For Each str In myStringArray
            myDelegate(str)
        Next str
    End Sub 'PrintAllQualified

End Class     'end of class HoldsStrings

' This class contains a few sample methods
Class StringFuncs
    ' This method prints a string that it is passed if the string starts with a vowel
    Public Shared Sub ConStart(ByVal str As String)
        If Not (str.Chars(0) = "a"c Or str.Chars(0) = "e"c Or str.Chars(0) = "i"c Or str.Chars(0) = "o"c Or str.Chars(0) = "u"c) Then
            Console.WriteLine(str)
        End If
    End Sub 'ConStart

    ' This method prints a string that it is passed if the string starts with a consonant
    Public Shared Sub VowelStart(ByVal str As String)
        If (str.Chars(0) = "a"c Or str.Chars(0) = "e"c Or str.Chars(0) = "i"c Or str.Chars(0) = "o"c Or str.Chars(0) = "u"c) Then
            Console.WriteLine(str)
        End If
    End Sub 'VowelStart
End Class 'StringFuncs

' This class demonstrates using Delegates, including using the Remove and
' Combine methods to create and modify delegate combinations.
Class Test

    Public Shared Sub Main()
        ' Declare the HoldsStrings class and add some strings
        Dim myHoldsStrings As New HoldsStrings()
        myHoldsStrings.addstring("this")
        myHoldsStrings.addstring("is")
        myHoldsStrings.addstring("a")
        myHoldsStrings.addstring("multicast")
        myHoldsStrings.addstring("delegate")
        myHoldsStrings.addstring("example")

        ' Create two delegates individually using different methods
        Dim ConStartDel = New HoldsStrings.CheckAndPrintDelegate(AddressOf StringFuncs.ConStart)

        Dim VowStartDel As New HoldsStrings.CheckAndPrintDelegate(AddressOf StringFuncs.VowelStart)

        ' Demonstrate that MulticastDelegates may store only one delegate
        Dim DelegateList() As [Delegate]

        ' Returns an array of all delegates stored in the linked list of the
        ' MulticastDelegate. In these cases the lists will hold only one (Multicast) delegate
        DelegateList = ConStartDel.GetInvocationList()
        Console.WriteLine("ConStartDel contains " + DelegateList.Length.ToString() + " delegate(s).")

        DelegateList = VowStartDel.GetInvocationList()
        Console.WriteLine(("ConStartVow contains " + DelegateList.Length.ToString() + " delegate(s)."))

        ' Determine whether the delegates are System.Multicast delegates
        If TypeOf ConStartDel Is System.MulticastDelegate And TypeOf VowStartDel Is System.MulticastDelegate Then
            Console.WriteLine("ConStartDel and ConStartVow are System.MulticastDelegates")
        End If

        ' Run the two single delegates one after the other
        Console.WriteLine("Running ConStartDel delegate:")
        myHoldsStrings.PrintAllQualified(ConStartDel)
        Console.WriteLine("Running VowStartDel delegate:")
        myHoldsStrings.PrintAllQualified(VowStartDel)

        ' Create a new, empty MulticastDelegate
        Dim MultiDel As HoldsStrings.CheckAndPrintDelegate

        ' Delegate.Combine receives an unspecified number of MulticastDelegates as parameters
        MultiDel = CType([Delegate].Combine(ConStartDel, VowStartDel), HoldsStrings.CheckAndPrintDelegate)

        ' How many delegates is this delegate holding?
        DelegateList = MultiDel.GetInvocationList()
        Console.WriteLine((ControlChars.Cr + "MulitDel contains " + DelegateList.Length.ToString() + " delegates."))

        ' What happens when this mulitcast delegate is passed to PrintAllQualified
        Console.WriteLine("Running the multiple delegate that combined the first two")
        myHoldsStrings.PrintAllQualified(MultiDel)

        ' The Remove and Combine methods modify the multiple delegate
        MultiDel = CType([Delegate].Remove(MultiDel, VowStartDel), HoldsStrings.CheckAndPrintDelegate)
        MultiDel = CType([Delegate].Combine(MultiDel, ConStartDel), HoldsStrings.CheckAndPrintDelegate)

        ' Finally, pass the combined delegates to PrintAllQualified again
        Console.WriteLine(ControlChars.Cr + "Running the multiple delegate that contains two copies of ConStartDel:")
        myHoldsStrings.PrintAllQualified(MultiDel)

        Return
    End Sub 'end of main
End Class 'end of Test

using System;

    // This class contains strings. It has a member method that
    // accepts a multicast delegate as a parameter and calls it.

    class HoldsStrings
    {
        // The following line causes the compiler to generate
        // a new delegate class named CheckAndPrintDelegate that
        // inherits from System.MulticastDelegate.
        public delegate void CheckAndPrintDelegate(string str);

        // An ArrayList that holds strings
        private System.Collections.ArrayList myStringArray = new System.Collections.ArrayList();

        // A method that adds more strings to the Collection
        public void addstring( string str) {
            myStringArray.Add(str);
        }

        // Iterate through the strings and invoke the method(s) that the delegate points to
        public void PrintAllQualified(CheckAndPrintDelegate myDelegate) {
            foreach (string str in myStringArray) {
                myDelegate(str);
            }
        }
    }   //end of class HoldsStrings

    // This class contains a few sample methods
    class StringFuncs
    {
        // This method prints a string that it is passed if the string starts with a vowel
        public static void ConStart(string str) {
            if (!(str[0]=='a'||str[0]=='e'||str[0]=='i'||str[0]=='o'||str[0]=='u'))
                Console.WriteLine(str);
        }

        // This method prints a string that it is passed if the string starts with a consonant
        public static void VowelStart(string str) {
            if ((str[0]=='a'||str[0]=='e'||str[0]=='i'||str[0]=='o'||str[0]=='u'))
                Console.WriteLine(str);
        }
    }

    // This class demonstrates using Delegates, including using the Remove and
    // Combine methods to create and modify delegate combinations.
    class Test
    {
        static public void Main()
        {
            // Declare the HoldsStrings class and add some strings
            HoldsStrings myHoldsStrings = new HoldsStrings();
            myHoldsStrings.addstring("This");
            myHoldsStrings.addstring("is");
            myHoldsStrings.addstring("a");
            myHoldsStrings.addstring("multicast");
            myHoldsStrings.addstring("delegate");
            myHoldsStrings.addstring("example");

            // Create two delegates individually using different methods
            HoldsStrings.CheckAndPrintDelegate ConStartDel =
                new HoldsStrings.CheckAndPrintDelegate(StringFuncs.ConStart);
            HoldsStrings.CheckAndPrintDelegate VowStartDel =
                new HoldsStrings.CheckAndPrintDelegate(StringFuncs.VowelStart);

            // Demonstrate that MulticastDelegates may store only one delegate
            Delegate [] DelegateList;

            // Returns an array of all delegates stored in the linked list of the
            // MulticastDelegate. In these cases the lists will hold only one (Multicast) delegate
            DelegateList = ConStartDel.GetInvocationList();
            Console.WriteLine("ConStartDel contains " + DelegateList.Length + " delegate(s).");
            DelegateList = VowStartDel.GetInvocationList();
            Console.WriteLine("ConStartVow contains " + DelegateList.Length + " delegate(s).");

            // Determine whether the delegates are System.Multicast delegates
            // if (ConStartDel is System.MulticastDelegate && VowStartDel is System.MulticastDelegate) {
                Console.WriteLine("ConStartDel and ConStartVow are System.MulticastDelegates");
            // }

            // Run the two single delegates one after the other
            Console.WriteLine("Running ConStartDel delegate:");
            myHoldsStrings.PrintAllQualified(ConStartDel);
            Console.WriteLine("Running VowStartDel delegate:");
            myHoldsStrings.PrintAllQualified(VowStartDel);

            // Create a new, empty MulticastDelegate
            HoldsStrings.CheckAndPrintDelegate MultiDel;

            // Delegate.Combine receives an unspecified number of MulticastDelegates as parameters
            MultiDel = (HoldsStrings.CheckAndPrintDelegate) Delegate.Combine(ConStartDel, VowStartDel);

            // How many delegates is this delegate holding?
            DelegateList = MultiDel.GetInvocationList();
            Console.WriteLine("\nMulitDel contains " + DelegateList.Length + " delegates.");

            // What happens when this mulitcast delegate is passed to PrintAllQualified
            Console.WriteLine("Running the multiple delegate that combined the first two");
            myHoldsStrings.PrintAllQualified(MultiDel);

            // The Remove and Combine methods modify the multiple delegate
            MultiDel = (HoldsStrings.CheckAndPrintDelegate) Delegate.Remove(MultiDel, VowStartDel);
            MultiDel = (HoldsStrings.CheckAndPrintDelegate) Delegate.Combine(MultiDel, ConStartDel);

            // Finally, pass the combined delegates to PrintAllQualified again
            Console.WriteLine("\nRunning the multiple delegate that contains two copies of ConStartDel:");
            myHoldsStrings.PrintAllQualified(MultiDel);

            return;
        }   //end of main
    }   //end of Test

using namespace System;

// This class contains strings. It has a member method that
// accepts a multicast delegate as a parameter and calls it.
ref class HoldsStrings
{
public:
   // The following line causes the compiler to generate
   // a new delegate class named CheckAndPrintDelegate that
   // inherits from System.MulticastDelegate.
   delegate void CheckAndPrintDelegate( String^ str );

private:

   // An ArrayList that holds strings
   System::Collections::ArrayList^ myStringArray;

public:
   HoldsStrings()
   {
      myStringArray = gcnew System::Collections::ArrayList;
   }

   // A method that adds more strings to the Collection
   void addstring( String^ str )
   {
      myStringArray->Add( str );
   }

   // Iterate through the strings and invoke the method(s) that the delegate points to
   void PrintAllQualified( CheckAndPrintDelegate^ myDelegate )
   {
      System::Collections::IEnumerator^ myEnum = myStringArray->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         String^ str = safe_cast<String^>(myEnum->Current);
         myDelegate( str );
      }
   }

};

//end of class HoldsStrings
// This class contains a few sample methods
ref class StringFuncs
{
public:

   // This method prints a String* that it is passed if the String* starts with a vowel
   static void ConStart( String^ str )
   {
      if (  !(str[ 0 ] == 'a' || str[ 0 ] == 'e' || str[ 0 ] == 'i' || str[ 0 ] == 'o' || str[ 0 ] == 'u') )
            Console::WriteLine( str );
   }

   // This method prints a String* that it is passed if the String* starts with a consonant
   static void VowelStart( String^ str )
   {
      if ( (str[ 0 ] == 'a' || str[ 0 ] == 'e' || str[ 0 ] == 'i' || str[ 0 ] == 'o' || str[ 0 ] == 'u') )
            Console::WriteLine( str );
   }
};

// This function demonstrates using Delegates, including using the Remove and
// Combine methods to create and modify delegate combinations.
int main()
{
   // Declare the HoldsStrings class and add some strings
   HoldsStrings^ myHoldsStrings = gcnew HoldsStrings;
   myHoldsStrings->addstring( "This" );
   myHoldsStrings->addstring( "is" );
   myHoldsStrings->addstring( "a" );
   myHoldsStrings->addstring( "multicast" );
   myHoldsStrings->addstring( "delegate" );
   myHoldsStrings->addstring( "example" );

   // Create two delegates individually using different methods
   HoldsStrings::CheckAndPrintDelegate^ ConStartDel = gcnew HoldsStrings::CheckAndPrintDelegate( StringFuncs::ConStart );
   HoldsStrings::CheckAndPrintDelegate^ VowStartDel = gcnew HoldsStrings::CheckAndPrintDelegate( StringFuncs::VowelStart );

   // Demonstrate that MulticastDelegates may store only one delegate
   array<Delegate^>^DelegateList;

   // Returns an array of all delegates stored in the linked list of the
   // MulticastDelegate. In these cases the lists will hold only one (Multicast) delegate
   DelegateList = ConStartDel->GetInvocationList();
   Console::WriteLine( "ConStartDel contains {0} delegate(s).", DelegateList->Length );
   DelegateList = VowStartDel->GetInvocationList();
   Console::WriteLine( "ConStartVow contains {0} delegate(s).", DelegateList->Length );

   // Determine whether the delegates are System::Multicast delegates
   if ( dynamic_cast<System::MulticastDelegate^>(ConStartDel) && dynamic_cast<System::MulticastDelegate^>(VowStartDel) )
   {
      Console::WriteLine( "ConStartDel and ConStartVow are System::MulticastDelegates" );
   }

   // Run the two single delegates one after the other
   Console::WriteLine( "Running ConStartDel delegate:" );
   myHoldsStrings->PrintAllQualified( ConStartDel );
   Console::WriteLine( "Running VowStartDel delegate:" );
   myHoldsStrings->PrintAllQualified( VowStartDel );

   // Create a new, empty MulticastDelegate
   HoldsStrings::CheckAndPrintDelegate^ MultiDel;

   // Delegate::Combine receives an unspecified number of MulticastDelegates as parameters
   MultiDel = dynamic_cast<HoldsStrings::CheckAndPrintDelegate^>(Delegate::Combine( ConStartDel, VowStartDel ));

   // How many delegates is this delegate holding?
   DelegateList = MultiDel->GetInvocationList();
   Console::WriteLine( "\nMulitDel contains {0} delegates.", DelegateList->Length );

   // What happens when this mulitcast delegate is passed to PrintAllQualified
   Console::WriteLine( "Running the multiple delegate that combined the first two" );
   myHoldsStrings->PrintAllQualified( MultiDel );

   // The Remove and Combine methods modify the multiple delegate
   MultiDel = dynamic_cast<HoldsStrings::CheckAndPrintDelegate^>(Delegate::Remove( MultiDel, VowStartDel ));
   MultiDel = dynamic_cast<HoldsStrings::CheckAndPrintDelegate^>(Delegate::Combine( MultiDel, ConStartDel ));

   // Finally, pass the combined delegates to PrintAllQualified again
   Console::WriteLine( "\nRunning the multiple delegate that contains two copies of ConStartDel:" );
   myHoldsStrings->PrintAllQualified( MultiDel );
} //end of main

System System..::.MulticastDelegateMulticastDelegate
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastDelegate 成员
System 命名空间


MulticastDelegate 成员

MulticastDelegate 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastDelegate 类

表示多路广播委托；即，其调用列表中可以拥有多个元素的委托。

MulticastDelegate 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MulticastDelegate 类
System 命名空间


MulticastDelegate 构造函数

MulticastDelegate 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastDelegate 类

初始化 MulticastDelegate 类的新实例。

名称 说明
页首

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间


MulticastDelegate 构造函数 (Object, String)

MulticastDelegate 构造函数 (Object, String)
MulticastDelegate 类

初始化 MulticastDelegate 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    target As Object, _
    method As String _
)
protected MulticastDelegate(
    Object target,
    string method
)
protected:
MulticastDelegate(
    Object^ target,
    String^ method
)
new :
        target:Object *
        method:string -> MulticastDelegate

参数

target
类型： System Object
在其上定义 method 的对象。
method
类型： System String
为其创建委托的方法的名称。
异常 | 条件
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。

此构造函数从编译器生成的代码所产生的类中调用。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MulticastDelegate 类
MulticastDelegate 成员
MulticastDelegate 重载
System 命名空间


MulticastDelegate 构造函数 (Type, String)

MulticastDelegate 构造函数 (Type, String)
MulticastDelegate 类

初始化 MulticastDelegate 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    target As Type, _
    method As String _
)
protected MulticastDelegate(
    Type target,
    string method
)
protected:
MulticastDelegate(
    Type^ target,
    String^ method
)
new :
        target:Type *
        method:string -> MulticastDelegate

参数

target
类型： System Type
在其上定义 method 的对象的类型。
method
类型： System String
为其创建委托的静态方法的名称。
异常 | 条件
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。

此构造函数是从某个类中调用的，它根据一个静态方法名称以及定义该方法的类的 Type 来生成一个委托。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MulticastDelegate 类
MulticastDelegate 成员
MulticastDelegate 重载
System 命名空间


MulticastDelegate 方法

MulticastDelegate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastDelegate 类

MulticastDelegate 类型公开以下成员。

名称 说明
页首

参考

MulticastDelegate 类
System 命名空间


MulticastDelegate ..::.CombineImpl 方法

MulticastDelegate
.
.
::
.
CombineImpl 方法
MulticastDelegate 类

将此 Delegate 与指定的 Delegate 合并，以形成一个新委托。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overrides NotOverridable Function CombineImpl ( _
    follow As Delegate _
) As Delegate
protected override sealed Delegate CombineImpl(
    Delegate follow
)
protected:
virtual Delegate^ CombineImpl(
    Delegate^ follow
) override sealed
abstract CombineImpl :
        follow:Delegate -> Delegate
override CombineImpl :
        follow:Delegate -> Delegate

参数

follow
类型： System Delegate
将与此委托进行合并的委托。

返回值

类型： System Delegate
一个委托，它是 MulticastDelegate 调用列表的新根。
异常 | 条件
ArgumentException | follow 没有与此实例相同的类型。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间


MulticastDelegate ..::.Equals 方法

MulticastDelegate
.
.
::
.
Equals 方法
MulticastDelegate 类

确定此多路广播委托和指定的对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides NotOverridable Function Equals ( _
    obj As Object _
) As Boolean
public override sealed bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override sealed
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 和此实例具有相同的调用列表，则为 true；否则为 false。
异常 | 条件
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。

两个委托在以下情况下相等：它们都不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 且类型完全相同，它们的调用列表中包含的元素数相等，第一个委托的调用列表中的每一个元素等于第二个委托的调用列表中的相应元素。

两个调用列表的元素在以下情况下相等：它们调用相同目标实例上的相同实例方法，或它们调用相同的静态方法。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间


MulticastDelegate ..::.GetHashCode 方法

MulticastDelegate
.
.
::
.
GetHashCode 方法
MulticastDelegate 类

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides NotOverridable Function GetHashCode As Integer
public override sealed int GetHashCode()
public:
virtual int GetHashCode() override sealed
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。
异常 | 条件
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间


MulticastDelegate ..::.GetInvocationList 方法

MulticastDelegate
.
.
::
.
GetInvocationList 方法
MulticastDelegate 类

按照调用顺序返回此多路广播委托的调用列表。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides NotOverridable Function GetInvocationList As Delegate()
public override sealed Delegate[] GetInvocationList()
public:
virtual array<Delegate^>^ GetInvocationList() override sealed
abstract GetInvocationList : unit -> Delegate[]
override GetInvocationList : unit -> Delegate[]

返回值

类型：
array<
System Delegate
>
[]
()
[]

一个委托数组，这些委托的调用列表合起来与此实例的调用列表一致。
异常 | 条件
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。

该数组包含一组委托，每个委托均有带有一个项的调用列表。如果按照这些委托在该数组中出现的顺序依次调用它们，则与调用当前实例产生的结果相同。 该数组包含一组委托，每个委托均有带有一个项的调用列表。如果按照这些委托在该数组中出现的顺序依次调用它们，则与调用当前实例产生的结果相同。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间


MulticastDelegate ..::.GetMethodImpl 方法

MulticastDelegate
.
.
::
.
GetMethodImpl 方法
MulticastDelegate 类

返回由当前的 MulticastDelegate 表示的静态方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overrides Function GetMethodImpl As MethodInfo
protected override MethodInfo GetMethodImpl()
protected:
virtual MethodInfo^ GetMethodImpl() override
abstract GetMethodImpl : unit -> MethodInfo
override GetMethodImpl : unit -> MethodInfo

返回值

类型： System.Reflection MethodInfo
由当前的 MulticastDelegate 表示的静态方法。

如果 MulticastDelegate 表示多个方法，则仅返回一个方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间


MulticastDelegate ..::.GetObjectData 方法

MulticastDelegate
.
.
::
.
GetObjectData 方法
MulticastDelegate 类

用序列化该实例所需的所有数据填充 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
一个对象，它保存将此实例序列化或反序列化所需的全部数据。
context
类型： System.Runtime.Serialization StreamingContext
（保留）存储和检索序列化数据的位置。

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
SerializationException | 发生了序列化错误。

该方法存储 info 中序列化该实例所需的所有信息。

context 参数被保留，目前不用于该方法的执行。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间
Object
SerializationInfo


MulticastDelegate ..::.RemoveImpl 方法

MulticastDelegate
.
.
::
.
RemoveImpl 方法
MulticastDelegate 类

从此 MulticastDelegate 的调用列表中移除与指定委托相等的元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overrides NotOverridable Function RemoveImpl ( _
    value As Delegate _
) As Delegate
protected override sealed Delegate RemoveImpl(
    Delegate value
)
protected:
virtual Delegate^ RemoveImpl(
    Delegate^ value
) override sealed
abstract RemoveImpl :
        value:Delegate -> Delegate
override RemoveImpl :
        value:Delegate -> Delegate

参数

value
类型： System Delegate
要在调用列表中搜索的委托。

返回值

类型： System Delegate
如果在此实例的调用列表中找到 value，则为其调用列表中没有 value 的新 Delegate；否则为此实例（带有其原始调用列表）。
异常 | 条件
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。
  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间


MulticastDelegate 运算符

MulticastDelegate 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastDelegate 类

MulticastDelegate 类型公开以下成员。

名称 说明
页首

参考

MulticastDelegate 类
System 命名空间


MulticastDelegate ..::.Equality 运算符

MulticastDelegate
.
.
::
.
Equality 运算符
MulticastDelegate 类

确定两个 MulticastDelegate 对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    d1 As MulticastDelegate, _
    d2 As MulticastDelegate _
) As Boolean
public static bool operator ==(
    MulticastDelegate d1,
    MulticastDelegate d2
)
public:
static bool operator ==(
    MulticastDelegate^ d1,
    MulticastDelegate^ d2
)
static let inline (=)
        d1:MulticastDelegate *
        d2:MulticastDelegate  : bool

参数

d1
类型： System MulticastDelegate
左操作数。
d2
类型： System MulticastDelegate
右操作数。

返回值

类型： System Boolean
如果 d1 和 d2 具有相同的调用列表，则为 true；否则为 false。
异常 | 条件
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。

两个委托在以下情况下相等：它们都不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 且类型完全相同，它们的调用列表中包含的元素数相等，第一个委托的调用列表中的每一个元素等于第二个委托的调用列表中的相应元素。

两个调用列表的元素在以下情况下相等：它们调用相同目标实例上的相同实例方法，或它们调用相同的静态方法。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间


MulticastDelegate ..::.Inequality 运算符

MulticastDelegate
.
.
::
.
Inequality 运算符
MulticastDelegate 类

确定两个 MulticastDelegate 对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    d1 As MulticastDelegate, _
    d2 As MulticastDelegate _
) As Boolean
public static bool operator !=(
    MulticastDelegate d1,
    MulticastDelegate d2
)
public:
static bool operator !=(
    MulticastDelegate^ d1,
    MulticastDelegate^ d2
)
static let inline (<>)
        d1:MulticastDelegate *
        d2:MulticastDelegate  : bool

参数

d1
类型： System MulticastDelegate
左操作数。
d2
类型： System MulticastDelegate
右操作数。

返回值

类型： System Boolean
如果 d1 和 d2 没有相同的调用列表，则为 true；否则为 false。
异常 | 条件
MemberAccessException | 无法创建抽象类的实例，或者用后期绑定机制调用了该成员。

两个委托在以下情况下相等：它们都不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 且类型完全相同，它们的调用列表中包含的元素数相等，第一个委托的调用列表中的每一个元素等于第二个委托的调用列表中的相应元素。

两个调用列表的元素在以下情况下相等：它们调用相同目标实例上的相同实例方法，或它们调用相同的静态方法。

  • ReflectionPermission

    当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 当通过类似 Type..::.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastDelegate 类
MulticastDelegate 成员
System 命名空间


MulticastDelegate 属性

MulticastDelegate 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastDelegate 类

MulticastDelegate 类型公开以下成员。

名称 说明
页首

参考

MulticastDelegate 类
System 命名空间


MulticastNotSupportedException 类

MulticastNotSupportedException 类
成员

尝试组合两个基于 Delegate 类型而非 MulticastDelegate 类型的委托时引发的异常。无法继承此类。 尝试组合两个基于 Delegate 类型而非 MulticastDelegate 类型的委托时引发的异常。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class MulticastNotSupportedException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class MulticastNotSupportedException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class MulticastNotSupportedException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type MulticastNotSupportedException =
    class
        inherit SystemException
    end

只能对基于 MulticastDelegate 类型的委托进行组合。使用 CombineImpl 方法可以组合两个多路广播委托。 只能对基于 MulticastDelegate 类型的委托进行组合。使用 CombineImpl 方法可以组合两个多路广播委托。

MulticastNotSupportedException 使用值为 0x80131514 的 HRESULT COR_E_MULTICASTNOTSUPPORTED。

有关 MulticastNotSupportedException 实例的初始属性值列表，请参见 MulticastNotSupportedException 构造函数。

System System..::.MulticastNotSupportedExceptionMulticastNotSupportedException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastNotSupportedException 成员
System 命名空间
Exception
MulticastDelegate

其他资源

处理和引发异常


MulticastNotSupportedException 成员

MulticastNotSupportedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastNotSupportedException 类

尝试组合两个基于 Delegate 类型而非 MulticastDelegate 类型的委托时引发的异常。无法继承此类。 尝试组合两个基于 Delegate 类型而非 MulticastDelegate 类型的委托时引发的异常。无法继承此类。

MulticastNotSupportedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MulticastNotSupportedException 类
System 命名空间


MulticastNotSupportedException 构造函数

MulticastNotSupportedException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastNotSupportedException 类

初始化 MulticastNotSupportedException 类的新实例。

名称 说明
页首

参考

MulticastNotSupportedException 类
MulticastNotSupportedException 成员
System 命名空间


MulticastNotSupportedException 构造函数

MulticastNotSupportedException 构造函数
MulticastNotSupportedException 类

初始化 MulticastNotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public MulticastNotSupportedException()
public:
MulticastNotSupportedException()
new : unit -> MulticastNotSupportedException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“无法通过指定的委托执行此操作。”。此消息将考虑当前系统区域性。

下表显示 MulticastNotSupportedException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastNotSupportedException 类
MulticastNotSupportedException 成员
MulticastNotSupportedException 重载
System 命名空间


MulticastNotSupportedException 构造函数 (String)

MulticastNotSupportedException 构造函数 (String)
MulticastNotSupportedException 类

用指定的错误消息初始化 MulticastNotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public MulticastNotSupportedException(
    string message
)
public:
MulticastNotSupportedException(
    String^ message
)
new :
        message:string -> MulticastNotSupportedException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 MulticastNotSupportedException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastNotSupportedException 类
MulticastNotSupportedException 成员
MulticastNotSupportedException 重载
System 命名空间


MulticastNotSupportedException 构造函数 (String, Exception)

MulticastNotSupportedException 构造函数 (String, Exception)
MulticastNotSupportedException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 MulticastNotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public MulticastNotSupportedException(
    string message,
    Exception inner
)
public:
MulticastNotSupportedException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> MulticastNotSupportedException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 MulticastNotSupportedException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MulticastNotSupportedException 类
MulticastNotSupportedException 成员
MulticastNotSupportedException 重载
System 命名空间
Exception

其他资源

处理和引发异常


MulticastNotSupportedException 方法

MulticastNotSupportedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastNotSupportedException 类

MulticastNotSupportedException 类型公开以下成员。

名称 说明
页首

参考

MulticastNotSupportedException 类
System 命名空间


MulticastNotSupportedException 属性

MulticastNotSupportedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastNotSupportedException 类

MulticastNotSupportedException 类型公开以下成员。

名称 说明
页首

参考

MulticastNotSupportedException 类
System 命名空间


MulticastNotSupportedException 事件

MulticastNotSupportedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MulticastNotSupportedException 类

MulticastNotSupportedException 类型公开以下成员。

名称 说明
页首

参考

MulticastNotSupportedException 类
System 命名空间


NetPipeStyleUriParser 类

NetPipeStyleUriParser 类
成员

基于“Indigo”系统的 NetPipe 方案的分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Class NetPipeStyleUriParser _
    Inherits UriParser
public class NetPipeStyleUriParser : UriParser
public ref class NetPipeStyleUriParser : public UriParser
type NetPipeStyleUriParser =
    class
        inherit UriParser
    end

此分析器供将来与“Indigo”系统一起使用。

System System..::.NetPipeStyleUriParserNetPipeStyleUriParser
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

NetPipeStyleUriParser 成员
System 命名空间


NetPipeStyleUriParser 成员

NetPipeStyleUriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NetPipeStyleUriParser 类

基于“Indigo”系统的 NetPipe 方案的分析器。

NetPipeStyleUriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

NetPipeStyleUriParser 类
System 命名空间


NetPipeStyleUriParser 构造函数

NetPipeStyleUriParser 构造函数
NetPipeStyleUriParser 类

创建基于“Indigo”系统的 NetPipe 方案的分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public NetPipeStyleUriParser()
public:
NetPipeStyleUriParser()
new : unit -> NetPipeStyleUriParser

使用此构造函数作为 UriParser..::.Register(UriParser, String, Int32) 的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

NetPipeStyleUriParser 类
NetPipeStyleUriParser 成员
System 命名空间


NetPipeStyleUriParser 方法

NetPipeStyleUriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NetPipeStyleUriParser 类

NetPipeStyleUriParser 类型公开以下成员。

名称 说明
页首

参考

NetPipeStyleUriParser 类
System 命名空间


NetTcpStyleUriParser 类

NetTcpStyleUriParser 类
成员

基于“Indigo”系统的 NetTcp 方案的分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Class NetTcpStyleUriParser _
    Inherits UriParser
public class NetTcpStyleUriParser : UriParser
public ref class NetTcpStyleUriParser : public UriParser
type NetTcpStyleUriParser =
    class
        inherit UriParser
    end

此分析器供将来与“Indigo”系统一起使用。

System System..::.NetTcpStyleUriParserNetTcpStyleUriParser
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

NetTcpStyleUriParser 成员
System 命名空间


NetTcpStyleUriParser 成员

NetTcpStyleUriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NetTcpStyleUriParser 类

基于“Indigo”系统的 NetTcp 方案的分析器。

NetTcpStyleUriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

NetTcpStyleUriParser 类
System 命名空间


NetTcpStyleUriParser 构造函数

NetTcpStyleUriParser 构造函数
NetTcpStyleUriParser 类

基于“Indigo”系统的 NetTcp 方案创建分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public NetTcpStyleUriParser()
public:
NetTcpStyleUriParser()
new : unit -> NetTcpStyleUriParser

使用此构造函数作为 UriParser..::.Register(UriParser, String, Int32) 的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

NetTcpStyleUriParser 类
NetTcpStyleUriParser 成员
System 命名空间


NetTcpStyleUriParser 方法

NetTcpStyleUriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NetTcpStyleUriParser 类

NetTcpStyleUriParser 类型公开以下成员。

名称 说明
页首

参考

NetTcpStyleUriParser 类
System 命名空间


NewsStyleUriParser 类

NewsStyleUriParser 类
成员

基于使用网络新闻传输协议 (NNTP) 的新闻方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Class NewsStyleUriParser _
    Inherits UriParser
public class NewsStyleUriParser : UriParser
public ref class NewsStyleUriParser : public UriParser
type NewsStyleUriParser =
    class
        inherit UriParser
    end

System System..::.NewsStyleUriParserNewsStyleUriParser
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

NewsStyleUriParser 成员
System 命名空间


NewsStyleUriParser 成员

NewsStyleUriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NewsStyleUriParser 类

基于使用网络新闻传输协议 (NNTP) 的新闻方案的可自定义分析器。

NewsStyleUriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

NewsStyleUriParser 类
System 命名空间


NewsStyleUriParser 构造函数

NewsStyleUriParser 构造函数
NewsStyleUriParser 类

创建一个基于使用网络新闻传输协议 (NNTP) 的新闻方案的可自定义分析器。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public NewsStyleUriParser()
public:
NewsStyleUriParser()
new : unit -> NewsStyleUriParser

使用此构造函数作为 UriParser..::.Register(UriParser, String, Int32) 的参数

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

NewsStyleUriParser 类
NewsStyleUriParser 成员
System 命名空间


NewsStyleUriParser 方法

NewsStyleUriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NewsStyleUriParser 类

NewsStyleUriParser 类型公开以下成员。

名称 说明
页首

参考

NewsStyleUriParser 类
System 命名空间


NonSerializedAttribute 类

NonSerializedAttribute 类
成员

指示可序列化类的某个字段不应被序列化。无法继承此类。 指示可序列化类的某个字段不应被序列化。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Field, Inherited := False)> _
Public NotInheritable Class NonSerializedAttribute _
    Inherits Attribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)]
public sealed class NonSerializedAttribute : Attribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::Field, Inherited = false)]
public ref class NonSerializedAttribute sealed : public Attribute
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
[<AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)>]
type NonSerializedAttribute =
    class
        inherit Attribute
    end

使用 BinaryFormatter 或 SoapFormatter 类序列化对象时，使用 NonSerializedAttribute 特性防止字段被序列化。例如，可以使用此特性防止序列化敏感数据。 使用 BinaryFormatter 或 SoapFormatter 类序列化对象时，使用 NonSerializedAttribute 特性防止字段被序列化。例如，可以使用此特性防止序列化敏感数据。

NonSerializedAttribute 特性的目标对象为可序列化类的公共和私有字段。默认情况下类都是不可序列化的，除非使用 SerializableAttribute 进行标记。在序列化进程中，默认情况下将序列化类的所有公共和私有字段。用 NonSerializedAttribute 标记的字段在序列化过程中被排除在外。如果使用 XmlSerializer 类序列化对象，则使用 XmlIgnoreAttribute 类获取相同的功能。也可以实现 ISerializable 接口以显式控制序列化进程。注意，实现 ISerializable 的类仍然必须使用 SerializableAttribute 进行标记。 NonSerializedAttribute 特性的目标对象为可序列化类的公共和私有字段。默认情况下类都是不可序列化的，除非使用 SerializableAttribute 进行标记。在序列化进程中，默认情况下将序列化类的所有公共和私有字段。用 NonSerializedAttribute 标记的字段在序列化过程中被排除在外。如果使用 XmlSerializer 类序列化对象，则使用 XmlIgnoreAttribute 类获取相同的功能。也可以实现 ISerializable 接口以显式控制序列化进程。注意，实现 ISerializable 的类仍然必须使用 SerializableAttribute 进行标记。 NonSerializedAttribute 特性的目标对象为可序列化类的公共和私有字段。默认情况下类都是不可序列化的，除非使用 SerializableAttribute 进行标记。在序列化进程中，默认情况下将序列化类的所有公共和私有字段。用 NonSerializedAttribute 标记的字段在序列化过程中被排除在外。如果使用 XmlSerializer 类序列化对象，则使用 XmlIgnoreAttribute 类获取相同的功能。也可以实现 ISerializable 接口以显式控制序列化进程。注意，实现 ISerializable 的类仍然必须使用 SerializableAttribute 进行标记。 NonSerializedAttribute 特性的目标对象为可序列化类的公共和私有字段。默认情况下类都是不可序列化的，除非使用 SerializableAttribute 进行标记。在序列化进程中，默认情况下将序列化类的所有公共和私有字段。用 NonSerializedAttribute 标记的字段在序列化过程中被排除在外。如果使用 XmlSerializer 类序列化对象，则使用 XmlIgnoreAttribute 类获取相同的功能。也可以实现 ISerializable 接口以显式控制序列化进程。注意，实现 ISerializable 的类仍然必须使用 SerializableAttribute 进行标记。 NonSerializedAttribute 特性的目标对象为可序列化类的公共和私有字段。默认情况下类都是不可序列化的，除非使用 SerializableAttribute 进行标记。在序列化进程中，默认情况下将序列化类的所有公共和私有字段。用 NonSerializedAttribute 标记的字段在序列化过程中被排除在外。如果使用 XmlSerializer 类序列化对象，则使用 XmlIgnoreAttribute 类获取相同的功能。也可以实现 ISerializable 接口以显式控制序列化进程。注意，实现 ISerializable 的类仍然必须使用 SerializableAttribute 进行标记。 NonSerializedAttribute 特性的目标对象为可序列化类的公共和私有字段。默认情况下类都是不可序列化的，除非使用 SerializableAttribute 进行标记。在序列化进程中，默认情况下将序列化类的所有公共和私有字段。用 NonSerializedAttribute 标记的字段在序列化过程中被排除在外。如果使用 XmlSerializer 类序列化对象，则使用 XmlIgnoreAttribute 类获取相同的功能。也可以实现 ISerializable 接口以显式控制序列化进程。注意，实现 ISerializable 的类仍然必须使用 SerializableAttribute 进行标记。 NonSerializedAttribute 特性的目标对象为可序列化类的公共和私有字段。默认情况下类都是不可序列化的，除非使用 SerializableAttribute 进行标记。在序列化进程中，默认情况下将序列化类的所有公共和私有字段。用 NonSerializedAttribute 标记的字段在序列化过程中被排除在外。如果使用 XmlSerializer 类序列化对象，则使用 XmlIgnoreAttribute 类获取相同的功能。也可以实现 ISerializable 接口以显式控制序列化进程。注意，实现 ISerializable 的类仍然必须使用 SerializableAttribute 进行标记。

若要将 NonSerializedAttribute 类应用于事件，请将该特性位置设置为字段，如下面的 C# 代码中所示。

[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;

如果一个字段未序列化，但它仍要求在反序列化之后必须提供默认值，则可以创建向该字段提供值的方法，然后将 OnDeserializedAttribute 应用于该方法。

有关使用特性的更多信息，请参见利用特性扩展元数据。

下面的示例阐释用 SerializableAttribute 特性标记的对象的序列化，以及已序列化对象中标记为 NonSerializedAttribute 的字段的行为。

说明 说明

此代码使用 SoapFormatter 类来序列化对象。该类可以在 system.runtime.serialization.formatters.soap.dll（默认情况下不加载到项目中）中找到。若要运行此代码，必须在项目中添加对 DLL 的引用。 此代码使用 SoapFormatter 类来序列化对象。该类可以在 system.runtime.serialization.formatters.soap.dll（默认情况下不加载到项目中）中找到。若要运行此代码，必须在项目中添加对 DLL 的引用。 此代码使用 SoapFormatter 类来序列化对象。该类可以在 system.runtime.serialization.formatters.soap.dll（默认情况下不加载到项目中）中找到。若要运行此代码，必须在项目中添加对 DLL 的引用。

Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap

Public Class Test

   Public Shared Sub Main()

      ' Creates a new TestSimpleObject object.
      Dim obj As New TestSimpleObject()

      Console.WriteLine("Before serialization the object contains: ")
      obj.Print()

      ' Opens a file and serializes the object into it in binary format.
      Dim stream As Stream = File.Open("data.xml", FileMode.Create)
      Dim formatter As New SoapFormatter()

      formatter.Serialize(stream, obj)
      stream.Close()

      ' Empties obj.
      obj = Nothing

      ' Opens file "data.xml" and deserializes the object from it.
      stream = File.Open("data.xml", FileMode.Open)
      formatter = New SoapFormatter()

      obj = CType(formatter.Deserialize(stream), TestSimpleObject)
      stream.Close()

      Console.WriteLine("")
      Console.WriteLine("After deserialization the object contains: ")
      obj.Print()

   End Sub 'Main

End Class 'Test

' A test object that needs to be serialized.
<Serializable()> Public Class TestSimpleObject

   Public member1 As Integer
   Public member2 As String
   Public member3 As String
   Public member4 As Double

   ' A member that is not serialized.
   <NonSerialized()> Public member5 As String

   Public Sub New()
      member1 = 11
      member2 = "hello"
      member3 = "hello"
      member4 = 3.14159265
      member5 = "hello world!"
   End Sub 'New

   Public Sub Print()
      Console.WriteLine("member1 = '{0}'", member1)
      Console.WriteLine("member2 = '{0}'", member2)
      Console.WriteLine("member3 = '{0}'", member3)
      Console.WriteLine("member4 = '{0}'", member4)
      Console.WriteLine("member5 = '{0}'", member5)
   End Sub 'Print

End Class 'TestSimpleObject

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
//using System.Runtime.Serialization.Formatters.Binary;

public class Test {
   public static void Main()  {

      //Creates a new TestSimpleObject object.
      TestSimpleObject obj = new TestSimpleObject();

      Console.WriteLine("Before serialization the object contains: ");
      obj.Print();

      //Opens a file and serializes the object into it in binary format.
      Stream stream = File.Open("data.xml", FileMode.Create);
      SoapFormatter formatter = new SoapFormatter();

      //BinaryFormatter formatter = new BinaryFormatter();

      formatter.Serialize(stream, obj);
      stream.Close();

      //Empties obj.
      obj = null;

      //Opens file "data.xml" and deserializes the object from it.
      stream = File.Open("data.xml", FileMode.Open);
      formatter = new SoapFormatter();

      //formatter = new BinaryFormatter();

      obj = (TestSimpleObject)formatter.Deserialize(stream);
      stream.Close();

      Console.WriteLine("");
      Console.WriteLine("After deserialization the object contains: ");
      obj.Print();
   }
}

// A test object that needs to be serialized.
[Serializable()]
public class TestSimpleObject  {

    public int member1;
    public string member2;
    public string member3;
    public double member4;

    // A field that is not serialized.
    [NonSerialized()] public string member5;

    public TestSimpleObject() {

        member1 = 11;
        member2 = "hello";
        member3 = "hello";
        member4 = 3.14159265;
        member5 = "hello world!";
    }

    public void Print() {

        Console.WriteLine("member1 = '{0}'", member1);
        Console.WriteLine("member2 = '{0}'", member2);
        Console.WriteLine("member3 = '{0}'", member3);
        Console.WriteLine("member4 = '{0}'", member4);
        Console.WriteLine("member5 = '{0}'", member5);
    }
}

#using <system.dll>
#using <system.messaging.dll>
#using <System.Runtime.Serialization.Formatters.Soap.dll>

using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization::Formatters::Soap;

// A test object that needs to be serialized.

[Serializable]
ref class TestSimpleObject
{
private:
   int member1;
   String^ member2;
   String^ member3;
   double member4;

public:

   // A field that is not serialized.

   [NonSerialized]
   String^ member5;
   TestSimpleObject()
   {
      member1 = 11;
      member2 = "hello";
      member3 = "hello";
      member4 = 3.14159265;
      member5 = "hello world!";
   }

   void Print()
   {
      Console::WriteLine( "member1 = ' {0}'", member1 );
      Console::WriteLine( "member2 = ' {0}'", member2 );
      Console::WriteLine( "member3 = ' {0}'", member3 );
      Console::WriteLine( "member4 = ' {0}'", member4 );
      Console::WriteLine( "member5 = ' {0}'", member5 );
   }

};

int main()
{

   //Creates a new TestSimpleObject object.
   TestSimpleObject^ obj = gcnew TestSimpleObject;
   Console::WriteLine( "Before serialization the Object* contains: " );
   obj->Print();

   //Opens a file and serializes the object into it in binary format.
   Stream^ stream = File::Open( "data.xml", FileMode::Create );
   SoapFormatter^ formatter = gcnew SoapFormatter;

   //BinaryFormatter* formatter = new BinaryFormatter();
   formatter->Serialize( stream, obj );
   stream->Close();

   //Empties obj.
   obj = nullptr;

   //Opens file S"data.xml" and deserializes the object from it.
   stream = File::Open( "data.xml", FileMode::Open );
   formatter = gcnew SoapFormatter;

   //formatter = new BinaryFormatter();
   obj = dynamic_cast<TestSimpleObject^>(formatter->Deserialize( stream ));
   stream->Close();
   Console::WriteLine( "" );
   Console::WriteLine( "After deserialization the object contains: " );
   obj->Print();
}

System System..::.NonSerializedAttributeNonSerializedAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NonSerializedAttribute 成员
System 命名空间
SerializableAttribute
Attribute
ISerializable

其他资源

利用特性扩展元数据
XML and SOAP Serialization


NonSerializedAttribute 成员

NonSerializedAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NonSerializedAttribute 类

指示可序列化类的某个字段不应被序列化。无法继承此类。 指示可序列化类的某个字段不应被序列化。无法继承此类。

NonSerializedAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

NonSerializedAttribute 类
System 命名空间


NonSerializedAttribute 构造函数

NonSerializedAttribute 构造函数
NonSerializedAttribute 类

初始化 NonSerializedAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public NonSerializedAttribute()
public:
NonSerializedAttribute()
new : unit -> NonSerializedAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NonSerializedAttribute 类
NonSerializedAttribute 成员
System 命名空间


NonSerializedAttribute 方法

NonSerializedAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NonSerializedAttribute 类

NonSerializedAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

NonSerializedAttribute 类
System 命名空间


NonSerializedAttribute 属性

NonSerializedAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NonSerializedAttribute 类

NonSerializedAttribute 类型公开以下成员。

名称 说明
页首

参考

NonSerializedAttribute 类
System 命名空间


NotFiniteNumberException 类

NotFiniteNumberException 类
成员

当浮点值为正无穷大、负无穷大或非数字 (NaN) 时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class NotFiniteNumberException _
    Inherits ArithmeticException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class NotFiniteNumberException : ArithmeticException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class NotFiniteNumberException : public ArithmeticException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type NotFiniteNumberException =
    class
        inherit ArithmeticException
    end

NotFiniteNumberException 在进行浮点运算时不支持无穷和非数字值的概念的编程语言中可用。

NotFiniteNumberException 使用值为 0x80131528 的 HRESULT COR_E_NOTFINITENUMBER。

有关 NotFiniteNumberException 实例的初始属性值列表，请参见 NotFiniteNumberException 构造函数。

System System..::.NotFiniteNumberExceptionNotFiniteNumberException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 成员
System 命名空间
Exception
Double
Single

其他资源

处理和引发异常


NotFiniteNumberException 成员

NotFiniteNumberException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotFiniteNumberException 类

当浮点值为正无穷大、负无穷大或非数字 (NaN) 时引发的异常。

NotFiniteNumberException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

NotFiniteNumberException 类
System 命名空间


NotFiniteNumberException 构造函数

NotFiniteNumberException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotFiniteNumberException 类

初始化 NotFiniteNumberException 类的新实例。

名称 说明
页首

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
System 命名空间


NotFiniteNumberException 构造函数

NotFiniteNumberException 构造函数
NotFiniteNumberException 类

初始化 NotFiniteNumberException 类的一个新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public NotFiniteNumberException()
public:
NotFiniteNumberException()
new : unit -> NotFiniteNumberException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“遇到的数字不是有限的数量。”。此消息将考虑当前系统区域性。

下表显示 NotFiniteNumberException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误信息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
NotFiniteNumberException 重载
System 命名空间


NotFiniteNumberException 构造函数 (Double)

NotFiniteNumberException 构造函数 (Double)
NotFiniteNumberException 类

使用无效数字初始化 NotFiniteNumberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    offendingNumber As Double _
)
public NotFiniteNumberException(
    double offendingNumber
)
public:
NotFiniteNumberException(
    double offendingNumber
)
new :
        offendingNumber:float -> NotFiniteNumberException

参数

offendingNumber
类型： System Double
导致异常的参数的值。

offendingNumber 参数必须既是 Double 又是无效数字。

下表显示 NotFiniteNumberException 实例的初始属性值。

Property | Value
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
OffendingNumber | 无效数字。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
NotFiniteNumberException 重载
System 命名空间


NotFiniteNumberException 构造函数 (String)

NotFiniteNumberException 构造函数 (String)
NotFiniteNumberException 类

使用指定的错误消息初始化 NotFiniteNumberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public NotFiniteNumberException(
    string message
)
public:
NotFiniteNumberException(
    String^ message
)
new :
        message:string -> NotFiniteNumberException

参数

message
类型： System String
描述错误的消息。

确保 message 字符串可被用户理解且已针对当前区域性进行了本地化。

下表显示 NotFiniteNumberException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
NotFiniteNumberException 重载
System 命名空间


NotFiniteNumberException 构造函数 (SerializationInfo, StreamingContext)

NotFiniteNumberException 构造函数 (SerializationInfo, StreamingContext)
NotFiniteNumberException 类

用序列化数据初始化 NotFiniteNumberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected NotFiniteNumberException(
    SerializationInfo info,
    StreamingContext context
)
protected:
NotFiniteNumberException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> NotFiniteNumberException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中，将调用此构造函数来重构通过流传输的异常对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
NotFiniteNumberException 重载
System 命名空间


NotFiniteNumberException 构造函数 (String, Double)

NotFiniteNumberException 构造函数 (String, Double)
NotFiniteNumberException 类

使用指定的错误消息和无效数字初始化 NotFiniteNumberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    offendingNumber As Double _
)
public NotFiniteNumberException(
    string message,
    double offendingNumber
)
public:
NotFiniteNumberException(
    String^ message,
    double offendingNumber
)
new :
        message:string *
        offendingNumber:float -> NotFiniteNumberException

参数

message
类型： System String
描述错误的消息。
offendingNumber
类型： System Double
导致异常的参数的值。

确保 message 字符串可被用户理解且已针对当前区域性进行了本地化。

下表显示 NotFiniteNumberException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。
OffendingNumber | 无效数字。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
NotFiniteNumberException 重载
System 命名空间


NotFiniteNumberException 构造函数 (String, Exception)

NotFiniteNumberException 构造函数 (String, Exception)
NotFiniteNumberException 类

使用指定错误消息和对作为此异常的根本原因的内部异常的引用来初始化 NotFiniteNumberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public NotFiniteNumberException(
    string message,
    Exception innerException
)
public:
NotFiniteNumberException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> NotFiniteNumberException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 NotFiniteNumberException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
NotFiniteNumberException 重载
System 命名空间


NotFiniteNumberException 构造函数 (String, Double, Exception)

NotFiniteNumberException 构造函数 (String, Double, Exception)
NotFiniteNumberException 类

使用指定的错误消息、无效数字和对内部异常（为该异常的根源）的引用来初始化 NotFiniteNumberException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    offendingNumber As Double, _
    innerException As Exception _
)
public NotFiniteNumberException(
    string message,
    double offendingNumber,
    Exception innerException
)
public:
NotFiniteNumberException(
    String^ message,
    double offendingNumber,
    Exception^ innerException
)
new :
        message:string *
        offendingNumber:float *
        innerException:Exception -> NotFiniteNumberException

参数

message
类型： System String
解释异常原因的错误消息。
offendingNumber
类型： System Double
引发异常的参数的值。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 NotFiniteNumberException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。
OffendingNumber | 无效数字。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
NotFiniteNumberException 重载
System 命名空间
Exception

其他资源

处理和引发异常


NotFiniteNumberException 方法

NotFiniteNumberException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotFiniteNumberException 类

NotFiniteNumberException 类型公开以下成员。

名称 说明
页首

参考

NotFiniteNumberException 类
System 命名空间


NotFiniteNumberException ..::.GetObjectData 方法

NotFiniteNumberException
.
.
::
.
GetObjectData 方法
NotFiniteNumberException 类

使用无效数字和附加异常信息设置 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

实现

异常 | 条件
ArgumentNullException | info 对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。 GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。

有关更多信息，请参见SerializationInfo。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
System 命名空间
SerializationInfo
StreamingContext


NotFiniteNumberException 属性

NotFiniteNumberException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotFiniteNumberException 类

NotFiniteNumberException 类型公开以下成员。

名称 说明
页首

参考

NotFiniteNumberException 类
System 命名空间


NotFiniteNumberException ..::.OffendingNumber 属性

NotFiniteNumberException
.
.
::
.
OffendingNumber 属性
NotFiniteNumberException 类

获取无效数字，它可以是正无穷大、负无穷大或非数字 (NaN)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property OffendingNumber As Double
    Get
public double OffendingNumber { get; }
public:
property double OffendingNumber {
    double get ();
}
member OffendingNumber : float

属性值

类型： System Double
无效数字。

OffendingNumber 属性返回的值与传递到构造函数的值相同；如果没有提供任何值，则返回零。重写 OffendingNumber 属性可自定义无效值的内容或格式。 OffendingNumber 属性返回的值与传递到构造函数的值相同；如果没有提供任何值，则返回零。重写 OffendingNumber 属性可自定义无效值的内容或格式。

此属性为只读。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotFiniteNumberException 类
NotFiniteNumberException 成员
System 命名空间
Double


NotFiniteNumberException 事件

NotFiniteNumberException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotFiniteNumberException 类

NotFiniteNumberException 类型公开以下成员。

名称 说明
页首

参考

NotFiniteNumberException 类
System 命名空间


NotImplementedException 类

NotImplementedException 类
成员

在无法实现请求的方法或操作时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class NotImplementedException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class NotImplementedException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class NotImplementedException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type NotImplementedException =
    class
        inherit SystemException
    end

NotImplementedException 使用默认的 Equals 实现，后者支持引用相等性。有关 NotImplementedException 的实例的初始值列表，请参见 NotImplementedException 构造函数。 NotImplementedException 使用默认的 Equals 实现，后者支持引用相等性。有关 NotImplementedException 的实例的初始值列表，请参见 NotImplementedException 构造函数。

下面的示例针对还未开发的方法引发此异常。

Sub Main()
    Try
        FutureFeature()
    Catch NotImp As NotImplementedException
        Console.WriteLine(NotImp.Message)
    End Try

End Sub

Sub FutureFeature()
    ' not developed yet.
    Throw New NotImplementedException()
End Sub

static void Main(string[] args)
{
    try
    {
        FutureFeature();
    }
    catch (NotImplementedException notImp)
    {
        Console.WriteLine(notImp.Message);
    }
}

static void FutureFeature()
{
    // Not developed yet.
    throw new NotImplementedException();
}

System System..::.NotImplementedExceptionNotImplementedException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NotImplementedException 成员
System 命名空间
Exception

其他资源

处理和引发异常


NotImplementedException 成员

NotImplementedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotImplementedException 类

在无法实现请求的方法或操作时引发的异常。

NotImplementedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

NotImplementedException 类
System 命名空间


NotImplementedException 构造函数

NotImplementedException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotImplementedException 类

初始化 NotImplementedException 类的新实例。

名称 说明
页首

参考

NotImplementedException 类
NotImplementedException 成员
System 命名空间


NotImplementedException 构造函数

NotImplementedException 构造函数
NotImplementedException 类

使用默认属性初始化 NotImplementedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public NotImplementedException()
public:
NotImplementedException()
new : unit -> NotImplementedException

下表显示 NotImplementedException 实例的初始属性值。

Property | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 空字符串 ("")。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NotImplementedException 类
NotImplementedException 成员
NotImplementedException 重载
System 命名空间


NotImplementedException 构造函数 (String)

NotImplementedException 构造函数 (String)
NotImplementedException 类

使用指定错误信息初始化 NotImplementedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public NotImplementedException(
    string message
)
public:
NotImplementedException(
    String^ message
)
new :
        message:string -> NotImplementedException

参数

message
类型： System String
解释异常原因的错误信息。

下表显示 NotImplementedException 实例的初始属性值。

Property | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NotImplementedException 类
NotImplementedException 成员
NotImplementedException 重载
System 命名空间


NotImplementedException 构造函数 (SerializationInfo, StreamingContext)

NotImplementedException 构造函数 (SerializationInfo, StreamingContext)
NotImplementedException 类

用序列化数据初始化 NotImplementedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected NotImplementedException(
    SerializationInfo info,
    StreamingContext context
)
protected:
NotImplementedException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> NotImplementedException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotImplementedException 类
NotImplementedException 成员
NotImplementedException 重载
System 命名空间


NotImplementedException 构造函数 (String, Exception)

NotImplementedException 构造函数 (String, Exception)
NotImplementedException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 NotImplementedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public NotImplementedException(
    string message,
    Exception inner
)
public:
NotImplementedException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> NotImplementedException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 NotImplementedException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NotImplementedException 类
NotImplementedException 成员
NotImplementedException 重载
System 命名空间


NotImplementedException 方法

NotImplementedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotImplementedException 类

NotImplementedException 类型公开以下成员。

名称 说明
页首

参考

NotImplementedException 类
System 命名空间


NotImplementedException 属性

NotImplementedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotImplementedException 类

NotImplementedException 类型公开以下成员。

名称 说明
页首

参考

NotImplementedException 类
System 命名空间


NotImplementedException 事件

NotImplementedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotImplementedException 类

NotImplementedException 类型公开以下成员。

名称 说明
页首

参考

NotImplementedException 类
System 命名空间


NotSupportedException 类

NotSupportedException 类
成员

当调用的方法不受支持，或尝试读取、查找或写入不支持调用功能的流时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class NotSupportedException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class NotSupportedException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class NotSupportedException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type NotSupportedException =
    class
        inherit SystemException
    end

有些方法在基类中不受支持，但它们有可能改在派生类中实现。派生类实现的方法可能只是基类方法的一个子集，并且对不受支持的方法引发 NotSupportedException。 有些方法在基类中不受支持，但它们有可能改在派生类中实现。派生类实现的方法可能只是基类方法的一个子集，并且对不受支持的方法引发 NotSupportedException。

每当尝试读取、查找或写入不支持调用功能的流时，System.IO 类也会引发 NotSupportedException。

有些情况下，有时对象有可能执行请求的操作，并且对象的状态能确定此操作是否能被执行，对于这种情况，请参见 InvalidOperationException。

NotSupportedException 使用值为 0x80131515 的 HRESULT COR_E_NOTSUPPORTED。

有关 NotSupportedException 实例的初始属性值列表，请参见 NotSupportedException 构造函数。

System System..::.NotSupportedExceptionNotSupportedException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NotSupportedException 成员
System 命名空间
Exception
FileStream

其他资源

处理和引发异常


NotSupportedException 成员

NotSupportedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotSupportedException 类

当调用的方法不受支持，或尝试读取、查找或写入不支持调用功能的流时引发的异常。

NotSupportedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

NotSupportedException 类
System 命名空间


NotSupportedException 构造函数

NotSupportedException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotSupportedException 类

初始化 NotSupportedException 类的新实例。

名称 说明
页首

参考

NotSupportedException 类
NotSupportedException 成员
System 命名空间


NotSupportedException 构造函数

NotSupportedException 构造函数
NotSupportedException 类

初始化 NotSupportedException 类的新实例，将新实例的 Message 属性设置为系统提供的描述错误的消息。此消息将考虑当前系统区域性。 初始化 NotSupportedException 类的新实例，将新实例的 Message 属性设置为系统提供的描述错误的消息。此消息将考虑当前系统区域性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public NotSupportedException()
public:
NotSupportedException()
new : unit -> NotSupportedException

下表显示 NotSupportedException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NotSupportedException 类
NotSupportedException 成员
NotSupportedException 重载
System 命名空间


NotSupportedException 构造函数 (String)

NotSupportedException 构造函数 (String)
NotSupportedException 类

使用指定错误信息初始化 NotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public NotSupportedException(
    string message
)
public:
NotSupportedException(
    String^ message
)
new :
        message:string -> NotSupportedException

参数

message
类型： System String
描述该错误的 String。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该错误的 String。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该错误的 String。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 NotSupportedException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NotSupportedException 类
NotSupportedException 成员
NotSupportedException 重载
System 命名空间


NotSupportedException 构造函数 (SerializationInfo, StreamingContext)

NotSupportedException 构造函数 (SerializationInfo, StreamingContext)
NotSupportedException 类

用序列化数据初始化 NotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected NotSupportedException(
    SerializationInfo info,
    StreamingContext context
)
protected:
NotSupportedException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> NotSupportedException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NotSupportedException 类
NotSupportedException 成员
NotSupportedException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


NotSupportedException 构造函数 (String, Exception)

NotSupportedException 构造函数 (String, Exception)
NotSupportedException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 NotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public NotSupportedException(
    string message,
    Exception innerException
)
public:
NotSupportedException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> NotSupportedException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不为空引用，则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 NotSupportedException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NotSupportedException 类
NotSupportedException 成员
NotSupportedException 重载
System 命名空间
Exception

其他资源

处理和引发异常


NotSupportedException 方法

NotSupportedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotSupportedException 类

NotSupportedException 类型公开以下成员。

名称 说明
页首

参考

NotSupportedException 类
System 命名空间


NotSupportedException 属性

NotSupportedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotSupportedException 类

NotSupportedException 类型公开以下成员。

名称 说明
页首

参考

NotSupportedException 类
System 命名空间


NotSupportedException 事件

NotSupportedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NotSupportedException 类

NotSupportedException 类型公开以下成员。

名称 说明
页首

参考

NotSupportedException 类
System 命名空间


Nullable 类

Nullable 类
成员

支持可为其分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的值类型，如引用类型。无法继承此类。 支持可为其分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的值类型，如引用类型。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public NotInheritable Class Nullable
[ComVisibleAttribute(true)]
public static class Nullable
[ComVisibleAttribute(true)]
public ref class Nullable abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
type Nullable =  class end

对于一个类型，如果既可以给它分配一个值，也可以给它分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（表示没有任何值），我们就说这个类型是可空的。因此，可以为 null 的类型可表示一个值，或表示不存在任何值。例如，类似 String 的引用类型就是可以为 null 的类型，而类似 Int32 的值类型不是可以为 null 的类型。由于值类型的容量只够表示适合于该类型的值，因此它不可为空；值类型没有表示空值所需的额外容量。 对于一个类型，如果既可以给它分配一个值，也可以给它分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（表示没有任何值），我们就说这个类型是可空的。因此，可以为 null 的类型可表示一个值，或表示不存在任何值。例如，类似 String 的引用类型就是可以为 null 的类型，而类似 Int32 的值类型不是可以为 null 的类型。由于值类型的容量只够表示适合于该类型的值，因此它不可为空；值类型没有表示空值所需的额外容量。 对于一个类型，如果既可以给它分配一个值，也可以给它分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（表示没有任何值），我们就说这个类型是可空的。因此，可以为 null 的类型可表示一个值，或表示不存在任何值。例如，类似 String 的引用类型就是可以为 null 的类型，而类似 Int32 的值类型不是可以为 null 的类型。由于值类型的容量只够表示适合于该类型的值，因此它不可为空；值类型没有表示空值所需的额外容量。 对于一个类型，如果既可以给它分配一个值，也可以给它分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（表示没有任何值），我们就说这个类型是可空的。因此，可以为 null 的类型可表示一个值，或表示不存在任何值。例如，类似 String 的引用类型就是可以为 null 的类型，而类似 Int32 的值类型不是可以为 null 的类型。由于值类型的容量只够表示适合于该类型的值，因此它不可为空；值类型没有表示空值所需的额外容量。

Nullable 类为 Nullable<(Of <(T>)>) 结构提供补充支持。Nullable 类支持获取可以为 null 的类型的基础类型，对于其基础值类型不支持泛型比较和相等比较运算的可以为 null 的类型，该类支持对其进行比较和相等比较运算。 Nullable 类为 Nullable<(Of <(T>)>) 结构提供补充支持。Nullable 类支持获取可以为 null 的类型的基础类型，对于其基础值类型不支持泛型比较和相等比较运算的可以为 null 的类型，该类支持对其进行比较和相等比较运算。

方案

根据具体环境，使用可以为 null 的类型来表示存在或不存在的事物。例如，HTML 标记的某个可选特性可能存在于某一个标记中，但不存在于另一个标记中；或者数据库表的某个可空列可能存在于表的某一行中，但不存在于另一行中。 根据具体环境，使用可以为 null 的类型来表示存在或不存在的事物。例如，HTML 标记的某个可选特性可能存在于某一个标记中，但不存在于另一个标记中；或者数据库表的某个可空列可能存在于表的某一行中，但不存在于另一行中。

可将该特性或列表示为类中的一个字段，并可以将该字段定义为值类型。该字段可包含特性或列的所有有效值，但不能提供一个附加值来表示特性或列不存在。在这种情况下，将该字段定义为可以为 null 的类型而不是值类型。 可将该特性或列表示为类中的一个字段，并可以将该字段定义为值类型。该字段可包含特性或列的所有有效值，但不能提供一个附加值来表示特性或列不存在。在这种情况下，将该字段定义为可以为 null 的类型而不是值类型。 可将该特性或列表示为类中的一个字段，并可以将该字段定义为值类型。该字段可包含特性或列的所有有效值，但不能提供一个附加值来表示特性或列不存在。在这种情况下，将该字段定义为可以为 null 的类型而不是值类型。

装箱和取消装箱

在对可以为 null 的类型进行装箱时，公共语言运行时自动将 Nullable<(Of <(T>)>) 对象的基础值（而不是 Nullable<(Of <(T>)>) 对象本身）装箱。也就是说，如果 HasValue 属性为 true，则将 Value 属性的内容装箱。如果 HasValue 属性为 false，则将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 装箱。在对可以为 null 的类型的基础值进行取消装箱时，公共语言运行时创建一个新的初始化为基础值的 Nullable<(Of <(T>)>) 结构。 在对可以为 null 的类型进行装箱时，公共语言运行时自动将 Nullable<(Of <(T>)>) 对象的基础值（而不是 Nullable<(Of <(T>)>) 对象本身）装箱。也就是说，如果 HasValue 属性为 true，则将 Value 属性的内容装箱。如果 HasValue 属性为 false，则将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 装箱。在对可以为 null 的类型的基础值进行取消装箱时，公共语言运行时创建一个新的初始化为基础值的 Nullable<(Of <(T>)>) 结构。 在对可以为 null 的类型进行装箱时，公共语言运行时自动将 Nullable<(Of <(T>)>) 对象的基础值（而不是 Nullable<(Of <(T>)>) 对象本身）装箱。也就是说，如果 HasValue 属性为 true，则将 Value 属性的内容装箱。如果 HasValue 属性为 false，则将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 装箱。在对可以为 null 的类型的基础值进行取消装箱时，公共语言运行时创建一个新的初始化为基础值的 Nullable<(Of <(T>)>) 结构。 在对可以为 null 的类型进行装箱时，公共语言运行时自动将 Nullable<(Of <(T>)>) 对象的基础值（而不是 Nullable<(Of <(T>)>) 对象本身）装箱。也就是说，如果 HasValue 属性为 true，则将 Value 属性的内容装箱。如果 HasValue 属性为 false，则将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 装箱。在对可以为 null 的类型的基础值进行取消装箱时，公共语言运行时创建一个新的初始化为基础值的 Nullable<(Of <(T>)>) 结构。

System System..::.NullableNullable
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable 成员
System 命名空间
Nullable T


Nullable 成员

Nullable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Nullable 类

支持可为其分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的值类型，如引用类型。无法继承此类。 支持可为其分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的值类型，如引用类型。无法继承此类。

Nullable 类型公开以下成员。

名称 说明
页首

参考

Nullable 类
System 命名空间


Nullable 方法

Nullable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Nullable 类

Nullable 类型公开以下成员。

名称 说明
页首

参考

Nullable 类
System 命名空间


Nullable ..::.Compare <(Of <(T >)>) 方法

Nullable
.
.
::
.
Compare
<
(Of
<
(
T
>
)
>
)
方法
Nullable 类

比较两个 Nullable<(Of <(T>)>) 对象的相对值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _ Public Shared Function Compare(Of T As {Structure, New}) ( _ n1 As Nullable(Of T), _ n2 As Nullable(Of T) _ ) As Integer
[ComVisibleAttribute(true)] public static int Compare<T>( Nullable<T> n1, Nullable<T> n2 ) where T : struct, new()
[ComVisibleAttribute(true)] public: generic<typename T> where T : value class, gcnew() static int Compare( Nullable<T> n1, Nullable<T> n2 )
[<ComVisibleAttribute(true)>] static member Compare : n1:Nullable<'T> * n2:Nullable<'T> -> int when 'T : struct, new()
类型参数
T
n1
和
n2
参数的基础值类型。
参数
n1
类型： System Nullable
<
(Of
<
(
T
>
)
>
)
一个
Nullable
<
(Of
<
(
T
>
)
>
)
对象。
n2
类型： System Nullable
<
(Of
<
(
T
>
)
>
)
一个
Nullable
<
(Of
<
(
T
>
)
>
)
对象。
返回值
类型： System Int32
一个整数，指示
n1
和
n2
参数的相对值。
返回值
说明
小于零
n1
的
HasValue
属性为
false
，
n2
的
HasValue
属性为
true
。
- 或 -
n1
和
n2
的
HasValue
属性为
true
，并且
n1
的
Value
属性的值小于
n2
的
Value
属性的值。
零
n1
和
n2
的
HasValue
属性为
false
。
- 或 -
n1
和
n2
的
HasValue
属性为
true
，并且
n1
的
Value
属性的值等于
n2
的
Value
属性的值。
大于零
n1
的
HasValue
属性为
true
，并且
n2
的
HasValue
属性为
false
。
- 或 -
n1
和
n2
的
HasValue
属性为
true
，并且
n1
的
Value
属性的值大于
n2
的
Value
属性的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable 类
Nullable 成员
System 命名空间


Nullable ..::.Equals <(Of <(T >)>) 方法

Nullable
.
.
::
.
Equals
<
(Of
<
(
T
>
)
>
)
方法
Nullable 类

指示两个指定的 Nullable<(Of <(T>)>) 对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _ Public Shared Function Equals(Of T As {Structure, New}) ( _ n1 As Nullable(Of T), _ n2 As Nullable(Of T) _ ) As Boolean
[ComVisibleAttribute(true)] public static bool Equals<T>( Nullable<T> n1, Nullable<T> n2 ) where T : struct, new()
[ComVisibleAttribute(true)] public: generic<typename T> where T : value class, gcnew() static bool Equals( Nullable<T> n1, Nullable<T> n2 )
[<ComVisibleAttribute(true)>] static member Equals : n1:Nullable<'T> * n2:Nullable<'T> -> bool when 'T : struct, new()
类型参数
T
n1
和
n2
参数的基础值类型。
参数
n1
类型： System Nullable
<
(Of
<
(
T
>
)
>
)
一个
Nullable
<
(Of
<
(
T
>
)
>
)
对象。
n2
类型： System Nullable
<
(Of
<
(
T
>
)
>
)
一个
Nullable
<
(Of
<
(
T
>
)
>
)
对象。
返回值
类型： System Boolean
如果
n1
参数等于
n2
参数，则为
true
；否则为
false
。
返回值取决于所比较的两个参数的
HasValue
和
Value
属性。
返回值
说明
true
n1
和
n2
的
HasValue
属性为
false
。
- 或 -
n1
和
n2
的
HasValue
属性为
true
，并且参数的
Value
属性相等。
false
一个参数的
HasValue
属性为
true
，另一个参数的该属性为
false
。
- 或 -
n1
和
n2
的
HasValue
属性为
true
，并且参数的
Value
属性不相等。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable 类
Nullable 成员
System 命名空间


Nullable ..::.GetUnderlyingType 方法

Nullable
.
.
::
.
GetUnderlyingType 方法
Nullable 类

返回指定可以为 null 的类型的基础类型参数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetUnderlyingType ( _
    nullableType As Type _
) As Type
public static Type GetUnderlyingType(
    Type nullableType
)
public:
static Type^ GetUnderlyingType(
    Type^ nullableType
)
static member GetUnderlyingType :
        nullableType:Type -> Type

参数

nullableType
类型： System Type
一个 Type 对象，描述关闭的泛型可以为 null 的类型。

返回值

类型： System Type
如果 nullableType 参数为关闭的泛型可以为 null 的类型，则为 nullableType 参数的类型变量；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | nullableType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

泛型类型定义是包含一个类型参数列表的类型声明（如 Nullable<(Of <(T>)>)），该类型参数列表声明一个或多个类型参数。封闭式泛型类型是为类型参数指定特定类型的类型声明。 泛型类型定义是包含一个类型参数列表的类型声明（如 Nullable<(Of <(T>)>)），该类型参数列表声明一个或多个类型参数。封闭式泛型类型是为类型参数指定特定类型的类型声明。

例如，如果 nullableType 参数的类型为 Nullable<Int32>（在 C# 中，在 Visual Basic 中为 Nullable(Of Int32)），则返回值的类型为 Int32（即封闭式泛型类型的类型参数）。

下面的代码示例定义返回值为 Int32 的 Nullable<(Of <(T>)>) 类型的方法。该代码示例使用 GetUnderlyingType 方法来显示返回值的类型参数。 下面的代码示例定义返回值为 Int32 的 Nullable<(Of <(T>)>) 类型的方法。该代码示例使用 GetUnderlyingType 方法来显示返回值的类型参数。

' This code example demonstrates the
' Nullable.GetUnderlyingType() method.

Imports System
Imports System.Reflection

Class Sample
    ' Declare a type named Example.
    ' The MyMethod member of Example returns a Nullable of Int32.

    Public Class Example
        Public Function MyMethod() As Nullable(Of Integer)
            Return 0
        End Function
    End Class 'Example

'
'   Use reflection to obtain a Type object for the Example type.
'   Use the Type object to obtain a MethodInfo object for the MyMethod method.
'   Use the MethodInfo object to obtain the type of the return value of
'     MyMethod, which is Nullable of Int32.
'   Use the GetUnderlyingType method to obtain the type argument of the
'     return value type, which is Int32.
'
    Public Shared Sub Main()
        Dim t As Type = GetType(Example)
        Dim mi As MethodInfo = t.GetMethod("MyMethod")
        Dim retval As Type = mi.ReturnType
        Console.WriteLine("Return value type ... {0}", retval)
        Dim answer As Type = Nullable.GetUnderlyingType(retval)
        Console.WriteLine("Underlying type ..... {0}", answer)

    End Sub 'Main
End Class 'Sample
'
'This code example produces the following results:
'
'Return value type ... System.Nullable`1[System.Int32]
'Underlying type ..... System.Int32
'

// This code example demonstrates the
// Nullable.GetUnderlyingType() method.

using System;
using System.Reflection;

class Sample
{
// Declare a type named Example.
// The MyMethod member of Example returns a Nullable of Int32.

    public class Example
    {
        public int? MyMethod()
        {
        return 0;
        }
    }

/*
   Use reflection to obtain a Type object for the Example type.
   Use the Type object to obtain a MethodInfo object for the MyMethod method.
   Use the MethodInfo object to obtain the type of the return value of
     MyMethod, which is Nullable of Int32.
   Use the GetUnderlyingType method to obtain the type argument of the
     return value type, which is Int32.
*/
    public static void Main()
    {
        Type t = typeof(Example);
        MethodInfo mi = t.GetMethod("MyMethod");
        Type retval = mi.ReturnType;
        Console.WriteLine("Return value type ... {0}", retval);
        Type answer = Nullable.GetUnderlyingType(retval);
        Console.WriteLine("Underlying type ..... {0}", answer);
    }
}
/*
This code example produces the following results:

Return value type ... System.Nullable`1[System.Int32]
Underlying type ..... System.Int32

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable 类
Nullable 成员
System 命名空间


Nullable <(Of <(T >)>) 结构

Nullable
<
(Of
<
(
T
>
)
>
)
结构
成员

表示基础类型为值类型的对象，值类型与引用类型一样也可以分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Structure Nullable(Of T As {Structure, New})
[SerializableAttribute]
public struct Nullable<T>
where T : struct, new()

[SerializableAttribute]
generic<typename T>
where T : value class, gcnew()
public value class Nullable
[<SealedAttribute>]
[<SerializableAttribute>]
type Nullable<'T when 'T : struct, new()> =  struct end

类型参数

T

Nullable<(Of <(T>)>) 泛型类型的基础值类型。

对于一个类型，如果既可以给它分配一个值，也可以给它分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（表示没有任何值），我们就说这个类型是可空的。因此，可以为 null 的类型可表示一个值，或表示不存在任何值。例如，类似 String 的引用类型就是可以为 null 的类型，而类似 Int32 的值类型不是可以为 null 的类型。由于值类型的容量只够表示适合于该类型的值，因此它不可为空；值类型没有表示空值所需的额外容量。 对于一个类型，如果既可以给它分配一个值，也可以给它分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（表示没有任何值），我们就说这个类型是可空的。因此，可以为 null 的类型可表示一个值，或表示不存在任何值。例如，类似 String 的引用类型就是可以为 null 的类型，而类似 Int32 的值类型不是可以为 null 的类型。由于值类型的容量只够表示适合于该类型的值，因此它不可为空；值类型没有表示空值所需的额外容量。 对于一个类型，如果既可以给它分配一个值，也可以给它分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（表示没有任何值），我们就说这个类型是可空的。因此，可以为 null 的类型可表示一个值，或表示不存在任何值。例如，类似 String 的引用类型就是可以为 null 的类型，而类似 Int32 的值类型不是可以为 null 的类型。由于值类型的容量只够表示适合于该类型的值，因此它不可为空；值类型没有表示空值所需的额外容量。 对于一个类型，如果既可以给它分配一个值，也可以给它分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（表示没有任何值），我们就说这个类型是可空的。因此，可以为 null 的类型可表示一个值，或表示不存在任何值。例如，类似 String 的引用类型就是可以为 null 的类型，而类似 Int32 的值类型不是可以为 null 的类型。由于值类型的容量只够表示适合于该类型的值，因此它不可为空；值类型没有表示空值所需的额外容量。

Nullable<(Of <(T>)>) 结构支持只将一个值类型用作可以为 null 的类型，因为引用类型本身就是可空的。

Nullable 类为 Nullable<(Of <(T>)>) 结构提供补充支持。Nullable 类支持获取可以为 null 的类型的基础类型，对于其基础值类型不支持泛型比较和相等比较运算的可以为 null 的类型，该类支持对其进行比较和相等比较运算。 Nullable 类为 Nullable<(Of <(T>)>) 结构提供补充支持。Nullable 类支持获取可以为 null 的类型的基础类型，对于其基础值类型不支持泛型比较和相等比较运算的可以为 null 的类型，该类支持对其进行比较和相等比较运算。

方案

根据具体环境，使用可以为 null 的类型来表示存在或不存在的事物。例如，HTML 标记的某个可选特性可能存在于某一个标记中，但不存在于另一个标记中；或者数据库表的某个可空列可能存在于表的某一行中，但不存在于另一行中。 根据具体环境，使用可以为 null 的类型来表示存在或不存在的事物。例如，HTML 标记的某个可选特性可能存在于某一个标记中，但不存在于另一个标记中；或者数据库表的某个可空列可能存在于表的某一行中，但不存在于另一行中。

可将该特性或列表示为类中的一个字段，并可以将该字段定义为值类型。该字段可包含特性或列的所有有效值，但不能提供一个附加值来表示特性或列不存在。在这种情况下，应将该字段定义为可以为 null 的类型，而不是值类型。 可将该特性或列表示为类中的一个字段，并可以将该字段定义为值类型。该字段可包含特性或列的所有有效值，但不能提供一个附加值来表示特性或列不存在。在这种情况下，应将该字段定义为可以为 null 的类型，而不是值类型。 可将该特性或列表示为类中的一个字段，并可以将该字段定义为值类型。该字段可包含特性或列的所有有效值，但不能提供一个附加值来表示特性或列不存在。在这种情况下，应将该字段定义为可以为 null 的类型，而不是值类型。

基本属性

Nullable<(Of <(T>)>) 结构的两个基础成员为 HasValue 和 Value 属性。如果 Nullable<(Of <(T>)>) 对象的 HasValue 属性为 true，则可以使用 Value 属性访问该对象的值。如果 HasValue 属性为 false，则表示尚未定义该对象的值，并且尝试访问 Value 属性时会引发 InvalidOperationException。 Nullable<(Of <(T>)>) 结构的两个基础成员为 HasValue 和 Value 属性。如果 Nullable<(Of <(T>)>) 对象的 HasValue 属性为 true，则可以使用 Value 属性访问该对象的值。如果 HasValue 属性为 false，则表示尚未定义该对象的值，并且尝试访问 Value 属性时会引发 InvalidOperationException。 Nullable<(Of <(T>)>) 结构的两个基础成员为 HasValue 和 Value 属性。如果 Nullable<(Of <(T>)>) 对象的 HasValue 属性为 true，则可以使用 Value 属性访问该对象的值。如果 HasValue 属性为 false，则表示尚未定义该对象的值，并且尝试访问 Value 属性时会引发 InvalidOperationException。

装箱和取消装箱

在对可以为 null 的类型进行装箱时，公共语言运行时自动将 Nullable<(Of <(T>)>) 对象的基础值（而不是 Nullable<(Of <(T>)>) 对象本身）装箱。也就是说，如果 HasValue 属性为 true，则将 Value 属性的内容装箱。在对可以为 null 的类型的基础值进行取消装箱时，公共语言运行时创建一个新的初始化为基础值的 Nullable<(Of <(T>)>) 结构。 在对可以为 null 的类型进行装箱时，公共语言运行时自动将 Nullable<(Of <(T>)>) 对象的基础值（而不是 Nullable<(Of <(T>)>) 对象本身）装箱。也就是说，如果 HasValue 属性为 true，则将 Value 属性的内容装箱。在对可以为 null 的类型的基础值进行取消装箱时，公共语言运行时创建一个新的初始化为基础值的 Nullable<(Of <(T>)>) 结构。 在对可以为 null 的类型进行装箱时，公共语言运行时自动将 Nullable<(Of <(T>)>) 对象的基础值（而不是 Nullable<(Of <(T>)>) 对象本身）装箱。也就是说，如果 HasValue 属性为 true，则将 Value 属性的内容装箱。在对可以为 null 的类型的基础值进行取消装箱时，公共语言运行时创建一个新的初始化为基础值的 Nullable<(Of <(T>)>) 结构。

如果可以为 null 的类型的 HasValue 属性为 false，则装箱操作的结果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。因此，如果将已装箱的可以为 null 的类型传递给需要对象参数的方法，则该方法必须准备处理参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的情况。如果对 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行取消装箱使其成为可以为 null 的类型，则公共语言运行时会创建一个新的 Nullable<(Of <(T>)>) 结构并将其 HasValue 属性初始化为 false。 如果可以为 null 的类型的 HasValue 属性为 false，则装箱操作的结果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。因此，如果将已装箱的可以为 null 的类型传递给需要对象参数的方法，则该方法必须准备处理参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的情况。如果对 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行取消装箱使其成为可以为 null 的类型，则公共语言运行时会创建一个新的 Nullable<(Of <(T>)>) 结构并将其 HasValue 属性初始化为 false。 如果可以为 null 的类型的 HasValue 属性为 false，则装箱操作的结果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。因此，如果将已装箱的可以为 null 的类型传递给需要对象参数的方法，则该方法必须准备处理参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的情况。如果对 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 进行取消装箱使其成为可以为 null 的类型，则公共语言运行时会创建一个新的 Nullable<(Of <(T>)>) 结构并将其 HasValue 属性初始化为 false。

下面的代码示例定义了 Microsoft Pubs 示例数据库中某个表内的三行。该表包含两个不可为空的列和两个可为空的列。 下面的代码示例定义了 Microsoft Pubs 示例数据库中某个表内的三行。该表包含两个不可为空的列和两个可为空的列。

' This code example demonstrates the Nullable(Of T) class.
' The code example defines a database table in which two columns
' are nullable. In the application, an array of rows is created
' and initialized. The table rows could subsequently be
' written to a database.

Imports System

Class Sample
    ' Define the "titleAuthor" table of the Microsoft "pubs" database.

    Public Structure titleAuthor
    ' Author ID; format ###-##-####
        Public au_id As String
    ' Title ID; format AA####
        Public title_id As String
    ' Author ORD is nullable.
        Public au_ord As Nullable(Of Short)
    ' Royalty Percent is nullable.
        Public royaltyper As Nullable(Of Integer)
    End Structure 'titleAuthor

    Public Shared Sub Main()
    ' Declare and initialize the titleAuthor array.
        Dim ta(2) As titleAuthor
        ta(0).au_id = "712-32-1176"
        ta(0).title_id = "PS3333"
        ta(0).au_ord = 1
        ta(0).royaltyper = 100

        ta(1).au_id = "213-46-8915"
        ta(1).title_id = "BU1032"
        ta(1).au_ord = Nothing
        ta(1).royaltyper = Nothing

        ta(2).au_id = "672-71-3249"
        ta(2).title_id = "TC7777"
        ta(2).au_ord = Nothing
        ta(2).royaltyper = 40

    ' Display the values of the titleAuthor array elements, and
    ' display a legend.
        Display("Title Authors Table", ta)
        Console.WriteLine("Legend:")
        Console.WriteLine("An Author ORD of -1 means no value is defined.")
        Console.WriteLine("A Royalty % of 0 means no value is defined.")
    End Sub 'Main

    ' Display the values of the titleAuthor array elements.
    Public Shared Sub Display(ByVal dspTitle As String, _
                              ByVal dspAllTitleAuthors() As titleAuthor)
        Console.WriteLine("*** {0} ***", dspTitle)
        Dim dspTA As titleAuthor
        For Each dspTA In dspAllTitleAuthors
            Console.WriteLine("Author ID ... {0}", dspTA.au_id)
            Console.WriteLine("Title ID .... {0}", dspTA.title_id)
            Console.WriteLine("Author ORD .. {0}", dspTA.au_ord.GetValueOrDefault(-1))
            Console.WriteLine("Royalty % ... {0}", dspTA.royaltyper.GetValueOrDefault(0))
            Console.WriteLine()
        Next dspTA
    End Sub 'Display
End Class 'Sample

'
'This code example produces the following results:
'
'*** Title Authors Table ***
'Author ID ... 712-32-1176
'Title ID .... PS3333
'Author ORD .. 1
'Royalty % ... 100
'
'Author ID ... 213-46-8915
'Title ID .... BU1032
'Author ORD .. -1
'Royalty % ... 0
'
'Author ID ... 672-71-3249
'Title ID .... TC7777
'Author ORD .. -1
'Royalty % ... 40
'
'Legend:
'An Author ORD of -1 means no value is defined.
'A Royalty % of 0 means no value is defined.
'

// This code example demonstrates the Nullable<T> class.
// The code example defines a database table in which two columns
// are nullable. In the application, an array of rows is created
// and initialized. The table rows could subsequently be
// written to a database.

using System;

class Sample
{
// Define the "titleAuthor" table of the Microsoft "pubs" database.
    public struct titleAuthor
    {
    // Author ID; format ###-##-####
    public string au_id;
    // Title ID; format AA####
    public string title_id;
    // Author ORD is nullable.
    public short? au_ord;
    // Royalty Percent is nullable.
    public int? royaltyper;
    }

    public static void Main()
    {
// Declare and initialize the titleAuthor array.
    titleAuthor[] ta = new titleAuthor[3];
    ta[0].au_id = "712-32-1176";
    ta[0].title_id = "PS3333";
    ta[0].au_ord = 1;
    ta[0].royaltyper = 100;

    ta[1].au_id = "213-46-8915";
    ta[1].title_id = "BU1032";
    ta[1].au_ord = null;
    ta[1].royaltyper = null;

    ta[2].au_id = "672-71-3249";
    ta[2].title_id = "TC7777";
    ta[2].au_ord = null;
    ta[2].royaltyper = 40;

// Display the values of the titleAuthor array elements, and
// display a legend.
    Display("Title Authors Table", ta);
    Console.WriteLine("Legend:");
    Console.WriteLine("An Author ORD of -1 means no value is defined.");
    Console.WriteLine("A Royalty % of 0 means no value is defined.");
    }

// Display the values of the titleAuthor array elements.
    public static void Display(string dspTitle,
                               titleAuthor[] dspAllTitleAuthors)
    {
    Console.WriteLine("*** {0} ***", dspTitle);
    foreach (titleAuthor dspTA in dspAllTitleAuthors)
       {
       Console.WriteLine("Author ID ... {0}", dspTA.au_id);
       Console.WriteLine("Title ID .... {0}", dspTA.title_id);
       Console.WriteLine("Author ORD .. {0}", dspTA.au_ord ?? -1);
       Console.WriteLine("Royalty % ... {0}", dspTA.royaltyper ?? 0);
       Console.WriteLine();
       }
    }
}

/*
This code example produces the following results:

*** Title Authors Table ***
Author ID ... 712-32-1176
Title ID .... PS3333
Author ORD .. 1
Royalty % ... 100

Author ID ... 213-46-8915
Title ID .... BU1032
Author ORD .. -1
Royalty % ... 0

Author ID ... 672-71-3249
Title ID .... TC7777
Author ORD .. -1
Royalty % ... 40

Legend:
An Author ORD of -1 means no value is defined.
A Royalty % of 0 means no value is defined.

*/
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 成员
System 命名空间
Nullable


Nullable <(Of <(T >)>) 成员

Nullable
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Nullable

表示基础类型为值类型的对象，值类型与引用类型一样也可以分配 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Nullable T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Nullable T 结构
System 命名空间


Nullable <(Of <(T >)>) 构造函数

Nullable
<
(Of
<
(
T
>
)
>
)
构造函数
Nullable

将 Nullable<(Of <(T>)>) 结构的新实例初始化为指定值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As T _
)
public Nullable(
    T value
)
public:
Nullable(
    T value
)
new :
        value:'T -> Nullable

参数

value
类型： T
一个值类型。

Nullable<(Of <(T>)>) 构造函数将新的 Nullable<(Of <(T>)>) 对象的 HasValue 属性初始化为 true，并将 Value 属性初始化为 value 参数的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
System 命名空间


Nullable <(Of <(T >)>) 方法

Nullable
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Nullable

Nullable T 类型公开以下成员。

名称 说明
页首

参考

Nullable T 结构
System 命名空间


Nullable <(Of <(T >)>) ..::.Equals 方法

Nullable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Equals 方法
Nullable

指示当前 Nullable<(Of <(T>)>) 对象是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _ other As Object _ ) As Boolean
public override bool Equals( Object other )
public: virtual bool Equals( Object^ other ) override
abstract Equals : other:Object -> bool override Equals : other:Object -> bool
参数
other
类型： System Object
一个对象。
返回值
类型： System Boolean
如果
other
等于当前的
Nullable
<
(Of
<
(
T
>
)
>
)
对象，则为
true
；否则为
false
。
此表描述如何定义所比较值的相等性：
返回值
说明
true
HasValue
属性为
false
，并且
other
参数为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
即，根据定义，两个 null 值相等。
HasValue
属性为
false
，并且
other
参数为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
即，根据定义，两个 null 值相等。
- 或 -
HasValue
属性为
true
，并且
Value
属性返回的值等于
other
参数。
false
当前
Nullable
<
(Of
<
(
T
>
)
>
)
结构的
HasValue
属性为
true
，并且
other
参数为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
- 或 -
当前
Nullable
<
(Of
<
(
T
>
)
>
)
结构的
HasValue
属性为
false
，并且
other
参数不为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
- 或 -
当前
Nullable
<
(Of
<
(
T
>
)
>
)
结构的
HasValue
属性为
true
，并且
Value
属性返回的值不等于
other
参数。

如果当前 Nullable<(Of <(T>)>) 结构的 HasValue 属性为 true，则通过将 other 参数传递给当前 Nullable<(Of <(T>)>) 结构的基础值的 Equals 方法来确定相等性。

下面的代码示例确定一个对象和一个 Nullable<(Of <(T>)>) 对象是否等于当前的 Nullable<(Of <(T>)>) 对象。

' This code example demonstrates the Nullable(Of T).Equals
' methods.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim nullInt1 As Nullable(Of Integer) = 100
        Dim nullInt2 As Nullable(Of Integer) = 200
        Dim myObj As Object

    ' Determine if two nullable of System.Int32 values are equal.
    ' The nullable objects have different values.
        Console.Write("1) nullInt1 and nullInt2 ")
        If nullInt1.Equals(nullInt2) Then
            Console.Write("are")
        Else
            Console.Write("are not")
        End If
        Console.WriteLine(" equal.")

    ' Determine if a nullable of System.Int32 and an object
    ' are equal. The object contains the boxed value of the
    ' nullable object.
        myObj = CType(nullInt1, Object)
        Console.Write("2) nullInt1 and myObj ")
        If nullInt1.Equals(myObj) Then
            Console.Write("are")
        Else
            Console.Write("are not")
        End If
        Console.WriteLine(" equal.")
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'1) nullInt1 and nullInt2 are not equal.
'2) nullInt1 and myObj are equal.
'

// This code example demonstrates the Nullable<T>.Equals
// methods.

using System;

class Sample
{
    public static void Main()
    {
    int? nullInt1 = 100;
    int? nullInt2 = 200;
    object myObj;

// Determine if two nullable of System.Int32 values are equal.
// The nullable objects have different values.
    Console.Write("1) nullInt1 and nullInt2 ");
    if (nullInt1.Equals(nullInt2))
        Console.Write("are");
    else
        Console.Write("are not");
    Console.WriteLine(" equal.");

// Determine if a nullable of System.Int32 and an object
// are equal. The object contains the boxed value of the
// nullable object.

    myObj = (object)nullInt1;
    Console.Write("2) nullInt1 and myObj ");
    if (nullInt1.Equals(myObj))
        Console.Write("are");
    else
        Console.Write("are not");
    Console.WriteLine(" equal.");
    }
}

/*
This code example produces the following results:

1) nullInt1 and nullInt2 are not equal.
2) nullInt1 and myObj are equal.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
System 命名空间


Nullable <(Of <(T >)>) ..::.GetHashCode 方法

Nullable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetHashCode 方法
Nullable

检索由 Value 属性返回的对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
如果 HasValue 属性为 true，则为 Value 属性返回的对象的哈希代码；如果 HasValue 属性为 false，则为零。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
System 命名空间


Nullable <(Of <(T >)>) ..::.GetValueOrDefault 方法

Nullable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetValueOrDefault 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Nullable

检索当前 Nullable<(Of <(T>)>) 对象的值或默认值。

名称 说明
页首

参考

Nullable T 结构
Nullable T 成员
System 命名空间


Nullable <(Of <(T >)>) ..::.GetValueOrDefault 方法

Nullable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetValueOrDefault 方法
Nullable

检索当前 Nullable<(Of <(T>)>) 对象的值，或该对象的默认值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetValueOrDefault As T
public T GetValueOrDefault()
public:
T GetValueOrDefault()
member GetValueOrDefault : unit -> 'T

返回值

类型： T
如果 HasValue 属性为 true，则为 Value 属性的值；否则为当前 Nullable<(Of <(T>)>) 对象的默认值。默认值的类型为当前 Nullable<(Of <(T>)>) 对象的类型参数，而默认值的值中只包含二进制零。 如果 HasValue 属性为 true，则为 Value 属性的值；否则为当前 Nullable<(Of <(T>)>) 对象的默认值。默认值的类型为当前 Nullable<(Of <(T>)>) 对象的类型参数，而默认值的值中只包含二进制零。

即使 HasValue 属性为 false，GetValueOrDefault 方法也会返回一个值（这与 Value 属性不同，该属性将引发异常）。

下面的代码示例检索 Nullable<(Of <(T>)>) 对象的值（如果定义了该值）；如果未定义该值，则检索默认值或一个特定的默认值。

' This code example demonstrates the
' Nullable(Of T).GetValueOrDefault methods.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim mySingle As Nullable(Of System.Single) = 12.34F
        Dim yourSingle As Nullable(Of System.Single) = - 1.0F

        Console.WriteLine("*** Display a value or the default value ***" & vbCrLf)
    ' Display the values of mySingle and yourSingle.
        Display("A1", mySingle, yourSingle)

    ' Assign the value of mySingle to yourSingle, then display the values
    ' of mySingle and yourSingle. The yourSingle variable is assigned the
    ' value 12.34 because mySingle has a value.
        yourSingle = mySingle.GetValueOrDefault()
        Display("A2", mySingle, yourSingle)

    ' Assign null (Nothing in Visual Basic) to mySingle, which means no value is
    ' defined for mySingle. Then assign the value of mySingle to yourSingle and
    ' display the values of both variables. The default value of all binary zeroes
    ' is assigned to yourSingle because mySingle has no value.
        mySingle = Nothing
        yourSingle = mySingle.GetValueOrDefault()
        Display("A3", mySingle, yourSingle)

    ' Reassign the original values of mySingle and yourSingle.
        mySingle = 12.34F
        yourSingle = - 1.0F

        Console.Write(vbCrLf & "*** Display a value or the ")
        Console.WriteLine("specified default value ***" & vbCrLf)

    ' Display the values of mySingle and yourSingle.
        Display("B1", mySingle, yourSingle)

    ' Assign the value of mySingle to yourSingle, then display the values
    ' of mySingle and yourSingle. The yourSingle variable is assigned the
    ' value 12.34 because mySingle has a value.
        yourSingle = mySingle.GetValueOrDefault(- 222.22F)
        Display("B2", mySingle, yourSingle)

    ' Assign null (Nothing in Visual Basic) to mySingle, which means no value is
    ' defined for mySingle. Then assign the value of mySingle to yourSingle and
    ' display the values of both variables. The specified default value of -333.33
    ' is assigned to yourSingle because mySingle has no value.
        mySingle = Nothing
        yourSingle = mySingle.GetValueOrDefault(- 333.33F)
        Display("B3", mySingle, yourSingle)

    End Sub 'Main

    ' Display the values of two nullable of System.Single structures.
    ' The Console.WriteLine method automatically calls the ToString methods of
    ' each input argument to display its values. If no value is defined for a
    ' nullable type, the ToString method for that argument returns the empty
    ' string ("").

    Public Shared Sub Display(ByVal title As String, _
                              ByVal dspMySingle As Nullable(Of System.Single), _
                              ByVal dspYourSingle As Nullable(Of System.Single))
        If (True) Then
            Console.WriteLine("{0}) mySingle = [{1}], yourSingle = [{2}]", _
                               title, dspMySingle, dspYourSingle)
        End If
    End Sub 'Display
End Class 'Sample

'
'This code example produces the following results:
'
'A1) mySingle = [12.34], yourSingle = [-1]
'A2) mySingle = [12.34], yourSingle = [12.34]
'A3) mySingle = [], yourSingle = [0]
'
'*** Display a value or the specified default value ***
'
'B1) mySingle = [12.34], yourSingle = [-1]
'B2) mySingle = [12.34], yourSingle = [12.34]
'B3) mySingle = [], yourSingle = [-333.33]
'

// This code example demonstrates the
// Nullable<T>.GetValueOrDefault methods.

using System;

class Sample
{
    public static void Main()
    {
    float? mySingle = 12.34f;
    float? yourSingle = -1.0f;

   Console.WriteLine("*** Display a value or the default value ***\n");
// Display the values of mySingle and yourSingle.

    Display("A1", mySingle, yourSingle);

// Assign the value of mySingle to yourSingle, then display the values
// of mySingle and yourSingle. The yourSingle variable is assigned the
// value 12.34 because mySingle has a value.

    yourSingle = mySingle.GetValueOrDefault();
    Display("A2", mySingle, yourSingle);

// Assign null (Nothing in Visual Basic) to mySingle, which means no value is
// defined for mySingle. Then assign the value of mySingle to yourSingle and
// display the values of both variables. The default value of all binary zeroes
// is assigned to yourSingle because mySingle has no value.

    mySingle = null;
    yourSingle = mySingle.GetValueOrDefault();
    Display("A3", mySingle, yourSingle);

// Reassign the original values of mySingle and yourSingle.
    mySingle = 12.34f;
    yourSingle = -1.0f;

    Console.Write("\n*** Display a value or the ");
    Console.WriteLine("specified default value ***\n");

// Display the values of mySingle and yourSingle.
    Display("B1", mySingle, yourSingle);

// Assign the value of mySingle to yourSingle, then display the values
// of mySingle and yourSingle. The yourSingle variable is assigned the
// value 12.34 because mySingle has a value.

    yourSingle = mySingle.GetValueOrDefault(-222.22f);
    Display("B2", mySingle, yourSingle);

// Assign null (Nothing in Visual Basic) to mySingle, which means no value is
// defined for mySingle. Then assign the value of mySingle to yourSingle and
// display the values of both variables. The specified default value of -333.33
// is assigned to yourSingle because mySingle has no value.

    mySingle = null;
    yourSingle = mySingle.GetValueOrDefault(-333.33f);
    Display("B3", mySingle, yourSingle);

    }

// Display the values of two nullable of System.Single structures.
// The Console.WriteLine method automatically calls the ToString methods of
// each input argument to display its values. If no value is defined for a
// nullable type, the ToString method for that argument returns the empty
// string ("").
    public static void Display(string title, float? dspMySingle, float? dspYourSingle)
    {
    Console.WriteLine("{0}) mySingle = [{1}], yourSingle = [{2}]",
                      title, dspMySingle, dspYourSingle);
    }
}

/*
This code example produces the following results:

A1) mySingle = [12.34], yourSingle = [-1]
A2) mySingle = [12.34], yourSingle = [12.34]
A3) mySingle = [], yourSingle = [0]

*** Display a value or the specified default value ***

B1) mySingle = [12.34], yourSingle = [-1]
B2) mySingle = [12.34], yourSingle = [12.34]
B3) mySingle = [], yourSingle = [-333.33]

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
GetValueOrDefault 重载
System 命名空间
GetValueOrDefault


Nullable <(Of <(T >)>) ..::.GetValueOrDefault 方法 (T)

Nullable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetValueOrDefault 方法 (T)
Nullable

检索当前 Nullable<(Of <(T>)>) 对象的值或指定的默认值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetValueOrDefault ( _
    defaultValue As T _
) As T
public T GetValueOrDefault(
    T defaultValue
)
public:
T GetValueOrDefault(
    T defaultValue
)
member GetValueOrDefault :
        defaultValue:'T -> 'T

参数

defaultValue
类型： T
如果 HasValue 属性为 false，则为一个返回值。

返回值

类型： T
如果 HasValue 属性为 true，则为 Value 属性的值；否则为 defaultValue 参数。

即使 HasValue 属性为 false，GetValueOrDefault 方法也会返回一个值（这与 Value 属性不同，该属性将引发异常）。

下面的代码示例检索 Nullable<(Of <(T>)>) 对象的值（如果定义了该值）；如果未定义该值，则检索默认值或一个特定的默认值。

' This code example demonstrates the
' Nullable(Of T).GetValueOrDefault methods.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim mySingle As Nullable(Of System.Single) = 12.34F
        Dim yourSingle As Nullable(Of System.Single) = - 1.0F

        Console.WriteLine("*** Display a value or the default value ***" & vbCrLf)
    ' Display the values of mySingle and yourSingle.
        Display("A1", mySingle, yourSingle)

    ' Assign the value of mySingle to yourSingle, then display the values
    ' of mySingle and yourSingle. The yourSingle variable is assigned the
    ' value 12.34 because mySingle has a value.
        yourSingle = mySingle.GetValueOrDefault()
        Display("A2", mySingle, yourSingle)

    ' Assign null (Nothing in Visual Basic) to mySingle, which means no value is
    ' defined for mySingle. Then assign the value of mySingle to yourSingle and
    ' display the values of both variables. The default value of all binary zeroes
    ' is assigned to yourSingle because mySingle has no value.
        mySingle = Nothing
        yourSingle = mySingle.GetValueOrDefault()
        Display("A3", mySingle, yourSingle)

    ' Reassign the original values of mySingle and yourSingle.
        mySingle = 12.34F
        yourSingle = - 1.0F

        Console.Write(vbCrLf & "*** Display a value or the ")
        Console.WriteLine("specified default value ***" & vbCrLf)

    ' Display the values of mySingle and yourSingle.
        Display("B1", mySingle, yourSingle)

    ' Assign the value of mySingle to yourSingle, then display the values
    ' of mySingle and yourSingle. The yourSingle variable is assigned the
    ' value 12.34 because mySingle has a value.
        yourSingle = mySingle.GetValueOrDefault(- 222.22F)
        Display("B2", mySingle, yourSingle)

    ' Assign null (Nothing in Visual Basic) to mySingle, which means no value is
    ' defined for mySingle. Then assign the value of mySingle to yourSingle and
    ' display the values of both variables. The specified default value of -333.33
    ' is assigned to yourSingle because mySingle has no value.
        mySingle = Nothing
        yourSingle = mySingle.GetValueOrDefault(- 333.33F)
        Display("B3", mySingle, yourSingle)

    End Sub 'Main

    ' Display the values of two nullable of System.Single structures.
    ' The Console.WriteLine method automatically calls the ToString methods of
    ' each input argument to display its values. If no value is defined for a
    ' nullable type, the ToString method for that argument returns the empty
    ' string ("").

    Public Shared Sub Display(ByVal title As String, _
                              ByVal dspMySingle As Nullable(Of System.Single), _
                              ByVal dspYourSingle As Nullable(Of System.Single))
        If (True) Then
            Console.WriteLine("{0}) mySingle = [{1}], yourSingle = [{2}]", _
                               title, dspMySingle, dspYourSingle)
        End If
    End Sub 'Display
End Class 'Sample

'
'This code example produces the following results:
'
'A1) mySingle = [12.34], yourSingle = [-1]
'A2) mySingle = [12.34], yourSingle = [12.34]
'A3) mySingle = [], yourSingle = [0]
'
'*** Display a value or the specified default value ***
'
'B1) mySingle = [12.34], yourSingle = [-1]
'B2) mySingle = [12.34], yourSingle = [12.34]
'B3) mySingle = [], yourSingle = [-333.33]
'

// This code example demonstrates the
// Nullable<T>.GetValueOrDefault methods.

using System;

class Sample
{
    public static void Main()
    {
    float? mySingle = 12.34f;
    float? yourSingle = -1.0f;

   Console.WriteLine("*** Display a value or the default value ***\n");
// Display the values of mySingle and yourSingle.

    Display("A1", mySingle, yourSingle);

// Assign the value of mySingle to yourSingle, then display the values
// of mySingle and yourSingle. The yourSingle variable is assigned the
// value 12.34 because mySingle has a value.

    yourSingle = mySingle.GetValueOrDefault();
    Display("A2", mySingle, yourSingle);

// Assign null (Nothing in Visual Basic) to mySingle, which means no value is
// defined for mySingle. Then assign the value of mySingle to yourSingle and
// display the values of both variables. The default value of all binary zeroes
// is assigned to yourSingle because mySingle has no value.

    mySingle = null;
    yourSingle = mySingle.GetValueOrDefault();
    Display("A3", mySingle, yourSingle);

// Reassign the original values of mySingle and yourSingle.
    mySingle = 12.34f;
    yourSingle = -1.0f;

    Console.Write("\n*** Display a value or the ");
    Console.WriteLine("specified default value ***\n");

// Display the values of mySingle and yourSingle.
    Display("B1", mySingle, yourSingle);

// Assign the value of mySingle to yourSingle, then display the values
// of mySingle and yourSingle. The yourSingle variable is assigned the
// value 12.34 because mySingle has a value.

    yourSingle = mySingle.GetValueOrDefault(-222.22f);
    Display("B2", mySingle, yourSingle);

// Assign null (Nothing in Visual Basic) to mySingle, which means no value is
// defined for mySingle. Then assign the value of mySingle to yourSingle and
// display the values of both variables. The specified default value of -333.33
// is assigned to yourSingle because mySingle has no value.

    mySingle = null;
    yourSingle = mySingle.GetValueOrDefault(-333.33f);
    Display("B3", mySingle, yourSingle);

    }

// Display the values of two nullable of System.Single structures.
// The Console.WriteLine method automatically calls the ToString methods of
// each input argument to display its values. If no value is defined for a
// nullable type, the ToString method for that argument returns the empty
// string ("").
    public static void Display(string title, float? dspMySingle, float? dspYourSingle)
    {
    Console.WriteLine("{0}) mySingle = [{1}], yourSingle = [{2}]",
                      title, dspMySingle, dspYourSingle);
    }
}

/*
This code example produces the following results:

A1) mySingle = [12.34], yourSingle = [-1]
A2) mySingle = [12.34], yourSingle = [12.34]
A3) mySingle = [], yourSingle = [0]

*** Display a value or the specified default value ***

B1) mySingle = [12.34], yourSingle = [-1]
B2) mySingle = [12.34], yourSingle = [12.34]
B3) mySingle = [], yourSingle = [-333.33]

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
GetValueOrDefault 重载
System 命名空间
GetValueOrDefault


Nullable <(Of <(T >)>) ..::.ToString 方法

Nullable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
ToString 方法
Nullable

返回当前 Nullable<(Of <(T>)>) 对象的值的文本表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
如果 HasValue 属性为 true，则是当前 Nullable<(Of <(T>)>) 对象的值的文本表示形式；如果 HasValue 属性为 false，则是一个空字符串 ("")。

ToString 属性返回通过调用 Value 属性所返回对象的 ToString 属性而生成的字符串。

下面的代码示例显示当前 Nullable<(Of <(T>)>) 对象的值。

' This code example demonstrates the
' Nullable<T>.ToString method.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim nullableDate As Nullable(Of DateTime)
    ' Display the current date and time.
        nullableDate = DateTime.Now
        Display("1)", nullableDate)

    ' Assign null (Nothing in Visual Basic) to nullableDate, then
    ' display its value.
        nullableDate = Nothing
        Display("2)", nullableDate)
    End Sub 'Main

    '  Display the text representation of a nullable DateTime.
    Public Shared Sub Display(ByVal title As String, _
                              ByVal dspDT As Nullable(Of DateTime))
        Dim msg As String = dspDT.ToString()

        Console.Write("{0} ", title)
        If String.IsNullOrEmpty(msg) Then
            Console.WriteLine("The nullable DateTime has no defined value.")
        Else
            Console.WriteLine("The current date and time is {0}.", msg)
        End If
    End Sub 'Display
End Class 'Sample

'This code example produces the following results:
'
'1) The current date and time is 4/19/2005 8:28:14 PM.
'2) The nullable DateTime has no defined value.
'

// This code example demonstrates the
// Nullable<T>.ToString method.

using System;

class Sample
{
    public static void Main()
    {
    DateTime? nullableDate;

// Display the current date and time.
    nullableDate = DateTime.Now;
    Display("1)", nullableDate);

// Assign null (Nothing in Visual Basic) to nullableDate, then
// display its value.
    nullableDate = null;
    Display("2)", nullableDate);
    }

// Display the text representation of a nullable DateTime.
    public static void Display(string title, DateTime? dspDT)
    {
    string msg = dspDT.ToString();

    Console.Write("{0} ", title);
    if (String.IsNullOrEmpty(msg))
        Console.WriteLine("The nullable DateTime has no defined value.");
    else
        Console.WriteLine("The current date and time is {0}.", msg);
    }
}

/*
This code example produces the following results:

1) The current date and time is 4/19/2005 8:28:14 PM.
2) The nullable DateTime has no defined value.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
System 命名空间


Nullable <(Of <(T >)>) 类型转换

Nullable
<
(Of
<
(
T
>
)
>
)
类型转换
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Nullable

Nullable T 类型公开以下成员。

名称 说明
页首

参考

Nullable T 结构
System 命名空间


Nullable <(Of <(T >)>) ExplicitNarrowingExplicitExplicit 转换 (Nullable <(Of <(T >)>) to T)

Nullable
<
(Of
<
(
T
>
)
>
)
Explicit
Narrowing
Explicit
Explicit
转换 (Nullable
<
(Of
<
(
T
>
)
>
)
to T)
Nullable

返回指定的 Nullable<(Of <(T>)>) 的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Nullable(Of T) _
) As T
public static explicit operator T (
    Nullable<T> value
)
static explicit operator T (
    Nullable<T> value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Nullable
<
(Of
<
(
T
>
)
>
)

Nullable<(Of <(T>)>) 值。

返回值

类型： T
value 参数的 Value 属性的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
System 命名空间


Nullable <(Of <(T >)>) ImplicitWideningImplicitImplicit 转换 (T to Nullable <(Of <(T >)>))

Nullable
<
(Of
<
(
T
>
)
>
)
Implicit
Widening
Implicit
Implicit
转换 (T to Nullable
<
(Of
<
(
T
>
)
>
)
)
Nullable

创建一个新的 Nullable<(Of <(T>)>) 对象，并将其初始化为指定的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Widening Operator CType ( _
    value As T _
) As Nullable(Of T)
public static implicit operator Nullable<T> (
    T value
)
static implicit operator Nullable<T> (
    T value
)
F# 不支持新转换运算符的声明。

参数

value
类型： T
一个值类型。

返回值

类型： System Nullable
<
(Of
<
(
T
>
)
>
)

一个 Nullable<(Of <(T>)>) 对象，其 Value 属性使用 value 参数进行初始化。

如果 value 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则新的 Nullable<(Of <(T>)>) 值的 Value 属性会被初始化为 value 参数，并且 HasValue 属性会被初始化为 true。

如果 value 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则新的 Nullable<(Of <(T>)>) 值的 Value 属性将初始化为均由二进制零组成的默认值；而 HasValue 属性将初始化为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
System 命名空间


Nullable <(Of <(T >)>) 属性

Nullable
<
(Of
<
(
T
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Nullable

Nullable T 类型公开以下成员。

名称 说明
页首

参考

Nullable T 结构
System 命名空间


Nullable <(Of <(T >)>) ..::.HasValue 属性

Nullable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
HasValue 属性
Nullable

获取一个值，指示当前的 Nullable<(Of <(T>)>) 对象是否有值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property HasValue As Boolean
    Get
public bool HasValue { get; }
public:
property bool HasValue {
    bool get ();
}
member HasValue : bool

属性值

类型： System Boolean
如果当前的 Nullable<(Of <(T>)>) 对象具有值，则为 true；如果当前的 Nullable<(Of <(T>)>) 对象没有值，则为 false。

如果 HasValue 属性为 true，则可以使用 Value 属性访问当前 Nullable<(Of <(T>)>) 对象的值。

下面的代码示例在 Nullable<(Of <(T>)>) 对象具有已定义值的情况下返回该对象的值；否则返回默认值。

' This code example demonstrates the Nullable(Of T).HasValue
' and Value properties.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim myNow As Nullable(Of DateTime)

    '  Assign the current date and time to myNow then display its value.
        myNow = DateTime.Now
        Display(myNow, "1) ")

    '  Assign null (Nothing in Visual Basic) to myNow then display its value.
        myNow = Nothing
        Display(myNow, "2) ")
    End Sub 'Main

    ' Display the date and time.
    Public Shared Sub Display(ByVal displayDateTime As Nullable(Of DateTime), _
                              ByVal title As String)

    ' If the HasValue property for the nullable of DateTime input argument is true,
    ' display the value of the input argument; otherwise, display that no value is
    ' defined for the input value.
        Console.Write(title)
        If displayDateTime.HasValue = True Then
            Console.WriteLine("The date and time is {0:F}.", displayDateTime.Value)
        Else
            Console.WriteLine("The date and time is not defined.")
        End If
    End Sub 'Display

End Class 'Sample '

'This code example produces the following results:
'
'1) The date and time is Tuesday, April 19, 2005 4:16:06 PM.
'2) The date and time is not defined.
'

// This code example demonstrates the Nullable<T>.HasValue
// and Value properties.

using System;

class Sample
{
    public static void Main()
    {
    DateTime? myNow;

//  Assign the current date and time to myNow then display its value.
    myNow = DateTime.Now;
    Display(myNow, "1) ");

//  Assign null (Nothing in Visual Basic) to myNow then display its value.
    myNow = null;
    Display(myNow, "2) ");
    }

// Display the date and time.
    public static void Display(DateTime? displayDateTime, string title)
    {
// If a value is defined for the displayDatetime argument, display its value; otherwise,
// display that no value is defined.
    Console.Write(title);
    if (displayDateTime.HasValue == true)
        Console.WriteLine("The date and time is {0:F}.", displayDateTime.Value);
    else
        Console.WriteLine("The date and time is not defined.");
    }
}

/*
This code example produces the following results:

1) The date and time is Tuesday, April 19, 2005 4:16:06 PM.
2) The date and time is not defined.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
System 命名空间


Nullable <(Of <(T >)>) ..::.Value 属性

Nullable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Value 属性
Nullable

获取当前的 Nullable<(Of <(T>)>) 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Value As T
    Get
public T Value { get; }
public:
property T Value {
    T get ();
}
member Value : 'T

属性值

类型： T
如果 HasValue 属性为 true，则为当前 Nullable<(Of <(T>)>) 对象的值。如果 HasValue 属性为 false，则将引发异常。 如果 HasValue 属性为 true，则为当前 Nullable<(Of <(T>)>) 对象的值。如果 HasValue 属性为 false，则将引发异常。
异常 | 条件
InvalidOperationException | HasValue 属性为 false。

下面的代码示例在 Nullable<(Of <(T>)>) 对象具有已定义值的情况下返回该对象的值；否则返回默认值。

' This code example demonstrates the Nullable(Of T).HasValue
' and Value properties.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim myNow As Nullable(Of DateTime)

    '  Assign the current date and time to myNow then display its value.
        myNow = DateTime.Now
        Display(myNow, "1) ")

    '  Assign null (Nothing in Visual Basic) to myNow then display its value.
        myNow = Nothing
        Display(myNow, "2) ")
    End Sub 'Main

    ' Display the date and time.
    Public Shared Sub Display(ByVal displayDateTime As Nullable(Of DateTime), _
                              ByVal title As String)

    ' If the HasValue property for the nullable of DateTime input argument is true,
    ' display the value of the input argument; otherwise, display that no value is
    ' defined for the input value.
        Console.Write(title)
        If displayDateTime.HasValue = True Then
            Console.WriteLine("The date and time is {0:F}.", displayDateTime.Value)
        Else
            Console.WriteLine("The date and time is not defined.")
        End If
    End Sub 'Display

End Class 'Sample '

'This code example produces the following results:
'
'1) The date and time is Tuesday, April 19, 2005 4:16:06 PM.
'2) The date and time is not defined.
'

// This code example demonstrates the Nullable<T>.HasValue
// and Value properties.

using System;

class Sample
{
    public static void Main()
    {
    DateTime? myNow;

//  Assign the current date and time to myNow then display its value.
    myNow = DateTime.Now;
    Display(myNow, "1) ");

//  Assign null (Nothing in Visual Basic) to myNow then display its value.
    myNow = null;
    Display(myNow, "2) ");
    }

// Display the date and time.
    public static void Display(DateTime? displayDateTime, string title)
    {
// If a value is defined for the displayDatetime argument, display its value; otherwise,
// display that no value is defined.
    Console.Write(title);
    if (displayDateTime.HasValue == true)
        Console.WriteLine("The date and time is {0:F}.", displayDateTime.Value);
    else
        Console.WriteLine("The date and time is not defined.");
    }
}

/*
This code example produces the following results:

1) The date and time is Tuesday, April 19, 2005 4:16:06 PM.
2) The date and time is not defined.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Nullable T 结构
Nullable T 成员
System 命名空间


NullReferenceException 类

NullReferenceException 类
成员

尝试取消引用空对象引用时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class NullReferenceException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class NullReferenceException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class NullReferenceException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type NullReferenceException =
    class
        inherit SystemException
    end

注意，应用程序引发 ArgumentNullException 异常，而不是此处讨论的 NullReferenceException 异常。

下面的 Microsoft 中间语言 (MSIL) 指令引发 NullReferenceException：

  • callvirt

  • cpblk

  • cpobj

  • initblk

  • ldelem.<type>

  • ldelema

  • ldfld

  • ldflda

  • ldind.<type>

  • ldlen

  • stelem.<type>

  • stfld

  • stind.<type>

  • throw

  • unbox

NullReferenceException 使用值为 0x80004003 的 HRESULT COR_E_NULLREFERENCE。

有关 NullReferenceException 实例的初始属性值列表，请参见 NullReferenceException 构造函数。

System System..::.NullReferenceExceptionNullReferenceException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NullReferenceException 成员
System 命名空间
Exception

其他资源

处理和引发异常


NullReferenceException 成员

NullReferenceException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NullReferenceException 类

尝试取消引用空对象引用时引发的异常。

NullReferenceException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

NullReferenceException 类
System 命名空间


NullReferenceException 构造函数

NullReferenceException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NullReferenceException 类

初始化 NullReferenceException 类的新实例。

名称 说明
页首

参考

NullReferenceException 类
NullReferenceException 成员
System 命名空间


NullReferenceException 构造函数

NullReferenceException 构造函数
NullReferenceException 类

初始化 NullReferenceException 类的新实例，将新实例的 Message 属性设置为系统提供的描述错误的消息，如“在需要对象实例的地方找到了值‘null’。”。此消息将考虑当前系统区域性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public NullReferenceException()
public:
NullReferenceException()
new : unit -> NullReferenceException

下表显示 NullReferenceException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NullReferenceException 类
NullReferenceException 成员
NullReferenceException 重载
System 命名空间


NullReferenceException 构造函数 (String)

NullReferenceException 构造函数 (String)
NullReferenceException 类

使用指定错误信息初始化 NullReferenceException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public NullReferenceException(
    string message
)
public:
NullReferenceException(
    String^ message
)
new :
        message:string -> NullReferenceException

参数

message
类型： System String
描述该错误的 String。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该错误的 String。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该错误的 String。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 NullReferenceException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NullReferenceException 类
NullReferenceException 成员
NullReferenceException 重载
System 命名空间


NullReferenceException 构造函数 (SerializationInfo, StreamingContext)

NullReferenceException 构造函数 (SerializationInfo, StreamingContext)
NullReferenceException 类

用序列化数据初始化 NullReferenceException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected NullReferenceException(
    SerializationInfo info,
    StreamingContext context
)
protected:
NullReferenceException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> NullReferenceException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NullReferenceException 类
NullReferenceException 成员
NullReferenceException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


NullReferenceException 构造函数 (String, Exception)

NullReferenceException 构造函数 (String, Exception)
NullReferenceException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 NullReferenceException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public NullReferenceException(
    string message,
    Exception innerException
)
public:
NullReferenceException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> NullReferenceException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 NullReferenceException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NullReferenceException 类
NullReferenceException 成员
NullReferenceException 重载
System 命名空间
Exception

其他资源

处理和引发异常


NullReferenceException 方法

NullReferenceException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NullReferenceException 类

NullReferenceException 类型公开以下成员。

名称 说明
页首

参考

NullReferenceException 类
System 命名空间


NullReferenceException 属性

NullReferenceException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NullReferenceException 类

NullReferenceException 类型公开以下成员。

名称 说明
页首

参考

NullReferenceException 类
System 命名空间


NullReferenceException 事件

NullReferenceException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NullReferenceException 类

NullReferenceException 类型公开以下成员。

名称 说明
页首

参考

NullReferenceException 类
System 命名空间


Object 类

Object 类
成员

支持 .NET Framework 类层次结构中的所有类，并为派生类提供低级别服务。这是 .NET Framework 中所有类的最终基类；它是类型层次结构的根。 支持 .NET Framework 类层次结构中的所有类，并为派生类提供低级别服务。这是 .NET Framework 中所有类的最终基类；它是类型层次结构的根。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ClassInterfaceAttribute(ClassInterfaceType.AutoDual)> _
<ComVisibleAttribute(True)> _
Public Class Object
[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
[ComVisibleAttribute(true)]
public class Object
[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType::AutoDual)]
[ComVisibleAttribute(true)]
public ref class Object
[<SerializableAttribute>]
[<ClassInterfaceAttribute(ClassInterfaceType.AutoDual)>]
[<ComVisibleAttribute(true)>]
type Object =  class end

语言通常不要求类声明从 Object 的继承，因为继承是隐式的。

因为 .NET Framework 中的所有类均从 Object 派生，所以 Object 类中定义的每个方法可用于系统中的所有对象。派生类可以而且确实重写这些方法中的某些，其中包括： 因为 .NET Framework 中的所有类均从 Object 派生，所以 Object 类中定义的每个方法可用于系统中的所有对象。派生类可以而且确实重写这些方法中的某些，其中包括：

  • Equals — 支持对象间的比较。

  • Finalize — 在自动回收对象之前执行清理操作。

  • GetHashCode — 生成一个与对象的值相对应的数字以支持哈希表的使用。

  • ToString — 生成描述类的实例的可读文本字符串。

性能注意事项

如果要设计的类（如集合）必须处理所有类型的对象，则可以创建接受 Object 类的实例的类成员。但是，对类型进行装箱和取消装箱的过程会增加性能开销。如果知道新类将频繁处理某些值类型，则可以使用下列两种策略之一，以使装箱开销减至最少。 如果要设计的类（如集合）必须处理所有类型的对象，则可以创建接受 Object 类的实例的类成员。但是，对类型进行装箱和取消装箱的过程会增加性能开销。如果知道新类将频繁处理某些值类型，则可以使用下列两种策略之一，以使装箱开销减至最少。 如果要设计的类（如集合）必须处理所有类型的对象，则可以创建接受 Object 类的实例的类成员。但是，对类型进行装箱和取消装箱的过程会增加性能开销。如果知道新类将频繁处理某些值类型，则可以使用下列两种策略之一，以使装箱开销减至最少。

  • 一种策略是创建一个一般方法和一组类型特定的重载方法；一般方法接受 Object 类型，重载方法接受类预期要频繁处理的所有值类型。如果某个类型特定的方法可接受调用参数类型，调用该类型特定的方法时则无需进行装箱。如果调用参数类型与方法参数都不匹配，则对该参数进行装箱并调用一般方法。 一种策略是创建一个一般方法和一组类型特定的重载方法；一般方法接受 Object 类型，重载方法接受类预期要频繁处理的所有值类型。如果某个类型特定的方法可接受调用参数类型，调用该类型特定的方法时则无需进行装箱。如果调用参数类型与方法参数都不匹配，则对该参数进行装箱并调用一般方法。 一种策略是创建一个一般方法和一组类型特定的重载方法；一般方法接受 Object 类型，重载方法接受类预期要频繁处理的所有值类型。如果某个类型特定的方法可接受调用参数类型，调用该类型特定的方法时则无需进行装箱。如果调用参数类型与方法参数都不匹配，则对该参数进行装箱并调用一般方法。

  • 另一种策略是将类及其方法设计为使用泛型。在创建类的实例并指定一个泛型类型参数时，公共语言运行时创建一个封闭泛型类型。泛型方法是类型特定的，无需对调用参数进行装箱即可调用。 另一种策略是将类及其方法设计为使用泛型。在创建类的实例并指定一个泛型类型参数时，公共语言运行时创建一个封闭泛型类型。泛型方法是类型特定的，无需对调用参数进行装箱即可调用。 另一种策略是将类及其方法设计为使用泛型。在创建类的实例并指定一个泛型类型参数时，公共语言运行时创建一个封闭泛型类型。泛型方法是类型特定的，无需对调用参数进行装箱即可调用。

虽然有时必须开发可接受并返回 Object 类型的通用类，但也可以提供特定于类型的类来处理常用类型，从而提高性能。例如，通过提供特定于设置和获取布尔值的类，可以减少对布尔值进行装箱和取消装箱所需的开销。 虽然有时必须开发可接受并返回 Object 类型的通用类，但也可以提供特定于类型的类来处理常用类型，从而提高性能。例如，通过提供特定于设置和获取布尔值的类，可以减少对布尔值进行装箱和取消装箱所需的开销。

下面的示例定义一个派生自 Object 类的 Point 类型，然后重写 Object 类的很多虚方法。此外，该示例还演示如何调用 Object 类的很多静态方法和实例方法。 下面的示例定义一个派生自 Object 类的 Point 类型，然后重写 Object 类的很多虚方法。此外，该示例还演示如何调用 Object 类的很多静态方法和实例方法。

Imports System

' The Point class is derived from System.Object.

Class Point
    Public x, y As Integer

    Public Sub New(ByVal x As Integer, ByVal y As Integer)
        Me.x = x
        Me.y = y
    End Sub 'New

    Public Overrides Function Equals(ByVal obj As Object) As Boolean
        ' If Me and obj do not refer to the same type, then they are not equal.
        Dim objType As Type = obj.GetType()
        Dim meType  As Type = Me.GetType()
        If Not objType.Equals(meType) Then
            Return False
        End If
        ' Return true if  x and y fields match.
        Dim other As Point = CType(obj, Point)
        Return Me.x = other.x AndAlso Me.y = other.y
    End Function 'Equals

    ' Return the XOR of the x and y fields.
    Public Overrides Function GetHashCode() As Integer
        Return x ^ y
    End Function 'GetHashCode

    ' Return the point's value as a string.
    Public Overrides Function ToString() As String
        Return String.Format("({0}, {1})", x, y)
    End Function 'ToString

    ' Return a copy of this point object by making a simple field copy.
    Public Function Copy() As Point
        Return CType(Me.MemberwiseClone(), Point)
    End Function 'Copy
End Class 'Point

NotInheritable Public Class App

    Shared Sub Main()
        ' Construct a Point object.
        Dim p1 As New Point(1, 2)

        ' Make another Point object that is a copy of the first.
        Dim p2 As Point = p1.Copy()

        ' Make another variable that references the first Point object.
        Dim p3 As Point = p1

        ' The line below displays false because p1 and p2 refer to two different objects.
        Console.WriteLine([Object].ReferenceEquals(p1, p2))

        ' The line below displays true because p1 and p2 refer to two different objects
        ' that have the same value.
        Console.WriteLine([Object].Equals(p1, p2))

        ' The line below displays true because p1 and p3 refer to one object.
        Console.WriteLine([Object].ReferenceEquals(p1, p3))

        ' The line below displays: p1's value is: (1, 2)
        Console.WriteLine("p1's value is: {0}", p1.ToString())

    End Sub 'Main
End Class 'App

' This code example produces the following output:
'
' False
' True
' True
' p1's value is: (1, 2)
'

using System;

// The Point class is derived from System.Object.
class Point
{
    public int x, y;

    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    public override bool Equals(object obj)
    {
        // If this and obj do not refer to the same type, then they are not equal.
        if (obj.GetType() != this.GetType()) return false;

        // Return true if  x and y fields match.
        Point other = (Point) obj;
        return (this.x == other.x) && (this.y == other.y);
    }

    // Return the XOR of the x and y fields.
    public override int GetHashCode()
    {
        return x ^ y;
    }

    // Return the point's value as a string.
    public override String ToString()
    {
        return String.Format("({0}, {1})", x, y);
    }

    // Return a copy of this point object by making a simple field copy.
    public Point Copy()
    {
        return (Point) this.MemberwiseClone();
    }
}

public sealed class App {
    static void Main()
    {
        // Construct a Point object.
        Point p1 = new Point(1,2);

        // Make another Point object that is a copy of the first.
        Point p2 = p1.Copy();

        // Make another variable that references the first Point object.
        Point p3 = p1;

        // The line below displays false because p1 and p2 refer to two different objects.
        Console.WriteLine(Object.ReferenceEquals(p1, p2));

        // The line below displays true because p1 and p2 refer to two different objects that have the same value.
        Console.WriteLine(Object.Equals(p1, p2));

        // The line below displays true because p1 and p3 refer to one object.
        Console.WriteLine(Object.ReferenceEquals(p1, p3));

        // The line below displays: p1's value is: (1, 2)
        Console.WriteLine("p1's value is: {0}", p1.ToString());
    }
}

// This code example produces the following output:
//
// False
// True
// True
// p1's value is: (1, 2)
//

using namespace System;

// The Point class is derived from System.Object.
ref class Point
{
public:
    int x;
public:
    int y;

public:
    Point(int x, int y)
    {
        this->x = x;
        this->y = y;
    }

public:
    virtual bool Equals(Object^ obj) override
    {
        // If this and obj do not refer to the same type,
        // then they are not equal.
        if (obj->GetType() != this->GetType())
        {
            return false;
        }

        // Return true if  x and y fields match.
        Point^ other = (Point^) obj;
        return (this->x == other->x) && (this->y == other->y);
    }

    // Return the XOR of the x and y fields.
public:
    virtual int GetHashCode() override
    {
        return x ^ y;
    }

    // Return the point's value as a string.
public:
    virtual String^ ToString() override
    {
        return String::Format("({0}, {1})", x, y);
    }

    // Return a copy of this point object by making a simple
    // field copy.
public:
    Point^ Copy()
    {
        return (Point^) this->MemberwiseClone();
    }
};

int main()
{
    // Construct a Point object.
    Point^ p1 = gcnew Point(1, 2);

    // Make another Point object that is a copy of the first.
    Point^ p2 = p1->Copy();

    // Make another variable that references the first
    // Point object.
    Point^ p3 = p1;

    // The line below displays false because p1 and
    // p2 refer to two different objects.
    Console::WriteLine(
        Object::ReferenceEquals(p1, p2));

    // The line below displays true because p1 and p2 refer
    // to two different objects that have the same value.
    Console::WriteLine(Object::Equals(p1, p2));

    // The line below displays true because p1 and
    // p3 refer to one object.
    Console::WriteLine(Object::ReferenceEquals(p1, p3));

    // The line below displays: p1's value is: (1, 2)
    Console::WriteLine("p1's value is: {0}", p1->ToString());
}

// This code produces the following output.
//
// False
// True
// True
// p1's value is: (1, 2)
System System..::.ObjectObject

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。不能保证实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。不能保证实例成员是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 成员
System 命名空间


Object 成员

Object 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Object 类

支持 .NET Framework 类层次结构中的所有类，并为派生类提供低级别服务。这是 .NET Framework 中所有类的最终基类；它是类型层次结构的根。 支持 .NET Framework 类层次结构中的所有类，并为派生类提供低级别服务。这是 .NET Framework 中所有类的最终基类；它是类型层次结构的根。

Object 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Object 类
System 命名空间


Object 构造函数

Object 构造函数
Object 类

初始化 Object 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public Object()
public:
Object()
new : unit -> Object

此构造函数由派生类中的构造函数调用，但它也可以直接用于创建 Object 类的实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 类
Object 成员
System 命名空间


Object 方法

Object 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Object 类

Object 类型公开以下成员。

名称 说明
页首

参考

Object 类
System 命名空间


Object ..::.Equals 方法

Object
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Object 类

确定两个 Object 实例是否相等。

名称 说明
页首

参考

Object 类
Object 成员
System 命名空间


Object ..::.Equals 方法 (Object)

Object
.
.
::
.
Equals 方法 (Object)
Object 类

确定指定的 Object 是否等于当前的 Object。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Equals ( _
    obj As Object _
) As Boolean
public virtual bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
)
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与当前的 Object 进行比较的 Object。

返回值

类型： System Boolean
如果指定的 Object 等于当前的 Object，则为 true；否则为 false。

Equals 的默认实现支持引用相等性（对于引用类型）和按位相等性（对于值类型）。引用相等性是指进行比较的多个对象引用所引用的是同一个对象。按位相等性是指进行比较的多个对象具有相同的二进制表示形式。 Equals 的默认实现支持引用相等性（对于引用类型）和按位相等性（对于值类型）。引用相等性是指进行比较的多个对象引用所引用的是同一个对象。按位相等性是指进行比较的多个对象具有相同的二进制表示形式。 Equals 的默认实现支持引用相等性（对于引用类型）和按位相等性（对于值类型）。引用相等性是指进行比较的多个对象引用所引用的是同一个对象。按位相等性是指进行比较的多个对象具有相同的二进制表示形式。

请注意，派生类型可以重写 Equals 方法以实现值相等性。值相等性是指所比较的对象具有相同的值，即使它们具有不同的二进制表示形式也是如此。例如，请考虑两个分别表示数字 1.10 和 1.1000 的 Decimal 对象。Decimal 对象不具有按位相等性，因为它们具有不同的二进制表示形式，因此会考虑不同数量的尾随零。但是，这些对象具有值相等性，因为在进行比较时尾随零无关紧要，数字 1.10 和 1.1000 被视为相等。 请注意，派生类型可以重写 Equals 方法以实现值相等性。值相等性是指所比较的对象具有相同的值，即使它们具有不同的二进制表示形式也是如此。例如，请考虑两个分别表示数字 1.10 和 1.1000 的 Decimal 对象。Decimal 对象不具有按位相等性，因为它们具有不同的二进制表示形式，因此会考虑不同数量的尾随零。但是，这些对象具有值相等性，因为在进行比较时尾随零无关紧要，数字 1.10 和 1.1000 被视为相等。 请注意，派生类型可以重写 Equals 方法以实现值相等性。值相等性是指所比较的对象具有相同的值，即使它们具有不同的二进制表示形式也是如此。例如，请考虑两个分别表示数字 1.10 和 1.1000 的 Decimal 对象。Decimal 对象不具有按位相等性，因为它们具有不同的二进制表示形式，因此会考虑不同数量的尾随零。但是，这些对象具有值相等性，因为在进行比较时尾随零无关紧要，数字 1.10 和 1.1000 被视为相等。 请注意，派生类型可以重写 Equals 方法以实现值相等性。值相等性是指所比较的对象具有相同的值，即使它们具有不同的二进制表示形式也是如此。例如，请考虑两个分别表示数字 1.10 和 1.1000 的 Decimal 对象。Decimal 对象不具有按位相等性，因为它们具有不同的二进制表示形式，因此会考虑不同数量的尾随零。但是，这些对象具有值相等性，因为在进行比较时尾随零无关紧要，数字 1.10 和 1.1000 被视为相等。 请注意，派生类型可以重写 Equals 方法以实现值相等性。值相等性是指所比较的对象具有相同的值，即使它们具有不同的二进制表示形式也是如此。例如，请考虑两个分别表示数字 1.10 和 1.1000 的 Decimal 对象。Decimal 对象不具有按位相等性，因为它们具有不同的二进制表示形式，因此会考虑不同数量的尾随零。但是，这些对象具有值相等性，因为在进行比较时尾随零无关紧要，数字 1.10 和 1.1000 被视为相等。

对实现者的说明

此方法可由派生类重写。例如，如果两个对象表示相同的值，则许多基数据类型返回 true；否则返回 false。 此方法可由派生类重写。例如，如果两个对象表示相同的值，则许多基数据类型返回 true；否则返回 false。

此方法仅比较基元和对象。若要比较更复杂的结构（如对象数组），必须重写该方法。 此方法仅比较基元和对象。若要比较更复杂的结构（如对象数组），必须重写该方法。

下面的语句对于 Equals 方法的所有实现均必须为真。在列表中，x、y 和 z 表示不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的对象引用。 下面的语句对于 Equals 方法的所有实现均必须为真。在列表中，x、y 和 z 表示不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的对象引用。

  • 除涉及浮点型的情况外，x.Equals(x) 都返回 true。请参见 IEC 60559:1989, Binary Floating-point Arithmetic for Microprocessor Systems。 除涉及浮点型的情况外，x.Equals(x) 都返回 true。请参见 IEC 60559:1989, Binary Floating-point Arithmetic for Microprocessor Systems。

  • x.Equals(y) 返回与 y.Equals(x) 相同的值。

  • 如果 x 和 y 都为 NaN，则 x.Equals(y) 返回 true。

  • 当且仅当 x.Equals(z) 返回 true 时，(x.Equals(y) && y.Equals(z)) 才返回 true。

  • 只要不修改 x 和 y 引用的对象，对 x.Equals(y) 的相继调用将返回相同的值。

  • x.Equals(nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）) 返回 false。

有关属于 Equals 方法的其他必需行为，请参见 GetHashCode。

Equals 的实现必须不引发异常。

通过使用 C# 中的 this 关键字（例如 if (this == otherObj)) 或 Visual Basic 中的 Me 关键字（例如 If Me Is otherObject Then …），可以将当前对象与另一个对象的引用相等性进行比较。

对于某些类型的对象，最好让 Equals 测试值相等性而非引用相等性。如果两个对象具有相同的“值”，那么即使它们不是同一实例，这样的 Equals 实现仍返回 true。类型实施者决定对象的“值”的构成，但这通常是存储在对象的实例变量中的部分或全部数据。例如，String 的值基于字符串的字符；对于两个按同样的顺序包含完全相同的字符的字符串实例，String 类的 Equals 方法返回 true。 对于某些类型的对象，最好让 Equals 测试值相等性而非引用相等性。如果两个对象具有相同的“值”，那么即使它们不是同一实例，这样的 Equals 实现仍返回 true。类型实施者决定对象的“值”的构成，但这通常是存储在对象的实例变量中的部分或全部数据。例如，String 的值基于字符串的字符；对于两个按同样的顺序包含完全相同的字符的字符串实例，String 类的 Equals 方法返回 true。 对于某些类型的对象，最好让 Equals 测试值相等性而非引用相等性。如果两个对象具有相同的“值”，那么即使它们不是同一实例，这样的 Equals 实现仍返回 true。类型实施者决定对象的“值”的构成，但这通常是存储在对象的实例变量中的部分或全部数据。例如，String 的值基于字符串的字符；对于两个按同样的顺序包含完全相同的字符的字符串实例，String 类的 Equals 方法返回 true。 对于某些类型的对象，最好让 Equals 测试值相等性而非引用相等性。如果两个对象具有相同的“值”，那么即使它们不是同一实例，这样的 Equals 实现仍返回 true。类型实施者决定对象的“值”的构成，但这通常是存储在对象的实例变量中的部分或全部数据。例如，String 的值基于字符串的字符；对于两个按同样的顺序包含完全相同的字符的字符串实例，String 类的 Equals 方法返回 true。

实现 IComparable 的类型必须重写 Equals。

重写 Equals 的类型也必须重写 GetHashCode；否则，Hashtable 可能不正常工作。

如果编程语言支持运算符重载，并且您选择了重载给定类型的相等运算符，则该类型必须重写 Equals 方法。这样的 Equals 方法实现必须返回与相等运算符相同的结果。遵照此准则有助于确保使用 Equals 的类库代码（如 ArrayList 和 Hashtable）的行为方式与应用程序代码使用的相等运算符的方式一致。 如果编程语言支持运算符重载，并且您选择了重载给定类型的相等运算符，则该类型必须重写 Equals 方法。这样的 Equals 方法实现必须返回与相等运算符相同的结果。遵照此准则有助于确保使用 Equals 的类库代码（如 ArrayList 和 Hashtable）的行为方式与应用程序代码使用的相等运算符的方式一致。 如果编程语言支持运算符重载，并且您选择了重载给定类型的相等运算符，则该类型必须重写 Equals 方法。这样的 Equals 方法实现必须返回与相等运算符相同的结果。遵照此准则有助于确保使用 Equals 的类库代码（如 ArrayList 和 Hashtable）的行为方式与应用程序代码使用的相等运算符的方式一致。

下面是针对实现值类型的准则：

  • 考虑重写 Equals，以便在 ValueType 上获得比 Equals 的默认实现所提供的性能增强的性能。

  • 如果重写 Equals 并且语言支持运算符重载，则必须重载值类型的相等运算符。

下面是针对实现引用类型的准则：

  • 如果引用类型的语义是基于该类型表示某个（些）值的事实，则考虑对该类型重写 Equals。

  • 即使大多数引用类型重写 Equals，它们也必须不能重载相等运算符。但是，如果实现的引用类型想要具有值语义（如复杂的数字类型），则必须重写相等运算符。 即使大多数引用类型重写 Equals，它们也必须不能重载相等运算符。但是，如果实现的引用类型想要具有值语义（如复杂的数字类型），则必须重写相等运算符。

下面的代码示例将当前的实例与另一个对象进行比较。

Imports System
Imports System.IO

Class Program
    Public Shared Sub Main(ByVal args As String())
        Dim Obj1 As New Object()
        Dim Obj2 As New Object()
        Console.WriteLine(Obj1.Equals(Obj2))
        Obj2 = Obj1
        Console.WriteLine(Obj1.Equals(Obj2))
    End Sub
End Class

'This example produces the following output:
'False
'True

using System;
class Program
{
    static void Main(string[] args)
    {
        Object Obj1 = new Object();
        Object Obj2 = new Object();
        Console.WriteLine(Obj1.Equals(Obj2));
        Obj2 = Obj1;
        Console.WriteLine(Obj1.Equals(Obj2));
    }
}

/* This example produces the following output:
False
True
 */

using namespace System;

void main()
{
    Object^ Obj1 = gcnew Object;
    Object^ Obj2 = gcnew Object;
    Console::WriteLine(Obj1->Equals(Obj2));
    Obj2 = Obj1;
    Console::WriteLine(Obj1->Equals(Obj2));
};

/* This example produces the following output:

False
True
 */

下面的示例显示一个 Point 类，该类重写 Equals 方法以提供值相等和一个从 Point 派生的 Point3D 类。由于 Point 的 Equals 重写方法是引入值相等性的继承链中的第一项，因此不调用基类的 Equals 方法（从 Object 继承并检查引用相等性）。但是，因为 Point 以提供值相等性的方式实现 Equals，所以 Point3D.Equals 调用 Point.Equals。 下面的示例显示一个 Point 类，该类重写 Equals 方法以提供值相等和一个从 Point 派生的 Point3D 类。由于 Point 的 Equals 重写方法是引入值相等性的继承链中的第一项，因此不调用基类的 Equals 方法（从 Object 继承并检查引用相等性）。但是，因为 Point 以提供值相等性的方式实现 Equals，所以 Point3D.Equals 调用 Point.Equals。 下面的示例显示一个 Point 类，该类重写 Equals 方法以提供值相等和一个从 Point 派生的 Point3D 类。由于 Point 的 Equals 重写方法是引入值相等性的继承链中的第一项，因此不调用基类的 Equals 方法（从 Object 继承并检查引用相等性）。但是，因为 Point 以提供值相等性的方式实现 Equals，所以 Point3D.Equals 调用 Point.Equals。

Imports System

Class Point
    Inherits Object
    Protected x, y As Integer

    Public Sub New()
        Me.x = 0
        Me.y = 0
    End Sub 'New

    Public Sub New(ByVal X As Integer, ByVal Y As Integer)
        Me.x = X
        Me.y = Y
    End Sub 'New

    Public Overrides Function Equals(ByVal obj As Object) As Boolean
        'Check for null and compare run-time types.
        If obj Is Nothing OrElse Not [GetType]().Equals(obj.GetType()) Then
            Return False
        End If
        Dim p As Point = CType(obj, Point)
        Return x = p.x AndAlso y = p.y
    End Function 'Equals

    Public Overrides Function GetHashCode() As Integer
        Return x ^ y
    End Function 'GetHashCode
End Class 'Point

Class Point3D
    Inherits Point
    Private z As Integer

    Public Sub New(ByVal X As Integer, ByVal Y As Integer, ByVal Z As Integer)
        Me.x = X
        Me.y = Y
        Me.z = Z
    End Sub 'New

    Public Overrides Function Equals(ByVal obj As Object) As Boolean
        Return MyBase.Equals(obj) AndAlso z = CType(obj, Point3D).z
    End Function 'Equals

    Public Overrides Function GetHashCode() As Integer
        Return MyBase.GetHashCode() ^ z
    End Function 'GetHashCode
End Class 'Point3D

Class [MyClass]
    Public Shared Sub Main()
        Dim point2D As New Point(5, 5)
        Dim point3Da As New Point3D(5, 5, 2)
        Dim point3Db As New Point3D(5, 5, 2)

        If Not point2D.Equals(point3Da) Then
            Console.WriteLine("point2D does not equal point3Da.")
        End If
        If Not point3Db.Equals(point2D) Then
            Console.WriteLine("Likewise, point3Db does not equal point2D.")
        End If
        If point3Da.Equals(point3Db) Then
            Console.WriteLine("However, point3Da equals point3Db.")
        End If

    End Sub 'Main
End Class '[MyClass]
' ----------------------------------
' Output should be:
'
' point2D does not equal point3Da.
' Likewise, point3Db does not equal point2D.
' However, point3Da equals point3Db.

using System;

class Point: Object {
   protected int x, y;

   public Point() {
     this.x = 0;
     this.y = 0;
   }

   public Point(int X, int Y) {
      this.x = X;
      this.y = Y;
   }

   public override bool Equals(Object obj) {
      //Check for null and compare run-time types.
      if (obj == null || GetType() != obj.GetType()) return false;
      Point p = (Point)obj;
      return (x == p.x) && (y == p.y);
   }

   public override int GetHashCode() {
      return x ^ y;
   }
}

class Point3D: Point {
   int z;

   public Point3D(int X, int Y, int Z) {
      this.x = X;
      this.y = Y;
      this.z = Z;
   }

   public override bool Equals(Object obj) {
      return base.Equals(obj) && z == ((Point3D)obj).z;
   }

   public override int GetHashCode() {
      return base.GetHashCode() ^ z;
   }
}

class MyClass {

  public static void Main() {
     Point point2D = new Point(5, 5);
     Point3D point3Da = new Point3D(5, 5, 2);
     Point3D point3Db = new Point3D(5, 5, 2);

     if (!point2D.Equals(point3Da)) {
        Console.WriteLine("point2D does not equal point3Da.");
     }
     if (!point3Db.Equals(point2D)) {
        Console.WriteLine("Likewise, point3Db does not equal point2D.");
     }
     if (point3Da.Equals(point3Db)) {
        Console.WriteLine("However, point3Da equals point3Db.");
     }

  }
}
// ----------------------------------
// Output should be:
//
// point2D does not equal point3Da.
// Likewise, point3Db does not equal point2D.
// However, point3Da equals point3Db.

using namespace System;
ref class Point: public Object
{
protected:
   int x;
   int y;

public:
   Point()
   {
      this->x = 0;
      this->y = 0;
   }

   Point( int X, int Y )
   {
      this->x = X;
      this->y = Y;
   }

   virtual bool Equals( Object^ obj ) override
   {

      //Check for null and compare run-time types.
      if ( obj == nullptr || GetType() != obj->GetType() )
            return false;

      Point ^ p = dynamic_cast<Point^>(obj);
      return (x == p->x) && (y == p->y);
   }

   virtual int GetHashCode() override
   {
      return x ^ y;
   }

};

ref class Point3D: public Point
{
private:
   int z;

public:
   Point3D( int X, int Y, int Z )
   {
      this->x = X;
      this->y = Y;
      this->z = Z;
   }

   virtual bool Equals( Object^ obj ) override
   {
      return Point::Equals( obj ) && z == (dynamic_cast<Point3D^>(obj))->z;
   }

   virtual int GetHashCode() override
   {
      return Point::GetHashCode() ^ z;
   }

};

Point.Equals 方法检查 obj 参数是否不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并检查它引用的实例是否与该对象具有相同的类型。如果这两项检查中有任何一项失败，则方法返回 false。 Point.Equals 方法检查 obj 参数是否不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并检查它引用的实例是否与该对象具有相同的类型。如果这两项检查中有任何一项失败，则方法返回 false。

Equals 方法使用 GetType 确定两个对象的运行时类型是否相同。（注意，这里不使用 typeof，因为它返回静态类型）。如果方法使用了 obj is Point 的检查形式，则在 obj 是 Point 的派生类实例的情况下，即使 obj 和当前实例的运行时类型不同，该检查也返回 true。验证了两个对象的类型相同后，该方法将 obj 转换为 Point 类型，并返回两个对象的实例变量的比较结果。 Equals 方法使用 GetType 确定两个对象的运行时类型是否相同。（注意，这里不使用 typeof，因为它返回静态类型）。如果方法使用了 obj is Point 的检查形式，则在 obj 是 Point 的派生类实例的情况下，即使 obj 和当前实例的运行时类型不同，该检查也返回 true。验证了两个对象的类型相同后，该方法将 obj 转换为 Point 类型，并返回两个对象的实例变量的比较结果。 Equals 方法使用 GetType 确定两个对象的运行时类型是否相同。（注意，这里不使用 typeof，因为它返回静态类型）。如果方法使用了 obj is Point 的检查形式，则在 obj 是 Point 的派生类实例的情况下，即使 obj 和当前实例的运行时类型不同，该检查也返回 true。验证了两个对象的类型相同后，该方法将 obj 转换为 Point 类型，并返回两个对象的实例变量的比较结果。

在 Point3D.Equals 中，完成任何其他事情之前首先调用继承的 Equals 方法；继承的 Equals 方法将检查 obj 是否不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），obj 是否是与此对象相同的类的实例，以及继承的实例变量是否匹配。只有当继承的 Equals 返回 true 时，该方法才比较在派生类中引入的实例变量。具体说来，除非 obj 已被确定为是 Point3D 类型或者是 Point3D 的派生类，否则不执行到 Point3D 的转换。 在 Point3D.Equals 中，完成任何其他事情之前首先调用继承的 Equals 方法；继承的 Equals 方法将检查 obj 是否不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），obj 是否是与此对象相同的类的实例，以及继承的实例变量是否匹配。只有当继承的 Equals 返回 true 时，该方法才比较在派生类中引入的实例变量。具体说来，除非 obj 已被确定为是 Point3D 类型或者是 Point3D 的派生类，否则不执行到 Point3D 的转换。 在 Point3D.Equals 中，完成任何其他事情之前首先调用继承的 Equals 方法；继承的 Equals 方法将检查 obj 是否不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），obj 是否是与此对象相同的类的实例，以及继承的实例变量是否匹配。只有当继承的 Equals 返回 true 时，该方法才比较在派生类中引入的实例变量。具体说来，除非 obj 已被确定为是 Point3D 类型或者是 Point3D 的派生类，否则不执行到 Point3D 的转换。

在前面的示例中，使用 operator ==（相等运算符）来比较各个实例变量。在某些情况下，适合使用 Equals 方法来比较 Equals 实现中的实例变量，如下面的代码示例所示。 在前面的示例中，使用 operator ==（相等运算符）来比较各个实例变量。在某些情况下，适合使用 Equals 方法来比较 Equals 实现中的实例变量，如下面的代码示例所示。

Imports System

Class Rectangle
    Private a, b As Point

    Public Sub New(ByVal upLeftX As Integer, ByVal upLeftY As Integer, _
                   ByVal downRightX As Integer, ByVal downRightY As Integer)
        Me.a = New Point(upLeftX, upLeftY)
        Me.b = New Point(downRightX, downRightY)
    End Sub 'New

    Public Overrides Function Equals(ByVal obj As [Object]) As Boolean
        ' Performs an equality check on two rectangles (Point object pairs).
        If obj Is Nothing OrElse Not [GetType]().Equals(obj.GetType()) Then
            Return False
        End If
        Dim r As Rectangle = CType(obj, Rectangle)
        'Uses Equals to compare variables.
        Return a.Equals(r.a) AndAlso b.Equals(r.b)
    End Function 'Equals

    Public Overrides Function GetHashCode() As Integer
        Return a.GetHashCode() ^ b.GetHashCode()
    End Function 'GetHashCode
End Class 'Rectangle

' Class Point added for clean compile

Class Point
    Private x As Integer
    Private y As Integer

    Public Sub New(ByVal X As Integer, ByVal Y As Integer)
        Me.x = X
        Me.y = Y
    End Sub 'New

    Public Overrides Function Equals(ByVal obj As [Object]) As Boolean
        ' Performs an equality check on two points (integer pairs).
        If obj Is Nothing OrElse Not [GetType]().Equals(obj.GetType()) Then
            Return False
        End If
        Dim p As Point = CType(obj, Point)
        Return x = p.x AndAlso y = p.y

    End Function 'Equals

    Public Overrides Function GetHashCode() As Integer
        Return x.GetHashCode() ^ y.GetHashCode()
    End Function 'GetHashCode
End Class 'Point

Class [MyClass]
    Public Shared Sub Main()
        Dim r1 As New Rectangle(0, 0, 100, 200)
        Dim r2 As New Rectangle(0, 0, 100, 200)
        Dim r3 As New Rectangle(0, 0, 150, 200)

        If r1.Equals(r2) Then
            Console.WriteLine("Rectangle r1 equals rectangle r2!")
        End If
        If Not r2.Equals(r3) Then
            Console.WriteLine("But rectangle r2 does not equal rectangle r3.")
        End If
    End Sub 'Main
End Class '[MyClass]
' ------------------------------
' Output should be:
' Rectangle r1 equals rectangle r2!
' But rectangle r2 does not equal rectangle r3.

using System;

class Rectangle {
   Point a, b;

   public Rectangle(int upLeftX, int upLeftY, int downRightX, int downRightY) {
      this.a = new Point(upLeftX, upLeftY);
      this.b = new Point(downRightX, downRightY);
   }

   public override bool Equals(Object obj) {
     // Performs an equality check on two rectangles (Point object pairs).
      if (obj == null || GetType() != obj.GetType()) return false;
      Rectangle r = (Rectangle)obj;
      //Uses Equals to compare variables.
      return a.Equals(r.a) && b.Equals(r.b);
   }

   public override int GetHashCode() {
      return a.GetHashCode() ^ b.GetHashCode();
   }
}

// Class Point added for clean compile
class Point {
  private int x;
  private int y;

  public Point(int X, int Y) {
     this.x = X;
     this.y = Y;
  }

  public override bool Equals (Object obj) {
     // Performs an equality check on two points (integer pairs).
     if (obj == null || GetType() != obj.GetType()) return false;
     Point p = (Point)obj;
     return (x == p.x) && (y == p.y);
  }

  public override int GetHashCode() {
     return x.GetHashCode() ^ y.GetHashCode();
  }

}

class MyClass {
   public static void Main() {

      Rectangle r1 = new Rectangle(0, 0, 100, 200);
      Rectangle r2 = new Rectangle(0, 0, 100, 200);
      Rectangle r3 = new Rectangle(0, 0, 150, 200);

      if (r1.Equals(r2)) {
         Console.WriteLine("Rectangle r1 equals rectangle r2!");
      }
      if (!r2.Equals(r3)) {
         Console.WriteLine("But rectangle r2 does not equal rectangle r3.");
      }
   }
}
// ------------------------------
// Output should be:
// Rectangle r1 equals rectangle r2!
// But rectangle r2 does not equal rectangle r3.

ref class Rectangle
{
private:
   Point^ a;
   Point^ b;

public:
   Rectangle( int upLeftX, int upLeftY, int downRightX, int downRightY )
   {
      this->a = gcnew Point( upLeftX,upLeftY );
      this->b = gcnew Point( downRightX,downRightY );
   }

   virtual bool Equals( Object^ obj ) override
   {

      // Performs an equality check on two rectangles (Point object pairs).
      if ( obj == nullptr || GetType() != obj->GetType() )
            return false;

      Rectangle^ r = dynamic_cast<Rectangle^>(obj);

      //Uses Equals to compare variables.
      return a->Equals( r->a ) && b->Equals( r->b );
   }

   virtual int GetHashCode() override
   {
      return a->GetHashCode() ^ b->GetHashCode();
   }

};

在一些语言（如 C#）中，支持运算符重载。当类型重载 operator == 时，它也必须重写 Equals 方法以提供同样的功能。这通常是通过按照重载的 operator == 编写 Equals 方法来完成的，如下面的代码示例所示。 在一些语言（如 C#）中，支持运算符重载。当类型重载 operator == 时，它也必须重写 Equals 方法以提供同样的功能。这通常是通过按照重载的 operator == 编写 Equals 方法来完成的，如下面的代码示例所示。 在一些语言（如 C#）中，支持运算符重载。当类型重载 operator == 时，它也必须重写 Equals 方法以提供同样的功能。这通常是通过按照重载的 operator == 编写 Equals 方法来完成的，如下面的代码示例所示。

Imports System

Public Structure Complex
    Public re, im As Double

    Public Overrides Function Equals(ByVal obj As [Object]) As Boolean
        Return TypeOf obj Is Complex AndAlso [GetType]().Equals(CType(obj, Complex))
    End Function 'Equals

    Public Overrides Function GetHashCode() As Integer
        Return re.GetHashCode() ^ im.GetHashCode()
    End Function 'GetHashCode

    Overloads Public Shared Function EqualOp(ByVal x As Complex, ByVal y As Complex) As Boolean
        Return x.re = y.re AndAlso x.im = y.im
    End Function 'EqualOp

    Overloads Public Shared Function NotEqualOp(ByVal x As Complex, ByVal y As Complex) As Boolean
        Return Not Complex.EqualOp(x, y)
    End Function 'NotEqualOp
End Structure 'Complex

Class [MyClass]
    Public Shared Sub Main()
        Dim cmplx1, cmplx2 As Complex

        cmplx1.re = 4.0
        cmplx1.im = 1.0

        cmplx2.re = 2.0
        cmplx2.im = 1.0

        If Complex.NotEqualOp(cmplx1, cmplx2) Then
            Console.WriteLine("The two objects are not equal.")
        End If

        cmplx2.re = 4.0

        If Complex.EqualOp(cmplx1, cmplx2) Then
            Console.WriteLine("The two objects are now equal!")
        End If

    End Sub 'Main
End Class '[MyClass]
' ---------------------------------
' Output should be:
'
' The two objects are not equal.
' The two objects are now equal!

using System;

public struct Complex {
   public double re, im;

   public override bool Equals(Object obj) {
      return obj is Complex && this == (Complex)obj;
   }

   public override int GetHashCode() {
      return re.GetHashCode() ^ im.GetHashCode();
   }

   public static bool operator ==(Complex x, Complex y) {
      return x.re == y.re && x.im == y.im;
   }

   public static bool operator !=(Complex x, Complex y) {
      return !(x == y);
   }
}

class MyClass {

  public static void Main() {
    Complex cmplx1, cmplx2;

    cmplx1.re = 4.0;
    cmplx1.im = 1.0;

    cmplx2.re = 2.0;
    cmplx2.im = 1.0;

    if (cmplx1 != cmplx2) {
      Console.WriteLine("The two objects are not equal.");
    }

    cmplx2.re = 4.0;

    if (cmplx1 == cmplx2) {
      Console.WriteLine("The two objects are now equal!");
    }
  }
}
// ---------------------------------
// Output should be:
//
// The two objects are not equal.
// The two objects are now equal!

using namespace System;
public value struct Complex
{
public:
   double re;
   double im;
   virtual bool Equals( Object^ obj ) override
   {
      return (dynamic_cast<Complex^>(obj) != nullptr) && (*this == *dynamic_cast<Complex^>(obj));
   }

   virtual int GetHashCode() override
   {
      return re.GetHashCode() ^ im.GetHashCode();
   }

   static bool operator==( Complex x, Complex y )
   {
      return x.re == y.re && x.im == y.im;
   }

   static bool operator!=( Complex x, Complex y )
   {
      return  !(x == y);
   }

};

由于 Complex 为 C# 结构（值类型），所以不能从该类型派生；因此，Equals 方法不需要比较每个对象的 GetType 结果，而是可以改用 is 运算符来检查 obj 参数的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 类
Object 成员
Equals 重载
System 命名空间
ReferenceEquals
GetHashCode
ValueType
IComparable
System.Collections ArrayList
System.Collections Hashtable


Object ..::.Equals 方法 (Object, Object)

Object
.
.
::
.
Equals 方法 (Object, Object)
Object 类

确定是否将指定的 Object 实例视为相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Equals ( _
    objA As Object, _
    objB As Object _
) As Boolean
public static bool Equals(
    Object objA,
    Object objB
)
public:
static bool Equals(
    Object^ objA,
    Object^ objB
)
static member Equals :
        objA:Object *
        objB:Object -> bool

参数

objA
类型： System Object
要比较的第一个 Object。
objB
类型： System Object
要比较的第二个 Object。

返回值

类型： System Boolean
如果认为对象相等，则为 true；否则为 false。

Equals 的默认实现支持引用相等性（对于引用类型）和按位相等性（对于值类型）。引用相等性是指进行比较的多个对象引用所引用的是同一个对象。按位相等性是指进行比较的多个对象具有相同的二进制表示形式。 Equals 的默认实现支持引用相等性（对于引用类型）和按位相等性（对于值类型）。引用相等性是指进行比较的多个对象引用所引用的是同一个对象。按位相等性是指进行比较的多个对象具有相同的二进制表示形式。 Equals 的默认实现支持引用相等性（对于引用类型）和按位相等性（对于值类型）。引用相等性是指进行比较的多个对象引用所引用的是同一个对象。按位相等性是指进行比较的多个对象具有相同的二进制表示形式。

请注意，派生类型可以重写 Equals 方法以实现值相等性。值相等性是指所比较的对象具有相同的值，但是具有不同的二进制表示形式。 请注意，派生类型可以重写 Equals 方法以实现值相等性。值相等性是指所比较的对象具有相同的值，但是具有不同的二进制表示形式。

有关更多信息，请参见主题Object..::.Equals(Object)。

下面的代码示例比较不同的对象。

Imports System

Public Class [MyClass]
    Public Shared Sub Main()
        Dim s1 As String = "Tom"
        Dim s2 As String = "Carol"
        Console.WriteLine("Object.Equals(""{0}"", ""{1}"") => {2}", s1, s2, [Object].Equals(s1, s2))

        s1 = "Tom"
        s2 = "Tom"
        Console.WriteLine("Object.Equals(""{0}"", ""{1}"") => {2}", s1, s2, [Object].Equals(s1, s2))

        s1 = Nothing
        s2 = "Tom"
        Console.WriteLine("Object.Equals(null, ""{1}"") => {2}", s1, s2, [Object].Equals(s1, s2))

        s1 = "Carol"
        s2 = Nothing
        Console.WriteLine("Object.Equals(""{0}"", null) => {2}", s1, s2, [Object].Equals(s1, s2))

        s1 = Nothing
        s2 = Nothing
        Console.WriteLine("Object.Equals(null, null) => {2}", s1, s2, [Object].Equals(s1, s2))

    End Sub 'Main
End Class '[MyClass]
'
'This code produces the following output.
'
'Object.Equals("Tom", "Carol") => False
'Object.Equals("Tom", "Tom") => True
'Object.Equals(null, "Tom") => False
'Object.Equals("Carol", null) => False
'Object.Equals(null, null) => True
'

using System;

public class MyClass {
   public static void Main() {
   string s1 = "Tom";
   string s2 = "Carol";
   Console.WriteLine("Object.Equals(\"{0}\", \"{1}\") => {2}",
      s1, s2, Object.Equals(s1, s2));

   s1 = "Tom";
   s2 = "Tom";
   Console.WriteLine("Object.Equals(\"{0}\", \"{1}\") => {2}",
      s1, s2, Object.Equals(s1, s2));

   s1 = null;
   s2 = "Tom";
   Console.WriteLine("Object.Equals(null, \"{1}\") => {2}",
       s1, s2, Object.Equals(s1, s2));

   s1 = "Carol";
   s2 = null;
   Console.WriteLine("Object.Equals(\"{0}\", null) => {2}",
       s1, s2, Object.Equals(s1, s2));

   s1 = null;
   s2 = null;
   Console.WriteLine("Object.Equals(null, null) => {2}",
       s1, s2, Object.Equals(s1, s2));
   }
}

/*

This code produces the following output.

Object.Equals("Tom", "Carol") => False
Object.Equals("Tom", "Tom") => True
Object.Equals(null, "Tom") => False
Object.Equals("Carol", null) => False
Object.Equals(null, null) => True

*/

using namespace System;
int main()
{
   String^ s1 = "Tom";
   String^ s2 = "Carol";
   Console::WriteLine( "Object.Equals(\"{0}\", \"{1}\") => {2}", s1, s2, Object::Equals( s1, s2 ) );
   s1 = "Tom";
   s2 = "Tom";
   Console::WriteLine( "Object.Equals(\"{0}\", \"{1}\") => {2}", s1, s2, Object::Equals( s1, s2 ) );
   s1 = nullptr;
   s2 = "Tom";
   Console::WriteLine( "Object.Equals(null, \"{1}\") => {2}", s1, s2, Object::Equals( s1, s2 ) );
   s1 = "Carol";
   s2 = nullptr;
   Console::WriteLine( "Object.Equals(\"{0}\", null) => {2}", s1, s2, Object::Equals( s1, s2 ) );
   s1 = nullptr;
   s2 = nullptr;
   Console::WriteLine( "Object.Equals(null, null) => {2}", s1, s2, Object::Equals( s1, s2 ) );
}

/*

This code produces the following output.

Object.Equals("Tom", "Carol") => False
Object.Equals("Tom", "Tom") => True
Object.Equals(null, "Tom") => False
Object.Equals("Carol", null) => False
Object.Equals(null, null) => True

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 类
Object 成员
Equals 重载
System 命名空间
ReferenceEquals
ValueType
GetHashCode


Object ..::.Finalize 方法

Object
.
.
::
.
Finalize 方法
Object 类

允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub Finalize
protected virtual void Finalize()
protected:
virtual void Finalize()
abstract Finalize : unit -> unit
override Finalize : unit -> unit

Finalize 是受保护的，因此只能通过此类或派生类访问它。

对象变为不可访问后将自动调用此方法，除非已通过 SuppressFinalize 调用使对象免除了终结。在应用程序域的关闭期间，Finalize 将自动在没有免于终止的对象，甚至是那些仍可以访问的对象上调用。对于给定的实例仅自动调用 Finalize 一次，除非使用 ReRegisterForFinalize 这类机制重新注册该对象并且后面没有调用 GC.SuppressFinalize。 对象变为不可访问后将自动调用此方法，除非已通过 SuppressFinalize 调用使对象免除了终结。在应用程序域的关闭期间，Finalize 将自动在没有免于终止的对象，甚至是那些仍可以访问的对象上调用。对于给定的实例仅自动调用 Finalize 一次，除非使用 ReRegisterForFinalize 这类机制重新注册该对象并且后面没有调用 GC.SuppressFinalize。 对象变为不可访问后将自动调用此方法，除非已通过 SuppressFinalize 调用使对象免除了终结。在应用程序域的关闭期间，Finalize 将自动在没有免于终止的对象，甚至是那些仍可以访问的对象上调用。对于给定的实例仅自动调用 Finalize 一次，除非使用 ReRegisterForFinalize 这类机制重新注册该对象并且后面没有调用 GC.SuppressFinalize。

派生类型中的每个 Finalize 实现都必须调用其基类型的 Finalize 实现。这是唯一一种允许应用程序代码调用 Finalize 的情况。 派生类型中的每个 Finalize 实现都必须调用其基类型的 Finalize 实现。这是唯一一种允许应用程序代码调用 Finalize 的情况。

Finalize 操作具有下列限制：

  • 垃圾回收过程中执行终结器的准确时间是不确定的。不保证资源在任何特定的时间都能释放，除非调用 Close 方法或 Dispose 方法。 垃圾回收过程中执行终结器的准确时间是不确定的。不保证资源在任何特定的时间都能释放，除非调用 Close 方法或 Dispose 方法。

  • 即使一个对象引用另一个对象，也不能保证两个对象的终结器以任何特定的顺序运行。即，如果对象 A 具有对对象 B 的引用，并且两者都有终结器，则当对象 A 的终结器启动时，对象 B 可能已经终结了。 即使一个对象引用另一个对象，也不能保证两个对象的终结器以任何特定的顺序运行。即，如果对象 A 具有对对象 B 的引用，并且两者都有终结器，则当对象 A 的终结器启动时，对象 B 可能已经终结了。

  • 运行终结器的线程是未指定的。

在下面的异常情况下，Finalize 方法可能不会运行完成或可能根本不运行：

  • 另一个终结器无限期地阻止（进入无限循环，尝试获取永远无法获取的锁，诸如此类）。由于运行时尝试运行终结器来完成，所以如果一个终结器无限期地阻止，则可能不会调用其他终结器。 另一个终结器无限期地阻止（进入无限循环，尝试获取永远无法获取的锁，诸如此类）。由于运行时尝试运行终结器来完成，所以如果一个终结器无限期地阻止，则可能不会调用其他终结器。

  • 进程终止，但不给运行时提供清理的机会。在这种情况下，运行时的第一个进程终止通知是 DLL_PROCESS_DETACH 通知。 进程终止，但不给运行时提供清理的机会。在这种情况下，运行时的第一个进程终止通知是 DLL_PROCESS_DETACH 通知。

在关闭过程中，只有当可终结对象的数目继续减少时，运行时才继续 Finalize 对象。

如果 Finalize 或 Finalize 的重写引发异常，并且运行时并非寄宿在重写默认策略的应用程序中，则运行时将终止进程，并且不执行任何活动的 try-finally 块或终结器。如果终结器无法释放或销毁资源，此行为可以确保进程完整性。 如果 Finalize 或 Finalize 的重写引发异常，并且运行时并非寄宿在重写默认策略的应用程序中，则运行时将终止进程，并且不执行任何活动的 try-finally 块或终结器。如果终结器无法释放或销毁资源，此行为可以确保进程完整性。

对实现者的说明

默认情况下，Object..::.Finalize 不执行任何操作。只有在必要时才必须由派生类重写它，因为如果必须运行 Finalize 操作，垃圾回收过程中的回收往往需要长得多的时间。 默认情况下，Object..::.Finalize 不执行任何操作。只有在必要时才必须由派生类重写它，因为如果必须运行 Finalize 操作，垃圾回收过程中的回收往往需要长得多的时间。

如果 Object 保存了对任何资源的引用，则 Finalize 必须由派生类重写，以便在垃圾回收过程中，在放弃 Object 之前释放这些资源。

当类型使用文件句柄或数据库连接这类在回收使用托管对象时必须释放的非托管资源时，该类型必须实现 Finalize。有关辅助和具有更多控制的资源处置方式，请参见 IDisposable 接口。 当类型使用文件句柄或数据库连接这类在回收使用托管对象时必须释放的非托管资源时，该类型必须实现 Finalize。有关辅助和具有更多控制的资源处置方式，请参见 IDisposable 接口。

Finalize 可以采取任何操作，包括在垃圾回收过程中清理了对象后使对象复活（即，使对象再次可访问）。但是，对象只能复活一次；在垃圾回收过程中，不能对复活对象调用 Finalize。 Finalize 可以采取任何操作，包括在垃圾回收过程中清理了对象后使对象复活（即，使对象再次可访问）。但是，对象只能复活一次；在垃圾回收过程中，不能对复活对象调用 Finalize。

析构函数是执行清理操作的 C# 机制。析构函数提供了适当的保护措施，如自动调用基类型的析构函数。在 C# 代码中，不能调用或重写 Object..::.Finalize。
析构函数是执行清理操作的 C# 机制。析构函数提供了适当的保护措施，如自动调用基类型的析构函数。在 C# 代码中，不能调用或重写 Object..::.Finalize。
析构函数是执行清理操作的 C# 机制。析构函数提供了适当的保护措施，如自动调用基类型的析构函数。在 C# 代码中，不能调用或重写 Object..::.Finalize。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 类
Object 成员
System 命名空间
GC
WeakReference


Object ..::.GetHashCode 方法

Object
.
.
::
.
GetHashCode 方法
Object 类

用作特定类型的哈希函数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetHashCode As Integer
public virtual int GetHashCode()
public:
virtual int GetHashCode()
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
当前 Object 的哈希代码。

哈希代码是一个用于在相等测试过程中标识对象的数值。它还可以作为一个集合中的对象的索引。 哈希代码是一个用于在相等测试过程中标识对象的数值。它还可以作为一个集合中的对象的索引。

GetHashCode 方法适用于哈希算法和诸如哈希表之类的数据结构。

GetHashCode 方法的默认实现不保证针对不同的对象返回唯一值。而且，.NET Framework 不保证 GetHashCode 方法的默认实现以及它所返回的值在不同版本的 .NET Framework 中是相同的。因此，在进行哈希运算时，该方法的默认实现不得用作唯一对象标识符。 GetHashCode 方法的默认实现不保证针对不同的对象返回唯一值。而且，.NET Framework 不保证 GetHashCode 方法的默认实现以及它所返回的值在不同版本的 .NET Framework 中是相同的。因此，在进行哈希运算时，该方法的默认实现不得用作唯一对象标识符。 GetHashCode 方法的默认实现不保证针对不同的对象返回唯一值。而且，.NET Framework 不保证 GetHashCode 方法的默认实现以及它所返回的值在不同版本的 .NET Framework 中是相同的。因此，在进行哈希运算时，该方法的默认实现不得用作唯一对象标识符。

GetHashCode 方法可以由派生类型重写。值类型必须重写此方法，以提供适合该类型的哈希函数和在哈希表中提供有用的分布。为了获得最佳结果，哈希代码必须基于实例字段或属性（而非静态字段或属性）的值。 GetHashCode 方法可以由派生类型重写。值类型必须重写此方法，以提供适合该类型的哈希函数和在哈希表中提供有用的分布。为了获得最佳结果，哈希代码必须基于实例字段或属性（而非静态字段或属性）的值。 GetHashCode 方法可以由派生类型重写。值类型必须重写此方法，以提供适合该类型的哈希函数和在哈希表中提供有用的分布。为了获得最佳结果，哈希代码必须基于实例字段或属性（而非静态字段或属性）的值。

用作 Hashtable 对象中键的对象还必须重写 GetHashCode 方法，因为这些对象必须生成其各自的哈希代码。如果用作键的对象不提供 GetHashCode 的有用实现，您可以在构造 Hashtable 对象时指定哈希代码提供程序。在 .NET Framework 2.0 版之前，哈希代码提供程序是基于 System.Collections..::.IHashCodeProvider 接口的。从 2.0 版开始，哈希代码提供程序基于 System.Collections..::.IEqualityComparer 接口。 用作 Hashtable 对象中键的对象还必须重写 GetHashCode 方法，因为这些对象必须生成其各自的哈希代码。如果用作键的对象不提供 GetHashCode 的有用实现，您可以在构造 Hashtable 对象时指定哈希代码提供程序。在 .NET Framework 2.0 版之前，哈希代码提供程序是基于 System.Collections..::.IHashCodeProvider 接口的。从 2.0 版开始，哈希代码提供程序基于 System.Collections..::.IEqualityComparer 接口。 用作 Hashtable 对象中键的对象还必须重写 GetHashCode 方法，因为这些对象必须生成其各自的哈希代码。如果用作键的对象不提供 GetHashCode 的有用实现，您可以在构造 Hashtable 对象时指定哈希代码提供程序。在 .NET Framework 2.0 版之前，哈希代码提供程序是基于 System.Collections..::.IHashCodeProvider 接口的。从 2.0 版开始，哈希代码提供程序基于 System.Collections..::.IEqualityComparer 接口。 用作 Hashtable 对象中键的对象还必须重写 GetHashCode 方法，因为这些对象必须生成其各自的哈希代码。如果用作键的对象不提供 GetHashCode 的有用实现，您可以在构造 Hashtable 对象时指定哈希代码提供程序。在 .NET Framework 2.0 版之前，哈希代码提供程序是基于 System.Collections..::.IHashCodeProvider 接口的。从 2.0 版开始，哈希代码提供程序基于 System.Collections..::.IEqualityComparer 接口。

对实现者的说明

哈希函数用于快速生成一个与对象的值相对应的数字（哈希代码）。哈希函数通常是特定于每个 Type 的，而且，必须至少使用一个实例字段作为输入。 哈希函数用于快速生成一个与对象的值相对应的数字（哈希代码）。哈希函数通常是特定于每个 Type 的，而且，必须至少使用一个实例字段作为输入。

哈希函数必须具有以下特点：

  • 如果两个对象的比较结果相等，则每个对象的 GetHashCode 方法都必须返回同一个值。但是，如果两个对象的比较结果不相等，则这两个对象的 GetHashCode 方法不一定返回不同的值。 如果两个对象的比较结果相等，则每个对象的 GetHashCode 方法都必须返回同一个值。但是，如果两个对象的比较结果不相等，则这两个对象的 GetHashCode 方法不一定返回不同的值。

  • 一个对象的 GetHashCode 方法必须总是返回同一个哈希代码，但前提是没有修改过对象状态，对象状态用来确定对象的 Equals 方法的返回值。请注意，这仅适用于应用程序的当前执行，再次运行该应用程序时可能会返回另一个哈希代码。 一个对象的 GetHashCode 方法必须总是返回同一个哈希代码，但前提是没有修改过对象状态，对象状态用来确定对象的 Equals 方法的返回值。请注意，这仅适用于应用程序的当前执行，再次运行该应用程序时可能会返回另一个哈希代码。

  • 为了获得最佳性能，哈希函数必须为所有输入生成随机分布。

例如，String 类提供的 GetHashCode 方法的实现为相同的字符串值返回相同的哈希代码。因此，如果两个 String 对象表示相同的字符串值，则它们返回相同的哈希代码。另外，该方法使用字符串中的所有字符生成相当随机的分布式输出，即使当输入集中在某些范围内时（例如，许多用户可能有只包含低位 128 个 ASCII 字符的字符串，即使字符串可以包含 65,535 个 Unicode 字符中的任何字符）。 例如，String 类提供的 GetHashCode 方法的实现为相同的字符串值返回相同的哈希代码。因此，如果两个 String 对象表示相同的字符串值，则它们返回相同的哈希代码。另外，该方法使用字符串中的所有字符生成相当随机的分布式输出，即使当输入集中在某些范围内时（例如，许多用户可能有只包含低位 128 个 ASCII 字符的字符串，即使字符串可以包含 65,535 个 Unicode 字符中的任何字符）。 例如，String 类提供的 GetHashCode 方法的实现为相同的字符串值返回相同的哈希代码。因此，如果两个 String 对象表示相同的字符串值，则它们返回相同的哈希代码。另外，该方法使用字符串中的所有字符生成相当随机的分布式输出，即使当输入集中在某些范围内时（例如，许多用户可能有只包含低位 128 个 ASCII 字符的字符串，即使字符串可以包含 65,535 个 Unicode 字符中的任何字符）。

对于 Object 的派生类，当且仅当此派生类将值相等性定义为引用相等并且类型不是值类型时，GetHashCode 方法才可以委托给 Object..::.GetHashCode 实现。

在类上提供好的哈希函数可以显著影响将这些对象添加到哈希表的性能。在具有好的哈希函数实现的哈希表中，搜索元素所用的时间是固定的（例如运算复杂度为 O(1) 的运算）。而在具有不好的哈希函数实现的哈希表中，搜索性能取决于哈希表中的项数（例如运算复杂度为 O(n) 的运算，其中的 n 是哈希表中的项数）。哈希函数的计算成本也必须不高。 在类上提供好的哈希函数可以显著影响将这些对象添加到哈希表的性能。在具有好的哈希函数实现的哈希表中，搜索元素所用的时间是固定的（例如运算复杂度为 O(1) 的运算）。而在具有不好的哈希函数实现的哈希表中，搜索性能取决于哈希表中的项数（例如运算复杂度为 O(n) 的运算，其中的 n 是哈希表中的项数）。哈希函数的计算成本也必须不高。 在类上提供好的哈希函数可以显著影响将这些对象添加到哈希表的性能。在具有好的哈希函数实现的哈希表中，搜索元素所用的时间是固定的（例如运算复杂度为 O(1) 的运算）。而在具有不好的哈希函数实现的哈希表中，搜索性能取决于哈希表中的项数（例如运算复杂度为 O(n) 的运算，其中的 n 是哈希表中的项数）。哈希函数的计算成本也必须不高。 在类上提供好的哈希函数可以显著影响将这些对象添加到哈希表的性能。在具有好的哈希函数实现的哈希表中，搜索元素所用的时间是固定的（例如运算复杂度为 O(1) 的运算）。而在具有不好的哈希函数实现的哈希表中，搜索性能取决于哈希表中的项数（例如运算复杂度为 O(n) 的运算，其中的 n 是哈希表中的项数）。哈希函数的计算成本也必须不高。

GetHashCode 方法的实现必须不会导致循环引用。例如，如果 ClassA.GetHashCode 调用 ClassB.GetHashCode，ClassB.GetHashCode 必须不直接或间接调用 ClassA.GetHashCode。 GetHashCode 方法的实现必须不会导致循环引用。例如，如果 ClassA.GetHashCode 调用 ClassB.GetHashCode，ClassB.GetHashCode 必须不直接或间接调用 ClassA.GetHashCode。

GetHashCode 方法的实现必须不引发异常。

重写 GetHashCode 的派生类还必须重写 Equals，以保证被视为相等的两个对象具有相同的哈希代码；否则，Hashtable 类型可能无法正常工作。

在某些情况下，GetHashCode 方法的实现只返回整数值。下面的代码示例阐释了返回整数值的 GetHashCode 的实现。 在某些情况下，GetHashCode 方法的实现只返回整数值。下面的代码示例阐释了返回整数值的 GetHashCode 的实现。

Imports System

Public Structure Int32
    Public value As Integer

    'other methods...
    Public Overrides Function GetHashCode() As Integer
        Return value
    End Function 'GetHashCode
End Structure 'Int32

using System;

public struct Int32 {
   public int value;

   //other methods...

   public override int GetHashCode() {
      return value;
   }
}

using namespace System;
public value struct Int32
{
public:
   int value;

   //other methods...
   virtual int GetHashCode() override
   {
      return value;
   }

};

一个类型常具有多个可以参与生成哈希代码的数据字段。生成哈希代码的一种方法是使用 XOR (eXclusive OR) 运算合并这些字段，如下面的代码示例所示。 一个类型常具有多个可以参与生成哈希代码的数据字段。生成哈希代码的一种方法是使用 XOR (eXclusive OR) 运算合并这些字段，如下面的代码示例所示。

Imports System

Public Structure Point
    Public x As Integer
    Public y As Integer

    'other methods
    Public Overrides Function GetHashCode() As Integer
        Return x Xor y
    End Function
End Structure

using System;

public struct Point {
   public int x;
   public int y;

   //other methods

   public override int GetHashCode() {
      return x ^ y;
   }
}

using namespace System;
public value struct Point
{
public:
   int x;
   int y;

   //other methods
   virtual int GetHashCode() override
   {
      return x ^ y;
   }

};

下面的代码示例阐释了另一种情况：使用 XOR (eXclusive OR) 合并该类型的字段以生成哈希代码。注意，在该代码示例中，字段表示用户定义的类型，每个类型都实现 GetHashCode 和 Equals。 下面的代码示例阐释了另一种情况：使用 XOR (eXclusive OR) 合并该类型的字段以生成哈希代码。注意，在该代码示例中，字段表示用户定义的类型，每个类型都实现 GetHashCode 和 Equals。

Imports System

Public Class SomeType
    Public Overrides Function GetHashCode() As Integer
        Return 0
    End Function
End Class

Public Class AnotherType
    Public Overrides Function GetHashCode() As Integer
        Return 1
    End Function
End Class

Public Class LastType
    Public Overrides Function GetHashCode() As Integer
        Return 2
    End Function
End Class

Public Class Demo
    Private a As New SomeType()
    Private b As New AnotherType()
    Private c As New LastType()

    Public Overrides Function GetHashCode() As Integer
        Return a.GetHashCode() Xor b.GetHashCode() Xor c.GetHashCode()
    End Function
End Class

using System;

public class SomeType {
   public override int GetHashCode() {
     return 0;
   }
}

public class AnotherType {
   public override int GetHashCode() {
     return 1;
   }
}

public class LastType {
   public override int GetHashCode() {
     return 2;
   }
}

public class MyClass {
   SomeType a = new SomeType();
   AnotherType b = new AnotherType();
   LastType c = new LastType();

   public override int GetHashCode () {
     return a.GetHashCode() ^ b.GetHashCode() ^ c.GetHashCode();
   }
}

using namespace System;
public ref class SomeType
{
public:
   virtual int GetHashCode() override
   {
      return 0;
   }

};

public ref class AnotherType
{
public:
   virtual int GetHashCode() override
   {
      return 1;
   }

};

public ref class LastType
{
public:
   virtual int GetHashCode() override
   {
      return 2;
   }

};

public ref class MyClass
{
private:
   SomeType^ a;
   AnotherType^ b;
   LastType^ c;

public:
   virtual int GetHashCode() override
   {
      return a->GetHashCode() ^ b->GetHashCode() ^ c->GetHashCode();
   }

};

如果派生类的数据成员比 Int32 大，则可以使用 XOR (eXclusive OR) 运算合并该值的高序位和低序位，如下面的代码示例所示。

Imports System

Public Structure Int64
    Public value As Long

    'other methods...
    Public Overrides Function GetHashCode() As Integer
        Return (Fix(value) Xor Fix(value >> 32))
    End Function
End Structure

using System;

public struct Int64 {
   public long value;

   //other methods...

   public override int GetHashCode() {
      return ((int)value ^ (int)(value >> 32));
   }
}

using namespace System;
public value struct Int64
{
public:
   long value;

   //other methods...

   virtual int GetHashCode() override
   {
      return ((int)value ^ (int)(value >> 32));
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 类
Object 成员
System 命名空间
Hashtable
Equals


Object ..::.GetType 方法

Object
.
.
::
.
GetType 方法
Object 类

获取当前实例的 Type。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetType As Type
public Type GetType()
public:
Type^ GetType()
member GetType : unit -> Type

返回值

类型： System Type
Type 实例，表示当前实例的确切运行时类型。

对于具有相同运行时类型的两个对象 x 和 y，Object.ReferenceEquals(x.GetType(),y.GetType()) 返回 true。

Type 对象公开与当前 Object 的类关联的元数据。

下面的代码示例说明 GetType 返回当前实例的运行时类型。

Imports System

' Example base class and derived class. Note that it
' is not necessary to derive from Object explicitly;
' a class with no Inherits statement implicitly
' derives from Object.
'
Public Class MyBaseClass
    Inherits Object
End Class

Public Class MyDerivedClass
    Inherits MyBaseClass
End Class

Public Class Test

    Public Shared Sub Main()

        Dim base As New MyBaseClass()
        Dim derived As New MyDerivedClass()
        Dim o As Object = derived
        Dim b As MyBaseClass = derived

        Console.WriteLine("base.GetType returns {0}", base.GetType())
        Console.WriteLine("derived.GetType returns {0}", derived.GetType())
        Console.WriteLine("Dim o As Object = derived; o.GetType returns {0}", o.GetType())
        Console.WriteLine("Dim b As MyBaseClass = derived; b.Type returns {0}", b.GetType())

    End Sub
End Class

'This code example produces the following output:
'
'base.GetType returns MyBaseClass
'derived.GetType returns MyDerivedClass
'Dim o As Object = derived; o.GetType returns MyDerivedClass
'Dim b As MyBaseClass = derived; b.Type returns MyDerivedClass
'

using System;

public class MyBaseClass: Object {
}

public class MyDerivedClass: MyBaseClass {
}

public class Test {

   public static void Main() {
      MyBaseClass myBase = new MyBaseClass();
      MyDerivedClass myDerived = new MyDerivedClass();
      object o = myDerived;
      MyBaseClass b = myDerived;

      Console.WriteLine("mybase: Type is {0}", myBase.GetType());
      Console.WriteLine("myDerived: Type is {0}", myDerived.GetType());
      Console.WriteLine("object o = myDerived: Type is {0}", o.GetType());
      Console.WriteLine("MyBaseClass b = myDerived: Type is {0}", b.GetType());
   }
}

/*

This code produces the following output.

mybase: Type is MyBaseClass
myDerived: Type is MyDerivedClass
object o = myDerived: Type is MyDerivedClass
MyBaseClass b = myDerived: Type is MyDerivedClass

*/

using namespace System;
public ref class MyBaseClass: public Object{};

public ref class MyDerivedClass: public MyBaseClass{};

int main()
{
   MyBaseClass^ myBase = gcnew MyBaseClass;
   MyDerivedClass^ myDerived = gcnew MyDerivedClass;
   Object^ o = myDerived;
   MyBaseClass^ b = myDerived;
   Console::WriteLine( "mybase: Type is {0}", myBase->GetType() );
   Console::WriteLine( "myDerived: Type is {0}", myDerived->GetType() );
   Console::WriteLine( "object o = myDerived: Type is {0}", o->GetType() );
   Console::WriteLine( "MyBaseClass b = myDerived: Type is {0}", b->GetType() );
}

/*

This code produces the following output.

mybase: Type is MyBaseClass
myDerived: Type is MyDerivedClass
object o = myDerived: Type is MyDerivedClass
MyBaseClass b = myDerived: Type is MyDerivedClass

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 类
Object 成员
System 命名空间
Type


Object ..::.MemberwiseClone 方法

Object
.
.
::
.
MemberwiseClone 方法
Object 类

创建当前 Object 的浅表副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Function MemberwiseClone As Object
protected Object MemberwiseClone()
protected:
Object^ MemberwiseClone()
member MemberwiseClone : unit -> Object

返回值

类型： System Object
当前 Object 的浅表副本。

MemberwiseClone 方法创建一个浅表副本，方法是创建一个新对象，然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制引用但不复制引用的对象；因此，原始对象及其复本引用同一对象。 MemberwiseClone 方法创建一个浅表副本，方法是创建一个新对象，然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制引用但不复制引用的对象；因此，原始对象及其复本引用同一对象。 MemberwiseClone 方法创建一个浅表副本，方法是创建一个新对象，然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的，则对该字段执行逐位复制。如果字段是引用类型，则复制引用但不复制引用的对象；因此，原始对象及其复本引用同一对象。

例如，考虑引用对象 A 和 B 的被称为 X 的对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。 例如，考虑引用对象 A 和 B 的被称为 X 的对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2，该对象也引用对象 A 和 B。相比而言，X 的深层副本创建一个新对象 X2，该对象引用新对象 A2 和 B2（分别为 A 和 B 的副本）。B2 又引用新对象 C2，C2 是 C 的副本。使用实现了 ICloneable 接口的类，可为对象创建深层副本或浅表副本。

下面的代码示例说明如何使用 MemberwiseClone 复制类的实例。

Imports System

Class MyBaseClass
   Public Shared CompanyName As String = "My Company"
   Public age As Integer
   Public name As String
End Class 'MyBaseClass

Class MyDerivedClass
   Inherits MyBaseClass

   Shared Sub Main()

      ' Creates an instance of MyDerivedClass and assign values to its fields.
      Dim m1 As New MyDerivedClass()
      m1.age = 42
      m1.name = "Sam"

      ' Performs a shallow copy of m1 and assign it to m2.
      Dim m2 As MyDerivedClass = CType(m1.MemberwiseClone(), MyDerivedClass)

   End Sub 'Main

End Class 'MyDerivedClass

using System;

class MyBaseClass {
   public static string CompanyName = "My Company";
   public int age;
   public string name;
}

class MyDerivedClass: MyBaseClass {

   static void Main() {

   // Creates an instance of MyDerivedClass and assign values to its fields.
   MyDerivedClass m1 = new MyDerivedClass();
   m1.age = 42;
   m1.name = "Sam";

   // Performs a shallow copy of m1 and assign it to m2.
   MyDerivedClass m2 = (MyDerivedClass) m1.MemberwiseClone();
   }
}

using namespace System;
ref class MyBaseClass
{
public:
   static String^ CompanyName;
   int age;
   String^ name;
};

ref class MyDerivedClass: public MyBaseClass
{
public:
   static void Test()
   {

      // Creates an instance of MyDerivedClass and assign values to its fields.
      MyDerivedClass^ m1 = gcnew MyDerivedClass;
      m1->age = 42;
      m1->name = "Sam";

      // Performs a shallow copy of m1 and assign it to m2.
      MyDerivedClass^ m2 = safe_cast<MyDerivedClass^>(m1->MemberwiseClone());
   }

};

int main()
{
   MyDerivedClass::Test();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 类
Object 成员
System 命名空间
ICloneable


Object ..::.ReferenceEquals 方法

Object
.
.
::
.
ReferenceEquals 方法
Object 类

确定指定的 Object 实例是否是相同的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ReferenceEquals ( _
    objA As Object, _
    objB As Object _
) As Boolean
public static bool ReferenceEquals(
    Object objA,
    Object objB
)
public:
static bool ReferenceEquals(
    Object^ objA,
    Object^ objB
)
static member ReferenceEquals :
        objA:Object *
        objB:Object -> bool

参数

objA
类型： System Object
要比较的第一个 Object。
objB
类型： System Object
要比较的第二个 Object。

返回值

类型： System Boolean
如果 objA 是与 objB 相同的实例，或者如果二者都为空引用，则为 true；否则为 false。

下面的代码示例使用 ReferenceEquals 确定两个对象是否是相同的实例。

Imports System

Public Class App
    Public Shared Sub Main()
        Dim o As Object = Nothing
        Dim p As Object = Nothing
        Dim q As New Object
        Console.WriteLine(Object.ReferenceEquals(o, p))
        p = q
        Console.WriteLine(Object.ReferenceEquals(p, q))
        Console.WriteLine(Object.ReferenceEquals(o, p))
    End Sub
End Class
' This code produces the following output:
'
' True
' True
' False
'

using System;

class MyClass {

   static void Main() {
      object o = null;
      object p = null;
      object q = new Object();

      Console.WriteLine(Object.ReferenceEquals(o, p));
      p = q;
      Console.WriteLine(Object.ReferenceEquals(p, q));
      Console.WriteLine(Object.ReferenceEquals(o, p));
   }
}

/*

This code produces the following output.

True
True
False

*/

using namespace System;
int main()
{
   Object^ o = nullptr;
   Object^ p = nullptr;
   Object^ q = gcnew Object;
   Console::WriteLine( Object::ReferenceEquals( o, p ) );
   p = q;
   Console::WriteLine( Object::ReferenceEquals( p, q ) );
   Console::WriteLine( Object::ReferenceEquals( o, p ) );
}

/*

This code produces the following output.

True
True
False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 类
Object 成员
System 命名空间
Equals


Object ..::.ToString 方法

Object
.
.
::
.
ToString 方法
Object 类

返回表示当前 Object 的 String。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ToString As String
public virtual string ToString()
public:
virtual String^ ToString()
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
String，表示当前的 Object。

此方法返回区分区域性的可读字符串。例如，对于值为零的 Double 类的实例，Double..::.ToString 的实现可能返回“0.00”或“0,00”，具体取决于当前的 UI 区域性。 此方法返回区分区域性的可读字符串。例如，对于值为零的 Double 类的实例，Double..::.ToString 的实现可能返回“0.00”或“0,00”，具体取决于当前的 UI 区域性。

默认实现返回 Object 的类型的完全限定名。

对实现者的说明

在派生类中可以重写此方法，以返回对该类型有意义的值。例如，基础数据类型（如 Int32）实现 ToString，以便它返回对象表示的值的字符串形式。要求的字符串格式化控制比 ToString 提供的多的派生类必须实现 IFormattable，后者的 ToString 方法使用当前线程的 CurrentCulture 属性。 在派生类中可以重写此方法，以返回对该类型有意义的值。例如，基础数据类型（如 Int32）实现 ToString，以便它返回对象表示的值的字符串形式。要求的字符串格式化控制比 ToString 提供的多的派生类必须实现 IFormattable，后者的 ToString 方法使用当前线程的 CurrentCulture 属性。 在派生类中可以重写此方法，以返回对该类型有意义的值。例如，基础数据类型（如 Int32）实现 ToString，以便它返回对象表示的值的字符串形式。要求的字符串格式化控制比 ToString 提供的多的派生类必须实现 IFormattable，后者的 ToString 方法使用当前线程的 CurrentCulture 属性。

下面的代码示例说明 ToString 返回的内容。

Public Class Sample
    Public Shared Sub Main()
        ' Displays: "System.Object"
        Dim o As New Object()
        Console.WriteLine(o.ToString())
    End Sub
End Class

using System;

public class Sample
{
    public static void Main() {

        // Prints out: "System.Object"
        Object o = new Object();
        Console.WriteLine (o.ToString());

    }
}

#using <System.DLL>

using namespace System;
ref class Sample
{
private:
   void Method()
   {

      // Prints out: "System.Object"
      Object^ o = gcnew Object;
      Console::WriteLine( o->ToString() );
   }

};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Object 类
Object 成员
System 命名空间
String


ObjectDisposedException 类

ObjectDisposedException 类
成员

对已释放的对象执行操作时所引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ObjectDisposedException _
    Inherits InvalidOperationException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ObjectDisposedException : InvalidOperationException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ObjectDisposedException : public InvalidOperationException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ObjectDisposedException =
    class
        inherit InvalidOperationException
    end

下面的示例演示导致引发 ObjectDisposedException 异常的错误。

Imports System
Imports System.IO

Public Class ObjectDisposedExceptionTest

   Public Shared Sub Main()
      Dim ms As New MemoryStream(16)
      ms.Close()
      Try
         ms.ReadByte()
      Catch e As ObjectDisposedException
         Console.WriteLine("Caught: {0}", e.Message)
      End Try
   End Sub 'Main
End Class 'ObjectDisposedExceptionTest

using System;
using System.IO;

public class ObjectDisposedExceptionTest
{
   public static void Main()
   {
      MemoryStream ms = new MemoryStream(16);
      ms.Close();
      try
      {
         ms.ReadByte();
      }
      catch (ObjectDisposedException e)
      {
         Console.WriteLine("Caught: {0}", e.Message);
      }
   }
}

using namespace System;
using namespace System::IO;
int main()
{
   MemoryStream^ ms = gcnew MemoryStream( 16 );
   ms->Close();
   try
   {
      ms->ReadByte();
   }
   catch ( ObjectDisposedException^ e )
   {
      Console::WriteLine( "Caught: {0}", e->Message );
   }

}

这段代码产生以下输出：

Caught:
  Cannot access a closed Stream.

System System..::.ObjectDisposedExceptionObjectDisposedException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObjectDisposedException 成员
System 命名空间
IDisposable


ObjectDisposedException 成员

ObjectDisposedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectDisposedException 类

对已释放的对象执行操作时所引发的异常。

ObjectDisposedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectDisposedException 类
System 命名空间


ObjectDisposedException 构造函数

ObjectDisposedException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectDisposedException 类

初始化 ObjectDisposedException 类的新实例。

名称 说明
页首

参考

ObjectDisposedException 类
ObjectDisposedException 成员
System 命名空间


ObjectDisposedException 构造函数 (String)

ObjectDisposedException 构造函数 (String)
ObjectDisposedException 类

使用包含已释放对象名称的字符串初始化 ObjectDisposedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    objectName As String _
)
public ObjectDisposedException(
    string objectName
)
public:
ObjectDisposedException(
    String^ objectName
)
new :
        objectName:string -> ObjectDisposedException

参数

objectName
类型： System String
包含已释放对象的名称的字符串。

Message 属性被初始化为系统提供的消息，此消息描述错误并包含 objectName 参数。此消息将考虑当前系统区域性。 Message 属性被初始化为系统提供的消息，此消息描述错误并包含 objectName 参数。此消息将考虑当前系统区域性。

新实例的 InnerException 属性被初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果 objectName 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 Message 属性只包含一个错误消息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObjectDisposedException 类
ObjectDisposedException 成员
ObjectDisposedException 重载
System 命名空间


ObjectDisposedException 构造函数 (SerializationInfo, StreamingContext)

ObjectDisposedException 构造函数 (SerializationInfo, StreamingContext)
ObjectDisposedException 类

用序列化数据初始化 ObjectDisposedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ObjectDisposedException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ObjectDisposedException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ObjectDisposedException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectDisposedException 类
ObjectDisposedException 成员
ObjectDisposedException 重载
System 命名空间


ObjectDisposedException 构造函数 (String, Exception)

ObjectDisposedException 构造函数 (String, Exception)
ObjectDisposedException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 ObjectDisposedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ObjectDisposedException(
    string message,
    Exception innerException
)
public:
ObjectDisposedException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ObjectDisposedException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递给此构造函数的值相同。 由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递给此构造函数的值相同。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectDisposedException 类
ObjectDisposedException 成员
ObjectDisposedException 重载
System 命名空间


ObjectDisposedException 构造函数 (String, String)

ObjectDisposedException 构造函数 (String, String)
ObjectDisposedException 类

使用指定的对象名称和消息初始化 ObjectDisposedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    objectName As String, _
    message As String _
)
public ObjectDisposedException(
    string objectName,
    string message
)
public:
ObjectDisposedException(
    String^ objectName,
    String^ message
)
new :
        objectName:string *
        message:string -> ObjectDisposedException

参数

objectName
类型： System String
已释放的对象名。
message
类型： System String
解释异常原因的错误消息。

新实例的 InnerException 属性被初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果 objectName 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 Message 属性只包含一个错误消息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObjectDisposedException 类
ObjectDisposedException 成员
ObjectDisposedException 重载
System 命名空间


ObjectDisposedException 方法

ObjectDisposedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectDisposedException 类

ObjectDisposedException 类型公开以下成员。

名称 说明
页首

参考

ObjectDisposedException 类
System 命名空间


ObjectDisposedException ..::.GetObjectData 方法

ObjectDisposedException
.
.
::
.
GetObjectData 方法
ObjectDisposedException 类

使用参数名和附加异常信息检索 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

实现

  • SecurityPermission

    用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand 用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectDisposedException 类
ObjectDisposedException 成员
System 命名空间


ObjectDisposedException 属性

ObjectDisposedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectDisposedException 类

ObjectDisposedException 类型公开以下成员。

名称 说明
页首

参考

ObjectDisposedException 类
System 命名空间


ObjectDisposedException ..::.Message 属性

ObjectDisposedException
.
.
::
.
Message 属性
ObjectDisposedException 类

获取描述错误的消息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property Message As String
    Get
public override string Message { get; }
public:
virtual property String^ Message {
    String^ get () override;
}
abstract Message : string
override Message : string

属性值

类型： System String
描述错误的字符串。

实现

如果 ObjectName 属性不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该消息包含对象的名称。

此属性重写 Exception..::.Message。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectDisposedException 类
ObjectDisposedException 成员
System 命名空间


ObjectDisposedException ..::.ObjectName 属性

ObjectDisposedException
.
.
::
.
ObjectName 属性
ObjectDisposedException 类

获取已释放对象的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ObjectName As String
    Get
public string ObjectName { get; }
public:
property String^ ObjectName {
    String^ get ();
}
member ObjectName : string

属性值

类型： System String
包含已释放对象的名称的字符串。

如果当前属性不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 String..::.Empty，则此属性的值包含在 Message 属性所返回的字符串中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObjectDisposedException 类
ObjectDisposedException 成员
System 命名空间


ObjectDisposedException 事件

ObjectDisposedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectDisposedException 类

ObjectDisposedException 类型公开以下成员。

名称 说明
页首

参考

ObjectDisposedException 类
System 命名空间


ObsoleteAttribute 类

ObsoleteAttribute 类
成员

标记不再使用的程序元素。无法继承此类。 标记不再使用的程序元素。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Struct Or AttributeTargets.Enum Or AttributeTargets.Constructor Or AttributeTargets.Method Or AttributeTargets.Property Or AttributeTargets.Field Or AttributeTargets.Event Or AttributeTargets.Interface Or AttributeTargets.Delegate, Inherited := False)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class ObsoleteAttribute _
    Inherits Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum|AttributeTargets.Constructor|AttributeTargets.Method|AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Event|AttributeTargets.Interface|AttributeTargets.Delegate, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class ObsoleteAttribute : Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets::Class|AttributeTargets::Struct|AttributeTargets::Enum|AttributeTargets::Constructor|AttributeTargets::Method|AttributeTargets::Property|AttributeTargets::Field|AttributeTargets::Event|AttributeTargets::Interface|AttributeTargets::Delegate, Inherited = false)]
[ComVisibleAttribute(true)]
public ref class ObsoleteAttribute sealed : public Attribute
[<SealedAttribute>]
[<SerializableAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum|AttributeTargets.Constructor|AttributeTargets.Method|AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Event|AttributeTargets.Interface|AttributeTargets.Delegate, Inherited = false)>]
[<ComVisibleAttribute(true)>]
type ObsoleteAttribute =
    class
        inherit Attribute
    end

ObsoleteAttribute 可适用于除程序集、模块、参数或返回值以外的所有程序元素。将元素标记为过时可以通知用户：该元素在产品的未来版本中将被移除。 ObsoleteAttribute 可适用于除程序集、模块、参数或返回值以外的所有程序元素。将元素标记为过时可以通知用户：该元素在产品的未来版本中将被移除。

有关使用特性更多信息，请参见利用特性扩展元数据。

下面的示例定义了一个类，并在类中包含一个标有 ObsoleteAttribute 的方法。任何尝试调用该方法的代码都将导致编译器发出警告。 下面的示例定义了一个类，并在类中包含一个标有 ObsoleteAttribute 的方法。任何尝试调用该方法的代码都将导致编译器发出警告。

Module Module1

    Sub Main()
        ' The line below causes the compiler to issue a warning:
        ' 'App.SomeDeprecatedMethod()' is obsolete: 'Do not call this method.'
        SomeDeprecatedMethod()

    End Sub
    ' The method below is marked with the ObsoleteAttribute.
    ' Any code that attempts to call this method will get a warning.
    <Obsolete("Do not call this method.")> Private Sub SomeDeprecatedMethod()

    End Sub
End Module

using System;

public sealed class App {
   static void Main() {
      // The line below causes the compiler to issue a warning:
      // 'App.SomeDeprecatedMethod()' is obsolete: 'Do not call this method.'
      SomeDeprecatedMethod();
   }

   // The method below is marked with the ObsoleteAttribute.
   // Any code that attempts to call this method will get a warning.
   [Obsolete("Do not call this method.")]
   private static void SomeDeprecatedMethod() { }
}

using namespace System;

// The method below is marked with the ObsoleteAttribute.
// Any code that attempts to call this method will get a warning.
[Obsolete("Do not call this method.")]
void SomeDeprecatedMethod()
{
}

int main()
{
    // The line below causes the compiler to issue a warning:
    // 'SomeDeprecatedMethod()': marked as obsolete
    // Message: 'Do not call this method.'
    SomeDeprecatedMethod();
}

System System..::.ObsoleteAttributeObsoleteAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObsoleteAttribute 成员
System 命名空间
Attribute

其他资源

利用特性扩展元数据


ObsoleteAttribute 成员

ObsoleteAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObsoleteAttribute 类

标记不再使用的程序元素。无法继承此类。 标记不再使用的程序元素。无法继承此类。

ObsoleteAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObsoleteAttribute 类
System 命名空间


ObsoleteAttribute 构造函数

ObsoleteAttribute 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObsoleteAttribute 类

初始化 ObsoleteAttribute 类的一个新实例。

名称 说明
页首

参考

ObsoleteAttribute 类
ObsoleteAttribute 成员
System 命名空间


ObsoleteAttribute 构造函数

ObsoleteAttribute 构造函数
ObsoleteAttribute 类

使用默认属性初始化 ObsoleteAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ObsoleteAttribute()
public:
ObsoleteAttribute()
new : unit -> ObsoleteAttribute

下表显示 ObsoleteAttribute 实例的初始属性值。

属性 | 值
IsError | false
Message | nullNothingnullptr nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）

下面的示例演示 ObsoleteAttribute() 构造函数。它包含一个函数，该函数调用被指定为过时方法的方法，然后尝试使用 try/catch 块捕获异常。 下面的示例演示 ObsoleteAttribute() 构造函数。它包含一个函数，该函数调用被指定为过时方法的方法，然后尝试使用 try/catch 块捕获异常。

using System;

public class ObsoleteAttrib_Cons1
{
   // Mark the method as 'Obsolete'.
   [ObsoleteAttribute()]
   public string OldFunction()
   {
      return "This is the String from old function.";
   }

// Create the another function which is replacement to the 'OldFunction'.
   public string NewFunction()
   {
      return "This is the String from new function.";
   }
}

public class TestObsolete1
{
   static void Main(string[] args)
   {
      try
      {
         ObsoleteAttrib_Cons1 myObsolete = new ObsoleteAttrib_Cons1();
         Console.WriteLine(myObsolete.OldFunction());
      }
      catch(Exception e)
      {
         Console.WriteLine("The Exception is :"+e.Message);
      }
   }
}

using namespace System;
public ref class ObsoleteAttrib_Cons1
{
public:

   // Mark the method as 'Obsolete'.

   [Obsolete]
   String^ OldFunction()
   {
      return "This is the String from old function.";
   }

   // Create the another function which is replacement to the 'OldFunction'->
   String^ NewFunction()
   {
      return "This is the String from new function.";
   }

};

int main()
{
   try
   {
      ObsoleteAttrib_Cons1^ myObsolete = gcnew ObsoleteAttrib_Cons1;
      Console::WriteLine( myObsolete->OldFunction() );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "The Exception is : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObsoleteAttribute 类
ObsoleteAttribute 成员
ObsoleteAttribute 重载
System 命名空间


ObsoleteAttribute 构造函数 (String)

ObsoleteAttribute 构造函数 (String)
ObsoleteAttribute 类

使用指定的变通方法消息初始化 ObsoleteAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public ObsoleteAttribute(
    string message
)
public:
ObsoleteAttribute(
    String^ message
)
new :
        message:string -> ObsoleteAttribute

参数

message
类型： System String
描述可选的变通方法的文本字符串。

下表显示 ObsoleteAttribute 实例的初始属性值。

属性 | 值
IsError | false.
Message | 变通方法消息。

下面的示例演示 ObsoleteAttribute(String) 构造函数。它包含一个函数，该函数调用被指定为过时方法的方法，然后尝试使用 try/catch 块捕获异常。参数字符串显示为变通方法消息。 下面的示例演示 ObsoleteAttribute(String) 构造函数。它包含一个函数，该函数调用被指定为过时方法的方法，然后尝试使用 try/catch 块捕获异常。参数字符串显示为变通方法消息。

Imports System

Public Class ObsoleteAttrib_Cons1
   ' Mark the method as 'Obsolete' with message as parameter.
   <ObsoleteAttribute("This function will be removed from future Versions.Use another function 'NewFunction'")> _
   Public Function OldFunction() As String
      OldFunction= "This is the String from old function."
   End Function

   ' Create the another function which is replacement to the 'OldFunction'.
   Public Function NewFunction() As String
      NewFunction= "This is the String from new function."
   End Function
End Class

Public Class TestObsolete2
   Public Shared Sub Main(ByVal args() As String)
      Try
         Dim myObsolete As New ObsoleteAttrib_Cons1()
         Console.WriteLine(myObsolete.OldFunction())
         Console.WriteLine(myObsolete.NewFunction())
      Catch e As Exception
         Console.WriteLine(("The Exception is :" + e.Message))
      End Try
   End Sub
End Class

using System;
public class ObsoleteAttrib_Cons1
{
   // Mark the method as 'Obsolete' with message as parameter.
   [ObsoleteAttribute("This function will be removed from future Versions.Use another function 'NewFunction'")]
   public string OldFunction()
   {
      return "This is the String from old function.";
   }
   // Create the another function which is replacement to the 'OldFunction'.
   public string NewFunction()
   {
      return "This is the String from new function.";
   }
}

public class TestObsolete2
{
   static void Main(string[] args)
   {
      try
      {
         ObsoleteAttrib_Cons1 myObsolete = new ObsoleteAttrib_Cons1();
         Console.WriteLine(myObsolete.OldFunction());
         Console.WriteLine(myObsolete.NewFunction());
      }
      catch(Exception e)
      {
         Console.WriteLine("The Exception is :"+e.Message);
      }
   }
}

using namespace System;
public ref class ObsoleteAttrib_Cons1
{
public:

   // Mark the method as 'Obsolete' with message as parameter.

   [ObsoleteAttribute("This function will be removed from future Versions. Use another function 'NewFunction'")]
   String^ OldFunction()
   {
      return "This is the String from old function.";
   }

   // Create another function which is replacement to the 'OldFunction'.
   String^ NewFunction()
   {
      return "This is the String from new function.";
   }

};

int main()
{
   try
   {
      ObsoleteAttrib_Cons1^ myObsolete = gcnew ObsoleteAttrib_Cons1;
      Console::WriteLine( myObsolete->OldFunction() );
      Console::WriteLine( myObsolete->NewFunction() );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "The Exception is : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObsoleteAttribute 类
ObsoleteAttribute 成员
ObsoleteAttribute 重载
System 命名空间


ObsoleteAttribute 构造函数 (String, Boolean)

ObsoleteAttribute 构造函数 (String, Boolean)
ObsoleteAttribute 类

使用变通方法消息和布尔值初始化 ObsoleteAttribute 类的新实例，该布尔值指示是否将使用已过时的元素视为错误。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    error As Boolean _
)
public ObsoleteAttribute(
    string message,
    bool error
)
public:
ObsoleteAttribute(
    String^ message,
    bool error
)
new :
        message:string *
        error:bool -> ObsoleteAttribute

参数

message
类型： System String
描述可选的变通方法的文本字符串。
error
类型： System Boolean
指示是否将使用已过时的元素视为错误的布尔值。

下表显示 ObsoleteAttribute 实例的初始属性值。

属性 | 值
IsError | error 值。
Message | 变通方法消息。

下面的示例演示 ObsoleteAttribute(String, Boolean) 构造函数。它包含一个函数，该函数调用被指定为过时方法的方法，并尝试使用 try/catch 块捕获异常。String 参数显示为变通方法消息，Boolean 参数指示尚未发生错误。 下面的示例演示 ObsoleteAttribute(String, Boolean) 构造函数。它包含一个函数，该函数调用被指定为过时方法的方法，并尝试使用 try/catch 块捕获异常。String 参数显示为变通方法消息，Boolean 参数指示尚未发生错误。 下面的示例演示 ObsoleteAttribute(String, Boolean) 构造函数。它包含一个函数，该函数调用被指定为过时方法的方法，并尝试使用 try/catch 块捕获异常。String 参数显示为变通方法消息，Boolean 参数指示尚未发生错误。

Imports System

Public Class ObsoleteAttrib_Cons1
   ' Mark the method as 'Obsolete' with message and IsError as parameters.
   <ObsoleteAttribute("This function will be removed from future Versions.Use another function 'NewFunction'", False)> _
   Public Function OldFunction() As String
      OldFunction= "This is the String from old function."
   End Function

   ' Create the another function which is replacement to the 'OldFunction'.
   Public Function NewFunction() As String
      Return "This is the String from new function."
   End Function
End Class

Public Class TestObsolete3

   Public Shared Sub Main(ByVal args() As String)
      Try
         Dim myObsolete As New ObsoleteAttrib_Cons1()
         Console.WriteLine(myObsolete.OldFunction())
         Console.WriteLine(myObsolete.NewFunction())
      Catch e As Exception
         Console.WriteLine(("The Exception is :" + e.Message))
      End Try
   End Sub
End Class

using System;

public class ObsoleteAttrib_Cons1
{

   // Mark the method as 'Obsolete' with message and IsError as parameters.
   [ObsoleteAttribute("This function will be removed from future Versions.Use another function 'NewFunction'",false)]
   public string OldFunction()
   {
      return "This is the String from old function.";
   }
   // Create the another function which is replacement to the 'OldFunction'.
   public string NewFunction()
   {
      return "This is the String from new function.";
   }

}
public class TestObsolete3
{
   static void Main(string[] args)
   {
      try
      {
         ObsoleteAttrib_Cons1 myObsolete = new ObsoleteAttrib_Cons1();
         Console.WriteLine(myObsolete.OldFunction());
         Console.WriteLine(myObsolete.NewFunction());
      }
      catch(Exception e)
      {
         Console.WriteLine("The Exception is :"+e.Message);
      }
   }
}

using namespace System;
public ref class ObsoleteAttrib_Cons1
{
public:

   // Mark the method as 'Obsolete' with message and IsError as parameters.

   [ObsoleteAttribute("This function will be removed from future Versions. Use another function 'NewFunction'",false)]
   String^ OldFunction()
   {
      return "This is the String from old function.";
   }

   // Create another function which is replacement to the 'OldFunction'.
   String^ NewFunction()
   {
      return "This is the String from new function.";
   }

};

int main()
{
   try
   {
      ObsoleteAttrib_Cons1^ myObsolete = gcnew ObsoleteAttrib_Cons1;
      Console::WriteLine( myObsolete->OldFunction() );
      Console::WriteLine( myObsolete->NewFunction() );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "The Exception is : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObsoleteAttribute 类
ObsoleteAttribute 成员
ObsoleteAttribute 重载
System 命名空间


ObsoleteAttribute 方法

ObsoleteAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObsoleteAttribute 类

ObsoleteAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObsoleteAttribute 类
System 命名空间


ObsoleteAttribute 属性

ObsoleteAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObsoleteAttribute 类

ObsoleteAttribute 类型公开以下成员。

名称 说明
页首

参考

ObsoleteAttribute 类
System 命名空间


ObsoleteAttribute ..::.IsError 属性

ObsoleteAttribute
.
.
::
.
IsError 属性
ObsoleteAttribute 类

获取指示编译器是否将使用已过时的程序元素视为错误的布尔值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsError As Boolean
    Get
public bool IsError { get; }
public:
property bool IsError {
    bool get ();
}
member IsError : bool

属性值

类型： System Boolean
如果将使用已过时的元素视为错误，则为 true；否则为 false。默认为 false。 如果将使用已过时的元素视为错误，则为 true；否则为 false。默认为 false。

下面的示例通过创建一个过时的方法、将其 IsError 属性设置为 false 并运行该方法来演示 IsError 属性。当输入 IsError 属性时，控制台中将显示一条消息，指明使用此过时的方法不是错误。 下面的示例通过创建一个过时的方法、将其 IsError 属性设置为 false 并运行该方法来演示 IsError 属性。当输入 IsError 属性时，控制台中将显示一条消息，指明使用此过时的方法不是错误。

Imports System
Imports System.ComponentModel
Imports Microsoft.VisualBasic

Public Class ObsoleteAttribute_Message

   ' Mark the property as 'Obsolete' with message and IsError as parameters.

<ObsoleteAttribute("This property will be removed from future Versions.Use another property 'MyNewProperty'", False)> _
   Public ReadOnly Property MyOldProperty() As String
      Get
         Return "This is the value of the property"
      End Get
   End Property
   ' Create another property.

   Public ReadOnly Property MyNewProperty() As String
      Get
         Return "This is the value of the new property"
      End Get
   End Property

   ' Get the Properties of the 'ObsoleteAttribute'.
   Public Sub GetPropertyAttributes()
      ' Retrieve all the attributes.
      Dim attributes As AttributeCollection = TypeDescriptor.GetProperties(Me)("MyOldProperty").Attributes

      Dim myAttribute As ObsoleteAttribute = CType(attributes(GetType(ObsoleteAttribute)), ObsoleteAttribute)
      Console.WriteLine(("The Message of the ObsoleteAttribute is :" + ControlChars.Cr + myAttribute.Message))
      Console.WriteLine(("Usage of Obsolete as error is :" + myAttribute.IsError.ToString()))
   End Sub

   Public Shared Sub Main(args() As String)

      Try
         Dim myObsolete As New ObsoleteAttribute_Message()
         Console.WriteLine(("The Message of Old Property is :" + myObsolete.MyOldProperty))
         Console.WriteLine(("The Message of New Property is :" + myObsolete.MyNewProperty))
         Console.WriteLine(ControlChars.Cr + "The Values of ObsoleteAttribute are:")
         myObsolete.GetPropertyAttributes()

      Catch e As Exception
         Console.WriteLine(("The Exception is :" + e.Message.ToString()))
      End Try
   End Sub
End Class

using System;
using System.ComponentModel;

public class ObsoleteAttribute_Message
{
// Mark the property as 'Obsolete' with message and IsError as parameters.
[ObsoleteAttribute("This property will be removed from future Versions.Use another property 'MyNewProperty'",false)]
   public string MyOldProperty
   {
      get
      {
         return "This is the value of the property";
      }
   }
   // Create another property.
   public string MyNewProperty
   {
      get
      {
         return "This is the value of the new property";
      }
   }

// Get the Properties of the 'ObsoleteAttribute'.
public void GetPropertyAttributes()
{
   // Retrieve all the attributes.
   AttributeCollection attributes = TypeDescriptor.GetProperties(this)["MyOldProperty"].Attributes;

   ObsoleteAttribute myAttribute = (ObsoleteAttribute)attributes[typeof(ObsoleteAttribute)];
   Console.WriteLine("The Message of the ObsoleteAttribute is :\n"+myAttribute.Message);
   Console.WriteLine("Usage of Obsolete as error is :"+myAttribute.IsError);
}
}

public class TestObsolete4
{
   static void Main(string[] args)
   {
      try
      {
         ObsoleteAttribute_Message myObsolete = new ObsoleteAttribute_Message();
         Console.WriteLine("The Message of Old Property is :"+myObsolete.MyOldProperty);
         Console.WriteLine("The Message of New Property is :"+myObsolete.MyNewProperty);
         myObsolete.GetPropertyAttributes();
      }
      catch(Exception e)
      {
         Console.WriteLine("The Exception is :"+e.Message);
      }
   }

}

#using <system.dll>

using namespace System;
using namespace System::ComponentModel;

public ref class ObsoleteAttribute_Message
{
public:

   property String^ MyOldProperty
   {
      // Mark the property as 'Obsolete' with message and IsError as parameters.

      [ObsoleteAttribute("This property will be removed from future Versions. Use another property 'MyNewProperty'",false)]
      String^ get()
      {
         return "This is the value of the property";
      }
   }

   property String^ MyNewProperty
   {
      // Create another property.
      String^ get()
      {
         return "This is the value of the new property";
      }
   }

   // Get the Properties of the 'ObsoleteAttribute'.
   void GetPropertyAttributes()
   {
      // Retrieve all the attributes.
      AttributeCollection^ attributes = TypeDescriptor::GetProperties( this )[ "MyOldProperty" ]->Attributes;
      ObsoleteAttribute^ myAttribute = safe_cast<ObsoleteAttribute^>(attributes[ ObsoleteAttribute::typeid ]);
      Console::WriteLine( "The Message of the ObsoleteAttribute is :\n {0}", myAttribute->Message );
      Console::WriteLine( "Usage of Obsolete as error is : {0}", myAttribute->IsError );
   }
};

int main()
{
   try
   {
      ObsoleteAttribute_Message^ myObsolete = gcnew ObsoleteAttribute_Message;
      Console::WriteLine( "The Message of Old Property is : {0}", myObsolete->MyOldProperty );
      Console::WriteLine( "The Message of New Property is : {0}", myObsolete->MyNewProperty );
      myObsolete->GetPropertyAttributes();
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "The Exception is : {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObsoleteAttribute 类
ObsoleteAttribute 成员
System 命名空间


ObsoleteAttribute ..::.Message 属性

ObsoleteAttribute
.
.
::
.
Message 属性
ObsoleteAttribute 类

获取变通方法消息，包括对可选程序元素的说明。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Message As String
    Get
public string Message { get; }
public:
property String^ Message {
    String^ get ();
}
member Message : string

属性值

类型： System String
变通方法文本字符串。

下面的示例通过创建一个过时的类、设置其附加的 Message 属性并在控制台中显示该属性来演示 Message 属性。

Imports System
Imports System.ComponentModel
Imports Microsoft.VisualBasic

Public Class ObsoleteAttribute_Message

   ' Mark the property as 'Obsolete' with message and IsError as parameters.

<ObsoleteAttribute("This property will be removed from future Versions.Use another property 'MyNewProperty'", False)> _
   Public ReadOnly Property MyOldProperty() As String
      Get
         Return "This is the value of the property"
      End Get
   End Property
   ' Create another property.

   Public ReadOnly Property MyNewProperty() As String
      Get
         Return "This is the value of the new property"
      End Get
   End Property

   ' Get the Properties of the 'ObsoleteAttribute'.
   Public Sub GetPropertyAttributes()
      ' Retrieve all the attributes.
      Dim attributes As AttributeCollection = TypeDescriptor.GetProperties(Me)("MyOldProperty").Attributes

      Dim myAttribute As ObsoleteAttribute = CType(attributes(GetType(ObsoleteAttribute)), ObsoleteAttribute)
      Console.WriteLine(("The Message of the ObsoleteAttribute is :" + ControlChars.Cr + myAttribute.Message))
      Console.WriteLine(("Usage of Obsolete as error is :" + myAttribute.IsError.ToString()))
   End Sub

   Public Shared Sub Main(args() As String)

      Try
         Dim myObsolete As New ObsoleteAttribute_Message()
         Console.WriteLine(("The Message of Old Property is :" + myObsolete.MyOldProperty))
         Console.WriteLine(("The Message of New Property is :" + myObsolete.MyNewProperty))
         Console.WriteLine(ControlChars.Cr + "The Values of ObsoleteAttribute are:")
         myObsolete.GetPropertyAttributes()

      Catch e As Exception
         Console.WriteLine(("The Exception is :" + e.Message.ToString()))
      End Try
   End Sub
End Class

using System;
using System.ComponentModel;

public class ObsoleteAttribute_Message
{
// Mark the property as 'Obsolete' with message and IsError as parameters.
[ObsoleteAttribute("This property will be removed from future Versions.Use another property 'MyNewProperty'",false)]
   public string MyOldProperty
   {
      get
      {
         return "This is the value of the property";
      }
   }
   // Create another property.
   public string MyNewProperty
   {
      get
      {
         return "This is the value of the new property";
      }
   }

// Get the Properties of the 'ObsoleteAttribute'.
public void GetPropertyAttributes()
{
   // Retrieve all the attributes.
   AttributeCollection attributes = TypeDescriptor.GetProperties(this)["MyOldProperty"].Attributes;

   ObsoleteAttribute myAttribute = (ObsoleteAttribute)attributes[typeof(ObsoleteAttribute)];
   Console.WriteLine("The Message of the ObsoleteAttribute is :\n"+myAttribute.Message);
   Console.WriteLine("Usage of Obsolete as error is :"+myAttribute.IsError);
}
}

public class TestObsolete4
{
   static void Main(string[] args)
   {
      try
      {
         ObsoleteAttribute_Message myObsolete = new ObsoleteAttribute_Message();
         Console.WriteLine("The Message of Old Property is :"+myObsolete.MyOldProperty);
         Console.WriteLine("The Message of New Property is :"+myObsolete.MyNewProperty);
         myObsolete.GetPropertyAttributes();
      }
      catch(Exception e)
      {
         Console.WriteLine("The Exception is :"+e.Message);
      }
   }

}

#using <system.dll>

using namespace System;
using namespace System::ComponentModel;

public ref class ObsoleteAttribute_Message
{
public:

   property String^ MyOldProperty
   {
      // Mark the property as 'Obsolete' with message and IsError as parameters.

      [ObsoleteAttribute("This property will be removed from future Versions. Use another property 'MyNewProperty'",false)]
      String^ get()
      {
         return "This is the value of the property";
      }
   }

   property String^ MyNewProperty
   {
      // Create another property.
      String^ get()
      {
         return "This is the value of the new property";
      }
   }

   // Get the Properties of the 'ObsoleteAttribute'.
   void GetPropertyAttributes()
   {
      // Retrieve all the attributes.
      AttributeCollection^ attributes = TypeDescriptor::GetProperties( this )[ "MyOldProperty" ]->Attributes;
      ObsoleteAttribute^ myAttribute = safe_cast<ObsoleteAttribute^>(attributes[ ObsoleteAttribute::typeid ]);
      Console::WriteLine( "The Message of the ObsoleteAttribute is :\n {0}", myAttribute->Message );
      Console::WriteLine( "Usage of Obsolete as error is : {0}", myAttribute->IsError );
   }
};

int main()
{
   try
   {
      ObsoleteAttribute_Message^ myObsolete = gcnew ObsoleteAttribute_Message;
      Console::WriteLine( "The Message of Old Property is : {0}", myObsolete->MyOldProperty );
      Console::WriteLine( "The Message of New Property is : {0}", myObsolete->MyNewProperty );
      myObsolete->GetPropertyAttributes();
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "The Exception is : {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ObsoleteAttribute 类
ObsoleteAttribute 成员
System 命名空间


OperatingSystem 类

OperatingSystem 类
成员

表示有关操作系统的信息，如版本和平台标识符。此类不能被继承。 表示有关操作系统的信息，如版本和平台标识符。此类不能被继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class OperatingSystem _
    Implements ICloneable, ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class OperatingSystem : ICloneable,
    ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class OperatingSystem sealed : ICloneable,
    ISerializable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type OperatingSystem =
    class
        interface ICloneable
        interface ISerializable
    end

OperatingSystem 类包含有关操作系统的信息。例如，Environment..::.OSVersion 属性在 OperatingSystem 对象中返回有关当前正在执行的操作系统的信息。 OperatingSystem 类包含有关操作系统的信息。例如，Environment..::.OSVersion 属性在 OperatingSystem 对象中返回有关当前正在执行的操作系统的信息。

在设计上，OperatingSystem 类不是描述操作系统的一般方式，从 OperatingSystem 类派生的类型无法包含更多内容。如果需要一个类型用于包含有关操作系统的其他信息，则应创建自己的类型，然后包括一个 OperatingSystem 类型的字段，以及所需的任何其他字段、属性或方法。 在设计上，OperatingSystem 类不是描述操作系统的一般方式，从 OperatingSystem 类派生的类型无法包含更多内容。如果需要一个类型用于包含有关操作系统的其他信息，则应创建自己的类型，然后包括一个 OperatingSystem 类型的字段，以及所需的任何其他字段、属性或方法。

下面的代码示例使用 Platform 和 Version 属性的所选值创建 OperatingSystem 类的对象。

' Example for the OperatingSystem constructor and the
' OperatingSystem.ToString( ) method.
Imports System
Imports Microsoft.VisualBasic

Module OpSysConstructDemo

    ' Create and display an OperatingSystem object.
    Sub BuildOSObj( pID As PlatformID, ver As Version )

        Dim os As New OperatingSystem( pID, ver )

        Console.WriteLine( "   {0}", os.ToString( ) )
    End Sub

    Sub BuildOperatingSystemObjects( )

        ' The Version object does not need to correspond to an
        ' actual OS version.
        Dim verNull     As New Version( )
        Dim verMajMin   As New Version( 3, 11 )
        Dim verMMBld    As New Version( 5, 25, 625 )
        Dim verMMBVer   As New Version( 5, 6, 7, 8 )
        Dim verString   As New Version( "3.5.8.13" )

        ' All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull )
        BuildOSObj( PlatformID.Win32S, verMajMin )
        BuildOSObj( PlatformID.Win32Windows, verMMBld )
        BuildOSObj( PlatformID.WinCE, verMMBVer )
        BuildOSObj( PlatformID.Win32NT, verString )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the OperatingSystem constructor " & _
            "and " & vbCrLf & "OperatingSystem.ToString( ) " & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( _
            "Create and display several different " & _
            "OperatingSystem objects:" & vbCrLf )

        BuildOperatingSystemObjects( )

        Console.WriteLine(vbCrLf & _
            "The OS version of the host computer is: " & _
            vbCrLf & vbCrLf & "   {0}", _
            Environment.OSVersion.ToString( ) )
    End Sub
End Module

' This example of the OperatingSystem constructor and
' OperatingSystem.ToString( ) generates the following output.
'
' Create and display several different OperatingSystem objects:
'
'    Microsoft Windows NT 0.0
'    Microsoft Win32S 3.11
'    Microsoft Windows 98 5.25.625
'    Microsoft Windows CE 5.6.7.8
'    Microsoft Windows NT 3.5.8.13
'
' The OS version of the host computer is:
'
'    Microsoft Windows NT 5.1.2600.0

// Example for the OperatingSystem constructor and the
// OperatingSystem.ToString( ) method.
using System;

class OpSysConstructDemo
{
    // Create and display an OperatingSystem object.
    static void BuildOSObj( PlatformID pID, Version ver )
    {
        OperatingSystem os = new OperatingSystem( pID, ver );

        Console.WriteLine( "   {0}", os.ToString( ) );
    }

    static void BuildOperatingSystemObjects( )
    {
        // The Version object does not need to correspond to an
        // actual OS version.
        Version verNull     = new Version( );
        Version verMajMin   = new Version( 3, 11 );
        Version verMMBld    = new Version( 5, 25, 625 );
        Version verMMBVer   = new Version( 5, 6, 7, 8 );
        Version verString   = new Version( "3.5.8.13" );

        // All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull );
        BuildOSObj( PlatformID.Win32S, verMajMin );
        BuildOSObj( PlatformID.Win32Windows, verMMBld );
        BuildOSObj( PlatformID.WinCE, verMMBVer );
        BuildOSObj( PlatformID.Win32NT, verString );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the OperatingSystem constructor " +
            "and \nOperatingSystem.ToString( ) " +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create and display several different " +
            "OperatingSystem objects:\n" );

        BuildOperatingSystemObjects( );

        Console.WriteLine(
            "\nThe OS version of the host computer is:\n\n   {0}",
            Environment.OSVersion.ToString( ) );
    }
}

/*
This example of the OperatingSystem constructor and
OperatingSystem.ToString( ) generates the following output.

Create and display several different OperatingSystem objects:

   Microsoft Windows NT 0.0
   Microsoft Win32S 3.11
   Microsoft Windows 98 5.25.625
   Microsoft Windows CE 5.6.7.8
   Microsoft Windows NT 3.5.8.13

The OS version of the host computer is:

   Microsoft Windows NT 5.1.2600.0
*/

// Example for the OperatingSystem constructor and the
// OperatingSystem::ToString( ) method.
using namespace System;

// Create and display an OperatingSystem object.
void BuildOSObj( PlatformID pID, Version^ ver )
{
   OperatingSystem^ os = gcnew OperatingSystem( pID,ver );
   Console::WriteLine( "   {0}", os->ToString() );
}

void BuildOperatingSystemObjects()
{

   // The Version object does not need to correspond to an
   // actual OS version.
   Version^ verNull = gcnew Version;
   Version^ verMajMin = gcnew Version( 3,11 );
   Version^ verMMBld = gcnew Version( 5,25,625 );
   Version^ verMMBVer = gcnew Version( 5,6,7,8 );
   Version^ verString = gcnew Version( "3.5.8.13" );

   // All PlatformID members are shown here.
   BuildOSObj( PlatformID::Win32NT, verNull );
   BuildOSObj( PlatformID::Win32S, verMajMin );
   BuildOSObj( PlatformID::Win32Windows, verMMBld );
   BuildOSObj( PlatformID::WinCE, verMMBVer );
   BuildOSObj( PlatformID::Win32NT, verString );
}

int main()
{
   Console::WriteLine( "This example of the OperatingSystem constructor and \n"
   "OperatingSystem::ToString( ) generates the following "
   "output.\n" );
   Console::WriteLine( "Create and display several different "
   "OperatingSystem objects:\n" );
   BuildOperatingSystemObjects();
   Console::WriteLine( "\nThe OS version of the host computer is:\n\n   {0}", Environment::OSVersion->ToString() );
}

/*
This example of the OperatingSystem constructor and
OperatingSystem::ToString( ) generates the following output.

Create and display several different OperatingSystem objects:

   Microsoft Windows NT 0.0
   Microsoft Win32S 3.11
   Microsoft Windows 98 5.25.625
   Microsoft Windows CE 5.6.7.8
   Microsoft Windows NT 3.5.8.13

The OS version of the host computer is:

   Microsoft Windows NT 5.1.2600.0
*/

System System..::.OperatingSystemOperatingSystem
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OperatingSystem 成员
System 命名空间


OperatingSystem 成员

OperatingSystem 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperatingSystem 类

表示有关操作系统的信息，如版本和平台标识符。此类不能被继承。 表示有关操作系统的信息，如版本和平台标识符。此类不能被继承。

OperatingSystem 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OperatingSystem 类
System 命名空间


OperatingSystem 构造函数

OperatingSystem 构造函数
OperatingSystem 类

使用指定的平台标识符值和版本对象来初始化 OperatingSystem 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    platform As PlatformID, _
    version As Version _
)
public OperatingSystem(
    PlatformID platform,
    Version version
)
public:
OperatingSystem(
    PlatformID platform,
    Version^ version
)
new :
        platform:PlatformID *
        version:Version -> OperatingSystem

参数

platform
类型： System PlatformID
PlatformID 值之一，指示操作系统平台。
version
类型： System Version
Version 对象，指示操作系统的版本。
异常 | 条件
ArgumentNullException | version 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | platform 不是一个 PlatformID 枚举值。

下面的代码示例使用 Platform 和 Version 属性的所选值创建 OperatingSystem 类的对象。

' Example for the OperatingSystem constructor and the
' OperatingSystem.ToString( ) method.
Imports System
Imports Microsoft.VisualBasic

Module OpSysConstructDemo

    ' Create and display an OperatingSystem object.
    Sub BuildOSObj( pID As PlatformID, ver As Version )

        Dim os As New OperatingSystem( pID, ver )

        Console.WriteLine( "   {0}", os.ToString( ) )
    End Sub

    Sub BuildOperatingSystemObjects( )

        ' The Version object does not need to correspond to an
        ' actual OS version.
        Dim verNull     As New Version( )
        Dim verMajMin   As New Version( 3, 11 )
        Dim verMMBld    As New Version( 5, 25, 625 )
        Dim verMMBVer   As New Version( 5, 6, 7, 8 )
        Dim verString   As New Version( "3.5.8.13" )

        ' All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull )
        BuildOSObj( PlatformID.Win32S, verMajMin )
        BuildOSObj( PlatformID.Win32Windows, verMMBld )
        BuildOSObj( PlatformID.WinCE, verMMBVer )
        BuildOSObj( PlatformID.Win32NT, verString )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the OperatingSystem constructor " & _
            "and " & vbCrLf & "OperatingSystem.ToString( ) " & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( _
            "Create and display several different " & _
            "OperatingSystem objects:" & vbCrLf )

        BuildOperatingSystemObjects( )

        Console.WriteLine(vbCrLf & _
            "The OS version of the host computer is: " & _
            vbCrLf & vbCrLf & "   {0}", _
            Environment.OSVersion.ToString( ) )
    End Sub
End Module

' This example of the OperatingSystem constructor and
' OperatingSystem.ToString( ) generates the following output.
'
' Create and display several different OperatingSystem objects:
'
'    Microsoft Windows NT 0.0
'    Microsoft Win32S 3.11
'    Microsoft Windows 98 5.25.625
'    Microsoft Windows CE 5.6.7.8
'    Microsoft Windows NT 3.5.8.13
'
' The OS version of the host computer is:
'
'    Microsoft Windows NT 5.1.2600.0

// Example for the OperatingSystem constructor and the
// OperatingSystem.ToString( ) method.
using System;

class OpSysConstructDemo
{
    // Create and display an OperatingSystem object.
    static void BuildOSObj( PlatformID pID, Version ver )
    {
        OperatingSystem os = new OperatingSystem( pID, ver );

        Console.WriteLine( "   {0}", os.ToString( ) );
    }

    static void BuildOperatingSystemObjects( )
    {
        // The Version object does not need to correspond to an
        // actual OS version.
        Version verNull     = new Version( );
        Version verMajMin   = new Version( 3, 11 );
        Version verMMBld    = new Version( 5, 25, 625 );
        Version verMMBVer   = new Version( 5, 6, 7, 8 );
        Version verString   = new Version( "3.5.8.13" );

        // All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull );
        BuildOSObj( PlatformID.Win32S, verMajMin );
        BuildOSObj( PlatformID.Win32Windows, verMMBld );
        BuildOSObj( PlatformID.WinCE, verMMBVer );
        BuildOSObj( PlatformID.Win32NT, verString );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the OperatingSystem constructor " +
            "and \nOperatingSystem.ToString( ) " +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create and display several different " +
            "OperatingSystem objects:\n" );

        BuildOperatingSystemObjects( );

        Console.WriteLine(
            "\nThe OS version of the host computer is:\n\n   {0}",
            Environment.OSVersion.ToString( ) );
    }
}

/*
This example of the OperatingSystem constructor and
OperatingSystem.ToString( ) generates the following output.

Create and display several different OperatingSystem objects:

   Microsoft Windows NT 0.0
   Microsoft Win32S 3.11
   Microsoft Windows 98 5.25.625
   Microsoft Windows CE 5.6.7.8
   Microsoft Windows NT 3.5.8.13

The OS version of the host computer is:

   Microsoft Windows NT 5.1.2600.0
*/

// Example for the OperatingSystem constructor and the
// OperatingSystem::ToString( ) method.
using namespace System;

// Create and display an OperatingSystem object.
void BuildOSObj( PlatformID pID, Version^ ver )
{
   OperatingSystem^ os = gcnew OperatingSystem( pID,ver );
   Console::WriteLine( "   {0}", os->ToString() );
}

void BuildOperatingSystemObjects()
{

   // The Version object does not need to correspond to an
   // actual OS version.
   Version^ verNull = gcnew Version;
   Version^ verMajMin = gcnew Version( 3,11 );
   Version^ verMMBld = gcnew Version( 5,25,625 );
   Version^ verMMBVer = gcnew Version( 5,6,7,8 );
   Version^ verString = gcnew Version( "3.5.8.13" );

   // All PlatformID members are shown here.
   BuildOSObj( PlatformID::Win32NT, verNull );
   BuildOSObj( PlatformID::Win32S, verMajMin );
   BuildOSObj( PlatformID::Win32Windows, verMMBld );
   BuildOSObj( PlatformID::WinCE, verMMBVer );
   BuildOSObj( PlatformID::Win32NT, verString );
}

int main()
{
   Console::WriteLine( "This example of the OperatingSystem constructor and \n"
   "OperatingSystem::ToString( ) generates the following "
   "output.\n" );
   Console::WriteLine( "Create and display several different "
   "OperatingSystem objects:\n" );
   BuildOperatingSystemObjects();
   Console::WriteLine( "\nThe OS version of the host computer is:\n\n   {0}", Environment::OSVersion->ToString() );
}

/*
This example of the OperatingSystem constructor and
OperatingSystem::ToString( ) generates the following output.

Create and display several different OperatingSystem objects:

   Microsoft Windows NT 0.0
   Microsoft Win32S 3.11
   Microsoft Windows 98 5.25.625
   Microsoft Windows CE 5.6.7.8
   Microsoft Windows NT 3.5.8.13

The OS version of the host computer is:

   Microsoft Windows NT 5.1.2600.0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OperatingSystem 类
OperatingSystem 成员
System 命名空间


OperatingSystem 方法

OperatingSystem 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperatingSystem 类

OperatingSystem 类型公开以下成员。

名称 说明
页首

参考

OperatingSystem 类
System 命名空间


OperatingSystem ..::.Clone 方法

OperatingSystem
.
.
::
.
Clone 方法
OperatingSystem 类

创建与此实例相同的 OperatingSystem 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Clone As Object
public Object Clone()
public:
virtual Object^ Clone() sealed
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
OperatingSystem 对象，是此实例的副本。

实现

下面的代码示例演示如何使用 Clone 方法创建 OperatingSystem 对象的副本。复本与原始对象进行比较，以显示它们不是同一个对象。 下面的代码示例演示如何使用 Clone 方法创建 OperatingSystem 对象的副本。复本与原始对象进行比较，以显示它们不是同一个对象。

' Example for the OperatingSystem.Clone method.
Imports System
Imports Microsoft.VisualBasic

Module CloneCompareDemo

    ' Copy, clone, and duplicate an OperatingSystem object.
    Sub CopyOperatingSystemObjects( )

        ' The Version object does not need to correspond to an
        ' actual OS version.
        Dim verMMBVer As New Version( 5, 6, 7, 8 )

        Dim opCreate1 As New _
            OperatingSystem( PlatformID.Win32NT, verMMBVer )

        ' Create another OperatingSystem object with the same
        ' parameters as opCreate1.
        Dim opCreate2 As New _
            OperatingSystem( PlatformID.Win32NT, verMMBVer )

        ' Clone opCreate1 and copy the opCreate1 reference.
        Dim opClone As OperatingSystem = _
            CType( opCreate1.Clone( ), OperatingSystem )
        Dim opCopy As OperatingSystem = opCreate1

        ' Compare the various objects for equality.
        Console.WriteLine( "{0,-50}{1}", _
            "Is the second object the same as the original?", _
            opCreate1.Equals( opCreate2 ) )
        Console.WriteLine( "{0,-50}{1}", _
            "Is the object clone the same as the original?", _
            opCreate1.Equals( opClone ) )
        Console.WriteLine( "{0,-50}{1}", _
            "Is the copied object the same as the original?", _
            opCreate1.Equals( opCopy ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of OperatingSystem.Clone( ) " & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( _
            "Create an OperatingSystem object, and then " & _
            "create another object with the " & vbCrLf & _
            "same parameters. Clone and copy the " & _
            "original object, and then compare " & vbCrLf & _
            "each object with the original using the " & _
            "Equals( ) method. Equals( ) " & vbCrLf & _
            "returns true only when both " & _
            "references refer to the same object." & vbCrLf)

        CopyOperatingSystemObjects( )

    End Sub
End Module

' This example of OperatingSystem.Clone( ) generates the following output.
'
' Create an OperatingSystem object, and then create another object with the
' same parameters. Clone and copy the original object, and then compare
' each object with the original using the Equals( ) method. Equals( )
' returns true only when both references refer to the same object.
'
' Is the second object the same as the original?    False
' Is the object clone the same as the original?     False
' Is the copied object the same as the original?    True

// Example for the OperatingSystem.Clone method.
using System;

class CloneCompareDemo
{
    // Copy, clone, and duplicate an OperatingSystem object.
    static void CopyOperatingSystemObjects( )
    {
        // The Version object does not need to correspond to an
        // actual OS version.
        Version verMMBVer = new Version( 5, 6, 7, 8 );

        OperatingSystem opCreate1 = new
            OperatingSystem( PlatformID.Win32NT, verMMBVer );

        // Create another OperatingSystem object with the same
        // parameters as opCreate1.
        OperatingSystem opCreate2 = new
            OperatingSystem( PlatformID.Win32NT, verMMBVer );

        // Clone opCreate1 and copy the opCreate1 reference.
        OperatingSystem opClone =
            (OperatingSystem)opCreate1.Clone( );
        OperatingSystem opCopy = opCreate1;

        // Compare the various objects for equality.
        Console.WriteLine( "{0,-50}{1}",
            "Is the second object the same as the original?",
            opCreate1.Equals( opCreate2 ) );
        Console.WriteLine( "{0,-50}{1}",
            "Is the object clone the same as the original?",
            opCreate1.Equals( opClone ) );
        Console.WriteLine( "{0,-50}{1}",
            "Is the copied object the same as the original?",
            opCreate1.Equals( opCopy ) );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of OperatingSystem.Clone( ) " +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create an OperatingSystem object, and then " +
            "create another object with the \n" +
            "same parameters. Clone and copy the original " +
            "object, and then compare \n" +
            "each object with the original " +
            "using the Equals( ) method. Equals( ) \n" +
            "returns true only when both " +
            "references refer to the same object.\n" );

        CopyOperatingSystemObjects( );
    }
}

/*
This example of OperatingSystem.Clone( ) generates the following output.

Create an OperatingSystem object, and then create another object with the
same parameters. Clone and copy the original object, and then compare
each object with the original using the Equals( ) method. Equals( )
returns true only when both references refer to the same object.

Is the second object the same as the original?    False
Is the object clone the same as the original?     False
Is the copied object the same as the original?    True
*/

// Example for the OperatingSystem::Clone method.
using namespace System;

// Copy, clone, and duplicate an OperatingSystem object.
void CopyOperatingSystemObjects()
{

   // The Version object does not need to correspond to an
   // actual OS version.
   Version^ verMMBVer = gcnew Version( 5,6,7,8 );
   OperatingSystem^ opCreate1 = gcnew OperatingSystem( PlatformID::Win32NT,verMMBVer );

   // Create another OperatingSystem object with the same
   // parameters as opCreate1.
   OperatingSystem^ opCreate2 = gcnew OperatingSystem( PlatformID::Win32NT,verMMBVer );

   // Clone opCreate1 and copy the opCreate1 reference.
   OperatingSystem^ opClone = safe_cast<OperatingSystem^>(opCreate1->Clone());
   OperatingSystem^ opCopy = opCreate1;

   // Compare the various objects for equality.
   Console::WriteLine( "{0,-50}{1}", "Is the second object the same as the original?", opCreate1->Equals( opCreate2 ) );
   Console::WriteLine( "{0,-50}{1}", "Is the object clone the same as the original?", opCreate1->Equals( opClone ) );
   Console::WriteLine( "{0,-50}{1}", "Is the copied object the same as the original?", opCreate1->Equals( opCopy ) );
}

int main()
{
   Console::WriteLine( "This example of OperatingSystem::Clone( ) "
   "generates the following output.\n" );
   Console::WriteLine( "Create an OperatingSystem object, and then "
   "create another object with the \n"
   "same parameters. Clone and copy the original "
   "object, and then compare \n"
   "each object with the original "
   "using the Equals( ) method. Equals( ) \n"
   "returns true only when both "
   "references refer to the same object.\n" );
   CopyOperatingSystemObjects();
}

/*
This example of OperatingSystem::Clone( ) generates the following output.

Create an OperatingSystem object, and then create another object with the
same parameters. Clone and copy the original object, and then compare
each object with the original using the Equals( ) method. Equals( )
returns true only when both references refer to the same object.

Is the second object the same as the original?    False
Is the object clone the same as the original?     False
Is the copied object the same as the original?    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OperatingSystem 类
OperatingSystem 成员
System 命名空间


OperatingSystem ..::.GetObjectData 方法

OperatingSystem
.
.
::
.
GetObjectData 方法
OperatingSystem 类

使用反序列化此实例所需的数据填充 System.Runtime.Serialization..::.SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要用序列化信息填充的对象。
context
类型： System.Runtime.Serialization StreamingContext
存储和检索序列化数据的位置。保留供将来使用。 存储和检索序列化数据的位置。保留供将来使用。

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

context 参数保留将来使用；GetObjectData 方法中当前未实现该参数。

有关更多信息，请参见 SerializationInfo..::.AddValue 方法。

  • SecurityPermission

    用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand 用于提供序列化服务。关联枚举：SerializationFormatter 安全操作：LinkDemand

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

OperatingSystem 类
OperatingSystem 成员
System 命名空间


OperatingSystem ..::.ToString 方法

OperatingSystem
.
.
::
.
ToString 方法
OperatingSystem 类

将此 OperatingSystem 对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
Platform、Version 和 ServicePack 属性的返回值的字符串表示形式。

下面的代码示例演示如何使用 ToString 方法显示 OperatingSystem 对象。

' Example for the OperatingSystem constructor and the
' OperatingSystem.ToString( ) method.
Imports System
Imports Microsoft.VisualBasic

Module OpSysConstructDemo

    ' Create and display an OperatingSystem object.
    Sub BuildOSObj( pID As PlatformID, ver As Version )

        Dim os As New OperatingSystem( pID, ver )

        Console.WriteLine( "   {0}", os.ToString( ) )
    End Sub

    Sub BuildOperatingSystemObjects( )

        ' The Version object does not need to correspond to an
        ' actual OS version.
        Dim verNull     As New Version( )
        Dim verMajMin   As New Version( 3, 11 )
        Dim verMMBld    As New Version( 5, 25, 625 )
        Dim verMMBVer   As New Version( 5, 6, 7, 8 )
        Dim verString   As New Version( "3.5.8.13" )

        ' All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull )
        BuildOSObj( PlatformID.Win32S, verMajMin )
        BuildOSObj( PlatformID.Win32Windows, verMMBld )
        BuildOSObj( PlatformID.WinCE, verMMBVer )
        BuildOSObj( PlatformID.Win32NT, verString )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the OperatingSystem constructor " & _
            "and " & vbCrLf & "OperatingSystem.ToString( ) " & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( _
            "Create and display several different " & _
            "OperatingSystem objects:" & vbCrLf )

        BuildOperatingSystemObjects( )

        Console.WriteLine(vbCrLf & _
            "The OS version of the host computer is: " & _
            vbCrLf & vbCrLf & "   {0}", _
            Environment.OSVersion.ToString( ) )
    End Sub
End Module

' This example of the OperatingSystem constructor and
' OperatingSystem.ToString( ) generates the following output.
'
' Create and display several different OperatingSystem objects:
'
'    Microsoft Windows NT 0.0
'    Microsoft Win32S 3.11
'    Microsoft Windows 98 5.25.625
'    Microsoft Windows CE 5.6.7.8
'    Microsoft Windows NT 3.5.8.13
'
' The OS version of the host computer is:
'
'    Microsoft Windows NT 5.1.2600.0

// Example for the OperatingSystem constructor and the
// OperatingSystem.ToString( ) method.
using System;

class OpSysConstructDemo
{
    // Create and display an OperatingSystem object.
    static void BuildOSObj( PlatformID pID, Version ver )
    {
        OperatingSystem os = new OperatingSystem( pID, ver );

        Console.WriteLine( "   {0}", os.ToString( ) );
    }

    static void BuildOperatingSystemObjects( )
    {
        // The Version object does not need to correspond to an
        // actual OS version.
        Version verNull     = new Version( );
        Version verMajMin   = new Version( 3, 11 );
        Version verMMBld    = new Version( 5, 25, 625 );
        Version verMMBVer   = new Version( 5, 6, 7, 8 );
        Version verString   = new Version( "3.5.8.13" );

        // All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull );
        BuildOSObj( PlatformID.Win32S, verMajMin );
        BuildOSObj( PlatformID.Win32Windows, verMMBld );
        BuildOSObj( PlatformID.WinCE, verMMBVer );
        BuildOSObj( PlatformID.Win32NT, verString );
    }

    public static void Main( )
    {
        Console.WriteLine(
            "This example of the OperatingSystem constructor " +
            "and \nOperatingSystem.ToString( ) " +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create and display several different " +
            "OperatingSystem objects:\n" );

        BuildOperatingSystemObjects( );

        Console.WriteLine(
            "\nThe OS version of the host computer is:\n\n   {0}",
            Environment.OSVersion.ToString( ) );
    }
}

/*
This example of the OperatingSystem constructor and
OperatingSystem.ToString( ) generates the following output.

Create and display several different OperatingSystem objects:

   Microsoft Windows NT 0.0
   Microsoft Win32S 3.11
   Microsoft Windows 98 5.25.625
   Microsoft Windows CE 5.6.7.8
   Microsoft Windows NT 3.5.8.13

The OS version of the host computer is:

   Microsoft Windows NT 5.1.2600.0
*/

// Example for the OperatingSystem constructor and the
// OperatingSystem::ToString( ) method.
using namespace System;

// Create and display an OperatingSystem object.
void BuildOSObj( PlatformID pID, Version^ ver )
{
   OperatingSystem^ os = gcnew OperatingSystem( pID,ver );
   Console::WriteLine( "   {0}", os->ToString() );
}

void BuildOperatingSystemObjects()
{

   // The Version object does not need to correspond to an
   // actual OS version.
   Version^ verNull = gcnew Version;
   Version^ verMajMin = gcnew Version( 3,11 );
   Version^ verMMBld = gcnew Version( 5,25,625 );
   Version^ verMMBVer = gcnew Version( 5,6,7,8 );
   Version^ verString = gcnew Version( "3.5.8.13" );

   // All PlatformID members are shown here.
   BuildOSObj( PlatformID::Win32NT, verNull );
   BuildOSObj( PlatformID::Win32S, verMajMin );
   BuildOSObj( PlatformID::Win32Windows, verMMBld );
   BuildOSObj( PlatformID::WinCE, verMMBVer );
   BuildOSObj( PlatformID::Win32NT, verString );
}

int main()
{
   Console::WriteLine( "This example of the OperatingSystem constructor and \n"
   "OperatingSystem::ToString( ) generates the following "
   "output.\n" );
   Console::WriteLine( "Create and display several different "
   "OperatingSystem objects:\n" );
   BuildOperatingSystemObjects();
   Console::WriteLine( "\nThe OS version of the host computer is:\n\n   {0}", Environment::OSVersion->ToString() );
}

/*
This example of the OperatingSystem constructor and
OperatingSystem::ToString( ) generates the following output.

Create and display several different OperatingSystem objects:

   Microsoft Windows NT 0.0
   Microsoft Win32S 3.11
   Microsoft Windows 98 5.25.625
   Microsoft Windows CE 5.6.7.8
   Microsoft Windows NT 3.5.8.13

The OS version of the host computer is:

   Microsoft Windows NT 5.1.2600.0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OperatingSystem 类
OperatingSystem 成员
System 命名空间
VersionString


OperatingSystem 属性

OperatingSystem 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperatingSystem 类

OperatingSystem 类型公开以下成员。

名称 说明
页首

参考

OperatingSystem 类
System 命名空间


OperatingSystem ..::.Platform 属性

OperatingSystem
.
.
::
.
Platform 属性
OperatingSystem 类

获取标识操作系统平台的 System..::.PlatformID 枚举值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Platform As PlatformID
    Get
public PlatformID Platform { get; }
public:
property PlatformID Platform {
    PlatformID get ();
}
member Platform : PlatformID

属性值

类型： System PlatformID
PlatformID 值之一。

下面的代码示例创建几个 OperatingSystem 对象并显示每个对象的 Platform 属性。

' Example for the OperatingSystem.Platform and
' OperatingSystem.Version properties.
Imports System
Imports Microsoft.VisualBasic

Module PlatformVersionDemo

    ' Create an OperatingSystem object, and display the Platform
    ' and Version properties.
    Sub BuildOSObj( pID As PlatformID, ver As Version )

        Dim opSys       As New OperatingSystem( pID, ver )
        Dim platform    As PlatformID = opSys.Platform
        Dim version     As Version = opSys.Version

        Console.WriteLine( "   Platform: {0,-15} Version: {1}", _
            platform, version )
    End Sub

    Sub BuildOperatingSystemObjects( )

        ' The Version object does not need to correspond to an
        ' actual OS version.
        Dim verNull     As New Version( )
        Dim verString   As New Version( "3.5.8.13" )
        Dim verMajMin   As New Version( 6, 10 )
        Dim verMMBld    As New Version( 5, 25, 5025 )
        Dim verMMBVer   As New Version( 5, 6, 7, 8 )

        ' All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull )
        BuildOSObj( PlatformID.Win32S, verString )
        BuildOSObj( PlatformID.Win32Windows, verMajMin )
        BuildOSObj( PlatformID.WinCE, verMMBld )
        BuildOSObj( PlatformID.Win32NT, verMMBVer )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of OperatingSystem.Platform " & _
            "and OperatingSystem.Version " & vbCrLf & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( _
            "Create several OperatingSystem objects " & _
            "and display their properties:" & vbCrLf )

        BuildOperatingSystemObjects( )

        Console.WriteLine(vbCrLf & _
            "The operating system of the host computer is: " & _
            vbCrLf )

        BuildOSObj( _
            Environment.OSVersion.Platform, _
            Environment.OSVersion.Version )
    End Sub
End Module

' This example of OperatingSystem.Platform and OperatingSystem.Version
' generates the following output.
'
' Create several OperatingSystem objects and display their properties:
'
'    Platform: Win32NT         Version: 0.0
'    Platform: Win32S          Version: 3.5.8.13
'    Platform: Win32Windows    Version: 6.10
'    Platform: WinCE           Version: 5.25.5025
'    Platform: Win32NT         Version: 5.6.7.8
'
' The operating system of the host computer is:
'
'    Platform: Win32NT         Version: 5.1.2600.0

// Example for the OperatingSystem.Platform and
// OperatingSystem.Version properties.
using System;

class PlatformVersionDemo
{
    // Create an OperatingSystem object and display the Platform
    // and Version properties.
    static void BuildOSObj( PlatformID pID, Version ver )
    {
        OperatingSystem opSys   = new OperatingSystem( pID, ver );
        PlatformID platform     = opSys.Platform;
        Version version         = opSys.Version;

        Console.WriteLine( "   Platform: {0,-15} Version: {1}",
            platform, version );
    }

    static void BuildOperatingSystemObjects( )
    {
        // The Version object does not need to correspond to an
        // actual OS version.
        Version verNull     = new Version( );
        Version verString   = new Version( "3.5.8.13" );
        Version verMajMin   = new Version( 6, 10 );
        Version verMMBld    = new Version( 5, 25, 5025 );
        Version verMMBVer   = new Version( 5, 6, 7, 8 );

        // All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull );
        BuildOSObj( PlatformID.Win32S, verString );
        BuildOSObj( PlatformID.Win32Windows, verMajMin );
        BuildOSObj( PlatformID.WinCE, verMMBld );
        BuildOSObj( PlatformID.Win32NT, verMMBVer );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of OperatingSystem.Platform " +
            "and OperatingSystem.Version \n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create several OperatingSystem objects " +
            "and display their properties:\n" );

        BuildOperatingSystemObjects( );

        Console.WriteLine(
            "\nThe operating system of the host computer is:\n" );

        BuildOSObj(
            Environment.OSVersion.Platform,
            Environment.OSVersion.Version );
    }
}

/*
This example of OperatingSystem.Platform and OperatingSystem.Version
generates the following output.

Create several OperatingSystem objects and display their properties:

Platform: Win32NT         Version: 0.0
Platform: Win32S          Version: 3.5.8.13
Platform: Win32Windows    Version: 6.10
Platform: WinCE           Version: 5.25.5025
Platform: Win32NT         Version: 5.6.7.8

The operating system of the host computer is:

Platform: Win32NT         Version: 5.1.2600.0
*/

// Example for the OperatingSystem.Platform and
// OperatingSystem.Version properties.
using namespace System;

// Create an OperatingSystem object and display the Platform
// and Version properties.
void BuildOSObj( PlatformID pID, Version^ ver )
{
   OperatingSystem^ opSys = gcnew OperatingSystem( pID,ver );
   PlatformID platform = opSys->Platform;
   Version^ version = opSys->Version;
   Console::WriteLine( "   Platform: {0,-15} Version: {1}", platform, version );
}

void BuildOperatingSystemObjects()
{

   // The Version object does not need to correspond to an
   // actual OS version.
   Version^ verNull = gcnew Version;
   Version^ verString = gcnew Version( "3.5.8.13" );
   Version^ verMajMin = gcnew Version( 6,10 );
   Version^ verMMBld = gcnew Version( 5,25,5025 );
   Version^ verMMBVer = gcnew Version( 5,6,7,8 );

   // All PlatformID members are shown here.
   BuildOSObj( PlatformID::Win32NT, verNull );
   BuildOSObj( PlatformID::Win32S, verString );
   BuildOSObj( PlatformID::Win32Windows, verMajMin );
   BuildOSObj( PlatformID::WinCE, verMMBld );
   BuildOSObj( PlatformID::Win32NT, verMMBVer );
}

int main()
{
   Console::WriteLine( "This example of OperatingSystem::Platform "
   "and OperatingSystem::Version \n"
   "generates the following output.\n" );
   Console::WriteLine( "Create several OperatingSystem objects "
   "and display their properties:\n" );
   BuildOperatingSystemObjects();
   Console::WriteLine( "\nThe operating system of the host computer is:\n" );
   BuildOSObj( Environment::OSVersion->Platform, Environment::OSVersion->Version );
}

/*
This example of OperatingSystem::Platform and OperatingSystem::Version
generates the following output.

Create several OperatingSystem objects and display their properties:

   Platform: Win32NT         Version: 0.0
   Platform: Win32S          Version: 3.5.8.13
   Platform: Win32Windows    Version: 6.10
   Platform: WinCE           Version: 5.25.5025
   Platform: Win32NT         Version: 5.6.7.8

The operating system of the host computer is:

   Platform: Win32NT         Version: 5.1.2600.0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OperatingSystem 类
OperatingSystem 成员
System 命名空间


OperatingSystem ..::.ServicePack 属性

OperatingSystem
.
.
::
.
ServicePack 属性
OperatingSystem 类

获取此 OperatingSystem 对象表示的 Service Pack 版本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ServicePack As String
    Get
public string ServicePack { get; }
public:
property String^ ServicePack {
    String^ get ();
}
member ServicePack : string

属性值

类型： System String
如果支持 Service Pack 并至少安装了一个 Service Pack，则为该 Service Pack 版本；否则为空字符串 ("")。

Service Pack 用于分发它所安装于的操作系统的软件更新。但是，不是所有操作系统都使用 Service Pack。 Service Pack 用于分发它所安装于的操作系统的软件更新。但是，不是所有操作系统都使用 Service Pack。

Service Pack 版本（如果可用）已正确设置了显示格式。

下面的代码示例演示了 ServicePack 属性。

' This example demonstrates the OperatingSystem.ServicePack property.
Imports System

Class Sample
   Public Shared Sub Main()
      Dim os As OperatingSystem = Environment.OSVersion
      Console.WriteLine("Service pack version = ""{0}""", os.ServicePack)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Service pack version = "Service Pack 1"
'

// This example demonstrates the OperatingSystem.ServicePack property.
using System;

class Sample
{
    public static void Main()
    {
    OperatingSystem os = Environment.OSVersion;
    String sp = os.ServicePack;
    Console.WriteLine("Service pack version = \"{0}\"", sp);
    }
}
/*
This example produces the following results:

Service pack version = "Service Pack 1"

*/

// This example demonstrates the OperatingSystem.ServicePack property.
using namespace System;
int main()
{
   OperatingSystem^ os = Environment::OSVersion;
   String^ sp = os->ServicePack;
   Console::WriteLine( "Service pack version = \"{0}\"", sp );
}

/*
This example produces the following results:

Service pack version = "Service Pack 1"

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

OperatingSystem 类
OperatingSystem 成员
System 命名空间
Empty


OperatingSystem ..::.Version 属性

OperatingSystem
.
.
::
.
Version 属性
OperatingSystem 类

获取标识操作系统的 System..::.Version 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Version As Version
    Get
public Version Version { get; }
public:
property Version^ Version {
    Version^ get ();
}
member Version : Version

属性值

类型： System Version
Version 对象，描述操作系统的主版本号、次版本号、内部版本号和修订版本号。

下面的代码示例创建几个 OperatingSystem 对象并显示每个对象的 Version 属性。

' Example for the OperatingSystem.Platform and
' OperatingSystem.Version properties.
Imports System
Imports Microsoft.VisualBasic

Module PlatformVersionDemo

    ' Create an OperatingSystem object, and display the Platform
    ' and Version properties.
    Sub BuildOSObj( pID As PlatformID, ver As Version )

        Dim opSys       As New OperatingSystem( pID, ver )
        Dim platform    As PlatformID = opSys.Platform
        Dim version     As Version = opSys.Version

        Console.WriteLine( "   Platform: {0,-15} Version: {1}", _
            platform, version )
    End Sub

    Sub BuildOperatingSystemObjects( )

        ' The Version object does not need to correspond to an
        ' actual OS version.
        Dim verNull     As New Version( )
        Dim verString   As New Version( "3.5.8.13" )
        Dim verMajMin   As New Version( 6, 10 )
        Dim verMMBld    As New Version( 5, 25, 5025 )
        Dim verMMBVer   As New Version( 5, 6, 7, 8 )

        ' All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull )
        BuildOSObj( PlatformID.Win32S, verString )
        BuildOSObj( PlatformID.Win32Windows, verMajMin )
        BuildOSObj( PlatformID.WinCE, verMMBld )
        BuildOSObj( PlatformID.Win32NT, verMMBVer )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of OperatingSystem.Platform " & _
            "and OperatingSystem.Version " & vbCrLf & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( _
            "Create several OperatingSystem objects " & _
            "and display their properties:" & vbCrLf )

        BuildOperatingSystemObjects( )

        Console.WriteLine(vbCrLf & _
            "The operating system of the host computer is: " & _
            vbCrLf )

        BuildOSObj( _
            Environment.OSVersion.Platform, _
            Environment.OSVersion.Version )
    End Sub
End Module

' This example of OperatingSystem.Platform and OperatingSystem.Version
' generates the following output.
'
' Create several OperatingSystem objects and display their properties:
'
'    Platform: Win32NT         Version: 0.0
'    Platform: Win32S          Version: 3.5.8.13
'    Platform: Win32Windows    Version: 6.10
'    Platform: WinCE           Version: 5.25.5025
'    Platform: Win32NT         Version: 5.6.7.8
'
' The operating system of the host computer is:
'
'    Platform: Win32NT         Version: 5.1.2600.0

// Example for the OperatingSystem.Platform and
// OperatingSystem.Version properties.
using System;

class PlatformVersionDemo
{
    // Create an OperatingSystem object and display the Platform
    // and Version properties.
    static void BuildOSObj( PlatformID pID, Version ver )
    {
        OperatingSystem opSys   = new OperatingSystem( pID, ver );
        PlatformID platform     = opSys.Platform;
        Version version         = opSys.Version;

        Console.WriteLine( "   Platform: {0,-15} Version: {1}",
            platform, version );
    }

    static void BuildOperatingSystemObjects( )
    {
        // The Version object does not need to correspond to an
        // actual OS version.
        Version verNull     = new Version( );
        Version verString   = new Version( "3.5.8.13" );
        Version verMajMin   = new Version( 6, 10 );
        Version verMMBld    = new Version( 5, 25, 5025 );
        Version verMMBVer   = new Version( 5, 6, 7, 8 );

        // All PlatformID members are shown here.
        BuildOSObj( PlatformID.Win32NT, verNull );
        BuildOSObj( PlatformID.Win32S, verString );
        BuildOSObj( PlatformID.Win32Windows, verMajMin );
        BuildOSObj( PlatformID.WinCE, verMMBld );
        BuildOSObj( PlatformID.Win32NT, verMMBVer );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of OperatingSystem.Platform " +
            "and OperatingSystem.Version \n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create several OperatingSystem objects " +
            "and display their properties:\n" );

        BuildOperatingSystemObjects( );

        Console.WriteLine(
            "\nThe operating system of the host computer is:\n" );

        BuildOSObj(
            Environment.OSVersion.Platform,
            Environment.OSVersion.Version );
    }
}

/*
This example of OperatingSystem.Platform and OperatingSystem.Version
generates the following output.

Create several OperatingSystem objects and display their properties:

Platform: Win32NT         Version: 0.0
Platform: Win32S          Version: 3.5.8.13
Platform: Win32Windows    Version: 6.10
Platform: WinCE           Version: 5.25.5025
Platform: Win32NT         Version: 5.6.7.8

The operating system of the host computer is:

Platform: Win32NT         Version: 5.1.2600.0
*/

// Example for the OperatingSystem.Platform and
// OperatingSystem.Version properties.
using namespace System;

// Create an OperatingSystem object and display the Platform
// and Version properties.
void BuildOSObj( PlatformID pID, Version^ ver )
{
   OperatingSystem^ opSys = gcnew OperatingSystem( pID,ver );
   PlatformID platform = opSys->Platform;
   Version^ version = opSys->Version;
   Console::WriteLine( "   Platform: {0,-15} Version: {1}", platform, version );
}

void BuildOperatingSystemObjects()
{

   // The Version object does not need to correspond to an
   // actual OS version.
   Version^ verNull = gcnew Version;
   Version^ verString = gcnew Version( "3.5.8.13" );
   Version^ verMajMin = gcnew Version( 6,10 );
   Version^ verMMBld = gcnew Version( 5,25,5025 );
   Version^ verMMBVer = gcnew Version( 5,6,7,8 );

   // All PlatformID members are shown here.
   BuildOSObj( PlatformID::Win32NT, verNull );
   BuildOSObj( PlatformID::Win32S, verString );
   BuildOSObj( PlatformID::Win32Windows, verMajMin );
   BuildOSObj( PlatformID::WinCE, verMMBld );
   BuildOSObj( PlatformID::Win32NT, verMMBVer );
}

int main()
{
   Console::WriteLine( "This example of OperatingSystem::Platform "
   "and OperatingSystem::Version \n"
   "generates the following output.\n" );
   Console::WriteLine( "Create several OperatingSystem objects "
   "and display their properties:\n" );
   BuildOperatingSystemObjects();
   Console::WriteLine( "\nThe operating system of the host computer is:\n" );
   BuildOSObj( Environment::OSVersion->Platform, Environment::OSVersion->Version );
}

/*
This example of OperatingSystem::Platform and OperatingSystem::Version
generates the following output.

Create several OperatingSystem objects and display their properties:

   Platform: Win32NT         Version: 0.0
   Platform: Win32S          Version: 3.5.8.13
   Platform: Win32Windows    Version: 6.10
   Platform: WinCE           Version: 5.25.5025
   Platform: Win32NT         Version: 5.6.7.8

The operating system of the host computer is:

   Platform: Win32NT         Version: 5.1.2600.0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OperatingSystem 类
OperatingSystem 成员
System 命名空间


OperatingSystem ..::.VersionString 属性

OperatingSystem
.
.
::
.
VersionString 属性
OperatingSystem 类

获取平台标识符、版本和当前安装在操作系统上的 Service Pack 的连接字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property VersionString As String
    Get
public string VersionString { get; }
public:
property String^ VersionString {
    String^ get ();
}
member VersionString : string

属性值

类型： System String
Platform、Version 和 ServicePack 属性的返回值的字符串表示形式。

默认情况下，VersionString 的返回值与 ToString 方法的返回值相同。但是，.NET Framework 在其他平台上的实现可能返回更适合该平台的字符串。 默认情况下，VersionString 的返回值与 ToString 方法的返回值相同。但是，.NET Framework 在其他平台上的实现可能返回更适合该平台的字符串。

下面的代码示例演示了 VersionString 属性。

' This example demonstrates the VersionString property.
Imports System

Class Sample
   Public Shared Sub Main()
      Dim os As OperatingSystem = Environment.OSVersion

' Display the value of OperatingSystem.VersionString. By default, this is
' the same value as OperatingSystem.ToString.

      Console.WriteLine("This operating system is {0}", os.VersionString)

   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'This operating system is Microsoft Windows NT 5.1.2600.0 Service Pack 1

// This example demonstrates the VersionString property.
using System;

class Sample
{
    public static void Main()
    {
    OperatingSystem os = Environment.OSVersion;
// Display the value of OperatingSystem.VersionString. By default, this is
// the same value as OperatingSystem.ToString.
    Console.WriteLine("This operating system is {0}", os.VersionString);
    }
}
/*
This example produces the following results:

This operating system is Microsoft Windows NT 5.1.2600.0 Service Pack 1
*/

// This example demonstrates the VersionString property.
using namespace System;
int main()
{
   OperatingSystem^ os = Environment::OSVersion;

   // Display the value of OperatingSystem.VersionString. By default, this is
   // the same value as OperatingSystem.ToString.
   Console::WriteLine( L"This operating system is {0}", os->VersionString );
   return 0;
}

/*
This example produces the following results:

This operating system is Microsoft Windows NT 5.1.2600.0 Service Pack 1
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

OperatingSystem 类
OperatingSystem 成员
System 命名空间
ToString


OperationCanceledException 类

OperationCanceledException 类
成员

取消线程正在执行的操作时在线程中引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class OperationCanceledException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class OperationCanceledException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class OperationCanceledException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type OperationCanceledException =
    class
        inherit SystemException
    end

如果取消的任务有关联的取消标记，则它由 CancellationToken 属性返回，并且标记的 CancellationToken..::.IsCancellationRequested 属性设置为 true。

System System..::.OperationCanceledExceptionOperationCanceledException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

OperationCanceledException 成员
System 命名空间
Exception

其他资源

处理和引发异常


OperationCanceledException 成员

OperationCanceledException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperationCanceledException 类

取消线程正在执行的操作时在线程中引发的异常。

OperationCanceledException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OperationCanceledException 类
System 命名空间


OperationCanceledException 构造函数

OperationCanceledException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperationCanceledException 类

初始化 OperationCanceledException 类的新实例。

名称 说明
页首

参考

OperationCanceledException 类
OperationCanceledException 成员
System 命名空间


OperationCanceledException 构造函数

OperationCanceledException 构造函数
OperationCanceledException 类

用系统提供的错误信息初始化 OperationCanceledException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public OperationCanceledException()
public:
OperationCanceledException()
new : unit -> OperationCanceledException

此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“该操作已取消。”此消息将考虑当前系统区域性。

下表显示 OperationCanceledException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。
CancellationToken | 在不取消状态中创建的取消标记。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

OperationCanceledException 类
OperationCanceledException 成员
OperationCanceledException 重载
System 命名空间
Exception

其他资源

处理和引发异常


OperationCanceledException 构造函数 (CancellationToken)

OperationCanceledException 构造函数 (CancellationToken)
OperationCanceledException 类

用取消令牌初始化 OperationCanceledException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    token As CancellationToken _
)
public OperationCanceledException(
    CancellationToken token
)
public:
OperationCanceledException(
    CancellationToken token
)
new :
        token:CancellationToken -> OperationCanceledException

参数

token
类型： System.Threading CancellationToken
一个与已取消的操作关联的取消标记。

此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“该操作已取消。”此消息将考虑当前系统区域性。

下表显示 OperationCanceledException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。
CancellationToken | token.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

OperationCanceledException 类
OperationCanceledException 成员
OperationCanceledException 重载
System 命名空间
Exception

其他资源

处理和引发异常


OperationCanceledException 构造函数 (String)

OperationCanceledException 构造函数 (String)
OperationCanceledException 类

用指定的错误信息初始化 OperationCanceledException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public OperationCanceledException(
    string message
)
public:
OperationCanceledException(
    String^ message
)
new :
        message:string -> OperationCanceledException

参数

message
类型： System String
描述该错误的 String。

message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 OperationCanceledException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。
CancellationToken | 在不取消状态中创建的取消标记。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

OperationCanceledException 类
OperationCanceledException 成员
OperationCanceledException 重载
System 命名空间
Exception

其他资源

处理和引发异常


OperationCanceledException 构造函数 (SerializationInfo, StreamingContext)

OperationCanceledException 构造函数 (SerializationInfo, StreamingContext)
OperationCanceledException 类

用序列化数据初始化 OperationCanceledException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected OperationCanceledException(
    SerializationInfo info,
    StreamingContext context
)
protected:
OperationCanceledException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> OperationCanceledException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见XML and SOAP Serialization 在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见XML and SOAP Serialization

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

OperationCanceledException 类
OperationCanceledException 成员
OperationCanceledException 重载
System 命名空间

其他资源

XML and SOAP Serialization


OperationCanceledException 构造函数 (String, Exception)

OperationCanceledException 构造函数 (String, Exception)
OperationCanceledException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 OperationCanceledException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public OperationCanceledException(
    string message,
    Exception innerException
)
public:
OperationCanceledException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> OperationCanceledException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 OperationCanceledException 实例的初始属性值。

属性类型 | 条件
InnerException | innerException.
Message | message.
CancellationToken | 在不取消状态中创建的取消标记。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

OperationCanceledException 类
OperationCanceledException 成员
OperationCanceledException 重载
System 命名空间
Exception

其他资源

处理和引发异常


OperationCanceledException 构造函数 (String, CancellationToken)

OperationCanceledException 构造函数 (String, CancellationToken)
OperationCanceledException 类

使用指定的错误信息和取消令牌初始化 OperationCanceledException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    token As CancellationToken _
)
public OperationCanceledException(
    string message,
    CancellationToken token
)
public:
OperationCanceledException(
    String^ message,
    CancellationToken token
)
new :
        message:string *
        token:CancellationToken -> OperationCanceledException

参数

message
类型： System String
用于解释异常原因的错误消息。
token
类型： System.Threading CancellationToken
一个与已取消的操作关联的取消标记。

message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 OperationCanceledException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | message.
CancellationToken | token.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

OperationCanceledException 类
OperationCanceledException 成员
OperationCanceledException 重载
System 命名空间
Exception

其他资源

处理和引发异常


OperationCanceledException 构造函数 (String, Exception, CancellationToken)

OperationCanceledException 构造函数 (String, Exception, CancellationToken)
OperationCanceledException 类

用指定的错误消息、对作为此异常原因的内部异常的引用以及取消令牌初始化 OperationCanceledException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception, _
    token As CancellationToken _
)
public OperationCanceledException(
    string message,
    Exception innerException,
    CancellationToken token
)
public:
OperationCanceledException(
    String^ message,
    Exception^ innerException,
    CancellationToken token
)
new :
        message:string *
        innerException:Exception *
        token:CancellationToken -> OperationCanceledException

参数

message
类型： System String
用于解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。
token
类型： System.Threading CancellationToken
一个与已取消的操作关联的取消标记。

message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为前一个异常的直接结果而引发的异常应在 InnerException 属性中包括对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 OperationCanceledException 实例的初始属性值。

下表显示 OperationCanceledException 实例的初始属性值。

属性类型 | 条件
InnerException | innerException.
Message | message.
CancellationToken | token.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

OperationCanceledException 类
OperationCanceledException 成员
OperationCanceledException 重载
System 命名空间
Exception

其他资源

处理和引发异常


OperationCanceledException 方法

OperationCanceledException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperationCanceledException 类

OperationCanceledException 类型公开以下成员。

名称 说明
页首

参考

OperationCanceledException 类
System 命名空间


OperationCanceledException 属性

OperationCanceledException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperationCanceledException 类

OperationCanceledException 类型公开以下成员。

名称 说明
页首

参考

OperationCanceledException 类
System 命名空间


OperationCanceledException ..::.CancellationToken 属性

OperationCanceledException
.
.
::
.
CancellationToken 属性
OperationCanceledException 类

获取与已取消的操作关联的令牌。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Property CancellationToken As CancellationToken
    Get
    Private Set
public CancellationToken CancellationToken { get; private set; }
public:
property CancellationToken CancellationToken {
    CancellationToken get ();
    private: void set (CancellationToken value);
}
member CancellationToken : CancellationToken with get, private set

属性值

类型： System.Threading CancellationToken
与已取消的操作关联的令牌，或默认令牌。

如果标记与已取消的操作相关联，则该标记的 CancellationToken..::.IsCancellationRequested 属性返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

OperationCanceledException 类
OperationCanceledException 成员
System 命名空间


OperationCanceledException 事件

OperationCanceledException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperationCanceledException 类

OperationCanceledException 类型公开以下成员。

名称 说明
页首

参考

OperationCanceledException 类
System 命名空间


OutOfMemoryException 类

OutOfMemoryException 类
成员

没有足够的内存继续执行程序时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class OutOfMemoryException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class OutOfMemoryException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class OutOfMemoryException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type OutOfMemoryException =
    class
        inherit SystemException
    end

下面的 Microsoft 中间语言 (MSIL) 指令引发 OutOfMemoryException：

  • box

  • newarr

  • newobj

OutOfMemoryException 使用值为 0x8007000E 的 HRESULT COR_E_OUTOFMEMORY。

有关 OutOfMemoryException 实例的初始属性值列表，请参见 OutOfMemoryException 构造函数。

说明 说明

继承的 Data 属性的值始终是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

System System..::.OutOfMemoryExceptionOutOfMemoryException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OutOfMemoryException 成员
System 命名空间
Exception

其他资源

处理和引发异常


OutOfMemoryException 成员

OutOfMemoryException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OutOfMemoryException 类

没有足够的内存继续执行程序时引发的异常。

OutOfMemoryException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OutOfMemoryException 类
System 命名空间


OutOfMemoryException 构造函数

OutOfMemoryException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OutOfMemoryException 类

初始化 OutOfMemoryException 类的一个新实例。

名称 说明
页首

参考

OutOfMemoryException 类
OutOfMemoryException 成员
System 命名空间


OutOfMemoryException 构造函数

OutOfMemoryException 构造函数
OutOfMemoryException 类

初始化 OutOfMemoryException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public OutOfMemoryException()
public:
OutOfMemoryException()
new : unit -> OutOfMemoryException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“内存不足，无法继续执行程序。”。此消息将考虑当前系统区域性。

下表显示 OutOfMemoryException 实例的初始属性值。

Property | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OutOfMemoryException 类
OutOfMemoryException 成员
OutOfMemoryException 重载
System 命名空间


OutOfMemoryException 构造函数 (String)

OutOfMemoryException 构造函数 (String)
OutOfMemoryException 类

使用指定错误消息初始化 OutOfMemoryException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public OutOfMemoryException(
    string message
)
public:
OutOfMemoryException(
    String^ message
)
new :
        message:string -> OutOfMemoryException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为人所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 OutOfMemoryException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OutOfMemoryException 类
OutOfMemoryException 成员
OutOfMemoryException 重载
System 命名空间


OutOfMemoryException 构造函数 (SerializationInfo, StreamingContext)

OutOfMemoryException 构造函数 (SerializationInfo, StreamingContext)
OutOfMemoryException 类

用序列化数据初始化 OutOfMemoryException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected OutOfMemoryException(
    SerializationInfo info,
    StreamingContext context
)
protected:
OutOfMemoryException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> OutOfMemoryException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。 在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见[<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

OutOfMemoryException 类
OutOfMemoryException 成员
OutOfMemoryException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


OutOfMemoryException 构造函数 (String, Exception)

OutOfMemoryException 构造函数 (String, Exception)
OutOfMemoryException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 OutOfMemoryException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public OutOfMemoryException(
    string message,
    Exception innerException
)
public:
OutOfMemoryException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> OutOfMemoryException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 OutOfMemoryException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OutOfMemoryException 类
OutOfMemoryException 成员
OutOfMemoryException 重载
System 命名空间
Exception

其他资源

处理和引发异常


OutOfMemoryException 方法

OutOfMemoryException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OutOfMemoryException 类

OutOfMemoryException 类型公开以下成员。

名称 说明
页首

参考

OutOfMemoryException 类
System 命名空间


OutOfMemoryException 属性

OutOfMemoryException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OutOfMemoryException 类

OutOfMemoryException 类型公开以下成员。

名称 说明
页首

参考

OutOfMemoryException 类
System 命名空间


OutOfMemoryException 事件

OutOfMemoryException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OutOfMemoryException 类

OutOfMemoryException 类型公开以下成员。

名称 说明
页首

参考

OutOfMemoryException 类
System 命名空间


OverflowException 类

OverflowException 类
成员

在选中的上下文中所进行的算术运算、类型转换或转换操作导致溢出时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class OverflowException _
    Inherits ArithmeticException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class OverflowException : ArithmeticException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class OverflowException : public ArithmeticException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type OverflowException =
    class
        inherit ArithmeticException
    end

当出现以下情况时，将在运行时引发 OverflowException：

  • 算术运算产生的结果超出由运算返回的数据类型的范围。下面的示例说明了由溢出 OverflowException 类型界限的乘法运算引发的 Int32。 算术运算产生的结果超出由运算返回的数据类型的范围。下面的示例说明了由溢出 OverflowException 类型界限的乘法运算引发的 Int32。

    Dim value As Integer = 780000000
Try
   ' Square the original value.
   Dim square As Integer = value * value
   Console.WriteLine("{0} ^ 3 = {1}", value, square)
Catch e As OverflowException
   Dim square As Double = Math.Pow(value, 2)
   Console.WriteLine("Exception: {0} > {1:E}.", _
                     square, Int32.MaxValue)
End Try
' The example displays the following output:
'       Exception: 6.084E+17 > 2.147484E+009.

    int value = 780000000;
checked {
try {
   // Square the original value.
   int square = value * value;
   Console.WriteLine("{0} ^ 3 = {1}", value, square);
}
catch (OverflowException) {
   double square = Math.Pow(value, 2);
   Console.WriteLine("Exception: {0} > {1:E}.",
                     square, Int32.MaxValue);
} }
// The example displays the following output:
//       Exception: 6.084E+17 > 2.147484E+009.

  • 强制转换或转换操作尝试执行收缩转换，并且源数据类型的值超出了目标数据类型的范围。下面的示例说明了由将较大的无符号字节值转换为有符号字节值的尝试引发的 OverflowException。 强制转换或转换操作尝试执行收缩转换，并且源数据类型的值超出了目标数据类型的范围。下面的示例说明了由将较大的无符号字节值转换为有符号字节值的尝试引发的 OverflowException。

    Dim value As Byte = 241
Try
   Dim newValue As SByte = (CSByte(value))
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.", _
                     value.GetType().Name, value, _
                     newValue.GetType().Name, newValue)
Catch e As OverflowException
   Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue)
End Try
' The example displays the following output:
'       Exception: 241 > 127.

    byte value = 241;
checked {
try {
   sbyte newValue = (sbyte) value;
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     value.GetType().Name, value,
                     newValue.GetType().Name, newValue);
}
catch (OverflowException) {
   Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue);
} }
// The example displays the following output:
//       Exception: 241 > 127.

在每种情况下，运算的结果都是小于运算结果数据类型的 MinValue 属性或大于运算结果数据类型的 MaxValue 属性的值。

要使算术运算、强制转换操作或转换操作引发 OverflowException，操作必须发生在所检查的上下文中。默认情况下，在 Visual Basic 中会检查数学运算和溢出；在 C# 中不检查数学运算和溢出。如果操作发生在未检查的上下文中，计算的结果被截断，放弃不适合目标类型的任何高序位。下面的示例说明了 C# 中这样的未检查转换。它在未检查的上下文中重复前面的示例。 要使算术运算、强制转换操作或转换操作引发 OverflowException，操作必须发生在所检查的上下文中。默认情况下，在 Visual Basic 中会检查数学运算和溢出；在 C# 中不检查数学运算和溢出。如果操作发生在未检查的上下文中，计算的结果被截断，放弃不适合目标类型的任何高序位。下面的示例说明了 C# 中这样的未检查转换。它在未检查的上下文中重复前面的示例。 要使算术运算、强制转换操作或转换操作引发 OverflowException，操作必须发生在所检查的上下文中。默认情况下，在 Visual Basic 中会检查数学运算和溢出；在 C# 中不检查数学运算和溢出。如果操作发生在未检查的上下文中，计算的结果被截断，放弃不适合目标类型的任何高序位。下面的示例说明了 C# 中这样的未检查转换。它在未检查的上下文中重复前面的示例。 要使算术运算、强制转换操作或转换操作引发 OverflowException，操作必须发生在所检查的上下文中。默认情况下，在 Visual Basic 中会检查数学运算和溢出；在 C# 中不检查数学运算和溢出。如果操作发生在未检查的上下文中，计算的结果被截断，放弃不适合目标类型的任何高序位。下面的示例说明了 C# 中这样的未检查转换。它在未检查的上下文中重复前面的示例。 要使算术运算、强制转换操作或转换操作引发 OverflowException，操作必须发生在所检查的上下文中。默认情况下，在 Visual Basic 中会检查数学运算和溢出；在 C# 中不检查数学运算和溢出。如果操作发生在未检查的上下文中，计算的结果被截断，放弃不适合目标类型的任何高序位。下面的示例说明了 C# 中这样的未检查转换。它在未检查的上下文中重复前面的示例。

byte value = 241;
try {
   sbyte newValue = (sbyte) value;
   Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
                     value.GetType().Name, value,
                     newValue.GetType().Name, newValue);
}
catch (OverflowException) {
   Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue);
}
// The example displays the following output:
//       Converted the Byte value 241 to the SByte value -15.

下面的 Microsoft 中间语言 (MSIL) 指令引发 OverflowException：

  • add.ovf. <已签名>

  • conv.ovf. <目标类型>

  • conv.ovf. <目标类型>.un

  • mul.ovf. <类型>

  • sub.ovf. <类型>

  • newarr

OverflowException 使用值为 0x80131516 的 HRESULT COR_E_OVERFLOW。

有关 OverflowException 实例的初始属性值列表，请参见 OverflowException 构造函数。

System System..::.OverflowExceptionOverflowException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OverflowException 成员
System 命名空间
Exception

其他资源

处理和引发异常


OverflowException 成员

OverflowException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OverflowException 类

在选中的上下文中所进行的算术运算、类型转换或转换操作导致溢出时引发的异常。

OverflowException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OverflowException 类
System 命名空间


OverflowException 构造函数

OverflowException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OverflowException 类

初始化 OverflowException 类的新实例。

名称 说明
页首

参考

OverflowException 类
OverflowException 成员
System 命名空间


OverflowException 构造函数

OverflowException 构造函数
OverflowException 类

初始化 OverflowException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public OverflowException()
public:
OverflowException()
new : unit -> OverflowException

下表显示 OverflowException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OverflowException 类
OverflowException 成员
OverflowException 重载
System 命名空间


OverflowException 构造函数 (String)

OverflowException 构造函数 (String)
OverflowException 类

使用指定错误信息初始化 OverflowException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public OverflowException(
    string message
)
public:
OverflowException(
    String^ message
)
new :
        message:string -> OverflowException

参数

message
类型： System String
描述错误的消息。

message 的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 OverflowException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OverflowException 类
OverflowException 成员
OverflowException 重载
System 命名空间


OverflowException 构造函数 (SerializationInfo, StreamingContext)

OverflowException 构造函数 (SerializationInfo, StreamingContext)
OverflowException 类

用序列化数据初始化 OverflowException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected OverflowException(
    SerializationInfo info,
    StreamingContext context
)
protected:
OverflowException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> OverflowException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

OverflowException 类
OverflowException 成员
OverflowException 重载
System 命名空间


OverflowException 构造函数 (String, Exception)

OverflowException 构造函数 (String, Exception)
OverflowException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 OverflowException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public OverflowException(
    string message,
    Exception innerException
)
public:
OverflowException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> OverflowException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 OverflowException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

OverflowException 类
OverflowException 成员
OverflowException 重载
System 命名空间
Exception

其他资源

处理和引发异常


OverflowException 方法

OverflowException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OverflowException 类

OverflowException 类型公开以下成员。

名称 说明
页首

参考

OverflowException 类
System 命名空间


OverflowException 属性

OverflowException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OverflowException 类

OverflowException 类型公开以下成员。

名称 说明
页首

参考

OverflowException 类
System 命名空间


OverflowException 事件

OverflowException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OverflowException 类

OverflowException 类型公开以下成员。

名称 说明
页首

参考

OverflowException 类
System 命名空间


ParamArrayAttribute 类

ParamArrayAttribute 类
成员

指示方法在调用中将允许参数的数目可变。此类不能被继承。 指示方法在调用中将允许参数的数目可变。此类不能被继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Parameter, Inherited := True, AllowMultiple := False)> _
Public NotInheritable Class ParamArrayAttribute _
    Inherits Attribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)]
public sealed class ParamArrayAttribute : Attribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::Parameter, Inherited = true, AllowMultiple = false)]
public ref class ParamArrayAttribute sealed : public Attribute
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
[<AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)>]
type ParamArrayAttribute =
    class
        inherit Attribute
    end

ParamArrayAttribute 指示方法参数是参数数组。参数数组允许指定未知的参数数目。参数数组必须是形参表中的最后一个参数，并且必须是一维数组。调用方法时，参数数组允许用下列两种方式之一来指定方法的参数： ParamArrayAttribute 指示方法参数是参数数组。参数数组允许指定未知的参数数目。参数数组必须是形参表中的最后一个参数，并且必须是一维数组。调用方法时，参数数组允许用下列两种方式之一来指定方法的参数： ParamArrayAttribute 指示方法参数是参数数组。参数数组允许指定未知的参数数目。参数数组必须是形参表中的最后一个参数，并且必须是一维数组。调用方法时，参数数组允许用下列两种方式之一来指定方法的参数： ParamArrayAttribute 指示方法参数是参数数组。参数数组允许指定未知的参数数目。参数数组必须是形参表中的最后一个参数，并且必须是一维数组。调用方法时，参数数组允许用下列两种方式之一来指定方法的参数：

  • 作为可隐式转换为参数数组类型的类型的单一表达式。参数数组的作用相当于一个值参数。 作为可隐式转换为参数数组类型的类型的单一表达式。参数数组的作用相当于一个值参数。

  • 作为零个或多个参数，其中每个参数都是一个类型可隐式转换为参数数组元素类型的表达式。

下一部分中的示例说明了这两种调用约定。

说明 说明

通常，不直接在代码中使用 ParamArrayAttribute，而是使用单个语言关键字（如 Visual Basic 中的 ParamArray 和 C# 中的 params）作为 ParamArrayAttribute 类的包装。有些语言（如 C#）可能甚至要求使用语言关键字并禁止使用 ParamArrayAttribute。 通常，不直接在代码中使用 ParamArrayAttribute，而是使用单个语言关键字（如 Visual Basic 中的 ParamArray 和 C# 中的 params）作为 ParamArrayAttribute 类的包装。有些语言（如 C#）可能甚至要求使用语言关键字并禁止使用 ParamArrayAttribute。 通常，不直接在代码中使用 ParamArrayAttribute，而是使用单个语言关键字（如 Visual Basic 中的 ParamArray 和 C# 中的 params）作为 ParamArrayAttribute 类的包装。有些语言（如 C#）可能甚至要求使用语言关键字并禁止使用 ParamArrayAttribute。

在重载解析期间，如果支持参数数组的编译器遇到不存在但具有的参数比包含参数数组的重载少一个的方法重载，则编译器将使用包含参数数组的重载替换该方法。例如，对 String.Split() 实例方法（该方法在 String 类中不存在）的调用将会解析为对 String..::.Split(array<Char>[]()[]) 方法的调用。编译器还将向方法传递所需类型的空数组。这意味着，方法在处理参数数组中的元素时，必须始终准备好处理长度为零的数组。该示例提供了说明。 在重载解析期间，如果支持参数数组的编译器遇到不存在但具有的参数比包含参数数组的重载少一个的方法重载，则编译器将使用包含参数数组的重载替换该方法。例如，对 String.Split() 实例方法（该方法在 String 类中不存在）的调用将会解析为对 String..::.Split(array<Char>[]()[]) 方法的调用。编译器还将向方法传递所需类型的空数组。这意味着，方法在处理参数数组中的元素时，必须始终准备好处理长度为零的数组。该示例提供了说明。 在重载解析期间，如果支持参数数组的编译器遇到不存在但具有的参数比包含参数数组的重载少一个的方法重载，则编译器将使用包含参数数组的重载替换该方法。例如，对 String.Split() 实例方法（该方法在 String 类中不存在）的调用将会解析为对 String..::.Split(array<Char>[]()[]) 方法的调用。编译器还将向方法传递所需类型的空数组。这意味着，方法在处理参数数组中的元素时，必须始终准备好处理长度为零的数组。该示例提供了说明。 在重载解析期间，如果支持参数数组的编译器遇到不存在但具有的参数比包含参数数组的重载少一个的方法重载，则编译器将使用包含参数数组的重载替换该方法。例如，对 String.Split() 实例方法（该方法在 String 类中不存在）的调用将会解析为对 String..::.Split(array<Char>[]()[]) 方法的调用。编译器还将向方法传递所需类型的空数组。这意味着，方法在处理参数数组中的元素时，必须始终准备好处理长度为零的数组。该示例提供了说明。 在重载解析期间，如果支持参数数组的编译器遇到不存在但具有的参数比包含参数数组的重载少一个的方法重载，则编译器将使用包含参数数组的重载替换该方法。例如，对 String.Split() 实例方法（该方法在 String 类中不存在）的调用将会解析为对 String..::.Split(array<Char>[]()[]) 方法的调用。编译器还将向方法传递所需类型的空数组。这意味着，方法在处理参数数组中的元素时，必须始终准备好处理长度为零的数组。该示例提供了说明。

有关使用特性的更多信息，请参见利用特性扩展元数据。

下面的示例定义一个 Temperature 类，该类包含一个 Display 方法，用于显示一个或多个格式化的温度值。该方法具有一个参数 formats，该参数被定义为参数数组。 下面的示例定义一个 Temperature 类，该类包含一个 Display 方法，用于显示一个或多个格式化的温度值。该方法具有一个参数 formats，该参数被定义为参数数组。

Public Class Temperature
   Private temp As Decimal

   Public Sub New(temperature As Decimal)
      Me.temp = temperature
   End Sub

   Public Overrides Function ToString() As String
      Return ToString("C")
   End Function

   Public Overloads Function ToString(format As String) As String
      If String.IsNullOrEmpty(format) Then format = "G"

      Select Case format
         Case "G", "C"
            Return temp.ToString("N") + "  °C"
         Case "F"
            Return (9 * temp / 5 + 32).ToString("N") + "  °F"
         Case "K"
            Return (temp + 273.15d).ToString("N") + "  °K"
         Case Else
            Throw New FormatException(String.Format("The '{0}' format specifier is not supported", _
                                                    format))
      End Select
   End Function

   Public Sub Display(<[ParamArray]()> formats() As String)
      If formats.Length = 0 Then
         Console.WriteLine(Me.ToString("G"))
      Else
         For Each format As String In formats
            Try
               Console.WriteLine(Me.ToString(format))
            ' If there is an exception, do nothing.
            Catch
            End Try
         Next
      End If
   End Sub
End Class

using System;

public class Temperature
{
   private decimal temp;

   public Temperature(decimal temperature)
   {
      this.temp = temperature;
   }

   public override string ToString()
   {
      return ToString("C");
   }

   public string ToString(string format)
   {
      if (String.IsNullOrEmpty(format))
         format = "G";

      switch (format.ToUpper())
      {
         case "G":
         case "C":
            return temp.ToString("N") + "  °C";
         case "F":
            return (9 * temp / 5 + 32).ToString("N") + "  °F";
         case "K":
            return (temp + 273.15m).ToString("N") + "  °K";
         default:
            throw new FormatException(String.Format("The '{0}' format specifier is not supported",
                                                    format));
      }
   }

   public void Display(params string []formats)
   {
      if (formats.Length == 0)
      {
         Console.WriteLine(this.ToString("G"));
      }
      else
      {
         foreach (string format in formats)
         {
            try {
               Console.WriteLine(this.ToString(format));
            }
            // If there is an exception, do nothing.
            catch { }
         }
      }
   }
}

下面的示例说明了对 Temperature.Display 方法的三个不同调用。在第一个调用中，向该方法传递一个格式字符串数组。在第二个调用中，向该方法传递四个单独格式字符串作为参数。在第三个调用中，在不使用参数的情况下调用该方法。如示例中的输出所示，Visual Basic 和 C# 编译器将此调用转换为使用空字符串数组对 Display 方法进行的调用。 下面的示例说明了对 Temperature.Display 方法的三个不同调用。在第一个调用中，向该方法传递一个格式字符串数组。在第二个调用中，向该方法传递四个单独格式字符串作为参数。在第三个调用中，在不使用参数的情况下调用该方法。如示例中的输出所示，Visual Basic 和 C# 编译器将此调用转换为使用空字符串数组对 Display 方法进行的调用。 下面的示例说明了对 Temperature.Display 方法的三个不同调用。在第一个调用中，向该方法传递一个格式字符串数组。在第二个调用中，向该方法传递四个单独格式字符串作为参数。在第三个调用中，在不使用参数的情况下调用该方法。如示例中的输出所示，Visual Basic 和 C# 编译器将此调用转换为使用空字符串数组对 Display 方法进行的调用。 下面的示例说明了对 Temperature.Display 方法的三个不同调用。在第一个调用中，向该方法传递一个格式字符串数组。在第二个调用中，向该方法传递四个单独格式字符串作为参数。在第三个调用中，在不使用参数的情况下调用该方法。如示例中的输出所示，Visual Basic 和 C# 编译器将此调用转换为使用空字符串数组对 Display 方法进行的调用。 下面的示例说明了对 Temperature.Display 方法的三个不同调用。在第一个调用中，向该方法传递一个格式字符串数组。在第二个调用中，向该方法传递四个单独格式字符串作为参数。在第三个调用中，在不使用参数的情况下调用该方法。如示例中的输出所示，Visual Basic 和 C# 编译器将此调用转换为使用空字符串数组对 Display 方法进行的调用。

Public Module Example
   Public Sub Main()
      Dim temp1 As New Temperature(100)
      Dim formats() As String = { "C", "G", "F", "K" }

      ' Call Display method with a string array.
      Console.WriteLine("Calling Display with a string array:")
      temp1.Display(formats)
      Console.WriteLine()

      ' Call Display method with individual string arguments.
      Console.WriteLine("Calling Display with individual arguments:")
      temp1.Display("C", "F", "K", "G")
      Console.WriteLine()

      ' Call parameterless Display method.
      Console.WriteLine("Calling Display with an implicit parameter array:")
      temp1.Display()
   End Sub
End Module
' The example displays the following output:
'       Calling Display with a string array:
'       100.00  °C
'       100.00  °C
'       212.00  °F
'       373.15  °K
'
'       Calling Display with individual arguments:
'       100.00  °C
'       212.00  °F
'       373.15  °K
'       100.00  °C
'
'       Calling Display with an implicit parameter array:
'       100.00  °C

public class Class1
{
   public static void Main()
   {
      Temperature temp1 = new Temperature(100);
      string[] formats = { "C", "G", "F", "K" };

      // Call Display method with a string array.
      Console.WriteLine("Calling Display with a string array:");
      temp1.Display(formats);
      Console.WriteLine();

      // Call Display method with individual string arguments.
      Console.WriteLine("Calling Display with individual arguments:");
      temp1.Display("C", "F", "K", "G");
      Console.WriteLine();

      // Call parameterless Display method.
      Console.WriteLine("Calling Display with an implicit parameter array:");
      temp1.Display();
   }
}
// The example displays the following output:
//       Calling Display with a string array:
//       100.00  °C
//       100.00  °C
//       212.00  °F
//       373.15  °K
//
//       Calling Display with individual arguments:
//       100.00  °C
//       212.00  °F
//       373.15  °K
//       100.00  °C
//
//       Calling Display with an implicit parameter array:
//       100.00  °C

System System..::.ParamArrayAttributeParamArrayAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ParamArrayAttribute 成员
System 命名空间
Attribute

其他资源

利用特性扩展元数据


ParamArrayAttribute 成员

ParamArrayAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ParamArrayAttribute 类

指示方法在调用中将允许参数的数目可变。此类不能被继承。 指示方法在调用中将允许参数的数目可变。此类不能被继承。

ParamArrayAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ParamArrayAttribute 类
System 命名空间


ParamArrayAttribute 构造函数

ParamArrayAttribute 构造函数
ParamArrayAttribute 类

使用默认属性初始化 ParamArrayAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ParamArrayAttribute()
public:
ParamArrayAttribute()
new : unit -> ParamArrayAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ParamArrayAttribute 类
ParamArrayAttribute 成员
System 命名空间


ParamArrayAttribute 方法

ParamArrayAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ParamArrayAttribute 类

ParamArrayAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ParamArrayAttribute 类
System 命名空间


ParamArrayAttribute 属性

ParamArrayAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ParamArrayAttribute 类

ParamArrayAttribute 类型公开以下成员。

名称 说明
页首

参考

ParamArrayAttribute 类
System 命名空间


PlatformID 枚举

PlatformID 枚举

标识程序集所支持的操作系统（或平台）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration PlatformID
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum PlatformID
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class PlatformID
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type PlatformID
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Win32S | 操作系统为 Win32s（Win32 子集）类型。Win32s 是运行于 Windows 16 位版本上的层，它提供对 32 位应用程序的访问。 操作系统为 Win32s（Win32 子集）类型。Win32s 是运行于 Windows 16 位版本上的层，它提供对 32 位应用程序的访问。
由 XNA Framework 提供支持 | Win32Windows | 操作系统为 Windows 95 或 Windows 98。
由 XNA Framework 提供支持 | Win32NT | 操作系统为 Windows NT 或较新的版本。
由 XNA Framework 提供支持 | WinCE | 操作系统为 Windows CE。
由 XNA Framework 提供支持 | Unix | 操作系统为 Unix。
由 XNA Framework 提供支持 | Xbox | 开发平台为 Xbox 360。
 | MacOSX | 操作系统是 Macintosh。

使用 Environment..::.OSVersion 和 OperatingSystem..::.Platform 属性可以获得当前正在执行的操作系统或开发平台的 PlatformID 枚举。使用 PlatformID 枚举可帮助确定当前操作系统或开发平台是否支持您的应用程序。 使用 Environment..::.OSVersion 和 OperatingSystem..::.Platform 属性可以获得当前正在执行的操作系统或开发平台的 PlatformID 枚举。使用 PlatformID 枚举可帮助确定当前操作系统或开发平台是否支持您的应用程序。

下面的示例演示如何使用 PlatformID 类标识当前正在执行的操作系统。

' This example demonstrates the PlatformID enumeration.
Imports System

Class Sample
   Public Shared Sub Main()
      Dim msg1 As String = "This is a Windows operating system."
      Dim msg2 As String = "This is a Unix operating system."
      Dim msg3 As String = "ERROR: This platform identifier is invalid."

      ' Assume this example is run on a Windows operating system.
      Dim os As OperatingSystem = Environment.OSVersion
      Dim pid As PlatformID = os.Platform
      Select Case pid
         Case PlatformID.Win32NT, PlatformID.Win32S, _
              PlatformID.Win32Windows, PlatformID.WinCE
            Console.WriteLine(msg1)
         Case PlatformID.Unix
            Console.WriteLine(msg2)
         Case Else
            Console.WriteLine(msg3)
      End Select
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'This is a Windows operating system.
'

// This example demonstrates the PlatformID enumeration.
using System;

class Sample
{
    public static void Main()
    {
    string msg1 = "This is a Windows operating system.";
    string msg2 = "This is a Unix operating system.";
    string msg3 = "ERROR: This platform identifier is invalid.";

// Assume this example is run on a Windows operating system.

    OperatingSystem os = Environment.OSVersion;
    PlatformID     pid = os.Platform;
    switch (pid)
        {
        case PlatformID.Win32NT:
        case PlatformID.Win32S:
        case PlatformID.Win32Windows:
        case PlatformID.WinCE:
            Console.WriteLine(msg1);
            break;
        case PlatformID.Unix:
            Console.WriteLine(msg2);
            break;
        default:
            Console.WriteLine(msg3);
            break;
        }
    }
}
/*
This example produces the following results:

This is a Windows operating system.
*/

// This example demonstrates the PlatformID enumeration.
using namespace System;
int main()
{
   String^ msg1 = L"This is a Windows operating system.";
   String^ msg2 = L"This is a Unix operating system.";
   String^ msg3 = L"ERROR: This platform identifier is invalid.";

   // Assume this example is run on a Windows operating system.
   OperatingSystem^ os = Environment::OSVersion;
   PlatformID pid = os->Platform;
   switch ( pid )
   {
      case PlatformID::Win32NT:
      case PlatformID::Win32S:
      case PlatformID::Win32Windows:
      case PlatformID::WinCE:
         Console::WriteLine( msg1 );
         break;

      case PlatformID::Unix:
         Console::WriteLine( msg2 );
         break;

      default:
         Console::WriteLine( msg3 );
         break;
   }
   return 1;
}

/*
This example produces the following results:

This is a Windows operating system.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


PlatformNotSupportedException 类

PlatformNotSupportedException 类
成员

当功能未在特定平台上运行时所引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class PlatformNotSupportedException _
    Inherits NotSupportedException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class PlatformNotSupportedException : NotSupportedException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class PlatformNotSupportedException : public NotSupportedException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type PlatformNotSupportedException =
    class
        inherit NotSupportedException
    end

PlatformNotSupportedException 使用值为 0x80131539 的 HRESULT COR_E_PLATFORMNOTSUPPORTED。

System System..::.PlatformNotSupportedExceptionPlatformNotSupportedException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

PlatformNotSupportedException 成员
System 命名空间
Exception

其他资源

处理和引发异常


PlatformNotSupportedException 成员

PlatformNotSupportedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PlatformNotSupportedException 类

当功能未在特定平台上运行时所引发的异常。

PlatformNotSupportedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

PlatformNotSupportedException 类
System 命名空间


PlatformNotSupportedException 构造函数

PlatformNotSupportedException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PlatformNotSupportedException 类

初始化 PlatformNotSupportedException 类的新实例。

名称 说明
页首

参考

PlatformNotSupportedException 类
PlatformNotSupportedException 成员
System 命名空间


PlatformNotSupportedException 构造函数

PlatformNotSupportedException 构造函数
PlatformNotSupportedException 类

使用默认属性初始化 PlatformNotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public PlatformNotSupportedException()
public:
PlatformNotSupportedException()
new : unit -> PlatformNotSupportedException

当通过调用该构造函数来创建 PlatformNotSupportedException 类的实例时，下列属性将初始化为指定值：

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 空字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

PlatformNotSupportedException 类
PlatformNotSupportedException 成员
PlatformNotSupportedException 重载
System 命名空间


PlatformNotSupportedException 构造函数 (String)

PlatformNotSupportedException 构造函数 (String)
PlatformNotSupportedException 类

使用指定错误信息初始化 PlatformNotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public PlatformNotSupportedException(
    string message
)
public:
PlatformNotSupportedException(
    String^ message
)
new :
        message:string -> PlatformNotSupportedException

参数

message
类型： System String
解释异常原因的文本消息。

当通过调用该构造函数来创建 PlatformNotSupportedException 类的实例时，下列属性将初始化为指定值：

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

PlatformNotSupportedException 类
PlatformNotSupportedException 成员
PlatformNotSupportedException 重载
System 命名空间


PlatformNotSupportedException 构造函数 (SerializationInfo, StreamingContext)

PlatformNotSupportedException 构造函数 (SerializationInfo, StreamingContext)
PlatformNotSupportedException 类

用序列化数据初始化 PlatformNotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected PlatformNotSupportedException(
    SerializationInfo info,
    StreamingContext context
)
protected:
PlatformNotSupportedException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> PlatformNotSupportedException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

PlatformNotSupportedException 类
PlatformNotSupportedException 成员
PlatformNotSupportedException 重载
System 命名空间


PlatformNotSupportedException 构造函数 (String, Exception)

PlatformNotSupportedException 构造函数 (String, Exception)
PlatformNotSupportedException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 PlatformNotSupportedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public PlatformNotSupportedException(
    string message,
    Exception inner
)
public:
PlatformNotSupportedException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> PlatformNotSupportedException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 PlatformNotSupportedException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

PlatformNotSupportedException 类
PlatformNotSupportedException 成员
PlatformNotSupportedException 重载
System 命名空间


PlatformNotSupportedException 方法

PlatformNotSupportedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PlatformNotSupportedException 类

PlatformNotSupportedException 类型公开以下成员。

名称 说明
页首

参考

PlatformNotSupportedException 类
System 命名空间


PlatformNotSupportedException 属性

PlatformNotSupportedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PlatformNotSupportedException 类

PlatformNotSupportedException 类型公开以下成员。

名称 说明
页首

参考

PlatformNotSupportedException 类
System 命名空间


PlatformNotSupportedException 事件

PlatformNotSupportedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PlatformNotSupportedException 类

PlatformNotSupportedException 类型公开以下成员。

名称 说明
页首

参考

PlatformNotSupportedException 类
System 命名空间


Predicate <(Of <(T >)>) 委托

Predicate
<
(Of
<
(
T
>
)
>
)
委托

表示定义一组条件并确定指定对象是否符合这些条件的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Delegate Function Predicate(Of In T) ( _
    obj As T _
) As Boolean
public delegate bool Predicate<in T>(
    T obj
)

generic<typename T>
public delegate bool Predicate(
    T obj
)
type Predicate =
    delegate of
        obj:'T -> bool

类型参数

inInininTT

要比较的对象的类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息，请参见 泛型中的协变和逆变。

参数

obj
类型：T
要按照由此委托表示的方法中定义的条件进行比较的对象。

返回值

类型： System Boolean
如果 obj 符合由此委托表示的方法中定义的条件，则为 true；否则为 false。

此委托由 Array 和 List<(Of <(T>)>) 类的几种方法使用，用于在集合中搜索元素。

下面的代码示例使用带有 Array..::.Find<(Of <(T>)>) 方法的 Predicate<(Of <(T>)>) 委托搜索 Point 结构的数组。如果 X 和 Y 字段的产品大于 100，000，则该代理所代表的方法 ProductGT10 将返回 true。Find<(Of <(T>)>) 方法调用数组的每个元素的代理，从而在第一个满足测试条件的点停止。 下面的代码示例使用带有 Array..::.Find<(Of <(T>)>) 方法的 Predicate<(Of <(T>)>) 委托搜索 Point 结构的数组。如果 X 和 Y 字段的产品大于 100，000，则该代理所代表的方法 ProductGT10 将返回 true。Find<(Of <(T>)>) 方法调用数组的每个元素的代理，从而在第一个满足测试条件的点停止。 下面的代码示例使用带有 Array..::.Find<(Of <(T>)>) 方法的 Predicate<(Of <(T>)>) 委托搜索 Point 结构的数组。如果 X 和 Y 字段的产品大于 100，000，则该代理所代表的方法 ProductGT10 将返回 true。Find<(Of <(T>)>) 方法调用数组的每个元素的代理，从而在第一个满足测试条件的点停止。

说明 说明

Visual Basic 和 C# 用户不需要显式创建委托，也不需要指定泛型方法的类型参数。编译器会根据您提供的方法参数确定必需的类型。 Visual Basic 和 C# 用户不需要显式创建委托，也不需要指定泛型方法的类型参数。编译器会根据您提供的方法参数确定必需的类型。

Imports System
Imports System.Drawing

Public Class Example

    Public Shared Sub Main()

        ' Create an array of five Point structures.
        Dim points() As Point = { new Point(100, 200), _
            new Point(150, 250), new Point(250, 375), _
            new Point(275, 395), new Point(295, 450) }

        ' To find the first Point structure for which X times Y
        ' is greater than 100000, pass the array and a delegate
        ' that represents the ProductGT10 method to the Shared
        ' Find method of the Array class.
        Dim first As Point = Array.Find(points, _
            AddressOf ProductGT10)

        ' Note that you do not need to create the delegate
        ' explicitly, or to specify the type parameter of the
        ' generic method, because the compiler has enough
        ' context to determine that information for you.

        ' Display the first structure found.
        Console.WriteLine("Found: X = {0}, Y = {1}", _
            first.X, first.Y)
    End Sub

    ' This method implements the test condition for the Find
    ' method.
    Private Shared Function ProductGT10(ByVal p As Point) As Boolean
        If p.X * p.Y > 100000 Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Found: X = 275, Y = 395

using System;
using System.Drawing;

public class Example
{
    public static void Main()
    {
        // Create an array of five Point structures.
        Point[] points = { new Point(100, 200),
            new Point(150, 250), new Point(250, 375),
            new Point(275, 395), new Point(295, 450) };

        // To find the first Point structure for which X times Y
        // is greater than 100000, pass the array and a delegate
        // that represents the ProductGT10 method to the Shared
        // Find method of the Array class.
        Point first = Array.Find(points, ProductGT10);

        // Note that you do not need to create the delegate
        // explicitly, or to specify the type parameter of the
        // generic method, because the C# compiler has enough
        // context to determine that information for you.

        // Display the first structure found.
        Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
    }

    // This method implements the test condition for the Find
    // method.
    private static bool ProductGT10(Point p)
    {
        if (p.X * p.Y > 100000)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Found: X = 275, Y = 395
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间
Find T


Random 类

Random 类
成员

表示伪随机数生成器，一种能够产生满足某些随机性统计要求的数字序列的设备。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class Random
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Random
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Random
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Random =  class end

伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性，因为它们是用一种确定的数学算法选择的，但是从实用的角度而言，其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。有关更多信息，请参见 D。E.Knuth。"“The Art of Computer Programming, volume 2: Seminumerical Algorithms”。Addison-Wesley，Reading，MA，second edition，1981。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性，因为它们是用一种确定的数学算法选择的，但是从实用的角度而言，其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。有关更多信息，请参见 D。E.Knuth。"“The Art of Computer Programming, volume 2: Seminumerical Algorithms”。Addison-Wesley，Reading，MA，second edition，1981。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性，因为它们是用一种确定的数学算法选择的，但是从实用的角度而言，其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。有关更多信息，请参见 D。E.Knuth。"“The Art of Computer Programming, volume 2: Seminumerical Algorithms”。Addison-Wesley，Reading，MA，second edition，1981。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性，因为它们是用一种确定的数学算法选择的，但是从实用的角度而言，其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。有关更多信息，请参见 D。E.Knuth。"“The Art of Computer Programming, volume 2: Seminumerical Algorithms”。Addison-Wesley，Reading，MA，second edition，1981。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性，因为它们是用一种确定的数学算法选择的，但是从实用的角度而言，其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。有关更多信息，请参见 D。E.Knuth。"“The Art of Computer Programming, volume 2: Seminumerical Algorithms”。Addison-Wesley，Reading，MA，second edition，1981。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性，因为它们是用一种确定的数学算法选择的，但是从实用的角度而言，其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。有关更多信息，请参见 D。E.Knuth。"“The Art of Computer Programming, volume 2: Seminumerical Algorithms”。Addison-Wesley，Reading，MA，second edition，1981。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性，因为它们是用一种确定的数学算法选择的，但是从实用的角度而言，其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。有关更多信息，请参见 D。E.Knuth。"“The Art of Computer Programming, volume 2: Seminumerical Algorithms”。Addison-Wesley，Reading，MA，second edition，1981。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性，因为它们是用一种确定的数学算法选择的，但是从实用的角度而言，其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。有关更多信息，请参见 D。E.Knuth。"“The Art of Computer Programming, volume 2: Seminumerical Algorithms”。Addison-Wesley，Reading，MA，second edition，1981。 伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性，因为它们是用一种确定的数学算法选择的，但是从实用的角度而言，其随机程度已足够了。Random 类的当前实现基于 Donald E.Knuth 的减法随机数生成器算法。有关更多信息，请参见 D。E.Knuth。"“The Art of Computer Programming, volume 2: Seminumerical Algorithms”。Addison-Wesley，Reading，MA，second edition，1981。

随机数的生成是从种子值开始。如果反复使用同一个种子，就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关，从而对于 Random 的每个新实例，都会产生不同的系列。默认情况下，Random 类的无参数构造函数使用系统时钟生成其种子值，而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是，因为时钟的分辨率有限，所以，如果使用无参数构造函数连续创建不同的 Random 对象，就会创建生成相同随机数序列的随机数生成器。下面的示例演示两个连续实例化的 Random 对象生成相同的随机数序列。 随机数的生成是从种子值开始。如果反复使用同一个种子，就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关，从而对于 Random 的每个新实例，都会产生不同的系列。默认情况下，Random 类的无参数构造函数使用系统时钟生成其种子值，而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是，因为时钟的分辨率有限，所以，如果使用无参数构造函数连续创建不同的 Random 对象，就会创建生成相同随机数序列的随机数生成器。下面的示例演示两个连续实例化的 Random 对象生成相同的随机数序列。 随机数的生成是从种子值开始。如果反复使用同一个种子，就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关，从而对于 Random 的每个新实例，都会产生不同的系列。默认情况下，Random 类的无参数构造函数使用系统时钟生成其种子值，而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是，因为时钟的分辨率有限，所以，如果使用无参数构造函数连续创建不同的 Random 对象，就会创建生成相同随机数序列的随机数生成器。下面的示例演示两个连续实例化的 Random 对象生成相同的随机数序列。 随机数的生成是从种子值开始。如果反复使用同一个种子，就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关，从而对于 Random 的每个新实例，都会产生不同的系列。默认情况下，Random 类的无参数构造函数使用系统时钟生成其种子值，而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是，因为时钟的分辨率有限，所以，如果使用无参数构造函数连续创建不同的 Random 对象，就会创建生成相同随机数序列的随机数生成器。下面的示例演示两个连续实例化的 Random 对象生成相同的随机数序列。 随机数的生成是从种子值开始。如果反复使用同一个种子，就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关，从而对于 Random 的每个新实例，都会产生不同的系列。默认情况下，Random 类的无参数构造函数使用系统时钟生成其种子值，而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是，因为时钟的分辨率有限，所以，如果使用无参数构造函数连续创建不同的 Random 对象，就会创建生成相同随机数序列的随机数生成器。下面的示例演示两个连续实例化的 Random 对象生成相同的随机数序列。 随机数的生成是从种子值开始。如果反复使用同一个种子，就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关，从而对于 Random 的每个新实例，都会产生不同的系列。默认情况下，Random 类的无参数构造函数使用系统时钟生成其种子值，而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是，因为时钟的分辨率有限，所以，如果使用无参数构造函数连续创建不同的 Random 对象，就会创建生成相同随机数序列的随机数生成器。下面的示例演示两个连续实例化的 Random 对象生成相同的随机数序列。

Dim bytes1(99), bytes2(99) As Byte
Dim rnd1 As New Random()
Dim rnd2 As New Random()

rnd1.NextBytes(bytes1)
rnd2.NextBytes(bytes2)

Console.WriteLine("First Series:")
For ctr As Integer = bytes1.GetLowerBound(0) to bytes1.GetUpperBound(0)
   Console.Write("{0, 5}", bytes1(ctr))
   If (ctr + 1) Mod 10 = 0 Then Console.WriteLine()
Next
Console.WriteLine()
Console.WriteLine("Second Series:")
For ctr As Integer = bytes2.GetLowerBound(0) to bytes2.GetUpperBound(0)
   Console.Write("{0, 5}", bytes2(ctr))
   If (ctr + 1) Mod 10 = 0 Then Console.WriteLine()
Next
' The example displays the following output to the console:
'       First Series:
'          97  129  149   54   22  208  120  105   68  177
'         113  214   30  172   74  218  116  230   89   18
'          12  112  130  105  116  180  190  200  187  120
'           7  198  233  158   58   51   50  170   98   23
'          21    1  113   74  146  245   34  255   96   24
'         232  255   23    9  167  240  255   44  194   98
'          18  175  173  204  169  171  236  127  114   23
'         167  202  132   65  253   11  254   56  214  127
'         145  191  104  163  143    7  174  224  247   73
'          52    6  231  255    5  101   83  165  160  231
'
'       Second Series:
'          97  129  149   54   22  208  120  105   68  177
'         113  214   30  172   74  218  116  230   89   18
'          12  112  130  105  116  180  190  200  187  120
'           7  198  233  158   58   51   50  170   98   23
'          21    1  113   74  146  245   34  255   96   24
'         232  255   23    9  167  240  255   44  194   98
'          18  175  173  204  169  171  236  127  114   23
'         167  202  132   65  253   11  254   56  214  127
'         145  191  104  163  143    7  174  224  247   73
'          52    6  231  255    5  101   83  165  160  231

byte[] bytes1 = new byte[100];
byte[] bytes2 = new byte[100];
Random rnd1 = new Random();
Random rnd2 = new Random();

rnd1.NextBytes(bytes1);
rnd2.NextBytes(bytes2);

Console.WriteLine("First Series:");
for (int ctr = bytes1.GetLowerBound(0);
     ctr <= bytes1.GetUpperBound(0);
     ctr++) {
   Console.Write("{0, 5}", bytes1[ctr]);
   if ((ctr + 1) % 10 == 0) Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("Second Series:");
for (int ctr = bytes2.GetLowerBound(0);
     ctr <= bytes2.GetUpperBound(0);
     ctr++) {
   Console.Write("{0, 5}", bytes2[ctr]);
   if ((ctr + 1) % 10 == 0) Console.WriteLine();
}
// The example displays the following output to the console:
//       First Series:
//          97  129  149   54   22  208  120  105   68  177
//         113  214   30  172   74  218  116  230   89   18
//          12  112  130  105  116  180  190  200  187  120
//           7  198  233  158   58   51   50  170   98   23
//          21    1  113   74  146  245   34  255   96   24
//         232  255   23    9  167  240  255   44  194   98
//          18  175  173  204  169  171  236  127  114   23
//         167  202  132   65  253   11  254   56  214  127
//         145  191  104  163  143    7  174  224  247   73
//          52    6  231  255    5  101   83  165  160  231
//
//       Second Series:
//          97  129  149   54   22  208  120  105   68  177
//         113  214   30  172   74  218  116  230   89   18
//          12  112  130  105  116  180  190  200  187  120
//           7  198  233  158   58   51   50  170   98   23
//          21    1  113   74  146  245   34  255   96   24
//         232  255   23    9  167  240  255   44  194   98
//          18  175  173  204  169  171  236  127  114   23
//         167  202  132   65  253   11  254   56  214  127
//         145  191  104  163  143    7  174  224  247   73
//          52    6  231  255    5  101   83  165  160  231

通过创建单个而不是多个 Random 对象可以避免此问题。

若要提高性能，请创建一个随时间推移能生成多个随机数的 Random 对象，而不要反复新建会生成同一个随机数的 Random 对象。

例如，要生成适合于创建随机密码的加密安全随机数，请使用从 System.Security.Cryptography..::.RandomNumberGenerator 派生的类，如 System.Security.Cryptography..::.RNGCryptoServiceProvider。

对继承者的说明

在 .NET Framework 1.0 和 1.1 版中，派生自 Random 的类的最小实现需要重写 Sample 方法，以定义用于生成随机数的新算法或修改算法。然后，该派生类便可依赖 Random..::.Next()()()、Random..::.Next(Int32)、Random..::.Next(Int32, Int32)、NextBytes 和 NextDouble 方法的基类实现来调用 Sample 方法的派生类实现。 在 .NET Framework 1.0 和 1.1 版中，派生自 Random 的类的最小实现需要重写 Sample 方法，以定义用于生成随机数的新算法或修改算法。然后，该派生类便可依赖 Random..::.Next()()()、Random..::.Next(Int32)、Random..::.Next(Int32, Int32)、NextBytes 和 NextDouble 方法的基类实现来调用 Sample 方法的派生类实现。

在 .NET Framework 2.0 及更高版本中，Random..::.Next()()()、Random..::.Next(Int32, Int32) 和 NextBytes 方法的行为发生了更改，因此这些方法不必再调用 Sample 方法的派生类实现。因此，派生自 Random 并且面向 .NET Framework 2.0 及更高版本的类还应重写这三种方法。 在 .NET Framework 2.0 及更高版本中，Random..::.Next()()()、Random..::.Next(Int32, Int32) 和 NextBytes 方法的行为发生了更改，因此这些方法不必再调用 Sample 方法的派生类实现。因此，派生自 Random 并且面向 .NET Framework 2.0 及更高版本的类还应重写这三种方法。

下面的示例创建单个随机数生成器，并调用其 NextBytes、Next 和 NextDouble 方法来生成不同范围内的随机数序列。

' Instantiate random number generator using system-supplied value as seed.
Dim rand As New Random()
' Generate and display 5 random byte (integer) values.
Dim bytes(4) As Byte
rand.NextBytes(bytes)
Console.WriteLine("Five random byte values:")
For Each byteValue As Byte In bytes
   Console.Write("{0, 5}", byteValue)
Next
Console.WriteLine()
' Generate and display 5 random integers.
Console.WriteLine("Five random integer values:")
For ctr As Integer = 0 To 4
   Console.Write("{0,15:N0}", rand.Next)
Next
Console.WriteLine()
' Generate and display 5 random integers between 0 and 100.'
Console.WriteLine("Five random integers between 0 and 100:")
For ctr As Integer = 0 To 4
   Console.Write("{0,8:N0}", rand.Next(101))
Next
Console.WriteLine()
' Generate and display 5 random integers from 50 to 100.
Console.WriteLine("Five random integers between 50 and 100:")
For ctr As Integer = 0 To 4
   Console.Write("{0,8:N0}", rand.Next(50, 101))
Next
Console.WriteLine()
' Generate and display 5 random floating point values from 0 to 1.
Console.WriteLine("Five Doubles.")
For ctr As Integer = 0 To 4
   Console.Write("{0,8:N3}", rand.NextDouble())
Next
Console.WriteLine()
' Generate and display 5 random floating point values from 0 to 5.
Console.WriteLine("Five Doubles between 0 and 5.")
For ctr As Integer = 0 To 4
   Console.Write("{0,8:N3}", rand.NextDouble() * 5)
Next
' Sample console output might appear as follows:
'    Five random byte values:
'      194  185  239   54  116
'    Five random integer values:
'        507,353,531  1,509,532,693  2,125,074,958  1,409,512,757    652,767,128
'    Five random integers between 0 and 100:
'          16      78      94      79      52
'    Five random integers between 50 and 100:
'          56      66      96      60      65
'    Five Doubles.
'       0.943   0.108   0.744   0.563   0.415
'    Five Doubles between 0 and 5.
'       2.934   3.130   0.292   1.432   4.369

// Instantiate random number generator using system-supplied value as seed.
Random rand = new Random();
// Generate and display 5 random byte (integer) values.
byte[] bytes = new byte[4];
rand.NextBytes(bytes);
Console.WriteLine("Five random byte values:");
foreach (byte byteValue in bytes)
   Console.Write("{0, 5}", byteValue);
Console.WriteLine();
// Generate and display 5 random integers.
Console.WriteLine("Five random integer values:");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,15:N0}", rand.Next());
Console.WriteLine();
// Generate and display 5 random integers between 0 and 100.//
Console.WriteLine("Five random integers between 0 and 100:");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,8:N0}", rand.Next(101));
Console.WriteLine();
// Generate and display 5 random integers from 50 to 100.
Console.WriteLine("Five random integers between 50 and 100:");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,8:N0}", rand.Next(50, 101));
Console.WriteLine();
// Generate and display 5 random floating point values from 0 to 1.
Console.WriteLine("Five Doubles.");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,8:N3}", rand.NextDouble());
Console.WriteLine();
// Generate and display 5 random floating point values from 0 to 5.
Console.WriteLine("Five Doubles between 0 and 5.");
for (int ctr = 0; ctr <= 4; ctr++)
   Console.Write("{0,8:N3}", rand.NextDouble() * 5);
// Sample console output might appear as follows:
//    Five random byte values:
//      194  185  239   54  116
//    Five random integer values:
//        507,353,531  1,509,532,693  2,125,074,958  1,409,512,757    652,767,128
//    Five random integers between 0 and 100:
//          16      78      94      79      52
//    Five random integers between 50 and 100:
//          56      66      96      60      65
//    Five Doubles.
//       0.943   0.108   0.744   0.563   0.415
//    Five Doubles between 0 and 5.
//       2.934   3.130   0.292   1.432   4.369

System System..::.RandomRandom
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Random 成员
System 命名空间


Random 成员

Random 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Random 类

表示伪随机数生成器，一种能够产生满足某些随机性统计要求的数字序列的设备。

Random 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Random 类
System 命名空间


Random 构造函数

Random 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Random 类

初始化 Random 类的新实例。

名称 说明
页首

参考

Random 类
Random 成员
System 命名空间


Random 构造函数

Random 构造函数
Random 类

使用与时间相关的默认种子值，初始化 Random 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public Random()
public:
Random()
new : unit -> Random

生成的数字分布均匀；每个数字返回的可能性均相等。

默认种子值是从系统时钟派生而来的，具有有限的分辨率。因此，通过调用默认构造函数而频繁创建的不同 Random 对象将具有相同的默认种子值，因而会产生几组相同的随机数。使用单个 Random 对象生成所有随机数可以避免此问题。还可以通过修改由系统时钟返回的种子值，然后向 Random(Int32) 构造函数显式提供这个新的种子值，来解决此问题。有关更多信息，请参见 Random(Int32) 构造函数。 默认种子值是从系统时钟派生而来的，具有有限的分辨率。因此，通过调用默认构造函数而频繁创建的不同 Random 对象将具有相同的默认种子值，因而会产生几组相同的随机数。使用单个 Random 对象生成所有随机数可以避免此问题。还可以通过修改由系统时钟返回的种子值，然后向 Random(Int32) 构造函数显式提供这个新的种子值，来解决此问题。有关更多信息，请参见 Random(Int32) 构造函数。 默认种子值是从系统时钟派生而来的，具有有限的分辨率。因此，通过调用默认构造函数而频繁创建的不同 Random 对象将具有相同的默认种子值，因而会产生几组相同的随机数。使用单个 Random 对象生成所有随机数可以避免此问题。还可以通过修改由系统时钟返回的种子值，然后向 Random(Int32) 构造函数显式提供这个新的种子值，来解决此问题。有关更多信息，请参见 Random(Int32) 构造函数。 默认种子值是从系统时钟派生而来的，具有有限的分辨率。因此，通过调用默认构造函数而频繁创建的不同 Random 对象将具有相同的默认种子值，因而会产生几组相同的随机数。使用单个 Random 对象生成所有随机数可以避免此问题。还可以通过修改由系统时钟返回的种子值，然后向 Random(Int32) 构造函数显式提供这个新的种子值，来解决此问题。有关更多信息，请参见 Random(Int32) 构造函数。 默认种子值是从系统时钟派生而来的，具有有限的分辨率。因此，通过调用默认构造函数而频繁创建的不同 Random 对象将具有相同的默认种子值，因而会产生几组相同的随机数。使用单个 Random 对象生成所有随机数可以避免此问题。还可以通过修改由系统时钟返回的种子值，然后向 Random(Int32) 构造函数显式提供这个新的种子值，来解决此问题。有关更多信息，请参见 Random(Int32) 构造函数。

下面的示例使用默认构造函数实例化三个 Random 对象，并为每个对象显示由五个随机整数组成的序列。由于前两个 Random 对象是连续创建的，它们是用基于系统时钟的相同种子值实例化的，因此会生成相同的随机数序列。相反，第三个 Random 对象的默认构造函数是在调用 Thread..::.Sleep 方法产生两秒的延迟后调用的。这样，为第三个 Random 对象生成了不同的种子值，从而生成不同的随机数序列。 下面的示例使用默认构造函数实例化三个 Random 对象，并为每个对象显示由五个随机整数组成的序列。由于前两个 Random 对象是连续创建的，它们是用基于系统时钟的相同种子值实例化的，因此会生成相同的随机数序列。相反，第三个 Random 对象的默认构造函数是在调用 Thread..::.Sleep 方法产生两秒的延迟后调用的。这样，为第三个 Random 对象生成了不同的种子值，从而生成不同的随机数序列。 下面的示例使用默认构造函数实例化三个 Random 对象，并为每个对象显示由五个随机整数组成的序列。由于前两个 Random 对象是连续创建的，它们是用基于系统时钟的相同种子值实例化的，因此会生成相同的随机数序列。相反，第三个 Random 对象的默认构造函数是在调用 Thread..::.Sleep 方法产生两秒的延迟后调用的。这样，为第三个 Random 对象生成了不同的种子值，从而生成不同的随机数序列。 下面的示例使用默认构造函数实例化三个 Random 对象，并为每个对象显示由五个随机整数组成的序列。由于前两个 Random 对象是连续创建的，它们是用基于系统时钟的相同种子值实例化的，因此会生成相同的随机数序列。相反，第三个 Random 对象的默认构造函数是在调用 Thread..::.Sleep 方法产生两秒的延迟后调用的。这样，为第三个 Random 对象生成了不同的种子值，从而生成不同的随机数序列。

Dim randomInstancesToCreate As Integer = 4
Dim randomEngines(randomInstancesToCreate - 1) As Random
For ctr As Integer = 0 To randomInstancesToCreate - 1
   randomEngines(ctr) = New Random(CInt((DateTime.Now.Ticks >> 32) >> ctr))
Next

Imports System.Threading

Module RandomNumbers
   Public Sub Main()
      Dim rand1 As New Random()
      Dim rand2 As New Random()
      Thread.Sleep(2000)
      Dim rand3 As New Random()
      ShowRandomNumbers(rand1)
      ShowRandomNumbers(rand2)
      ShowRandomNumbers(rand3)
   End Sub

   Private Sub ShowRandomNumbers(rand As Random)
      Console.WriteLine()
      Dim values(4) As Byte
      rand.NextBytes(values)
      For Each value As Byte In values
         Console.Write("{0, 5}", value)
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output to the console:
'       28   35  133  224   58
'
'       28   35  133  224   58
'
'       32  222   43  251   49

int randomInstancesToCreate = 4;
Random[] randomEngines = new Random[randomInstancesToCreate];
for (int ctr = 0; ctr < randomInstancesToCreate; ctr++)
{
   randomEngines[ctr] = new Random(unchecked((int) (DateTime.Now.Ticks >> ctr)));
}

using System;
using System.Threading;

public class RandomNumbers
{
   public static void Main()
   {
      Random rand1 = new Random();
      Random rand2 = new Random();
      Thread.Sleep(2000);
      Random rand3 = new Random();
      ShowRandomNumbers(rand1);
      ShowRandomNumbers(rand2);
      ShowRandomNumbers(rand3);
   }

   private static void ShowRandomNumbers(Random rand)
   {
      Console.WriteLine();
      byte[] values = new byte[5];
      rand.NextBytes(values);
      foreach (byte value in values)
         Console.Write("{0, 5}", value);
      Console.WriteLine();
   }
}
// The example displays the following output to the console:
//       28   35  133  224   58
//
//       28   35  133  224   58
//
//       32  222   43  251   49

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Random 类
Random 成员
Random 重载
System 命名空间


Random 构造函数 (Int32)

Random 构造函数 (Int32)
Random 类

使用指定的种子值初始化 Random 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    Seed As Integer _
)
public Random(
    int Seed
)
public:
Random(
    int Seed
)
new :
        Seed:int -> Random

参数

Seed
类型： System Int32
用来计算伪随机数序列起始值的数字。如果指定的是负数，则使用其绝对值。 用来计算伪随机数序列起始值的数字。如果指定的是负数，则使用其绝对值。

为不同的 Random 对象提供相同的种子值会导致每个实例产生相同的随机数序列。

如果应用程序需要不同的随机数序列，则使用不同的种子值重复调用此构造函数。一种产生唯一种子值的方法是使它与时间相关。例如，从系统时钟派生出种子值。然而，系统时钟可能没有足够的分辨率，从而无法使用不同的种子值分别调用此构造函数。这种情况下，请应用一个算法来区分每个调用的种子值。例如，下面的代码使用右移位运算符为多个可以使用相同时间值初始化的 Random 对象（在 1 和大约 28 个对象之间）生成不同的种子值。 如果应用程序需要不同的随机数序列，则使用不同的种子值重复调用此构造函数。一种产生唯一种子值的方法是使它与时间相关。例如，从系统时钟派生出种子值。然而，系统时钟可能没有足够的分辨率，从而无法使用不同的种子值分别调用此构造函数。这种情况下，请应用一个算法来区分每个调用的种子值。例如，下面的代码使用右移位运算符为多个可以使用相同时间值初始化的 Random 对象（在 1 和大约 28 个对象之间）生成不同的种子值。 如果应用程序需要不同的随机数序列，则使用不同的种子值重复调用此构造函数。一种产生唯一种子值的方法是使它与时间相关。例如，从系统时钟派生出种子值。然而，系统时钟可能没有足够的分辨率，从而无法使用不同的种子值分别调用此构造函数。这种情况下，请应用一个算法来区分每个调用的种子值。例如，下面的代码使用右移位运算符为多个可以使用相同时间值初始化的 Random 对象（在 1 和大约 28 个对象之间）生成不同的种子值。 如果应用程序需要不同的随机数序列，则使用不同的种子值重复调用此构造函数。一种产生唯一种子值的方法是使它与时间相关。例如，从系统时钟派生出种子值。然而，系统时钟可能没有足够的分辨率，从而无法使用不同的种子值分别调用此构造函数。这种情况下，请应用一个算法来区分每个调用的种子值。例如，下面的代码使用右移位运算符为多个可以使用相同时间值初始化的 Random 对象（在 1 和大约 28 个对象之间）生成不同的种子值。 如果应用程序需要不同的随机数序列，则使用不同的种子值重复调用此构造函数。一种产生唯一种子值的方法是使它与时间相关。例如，从系统时钟派生出种子值。然而，系统时钟可能没有足够的分辨率，从而无法使用不同的种子值分别调用此构造函数。这种情况下，请应用一个算法来区分每个调用的种子值。例如，下面的代码使用右移位运算符为多个可以使用相同时间值初始化的 Random 对象（在 1 和大约 28 个对象之间）生成不同的种子值。 如果应用程序需要不同的随机数序列，则使用不同的种子值重复调用此构造函数。一种产生唯一种子值的方法是使它与时间相关。例如，从系统时钟派生出种子值。然而，系统时钟可能没有足够的分辨率，从而无法使用不同的种子值分别调用此构造函数。这种情况下，请应用一个算法来区分每个调用的种子值。例如，下面的代码使用右移位运算符为多个可以使用相同时间值初始化的 Random 对象（在 1 和大约 28 个对象之间）生成不同的种子值。

Dim randomInstancesToCreate As Integer = 4
Dim randomEngines(randomInstancesToCreate - 1) As Random
For ctr As Integer = 0 To randomInstancesToCreate - 1
   randomEngines(ctr) = New Random(CInt((DateTime.Now.Ticks >> 32) >> ctr))
Next

Imports System.Threading

Module RandomNumbers
   Public Sub Main()
      Dim rand1 As New Random()
      Dim rand2 As New Random()
      Thread.Sleep(2000)
      Dim rand3 As New Random()
      ShowRandomNumbers(rand1)
      ShowRandomNumbers(rand2)
      ShowRandomNumbers(rand3)
   End Sub

   Private Sub ShowRandomNumbers(rand As Random)
      Console.WriteLine()
      Dim values(4) As Byte
      rand.NextBytes(values)
      For Each value As Byte In values
         Console.Write("{0, 5}", value)
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output to the console:
'       28   35  133  224   58
'
'       28   35  133  224   58
'
'       32  222   43  251   49

int randomInstancesToCreate = 4;
Random[] randomEngines = new Random[randomInstancesToCreate];
for (int ctr = 0; ctr < randomInstancesToCreate; ctr++)
{
   randomEngines[ctr] = new Random(unchecked((int) (DateTime.Now.Ticks >> ctr)));
}

using System;
using System.Threading;

public class RandomNumbers
{
   public static void Main()
   {
      Random rand1 = new Random();
      Random rand2 = new Random();
      Thread.Sleep(2000);
      Random rand3 = new Random();
      ShowRandomNumbers(rand1);
      ShowRandomNumbers(rand2);
      ShowRandomNumbers(rand3);
   }

   private static void ShowRandomNumbers(Random rand)
   {
      Console.WriteLine();
      byte[] values = new byte[5];
      rand.NextBytes(values);
      foreach (byte value in values)
         Console.Write("{0, 5}", value);
      Console.WriteLine();
   }
}
// The example displays the following output to the console:
//       28   35  133  224   58
//
//       28   35  133  224   58
//
//       32  222   43  251   49

下面的示例使用接受种子参数的类构造函数创建 Random 对象，并生成随机整数和双精度数的序列。该示例阐释了当用该构造函数和种子参数再次创建 Random 对象时所生成的相同的序列。 下面的示例使用接受种子参数的类构造函数创建 Random 对象，并生成随机整数和双精度数的序列。该示例阐释了当用该构造函数和种子参数再次创建 Random 对象时所生成的相同的序列。

' Example of the Random class constructors and Random.NextDouble( )
' method.
Imports System.Threading

Module RandomObjectDemo

    ' Generate random numbers from the specified Random object.
    Sub RunIntNDoubleRandoms( randObj As Random )

        ' Generate the first six random integers.
        Dim j As Integer
        For j = 0 To 5
            Console.Write( " {0,10} ", randObj.Next( ) )
        Next j
        Console.WriteLine( )

        ' Generate the first six random doubles.
        For j = 0 To 5
            Console.Write( " {0:F8} ", randObj.NextDouble( ) )
        Next j
        Console.WriteLine( )
    End Sub

    ' Create a Random object with the specified seed.
    Sub FixedSeedRandoms( seed As Integer )

        Console.WriteLine( vbCrLf & _
            "Random numbers from a Random object with " & _
            "seed = {0}:", seed )
        Dim fixRand As New Random( seed )

        RunIntNDoubleRandoms( fixRand )
    End Sub

    ' Create a random object with a timer-generated seed.
    Sub AutoSeedRandoms( )

        ' Wait to allow the timer to advance.
        Thread.Sleep( 1 )

        Console.WriteLine( vbCrLf & _
            "Random numbers from a Random object " & _
            "with an auto-generated seed:" )
        Dim autoRand As New Random( )

        RunIntNDoubleRandoms( autoRand )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Random class constructors " & _
            "and Random.NextDouble( ) " & vbCrLf & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( "Create Random " & _
            "objects, and then generate and display six " & _
            "integers and " & vbCrLf & "six doubles from each." )

        FixedSeedRandoms( 123 )
        FixedSeedRandoms( 123 )

        FixedSeedRandoms( 456 )
        FixedSeedRandoms( 456 )

        AutoSeedRandoms( )
        AutoSeedRandoms( )
        AutoSeedRandoms( )
    End Sub
End Module

' This example of the Random class constructors and Random.NextDouble( )
' generates the following output.
'
' Create Random objects, and then generate and display six integers and
' six doubles from each.
'
' Random numbers from a Random object with seed = 123:
'  2114319875  1949518561  1596751841  1742987178  1586516133   103755708
'  0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146
'
' Random numbers from a Random object with seed = 123:
'  2114319875  1949518561  1596751841  1742987178  1586516133   103755708
'  0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146
'
' Random numbers from a Random object with seed = 456:
'  2044805024  1323311594  1087799997  1907260840   179380355   120870348
'  0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170
'
' Random numbers from a Random object with seed = 456:
'  2044805024  1323311594  1087799997  1907260840   179380355   120870348
'  0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170
'
' Random numbers from a Random object with an auto-generated seed:
'  1920831619  1346865774  2006582766  1968819760   332463652   110770792
'  0.71326689  0.50383335  0.50446082  0.66312569  0.94517193  0.58059287
'
' Random numbers from a Random object with an auto-generated seed:
'   254927927  1205531663  1984850027   110020849  1438111494  1697714106
'  0.19383387  0.52067738  0.74162783  0.35063667  0.31247720  0.38773733
'
' Random numbers from a Random object with an auto-generated seed:
'   736507882  1064197552  1963117288   398705585   396275689  1137173773
'  0.67440084  0.53752140  0.97879483  0.03814764  0.67978248  0.19488178

// Example of the Random class constructors and Random.NextDouble( )
// method.
using System;
using System.Threading;

public class RandomObjectDemo
{
    // Generate random numbers from the specified Random object.
    static void RunIntNDoubleRandoms( Random randObj )
    {
        // Generate the first six random integers.
        for( int j = 0; j < 6; j++ )
            Console.Write( " {0,10} ", randObj.Next( ) );
        Console.WriteLine( );

        // Generate the first six random doubles.
        for( int j = 0; j < 6; j++ )
            Console.Write( " {0:F8} ", randObj.NextDouble( ) );
        Console.WriteLine( );
    }

    // Create a Random object with the specified seed.
    static void FixedSeedRandoms( int seed )
    {
        Console.WriteLine(
            "\nRandom numbers from a Random object with " +
            "seed = {0}:", seed );
        Random fixRand = new Random( seed );

        RunIntNDoubleRandoms( fixRand );
    }

    // Create a random object with a timer-generated seed.
    static void AutoSeedRandoms( )
    {
        // Wait to allow the timer to advance.
        Thread.Sleep( 1 );

        Console.WriteLine(
            "\nRandom numbers from a Random object " +
            "with an auto-generated seed:" );
        Random autoRand = new Random( );

        RunIntNDoubleRandoms( autoRand );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the Random class constructors and " +
            "Random.NextDouble( ) \n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create Random objects, and then generate and " +
            "display six integers and \nsix doubles from each.");

        FixedSeedRandoms( 123 );
        FixedSeedRandoms( 123 );

        FixedSeedRandoms( 456 );
        FixedSeedRandoms( 456 );

        AutoSeedRandoms( );
        AutoSeedRandoms( );
        AutoSeedRandoms( );
    }
}

/*
This example of the Random class constructors and Random.NextDouble( )
generates the following output.

Create Random objects, and then generate and display six integers and
six doubles from each.

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with an auto-generated seed:
  380213349   127379247  1969091178  1983029819  1963098450  1648433124
 0.08824121  0.41249688  0.36445811  0.05637512  0.62702451  0.49595560

Random numbers from a Random object with an auto-generated seed:
  861793304  2133528783  1947358439   124230908   921262645  1087892791
 0.56880819  0.42934091  0.60162512  0.74388610  0.99432979  0.30310005

Random numbers from a Random object with an auto-generated seed:
 1343373259  1992194672  1925625700   412915644  2026910487   527352458
 0.04937517  0.44618494  0.83879212  0.43139707  0.36163507  0.11024451
*/

// Example of the Random class constructors and Random::NextDouble( )
// method.
using namespace System;
using namespace System::Threading;

// Generate random numbers from the specified Random object.
void RunIntNDoubleRandoms( Random^ randObj )
{

   // Generate the first six random integers.
   for ( int j = 0; j < 6; j++ )
      Console::Write( " {0,10} ", randObj->Next() );
   Console::WriteLine();

   // Generate the first six random doubles.
   for ( int j = 0; j < 6; j++ )
      Console::Write( " {0:F8} ", randObj->NextDouble() );
   Console::WriteLine();
}

// Create a Random object with the specified seed.
void FixedSeedRandoms( int seed )
{
   Console::WriteLine( "\nRandom numbers from a Random object with seed = {0}:", seed );
   Random^ fixRand = gcnew Random( seed );
   RunIntNDoubleRandoms( fixRand );
}

// Create a random object with a timer-generated seed.
void AutoSeedRandoms()
{

   // Wait to allow the timer to advance.
   Thread::Sleep( 1 );
   Console::WriteLine( "\nRandom numbers from a Random object "
   "with an auto-generated seed:" );
   Random^ autoRand = gcnew Random;
   RunIntNDoubleRandoms( autoRand );
}

int main()
{
   Console::WriteLine( "This example of the Random class constructors and Random"
   "::NextDouble( ) \ngenerates the following output.\n" );
   Console::WriteLine( "Create Random objects, and then generate and "
   "display six integers and \nsix doubles from each." );
   FixedSeedRandoms( 123 );
   FixedSeedRandoms( 123 );
   FixedSeedRandoms( 456 );
   FixedSeedRandoms( 456 );
   AutoSeedRandoms();
   AutoSeedRandoms();
   AutoSeedRandoms();
}

/*
This example of the Random class constructors and Random::NextDouble( )
generates the following output.

Create Random objects, and then generate and display six integers and
six doubles from each.

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with an auto-generated seed:
 1624372556  1894939458   302472229   588108304    23919954  1085111949
 0.14595512  0.30162298  0.92267372  0.55707657  0.25430079  0.74143239

Random numbers from a Random object with an auto-generated seed:
 2105952511  1753605347   280739490   876793040  1129567796   524571616
 0.62652210  0.31846701  0.15984073  0.24458755  0.62160607  0.54857684

Random numbers from a Random object with an auto-generated seed:
  440048819  1612271236   259006751  1165477776    87731991  2111514930
 0.10708907  0.33531104  0.39700773  0.93209853  0.98891135  0.35572129
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Random 类
Random 成员
Random 重载
System 命名空间


Random 方法

Random 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Random 类

Random 类型公开以下成员。

名称 说明
页首

参考

Random 类
System 命名空间


Random ..::.Next 方法

Random
.
.
::
.
Next 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Random 类

返回随机数。

名称 说明
页首

参考

Random 类
Random 成员
System 命名空间


Random ..::.Next 方法

Random
.
.
::
.
Next 方法
Random 类

返回非负随机数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Next As Integer
public virtual int Next()
public:
virtual int Next()
abstract Next : unit -> int
override Next : unit -> int

返回值

类型： System Int32
大于等于零且小于 MaxValue 的 32 位带符号整数。

Random..::.Next 生成一个值范围在零与 Int32..::.MaxValue 之间的随机数。若要生成值范围在零与其他某个正数之间的随机数，请使用 Random..::.Next(Int32) 方法重载。若要生成在不同范围内的随机数，请使用 Random..::.Next(Int32, Int32) 方法重载。 Random..::.Next 生成一个值范围在零与 Int32..::.MaxValue 之间的随机数。若要生成值范围在零与其他某个正数之间的随机数，请使用 Random..::.Next(Int32) 方法重载。若要生成在不同范围内的随机数，请使用 Random..::.Next(Int32, Int32) 方法重载。 Random..::.Next 生成一个值范围在零与 Int32..::.MaxValue 之间的随机数。若要生成值范围在零与其他某个正数之间的随机数，请使用 Random..::.Next(Int32) 方法重载。若要生成在不同范围内的随机数，请使用 Random..::.Next(Int32, Int32) 方法重载。

对继承者的说明

从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，则在调用 Random..::.Next 方法的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 Random..::.Next 方法。 从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，则在调用 Random..::.Next 方法的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 Random..::.Next 方法。 从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，则在调用 Random..::.Next 方法的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 Random..::.Next 方法。 从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，则在调用 Random..::.Next 方法的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 Random..::.Next 方法。

下面的示例使用不同的 Next 方法重载生成随机整数。

' Example of the Random.Next( ) methods.
Imports System
Imports Microsoft.VisualBasic

Module  RandomNextDemo

    ' Generate random numbers with no bounds specified.
    Sub NoBoundsRandoms( seed As Integer )

        Console.WriteLine( vbCrLf & _
            "Random object, seed = {0}, no bounds:", seed )
        Dim randObj As New Random( seed )

        ' Generate six random integers from 0 to int.MaxValue.
        Dim j As Integer
        For j = 0 To 5
            Console.Write( "{0,11} ", randObj.Next( ) )
        Next j
        Console.WriteLine( )
    End Sub

    ' Generate random numbers with an upper bound specified.
    Sub UpperBoundRandoms( seed As Integer, upper As Integer )

        Console.WriteLine( vbCrLf & _
            "Random object, seed = {0}, upper bound = {1}:", _
            seed, upper )
        Dim randObj As New Random( seed )

        ' Generate six random integers from 0 to the upper bound.
        Dim j As Integer
        For j = 0 To 5
            Console.Write( "{0,11} ", randObj.Next( upper ) )
        Next j
        Console.WriteLine( )
    End Sub

    ' Generate random numbers with both bounds specified.
    Sub BothBoundsRandoms( _
        seed As Integer, lower As Integer, upper As Integer )

        Console.WriteLine( vbCrLf & _
            "Random object, seed = {0}, lower = {1}, " & _
            "upper = {2}:", seed, lower, upper )
        Dim randObj As New Random( seed )

        ' Generate six random integers from the lower to
        ' upper bounds.
        Dim j As Integer
        For j = 0 To 5
            Console.Write( "{0,11} ", _
                randObj.Next( lower, upper ) )
        Next j
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Random.Next( ) methods" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( _
            "Create Random objects all with the same seed " & _
            "and generate" & vbCrLf & "sequences of numbers " & _
            "with different bounds. Note the effect " & vbCrLf & _
            "that the various combinations " & _
            "of bounds have on the sequences." )

        NoBoundsRandoms( 234 )

        UpperBoundRandoms( 234, Int32.MaxValue )
        UpperBoundRandoms( 234, 2000000000 )
        UpperBoundRandoms( 234, 200000000 )

        BothBoundsRandoms( 234, 0, Int32.MaxValue )
        BothBoundsRandoms( 234, Int32.MinValue, Int32.MaxValue )
        BothBoundsRandoms( 234, -2000000000, 2000000000 )
        BothBoundsRandoms( 234, -200000000, 200000000 )
        BothBoundsRandoms( 234, -2000, 2000 )
    End Sub
End Module

' This example of the Random.Next( ) methods
' generates the following output.
'
' Create Random objects all with the same seed and generate
' sequences of numbers with different bounds. Note the effect
' that the various combinations of bounds have on the sequences.
'
' Random object, seed = 234, no bounds:
'  2091148258  1024955023   711273344  1081917183  1833298756   109460588
'
' Random object, seed = 234, upper bound = 2147483647:
'  2091148258  1024955023   711273344  1081917183  1833298756   109460588
'
' Random object, seed = 234, upper bound = 2000000000:
'  1947533580   954563751   662424922  1007613896  1707392518   101943116
'
' Random object, seed = 234, upper bound = 200000000:
'   194753358    95456375    66242492   100761389   170739251    10194311
'
' Random object, seed = 234, lower = 0, upper = 2147483647:
'  2091148258  1024955023   711273344  1081917183  1833298756   109460588
'
' Random object, seed = 234, lower = -2147483648, upper = 2147483647:
'  2034812868   -97573602  -724936960    16350718  1519113864 -1928562472
'
' Random object, seed = 234, lower = -2000000000, upper = 2000000000:
'  1895067160   -90872498  -675150156    15227793  1414785036 -1796113767
'
' Random object, seed = 234, lower = -200000000, upper = 200000000:
'   189506716    -9087250   -67515016     1522779   141478503  -179611377
'
' Random object, seed = 234, lower = -2000, upper = 2000:
'        1895         -91        -676          15        1414       -1797

// Example of the Random.Next( ) methods.
using System;

public class RandomNextDemo
{
    // Generate random numbers with no bounds specified.
    static void NoBoundsRandoms( int seed )
    {
        Console.WriteLine(
            "\nRandom object, seed = {0}, no bounds:", seed );
        Random randObj = new Random( seed );

        // Generate six random integers from 0 to int.MaxValue.
        for( int j = 0; j < 6; j++ )
            Console.Write( "{0,11} ", randObj.Next( ) );
        Console.WriteLine( );
    }

    // Generate random numbers with an upper bound specified.
    static void UpperBoundRandoms( int seed, int upper )
    {
        Console.WriteLine(
            "\nRandom object, seed = {0}, upper bound = {1}:",
            seed, upper );
        Random randObj = new Random( seed );

        // Generate six random integers from 0 to the upper bound.
        for( int j = 0; j < 6; j++ )
            Console.Write( "{0,11} ", randObj.Next( upper ) );
        Console.WriteLine( );
    }

    // Generate random numbers with both bounds specified.
    static void BothBoundsRandoms( int seed, int lower, int upper )
    {
        Console.WriteLine(
            "\nRandom object, seed = {0}, lower = {1}, " +
            "upper = {2}:", seed, lower, upper );
        Random randObj = new Random( seed );

        // Generate six random integers from the lower to
        // upper bounds.
        for( int j = 0; j < 6; j++ )
            Console.Write( "{0,11} ",
                randObj.Next( lower, upper) );
        Console.WriteLine( );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the Random.Next( ) methods\n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create Random objects all with the same seed and " +
            "generate\nsequences of numbers with different " +
            "bounds. Note the effect\nthat the various " +
            "combinations of bounds have on the sequences." );

        NoBoundsRandoms( 234 );

        UpperBoundRandoms( 234, Int32.MaxValue );
        UpperBoundRandoms( 234, 2000000000 );
        UpperBoundRandoms( 234, 200000000 );

        BothBoundsRandoms( 234, 0, Int32.MaxValue );
        BothBoundsRandoms( 234, Int32.MinValue, Int32.MaxValue );
        BothBoundsRandoms( 234, -2000000000, 2000000000 );
        BothBoundsRandoms( 234, -200000000, 200000000 );
        BothBoundsRandoms( 234, -2000, 2000 );
    }
}

/*
This example of the Random.Next( ) methods
generates the following output.

Create Random objects all with the same seed and generate
sequences of numbers with different bounds. Note the effect
that the various combinations of bounds have on the sequences.

Random object, seed = 234, no bounds:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2147483647:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2000000000:
 1947533580   954563751   662424922  1007613896  1707392518   101943116

Random object, seed = 234, upper bound = 200000000:
  194753358    95456375    66242492   100761389   170739251    10194311

Random object, seed = 234, lower = 0, upper = 2147483647:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, lower = -2147483648, upper = 2147483647:
 2034812868   -97573602  -724936960    16350718  1519113864 -1928562472

Random object, seed = 234, lower = -2000000000, upper = 2000000000:
 1895067160   -90872498  -675150156    15227793  1414785036 -1796113767

Random object, seed = 234, lower = -200000000, upper = 200000000:
  189506716    -9087250   -67515016     1522779   141478503  -179611377

Random object, seed = 234, lower = -2000, upper = 2000:
       1895         -91        -676          15        1414       -1797
*/

// Example of the Random::Next( ) methods.
using namespace System;

// Generate random numbers with no bounds specified.
void NoBoundsRandoms( int seed )
{
   Console::WriteLine( "\nRandom object, seed = {0}, no bounds:", seed );
   Random^ randObj = gcnew Random( seed );

   // Generate six random integers from 0 to int.MaxValue.
   for ( int j = 0; j < 6; j++ )
      Console::Write(  "{0,11} ", randObj->Next() );
   Console::WriteLine();
}

// Generate random numbers with an upper bound specified.
void UpperBoundRandoms( int seed, int upper )
{
   Console::WriteLine( "\nRandom object, seed = {0}, upper bound = {1}:", seed, upper );
   Random^ randObj = gcnew Random( seed );

   // Generate six random integers from 0 to the upper bound.
   for ( int j = 0; j < 6; j++ )
      Console::Write(  "{0,11} ", randObj->Next( upper ) );
   Console::WriteLine();
}

// Generate random numbers with both bounds specified.
void BothBoundsRandoms( int seed, int lower, int upper )
{
   Console::WriteLine( "\nRandom object, seed = {0}, lower = {1}, upper = {2}:", seed, lower, upper );
   Random^ randObj = gcnew Random( seed );

   // Generate six random integers from the lower to
   // upper bounds.
   for ( int j = 0; j < 6; j++ )
      Console::Write(  "{0,11} ", randObj->Next( lower, upper ) );
   Console::WriteLine();
}

int main()
{
   Console::WriteLine( "This example of the Random::Next( ) methods\n"
   "generates the following output.\n" );
   Console::WriteLine( "Create Random objects all with the same seed and "
   "generate\nsequences of numbers with different "
   "bounds. Note the effect\nthat the various "
   "combinations of bounds have on the sequences." );
   NoBoundsRandoms( 234 );
   UpperBoundRandoms( 234, Int32::MaxValue );
   UpperBoundRandoms( 234, 2000000000 );
   UpperBoundRandoms( 234, 200000000 );
   BothBoundsRandoms( 234, 0, Int32::MaxValue );
   BothBoundsRandoms( 234, Int32::MinValue, Int32::MaxValue );
   BothBoundsRandoms( 234, -2000000000, 2000000000 );
   BothBoundsRandoms( 234, -200000000, 200000000 );
   BothBoundsRandoms( 234, -2000, 2000 );
}

/*
This example of the Random::Next( ) methods
generates the following output.

Create Random objects all with the same seed and generate
sequences of numbers with different bounds. Note the effect
that the various combinations of bounds have on the sequences.

Random object, seed = 234, no bounds:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2147483647:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2000000000:
 1947533580   954563751   662424922  1007613896  1707392518   101943116

Random object, seed = 234, upper bound = 200000000:
  194753358    95456375    66242492   100761389   170739251    10194311

Random object, seed = 234, lower = 0, upper = 2147483647:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, lower = -2147483648, upper = 2147483647:
 2034812868   -97573602  -724936960    16350718  1519113864 -1928562472

Random object, seed = 234, lower = -2000000000, upper = 2000000000:
 1895067160   -90872498  -675150156    15227793  1414785036 -1796113767

Random object, seed = 234, lower = -200000000, upper = 200000000:
  189506716    -9087250   -67515016     1522779   141478503  -179611377

Random object, seed = 234, lower = -2000, upper = 2000:
       1895         -91        -676          15        1414       -1797
*/

下面的示例从 Random 派生一个类，以生成分布与由基类的 Sample 方法生成的统一分布不同的随机数序列。该示例通过重写 Sample 方法来提供随机数的分布，并通过重写 Random..::.Next 方法来使用随机数序列。 下面的示例从 Random 派生一个类，以生成分布与由基类的 Sample 方法生成的统一分布不同的随机数序列。该示例通过重写 Sample 方法来提供随机数的分布，并通过重写 Random..::.Next 方法来使用随机数序列。

' This derived class converts the uniformly distributed random
' numbers generated by base.Sample( ) to another distribution.
Public Class RandomProportional
   Inherits Random

   ' The Sample method generates a distribution proportional to the value
   ' of the random numbers, in the range [0.0, 1.0].
   Protected Overrides Function Sample( ) As Double
      Return Math.Sqrt( MyBase.Sample( ) )
   End Function

   Public Overrides Function [Next]() As Integer
      Return Sample() * Integer.MaxValue
   End Function
End Class

Module RandomSampleDemo
    Sub Main( )
        Const rows As Integer = 4, cols As Integer = 6
        Const runCount As Integer = 1000000
        Const distGroupCount As Integer = 10
        Const intGroupSize As Double = _
            ( CDbl( Integer.MaxValue ) + 1.0 ) / _
            CDbl( distGroupCount )

        Dim randObj As New RandomProportional( )

        Dim intCounts( distGroupCount ) As Integer
        Dim realCounts( distGroupCount ) As Integer
        Dim i As Integer, j As Integer

        Console.WriteLine( vbCrLf & _
            "The derived RandomProportional class overrides " & _
            "the Sample method to " & vbCrLf & _
            "generate random numbers in the range " & _
            "[0.0, 1.0]. The distribution " & vbCrLf & _
            "of the numbers is proportional to their numeric " & _
            "values. For example, " & vbCrLf & _
            "numbers are generated in the vicinity of 0.75 " & _
            "with three times " & vbCrLf & "the " & _
            "probability of those generated near 0.25." )
        Console.WriteLine( vbCrLf & _
            "Random doubles generated with the NextDouble( ) " & _
            "method:" & vbCrLf )

        ' Generate and display [rows * cols] random doubles.
        For i = 0 To rows - 1
            For j = 0 To cols - 1
                Console.Write( "{0,12:F8}", randObj.NextDouble( ) )
            Next j
            Console.WriteLine( )
        Next i

        Console.WriteLine( vbCrLf & _
            "Random integers generated with the Next( ) " & _
            "method:" & vbCrLf )

        ' Generate and display [rows * cols] random integers.
        For i = 0 To rows - 1
            For j = 0 To cols - 1
                Console.Write( "{0,12}", randObj.Next( ) )
            Next j
            Console.WriteLine( )
        Next i

        Console.WriteLine( vbCrLf & _
            "To demonstrate the proportional distribution, " & _
            "{0:N0} random " & vbCrLf & _
            "integers and doubles are grouped into {1} " & _
            "equal value ranges. This " & vbCrLf & _
            "is the count of values in each range:" & vbCrLf, _
            runCount, distGroupCount )
        Console.WriteLine( "{0,21}{1,10}{2,20}{3,10}", _
            "Integer Range", "Count", "Double Range", "Count" )
        Console.WriteLine( "{0,21}{1,10}{2,20}{3,10}", _
            "-------------", "-----", "------------", "-----" )

        ' Generate random integers and doubles, and then count
        ' them by group.
        For i = 0 To runCount - 1
            intCounts( Fix( CDbl( randObj.Next( ) ) / _
                intGroupSize ) ) += 1
            realCounts( Fix( randObj.NextDouble( ) * _
                CDbl( distGroupCount ) ) ) += 1
        Next i

        ' Display the count of each group.
        For i = 0 To distGroupCount - 1
            Console.WriteLine( _
                "{0,10}-{1,10}{2,10:N0}{3,12:N5}-{4,7:N5}{5,10:N0}", _
                Fix( CDbl( i ) * intGroupSize ), _
                Fix( CDbl( i + 1 ) * intGroupSize - 1.0 ), _
                intCounts( i ), _
                CDbl( i ) / CDbl( distGroupCount), _
                CDbl( i + 1 ) / CDbl( distGroupCount ), _
                realCounts( i ) )
        Next i
    End Sub
End Module
' This example of Random.Sample() generates the following output:
'    The derived RandomProportional class overrides the Sample method to
'    generate random numbers in the range [0.0, 1.0]. The distribution
'    of the numbers is proportional to their numeric values. For example,
'    numbers are generated in the vicinity of 0.75 with three times
'    the probability of those generated near 0.25.
'
'    Random doubles generated with the NextDouble( ) method:
'
'      0.28377004  0.75920598  0.33430371  0.66720626  0.97080243  0.27353772
'      0.17787962  0.54618410  0.08145080  0.56286100  0.99002910  0.64898614
'      0.27673277  0.99455281  0.93778966  0.76162002  0.70533771  0.44375798
'      0.55939883  0.87383136  0.66465779  0.77392566  0.42393411  0.82409159
'
'    Random integers generated with the Next( ) method:
'
'      1364479914  1230312341  1657373812  1526222928   988564704   700078020
'      1801013705  1541517421  1146312560   338318389  1558995993  2027260859
'       884520932  1320070465   570200106  1027684711   943035246  2088689333
'       630809089  1705728475  2140787648  2097858166  1863010875  1386804198
'
'    To demonstrate the proportional distribution, 1,000,000 random
'    integers and doubles are grouped into 10 equal value ranges. This
'    is the count of values in each range:
'
'            Integer Range     Count        Double Range     Count
'            -------------     -----        ------------     -----
'             0- 214748363     9,892     0.00000-0.10000     9,928
'     214748364- 429496728    30,341     0.10000-0.20000    30,101
'     429496729- 644245093    49,958     0.20000-0.30000    49,964
'     644245094- 858993458    70,099     0.30000-0.40000    70,213
'     858993459-1073741823    90,801     0.40000-0.50000    89,553
'    1073741824-1288490187   109,699     0.50000-0.60000   109,427
'    1288490188-1503238552   129,438     0.60000-0.70000   130,339
'    1503238553-1717986917   149,886     0.70000-0.80000   150,000
'    1717986918-1932735282   170,338     0.80000-0.90000   170,128
'    1932735283-2147483647   189,548     0.90000-1.00000   190,347

using System;

// This derived class converts the uniformly distributed random
// numbers generated by base.Sample( ) to another distribution.
public class RandomProportional : Random
{
    // The Sample method generates a distribution proportional to the value
    // of the random numbers, in the range [0.0, 1.0].
    protected override double Sample( )
    {
        return Math.Sqrt( base.Sample( ) );
    }

    public override int Next()
    {
       return (int) (Sample() * int.MaxValue);
    }
}

public class RandomSampleDemo
{
    static void Main( )
    {
        const int rows = 4, cols = 6;
        const int runCount = 1000000;
        const int distGroupCount = 10;
        const double intGroupSize =
            ( (double)int.MaxValue + 1.0 ) / (double)distGroupCount;

        RandomProportional randObj = new RandomProportional( );

        int[ ]      intCounts = new int[ distGroupCount ];
        int[ ]      realCounts = new int[ distGroupCount ];

        Console.WriteLine(
            "\nThe derived RandomProportional class overrides " +
            "the Sample method to \ngenerate random numbers " +
            "in the range [0.0, 1.0]. The distribution \nof " +
            "the numbers is proportional to their numeric values. " +
            "For example, \nnumbers are generated in the " +
            "vicinity of 0.75 with three times the \n" +
            "probability of those generated near 0.25." );
        Console.WriteLine(
            "\nRandom doubles generated with the NextDouble( ) " +
            "method:\n" );

        // Generate and display [rows * cols] random doubles.
        for( int i = 0; i < rows; i++ )
        {
            for( int j = 0; j < cols; j++ )
                Console.Write( "{0,12:F8}", randObj.NextDouble( ) );
            Console.WriteLine( );
        }

        Console.WriteLine(
            "\nRandom integers generated with the Next( ) " +
            "method:\n" );

        // Generate and display [rows * cols] random integers.
        for( int i = 0; i < rows; i++ )
        {
            for( int j = 0; j < cols; j++ )
                Console.Write( "{0,12}", randObj.Next( ) );
            Console.WriteLine( );
        }

        Console.WriteLine(
            "\nTo demonstrate the proportional distribution, " +
            "{0:N0} random \nintegers and doubles are grouped " +
            "into {1} equal value ranges. This \n" +
            "is the count of values in each range:\n",
            runCount, distGroupCount );
        Console.WriteLine(
            "{0,21}{1,10}{2,20}{3,10}", "Integer Range",
            "Count", "Double Range", "Count" );
        Console.WriteLine(
            "{0,21}{1,10}{2,20}{3,10}", "-------------",
            "-----", "------------", "-----" );

        // Generate random integers and doubles, and then count
        // them by group.
        for( int i = 0; i < runCount; i++ )
        {
            intCounts[ (int)( (double)randObj.Next( ) /
                intGroupSize ) ]++;
            realCounts[ (int)( randObj.NextDouble( ) *
                (double)distGroupCount ) ]++;
        }

        // Display the count of each group.
        for( int i = 0; i < distGroupCount; i++ )
            Console.WriteLine(
                "{0,10}-{1,10}{2,10:N0}{3,12:N5}-{4,7:N5}{5,10:N0}",
                (int)( (double)i * intGroupSize ),
                (int)( (double)( i + 1 ) * intGroupSize - 1.0 ),
                intCounts[ i ],
                ( (double)i ) / (double)distGroupCount,
                ( (double)( i + 1 ) ) / (double)distGroupCount,
                realCounts[ i ] );
    }
}

/*
This example of Random.Sample() displays the following output:

   The derived RandomProportional class overrides the Sample method to
   generate random numbers in the range [0.0, 1.0). The distribution
   of the numbers is proportional to the number values. For example,
   numbers are generated in the vicinity of 0.75 with three times the
   probability of those generated near 0.25.

   Random doubles generated with the NextDouble( ) method:

     0.59455719  0.17589882  0.83134398  0.35795862  0.91467727  0.54022658
     0.93716947  0.54817519  0.94685080  0.93705478  0.18582318  0.71272428
     0.77708682  0.95386216  0.70412393  0.86099417  0.08275804  0.79108316
     0.71019941  0.84205103  0.41685082  0.58186880  0.89492302  0.73067715

   Random integers generated with the Next( ) method:

     1570755704  1279192549  1747627711  1705700211  1372759203  1849655615
     2046235980  1210843924  1554274149  1307936697  1480207570  1057595022
      337854215   844109928  2028310798  1386669369  2073517658  1291729809
     1537248240  1454198019  1934863511  1640004334  2032620207   534654791

   To demonstrate the proportional distribution, 1,000,000 random
   integers and doubles are grouped into 10 equal value ranges. This
   is the count of values in each range:

           Integer Range     Count        Double Range     Count
           -------------     -----        ------------     -----
            0- 214748363    10,079     0.00000-0.10000    10,148
    214748364- 429496728    29,835     0.10000-0.20000    29,849
    429496729- 644245093    49,753     0.20000-0.30000    49,948
    644245094- 858993458    70,325     0.30000-0.40000    69,656
    858993459-1073741823    89,906     0.40000-0.50000    90,337
   1073741824-1288490187   109,868     0.50000-0.60000   110,225
   1288490188-1503238552   130,388     0.60000-0.70000   129,986
   1503238553-1717986917   149,231     0.70000-0.80000   150,428
   1717986918-1932735282   170,234     0.80000-0.90000   169,610
   1932735283-2147483647   190,381     0.90000-1.00000   189,813
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Random 类
Random 成员
Next 重载
System 命名空间
Int32


Random ..::.Next 方法 (Int32)

Random
.
.
::
.
Next 方法 (Int32)
Random 类

返回一个小于所指定最大值的非负随机数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Next ( _
    maxValue As Integer _
) As Integer
public virtual int Next(
    int maxValue
)
public:
virtual int Next(
    int maxValue
)
abstract Next :
        maxValue:int -> int
override Next :
        maxValue:int -> int

参数

maxValue
类型： System Int32
要生成的随机数的上限（随机数不能取该上限值）。maxValue 必须大于或等于零。 要生成的随机数的上限（随机数不能取该上限值）。maxValue 必须大于或等于零。

返回值

类型： System Int32
大于等于零且小于 maxValue 的 32 位带符号整数，即：返回值的范围通常包括零但不包括 maxValue。不过，如果 maxValue 等于零，则返回 maxValue。 大于等于零且小于 maxValue 的 32 位带符号整数，即：返回值的范围通常包括零但不包括 maxValue。不过，如果 maxValue 等于零，则返回 maxValue。
异常 | 条件
ArgumentOutOfRangeException | maxValue 小于零。

下面的示例使用不同的 Next 方法重载生成随机整数。

' Example of the Random.Next( ) methods.
Imports System
Imports Microsoft.VisualBasic

Module  RandomNextDemo

    ' Generate random numbers with no bounds specified.
    Sub NoBoundsRandoms( seed As Integer )

        Console.WriteLine( vbCrLf & _
            "Random object, seed = {0}, no bounds:", seed )
        Dim randObj As New Random( seed )

        ' Generate six random integers from 0 to int.MaxValue.
        Dim j As Integer
        For j = 0 To 5
            Console.Write( "{0,11} ", randObj.Next( ) )
        Next j
        Console.WriteLine( )
    End Sub

    ' Generate random numbers with an upper bound specified.
    Sub UpperBoundRandoms( seed As Integer, upper As Integer )

        Console.WriteLine( vbCrLf & _
            "Random object, seed = {0}, upper bound = {1}:", _
            seed, upper )
        Dim randObj As New Random( seed )

        ' Generate six random integers from 0 to the upper bound.
        Dim j As Integer
        For j = 0 To 5
            Console.Write( "{0,11} ", randObj.Next( upper ) )
        Next j
        Console.WriteLine( )
    End Sub

    ' Generate random numbers with both bounds specified.
    Sub BothBoundsRandoms( _
        seed As Integer, lower As Integer, upper As Integer )

        Console.WriteLine( vbCrLf & _
            "Random object, seed = {0}, lower = {1}, " & _
            "upper = {2}:", seed, lower, upper )
        Dim randObj As New Random( seed )

        ' Generate six random integers from the lower to
        ' upper bounds.
        Dim j As Integer
        For j = 0 To 5
            Console.Write( "{0,11} ", _
                randObj.Next( lower, upper ) )
        Next j
        Console.WriteLine( )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Random.Next( ) methods" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( _
            "Create Random objects all with the same seed " & _
            "and generate" & vbCrLf & "sequences of numbers " & _
            "with different bounds. Note the effect " & vbCrLf & _
            "that the various combinations " & _
            "of bounds have on the sequences." )

        NoBoundsRandoms( 234 )

        UpperBoundRandoms( 234, Int32.MaxValue )
        UpperBoundRandoms( 234, 2000000000 )
        UpperBoundRandoms( 234, 200000000 )

        BothBoundsRandoms( 234, 0, Int32.MaxValue )
        BothBoundsRandoms( 234, Int32.MinValue, Int32.MaxValue )
        BothBoundsRandoms( 234, -2000000000, 2000000000 )
        BothBoundsRandoms( 234, -200000000, 200000000 )
        BothBoundsRandoms( 234, -2000, 2000 )
    End Sub
End Module

' This example of the Random.Next( ) methods
' generates the following output.
'
' Create Random objects all with the same seed and generate
' sequences of numbers with different bounds. Note the effect
' that the various combinations of bounds have on the sequences.
'
' Random object, seed = 234, no bounds:
'  2091148258  1024955023   711273344  1081917183  1833298756   109460588
'
' Random object, seed = 234, upper bound = 2147483647:
'  2091148258  1024955023   711273344  1081917183  1833298756   109460588
'
' Random object, seed = 234, upper bound = 2000000000:
'  1947533580   954563751   662424922  1007613896  1707392518   101943116
'
' Random object, seed = 234, upper bound = 200000000:
'   194753358    95456375    66242492   100761389   170739251    10194311
'
' Random object, seed = 234, lower = 0, upper = 2147483647:
'  2091148258  1024955023   711273344  1081917183  1833298756   109460588
'
' Random object, seed = 234, lower = -2147483648, upper = 2147483647:
'  2034812868   -97573602  -724936960    16350718  1519113864 -1928562472
'
' Random object, seed = 234, lower = -2000000000, upper = 2000000000:
'  1895067160   -90872498  -675150156    15227793  1414785036 -1796113767
'
' Random object, seed = 234, lower = -200000000, upper = 200000000:
'   189506716    -9087250   -67515016     1522779   141478503  -179611377
'
' Random object, seed = 234, lower = -2000, upper = 2000:
'        1895         -91        -676          15        1414       -1797

// Example of the Random.Next( ) methods.
using System;

public class RandomNextDemo
{
    // Generate random numbers with no bounds specified.
    static void NoBoundsRandoms( int seed )
    {
        Console.WriteLine(
            "\nRandom object, seed = {0}, no bounds:", seed );
        Random randObj = new Random( seed );

        // Generate six random integers from 0 to int.MaxValue.
        for( int j = 0; j < 6; j++ )
            Console.Write( "{0,11} ", randObj.Next( ) );
        Console.WriteLine( );
    }

    // Generate random numbers with an upper bound specified.
    static void UpperBoundRandoms( int seed, int upper )
    {
        Console.WriteLine(
            "\nRandom object, seed = {0}, upper bound = {1}:",
            seed, upper );
        Random randObj = new Random( seed );

        // Generate six random integers from 0 to the upper bound.
        for( int j = 0; j < 6; j++ )
            Console.Write( "{0,11} ", randObj.Next( upper ) );
        Console.WriteLine( );
    }

    // Generate random numbers with both bounds specified.
    static void BothBoundsRandoms( int seed, int lower, int upper )
    {
        Console.WriteLine(
            "\nRandom object, seed = {0}, lower = {1}, " +
            "upper = {2}:", seed, lower, upper );
        Random randObj = new Random( seed );

        // Generate six random integers from the lower to
        // upper bounds.
        for( int j = 0; j < 6; j++ )
            Console.Write( "{0,11} ",
                randObj.Next( lower, upper) );
        Console.WriteLine( );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the Random.Next( ) methods\n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create Random objects all with the same seed and " +
            "generate\nsequences of numbers with different " +
            "bounds. Note the effect\nthat the various " +
            "combinations of bounds have on the sequences." );

        NoBoundsRandoms( 234 );

        UpperBoundRandoms( 234, Int32.MaxValue );
        UpperBoundRandoms( 234, 2000000000 );
        UpperBoundRandoms( 234, 200000000 );

        BothBoundsRandoms( 234, 0, Int32.MaxValue );
        BothBoundsRandoms( 234, Int32.MinValue, Int32.MaxValue );
        BothBoundsRandoms( 234, -2000000000, 2000000000 );
        BothBoundsRandoms( 234, -200000000, 200000000 );
        BothBoundsRandoms( 234, -2000, 2000 );
    }
}

/*
This example of the Random.Next( ) methods
generates the following output.

Create Random objects all with the same seed and generate
sequences of numbers with different bounds. Note the effect
that the various combinations of bounds have on the sequences.

Random object, seed = 234, no bounds:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2147483647:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2000000000:
 1947533580   954563751   662424922  1007613896  1707392518   101943116

Random object, seed = 234, upper bound = 200000000:
  194753358    95456375    66242492   100761389   170739251    10194311

Random object, seed = 234, lower = 0, upper = 2147483647:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, lower = -2147483648, upper = 2147483647:
 2034812868   -97573602  -724936960    16350718  1519113864 -1928562472

Random object, seed = 234, lower = -2000000000, upper = 2000000000:
 1895067160   -90872498  -675150156    15227793  1414785036 -1796113767

Random object, seed = 234, lower = -200000000, upper = 200000000:
  189506716    -9087250   -67515016     1522779   141478503  -179611377

Random object, seed = 234, lower = -2000, upper = 2000:
       1895         -91        -676          15        1414       -1797
*/

// Example of the Random::Next( ) methods.
using namespace System;

// Generate random numbers with no bounds specified.
void NoBoundsRandoms( int seed )
{
   Console::WriteLine( "\nRandom object, seed = {0}, no bounds:", seed );
   Random^ randObj = gcnew Random( seed );

   // Generate six random integers from 0 to int.MaxValue.
   for ( int j = 0; j < 6; j++ )
      Console::Write(  "{0,11} ", randObj->Next() );
   Console::WriteLine();
}

// Generate random numbers with an upper bound specified.
void UpperBoundRandoms( int seed, int upper )
{
   Console::WriteLine( "\nRandom object, seed = {0}, upper bound = {1}:", seed, upper );
   Random^ randObj = gcnew Random( seed );

   // Generate six random integers from 0 to the upper bound.
   for ( int j = 0; j < 6; j++ )
      Console::Write(  "{0,11} ", randObj->Next( upper ) );
   Console::WriteLine();
}

// Generate random numbers with both bounds specified.
void BothBoundsRandoms( int seed, int lower, int upper )
{
   Console::WriteLine( "\nRandom object, seed = {0}, lower = {1}, upper = {2}:", seed, lower, upper );
   Random^ randObj = gcnew Random( seed );

   // Generate six random integers from the lower to
   // upper bounds.
   for ( int j = 0; j < 6; j++ )
      Console::Write(  "{0,11} ", randObj->Next( lower, upper ) );
   Console::WriteLine();
}

int main()
{
   Console::WriteLine( "This example of the Random::Next( ) methods\n"
   "generates the following output.\n" );
   Console::WriteLine( "Create Random objects all with the same seed and "
   "generate\nsequences of numbers with different "
   "bounds. Note the effect\nthat the various "
   "combinations of bounds have on the sequences." );
   NoBoundsRandoms( 234 );
   UpperBoundRandoms( 234, Int32::MaxValue );
   UpperBoundRandoms( 234, 2000000000 );
   UpperBoundRandoms( 234, 200000000 );
   BothBoundsRandoms( 234, 0, Int32::MaxValue );
   BothBoundsRandoms( 234, Int32::MinValue, Int32::MaxValue );
   BothBoundsRandoms( 234, -2000000000, 2000000000 );
   BothBoundsRandoms( 234, -200000000, 200000000 );
   BothBoundsRandoms( 234, -2000, 2000 );
}

/*
This example of the Random::Next( ) methods
generates the following output.

Create Random objects all with the same seed and generate
sequences of numbers with different bounds. Note the effect
that the various combinations of bounds have on the sequences.

Random object, seed = 234, no bounds:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2147483647:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, upper bound = 2000000000:
 1947533580   954563751   662424922  1007613896  1707392518   101943116

Random object, seed = 234, upper bound = 200000000:
  194753358    95456375    66242492   100761389   170739251    10194311

Random object, seed = 234, lower = 0, upper = 2147483647:
 2091148258  1024955023   711273344  1081917183  1833298756   109460588

Random object, seed = 234, lower = -2147483648, upper = 2147483647:
 2034812868   -97573602  -724936960    16350718  1519113864 -1928562472

Random object, seed = 234, lower = -2000000000, upper = 2000000000:
 1895067160   -90872498  -675150156    15227793  1414785036 -1796113767

Random object, seed = 234, lower = -200000000, upper = 200000000:
  189506716    -9087250   -67515016     1522779   141478503  -179611377

Random object, seed = 234, lower = -2000, upper = 2000:
       1895         -91        -676          15        1414       -1797
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Random 类
Random 成员
Next 重载
System 命名空间
Int32


Random ..::.Next 方法 (Int32, Int32)

Random
.
.
::
.
Next 方法 (Int32, Int32)
Random 类

返回一个指定范围内的随机数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Next ( _
    minValue As Integer, _
    maxValue As Integer _
) As Integer
public virtual int Next(
    int minValue,
    int maxValue
)
public:
virtual int Next(
    int minValue,
    int maxValue
)
abstract Next :
        minValue:int *
        maxValue:int -> int
override Next :
        minValue:int *
        maxValue:int -> int

参数

minValue
类型： System Int32
返回的随机数的下界（随机数可取该下界值）。
maxValue
类型： System Int32
返回的随机数的上界（随机数不能取该上界值）。maxValue 必须大于或等于 minValue。 返回的随机数的上界（随机数不能取该上界值）。maxValue 必须大于或等于 minValue。

返回值

类型： System Int32
一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数，即：返回的值范围包括 minValue 但不包括 maxValue。如果 minValue 等于 maxValue，则返回 minValue。 一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数，即：返回的值范围包括 minValue 但不包括 maxValue。如果 minValue 等于 maxValue，则返回 minValue。
异常 | 条件
ArgumentOutOfRangeException | minValue 大于 maxValue。

不像 Next 方法的其他重载只返回非负值，该方法可以返回负的随机整数。

对继承者的说明

从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，并且 minValue 与 maxValue 参数的差大于 Int32..::.MaxValue，则在调用 Random..::.Next(Int32, Int32) 方法重载的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 Random..::.Next(Int32, Int32) 方法重载。 从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，并且 minValue 与 maxValue 参数的差大于 Int32..::.MaxValue，则在调用 Random..::.Next(Int32, Int32) 方法重载的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 Random..::.Next(Int32, Int32) 方法重载。 从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，并且 minValue 与 maxValue 参数的差大于 Int32..::.MaxValue，则在调用 Random..::.Next(Int32, Int32) 方法重载的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 Random..::.Next(Int32, Int32) 方法重载。 从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，并且 minValue 与 maxValue 参数的差大于 Int32..::.MaxValue，则在调用 Random..::.Next(Int32, Int32) 方法重载的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 Random..::.Next(Int32, Int32) 方法重载。

下面的示例使用 Random..::.Next(Int32, Int32) 方法按三个不同范围生成随机整数。请注意从该示例确切输出取决于传递给 Random 类构造函数的系统提供的种子值。 下面的示例使用 Random..::.Next(Int32, Int32) 方法按三个不同范围生成随机整数。请注意从该示例确切输出取决于传递给 Random 类构造函数的系统提供的种子值。

Module Example
   Public Sub Main()
      Dim rnd As New Random()

      Console.WriteLine("20 random integers from -100 to 100:")
      For ctr As Integer = 1 To 20
         Console.Write("{0,6}", rnd.Next(-100, 101))
         If ctr Mod 5 = 0 Then Console.WriteLine()
      Next
      Console.WriteLine()

      Console.WriteLine("20 random integers from 1000 to 10000:")
      For ctr As Integer = 1 To 20
         Console.Write("{0,8}", rnd.Next(1000, 10001))
         If ctr Mod 5 = 0 Then Console.WriteLine()
      Next
      Console.WriteLine()

      Console.WriteLine("20 random integers from 1 to 10:")
      For ctr As Integer = 1 To 20
         Console.Write("{0,6}", rnd.Next(1, 11))
         If ctr Mod 5 = 0 Then Console.WriteLine()
      Next
   End Sub
End Module
' The example displays output similar to the following:
'       20 random integers from -100 to 100:
'           65   -95   -10    90   -35
'          -83   -16   -15   -19    41
'          -67   -93    40    12    62
'          -80   -95    67   -81   -21
'
'       20 random integers from 1000 to 10000:
'           4857    9897    4405    6606    1277
'           9238    9113    5151    8710    1187
'           2728    9746    1719    3837    3736
'           8191    6819    4923    2416    3028
'
'       20 random integers from 1 to 10:
'            9     8     5     9     9
'            9     1     2     3     8
'            1     4     8    10     5
'            9     7     9    10     5

using System;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();

      Console.WriteLine("\n20 random integers from -100 to 100:");
      for (int ctr = 1; ctr <= 20; ctr++)
      {
         Console.Write("{0,6}", rnd.Next(-100, 101));
         if (ctr % 5 == 0) Console.WriteLine();
      }

      Console.WriteLine("\n20 random integers from 1000 to 10000:");
      for (int ctr = 1; ctr <= 20; ctr++)
      {
         Console.Write("{0,8}", rnd.Next(1000, 10001));
         if (ctr % 5 == 0) Console.WriteLine();
      }

      Console.WriteLine("\n20 random integers from 1 to 10:");
      for (int ctr = 1; ctr <= 20; ctr++)
      {
         Console.Write("{0,6}", rnd.Next(1, 11));
         if (ctr % 5 == 0) Console.WriteLine();
      }
   }
}
// The example displays output similar to the following:
//       20 random integers from -100 to 100:
//           65   -95   -10    90   -35
//          -83   -16   -15   -19    41
//          -67   -93    40    12    62
//          -80   -95    67   -81   -21
//
//       20 random integers from 1000 to 10000:
//           4857    9897    4405    6606    1277
//           9238    9113    5151    8710    1187
//           2728    9746    1719    3837    3736
//           8191    6819    4923    2416    3028
//
//       20 random integers from 1 to 10:
//            9     8     5     9     9
//            9     1     2     3     8
//            1     4     8    10     5
//            9     7     9    10     5

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Random 类
Random 成员
Next 重载
System 命名空间
Int32


Random ..::.NextBytes 方法

Random
.
.
::
.
NextBytes 方法
Random 类

用随机数填充指定字节数组的元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub NextBytes ( _
    buffer As Byte() _
)
public virtual void NextBytes(
    byte[] buffer
)
public:
virtual void NextBytes(
    array<unsigned char>^ buffer
)
abstract NextBytes :
        buffer:byte[] -> unit
override NextBytes :
        buffer:byte[] -> unit

参数

buffer
类型：
array<
System Byte
>
[]
()
[]

包含随机数的字节数组。
异常 | 条件
ArgumentNullException | buffer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

字节数组的每个元素均设置为一个大于等于零而小于或等于 MaxValue 的随机数。

例如，要生成适合于创建随机密码的加密安全随机数，请使用如 RNGCryptoServiceProvider..::.GetBytes 这样的方法。

对继承者的说明

从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，则在调用 NextBytes 方法的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 NextBytes 方法。 从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，则在调用 NextBytes 方法的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 NextBytes 方法。 从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，则在调用 NextBytes 方法的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 NextBytes 方法。 从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，则在调用 NextBytes 方法的基类实现时将不使用由 Sample 方法的派生类实现提供的分布。而是使用由 Random 基类返回的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法，还必须重写 NextBytes 方法。

下面的示例演示如何使用 NextBytes 方法用随机字节值填充字节数组。

Dim rnd As New Random()
Dim b(10) As Byte
rnd.NextBytes(b)
Console.WriteLine("The Random bytes are: ")
Dim i As Integer
For i = 0 To 9
    Console.Write(i)
    Console.Write(":")
    Console.WriteLine(b(i))
Next i

Random rnd = new Random();
Byte[] b = new Byte[10];
rnd.NextBytes(b);
Console.WriteLine("The Random bytes are: ");
for (int i = 0; i < 10; i++) {
    Console.Write(i);
    Console.Write(":");
    Console.WriteLine(b[i]);
}

#using <System.DLL>

using namespace System;
int main()
{

   Random^ rnd = gcnew Random;
   array<unsigned char>^b = gcnew array<unsigned char>(10);
   rnd->NextBytes( b );
   Console::WriteLine( "The Random bytes are: " );
   for ( int i = 0; i < 10; i++ )
   {
      Console::Write( i );
      Console::Write( ":" );
      Console::WriteLine( b[ i ] );

   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Random 类
Random 成员
System 命名空间
Byte


Random ..::.NextDouble 方法

Random
.
.
::
.
NextDouble 方法
Random 类

返回一个介于 0.0 和 1.0 之间的随机数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function NextDouble As Double
public virtual double NextDouble()
public:
virtual double NextDouble()
abstract NextDouble : unit -> float
override NextDouble : unit -> float

返回值

类型： System Double
大于等于 0.0 并且小于 1.0 的双精度浮点数。

此方法是受保护的方法 Sample 的公共版本。

下面的示例使用 NextDouble 方法生成随机双精度数的序列。

' Example of the Random class constructors and Random.NextDouble( )
' method.
Imports System.Threading

Module RandomObjectDemo

    ' Generate random numbers from the specified Random object.
    Sub RunIntNDoubleRandoms( randObj As Random )

        ' Generate the first six random integers.
        Dim j As Integer
        For j = 0 To 5
            Console.Write( " {0,10} ", randObj.Next( ) )
        Next j
        Console.WriteLine( )

        ' Generate the first six random doubles.
        For j = 0 To 5
            Console.Write( " {0:F8} ", randObj.NextDouble( ) )
        Next j
        Console.WriteLine( )
    End Sub

    ' Create a Random object with the specified seed.
    Sub FixedSeedRandoms( seed As Integer )

        Console.WriteLine( vbCrLf & _
            "Random numbers from a Random object with " & _
            "seed = {0}:", seed )
        Dim fixRand As New Random( seed )

        RunIntNDoubleRandoms( fixRand )
    End Sub

    ' Create a random object with a timer-generated seed.
    Sub AutoSeedRandoms( )

        ' Wait to allow the timer to advance.
        Thread.Sleep( 1 )

        Console.WriteLine( vbCrLf & _
            "Random numbers from a Random object " & _
            "with an auto-generated seed:" )
        Dim autoRand As New Random( )

        RunIntNDoubleRandoms( autoRand )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the Random class constructors " & _
            "and Random.NextDouble( ) " & vbCrLf & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( "Create Random " & _
            "objects, and then generate and display six " & _
            "integers and " & vbCrLf & "six doubles from each." )

        FixedSeedRandoms( 123 )
        FixedSeedRandoms( 123 )

        FixedSeedRandoms( 456 )
        FixedSeedRandoms( 456 )

        AutoSeedRandoms( )
        AutoSeedRandoms( )
        AutoSeedRandoms( )
    End Sub
End Module

' This example of the Random class constructors and Random.NextDouble( )
' generates the following output.
'
' Create Random objects, and then generate and display six integers and
' six doubles from each.
'
' Random numbers from a Random object with seed = 123:
'  2114319875  1949518561  1596751841  1742987178  1586516133   103755708
'  0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146
'
' Random numbers from a Random object with seed = 123:
'  2114319875  1949518561  1596751841  1742987178  1586516133   103755708
'  0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146
'
' Random numbers from a Random object with seed = 456:
'  2044805024  1323311594  1087799997  1907260840   179380355   120870348
'  0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170
'
' Random numbers from a Random object with seed = 456:
'  2044805024  1323311594  1087799997  1907260840   179380355   120870348
'  0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170
'
' Random numbers from a Random object with an auto-generated seed:
'  1920831619  1346865774  2006582766  1968819760   332463652   110770792
'  0.71326689  0.50383335  0.50446082  0.66312569  0.94517193  0.58059287
'
' Random numbers from a Random object with an auto-generated seed:
'   254927927  1205531663  1984850027   110020849  1438111494  1697714106
'  0.19383387  0.52067738  0.74162783  0.35063667  0.31247720  0.38773733
'
' Random numbers from a Random object with an auto-generated seed:
'   736507882  1064197552  1963117288   398705585   396275689  1137173773
'  0.67440084  0.53752140  0.97879483  0.03814764  0.67978248  0.19488178

// Example of the Random class constructors and Random.NextDouble( )
// method.
using System;
using System.Threading;

public class RandomObjectDemo
{
    // Generate random numbers from the specified Random object.
    static void RunIntNDoubleRandoms( Random randObj )
    {
        // Generate the first six random integers.
        for( int j = 0; j < 6; j++ )
            Console.Write( " {0,10} ", randObj.Next( ) );
        Console.WriteLine( );

        // Generate the first six random doubles.
        for( int j = 0; j < 6; j++ )
            Console.Write( " {0:F8} ", randObj.NextDouble( ) );
        Console.WriteLine( );
    }

    // Create a Random object with the specified seed.
    static void FixedSeedRandoms( int seed )
    {
        Console.WriteLine(
            "\nRandom numbers from a Random object with " +
            "seed = {0}:", seed );
        Random fixRand = new Random( seed );

        RunIntNDoubleRandoms( fixRand );
    }

    // Create a random object with a timer-generated seed.
    static void AutoSeedRandoms( )
    {
        // Wait to allow the timer to advance.
        Thread.Sleep( 1 );

        Console.WriteLine(
            "\nRandom numbers from a Random object " +
            "with an auto-generated seed:" );
        Random autoRand = new Random( );

        RunIntNDoubleRandoms( autoRand );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the Random class constructors and " +
            "Random.NextDouble( ) \n" +
            "generates the following output.\n" );
        Console.WriteLine(
            "Create Random objects, and then generate and " +
            "display six integers and \nsix doubles from each.");

        FixedSeedRandoms( 123 );
        FixedSeedRandoms( 123 );

        FixedSeedRandoms( 456 );
        FixedSeedRandoms( 456 );

        AutoSeedRandoms( );
        AutoSeedRandoms( );
        AutoSeedRandoms( );
    }
}

/*
This example of the Random class constructors and Random.NextDouble( )
generates the following output.

Create Random objects, and then generate and display six integers and
six doubles from each.

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with an auto-generated seed:
  380213349   127379247  1969091178  1983029819  1963098450  1648433124
 0.08824121  0.41249688  0.36445811  0.05637512  0.62702451  0.49595560

Random numbers from a Random object with an auto-generated seed:
  861793304  2133528783  1947358439   124230908   921262645  1087892791
 0.56880819  0.42934091  0.60162512  0.74388610  0.99432979  0.30310005

Random numbers from a Random object with an auto-generated seed:
 1343373259  1992194672  1925625700   412915644  2026910487   527352458
 0.04937517  0.44618494  0.83879212  0.43139707  0.36163507  0.11024451
*/

// Example of the Random class constructors and Random::NextDouble( )
// method.
using namespace System;
using namespace System::Threading;

// Generate random numbers from the specified Random object.
void RunIntNDoubleRandoms( Random^ randObj )
{

   // Generate the first six random integers.
   for ( int j = 0; j < 6; j++ )
      Console::Write( " {0,10} ", randObj->Next() );
   Console::WriteLine();

   // Generate the first six random doubles.
   for ( int j = 0; j < 6; j++ )
      Console::Write( " {0:F8} ", randObj->NextDouble() );
   Console::WriteLine();
}

// Create a Random object with the specified seed.
void FixedSeedRandoms( int seed )
{
   Console::WriteLine( "\nRandom numbers from a Random object with seed = {0}:", seed );
   Random^ fixRand = gcnew Random( seed );
   RunIntNDoubleRandoms( fixRand );
}

// Create a random object with a timer-generated seed.
void AutoSeedRandoms()
{

   // Wait to allow the timer to advance.
   Thread::Sleep( 1 );
   Console::WriteLine( "\nRandom numbers from a Random object "
   "with an auto-generated seed:" );
   Random^ autoRand = gcnew Random;
   RunIntNDoubleRandoms( autoRand );
}

int main()
{
   Console::WriteLine( "This example of the Random class constructors and Random"
   "::NextDouble( ) \ngenerates the following output.\n" );
   Console::WriteLine( "Create Random objects, and then generate and "
   "display six integers and \nsix doubles from each." );
   FixedSeedRandoms( 123 );
   FixedSeedRandoms( 123 );
   FixedSeedRandoms( 456 );
   FixedSeedRandoms( 456 );
   AutoSeedRandoms();
   AutoSeedRandoms();
   AutoSeedRandoms();
}

/*
This example of the Random class constructors and Random::NextDouble( )
generates the following output.

Create Random objects, and then generate and display six integers and
six doubles from each.

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 123:
 2114319875  1949518561  1596751841  1742987178  1586516133   103755708
 0.01700087  0.14935942  0.19470390  0.63008947  0.90976122  0.49519146

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with seed = 456:
 2044805024  1323311594  1087799997  1907260840   179380355   120870348
 0.21988117  0.21026556  0.39236514  0.42420498  0.24102703  0.47310170

Random numbers from a Random object with an auto-generated seed:
 1624372556  1894939458   302472229   588108304    23919954  1085111949
 0.14595512  0.30162298  0.92267372  0.55707657  0.25430079  0.74143239

Random numbers from a Random object with an auto-generated seed:
 2105952511  1753605347   280739490   876793040  1129567796   524571616
 0.62652210  0.31846701  0.15984073  0.24458755  0.62160607  0.54857684

Random numbers from a Random object with an auto-generated seed:
  440048819  1612271236   259006751  1165477776    87731991  2111514930
 0.10708907  0.33531104  0.39700773  0.93209853  0.98891135  0.35572129
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Random 类
Random 成员
System 命名空间


Random ..::.Sample 方法

Random
.
.
::
.
Sample 方法
Random 类

返回一个介于 0.0 和 1.0 之间的随机数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function Sample As Double
protected virtual double Sample()
protected:
virtual double Sample()
abstract Sample : unit -> float
override Sample : unit -> float

返回值

类型： System Double
大于等于 0.0 并且小于 1.0 的双精度浮点数。

要另外生成一个随机分布或随机数生成器原则，需要从 Random 类派生一个类，并重写 Sample 方法。

对继承者的说明

从 .NET Framework 2.0 版开始，如果您从 Random 派生类并重写 Sample 方法，则在调用下列方法的基类实现时将不使用由 Sample 方法的派生类实现提供的分布：

  • Random..::.NextBytes(array<Byte>[]()[]) 方法。

  • Random..::.Next()()() 方法。

  • Random..::.Next(Int32, Int32) 方法，如果（maxValue -minValue 大于 Int32..::.MaxValue。 - Random..::.Next(Int32, Int32) 方法，如果（maxValue -minValue 大于 Int32..::.MaxValue。

而是将使用由 Random 基类提供的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法的实现，还必须重写这三个成员的行为。该示例提供了说明。 而是将使用由 Random 基类提供的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法的实现，还必须重写这三个成员的行为。该示例提供了说明。 而是将使用由 Random 基类提供的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法的实现，还必须重写这三个成员的行为。该示例提供了说明。 而是将使用由 Random 基类提供的统一分布。此行为提高了 Random 类的总体性能。若要修改此行为以在派生类中调用 Sample 方法的实现，还必须重写这三个成员的行为。该示例提供了说明。

下面的示例从 Random 派生一个类并重写 Sample 方法，以生成随机数分布。该分布不同于基类的 Sample 方法所生成的统一分布。 下面的示例从 Random 派生一个类并重写 Sample 方法，以生成随机数分布。该分布不同于基类的 Sample 方法所生成的统一分布。

' This derived class converts the uniformly distributed random
' numbers generated by base.Sample( ) to another distribution.
Public Class RandomProportional
   Inherits Random

   ' The Sample method generates a distribution proportional to the value
   ' of the random numbers, in the range [0.0, 1.0].
   Protected Overrides Function Sample( ) As Double
      Return Math.Sqrt( MyBase.Sample( ) )
   End Function

   Public Overrides Function [Next]() As Integer
      Return Sample() * Integer.MaxValue
   End Function
End Class

Module RandomSampleDemo
    Sub Main( )
        Const rows As Integer = 4, cols As Integer = 6
        Const runCount As Integer = 1000000
        Const distGroupCount As Integer = 10
        Const intGroupSize As Double = _
            ( CDbl( Integer.MaxValue ) + 1.0 ) / _
            CDbl( distGroupCount )

        Dim randObj As New RandomProportional( )

        Dim intCounts( distGroupCount ) As Integer
        Dim realCounts( distGroupCount ) As Integer
        Dim i As Integer, j As Integer

        Console.WriteLine( vbCrLf & _
            "The derived RandomProportional class overrides " & _
            "the Sample method to " & vbCrLf & _
            "generate random numbers in the range " & _
            "[0.0, 1.0]. The distribution " & vbCrLf & _
            "of the numbers is proportional to their numeric " & _
            "values. For example, " & vbCrLf & _
            "numbers are generated in the vicinity of 0.75 " & _
            "with three times " & vbCrLf & "the " & _
            "probability of those generated near 0.25." )
        Console.WriteLine( vbCrLf & _
            "Random doubles generated with the NextDouble( ) " & _
            "method:" & vbCrLf )

        ' Generate and display [rows * cols] random doubles.
        For i = 0 To rows - 1
            For j = 0 To cols - 1
                Console.Write( "{0,12:F8}", randObj.NextDouble( ) )
            Next j
            Console.WriteLine( )
        Next i

        Console.WriteLine( vbCrLf & _
            "Random integers generated with the Next( ) " & _
            "method:" & vbCrLf )

        ' Generate and display [rows * cols] random integers.
        For i = 0 To rows - 1
            For j = 0 To cols - 1
                Console.Write( "{0,12}", randObj.Next( ) )
            Next j
            Console.WriteLine( )
        Next i

        Console.WriteLine( vbCrLf & _
            "To demonstrate the proportional distribution, " & _
            "{0:N0} random " & vbCrLf & _
            "integers and doubles are grouped into {1} " & _
            "equal value ranges. This " & vbCrLf & _
            "is the count of values in each range:" & vbCrLf, _
            runCount, distGroupCount )
        Console.WriteLine( "{0,21}{1,10}{2,20}{3,10}", _
            "Integer Range", "Count", "Double Range", "Count" )
        Console.WriteLine( "{0,21}{1,10}{2,20}{3,10}", _
            "-------------", "-----", "------------", "-----" )

        ' Generate random integers and doubles, and then count
        ' them by group.
        For i = 0 To runCount - 1
            intCounts( Fix( CDbl( randObj.Next( ) ) / _
                intGroupSize ) ) += 1
            realCounts( Fix( randObj.NextDouble( ) * _
                CDbl( distGroupCount ) ) ) += 1
        Next i

        ' Display the count of each group.
        For i = 0 To distGroupCount - 1
            Console.WriteLine( _
                "{0,10}-{1,10}{2,10:N0}{3,12:N5}-{4,7:N5}{5,10:N0}", _
                Fix( CDbl( i ) * intGroupSize ), _
                Fix( CDbl( i + 1 ) * intGroupSize - 1.0 ), _
                intCounts( i ), _
                CDbl( i ) / CDbl( distGroupCount), _
                CDbl( i + 1 ) / CDbl( distGroupCount ), _
                realCounts( i ) )
        Next i
    End Sub
End Module
' This example of Random.Sample() generates the following output:
'    The derived RandomProportional class overrides the Sample method to
'    generate random numbers in the range [0.0, 1.0]. The distribution
'    of the numbers is proportional to their numeric values. For example,
'    numbers are generated in the vicinity of 0.75 with three times
'    the probability of those generated near 0.25.
'
'    Random doubles generated with the NextDouble( ) method:
'
'      0.28377004  0.75920598  0.33430371  0.66720626  0.97080243  0.27353772
'      0.17787962  0.54618410  0.08145080  0.56286100  0.99002910  0.64898614
'      0.27673277  0.99455281  0.93778966  0.76162002  0.70533771  0.44375798
'      0.55939883  0.87383136  0.66465779  0.77392566  0.42393411  0.82409159
'
'    Random integers generated with the Next( ) method:
'
'      1364479914  1230312341  1657373812  1526222928   988564704   700078020
'      1801013705  1541517421  1146312560   338318389  1558995993  2027260859
'       884520932  1320070465   570200106  1027684711   943035246  2088689333
'       630809089  1705728475  2140787648  2097858166  1863010875  1386804198
'
'    To demonstrate the proportional distribution, 1,000,000 random
'    integers and doubles are grouped into 10 equal value ranges. This
'    is the count of values in each range:
'
'            Integer Range     Count        Double Range     Count
'            -------------     -----        ------------     -----
'             0- 214748363     9,892     0.00000-0.10000     9,928
'     214748364- 429496728    30,341     0.10000-0.20000    30,101
'     429496729- 644245093    49,958     0.20000-0.30000    49,964
'     644245094- 858993458    70,099     0.30000-0.40000    70,213
'     858993459-1073741823    90,801     0.40000-0.50000    89,553
'    1073741824-1288490187   109,699     0.50000-0.60000   109,427
'    1288490188-1503238552   129,438     0.60000-0.70000   130,339
'    1503238553-1717986917   149,886     0.70000-0.80000   150,000
'    1717986918-1932735282   170,338     0.80000-0.90000   170,128
'    1932735283-2147483647   189,548     0.90000-1.00000   190,347

using System;

// This derived class converts the uniformly distributed random
// numbers generated by base.Sample( ) to another distribution.
public class RandomProportional : Random
{
    // The Sample method generates a distribution proportional to the value
    // of the random numbers, in the range [0.0, 1.0].
    protected override double Sample( )
    {
        return Math.Sqrt( base.Sample( ) );
    }

    public override int Next()
    {
       return (int) (Sample() * int.MaxValue);
    }
}

public class RandomSampleDemo
{
    static void Main( )
    {
        const int rows = 4, cols = 6;
        const int runCount = 1000000;
        const int distGroupCount = 10;
        const double intGroupSize =
            ( (double)int.MaxValue + 1.0 ) / (double)distGroupCount;

        RandomProportional randObj = new RandomProportional( );

        int[ ]      intCounts = new int[ distGroupCount ];
        int[ ]      realCounts = new int[ distGroupCount ];

        Console.WriteLine(
            "\nThe derived RandomProportional class overrides " +
            "the Sample method to \ngenerate random numbers " +
            "in the range [0.0, 1.0]. The distribution \nof " +
            "the numbers is proportional to their numeric values. " +
            "For example, \nnumbers are generated in the " +
            "vicinity of 0.75 with three times the \n" +
            "probability of those generated near 0.25." );
        Console.WriteLine(
            "\nRandom doubles generated with the NextDouble( ) " +
            "method:\n" );

        // Generate and display [rows * cols] random doubles.
        for( int i = 0; i < rows; i++ )
        {
            for( int j = 0; j < cols; j++ )
                Console.Write( "{0,12:F8}", randObj.NextDouble( ) );
            Console.WriteLine( );
        }

        Console.WriteLine(
            "\nRandom integers generated with the Next( ) " +
            "method:\n" );

        // Generate and display [rows * cols] random integers.
        for( int i = 0; i < rows; i++ )
        {
            for( int j = 0; j < cols; j++ )
                Console.Write( "{0,12}", randObj.Next( ) );
            Console.WriteLine( );
        }

        Console.WriteLine(
            "\nTo demonstrate the proportional distribution, " +
            "{0:N0} random \nintegers and doubles are grouped " +
            "into {1} equal value ranges. This \n" +
            "is the count of values in each range:\n",
            runCount, distGroupCount );
        Console.WriteLine(
            "{0,21}{1,10}{2,20}{3,10}", "Integer Range",
            "Count", "Double Range", "Count" );
        Console.WriteLine(
            "{0,21}{1,10}{2,20}{3,10}", "-------------",
            "-----", "------------", "-----" );

        // Generate random integers and doubles, and then count
        // them by group.
        for( int i = 0; i < runCount; i++ )
        {
            intCounts[ (int)( (double)randObj.Next( ) /
                intGroupSize ) ]++;
            realCounts[ (int)( randObj.NextDouble( ) *
                (double)distGroupCount ) ]++;
        }

        // Display the count of each group.
        for( int i = 0; i < distGroupCount; i++ )
            Console.WriteLine(
                "{0,10}-{1,10}{2,10:N0}{3,12:N5}-{4,7:N5}{5,10:N0}",
                (int)( (double)i * intGroupSize ),
                (int)( (double)( i + 1 ) * intGroupSize - 1.0 ),
                intCounts[ i ],
                ( (double)i ) / (double)distGroupCount,
                ( (double)( i + 1 ) ) / (double)distGroupCount,
                realCounts[ i ] );
    }
}

/*
This example of Random.Sample() displays the following output:

   The derived RandomProportional class overrides the Sample method to
   generate random numbers in the range [0.0, 1.0). The distribution
   of the numbers is proportional to the number values. For example,
   numbers are generated in the vicinity of 0.75 with three times the
   probability of those generated near 0.25.

   Random doubles generated with the NextDouble( ) method:

     0.59455719  0.17589882  0.83134398  0.35795862  0.91467727  0.54022658
     0.93716947  0.54817519  0.94685080  0.93705478  0.18582318  0.71272428
     0.77708682  0.95386216  0.70412393  0.86099417  0.08275804  0.79108316
     0.71019941  0.84205103  0.41685082  0.58186880  0.89492302  0.73067715

   Random integers generated with the Next( ) method:

     1570755704  1279192549  1747627711  1705700211  1372759203  1849655615
     2046235980  1210843924  1554274149  1307936697  1480207570  1057595022
      337854215   844109928  2028310798  1386669369  2073517658  1291729809
     1537248240  1454198019  1934863511  1640004334  2032620207   534654791

   To demonstrate the proportional distribution, 1,000,000 random
   integers and doubles are grouped into 10 equal value ranges. This
   is the count of values in each range:

           Integer Range     Count        Double Range     Count
           -------------     -----        ------------     -----
            0- 214748363    10,079     0.00000-0.10000    10,148
    214748364- 429496728    29,835     0.10000-0.20000    29,849
    429496729- 644245093    49,753     0.20000-0.30000    49,948
    644245094- 858993458    70,325     0.30000-0.40000    69,656
    858993459-1073741823    89,906     0.40000-0.50000    90,337
   1073741824-1288490187   109,868     0.50000-0.60000   110,225
   1288490188-1503238552   130,388     0.60000-0.70000   129,986
   1503238553-1717986917   149,231     0.70000-0.80000   150,428
   1717986918-1932735282   170,234     0.80000-0.90000   169,610
   1932735283-2147483647   190,381     0.90000-1.00000   189,813
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Random 类
Random 成员
System 命名空间
NextDouble


RankException 类

RankException 类
成员

将维数错误的数组传递给方法时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class RankException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class RankException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class RankException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type RankException =
    class
        inherit SystemException
    end

RankException 使用值为 0x80131517 的 HRESULT COR_E_RANK。

有关 RankException 实例的初始属性值列表，请参见 RankException 构造函数。

System System..::.RankExceptionRankException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RankException 成员
System 命名空间
Exception

其他资源

处理和引发异常


RankException 成员

RankException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RankException 类

将维数错误的数组传递给方法时引发的异常。

RankException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

RankException 类
System 命名空间


RankException 构造函数

RankException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RankException 类

初始化 RankException 类的新实例。

名称 说明
页首

参考

RankException 类
RankException 成员
System 命名空间


RankException 构造函数

RankException 构造函数
RankException 类

初始化 RankException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public RankException()
public:
RankException()
new : unit -> RankException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“两个数组必须具有相同的维数。”。此消息将考虑当前系统区域性。

下表显示 RankException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RankException 类
RankException 成员
RankException 重载
System 命名空间


RankException 构造函数 (String)

RankException 构造函数 (String)
RankException 类

使用指定错误信息初始化 RankException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public RankException(
    string message
)
public:
RankException(
    String^ message
)
new :
        message:string -> RankException

参数

message
类型： System String
描述该错误的 String。

message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 RankException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RankException 类
RankException 成员
RankException 重载
System 命名空间


RankException 构造函数 (SerializationInfo, StreamingContext)

RankException 构造函数 (SerializationInfo, StreamingContext)
RankException 类

用序列化数据初始化 RankException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected RankException(
    SerializationInfo info,
    StreamingContext context
)
protected:
RankException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> RankException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RankException 类
RankException 成员
RankException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


RankException 构造函数 (String, Exception)

RankException 构造函数 (String, Exception)
RankException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 RankException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public RankException(
    string message,
    Exception innerException
)
public:
RankException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> RankException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 RankException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RankException 类
RankException 成员
RankException 重载
System 命名空间
Exception

其他资源

处理和引发异常


RankException 方法

RankException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RankException 类

RankException 类型公开以下成员。

名称 说明
页首

参考

RankException 类
System 命名空间


RankException 属性

RankException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RankException 类

RankException 类型公开以下成员。

名称 说明
页首

参考

RankException 类
System 命名空间


RankException 事件

RankException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RankException 类

RankException 类型公开以下成员。

名称 说明
页首

参考

RankException 类
System 命名空间


ResolveEventArgs 类

ResolveEventArgs 类
成员

为加载程序解析事件（如 TypeResolve、ResourceResolve、ReflectionOnlyAssemblyResolve 和 AssemblyResolve 事件）提供数据。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Class ResolveEventArgs _
    Inherits EventArgs
[ComVisibleAttribute(true)]
public class ResolveEventArgs : EventArgs
[ComVisibleAttribute(true)]
public ref class ResolveEventArgs : public EventArgs
[<ComVisibleAttribute(true)>]
type ResolveEventArgs =
    class
        inherit EventArgs
    end

当加载程序无法解析程序集引用并且已经为相应的加载程序解析事件提供了处理程序时，引发该事件并且 ResolveEventArgs 包含要解析的项的相关信息。

  • Name 属性包含要解析的项的名称。

  • 从 .NET Framework 4 版开始，RequestingAssembly 属性包含请求了可以提供命名项的程序集的程序集。有关更多信息，请参见 RequestingAssembly 属性。 从 .NET Framework 4 版开始，RequestingAssembly 属性包含请求了可以提供命名项的程序集的程序集。有关更多信息，请参见 RequestingAssembly 属性。

System System..::.ResolveEventArgsResolveEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ResolveEventArgs 成员
System 命名空间
AppDomain TypeResolve
AppDomain ResourceResolve
AppDomain ReflectionOnlyAssemblyResolve
AppDomain AssemblyResolve


ResolveEventArgs 成员

ResolveEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ResolveEventArgs 类

为加载程序解析事件（如 TypeResolve、ResourceResolve、ReflectionOnlyAssemblyResolve 和 AssemblyResolve 事件）提供数据。

ResolveEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ResolveEventArgs 类
System 命名空间


ResolveEventArgs 构造函数

ResolveEventArgs 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ResolveEventArgs 类

初始化 ResolveEventArgs 类的新实例。

名称 说明
页首

参考

ResolveEventArgs 类
ResolveEventArgs 成员
System 命名空间


ResolveEventArgs 构造函数 (String)

ResolveEventArgs 构造函数 (String)
ResolveEventArgs 类

初始化 ResolveEventArgs 类的新实例，同时指定要解析的项的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    name As String _
)
public ResolveEventArgs(
    string name
)
public:
ResolveEventArgs(
    String^ name
)
new :
        name:string -> ResolveEventArgs

参数

name
类型： System String
要解析的项的名称。

此构造函数通常只能由公共语言运行时调用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ResolveEventArgs 类
ResolveEventArgs 成员
ResolveEventArgs 重载
System 命名空间


ResolveEventArgs 构造函数 (String, Assembly)

ResolveEventArgs 构造函数 (String, Assembly)
ResolveEventArgs 类

初始化 ResolveEventArgs 类的新实例，同时指定要解析的项的名称以及正在解析其依赖项的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    name As String, _
    requestingAssembly As Assembly _
)
public ResolveEventArgs(
    string name,
    Assembly requestingAssembly
)
public:
ResolveEventArgs(
    String^ name,
    Assembly^ requestingAssembly
)
new :
        name:string *
        requestingAssembly:Assembly -> ResolveEventArgs

参数

name
类型： System String
要解析的项的名称。
requestingAssembly
类型： System.Reflection Assembly
正在解析其依赖项的程序集。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ResolveEventArgs 类
ResolveEventArgs 成员
ResolveEventArgs 重载
System 命名空间


ResolveEventArgs 方法

ResolveEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ResolveEventArgs 类

ResolveEventArgs 类型公开以下成员。

名称 说明
页首

参考

ResolveEventArgs 类
System 命名空间


ResolveEventArgs 属性

ResolveEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ResolveEventArgs 类

ResolveEventArgs 类型公开以下成员。

名称 说明
页首

参考

ResolveEventArgs 类
System 命名空间


ResolveEventArgs ..::.Name 属性

ResolveEventArgs
.
.
::
.
Name 属性
ResolveEventArgs 类

获取要解析的项的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Name As String
    Get
public string Name { get; }
public:
property String^ Name {
    String^ get ();
}
member Name : string

属性值

类型： System String
要解析的项的名称。

对于 AssemblyResolve 事件，Name 是在应用策略之前的程序集名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ResolveEventArgs 类
ResolveEventArgs 成员
System 命名空间


ResolveEventArgs ..::.RequestingAssembly 属性

ResolveEventArgs
.
.
::
.
RequestingAssembly 属性
ResolveEventArgs 类

获取正在解析其依赖项的程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property RequestingAssembly As Assembly
    Get
public Assembly RequestingAssembly { get; }
public:
property Assembly^ RequestingAssembly {
    Assembly^ get ();
}
member RequestingAssembly : Assembly

属性值

类型： System.Reflection Assembly
请求了 Name 属性指定的项的程序集。

此属性返回的程序集无法解析由 Name 属性指定的项，因为该项不存在于该程序集中、任何它加载的依赖项中或在加载程序找通过探测可以找到的任何依赖项中。

例如，假设当前程序集使用 Assembly..::.LoadFile 方法从探测路径外的目录中加载程序集 A，以使用类 CA。进一步假设类 CA 使用类 CB，在程序集 B 中，程序集 A 具有对程序集 B 的编译时引用，也位于探测路径外部。在当前程序集尝试实例化 CA 时，加载程序会尝试解析对程序集 B 的引用。但是，由于使用 Assembly..::.LoadFile 方法加载程序集 A，所以加载程序无法解析该依赖关系。如果有用于 AppDomain..::.AssemblyResolve 事件的处理程序，则引发该事件，且生成的 ResolveEventArgs 对象的 RequestingAssembly 属性包含程序集 A，因为程序集 A 是缺少依赖项的程序集。 例如，假设当前程序集使用 Assembly..::.LoadFile 方法从探测路径外的目录中加载程序集 A，以使用类 CA。进一步假设类 CA 使用类 CB，在程序集 B 中，程序集 A 具有对程序集 B 的编译时引用，也位于探测路径外部。在当前程序集尝试实例化 CA 时，加载程序会尝试解析对程序集 B 的引用。但是，由于使用 Assembly..::.LoadFile 方法加载程序集 A，所以加载程序无法解析该依赖关系。如果有用于 AppDomain..::.AssemblyResolve 事件的处理程序，则引发该事件，且生成的 ResolveEventArgs 对象的 RequestingAssembly 属性包含程序集 A，因为程序集 A 是缺少依赖项的程序集。 例如，假设当前程序集使用 Assembly..::.LoadFile 方法从探测路径外的目录中加载程序集 A，以使用类 CA。进一步假设类 CA 使用类 CB，在程序集 B 中，程序集 A 具有对程序集 B 的编译时引用，也位于探测路径外部。在当前程序集尝试实例化 CA 时，加载程序会尝试解析对程序集 B 的引用。但是，由于使用 Assembly..::.LoadFile 方法加载程序集 A，所以加载程序无法解析该依赖关系。如果有用于 AppDomain..::.AssemblyResolve 事件的处理程序，则引发该事件，且生成的 ResolveEventArgs 对象的 RequestingAssembly 属性包含程序集 A，因为程序集 A 是缺少依赖项的程序集。 例如，假设当前程序集使用 Assembly..::.LoadFile 方法从探测路径外的目录中加载程序集 A，以使用类 CA。进一步假设类 CA 使用类 CB，在程序集 B 中，程序集 A 具有对程序集 B 的编译时引用，也位于探测路径外部。在当前程序集尝试实例化 CA 时，加载程序会尝试解析对程序集 B 的引用。但是，由于使用 Assembly..::.LoadFile 方法加载程序集 A，所以加载程序无法解析该依赖关系。如果有用于 AppDomain..::.AssemblyResolve 事件的处理程序，则引发该事件，且生成的 ResolveEventArgs 对象的 RequestingAssembly 属性包含程序集 A，因为程序集 A 是缺少依赖项的程序集。 例如，假设当前程序集使用 Assembly..::.LoadFile 方法从探测路径外的目录中加载程序集 A，以使用类 CA。进一步假设类 CA 使用类 CB，在程序集 B 中，程序集 A 具有对程序集 B 的编译时引用，也位于探测路径外部。在当前程序集尝试实例化 CA 时，加载程序会尝试解析对程序集 B 的引用。但是，由于使用 Assembly..::.LoadFile 方法加载程序集 A，所以加载程序无法解析该依赖关系。如果有用于 AppDomain..::.AssemblyResolve 事件的处理程序，则引发该事件，且生成的 ResolveEventArgs 对象的 RequestingAssembly 属性包含程序集 A，因为程序集 A 是缺少依赖项的程序集。

RequestingAssembly 属性的语义可能有所不同，具体取决于发出请求的程序集的加载方式：

  • 加载上下文：该属性的值可能是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。加载上下文与加载顺序无关，请求程序集的标识不一定有意义。当调用 Type..::.GetType 方法并且指定的类型对请求程序集或其任何依赖项未知时，将发生非 null 示例。 加载上下文：该属性的值可能是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。加载上下文与加载顺序无关，请求程序集的标识不一定有意义。当调用 Type..::.GetType 方法并且指定的类型对请求程序集或其任何依赖项未知时，将发生非 null 示例。 加载上下文：该属性的值可能是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。加载上下文与加载顺序无关，请求程序集的标识不一定有意义。当调用 Type..::.GetType 方法并且指定的类型对请求程序集或其任何依赖项未知时，将发生非 null 示例。

  • 加载源上下文：属性用作一个探测的提示，但该事件处理程序不应获取对给定程序集名称的多个请求。

  • 没有上下文（也就是发出请求的程序集已通过使用 Assembly..::.LoadFile 方法、或作为字节流或在混合模式下加载）：该处理程序可以使用 RequestingAssembly 属性基于发出请求的程序集的标识来加载相同的程序集的不同实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ResolveEventArgs 类
ResolveEventArgs 成员
System 命名空间
AppDomain TypeResolve
AppDomain ResourceResolve
AppDomain ReflectionOnlyAssemblyResolve
AppDomain AssemblyResolve


ResolveEventHandler 委托

ResolveEventHandler 委托

表示处理 AppDomain 的 AppDomain..::.TypeResolve、AppDomain..::.ResourceResolve 或 AssemblyResolve 事件的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Delegate Function ResolveEventHandler ( _
    sender As Object, _
    args As ResolveEventArgs _
) As Assembly
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate Assembly ResolveEventHandler(
    Object sender,
    ResolveEventArgs args
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate Assembly^ ResolveEventHandler(
    Object^ sender,
    ResolveEventArgs^ args
)
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ResolveEventHandler =
    delegate of
        sender:Object *
        args:ResolveEventArgs -> Assembly

参数

sender
类型： System Object
事件源。
args
类型： System ResolveEventArgs
事件数据。

返回值

类型： System.Reflection Assembly
解析类型、程序集或资源的程序集；如果无法解析程序集，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果运行时类加载程序无法解析对程序集、类型或资源的引用，则将引发相应的事件，从而使回调有机会通知运行时引用的程序集、类型或资源位于哪个程序集中。ResolveEventHandler 负责返回解析类型、程序集或资源的程序集。如果处理程序返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），加载将会失败，且引发相应的异常。有关更多信息，请参见AppDomain..::.ResourceResolve、AppDomain..::.AssemblyResolve 和 AppDomain..::.ReflectionOnlyAssemblyResolve 事件。 如果运行时类加载程序无法解析对程序集、类型或资源的引用，则将引发相应的事件，从而使回调有机会通知运行时引用的程序集、类型或资源位于哪个程序集中。ResolveEventHandler 负责返回解析类型、程序集或资源的程序集。如果处理程序返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），加载将会失败，且引发相应的异常。有关更多信息，请参见AppDomain..::.ResourceResolve、AppDomain..::.AssemblyResolve 和 AppDomain..::.ReflectionOnlyAssemblyResolve 事件。 如果运行时类加载程序无法解析对程序集、类型或资源的引用，则将引发相应的事件，从而使回调有机会通知运行时引用的程序集、类型或资源位于哪个程序集中。ResolveEventHandler 负责返回解析类型、程序集或资源的程序集。如果处理程序返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），加载将会失败，且引发相应的异常。有关更多信息，请参见AppDomain..::.ResourceResolve、AppDomain..::.AssemblyResolve 和 AppDomain..::.ReflectionOnlyAssemblyResolve 事件。 如果运行时类加载程序无法解析对程序集、类型或资源的引用，则将引发相应的事件，从而使回调有机会通知运行时引用的程序集、类型或资源位于哪个程序集中。ResolveEventHandler 负责返回解析类型、程序集或资源的程序集。如果处理程序返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），加载将会失败，且引发相应的异常。有关更多信息，请参见AppDomain..::.ResourceResolve、AppDomain..::.AssemblyResolve 和 AppDomain..::.ReflectionOnlyAssemblyResolve 事件。

Delegate 和 MulticastDelegate 的每个派生类都有一个构造函数和一个 Invoke 方法。请参见 Delegate 类说明中的 C++ 代码示例。 Delegate 和 MulticastDelegate 的每个派生类都有一个构造函数和一个 Invoke 方法。请参见 Delegate 类说明中的 C++ 代码示例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
AppDomain ResourceResolve
AppDomain AssemblyResolve
AppDomain ReflectionOnlyAssemblyResolve


RuntimeArgumentHandle 结构

RuntimeArgumentHandle 结构
成员

引用变长参数列表。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Structure RuntimeArgumentHandle
[ComVisibleAttribute(true)]
public struct RuntimeArgumentHandle
[ComVisibleAttribute(true)]
public value class RuntimeArgumentHandle
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
type RuntimeArgumentHandle =  struct end

此结构除了具有继承自 Object 和 ValueType 类的成员之外，它不具有其他成员。其存在的目的只是为了支持采用可变数目的参数的 C/C++ 编程语言函数。此结构的实例被传递到 ArgIterator 构造函数。 此结构除了具有继承自 Object 和 ValueType 类的成员之外，它不具有其他成员。其存在的目的只是为了支持采用可变数目的参数的 C/C++ 编程语言函数。此结构的实例被传递到 ArgIterator 构造函数。 此结构除了具有继承自 Object 和 ValueType 类的成员之外，它不具有其他成员。其存在的目的只是为了支持采用可变数目的参数的 C/C++ 编程语言函数。此结构的实例被传递到 ArgIterator 构造函数。

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeArgumentHandle 成员
System 命名空间


RuntimeArgumentHandle 成员

RuntimeArgumentHandle 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeArgumentHandle 结构

引用变长参数列表。

RuntimeArgumentHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeArgumentHandle 结构
System 命名空间


RuntimeArgumentHandle 方法

RuntimeArgumentHandle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeArgumentHandle 结构

RuntimeArgumentHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeArgumentHandle 结构
System 命名空间


RuntimeFieldHandle 结构

RuntimeFieldHandle 结构
成员

使用内部元数据标记表示一个字段。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure RuntimeFieldHandle _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct RuntimeFieldHandle : ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class RuntimeFieldHandle : ISerializable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type RuntimeFieldHandle =
    struct
        interface ISerializable
    end

RuntimeFieldHandle 结构的实例的值是该实例所表示的字段的句柄。

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RuntimeFieldHandle 成员
System 命名空间


RuntimeFieldHandle 成员

RuntimeFieldHandle 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeFieldHandle 结构

使用内部元数据标记表示一个字段。

RuntimeFieldHandle 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

RuntimeFieldHandle 结构
System 命名空间


RuntimeFieldHandle 方法

RuntimeFieldHandle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeFieldHandle 结构

RuntimeFieldHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeFieldHandle 结构
System 命名空间


RuntimeFieldHandle ..::.Equals 方法

RuntimeFieldHandle
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeFieldHandle 结构

指示对象是否与当前 RuntimeFieldHandle 表示同一字段。

名称 说明
页首

参考

RuntimeFieldHandle 结构
RuntimeFieldHandle 成员
System 命名空间


RuntimeFieldHandle ..::.Equals 方法 (Object)

RuntimeFieldHandle
.
.
::
.
Equals 方法 (Object)
RuntimeFieldHandle 结构

指示当前实例是否等于指定的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与当前实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 为 RuntimeFieldHandle 且与当前实例的值相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeFieldHandle 结构
RuntimeFieldHandle 成员
Equals 重载
System 命名空间


RuntimeFieldHandle ..::.Equals 方法 (RuntimeFieldHandle)

RuntimeFieldHandle
.
.
::
.
Equals 方法 (RuntimeFieldHandle)
RuntimeFieldHandle 结构

指示当前实例是否等于指定的 RuntimeFieldHandle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    handle As RuntimeFieldHandle _
) As Boolean
public bool Equals(
    RuntimeFieldHandle handle
)
public:
bool Equals(
    RuntimeFieldHandle handle
)
member Equals :
        handle:RuntimeFieldHandle -> bool

参数

handle
类型： System RuntimeFieldHandle
要与当前实例进行比较的 RuntimeFieldHandle。

返回值

类型： System Boolean
如果 handle 的值等于当前实例的值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeFieldHandle 结构
RuntimeFieldHandle 成员
Equals 重载
System 命名空间


RuntimeFieldHandle ..::.GetHashCode 方法

RuntimeFieldHandle
.
.
::
.
GetHashCode 方法
RuntimeFieldHandle 结构
此成员重写 ValueType GetHashCode ，且该主题可能包括更完整的文档。

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32

一个 32 位有符号整数，它是该实例的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeFieldHandle 结构
RuntimeFieldHandle 成员
System 命名空间


RuntimeFieldHandle ..::.GetObjectData 方法

RuntimeFieldHandle
.
.
::
.
GetObjectData 方法
RuntimeFieldHandle 结构

使用反序列化当前实例所表示的字段所需的数据填充 SerializationInfo。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要用序列化信息填充的 SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
（保留）存储和检索序列化数据的地方。

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SerializationException | 当前实例的 Value 属性不是有效句柄。

context 参数被保留，它目前不参与此运算。

有关更多信息，请参见 SerializationInfo..::.AddValue 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeFieldHandle 结构
RuntimeFieldHandle 成员
System 命名空间


RuntimeFieldHandle 运算符

RuntimeFieldHandle 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeFieldHandle 结构

RuntimeFieldHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeFieldHandle 结构
System 命名空间


RuntimeFieldHandle ..::.Equality 运算符

RuntimeFieldHandle
.
.
::
.
Equality 运算符
RuntimeFieldHandle 结构

指示两个 RuntimeFieldHandle 结构是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    left As RuntimeFieldHandle, _
    right As RuntimeFieldHandle _
) As Boolean
public static bool operator ==(
    RuntimeFieldHandle left,
    RuntimeFieldHandle right
)
public:
static bool operator ==(
    RuntimeFieldHandle left,
    RuntimeFieldHandle right
)
static let inline (=)
        left:RuntimeFieldHandle *
        right:RuntimeFieldHandle  : bool

参数

left
类型： System RuntimeFieldHandle
要与 right 进行比较的 RuntimeFieldHandle。
right
类型： System RuntimeFieldHandle
要与 left 进行比较的 RuntimeFieldHandle。

返回值

类型： System Boolean
如果 left 等于 right，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeFieldHandle 结构
RuntimeFieldHandle 成员
System 命名空间


RuntimeFieldHandle ..::.Inequality 运算符

RuntimeFieldHandle
.
.
::
.
Inequality 运算符
RuntimeFieldHandle 结构

指示两个 RuntimeFieldHandle 结构是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    left As RuntimeFieldHandle, _
    right As RuntimeFieldHandle _
) As Boolean
public static bool operator !=(
    RuntimeFieldHandle left,
    RuntimeFieldHandle right
)
public:
static bool operator !=(
    RuntimeFieldHandle left,
    RuntimeFieldHandle right
)
static let inline (<>)
        left:RuntimeFieldHandle *
        right:RuntimeFieldHandle  : bool

参数

left
类型： System RuntimeFieldHandle
要与 right 进行比较的 RuntimeFieldHandle。
right
类型： System RuntimeFieldHandle
要与 left 进行比较的 RuntimeFieldHandle。

返回值

类型： System Boolean
如果 left 不等于 right，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeFieldHandle 结构
RuntimeFieldHandle 成员
System 命名空间


RuntimeFieldHandle 属性

RuntimeFieldHandle 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeFieldHandle 结构

RuntimeFieldHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeFieldHandle 结构
System 命名空间


RuntimeFieldHandle ..::.Value 属性

RuntimeFieldHandle
.
.
::
.
Value 属性
RuntimeFieldHandle 结构

获取当前实例所表示的字段的句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Value As IntPtr
    Get
public IntPtr Value { get; }
public:
property IntPtr Value {
    IntPtr get ();
}
member Value : IntPtr

属性值

类型： System IntPtr
IntPtr，包含当前实例所表示的字段的句柄。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RuntimeFieldHandle 结构
RuntimeFieldHandle 成员
System 命名空间


RuntimeMethodHandle 结构

RuntimeMethodHandle 结构
成员

RuntimeMethodHandle 是方法的内部元数据表示形式的句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure RuntimeMethodHandle _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct RuntimeMethodHandle : ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class RuntimeMethodHandle : ISerializable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type RuntimeMethodHandle =
    struct
        interface ISerializable
    end
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RuntimeMethodHandle 成员
System 命名空间


RuntimeMethodHandle 成员

RuntimeMethodHandle 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeMethodHandle 结构

RuntimeMethodHandle 是方法的内部元数据表示形式的句柄。

RuntimeMethodHandle 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

RuntimeMethodHandle 结构
System 命名空间


RuntimeMethodHandle 方法

RuntimeMethodHandle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeMethodHandle 结构

RuntimeMethodHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeMethodHandle 结构
System 命名空间


RuntimeMethodHandle ..::.Equals 方法

RuntimeMethodHandle
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeMethodHandle 结构

指示一个 RuntimeMethodHandle 是否与另一个相等。

名称 说明
页首

参考

RuntimeMethodHandle 结构
RuntimeMethodHandle 成员
System 命名空间


RuntimeMethodHandle ..::.Equals 方法 (Object)

RuntimeMethodHandle
.
.
::
.
Equals 方法 (Object)
RuntimeMethodHandle 结构

指示此实例是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与此实例进行比较的 System..::.Object。

返回值

类型： System Boolean
如果 obj 为 RuntimeMethodHandle 且与此实例的值相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeMethodHandle 结构
RuntimeMethodHandle 成员
Equals 重载
System 命名空间
Value


RuntimeMethodHandle ..::.Equals 方法 (RuntimeMethodHandle)

RuntimeMethodHandle
.
.
::
.
Equals 方法 (RuntimeMethodHandle)
RuntimeMethodHandle 结构

指示此实例是否与指定的 RuntimeMethodHandle 相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    handle As RuntimeMethodHandle _
) As Boolean
public bool Equals(
    RuntimeMethodHandle handle
)
public:
bool Equals(
    RuntimeMethodHandle handle
)
member Equals :
        handle:RuntimeMethodHandle -> bool

参数

handle
类型： System RuntimeMethodHandle
要与此实例进行比较的 RuntimeMethodHandle。

返回值

类型： System Boolean
如果 handle 等于此实例的值，则为 true；否则，为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeMethodHandle 结构
RuntimeMethodHandle 成员
Equals 重载
System 命名空间
Value


RuntimeMethodHandle ..::.GetFunctionPointer 方法

RuntimeMethodHandle
.
.
::
.
GetFunctionPointer 方法
RuntimeMethodHandle 结构

获取指向此实例所表示方法的指针。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetFunctionPointer As IntPtr
public IntPtr GetFunctionPointer()
public:
IntPtr GetFunctionPointer()
member GetFunctionPointer : unit -> IntPtr

返回值

类型： System IntPtr
指向此实例所表示方法的指针。
异常 | 条件
SecurityException | 调用方不具有执行此操作所需的权限。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeMethodHandle 结构
RuntimeMethodHandle 成员
System 命名空间


RuntimeMethodHandle ..::.GetHashCode 方法

RuntimeMethodHandle
.
.
::
.
GetHashCode 方法
RuntimeMethodHandle 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeMethodHandle 结构
RuntimeMethodHandle 成员
System 命名空间


RuntimeMethodHandle ..::.GetObjectData 方法

RuntimeMethodHandle
.
.
::
.
GetObjectData 方法
RuntimeMethodHandle 结构

用反序列化此实例所表示的字段所必需的数据填充 SerializationInfo。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要用序列化信息填充的对象。
context
类型： System.Runtime.Serialization StreamingContext
（保留）存储和检索序列化数据的地方。

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SerializationException | Value 无效。

context 参数被保留，它目前不参与此运算。

有关更多信息，请参见 SerializationInfo..::.AddValue 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeMethodHandle 结构
RuntimeMethodHandle 成员
System 命名空间


RuntimeMethodHandle 运算符

RuntimeMethodHandle 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeMethodHandle 结构

RuntimeMethodHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeMethodHandle 结构
System 命名空间


RuntimeMethodHandle ..::.Equality 运算符

RuntimeMethodHandle
.
.
::
.
Equality 运算符
RuntimeMethodHandle 结构

指示两个 RuntimeMethodHandle 实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    left As RuntimeMethodHandle, _
    right As RuntimeMethodHandle _
) As Boolean
public static bool operator ==(
    RuntimeMethodHandle left,
    RuntimeMethodHandle right
)
public:
static bool operator ==(
    RuntimeMethodHandle left,
    RuntimeMethodHandle right
)
static let inline (=)
        left:RuntimeMethodHandle *
        right:RuntimeMethodHandle  : bool

参数

left
类型： System RuntimeMethodHandle
要与 right 进行比较的 RuntimeMethodHandle。
right
类型： System RuntimeMethodHandle
要与 left 进行比较的 RuntimeMethodHandle。

返回值

类型： System Boolean
如果 left 的值等于 right 的值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeMethodHandle 结构
RuntimeMethodHandle 成员
System 命名空间


RuntimeMethodHandle ..::.Inequality 运算符

RuntimeMethodHandle
.
.
::
.
Inequality 运算符
RuntimeMethodHandle 结构

指示两个 RuntimeMethodHandle 实例是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    left As RuntimeMethodHandle, _
    right As RuntimeMethodHandle _
) As Boolean
public static bool operator !=(
    RuntimeMethodHandle left,
    RuntimeMethodHandle right
)
public:
static bool operator !=(
    RuntimeMethodHandle left,
    RuntimeMethodHandle right
)
static let inline (<>)
        left:RuntimeMethodHandle *
        right:RuntimeMethodHandle  : bool

参数

left
类型： System RuntimeMethodHandle
要与 right 进行比较的 RuntimeMethodHandle。
right
类型： System RuntimeMethodHandle
要与 left 进行比较的 RuntimeMethodHandle。

返回值

类型： System Boolean
如果 left 的值与 right 的值不相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeMethodHandle 结构
RuntimeMethodHandle 成员
System 命名空间


RuntimeMethodHandle 属性

RuntimeMethodHandle 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeMethodHandle 结构

RuntimeMethodHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeMethodHandle 结构
System 命名空间


RuntimeMethodHandle ..::.Value 属性

RuntimeMethodHandle
.
.
::
.
Value 属性
RuntimeMethodHandle 结构

获得此实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Value As IntPtr
    Get
public IntPtr Value { get; }
public:
property IntPtr Value {
    IntPtr get ();
}
member Value : IntPtr

属性值

类型： System IntPtr
RuntimeMethodHandle，它是方法的内部元数据表示形式。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RuntimeMethodHandle 结构
RuntimeMethodHandle 成员
System 命名空间


RuntimeTypeHandle 结构

RuntimeTypeHandle 结构
成员

表示使用内部元数据标记的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure RuntimeTypeHandle _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct RuntimeTypeHandle : ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class RuntimeTypeHandle : ISerializable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type RuntimeTypeHandle =
    struct
        interface ISerializable
    end

下面的示例演示如何从类型或对象中获取 RuntimeTypeHandle 以及如何将句柄转变回类型。

Imports System
Imports System.Reflection

Public Class MyClass1
    Private x As Integer = 0

    Public Function MyMethod() As Integer
        Return x
    End Function 'MyMethod
End Class

Public Class MyClass2

    Public Shared Sub Main()
        Dim myClass1 As New MyClass1()

        ' Get the RuntimeTypeHandle from an object.
        Dim myRTHFromObject As RuntimeTypeHandle = Type.GetTypeHandle(myClass1)
        ' Get the RuntimeTypeHandle from a type.
        Dim myRTHFromType As RuntimeTypeHandle = GetType(MyClass1).TypeHandle

        Console.WriteLine(vbLf & "myRTHFromObject.Value:  {0}", _
            myRTHFromObject.Value)
        Console.WriteLine("myRTHFromObject.GetType():  {0}", _
            myRTHFromObject.GetType())
        Console.WriteLine("Get the type back from the handle...")
        Console.WriteLine("Type.GetTypeFromHandle(myRTHFromObject):  {0}", _
            Type.GetTypeFromHandle(myRTHFromObject))

        Console.WriteLine(vbLf & "myRTHFromObject.Equals(myRTHFromType):  {0}", _
            myRTHFromObject.Equals(myRTHFromType))

        Console.WriteLine(vbLf & "myRTHFromType.Value:  {0}", _
            myRTHFromType.Value)
        Console.WriteLine("myRTHFromType.GetType():  {0}", _
            myRTHFromType.GetType())
        Console.WriteLine("Get the type back from the handle...")
        Console.WriteLine("Type.GetTypeFromHandle(myRTHFromType):  {0}", _
            Type.GetTypeFromHandle(myRTHFromType))
    End Sub
End Class

' This code example produces output similar to the following:
'
'myRTHFromObject.Value:  7549720
'myRTHFromObject.GetType():  System.RuntimeTypeHandle
'Get the type back from the handle...
'Type.GetTypeFromHandle(myRTHFromObject):  MyClass1
'
'myRTHFromObject.Equals(myRTHFromType):  True
'
'myRTHFromType.Value:  7549720
'myRTHFromType.GetType():  System.RuntimeTypeHandle
'Get the type back from the handle...
'Type.GetTypeFromHandle(myRTHFromType):  MyClass1

using System;
using System.Reflection;

public class MyClass1
{
    private int x=0;
    public int MyMethod()
    {
        return x;
    }
}

public class MyClass2
{
    public static void Main()
    {
        MyClass1 myClass1 = new MyClass1();

        // Get the RuntimeTypeHandle from an object.
        RuntimeTypeHandle myRTHFromObject = Type.GetTypeHandle(myClass1);
        // Get the RuntimeTypeHandle from a type.
        RuntimeTypeHandle myRTHFromType = typeof(MyClass1).TypeHandle;

        Console.WriteLine("\nmyRTHFromObject.Value:  {0}", myRTHFromObject.Value);
        Console.WriteLine("myRTHFromObject.GetType():  {0}", myRTHFromObject.GetType());
        Console.WriteLine("Get the type back from the handle...");
        Console.WriteLine("Type.GetTypeFromHandle(myRTHFromObject):  {0}",
            Type.GetTypeFromHandle(myRTHFromObject));

        Console.WriteLine("\nmyRTHFromObject.Equals(myRTHFromType):  {0}",
            myRTHFromObject.Equals(myRTHFromType));

        Console.WriteLine("\nmyRTHFromType.Value:  {0}", myRTHFromType.Value);
        Console.WriteLine("myRTHFromType.GetType():  {0}", myRTHFromType.GetType());
        Console.WriteLine("Get the type back from the handle...");
        Console.WriteLine("Type.GetTypeFromHandle(myRTHFromType):  {0}",
            Type.GetTypeFromHandle(myRTHFromType));
    }
}

/* This code example produces output similar to the following:

myRTHFromObject.Value:  799464
myRTHFromObject.GetType():  System.RuntimeTypeHandle
Get the type back from the handle...
Type.GetTypeFromHandle(myRTHFromObject):  MyClass1

myRTHFromObject.Equals(myRTHFromType):  True

myRTHFromType.Value:  799464
myRTHFromType.GetType():  System.RuntimeTypeHandle
Get the type back from the handle...
Type.GetTypeFromHandle(myRTHFromType):  MyClass1
 */

using namespace System;
using namespace System::Reflection;

public ref class MyClass1
{
private:
    int x;

public:
    int MyMethod()
    {
        return x;
    }
};

int main()
{
    MyClass1^ myClass1 = gcnew MyClass1;

    // Get the RuntimeTypeHandle from an object.
    RuntimeTypeHandle myRTHFromObject = Type::GetTypeHandle( myClass1 );

    // Get the RuntimeTypeHandle from a type.
    RuntimeTypeHandle myRTHFromType = MyClass1::typeid->TypeHandle;

    Console::WriteLine( "\nmyRTHFromObject.Value:  {0}", myRTHFromObject.Value );
    Console::WriteLine( "myRTHFromObject.GetType():  {0}", myRTHFromObject.GetType() );
    Console::WriteLine( "Get the type back from the handle..." );
    Console::WriteLine( "Type::GetTypeFromHandle(myRTHFromObject):  {0}",
        Type::GetTypeFromHandle(myRTHFromObject) );

    Console::WriteLine( "\nmyRTHFromObject.Equals(myRTHFromType):  {0}",
        myRTHFromObject.Equals(myRTHFromType) );

    Console::WriteLine( "\nmyRTHFromType.Value:  {0}", myRTHFromType.Value );
    Console::WriteLine( "myRTHFromType.GetType():  {0}", myRTHFromType.GetType() );
    Console::WriteLine( "Get the type back from the handle..." );
    Console::WriteLine( "Type::GetTypeFromHandle(myRTHFromType):  {0}",
        Type::GetTypeFromHandle(myRTHFromType) );
}

/* This code example produces output similar to the following:

myRTHFromObject.Value:  3295832
myRTHFromObject.GetType():  System.RuntimeTypeHandle
Get the type back from the handle...
Type::GetTypeFromHandle(myRTHFromObject):  MyClass1

myRTHFromObject.Equals(myRTHFromType):  True

myRTHFromType.Value:  3295832
myRTHFromType.GetType():  System.RuntimeTypeHandle
Get the type back from the handle...
Type::GetTypeFromHandle(myRTHFromType):  MyClass1
 */
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RuntimeTypeHandle 成员
System 命名空间


RuntimeTypeHandle 成员

RuntimeTypeHandle 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeTypeHandle 结构

表示使用内部元数据标记的类型。

RuntimeTypeHandle 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

RuntimeTypeHandle 结构
System 命名空间


RuntimeTypeHandle 方法

RuntimeTypeHandle 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeTypeHandle 结构

RuntimeTypeHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeTypeHandle 结构
System 命名空间


RuntimeTypeHandle ..::.Equals 方法

RuntimeTypeHandle
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeTypeHandle 结构

指示两个 RuntimeTypeHandle 结构是否相等。

名称 说明
页首

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
System 命名空间


RuntimeTypeHandle ..::.Equals 方法 (Object)

RuntimeTypeHandle
.
.
::
.
Equals 方法 (Object)
RuntimeTypeHandle 结构

指示指定的对象是否等于当前的 RuntimeTypeHandle 结构。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与当前实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 RuntimeTypeHandle 结构并且与此实例的值相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
Equals 重载
System 命名空间


RuntimeTypeHandle ..::.Equals 方法 (RuntimeTypeHandle)

RuntimeTypeHandle
.
.
::
.
Equals 方法 (RuntimeTypeHandle)
RuntimeTypeHandle 结构

指示指定的 RuntimeTypeHandle 结构是否等于当前的 RuntimeTypeHandle 结构。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    handle As RuntimeTypeHandle _
) As Boolean
public bool Equals(
    RuntimeTypeHandle handle
)
public:
bool Equals(
    RuntimeTypeHandle handle
)
member Equals :
        handle:RuntimeTypeHandle -> bool

参数

handle
类型： System RuntimeTypeHandle
要与当前实例进行比较的 RuntimeTypeHandle 结构。

返回值

类型： System Boolean
如果 handle 的值等于此实例的值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
Equals 重载
System 命名空间


RuntimeTypeHandle ..::.GetHashCode 方法

RuntimeTypeHandle
.
.
::
.
GetHashCode 方法
RuntimeTypeHandle 结构

返回当前实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
System 命名空间


RuntimeTypeHandle ..::.GetModuleHandle 方法

RuntimeTypeHandle
.
.
::
.
GetModuleHandle 方法
RuntimeTypeHandle 结构

获取包含当前实例所表示类型的模块的句柄。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Function GetModuleHandle As ModuleHandle
[CLSCompliantAttribute(false)]
public ModuleHandle GetModuleHandle()
[CLSCompliantAttribute(false)]
public:
ModuleHandle GetModuleHandle()
[<CLSCompliantAttribute(false)>]
member GetModuleHandle : unit -> ModuleHandle

返回值

类型： System ModuleHandle
ModuleHandle 结构，表示包含当前实例所表示类型的模块的句柄。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
System 命名空间


RuntimeTypeHandle ..::.GetObjectData 方法

RuntimeTypeHandle
.
.
::
.
GetObjectData 方法
RuntimeTypeHandle 结构

用反序列化当前实例表示的类型所必需的数据填充 SerializationInfo。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
用序列化信息填充的对象。
context
类型： System.Runtime.Serialization StreamingContext
（保留）存储和检索序列化数据的位置。

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SerializationException | Value 无效。

context 参数被保留，它目前不参与此运算。

有关此方法所执行的序列化操作的更多信息，请参见 SerializationInfo..::.AddValue(String, Object, Type) 方法。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
System 命名空间


RuntimeTypeHandle 运算符

RuntimeTypeHandle 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeTypeHandle 结构
名称 说明
页首

参考

RuntimeTypeHandle 结构
System 命名空间


RuntimeTypeHandle ..::.Equality 运算符

RuntimeTypeHandle
.
.
::
.
Equality 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeTypeHandle 结构

指示某个对象与 RuntimeTypeHandle 结构是否相等。

名称 说明
页首

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
System 命名空间


RuntimeTypeHandle ..::.Equality 运算符 (Object, RuntimeTypeHandle)

RuntimeTypeHandle
.
.
::
.
Equality 运算符 (Object, RuntimeTypeHandle)
RuntimeTypeHandle 结构

指示某个对象与 RuntimeTypeHandle 结构是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    left As Object, _
    right As RuntimeTypeHandle _
) As Boolean
public static bool operator ==(
    Object left,
    RuntimeTypeHandle right
)
public:
static bool operator ==(
    Object^ left,
    RuntimeTypeHandle right
)
static let inline (=)
        left:Object *
        right:RuntimeTypeHandle  : bool

参数

left
类型： System Object
要与 right 比较的对象。
right
类型： System RuntimeTypeHandle
要与 left 比较的 RuntimeTypeHandle 结构。

返回值

类型： System Boolean
如果 left 是 RuntimeTypeHandle 结构并且与 right 相等，则为 true；否则为 false。

如果使用此运算符对 RuntimeTypeHandle 类型的两个变量进行比较，则会导致在编译时出现重载解析不明确的错误。请改用 Equals 方法。 如果使用此运算符对 RuntimeTypeHandle 类型的两个变量进行比较，则会导致在编译时出现重载解析不明确的错误。请改用 Equals 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
Equality 重载
System 命名空间


RuntimeTypeHandle ..::.Equality 运算符 (RuntimeTypeHandle, Object)

RuntimeTypeHandle
.
.
::
.
Equality 运算符 (RuntimeTypeHandle, Object)
RuntimeTypeHandle 结构

指示 RuntimeTypeHandle 结构与某个对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    left As RuntimeTypeHandle, _
    right As Object _
) As Boolean
public static bool operator ==(
    RuntimeTypeHandle left,
    Object right
)
public:
static bool operator ==(
    RuntimeTypeHandle left,
    Object^ right
)
static let inline (=)
        left:RuntimeTypeHandle *
        right:Object  : bool

参数

left
类型： System RuntimeTypeHandle
要与 right 比较的 RuntimeTypeHandle 结构。
right
类型： System Object
要与 left 比较的对象。

返回值

类型： System Boolean
如果 right 是 RuntimeTypeHandle 并且与 left 相等，则为 true；否则为 false。

如果使用此运算符对 RuntimeTypeHandle 类型的两个变量进行比较，则会导致在编译时出现重载解析不明确的错误。请改用 Equals 方法。 如果使用此运算符对 RuntimeTypeHandle 类型的两个变量进行比较，则会导致在编译时出现重载解析不明确的错误。请改用 Equals 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
Equality 重载
System 命名空间


RuntimeTypeHandle ..::.Inequality 运算符

RuntimeTypeHandle
.
.
::
.
Inequality 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeTypeHandle 结构

指示某个对象与 RuntimeTypeHandle 结构是否不相等。

名称 说明
页首

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
System 命名空间


RuntimeTypeHandle ..::.Inequality 运算符 (Object, RuntimeTypeHandle)

RuntimeTypeHandle
.
.
::
.
Inequality 运算符 (Object, RuntimeTypeHandle)
RuntimeTypeHandle 结构

指示某个对象与 RuntimeTypeHandle 结构是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    left As Object, _
    right As RuntimeTypeHandle _
) As Boolean
public static bool operator !=(
    Object left,
    RuntimeTypeHandle right
)
public:
static bool operator !=(
    Object^ left,
    RuntimeTypeHandle right
)
static let inline (<>)
        left:Object *
        right:RuntimeTypeHandle  : bool

参数

left
类型： System Object
要与 right 比较的对象。
right
类型： System RuntimeTypeHandle
要与 left 比较的 RuntimeTypeHandle 结构。

返回值

类型： System Boolean
如果 left 是 RuntimeTypeHandle 并且与 right 相等，则为 true；否则为 false。

如果使用此运算符对 RuntimeTypeHandle 类型的两个变量进行比较，则会导致在编译时出现重载解析不明确的错误。请改用 Equals 方法。 如果使用此运算符对 RuntimeTypeHandle 类型的两个变量进行比较，则会导致在编译时出现重载解析不明确的错误。请改用 Equals 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
Inequality 重载
System 命名空间


RuntimeTypeHandle ..::.Inequality 运算符 (RuntimeTypeHandle, Object)

RuntimeTypeHandle
.
.
::
.
Inequality 运算符 (RuntimeTypeHandle, Object)
RuntimeTypeHandle 结构

指示 RuntimeTypeHandle 结构与某个对象是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    left As RuntimeTypeHandle, _
    right As Object _
) As Boolean
public static bool operator !=(
    RuntimeTypeHandle left,
    Object right
)
public:
static bool operator !=(
    RuntimeTypeHandle left,
    Object^ right
)
static let inline (<>)
        left:RuntimeTypeHandle *
        right:Object  : bool

参数

left
类型： System RuntimeTypeHandle
要与 right 比较的 RuntimeTypeHandle 结构。
right
类型： System Object
要与 left 比较的对象。

返回值

类型： System Boolean
如果 right 是 RuntimeTypeHandle 结构并且它与 left 不相等，则为 true；否则为 false。

如果使用此运算符对 RuntimeTypeHandle 类型的两个变量进行比较，则会导致在编译时出现重载解析不明确的错误。请改用 Equals 方法。 如果使用此运算符对 RuntimeTypeHandle 类型的两个变量进行比较，则会导致在编译时出现重载解析不明确的错误。请改用 Equals 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
Inequality 重载
System 命名空间


RuntimeTypeHandle 属性

RuntimeTypeHandle 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RuntimeTypeHandle 结构

RuntimeTypeHandle 类型公开以下成员。

名称 说明
页首

参考

RuntimeTypeHandle 结构
System 命名空间


RuntimeTypeHandle ..::.Value 属性

RuntimeTypeHandle
.
.
::
.
Value 属性
RuntimeTypeHandle 结构

获取此实例所表示的类型的句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Value As IntPtr
    Get
public IntPtr Value { get; }
public:
property IntPtr Value {
    IntPtr get ();
}
member Value : IntPtr

属性值

类型： System IntPtr
此实例所表示的类型的句柄。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RuntimeTypeHandle 结构
RuntimeTypeHandle 成员
System 命名空间


SByte 结构

SByte 结构
成员

表示 8 位有符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Int16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public Structure SByte _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of SByte),  _
    IEquatable(Of SByte)
[SerializableAttribute]
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public struct SByte : IComparable, IFormattable,
    IConvertible, IComparable<sbyte>, IEquatable<sbyte>
[SerializableAttribute]
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public value class SByte : IComparable,
    IFormattable, IConvertible, IComparable<signed char>, IEquatable<signed char>
[<SealedAttribute>]
[<SerializableAttribute>]
[<CLSCompliantAttribute(false)>]
[<ComVisibleAttribute(true)>]
type SByte =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<sbyte>
        interface IEquatable<sbyte>
    end

SByte 值类型表示值介于 -128 到 +127 之间的整数。

重要说明 重要事项

SByte 类型不符合 CLS。符合 CLS 的替代类型是 Int16。可以改用 Byte 来替换范围从零到 MaxValue 的正 SByte 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 SByte 类型不符合 CLS。符合 CLS 的替代类型是 Int16。可以改用 Byte 来替换范围从零到 MaxValue 的正 SByte 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 SByte 类型不符合 CLS。符合 CLS 的替代类型是 Int16。可以改用 Byte 来替换范围从零到 MaxValue 的正 SByte 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 SByte 类型不符合 CLS。符合 CLS 的替代类型是 Int16。可以改用 Byte 来替换范围从零到 MaxValue 的正 SByte 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。

SByte 为比较此类型的实例，将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。

有关格式规范代码如何控制值类型的字符串表示形式的信息，请参见 格式化类型。

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 成员
System 命名空间
Byte


SByte 成员

SByte 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SByte 结构

表示 8 位有符号整数。

SByte 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SByte 结构
System 命名空间


SByte 字段

SByte 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SByte 结构

SByte 类型公开以下成员。

名称 说明
页首

参考

SByte 结构
System 命名空间


SByte ..::.MaxValue 字段

SByte
.
.
::
.
MaxValue 字段
SByte 结构

表示 SByte 的最大可能值。此字段为常数。 表示 SByte 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As SByte
public const sbyte MaxValue
public:
literal signed char MaxValue
static val mutable MaxValue: sbyte

此常数的值为 127；即十六进制的 0x7F。

下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Int64 值是否在 SByte 类型的范围之内。此验证可防止在运行时发生 OverflowException。 下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Int64 值是否在 SByte 类型的范围之内。此验证可防止在运行时发生 OverflowException。

Dim longValue As Long = -130
Dim byteValue As SByte

If longValue <= SByte.MaxValue AndAlso _
   longValue >= SByte.MinValue Then
   byteValue = CSByte(longValue)
   Console.WriteLine("Converted long integer value to {0}.", byteValue)
Else
   Dim rangeLimit As SByte
   Dim relationship As String

   If longValue > SByte.MaxValue Then
      rangeLimit = SByte.MaxValue
      relationship = "greater"
   Else
      rangeLimit = SByte.MinValue
      relationship = "less"
   End If

   Console.WriteLine("Conversion failure: {0:n0} is {1} than {2}.", _
                     longValue, _
                     relationship, _
                     rangeLimit)
End If

long longValue = -130;
sbyte byteValue;

if (longValue <= sbyte.MaxValue &&
    longValue >= sbyte.MinValue)
{
   byteValue = (sbyte) longValue;
   Console.WriteLine("Converted long integer value to {0}.", byteValue);
}
else
{
   sbyte rangeLimit;
   string relationship;

   if (longValue > sbyte.MaxValue)
   {
      rangeLimit = sbyte.MaxValue;
      relationship = "greater";
   }
   else
   {
      rangeLimit = sbyte.MinValue;
      relationship = "less";
   }

   Console.WriteLine("Conversion failure: {0:n0} is {1} than {2}.",
                     longValue,
                     relationship,
                     rangeLimit);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间
MinValue


SByte ..::.MinValue 字段

SByte
.
.
::
.
MinValue 字段
SByte 结构

表示 SByte 的最小可能值。此字段为常数。 表示 SByte 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As SByte
public const sbyte MinValue
public:
literal signed char MinValue
static val mutable MinValue: sbyte

此常数的值为 -128；即十六进制的 0x80。

下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Int64 值是否在 SByte 类型的范围之内。此验证可防止在运行时发生 OverflowException。 下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Int64 值是否在 SByte 类型的范围之内。此验证可防止在运行时发生 OverflowException。

Dim longValue As Long = -130
Dim byteValue As SByte

If longValue <= SByte.MaxValue AndAlso _
   longValue >= SByte.MinValue Then
   byteValue = CSByte(longValue)
   Console.WriteLine("Converted long integer value to {0}.", byteValue)
Else
   Dim rangeLimit As SByte
   Dim relationship As String

   If longValue > SByte.MaxValue Then
      rangeLimit = SByte.MaxValue
      relationship = "greater"
   Else
      rangeLimit = SByte.MinValue
      relationship = "less"
   End If

   Console.WriteLine("Conversion failure: {0:n0} is {1} than {2}.", _
                     longValue, _
                     relationship, _
                     rangeLimit)
End If

long longValue = -130;
sbyte byteValue;

if (longValue <= sbyte.MaxValue &&
    longValue >= sbyte.MinValue)
{
   byteValue = (sbyte) longValue;
   Console.WriteLine("Converted long integer value to {0}.", byteValue);
}
else
{
   sbyte rangeLimit;
   string relationship;

   if (longValue > sbyte.MaxValue)
   {
      rangeLimit = sbyte.MaxValue;
      relationship = "greater";
   }
   else
   {
      rangeLimit = sbyte.MinValue;
      relationship = "less";
   }

   Console.WriteLine("Conversion failure: {0:n0} is {1} than {2}.",
                     longValue,
                     relationship,
                     rangeLimit);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间
MaxValue


SByte 方法

SByte 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SByte 结构

SByte 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

SByte 结构
System 命名空间


SByte ..::.CompareTo 方法

SByte
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SByte 结构

将此实例与指定的对象或 SByte 进行比较，并返回这些值相对大小的标志。

名称 说明
页首

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.CompareTo 方法 (Object)

SByte
.
.
::
.
CompareTo 方法 (Object)
SByte 结构

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ obj As Object _ ) As Integer
public int CompareTo( Object obj )
public: virtual int CompareTo( Object^ obj ) sealed
abstract CompareTo : obj:Object -> int override CompareTo : obj:Object -> int
参数
obj
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
有符号数字，指示此实例和
obj
的相对值。
返回值
说明
小于零
此实例小于
obj
。
零
此实例等于
obj
。
大于零
此实例大于
obj
。
- 或 -
obj
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | obj 不是 SByte。

无论 SByte 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

obj 参数必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是 SByte 的实例；否则将引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
CompareTo 重载
System 命名空间
Byte
Equals


SByte ..::.CompareTo 方法 (SByte)

SByte
.
.
::
.
CompareTo 方法 (SByte)
SByte 结构

将此实例与指定的 8 位有符号整数进行比较并返回对其相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As SByte _ ) As Integer
public int CompareTo( sbyte value )
public: virtual int CompareTo( signed char value ) sealed
abstract CompareTo : value:sbyte -> int override CompareTo : value:sbyte -> int
参数
value
类型： System SByte
要比较的 8 位有符号整数。
返回值
类型： System Int32
一个有符号的整数，它指示此实例和
value
的相对顺序。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 SByte..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。

请参考所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
CompareTo 重载
System 命名空间
IComparable
Equals


SByte ..::.Equals 方法

SByte
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SByte 结构

返回一个值，该值指示此实例是否与指定的对象或 SByte 相等。

名称 说明
页首

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.Equals 方法 (Object)

SByte
.
.
::
.
Equals 方法 (Object)
SByte 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 SByte 的实例并且等于此实例的值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
Equals 重载
System 命名空间
CompareTo


SByte ..::.Equals 方法 (SByte)

SByte
.
.
::
.
Equals 方法 (SByte)
SByte 结构

返回一个值，该值指示此实例是否与指定的 SByte 值相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As SByte _
) As Boolean
public bool Equals(
    sbyte obj
)
public:
virtual bool Equals(
    signed char obj
) sealed
abstract Equals :
        obj:sbyte -> bool
override Equals :
        obj:sbyte -> bool

参数

obj
类型： System SByte
要与此实例进行比较的 SByte 值。

返回值

类型： System Boolean
如果 obj 的值与此实例相同，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
Equals 重载
System 命名空间


SByte ..::.GetHashCode 方法

SByte
.
.
::
.
GetHashCode 方法
SByte 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.GetTypeCode 方法

SByte
.
.
::
.
GetTypeCode 方法
SByte 结构

返回值类型 SByte 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.SByte。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间
TypeCode


SByte ..::.IConvertible ..::.ToBoolean 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
未使用此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToByte 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
未使用此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToChar 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
当前实例的值，已转换为 Char。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToDateTime 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试这样做会引发 InvalidCastException。 不支持此转换。尝试这样做会引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
无。不支持此转换。 无。不支持此转换。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToDecimal 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
未使用此参数。

返回值

类型： System Decimal
当前实例的值，已转换为 Decimal。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToDouble 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，已转换为 Double。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToInt16 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，已转换为 Int16。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToInt32 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，已转换为 Int32。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToInt64 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，已转换为 Int64。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToSByte 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，未更改。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToSingle 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，已转换为 Single。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToType 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要将此 SByte 值转换为的 Type。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，可提供有关返回值的格式的信息。

返回值

类型： System Object
转换为 type 类型对象的当前实例的值。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToUInt16 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，已转换为 UInt16。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToUInt32 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，已转换为 UInt32。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.IConvertible ..::.ToUInt64 方法

SByte
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
SByte 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，已转换为 UInt64。

实现

此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(SByte) 方法。 此成员是显式接口成员的实现。只能在 SByte 实例被强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(SByte) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.Parse 方法

SByte
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SByte 结构

将数字的字符串表示形式转换为它的等效 8 位有符号整数。

名称 说明
页首

参考

SByte 结构
SByte 成员
System 命名空间
TryParse


SByte ..::.Parse 方法 (String)

SByte
.
.
::
.
Parse 方法 (String)
SByte 结构

将数字的字符串表示形式转换为其等效的 8 位有符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte Parse(
    string s
)
[CLSCompliantAttribute(false)]
public:
static signed char Parse(
    String^ s
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string -> sbyte

参数

s
类型： System String
一个字符串，它表示要转换的数字。该字符串使用 NumberStyles..::.Integer 样式来进行解释。 一个字符串，它表示要转换的数字。该字符串使用 NumberStyles..::.Integer 样式来进行解释。

返回值

类型： System SByte
与 s 参数中包含的数字等效的 8 位有符号整数。
异常 | 条件
ArgumentException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 不是由一个可选符号后跟数字序列（0 到 9）组成的。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导正号或负号。若要显式定义可出现在 s 中的样式元素，请使用 Parse(String, NumberStyles) 或 Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导正号或负号。若要显式定义可出现在 s 中的样式元素，请使用 Parse(String, NumberStyles) 或 Parse(String, NumberStyles, IFormatProvider) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导正号或负号。若要显式定义可出现在 s 中的样式元素，请使用 Parse(String, NumberStyles) 或 Parse(String, NumberStyles, IFormatProvider) 方法。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用其他一些区域性的格式设置信息分析字符串，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。

下面的示例演示如何使用 Parse 方法将字符串值转换为带符号的字节值。然后，将所生成的有符号字节值显示到控制台上。 下面的示例演示如何使用 Parse 方法将字符串值转换为带符号的字节值。然后，将所生成的有符号字节值显示到控制台上。

' Define an array of numeric strings.
Dim values() As String = { "-16", "  -3", "+ 12", " +12 ", "  12  ", _
                           "+120", "(103)", "192", "-160" }

' Parse each string and display the result.
For Each value As String In values
   Try
      Console.WriteLine("Converted '{0}' to the SByte value {1}.", _
                        value, SByte.Parse(value))
   Catch e As FormatException
      Console.WriteLine("'{0}' cannot be parsed successfully by SByte type.", _
                        value)
   Catch e As OverflowException
      Console.WriteLine("'{0}' is out of range of the SByte type.", _
                        value)
   End Try
Next
' The example displays the following output:
'       Converted '-16' to the SByte value -16.
'       Converted '  -3' to the SByte value -3.
'       '+ 12' cannot be parsed successfully by SByte type.
'       Converted ' +12 ' to the SByte value 12.
'       Converted '  12  ' to the SByte value 12.
'       Converted '+120' to the SByte value 120.
'       '(103)' cannot be parsed successfully by SByte type.
'       '192' is out of range of the SByte type.
'       '-160' is out of range of the SByte type.

// Define an array of numeric strings.
string[] values = { "-16", "  -3", "+ 12", " +12 ", "  12  ",
                    "+120", "(103)", "192", "-160" };

// Parse each string and display the result.
foreach (string value in values)
{
   try {
      Console.WriteLine("Converted '{0}' to the SByte value {1}.",
                        value, SByte.Parse(value));
   }
   catch (FormatException) {
      Console.WriteLine("'{0}' cannot be parsed successfully by SByte type.",
                        value);
   }
   catch (OverflowException) {
      Console.WriteLine("'{0}' is out of range of the SByte type.",
                        value);
   }
}
// The example displays the following output:
//       Converted '-16' to the SByte value -16.
//       Converted '  -3' to the SByte value -3.
//       '+ 12' cannot be parsed successfully by SByte type.
//       Converted ' +12 ' to the SByte value 12.
//       Converted '  12  ' to the SByte value 12.
//       Converted '+120' to the SByte value 120.
//       '(103)' cannot be parsed successfully by SByte type.
//       '192' is out of range of the SByte type.
//       '-160' is out of range of the SByte type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
Parse 重载
System 命名空间

其他资源

分析数值字符串
格式化类型


SByte ..::.Parse 方法 (String, NumberStyles)

SByte
.
.
::
.
Parse 方法 (String, NumberStyles)
SByte 结构

将数字的指定样式的字符串表示形式转换为其等效的 8 位有符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte Parse(
    string s,
    NumberStyles style
)
[CLSCompliantAttribute(false)]
public:
static signed char Parse(
    String^ s,
    NumberStyles style
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        style:NumberStyles -> sbyte

参数

s
类型： System String
包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。 包含要转换的数字的字符串。该字符串使用由 style 指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。要指定的一个典型值为 NumberStyles..::.Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。要指定的一个典型值为 NumberStyles..::.Integer。

返回值

类型： System SByte
与 s 中指定的数字等效的 8 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。 - 或 - s 包含非零的小数位。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign]digits[.fractional_digits][E[sign]exponential_digits][ws]

如果 style 包含 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果样式包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果样式包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits | 由从 0 到 9 的数字组成的序列。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional_digits | 如果 style 包含 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果它不包含该标志，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 如果 style 包含 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果它不包含该标志，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
E | “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential_digits | 一处或多处数字 0-9。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 一处或多处数字 0-9。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。但是，如果 style 不包含 NumberStyles..::.AllowExponent 标志，fractional_digits 必须由一个或多个数字 0 组成；否则，将引发 OverflowException。 小数点 (.)和 fractional_digits 元素。但是，如果 style 不包含 NumberStyles..::.AllowExponent 标志，fractional_digits 必须由一个或多个数字 0 组成；否则，将引发 OverflowException。
NumberStyles AllowExponent | “e”或“E”字符与 exponential_digits 一起指示指数表示法。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | digits 之前的正号。
NumberStyles AllowTrailingSign | digits 之后的正号。
NumberStyles AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
NumberStyles AllowThousands | 组分隔符 (,) 元素。虽然组分隔符可以出现在 s 中，但必须在它前面附加一个或多个数字 0。 组分隔符 (,) 元素。虽然组分隔符可以出现在 s 中，但必须在它前面附加一个或多个数字 0。
NumberStyles AllowCurrencySymbol | 货币 ($) 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。）

说明 说明

如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。 如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。

如果 s 表示一个十六进制数字，则 Parse(String, NumberStyles) 方法将把字节的高序位解释为符号位。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要使用其他一些区域性的格式设置信息，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要使用其他一些区域性的格式设置信息，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。

下面的示例使用 Parse(String, NumberStyles) 方法来分析 SByte 值的字符串表示形式。此示例的当前区域性为 en-US。 下面的示例使用 Parse(String, NumberStyles) 方法来分析 SByte 值的字符串表示形式。此示例的当前区域性为 en-US。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim style As NumberStyles
      Dim number As SByte

      ' Parse value with no styles allowed.
      Dim values1() As String = { " 121 ", "121", "-121" }
      style = NumberStyles.None
      Console.WriteLine("Styles: {0}", style.ToString())
      For Each value As String In values1
         Try
            number = SByte.Parse(value, style)
            Console.WriteLine("   Converted '{0}' to {1}.", value, number)
         Catch e As FormatException
            Console.WriteLine("   Unable to parse '{0}'.", value)
         End Try
      Next
      Console.WriteLine()

      ' Parse value with trailing sign.
      style = NumberStyles.Integer Or NumberStyles.AllowTrailingSign
      Dim values2() As String = { " 103+", " 103 +", "+103", "(103)", "   +103  " }
      Console.WriteLine("Styles: {0}", style.ToString())
      For Each value As String In values2
         Try
            number = SByte.Parse(value, style)
            Console.WriteLine("   Converted '{0}' to {1}.", value, number)
         Catch e As FormatException
            Console.WriteLine("   Unable to parse '{0}'.", value)
         Catch e As OverflowException
            Console.WriteLine("   '{0}' is out of range of the SByte type.", value)
         End Try
      Next
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output:
'       Styles: None
'          Unable to parse ' 121 '.
'          Converted '121' to 121.
'          Unable to parse '-121'.
'
'       Styles: Integer, AllowTrailingSign
'          Converted ' 103+' to 103.
'          Converted ' 103 +' to 103.
'          Converted '+103' to 103.
'          Unable to parse '(103)'.
'          Converted '   +103  ' to 103.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberStyles style;
      sbyte number;

      // Parse value with no styles allowed.
      string[] values1 = { " 121 ", "121", "-121" };
      style = NumberStyles.None;
      Console.WriteLine("Styles: {0}", style.ToString());
      foreach (string value in values1)
      {
         try {
            number = SByte.Parse(value, style);
            Console.WriteLine("   Converted '{0}' to {1}.", value, number);
         }
         catch (FormatException) {
            Console.WriteLine("   Unable to parse '{0}'.", value);
         }
      }
      Console.WriteLine();

      // Parse value with trailing sign.
      style = NumberStyles.Integer | NumberStyles.AllowTrailingSign;
      string[] values2 = { " 103+", " 103 +", "+103", "(103)", "   +103  " };
      Console.WriteLine("Styles: {0}", style.ToString());
      foreach (string value in values2)
      {
         try {
            number = SByte.Parse(value, style);
            Console.WriteLine("   Converted '{0}' to {1}.", value, number);
         }
         catch (FormatException) {
            Console.WriteLine("   Unable to parse '{0}'.", value);
         }
         catch (OverflowException) {
            Console.WriteLine("   '{0}' is out of range of the SByte type.", value);
         }
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//       Styles: None
//          Unable to parse ' 121 '.
//          Converted '121' to 121.
//          Unable to parse '-121'.
//
//       Styles: Integer, AllowTrailingSign
//          Converted ' 103+' to 103.
//          Converted ' 103 +' to 103.
//          Converted '+103' to 103.
//          Unable to parse '(103)'.
//          Converted '   +103  ' to 103.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
Parse 重载
System 命名空间
SByte ToString
TryParse

其他资源

分析数值字符串
格式化类型


SByte ..::.Parse 方法 (String, IFormatProvider)

SByte
.
.
::
.
Parse 方法 (String, IFormatProvider)
SByte 结构

将数字的指定区域性特定格式的字符串表示形式转换为其等效的 8 位有符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte Parse(
    string s,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static signed char Parse(
    String^ s,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        provider:IFormatProvider -> sbyte

参数

s
类型： System String
一个字符串，它表示要转换的数字。该字符串使用 NumberStyles..::.Integer 样式来进行解释。 一个字符串，它表示要转换的数字。该字符串使用 NumberStyles..::.Integer 样式来进行解释。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 一个对象，提供有关 s 的区域性特定格式设置信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

返回值

类型： System SByte
与 s 中指定的数字等效的 8 位有符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。
digits | 一系列从 0 到 9 之间的数字。

使用 Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 使用 Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 使用 Integer 样式解释 s 参数。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。

provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。

  • 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例定义一个自定义 NumberFormatInfo 对象，该对象将波形符 (~) 定义为负号。然后，使用此自定义 NumberFormatInfo 对象以及一个代表固定区域性数字的 CultureInfo 对象来分析数字字符串。 下面的示例定义一个自定义 NumberFormatInfo 对象，该对象将波形符 (~) 定义为负号。然后，使用此自定义 NumberFormatInfo 对象以及一个代表固定区域性数字的 CultureInfo 对象来分析数字字符串。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim nf As New NumberFormatInfo()
      nf.NegativeSign = "~"

      Dim values() As String = { "-103", "+12", "~16", "  1", "~255" }
      Dim providers() As IFormatProvider = { nf, CultureInfo.InvariantCulture }

      For Each provider As IFormatProvider In providers
         Console.WriteLine("Conversions using {0}:", CObj(provider).GetType().Name)
         For Each value As String In values
            Try
               Console.WriteLine("   Converted '{0}' to {1}.", _
                                 value, SByte.Parse(value, provider))
            Catch e As FormatException
               Console.WriteLine("   Unable to parse '{0}'.", value)
            Catch e As OverflowException
               Console.WriteLine("   '{0}' is out of range of the SByte type.", value)
            End Try
         Next
      Next
   End Sub
End Module
' The example displays '
'       Conversions using NumberFormatInfo:
'          Unable to parse '-103'.
'          Converted '+12' to 12.
'          Converted '~16' to -16.
'          Converted '  1' to 1.
'          '~255' is out of range of the SByte type.
'       Conversions using CultureInfo:
'          Converted '-103' to -103.
'          Converted '+12' to 12.
'          Unable to parse '~16'.
'          Converted '  1' to 1.
'          Unable to parse '~255'.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo nf = new NumberFormatInfo();
      nf.NegativeSign = "~";

      string[] values = { "-103", "+12", "~16", "  1", "~255" };
      IFormatProvider[] providers = { nf, CultureInfo.InvariantCulture };

      foreach (IFormatProvider provider in providers)
      {
         Console.WriteLine("Conversions using {0}:", ((object) provider).GetType().Name);
         foreach (string value in values)
         {
            try {
               Console.WriteLine("   Converted '{0}' to {1}.",
                                 value, SByte.Parse(value, provider));
            }
            catch (FormatException) {
               Console.WriteLine("   Unable to parse '{0}'.", value);
            }
            catch (OverflowException) {
               Console.WriteLine("   '{0}' is out of range of the SByte type.", value);
            }
         }
      }
   }
}
// The example displays the following output:
//       Conversions using NumberFormatInfo:
//          Unable to parse '-103'.
//          Converted '+12' to 12.
//          Converted '~16' to -16.
//          Converted '  1' to 1.
//          '~255' is out of range of the SByte type.
//       Conversions using CultureInfo:
//          Converted '-103' to -103.
//          Converted '+12' to 12.
//          Unable to parse '~16'.
//          Converted '  1' to 1.
//          Unable to parse '~255'.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SByte 结构
SByte 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


SByte ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

SByte
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
SByte 结构

将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效 8 位有符号数值。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String, NumberStyles, IFormatProvider)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As SByte
[CLSCompliantAttribute(false)]
public static sbyte Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static signed char Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> sbyte

参数

s
类型： System String
包含要转换的数字的字符串。使用由 style 指定的样式解释该字符串。 包含要转换的数字的字符串。使用由 style 指定的样式解释该字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 NumberStyles..::.Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。 一个对象，提供有关 s 的区域性特定格式设置信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前的线程区域性。

返回值

类型： System SByte
与 s 参数中指定的数字等效的 8 位有符号字节值。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 的组合。
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign]digits[.fractional_digits][E[sign]exponential_digits][ws]

如果 style 包含 AllowHexSpecifier，则 s 参数可能包含以下元素：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits | 由从 0 到 9 的数字组成的序列。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional_digits | 如果 style 包含 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果它不包含该标志，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 如果 style 包含 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果它不包含该标志，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
E | “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential_digits | 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。但是，如果样式不包含 NumberStyles..::.AllowExponent 标志，fractional_digits 必须由一个或多个数字 0 组成；否则，将引发 OverflowException。 小数点 (.)和 fractional_digits 元素。但是，如果样式不包含 NumberStyles..::.AllowExponent 标志，fractional_digits 必须由一个或多个数字 0 组成；否则，将引发 OverflowException。
NumberStyles AllowExponent | “e”或“E”字符与 exponential_digits 一起指示指数表示法。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | digits 之前的正号。
NumberStyles AllowTrailingSign | digits 之后的正号。
NumberStyles AllowParentheses | 数字之前和之后的括号用于表示负值。
NumberStyles AllowThousands | 组分隔符 (,) 元素。虽然组分隔符可以出现在 s 中，但必须在它前面附加一个或多个数字 0。 组分隔符 (,) 元素。虽然组分隔符可以出现在 s 中，但必须在它前面附加一个或多个数字 0。
NumberStyles AllowCurrencySymbol | 货币 ($) 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。）

说明 说明

如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。 如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。

如果 s 表示一个十六进制数字，则 Parse(String, NumberStyles) 方法将把字节的高序位解释为符号位。

provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。

  • 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例演示如何使用 Parse(String, NumberStyles, IFormatProvider) 方法将数字的各种字符串表示形式转换为有符号的整数值。

Imports System.Globalization

Module modMain
   Public Sub Main()
      Dim byteString As String

      byteString = " 123"
      ParseString(byteString, NumberStyles.None)
      ParseString(byteString, NumberStyles.Integer)

      byteString = "3A"
      ParseString(byteString, NumberStyles.AllowHexSpecifier)

      byteString = "21"
      ParseString(byteString, NumberStyles.Integer)
      ParseString(byteString, NumberStyles.AllowHexSpecifier)

      byteString = "-22"
      ParseString(byteString, NumberStyles.Integer)
      ParseString(byteString, NumberStyles.AllowParentheses)

      byteString = "(45)"
      ParseString(byteString, NumberStyles.AllowParentheses)

      byteString = "000,000,056"
      ParseString(byteString, NumberStyles.Integer)
      ParseString(byteString, NumberStyles.Integer Or NumberStyles.AllowThousands)
   End Sub

   Private Sub ParseString(value As String, style As NumberStyles)
      Dim number As SByte

      Try
         number = SByte.Parse(value, style, NumberFormatInfo.CurrentInfo)
         Console.WriteLine("SByte.Parse(""{0}"", {1})) = {2}", value, style.ToString, number)
      Catch e As Exception
         Console.WriteLine("'{0}' and {1} throw a {2}", value, style.ToString, e.GetType.Name)
      End Try
   End Sub
End Module
' The example displays the following information to the console:
'       ' 123' and None throw a FormatException
'       SByte.Parse(" 123", Integer)) = 123
'       SByte.Parse("3A", AllowHexSpecifier)) = 58
'       SByte.Parse("21", Integer)) = 21
'       SByte.Parse("21", AllowHexSpecifier)) = 33
'       SByte.Parse("-22", Integer)) = -22
'       '-22' and AllowParentheses throw a FormatException
'       SByte.Parse("(45)", AllowParentheses)) = -45
'       '000,000,056' and Integer throw a FormatException
'       SByte.Parse("000,000,056", Integer, AllowThousands)) = 56

using System;
using System.Globalization;

public class SByteConversion
{
   NumberFormatInfo provider = NumberFormatInfo.CurrentInfo;

   public static void Main()
   {
      string stringValue;
      NumberStyles style;

      stringValue = "   123   ";
      style = NumberStyles.None;
      CallParseOperation(stringValue, style);

      stringValue = "000,000,123";
      style = NumberStyles.Integer | NumberStyles.AllowThousands;
      CallParseOperation(stringValue, style);

      stringValue = "-100";
      style = NumberStyles.AllowLeadingSign;
      CallParseOperation(stringValue, style);

      stringValue = "100-";
      style = NumberStyles.AllowLeadingSign;
      CallParseOperation(stringValue, style);

      stringValue = "100-";
      style = NumberStyles.AllowTrailingSign;
      CallParseOperation(stringValue, style);

      stringValue = "$100";
      style = NumberStyles.AllowCurrencySymbol;
      CallParseOperation(stringValue, style);

      style = NumberStyles.Integer;
      CallParseOperation(stringValue, style);

      style = NumberStyles.AllowDecimalPoint;
      CallParseOperation("100.0", style);

      stringValue = "1e02";
      style = NumberStyles.AllowExponent;
      CallParseOperation(stringValue, style);

      stringValue = "(100)";
      style = NumberStyles.AllowParentheses;
      CallParseOperation(stringValue, style);
   }

   private static void CallParseOperation(string stringValue,
                                          NumberStyles style)
   {
      sbyte number;

      try
      {
         number = sbyte.Parse(stringValue, style);
         Console.WriteLine("SByte.Parse('{0}', {1})) = {2}",
                           stringValue, style.ToString(), number);
      }
      catch (Exception e)
      {
         Console.WriteLine("'{0}' and {1} throw a {2}",
                           stringValue, style.ToString(), e.GetType().Name);
      }
   }
}
// The example displays the following information to the console:
//       '   123   ' and None throw a FormatException
//       SByte.Parse('000,000,123', Integer, AllowThousands)) = 123
//       SByte.Parse('-100', AllowLeadingSign)) = -100
//       '100-' and AllowLeadingSign throw a FormatException
//       SByte.Parse('100-', AllowTrailingSign)) = -100
//       SByte.Parse('$100', AllowCurrencySymbol)) = 100
//       '$100' and Integer throw a FormatException
//       SByte.Parse('100.0', AllowDecimalPoint)) = 100
//       SByte.Parse('1e02', AllowExponent)) = 100
//       SByte.Parse('(100)', AllowParentheses)) = -100

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SByte 结构
SByte 成员
Parse 重载
System 命名空间


SByte ..::.ToString 方法

SByte
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SByte 结构

将此实例的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

SByte 结构
SByte 成员
System 命名空间


SByte ..::.TryParse 方法

SByte
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SByte 结构

将数字的字符串表示形式转换为其等效的 8 位有符号整数。一个指示转换是否成功的返回代码。 将数字的字符串表示形式转换为其等效的 8 位有符号整数。一个指示转换是否成功的返回代码。

名称 说明
页首

参考

SByte 结构
SByte 成员
System 命名空间
Parse


SByte ..::.TryParse 方法 (String, SByte%)

SByte
.
.
::
.
TryParse 方法 (String, SByte%)
SByte 结构

尝试将数字的字符串表示形式转换为它的等效 SByte，并返回一个指示转换是否成功的值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As SByte _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool TryParse(
    string s,
    out sbyte result
)
[CLSCompliantAttribute(false)]
public:
static bool TryParse(
    String^ s,
    [OutAttribute] signed char% result
)
[<CLSCompliantAttribute(false)>]
static member TryParse :
        s:string *
        result:sbyte byref -> bool

参数

s
类型： System String
包含要转换的数字的字符串。
result
类型： System SByte %
当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 8 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、格式不正确或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 8 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、格式不正确或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所包含的数字等效的 8 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、格式不正确或者表示的数字小于 MinValue 或大于 MaxValue，则转换会失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 s，则为 true；否则为 false。

SByte..::.TryParse(String, SByte%) 方法类似于 SByte..::.Parse(String) 方法，不同之处在于它在转换失败时不引发异常。此方法使得在 value 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 SByte..::.TryParse(String, SByte%) 方法类似于 SByte..::.Parse(String) 方法，不同之处在于它在转换失败时不引发异常。此方法使得在 value 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

s 参数应该是以下形式的小数数字字符串表示形式：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。
digits | 一系列从 0 到 9 之间的十进制数字。
说明 说明

value 指定的字符串不能包含任何组分隔符或十进制分隔符，它不能有小数部分。

使用 NumberStyles..::.Integer 样式来解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 value 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, SByte%) 方法。 使用 NumberStyles..::.Integer 样式来解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 value 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, SByte%) 方法。 使用 NumberStyles..::.Integer 样式来解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 value 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, SByte%) 方法。

s 参数是使用当前区域性的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。 s 参数是使用当前区域性的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。

此重载将 value 参数中的所有数字都解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 TryParse(String, NumberStyles, IFormatProvider, SByte%) 重载代替。 此重载将 value 参数中的所有数字都解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 TryParse(String, NumberStyles, IFormatProvider, SByte%) 重载代替。

以下示例尝试通过调用 TryParse(String, SByte%) 方法将数组中的字符串转换为 SByte 值。

Dim numericStrings() As String = {"-3.6", "12.8", "+16.7", "    3   ", _
                                  "(17)", "-17", "+12", "18-", "987", _
                                  "1,024", "  127 "}
Dim number As SByte
For Each numericString As String In numericStrings
   If SByte.TryParse(numericString, number) Then
      Console.WriteLine("Converted '{0}' to {1}.", numericString, number)
   Else
      Console.WriteLine("Cannot convert '{0}' to an SByte.", numericString)
   End If
Next
' The example displays the following output to the console:
'       Cannot convert '-3.6' to an SByte.
'       Cannot convert '12.8' to an SByte.
'       Cannot convert '+16.7' to an SByte.
'       Converted '    3   ' to 3.
'       Cannot convert '(17)' to an SByte.
'       Converted '-17' to -17.
'       Converted '+12' to 12.
'       Cannot convert '18-' to an SByte.
'       Cannot convert '987' to an SByte.
'       Cannot convert '1,024' to an SByte.
'       Converted '  127 ' to 127.

string[] numericStrings = {"-3.6", "12.8", "+16.7", "    3   ", "(17)",
                           "-17", "+12", "18-", "987", "1,024", "  127 "};
sbyte number;
foreach (string numericString in numericStrings)
{
   if (sbyte.TryParse(numericString, out number))
      Console.WriteLine("Converted '{0}' to {1}.", numericString, number);
   else
      Console.WriteLine("Cannot convert '{0}' to an SByte.", numericString);
}
// The example displays the following output to the console:
//       Cannot convert '-3.6' to an SByte.
//       Cannot convert '12.8' to an SByte.
//       Cannot convert '+16.7' to an SByte.
//       Converted '    3   ' to 3.
//       Cannot convert '(17)' to an SByte.
//       Converted '-17' to -17.
//       Converted '+12' to 12.
//       Cannot convert '18-' to an SByte.
//       Cannot convert '987' to an SByte.
//       Cannot convert '1,024' to an SByte.
//       Converted '  127 ' to 127.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

SByte 结构
SByte 成员
TryParse 重载
System 命名空间


SByte ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, SByte%)

SByte
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, SByte%)
SByte 结构

尝试将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 SByte 表示形式，并返回一个值，该值指示转换是否成功。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 TryParse(String, Int16 )。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As SByte _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out sbyte result
)
[CLSCompliantAttribute(false)]
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] signed char% result
)
[<CLSCompliantAttribute(false)>]
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:sbyte byref -> bool

参数

s
类型： System String
表示要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的一个按位组合，指示 s 所允许的格式。要指定的一个典型值为 Integer。 枚举值的一个按位组合，指示 s 所允许的格式。要指定的一个典型值为 Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
result
类型： System SByte %
当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 8 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 8 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 8 位有符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。

TryParse(String, NumberStyles, IFormatProvider, SByte%) 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于它在转换失败时不引发异常。此方法使得在 value 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse(String, NumberStyles, IFormatProvider, SByte%) 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于它在转换失败时不引发异常。此方法使得在 value 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

style 参数定义 value 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。value 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 value 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。value 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 value 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。value 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][E[sign]exponential_digits][ws]

如果 style 参数包含 AllowHexSpecifier，则 value 参数可能包含以下元素：

[ws]hexdigits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 value 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 value 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 value 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 value 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 value 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 value 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 value 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 value 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 value 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 value 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 value 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 value 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 value 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 value 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 value 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 value 中使用括号以指示负值。
digits | 由从 0 到 9 的数字组成的序列。
, | 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的组分隔符可以出现在 value 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的组分隔符可以出现在 value 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 value 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 value 中。
fractional_digits | 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 value 中。 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 value 中。
E | “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 value 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 value 参数可使用指数表示法表示数字。
exponential_digits | 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 value 参数可使用指数表示法表示数字。 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 value 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 value 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 value 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 value 中的元素。

非复合 NumberStyles 值 | 值中允许的除数字之外的元素
None | 仅十进制数字。
AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。
AllowExponent | “e”或“E”字符与 exponential_digits 一起指示指数表示法。如果 value 代表指数表示法中的一个数字，它不能有非零、小数部分。 “e”或“E”字符与 exponential_digits 一起指示指数表示法。如果 value 代表指数表示法中的一个数字，它不能有非零、小数部分。
AllowLeadingWhite | 位于 value 开头的 ws 元素。
AllowTrailingWhite | 位于 value 的结尾的 ws 元素。
AllowLeadingSign | sign 元素位于 digits 之前。
AllowTrailingSign | sign 元素位于 digits 之后。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 组分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，value 不能表示十六进制数，也不能表示使用指数表示法的数。 所有元素。但是，value 不能表示十六进制数，也不能表示使用指数表示法的数。
Float | 位于 value 开头或结尾的 ws 元素、位于 value 开头的 sign 以及小数点 (.)符号。value 参数也可以使用指数表示法。 位于 value 开头或结尾的 ws 元素、位于 value 开头的 sign 以及小数点 (.)符号。value 参数也可以使用指数表示法。
Number | ws、sign、组分隔符 (,) 和小数点 (.)元素。
Any | 所有元素。但是，value 不能表示十六进制数。 所有元素。但是，value 不能表示十六进制数。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 value 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 value 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 value 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。）

说明 说明

如果 value 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。 如果 value 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 value 格式的区域性特定信息。provider 参数可以是以下任意一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 value 格式的区域性特定信息。provider 参数可以是以下任意一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 value 格式的区域性特定信息。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。 一个 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。

  • 一个 NumberFormatInfo 对象，提供了数值格式设置信息。（其 GetFormat 实现仅返回它自身。） 一个 NumberFormatInfo 对象，提供了数值格式设置信息。（其 GetFormat 实现仅返回它自身。）

  • 一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例将 TryParse(String, NumberStyles, IFormatProvider, SByte%) 方法与许多不同的字符串和 NumberStyles 值一起调用。

Imports System.Globalization

Module StringParsing
   Public Sub Main()
      Dim numericString As String
      Dim styles As NumberStyles

      numericString = "106"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)

      numericString = "-106"
      styles = NumberStyles.None
      CallTryParse(numericString, styles)

      numericString = "103.00"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "103.72"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "10E-01"
      styles = NumberStyles.Integer Or NumberStyles.AllowExponent
      CallTryParse(numericString, styles)

      numericString = "12E-01"
      CallTryParse(numericString, styles)

      numericString = "12E01"
      CallTryParse(numericString, styles)

      numericString = "C8"
      CallTryParse(numericString, NumberStyles.HexNumber)

      numericString = "0x8C"
      CallTryParse(numericString, NumberStyles.HexNumber)
   End Sub

   Private Sub CallTryParse(stringToConvert As String, styles AS NumberStyles)
      Dim number As SByte
      Dim result As Boolean = SByte.TryParse(stringToConvert, styles, _
                                             CultureInfo.InvariantCulture, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
      Else
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           Convert.ToString(stringToConvert))
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '106' to 106.
'       Attempted conversion of '-106' failed.
'       Converted '103.00' to 103.
'       Attempted conversion of '103.72' failed.
'       Converted '10E-01' to 1.
'       Attempted conversion of '12E-01' failed.
'       Converted '12E01' to 120.
'       Converted 'C8' to -56.
'       Attempted conversion of '0x8C' failed.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string numericString;
      NumberStyles styles;

      numericString = "106";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      numericString = "-106";
      styles = NumberStyles.None;
      CallTryParse(numericString, styles);

      numericString = "103.00";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "103.72";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "10E-01";
      styles = NumberStyles.Integer | NumberStyles.AllowExponent;
      CallTryParse(numericString, styles);

      numericString = "12E-01";
      CallTryParse(numericString, styles);

      numericString = "12E01";
      CallTryParse(numericString, styles);

      numericString = "C8";
      CallTryParse(numericString, NumberStyles.HexNumber);

      numericString = "0x8C";
      CallTryParse(numericString, NumberStyles.HexNumber);
   }

   private static void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      sbyte number;
      bool result = SByte.TryParse(stringToConvert, styles,
                                   CultureInfo.InvariantCulture, out number);
      if (result)
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
      else
         Console.WriteLine("Attempted conversion of '{0}' failed.",
                           Convert.ToString(stringToConvert));
   }
}
// The example displays the following output:
//       Converted '106' to 106.
//       Attempted conversion of '-106' failed.
//       Converted '103.00' to 103.
//       Attempted conversion of '103.72' failed.
//       Converted '10E-01' to 1.
//       Attempted conversion of '12E-01' failed.
//       Converted '12E01' to 120.
//       Converted 'C8' to -56.
//       Attempted conversion of '0x8C' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

SByte 结构
SByte 成员
TryParse 重载
System 命名空间
SByte Parse

其他资源

分析数值字符串


SerializableAttribute 类

SerializableAttribute 类
成员

指示一个类可以序列化。无法继承此类。 指示一个类可以序列化。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Struct Or AttributeTargets.Enum Or AttributeTargets.Delegate, Inherited := False)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class SerializableAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum|AttributeTargets.Delegate, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class SerializableAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Class|AttributeTargets::Struct|AttributeTargets::Enum|AttributeTargets::Delegate, Inherited = false)]
[ComVisibleAttribute(true)]
public ref class SerializableAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum|AttributeTargets.Delegate, Inherited = false)>]
[<ComVisibleAttribute(true)>]
type SerializableAttribute =
    class
        inherit Attribute
    end

将 SerializableAttribute 特性应用于一个类型可指示该类型的实例可以序列化。如果正在序列化的对象图中的任何类型未应用 SerializableAttribute 特性，公共语言运行时则会引发 SerializationException。 将 SerializableAttribute 特性应用于一个类型可指示该类型的实例可以序列化。如果正在序列化的对象图中的任何类型未应用 SerializableAttribute 特性，公共语言运行时则会引发 SerializationException。

即使该类也会实现 ISerializable 接口来控制序列化进程，仍要应用 SerializableAttribute 特性。

默认情况下，类型中由 SerializableAttribute 标记的所有公共和私有字段都会进行序列化，除非该类型实现 ISerializable 接口来重写序列化进程。默认的序列化进程会排除用 NonSerializedAttribute 特性标记的字段。如果可序列化类型的字段包含指针、句柄或其他某些针对于特定环境的数据结构，并且不能在不同的环境中以有意义的方式重建，则最好将 NonSerializedAttribute 特性应用于该字段。 默认情况下，类型中由 SerializableAttribute 标记的所有公共和私有字段都会进行序列化，除非该类型实现 ISerializable 接口来重写序列化进程。默认的序列化进程会排除用 NonSerializedAttribute 特性标记的字段。如果可序列化类型的字段包含指针、句柄或其他某些针对于特定环境的数据结构，并且不能在不同的环境中以有意义的方式重建，则最好将 NonSerializedAttribute 特性应用于该字段。 默认情况下，类型中由 SerializableAttribute 标记的所有公共和私有字段都会进行序列化，除非该类型实现 ISerializable 接口来重写序列化进程。默认的序列化进程会排除用 NonSerializedAttribute 特性标记的字段。如果可序列化类型的字段包含指针、句柄或其他某些针对于特定环境的数据结构，并且不能在不同的环境中以有意义的方式重建，则最好将 NonSerializedAttribute 特性应用于该字段。

有关使用特性的更多信息，请参见 利用特性扩展元数据。有关序列化的更多信息，请参见 System.Runtime.Serialization。 有关使用特性的更多信息，请参见 利用特性扩展元数据。有关序列化的更多信息，请参见 System.Runtime.Serialization。

下面的示例演示用 SerializableAttribute 特性标记的一个对象的序列化。若要使用 BinaryFormatter 而不是 SoapFormatter，请取消注释相应的行。 下面的示例演示用 SerializableAttribute 特性标记的一个对象的序列化。若要使用 BinaryFormatter 而不是 SoapFormatter，请取消注释相应的行。

Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap

Public Class Test

   Public Shared Sub Main()

      ' Creates a new TestSimpleObject object.
      Dim obj As New TestSimpleObject()

      Console.WriteLine("Before serialization the object contains: ")
      obj.Print()

      ' Opens a file and serializes the object into it in binary format.
      Dim stream As Stream = File.Open("data.xml", FileMode.Create)
      Dim formatter As New SoapFormatter()

      formatter.Serialize(stream, obj)
      stream.Close()

      ' Empties obj.
      obj = Nothing

      ' Opens file "data.xml" and deserializes the object from it.
      stream = File.Open("data.xml", FileMode.Open)
      formatter = New SoapFormatter()

      obj = CType(formatter.Deserialize(stream), TestSimpleObject)
      stream.Close()

      Console.WriteLine("")
      Console.WriteLine("After deserialization the object contains: ")
      obj.Print()

   End Sub 'Main

End Class 'Test

' A test object that needs to be serialized.
<Serializable()> Public Class TestSimpleObject

   Public member1 As Integer
   Public member2 As String
   Public member3 As String
   Public member4 As Double

   ' A member that is not serialized.
   <NonSerialized()> Public member5 As String

   Public Sub New()
      member1 = 11
      member2 = "hello"
      member3 = "hello"
      member4 = 3.14159265
      member5 = "hello world!"
   End Sub 'New

   Public Sub Print()
      Console.WriteLine("member1 = '{0}'", member1)
      Console.WriteLine("member2 = '{0}'", member2)
      Console.WriteLine("member3 = '{0}'", member3)
      Console.WriteLine("member4 = '{0}'", member4)
      Console.WriteLine("member5 = '{0}'", member5)
   End Sub 'Print

End Class 'TestSimpleObject

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
//using System.Runtime.Serialization.Formatters.Binary;

public class Test {
   public static void Main()  {

      //Creates a new TestSimpleObject object.
      TestSimpleObject obj = new TestSimpleObject();

      Console.WriteLine("Before serialization the object contains: ");
      obj.Print();

      //Opens a file and serializes the object into it in binary format.
      Stream stream = File.Open("data.xml", FileMode.Create);
      SoapFormatter formatter = new SoapFormatter();

      //BinaryFormatter formatter = new BinaryFormatter();

      formatter.Serialize(stream, obj);
      stream.Close();

      //Empties obj.
      obj = null;

      //Opens file "data.xml" and deserializes the object from it.
      stream = File.Open("data.xml", FileMode.Open);
      formatter = new SoapFormatter();

      //formatter = new BinaryFormatter();

      obj = (TestSimpleObject)formatter.Deserialize(stream);
      stream.Close();

      Console.WriteLine("");
      Console.WriteLine("After deserialization the object contains: ");
      obj.Print();
   }
}

// A test object that needs to be serialized.
[Serializable()]
public class TestSimpleObject  {

    public int member1;
    public string member2;
    public string member3;
    public double member4;

    // A field that is not serialized.
    [NonSerialized()] public string member5;

    public TestSimpleObject() {

        member1 = 11;
        member2 = "hello";
        member3 = "hello";
        member4 = 3.14159265;
        member5 = "hello world!";
    }

    public void Print() {

        Console.WriteLine("member1 = '{0}'", member1);
        Console.WriteLine("member2 = '{0}'", member2);
        Console.WriteLine("member3 = '{0}'", member3);
        Console.WriteLine("member4 = '{0}'", member4);
        Console.WriteLine("member5 = '{0}'", member5);
    }
}

#using <system.dll>
#using <system.messaging.dll>
#using <System.Runtime.Serialization.Formatters.Soap.dll>

using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization::Formatters::Soap;

// A test object that needs to be serialized.

[Serializable]
ref class TestSimpleObject
{
private:
   int member1;
   String^ member2;
   String^ member3;
   double member4;

public:

   // A field that is not serialized.

   [NonSerialized]
   String^ member5;
   TestSimpleObject()
   {
      member1 = 11;
      member2 = "hello";
      member3 = "hello";
      member4 = 3.14159265;
      member5 = "hello world!";
   }

   void Print()
   {
      Console::WriteLine( "member1 = ' {0}'", member1 );
      Console::WriteLine( "member2 = ' {0}'", member2 );
      Console::WriteLine( "member3 = ' {0}'", member3 );
      Console::WriteLine( "member4 = ' {0}'", member4 );
      Console::WriteLine( "member5 = ' {0}'", member5 );
   }

};

int main()
{

   //Creates a new TestSimpleObject object.
   TestSimpleObject^ obj = gcnew TestSimpleObject;
   Console::WriteLine( "Before serialization the Object* contains: " );
   obj->Print();

   //Opens a file and serializes the object into it in binary format.
   Stream^ stream = File::Open( "data.xml", FileMode::Create );
   SoapFormatter^ formatter = gcnew SoapFormatter;

   //BinaryFormatter* formatter = new BinaryFormatter();
   formatter->Serialize( stream, obj );
   stream->Close();

   //Empties obj.
   obj = nullptr;

   //Opens file S"data.xml" and deserializes the object from it.
   stream = File::Open( "data.xml", FileMode::Open );
   formatter = gcnew SoapFormatter;

   //formatter = new BinaryFormatter();
   obj = dynamic_cast<TestSimpleObject^>(formatter->Deserialize( stream ));
   stream->Close();
   Console::WriteLine( "" );
   Console::WriteLine( "After deserialization the object contains: " );
   obj->Print();
}

System System..::.SerializableAttributeSerializableAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SerializableAttribute 成员
System 命名空间
Attribute
ISerializable
NonSerializedAttribute

其他资源

利用特性扩展元数据
[<topic://cpconSerialization>]


SerializableAttribute 成员

SerializableAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SerializableAttribute 类

指示一个类可以序列化。无法继承此类。 指示一个类可以序列化。无法继承此类。

SerializableAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SerializableAttribute 类
System 命名空间


SerializableAttribute 构造函数

SerializableAttribute 构造函数
SerializableAttribute 类

初始化 SerializableAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public SerializableAttribute()
public:
SerializableAttribute()
new : unit -> SerializableAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SerializableAttribute 类
SerializableAttribute 成员
System 命名空间


SerializableAttribute 方法

SerializableAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SerializableAttribute 类

SerializableAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

SerializableAttribute 类
System 命名空间


SerializableAttribute 属性

SerializableAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SerializableAttribute 类

SerializableAttribute 类型公开以下成员。

名称 说明
页首

参考

SerializableAttribute 类
System 命名空间


Single 结构

Single 结构
成员

表示一个单精度浮点数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Single _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of Single),  _
    IEquatable(Of Single)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Single : IComparable, IFormattable,
    IConvertible, IComparable<float>, IEquatable<float>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Single : IComparable,
    IFormattable, IConvertible, IComparable<float>, IEquatable<float>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Single =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<float32>
        interface IEquatable<float32>
    end

Single 值类型表示一个值介于 -3.402823e38 和 +3.402823e38 之间的单精度 32 位数字，以及正零或负零、PositiveInfinity、NegativeInfinity 和非数字 (NaN)。

Single 符合二进制浮点算法的 IEC 60559:1989 (IEEE 754) 标准。

Single 为比较此类型的实例，将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。有关格式规范代码如何控制值类型的字符串表示形式的信息，请参见 格式化类型、标准数字格式字符串 和 自定义数字格式字符串。 Single 为比较此类型的实例，将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。有关格式规范代码如何控制值类型的字符串表示形式的信息，请参见 格式化类型、标准数字格式字符串 和 自定义数字格式字符串。

使用浮点数

在执行二进制运算时，如果一个操作数为浮点类型（Single 或 Double），那么另一个操作数应当为整数类型或浮点类型。此运算计算如下： 在执行二进制运算时，如果一个操作数为浮点类型（Single 或 Double），那么另一个操作数应当为整数类型或浮点类型。此运算计算如下：

  • 如果其中一个操作数为整数类型，那么该操作数将被转换为另一个操作数所属的浮点类型。

  • 然后，如果任意一个操作数为 Double，则另一个操作数将被转换为 Double，并且至少使用 Double 的范围和精度执行运算。对于数值运算，结果的类型为 Double。 然后，如果任意一个操作数为 Double，则另一个操作数将被转换为 Double，并且至少使用 Double 的范围和精度执行运算。对于数值运算，结果的类型为 Double。

  • 否则，将至少使用 Single 类型的范围和精度执行运算，而且对于数值运算，结果的类型为 Single。

浮点运算符（包括赋值运算符）不会引发异常。在异常情况下，浮点运算的结果为零、无穷或 NaN，如下所述： 浮点运算符（包括赋值运算符）不会引发异常。在异常情况下，浮点运算的结果为零、无穷或 NaN，如下所述：

  • 如果浮点运算的结果对于目标格式来说太小，则运算的结果为零。

  • 如果浮点运算结果的数值对于目标格式来说太大，则运算的结果为 PositiveInfinity 或 NegativeInfinity（具体取决于结果的符号）。

  • 如果浮点运算无效，则运算的结果为 NaN。

  • 如果浮点运算的一个或两个操作数为 NaN，则运算的结果为 NaN。

请记住，浮点数只能近似于十进制数字，浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下，Single 值只包含 7 位精度，但内部维护的最大精度是 9 位。浮点数的精度有几种结果： 请记住，浮点数只能近似于十进制数字，浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下，Single 值只包含 7 位精度，但内部维护的最大精度是 9 位。浮点数的精度有几种结果： 请记住，浮点数只能近似于十进制数字，浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下，Single 值只包含 7 位精度，但内部维护的最大精度是 9 位。浮点数的精度有几种结果：

  • 特定精度下看似相等的两个浮点数可能并不相等，因为它们的最小有效位数不同。

  • 由于浮点数可能无法精确近似于十进制数，如果使用十进制数，则使用浮点数的数学或比较运算可能不会产生相同的结果。

  • 如果涉及浮点数，值可能不往返。值的往返是指，某个运算将原始浮点数转换为另一种格式，而反向运算又将转换后的格式转换回浮点数，且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改，往返可能会失败。 如果涉及浮点数，值可能不往返。值的往返是指，某个运算将原始浮点数转换为另一种格式，而反向运算又将转换后的格式转换回浮点数，且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改，往返可能会失败。 如果涉及浮点数，值可能不往返。值的往返是指，某个运算将原始浮点数转换为另一种格式，而反向运算又将转换后的格式转换回浮点数，且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改，往返可能会失败。

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 成员
System 命名空间


Single 成员

Single 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Single 结构

表示一个单精度浮点数字。

Single 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Single 结构
System 命名空间


Single 字段

Single 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Single 结构

Single 类型公开以下成员。

名称 说明
页首

参考

Single 结构
System 命名空间


Single ..::.Epsilon 字段

Single
.
.
::
.
Epsilon 字段
Single 结构

表示大于零的最小正 Single 值。此字段为常数。 表示大于零的最小正 Single 值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const Epsilon As Single
public const float Epsilon
public:
literal float Epsilon
static val mutable Epsilon: float32

Epsilon 属性的值反映最小正数 Single 值，当 Single 实例的值为零时，此值在数值运算或比较中有意义。例如，下面的代码演示零和 Epsilon 被认为是不相等的值，而零和 Epsilon 值的一半被认为是相等的。 Epsilon 属性的值反映最小正数 Single 值，当 Single 实例的值为零时，此值在数值运算或比较中有意义。例如，下面的代码演示零和 Epsilon 被认为是不相等的值，而零和 Epsilon 值的一半被认为是相等的。

Module Example
   Public Sub Main()
      Dim values() As Single = { 0, Single.Epsilon, Single.Epsilon * .5 }

      For ctr As Integer = 0 To values.Length - 2
         For ctr2 As Integer = ctr + 1 To values.Length - 1
            Console.WriteLine("{0:r} = {1:r}: {2}", _
                              values(ctr), values(ctr2), _
                              values(ctr).Equals(values(ctr2)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       0 = 4.94065645841247E-324: False
'       0 = 0: True
'
'       4.94065645841247E-324 = 0: False

using System;

public class Example
{
   public static void Main()
   {
      float[] values = { 0f, Single.Epsilon, Single.Epsilon * .5f };

      for (int ctr = 0; ctr <= values.Length - 2; ctr++)
      {
         for (int ctr2 = ctr + 1; ctr2 <= values.Length - 1; ctr2++)
         {
            Console.WriteLine("{0:r} = {1:r}: {2}",
                              values[ctr], values[ctr2],
                              values[ctr].Equals(values[ctr2]));
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       0 = 4.94065645841247E-324: False
//       0 = 0: True
//
//       4.94065645841247E-324 = 0: False

但是，Epsilon 属性不是 Single 类型的通用精度度量值，它只应用于具有零值的 Single 实例。

说明 说明

Epsilon 属性的值不等同于计算机 epsilon，其代表由于浮点算术中的舍入引起的相关错误的上限。

此常数的值为 1.4e-45。

两个看似相等的浮点数字的比较结果可能为不相等，因为它们的最低有效位不同。例如，C# 表达式 (float)1/3 == (float)0.33333 的比较结果为不相等，因为左侧的除法运算具有最大精度，而右侧的常数仅精确到指定的位。如果创建自定义算法来确定两个浮点数是否可以被视为相等，则必须使用大于 Epsilon 常数的值，为两个将被视为相等的值建立可接受的绝对差值幅度。（通常，该差值幅度比 Epsilon 大许多倍。） 两个看似相等的浮点数字的比较结果可能为不相等，因为它们的最低有效位不同。例如，C# 表达式 (float)1/3 == (float)0.33333 的比较结果为不相等，因为左侧的除法运算具有最大精度，而右侧的常数仅精确到指定的位。如果创建自定义算法来确定两个浮点数是否可以被视为相等，则必须使用大于 Epsilon 常数的值，为两个将被视为相等的值建立可接受的绝对差值幅度。（通常，该差值幅度比 Epsilon 大许多倍。） 两个看似相等的浮点数字的比较结果可能为不相等，因为它们的最低有效位不同。例如，C# 表达式 (float)1/3 == (float)0.33333 的比较结果为不相等，因为左侧的除法运算具有最大精度，而右侧的常数仅精确到指定的位。如果创建自定义算法来确定两个浮点数是否可以被视为相等，则必须使用大于 Epsilon 常数的值，为两个将被视为相等的值建立可接受的绝对差值幅度。（通常，该差值幅度比 Epsilon 大许多倍。） 两个看似相等的浮点数字的比较结果可能为不相等，因为它们的最低有效位不同。例如，C# 表达式 (float)1/3 == (float)0.33333 的比较结果为不相等，因为左侧的除法运算具有最大精度，而右侧的常数仅精确到指定的位。如果创建自定义算法来确定两个浮点数是否可以被视为相等，则必须使用大于 Epsilon 常数的值，为两个将被视为相等的值建立可接受的绝对差值幅度。（通常，该差值幅度比 Epsilon 大许多倍。）

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.MaxValue 字段

Single
.
.
::
.
MaxValue 字段
Single 结构

表示 Single 的最大可能值。此字段为常数。 表示 Single 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As Single
public const float MaxValue
public:
literal float MaxValue
static val mutable MaxValue: float32

此常数的值为 +3.402823e38。

下面的代码示例演示 MaxValue 常数。

If S > Single.MaxValue Then
    Console.WriteLine("Your number is larger than a Single.")
End If

if (s > Single.MaxValue)
{
    Console.WriteLine("Your number is larger than a Single.");
}

if ( s > Single::MaxValue )
{
   Console::WriteLine( "Your number is larger than a Single." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
MinValue


Single ..::.MinValue 字段

Single
.
.
::
.
MinValue 字段
Single 结构

表示 Single 的最小可能值。此字段为常数。 表示 Single 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As Single
public const float MinValue
public:
literal float MinValue
static val mutable MinValue: float32

此常数的值为 -3.402823e38。

下面的代码示例演示 MinValue 常数。

If S < Single.MinValue Then
    Console.WriteLine("Your number is smaller than a Single.")
End If

if (s < Single.MinValue)
{
    Console.WriteLine("Your number is smaller than a Single.");
}

if ( s < Single::MinValue )
{
   Console::WriteLine( "Your number is smaller than a Single." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
MaxValue


Single ..::.NaN 字段

Single
.
.
::
.
NaN 字段
Single 结构

表示非数字 (NaN)。此字段为常数。 表示非数字 (NaN)。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const NaN As Single
public const float NaN
public:
literal float NaN
static val mutable NaN: float32

此常数的值是零被零除所得到的结果。

当运算结果未定义时返回此常数。

使用 IsNaN 确定值是否为非数字。不可能通过将某个值与另一个等于 NaN 的值进行比较来确定该值是否不是数字。 使用 IsNaN 确定值是否为非数字。不可能通过将某个值与另一个等于 NaN 的值进行比较来确定该值是否不是数字。

下面的代码示例演示 NaN 常数。

Dim zero As Single = 0

' This condition will return false.
If (0 / zero) = Single.NaN Then
    Console.WriteLine("0 / 0 can be tested with Single.NaN.")
Else
    Console.WriteLine("0 / 0 cannot be tested with Single.NaN; use Single.IsNan() instead.")
End If

Single zero = 0;

// This condition will return false.
if ((0 / zero) == Single.NaN)
{
    Console.WriteLine("0 / 0 can be tested with Single.NaN.");
}
else
{
    Console.WriteLine("0 / 0 cannot be tested with Single.NaN; use Single.IsNan() instead.");
}

Single zero = 0;

// This condition will return false.
if ( (0 / zero) == Single::NaN )
{
   Console::WriteLine( "0 / 0 can be tested with Single::NaN." );
}
else
{
   Console::WriteLine( "0 / 0 cannot be tested with Single::NaN; use Single::IsNan() instead." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
IsNaN


Single ..::.NegativeInfinity 字段

Single
.
.
::
.
NegativeInfinity 字段
Single 结构

表示负无穷。此字段为常数。 表示负无穷。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const NegativeInfinity As Single
public const float NegativeInfinity
public:
literal float NegativeInfinity
static val mutable NegativeInfinity: float32

此常数的值是负数被零除所得到的结果。

当运算结果小于 MinValue 时，返回此常数。

使用 IsNegativeInfinity 确定值是否计算为负无穷大。不可能通过将某个值与另一个等于 NegativeInfinity 的值进行比较来确定该值是否计算为负无穷大。 使用 IsNegativeInfinity 确定值是否计算为负无穷大。不可能通过将某个值与另一个等于 NegativeInfinity 的值进行比较来确定该值是否计算为负无穷大。

下面的代码示例演示 NegativeInfinity 常数。

' This will equal Infinity.
Console.WriteLine("10.0 minus NegativeInfinity equals " + (10 - Single.NegativeInfinity).ToString() + ".")

// This will equal Infinity.
Console.WriteLine("10.0 minus NegativeInfinity equals {0}.", (10.0 - Single.NegativeInfinity).ToString());

// This will equal Infinity.
Console::WriteLine( "10.0 minus NegativeInfinity equals {0}.", (10.0 - Single::NegativeInfinity) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
IsNegativeInfinity
IsInfinity
PositiveInfinity


Single ..::.PositiveInfinity 字段

Single
.
.
::
.
PositiveInfinity 字段
Single 结构

表示正无穷。此字段为常数。 表示正无穷。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const PositiveInfinity As Single
public const float PositiveInfinity
public:
literal float PositiveInfinity
static val mutable PositiveInfinity: float32

此常数的值是正数被零除所得到的结果。

当运算结果大于 MaxValue 时，返回此常数。

使用 IsPositiveInfinity 确定值是否计算为正无穷大。不可能通过将某个值与另一个等于 PositiveInfinity 的值进行比较来确定该值是否计算为正无穷大。 使用 IsPositiveInfinity 确定值是否计算为正无穷大。不可能通过将某个值与另一个等于 PositiveInfinity 的值进行比较来确定该值是否计算为正无穷大。

下面的代码示例演示 PositiveInfinity 常数。

' This will equal Infinity.
Console.WriteLine("PositiveInfinity plus 10.0 equals " + (Single.PositiveInfinity + 10).ToString() + ".")

// This will equal Infinity.
Console.WriteLine("PositiveInfinity plus 10.0 equals {0}.", (Single.PositiveInfinity + 10.0).ToString());

// This will equal Infinity.
Console::WriteLine( "PositiveInfinity plus 10.0 equals {0}.", (Single::PositiveInfinity + 10.0) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
IsPositiveInfinity
IsInfinity
NegativeInfinity


Single 方法

Single 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Single 结构

Single 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Single 结构
System 命名空间


Single ..::.CompareTo 方法

Single
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Single 结构

将此实例与指定对象或其他 Single 实例进行比较，并返回一个整数，该整数指示此实例的值是小于、等于还是大于指定对象或其他 Single 实例的值。

名称 说明
页首

参考

Single 结构
Single 成员
System 命名空间


Single ..::.CompareTo 方法 (Object)

Single
.
.
::
.
CompareTo 方法 (Object)
Single 结构

将此实例与指定对象进行比较，并返回一个整数，该整数指示此实例的值是小于、等于还是大于指定对象的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
- 或 -
此实例不是数字 (
NaN
) 而
value
是数字。
零
此实例等于
value
。
- 或 -
此实例和值都不是数字 (
NaN
)、
PositiveInfinity
或
NegativeInfinity
。
大于零
此实例大于
value
。
- 或 -
此实例是数字而
value
不是数字 (
NaN
)。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 Single。

无论 Single 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 参数必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是 Single 的实例；否则将引发异常。

实现此方法是为了支持 IComparable 接口。注意，尽管一个 NaN 不视为等于另一个 NaN（即使是其自身），IComparable 接口也要求 A.CompareTo(A) 返回零。 实现此方法是为了支持 IComparable 接口。注意，尽管一个 NaN 不视为等于另一个 NaN（即使是其自身），IComparable 接口也要求 A.CompareTo(A) 返回零。

比较精度

超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。 超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。

下面的代码示例说明了 CompareTo 方法。

Obj1 = CType(450, Single)

If A.CompareTo(Obj1) < 0 Then
    Console.WriteLine(A.ToString() + " is less than " + Obj1.ToString() + ".")
End If

If (A.CompareTo(Obj1) > 0) Then
    Console.WriteLine(A.ToString() + " is greater than " + Obj1.ToString() + ".")
End If

If (A.CompareTo(Obj1) = 0) Then
    Console.WriteLine(A.ToString() + " equals " + Obj1.ToString() + ".")
End If

obj1 = (Single)450;

if (a.CompareTo(obj1) < 0)
{
    Console.WriteLine("{0} is less than {1}.", a.ToString(), obj1.ToString());
}

if (a.CompareTo(obj1) > 0)
{
    Console.WriteLine("{0} is greater than {1}.", a.ToString(), obj1.ToString());
}

if (a.CompareTo(obj1) == 0)
{
    Console.WriteLine("{0} equals {1}.", a.ToString(), obj1.ToString());
}

obj1 = (Single)450;

if ( a.CompareTo( obj1 ) < 0 )
{
   Console::WriteLine( " {0} is less than {1}.", a, obj1 );
}

if ( a.CompareTo( obj1 ) > 0 )
{
   Console::WriteLine( " {0} is greater than {1}.", a, obj1 );
}

if ( a.CompareTo( obj1 ) == 0 )
{
   Console::WriteLine( " {0} equals {1}.", a, obj1 );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
CompareTo 重载
System 命名空间
Equals


Single ..::.CompareTo 方法 (Single)

Single
.
.
::
.
CompareTo 方法 (Single)
Single 结构

将此实例与指定的单精度浮点数进行比较，并返回一个整数，该整数指示此实例的值是小于、等于还是大于指定单精度浮点数的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Single _ ) As Integer
public int CompareTo( float value )
public: virtual int CompareTo( float value ) sealed
abstract CompareTo : value:float32 -> int override CompareTo : value:float32 -> int
参数
value
类型： System Single
要比较的单精度浮点数字。
返回值
类型： System Int32
一个有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
- 或 -
此实例不是数字 (
NaN
) 而
value
是数字。
零
此实例等于
value
。
- 或 -
此实例和
value
都不是数字 (
NaN
)、
PositiveInfinity
或
NegativeInfinity
。
大于零
此实例大于
value
。
- 或 -
此实例是数字而
value
不是数字 (
NaN
)。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 Single..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

注意，尽管值为 NaN 的对象不视为等于另一个值为 NaN 的对象（即使是其自身），IComparable<(Of <(T>)>) 接口也要求 A.CompareTo(A) 返回零。

扩大转换

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Single 且参数类型是 Int32。Microsoft C# 编译器生成指令，将参数值表示为 Single 对象，然后生成 Single..::.CompareTo(Single) 方法，比较实例和参数扩大的表示形式的值。 例如，假定实例类型是 Single 且参数类型是 Int32。Microsoft C# 编译器生成指令，将参数值表示为 Single 对象，然后生成 Single..::.CompareTo(Single) 方法，比较实例和参数扩大的表示形式的值。

请参考所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。有关更多信息，请参见主题类型转换表。 请参考所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。有关更多信息，请参见主题类型转换表。

比较精度

超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。 超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。

下面的代码示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
CompareTo 重载
System 命名空间
Equals


Single ..::.Equals 方法

Single
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Single 结构

返回一个值，该值指示 Single 的两个实例是否表示同一个值。

名称 说明
页首

参考

Single 结构
Single 成员
System 命名空间


Single ..::.Equals 方法 (Object)

Single
.
.
::
.
Equals 方法 (Object)
Single 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 Single 的实例并且等于此实例的值，则为 true；否则为 false。

应小心使用 Equals 方法，因为两个显然相等的值可能因两个值的精度不同而不相等。下面的示例报告 Single 值 .3333 与 1 除以 3 所返回的 Single 不相等。 应小心使用 Equals 方法，因为两个显然相等的值可能因两个值的精度不同而不相等。下面的示例报告 Single 值 .3333 与 1 除以 3 所返回的 Single 不相等。

' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Object = 1/3
' Compare them for equality
Console.WriteLine(single1.Equals(single2))    ' displays False

// Initialize two floats with apparently identical values
float float1 = .33333f;
object float2 = 1/3;
// Compare them for equality
Console.WriteLine(float1.Equals(float2));    // displays false

建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Single 值。 建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Single 值。 建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Single 值。

' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Object = 1/3
' Define the tolerance for variation in their values
Dim difference As Single = single1 * .0001f

' Compare the values
' The output to the console indicates that the two values are equal
If Math.Abs(single1 - CSng(single2)) <= difference Then
   Console.WriteLine("single1 and single2 are equal.")
Else
   Console.WriteLine("single1 and single2 are unequal.")
End If

// Initialize two floats with apparently identical values
float float1 = .33333f;
object float2 = (float) 1/3;
// Define the tolerance for variation in their values
float difference = float1 * .0001f;

// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(float1 - (float) float2) <= difference)
   Console.WriteLine("float1 and float2 are equal.");
else
   Console.WriteLine("float1 and float2 are unequal.");

在这种情况下，两个值相等。

说明 说明

由于 Epsilon 可定义范围接近于零的正值的最小表达式，因此差值幅度必须大于 Epsilon。通常，该差值幅度比 Epsilon 大许多倍。 由于 Epsilon 可定义范围接近于零的正值的最小表达式，因此差值幅度必须大于 Epsilon。通常，该差值幅度比 Epsilon 大许多倍。

超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。 超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。

下面的代码示例说明了 Equals 方法。

Obj1 = CType(500, Single)

If A.Equals(Obj1) Then
    Console.WriteLine("The value type and reference type values are equal.")
End If

obj1 = (Single)500;
if (a.Equals(obj1)) {
    Console.WriteLine("The value type and reference type values are equal.");
}

obj1 = (Single)500;

if ( a.Equals( obj1 ) )
{
   Console::WriteLine( "The value type and reference type values are equal." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
Equals 重载
System 命名空间
CompareTo


Single ..::.Equals 方法 (Single)

Single
.
.
::
.
Equals 方法 (Single)
Single 结构

返回一个值，该值指示此实例和指定的 Single 对象是否表示相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As Single _
) As Boolean
public bool Equals(
    float obj
)
public:
virtual bool Equals(
    float obj
) sealed
abstract Equals :
        obj:float32 -> bool
override Equals :
        obj:float32 -> bool

参数

obj
类型： System Single
要与此实例进行比较的 Single 对象。

返回值

类型： System Boolean
如果 obj 等于此实例，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

扩大转换

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 Equals 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 Equals 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Single 且参数类型是 Int32。Microsoft C# 编译器生成指令，将参数值表示为 Single 对象，然后生成 Single..::.Equals(Single) 方法，比较实例和参数扩大的表示形式的值。 例如，假定实例类型是 Single 且参数类型是 Int32。Microsoft C# 编译器生成指令，将参数值表示为 Single 对象，然后生成 Single..::.Equals(Single) 方法，比较实例和参数扩大的表示形式的值。

请参考所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。有关更多信息，请参见主题类型转换表。 请参考所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。有关更多信息，请参见主题类型转换表。

比较精度

应小心使用 Equals 方法，因为两个显然相等的值可能因两个值的精度不同而不相等。下面的示例报告 Single 值 .3333 与 1 除以 3 所返回的 Single 不相等。 应小心使用 Equals 方法，因为两个显然相等的值可能因两个值的精度不同而不相等。下面的示例报告 Single 值 .3333 与 1 除以 3 所返回的 Single 不相等。

' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Single = 1/3
' Compare them for equality
Console.WriteLine(single1.Equals(single2))    ' displays False

// Initialize two floats with apparently identical values
float float1 = .33333f;
float float2 = 1/3;
// Compare them for equality
Console.WriteLine(float1.Equals(float2));    // displays false

建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Single 值。 建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Single 值。 建议采用的一种方法是定义两个值之间可接受的差值幅度（例如其中一个值的 .01%），而不是比较其是否相等。如果两个值之间的绝对差值小于或等于该幅度，则差值可能是因精度差异而产生的，因此这两个值可能相等。下面的示例使用此方法比较 .33333 和 1/3，即上一个代码示例认为不相等的两个 Single 值。

' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Single = 1/3
' Define the tolerance for variation in their values
Dim difference As Single = single1 * .0001f

' Compare the values
' The output to the console indicates that the two values are equal
If Math.Abs(single1 - single2) <= difference Then
   Console.WriteLine("single1 and single2 are equal.")
Else
   Console.WriteLine("single1 and single2 are unequal.")
End If

// Initialize two floats with apparently identical values
float float1 = .33333f;
float float2 = (float) 1/3;
// Define the tolerance for variation in their values
float difference = float1 * .0001f;

// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(float1 - float2) <= difference)
   Console.WriteLine("float1 and float2 are equal.");
else
   Console.WriteLine("float1 and float2 are unequal.");

在这种情况下，两个值相等。

说明 说明

由于 Epsilon 可定义范围接近于零的正值的最小表达式，因此差值幅度必须大于 Epsilon。通常，该差值幅度比 Epsilon 大许多倍。 由于 Epsilon 可定义范围接近于零的正值的最小表达式，因此差值幅度必须大于 Epsilon。通常，该差值幅度比 Epsilon 大许多倍。

超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。 超过记录精度的浮点数的精度特定于 .NET Framework 的实现和版本。因此，两个特定数字的比较可能因 .NET Framework 的版本的不同而不同，因为数字的内部表示形式的精度可能会变化。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
Equals 重载
System 命名空间
Equals
CompareTo


Single ..::.GetHashCode 方法

Single
.
.
::
.
GetHashCode 方法
Single 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.GetTypeCode 方法

Single
.
.
::
.
GetTypeCode 方法
Single 结构

返回值类型 Single 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.Single。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
TypeCode


Single ..::.IConvertible ..::.ToBoolean 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToByte 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToChar 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToDateTime 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToDecimal 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
当前实例的值，已转换为 Decimal。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToDouble 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，已转换为 Double。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToInt16 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，已转换为 Int16。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToInt32 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，已转换为 Int32。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToInt64 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，已转换为 Int64。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToSByte 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，已转换为 SByte。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToSingle 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，未更改。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToType 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要将此 Single 值转换为的类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的信息。

返回值

类型： System Object
当前实例的值，已转换为 type。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToUInt16 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，已转换为 UInt16。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToUInt32 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，已转换为 UInt32。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IConvertible ..::.ToUInt64 方法

Single
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
Single 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，已转换为 UInt64。

实现

此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(Single) 方法。 此成员是显式的接口成员实现。只能在 Single 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(Single) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间


Single ..::.IsInfinity 方法

Single
.
.
::
.
IsInfinity 方法
Single 结构

返回一个值，该值指示指定数字是计算为负无穷大还是正无穷大。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsInfinity ( _
    f As Single _
) As Boolean
public static bool IsInfinity(
    float f
)
public:
static bool IsInfinity(
    float f
)
static member IsInfinity :
        f:float32 -> bool

参数

f
类型： System Single
一个单精度浮点数字。

返回值

类型： System Boolean
如果 f 计算为 PositiveInfinity 或 NegativeInfinity，则为 true；否则为 false。

浮点运算返回 PositiveInfinity 或 NegativeInfinity，以发出信号表示溢出状况。

下面的代码示例说明了 IsInfinity 方法。

' This will return "True".
Console.Write("IsInfinity(3.0 / 0) = ")
If Single.IsPositiveInfinity(3 / 0) Then
    Console.WriteLine("True.")
Else
    Console.WriteLine("False.")
End If

// This will return "true".
Console.WriteLine("IsInfinity(3.0F / 0) == {0}.", Single.IsInfinity(3.0F / 0) ? "true" : "false");

// This will return S"true".
Console::WriteLine( "IsInfinity(3.0F / 0) == {0}.", Single::IsInfinity( 3.0F / zero ) ? (String^)"true" : "false" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
IsPositiveInfinity
IsNegativeInfinity
PositiveInfinity
NegativeInfinity


Single ..::.IsNaN 方法

Single
.
.
::
.
IsNaN 方法
Single 结构

返回一个值，该值指示指定数字是否计算为非数字 (NaN)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsNaN ( _
    f As Single _
) As Boolean
public static bool IsNaN(
    float f
)
public:
static bool IsNaN(
    float f
)
static member IsNaN :
        f:float32 -> bool

参数

f
类型： System Single
一个单精度浮点数字。

返回值

类型： System Boolean
如果 f 计算为非数字 (NaN)，则为 true；否则为 false。

浮点运算返回 NaN，以发出信号表示运算结果尚未定义。例如，将 0.0 除以 0.0 会得到 NaN。 浮点运算返回 NaN，以发出信号表示运算结果尚未定义。例如，将 0.0 除以 0.0 会得到 NaN。

下面的代码示例说明了 IsNaN 方法。

' This will return true.
If Single.IsNaN(0 / zero) Then
    Console.WriteLine("Single.IsNan() can determine whether a value is not-a-number.")
End If

// This will return true.
if (Single.IsNaN(0 / zero))
{
    Console.WriteLine("Single.IsNan() can determine whether a value is not-a-number.");
}

// This will return true.
if ( Single::IsNaN( 0 / zero ) )
{
   Console::WriteLine( "Single::IsNan() can determine whether a value is not-a-number." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
NaN


Single ..::.IsNegativeInfinity 方法

Single
.
.
::
.
IsNegativeInfinity 方法
Single 结构

返回一个值，通过该值指示指定数字是否计算为负无穷大。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsNegativeInfinity ( _
    f As Single _
) As Boolean
public static bool IsNegativeInfinity(
    float f
)
public:
static bool IsNegativeInfinity(
    float f
)
static member IsNegativeInfinity :
        f:float32 -> bool

参数

f
类型： System Single
一个单精度浮点数字。

返回值

类型： System Boolean
如果 f 的计算结果为 NegativeInfinity，则为 true；否则为 false。

浮点运算返回 NegativeInfinity 以发出信号表示溢出状况。

下面的代码示例说明了 IsNegativeInfinity 方法。

' This will return True.
Console.Write("IsNegativeInfinity(-5.0 / 0) = ")
If Single.IsNegativeInfinity(-5 / 0) Then
    Console.WriteLine("True.")
Else
    Console.WriteLine("False.")
End If

// This will return true.
Console.WriteLine("IsNegativeInfinity(-5.0F / 0) == {0}.", Single.IsNegativeInfinity(-5.0F / 0) ? "true" : "false");

// This will return true.
Console::WriteLine( "IsNegativeInfinity(-5.0F / 0) == {0}.", Single::IsNegativeInfinity(  -5.0F / zero ) ? (String^)"true" : "false" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
IsInfinity
IsPositiveInfinity
PositiveInfinity
NegativeInfinity


Single ..::.IsPositiveInfinity 方法

Single
.
.
::
.
IsPositiveInfinity 方法
Single 结构

返回一个值，通过该值指示指定数字是否计算为正无穷大。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsPositiveInfinity ( _
    f As Single _
) As Boolean
public static bool IsPositiveInfinity(
    float f
)
public:
static bool IsPositiveInfinity(
    float f
)
static member IsPositiveInfinity :
        f:float32 -> bool

参数

f
类型： System Single
一个单精度浮点数字。

返回值

类型： System Boolean
如果 f 的计算结果为 PositiveInfinity，则为 true；否则为 false。

浮点运算返回 PositiveInfinity 以发出信号表示溢出状况。

下面的代码示例说明了 IsPositiveInfinity 方法。

' This will return True.
Console.Write("IsPositiveInfinity(4.0 / 0) = ")
If Single.IsPositiveInfinity(4 / 0) Then
    Console.WriteLine("True.")
Else
    Console.WriteLine("False.")
End If

// This will return true.
Console.WriteLine("IsPositiveInfinity(4.0F / 0) == {0}.", Single.IsPositiveInfinity(4.0F / 0) ? "true" : "false");

// This will return true.
Console::WriteLine( "IsPositiveInfinity(4.0F / 0) == {0}.", Single::IsPositiveInfinity( 4.0F / zero ) ? (String^)"true" : "false" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
System 命名空间
IsInfinity
IsNegativeInfinity
PositiveInfinity
NegativeInfinity


Single ..::.Parse 方法

Single
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Single 结构

将数字的字符串表示形式转换为它的等效单精度浮点数字。

名称 说明
页首

参考

Single 结构
Single 成员
System 命名空间
TryParse


Single ..::.Parse 方法 (String)

Single
.
.
::
.
Parse 方法 (String)
Single 结构

将数字的字符串表示形式转换为它的等效单精度浮点数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As Single
public static float Parse(
    string s
)
public:
static float Parse(
    String^ s
)
static member Parse :
        s:string -> float32

参数

s
类型： System String
包含要转换的数字的字符串。

返回值

类型： System Single
与 s 中指定的数值或符号等效的单精度浮点数字。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 不表示一个有效格式的数字。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

s 参数可包含当前区域性的 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或以下格式的字符串：

[ws][sign] [integral-digits[,]]integral-digits[.[fractional-digits]][e[sign]exponential-digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | Description
ws | 一系列空白字符。
sign | 负号 (-) 或正号 (+)。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。仅可以使用一个前导符号。 负号 (-) 或正号 (+)。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。仅可以使用一个前导符号。 负号 (-) 或正号 (+)。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。仅可以使用一个前导符号。
integral-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。
, | 区域性特定的千位分隔符。
. | 区域性特定的小数点符号。
fractional-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。
E | "e"或"E"字符，指示用指数（科学型）表示法表示值。
exponential-digits | 一系列介于 0 到 9 之间的数字，用于指定指数。

通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Parse(String, NumberStyles) 方法重载。 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Parse(String, NumberStyles) 方法重载。 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 Parse(String, NumberStyles) 方法重载。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见CurrentInfo。若要使用特定区域性的格式设置信息分析字符串，请使用 Parse(String, IFormatProvider) 或 Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见CurrentInfo。若要使用特定区域性的格式设置信息分析字符串，请使用 Parse(String, IFormatProvider) 或 Parse(String, NumberStyles, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见CurrentInfo。若要使用特定区域性的格式设置信息分析字符串，请使用 Parse(String, IFormatProvider) 或 Parse(String, NumberStyles, IFormatProvider) 方法。

通常，如果向 Parse 方法传递通过调用 ToString 方法创建的字符串，将返回原始 Single 值。但是，由于精度损失，这些值可能不相等。 通常，如果向 Parse 方法传递通过调用 ToString 方法创建的字符串，将返回原始 Single 值。但是，由于精度损失，这些值可能不相等。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例使用 Parse(String) 方法将字符串数组转换为等效的 Single 值。

Module Example
   Public Sub Main()
      Dim values() As String = { "100", "(100)", "-123,456,789", "123.45e+6", _
                                 "+500", "5e2", "3.1416", "600.", "-.123", _
                                 "-Infinity", "-1E-16", Double.MaxValue.ToString(), _
                                 Single.MinValue.ToString(), String.Empty }
      For Each value As String In values
         Try
            Dim number As Single = Single.Parse(value)
            Console.WriteLine("{0} -> {1}", value, number)
         Catch e As FormatException
            Console.WriteLine("'{0}' is not in a valid format.", value)
         Catch e As OverflowException
            Console.WriteLine("{0} is outside the range of a Single.", value)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       100 -> 100
'       '(100)' is not in a valid format.
'       -123,456,789 -> -1.234568E+08
'       123.45e+6 -> 1.2345E+08
'       +500 -> 500
'       5e2 -> 500
'       3.1416 -> 3.1416
'       600. -> 600
'       -.123 -> -0.123
'       -Infinity -> -Infinity
'       -1E-16 -> -1E-16
'       1.79769313486232E+308 is outside the range of a Single.
'       -3.402823E+38 -> -3.402823E+38
'       '' is not in a valid format.

using System;

public class Example
{
   public static void Main()
   {
      string[] values = { "100", "(100)", "-123,456,789", "123.45e+6",
                          "+500", "5e2", "3.1416", "600.", "-.123",
                          "-Infinity", "-1E-16", Double.MaxValue.ToString(),
                          Single.MinValue.ToString(), String.Empty };
      foreach (string value in values)
      {
         try {
            float number = Single.Parse(value);
            Console.WriteLine("{0} -> {1}", value, number);
         }
         catch (FormatException) {
            Console.WriteLine("'{0}' is not in a valid format.", value);
         }
         catch (OverflowException) {
            Console.WriteLine("{0} is outside the range of a Single.", value);
         }
      }
   }
}
// The example displays the following output:
//       100 -> 100
//       '(100)' is not in a valid format.
//       -123,456,789 -> -1.234568E+08
//       123.45e+6 -> 1.2345E+08
//       +500 -> 500
//       5e2 -> 500
//       3.1416 -> 3.1416
//       600. -> 600
//       -.123 -> -0.123
//       -Infinity -> -Infinity
//       -1E-16 -> -1E-16
//       1.79769313486232E+308 is outside the range of a Single.
//       -3.402823E+38 -> -3.402823E+38
//       '' is not in a valid format.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


Single ..::.Parse 方法 (String, NumberStyles)

Single
.
.
::
.
Parse 方法 (String, NumberStyles)
Single 结构

将具有指定样式的数字的字符串表示形式转换为它的等效单精度浮点数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As Single
public static float Parse(
    string s,
    NumberStyles style
)
public:
static float Parse(
    String^ s,
    NumberStyles style
)
static member Parse :
        s:string *
        style:NumberStyles -> float32

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Float 与 AllowThousands 的组合。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Float 与 AllowThousands 的组合。

返回值

类型： System Single
与 s 中指定的数值或符号等效的单精度浮点数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 不是一个有效格式的数字。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 包括 AllowHexSpecifier 值。

style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员：

  • AllowHexSpecifier

  • HexNumber

s 参数可包含当前区域性的 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol。它也可以采用以下形式，具体取决于 style 的值： s 参数可包含当前区域性的 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol。它也可以采用以下形式，具体取决于 style 的值：

[ws][$][sign][integral-digits[,]]integral-digits[.[fractional-digits]][E[sign]exponential-digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

ws

一系列空白字符。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 一系列空白字符。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。

$

区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。

sign

负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。

integral-digits

一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。

,

区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。

.

区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。

fractional-digits

一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。

E

"e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 value 参数可使用指数表示法表示数字。 "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 value 参数可使用指数表示法表示数字。

exponential-digits

一系列介于 0 到 9 之间的数字，用于指定指数。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 integral-digits 元素。
AllowDecimalPoint | 小数点 (.)和 fractional-digits 元素。
AllowExponent | "e"或"E"字符，指示指数表示法。此标志自身支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。 "e"或"E"字符，指示指数表示法。此标志自身支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 千位分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、千位分隔符 (,) 以及小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数字。 所有元素。但是，s 不能表示十六进制数字。

s 的示例包括“100”、“-123,456,789”、“123.45e+6”、“+500”、“5e2”、“3.1416”、“600”、“-.123”和“负无穷大”。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。

通常，如果向 Parse 方法传递通过调用 ToString 方法创建的字符串，将返回原始 Single 值。但是，由于精度损失，这些值可能不相等。 通常，如果向 Parse 方法传递通过调用 ToString 方法创建的字符串，将返回原始 Single 值。但是，由于精度损失，这些值可能不相等。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例使用 Parse(String, NumberStyles) 方法来分析 Single 值的字符串表示形式。该示例使用 en-US 区域性的格式设置信息。 下面的示例使用 Parse(String, NumberStyles) 方法来分析 Single 值的字符串表示形式。该示例使用 en-US 区域性的格式设置信息。

Imports System.Globalization
Imports System.Threading

Module ParseStrings
   Public Sub Main()
      ' Set current thread culture to en-US.
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")

      Dim value As String
      Dim styles As NumberStyles

      ' Parse a string in exponential notation with only the AllowExponent flag.
      value = "-1.063E-02"
      styles = NumberStyles.AllowExponent
      ShowNumericValue(value, styles)

      ' Parse a string in exponential notation
      ' with the AllowExponent and Number flags.
      styles = NumberStyles.AllowExponent Or NumberStyles.Number
      ShowNumericValue(value, styles)

      ' Parse a currency value with leading and trailing white space, and
      ' white space after the U.S. currency symbol.
      value = " $ 6,164.3299  "
      styles = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
      ShowNumericValue(value, styles)

      ' Parse negative value with thousands separator and decimal.
      value = "(4,320.64)"
      styles = NumberStyles.AllowParentheses Or NumberStyles.AllowTrailingSign _
               Or NumberStyles.Float
      ShowNumericValue(value, styles)

      styles = NumberStyles.AllowParentheses Or NumberStyles.AllowTrailingSign _
               Or NumberStyles.Float Or NumberStyles.AllowThousands
      ShowNumericValue(value, styles)
   End Sub

   Private Sub ShowNumericValue(value As String, styles As NumberStyles)
      Dim number As Single
      Try
         number = Single.Parse(value, styles)
         Console.WriteLine("Converted '{0}' using {1} to {2}.", _
                           value, styles.ToString(), number)
      Catch e As FormatException
         Console.WriteLine("Unable to parse '{0}' with styles {1}.", _
                           value, styles.ToString())
      End Try
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output to the console:
'    Unable to parse '-1.063E-02' with styles AllowExponent.
'
'    Converted '-1.063E-02' using AllowTrailingSign, AllowThousands, Float to -0.01063.
'
'    Converted ' $ 6,164.3299  ' using Number, AllowCurrencySymbol to 6164.3299.
'
'    Unable to parse '(4,320.64)' with styles AllowTrailingSign, AllowParentheses, Float.
'
'    Converted '(4,320.64)' using AllowTrailingSign, AllowParentheses, AllowThousands, Float to -4320.64.

using System;
using System.Globalization;
using System.Threading;

public class ParseString
{
   public static void Main()
   {
      // Set current thread culture to en-US.
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");

      string value;
      NumberStyles styles;

      // Parse a string in exponential notation with only the AllowExponent flag.
      value = "-1.063E-02";
      styles = NumberStyles.AllowExponent;
      ShowNumericValue(value, styles);

      // Parse a string in exponential notation
      // with the AllowExponent and Number flags.
      styles = NumberStyles.AllowExponent | NumberStyles.Number;
      ShowNumericValue(value, styles);

      // Parse a currency value with leading and trailing white space, and
      // white space after the U.S. currency symbol.
      value = " $ 6,164.3299  ";
      styles = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
      ShowNumericValue(value, styles);

      // Parse negative value with thousands separator and decimal.
      value = "(4,320.64)";
      styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |
               NumberStyles.Float;
      ShowNumericValue(value, styles);

      styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |
               NumberStyles.Float | NumberStyles.AllowThousands;
      ShowNumericValue(value, styles);
   }

   private static void ShowNumericValue(string value, NumberStyles styles)
   {
      Single number;
      try
      {
         number = Single.Parse(value, styles);
         Console.WriteLine("Converted '{0}' using {1} to {2}.",
                           value, styles.ToString(), number);
      }
      catch (FormatException)
      {
         Console.WriteLine("Unable to parse '{0}' with styles {1}.",
                           value, styles.ToString());
      }
      Console.WriteLine();
   }
}
// The example displays the following output to the console:
//    Unable to parse '-1.063E-02' with styles AllowExponent.
//
//    Converted '-1.063E-02' using AllowTrailingSign, AllowThousands, Float to -0.01063.
//
//    Converted ' $ 6,164.3299  ' using Number, AllowCurrencySymbol to 6164.3299.
//
//    Unable to parse '(4,320.64)' with styles AllowTrailingSign, AllowParentheses, Float.
//
//    Converted '(4,320.64)' using AllowTrailingSign, AllowParentheses, AllowThousands, Float to -4320.64.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


Single ..::.Parse 方法 (String, IFormatProvider)

Single
.
.
::
.
Parse 方法 (String, IFormatProvider)
Single 结构

将具有指定区域性特定格式的数字的字符串表示形式转换为它的等效单精度浮点数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As Single
public static float Parse(
    string s,
    IFormatProvider provider
)
public:
static float Parse(
    String^ s,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        provider:IFormatProvider -> float32

参数

s
类型： System String
包含要转换的数字的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System Single
与 s 中指定的数值或符号等效的单精度浮点数字。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 不表示一个有效格式的数字。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

此重载通常用于将可以多种方式格式化的文本转换为 Single 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。 此重载通常用于将可以多种方式格式化的文本转换为 Single 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。

通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol，也可包含以下格式的字符串： 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol，也可包含以下格式的字符串：

[ws][sign]integral-digits[.[fractional-digits]][E[sign]exponential-digits][ws]

可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。 可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。

元素 | Description
ws | 一系列空白字符。
sign | 负号 (-) 或正号 (+)。
integral-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。integral-digits 组可以用组分隔符分开。例如，在某些区域性中，用逗号 (,) 作为千位分隔符。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。
. | 区域性特定的小数点符号。
fractional-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。
E | "e"或"E"字符，指示用指数（科学型）表示法表示值。
exponential-digits | 一系列介于 0 到 9 之间的数字，用于指定指数。

有关数值格式的更多信息，请参见格式化类型主题。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关格式设置的区域性特定信息。在调用 Parse(String, IFormatProvider) 方法时，它会调用 provider 参数的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。其 GetFormat 方法然后返回的 NumberFormatInfo 对象将提供有关 s 参数的格式的信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关格式设置的区域性特定信息。在调用 Parse(String, IFormatProvider) 方法时，它会调用 provider 参数的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。其 GetFormat 方法然后返回的 NumberFormatInfo 对象将提供有关 s 参数的格式的信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关格式设置的区域性特定信息。在调用 Parse(String, IFormatProvider) 方法时，它会调用 provider 参数的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。其 GetFormat 方法然后返回的 NumberFormatInfo 对象将提供有关 s 参数的格式的信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关格式设置的区域性特定信息。在调用 Parse(String, IFormatProvider) 方法时，它会调用 provider 参数的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。其 GetFormat 方法然后返回的 NumberFormatInfo 对象将提供有关 s 参数的格式的信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 您可以传递一个 CultureInfo 对象，表示提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供针对该区域性的数值格式设置信息。 您可以传递一个 CultureInfo 对象，表示提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供针对该区域性的数值格式设置信息。

  • 可以传递提供数值格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供数值格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回提供格式设置信息的 NumberFormatInfo 对象。 可以传递一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者无法获取 NumberFormatInfo，则使用当前系统区域性的格式设置信息。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

s 的示例包括“100”、“-123,456,789”、“123.45e+6”、“+500”、“5e2”、“3.1416”、“600”、“-.123”和“负无穷大”。

下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Single 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Single 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Single 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 Single 值。

Protected Sub OkToSingle_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OkToSingle.Click
   Dim locale As String
   Dim culture As CultureInfo
   Dim number As Single

   ' Return if string is empty
   If String.IsNullOrEmpty(Me.inputNumber.Text) Then Exit Sub

   ' Get locale of web request to determine possible format of number
   If Request.UserLanguages.Length = 0 Then Exit Sub
   locale = Request.UserLanguages(0)
   If String.IsNullOrEmpty(locale) Then Exit Sub

   ' Instantiate CultureInfo object for the user's locale
   culture = New CultureInfo(locale)

   ' Convert user input from a string to a number
   Try
      number = Single.Parse(Me.inputNumber.Text, culture.NumberFormat)
   Catch ex As FormatException
      Exit Sub
   Catch ex As Exception
      Exit Sub
   End Try

   ' Output number to label on web form
   Me.outputNumber.Text = "Number is " & number.ToString()
End Sub

protected void OkToSingle_Click(object sender, EventArgs e)
{
   string locale;
   float number;
   CultureInfo culture;

   // Return if string is empty
   if (String.IsNullOrEmpty(this.inputNumber.Text))
      return;

   // Get locale of web request to determine possible format of number
   if (Request.UserLanguages.Length == 0)
      return;
   locale = Request.UserLanguages[0];
   if (String.IsNullOrEmpty(locale))
      return;

   // Instantiate CultureInfo object for the user's locale
   culture = new CultureInfo(locale);

   // Convert user input from a string to a number
   try
   {
      number = Single.Parse(this.inputNumber.Text, culture.NumberFormat);
   }
   catch (FormatException)
   {
      return;
   }
   catch (Exception)
   {
      return;
   }
   // Output number to label on web form
   this.outputNumber.Text = "Number is " + number.ToString();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


Single ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

Single
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
Single 结构

将具有指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效单精度浮点数字。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As Single
public static float Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
public:
static float Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> float32

参数

s
类型： System String
包含要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个用来指定的典型值为 Float 与 AllowThousands 的组合。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个用来指定的典型值为 Float 与 AllowThousands 的组合。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System Single
与 s 中指定的数值或符号等效的单精度浮点数字。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 不代表数字值。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 为 AllowHexSpecifier 值。
OverflowException | s 表示小于 MinValue 或大于 MaxValue 的数字。

style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数中允许的样式元素（例如，空白、千位分隔符或货币符号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员：

  • AllowHexSpecifier

  • HexNumber

s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol。它也可以采用以下形式，具体取决于 style 的值： s 参数可包含由 provider 指定的区域性的 NumberFormatInfo..::.PositiveInfinitySymbol、NumberFormatInfo..::.NegativeInfinitySymbol 或 NumberFormatInfo..::.NaNSymbol。它也可以采用以下形式，具体取决于 style 的值：

[ws] [$] [sign][integral-digits,]integral-digits[.[fractional-digits]][E[sign]exponential-digits][ws]

括在方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 括在方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | Description
ws | 一系列空白字符。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 一系列空白字符。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 负号 (-) 或正号 (+)。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
integral-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。当字符串包含 fractional-digits 元素时，可以没有 integral-digits 元素。
, | 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。
E | "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential-digits | 一系列介于 0 到 9 之间的数字，用于指定指数。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 integral-digits 元素。
AllowDecimalPoint | 小数点 (.)和 fractional-digits 元素。
AllowExponent | "e"或"E"字符，指示指数表示法。此标志自身支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。 "e"或"E"字符，指示指数表示法。此标志自身支持 digitsEdigits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 千位分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 的开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、千位分隔符 (,) 以及小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数字。 所有元素。但是，s 不能表示十六进制数字。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 value 格式的区域性特定信息。通常，provider 可以是以下任何一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 value 格式的区域性特定信息。通常，provider 可以是以下任何一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 value 格式的区域性特定信息。通常，provider 可以是以下任何一项：

  • 一个 CultureInfo 对象，表示提供数值格式设置信息的区域性。其 GetFormat 方法返回提供数值格式设置信息的 NumberFormatInfo 对象。 一个 CultureInfo 对象，表示提供数值格式设置信息的区域性。其 GetFormat 方法返回提供数值格式设置信息的 NumberFormatInfo 对象。

  • 一个 NumberFormatInfo 对象，它提供数值格式设置信息。（其 GetFormat 实现仅返回它自身。） 一个 NumberFormatInfo 对象，它提供数值格式设置信息。（其 GetFormat 实现仅返回它自身。）

  • 一个自定义对象，该对象实现 IFormatProvider 并使用其 GetFormat 方法实例化和返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的代码示例使用 Parse(String, NumberStyles, IFormatProvider) 方法来分析 Single 值的字符串表示形式。数组中的每个字符串都可以使用 en-US、nl-NL 和自定义区域性等格式设置约定进行分析。自定义区域性将其组分隔符定义为下划线 ("_") 并将其组大小定义为二。 下面的代码示例使用 Parse(String, NumberStyles, IFormatProvider) 方法来分析 Single 值的字符串表示形式。数组中的每个字符串都可以使用 en-US、nl-NL 和自定义区域性等格式设置约定进行分析。自定义区域性将其组分隔符定义为下划线 ("_") 并将其组大小定义为二。 下面的代码示例使用 Parse(String, NumberStyles, IFormatProvider) 方法来分析 Single 值的字符串表示形式。数组中的每个字符串都可以使用 en-US、nl-NL 和自定义区域性等格式设置约定进行分析。自定义区域性将其组分隔符定义为下划线 ("_") 并将其组大小定义为二。

Imports System.Globalization

Module Example
    Public Sub Main()
      ' Define an array of string values.
      Dim values() As String = { " 987.654E-2", " 987,654E-2", _
                                 "(98765,43210)", "9,876,543.210",  _
                                 "9.876.543,210",  "98_76_54_32,19" }
      ' Create a custom culture based on the invariant culture.
      Dim ci As New CultureInfo("")
      ci.NumberFormat.NumberGroupSizes = New Integer() { 2 }
      ci.NumberFormat.NumberGroupSeparator = "_"

      ' Define an array of format providers.
      Dim providers() As CultureInfo = { New CultureInfo("en-US"), _
                                             New CultureInfo("nl-NL"), ci }

      ' Define an array of styles.
      Dim styles() As NumberStyles = { NumberStyles.Currency, NumberStyles.Float }

      ' Iterate the array of format providers.
      For Each provider As CultureInfo In providers
         Console.WriteLine("Parsing using the {0} culture:", _
                           If(provider.Name = String.Empty, "Invariant", provider.Name))
         ' Parse each element in the array of string values.
         For Each value As String In values
            For Each style As NumberStyles In styles
               Try
                  Dim number As Single = Single.Parse(value, style, provider)
                  Console.WriteLine("   {0} ({1}) -> {2}", _
                                    value, style, number)
               Catch e As FormatException
                  Console.WriteLine("   '{0}' is invalid using {1}.", value, style)
               Catch e As OverflowException
                  Console.WriteLine("   '{0}' is out of the range of a Single.", value)
               End Try
            Next
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       Parsing using the en-US culture:
'          ' 987.654E-2' is invalid using Currency.
'           987.654E-2 (Float) -> 9.87654
'          ' 987,654E-2' is invalid using Currency.
'          ' 987,654E-2' is invalid using Float.
'          (98765,43210) (Currency) -> -9.876543E+09
'          '(98765,43210)' is invalid using Float.
'          9,876,543.210 (Currency) -> 9876543
'          '9,876,543.210' is invalid using Float.
'          '9.876.543,210' is invalid using Currency.
'          '9.876.543,210' is invalid using Float.
'          '98_76_54_32,19' is invalid using Currency.
'          '98_76_54_32,19' is invalid using Float.
'
'       Parsing using the nl-NL culture:
'          ' 987.654E-2' is invalid using Currency.
'          ' 987.654E-2' is invalid using Float.
'          ' 987,654E-2' is invalid using Currency.
'           987,654E-2 (Float) -> 9.87654
'          (98765,43210) (Currency) -> -98765.43
'          '(98765,43210)' is invalid using Float.
'          '9,876,543.210' is invalid using Currency.
'          '9,876,543.210' is invalid using Float.
'          9.876.543,210 (Currency) -> 9876543
'          '9.876.543,210' is invalid using Float.
'          '98_76_54_32,19' is invalid using Currency.
'          '98_76_54_32,19' is invalid using Float.
'
'       Parsing using the Invariant culture:
'          ' 987.654E-2' is invalid using Currency.
'           987.654E-2 (Float) -> 9.87654
'          ' 987,654E-2' is invalid using Currency.
'          ' 987,654E-2' is invalid using Float.
'          (98765,43210) (Currency) -> -9.876543E+09
'          '(98765,43210)' is invalid using Float.
'          9,876,543.210 (Currency) -> 9876543
'          '9,876,543.210' is invalid using Float.
'          '9.876.543,210' is invalid using Currency.
'          '9.876.543,210' is invalid using Float.
'          98_76_54_32,19 (Currency) -> 9.876543E+09
'          '98_76_54_32,19' is invalid using Float.

using System;
using System.Globalization;

public class Example
{
    public static void Main()
    {
      // Define an array of string values.
      string[] values = { " 987.654E-2", " 987,654E-2",  "(98765,43210)",
                          "9,876,543.210", "9.876.543,210",  "98_76_54_32,19" };
      // Create a custom culture based on the invariant culture.
      CultureInfo ci = new CultureInfo("");
      ci.NumberFormat.NumberGroupSizes = new int[] { 2 };
      ci.NumberFormat.NumberGroupSeparator = "_";

      // Define an array of format providers.
      CultureInfo[] providers = { new CultureInfo("en-US"),
                                  new CultureInfo("nl-NL"), ci };

      // Define an array of styles.
      NumberStyles[] styles = { NumberStyles.Currency, NumberStyles.Float };

      // Iterate the array of format providers.
      foreach (CultureInfo provider in providers)
      {
         Console.WriteLine("Parsing using the {0} culture:",
                           provider.Name == String.Empty ? "Invariant" : provider.Name);
         // Parse each element in the array of string values.
         foreach (string value in values)
         {
            foreach (NumberStyles style in styles)
            {
               try {
                  float number = Single.Parse(value, style, provider);
                  Console.WriteLine("   {0} ({1}) -> {2}",
                                    value, style, number);
               }
               catch (FormatException) {
                  Console.WriteLine("   '{0}' is invalid using {1}.", value, style);
               }
               catch (OverflowException) {
                  Console.WriteLine("   '{0}' is out of the range of a Single.", value);
               }
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       Parsing using the en-US culture:
//       The format of // 987.654E-2// is invalid.
//       The format of // 987,654E-2// is invalid.
//       (98765,43210) (Currency) -> -9.876543E+09
//       9,876,543.210 (Currency) -> 9876543
//       The format of '9.876.543,210// is invalid.
//       The format of '98_76_54_32,19// is invalid.
//
//       Parsing using the nl-NL culture:
//       The format of // 987.654E-2// is invalid.
//       The format of // 987,654E-2// is invalid.
//       (98765,43210) (Currency) -> -98765.43
//       The format of '9,876,543.210// is invalid.
//       9.876.543,210 (Currency) -> 9876543
//       The format of '98_76_54_32,19// is invalid.
//
//       Parsing using the Invariant culture:
//       The format of // 987.654E-2// is invalid.
//       The format of // 987,654E-2// is invalid.
//       (98765,43210) (Currency) -> -9.876543E+09
//       9,876,543.210 (Currency) -> 9876543
//       The format of '9.876.543,210// is invalid.
//       98_76_54_32,19 (Currency) -> 9.876543E+09

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


Single ..::.ToString 方法

Single
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Single 结构

将此实例的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

Single 结构
Single 成员
System 命名空间


Single ..::.ToString 方法

Single
.
.
::
.
ToString 方法
Single 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示。

返回值可以是 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或如下形式的字符串：

[sign]integral-digits[.[fractional-digits]][e[sign]exponential-digits]

可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。下表列出了每个元素： 可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。下表列出了每个元素： 可选元素括在方括号（[ 和 ]）中。包含"digits"一词的元素由一系列从 0 到 9 之间的数字字符组成。下表列出了每个元素：

元素 | Description
sign | 负号或正号。
integral-digits | 指定数字整数部分的一系列数字。有小数位时可以没有整数位。 指定数字整数部分的一系列数字。有小数位时可以没有整数位。
'.' | 区域性特定的小数点符号。
fractional-digits | 指定数字小数部分的一系列数字。
“e” | 小写字符“e”，指示指数（科学型）表示法。
exponential-digits | 指定指数的一系列数字。

返回值的示例包括“100”、“-123,456,789”、“123.45e+6”、“500”、“3.1416”、“600”、“-0.123”和“负无穷大”。

此 ToString 方法重载隐式使用通用数值格式说明符（"G"）和当前区域性的 NumberFormatInfo 对象。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

下面的示例使用默认的 Single..::.ToString 方法显示许多 Single 值的字符串表示形式。

Dim number As Single

number = 1.6E20
' Displays 1.6E+20.
Console.WriteLine(number.ToString())

number = 1.6E2
' Displays 160.
Console.WriteLine(number.ToString())

number = -3.541
' Displays -3.541.
Console.WriteLine(number.ToString())

number = -1502345222199E-07
' Displays -150234.5222199.
Console.WriteLine(number.ToString())

number = -15023452221990199574E-09
' Displays -15023452221.9902.
Console.WriteLine(number.ToString())

number = .60344
' Displays 0.60344.
Console.WriteLine(number.ToString())

number = .000000001
' Displays 1E-09.
Console.WriteLine(number.ToString())

float number;

number = 1.6E20F;
// Displays 1.6E+20.
Console.WriteLine(number.ToString());

number = 1.6E2F;
// Displays 160.
Console.WriteLine(number.ToString());

number = -3.541F;
// Displays -3.541.
Console.WriteLine(number.ToString());

number = -1502345222199E-07F;
// Displays -150234.5222199.
Console.WriteLine(number.ToString());

number = -15023452221990199574E-09F;
// Displays -15023452221.9902.
Console.WriteLine(number.ToString());

number = .60344F;
// Displays 0.60344.
Console.WriteLine(number.ToString());

number = .000000001F;
// Displays 1E-09.
Console.WriteLine(number.ToString());

下面的代码示例演示如何使用 Parse(String) 方法以及 ToString()()() 方法。

Dim Done As Boolean = False
Dim Inp As String
Do

    Console.Write("Enter a real number: ")
    Inp = Console.ReadLine()
    Try
        S = Single.Parse(Inp)
        Console.WriteLine("You entered " + S.ToString() + ".")
        Done = True
    Catch E As FormatException
        Console.WriteLine("You did not enter a number.")
    Catch E As Exception
        Console.WriteLine("An exception occurred while parsing your response: " + E.ToString())
    End Try
Loop While Not Done

bool done = false;
string inp;
do
{
    Console.Write("Enter a real number: ");
    inp = Console.ReadLine();
    try
    {
        s = Single.Parse(inp);
        Console.WriteLine("You entered {0}.", s.ToString());
        done = true;
    }
    catch (FormatException)
    {
        Console.WriteLine("You did not enter a number.");
    }
    catch (Exception e)
    {
        Console.WriteLine("An exception occurred while parsing your response: {0}", e.ToString());
    }
} while (!done);

bool done = false;
String^ inp;
do
{
   Console::Write( "Enter a real number: " );
   inp = Console::ReadLine();
   try
   {
      s = Single::Parse( inp );
      Console::WriteLine( "You entered {0}.", s );
      done = true;
   }
   catch ( FormatException^ )
   {
      Console::WriteLine( "You did not enter a number." );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "An exception occurred while parsing your response: {0}", e );
   }
}
while (  !done );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Single ..::.ToString 方法 (IFormatProvider)

Single
.
.
::
.
ToString 方法 (IFormatProvider)
Single 结构

使用指定的区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由 provider 指定。

实现

返回值可以是 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或如下形式的字符串：

[sign]integral-digits[.[fractional-digits]][e[sign]exponential-digits]

可选元素括在方括号（[ 和 ]）中。包含“digits”一词的元素由一系列从 0 到 9 之间的数字字符组成。下表列出了每个元素。 可选元素括在方括号（[ 和 ]）中。包含“digits”一词的元素由一系列从 0 到 9 之间的数字字符组成。下表列出了每个元素。 可选元素括在方括号（[ 和 ]）中。包含“digits”一词的元素由一系列从 0 到 9 之间的数字字符组成。下表列出了每个元素。

元素 | Description
sign | 负号或正号。
integral-digits | 指定数字整数部分的一系列数字。有小数位时可以没有整数位。 指定数字整数部分的一系列数字。有小数位时可以没有整数位。
'.' | 区域性特定的小数点符号。
fractional-digits | 指定数字小数部分的一系列数字。
“e” | 小写字符“e”，指示指数（科学型）表示法。
exponential-digits | 指定指数的一系列数字。

返回值的示例包括“100”、“-123,456,789”、“123.45e+6”、“500”、“3.1416”、“600”、“-0.123”和“负无穷大”。

此实例使用通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 数据设置返回值的格式。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 数据设置返回值的格式。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 数据设置返回值的格式。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 数据设置返回值的格式。

若要使用指定的区域性和特定的格式字符串将 Single 值转换为它的字符串表示形式，请调用 Single..::.ToString(String, IFormatProvider) 方法。

下面的示例使用表示多个不同区域性的 CultureInfo 对象显示两个 Single 值的字符串表示形式。

Dim value As Single

value = -16325.62015
' Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture))
' Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")))
' Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")))

value = 16034.125E21
' Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture))
' Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")))
' Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")))
' This example displays the following output to the console:
'       -16325.62015
'       -16325.62015
'       -16325,62015
'       1.6034125E+25
'       1.6034125E+25
'       1,6034125E+25

float value;

value = -16325.62015F;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));

value = 16034.125E21F;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
// This example displays the following output to the console:
//       -16325.62015
//       -16325.62015
//       -16325,62015
//       1.6034125E+25
//       1.6034125E+25
//       1,6034125E+25

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型


Single ..::.ToString 方法 (String)

Single
.
.
::
.
ToString 方法 (String)
Single 结构

使用指定的格式，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
一个数值格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 无效。

返回值可以是 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或由 format 指定的当前实例值的字符串表示形式。

format 参数可以是 D 和 X 之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果格式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则使用通用数值格式说明符（"G"）设置返回值的格式。 format 参数可以是 D 和 X 之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果格式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则使用通用数值格式说明符（"G"）设置返回值的格式。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。若要应用指定区域性的格式设置约定，请调用 Single..::.ToString(String, IFormatProvider) 方法。 返回值使用当前区域性的 NumberFormatInfo 对象进行格式设置。若要应用指定区域性的格式设置约定，请调用 Single..::.ToString(String, IFormatProvider) 方法。

默认情况下，返回值只包含 7 位精度，但内部维护的最大精度是 9 位。如果此实例的值超过 7 位，则 ToString(String) 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G9”或“R”格式规范指定 format；前一种格式总是返回 9 位精度；而后一种格式在数字可以用 7 位精度表示时返回 7 位精度，在数字只能用最大精度表示时返回 9 位精度。 默认情况下，返回值只包含 7 位精度，但内部维护的最大精度是 9 位。如果此实例的值超过 7 位，则 ToString(String) 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G9”或“R”格式规范指定 format；前一种格式总是返回 9 位精度；而后一种格式在数字可以用 7 位精度表示时返回 7 位精度，在数字只能用最大精度表示时返回 9 位精度。 默认情况下，返回值只包含 7 位精度，但内部维护的最大精度是 9 位。如果此实例的值超过 7 位，则 ToString(String) 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G9”或“R”格式规范指定 format；前一种格式总是返回 9 位精度；而后一种格式在数字可以用 7 位精度表示时返回 7 位精度，在数字只能用最大精度表示时返回 9 位精度。

下面的示例使用每个受支持的标准数值格式说明符以及两个自定义数值格式字符串来显示几个 Single 值。这些自定义格式字符串之一阐释如何用前导零填充 Single 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。 下面的示例使用每个受支持的标准数值格式说明符以及两个自定义数值格式字符串来显示几个 Single 值。这些自定义格式字符串之一阐释如何用前导零填充 Single 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。 下面的示例使用每个受支持的标准数值格式说明符以及两个自定义数值格式字符串来显示几个 Single 值。这些自定义格式字符串之一阐释如何用前导零填充 Single 值。在将数值转换为字符串的过程中，此示例会使用 en-US 区域性的格式约定。

Dim numbers() As Single = {1054.32179, -195489100.8377, 1.0437E21, _
                           -1.0573e-05}
Dim specifiers() As String = { "C", "E", "e", "F", "G", "N", "P", _
                               "R", "#,000.000", "0.###E-000", _
                               "000,000,000,000.00###"}
For Each number As Single In numbers
   Console.WriteLine("Formatting of {0}:", number)
   For Each specifier As String In specifiers
      Console.WriteLine("   {0,5}: {1}", _
                        specifier, number.ToString(specifier))
   Next
   Console.WriteLine()
Next
' The example displays the following output to the console:
'       Formatting of 1054.32179:
'              C: $1,054.32
'              E: 1.054322E+003
'              e: 1.054322e+003
'              F: 1054.32
'              G: 1054.32179
'              N: 1,054.32
'              P: 105,432.18 %
'              R: 1054.32179
'          #,000.000: 1,054.322
'          0.###E-000: 1.054E003
'          000,000,000,000.00###: 000,000,001,054.322
'
'       Formatting of -195489100.8377:
'              C: ($195,489,100.84)
'              E: -1.954891E+008
'              e: -1.954891e+008
'              F: -195489100.84
'              G: -195489100.8377
'              N: -195,489,100.84
'              P: -19,548,910,083.77 %
'              R: -195489100.8377
'          #,000.000: -195,489,100.838
'          0.###E-000: -1.955E008
'          000,000,000,000.00###: -000,195,489,100.00
'
'       Formatting of 1.0437E+21:
'              C: $1,043,700,000,000,000,000,000.00
'              E: 1.043700E+021
'              e: 1.043700e+021
'              F: 1043700000000000000000.00
'              G: 1.0437E+21
'              N: 1,043,700,000,000,000,000,000.00
'              P: 104,370,000,000,000,000,000,000.00 %
'              R: 1.0437E+21
'          #,000.000: 1,043,700,000,000,000,000,000.000
'          0.###E-000: 1.044E021
'          000,000,000,000.00###: 1,043,700,000,000,000,000,000.00
'
'       Formatting of -1.0573E-05:
'              C: $0.00
'              E: -1.057300E-005
'              e: -1.057300e-005
'              F: 0.00
'              G: -1.0573E-05
'              N: 0.00
'              P: 0.00 %
'              R: -1.0573E-05
'          #,000.000: 000.000
'          0.###E-000: -1.057E-005
'          000,000,000,000.00###: -000,000,000,000.00001

float[] numbers= { 1054.32179F, -195489100.8377F, 1.0437E21F,
                   -1.0573e-05F };
string[] specifiers = { "C", "E", "e", "F", "G", "N", "P",
                        "R", "#,000.000", "0.###E-000",
                        "000,000,000,000.00###" };

foreach (float number in numbers)
{
   Console.WriteLine("Formatting of {0}:", number);
   foreach (string specifier in specifiers)
      Console.WriteLine("   {0,5}: {1}",
                        specifier, number.ToString(specifier));

   Console.WriteLine();
}
// The example displays the following output to the console:
//       Formatting of 1054.32179:
//              C: $1,054.32
//              E: 1.054322E+003
//              e: 1.054322e+003
//              F: 1054.32
//              G: 1054.32179
//              N: 1,054.32
//              P: 105,432.18 %
//              R: 1054.32179
//          #,000.000: 1,054.322
//          0.###E-000: 1.054E003
//          000,000,000,000.00###: 000,000,001,054.322
//
//       Formatting of -195489100.8377:
//              C: ($195,489,100.84)
//              E: -1.954891E+008
//              e: -1.954891e+008
//              F: -195489100.84
//              G: -195489100.8377
//              N: -195,489,100.84
//              P: -19,548,910,083.77 %
//              R: -195489100.8377
//          #,000.000: -195,489,100.838
//          0.###E-000: -1.955E008
//          000,000,000,000.00###: -000,195,489,100.00
//
//       Formatting of 1.0437E+21:
//              C: $1,043,700,000,000,000,000,000.00
//              E: 1.043700E+021
//              e: 1.043700e+021
//              F: 1043700000000000000000.00
//              G: 1.0437E+21
//              N: 1,043,700,000,000,000,000,000.00
//              P: 104,370,000,000,000,000,000,000.00 %
//              R: 1.0437E+21
//          #,000.000: 1,043,700,000,000,000,000,000.000
//          0.###E-000: 1.044E021
//          000,000,000,000.00###: 1,043,700,000,000,000,000,000.00
//
//       Formatting of -1.0573E-05:
//              C: $0.00
//              E: -1.057300E-005
//              e: -1.057300e-005
//              F: 0.00
//              G: -1.0573E-05
//              N: 0.00
//              P: 0.00 %
//              R: -1.0573E-05
//          #,000.000: 000.000
//          0.###E-000: -1.057E-005
//          000,000,000,000.00###: -000,000,000,000.00001

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
如何：用前导零填充数字


Single ..::.ToString 方法 (String, IFormatProvider)

Single
.
.
::
.
ToString 方法 (String, IFormatProvider)
Single 结构

使用指定的格式和区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
一个数值格式字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式形式，由 format 和 provider 指定。

实现

返回值可以是 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或由 format 指定的当前实例值的字符串表示形式。

format 参数可以是 D 和 X 之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。 format 参数可以是 D 和 X 之外的任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则此实例的返回值使用通用数值格式说明符（“G”）进行格式设置。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象设置返回值的格式。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象设置返回值的格式。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象设置返回值的格式。 provider 参数是 IFormatProvider 的实现，其 GetFormat 方法将返回 NumberFormatInfo 对象。通常，provider 是 CultureInfo 对象或 NumberFormatInfo 对象。provider 参数提供用于设置格式的区域性特定信息。如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象设置返回值的格式。

默认情况下，返回值只包含 7 位精度，但内部维护的最大精度是 9 位。如果此实例的值超过 7 位，则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G9”或“R”格式规范指定 format；前一种格式总是返回 9 位精度；而后一种格式在数字可以用 7 位精度表示时返回 7 位精度，在数字只能用最大精度表示时返回 9 位精度。 默认情况下，返回值只包含 7 位精度，但内部维护的最大精度是 9 位。如果此实例的值超过 7 位，则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G9”或“R”格式规范指定 format；前一种格式总是返回 9 位精度；而后一种格式在数字可以用 7 位精度表示时返回 7 位精度，在数字只能用最大精度表示时返回 9 位精度。 默认情况下，返回值只包含 7 位精度，但内部维护的最大精度是 9 位。如果此实例的值超过 7 位，则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol，而不是预期的数字。如果要求更高的精度，请用“G9”或“R”格式规范指定 format；前一种格式总是返回 9 位精度；而后一种格式在数字可以用 7 位精度表示时返回 7 位精度，在数字只能用最大精度表示时返回 9 位精度。

下面的示例使用一些不同的区域性的每个支持的标准数值格式说明符来显示 Single 值。

Dim value As Single = 16325.62901
Dim specifier As String
Dim culture As CultureInfo

' Use standard numeric format specifiers.
specifier = "G"
culture = CultureInfo.CreateSpecificCulture("eu-ES")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16325,62901
Console.WriteLine(value.ToString(specifier, CultureInfo.InvariantCulture))
' Displays:    16325.62901

specifier = "C"
culture = CultureInfo.CreateSpecificCulture("en-US")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    $16,325.63
culture = CultureInfo.CreateSpecificCulture("en-GB")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:     16,325.63

specifier = "E04"
culture = CultureInfo.CreateSpecificCulture("sv-SE")
Console.WriteLine(value.ToString(specifier, culture))
' Displays: 1,6326E+004
 culture = CultureInfo.CreateSpecificCulture("en-NZ")
 Console.WriteLine(value.ToString(specifier, culture))
' Displays:    1.6326E+004

specifier = "F"
culture = CultureInfo.CreateSpecificCulture("fr-FR")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16325,63
culture = CultureInfo.CreateSpecificCulture("en-CA")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16325.63

specifier = "N"
culture = CultureInfo.CreateSpecificCulture("es-ES")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16.325,63
culture = CultureInfo.CreateSpecificCulture("fr-CA")
Console.WriteLine(value.ToString(specifier, culture))
' Displays:    16 325,63

specifier = "P"
culture = CultureInfo.InvariantCulture
Console.WriteLine((value/10000).ToString(specifier, culture))
' Displays:    163.26 %
culture = CultureInfo.CreateSpecificCulture("ar-EG")
Console.WriteLine((value/10000).ToString(specifier, culture))
' Displays:    163.256 %

float value = 16325.62901F;
string specifier;
CultureInfo culture;

// Use standard numeric format specifiers.
specifier = "G";
culture = CultureInfo.CreateSpecificCulture("eu-ES");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16325,62901
Console.WriteLine(value.ToString(specifier, CultureInfo.InvariantCulture));
// Displays:    16325.62901

specifier = "C";
culture = CultureInfo.CreateSpecificCulture("en-US");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    $16,325.63
culture = CultureInfo.CreateSpecificCulture("en-GB");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:     16,325.63

specifier = "E04";
culture = CultureInfo.CreateSpecificCulture("sv-SE");
Console.WriteLine(value.ToString(specifier, culture));
// Displays: 1,6326E+004
 culture = CultureInfo.CreateSpecificCulture("en-NZ");
 Console.WriteLine(value.ToString(specifier, culture));
// Displays:    1.6326E+004

specifier = "F";
culture = CultureInfo.CreateSpecificCulture("fr-FR");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16325,63
culture = CultureInfo.CreateSpecificCulture("en-CA");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16325.63

specifier = "N";
culture = CultureInfo.CreateSpecificCulture("es-ES");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16.325,63
culture = CultureInfo.CreateSpecificCulture("fr-CA");
Console.WriteLine(value.ToString(specifier, culture));
// Displays:    16 325,63

specifier = "P";
culture = CultureInfo.InvariantCulture;
Console.WriteLine((value/10000).ToString(specifier, culture));
// Displays:    163.26 %
culture = CultureInfo.CreateSpecificCulture("ar-EG");
Console.WriteLine((value/10000).ToString(specifier, culture));
// Displays:    163.256 %

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Single 结构
Single 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
如何：用前导零填充数字


Single ..::.TryParse 方法

Single
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Single 结构

将数字的字符串表示形式转换为它的等效单精度浮点数字。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效单精度浮点数字。一个指示转换是否成功的返回值。

名称 说明
页首

参考

Single 结构
Single 成员
System 命名空间
Parse


Single ..::.TryParse 方法 (String, Single%)

Single
.
.
::
.
TryParse 方法 (String, Single%)
Single 结构

将数字的字符串表示形式转换为它的等效单精度浮点数字。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为它的等效单精度浮点数字。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As Single _
) As Boolean
public static bool TryParse(
    string s,
    out float result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] float% result
)
static member TryParse :
        s:string *
        result:float32 byref -> bool

参数

s
类型： System String
表示要转换的数字的字符串。
result
类型： System Single %
当此方法返回时，如果转换成功，则包含与 s 所包含的数值或符号等效的单精度浮点数字；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不是有效格式的数字或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数值或符号等效的单精度浮点数字；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不是有效格式的数字或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数值或符号等效的单精度浮点数字；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），不是有效格式的数字或者表示的数字小于 MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。

此重载与 Single..::.Parse(String) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 此重载与 Single..::.Parse(String) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

s 参数可包含 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol（字符串比较区分大小写）或以下格式的字符串：

[ws][sign][integral-digits,]integral-digits[.[fractional-digits]][e[sign]exponential-digits][ws]

方括号中的元素是可选的。下表描述每个元素。 方括号中的元素是可选的。下表描述每个元素。

元素 | Description
ws | 一系列空白字符。
sign | 负号或正号。
integral-digits | 一系列介于 0 到 9 之间的数字字符，用于指定数字的整数部分。有小数位时可以没有整数位。 一系列介于 0 到 9 之间的数字字符，用于指定数字的整数部分。有小数位时可以没有整数位。
, | 区域性特定的组分隔符。
. | 区域性特定的小数点符号。
fractional-digits | 一系列介于 0 到 9 之间的数字字符，用于指定数字的小数部分。
E | 大写或小写字符“e”，表示指数（科学型）表示法。
exponential-digits | 一系列介于 0 到 9 之间的数字字符，用于指定指数。

通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法重载。 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法重载。 通过使用 NumberStyles..::.Float 和 NumberStyles..::.AllowThousands 标志的组合来解释 s 参数。这意味着允许空白和千位分隔符，但不允许货币符号。若要显式定义可在 s 中存在的元素（例如，货币符号、千位分隔符和空白），请使用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法重载。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用其他一些指定区域性的格式设置信息分析字符串，请使用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用其他一些指定区域性的格式设置信息分析字符串，请使用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用其他一些指定区域性的格式设置信息分析字符串，请使用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法重载。

通常，如果向 Single..::.TryParse 方法传递通过调用 Single..::.ToString 方法创建的字符串，将返回原始 Single 值。但是，由于精度损失，这些值可能不相等。 通常，如果向 Single..::.TryParse 方法传递通过调用 Single..::.ToString 方法创建的字符串，将返回原始 Single 值。但是，由于精度损失，这些值可能不相等。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的代码示例使用 TryParse(String, Single%) 方法将数值的字符串表示形式转换为 Single 值。该示例假定当前区域性为 en-US。 下面的代码示例使用 TryParse(String, Single%) 方法将数值的字符串表示形式转换为 Single 值。该示例假定当前区域性为 en-US。

Dim value As String
Dim number As Single

' Parse a floating-point value with a thousands separator.
value = "1,643.57"
If Single.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If

' Parse a floating-point value with a currency symbol and a
' thousands separator.
value = "$1,643.57"
If Single.TryParse(value, number) Then
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If

' Parse value in exponential notation.
value = "-1.643e6"
If Single.TryParse(value, number)
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If

' Parse a negative integer number.
value = "-168934617882109132"
If Single.TryParse(value, number)
   Console.WriteLine(number)
Else
   Console.WriteLine("Unable to parse '{0}'.", value)
End If
' The example displays the following output:
'       1643.57
'       Unable to parse '$1,643.57'.
'       -1643000
'       -1.68934617882109E+17

string value;
float number;

// Parse a floating-point value with a thousands separator.
value = "1,643.57";
if (Single.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);

// Parse a floating-point value with a currency symbol and a
// thousands separator.
value = "$1,643.57";
if (Single.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);

// Parse value in exponential notation.
value = "-1.643e6";
if (Single.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);

// Parse a negative integer value.
value = "-168934617882109132";
if (Single.TryParse(value, out number))
   Console.WriteLine(number);
else
   Console.WriteLine("Unable to parse '{0}'.", value);
// The example displays the following output:
//       1643.57
//       Unable to parse '$1,643.57'.
//       -164300
//       -1.68934617882109E+17

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Single 结构
Single 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


Single ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, Single%)

Single
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, Single%)
Single 结构

将具有指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效单精度浮点数字。一个指示转换是否成功的返回值。 将具有指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效单精度浮点数字。一个指示转换是否成功的返回值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As Single _
) As Boolean
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out float result
)
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] float% result
)
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:float32 byref -> bool

参数

s
类型： System String
表示要转换的数字的字符串。
style
类型： System.Globalization NumberStyles
枚举值的一个按位组合，指示 s 所允许的格式。一个要指定的典型值为 NumberStyles..::.Float 与 NumberStyles..::.AllowThousands 的组合。 枚举值的一个按位组合，指示 s 所允许的格式。一个要指定的典型值为 NumberStyles..::.Float 与 NumberStyles..::.AllowThousands 的组合。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
result
类型： System Single %
当此方法返回时，如果转换成功，则包含与 s 所包含的数值或符号等效的单精度浮点数字；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），其格式不符合 style，表示的数字小于 Single..::.MinValue 或大于 Single..::.MaxValue，或者 style 不是 NumberStyles 枚举的常数的有效组合，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数值或符号等效的单精度浮点数字；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），其格式不符合 style，表示的数字小于 Single..::.MinValue 或大于 Single..::.MaxValue，或者 style 不是 NumberStyles 枚举的常数的有效组合，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数值或符号等效的单精度浮点数字；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），其格式不符合 style，表示的数字小于 Single..::.MinValue 或大于 Single..::.MaxValue，或者 style 不是 NumberStyles 枚举的常数的有效组合，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 s，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 为 NumberStyles..::.AllowHexSpecifier 值。

此重载与 Parse(String, NumberStyles, IFormatProvider) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 此重载与 Parse(String, NumberStyles, IFormatProvider) 方法不同，它返回的是指示分析操作是否成功的布尔值，而不是已分析的数值。它使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员： style 参数定义 s 参数的允许格式以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员：

  • NumberStyles AllowHexSpecifier

  • NumberStyles HexNumber

s 参数可包含由 provider 指定的区域性的 PositiveInfinitySymbol、NegativeInfinitySymbol 或 NaNSymbol。此外，根据 style 的值，s 参数还可以包括下列元素： s 参数可包含由 provider 指定的区域性的 PositiveInfinitySymbol、NegativeInfinitySymbol 或 NaNSymbol。此外，根据 style 的值，s 参数还可以包括下列元素：

[ws] [$] [sign][integral-digits,]integral-digits[.fractional-digits][e[sign]exponential-digits][ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | Description
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头。如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头。如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头。如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 IFormatProvider..::.GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyNegativePattern 或 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 IFormatProvider..::.GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyNegativePattern 或 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 IFormatProvider..::.GetFormat 方法返回的 NumberFormatInfo 对象的 NumberFormatInfo..::.CurrencyNegativePattern 或 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
integral-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。有小数位时可以没有整数位。 一系列介于 0 到 9 之间的数字，用于指定数字的整数部分。有小数位时可以没有整数位。
, | 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可出现在 s 中。 区域性特定的千位分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的千位分隔符可出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional-digits | 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。 一系列介于 0 到 9 之间的数字，用于指定数字的小数部分。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则小数位可以出现在 s 中。
e | 字符 e 或 E，用于指示 s 可使用指数表示法表示数字。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 字符 e 或 E，用于指示 s 可使用指数表示法表示数字。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential-digits | 一系列介于 0 到 9 之间的数字，用于指定指数。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。剩余的 System.Globalization..::.NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 integral-digits 元素。
AllowDecimalPoint | . 和 fractional-digits 元素。
AllowExponent | s 参数也可以使用指数表示法。此标志自身支持 integral-digitsEexponential-digits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的、采用指数表示法的字符串所必需的。 s 参数也可以使用指数表示法。此标志自身支持 integral-digitsEexponential-digits 形式的值；其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的、采用指数表示法的字符串所必需的。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 的开头的 sign 元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | , 元素。
AllowCurrencySymbol | $ 元素。
Currency | 所有人。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有人。s 参数不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 的开头或结尾的 ws 元素、位于 s 开头的 sign 以及 . 符号。s 参数也可以使用指数表示法。 位于 s 的开头或结尾的 ws 元素、位于 s 开头的 sign 以及 . 符号。s 参数也可以使用指数表示法。
Number | ws、sign、千位分隔符 (,) 以及小数点 (.)元素。
Any | 所有样式（除 s 之外）都不能表示十六进制数字。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关格式设置的区域性特定信息。在调用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法时，它会调用 provider 参数的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。其 GetFormat 方法然后返回的 NumberFormatInfo 对象将提供有关 s 参数的格式的信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关格式设置的区域性特定信息。在调用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法时，它会调用 provider 参数的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。其 GetFormat 方法然后返回的 NumberFormatInfo 对象将提供有关 s 参数的格式的信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关格式设置的区域性特定信息。在调用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法时，它会调用 provider 参数的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。其 GetFormat 方法然后返回的 NumberFormatInfo 对象将提供有关 s 参数的格式的信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关格式设置的区域性特定信息。在调用 TryParse(String, NumberStyles, IFormatProvider, Single%) 方法时，它会调用 provider 参数的 GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。其 GetFormat 方法然后返回的 NumberFormatInfo 对象将提供有关 s 参数的格式的信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 您可以传递一个 CultureInfo 对象，表示提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供针对该区域性的数值格式设置信息。 您可以传递一个 CultureInfo 对象，表示提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供针对该区域性的数值格式设置信息。

  • 可以传递提供数值格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供数值格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回提供格式设置信息的 NumberFormatInfo 对象。 可以传递一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 s 的格式设置将基于当前区域性的 NumberFormatInfo 对象进行解释。

如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。 如果在执行分析操作的过程中在 s 参数中遇到分隔符，并且适用的货币分隔符或小数位分隔符和组分隔符相同，则分析操作假定该分隔符是小数点分隔符，而不是组分隔符。有关分隔符的更多信息，请参见 CurrencyDecimalSeparator、NumberDecimalSeparator、CurrencyGroupSeparator 和 NumberGroupSeparator。

下面的示例演示如何使用 Single..::.TryParse(String, NumberStyles, IFormatProvider, Single%) 方法分析具有特定样式并使用特定区域性约定进行了格式设置的数字字符串表示形式。

Dim value As String
Dim style As System.Globalization.NumberStyles
Dim culture As System.Globalization.CultureInfo
Dim number As Single

' Parse currency value using en-GB culture.
value = " 1,097.63"
style = System.Globalization.NumberStyles.Number Or _
        System.Globalization.NumberStyles.AllowCurrencySymbol
culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")
If Single.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If

value = "1345,978"
style = System.Globalization.NumberStyles.AllowDecimalPoint
culture = System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR")
If Single.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If

value = "1.345,978"
style = System.Globalization.NumberStyles.AllowDecimalPoint Or _
        System.Globalization.NumberStyles.AllowThousands
culture = System.Globalization.CultureInfo.CreateSpecificCulture("es-ES")
If Single.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If

value = "1 345,978"
If Single.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If
' The example displays the following output:
'       Converted ' 1,097.63' to 1097.63.
'       Converted '1345,978' to 1345.978.
'       Converted '1.345,978' to 1345.978.
'       Unable to convert '1 345,978'.

string value;
System.Globalization.NumberStyles style;
System.Globalization.CultureInfo culture;
float number;

// Parse currency value using en-GB culture.
value = " 1,097.63";
style = System.Globalization.NumberStyles.Number |
        System.Globalization.NumberStyles.AllowCurrencySymbol;
culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");
if (Single.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);

value = "1345,978";
style = System.Globalization.NumberStyles.AllowDecimalPoint;
culture = System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR");
if (Single.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);

value = "1.345,978";
style = System.Globalization.NumberStyles.AllowDecimalPoint |
        System.Globalization.NumberStyles.AllowThousands;
culture = System.Globalization.CultureInfo.CreateSpecificCulture("es-ES");
if (Single.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);

value = "1 345,978";
if (Single.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// The example displays the following output:
//       Converted ' 1,097.63' to 1097.63.
//       Converted '1345,978' to 1345.978.
//       Converted '1.345,978' to 1345.978.
//       Unable to convert '1 345,978'.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Single 结构
Single 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


Single 运算符

Single 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Single 结构

Single 类型公开以下成员。

名称 说明
页首

参考

Single 结构
System 命名空间


Single ..::.Equality 运算符

Single
.
.
::
.
Equality 运算符
Single 结构

返回一个值，该值指示两个指定的 Single 值是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    left As Single, _
    right As Single _
) As Boolean
public static bool operator ==(
    float left,
    float right
)
public:
static bool operator ==(
    float left,
    float right
)
static let inline (=)
        left:float32 *
        right:float32  : bool

参数

left
类型： System Single
要比较的第一个值。
right
类型： System Single
要比较的第二个值。

返回值

类型： System Boolean
如果 left 和 right 相等，则为 true；否则为 false。

Equality 方法定义了 Single 值的相等运算符。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Single 结构
Single 成员
System 命名空间


Single ..::.GreaterThan 运算符

Single
.
.
::
.
GreaterThan 运算符
Single 结构

返回一个值，该值指示指定的 Single 值是否大于另一个指定的 Single 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator > ( _
    left As Single, _
    right As Single _
) As Boolean
public static bool operator >(
    float left,
    float right
)
public:
static bool operator >(
    float left,
    float right
)
static let inline (>)
        left:float32 *
        right:float32  : bool

参数

left
类型： System Single
要比较的第一个值。
right
类型： System Single
要比较的第二个值。

返回值

类型： System Boolean
如果 left 大于 right，则为 true；否则为 false。

GreaterThan 方法为 Single 值定义了大于运算符的运算。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Single 结构
Single 成员
System 命名空间


Single ..::.GreaterThanOrEqual 运算符

Single
.
.
::
.
GreaterThanOrEqual 运算符
Single 结构

返回一个值，该值指示指定的 Single 值是否大于或等于另一个指定的 Single 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator >= ( _
    left As Single, _
    right As Single _
) As Boolean
public static bool operator >=(
    float left,
    float right
)
public:
static bool operator >=(
    float left,
    float right
)
static let inline (>=)
        left:float32 *
        right:float32  : bool

参数

left
类型： System Single
要比较的第一个值。
right
类型： System Single
要比较的第二个值。

返回值

类型： System Boolean
如果 left 大于或等于 right，则为 true；否则为 false。

GreaterThanOrEqual 方法为 Single 值定义了大于或等于运算符的运算。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Single 结构
Single 成员
System 命名空间


Single ..::.Inequality 运算符

Single
.
.
::
.
Inequality 运算符
Single 结构

返回一个值，该值指示两个指定的 Single 值是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    left As Single, _
    right As Single _
) As Boolean
public static bool operator !=(
    float left,
    float right
)
public:
static bool operator !=(
    float left,
    float right
)
static let inline (<>)
        left:float32 *
        right:float32  : bool

参数

left
类型： System Single
要比较的第一个值。
right
类型： System Single
要比较的第二个值。

返回值

类型： System Boolean
如果 left 与 right 不相等，则为 true；否则为 false。

Inequality 方法定义了 Single 值的不相等运算符。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Single 结构
Single 成员
System 命名空间


Single ..::.LessThan 运算符

Single
.
.
::
.
LessThan 运算符
Single 结构

返回一个值，该值指示指定的 Single 值是否小于另一个指定的 Single 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator < ( _
    left As Single, _
    right As Single _
) As Boolean
public static bool operator <(
    float left,
    float right
)
public:
static bool operator <(
    float left,
    float right
)
static let inline (<)
        left:float32 *
        right:float32  : bool

参数

left
类型： System Single
要比较的第一个值。
right
类型： System Single
要比较的第二个值。

返回值

类型： System Boolean
如果 left 小于 right，则为 true；否则为 false。

LessThan 方法为 Single 值定义了小于运算符的运算。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Single 结构
Single 成员
System 命名空间


Single ..::.LessThanOrEqual 运算符

Single
.
.
::
.
LessThanOrEqual 运算符
Single 结构

返回一个值，该值指示指定的 Single 值是否小于或等于另一个指定的 Single 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <= ( _
    left As Single, _
    right As Single _
) As Boolean
public static bool operator <=(
    float left,
    float right
)
public:
static bool operator <=(
    float left,
    float right
)
static let inline (<=)
        left:float32 *
        right:float32  : bool

参数

left
类型： System Single
要比较的第一个值。
right
类型： System Single

返回值

类型： System Boolean
如果 left 小于或等于 right，则为 true；否则为 false。

LessThanOrEqual 方法为 Single 值定义了小于或等于运算符的运算。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Single 结构
Single 成员
System 命名空间


StackOverflowException 类

StackOverflowException 类
成员

因包含的嵌套方法调用过多而导致执行堆栈溢出时引发的异常。无法继承此类。 因包含的嵌套方法调用过多而导致执行堆栈溢出时引发的异常。无法继承此类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class StackOverflowException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StackOverflowException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class StackOverflowException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type StackOverflowException =
    class
        inherit SystemException
    end

StackOverflowException 因执行堆栈溢出错误引发，通常在存在非常深的递归或无界递归时发生。LocallocMicrosoft 中间语言 (MSIL) 指令引发 StackOverflowException。 StackOverflowException 因执行堆栈溢出错误引发，通常在存在非常深的递归或无界递归时发生。LocallocMicrosoft 中间语言 (MSIL) 指令引发 StackOverflowException。

StackOverflowException 使用值为 0x800703E9 的 HRESULT COR_E_STACKOVERFLOW。有关 StackOverflowException 对象的初始属性值列表，请参见 StackOverflowException 构造函数。 StackOverflowException 使用值为 0x800703E9 的 HRESULT COR_E_STACKOVERFLOW。有关 StackOverflowException 对象的初始属性值列表，请参见 StackOverflowException 构造函数。

说明 说明

该继承的 Data 属性的值始终是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

版本注意事项

在以前版本的 .NET Framework 中，您的应用程序可以捕获 StackOverflowException 对象（例如，从无限递归恢复）。但是，现在我们建议不要使用这种做法，原因是需要大量附加代码才能可靠地捕获堆栈溢出异常并继续执行程序。 在以前版本的 .NET Framework 中，您的应用程序可以捕获 StackOverflowException 对象（例如，从无限递归恢复）。但是，现在我们建议不要使用这种做法，原因是需要大量附加代码才能可靠地捕获堆栈溢出异常并继续执行程序。

从 .NET Framework 2.0 版开始，将无法通过 try-catch 块捕获 StackOverflowException 对象，并且默认情况下将终止相应的进程。因此，建议用户编写自己的代码以检测和防止堆栈溢出。例如，如果您的应用程序依赖于递归，则可以使用计数器或状态条件来终止递归循环。请注意，承载公共语言运行时 (CLR) 的应用程序可以指定由 CLR 卸载发生堆栈溢出异常的应用程序域，并让相应的进程继续运行。有关更多信息，请参见ICLRPolicyManager 接口和 承载概述。 从 .NET Framework 2.0 版开始，将无法通过 try-catch 块捕获 StackOverflowException 对象，并且默认情况下将终止相应的进程。因此，建议用户编写自己的代码以检测和防止堆栈溢出。例如，如果您的应用程序依赖于递归，则可以使用计数器或状态条件来终止递归循环。请注意，承载公共语言运行时 (CLR) 的应用程序可以指定由 CLR 卸载发生堆栈溢出异常的应用程序域，并让相应的进程继续运行。有关更多信息，请参见ICLRPolicyManager 接口和 承载概述。 从 .NET Framework 2.0 版开始，将无法通过 try-catch 块捕获 StackOverflowException 对象，并且默认情况下将终止相应的进程。因此，建议用户编写自己的代码以检测和防止堆栈溢出。例如，如果您的应用程序依赖于递归，则可以使用计数器或状态条件来终止递归循环。请注意，承载公共语言运行时 (CLR) 的应用程序可以指定由 CLR 卸载发生堆栈溢出异常的应用程序域，并让相应的进程继续运行。有关更多信息，请参见ICLRPolicyManager 接口和 承载概述。 从 .NET Framework 2.0 版开始，将无法通过 try-catch 块捕获 StackOverflowException 对象，并且默认情况下将终止相应的进程。因此，建议用户编写自己的代码以检测和防止堆栈溢出。例如，如果您的应用程序依赖于递归，则可以使用计数器或状态条件来终止递归循环。请注意，承载公共语言运行时 (CLR) 的应用程序可以指定由 CLR 卸载发生堆栈溢出异常的应用程序域，并让相应的进程继续运行。有关更多信息，请参见ICLRPolicyManager 接口和 承载概述。 从 .NET Framework 2.0 版开始，将无法通过 try-catch 块捕获 StackOverflowException 对象，并且默认情况下将终止相应的进程。因此，建议用户编写自己的代码以检测和防止堆栈溢出。例如，如果您的应用程序依赖于递归，则可以使用计数器或状态条件来终止递归循环。请注意，承载公共语言运行时 (CLR) 的应用程序可以指定由 CLR 卸载发生堆栈溢出异常的应用程序域，并让相应的进程继续运行。有关更多信息，请参见ICLRPolicyManager 接口和 承载概述。

Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明： Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：无法通过 try-catch 块捕获引发的 StackOverflowException。因此，该异常将导致该进程立即终止。 Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition 平台说明：无法通过 try-catch 块捕获引发的 StackOverflowException。因此，该异常将导致该进程立即终止。

System System..::.StackOverflowExceptionStackOverflowException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StackOverflowException 成员
System 命名空间
Exception

其他资源

处理和引发异常


StackOverflowException 成员

StackOverflowException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StackOverflowException 类

因包含的嵌套方法调用过多而导致执行堆栈溢出时引发的异常。无法继承此类。 因包含的嵌套方法调用过多而导致执行堆栈溢出时引发的异常。无法继承此类。

StackOverflowException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

StackOverflowException 类
System 命名空间


StackOverflowException 构造函数

StackOverflowException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StackOverflowException 类

初始化 StackOverflowException 类的新实例。

名称 说明
页首

参考

StackOverflowException 类
StackOverflowException 成员
System 命名空间


StackOverflowException 构造函数

StackOverflowException 构造函数
StackOverflowException 类

初始化 StackOverflowException 类的新实例，将新实例的 Message 属性设置为系统提供的描述错误的消息，如“所请求的操作导致堆栈溢出”。此消息将考虑当前系统区域性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public StackOverflowException()
public:
StackOverflowException()
new : unit -> StackOverflowException

下表显示 StackOverflowException 实例的初始属性值。

Property | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StackOverflowException 类
StackOverflowException 成员
StackOverflowException 重载
System 命名空间


StackOverflowException 构造函数 (String)

StackOverflowException 构造函数 (String)
StackOverflowException 类

使用指定错误信息初始化 StackOverflowException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public StackOverflowException(
    string message
)
public:
StackOverflowException(
    String^ message
)
new :
        message:string -> StackOverflowException

参数

message
类型： System String
描述该错误的 String。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该错误的 String。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该错误的 String。message 的内容被设计为人可理解的形式。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 StackOverflowException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StackOverflowException 类
StackOverflowException 成员
StackOverflowException 重载
System 命名空间


StackOverflowException 构造函数 (String, Exception)

StackOverflowException 构造函数 (String, Exception)
StackOverflowException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 StackOverflowException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public StackOverflowException(
    string message,
    Exception innerException
)
public:
StackOverflowException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> StackOverflowException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 StackOverflowException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StackOverflowException 类
StackOverflowException 成员
StackOverflowException 重载
System 命名空间
Exception

其他资源

处理和引发异常


StackOverflowException 方法

StackOverflowException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StackOverflowException 类

StackOverflowException 类型公开以下成员。

名称 说明
页首

参考

StackOverflowException 类
System 命名空间


StackOverflowException 属性

StackOverflowException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StackOverflowException 类

StackOverflowException 类型公开以下成员。

名称 说明
页首

参考

StackOverflowException 类
System 命名空间


StackOverflowException 事件

StackOverflowException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StackOverflowException 类

StackOverflowException 类型公开以下成员。

名称 说明
页首

参考

StackOverflowException 类
System 命名空间


STAThreadAttribute 类

STAThreadAttribute 类
成员

指示应用程序的 COM 线程模型是单线程单元 (STA)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<AttributeUsageAttribute(AttributeTargets.Method)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class STAThreadAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method)]
[ComVisibleAttribute(true)]
public sealed class STAThreadAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method)]
[ComVisibleAttribute(true)]
public ref class STAThreadAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Method)>]
[<ComVisibleAttribute(true)>]
type STAThreadAttribute =
    class
        inherit Attribute
    end

将此特性应用于入口点方法（C# 和 Visual Basic 中的 Main() 方法）。它对其他方法无效。若要设置在代码中启动的线程的单元状态，请在启动线程前使用 Thread..::.SetApartmentState 方法。 将此特性应用于入口点方法（C# 和 Visual Basic 中的 Main() 方法）。它对其他方法无效。若要设置在代码中启动的线程的单元状态，请在启动线程前使用 Thread..::.SetApartmentState 方法。 将此特性应用于入口点方法（C# 和 Visual Basic 中的 Main() 方法）。它对其他方法无效。若要设置在代码中启动的线程的单元状态，请在启动线程前使用 Thread..::.SetApartmentState 方法。

说明 说明

在 .NET Framework 1.0 版和 1.1 版中，在启动线程之前设置 Thread..::.ApartmentState 属性。

COM 线程模型只适用于使用 COM 互操作 的应用程序。如果将此特性应用到不使用 COM 互操作 的应用程序，将没有任何效果。 COM 线程模型只适用于使用 COM 互操作 的应用程序。如果将此特性应用到不使用 COM 互操作 的应用程序，将没有任何效果。

COM 线程模型可设置为单线程单元或多线程单元。如果应用程序线程实际调用了 COM 组件，则仅为 COM 互操作 初始化该线程。如果没有使用 COM 互操作，则不初始化该线程。 COM 线程模型可设置为单线程单元或多线程单元。如果应用程序线程实际调用了 COM 组件，则仅为 COM 互操作 初始化该线程。如果没有使用 COM 互操作，则不初始化该线程。 COM 线程模型可设置为单线程单元或多线程单元。如果应用程序线程实际调用了 COM 组件，则仅为 COM 互操作 初始化该线程。如果没有使用 COM 互操作，则不初始化该线程。

在 .NET Framework 1.0 版和 1.1 版中，在 Main() 上使用此特性（而不是在第一行代码上设置 Thread..::.ApartmentState 属性），以确保在执行任何启动代码之前设置线程模型。

重要说明 重要事项

在 .NET Framework 2.0 版中，如果在启动新线程之前尚未设置它们的单元状态，则这些新线程将初始化为 ApartmentState..::.MTA。默认情况下，主应用程序线程被初始化为 ApartmentState..::.MTA。您无法再通过在第一行代码上设置 Thread..::.ApartmentState 属性来将主应用程序线程设置为 ApartmentState..::.STA。应改用 STAThreadAttribute。 在 .NET Framework 2.0 版中，如果在启动新线程之前尚未设置它们的单元状态，则这些新线程将初始化为 ApartmentState..::.MTA。默认情况下，主应用程序线程被初始化为 ApartmentState..::.MTA。您无法再通过在第一行代码上设置 Thread..::.ApartmentState 属性来将主应用程序线程设置为 ApartmentState..::.STA。应改用 STAThreadAttribute。 在 .NET Framework 2.0 版中，如果在启动新线程之前尚未设置它们的单元状态，则这些新线程将初始化为 ApartmentState..::.MTA。默认情况下，主应用程序线程被初始化为 ApartmentState..::.MTA。您无法再通过在第一行代码上设置 Thread..::.ApartmentState 属性来将主应用程序线程设置为 ApartmentState..::.STA。应改用 STAThreadAttribute。 在 .NET Framework 2.0 版中，如果在启动新线程之前尚未设置它们的单元状态，则这些新线程将初始化为 ApartmentState..::.MTA。默认情况下，主应用程序线程被初始化为 ApartmentState..::.MTA。您无法再通过在第一行代码上设置 Thread..::.ApartmentState 属性来将主应用程序线程设置为 ApartmentState..::.STA。应改用 STAThreadAttribute。

在 .NET Framework 2.0 版中，还可以使用 /CLRTHREADATTRIBUTE（设置 CLR 线程特性） 链接器选项指定 C++ 应用程序的 COM 线程模型。

ASP.NET 应用程序应该将 @ Page 指令的 ASPCompat 特性设置为 true，以强制由 STA 线程池提供页面服务。

System System..::.STAThreadAttributeSTAThreadAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

STAThreadAttribute 成员
System 命名空间
MTAThreadAttribute


STAThreadAttribute 成员

STAThreadAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
STAThreadAttribute 类

指示应用程序的 COM 线程模型是单线程单元 (STA)。

STAThreadAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

STAThreadAttribute 类
System 命名空间


STAThreadAttribute 构造函数

STAThreadAttribute 构造函数
STAThreadAttribute 类

初始化 STAThreadAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public STAThreadAttribute()
public:
STAThreadAttribute()
new : unit -> STAThreadAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

STAThreadAttribute 类
STAThreadAttribute 成员
System 命名空间
MTAThreadAttribute


STAThreadAttribute 方法

STAThreadAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
STAThreadAttribute 类

STAThreadAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

STAThreadAttribute 类
System 命名空间


STAThreadAttribute 属性

STAThreadAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
STAThreadAttribute 类

STAThreadAttribute 类型公开以下成员。

名称 说明
页首

参考

STAThreadAttribute 类
System 命名空间


String 类

String 类
成员

表示文本，即一系列 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class String _
    Implements IComparable, ICloneable, IConvertible, IComparable(Of String),  _
    IEnumerable(Of Char), IEnumerable, IEquatable(Of String)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class String : IComparable,
    ICloneable, IConvertible, IComparable<string>, IEnumerable<char>,
    IEnumerable, IEquatable<string>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class String sealed : IComparable,
    ICloneable, IConvertible, IComparable<String^>, IEnumerable<wchar_t>,
    IEnumerable, IEquatable<String^>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type String =
    class
        interface IComparable
        interface ICloneable
        interface IConvertible
        interface IComparable<string>
        interface IEnumerable<char>
        interface IEnumerable
        interface IEquatable<string>
    end

字符串是 Unicode 字符的有序集合，用于表示文本。String 对象是 System..::.Char 对象的有序集合，用于表示字符串。String 对象的值是该有序集合的内容，并且该值是不可变的。 字符串是 Unicode 字符的有序集合，用于表示文本。String 对象是 System..::.Char 对象的有序集合，用于表示字符串。String 对象的值是该有序集合的内容，并且该值是不可变的。 字符串是 Unicode 字符的有序集合，用于表示文本。String 对象是 System..::.Char 对象的有序集合，用于表示字符串。String 对象的值是该有序集合的内容，并且该值是不可变的。

String 对象称为不可变的（只读），因为一旦创建了该对象，就不能修改该对象的值。看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象。如果需要修改字符串对象的实际内容，请使用 System.Text..::.StringBuilder 类。 String 对象称为不可变的（只读），因为一旦创建了该对象，就不能修改该对象的值。看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象。如果需要修改字符串对象的实际内容，请使用 System.Text..::.StringBuilder 类。 String 对象称为不可变的（只读），因为一旦创建了该对象，就不能修改该对象的值。看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象。如果需要修改字符串对象的实际内容，请使用 System.Text..::.StringBuilder 类。

字符串中的每个 Unicode 字符都是由 Unicode 标量值定义的，Unicode 标量值也称为 Unicode 码位或者 Unicode 字符的序号（数字）值。每个码位都是使用 UTF-16 编码进行编码的，编码的每个元素的数值都用一个 Char 对象表示。 字符串中的每个 Unicode 字符都是由 Unicode 标量值定义的，Unicode 标量值也称为 Unicode 码位或者 Unicode 字符的序号（数字）值。每个码位都是使用 UTF-16 编码进行编码的，编码的每个元素的数值都用一个 Char 对象表示。

一个 Char 对象通常表示一个码位，即：Char 的数值等于该码位。但是，一个码位可能需要多个编码元素。例如，Unicode 辅助码位（代理项对）使用两个 Char 对象来编码。 一个 Char 对象通常表示一个码位，即：Char 的数值等于该码位。但是，一个码位可能需要多个编码元素。例如，Unicode 辅助码位（代理项对）使用两个 Char 对象来编码。 一个 Char 对象通常表示一个码位，即：Char 的数值等于该码位。但是，一个码位可能需要多个编码元素。例如，Unicode 辅助码位（代理项对）使用两个 Char 对象来编码。

Indexes

索引是 Char 对象在 String 中的位置，而不是 Unicode 字符的位置。索引是从零开始、从字符串的起始位置（其索引为零）计起的非负数字。连续的索引值可能并不与连续的 Unicode 字符相对应，这是因为一个 Unicode 字符可能会编码为多个 Char 对象。若要使用每个 Unicode 字符而不是每个 Char 对象，请使用 System.Globalization..::.StringInfo 类。 索引是 Char 对象在 String 中的位置，而不是 Unicode 字符的位置。索引是从零开始、从字符串的起始位置（其索引为零）计起的非负数字。连续的索引值可能并不与连续的 Unicode 字符相对应，这是因为一个 Unicode 字符可能会编码为多个 Char 对象。若要使用每个 Unicode 字符而不是每个 Char 对象，请使用 System.Globalization..::.StringInfo 类。 索引是 Char 对象在 String 中的位置，而不是 Unicode 字符的位置。索引是从零开始、从字符串的起始位置（其索引为零）计起的非负数字。连续的索引值可能并不与连续的 Unicode 字符相对应，这是因为一个 Unicode 字符可能会编码为多个 Char 对象。若要使用每个 Unicode 字符而不是每个 Char 对象，请使用 System.Globalization..::.StringInfo 类。 索引是 Char 对象在 String 中的位置，而不是 Unicode 字符的位置。索引是从零开始、从字符串的起始位置（其索引为零）计起的非负数字。连续的索引值可能并不与连续的 Unicode 字符相对应，这是因为一个 Unicode 字符可能会编码为多个 Char 对象。若要使用每个 Unicode 字符而不是每个 Char 对象，请使用 System.Globalization..::.StringInfo 类。

序号与区分区域性的操作

String 类的成员对 String 对象执行序号运算或语义运算。序号运算是对每个 Char 对象的数值执行的。语义运算则对考虑了特定于区域性的大小写、排序、格式化和语法分析规则的 String 的值执行。语义运算在显式声明的区域性或者隐式当前区域性的上下文中执行。有关当前区域性的更多信息，请参见 CultureInfo..::.CurrentCulture 主题。 String 类的成员对 String 对象执行序号运算或语义运算。序号运算是对每个 Char 对象的数值执行的。语义运算则对考虑了特定于区域性的大小写、排序、格式化和语法分析规则的 String 的值执行。语义运算在显式声明的区域性或者隐式当前区域性的上下文中执行。有关当前区域性的更多信息，请参见 CultureInfo..::.CurrentCulture 主题。 String 类的成员对 String 对象执行序号运算或语义运算。序号运算是对每个 Char 对象的数值执行的。语义运算则对考虑了特定于区域性的大小写、排序、格式化和语法分析规则的 String 的值执行。语义运算在显式声明的区域性或者隐式当前区域性的上下文中执行。有关当前区域性的更多信息，请参见 CultureInfo..::.CurrentCulture 主题。 String 类的成员对 String 对象执行序号运算或语义运算。序号运算是对每个 Char 对象的数值执行的。语义运算则对考虑了特定于区域性的大小写、排序、格式化和语法分析规则的 String 的值执行。语义运算在显式声明的区域性或者隐式当前区域性的上下文中执行。有关当前区域性的更多信息，请参见 CultureInfo..::.CurrentCulture 主题。 String 类的成员对 String 对象执行序号运算或语义运算。序号运算是对每个 Char 对象的数值执行的。语义运算则对考虑了特定于区域性的大小写、排序、格式化和语法分析规则的 String 的值执行。语义运算在显式声明的区域性或者隐式当前区域性的上下文中执行。有关当前区域性的更多信息，请参见 CultureInfo..::.CurrentCulture 主题。

大小写规则决定如何更改 Unicode 字符的大小写，例如，从小写变为大写。

格式化规则决定如何将值转换为它的字符串表示形式，而语法分析规则则确定如何将字符串表示形式转换为值。

排序规则确定 Unicode 字符的字母顺序，以及两个字符串如何互相比较。例如 String..::.Compare(String, String, StringComparison) 根据 StringComparison 参数比较两个字符串。如果其值为 StringComparison..::.CurrentCulture，则方法执行语义的比较，如果其值为 StringComparison..::.Ordinal，则方法执行序号比较。因此，如果当前区域性为美国英语，首次调用 String..::.Compare(String, String, StringComparison) 方法将“a”视为小于“A”，但是第二次调用 String..::.Compare(String, String, StringComparison) 方法将视“a”大于“A”。 排序规则确定 Unicode 字符的字母顺序，以及两个字符串如何互相比较。例如 String..::.Compare(String, String, StringComparison) 根据 StringComparison 参数比较两个字符串。如果其值为 StringComparison..::.CurrentCulture，则方法执行语义的比较，如果其值为 StringComparison..::.Ordinal，则方法执行序号比较。因此，如果当前区域性为美国英语，首次调用 String..::.Compare(String, String, StringComparison) 方法将“a”视为小于“A”，但是第二次调用 String..::.Compare(String, String, StringComparison) 方法将视“a”大于“A”。 排序规则确定 Unicode 字符的字母顺序，以及两个字符串如何互相比较。例如 String..::.Compare(String, String, StringComparison) 根据 StringComparison 参数比较两个字符串。如果其值为 StringComparison..::.CurrentCulture，则方法执行语义的比较，如果其值为 StringComparison..::.Ordinal，则方法执行序号比较。因此，如果当前区域性为美国英语，首次调用 String..::.Compare(String, String, StringComparison) 方法将“a”视为小于“A”，但是第二次调用 String..::.Compare(String, String, StringComparison) 方法将视“a”大于“A”。 排序规则确定 Unicode 字符的字母顺序，以及两个字符串如何互相比较。例如 String..::.Compare(String, String, StringComparison) 根据 StringComparison 参数比较两个字符串。如果其值为 StringComparison..::.CurrentCulture，则方法执行语义的比较，如果其值为 StringComparison..::.Ordinal，则方法执行序号比较。因此，如果当前区域性为美国英语，首次调用 String..::.Compare(String, String, StringComparison) 方法将“a”视为小于“A”，但是第二次调用 String..::.Compare(String, String, StringComparison) 方法将视“a”大于“A”。 排序规则确定 Unicode 字符的字母顺序，以及两个字符串如何互相比较。例如 String..::.Compare(String, String, StringComparison) 根据 StringComparison 参数比较两个字符串。如果其值为 StringComparison..::.CurrentCulture，则方法执行语义的比较，如果其值为 StringComparison..::.Ordinal，则方法执行序号比较。因此，如果当前区域性为美国英语，首次调用 String..::.Compare(String, String, StringComparison) 方法将“a”视为小于“A”，但是第二次调用 String..::.Compare(String, String, StringComparison) 方法将视“a”大于“A”。

.NET Framework 支持单词、字符串和序号排序规则。单词排序执行区分区域性的字符串比较，在比较中，可能为某些非字母数字 Unicode 字符分配了特殊的权重。例如，可能为连字符（“-”）分配了很小的权重，以便“coop”和“co-op”在排序后的列表中可以相邻显示。字符串排序与单词排序相似，唯一区别是字符串排序中不存在特殊情况，所有非字母数字符号均排在所有字母数字 Unicode 字符之前。 .NET Framework 支持单词、字符串和序号排序规则。单词排序执行区分区域性的字符串比较，在比较中，可能为某些非字母数字 Unicode 字符分配了特殊的权重。例如，可能为连字符（“-”）分配了很小的权重，以便“coop”和“co-op”在排序后的列表中可以相邻显示。字符串排序与单词排序相似，唯一区别是字符串排序中不存在特殊情况，所有非字母数字符号均排在所有字母数字 Unicode 字符之前。 .NET Framework 支持单词、字符串和序号排序规则。单词排序执行区分区域性的字符串比较，在比较中，可能为某些非字母数字 Unicode 字符分配了特殊的权重。例如，可能为连字符（“-”）分配了很小的权重，以便“coop”和“co-op”在排序后的列表中可以相邻显示。字符串排序与单词排序相似，唯一区别是字符串排序中不存在特殊情况，所有非字母数字符号均排在所有字母数字 Unicode 字符之前。 .NET Framework 支持单词、字符串和序号排序规则。单词排序执行区分区域性的字符串比较，在比较中，可能为某些非字母数字 Unicode 字符分配了特殊的权重。例如，可能为连字符（“-”）分配了很小的权重，以便“coop”和“co-op”在排序后的列表中可以相邻显示。字符串排序与单词排序相似，唯一区别是字符串排序中不存在特殊情况，所有非字母数字符号均排在所有字母数字 Unicode 字符之前。

区分区域性的比较是显式或隐式使用 CultureInfo 对象的任何比较，包括由 CultureInfo..::.InvariantCulture 属性指定的固定区域性。当前隐式区域性由 Thread..::.CurrentCulture 属性指定。 区分区域性的比较是显式或隐式使用 CultureInfo 对象的任何比较，包括由 CultureInfo..::.InvariantCulture 属性指定的固定区域性。当前隐式区域性由 Thread..::.CurrentCulture 属性指定。

序号排序基于字符串中每个 Char 对象的数值对字符串进行比较。序号比较自动区分大小写，因为字符的小写和大写版本有着不同的码位。但是，如果大小写在应用程序中并不重要，则可以指定忽略大小写的序号比较。这相当于使用固定区域性将字符串转换为大写，然后对结果执行序号比较。 序号排序基于字符串中每个 Char 对象的数值对字符串进行比较。序号比较自动区分大小写，因为字符的小写和大写版本有着不同的码位。但是，如果大小写在应用程序中并不重要，则可以指定忽略大小写的序号比较。这相当于使用固定区域性将字符串转换为大写，然后对结果执行序号比较。 序号排序基于字符串中每个 Char 对象的数值对字符串进行比较。序号比较自动区分大小写，因为字符的小写和大写版本有着不同的码位。但是，如果大小写在应用程序中并不重要，则可以指定忽略大小写的序号比较。这相当于使用固定区域性将字符串转换为大写，然后对结果执行序号比较。 序号排序基于字符串中每个 Char 对象的数值对字符串进行比较。序号比较自动区分大小写，因为字符的小写和大写版本有着不同的码位。但是，如果大小写在应用程序中并不重要，则可以指定忽略大小写的序号比较。这相当于使用固定区域性将字符串转换为大写，然后对结果执行序号比较。

有关单词、字符串和序号排序规则的更多信息，请参见 System.Globalization..::.CompareOptions 主题。有关何时使用每个规则的建议，请参阅在 .NET Framework 中使用字符串的最佳做法 有关单词、字符串和序号排序规则的更多信息，请参见 System.Globalization..::.CompareOptions 主题。有关何时使用每个规则的建议，请参阅在 .NET Framework 中使用字符串的最佳做法

区分区域性的比较通常适用于排序，而序号比较则不适合。序号比较通常适用于确定两个字符串是否相等（即，确定标识），而区分区域性的比较则不适用。 区分区域性的比较通常适用于排序，而序号比较则不适合。序号比较通常适用于确定两个字符串是否相等（即，确定标识），而区分区域性的比较则不适用。

比较和搜索方法的“备注”指定方法是区分大小写、区分区域性还是两者区分。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。 比较和搜索方法的“备注”指定方法是区分大小写、区分区域性还是两者区分。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。

正常化

某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。通常用序号比较来评估一对规范化的字符串。 某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。通常用序号比较来评估一对规范化的字符串。 某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。通常用序号比较来评估一对规范化的字符串。 某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。通常用序号比较来评估一对规范化的字符串。 某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。通常用序号比较来评估一对规范化的字符串。

安全注意事项

如果应用程序进行有关符号标识符（如文件名或命名管道）或持久数据（如 XML 文件中基于文本的数据）的安全决策，则该操作应该使用序号比较而不是区分区域性的比较。这是因为根据起作用的区域性的不同，区分区域性的比较可产生不同的结果，而序号比较则仅依赖于所比较字符的二进制值。 如果应用程序进行有关符号标识符（如文件名或命名管道）或持久数据（如 XML 文件中基于文本的数据）的安全决策，则该操作应该使用序号比较而不是区分区域性的比较。这是因为根据起作用的区域性的不同，区分区域性的比较可产生不同的结果，而序号比较则仅依赖于所比较字符的二进制值。

功能

String 类提供的成员执行以下操作：比较 String 对象；返回 String 对象内字符或字符串的索引；复制 String 对象的值；分隔字符串或组合字符串；修改字符串的值；将数字、日期和时间或枚举值的格式设置为字符串；对字符串进行规范化。

  • 使用 Compare、CompareOrdinal、CompareTo、Equals、EndsWith 和 StartsWith 方法进行比较。

  • 使用 IndexOf、IndexOfAny、LastIndexOf 和 LastIndexOfAny 方法可获取字符串中子字符串或 Unicode 字符的索引。

  • 使用 Copy 和 CopyTo 可将字符串或子字符串复制到另一个字符串或 Char 类型的数组。

  • 使用 Substring 和 Split 方法可通过原始字符串的组成部分创建一个或多个新字符串；使用 Concat 和 Join 方法可通过一个或多个子字符串创建新字符串。

  • 使用 Insert、Replace、Remove、PadLeft、PadRight、Trim、TrimEnd 和 TrimStart 可修改字符串的全部或部分。

  • 使用 ToLower、ToLowerInvariant、ToUpper 和 ToUpperInvariant 方法可更改字符串中 Unicode 字符的大小写。

  • 使用 Format，可将字符串中的一个或多个格式项占位符替换为一个或多个数字、日期和时间或枚举值的文本表示形式。

  • 使用 Length 属性可获取字符串中 Char 对象的数量；使用 Chars 属性可访问字符串中实际的 Char 对象。

  • 使用 IsNormalized 方法可测试某个字符串是否已规范化为特定的范式。使用 Normalize 方法可创建规范化为特定范式的字符串。 使用 IsNormalized 方法可测试某个字符串是否已规范化为特定的范式。使用 Normalize 方法可创建规范化为特定范式的字符串。

字符串和嵌入的 Null 值

在 .NET Framework 中，String 对象可以包含嵌入的 null 值，这些值将算作字符串长度的一部分。但是，在某些语言（例如 C 和 C++）中，null 字符指示字符串的结尾，将不被视为字符串的一部分，并且将不算作字符串长度的一部分。这意味着当应用于 String 对象时，C 和 C++ 程序员或使用 C 或 C++ 编写的库对字符串作出的下列常规假设不一定有效： 在 .NET Framework 中，String 对象可以包含嵌入的 null 值，这些值将算作字符串长度的一部分。但是，在某些语言（例如 C 和 C++）中，null 字符指示字符串的结尾，将不被视为字符串的一部分，并且将不算作字符串长度的一部分。这意味着当应用于 String 对象时，C 和 C++ 程序员或使用 C 或 C++ 编写的库对字符串作出的下列常规假设不一定有效： 在 .NET Framework 中，String 对象可以包含嵌入的 null 值，这些值将算作字符串长度的一部分。但是，在某些语言（例如 C 和 C++）中，null 字符指示字符串的结尾，将不被视为字符串的一部分，并且将不算作字符串长度的一部分。这意味着当应用于 String 对象时，C 和 C++ 程序员或使用 C 或 C++ 编写的库对字符串作出的下列常规假设不一定有效：

  • strlen 或 wcslen 函数返回的值不一定等于 String..::.Length。

  • 由 strcpy_s 或 wcscpy_s 函数创建的字符串不一定与通过 String..::.Copy 方法创建的字符串相同。

应确保对 String 对象进行实例化的本机 C 和 C++ 代码以及通过平台调用传递 String 对象的代码不假设使用嵌入的 null 值标记字符串的结尾。

在排序（或比较）字符串时以及搜索字符串时，也将以不同的方式处理嵌入的 null 字符。在两个字符串之间执行区分区域性的比较时忽略 Null 字符，包括使用固定区域性的比较。仅在进行序号或不区分大小写的序号比较时考虑它们。另一方面，在使用 Contains、StartsWith 和 IndexOf 等方法搜索字符串时，始终考虑嵌入的 NULL 字符串。 在排序（或比较）字符串时以及搜索字符串时，也将以不同的方式处理嵌入的 null 字符。在两个字符串之间执行区分区域性的比较时忽略 Null 字符，包括使用固定区域性的比较。仅在进行序号或不区分大小写的序号比较时考虑它们。另一方面，在使用 Contains、StartsWith 和 IndexOf 等方法搜索字符串时，始终考虑嵌入的 NULL 字符串。 在排序（或比较）字符串时以及搜索字符串时，也将以不同的方式处理嵌入的 null 字符。在两个字符串之间执行区分区域性的比较时忽略 Null 字符，包括使用固定区域性的比较。仅在进行序号或不区分大小写的序号比较时考虑它们。另一方面，在使用 Contains、StartsWith 和 IndexOf 等方法搜索字符串时，始终考虑嵌入的 NULL 字符串。 在排序（或比较）字符串时以及搜索字符串时，也将以不同的方式处理嵌入的 null 字符。在两个字符串之间执行区分区域性的比较时忽略 Null 字符，包括使用固定区域性的比较。仅在进行序号或不区分大小写的序号比较时考虑它们。另一方面，在使用 Contains、StartsWith 和 IndexOf 等方法搜索字符串时，始终考虑嵌入的 NULL 字符串。

System System..::.StringString

此类型是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 成员
System 命名空间
IComparable
ICloneable
IConvertible
IEnumerable
System.Text StringBuilder
CultureInfo

其他资源

格式化类型
在 .NET Framework 中使用字符串的最佳做法


String 成员

String 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

表示文本，即一系列 Unicode 字符。

String 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

String 类
System 命名空间


String 构造函数

String 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

初始化 String 类的新实例。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String 构造函数 (Char*)

String 构造函数 (Char*)
String 类

将 String 类的新实例初始化为由指向 Unicode 字符数组的指定指针指示的值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用或返回不安全类型的 API。
[CLSCompliantAttribute(false)]
public String(
    char* value
)
[CLSCompliantAttribute(false)]
public:
String(
    wchar_t* value
)
[<CLSCompliantAttribute(false)>]
new :
        value:nativeptr<char> -> String

参数

value
类型： System Char*
指向以 null 终止的 Unicode 字符数组的指针。
异常 | 条件
ArgumentOutOfRangeException | 当前进程并不是对所有编址字符都有读取权限。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | value 指定了包含无效 Unicode 字符的数组，或者 value 指定了小于 64000 的地址。

如果 value 为 null 指针，则初始化 Empty 实例。

此构造函数复制位于指定指针处的 Unicode 字符序列，直到到达 null 字符（十六进制的 0x00）为止。

如果指定的数组并非 null 终止，此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。 如果指定的数组并非 null 终止，此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。

在 C# 中，仅在不安全代码的上下文中定义此构造函数。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
String 重载
System 命名空间
Char


String 构造函数 ( array<Char >[]()[])

String 构造函数 (
array<
Char
>
[]
()
[]
)
String 类

将 String 类的新实例初始化为由 Unicode 字符数组指示的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As Char() _
)
public String(
    char[] value
)
public:
String(
    array<wchar_t>^ value
)
new :
        value:char[] -> String

参数

value
类型：
array<
System Char
>
[]
()
[]

Unicode 字符的数组。

如果值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者不包含任何元素，则初始化 Empty 实例。

下面这个简单的示例演示如何使用该构造函数创建 String 类的实例。

' Unicode Mathematical operators
Dim charArr1() As Char = {ChrW(&H2200), ChrW(&H2202), _
                          ChrW(&H200F), ChrW(&H2205)}
Dim szMathSymbols As New String(charArr1)

' Unicode Letterlike Symbols
Dim charArr2() As Char = {ChrW(&H2111), ChrW(&H2118), _
                          ChrW(&H2122), ChrW(&H2126)}
Dim szLetterLike As New String(charArr2)

' Compare Strings - the result is false
Console.WriteLine("The strings are equal? " & _
        CStr(szMathSymbols.Equals(szLetterLike)))

// Unicode Mathematical operators
char [] charArr1 = {'\u2200','\u2202','\u200F','\u2205'};
String szMathSymbols = new String(charArr1);

// Unicode Letterlike Symbols
char [] charArr2 = {'\u2111','\u2118','\u2122','\u2126'};
String szLetterLike = new String (charArr2);

// Compare Strings - the result is false
Console.WriteLine("The Strings are equal? " +
    (String.Compare(szMathSymbols, szLetterLike)==0?"true":"false") );

// Unicode Mathematical operators
wchar_t charArray1[4] = {L'\x2200',L'\x2202',L'\x200F',L'\x2205'};
wchar_t * lptstr1 =  &charArray1[ 0 ];
String^ wszMathSymbols = gcnew String( lptstr1 );

// Unicode Letterlike Symbols
wchar_t charArray2[4] = {L'\x2111',L'\x2118',L'\x2122',L'\x2126'};
wchar_t * lptstr2 =  &charArray2[ 0 ];
String^ wszLetterLike = gcnew String( lptstr2 );

// Compare Strings - the result is false
Console::WriteLine( String::Concat( L"The Strings are equal? ", (0 == String::Compare( wszLetterLike, wszMathSymbols ) ? (String^)"TRUE" : "FALSE") ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
String 重载
System 命名空间
Char


String 构造函数 (SByte*)

String 构造函数 (SByte*)
String 类

将 String 类的新实例初始化为由指向 8 位带符号整数数组的指针指示的值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用或返回不安全类型的 API。
[CLSCompliantAttribute(false)]
public String(
    sbyte* value
)
[CLSCompliantAttribute(false)]
public:
String(
    signed char* value
)
[<CLSCompliantAttribute(false)>]
new :
        value:nativeptr<sbyte> -> String

参数

value
类型： System SByte*
一个指针，指向以 null 结尾的 8 位带符号整数数组。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 如果 value 是用 ANSI 编码的，则不能使用 value 初始化 String 的新实例。
ArgumentOutOfRangeException | 要初始化的新字符串的长度过大，无法分配，该长度由 value 的 null 终止字符决定。
AccessViolationException | value 指定的地址无效。

假定 value 参数指向的数组表示使用默认 ANSI 代码页（即由 Encoding..::.Default 指定的编码方法）进行编码的字符串。

说明 说明

由于默认 ANSI 代码页与系统相关，因此在不同的系统中，此构造函数从相同的带符号的字节数组创建的字符串可能会有所不同。建议不使用带符号的字节数组实例化字符串，而是改为使用将 Char（String..::.String(array<Char>[]()[]) 和 String..::.String(array<Char>[]()[], Int32, Int32) 构造函数）数组或指向 Char（String..::.String(Char*) 和 String..::.String(Char*, Int32, Int32) 构造函数）数组的指针作为参数的任何重载。 由于默认 ANSI 代码页与系统相关，因此在不同的系统中，此构造函数从相同的带符号的字节数组创建的字符串可能会有所不同。建议不使用带符号的字节数组实例化字符串，而是改为使用将 Char（String..::.String(array<Char>[]()[]) 和 String..::.String(array<Char>[]()[], Int32, Int32) 构造函数）数组或指向 Char（String..::.String(Char*) 和 String..::.String(Char*, Int32, Int32) 构造函数）数组的指针作为参数的任何重载。

此构造函数处理 value 中的字符，从指针指定的位置开始，直到遇到 null 字符（十六进制 0x00）。

如果指定的数组并非 null 终止，此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。 如果指定的数组并非 null 终止，此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。

在 C# 中，仅在不安全代码的上下文中定义此构造函数。

下面这个简单的示例演示如何使用该构造函数创建 String 类的实例。

unsafe
{
    // Null terminated ASCII characters in an sbyte array
    String szAsciiUpper = null;
    sbyte[] sbArr1 = new sbyte[] { 0x41, 0x42, 0x43, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiUpper = sbArr1)
    {
        szAsciiUpper = new String(pAsciiUpper);
    }
    String szAsciiLower = null;
    sbyte[] sbArr2 = { 0x61, 0x62, 0x63, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiLower = sbArr2)
    {
        szAsciiLower = new String(pAsciiLower, 0, sbArr2.Length);
    }
    // Prints "ABC abc"
    Console.WriteLine(szAsciiUpper + " " + szAsciiLower);

    // Compare Strings - the result is true
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper.ToUpper(), szAsciiLower.ToUpper())==0?"true":"false") );

    // This is the effective equivalent of another Compare method, which ignores case
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper, szAsciiLower, true)==0?"true":"false") );
}

// Null terminated ASCII characters in a simple char array
char charArray3[4] = {0x41,0x42,0x43,0x00};
char * pstr3 =  &charArray3[ 0 ];
String^ szAsciiUpper = gcnew String( pstr3 );
char charArray4[4] = {0x61,0x62,0x63,0x00};
char * pstr4 =  &charArray4[ 0 ];
String^ szAsciiLower = gcnew String( pstr4,0,sizeof(charArray4) );

// Prints "ABC abc"
Console::WriteLine( String::Concat( szAsciiUpper,  " ", szAsciiLower ) );

// Compare Strings - the result is true
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper->ToUpper(), szAsciiLower->ToUpper() ) ? (String^)"TRUE" :  "FALSE") ) );

// This is the effective equivalent of another Compare method, which ignores case
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper, szAsciiLower, true ) ? (String^)"TRUE" :  "FALSE") ) );
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
String 重载
System 命名空间
SByte


String 构造函数 (Char, Int32)

String 构造函数 (Char, Int32)
String 类

将 String 类的新实例初始化为由重复指定次数的指定 Unicode 字符指示的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    c As Char, _
    count As Integer _
)
public String(
    char c,
    int count
)
public:
String(
    wchar_t c,
    int count
)
new :
        c:char *
        count:int -> String

参数

c
类型： System Char
一个 Unicode 字符。
count
类型： System Int32
c 出现的次数。
异常 | 条件
ArgumentOutOfRangeException | count 小于零。

如果 count 为零，则初始化 Empty 实例。

下面这个简单的示例演示如何使用该构造函数创建 String 类的实例。

' Create a Unicode String with 5 Greek Alpha characters
Dim szGreekAlpha As New String(ChrW(&H0319), 5)
' Create a Unicode String with a Greek Omega character
Dim szGreekOmega As New String(New Char() {ChrW(&H03A9), ChrW(&H03A9), _
                                           ChrW(&H03A9)}, 2, 1)

Dim szGreekLetters As String = String.Concat(szGreekOmega, szGreekAlpha, _
                                             szGreekOmega.Clone())

' Examine the result
Console.WriteLine(szGreekLetters)

' The first index of Alpha
Dim iAlpha As Integer = szGreekLetters.IndexOf(ChrW(&H0319))
' The last index of Omega
Dim iomega As Integer = szGreekLetters.LastIndexOf(ChrW(&H03A9))

Console.WriteLine("The Greek letter Alpha first appears at index {0}.", _
                  ialpha)
Console.WriteLIne("The Greek letter Omega last appears at index {0}.", _
                  iomega)

// Create a Unicode String with 5 Greek Alpha characters
String szGreekAlpha = new String('\u0319',5);
// Create a Unicode String with a Greek Omega character
String szGreekOmega = new String(new char [] {'\u03A9','\u03A9','\u03A9'},2,1);

String szGreekLetters = String.Concat(szGreekOmega, szGreekAlpha, szGreekOmega.Clone());

// Examine the result
Console.WriteLine(szGreekLetters);

// The first index of Alpha
int ialpha = szGreekLetters.IndexOf('\u0319');
// The last index of Omega
int iomega = szGreekLetters.LastIndexOf('\u03A9');

Console.WriteLine("The Greek letter Alpha first appears at index " + ialpha +
    " and Omega last appears at index " + iomega + " in this String.");

// Create a Unicode String with 5 Greek Alpha characters
String^ szGreekAlpha = gcnew String( L'\x0319',5 );

// Create a Unicode String with a Greek Omega character
wchar_t charArray5[3] = {L'\x03A9',L'\x03A9',L'\x03A9'};
String^ szGreekOmega = gcnew String( charArray5,2,1 );
String^ szGreekLetters = String::Concat( szGreekOmega, szGreekAlpha, szGreekOmega->Clone() );

// Examine the result
Console::WriteLine( szGreekLetters );

// The first index of Alpha
int ialpha = szGreekLetters->IndexOf( L'\x0319' );

// The last index of Omega
int iomega = szGreekLetters->LastIndexOf( L'\x03A9' );
Console::WriteLine( String::Concat(  "The Greek letter Alpha first appears at index ", Convert::ToString( ialpha ) ) );
Console::WriteLine( String::Concat(  " and Omega last appears at index ", Convert::ToString( iomega ),  " in this String." ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
String 重载
System 命名空间
Char
Int32


String 构造函数 (Char*, Int32, Int32)

String 构造函数 (Char*, Int32, Int32)
String 类

将 String 类的新实例初始化为由指向 Unicode 字符数组的指定指针、该数组内的起始字符位置和一个长度指示的值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用或返回不安全类型的 API。
[CLSCompliantAttribute(false)]
public String(
    char* value,
    int startIndex,
    int length
)
[CLSCompliantAttribute(false)]
public:
String(
    wchar_t* value,
    int startIndex,
    int length
)
[<CLSCompliantAttribute(false)>]
new :
        value:nativeptr<char> *
        startIndex:int *
        length:int -> String

参数

value
类型： System Char*
指向 Unicode 字符数组的指针。
startIndex
类型： System Int32
value 内的起始位置。
length
类型： System Int32
要使用的 value 内的字符数。
异常 | 条件
ArgumentOutOfRangeException | startIndex 或 length 小于零，value + startIndex 引起指针溢出，或者当前进程并不是对所有编址字符都有读取权限。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | value 指定了包含无效 Unicode 字符的数组，或者 value + startIndex 指定了小于 64000 的地址。

如果 length 为零，则初始化 Empty 实例。

此构造函数从 value 中复制从 startIndex 至 (startIndex + length - 1) 范围内的 Unicode 字符。

如果指定范围超出为字符序列分配的内存，则此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。 如果指定范围超出为字符序列分配的内存，则此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。

在 C# 中，仅在不安全代码的上下文中定义此构造函数。

说明 说明

在使用 Intel Itanium 处理器的系统中调用此构造函数可能会引发 DataMisalignedException。如果出现这种情况，请调用 String..::.String(array<Char>[]()[], Int32, Int32) 构造函数而不是此构造函数。 在使用 Intel Itanium 处理器的系统中调用此构造函数可能会引发 DataMisalignedException。如果出现这种情况，请调用 String..::.String(array<Char>[]()[], Int32, Int32) 构造函数而不是此构造函数。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
String 重载
System 命名空间
Char
Int32


String 构造函数 ( array<Char >[]()[], Int32, Int32)

String 构造函数 (
array<
Char
>
[]
()
[]
, Int32, Int32)
String 类

将 String 类的新实例初始化为由 Unicode 字符数组、该数组内的起始字符位置和一个长度指示的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As Char(), _
    startIndex As Integer, _
    length As Integer _
)
public String(
    char[] value,
    int startIndex,
    int length
)
public:
String(
    array<wchar_t>^ value,
    int startIndex,
    int length
)
new :
        value:char[] *
        startIndex:int *
        length:int -> String

参数

value
类型：
array<
System Char
>
[]
()
[]

Unicode 字符的数组。
startIndex
类型： System Int32
value 内的起始位置。
length
类型： System Int32
要使用的 value 内的字符数。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 或 length 小于零。 - 或 - startIndex 和 length 之和大于 value 中的元素数。

如果 length 为零，则初始化 Empty 实例。

此构造函数从 value 中复制从 startIndex 至 (startIndex + length - 1) 范围内的 Unicode 字符。

性能注意事项

分析或解码文本流的应用程序通常使用 String 构造函数或 StringBuilder..::.Append(array<Char>[]()[], Int32, Int32) 方法将字符序列转换为字符串。在应用程序反复遇到相同的字符序列的情况下，如果应用程序重复创建具有相同值的新字符串，而不是创建并重复使用一个字符串，则会浪费内存。 分析或解码文本流的应用程序通常使用 String 构造函数或 StringBuilder..::.Append(array<Char>[]()[], Int32, Int32) 方法将字符序列转换为字符串。在应用程序反复遇到相同的字符序列的情况下，如果应用程序重复创建具有相同值的新字符串，而不是创建并重复使用一个字符串，则会浪费内存。

如果应用程序重复遇到相同的字符序列，但您无法预测究竟是哪一个字符序列，则可以考虑使用查找表，而不是使用 String 构造函数新建 String 对象。例如，假定应用程序从一个包含 XML 标记和特性的文件读取并分析字符流。当您分析字符流时，会重复地遇到某些标记，这些标记是具有符号含义的字符序列。在 XML 流中，等效于字符串“0”、“1”、“true”和“false”的标记可能会频繁出现。 如果应用程序重复遇到相同的字符序列，但您无法预测究竟是哪一个字符序列，则可以考虑使用查找表，而不是使用 String 构造函数新建 String 对象。例如，假定应用程序从一个包含 XML 标记和特性的文件读取并分析字符流。当您分析字符流时，会重复地遇到某些标记，这些标记是具有符号含义的字符序列。在 XML 流中，等效于字符串“0”、“1”、“true”和“false”的标记可能会频繁出现。 如果应用程序重复遇到相同的字符序列，但您无法预测究竟是哪一个字符序列，则可以考虑使用查找表，而不是使用 String 构造函数新建 String 对象。例如，假定应用程序从一个包含 XML 标记和特性的文件读取并分析字符流。当您分析字符流时，会重复地遇到某些标记，这些标记是具有符号含义的字符序列。在 XML 流中，等效于字符串“0”、“1”、“true”和“false”的标记可能会频繁出现。 如果应用程序重复遇到相同的字符序列，但您无法预测究竟是哪一个字符序列，则可以考虑使用查找表，而不是使用 String 构造函数新建 String 对象。例如，假定应用程序从一个包含 XML 标记和特性的文件读取并分析字符流。当您分析字符流时，会重复地遇到某些标记，这些标记是具有符号含义的字符序列。在 XML 流中，等效于字符串“0”、“1”、“true”和“false”的标记可能会频繁出现。

可创建一个 NameTable 对象以保存经常出现的字符串，而不是将应用程序遇到的每个标记都转换为新字符串。NameTable 对象提高了性能，因为它无需分配临时内存即可检索存储的字符串。 可创建一个 NameTable 对象以保存经常出现的字符串，而不是将应用程序遇到的每个标记都转换为新字符串。NameTable 对象提高了性能，因为它无需分配临时内存即可检索存储的字符串。

当应用程序遇到标记时，请使用 NameTable..::.Get(array<Char>[]()[], Int32, Int32) 方法尝试从该表中检索此标记。如果该标记存在，则此方法返回对应的字符串。如果该标记不存在，则使用 NameTable..::.Add(array<Char>[]()[], Int32, Int32) 方法将该标记插入表中。在插入标记之后，该方法返回对应的字符串。无论何种情况，正确的字符串都会返回到应用程序。 当应用程序遇到标记时，请使用 NameTable..::.Get(array<Char>[]()[], Int32, Int32) 方法尝试从该表中检索此标记。如果该标记存在，则此方法返回对应的字符串。如果该标记不存在，则使用 NameTable..::.Add(array<Char>[]()[], Int32, Int32) 方法将该标记插入表中。在插入标记之后，该方法返回对应的字符串。无论何种情况，正确的字符串都会返回到应用程序。 当应用程序遇到标记时，请使用 NameTable..::.Get(array<Char>[]()[], Int32, Int32) 方法尝试从该表中检索此标记。如果该标记存在，则此方法返回对应的字符串。如果该标记不存在，则使用 NameTable..::.Add(array<Char>[]()[], Int32, Int32) 方法将该标记插入表中。在插入标记之后，该方法返回对应的字符串。无论何种情况，正确的字符串都会返回到应用程序。 当应用程序遇到标记时，请使用 NameTable..::.Get(array<Char>[]()[], Int32, Int32) 方法尝试从该表中检索此标记。如果该标记存在，则此方法返回对应的字符串。如果该标记不存在，则使用 NameTable..::.Add(array<Char>[]()[], Int32, Int32) 方法将该标记插入表中。在插入标记之后，该方法返回对应的字符串。无论何种情况，正确的字符串都会返回到应用程序。 当应用程序遇到标记时，请使用 NameTable..::.Get(array<Char>[]()[], Int32, Int32) 方法尝试从该表中检索此标记。如果该标记存在，则此方法返回对应的字符串。如果该标记不存在，则使用 NameTable..::.Add(array<Char>[]()[], Int32, Int32) 方法将该标记插入表中。在插入标记之后，该方法返回对应的字符串。无论何种情况，正确的字符串都会返回到应用程序。

下面这个简单的示例演示如何使用该构造函数创建 String 类的实例。

' Create a Unicode String with 5 Greek Alpha characters
Dim szGreekAlpha As New String(ChrW(&H0319), 5)
' Create a Unicode String with a Greek Omega character
Dim szGreekOmega As New String(New Char() {ChrW(&H03A9), ChrW(&H03A9), _
                                           ChrW(&H03A9)}, 2, 1)

Dim szGreekLetters As String = String.Concat(szGreekOmega, szGreekAlpha, _
                                             szGreekOmega.Clone())

' Examine the result
Console.WriteLine(szGreekLetters)

' The first index of Alpha
Dim iAlpha As Integer = szGreekLetters.IndexOf(ChrW(&H0319))
' The last index of Omega
Dim iomega As Integer = szGreekLetters.LastIndexOf(ChrW(&H03A9))

Console.WriteLine("The Greek letter Alpha first appears at index {0}.", _
                  ialpha)
Console.WriteLIne("The Greek letter Omega last appears at index {0}.", _
                  iomega)

// Create a Unicode String with 5 Greek Alpha characters
String szGreekAlpha = new String('\u0319',5);
// Create a Unicode String with a Greek Omega character
String szGreekOmega = new String(new char [] {'\u03A9','\u03A9','\u03A9'},2,1);

String szGreekLetters = String.Concat(szGreekOmega, szGreekAlpha, szGreekOmega.Clone());

// Examine the result
Console.WriteLine(szGreekLetters);

// The first index of Alpha
int ialpha = szGreekLetters.IndexOf('\u0319');
// The last index of Omega
int iomega = szGreekLetters.LastIndexOf('\u03A9');

Console.WriteLine("The Greek letter Alpha first appears at index " + ialpha +
    " and Omega last appears at index " + iomega + " in this String.");

// Create a Unicode String with 5 Greek Alpha characters
String^ szGreekAlpha = gcnew String( L'\x0319',5 );

// Create a Unicode String with a Greek Omega character
wchar_t charArray5[3] = {L'\x03A9',L'\x03A9',L'\x03A9'};
String^ szGreekOmega = gcnew String( charArray5,2,1 );
String^ szGreekLetters = String::Concat( szGreekOmega, szGreekAlpha, szGreekOmega->Clone() );

// Examine the result
Console::WriteLine( szGreekLetters );

// The first index of Alpha
int ialpha = szGreekLetters->IndexOf( L'\x0319' );

// The last index of Omega
int iomega = szGreekLetters->LastIndexOf( L'\x03A9' );
Console::WriteLine( String::Concat(  "The Greek letter Alpha first appears at index ", Convert::ToString( ialpha ) ) );
Console::WriteLine( String::Concat(  " and Omega last appears at index ", Convert::ToString( iomega ),  " in this String." ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
String 重载
System 命名空间
Char
Int32


String 构造函数 (SByte*, Int32, Int32)

String 构造函数 (SByte*, Int32, Int32)
String 类

将 String 类的新实例初始化为由指向 8 位带符号整数数组的指定指针、该数组内的起始字符位置和一个长度指示的值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用或返回不安全类型的 API。
[CLSCompliantAttribute(false)]
public String(
    sbyte* value,
    int startIndex,
    int length
)
[CLSCompliantAttribute(false)]
public:
String(
    signed char* value,
    int startIndex,
    int length
)
[<CLSCompliantAttribute(false)>]
new :
        value:nativeptr<sbyte> *
        startIndex:int *
        length:int -> String

参数

value
类型： System SByte*
指向 8 位带符号整数数组的指针。
startIndex
类型： System Int32
value 内的起始位置。
length
类型： System Int32
要使用的 value 内的字符数。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 或 length 小于零。 - 或 - 由 value + startIndex 指定的地址相对于当前平台来说太大；即，地址计算溢出。 - 或 - 要初始化的新字符串的长度太大，无法分配。
ArgumentException | 由 value + startIndex 指定的地址小于 64K。 - 或 - 如果 value 是用 ANSI 编码的，则不能使用 value 初始化 String 的新实例。
AccessViolationException | value、startIndex 和 length 共同指定的地址无效。

假定 value 参数指向的数组表示使用默认 ANSI 代码页（即由 Encoding..::.Default 指定的编码方法）进行编码的字符串。

说明 说明

由于默认 ANSI 代码页与系统相关，因此在不同的系统中，此构造函数从相同的带符号的字节数组创建的字符串可能会有所不同。建议不使用带符号的字节数组实例化字符串，而是改为使用将 Char（String..::.String(array<Char>[]()[]) 和 String..::.String(array<Char>[]()[], Int32, Int32) 构造函数）数组或指向 Char（String..::.String(Char*) 和 String..::.String(Char*, Int32, Int32) 构造函数）数组的指针作为参数的任何重载。 由于默认 ANSI 代码页与系统相关，因此在不同的系统中，此构造函数从相同的带符号的字节数组创建的字符串可能会有所不同。建议不使用带符号的字节数组实例化字符串，而是改为使用将 Char（String..::.String(array<Char>[]()[]) 和 String..::.String(array<Char>[]()[], Int32, Int32) 构造函数）数组或指向 Char（String..::.String(Char*) 和 String..::.String(Char*, Int32, Int32) 构造函数）数组的指针作为参数的任何重载。

如果 length 为零，则新实例初始化为空字符串 ("")。

此构造函数处理 value 中从 startIndex 至 (startIndex + length - 1) 范围内的字符。

如果指定范围超出为字符序列分配的内存，则此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。 如果指定范围超出为字符序列分配的内存，则此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。

在 C# 中，仅在不安全代码的上下文中定义此构造函数。

下面这个简单的示例演示如何使用该构造函数创建 String 类的实例。

unsafe
{
    // Null terminated ASCII characters in an sbyte array
    String szAsciiUpper = null;
    sbyte[] sbArr1 = new sbyte[] { 0x41, 0x42, 0x43, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiUpper = sbArr1)
    {
        szAsciiUpper = new String(pAsciiUpper);
    }
    String szAsciiLower = null;
    sbyte[] sbArr2 = { 0x61, 0x62, 0x63, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiLower = sbArr2)
    {
        szAsciiLower = new String(pAsciiLower, 0, sbArr2.Length);
    }
    // Prints "ABC abc"
    Console.WriteLine(szAsciiUpper + " " + szAsciiLower);

    // Compare Strings - the result is true
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper.ToUpper(), szAsciiLower.ToUpper())==0?"true":"false") );

    // This is the effective equivalent of another Compare method, which ignores case
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper, szAsciiLower, true)==0?"true":"false") );
}

// Null terminated ASCII characters in a simple char array
char charArray3[4] = {0x41,0x42,0x43,0x00};
char * pstr3 =  &charArray3[ 0 ];
String^ szAsciiUpper = gcnew String( pstr3 );
char charArray4[4] = {0x61,0x62,0x63,0x00};
char * pstr4 =  &charArray4[ 0 ];
String^ szAsciiLower = gcnew String( pstr4,0,sizeof(charArray4) );

// Prints "ABC abc"
Console::WriteLine( String::Concat( szAsciiUpper,  " ", szAsciiLower ) );

// Compare Strings - the result is true
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper->ToUpper(), szAsciiLower->ToUpper() ) ? (String^)"TRUE" :  "FALSE") ) );

// This is the effective equivalent of another Compare method, which ignores case
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper, szAsciiLower, true ) ? (String^)"TRUE" :  "FALSE") ) );
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
String 重载
System 命名空间
SByte
Int32


String 构造函数 (SByte*, Int32, Int32, Encoding)

String 构造函数 (SByte*, Int32, Int32, Encoding)
String 类

将 String 类的新实例初始化为由指向 8 位带符号整数数组的指定指针、该数组内的起始字符位置、长度以及 Encoding 对象指示的值。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用或返回不安全类型的 API。
[CLSCompliantAttribute(false)]
public String(
    sbyte* value,
    int startIndex,
    int length,
    Encoding enc
)
[CLSCompliantAttribute(false)]
public:
String(
    signed char* value,
    int startIndex,
    int length,
    Encoding^ enc
)
[<CLSCompliantAttribute(false)>]
new :
        value:nativeptr<sbyte> *
        startIndex:int *
        length:int *
        enc:Encoding -> String

参数

value
类型： System SByte*
指向 8 位带符号整数数组的指针。
startIndex
类型： System Int32
value 内的起始位置。
length
类型： System Int32
要使用的 value 内的字符数。
enc
类型： System.Text Encoding
一个对象，用于指定如何对 value 所引用的数组进行编码。如果 enc 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则假定以 ANSI 编码。 一个对象，用于指定如何对 value 所引用的数组进行编码。如果 enc 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则假定以 ANSI 编码。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 或 length 小于零。 - 或 - 由 value + startIndex 指定的地址相对于当前平台来说太大；即，地址计算溢出。 - 或 - 要初始化的新字符串的长度太大，无法分配。
ArgumentException | 由 value + startIndex 指定的地址小于 64K。 - 或 - 未能使用 value 初始化 String 的新实例，假定 value 按照 enc 的指定进行编码。
AccessViolationException | value、startIndex 和 length 共同指定的地址无效。

假定 value 参数指向一个带符号的字节数组，该数组表示按照 enc 参数的指定进行编码的字符串。enc 参数是一个表示任何有效编码方法的 System.Text..::.Encoding 对象。它必须表示用于创建字节数组的相同编码方法，否则已解码的字符串将不一定与原始字符串完全相同。 假定 value 参数指向一个带符号的字节数组，该数组表示按照 enc 参数的指定进行编码的字符串。enc 参数是一个表示任何有效编码方法的 System.Text..::.Encoding 对象。它必须表示用于创建字节数组的相同编码方法，否则已解码的字符串将不一定与原始字符串完全相同。 假定 value 参数指向一个带符号的字节数组，该数组表示按照 enc 参数的指定进行编码的字符串。enc 参数是一个表示任何有效编码方法的 System.Text..::.Encoding 对象。它必须表示用于创建字节数组的相同编码方法，否则已解码的字符串将不一定与原始字符串完全相同。

如果 length 为零，则新实例初始化为空字符串 ("")。

此构造函数处理 value 中从 startIndex 至 (startIndex + length - 1) 范围内的字符。

如果指定范围超出为字符序列分配的内存，则此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。 如果指定范围超出为字符序列分配的内存，则此构造函数的行为将取决于系统。例如，这种情况可能会导致访问冲突。

在 C# 中，仅在不安全代码的上下文中定义此构造函数。

下面这个简单的示例演示如何使用该构造函数创建 UTF-8 String 的实例。

unsafe
{
    String utfeightstring = null;
    sbyte [] asciiChars = new sbyte[] { 0x51,0x52,0x53,0x54,0x54,0x56 };
    UTF8Encoding encoding = new UTF8Encoding(true, true);

    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiChars = asciiChars)
    {
        utfeightstring = new String(pAsciiChars,0,asciiChars.Length,encoding);
    }
    Console.WriteLine("The UTF8 String is " + utfeightstring ); // prints "QRSTTV"
}

char asciiChars[6] = {0x51,0x52,0x53,0x54,0x54,0x56};
char * pstr6 =  &asciiChars[ 0 ];
UTF8Encoding^ encoding = gcnew UTF8Encoding( true,true );
String^ utfeightstring = gcnew String( pstr6,0,sizeof(asciiChars),encoding );

// prints "QRSTTV"
Console::WriteLine( String::Concat(  "The UTF8 String is ", utfeightstring ) );
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
String 重载
System 命名空间
SByte
Int32


String 字段

String 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

String 类型公开以下成员。

名称 说明
页首

参考

String 类
System 命名空间


String ..::.Empty 字段

String
.
.
::
.
Empty 字段
String 类

表示空字符串。此字段为只读。 表示空字符串。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Empty As String
public static readonly string Empty
public:
static initonly String^ Empty
static val Empty: string

此字段的值为零长度字符串 ""。

在应用程序代码中，此字段最常用于赋值，以便将字符串变量初始化为空字符串。若要测试字符串的值是否为 String..::.Empty，可以使用 IsNullOrEmpty 方法。 在应用程序代码中，此字段最常用于赋值，以便将字符串变量初始化为空字符串。若要测试字符串的值是否为 String..::.Empty，可以使用 IsNullOrEmpty 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
IsNullOrEmpty


String 方法

String 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

String 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

String 类
System 命名空间


String ..::.Clone 方法

String
.
.
::
.
Clone 方法
String 类

返回对此 String 实例的引用。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Clone As Object
public Object Clone()
public:
virtual Object^ Clone() sealed
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
此 String 实例。

实现

返回值不是此实例的一个独立副本；它仅仅是同一数据的另一个视图。使用 Copy 或 CopyTo 方法创建一个单独的 String 对象，该对象与此实例具有相同的值。 返回值不是此实例的一个独立副本；它仅仅是同一数据的另一个视图。使用 Copy 或 CopyTo 方法创建一个单独的 String 对象，该对象与此实例具有相同的值。

下面的简单示例演示了 Clone 方法。

' Create a Unicode String with 5 Greek Alpha characters
Dim szGreekAlpha As New String(ChrW(&H0319), 5)
' Create a Unicode String with a Greek Omega character
Dim szGreekOmega As New String(New Char() {ChrW(&H03A9), ChrW(&H03A9), _
                                           ChrW(&H03A9)}, 2, 1)

Dim szGreekLetters As String = String.Concat(szGreekOmega, szGreekAlpha, _
                                             szGreekOmega.Clone())

' Examine the result
Console.WriteLine(szGreekLetters)

' The first index of Alpha
Dim iAlpha As Integer = szGreekLetters.IndexOf(ChrW(&H0319))
' The last index of Omega
Dim iomega As Integer = szGreekLetters.LastIndexOf(ChrW(&H03A9))

Console.WriteLine("The Greek letter Alpha first appears at index {0}.", _
                  ialpha)
Console.WriteLIne("The Greek letter Omega last appears at index {0}.", _
                  iomega)

// Create a Unicode String with 5 Greek Alpha characters
String szGreekAlpha = new String('\u0319',5);
// Create a Unicode String with a Greek Omega character
String szGreekOmega = new String(new char [] {'\u03A9','\u03A9','\u03A9'},2,1);

String szGreekLetters = String.Concat(szGreekOmega, szGreekAlpha, szGreekOmega.Clone());

// Examine the result
Console.WriteLine(szGreekLetters);

// The first index of Alpha
int ialpha = szGreekLetters.IndexOf('\u0319');
// The last index of Omega
int iomega = szGreekLetters.LastIndexOf('\u03A9');

Console.WriteLine("The Greek letter Alpha first appears at index " + ialpha +
    " and Omega last appears at index " + iomega + " in this String.");

// Create a Unicode String with 5 Greek Alpha characters
String^ szGreekAlpha = gcnew String( L'\x0319',5 );

// Create a Unicode String with a Greek Omega character
wchar_t charArray5[3] = {L'\x03A9',L'\x03A9',L'\x03A9'};
String^ szGreekOmega = gcnew String( charArray5,2,1 );
String^ szGreekLetters = String::Concat( szGreekOmega, szGreekAlpha, szGreekOmega->Clone() );

// Examine the result
Console::WriteLine( szGreekLetters );

// The first index of Alpha
int ialpha = szGreekLetters->IndexOf( L'\x0319' );

// The last index of Omega
int iomega = szGreekLetters->LastIndexOf( L'\x03A9' );
Console::WriteLine( String::Concat(  "The Greek letter Alpha first appears at index ", Convert::ToString( ialpha ) ) );
Console::WriteLine( String::Concat(  " and Omega last appears at index ", Convert::ToString( iomega ),  " in this String." ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Object
Copy
CopyTo


String ..::.Compare 方法

String
.
.
::
.
Compare 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

比较两个指定的 String 对象，并返回一个整数，指示二者在排序顺序中的相对位置。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Compare 方法 (String, String)

String
.
.
::
.
Compare 方法 (String, String)
String 类

比较两个指定的 String 对象，并返回一个整数，指示二者在排序顺序中的相对位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ strB As String _ ) As Integer
public static int Compare( string strA, string strB )
public: static int Compare( String^ strA, String^ strB )
static member Compare : strA:string * strB:string -> int
参数
strA
类型： System String
要比较的第一个字符串。
strB
类型： System String
要比较的第二个字符串。
返回值
类型： System Int32
一个 32 位带符号整数，指示两个比较数之间的词法关系。
值
条件
小于零
strA
小于
strB
。
零
strA
等于
strB
。
大于零
strA
大于
strB
。

该比较使用当前区域性获取区域性特定的信息，例如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。 该比较使用当前区域性获取区域性特定的信息，例如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。

使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。 一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。

当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。

当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。 当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, true) == 0);
}

使用序号比较比较路径名与“file”。执行此操作的正确代码如下： 使用序号比较比较路径名与“file”。执行此操作的正确代码如下：

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, StringComparison::OrdinalIgnoreCase) == 0);
}

在下面的示例中，ReverseStringComparer 类说明了如何使用 Compare 方法来计算两个字符串。

Imports System
Imports System.Text
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()
        Dim myAL As New ArrayList()
        ' Creates and initializes a new ArrayList.
        myAL.Add("Eric")
        myAL.Add("Mark")
        myAL.Add("Lance")
        myAL.Add("Rob")
        myAL.Add("Kris")
        myAL.Add("Brad")
        myAL.Add("Kit")
        myAL.Add("Bradley")
        myAL.Add("Keith")
        myAL.Add("Susan")

        ' Displays the properties and values of	the	ArrayList.
        Console.WriteLine("Count: {0}", myAL.Count)
        PrintValues("Unsorted", myAL)
        myAL.Sort()
        PrintValues("Sorted", myAL)
        Dim comp as New ReverseStringComparer
        myAL.Sort(comp)
        PrintValues("Reverse", myAL)

        Dim names As String() = CType(myAL.ToArray(GetType(String)), String())
    End Sub 'Main

    Public Shared Sub PrintValues(title As String, myList As IEnumerable)
        Console.Write("{0,10}: ", title)
        Dim sb As New StringBuilder()
        Dim s As String
        For Each s In  myList
            sb.AppendFormat("{0}, ", s)
        Next s
        sb.Remove(sb.Length - 2, 2)
        Console.WriteLine(sb)
    End Sub 'PrintValues
End Class 'SamplesArrayList

Public Class ReverseStringComparer
  Implements IComparer

     Function Compare(x As Object, y As Object) As Integer implements IComparer.Compare
        Dim s1 As String = CStr (x)
        Dim s2 As String = CStr (y)

        'negate the return value to get the reverse order
        Return - [String].Compare(s1, s2)

    End Function 'Compare
End Class 'ReverseStringComparer

using System;
using System.Text;
using System.Collections;

public class SamplesArrayList  {

    public static void Main()  {
        // Creates and initializes a new ArrayList.
        ArrayList myAL = new ArrayList();
        myAL.Add("Eric");
        myAL.Add("Mark");
        myAL.Add("Lance");
        myAL.Add("Rob");
        myAL.Add("Kris");
        myAL.Add("Brad");
        myAL.Add("Kit");
        myAL.Add("Bradley");
        myAL.Add("Keith");
        myAL.Add("Susan");

        // Displays the properties and values of	the	ArrayList.
        Console.WriteLine( "Count: {0}", myAL.Count );

        PrintValues ("Unsorted", myAL );
        myAL.Sort();
        PrintValues("Sorted", myAL );
        myAL.Sort(new ReverseStringComparer() );
        PrintValues ("Reverse" , myAL );

        string [] names = (string[]) myAL.ToArray (typeof(string));

    }
    public static void PrintValues(string title, IEnumerable	myList )  {
        Console.Write ("{0,10}: ", title);
        StringBuilder sb = new StringBuilder();
        foreach (string s in myList) {
            sb.AppendFormat( "{0}, ", s);
        }
        sb.Remove (sb.Length-2,2);
        Console.WriteLine(sb);
    }
}
public class ReverseStringComparer : IComparer {
   public int Compare (object x, object y) {
       string s1 = x as string;
       string s2 = y as string;
       //negate the return value to get the reverse order
       return - String.Compare (s1,s2);

   }
}

using namespace System;
using namespace System::Text;
using namespace System::Collections;

ref class ReverseStringComparer: public IComparer
{
public:
   virtual int Compare( Object^ x, Object^ y )
   {
      String^ s1 = dynamic_cast<String^>(x);
      String^ s2 = dynamic_cast<String^>(y);

      //negate the return value to get the reverse order
      return  -String::Compare( s1, s2 );
   }

};

void PrintValues( String^ title, IEnumerable^ myList )
{
   Console::Write( "{0,10}: ", title );
   StringBuilder^ sb = gcnew StringBuilder;
   {
      IEnumerator^ en = myList->GetEnumerator();
      String^ s;
      while ( en->MoveNext() )
      {
         s = en->Current->ToString();
         sb->AppendFormat(  "{0}, ", s );
      }
   }
   sb->Remove( sb->Length - 2, 2 );
   Console::WriteLine( sb );
}

void main()
{
   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "Eric" );
   myAL->Add( "Mark" );
   myAL->Add( "Lance" );
   myAL->Add( "Rob" );
   myAL->Add( "Kris" );
   myAL->Add( "Brad" );
   myAL->Add( "Kit" );
   myAL->Add( "Bradley" );
   myAL->Add( "Keith" );
   myAL->Add( "Susan" );

   // Displays the properties and values of the ArrayList.
   Console::WriteLine( "Count: {0}", myAL->Count.ToString() );

   PrintValues( "Unsorted", myAL );

   myAL->Sort();
   PrintValues( "Sorted", myAL );

   myAL->Sort( gcnew ReverseStringComparer );
   PrintValues( "Reverse", myAL );

   array<String^>^names = dynamic_cast<array<String^>^>(myAL->ToArray( String::typeid ));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Compare 重载
System 命名空间
Int32
CompareOrdinal
CompareTo


String ..::.Compare 方法 (String, String, Boolean)

String
.
.
::
.
Compare 方法 (String, String, Boolean)
String 类

比较两个指定的 String 对象（其中忽略或考虑其大小写），并返回一个整数，指示二者在排序顺序中的相对位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ strB As String, _ ignoreCase As Boolean _ ) As Integer
public static int Compare( string strA, string strB, bool ignoreCase )
public: static int Compare( String^ strA, String^ strB, bool ignoreCase )
static member Compare : strA:string * strB:string * ignoreCase:bool -> int
参数
strA
类型： System String
要比较的第一个字符串。
strB
类型： System String
要比较的第二个字符串。
ignoreCase
类型： System Boolean
要在比较过程中忽略大小写，则为
true
；否则为
false
。
返回值
类型： System Int32
一个 32 位带符号整数，指示两个比较数之间的词法关系。
值
条件
小于零
strA
小于
strB
。
零
strA
等于
strB
。
大于零
strA
大于
strB
。

该比较使用当前区域性获取区域性特定的信息，例如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。 该比较使用当前区域性获取区域性特定的信息，例如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。

使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。 一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。

当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。

当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。 当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, true) == 0);
}

使用序号比较比较路径名与“file”。执行此操作的正确代码如下： 使用序号比较比较路径名与“file”。执行此操作的正确代码如下：

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, StringComparison::OrdinalIgnoreCase) == 0);
}

下面的示例演示在比较字符串时，此 Compare 方法为什么相当于使用 ToUpper 或 ToLower。

unsafe
{
    // Null terminated ASCII characters in an sbyte array
    String szAsciiUpper = null;
    sbyte[] sbArr1 = new sbyte[] { 0x41, 0x42, 0x43, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiUpper = sbArr1)
    {
        szAsciiUpper = new String(pAsciiUpper);
    }
    String szAsciiLower = null;
    sbyte[] sbArr2 = { 0x61, 0x62, 0x63, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiLower = sbArr2)
    {
        szAsciiLower = new String(pAsciiLower, 0, sbArr2.Length);
    }
    // Prints "ABC abc"
    Console.WriteLine(szAsciiUpper + " " + szAsciiLower);

    // Compare Strings - the result is true
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper.ToUpper(), szAsciiLower.ToUpper())==0?"true":"false") );

    // This is the effective equivalent of another Compare method, which ignores case
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper, szAsciiLower, true)==0?"true":"false") );
}

// Null terminated ASCII characters in a simple char array
char charArray3[4] = {0x41,0x42,0x43,0x00};
char * pstr3 =  &charArray3[ 0 ];
String^ szAsciiUpper = gcnew String( pstr3 );
char charArray4[4] = {0x61,0x62,0x63,0x00};
char * pstr4 =  &charArray4[ 0 ];
String^ szAsciiLower = gcnew String( pstr4,0,sizeof(charArray4) );

// Prints "ABC abc"
Console::WriteLine( String::Concat( szAsciiUpper,  " ", szAsciiLower ) );

// Compare Strings - the result is true
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper->ToUpper(), szAsciiLower->ToUpper() ) ? (String^)"TRUE" :  "FALSE") ) );

// This is the effective equivalent of another Compare method, which ignores case
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper, szAsciiLower, true ) ? (String^)"TRUE" :  "FALSE") ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Compare 重载
System 命名空间
Int32
CompareOrdinal
CompareTo
IsPrefix


String ..::.Compare 方法 (String, String, StringComparison)

String
.
.
::
.
Compare 方法 (String, String, StringComparison)
String 类

使用指定的规则比较两个指定的 String 对象，并返回一个整数，指示二者在排序顺序中的相对位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ strB As String, _ comparisonType As StringComparison _ ) As Integer
public static int Compare( string strA, string strB, StringComparison comparisonType )
public: static int Compare( String^ strA, String^ strB, StringComparison comparisonType )
static member Compare : strA:string * strB:string * comparisonType:StringComparison -> int
参数
strA
类型： System String
要比较的第一个字符串。
strB
类型： System String
要比较的第二个字符串。
comparisonType
类型： System StringComparison
一个枚举值，用于指定比较中要使用的规则。
返回值
类型： System Int32
一个 32 位带符号整数，指示两个比较数之间的词法关系。
值
条件
小于零
strA
小于
strB
。
零
strA
等于
strB
。
大于零
strA
大于
strB
。
异常 | 条件
ArgumentException | comparisonType 不是一个 StringComparison 值。
NotSupportedException | 不支持 StringComparison。

comparisonType 参数指示比较是应使用当前区域性还是固定区域性，是应考虑还是应忽略比较字的大小写，是使用字（区分区域性）排序规则还是序号（不区分区域性）排序规则。

一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。 一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。

当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。

当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。 当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, true) == 0);
}

使用序号比较比较路径名与“file”。执行此操作的正确代码如下： 使用序号比较比较路径名与“file”。执行此操作的正确代码如下：

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, StringComparison::OrdinalIgnoreCase) == 0);
}

下面的示例对字母“I”的三个版本进行比较。比较结果受以下因素的影响：区域性的选择，是否忽略大小写，是否执行序号比较。 下面的示例对字母“I”的三个版本进行比较。比较结果受以下因素的影响：区域性的选择，是否忽略大小写，是否执行序号比较。

' This example demonstrates the
' System.String.Compare(String, String, StringComparison) method.

Imports System
Imports System.Threading

Class Sample
    Public Shared Sub Main()
        Dim intro As String = "Compare three versions of the letter I using different " & _
                              "values of StringComparison."

        ' Define an array of strings where each element contains a version of the
        ' letter I. (An array of strings is used so you can easily modify this
        ' code example to test additional or different combinations of strings.)
        Dim threeIs(2) As String
        ' LATIN SMALL LETTER I (U+0069)
        threeIs(0) = "i"
        ' LATIN SMALL LETTER DOTLESS I (U+0131)
        threeIs(1) = " "
        ' LATIN CAPITAL LETTER I (U+0049)
        threeIs(2) = "I"

        Dim unicodeNames As String() =  { _
                            "LATIN SMALL LETTER I (U+0069)", _
                            "LATIN SMALL LETTER DOTLESS I (U+0131)", _
                            "LATIN CAPITAL LETTER I (U+0049)" }

        Dim scValues As StringComparison() =  { _
                            StringComparison.CurrentCulture, _
                            StringComparison.CurrentCultureIgnoreCase, _
                            StringComparison.InvariantCulture, _
                            StringComparison.InvariantCultureIgnoreCase, _
                            StringComparison.Ordinal, _
                            StringComparison.OrdinalIgnoreCase }
        '
        Console.Clear()
        Console.WriteLine(intro)

        ' Display the current culture because the culture-specific comparisons
        ' can produce different results with different cultures.
        Console.WriteLine("The current culture is {0}." & vbCrLf, _
                           Thread.CurrentThread.CurrentCulture.Name)

        ' Determine the relative sort order of three versions of the letter I.
        Dim sc As StringComparison
        For Each sc In  scValues
            Console.WriteLine("StringComparison.{0}:", sc)

            ' LATIN SMALL LETTER I (U+0069) : LATIN SMALL LETTER DOTLESS I (U+0131)
            Test(0, 1, sc, threeIs, unicodeNames)

            ' LATIN SMALL LETTER I (U+0069) : LATIN CAPITAL LETTER I (U+0049)
            Test(0, 2, sc, threeIs, unicodeNames)

            ' LATIN SMALL LETTER DOTLESS I (U+0131) : LATIN CAPITAL LETTER I (U+0049)
            Test(1, 2, sc, threeIs, unicodeNames)

            Console.WriteLine()
        Next sc

    End Sub 'Main

    Protected Shared Sub Test(ByVal x As Integer, ByVal y As Integer, _
                              ByVal comparison As StringComparison, _
                              ByVal testI() As String, ByVal testNames() As String)
        Dim resultFmt As String = "{0} is {1} {2}"
        Dim result As String = "equal to"
        Dim cmpValue As Integer = 0
        '
        cmpValue = String.Compare(testI(x), testI(y), comparison)
        If cmpValue < 0 Then
            result = "less than"
        ElseIf cmpValue > 0 Then
            result = "greater than"
        End If
        Console.WriteLine(resultFmt, testNames(x), result, testNames(y))

    End Sub 'Test
End Class 'Sample

'
'This code example produces the following results:
'
'Compare three versions of the letter I using different values of StringComparison.
'The current culture is en-US.
'
'StringComparison.CurrentCulture:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.CurrentCultureIgnoreCase:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.InvariantCulture:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.InvariantCultureIgnoreCase:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.Ordinal:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'
'StringComparison.OrdinalIgnoreCase:
'LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
'LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
'LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
'

// This example demonstrates the
// System.String.Compare(String, String, StringComparison) method.

using System;
using System.Threading;

class Sample
{
    public static void Main()
    {
    string intro = "Compare three versions of the letter I using different " +
                   "values of StringComparison.";

// Define an array of strings where each element contains a version of the
// letter I. (An array of strings is used so you can easily modify this
// code example to test additional or different combinations of strings.)

    string[] threeIs = new string[3];
// LATIN SMALL LETTER I (U+0069)
    threeIs[0] = "\u0069";
// LATIN SMALL LETTER DOTLESS I (U+0131)
    threeIs[1] = "\u0131";
// LATIN CAPITAL LETTER I (U+0049)
    threeIs[2] = "\u0049";

    string[] unicodeNames =
             {
             "LATIN SMALL LETTER I (U+0069)",
             "LATIN SMALL LETTER DOTLESS I (U+0131)",
             "LATIN CAPITAL LETTER I (U+0049)"
             };

    StringComparison[] scValues = {
        StringComparison.CurrentCulture,
        StringComparison.CurrentCultureIgnoreCase,
        StringComparison.InvariantCulture,
        StringComparison.InvariantCultureIgnoreCase,
        StringComparison.Ordinal,
        StringComparison.OrdinalIgnoreCase };

//
    Console.Clear();
    Console.WriteLine(intro);

// Display the current culture because the culture-specific comparisons
// can produce different results with different cultures.
    Console.WriteLine("The current culture is {0}.\n",
                       Thread.CurrentThread.CurrentCulture.Name);

// Determine the relative sort order of three versions of the letter I.
    foreach (StringComparison sc in scValues)
        {
        Console.WriteLine("StringComparison.{0}:", sc);

// LATIN SMALL LETTER I (U+0069) : LATIN SMALL LETTER DOTLESS I (U+0131)
        Test(0, 1, sc, threeIs, unicodeNames);

// LATIN SMALL LETTER I (U+0069) : LATIN CAPITAL LETTER I (U+0049)
        Test(0, 2, sc, threeIs, unicodeNames);

// LATIN SMALL LETTER DOTLESS I (U+0131) : LATIN CAPITAL LETTER I (U+0049)
        Test(1, 2, sc, threeIs, unicodeNames);

        Console.WriteLine();
        }
    }

    protected static void Test(int x, int y,
                               StringComparison comparison,
                               string[] testI, string[] testNames)
    {
    string resultFmt = "{0} is {1} {2}";
    string result = "equal to";
    int cmpValue = 0;
//
    cmpValue = String.Compare(testI[x], testI[y], comparison);
    if      (cmpValue < 0)
        result = "less than";
    else if (cmpValue > 0)
        result = "greater than";
    Console.WriteLine(resultFmt, testNames[x], result, testNames[y]);
    }
}

/*
This code example produces the following results:

Compare three versions of the letter I using different values of StringComparison.
The current culture is en-US.

StringComparison.CurrentCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

StringComparison.CurrentCultureIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

StringComparison.InvariantCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

StringComparison.InvariantCultureIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

StringComparison.Ordinal:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

StringComparison.OrdinalIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

*/

// This example demonstrates the
// System.String.Compare(String, String, StringComparison) method.

using namespace System;
using namespace System::Threading;

void Test(int testStringIndex, int searchStringIndex,
          StringComparison comparison, array<String^>^ testI,
          array<String^>^ testNames)
{
    String^ resultFormat = "{0} is {1} {2}";
    String^ resultString = "equal to";
    int comparisonValue = 0;

    comparisonValue = String::Compare(testI[testStringIndex],
        testI[searchStringIndex], comparison);
    if (comparisonValue < 0)
    {
        resultString = "less than";
    }
    else if (comparisonValue > 0)
    {
        resultString = "greater than";
    }
    Console::WriteLine(resultFormat, testNames[testStringIndex], resultString,
        testNames[searchStringIndex]);
}

int main()
{
    String^ introMessage =
        "Compare three versions of the letter I using different " +
        "values of StringComparison.";

    // Define an array of strings where each element contains a version of
    // the letter I. (An array of strings is used so you can easily modify
    // this code example to test additional or different combinations of
    // strings.)

    array<String^>^ letterVariation = gcnew array<String^>(3);
    // LATIN SMALL LETTER I (U+0069)
    letterVariation[0] = "i";
    // LATIN SMALL LETTER DOTLESS I (U+0131)
    letterVariation[1] = L"\u0131";
    // LATIN CAPITAL LETTER I (U+0049)
    letterVariation[2] = "I";

    array<String^>^ unicodeNames = {
        "LATIN SMALL LETTER I (U+0069)",
        "LATIN SMALL LETTER DOTLESS I (U+0131)",
        "LATIN CAPITAL LETTER I (U+0049)"};

    array<StringComparison>^ comparisonValues = {
        StringComparison::CurrentCulture,
        StringComparison::CurrentCultureIgnoreCase,
        StringComparison::InvariantCulture,
        StringComparison::InvariantCultureIgnoreCase,
        StringComparison::Ordinal,
        StringComparison::OrdinalIgnoreCase};

    Console::Clear();
    Console::WriteLine(introMessage);

    // Display the current culture because the culture-specific comparisons
    // can produce different results with different cultures.
    Console::WriteLine("The current culture is {0}.{1}",
        Thread::CurrentThread->CurrentCulture->Name, Environment::NewLine);

    // Determine the relative sort order of three versions of the letter I.
    for each (StringComparison stringCmp in comparisonValues)
    {
        Console::WriteLine("StringComparison.{0}:", stringCmp);

        // LATIN SMALL LETTER I (U+0069) : LATIN SMALL LETTER DOTLESS I
        // (U+0131)
        Test(0, 1, stringCmp, letterVariation, unicodeNames);

        // LATIN SMALL LETTER I (U+0069) : LATIN CAPITAL LETTER I (U+0049)
        Test(0, 2, stringCmp, letterVariation, unicodeNames);

        // LATIN SMALL LETTER DOTLESS I (U+0131) : LATIN CAPITAL LETTER I
        // (U+0049)
        Test(1, 2, stringCmp, letterVariation, unicodeNames);

        Console::WriteLine();
    }
}

/*
This code example produces the following results:

Compare three versions of the letter I using different values of
StringComparison.
The current culture is en-US.

StringComparison.CurrentCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER
  DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN
  CAPITAL LETTER I (U+0049)

StringComparison.CurrentCultureIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER
  DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN
  CAPITAL LETTER I (U+0049)

StringComparison.InvariantCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER
  DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN
  CAPITAL LETTER I (U+0049)

StringComparison.InvariantCultureIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER
  DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN
  CAPITAL LETTER I (U+0049)

StringComparison.Ordinal:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER
  DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN
  CAPITAL LETTER I (U+0049)

StringComparison.OrdinalIgnoreCase:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER
  DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is equal to LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN
  CAPITAL LETTER I (U+0049)

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Compare 重载
System 命名空间
Int32
CompareOrdinal
CompareTo
CultureInfo


String ..::.Compare 方法 (String, String, Boolean, CultureInfo)

String
.
.
::
.
Compare 方法 (String, String, Boolean, CultureInfo)
String 类

比较两个指定的 String 对象（其中忽略或考虑其大小写，并使用区域性特定的信息干预比较），并返回一个整数，指示二者在排序顺序中的相对位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ strB As String, _ ignoreCase As Boolean, _ culture As CultureInfo _ ) As Integer
public static int Compare( string strA, string strB, bool ignoreCase, CultureInfo culture )
public: static int Compare( String^ strA, String^ strB, bool ignoreCase, CultureInfo^ culture )
static member Compare : strA:string * strB:string * ignoreCase:bool * culture:CultureInfo -> int
参数
strA
类型： System String
要比较的第一个字符串。
strB
类型： System String
要比较的第二个字符串。
ignoreCase
类型： System Boolean
要在比较过程中忽略大小写，则为
true
；否则为
false
。
culture
类型： System.Globalization CultureInfo
一个对象，提供区域性特定的比较信息。
返回值
类型： System Int32
一个 32 位带符号整数，指示两个比较数之间的词法关系。
值
条件
小于零
strA
小于
strB
。
零
strA
等于
strB
。
大于零
strA
大于
strB
。
异常 | 条件
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

该比较使用 culture 参数来获取区域性特定的信息，如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。 该比较使用 culture 参数来获取区域性特定的信息，如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。

使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。 一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。

当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。

当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。 当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, true) == 0);
}

使用序号比较比较路径名与“file”。执行此操作的正确代码如下： 使用序号比较比较路径名与“file”。执行此操作的正确代码如下：

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, StringComparison::OrdinalIgnoreCase) == 0);
}

下面的示例演示区域性如何影响比较。在“捷克语 - 捷克共和国”区域性中，“ch”是一个字符，大于“d”。在“英语 - 美国”区域性中，“ch”是两个字符，而且“c”小于“d”。 下面的示例演示区域性如何影响比较。在“捷克语 - 捷克共和国”区域性中，“ch”是一个字符，大于“d”。在“英语 - 美国”区域性中，“ch”是两个字符，而且“c”小于“d”。 下面的示例演示区域性如何影响比较。在“捷克语 - 捷克共和国”区域性中，“ch”是一个字符，大于“d”。在“英语 - 美国”区域性中，“ch”是两个字符，而且“c”小于“d”。

Imports System
Imports System.Globalization
 _

Class Sample
   Public Shared Sub Main()
      Dim str1 As [String] = "change"
      Dim str2 As [String] = "dollar"
      Dim relation As [String] = Nothing

      relation = symbol([String].Compare(str1, str2, False, New CultureInfo("en-US")))
      Console.WriteLine("For en-US: {0} {1} {2}", str1, relation, str2)

      relation = symbol([String].Compare(str1, str2, False, New CultureInfo("cs-CZ")))
      Console.WriteLine("For cs-CZ: {0} {1} {2}", str1, relation, str2)
   End Sub 'Main

   Private Shared Function symbol(r As Integer) As [String]
      Dim s As [String] = "="
      If r < 0 Then
         s = "<"
      Else
         If r > 0 Then
            s = ">"
         End If
      End If
      Return s
   End Function 'symbol
End Class 'Sample
'
'This example produces the following results.
'For en-US: change < dollar
'For cs-CZ: change > dollar
'

using System;
using System.Globalization;

class Sample {
    public static void Main() {
    String str1 = "change";
    String str2 = "dollar";
    String relation = null;

    relation = symbol( String.Compare(str1, str2, false, new CultureInfo("en-US")) );
    Console.WriteLine("For en-US: {0} {1} {2}", str1, relation, str2);

    relation = symbol( String.Compare(str1, str2, false, new CultureInfo("cs-CZ")) );
    Console.WriteLine("For cs-CZ: {0} {1} {2}", str1, relation, str2);
    }

    private static String symbol(int r) {
    String s = "=";
    if      (r < 0) s = "<";
    else if (r > 0) s = ">";
    return s;
    }
}
/*
This example produces the following results.
For en-US: change < dollar
For cs-CZ: change > dollar
*/

using namespace System;
using namespace System::Globalization;
String^ symbol( int r )
{
   String^ s = "=";
   if ( r < 0 )
      s = "<";
   else
   if ( r > 0 )
      s = ">";

   return s;
}

int main()
{
   String^ str1 = "change";
   String^ str2 = "dollar";
   String^ relation = nullptr;
   relation = symbol( String::Compare( str1, str2, false, gcnew CultureInfo( "en-US" ) ) );
   Console::WriteLine( "For en-US: {0} {1} {2}", str1, relation, str2 );
   relation = symbol( String::Compare( str1, str2, false, gcnew CultureInfo( "cs-CZ" ) ) );
   Console::WriteLine( "For cs-CZ: {0} {1} {2}", str1, relation, str2 );
}

/*
This example produces the following results.
For en-US: change < dollar
For cs-CZ: change > dollar
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Compare 重载
System 命名空间
Int32
CompareOrdinal
CompareTo
IsPrefix
Boolean


String ..::.Compare 方法 (String, String, CultureInfo, CompareOptions)

String
.
.
::
.
Compare 方法 (String, String, CultureInfo, CompareOptions)
String 类

对两个指定的 String 对象进行比较，使用指定的比较选项和区域性特定的信息来影响比较，并返回一个整数，该整数指示这两个字符串在排序顺序中的关系。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ strB As String, _ culture As CultureInfo, _ options As CompareOptions _ ) As Integer
public static int Compare( string strA, string strB, CultureInfo culture, CompareOptions options )
public: static int Compare( String^ strA, String^ strB, CultureInfo^ culture, CompareOptions options )
static member Compare : strA:string * strB:string * culture:CultureInfo * options:CompareOptions -> int
参数
strA
类型： System String
要比较的第一个字符串。
strB
类型： System String
要比较的第二个字符串。
culture
类型： System.Globalization CultureInfo
提供区域性特定的比较信息的区域性。
options
类型： System.Globalization CompareOptions
要在执行比较时使用的选项（如忽略大小写或符号）。
返回值
类型： System Int32
一个 32 位带符号整数，该整数指示
strA
与
strB
之间的词法关系，如下表所示
值
条件
小于零
strA
小于
strB
。
零
strA
等于
strB
。
大于零
strA
大于
strB
。
异常 | 条件
ArgumentException | options 不是一个 CompareOptions 值。
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此比较操作使用 culture 参数来获取区域性特定的信息，如大小写规则和各字符的字母顺序。例如，特定的区域性可以指定：将某些字符组合视为单个字符，用特定方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。 此比较操作使用 culture 参数来获取区域性特定的信息，如大小写规则和各字符的字母顺序。例如，特定的区域性可以指定：将某些字符组合视为单个字符，用特定方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。

警告说明 警告

Compare(String, String, CultureInfo, CompareOptions) 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的在于确定两个字符串是否相等（即，方法调用的目的在于测试返回值是否为零），则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。 Compare(String, String, CultureInfo, CompareOptions) 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的在于确定两个字符串是否相等（即，方法调用的目的在于测试返回值是否为零），则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。 Compare(String, String, CultureInfo, CompareOptions) 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的在于确定两个字符串是否相等（即，方法调用的目的在于测试返回值是否为零），则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。

通过 options 参数可以进一步指定比较，该参数由 CompareOptions 枚举的一个或多个成员组成。但是，由于此方法的目的在于执行区分区域性的字符串比较，因此 CompareOptions..::.Ordinal 和 CompareOptions..::.OrdinalIgnoreCase 值将不起作用。 通过 options 参数可以进一步指定比较，该参数由 CompareOptions 枚举的一个或多个成员组成。但是，由于此方法的目的在于执行区分区域性的字符串比较，因此 CompareOptions..::.Ordinal 和 CompareOptions..::.OrdinalIgnoreCase 值将不起作用。

两个比较数或其中任何一个都可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括 String..::.Empty）都大于 null 引用，两个 null 引用相等。 两个比较数或其中任何一个都可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括 String..::.Empty）都大于 null 引用，两个 null 引用相等。

当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。 当发现不相等或已经比较了两个字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。

下面的示例使用以下三种不同的方法来比较两个字符串：使用 en-US 区域性的语义比较；使用 en-US 区域性的区分大小写语义比较；以及使用序号比较。此示例还演示这三种比较方法生成三种不同结果的过程。 下面的示例使用以下三种不同的方法来比较两个字符串：使用 en-US 区域性的语义比较；使用 en-US 区域性的区分大小写语义比较；以及使用序号比较。此示例还演示这三种比较方法生成三种不同结果的过程。

Imports System.Globalization

Public Module Example
   Public Sub Main()
      Dim string1 As String = "brother"
      Dim string2 As String = "Brother"
      Dim relation As String
      Dim result As Integer

      ' Cultural (linguistic) comparison.
      result = String.Compare(string1, string2, _
                              New CultureInfo("en-US"), CompareOptions.None)
      If result > 0 Then
         relation = "comes after"
      ElseIf result = 0 Then
         relation = "is the same as"
      Else
         relation = "comes before"
      End If
      Console.WriteLine("'{0}' {1} '{2}'.", string1, relation, string2)

      ' Cultural (linguistic) case-insensitive comparison.
      result = String.Compare(string1, string2, _
                              New CultureInfo("en-US"), CompareOptions.IgnoreCase)
      If result > 0 Then
         relation = "comes after"
      ElseIf result = 0 Then
         relation = "is the same as"
      Else
         relation = "comes before"
      End If
      Console.WriteLine("'{0}' {1} '{2}'.", string1, relation, string2)

      ' Culture-insensitive ordinal comparison.
      result = String.CompareOrdinal(string1, string2)
      If result > 0 Then
         relation = "comes after"
      ElseIf result = 0 Then
         relation = "is the same as"
      Else
         relation = "comes before"
      End If
      Console.WriteLine("'{0}' {1} '{2}'.", string1, relation, string2)
   End Sub
End Module
' The example produces the following output:
'    'brother' comes before 'Brother'.
'    'brother' is the same as 'Brother'.
'    'brother' comes after 'Brother'.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string string1 = "brother";
      string string2 = "Brother";
      string relation;
      int result;

      // Cultural (linguistic) comparison.
      result = String.Compare(string1, string2, new CultureInfo("en-US"),
                              CompareOptions.None);
      if (result > 0)
         relation = "comes after";
      else if (result == 0)
         relation = "is the same as";
      else
         relation = "comes before";

      Console.WriteLine("'{0}' {1} '{2}'.",
                        string1, relation, string2);

      // Cultural (linguistic) case-insensitive comparison.
      result = String.Compare(string1, string2, new CultureInfo("en-US"),
                              CompareOptions.IgnoreCase);
      if (result > 0)
         relation = "comes after";
      else if (result == 0)
         relation = "is the same as";
      else
         relation = "comes before";

      Console.WriteLine("'{0}' {1} '{2}'.",
                        string1, relation, string2);

       // Culture-insensitive ordinal comparison.
      result = String.CompareOrdinal(string1, string2);
      if (result > 0)
         relation = "comes after";
      else if (result == 0)
         relation = "is the same as";
      else
         relation = "comes before";

      Console.WriteLine("'{0}' {1} '{2}'.",
                        string1, relation, string2);
   }
}
// The example produces the following output:
//    'brother' comes before 'Brother'.
//    'brother' is the same as 'Brother'.
//    'brother' comes after 'Brother'.

using namespace System;
using namespace System::Globalization;

public ref class Example
{
public:
   static void Main()
   {
      String^ string1 = "brother";
      String^ string2 = "Brother";
      String^ relation;
      int result;

      // Cultural (linguistic) comparison.
      result = String::Compare(string1, string2, gcnew CultureInfo("en-US"),
                              CompareOptions::None);
      if (result > 0)
         relation = "comes after";
      else if (result == 0)
         relation = "is the same as";
      else
         relation = "comes before";

      Console::WriteLine("'{0}' {1} '{2}'.",
                        string1, relation, string2);

      // Cultural (linguistic) case-insensitive comparison.
      result = String::Compare(string1, string2, gcnew CultureInfo("en-US"),
                              CompareOptions::IgnoreCase);
      if (result > 0)
         relation = "comes after";
      else if (result == 0)
         relation = "is the same as";
      else
         relation = "comes before";

      Console::WriteLine("'{0}' {1} '{2}'.",
                        string1, relation, string2);

       // Culture-insensitive ordinal comparison.
      result = String::CompareOrdinal(string1, string2);
      if (result > 0)
         relation = "comes after";
      else if (result == 0)
         relation = "is the same as";
      else
         relation = "comes before";

      Console::WriteLine("'{0}' {1} '{2}'.",
                        string1, relation, string2);
   }
};

int main()
{
    Example::Main();
}

// The example produces the following output:
//    'brother' comes before 'Brother'.
//    'brother' is the same as 'Brother'.
//    'brother' comes after 'Brother'.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Compare 重载
System 命名空间
CompareOrdinal
CompareTo
Equals


String ..::.Compare 方法 (String, Int32, String, Int32, Int32)

String
.
.
::
.
Compare 方法 (String, Int32, String, Int32, Int32)
String 类

对两个指定的 String 对象的子字符串进行比较，并返回一个指示二者在排序顺序中的相对位置的整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ indexA As Integer, _ strB As String, _ indexB As Integer, _ length As Integer _ ) As Integer
public static int Compare( string strA, int indexA, string strB, int indexB, int length )
public: static int Compare( String^ strA, int indexA, String^ strB, int indexB, int length )
static member Compare : strA:string * indexA:int * strB:string * indexB:int * length:int -> int
参数
strA
类型： System String
要在比较中使用的第一个字符串。
indexA
类型： System Int32
strA
中子字符串的位置。
strB
类型： System String
要在比较中使用的第二个字符串。
indexB
类型： System Int32
strB
中子字符串的位置。
length
类型： System Int32
要比较的子字符串中字符的最大数量。
返回值
类型： System Int32
一个 32 位带符号整数，指示两个比较数之间的词法关系。
值
条件
小于零
strA
中的子字符串小于
strB
中的子字符串。
零
子字符串相等，或者
length
为零。
大于零
strA
中的子字符串大于
strB
中的子字符串。
异常 | 条件
ArgumentOutOfRangeException | indexA 大于 strA.Length。 - 或 - indexB 大于 strB.Length。 - 或 - indexA、indexB 或 length 为负。 - 或 - indexA 或 indexB 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而 length 大于零。

strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。

要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。 要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。

该比较使用当前区域性获取区域性特定的信息，例如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。 该比较使用当前区域性获取区域性特定的信息，例如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。

使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。 一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。

当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。

当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。 当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, true) == 0);
}

使用序号比较比较路径名与“file”。执行此操作的正确代码如下： 使用序号比较比较路径名与“file”。执行此操作的正确代码如下：

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, StringComparison::OrdinalIgnoreCase) == 0);
}

下面的示例比较两个子字符串。

' Sample for String.Compare(String, Int32, String, Int32, Int32)
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      '                       0123456
      Dim str1 As [String] = "machine"
      Dim str2 As [String] = "device"
      Dim str As [String]
      Dim result As Integer

      Console.WriteLine()
      Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2)
      result = [String].Compare(str1, 2, str2, 0, 2)
      str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
      Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1)
      Console.Write("{0} ", str)
      Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(0, 2), str2)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'str1 = 'machine', str2 = 'device'
'Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
'

// Sample for String.Compare(String, Int32, String, Int32, Int32)
using System;

class Sample {
    public static void Main() {
//                 0123456
    String str1 = "machine";
    String str2 = "device";
    String str;
    int result;

    Console.WriteLine();
    Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2);
    result = String.Compare(str1, 2, str2, 0, 2);
    str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
    Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1);
    Console.Write("{0} ", str);
    Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(0, 2), str2);
    }
}
/*
This example produces the following results:

str1 = 'machine', str2 = 'device'
Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
*/

// Sample for String::Compare(String, Int32, String, Int32, Int32)
using namespace System;
int main()
{

   //                0123456
   String^ str1 = "machine";
   String^ str2 = "device";
   String^ str;
   int result;
   Console::WriteLine();
   Console::WriteLine( "str1 = '{0}', str2 = '{1}'", str1, str2 );
   result = String::Compare( str1, 2, str2, 0, 2 );
   str = ((result < 0) ? "less than" : ((result > 0) ? (String^)"greater than" : "equal to"));
   Console::Write( "Substring '{0}' in ' {1}' is ", str1->Substring( 2, 2 ), str1 );
   Console::Write( " {0} ", str );
   Console::WriteLine( "substring '{0}' in ' {1}'.", str2->Substring( 0, 2 ), str2 );
}

/*
This example produces the following results:

str1 = 'machine', str2 = 'device'
Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Compare 重载
System 命名空间
Int32
CompareOrdinal
CompareTo


String ..::.Compare 方法 (String, Int32, String, Int32, Int32, Boolean)

String
.
.
::
.
Compare 方法 (String, Int32, String, Int32, Int32, Boolean)
String 类

比较两个指定的 String 对象的子字符串（忽略或考虑其大小写），并返回一个整数，指示二者在排序顺序中的相对位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ indexA As Integer, _ strB As String, _ indexB As Integer, _ length As Integer, _ ignoreCase As Boolean _ ) As Integer
public static int Compare( string strA, int indexA, string strB, int indexB, int length, bool ignoreCase )
public: static int Compare( String^ strA, int indexA, String^ strB, int indexB, int length, bool ignoreCase )
static member Compare : strA:string * indexA:int * strB:string * indexB:int * length:int * ignoreCase:bool -> int
参数
strA
类型： System String
要在比较中使用的第一个字符串。
indexA
类型： System Int32
strA
中子字符串的位置。
strB
类型： System String
要在比较中使用的第二个字符串。
indexB
类型： System Int32
strB
中子字符串的位置。
length
类型： System Int32
要比较的子字符串中字符的最大数量。
ignoreCase
类型： System Boolean
要在比较过程中忽略大小写，则为
true
；否则为
false
。
返回值
类型： System Int32
一个 32 位带符号整数，指示两个比较数之间的词法关系。
值
条件
小于零
strA
中的子字符串小于
strB
中的子字符串。
零
子字符串相等，或者
length
为零。
大于零
strA
中的子字符串大于
strB
中的子字符串。
异常 | 条件
ArgumentOutOfRangeException | indexA 大于 strA.Length。 - 或 - indexB 大于 strB.Length。 - 或 - indexA、indexB 或 length 为负。 - 或 - indexA 或 indexB 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而 length 大于零。

strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。

要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。 要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。

该比较使用当前区域性获取区域性特定的信息，例如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。 该比较使用当前区域性获取区域性特定的信息，例如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。

使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。 一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。

当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。

当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。 当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, true) == 0);
}

需要用固定方式对路径名进行比较。执行此操作的正确代码如下。 需要用固定方式对路径名进行比较。执行此操作的正确代码如下。

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, StringComparison::OrdinalIgnoreCase) == 0);
}

下面的示例对两个仅大小写不同的子字符串进行两次比较。第一次比较忽略大小写，第二次比较考虑大小写。 下面的示例对两个仅大小写不同的子字符串进行两次比较。第一次比较忽略大小写，第二次比较考虑大小写。

' Sample for String.Compare(String, Int32, String, Int32, Int32, Boolean)
Imports System
Imports Microsoft.VisualBasic

Class Sample

   Public Shared Sub Main()
      '                       0123456
      Dim str1 As [String] = "MACHINE"
      Dim str2 As [String] = "machine"
      Dim str As [String]
      Dim result As Integer

      Console.WriteLine()
      Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2)
      Console.WriteLine("Ignore case:")
      result = [String].Compare(str1, 2, str2, 2, 2, True)
      str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
      Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1)
      Console.Write("{0} ", str)
      Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(2, 2), str2)

      Console.WriteLine()
      Console.WriteLine("Honor case:")
      result = [String].Compare(str1, 2, str2, 2, 2, False)
      str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
      Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1)
      Console.Write("{0} ", str)
      Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(2, 2), str2)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'str1 = 'MACHINE', str2 = 'machine'
'Ignore case:
'Substring 'CH' in 'MACHINE' is equal to substring 'ch' in 'machine'.
'
'Honor case:
'Substring 'CH' in 'MACHINE' is greater than substring 'ch' in 'machine'.
'

// Sample for String.Compare(String, Int32, String, Int32, Int32, Boolean)
using System;

class Sample {
    public static void Main() {
//                 0123456
    String str1 = "MACHINE";
    String str2 = "machine";
    String str;
    int result;

    Console.WriteLine();
    Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2);
    Console.WriteLine("Ignore case:");
    result = String.Compare(str1, 2, str2, 2, 2, true);
    str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
    Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1);
    Console.Write("{0} ", str);
    Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(2, 2), str2);

    Console.WriteLine();
    Console.WriteLine("Honor case:");
    result = String.Compare(str1, 2, str2, 2, 2, false);
    str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
    Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1);
    Console.Write("{0} ", str);
    Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(2, 2), str2);
    }
}
/*
This example produces the following results:

str1 = 'MACHINE', str2 = 'machine'
Ignore case:
Substring 'CH' in 'MACHINE' is equal to substring 'ch' in 'machine'.

Honor case:
Substring 'CH' in 'MACHINE' is greater than substring 'ch' in 'machine'.
*/

// Sample for String::Compare(String, Int32, String, Int32, Int32, Boolean)
using namespace System;
int main()
{

   //                0123456
   String^ str1 = "MACHINE";
   String^ str2 = "machine";
   String^ str;
   int result;
   Console::WriteLine();
   Console::WriteLine( "str1 = '{0}', str2 = '{1}'", str1, str2 );
   Console::WriteLine( "Ignore case:" );
   result = String::Compare( str1, 2, str2, 2, 2, true );
   str = ((result < 0) ? "less than" : ((result > 0) ? (String^)"greater than" : "equal to"));
   Console::Write( "Substring '{0}' in '{1}' is ", str1->Substring( 2, 2 ), str1 );
   Console::Write( " {0} ", str );
   Console::WriteLine( "substring '{0}' in '{1}'.", str2->Substring( 2, 2 ), str2 );
   Console::WriteLine();
   Console::WriteLine( "Honor case:" );
   result = String::Compare( str1, 2, str2, 2, 2, false );
   str = ((result < 0) ? "less than" : ((result > 0) ? (String^)"greater than" : "equal to"));
   Console::Write( "Substring '{0}' in '{1}' is ", str1->Substring( 2, 2 ), str1 );
   Console::Write( " {0} ", str );
   Console::WriteLine( "substring '{0}' in '{1}'.", str2->Substring( 2, 2 ), str2 );
}

/*
This example produces the following results:

str1 = 'MACHINE', str2 = 'machine'
Ignore case:
Substring 'CH' in 'MACHINE' is equal to substring 'ch' in 'machine'.

Honor case:
Substring 'CH' in 'MACHINE' is greater than substring 'ch' in 'machine'.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Compare 重载
System 命名空间
Int32
CompareOrdinal
CompareTo


String ..::.Compare 方法 (String, Int32, String, Int32, Int32, StringComparison)

String
.
.
::
.
Compare 方法 (String, Int32, String, Int32, Int32, StringComparison)
String 类

使用指定的规则比较两个指定的 String 对象的子字符串，并返回一个整数，指示二者在排序顺序中的相对位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ indexA As Integer, _ strB As String, _ indexB As Integer, _ length As Integer, _ comparisonType As StringComparison _ ) As Integer
public static int Compare( string strA, int indexA, string strB, int indexB, int length, StringComparison comparisonType )
public: static int Compare( String^ strA, int indexA, String^ strB, int indexB, int length, StringComparison comparisonType )
static member Compare : strA:string * indexA:int * strB:string * indexB:int * length:int * comparisonType:StringComparison -> int
参数
strA
类型： System String
要在比较中使用的第一个字符串。
indexA
类型： System Int32
strA
中子字符串的位置。
strB
类型： System String
要在比较中使用的第二个字符串。
indexB
类型： System Int32
strB
中子字符串的位置。
length
类型： System Int32
要比较的子字符串中字符的最大数量。
comparisonType
类型： System StringComparison
一个枚举值，用于指定比较中要使用的规则。
返回值
类型： System Int32
一个 32 位带符号整数，指示两个比较数之间的词法关系。
值
条件
小于零
strA
参数中的子字符串小于
strB
参数中的子字符串。
零
子字符串相等，或者
length
参数为零。
大于零
strA
中的子字符串大于
strB
中的子字符串。
异常 | 条件
ArgumentOutOfRangeException | indexA 大于 strA.Length。 - 或 - indexB 大于 strB.Length。 - 或 - indexA、indexB 或 length 为负。 - 或 - indexA 或 indexB 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而 length 大于零。
ArgumentException | comparisonType 不是一个 StringComparison 值。

strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0，而不是位置 1。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0，而不是位置 1。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0，而不是位置 1。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0，而不是位置 1。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。

要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。 要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。

comparisonType 参数指示比较是应使用当前区域性还是固定区域性，是应考虑还是应忽略比较字的大小写，是使用字（区分区域性）排序规则还是序号（不区分区域性）排序规则。

一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。 一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。

当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。

当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。 当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, true) == 0);
}

使用序号比较比较路径名与“file”。执行此操作的正确代码如下： 使用序号比较比较路径名与“file”。执行此操作的正确代码如下：

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, StringComparison::OrdinalIgnoreCase) == 0);
}

下面的示例比较两个子字符串。

' Sample for String.Compare(String, Int32, String, Int32, Int32)
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      '                       0123456
      Dim str1 As [String] = "machine"
      Dim str2 As [String] = "device"
      Dim str As [String]
      Dim result As Integer

      Console.WriteLine()
      Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2)
      result = [String].Compare(str1, 2, str2, 0, 2)
      str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
      Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1)
      Console.Write("{0} ", str)
      Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(0, 2), str2)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'str1 = 'machine', str2 = 'device'
'Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
'

// Sample for String.Compare(String, Int32, String, Int32, Int32)
using System;

class Sample {
    public static void Main() {
//                 0123456
    String str1 = "machine";
    String str2 = "device";
    String str;
    int result;

    Console.WriteLine();
    Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2);
    result = String.Compare(str1, 2, str2, 0, 2);
    str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
    Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(2, 2), str1);
    Console.Write("{0} ", str);
    Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(0, 2), str2);
    }
}
/*
This example produces the following results:

str1 = 'machine', str2 = 'device'
Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
*/

// Sample for String::Compare(String, Int32, String, Int32, Int32)
using namespace System;
int main()
{

   //                0123456
   String^ str1 = "machine";
   String^ str2 = "device";
   String^ str;
   int result;
   Console::WriteLine();
   Console::WriteLine( "str1 = '{0}', str2 = '{1}'", str1, str2 );
   result = String::Compare( str1, 2, str2, 0, 2 );
   str = ((result < 0) ? "less than" : ((result > 0) ? (String^)"greater than" : "equal to"));
   Console::Write( "Substring '{0}' in ' {1}' is ", str1->Substring( 2, 2 ), str1 );
   Console::Write( " {0} ", str );
   Console::WriteLine( "substring '{0}' in ' {1}'.", str2->Substring( 0, 2 ), str2 );
}

/*
This example produces the following results:

str1 = 'machine', str2 = 'device'
Substring 'ch' in 'machine' is less than substring 'de' in 'device'.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Compare 重载
System 命名空间
Int32
CompareOrdinal
CompareTo


String ..::.Compare 方法 (String, Int32, String, Int32, Int32, Boolean, CultureInfo)

String
.
.
::
.
Compare 方法 (String, Int32, String, Int32, Int32, Boolean, CultureInfo)
String 类

比较两个指定的 String 对象的子字符串（其中忽略或考虑其大小写，并使用区域性特定的信息干预比较），并返回一个整数，指示二者在排序顺序中的相对位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ indexA As Integer, _ strB As String, _ indexB As Integer, _ length As Integer, _ ignoreCase As Boolean, _ culture As CultureInfo _ ) As Integer
public static int Compare( string strA, int indexA, string strB, int indexB, int length, bool ignoreCase, CultureInfo culture )
public: static int Compare( String^ strA, int indexA, String^ strB, int indexB, int length, bool ignoreCase, CultureInfo^ culture )
static member Compare : strA:string * indexA:int * strB:string * indexB:int * length:int * ignoreCase:bool * culture:CultureInfo -> int
参数
strA
类型： System String
要在比较中使用的第一个字符串。
indexA
类型： System Int32
strA
中子字符串的位置。
strB
类型： System String
要在比较中使用的第二个字符串。
indexB
类型： System Int32
strB
中子字符串的位置。
length
类型： System Int32
要比较的子字符串中字符的最大数量。
ignoreCase
类型： System Boolean
要在比较过程中忽略大小写，则为
true
；否则为
false
。
culture
类型： System.Globalization CultureInfo
一个对象，提供区域性特定的比较信息。
返回值
类型： System Int32
一个整数，指示两个比较字之间的词法关系。
值
条件
小于零
strA
中的子字符串小于
strB
中的子字符串。
零
子字符串相等，或者
length
为零。
大于零
strA
中的子字符串大于
strB
中的子字符串。
异常 | 条件
ArgumentOutOfRangeException | indexA 大于 strA.Length。 - 或 - indexB 大于 strB.Length。 - 或 - indexA、indexB 或 length 为负。 - 或 - strA 或 strB 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而 length 大于零。
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0，而不是位置 1。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0，而不是位置 1。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0，而不是位置 1。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始。indexA 和 indexB 都是从零开始的；也就是说，strA 和 strB 的第一个字符在位置 0，而不是位置 1。第一个子字符串的长度等于 strA 的长度减 indexA 加一。第二个子字符串的长度等于 strB 的长度减 indexB 加一。

要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。 要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。

该比较使用 culture 参数来获取区域性特定的信息，如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。 该比较使用 culture 参数来获取区域性特定的信息，如大小写规则和各个字符的字母顺序。例如，区域性可以指定将某些字符的组合视为单个字符，或者用特殊方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。

使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 使用字排序规则执行比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。 一个或者两个比较字都可以是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括空字符串 ("")）的比较结果都大于 null 引用；两个 null 引用的比较结果为相等。

当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。

当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。 当比较受区域性特定的大小写规则影响时，可能会发生意外结果。例如，在土耳其语中，下面的示例将产生错误结果，因为土耳其语的文件系统不会对“file”中的字母“i”使用语义大小写规则。

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, True) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, true) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, true) == 0);
}

使用序号比较比较路径名与“file”。执行此操作的正确代码如下： 使用序号比较比较路径名与“file”。执行此操作的正确代码如下：

Shared Function IsFileURI(ByVal path As String) As Boolean
    If String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) = 0 Then
        Return True
    Else
        Return False
    End If
End Function

static bool IsFileURI(String path)
{
    return (String.Compare(path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0);
}

static bool IsFileURI(String^ path)
{
    return (String::Compare(path, 0, "file:", 0, 5, StringComparison::OrdinalIgnoreCase) == 0);
}

下面的示例使用不同的区域性对两个子字符串进行比较，比较时忽略子字符串的大小写。区域性的选择会影响如何比较字母“I”。 下面的示例使用不同的区域性对两个子字符串进行比较，比较时忽略子字符串的大小写。区域性的选择会影响如何比较字母“I”。

' Sample for String.Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo)
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Class Sample

   Public Shared Sub Main()
      '                       0123456
      Dim str1 As [String] = "MACHINE"
      Dim str2 As [String] = "machine"
      Dim str As [String]
      Dim result As Integer

      Console.WriteLine()
      Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2)
      Console.WriteLine("Ignore case, Turkish culture:")
      result = [String].Compare(str1, 4, str2, 4, 2, True, New CultureInfo("tr-TR"))
      str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
      Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(4, 2), str1)
      Console.Write("{0} ", str)
      Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(4, 2), str2)

      Console.WriteLine()
      Console.WriteLine("Ignore case, invariant culture:")
      result = [String].Compare(str1, 4, str2, 4, 2, True, CultureInfo.InvariantCulture)
      str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
      Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(4, 2), str1)
      Console.Write("{0} ", str)
      Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(4, 2), str2)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'str1 = 'MACHINE', str2 = 'machine'
'Ignore case, Turkish culture:
'Substring 'IN' in 'MACHINE' is less than substring 'in' in 'machine'.
'
'Ignore case, invariant culture:
'Substring 'IN' in 'MACHINE' is equal to substring 'in' in 'machine'.
'

// Sample for String.Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo)
using System;
using System.Globalization;

class Sample {
    public static void Main() {
//                 0123456
    String str1 = "MACHINE";
    String str2 = "machine";
    String str;
    int result;

    Console.WriteLine();
    Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2);
    Console.WriteLine("Ignore case, Turkish culture:");
    result = String.Compare(str1, 4, str2, 4, 2, true, new CultureInfo("tr-TR"));
    str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
    Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(4, 2), str1);
    Console.Write("{0} ", str);
    Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(4, 2), str2);

    Console.WriteLine();
    Console.WriteLine("Ignore case, invariant culture:");
    result = String.Compare(str1, 4, str2, 4, 2, true, CultureInfo.InvariantCulture);
    str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
    Console.Write("Substring '{0}' in '{1}' is ", str1.Substring(4, 2), str1);
    Console.Write("{0} ", str);
    Console.WriteLine("substring '{0}' in '{1}'.", str2.Substring(4, 2), str2);
    }
}
/*
This example produces the following results:

str1 = 'MACHINE', str2 = 'machine'
Ignore case, Turkish culture:
Substring 'IN' in 'MACHINE' is less than substring 'in' in 'machine'.

Ignore case, invariant culture:
Substring 'IN' in 'MACHINE' is equal to substring 'in' in 'machine'.
*/

// Sample for String::Compare(String, Int32, String, Int32, Int32, Boolean, CultureInfo)
using namespace System;
using namespace System::Globalization;
int main()
{

   //                0123456
   String^ str1 = "MACHINE";
   String^ str2 = "machine";
   String^ str;
   int result;
   Console::WriteLine();
   Console::WriteLine( "str1 = '{0}', str2 = '{1}'", str1, str2 );
   Console::WriteLine( "Ignore case, Turkish culture:" );
   result = String::Compare( str1, 4, str2, 4, 2, true, gcnew CultureInfo( "tr-TR" ) );
   str = ((result < 0) ? "less than" : ((result > 0) ? (String^)"greater than" : "equal to"));
   Console::Write( "Substring '{0}' in '{1}' is ", str1->Substring( 4, 2 ), str1 );
   Console::Write( " {0} ", str );
   Console::WriteLine( "substring '{0}' in '{1}'.", str2->Substring( 4, 2 ), str2 );
   Console::WriteLine();
   Console::WriteLine( "Ignore case, invariant culture:" );
   result = String::Compare( str1, 4, str2, 4, 2, true, CultureInfo::InvariantCulture );
   str = ((result < 0) ? "less than" : ((result > 0) ? (String^)"greater than" : "equal to"));
   Console::Write( "Substring '{0}' in '{1}' is ", str1->Substring( 4, 2 ), str1 );
   Console::Write( " {0} ", str );
   Console::WriteLine( "substring '{0}' in '{1}'.", str2->Substring( 4, 2 ), str2 );
}

/*
This example produces the following results:

str1 = 'MACHINE', str2 = 'machine'
Ignore case, Turkish culture:
Substring 'IN' in 'MACHINE' is less than substring 'in' in 'machine'.

Ignore case, invariant culture:
Substring 'IN' in 'MACHINE' is equal to substring 'in' in 'machine'.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Compare 重载
System 命名空间
Int32
CompareOrdinal
CompareTo


String ..::.Compare 方法 (String, Int32, String, Int32, Int32, CultureInfo, CompareOptions)

String
.
.
::
.
Compare 方法 (String, Int32, String, Int32, Int32, CultureInfo, CompareOptions)
String 类

对两个指定 String 对象的子字符串进行比较，使用指定的比较选项和区域性特定的信息来影响比较，并返回一个整数，该整数指示这两个子字符串在排序顺序中的关系。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ strA As String, _ indexA As Integer, _ strB As String, _ indexB As Integer, _ length As Integer, _ culture As CultureInfo, _ options As CompareOptions _ ) As Integer
public static int Compare( string strA, int indexA, string strB, int indexB, int length, CultureInfo culture, CompareOptions options )
public: static int Compare( String^ strA, int indexA, String^ strB, int indexB, int length, CultureInfo^ culture, CompareOptions options )
static member Compare : strA:string * indexA:int * strB:string * indexB:int * length:int * culture:CultureInfo * options:CompareOptions -> int
参数
strA
类型： System String
要在比较中使用的第一个字符串。
indexA
类型： System Int32
strA
中子字符串的起始位置。
strB
类型： System String
要在比较中使用的第二个字符串。
indexB
类型： System Int32
strB
中子字符串的起始位置。
length
类型： System Int32
要比较的子字符串中字符的最大数量。
culture
类型： System.Globalization CultureInfo
一个对象，提供区域性特定的比较信息。
options
类型： System.Globalization CompareOptions
要在执行比较时使用的选项（如忽略大小写或符号）。
返回值
类型： System Int32
一个整数，该整数用于指示两个子字符串之间的词法关系，如下表所示。
值
条件
小于零
strA
中的子字符串小于
strB
中的子字符串。
零
两个子字符串相等或者
length
为零。
大于零
strA
中的子字符串大于
strB
中的子字符串。
异常 | 条件
ArgumentException | options 不是一个 CompareOptions 值。
ArgumentOutOfRangeException | indexA 大于 strA.Length。 - 或 - indexB 大于 strB.Length。 - 或 - indexA、indexB 或 length 为负。 - 或 - strA 或 strB 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而 length 大于零。
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始第一个子字符串的长度为 strA 的长度减 indexA。第二个子字符串的长度为 strB 的长度减 indexB。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始第一个子字符串的长度为 strA 的长度减 indexA。第二个子字符串的长度为 strB 的长度减 indexB。 strA 和 strB 中要比较的子字符串分别从 indexA 和 indexB 开始第一个子字符串的长度为 strA 的长度减 indexA。第二个子字符串的长度为 strB 的长度减 indexB。

要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。 要比较的字符数是两个子字符串的长度和 length 中较少的那一个。indexA、indexB 和 length 参数必须为非负数。

此比较操作使用 culture 参数来获取区域性特定的信息，如大小写规则和各字符的字母顺序。例如，特定的区域性可以指定：将某些字符组合视为单个字符，用特定方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。 此比较操作使用 culture 参数来获取区域性特定的信息，如大小写规则和各字符的字母顺序。例如，特定的区域性可以指定：将某些字符组合视为单个字符，用特定方法比较大写和小写字符，或者字符的排序顺序取决于它前面或后面的字符。

警告说明 警告

Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的在于确定两个子字符串是否相等（即，方法调用的目的在于测试返回值是否为零），则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。 Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的在于确定两个子字符串是否相等（即，方法调用的目的在于测试返回值是否为零），则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。 Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的在于确定两个子字符串是否相等（即，方法调用的目的在于测试返回值是否为零），则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。

strA 和/或 strB 可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括 String..::.Empty）都大于 null 引用，两个 null 引用相等。 strA 和/或 strB 可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。根据定义，任何字符串（包括 String..::.Empty）都大于 null 引用，两个 null 引用相等。

通过 options 参数可以进一步指定比较，该参数由 System.Globalization..::.CompareOptions 枚举的一个或多个成员组成。但是，由于此方法的目的在于执行区分区域性的字符串比较，因此 CompareOptions..::.Ordinal 和 CompareOptions..::.OrdinalIgnoreCase 值将不起作用。 通过 options 参数可以进一步指定比较，该参数由 System.Globalization..::.CompareOptions 枚举的一个或多个成员组成。但是，由于此方法的目的在于执行区分区域性的字符串比较，因此 CompareOptions..::.Ordinal 和 CompareOptions..::.OrdinalIgnoreCase 值将不起作用。

当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。 当发现不相等或已经比较了两个子字符串时，比较就会终止。但是，如果两个字符串一直比较到其中一个字符串的末尾时仍相同，而另一个字符串仍有剩余字符，则认为仍有剩余字符的字符串较大。返回值为执行最后一次比较所得的结果。

下面的示例使用 Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) 方法比较两个人的姓氏。然后，按字母顺序列出比较结果。 下面的示例使用 Compare(String, Int32, String, Int32, Int32, CultureInfo, CompareOptions) 方法比较两个人的姓氏。然后，按字母顺序列出比较结果。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim name1 As String = "Jack Smith"
      Dim name2 = "John Doe"

      ' Get position of space character.
      Dim index1 As Integer = name1.IndexOf(" ")
      index1 = CInt(IIf(index1 < 0, 0, index1 - 1))

      Dim index2 As Integer = name2.IndexOf(" ")
      index1 = CInt(IIf(index1 < 0, 0, index1 - 1))

      Dim length As Integer = Math.Max(name1.Length, name2.Length)

      Console.WriteLIne("Sorted alphabetically by last name:")
      If String.Compare(name1, index1, name2, index2, length, _
                        New CultureInfo("en-US"), CompareOptions.IgnoreCase) < 0 Then
         Console.WriteLine("{0}{1}{2}", name1, vbCrLf, name2)
      Else
         Console.WriteLine("{0}{1}{2}", name2, vbCrLf, name1)
      End If
   End Sub
End Module
' The example displays the following output;
'       Sorted alphabetically by last name:
'       John Doe
'       Jack Smith

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string name1 = "Jack Smith";
      string name2 = "John Doe";

      // Get position of space character.
      int index1 = name1.IndexOf(" ");
      index1 = index1 < 0 ? 0 : index1--;

      int index2 = name2.IndexOf(" ");
      index1 = index1 < 0 ? 0 : index1--;

      int length = Math.Max(name1.Length, name2.Length);

      Console.WriteLine("Sorted alphabetically by last name:");
      if (String.Compare(name1, index1, name2, index2, length,
                         new CultureInfo("en-US"), CompareOptions.IgnoreCase) < 0)
         Console.WriteLine("{0}\n{1}", name1, name2);
      else
         Console.WriteLine("{0}\n{1}", name2, name1);
   }
}
// The example displays the following output:
//       Sorted alphabetically by last name:
//       John Doe
//       Jack Smith

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Compare 重载
System 命名空间
Equals


String ..::.CompareOrdinal 方法

String
.
.
::
.
CompareOrdinal 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

通过计算每个字符串中相应 Char 对象的数值来比较两个 String 对象。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.CompareOrdinal 方法 (String, String)

String
.
.
::
.
CompareOrdinal 方法 (String, String)
String 类

通过计算每个字符串中相应 Char 对象的数值来比较两个指定的 String 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CompareOrdinal ( _ strA As String, _ strB As String _ ) As Integer
public static int CompareOrdinal( string strA, string strB )
public: static int CompareOrdinal( String^ strA, String^ strB )
static member CompareOrdinal : strA:string * strB:string -> int
参数
strA
类型： System String
要比较的第一个字符串。
strB
类型： System String
要比较的第二个字符串。
返回值
类型： System Int32
一个整数，指示两个比较字之间的词法关系。
值
条件
小于零
strA
小于
strB
。
零
strA
与
strB
相等。
大于零
strA
大于
strB
。

此方法使用序号排序规则执行区分大小写的比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 此方法使用序号排序规则执行区分大小写的比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

下面的示例对两个仅大小写不同的字符串进行序号比较。

' Sample for String.CompareOrdinal(String, String)
Imports System
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim str1 As [String] = "ABCD"
      Dim str2 As [String] = "abcd"
      Dim str As [String]
      Dim result As Integer

      Console.WriteLine()
      Console.WriteLine("Compare the numeric values of the corresponding Char objects in each string.")
      Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2)
      result = [String].CompareOrdinal(str1, str2)
      str = IIf(result < 0, "less than", IIf(result > 0, "greater than", "equal to"))
      Console.Write("String '{0}' is ", str1)
      Console.Write("{0} ", str)
      Console.WriteLine("String '{0}'.", str2)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Compare the numeric values of the corresponding Char objects in each string.
'str1 = 'ABCD', str2 = 'abcd'
'String 'ABCD' is less than String 'abcd'.
'

// Sample for String.CompareOrdinal(String, String)
using System;

class Sample {
    public static void Main() {
    String str1 = "ABCD";
    String str2 = "abcd";
    String str;
    int result;

    Console.WriteLine();
    Console.WriteLine("Compare the numeric values of the corresponding Char objects in each string.");
    Console.WriteLine("str1 = '{0}', str2 = '{1}'", str1, str2);
    result = String.CompareOrdinal(str1, str2);
    str = ((result < 0) ? "less than" : ((result > 0) ? "greater than" : "equal to"));
    Console.Write("String '{0}' is ", str1);
    Console.Write("{0} ", str);
    Console.WriteLine("String '{0}'.", str2);
    }
}
/*
This example produces the following results:

Compare the numeric values of the corresponding Char objects in each string.
str1 = 'ABCD', str2 = 'abcd'
String 'ABCD' is less than String 'abcd'.
*/

// Sample for String::CompareOrdinal(String, String)
using namespace System;
int main()
{
   String^ str1 = "ABCD";
   String^ str2 = "abcd";
   String^ str;
   int result;
   Console::WriteLine();
   Console::WriteLine( "Compare the numeric values of the corresponding Char objects in each string." );
   Console::WriteLine( "str1 = '{0}', str2 = '{1}'", str1, str2 );
   result = String::CompareOrdinal( str1, str2 );
   str = ((result < 0) ? "less than" : ((result > 0) ? (String^)"greater than" : "equal to"));
   Console::Write( "String '{0}' is ", str1 );
   Console::Write( "{0} ", str );
   Console::WriteLine( "String '{0}'.", str2 );
}

/*
This example produces the following results:

Compare the numeric values of the corresponding Char objects in each string.
str1 = 'ABCD', str2 = 'abcd'
String 'ABCD' is less than String 'abcd'.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
CompareOrdinal 重载
System 命名空间
Int32
Compare
CompareTo


String ..::.CompareOrdinal 方法 (String, Int32, String, Int32, Int32)

String
.
.
::
.
CompareOrdinal 方法 (String, Int32, String, Int32, Int32)
String 类

通过计算两个指定的 String 对象的每个子字符串中相应 Char 对象的数值比较子字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CompareOrdinal ( _ strA As String, _ indexA As Integer, _ strB As String, _ indexB As Integer, _ length As Integer _ ) As Integer
public static int CompareOrdinal( string strA, int indexA, string strB, int indexB, int length )
public: static int CompareOrdinal( String^ strA, int indexA, String^ strB, int indexB, int length )
static member CompareOrdinal : strA:string * indexA:int * strB:string * indexB:int * length:int -> int
参数
strA
类型： System String
要在比较中使用的第一个字符串。
indexA
类型： System Int32
strA
中子字符串的起始索引。
strB
类型： System String
要在比较中使用的第二个字符串。
indexB
类型： System Int32
strB
中子字符串的起始索引。
length
类型： System Int32
要比较的子字符串中字符的最大数量。
返回值
类型： System Int32
一个 32 位带符号整数，指示两个比较数之间的词法关系。
值
条件
小于零
strA
中的子字符串小于
strB
中的子字符串。
零
子字符串相等，或者
length
为零。
大于零
strA
中的子字符串大于
strB
中的子字符串。
异常 | 条件
ArgumentOutOfRangeException | indexA 大于 strA。Length. indexA 大于 strA。Length. - 或 - indexB 大于 strB。Length. indexB 大于 strB。Length. - 或 - indexA、indexB 或 length 为负。

indexA、indexB 和 length 参数必须为非负数。

所比较的字符数是 strA 的长度减去 indexA、strB 的长度减去 indexB 和 length 这三者中最小的一个。

此方法使用序号排序规则执行区分大小写的比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 此方法使用序号排序规则执行区分大小写的比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

下面的示例演示 CompareOrdinal 和 Compare 使用不同的排序顺序。

Imports System
Imports System.Globalization

Class Test

  Public Shared Sub Main(args() As [String])
      Dim strLow As [String] = "abc"
      Dim strCap As [String] = "ABC"
      Dim result As [String] = "equal to "
      Dim x As Integer = 0
      Dim pos As Integer = 1

' The Unicode codepoint for 'b' is greater than the codepoint for 'B'.
      x = [String].CompareOrdinal(strLow, pos, strCap, pos, 1)
      If x < 0 Then
         result = "less than"
      End If
      If x > 0 Then
         result = "greater than"
      End If

' In U.S. English culture, 'b' is linguistically less than 'B'.
      Console.WriteLine("CompareOrdinal(""{0}"".Chars({2}), ""{1}"".Chars({2})):", strLow, strCap, pos)

      Console.WriteLine("   '{0}' is {1} '{2}'", strLow.Chars(pos), result, strCap.Chars(pos))

      x = [String].Compare(strLow, pos, strCap, pos, 1, False, New CultureInfo("en-US"))
      If x < 0 Then
         result = "less than"
      ElseIf x > 0 Then
         result = "greater than"
      End If
      Console.WriteLine("Compare(""{0}"".Chars({2}), ""{1}"".Chars({2})):", strLow, strCap, pos)
      Console.WriteLine("   '{0}' is {1} '{2}'", strLow.Chars(pos), result, strCap.Chars(pos))
   End Sub 'Main
End Class 'Test

using System;
using System.Globalization;

class Test
{
    public static void Main(String[] args)
    {
    String strLow = "abc";
    String strCap = "ABC";
    String result = "equal to ";
    int x = 0;
    int pos = 1;

// The Unicode codepoint for 'b' is greater than the codepoint for 'B'.
    x = String.CompareOrdinal(strLow, pos, strCap, pos, 1);
    if (x < 0) result = "less than";
    if (x > 0) result = "greater than";
    Console.WriteLine("CompareOrdinal(\"{0}\"[{2}], \"{1}\"[{2}]):", strLow, strCap, pos);
    Console.WriteLine("   '{0}' is {1} '{2}'", strLow[pos], result, strCap[pos]);

// In U.S. English culture, 'b' is linguistically less than 'B'.
    x = String.Compare(strLow, pos, strCap, pos, 1, false, new CultureInfo("en-US"));
    if (x < 0) result = "less than";
    else if (x > 0) result = "greater than";
    Console.WriteLine("Compare(\"{0}\"[{2}], \"{1}\"[{2}]):", strLow, strCap, pos);
    Console.WriteLine("   '{0}' is {1} '{2}'", strLow[pos], result, strCap[pos]);
    }
}

using namespace System;
using namespace System::Globalization;
int main()
{
   String^ strLow = "abc";
   String^ strCap = "ABC";
   String^ result = "equal to ";
   int x = 0;
   int pos = 1;

   // The Unicode codepoint for 'b' is greater than the codepoint for 'B'.
   x = String::CompareOrdinal( strLow, pos, strCap, pos, 1 );
   if ( x < 0 )
      result = "less than";

   if ( x > 0 )
      result = "greater than";

   Console::WriteLine( "CompareOrdinal(\"{0}\"[{2}], \"{1}\"[{2}]):", strLow, strCap, pos );
   Console::WriteLine( "   '{0}' is {1} '{2}'", strLow[ pos ], result, strCap[ pos ] );

   // In U.S. English culture, 'b' is linguistically less than 'B'.
   x = String::Compare( strLow, pos, strCap, pos, 1, false, gcnew CultureInfo( "en-US" ) );
   if ( x < 0 )
      result = "less than";
   else
   if ( x > 0 )
      result = "greater than";

   Console::WriteLine( "Compare(\"{0}\"[{2}], \"{1}\"[{2}]):", strLow, strCap, pos );
   Console::WriteLine( "   '{0}' is {1} '{2}'", strLow[ pos ], result, strCap[ pos ] );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
CompareOrdinal 重载
System 命名空间
Compare
CompareTo
Int32


String ..::.CompareTo 方法

String
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

将此实例与指定对象或 String 进行比较，并返回一个整数，该整数指示此实例在排序顺序中是位于指定对象或 String 之前、之后还是与其出现在同一位置。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.CompareTo 方法 (Object)

String
.
.
::
.
CompareTo 方法 (Object)
String 类

将此实例与指定的 Object 进行比较，并指示此实例在排序顺序中是位于指定的 Object 之前、之后还是与其出现在同一位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
一个对象，其计算结果为
String
。
返回值
类型： System Int32
一个 32 位带符号整数，该整数指示此实例在排序顺序中是位于
value
参数之前、之后还是与其出现在同一位置。
值
条件
小于零
此实例位于
value
之前。
零
此实例在排序顺序中的位置与
value
相同。
大于零
此实例位于
value
之后。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 String。

value 必须为 String 对象。

警告说明 警告

CompareTo 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的是确定两个字符串是否相等，则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。 CompareTo 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的是确定两个字符串是否相等，则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。 CompareTo 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的是确定两个字符串是否相等，则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。

此方法使用当前区域性执行单词（区分大小写和区域性）比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 此方法使用当前区域性执行单词（区分大小写和区域性）比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

有关此方法的行为的更多信息，请参见 String..::.Compare(String, String) 方法的备注部分。

下面的示例演示如何对 Object 使用 CompareTo 方法。

Imports System

Public Class [MyClass]
End Class '[MyClass]

Public Class ArgExceptionExample

   Public Shared Sub Main()
      Dim my As New [MyClass]()
      Dim s As String = "sometext"
      Try
         Dim i As Integer = s.CompareTo(my)
      Catch e As Exception
         Console.WriteLine("Error: {0}", e.ToString())
      End Try
   End Sub 'Main
End Class 'ArgExceptionExample

using System;

public class MyClass {}
public class ArgExceptionExample
   {
   public static void Main()
      {
      MyClass my = new MyClass();
      string s = "sometext";
      try
         {
         int i = s.CompareTo(my);
         }
            catch (Exception e)
            {
            Console.WriteLine("Error: {0}",e.ToString());
            }
      }
}

using namespace System;
public ref class MyClass{};

int main()
{
   MyClass^ my = gcnew MyClass;
   String^ s = "sometext";
   try
   {
      int i = s->CompareTo( my );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Error: {0}", e->ToString() );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
CompareTo 重载
System 命名空间
Compare
CompareOrdinal


String ..::.CompareTo 方法 (String)

String
.
.
::
.
CompareTo 方法 (String)
String 类

将此实例与指定的 String 对象进行比较，并指示此实例在排序顺序中是位于指定的 String 之前、之后还是与其出现在同一位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ strB As String _ ) As Integer
public int CompareTo( string strB )
public: virtual int CompareTo( String^ strB ) sealed
abstract CompareTo : strB:string -> int override CompareTo : strB:string -> int
参数
strB
类型： System String
要与此实例进行比较的字符串。
返回值
类型： System Int32
一个 32 位带符号整数，该整数指示此实例在排序顺序中是位于
value
参数之前、之后还是与其出现在同一位置。
值
条件
小于零
此实例位于
strB
之前。
零
此实例在排序顺序中的位置与
strB
相同。
大于零
此实例位于
strB
之后。
- 或 -
strB
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现

此方法使用当前区域性执行单词（区分大小写和区域性）比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。 此方法使用当前区域性执行单词（区分大小写和区域性）比较。有关字、字符串和顺序排序的更多信息，请参见 System.Globalization..::.CompareOptions。

警告说明 警告

CompareTo 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的是确定两个字符串是否相等，则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。 CompareTo 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的是确定两个字符串是否相等，则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。 CompareTo 方法主要用于排序或按字母顺序排列操作。如果方法调用的主要目的是确定两个字符串是否相等，则不应使用此方法。若要确定两个字符串是否相等，请调用 Equals 方法。

有关此方法的行为的更多信息，请参见 Compare 方法的备注部分。

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 String..::.CompareTo 方法，这是因为它不必将包含字符串的对象取消装箱。

下面的示例演示如何对另一个 String 使用 CompareTo 方法。

Imports System

Public Class CompareToTest

    Public Shared Sub Main()
        Dim strFirst As String = "Goodbye"
        Dim strSecond As String = "Hello"
        Dim strThird As String = "a small string"
        Dim strFourth As String = "goodbye"

        ' compare a string to itself
        Console.WriteLine(CompareStrings(strFirst, strFirst))

        Console.WriteLine(CompareStrings(strFirst, strSecond))
        Console.WriteLine(CompareStrings(strFirst, strThird))

        ' compare a string to another string that varies only by case
        Console.WriteLine(CompareStrings(strFirst, strFourth))
        Console.WriteLine(CompareStrings(strFourth, strFirst))
    End Sub 'Main

    Private Shared Function CompareStrings(str1 As String, str2 As String) As String
        Dim cmpVal As Integer = str1.CompareTo(str2)
        If cmpVal = 0 Then

            ' compare the values, using the CompareTo method on the first string

            ' the values are the same
            Return "The strings have the same value!"
        Else
            If cmpVal > 0 Then

                ' the first value is greater than the second value
                Return "The first string is greater than the second string!"
            Else

                ' the second string is greater than the first string
                Return "The second string is greater than the first string!"
            End If
        End If
    End Function 'CompareStrings
End Class 'CompareToTest

' This code example displays the following:
'
' The strings have the same value!
' The second string is greater than the first string!
' The first string is greater than the second string!
' The first string is greater than the second string!
' The second string is greater than the first string!

using System;

public class CompareToTest {
    public static void Main() {

        string strFirst = "Goodbye";
        string strSecond = "Hello";
        string strThird = "a small string";
        string strFourth = "goodbye";

        // compare a string to itself
        Console.WriteLine (CompareStrings(strFirst, strFirst));

        Console.WriteLine (CompareStrings(strFirst, strSecond));
        Console.WriteLine (CompareStrings(strFirst, strThird));

        // compare a string to another string that varies only by case
        Console.WriteLine (CompareStrings(strFirst, strFourth));
        Console.WriteLine (CompareStrings(strFourth, strFirst));
    }

    private static string CompareStrings( string str1, string str2 ) {

        // compare the values, using the CompareTo method on the first string
        int cmpVal = str1.CompareTo(str2);

    if (cmpVal == 0) // the values are the same
            return "The strings have the same value!";

        else if (cmpVal > 0) // the first value is greater than the second value
            return "The first string is greater than the second string!";

        else // the second string is greater than the first string
            return "The second string is greater than the first string!";
    }
}

// This code example displays the following:
//
// The strings have the same value!
// The second string is greater than the first string!
// The first string is greater than the second string!
// The first string is greater than the second string!
// The second string is greater than the first string!

using namespace System;
String^ CompareStrings( String^ str1, String^ str2 )
{

   // compare the values, using the CompareTo method on the first string
   int cmpVal = str1->CompareTo( str2 );
   if ( cmpVal == 0 )

   // the values are the same
   return "The strings have the same value!";
   else
   if ( cmpVal > 0 )

   // the first value is greater than the second value
   return "The first string is greater than the second string!";
   // the second string is greater than the first string
   else

   // the second string is greater than the first string
   return "The second string is greater than the first string!";
}

int main()
{
   String^ strFirst = "Goodbye";
   String^ strSecond = "Hello";
   String^ strThird = "a small String*";
   String^ strFourth = "goodbye";

   // compare a String* to itself
   Console::WriteLine( CompareStrings( strFirst, strFirst ) );
   Console::WriteLine( CompareStrings( strFirst, strSecond ) );
   Console::WriteLine( CompareStrings( strFirst, strThird ) );

   // compare a String* to another String* that varies only by case
   Console::WriteLine( CompareStrings( strFirst, strFourth ) );
   Console::WriteLine( CompareStrings( strFourth, strFirst ) );
}

// This code example displays the following:
//
// The strings have the same value!
// The second string is greater than the first string!
// The first string is greater than the second string!
// The first string is greater than the second string!
// The second string is greater than the first string!

下面的示例演示几种值和引用类型的泛型和非泛型 CompareTo 方法。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
CompareTo 重载
System 命名空间
Compare
CompareOrdinal


String ..::.Concat 方法

String
.
.
::
.
Concat 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

连接 String 的一个或多个实例，或 Object 的一个或多个实例的值的 String 表示形式。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Concat <(Of <(T >)>) 方法 (IEnumerable <(Of <(T >)>))

String
.
.
::
.
Concat
<
(Of
<
(
T
>
)
>
)
方法 (IEnumerable
<
(Of
<
(
T
>
)
>
)
)
String 类

串联 IEnumerable<(Of <(T>)>) 实现的成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function Concat(Of T) ( _
    values As IEnumerable(Of T) _
) As String
[ComVisibleAttribute(false)]
public static string Concat<T>(
    IEnumerable<T> values
)

[ComVisibleAttribute(false)]
public:
generic<typename T>
static String^ Concat(
    IEnumerable<T>^ values
)
[<ComVisibleAttribute(false)>]
static member Concat :
        values:IEnumerable<'T> -> string

类型参数

T

values 成员的类型。

参数

values
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
T
>
)
>
)

一个实现 IEnumerable<(Of <(T>)>) 接口的集合对象。

返回值

类型： System String
values 中的串联成员。
异常 | 条件
ArgumentNullException | values 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

该方法连接 values 中的每个对象；它不添加任何分隔符。

使用 Empty 字符串替代任何 null 参数。

Concat<(Of <(T>)>)(IEnumerable<(Of <(T>)>)) 是一个便利方法，通过它可以串联 IEnumerable<(Of <(T>)>) 集合中的每个元素，无需事先将元素转换为字符串。如示例所示，它对于语言集成查询 (LINQ) 查询表达式特别有用。IEnumerable<(Of <(T>)>) 集合中每个对象的字符串表示形式通过调用对象的 ToString 方法派生。 Concat<(Of <(T>)>)(IEnumerable<(Of <(T>)>)) 是一个便利方法，通过它可以串联 IEnumerable<(Of <(T>)>) 集合中的每个元素，无需事先将元素转换为字符串。如示例所示，它对于语言集成查询 (LINQ) 查询表达式特别有用。IEnumerable<(Of <(T>)>) 集合中每个对象的字符串表示形式通过调用对象的 ToString 方法派生。 Concat<(Of <(T>)>)(IEnumerable<(Of <(T>)>)) 是一个便利方法，通过它可以串联 IEnumerable<(Of <(T>)>) 集合中的每个元素，无需事先将元素转换为字符串。如示例所示，它对于语言集成查询 (LINQ) 查询表达式特别有用。IEnumerable<(Of <(T>)>) 集合中每个对象的字符串表示形式通过调用对象的 ToString 方法派生。

下面的示例定义了一个非常简单的 Animal 类，包含宠物名称及其所属的订单。然后，它定义一个 List<(Of <(T>)>) 对象，该对象包含许多 Animal 对象。调用 Enumerable..::.Where 扩展方法来提取其 Order 属性等于 "Rodent" 的 Animal 对象。结果传递给 Concat<(Of <(T>)>)(IEnumerable<(Of <(T>)>)) 方法并显示到控制台。 下面的示例定义了一个非常简单的 Animal 类，包含宠物名称及其所属的订单。然后，它定义一个 List<(Of <(T>)>) 对象，该对象包含许多 Animal 对象。调用 Enumerable..::.Where 扩展方法来提取其 Order 属性等于 "Rodent" 的 Animal 对象。结果传递给 Concat<(Of <(T>)>)(IEnumerable<(Of <(T>)>)) 方法并显示到控制台。 下面的示例定义了一个非常简单的 Animal 类，包含宠物名称及其所属的订单。然后，它定义一个 List<(Of <(T>)>) 对象，该对象包含许多 Animal 对象。调用 Enumerable..::.Where 扩展方法来提取其 Order 属性等于 "Rodent" 的 Animal 对象。结果传递给 Concat<(Of <(T>)>)(IEnumerable<(Of <(T>)>)) 方法并显示到控制台。 下面的示例定义了一个非常简单的 Animal 类，包含宠物名称及其所属的订单。然后，它定义一个 List<(Of <(T>)>) 对象，该对象包含许多 Animal 对象。调用 Enumerable..::.Where 扩展方法来提取其 Order 属性等于 "Rodent" 的 Animal 对象。结果传递给 Concat<(Of <(T>)>)(IEnumerable<(Of <(T>)>)) 方法并显示到控制台。

Imports System.Collections.Generic

Public Class Animal
   Public Kind As String
   Public Order As String

   Public Sub New(kind As String, order As String)
      Me.Kind = kind
      Me.Order = order
   End Sub

   Public Overrides Function ToString() As String
      Return Me.Kind
   End Function
End Class

Module Example
   Public Sub Main()
      Dim animals As New List(Of Animal)
      animals.Add(New Animal("Squirrel", "Rodent"))
      animals.Add(New Animal("Gray Wolf", "Carnivora"))
      animals.Add(New Animal("Capybara", "Rodent"))
      Dim output As String = String.Concat(animals.Where(Function(animal) _
                                           animal.Order = "Rodent"))
      Console.WriteLine(output)
   End Sub
End Module
' The example displays the following output:
'      SquirrelCapybara

using System;
using System.Collections.Generic;
using System.Linq;

public class Animal
{
   public string Kind;
   public string Order;

   public Animal(string kind, string order)
   {
      this.Kind = kind;
      this.Order = order;
   }

   public override string ToString()
   {
      return this.Kind;
   }
}

public class Example
{
   public static void Main()
   {
      List<Animal> animals = new List<Animal>();
      animals.Add(new Animal("Squirrel", "Rodent"));
      animals.Add(new Animal("Gray Wolf", "Carnivora"));
      animals.Add(new Animal("Capybara", "Rodent"));
      string output = String.Concat(animals.Where( animal =>
                      (animal.Order == "Rodent")));
      Console.WriteLine(output);
   }
}
// The example displays the following output:
//      SquirrelCapybara

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Concat 重载
System 命名空间


String ..::.Concat 方法 (Object)

String
.
.
::
.
Concat 方法 (Object)
String 类

创建指定对象的 String 表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Concat ( _
    arg0 As Object _
) As String
public static string Concat(
    Object arg0
)
public:
static String^ Concat(
    Object^ arg0
)
static member Concat :
        arg0:Object -> string

参数

arg0
类型： System Object
要表示的对象，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System String
arg0 的值的字符串表示形式。

使用 Empty 字符串替代任何 null 参数。

下面的示例说明 Concat 方法。

Imports System
Imports Microsoft.VisualBasic
 _

Class stringConcat5

   Public Shared Sub Main()
      Dim i As Integer = - 123
      Dim o As [Object] = i
      Dim objs() As [Object] = {- 123, - 456, - 789}

      Console.WriteLine("Concatenate 1, 2, and 3 objects:")
      Console.WriteLine("1) {0}", [String].Concat(o))
      Console.WriteLine("2) {0}", [String].Concat(o, o))
      Console.WriteLine("3) {0}", [String].Concat(o, o, o))

      Console.WriteLine(vbCrLf & "Concatenate 4 objects and a variable length parameter list:")
      Console.WriteLine("4) {0}", [String].Concat(o, o, o, o, o))

      Console.WriteLine(vbCrLf & "Concatenate a 3 element object array:")
      Console.WriteLine("5) {0}", [String].Concat(objs))
   End Sub 'Main
End Class 'stringConcat5
'
'This example produces the following output:
'Concatenate 1, 2, and 3 objects:
'1) -123
'2) -123-123
'3) -123-123-123
'
'Concatenate 4 objects and a variable length parameter list:
'4) -123-123-123-123-123
'
'Concatenate a 3 element object array:
'5) -123-456-789
'

using System;

class stringConcat5 {
    public static void Main() {
    int i = -123;
    Object o = i;
    Object[] objs = new Object[] {-123, -456, -789};

    Console.WriteLine("Concatenate 1, 2, and 3 objects:");
    Console.WriteLine("1) {0}", String.Concat(o));
    Console.WriteLine("2) {0}", String.Concat(o, o));
    Console.WriteLine("3) {0}", String.Concat(o, o, o));

    Console.WriteLine("\nConcatenate 4 objects and a variable length parameter list:");
    Console.WriteLine("4) {0}", String.Concat(o, o, o, o, o));

    Console.WriteLine("\nConcatenate a 3 element object array:");
    Console.WriteLine("5) {0}", String.Concat(objs));
    }
}
/*
This example produces the following output:
Concatenate 1, 2, and 3 objects:
1) -123
2) -123-123
3) -123-123-123

Concatenate 4 objects and a variable length parameter list:
4) -123-123-123-123-123

Concatenate a 3 element object array:
5) -123-456-789
*/

using namespace System;
int main()
{
   int i = -123;
   Object^ o = i;
   array<Object^>^objs = { -123, -456, -789};
   Console::WriteLine( "Concatenate 1, 2, and 3 objects:" );
   Console::WriteLine( "1) {0}", String::Concat( o ) );
   Console::WriteLine( "2) {0}", String::Concat( o, o ) );
   Console::WriteLine( "3) {0}", String::Concat( o, o, o ) );
   Console::WriteLine( "\nConcatenate 4 objects and a variable length parameter list:" );
   Console::WriteLine( "4) {0}", String::Concat( o, o, o, o, o ) );
   Console::WriteLine( "\nConcatenate a 3 element object array:" );
   Console::WriteLine( "5) {0}", String::Concat( objs ) );
}

/*
This example produces the following output:
Concatenate 1, 2, and 3 objects:
1) -123
2) -123-123
3) -123-123-123

Concatenate 4 objects and a variable length parameter list:
4) -123-123-123-123-123

Concatenate a 3 element object array:
5) -123-456-789
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Concat 重载
System 命名空间
Object
Join


String ..::.Concat 方法 ( array<Object >[]()[])

String
.
.
::
.
Concat 方法 (
array<
Object
>
[]
()
[]
)
String 类

连接指定 Object 数组中的元素的 String 表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Concat ( _
    ParamArray args As Object() _
) As String
public static string Concat(
    params Object[] args
)
public:
static String^ Concat(
    ... array<Object^>^ args
)
static member Concat :
        args:Object[] -> string

参数

args
类型：
array<
System Object
>
[]
()
[]

一个对象数组，其中包含要连接的元素。

返回值

类型： System String
args 中元素的值经过连接的字符串表示形式。
异常 | 条件
ArgumentNullException | args 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
OutOfMemoryException | 内存不足。

该方法连接 args 中的每个对象；它不添加任何分隔符。

使用 Empty 字符串替代数组中的任何 null 对象。

对调用者的说明

此方法不可由 C++ 代码调用。C++ 编译器将对包含四个或更多对象参数的 Concat 的调用解析为对 Concat(Object, Object, Object, Object) 的调用。 此方法不可由 C++ 代码调用。C++ 编译器将对包含四个或更多对象参数的 Concat 的调用解析为对 Concat(Object, Object, Object, Object) 的调用。

下面的示例演示如何对 Object 数组使用 Concat 方法。

Imports System

Public Class ConcatTest

    Public Shared Sub Main()
        Dim t1 As New Test1()
        Dim t2 As New Test2()
        Dim i As Integer = 16
        Dim s As String = "Demonstration"
        Dim o As Object() = {t1, i, t2, s}

        ' create a group of objects

        ' place the objects in an array

        ' concatenate the objects together as a string. To do this,
        ' the ToString method in the objects is called
        Console.WriteLine(String.Concat(o))
    End Sub 'Main
End Class 'ConcatTest

' imagine these test classes are full-fledged objects...
Class Test1
End Class 'Test1

Class Test2
End Class 'Test2

using System;

public class ConcatTest {
    public static void Main() {
        // Create a group of objects.
        Test1 t1 = new Test1();
        Test2 t2 = new Test2();
        int i = 16;
        string s = "Demonstration";

        // Place the objects in an array.
        object [] o = { t1, i, t2, s };

        // Concatenate the objects together as a string. To do this,
        // the ToString method of each of the objects is called.
        Console.WriteLine(string.Concat(o));
    }
}

// Create two empty test classes.
class Test1 {
}

class Test2 {
}
// The example displays the following output:
//       Test116Test2Demonstration

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Concat 重载
System 命名空间
Object
Join


String ..::.Concat 方法 (IEnumerable <(Of <(String >)>))

String
.
.
::
.
Concat 方法 (IEnumerable
<
(Of
<
(
String
>
)
>
)
)
String 类

串联类型为 String 的 IEnumerable<(Of <(T>)>) 构造集合的成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function Concat ( _
    values As IEnumerable(Of String) _
) As String
[ComVisibleAttribute(false)]
public static string Concat(
    IEnumerable<string> values
)
[ComVisibleAttribute(false)]
public:
static String^ Concat(
    IEnumerable<String^>^ values
)
[<ComVisibleAttribute(false)>]
static member Concat :
        values:IEnumerable<string> -> string

参数

values
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
String
>
)
>
)

一个集合对象，该对象实现 IEnumerable<(Of <(T>)>)，且其泛型类型参数为 String。

返回值

类型： System String
values 中的串联字符串。
异常 | 条件
ArgumentNullException | values 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

该方法连接 values 中的每个对象；它不添加任何分隔符。若要在 values 的每个成员间指定分隔符，请调用 Join(String, IEnumerable<(Of <(String>)>)) 方法。 该方法连接 values 中的每个对象；它不添加任何分隔符。若要在 values 的每个成员间指定分隔符，请调用 Join(String, IEnumerable<(Of <(String>)>)) 方法。

使用 Empty 字符串替代任何 null 参数。

Concat(IEnumerable<(Of <(String>)>)) 是一个便利方法，通过它可以串联 IEnumerable(Of String) 集合中的每个元素，无需事先将元素转换为字符串数组。它对于语言集成查询 (LINQ) 查询表达式特别有用。下面的示例将包含字母表大写或小写字母的 List(Of String) 对象传递到 lambda 表达式，该表达式选择等于或大于特定字母（在此示例中为 "M"）的字母。Enumerable..::.Where 方法返回的 IEnumerable(Of String) 集合传递到 Concat(IEnumerable<(Of <(String>)>)) 方法，将结果显示为单个字符串。 Concat(IEnumerable<(Of <(String>)>)) 是一个便利方法，通过它可以串联 IEnumerable(Of String) 集合中的每个元素，无需事先将元素转换为字符串数组。它对于语言集成查询 (LINQ) 查询表达式特别有用。下面的示例将包含字母表大写或小写字母的 List(Of String) 对象传递到 lambda 表达式，该表达式选择等于或大于特定字母（在此示例中为 "M"）的字母。Enumerable..::.Where 方法返回的 IEnumerable(Of String) 集合传递到 Concat(IEnumerable<(Of <(String>)>)) 方法，将结果显示为单个字符串。 Concat(IEnumerable<(Of <(String>)>)) 是一个便利方法，通过它可以串联 IEnumerable(Of String) 集合中的每个元素，无需事先将元素转换为字符串数组。它对于语言集成查询 (LINQ) 查询表达式特别有用。下面的示例将包含字母表大写或小写字母的 List(Of String) 对象传递到 lambda 表达式，该表达式选择等于或大于特定字母（在此示例中为 "M"）的字母。Enumerable..::.Where 方法返回的 IEnumerable(Of String) 集合传递到 Concat(IEnumerable<(Of <(String>)>)) 方法，将结果显示为单个字符串。 Concat(IEnumerable<(Of <(String>)>)) 是一个便利方法，通过它可以串联 IEnumerable(Of String) 集合中的每个元素，无需事先将元素转换为字符串数组。它对于语言集成查询 (LINQ) 查询表达式特别有用。下面的示例将包含字母表大写或小写字母的 List(Of String) 对象传递到 lambda 表达式，该表达式选择等于或大于特定字母（在此示例中为 "M"）的字母。Enumerable..::.Where 方法返回的 IEnumerable(Of String) 集合传递到 Concat(IEnumerable<(Of <(String>)>)) 方法，将结果显示为单个字符串。

Imports System.Collections.Generic
Imports System.Linq

Module modMain
   Public Sub Main()
      Dim output As String = String.Concat(GetAlphabet(true).Where(Function(letter) _
                                                         letter >= "M"))

      Console.WriteLine(output)
   End Sub

   Private Function GetAlphabet(upper As Boolean) As List(Of String)
      Dim alphabet As New List(Of String)
      Dim charValue As Integer = CInt(IIf(upper, 65, 97))
      For ctr As Integer = 0 To 25
         alphabet.Add(ChrW(charValue + ctr).ToString())
      Next
      Return alphabet
   End Function
End Module
' The example displays the following output:
'       MNOPQRSTUVWXYZ

using System;
using System.Collections.Generic;
using System.Linq;

public class Example
{
   public static void Main()
   {
      string output = String.Concat( GetAlphabet(true).Where( letter =>
                      letter.CompareTo("M") >= 0));
      Console.WriteLine(output);
   }

   private static List<string> GetAlphabet(bool upper)
   {
      List<string> alphabet = new List<string>();
      int charValue = upper ? 65 : 97;
      for (int ctr = 0; ctr <= 25; ctr++)
         alphabet.Add(Convert.ToChar(charValue + ctr).ToString());
      return alphabet;
   }
}
// The example displays the following output:
//      MNOPQRSTUVWXYZ

下面的示例使用埃拉托色尼斯筛法算法计算小于或等于 100 的质数。它将结果赋值给 String 类型的 List<(Of <(T>)>) 对象，然后将其传递到 Concat(IEnumerable<(Of <(String>)>)) 方法。 下面的示例使用埃拉托色尼斯筛法算法计算小于或等于 100 的质数。它将结果赋值给 String 类型的 List<(Of <(T>)>) 对象，然后将其传递到 Concat(IEnumerable<(Of <(String>)>)) 方法。

Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim maxPrime As Integer = 100
      Dim primeList As IEnumerable(Of String) = GetPrimes(maxPrime)
      Console.WriteLine("Primes less than {0}:", maxPrime)
      Console.WriteLine("   {0}", String.Concat(primeList))
   End Sub

   Private Function GetPrimes(maxPrime As Integer) As IEnumerable(Of String)
      Dim values As Array = Array.CreateInstance(GetType(Integer), _
                              New Integer() { maxPrime - 1}, New Integer(){ 2 })
      ' Use Sieve of Erathsthenes to determine prime numbers.
      For ctr As Integer = values.GetLowerBound(0) To _
                           CInt(Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))))
         If CInt(values.GetValue(ctr)) = 1 Then Continue For

         For multiplier As Integer = ctr To maxPrime \ 2
            If ctr * multiplier <= maxPrime Then values.SetValue(1, ctr * multiplier)
         Next
      Next

      Dim primes As New List(Of String)
      For ctr As Integer = values.GetLowerBound(0) To values.GetUpperBound(0)
         If CInt(values.GetValue(ctr)) = 0 Then primes.Add(ctr.ToString() + " ")
      Next
      Return primes
   End Function
End Module
' The example displays the following output:
'    Primes less than 100:
'       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      int maxPrime = 100;
      IEnumerable<String> primeList = GetPrimes(maxPrime);
      Console.WriteLine("Primes less than {0}:", maxPrime);
      Console.WriteLine("   {0}", String.Concat(primeList));
   }

   private static IEnumerable<String> GetPrimes(int maxPrime)
   {
      Array values = Array.CreateInstance(typeof(int),
                              new int[] { maxPrime - 1}, new int[] { 2 });
      // Use Sieve of Erathsthenes to determine prime numbers.
      for (int ctr = values.GetLowerBound(0); ctr <= (int) Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))); ctr++)
      {

         if ((int) values.GetValue(ctr) == 1) continue;

         for (int multiplier = ctr; multiplier <=  maxPrime / 2; multiplier++)
            if (ctr * multiplier <= maxPrime)
               values.SetValue(1, ctr * multiplier);
      }

      List<String> primes = new List<String>();
      for (int ctr = values.GetLowerBound(0); ctr <= values.GetUpperBound(0); ctr++)
         if ((int) values.GetValue(ctr) == 0)
            primes.Add(ctr.ToString() + " ");
      return primes;
   }
}
// The example displays the following output:
//    Primes less than 100:
//       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Concat 重载
System 命名空间


String ..::.Concat 方法 ( array<String >[]()[])

String
.
.
::
.
Concat 方法 (
array<
String
>
[]
()
[]
)
String 类

连接指定的 String 数组的元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Concat ( _
    ParamArray values As String() _
) As String
public static string Concat(
    params string[] values
)
public:
static String^ Concat(
    ... array<String^>^ values
)
static member Concat :
        values:string[] -> string

参数

values
类型：
array<
System String
>
[]
()
[]

字符串实例的数组。

返回值

类型： System String
values 的连接元素。
异常 | 条件
ArgumentNullException | values 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
OutOfMemoryException | 内存不足。

该方法连接 values 中的每个对象；它不添加任何分隔符。

使用 Empty 字符串替代数组中的任何 null 对象。

下面的示例演示如何对 String 数组使用 Concat 方法。

Imports System

Public Class ConcatTest

    Public Shared Sub Main()
        Dim s As String() = {"hello ", "and ", "welcome ", "to ", "this ", "demo! "}

        ' make an array of strings. Note that we have included spaces

        ' put all the strings together
        Console.WriteLine(String.Concat(s))

        ' sort the strings, and put them together
        Array.Sort(s)
        Console.WriteLine(String.Concat(s))
    End Sub 'Main
End Class 'ConcatTest

using System;

public class ConcatTest {
    public static void Main() {

        // make an array of strings. Note that we have included spaces
        string [] s = { "hello ", "and ", "welcome ", "to ", "this ", "demo! " };

        // put all the strings together
        Console.WriteLine(string.Concat(s));

        // sort the strings, and put them together
        Array.Sort(s);
        Console.WriteLine(string.Concat(s));
    }
}

using namespace System;
int main()
{

   // make an array of strings. Note that we have included spaces
   array<String^>^s = {"hello ","and ","welcome ","to ","this ","demo! "};

   // put all the strings together
   Console::WriteLine( String::Concat( s ) );

   // sort the strings, and put them together
   Array::Sort( s );
   Console::WriteLine( String::Concat( s ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Concat 重载
System 命名空间
Join


String ..::.Concat 方法 (Object, Object)

String
.
.
::
.
Concat 方法 (Object, Object)
String 类

连接两个指定对象的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Concat ( _
    arg0 As Object, _
    arg1 As Object _
) As String
public static string Concat(
    Object arg0,
    Object arg1
)
public:
static String^ Concat(
    Object^ arg0,
    Object^ arg1
)
static member Concat :
        arg0:Object *
        arg1:Object -> string

参数

arg0
类型： System Object
要连接的第一个对象。
arg1
类型： System Object
要连接的第二个对象。

返回值

类型： System String
arg0 和 arg1 的值经过连接的字符串表示形式。

该方法连接 arg0 和 arg1；它不添加任何分隔符。

使用 Empty 字符串替代任何 null 参数。

如果其中任一参数为数组引用，则此方法将连接表示该数组的字符串，而不是其成员（例如“System.String[]”）。

下面的示例说明 Concat 方法。

Imports System
Imports Microsoft.VisualBasic
 _

Class stringConcat5

   Public Shared Sub Main()
      Dim i As Integer = - 123
      Dim o As [Object] = i
      Dim objs() As [Object] = {- 123, - 456, - 789}

      Console.WriteLine("Concatenate 1, 2, and 3 objects:")
      Console.WriteLine("1) {0}", [String].Concat(o))
      Console.WriteLine("2) {0}", [String].Concat(o, o))
      Console.WriteLine("3) {0}", [String].Concat(o, o, o))

      Console.WriteLine(vbCrLf & "Concatenate 4 objects and a variable length parameter list:")
      Console.WriteLine("4) {0}", [String].Concat(o, o, o, o, o))

      Console.WriteLine(vbCrLf & "Concatenate a 3 element object array:")
      Console.WriteLine("5) {0}", [String].Concat(objs))
   End Sub 'Main
End Class 'stringConcat5
'
'This example produces the following output:
'Concatenate 1, 2, and 3 objects:
'1) -123
'2) -123-123
'3) -123-123-123
'
'Concatenate 4 objects and a variable length parameter list:
'4) -123-123-123-123-123
'
'Concatenate a 3 element object array:
'5) -123-456-789
'

using System;

class stringConcat5 {
    public static void Main() {
    int i = -123;
    Object o = i;
    Object[] objs = new Object[] {-123, -456, -789};

    Console.WriteLine("Concatenate 1, 2, and 3 objects:");
    Console.WriteLine("1) {0}", String.Concat(o));
    Console.WriteLine("2) {0}", String.Concat(o, o));
    Console.WriteLine("3) {0}", String.Concat(o, o, o));

    Console.WriteLine("\nConcatenate 4 objects and a variable length parameter list:");
    Console.WriteLine("4) {0}", String.Concat(o, o, o, o, o));

    Console.WriteLine("\nConcatenate a 3 element object array:");
    Console.WriteLine("5) {0}", String.Concat(objs));
    }
}
/*
This example produces the following output:
Concatenate 1, 2, and 3 objects:
1) -123
2) -123-123
3) -123-123-123

Concatenate 4 objects and a variable length parameter list:
4) -123-123-123-123-123

Concatenate a 3 element object array:
5) -123-456-789
*/

using namespace System;
int main()
{
   int i = -123;
   Object^ o = i;
   array<Object^>^objs = { -123, -456, -789};
   Console::WriteLine( "Concatenate 1, 2, and 3 objects:" );
   Console::WriteLine( "1) {0}", String::Concat( o ) );
   Console::WriteLine( "2) {0}", String::Concat( o, o ) );
   Console::WriteLine( "3) {0}", String::Concat( o, o, o ) );
   Console::WriteLine( "\nConcatenate 4 objects and a variable length parameter list:" );
   Console::WriteLine( "4) {0}", String::Concat( o, o, o, o, o ) );
   Console::WriteLine( "\nConcatenate a 3 element object array:" );
   Console::WriteLine( "5) {0}", String::Concat( objs ) );
}

/*
This example produces the following output:
Concatenate 1, 2, and 3 objects:
1) -123
2) -123-123
3) -123-123-123

Concatenate 4 objects and a variable length parameter list:
4) -123-123-123-123-123

Concatenate a 3 element object array:
5) -123-456-789
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Concat 重载
System 命名空间
Object
Join


String ..::.Concat 方法 (String, String)

String
.
.
::
.
Concat 方法 (String, String)
String 类

连接 String 的两个指定实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Concat ( _
    str0 As String, _
    str1 As String _
) As String
public static string Concat(
    string str0,
    string str1
)
public:
static String^ Concat(
    String^ str0,
    String^ str1
)
static member Concat :
        str0:string *
        str1:string -> string

参数

str0
类型： System String
要连接的第一个字符串。
str1
类型： System String
要连接的第二个字符串。

返回值

类型： System String
str0 和 str1 的连接。

该方法连接 str0 和 str1；它不添加任何分隔符。

使用 Empty 字符串替代任何 null 参数。

下面的示例将一个人的名字、中间名和姓氏串联起来。

Public Class ConcatTest
    Public Shared Sub Main()
        Dim fName As String = "Simon"
        Dim mName As String = "Jake"
        Dim lName As String = "Harrows"

        ' We want to simply quickly add this person's name together.
        ' Because we want a name to appear with a space in between each name,
        ' we put a space on the front of the middle, and last name, allowing for
        ' the fact that a space may already be there.
        mName = " " + mName.Trim()
        lName = " " + lName.Trim()

        ' This line simply concatenates the two strings.
        Console.WriteLine("Welcome to this page, '{0}'!", _
                          String.Concat(String.Concat(fName, mName), lName))
    End Sub
End Class

using System;

public class ConcatTest {
    public static void Main() {

        // we want to simply quickly add this person's name together
        string fName = "Simon";
        string mName = "Jake";
        string lName = "Harrows";

        // because we want a name to appear with a space in between each name,
        // put a space on the front of the middle, and last name, allowing for
        // the fact that a space may already be there
        mName = " " + mName.Trim();
        lName = " " + lName.Trim();

        // this line simply concatenates the two strings
        Console.WriteLine("Welcome to this page, '{0}'!", string.Concat( string.Concat(fName, mName), lName ) );
    }
}

using namespace System;
int main()
{

   // we want to simply quickly add this person's name together
   String^ fName = "Simon";
   String^ mName = "Jake";
   String^ lName = "Harrows";

   // because we want a name to appear with a space in between each name,
   // put a space on the front of the middle, and last name, allowing for
   // the fact that a space may already be there
   mName = String::Concat(  " ", mName->Trim() );
   lName = String::Concat(  " ", lName->Trim() );

   // this line simply concatenates the two strings
   Console::WriteLine( "Welcome to this page, '{0}'!", String::Concat( String::Concat( fName, mName ), lName ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Concat 重载
System 命名空间
Join


String ..::.Concat 方法 (Object, Object, Object)

String
.
.
::
.
Concat 方法 (Object, Object, Object)
String 类

连接三个指定对象的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Concat ( _
    arg0 As Object, _
    arg1 As Object, _
    arg2 As Object _
) As String
public static string Concat(
    Object arg0,
    Object arg1,
    Object arg2
)
public:
static String^ Concat(
    Object^ arg0,
    Object^ arg1,
    Object^ arg2
)
static member Concat :
        arg0:Object *
        arg1:Object *
        arg2:Object -> string

参数

arg0
类型： System Object
要连接的第一个对象。
arg1
类型： System Object
要连接的第二个对象。
arg2
类型： System Object
要连接的第三个对象。

返回值

类型： System String
arg0、arg1 和 arg2 的值经过连接的字符串表示形式。

该方法连接 arg0、arg1 和 arg2；它不添加任何分隔符。

使用 Empty 字符串替代任何 null 参数。

下面的示例说明 Concat 方法。

Imports System
Imports Microsoft.VisualBasic
 _

Class stringConcat5

   Public Shared Sub Main()
      Dim i As Integer = - 123
      Dim o As [Object] = i
      Dim objs() As [Object] = {- 123, - 456, - 789}

      Console.WriteLine("Concatenate 1, 2, and 3 objects:")
      Console.WriteLine("1) {0}", [String].Concat(o))
      Console.WriteLine("2) {0}", [String].Concat(o, o))
      Console.WriteLine("3) {0}", [String].Concat(o, o, o))

      Console.WriteLine(vbCrLf & "Concatenate 4 objects and a variable length parameter list:")
      Console.WriteLine("4) {0}", [String].Concat(o, o, o, o, o))

      Console.WriteLine(vbCrLf & "Concatenate a 3 element object array:")
      Console.WriteLine("5) {0}", [String].Concat(objs))
   End Sub 'Main
End Class 'stringConcat5
'
'This example produces the following output:
'Concatenate 1, 2, and 3 objects:
'1) -123
'2) -123-123
'3) -123-123-123
'
'Concatenate 4 objects and a variable length parameter list:
'4) -123-123-123-123-123
'
'Concatenate a 3 element object array:
'5) -123-456-789
'

using System;

class stringConcat5 {
    public static void Main() {
    int i = -123;
    Object o = i;
    Object[] objs = new Object[] {-123, -456, -789};

    Console.WriteLine("Concatenate 1, 2, and 3 objects:");
    Console.WriteLine("1) {0}", String.Concat(o));
    Console.WriteLine("2) {0}", String.Concat(o, o));
    Console.WriteLine("3) {0}", String.Concat(o, o, o));

    Console.WriteLine("\nConcatenate 4 objects and a variable length parameter list:");
    Console.WriteLine("4) {0}", String.Concat(o, o, o, o, o));

    Console.WriteLine("\nConcatenate a 3 element object array:");
    Console.WriteLine("5) {0}", String.Concat(objs));
    }
}
/*
This example produces the following output:
Concatenate 1, 2, and 3 objects:
1) -123
2) -123-123
3) -123-123-123

Concatenate 4 objects and a variable length parameter list:
4) -123-123-123-123-123

Concatenate a 3 element object array:
5) -123-456-789
*/

using namespace System;
int main()
{
   int i = -123;
   Object^ o = i;
   array<Object^>^objs = { -123, -456, -789};
   Console::WriteLine( "Concatenate 1, 2, and 3 objects:" );
   Console::WriteLine( "1) {0}", String::Concat( o ) );
   Console::WriteLine( "2) {0}", String::Concat( o, o ) );
   Console::WriteLine( "3) {0}", String::Concat( o, o, o ) );
   Console::WriteLine( "\nConcatenate 4 objects and a variable length parameter list:" );
   Console::WriteLine( "4) {0}", String::Concat( o, o, o, o, o ) );
   Console::WriteLine( "\nConcatenate a 3 element object array:" );
   Console::WriteLine( "5) {0}", String::Concat( objs ) );
}

/*
This example produces the following output:
Concatenate 1, 2, and 3 objects:
1) -123
2) -123-123
3) -123-123-123

Concatenate 4 objects and a variable length parameter list:
4) -123-123-123-123-123

Concatenate a 3 element object array:
5) -123-456-789
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Concat 重载
System 命名空间
Object
Join


String ..::.Concat 方法 (String, String, String)

String
.
.
::
.
Concat 方法 (String, String, String)
String 类

连接 String 的三个指定实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Concat ( _
    str0 As String, _
    str1 As String, _
    str2 As String _
) As String
public static string Concat(
    string str0,
    string str1,
    string str2
)
public:
static String^ Concat(
    String^ str0,
    String^ str1,
    String^ str2
)
static member Concat :
        str0:string *
        str1:string *
        str2:string -> string

参数

str0
类型： System String
要连接的第一个字符串。
str1
类型： System String
要连接的第二个字符串。
str2
类型： System String
要连接的第三个字符串。

返回值

类型： System String
str0、str1 和 str2 的连接。

该方法连接 str0、str1 和 str2；它不添加任何分隔符。

使用 Empty 字符串替代任何 null 参数。

在下面的示例中，输出到“控制台”的信息是使用此 Concat 方法生成的。

Option Explicit
Option Strict

Imports System
Imports System.Globalization

Public Class MainClass

    Public Shared Sub Main()
        Dim dt As DateTime = DateTime.Now
        Dim myformat() As String =  {"d", "D", _
                                    "f", "F", _
                                    "g", "G", _
                                    "m", _
                                    "r", _
                                    "s", _
                                    "t", "T", _
                                    "u", "U", _
                                    "y", _
                                    "dddd, MMMM dd yyyy", _
                                    "ddd, MMM d ""'""yy", _
                                    "dddd, MMMM dd", _
                                    "M/yy", _
                                    "dd-MM-yy"}
        Dim mydate As String
        Dim i As Integer
        For i = 0 To myformat.Length - 1
            mydate = dt.ToString(myformat(i), DateTimeFormatInfo.InvariantInfo)
            Console.WriteLine(String.Concat(myformat(i), " :", mydate))
        Next i

    ' Output.
    '
    ' d :08/17/2000
    ' D :Thursday, August 17, 2000
    ' f :Thursday, August 17, 2000 16:32
    ' F :Thursday, August 17, 2000 16:32:32
    ' g :08/17/2000 16:32
    ' G :08/17/2000 16:32:32
    ' m :August 17
    ' r :Thu, 17 Aug 2000 23:32:32 GMT
    ' s :2000-08-17T16:32:32
    ' t :16:32
    ' T :16:32:32
    ' u :2000-08-17 23:32:32Z
    ' U :Thursday, August 17, 2000 23:32:32
    ' y :August, 2000
    ' dddd, MMMM dd yyyy :Thursday, August 17 2000
    ' ddd, MMM d "'"yy :Thu, Aug 17 '00
    ' dddd, MMMM dd :Thursday, August 17
    ' M/yy :8/00
    ' dd-MM-yy :17-08-00
    End Sub 'Main
End Class 'MainClass

 using System;
 using System.Globalization;

public class MainClass {
    public static void Main(string[] args)  {
        DateTime dt = DateTime.Now;
        String[] format = {
            "d", "D",
            "f", "F",
            "g", "G",
            "m",
            "r",
            "s",
            "t", "T",
            "u", "U",
            "y",
            "dddd, MMMM dd yyyy",
            "ddd, MMM d \"'\"yy",
            "dddd, MMMM dd",
            "M/yy",
            "dd-MM-yy",
        };
        String date;
        for (int i = 0; i < format.Length; i++) {
            date = dt.ToString(format[i], DateTimeFormatInfo.InvariantInfo);
            Console.WriteLine(String.Concat(format[i], " :" , date));
        }

   /** Output.
    *
    * d :08/17/2000
    * D :Thursday, August 17, 2000
    * f :Thursday, August 17, 2000 16:32
    * F :Thursday, August 17, 2000 16:32:32
    * g :08/17/2000 16:32
    * G :08/17/2000 16:32:32
    * m :August 17
    * r :Thu, 17 Aug 2000 23:32:32 GMT
    * s :2000-08-17T16:32:32
    * t :16:32
    * T :16:32:32
    * u :2000-08-17 23:32:32Z
    * U :Thursday, August 17, 2000 23:32:32
    * y :August, 2000
    * dddd, MMMM dd yyyy :Thursday, August 17 2000
    * ddd, MMM d "'"yy :Thu, Aug 17 '00
    * dddd, MMMM dd :Thursday, August 17
    * M/yy :8/00
    * dd-MM-yy :17-08-00
    */
    }
}

using namespace System;
using namespace System::Globalization;
void main()
{
   DateTime dt = DateTime::Now;
   array<String^>^format = {L"d",L"D",L"f",L"F",L"g",L"G",L"m",L"r",L"s",L"t",L"T",L"u",L"U",L"y",L"dddd, MMMM dd yyyy",L"ddd, MMM d \"'\"yy",L"dddd, MMMM dd",L"M/yy",L"dd-MM-yy"};
   String^ date;
   for ( int i = 0; i < format->Length; i++ )
   {
      date = dt.ToString( format[ i ], DateTimeFormatInfo::InvariantInfo );
      Console::WriteLine( String::Concat( format[ i ], L" :", date ) );

   }

   /** Output.
       *
       * d :08/17/2000
       * D :Thursday, August 17, 2000
       * f :Thursday, August 17, 2000 16:32
       * F :Thursday, August 17, 2000 16:32:32
       * g :08/17/2000 16:32
       * G :08/17/2000 16:32:32
       * m :August 17
       * r :Thu, 17 Aug 2000 23:32:32 GMT
       * s :2000-08-17T16:32:32
       * t :16:32
       * T :16:32:32
       * u :2000-08-17 23:32:32Z
       * U :Thursday, August 17, 2000 23:32:32
       * y :August, 2000
       * dddd, MMMM dd yyyy :Thursday, August 17 2000
       * ddd, MMM d "'"yy :Thu, Aug 17 '00
       * dddd, MMMM dd :Thursday, August 17
       * M/yy :8/00
       * dd-MM-yy :17-08-00
       */
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Concat 重载
System 命名空间
Join


String ..::.Concat 方法 (Object, Object, Object, Object, ...)

String
.
.
::
.
Concat 方法 (Object, Object, Object, Object, ...)
String 类

将四个指定对象的 String 表示形式与可选变量长度参数列表中指定的任何对象串联起来。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Concat( Object )。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用可变长度参数 (varargs) 的方法。
编译器会自动将对此方法的调用解析为使用参数数据的同一方法。
C#不支持使用可变长度参数 (varargs) 的方法。
编译器会自动将对此方法的调用解析为使用参数数据的同一方法。
[CLSCompliantAttribute(false)]
public:
static String^ Concat(
    Object^ arg0,
    Object^ arg1,
    Object^ arg2,
    Object^ arg3,
    ...
)
F# 不支持使用可变长度参数 (varargs) 的方法。
编译器会自动将对此方法的调用解析为使用参数数据的同一方法。

参数

arg0
类型： System Object
要连接的第一个对象。
arg1
类型： System Object
要连接的第二个对象。
arg2
类型： System Object
要连接的第三个对象。
arg3
类型： System Object
要连接的第四个对象。

返回值

类型： System String
arg0、arg1、arg2 和 arg3 参数的值经过连接的字符串表示形式。

该方法连接参数列表中的每个对象；它不添加任何分隔符。

使用 Empty 字符串替代任何 null 参数。

说明 说明

Concat 方法的最后一个参数是要串联的一个或多个附加对象的逗号分隔的可选列表。

对调用者的说明

此方法标有 vararg 关键字，这意味着它支持的参数数目可变。可以从 Visual C++ 中调用该方法，但不能从 C# 或 Visual Basic 代码调用。C# 和 Visual Basic 编译器将对 Concat(Object, Object, Object, Object) 的调用解析为对 Concat(array<Object>[]()[]) 的调用。 此方法标有 vararg 关键字，这意味着它支持的参数数目可变。可以从 Visual C++ 中调用该方法，但不能从 C# 或 Visual Basic 代码调用。C# 和 Visual Basic 编译器将对 Concat(Object, Object, Object, Object) 的调用解析为对 Concat(array<Object>[]()[]) 的调用。 此方法标有 vararg 关键字，这意味着它支持的参数数目可变。可以从 Visual C++ 中调用该方法，但不能从 C# 或 Visual Basic 代码调用。C# 和 Visual Basic 编译器将对 Concat(Object, Object, Object, Object) 的调用解析为对 Concat(array<Object>[]()[]) 的调用。

下面的示例阐释如何使用 Concat(Object, Object, Object, Object) 方法连接变量参数列表。在此情况下，使用 9 个参数调用该方法。 下面的示例阐释如何使用 Concat(Object, Object, Object, Object) 方法连接变量参数列表。在此情况下，使用 9 个参数调用该方法。

Imports System.Collections

Module Example
   Public Sub Main()
      Const WORD_SIZE As Integer = 4

      ' Define some 4-letter words to be scrambled.
      Dim words() As String = { "home", "food", "game", "rest" }
      ' Define two arrays equal to the number of letters in each word.
      Dim keys(WORD_SIZE) As Double
      Dim letters(WORD_SIZE) As String
      ' Initialize the random number generator.
      Dim rnd As New Random()

      ' Scramble each word.
      For Each word As String In words
         For ctr As Integer = 0 To word.Length - 1
            ' Populate the array of keys with random numbers.
            keys(ctr) = rnd.NextDouble()
            ' Assign a letter to the array of letters.
            letters(ctr) = word.Chars(ctr)
         Next
         ' Sort the array.
         Array.Sort(keys, letters, 0, WORD_SIZE, Comparer.Default)
         ' Display the scrambled word.
         Dim scrambledWord As String = String.Concat(letters(0), letters(1), _
                                                     letters(2), letters(3))
         Console.WriteLine("{0} --> {1}", word, scrambledWord)
      Next
   End Sub
End Module
' The example displays output like the following:
'       home --> mheo
'       food --> oodf
'       game --> aemg
'       rest --> trse

using System;
using System.Collections;

public class Example
{
   public static void Main()
   {
      const int WORD_SIZE = 4;

      // Define some 4-letter words to be scrambled.
      string[] words = { "home", "food", "game", "rest" };
      // Define two arrays equal to the number of letters in each word.
      double[] keys = new double[WORD_SIZE];
      string[] letters = new string[WORD_SIZE];
      // Initialize the random number generator.
      Random rnd = new Random();

      // Scramble each word.
      foreach (string word in words)
      {
         for (int ctr = 0; ctr < word.Length; ctr++)
         {
            // Populate the array of keys with random numbers.
            keys[ctr] = rnd.NextDouble();
            // Assign a letter to the array of letters.
            letters[ctr] = word[ctr].ToString();
         }
         // Sort the array.
         Array.Sort(keys, letters, 0, WORD_SIZE, Comparer.Default);
         // Display the scrambled word.
         string scrambledWord = String.Concat(letters[0], letters[1],
                                              letters[2], letters[3]);
         Console.WriteLine("{0} --> {1}", word, scrambledWord);
      }
   }
}
// The example displays output like the following:
//       home --> mheo
//       food --> oodf
//       game --> aemg
//       rest --> trse

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Concat 重载
System 命名空间


String ..::.Concat 方法 (String, String, String, String)

String
.
.
::
.
Concat 方法 (String, String, String, String)
String 类

连接 String 的四个指定实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Concat ( _
    str0 As String, _
    str1 As String, _
    str2 As String, _
    str3 As String _
) As String
public static string Concat(
    string str0,
    string str1,
    string str2,
    string str3
)
public:
static String^ Concat(
    String^ str0,
    String^ str1,
    String^ str2,
    String^ str3
)
static member Concat :
        str0:string *
        str1:string *
        str2:string *
        str3:string -> string

参数

str0
类型： System String
要连接的第一个字符串。
str1
类型： System String
要连接的第二个字符串。
str2
类型： System String
要连接的第三个字符串。
str3
类型： System String
要连接的第四个字符串。

返回值

类型： System String
str0、str1、str2 和 str3 的连接。

该方法连接 str0、str1、str2 以及 str3；它不添加任何分隔符。

使用 Empty 字符串替代数组中的任何 null 对象。

下面的示例定义了一个四字母单词的数组，并将各个字母存储到一个字符串数组，以便混排它们。然后，它调用 Concat(String, String, String, String) 方法来重新组合打乱的单词。 下面的示例定义了一个四字母单词的数组，并将各个字母存储到一个字符串数组，以便混排它们。然后，它调用 Concat(String, String, String, String) 方法来重新组合打乱的单词。

Imports System.Collections

Module Example
   Public Sub Main()
      Const WORD_SIZE As Integer = 4

      ' Define some 4-letter words to be scrambled.
      Dim words() As String = { "home", "food", "game", "rest" }
      ' Define two arrays equal to the number of letters in each word.
      Dim keys(WORD_SIZE) As Double
      Dim letters(WORD_SIZE) As String
      ' Initialize the random number generator.
      Dim rnd As New Random()

      ' Scramble each word.
      For Each word As String In words
         For ctr As Integer = 0 To word.Length - 1
            ' Populate the array of keys with random numbers.
            keys(ctr) = rnd.NextDouble()
            ' Assign a letter to the array of letters.
            letters(ctr) = word.Chars(ctr)
         Next
         ' Sort the array.
         Array.Sort(keys, letters, 0, WORD_SIZE, Comparer.Default)
         ' Display the scrambled word.
         Dim scrambledWord As String = String.Concat(letters(0), letters(1), _
                                                     letters(2), letters(3))
         Console.WriteLine("{0} --> {1}", word, scrambledWord)
      Next
   End Sub
End Module
' The example displays output like the following:
'       home --> mheo
'       food --> oodf
'       game --> aemg
'       rest --> trse

using System;
using System.Collections;

public class Example
{
   public static void Main()
   {
      const int WORD_SIZE = 4;

      // Define some 4-letter words to be scrambled.
      string[] words = { "home", "food", "game", "rest" };
      // Define two arrays equal to the number of letters in each word.
      double[] keys = new double[WORD_SIZE];
      string[] letters = new string[WORD_SIZE];
      // Initialize the random number generator.
      Random rnd = new Random();

      // Scramble each word.
      foreach (string word in words)
      {
         for (int ctr = 0; ctr < word.Length; ctr++)
         {
            // Populate the array of keys with random numbers.
            keys[ctr] = rnd.NextDouble();
            // Assign a letter to the array of letters.
            letters[ctr] = word[ctr].ToString();
         }
         // Sort the array.
         Array.Sort(keys, letters, 0, WORD_SIZE, Comparer.Default);
         // Display the scrambled word.
         string scrambledWord = String.Concat(letters[0], letters[1],
                                              letters[2], letters[3]);
         Console.WriteLine("{0} --> {1}", word, scrambledWord);
      }
   }
}
// The example displays output like the following:
//       home --> mheo
//       food --> oodf
//       game --> aemg
//       rest --> trse

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Concat 重载
System 命名空间
Join


String ..::.Contains 方法

String
.
.
::
.
Contains 方法
String 类

返回一个值，该值指示指定的 String 对象是否出现在此字符串中。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Contains ( _
    value As String _
) As Boolean
public bool Contains(
    string value
)
public:
bool Contains(
    String^ value
)
member Contains :
        value:string -> bool

参数

value
类型： System String
要搜寻的字符串。

返回值

类型： System Boolean
如果 value 参数出现在此字符串中，或者 value 为空字符串 ("")，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法执行顺序（区分大小写和区域性）比较。该搜索从此字符串的第一个字符位置开始，一直搜索到最后一个字符位置。 此方法执行顺序（区分大小写和区域性）比较。该搜索从此字符串的第一个字符位置开始，一直搜索到最后一个字符位置。

下面的示例确定字符串“fox”是否为熟悉的引文中的子字符串。

' This example demonstrates the String.Contains() method
Imports System

Class Sample
   Public Shared Sub Main()
      Dim s1 As String = "The quick brown fox jumps over the lazy dog"
      Dim s2 As String = "fox"
      Dim b As Boolean
      b = s1.Contains(s2)
      Console.WriteLine("Is the string, s2, in the string, s1?: {0}", b)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Is the string, s2, in the string, s1?: True
'

// This example demonstrates the String.Contains() method
using System;

class Sample
{
    public static void Main()
    {
    string s1 = "The quick brown fox jumps over the lazy dog";
    string s2 = "fox";
    bool b;
    b = s1.Contains(s2);
    Console.WriteLine("Is the string, s2, in the string, s1?: {0}", b);
    }
}
/*
This example produces the following results:

Is the string, s2, in the string, s1?: True
*/

// This example demonstrates the String.Contains() method
using namespace System;
int main()
{
   String^ s1 = "The quick brown fox jumps over the lazy dog";
   String^ s2 = "fox";
   bool b;
   b = s1->Contains( s2 );
   Console::WriteLine( "Is the string, s2, in the string, s1?: {0}", b );
}

/*
This example produces the following results:

Is the string, s2, in the string, s1?: True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
IndexOf


String ..::.Copy 方法

String
.
.
::
.
Copy 方法
String 类

创建一个与指定的 String 具有相同值的 String 的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Copy ( _
    str As String _
) As String
public static string Copy(
    string str
)
public:
static String^ Copy(
    String^ str
)
static member Copy :
        str:string -> string

参数

str
类型： System String
要复制的字符串。

返回值

类型： System String
值与 str 相同的新字符串。
异常 | 条件
ArgumentNullException | str 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例显示了由两个变量引用的两个不同的字符串，创建第一个字符串的副本，将对新字符串的引用赋给第二个变量，然后显示由两个变量引用的两个字符串，以演示两个字符串现在是相同的。

' Sample for String.Copy()
Imports System

Class Sample

   Public Shared Sub Main()
      Dim str1 As String = "abc"
      Dim str2 As String = "xyz"
      Console.WriteLine("1) str1 = '{0}'", str1)
      Console.WriteLine("2) str2 = '{0}'", str2)
      Console.WriteLine("Copy...")
      str2 = [String].Copy(str1)
      Console.WriteLine("3) str1 = '{0}'", str1)
      Console.WriteLine("4) str2 = '{0}'", str2)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'1) str1 = 'abc'
'2) str2 = 'xyz'
'Copy...
'3) str1 = 'abc'
'4) str2 = 'abc'
'

// Sample for String.Copy()
using System;

class Sample {
    public static void Main() {
    string str1 = "abc";
    string str2 = "xyz";
    Console.WriteLine("1) str1 = '{0}'", str1);
    Console.WriteLine("2) str2 = '{0}'", str2);
    Console.WriteLine("Copy...");
    str2 = String.Copy(str1);
    Console.WriteLine("3) str1 = '{0}'", str1);
    Console.WriteLine("4) str2 = '{0}'", str2);
    }
}
/*
This example produces the following results:
1) str1 = 'abc'
2) str2 = 'xyz'
Copy...
3) str1 = 'abc'
4) str2 = 'abc'
*/

// Sample for String::Copy()
using namespace System;
int main()
{
   String^ str1 = "abc";
   String^ str2 = "xyz";
   Console::WriteLine( "1) str1 = '{0}'", str1 );
   Console::WriteLine( "2) str2 = '{0}'", str2 );
   Console::WriteLine( "Copy..." );
   str2 = String::Copy( str1 );
   Console::WriteLine( "3) str1 = '{0}'", str1 );
   Console::WriteLine( "4) str2 = '{0}'", str2 );
}

/*
This example produces the following results:
1) str1 = 'abc'
2) str2 = 'xyz'
Copy...
3) str1 = 'abc'
4) str2 = 'abc'
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Empty
DBNull


String ..::.CopyTo 方法

String
.
.
::
.
CopyTo 方法
String 类

将指定数目的字符从此实例中的指定位置复制到 Unicode 字符数组中的指定位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub CopyTo ( _
    sourceIndex As Integer, _
    destination As Char(), _
    destinationIndex As Integer, _
    count As Integer _
)
public void CopyTo(
    int sourceIndex,
    char[] destination,
    int destinationIndex,
    int count
)
public:
void CopyTo(
    int sourceIndex,
    array<wchar_t>^ destination,
    int destinationIndex,
    int count
)
member CopyTo :
        sourceIndex:int *
        destination:char[] *
        destinationIndex:int *
        count:int -> unit

参数

sourceIndex
类型： System Int32
要复制的此实例中第一个字符的索引。
destination
类型：
array<
System Char
>
[]
()
[]

此实例中的字符所复制到的 Unicode 字符数组。
destinationIndex
类型： System Int32
destination 中的索引，在此处开始复制操作。
count
类型： System Int32
此实例中要复制到 destination 的字符数。
异常 | 条件
ArgumentNullException | destination 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | sourceIndex、destinationIndex 或 count 为负 - 或 - count 大于从 startIndex 到此实例末尾的子字符串的长度 - 或 - count 大于从 destinationIndex 到 destination 末尾的子数组的长度

count 字符从此实例的 sourceIndex 位置复制到 destination 的 destinationIndex 位置。

sourceIndex 和 destinationIndex 是从零开始的。

下面的示例说明 CopyTo 方法。

Public Class CopyToTest
    Public Shared Sub Main()
        ' Embed an array of characters in a string
        Dim strSource As String = "changed"
        Dim destination As Char() = {"T"c, "h"c, "e"c, " "c, "i"c, "n"c, "i"c, _
                    "t"c, "i"c, "a"c, "l"c, " "c, "a"c, "r"c, "r"c, "a"c, "y"c}

        ' Print the char array
        Console.WriteLine(destination)

        ' Embed the source string in the destination string
        strSource.CopyTo(0, destination, 4, strSource.Length)

        ' Print the resulting array
        Console.WriteLine(destination)

        strSource = "A different string"

        ' Embed only a section of the source string in the destination
        strSource.CopyTo(2, destination, 3, 9)

        ' Print the resulting array
        Console.WriteLine(destination)
    End Sub
End Class
' The example displays the following output to the console:
'       The initial array
'       The changed array
'       Thedifferentarray

using System;

public class CopyToTest {
    public static void Main() {

        // Embed an array of characters in a string
        string strSource = "changed";
    char [] destination = { 'T', 'h', 'e', ' ', 'i', 'n', 'i', 't', 'i', 'a', 'l', ' ',
                'a', 'r', 'r', 'a', 'y' };

        // Print the char array
        Console.WriteLine( destination );

        // Embed the source string in the destination string
        strSource.CopyTo ( 0, destination, 4, strSource.Length );

        // Print the resulting array
        Console.WriteLine( destination );

        strSource = "A different string";

        // Embed only a section of the source string in the destination
        strSource.CopyTo ( 2, destination, 3, 9 );

        // Print the resulting array
        Console.WriteLine( destination );
    }
}
// The example displays the following output to the console:
//       The initial array
//       The changed array
//       Thedifferentarray

using namespace System;
int main()
{

   // Embed an array of characters in a string
   String^ strSource = "changed";
   array<Char>^destination = {'T','h','e',' ','i','n','i','t','i','a','l',' ','a','r','r','a','y'};

   // Print the char array
   Console::WriteLine( destination );

   // Embed the source string in the destination string
   strSource->CopyTo( 0, destination, 4, strSource->Length );

   // Print the resulting array
   Console::WriteLine( destination );
   strSource = "A different string";

   // Embed only a section of the source string in the destination
   strSource->CopyTo( 2, destination, 3, 9 );

   // Print the resulting array
   Console::WriteLine( destination );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Char
Int32
Insert
Substring


String ..::.EndsWith 方法

String
.
.
::
.
EndsWith 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

确定此字符串实例的结尾是否与指定的字符串匹配。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.EndsWith 方法 (String)

String
.
.
::
.
EndsWith 方法 (String)
String 类

确定此字符串实例的结尾是否与指定的字符串匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function EndsWith ( _
    value As String _
) As Boolean
public bool EndsWith(
    string value
)
public:
bool EndsWith(
    String^ value
)
member EndsWith :
        value:string -> bool

参数

value
类型： System String
要与此实例末尾的子字符串进行比较的字符串。

返回值

类型： System Boolean
如果 value 与此实例的末尾匹配，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法将 value 与位于此实例末尾、与 value 长度相同的子字符串进行比较，并返回它们是否相等的指示。若要相等，value 必须是对此同一实例的引用，或者与此实例的末尾匹配。 此方法将 value 与位于此实例末尾、与 value 长度相同的子字符串进行比较，并返回它们是否相等的指示。若要相等，value 必须是对此同一实例的引用，或者与此实例的末尾匹配。

此方法使用当前区域性执行单词（区分大小写和区域性）比较。

对调用者的说明

如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的字符串比较规则确定字符串是否以特定子字符串开头，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 EndsWith(String, StringComparison) 方法重载。 如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的字符串比较规则确定字符串是否以特定子字符串开头，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 EndsWith(String, StringComparison) 方法重载。

下面的示例演示如何使用 EndsWith 方法作为从一行末尾删除 HTML 结束标记的例程的一部分。

Imports System

Public Class EndsWithTest
    Public Shared Sub Main()
        Dim strSource() As String = { "<b>This is bold text</b>", _
                    "<H1>This is large Text</H1>", _
                    "<b><i><font color = green>This has multiple tags</font></i></b>", _
                    "<b>This has <i>embedded</i> tags.</b>", _
                    "This line simply ends with a greater than symbol, it should not be modified>"}

        Console.WriteLine("The following lists the items before the ends have been stripped:")
        Console.WriteLine("-----------------------------------------------------------------")

        ' Display the initial array of strings.
        For Each s As String In  strSource
            Console.WriteLine(s)
        Next
        Console.WriteLine()

        Console.WriteLine("The following lists the items after the ends have been stripped:")
        Console.WriteLine("----------------------------------------------------------------")

        ' Display the array of strings.
        For Each s As String In strSource
            Console.WriteLine(StripEndTags(s))
        Next
    End Sub

    Private Shared Function StripEndTags(item As String) As String
        ' Try to find a tag at the end of the line using EndsWith.
        If item.Trim().EndsWith(">") Then
            ' now search for the opening tag...
            Dim lastLocation As Integer = item.LastIndexOf("</")
            If lastLocation >= 0 Then

                ' Remove the identified section, if it is a valid region.
                item = item.Substring(0, lastLocation)
            End If
        End If
       Return Item
    End Function
End Class
' The example displays the following output:
'    The following lists the items before the ends have been stripped:
'    -----------------------------------------------------------------
'    <b>This is bold text</b>
'    <H1>This is large Text</H1>
'    <b><i><font color = green>This has multiple tags</font></i></b>
'    <b>This has <i>embedded</i> tags.</b>
'    This line simply ends with a greater than symbol, it should not be modified>
'
'    The following lists the items after the ends have been stripped:
'    ----------------------------------------------------------------
'    <b>This is bold text
'    <H1>This is large Text
'    <b><i><font color = green>This has multiple tags</font></i>
'    <b>This has <i>embedded</i> tags.
'    This line simply ends with a greater than symbol, it should not be modified>

using System;

public class EndsWithTest {
    public static void Main() {

        // process an input file that contains html tags.
        // this sample checks for multiple tags at the end of the line, rather than simply
        // removing the last one.
        // note: HTML markup tags always end in a greater than symbol (>).

        string [] strSource = { "<b>This is bold text</b>", "<H1>This is large Text</H1>",
                "<b><i><font color=green>This has multiple tags</font></i></b>",
                "<b>This has <i>embedded</i> tags.</b>",
                "This line simply ends with a greater than symbol, it should not be modified>" };

        Console.WriteLine("The following lists the items before the ends have been stripped:");
        Console.WriteLine("-----------------------------------------------------------------");

        // print out the initial array of strings
        foreach ( string s in strSource )
            Console.WriteLine( s );

        Console.WriteLine();

        Console.WriteLine("The following lists the items after the ends have been stripped:");
        Console.WriteLine("----------------------------------------------------------------");

        // print out the array of strings
        foreach ( string s in strSource )
            Console.WriteLine( StripEndTags( s ) );
    }

    private static string StripEndTags( string item ) {

            // try to find a tag at the end of the line using EndsWith
            if (item.Trim().EndsWith(">")) {

                // now search for the opening tag...
                int lastLocation = item.LastIndexOf( "</" );

                // remove the identified section, if it is a valid region
                if ( lastLocation >= 0 )
                    item =  item.Substring( 0, lastLocation );
            }

    return item;
    }
}

using namespace System;
using namespace System::Collections;
String^ StripEndTags( String^ item )
{

   // try to find a tag at the end of the line using EndsWith
   if ( item->Trim()->EndsWith( ">" ) )
   {

      // now search for the opening tag...
      int lastLocation = item->LastIndexOf( "</" );

      // remove the identified section, if it is a valid region
      if ( lastLocation >= 0 )
            item = item->Substring( 0, lastLocation );
   }

   return item;
}

int main()
{

   // process an input file that contains html tags.
   // this sample checks for multiple tags at the end of the line, rather than simply
   // removing the last one.
   // note: HTML markup tags always end in a greater than symbol (>).
   array<String^>^strSource = {"<b>This is bold text</b>","<H1>This is large Text</H1>","<b><i><font color=green>This has multiple tags</font></i></b>","<b>This has <i>embedded</i> tags.</b>","This line simply ends with a greater than symbol, it should not be modified>"};
   Console::WriteLine( "The following lists the items before the ends have been stripped:" );
   Console::WriteLine( "-----------------------------------------------------------------" );

   // print out the initial array of strings
   IEnumerator^ myEnum1 = strSource->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( s );
   }

   Console::WriteLine();
   Console::WriteLine( "The following lists the items after the ends have been stripped:" );
   Console::WriteLine( "----------------------------------------------------------------" );

   // print out the array of strings
   IEnumerator^ myEnum2 = strSource->GetEnumerator();
   while ( myEnum2->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum2->Current);
      Console::WriteLine( StripEndTags( s ) );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
EndsWith 重载
System 命名空间
StartsWith
Compare


String ..::.EndsWith 方法 (String, StringComparison)

String
.
.
::
.
EndsWith 方法 (String, StringComparison)
String 类

确定使用指定的比较选项进行比较时此字符串实例的结尾是否与指定的字符串匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function EndsWith ( _
    value As String, _
    comparisonType As StringComparison _
) As Boolean
[ComVisibleAttribute(false)]
public bool EndsWith(
    string value,
    StringComparison comparisonType
)
[ComVisibleAttribute(false)]
public:
bool EndsWith(
    String^ value,
    StringComparison comparisonType
)
[<ComVisibleAttribute(false)>]
member EndsWith :
        value:string *
        comparisonType:StringComparison -> bool

参数

value
类型： System String
要与此实例末尾的子字符串进行比较的字符串。
comparisonType
类型： System StringComparison
枚举值之一，用于确定如何比较此字符串与 value。

返回值

类型： System Boolean
如果此字符串的末尾与 value 参数匹配，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | comparisonType 不是一个 StringComparison 值。

EndsWith 方法将 value 参数与位于此字符串末尾的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是对此同一字符串的引用，为空字符串 ("")，或者与此字符串的末尾匹配。EndsWith 方法执行的比较类型取决于 comparisonType 参数的值。 EndsWith 方法将 value 参数与位于此字符串末尾的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是对此同一字符串的引用，为空字符串 ("")，或者与此字符串的末尾匹配。EndsWith 方法执行的比较类型取决于 comparisonType 参数的值。 EndsWith 方法将 value 参数与位于此字符串末尾的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是对此同一字符串的引用，为空字符串 ("")，或者与此字符串的末尾匹配。EndsWith 方法执行的比较类型取决于 comparisonType 参数的值。

下面的示例确定字符串是否以特定的子字符串结束。比较结果受以下因素的影响：区域性的选择，是否忽略大小写，是否执行序号比较。 下面的示例确定字符串是否以特定的子字符串结束。比较结果受以下因素的影响：区域性的选择，是否忽略大小写，是否执行序号比较。

' This example demonstrates the
' System.String.EndsWith(String, StringComparison) method.

Imports System
Imports System.Threading

Class Sample
    Public Shared Sub Main()
        Dim intro As String = "Determine whether a string ends with another string, " & _
                              "using" & vbCrLf & "  different values of StringComparison."

        Dim scValues As StringComparison() =  { _
                        StringComparison.CurrentCulture, _
                        StringComparison.CurrentCultureIgnoreCase, _
                        StringComparison.InvariantCulture, _
                        StringComparison.InvariantCultureIgnoreCase, _
                        StringComparison.Ordinal, _
                        StringComparison.OrdinalIgnoreCase }
        '
        Console.Clear()
        Console.WriteLine(intro)

        ' Display the current culture because the culture-specific comparisons
        ' can produce different results with different cultures.
        Console.WriteLine("The current culture is {0}." & vbCrLf, _
                           Thread.CurrentThread.CurrentCulture.Name)

        ' Determine whether three versions of the letter I are equal to each other.
        Dim sc As StringComparison
        For Each sc In  scValues
            Console.WriteLine("StringComparison.{0}:", sc)
            Test("abcXYZ", "XYZ", sc)
            Test("abcXYZ", "xyz", sc)
            Console.WriteLine()
        Next sc

    End Sub 'Main

    Protected Shared Sub Test(ByVal x As String, ByVal y As String, _
                              ByVal comparison As StringComparison)
        Dim resultFmt As String = """{0}"" {1} with ""{2}""."
        Dim result As String = "does not end"
        '
        If x.EndsWith(y, comparison) Then
            result = "ends"
        End If
        Console.WriteLine(resultFmt, x, result, y)

    End Sub 'Test
End Class 'Sample

'
'This code example produces the following results:
'
'Determine whether a string ends with another string, using
'  different values of StringComparison.
'The current culture is en-US.
'
'StringComparison.CurrentCulture:
'"abcXYZ" ends with "XYZ".
'"abcXYZ" does not end with "xyz".
'
'StringComparison.CurrentCultureIgnoreCase:
'"abcXYZ" ends with "XYZ".
'"abcXYZ" ends with "xyz".
'
'StringComparison.InvariantCulture:
'"abcXYZ" ends with "XYZ".
'"abcXYZ" does not end with "xyz".
'
'StringComparison.InvariantCultureIgnoreCase:
'"abcXYZ" ends with "XYZ".
'"abcXYZ" ends with "xyz".
'
'StringComparison.Ordinal:
'"abcXYZ" ends with "XYZ".
'"abcXYZ" does not end with "xyz".
'
'StringComparison.OrdinalIgnoreCase:
'"abcXYZ" ends with "XYZ".
'"abcXYZ" ends with "xyz".
'

// This example demonstrates the
// System.String.EndsWith(String, StringComparison) method.

using System;
using System.Threading;

class Sample
{
    public static void Main()
    {
    string intro = "Determine whether a string ends with another string, " +
                   "using\n  different values of StringComparison.";

    StringComparison[] scValues = {
        StringComparison.CurrentCulture,
        StringComparison.CurrentCultureIgnoreCase,
        StringComparison.InvariantCulture,
        StringComparison.InvariantCultureIgnoreCase,
        StringComparison.Ordinal,
        StringComparison.OrdinalIgnoreCase };

//
    Console.Clear();
    Console.WriteLine(intro);

// Display the current culture because the culture-specific comparisons
// can produce different results with different cultures.
    Console.WriteLine("The current culture is {0}.\n",
                       Thread.CurrentThread.CurrentCulture.Name);

// Determine whether three versions of the letter I are equal to each other.
    foreach (StringComparison sc in scValues)
        {
        Console.WriteLine("StringComparison.{0}:", sc);
        Test("abcXYZ", "XYZ", sc);
        Test("abcXYZ", "xyz", sc);
        Console.WriteLine();
        }
    }

    protected static void Test(string x, string y, StringComparison comparison)
    {
    string resultFmt = "\"{0}\" {1} with \"{2}\".";
    string result = "does not end";
//
    if (x.EndsWith(y, comparison))
        result = "ends";
    Console.WriteLine(resultFmt, x, result, y);
    }
}

/*
This code example produces the following results:

Determine whether a string ends with another string, using
  different values of StringComparison.
The current culture is en-US.

StringComparison.CurrentCulture:
"abcXYZ" ends with "XYZ".
"abcXYZ" does not end with "xyz".

StringComparison.CurrentCultureIgnoreCase:
"abcXYZ" ends with "XYZ".
"abcXYZ" ends with "xyz".

StringComparison.InvariantCulture:
"abcXYZ" ends with "XYZ".
"abcXYZ" does not end with "xyz".

StringComparison.InvariantCultureIgnoreCase:
"abcXYZ" ends with "XYZ".
"abcXYZ" ends with "xyz".

StringComparison.Ordinal:
"abcXYZ" ends with "XYZ".
"abcXYZ" does not end with "xyz".

StringComparison.OrdinalIgnoreCase:
"abcXYZ" ends with "XYZ".
"abcXYZ" ends with "xyz".

*/

// This example demonstrates the
// System.String.EndsWith(String, StringComparison) method.

using namespace System;
using namespace System::Threading;

void Test(String^ testString, String^ searchString,
     StringComparison comparison)
{
    String^ resultFormat = "\"{0}\" {1} with \"{2}\".";
    String^ resultString = "does not end";

    if (testString->EndsWith(searchString, comparison))
    {
        resultString = "ends";
    }
    Console::WriteLine(resultFormat, testString, resultString, searchString);
}

int main()
{
    String^ introMessage =
        "Determine whether a string ends with another string, " +
        "using\ndifferent values of StringComparison.";

    array<StringComparison>^ comparisonValues = {
        StringComparison::CurrentCulture,
        StringComparison::CurrentCultureIgnoreCase,
        StringComparison::InvariantCulture,
        StringComparison::InvariantCultureIgnoreCase,
        StringComparison::Ordinal,
        StringComparison::OrdinalIgnoreCase};

    Console::Clear();
    Console::WriteLine(introMessage);

    // Display the current culture because the culture-specific comparisons
    // can produce different results with different cultures.
    Console::WriteLine("The current culture is {0}.\n",
        Thread::CurrentThread->CurrentCulture->Name);
    // Perform two tests for each StringComparison
    for each (StringComparison stringCmp in comparisonValues)
    {
        Console::WriteLine("StringComparison.{0}:", stringCmp);
        Test("abcXYZ", "XYZ", stringCmp);
        Test("abcXYZ", "xyz", stringCmp);
        Console::WriteLine();
    }
}

/*
This code example produces the following results:

Determine whether a string ends with another string, using
different values of StringComparison.
The current culture is en-US.

StringComparison.CurrentCulture:
"abcXYZ" ends with "XYZ".
"abcXYZ" does not end with "xyz".

StringComparison.CurrentCultureIgnoreCase:
"abcXYZ" ends with "XYZ".
"abcXYZ" ends with "xyz".

StringComparison.InvariantCulture:
"abcXYZ" ends with "XYZ".
"abcXYZ" does not end with "xyz".

StringComparison.InvariantCultureIgnoreCase:
"abcXYZ" ends with "XYZ".
"abcXYZ" ends with "xyz".

StringComparison.Ordinal:
"abcXYZ" ends with "XYZ".
"abcXYZ" does not end with "xyz".

StringComparison.OrdinalIgnoreCase:
"abcXYZ" ends with "XYZ".
"abcXYZ" ends with "xyz".

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
EndsWith 重载
System 命名空间
StringComparison


String ..::.EndsWith 方法 (String, Boolean, CultureInfo)

String
.
.
::
.
EndsWith 方法 (String, Boolean, CultureInfo)
String 类

确定在使用指定的区域性进行比较时此字符串实例的结尾是否与指定的字符串匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function EndsWith ( _
    value As String, _
    ignoreCase As Boolean, _
    culture As CultureInfo _
) As Boolean
public bool EndsWith(
    string value,
    bool ignoreCase,
    CultureInfo culture
)
public:
bool EndsWith(
    String^ value,
    bool ignoreCase,
    CultureInfo^ culture
)
member EndsWith :
        value:string *
        ignoreCase:bool *
        culture:CultureInfo -> bool

参数

value
类型： System String
要与此实例末尾的子字符串进行比较的字符串。
ignoreCase
类型： System Boolean
要在比较过程中忽略大小写，则为 true；否则为 false。
culture
类型： System.Globalization CultureInfo
确定如何对此实例与 value 进行比较的区域性信息。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性。 确定如何对此实例与 value 进行比较的区域性信息。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性。

返回值

类型： System Boolean
如果此字符串的末尾与 value 参数匹配，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法将 value 参数与位于此字符串末尾、与 value 长度相同的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是对此同一实例的引用，或者与此字符串的末尾匹配。 此方法将 value 参数与位于此字符串末尾、与 value 长度相同的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是对此同一实例的引用，或者与此字符串的末尾匹配。

此方法使用指定的大小写和区域性执行字（区分区域性）比较。

下面的示例确定某个字符串是否出现在另一个字符串的末尾。使用影响搜索结果的区分大小写、不区分大小写和不同的区域性，多次调用 EndsWith 方法。 下面的示例确定某个字符串是否出现在另一个字符串的末尾。使用影响搜索结果的区分大小写、不区分大小写和不同的区域性，多次调用 EndsWith 方法。

' This code example demonstrates the
' System.String.EndsWith(String, ..., CultureInfo) method.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim msg1 As String = "Search for the target string ""{0}"" in the string ""{1}""." & vbCrLf
        Dim msg2 As String = "Using the {0} - ""{1}"" culture:"
        Dim msg3 As String = "  The string to search ends with the target string: {0}"
        Dim result As Boolean = False
        Dim ci As CultureInfo

        ' Define a target string to search for.
        ' U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
        Dim capitalARing As String = " "

        ' Define a string to search.
        ' The result of combining the characters LATIN SMALL LETTER A and COMBINING
        ' RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
        ' LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
        Dim xyzARing As String = "xyz" & "a "

        ' Clear the screen and display an introduction.
        Console.Clear()

        ' Display the string to search for and the string to search.
        Console.WriteLine(msg1, capitalARing, xyzARing)

        ' Search using English-United States culture.
        ci = New CultureInfo("en-US")
        Console.WriteLine(msg2, ci.DisplayName, ci.Name)

        Console.WriteLine("Case sensitive:")
        result = xyzARing.EndsWith(capitalARing, False, ci)
        Console.WriteLine(msg3, result)

        Console.WriteLine("Case insensitive:")
        result = xyzARing.EndsWith(capitalARing, True, ci)
        Console.WriteLine(msg3, result)
        Console.WriteLine()

        ' Search using Swedish-Sweden culture.
        ci = New CultureInfo("sv-SE")
        Console.WriteLine(msg2, ci.DisplayName, ci.Name)

        Console.WriteLine("Case sensitive:")
        result = xyzARing.EndsWith(capitalARing, False, ci)
        Console.WriteLine(msg3, result)

        Console.WriteLine("Case insensitive:")
        result = xyzARing.EndsWith(capitalARing, True, ci)
        Console.WriteLine(msg3, result)

    End Sub 'Main
End Class 'Sample

'
'Note: This code example was executed on a console whose user interface
'culture is "en-US" (English-United States).
'
'This code example produces the following results:
'
'Search for the target string " " in the string "xyza°".
'
'Using the English (United States) - "en-US" culture:
'Case sensitive:
'  The string to search ends with the target string: False
'Case insensitive:
'  The string to search ends with the target string: True
'
'Using the Swedish (Sweden) - "sv-SE" culture:
'Case sensitive:
'  The string to search ends with the target string: False
'Case insensitive:
'  The string to search ends with the target string: False
'

// This code example demonstrates the
// System.String.EndsWith(String, ..., CultureInfo) method.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string msg1 = "Search for the target string \"{0}\" in the string \"{1}\".\n";
    string msg2 = "Using the {0} - \"{1}\" culture:";
    string msg3 = "  The string to search ends with the target string: {0}";
    bool result = false;
    CultureInfo ci;

// Define a target string to search for.
// U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
    string capitalARing = "\u00c5";

// Define a string to search.
// The result of combining the characters LATIN SMALL LETTER A and COMBINING
// RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
// LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
    string xyzARing = "xyz" + "\u0061\u030a";

// Clear the screen and display an introduction.
    Console.Clear();

// Display the string to search for and the string to search.
    Console.WriteLine(msg1, capitalARing, xyzARing);

// Search using English-United States culture.
    ci = new CultureInfo("en-US");
    Console.WriteLine(msg2, ci.DisplayName, ci.Name);

    Console.WriteLine("Case sensitive:");
    result = xyzARing.EndsWith(capitalARing, false, ci);
    Console.WriteLine(msg3, result);

    Console.WriteLine("Case insensitive:");
    result = xyzARing.EndsWith(capitalARing, true, ci);
    Console.WriteLine(msg3, result);
    Console.WriteLine();

// Search using Swedish-Sweden culture.
    ci = new CultureInfo("sv-SE");
    Console.WriteLine(msg2, ci.DisplayName, ci.Name);

    Console.WriteLine("Case sensitive:");
    result = xyzARing.EndsWith(capitalARing, false, ci);
    Console.WriteLine(msg3, result);

    Console.WriteLine("Case insensitive:");
    result = xyzARing.EndsWith(capitalARing, true, ci);
    Console.WriteLine(msg3, result);
    }
}

/*
Note: This code example was executed on a console whose user interface
culture is "en-US" (English-United States).

This code example produces the following results:

Search for the target string " " in the string "xyza°".

Using the English (United States) - "en-US" culture:
Case sensitive:
  The string to search ends with the target string: False
Case insensitive:
  The string to search ends with the target string: True

Using the Swedish (Sweden) - "sv-SE" culture:
Case sensitive:
  The string to search ends with the target string: False
Case insensitive:
  The string to search ends with the target string: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
EndsWith 重载
System 命名空间
CultureInfo InvariantCulture


String ..::.Equals 方法

String
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

确定两个 String 对象是否具有相同的值。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Equals 方法 (Object)

String
.
.
::
.
Equals 方法 (Object)
String 类

确定此实例是否与指定的对象（也必须是 String 对象）具有相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与此实例进行比较的字符串。

返回值

类型： System Boolean
如果 obj 为 String 并且它的值与此实例相同，则为 true；否则为 false。

此方法执行顺序（区分大小写和区域性）比较。

下面的示例说明 Equals 方法。

' Sample for String.Equals(Object)
'            String.Equals(String)
'            String.Equals(String, String)
Imports System
Imports System.Text

Class Sample
   Public Shared Sub Main()
      Dim sb As New StringBuilder("abcd")
      Dim str1 As [String] = "abcd"
      Dim str2 As [String] = Nothing
      Dim o2 As [Object] = Nothing

      Console.WriteLine()
      Console.WriteLine(" *  The value of String str1 is '{0}'.", str1)
      Console.WriteLine(" *  The value of StringBuilder sb is '{0}'.", sb.ToString())

      Console.WriteLine()
      Console.WriteLine("1a) String.Equals(Object). Object is a StringBuilder, not a String.")
      Console.WriteLine("    Is str1 equal to sb?: {0}", str1.Equals(sb))

      Console.WriteLine()
      Console.WriteLine("1b) String.Equals(Object). Object is a String.")
      str2 = sb.ToString()
      o2 = str2
      Console.WriteLine(" *  The value of Object o2 is '{0}'.", o2)
      Console.WriteLine("    Is str1 equal to o2?: {0}", str1.Equals(o2))

      Console.WriteLine()
      Console.WriteLine(" 2) String.Equals(String)")
      Console.WriteLine(" *  The value of String str2 is '{0}'.", str2)
      Console.WriteLine("    Is str1 equal to str2?: {0}", str1.Equals(str2))

      Console.WriteLine()
      Console.WriteLine(" 3) String.Equals(String, String)")
      Console.WriteLine("    Is str1 equal to str2?: {0}", [String].Equals(str1, str2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
' *  The value of String str1 is 'abcd'.
' *  The value of StringBuilder sb is 'abcd'.
'
'1a) String.Equals(Object). Object is a StringBuilder, not a String.
'    Is str1 equal to sb?: False
'
'1b) String.Equals(Object). Object is a String.
' *  The value of Object o2 is 'abcd'.
'    Is str1 equal to o2?: True
'
' 2) String.Equals(String)
' *  The value of String str2 is 'abcd'.
'    Is str1 equal to str2?: True
'
' 3) String.Equals(String, String)
'    Is str1 equal to str2?: True
'

// Sample for String.Equals(Object)
//            String.Equals(String)
//            String.Equals(String, String)
using System;
using System.Text;

class Sample {
    public static void Main() {
    StringBuilder sb = new StringBuilder("abcd");
    String      str1 = "abcd";
    String      str2 = null;
    Object	o2   = null;

    Console.WriteLine();
    Console.WriteLine(" *  The value of String str1 is '{0}'.", str1);
    Console.WriteLine(" *  The value of StringBuilder sb is '{0}'.", sb.ToString());

    Console.WriteLine();
    Console.WriteLine("1a) String.Equals(Object). Object is a StringBuilder, not a String.");
    Console.WriteLine("    Is str1 equal to sb?: {0}", str1.Equals(sb));

    Console.WriteLine();
    Console.WriteLine("1b) String.Equals(Object). Object is a String.");
    str2 = sb.ToString();
    o2   = str2;
    Console.WriteLine(" *  The value of Object o2 is '{0}'.", o2);
    Console.WriteLine("    Is str1 equal to o2?: {0}", str1.Equals(o2));

    Console.WriteLine();
    Console.WriteLine(" 2) String.Equals(String)");
    Console.WriteLine(" *  The value of String str2 is '{0}'.", str2);
    Console.WriteLine("    Is str1 equal to str2?: {0}", str1.Equals(str2));

    Console.WriteLine();
    Console.WriteLine(" 3) String.Equals(String, String)");
    Console.WriteLine("    Is str1 equal to str2?: {0}", String.Equals(str1, str2));
    }
}
/*
This example produces the following results:

 *  The value of String str1 is 'abcd'.
 *  The value of StringBuilder sb is 'abcd'.

1a) String.Equals(Object). Object is a StringBuilder, not a String.
    Is str1 equal to sb?: False

1b) String.Equals(Object). Object is a String.
 *  The value of Object o2 is 'abcd'.
    Is str1 equal to o2?: True

 2) String.Equals(String)
 *  The value of String str2 is 'abcd'.
    Is str1 equal to str2?: True

 3) String.Equals(String, String)
    Is str1 equal to str2?: True
*/

// Sample for String::Equals(Object)
//            String::Equals(String)
//            String::Equals(String, String)
using namespace System;
using namespace System::Text;
int main()
{
   StringBuilder^ sb = gcnew StringBuilder( "abcd" );
   String^ str1 = "abcd";
   String^ str2 = nullptr;
   Object^ o2 = nullptr;
   Console::WriteLine();
   Console::WriteLine( " *  The value of String str1 is '{0}'.", str1 );
   Console::WriteLine( " *  The value of StringBuilder sb is '{0}'.", sb );
   Console::WriteLine();
   Console::WriteLine( "1a) String::Equals(Object). Object is a StringBuilder, not a String." );
   Console::WriteLine( "    Is str1 equal to sb?: {0}", str1->Equals( sb ) );
   Console::WriteLine();
   Console::WriteLine( "1b) String::Equals(Object). Object is a String." );
   str2 = sb->ToString();
   o2 = str2;
   Console::WriteLine( " *  The value of Object o2 is '{0}'.", o2 );
   Console::WriteLine( "    Is str1 equal to o2?: {0}", str1->Equals( o2 ) );
   Console::WriteLine();
   Console::WriteLine( " 2) String::Equals(String)" );
   Console::WriteLine( " *  The value of String str2 is '{0}'.", str2 );
   Console::WriteLine( "    Is str1 equal to str2?: {0}", str1->Equals( str2 ) );
   Console::WriteLine();
   Console::WriteLine( " 3) String::Equals(String, String)" );
   Console::WriteLine( "    Is str1 equal to str2?: {0}", String::Equals( str1, str2 ) );
}

/*
This example produces the following results:

 *  The value of String str1 is 'abcd'.
 *  The value of StringBuilder sb is 'abcd'.

1a) String::Equals(Object). Object is a StringBuilder, not a String.
    Is str1 equal to sb?: False

1b) String::Equals(Object). Object is a String.
 *  The value of Object o2 is 'abcd'.
    Is str1 equal to o2?: True

 2) String::Equals(String)
 *  The value of String str2 is 'abcd'.
    Is str1 equal to str2?: True

 3) String::Equals(String, String)
    Is str1 equal to str2?: True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Equals 重载
System 命名空间
Object
CompareOrdinal


String ..::.Equals 方法 (String)

String
.
.
::
.
Equals 方法 (String)
String 类

确定此实例是否与另一个指定的 String 对象具有相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    value As String _
) As Boolean
public bool Equals(
    string value
)
public:
virtual bool Equals(
    String^ value
) sealed
abstract Equals :
        value:string -> bool
override Equals :
        value:string -> bool

参数

value
类型： System String
要与此实例进行比较的字符串。

返回值

类型： System Boolean
如果 value 参数的值与此实例相同，则为 true；否则为 false。

实现

此方法执行顺序（区分大小写和区域性）比较。

下面的示例说明 Equals 方法。

Module Example
   Public Sub Main()
      Dim word As String = "File"
      Dim others() As String = { word.ToLower(), word, word.ToUpper(), _
                                 "f le" }
      For Each other As String In others
         If word.Equals(other) Then
            Console.WriteLine("{0} = {1}", word, other)
         Else
            Console.WriteLine("{0} {1} {2}", word, ChrW(&H2260), other)
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'       File ≠ file
'       File = File
'       File ≠ FILE
'       File ≠ f le

using System;

public class Example
{
   public static void Main()
   {
      string word = "File";
      string[] others = { word.ToLower(), word, word.ToUpper(), "f le" };
      foreach (string other in others)
      {
         if (word.Equals(other))
            Console.WriteLine("{0} = {1}", word, other);
         else
            Console.WriteLine("{0} {1} {2}", word, '\u2260', other);
      }
   }
}
// The example displays the following output:
//       File ≠ file
//       File = File
//       File ≠ FILE
//       File ≠ f le

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Equals 重载
System 命名空间
CompareOrdinal


String ..::.Equals 方法 (String, String)

String
.
.
::
.
Equals 方法 (String, String)
String 类

确定两个指定的 String 对象是否具有相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Equals ( _
    a As String, _
    b As String _
) As Boolean
public static bool Equals(
    string a,
    string b
)
public:
static bool Equals(
    String^ a,
    String^ b
)
static member Equals :
        a:string *
        b:string -> bool

参数

a
类型： System String
要比较的第一个字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
b
类型： System String
要比较的第二个字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 a 的值与 b 的值相同，则为 true；否则为 false。

此方法执行顺序（区分大小写和区域性）比较。

下面的示例说明 Equals 方法。

' Sample for String.Equals(Object)
'            String.Equals(String)
'            String.Equals(String, String)
Imports System
Imports System.Text

Class Sample
   Public Shared Sub Main()
      Dim sb As New StringBuilder("abcd")
      Dim str1 As [String] = "abcd"
      Dim str2 As [String] = Nothing
      Dim o2 As [Object] = Nothing

      Console.WriteLine()
      Console.WriteLine(" *  The value of String str1 is '{0}'.", str1)
      Console.WriteLine(" *  The value of StringBuilder sb is '{0}'.", sb.ToString())

      Console.WriteLine()
      Console.WriteLine("1a) String.Equals(Object). Object is a StringBuilder, not a String.")
      Console.WriteLine("    Is str1 equal to sb?: {0}", str1.Equals(sb))

      Console.WriteLine()
      Console.WriteLine("1b) String.Equals(Object). Object is a String.")
      str2 = sb.ToString()
      o2 = str2
      Console.WriteLine(" *  The value of Object o2 is '{0}'.", o2)
      Console.WriteLine("    Is str1 equal to o2?: {0}", str1.Equals(o2))

      Console.WriteLine()
      Console.WriteLine(" 2) String.Equals(String)")
      Console.WriteLine(" *  The value of String str2 is '{0}'.", str2)
      Console.WriteLine("    Is str1 equal to str2?: {0}", str1.Equals(str2))

      Console.WriteLine()
      Console.WriteLine(" 3) String.Equals(String, String)")
      Console.WriteLine("    Is str1 equal to str2?: {0}", [String].Equals(str1, str2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
' *  The value of String str1 is 'abcd'.
' *  The value of StringBuilder sb is 'abcd'.
'
'1a) String.Equals(Object). Object is a StringBuilder, not a String.
'    Is str1 equal to sb?: False
'
'1b) String.Equals(Object). Object is a String.
' *  The value of Object o2 is 'abcd'.
'    Is str1 equal to o2?: True
'
' 2) String.Equals(String)
' *  The value of String str2 is 'abcd'.
'    Is str1 equal to str2?: True
'
' 3) String.Equals(String, String)
'    Is str1 equal to str2?: True
'

// Sample for String.Equals(Object)
//            String.Equals(String)
//            String.Equals(String, String)
using System;
using System.Text;

class Sample {
    public static void Main() {
    StringBuilder sb = new StringBuilder("abcd");
    String      str1 = "abcd";
    String      str2 = null;
    Object	o2   = null;

    Console.WriteLine();
    Console.WriteLine(" *  The value of String str1 is '{0}'.", str1);
    Console.WriteLine(" *  The value of StringBuilder sb is '{0}'.", sb.ToString());

    Console.WriteLine();
    Console.WriteLine("1a) String.Equals(Object). Object is a StringBuilder, not a String.");
    Console.WriteLine("    Is str1 equal to sb?: {0}", str1.Equals(sb));

    Console.WriteLine();
    Console.WriteLine("1b) String.Equals(Object). Object is a String.");
    str2 = sb.ToString();
    o2   = str2;
    Console.WriteLine(" *  The value of Object o2 is '{0}'.", o2);
    Console.WriteLine("    Is str1 equal to o2?: {0}", str1.Equals(o2));

    Console.WriteLine();
    Console.WriteLine(" 2) String.Equals(String)");
    Console.WriteLine(" *  The value of String str2 is '{0}'.", str2);
    Console.WriteLine("    Is str1 equal to str2?: {0}", str1.Equals(str2));

    Console.WriteLine();
    Console.WriteLine(" 3) String.Equals(String, String)");
    Console.WriteLine("    Is str1 equal to str2?: {0}", String.Equals(str1, str2));
    }
}
/*
This example produces the following results:

 *  The value of String str1 is 'abcd'.
 *  The value of StringBuilder sb is 'abcd'.

1a) String.Equals(Object). Object is a StringBuilder, not a String.
    Is str1 equal to sb?: False

1b) String.Equals(Object). Object is a String.
 *  The value of Object o2 is 'abcd'.
    Is str1 equal to o2?: True

 2) String.Equals(String)
 *  The value of String str2 is 'abcd'.
    Is str1 equal to str2?: True

 3) String.Equals(String, String)
    Is str1 equal to str2?: True
*/

// Sample for String::Equals(Object)
//            String::Equals(String)
//            String::Equals(String, String)
using namespace System;
using namespace System::Text;
int main()
{
   StringBuilder^ sb = gcnew StringBuilder( "abcd" );
   String^ str1 = "abcd";
   String^ str2 = nullptr;
   Object^ o2 = nullptr;
   Console::WriteLine();
   Console::WriteLine( " *  The value of String str1 is '{0}'.", str1 );
   Console::WriteLine( " *  The value of StringBuilder sb is '{0}'.", sb );
   Console::WriteLine();
   Console::WriteLine( "1a) String::Equals(Object). Object is a StringBuilder, not a String." );
   Console::WriteLine( "    Is str1 equal to sb?: {0}", str1->Equals( sb ) );
   Console::WriteLine();
   Console::WriteLine( "1b) String::Equals(Object). Object is a String." );
   str2 = sb->ToString();
   o2 = str2;
   Console::WriteLine( " *  The value of Object o2 is '{0}'.", o2 );
   Console::WriteLine( "    Is str1 equal to o2?: {0}", str1->Equals( o2 ) );
   Console::WriteLine();
   Console::WriteLine( " 2) String::Equals(String)" );
   Console::WriteLine( " *  The value of String str2 is '{0}'.", str2 );
   Console::WriteLine( "    Is str1 equal to str2?: {0}", str1->Equals( str2 ) );
   Console::WriteLine();
   Console::WriteLine( " 3) String::Equals(String, String)" );
   Console::WriteLine( "    Is str1 equal to str2?: {0}", String::Equals( str1, str2 ) );
}

/*
This example produces the following results:

 *  The value of String str1 is 'abcd'.
 *  The value of StringBuilder sb is 'abcd'.

1a) String::Equals(Object). Object is a StringBuilder, not a String.
    Is str1 equal to sb?: False

1b) String::Equals(Object). Object is a String.
 *  The value of Object o2 is 'abcd'.
    Is str1 equal to o2?: True

 2) String::Equals(String)
 *  The value of String str2 is 'abcd'.
    Is str1 equal to str2?: True

 3) String::Equals(String, String)
    Is str1 equal to str2?: True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Equals 重载
System 命名空间
CompareOrdinal


String ..::.Equals 方法 (String, StringComparison)

String
.
.
::
.
Equals 方法 (String, StringComparison)
String 类

确定此字符串是否与指定的 String 对象具有相同的值。参数指定区域性、大小写以及比较所用的排序规则。 确定此字符串是否与指定的 String 对象具有相同的值。参数指定区域性、大小写以及比较所用的排序规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    value As String, _
    comparisonType As StringComparison _
) As Boolean
public bool Equals(
    string value,
    StringComparison comparisonType
)
public:
bool Equals(
    String^ value,
    StringComparison comparisonType
)
member Equals :
        value:string *
        comparisonType:StringComparison -> bool

参数

value
类型： System String
要与此实例进行比较的字符串。
comparisonType
类型： System StringComparison
枚举值之一，用于指定将如何比较字符串。

返回值

类型： System Boolean
如果 value 参数的值与此字符串相同，则为 true；否则为 false。
异常 | 条件
ArgumentException | comparisonType 不是一个 StringComparison 值。

comparisonType 参数指示比较应使用当前区域性还是固定区域性，应考虑还是忽略两个待比较字符串的大小写，以及应使用字排序规则还是序号排序规则。

下面的示例创建一个字符串数组，包括一个大写 "I"、小写 "i" 和无点 " "。然后，它调用 Equals(String, StringComparison) 方法，通过使用每个可能的 StringComparison 枚举值进行比较。 下面的示例创建一个字符串数组，包括一个大写 "I"、小写 "i" 和无点 " "。然后，它调用 Equals(String, StringComparison) 方法，通过使用每个可能的 StringComparison 枚举值进行比较。

Class Sample
   Public Shared Sub Main()
      ' Define a string array with the following three "I" characters:
      '      U+0069, U+0131, and U+0049.
      Dim threeIs() As String = { "i", " ", "I" }
      ' Define Type object representing StringComparison type.
      Dim scType As Type = GetType(StringComparison)

      ' Show the current culture (for culture-sensitive string comparisons).
      Console.WriteLine("The current culture is {0}." & vbCrLf, _
                        System.Globalization.CultureInfo.CurrentCulture.Name)

      ' Perform comparisons using each StringComparison member.
      For Each scName As String In [Enum].GetNames(scType)
         Dim sc As StringComparison = [Enum].Parse(scType, scName)
         Console.WriteLine("Comparisons using {0}:", sc)
         ' Compare each character in character array.
         For ctr As Integer = 0 To 1
            Dim instanceChar As String = threeIs(ctr)
            For innerCtr As Integer = ctr + 1 To threeIs.GetUpperBound(0)
               Dim otherChar As STring = threeIs(innerCtr)
               Console.WriteLine("{0} (U+{1}) = {2} (U+{3}): {4}", _
                                 instanceChar, Convert.ToInt16(Char.Parse(instanceChar)).ToString("X4"), _
                                 otherChar, Convert.ToInt16(Char.Parse(otherChar)).ToString("X4"), _
                                 instanceChar.Equals(otherChar, sc))
            Next
            Console.WriteLine()
         Next
      Next
   End Sub
End Class
' The example displays the following output:
'       The current culture is en-US.
'
'       Comparisons using CurrentCulture:
'       i (U+0069) = i (U+0131): False
'       i (U+0069) = I (U+0049): False
'
'       i (U+0131) = I (U+0049): False
'
'       Comparisons using CurrentCultureIgnoreCase:
'       i (U+0069) = i (U+0131): False
'       i (U+0069) = I (U+0049): True
'
'       i (U+0131) = I (U+0049): False
'
'       Comparisons using InvariantCulture:
'       i (U+0069) = i (U+0131): False
'       i (U+0069) = I (U+0049): False
'
'       i (U+0131) = I (U+0049): False
'
'       Comparisons using InvariantCultureIgnoreCase:
'       i (U+0069) = i (U+0131): False
'       i (U+0069) = I (U+0049): True
'
'       i (U+0131) = I (U+0049): False
'
'       Comparisons using Ordinal:
'       i (U+0069) = i (U+0131): False
'       i (U+0069) = I (U+0049): False
'
'       i (U+0131) = I (U+0049): False
'
'       Comparisons using OrdinalIgnoreCase:
'       i (U+0069) = i (U+0131): False
'       i (U+0069) = I (U+0049): True
'
'       i (U+0131) = I (U+0049): False

using System;

class Sample
{
   public static void Main()
   {
      // Define a string array with the following three "I" characters:
      //      U+0069, U+0131, and U+0049.
      string[] threeIs = { "i", " ", "I" };
      // Define Type object representing StringComparison type.
      Type scType = typeof(StringComparison);

      // Show the current culture (for culture-sensitive string comparisons).
      Console.WriteLine("The current culture is {0}.\n",
                        System.Globalization.CultureInfo.CurrentCulture.Name);

      // Perform comparisons using each StringComparison member.
      foreach (string scName in Enum.GetNames(scType))
      {
         StringComparison sc = (StringComparison) Enum.Parse(scType, scName);
         Console.WriteLine("Comparisons using {0}:", sc);
         // Compare each character in character array.
         for (int ctr = 0; ctr <= 1; ctr++)
         {
            string instanceChar = threeIs[ctr];
            for (int innerCtr = ctr + 1; innerCtr <= threeIs.GetUpperBound(0); innerCtr++)
            {
               string otherChar = threeIs[innerCtr];
               Console.WriteLine("{0} (U+{1}) = {2} (U+{3}): {4}",
                                 instanceChar, Convert.ToInt16(Char.Parse(instanceChar)).ToString("X4"),
                                 otherChar, Convert.ToInt16(Char.Parse(otherChar)).ToString("X4"),
                                 instanceChar.Equals(otherChar, sc));
            }
            Console.WriteLine();
         }
      }
   }
}
// The example displays the following output:
//       The current culture is en-US.
//
//       Comparisons using CurrentCulture:
//       i (U+0069) = i (U+0131): False
//       i (U+0069) = I (U+0049): False
//
//       i (U+0131) = I (U+0049): False
//
//       Comparisons using CurrentCultureIgnoreCase:
//       i (U+0069) = i (U+0131): False
//       i (U+0069) = I (U+0049): True
//
//       i (U+0131) = I (U+0049): False
//
//       Comparisons using InvariantCulture:
//       i (U+0069) = i (U+0131): False
//       i (U+0069) = I (U+0049): False
//
//       i (U+0131) = I (U+0049): False
//
//       Comparisons using InvariantCultureIgnoreCase:
//       i (U+0069) = i (U+0131): False
//       i (U+0069) = I (U+0049): True
//
//       i (U+0131) = I (U+0049): False
//
//       Comparisons using Ordinal:
//       i (U+0069) = i (U+0131): False
//       i (U+0069) = I (U+0049): False
//
//       i (U+0131) = I (U+0049): False
//
//       Comparisons using OrdinalIgnoreCase:
//       i (U+0069) = i (U+0131): False
//       i (U+0069) = I (U+0049): True
//
//       i (U+0131) = I (U+0049): False

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Equals 重载
System 命名空间
CompareOrdinal


String ..::.Equals 方法 (String, String, StringComparison)

String
.
.
::
.
Equals 方法 (String, String, StringComparison)
String 类

确定两个指定的 String 对象是否具有相同的值。参数指定区域性、大小写以及比较所用的排序规则。 确定两个指定的 String 对象是否具有相同的值。参数指定区域性、大小写以及比较所用的排序规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Equals ( _
    a As String, _
    b As String, _
    comparisonType As StringComparison _
) As Boolean
public static bool Equals(
    string a,
    string b,
    StringComparison comparisonType
)
public:
static bool Equals(
    String^ a,
    String^ b,
    StringComparison comparisonType
)
static member Equals :
        a:string *
        b:string *
        comparisonType:StringComparison -> bool

参数

a
类型： System String
要比较的第一个字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
b
类型： System String
要比较的第二个字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
comparisonType
类型： System StringComparison
枚举值之一，用于指定比较的规则。

返回值

类型： System Boolean
如果 a 参数的值等于 b 参数的值，则为 true；否则为 false。
异常 | 条件
ArgumentException | comparisonType 不是一个 StringComparison 值。

comparisonType 参数指示比较应使用当前区域性还是固定区域性，应考虑还是忽略两个待比较字符串的大小写，以及应使用字排序规则还是序号排序规则。

下面的示例使用 Equals 方法的三个版本确定 String 对象与 StringBuilder 对象是否相等。

' Sample for String.Equals(Object)
'            String.Equals(String)
'            String.Equals(String, String)
Imports System
Imports System.Text

Class Sample
   Public Shared Sub Main()
      Dim sb As New StringBuilder("abcd")
      Dim str1 As [String] = "abcd"
      Dim str2 As [String] = Nothing
      Dim o2 As [Object] = Nothing

      Console.WriteLine()
      Console.WriteLine(" *  The value of String str1 is '{0}'.", str1)
      Console.WriteLine(" *  The value of StringBuilder sb is '{0}'.", sb.ToString())

      Console.WriteLine()
      Console.WriteLine("1a) String.Equals(Object). Object is a StringBuilder, not a String.")
      Console.WriteLine("    Is str1 equal to sb?: {0}", str1.Equals(sb))

      Console.WriteLine()
      Console.WriteLine("1b) String.Equals(Object). Object is a String.")
      str2 = sb.ToString()
      o2 = str2
      Console.WriteLine(" *  The value of Object o2 is '{0}'.", o2)
      Console.WriteLine("    Is str1 equal to o2?: {0}", str1.Equals(o2))

      Console.WriteLine()
      Console.WriteLine(" 2) String.Equals(String)")
      Console.WriteLine(" *  The value of String str2 is '{0}'.", str2)
      Console.WriteLine("    Is str1 equal to str2?: {0}", str1.Equals(str2))

      Console.WriteLine()
      Console.WriteLine(" 3) String.Equals(String, String)")
      Console.WriteLine("    Is str1 equal to str2?: {0}", [String].Equals(str1, str2))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
' *  The value of String str1 is 'abcd'.
' *  The value of StringBuilder sb is 'abcd'.
'
'1a) String.Equals(Object). Object is a StringBuilder, not a String.
'    Is str1 equal to sb?: False
'
'1b) String.Equals(Object). Object is a String.
' *  The value of Object o2 is 'abcd'.
'    Is str1 equal to o2?: True
'
' 2) String.Equals(String)
' *  The value of String str2 is 'abcd'.
'    Is str1 equal to str2?: True
'
' 3) String.Equals(String, String)
'    Is str1 equal to str2?: True
'

// Sample for String.Equals(Object)
//            String.Equals(String)
//            String.Equals(String, String)
using System;
using System.Text;

class Sample {
    public static void Main() {
    StringBuilder sb = new StringBuilder("abcd");
    String      str1 = "abcd";
    String      str2 = null;
    Object	o2   = null;

    Console.WriteLine();
    Console.WriteLine(" *  The value of String str1 is '{0}'.", str1);
    Console.WriteLine(" *  The value of StringBuilder sb is '{0}'.", sb.ToString());

    Console.WriteLine();
    Console.WriteLine("1a) String.Equals(Object). Object is a StringBuilder, not a String.");
    Console.WriteLine("    Is str1 equal to sb?: {0}", str1.Equals(sb));

    Console.WriteLine();
    Console.WriteLine("1b) String.Equals(Object). Object is a String.");
    str2 = sb.ToString();
    o2   = str2;
    Console.WriteLine(" *  The value of Object o2 is '{0}'.", o2);
    Console.WriteLine("    Is str1 equal to o2?: {0}", str1.Equals(o2));

    Console.WriteLine();
    Console.WriteLine(" 2) String.Equals(String)");
    Console.WriteLine(" *  The value of String str2 is '{0}'.", str2);
    Console.WriteLine("    Is str1 equal to str2?: {0}", str1.Equals(str2));

    Console.WriteLine();
    Console.WriteLine(" 3) String.Equals(String, String)");
    Console.WriteLine("    Is str1 equal to str2?: {0}", String.Equals(str1, str2));
    }
}
/*
This example produces the following results:

 *  The value of String str1 is 'abcd'.
 *  The value of StringBuilder sb is 'abcd'.

1a) String.Equals(Object). Object is a StringBuilder, not a String.
    Is str1 equal to sb?: False

1b) String.Equals(Object). Object is a String.
 *  The value of Object o2 is 'abcd'.
    Is str1 equal to o2?: True

 2) String.Equals(String)
 *  The value of String str2 is 'abcd'.
    Is str1 equal to str2?: True

 3) String.Equals(String, String)
    Is str1 equal to str2?: True
*/

// Sample for String::Equals(Object)
//            String::Equals(String)
//            String::Equals(String, String)
using namespace System;
using namespace System::Text;
int main()
{
   StringBuilder^ sb = gcnew StringBuilder( "abcd" );
   String^ str1 = "abcd";
   String^ str2 = nullptr;
   Object^ o2 = nullptr;
   Console::WriteLine();
   Console::WriteLine( " *  The value of String str1 is '{0}'.", str1 );
   Console::WriteLine( " *  The value of StringBuilder sb is '{0}'.", sb );
   Console::WriteLine();
   Console::WriteLine( "1a) String::Equals(Object). Object is a StringBuilder, not a String." );
   Console::WriteLine( "    Is str1 equal to sb?: {0}", str1->Equals( sb ) );
   Console::WriteLine();
   Console::WriteLine( "1b) String::Equals(Object). Object is a String." );
   str2 = sb->ToString();
   o2 = str2;
   Console::WriteLine( " *  The value of Object o2 is '{0}'.", o2 );
   Console::WriteLine( "    Is str1 equal to o2?: {0}", str1->Equals( o2 ) );
   Console::WriteLine();
   Console::WriteLine( " 2) String::Equals(String)" );
   Console::WriteLine( " *  The value of String str2 is '{0}'.", str2 );
   Console::WriteLine( "    Is str1 equal to str2?: {0}", str1->Equals( str2 ) );
   Console::WriteLine();
   Console::WriteLine( " 3) String::Equals(String, String)" );
   Console::WriteLine( "    Is str1 equal to str2?: {0}", String::Equals( str1, str2 ) );
}

/*
This example produces the following results:

 *  The value of String str1 is 'abcd'.
 *  The value of StringBuilder sb is 'abcd'.

1a) String::Equals(Object). Object is a StringBuilder, not a String.
    Is str1 equal to sb?: False

1b) String::Equals(Object). Object is a String.
 *  The value of Object o2 is 'abcd'.
    Is str1 equal to o2?: True

 2) String::Equals(String)
 *  The value of String str2 is 'abcd'.
    Is str1 equal to str2?: True

 3) String::Equals(String, String)
    Is str1 equal to str2?: True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Equals 重载
System 命名空间
CompareOrdinal


String ..::.Format 方法

String
.
.
::
.
Format 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

将指定字符串中的每个格式项替换为相应对象的值的等效文本。

名称 说明
页首

参考

String 类
String 成员
System 命名空间

其他资源

格式化类型
复合格式
标准日期和时间格式字符串
自定义日期和时间格式字符串
标准数字格式字符串
自定义数字格式字符串
枚举格式字符串


String ..::.Format 方法 (String, Object)

String
.
.
::
.
Format 方法 (String, Object)
String 类

将指定字符串中的一个或多个格式项替换为指定对象的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Format ( _
    format As String, _
    arg0 As Object _
) As String
public static string Format(
    string format,
    Object arg0
)
public:
static String^ Format(
    String^ format,
    Object^ arg0
)
static member Format :
        format:string *
        arg0:Object -> string

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要设置格式的对象。

返回值

类型： System String
format 的副本，其中的任何格式项均替换为 arg0 的字符串表示形式。
异常 | 条件
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 中的格式项无效。 - 或 - 格式项的索引大于或小于零。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其字符串表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述： 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其字符串表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的字符串表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的字符串表示形式。

格式项的语法如下：

{index[,length][:formatString]}

方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。

元素 | Description
Index — 索引 | 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。由于该重载在其参数列表中只有单个对象，index 的值必须始终为 0。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。由于该重载在其参数列表中只有单个对象，index 的值必须始终为 0。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。由于该重载在其参数列表中只有单个对象，index 的值必须始终为 0。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。由于该重载在其参数列表中只有单个对象，index 的值必须始终为 0。如果 index 位置没有参数，将引发 FormatException。
,length | 参数的字符串表示形式中包含的最小字符数。如果该值是正的，则参数右对齐；如果该值是负的，则参数左对齐。 参数的字符串表示形式中包含的最小字符数。如果该值是正的，则参数右对齐；如果该值是负的，则参数左对齐。
:formatString | 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。
说明 说明

有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。

必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。 必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。

尽管 String..::.Format(String, Object) 方法在参数列表中具有单个对象，只要格式项目都具有同一索引，format 仍可包括多个格式项目。在下面的示例中，格式字符串包括两个格式项：一个显示数字的十进制值，另一个显示其十六进制值。 尽管 String..::.Format(String, Object) 方法在参数列表中具有单个对象，只要格式项目都具有同一索引，format 仍可包括多个格式项目。在下面的示例中，格式字符串包括两个格式项：一个显示数字的十进制值，另一个显示其十六进制值。

Module Example
   Public Sub Main()
      Dim values() As Short = { Int16.MinValue, -27, 0, 1042, Int16.MaxValue }
      Console.WriteLine("{0,10}  {1,10}", "Decimal", "Hex")
      Console.WriteLine()
      For Each value As Short In values
         Dim formatString As String = String.Format("{0,10:G}: {0,10:X}", value)
         Console.WriteLine(formatString)
      Next
   End Sub
End Module
' The example displays the following output:
'       Decimal         Hex
'
'        -32768:       8000
'           -27:       FFE5
'             0:          0
'          1042:        412
'         32767:       7FFF

public class Example
{
   public static void Main()
   {
      short[] values= { Int16.MinValue, -27, 0, 1042, Int16.MaxValue };
      Console.WriteLine("{0,10}  {1,10}\n", "Decimal", "Hex");
      foreach (short value in values)
      {
         string formatString = String.Format("{0,10:G}: {0,10:X}", value);
         Console.WriteLine(formatString);
      }
   }
}
// The example displays the following output:
//       Decimal         Hex
//
//        -32768:       8000
//           -27:       FFE5
//             0:          0
//          1042:        412
//         32767:       7FFF

如果 format 的值为“Thank you for your purchase of {0:####} copies of Microsoft .NET (Core Reference).”，并且 arg0 为值为 123 的 Int16，则返回值将为：

“Thank you for your purchase of 123 copies of Microsoft .NET (Core Reference).”

如果 format 的值为“Brad's dog has {0,-8:G} fleas.”，arg0 是值为 42 的 Int16（在此示例中，下划线表示填充空格），则返回值将为：

“Brad's dog has 42______ fleas.”

下面的示例使用 Format(String, Object) 方法将一个人的年龄嵌入字符串的中部。

Module Example
   Public Sub Main()
      Dim birthdate As Date = #7/28/1993#
      Dim dates() As Date = { #9/16/1993#, #7/28/1994#, #10/16/2000#, _
                              #7/27/2003#, #5/27/2007# }
      For Each dateValue As Date In dates
         Dim interval As TimeSpan = dateValue - birthdate
         ' Get the approximate number of years, without accounting for leap years.
         Dim years As Integer = CInt(interval.TotalDays) \ 365
         ' See if adding the number of years exceeds dateValue.
         Dim output As String
         If birthdate.AddYears(years) <= dateValue Then
            output = String.Format("You are now {0} years old.", years)
            Console.WriteLine(output)
         Else
            output = String.Format("You are now {0} years old.", years - 1)
            Console.WriteLine(output)
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'       You are now 0 years old.
'       You are now 1 years old.
'       You are now 7 years old.
'       You are now 9 years old.
'       You are now 13 years old.

using System;

[assembly: CLSCompliant(true)]
public class Example
{
   public static void Main()
   {
      DateTime birthdate = new DateTime(1993, 7, 28);
      DateTime[] dates = { new DateTime(1993, 8, 16),
                           new DateTime(1994, 7, 28),
                           new DateTime(2000, 10, 16),
                           new DateTime(2003, 7, 27),
                           new DateTime(2007, 5, 27) };

      foreach (DateTime dateValue in dates)
      {
         TimeSpan interval = dateValue - birthdate;
         // Get the approximate number of years, without accounting for leap years.
         int years = ((int) interval.TotalDays) / 365;
         // See if adding the number of years exceeds dateValue.
         string output;
         if (birthdate.AddYears(years) <= dateValue) {
            output = String.Format("You are now {0} years old.", years);
            Console.WriteLine(output);
         }
         else {
            output = String.Format("You are now {0} years old.", years - 1);
            Console.WriteLine(output);
         }
      }
   }
}
// The example displays the following output:
//       You are now 0 years old.
//       You are now 1 years old.
//       You are now 7 years old.
//       You are now 9 years old.
//       You are now 13 years old.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Format 重载
System 命名空间

其他资源

格式化类型
复合格式


String ..::.Format 方法 (String, array<Object >[]()[])

String
.
.
::
.
Format 方法 (String,
array<
Object
>
[]
()
[]
)
String 类

将指定字符串中的格式项替换为指定数组中相应对象的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Format ( _
    format As String, _
    ParamArray args As Object() _
) As String
public static string Format(
    string format,
    params Object[] args
)
public:
static String^ Format(
    String^ format,
    ... array<Object^>^ args
)
static member Format :
        format:string *
        args:Object[] -> string

参数

format
类型： System String
复合格式字符串。
args
类型：
array<
System Object
>
[]
()
[]

一个对象数组，其中包含零个或多个要设置格式的对象。

返回值

类型： System String
format 的副本，其中的格式项已替换为 args 中相应对象的字符串表示形式。
异常 | 条件
ArgumentNullException | format 或 args 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 无效。 - 或 - 格式项的索引小于零或大于等于 args 数组的长度。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述： 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象的字符串表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象的字符串表示形式。

格式项的语法如下：

{index[,length][:formatString]}

方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。

元素 | Description
Index — 索引 | 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。如果 index 位置没有参数，将引发 FormatException。
,length | 参数的字符串表示形式中包含的最小字符数。如果该值是正的，则参数右对齐；如果该值是负的，则参数左对齐。 参数的字符串表示形式中包含的最小字符数。如果该值是正的，则参数右对齐；如果该值是负的，则参数左对齐。
:formatString | 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。
说明 说明

有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。

必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。 必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。

如果 format 的值为“Thank you for your purchase of {0:####} copies of Microsoft .NET (Core Reference).”，且 arg[0] 是值为 123 的 Int16 ，则返回值将为：

“Thank you for your purchase of 123 copies of Microsoft .NET (Core Reference).”

如果 format 的值为“Brad's dog has {0,-8:G} fleas.”，arg[0] 是值为 42 的 Int16（在此示例中，下划线表示填充空格），则返回值为：

“Brad's dog has 42______ fleas.”

下面的示例创建一个字符串，包含有关特定日期高温和低温的数据。复合格式字符串在 C# 示例中有 5 个格式项，在 Visual Basic 示例中有 6 个格式项。两个格式项定义其相应值的字符串表示形式的宽度，第一个格式项还包括标准日期和时间格式字符串。 下面的示例创建一个字符串，包含有关特定日期高温和低温的数据。复合格式字符串在 C# 示例中有 5 个格式项，在 Visual Basic 示例中有 6 个格式项。两个格式项定义其相应值的字符串表示形式的宽度，第一个格式项还包括标准日期和时间格式字符串。 下面的示例创建一个字符串，包含有关特定日期高温和低温的数据。复合格式字符串在 C# 示例中有 5 个格式项，在 Visual Basic 示例中有 6 个格式项。两个格式项定义其相应值的字符串表示形式的宽度，第一个格式项还包括标准日期和时间格式字符串。

Module Example
   Public Sub Main()
      Dim date1 As Date = #7/1/2009#
      Dim hiTime As New TimeSpan(14, 17, 32)
      Dim hiTemp As Decimal = 62.1d
      Dim loTime As New TimeSpan(3, 16, 10)
      Dim loTemp As Decimal = 54.8d

      Dim result1 As String = String.Format("Temperature on {0:d}:{5}{1,11}: {2} degrees (hi){5}{3,11}: {4} degrees (lo)", _
                                           date1, hiTime, hiTemp, loTime, loTemp, vbCrLf)
      Console.WriteLine(result1)
      Console.WriteLine()

      Dim result2 As String = String.Format("Temperature on {0:d}:{5}{1,11}: {2} degrees (hi){5}{3,11}: {4} degrees (lo)", _
                                            New Object() { date1, hiTime, hiTemp, loTime, loTemp, vbCrLf })
      Console.WriteLine(result2)
   End Sub
End Module
' The example displays the following output:
'       Temperature on 7/1/2009:
'          14:17:32: 62.1 degrees (hi)
'          03:16:10: 54.8 degrees (lo)
'
'       Temperature on 7/1/2009:
'          14:17:32: 62.1 degrees (hi)
'          03:16:10: 54.8 degrees (lo)

using System;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2009, 7, 1);
      TimeSpan hiTime = new TimeSpan(14, 17, 32);
      decimal hiTemp = 62.1m;
      TimeSpan loTime = new TimeSpan(3, 16, 10);
      decimal loTemp = 54.8m;

      string result1 = String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)",
                                     date1, hiTime, hiTemp, loTime, loTemp);
      Console.WriteLine(result1);
      Console.WriteLine();

      string result2 = String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)",
                                     new object[] { date1, hiTime, hiTemp, loTime, loTemp });
      Console.WriteLine(result2);
   }
}
// The example displays the following output:
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Format 重载
System 命名空间

其他资源

格式化类型
复合格式


String ..::.Format 方法 (IFormatProvider, String, array<Object >[]()[])

String
.
.
::
.
Format 方法 (IFormatProvider, String,
array<
Object
>
[]
()
[]
)
String 类

将指定字符串中的格式项替换为指定数组中相应对象的字符串表示形式。指定的参数提供区域性特定的格式设置信息。 将指定字符串中的格式项替换为指定数组中相应对象的字符串表示形式。指定的参数提供区域性特定的格式设置信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Format ( _
    provider As IFormatProvider, _
    format As String, _
    ParamArray args As Object() _
) As String
public static string Format(
    IFormatProvider provider,
    string format,
    params Object[] args
)
public:
static String^ Format(
    IFormatProvider^ provider,
    String^ format,
    ... array<Object^>^ args
)
static member Format :
        provider:IFormatProvider *
        format:string *
        args:Object[] -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。
format
类型： System String
复合格式字符串。
args
类型：
array<
System Object
>
[]
()
[]

一个对象数组，其中包含零个或多个要设置格式的对象。

返回值

类型： System String
format 的副本，其中的格式项已替换为 args 中相应对象的字符串表示形式。
异常 | 条件
ArgumentNullException | format 或 args 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 无效。 - 或 - 格式项的索引小于零或大于等于 args 数组的长度。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其字符串表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述： 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其字符串表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数提供用于减缓格式化过程的自定义信息和特定于区域性的信息。provider 参数是 IFormatProvider 的实现，其 GetFormat 方法由 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法调用。此方法必须返回类型与 formatType 参数的类型相同的对象以提供格式设置信息。provider 参数的 GetFormat 方法会被调用一次或多次，具体取决于 args 中对象的特定类型，如下所述： provider 参数提供用于减缓格式化过程的自定义信息和特定于区域性的信息。provider 参数是 IFormatProvider 的实现，其 GetFormat 方法由 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法调用。此方法必须返回类型与 formatType 参数的类型相同的对象以提供格式设置信息。provider 参数的 GetFormat 方法会被调用一次或多次，具体取决于 args 中对象的特定类型，如下所述： provider 参数提供用于减缓格式化过程的自定义信息和特定于区域性的信息。provider 参数是 IFormatProvider 的实现，其 GetFormat 方法由 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法调用。此方法必须返回类型与 formatType 参数的类型相同的对象以提供格式设置信息。provider 参数的 GetFormat 方法会被调用一次或多次，具体取决于 args 中对象的特定类型，如下所述： provider 参数提供用于减缓格式化过程的自定义信息和特定于区域性的信息。provider 参数是 IFormatProvider 的实现，其 GetFormat 方法由 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法调用。此方法必须返回类型与 formatType 参数的类型相同的对象以提供格式设置信息。provider 参数的 GetFormat 方法会被调用一次或多次，具体取决于 args 中对象的特定类型，如下所述：

  • 始终向该方法传递一个表示 ICustomFormatter 类型的 Type 对象。

  • 对于相应数据类型为日期和时间值的每个格式项，向该方法传递一个表示 DateTimeFormatInfo 类型的 Type 对象。

  • 对于相应数据类型为数值的每个格式项，向该方法传递一个表示 NumberFormatInfo 类型的 Type 对象。

有关更多信息，请参见 格式化类型 主题的“格式提供程序”部分。“示例”部分提供了一个自定义格式提供程序的示例，该提供程序将数值输出为具有嵌入连字符的客户帐号。 有关更多信息，请参见 格式化类型 主题的“格式提供程序”部分。“示例”部分提供了一个自定义格式提供程序的示例，该提供程序将数值输出为具有嵌入连字符的客户帐号。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的字符串表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的字符串表示形式。

格式项的语法如下：

{index[,length][:formatString]}

方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。

元素 | Description
Index — 索引 | 要设置格式的对象的参数列表中的位置（从零开始）。如果 index 位置没有参数，将引发 FormatException。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。 要设置格式的对象的参数列表中的位置（从零开始）。如果 index 位置没有参数，将引发 FormatException。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。 要设置格式的对象的参数列表中的位置（从零开始）。如果 index 位置没有参数，将引发 FormatException。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。
,length | 要设置格式的对象的字符串表示形式中包含的最小字符数。如果该值是正的，则要设置格式的对象右对齐；如果该值是负的，则左对齐。如果指定 length，则需要使用逗号。 要设置格式的对象的字符串表示形式中包含的最小字符数。如果该值是正的，则要设置格式的对象右对齐；如果该值是负的，则左对齐。如果指定 length，则需要使用逗号。 要设置格式的对象的字符串表示形式中包含的最小字符数。如果该值是正的，则要设置格式的对象右对齐；如果该值是负的，则左对齐。如果指定 length，则需要使用逗号。
:formatString | 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。
说明 说明

有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。

必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。 必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。

如果 format 的值为“Thank you for your purchase of {0:####} copies of Microsoft .NET (Core Reference).”，且 arg[0] 是值为 123 的 Int16 ，则返回值将为：

“Thank you for your purchase of 123 copies of Microsoft .NET (Core Reference).”

如果 format 的值为“Brad's dog has {0,-8:G} fleas.”，arg[0] 是值为 42 的 Int16（在此示例中，下划线表示填充空格），则返回值为：

“Brad's dog has 42______ fleas.”

下面的示例使用 String..::.Format(IFormatProvider, String, array<Object>[]()[]) 方法显示使用几种不同区域性的一些日期和时间值以及数值的字符串表示形式。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR", "de-DE", "es-ES" }

      Dim dateToDisplay As Date = #9/1/2009 6:32PM#
      Dim value As Double = 9164.32

      Console.WriteLine("Culture     Date                                Value")
      Console.WriteLine()
      For Each cultureName As String In cultureNames
         Dim culture As New CultureInfo(cultureName)
         Dim output As String = String.Format(culture, "{0,-11} {1,-35:D} {2:N}", _
                                              culture.Name, dateToDisplay, value)
         Console.WriteLine(output)
      Next
   End Sub
End Module
' The example displays the following output:
'       Culture     Date                                Value
'
'       en-US       Tuesday, September 01, 2009         9,164.32
'       fr-FR       mardi 1 septembre 2009              9 164,32
'       de-DE       Dienstag, 1. September 2009         9.164,32
'       es-ES       martes, 01 de septiembre de 2009    9.164,32

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "de-DE", "es-ES" };

      DateTime dateToDisplay = new DateTime(2009, 9, 1, 18, 32, 0);
      double value = 9164.32;

      Console.WriteLine("Culture     Date                                Value\n");
      foreach (string cultureName in cultureNames)
      {
         CultureInfo culture = new CultureInfo(cultureName);
         string output = String.Format(culture, "{0,-11} {1,-35:D} {2:N}",
                                       culture.Name, dateToDisplay, value);
         Console.WriteLine(output);
      }
   }
}
// The example displays the following output:
//    Culture     Date                                Value
//
//    en-US       Tuesday, September 01, 2009         9,164.32
//    fr-FR       mardi 1 septembre 2009              9 164,32
//    de-DE       Dienstag, 1. September 2009         9.164,32
//    es-ES       martes, 01 de septiembre de 2009    9.164,32

下面的示例定义了一个客户号格式提供程序，该提供程序将整数值格式设置为 x-xxxxx-xx 形式的客户帐户。

Module TestFormatter
   Public Sub Main()
      Dim acctNumber As Integer = 79203159
      Console.WriteLine(String.Format(New CustomerFormatter, "{0}", acctNumber))
      Console.WriteLine(String.Format(New CustomerFormatter, "{0:G}", acctNumber))
      Console.WriteLine(String.Format(New CustomerFormatter, "{0:S}", acctNumber))
      Console.WriteLine(String.Format(New CustomerFormatter, "{0:P}", acctNumber))
      Try
         Console.WriteLine(String.Format(New CustomerFormatter, "{0:X}", acctNumber))
      Catch e As FormatException
         Console.WriteLine(e.Message)
      End Try
   End Sub
End Module

Public Class CustomerFormatter : Implements IFormatProvider, ICustomFormatter
   Public Function GetFormat(type As Type) As Object  _
                   Implements IFormatProvider.GetFormat
      If type Is GetType(ICustomFormatter) Then
         Return Me
      Else
         Return Nothing
      End If
   End Function

   Public Function Format(fmt As String, _
                           arg As Object, _
                           formatProvider As IFormatProvider) As String _
                    Implements ICustomFormatter.Format
      If Not Me.Equals(formatProvider) Then
         Return Nothing
      Else
         If String.IsNullOrEmpty(fmt) Then fmt = "G"

         Dim customerString As String = arg.ToString()
         if customerString.Length < 8 Then _
            customerString = customerString.PadLeft(8, "0"c)

         Select Case fmt
            Case "G"
               Return customerString.Substring(0, 1) & "-" & _
                                     customerString.Substring(1, 5) & "-" & _
                                     customerString.Substring(6)
            Case "S"
               Return customerString.Substring(0, 1) & "/" & _
                                     customerString.Substring(1, 5) & "/" & _
                                     customerString.Substring(6)
            Case "P"
               Return customerString.Substring(0, 1) & "." & _
                                     customerString.Substring(1, 5) & "." & _
                                     customerString.Substring(6)
            Case Else
               Throw New FormatException( _
                         String.Format("The '{0}' format specifier is not supported.", fmt))
         End Select
      End If
   End Function
End Class
' The example displays the following output:
'       7-92031-59
'       7-92031-59
'       7/92031/59
'       7.92031.59
'       The 'X' format specifier is not supported.

using System;

public class TestFormatter
{
   public static void Main()
   {
      int acctNumber = 79203159;
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:G}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:S}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:P}", acctNumber));
      try {
         Console.WriteLine(String.Format(new CustomerFormatter(), "{0:X}", acctNumber));
      }
      catch (FormatException e) {
         Console.WriteLine(e.Message);
      }
   }
}

public class CustomerFormatter : IFormatProvider, ICustomFormatter
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(string format,
                         object arg,
                         IFormatProvider formatProvider)
   {
      if (! this.Equals(formatProvider))
      {
         return null;
      }
      else
      {
         if (String.IsNullOrEmpty(format))
            format = "G";

         string customerString = arg.ToString();
         if (customerString.Length < 8)
            customerString = customerString.PadLeft(8, '0');

         format = format.ToUpper();
         switch (format)
         {
            case "G":
               return customerString.Substring(0, 1) + "-" +
                                     customerString.Substring(1, 5) + "-" +
                                     customerString.Substring(6);
            case "S":
               return customerString.Substring(0, 1) + "/" +
                                     customerString.Substring(1, 5) + "/" +
                                     customerString.Substring(6);
            case "P":
               return customerString.Substring(0, 1) + "." +
                                     customerString.Substring(1, 5) + "." +
                                     customerString.Substring(6);
            default:
               throw new FormatException(
                         String.Format("The '{0}' format specifier is not supported.", format));
         }
      }
   }
}
// The example displays the following output:
//       7-92031-59
//       7-92031-59
//       7/92031/59
//       7.92031.59
//       The 'X' format specifier is not supported.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Format 重载
System 命名空间
DateTimeFormatInfo
ICustomFormatter
IFormatProvider
NumberFormatInfo

其他资源

格式化类型
复合格式


String ..::.Format 方法 (String, Object, Object)

String
.
.
::
.
Format 方法 (String, Object, Object)
String 类

将指定字符串中的格式项替换为两个指定对象的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Format ( _
    format As String, _
    arg0 As Object, _
    arg1 As Object _
) As String
public static string Format(
    string format,
    Object arg0,
    Object arg1
)
public:
static String^ Format(
    String^ format,
    Object^ arg0,
    Object^ arg1
)
static member Format :
        format:string *
        arg0:Object *
        arg1:Object -> string

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要设置格式的第一个对象。
arg1
类型： System Object
要设置格式的第二个对象。

返回值

类型： System String
format 的副本，其中的格式项替换为 arg0 和 arg1 的字符串表示形式。
异常 | 条件
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 无效。 - 或 - 格式项的索引小于零或大于一。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其字符串表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述： 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其字符串表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的字符串表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象值的字符串表示形式。

格式项的语法如下：

{index[,length][:formatString]}

方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。

元素 | Description
Index — 索引 | 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。由于该重载在其参数列表中有两个对象，index 的值必须始终为 0 或 1。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。由于该重载在其参数列表中有两个对象，index 的值必须始终为 0 或 1。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。由于该重载在其参数列表中有两个对象，index 的值必须始终为 0 或 1。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。由于该重载在其参数列表中有两个对象，index 的值必须始终为 0 或 1。如果 index 位置没有参数，将引发 FormatException。
,length | 参数的字符串表示形式中包含的最小字符数。如果该值是正的，则参数右对齐；如果该值是负的，则参数左对齐。 参数的字符串表示形式中包含的最小字符数。如果该值是正的，则参数右对齐；如果该值是负的，则参数左对齐。
:formatString | 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。
说明 说明

有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。

必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。 必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。

如果 format 的值为“Thank you for your purchase of {0:####} copies of Microsoft .NET (Core Reference).”，并且 arg0 为值为 123 的 Int16，则返回值将为：

“Thank you for your purchase of 123 copies of Microsoft .NET (Core Reference).”

如果 format 的值为“Brad's dog has {0,-8:G} fleas.”，arg0 是值为 42 的 Int16（在此示例中，下划线表示填充空格），则返回值将为：

“Brad's dog has 42______ fleas.”

下面的示例使用 Format(String, Object, Object) 方法显示泛型 Dictionary<(Of <(TKey, TValue>)>) 对象中存储的时间和温度数据。注意，格式字符串有三个格式项，而要设置格式的对象只有两个。这是因为列表中的第一个对象（日期和时间值）被两个格式项使用：第一个格式项显示日期和时间值中的时间，第二个显示日期和时间值中的日期。 下面的示例使用 Format(String, Object, Object) 方法显示泛型 Dictionary<(Of <(TKey, TValue>)>) 对象中存储的时间和温度数据。注意，格式字符串有三个格式项，而要设置格式的对象只有两个。这是因为列表中的第一个对象（日期和时间值）被两个格式项使用：第一个格式项显示日期和时间值中的时间，第二个显示日期和时间值中的日期。 下面的示例使用 Format(String, Object, Object) 方法显示泛型 Dictionary<(Of <(TKey, TValue>)>) 对象中存储的时间和温度数据。注意，格式字符串有三个格式项，而要设置格式的对象只有两个。这是因为列表中的第一个对象（日期和时间值）被两个格式项使用：第一个格式项显示日期和时间值中的时间，第二个显示日期和时间值中的日期。

Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim temperatureInfo As New Dictionary(Of Date, Double)
      temperatureInfo.Add(#6/1/2010 2:00PM#, 87.46)
      temperatureInfo.Add(#12/1/2010 10:00AM#, 36.81)

      Console.WriteLine("Temperature Information:")
      Console.WriteLine()
      Dim output As String
      For Each item In temperatureInfo
         output = String.Format("Temperature at {0,8:t} on {0,9:d}: {1,5:N1}°F", _
                                item.Key, item.Value)
         Console.WriteLine(output)
      Next
   End Sub
End Module
' The example displays the following output:
'       Temperature Information:
'
'       Temperature at  2:00 PM on  6/1/2010:  87.5°F
'       Temperature at 10:00 AM on 12/1/2010:  36.8°F

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Dictionary<DateTime, Double> temperatureInfo = new Dictionary<DateTime, Double>();
      temperatureInfo.Add(new DateTime(2010, 6, 1, 14, 0, 0), 87.46);
      temperatureInfo.Add(new DateTime(2010, 12, 1, 10, 0, 0), 36.81);

      Console.WriteLine("Temperature Information:\n");
      string output;
      foreach (var item in temperatureInfo)
      {
         output = String.Format("Temperature at {0,8:t} on {0,9:d}: {1,5:N1}°F",
                                item.Key, item.Value);
         Console.WriteLine(output);
      }
   }
}
// The example displays the following output:
//       Temperature Information:
//
//       Temperature at  2:00 PM on  6/1/2010:  87.5°F
//       Temperature at 10:00 AM on 12/1/2010:  36.8°F

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Format 重载
System 命名空间

其他资源

格式化类型
复合格式


String ..::.Format 方法 (String, Object, Object, Object)

String
.
.
::
.
Format 方法 (String, Object, Object, Object)
String 类

将指定字符串中的格式项替换为三个指定对象的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Format ( _
    format As String, _
    arg0 As Object, _
    arg1 As Object, _
    arg2 As Object _
) As String
public static string Format(
    string format,
    Object arg0,
    Object arg1,
    Object arg2
)
public:
static String^ Format(
    String^ format,
    Object^ arg0,
    Object^ arg1,
    Object^ arg2
)
static member Format :
        format:string *
        arg0:Object *
        arg1:Object *
        arg2:Object -> string

参数

format
类型： System String
复合格式字符串。
arg0
类型： System Object
要设置格式的第一个对象。
arg1
类型： System Object
要设置格式的第二个对象。
arg2
类型： System Object
要设置格式的第三个对象。

返回值

类型： System String
format 的副本，其中的格式项已替换为 arg0、arg1 和 arg2 的字符串表示形式。
异常 | 条件
ArgumentNullException | format 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | format 无效。 - 或 - 格式项的索引小于零或大于二。

此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述： 此方法使用 .NET Framework 的复合格式设置功能将对象的值转换为其文本表示形式，并将该表示形式嵌入字符串中。.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关 Format、AppendFormat 等方法以及 WriteLine 的某些重载所支持的复合格式设置功能的更多信息，请参见复合格式。

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关日期和时间格式说明符的更多信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。

  • 有关枚举格式说明符的更多信息，请参见枚举格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象的字符串表示形式。 format 参数由零或多个文本序列与零或多个索引占位符混合组成，其中索引占位符称为格式项，对应于与此方法的参数列表中的对象。格式设置过程将每个格式项替换为相应对象的字符串表示形式。

格式项的语法如下：

{index[,length][:formatString]}

方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。 方括号中的元素是可选的。下表描述每个元素。有关复合格式设置功能（包括格式项的语法）的更多信息，请参见复合格式。

元素 | Description
Index — 索引 | 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。如果 index 位置没有参数，将引发 FormatException。 要设置格式的对象的参数列表中的位置（从零开始）。如果由 index 指定的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则格式项将被 String..::.Empty 替换。如果 index 位置没有参数，将引发 FormatException。
,length | 参数的字符串表示形式中包含的最小字符数。如果该值是正的，则参数右对齐；如果该值是负的，则参数左对齐。 参数的字符串表示形式中包含的最小字符数。如果该值是正的，则参数右对齐；如果该值是负的，则参数左对齐。
:formatString | 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。 要设置格式的对象支持的标准或自定义格式字符串。formatString 的可能值与该对象的 ToString(format) 方法支持的值相同。如果没有指定 formatString，并且要设置格式的对象实现了 IFormattable 接口，则将传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为用作 IFormattable..::.ToString 格式字符串的 format 参数的值。
说明 说明

有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。 有关日期和时间值使用的标准和自定义格式字符串的信息，请参见标准日期和时间格式字符串和自定义日期和时间格式字符串。有关数值使用的标准和自定义格式字符串的信息，请参见标准数字格式字符串和自定义数字格式字符串。有关枚举使用的标准格式字符串的信息，请参见枚举格式字符串。

必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。 必须使用前导大括号字符和尾部大括号字符，即“{”和“}”。若要在 format 中指定单个大括号字符，请指定两个前导大括号字符或尾部大括号字符；即“{{”或“}}”。

如果 format 的值为“Thank you for your purchase of {0:####} copies of Microsoft .NET (Core Reference).”，并且 arg0 为值为 123 的 Int16，则返回值将为：

“Thank you for your purchase of 123 copies of Microsoft .NET (Core Reference).”

如果 format 的值为“Brad's dog has {0,-8:G} fleas.”，arg0 是值为 42 的 Int16（在此示例中，下划线表示填充空格），则返回值将为：

“Brad's dog has 42______ fleas.”

下面的示例使用 Format(String, Object, Object, Object) 方法创建一个字符串，它说明了使用两个整数值的布尔 And 运算的结果。请注意，格式字符串包括六个格式项，但该方法在它的参数列表中只有三个项，因为每个项目可以按两种不同方式格式化。 下面的示例使用 Format(String, Object, Object, Object) 方法创建一个字符串，它说明了使用两个整数值的布尔 And 运算的结果。请注意，格式字符串包括六个格式项，但该方法在它的参数列表中只有三个项，因为每个项目可以按两种不同方式格式化。

Public Module Example
   Public Sub Main()
      Dim formatString As String = "    {0,10} ({0,8:X8})" + vbCrLf +  _
                                   "And {1,10} ({1,8:X8})" + vbCrLf + _
                                   "  = {2,10} ({2,8:X8})"
      Dim value1 As Integer = 16932
      Dim value2 As Integer = 15421
      Dim result As String = String.Format(formatString, _
                                           value1, value2, value1 And value2)
      Console.WriteLine(result)
   End Sub
End Module
' The example displays the following output:
'                16932 (00004224)
'       And      15421 (00003C3D)
'         =         36 (00000024)

using System;

public class Example
{
   public static void Main()
   {
      string formatString = "    {0,10} ({0,8:X8})\n" +
                            "And {1,10} ({1,8:X8})\n" +
                            "  = {2,10} ({2,8:X8})";
      int value1 = 16932;
      int value2 = 15421;
      string result = String.Format(formatString,
                                    value1, value2, value1 & value2);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//                16932 (00004224)
//       And      15421 (00003C3D)
//         =         36 (00000024)

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Format 重载
System 命名空间

其他资源

格式化类型
复合格式


String ..::.GetEnumerator 方法

String
.
.
::
.
GetEnumerator 方法
String 类

检索一个可以循环访问此字符串中的每个字符的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetEnumerator As CharEnumerator
public CharEnumerator GetEnumerator()
public:
CharEnumerator^ GetEnumerator()
member GetEnumerator : unit -> CharEnumerator

返回值

类型： System CharEnumerator
枚举器对象。

此方法是支持 IEnumerator 接口循环访问集合成员的编程语言所必需的。例如，Microsoft Visual Basic 和 C# 编程语言的 foreach 语句调用此方法以返回一个 CharEnumerator 对象，该对象可提供对此 String 实例中的字符的只读访问。 此方法是支持 IEnumerator 接口循环访问集合成员的编程语言所必需的。例如，Microsoft Visual Basic 和 C# 编程语言的 foreach 语句调用此方法以返回一个 CharEnumerator 对象，该对象可提供对此 String 实例中的字符的只读访问。

下面的示例使用 GetEnumerator 方法显示输入字符串中的每个 System..::.Char。

' Example for the String.GetEnumerator( ) method.
Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Module GetEnumerator

    Sub Main()
        Console.WriteLine( _
            "This example of String.GetEnumerator( ) " & _
            "generates the following output.")

        EnumerateAndDisplay("Test Case")
        EnumerateAndDisplay("Has" & vbTab & "two" & vbTab & "tabs")
        EnumerateAndDisplay("Two" & vbLf & "new" & vbLf & "lines")
    End Sub 'Main

    Sub EnumerateAndDisplay(Operand As String)

        Console.WriteLine( _
            vbCrLf & "The characters in the string ""{0}"" are:", Operand)

        Dim OperandEnum As IEnumerator = Operand.GetEnumerator()
        Dim CharCount As Integer = 0

        While OperandEnum.MoveNext()
            CharCount += 1
            Console.Write(" ""{0}"" ", OperandEnum.Current)
        End While

        Console.WriteLine(vbCrLf & " Character count: {0}", CharCount)

    End Sub 'EnumerateAndDisplay
End Module 'GetEnumerator

' This example of String.GetEnumerator( ) generates the following output.
'
' The characters in the string "Test Case" are:
'  "T"  "e"  "s"  "t"  " "  "C"  "a"  "s"  "e"
'  Character count: 9
'
' The characters in the string "Has       two     tabs" are:
'  "H"  "a"  "s"  "       "  "t"  "w"  "o"  "     "  "t"  "a"  "b"  "s"
'  Character count: 12
'
' The characters in the string "Two
' new
' lines" are:
'  "T"  "w"  "o"  "
' "  "n"  "e"  "w"  "
' "  "l"  "i"  "n"  "e"  "s"
'  Character count: 13

// Example for the String.GetEnumerator( ) method.
using System;
using System.Collections;

class GetEnumerator
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of String.GetEnumerator( ) " +
            "generates the following output." );

        EnumerateAndDisplay( "Test Case" );
        EnumerateAndDisplay( "Has\ttwo\ttabs" );
        EnumerateAndDisplay( "Two\nnew\nlines" );
    }

    static void EnumerateAndDisplay( String Operand )
    {
        Console.WriteLine(
            "\nThe characters in the string \"{0}\" are:",
            Operand );

        IEnumerator OperandEnum = Operand.GetEnumerator( );
        int         CharCount = 0;

        while( OperandEnum.MoveNext( ) )
        {
            CharCount++;
            Console.Write( " '{0}' ", OperandEnum.Current );
        }
        Console.WriteLine( "\n Character count: {0}", CharCount );
    }
}

/*
This example of String.GetEnumerator( ) generates the following output.

The characters in the string "Test Case" are:
 'T'  'e'  's'  't'  ' '  'C'  'a'  's'  'e'
 Character count: 9

The characters in the string "Has       two     tabs" are:
 'H'  'a'  's'  '       '  't'  'w'  'o'  '     '  't'  'a'  'b'  's'
 Character count: 12

The characters in the string "Two
new
lines" are:
 'T'  'w'  'o'  '
'  'n'  'e'  'w'  '
'  'l'  'i'  'n'  'e'  's'
 Character count: 13
*/

// Example for the String::GetEnumerator( ) method.
using namespace System;
using namespace System::Collections;
void EnumerateAndDisplay( String^ Operand )
{
   Console::WriteLine( "\nThe characters in the string \"{0}\" are:", Operand );
   IEnumerator^ OperandEnum = Operand->GetEnumerator();
   int CharCount = 0;
   while ( OperandEnum->MoveNext() )
   {
      CharCount++;
      Console::Write( " '{0}' ", OperandEnum->Current );
   }

   Console::WriteLine( "\n Character count: {0}", CharCount );
}

int main()
{
   Console::WriteLine( "This example of String::GetEnumerator( ) "
   "generates the following output." );
   EnumerateAndDisplay( "Test Case" );
   EnumerateAndDisplay( "Has\ttwo\ttabs" );
   EnumerateAndDisplay( "Two\nnew\nlines" );
}

/*
This example of String::GetEnumerator( ) generates the following output.

The characters in the string "Test Case" are:
 'T'  'e'  's'  't'  ' '  'C'  'a'  's'  'e'
 Character count: 9

The characters in the string "Has       two     tabs" are:
 'H'  'a'  's'  '       '  't'  'w'  'o'  '     '  't'  'a'  'b'  's'
 Character count: 12

The characters in the string "Two
new
lines" are:
 'T'  'w'  'o'  '
'  'n'  'e'  'w'  '
'  'l'  'i'  'n'  'e'  's'
 Character count: 13
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
IEnumerator
IEnumerable
Chars


String ..::.GetHashCode 方法

String
.
.
::
.
GetHashCode 方法
String 类

返回该字符串的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

GetHashCode 的行为取决于它的实现，此实现可能会从一个公共语言运行时版本更改为另一个版本。原因可能是为了提高 GetHashCode 的性能。 GetHashCode 的行为取决于它的实现，此实现可能会从一个公共语言运行时版本更改为另一个版本。原因可能是为了提高 GetHashCode 的性能。

说明 说明

如果两个字符串对象相等，则 GetHashCode 方法返回相同的值。但是，每个唯一的字符串值并没有唯一的哈希代码值。不同的字符串可以返回相同的哈希代码。 如果两个字符串对象相等，则 GetHashCode 方法返回相同的值。但是，每个唯一的字符串值并没有唯一的哈希代码值。不同的字符串可以返回相同的哈希代码。 如果两个字符串对象相等，则 GetHashCode 方法返回相同的值。但是，每个唯一的字符串值并没有唯一的哈希代码值。不同的字符串可以返回相同的哈希代码。

对调用者的说明

GetHashCode 返回的值与平台相关。在 32 位和 64 位版本的 .NET Framework 上有所不同。 GetHashCode 返回的值与平台相关。在 32 位和 64 位版本的 .NET Framework 上有所不同。

下面的示例使用各种输入字符串演示 GetHashCode 方法。

' Example for the String.GetHashCode( ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetHashCode

    Sub Main()
        Console.WriteLine( _
            "This example of String.GetHashCode( ) " & _
            "generates the following output." & vbCrLf)

        DisplayHashCode("")
        DisplayHashCode("a")
        DisplayHashCode("ab")
        DisplayHashCode("abc")
        DisplayHashCode("abd")
        DisplayHashCode("abe")
        DisplayHashCode("abcdef")
        DisplayHashCode("abcdeg")
        DisplayHashCode("abcdeh")
        DisplayHashCode("abcdei")
        DisplayHashCode("Abcdeg")
        DisplayHashCode("Abcdeh")
        DisplayHashCode("Abcdei")
    End Sub 'Main

    Sub DisplayHashCode(Operand As String)

        Dim HashCode As Integer = Operand.GetHashCode()
        Console.WriteLine( _
            "The hash code for ""{0}"" is: 0x{1:X8}, {1}", _
            Operand, HashCode)

    End Sub 'DisplayHashCode
End Module 'GetHashCode

' This example of String.GetHashCode( ) generates the following output.
'
' The hash code for "" is: 0x00001505, 5381
' The hash code for "a" is: 0x0002B5C4, 177604
' The hash code for "ab" is: 0x00596E26, 5860902
' The hash code for "abc" is: 0x0B873285, 193409669
' The hash code for "abd" is: 0x0B873282, 193409666
' The hash code for "abe" is: 0x0B873283, 193409667
' The hash code for "abcdef" is: 0x4DDB4BE2, 1306217442
' The hash code for "abcdeg" is: 0x4DDB4BE3, 1306217443
' The hash code for "abcdeh" is: 0x4DDB4BEC, 1306217452
' The hash code for "abcdei" is: 0x4DDB4BED, 1306217453
' The hash code for "Abcdeg" is: 0x941C4FC3, -1810083901
' The hash code for "Abcdeh" is: 0x941C4FCC, -1810083892
' The hash code for "Abcdei" is: 0x941C4FCD, -1810083891

// Example for the String.GetHashCode( ) method.
using System;

class GetHashCode
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of String.GetHashCode( ) " +
            "generates the following output.\n" );

        DisplayHashCode( "" );
        DisplayHashCode( "a" );
        DisplayHashCode( "ab" );
        DisplayHashCode( "abc" );
        DisplayHashCode( "abd" );
        DisplayHashCode( "abe" );
        DisplayHashCode( "abcdef" );
        DisplayHashCode( "abcdeg" );
        DisplayHashCode( "abcdeh" );
        DisplayHashCode( "abcdei" );
        DisplayHashCode( "Abcdeg" );
        DisplayHashCode( "Abcdeh" );
        DisplayHashCode( "Abcdei" );
    }

    static void DisplayHashCode( String Operand )
    {
        int     HashCode = Operand.GetHashCode( );
        Console.WriteLine(
            "The hash code for \"{0}\" is: 0x{1:X8}, {1}",
            Operand, HashCode );
    }
}

/*
This example of String.GetHashCode( ) generates the following output.

The hash code for "" is: 0x00001505, 5381
The hash code for "a" is: 0x0002B5C4, 177604
The hash code for "ab" is: 0x00596E26, 5860902
The hash code for "abc" is: 0x0B873285, 193409669
The hash code for "abd" is: 0x0B873282, 193409666
The hash code for "abe" is: 0x0B873283, 193409667
The hash code for "abcdef" is: 0x4DDB4BE2, 1306217442
The hash code for "abcdeg" is: 0x4DDB4BE3, 1306217443
The hash code for "abcdeh" is: 0x4DDB4BEC, 1306217452
The hash code for "abcdei" is: 0x4DDB4BED, 1306217453
The hash code for "Abcdeg" is: 0x941C4FC3, -1810083901
The hash code for "Abcdeh" is: 0x941C4FCC, -1810083892
The hash code for "Abcdei" is: 0x941C4FCD, -1810083891
*/

// Example for the String::GetHashCode( ) method.
using namespace System;
void DisplayHashCode( String^ Operand )
{
   int HashCode = Operand->GetHashCode();
   Console::WriteLine( "The hash code for \"{0}\" is: 0x{1:X8}, {1}", Operand, HashCode );
}

int main()
{
   Console::WriteLine( "This example of String::GetHashCode( ) "
   "generates the following output.\n" );
   DisplayHashCode( "" );
   DisplayHashCode( "a" );
   DisplayHashCode( "ab" );
   DisplayHashCode( "abc" );
   DisplayHashCode( "abd" );
   DisplayHashCode( "abe" );
   DisplayHashCode( "abcdef" );
   DisplayHashCode( "abcdeg" );
   DisplayHashCode( "abcdeh" );
   DisplayHashCode( "abcdei" );
   DisplayHashCode( "Abcdeg" );
   DisplayHashCode( "Abcdeh" );
   DisplayHashCode( "Abcdei" );
}

/*
This example of String::GetHashCode( ) generates the following output.

The hash code for "" is: 0x00001505, 5381
The hash code for "a" is: 0x0002B5C4, 177604
The hash code for "ab" is: 0x00596E26, 5860902
The hash code for "abc" is: 0x0B873285, 193409669
The hash code for "abd" is: 0x0B873282, 193409666
The hash code for "abe" is: 0x0B873283, 193409667
The hash code for "abcdef" is: 0x4DDB4BE2, 1306217442
The hash code for "abcdeg" is: 0x4DDB4BE3, 1306217443
The hash code for "abcdeh" is: 0x4DDB4BEC, 1306217452
The hash code for "abcdei" is: 0x4DDB4BED, 1306217453
The hash code for "Abcdeg" is: 0x941C4FC3, -1810083901
The hash code for "Abcdeh" is: 0x941C4FCC, -1810083892
The hash code for "Abcdei" is: 0x941C4FCD, -1810083891
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Int32


String ..::.GetTypeCode 方法

String
.
.
::
.
GetTypeCode 方法
String 类

返回类 String 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.String。

实现

下面的示例显示 String 类型的 TypeCode 枚举常数。

' Sample for String.GetTypeCode()
Imports System

Class Sample
   Public Shared Sub Main()
      Dim str As [String] = "abc"
      Dim tc As TypeCode = str.GetTypeCode()
      Console.WriteLine("The type code for '{0}' is {1}, which represents {2}.", _
                           str, tc.ToString("D"), tc.ToString("F"))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'The type code for 'abc' is 18, which represents String.
'

// Sample for String.GetTypeCode()
using System;

class Sample
{
    public static void Main()
    {
    String str = "abc";
    TypeCode tc = str.GetTypeCode();
    Console.WriteLine("The type code for '{0}' is {1}, which represents {2}.",
                         str, tc.ToString("D"), tc.ToString("F"));
    }
}
/*
This example produces the following results:
The type code for 'abc' is 18, which represents String.
*/

// Sample for String.GetTypeCode()
using namespace System;
int main()
{
   String^ str = "abc";
   TypeCode tc = str->GetTypeCode();
   Console::WriteLine( "The type code for '{0}' is {1}, which represents {2}.", str, tc.ToString( "D" ), tc.ToString( "F" ) );
}

/*
This example produces the following results:
The type code for 'abc' is 18, which represents String.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToBoolean 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前字符串的值为 TrueString，则为 true；如果当前字符串的值为 FalseString，则为 false。

实现

异常 | 条件
FormatException | 当前字符串的值不是 TrueString 或 FalseString。

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(String) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(String) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(String) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToByte 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System Byte
当前 String 对象的转换值。

实现

异常 | 条件
FormatException | 无法分析当前 String 对象的值。
OverflowException | 当前 String 对象的值是大于 MaxValue 或小于 MinValue 的数。

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToChar 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System Char
当前 String 对象中索引 0 处的字符。

实现

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToDateTime 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToDateTime。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System DateTime
当前 String 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDateTime(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDateTime(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDateTime(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToDecimal 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System Decimal
当前 String 对象的转换值。

实现

异常 | 条件
FormatException | 无法分析当前 String 对象的值。
OverflowException | 当前 String 对象的值是小于 MinValue 或大于 MaxValue 的数。

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToDouble 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System Double
当前 String 对象的转换值。

实现

异常 | 条件
FormatException | 无法分析当前 String 对象的值。
OverflowException | 当前 String 对象的值是小于 MinValue 或大于 MaxValue 的数。

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToInt16 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System Int16
当前 String 对象的转换值。

实现

异常 | 条件
FormatException | 无法分析当前 String 对象的值。
OverflowException | 当前 String 对象的值是大于 MaxValue 或小于 MinValue 的数。

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToInt32 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System Int32
当前 String 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToInt64 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System Int64
当前 String 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToSByte 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System SByte
当前 String 对象的转换值。

实现

异常 | 条件
FormatException | 无法分析当前 String 对象的值。
OverflowException | 当前 String 对象的值是大于 MaxValue 或小于 MinValue 的数。

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToSingle 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System Single
当前 String 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToType 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
返回对象的类型。
provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System Object
当前 String 对象的转换值。

实现

异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | 无法将当前 String 对象的值转换为由 type 参数指定的类型。

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 ChangeType 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 ChangeType 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToUInt16 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System UInt16
当前 String 对象的转换值。

实现

异常 | 条件
FormatException | 无法分析当前 String 对象的值。
OverflowException | 当前 String 对象的值是大于 MaxValue 或小于 MinValue 的数。

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt16(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToUInt32 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System UInt32
当前 String 对象的转换值。

实现

异常 | 条件
FormatException | 无法分析当前 String 对象的值。
OverflowException | 当前 String 对象的值是大于 MaxValue 或小于 MinValue 的数

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IConvertible ..::.ToUInt64 方法

String
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
String 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System UInt64
当前 String 对象的转换值。

实现

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(String, IFormatProvider) 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(String, IFormatProvider) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IEnumerable <(Of <(Char >)>) ..::.GetEnumerator 方法

String
.
.
::
.
IEnumerable
<
(Of
<
(
Char
>
)
>
)
.
.
::
.
GetEnumerator 方法
String 类

返回循环访问当前 String 对象的枚举数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetEnumerator As IEnumerator(Of Char)
    Implements IEnumerable(Of Char).GetEnumerator
IEnumerator<char> IEnumerable<char>.GetEnumerator()
private:
virtual IEnumerator<wchar_t>^ GetEnumerator() sealed = IEnumerable<wchar_t>::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator<char>
private override GetEnumerator : unit -> IEnumerator<char>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
Char
>
)
>
)

类型 Char 的 IEnumerator<(Of <(T>)>)，可用于循环访问当前的 String 对象。

实现

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IEnumerable<(Of <(T>)>) 接口时使用它。有关更多信息，请参见 GetEnumerator 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IEnumerable<(Of <(T>)>) 接口时使用它。有关更多信息，请参见 GetEnumerator 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IEnumerable<(Of <(T>)>) 接口时使用它。有关更多信息，请参见 GetEnumerator 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IEnumerable ..::.GetEnumerator 方法

String
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
String 类

返回循环访问当前 String 对象的枚举数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个枚举器，可用于循环访问当前的字符串。

实现

此成员是显式的接口成员实现。只能在 String 实例强制转换为 IEnumerable 接口时使用它。有关更多信息，请参见 IEnumerable..::.GetEnumerator 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IEnumerable 接口时使用它。有关更多信息，请参见 IEnumerable..::.GetEnumerator 方法。 此成员是显式的接口成员实现。只能在 String 实例强制转换为 IEnumerable 接口时使用它。有关更多信息，请参见 IEnumerable..::.GetEnumerator 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IndexOf 方法

String
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

报告此字符串中一个或多个字符第一次出现处（即字符串第一次出现处）的索引。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.IndexOf 方法 (Char)

String
.
.
::
.
IndexOf 方法 (Char)
String 类

报告指定 Unicode 字符在此字符串中的第一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOf ( _
    value As Char _
) As Integer
public int IndexOf(
    char value
)
public:
int IndexOf(
    wchar_t value
)
member IndexOf :
        value:char -> int

参数

value
类型： System Char
要查找的 Unicode 字符。

返回值

类型： System Int32
如果找到该字符，则为 value 的从零开始的索引位置；如果未找到，则为 -1。

索引编号从零开始。

此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例演示如何使用 IndexOf 方法搜索 String 中的字符。

' Create a Unicode String with 5 Greek Alpha characters
Dim szGreekAlpha As New String(ChrW(&H0319), 5)
' Create a Unicode String with a Greek Omega character
Dim szGreekOmega As New String(New Char() {ChrW(&H03A9), ChrW(&H03A9), _
                                           ChrW(&H03A9)}, 2, 1)

Dim szGreekLetters As String = String.Concat(szGreekOmega, szGreekAlpha, _
                                             szGreekOmega.Clone())

' Examine the result
Console.WriteLine(szGreekLetters)

' The first index of Alpha
Dim iAlpha As Integer = szGreekLetters.IndexOf(ChrW(&H0319))
' The last index of Omega
Dim iomega As Integer = szGreekLetters.LastIndexOf(ChrW(&H03A9))

Console.WriteLine("The Greek letter Alpha first appears at index {0}.", _
                  ialpha)
Console.WriteLIne("The Greek letter Omega last appears at index {0}.", _
                  iomega)

// Create a Unicode String with 5 Greek Alpha characters
String szGreekAlpha = new String('\u0319',5);
// Create a Unicode String with a Greek Omega character
String szGreekOmega = new String(new char [] {'\u03A9','\u03A9','\u03A9'},2,1);

String szGreekLetters = String.Concat(szGreekOmega, szGreekAlpha, szGreekOmega.Clone());

// Examine the result
Console.WriteLine(szGreekLetters);

// The first index of Alpha
int ialpha = szGreekLetters.IndexOf('\u0319');
// The last index of Omega
int iomega = szGreekLetters.LastIndexOf('\u03A9');

Console.WriteLine("The Greek letter Alpha first appears at index " + ialpha +
    " and Omega last appears at index " + iomega + " in this String.");

// Create a Unicode String with 5 Greek Alpha characters
String^ szGreekAlpha = gcnew String( L'\x0319',5 );

// Create a Unicode String with a Greek Omega character
wchar_t charArray5[3] = {L'\x03A9',L'\x03A9',L'\x03A9'};
String^ szGreekOmega = gcnew String( charArray5,2,1 );
String^ szGreekLetters = String::Concat( szGreekOmega, szGreekAlpha, szGreekOmega->Clone() );

// Examine the result
Console::WriteLine( szGreekLetters );

// The first index of Alpha
int ialpha = szGreekLetters->IndexOf( L'\x0319' );

// The last index of Omega
int iomega = szGreekLetters->LastIndexOf( L'\x03A9' );
Console::WriteLine( String::Concat(  "The Greek letter Alpha first appears at index ", Convert::ToString( ialpha ) ) );
Console::WriteLine( String::Concat(  " and Omega last appears at index ", Convert::ToString( iomega ),  " in this String." ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOf 重载
System 命名空间
Char
IndexOfAny
LastIndexOf
LastIndexOfAny


String ..::.IndexOf 方法 (String)

String
.
.
::
.
IndexOf 方法 (String)
String 类

报告指定字符串在此实例中的第一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOf ( _
    value As String _
) As Integer
public int IndexOf(
    string value
)
public:
int IndexOf(
    String^ value
)
member IndexOf :
        value:string -> int

参数

value
类型： System String
要搜寻的字符串。

返回值

类型： System Int32
如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 0。 如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 0。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

索引编号从零开始。

此方法使用当前区域性执行单词（区分大小写和区域性）搜索。该搜索从此实例的第一个字符位置开始，一直搜索到最后一个字符位置。 此方法使用当前区域性执行单词（区分大小写和区域性）搜索。该搜索从此实例的第一个字符位置开始，一直搜索到最后一个字符位置。

对调用者的说明

如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则查找在字符串实例内某个子字符串的第一个索引，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 IndexOf(String, StringComparison) 方法重载。 如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则查找在字符串实例内某个子字符串的第一个索引，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 IndexOf(String, StringComparison) 方法重载。

下面的示例使用 IndexOf 方法确定句子中动物名字的起始位置。然后，该方法在此位置插入一个形容词来描述句子中的动物。 下面的示例使用 IndexOf 方法确定句子中动物名字的起始位置。然后，该方法在此位置插入一个形容词来描述句子中的动物。

Public Class InsertTest

    Public Shared Sub Main()
        Dim animal1 As String = "fox"
        Dim animal2 As String = "dog"
        Dim strTarget As String = [String].Format("The {0} jumped over the {1}.", animal1, animal2)

        Console.WriteLine("The original string is:{0}{1}{0}", Environment.NewLine, strTarget)

        Console.Write("Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal1)
        Dim adj1 As String = Console.ReadLine()

        Console.Write("Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal2)
        Dim adj2 As String = Console.ReadLine()

        adj1 = adj1.Trim() + " "
        adj2 = adj2.Trim() + " "

        strTarget = strTarget.Insert(strTarget.IndexOf(animal1), adj1)
        strTarget = strTarget.Insert(strTarget.IndexOf(animal2), adj2)

        Console.WriteLine("{0}The final string is:{0}{1}", Environment.NewLine, strTarget)
    End Sub
End Class
' Output from the example might appear as follows:
'       The original string is:
'       The fox jumped over the dog.
'
'       Enter an adjective (or group of adjectives) to describe the fox: ==> bold
'       Enter an adjective (or group of adjectives) to describe the dog: ==> lazy
'
'       The final string is:
'       The bold fox jumped over the lazy dog.

using System;

public class InsertTest {
    public static void Main()
    {
        string animal1 = "fox";
        string animal2 = "dog";

        string strTarget = String.Format("The {0} jumped over the {1}.", animal1, animal2);

        Console.WriteLine("The original string is:{0}{1}{0}", Environment.NewLine, strTarget);

        Console.Write("Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal1);
        string adj1 = Console.ReadLine();

        Console.Write("Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal2);
        string adj2 = Console.ReadLine();

        adj1 = adj1.Trim() + " ";
        adj2 = adj2.Trim() + " ";

        strTarget = strTarget.Insert(strTarget.IndexOf(animal1), adj1);
        strTarget = strTarget.Insert(strTarget.IndexOf(animal2), adj2);

        Console.WriteLine("{0}The final string is:{0}{1}", Environment.NewLine, strTarget);
    }
}
// Output from the example might appear as follows:
//       The original string is:
//       The fox jumped over the dog.
//
//       Enter an adjective (or group of adjectives) to describe the fox: ==> bold
//       Enter an adjective (or group of adjectives) to describe the dog: ==> lazy
//
//       The final string is:
//       The bold fox jumped over the lazy dog.

using namespace System;

int main()
{
   String^ animal1 = "fox";
   String^ animal2 = "dog";
   String^ strTarget = String::Format( "The {0} jumped over the {1}.", animal1, animal2 );
   Console::WriteLine( "The original string is:{0}{1}{0}", Environment::NewLine, strTarget );
   Console::Write( "Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal1 );
   String^ adj1 = Console::ReadLine();
   Console::Write( "Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal2 );
   String^ adj2 = Console::ReadLine();
   adj1 = String::Concat( adj1->Trim(), " " );
   adj2 = String::Concat( adj2->Trim(), " " );
   strTarget = strTarget->Insert( strTarget->IndexOf( animal1 ), adj1 );
   strTarget = strTarget->Insert( strTarget->IndexOf( animal2 ), adj2 );
   Console::WriteLine( " {0}The final string is: {0} {1}", Environment::NewLine, strTarget );
}
// Output from the example might appear as follows:
//       The original string is:
//       The fox jumped over the dog.
//
//       Enter an adjective (or group of adjectives) to describe the fox: ==> bold
//       Enter an adjective (or group of adjectives) to describe the dog: ==> lazy
//
//       The final string is:
//       The bold fox jumped over the lazy dog.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOf 重载
System 命名空间
Int32
CultureInfo
IndexOfAny
LastIndexOf
LastIndexOfAny


String ..::.IndexOf 方法 (Char, Int32)

String
.
.
::
.
IndexOf 方法 (Char, Int32)
String 类

报告指定 Unicode 字符在此字符串中的第一个匹配项的索引。该搜索从指定字符位置开始。 报告指定 Unicode 字符在此字符串中的第一个匹配项的索引。该搜索从指定字符位置开始。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOf ( _
    value As Char, _
    startIndex As Integer _
) As Integer
public int IndexOf(
    char value,
    int startIndex
)
public:
int IndexOf(
    wchar_t value,
    int startIndex
)
member IndexOf :
        value:char *
        startIndex:int -> int

参数

value
类型： System Char
要查找的 Unicode 字符。
startIndex
类型： System Int32
搜索起始位置。

返回值

类型： System Int32
如果找到该字符，则为 value 的从零开始的索引位置；如果未找到，则为 -1。
异常 | 条件
ArgumentOutOfRangeException | startIndex 小于零，或在此实例的末尾之外指定一个位置。

索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。 索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。

搜索范围为从 startIndex 到字符串的末尾。

此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例说明 IndexOf 方法。

' Sample for String.IndexOf(Char, Int32)

Module Sample
    Sub Main()

        Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
        Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
        Dim str As String = "Now is the time for all good men to come to the aid of their party."
        Dim start As Integer
        Dim at As Integer

        Console.WriteLine()
        Console.WriteLine("All occurrences of 't' from position 0 to {0}.", str.Length - 1)
        Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
        Console.Write("The letter 't' occurs at position(s): ")

        at = 0
        start = 0
        While start < str.Length AndAlso at > -1
            at = str.IndexOf("t"c, start)
            If at = -1 Then
                Exit While
            End If
            Console.Write("{0} ", at)
            start = at + 1
        End While
        Console.WriteLine()
    End Sub
End Module
'
'This example produces the following results:
'
'All occurrences of 't' from position 0 to 66.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'The letter 't' occurs at position(s): 7 11 33 41 44 55 64
'
'

// Sample for String.IndexOf(Char, Int32)
using System;

class Sample {
    public static void Main() {

    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;

    Console.WriteLine();
    Console.WriteLine("All occurrences of 't' from position 0 to {0}.", str.Length-1);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("The letter 't' occurs at position(s): ");

    at = 0;
    start = 0;
    while((start < str.Length) && (at > -1))
        {
        at = str.IndexOf('t', start);
        if (at == -1) break;
        Console.Write("{0} ", at);
        start = at+1;
        }
    Console.WriteLine();
    }
}
/*
This example produces the following results:

All occurrences of 't' from position 0 to 66.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The letter 't' occurs at position(s): 7 11 33 41 44 55 64

*/

// Sample for String::IndexOf(Char, Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   Console::WriteLine();
   Console::WriteLine( "All occurrences of 't' from position 0 to {0}.", str->Length - 1 );
   Console::WriteLine( "{1}{0}{2}{0}{3}{0}", Environment::NewLine, br1, br2, str );
   Console::Write( "The letter 't' occurs at position(s): " );
   at = 0;
   start = 0;
   while ( (start < str->Length) && (at > -1) )
   {
      at = str->IndexOf( 't', start );
      if ( at == -1 )
            break;

      Console::Write( "{0} ", at );
      start = at + 1;
   }

   Console::WriteLine();
}

/*
This example produces the following results:

All occurrences of 't' from position 0 to 66.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The letter 't' occurs at position(s): 7 11 33 41 44 55 64

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOf 重载
System 命名空间
Int32
Char
IndexOfAny
LastIndexOf
LastIndexOfAny


String ..::.IndexOf 方法 (String, Int32)

String
.
.
::
.
IndexOf 方法 (String, Int32)
String 类

报告指定字符串在此实例中的第一个匹配项的索引。该搜索从指定字符位置开始。 报告指定字符串在此实例中的第一个匹配项的索引。该搜索从指定字符位置开始。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOf ( _
    value As String, _
    startIndex As Integer _
) As Integer
public int IndexOf(
    string value,
    int startIndex
)
public:
int IndexOf(
    String^ value,
    int startIndex
)
member IndexOf :
        value:string *
        startIndex:int -> int

参数

value
类型： System String
要搜寻的字符串。
startIndex
类型： System Int32
搜索起始位置。

返回值

类型： System Int32
如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。 如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 为负数。 - 或 - startIndex 指定的位置不在此实例中。

索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。 索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。

此方法使用当前区域性执行单词（区分大小写和区域性）搜索。该搜索从此实例的 startIndex 字符位置开始，一直搜索到最后一个字符位置。 此方法使用当前区域性执行单词（区分大小写和区域性）搜索。该搜索从此实例的 startIndex 字符位置开始，一直搜索到最后一个字符位置。

对调用者的说明

如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则查找在特定字符位置后出现的子字符串的第一个索引，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 IndexOf(String, Int32, StringComparison) 方法重载。 如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则查找在特定字符位置后出现的子字符串的第一个索引，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 IndexOf(String, Int32, StringComparison) 方法重载。

下面的示例将在目标字符串中搜索指定字符串的所有匹配项。

Imports System

Public Class IndexOfTest

    Public Shared Sub Main()
        Dim strSource As String = "This is the string which we will perform the search on"

        Console.WriteLine("The search string is:{0}{1}{0}", Environment.NewLine, strSource)
        Dim strTarget As String = ""
        Dim found As Integer = 0
        Dim totFinds As Integer = 0

        Do
            Console.Write("Please enter a search value to look for in the above string (hit Enter to exit) ==> ")

            strTarget = Console.ReadLine()
            If strTarget <> "" Then
                Dim i As Integer

                For i = 0 To strSource.Length - 1

                    found = strSource.IndexOf(strTarget, i)
                    If found > 0 Then

                        totFinds += 1
                        i = found
                    Else
                        Exit For
                    End If
                Next i
            Else
                Return

            End If
            Console.WriteLine("{0}The search parameter '{1}' was found {2} times.{0}", Environment.NewLine, strTarget, totFinds)

            totFinds = 0

        Loop While True
    End Sub 'Main
End Class 'IndexOfTest

using System;

public class IndexOfTest {
    public static void Main() {

        string strSource = "This is the string which we will perform the search on";

        Console.WriteLine("The search string is:{0}\"{1}\"{0}", Environment.NewLine, strSource);

        string strTarget = "";
        int found = 0;
        int totFinds = 0;

        do {
            Console.Write("Please enter a search value to look for in the above string (hit Enter to exit) ==> ");

            strTarget = Console.ReadLine();

            if (strTarget != "") {

                for (int i = 0; i < strSource.Length; i++) {

                    found = strSource.IndexOf(strTarget, i);

                    if (found > 0) {
                        totFinds++;
                        i = found;
                    }
                    else
                        break;
                }
            }
            else
                return;

            Console.WriteLine("{0}The search parameter '{1}' was found {2} times.{0}",
                    Environment.NewLine, strTarget, totFinds);

            totFinds = 0;

        } while ( true );
    }
}

using namespace System;
int main()
{
   String^ strSource = "This is the string which we will perform the search on";
   Console::WriteLine( "The search string is: {0}\"{1}\" {0}", Environment::NewLine, strSource );
   String^ strTarget = "";
   int found = 0;
   int totFinds = 0;
   do
   {
      Console::Write( "Please enter a search value to look for in the above string (hit Enter to exit) ==> " );
      strTarget = Console::ReadLine();
      if (  !strTarget->Equals( "" ) )
      {
         for ( int i = 0; i < strSource->Length; i++ )
         {
            found = strSource->IndexOf( strTarget, i );
            if ( found > 0 )
            {
               totFinds++;
               i = found;
            }
            else
                        break;

         }
      }
      else
            return 0;
      Console::WriteLine( "{0}The search parameter '{1}' was found {2} times. {0}", Environment::NewLine, strTarget, totFinds );
      totFinds = 0;
   }
   while ( true );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOf 重载
System 命名空间
Int32
CultureInfo
IndexOfAny
LastIndexOf
LastIndexOfAny


String ..::.IndexOf 方法 (String, StringComparison)

String
.
.
::
.
IndexOf 方法 (String, StringComparison)
String 类

报告指定的字符串在当前 String 对象中的第一个匹配项的索引。一个参数指定要用于指定字符串的搜索类型。 报告指定的字符串在当前 String 对象中的第一个匹配项的索引。一个参数指定要用于指定字符串的搜索类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOf ( _
    value As String, _
    comparisonType As StringComparison _
) As Integer
public int IndexOf(
    string value,
    StringComparison comparisonType
)
public:
int IndexOf(
    String^ value,
    StringComparison comparisonType
)
member IndexOf :
        value:string *
        comparisonType:StringComparison -> int

参数

value
类型： System String
要搜寻的字符串。
comparisonType
类型： System StringComparison
指定搜索规则的枚举值之一。

返回值

类型： System Int32
如果找到该字符串，则为 value 参数的索引位置；如果未找到该字符串，则为 -1。如果 value 为 Empty，则返回值为 0。 如果找到该字符串，则为 value 参数的索引位置；如果未找到该字符串，则为 -1。如果 value 为 Empty，则返回值为 0。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | comparisonType 不是有效的 System..::.StringComparison 值。

索引编号从零开始。

comparisonType 参数指定使用当前区域性还是固定区域性、使用区分大小写的搜索还是不区分大小写的搜索、以及使用字比较规则还是序号比较规则来搜索 value 参数。

下面的示例演示 IndexOf 方法的三个重载，该方法使用 StringComparison 枚举的不同值在另一个字符串内查找某个字符串的第一个匹配项。

' This code example demonstrates the
' System.String.IndexOf(String, ..., StringComparison) methods.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim intro As String = "Find the first occurrence of a character using different " & _
                              "values of StringComparison."
        Dim resultFmt As String = "Comparison: {0,-28} Location: {1,3}"

        ' Define a string to search for.
        ' U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
        Dim CapitalAWithRing As String = " "

        ' Define a string to search.
        ' The result of combining the characters LATIN SMALL LETTER A and COMBINING
        ' RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
        ' LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
        Dim cat As String = "A Cheshire c" & "a " & "t"

        Dim loc As Integer = 0
        Dim scValues As StringComparison() =  { _
                        StringComparison.CurrentCulture, _
                        StringComparison.CurrentCultureIgnoreCase, _
                        StringComparison.InvariantCulture, _
                        StringComparison.InvariantCultureIgnoreCase, _
                        StringComparison.Ordinal, _
                        StringComparison.OrdinalIgnoreCase }
        Dim sc As StringComparison

        ' Clear the screen and display an introduction.
        Console.Clear()
        Console.WriteLine(intro)

        ' Display the current culture because culture affects the result. For example,
        ' try this code example with the "sv-SE" (Swedish-Sweden) culture.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
        Console.WriteLine("The current culture is ""{0}"" - {1}.", _
                           Thread.CurrentThread.CurrentCulture.Name, _
                           Thread.CurrentThread.CurrentCulture.DisplayName)

        ' Display the string to search for and the string to search.
        Console.WriteLine("Search for the string ""{0}"" in the string ""{1}""", _
                           CapitalAWithRing, cat)
        Console.WriteLine()

        ' Note that in each of the following searches, we look for
        ' LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
        ' LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
        ' the string was not found.
        ' Search using different values of StringComparsion. Specify the start
        ' index and count.

        Console.WriteLine("Part 1: Start index and count are specified.")
        For Each sc In  scValues
            loc = cat.IndexOf(CapitalAWithRing, 0, cat.Length, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion. Specify the
        ' start index.

        Console.WriteLine(vbCrLf & "Part 2: Start index is specified.")
        For Each sc In  scValues
            loc = cat.IndexOf(CapitalAWithRing, 0, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion.

        Console.WriteLine(vbCrLf & "Part 3: Neither start index nor count is specified.")
        For Each sc In  scValues
            loc = cat.IndexOf(CapitalAWithRing, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

    End Sub 'Main
End Class 'Sample

'
'Note: This code example was executed on a console whose user interface
'culture is "en-US" (English-United States).
'
'This code example produces the following results:
'
'Find the first occurrence of a character using different values of StringComparison.
'The current culture is "en-US" - English (United States).
'Search for the string " " in the string "A Cheshire ca°t"
'
'Part 1: Start index and count are specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 2: Start index is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 3: Neither start index nor count is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'

// This code example demonstrates the
// System.String.IndexOf(String, ..., StringComparison) methods.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string intro = "Find the first occurrence of a character using different " +
                   "values of StringComparison.";
    string resultFmt = "Comparison: {0,-28} Location: {1,3}";

// Define a string to search for.
// U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
    string CapitalAWithRing = "\u00c5";

// Define a string to search.
// The result of combining the characters LATIN SMALL LETTER A and COMBINING
// RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
// LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
    string cat = "A Cheshire c" + "\u0061\u030a" + "t";

    int loc = 0;
    StringComparison[] scValues = {
        StringComparison.CurrentCulture,
        StringComparison.CurrentCultureIgnoreCase,
        StringComparison.InvariantCulture,
        StringComparison.InvariantCultureIgnoreCase,
        StringComparison.Ordinal,
        StringComparison.OrdinalIgnoreCase };

// Clear the screen and display an introduction.
    Console.Clear();
    Console.WriteLine(intro);

// Display the current culture because culture affects the result. For example,
// try this code example with the "sv-SE" (Swedish-Sweden) culture.

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    Console.WriteLine("The current culture is \"{0}\" - {1}.",
                       Thread.CurrentThread.CurrentCulture.Name,
                       Thread.CurrentThread.CurrentCulture.DisplayName);

// Display the string to search for and the string to search.
    Console.WriteLine("Search for the string \"{0}\" in the string \"{1}\"",
                       CapitalAWithRing, cat);
    Console.WriteLine();

// Note that in each of the following searches, we look for
// LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
// LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
// the string was not found.
// Search using different values of StringComparsion. Specify the start
// index and count.

    Console.WriteLine("Part 1: Start index and count are specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.IndexOf(CapitalAWithRing, 0, cat.Length, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion. Specify the
// start index.
    Console.WriteLine("\nPart 2: Start index is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.IndexOf(CapitalAWithRing, 0, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion.
    Console.WriteLine("\nPart 3: Neither start index nor count is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.IndexOf(CapitalAWithRing, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }
    }
}

/*
Note: This code example was executed on a console whose user interface
culture is "en-US" (English-United States).

This code example produces the following results:

Find the first occurrence of a character using different values of StringComparison.
The current culture is "en-US" - English (United States).
Search for the string " " in the string "A Cheshire ca°t"

Part 1: Start index and count are specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 2: Start index is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 3: Neither start index nor count is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOf 重载
System 命名空间


String ..::.IndexOf 方法 (Char, Int32, Int32)

String
.
.
::
.
IndexOf 方法 (Char, Int32, Int32)
String 类

报告指定字符在此实例中的第一个匹配项的索引。搜索从指定字符位置开始，并检查指定数量的字符位置。 报告指定字符在此实例中的第一个匹配项的索引。搜索从指定字符位置开始，并检查指定数量的字符位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOf ( _
    value As Char, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public int IndexOf(
    char value,
    int startIndex,
    int count
)
public:
int IndexOf(
    wchar_t value,
    int startIndex,
    int count
)
member IndexOf :
        value:char *
        startIndex:int *
        count:int -> int

参数

value
类型： System Char
要查找的 Unicode 字符。
startIndex
类型： System Int32
搜索起始位置。
count
类型： System Int32
要检查的字符位置数。

返回值

类型： System Int32
如果找到该字符，则为 value 的从零开始的索引位置；如果未找到，则为 -1。
异常 | 条件
ArgumentOutOfRangeException | count 或 startIndex 为负。 - 或 - count+startIndex 指定一个超出此实例末尾的位置。

搜索从 startIndex 开始，并且一直搜索至 startIndex + count -1。startIndex + count 位置上的字符不在搜索范围内。 搜索从 startIndex 开始，并且一直搜索至 startIndex + count -1。startIndex + count 位置上的字符不在搜索范围内。

索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。 索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。

此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例说明 IndexOf 方法。

' Example for the String.IndexOf( Char, Integer, Integer ) method.
Imports System
Imports Microsoft.VisualBasic

Module IndexOfCII

    Sub Main()
        Dim br1 As String = _
            "0----+----1----+----2----+----3----+----" & _
            "4----+----5----+----6----+----7"
        Dim br2 As String = _
            "0123456789012345678901234567890123456789" & _
            "0123456789012345678901234567890"
        Dim str As String = _
            "ABCDEFGHI abcdefghi ABCDEFGHI abcdefghi " & _
            "ABCDEFGHI abcdefghi ABCDEFGHI"

        Console.WriteLine( _
            "This example of String.IndexOf( Char, Integer, Integer )" & _
            vbCrLf & "generates the following output." )
        Console.WriteLine( _
            "{0}{1}{0}{2}{0}{3}{0}", _
            Environment.NewLine, br1, br2, str)

        FindAllChar("A"c, str)
        FindAllChar("a"c, str)
        FindAllChar("I"c, str)
        FindAllChar("i"c, str)
        FindAllChar("@"c, str)
        FindAllChar(" "c, str)
    End Sub 'Main

    Sub FindAllChar(target As Char, searched As String)

        Console.Write( _
            "The character ""{0}"" occurs at position(s): ", target)

        Dim startIndex As Integer = - 1
        Dim hitCount As Integer = 0

        ' Search for all occurrences of the target.
        While True
            startIndex = searched.IndexOf( _
                target, startIndex + 1, _
                searched.Length - startIndex - 1)

            ' Exit the loop if the target is not found.
            If startIndex < 0 Then
                Exit While
            End If

            Console.Write("{0}, ", startIndex)
            hitCount += 1
        End While

        Console.WriteLine("occurrences: {0}", hitCount)

    End Sub 'FindAllChar
End Module 'IndexOfCII

' This example of String.IndexOf( Char, Integer, Integer )
' generates the following output.
'
' 0----+----1----+----2----+----3----+----4----+----5----+----6----+----7
' 01234567890123456789012345678901234567890123456789012345678901234567890
' ABCDEFGHI abcdefghi ABCDEFGHI abcdefghi ABCDEFGHI abcdefghi ABCDEFGHI
'
' The character "A" occurs at position(s): 0, 20, 40, 60, occurrences: 4
' The character "a" occurs at position(s): 10, 30, 50, occurrences: 3
' The character "I" occurs at position(s): 8, 28, 48, 68, occurrences: 4
' The character "i" occurs at position(s): 18, 38, 58, occurrences: 3
' The character "@" occurs at position(s): occurrences: 0
' The character " " occurs at position(s): 9, 19, 29, 39, 49, 59, occurrences: 6

// Example for the String.IndexOf( char, int, int ) method.
using System;

class IndexOfCII
{
    public static void Main()
    {
        string br1 =
            "0----+----1----+----2----+----3----+----" +
            "4----+----5----+----6----+----7";
        string br2 =
            "0123456789012345678901234567890123456789" +
            "0123456789012345678901234567890";
        string str =
            "ABCDEFGHI abcdefghi ABCDEFGHI abcdefghi " +
            "ABCDEFGHI abcdefghi ABCDEFGHI";

        Console.WriteLine(
            "This example of String.IndexOf( char, int, int )\n" +
            "generates the following output." );
        Console.WriteLine(
            "{0}{1}{0}{2}{0}{3}{0}",
            Environment.NewLine, br1, br2, str );

        FindAllChar( 'A', str );
        FindAllChar( 'a', str );
        FindAllChar( 'I', str );
        FindAllChar( 'i', str );
        FindAllChar( '@', str );
        FindAllChar( ' ', str );
    }

    static void FindAllChar( Char target, String searched )
    {
        Console.Write(
            "The character '{0}' occurs at position(s): ",
            target );

        int     startIndex = -1;
        int     hitCount = 0;

        // Search for all occurrences of the target.
        while( true )
        {
            startIndex = searched.IndexOf(
                target, startIndex + 1,
                searched.Length - startIndex - 1 );

            // Exit the loop if the target is not found.
            if( startIndex < 0 )
                break;

            Console.Write( "{0}, ", startIndex );
            hitCount++;
        }

        Console.WriteLine( "occurrences: {0}", hitCount );
    }
}

/*
This example of String.IndexOf( char, int, int )
generates the following output.

0----+----1----+----2----+----3----+----4----+----5----+----6----+----7
01234567890123456789012345678901234567890123456789012345678901234567890
ABCDEFGHI abcdefghi ABCDEFGHI abcdefghi ABCDEFGHI abcdefghi ABCDEFGHI

The character 'A' occurs at position(s): 0, 20, 40, 60, occurrences: 4
The character 'a' occurs at position(s): 10, 30, 50, occurrences: 3
The character 'I' occurs at position(s): 8, 28, 48, 68, occurrences: 4
The character 'i' occurs at position(s): 18, 38, 58, occurrences: 3
The character '@' occurs at position(s): occurrences: 0
The character ' ' occurs at position(s): 9, 19, 29, 39, 49, 59, occurrences: 6
*/

// Example for the String::IndexOf( Char, int, int ) method.
using namespace System;
void FindAllChar( Char target, String^ searched )
{
   Console::Write( "The character '{0}' occurs at position(s): ", target );
   int startIndex = -1;
   int hitCount = 0;

   // Search for all occurrences of the target.
   while ( true )
   {
      startIndex = searched->IndexOf( target, startIndex + 1, searched->Length - startIndex - 1 );

      // Exit the loop if the target is not found.
      if ( startIndex < 0 )
            break;

      Console::Write( "{0}, ", startIndex );
      hitCount++;
   }

   Console::WriteLine( "occurrences: {0}", hitCount );
}

int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----"
   "4----+----5----+----6----+----7";
   String^ br2 = "0123456789012345678901234567890123456789"
   "0123456789012345678901234567890";
   String^ str = "ABCDEFGHI abcdefghi ABCDEFGHI abcdefghi "
   "ABCDEFGHI abcdefghi ABCDEFGHI";
   Console::WriteLine( "This example of String::IndexOf( Char, int, int )\n"
   "generates the following output." );
   Console::WriteLine( "{0}{1}{0}{2}{0}{3}{0}", Environment::NewLine, br1, br2, str );
   FindAllChar( 'A', str );
   FindAllChar( 'a', str );
   FindAllChar( 'I', str );
   FindAllChar( 'i', str );
   FindAllChar( '@', str );
   FindAllChar( ' ', str );
}

/*
This example of String::IndexOf( Char, int, int )
generates the following output.

0----+----1----+----2----+----3----+----4----+----5----+----6----+----7
01234567890123456789012345678901234567890123456789012345678901234567890
ABCDEFGHI abcdefghi ABCDEFGHI abcdefghi ABCDEFGHI abcdefghi ABCDEFGHI

The character 'A' occurs at position(s): 0, 20, 40, 60, occurrences: 4
The character 'a' occurs at position(s): 10, 30, 50, occurrences: 3
The character 'I' occurs at position(s): 8, 28, 48, 68, occurrences: 4
The character 'i' occurs at position(s): 18, 38, 58, occurrences: 3
The character '@' occurs at position(s): occurrences: 0
The character ' ' occurs at position(s): 9, 19, 29, 39, 49, 59, occurrences: 6
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOf 重载
System 命名空间
Char
Int32
IndexOfAny
LastIndexOf
LastIndexOfAny


String ..::.IndexOf 方法 (String, Int32, Int32)

String
.
.
::
.
IndexOf 方法 (String, Int32, Int32)
String 类

报告指定字符串在此实例中的第一个匹配项的索引。搜索从指定字符位置开始，并检查指定数量的字符位置。 报告指定字符串在此实例中的第一个匹配项的索引。搜索从指定字符位置开始，并检查指定数量的字符位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOf ( _
    value As String, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public int IndexOf(
    string value,
    int startIndex,
    int count
)
public:
int IndexOf(
    String^ value,
    int startIndex,
    int count
)
member IndexOf :
        value:string *
        startIndex:int *
        count:int -> int

参数

value
类型： System String
要搜寻的字符串。
startIndex
类型： System Int32
搜索起始位置。
count
类型： System Int32
要检查的字符位置数。

返回值

类型： System Int32
如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。 如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | count 或 startIndex 为负。 - 或 - count 加 startIndex 之和指定的位置不在此实例中。

索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。 索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。

此方法使用当前区域性执行单词（区分大小写和区域性）搜索。搜索从 startIndex 开始，并且一直搜索至 startIndex + count -1。startIndex + count 位置上的字符不在搜索范围内。 此方法使用当前区域性执行单词（区分大小写和区域性）搜索。搜索从 startIndex 开始，并且一直搜索至 startIndex + count -1。startIndex + count 位置上的字符不在搜索范围内。 此方法使用当前区域性执行单词（区分大小写和区域性）搜索。搜索从 startIndex 开始，并且一直搜索至 startIndex + count -1。startIndex + count 位置上的字符不在搜索范围内。

对调用者的说明

如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则执行此操作，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值来调用 IndexOf(String, Int32, Int32, StringComparison) 方法重载。 如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则执行此操作，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值来调用 IndexOf(String, Int32, Int32, StringComparison) 方法重载。

下面的示例查找字符串“he”在另一个字符串的子字符串中的所有匹配项的索引。注意，对于每次搜索迭代，必须重新计算待搜索字符的个数。 下面的示例查找字符串“he”在另一个字符串的子字符串中的所有匹配项的索引。注意，对于每次搜索迭代，必须重新计算待搜索字符的个数。

' Sample for String.IndexOf(String, Int32, Int32)
Imports System

Class Sample

   Public Shared Sub Main()

      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer
      Dim [end] As Integer
      Dim count As Integer

      [end] = str.Length
      start = [end] / 2
      Console.WriteLine()
      Console.WriteLine("All occurrences of 'he' from position {0} to {1}.", start, [end] - 1)
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("The string 'he' occurs at position(s): ")

      count = 0
      at = 0
      While start <= [end] AndAlso at > - 1
         ' start+count must be a position within -str-.
         count = [end] - start
         at = str.IndexOf("he", start, count)
         If at = - 1 Then
            Exit While
         End If
         Console.Write("{0} ", at)
         start = at + 1
      End While
      Console.WriteLine()
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'All occurrences of 'he' from position 33 to 66.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'The string 'he' occurs at position(s): 45 56
'
'

// Sample for String.IndexOf(String, Int32, Int32)
using System;

class Sample {
    public static void Main() {

    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;
    int end;
    int count;

    end = str.Length;
    start = end/2;
    Console.WriteLine();
    Console.WriteLine("All occurrences of 'he' from position {0} to {1}.", start, end-1);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("The string 'he' occurs at position(s): ");

    count = 0;
    at = 0;
    while((start <= end) && (at > -1))
        {
// start+count must be a position within -str-.
        count = end - start;
        at = str.IndexOf("he", start, count);
        if (at == -1) break;
        Console.Write("{0} ", at);
        start = at+1;
        }
    Console.WriteLine();
    }
}
/*
This example produces the following results:

All occurrences of 'he' from position 33 to 66.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The string 'he' occurs at position(s): 45 56

*/

// Sample for String::IndexOf(String, Int32, Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   int end;
   int count;
   end = str->Length;
   start = end / 2;
   Console::WriteLine();
   Console::WriteLine( "All occurrences of 'he' from position {0} to {1}.", start, end - 1 );
   Console::WriteLine( "{1}{0}{2}{0}{3}{0}", Environment::NewLine, br1, br2, str );
   Console::Write( "The string 'he' occurs at position(s): " );
   count = 0;
   at = 0;
   while ( (start <= end) && (at > -1) )
   {

      // start+count must be a position within -str-.
      count = end - start;
      at = str->IndexOf( "he", start, count );
      if ( at == -1 )
            break;

      Console::Write( "{0} ", at );
      start = at + 1;
   }

   Console::WriteLine();
}

/*
This example produces the following results:

All occurrences of 'he' from position 33 to 66.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The string 'he' occurs at position(s): 45 56

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOf 重载
System 命名空间
Int32
CultureInfo
IndexOfAny
LastIndexOf
LastIndexOfAny


String ..::.IndexOf 方法 (String, Int32, StringComparison)

String
.
.
::
.
IndexOf 方法 (String, Int32, StringComparison)
String 类

报告指定的字符串在当前 String 对象中的第一个匹配项的索引。参数指定当前字符串中的起始搜索位置以及用于指定字符串的搜索类型。 报告指定的字符串在当前 String 对象中的第一个匹配项的索引。参数指定当前字符串中的起始搜索位置以及用于指定字符串的搜索类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOf ( _
    value As String, _
    startIndex As Integer, _
    comparisonType As StringComparison _
) As Integer
public int IndexOf(
    string value,
    int startIndex,
    StringComparison comparisonType
)
public:
int IndexOf(
    String^ value,
    int startIndex,
    StringComparison comparisonType
)
member IndexOf :
        value:string *
        startIndex:int *
        comparisonType:StringComparison -> int

参数

value
类型： System String
要搜寻的字符串。
startIndex
类型： System Int32
搜索起始位置。
comparisonType
类型： System StringComparison
指定搜索规则的枚举值之一。

返回值

类型： System Int32
如果找到该字符串，则为 value 参数的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 Empty，则返回值为 startIndex。 如果找到该字符串，则为 value 参数的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 Empty，则返回值为 startIndex。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 为负，或者指定的位置不在此实例中。
ArgumentException | comparisonType 不是有效的 System..::.StringComparison 值。

索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。 索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。

comparisonType 参数指定使用当前区域性还是固定区域性、使用区分大小写的搜索还是不区分大小写的搜索、以及使用字比较规则还是序号比较规则来搜索 value 参数。

下面的示例演示 IndexOf 方法的三个重载，该方法使用 StringComparison 枚举的不同值在另一个字符串内查找某个字符串的第一个匹配项。

' This code example demonstrates the
' System.String.IndexOf(String, ..., StringComparison) methods.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim intro As String = "Find the first occurrence of a character using different " & _
                              "values of StringComparison."
        Dim resultFmt As String = "Comparison: {0,-28} Location: {1,3}"

        ' Define a string to search for.
        ' U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
        Dim CapitalAWithRing As String = " "

        ' Define a string to search.
        ' The result of combining the characters LATIN SMALL LETTER A and COMBINING
        ' RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
        ' LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
        Dim cat As String = "A Cheshire c" & "a " & "t"

        Dim loc As Integer = 0
        Dim scValues As StringComparison() =  { _
                        StringComparison.CurrentCulture, _
                        StringComparison.CurrentCultureIgnoreCase, _
                        StringComparison.InvariantCulture, _
                        StringComparison.InvariantCultureIgnoreCase, _
                        StringComparison.Ordinal, _
                        StringComparison.OrdinalIgnoreCase }
        Dim sc As StringComparison

        ' Clear the screen and display an introduction.
        Console.Clear()
        Console.WriteLine(intro)

        ' Display the current culture because culture affects the result. For example,
        ' try this code example with the "sv-SE" (Swedish-Sweden) culture.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
        Console.WriteLine("The current culture is ""{0}"" - {1}.", _
                           Thread.CurrentThread.CurrentCulture.Name, _
                           Thread.CurrentThread.CurrentCulture.DisplayName)

        ' Display the string to search for and the string to search.
        Console.WriteLine("Search for the string ""{0}"" in the string ""{1}""", _
                           CapitalAWithRing, cat)
        Console.WriteLine()

        ' Note that in each of the following searches, we look for
        ' LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
        ' LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
        ' the string was not found.
        ' Search using different values of StringComparsion. Specify the start
        ' index and count.

        Console.WriteLine("Part 1: Start index and count are specified.")
        For Each sc In  scValues
            loc = cat.IndexOf(CapitalAWithRing, 0, cat.Length, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion. Specify the
        ' start index.

        Console.WriteLine(vbCrLf & "Part 2: Start index is specified.")
        For Each sc In  scValues
            loc = cat.IndexOf(CapitalAWithRing, 0, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion.

        Console.WriteLine(vbCrLf & "Part 3: Neither start index nor count is specified.")
        For Each sc In  scValues
            loc = cat.IndexOf(CapitalAWithRing, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

    End Sub 'Main
End Class 'Sample

'
'Note: This code example was executed on a console whose user interface
'culture is "en-US" (English-United States).
'
'This code example produces the following results:
'
'Find the first occurrence of a character using different values of StringComparison.
'The current culture is "en-US" - English (United States).
'Search for the string " " in the string "A Cheshire ca°t"
'
'Part 1: Start index and count are specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 2: Start index is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 3: Neither start index nor count is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'

// This code example demonstrates the
// System.String.IndexOf(String, ..., StringComparison) methods.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string intro = "Find the first occurrence of a character using different " +
                   "values of StringComparison.";
    string resultFmt = "Comparison: {0,-28} Location: {1,3}";

// Define a string to search for.
// U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
    string CapitalAWithRing = "\u00c5";

// Define a string to search.
// The result of combining the characters LATIN SMALL LETTER A and COMBINING
// RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
// LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
    string cat = "A Cheshire c" + "\u0061\u030a" + "t";

    int loc = 0;
    StringComparison[] scValues = {
        StringComparison.CurrentCulture,
        StringComparison.CurrentCultureIgnoreCase,
        StringComparison.InvariantCulture,
        StringComparison.InvariantCultureIgnoreCase,
        StringComparison.Ordinal,
        StringComparison.OrdinalIgnoreCase };

// Clear the screen and display an introduction.
    Console.Clear();
    Console.WriteLine(intro);

// Display the current culture because culture affects the result. For example,
// try this code example with the "sv-SE" (Swedish-Sweden) culture.

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    Console.WriteLine("The current culture is \"{0}\" - {1}.",
                       Thread.CurrentThread.CurrentCulture.Name,
                       Thread.CurrentThread.CurrentCulture.DisplayName);

// Display the string to search for and the string to search.
    Console.WriteLine("Search for the string \"{0}\" in the string \"{1}\"",
                       CapitalAWithRing, cat);
    Console.WriteLine();

// Note that in each of the following searches, we look for
// LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
// LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
// the string was not found.
// Search using different values of StringComparsion. Specify the start
// index and count.

    Console.WriteLine("Part 1: Start index and count are specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.IndexOf(CapitalAWithRing, 0, cat.Length, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion. Specify the
// start index.
    Console.WriteLine("\nPart 2: Start index is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.IndexOf(CapitalAWithRing, 0, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion.
    Console.WriteLine("\nPart 3: Neither start index nor count is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.IndexOf(CapitalAWithRing, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }
    }
}

/*
Note: This code example was executed on a console whose user interface
culture is "en-US" (English-United States).

This code example produces the following results:

Find the first occurrence of a character using different values of StringComparison.
The current culture is "en-US" - English (United States).
Search for the string " " in the string "A Cheshire ca°t"

Part 1: Start index and count are specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 2: Start index is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 3: Neither start index nor count is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOf 重载
System 命名空间


String ..::.IndexOf 方法 (String, Int32, Int32, StringComparison)

String
.
.
::
.
IndexOf 方法 (String, Int32, Int32, StringComparison)
String 类

报告指定的字符串在当前 String 对象中的第一个匹配项的索引。参数指定当前字符串中的起始搜索位置、要搜索的当前字符串中的字符数量，以及要用于指定字符串的搜索类型。 报告指定的字符串在当前 String 对象中的第一个匹配项的索引。参数指定当前字符串中的起始搜索位置、要搜索的当前字符串中的字符数量，以及要用于指定字符串的搜索类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOf ( _
    value As String, _
    startIndex As Integer, _
    count As Integer, _
    comparisonType As StringComparison _
) As Integer
public int IndexOf(
    string value,
    int startIndex,
    int count,
    StringComparison comparisonType
)
public:
int IndexOf(
    String^ value,
    int startIndex,
    int count,
    StringComparison comparisonType
)
member IndexOf :
        value:string *
        startIndex:int *
        count:int *
        comparisonType:StringComparison -> int

参数

value
类型： System String
要搜寻的字符串。
startIndex
类型： System Int32
搜索起始位置。
count
类型： System Int32
要检查的字符位置数。
comparisonType
类型： System StringComparison
指定搜索规则的枚举值之一。

返回值

类型： System Int32
如果找到该字符串，则为 value 参数的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 Empty，则返回值为 startIndex。 如果找到该字符串，则为 value 参数的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 Empty，则返回值为 startIndex。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | count 或 startIndex 为负。 - 或 - count 与 startIndex 之和指定的位置不在此实例中。
ArgumentException | comparisonType 不是有效的 System..::.StringComparison 值。

索引编号从零开始。这意味着 startIndex 参数的范围可以从 0 到字符串实例的长度减一。 索引编号从零开始。这意味着 startIndex 参数的范围可以从 0 到字符串实例的长度减一。

搜索从 startIndex 开始，并且一直搜索至 startIndex + count -1。startIndex + count 位置上的字符不在搜索范围内。 搜索从 startIndex 开始，并且一直搜索至 startIndex + count -1。startIndex + count 位置上的字符不在搜索范围内。

comparisonType 参数指定使用当前区域性还是固定区域性、使用区分大小写的搜索还是不区分大小写的搜索、以及使用字比较规则还是序号比较规则来搜索 value 参数。

下面的示例演示 IndexOf 方法的三个重载，该方法使用 StringComparison 枚举的不同值在另一个字符串内查找某个字符串的第一个匹配项。

' This code example demonstrates the
' System.String.IndexOf(String, ..., StringComparison) methods.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim intro As String = "Find the first occurrence of a character using different " & _
                              "values of StringComparison."
        Dim resultFmt As String = "Comparison: {0,-28} Location: {1,3}"

        ' Define a string to search for.
        ' U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
        Dim CapitalAWithRing As String = " "

        ' Define a string to search.
        ' The result of combining the characters LATIN SMALL LETTER A and COMBINING
        ' RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
        ' LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
        Dim cat As String = "A Cheshire c" & "a " & "t"

        Dim loc As Integer = 0
        Dim scValues As StringComparison() =  { _
                        StringComparison.CurrentCulture, _
                        StringComparison.CurrentCultureIgnoreCase, _
                        StringComparison.InvariantCulture, _
                        StringComparison.InvariantCultureIgnoreCase, _
                        StringComparison.Ordinal, _
                        StringComparison.OrdinalIgnoreCase }
        Dim sc As StringComparison

        ' Clear the screen and display an introduction.
        Console.Clear()
        Console.WriteLine(intro)

        ' Display the current culture because culture affects the result. For example,
        ' try this code example with the "sv-SE" (Swedish-Sweden) culture.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
        Console.WriteLine("The current culture is ""{0}"" - {1}.", _
                           Thread.CurrentThread.CurrentCulture.Name, _
                           Thread.CurrentThread.CurrentCulture.DisplayName)

        ' Display the string to search for and the string to search.
        Console.WriteLine("Search for the string ""{0}"" in the string ""{1}""", _
                           CapitalAWithRing, cat)
        Console.WriteLine()

        ' Note that in each of the following searches, we look for
        ' LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
        ' LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
        ' the string was not found.
        ' Search using different values of StringComparsion. Specify the start
        ' index and count.

        Console.WriteLine("Part 1: Start index and count are specified.")
        For Each sc In  scValues
            loc = cat.IndexOf(CapitalAWithRing, 0, cat.Length, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion. Specify the
        ' start index.

        Console.WriteLine(vbCrLf & "Part 2: Start index is specified.")
        For Each sc In  scValues
            loc = cat.IndexOf(CapitalAWithRing, 0, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion.

        Console.WriteLine(vbCrLf & "Part 3: Neither start index nor count is specified.")
        For Each sc In  scValues
            loc = cat.IndexOf(CapitalAWithRing, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

    End Sub 'Main
End Class 'Sample

'
'Note: This code example was executed on a console whose user interface
'culture is "en-US" (English-United States).
'
'This code example produces the following results:
'
'Find the first occurrence of a character using different values of StringComparison.
'The current culture is "en-US" - English (United States).
'Search for the string " " in the string "A Cheshire ca°t"
'
'Part 1: Start index and count are specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 2: Start index is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 3: Neither start index nor count is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'

// This code example demonstrates the
// System.String.IndexOf(String, ..., StringComparison) methods.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string intro = "Find the first occurrence of a character using different " +
                   "values of StringComparison.";
    string resultFmt = "Comparison: {0,-28} Location: {1,3}";

// Define a string to search for.
// U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
    string CapitalAWithRing = "\u00c5";

// Define a string to search.
// The result of combining the characters LATIN SMALL LETTER A and COMBINING
// RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
// LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
    string cat = "A Cheshire c" + "\u0061\u030a" + "t";

    int loc = 0;
    StringComparison[] scValues = {
        StringComparison.CurrentCulture,
        StringComparison.CurrentCultureIgnoreCase,
        StringComparison.InvariantCulture,
        StringComparison.InvariantCultureIgnoreCase,
        StringComparison.Ordinal,
        StringComparison.OrdinalIgnoreCase };

// Clear the screen and display an introduction.
    Console.Clear();
    Console.WriteLine(intro);

// Display the current culture because culture affects the result. For example,
// try this code example with the "sv-SE" (Swedish-Sweden) culture.

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    Console.WriteLine("The current culture is \"{0}\" - {1}.",
                       Thread.CurrentThread.CurrentCulture.Name,
                       Thread.CurrentThread.CurrentCulture.DisplayName);

// Display the string to search for and the string to search.
    Console.WriteLine("Search for the string \"{0}\" in the string \"{1}\"",
                       CapitalAWithRing, cat);
    Console.WriteLine();

// Note that in each of the following searches, we look for
// LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
// LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
// the string was not found.
// Search using different values of StringComparsion. Specify the start
// index and count.

    Console.WriteLine("Part 1: Start index and count are specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.IndexOf(CapitalAWithRing, 0, cat.Length, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion. Specify the
// start index.
    Console.WriteLine("\nPart 2: Start index is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.IndexOf(CapitalAWithRing, 0, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion.
    Console.WriteLine("\nPart 3: Neither start index nor count is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.IndexOf(CapitalAWithRing, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }
    }
}

/*
Note: This code example was executed on a console whose user interface
culture is "en-US" (English-United States).

This code example produces the following results:

Find the first occurrence of a character using different values of StringComparison.
The current culture is "en-US" - English (United States).
Search for the string " " in the string "A Cheshire ca°t"

Part 1: Start index and count are specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 2: Start index is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 3: Neither start index nor count is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOf 重载
System 命名空间


String ..::.IndexOfAny 方法

String
.
.
::
.
IndexOfAny 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的索引。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.IndexOfAny 方法 ( array<Char >[]()[])

String
.
.
::
.
IndexOfAny 方法 (
array<
Char
>
[]
()
[]
)
String 类

报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的索引。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOfAny ( _
    anyOf As Char() _
) As Integer
public int IndexOfAny(
    char[] anyOf
)
public:
int IndexOfAny(
    array<wchar_t>^ anyOf
)
member IndexOfAny :
        anyOf:char[] -> int

参数

anyOf
类型：
array<
System Char
>
[]
()
[]

Unicode 字符数组，包含一个或多个要查找的字符。

返回值

类型： System Int32
在此实例中第一次找到 anyOf 中的任意字符的索引位置（从零开始）；如果未找到 anyOf 中的字符，则为 -1。
异常 | 条件
ArgumentNullException | anyOf 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

索引编号从零开始。

对 anyOf 的搜索区分大小写。

此方法执行顺序（不区分区域性）搜索，即，仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即，仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例使用 IndexOfAny 方法在用户输入的字符串中检查无效字符。

' Get the tree node under the mouse pointer and
' save it in the mySelectedNode variable.
Private Sub treeView1_MouseDown(sender As Object, _
  e As System.Windows.Forms.MouseEventArgs)

   mySelectedNode = treeView1.GetNodeAt(e.X, e.Y)
End Sub

Private Sub menuItem1_Click(sender As Object, e As System.EventArgs)
   If Not (mySelectedNode Is Nothing) And _
     Not (mySelectedNode.Parent Is Nothing) Then
      treeView1.SelectedNode = mySelectedNode
      treeView1.LabelEdit = True
      If Not mySelectedNode.IsEditing Then
         mySelectedNode.BeginEdit()
      End If
   Else
      MessageBox.Show("No tree node selected or selected node is a root node." & _
        Microsoft.VisualBasic.ControlChars.Cr & _
        "Editing of root nodes is not allowed.", "Invalid selection")
   End If
End Sub

Private Sub treeView1_AfterLabelEdit(sender As Object, _
  e As System.Windows.Forms.NodeLabelEditEventArgs)
   If Not (e.Label Is Nothing) Then
      If e.Label.Length > 0 Then
         If e.Label.IndexOfAny(New Char() {"@"c, "."c, ","c, "!"c}) = -1 Then
            ' Stop editing without canceling the label change.
            e.Node.EndEdit(False)
         Else
            ' Cancel the label edit action, inform the user, and
            ' place the node in edit mode again.
            e.CancelEdit = True
            MessageBox.Show("Invalid tree node label." & _
              Microsoft.VisualBasic.ControlChars.Cr & _
              "The invalid characters are: '@','.', ',', '!'", _
              "Node Label Edit")
            e.Node.BeginEdit()
         End If
      Else
         ' Cancel the label edit action, inform the user, and
         ' place the node in edit mode again.
         e.CancelEdit = True
         MessageBox.Show("Invalid tree node label." & _
           Microsoft.VisualBasic.ControlChars.Cr & _
           "The label cannot be blank", "Node Label Edit")
           e.Node.BeginEdit()
      End If
   End If
End Sub

/* Get the tree node under the mouse pointer and
   save it in the mySelectedNode variable. */
private void treeView1_MouseDown(object sender,
  System.Windows.Forms.MouseEventArgs e)
{
   mySelectedNode = treeView1.GetNodeAt(e.X, e.Y);
}

private void menuItem1_Click(object sender, System.EventArgs e)
{
   if (mySelectedNode != null && mySelectedNode.Parent != null)
   {
      treeView1.SelectedNode = mySelectedNode;
      treeView1.LabelEdit = true;
      if(!mySelectedNode.IsEditing)
      {
         mySelectedNode.BeginEdit();
      }
   }
   else
   {
      MessageBox.Show("No tree node selected or selected node is a root node.\n" +
         "Editing of root nodes is not allowed.", "Invalid selection");
   }
}

private void treeView1_AfterLabelEdit(object sender,
         System.Windows.Forms.NodeLabelEditEventArgs e)
{
   if (e.Label != null)
   {
     if(e.Label.Length > 0)
     {
        if (e.Label.IndexOfAny(new char[]{'@', '.', ',', '!'}) == -1)
        {
           // Stop editing without canceling the label change.
           e.Node.EndEdit(false);
        }
        else
        {
           /* Cancel the label edit action, inform the user, and
              place the node in edit mode again. */
           e.CancelEdit = true;
           MessageBox.Show("Invalid tree node label.\n" +
              "The invalid characters are: '@','.', ',', '!'",
              "Node Label Edit");
           e.Node.BeginEdit();
        }
     }
     else
     {
        /* Cancel the label edit action, inform the user, and
           place the node in edit mode again. */
        e.CancelEdit = true;
        MessageBox.Show("Invalid tree node label.\nThe label cannot be blank",
           "Node Label Edit");
        e.Node.BeginEdit();
     }
   }
}

   /* Get the tree node under the mouse pointer and
      save it in the mySelectedNode variable. */
private:
   void treeView1_MouseDown( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ e )
   {
      mySelectedNode = treeView1->GetNodeAt( e->X, e->Y );
   }

   void menuItem1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      if ( mySelectedNode != nullptr && mySelectedNode->Parent != nullptr )
      {
         treeView1->SelectedNode = mySelectedNode;
         treeView1->LabelEdit = true;
         if (  !mySelectedNode->IsEditing )
         {
            mySelectedNode->BeginEdit();
         }
      }
      else
      {
         MessageBox::Show( String::Concat( "No tree node selected or selected node is a root node.\n",
            "Editing of root nodes is not allowed." ), "Invalid selection" );
      }
   }

   void treeView1_AfterLabelEdit( Object^ /*sender*/,
      System::Windows::Forms::NodeLabelEditEventArgs^ e )
   {
      if ( e->Label != nullptr )
      {
         if ( e->Label->Length > 0 )
         {
            array<Char>^ temp0 = {'@','.',',','!'};
            if ( e->Label->IndexOfAny( temp0 ) == -1 )
            {

               // Stop editing without canceling the label change.
               e->Node->EndEdit( false );
            }
            else
            {
               /* Cancel the label edit action, inform the user, and
                  place the node in edit mode again. */
               e->CancelEdit = true;
               MessageBox::Show( String::Concat( "Invalid tree node label.\n",
                  "The invalid characters are: '@','.', ',', '!'" ),
                  "Node Label Edit" );
               e->Node->BeginEdit();
            }
         }
         else
         {
            /* Cancel the label edit action, inform the user, and
               place the node in edit mode again. */
            e->CancelEdit = true;
            MessageBox::Show( "Invalid tree node label.\nThe label cannot be blank",
               "Node Label Edit" );
            e->Node->BeginEdit();
         }
      }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOfAny 重载
System 命名空间
Char
Int32
Array
IndexOf
LastIndexOf
LastIndexOfAny


String ..::.IndexOfAny 方法 ( array<Char >[]()[], Int32)

String
.
.
::
.
IndexOfAny 方法 (
array<
Char
>
[]
()
[]
, Int32)
String 类

报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的索引。该搜索从指定字符位置开始。 报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的索引。该搜索从指定字符位置开始。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOfAny ( _
    anyOf As Char(), _
    startIndex As Integer _
) As Integer
public int IndexOfAny(
    char[] anyOf,
    int startIndex
)
public:
int IndexOfAny(
    array<wchar_t>^ anyOf,
    int startIndex
)
member IndexOfAny :
        anyOf:char[] *
        startIndex:int -> int

参数

anyOf
类型：
array<
System Char
>
[]
()
[]

Unicode 字符数组，包含一个或多个要查找的字符。
startIndex
类型： System Int32
搜索起始位置。

返回值

类型： System Int32
在此实例中第一次找到 anyOf 中的任意字符的索引位置（从零开始）；如果未找到 anyOf 中的字符，则为 -1。
异常 | 条件
ArgumentNullException | anyOf 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 为负数。 - 或 - startIndex 大于此实例中的字符数。

索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。 索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。

搜索范围为从 startIndex 到字符串的末尾。

对 anyOf 的搜索区分大小写。

此方法执行顺序（不区分区域性）搜索，即，仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即，仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例查找字符串“is”的任意字符在另一个字符串的子字符串中的匹配项的索引。

' Sample for String.IndexOfAny(Char[], Int32)
Imports System

Class Sample
   Public Shared Sub Main()
      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer
      Dim target As String = "is"
      Dim anyOf As Char() = target.ToCharArray()

      start = str.Length / 2
      Console.WriteLine()
      Console.WriteLine("Search for a character occurrence from position {0} to {1}.", _
                           start, str.Length - 1)
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("A character in '{0}' occurs at position: ", target)
      at = str.IndexOfAny(anyOf, start)
      If at > - 1 Then
         Console.Write(at)
      Else
         Console.Write("(not found)")
      End If
      Console.WriteLine()
   End Sub 'Main
End Class 'Sample
'
'
'Search for a character occurrence from position 33 to 66.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'A character in 'is' occurs at position: 49
'

// Sample for String.IndexOfAny(Char[], Int32)
using System;

class Sample {
    public static void Main()
    {
    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;
    string target = "is";
    char[] anyOf = target.ToCharArray();

    start = str.Length/2;
    Console.WriteLine();
    Console.WriteLine("The first character occurrence from position {0} to {1}.",
                           start, str.Length-1);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("A character in '{0}' occurs at position: ", target);

    at = str.IndexOfAny(anyOf, start);
    if (at > -1)
        Console.Write(at);
    else
        Console.Write("(not found)");
    Console.WriteLine();
    }
}
/*

The first character occurrence from position 33 to 66.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'is' occurs at position: 49

*/

// Sample for String::IndexOfAny(Char[], Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   String^ target = "is";
   array<Char>^anyOf = target->ToCharArray();
   start = str->Length / 2;
   Console::WriteLine();
   Console::WriteLine( "The first character occurrence from position {0} to {1}.", start, str->Length - 1 );
   Console::WriteLine( "{1}{0}{2}{0}{3}{0}", Environment::NewLine, br1, br2, str );
   Console::Write( "A character in '{0}' occurs at position: ", target );
   at = str->IndexOfAny( anyOf, start );
   if ( at > -1 )
      Console::Write( at );
   else
      Console::Write( "(not found)" );

   Console::WriteLine();
}

/*

The first character occurrence from position 33 to 66.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'is' occurs at position: 49

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOfAny 重载
System 命名空间
Char
Int32
Array
IndexOf
LastIndexOf
LastIndexOfAny


String ..::.IndexOfAny 方法 ( array<Char >[]()[], Int32, Int32)

String
.
.
::
.
IndexOfAny 方法 (
array<
Char
>
[]
()
[]
, Int32, Int32)
String 类

报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的索引。搜索从指定字符位置开始，并检查指定数量的字符位置。 报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的索引。搜索从指定字符位置开始，并检查指定数量的字符位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IndexOfAny ( _
    anyOf As Char(), _
    startIndex As Integer, _
    count As Integer _
) As Integer
public int IndexOfAny(
    char[] anyOf,
    int startIndex,
    int count
)
public:
int IndexOfAny(
    array<wchar_t>^ anyOf,
    int startIndex,
    int count
)
member IndexOfAny :
        anyOf:char[] *
        startIndex:int *
        count:int -> int

参数

anyOf
类型：
array<
System Char
>
[]
()
[]

Unicode 字符数组，包含一个或多个要查找的字符。
startIndex
类型： System Int32
搜索起始位置。
count
类型： System Int32
要检查的字符位置数。

返回值

类型： System Int32
在此实例中第一次找到 anyOf 中的任意字符的索引位置（从零开始）；如果未找到 anyOf 中的字符，则为 -1。
异常 | 条件
ArgumentNullException | anyOf 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | count 或 startIndex 为负。 - 或 - count+startIndex 大于此实例中的字符数。

搜索从 startIndex 开始，并且一直搜索至 startIndex + count -1。startIndex + count 位置上的字符不在搜索范围内。 搜索从 startIndex 开始，并且一直搜索至 startIndex + count -1。startIndex + count 位置上的字符不在搜索范围内。

索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。 索引编号从零开始。startIndex 参数的范围可以从 0 到字符串实例的长度减一。

对 anyOf 的搜索区分大小写。

此方法执行顺序（不区分区域性）搜索，即，仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即，仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.IndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例查找字符串“aid”的任意字符在另一个字符串的子字符串中的匹配项的索引。

' Sample for String.IndexOfAny(Char[], Int32, Int32)
Imports System

Class Sample
   Public Shared Sub Main()
      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer
      Dim count As Integer
      Dim target As String = "aid"
      Dim anyOf As Char() = target.ToCharArray()

      start =(str.Length - 1) / 3
      count =(str.Length - 1) / 4
      Console.WriteLine()
      Console.WriteLine("The first character occurrence from position {0} for {1} characters.", start, count)
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("A character in '{0}' occurs at position: ", target)

      at = str.IndexOfAny(anyOf, start, count)
      If at > - 1 Then
         Console.Write(at)
      Else
         Console.Write("(not found)")
      End If
      Console.WriteLine()
   End Sub 'Main
End Class 'Sample
'
'The first character occurrence from position 22 for 16 characters.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'A character in 'aid' occurs at position: 27
'

// Sample for String.IndexOfAny(Char[], Int32, Int32)
using System;

class Sample {
    public static void Main()
    {
    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;
    int count;
    string target = "aid";
    char[] anyOf = target.ToCharArray();

    start = (str.Length-1)/3;
    count = (str.Length-1)/4;
    Console.WriteLine();
    Console.WriteLine("The first character occurrence from position {0} for {1} characters.", start, count);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("A character in '{0}' occurs at position: ", target);

    at = str.IndexOfAny(anyOf, start, count);
    if (at > -1)
        Console.Write(at);
    else
        Console.Write("(not found)");
    Console.WriteLine();
    }
}
/*

The first character occurrence from position 22 for 16 characters.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'aid' occurs at position: 27

*/

// Sample for String::IndexOfAny(Char[], Int32, Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   int count;
   String^ target = "aid";
   array<Char>^anyOf = target->ToCharArray();
   start = (str->Length - 1) / 3;
   count = (str->Length - 1) / 4;
   Console::WriteLine();
   Console::WriteLine( "The first character occurrence from position {0} for {1} characters.", start, count );
   Console::WriteLine( "{1}{0}{2}{0}{3}{0}", Environment::NewLine, br1, br2, str );
   Console::Write( "A character in '{0}' occurs at position: ", target );
   at = str->IndexOfAny( anyOf, start, count );
   if ( at > -1 )
      Console::Write( at );
   else
      Console::Write( "(not found)" );

   Console::WriteLine();
}

/*

The first character occurrence from position 22 for 16 characters.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'aid' occurs at position: 27

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
IndexOfAny 重载
System 命名空间
Char
Int32
Array
IndexOf
LastIndexOf
LastIndexOfAny


String ..::.Insert 方法

String
.
.
::
.
Insert 方法
String 类

在此实例中的指定索引位置插入一个指定的 String 实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Insert ( _
    startIndex As Integer, _
    value As String _
) As String
public string Insert(
    int startIndex,
    string value
)
public:
String^ Insert(
    int startIndex,
    String^ value
)
member Insert :
        startIndex:int *
        value:string -> string

参数

startIndex
类型： System Int32
此插入的索引位置。
value
类型： System String
要插入的字符串。

返回值

类型： System String
与此实例等效的一个新字符串，但在该字符串的 startIndex 位置处插入了 value。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 为负，或大于此实例的长度。

如果 startIndex 等于此实例的长度，则将 value 追加到此实例的末尾。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，其中 value 已插入到当前实例中。 此方法不修改当前实例的值。而是返回一个新字符串，其中 value 已插入到当前实例中。

例如，"abc".Insert(2, "XYZ") 的返回值为“abXYZc”。

下面的控制台应用程序提供了 Insert 方法的简单使用说明。

Public Class InsertTest

    Public Shared Sub Main()
        Dim animal1 As String = "fox"
        Dim animal2 As String = "dog"
        Dim strTarget As String = [String].Format("The {0} jumped over the {1}.", animal1, animal2)

        Console.WriteLine("The original string is:{0}{1}{0}", Environment.NewLine, strTarget)

        Console.Write("Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal1)
        Dim adj1 As String = Console.ReadLine()

        Console.Write("Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal2)
        Dim adj2 As String = Console.ReadLine()

        adj1 = adj1.Trim() + " "
        adj2 = adj2.Trim() + " "

        strTarget = strTarget.Insert(strTarget.IndexOf(animal1), adj1)
        strTarget = strTarget.Insert(strTarget.IndexOf(animal2), adj2)

        Console.WriteLine("{0}The final string is:{0}{1}", Environment.NewLine, strTarget)
    End Sub
End Class
' Output from the example might appear as follows:
'       The original string is:
'       The fox jumped over the dog.
'
'       Enter an adjective (or group of adjectives) to describe the fox: ==> bold
'       Enter an adjective (or group of adjectives) to describe the dog: ==> lazy
'
'       The final string is:
'       The bold fox jumped over the lazy dog.

using System;

public class InsertTest {
    public static void Main()
    {
        string animal1 = "fox";
        string animal2 = "dog";

        string strTarget = String.Format("The {0} jumped over the {1}.", animal1, animal2);

        Console.WriteLine("The original string is:{0}{1}{0}", Environment.NewLine, strTarget);

        Console.Write("Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal1);
        string adj1 = Console.ReadLine();

        Console.Write("Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal2);
        string adj2 = Console.ReadLine();

        adj1 = adj1.Trim() + " ";
        adj2 = adj2.Trim() + " ";

        strTarget = strTarget.Insert(strTarget.IndexOf(animal1), adj1);
        strTarget = strTarget.Insert(strTarget.IndexOf(animal2), adj2);

        Console.WriteLine("{0}The final string is:{0}{1}", Environment.NewLine, strTarget);
    }
}
// Output from the example might appear as follows:
//       The original string is:
//       The fox jumped over the dog.
//
//       Enter an adjective (or group of adjectives) to describe the fox: ==> bold
//       Enter an adjective (or group of adjectives) to describe the dog: ==> lazy
//
//       The final string is:
//       The bold fox jumped over the lazy dog.

using namespace System;

int main()
{
   String^ animal1 = "fox";
   String^ animal2 = "dog";
   String^ strTarget = String::Format( "The {0} jumped over the {1}.", animal1, animal2 );
   Console::WriteLine( "The original string is:{0}{1}{0}", Environment::NewLine, strTarget );
   Console::Write( "Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal1 );
   String^ adj1 = Console::ReadLine();
   Console::Write( "Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal2 );
   String^ adj2 = Console::ReadLine();
   adj1 = String::Concat( adj1->Trim(), " " );
   adj2 = String::Concat( adj2->Trim(), " " );
   strTarget = strTarget->Insert( strTarget->IndexOf( animal1 ), adj1 );
   strTarget = strTarget->Insert( strTarget->IndexOf( animal2 ), adj2 );
   Console::WriteLine( " {0}The final string is: {0} {1}", Environment::NewLine, strTarget );
}
// Output from the example might appear as follows:
//       The original string is:
//       The fox jumped over the dog.
//
//       Enter an adjective (or group of adjectives) to describe the fox: ==> bold
//       Enter an adjective (or group of adjectives) to describe the dog: ==> lazy
//
//       The final string is:
//       The bold fox jumped over the lazy dog.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Int32
Concat
CopyTo
Insert
Join
Remove
Replace
Split
Substring
Trim


String ..::.Intern 方法

String
.
.
::
.
Intern 方法
String 类

检索系统对指定 String 的引用。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Intern ( _
    str As String _
) As String
public static string Intern(
    string str
)
public:
static String^ Intern(
    String^ str
)
static member Intern :
        str:string -> string

参数

str
类型： System String
要在暂存池中搜索的字符串。

返回值

类型： System String
如果暂存了 str，则返回系统对其的引用；否则返回对值为 str 的字符串的新引用。
异常 | 条件
ArgumentNullException | str 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

公共语言运行时通过维护一个表来存放字符串，该表称为“暂存池”，它包含程序中以编程方式声明或创建的每个唯一的字符串的一个引用。因此，具有特定值的字符串的实例在系统中只有一个。 公共语言运行时通过维护一个表来存放字符串，该表称为“暂存池”，它包含程序中以编程方式声明或创建的每个唯一的字符串的一个引用。因此，具有特定值的字符串的实例在系统中只有一个。

例如，如果将同一字符串分配给几个变量，运行时就会从暂存池中检索对该字符串的相同引用，并将它分配给各个变量。

Intern 方法使用暂存池来搜索与 str 值相等的字符串。如果存在这样的字符串，则返回暂存池中它的引用。如果不存在，则向暂存池添加对 str 的引用，然后返回该引用。 Intern 方法使用暂存池来搜索与 str 值相等的字符串。如果存在这样的字符串，则返回暂存池中它的引用。如果不存在，则向暂存池添加对 str 的引用，然后返回该引用。 Intern 方法使用暂存池来搜索与 str 值相等的字符串。如果存在这样的字符串，则返回暂存池中它的引用。如果不存在，则向暂存池添加对 str 的引用，然后返回该引用。

在下面的示例中，值为“MyTest”的字符串 s1 已被拘留，因为它是程序中的文本。System.Text..::.StringBuilder 类生成与 s1 同值的新字符串对象。对该字符串的引用被分配给 s2。Intern 方法搜索与 s2 具有相同值的字符串。由于存在此类字符串，因此该方法返回分配给 s1 的引用。该引用又被分配给 s3。引用 s1 和 s2 相比较的结果是不相等，因为它们引用了不同的对象；而引用 s1 和 s3 相比较的结果是相等，因为它们引用了同一字符串。 在下面的示例中，值为“MyTest”的字符串 s1 已被拘留，因为它是程序中的文本。System.Text..::.StringBuilder 类生成与 s1 同值的新字符串对象。对该字符串的引用被分配给 s2。Intern 方法搜索与 s2 具有相同值的字符串。由于存在此类字符串，因此该方法返回分配给 s1 的引用。该引用又被分配给 s3。引用 s1 和 s2 相比较的结果是不相等，因为它们引用了不同的对象；而引用 s1 和 s3 相比较的结果是相等，因为它们引用了同一字符串。 在下面的示例中，值为“MyTest”的字符串 s1 已被拘留，因为它是程序中的文本。System.Text..::.StringBuilder 类生成与 s1 同值的新字符串对象。对该字符串的引用被分配给 s2。Intern 方法搜索与 s2 具有相同值的字符串。由于存在此类字符串，因此该方法返回分配给 s1 的引用。该引用又被分配给 s3。引用 s1 和 s2 相比较的结果是不相等，因为它们引用了不同的对象；而引用 s1 和 s3 相比较的结果是相等，因为它们引用了同一字符串。 在下面的示例中，值为“MyTest”的字符串 s1 已被拘留，因为它是程序中的文本。System.Text..::.StringBuilder 类生成与 s1 同值的新字符串对象。对该字符串的引用被分配给 s2。Intern 方法搜索与 s2 具有相同值的字符串。由于存在此类字符串，因此该方法返回分配给 s1 的引用。该引用又被分配给 s3。引用 s1 和 s2 相比较的结果是不相等，因为它们引用了不同的对象；而引用 s1 和 s3 相比较的结果是相等，因为它们引用了同一字符串。 在下面的示例中，值为“MyTest”的字符串 s1 已被拘留，因为它是程序中的文本。System.Text..::.StringBuilder 类生成与 s1 同值的新字符串对象。对该字符串的引用被分配给 s2。Intern 方法搜索与 s2 具有相同值的字符串。由于存在此类字符串，因此该方法返回分配给 s1 的引用。该引用又被分配给 s3。引用 s1 和 s2 相比较的结果是不相等，因为它们引用了不同的对象；而引用 s1 和 s3 相比较的结果是相等，因为它们引用了同一字符串。 在下面的示例中，值为“MyTest”的字符串 s1 已被拘留，因为它是程序中的文本。System.Text..::.StringBuilder 类生成与 s1 同值的新字符串对象。对该字符串的引用被分配给 s2。Intern 方法搜索与 s2 具有相同值的字符串。由于存在此类字符串，因此该方法返回分配给 s1 的引用。该引用又被分配给 s3。引用 s1 和 s2 相比较的结果是不相等，因为它们引用了不同的对象；而引用 s1 和 s3 相比较的结果是相等，因为它们引用了同一字符串。 在下面的示例中，值为“MyTest”的字符串 s1 已被拘留，因为它是程序中的文本。System.Text..::.StringBuilder 类生成与 s1 同值的新字符串对象。对该字符串的引用被分配给 s2。Intern 方法搜索与 s2 具有相同值的字符串。由于存在此类字符串，因此该方法返回分配给 s1 的引用。该引用又被分配给 s3。引用 s1 和 s2 相比较的结果是不相等，因为它们引用了不同的对象；而引用 s1 和 s3 相比较的结果是相等，因为它们引用了同一字符串。

Dim s1 As String = "MyTest"
Dim s2 As String = New StringBuilder().Append("My").Append("Test").ToString()
Dim s3 As String = String.Intern(s2)
Console.WriteLine(CObj(s2) Is CObj(s1))      ' Different references.
Console.WriteLine(CObj(s3) Is CObj(s1))      ' The same reference.

string s1 = "MyTest";
string s2 = new StringBuilder().Append("My").Append("Test").ToString();
string s3 = String.Intern(s2);
Console.WriteLine((Object)s2==(Object)s1); // Different references.
Console.WriteLine((Object)s3==(Object)s1); // The same reference.

将此方法与 IsInterned 方法进行比较。

版本注意事项

在 .NET Framework 3.5 版 Service Pack 1 中，对于空字符串留用，Intern 方法将恢复其在 .NET Framework 1.0 版 和 .NET Framework 1.1 版 中的行为。在下面的示例中，在将值为 Empty 的 StringBuilder 对象转换为字符串后，通过调用 Intern 方法，为变量 str1 分配对 Empty 的引用，并为变量 str2 分配对 Empty 的引用。然后，比较 str1 和 str2 所包含的引用是否相等。 在 .NET Framework 3.5 版 Service Pack 1 中，对于空字符串留用，Intern 方法将恢复其在 .NET Framework 1.0 版 和 .NET Framework 1.1 版 中的行为。在下面的示例中，在将值为 Empty 的 StringBuilder 对象转换为字符串后，通过调用 Intern 方法，为变量 str1 分配对 Empty 的引用，并为变量 str2 分配对 Empty 的引用。然后，比较 str1 和 str2 所包含的引用是否相等。 在 .NET Framework 3.5 版 Service Pack 1 中，对于空字符串留用，Intern 方法将恢复其在 .NET Framework 1.0 版 和 .NET Framework 1.1 版 中的行为。在下面的示例中，在将值为 Empty 的 StringBuilder 对象转换为字符串后，通过调用 Intern 方法，为变量 str1 分配对 Empty 的引用，并为变量 str2 分配对 Empty 的引用。然后，比较 str1 和 str2 所包含的引用是否相等。

        Dim str1 As String = String.Empty
        Dim str2 As String = String.Empty

        Dim sb As StringBuilder = New StringBuilder().Append(String.Empty)
        str2 = String.Intern(sb.ToString())

        If CObj(str1) Is CObj(str2) Then
            Console.WriteLine("The strings are equal.")
        Else
            Console.WriteLine("The strings are not equal.")
        End If

        string str1 = String.Empty;
        string str2 = String.Empty;

        StringBuilder sb = new StringBuilder().Append(String.Empty);
        str2 = String.Intern(sb.ToString());

        if((object)str1==(object)str2)
            Console.WriteLine("The strings are equal.");
        else
            Console.WriteLine("The strings are not equal.");

在 .NET Framework 1.0、.NET Framework 1.1 和 .NET Framework 3.5 SP1 中，str1 和 str2 相等。 在 .NET Framework 2.0 Service Pack 1 和 .NET Framework 3.0 版 中，str1 和 str2 不相等。

性能注意事项

如果要减少应用程序分配的内存总量，请记住留用字符串有两个不希望出现的副作用。首先，为留用的 String 对象分配的内存在公共语言运行时 (CLR) 终止之前不大可能释放。这是因为 CLR 对留用的 String 对象的引用可能保持到应用程序终止之后，甚至可能保持到应用程序域终止之后。其次，要留用字符串，必须先创建字符串。即使 String 对象使用的内存最终将通过垃圾回收，仍然必须分配该内存。 如果要减少应用程序分配的内存总量，请记住留用字符串有两个不希望出现的副作用。首先，为留用的 String 对象分配的内存在公共语言运行时 (CLR) 终止之前不大可能释放。这是因为 CLR 对留用的 String 对象的引用可能保持到应用程序终止之后，甚至可能保持到应用程序域终止之后。其次，要留用字符串，必须先创建字符串。即使 String 对象使用的内存最终将通过垃圾回收，仍然必须分配该内存。 如果要减少应用程序分配的内存总量，请记住留用字符串有两个不希望出现的副作用。首先，为留用的 String 对象分配的内存在公共语言运行时 (CLR) 终止之前不大可能释放。这是因为 CLR 对留用的 String 对象的引用可能保持到应用程序终止之后，甚至可能保持到应用程序域终止之后。其次，要留用字符串，必须先创建字符串。即使 String 对象使用的内存最终将通过垃圾回收，仍然必须分配该内存。 如果要减少应用程序分配的内存总量，请记住留用字符串有两个不希望出现的副作用。首先，为留用的 String 对象分配的内存在公共语言运行时 (CLR) 终止之前不大可能释放。这是因为 CLR 对留用的 String 对象的引用可能保持到应用程序终止之后，甚至可能保持到应用程序域终止之后。其次，要留用字符串，必须先创建字符串。即使 String 对象使用的内存最终将通过垃圾回收，仍然必须分配该内存。 如果要减少应用程序分配的内存总量，请记住留用字符串有两个不希望出现的副作用。首先，为留用的 String 对象分配的内存在公共语言运行时 (CLR) 终止之前不大可能释放。这是因为 CLR 对留用的 String 对象的引用可能保持到应用程序终止之后，甚至可能保持到应用程序域终止之后。其次，要留用字符串，必须先创建字符串。即使 String 对象使用的内存最终将通过垃圾回收，仍然必须分配该内存。

.NET Framework 2.0 版引入了 CompilationRelaxations..::.NoStringInterning 枚举成员。NoStringInterning 成员将程序集标记为不需要字符串拘留。可以使用 CompilationRelaxationsAttribute 特性将 NoStringInterning 应用于某个程序集。此外，当您使用Ngen.exe（本机映像生成器） 先于运行时编译程序集时，字符串将不在模块间留用。 .NET Framework 2.0 版引入了 CompilationRelaxations..::.NoStringInterning 枚举成员。NoStringInterning 成员将程序集标记为不需要字符串拘留。可以使用 CompilationRelaxationsAttribute 特性将 NoStringInterning 应用于某个程序集。此外，当您使用Ngen.exe（本机映像生成器） 先于运行时编译程序集时，字符串将不在模块间留用。 .NET Framework 2.0 版引入了 CompilationRelaxations..::.NoStringInterning 枚举成员。NoStringInterning 成员将程序集标记为不需要字符串拘留。可以使用 CompilationRelaxationsAttribute 特性将 NoStringInterning 应用于某个程序集。此外，当您使用Ngen.exe（本机映像生成器） 先于运行时编译程序集时，字符串将不在模块间留用。 .NET Framework 2.0 版引入了 CompilationRelaxations..::.NoStringInterning 枚举成员。NoStringInterning 成员将程序集标记为不需要字符串拘留。可以使用 CompilationRelaxationsAttribute 特性将 NoStringInterning 应用于某个程序集。此外，当您使用Ngen.exe（本机映像生成器） 先于运行时编译程序集时，字符串将不在模块间留用。

下面的示例使用三个值相等的字符串确定新建的字符串和留用的字符串是否相等。

' Sample for String.Intern(String)
Imports System
Imports System.Text

Class Sample

   Public Shared Sub Main()
      Dim s1 As [String] = "MyTest"
      Dim s2 As [String] = New StringBuilder().Append("My").Append("Test").ToString()
      Dim s3 As [String] = [String].Intern(s2)
      Console.WriteLine("s1 = '{0}'", s1)
      Console.WriteLine("s2 = '{0}'", s2)
      Console.WriteLine("s3 = '{0}'", s3)
      Console.WriteLine("Is s2 the same reference as s1?: {0}", s2 Is s1)
      Console.WriteLine("Is s3 the same reference as s1?: {0}", s3 Is s1)
   End Sub 'Main
End Class 'Sample
'
's1 = 'MyTest'
's2 = 'MyTest'
's3 = 'MyTest'
'Is s2 the same reference as s1?: False
'Is s3 the same reference as s1?: True
'

// Sample for String.Intern(String)
using System;
using System.Text;

class Sample {
    public static void Main() {
    String s1 = "MyTest";
    String s2 = new StringBuilder().Append("My").Append("Test").ToString();
    String s3 = String.Intern(s2);
    Console.WriteLine("s1 == '{0}'", s1);
    Console.WriteLine("s2 == '{0}'", s2);
    Console.WriteLine("s3 == '{0}'", s3);
    Console.WriteLine("Is s2 the same reference as s1?: {0}", (Object)s2==(Object)s1);
    Console.WriteLine("Is s3 the same reference as s1?: {0}", (Object)s3==(Object)s1);
    }
}
/*
This example produces the following results:
s1 == 'MyTest'
s2 == 'MyTest'
s3 == 'MyTest'
Is s2 the same reference as s1?: False
Is s3 the same reference as s1?: True
*/

// Sample for String::Intern(String)
using namespace System;
using namespace System::Text;
int main()
{
   String^ s1 = "MyTest";
   String^ s2 = (gcnew StringBuilder)->Append( "My" )->Append( "Test" )->ToString();
   String^ s3 = String::Intern( s2 );
   Console::WriteLine( "s1 == '{0}'", s1 );
   Console::WriteLine( "s2 == '{0}'", s2 );
   Console::WriteLine( "s3 == '{0}'", s3 );
   Console::WriteLine( "Is s2 the same reference as s1?: {0}", s2 == s1 );
   Console::WriteLine( "Is s3 the same reference as s1?: {0}", s3 == s1 );
}

/*
This example produces the following results:
s1 == 'MyTest'
s2 == 'MyTest'
s3 == 'MyTest'
Is s2 the same reference as s1?: False
Is s3 the same reference as s1?: True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
IsInterned


String ..::.IsInterned 方法

String
.
.
::
.
IsInterned 方法
String 类

检索对指定 String 的引用。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsInterned ( _
    str As String _
) As String
public static string IsInterned(
    string str
)
public:
static String^ IsInterned(
    String^ str
)
static member IsInterned :
        str:string -> string

参数

str
类型： System String
要在暂存池中搜索的字符串。

返回值

类型： System String
如果 str 在公共语言运行时的暂存池中，则返回对它的引用；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | str 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

公共语言运行时会自动维护一个名为“暂存池”的表，它包含在程序中声明的每个唯一字符串常数的单个实例，以及以编程方式添加的 String 的任何唯一实例。

暂存池可以节约字符串存储区。如果将字符串常数分配给几个变量，则每个变量设置为引用暂存池中的同一常数，而不是引用具有相同值的 String 的几个不同实例。 暂存池可以节约字符串存储区。如果将字符串常数分配给几个变量，则每个变量设置为引用暂存池中的同一常数，而不是引用具有相同值的 String 的几个不同实例。

此方法在暂存池中查找 str。如果已经将 str 放入暂存池中，则返回对此实例的引用；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 此方法在暂存池中查找 str。如果已经将 str 放入暂存池中，则返回对此实例的引用；否则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

将此方法与 Intern 方法进行比较。

此方法不返回布尔值，但仍可以在需要布尔值的地方使用。

说明 说明

从 .NET Framework 2.0 版开始，使用 Ngen.exe（本机映像生成器） 将某个程序集安装到本地计算机上的本机映像缓存时，可以重写暂存池的使用。有关更多信息，请参见 Intern 属性“备注”部分中的“Performance Considerations”（性能注意事项）。 从 .NET Framework 2.0 版开始，使用 Ngen.exe（本机映像生成器） 将某个程序集安装到本地计算机上的本机映像缓存时，可以重写暂存池的使用。有关更多信息，请参见 Intern 属性“备注”部分中的“Performance Considerations”（性能注意事项）。

下面的示例演示文本字符串自动由编译器留用的过程。

' Sample for String.IsInterned(String)
Imports System
Imports System.Text
Imports System.Runtime.CompilerServices

' In the .NET Framework 2.0 the following attribute declaration allows you to
' avoid the use of the interning when you use NGEN.exe to compile an assembly
' to the native image cache.
<Assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)>
Class Sample
    Public Shared Sub Main()
        ' String str1 is known at compile time, and is automatically interned.
        Dim str1 As [String] = "abcd"

        ' Constructed string, str2, is not explicitly or automatically interned.
        Dim str2 As [String] = New StringBuilder().Append("wx").Append("yz").ToString()
        Console.WriteLine()
        Test(1, str1)
        Test(2, str2)
    End Sub 'Main

    Public Shared Sub Test(ByVal sequence As Integer, ByVal str As [String])
        Console.Write("{0}) The string, '", sequence)
        Dim strInterned As [String] = [String].IsInterned(str)
        If strInterned Is Nothing Then
            Console.WriteLine("{0}', is not interned.", str)
        Else
            Console.WriteLine("{0}', is interned.", strInterned)
        End If
    End Sub 'Test
End Class 'Sample '

'This example produces the following results:

'1) The string, 'abcd', is interned.
'2) The string, 'wxyz', is not interned.

'If you use NGEN.exe to compile the assembly to the native image cache, this
'example produces the following results:

'1) The string, 'abcd', is not interned.
'2) The string, 'wxyz', is not interned.

// Sample for String.IsInterned(String)
using System;
using System.Text;
using System.Runtime.CompilerServices;

// In the .NET Framework 2.0 the following attribute declaration allows you to
// avoid the use of the interning when you use NGEN.exe to compile an assembly
// to the native image cache.
[assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)]
class Sample
{
    public static void Main()
    {
        // String str1 is known at compile time, and is automatically interned.
        String str1 = "abcd";

        // Constructed string, str2, is not explicitly or automatically interned.
        String str2 = new StringBuilder().Append("wx").Append("yz").ToString();
        Console.WriteLine();
        Test(1, str1);
        Test(2, str2);
    }

    public static void Test(int sequence, String str)
    {
        Console.Write("{0}) The string, '", sequence);
        String strInterned = String.IsInterned(str);
        if (strInterned == null)
            Console.WriteLine("{0}', is not interned.", str);
        else
            Console.WriteLine("{0}', is interned.", strInterned);
    }
}

//This example produces the following results:

//1) The string, 'abcd', is interned.
//2) The string, 'wxyz', is not interned.

//If you use NGEN.exe to compile the assembly to the native image cache, this
//example produces the following results:

//1) The string, 'abcd', is not interned.
//2) The string, 'wxyz', is not interned.

// Sample for String::IsInterned(String)
using namespace System;
using namespace System::Text;
using namespace System::Runtime::CompilerServices;

// In the .NET Framework 2.0 the following attribute declaration allows you to
// avoid the use of the interning when you use NGEN.exe to compile an assembly
// to the native image cache.
[assembly:CompilationRelaxations(CompilationRelaxations::NoStringInterning)];
void Test( int sequence, String^ str )
{
   Console::Write( "{0} The string '", sequence );
   String^ strInterned = String::IsInterned( str );
   if ( strInterned == nullptr )
      Console::WriteLine( "{0}' is not interned.", str );
   else
      Console::WriteLine( "{0}' is interned.", strInterned );
}

int main()
{

   // String str1 is known at compile time, and is automatically interned.
   String^ str1 = "abcd";

   // Constructed string, str2, is not explicitly or automatically interned.
   String^ str2 = (gcnew StringBuilder)->Append( "wx" )->Append( "yz" )->ToString();
   Console::WriteLine();
   Test( 1, str1 );
   Test( 2, str2 );
}

//This example produces the following results:

//1) The string, 'abcd', is interned.
//2) The string, 'wxyz', is not interned.

//If you use NGEN.exe to compile the assembly to the native image cache, this
//example produces the following results:

//1) The string, 'abcd', is not interned.
//2) The string, 'wxyz', is not interned.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Intern


String ..::.IsNormalized 方法

String
.
.
::
.
IsNormalized 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

指示此字符串是否符合特定的 Unicode 范式。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.IsNormalized 方法

String
.
.
::
.
IsNormalized 方法
String 类

指示此字符串是否符合 Unicode 范式 C。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsNormalized As Boolean
public bool IsNormalized()
public:
bool IsNormalized()
member IsNormalized : unit -> bool

返回值

类型： System Boolean
如果此字符串符合范式 C，则为 true；否则为 false。
异常 | 条件
ArgumentException | 当前实例包含无效的 Unicode 字符。

某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。单个字符存在多种表示形式增加了搜索、排序、匹配和其他操作的复杂性。 某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。单个字符存在多种表示形式增加了搜索、排序、匹配和其他操作的复杂性。

Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。 Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。 Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。

有关支持的 Unicode 范式的说明，请参见 System.Text..::.NormalizationForm。

对调用者的说明

一旦在字符串中遇到第一个非规范化字符，IsNormalized 方法将返回 false。因此，如果字符串包含后面跟着无效 Unicode 字符的非标准化字符，Normalize 方法可能引发 ArgumentException，尽管 IsNormalized 会返回 false。 一旦在字符串中遇到第一个非规范化字符，IsNormalized 方法将返回 false。因此，如果字符串包含后面跟着无效 Unicode 字符的非标准化字符，Normalize 方法可能引发 ArgumentException，尽管 IsNormalized 会返回 false。

下面的示例确定一个字符串是否成功地规范化为各种范式。

' This example demonstrates the String.Normalize method
'                       and the String.IsNormalized method
Imports System
Imports System.Text
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      ' Character c; combining characters acute and cedilla; character 3/4
      Dim s1 = New [String](New Char() {ChrW(&H0063), ChrW(&H0301), ChrW(&H0327), ChrW(&H00BE)})
      Dim s2 As String = Nothing
      Dim divider = New [String]("-"c, 80)
      divider = [String].Concat(Environment.NewLine, divider, Environment.NewLine)

      Try
         Show("s1", s1)
         Console.WriteLine()
         Console.WriteLine("U+0063 = LATIN SMALL LETTER C")
         Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT")
         Console.WriteLine("U+0327 = COMBINING CEDILLA")
         Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS")

         Console.WriteLine(divider)

         Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}", s1.IsNormalized())
         Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}", s1.IsNormalized(NormalizationForm.FormC))
         Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}", s1.IsNormalized(NormalizationForm.FormD))
         Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}", s1.IsNormalized(NormalizationForm.FormKC))
         Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}", s1.IsNormalized(NormalizationForm.FormKD))

         Console.WriteLine(divider)

         Console.WriteLine("Set string s2 to each normalized form of string s1.")
         Console.WriteLine()
         Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE")
         Console.WriteLine("U+0033 = DIGIT THREE")
         Console.WriteLine("U+2044 = FRACTION SLASH")
         Console.WriteLine("U+0034 = DIGIT FOUR")
         Console.WriteLine(divider)

         s2 = s1.Normalize()
         Console.Write("B1) Is s2 normalized to the default form (Form C)?: ")
         Console.WriteLine(s2.IsNormalized())
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormC)
         Console.Write("B2) Is s2 normalized to Form C?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormD)
         Console.Write("B3) Is s2 normalized to Form D?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormKC)
         Console.Write("B4) Is s2 normalized to Form KC?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormKD)
         Console.Write("B5) Is s2 normalized to Form KD?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD))
         Show("s2", s2)
         Console.WriteLine()

      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'Main

   Private Shared Sub Show(title As String, s As String)
      Console.Write("Characters in string {0} = ", title)
      Dim x As Char
      For Each x In  s.ToCharArray()
         Console.Write("{0:X4} ", AscW(x))
      Next x
      Console.WriteLine()
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'Characters in string s1 = 0063 0301 0327 00BE
'
'U+0063 = LATIN SMALL LETTER C
'U+0301 = COMBINING ACUTE ACCENT
'U+0327 = COMBINING CEDILLA
'U+00BE = VULGAR FRACTION THREE QUARTERS
'
'--------------------------------------------------------------------------------
'
'A1) Is s1 normalized to the default form (Form C)?: False
'A2) Is s1 normalized to Form C?:  False
'A3) Is s1 normalized to Form D?:  False
'A4) Is s1 normalized to Form KC?: False
'A5) Is s1 normalized to Form KD?: False
'
'--------------------------------------------------------------------------------
'
'Set string s2 to each normalized form of string s1.
'
'U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
'U+0033 = DIGIT THREE
'U+2044 = FRACTION SLASH
'U+0034 = DIGIT FOUR
'
'--------------------------------------------------------------------------------
'
'B1) Is s2 normalized to the default form (Form C)?: True
'Characters in string s2 = 1E09 00BE
'
'B2) Is s2 normalized to Form C?: True
'Characters in string s2 = 1E09 00BE
'
'B3) Is s2 normalized to Form D?: True
'Characters in string s2 = 0063 0327 0301 00BE
'
'B4) Is s2 normalized to Form KC?: True
'Characters in string s2 = 1E09 0033 2044 0034
'
'B5) Is s2 normalized to Form KD?: True
'Characters in string s2 = 0063 0327 0301 0033 2044 0034
'

// This example demonstrates the String.Normalize method
//                       and the String.IsNormalized method

using System;
using System.Text;

class Sample
{
    public static void Main()
    {
// Character c; combining characters acute and cedilla; character 3/4
    string s1 = new String( new char[] {'\u0063', '\u0301', '\u0327', '\u00BE'});
    string s2 = null;
    string divider = new String('-', 80);
    divider = String.Concat(Environment.NewLine, divider, Environment.NewLine);

    try
    {
    Show("s1", s1);
    Console.WriteLine();
    Console.WriteLine("U+0063 = LATIN SMALL LETTER C");
    Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT");
    Console.WriteLine("U+0327 = COMBINING CEDILLA");
    Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS");
    Console.WriteLine(divider);

    Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}",
                                 s1.IsNormalized());
    Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}",
                                 s1.IsNormalized(NormalizationForm.FormC));
    Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}",
                                 s1.IsNormalized(NormalizationForm.FormD));
    Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}",
                                 s1.IsNormalized(NormalizationForm.FormKC));
    Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}",
                                 s1.IsNormalized(NormalizationForm.FormKD));

    Console.WriteLine(divider);

    Console.WriteLine("Set string s2 to each normalized form of string s1.");
    Console.WriteLine();
    Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE");
    Console.WriteLine("U+0033 = DIGIT THREE");
    Console.WriteLine("U+2044 = FRACTION SLASH");
    Console.WriteLine("U+0034 = DIGIT FOUR");
    Console.WriteLine(divider);

    s2 = s1.Normalize();
    Console.Write("B1) Is s2 normalized to the default form (Form C)?: ");
    Console.WriteLine(s2.IsNormalized());
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormC);
    Console.Write("B2) Is s2 normalized to Form C?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormD);
    Console.Write("B3) Is s2 normalized to Form D?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormKC);
    Console.Write("B4) Is s2 normalized to Form KC?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormKD);
    Console.Write("B5) Is s2 normalized to Form KD?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD));
    Show("s2", s2);
    Console.WriteLine();
    }

    catch (Exception e)
        {
        Console.WriteLine(e.Message);
        }
    }

    private static void Show(string title, string s)
    {
    Console.Write("Characters in string {0} = ", title);
    foreach(short x in s.ToCharArray())
        {
        Console.Write("{0:X4} ", x);
        }
    Console.WriteLine();
    }
}
/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

// This example demonstrates the String.Normalize method
//                       and the String.IsNormalized method
using namespace System;
using namespace System::Text;
void Show( String^ title, String^ s )
{
   Console::Write( "Characters in string {0} = ", title );
   System::Collections::IEnumerator^ myEnum = s->ToCharArray()->GetEnumerator();
   while ( myEnum->MoveNext() )
   {

      /*) * __try_cast < Char * > ( myEnum -> Current );*/
      int x;
      Console::Write( "{0:X4} ", x );
   }

   Console::WriteLine();
}

int main()
{

   // Character c; combining characters acute and cedilla; character 3/4
   array<Char>^temp0 = {L'c',L'\u0301',L'\u0327',L'\u00BE'};
   String^ s1 = gcnew String( temp0 );
   String^ s2 = nullptr;
   String^ divider = gcnew String( '-',80 );
   divider = String::Concat( Environment::NewLine, divider, Environment::NewLine );
   try
   {
      Show( "s1", s1 );
      Console::WriteLine();
      Console::WriteLine( "U+0063 = LATIN SMALL LETTER C" );
      Console::WriteLine( "U+0301 = COMBINING ACUTE ACCENT" );
      Console::WriteLine( "U+0327 = COMBINING CEDILLA" );
      Console::WriteLine( "U+00BE = VULGAR FRACTION THREE QUARTERS" );
      Console::WriteLine( divider );
      Console::WriteLine( "A1) Is s1 normalized to the default form (Form C)?: {0}", s1->IsNormalized() );
      Console::WriteLine( "A2) Is s1 normalized to Form C?:  {0}", s1->IsNormalized( NormalizationForm::FormC ) );
      Console::WriteLine( "A3) Is s1 normalized to Form D?:  {0}", s1->IsNormalized( NormalizationForm::FormD ) );
      Console::WriteLine( "A4) Is s1 normalized to Form KC?: {0}", s1->IsNormalized( NormalizationForm::FormKC ) );
      Console::WriteLine( "A5) Is s1 normalized to Form KD?: {0}", s1->IsNormalized( NormalizationForm::FormKD ) );
      Console::WriteLine( divider );
      Console::WriteLine( "Set string s2 to each normalized form of string s1." );
      Console::WriteLine();
      Console::WriteLine( "U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" );
      Console::WriteLine( "U+0033 = DIGIT THREE" );
      Console::WriteLine( "U+2044 = FRACTION SLASH" );
      Console::WriteLine( "U+0034 = DIGIT FOUR" );
      Console::WriteLine( divider );
      s2 = s1->Normalize();
      Console::Write( "B1) Is s2 normalized to the default form (Form C)?: " );
      Console::WriteLine( s2->IsNormalized() );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormC );
      Console::Write( "B2) Is s2 normalized to Form C?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormC ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormD );
      Console::Write( "B3) Is s2 normalized to Form D?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormD ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormKC );
      Console::Write( "B4) Is s2 normalized to Form KC?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormKC ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormKD );
      Console::Write( "B5) Is s2 normalized to Form KD?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormKD ) );
      Show( "s2", s2 );
      Console::WriteLine();
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
IsNormalized 重载
System 命名空间
Normalize


String ..::.IsNormalized 方法 (NormalizationForm)

String
.
.
::
.
IsNormalized 方法 (NormalizationForm)
String 类

指示此字符串是否符合指定的 Unicode 范式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsNormalized ( _
    normalizationForm As NormalizationForm _
) As Boolean
public bool IsNormalized(
    NormalizationForm normalizationForm
)
public:
bool IsNormalized(
    NormalizationForm normalizationForm
)
member IsNormalized :
        normalizationForm:NormalizationForm -> bool

参数

normalizationForm
类型： System.Text NormalizationForm
一个 Unicode 范式。

返回值

类型： System Boolean
如果此字符串符合由 normalizationForm 参数指定的范式，则为 true；否则为 false。
异常 | 条件
ArgumentException | 当前实例包含无效的 Unicode 字符。

某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。单个字符存在多种表示形式增加了搜索、排序、匹配和其他操作的复杂性。 某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。单个字符存在多种表示形式增加了搜索、排序、匹配和其他操作的复杂性。

Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。 Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。 Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。

有关支持的 Unicode 范式的说明，请参见 System.Text..::.NormalizationForm。

对调用者的说明

一旦在字符串中遇到第一个非规范化字符，IsNormalized 方法将返回 false。因此，如果字符串包含后面跟着无效 Unicode 字符的非标准化字符，Normalize 方法可能引发 ArgumentException，尽管 IsNormalized 会返回 false。 一旦在字符串中遇到第一个非规范化字符，IsNormalized 方法将返回 false。因此，如果字符串包含后面跟着无效 Unicode 字符的非标准化字符，Normalize 方法可能引发 ArgumentException，尽管 IsNormalized 会返回 false。

下面的示例阐释 IsNormalized 和 Normalize 方法。

' This example demonstrates the String.Normalize method
'                       and the String.IsNormalized method
Imports System
Imports System.Text
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      ' Character c; combining characters acute and cedilla; character 3/4
      Dim s1 = New [String](New Char() {ChrW(&H0063), ChrW(&H0301), ChrW(&H0327), ChrW(&H00BE)})
      Dim s2 As String = Nothing
      Dim divider = New [String]("-"c, 80)
      divider = [String].Concat(Environment.NewLine, divider, Environment.NewLine)

      Try
         Show("s1", s1)
         Console.WriteLine()
         Console.WriteLine("U+0063 = LATIN SMALL LETTER C")
         Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT")
         Console.WriteLine("U+0327 = COMBINING CEDILLA")
         Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS")

         Console.WriteLine(divider)

         Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}", s1.IsNormalized())
         Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}", s1.IsNormalized(NormalizationForm.FormC))
         Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}", s1.IsNormalized(NormalizationForm.FormD))
         Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}", s1.IsNormalized(NormalizationForm.FormKC))
         Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}", s1.IsNormalized(NormalizationForm.FormKD))

         Console.WriteLine(divider)

         Console.WriteLine("Set string s2 to each normalized form of string s1.")
         Console.WriteLine()
         Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE")
         Console.WriteLine("U+0033 = DIGIT THREE")
         Console.WriteLine("U+2044 = FRACTION SLASH")
         Console.WriteLine("U+0034 = DIGIT FOUR")
         Console.WriteLine(divider)

         s2 = s1.Normalize()
         Console.Write("B1) Is s2 normalized to the default form (Form C)?: ")
         Console.WriteLine(s2.IsNormalized())
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormC)
         Console.Write("B2) Is s2 normalized to Form C?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormD)
         Console.Write("B3) Is s2 normalized to Form D?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormKC)
         Console.Write("B4) Is s2 normalized to Form KC?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormKD)
         Console.Write("B5) Is s2 normalized to Form KD?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD))
         Show("s2", s2)
         Console.WriteLine()

      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'Main

   Private Shared Sub Show(title As String, s As String)
      Console.Write("Characters in string {0} = ", title)
      Dim x As Char
      For Each x In  s.ToCharArray()
         Console.Write("{0:X4} ", AscW(x))
      Next x
      Console.WriteLine()
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'Characters in string s1 = 0063 0301 0327 00BE
'
'U+0063 = LATIN SMALL LETTER C
'U+0301 = COMBINING ACUTE ACCENT
'U+0327 = COMBINING CEDILLA
'U+00BE = VULGAR FRACTION THREE QUARTERS
'
'--------------------------------------------------------------------------------
'
'A1) Is s1 normalized to the default form (Form C)?: False
'A2) Is s1 normalized to Form C?:  False
'A3) Is s1 normalized to Form D?:  False
'A4) Is s1 normalized to Form KC?: False
'A5) Is s1 normalized to Form KD?: False
'
'--------------------------------------------------------------------------------
'
'Set string s2 to each normalized form of string s1.
'
'U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
'U+0033 = DIGIT THREE
'U+2044 = FRACTION SLASH
'U+0034 = DIGIT FOUR
'
'--------------------------------------------------------------------------------
'
'B1) Is s2 normalized to the default form (Form C)?: True
'Characters in string s2 = 1E09 00BE
'
'B2) Is s2 normalized to Form C?: True
'Characters in string s2 = 1E09 00BE
'
'B3) Is s2 normalized to Form D?: True
'Characters in string s2 = 0063 0327 0301 00BE
'
'B4) Is s2 normalized to Form KC?: True
'Characters in string s2 = 1E09 0033 2044 0034
'
'B5) Is s2 normalized to Form KD?: True
'Characters in string s2 = 0063 0327 0301 0033 2044 0034
'

// This example demonstrates the String.Normalize method
//                       and the String.IsNormalized method

using System;
using System.Text;

class Sample
{
    public static void Main()
    {
// Character c; combining characters acute and cedilla; character 3/4
    string s1 = new String( new char[] {'\u0063', '\u0301', '\u0327', '\u00BE'});
    string s2 = null;
    string divider = new String('-', 80);
    divider = String.Concat(Environment.NewLine, divider, Environment.NewLine);

    try
    {
    Show("s1", s1);
    Console.WriteLine();
    Console.WriteLine("U+0063 = LATIN SMALL LETTER C");
    Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT");
    Console.WriteLine("U+0327 = COMBINING CEDILLA");
    Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS");
    Console.WriteLine(divider);

    Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}",
                                 s1.IsNormalized());
    Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}",
                                 s1.IsNormalized(NormalizationForm.FormC));
    Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}",
                                 s1.IsNormalized(NormalizationForm.FormD));
    Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}",
                                 s1.IsNormalized(NormalizationForm.FormKC));
    Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}",
                                 s1.IsNormalized(NormalizationForm.FormKD));

    Console.WriteLine(divider);

    Console.WriteLine("Set string s2 to each normalized form of string s1.");
    Console.WriteLine();
    Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE");
    Console.WriteLine("U+0033 = DIGIT THREE");
    Console.WriteLine("U+2044 = FRACTION SLASH");
    Console.WriteLine("U+0034 = DIGIT FOUR");
    Console.WriteLine(divider);

    s2 = s1.Normalize();
    Console.Write("B1) Is s2 normalized to the default form (Form C)?: ");
    Console.WriteLine(s2.IsNormalized());
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormC);
    Console.Write("B2) Is s2 normalized to Form C?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormD);
    Console.Write("B3) Is s2 normalized to Form D?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormKC);
    Console.Write("B4) Is s2 normalized to Form KC?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormKD);
    Console.Write("B5) Is s2 normalized to Form KD?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD));
    Show("s2", s2);
    Console.WriteLine();
    }

    catch (Exception e)
        {
        Console.WriteLine(e.Message);
        }
    }

    private static void Show(string title, string s)
    {
    Console.Write("Characters in string {0} = ", title);
    foreach(short x in s.ToCharArray())
        {
        Console.Write("{0:X4} ", x);
        }
    Console.WriteLine();
    }
}
/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

// This example demonstrates the String.Normalize method
//                       and the String.IsNormalized method
using namespace System;
using namespace System::Text;
void Show( String^ title, String^ s )
{
   Console::Write( "Characters in string {0} = ", title );
   System::Collections::IEnumerator^ myEnum = s->ToCharArray()->GetEnumerator();
   while ( myEnum->MoveNext() )
   {

      /*) * __try_cast < Char * > ( myEnum -> Current );*/
      int x;
      Console::Write( "{0:X4} ", x );
   }

   Console::WriteLine();
}

int main()
{

   // Character c; combining characters acute and cedilla; character 3/4
   array<Char>^temp0 = {L'c',L'\u0301',L'\u0327',L'\u00BE'};
   String^ s1 = gcnew String( temp0 );
   String^ s2 = nullptr;
   String^ divider = gcnew String( '-',80 );
   divider = String::Concat( Environment::NewLine, divider, Environment::NewLine );
   try
   {
      Show( "s1", s1 );
      Console::WriteLine();
      Console::WriteLine( "U+0063 = LATIN SMALL LETTER C" );
      Console::WriteLine( "U+0301 = COMBINING ACUTE ACCENT" );
      Console::WriteLine( "U+0327 = COMBINING CEDILLA" );
      Console::WriteLine( "U+00BE = VULGAR FRACTION THREE QUARTERS" );
      Console::WriteLine( divider );
      Console::WriteLine( "A1) Is s1 normalized to the default form (Form C)?: {0}", s1->IsNormalized() );
      Console::WriteLine( "A2) Is s1 normalized to Form C?:  {0}", s1->IsNormalized( NormalizationForm::FormC ) );
      Console::WriteLine( "A3) Is s1 normalized to Form D?:  {0}", s1->IsNormalized( NormalizationForm::FormD ) );
      Console::WriteLine( "A4) Is s1 normalized to Form KC?: {0}", s1->IsNormalized( NormalizationForm::FormKC ) );
      Console::WriteLine( "A5) Is s1 normalized to Form KD?: {0}", s1->IsNormalized( NormalizationForm::FormKD ) );
      Console::WriteLine( divider );
      Console::WriteLine( "Set string s2 to each normalized form of string s1." );
      Console::WriteLine();
      Console::WriteLine( "U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" );
      Console::WriteLine( "U+0033 = DIGIT THREE" );
      Console::WriteLine( "U+2044 = FRACTION SLASH" );
      Console::WriteLine( "U+0034 = DIGIT FOUR" );
      Console::WriteLine( divider );
      s2 = s1->Normalize();
      Console::Write( "B1) Is s2 normalized to the default form (Form C)?: " );
      Console::WriteLine( s2->IsNormalized() );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormC );
      Console::Write( "B2) Is s2 normalized to Form C?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormC ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormD );
      Console::Write( "B3) Is s2 normalized to Form D?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormD ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormKC );
      Console::Write( "B4) Is s2 normalized to Form KC?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormKC ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormKD );
      Console::Write( "B5) Is s2 normalized to Form KD?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormKD ) );
      Show( "s2", s2 );
      Console::WriteLine();
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
IsNormalized 重载
System 命名空间
Normalize


String ..::.IsNullOrEmpty 方法

String
.
.
::
.
IsNullOrEmpty 方法
String 类

指示指定的字符串是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 还是 Empty 字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsNullOrEmpty ( _
    value As String _
) As Boolean
public static bool IsNullOrEmpty(
    string value
)
public:
static bool IsNullOrEmpty(
    String^ value
)
static member IsNullOrEmpty :
        value:string -> bool

参数

value
类型： System String
要测试的字符串。

返回值

类型： System Boolean
如果 value 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则为 true；否则为 false。

IsNullOrEmpty 是一种简便方法，它使您能够同时测试 String 是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或其值是否为 Empty。

下面的示例确定三个字符串中的每个字符串是有一个值、为空字符串还是为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

' This example demonstrates the String.IsNullOrEmpty() method
Imports System

Class Sample
   Public Shared Sub Main()
      Dim s1 As String = "abcd"
      Dim s2 As String = ""
      Dim s3 As String = Nothing

      Console.WriteLine("String s1 {0}.", Test(s1))
      Console.WriteLine("String s2 {0}.", Test(s2))
      Console.WriteLine("String s3 {0}.", Test(s3))
   End Sub 'Main

   Public Shared Function Test(s As String) As [String]
      If [String].IsNullOrEmpty(s) = True Then
         Return "is null or empty"
      Else
         Return String.Format("(""{0}"") is not null or empty", s)
      End If
   End Function 'Test
End Class 'Sample
'
'This example produces the following results:
'
'String s1 ("abcd") is not null or empty.
'String s2 is null or empty.
'String s3 is null or empty.
'

// This example demonstrates the String.IsNullOrEmpty() method
using System;

class Sample
{
    public static void Main()
    {
    string s1 = "abcd";
    string s2 = "";
    string s3 = null;

    Console.WriteLine("String s1 {0}.", Test(s1));
    Console.WriteLine("String s2 {0}.", Test(s2));
    Console.WriteLine("String s3 {0}.", Test(s3));
    }

    public static String Test(string s)
    {
    if (String.IsNullOrEmpty(s) == true)
        return "is null or empty";
    else
        return String.Format("(\"{0}\") is not null or empty", s);
    }
}
/*
This example produces the following results:

String s1 ("abcd") is not null or empty.
String s2 is null or empty.
String s3 is null or empty.

*/

// This example demonstrates the String.IsNullOrEmpty() method
using namespace System;
String^ Test( String^ s )
{
   if ( String::IsNullOrEmpty( s ) == true )
      return "is null or empty";
   else
      return String::Format( "(\"{0}\") is not null or empty", s );
}

int main()
{
   String^ s1 = "abcd";
   String^ s2 = "";
   String^ s3 = nullptr;
   Console::WriteLine( "String s1 {0}.", Test( s1 ) );
   Console::WriteLine( "String s2 {0}.", Test( s2 ) );
   Console::WriteLine( "String s3 {0}.", Test( s3 ) );
}

/*
This example produces the following results:

String s1 ("abcd") is not null or empty.
String s2 is null or empty.
String s3 is null or empty.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.IsNullOrWhiteSpace 方法

String
.
.
::
.
IsNullOrWhiteSpace 方法
String 类

指示指定的字符串是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、空还是仅由空白字符组成。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsNullOrWhiteSpace ( _
    value As String _
) As Boolean
public static bool IsNullOrWhiteSpace(
    string value
)
public:
static bool IsNullOrWhiteSpace(
    String^ value
)
static member IsNullOrWhiteSpace :
        value:string -> bool

参数

value
类型： System String
要测试的字符串。

返回值

类型： System Boolean
如果 value 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 String..::.Empty，或者如果 value 仅由空白字符组成，则为 true。

IsNullOrWhiteSpace 是与以下代码类似的便捷方法，只不过它提供更高的性能：

Return String.IsNullOrEmpty(value) OrElse value.Trim().Length = 0

return String.IsNullOrEmpty(value) || value.Trim().Length == 0;

空白字符由 Unicode 标准定义。IsNullOrWhiteSpace 方法解释在作为空白字符传递到 Char..::.IsWhiteSpace 方法时返回 true 值的任何字符。 空白字符由 Unicode 标准定义。IsNullOrWhiteSpace 方法解释在作为空白字符传递到 Char..::.IsWhiteSpace 方法时返回 true 值的任何字符。

下面的示例创建字符串数组，然后将数组的每个元素传递给 IsNullOrWhiteSpace 方法。

Module Example
   Public Sub Main()
      Dim values() As String = { Nothing, String.Empty, "ABCDE",
                                 New String(" "c, 20), "  " + vbTab + "   ",
                                 New String(ChrW(&h2000), 10) }
      For Each value As String In values
         Console.WriteLine(String.IsNullOrWhiteSpace(value))
      Next
   End Sub
End Module
' The example displays the following output:
'       True
'       True
'       False
'       True
'       True
'       True

using System;

public class Example
{
   public static void Main()
   {
      string[] values = { null, String.Empty, "ABCDE",
                          new String(' ', 20), "  \t   ",
                          new String('\u2000', 10) };
      foreach (string value in values)
         Console.WriteLine(String.IsNullOrWhiteSpace(value));
   }
}
// The example displays the following output:
//       True
//       True
//       False
//       True
//       True
//       True

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
System 命名空间
IsNullOrEmpty


String ..::.Join 方法

String
.
.
::
.
Join 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

串联指定数组的各个元素或集合成员，其中在每个元素或成员之间使用指定的分隔符。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Join 方法 (String, IEnumerable <(Of <(String >)>))

String
.
.
::
.
Join 方法 (String, IEnumerable
<
(Of
<
(
String
>
)
>
)
)
String 类

串联类型为 String 的 IEnumerable<(Of <(T>)>) 构造集合的成员，其中在每个成员之间使用指定的分隔符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function Join ( _
    separator As String, _
    values As IEnumerable(Of String) _
) As String
[ComVisibleAttribute(false)]
public static string Join(
    string separator,
    IEnumerable<string> values
)
[ComVisibleAttribute(false)]
public:
static String^ Join(
    String^ separator,
    IEnumerable<String^>^ values
)
[<ComVisibleAttribute(false)>]
static member Join :
        separator:string *
        values:IEnumerable<string> -> string

参数

separator
类型： System String
要用作分隔符的字符串。
values
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
String
>
)
>
)

一个包含要串联的字符串的集合。

返回值

类型： System String
一个由 values 的成员组成的字符串，这些成员以 separator 字符串分隔。
异常 | 条件
ArgumentNullException | values 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果 separator 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用空字符串 (String..::.Empty)。

Join(String, IEnumerable<(Of <(String>)>)) 是一个便利方法，通过它可以串联 IEnumerable(Of String) 集合中的每个元素，无需事先将元素转换为字符串数组。它对于语言集成查询 (LINQ) 查询表达式特别有用。下面的示例将包含字母表大写或小写字母的 List(Of String) 对象传递到 lambda 表达式，该表达式选择等于或大于特定字母（在此示例中为 "M"）的字母。Enumerable..::.Where 方法返回的 IEnumerable(Of String) 集合传递到 Join(String, IEnumerable<(Of <(String>)>)) 方法，将结果显示为单个字符串。 Join(String, IEnumerable<(Of <(String>)>)) 是一个便利方法，通过它可以串联 IEnumerable(Of String) 集合中的每个元素，无需事先将元素转换为字符串数组。它对于语言集成查询 (LINQ) 查询表达式特别有用。下面的示例将包含字母表大写或小写字母的 List(Of String) 对象传递到 lambda 表达式，该表达式选择等于或大于特定字母（在此示例中为 "M"）的字母。Enumerable..::.Where 方法返回的 IEnumerable(Of String) 集合传递到 Join(String, IEnumerable<(Of <(String>)>)) 方法，将结果显示为单个字符串。 Join(String, IEnumerable<(Of <(String>)>)) 是一个便利方法，通过它可以串联 IEnumerable(Of String) 集合中的每个元素，无需事先将元素转换为字符串数组。它对于语言集成查询 (LINQ) 查询表达式特别有用。下面的示例将包含字母表大写或小写字母的 List(Of String) 对象传递到 lambda 表达式，该表达式选择等于或大于特定字母（在此示例中为 "M"）的字母。Enumerable..::.Where 方法返回的 IEnumerable(Of String) 集合传递到 Join(String, IEnumerable<(Of <(String>)>)) 方法，将结果显示为单个字符串。 Join(String, IEnumerable<(Of <(String>)>)) 是一个便利方法，通过它可以串联 IEnumerable(Of String) 集合中的每个元素，无需事先将元素转换为字符串数组。它对于语言集成查询 (LINQ) 查询表达式特别有用。下面的示例将包含字母表大写或小写字母的 List(Of String) 对象传递到 lambda 表达式，该表达式选择等于或大于特定字母（在此示例中为 "M"）的字母。Enumerable..::.Where 方法返回的 IEnumerable(Of String) 集合传递到 Join(String, IEnumerable<(Of <(String>)>)) 方法，将结果显示为单个字符串。

Imports System.Collections.Generic
Imports System.Linq

Module modMain
   Public Sub Main()
      Dim output As String = String.Join(" ", GetAlphabet(True).Where(Function(letter) _
                                                         letter >= "M"))

      Console.WriteLine(output)
   End Sub

   Private Function GetAlphabet(upper As Boolean) As List(Of String)
      Dim alphabet As New List(Of String)
      Dim charValue As Integer = CInt(IIf(upper, 65, 97))
      For ctr As Integer = 0 To 25
         alphabet.Add(ChrW(charValue + ctr).ToString())
      Next
      Return alphabet
   End Function
End Module
' The example displays the following output:
'      M N O P Q R S T U V W X Y Z

using System;
using System.Collections.Generic;
using System.Linq;

public class Example
{
   public static void Main()
   {
      string output = String.Join(" ", GetAlphabet(true).Where( letter =>
                      letter.CompareTo("M") >= 0));
      Console.WriteLine(output);
   }

   private static List<string> GetAlphabet(bool upper)
   {
      List<string> alphabet = new List<string>();
      int charValue = upper ? 65 : 97;
      for (int ctr = 0; ctr <= 25; ctr++)
         alphabet.Add(Convert.ToChar(charValue + ctr).ToString());
      return alphabet;
   }
}
// The example displays the following output:
//      M N O P Q R S T U V W X Y Z

下面的示例使用埃拉托色尼斯筛法算法计算小于或等于 100 的质数。它将结果赋值给 String 类型的 List<(Of <(T>)>) 对象，然后将其传递到 Join(String, IEnumerable<(Of <(String>)>)) 方法。 下面的示例使用埃拉托色尼斯筛法算法计算小于或等于 100 的质数。它将结果赋值给 String 类型的 List<(Of <(T>)>) 对象，然后将其传递到 Join(String, IEnumerable<(Of <(String>)>)) 方法。

Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim maxPrime As Integer = 100
      Dim primes As List(Of String) = GetPrimes(maxPrime)
      Console.WriteLine("Primes less than {0}:", maxPrime)
      Console.WriteLine("   {0}", String.Join(" ", primes))
   End Sub

   Private Function GetPrimes(maxPrime As Integer) As List(Of String)
      Dim values As Array = Array.CreateInstance(GetType(Integer), _
                              New Integer() { maxPrime - 1}, New Integer(){ 2 })
      ' Use Sieve of Erathsthenes to determine prime numbers.
      For ctr As Integer = values.GetLowerBound(0) To _
                           CInt(Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))))
         If CInt(values.GetValue(ctr)) = 1 Then Continue For

         For multiplier As Integer = ctr To maxPrime \ 2
            If ctr * multiplier <= maxPrime Then values.SetValue(1, ctr * multiplier)
         Next
      Next

      Dim primes As New List(Of String)
      For ctr As Integer = values.GetLowerBound(0) To values.GetUpperBound(0)
         If CInt(values.GetValue(ctr)) = 0 Then primes.Add(ctr.ToString())
      Next
      Return primes
   End Function
End Module
' The example displays the following output:
'    Primes less than 100:
'       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      int maxPrime = 100;
      List<int> primes = GetPrimes(maxPrime);
      Console.WriteLine("Primes less than {0}:", maxPrime);
      Console.WriteLine("   {0}", String.Join(" ", primes));
   }

   private static List<int> GetPrimes(int maxPrime)
   {
      Array values = Array.CreateInstance(typeof(int),
                              new int[] { maxPrime - 1}, new int[] { 2 });
      // Use Sieve of Erathsthenes to determine prime numbers.
      for (int ctr = values.GetLowerBound(0); ctr <= (int) Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))); ctr++)
      {

         if ((int) values.GetValue(ctr) == 1) continue;

         for (int multiplier = ctr; multiplier <=  maxPrime / 2; multiplier++)
            if (ctr * multiplier <= maxPrime)
               values.SetValue(1, ctr * multiplier);
      }

      List<int> primes = new List<int>();
      for (int ctr = values.GetLowerBound(0); ctr <= values.GetUpperBound(0); ctr++)
         if ((int) values.GetValue(ctr) == 0)
            primes.Add(ctr);
      return primes;
   }
}
// The example displays the following output:
//    Primes less than 100:
//       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Join 重载
System 命名空间


String ..::.Join <(Of <(T >)>) 方法 (String, IEnumerable <(Of <(T >)>))

String
.
.
::
.
Join
<
(Of
<
(
T
>
)
>
)
方法 (String, IEnumerable
<
(Of
<
(
T
>
)
>
)
)
String 类

串联字符串集合的成员，其中在每个成员之间使用指定的分隔符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function Join(Of T) ( _
    separator As String, _
    values As IEnumerable(Of T) _
) As String
[ComVisibleAttribute(false)]
public static string Join<T>(
    string separator,
    IEnumerable<T> values
)

[ComVisibleAttribute(false)]
public:
generic<typename T>
static String^ Join(
    String^ separator,
    IEnumerable<T>^ values
)
[<ComVisibleAttribute(false)>]
static member Join :
        separator:string *
        values:IEnumerable<'T> -> string

类型参数

T

values 成员的类型。

参数

separator
类型： System String
要用作分隔符的字符串。
values
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
T
>
)
>
)

一个包含要串联的对象的集合。

返回值

类型： System String
一个由 values 的成员组成的字符串，这些成员以 separator 字符串分隔。
异常 | 条件
ArgumentNullException | values 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果 separator 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用空字符串 (String..::.Empty)。

Join<(Of <(T>)>)(String, IEnumerable<(Of <(T>)>)) 是一个便利方法，通过它可以串联 IEnumerable<(Of <(T>)>) 集合的每个成员，无需事先将它们转换为字符串。IEnumerable<(Of <(T>)>) 集合中每个对象的字符串表示形式通过调用对象的 ToString 方法派生。 Join<(Of <(T>)>)(String, IEnumerable<(Of <(T>)>)) 是一个便利方法，通过它可以串联 IEnumerable<(Of <(T>)>) 集合的每个成员，无需事先将它们转换为字符串。IEnumerable<(Of <(T>)>) 集合中每个对象的字符串表示形式通过调用对象的 ToString 方法派生。

此方法对于语言集成查询 (LINQ) 查询表达式特别有用。例如以下代码定义了非常简单的 Animal 类，该类包含动物名称以及其所属的顺序。然后，它定义一个 List<(Of <(T>)>) 对象，该对象包含许多 Animal 对象。调用 Enumerable..::.Where 扩展方法来提取其 Order 属性等于 "Rodent" 的 Animal 对象。结果传递给 Join<(Of <(T>)>)(String, IEnumerable<(Of <(T>)>)) 方法。 此方法对于语言集成查询 (LINQ) 查询表达式特别有用。例如以下代码定义了非常简单的 Animal 类，该类包含动物名称以及其所属的顺序。然后，它定义一个 List<(Of <(T>)>) 对象，该对象包含许多 Animal 对象。调用 Enumerable..::.Where 扩展方法来提取其 Order 属性等于 "Rodent" 的 Animal 对象。结果传递给 Join<(Of <(T>)>)(String, IEnumerable<(Of <(T>)>)) 方法。 此方法对于语言集成查询 (LINQ) 查询表达式特别有用。例如以下代码定义了非常简单的 Animal 类，该类包含动物名称以及其所属的顺序。然后，它定义一个 List<(Of <(T>)>) 对象，该对象包含许多 Animal 对象。调用 Enumerable..::.Where 扩展方法来提取其 Order 属性等于 "Rodent" 的 Animal 对象。结果传递给 Join<(Of <(T>)>)(String, IEnumerable<(Of <(T>)>)) 方法。 此方法对于语言集成查询 (LINQ) 查询表达式特别有用。例如以下代码定义了非常简单的 Animal 类，该类包含动物名称以及其所属的顺序。然后，它定义一个 List<(Of <(T>)>) 对象，该对象包含许多 Animal 对象。调用 Enumerable..::.Where 扩展方法来提取其 Order 属性等于 "Rodent" 的 Animal 对象。结果传递给 Join<(Of <(T>)>)(String, IEnumerable<(Of <(T>)>)) 方法。 此方法对于语言集成查询 (LINQ) 查询表达式特别有用。例如以下代码定义了非常简单的 Animal 类，该类包含动物名称以及其所属的顺序。然后，它定义一个 List<(Of <(T>)>) 对象，该对象包含许多 Animal 对象。调用 Enumerable..::.Where 扩展方法来提取其 Order 属性等于 "Rodent" 的 Animal 对象。结果传递给 Join<(Of <(T>)>)(String, IEnumerable<(Of <(T>)>)) 方法。

Imports System.Collections.Generic

Public Class Animal
   Public Kind As String
   Public Order As String

   Public Sub New(kind As String, order As String)
      Me.Kind = kind
      Me.Order = order
   End Sub

   Public Overrides Function ToString() As String
      Return Me.Kind
   End Function
End Class

Module Example
   Public Sub Main()
      Dim animals As New List(Of Animal)
      animals.Add(New Animal("Squirrel", "Rodent"))
      animals.Add(New Animal("Gray Wolf", "Carnivora"))
      animals.Add(New Animal("Capybara", "Rodent"))
      Dim output As String = String.Join(" ", animals.Where(Function(animal) _
                                           animal.Order = "Rodent"))
      Console.WriteLine(output)
   End Sub
End Module
' The example displays the following output:
'      Squirrel Capybara

using System;
using System.Collections.Generic;
using System.Linq;

public class Animal
{
   public string Kind;
   public string Order;

   public Animal(string kind, string order)
   {
      this.Kind = kind;
      this.Order = order;
   }

   public override string ToString()
   {
      return this.Kind;
   }
}

public class Example
{
   public static void Main()
   {
      List<Animal> animals = new List<Animal>();
      animals.Add(new Animal("Squirrel", "Rodent"));
      animals.Add(new Animal("Gray Wolf", "Carnivora"));
      animals.Add(new Animal("Capybara", "Rodent"));
      string output = String.Join(" ", animals.Where( animal =>
                      (animal.Order == "Rodent")));
      Console.WriteLine(output);
   }
}
// The example displays the following output:
//      Squirrel Capybara

下面的示例使用埃拉托色尼斯筛法算法计算小于或等于 100 的质数。它将结果赋值给整数类型的 List<(Of <(T>)>) 对象，然后将其传递到 Join<(Of <(T>)>)(String, IEnumerable<(Of <(T>)>)) 方法。 下面的示例使用埃拉托色尼斯筛法算法计算小于或等于 100 的质数。它将结果赋值给整数类型的 List<(Of <(T>)>) 对象，然后将其传递到 Join<(Of <(T>)>)(String, IEnumerable<(Of <(T>)>)) 方法。

Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim maxPrime As Integer = 100
      Dim primes As List(Of Integer) = GetPrimes(maxPrime)
      Console.WriteLine("Primes less than {0}:", maxPrime)
      Console.WriteLine("   {0}", String.Join(" ", primes))
   End Sub

   Private Function GetPrimes(maxPrime As Integer) As List(Of Integer)
      Dim values As Array = Array.CreateInstance(GetType(Integer), _
                              New Integer() { maxPrime - 1}, New Integer(){ 2 })
      ' Use Sieve of Erathsthenes to determine prime numbers.
      For ctr As Integer = values.GetLowerBound(0) To _
                           CInt(Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))))
         If CInt(values.GetValue(ctr)) = 1 Then Continue For

         For multiplier As Integer = ctr To maxPrime \ 2
            If ctr * multiplier <= maxPrime Then values.SetValue(1, ctr * multiplier)
         Next
      Next

      Dim primes As New System.Collections.Generic.List(Of Integer)
      For ctr As Integer = values.GetLowerBound(0) To values.GetUpperBound(0)
         If CInt(values.GetValue(ctr)) = 0 Then primes.Add(ctr)
      Next
      Return primes
   End Function
End Module
' The example displays the following output:
'    Primes less than 100:
'       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      int maxPrime = 100;
      List<int> primes = GetPrimes(maxPrime);
      Console.WriteLine("Primes less than {0}:", maxPrime);
      Console.WriteLine("   {0}", String.Join(" ", primes));
   }

   private static List<int> GetPrimes(int maxPrime)
   {
      Array values = Array.CreateInstance(typeof(int),
                              new int[] { maxPrime - 1}, new int[] { 2 });
      // Use Sieve of Erathsthenes to determine prime numbers.
      for (int ctr = values.GetLowerBound(0); ctr <= (int) Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))); ctr++)
      {

         if ((int) values.GetValue(ctr) == 1) continue;

         for (int multiplier = ctr; multiplier <=  maxPrime / 2; multiplier++)
            if (ctr * multiplier <= maxPrime)
               values.SetValue(1, ctr * multiplier);
      }

      List<int> primes = new List<int>();
      for (int ctr = values.GetLowerBound(0); ctr <= values.GetUpperBound(0); ctr++)
         if ((int) values.GetValue(ctr) == 0)
            primes.Add(ctr);
      return primes;
   }
}
// The example displays the following output:
//    Primes less than 100:
//       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Join 重载
System 命名空间


String ..::.Join 方法 (String, array<Object >[]()[])

String
.
.
::
.
Join 方法 (String,
array<
Object
>
[]
()
[]
)
String 类

串联对象数组的各个元素，其中在每个元素之间使用指定的分隔符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Shared Function Join ( _
    separator As String, _
    ParamArray values As Object() _
) As String
[ComVisibleAttribute(false)]
public static string Join(
    string separator,
    params Object[] values
)
[ComVisibleAttribute(false)]
public:
static String^ Join(
    String^ separator,
    ... array<Object^>^ values
)
[<ComVisibleAttribute(false)>]
static member Join :
        separator:string *
        values:Object[] -> string

参数

separator
类型： System String
要用作分隔符的字符串。
values
类型：
array<
System Object
>
[]
()
[]

一个数组，其中包含要连接的元素。

返回值

类型： System String
一个由 values 的元素组成的字符串，这些元素以 separator 字符串分隔。
异常 | 条件
ArgumentNullException | values 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果 separator 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用空字符串 (String..::.Empty)。

Join(String, array<Object>[]()[]) 是一个便利方法，通过它可以串联对象数组中的每个元素，无需将其元素显式转换为字符串。数组中每个对象的字符串表示形式通过调用对象的 ToString 方法派生。 Join(String, array<Object>[]()[]) 是一个便利方法，通过它可以串联对象数组中的每个元素，无需将其元素显式转换为字符串。数组中每个对象的字符串表示形式通过调用对象的 ToString 方法派生。

下面的示例使用埃拉托色尼斯筛法算法计算小于或等于 100 的质数。它将结果赋值给整数数组，然后向其传递到 Join(String, array<Object>[]()[]) 方法。 下面的示例使用埃拉托色尼斯筛法算法计算小于或等于 100 的质数。它将结果赋值给整数数组，然后向其传递到 Join(String, array<Object>[]()[]) 方法。

Module Example
   Public Sub Main()
      Dim maxPrime As Integer = 100
      Dim primes() As Integer = GetPrimes(maxPrime)
      Console.WriteLine("Primes less than {0}:", maxPrime)
      Console.WriteLine("   {0}", String.Join(" ", primes))
   End Sub

   Private Function GetPrimes(maxPrime As Integer) As Integer()
      Dim values As Array = Array.CreateInstance(GetType(Integer), _
                              New Integer() { maxPrime - 1}, New Integer(){ 2 })
      ' Use Sieve of Erathsthenes to determine prime numbers.
      For ctr As Integer = values.GetLowerBound(0) To _
                           CInt(Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))))
         If CInt(values.GetValue(ctr)) = 1 Then Continue For

         For multiplier As Integer = ctr To maxPrime \ 2
            If ctr * multiplier <= maxPrime Then values.SetValue(1, ctr * multiplier)
         Next
      Next

      Dim primes As New System.Collections.Generic.List(Of Integer)
      For ctr As Integer = values.GetLowerBound(0) To values.GetUpperBound(0)
         If CInt(values.GetValue(ctr)) = 0 Then primes.Add(ctr)
      Next
      Return primes.ToArray()
   End Function
End Module
' The example displays the following output:
'    Primes less than 100:
'       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      int maxPrime = 100;
      int[] primes = GetPrimes(maxPrime);
      Console.WriteLine("Primes less than {0}:", maxPrime);
      Console.WriteLine("   {0}", String.Join(" ", primes));
   }

   private static int[] GetPrimes(int maxPrime)
   {
      Array values = Array.CreateInstance(typeof(int),
                              new int[] { maxPrime - 1}, new int[] { 2 });
      // Use Sieve of Erathsthenes to determine prime numbers.
      for (int ctr = values.GetLowerBound(0); ctr <= (int) Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))); ctr++)
      {

         if ((int) values.GetValue(ctr) == 1) continue;

         for (int multiplier = ctr; multiplier <=  maxPrime / 2; multiplier++)
            if (ctr * multiplier <= maxPrime)
               values.SetValue(1, ctr * multiplier);
      }

      List<int> primes = new List<int>();
      for (int ctr = values.GetLowerBound(0); ctr <= values.GetUpperBound(0); ctr++)
         if ((int) values.GetValue(ctr) == 0)
            primes.Add(ctr);
      return primes.ToArray();
   }
}
// The example displays the following output:
//    Primes less than 100:
//       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Join 重载
System 命名空间


String ..::.Join 方法 (String, array<String >[]()[])

String
.
.
::
.
Join 方法 (String,
array<
String
>
[]
()
[]
)
String 类

串联字符串数组的所有元素，其中在每个元素之间使用指定的分隔符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Join ( _
    separator As String, _
    ParamArray value As String() _
) As String
public static string Join(
    string separator,
    params string[] value
)
public:
static String^ Join(
    String^ separator,
    ... array<String^>^ value
)
static member Join :
        separator:string *
        value:string[] -> string

参数

separator
类型： System String
要用作分隔符的字符串。
value
类型：
array<
System String
>
[]
()
[]

一个数组，其中包含要连接的元素。

返回值

类型： System String
一个由 value 中的元素组成的字符串，这些元素以 separator 字符串分隔。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

例如，如果 separator 为“,”且 value 的元素为“apple”、“orange”、“grape”和“pear”，则 Join(separator, value) 返回“apple, orange, grape, pear”。

如果 separator 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用空字符串 (String..::.Empty)。

下面的示例说明 Join 方法。

Imports System

Public Class JoinTest

    Public Shared Sub Main()

        Console.WriteLine(MakeLine(0, 5, ", "))
        Console.WriteLine(MakeLine(1, 6, "  "))
        Console.WriteLine(MakeLine(9, 9, ": "))
        Console.WriteLine(MakeLine(4, 7, "< "))
    End Sub 'Main

    Private Shared Function MakeLine(initVal As Integer, multVal As Integer, sep As String) As String
        Dim sArr(10) As String
        Dim i As Integer

        For i = initVal To (initVal + 10) - 1
            sArr((i - initVal)) = [String].Format("{0,-3}", i * multVal)

        Next i
        Return [String].Join(sep, sArr)
    End Function 'MakeLine
End Class 'JoinTest

using System;

public class JoinTest {
    public static void Main() {

        Console.WriteLine(MakeLine(0, 5, ", "));
        Console.WriteLine(MakeLine(1, 6, "  "));
        Console.WriteLine(MakeLine(9, 9, ": "));
        Console.WriteLine(MakeLine(4, 7, "< "));
    }

    private static string MakeLine(int initVal, int multVal, string sep) {

        string [] sArr = new string [10];

        for (int i = initVal; i < initVal + 10; i++)
            sArr[i - initVal] = String.Format("{0,-3}", i * multVal);

        return String.Join(sep, sArr);
    }
}

using namespace System;
String^ MakeLine( int initVal, int multVal, String^ sep )
{
   array<String^>^sArr = gcnew array<String^>(10);
   for ( int i = initVal; i < initVal + 10; i++ )
      sArr[ i - initVal ] = String::Format( "{0, -3}", i * multVal );
   return String::Join( sep, sArr );
}

int main()
{
   Console::WriteLine( MakeLine( 0, 5, ", " ) );
   Console::WriteLine( MakeLine( 1, 6, "  " ) );
   Console::WriteLine( MakeLine( 9, 9, ": " ) );
   Console::WriteLine( MakeLine( 4, 7, "< " ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Join 重载
System 命名空间
Concat


String ..::.Join 方法 (String, array<String >[]()[], Int32, Int32)

String
.
.
::
.
Join 方法 (String,
array<
String
>
[]
()
[]
, Int32, Int32)
String 类

串联字符串数组的指定元素，其中在每个元素之间使用指定的分隔符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Join ( _
    separator As String, _
    value As String(), _
    startIndex As Integer, _
    count As Integer _
) As String
public static string Join(
    string separator,
    string[] value,
    int startIndex,
    int count
)
public:
static String^ Join(
    String^ separator,
    array<String^>^ value,
    int startIndex,
    int count
)
static member Join :
        separator:string *
        value:string[] *
        startIndex:int *
        count:int -> string

参数

separator
类型： System String
要用作分隔符的字符串。
value
类型：
array<
System String
>
[]
()
[]

一个数组，其中包含要连接的元素。
startIndex
类型： System Int32
value 中要使用的第一个元素。
count
类型： System Int32
要使用的 value 的元素数。

返回值

类型： System String
由 value 中的字符串组成的字符串，这些字符串以 separator 字符串分隔。
- 或 -
如果 count 为零，value 没有元素，或 separator 以及 value 的全部元素均为 String..::.Empty，则为 String..::.Empty。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 或 count 小于 0。 - 或 - startIndex 加上 count 大于 value 中的元素数。
OutOfMemoryException | 内存不足。

例如，如果 separator 为“,”且 value 的元素为“apple”、“orange”、“grape”和“pear”，则 Join(separator, value, 1, 2) 返回“orange, grape”。

如果 separator 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用空字符串 (String..::.Empty)。

下面的示例连接水果名称数组中的两个元素。

' Sample for String.Join(String, String[], int int)
Imports System
 _

Class Sample

   Public Shared Sub Main()
      Dim val As [String]() =  {"apple", "orange", "grape", "pear"}
      Dim sep As [String] = ", "
      Dim result As [String]

      Console.WriteLine("sep = '{0}'", sep)
      Console.WriteLine("val() = {{'{0}' '{1}' '{2}' '{3}'}}", val(0), val(1), val(2), val(3))
      result = [String].Join(sep, val, 1, 2)
      Console.WriteLine("String.Join(sep, val, 1, 2) = '{0}'", result)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'sep = ', '
'val() = {'apple' 'orange' 'grape' 'pear'}
'String.Join(sep, val, 1, 2) = 'orange, grape'
'

// Sample for String.Join(String, String[], int int)
using System;

class Sample {
    public static void Main() {
    String[] val = {"apple", "orange", "grape", "pear"};
    String sep   = ", ";
    String result;

    Console.WriteLine("sep = '{0}'", sep);
    Console.WriteLine("val[] = {{'{0}' '{1}' '{2}' '{3}'}}", val[0], val[1], val[2], val[3]);
    result = String.Join(sep, val, 1, 2);
    Console.WriteLine("String.Join(sep, val, 1, 2) = '{0}'", result);
    }
}
/*
This example produces the following results:
sep = ', '
val[] = {'apple' 'orange' 'grape' 'pear'}
String.Join(sep, val, 1, 2) = 'orange, grape'
*/

// Sample for String::Join(String, String[], int int)
using namespace System;
int main()
{
   array<String^>^val = {"apple","orange","grape","pear"};
   String^ sep = ", ";
   String^ result;
   Console::WriteLine( "sep = '{0}'", sep );
   Console::WriteLine( "val[] = {{'{0}' '{1}' '{2}' '{3}'}}", val[ 0 ], val[ 1 ], val[ 2 ], val[ 3 ] );
   result = String::Join( sep, val, 1, 2 );
   Console::WriteLine( "String::Join(sep, val, 1, 2) = '{0}'", result );
}

/*
This example produces the following results:
sep = ', '
val[] = {'apple' 'orange' 'grape' 'pear'}
String::Join(sep, val, 1, 2) = 'orange, grape'
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Join 重载
System 命名空间
Int32
Concat


String ..::.LastIndexOf 方法

String
.
.
::
.
LastIndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

报告指定的 Unicode 字符或字符串在此实例中最后出现处的索引位置。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.LastIndexOf 方法 (Char)

String
.
.
::
.
LastIndexOf 方法 (Char)
String 类

报告指定 Unicode 字符在此实例中的最后一个匹配项的索引位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOf ( _
    value As Char _
) As Integer
public int LastIndexOf(
    char value
)
public:
int LastIndexOf(
    wchar_t value
)
member LastIndexOf :
        value:char -> int

参数

value
类型： System Char
要查找的 Unicode 字符。

返回值

类型： System Int32
如果找到该字符，则为 value 的从零开始的索引位置；如果未找到，则为 -1。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。

此方法从该实例的最后一个字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。该搜索区分大小写。 此方法从该实例的最后一个字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。该搜索区分大小写。

此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例定义了一个 ExtractFilename 方法，即使用 LastIndexOf(Char) 方法查找字符串中的最后一个目录分隔符字符并提取字符串的文件名称。如果文件存在，该方法将返回不包含路径的文件名。 下面的示例定义了一个 ExtractFilename 方法，即使用 LastIndexOf(Char) 方法查找字符串中的最后一个目录分隔符字符并提取字符串的文件名称。如果文件存在，该方法将返回不包含路径的文件名。

Imports System.IO

Public Module Test
   Public Sub Main()
      Dim filename As String

      filename = ExtractFilename("C:\temp\")
      Console.WriteLine("{0}", IIf(String.IsNullOrEmpty(fileName), "<none>", filename))

      filename = ExtractFilename("C:\temp\delegate.txt")
      Console.WriteLine("{0}", IIf(String.IsNullOrEmpty(fileName), "<none>", filename))

      filename = ExtractFilename("delegate.txt")
      Console.WriteLine("{0}", IIf(String.IsNullOrEmpty(fileName), "<none>", filename))

      filename = ExtractFilename("C:\temp\notafile.txt")
      Console.WriteLine("{0}", IIf(String.IsNullOrEmpty(fileName), "<none>", filename))
   End Sub

   Public Function ExtractFilename(filepath As String) As String
      ' If path ends with a "\", it's a path only so return String.Empty.
      If filepath.Trim().EndsWith("\") Then Return String.Empty

      ' Determine where last backslash is.
      Dim position As Integer = filepath.LastIndexOf("\"c)
      ' If there is no backslash, assume that this is a filename.
      If position = -1 Then
         ' Determine whether file exists in the current directory.
         If File.Exists(Environment.CurrentDirectory + Path.DirectorySeparatorChar + filepath) Then
            Return filepath
         Else
            Return String.Empty
         End If
      Else
         ' Determine whether file exists using filepath.
         If File.Exists(filepath) Then
            ' Return filename without file path.
            Return filepath.Substring(position + 1)
         Else
            Return String.Empty
         End If
      End If
   End Function
End Module
' The example displays the following output:
'        <none>
'        delegate.txt
'        <none>
'        <none>

using System;
using System.IO;

public class TestLastIndexOf
{
   public static void Main()
   {
      string filename;

      filename = ExtractFilename(@"C:\temp\");
      Console.WriteLine("{0}", String.IsNullOrEmpty(filename) ? "<none>" : filename);

      filename = ExtractFilename(@"C:\temp\delegate.txt");
      Console.WriteLine("{0}", String.IsNullOrEmpty(filename) ? "<none>" : filename);

      filename = ExtractFilename("delegate.txt");
      Console.WriteLine("{0}", String.IsNullOrEmpty(filename) ? "<none>" : filename);

      filename = ExtractFilename(@"C:\temp\notafile.txt");
      Console.WriteLine("{0}", String.IsNullOrEmpty(filename) ? "<none>" : filename);
   }

   public static string ExtractFilename(string filepath)
   {
      // If path ends with a "\", it's a path only so return String.Empty.
      if (filepath.Trim().EndsWith(@"\"))
         return String.Empty;

      // Determine where last backslash is.
      int position = filepath.LastIndexOf('\\');
      // If there is no backslash, assume that this is a filename.
      if (position == -1)
      {
         // Determine whether file exists in the current directory.
         if (File.Exists(Environment.CurrentDirectory + Path.DirectorySeparatorChar + filepath))
            return filepath;
         else
            return String.Empty;
      }
      else
      {
         // Determine whether file exists using filepath.
         if (File.Exists(filepath))
            // Return filename without file path.
            return filepath.Substring(position + 1);
         else
            return String.Empty;
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOf 重载
System 命名空间
Char
IndexOf
IndexOfAny
LastIndexOfAny


String ..::.LastIndexOf 方法 (String)

String
.
.
::
.
LastIndexOf 方法 (String)
String 类

报告指定字符串在此实例中的最后一个匹配项的索引位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOf ( _
    value As String _
) As Integer
public int LastIndexOf(
    string value
)
public:
int LastIndexOf(
    String^ value
)
member LastIndexOf :
        value:string -> int

参数

value
类型： System String
要搜寻的字符串。

返回值

类型： System Int32
如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为此实例中的最后一个索引位置。 如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为此实例中的最后一个索引位置。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。

搜索从该实例的最后一个字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。

此方法使用当前区域性执行单词（区分大小写和区域性）搜索。

对调用者的说明

如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则查找在字符串实例内某个子字符串的最后一个索引，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 LastIndexOf(String, StringComparison) 方法重载。 如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则查找在字符串实例内某个子字符串的最后一个索引，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 LastIndexOf(String, StringComparison) 方法重载。

下面的示例从字符串中删除开始和结束 HTML 标记（如果标记开始和结束字符串）。如果字符串以右括号字符 (">") 结束，则示例使用 LastIndexOf 方法来查找结束标记的开头。 下面的示例从字符串中删除开始和结束 HTML 标记（如果标记开始和结束字符串）。如果字符串以右括号字符 (">") 结束，则示例使用 LastIndexOf 方法来查找结束标记的开头。

Module Example
   Public Sub Main()
      Dim strSource As String() = { "<b>This is bold text</b>", _
                    "<H1>This is large Text</H1>", _
                    "<b><i><font color=green>This has multiple tags</font></i></b>", _
                    "<b>This has <i>embedded</i> tags.</b>", _
                    "This line ends with a greater than symbol and should not be modified>" }

      ' Strip HTML start and end tags from each string if they are present.
      For Each s As String In strSource
         Console.WriteLine("Before: " + s)
         ' Use EndsWith to find a tag at the end of the line.
         If s.Trim().EndsWith(">") Then
            ' Locate the opening tag.
            Dim endTagStartPosition As Integer = s.LastIndexOf("</")
            ' Remove the identified section if it is valid.
            If endTagStartPosition >= 0 Then
               s = s.Substring(0, endTagStartPosition)
            End If

            ' Use StartsWith to find the opening tag.
            If s.Trim().StartsWith("<") Then
               ' Locate the end of opening tab.
               Dim openTagEndPosition As Integer = s.IndexOf(">")
               ' Remove the identified section if it is valid.
               If openTagEndPosition >= 0 Then
                  s = s.Substring(openTagEndPosition + 1)
               End If
            End If
         End If
         ' Display the trimmed string.
         Console.WriteLine("After: " + s)
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    Before: <b>This is bold text</b>
'    After: This is bold text
'
'    Before: <H1>This is large Text</H1>
'    After: This is large Text
'
'    Before: <b><i><font color=green>This has multiple tags</font></i></b>
'    After: <i><font color=green>This has multiple tags</font></i>
'
'    Before: <b>This has <i>embedded</i> tags.</b>
'    After: This has <i>embedded</i> tags.
'
'    Before: This line ends with a greater than symbol and should not be modified>
'    After: This line ends with a greater than symbol and should not be modified>

using System;

public class Example
{
   public static void Main()
   {
      string[] strSource = { "<b>This is bold text</b>", "<H1>This is large Text</H1>",
               "<b><i><font color=green>This has multiple tags</font></i></b>",
               "<b>This has <i>embedded</i> tags.</b>",
               "This line ends with a greater than symbol and should not be modified>" };

      // Strip HTML start and end tags from each string if they are present.
      foreach (string s in strSource)
      {
         Console.WriteLine("Before: " + s);
         string item = s;
         // Use EndsWith to find a tag at the end of the line.
         if (item.Trim().EndsWith(">"))
         {
            // Locate the opening tag.
            int endTagStartPosition = item.LastIndexOf("</");
            // Remove the identified section, if it is valid.
            if (endTagStartPosition >= 0 )
               item = item.Substring(0, endTagStartPosition);

            // Use StartsWith to find the opening tag.
            if (item.Trim().StartsWith("<"))
            {
               // Locate the end of opening tab.
               int openTagEndPosition = item.IndexOf(">");
               // Remove the identified section, if it is valid.
               if (openTagEndPosition >= 0)
                  item = item.Substring(openTagEndPosition + 1);
            }
         }
         // Display the trimmed string.
         Console.WriteLine("After: " + item);
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    Before: <b>This is bold text</b>
//    After: This is bold text
//
//    Before: <H1>This is large Text</H1>
//    After: This is large Text
//
//    Before: <b><i><font color=green>This has multiple tags</font></i></b>
//    After: <i><font color=green>This has multiple tags</font></i>
//
//    Before: <b>This has <i>embedded</i> tags.</b>
//    After: This has <i>embedded</i> tags.
//
//    Before: This line ends with a greater than symbol and should not be modified>
//    After: This line ends with a greater than symbol and should not be modified>

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOf 重载
System 命名空间
Int32
IndexOf
IndexOfAny
LastIndexOfAny


String ..::.LastIndexOf 方法 (Char, Int32)

String
.
.
::
.
LastIndexOf 方法 (Char, Int32)
String 类

报告指定 Unicode 字符在此实例中的最后一个匹配项的索引位置。该搜索从指定字符位置开始。 报告指定 Unicode 字符在此实例中的最后一个匹配项的索引位置。该搜索从指定字符位置开始。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOf ( _
    value As Char, _
    startIndex As Integer _
) As Integer
public int LastIndexOf(
    char value,
    int startIndex
)
public:
int LastIndexOf(
    wchar_t value,
    int startIndex
)
member LastIndexOf :
        value:char *
        startIndex:int -> int

参数

value
类型： System Char
要查找的 Unicode 字符。
startIndex
类型： System Int32
此实例内子字符串的起始位置。

返回值

类型： System Int32
如果找到该字符，则为 value 的从零开始的索引位置；如果未找到，则为 -1。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零或大于此实例的长度。

索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将搜索从字符串中最后一个字符到开头的所有字符。该搜索区分大小写。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将搜索从字符串中最后一个字符到开头的所有字符。该搜索区分大小写。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将搜索从字符串中最后一个字符到开头的所有字符。该搜索区分大小写。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将搜索从字符串中最后一个字符到开头的所有字符。该搜索区分大小写。

此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例从某个字符串的末尾到开头查找该字符串中某一字符的所有匹配项的索引。

' Sample for String.LastIndexOf(Char, Int32)
Imports System
 _

Class Sample

   Public Shared Sub Main()

      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer

      start = str.Length - 1
      Console.WriteLine("All occurrences of 't' from position {0} to 0.", start)
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("The letter 't' occurs at position(s): ")

      at = 0
      While start > - 1 And at > - 1
         at = str.LastIndexOf("t"c, start)
         If at > - 1 Then
            Console.Write("{0} ", at)
            start = at - 1
         End If
      End While
      Console.Write("{0}{0}{0}", Environment.NewLine)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'All occurrences of 't' from position 66 to 0.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'The letter 't' occurs at position(s): 64 55 44 41 33 11 7
'

// Sample for String.LastIndexOf(Char, Int32)
using System;

class Sample {
    public static void Main() {

    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;

    start = str.Length-1;
    Console.WriteLine("All occurrences of 't' from position {0} to 0.", start);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("The letter 't' occurs at position(s): ");

    at = 0;
    while((start > -1) && (at > -1))
        {
        at = str.LastIndexOf('t', start);
        if (at > -1)
            {
            Console.Write("{0} ", at);
            start = at - 1;
            }
        }
    Console.Write("{0}{0}{0}", Environment.NewLine);
    }
}
/*
This example produces the following results:
All occurrences of 't' from position 66 to 0.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The letter 't' occurs at position(s): 64 55 44 41 33 11 7
*/

// Sample for String::LastIndexOf(Char, Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   start = str->Length - 1;
   Console::WriteLine( "All occurrences of 't' from position {0} to 0.", start );
   Console::WriteLine( "{0}\n{1}\n{2}\n", br1, br2, str );
   Console::Write( "The letter 't' occurs at position(s): " );
   at = 0;
   while ( (start > -1) && (at > -1) )
   {
      at = str->LastIndexOf( 't', start );
      if ( at > -1 )
      {
         Console::Write( " {0} ", at );
         start = at - 1;
      }
   }
}

/*
This example produces the following results:
All occurrences of 't' from position 66 to 0.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The letter 't' occurs at position(s): 64 55 44 41 33 11 7
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOf 重载
System 命名空间
Char
Int32
IndexOf
IndexOfAny
LastIndexOfAny


String ..::.LastIndexOf 方法 (String, Int32)

String
.
.
::
.
LastIndexOf 方法 (String, Int32)
String 类

报告指定字符串在此实例中的最后一个匹配项的索引位置。该搜索从指定字符位置开始。 报告指定字符串在此实例中的最后一个匹配项的索引位置。该搜索从指定字符位置开始。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOf ( _
    value As String, _
    startIndex As Integer _
) As Integer
public int LastIndexOf(
    string value,
    int startIndex
)
public:
int LastIndexOf(
    String^ value,
    int startIndex
)
member LastIndexOf :
        value:string *
        startIndex:int -> int

参数

value
类型： System String
要搜寻的字符串。
startIndex
类型： System Int32
搜索起始位置。

返回值

类型： System Int32
如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。 如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零，或指定不在此实例内的位置。

索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。

搜索从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将搜索从字符串中最后一个字符到开头的所有字符。 搜索从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将搜索从字符串中最后一个字符到开头的所有字符。

此方法使用当前区域性执行单词（区分大小写和区域性）搜索。

对调用者的说明

如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则查找在特定字符位置前出现的子字符串的索引，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 LastIndexOf(String, Int32, StringComparison) 方法重载。 如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则查找在特定字符位置前出现的子字符串的索引，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 LastIndexOf(String, Int32, StringComparison) 方法重载。

下面的示例从目标字符串的末尾到开头查找该字符串中某个字符串的所有匹配项的索引。

' Sample for String.LastIndexOf(String, Int32)
Imports System
 _

Class Sample

   Public Shared Sub Main()

      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer

      '#3
      start = str.Length - 1
      Console.WriteLine("All occurrences of 'he' from position {0} to 0.", start)
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("The string 'he' occurs at position(s): ")

      at = 0
      While start > - 1 And at > - 1
         at = str.LastIndexOf("he", start)
         If at > - 1 Then
            Console.Write("{0} ", at)
            start = at - 1
         End If
      End While
      Console.Write("{0}{0}{0}", Environment.NewLine)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'All occurrences of 'he' from position 66 to 0.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'The string 'he' occurs at position(s): 56 45 8
'
'

// Sample for String.LastIndexOf(String, Int32)
using System;

class Sample {
    public static void Main() {

    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;

    start = str.Length-1;
    Console.WriteLine("All occurrences of 'he' from position {0} to 0.", start);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("The string 'he' occurs at position(s): ");

    at = 0;
    while((start > -1) && (at > -1))
        {
        at = str.LastIndexOf("he", start);
        if (at > -1)
            {
            Console.Write("{0} ", at);
            start = at - 1;
            }
        }
    Console.Write("{0}{0}{0}", Environment.NewLine);
    }
}
/*
This example produces the following results:
All occurrences of 'he' from position 66 to 0.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The string 'he' occurs at position(s): 56 45 8

*/

// Sample for String::LastIndexOf(String, Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   start = str->Length - 1;
   Console::WriteLine( "All occurrences of 'he' from position {0} to 0.", start );
   Console::WriteLine( "{0}\n{1}\n{2}\n", br1, br2, str );
   Console::Write( "The string 'he' occurs at position(s): " );
   at = 0;
   while ( (start > -1) && (at > -1) )
   {
      at = str->LastIndexOf( "he", start );
      if ( at > -1 )
      {
         Console::Write( " {0} ", at );
         start = at - 1;
      }
   }

   Console::WriteLine();
}

/*
This example produces the following results:
All occurrences of 'he' from position 66 to 0.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The string 'he' occurs at position(s):  56  45  8
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOf 重载
System 命名空间
Int32
IndexOf
IndexOfAny
LastIndexOfAny


String ..::.LastIndexOf 方法 (String, StringComparison)

String
.
.
::
.
LastIndexOf 方法 (String, StringComparison)
String 类

报告指定字符串在当前 String 对象中最后一个匹配项的索引。一个参数指定要用于指定字符串的搜索类型。 报告指定字符串在当前 String 对象中最后一个匹配项的索引。一个参数指定要用于指定字符串的搜索类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOf ( _
    value As String, _
    comparisonType As StringComparison _
) As Integer
public int LastIndexOf(
    string value,
    StringComparison comparisonType
)
public:
int LastIndexOf(
    String^ value,
    StringComparison comparisonType
)
member LastIndexOf :
        value:string *
        comparisonType:StringComparison -> int

参数

value
类型： System String
要搜寻的字符串。
comparisonType
类型： System StringComparison
指定搜索规则的枚举值之一。

返回值

类型： System Int32
如果找到该字符串，则为 value 参数的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为此实例中的最后一个索引位置。 如果找到该字符串，则为 value 参数的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为此实例中的最后一个索引位置。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | comparisonType 不是有效的 System..::.StringComparison 值。

索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。

comparisonType 参数指定使用当前区域性还是固定区域性、使用区分大小写的搜索还是不区分大小写的搜索、以及使用字比较规则还是序号比较规则来搜索 value 参数。

搜索从该实例的最后一个字符位置开始，沿反向向前搜索，直到找到 value 或检查完第一个字符位置为止。

下面的示例演示 LastIndexOf 方法的三个重载，该方法使用 StringComparison 枚举的不同值在另一个字符串内查找某个字符串的最后一个匹配项。

' This code example demonstrates the
' System.String.LastIndexOf(String, ..., StringComparison) methods.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim intro As String = "Find the last occurrence of a character using different " & _
                              "values of StringComparison."
        Dim resultFmt As String = "Comparison: {0,-28} Location: {1,3}"

        ' Define a string to search for.
        ' U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
        Dim CapitalAWithRing As String = " "

        ' Define a string to search.
        ' The result of combining the characters LATIN SMALL LETTER A and COMBINING
        ' RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
        ' LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
        Dim cat As String = "A Cheshire c" & "a " & "t"
        Dim loc As Integer = 0
        Dim scValues As StringComparison() =  { _
                        StringComparison.CurrentCulture, _
                        StringComparison.CurrentCultureIgnoreCase, _
                        StringComparison.InvariantCulture, _
                        StringComparison.InvariantCultureIgnoreCase, _
                        StringComparison.Ordinal, _
                        StringComparison.OrdinalIgnoreCase }
        Dim sc As StringComparison

        ' Clear the screen and display an introduction.
        Console.Clear()
        Console.WriteLine(intro)

        ' Display the current culture because culture affects the result. For example,
        ' try this code example with the "sv-SE" (Swedish-Sweden) culture.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
        Console.WriteLine("The current culture is ""{0}"" - {1}.", _
                           Thread.CurrentThread.CurrentCulture.Name, _
                           Thread.CurrentThread.CurrentCulture.DisplayName)

        ' Display the string to search for and the string to search.
        Console.WriteLine("Search for the string ""{0}"" in the string ""{1}""", _
                           CapitalAWithRing, cat)
        Console.WriteLine()

        ' Note that in each of the following searches, we look for
        ' LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
        ' LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
        ' the string was not found.
        ' Search using different values of StringComparsion. Specify the start
        ' index and count.
        Console.WriteLine("Part 1: Start index and count are specified.")
        For Each sc In  scValues
            loc = cat.LastIndexOf(CapitalAWithRing, cat.Length - 1, cat.Length, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion. Specify the
        ' start index.
        Console.WriteLine(vbCrLf & "Part 2: Start index is specified.")
        For Each sc In  scValues
            loc = cat.LastIndexOf(CapitalAWithRing, cat.Length - 1, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion.
        Console.WriteLine(vbCrLf & "Part 3: Neither start index nor count is specified.")
        For Each sc In  scValues
            loc = cat.LastIndexOf(CapitalAWithRing, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

    End Sub 'Main
End Class 'Sample

'
'Note: This code example was executed on a console whose user interface
'culture is "en-US" (English-United States).
'
'This code example produces the following results:
'
'Find the last occurrence of a character using different values of StringComparison.
'The current culture is "en-US" - English (United States).
'Search for the string " " in the string "A Cheshire ca°t"
'
'Part 1: Start index and count are specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 2: Start index is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 3: Neither start index nor count is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'

// This code example demonstrates the
// System.String.LastIndexOf(String, ..., StringComparison) methods.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string intro = "Find the last occurrence of a character using different " +
                   "values of StringComparison.";
    string resultFmt = "Comparison: {0,-28} Location: {1,3}";

// Define a string to search for.
// U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
    string CapitalAWithRing = "\u00c5";

// Define a string to search.
// The result of combining the characters LATIN SMALL LETTER A and COMBINING
// RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
// LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
    string cat = "A Cheshire c" + "\u0061\u030a" + "t";
    int loc = 0;
    StringComparison[] scValues = {
        StringComparison.CurrentCulture,
        StringComparison.CurrentCultureIgnoreCase,
        StringComparison.InvariantCulture,
        StringComparison.InvariantCultureIgnoreCase,
        StringComparison.Ordinal,
        StringComparison.OrdinalIgnoreCase };

// Clear the screen and display an introduction.
    Console.Clear();
    Console.WriteLine(intro);

// Display the current culture because culture affects the result. For example,
// try this code example with the "sv-SE" (Swedish-Sweden) culture.

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    Console.WriteLine("The current culture is \"{0}\" - {1}.",
                       Thread.CurrentThread.CurrentCulture.Name,
                       Thread.CurrentThread.CurrentCulture.DisplayName);

// Display the string to search for and the string to search.
    Console.WriteLine("Search for the string \"{0}\" in the string \"{1}\"",
                       CapitalAWithRing, cat);
    Console.WriteLine();

// Note that in each of the following searches, we look for
// LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
// LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
// the string was not found.
// Search using different values of StringComparsion. Specify the start
// index and count.

    Console.WriteLine("Part 1: Start index and count are specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.LastIndexOf(CapitalAWithRing, cat.Length-1, cat.Length, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion. Specify the
// start index.
    Console.WriteLine("\nPart 2: Start index is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.LastIndexOf(CapitalAWithRing, cat.Length-1, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion.
    Console.WriteLine("\nPart 3: Neither start index nor count is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.LastIndexOf(CapitalAWithRing, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }
    }
}

/*
Note: This code example was executed on a console whose user interface
culture is "en-US" (English-United States).

This code example produces the following results:

Find the last occurrence of a character using different values of StringComparison.
The current culture is "en-US" - English (United States).
Search for the string " " in the string "A Cheshire ca°t"

Part 1: Start index and count are specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 2: Start index is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 3: Neither start index nor count is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOf 重载
System 命名空间


String ..::.LastIndexOf 方法 (Char, Int32, Int32)

String
.
.
::
.
LastIndexOf 方法 (Char, Int32, Int32)
String 类

报告指定的 Unicode 字符在此实例内的子字符串中的最后一个匹配项的索引位置。搜索从指定字符位置开始，并检查指定数量的字符位置。 报告指定的 Unicode 字符在此实例内的子字符串中的最后一个匹配项的索引位置。搜索从指定字符位置开始，并检查指定数量的字符位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOf ( _
    value As Char, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public int LastIndexOf(
    char value,
    int startIndex,
    int count
)
public:
int LastIndexOf(
    wchar_t value,
    int startIndex,
    int count
)
member LastIndexOf :
        value:char *
        startIndex:int *
        count:int -> int

参数

value
类型： System Char
要查找的 Unicode 字符。
startIndex
类型： System Int32
此实例内子字符串的起始位置。
count
类型： System Int32
要检查的字符位置数。

返回值

类型： System Int32
如果找到该字符，则为 value 的从零开始的索引位置；如果未找到，则为 -1。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零，或大于等于此实例的长度。 - 或 - startIndex + 1 - count 小于零。

索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。

此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或检查完 count 个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将从字符串中最后一个字符开始反向搜索 count 个字符。该搜索区分大小写。 此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或检查完 count 个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将从字符串中最后一个字符开始反向搜索 count 个字符。该搜索区分大小写。 此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或检查完 count 个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将从字符串中最后一个字符开始反向搜索 count 个字符。该搜索区分大小写。

此方法执行顺序（不区分区域性）搜索，即，仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即，仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例从某个子字符串的末尾到开头查找该子字符串中某一字符的所有匹配项的索引。

' Sample for String.LastIndexOf(Char, Int32, Int32)
Imports System
 _

Class Sample

   Public Shared Sub Main()

      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer
      Dim count As Integer
      Dim [end] As Integer

      start = str.Length - 1
      [end] = start / 2 - 1
      Console.WriteLine("All occurrences of 't' from position {0} to {1}.", start, [end])
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("The letter 't' occurs at position(s): ")

      count = 0
      at = 0
      While start > - 1 And at > - 1
         count = start - [end] 'Count must be within the substring.
         at = str.LastIndexOf("t"c, start, count)
         If at > - 1 Then
            Console.Write("{0} ", at)
            start = at - 1
         End If
      End While
      Console.Write("{0}{0}{0}", Environment.NewLine)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'All occurrences of 't' from position 66 to 32.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'The letter 't' occurs at position(s): 64 55 44 41 33
'
'

// Sample for String.LastIndexOf(Char, Int32, Int32)
using System;

class Sample {
    public static void Main() {

    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;
    int count;
    int end;

    start = str.Length-1;
    end = start/2 - 1;
    Console.WriteLine("All occurrences of 't' from position {0} to {1}.", start, end);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("The letter 't' occurs at position(s): ");

    count = 0;
    at = 0;
    while((start > -1) && (at > -1))
        {
        count = start - end; //Count must be within the substring.
        at = str.LastIndexOf('t', start, count);
        if (at > -1)
            {
            Console.Write("{0} ", at);
            start = at - 1;
            }
        }
    Console.Write("{0}{0}{0}", Environment.NewLine);
    }
}
/*
This example produces the following results:
All occurrences of 't' from position 66 to 32.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The letter 't' occurs at position(s): 64 55 44 41 33

*/

// Sample for String::LastIndexOf(Char, Int32, Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   int count;
   int end;
   start = str->Length - 1;
   end = start / 2 - 1;
   Console::WriteLine( "All occurrences of 't' from position {0} to {1}.", start, end );
   Console::WriteLine( "\n{0}\n{1}\n{2}", br1, br2, str );
   Console::Write( "The letter 't' occurs at position(s): " );
   count = 0;
   at = 0;
   while ( (start > -1) && (at > -1) )
   {
      count = start - end; //Count must be within the substring.
      at = str->LastIndexOf( 't', start, count );
      if ( at > -1 )
      {
         Console::Write( " {0} ", at );
         start = at - 1;
      }
   }
}

/*
This example produces the following results:
All occurrences of 't' from position 66 to 32.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The letter 't' occurs at position(s): 64 55 44 41 33

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOf 重载
System 命名空间
Char
Int32
IndexOf
IndexOfAny
LastIndexOfAny


String ..::.LastIndexOf 方法 (String, Int32, Int32)

String
.
.
::
.
LastIndexOf 方法 (String, Int32, Int32)
String 类

报告指定字符串在此实例中的最后一个匹配项的索引位置。搜索从指定字符位置开始，并检查指定数量的字符位置。 报告指定字符串在此实例中的最后一个匹配项的索引位置。搜索从指定字符位置开始，并检查指定数量的字符位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOf ( _
    value As String, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public int LastIndexOf(
    string value,
    int startIndex,
    int count
)
public:
int LastIndexOf(
    String^ value,
    int startIndex,
    int count
)
member LastIndexOf :
        value:string *
        startIndex:int *
        count:int -> int

参数

value
类型： System String
要搜寻的字符串。
startIndex
类型： System Int32
搜索起始位置。
count
类型： System Int32
要检查的字符位置数。

返回值

类型： System Int32
如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 Empty，则返回值为 startIndex。 如果找到该字符串，则为 value 的从零开始的索引位置；如果未找到该字符串，则为 -1。如果 value 为 Empty，则返回值为 startIndex。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | count 或 startIndex 为负。 - 或 - startIndex 大于此实例的长度。 - 或 - startIndex + 1 - count 指定的位置不在此实例中。

索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。

搜索从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或已检查了 count 个字符位置。例如，如果 startIndex 为 Length - 1，则该方法将从字符串中最后一个字符开始反向搜索 count 个字符。 搜索从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 value 或已检查了 count 个字符位置。例如，如果 startIndex 为 Length - 1，则该方法将从字符串中最后一个字符开始反向搜索 count 个字符。

此方法使用当前区域性执行单词（区分大小写和区域性）搜索。

对调用者的说明

如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则执行此操作，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值来调用 LastIndexOf(String, Int32, Int32, StringComparison) 方法重载。 如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的比较规则执行此操作，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值来调用 LastIndexOf(String, Int32, Int32, StringComparison) 方法重载。

下面的示例从某个子字符串的末尾到开头查找该子字符串中某个字符串的所有匹配项的索引。

' Sample for String.LastIndexOf(String, Int32, Int32)
Imports System
 _

Class Sample

   Public Shared Sub Main()

      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer
      Dim count As Integer
      Dim [end] As Integer

      start = str.Length - 1
      [end] = start / 2 - 1
      Console.WriteLine("All occurrences of 'he' from position {0} to {1}.", start, [end])
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("The string 'he' occurs at position(s): ")

      count = 0
      at = 0
      While start > - 1 And at > - 1
         count = start - [end] 'Count must be within the substring.
         at = str.LastIndexOf("he", start, count)
         If at > - 1 Then
            Console.Write("{0} ", at)
            start = at - 1
         End If
      End While
      Console.Write("{0}{0}{0}", Environment.NewLine)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'All occurrences of 'he' from position 66 to 32.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'The string 'he' occurs at position(s): 56 45
'
'

// Sample for String.LastIndexOf(String, Int32, Int32)
using System;

class Sample {
    public static void Main() {

    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;
    int count;
    int end;

    start = str.Length-1;
    end = start/2 - 1;
    Console.WriteLine("All occurrences of 'he' from position {0} to {1}.", start, end);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("The string 'he' occurs at position(s): ");

    count = 0;
    at = 0;
    while((start > -1) && (at > -1))
        {
        count = start - end; //Count must be within the substring.
        at = str.LastIndexOf("he", start, count);
        if (at > -1)
            {
            Console.Write("{0} ", at);
            start = at - 1;
            }
        }
    Console.Write("{0}{0}{0}", Environment.NewLine);
    }
}
/*
This example produces the following results:
All occurrences of 'he' from position 66 to 32.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The string 'he' occurs at position(s): 56 45
*/

// Sample for String::LastIndexOf(String, Int32, Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   int count;
   int end;
   start = str->Length - 1;
   end = start / 2 - 1;
   Console::WriteLine( "All occurrences of 'he' from position {0} to {1}.", start, end );
   Console::WriteLine( "{1}{0}{2}{0}{3}{0}", Environment::NewLine, br1, br2, str );
   Console::Write( "The string 'he' occurs at position(s): " );
   count = 0;
   at = 0;
   while ( (start > -1) && (at > -1) )
   {
      count = start - end; //Count must be within the substring.
      at = str->LastIndexOf( "he", start, count );
      if ( at > -1 )
      {
         Console::Write( "{0} ", at );
         start = at - 1;
      }
   }

   Console::Write( "{0} {0} {0}", Environment::NewLine );
}

/*
This example produces the following results:
All occurrences of 'he' from position 66 to 32.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

The string 'he' occurs at position(s): 56 45
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOf 重载
System 命名空间
Int32
IndexOf
IndexOfAny
LastIndexOfAny


String ..::.LastIndexOf 方法 (String, Int32, StringComparison)

String
.
.
::
.
LastIndexOf 方法 (String, Int32, StringComparison)
String 类

报告指定字符串在当前 String 对象中最后一个匹配项的索引。参数指定当前字符串中的起始搜索位置，以及要用于指定字符串的搜索类型。 报告指定字符串在当前 String 对象中最后一个匹配项的索引。参数指定当前字符串中的起始搜索位置，以及要用于指定字符串的搜索类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOf ( _
    value As String, _
    startIndex As Integer, _
    comparisonType As StringComparison _
) As Integer
public int LastIndexOf(
    string value,
    int startIndex,
    StringComparison comparisonType
)
public:
int LastIndexOf(
    String^ value,
    int startIndex,
    StringComparison comparisonType
)
member LastIndexOf :
        value:string *
        startIndex:int *
        comparisonType:StringComparison -> int

参数

value
类型： System String
要搜寻的字符串。
startIndex
类型： System Int32
搜索起始位置。
comparisonType
类型： System StringComparison
指定搜索规则的枚举值之一。

返回值

类型： System Int32
如果找到该字符串，则为 value 参数的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。 如果找到该字符串，则为 value 参数的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 小于零，或指定的位置不在此实例中。
ArgumentException | comparisonType 不是有效的 System..::.StringComparison 值。

索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。

搜索从 startIndex 字符位置开始，沿反向进行，直至找到 value 或检查完第一个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将搜索从字符串中最后一个字符到开头的所有字符。 搜索从 startIndex 字符位置开始，沿反向进行，直至找到 value 或检查完第一个字符位置为止。例如，如果 startIndex 为 Length - 1，则该方法将搜索从字符串中最后一个字符到开头的所有字符。

comparisonType 参数指定使用当前区域性还是固定区域性、使用区分大小写的搜索还是不区分大小写的搜索、以及使用字比较规则还是序号比较规则来搜索 value 参数。

下面的示例演示 LastIndexOf 方法的三个重载，该方法使用 StringComparison 枚举的不同值在另一个字符串内查找某个字符串的最后一个匹配项。

' This code example demonstrates the
' System.String.LastIndexOf(String, ..., StringComparison) methods.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim intro As String = "Find the last occurrence of a character using different " & _
                              "values of StringComparison."
        Dim resultFmt As String = "Comparison: {0,-28} Location: {1,3}"

        ' Define a string to search for.
        ' U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
        Dim CapitalAWithRing As String = " "

        ' Define a string to search.
        ' The result of combining the characters LATIN SMALL LETTER A and COMBINING
        ' RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
        ' LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
        Dim cat As String = "A Cheshire c" & "a " & "t"
        Dim loc As Integer = 0
        Dim scValues As StringComparison() =  { _
                        StringComparison.CurrentCulture, _
                        StringComparison.CurrentCultureIgnoreCase, _
                        StringComparison.InvariantCulture, _
                        StringComparison.InvariantCultureIgnoreCase, _
                        StringComparison.Ordinal, _
                        StringComparison.OrdinalIgnoreCase }
        Dim sc As StringComparison

        ' Clear the screen and display an introduction.
        Console.Clear()
        Console.WriteLine(intro)

        ' Display the current culture because culture affects the result. For example,
        ' try this code example with the "sv-SE" (Swedish-Sweden) culture.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
        Console.WriteLine("The current culture is ""{0}"" - {1}.", _
                           Thread.CurrentThread.CurrentCulture.Name, _
                           Thread.CurrentThread.CurrentCulture.DisplayName)

        ' Display the string to search for and the string to search.
        Console.WriteLine("Search for the string ""{0}"" in the string ""{1}""", _
                           CapitalAWithRing, cat)
        Console.WriteLine()

        ' Note that in each of the following searches, we look for
        ' LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
        ' LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
        ' the string was not found.
        ' Search using different values of StringComparsion. Specify the start
        ' index and count.
        Console.WriteLine("Part 1: Start index and count are specified.")
        For Each sc In  scValues
            loc = cat.LastIndexOf(CapitalAWithRing, cat.Length - 1, cat.Length, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion. Specify the
        ' start index.
        Console.WriteLine(vbCrLf & "Part 2: Start index is specified.")
        For Each sc In  scValues
            loc = cat.LastIndexOf(CapitalAWithRing, cat.Length - 1, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion.
        Console.WriteLine(vbCrLf & "Part 3: Neither start index nor count is specified.")
        For Each sc In  scValues
            loc = cat.LastIndexOf(CapitalAWithRing, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

    End Sub 'Main
End Class 'Sample

'
'Note: This code example was executed on a console whose user interface
'culture is "en-US" (English-United States).
'
'This code example produces the following results:
'
'Find the last occurrence of a character using different values of StringComparison.
'The current culture is "en-US" - English (United States).
'Search for the string " " in the string "A Cheshire ca°t"
'
'Part 1: Start index and count are specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 2: Start index is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 3: Neither start index nor count is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'

// This code example demonstrates the
// System.String.LastIndexOf(String, ..., StringComparison) methods.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string intro = "Find the last occurrence of a character using different " +
                   "values of StringComparison.";
    string resultFmt = "Comparison: {0,-28} Location: {1,3}";

// Define a string to search for.
// U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
    string CapitalAWithRing = "\u00c5";

// Define a string to search.
// The result of combining the characters LATIN SMALL LETTER A and COMBINING
// RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
// LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
    string cat = "A Cheshire c" + "\u0061\u030a" + "t";
    int loc = 0;
    StringComparison[] scValues = {
        StringComparison.CurrentCulture,
        StringComparison.CurrentCultureIgnoreCase,
        StringComparison.InvariantCulture,
        StringComparison.InvariantCultureIgnoreCase,
        StringComparison.Ordinal,
        StringComparison.OrdinalIgnoreCase };

// Clear the screen and display an introduction.
    Console.Clear();
    Console.WriteLine(intro);

// Display the current culture because culture affects the result. For example,
// try this code example with the "sv-SE" (Swedish-Sweden) culture.

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    Console.WriteLine("The current culture is \"{0}\" - {1}.",
                       Thread.CurrentThread.CurrentCulture.Name,
                       Thread.CurrentThread.CurrentCulture.DisplayName);

// Display the string to search for and the string to search.
    Console.WriteLine("Search for the string \"{0}\" in the string \"{1}\"",
                       CapitalAWithRing, cat);
    Console.WriteLine();

// Note that in each of the following searches, we look for
// LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
// LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
// the string was not found.
// Search using different values of StringComparsion. Specify the start
// index and count.

    Console.WriteLine("Part 1: Start index and count are specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.LastIndexOf(CapitalAWithRing, cat.Length-1, cat.Length, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion. Specify the
// start index.
    Console.WriteLine("\nPart 2: Start index is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.LastIndexOf(CapitalAWithRing, cat.Length-1, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion.
    Console.WriteLine("\nPart 3: Neither start index nor count is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.LastIndexOf(CapitalAWithRing, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }
    }
}

/*
Note: This code example was executed on a console whose user interface
culture is "en-US" (English-United States).

This code example produces the following results:

Find the last occurrence of a character using different values of StringComparison.
The current culture is "en-US" - English (United States).
Search for the string " " in the string "A Cheshire ca°t"

Part 1: Start index and count are specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 2: Start index is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 3: Neither start index nor count is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOf 重载
System 命名空间


String ..::.LastIndexOf 方法 (String, Int32, Int32, StringComparison)

String
.
.
::
.
LastIndexOf 方法 (String, Int32, Int32, StringComparison)
String 类

报告指定字符串在此实例中的最后一个匹配项的索引位置。参数指定当前字符串中的起始搜索位置、要搜索的当前字符串中的字符数量，以及要用于指定字符串的搜索类型。 报告指定字符串在此实例中的最后一个匹配项的索引位置。参数指定当前字符串中的起始搜索位置、要搜索的当前字符串中的字符数量，以及要用于指定字符串的搜索类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOf ( _
    value As String, _
    startIndex As Integer, _
    count As Integer, _
    comparisonType As StringComparison _
) As Integer
public int LastIndexOf(
    string value,
    int startIndex,
    int count,
    StringComparison comparisonType
)
public:
int LastIndexOf(
    String^ value,
    int startIndex,
    int count,
    StringComparison comparisonType
)
member LastIndexOf :
        value:string *
        startIndex:int *
        count:int *
        comparisonType:StringComparison -> int

参数

value
类型： System String
要搜寻的字符串。
startIndex
类型： System Int32
搜索起始位置。
count
类型： System Int32
要检查的字符位置数。
comparisonType
类型： System StringComparison
指定搜索规则的枚举值之一。

返回值

类型： System Int32
如果找到该字符串，则为 value 参数的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。 如果找到该字符串，则为 value 参数的索引位置；如果未找到该字符串，则为 -1。如果 value 为 String..::.Empty，则返回值为 startIndex。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | count 或 startIndex 为负。 - 或 - startIndex 大于此实例的长度。 - 或 - startIndex + 1 - count 指定的位置不在此实例中。
ArgumentException | comparisonType 不是有效的 System..::.StringComparison 值。

索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。 索引编号从零开始。也就是说，字符串中第一个字符的位置为索引 0，而最后一个字符的位置为 Length - 1。

搜索从 startIndex 字符位置开始，沿反向进行，直至找到 value 或已检查了 count 个字符位置。例如，如果 startIndex 为 Length - 1，则该方法将从字符串中最后一个字符开始反向搜索 count 个字符。 搜索从 startIndex 字符位置开始，沿反向进行，直至找到 value 或已检查了 count 个字符位置。例如，如果 startIndex 为 Length - 1，则该方法将从字符串中最后一个字符开始反向搜索 count 个字符。

comparisonType 参数指定使用当前区域性还是固定区域性、使用区分大小写的搜索还是不区分大小写的搜索、以及使用字比较规则还是序号比较规则来搜索 value 参数。

下面的示例演示 LastIndexOf 方法的三个重载，该方法使用 StringComparison 枚举的不同值在另一个字符串内查找某个字符串的最后一个匹配项。

' This code example demonstrates the
' System.String.LastIndexOf(String, ..., StringComparison) methods.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim intro As String = "Find the last occurrence of a character using different " & _
                              "values of StringComparison."
        Dim resultFmt As String = "Comparison: {0,-28} Location: {1,3}"

        ' Define a string to search for.
        ' U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
        Dim CapitalAWithRing As String = " "

        ' Define a string to search.
        ' The result of combining the characters LATIN SMALL LETTER A and COMBINING
        ' RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
        ' LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
        Dim cat As String = "A Cheshire c" & "a " & "t"
        Dim loc As Integer = 0
        Dim scValues As StringComparison() =  { _
                        StringComparison.CurrentCulture, _
                        StringComparison.CurrentCultureIgnoreCase, _
                        StringComparison.InvariantCulture, _
                        StringComparison.InvariantCultureIgnoreCase, _
                        StringComparison.Ordinal, _
                        StringComparison.OrdinalIgnoreCase }
        Dim sc As StringComparison

        ' Clear the screen and display an introduction.
        Console.Clear()
        Console.WriteLine(intro)

        ' Display the current culture because culture affects the result. For example,
        ' try this code example with the "sv-SE" (Swedish-Sweden) culture.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
        Console.WriteLine("The current culture is ""{0}"" - {1}.", _
                           Thread.CurrentThread.CurrentCulture.Name, _
                           Thread.CurrentThread.CurrentCulture.DisplayName)

        ' Display the string to search for and the string to search.
        Console.WriteLine("Search for the string ""{0}"" in the string ""{1}""", _
                           CapitalAWithRing, cat)
        Console.WriteLine()

        ' Note that in each of the following searches, we look for
        ' LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
        ' LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
        ' the string was not found.
        ' Search using different values of StringComparsion. Specify the start
        ' index and count.
        Console.WriteLine("Part 1: Start index and count are specified.")
        For Each sc In  scValues
            loc = cat.LastIndexOf(CapitalAWithRing, cat.Length - 1, cat.Length, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion. Specify the
        ' start index.
        Console.WriteLine(vbCrLf & "Part 2: Start index is specified.")
        For Each sc In  scValues
            loc = cat.LastIndexOf(CapitalAWithRing, cat.Length - 1, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

        ' Search using different values of StringComparsion.
        Console.WriteLine(vbCrLf & "Part 3: Neither start index nor count is specified.")
        For Each sc In  scValues
            loc = cat.LastIndexOf(CapitalAWithRing, sc)
            Console.WriteLine(resultFmt, sc, loc)
        Next sc

    End Sub 'Main
End Class 'Sample

'
'Note: This code example was executed on a console whose user interface
'culture is "en-US" (English-United States).
'
'This code example produces the following results:
'
'Find the last occurrence of a character using different values of StringComparison.
'The current culture is "en-US" - English (United States).
'Search for the string " " in the string "A Cheshire ca°t"
'
'Part 1: Start index and count are specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 2: Start index is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'
'Part 3: Neither start index nor count is specified.
'Comparison: CurrentCulture               Location:  -1
'Comparison: CurrentCultureIgnoreCase     Location:  12
'Comparison: InvariantCulture             Location:  -1
'Comparison: InvariantCultureIgnoreCase   Location:  12
'Comparison: Ordinal                      Location:  -1
'Comparison: OrdinalIgnoreCase            Location:  -1
'

// This code example demonstrates the
// System.String.LastIndexOf(String, ..., StringComparison) methods.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string intro = "Find the last occurrence of a character using different " +
                   "values of StringComparison.";
    string resultFmt = "Comparison: {0,-28} Location: {1,3}";

// Define a string to search for.
// U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
    string CapitalAWithRing = "\u00c5";

// Define a string to search.
// The result of combining the characters LATIN SMALL LETTER A and COMBINING
// RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
// LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
    string cat = "A Cheshire c" + "\u0061\u030a" + "t";
    int loc = 0;
    StringComparison[] scValues = {
        StringComparison.CurrentCulture,
        StringComparison.CurrentCultureIgnoreCase,
        StringComparison.InvariantCulture,
        StringComparison.InvariantCultureIgnoreCase,
        StringComparison.Ordinal,
        StringComparison.OrdinalIgnoreCase };

// Clear the screen and display an introduction.
    Console.Clear();
    Console.WriteLine(intro);

// Display the current culture because culture affects the result. For example,
// try this code example with the "sv-SE" (Swedish-Sweden) culture.

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    Console.WriteLine("The current culture is \"{0}\" - {1}.",
                       Thread.CurrentThread.CurrentCulture.Name,
                       Thread.CurrentThread.CurrentCulture.DisplayName);

// Display the string to search for and the string to search.
    Console.WriteLine("Search for the string \"{0}\" in the string \"{1}\"",
                       CapitalAWithRing, cat);
    Console.WriteLine();

// Note that in each of the following searches, we look for
// LATIN CAPITAL LETTER A WITH RING ABOVE in a string that contains
// LATIN SMALL LETTER A WITH RING ABOVE. A result value of -1 indicates
// the string was not found.
// Search using different values of StringComparsion. Specify the start
// index and count.

    Console.WriteLine("Part 1: Start index and count are specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.LastIndexOf(CapitalAWithRing, cat.Length-1, cat.Length, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion. Specify the
// start index.
    Console.WriteLine("\nPart 2: Start index is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.LastIndexOf(CapitalAWithRing, cat.Length-1, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }

// Search using different values of StringComparsion.
    Console.WriteLine("\nPart 3: Neither start index nor count is specified.");
    foreach (StringComparison sc in scValues)
        {
        loc = cat.LastIndexOf(CapitalAWithRing, sc);
        Console.WriteLine(resultFmt, sc, loc);
        }
    }
}

/*
Note: This code example was executed on a console whose user interface
culture is "en-US" (English-United States).

This code example produces the following results:

Find the last occurrence of a character using different values of StringComparison.
The current culture is "en-US" - English (United States).
Search for the string " " in the string "A Cheshire ca°t"

Part 1: Start index and count are specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 2: Start index is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

Part 3: Neither start index nor count is specified.
Comparison: CurrentCulture               Location:  -1
Comparison: CurrentCultureIgnoreCase     Location:  12
Comparison: InvariantCulture             Location:  -1
Comparison: InvariantCultureIgnoreCase   Location:  12
Comparison: Ordinal                      Location:  -1
Comparison: OrdinalIgnoreCase            Location:  -1

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOf 重载
System 命名空间


String ..::.LastIndexOfAny 方法

String
.
.
::
.
LastIndexOfAny 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

报告在 Unicode 数组中指定的一个或多个字符在此实例中的最后一个匹配项的索引位置。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.LastIndexOfAny 方法 ( array<Char >[]()[])

String
.
.
::
.
LastIndexOfAny 方法 (
array<
Char
>
[]
()
[]
)
String 类

报告在 Unicode 数组中指定的一个或多个字符在此实例中的最后一个匹配项的索引位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOfAny ( _
    anyOf As Char() _
) As Integer
public int LastIndexOfAny(
    char[] anyOf
)
public:
int LastIndexOfAny(
    array<wchar_t>^ anyOf
)
member LastIndexOfAny :
        anyOf:char[] -> int

参数

anyOf
类型：
array<
System Char
>
[]
()
[]

Unicode 字符数组，包含一个或多个要查找的字符。

返回值

类型： System Int32
最后一次在此实例中找到 anyOf 中的任意字符的索引位置；如果未找到 anyOf 中的字符，则为 -1。
异常 | 条件
ArgumentNullException | anyOf 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

索引编号从零开始。

此方法从该实例的最后一个字符位置开始，沿反向向前搜索，直到找到 anyOf 中的字符或检查完第一个字符位置为止。该搜索区分大小写。 此方法从该实例的最后一个字符位置开始，沿反向向前搜索，直到找到 anyOf 中的字符或检查完第一个字符位置为止。该搜索区分大小写。

此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例查找字符串“is”的任意字符在另一个字符串中的最后一个匹配项的索引。

' Sample for String.LastIndexOfAny(Char[])
Imports System
 _

Class Sample

   Public Shared Sub Main()

      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer
      Dim target As String = "is"
      Dim anyOf As Char() = target.ToCharArray()

      start = str.Length - 1
      Console.WriteLine("The last character occurrence  from position {0} to 0.", start)
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("A character in '{0}' occurs at position: ", target)

      at = str.LastIndexOfAny(anyOf)
      If at > - 1 Then
         Console.Write(at)
      Else
         Console.Write("(not found)")
      End If
      Console.Write("{0}{0}{0}", Environment.NewLine)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'The last character occurrence  from position 66 to 0.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'A character in 'is' occurs at position: 58
'
'
'

// Sample for String.LastIndexOfAny(Char[])
using System;

class Sample {
    public static void Main() {

    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;
    string target = "is";
    char[] anyOf = target.ToCharArray();

    start = str.Length-1;
    Console.WriteLine("The last character occurrence  from position {0} to 0.", start);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("A character in '{0}' occurs at position: ", target);

    at = str.LastIndexOfAny(anyOf);
    if (at > -1)
        Console.Write(at);
    else
        Console.Write("(not found)");
    Console.Write("{0}{0}{0}", Environment.NewLine);
    }
}
/*
This example produces the following results:
The last character occurrence  from position 66 to 0.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'is' occurs at position: 58

*/

// Sample for String::LastIndexOfAny(Char[])
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   String^ target = "is";
   array<Char>^anyOf = target->ToCharArray();
   start = str->Length - 1;
   Console::WriteLine( "The last character occurrence  from position {0} to 0.", start );
   Console::WriteLine( "{1}{0}{2}{0}{3}{0}", Environment::NewLine, br1, br2, str );
   Console::Write( "A character in '{0}' occurs at position: ", target );
   at = str->LastIndexOfAny( anyOf );
   if ( at > -1 )
      Console::Write( at );
   else
      Console::Write( "(not found)" );

   Console::Write( "{0}{0}{0}", Environment::NewLine );
}

/*
This example produces the following results:
The last character occurrence  from position 66 to 0.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'is' occurs at position: 58

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOfAny 重载
System 命名空间
Char
Int32
Array
IndexOf
IndexOfAny
LastIndexOf


String ..::.LastIndexOfAny 方法 ( array<Char >[]()[], Int32)

String
.
.
::
.
LastIndexOfAny 方法 (
array<
Char
>
[]
()
[]
, Int32)
String 类

报告在 Unicode 数组中指定的一个或多个字符在此实例中的最后一个匹配项的索引位置。该搜索从指定字符位置开始。 报告在 Unicode 数组中指定的一个或多个字符在此实例中的最后一个匹配项的索引位置。该搜索从指定字符位置开始。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOfAny ( _
    anyOf As Char(), _
    startIndex As Integer _
) As Integer
public int LastIndexOfAny(
    char[] anyOf,
    int startIndex
)
public:
int LastIndexOfAny(
    array<wchar_t>^ anyOf,
    int startIndex
)
member LastIndexOfAny :
        anyOf:char[] *
        startIndex:int -> int

参数

anyOf
类型：
array<
System Char
>
[]
()
[]

Unicode 字符数组，包含一个或多个要查找的字符。
startIndex
类型： System Int32
搜索起始位置。

返回值

类型： System Int32
最后一次在此实例中找到 anyOf 中的任意字符的索引位置；如果未找到 anyOf 中的字符，则为 -1。
异常 | 条件
ArgumentNullException | anyOf 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | startIndex 指定的位置不在此实例中。

索引编号从零开始。

此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 anyOf 中的字符或检查完第一个字符位置为止。该搜索区分大小写。 此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 anyOf 中的字符或检查完第一个字符位置为止。该搜索区分大小写。

此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例查找字符串“is”的任意字符在另一个字符串的子字符串中的最后一个匹配项的索引。

' Sample for String.LastIndexOfAny(Char[], Int32)
Imports System
 _

Class Sample

   Public Shared Sub Main()

      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer
      Dim target As String = "is"
      Dim anyOf As Char() = target.ToCharArray()

      start =(str.Length - 1) / 2
      Console.WriteLine("The last character occurrence  from position {0} to 0.", start)
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("A character in '{0}' occurs at position: ", target)

      at = str.LastIndexOfAny(anyOf, start)
      If at > - 1 Then
         Console.Write(at)
      Else
         Console.Write("(not found)")
      End If
      Console.Write("{0}{0}{0}", Environment.NewLine)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'The last character occurrence  from position 33 to 0.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'A character in 'is' occurs at position: 12
'
'
'

// Sample for String.LastIndexOfAny(Char[], Int32)
using System;

class Sample {
    public static void Main() {

    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;
    string target = "is";
    char[] anyOf = target.ToCharArray();

    start = (str.Length-1)/2;
    Console.WriteLine("The last character occurrence  from position {0} to 0.", start);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("A character in '{0}' occurs at position: ", target);

    at = str.LastIndexOfAny(anyOf, start);
    if (at > -1)
        Console.Write(at);
    else
        Console.Write("(not found)");
    Console.Write("{0}{0}{0}", Environment.NewLine);
    }
}
/*
This example produces the following results:
The last character occurrence  from position 33 to 0.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'is' occurs at position: 12

*/

// Sample for String::LastIndexOfAny(Char, Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   String^ target = "is";
   array<Char>^anyOf = target->ToCharArray();
   start = (str->Length - 1) / 2;
   Console::WriteLine( "The last character occurrence  from position {0} to 0.", start );
   Console::WriteLine( "{1}{0}{2}{0}{3}{0}", Environment::NewLine, br1, br2, str );
   Console::Write( "A character in '{0}' occurs at position: ", target );
   at = str->LastIndexOfAny( anyOf, start );
   if ( at > -1 )
      Console::Write( at );
   else
      Console::Write( "(not found)" );

   Console::Write( "{0}{0}{0}", Environment::NewLine );
}

/*
This example produces the following results:
The last character occurrence  from position 33 to 0.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'is' occurs at position: 12

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOfAny 重载
System 命名空间
Char
Int32
Array
IndexOf
IndexOfAny
LastIndexOf


String ..::.LastIndexOfAny 方法 ( array<Char >[]()[], Int32, Int32)

String
.
.
::
.
LastIndexOfAny 方法 (
array<
Char
>
[]
()
[]
, Int32, Int32)
String 类

报告在 Unicode 数组中指定的一个或多个字符在此实例中的最后一个匹配项的索引位置。搜索从指定字符位置开始，并检查指定数量的字符位置。 报告在 Unicode 数组中指定的一个或多个字符在此实例中的最后一个匹配项的索引位置。搜索从指定字符位置开始，并检查指定数量的字符位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function LastIndexOfAny ( _
    anyOf As Char(), _
    startIndex As Integer, _
    count As Integer _
) As Integer
public int LastIndexOfAny(
    char[] anyOf,
    int startIndex,
    int count
)
public:
int LastIndexOfAny(
    array<wchar_t>^ anyOf,
    int startIndex,
    int count
)
member LastIndexOfAny :
        anyOf:char[] *
        startIndex:int *
        count:int -> int

参数

anyOf
类型：
array<
System Char
>
[]
()
[]

Unicode 字符数组，包含一个或多个要查找的字符。
startIndex
类型： System Int32
搜索起始位置。
count
类型： System Int32
要检查的字符位置数。

返回值

类型： System Int32
最后一次在此实例中找到 anyOf 中的任意字符的索引位置；如果未找到 anyOf 中的字符，则为 -1。
异常 | 条件
ArgumentNullException | anyOf 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | count 或 startIndex 为负。 - 或 - startIndex 与 count 之差指定的位置不在此实例中。

索引编号从零开始。

此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 anyOf 中的字符或已检查了 count 个字符位置。该搜索区分大小写。 此方法从该实例的 startIndex 字符位置开始，沿反向向前搜索，直到找到 anyOf 中的字符或已检查了 count 个字符位置。该搜索区分大小写。

此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。 此方法执行顺序（不区分区域性）搜索，即仅当 Unicode 标量值相同时两个字符才被视为相等。若要执行区分区域性的搜索，请使用 CompareInfo..::.LastIndexOf 方法，根据所使用的区域性，该方法可能将表示预先构成字符（如连字“ ”(U+00C6)）的 Unicode 标量值视为等同于任何顺序正确的该字符的组成字符，如上述连字可能被视为“AE”（U+0041、U+0045）。

下面的示例查找字符串“aid”的任意字符在另一个字符串的子字符串中的最后一个匹配项的索引。

' Sample for String.LastIndexOfAny(Char[], Int32, Int32)
Imports System
 _

Class Sample

   Public Shared Sub Main()

      Dim br1 As String = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-"
      Dim br2 As String = "0123456789012345678901234567890123456789012345678901234567890123456"
      Dim str As String = "Now is the time for all good men to come to the aid of their party."
      Dim start As Integer
      Dim at As Integer
      Dim count As Integer
      Dim target As String = "aid"
      Dim anyOf As Char() = target.ToCharArray()

      start =(str.Length - 1) * 2 / 3
      count =(str.Length - 1) / 3
      Console.WriteLine("The last character occurrence from position {0} for {1} characters.", start, count)
      Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str)
      Console.Write("A character in '{0}' occurs at position: ", target)

      at = str.LastIndexOfAny(anyOf, start, count)
      If at > - 1 Then
         Console.Write(at)
      Else
         Console.Write("(not found)")
      End If
      Console.Write("{0}{0}{0}", Environment.NewLine)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'The last character occurrence from position 44 for 22 characters.
'0----+----1----+----2----+----3----+----4----+----5----+----6----+-
'0123456789012345678901234567890123456789012345678901234567890123456
'Now is the time for all good men to come to the aid of their party.
'
'A character in 'aid' occurs at position: 27
'

// Sample for String.LastIndexOfAny(Char[], Int32, Int32)
using System;

class Sample {
    public static void Main() {

    string br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
    string br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
    string str = "Now is the time for all good men to come to the aid of their party.";
    int start;
    int at;
    int count;
    string target = "aid";
    char[] anyOf = target.ToCharArray();

    start = ((str.Length-1)*2)/3;
    count = (str.Length-1)/3;
    Console.WriteLine("The last character occurrence from position {0} for {1} characters.", start, count);
    Console.WriteLine("{1}{0}{2}{0}{3}{0}", Environment.NewLine, br1, br2, str);
    Console.Write("A character in '{0}' occurs at position: ", target);

    at = str.LastIndexOfAny(anyOf, start, count);
    if (at > -1)
        Console.Write(at);
    else
        Console.Write("(not found)");
    Console.Write("{0}{0}{0}", Environment.NewLine);
    }
}
/*
This example produces the following results:
The last character occurrence from position 44 for 22 characters.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'aid' occurs at position: 27
*/

// Sample for String::LastIndexOfAny(Char[], Int32, Int32)
using namespace System;
int main()
{
   String^ br1 = "0----+----1----+----2----+----3----+----4----+----5----+----6----+-";
   String^ br2 = "0123456789012345678901234567890123456789012345678901234567890123456";
   String^ str = "Now is the time for all good men to come to the aid of their party.";
   int start;
   int at;
   int count;
   String^ target = "aid";
   array<Char>^anyOf = target->ToCharArray();
   start = ((str->Length - 1) * 2) / 3;
   count = (str->Length - 1) / 3;
   Console::WriteLine( "The last character occurrence from position {0} for {1} characters.", start, count );
   Console::WriteLine( "{1}{0}{2}{0}{3}{0}", Environment::NewLine, br1, br2, str );
   Console::Write( "A character in '{0}' occurs at position: ", target );
   at = str->LastIndexOfAny( anyOf, start, count );
   if ( at > -1 )
      Console::Write( at );
   else
      Console::Write( "(not found)" );

   Console::Write( "{0}{0}{0}", Environment::NewLine );
}

/*
This example produces the following results:
The last character occurrence from position 44 for 22 characters.
0----+----1----+----2----+----3----+----4----+----5----+----6----+-
0123456789012345678901234567890123456789012345678901234567890123456
Now is the time for all good men to come to the aid of their party.

A character in 'aid' occurs at position: 27
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
LastIndexOfAny 重载
System 命名空间
Char
Int32
Array
IndexOf
IndexOfAny
LastIndexOf


String ..::.Normalize 方法

String
.
.
::
.
Normalize 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

返回一个新字符串，其二进制表示形式符合特定的 Unicode 范式。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Normalize 方法

String
.
.
::
.
Normalize 方法
String 类

返回一个新字符串，其文本值与此字符串相同，但其二进制表示形式符合 Unicode 范式 C。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Normalize As String
public string Normalize()
public:
String^ Normalize()
member Normalize : unit -> string

返回值

类型： System String
一个新的规范化字符串，其文本值与此字符串相同，但其二进制表示形式符合范式 C。
异常 | 条件
ArgumentException | 当前实例包含无效的 Unicode 字符。

某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。单个字符存在多种表示形式增加了搜索、排序、匹配和其他操作的复杂性。 某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。单个字符存在多种表示形式增加了搜索、排序、匹配和其他操作的复杂性。

Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。 Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。 Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。

有关支持的 Unicode 范式的说明，请参见 System.Text..::.NormalizationForm。

对调用者的说明

一旦在字符串中遇到第一个非规范化字符，IsNormalized 方法将返回 false。因此，如果字符串包含后面跟着无效 Unicode 字符的非标准化字符，Normalize 方法可能引发 ArgumentException，尽管 IsNormalized 会返回 false。 一旦在字符串中遇到第一个非规范化字符，IsNormalized 方法将返回 false。因此，如果字符串包含后面跟着无效 Unicode 字符的非标准化字符，Normalize 方法可能引发 ArgumentException，尽管 IsNormalized 会返回 false。

下面的示例将一个字符串规范化为四种范式的每一种，确认字符串已规范化为指定的范式，然后列出规范化字符串中的码位。

' This example demonstrates the String.Normalize method
'                       and the String.IsNormalized method
Imports System
Imports System.Text
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      ' Character c; combining characters acute and cedilla; character 3/4
      Dim s1 = New [String](New Char() {ChrW(&H0063), ChrW(&H0301), ChrW(&H0327), ChrW(&H00BE)})
      Dim s2 As String = Nothing
      Dim divider = New [String]("-"c, 80)
      divider = [String].Concat(Environment.NewLine, divider, Environment.NewLine)

      Try
         Show("s1", s1)
         Console.WriteLine()
         Console.WriteLine("U+0063 = LATIN SMALL LETTER C")
         Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT")
         Console.WriteLine("U+0327 = COMBINING CEDILLA")
         Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS")

         Console.WriteLine(divider)

         Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}", s1.IsNormalized())
         Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}", s1.IsNormalized(NormalizationForm.FormC))
         Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}", s1.IsNormalized(NormalizationForm.FormD))
         Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}", s1.IsNormalized(NormalizationForm.FormKC))
         Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}", s1.IsNormalized(NormalizationForm.FormKD))

         Console.WriteLine(divider)

         Console.WriteLine("Set string s2 to each normalized form of string s1.")
         Console.WriteLine()
         Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE")
         Console.WriteLine("U+0033 = DIGIT THREE")
         Console.WriteLine("U+2044 = FRACTION SLASH")
         Console.WriteLine("U+0034 = DIGIT FOUR")
         Console.WriteLine(divider)

         s2 = s1.Normalize()
         Console.Write("B1) Is s2 normalized to the default form (Form C)?: ")
         Console.WriteLine(s2.IsNormalized())
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormC)
         Console.Write("B2) Is s2 normalized to Form C?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormD)
         Console.Write("B3) Is s2 normalized to Form D?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormKC)
         Console.Write("B4) Is s2 normalized to Form KC?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormKD)
         Console.Write("B5) Is s2 normalized to Form KD?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD))
         Show("s2", s2)
         Console.WriteLine()

      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'Main

   Private Shared Sub Show(title As String, s As String)
      Console.Write("Characters in string {0} = ", title)
      Dim x As Char
      For Each x In  s.ToCharArray()
         Console.Write("{0:X4} ", AscW(x))
      Next x
      Console.WriteLine()
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'Characters in string s1 = 0063 0301 0327 00BE
'
'U+0063 = LATIN SMALL LETTER C
'U+0301 = COMBINING ACUTE ACCENT
'U+0327 = COMBINING CEDILLA
'U+00BE = VULGAR FRACTION THREE QUARTERS
'
'--------------------------------------------------------------------------------
'
'A1) Is s1 normalized to the default form (Form C)?: False
'A2) Is s1 normalized to Form C?:  False
'A3) Is s1 normalized to Form D?:  False
'A4) Is s1 normalized to Form KC?: False
'A5) Is s1 normalized to Form KD?: False
'
'--------------------------------------------------------------------------------
'
'Set string s2 to each normalized form of string s1.
'
'U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
'U+0033 = DIGIT THREE
'U+2044 = FRACTION SLASH
'U+0034 = DIGIT FOUR
'
'--------------------------------------------------------------------------------
'
'B1) Is s2 normalized to the default form (Form C)?: True
'Characters in string s2 = 1E09 00BE
'
'B2) Is s2 normalized to Form C?: True
'Characters in string s2 = 1E09 00BE
'
'B3) Is s2 normalized to Form D?: True
'Characters in string s2 = 0063 0327 0301 00BE
'
'B4) Is s2 normalized to Form KC?: True
'Characters in string s2 = 1E09 0033 2044 0034
'
'B5) Is s2 normalized to Form KD?: True
'Characters in string s2 = 0063 0327 0301 0033 2044 0034
'

// This example demonstrates the String.Normalize method
//                       and the String.IsNormalized method

using System;
using System.Text;

class Sample
{
    public static void Main()
    {
// Character c; combining characters acute and cedilla; character 3/4
    string s1 = new String( new char[] {'\u0063', '\u0301', '\u0327', '\u00BE'});
    string s2 = null;
    string divider = new String('-', 80);
    divider = String.Concat(Environment.NewLine, divider, Environment.NewLine);

    try
    {
    Show("s1", s1);
    Console.WriteLine();
    Console.WriteLine("U+0063 = LATIN SMALL LETTER C");
    Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT");
    Console.WriteLine("U+0327 = COMBINING CEDILLA");
    Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS");
    Console.WriteLine(divider);

    Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}",
                                 s1.IsNormalized());
    Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}",
                                 s1.IsNormalized(NormalizationForm.FormC));
    Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}",
                                 s1.IsNormalized(NormalizationForm.FormD));
    Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}",
                                 s1.IsNormalized(NormalizationForm.FormKC));
    Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}",
                                 s1.IsNormalized(NormalizationForm.FormKD));

    Console.WriteLine(divider);

    Console.WriteLine("Set string s2 to each normalized form of string s1.");
    Console.WriteLine();
    Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE");
    Console.WriteLine("U+0033 = DIGIT THREE");
    Console.WriteLine("U+2044 = FRACTION SLASH");
    Console.WriteLine("U+0034 = DIGIT FOUR");
    Console.WriteLine(divider);

    s2 = s1.Normalize();
    Console.Write("B1) Is s2 normalized to the default form (Form C)?: ");
    Console.WriteLine(s2.IsNormalized());
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormC);
    Console.Write("B2) Is s2 normalized to Form C?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormD);
    Console.Write("B3) Is s2 normalized to Form D?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormKC);
    Console.Write("B4) Is s2 normalized to Form KC?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormKD);
    Console.Write("B5) Is s2 normalized to Form KD?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD));
    Show("s2", s2);
    Console.WriteLine();
    }

    catch (Exception e)
        {
        Console.WriteLine(e.Message);
        }
    }

    private static void Show(string title, string s)
    {
    Console.Write("Characters in string {0} = ", title);
    foreach(short x in s.ToCharArray())
        {
        Console.Write("{0:X4} ", x);
        }
    Console.WriteLine();
    }
}
/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

// This example demonstrates the String.Normalize method
//                       and the String.IsNormalized method
using namespace System;
using namespace System::Text;
void Show( String^ title, String^ s )
{
   Console::Write( "Characters in string {0} = ", title );
   System::Collections::IEnumerator^ myEnum = s->ToCharArray()->GetEnumerator();
   while ( myEnum->MoveNext() )
   {

      /*) * __try_cast < Char * > ( myEnum -> Current );*/
      int x;
      Console::Write( "{0:X4} ", x );
   }

   Console::WriteLine();
}

int main()
{

   // Character c; combining characters acute and cedilla; character 3/4
   array<Char>^temp0 = {L'c',L'\u0301',L'\u0327',L'\u00BE'};
   String^ s1 = gcnew String( temp0 );
   String^ s2 = nullptr;
   String^ divider = gcnew String( '-',80 );
   divider = String::Concat( Environment::NewLine, divider, Environment::NewLine );
   try
   {
      Show( "s1", s1 );
      Console::WriteLine();
      Console::WriteLine( "U+0063 = LATIN SMALL LETTER C" );
      Console::WriteLine( "U+0301 = COMBINING ACUTE ACCENT" );
      Console::WriteLine( "U+0327 = COMBINING CEDILLA" );
      Console::WriteLine( "U+00BE = VULGAR FRACTION THREE QUARTERS" );
      Console::WriteLine( divider );
      Console::WriteLine( "A1) Is s1 normalized to the default form (Form C)?: {0}", s1->IsNormalized() );
      Console::WriteLine( "A2) Is s1 normalized to Form C?:  {0}", s1->IsNormalized( NormalizationForm::FormC ) );
      Console::WriteLine( "A3) Is s1 normalized to Form D?:  {0}", s1->IsNormalized( NormalizationForm::FormD ) );
      Console::WriteLine( "A4) Is s1 normalized to Form KC?: {0}", s1->IsNormalized( NormalizationForm::FormKC ) );
      Console::WriteLine( "A5) Is s1 normalized to Form KD?: {0}", s1->IsNormalized( NormalizationForm::FormKD ) );
      Console::WriteLine( divider );
      Console::WriteLine( "Set string s2 to each normalized form of string s1." );
      Console::WriteLine();
      Console::WriteLine( "U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" );
      Console::WriteLine( "U+0033 = DIGIT THREE" );
      Console::WriteLine( "U+2044 = FRACTION SLASH" );
      Console::WriteLine( "U+0034 = DIGIT FOUR" );
      Console::WriteLine( divider );
      s2 = s1->Normalize();
      Console::Write( "B1) Is s2 normalized to the default form (Form C)?: " );
      Console::WriteLine( s2->IsNormalized() );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormC );
      Console::Write( "B2) Is s2 normalized to Form C?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormC ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormD );
      Console::Write( "B3) Is s2 normalized to Form D?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormD ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormKC );
      Console::Write( "B4) Is s2 normalized to Form KC?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormKC ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormKD );
      Console::Write( "B5) Is s2 normalized to Form KD?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormKD ) );
      Show( "s2", s2 );
      Console::WriteLine();
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Normalize 重载
System 命名空间
IsNormalized


String ..::.Normalize 方法 (NormalizationForm)

String
.
.
::
.
Normalize 方法 (NormalizationForm)
String 类

返回一个新字符串，其文本值与此字符串相同，但其二进制表示形式符合指定的 Unicode 范式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Normalize ( _
    normalizationForm As NormalizationForm _
) As String
public string Normalize(
    NormalizationForm normalizationForm
)
public:
String^ Normalize(
    NormalizationForm normalizationForm
)
member Normalize :
        normalizationForm:NormalizationForm -> string

参数

normalizationForm
类型： System.Text NormalizationForm
一个 Unicode 范式。

返回值

类型： System String
一个新字符串，其文本值与此字符串相同，但其二进制表示形式符合由 normalizationForm 参数指定的范式。
异常 | 条件
ArgumentException | 当前实例包含无效的 Unicode 字符。

某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。单个字符存在多种表示形式增加了搜索、排序、匹配和其他操作的复杂性。 某些 Unicode 字符具有多种等效的二进制表示形式。这些表示形式由组合和/或复合 Unicode 字符集组成。单个字符存在多种表示形式增加了搜索、排序、匹配和其他操作的复杂性。

Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。 Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。 Unicode 标准定义了一个称为规范化的过程，此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化，这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。

有关支持的 Unicode 范式的说明，请参见 System.Text..::.NormalizationForm。

对调用者的说明

一旦在字符串中遇到第一个非规范化字符，IsNormalized 方法将返回 false。因此，如果字符串包含后面跟着无效 Unicode 字符的非标准化字符，Normalize 方法可能引发 ArgumentException，尽管 IsNormalized 会返回 false。 一旦在字符串中遇到第一个非规范化字符，IsNormalized 方法将返回 false。因此，如果字符串包含后面跟着无效 Unicode 字符的非标准化字符，Normalize 方法可能引发 ArgumentException，尽管 IsNormalized 会返回 false。

下面的示例将一个字符串规范化为四种范式的每一种，确认字符串已规范化为指定的范式，然后列出规范化字符串中的码位。

' This example demonstrates the String.Normalize method
'                       and the String.IsNormalized method
Imports System
Imports System.Text
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      ' Character c; combining characters acute and cedilla; character 3/4
      Dim s1 = New [String](New Char() {ChrW(&H0063), ChrW(&H0301), ChrW(&H0327), ChrW(&H00BE)})
      Dim s2 As String = Nothing
      Dim divider = New [String]("-"c, 80)
      divider = [String].Concat(Environment.NewLine, divider, Environment.NewLine)

      Try
         Show("s1", s1)
         Console.WriteLine()
         Console.WriteLine("U+0063 = LATIN SMALL LETTER C")
         Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT")
         Console.WriteLine("U+0327 = COMBINING CEDILLA")
         Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS")

         Console.WriteLine(divider)

         Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}", s1.IsNormalized())
         Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}", s1.IsNormalized(NormalizationForm.FormC))
         Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}", s1.IsNormalized(NormalizationForm.FormD))
         Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}", s1.IsNormalized(NormalizationForm.FormKC))
         Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}", s1.IsNormalized(NormalizationForm.FormKD))

         Console.WriteLine(divider)

         Console.WriteLine("Set string s2 to each normalized form of string s1.")
         Console.WriteLine()
         Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE")
         Console.WriteLine("U+0033 = DIGIT THREE")
         Console.WriteLine("U+2044 = FRACTION SLASH")
         Console.WriteLine("U+0034 = DIGIT FOUR")
         Console.WriteLine(divider)

         s2 = s1.Normalize()
         Console.Write("B1) Is s2 normalized to the default form (Form C)?: ")
         Console.WriteLine(s2.IsNormalized())
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormC)
         Console.Write("B2) Is s2 normalized to Form C?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormD)
         Console.Write("B3) Is s2 normalized to Form D?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormKC)
         Console.Write("B4) Is s2 normalized to Form KC?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC))
         Show("s2", s2)
         Console.WriteLine()

         s2 = s1.Normalize(NormalizationForm.FormKD)
         Console.Write("B5) Is s2 normalized to Form KD?: ")
         Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD))
         Show("s2", s2)
         Console.WriteLine()

      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'Main

   Private Shared Sub Show(title As String, s As String)
      Console.Write("Characters in string {0} = ", title)
      Dim x As Char
      For Each x In  s.ToCharArray()
         Console.Write("{0:X4} ", AscW(x))
      Next x
      Console.WriteLine()
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'Characters in string s1 = 0063 0301 0327 00BE
'
'U+0063 = LATIN SMALL LETTER C
'U+0301 = COMBINING ACUTE ACCENT
'U+0327 = COMBINING CEDILLA
'U+00BE = VULGAR FRACTION THREE QUARTERS
'
'--------------------------------------------------------------------------------
'
'A1) Is s1 normalized to the default form (Form C)?: False
'A2) Is s1 normalized to Form C?:  False
'A3) Is s1 normalized to Form D?:  False
'A4) Is s1 normalized to Form KC?: False
'A5) Is s1 normalized to Form KD?: False
'
'--------------------------------------------------------------------------------
'
'Set string s2 to each normalized form of string s1.
'
'U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
'U+0033 = DIGIT THREE
'U+2044 = FRACTION SLASH
'U+0034 = DIGIT FOUR
'
'--------------------------------------------------------------------------------
'
'B1) Is s2 normalized to the default form (Form C)?: True
'Characters in string s2 = 1E09 00BE
'
'B2) Is s2 normalized to Form C?: True
'Characters in string s2 = 1E09 00BE
'
'B3) Is s2 normalized to Form D?: True
'Characters in string s2 = 0063 0327 0301 00BE
'
'B4) Is s2 normalized to Form KC?: True
'Characters in string s2 = 1E09 0033 2044 0034
'
'B5) Is s2 normalized to Form KD?: True
'Characters in string s2 = 0063 0327 0301 0033 2044 0034
'

// This example demonstrates the String.Normalize method
//                       and the String.IsNormalized method

using System;
using System.Text;

class Sample
{
    public static void Main()
    {
// Character c; combining characters acute and cedilla; character 3/4
    string s1 = new String( new char[] {'\u0063', '\u0301', '\u0327', '\u00BE'});
    string s2 = null;
    string divider = new String('-', 80);
    divider = String.Concat(Environment.NewLine, divider, Environment.NewLine);

    try
    {
    Show("s1", s1);
    Console.WriteLine();
    Console.WriteLine("U+0063 = LATIN SMALL LETTER C");
    Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT");
    Console.WriteLine("U+0327 = COMBINING CEDILLA");
    Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS");
    Console.WriteLine(divider);

    Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}",
                                 s1.IsNormalized());
    Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}",
                                 s1.IsNormalized(NormalizationForm.FormC));
    Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}",
                                 s1.IsNormalized(NormalizationForm.FormD));
    Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}",
                                 s1.IsNormalized(NormalizationForm.FormKC));
    Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}",
                                 s1.IsNormalized(NormalizationForm.FormKD));

    Console.WriteLine(divider);

    Console.WriteLine("Set string s2 to each normalized form of string s1.");
    Console.WriteLine();
    Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE");
    Console.WriteLine("U+0033 = DIGIT THREE");
    Console.WriteLine("U+2044 = FRACTION SLASH");
    Console.WriteLine("U+0034 = DIGIT FOUR");
    Console.WriteLine(divider);

    s2 = s1.Normalize();
    Console.Write("B1) Is s2 normalized to the default form (Form C)?: ");
    Console.WriteLine(s2.IsNormalized());
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormC);
    Console.Write("B2) Is s2 normalized to Form C?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormD);
    Console.Write("B3) Is s2 normalized to Form D?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormKC);
    Console.Write("B4) Is s2 normalized to Form KC?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC));
    Show("s2", s2);
    Console.WriteLine();

    s2 = s1.Normalize(NormalizationForm.FormKD);
    Console.Write("B5) Is s2 normalized to Form KD?: ");
    Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD));
    Show("s2", s2);
    Console.WriteLine();
    }

    catch (Exception e)
        {
        Console.WriteLine(e.Message);
        }
    }

    private static void Show(string title, string s)
    {
    Console.Write("Characters in string {0} = ", title);
    foreach(short x in s.ToCharArray())
        {
        Console.Write("{0:X4} ", x);
        }
    Console.WriteLine();
    }
}
/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

// This example demonstrates the String.Normalize method
//                       and the String.IsNormalized method
using namespace System;
using namespace System::Text;
void Show( String^ title, String^ s )
{
   Console::Write( "Characters in string {0} = ", title );
   System::Collections::IEnumerator^ myEnum = s->ToCharArray()->GetEnumerator();
   while ( myEnum->MoveNext() )
   {

      /*) * __try_cast < Char * > ( myEnum -> Current );*/
      int x;
      Console::Write( "{0:X4} ", x );
   }

   Console::WriteLine();
}

int main()
{

   // Character c; combining characters acute and cedilla; character 3/4
   array<Char>^temp0 = {L'c',L'\u0301',L'\u0327',L'\u00BE'};
   String^ s1 = gcnew String( temp0 );
   String^ s2 = nullptr;
   String^ divider = gcnew String( '-',80 );
   divider = String::Concat( Environment::NewLine, divider, Environment::NewLine );
   try
   {
      Show( "s1", s1 );
      Console::WriteLine();
      Console::WriteLine( "U+0063 = LATIN SMALL LETTER C" );
      Console::WriteLine( "U+0301 = COMBINING ACUTE ACCENT" );
      Console::WriteLine( "U+0327 = COMBINING CEDILLA" );
      Console::WriteLine( "U+00BE = VULGAR FRACTION THREE QUARTERS" );
      Console::WriteLine( divider );
      Console::WriteLine( "A1) Is s1 normalized to the default form (Form C)?: {0}", s1->IsNormalized() );
      Console::WriteLine( "A2) Is s1 normalized to Form C?:  {0}", s1->IsNormalized( NormalizationForm::FormC ) );
      Console::WriteLine( "A3) Is s1 normalized to Form D?:  {0}", s1->IsNormalized( NormalizationForm::FormD ) );
      Console::WriteLine( "A4) Is s1 normalized to Form KC?: {0}", s1->IsNormalized( NormalizationForm::FormKC ) );
      Console::WriteLine( "A5) Is s1 normalized to Form KD?: {0}", s1->IsNormalized( NormalizationForm::FormKD ) );
      Console::WriteLine( divider );
      Console::WriteLine( "Set string s2 to each normalized form of string s1." );
      Console::WriteLine();
      Console::WriteLine( "U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" );
      Console::WriteLine( "U+0033 = DIGIT THREE" );
      Console::WriteLine( "U+2044 = FRACTION SLASH" );
      Console::WriteLine( "U+0034 = DIGIT FOUR" );
      Console::WriteLine( divider );
      s2 = s1->Normalize();
      Console::Write( "B1) Is s2 normalized to the default form (Form C)?: " );
      Console::WriteLine( s2->IsNormalized() );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormC );
      Console::Write( "B2) Is s2 normalized to Form C?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormC ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormD );
      Console::Write( "B3) Is s2 normalized to Form D?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormD ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormKC );
      Console::Write( "B4) Is s2 normalized to Form KC?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormKC ) );
      Show( "s2", s2 );
      Console::WriteLine();
      s2 = s1->Normalize( NormalizationForm::FormKD );
      Console::Write( "B5) Is s2 normalized to Form KD?: " );
      Console::WriteLine( s2->IsNormalized( NormalizationForm::FormKD ) );
      Show( "s2", s2 );
      Console::WriteLine();
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Normalize 重载
System 命名空间
IsNormalized


String ..::.PadLeft 方法

String
.
.
::
.
PadLeft 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

返回一个指定长度的新字符串，其中在当前字符串的开头填充空格或指定的 Unicode 字符。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.PadLeft 方法 (Int32)

String
.
.
::
.
PadLeft 方法 (Int32)
String 类

返回一个新字符串，该字符串通过在此实例中的字符左侧填充空格来达到指定的总长度，从而实现右对齐。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function PadLeft ( _
    totalWidth As Integer _
) As String
public string PadLeft(
    int totalWidth
)
public:
String^ PadLeft(
    int totalWidth
)
member PadLeft :
        totalWidth:int -> string

参数

totalWidth
类型： System Int32
结果字符串中的字符数，等于原始字符数加上任何其他填充字符。

返回值

类型： System String
与此实例等效的一个新字符串，但该字符串为右对齐，因此，在左侧填充所需数量的空格，使长度达到 totalWidth。如果 totalWidth 小于此实例的长度，则为与此实例相同的新字符串。 与此实例等效的一个新字符串，但该字符串为右对齐，因此，在左侧填充所需数量的空格，使长度达到 totalWidth。如果 totalWidth 小于此实例的长度，则为与此实例相同的新字符串。
异常 | 条件
ArgumentOutOfRangeException | totalWidth 小于零。

Unicode 空格定义为十六进制的 0x20。

PadLeft(Int32) 方法填充返回字符串的开头。这意味着当对从右向左的语言使用该方法时，它将填充字符串的右部。 PadLeft(Int32) 方法填充返回字符串的开头。这意味着当对从右向左的语言使用该方法时，它将填充字符串的右部。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，其中填充了前导空白以使字符串的总长度为 totalWidth 个字符。 此方法不修改当前实例的值。而是返回一个新字符串，其中填充了前导空白以使字符串的总长度为 totalWidth 个字符。

下面的示例说明 PadLeft 方法。

Dim str As String
str = "BBQ and Slaw"
Console.WriteLine(str.PadLeft(15)) ' Displays "   BBQ and Slaw".
Console.WriteLine(str.PadLeft(5))  ' Displays "BBQ and Slaw".

string str = "BBQ and Slaw";
Console.WriteLine(str.PadLeft(15));  // Displays "   BBQ and Slaw".
Console.WriteLine(str.PadLeft(5));   // Displays "BBQ and Slaw".

String^ str = "BBQ and Slaw";
Console::WriteLine( str->PadLeft( 15 ) ); // Displays "   BBQ and Slaw".
Console::WriteLine( str->PadLeft( 5 ) );  // Displays "BBQ and Slaw".

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
PadLeft 重载
System 命名空间
Int32
PadRight
Trim


String ..::.PadLeft 方法 (Int32, Char)

String
.
.
::
.
PadLeft 方法 (Int32, Char)
String 类

返回一个新字符串，该字符串通过在此实例中的字符左侧填充指定的 Unicode 字符来达到指定的总长度，从而使这些字符右对齐。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function PadLeft ( _
    totalWidth As Integer, _
    paddingChar As Char _
) As String
public string PadLeft(
    int totalWidth,
    char paddingChar
)
public:
String^ PadLeft(
    int totalWidth,
    wchar_t paddingChar
)
member PadLeft :
        totalWidth:int *
        paddingChar:char -> string

参数

totalWidth
类型： System Int32
结果字符串中的字符数，等于原始字符数加上任何其他填充字符。
paddingChar
类型： System Char
Unicode 填充字符。

返回值

类型： System String
与此实例等效的一个新字符串，但该字符串为右对齐，因此，在左侧填充所需任意数量的 paddingChar 字符，使长度达到 totalWidth。如果 totalWidth 小于此实例的长度，则为与此实例相同的新字符串。 与此实例等效的一个新字符串，但该字符串为右对齐，因此，在左侧填充所需任意数量的 paddingChar 字符，使长度达到 totalWidth。如果 totalWidth 小于此实例的长度，则为与此实例相同的新字符串。
异常 | 条件
ArgumentOutOfRangeException | totalWidth 小于零。

PadLeft(Int32, Char) 方法填充返回字符串的开头。这意味着当对从右向左的语言使用该方法时，它将填充字符串的右部。 PadLeft(Int32, Char) 方法填充返回字符串的开头。这意味着当对从右向左的语言使用该方法时，它将填充字符串的右部。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，其中填充了前导空白以使字符串的总长度为 totalWidth 个字符。 此方法不修改当前实例的值。而是返回一个新字符串，其中填充了前导空白以使字符串的总长度为 totalWidth 个字符。

下面的示例说明 PadLeft 方法。

Dim str As String
Dim pad As Char
str = "forty-two"
pad = "."c
Console.WriteLine(str.PadLeft(15, pad)) ' Displays "......forty-two".
Console.WriteLine(str.PadLeft(2,  pad)) ' Displays "forty-two".

string str = "forty-two";
char pad = '.';

Console.WriteLine(str.PadLeft(15, pad));    // Displays "......forty-two".
Console.WriteLine(str.PadLeft(2, pad));     // Displays "forty-two".

String^ str = "forty-two";
Console::WriteLine( str->PadLeft( 15, L'.' ) ); // Displays "......forty-two".
Console::WriteLine( str->PadLeft( 2, L'.' ) );  // Displays "forty-two".

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
PadLeft 重载
System 命名空间
Char
Int32
PadRight
Trim


String ..::.PadRight 方法

String
.
.
::
.
PadRight 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

返回一个指定长度的新字符串，其中在当前字符串的结尾填充空格或指定的 Unicode 字符。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.PadRight 方法 (Int32)

String
.
.
::
.
PadRight 方法 (Int32)
String 类

返回一个新字符串，该字符串通过在此字符串中的字符右侧填充空格来达到指定的总长度，从而使这些字符左对齐。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function PadRight ( _
    totalWidth As Integer _
) As String
public string PadRight(
    int totalWidth
)
public:
String^ PadRight(
    int totalWidth
)
member PadRight :
        totalWidth:int -> string

参数

totalWidth
类型： System Int32
结果字符串中的字符数，等于原始字符数加上任何其他填充字符。

返回值

类型： System String
与此实例等效的一个新字符串，但该字符串为左对齐，因此，在右侧填充所需任意数量的空格，使长度达到 totalWidth。如果 totalWidth 小于此实例的长度，则为与此实例相同的新字符串。 与此实例等效的一个新字符串，但该字符串为左对齐，因此，在右侧填充所需任意数量的空格，使长度达到 totalWidth。如果 totalWidth 小于此实例的长度，则为与此实例相同的新字符串。
异常 | 条件
ArgumentOutOfRangeException | totalWidth 小于零。

Unicode 空格定义为十六进制的 0x20。

PadRight(Int32) 方法填充返回字符串的结尾。这意味着当对从右向左的语言使用该方法时，它将填充字符串的左部。 PadRight(Int32) 方法填充返回字符串的结尾。这意味着当对从右向左的语言使用该方法时，它将填充字符串的左部。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，其中填充了尾随空白以使字符串的总长度为 totalWidth 个字符。 此方法不修改当前实例的值。而是返回一个新字符串，其中填充了尾随空白以使字符串的总长度为 totalWidth 个字符。

下面的示例说明 PadRight 方法。

Dim str As String
str = "BBQ and Slaw"

Console.Write("|")
Console.Write(str.PadRight(15))
Console.WriteLine("|") ' Displays "|BBQ and Slaw   |".

Console.Write("|")
Console.Write(str.PadRight(5))
Console.WriteLine("|") ' Displays "|BBQ and Slaw|".

string str;
str = "BBQ and Slaw";

Console.Write("|");
Console.Write(str.PadRight(15));
Console.WriteLine("|");       // Displays "|BBQ and Slaw   |".

Console.Write("|");
Console.Write(str.PadRight(5));
Console.WriteLine("|");       // Displays "|BBQ and Slaw|".

String^ str = "BBQ and Slaw";
Console::Write( "|" );
Console::Write( str->PadRight( 15 ) );
Console::WriteLine( "|" ); // Displays "|BBQ and Slaw   |".
Console::Write( "|" );
Console::Write( str->PadRight( 5 ) );
Console::WriteLine( "|" ); // Displays "|BBQ and Slaw|".

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
PadRight 重载
System 命名空间
Int32
PadLeft
Trim


String ..::.PadRight 方法 (Int32, Char)

String
.
.
::
.
PadRight 方法 (Int32, Char)
String 类

返回一个新字符串，该字符串通过在此字符串中的字符右侧填充指定的 Unicode 字符来达到指定的总长度，从而使这些字符左对齐。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function PadRight ( _
    totalWidth As Integer, _
    paddingChar As Char _
) As String
public string PadRight(
    int totalWidth,
    char paddingChar
)
public:
String^ PadRight(
    int totalWidth,
    wchar_t paddingChar
)
member PadRight :
        totalWidth:int *
        paddingChar:char -> string

参数

totalWidth
类型： System Int32
结果字符串中的字符数，等于原始字符数加上任何其他填充字符。
paddingChar
类型： System Char
Unicode 填充字符。

返回值

类型： System String
与此实例等效的一个新字符串，但该字符串为左对齐，因此，在右侧填充所需任意数量的 paddingChar 字符，使长度达到 totalWidth。如果 totalWidth 小于此实例的长度，则为与此实例相同的新字符串。 与此实例等效的一个新字符串，但该字符串为左对齐，因此，在右侧填充所需任意数量的 paddingChar 字符，使长度达到 totalWidth。如果 totalWidth 小于此实例的长度，则为与此实例相同的新字符串。
异常 | 条件
ArgumentOutOfRangeException | totalWidth 小于零。

PadRight(Int32, Char) 方法填充返回字符串的结尾。这意味着当对从右向左的语言使用该方法时，它将填充字符串的左部。 PadRight(Int32, Char) 方法填充返回字符串的结尾。这意味着当对从右向左的语言使用该方法时，它将填充字符串的左部。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，其中填充了尾随空白以使字符串的总长度为 totalWidth 个字符。 此方法不修改当前实例的值。而是返回一个新字符串，其中填充了尾随空白以使字符串的总长度为 totalWidth 个字符。

下面的示例说明 PadRight 方法。

Dim str As String
Dim pad As Char
str = "forty-two"
pad = Convert.ToChar(".")
Console.WriteLine(str.PadRight(15, pad)) ' Displays "|forty-two......|".
Console.WriteLine(str.PadRight(2,  pad)) ' Displays "|forty-two|".

string str = "forty-two";
char pad = '.';

Console.WriteLine(str.PadRight(15, pad));    // Displays "forty-two......".
Console.WriteLine(str.PadRight(2,  pad));    // Displays "forty-two".

String^ str = "forty-two";
Console::Write( "|" );
Console::Write( str->PadRight( 15, '.' ) );
Console::WriteLine( "|" ); // Displays "|forty-two......|".
Console::Write( "|" );
Console::Write( str->PadRight( 5, '.' ) );
Console::WriteLine( "|" ); // Displays "|forty-two|".

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
PadRight 重载
System 命名空间
Char
Int32
PadLeft
Trim


String ..::.Remove 方法

String
.
.
::
.
Remove 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

返回一个新字符串，它相当于从当前字符串删除了指定数量的字符。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Remove 方法 (Int32)

String
.
.
::
.
Remove 方法 (Int32)
String 类

删除此字符串中从指定位置到最后位置的所有字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Remove ( _
    startIndex As Integer _
) As String
public string Remove(
    int startIndex
)
public:
String^ Remove(
    int startIndex
)
member Remove :
        startIndex:int -> string

参数

startIndex
类型： System Int32
开始删除字符的从零开始的位置。

返回值

类型： System String
一个新字符串，除所删除的字符之外，该字符串与此字符串等效。
异常 | 条件
ArgumentOutOfRangeException | startIndex 小于零。 - 或 - startIndex 指定的位置不在此字符串内。

在 .NET Framework 中，字符串都是从零开始的。startIndex 参数的值的范围可以从零到字符串实例的长度减一。 在 .NET Framework 中，字符串都是从零开始的。startIndex 参数的值的范围可以从零到字符串实例的长度减一。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中从位置 startIndex 到原始字符串的末尾之间的所有字符都已被移除。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中从位置 startIndex 到原始字符串的末尾之间的所有字符都已被移除。

下面的示例说明 Remove 方法。“下一个到最后一个”情况删除从指定索引到字符串末尾的所有文本。“最后一个”情况删除从指定索引开始的三个字符。 下面的示例说明 Remove 方法。“下一个到最后一个”情况删除从指定索引到字符串末尾的所有文本。“最后一个”情况删除从指定索引开始的三个字符。 下面的示例说明 Remove 方法。“下一个到最后一个”情况删除从指定索引到字符串末尾的所有文本。“最后一个”情况删除从指定索引开始的三个字符。

' This example demonstrates the String.Remove() method.
Imports System

Class Sample
   Public Shared Sub Main()
      Dim s As String = "abc---def"
      '
      Console.WriteLine("Index: 012345678")
      Console.WriteLine("1)     {0}", s)
      Console.WriteLine("2)     {0}", s.Remove(3))
      Console.WriteLine("3)     {0}", s.Remove(3, 3))
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'Index: 012345678
'1)     abc---def
'2)     abc
'3)     abcdef
'

// This example demonstrates the String.Remove() method.
using System;

class Sample
{
    public static void Main()
    {
    string s = "abc---def";
//
    Console.WriteLine("Index: 012345678");
    Console.WriteLine("1)     {0}", s);
    Console.WriteLine("2)     {0}", s.Remove(3));
    Console.WriteLine("3)     {0}", s.Remove(3, 3));
    }
}
/*
This example produces the following results:

Index: 012345678
1)     abc---def
2)     abc
3)     abcdef

*/

// This example demonstrates the String.Remove() method.
using namespace System;
int main()
{
   String^ s = "abc---def";

   //
   Console::WriteLine( "Index: 012345678" );
   Console::WriteLine( "1)     {0}", s );
   Console::WriteLine( "2)     {0}", s->Remove( 3 ) );
   Console::WriteLine( "3)     {0}", s->Remove( 3, 3 ) );
}

/*
This example produces the following results:

Index: 012345678
1)     abc---def
2)     abc
3)     abcdef

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Remove 重载
System 命名空间
Int32
Concat
Insert
Join
Replace
Split
Substring
Trim


String ..::.Remove 方法 (Int32, Int32)

String
.
.
::
.
Remove 方法 (Int32, Int32)
String 类

从此实例中的指定位置开始删除指定数目的字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Remove ( _
    startIndex As Integer, _
    count As Integer _
) As String
public string Remove(
    int startIndex,
    int count
)
public:
String^ Remove(
    int startIndex,
    int count
)
member Remove :
        startIndex:int *
        count:int -> string

参数

startIndex
类型： System Int32
开始删除字符的从零开始的位置。
count
类型： System Int32
要删除的字符数。

返回值

类型： System String
一个新字符串，除所删除的字符之外，该字符串与此实例等效。
异常 | 条件
ArgumentOutOfRangeException | startIndex 或 count 小于零。 - 或 - startIndex 加 count 之和指定一个此实例外的位置。

在 .NET Framework 中，字符串都是从零开始的。startIndex 参数的值的范围可以从零到字符串实例的长度减一。 在 .NET Framework 中，字符串都是从零开始的。startIndex 参数的值的范围可以从零到字符串实例的长度减一。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，由 count 参数指定的字符数已被移除。从 startIndex 指定的位置上移除字符。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，由 count 参数指定的字符数已被移除。从 startIndex 指定的位置上移除字符。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，由 count 参数指定的字符数已被移除。从 startIndex 指定的位置上移除字符。

下面的示例演示如何从完整的姓名中移除中间名。

Imports System

Public Class RemoveTest

    Public Shared Sub Main()
        Dim name As String = "Michelle Violet Banks"

        Console.WriteLine("The entire name is '{0}'", name)
        Dim foundS1 As Integer = name.IndexOf(" ")
        Dim foundS2 As Integer = name.IndexOf(" ", foundS1 + 1)
        If foundS1 <> foundS2 And foundS1 >= 0 Then

            ' remove the middle name, identified by finding the spaces in the middle of the name...
            name = name.Remove(foundS1 + 1, foundS2 - foundS1)

            Console.WriteLine("After removing the middle name, we are left with '{0}'", name)
        End If
    End Sub 'Main
End Class 'RemoveTest

using System;

public class RemoveTest {
    public static void Main() {

        string name = "Michelle Violet Banks";

        Console.WriteLine("The entire name is '{0}'", name);

        // remove the middle name, identified by finding the spaces in the middle of the name...
        int foundS1 = name.IndexOf(" ");
        int foundS2 = name.IndexOf(" ", foundS1 + 1);

        if (foundS1 != foundS2 && foundS1 >= 0) {

            name = name.Remove(foundS1 + 1, foundS2 - foundS1);

            Console.WriteLine("After removing the middle name, we are left with '{0}'", name);
        }
    }
}

using namespace System;
int main()
{
   String^ name = "Michelle Violet Banks";
   Console::WriteLine( "The entire name is '{0}'", name );

   // remove the middle name, identified by finding the spaces in the middle of the name->->.
   int foundS1 = name->IndexOf( " " );
   int foundS2 = name->IndexOf( " ", foundS1 + 1 );
   if ( foundS1 != foundS2 && foundS1 >= 0 )
   {
      name = name->Remove( foundS1 + 1, foundS2 - foundS1 );
      Console::WriteLine( "After removing the middle name, we are left with '{0}'", name );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Remove 重载
System 命名空间
Int32
Concat
Insert
Join
Replace
Split
Substring
Trim


String ..::.Replace 方法

String
.
.
::
.
Replace 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

返回一个新字符串，其中当前字符串中出现的所有指定 Unicode 字符或 String 都替换为另一个指定的 Unicode 字符或 String。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Replace 方法 (Char, Char)

String
.
.
::
.
Replace 方法 (Char, Char)
String 类

返回一个新字符串，其中此实例中出现的所有指定 Unicode 字符都替换为另一个指定的 Unicode 字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Replace ( _
    oldChar As Char, _
    newChar As Char _
) As String
public string Replace(
    char oldChar,
    char newChar
)
public:
String^ Replace(
    wchar_t oldChar,
    wchar_t newChar
)
member Replace :
        oldChar:char *
        newChar:char -> string

参数

oldChar
类型： System Char
要被替换的 Unicode 字符。
newChar
类型： System Char
要替换出现的所有 oldChar 的 Unicode 字符。

返回值

类型： System String
与此实例等效的一个字符串，但其中 oldChar 的所有实例都替换为 newChar。

此方法执行序号（区分大小写，不区分区域性）搜索以查找 oldChar。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，其中 oldChar 的所有匹配项均被替换为 newChar。 此方法不修改当前实例的值。而是返回一个新字符串，其中 oldChar 的所有匹配项均被替换为 newChar。

下面的示例将一系列数字之间的空白替换为逗号，从而创建以逗号分隔的值列表。

Imports System
 _

Class stringReplace1
   Public Shared Sub Main()
      Dim str As [String] = "1 2 3 4 5 6 7 8 9"
      Console.WriteLine("Original string: ""{0}""", str)
      Console.WriteLine("CSV string:      ""{0}""", str.Replace(" "c, ","c))
   End Sub
End Class
'
' This example produces the following output:
' Original string: "1 2 3 4 5 6 7 8 9"
' CSV string:      "1,2,3,4,5,6,7,8,9"
'

using System;

class stringReplace1 {
    public static void Main() {
        String str = "1 2 3 4 5 6 7 8 9";
        Console.WriteLine("Original string: \"{0}\"", str);
        Console.WriteLine("CSV string:      \"{0}\"", str.Replace(' ', ','));
    }
}
//
// This example produces the following output:
// Original string: "1 2 3 4 5 6 7 8 9"
// CSV string:      "1,2,3,4,5,6,7,8,9"
//

using namespace System;
int main()
{
   String^ str = "1 2 3 4 5 6 7 8 9";
   Console::WriteLine( "Original string: \"{0}\"", str );
   Console::WriteLine( "CSV string:      \"{0}\"", str->Replace( ' ', ',' ) );
}

//
// This example produces the following output:
// Original string: "1 2 3 4 5 6 7 8 9"
// CSV string:      "1,2,3,4,5,6,7,8,9"
//

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Replace 重载
System 命名空间
Char
Concat
Insert
Join
Remove
Split
Substring
Trim


String ..::.Replace 方法 (String, String)

String
.
.
::
.
Replace 方法 (String, String)
String 类

返回一个新字符串，其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Replace ( _
    oldValue As String, _
    newValue As String _
) As String
public string Replace(
    string oldValue,
    string newValue
)
public:
String^ Replace(
    String^ oldValue,
    String^ newValue
)
member Replace :
        oldValue:string *
        newValue:string -> string

参数

oldValue
类型： System String
要被替换的字符串。
newValue
类型： System String
要替换出现的所有 oldValue 的字符串。

返回值

类型： System String
与当前字符串等效的一个字符串，但其中 oldValue 的所有实例都替换为 newValue。
异常 | 条件
ArgumentNullException | oldValue 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | oldValue 是空字符串 ("")。

如果 newValue 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则移除 oldValue 的所有匹配项。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，其中 oldValue 的所有匹配项均被替换为 newValue。 此方法不修改当前实例的值。而是返回一个新字符串，其中 oldValue 的所有匹配项均被替换为 newValue。

此方法执行序号（区分大小写但不区分区域性）搜索以查找 oldValue。

下面的示例演示如何使用 Replace 方法来更正拼写错误。

Imports System

Public Class ReplaceTest

    Public Shared Sub Main()
        Dim errString As String = "This docment uses 3 other docments to docment the docmentation"

        Console.WriteLine("The original string is:{0}'{1}'{0}", Environment.NewLine, errString)

        ' Correct the spelling of "document".
        Dim correctString As String = errString.Replace("docment", "document")

        Console.WriteLine("After correcting the string, the result is:{0}'{1}'", Environment.NewLine, correctString)
    End Sub
End Class
'
' This code example produces the following output:
'
' The original string is:
' 'This docment uses 3 other docments to docment the docmentation'
'
' After correcting the string, the result is:
' 'This document uses 3 other documents to document the documentation'
'

using System;

public class ReplaceTest {
    public static void Main() {

        string errString = "This docment uses 3 other docments to docment the docmentation";

        Console.WriteLine("The original string is:{0}'{1}'{0}", Environment.NewLine, errString);

        // Correct the spelling of "document".

        string correctString = errString.Replace("docment", "document");

        Console.WriteLine("After correcting the string, the result is:{0}'{1}'",
                Environment.NewLine, correctString);
    }
}
//
// This code example produces the following output:
//
// The original string is:
// 'This docment uses 3 other docments to docment the docmentation'
//
// After correcting the string, the result is:
// 'This document uses 3 other documents to document the documentation'
//

using namespace System;
int main()
{
   String^ errString = "This docment uses 3 other docments to docment the docmentation";
   Console::WriteLine( "The original string is:\n'{0}'\n", errString );

   // Correct the spelling of S"document".
   String^ correctString = errString->Replace( "docment", "document" );
   Console::WriteLine( "After correcting the string, the result is:\n'{0}'", correctString );
}
//
// This code example produces the following output:
//
// The original string is:
// 'This docment uses 3 other docments to docment the docmentation'
//
// After correcting the string, the result is:
// 'This document uses 3 other documents to document the documentation'
//

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Replace 重载
System 命名空间
Concat
Insert
Join
Remove
Split
Substring
Trim


String ..::.Split 方法

String
.
.
::
.
Split 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

返回的字符串数组包含此实例中的子字符串（由指定字符串或 Unicode 字符数组的元素分隔）。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Split 方法 ( array<Char >[]()[])

String
.
.
::
.
Split 方法 (
array<
Char
>
[]
()
[]
)
String 类

返回的字符串数组包含此实例中的子字符串（由指定 Unicode 字符数组的元素分隔）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Split ( _
    ParamArray separator As Char() _
) As String()
public string[] Split(
    params char[] separator
)
public:
array<String^>^ Split(
    ... array<wchar_t>^ separator
)
member Split :
        separator:char[] -> string[]

参数

separator
类型：
array<
System Char
>
[]
()
[]

分隔此实例中子字符串的 Unicode 字符数组、不包含分隔符的空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型：
array<
System String
>
[]
()
[]

一个数组，其元素包含此实例中的子字符串，这些子字符串由 separator 中的一个或多个字符分隔。有关更多信息，请参见“备注”部分。 一个数组，其元素包含此实例中的子字符串，这些子字符串由 separator 中的一个或多个字符分隔。有关更多信息，请参见“备注”部分。

返回的数组元素中不包含分隔符字符。

如果此实例不包含 separator 中的任何字符，则返回的数组由包含此实例的单个元素组成。

如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。

separator 的每一个元素都定义一个单独的分隔符字符。如果两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。下表提供了示例： separator 的每一个元素都定义一个单独的分隔符字符。如果两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。下表提供了示例： separator 的每一个元素都定义一个单独的分隔符字符。如果两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。下表提供了示例：

字符串值 | Separator | 返回的数组
"42, 12, 19" | new Char[] {',', ' '} (C#) Char() = {","c, " "c}) (Visual Basic) | {"42", "", "12", "", "19"}
"42..12..19" | new Char[] {'.'} (C#) Char() = {"."c} (Visual Basic) | {"42", "", "12", "", "19"}
"Banana" | new Char[] {'.'} (C#) Char() = {"."c} (Visual Basic) | {"Banana"}
"Darb\nSmarba" (C#) "Darb" & vbLf & "Smarba" (Visual Basic) | new Char[] {} (C#) Char() = {} (Visual Basic) | {"Darb", "Smarba"}
"Darb\nSmarba" (C#) "Darb" & vbLf & "Smarba" (Visual Basic) | null (C#) Nothing (Visual Basic) | {"Darb", "Smarba"}

性能注意事项

Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。 Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。

如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。

此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。 此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。

对调用者的说明

在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。 在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。

下面的示例演示如何通过将空白和标点符号视为分隔符来提取文本块中的各个单词。传递给 String..::.Split(array<Char>[]()[]) 方法的 separator 参数的字符数组包含空白字符、制表符和一些常用标点符号。 下面的示例演示如何通过将空白和标点符号视为分隔符来提取文本块中的各个单词。传递给 String..::.Split(array<Char>[]()[]) 方法的 separator 参数的字符数组包含空白字符、制表符和一些常用标点符号。

Public Class SplitTest
    Public Shared Sub Main()
        Dim words As String = "This is a list of words, with: a bit of punctuation" + _
                              vbTab + "and a tab character."
        Dim split As String() = words.Split(New [Char]() {" "c, ","c, "."c, ":"c, CChar(vbTab) })

        For Each s As String In  split
            If s.Trim() <> "" Then
                Console.WriteLine(s)
            End If
        Next s
    End Sub 'Main
End Class 'SplitTest
' The example displays the following output to the console:
'       This
'       is
'       a
'       list
'       of
'       words
'       with
'       a
'       bit
'       of
'       punctuation
'       and
'       a
'       tab
'       character

using System;

public class SplitTest {
    public static void Main() {

        string words = "This is a list of words, with: a bit of punctuation" +
                       "\tand a tab character.";

        string [] split = words.Split(new Char [] {' ', ',', '.', ':', '\t' });

        foreach (string s in split) {

            if (s.Trim() != "")
                Console.WriteLine(s);
        }
    }
}
// The example displays the following output to the console:
//       This
//       is
//       a
//       list
//       of
//       words
//       with
//       a
//       bit
//       of
//       punctuation
//       and
//       a
//       tab
//       character

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Split 重载
System 命名空间
Char
Concat
Insert
Join
Remove
Replace
Substring
Trim


String ..::.Split 方法 ( array<Char >[]()[], Int32)

String
.
.
::
.
Split 方法 (
array<
Char
>
[]
()
[]
, Int32)
String 类

返回的字符串数组包含此实例中的子字符串（由指定 Unicode 字符数组的元素分隔）。参数指定返回的子字符串的最大数量。 返回的字符串数组包含此实例中的子字符串（由指定 Unicode 字符数组的元素分隔）。参数指定返回的子字符串的最大数量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Split ( _
    separator As Char(), _
    count As Integer _
) As String()
public string[] Split(
    char[] separator,
    int count
)
public:
array<String^>^ Split(
    array<wchar_t>^ separator,
    int count
)
member Split :
        separator:char[] *
        count:int -> string[]

参数

separator
类型：
array<
System Char
>
[]
()
[]

分隔此实例中子字符串的 Unicode 字符数组、不包含分隔符的空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
count
类型： System Int32
要返回的子字符串的最大数量。

返回值

类型：
array<
System String
>
[]
()
[]

一个数组，其元素包含此实例中的子字符串，这些子字符串由 separator 中的一个或多个字符分隔。有关更多信息，请参见“备注”部分。 一个数组，其元素包含此实例中的子字符串，这些子字符串由 separator 中的一个或多个字符分隔。有关更多信息，请参见“备注”部分。
异常 | 条件
ArgumentOutOfRangeException | count 为负数。

返回的数组元素中不包含分隔符字符。

如果此实例不包含 separator 中的任何字符，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。如果 count 为零，则返回一个空数组。 如果此实例不包含 separator 中的任何字符，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。如果 count 为零，则返回一个空数组。 如果此实例不包含 separator 中的任何字符，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。如果 count 为零，则返回一个空数组。

如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。

separator 的每一个元素都定义一个单独的分隔符字符。如果两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。 separator 的每一个元素都定义一个单独的分隔符字符。如果两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。

如果此实例中的子字符串比 count 多，则在第一个 count 减去 1 的返回值元素中返回第一个 count 减去 1 的子字符串，此实例中剩余的字符在返回值的最后一个元素中返回。

如果 count 大于子字符串的数量，则返回可用子字符串，并且不会引发异常。

下表提供了示例：

字符串值 | Separator | Count | 返回的数组
"42, 12, 19" | new Char[] {',', ' '} (C#) Char() = {","c, " "c} (Visual Basic) | 2 | {"42", " 12, 19"}
"42..12..19" | new Char[] {'.'} (C#) Char() = {"."c} (Visual Basic) | 4 | {"42", "", "12", ".19"}
"Banana" | new Char[] {'.'} (C#) Char() = {"."c} (Visual Basic) | 2 | {"Banana"}
"Darb\nSmarba" (C#) "Darb" & vbLf & "Smarba" (Visual Basic) | new Char[] {} (C#) Char() = {} (Visual Basic) | 1 | {"Darb\nSmarba"} (C#) "Darb" & vbLf & "Smarba" (Visual Basic)
"Darb\nSmarba" (C#) "Darb" & vbLf & "Smarba" (Visual Basic) | new Char[] null (C#) Char() = Nothing | 2 | {"Darb", "Smarba"}
"Darb\nSmarba" (C#) "Darb" & vbLf & "Smarba" (Visual Basic) | new Char[] null (C#) Char() = Nothing | 100 | {"Darb", "Smarba"}

性能注意事项

Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。 Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。

如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。

此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。 此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。

对调用者的说明

在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。 在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。

下面的示例演示 count 如何影响 Split 返回的字符串数量。

Public Class StringSplit2
   Public Shared Sub Main()

      Dim delimStr As String = " ,.:"
      Dim delimiter As Char() = delimStr.ToCharArray()
      Dim words As String = "one two,three:four."
      Dim split As String() = Nothing

      Console.WriteLine("The delimiters are -{0}-", delimStr)
      Dim x As Integer
      For x = 1 To 5
         split = words.Split(delimiter, x)
         Console.WriteLine(ControlChars.Cr + "count = {0,2} ..............", x)
         Dim s As String
         For Each s In  split
            Console.WriteLine("-{0}-", s)
         Next s
      Next x
   End Sub
End Class
' The example displays the following output:
'       The delimiters are - ,.:-
'       count =  1 ..............
'       -one two,three:four.-
'       count =  2 ..............
'       -one-
'       -two,three:four.-
'       count =  3 ..............
'       -one-
'       -two-
'       -three:four.-
'       count =  4 ..............
'       -one-
'       -two-
'       -three-
'       -four.-
'       count =  5 ..............
'       -one-
'       -two-
'       -three-
'       -four-
'       --

using System;

public class StringSplit2
{
   public static void Main()
   {
      string delimStr = " ,.:";
       char [] delimiter = delimStr.ToCharArray();
      string words = "one two,three:four.";
      string [] split = null;

       Console.WriteLine("The delimiters are -{0}-", delimStr);
       for (int x = 1; x <= 5; x++)
      {
          split = words.Split(delimiter, x);
         Console.WriteLine("\ncount = {0,2} ..............", x);
           foreach (string s in split)
          {
             Console.WriteLine("-{0}-", s);
             }
       }
   }
}
// The example displays the following output:
//       The delimiters are - ,.:-
//       count =  1 ..............
//       -one two,three:four.-
//       count =  2 ..............
//       -one-
//       -two,three:four.-
//       count =  3 ..............
//       -one-
//       -two-
//       -three:four.-
//       count =  4 ..............
//       -one-
//       -two-
//       -three-
//       -four.-
//       count =  5 ..............
//       -one-
//       -two-
//       -three-
//       -four-
//       --

using namespace System;
using namespace System::Collections;
int main()
{
   String^ delimStr = " ,.:";
   array<Char>^delimiter = delimStr->ToCharArray();
   String^ words = "one two,three:four.";
   array<String^>^split = nullptr;
   Console::WriteLine( "The delimiters are -{0}-", delimStr );
   for ( int x = 1; x <= 5; x++ )
   {
      split = words->Split( delimiter, x );
      Console::WriteLine( "\ncount = {0, 2} ..............", x );
      IEnumerator^ myEnum = split->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         String^ s = safe_cast<String^>(myEnum->Current);
         Console::WriteLine( "-{0}-", s );
      }

   }
}
// The example displays the following output:
//       The delimiters are - ,.:-
//       count =  1 ..............
//       -one two,three:four.-
//       count =  2 ..............
//       -one-
//       -two,three:four.-
//       count =  3 ..............
//       -one-
//       -two-
//       -three:four.-
//       count =  4 ..............
//       -one-
//       -two-
//       -three-
//       -four.-
//       count =  5 ..............
//       -one-
//       -two-
//       -three-
//       -four-
//       --

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Split 重载
System 命名空间
Char
Array
Int32
Concat
Insert
Join
Remove
Replace
Substring
Trim


String ..::.Split 方法 ( array<Char >[]()[], StringSplitOptions)

String
.
.
::
.
Split 方法 (
array<
Char
>
[]
()
[]
, StringSplitOptions)
String 类

返回的字符串数组包含此字符串中的子字符串（由指定 Unicode 字符数组的元素分隔）。参数指定是否返回空数组元素。 返回的字符串数组包含此字符串中的子字符串（由指定 Unicode 字符数组的元素分隔）。参数指定是否返回空数组元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function Split ( _
    separator As Char(), _
    options As StringSplitOptions _
) As String()
[ComVisibleAttribute(false)]
public string[] Split(
    char[] separator,
    StringSplitOptions options
)
[ComVisibleAttribute(false)]
public:
array<String^>^ Split(
    array<wchar_t>^ separator,
    StringSplitOptions options
)
[<ComVisibleAttribute(false)>]
member Split :
        separator:char[] *
        options:StringSplitOptions -> string[]

参数

separator
类型：
array<
System Char
>
[]
()
[]

分隔此字符串中子字符串的 Unicode 字符数组、不包含分隔符的空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
options
类型： System StringSplitOptions
要省略返回的数组中的空数组元素，则为 RemoveEmptyEntries；要包含返回的数组中的空数组元素，则为 None。

返回值

类型：
array<
System String
>
[]
()
[]

一个数组，其元素包含此字符串中的子字符串，这些子字符串由 separator 中的一个或多个字符分隔。有关更多信息，请参见“备注”部分。 一个数组，其元素包含此字符串中的子字符串，这些子字符串由 separator 中的一个或多个字符分隔。有关更多信息，请参见“备注”部分。
异常 | 条件
ArgumentException | options 不是 StringSplitOptions 值之一。

返回的数组元素中不包含分隔符字符。

如果此实例不包含 separator 中的任何字符，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果此实例不包含 separator 中的任何字符，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果此实例不包含 separator 中的任何字符，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。

separator 的每一个元素都定义一个单独的分隔符字符。如果 options 参数为 RemoveEmptyEntries 且此实例的长度为零，则返回空数组。 separator 的每一个元素都定义一个单独的分隔符字符。如果 options 参数为 RemoveEmptyEntries 且此实例的长度为零，则返回空数组。

如果 options 参数为 None，且两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。

性能注意事项

Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。 Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。

如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。

此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。 此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。

对调用者的说明

在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。 在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。

下面的示例使用 StringSplitOptions 枚举来包含或排除由 Split 方法生成的子字符串。

' This example demonstrates the String() methods that use
' the StringSplitOptions enumeration.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim s1 As String = ",ONE,,TWO,,,THREE,,"
        Dim s2 As String = "[stop]" & _
                           "ONE[stop][stop]" & _
                           "TWO[stop][stop][stop]" & _
                           "THREE[stop][stop]"
        Dim charSeparators() As Char = {","c}
        Dim stringSeparators() As String = {"[stop]"}
        Dim result() As String
        ' ------------------------------------------------------------------------------
        ' Split a string delimited by characters.
        ' ------------------------------------------------------------------------------
        Console.WriteLine("1) Split a string delimited by characters:" & vbCrLf)

        ' Display the original string and delimiter characters.
        Console.WriteLine("1a )The original string is ""{0}"".", s1)
        Console.WriteLine("The delimiter character is '{0}'." & vbCrLf, charSeparators(0))

        ' Split a string delimited by characters and return all elements.
        Console.WriteLine("1b) Split a string delimited by characters and " & _
                          "return all elements:")
        result = s1.Split(charSeparators, StringSplitOptions.None)
        Show(result)

        ' Split a string delimited by characters and return all non-empty elements.
        Console.WriteLine("1c) Split a string delimited by characters and " & _
                          "return all non-empty elements:")
        result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' Split the original string into the string and empty string before the
        ' delimiter and the remainder of the original string after the delimiter.
        Console.WriteLine("1d) Split a string delimited by characters and " & _
                          "return 2 elements:")
        result = s1.Split(charSeparators, 2, StringSplitOptions.None)
        Show(result)

        ' Split the original string into the string after the delimiter and the
        ' remainder of the original string after the delimiter.
        Console.WriteLine("1e) Split a string delimited by characters and " & _
                          "return 2 non-empty elements:")
        result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' ------------------------------------------------------------------------------
        ' Split a string delimited by another string.
        ' ------------------------------------------------------------------------------
        Console.WriteLine("2) Split a string delimited by another string:" & vbCrLf)

        ' Display the original string and delimiter string.
        Console.WriteLine("2a) The original string is ""{0}"".", s2)
        Console.WriteLine("The delimiter string is ""{0}""." & vbCrLf, stringSeparators(0))

        ' Split a string delimited by another string and return all elements.
        Console.WriteLine("2b) Split a string delimited by another string and " & _
                          "return all elements:")
        result = s2.Split(stringSeparators, StringSplitOptions.None)
        Show(result)

        ' Split the original string at the delimiter and return all non-empty elements.
        Console.WriteLine("2c) Split a string delimited by another string and " & _
                          "return all non-empty elements:")
        result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' Split the original string into the empty string before the
        ' delimiter and the remainder of the original string after the delimiter.
        Console.WriteLine("2d) Split a string delimited by another string and " & _
                          "return 2 elements:")
        result = s2.Split(stringSeparators, 2, StringSplitOptions.None)
        Show(result)

        ' Split the original string into the string after the delimiter and the
        ' remainder of the original string after the delimiter.
        Console.WriteLine("2e) Split a string delimited by another string and " & _
                          "return 2 non-empty elements:")
        result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

    End Sub 'Main

    ' Display the array of separated strings.
    Public Shared Sub Show(ByVal entries() As String)
        Console.WriteLine("The return value contains these {0} elements:", entries.Length)
        Dim entry As String
        For Each entry In  entries
            Console.Write("<{0}>", entry)
        Next entry
        Console.Write(vbCrLf & vbCrLf)

    End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'1) Split a string delimited by characters:
'
'1a )The original string is ",ONE,,TWO,,,THREE,,".
'The delimiter character is ','.
'
'1b) Split a string delimited by characters and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'1c) Split a string delimited by characters and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'1d) Split a string delimited by characters and return 2 elements:
'The return value contains these 2 elements:
'<><ONE,,TWO,,,THREE,,>
'
'1e) Split a string delimited by characters and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO,,,THREE,,>
'
'2) Split a string delimited by another string:
'
'2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
'The delimiter string is "[stop]".
'
'2b) Split a string delimited by another string and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'2c) Split a string delimited by another string and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'2d) Split a string delimited by another string and return 2 elements:
'The return value contains these 2 elements:
'<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>
'
'2e) Split a string delimited by another string and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO[stop][stop][stop]THREE[stop][stop]>
'

// This example demonstrates the String() methods that use
// the StringSplitOptions enumeration.
using System;

class Sample
{
    public static void Main()
    {
    string s1 = ",ONE,,TWO,,,THREE,,";
    string s2 = "[stop]" +
                "ONE[stop][stop]" +
                "TWO[stop][stop][stop]" +
                "THREE[stop][stop]";
    char[] charSeparators = new char[] {','};
    string[] stringSeparators = new string[] {"[stop]"};
    string[] result;
// ------------------------------------------------------------------------------
// Split a string delimited by characters.
// ------------------------------------------------------------------------------
    Console.WriteLine("1) Split a string delimited by characters:\n");

// Display the original string and delimiter characters.
    Console.WriteLine("1a )The original string is \"{0}\".", s1);
    Console.WriteLine("The delimiter character is '{0}'.\n",
                       charSeparators[0]);

// Split a string delimited by characters and return all elements.
    Console.WriteLine("1b) Split a string delimited by characters and " +
                      "return all elements:");
    result = s1.Split(charSeparators, StringSplitOptions.None);
    Show(result);

// Split a string delimited by characters and return all non-empty elements.
    Console.WriteLine("1c) Split a string delimited by characters and " +
                      "return all non-empty elements:");
    result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// Split the original string into the string and empty string before the
// delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("1d) Split a string delimited by characters and " +
                      "return 2 elements:");
    result = s1.Split(charSeparators, 2, StringSplitOptions.None);
    Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
    Console.WriteLine("1e) Split a string delimited by characters and " +
                      "return 2 non-empty elements:");
    result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// ------------------------------------------------------------------------------
// Split a string delimited by another string.
// ------------------------------------------------------------------------------
    Console.WriteLine("2) Split a string delimited by another string:\n");

// Display the original string and delimiter string.
    Console.WriteLine("2a) The original string is \"{0}\".", s2);
    Console.WriteLine("The delimiter string is \"{0}\".\n", stringSeparators[0]);

// Split a string delimited by another string and return all elements.
    Console.WriteLine("2b) Split a string delimited by another string and " +
                      "return all elements:");
    result = s2.Split(stringSeparators, StringSplitOptions.None);
    Show(result);

// Split the original string at the delimiter and return all non-empty elements.
    Console.WriteLine("2c) Split a string delimited by another string and " +
                      "return all non-empty elements:");
    result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// Split the original string into the empty string before the
// delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("2d) Split a string delimited by another string and " +
                      "return 2 elements:");
    result = s2.Split(stringSeparators, 2, StringSplitOptions.None);
    Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
    Console.WriteLine("2e) Split a string delimited by another string and " +
                      "return 2 non-empty elements:");
    result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
    Show(result);
    }

// Display the array of separated strings.
    public static void Show(string[] entries)
    {
    Console.WriteLine("The return value contains these {0} elements:", entries.Length);
    foreach (string entry in entries)
        {
        Console.Write("<{0}>", entry);
        }
    Console.Write("\n\n");
    }
}
/*
This example produces the following results:

1) Split a string delimited by characters:

1a )The original string is ",ONE,,TWO,,,THREE,,".
The delimiter character is ','.

1b) Split a string delimited by characters and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

1c) Split a string delimited by characters and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

1d) Split a string delimited by characters and return 2 elements:
The return value contains these 2 elements:
<><ONE,,TWO,,,THREE,,>

1e) Split a string delimited by characters and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO,,,THREE,,>

2) Split a string delimited by another string:

2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
The delimiter string is "[stop]".

2b) Split a string delimited by another string and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

2c) Split a string delimited by another string and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

2d) Split a string delimited by another string and return 2 elements:
The return value contains these 2 elements:
<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>

2e) Split a string delimited by another string and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO[stop][stop][stop]THREE[stop][stop]>

*/

// This example demonstrates the String.Split(Char[], Boolean) and
//                               String.Split(Char[], Int32, Boolean) methods
using namespace System;
void Show( array<String^>^entries )
{
   Console::WriteLine( "The return value contains these {0} elements:", entries->Length );
   System::Collections::IEnumerator^ myEnum = entries->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ entry = safe_cast<String^>(myEnum->Current);
      Console::Write( "<{0}>", entry );
   }

   Console::Write( "{0}{0}", Environment::NewLine );
}

int main()
{
   String^ s = ",one,,,two,,,,,three,,";
   array<Char>^sep = gcnew array<Char>{
      ','
   };
   array<String^>^result;

   //
   Console::WriteLine( "The original string is \"{0}\".", s );
   Console::WriteLine( "The separation character is '{0}'.", sep[ 0 ] );
   Console::WriteLine();

   //
   Console::WriteLine( "Split the string and return all elements:" );
   result = s->Split( sep, StringSplitOptions::None );
   Show( result );

   //
   Console::WriteLine( "Split the string and return all non-empty elements:" );
   result = s->Split( sep, StringSplitOptions::RemoveEmptyEntries );
   Show( result );

   //
   Console::WriteLine( "Split the string and return 2 elements:" );
   result = s->Split( sep, 2, StringSplitOptions::None );
   Show( result );

   //
   Console::WriteLine( "Split the string and return 2 non-empty elements:" );
   result = s->Split( sep, 2, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
}

/*
This example produces the following results:

The original string is ",one,,,two,,,,,three,,".
The separation character is ','.

Split the string and return all elements:
The return value contains these 12 elements:
<><one><><><two><><><><><three><><>

Split the string and return all non-empty elements:
The return value contains these 3 elements:
<one><two><three>

Split the string and return 2 elements:
The return value contains these 2 elements:
<><one,,,two,,,,,three,,>

Split the string and return 2 non-empty elements:
The return value contains these 2 elements:
<one><,,two,,,,,three,,>

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Split 重载
System 命名空间


String ..::.Split 方法 ( array<String >[]()[], StringSplitOptions)

String
.
.
::
.
Split 方法 (
array<
String
>
[]
()
[]
, StringSplitOptions)
String 类

返回的字符串数组包含此字符串中的子字符串（由指定字符串数组的元素分隔）。参数指定是否返回空数组元素。 返回的字符串数组包含此字符串中的子字符串（由指定字符串数组的元素分隔）。参数指定是否返回空数组元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function Split ( _
    separator As String(), _
    options As StringSplitOptions _
) As String()
[ComVisibleAttribute(false)]
public string[] Split(
    string[] separator,
    StringSplitOptions options
)
[ComVisibleAttribute(false)]
public:
array<String^>^ Split(
    array<String^>^ separator,
    StringSplitOptions options
)
[<ComVisibleAttribute(false)>]
member Split :
        separator:string[] *
        options:StringSplitOptions -> string[]

参数

separator
类型：
array<
System String
>
[]
()
[]

分隔此字符串中子字符串的字符串数组、不包含分隔符的空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
options
类型： System StringSplitOptions
要省略返回的数组中的空数组元素，则为 RemoveEmptyEntries；要包含返回的数组中的空数组元素，则为 None。

返回值

类型：
array<
System String
>
[]
()
[]

一个数组，其元素包含此字符串中的子字符串，这些子字符串由 separator 中的一个或多个字符串分隔。有关更多信息，请参见“备注”部分。 一个数组，其元素包含此字符串中的子字符串，这些子字符串由 separator 中的一个或多个字符串分隔。有关更多信息，请参见“备注”部分。
异常 | 条件
ArgumentException | options 不是 StringSplitOptions 值之一。

返回值详细信息

返回的数组元素中不包含分隔符字符串。

如果此实例不包含 separator 中的任何字符串，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果此实例不包含 separator 中的任何字符串，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果此实例不包含 separator 中的任何字符串，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。

如果 options 参数为 RemoveEmptyEntries 且此实例的长度为零，则返回空数组。

separator 的每一个元素都定义一个单独的分隔符字符。如果 options 参数为 None，且两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。 separator 的每一个元素都定义一个单独的分隔符字符。如果 options 参数为 None，且两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。

比较详细信息

Split 方法提取此字符串中的子字符串，这些子字符串由 separator 参数中的一个或多个字符串分隔，然后该方法将这些子字符串作为数组的元素返回。

Split 方法使用区分大小写的序号排序规则执行比较，从而查找分隔符。有关字、字符串和序号排序的更多信息，请参见 System.Globalization..::.CompareOptions 枚举。 Split 方法使用区分大小写的序号排序规则执行比较，从而查找分隔符。有关字、字符串和序号排序的更多信息，请参见 System.Globalization..::.CompareOptions 枚举。

Split 方法忽略 separator 的任何值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("") 的元素。

为了在 separator 中的字符串具有公共字符的情况下避免出现不明确的结果，Split 操作从实例值的开始进行到结尾，并匹配 separator 中与实例中的分隔符相等的第一个元素。实例中子字符串的出现顺序优先于 separator 中元素的顺序。 为了在 separator 中的字符串具有公共字符的情况下避免出现不明确的结果，Split 操作从实例值的开始进行到结尾，并匹配 separator 中与实例中的分隔符相等的第一个元素。实例中子字符串的出现顺序优先于 separator 中元素的顺序。

例如，考虑值为“abcdef”的实例。如果 separator 中的第一个元素为“ef”，且第二个元素为“bcde”，则拆分操作的结果将是“a”和“f”。这是因为先遇到实例中的子字符串“bcde”，且它匹配 separator 中的元素，然后才遇到子字符串“f”。 例如，考虑值为“abcdef”的实例。如果 separator 中的第一个元素为“ef”，且第二个元素为“bcde”，则拆分操作的结果将是“a”和“f”。这是因为先遇到实例中的子字符串“bcde”，且它匹配 separator 中的元素，然后才遇到子字符串“f”。 例如，考虑值为“abcdef”的实例。如果 separator 中的第一个元素为“ef”，且第二个元素为“bcde”，则拆分操作的结果将是“a”和“f”。这是因为先遇到实例中的子字符串“bcde”，且它匹配 separator 中的元素，然后才遇到子字符串“f”。

不过，如果 separator 的第一个元素为“bcd”，且第二个元素为“bc”，则拆分操作的结果将是“a”和“ef”。这是因为“bcd”是 separator 中第一个与实例中的分隔符匹配的分隔符。如果颠倒分隔符的顺序，使得第一个元素为“bc”且第二个元素为“bcd”，则结果将是“a”和“def”。 不过，如果 separator 的第一个元素为“bcd”，且第二个元素为“bc”，则拆分操作的结果将是“a”和“ef”。这是因为“bcd”是 separator 中第一个与实例中的分隔符匹配的分隔符。如果颠倒分隔符的顺序，使得第一个元素为“bc”且第二个元素为“bcd”，则结果将是“a”和“def”。 不过，如果 separator 的第一个元素为“bcd”，且第二个元素为“bc”，则拆分操作的结果将是“a”和“ef”。这是因为“bcd”是 separator 中第一个与实例中的分隔符匹配的分隔符。如果颠倒分隔符的顺序，使得第一个元素为“bc”且第二个元素为“bcd”，则结果将是“a”和“def”。

性能注意事项

Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。 Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。

如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。

此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。 此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。

对调用者的说明

在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。 在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。

下面的示例演示通过调用字符串的 String..::.Split(array<String>[]()[], StringSplitOptions) 方法（其 options 参数等于 StringSplitOptions..::.None 和 StringSplitOptions..::.RemoveEmptyEntries）所返回的数组中的差异。

Dim source As String = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]"
Dim stringSeparators() As String = {"[stop]"}
Dim result() As String

' Display the original string and delimiter string.
Console.WriteLine("Splitting the string:{0}   '{1}'.", vbCrLf, source)
Console.WriteLine()
Console.WriteLine("Using the delimiter string:{0}   '{1}'.", _
                  vbCrLf, stringSeparators(0))
Console.WriteLine()

' Split a string delimited by another string and return all elements.
result = source.Split(stringSeparators, StringSplitOptions.None)
Console.WriteLine("Result including all elements ({0} elements):", _
                  result.Length)
Console.Write("   ")
For Each s As String In result
   Console.Write("'{0}' ", IIf(String.IsNullOrEmpty(s), "<>", s))
Next
Console.WriteLine()
Console.WriteLine()

' Split delimited by another string and return all non-empty elements.
result = source.Split(stringSeparators, _
                      StringSplitOptions.RemoveEmptyEntries)
Console.WriteLine("Result including non-empty elements ({0} elements):", _
                  result.Length)
Console.Write("   ")
For Each s As String In result
   Console.Write("'{0}' ", IIf(String.IsNullOrEmpty(s), "<>", s))
Next
Console.WriteLine()
' This example displays the following output to the console:
'       Splitting the string:
'          "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
'       Using the delimiter string:
'          "[stop]"
'
'       Result using StringSplitOptions.None (all elements):
'          '<>' 'ONE' '<>' 'TWO' '<>' '<>' 'THREE' '<>' '<>'
'
'       Result using StringSplitOptions.RemoveEmptyEntries:
'          'ONE' 'TWO' 'THREE'

string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
string[] stringSeparators = new string[] {"[stop]"};
string[] result;

// Display the original string and delimiter string.
Console.WriteLine("Splitting the string:\n   \"{0}\".", source);
Console.WriteLine();
Console.WriteLine("Using the delimiter string:\n   \"{0}\"",
                  stringSeparators[0]);
Console.WriteLine();

// Split a string delimited by another string and return all elements.
result = source.Split(stringSeparators, StringSplitOptions.None);
Console.WriteLine("Result including all elements ({0} elements):",
                  result.Length);
Console.Write("   ");
foreach (string s in result)
{
   Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
}
Console.WriteLine();
Console.WriteLine();

// Split delimited by another string and return all non-empty elements.
result = source.Split(stringSeparators,
                      StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("Result including non-empty elements ({0} elements):",
                  result.Length);
Console.Write("   ");
foreach (string s in result)
{
   Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
}
Console.WriteLine();
/*
This example displays the following output to the console:

Splitting the string:
   "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
Using the delimiter string:
   "[stop]"

Result using StringSplitOptions.None (all elements):
   '<>' 'ONE' '<>' 'TWO' '<>' '<>' 'THREE' '<>' '<>'

Result using StringSplitOptions.RemoveEmptyEntries:
   'ONE' 'TWO' 'THREE'
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Split 重载
System 命名空间


String ..::.Split 方法 ( array<Char >[]()[], Int32, StringSplitOptions)

String
.
.
::
.
Split 方法 (
array<
Char
>
[]
()
[]
, Int32, StringSplitOptions)
String 类

返回的字符串数组包含此字符串中的子字符串（由指定 Unicode 字符数组的元素分隔）。参数指定要返回子字符串的最大数量，以及是否返回空数组元素。 返回的字符串数组包含此字符串中的子字符串（由指定 Unicode 字符数组的元素分隔）。参数指定要返回子字符串的最大数量，以及是否返回空数组元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function Split ( _
    separator As Char(), _
    count As Integer, _
    options As StringSplitOptions _
) As String()
[ComVisibleAttribute(false)]
public string[] Split(
    char[] separator,
    int count,
    StringSplitOptions options
)
[ComVisibleAttribute(false)]
public:
array<String^>^ Split(
    array<wchar_t>^ separator,
    int count,
    StringSplitOptions options
)
[<ComVisibleAttribute(false)>]
member Split :
        separator:char[] *
        count:int *
        options:StringSplitOptions -> string[]

参数

separator
类型：
array<
System Char
>
[]
()
[]

分隔此字符串中子字符串的 Unicode 字符数组、不包含分隔符的空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
count
类型： System Int32
要返回的子字符串的最大数量。
options
类型： System StringSplitOptions
要省略返回的数组中的空数组元素，则为 RemoveEmptyEntries；要包含返回的数组中的空数组元素，则为 None。

返回值

类型：
array<
System String
>
[]
()
[]

一个数组，其元素包含此字符串中的子字符串，这些子字符串由 separator 中的一个或多个字符分隔。有关更多信息，请参见“备注”部分。 一个数组，其元素包含此字符串中的子字符串，这些子字符串由 separator 中的一个或多个字符分隔。有关更多信息，请参见“备注”部分。
异常 | 条件
ArgumentOutOfRangeException | count 为负数。
ArgumentException | options 不是 StringSplitOptions 值之一。

返回的数组元素中不包含分隔符字符。

如果此实例不包含 separator 中的任何字符，或者 count 参数为 1，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果此实例不包含 separator 中的任何字符，或者 count 参数为 1，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果此实例不包含 separator 中的任何字符，或者 count 参数为 1，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。

如果 count 参数为零，或者 options 参数为 RemoveEmptyEntries 且此实例的长度为零，则返回空数组。

separator 的每一个元素都定义一个单独的分隔符字符。如果 options 参数为 None，且两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。 separator 的每一个元素都定义一个单独的分隔符字符。如果 options 参数为 None，且两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。

如果此实例中的子字符串比 count 多，则在第一个 count 减去 1 的返回值元素中返回第一个 count 减去 1 的子字符串，此实例中剩余的字符在返回值的最后一个元素中返回。

如果 count 大于子字符串的数量，则返回可用子字符串，并且不会引发异常。

性能注意事项

Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。 Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。

如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。

此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。 此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。

对调用者的说明

在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。 在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。

下面的示例使用 StringSplitOptions 枚举来包含或排除由 Split 方法生成的子字符串。

' This example demonstrates the String() methods that use
' the StringSplitOptions enumeration.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim s1 As String = ",ONE,,TWO,,,THREE,,"
        Dim s2 As String = "[stop]" & _
                           "ONE[stop][stop]" & _
                           "TWO[stop][stop][stop]" & _
                           "THREE[stop][stop]"
        Dim charSeparators() As Char = {","c}
        Dim stringSeparators() As String = {"[stop]"}
        Dim result() As String
        ' ------------------------------------------------------------------------------
        ' Split a string delimited by characters.
        ' ------------------------------------------------------------------------------
        Console.WriteLine("1) Split a string delimited by characters:" & vbCrLf)

        ' Display the original string and delimiter characters.
        Console.WriteLine("1a )The original string is ""{0}"".", s1)
        Console.WriteLine("The delimiter character is '{0}'." & vbCrLf, charSeparators(0))

        ' Split a string delimited by characters and return all elements.
        Console.WriteLine("1b) Split a string delimited by characters and " & _
                          "return all elements:")
        result = s1.Split(charSeparators, StringSplitOptions.None)
        Show(result)

        ' Split a string delimited by characters and return all non-empty elements.
        Console.WriteLine("1c) Split a string delimited by characters and " & _
                          "return all non-empty elements:")
        result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' Split the original string into the string and empty string before the
        ' delimiter and the remainder of the original string after the delimiter.
        Console.WriteLine("1d) Split a string delimited by characters and " & _
                          "return 2 elements:")
        result = s1.Split(charSeparators, 2, StringSplitOptions.None)
        Show(result)

        ' Split the original string into the string after the delimiter and the
        ' remainder of the original string after the delimiter.
        Console.WriteLine("1e) Split a string delimited by characters and " & _
                          "return 2 non-empty elements:")
        result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' ------------------------------------------------------------------------------
        ' Split a string delimited by another string.
        ' ------------------------------------------------------------------------------
        Console.WriteLine("2) Split a string delimited by another string:" & vbCrLf)

        ' Display the original string and delimiter string.
        Console.WriteLine("2a) The original string is ""{0}"".", s2)
        Console.WriteLine("The delimiter string is ""{0}""." & vbCrLf, stringSeparators(0))

        ' Split a string delimited by another string and return all elements.
        Console.WriteLine("2b) Split a string delimited by another string and " & _
                          "return all elements:")
        result = s2.Split(stringSeparators, StringSplitOptions.None)
        Show(result)

        ' Split the original string at the delimiter and return all non-empty elements.
        Console.WriteLine("2c) Split a string delimited by another string and " & _
                          "return all non-empty elements:")
        result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' Split the original string into the empty string before the
        ' delimiter and the remainder of the original string after the delimiter.
        Console.WriteLine("2d) Split a string delimited by another string and " & _
                          "return 2 elements:")
        result = s2.Split(stringSeparators, 2, StringSplitOptions.None)
        Show(result)

        ' Split the original string into the string after the delimiter and the
        ' remainder of the original string after the delimiter.
        Console.WriteLine("2e) Split a string delimited by another string and " & _
                          "return 2 non-empty elements:")
        result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

    End Sub 'Main

    ' Display the array of separated strings.
    Public Shared Sub Show(ByVal entries() As String)
        Console.WriteLine("The return value contains these {0} elements:", entries.Length)
        Dim entry As String
        For Each entry In  entries
            Console.Write("<{0}>", entry)
        Next entry
        Console.Write(vbCrLf & vbCrLf)

    End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'1) Split a string delimited by characters:
'
'1a )The original string is ",ONE,,TWO,,,THREE,,".
'The delimiter character is ','.
'
'1b) Split a string delimited by characters and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'1c) Split a string delimited by characters and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'1d) Split a string delimited by characters and return 2 elements:
'The return value contains these 2 elements:
'<><ONE,,TWO,,,THREE,,>
'
'1e) Split a string delimited by characters and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO,,,THREE,,>
'
'2) Split a string delimited by another string:
'
'2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
'The delimiter string is "[stop]".
'
'2b) Split a string delimited by another string and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'2c) Split a string delimited by another string and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'2d) Split a string delimited by another string and return 2 elements:
'The return value contains these 2 elements:
'<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>
'
'2e) Split a string delimited by another string and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO[stop][stop][stop]THREE[stop][stop]>
'

// This example demonstrates the String() methods that use
// the StringSplitOptions enumeration.
using System;

class Sample
{
    public static void Main()
    {
    string s1 = ",ONE,,TWO,,,THREE,,";
    string s2 = "[stop]" +
                "ONE[stop][stop]" +
                "TWO[stop][stop][stop]" +
                "THREE[stop][stop]";
    char[] charSeparators = new char[] {','};
    string[] stringSeparators = new string[] {"[stop]"};
    string[] result;
// ------------------------------------------------------------------------------
// Split a string delimited by characters.
// ------------------------------------------------------------------------------
    Console.WriteLine("1) Split a string delimited by characters:\n");

// Display the original string and delimiter characters.
    Console.WriteLine("1a )The original string is \"{0}\".", s1);
    Console.WriteLine("The delimiter character is '{0}'.\n",
                       charSeparators[0]);

// Split a string delimited by characters and return all elements.
    Console.WriteLine("1b) Split a string delimited by characters and " +
                      "return all elements:");
    result = s1.Split(charSeparators, StringSplitOptions.None);
    Show(result);

// Split a string delimited by characters and return all non-empty elements.
    Console.WriteLine("1c) Split a string delimited by characters and " +
                      "return all non-empty elements:");
    result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// Split the original string into the string and empty string before the
// delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("1d) Split a string delimited by characters and " +
                      "return 2 elements:");
    result = s1.Split(charSeparators, 2, StringSplitOptions.None);
    Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
    Console.WriteLine("1e) Split a string delimited by characters and " +
                      "return 2 non-empty elements:");
    result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// ------------------------------------------------------------------------------
// Split a string delimited by another string.
// ------------------------------------------------------------------------------
    Console.WriteLine("2) Split a string delimited by another string:\n");

// Display the original string and delimiter string.
    Console.WriteLine("2a) The original string is \"{0}\".", s2);
    Console.WriteLine("The delimiter string is \"{0}\".\n", stringSeparators[0]);

// Split a string delimited by another string and return all elements.
    Console.WriteLine("2b) Split a string delimited by another string and " +
                      "return all elements:");
    result = s2.Split(stringSeparators, StringSplitOptions.None);
    Show(result);

// Split the original string at the delimiter and return all non-empty elements.
    Console.WriteLine("2c) Split a string delimited by another string and " +
                      "return all non-empty elements:");
    result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// Split the original string into the empty string before the
// delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("2d) Split a string delimited by another string and " +
                      "return 2 elements:");
    result = s2.Split(stringSeparators, 2, StringSplitOptions.None);
    Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
    Console.WriteLine("2e) Split a string delimited by another string and " +
                      "return 2 non-empty elements:");
    result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
    Show(result);
    }

// Display the array of separated strings.
    public static void Show(string[] entries)
    {
    Console.WriteLine("The return value contains these {0} elements:", entries.Length);
    foreach (string entry in entries)
        {
        Console.Write("<{0}>", entry);
        }
    Console.Write("\n\n");
    }
}
/*
This example produces the following results:

1) Split a string delimited by characters:

1a )The original string is ",ONE,,TWO,,,THREE,,".
The delimiter character is ','.

1b) Split a string delimited by characters and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

1c) Split a string delimited by characters and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

1d) Split a string delimited by characters and return 2 elements:
The return value contains these 2 elements:
<><ONE,,TWO,,,THREE,,>

1e) Split a string delimited by characters and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO,,,THREE,,>

2) Split a string delimited by another string:

2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
The delimiter string is "[stop]".

2b) Split a string delimited by another string and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

2c) Split a string delimited by another string and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

2d) Split a string delimited by another string and return 2 elements:
The return value contains these 2 elements:
<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>

2e) Split a string delimited by another string and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO[stop][stop][stop]THREE[stop][stop]>

*/

// This example demonstrates the String.Split(Char[], Boolean) and
//                               String.Split(Char[], Int32, Boolean) methods
using namespace System;
void Show( array<String^>^entries )
{
   Console::WriteLine( "The return value contains these {0} elements:", entries->Length );
   System::Collections::IEnumerator^ myEnum = entries->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ entry = safe_cast<String^>(myEnum->Current);
      Console::Write( "<{0}>", entry );
   }

   Console::Write( "{0}{0}", Environment::NewLine );
}

int main()
{
   String^ s = ",one,,,two,,,,,three,,";
   array<Char>^sep = gcnew array<Char>{
      ','
   };
   array<String^>^result;

   //
   Console::WriteLine( "The original string is \"{0}\".", s );
   Console::WriteLine( "The separation character is '{0}'.", sep[ 0 ] );
   Console::WriteLine();

   //
   Console::WriteLine( "Split the string and return all elements:" );
   result = s->Split( sep, StringSplitOptions::None );
   Show( result );

   //
   Console::WriteLine( "Split the string and return all non-empty elements:" );
   result = s->Split( sep, StringSplitOptions::RemoveEmptyEntries );
   Show( result );

   //
   Console::WriteLine( "Split the string and return 2 elements:" );
   result = s->Split( sep, 2, StringSplitOptions::None );
   Show( result );

   //
   Console::WriteLine( "Split the string and return 2 non-empty elements:" );
   result = s->Split( sep, 2, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
}

/*
This example produces the following results:

The original string is ",one,,,two,,,,,three,,".
The separation character is ','.

Split the string and return all elements:
The return value contains these 12 elements:
<><one><><><two><><><><><three><><>

Split the string and return all non-empty elements:
The return value contains these 3 elements:
<one><two><three>

Split the string and return 2 elements:
The return value contains these 2 elements:
<><one,,,two,,,,,three,,>

Split the string and return 2 non-empty elements:
The return value contains these 2 elements:
<one><,,two,,,,,three,,>

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Split 重载
System 命名空间


String ..::.Split 方法 ( array<String >[]()[], Int32, StringSplitOptions)

String
.
.
::
.
Split 方法 (
array<
String
>
[]
()
[]
, Int32, StringSplitOptions)
String 类

返回的字符串数组包含此字符串中的子字符串（由指定字符串数组的元素分隔）。参数指定要返回子字符串的最大数量，以及是否返回空数组元素。 返回的字符串数组包含此字符串中的子字符串（由指定字符串数组的元素分隔）。参数指定要返回子字符串的最大数量，以及是否返回空数组元素。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function Split ( _
    separator As String(), _
    count As Integer, _
    options As StringSplitOptions _
) As String()
[ComVisibleAttribute(false)]
public string[] Split(
    string[] separator,
    int count,
    StringSplitOptions options
)
[ComVisibleAttribute(false)]
public:
array<String^>^ Split(
    array<String^>^ separator,
    int count,
    StringSplitOptions options
)
[<ComVisibleAttribute(false)>]
member Split :
        separator:string[] *
        count:int *
        options:StringSplitOptions -> string[]

参数

separator
类型：
array<
System String
>
[]
()
[]

分隔此字符串中子字符串的字符串数组、不包含分隔符的空数组或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
count
类型： System Int32
要返回的子字符串的最大数量。
options
类型： System StringSplitOptions
要省略返回的数组中的空数组元素，则为 RemoveEmptyEntries；要包含返回的数组中的空数组元素，则为 None。

返回值

类型：
array<
System String
>
[]
()
[]

一个数组，其元素包含此字符串中的子字符串，这些子字符串由 separator 中的一个或多个字符串分隔。有关更多信息，请参见“备注”部分。 一个数组，其元素包含此字符串中的子字符串，这些子字符串由 separator 中的一个或多个字符串分隔。有关更多信息，请参见“备注”部分。
异常 | 条件
ArgumentOutOfRangeException | count 为负数。
ArgumentException | options 不是 StringSplitOptions 值之一。

返回值详细信息

返回的数组元素中不包含分隔符字符串。

如果此实例不包含 separator 中的任何字符串，或者 count 参数为 1，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果此实例不包含 separator 中的任何字符串，或者 count 参数为 1，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。 如果此实例不包含 separator 中的任何字符串，或者 count 参数为 1，则返回的数组由包含此实例的单个元素组成。如果 separator 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含任何字符，则采用空白字符作为分隔符。空白字符由 Unicode 标准定义，如果将它们传递给 Char..::.IsWhiteSpace 方法，将返回 true。

如果 count 参数为零，或者 options 参数为 RemoveEmptyEntries 且此实例的长度为零，则返回空数组。

separator 的每一个元素都定义一个单独的分隔符字符。如果 options 参数为 None，且两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。 separator 的每一个元素都定义一个单独的分隔符字符。如果 options 参数为 None，且两个分隔符相邻，或者在此实例的开头或末尾找到分隔符，则相对应的数组元素包含 Empty。

如果此实例中的子字符串比 count 多，则在第一个 count 减去 1 的返回值元素中返回第一个 count 减去 1 的子字符串，此实例中剩余的字符在返回值的最后一个元素中返回。

如果 count 大于子字符串的数量，则返回可用子字符串，并且不会引发异常。

比较详细信息

Split 方法提取此字符串中的子字符串，这些子字符串由 separator 参数中的一个或多个字符串分隔，然后该方法将这些子字符串作为数组的元素返回。

Split 方法使用区分大小写的序号排序规则执行比较，从而查找分隔符。有关字、字符串和序号排序的更多信息，请参见 System.Globalization..::.CompareOptions 枚举。 Split 方法使用区分大小写的序号排序规则执行比较，从而查找分隔符。有关字、字符串和序号排序的更多信息，请参见 System.Globalization..::.CompareOptions 枚举。

Split 方法忽略 separator 的任何值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("") 的元素。

为了在 separator 中的字符串具有公共字符的情况下避免出现不明确的结果，Split 方法从实例值的开始进行到结尾，并匹配 separator 中与实例中的分隔符相等的第一个元素。实例中子字符串的出现顺序优先于 separator 中元素的顺序。 为了在 separator 中的字符串具有公共字符的情况下避免出现不明确的结果，Split 方法从实例值的开始进行到结尾，并匹配 separator 中与实例中的分隔符相等的第一个元素。实例中子字符串的出现顺序优先于 separator 中元素的顺序。

例如，考虑值为“abcdef”的实例。如果 separator 中的第一个元素为“ef”，且第二个元素为“bcde”，则拆分操作的结果将是“a”和“f”。这是因为先遇到实例中的子字符串“bcde”，且它匹配 separator 中的元素，然后才遇到子字符串“f”。 例如，考虑值为“abcdef”的实例。如果 separator 中的第一个元素为“ef”，且第二个元素为“bcde”，则拆分操作的结果将是“a”和“f”。这是因为先遇到实例中的子字符串“bcde”，且它匹配 separator 中的元素，然后才遇到子字符串“f”。 例如，考虑值为“abcdef”的实例。如果 separator 中的第一个元素为“ef”，且第二个元素为“bcde”，则拆分操作的结果将是“a”和“f”。这是因为先遇到实例中的子字符串“bcde”，且它匹配 separator 中的元素，然后才遇到子字符串“f”。

不过，如果 separator 的第一个元素为“bcd”，且第二个元素为“bc”，则拆分操作的结果将是“a”和“ef”。这是因为“bcd”是 separator 中第一个与实例中的分隔符匹配的分隔符。如果颠倒分隔符的顺序，使得第一个元素为“bc”且第二个元素为“bcd”，则结果将是“a”和“def”。 不过，如果 separator 的第一个元素为“bcd”，且第二个元素为“bc”，则拆分操作的结果将是“a”和“ef”。这是因为“bcd”是 separator 中第一个与实例中的分隔符匹配的分隔符。如果颠倒分隔符的顺序，使得第一个元素为“bc”且第二个元素为“bcd”，则结果将是“a”和“def”。 不过，如果 separator 的第一个元素为“bcd”，且第二个元素为“bc”，则拆分操作的结果将是“a”和“ef”。这是因为“bcd”是 separator 中第一个与实例中的分隔符匹配的分隔符。如果颠倒分隔符的顺序，使得第一个元素为“bc”且第二个元素为“bcd”，则结果将是“a”和“def”。

性能注意事项

Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。 Split 方法为返回的数组对象分配内存，同时还为每一个数组元素分配一个 String 对象。如果您的应用程序要求达到最佳性能，或者如果在您的应用程序中内存分配管理很关键，请考虑使用 IndexOf 或 IndexOfAny 方法，也可以选择使用 Compare 方法，在字符串中定位子字符串。

如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。 如果在分隔符字符处分割字符串，请使用 IndexOf 或 IndexOfAny 方法在字符串中定位分隔符字符。如果在分隔符字符串处分割字符串，请使用 IndexOf 或 IndexOfAny 方法定位分隔符字符串的第一个字符。然后使用 Compare 方法确定第一个字符后面的字符是否等于分隔符字符串的其余字符。

此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。 此外，如果在多个 Split 方法调用中使用相同的字符集拆分字符串，请考虑创建一个数组并在每个方法调用中都引用该数组。这可以极大地减少每个方法调用的额外系统开销。

对调用者的说明

在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。 在 .NET Framework 3.5 和早期版本中，如果为 Split 方法传递了值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或不包含字符的 separator 参数，该方法用来分割字符串的字符集将与 Trim 方法用来修整字符串的字符集略有不同。在 .NET Framework 4 中，这两种方法使用完全相同的 Unicode 空白字符集。

下面的示例使用 StringSplitOptions 枚举来包含或排除由 Split 方法生成的子字符串。

' This example demonstrates the String() methods that use
' the StringSplitOptions enumeration.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim s1 As String = ",ONE,,TWO,,,THREE,,"
        Dim s2 As String = "[stop]" & _
                           "ONE[stop][stop]" & _
                           "TWO[stop][stop][stop]" & _
                           "THREE[stop][stop]"
        Dim charSeparators() As Char = {","c}
        Dim stringSeparators() As String = {"[stop]"}
        Dim result() As String
        ' ------------------------------------------------------------------------------
        ' Split a string delimited by characters.
        ' ------------------------------------------------------------------------------
        Console.WriteLine("1) Split a string delimited by characters:" & vbCrLf)

        ' Display the original string and delimiter characters.
        Console.WriteLine("1a )The original string is ""{0}"".", s1)
        Console.WriteLine("The delimiter character is '{0}'." & vbCrLf, charSeparators(0))

        ' Split a string delimited by characters and return all elements.
        Console.WriteLine("1b) Split a string delimited by characters and " & _
                          "return all elements:")
        result = s1.Split(charSeparators, StringSplitOptions.None)
        Show(result)

        ' Split a string delimited by characters and return all non-empty elements.
        Console.WriteLine("1c) Split a string delimited by characters and " & _
                          "return all non-empty elements:")
        result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' Split the original string into the string and empty string before the
        ' delimiter and the remainder of the original string after the delimiter.
        Console.WriteLine("1d) Split a string delimited by characters and " & _
                          "return 2 elements:")
        result = s1.Split(charSeparators, 2, StringSplitOptions.None)
        Show(result)

        ' Split the original string into the string after the delimiter and the
        ' remainder of the original string after the delimiter.
        Console.WriteLine("1e) Split a string delimited by characters and " & _
                          "return 2 non-empty elements:")
        result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' ------------------------------------------------------------------------------
        ' Split a string delimited by another string.
        ' ------------------------------------------------------------------------------
        Console.WriteLine("2) Split a string delimited by another string:" & vbCrLf)

        ' Display the original string and delimiter string.
        Console.WriteLine("2a) The original string is ""{0}"".", s2)
        Console.WriteLine("The delimiter string is ""{0}""." & vbCrLf, stringSeparators(0))

        ' Split a string delimited by another string and return all elements.
        Console.WriteLine("2b) Split a string delimited by another string and " & _
                          "return all elements:")
        result = s2.Split(stringSeparators, StringSplitOptions.None)
        Show(result)

        ' Split the original string at the delimiter and return all non-empty elements.
        Console.WriteLine("2c) Split a string delimited by another string and " & _
                          "return all non-empty elements:")
        result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' Split the original string into the empty string before the
        ' delimiter and the remainder of the original string after the delimiter.
        Console.WriteLine("2d) Split a string delimited by another string and " & _
                          "return 2 elements:")
        result = s2.Split(stringSeparators, 2, StringSplitOptions.None)
        Show(result)

        ' Split the original string into the string after the delimiter and the
        ' remainder of the original string after the delimiter.
        Console.WriteLine("2e) Split a string delimited by another string and " & _
                          "return 2 non-empty elements:")
        result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

    End Sub 'Main

    ' Display the array of separated strings.
    Public Shared Sub Show(ByVal entries() As String)
        Console.WriteLine("The return value contains these {0} elements:", entries.Length)
        Dim entry As String
        For Each entry In  entries
            Console.Write("<{0}>", entry)
        Next entry
        Console.Write(vbCrLf & vbCrLf)

    End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'1) Split a string delimited by characters:
'
'1a )The original string is ",ONE,,TWO,,,THREE,,".
'The delimiter character is ','.
'
'1b) Split a string delimited by characters and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'1c) Split a string delimited by characters and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'1d) Split a string delimited by characters and return 2 elements:
'The return value contains these 2 elements:
'<><ONE,,TWO,,,THREE,,>
'
'1e) Split a string delimited by characters and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO,,,THREE,,>
'
'2) Split a string delimited by another string:
'
'2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
'The delimiter string is "[stop]".
'
'2b) Split a string delimited by another string and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'2c) Split a string delimited by another string and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'2d) Split a string delimited by another string and return 2 elements:
'The return value contains these 2 elements:
'<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>
'
'2e) Split a string delimited by another string and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO[stop][stop][stop]THREE[stop][stop]>
'

// This example demonstrates the String() methods that use
// the StringSplitOptions enumeration.
using System;

class Sample
{
    public static void Main()
    {
    string s1 = ",ONE,,TWO,,,THREE,,";
    string s2 = "[stop]" +
                "ONE[stop][stop]" +
                "TWO[stop][stop][stop]" +
                "THREE[stop][stop]";
    char[] charSeparators = new char[] {','};
    string[] stringSeparators = new string[] {"[stop]"};
    string[] result;
// ------------------------------------------------------------------------------
// Split a string delimited by characters.
// ------------------------------------------------------------------------------
    Console.WriteLine("1) Split a string delimited by characters:\n");

// Display the original string and delimiter characters.
    Console.WriteLine("1a )The original string is \"{0}\".", s1);
    Console.WriteLine("The delimiter character is '{0}'.\n",
                       charSeparators[0]);

// Split a string delimited by characters and return all elements.
    Console.WriteLine("1b) Split a string delimited by characters and " +
                      "return all elements:");
    result = s1.Split(charSeparators, StringSplitOptions.None);
    Show(result);

// Split a string delimited by characters and return all non-empty elements.
    Console.WriteLine("1c) Split a string delimited by characters and " +
                      "return all non-empty elements:");
    result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// Split the original string into the string and empty string before the
// delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("1d) Split a string delimited by characters and " +
                      "return 2 elements:");
    result = s1.Split(charSeparators, 2, StringSplitOptions.None);
    Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
    Console.WriteLine("1e) Split a string delimited by characters and " +
                      "return 2 non-empty elements:");
    result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// ------------------------------------------------------------------------------
// Split a string delimited by another string.
// ------------------------------------------------------------------------------
    Console.WriteLine("2) Split a string delimited by another string:\n");

// Display the original string and delimiter string.
    Console.WriteLine("2a) The original string is \"{0}\".", s2);
    Console.WriteLine("The delimiter string is \"{0}\".\n", stringSeparators[0]);

// Split a string delimited by another string and return all elements.
    Console.WriteLine("2b) Split a string delimited by another string and " +
                      "return all elements:");
    result = s2.Split(stringSeparators, StringSplitOptions.None);
    Show(result);

// Split the original string at the delimiter and return all non-empty elements.
    Console.WriteLine("2c) Split a string delimited by another string and " +
                      "return all non-empty elements:");
    result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// Split the original string into the empty string before the
// delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("2d) Split a string delimited by another string and " +
                      "return 2 elements:");
    result = s2.Split(stringSeparators, 2, StringSplitOptions.None);
    Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
    Console.WriteLine("2e) Split a string delimited by another string and " +
                      "return 2 non-empty elements:");
    result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
    Show(result);
    }

// Display the array of separated strings.
    public static void Show(string[] entries)
    {
    Console.WriteLine("The return value contains these {0} elements:", entries.Length);
    foreach (string entry in entries)
        {
        Console.Write("<{0}>", entry);
        }
    Console.Write("\n\n");
    }
}
/*
This example produces the following results:

1) Split a string delimited by characters:

1a )The original string is ",ONE,,TWO,,,THREE,,".
The delimiter character is ','.

1b) Split a string delimited by characters and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

1c) Split a string delimited by characters and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

1d) Split a string delimited by characters and return 2 elements:
The return value contains these 2 elements:
<><ONE,,TWO,,,THREE,,>

1e) Split a string delimited by characters and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO,,,THREE,,>

2) Split a string delimited by another string:

2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
The delimiter string is "[stop]".

2b) Split a string delimited by another string and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

2c) Split a string delimited by another string and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

2d) Split a string delimited by another string and return 2 elements:
The return value contains these 2 elements:
<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>

2e) Split a string delimited by another string and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO[stop][stop][stop]THREE[stop][stop]>

*/

// This example demonstrates the String.Split(Char[], Boolean) and
//                               String.Split(Char[], Int32, Boolean) methods
using namespace System;
void Show( array<String^>^entries )
{
   Console::WriteLine( "The return value contains these {0} elements:", entries->Length );
   System::Collections::IEnumerator^ myEnum = entries->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ entry = safe_cast<String^>(myEnum->Current);
      Console::Write( "<{0}>", entry );
   }

   Console::Write( "{0}{0}", Environment::NewLine );
}

int main()
{
   String^ s = ",one,,,two,,,,,three,,";
   array<Char>^sep = gcnew array<Char>{
      ','
   };
   array<String^>^result;

   //
   Console::WriteLine( "The original string is \"{0}\".", s );
   Console::WriteLine( "The separation character is '{0}'.", sep[ 0 ] );
   Console::WriteLine();

   //
   Console::WriteLine( "Split the string and return all elements:" );
   result = s->Split( sep, StringSplitOptions::None );
   Show( result );

   //
   Console::WriteLine( "Split the string and return all non-empty elements:" );
   result = s->Split( sep, StringSplitOptions::RemoveEmptyEntries );
   Show( result );

   //
   Console::WriteLine( "Split the string and return 2 elements:" );
   result = s->Split( sep, 2, StringSplitOptions::None );
   Show( result );

   //
   Console::WriteLine( "Split the string and return 2 non-empty elements:" );
   result = s->Split( sep, 2, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
}

/*
This example produces the following results:

The original string is ",one,,,two,,,,,three,,".
The separation character is ','.

Split the string and return all elements:
The return value contains these 12 elements:
<><one><><><two><><><><><three><><>

Split the string and return all non-empty elements:
The return value contains these 3 elements:
<one><two><three>

Split the string and return 2 elements:
The return value contains these 2 elements:
<><one,,,two,,,,,three,,>

Split the string and return 2 non-empty elements:
The return value contains these 2 elements:
<one><,,two,,,,,three,,>

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
Split 重载
System 命名空间


String ..::.StartsWith 方法

String
.
.
::
.
StartsWith 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

确定此字符串实例的开头是否与指定的字符串匹配。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.StartsWith 方法 (String)

String
.
.
::
.
StartsWith 方法 (String)
String 类

确定此字符串实例的开头是否与指定的字符串匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function StartsWith ( _
    value As String _
) As Boolean
public bool StartsWith(
    string value
)
public:
bool StartsWith(
    String^ value
)
member StartsWith :
        value:string -> bool

参数

value
类型： System String
要比较的字符串。

返回值

类型： System Boolean
如果 value 与此字符串的开头匹配，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法将 value 与位于此实例开头、与 value 长度相同的子字符串进行比较，并返回它们是否相等的指示。若要相等，value 必须是空字符串 (String..::.Empty)、对此同一实例的引用，或者必须与此实例的开头匹配。 此方法将 value 与位于此实例开头、与 value 长度相同的子字符串进行比较，并返回它们是否相等的指示。若要相等，value 必须是空字符串 (String..::.Empty)、对此同一实例的引用，或者必须与此实例的开头匹配。

此方法使用当前区域性执行单词（区分大小写和区域性）比较。

对调用者的说明

如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的字符串比较规则确定字符串是否以特定子字符串开头，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 StartsWith(String, StringComparison) 方法重载。 如 在 .NET Framework 中使用字符串的最佳做法 中所述，我们建议您避免调用替换默认值的字符串比较方法，而是调用需要显式指定参数的方法。若要使用当前区域性的字符串比较规则确定字符串是否以特定子字符串开头，请为它的 comparisonType 参数使用 StringComparison..::.CurrentCulture 的值调用 StartsWith(String, StringComparison) 方法重载。

下面的示例演示如何使用 StartsWith 方法。

Imports System

Public Class EndsWithTest

    Public Shared Sub Main()
        Dim strSource As String() = {"<b>This is bold text</b>", _
                    "<H1>This is large Text</H1>", _
                    "<b><i><font color = green>This has multiple tags</font></i></b>", _
                    "<b>This has <i>embedded</i> tags.</b>", _
                    "<This line simply begins with a lesser than symbol, it should not be modified"}

        ' process a string that contains html tags
        ' this sample does not remove embedded tags (tags in the middle of a line)

        Console.WriteLine("The following lists the items before the tags have been stripped:")
        Console.WriteLine("-----------------------------------------------------------------")

        ' print out the initial array of strings
        Dim s As String
        For Each s In  strSource
            Console.WriteLine(s)
        Next s

        Console.WriteLine()

        Console.WriteLine("The following lists the items after the tags have been stripped:")
        Console.WriteLine("----------------------------------------------------------------")

        ' print out the array of strings
        For Each s In  strSource
            Console.WriteLine(StripStartTags(s))
        Next s

    End Sub 'Main

    Private Shared Function StripStartTags(item As String) As String

        ' try to find a tag at the start of the line using StartsWith
        If item.Trim().StartsWith("<") Then

            ' now search for the closing tag...
           Dim lastLocation As Integer = item.IndexOf(">")

            If lastLocation >= 0 Then
                ' remove the identified section, if it is a valid region
                item = item.Substring((lastLocation + 1))
            End If
        End If

        Return item

    End Function 'StripStartTags

End Class 'EndsWithTest

using System;

public class EndsWithTest {
    public static void Main() {

        // process a string that contains html tags
        // this sample does not remove embedded tags (tags in the middle of a line)

        string [] strSource = { "<b>This is bold text</b>", "<H1>This is large Text</H1>",
                "<b><i><font color=green>This has multiple tags</font></i></b>",
                "<b>This has <i>embedded</i> tags.</b>",
                "<This line simply begins with a lesser than symbol, it should not be modified" };

        Console.WriteLine("The following lists the items before the tags have been stripped:");
        Console.WriteLine("-----------------------------------------------------------------");

        // print out the initial array of strings
        foreach ( string s in strSource )
            Console.WriteLine( s );

        Console.WriteLine();

        Console.WriteLine("The following lists the items after the tags have been stripped:");
        Console.WriteLine("----------------------------------------------------------------");

        // print out the array of strings
        foreach ( string s in strSource )
            Console.WriteLine( StripStartTags( s ) );
    }

    private static string StripStartTags( string item ) {

        // try to find a tag at the start of the line using StartsWith
        if (item.Trim().StartsWith("<")) {

            // now search for the closing tag...
            int lastLocation = item.IndexOf( ">" );

            // remove the identified section, if it is a valid region
            if ( lastLocation >= 0 )
                item =  item.Substring( lastLocation + 1 );
        }

        return item;
    }
}

using namespace System;
using namespace System::Collections;
String^ StripStartTags( String^ item )
{

   // try to find a tag at the start of the line using StartsWith
   if ( item->Trim()->StartsWith( "<" ) )
   {

      // now search for the closing tag->->.
      int lastLocation = item->IndexOf( ">" );

      // remove the identified section, if it is a valid region
      if ( lastLocation >= 0 )
            item = item->Substring( lastLocation + 1 );
   }

   return item;
}

int main()
{

   // process a string that contains html tags
   // this sample does not remove embedded tags (tags in the middle of a line)
   array<String^>^strSource = {"<b>This is bold text</b>","<H1>This is large Text</H1>","<b><i><font color=green>This has multiple tags</font></i></b>","<b>This has <i>embedded</i> tags.</b>","<This line simply begins with a lesser than symbol, it should not be modified"};
   Console::WriteLine( "The following lists the items before the tags have been stripped:" );
   Console::WriteLine( "-----------------------------------------------------------------" );

   // print out the initial array of strings
   IEnumerator^ myEnum1 = strSource->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( s );
   }

   Console::WriteLine();
   Console::WriteLine( "The following lists the items after the tags have been stripped:" );
   Console::WriteLine( "----------------------------------------------------------------" );

   // print [Out] the* array of strings
   IEnumerator^ myEnum2 = strSource->GetEnumerator();
   while ( myEnum2->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum2->Current);
      Console::WriteLine( StripStartTags( s ) );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
StartsWith 重载
System 命名空间
EndsWith


String ..::.StartsWith 方法 (String, StringComparison)

String
.
.
::
.
StartsWith 方法 (String, StringComparison)
String 类

确定在使用指定的比较选项进行比较时此字符串实例的开头是否与指定的字符串匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Function StartsWith ( _
    value As String, _
    comparisonType As StringComparison _
) As Boolean
[ComVisibleAttribute(false)]
public bool StartsWith(
    string value,
    StringComparison comparisonType
)
[ComVisibleAttribute(false)]
public:
bool StartsWith(
    String^ value,
    StringComparison comparisonType
)
[<ComVisibleAttribute(false)>]
member StartsWith :
        value:string *
        comparisonType:StringComparison -> bool

参数

value
类型： System String
要比较的字符串。
comparisonType
类型： System StringComparison
枚举值之一，用于确定如何比较此字符串与 value。

返回值

类型： System Boolean
如果 value 参数与此字符串的开头匹配，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | comparisonType 不是一个 StringComparison 值。

StartsWith 方法将 value 参数与位于此字符串开头的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是对此同一字符串的引用，为空字符串 ("")，或者与此字符串的开头匹配。StartsWith 方法执行的比较类型取决于 comparisonType 参数的值。 StartsWith 方法将 value 参数与位于此字符串开头的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是对此同一字符串的引用，为空字符串 ("")，或者与此字符串的开头匹配。StartsWith 方法执行的比较类型取决于 comparisonType 参数的值。 StartsWith 方法将 value 参数与位于此字符串开头的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是对此同一字符串的引用，为空字符串 ("")，或者与此字符串的开头匹配。StartsWith 方法执行的比较类型取决于 comparisonType 参数的值。

下面的示例确定字符串是否以特定的子字符串开始。比较结果受以下因素的影响：区域性的选择，是否忽略大小写，是否执行序号比较。 下面的示例确定字符串是否以特定的子字符串开始。比较结果受以下因素的影响：区域性的选择，是否忽略大小写，是否执行序号比较。

' This example demonstrates the
' System.String.StartsWith(String, StringComparison) method.

Imports System
Imports System.Threading

Class Sample
    Public Shared Sub Main()
        Dim intro As String = "Determine whether a string starts with another string, " & _
                              "using" & vbCrLf & "  different values of StringComparison."

        Dim scValues As StringComparison() =  { _
                        StringComparison.CurrentCulture, _
                        StringComparison.CurrentCultureIgnoreCase, _
                        StringComparison.InvariantCulture, _
                        StringComparison.InvariantCultureIgnoreCase, _
                        StringComparison.Ordinal, _
                        StringComparison.OrdinalIgnoreCase }
        '
        Console.Clear()
        Console.WriteLine(intro)

        ' Display the current culture because the culture-specific comparisons
        ' can produce different results with different cultures.
        Console.WriteLine("The current culture is {0}." & vbCrLf, _
                           Thread.CurrentThread.CurrentCulture.Name)
        ' Determine whether three versions of the letter I are equal to each other.
        Dim sc As StringComparison
        For Each sc In  scValues
            Console.WriteLine("StringComparison.{0}:", sc)
            Test("ABCxyz", "ABC", sc)
            Test("ABCxyz", "abc", sc)
            Console.WriteLine()
        Next sc

    End Sub 'Main

    Protected Shared Sub Test(ByVal x As String, ByVal y As String, _
                              ByVal comparison As StringComparison)
        Dim resultFmt As String = """{0}"" {1} with ""{2}""."
        Dim result As String = "does not start"
        '
        If x.StartsWith(y, comparison) Then
            result = "starts"
        End If
        Console.WriteLine(resultFmt, x, result, y)

    End Sub 'Test
End Class 'Sample

'
'This code example produces the following results:
'
'Determine whether a string starts with another string, using
'  different values of StringComparison.
'The current culture is en-US.
'
'StringComparison.CurrentCulture:
'"ABCxyz" starts with "ABC".
'"ABCxyz" does not start with "abc".
'
'StringComparison.CurrentCultureIgnoreCase:
'"ABCxyz" starts with "ABC".
'"ABCxyz" starts with "abc".
'
'StringComparison.InvariantCulture:
'"ABCxyz" starts with "ABC".
'"ABCxyz" does not start with "abc".
'
'StringComparison.InvariantCultureIgnoreCase:
'"ABCxyz" starts with "ABC".
'"ABCxyz" starts with "abc".
'
'StringComparison.Ordinal:
'"ABCxyz" starts with "ABC".
'"ABCxyz" does not start with "abc".
'
'StringComparison.OrdinalIgnoreCase:
'"ABCxyz" starts with "ABC".
'"ABCxyz" starts with "abc".
'

// This example demonstrates the
// System.String.StartsWith(String, StringComparison) method.

using System;
using System.Threading;

class Sample
{
    public static void Main()
    {
    string intro = "Determine whether a string starts with another string, " +
                   "using\n  different values of StringComparison.";

    StringComparison[] scValues = {
        StringComparison.CurrentCulture,
        StringComparison.CurrentCultureIgnoreCase,
        StringComparison.InvariantCulture,
        StringComparison.InvariantCultureIgnoreCase,
        StringComparison.Ordinal,
        StringComparison.OrdinalIgnoreCase };

//
    Console.Clear();
    Console.WriteLine(intro);

// Display the current culture because the culture-specific comparisons
// can produce different results with different cultures.
    Console.WriteLine("The current culture is {0}.\n",
                       Thread.CurrentThread.CurrentCulture.Name);

// Determine whether three versions of the letter I are equal to each other.
    foreach (StringComparison sc in scValues)
        {
        Console.WriteLine("StringComparison.{0}:", sc);
        Test("ABCxyz", "ABC", sc);
        Test("ABCxyz", "abc", sc);
        Console.WriteLine();
        }
    }

    protected static void Test(string x, string y, StringComparison comparison)
    {
    string resultFmt = "\"{0}\" {1} with \"{2}\".";
    string result = "does not start";
//
    if (x.StartsWith(y, comparison))
        result = "starts";
    Console.WriteLine(resultFmt, x, result, y);
    }
}

/*
This code example produces the following results:

Determine whether a string starts with another string, using
  different values of StringComparison.
The current culture is en-US.

StringComparison.CurrentCulture:
"ABCxyz" starts with "ABC".
"ABCxyz" does not start with "abc".

StringComparison.CurrentCultureIgnoreCase:
"ABCxyz" starts with "ABC".
"ABCxyz" starts with "abc".

StringComparison.InvariantCulture:
"ABCxyz" starts with "ABC".
"ABCxyz" does not start with "abc".

StringComparison.InvariantCultureIgnoreCase:
"ABCxyz" starts with "ABC".
"ABCxyz" starts with "abc".

StringComparison.Ordinal:
"ABCxyz" starts with "ABC".
"ABCxyz" does not start with "abc".

StringComparison.OrdinalIgnoreCase:
"ABCxyz" starts with "ABC".
"ABCxyz" starts with "abc".

*/

// This example demonstrates the
// System::String->StartsWith(String, StringComparison) method.

using namespace System;
using namespace System::Threading;

static void Test(String^ testString, String^ searchString,
    StringComparison comparison)
{
    String^ resultFormat = "\"{0}\" {1} with \"{2}\".";
    String^ resultString = "does not start";

    if (testString->StartsWith(searchString, comparison))
    {
        resultString = "starts";
    }
    Console::WriteLine(resultFormat, testString, resultString, searchString);
}

int main()
{
    String^ introMessage =
        "Determine whether a string starts with another string, " +
        "using\ndifferent values of StringComparison.";

    array<StringComparison>^ comparisonValues = {
        StringComparison::CurrentCulture,
        StringComparison::CurrentCultureIgnoreCase,
        StringComparison::InvariantCulture,
        StringComparison::InvariantCultureIgnoreCase,
        StringComparison::Ordinal, StringComparison::OrdinalIgnoreCase};

    Console::Clear();
    Console::WriteLine(introMessage);

    // Display the current culture because the culture-specific comparisons
    // can produce different results with different cultures.
    Console::WriteLine("The current culture is {0}.\n",
        Thread::CurrentThread->CurrentCulture->Name);
    // Perform two tests for each StringComparison
    for each(StringComparison stringCmp in comparisonValues)
    {
        Console::WriteLine("StringComparison.{0}:", stringCmp);
        Test("ABCxyz", "ABC", stringCmp);
        Test("ABCxyz", "abc", stringCmp);
        Console::WriteLine();
    }
}

/*
This code example produces the following results:

Determine whether a string starts with another string, using
different values of StringComparison.
The current culture is en-US.

StringComparison.CurrentCulture:
"ABCxyz" starts with "ABC".
"ABCxyz" does not start with "abc".

StringComparison.CurrentCultureIgnoreCase:
"ABCxyz" starts with "ABC".
"ABCxyz" starts with "abc".

StringComparison.InvariantCulture:
"ABCxyz" starts with "ABC".
"ABCxyz" does not start with "abc".

StringComparison.InvariantCultureIgnoreCase:
"ABCxyz" starts with "ABC".
"ABCxyz" starts with "abc".

StringComparison.Ordinal:
"ABCxyz" starts with "ABC".
"ABCxyz" does not start with "abc".

StringComparison.OrdinalIgnoreCase:
"ABCxyz" starts with "ABC".
"ABCxyz" starts with "abc".

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
StartsWith 重载
System 命名空间
StringComparison


String ..::.StartsWith 方法 (String, Boolean, CultureInfo)

String
.
.
::
.
StartsWith 方法 (String, Boolean, CultureInfo)
String 类

确定在使用指定的区域性进行比较时此字符串实例的开头是否与指定的字符串匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function StartsWith ( _
    value As String, _
    ignoreCase As Boolean, _
    culture As CultureInfo _
) As Boolean
public bool StartsWith(
    string value,
    bool ignoreCase,
    CultureInfo culture
)
public:
bool StartsWith(
    String^ value,
    bool ignoreCase,
    CultureInfo^ culture
)
member StartsWith :
        value:string *
        ignoreCase:bool *
        culture:CultureInfo -> bool

参数

value
类型： System String
要比较的字符串。
ignoreCase
类型： System Boolean
要在比较过程中忽略大小写，则为 true；否则为 false。
culture
类型： System.Globalization CultureInfo
确定如何对此字符串与 value 进行比较的区域性信息。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性。 确定如何对此字符串与 value 进行比较的区域性信息。如果 culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性。

返回值

类型： System Boolean
如果 value 参数与此字符串的开头匹配，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法将 value 参数与位于此字符串开头、与 value 长度相同的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是空字符串 (String..::.Empty)、对此同一实例的引用，或者必须与此实例的开头匹配。 此方法将 value 参数与位于此字符串开头、与 value 长度相同的子字符串进行比较，并返回指示它们是否相等的值。若要相等，value 必须是空字符串 (String..::.Empty)、对此同一实例的引用，或者必须与此实例的开头匹配。

此方法使用指定的大小写和区域性执行比较。

下面的示例确定一个字符串是否出现在另一个字符串的开头。使用影响搜索结果的区分大小写、不区分大小写和不同的区域性，多次调用 StartsWith 方法。 下面的示例确定一个字符串是否出现在另一个字符串的开头。使用影响搜索结果的区分大小写、不区分大小写和不同的区域性，多次调用 StartsWith 方法。

' This code example demonstrates the
' System.String.StartsWith(String, ..., CultureInfo) method.

Imports System
Imports System.Threading
Imports System.Globalization

Class Sample
    Public Shared Sub Main()
        Dim msg1 As String = "Search for the target string ""{0}"" in the string ""{1}""." & vbCrLf
        Dim msg2 As String = "Using the {0} - ""{1}"" culture:"
        Dim msg3 As String = "  The string to search ends with the target string: {0}"
        Dim result As Boolean = False
        Dim ci As CultureInfo

        ' Define a target string to search for.
        ' U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
        Dim capitalARing As String = " "

        ' Define a string to search.
        ' The result of combining the characters LATIN SMALL LETTER A and COMBINING
        ' RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
        ' LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
        Dim aRingXYZ As String = "a " & "xyz"

        ' Clear the screen and display an introduction.
        Console.Clear()

        ' Display the string to search for and the string to search.
        Console.WriteLine(msg1, capitalARing, aRingXYZ)

        ' Search using English-United States culture.
        ci = New CultureInfo("en-US")
        Console.WriteLine(msg2, ci.DisplayName, ci.Name)

        Console.WriteLine("Case sensitive:")
        result = aRingXYZ.StartsWith(capitalARing, False, ci)
        Console.WriteLine(msg3, result)

        Console.WriteLine("Case insensitive:")
        result = aRingXYZ.StartsWith(capitalARing, True, ci)
        Console.WriteLine(msg3, result)
        Console.WriteLine()

        ' Search using Swedish-Sweden culture.
        ci = New CultureInfo("sv-SE")
        Console.WriteLine(msg2, ci.DisplayName, ci.Name)

        Console.WriteLine("Case sensitive:")
        result = aRingXYZ.StartsWith(capitalARing, False, ci)
        Console.WriteLine(msg3, result)

        Console.WriteLine("Case insensitive:")
        result = aRingXYZ.StartsWith(capitalARing, True, ci)
        Console.WriteLine(msg3, result)

    End Sub 'Main
End Class 'Sample

'
'Note: This code example was executed on a console whose user interface
'culture is "en-US" (English-United States).
'
'Search for the target string " " in the string "a°xyz".
'
'Using the English (United States) - "en-US" culture:
'Case sensitive:
'  The string to search ends with the target string: False
'Case insensitive:
'  The string to search ends with the target string: True
'
'Using the Swedish (Sweden) - "sv-SE" culture:
'Case sensitive:
'  The string to search ends with the target string: False
'Case insensitive:
'  The string to search ends with the target string: False
'

// This code example demonstrates the
// System.String.StartsWith(String, ..., CultureInfo) method.

using System;
using System.Threading;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    string msg1 = "Search for the target string \"{0}\" in the string \"{1}\".\n";
    string msg2 = "Using the {0} - \"{1}\" culture:";
    string msg3 = "  The string to search ends with the target string: {0}";
    bool result = false;
    CultureInfo ci;

// Define a target string to search for.
// U+00c5 = LATIN CAPITAL LETTER A WITH RING ABOVE
    string capitalARing = "\u00c5";

// Define a string to search.
// The result of combining the characters LATIN SMALL LETTER A and COMBINING
// RING ABOVE (U+0061, U+030a) is linguistically equivalent to the character
// LATIN SMALL LETTER A WITH RING ABOVE (U+00e5).
    string aRingXYZ = "\u0061\u030a" + "xyz";

// Clear the screen and display an introduction.
    Console.Clear();

// Display the string to search for and the string to search.
    Console.WriteLine(msg1, capitalARing, aRingXYZ);

// Search using English-United States culture.
    ci = new CultureInfo("en-US");
    Console.WriteLine(msg2, ci.DisplayName, ci.Name);

    Console.WriteLine("Case sensitive:");
    result = aRingXYZ.StartsWith(capitalARing, false, ci);
    Console.WriteLine(msg3, result);

    Console.WriteLine("Case insensitive:");
    result = aRingXYZ.StartsWith(capitalARing, true, ci);
    Console.WriteLine(msg3, result);
    Console.WriteLine();

// Search using Swedish-Sweden culture.
    ci = new CultureInfo("sv-SE");
    Console.WriteLine(msg2, ci.DisplayName, ci.Name);

    Console.WriteLine("Case sensitive:");
    result = aRingXYZ.StartsWith(capitalARing, false, ci);
    Console.WriteLine(msg3, result);

    Console.WriteLine("Case insensitive:");
    result = aRingXYZ.StartsWith(capitalARing, true, ci);
    Console.WriteLine(msg3, result);
    }
}

/*
Note: This code example was executed on a console whose user interface
culture is "en-US" (English-United States).

Search for the target string " " in the string "a xyz".

Using the English (United States) - "en-US" culture:
Case sensitive:
  The string to search ends with the target string: False
Case insensitive:
  The string to search ends with the target string: True

Using the Swedish (Sweden) - "sv-SE" culture:
Case sensitive:
  The string to search ends with the target string: False
Case insensitive:
  The string to search ends with the target string: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
StartsWith 重载
System 命名空间


String ..::.Substring 方法

String
.
.
::
.
Substring 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

从此实例检索子字符串。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Substring 方法 (Int32)

String
.
.
::
.
Substring 方法 (Int32)
String 类

从此实例检索子字符串。子字符串从指定的字符位置开始。 从此实例检索子字符串。子字符串从指定的字符位置开始。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Substring ( _
    startIndex As Integer _
) As String
public string Substring(
    int startIndex
)
public:
String^ Substring(
    int startIndex
)
member Substring :
        startIndex:int -> string

参数

startIndex
类型： System Int32
此实例中子字符串的起始字符位置（从零开始）。

返回值

类型： System String
与此实例中在 startIndex 处开头的子字符串等效的一个字符串；如果 startIndex 等于此实例的长度，则为 Empty。
异常 | 条件
ArgumentOutOfRangeException | startIndex 小于零或大于此实例的长度。

索引是从零开始的。

说明 说明

此方法不修改当前实例的值。而是返回一个从当前字符串中的 startIndex 位置开始的新字符串。 此方法不修改当前实例的值。而是返回一个从当前字符串中的 startIndex 位置开始的新字符串。

下面的示例演示如何从字符串中获取子字符串。

Public Class SubStringTest

    Public Shared Sub Main()
        Dim info As String() = {"Name: Felica Walker", "Title: Mz.", "Age: 47", "Location: Paris", "Gender: F"}
        Dim found As Integer = 0

        Console.WriteLine("The initial values in the array are:")
        Dim s As String
        For Each s In  info
            Console.WriteLine(s)

        Next s
        Console.WriteLine("{0}We want to retrieve only the key information. That is:", Environment.NewLine)

        For Each s In  info
            found = s.IndexOf(":")
            Console.WriteLine(s.Substring((found + 1)).Trim())
        Next s
    End Sub 'Main
End Class 'SubStringTest
' The example displays the following output to the console:
'       The initial values in the array are:
'       Name: Felica Walker
'       Title: Mz.
'       Age: 47
'       Location: Paris
'       Gender: F
'
'       We want to retrieve only the key information. That is:
'       Felica Walker
'       Mz.
'       47
'       Paris
'       F

using System;

public class SubStringTest {
    public static void Main() {

        string [] info = {"Name: Felica Walker", "Title: Mz.", "Age: 47", "Location: Paris", "Gender: F"};
        int found = 0;

        Console.WriteLine("The initial values in the array are:");
        foreach (string s in info)
            Console.WriteLine(s);

        Console.WriteLine("{0}We want to retrieve only the key information. That is:", Environment.NewLine);

        foreach (string s in info) {
            found = s.IndexOf(":");
            Console.WriteLine(s.Substring(found + 1).Trim());
        }
    }
}
// The example displays the following output to the console:
//       The initial values in the array are:
//       Name: Felica Walker
//       Title: Mz.
//       Age: 47
//       Location: Paris
//       Gender: F
//
//       We want to retrieve only the key information. That is:
//       Felica Walker
//       Mz.
//       47
//       Paris
//       F

using namespace System;
using namespace System::Collections;
int main()
{
   array<String^>^info = {"Name: Felica Walker","Title: Mz.","Age: 47","Location: Paris","Gender: F"};
   int found = 0;
   Console::WriteLine( "The initial values in the array are:" );
   IEnumerator^ myEnum1 = info->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( s );
   }

   Console::WriteLine( "\nWe want to retrieve only the key information. That is:" );
   IEnumerator^ myEnum2 = info->GetEnumerator();
   while ( myEnum2->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum2->Current);
      found = s->IndexOf( ":" );
      Console::WriteLine( s->Substring( found + 1 )->Trim() );
   }
}
// The example displays the following output to the console:
//       The initial values in the array are:
//       Name: Felica Walker
//       Title: Mz.
//       Age: 47
//       Location: Paris
//       Gender: F
//
//       We want to retrieve only the key information. That is:
//       Felica Walker
//       Mz.
//       47
//       Paris
//       F

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Substring 重载
System 命名空间
Int32
Concat
Insert
Join
Remove
Replace
Split
Trim


String ..::.Substring 方法 (Int32, Int32)

String
.
.
::
.
Substring 方法 (Int32, Int32)
String 类

从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。 从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Substring ( _
    startIndex As Integer, _
    length As Integer _
) As String
public string Substring(
    int startIndex,
    int length
)
public:
String^ Substring(
    int startIndex,
    int length
)
member Substring :
        startIndex:int *
        length:int -> string

参数

startIndex
类型： System Int32
此实例中子字符串的起始字符位置（从零开始）。
length
类型： System Int32
子字符串中的字符数。

返回值

类型： System String
与此实例中在 startIndex 处开头、长度为 length 的子字符串等效的一个字符串，如果 startIndex 等于此实例的长度且 length 为零，则为 Empty。
异常 | 条件
ArgumentOutOfRangeException | startIndex 加 length 之和指示的位置不在此实例中。 - 或 - startIndex 或 length 小于零。

startIndex 从零开始。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，具有从当前字符串中 startIndex 位置开始的 length 个字符。 此方法不修改当前实例的值。而是返回一个新字符串，具有从当前字符串中 startIndex 位置开始的 length 个字符。

下面的示例在三种情况下使用 Substring 方法，在字符串中分隔子字符串。在两种情况下，在比较中使用子字符串，在第三种情况下，由于指定的参数无效而引发异常。 下面的示例在三种情况下使用 Substring 方法，在字符串中分隔子字符串。在两种情况下，在比较中使用子字符串，在第三种情况下，由于指定的参数无效而引发异常。

Dim myString As String = "abc"
Dim test1 As Boolean = myString.Substring(2, 1).Equals("c") ' This is true.
Console.WriteLine(test1)
Dim test2 As Boolean = String.IsNullOrEmpty(myString.Substring(3, 0)) ' This is true.
Console.WriteLine(test2)
Try
   Dim str3 As String = myString.Substring(3, 1) ' This throws ArgumentOutOfRangeException.
   Console.WriteLine(str3)
Catch e As ArgumentOutOfRangeException
   Console.WriteLIne(e.Message)
End Try

String myString = "abc";
bool test1 = myString.Substring(2, 1).Equals("c"); // This is true.
Console.WriteLine(test1);
bool test2 = String.IsNullOrEmpty(myString.Substring(3, 0)); // This is true.
Console.WriteLine(test2);
try {
   string str3 = myString.Substring(3, 1); // This throws ArgumentOutOfRangeException.
   Console.WriteLine(str3);
}
catch (ArgumentOutOfRangeException e) {
   Console.WriteLine(e.Message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Substring 重载
System 命名空间
Int32
Concat
Insert
Join
Remove
Replace
Split
Trim


String ..::.ToCharArray 方法

String
.
.
::
.
ToCharArray 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

将此实例中的字符复制到 Unicode 字符数组。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.ToCharArray 方法

String
.
.
::
.
ToCharArray 方法
String 类

将此实例中的字符复制到 Unicode 字符数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToCharArray As Char()
public char[] ToCharArray()
public:
array<wchar_t>^ ToCharArray()
member ToCharArray : unit -> char[]

返回值

类型：
array<
System Char
>
[]
()
[]

元素为此实例的各字符的 Unicode 字符数组。如果此实例是空字符串，则返回的数组为空且长度为零。 元素为此实例的各字符的 Unicode 字符数组。如果此实例是空字符串，则返回的数组为空且长度为零。

下面的示例演示如何从 String 轻松创建 Unicode 字符数组。然后，对该数组应用 Split 方法。 下面的示例演示如何从 String 轻松创建 Unicode 字符数组。然后，对该数组应用 Split 方法。

Public Class StringSplit2
   Public Shared Sub Main()

      Dim delimStr As String = " ,.:"
      Dim delimiter As Char() = delimStr.ToCharArray()
      Dim words As String = "one two,three:four."
      Dim split As String() = Nothing

      Console.WriteLine("The delimiters are -{0}-", delimStr)
      Dim x As Integer
      For x = 1 To 5
         split = words.Split(delimiter, x)
         Console.WriteLine(ControlChars.Cr + "count = {0,2} ..............", x)
         Dim s As String
         For Each s In  split
            Console.WriteLine("-{0}-", s)
         Next s
      Next x
   End Sub
End Class
' The example displays the following output:
'       The delimiters are - ,.:-
'       count =  1 ..............
'       -one two,three:four.-
'       count =  2 ..............
'       -one-
'       -two,three:four.-
'       count =  3 ..............
'       -one-
'       -two-
'       -three:four.-
'       count =  4 ..............
'       -one-
'       -two-
'       -three-
'       -four.-
'       count =  5 ..............
'       -one-
'       -two-
'       -three-
'       -four-
'       --

using System;

public class StringSplit2
{
   public static void Main()
   {
      string delimStr = " ,.:";
       char [] delimiter = delimStr.ToCharArray();
      string words = "one two,three:four.";
      string [] split = null;

       Console.WriteLine("The delimiters are -{0}-", delimStr);
       for (int x = 1; x <= 5; x++)
      {
          split = words.Split(delimiter, x);
         Console.WriteLine("\ncount = {0,2} ..............", x);
           foreach (string s in split)
          {
             Console.WriteLine("-{0}-", s);
             }
       }
   }
}
// The example displays the following output:
//       The delimiters are - ,.:-
//       count =  1 ..............
//       -one two,three:four.-
//       count =  2 ..............
//       -one-
//       -two,three:four.-
//       count =  3 ..............
//       -one-
//       -two-
//       -three:four.-
//       count =  4 ..............
//       -one-
//       -two-
//       -three-
//       -four.-
//       count =  5 ..............
//       -one-
//       -two-
//       -three-
//       -four-
//       --

using namespace System;
using namespace System::Collections;
int main()
{
   String^ delimStr = " ,.:";
   array<Char>^delimiter = delimStr->ToCharArray();
   String^ words = "one two,three:four.";
   array<String^>^split = nullptr;
   Console::WriteLine( "The delimiters are -{0}-", delimStr );
   for ( int x = 1; x <= 5; x++ )
   {
      split = words->Split( delimiter, x );
      Console::WriteLine( "\ncount = {0, 2} ..............", x );
      IEnumerator^ myEnum = split->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         String^ s = safe_cast<String^>(myEnum->Current);
         Console::WriteLine( "-{0}-", s );
      }

   }
}
// The example displays the following output:
//       The delimiters are - ,.:-
//       count =  1 ..............
//       -one two,three:four.-
//       count =  2 ..............
//       -one-
//       -two,three:four.-
//       count =  3 ..............
//       -one-
//       -two-
//       -three:four.-
//       count =  4 ..............
//       -one-
//       -two-
//       -three-
//       -four.-
//       count =  5 ..............
//       -one-
//       -two-
//       -three-
//       -four-
//       --

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
ToCharArray 重载
System 命名空间
Char
Array


String ..::.ToCharArray 方法 (Int32, Int32)

String
.
.
::
.
ToCharArray 方法 (Int32, Int32)
String 类

将此实例中的指定子字符串内的字符复制到 Unicode 字符数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToCharArray ( _
    startIndex As Integer, _
    length As Integer _
) As Char()
public char[] ToCharArray(
    int startIndex,
    int length
)
public:
array<wchar_t>^ ToCharArray(
    int startIndex,
    int length
)
member ToCharArray :
        startIndex:int *
        length:int -> char[]

参数

startIndex
类型： System Int32
此实例内子字符串的起始位置。
length
类型： System Int32
此实例内子字符串的长度。

返回值

类型：
array<
System Char
>
[]
()
[]

元素为此实例中从字符位置 startIndex 开始的 length 字符数的 Unicode 字符数组。
异常 | 条件
ArgumentOutOfRangeException | startIndex 或 length 小于零。 - 或 - startIndex 加上 length 大于此实例的长度。

startIndex 参数从零开始。也就是说，字符串实例中第一个字符的索引为零。 startIndex 参数从零开始。也就是说，字符串实例中第一个字符的索引为零。

如果 length 为零，则返回的数组为空，其长度为零。如果此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则返回的数组为空，其长度为零。 如果 length 为零，则返回的数组为空，其长度为零。如果此实例为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则返回的数组为空，其长度为零。

下面的示例将字符串中的子字符串转换为字符数组，然后枚举并显示该数组的元素。

' Sample for String.ToCharArray(Int32, Int32)
Imports System

Class Sample

   Public Shared Sub Main()
      Dim str As String = "012wxyz789"
      Dim arr() As Char

      arr = str.ToCharArray(3, 4)
      Console.Write("The letters in '{0}' are: '", str)
      Console.Write(arr)
      Console.WriteLine("'")
      Console.WriteLine("Each letter in '{0}' is:", str)
      Dim c As Char
      For Each c In arr
         Console.WriteLine(c)
      Next c
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'The letters in '012wxyz789' are: 'wxyz'
'Each letter in '012wxyz789' is:
'w
'x
'y
'z
'

// Sample for String.ToCharArray(Int32, Int32)
using System;

class Sample {
    public static void Main() {
    string str = "012wxyz789";
    char[] arr;

    arr = str.ToCharArray(3, 4);
    Console.Write("The letters in '{0}' are: '", str);
    Console.Write(arr);
    Console.WriteLine("'");
    Console.WriteLine("Each letter in '{0}' is:", str);
    foreach (char c in arr)
        Console.WriteLine(c);
    }
}
/*
This example produces the following results:
The letters in '012wxyz789' are: 'wxyz'
Each letter in '012wxyz789' is:
w
x
y
z
*/

// Sample for String::ToCharArray(Int32, Int32)
using namespace System;
using namespace System::Collections;
int main()
{
   String^ str = "012wxyz789";
   array<Char>^arr;
   arr = str->ToCharArray( 3, 4 );
   Console::Write( "The letters in '{0}' are: '", str );
   Console::Write( arr );
   Console::WriteLine( "'" );
   Console::WriteLine( "Each letter in '{0}' is:", str );
   IEnumerator^ myEnum = arr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Char c =  safe_cast<Char>(myEnum->Current);
      Console::WriteLine( c );
   }
}

/*
This example produces the following results:
The letters in '012wxyz789' are: 'wxyz'
Each letter in '012wxyz789' is:
w
x
y
z
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
ToCharArray 重载
System 命名空间
Array
Char
Int32


String ..::.ToLower 方法

String
.
.
::
.
ToLower 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

返回此字符串转换为小写形式的副本。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.ToLower 方法

String
.
.
::
.
ToLower 方法
String 类

返回此字符串转换为小写形式的副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToLower As String
public string ToLower()
public:
String^ ToLower()
member ToLower : unit -> string

返回值

类型： System String
一个小写字符串。

此方法考虑当前区域性的大小写规则。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为小写。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为小写。

安全注意事项

如果您需要操作系统标识符（如文件名、命名管道或注册表项）的小写或大写版本，请使用 ToLowerInvariant 或 ToUpperInvariant 方法。

对调用者的说明

如在 在 .NET Framework 中使用字符串的最佳做法 中说明的那样，我们建议您避免调用替代默认值的字符串大小写方法，而是调用需要明确指定的参数的方法。若要使用当前区域性的大小写约定将字符转换为小写，请为它的 culture 参数使用 CultureInfo..::.CurrentCulture 的值来调用 ToLower(CultureInfo) 方法重载。 如在 在 .NET Framework 中使用字符串的最佳做法 中说明的那样，我们建议您避免调用替代默认值的字符串大小写方法，而是调用需要明确指定的参数的方法。若要使用当前区域性的大小写约定将字符转换为小写，请为它的 culture 参数使用 CultureInfo..::.CurrentCulture 的值来调用 ToLower(CultureInfo) 方法重载。

下面的示例将几个大小写混合的字符串转换为小写。

Imports System

Public Class ToLowerTest

    Public Shared Sub Main()
        Dim info As String() = {"Name", "Title", "Age", "Location", "Gender"}

        Console.WriteLine("The initial values in the array are:")

        Dim s As String
        For Each s In info
            Console.WriteLine(s)
        Next

        Console.WriteLine("{0}The lowercase of these values is:", Environment.NewLine)

        For Each s In info
            Console.WriteLine(s.ToLower())
        Next

        Console.WriteLine("{0}The uppercase of these values is:", Environment.NewLine)

        For Each s In  info
            Console.WriteLine(s.ToUpper())
        Next
    End Sub
End Class
' The example displays the following output:
'       The initial values in the array are:
'       Name
'       Title
'       Age
'       Location
'       Gender
'
'       The lowercase of these values is:
'       name
'       title
'       age
'       location
'       gender
'
'       The uppercase of these values is:
'       NAME
'       TITLE
'       AGE
'       LOCATION
'       GENDER

using System;

public class ToLowerTest {
    public static void Main() {

        string [] info = {"Name", "Title", "Age", "Location", "Gender"};

        Console.WriteLine("The initial values in the array are:");
        foreach (string s in info)
            Console.WriteLine(s);

        Console.WriteLine("{0}The lowercase of these values is:", Environment.NewLine);

        foreach (string s in info)
            Console.WriteLine(s.ToLower());

        Console.WriteLine("{0}The uppercase of these values is:", Environment.NewLine);

        foreach (string s in info)
            Console.WriteLine(s.ToUpper());
    }
}
// The example displays the following output:
//       The initial values in the array are:
//       Name
//       Title
//       Age
//       Location
//       Gender
//
//       The lowercase of these values is:
//       name
//       title
//       age
//       location
//       gender
//
//       The uppercase of these values is:
//       NAME
//       TITLE
//       AGE
//       LOCATION
//       GENDER

using namespace System;
using namespace System::Collections;
int main()
{
   array<String^>^info = {"Name","Title","Age","Location","Gender"};
   Console::WriteLine( "The initial values in the array are:" );
   IEnumerator^ myEnum = info->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( s );
   }

   Console::WriteLine( " {0}The lowercase of these values is:", Environment::NewLine );
   IEnumerator^ myEnum1 = info->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( s->ToLower() );
   }

   Console::WriteLine( " {0}The uppercase of these values is:", Environment::NewLine );
   IEnumerator^ myEnum2 = info->GetEnumerator();
   while ( myEnum2->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum2->Current);
      Console::WriteLine( s->ToUpper() );
   }
}
// The example displays the following output:
//       The initial values in the array are:
//       Name
//       Title
//       Age
//       Location
//       Gender
//
//       The lowercase of these values is:
//       name
//       title
//       age
//       location
//       gender
//
//       The uppercase of these values is:
//       NAME
//       TITLE
//       AGE
//       LOCATION
//       GENDER

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
ToLower 重载
System 命名空间
ToLowerInvariant
ToUpper
ToUpperInvariant


String ..::.ToLower 方法 (CultureInfo)

String
.
.
::
.
ToLower 方法 (CultureInfo)
String 类

根据指定区域性的大小写规则返回此字符串转换为小写形式的副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToLower ( _
    culture As CultureInfo _
) As String
public string ToLower(
    CultureInfo culture
)
public:
String^ ToLower(
    CultureInfo^ culture
)
member ToLower :
        culture:CultureInfo -> string

参数

culture
类型： System.Globalization CultureInfo
一个对象，用于提供区域性特定的大小写规则。

返回值

类型： System String
当前字符串的等效小写形式。
异常 | 条件
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

culture 参数指定的区域性的大小写规则决定更改字符串大小写的方法。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为小写。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为小写。

安全注意事项

如果您需要操作系统标识符（如文件名、命名管道或注册表项）的小写或大写版本，请使用 ToLowerInvariant 或 ToUpperInvariant 方法。

下面的示例将两个由大写字符组成的字符串转换为小写字符，转换时使用“美国英语”和“土耳其土耳其语”区域性，然后对小写字符串进行比较。两个大写字符串相同，唯一区别在于：在一个字符串中每次出现的 Unicode LATIN CAPITAL LETTER I，在另一个字符串中为 LATIN CAPITAL LETTER I WITH DOT ABOVE。 下面的示例将两个由大写字符组成的字符串转换为小写字符，转换时使用“美国英语”和“土耳其土耳其语”区域性，然后对小写字符串进行比较。两个大写字符串相同，唯一区别在于：在一个字符串中每次出现的 Unicode LATIN CAPITAL LETTER I，在另一个字符串中为 LATIN CAPITAL LETTER I WITH DOT ABOVE。

' Sample for String.ToLower(CultureInfo)
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Class Sample
   Public Shared Sub Main()
      Dim str1 As [String] = "INDIGO"
      ' str2 = str1, except each 'I' is '\u0130' (Unicode LATIN CAPITAL I WITH DOT ABOVE).
      Dim str2 As New [String](New [Char]() {ChrW(&H0130), "N"c, "D"c, ChrW(&H0130), "G"c, "O"c})
      Dim str3, str4 As [String]

      Console.WriteLine()
      Console.WriteLine("str1 = '{0}'", str1)

      Console.WriteLine()
      Console.WriteLine("str1 is {0} to str2.", _
                         IIf(0 = [String].CompareOrdinal(str1, str2), "equal", "not equal"))
      CodePoints("str1", str1)
      CodePoints("str2", str2)

      Console.WriteLine()
      ' str3 is a lower case copy of str2, using English-United States culture.
      Console.WriteLine("str3 = Lower case copy of str2 using English-United States culture.")
      str3 = str2.ToLower(New CultureInfo("en-US", False))

      ' str4 is a lower case copy of str2, using Turkish-Turkey culture.
      Console.WriteLine("str4 = Lower case copy of str2 using Turkish-Turkey culture.")
      str4 = str2.ToLower(New CultureInfo("tr-TR", False))

      ' Compare the code points in str3 and str4.
      Console.WriteLine()
      Console.WriteLine("str3 is {0} to str4.", _
                         IIf(0 = [String].CompareOrdinal(str3, str4), "equal", "not equal"))
      CodePoints("str3", str3)
      CodePoints("str4", str4)
   End Sub 'Main

   Public Shared Sub CodePoints(title As [String], s As [String])
      Console.Write("{0}The code points in {1} are: {0}", Environment.NewLine, title)
      Dim c As Char
      For Each c In  s
         Console.Write("{0:x4} ", AscW(c))
      Next c
      Console.WriteLine()
   End Sub 'CodePoints
End Class 'Sample
'
'str1 = 'INDIGO'
'
'str1 is not equal to str2.
'
'The code points in str1 are:
'0049 004e 0044 0049 0047 004f
'
'The code points in str2 are:
'0130 004e 0044 0130 0047 004f
'
'str3 = Lower case copy of str2 using English-United States culture.
'str4 = Lower case copy of str2 using Turkish-Turkey culture.
'
'str3 is equal to str4.
'
'The code points in str3 are:
'0069 006e 0064 0069 0067 006f
'
'The code points in str4 are:
'0069 006e 0064 0069 0067 006f

// Sample for String.ToLower(CultureInfo)

using System;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    String str1 = "INDIGO";
    // str2 = str1, except each 'I' is '\u0130' (Unicode LATIN CAPITAL I WITH DOT ABOVE).
    String str2 = new String(new Char[] {'\u0130', 'N', 'D', '\u0130', 'G', 'O'});
    String str3, str4;

    Console.WriteLine();
    Console.WriteLine("str1 = '{0}'", str1);

    Console.WriteLine();
    Console.WriteLine("str1 is {0} to str2.",
         ((0 == String.CompareOrdinal(str1, str2)) ? "equal" : "not equal"));
    CodePoints("str1", str1);
    CodePoints("str2", str2);

    Console.WriteLine();
    // str3 is a lower case copy of str2, using English-United States culture.
    Console.WriteLine("str3 = Lower case copy of str2 using English-United States culture.");
    str3 = str2.ToLower(new CultureInfo("en-US", false));

    // str4 is a lower case copy of str2, using Turkish-Turkey culture.
    Console.WriteLine("str4 = Lower case copy of str2 using Turkish-Turkey culture.");
    str4 = str2.ToLower(new CultureInfo("tr-TR", false));

    // Compare the code points in str3 and str4.
    Console.WriteLine();
    Console.WriteLine("str3 is {0} to str4.",
         ((0 == String.CompareOrdinal(str3, str4)) ? "equal" : "not equal"));
    CodePoints("str3", str3);
    CodePoints("str4", str4);
    }

    public static void CodePoints(String title, String s)
    {
    Console.Write("{0}The code points in {1} are: {0}", Environment.NewLine, title);
    foreach (ushort u in s)
      Console.Write("{0:x4} ", u);
    Console.WriteLine();
    }
}
/*
This example produces the following results:

str1 = 'INDIGO'

str1 is not equal to str2.

The code points in str1 are:
0049 004e 0044 0049 0047 004f

The code points in str2 are:
0130 004e 0044 0130 0047 004f

str3 = Lower case copy of str2 using English-United States culture.
str4 = Lower case copy of str2 using Turkish-Turkey culture.

str3 is equal to str4.

The code points in str3 are:
0069 006e 0064 0069 0067 006f

The code points in str4 are:
0069 006e 0064 0069 0067 006f
*/

// Sample for String::ToLower(CultureInfo)
using namespace System;
using namespace System::Globalization;
void CodePoints( String^ title, String^ s )
{
   Console::Write( "{0}The code points in {1} are: {0}", Environment::NewLine, title );
   System::Collections::IEnumerator^ myEnum = s->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      UInt16 u =  safe_cast<Char>(myEnum->Current);
      Console::Write( "{0:x4} ", u );
   }

   Console::WriteLine();
}

int main()
{
   String^ str1 = "INDIGO";

   // str2 = str1, except each 'I' is '\u0130' (Unicode LATIN CAPITAL I WITH DOT ABOVE).
   array<Char>^temp = {L'\u0130',L'N',L'D',L'\u0130',L'G',L'O'};
   String^ str2 = gcnew String( temp );
   String^ str3;
   String^ str4;
   Console::WriteLine();
   Console::WriteLine( "str1 = '{0}'", str1 );
   Console::WriteLine();
   Console::WriteLine( "str1 is {0} to str2.", ((0 == String::CompareOrdinal( str1, str2 )) ? (String^)"equal" : "not equal") );
   CodePoints( "str1", str1 );
   CodePoints( "str2", str2 );
   Console::WriteLine();

   // str3 is a lower case copy of str2, using English-United States culture.
   Console::WriteLine( "str3 = Lower case copy of str2 using English-United States culture." );
   str3 = str2->ToLower( gcnew CultureInfo( "en-US",false ) );

   // str4 is a lower case copy of str2, using Turkish-Turkey culture.
   Console::WriteLine( "str4 = Lower case copy of str2 using Turkish-Turkey culture." );
   str4 = str2->ToLower( gcnew CultureInfo( "tr-TR",false ) );

   // Compare the code points in str3 and str4.
   Console::WriteLine();
   Console::WriteLine( "str3 is {0} to str4.", ((0 == String::CompareOrdinal( str3, str4 )) ? (String^)"equal" : "not equal") );
   CodePoints( "str3", str3 );
   CodePoints( "str4", str4 );
}

/*
This example produces the following results:

str1 = 'INDIGO'

str1 is not equal to str2.

The code points in str1 are:
0049 004e 0044 0049 0047 004f

The code points in str2 are:
0130 004e 0044 0130 0047 004f

str3 = Lower case copy of str2 using English-United States culture.
str4 = Lower case copy of str2 using Turkish-Turkey culture.

str3 is equal to str4.

The code points in str3 are:
0069 006e 0064 0069 0067 006f

The code points in str4 are:
0069 006e 0064 0069 0067 006f
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
ToLower 重载
System 命名空间
CultureInfo
ToUpper


String ..::.ToLowerInvariant 方法

String
.
.
::
.
ToLowerInvariant 方法
String 类

返回此 String 对象的转换为小写形式的副本，返回时使用固定区域性的大小写规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToLowerInvariant As String
public string ToLowerInvariant()
public:
String^ ToLowerInvariant()
member ToLowerInvariant : unit -> string

返回值

类型： System String
当前字符串的等效小写形式。

该固定区域性表示不区分区域性的区域性。它与英语语言关联，但不与任何国家/地区关联。有关更多信息，请参见使用 InvariantCulture 属性。 该固定区域性表示不区分区域性的区域性。它与英语语言关联，但不与任何国家/地区关联。有关更多信息，请参见使用 InvariantCulture 属性。 该固定区域性表示不区分区域性的区域性。它与英语语言关联，但不与任何国家/地区关联。有关更多信息，请参见使用 InvariantCulture 属性。

如果应用程序需要以可预测的方式更改字符串的大小写，该方式不受当前区域性的影响，则使用 ToLowerInvariant 方法。ToLowerInvariant 方法与 ToLower(CultureInfo.InvariantCulture) 等效。当集合中的字符串必须按可预知的顺序在用户界面控件中显示时，建议使用该方法。
如果应用程序需要以可预测的方式更改字符串的大小写，该方式不受当前区域性的影响，则使用 ToLowerInvariant 方法。ToLowerInvariant 方法与 ToLower(CultureInfo.InvariantCulture) 等效。当集合中的字符串必须按可预知的顺序在用户界面控件中显示时，建议使用该方法。
如果应用程序需要以可预测的方式更改字符串的大小写，该方式不受当前区域性的影响，则使用 ToLowerInvariant 方法。ToLowerInvariant 方法与 ToLower(CultureInfo.InvariantCulture) 等效。当集合中的字符串必须按可预知的顺序在用户界面控件中显示时，建议使用该方法。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为小写。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为小写。

安全注意事项

如果您需要操作系统标识符（如文件名、命名管道或注册表项）的小写或大写版本，请使用 ToLowerInvariant 或 ToUpperInvariant 方法。

下面的示例定义了一个字符串数组，包含许多语言表示的一个单词。ToLowerInvariant 方法用来使用每个单词的不区分大小写的版本填充并行数组的元素。Array..::.Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 方法用来根据小写数组中元素的顺序对区分大小写的数组排序，以确保元素按相同顺序显示而与语言无关。 下面的示例定义了一个字符串数组，包含许多语言表示的一个单词。ToLowerInvariant 方法用来使用每个单词的不区分大小写的版本填充并行数组的元素。Array..::.Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 方法用来根据小写数组中元素的顺序对区分大小写的数组排序，以确保元素按相同顺序显示而与语言无关。 下面的示例定义了一个字符串数组，包含许多语言表示的一个单词。ToLowerInvariant 方法用来使用每个单词的不区分大小写的版本填充并行数组的元素。Array..::.Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 方法用来根据小写数组中元素的顺序对区分大小写的数组排序，以确保元素按相同顺序显示而与语言无关。

Module Example
   Public Sub Main()
      Dim words() As String = { "Tuesday", "Sal ", "Вторник", "Mardi", _
                                "Τρ τη", "Martes", "         ", _
                                "        ", "         " }
      ' Display array in unsorted order.
      For Each word As String In words
         Console.WriteLine(word)
      Next
      Console.WriteLine()

      ' Create parallel array of words by calling ToUpperInvariant.
      Dim upperWords(words.Length - 1) As String
      For ctr As Integer = words.GetLowerBound(0) To words.GetUpperBound(0)
         upperWords(ctr) = words(ctr).ToUpperInvariant()
      Next

      ' Sort the words array based on the order of upperWords.
      Array.Sort(upperWords, words, StringComparer.InvariantCulture)

      ' Display the sorted array.
      For Each word As String In words
         Console.WriteLine(word)
      Next
   End Sub
End Module
' The example displays the following output:
'       Tuesday
'       Sal
'       Вторник
'       Mardi
'       Τρ τη
'       Martes
'
'
'
'
'       Mardi
'       Martes
'       Sal
'       Tuesday
'       Τρ τη
'       Вторник
'
'
'

using System;

public class Example
{
   public static void Main()
   {
      string[] words = { "Tuesday", "Sal ", "Вторник", "Mardi",
                         "Τρ τη", "Martes", "         ",
                         "        ", "         " };
      // Display array in unsorted order.
      foreach (string word in words)
         Console.WriteLine(word);
      Console.WriteLine();

      // Create parallel array of words by calling ToUpperInvariant.
      string[] upperWords = new string[words.Length];
      for (int ctr = words.GetLowerBound(0); ctr <= words.GetUpperBound(0); ctr++)
         upperWords[ctr] = words[ctr].ToUpperInvariant();

      // Sort the words array based on the order of upperWords.
      Array.Sort(upperWords, words, StringComparer.InvariantCulture);

      // Display the sorted array.
      foreach (string word in words)
         Console.WriteLine(word);
   }
}
// The example displays the following output:
//       Tuesday
//       Sal
//       Вторник
//       Mardi
//       Τρ τη
//       Martes
//
//
//
//
//       Mardi
//       Martes
//       Sal
//       Tuesday
//       Τρ τη
//       Вторник
//
//
//

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
System 命名空间
ToUpperInvariant
ToLower
ToLower
InvariantCulture


String ..::.ToString 方法

String
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

将此实例的值转换为 String。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.ToString 方法

String
.
.
::
.
ToString 方法
String 类

返回 String 的此实例；不执行实际转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前的字符串。

下面的示例说明 ToString 方法。

Imports System
 _

Class stringToString

   Public Shared Sub Main()
      Dim str1 As [String] = "123"
      Dim str2 As [String] = "abc"

      Console.WriteLine("Original str1: {0}", str1)
      Console.WriteLine("Original str2: {0}", str2)
      Console.WriteLine("str1 same as str2?: {0}", [Object].ReferenceEquals(str1, str2))

      str2 = str1.ToString()
      Console.WriteLine()
      Console.WriteLine("New str2:      {0}", str2)
      Console.WriteLine("str1 same as str2?: {0}", [Object].ReferenceEquals(str1, str2))
   End Sub 'Main
End Class 'Sample
'
'This code produces the following output:
'Original str1: 123
'Original str2: abc
'str1 same as str2?: False
'
'New str2:      123
'str1 same as str2?: True
'

using System;

class stringToString {
    public static void Main() {
    String str1 = "123";
    String str2 = "abc";

    Console.WriteLine("Original str1: {0}", str1);
    Console.WriteLine("Original str2: {0}", str2);
    Console.WriteLine("str1 same as str2?: {0}", Object.ReferenceEquals(str1, str2));

    str2 = str1.ToString();
    Console.WriteLine();
    Console.WriteLine("New str2:      {0}", str2);
    Console.WriteLine("str1 same as str2?: {0}", Object.ReferenceEquals(str1, str2));
    }
}
/*
This code produces the following output:
Original str1: 123
Original str2: abc
str1 same as str2?: False

New str2:      123
str1 same as str2?: True
*/

using namespace System;
int main()
{
   String^ str1 = "123";
   String^ str2 = "abc";
   Console::WriteLine( "Original str1: {0}", str1 );
   Console::WriteLine( "Original str2: {0}", str2 );
   Console::WriteLine( "str1 same as str2?: {0}", Object::ReferenceEquals( str1, str2 ) );
   str2 = str1;
   Console::WriteLine();
   Console::WriteLine( "New str2:      {0}", str2 );
   Console::WriteLine( "str1 same as str2?: {0}", Object::ReferenceEquals( str1, str2 ) );
}

/*
This code produces the following output:
Original str1: 123
Original str2: abc
str1 same as str2?: False

New str2:      123
str1 same as str2?: True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
ToString 重载
System 命名空间
Clone


String ..::.ToString 方法 (IFormatProvider)

String
.
.
::
.
ToString 方法 (IFormatProvider)
String 类

返回 String 的此实例；不执行实际转换。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
（保留）一个对象，用于提供区域性特定的格式设置信息。

返回值

类型： System String
当前的字符串。

实现

provider 是保留的，目前不参与此操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
ToString 重载
System 命名空间


String ..::.ToUpper 方法

String
.
.
::
.
ToUpper 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

返回此字符串转换为大写形式的副本。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.ToUpper 方法

String
.
.
::
.
ToUpper 方法
String 类

返回此字符串转换为大写形式的副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToUpper As String
public string ToUpper()
public:
String^ ToUpper()
member ToUpper : unit -> string

返回值

类型： System String
当前字符串的大写形式。

此方法考虑当前区域性的大小写规则。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为大写。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为大写。

安全注意事项

如果您需要操作系统标识符（如文件名、命名管道或注册表项）的小写或大写版本，请使用 ToLowerInvariant 或 ToUpperInvariant 方法。

对调用者的说明

如在 在 .NET Framework 中使用字符串的最佳做法 中说明的那样，我们建议您避免调用替代默认值的字符串大小写方法，而是调用需要明确指定的参数的方法。若要使用当前区域性的大小写约定将字符串转换为大写，请使用 CultureInfo..::.CurrentCulture 的值作为其 culture 参数来调用 ToUpper(CultureInfo) 方法重载。 如在 在 .NET Framework 中使用字符串的最佳做法 中说明的那样，我们建议您避免调用替代默认值的字符串大小写方法，而是调用需要明确指定的参数的方法。若要使用当前区域性的大小写约定将字符串转换为大写，请使用 CultureInfo..::.CurrentCulture 的值作为其 culture 参数来调用 ToUpper(CultureInfo) 方法重载。

下面的示例演示如何通过 ToUpper 方法来使 String 比较不区分大小写。

unsafe
{
    // Null terminated ASCII characters in an sbyte array
    String szAsciiUpper = null;
    sbyte[] sbArr1 = new sbyte[] { 0x41, 0x42, 0x43, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiUpper = sbArr1)
    {
        szAsciiUpper = new String(pAsciiUpper);
    }
    String szAsciiLower = null;
    sbyte[] sbArr2 = { 0x61, 0x62, 0x63, 0x00 };
    // Instruct the Garbage Collector not to move the memory
    fixed(sbyte* pAsciiLower = sbArr2)
    {
        szAsciiLower = new String(pAsciiLower, 0, sbArr2.Length);
    }
    // Prints "ABC abc"
    Console.WriteLine(szAsciiUpper + " " + szAsciiLower);

    // Compare Strings - the result is true
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper.ToUpper(), szAsciiLower.ToUpper())==0?"true":"false") );

    // This is the effective equivalent of another Compare method, which ignores case
    Console.WriteLine("The Strings are equal when capitalized ? " +
        (String.Compare(szAsciiUpper, szAsciiLower, true)==0?"true":"false") );
}

// Null terminated ASCII characters in a simple char array
char charArray3[4] = {0x41,0x42,0x43,0x00};
char * pstr3 =  &charArray3[ 0 ];
String^ szAsciiUpper = gcnew String( pstr3 );
char charArray4[4] = {0x61,0x62,0x63,0x00};
char * pstr4 =  &charArray4[ 0 ];
String^ szAsciiLower = gcnew String( pstr4,0,sizeof(charArray4) );

// Prints "ABC abc"
Console::WriteLine( String::Concat( szAsciiUpper,  " ", szAsciiLower ) );

// Compare Strings - the result is true
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper->ToUpper(), szAsciiLower->ToUpper() ) ? (String^)"TRUE" :  "FALSE") ) );

// This is the effective equivalent of another Compare method, which ignores case
Console::WriteLine( String::Concat(  "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper, szAsciiLower, true ) ? (String^)"TRUE" :  "FALSE") ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
ToUpper 重载
System 命名空间
ToLower


String ..::.ToUpper 方法 (CultureInfo)

String
.
.
::
.
ToUpper 方法 (CultureInfo)
String 类

根据指定区域性的大小写规则返回此字符串转换为大写形式的副本。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToUpper ( _
    culture As CultureInfo _
) As String
public string ToUpper(
    CultureInfo culture
)
public:
String^ ToUpper(
    CultureInfo^ culture
)
member ToUpper :
        culture:CultureInfo -> string

参数

culture
类型： System.Globalization CultureInfo
一个对象，用于提供区域性特定的大小写规则。

返回值

类型： System String
当前字符串的大写形式。
异常 | 条件
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

culture 参数指定的区域性的大小写规则决定更改字符串大小写的方法。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为大写。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为大写。

下面的示例将两个由小写字符组成的字符串转换为两个由大写字符组成的字符串，转换时使用“美国英语”和“土耳其土耳其语”区域性，然后对大写字符串进行比较。两个大写字符串相同，唯一区别在于：在一个字符串中每次出现的 Unicode LATIN CAPITAL LETTER I，在另一个字符串中为 LATIN CAPITAL LETTER I WITH DOT ABOVE。 下面的示例将两个由小写字符组成的字符串转换为两个由大写字符组成的字符串，转换时使用“美国英语”和“土耳其土耳其语”区域性，然后对大写字符串进行比较。两个大写字符串相同，唯一区别在于：在一个字符串中每次出现的 Unicode LATIN CAPITAL LETTER I，在另一个字符串中为 LATIN CAPITAL LETTER I WITH DOT ABOVE。

' Sample for String.ToUpper(CultureInfo)
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Class Sample

   Public Shared Sub Main()
      Dim str1 As [String] = "indigo"
      Dim str2, str3 As [String]

      Console.WriteLine()
      Console.WriteLine("str1 = '{0}'", str1)

      Console.WriteLine("str2 = Upper case copy of str1 using English-United States culture.")
      ' str2 is an upper case copy of str1, using English-United States culture.
      str2 = str1.ToUpper(New CultureInfo("en-US", False))

      ' str3 is an upper case copy of str1, using Turkish-Turkey culture.
      Console.WriteLine("str3 = Upper case copy of str1 using Turkish-Turkey culture.")
      str3 = str1.ToUpper(New CultureInfo("tr-TR", False))

      ' Compare the code points in str2 and str3.
      Console.WriteLine()
      Console.WriteLine("str2 is {0} to str3.", IIf(0 = [String].CompareOrdinal(str2, str3), "equal", "not equal"))
      CodePoints("str1", str1)
      CodePoints("str2", str2)
      CodePoints("str3", str3)
   End Sub 'Main

   Public Shared Sub CodePoints(title As [String], s As [String])
      Console.Write("{0}The code points in {1} are: {0}", Environment.NewLine, title)
      Dim c As Char
      For Each c In  s
         Console.Write("{0:x4} ", AscW(c))
      Next c
      Console.WriteLine()
   End Sub 'CodePoints
End Class 'Sample
'
'This example produces the following results:
'
'str1 = 'indigo'
'str2 = Upper case copy of str1 using English-United States culture.
'str3 = Upper case copy of str1 using Turkish-Turkey culture.
'
'str2 is not equal to str3.
'
'The code points in str1 are:
'0069 006e 0064 0069 0067 006f
'
'The code points in str2 are:
'0049 004e 0044 0049 0047 004f
'
'The code points in str3 are:
'0130 004e 0044 0130 0047 004f
'

// Sample for String.ToUpper(CultureInfo)
using System;
using System.Globalization;

class Sample
{
    public static void Main()
    {
    String str1 = "indigo";
    String str2, str3;

    Console.WriteLine();
    Console.WriteLine("str1 = '{0}'", str1);

    Console.WriteLine("str2 = Upper case copy of str1 using English-United States culture.");
    // str2 is an upper case copy of str1, using English-United States culture.
    str2 = str1.ToUpper(new CultureInfo("en-US", false));

    // str3 is an upper case copy of str1, using Turkish-Turkey culture.
    Console.WriteLine("str3 = Upper case copy of str1 using Turkish-Turkey culture.");
    str3 = str1.ToUpper(new CultureInfo("tr-TR", false));

    // Compare the code points in str2 and str3.
    Console.WriteLine();
    Console.WriteLine("str2 is {0} to str3.",
         ((0 == String.CompareOrdinal(str2, str3)) ? "equal" : "not equal"));
    CodePoints("str1", str1);
    CodePoints("str2", str2);
    CodePoints("str3", str3);
    }

    public static void CodePoints(String title, String s)
    {
    Console.Write("{0}The code points in {1} are: {0}", Environment.NewLine, title);
    foreach (ushort u in s)
      Console.Write("{0:x4} ", u);
    Console.WriteLine();
    }
}
/*
This example produces the following results:

str1 = 'indigo'
str2 = Upper case copy of str1 using English-United States culture.
str3 = Upper case copy of str1 using Turkish-Turkey culture.

str2 is not equal to str3.

The code points in str1 are:
0069 006e 0064 0069 0067 006f

The code points in str2 are:
0049 004e 0044 0049 0047 004f

The code points in str3 are:
0130 004e 0044 0130 0047 004f
*/

// Sample for String::ToUpper(CultureInfo)
using namespace System;
using namespace System::Globalization;
void CodePoints( String^ title, String^ s )
{
   Console::Write( " {0}The code points in {1} are: {0}", Environment::NewLine, title );
   System::Collections::IEnumerator^ myEnum = s->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      UInt16 u = safe_cast<Char>(myEnum->Current);
      Console::Write( "{0:x4} ", u );
   }

   Console::WriteLine();
}

int main()
{
   String^ str1 = "indigo";
   String^ str2;
   String^ str3;
   Console::WriteLine();
   Console::WriteLine( "str1 = ' {0}'", str1 );
   Console::WriteLine( "str2 = Upper case copy of str1 using English-United States culture." );

   // str2 is an upper case copy of str1, using English-United States culture.
   str2 = str1->ToUpper( gcnew CultureInfo( "en-US",false ) );

   // str3 is an upper case copy of str1, using Turkish-Turkey culture.
   Console::WriteLine( "str3 = Upper case copy of str1 using Turkish-Turkey culture." );
   str3 = str1->ToUpper( gcnew CultureInfo( "tr-TR",false ) );

   // Compare the code points in str2 and str3.
   Console::WriteLine();
   Console::WriteLine( "str2 is {0} to str3.", ((0 == String::CompareOrdinal( str2, str3 )) ? (String^)"equal" : "not equal") );
   CodePoints( "str1", str1 );
   CodePoints( "str2", str2 );
   CodePoints( "str3", str3 );
}

/*
This example produces the following results:

str1 = 'indigo'
str2 = Upper case copy of str1 using English-United States culture.
str3 = Upper case copy of str1 using Turkish-Turkey culture.

str2 is not equal to str3.

The code points in str1 are:
0069 006e 0064 0069 0067 006f

The code points in str2 are:
0049 004e 0044 0049 0047 004f

The code points in str3 are:
0130 004e 0044 0130 0047 004f
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
ToUpper 重载
System 命名空间
ToLower


String ..::.ToUpperInvariant 方法

String
.
.
::
.
ToUpperInvariant 方法
String 类

返回此 String 对象的转换为大写形式的副本，返回时使用固定区域性的大小写规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToUpperInvariant As String
public string ToUpperInvariant()
public:
String^ ToUpperInvariant()
member ToUpperInvariant : unit -> string

返回值

类型： System String
当前字符串的大写形式。

该固定区域性表示不区分区域性的区域性。它与英语语言关联，但不与任何国家/地区关联。有关更多信息，请参见使用 InvariantCulture 属性。 该固定区域性表示不区分区域性的区域性。它与英语语言关联，但不与任何国家/地区关联。有关更多信息，请参见使用 InvariantCulture 属性。 该固定区域性表示不区分区域性的区域性。它与英语语言关联，但不与任何国家/地区关联。有关更多信息，请参见使用 InvariantCulture 属性。

如果应用程序需要以可预测的方式更改字符串的大小写，该方式不受当前区域性的影响，则使用 ToUpperInvariant 方法。ToUpperInvariant 方法与 ToUpper(CultureInfo.InvariantCulture) 等效。当集合中的字符串必须按可预知的顺序在用户界面控件中显示时，建议使用该方法。
如果应用程序需要以可预测的方式更改字符串的大小写，该方式不受当前区域性的影响，则使用 ToUpperInvariant 方法。ToUpperInvariant 方法与 ToUpper(CultureInfo.InvariantCulture) 等效。当集合中的字符串必须按可预知的顺序在用户界面控件中显示时，建议使用该方法。
如果应用程序需要以可预测的方式更改字符串的大小写，该方式不受当前区域性的影响，则使用 ToUpperInvariant 方法。ToUpperInvariant 方法与 ToUpper(CultureInfo.InvariantCulture) 等效。当集合中的字符串必须按可预知的顺序在用户界面控件中显示时，建议使用该方法。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为大写。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中的所有字符都会转换为大写。

安全注意事项

如果您需要操作系统标识符（如文件名、命名管道或注册表项）的小写或大写版本，请使用 ToLowerInvariant 或 ToUpperInvariant 方法。

下面的示例定义了一个字符串数组，包含许多语言表示的一个单词。ToUpperInvariant 方法用来使用每个单词的不区分大小写的版本填充并行数组的元素。Array..::.Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 方法用来根据大写数组中元素的顺序对区分大小写的数组排序，以确保元素按相同顺序显示而与语言无关。 下面的示例定义了一个字符串数组，包含许多语言表示的一个单词。ToUpperInvariant 方法用来使用每个单词的不区分大小写的版本填充并行数组的元素。Array..::.Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 方法用来根据大写数组中元素的顺序对区分大小写的数组排序，以确保元素按相同顺序显示而与语言无关。 下面的示例定义了一个字符串数组，包含许多语言表示的一个单词。ToUpperInvariant 方法用来使用每个单词的不区分大小写的版本填充并行数组的元素。Array..::.Sort<(Of <(TKey, TValue>)>)(array<TKey>[]()[], array<TValue>[]()[], IComparer<(Of <(TKey>)>)) 方法用来根据大写数组中元素的顺序对区分大小写的数组排序，以确保元素按相同顺序显示而与语言无关。

Module Example
   Public Sub Main()
      Dim words() As String = { "Tuesday", "Sal ", "Вторник", "Mardi", _
                                "Τρ τη", "Martes", "         ", _
                                "        ", "         " }
      ' Display array in unsorted order.
      For Each word As String In words
         Console.WriteLine(word)
      Next
      Console.WriteLine()

      ' Create parallel array of words by calling ToUpperInvariant.
      Dim upperWords(words.Length - 1) As String
      For ctr As Integer = words.GetLowerBound(0) To words.GetUpperBound(0)
         upperWords(ctr) = words(ctr).ToUpperInvariant()
      Next

      ' Sort the words array based on the order of upperWords.
      Array.Sort(upperWords, words, StringComparer.InvariantCulture)

      ' Display the sorted array.
      For Each word As String In words
         Console.WriteLine(word)
      Next
   End Sub
End Module
' The example displays the following output:
'       Tuesday
'       Sal
'       Вторник
'       Mardi
'       Τρ τη
'       Martes
'
'
'
'
'       Mardi
'       Martes
'       Sal
'       Tuesday
'       Τρ τη
'       Вторник
'
'
'

using System;

public class Example
{
   public static void Main()
   {
      string[] words = { "Tuesday", "Sal ", "Вторник", "Mardi",
                         "Τρ τη", "Martes", "         ",
                         "        ", "         " };
      // Display array in unsorted order.
      foreach (string word in words)
         Console.WriteLine(word);
      Console.WriteLine();

      // Create parallel array of words by calling ToUpperInvariant.
      string[] upperWords = new string[words.Length];
      for (int ctr = words.GetLowerBound(0); ctr <= words.GetUpperBound(0); ctr++)
         upperWords[ctr] = words[ctr].ToUpperInvariant();

      // Sort the words array based on the order of upperWords.
      Array.Sort(upperWords, words, StringComparer.InvariantCulture);

      // Display the sorted array.
      foreach (string word in words)
         Console.WriteLine(word);
   }
}
// The example displays the following output:
//       Tuesday
//       Sal
//       Вторник
//       Mardi
//       Τρ τη
//       Martes
//
//
//
//
//       Mardi
//       Martes
//       Sal
//       Tuesday
//       Τρ τη
//       Вторник
//
//
//

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

String 类
String 成员
System 命名空间
ToLowerInvariant
ToUpper
InvariantCulture


String ..::.Trim 方法

String
.
.
::
.
Trim 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

返回一个新字符串，它相当于从当前 String 对象中移除了一组指定字符的所有前导匹配项和尾随匹配项。

名称 说明
页首

参考

String 类
String 成员
System 命名空间


String ..::.Trim 方法

String
.
.
::
.
Trim 方法
String 类

从当前 String 对象移除所有前导空白字符和尾部空白字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Trim As String
public string Trim()
public:
String^ Trim()
member Trim : unit -> string

返回值

类型： System String
从当前字符串的开头和结尾删除所有空白字符后剩余的字符串。

Trim 方法从当前字符串移除所有前导空白字符和尾部空白字符。遇到非空白字符时，每个前导裁剪操作和尾部裁剪操作都会停止。例如，如果当前字符串为“ abc xyz ”，则 Trim 方法返回“abc xyz”。 Trim 方法从当前字符串移除所有前导空白字符和尾部空白字符。遇到非空白字符时，每个前导裁剪操作和尾部裁剪操作都会停止。例如，如果当前字符串为“ abc xyz ”，则 Trim 方法返回“abc xyz”。 Trim 方法从当前字符串移除所有前导空白字符和尾部空白字符。遇到非空白字符时，每个前导裁剪操作和尾部裁剪操作都会停止。例如，如果当前字符串为“ abc xyz ”，则 Trim 方法返回“abc xyz”。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中找到的所有前导和尾随空白字符均被移除。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，当前实例中找到的所有前导和尾随空白字符均被移除。

如果当前字符串等于 Empty 或当前实例中的所有字符由空白字符组成，该方法将返回 Empty。

空白字符由 Unicode 标准定义。Trim()()() 方法删除在传递到 Char..::.IsWhiteSpace 方法时生成返回值 true 的任何前导字符和尾随字符。 空白字符由 Unicode 标准定义。Trim()()() 方法删除在传递到 Char..::.IsWhiteSpace 方法时生成返回值 true 的任何前导字符和尾随字符。

对调用者的说明

.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 .NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 .NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 .NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。

下面的示例使用 String..::.Trim()()() 方法从用户输入的字符串中删除任何多余空白，然后再连接字符串。

Module Example
   Public Sub Main()
      Console.Write("Enter your first name: ")
      Dim firstName As String = Console.ReadLine()

      Console.Write("Enter your middle name or initial: ")
      Dim middleName As String = Console.ReadLine()

      Console.Write("Enter your last name: ")
      Dim lastName As String = Console.ReadLine

      Console.WriteLine()
      Console.WriteLine("You entered '{0}', '{1}', and '{2}'.", _
                        firstName, middleName, lastName)

      Dim name As String = (firstName.Trim() + " " + middleName.Trim()).Trim() _
                           + " " + lastName.Trim()
      Console.WriteLine("The result is " + name + ".")
   End Sub
End Module
' The following is possible output from this example:
'       Enter your first name:    John
'       Enter your middle name or initial:
'       Enter your last name:    Doe
'
'       You entered '   John  ', '', and '   Doe'.
'       The result is John Doe

using System;

public class Example
{
   public static void Main()
   {
      Console.Write("Enter your first name: ");
      string firstName = Console.ReadLine();

      Console.Write("Enter your middle name or initial: ");
      string middleName = Console.ReadLine();

      Console.Write("Enter your last name: ");
      string lastName = Console.ReadLine();

      Console.WriteLine();
      Console.WriteLine("You entered '{0}', '{1}', and '{2}'.",
                        firstName, middleName, lastName);

      string name = (firstName.Trim() + " " + middleName.Trim()).Trim() + " " +
                    lastName.Trim();
      Console.WriteLine("The result is " + name + ".");
   }
}
// The following is possible output from this example:
//       Enter your first name:    John
//       Enter your middle name or initial:
//       Enter your last name:    Doe
//
//       You entered '   John  ', '', and '   Doe'.
//       The result is John Doe

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Trim 重载
System 命名空间
TrimEnd
TrimStart
Char IsWhiteSpace


String ..::.Trim 方法 ( array<Char >[]()[])

String
.
.
::
.
Trim 方法 (
array<
Char
>
[]
()
[]
)
String 类

从当前 String 对象移除数组中指定的一组字符的所有前导匹配项和尾部匹配项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Trim ( _
    ParamArray trimChars As Char() _
) As String
public string Trim(
    params char[] trimChars
)
public:
String^ Trim(
    ... array<wchar_t>^ trimChars
)
member Trim :
        trimChars:char[] -> string

参数

trimChars
类型：
array<
System Char
>
[]
()
[]

要删除的 Unicode 字符的数组，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System String
从当前字符串的开头和结尾删除所出现的所有 trimChars 参数中的字符后剩余的字符串。如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，则改为删除空白字符。 从当前字符串的开头和结尾删除所出现的所有 trimChars 参数中的字符后剩余的字符串。如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，则改为删除空白字符。

Trim 方法从当前字符串移除 trimChars 参数中的所有前导字符和尾部字符。遇到不在 trimChars 中的字符时，每个前导裁剪操作和尾部裁剪操作都会停止。例如，如果当前字符串为“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字，则 Trim 方法返回“abc456xyz”。 Trim 方法从当前字符串移除 trimChars 参数中的所有前导字符和尾部字符。遇到不在 trimChars 中的字符时，每个前导裁剪操作和尾部裁剪操作都会停止。例如，如果当前字符串为“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字，则 Trim 方法返回“abc456xyz”。 Trim 方法从当前字符串移除 trimChars 参数中的所有前导字符和尾部字符。遇到不在 trimChars 中的字符时，每个前导裁剪操作和尾部裁剪操作都会停止。例如，如果当前字符串为“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字，则 Trim 方法返回“abc456xyz”。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，移除了当前实例中找到的所有前导和尾随 trimChars 字符。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，移除了当前实例中找到的所有前导和尾随 trimChars 字符。

如果当前字符串等于 Empty 或当前实例中的所有字符由 trimChars 数组中的字符组成，该方法将返回 Empty。

如果 trimChars 是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，此方法将删除任何前导或尾随字符，这些字符在传递到 Char..::.IsWhiteSpace 方法时导致前一个方法返回 true。

对调用者的说明

如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。

下面的示例使用 String..::.Trim(array<Char>[]()[]) 方法从字符串中删除空格、星号 (*) 和撇号 (') 字符。

Module Example
   Public Sub Main()
      Dim charsToTrim() As Char = { "*"c, " "c, "'"c}
      Dim banner As String = "*** Much Ado About Nothing ***"
      Dim result As String = banner.Trim(charsToTrim)
      Console.WriteLine("Trimmmed{0}   {1}{0}to{0}   '{2}'", _
                        vbCrLf, banner, result)
   End Sub
End Module
' The example displays the following output:
'       Trimmmed
'          *** Much Ado About Nothing ***
'       to
'          'Much Ado About Nothing'

using System;

public class Example
{
   public static void Main()
   {
      char[] charsToTrim = { '*', ' ', '\''};
      string banner = "*** Much Ado About Nothing ***";
      string result = banner.Trim(charsToTrim);
      Console.WriteLine("Trimmmed\n   {0}\nto\n   '{1}'", banner, result);
   }
}
// The example displays the following output:
//       Trimmmed
//          *** Much Ado About Nothing ***
//       to
//          'Much Ado About Nothing'

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
Trim 重载
System 命名空间
Char
TrimEnd
TrimStart
Char IsWhiteSpace


String ..::.TrimEnd 方法

String
.
.
::
.
TrimEnd 方法
String 类

从当前 String 对象移除数组中指定的一组字符的所有尾部匹配项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function TrimEnd ( _
    ParamArray trimChars As Char() _
) As String
public string TrimEnd(
    params char[] trimChars
)
public:
String^ TrimEnd(
    ... array<wchar_t>^ trimChars
)
member TrimEnd :
        trimChars:char[] -> string

参数

trimChars
类型：
array<
System Char
>
[]
()
[]

要删除的 Unicode 字符的数组，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System String
从当前字符串的结尾删除所出现的所有 trimChars 参数中的字符后剩余的字符串。如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，则改为删除 Unicode 空白字符。 从当前字符串的结尾删除所出现的所有 trimChars 参数中的字符后剩余的字符串。如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，则改为删除 Unicode 空白字符。

TrimEnd 方法从当前字符串移除 trimChars 参数中的所有尾部字符。在字符串末尾遇到了不在 trimChars 中的第一个字符时，剪裁操作停止。例如，如果当前字符串为“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字，则 TrimEnd 方法返回“123abc456xyz”。 TrimEnd 方法从当前字符串移除 trimChars 参数中的所有尾部字符。在字符串末尾遇到了不在 trimChars 中的第一个字符时，剪裁操作停止。例如，如果当前字符串为“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字，则 TrimEnd 方法返回“123abc456xyz”。 TrimEnd 方法从当前字符串移除 trimChars 参数中的所有尾部字符。在字符串末尾遇到了不在 trimChars 中的第一个字符时，剪裁操作停止。例如，如果当前字符串为“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字，则 TrimEnd 方法返回“123abc456xyz”。

说明 说明

此方法不修改当前实例的值。而是返回一个从当前字符串中移除在 trimChars 中找到的所有尾随字符后得到的新字符串。 此方法不修改当前实例的值。而是返回一个从当前字符串中移除在 trimChars 中找到的所有尾随字符后得到的新字符串。

对调用者的说明

如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim()()() 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim()()() 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim()()() 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim()()() 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim()()() 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim()()() 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim()()() 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim()()() 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim()()() 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim()()() 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim()()() 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim()()() 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。

下面的示例演示如何使用 TrimEnd(array<Char>[]()[]) 方法删除字符串末尾的空白字符或标点符号。

Module TrimEnd
   Public Sub Main()
      Dim sentence As String = "The dog had a bone, a ball, and other toys."
      Dim charsToTrim() As Char = {","c, "."c, " "c}
      Dim words() As String = sentence.Split()
      For Each word As String In words
         Console.WriteLine(word.TrimEnd(charsToTrim))
      Next
   End Sub
End Module
' The example displays the following output:
'       The
'       dog
'       had
'       a
'       bone
'       a
'       ball
'       and
'       other
'       toys

using System;

public class TrimEnd
{
   public static void Main()
   {
      string sentence = "The dog had a bone, a ball, and other toys.";
      char[] charsToTrim = {',', '.', ' '};
      string[] words = sentence.Split();
      foreach (string word in words)
         Console.WriteLine(word.TrimEnd(charsToTrim));
   }
}
// The example displays the following output:
//       The
//       dog
//       had
//       a
//       bone
//       a
//       ball
//       and
//       other
//       toys

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Char
Trim
TrimStart
Char IsWhiteSpace


String ..::.TrimStart 方法

String
.
.
::
.
TrimStart 方法
String 类

从当前 String 对象移除数组中指定的一组字符的所有前导匹配项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function TrimStart ( _
    ParamArray trimChars As Char() _
) As String
public string TrimStart(
    params char[] trimChars
)
public:
String^ TrimStart(
    ... array<wchar_t>^ trimChars
)
member TrimStart :
        trimChars:char[] -> string

参数

trimChars
类型：
array<
System Char
>
[]
()
[]

要删除的 Unicode 字符的数组，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System String
从当前字符串的开头删除所出现的所有 trimChars 参数中的字符后剩余的字符串。如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，则改为删除空白字符。 从当前字符串的开头删除所出现的所有 trimChars 参数中的字符后剩余的字符串。如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，则改为删除空白字符。

TrimStart 方法从当前字符串移除 trimChars 参数中的所有前导字符。遇到不在 trimChars 中的字符时，裁剪操作停止。例如，如果当前字符串为“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字，则 TrimStart 方法返回“abc456xyz789”。 TrimStart 方法从当前字符串移除 trimChars 参数中的所有前导字符。遇到不在 trimChars 中的字符时，裁剪操作停止。例如，如果当前字符串为“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字，则 TrimStart 方法返回“abc456xyz789”。 TrimStart 方法从当前字符串移除 trimChars 参数中的所有前导字符。遇到不在 trimChars 中的字符时，裁剪操作停止。例如，如果当前字符串为“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字，则 TrimStart 方法返回“abc456xyz789”。

说明 说明

此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，移除了当前实例中找到的所有前导空白字符。 此方法不修改当前实例的值。而是返回一个新字符串，在该字符串中，移除了当前实例中找到的所有前导空白字符。

对调用者的说明

如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim()()() 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim()()() 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim()()() 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim()()() 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim()()() 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim()()() 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim()()() 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim()()() 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim()()() 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。 如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，.NET Framework 3.5 SP1 和早期版本维护一个此方法修整的空白字符的内部列表。从 .NET Framework 4 开始，如果 trimChars 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空数组，该方法将修整所有 Unicode 空白字符（也就是在传递到 Char..::.IsWhiteSpace 方法时生成 true 返回值的字符）。由于该更改，.NET Framework 3.5 SP1 中的 Trim()()() 方法以及早期版本会删除两个字符 ZERO WIDTH SPACE (U+200B) 和 ZERO WIDTH NO-BREAK SPACE (U+FEFF)，而 .NET Framework 4 中的 Trim()()() 方法不会删除这些字符。此外，.NET Framework 3.5 SP1 以及更早版本中的 Trim()()() 方法也不会修整三个 Unicode 空白字符：MONGOLIAN VOWEL SEPARATOR (U+180E)、NARROW NO-BREAK SPACE (U+202F) 和 MEDIUM MATHEMATICAL SPACE (U+205F)。

下面的示例使用 TrimStart 方法从源代码行中裁剪空白字符和注释字符。StripComments 方法将包装对 TrimStart 的调用并向其传递一个包含空白和注释字符的字符数组（在 Visual Basic 中为撇号 (')，在 C# 中为斜杠 (/)）。当评估字符串是否为注释时，还将调用 TrimStart 方法以移除前导空白。 下面的示例使用 TrimStart 方法从源代码行中裁剪空白字符和注释字符。StripComments 方法将包装对 TrimStart 的调用并向其传递一个包含空白和注释字符的字符数组（在 Visual Basic 中为撇号 (')，在 C# 中为斜杠 (/)）。当评估字符串是否为注释时，还将调用 TrimStart 方法以移除前导空白。 下面的示例使用 TrimStart 方法从源代码行中裁剪空白字符和注释字符。StripComments 方法将包装对 TrimStart 的调用并向其传递一个包含空白和注释字符的字符数组（在 Visual Basic 中为撇号 (')，在 C# 中为斜杠 (/)）。当评估字符串是否为注释时，还将调用 TrimStart 方法以移除前导空白。

Public Shared Function StripComments(lines() As String) As String()
   Dim lineList As New List(Of String)
   For Each line As String In lines
      If line.TrimStart(" "c).StartsWith("'") Then
         linelist.Add(line.TrimStart("'"c, " "c))
      End If
   Next
   Return lineList.ToArray()
End Function

public static string[] StripComments(string[] lines)
{
   List<string> lineList = new List<string>();
   foreach (string line in lines)
   {
      if (line.TrimStart(' ').StartsWith("//"))
         lineList.Add(line.TrimStart(' ', '/'));
   }
   return lineList.ToArray();
}

然后，下面的示例演示对 StripComments 方法的调用。

Public Shared Sub Main()
   Dim lines() As String = {"Public Module HelloWorld", _
                            "   Public Sub Main()", _
                            "      ' This code displays a simple greeting", _
                            "      ' to the console.", _
                            "      Console.WriteLine(""Hello, World."")", _
                            "   End Sub", _
                            " End Module"}
   Console.WriteLine("Code before call to StripComments:")
   For Each line As String In lines
      Console.WriteLine("   {0}", line)
   Next

   Dim strippedLines() As String = StripComments(lines)
   Console.WriteLine("Code after call to StripComments:")
   For Each line As String In strippedLines
      Console.WriteLine("   {0}", line)
   Next
End Sub
' This code produces the following output to the console:
'    Code before call to StripComments:
'       Public Module HelloWorld
'          Public Sub Main()
'             ' This code displays a simple greeting
'             ' to the console.
'             Console.WriteLine("Hello, World.")
'          End Sub
'       End Module
'    Code after call to StripComments:
'       This code displays a simple greeting
'       to the console.

public static void Main()
{
   string[] lines= {"using System;",
                    "",
                    "public class HelloWorld",
                    "{",
                    "   public static void Main()",
                    "   {",
                    "      // This code displays a simple greeting",
                    "      // to the console.",
                    "      Console.WriteLine(\"Hello, World.\");",
                    "   }",
                    "}"};
   Console.WriteLine("Before call to StripComments:");
   foreach (string line in lines)
      Console.WriteLine("   {0}", line);

   string[] strippedLines = StripComments(lines);
   Console.WriteLine("After call to StripComments:");
   foreach (string line in strippedLines)
      Console.WriteLine("   {0}", line);
}
// This code produces the following output to the console:
//    Before call to StripComments:
//       using System;
//
//       public class HelloWorld
//       {
//           public static void Main()
//           {
//               // This code displays a simple greeting
//               // to the console.
//               Console.WriteLine("Hello, World.");
//           }
//       }
//    After call to StripComments:
//       This code displays a simple greeting
//       to the console.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Char
Trim
TrimEnd
Char IsWhiteSpace


String 运算符

String 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

String 类型公开以下成员。

名称 说明
页首

参考

String 类
System 命名空间


String ..::.Equality 运算符

String
.
.
::
.
Equality 运算符
String 类

确定两个指定的字符串是否具有相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    a As String, _
    b As String _
) As Boolean
public static bool operator ==(
    string a,
    string b
)
public:
static bool operator ==(
    String^ a,
    String^ b
)
static let inline (=)
        a:string *
        b:string  : bool

参数

a
类型： System String
要比较的第一个字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
b
类型： System String
要比较的第二个字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 a 的值与 b 的值相同，则为 true；否则为 false。

Equality 方法为 String 类定义了相等运算符的运算。

使用 Equals 方法实现此运算符，这意味着就引用相等和值相等的组合对比较数进行测试。此运算符执行序号比较。 使用 Equals 方法实现此运算符，这意味着就引用相等和值相等的组合对比较数进行测试。此运算符执行序号比较。

说明 说明

Visual Basic 编译器不会将相等运算符解析为对 Equality 方法的调用。而是，相等运算符会包装对 Operators..::.CompareString 方法的调用。 Visual Basic 编译器不会将相等运算符解析为对 Equality 方法的调用。而是，相等运算符会包装对 Operators..::.CompareString 方法的调用。

下面的示例演示相等运算符。

// Example for the String Equality operator.
using System;

class EqualityOp
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of the String Equality operator\n" +
            "generates the following output.\n" );

        CompareAndDisplay( "ijkl" );
        CompareAndDisplay( "ABCD" );
        CompareAndDisplay( "abcd" );
    }

    static void CompareAndDisplay( string Comparand )
    {
        String  Lower = "abcd";

        Console.WriteLine(
            "\"{0}\" == \"{1}\" ?  {2}",
            Lower, Comparand, Lower == Comparand );
    }
}

/*
This example of the String Equality operator
generates the following output.

"abcd" == "ijkl" ?  False
"abcd" == "ABCD" ?  False
"abcd" == "abcd" ?  True
*/

// Example for the String Equality operator.
using namespace System;
void CompareAndDisplay( String^ Comparand )
{
   String^ Lower = "abcd";
   Console::WriteLine( "\"{0}\" == \"{1}\" ?  {2}", Lower, Comparand, Lower == Comparand );
}

int main()
{
   Console::WriteLine( "This example of the String Equality operator\n"
   "generates the following output.\n" );
   CompareAndDisplay( "ijkl" );
   CompareAndDisplay( "ABCD" );
   CompareAndDisplay( "abcd" );
}

/*
This example of the String Equality operator
generates the following output.

"abcd" == "ijkl" ?  False
"abcd" == "ABCD" ?  False
"abcd" == "abcd" ?  True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String ..::.Inequality 运算符

String
.
.
::
.
Inequality 运算符
String 类

确定两个指定的字符串是否具有不同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    a As String, _
    b As String _
) As Boolean
public static bool operator !=(
    string a,
    string b
)
public:
static bool operator !=(
    String^ a,
    String^ b
)
static let inline (<>)
        a:string *
        b:string  : bool

参数

a
类型： System String
要比较的第一个字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
b
类型： System String
要比较的第二个字符串，或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 a 的值与 b 的值不同，则为 true；否则为 false。

Inequality 方法为 String 类定义了不相等运算符的运算。

使用 Equals 方法实现此运算符，这意味着就引用相等和值相等的组合对比较数进行测试。此运算符执行序号比较。 使用 Equals 方法实现此运算符，这意味着就引用相等和值相等的组合对比较数进行测试。此运算符执行序号比较。

说明 说明

Visual Basic 编译器不会将不等运算符解析为对 Inequality 方法的调用。而是，不相等运算符会包装对 Operators..::.CompareString 方法的调用。 Visual Basic 编译器不会将不等运算符解析为对 Inequality 方法的调用。而是，不相等运算符会包装对 Operators..::.CompareString 方法的调用。

下面的示例演示不等运算符。

// Example for the String Inequality operator.
using System;

class InequalityOp
{
    public static void Main()
    {
        Console.WriteLine(
            "This example of the String Inequality operator\n" +
            "generates the following output.\n" );

        CompareAndDisplay( "ijkl" );
        CompareAndDisplay( "ABCD" );
        CompareAndDisplay( "abcd" );
    }

    static void CompareAndDisplay( String Comparand )
    {
        String  Lower = "abcd";

        Console.WriteLine(
            "\"{0}\" != \"{1}\" ?  {2}",
            Lower, Comparand, Lower != Comparand );
    }
}

/*
This example of the String Inequality operator
generates the following output.

"abcd" != "ijkl" ?  True
"abcd" != "ABCD" ?  True
"abcd" != "abcd" ?  False
*/

// Example for the String Inequality operator.
using namespace System;
void CompareAndDisplay( String^ Comparand )
{
   String^ Lower = "abcd";
   Console::WriteLine( "\"{0}\" != \"{1}\" ?  {2}", Lower, Comparand, Lower != Comparand );
}

int main()
{
   Console::WriteLine( "This example of the String Inequality operator\n"
   "generates the following output.\n" );
   CompareAndDisplay( "ijkl" );
   CompareAndDisplay( "ABCD" );
   CompareAndDisplay( "abcd" );
}

/*
This example of the String Inequality operator
generates the following output.

"abcd" != "ijkl" ?  True
"abcd" != "ABCD" ?  True
"abcd" != "abcd" ?  False
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间


String 属性

String 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
String 类

String 类型公开以下成员。

名称 说明
页首

参考

String 类
System 命名空间


String ..::.Chars 属性

String
.
.
::
.
Chars 属性
String 类

获取当前 String 对象中位于指定字符位置的字符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Chars ( _
    index As Integer _
) As Char
    Get
public char this[
    int index
] { get; }
public:
property wchar_t Chars[int index] {
    wchar_t get (int index);
}
member Chars : char

参数

index
类型： System Int32
当前字符串中的字符位置。

属性值

类型： System Char
一个 Unicode 字符。
异常 | 条件
IndexOutOfRangeException | index 大于等于该对象的长度或小于零。

index 参数从零开始。

此属性在 index 参数指定的位置返回 Char。但是，一个 Unicode 字符可能会用多个 Char 表示。使用 System.Globalization..::.StringInfo 类来处理每个 Unicode 字符而不是每个 Char。 此属性在 index 参数指定的位置返回 Char。但是，一个 Unicode 字符可能会用多个 Char 表示。使用 System.Globalization..::.StringInfo 类来处理每个 Unicode 字符而不是每个 Char。 此属性在 index 参数指定的位置返回 Char。但是，一个 Unicode 字符可能会用多个 Char 表示。使用 System.Globalization..::.StringInfo 类来处理每个 Unicode 字符而不是每个 Char。

下面的示例演示如何在例程中使用此索引器来验证字符串。

Console.Write("Type a string : ")
Dim myString As String = Console.ReadLine()
Dim i As Integer
For i = 0 To myString.Length - 1
   If Uri.IsHexDigit(myString.Chars(i)) Then
      Console.WriteLine("{0} is a hexadecimal digit.", myString.Chars(i))
   Else
      Console.WriteLine("{0} is not a hexadecimal digit.", myString.Chars(i))
   End If

            Console.Write("Type a string : ");
            string myString = Console.ReadLine();
            for (int i = 0; i < myString.Length; i ++)
            if(Uri.IsHexDigit(myString[i]))
                   Console.WriteLine("{0} is a hexadecimal digit.", myString[i]);
            else
               Console.WriteLine("{0} is not a hexadecimal digit.", myString[i]);

Console::Write( "Type a string : " );
String^ myString = Console::ReadLine();
for ( int i = 0; i < myString->Length; i++ )
   if ( Uri::IsHexDigit( myString[ i ] ) )
            Console::WriteLine( "{0} is a hexadecimal digit.", myString[ i ] );
   else
            Console::WriteLine( "{0} is not a hexadecimal digit.", myString[ i ] );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Char
GetEnumerator
Int32


String ..::.Length 属性

String
.
.
::
.
Length 属性
String 类

获取当前 String 对象中的字符数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Length As Integer
    Get
public int Length { get; }
public:
property int Length {
    int get ();
}
member Length : int

属性值

类型： System Int32
当前字符串中字符的数量。

Length 属性返回此实例中 Char 对象的个数，而不是 Unicode 字符个数。原因在于一个 Unicode 字符可能会用多个 Char 表示。使用 System.Globalization..::.StringInfo 类来处理每个 Unicode 字符而不是每个 Char。 Length 属性返回此实例中 Char 对象的个数，而不是 Unicode 字符个数。原因在于一个 Unicode 字符可能会用多个 Char 表示。使用 System.Globalization..::.StringInfo 类来处理每个 Unicode 字符而不是每个 Char。 Length 属性返回此实例中 Char 对象的个数，而不是 Unicode 字符个数。原因在于一个 Unicode 字符可能会用多个 Char 表示。使用 System.Globalization..::.StringInfo 类来处理每个 Unicode 字符而不是每个 Char。

在某些语言（例如 C 和 C++）中，null 字符指示字符串的结尾。在 .NET Framework 中，null 字符可以嵌入到字符串中。当字符串包含一个或多个 null 字符时，这些空字符将包括在字符串的总长度中。例如，在下面的字符串中，子字符串“abc”和“def”由一个 null 字符分隔。Length 属性返回 7，表示它包含六个字母字符以及一个 null 字符。 在某些语言（例如 C 和 C++）中，null 字符指示字符串的结尾。在 .NET Framework 中，null 字符可以嵌入到字符串中。当字符串包含一个或多个 null 字符时，这些空字符将包括在字符串的总长度中。例如，在下面的字符串中，子字符串“abc”和“def”由一个 null 字符分隔。Length 属性返回 7，表示它包含六个字母字符以及一个 null 字符。 在某些语言（例如 C 和 C++）中，null 字符指示字符串的结尾。在 .NET Framework 中，null 字符可以嵌入到字符串中。当字符串包含一个或多个 null 字符时，这些空字符将包括在字符串的总长度中。例如，在下面的字符串中，子字符串“abc”和“def”由一个 null 字符分隔。Length 属性返回 7，表示它包含六个字母字符以及一个 null 字符。 在某些语言（例如 C 和 C++）中，null 字符指示字符串的结尾。在 .NET Framework 中，null 字符可以嵌入到字符串中。当字符串包含一个或多个 null 字符时，这些空字符将包括在字符串的总长度中。例如，在下面的字符串中，子字符串“abc”和“def”由一个 null 字符分隔。Length 属性返回 7，表示它包含六个字母字符以及一个 null 字符。 在某些语言（例如 C 和 C++）中，null 字符指示字符串的结尾。在 .NET Framework 中，null 字符可以嵌入到字符串中。当字符串包含一个或多个 null 字符时，这些空字符将包括在字符串的总长度中。例如，在下面的字符串中，子字符串“abc”和“def”由一个 null 字符分隔。Length 属性返回 7，表示它包含六个字母字符以及一个 null 字符。

Dim charactersBuilder As New StringBuilder("abc")
Dim characters As String

charactersBuilder.Append(Chr(0))
charactersBuilder.Append("def")

characters = charactersBuilder.ToString()
Console.WriteLine(characters.Length)

StringBuilder charactersBuilder = new StringBuilder("abc");
string characters;

charactersBuilder.Append('\0');
charactersBuilder.Append("def");

characters = charactersBuilder.ToString();
Console.WriteLine(characters.Length);

下面的示例阐释了 Length 属性。

' Sample for String.Length
Imports System

Class Sample
   Public Shared Sub Main()
      Dim str As String = "abcdefg"
      Console.WriteLine("1) The length of '{0}' is {1}", str, str.Length)
      Console.WriteLine("2) The length of '{0}' is {1}", "xyz", "xyz".Length)
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'1) The length of 'abcdefg' is 7
'2) The length of 'xyz' is 3
'

// Sample for String.Length
using System;

class Sample
{
    public static void Main()
    {
    string str = "abcdefg";
    Console.WriteLine("1) The length of '{0}' is {1}", str, str.Length);
    Console.WriteLine("2) The length of '{0}' is {1}", "xyz", "xyz".Length);
    }
}
/*
This example produces the following results:
1) The length of 'abcdefg' is 7
2) The length of 'xyz' is 3
*/

// Sample for String::Length
using namespace System;
int main()
{
   String^ str = "abcdefg";
   Console::WriteLine( "1) The length of '{0}' is {1}", str, str->Length );
   Console::WriteLine( "2) The length of '{0}' is {1}", "xyz", ((String^)"xyz")->Length );
}

/*
This example produces the following results:
1) The length of 'abcdefg' is 7
2) The length of 'xyz' is 3
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

String 类
String 成员
System 命名空间
Int32


StringComparer 类

StringComparer 类
成员

表示一种字符串比较操作，该操作使用特定的大小写以及基于区域性的比较规则或序号比较规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class StringComparer _
    Implements IComparer, IEqualityComparer, IComparer(Of String),  _
    IEqualityComparer(Of String)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class StringComparer : IComparer,
    IEqualityComparer, IComparer<string>, IEqualityComparer<string>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class StringComparer abstract : IComparer,
    IEqualityComparer, IComparer<String^>, IEqualityComparer<String^>
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type StringComparer =
    class
        interface IComparer
        interface IEqualityComparer
        interface IComparer<string>
        interface IEqualityComparer<string>
    end

从 StringComparer 类派生的对象包含基于字符串的比较操作、相等操作和哈希代码操作，这些操作同时考虑大小写和特定于区域性的比较规则。可以使用 StringComparer 类创建一个特定于类型的比较，以对泛型集合中的元素进行排序。Hashtable、Dictionary<(Of <(TKey, TValue>)>)、SortedList 和 SortedList<(Of <(TKey, TValue>)>) 等类使用 StringComparer 类进行排序。 从 StringComparer 类派生的对象包含基于字符串的比较操作、相等操作和哈希代码操作，这些操作同时考虑大小写和特定于区域性的比较规则。可以使用 StringComparer 类创建一个特定于类型的比较，以对泛型集合中的元素进行排序。Hashtable、Dictionary<(Of <(TKey, TValue>)>)、SortedList 和 SortedList<(Of <(TKey, TValue>)>) 等类使用 StringComparer 类进行排序。 从 StringComparer 类派生的对象包含基于字符串的比较操作、相等操作和哈希代码操作，这些操作同时考虑大小写和特定于区域性的比较规则。可以使用 StringComparer 类创建一个特定于类型的比较，以对泛型集合中的元素进行排序。Hashtable、Dictionary<(Of <(TKey, TValue>)>)、SortedList 和 SortedList<(Of <(TKey, TValue>)>) 等类使用 StringComparer 类进行排序。

由 StringComparer 类表示的比较操作可定义为区分大小写或不区分大小写，并可以使用单词（区分区域性）或序号（不区分区域性）比较规则。有关单词和序号比较规则的更多信息，请参见 System.Globalization..::.CompareOptions。 由 StringComparer 类表示的比较操作可定义为区分大小写或不区分大小写，并可以使用单词（区分区域性）或序号（不区分区域性）比较规则。有关单词和序号比较规则的更多信息，请参见 System.Globalization..::.CompareOptions。

实现的属性

您可能会对如何使用 StringComparer 类属性感到困惑，因为这其中似乎存在一个矛盾。StringComparer 类被声明为 abstract（Visual Basic 中为 MustInherit），这意味着只能对从 StringComparer 类派生的类的对象调用它的成员。矛盾在于 StringComparer 类的每个属性都被声明为 static（Visual Basic 中为 Shared），这意味着不必先创建一个派生类即可调用这些属性。 您可能会对如何使用 StringComparer 类属性感到困惑，因为这其中似乎存在一个矛盾。StringComparer 类被声明为 abstract（Visual Basic 中为 MustInherit），这意味着只能对从 StringComparer 类派生的类的对象调用它的成员。矛盾在于 StringComparer 类的每个属性都被声明为 static（Visual Basic 中为 Shared），这意味着不必先创建一个派生类即可调用这些属性。 您可能会对如何使用 StringComparer 类属性感到困惑，因为这其中似乎存在一个矛盾。StringComparer 类被声明为 abstract（Visual Basic 中为 MustInherit），这意味着只能对从 StringComparer 类派生的类的对象调用它的成员。矛盾在于 StringComparer 类的每个属性都被声明为 static（Visual Basic 中为 Shared），这意味着不必先创建一个派生类即可调用这些属性。

您可以直接调用 StringComparer 属性，因为每个属性实际上返回的是从 StringComparer 类派生的匿名类的实例。因此，每个属性值的类型是 StringComparer，它是匿名类的基类，而不是匿名类自身的类型。每个 StringComparer 类属性都返回支持预定义大小写和比较规则的 StringComparer 对象。 您可以直接调用 StringComparer 属性，因为每个属性实际上返回的是从 StringComparer 类派生的匿名类的实例。因此，每个属性值的类型是 StringComparer，它是匿名类的基类，而不是匿名类自身的类型。每个 StringComparer 类属性都返回支持预定义大小写和比较规则的 StringComparer 对象。 您可以直接调用 StringComparer 属性，因为每个属性实际上返回的是从 StringComparer 类派生的匿名类的实例。因此，每个属性值的类型是 StringComparer，它是匿名类的基类，而不是匿名类自身的类型。每个 StringComparer 类属性都返回支持预定义大小写和比较规则的 StringComparer 对象。

下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。 下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。

' This code example demonstrates members of the System.StringComparer class.

Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading

Class Sample

    Public Shared Sub Main()
        ' Create a list of string.
        Dim list As New List(Of String)

        ' Get the tr-TR (Turkish-Turkey) culture.
        Dim turkish As New CultureInfo("tr-TR")

        ' Get the culture that is associated with the current thread.
        Dim thisCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

        ' Get the standard StringComparers.
        Dim invCmp As StringComparer = StringComparer.InvariantCulture
        Dim invICCmp As StringComparer = StringComparer.InvariantCultureIgnoreCase
        Dim currCmp As StringComparer = StringComparer.CurrentCulture
        Dim currICCmp As StringComparer = StringComparer.CurrentCultureIgnoreCase
        Dim ordCmp As StringComparer = StringComparer.Ordinal
        Dim ordICCmp As StringComparer = StringComparer.OrdinalIgnoreCase

        ' Create a StringComparer that uses the Turkish culture and ignores case.
        Dim turkICComp As StringComparer = StringComparer.Create(turkish, True)

        ' Define three strings consisting of different versions of the letter I.
        ' LATIN CAPITAL LETTER I (U+0049)
        Dim capitalLetterI As String = "I"

        ' LATIN SMALL LETTER I (U+0069)
        Dim smallLetterI As String = "i"

        ' LATIN SMALL LETTER DOTLESS I (U+0131)
        Dim smallLetterDotlessI As String = " "

        ' Add the three strings to the list.
        list.Add(capitalLetterI)
        list.Add(smallLetterI)
        list.Add(smallLetterDotlessI)

        ' Display the original list order.
        Display(list, "The original order of the list entries...")

        ' Sort the list using the invariant culture.
        list.Sort(invCmp)
        Display(list, "Invariant culture...")
        list.Sort(invICCmp)
        Display(list, "Invariant culture, ignore case...")

        ' Sort the list using the current culture.
        Console.WriteLine("The current culture is ""{0}"".", thisCulture.Name)
        list.Sort(currCmp)
        Display(list, "Current culture...")
        list.Sort(currICCmp)
        Display(list, "Current culture, ignore case...")

        ' Sort the list using the ordinal value of the character code points.
        list.Sort(ordCmp)
        Display(list, "Ordinal...")
        list.Sort(ordICCmp)
        Display(list, "Ordinal, ignore case...")

        ' Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
        ' DOTLESS I differently than LATIN SMALL LETTER I.
        list.Sort(turkICComp)
        Display(list, "Turkish culture, ignore case...")

    End Sub 'Main

    Public Shared Sub Display(ByVal lst As List(Of String), ByVal title As String)
        Dim c As Char
        Dim s As String
        Dim codePoint As Integer

        Console.WriteLine(title)
        For Each s In lst
            c = s(0)
            codePoint = Convert.ToInt32(c)
            Console.WriteLine("0x{0:x}", codePoint)
        Next s
        Console.WriteLine()
    End Sub 'Display
End Class 'Sample '

'This code example produces the following results:
'
'The original order of the list entries...
'0x49
'0x69
'0x131
'
'Invariant culture...
'0x69
'0x49
'0x131
'
'Invariant culture, ignore case...
'0x49
'0x69
'0x131
'
'The current culture is "en-US".
'Current culture...
'0x69
'0x49
'0x131
'
'Current culture, ignore case...
'0x49
'0x69
'0x131
'
'Ordinal...
'0x49
'0x69
'0x131
'
'Ordinal, ignore case...
'0x69
'0x49
'0x131
'
'Turkish culture, ignore case...
'0x131
'0x49
'0x69
'

// This example demonstrates members of the
// System.StringComparer class.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

class Sample
{
    public static void Main()
    {
// Create a list of string.
    List<string> list = new List<string>();

// Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo turkish = new CultureInfo("tr-TR");

// Get the culture that is associated with the current thread.
    CultureInfo thisCulture = Thread.CurrentThread.CurrentCulture;

// Get the standard StringComparers.
    StringComparer invCmp =   StringComparer.InvariantCulture;
    StringComparer invICCmp = StringComparer.InvariantCultureIgnoreCase;
    StringComparer currCmp = StringComparer.CurrentCulture;
    StringComparer currICCmp = StringComparer.CurrentCultureIgnoreCase;
    StringComparer ordCmp = StringComparer.Ordinal;
    StringComparer ordICCmp = StringComparer.OrdinalIgnoreCase;

// Create a StringComparer that uses the Turkish culture and ignores case.
    StringComparer turkICComp = StringComparer.Create(turkish, true);

// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
    string capitalLetterI = "I";

// LATIN SMALL LETTER I (U+0069)
    string smallLetterI   = "i";

// LATIN SMALL LETTER DOTLESS I (U+0131)
    string smallLetterDotlessI = "\u0131";

// Add the three strings to the list.
    list.Add(capitalLetterI);
    list.Add(smallLetterI);
    list.Add(smallLetterDotlessI);

// Display the original list order.
    Display(list, "The original order of the list entries...");

// Sort the list using the invariant culture.
    list.Sort(invCmp);
    Display(list, "Invariant culture...");
    list.Sort(invICCmp);
    Display(list, "Invariant culture, ignore case...");

// Sort the list using the current culture.
    Console.WriteLine("The current culture is \"{0}\".", thisCulture.Name);
    list.Sort(currCmp);
    Display(list, "Current culture...");
    list.Sort(currICCmp);
    Display(list, "Current culture, ignore case...");

// Sort the list using the ordinal value of the character code points.
    list.Sort(ordCmp);
    Display(list, "Ordinal...");
    list.Sort(ordICCmp);
    Display(list, "Ordinal, ignore case...");

// Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
// DOTLESS I differently than LATIN SMALL LETTER I.
    list.Sort(turkICComp);
    Display(list, "Turkish culture, ignore case...");
    }

    public static void Display(List<string> lst, string title)
    {
    Char c;
    int  codePoint;
    Console.WriteLine(title);
    foreach (string s in lst)
        {
        c = s[0];
        codePoint = Convert.ToInt32(c);
        Console.WriteLine("0x{0:x}", codePoint);
        }
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

// This example demonstrates members of the
// System::StringComparer class.

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
using namespace System::Globalization;
using namespace System::Threading;

void Display(List<String^>^ stringList, String^ title)
{
    Char firstChar;
    int codePoint;
    Console::WriteLine(title);
    for each (String^ s in stringList)
    {
        firstChar = s[0];
        codePoint = Convert::ToInt32(firstChar);
        Console::WriteLine("0x{0:x}", codePoint);
    }
    Console::WriteLine();
}

int main()
{
    // Create a list of string.
    List<String^>^ stringList = gcnew List<String^>();

    // Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo^ turkishCulture = gcnew CultureInfo("tr-TR");

    // Get the culture that is associated with the current thread.
    CultureInfo^ currentCulture = Thread::CurrentThread->CurrentCulture;

    // Get the standard StringComparers.
    StringComparer^ invariant = StringComparer::InvariantCulture;
    StringComparer^ invariantIgnoreCase =
        StringComparer::InvariantCultureIgnoreCase;
    StringComparer^ current = StringComparer::CurrentCulture;
    StringComparer^ currentIgnoreCase =
        StringComparer::CurrentCultureIgnoreCase;
    StringComparer^ ordinal = StringComparer::Ordinal;
    StringComparer^ ordinalIgnoreCase = StringComparer::OrdinalIgnoreCase;

    // Create a StringComparer that uses the Turkish culture and ignores
    // case.
    StringComparer^ turkishIgnoreCase =
        StringComparer::Create(turkishCulture, true);

    // Define three strings consisting of different versions of the
    // letter I. LATIN CAPITAL LETTER I (U+0049)
    String^ capitalLetterI = "I";

    // LATIN SMALL LETTER I (U+0069)
    String^ smallLetterI = "i";

    // LATIN SMALL LETTER DOTLESS I (U+0131)
    String^ smallLetterDotlessI = L"\u0131";

    // Add the three strings to the list.
    stringList->Add(capitalLetterI);
    stringList->Add(smallLetterI);
    stringList->Add(smallLetterDotlessI);

    // Display the original list order.
    Display(stringList, "The original order of the list entries...");

    // Sort the list using the invariant culture.
    stringList->Sort(invariant);
    Display(stringList, "Invariant culture...");
    stringList->Sort(invariantIgnoreCase);
    Display(stringList, "Invariant culture, ignore case...");

    // Sort the list using the current culture.
    Console::WriteLine("The current culture is \"{0}\".",
        currentCulture->Name);
    stringList->Sort(current);
    Display(stringList, "Current culture...");
    stringList->Sort(currentIgnoreCase);
    Display(stringList, "Current culture, ignore case...");

    // Sort the list using the ordinal value of the character code points.
    stringList->Sort(ordinal);
    Display(stringList, "Ordinal...");
    stringList->Sort(ordinalIgnoreCase);
    Display(stringList, "Ordinal, ignore case...");

    // Sort the list using the Turkish culture, which treats LATIN SMALL
    // LETTER DOTLESS I differently than LATIN SMALL LETTER I.
    stringList->Sort(turkishIgnoreCase);
    Display(stringList, "Turkish culture, ignore case...");
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

System System..::.StringComparerStringComparer
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 成员
System 命名空间
String
CompareOptions


StringComparer 成员

StringComparer 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StringComparer 类

表示一种字符串比较操作，该操作使用特定的大小写以及基于区域性的比较规则或序号比较规则。

StringComparer 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

StringComparer 类
System 命名空间


StringComparer 构造函数

StringComparer 构造函数
StringComparer 类

初始化 StringComparer 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected StringComparer()
protected:
StringComparer()
new : unit -> StringComparer

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparer 方法

StringComparer 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StringComparer 类

StringComparer 类型公开以下成员。

名称 说明
页首

参考

StringComparer 类
System 命名空间


StringComparer ..::.Compare 方法

StringComparer
.
.
::
.
Compare 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StringComparer 类

比较两个对象或字符串，并返回其相对排序顺序的指示。

名称 说明
页首

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparer ..::.Compare 方法 (Object, Object)

StringComparer
.
.
::
.
Compare 方法 (Object, Object)
StringComparer 类

当在派生类中重写时，将比较两个对象并返回其相对排序顺序的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Compare ( _ x As Object, _ y As Object _ ) As Integer
public int Compare( Object x, Object y )
public: virtual int Compare( Object^ x, Object^ y ) sealed
abstract Compare : x:Object * y:Object -> int override Compare : x:Object * y:Object -> int
参数
x
类型： System Object
要与
y
进行比较的对象。
y
类型： System Object
要与
x
进行比较的对象。
返回值
类型： System Int32
一个有符号整数，它指示
x
与
y
的相对值，如下表所示。
值
含义
小于零
x
小于
y
。
- 或 -
x
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
零
x
等于
y
。
大于零
x
大于
y
。
- 或 -
y
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | x 或 y 都不是 String 对象，并且 x 或 y 都不实现 IComparable 接口。

由于 x 和 y 参数在执行比较之前不必取消装箱，因此 StringComparer..::.Compare(String, String) 方法的效率比 StringComparer..::.Compare(Object, Object) 方法高。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
Compare 重载
System 命名空间


StringComparer ..::.Compare 方法 (String, String)

StringComparer
.
.
::
.
Compare 方法 (String, String)
StringComparer 类

当在派生类中重写时，将比较两个字符串并返回其相对排序顺序的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function Compare ( _ x As String, _ y As String _ ) As Integer
public abstract int Compare( string x, string y )
public: virtual int Compare( String^ x, String^ y ) abstract
abstract Compare : x:string * y:string -> int
参数
x
类型： System String
要与
y
进行比较的字符串。
y
类型： System String
要与
x
进行比较的字符串。
返回值
类型： System Int32
一个有符号整数，它指示
x
与
y
的相对值，如下表所示。
值
含义
小于零
x
小于
y
。
- 或 -
x
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
零
x
等于
y
。
大于零
x
大于
y
。
- 或 -
y
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现

由于 x 和 y 参数在执行比较之前不必取消装箱，因此 StringComparer..::.Compare(String, String) 方法的效率比 StringComparer..::.Compare(Object, Object) 方法高。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
Compare 重载
System 命名空间


StringComparer ..::.Create 方法

StringComparer
.
.
::
.
Create 方法
StringComparer 类

创建 StringComparer 对象，该对象根据指定区域性的规则对字符串进行比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Create ( _
    culture As CultureInfo, _
    ignoreCase As Boolean _
) As StringComparer
public static StringComparer Create(
    CultureInfo culture,
    bool ignoreCase
)
public:
static StringComparer^ Create(
    CultureInfo^ culture,
    bool ignoreCase
)
static member Create :
        culture:CultureInfo *
        ignoreCase:bool -> StringComparer

参数

culture
类型： System.Globalization CultureInfo
一个区域性，其语言规则用于执行字符串比较。
ignoreCase
类型： System Boolean
true 指定比较操作不区分大小写；false 指定比较操作区分大小写。

返回值

类型： System StringComparer
一个新 StringComparer 对象，该对象根据 culture 参数使用的比较规则以及 ignoreCase 参数指定的大小写规则执行字符串比较。
异常 | 条件
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。 下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。

' This code example demonstrates members of the System.StringComparer class.

Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading

Class Sample

    Public Shared Sub Main()
        ' Create a list of string.
        Dim list As New List(Of String)

        ' Get the tr-TR (Turkish-Turkey) culture.
        Dim turkish As New CultureInfo("tr-TR")

        ' Get the culture that is associated with the current thread.
        Dim thisCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

        ' Get the standard StringComparers.
        Dim invCmp As StringComparer = StringComparer.InvariantCulture
        Dim invICCmp As StringComparer = StringComparer.InvariantCultureIgnoreCase
        Dim currCmp As StringComparer = StringComparer.CurrentCulture
        Dim currICCmp As StringComparer = StringComparer.CurrentCultureIgnoreCase
        Dim ordCmp As StringComparer = StringComparer.Ordinal
        Dim ordICCmp As StringComparer = StringComparer.OrdinalIgnoreCase

        ' Create a StringComparer that uses the Turkish culture and ignores case.
        Dim turkICComp As StringComparer = StringComparer.Create(turkish, True)

        ' Define three strings consisting of different versions of the letter I.
        ' LATIN CAPITAL LETTER I (U+0049)
        Dim capitalLetterI As String = "I"

        ' LATIN SMALL LETTER I (U+0069)
        Dim smallLetterI As String = "i"

        ' LATIN SMALL LETTER DOTLESS I (U+0131)
        Dim smallLetterDotlessI As String = " "

        ' Add the three strings to the list.
        list.Add(capitalLetterI)
        list.Add(smallLetterI)
        list.Add(smallLetterDotlessI)

        ' Display the original list order.
        Display(list, "The original order of the list entries...")

        ' Sort the list using the invariant culture.
        list.Sort(invCmp)
        Display(list, "Invariant culture...")
        list.Sort(invICCmp)
        Display(list, "Invariant culture, ignore case...")

        ' Sort the list using the current culture.
        Console.WriteLine("The current culture is ""{0}"".", thisCulture.Name)
        list.Sort(currCmp)
        Display(list, "Current culture...")
        list.Sort(currICCmp)
        Display(list, "Current culture, ignore case...")

        ' Sort the list using the ordinal value of the character code points.
        list.Sort(ordCmp)
        Display(list, "Ordinal...")
        list.Sort(ordICCmp)
        Display(list, "Ordinal, ignore case...")

        ' Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
        ' DOTLESS I differently than LATIN SMALL LETTER I.
        list.Sort(turkICComp)
        Display(list, "Turkish culture, ignore case...")

    End Sub 'Main

    Public Shared Sub Display(ByVal lst As List(Of String), ByVal title As String)
        Dim c As Char
        Dim s As String
        Dim codePoint As Integer

        Console.WriteLine(title)
        For Each s In lst
            c = s(0)
            codePoint = Convert.ToInt32(c)
            Console.WriteLine("0x{0:x}", codePoint)
        Next s
        Console.WriteLine()
    End Sub 'Display
End Class 'Sample '

'This code example produces the following results:
'
'The original order of the list entries...
'0x49
'0x69
'0x131
'
'Invariant culture...
'0x69
'0x49
'0x131
'
'Invariant culture, ignore case...
'0x49
'0x69
'0x131
'
'The current culture is "en-US".
'Current culture...
'0x69
'0x49
'0x131
'
'Current culture, ignore case...
'0x49
'0x69
'0x131
'
'Ordinal...
'0x49
'0x69
'0x131
'
'Ordinal, ignore case...
'0x69
'0x49
'0x131
'
'Turkish culture, ignore case...
'0x131
'0x49
'0x69
'

// This example demonstrates members of the
// System.StringComparer class.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

class Sample
{
    public static void Main()
    {
// Create a list of string.
    List<string> list = new List<string>();

// Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo turkish = new CultureInfo("tr-TR");

// Get the culture that is associated with the current thread.
    CultureInfo thisCulture = Thread.CurrentThread.CurrentCulture;

// Get the standard StringComparers.
    StringComparer invCmp =   StringComparer.InvariantCulture;
    StringComparer invICCmp = StringComparer.InvariantCultureIgnoreCase;
    StringComparer currCmp = StringComparer.CurrentCulture;
    StringComparer currICCmp = StringComparer.CurrentCultureIgnoreCase;
    StringComparer ordCmp = StringComparer.Ordinal;
    StringComparer ordICCmp = StringComparer.OrdinalIgnoreCase;

// Create a StringComparer that uses the Turkish culture and ignores case.
    StringComparer turkICComp = StringComparer.Create(turkish, true);

// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
    string capitalLetterI = "I";

// LATIN SMALL LETTER I (U+0069)
    string smallLetterI   = "i";

// LATIN SMALL LETTER DOTLESS I (U+0131)
    string smallLetterDotlessI = "\u0131";

// Add the three strings to the list.
    list.Add(capitalLetterI);
    list.Add(smallLetterI);
    list.Add(smallLetterDotlessI);

// Display the original list order.
    Display(list, "The original order of the list entries...");

// Sort the list using the invariant culture.
    list.Sort(invCmp);
    Display(list, "Invariant culture...");
    list.Sort(invICCmp);
    Display(list, "Invariant culture, ignore case...");

// Sort the list using the current culture.
    Console.WriteLine("The current culture is \"{0}\".", thisCulture.Name);
    list.Sort(currCmp);
    Display(list, "Current culture...");
    list.Sort(currICCmp);
    Display(list, "Current culture, ignore case...");

// Sort the list using the ordinal value of the character code points.
    list.Sort(ordCmp);
    Display(list, "Ordinal...");
    list.Sort(ordICCmp);
    Display(list, "Ordinal, ignore case...");

// Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
// DOTLESS I differently than LATIN SMALL LETTER I.
    list.Sort(turkICComp);
    Display(list, "Turkish culture, ignore case...");
    }

    public static void Display(List<string> lst, string title)
    {
    Char c;
    int  codePoint;
    Console.WriteLine(title);
    foreach (string s in lst)
        {
        c = s[0];
        codePoint = Convert.ToInt32(c);
        Console.WriteLine("0x{0:x}", codePoint);
        }
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

// This example demonstrates members of the
// System::StringComparer class.

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
using namespace System::Globalization;
using namespace System::Threading;

void Display(List<String^>^ stringList, String^ title)
{
    Char firstChar;
    int codePoint;
    Console::WriteLine(title);
    for each (String^ s in stringList)
    {
        firstChar = s[0];
        codePoint = Convert::ToInt32(firstChar);
        Console::WriteLine("0x{0:x}", codePoint);
    }
    Console::WriteLine();
}

int main()
{
    // Create a list of string.
    List<String^>^ stringList = gcnew List<String^>();

    // Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo^ turkishCulture = gcnew CultureInfo("tr-TR");

    // Get the culture that is associated with the current thread.
    CultureInfo^ currentCulture = Thread::CurrentThread->CurrentCulture;

    // Get the standard StringComparers.
    StringComparer^ invariant = StringComparer::InvariantCulture;
    StringComparer^ invariantIgnoreCase =
        StringComparer::InvariantCultureIgnoreCase;
    StringComparer^ current = StringComparer::CurrentCulture;
    StringComparer^ currentIgnoreCase =
        StringComparer::CurrentCultureIgnoreCase;
    StringComparer^ ordinal = StringComparer::Ordinal;
    StringComparer^ ordinalIgnoreCase = StringComparer::OrdinalIgnoreCase;

    // Create a StringComparer that uses the Turkish culture and ignores
    // case.
    StringComparer^ turkishIgnoreCase =
        StringComparer::Create(turkishCulture, true);

    // Define three strings consisting of different versions of the
    // letter I. LATIN CAPITAL LETTER I (U+0049)
    String^ capitalLetterI = "I";

    // LATIN SMALL LETTER I (U+0069)
    String^ smallLetterI = "i";

    // LATIN SMALL LETTER DOTLESS I (U+0131)
    String^ smallLetterDotlessI = L"\u0131";

    // Add the three strings to the list.
    stringList->Add(capitalLetterI);
    stringList->Add(smallLetterI);
    stringList->Add(smallLetterDotlessI);

    // Display the original list order.
    Display(stringList, "The original order of the list entries...");

    // Sort the list using the invariant culture.
    stringList->Sort(invariant);
    Display(stringList, "Invariant culture...");
    stringList->Sort(invariantIgnoreCase);
    Display(stringList, "Invariant culture, ignore case...");

    // Sort the list using the current culture.
    Console::WriteLine("The current culture is \"{0}\".",
        currentCulture->Name);
    stringList->Sort(current);
    Display(stringList, "Current culture...");
    stringList->Sort(currentIgnoreCase);
    Display(stringList, "Current culture, ignore case...");

    // Sort the list using the ordinal value of the character code points.
    stringList->Sort(ordinal);
    Display(stringList, "Ordinal...");
    stringList->Sort(ordinalIgnoreCase);
    Display(stringList, "Ordinal, ignore case...");

    // Sort the list using the Turkish culture, which treats LATIN SMALL
    // LETTER DOTLESS I differently than LATIN SMALL LETTER I.
    stringList->Sort(turkishIgnoreCase);
    Display(stringList, "Turkish culture, ignore case...");
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
System 命名空间
CultureInfo


StringComparer ..::.Equals 方法

StringComparer
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StringComparer 类

当在派生类中重写时，指示两个对象或字符串是否相等。

名称 说明
页首

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparer ..::.Equals 方法 (Object, Object)

StringComparer
.
.
::
.
Equals 方法 (Object, Object)
StringComparer 类

当在派生类中重写时，指示两个对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    x As Object, _
    y As Object _
) As Boolean
public bool Equals(
    Object x,
    Object y
)
public:
virtual bool Equals(
    Object^ x,
    Object^ y
) sealed
abstract Equals :
        x:Object *
        y:Object -> bool
override Equals :
        x:Object *
        y:Object -> bool

参数

x
类型： System Object
要与 y 比较的对象。
y
类型： System Object
要与 x 比较的对象。

返回值

类型： System Boolean
如果 x 和 y 引用同一对象，或者 x 和 y 是相同的对象类型且这些对象相等，则为 true；否则为 false。

实现

由于 x 和 y 参数在执行比较之前不必取消装箱，因此 Equals 方法的效率比 Equals 方法高。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
Equals 重载
System 命名空间


StringComparer ..::.Equals 方法 (String, String)

StringComparer
.
.
::
.
Equals 方法 (String, String)
StringComparer 类

当在派生类中重写时，指示两个字符串是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function Equals ( _
    x As String, _
    y As String _
) As Boolean
public abstract bool Equals(
    string x,
    string y
)
public:
virtual bool Equals(
    String^ x,
    String^ y
) abstract
abstract Equals :
        x:string *
        y:string -> bool

参数

x
类型： System String
要与 y 比较的字符串。
y
类型： System String
要与 x 比较的字符串。

返回值

类型： System Boolean
如果 x 和 y 引用同一对象，或者 x 和 y 相等，则为 true；否则为 false。

实现

由于 x 和 y 参数在执行比较之前不必取消装箱，因此 StringComparer..::.Equals(String, String) 方法的效率比 StringComparer..::.Equals(Object, Object) 方法高。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
Equals 重载
System 命名空间


StringComparer ..::.GetHashCode 方法

StringComparer
.
.
::
.
GetHashCode 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StringComparer 类

当在派生类中重写时，将获取当前 StringComparer 对象的哈希代码。

名称 说明
页首

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparer ..::.GetHashCode 方法 (Object)

StringComparer
.
.
::
.
GetHashCode 方法 (Object)
StringComparer 类

当在派生类中重写时，将获取指定对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetHashCode ( _
    obj As Object _
) As Integer
public int GetHashCode(
    Object obj
)
public:
virtual int GetHashCode(
    Object^ obj
) sealed
abstract GetHashCode :
        obj:Object -> int
override GetHashCode :
        obj:Object -> int

参数

obj
类型： System Object
一个对象。

返回值

类型： System Int32
根据 obj 参数的值计算出的 32 位有符号哈希代码。

实现

异常 | 条件
ArgumentNullException | obj 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

由于 obj 参数在执行比较之前不必取消装箱，因此 GetHashCode 方法的效率比 GetHashCode 方法高。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
GetHashCode 重载
System 命名空间


StringComparer ..::.GetHashCode 方法 (String)

StringComparer
.
.
::
.
GetHashCode 方法 (String)
StringComparer 类

当在派生类中重写时，将获取指定字符串的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetHashCode ( _
    obj As String _
) As Integer
public abstract int GetHashCode(
    string obj
)
public:
virtual int GetHashCode(
    String^ obj
) abstract
abstract GetHashCode :
        obj:string -> int

参数

obj
类型： System String
一个字符串。

返回值

类型： System Int32
根据 obj 参数的值计算出的 32 位有符号哈希代码。

实现

由于 obj 参数在执行比较之前不必取消装箱，因此 GetHashCode 方法的效率比 GetHashCode 方法高。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
GetHashCode 重载
System 命名空间


StringComparer 属性

StringComparer 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StringComparer 类

StringComparer 类型公开以下成员。

名称 说明
页首

参考

StringComparer 类
System 命名空间


StringComparer ..::.CurrentCulture 属性

StringComparer
.
.
::
.
CurrentCulture 属性
StringComparer 类

获取一个 StringComparer 对象，该对象使用当前区域性的单词比较规则执行区分大小写的字符串比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property CurrentCulture As StringComparer
    Get
public static StringComparer CurrentCulture { get; }
public:
static property StringComparer^ CurrentCulture {
    StringComparer^ get ();
}
static member CurrentCulture : StringComparer

属性值

类型： System StringComparer
新的 StringComparer 对象。

当前区域性为与当前线程相关联的 CultureInfo 对象。

CurrentCulture 属性实际上返回从 StringComparer 类派生的匿名类的实例。

对 CurrentCulture 属性 get 访问器的每次调用都返回一个新的 StringComparer 对象，如以下代码所示。

Private Sub CompareCurrentCultureStringComparers()
   Dim stringComparer1 As StringComparer = StringComparer.CurrentCulture
   Dim stringComparer2 As StringComparer = StringComparer.CurrentCulture
   ' Displays False
   Console.WriteLine(StringComparer.ReferenceEquals(stringComparer1, _
                                                    stringComparer2))
End Sub

private void CompareCurrentCultureStringComparer()
{
   StringComparer stringComparer1 = StringComparer.CurrentCulture;
   StringComparer stringComparer2 = StringComparer.CurrentCulture;
   // Displays false
   Console.WriteLine(StringComparer.ReferenceEquals(stringComparer1,
                                                    stringComparer2));
}

为了改善性能，可以将 StringComparer 对象存储在局部变量中，而不是多次检索 CurrentCulture 属性值。

下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。 下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。

' This code example demonstrates members of the System.StringComparer class.

Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading

Class Sample

    Public Shared Sub Main()
        ' Create a list of string.
        Dim list As New List(Of String)

        ' Get the tr-TR (Turkish-Turkey) culture.
        Dim turkish As New CultureInfo("tr-TR")

        ' Get the culture that is associated with the current thread.
        Dim thisCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

        ' Get the standard StringComparers.
        Dim invCmp As StringComparer = StringComparer.InvariantCulture
        Dim invICCmp As StringComparer = StringComparer.InvariantCultureIgnoreCase
        Dim currCmp As StringComparer = StringComparer.CurrentCulture
        Dim currICCmp As StringComparer = StringComparer.CurrentCultureIgnoreCase
        Dim ordCmp As StringComparer = StringComparer.Ordinal
        Dim ordICCmp As StringComparer = StringComparer.OrdinalIgnoreCase

        ' Create a StringComparer that uses the Turkish culture and ignores case.
        Dim turkICComp As StringComparer = StringComparer.Create(turkish, True)

        ' Define three strings consisting of different versions of the letter I.
        ' LATIN CAPITAL LETTER I (U+0049)
        Dim capitalLetterI As String = "I"

        ' LATIN SMALL LETTER I (U+0069)
        Dim smallLetterI As String = "i"

        ' LATIN SMALL LETTER DOTLESS I (U+0131)
        Dim smallLetterDotlessI As String = " "

        ' Add the three strings to the list.
        list.Add(capitalLetterI)
        list.Add(smallLetterI)
        list.Add(smallLetterDotlessI)

        ' Display the original list order.
        Display(list, "The original order of the list entries...")

        ' Sort the list using the invariant culture.
        list.Sort(invCmp)
        Display(list, "Invariant culture...")
        list.Sort(invICCmp)
        Display(list, "Invariant culture, ignore case...")

        ' Sort the list using the current culture.
        Console.WriteLine("The current culture is ""{0}"".", thisCulture.Name)
        list.Sort(currCmp)
        Display(list, "Current culture...")
        list.Sort(currICCmp)
        Display(list, "Current culture, ignore case...")

        ' Sort the list using the ordinal value of the character code points.
        list.Sort(ordCmp)
        Display(list, "Ordinal...")
        list.Sort(ordICCmp)
        Display(list, "Ordinal, ignore case...")

        ' Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
        ' DOTLESS I differently than LATIN SMALL LETTER I.
        list.Sort(turkICComp)
        Display(list, "Turkish culture, ignore case...")

    End Sub 'Main

    Public Shared Sub Display(ByVal lst As List(Of String), ByVal title As String)
        Dim c As Char
        Dim s As String
        Dim codePoint As Integer

        Console.WriteLine(title)
        For Each s In lst
            c = s(0)
            codePoint = Convert.ToInt32(c)
            Console.WriteLine("0x{0:x}", codePoint)
        Next s
        Console.WriteLine()
    End Sub 'Display
End Class 'Sample '

'This code example produces the following results:
'
'The original order of the list entries...
'0x49
'0x69
'0x131
'
'Invariant culture...
'0x69
'0x49
'0x131
'
'Invariant culture, ignore case...
'0x49
'0x69
'0x131
'
'The current culture is "en-US".
'Current culture...
'0x69
'0x49
'0x131
'
'Current culture, ignore case...
'0x49
'0x69
'0x131
'
'Ordinal...
'0x49
'0x69
'0x131
'
'Ordinal, ignore case...
'0x69
'0x49
'0x131
'
'Turkish culture, ignore case...
'0x131
'0x49
'0x69
'

// This example demonstrates members of the
// System.StringComparer class.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

class Sample
{
    public static void Main()
    {
// Create a list of string.
    List<string> list = new List<string>();

// Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo turkish = new CultureInfo("tr-TR");

// Get the culture that is associated with the current thread.
    CultureInfo thisCulture = Thread.CurrentThread.CurrentCulture;

// Get the standard StringComparers.
    StringComparer invCmp =   StringComparer.InvariantCulture;
    StringComparer invICCmp = StringComparer.InvariantCultureIgnoreCase;
    StringComparer currCmp = StringComparer.CurrentCulture;
    StringComparer currICCmp = StringComparer.CurrentCultureIgnoreCase;
    StringComparer ordCmp = StringComparer.Ordinal;
    StringComparer ordICCmp = StringComparer.OrdinalIgnoreCase;

// Create a StringComparer that uses the Turkish culture and ignores case.
    StringComparer turkICComp = StringComparer.Create(turkish, true);

// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
    string capitalLetterI = "I";

// LATIN SMALL LETTER I (U+0069)
    string smallLetterI   = "i";

// LATIN SMALL LETTER DOTLESS I (U+0131)
    string smallLetterDotlessI = "\u0131";

// Add the three strings to the list.
    list.Add(capitalLetterI);
    list.Add(smallLetterI);
    list.Add(smallLetterDotlessI);

// Display the original list order.
    Display(list, "The original order of the list entries...");

// Sort the list using the invariant culture.
    list.Sort(invCmp);
    Display(list, "Invariant culture...");
    list.Sort(invICCmp);
    Display(list, "Invariant culture, ignore case...");

// Sort the list using the current culture.
    Console.WriteLine("The current culture is \"{0}\".", thisCulture.Name);
    list.Sort(currCmp);
    Display(list, "Current culture...");
    list.Sort(currICCmp);
    Display(list, "Current culture, ignore case...");

// Sort the list using the ordinal value of the character code points.
    list.Sort(ordCmp);
    Display(list, "Ordinal...");
    list.Sort(ordICCmp);
    Display(list, "Ordinal, ignore case...");

// Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
// DOTLESS I differently than LATIN SMALL LETTER I.
    list.Sort(turkICComp);
    Display(list, "Turkish culture, ignore case...");
    }

    public static void Display(List<string> lst, string title)
    {
    Char c;
    int  codePoint;
    Console.WriteLine(title);
    foreach (string s in lst)
        {
        c = s[0];
        codePoint = Convert.ToInt32(c);
        Console.WriteLine("0x{0:x}", codePoint);
        }
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

// This example demonstrates members of the
// System::StringComparer class.

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
using namespace System::Globalization;
using namespace System::Threading;

void Display(List<String^>^ stringList, String^ title)
{
    Char firstChar;
    int codePoint;
    Console::WriteLine(title);
    for each (String^ s in stringList)
    {
        firstChar = s[0];
        codePoint = Convert::ToInt32(firstChar);
        Console::WriteLine("0x{0:x}", codePoint);
    }
    Console::WriteLine();
}

int main()
{
    // Create a list of string.
    List<String^>^ stringList = gcnew List<String^>();

    // Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo^ turkishCulture = gcnew CultureInfo("tr-TR");

    // Get the culture that is associated with the current thread.
    CultureInfo^ currentCulture = Thread::CurrentThread->CurrentCulture;

    // Get the standard StringComparers.
    StringComparer^ invariant = StringComparer::InvariantCulture;
    StringComparer^ invariantIgnoreCase =
        StringComparer::InvariantCultureIgnoreCase;
    StringComparer^ current = StringComparer::CurrentCulture;
    StringComparer^ currentIgnoreCase =
        StringComparer::CurrentCultureIgnoreCase;
    StringComparer^ ordinal = StringComparer::Ordinal;
    StringComparer^ ordinalIgnoreCase = StringComparer::OrdinalIgnoreCase;

    // Create a StringComparer that uses the Turkish culture and ignores
    // case.
    StringComparer^ turkishIgnoreCase =
        StringComparer::Create(turkishCulture, true);

    // Define three strings consisting of different versions of the
    // letter I. LATIN CAPITAL LETTER I (U+0049)
    String^ capitalLetterI = "I";

    // LATIN SMALL LETTER I (U+0069)
    String^ smallLetterI = "i";

    // LATIN SMALL LETTER DOTLESS I (U+0131)
    String^ smallLetterDotlessI = L"\u0131";

    // Add the three strings to the list.
    stringList->Add(capitalLetterI);
    stringList->Add(smallLetterI);
    stringList->Add(smallLetterDotlessI);

    // Display the original list order.
    Display(stringList, "The original order of the list entries...");

    // Sort the list using the invariant culture.
    stringList->Sort(invariant);
    Display(stringList, "Invariant culture...");
    stringList->Sort(invariantIgnoreCase);
    Display(stringList, "Invariant culture, ignore case...");

    // Sort the list using the current culture.
    Console::WriteLine("The current culture is \"{0}\".",
        currentCulture->Name);
    stringList->Sort(current);
    Display(stringList, "Current culture...");
    stringList->Sort(currentIgnoreCase);
    Display(stringList, "Current culture, ignore case...");

    // Sort the list using the ordinal value of the character code points.
    stringList->Sort(ordinal);
    Display(stringList, "Ordinal...");
    stringList->Sort(ordinalIgnoreCase);
    Display(stringList, "Ordinal, ignore case...");

    // Sort the list using the Turkish culture, which treats LATIN SMALL
    // LETTER DOTLESS I differently than LATIN SMALL LETTER I.
    stringList->Sort(turkishIgnoreCase);
    Display(stringList, "Turkish culture, ignore case...");
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparer ..::.CurrentCultureIgnoreCase 属性

StringComparer
.
.
::
.
CurrentCultureIgnoreCase 属性
StringComparer 类

获取一个 StringComparer 对象，该对象使用当前区域性的单词比较规则执行不区分大小写的字符串比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property CurrentCultureIgnoreCase As StringComparer
    Get
public static StringComparer CurrentCultureIgnoreCase { get; }
public:
static property StringComparer^ CurrentCultureIgnoreCase {
    StringComparer^ get ();
}
static member CurrentCultureIgnoreCase : StringComparer

属性值

类型： System StringComparer
新的 StringComparer 对象。

当前区域性为与当前线程相关联的 CultureInfo 对象。

CurrentCultureIgnoreCase 属性实际上返回从 StringComparer 类派生的匿名类的实例。

对 CurrentCultureIgnoreCase 属性 get 访问器的每次调用都返回一个新的 StringComparer 对象，如以下代码所示。

Private Sub CompareCurrentCultureInsensitiveStringComparers()
   Dim stringComparer1, stringComparer2 As StringComparer
   stringComparer1 = StringComparer.CurrentCultureIgnoreCase
   stringComparer2 = StringComparer.CurrentCultureIgnoreCase
   ' Displays False
   Console.WriteLine(StringComparer.ReferenceEquals(stringComparer1, _
                                                    stringComparer2))
End Sub

private void CompareCurrentCultureInsensitiveStringComparer()
{
   StringComparer stringComparer1, stringComparer2;
   stringComparer1 = StringComparer.CurrentCultureIgnoreCase;
   stringComparer2 = StringComparer.CurrentCultureIgnoreCase;
   // Displays false
   Console.WriteLine(StringComparer.ReferenceEquals(stringComparer1,
                                                    stringComparer2));
}

为了改善性能，可以将 StringComparer 对象存储在局部变量中，而不是多次检索 CurrentCultureIgnoreCase 属性值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparer ..::.InvariantCulture 属性

StringComparer
.
.
::
.
InvariantCulture 属性
StringComparer 类

获取一个 StringComparer 对象，该对象使用固定区域性的单词比较规则执行区分大小写的字符串比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property InvariantCulture As StringComparer
    Get
public static StringComparer InvariantCulture { get; }
public:
static property StringComparer^ InvariantCulture {
    StringComparer^ get ();
}
static member InvariantCulture : StringComparer

属性值

类型： System StringComparer
新的 StringComparer 对象。

固定区域性是由 InvariantCulture 属性返回的 CultureInfo 对象。

InvariantCulture 属性实际上返回从 StringComparer 类派生的匿名类的实例。

下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。 下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。

' This code example demonstrates members of the System.StringComparer class.

Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading

Class Sample

    Public Shared Sub Main()
        ' Create a list of string.
        Dim list As New List(Of String)

        ' Get the tr-TR (Turkish-Turkey) culture.
        Dim turkish As New CultureInfo("tr-TR")

        ' Get the culture that is associated with the current thread.
        Dim thisCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

        ' Get the standard StringComparers.
        Dim invCmp As StringComparer = StringComparer.InvariantCulture
        Dim invICCmp As StringComparer = StringComparer.InvariantCultureIgnoreCase
        Dim currCmp As StringComparer = StringComparer.CurrentCulture
        Dim currICCmp As StringComparer = StringComparer.CurrentCultureIgnoreCase
        Dim ordCmp As StringComparer = StringComparer.Ordinal
        Dim ordICCmp As StringComparer = StringComparer.OrdinalIgnoreCase

        ' Create a StringComparer that uses the Turkish culture and ignores case.
        Dim turkICComp As StringComparer = StringComparer.Create(turkish, True)

        ' Define three strings consisting of different versions of the letter I.
        ' LATIN CAPITAL LETTER I (U+0049)
        Dim capitalLetterI As String = "I"

        ' LATIN SMALL LETTER I (U+0069)
        Dim smallLetterI As String = "i"

        ' LATIN SMALL LETTER DOTLESS I (U+0131)
        Dim smallLetterDotlessI As String = " "

        ' Add the three strings to the list.
        list.Add(capitalLetterI)
        list.Add(smallLetterI)
        list.Add(smallLetterDotlessI)

        ' Display the original list order.
        Display(list, "The original order of the list entries...")

        ' Sort the list using the invariant culture.
        list.Sort(invCmp)
        Display(list, "Invariant culture...")
        list.Sort(invICCmp)
        Display(list, "Invariant culture, ignore case...")

        ' Sort the list using the current culture.
        Console.WriteLine("The current culture is ""{0}"".", thisCulture.Name)
        list.Sort(currCmp)
        Display(list, "Current culture...")
        list.Sort(currICCmp)
        Display(list, "Current culture, ignore case...")

        ' Sort the list using the ordinal value of the character code points.
        list.Sort(ordCmp)
        Display(list, "Ordinal...")
        list.Sort(ordICCmp)
        Display(list, "Ordinal, ignore case...")

        ' Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
        ' DOTLESS I differently than LATIN SMALL LETTER I.
        list.Sort(turkICComp)
        Display(list, "Turkish culture, ignore case...")

    End Sub 'Main

    Public Shared Sub Display(ByVal lst As List(Of String), ByVal title As String)
        Dim c As Char
        Dim s As String
        Dim codePoint As Integer

        Console.WriteLine(title)
        For Each s In lst
            c = s(0)
            codePoint = Convert.ToInt32(c)
            Console.WriteLine("0x{0:x}", codePoint)
        Next s
        Console.WriteLine()
    End Sub 'Display
End Class 'Sample '

'This code example produces the following results:
'
'The original order of the list entries...
'0x49
'0x69
'0x131
'
'Invariant culture...
'0x69
'0x49
'0x131
'
'Invariant culture, ignore case...
'0x49
'0x69
'0x131
'
'The current culture is "en-US".
'Current culture...
'0x69
'0x49
'0x131
'
'Current culture, ignore case...
'0x49
'0x69
'0x131
'
'Ordinal...
'0x49
'0x69
'0x131
'
'Ordinal, ignore case...
'0x69
'0x49
'0x131
'
'Turkish culture, ignore case...
'0x131
'0x49
'0x69
'

// This example demonstrates members of the
// System.StringComparer class.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

class Sample
{
    public static void Main()
    {
// Create a list of string.
    List<string> list = new List<string>();

// Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo turkish = new CultureInfo("tr-TR");

// Get the culture that is associated with the current thread.
    CultureInfo thisCulture = Thread.CurrentThread.CurrentCulture;

// Get the standard StringComparers.
    StringComparer invCmp =   StringComparer.InvariantCulture;
    StringComparer invICCmp = StringComparer.InvariantCultureIgnoreCase;
    StringComparer currCmp = StringComparer.CurrentCulture;
    StringComparer currICCmp = StringComparer.CurrentCultureIgnoreCase;
    StringComparer ordCmp = StringComparer.Ordinal;
    StringComparer ordICCmp = StringComparer.OrdinalIgnoreCase;

// Create a StringComparer that uses the Turkish culture and ignores case.
    StringComparer turkICComp = StringComparer.Create(turkish, true);

// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
    string capitalLetterI = "I";

// LATIN SMALL LETTER I (U+0069)
    string smallLetterI   = "i";

// LATIN SMALL LETTER DOTLESS I (U+0131)
    string smallLetterDotlessI = "\u0131";

// Add the three strings to the list.
    list.Add(capitalLetterI);
    list.Add(smallLetterI);
    list.Add(smallLetterDotlessI);

// Display the original list order.
    Display(list, "The original order of the list entries...");

// Sort the list using the invariant culture.
    list.Sort(invCmp);
    Display(list, "Invariant culture...");
    list.Sort(invICCmp);
    Display(list, "Invariant culture, ignore case...");

// Sort the list using the current culture.
    Console.WriteLine("The current culture is \"{0}\".", thisCulture.Name);
    list.Sort(currCmp);
    Display(list, "Current culture...");
    list.Sort(currICCmp);
    Display(list, "Current culture, ignore case...");

// Sort the list using the ordinal value of the character code points.
    list.Sort(ordCmp);
    Display(list, "Ordinal...");
    list.Sort(ordICCmp);
    Display(list, "Ordinal, ignore case...");

// Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
// DOTLESS I differently than LATIN SMALL LETTER I.
    list.Sort(turkICComp);
    Display(list, "Turkish culture, ignore case...");
    }

    public static void Display(List<string> lst, string title)
    {
    Char c;
    int  codePoint;
    Console.WriteLine(title);
    foreach (string s in lst)
        {
        c = s[0];
        codePoint = Convert.ToInt32(c);
        Console.WriteLine("0x{0:x}", codePoint);
        }
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

// This example demonstrates members of the
// System::StringComparer class.

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
using namespace System::Globalization;
using namespace System::Threading;

void Display(List<String^>^ stringList, String^ title)
{
    Char firstChar;
    int codePoint;
    Console::WriteLine(title);
    for each (String^ s in stringList)
    {
        firstChar = s[0];
        codePoint = Convert::ToInt32(firstChar);
        Console::WriteLine("0x{0:x}", codePoint);
    }
    Console::WriteLine();
}

int main()
{
    // Create a list of string.
    List<String^>^ stringList = gcnew List<String^>();

    // Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo^ turkishCulture = gcnew CultureInfo("tr-TR");

    // Get the culture that is associated with the current thread.
    CultureInfo^ currentCulture = Thread::CurrentThread->CurrentCulture;

    // Get the standard StringComparers.
    StringComparer^ invariant = StringComparer::InvariantCulture;
    StringComparer^ invariantIgnoreCase =
        StringComparer::InvariantCultureIgnoreCase;
    StringComparer^ current = StringComparer::CurrentCulture;
    StringComparer^ currentIgnoreCase =
        StringComparer::CurrentCultureIgnoreCase;
    StringComparer^ ordinal = StringComparer::Ordinal;
    StringComparer^ ordinalIgnoreCase = StringComparer::OrdinalIgnoreCase;

    // Create a StringComparer that uses the Turkish culture and ignores
    // case.
    StringComparer^ turkishIgnoreCase =
        StringComparer::Create(turkishCulture, true);

    // Define three strings consisting of different versions of the
    // letter I. LATIN CAPITAL LETTER I (U+0049)
    String^ capitalLetterI = "I";

    // LATIN SMALL LETTER I (U+0069)
    String^ smallLetterI = "i";

    // LATIN SMALL LETTER DOTLESS I (U+0131)
    String^ smallLetterDotlessI = L"\u0131";

    // Add the three strings to the list.
    stringList->Add(capitalLetterI);
    stringList->Add(smallLetterI);
    stringList->Add(smallLetterDotlessI);

    // Display the original list order.
    Display(stringList, "The original order of the list entries...");

    // Sort the list using the invariant culture.
    stringList->Sort(invariant);
    Display(stringList, "Invariant culture...");
    stringList->Sort(invariantIgnoreCase);
    Display(stringList, "Invariant culture, ignore case...");

    // Sort the list using the current culture.
    Console::WriteLine("The current culture is \"{0}\".",
        currentCulture->Name);
    stringList->Sort(current);
    Display(stringList, "Current culture...");
    stringList->Sort(currentIgnoreCase);
    Display(stringList, "Current culture, ignore case...");

    // Sort the list using the ordinal value of the character code points.
    stringList->Sort(ordinal);
    Display(stringList, "Ordinal...");
    stringList->Sort(ordinalIgnoreCase);
    Display(stringList, "Ordinal, ignore case...");

    // Sort the list using the Turkish culture, which treats LATIN SMALL
    // LETTER DOTLESS I differently than LATIN SMALL LETTER I.
    stringList->Sort(turkishIgnoreCase);
    Display(stringList, "Turkish culture, ignore case...");
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparer ..::.InvariantCultureIgnoreCase 属性

StringComparer
.
.
::
.
InvariantCultureIgnoreCase 属性
StringComparer 类

获取一个 StringComparer 对象，该对象使用固定区域性的单词比较规则执行不区分大小写的字符串比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property InvariantCultureIgnoreCase As StringComparer
    Get
public static StringComparer InvariantCultureIgnoreCase { get; }
public:
static property StringComparer^ InvariantCultureIgnoreCase {
    StringComparer^ get ();
}
static member InvariantCultureIgnoreCase : StringComparer

属性值

类型： System StringComparer
新的 StringComparer 对象。

固定区域性是由 InvariantCulture 属性返回的 CultureInfo 对象。

InvariantCultureIgnoreCase 属性实际上返回从 StringComparer 类派生的匿名类的实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparer ..::.Ordinal 属性

StringComparer
.
.
::
.
Ordinal 属性
StringComparer 类

获取 StringComparer 对象，该对象执行区分大小写的序号字符串比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Ordinal As StringComparer
    Get
public static StringComparer Ordinal { get; }
public:
static property StringComparer^ Ordinal {
    StringComparer^ get ();
}
static member Ordinal : StringComparer

属性值

类型： System StringComparer
一个 StringComparer 对象。

Ordinal 属性实际上返回从 StringComparer 类派生的匿名类的实例。

下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。 下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。

' This code example demonstrates members of the System.StringComparer class.

Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading

Class Sample

    Public Shared Sub Main()
        ' Create a list of string.
        Dim list As New List(Of String)

        ' Get the tr-TR (Turkish-Turkey) culture.
        Dim turkish As New CultureInfo("tr-TR")

        ' Get the culture that is associated with the current thread.
        Dim thisCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

        ' Get the standard StringComparers.
        Dim invCmp As StringComparer = StringComparer.InvariantCulture
        Dim invICCmp As StringComparer = StringComparer.InvariantCultureIgnoreCase
        Dim currCmp As StringComparer = StringComparer.CurrentCulture
        Dim currICCmp As StringComparer = StringComparer.CurrentCultureIgnoreCase
        Dim ordCmp As StringComparer = StringComparer.Ordinal
        Dim ordICCmp As StringComparer = StringComparer.OrdinalIgnoreCase

        ' Create a StringComparer that uses the Turkish culture and ignores case.
        Dim turkICComp As StringComparer = StringComparer.Create(turkish, True)

        ' Define three strings consisting of different versions of the letter I.
        ' LATIN CAPITAL LETTER I (U+0049)
        Dim capitalLetterI As String = "I"

        ' LATIN SMALL LETTER I (U+0069)
        Dim smallLetterI As String = "i"

        ' LATIN SMALL LETTER DOTLESS I (U+0131)
        Dim smallLetterDotlessI As String = " "

        ' Add the three strings to the list.
        list.Add(capitalLetterI)
        list.Add(smallLetterI)
        list.Add(smallLetterDotlessI)

        ' Display the original list order.
        Display(list, "The original order of the list entries...")

        ' Sort the list using the invariant culture.
        list.Sort(invCmp)
        Display(list, "Invariant culture...")
        list.Sort(invICCmp)
        Display(list, "Invariant culture, ignore case...")

        ' Sort the list using the current culture.
        Console.WriteLine("The current culture is ""{0}"".", thisCulture.Name)
        list.Sort(currCmp)
        Display(list, "Current culture...")
        list.Sort(currICCmp)
        Display(list, "Current culture, ignore case...")

        ' Sort the list using the ordinal value of the character code points.
        list.Sort(ordCmp)
        Display(list, "Ordinal...")
        list.Sort(ordICCmp)
        Display(list, "Ordinal, ignore case...")

        ' Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
        ' DOTLESS I differently than LATIN SMALL LETTER I.
        list.Sort(turkICComp)
        Display(list, "Turkish culture, ignore case...")

    End Sub 'Main

    Public Shared Sub Display(ByVal lst As List(Of String), ByVal title As String)
        Dim c As Char
        Dim s As String
        Dim codePoint As Integer

        Console.WriteLine(title)
        For Each s In lst
            c = s(0)
            codePoint = Convert.ToInt32(c)
            Console.WriteLine("0x{0:x}", codePoint)
        Next s
        Console.WriteLine()
    End Sub 'Display
End Class 'Sample '

'This code example produces the following results:
'
'The original order of the list entries...
'0x49
'0x69
'0x131
'
'Invariant culture...
'0x69
'0x49
'0x131
'
'Invariant culture, ignore case...
'0x49
'0x69
'0x131
'
'The current culture is "en-US".
'Current culture...
'0x69
'0x49
'0x131
'
'Current culture, ignore case...
'0x49
'0x69
'0x131
'
'Ordinal...
'0x49
'0x69
'0x131
'
'Ordinal, ignore case...
'0x69
'0x49
'0x131
'
'Turkish culture, ignore case...
'0x131
'0x49
'0x69
'

// This example demonstrates members of the
// System.StringComparer class.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

class Sample
{
    public static void Main()
    {
// Create a list of string.
    List<string> list = new List<string>();

// Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo turkish = new CultureInfo("tr-TR");

// Get the culture that is associated with the current thread.
    CultureInfo thisCulture = Thread.CurrentThread.CurrentCulture;

// Get the standard StringComparers.
    StringComparer invCmp =   StringComparer.InvariantCulture;
    StringComparer invICCmp = StringComparer.InvariantCultureIgnoreCase;
    StringComparer currCmp = StringComparer.CurrentCulture;
    StringComparer currICCmp = StringComparer.CurrentCultureIgnoreCase;
    StringComparer ordCmp = StringComparer.Ordinal;
    StringComparer ordICCmp = StringComparer.OrdinalIgnoreCase;

// Create a StringComparer that uses the Turkish culture and ignores case.
    StringComparer turkICComp = StringComparer.Create(turkish, true);

// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
    string capitalLetterI = "I";

// LATIN SMALL LETTER I (U+0069)
    string smallLetterI   = "i";

// LATIN SMALL LETTER DOTLESS I (U+0131)
    string smallLetterDotlessI = "\u0131";

// Add the three strings to the list.
    list.Add(capitalLetterI);
    list.Add(smallLetterI);
    list.Add(smallLetterDotlessI);

// Display the original list order.
    Display(list, "The original order of the list entries...");

// Sort the list using the invariant culture.
    list.Sort(invCmp);
    Display(list, "Invariant culture...");
    list.Sort(invICCmp);
    Display(list, "Invariant culture, ignore case...");

// Sort the list using the current culture.
    Console.WriteLine("The current culture is \"{0}\".", thisCulture.Name);
    list.Sort(currCmp);
    Display(list, "Current culture...");
    list.Sort(currICCmp);
    Display(list, "Current culture, ignore case...");

// Sort the list using the ordinal value of the character code points.
    list.Sort(ordCmp);
    Display(list, "Ordinal...");
    list.Sort(ordICCmp);
    Display(list, "Ordinal, ignore case...");

// Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
// DOTLESS I differently than LATIN SMALL LETTER I.
    list.Sort(turkICComp);
    Display(list, "Turkish culture, ignore case...");
    }

    public static void Display(List<string> lst, string title)
    {
    Char c;
    int  codePoint;
    Console.WriteLine(title);
    foreach (string s in lst)
        {
        c = s[0];
        codePoint = Convert.ToInt32(c);
        Console.WriteLine("0x{0:x}", codePoint);
        }
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

// This example demonstrates members of the
// System::StringComparer class.

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
using namespace System::Globalization;
using namespace System::Threading;

void Display(List<String^>^ stringList, String^ title)
{
    Char firstChar;
    int codePoint;
    Console::WriteLine(title);
    for each (String^ s in stringList)
    {
        firstChar = s[0];
        codePoint = Convert::ToInt32(firstChar);
        Console::WriteLine("0x{0:x}", codePoint);
    }
    Console::WriteLine();
}

int main()
{
    // Create a list of string.
    List<String^>^ stringList = gcnew List<String^>();

    // Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo^ turkishCulture = gcnew CultureInfo("tr-TR");

    // Get the culture that is associated with the current thread.
    CultureInfo^ currentCulture = Thread::CurrentThread->CurrentCulture;

    // Get the standard StringComparers.
    StringComparer^ invariant = StringComparer::InvariantCulture;
    StringComparer^ invariantIgnoreCase =
        StringComparer::InvariantCultureIgnoreCase;
    StringComparer^ current = StringComparer::CurrentCulture;
    StringComparer^ currentIgnoreCase =
        StringComparer::CurrentCultureIgnoreCase;
    StringComparer^ ordinal = StringComparer::Ordinal;
    StringComparer^ ordinalIgnoreCase = StringComparer::OrdinalIgnoreCase;

    // Create a StringComparer that uses the Turkish culture and ignores
    // case.
    StringComparer^ turkishIgnoreCase =
        StringComparer::Create(turkishCulture, true);

    // Define three strings consisting of different versions of the
    // letter I. LATIN CAPITAL LETTER I (U+0049)
    String^ capitalLetterI = "I";

    // LATIN SMALL LETTER I (U+0069)
    String^ smallLetterI = "i";

    // LATIN SMALL LETTER DOTLESS I (U+0131)
    String^ smallLetterDotlessI = L"\u0131";

    // Add the three strings to the list.
    stringList->Add(capitalLetterI);
    stringList->Add(smallLetterI);
    stringList->Add(smallLetterDotlessI);

    // Display the original list order.
    Display(stringList, "The original order of the list entries...");

    // Sort the list using the invariant culture.
    stringList->Sort(invariant);
    Display(stringList, "Invariant culture...");
    stringList->Sort(invariantIgnoreCase);
    Display(stringList, "Invariant culture, ignore case...");

    // Sort the list using the current culture.
    Console::WriteLine("The current culture is \"{0}\".",
        currentCulture->Name);
    stringList->Sort(current);
    Display(stringList, "Current culture...");
    stringList->Sort(currentIgnoreCase);
    Display(stringList, "Current culture, ignore case...");

    // Sort the list using the ordinal value of the character code points.
    stringList->Sort(ordinal);
    Display(stringList, "Ordinal...");
    stringList->Sort(ordinalIgnoreCase);
    Display(stringList, "Ordinal, ignore case...");

    // Sort the list using the Turkish culture, which treats LATIN SMALL
    // LETTER DOTLESS I differently than LATIN SMALL LETTER I.
    stringList->Sort(turkishIgnoreCase);
    Display(stringList, "Turkish culture, ignore case...");
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparer ..::.OrdinalIgnoreCase 属性

StringComparer
.
.
::
.
OrdinalIgnoreCase 属性
StringComparer 类

获取 StringComparer 对象，该对象执行不区分大小写的序号字符串比较。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property OrdinalIgnoreCase As StringComparer
    Get
public static StringComparer OrdinalIgnoreCase { get; }
public:
static property StringComparer^ OrdinalIgnoreCase {
    StringComparer^ get ();
}
static member OrdinalIgnoreCase : StringComparer

属性值

类型： System StringComparer
一个 StringComparer 对象。

不区分大小写的序号比较在处理要比较的字符串中的字符时，就好像已将它们转换为大写字符，然后比较每个字符串中对应字符的 Unicode 码位。

OrdinalIgnoreCase 属性实际上返回从 StringComparer 类派生的匿名类的实例。

下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。 下面的代码示例演示 StringComparer 类的属性和 Create 方法。此示例演示不同的 StringComparer 对象如何对三种版本的拉丁字母 I 进行排序。

' This code example demonstrates members of the System.StringComparer class.

Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading

Class Sample

    Public Shared Sub Main()
        ' Create a list of string.
        Dim list As New List(Of String)

        ' Get the tr-TR (Turkish-Turkey) culture.
        Dim turkish As New CultureInfo("tr-TR")

        ' Get the culture that is associated with the current thread.
        Dim thisCulture As CultureInfo = Thread.CurrentThread.CurrentCulture

        ' Get the standard StringComparers.
        Dim invCmp As StringComparer = StringComparer.InvariantCulture
        Dim invICCmp As StringComparer = StringComparer.InvariantCultureIgnoreCase
        Dim currCmp As StringComparer = StringComparer.CurrentCulture
        Dim currICCmp As StringComparer = StringComparer.CurrentCultureIgnoreCase
        Dim ordCmp As StringComparer = StringComparer.Ordinal
        Dim ordICCmp As StringComparer = StringComparer.OrdinalIgnoreCase

        ' Create a StringComparer that uses the Turkish culture and ignores case.
        Dim turkICComp As StringComparer = StringComparer.Create(turkish, True)

        ' Define three strings consisting of different versions of the letter I.
        ' LATIN CAPITAL LETTER I (U+0049)
        Dim capitalLetterI As String = "I"

        ' LATIN SMALL LETTER I (U+0069)
        Dim smallLetterI As String = "i"

        ' LATIN SMALL LETTER DOTLESS I (U+0131)
        Dim smallLetterDotlessI As String = " "

        ' Add the three strings to the list.
        list.Add(capitalLetterI)
        list.Add(smallLetterI)
        list.Add(smallLetterDotlessI)

        ' Display the original list order.
        Display(list, "The original order of the list entries...")

        ' Sort the list using the invariant culture.
        list.Sort(invCmp)
        Display(list, "Invariant culture...")
        list.Sort(invICCmp)
        Display(list, "Invariant culture, ignore case...")

        ' Sort the list using the current culture.
        Console.WriteLine("The current culture is ""{0}"".", thisCulture.Name)
        list.Sort(currCmp)
        Display(list, "Current culture...")
        list.Sort(currICCmp)
        Display(list, "Current culture, ignore case...")

        ' Sort the list using the ordinal value of the character code points.
        list.Sort(ordCmp)
        Display(list, "Ordinal...")
        list.Sort(ordICCmp)
        Display(list, "Ordinal, ignore case...")

        ' Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
        ' DOTLESS I differently than LATIN SMALL LETTER I.
        list.Sort(turkICComp)
        Display(list, "Turkish culture, ignore case...")

    End Sub 'Main

    Public Shared Sub Display(ByVal lst As List(Of String), ByVal title As String)
        Dim c As Char
        Dim s As String
        Dim codePoint As Integer

        Console.WriteLine(title)
        For Each s In lst
            c = s(0)
            codePoint = Convert.ToInt32(c)
            Console.WriteLine("0x{0:x}", codePoint)
        Next s
        Console.WriteLine()
    End Sub 'Display
End Class 'Sample '

'This code example produces the following results:
'
'The original order of the list entries...
'0x49
'0x69
'0x131
'
'Invariant culture...
'0x69
'0x49
'0x131
'
'Invariant culture, ignore case...
'0x49
'0x69
'0x131
'
'The current culture is "en-US".
'Current culture...
'0x69
'0x49
'0x131
'
'Current culture, ignore case...
'0x49
'0x69
'0x131
'
'Ordinal...
'0x49
'0x69
'0x131
'
'Ordinal, ignore case...
'0x69
'0x49
'0x131
'
'Turkish culture, ignore case...
'0x131
'0x49
'0x69
'

// This example demonstrates members of the
// System.StringComparer class.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

class Sample
{
    public static void Main()
    {
// Create a list of string.
    List<string> list = new List<string>();

// Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo turkish = new CultureInfo("tr-TR");

// Get the culture that is associated with the current thread.
    CultureInfo thisCulture = Thread.CurrentThread.CurrentCulture;

// Get the standard StringComparers.
    StringComparer invCmp =   StringComparer.InvariantCulture;
    StringComparer invICCmp = StringComparer.InvariantCultureIgnoreCase;
    StringComparer currCmp = StringComparer.CurrentCulture;
    StringComparer currICCmp = StringComparer.CurrentCultureIgnoreCase;
    StringComparer ordCmp = StringComparer.Ordinal;
    StringComparer ordICCmp = StringComparer.OrdinalIgnoreCase;

// Create a StringComparer that uses the Turkish culture and ignores case.
    StringComparer turkICComp = StringComparer.Create(turkish, true);

// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
    string capitalLetterI = "I";

// LATIN SMALL LETTER I (U+0069)
    string smallLetterI   = "i";

// LATIN SMALL LETTER DOTLESS I (U+0131)
    string smallLetterDotlessI = "\u0131";

// Add the three strings to the list.
    list.Add(capitalLetterI);
    list.Add(smallLetterI);
    list.Add(smallLetterDotlessI);

// Display the original list order.
    Display(list, "The original order of the list entries...");

// Sort the list using the invariant culture.
    list.Sort(invCmp);
    Display(list, "Invariant culture...");
    list.Sort(invICCmp);
    Display(list, "Invariant culture, ignore case...");

// Sort the list using the current culture.
    Console.WriteLine("The current culture is \"{0}\".", thisCulture.Name);
    list.Sort(currCmp);
    Display(list, "Current culture...");
    list.Sort(currICCmp);
    Display(list, "Current culture, ignore case...");

// Sort the list using the ordinal value of the character code points.
    list.Sort(ordCmp);
    Display(list, "Ordinal...");
    list.Sort(ordICCmp);
    Display(list, "Ordinal, ignore case...");

// Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
// DOTLESS I differently than LATIN SMALL LETTER I.
    list.Sort(turkICComp);
    Display(list, "Turkish culture, ignore case...");
    }

    public static void Display(List<string> lst, string title)
    {
    Char c;
    int  codePoint;
    Console.WriteLine(title);
    foreach (string s in lst)
        {
        c = s[0];
        codePoint = Convert.ToInt32(c);
        Console.WriteLine("0x{0:x}", codePoint);
        }
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

// This example demonstrates members of the
// System::StringComparer class.

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
using namespace System::Globalization;
using namespace System::Threading;

void Display(List<String^>^ stringList, String^ title)
{
    Char firstChar;
    int codePoint;
    Console::WriteLine(title);
    for each (String^ s in stringList)
    {
        firstChar = s[0];
        codePoint = Convert::ToInt32(firstChar);
        Console::WriteLine("0x{0:x}", codePoint);
    }
    Console::WriteLine();
}

int main()
{
    // Create a list of string.
    List<String^>^ stringList = gcnew List<String^>();

    // Get the tr-TR (Turkish-Turkey) culture.
    CultureInfo^ turkishCulture = gcnew CultureInfo("tr-TR");

    // Get the culture that is associated with the current thread.
    CultureInfo^ currentCulture = Thread::CurrentThread->CurrentCulture;

    // Get the standard StringComparers.
    StringComparer^ invariant = StringComparer::InvariantCulture;
    StringComparer^ invariantIgnoreCase =
        StringComparer::InvariantCultureIgnoreCase;
    StringComparer^ current = StringComparer::CurrentCulture;
    StringComparer^ currentIgnoreCase =
        StringComparer::CurrentCultureIgnoreCase;
    StringComparer^ ordinal = StringComparer::Ordinal;
    StringComparer^ ordinalIgnoreCase = StringComparer::OrdinalIgnoreCase;

    // Create a StringComparer that uses the Turkish culture and ignores
    // case.
    StringComparer^ turkishIgnoreCase =
        StringComparer::Create(turkishCulture, true);

    // Define three strings consisting of different versions of the
    // letter I. LATIN CAPITAL LETTER I (U+0049)
    String^ capitalLetterI = "I";

    // LATIN SMALL LETTER I (U+0069)
    String^ smallLetterI = "i";

    // LATIN SMALL LETTER DOTLESS I (U+0131)
    String^ smallLetterDotlessI = L"\u0131";

    // Add the three strings to the list.
    stringList->Add(capitalLetterI);
    stringList->Add(smallLetterI);
    stringList->Add(smallLetterDotlessI);

    // Display the original list order.
    Display(stringList, "The original order of the list entries...");

    // Sort the list using the invariant culture.
    stringList->Sort(invariant);
    Display(stringList, "Invariant culture...");
    stringList->Sort(invariantIgnoreCase);
    Display(stringList, "Invariant culture, ignore case...");

    // Sort the list using the current culture.
    Console::WriteLine("The current culture is \"{0}\".",
        currentCulture->Name);
    stringList->Sort(current);
    Display(stringList, "Current culture...");
    stringList->Sort(currentIgnoreCase);
    Display(stringList, "Current culture, ignore case...");

    // Sort the list using the ordinal value of the character code points.
    stringList->Sort(ordinal);
    Display(stringList, "Ordinal...");
    stringList->Sort(ordinalIgnoreCase);
    Display(stringList, "Ordinal, ignore case...");

    // Sort the list using the Turkish culture, which treats LATIN SMALL
    // LETTER DOTLESS I differently than LATIN SMALL LETTER I.
    stringList->Sort(turkishIgnoreCase);
    Display(stringList, "Turkish culture, ignore case...");
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StringComparer 类
StringComparer 成员
System 命名空间


StringComparison 枚举

StringComparison 枚举

指定 String..::.Compare 和 String..::.Equals 方法的某些重载要使用的区域、大小写和排序规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration StringComparison
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum StringComparison
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class StringComparison
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type StringComparison
 | 成员名称 | 说明
由 XNA Framework 提供支持 | CurrentCulture | 使用区域敏感排序规则和当前区域比较字符串。
由 XNA Framework 提供支持 | CurrentCultureIgnoreCase | 使用区域敏感排序规则、当前区域来比较字符串，同时忽略被比较字符串的大小写。
由 XNA Framework 提供支持 | InvariantCulture | 使用区域敏感排序规则和固定区域比较字符串。
由 XNA Framework 提供支持 | InvariantCultureIgnoreCase | 使用区域敏感排序规则、固定区域来比较字符串，同时忽略被比较字符串的大小写。
由 XNA Framework 提供支持 | Ordinal | 使用序号排序规则比较字符串。
由 XNA Framework 提供支持 | OrdinalIgnoreCase | 使用序号排序规则并忽略被比较字符串的大小写，对字符串进行比较。

StringComparison 枚举用于指定字符串比较是使用当前区域还是固定区域、使用字词还是序号排序规则以及是否区分大小写。

使用字词排序规则的操作执行一个区域敏感比较，在这个比较中可能会为非字母数字的 Unicode 字符分配特殊权重。使用字词排序规则和特定区域的约定，连字符（“-”）的权重可能非常小，因此“coop”和“co-op”在排序列表中是紧挨着出现的。 使用字词排序规则的操作执行一个区域敏感比较，在这个比较中可能会为非字母数字的 Unicode 字符分配特殊权重。使用字词排序规则和特定区域的约定，连字符（“-”）的权重可能非常小，因此“coop”和“co-op”在排序列表中是紧挨着出现的。

使用序号排序规则的操作基于字符串中每个 Char 的数字值（Unicode 码位）执行比较。序号比较很快，但是不具有区域敏感性。在使用序号排序规则对以 Unicode 字符 (U+) 开头的字符串进行排序时，如果 xxxx 的数值小于 yyyy，则将字符串 U+xxxx 排在字符串 U+yyyy 的前面。 使用序号排序规则的操作基于字符串中每个 Char 的数字值（Unicode 码位）执行比较。序号比较很快，但是不具有区域敏感性。在使用序号排序规则对以 Unicode 字符 (U+) 开头的字符串进行排序时，如果 xxxx 的数值小于 yyyy，则将字符串 U+xxxx 排在字符串 U+yyyy 的前面。 使用序号排序规则的操作基于字符串中每个 Char 的数字值（Unicode 码位）执行比较。序号比较很快，但是不具有区域敏感性。在使用序号排序规则对以 Unicode 字符 (U+) 开头的字符串进行排序时，如果 xxxx 的数值小于 yyyy，则将字符串 U+xxxx 排在字符串 U+yyyy 的前面。

有关比较的更多信息，请参见 System..::.String 类备注。有关区域的更多信息，请参见 System.Globalization..::.CultureInfo 类备注。有关何时使用序号或区分区域性的比较规则或固定区域性规则的指南，请参见在 .NET Framework 中使用字符串的最佳做法。 有关比较的更多信息，请参见 System..::.String 类备注。有关区域的更多信息，请参见 System.Globalization..::.CultureInfo 类备注。有关何时使用序号或区分区域性的比较规则或固定区域性规则的指南，请参见在 .NET Framework 中使用字符串的最佳做法。 有关比较的更多信息，请参见 System..::.String 类备注。有关区域的更多信息，请参见 System.Globalization..::.CultureInfo 类备注。有关何时使用序号或区分区域性的比较规则或固定区域性规则的指南，请参见在 .NET Framework 中使用字符串的最佳做法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间
String
String Compare
CompareInfo Compare
String CompareOrdinal
CultureInfo InvariantCulture


StringSplitOptions 枚举

StringSplitOptions 枚举

指定适用的 String..::.Split 方法重载包含还是省略返回值中的空子字符串。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
<FlagsAttribute> _
Public Enumeration StringSplitOptions
[ComVisibleAttribute(false)]
[FlagsAttribute]
public enum StringSplitOptions
[ComVisibleAttribute(false)]
[FlagsAttribute]
public enum class StringSplitOptions
[<ComVisibleAttribute(false)>]
[<FlagsAttribute>]
type StringSplitOptions
成员名称 | 说明
None | 返回值包括含有空字符串的数组元素
RemoveEmptyEntries | 返回值不包括含有空字符串的数组元素

Split 方法返回一个由给定字符串的子字符串组成的数组，这些子字符串以指定的字符或字符串分隔。相邻的两个分隔符表示一个包含空字符串 ("") 的数组元素。StringSplitOptions 枚举的值指定是否将包含空字符串的数组元素包含在返回数组中。 Split 方法返回一个由给定字符串的子字符串组成的数组，这些子字符串以指定的字符或字符串分隔。相邻的两个分隔符表示一个包含空字符串 ("") 的数组元素。StringSplitOptions 枚举的值指定是否将包含空字符串的数组元素包含在返回数组中。 Split 方法返回一个由给定字符串的子字符串组成的数组，这些子字符串以指定的字符或字符串分隔。相邻的两个分隔符表示一个包含空字符串 ("") 的数组元素。StringSplitOptions 枚举的值指定是否将包含空字符串的数组元素包含在返回数组中。

指定 None 值以调用 Split 方法的默认行为，即返回由空子字符串和非空子字符串组成的数组。指定 RemoveEmptyEntries 值以使 Split 方法返回的数组仅由非空子字符串组成。 指定 None 值以调用 Split 方法的默认行为，即返回由空子字符串和非空子字符串组成的数组。指定 RemoveEmptyEntries 值以使 Split 方法返回的数组仅由非空子字符串组成。

下面的代码示例使用 StringSplitOptions 枚举来包含或排除由 Split 方法生成的子字符串。

' This example demonstrates the String() methods that use
' the StringSplitOptions enumeration.
Imports System

Class Sample
    Public Shared Sub Main()
        Dim s1 As String = ",ONE,,TWO,,,THREE,,"
        Dim s2 As String = "[stop]" & _
                           "ONE[stop][stop]" & _
                           "TWO[stop][stop][stop]" & _
                           "THREE[stop][stop]"
        Dim charSeparators() As Char = {","c}
        Dim stringSeparators() As String = {"[stop]"}
        Dim result() As String
        ' ------------------------------------------------------------------------------
        ' Split a string delimited by characters.
        ' ------------------------------------------------------------------------------
        Console.WriteLine("1) Split a string delimited by characters:" & vbCrLf)

        ' Display the original string and delimiter characters.
        Console.WriteLine("1a )The original string is ""{0}"".", s1)
        Console.WriteLine("The delimiter character is '{0}'." & vbCrLf, charSeparators(0))

        ' Split a string delimited by characters and return all elements.
        Console.WriteLine("1b) Split a string delimited by characters and " & _
                          "return all elements:")
        result = s1.Split(charSeparators, StringSplitOptions.None)
        Show(result)

        ' Split a string delimited by characters and return all non-empty elements.
        Console.WriteLine("1c) Split a string delimited by characters and " & _
                          "return all non-empty elements:")
        result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' Split the original string into the string and empty string before the
        ' delimiter and the remainder of the original string after the delimiter.
        Console.WriteLine("1d) Split a string delimited by characters and " & _
                          "return 2 elements:")
        result = s1.Split(charSeparators, 2, StringSplitOptions.None)
        Show(result)

        ' Split the original string into the string after the delimiter and the
        ' remainder of the original string after the delimiter.
        Console.WriteLine("1e) Split a string delimited by characters and " & _
                          "return 2 non-empty elements:")
        result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' ------------------------------------------------------------------------------
        ' Split a string delimited by another string.
        ' ------------------------------------------------------------------------------
        Console.WriteLine("2) Split a string delimited by another string:" & vbCrLf)

        ' Display the original string and delimiter string.
        Console.WriteLine("2a) The original string is ""{0}"".", s2)
        Console.WriteLine("The delimiter string is ""{0}""." & vbCrLf, stringSeparators(0))

        ' Split a string delimited by another string and return all elements.
        Console.WriteLine("2b) Split a string delimited by another string and " & _
                          "return all elements:")
        result = s2.Split(stringSeparators, StringSplitOptions.None)
        Show(result)

        ' Split the original string at the delimiter and return all non-empty elements.
        Console.WriteLine("2c) Split a string delimited by another string and " & _
                          "return all non-empty elements:")
        result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

        ' Split the original string into the empty string before the
        ' delimiter and the remainder of the original string after the delimiter.
        Console.WriteLine("2d) Split a string delimited by another string and " & _
                          "return 2 elements:")
        result = s2.Split(stringSeparators, 2, StringSplitOptions.None)
        Show(result)

        ' Split the original string into the string after the delimiter and the
        ' remainder of the original string after the delimiter.
        Console.WriteLine("2e) Split a string delimited by another string and " & _
                          "return 2 non-empty elements:")
        result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
        Show(result)

    End Sub 'Main

    ' Display the array of separated strings.
    Public Shared Sub Show(ByVal entries() As String)
        Console.WriteLine("The return value contains these {0} elements:", entries.Length)
        Dim entry As String
        For Each entry In  entries
            Console.Write("<{0}>", entry)
        Next entry
        Console.Write(vbCrLf & vbCrLf)

    End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'1) Split a string delimited by characters:
'
'1a )The original string is ",ONE,,TWO,,,THREE,,".
'The delimiter character is ','.
'
'1b) Split a string delimited by characters and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'1c) Split a string delimited by characters and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'1d) Split a string delimited by characters and return 2 elements:
'The return value contains these 2 elements:
'<><ONE,,TWO,,,THREE,,>
'
'1e) Split a string delimited by characters and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO,,,THREE,,>
'
'2) Split a string delimited by another string:
'
'2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
'The delimiter string is "[stop]".
'
'2b) Split a string delimited by another string and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'2c) Split a string delimited by another string and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'2d) Split a string delimited by another string and return 2 elements:
'The return value contains these 2 elements:
'<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>
'
'2e) Split a string delimited by another string and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO[stop][stop][stop]THREE[stop][stop]>
'

// This example demonstrates the String() methods that use
// the StringSplitOptions enumeration.
using System;

class Sample
{
    public static void Main()
    {
    string s1 = ",ONE,,TWO,,,THREE,,";
    string s2 = "[stop]" +
                "ONE[stop][stop]" +
                "TWO[stop][stop][stop]" +
                "THREE[stop][stop]";
    char[] charSeparators = new char[] {','};
    string[] stringSeparators = new string[] {"[stop]"};
    string[] result;
// ------------------------------------------------------------------------------
// Split a string delimited by characters.
// ------------------------------------------------------------------------------
    Console.WriteLine("1) Split a string delimited by characters:\n");

// Display the original string and delimiter characters.
    Console.WriteLine("1a )The original string is \"{0}\".", s1);
    Console.WriteLine("The delimiter character is '{0}'.\n",
                       charSeparators[0]);

// Split a string delimited by characters and return all elements.
    Console.WriteLine("1b) Split a string delimited by characters and " +
                      "return all elements:");
    result = s1.Split(charSeparators, StringSplitOptions.None);
    Show(result);

// Split a string delimited by characters and return all non-empty elements.
    Console.WriteLine("1c) Split a string delimited by characters and " +
                      "return all non-empty elements:");
    result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// Split the original string into the string and empty string before the
// delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("1d) Split a string delimited by characters and " +
                      "return 2 elements:");
    result = s1.Split(charSeparators, 2, StringSplitOptions.None);
    Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
    Console.WriteLine("1e) Split a string delimited by characters and " +
                      "return 2 non-empty elements:");
    result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// ------------------------------------------------------------------------------
// Split a string delimited by another string.
// ------------------------------------------------------------------------------
    Console.WriteLine("2) Split a string delimited by another string:\n");

// Display the original string and delimiter string.
    Console.WriteLine("2a) The original string is \"{0}\".", s2);
    Console.WriteLine("The delimiter string is \"{0}\".\n", stringSeparators[0]);

// Split a string delimited by another string and return all elements.
    Console.WriteLine("2b) Split a string delimited by another string and " +
                      "return all elements:");
    result = s2.Split(stringSeparators, StringSplitOptions.None);
    Show(result);

// Split the original string at the delimiter and return all non-empty elements.
    Console.WriteLine("2c) Split a string delimited by another string and " +
                      "return all non-empty elements:");
    result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
    Show(result);

// Split the original string into the empty string before the
// delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("2d) Split a string delimited by another string and " +
                      "return 2 elements:");
    result = s2.Split(stringSeparators, 2, StringSplitOptions.None);
    Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
    Console.WriteLine("2e) Split a string delimited by another string and " +
                      "return 2 non-empty elements:");
    result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
    Show(result);
    }

// Display the array of separated strings.
    public static void Show(string[] entries)
    {
    Console.WriteLine("The return value contains these {0} elements:", entries.Length);
    foreach (string entry in entries)
        {
        Console.Write("<{0}>", entry);
        }
    Console.Write("\n\n");
    }
}
/*
This example produces the following results:

1) Split a string delimited by characters:

1a )The original string is ",ONE,,TWO,,,THREE,,".
The delimiter character is ','.

1b) Split a string delimited by characters and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

1c) Split a string delimited by characters and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

1d) Split a string delimited by characters and return 2 elements:
The return value contains these 2 elements:
<><ONE,,TWO,,,THREE,,>

1e) Split a string delimited by characters and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO,,,THREE,,>

2) Split a string delimited by another string:

2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
The delimiter string is "[stop]".

2b) Split a string delimited by another string and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

2c) Split a string delimited by another string and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

2d) Split a string delimited by another string and return 2 elements:
The return value contains these 2 elements:
<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>

2e) Split a string delimited by another string and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO[stop][stop][stop]THREE[stop][stop]>

*/

// This example demonstrates the String.Split(Char[], Boolean) and
//                               String.Split(Char[], Int32, Boolean) methods
using namespace System;
void Show( array<String^>^entries )
{
   Console::WriteLine( "The return value contains these {0} elements:", entries->Length );
   System::Collections::IEnumerator^ myEnum = entries->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ entry = safe_cast<String^>(myEnum->Current);
      Console::Write( "<{0}>", entry );
   }

   Console::Write( "{0}{0}", Environment::NewLine );
}

int main()
{
   String^ s = ",one,,,two,,,,,three,,";
   array<Char>^sep = gcnew array<Char>{
      ','
   };
   array<String^>^result;

   //
   Console::WriteLine( "The original string is \"{0}\".", s );
   Console::WriteLine( "The separation character is '{0}'.", sep[ 0 ] );
   Console::WriteLine();

   //
   Console::WriteLine( "Split the string and return all elements:" );
   result = s->Split( sep, StringSplitOptions::None );
   Show( result );

   //
   Console::WriteLine( "Split the string and return all non-empty elements:" );
   result = s->Split( sep, StringSplitOptions::RemoveEmptyEntries );
   Show( result );

   //
   Console::WriteLine( "Split the string and return 2 elements:" );
   result = s->Split( sep, 2, StringSplitOptions::None );
   Show( result );

   //
   Console::WriteLine( "Split the string and return 2 non-empty elements:" );
   result = s->Split( sep, 2, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
}

/*
This example produces the following results:

The original string is ",one,,,two,,,,,three,,".
The separation character is ','.

Split the string and return all elements:
The return value contains these 12 elements:
<><one><><><two><><><><><three><><>

Split the string and return all non-empty elements:
The return value contains these 3 elements:
<one><two><three>

Split the string and return 2 elements:
The return value contains these 2 elements:
<><one,,,two,,,,,three,,>

Split the string and return 2 non-empty elements:
The return value contains these 2 elements:
<one><,,two,,,,,three,,>

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
Empty


SystemException 类

SystemException 类
成员

为 System 命名空间中的预定义异常定义基类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class SystemException _
    Inherits Exception
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class SystemException : Exception
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class SystemException : public Exception
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type SystemException =
    class
        inherit Exception
    end

此类是作为一种方法提供的，该方法用于在系统定义的异常和应用程序定义的异常之间进行区分。

SystemException 不提供导致 Exception 原因的信息。大多数情况下都不应引发此类的实例。如果此类被实例化，则描述该错误的可读消息应传递给构造函数。 SystemException 不提供导致 Exception 原因的信息。大多数情况下都不应引发此类的实例。如果此类被实例化，则描述该错误的可读消息应传递给构造函数。 SystemException 不提供导致 Exception 原因的信息。大多数情况下都不应引发此类的实例。如果此类被实例化，则描述该错误的可读消息应传递给构造函数。

当发生非致命的、可由用户程序恢复的错误时，公共语言运行时引发 SystemException。这些错误是失败的运行时检查（如数组超出界限错误）导致的，它们可在任何方法的执行过程中发生。SystemException 不向 Exception 添加新功能。 当发生非致命的、可由用户程序恢复的错误时，公共语言运行时引发 SystemException。这些错误是失败的运行时检查（如数组超出界限错误）导致的，它们可在任何方法的执行过程中发生。SystemException 不向 Exception 添加新功能。 当发生非致命的、可由用户程序恢复的错误时，公共语言运行时引发 SystemException。这些错误是失败的运行时检查（如数组超出界限错误）导致的，它们可在任何方法的执行过程中发生。SystemException 不向 Exception 添加新功能。

SystemException 使用值为 0x80131501 的 HRESULT COR_E_SYSTEM。

有关 SystemException 实例的初始属性值列表，请参见 SystemException 构造函数。

有关由应用程序定义的异常的更多信息，请参见 ApplicationException。

System System..::.SystemExceptionSystemException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SystemException 成员
System 命名空间
Exception

其他资源

处理和引发异常


SystemException 成员

SystemException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SystemException 类

为 System 命名空间中的预定义异常定义基类。

SystemException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SystemException 类
System 命名空间


SystemException 构造函数

SystemException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SystemException 类

初始化 SystemException 类的新实例。

名称 说明
页首

参考

SystemException 类
SystemException 成员
System 命名空间


SystemException 构造函数

SystemException 构造函数
SystemException 类

初始化 SystemException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public SystemException()
public:
SystemException()
new : unit -> SystemException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“发生系统错误。”。此消息将考虑当前系统区域性。

下表显示 SystemException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SystemException 类
SystemException 成员
SystemException 重载
System 命名空间


SystemException 构造函数 (String)

SystemException 构造函数 (String)
SystemException 类

使用指定错误信息初始化 SystemException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public SystemException(
    string message
)
public:
SystemException(
    String^ message
)
new :
        message:string -> SystemException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 SystemException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SystemException 类
SystemException 成员
SystemException 重载
System 命名空间


SystemException 构造函数 (SerializationInfo, StreamingContext)

SystemException 构造函数 (SerializationInfo, StreamingContext)
SystemException 类

用序列化数据初始化 SystemException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected SystemException(
    SerializationInfo info,
    StreamingContext context
)
protected:
SystemException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> SystemException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SystemException 类
SystemException 成员
SystemException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


SystemException 构造函数 (String, Exception)

SystemException 构造函数 (String, Exception)
SystemException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 SystemException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public SystemException(
    string message,
    Exception innerException
)
public:
SystemException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> SystemException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 SystemException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SystemException 类
SystemException 成员
SystemException 重载
System 命名空间
Exception

其他资源

处理和引发异常


SystemException 方法

SystemException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SystemException 类

SystemException 类型公开以下成员。

名称 说明
页首

参考

SystemException 类
System 命名空间


SystemException 属性

SystemException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SystemException 类

SystemException 类型公开以下成员。

名称 说明
页首

参考

SystemException 类
System 命名空间


SystemException 事件

SystemException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SystemException 类

SystemException 类型公开以下成员。

名称 说明
页首

参考

SystemException 类
System 命名空间


ThreadStaticAttribute 类

ThreadStaticAttribute 类
成员

指示静态字段的值对于每个线程都是唯一的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<AttributeUsageAttribute(AttributeTargets.Field, Inherited := False)> _
<ComVisibleAttribute(True)> _
Public Class ThreadStaticAttribute _
    Inherits Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)]
[ComVisibleAttribute(true)]
public class ThreadStaticAttribute : Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets::Field, Inherited = false)]
[ComVisibleAttribute(true)]
public ref class ThreadStaticAttribute : public Attribute
[<SerializableAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)>]
[<ComVisibleAttribute(true)>]
type ThreadStaticAttribute =
    class
        inherit Attribute
    end

用 ThreadStaticAttribute 标记的 static 字段不在线程之间共享。每个执行线程都有单独的字段实例，并且独立地设置及获取该字段的值。如果在不同的线程中访问该字段，则该字段将包含不同的值。 用 ThreadStaticAttribute 标记的 static 字段不在线程之间共享。每个执行线程都有单独的字段实例，并且独立地设置及获取该字段的值。如果在不同的线程中访问该字段，则该字段将包含不同的值。 用 ThreadStaticAttribute 标记的 static 字段不在线程之间共享。每个执行线程都有单独的字段实例，并且独立地设置及获取该字段的值。如果在不同的线程中访问该字段，则该字段将包含不同的值。

说明 说明

不要为标记为 ThreadStaticAttribute 的字段指定初始值，因为这样的初始化只会发生一次，因此在类构造函数执行时只会影响一个线程。在不指定初始值的情况下，如果它是值类型，可依赖初始化为其默认值的字段，如果它是引用类型，则可依赖初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的字段。 不要为标记为 ThreadStaticAttribute 的字段指定初始值，因为这样的初始化只会发生一次，因此在类构造函数执行时只会影响一个线程。在不指定初始值的情况下，如果它是值类型，可依赖初始化为其默认值的字段，如果它是引用类型，则可依赖初始化为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的字段。

按原样使用此特性，而不要从其派生。下面是 ThreadStaticAttribute 语法的示例： 按原样使用此特性，而不要从其派生。下面是 ThreadStaticAttribute 语法的示例：

 [ThreadStatic]
 static int value;
 <ThreadStatic> _
 Shared value As Integer

有关使用特性的更多信息，请参见 利用特性扩展元数据。

System System..::.ThreadStaticAttributeThreadStaticAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ThreadStaticAttribute 成员
System 命名空间
Attribute
Thread

其他资源

利用特性扩展元数据
托管线程处理


ThreadStaticAttribute 成员

ThreadStaticAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ThreadStaticAttribute 类

指示静态字段的值对于每个线程都是唯一的。

ThreadStaticAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ThreadStaticAttribute 类
System 命名空间


ThreadStaticAttribute 构造函数

ThreadStaticAttribute 构造函数
ThreadStaticAttribute 类

初始化 ThreadStaticAttribute 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ThreadStaticAttribute()
public:
ThreadStaticAttribute()
new : unit -> ThreadStaticAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ThreadStaticAttribute 类
ThreadStaticAttribute 成员
System 命名空间


ThreadStaticAttribute 方法

ThreadStaticAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ThreadStaticAttribute 类

ThreadStaticAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ThreadStaticAttribute 类
System 命名空间


ThreadStaticAttribute 属性

ThreadStaticAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ThreadStaticAttribute 类

ThreadStaticAttribute 类型公开以下成员。

名称 说明
页首

参考

ThreadStaticAttribute 类
System 命名空间


TimeoutException 类

TimeoutException 类
成员

给进程或操作分配的时间过期时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class TimeoutException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class TimeoutException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class TimeoutException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type TimeoutException =
    class
        inherit SystemException
    end

TimeoutException 使用值为 0x80131505 的 HRESULT, COR_E_TIMEOUT。

有关 TimeoutException 实例的初始属性值列表，请参见 TimeoutException 构造函数。

下面的代码示例演示如何同时使用 TimeoutException 与 System.IO.Ports..::.SerialPort 类的成员。

' This example demonstrates the use of the TimeoutException
' exception in conjunction with the SerialPort class.

Imports System
Imports System.IO.Ports

Class Sample
   Public Shared Sub Main()
      Dim input As String
      Try
         ' Set the COM1 serial port to speed = 4800 baud, parity = odd,
         ' data bits = 8, stop bits = 1.
         Dim sp As New SerialPort("COM1", 4800, Parity.Odd, 8, StopBits.One)

         ' Timeout after 2 seconds.
         sp.ReadTimeout = 2000
         sp.Open()

         ' Read until either the default newline termination string
         ' is detected or the read operation times out.
         input = sp.ReadLine()

         sp.Close()

         ' Echo the input.
         Console.WriteLine(input)

      ' Only catch timeout exceptions.
      Catch e As TimeoutException
         Console.WriteLine(e)
      End Try
   End Sub 'Main
End Class 'Sample
'
'This example produces the following results:
'
'(Data received at the serial port is echoed to the console if the
'read operation completes successfully before the specified timeout period
'expires. Otherwise, a timeout exception like the following is thrown.)
'
'System.TimeoutException: The operation has timed-out.
'   at System.IO.Ports.SerialStream.ReadByte(Int32 timeout)
'   at System.IO.Ports.SerialPort.ReadOneChar(Int32 timeout)
'   at System.IO.Ports.SerialPort.ReadTo(String value)
'   at System.IO.Ports.SerialPort.ReadLine()
'   at Sample.Main()
'

// This example demonstrates the use of the TimeoutException
// exception in conjunction with the SerialPort class.

using System;
using System.IO.Ports;

class Sample
{
    public static void Main()
    {
    string input;
    try
        {
// Set the COM1 serial port to speed = 4800 baud, parity = odd,
// data bits = 8, stop bits = 1.
        SerialPort sp = new SerialPort("COM1",
                        4800, Parity.Odd, 8, StopBits.One);
// Timeout after 2 seconds.
        sp.ReadTimeout = 2000;
        sp.Open();

// Read until either the default newline termination string
// is detected or the read operation times out.
        input = sp.ReadLine();

        sp.Close();

// Echo the input.
        Console.WriteLine(input);
        }

// Only catch timeout exceptions.
    catch (TimeoutException e)
        {
        Console.WriteLine(e);
        }
    }
}
/*
This example produces the following results:

(Data received at the serial port is echoed to the console if the
read operation completes successfully before the specified timeout period
expires. Otherwise, a timeout exception like the following is thrown.)

System.TimeoutException: The operation has timed-out.
   at System.IO.Ports.SerialStream.ReadByte(Int32 timeout)
   at System.IO.Ports.SerialPort.ReadOneChar(Int32 timeout)
   at System.IO.Ports.SerialPort.ReadTo(String value)
   at System.IO.Ports.SerialPort.ReadLine()
   at Sample.Main()
*/

// This example demonstrates the use of the TimeoutException
// exception in conjunction with the SerialPort class.

#using <System.dll>

using namespace System;
using namespace System::IO::Ports;

int main()
{
    String^ input;
    try
    {
        // Set the COM1 serial port to speed = 4800 baud, parity = odd,
        // data bits = 8, stop bits = 1.
        SerialPort^ port = gcnew SerialPort("COM1",
            4800, Parity::Odd, 8, StopBits::One);
        // Timeout after 2 seconds.
        port->ReadTimeout = 2000;
        port->Open();

        // Read until either the default newline termination string
        // is detected or the read operation times out.
        input = port->ReadLine();

        port->Close();

        // Echo the input.
        Console::WriteLine(input);
    }

    // Only catch timeout exceptions.
    catch (TimeoutException^ ex)
    {
        Console::WriteLine(ex);
    }
};
/*
This example produces the following results:

(Data received at the serial port is echoed to the console if the
read operation completes successfully before the specified timeout period
expires. Otherwise, a timeout exception like the following is thrown.)

System.TimeoutException: The operation has timed-out.
at System.IO.Ports.SerialStream.ReadByte(Int32 timeout)
at System.IO.Ports.SerialPort.ReadOneChar(Int32 timeout)
at System.IO.Ports.SerialPort.ReadTo(String value)
at System.IO.Ports.SerialPort.ReadLine()
at Sample.Main()
*/

System System..::.TimeoutExceptionTimeoutException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeoutException 成员
System 命名空间
Exception

其他资源

处理和引发异常


TimeoutException 成员

TimeoutException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeoutException 类

给进程或操作分配的时间过期时引发的异常。

TimeoutException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TimeoutException 类
System 命名空间


TimeoutException 构造函数

TimeoutException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeoutException 类

初始化 TimeoutException 类的新实例。

名称 说明
页首

参考

TimeoutException 类
TimeoutException 成员
System 命名空间


TimeoutException 构造函数

TimeoutException 构造函数
TimeoutException 类

初始化 TimeoutException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public TimeoutException()
public:
TimeoutException()
new : unit -> TimeoutException

此构造函数使用系统提供的错误信息初始化新实例的 Exception..::.Message 继承属性。此消息将考虑当前系统区域性。 此构造函数使用系统提供的错误信息初始化新实例的 Exception..::.Message 继承属性。此消息将考虑当前系统区域性。

下表显示 TimeoutException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeoutException 类
TimeoutException 成员
TimeoutException 重载
System 命名空间


TimeoutException 构造函数 (String)

TimeoutException 构造函数 (String)
TimeoutException 类

使用指定的错误信息初始化 TimeoutException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public TimeoutException(
    string message
)
public:
TimeoutException(
    String^ message
)
new :
        message:string -> TimeoutException

参数

message
类型： System String
描述错误的消息。

此构造函数使用 message 参数的值初始化新实例的 Exception..::.Message 继承属性。

下表显示 TimeoutException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeoutException 类
TimeoutException 成员
TimeoutException 重载
System 命名空间


TimeoutException 构造函数 (SerializationInfo, StreamingContext)

TimeoutException 构造函数 (SerializationInfo, StreamingContext)
TimeoutException 类

用序列化数据初始化 TimeoutException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected TimeoutException(
    SerializationInfo info,
    StreamingContext context
)
protected:
TimeoutException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> TimeoutException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo 对象，包含有关所引发异常的序列化对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext 对象，它包含有关源或目标的上下文信息。context 参数保留供将来使用，并可指定为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 StreamingContext 对象，它包含有关源或目标的上下文信息。context 参数保留供将来使用，并可指定为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | info 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
SerializationException | 类名为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 HResult 为零 (0)。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 Binary Serialization。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 Binary Serialization。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

TimeoutException 类
TimeoutException 成员
TimeoutException 重载
System 命名空间
SerializationInfo
StreamingContext

其他资源

Binary Serialization


TimeoutException 构造函数 (String, Exception)

TimeoutException 构造函数 (String, Exception)
TimeoutException 类

使用指定的错误消息和内部异常初始化 TimeoutException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public TimeoutException(
    string message,
    Exception innerException
)
public:
TimeoutException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> TimeoutException

参数

message
类型： System String
描述错误的消息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

此构造函数使用 message 参数的值初始化新实例的 Exception..::.Message 继承属性。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 TimeoutException 实例的初始属性值。

属性 | 值
Message | 错误消息字符串。
InnerException | 内部异常引用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeoutException 类
TimeoutException 成员
TimeoutException 重载
System 命名空间


TimeoutException 方法

TimeoutException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeoutException 类

TimeoutException 类型公开以下成员。

名称 说明
页首

参考

TimeoutException 类
System 命名空间


TimeoutException 属性

TimeoutException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeoutException 类

TimeoutException 类型公开以下成员。

名称 说明
页首

参考

TimeoutException 类
System 命名空间


TimeoutException 事件

TimeoutException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeoutException 类

TimeoutException 类型公开以下成员。

名称 说明
页首

参考

TimeoutException 类
System 命名空间


TimeSpan 结构

TimeSpan 结构
成员

表示一个时间间隔。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure TimeSpan _
    Implements IComparable, IComparable(Of TimeSpan),  _
    IEquatable(Of TimeSpan), IFormattable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct TimeSpan : IComparable, IComparable<TimeSpan>,
    IEquatable<TimeSpan>, IFormattable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class TimeSpan : IComparable,
    IComparable<TimeSpan>, IEquatable<TimeSpan>, IFormattable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type TimeSpan =
    struct
        interface IComparable
        interface IComparable<TimeSpan>
        interface IEquatable<TimeSpan>
        interface IFormattable
    end

TimeSpan 对象表示时间间隔（持续时间货运行时间），按正负天数、小时数、分钟数、秒数以及秒的小数部分进行度量。TimeSpan 结构还可用于表示一天中的时间，但仅为当时间与特殊日期不相关时。否则，应使用 DateTime 或 DateTimeOffset 结构来代替。（有关使用 TimeSpan 结构反映时间的更多信息，请参见在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择）。 TimeSpan 对象表示时间间隔（持续时间货运行时间），按正负天数、小时数、分钟数、秒数以及秒的小数部分进行度量。TimeSpan 结构还可用于表示一天中的时间，但仅为当时间与特殊日期不相关时。否则，应使用 DateTime 或 DateTimeOffset 结构来代替。（有关使用 TimeSpan 结构反映时间的更多信息，请参见在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择）。 TimeSpan 对象表示时间间隔（持续时间货运行时间），按正负天数、小时数、分钟数、秒数以及秒的小数部分进行度量。TimeSpan 结构还可用于表示一天中的时间，但仅为当时间与特殊日期不相关时。否则，应使用 DateTime 或 DateTimeOffset 结构来代替。（有关使用 TimeSpan 结构反映时间的更多信息，请参见在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择）。 TimeSpan 对象表示时间间隔（持续时间货运行时间），按正负天数、小时数、分钟数、秒数以及秒的小数部分进行度量。TimeSpan 结构还可用于表示一天中的时间，但仅为当时间与特殊日期不相关时。否则，应使用 DateTime 或 DateTimeOffset 结构来代替。（有关使用 TimeSpan 结构反映时间的更多信息，请参见在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择）。

TimeSpan 结构使用的度量持续时间的最大时间单位是天。更大的时间单位（如月和年）的天数不同，因此为保持一致性，时间间隔以天为单位来度量。 TimeSpan 结构使用的度量持续时间的最大时间单位是天。更大的时间单位（如月和年）的天数不同，因此为保持一致性，时间间隔以天为单位来度量。

TimeSpan 对象的值是等于所表示时间间隔的刻度数。1 个计时周期等于 100 纳秒或者一秒钟的 1/10,000,000。TimeSpan 对象的值的范围可以从 TimeSpan..::.MinValue 到 TimeSpan..::.MaxValue。 TimeSpan 对象的值是等于所表示时间间隔的刻度数。1 个计时周期等于 100 纳秒或者一秒钟的 1/10,000,000。TimeSpan 对象的值的范围可以从 TimeSpan..::.MinValue 到 TimeSpan..::.MaxValue。 TimeSpan 对象的值是等于所表示时间间隔的刻度数。1 个计时周期等于 100 纳秒或者一秒钟的 1/10,000,000。TimeSpan 对象的值的范围可以从 TimeSpan..::.MinValue 到 TimeSpan..::.MaxValue。

实例化 TimeSpan 值

可通过多种方法实例化 TimeSpan 值：

  • 通过调用它的隐式默认构造函数。这将创建一个对象，其值为 TimeSpan..::.Zero，如下例所示。 通过调用它的隐式默认构造函数。这将创建一个对象，其值为 TimeSpan..::.Zero，如下例所示。

    Dim interval As New TimeSpan()
Console.WriteLine(interval.Equals(TimeSpan.Zero))     ' Displays "True".

    TimeSpan interval = new TimeSpan();
Console.WriteLine(interval.Equals(TimeSpan.Zero));    // Displays "True".

  • 通过调用其显式构造函数之一。下面的示例将 TimeSpan 值初始化为指定数量的小时、分钟和秒数。 通过调用其显式构造函数之一。下面的示例将 TimeSpan 值初始化为指定数量的小时、分钟和秒数。

    Dim interval As New TimeSpan(2, 14, 18)
Console.WriteLine(interval.ToString())                ' Displays "02:14:18".

    TimeSpan interval = new TimeSpan(2, 14, 18);
Console.WriteLine(interval.ToString());              // Displays "02:14:18".

  • 通过调用方法或执行返回 TimeSpan 值的操作。例如，可以实例化一个 TimeSpan 的值，该值代表两个日期和时间值之间的间隔，如下面的示例所示。 通过调用方法或执行返回 TimeSpan 值的操作。例如，可以实例化一个 TimeSpan 的值，该值代表两个日期和时间值之间的间隔，如下面的示例所示。

    Dim departure As DateTime = #06/12/2010 6:32PM#
Dim arrival As DateTime = #06/13/2010 10:47PM#
Dim travelTime As TimeSpan = arrival - departure
Console.WriteLine("{0} - {1} = {2}", arrival, departure, travelTime)
' The example displays the following output:
'       6/13/2010 10:47:00 PM - 6/12/2010 6:32:00 PM = 1.04:15:00

    DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0);
DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0);
TimeSpan travelTime = arrival - departure;
Console.WriteLine("{0} - {1} = {2}", arrival, departure, travelTime);
// The example displays the following output:
//       6/13/2010 10:47:00 PM - 6/12/2010 6:32:00 PM = 1.04:15:00

    TimeSpan 值由算术运算符和 DateTime、DateTimeOffset 和 TimeSpan 结构的方法返回。

  • 通过分析 TimeSpan 值的字符串表示形式。可以使用 Parse 和 TryParse 方法，以将包含时间间隔的字符串转换为 TimeSpan 值。下面的示例使用 Parse 方法将字符串数组转换为 TimeSpan 值。 通过分析 TimeSpan 值的字符串表示形式。可以使用 Parse 和 TryParse 方法，以将包含时间间隔的字符串转换为 TimeSpan 值。下面的示例使用 Parse 方法将字符串数组转换为 TimeSpan 值。 通过分析 TimeSpan 值的字符串表示形式。可以使用 Parse 和 TryParse 方法，以将包含时间间隔的字符串转换为 TimeSpan 值。下面的示例使用 Parse 方法将字符串数组转换为 TimeSpan 值。

    Dim values() As String = { "12", "31.", "5.8:32:16", "12:12:15.95", ".12"}
For Each value As String In values
   Try
      Dim ts As TimeSpan = TimeSpan.Parse(value)
      Console.WriteLine("'{0}' --> {1}", value, ts)
   Catch e As FormatException
      Console.WriteLine("Unable to parse '{0}'", value)
   Catch e As OverflowException
      Console.WriteLine("'{0}' is outside the range of a TimeSpan.", value)
   End Try
Next
' The example displays the following output:
'       '12' --> 12.00:00:00
'       Unable to parse '31.'
'       '5.8:32:16' --> 5.08:32:16
'       '12:12:15.95' --> 12:12:15.9500000
'       Unable to parse '.12'

    string[] values = { "12", "31.", "5.8:32:16", "12:12:15.95", ".12"};
foreach (string value in values)
{
   try {
      TimeSpan ts = TimeSpan.Parse(value);
      Console.WriteLine("'{0}' --> {1}", value, ts);
   }
   catch (FormatException) {
      Console.WriteLine("Unable to parse '{0}'", value);
   }
   catch (OverflowException) {
      Console.WriteLine("'{0}' is outside the range of a TimeSpan.", value);
   }
}
// The example displays the following output:
//       '12' --> 12.00:00:00
//       Unable to parse '31.'
//       '5.8:32:16' --> 5.08:32:16
//       '12:12:15.95' --> 12:12:15.9500000
//       Unable to parse '.12'

    此外，您可以定义要通过调用 ParseExact 或 TryParseExact 方法进行解析并转换为 TimeSpan 值的输入字符串的准确格式。

对 TimeSpan 值执行操作

可以通过使用 Addition 和 Subtraction 运算符，或调用 Add 和 Subtract 方法来增加或减少持续时间。您也可以通过调用 Compare、CompareTo 和 Equals 方法来比较两段持续时间。TimeSpan 类还包括 Duration 和 Negate 方法，可将时间间隔转换为正值和负值， 可以通过使用 Addition 和 Subtraction 运算符，或调用 Add 和 Subtract 方法来增加或减少持续时间。您也可以通过调用 Compare、CompareTo 和 Equals 方法来比较两段持续时间。TimeSpan 类还包括 Duration 和 Negate 方法，可将时间间隔转换为正值和负值， 可以通过使用 Addition 和 Subtraction 运算符，或调用 Add 和 Subtract 方法来增加或减少持续时间。您也可以通过调用 Compare、CompareTo 和 Equals 方法来比较两段持续时间。TimeSpan 类还包括 Duration 和 Negate 方法，可将时间间隔转换为正值和负值，

TimeSpan 值的范围是 MinValue 到 MaxValue。

格式化 TimeSpan 值

TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。即，时间间隔包括整的正负天数、天数和剩余的不足一天的时长，或者只包含不足一天的时长。 TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。即，时间间隔包括整的正负天数、天数和剩余的不足一天的时长，或者只包含不足一天的时长。

从 .NET Framework 4 版 开始，TimeSpan 结构通过 ToString 方法的重载支持区分区域性的格式设置，并可以将 TimeSpan 值转换为其字符串表示形式。默认的 TimeSpan..::.ToString()()() 方法通过使用与以前 .NET Framework 版本中返回值相同的固定格式，返回一个时间间隔。TimeSpan..::.ToString(String) 重载允许您指定一个格式字符串，用于定义时间间隔的字符串表示形式。TimeSpan..::.ToString(String, IFormatProvider) 重载可让您指定格式字符串，以及其格式转换可用于创建时间间隔的字符串表示形式的区域性。TimeSpan 支持标准格式字符串和自定义格式字符串。（有关更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。）但是，只有标准格式字符串区分区域性。 从 .NET Framework 4 版 开始，TimeSpan 结构通过 ToString 方法的重载支持区分区域性的格式设置，并可以将 TimeSpan 值转换为其字符串表示形式。默认的 TimeSpan..::.ToString()()() 方法通过使用与以前 .NET Framework 版本中返回值相同的固定格式，返回一个时间间隔。TimeSpan..::.ToString(String) 重载允许您指定一个格式字符串，用于定义时间间隔的字符串表示形式。TimeSpan..::.ToString(String, IFormatProvider) 重载可让您指定格式字符串，以及其格式转换可用于创建时间间隔的字符串表示形式的区域性。TimeSpan 支持标准格式字符串和自定义格式字符串。（有关更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。）但是，只有标准格式字符串区分区域性。 从 .NET Framework 4 版 开始，TimeSpan 结构通过 ToString 方法的重载支持区分区域性的格式设置，并可以将 TimeSpan 值转换为其字符串表示形式。默认的 TimeSpan..::.ToString()()() 方法通过使用与以前 .NET Framework 版本中返回值相同的固定格式，返回一个时间间隔。TimeSpan..::.ToString(String) 重载允许您指定一个格式字符串，用于定义时间间隔的字符串表示形式。TimeSpan..::.ToString(String, IFormatProvider) 重载可让您指定格式字符串，以及其格式转换可用于创建时间间隔的字符串表示形式的区域性。TimeSpan 支持标准格式字符串和自定义格式字符串。（有关更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。）但是，只有标准格式字符串区分区域性。 从 .NET Framework 4 版 开始，TimeSpan 结构通过 ToString 方法的重载支持区分区域性的格式设置，并可以将 TimeSpan 值转换为其字符串表示形式。默认的 TimeSpan..::.ToString()()() 方法通过使用与以前 .NET Framework 版本中返回值相同的固定格式，返回一个时间间隔。TimeSpan..::.ToString(String) 重载允许您指定一个格式字符串，用于定义时间间隔的字符串表示形式。TimeSpan..::.ToString(String, IFormatProvider) 重载可让您指定格式字符串，以及其格式转换可用于创建时间间隔的字符串表示形式的区域性。TimeSpan 支持标准格式字符串和自定义格式字符串。（有关更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。）但是，只有标准格式字符串区分区域性。 从 .NET Framework 4 版 开始，TimeSpan 结构通过 ToString 方法的重载支持区分区域性的格式设置，并可以将 TimeSpan 值转换为其字符串表示形式。默认的 TimeSpan..::.ToString()()() 方法通过使用与以前 .NET Framework 版本中返回值相同的固定格式，返回一个时间间隔。TimeSpan..::.ToString(String) 重载允许您指定一个格式字符串，用于定义时间间隔的字符串表示形式。TimeSpan..::.ToString(String, IFormatProvider) 重载可让您指定格式字符串，以及其格式转换可用于创建时间间隔的字符串表示形式的区域性。TimeSpan 支持标准格式字符串和自定义格式字符串。（有关更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。）但是，只有标准格式字符串区分区域性。

还原旧 TimeSpan 格式

在某些情况下，能够在 .NET Framework 3.5 和更早版本中格式化 TimeSpan 值的代码在 .NET Framework 4 中会失败。 这种情况在调用复合格式设置方法来格式化带有格式字符串的 TimeSpan 值时最常见。下面的示例在 .NET Framework 3.5 和早期版本中成功格式化 TimeSpan 值，但在 .NET Framework 4 和更高版本中引发异常。请注意，它尝试使用一个不支持的格式说明符格式化 TimeSpan 值，在 .NET Framework 3.5 和更早版本中将忽略该说明符。 在某些情况下，能够在 .NET Framework 3.5 和更早版本中格式化 TimeSpan 值的代码在 .NET Framework 4 中会失败。 这种情况在调用复合格式设置方法来格式化带有格式字符串的 TimeSpan 值时最常见。下面的示例在 .NET Framework 3.5 和早期版本中成功格式化 TimeSpan 值，但在 .NET Framework 4 和更高版本中引发异常。请注意，它尝试使用一个不支持的格式说明符格式化 TimeSpan 值，在 .NET Framework 3.5 和更早版本中将忽略该说明符。 在某些情况下，能够在 .NET Framework 3.5 和更早版本中格式化 TimeSpan 值的代码在 .NET Framework 4 中会失败。 这种情况在调用复合格式设置方法来格式化带有格式字符串的 TimeSpan 值时最常见。下面的示例在 .NET Framework 3.5 和早期版本中成功格式化 TimeSpan 值，但在 .NET Framework 4 和更高版本中引发异常。请注意，它尝试使用一个不支持的格式说明符格式化 TimeSpan 值，在 .NET Framework 3.5 和更早版本中将忽略该说明符。

Dim interval As New TimeSpan(12, 30, 45)
Dim output As String
Try
   output = String.Format("{0:r}", interval)
Catch e As FormatException
   output = "Invalid Format"
End Try
Console.WriteLine(output)
' Output from .NET Framework 3.5 and earlier versions:
'       12:30:45
' Output from .NET Framework 4:
'       Invalid Format

TimeSpan interval = new TimeSpan(12, 30, 45);
string output;
try {
   output = String.Format("{0:r}", interval);
}
catch (FormatException) {
   output = "Invalid Format";
}
Console.WriteLine(output);
// Output from .NET Framework 3.5 and earlier versions:
//       12:30:45
// Output from .NET Framework 4:
//       Invalid Format

如果您不能修改代码，您可以通过以下方式之一恢复 TimeSpan 值的旧格式：

  • 通过创建一个包含 <TimeSpan_LegacyFormatMode> 元素的配置文件。将此元素的 enabled 特性设置为 true 可按应用程序恢复旧 TimeSpan 格式。 通过创建一个包含 <TimeSpan_LegacyFormatMode> 元素的配置文件。将此元素的 enabled 特性设置为 true 可按应用程序恢复旧 TimeSpan 格式。

  • 通过在创建应用程序域时设置“NetFx40_TimeSpanLegacyFormatMode”兼容性开关。这将启用旧 TimeSpan 基于每个应用程序域的格式。下面的示例创建一个使用旧 TimeSpan 格式的应用程序域。 通过在创建应用程序域时设置“NetFx40_TimeSpanLegacyFormatMode”兼容性开关。这将启用旧 TimeSpan 基于每个应用程序域的格式。下面的示例创建一个使用旧 TimeSpan 格式的应用程序域。 通过在创建应用程序域时设置“NetFx40_TimeSpanLegacyFormatMode”兼容性开关。这将启用旧 TimeSpan 基于每个应用程序域的格式。下面的示例创建一个使用旧 TimeSpan 格式的应用程序域。

    Module Example
   Public Sub Main()
      Dim appSetup As New AppDomainSetup()
      appSetup.SetCompatibilitySwitches( { "NetFx40_TimeSpanLegacyFormatMode" } )
      Dim legacyDomain As AppDomain = AppDomain.CreateDomain("legacyDomain",
                                                             Nothing, appSetup)
      legacyDomain.ExecuteAssembly("ShowTimeSpan.exe")
   End Sub
End Module

    using System;

public class Example
{
   public static void Main()
   {
      AppDomainSetup appSetup = new AppDomainSetup();
      appSetup.SetCompatibilitySwitches( new string[] { "NetFx40_TimeSpanLegacyFormatMode" } );
      AppDomain legacyDomain = AppDomain.CreateDomain("legacyDomain",
                                                      null, appSetup);
      legacyDomain.ExecuteAssembly("ShowTimeSpan.exe");
   }
}

    当下面的代码在新应用程序域中执行时，它将恢复为旧的 TimeSpan 格式设置行为。

    Module Example
   Public Sub Main()
      Dim interval As TimeSpan = Date.Now - Date.Now.Date
      Dim msg As String = String.Format("Elapsed Time Today: {0:d} hours.",
                                         interval)
      Console.WriteLine(msg)
   End Sub
End Module
' The example displays output like the following:
'       Elapsed Time Today: 01:40:52.2524662 hours.

    using System;

public class Example
{
   public static void Main()
   {
      TimeSpan interval = DateTime.Now - DateTime.Now.Date;
      string msg = String.Format("Elapsed Time Today: {0:d} hours.",
                                 interval);
      Console.WriteLine(msg);
   }
}
// The example displays the following output:
//       Elapsed Time Today: 01:40:52.2524662 hours.

下面的示例实例化表示两个日期间差异的 TimeSpan 对象。然后显示 TimeSpan 对象的属性。 下面的示例实例化表示两个日期间差异的 TimeSpan 对象。然后显示 TimeSpan 对象的属性。

' Define two dates.
Dim date1 As Date = #1/1/2010 8:00:15AM#
Dim date2 As Date = #8/18/2010 1:30:30PM#
' Calculate the interval between the two dates.
Dim interval As TimeSpan = date2 - date1
Console.WriteLine("{0} - {1} = {2}", date2, date1, interval.ToString())
' Display individual properties of the resulting TimeSpan object.
Console.WriteLine("   {0,-35} {1,20}", "Value of Days Component:", interval.Days)
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Days:", interval.TotalDays)
Console.WriteLine("   {0,-35} {1,20}", "Value of Hours Component:", interval.Hours)
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Hours:", interval.TotalHours)
Console.WriteLine("   {0,-35} {1,20}", "Value of Minutes Component:", interval.Minutes)
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Minutes:", interval.TotalMinutes)
Console.WriteLine("   {0,-35} {1,20:N0}", "Value of Seconds Component:", interval.Seconds)
Console.WriteLine("   {0,-35} {1,20:N0}", "Total Number of Seconds:", interval.TotalSeconds)
Console.WriteLine("   {0,-35} {1,20:N0}", "Value of Milliseconds Component:", interval.Milliseconds)
Console.WriteLine("   {0,-35} {1,20:N0}", "Total Number of Milliseconds:", interval.TotalMilliseconds)
Console.WriteLine("   {0,-35} {1,20:N0}", "Ticks:", interval.Ticks)
' The example displays the following output:
'       8/18/2010 1:30:30 PM - 1/1/2010 8:00:15 AM = 229.05:30:15
'          Value of Days Component:                             229
'          Total Number of Days:                   229.229340277778
'          Value of Hours Component:                              5
'          Total Number of Hours:                  5501.50416666667
'          Value of Minutes Component:                           30
'          Total Number of Minutes:                       330090.25
'          Value of Seconds Component:                           15
'          Total Number of Seconds:                      19,805,415
'          Value of Milliseconds Component:                       0
'          Total Number of Milliseconds:             19,805,415,000
'          Ticks:                               198,054,150,000,000

// Define two dates.
DateTime date1 = new DateTime(2010, 1, 1, 8, 0, 15);
DateTime date2 = new DateTime(2010, 8, 18, 13, 30, 30);
// Calculate the interval between the two dates.
TimeSpan interval = date2 - date1;
Console.WriteLine("{0} - {1} = {2}", date2, date1, interval.ToString());
// Display individual properties of the resulting TimeSpan object.
Console.WriteLine("   {0,-35} {1,20}", "Value of Days Component:", interval.Days);
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Days:", interval.TotalDays);
Console.WriteLine("   {0,-35} {1,20}", "Value of Hours Component:", interval.Hours);
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Hours:", interval.TotalHours);
Console.WriteLine("   {0,-35} {1,20}", "Value of Minutes Component:", interval.Minutes);
Console.WriteLine("   {0,-35} {1,20}", "Total Number of Minutes:", interval.TotalMinutes);
Console.WriteLine("   {0,-35} {1,20:N0}", "Value of Seconds Component:", interval.Seconds);
Console.WriteLine("   {0,-35} {1,20:N0}", "Total Number of Seconds:", interval.TotalSeconds);
Console.WriteLine("   {0,-35} {1,20:N0}", "Value of Milliseconds Component:", interval.Milliseconds);
Console.WriteLine("   {0,-35} {1,20:N0}", "Total Number of Milliseconds:", interval.TotalMilliseconds);
Console.WriteLine("   {0,-35} {1,20:N0}", "Ticks:", interval.Ticks);
// the example displays the following output:
//       8/18/2010 1:30:30 PM - 1/1/2010 8:00:15 AM = 229.05:30:15
//          Value of Days Component:                             229
//          Total Number of Days:                   229.229340277778
//          Value of Hours Component:                              5
//          Total Number of Hours:                  5501.50416666667
//          Value of Minutes Component:                           30
//          Total Number of Minutes:                       330090.25
//          Value of Seconds Component:                           15
//          Total Number of Seconds:                      19,805,415
//          Value of Milliseconds Component:                       0
//          Total Number of Milliseconds:             19,805,415,000
//          Ticks:                               198,054,150,000,000
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 成员
System 命名空间
DateTime
DateTimeOffset
Calendar


TimeSpan 成员

TimeSpan 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

表示一个时间间隔。

TimeSpan 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TimeSpan 结构
System 命名空间


TimeSpan 构造函数

TimeSpan 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

初始化新的 TimeSpan。

名称 说明
页首

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan 构造函数 (Int64)

TimeSpan 构造函数 (Int64)
TimeSpan 结构

将新的 TimeSpan 初始化为指定的刻度数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    ticks As Long _
)
public TimeSpan(
    long ticks
)
public:
TimeSpan(
    long long ticks
)
new :
        ticks:int64 -> TimeSpan

参数

ticks
类型： System Int64
以 100 毫微秒为单位表示的时间段。

下面的示例使用构造函数重载创建几个 TimeSpan 对象，该重载将一个 TimeSpan 初始化为指定的时间刻度数。

' Example of the TimeSpan( Long ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanCtorLDemo

    ' Create a TimeSpan object and display its value.
    Sub CreateTimeSpan( ticks As Long )

        Dim elapsedTime As New TimeSpan( ticks )

        ' Format the constructor for display.
        Dim ctor AS String = _
            String.Format( "TimeSpan( {0} )", ticks )

        ' Pad the end of a TimeSpan string with spaces if
        ' it does not contain milliseconds.
        Dim elapsedStr As String = elapsedTime.ToString( )
        Dim pointIndex  As Integer = elapsedStr.IndexOf( ":"c )

        pointIndex = elapsedStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then elapsedStr &= "        "

        ' Display the constructor and its value.
        Console.WriteLine( "{0,-33}{1,24}", ctor, elapsedStr )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the TimeSpan( Long ) constructor " & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-33}{1,16}", "Constructor", "Value" )
        Console.WriteLine( "{0,-33}{1,16}", "-----------", "-----" )

        CreateTimeSpan( 1 )
        CreateTimeSpan( 999999 )
        CreateTimeSpan( -1000000000000 )
        CreateTimeSpan( 18012202000000 )
        CreateTimeSpan( 999999999999999999 )
        CreateTimeSpan( 1000000000000000000 )

    End Sub
End Module

' This example of the TimeSpan( Long ) constructor
' generates the following output.
'
' Constructor                                 Value
' -----------                                 -----
' TimeSpan( 1 )                            00:00:00.0000001
' TimeSpan( 999999 )                       00:00:00.0999999
' TimeSpan( -1000000000000 )            -1.03:46:40
' TimeSpan( 18012202000000 )            20.20:20:20.2000000
' TimeSpan( 999999999999999999 )   1157407.09:46:39.9999999
' TimeSpan( 1000000000000000000 )  1157407.09:46:40

// Example of the TimeSpan( long ) constructor.
using System;

class TimeSpanCtorLDemo
{
    // Create a TimeSpan object and display its value.
    static void CreateTimeSpan( long ticks )
    {
        TimeSpan elapsedTime = new TimeSpan( ticks );

        // Format the constructor for display.
        string ctor = String.Format( "TimeSpan( {0} )", ticks );

        // Pad the end of a TimeSpan string with spaces if
        // it does not contain milliseconds.
        string  elapsedStr = elapsedTime.ToString( );
        int     pointIndex = elapsedStr.IndexOf( ':' );

        pointIndex = elapsedStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) elapsedStr += "        ";

        // Display the constructor and its value.
        Console.WriteLine( "{0,-33}{1,24}", ctor, elapsedStr );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan( long ) constructor " +
            "\ngenerates the following output.\n" );
        Console.WriteLine( "{0,-33}{1,16}", "Constructor", "Value" );
        Console.WriteLine( "{0,-33}{1,16}", "-----------", "-----" );

        CreateTimeSpan( 1 );
        CreateTimeSpan( 999999 );
        CreateTimeSpan( -1000000000000 );
        CreateTimeSpan( 18012202000000 );
        CreateTimeSpan( 999999999999999999 );
        CreateTimeSpan( 1000000000000000000 );
    }
}

/*
This example of the TimeSpan( long ) constructor
generates the following output.

Constructor                                 Value
-----------                                 -----
TimeSpan( 1 )                            00:00:00.0000001
TimeSpan( 999999 )                       00:00:00.0999999
TimeSpan( -1000000000000 )            -1.03:46:40
TimeSpan( 18012202000000 )            20.20:20:20.2000000
TimeSpan( 999999999999999999 )   1157407.09:46:39.9999999
TimeSpan( 1000000000000000000 )  1157407.09:46:40
*/

// Example of the TimeSpan( __int64 ) constructor.
using namespace System;

// Create a TimeSpan object and display its value.
void CreateTimeSpan( __int64 ticks )
{
   TimeSpan elapsedTime = TimeSpan(ticks);

   // Format the constructor for display.
   String^ ctor = String::Format( "TimeSpan( {0} )", ticks );

   // Pad the end of a TimeSpan string with spaces if
   // it does not contain milliseconds.
   String^ elapsedStr = elapsedTime.ToString();
   int pointIndex = elapsedStr->IndexOf( ':' );
   pointIndex = elapsedStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      elapsedStr = String::Concat( elapsedStr, "        " );

   // Display the constructor and its value.
   Console::WriteLine( "{0,-33}{1,24}", ctor, elapsedStr );
}

int main()
{
   Console::WriteLine( "This example of the TimeSpan( __int64 ) constructor "
   "\ngenerates the following output.\n" );
   Console::WriteLine( "{0,-33}{1,16}", "Constructor", "Value" );
   Console::WriteLine( "{0,-33}{1,16}", "-----------", "-----" );
   CreateTimeSpan( 1 );
   CreateTimeSpan( 999999 );
   CreateTimeSpan(  -1000000000000 );
   CreateTimeSpan( 18012202000000 );
   CreateTimeSpan( 999999999999999999 );
   CreateTimeSpan( 1000000000000000000 );
}

/*
This example of the TimeSpan( __int64 ) constructor
generates the following output.

Constructor                                 Value
-----------                                 -----
TimeSpan( 1 )                            00:00:00.0000001
TimeSpan( 999999 )                       00:00:00.0999999
TimeSpan( -1000000000000 )            -1.03:46:40
TimeSpan( 18012202000000 )            20.20:20:20.2000000
TimeSpan( 999999999999999999 )   1157407.09:46:39.9999999
TimeSpan( 1000000000000000000 )  1157407.09:46:40
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
TimeSpan 重载
System 命名空间
Int64


TimeSpan 构造函数 (Int32, Int32, Int32)

TimeSpan 构造函数 (Int32, Int32, Int32)
TimeSpan 结构

将新的 TimeSpan 初始化为指定的小时数、分钟数和秒数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    hours As Integer, _
    minutes As Integer, _
    seconds As Integer _
)
public TimeSpan(
    int hours,
    int minutes,
    int seconds
)
public:
TimeSpan(
    int hours,
    int minutes,
    int seconds
)
new :
        hours:int *
        minutes:int *
        seconds:int -> TimeSpan

参数

hours
类型： System Int32
小时数。
minutes
类型： System Int32
分钟数。
seconds
类型： System Int32
秒数。
异常 | 条件
ArgumentOutOfRangeException | 该参数指定一个小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue 的 TimeSpan 值。

指定的 hours、minutes 和 seconds 被转换为刻度，并且该值初始化此实例。

下面的示例使用构造函数重载创建几个 TimeSpan 对象，该重载将一个 TimeSpan 初始化为指定的小时数、分钟数和秒数。

' Example of the TimeSpan( Integer, Integer, Integer ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanCtorIIIDemo

    ' Create a TimeSpan object and display its value.
    Sub CreateTimeSpan( hours As Integer, minutes As Integer, _
        seconds As Integer )

        Dim elapsedTime As New TimeSpan( hours, minutes, seconds )

        ' Format the constructor for display.
        Dim ctor AS String = _
            String.Format( "TimeSpan( {0}, {1}, {2} )", _
                hours, minutes, seconds )

        ' Display the constructor and its value.
        Console.WriteLine( "{0,-37}{1,16}", _
            ctor, elapsedTime.ToString( ) )
    End Sub

    Sub Main()

        Console.WriteLine( _
            "This example of the " & _
            "TimeSpan( Integer, Integer, Integer ) " & vbCrLf & _
            "constructor generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-37}{1,16}", "Constructor", "Value" )
        Console.WriteLine( "{0,-37}{1,16}", "-----------", "-----" )

        CreateTimeSpan( 10, 20, 30 )
        CreateTimeSpan( -10, 20, 30 )
        CreateTimeSpan( 0, 0, 37230 )
        CreateTimeSpan( 1000, 2000, 3000 )
        CreateTimeSpan( 1000, -2000, -3000 )
        CreateTimeSpan( 999999, 999999, 999999 )
    End Sub
End Module

' This example of the TimeSpan( Integer, Integer, Integer )
' constructor generates the following output.
'
' Constructor                                     Value
' -----------                                     -----
' TimeSpan( 10, 20, 30 )                       10:20:30
' TimeSpan( -10, 20, 30 )                     -09:39:30
' TimeSpan( 0, 0, 37230 )                      10:20:30
' TimeSpan( 1000, 2000, 3000 )              43.02:10:00
' TimeSpan( 1000, -2000, -3000 )            40.05:50:00
' TimeSpan( 999999, 999999, 999999 )     42372.15:25:39

// Example of the TimeSpan( int, int, int ) constructor.
using System;

class TimeSpanCtorIIIDemo
{
    // Create a TimeSpan object and display its value.
    static void CreateTimeSpan( int hours, int minutes,
        int seconds )
    {
        TimeSpan elapsedTime =
            new TimeSpan( hours, minutes, seconds );

        // Format the constructor for display.
        string ctor = String.Format( "TimeSpan( {0}, {1}, {2} )",
            hours, minutes, seconds);

        // Display the constructor and its value.
        Console.WriteLine( "{0,-37}{1,16}",
            ctor, elapsedTime.ToString( ) );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan( int, int, int ) " +
            "\nconstructor generates the following output.\n" );
        Console.WriteLine( "{0,-37}{1,16}", "Constructor", "Value" );
        Console.WriteLine( "{0,-37}{1,16}", "-----------", "-----" );

        CreateTimeSpan( 10, 20, 30 );
        CreateTimeSpan( -10, 20, 30 );
        CreateTimeSpan( 0, 0, 37230 );
        CreateTimeSpan( 1000, 2000, 3000 );
        CreateTimeSpan( 1000, -2000, -3000 );
        CreateTimeSpan( 999999, 999999, 999999 );
    }
}

/*
This example of the TimeSpan( int, int, int )
constructor generates the following output.

Constructor                                     Value
-----------                                     -----
TimeSpan( 10, 20, 30 )                       10:20:30
TimeSpan( -10, 20, 30 )                     -09:39:30
TimeSpan( 0, 0, 37230 )                      10:20:30
TimeSpan( 1000, 2000, 3000 )              43.02:10:00
TimeSpan( 1000, -2000, -3000 )            40.05:50:00
TimeSpan( 999999, 999999, 999999 )     42372.15:25:39
*/

// Example of the TimeSpan( int, int, int ) constructor.
using namespace System;

// Create a TimeSpan object and display its value.
static void CreateTimeSpan( int hours, int minutes, int seconds )
{
   TimeSpan elapsedTime = TimeSpan(hours,minutes,seconds);

   // Format the constructor for display.
   String^ ctor = String::Format( "TimeSpan( {0}, {1}, {2} )", hours, minutes, seconds );

   // Display the constructor and its value.
   Console::WriteLine( "{0,-37}{1,16}", ctor, elapsedTime.ToString() );
}

int main()
{
   Console::WriteLine( "This example of the TimeSpan( int, int, int ) "
   "\nconstructor generates the following output.\n" );
   Console::WriteLine( "{0,-37}{1,16}", "Constructor", "Value" );
   Console::WriteLine( "{0,-37}{1,16}", "-----------", "-----" );
   CreateTimeSpan( 10, 20, 30 );
   CreateTimeSpan(  -10, 20, 30 );
   CreateTimeSpan( 0, 0, 37230 );
   CreateTimeSpan( 1000, 2000, 3000 );
   CreateTimeSpan( 1000, -2000, -3000 );
   CreateTimeSpan( 999999, 999999, 999999 );
}

/*
This example of the TimeSpan( int, int, int )
constructor generates the following output.

Constructor                                     Value
-----------                                     -----
TimeSpan( 10, 20, 30 )                       10:20:30
TimeSpan( -10, 20, 30 )                     -09:39:30
TimeSpan( 0, 0, 37230 )                      10:20:30
TimeSpan( 1000, 2000, 3000 )              43.02:10:00
TimeSpan( 1000, -2000, -3000 )            40.05:50:00
TimeSpan( 999999, 999999, 999999 )     42372.15:25:39
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
TimeSpan 重载
System 命名空间
Int64


TimeSpan 构造函数 (Int32, Int32, Int32, Int32)

TimeSpan 构造函数 (Int32, Int32, Int32, Int32)
TimeSpan 结构

将新的 TimeSpan 初始化为指定的天数、小时数、分钟数和秒数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    days As Integer, _
    hours As Integer, _
    minutes As Integer, _
    seconds As Integer _
)
public TimeSpan(
    int days,
    int hours,
    int minutes,
    int seconds
)
public:
TimeSpan(
    int days,
    int hours,
    int minutes,
    int seconds
)
new :
        days:int *
        hours:int *
        minutes:int *
        seconds:int -> TimeSpan

参数

days
类型： System Int32
天数。
hours
类型： System Int32
小时数。
minutes
类型： System Int32
分钟数。
seconds
类型： System Int32
秒数。
异常 | 条件
ArgumentOutOfRangeException | 该参数指定一个小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue 的 TimeSpan 值。

指定的 days、hours、minutes 和 seconds 被转换为刻度，并且该值初始化此实例。

下面的代码示例使用构造函数重载创建几个 TimeSpan 对象，该重载将一个 TimeSpan 初始化为指定的天数、小时数、分钟数和秒数。

' Example of the
' TimeSpan( Integer, Integer, Integer, Integer ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanCtorIIIIDemo

    ' Create a TimeSpan object and display its value.
    Sub CreateTimeSpan( days As Integer, hours As Integer, _
        minutes As Integer, seconds As Integer )

        Dim elapsedTime As New TimeSpan( _
            days, hours, minutes, seconds )

        ' Format the constructor for display.
        Dim ctor AS String = _
            String.Format( "TimeSpan( {0}, {1}, {2}, {3} )", _
                days, hours, minutes, seconds )

        ' Display the constructor and its value.
        Console.WriteLine( "{0,-44}{1,16}", _
            ctor, elapsedTime.ToString( ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the " & vbCrLf & "TimeSpan( " & _
            "Integer, Integer, Integer, Integer ) " & vbCrLf & _
            "constructor generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-44}{1,16}", "Constructor", "Value" )
        Console.WriteLine( "{0,-44}{1,16}", "-----------", "-----" )

        CreateTimeSpan( 10, 20, 30, 40 )
        CreateTimeSpan( -10, 20, 30, 40 )
        CreateTimeSpan( 0, 0, 0, 937840 )
        CreateTimeSpan( 1000, 2000, 3000, 4000 )
        CreateTimeSpan( 1000, -2000, -3000, -4000 )
        CreateTimeSpan( 999999, 999999, 999999, 999999 )
    End Sub
End Module

' This example of the
' TimeSpan( Integer, Integer, Integer, Integer )
' constructor generates the following output.
'
' Constructor                                            Value
' -----------                                            -----
' TimeSpan( 10, 20, 30, 40 )                       10.20:30:40
' TimeSpan( -10, 20, 30, 40 )                      -9.03:29:20
' TimeSpan( 0, 0, 0, 937840 )                      10.20:30:40
' TimeSpan( 1000, 2000, 3000, 4000 )             1085.11:06:40
' TimeSpan( 1000, -2000, -3000, -4000 )           914.12:53:20
' TimeSpan( 999999, 999999, 999999, 999999 )   992661.08:57:23

// Example of the TimeSpan( int, int, int, int ) constructor.
using System;

class TimeSpanCtorIIIIDemo
{
    // Create a TimeSpan object and display its value.
    static void CreateTimeSpan( int days, int hours,
        int minutes, int seconds )
    {
        TimeSpan elapsedTime =
            new TimeSpan( days, hours, minutes, seconds );

        // Format the constructor for display.
        string ctor =
            String.Format( "TimeSpan( {0}, {1}, {2}, {3} )",
                days, hours, minutes, seconds);

        // Display the constructor and its value.
        Console.WriteLine( "{0,-44}{1,16}",
            ctor, elapsedTime.ToString( ) );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan( int, int, int, int ) " +
            "\nconstructor generates the following output.\n" );
        Console.WriteLine( "{0,-44}{1,16}", "Constructor", "Value" );
        Console.WriteLine( "{0,-44}{1,16}", "-----------", "-----" );

        CreateTimeSpan( 10, 20, 30, 40 );
        CreateTimeSpan( -10, 20, 30, 40 );
        CreateTimeSpan( 0, 0, 0, 937840 );
        CreateTimeSpan( 1000, 2000, 3000, 4000 );
        CreateTimeSpan( 1000, -2000, -3000, -4000 );
        CreateTimeSpan( 999999, 999999, 999999, 999999 );
    }
}

/*
This example of the TimeSpan( int, int, int, int )
constructor generates the following output.

Constructor                                            Value
-----------                                            -----
TimeSpan( 10, 20, 30, 40 )                       10.20:30:40
TimeSpan( -10, 20, 30, 40 )                      -9.03:29:20
TimeSpan( 0, 0, 0, 937840 )                      10.20:30:40
TimeSpan( 1000, 2000, 3000, 4000 )             1085.11:06:40
TimeSpan( 1000, -2000, -3000, -4000 )           914.12:53:20
TimeSpan( 999999, 999999, 999999, 999999 )   992661.08:57:23
*/

// Example of the TimeSpan( int, int, int, int ) constructor.
using namespace System;

// Create a TimeSpan object and display its value.
void CreateTimeSpan( int days, int hours, int minutes, int seconds )
{
   TimeSpan elapsedTime = TimeSpan(days,hours,minutes,seconds);

   // Format the constructor for display.
   array<Object^>^boxedParams = gcnew array<Object^>(4);
   boxedParams[ 0 ] = days;
   boxedParams[ 1 ] = hours;
   boxedParams[ 2 ] = minutes;
   boxedParams[ 3 ] = seconds;
   String^ ctor = String::Format( "TimeSpan( {0}, {1}, {2}, {3} )", boxedParams );

   // Display the constructor and its value.
   Console::WriteLine( "{0,-44}{1,16}", ctor, elapsedTime.ToString() );
}

int main()
{
   Console::WriteLine( "This example of the TimeSpan( int, int, int, int ) "
   "\nconstructor generates the following output.\n" );
   Console::WriteLine( "{0,-44}{1,16}", "Constructor", "Value" );
   Console::WriteLine( "{0,-44}{1,16}", "-----------", "-----" );
   CreateTimeSpan( 10, 20, 30, 40 );
   CreateTimeSpan(  -10, 20, 30, 40 );
   CreateTimeSpan( 0, 0, 0, 937840 );
   CreateTimeSpan( 1000, 2000, 3000, 4000 );
   CreateTimeSpan( 1000, -2000, -3000, -4000 );
   CreateTimeSpan( 999999, 999999, 999999, 999999 );
}

/*
This example of the TimeSpan( int, int, int, int )
constructor generates the following output.

Constructor                                            Value
-----------                                            -----
TimeSpan( 10, 20, 30, 40 )                       10.20:30:40
TimeSpan( -10, 20, 30, 40 )                      -9.03:29:20
TimeSpan( 0, 0, 0, 937840 )                      10.20:30:40
TimeSpan( 1000, 2000, 3000, 4000 )             1085.11:06:40
TimeSpan( 1000, -2000, -3000, -4000 )           914.12:53:20
TimeSpan( 999999, 999999, 999999, 999999 )   992661.08:57:23
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
TimeSpan 重载
System 命名空间
Int64


TimeSpan 构造函数 (Int32, Int32, Int32, Int32, Int32)

TimeSpan 构造函数 (Int32, Int32, Int32, Int32, Int32)
TimeSpan 结构

将新的 TimeSpan 初始化为指定的天数、小时数、分钟数、秒数和毫秒数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    days As Integer, _
    hours As Integer, _
    minutes As Integer, _
    seconds As Integer, _
    milliseconds As Integer _
)
public TimeSpan(
    int days,
    int hours,
    int minutes,
    int seconds,
    int milliseconds
)
public:
TimeSpan(
    int days,
    int hours,
    int minutes,
    int seconds,
    int milliseconds
)
new :
        days:int *
        hours:int *
        minutes:int *
        seconds:int *
        milliseconds:int -> TimeSpan

参数

days
类型： System Int32
天数。
hours
类型： System Int32
小时数。
minutes
类型： System Int32
分钟数。
seconds
类型： System Int32
秒数。
milliseconds
类型： System Int32
毫秒数。
异常 | 条件
ArgumentOutOfRangeException | 该参数指定一个小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue 的 TimeSpan 值。

指定的 days、hours、minutes、seconds 和 milliseconds 被转换为刻度，并且该值初始化此实例。

下面的示例使用构造函数重载创建几个 TimeSpan 对象，该重载将一个 TimeSpan 初始化为指定的天数、小时数、分钟数、秒数和毫秒数。

' Example of the
' TimeSpan( Integer, Integer, Integer, Integer, Integer ) constructor.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanCtorIIIIIDemo

    ' Create a TimeSpan object and display its value.
    Sub CreateTimeSpan( days As Integer, hours As Integer, _
        minutes As Integer, seconds As Integer, millisec As Integer )

        Dim elapsedTime As New TimeSpan( _
            days, hours, minutes, seconds, millisec )

        ' Format the constructor for display.
        Dim ctor As String = _
            String.Format( "TimeSpan( {0}, {1}, {2}, {3}, {4} )", _
                days, hours, minutes, seconds, millisec )

        ' Display the constructor and its value.
        Console.WriteLine( "{0,-48}{1,24}", _
            ctor, elapsedTime.ToString( ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of the " & vbCrLf & _
            "TimeSpan( Integer, Integer, " & _
            "Integer, Integer, Integer ) " & vbCrLf & _
            "constructor generates the following output." & vbCrLf )
        Console.WriteLine( "{0,-48}{1,16}", "Constructor", "Value" )
        Console.WriteLine( "{0,-48}{1,16}", "-----------", "-----" )

        CreateTimeSpan( 10, 20, 30, 40, 50 )
        CreateTimeSpan( -10, 20, 30, 40, 50 )
        CreateTimeSpan( 0, 0, 0, 0, 937840050 )
        CreateTimeSpan( 1111, 2222, 3333, 4444, 5555 )
        CreateTimeSpan( 1111, -2222, -3333, -4444, -5555 )
        CreateTimeSpan( 99999, 99999, 99999, 99999, 99999 )
    End Sub
End Module

' This example of the
' TimeSpan( Integer, Integer, Integer, Integer, Integer )
' constructor generates the following output.
'
' Constructor                                                Value
' -----------                                                -----
' TimeSpan( 10, 20, 30, 40, 50 )                       10.20:30:40.0500000
' TimeSpan( -10, 20, 30, 40, 50 )                      -9.03:29:19.9500000
' TimeSpan( 0, 0, 0, 0, 937840050 )                    10.20:30:40.0500000
' TimeSpan( 1111, 2222, 3333, 4444, 5555 )           1205.22:47:09.5550000
' TimeSpan( 1111, -2222, -3333, -4444, -5555 )       1016.01:12:50.4450000
' TimeSpan( 99999, 99999, 99999, 99999, 99999 )    104236.05:27:18.9990000

// Example of the TimeSpan( int, int, int, int, int ) constructor.
using System;

class TimeSpanCtorIIIIIDemo
{
    // Create a TimeSpan object and display its value.
    static void CreateTimeSpan( int days, int hours,
        int minutes, int seconds, int millisec )
    {
        TimeSpan elapsedTime = new TimeSpan(
            days, hours, minutes, seconds, millisec );

        // Format the constructor for display.
        string ctor =
            String.Format( "TimeSpan( {0}, {1}, {2}, {3}, {4} )",
                days, hours, minutes, seconds, millisec);

        // Display the constructor and its value.
        Console.WriteLine( "{0,-48}{1,24}",
            ctor, elapsedTime.ToString( ) );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the " +
            "TimeSpan( int, int, int, int, int ) " +
            "\nconstructor generates the following output.\n" );
        Console.WriteLine( "{0,-48}{1,16}", "Constructor", "Value" );
        Console.WriteLine( "{0,-48}{1,16}", "-----------", "-----" );

        CreateTimeSpan( 10, 20, 30, 40, 50 );
        CreateTimeSpan( -10, 20, 30, 40, 50 );
        CreateTimeSpan( 0, 0, 0, 0, 937840050 );
        CreateTimeSpan( 1111, 2222, 3333, 4444, 5555 );
        CreateTimeSpan( 1111, -2222, -3333, -4444, -5555 );
        CreateTimeSpan( 99999, 99999, 99999, 99999, 99999 );
    }
}

/*
This example of the TimeSpan( int, int, int, int, int )
constructor generates the following output.

Constructor                                                Value
-----------                                                -----
TimeSpan( 10, 20, 30, 40, 50 )                       10.20:30:40.0500000
TimeSpan( -10, 20, 30, 40, 50 )                      -9.03:29:19.9500000
TimeSpan( 0, 0, 0, 0, 937840050 )                    10.20:30:40.0500000
TimeSpan( 1111, 2222, 3333, 4444, 5555 )           1205.22:47:09.5550000
TimeSpan( 1111, -2222, -3333, -4444, -5555 )       1016.01:12:50.4450000
TimeSpan( 99999, 99999, 99999, 99999, 99999 )    104236.05:27:18.9990000
*/

// Example of the TimeSpan( int, int, int, int, int ) constructor.
using namespace System;

// Create a TimeSpan object and display its value.
void CreateTimeSpan( int days, int hours, int minutes, int seconds, int millisec )
{
   TimeSpan elapsedTime = TimeSpan(days,hours,minutes,seconds,millisec);

   // Format the constructor for display.
   array<Object^>^boxedParams = gcnew array<Object^>(5);
   boxedParams[ 0 ] = days;
   boxedParams[ 1 ] = hours;
   boxedParams[ 2 ] = minutes;
   boxedParams[ 3 ] = seconds;
   boxedParams[ 4 ] = millisec;
   String^ ctor = String::Format( "TimeSpan( {0}, {1}, {2}, {3}, {4} )", boxedParams );

   // Display the constructor and its value.
   Console::WriteLine( "{0,-48}{1,24}", ctor, elapsedTime.ToString() );
}

int main()
{
   Console::WriteLine( "This example of the TimeSpan( int, int, int, int, int ) "
   "\nconstructor generates the following output.\n" );
   Console::WriteLine( "{0,-48}{1,16}", "Constructor", "Value" );
   Console::WriteLine( "{0,-48}{1,16}", "-----------", "-----" );
   CreateTimeSpan( 10, 20, 30, 40, 50 );
   CreateTimeSpan(  -10, 20, 30, 40, 50 );
   CreateTimeSpan( 0, 0, 0, 0, 937840050 );
   CreateTimeSpan( 1111, 2222, 3333, 4444, 5555 );
   CreateTimeSpan( 1111, -2222, -3333, -4444, -5555 );
   CreateTimeSpan( 99999, 99999, 99999, 99999, 99999 );
}

/*
This example of the TimeSpan( int, int, int, int, int )
constructor generates the following output.

Constructor                                                Value
-----------                                                -----
TimeSpan( 10, 20, 30, 40, 50 )                       10.20:30:40.0500000
TimeSpan( -10, 20, 30, 40, 50 )                      -9.03:29:19.9500000
TimeSpan( 0, 0, 0, 0, 937840050 )                    10.20:30:40.0500000
TimeSpan( 1111, 2222, 3333, 4444, 5555 )           1205.22:47:09.5550000
TimeSpan( 1111, -2222, -3333, -4444, -5555 )       1016.01:12:50.4450000
TimeSpan( 99999, 99999, 99999, 99999, 99999 )    104236.05:27:18.9990000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
TimeSpan 重载
System 命名空间
Int64


TimeSpan 字段

TimeSpan 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

TimeSpan 类型公开以下成员。

名称 说明
页首

参考

TimeSpan 结构
System 命名空间


TimeSpan ..::.MaxValue 字段

TimeSpan
.
.
::
.
MaxValue 字段
TimeSpan 结构

表示最大的 TimeSpan 值。此字段为只读。 表示最大的 TimeSpan 值。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly MaxValue As TimeSpan
public static readonly TimeSpan MaxValue
public:
static initonly TimeSpan MaxValue
static val MaxValue: TimeSpan

此字段的值等效于 Int64..::.MaxValue 刻度数。此值的字符串表示形式为 +10675199.02:48:05.4775807。 此字段的值等效于 Int64..::.MaxValue 刻度数。此值的字符串表示形式为 +10675199.02:48:05.4775807。

下面的示例引用并显示 MaxValue 字段的值。

' Example of the TimeSpan fields.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanFieldsDemo

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    Sub Main( )

        Const numberFmt As String = "{0,-22}{1,18:N0}"
        Const timeFmt As String = "{0,-22}{1,26}"

        Console.WriteLine( _
            "This example of the fields of the TimeSpan class" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field", "Value" )
        Console.WriteLine( numberFmt, "-----", "-----" )

        ' Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan", _
            Align( TimeSpan.MaxValue ) )
        Console.WriteLine( timeFmt, "Minimum TimeSpan", _
            Align( TimeSpan.MinValue ) )
        Console.WriteLine( timeFmt, "Zero TimeSpan", _
            Align( TimeSpan.Zero ) )
        Console.WriteLine( )

        ' Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day", _
            TimeSpan.TicksPerDay )
        Console.WriteLine( numberFmt, "Ticks per hour", _
            TimeSpan.TicksPerHour )
        Console.WriteLine( numberFmt, "Ticks per minute", _
            TimeSpan.TicksPerMinute )
        Console.WriteLine( numberFmt, "Ticks per second", _
            TimeSpan.TicksPerSecond )
        Console.WriteLine( numberFmt, "Ticks per millisecond", _
            TimeSpan.TicksPerMillisecond )
    End Sub
End Module

' This example of the fields of the TimeSpan class
' generates the following output.
'
' Field                              Value
' -----                              -----
' Maximum TimeSpan       10675199.02:48:05.4775807
' Minimum TimeSpan      -10675199.02:48:05.4775808
' Zero TimeSpan                   00:00:00
'
' Ticks per day            864,000,000,000
' Ticks per hour            36,000,000,000
' Ticks per minute             600,000,000
' Ticks per second              10,000,000
' Ticks per millisecond             10,000

// Example of the TimeSpan fields.
using System;

class TimeSpanFieldsDemo
{
    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    static void Main( )
    {
        const string numberFmt = "{0,-22}{1,18:N0}" ;
        const string timeFmt = "{0,-22}{1,26}" ;

        Console.WriteLine(
            "This example of the fields of the TimeSpan class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field", "Value" );
        Console.WriteLine( numberFmt, "-----", "-----" );

        // Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan",
            Align( TimeSpan.MaxValue ) );
        Console.WriteLine( timeFmt, "Minimum TimeSpan",
            Align( TimeSpan.MinValue ) );
        Console.WriteLine( timeFmt, "Zero TimeSpan",
            Align( TimeSpan.Zero ) );
        Console.WriteLine( );

        // Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day",
            TimeSpan.TicksPerDay );
        Console.WriteLine( numberFmt, "Ticks per hour",
            TimeSpan.TicksPerHour );
        Console.WriteLine( numberFmt, "Ticks per minute",
            TimeSpan.TicksPerMinute );
        Console.WriteLine( numberFmt, "Ticks per second",
            TimeSpan.TicksPerSecond );
        Console.WriteLine( numberFmt, "Ticks per millisecond",
            TimeSpan.TicksPerMillisecond );
    }
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

// Example of the TimeSpan fields.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

int main()
{
   String^ numberFmt = "{0,-22}{1,18:N0}";
   String^ timeFmt = "{0,-22}{1,26}";
   Console::WriteLine( "This example of the fields of the TimeSpan class"
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field", "Value" );
   Console::WriteLine( numberFmt, "-----", "-----" );

   // Display the maximum, minimum, and zero TimeSpan values.
   Console::WriteLine( timeFmt, "Maximum TimeSpan", Align( TimeSpan::MaxValue ) );
   Console::WriteLine( timeFmt, "Minimum TimeSpan", Align( TimeSpan::MinValue ) );
   Console::WriteLine( timeFmt, "Zero TimeSpan", Align( TimeSpan::Zero ) );
   Console::WriteLine();

   // Display the ticks-per-time-unit fields.
   Console::WriteLine( numberFmt, "Ticks per day", TimeSpan::TicksPerDay );
   Console::WriteLine( numberFmt, "Ticks per hour", TimeSpan::TicksPerHour );
   Console::WriteLine( numberFmt, "Ticks per minute", TimeSpan::TicksPerMinute );
   Console::WriteLine( numberFmt, "Ticks per second", TimeSpan::TicksPerSecond );
   Console::WriteLine( numberFmt, "Ticks per millisecond", TimeSpan::TicksPerMillisecond );
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Int64
MinValue


TimeSpan ..::.MinValue 字段

TimeSpan
.
.
::
.
MinValue 字段
TimeSpan 结构

表示最小的 TimeSpan 值。此字段为只读。 表示最小的 TimeSpan 值。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly MinValue As TimeSpan
public static readonly TimeSpan MinValue
public:
static initonly TimeSpan MinValue
static val MinValue: TimeSpan

此字段的值等效于 Int64..::.MinValue 刻度数。此值的字符串表示形式为 -10675199.02:48:05.4775808。 此字段的值等效于 Int64..::.MinValue 刻度数。此值的字符串表示形式为 -10675199.02:48:05.4775808。

下面的示例引用并显示 MinValue 字段的值。

' Example of the TimeSpan fields.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanFieldsDemo

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    Sub Main( )

        Const numberFmt As String = "{0,-22}{1,18:N0}"
        Const timeFmt As String = "{0,-22}{1,26}"

        Console.WriteLine( _
            "This example of the fields of the TimeSpan class" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field", "Value" )
        Console.WriteLine( numberFmt, "-----", "-----" )

        ' Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan", _
            Align( TimeSpan.MaxValue ) )
        Console.WriteLine( timeFmt, "Minimum TimeSpan", _
            Align( TimeSpan.MinValue ) )
        Console.WriteLine( timeFmt, "Zero TimeSpan", _
            Align( TimeSpan.Zero ) )
        Console.WriteLine( )

        ' Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day", _
            TimeSpan.TicksPerDay )
        Console.WriteLine( numberFmt, "Ticks per hour", _
            TimeSpan.TicksPerHour )
        Console.WriteLine( numberFmt, "Ticks per minute", _
            TimeSpan.TicksPerMinute )
        Console.WriteLine( numberFmt, "Ticks per second", _
            TimeSpan.TicksPerSecond )
        Console.WriteLine( numberFmt, "Ticks per millisecond", _
            TimeSpan.TicksPerMillisecond )
    End Sub
End Module

' This example of the fields of the TimeSpan class
' generates the following output.
'
' Field                              Value
' -----                              -----
' Maximum TimeSpan       10675199.02:48:05.4775807
' Minimum TimeSpan      -10675199.02:48:05.4775808
' Zero TimeSpan                   00:00:00
'
' Ticks per day            864,000,000,000
' Ticks per hour            36,000,000,000
' Ticks per minute             600,000,000
' Ticks per second              10,000,000
' Ticks per millisecond             10,000

// Example of the TimeSpan fields.
using System;

class TimeSpanFieldsDemo
{
    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    static void Main( )
    {
        const string numberFmt = "{0,-22}{1,18:N0}" ;
        const string timeFmt = "{0,-22}{1,26}" ;

        Console.WriteLine(
            "This example of the fields of the TimeSpan class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field", "Value" );
        Console.WriteLine( numberFmt, "-----", "-----" );

        // Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan",
            Align( TimeSpan.MaxValue ) );
        Console.WriteLine( timeFmt, "Minimum TimeSpan",
            Align( TimeSpan.MinValue ) );
        Console.WriteLine( timeFmt, "Zero TimeSpan",
            Align( TimeSpan.Zero ) );
        Console.WriteLine( );

        // Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day",
            TimeSpan.TicksPerDay );
        Console.WriteLine( numberFmt, "Ticks per hour",
            TimeSpan.TicksPerHour );
        Console.WriteLine( numberFmt, "Ticks per minute",
            TimeSpan.TicksPerMinute );
        Console.WriteLine( numberFmt, "Ticks per second",
            TimeSpan.TicksPerSecond );
        Console.WriteLine( numberFmt, "Ticks per millisecond",
            TimeSpan.TicksPerMillisecond );
    }
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

// Example of the TimeSpan fields.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

int main()
{
   String^ numberFmt = "{0,-22}{1,18:N0}";
   String^ timeFmt = "{0,-22}{1,26}";
   Console::WriteLine( "This example of the fields of the TimeSpan class"
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field", "Value" );
   Console::WriteLine( numberFmt, "-----", "-----" );

   // Display the maximum, minimum, and zero TimeSpan values.
   Console::WriteLine( timeFmt, "Maximum TimeSpan", Align( TimeSpan::MaxValue ) );
   Console::WriteLine( timeFmt, "Minimum TimeSpan", Align( TimeSpan::MinValue ) );
   Console::WriteLine( timeFmt, "Zero TimeSpan", Align( TimeSpan::Zero ) );
   Console::WriteLine();

   // Display the ticks-per-time-unit fields.
   Console::WriteLine( numberFmt, "Ticks per day", TimeSpan::TicksPerDay );
   Console::WriteLine( numberFmt, "Ticks per hour", TimeSpan::TicksPerHour );
   Console::WriteLine( numberFmt, "Ticks per minute", TimeSpan::TicksPerMinute );
   Console::WriteLine( numberFmt, "Ticks per second", TimeSpan::TicksPerSecond );
   Console::WriteLine( numberFmt, "Ticks per millisecond", TimeSpan::TicksPerMillisecond );
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Int64
MaxValue


TimeSpan ..::.TicksPerDay 字段

TimeSpan
.
.
::
.
TicksPerDay 字段
TimeSpan 结构

表示一天中的刻度数。此字段为常数。 表示一天中的刻度数。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const TicksPerDay As Long
public const long TicksPerDay
public:
literal long long TicksPerDay
static val mutable TicksPerDay: int64

此常数的值为 8,640 亿，即 864,000,000,000。

下面的示例引用并显示 TicksPerDay 字段的值。

' Example of the TimeSpan fields.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanFieldsDemo

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    Sub Main( )

        Const numberFmt As String = "{0,-22}{1,18:N0}"
        Const timeFmt As String = "{0,-22}{1,26}"

        Console.WriteLine( _
            "This example of the fields of the TimeSpan class" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field", "Value" )
        Console.WriteLine( numberFmt, "-----", "-----" )

        ' Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan", _
            Align( TimeSpan.MaxValue ) )
        Console.WriteLine( timeFmt, "Minimum TimeSpan", _
            Align( TimeSpan.MinValue ) )
        Console.WriteLine( timeFmt, "Zero TimeSpan", _
            Align( TimeSpan.Zero ) )
        Console.WriteLine( )

        ' Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day", _
            TimeSpan.TicksPerDay )
        Console.WriteLine( numberFmt, "Ticks per hour", _
            TimeSpan.TicksPerHour )
        Console.WriteLine( numberFmt, "Ticks per minute", _
            TimeSpan.TicksPerMinute )
        Console.WriteLine( numberFmt, "Ticks per second", _
            TimeSpan.TicksPerSecond )
        Console.WriteLine( numberFmt, "Ticks per millisecond", _
            TimeSpan.TicksPerMillisecond )
    End Sub
End Module

' This example of the fields of the TimeSpan class
' generates the following output.
'
' Field                              Value
' -----                              -----
' Maximum TimeSpan       10675199.02:48:05.4775807
' Minimum TimeSpan      -10675199.02:48:05.4775808
' Zero TimeSpan                   00:00:00
'
' Ticks per day            864,000,000,000
' Ticks per hour            36,000,000,000
' Ticks per minute             600,000,000
' Ticks per second              10,000,000
' Ticks per millisecond             10,000

// Example of the TimeSpan fields.
using System;

class TimeSpanFieldsDemo
{
    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    static void Main( )
    {
        const string numberFmt = "{0,-22}{1,18:N0}" ;
        const string timeFmt = "{0,-22}{1,26}" ;

        Console.WriteLine(
            "This example of the fields of the TimeSpan class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field", "Value" );
        Console.WriteLine( numberFmt, "-----", "-----" );

        // Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan",
            Align( TimeSpan.MaxValue ) );
        Console.WriteLine( timeFmt, "Minimum TimeSpan",
            Align( TimeSpan.MinValue ) );
        Console.WriteLine( timeFmt, "Zero TimeSpan",
            Align( TimeSpan.Zero ) );
        Console.WriteLine( );

        // Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day",
            TimeSpan.TicksPerDay );
        Console.WriteLine( numberFmt, "Ticks per hour",
            TimeSpan.TicksPerHour );
        Console.WriteLine( numberFmt, "Ticks per minute",
            TimeSpan.TicksPerMinute );
        Console.WriteLine( numberFmt, "Ticks per second",
            TimeSpan.TicksPerSecond );
        Console.WriteLine( numberFmt, "Ticks per millisecond",
            TimeSpan.TicksPerMillisecond );
    }
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

// Example of the TimeSpan fields.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

int main()
{
   String^ numberFmt = "{0,-22}{1,18:N0}";
   String^ timeFmt = "{0,-22}{1,26}";
   Console::WriteLine( "This example of the fields of the TimeSpan class"
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field", "Value" );
   Console::WriteLine( numberFmt, "-----", "-----" );

   // Display the maximum, minimum, and zero TimeSpan values.
   Console::WriteLine( timeFmt, "Maximum TimeSpan", Align( TimeSpan::MaxValue ) );
   Console::WriteLine( timeFmt, "Minimum TimeSpan", Align( TimeSpan::MinValue ) );
   Console::WriteLine( timeFmt, "Zero TimeSpan", Align( TimeSpan::Zero ) );
   Console::WriteLine();

   // Display the ticks-per-time-unit fields.
   Console::WriteLine( numberFmt, "Ticks per day", TimeSpan::TicksPerDay );
   Console::WriteLine( numberFmt, "Ticks per hour", TimeSpan::TicksPerHour );
   Console::WriteLine( numberFmt, "Ticks per minute", TimeSpan::TicksPerMinute );
   Console::WriteLine( numberFmt, "Ticks per second", TimeSpan::TicksPerSecond );
   Console::WriteLine( numberFmt, "Ticks per millisecond", TimeSpan::TicksPerMillisecond );
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Int64
TicksPerMillisecond
TicksPerSecond
TicksPerMinute
TicksPerHour


TimeSpan ..::.TicksPerHour 字段

TimeSpan
.
.
::
.
TicksPerHour 字段
TimeSpan 结构

表示 1 小时的刻度数。此字段为常数。 表示 1 小时的刻度数。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const TicksPerHour As Long
public const long TicksPerHour
public:
literal long long TicksPerHour
static val mutable TicksPerHour: int64

此常数的值为 360 亿，即 36,000,000,000。

下面的示例引用并显示 TicksPerHour 字段的值。

' Example of the TimeSpan fields.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanFieldsDemo

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    Sub Main( )

        Const numberFmt As String = "{0,-22}{1,18:N0}"
        Const timeFmt As String = "{0,-22}{1,26}"

        Console.WriteLine( _
            "This example of the fields of the TimeSpan class" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field", "Value" )
        Console.WriteLine( numberFmt, "-----", "-----" )

        ' Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan", _
            Align( TimeSpan.MaxValue ) )
        Console.WriteLine( timeFmt, "Minimum TimeSpan", _
            Align( TimeSpan.MinValue ) )
        Console.WriteLine( timeFmt, "Zero TimeSpan", _
            Align( TimeSpan.Zero ) )
        Console.WriteLine( )

        ' Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day", _
            TimeSpan.TicksPerDay )
        Console.WriteLine( numberFmt, "Ticks per hour", _
            TimeSpan.TicksPerHour )
        Console.WriteLine( numberFmt, "Ticks per minute", _
            TimeSpan.TicksPerMinute )
        Console.WriteLine( numberFmt, "Ticks per second", _
            TimeSpan.TicksPerSecond )
        Console.WriteLine( numberFmt, "Ticks per millisecond", _
            TimeSpan.TicksPerMillisecond )
    End Sub
End Module

' This example of the fields of the TimeSpan class
' generates the following output.
'
' Field                              Value
' -----                              -----
' Maximum TimeSpan       10675199.02:48:05.4775807
' Minimum TimeSpan      -10675199.02:48:05.4775808
' Zero TimeSpan                   00:00:00
'
' Ticks per day            864,000,000,000
' Ticks per hour            36,000,000,000
' Ticks per minute             600,000,000
' Ticks per second              10,000,000
' Ticks per millisecond             10,000

// Example of the TimeSpan fields.
using System;

class TimeSpanFieldsDemo
{
    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    static void Main( )
    {
        const string numberFmt = "{0,-22}{1,18:N0}" ;
        const string timeFmt = "{0,-22}{1,26}" ;

        Console.WriteLine(
            "This example of the fields of the TimeSpan class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field", "Value" );
        Console.WriteLine( numberFmt, "-----", "-----" );

        // Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan",
            Align( TimeSpan.MaxValue ) );
        Console.WriteLine( timeFmt, "Minimum TimeSpan",
            Align( TimeSpan.MinValue ) );
        Console.WriteLine( timeFmt, "Zero TimeSpan",
            Align( TimeSpan.Zero ) );
        Console.WriteLine( );

        // Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day",
            TimeSpan.TicksPerDay );
        Console.WriteLine( numberFmt, "Ticks per hour",
            TimeSpan.TicksPerHour );
        Console.WriteLine( numberFmt, "Ticks per minute",
            TimeSpan.TicksPerMinute );
        Console.WriteLine( numberFmt, "Ticks per second",
            TimeSpan.TicksPerSecond );
        Console.WriteLine( numberFmt, "Ticks per millisecond",
            TimeSpan.TicksPerMillisecond );
    }
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

// Example of the TimeSpan fields.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

int main()
{
   String^ numberFmt = "{0,-22}{1,18:N0}";
   String^ timeFmt = "{0,-22}{1,26}";
   Console::WriteLine( "This example of the fields of the TimeSpan class"
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field", "Value" );
   Console::WriteLine( numberFmt, "-----", "-----" );

   // Display the maximum, minimum, and zero TimeSpan values.
   Console::WriteLine( timeFmt, "Maximum TimeSpan", Align( TimeSpan::MaxValue ) );
   Console::WriteLine( timeFmt, "Minimum TimeSpan", Align( TimeSpan::MinValue ) );
   Console::WriteLine( timeFmt, "Zero TimeSpan", Align( TimeSpan::Zero ) );
   Console::WriteLine();

   // Display the ticks-per-time-unit fields.
   Console::WriteLine( numberFmt, "Ticks per day", TimeSpan::TicksPerDay );
   Console::WriteLine( numberFmt, "Ticks per hour", TimeSpan::TicksPerHour );
   Console::WriteLine( numberFmt, "Ticks per minute", TimeSpan::TicksPerMinute );
   Console::WriteLine( numberFmt, "Ticks per second", TimeSpan::TicksPerSecond );
   Console::WriteLine( numberFmt, "Ticks per millisecond", TimeSpan::TicksPerMillisecond );
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Int64
TicksPerMillisecond
TicksPerSecond
TicksPerMinute
TicksPerDay


TimeSpan ..::.TicksPerMillisecond 字段

TimeSpan
.
.
::
.
TicksPerMillisecond 字段
TimeSpan 结构

表示 1 毫秒的刻度数。此字段为常数。 表示 1 毫秒的刻度数。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const TicksPerMillisecond As Long
public const long TicksPerMillisecond
public:
literal long long TicksPerMillisecond
static val mutable TicksPerMillisecond: int64

此常数的值为 1 万，即 10,000。

下面的示例引用并显示 TicksPerMillisecond 字段的值。

' Example of the TimeSpan fields.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanFieldsDemo

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    Sub Main( )

        Const numberFmt As String = "{0,-22}{1,18:N0}"
        Const timeFmt As String = "{0,-22}{1,26}"

        Console.WriteLine( _
            "This example of the fields of the TimeSpan class" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field", "Value" )
        Console.WriteLine( numberFmt, "-----", "-----" )

        ' Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan", _
            Align( TimeSpan.MaxValue ) )
        Console.WriteLine( timeFmt, "Minimum TimeSpan", _
            Align( TimeSpan.MinValue ) )
        Console.WriteLine( timeFmt, "Zero TimeSpan", _
            Align( TimeSpan.Zero ) )
        Console.WriteLine( )

        ' Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day", _
            TimeSpan.TicksPerDay )
        Console.WriteLine( numberFmt, "Ticks per hour", _
            TimeSpan.TicksPerHour )
        Console.WriteLine( numberFmt, "Ticks per minute", _
            TimeSpan.TicksPerMinute )
        Console.WriteLine( numberFmt, "Ticks per second", _
            TimeSpan.TicksPerSecond )
        Console.WriteLine( numberFmt, "Ticks per millisecond", _
            TimeSpan.TicksPerMillisecond )
    End Sub
End Module

' This example of the fields of the TimeSpan class
' generates the following output.
'
' Field                              Value
' -----                              -----
' Maximum TimeSpan       10675199.02:48:05.4775807
' Minimum TimeSpan      -10675199.02:48:05.4775808
' Zero TimeSpan                   00:00:00
'
' Ticks per day            864,000,000,000
' Ticks per hour            36,000,000,000
' Ticks per minute             600,000,000
' Ticks per second              10,000,000
' Ticks per millisecond             10,000

// Example of the TimeSpan fields.
using System;

class TimeSpanFieldsDemo
{
    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    static void Main( )
    {
        const string numberFmt = "{0,-22}{1,18:N0}" ;
        const string timeFmt = "{0,-22}{1,26}" ;

        Console.WriteLine(
            "This example of the fields of the TimeSpan class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field", "Value" );
        Console.WriteLine( numberFmt, "-----", "-----" );

        // Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan",
            Align( TimeSpan.MaxValue ) );
        Console.WriteLine( timeFmt, "Minimum TimeSpan",
            Align( TimeSpan.MinValue ) );
        Console.WriteLine( timeFmt, "Zero TimeSpan",
            Align( TimeSpan.Zero ) );
        Console.WriteLine( );

        // Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day",
            TimeSpan.TicksPerDay );
        Console.WriteLine( numberFmt, "Ticks per hour",
            TimeSpan.TicksPerHour );
        Console.WriteLine( numberFmt, "Ticks per minute",
            TimeSpan.TicksPerMinute );
        Console.WriteLine( numberFmt, "Ticks per second",
            TimeSpan.TicksPerSecond );
        Console.WriteLine( numberFmt, "Ticks per millisecond",
            TimeSpan.TicksPerMillisecond );
    }
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

// Example of the TimeSpan fields.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

int main()
{
   String^ numberFmt = "{0,-22}{1,18:N0}";
   String^ timeFmt = "{0,-22}{1,26}";
   Console::WriteLine( "This example of the fields of the TimeSpan class"
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field", "Value" );
   Console::WriteLine( numberFmt, "-----", "-----" );

   // Display the maximum, minimum, and zero TimeSpan values.
   Console::WriteLine( timeFmt, "Maximum TimeSpan", Align( TimeSpan::MaxValue ) );
   Console::WriteLine( timeFmt, "Minimum TimeSpan", Align( TimeSpan::MinValue ) );
   Console::WriteLine( timeFmt, "Zero TimeSpan", Align( TimeSpan::Zero ) );
   Console::WriteLine();

   // Display the ticks-per-time-unit fields.
   Console::WriteLine( numberFmt, "Ticks per day", TimeSpan::TicksPerDay );
   Console::WriteLine( numberFmt, "Ticks per hour", TimeSpan::TicksPerHour );
   Console::WriteLine( numberFmt, "Ticks per minute", TimeSpan::TicksPerMinute );
   Console::WriteLine( numberFmt, "Ticks per second", TimeSpan::TicksPerSecond );
   Console::WriteLine( numberFmt, "Ticks per millisecond", TimeSpan::TicksPerMillisecond );
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Int64
TicksPerSecond
TicksPerMinute
TicksPerHour
TicksPerDay


TimeSpan ..::.TicksPerMinute 字段

TimeSpan
.
.
::
.
TicksPerMinute 字段
TimeSpan 结构

表示 1 分钟的刻度数。此字段为常数。 表示 1 分钟的刻度数。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const TicksPerMinute As Long
public const long TicksPerMinute
public:
literal long long TicksPerMinute
static val mutable TicksPerMinute: int64

此常数的值为 6 亿，即 600,000,000。

下面的示例引用并显示 TicksPerMinute 字段的值。

' Example of the TimeSpan fields.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanFieldsDemo

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    Sub Main( )

        Const numberFmt As String = "{0,-22}{1,18:N0}"
        Const timeFmt As String = "{0,-22}{1,26}"

        Console.WriteLine( _
            "This example of the fields of the TimeSpan class" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field", "Value" )
        Console.WriteLine( numberFmt, "-----", "-----" )

        ' Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan", _
            Align( TimeSpan.MaxValue ) )
        Console.WriteLine( timeFmt, "Minimum TimeSpan", _
            Align( TimeSpan.MinValue ) )
        Console.WriteLine( timeFmt, "Zero TimeSpan", _
            Align( TimeSpan.Zero ) )
        Console.WriteLine( )

        ' Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day", _
            TimeSpan.TicksPerDay )
        Console.WriteLine( numberFmt, "Ticks per hour", _
            TimeSpan.TicksPerHour )
        Console.WriteLine( numberFmt, "Ticks per minute", _
            TimeSpan.TicksPerMinute )
        Console.WriteLine( numberFmt, "Ticks per second", _
            TimeSpan.TicksPerSecond )
        Console.WriteLine( numberFmt, "Ticks per millisecond", _
            TimeSpan.TicksPerMillisecond )
    End Sub
End Module

' This example of the fields of the TimeSpan class
' generates the following output.
'
' Field                              Value
' -----                              -----
' Maximum TimeSpan       10675199.02:48:05.4775807
' Minimum TimeSpan      -10675199.02:48:05.4775808
' Zero TimeSpan                   00:00:00
'
' Ticks per day            864,000,000,000
' Ticks per hour            36,000,000,000
' Ticks per minute             600,000,000
' Ticks per second              10,000,000
' Ticks per millisecond             10,000

// Example of the TimeSpan fields.
using System;

class TimeSpanFieldsDemo
{
    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    static void Main( )
    {
        const string numberFmt = "{0,-22}{1,18:N0}" ;
        const string timeFmt = "{0,-22}{1,26}" ;

        Console.WriteLine(
            "This example of the fields of the TimeSpan class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field", "Value" );
        Console.WriteLine( numberFmt, "-----", "-----" );

        // Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan",
            Align( TimeSpan.MaxValue ) );
        Console.WriteLine( timeFmt, "Minimum TimeSpan",
            Align( TimeSpan.MinValue ) );
        Console.WriteLine( timeFmt, "Zero TimeSpan",
            Align( TimeSpan.Zero ) );
        Console.WriteLine( );

        // Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day",
            TimeSpan.TicksPerDay );
        Console.WriteLine( numberFmt, "Ticks per hour",
            TimeSpan.TicksPerHour );
        Console.WriteLine( numberFmt, "Ticks per minute",
            TimeSpan.TicksPerMinute );
        Console.WriteLine( numberFmt, "Ticks per second",
            TimeSpan.TicksPerSecond );
        Console.WriteLine( numberFmt, "Ticks per millisecond",
            TimeSpan.TicksPerMillisecond );
    }
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

// Example of the TimeSpan fields.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

int main()
{
   String^ numberFmt = "{0,-22}{1,18:N0}";
   String^ timeFmt = "{0,-22}{1,26}";
   Console::WriteLine( "This example of the fields of the TimeSpan class"
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field", "Value" );
   Console::WriteLine( numberFmt, "-----", "-----" );

   // Display the maximum, minimum, and zero TimeSpan values.
   Console::WriteLine( timeFmt, "Maximum TimeSpan", Align( TimeSpan::MaxValue ) );
   Console::WriteLine( timeFmt, "Minimum TimeSpan", Align( TimeSpan::MinValue ) );
   Console::WriteLine( timeFmt, "Zero TimeSpan", Align( TimeSpan::Zero ) );
   Console::WriteLine();

   // Display the ticks-per-time-unit fields.
   Console::WriteLine( numberFmt, "Ticks per day", TimeSpan::TicksPerDay );
   Console::WriteLine( numberFmt, "Ticks per hour", TimeSpan::TicksPerHour );
   Console::WriteLine( numberFmt, "Ticks per minute", TimeSpan::TicksPerMinute );
   Console::WriteLine( numberFmt, "Ticks per second", TimeSpan::TicksPerSecond );
   Console::WriteLine( numberFmt, "Ticks per millisecond", TimeSpan::TicksPerMillisecond );
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Int64
TicksPerMillisecond
TicksPerSecond
TicksPerHour
TicksPerDay


TimeSpan ..::.TicksPerSecond 字段

TimeSpan
.
.
::
.
TicksPerSecond 字段
TimeSpan 结构

表示 1 秒的刻度数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const TicksPerSecond As Long
public const long TicksPerSecond
public:
literal long long TicksPerSecond
static val mutable TicksPerSecond: int64

此常数的值为 1,000 万，即 10,000,000。

下面的示例引用并显示 TicksPerSecond 字段的值。

' Example of the TimeSpan fields.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanFieldsDemo

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    Sub Main( )

        Const numberFmt As String = "{0,-22}{1,18:N0}"
        Const timeFmt As String = "{0,-22}{1,26}"

        Console.WriteLine( _
            "This example of the fields of the TimeSpan class" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field", "Value" )
        Console.WriteLine( numberFmt, "-----", "-----" )

        ' Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan", _
            Align( TimeSpan.MaxValue ) )
        Console.WriteLine( timeFmt, "Minimum TimeSpan", _
            Align( TimeSpan.MinValue ) )
        Console.WriteLine( timeFmt, "Zero TimeSpan", _
            Align( TimeSpan.Zero ) )
        Console.WriteLine( )

        ' Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day", _
            TimeSpan.TicksPerDay )
        Console.WriteLine( numberFmt, "Ticks per hour", _
            TimeSpan.TicksPerHour )
        Console.WriteLine( numberFmt, "Ticks per minute", _
            TimeSpan.TicksPerMinute )
        Console.WriteLine( numberFmt, "Ticks per second", _
            TimeSpan.TicksPerSecond )
        Console.WriteLine( numberFmt, "Ticks per millisecond", _
            TimeSpan.TicksPerMillisecond )
    End Sub
End Module

' This example of the fields of the TimeSpan class
' generates the following output.
'
' Field                              Value
' -----                              -----
' Maximum TimeSpan       10675199.02:48:05.4775807
' Minimum TimeSpan      -10675199.02:48:05.4775808
' Zero TimeSpan                   00:00:00
'
' Ticks per day            864,000,000,000
' Ticks per hour            36,000,000,000
' Ticks per minute             600,000,000
' Ticks per second              10,000,000
' Ticks per millisecond             10,000

// Example of the TimeSpan fields.
using System;

class TimeSpanFieldsDemo
{
    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    static void Main( )
    {
        const string numberFmt = "{0,-22}{1,18:N0}" ;
        const string timeFmt = "{0,-22}{1,26}" ;

        Console.WriteLine(
            "This example of the fields of the TimeSpan class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field", "Value" );
        Console.WriteLine( numberFmt, "-----", "-----" );

        // Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan",
            Align( TimeSpan.MaxValue ) );
        Console.WriteLine( timeFmt, "Minimum TimeSpan",
            Align( TimeSpan.MinValue ) );
        Console.WriteLine( timeFmt, "Zero TimeSpan",
            Align( TimeSpan.Zero ) );
        Console.WriteLine( );

        // Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day",
            TimeSpan.TicksPerDay );
        Console.WriteLine( numberFmt, "Ticks per hour",
            TimeSpan.TicksPerHour );
        Console.WriteLine( numberFmt, "Ticks per minute",
            TimeSpan.TicksPerMinute );
        Console.WriteLine( numberFmt, "Ticks per second",
            TimeSpan.TicksPerSecond );
        Console.WriteLine( numberFmt, "Ticks per millisecond",
            TimeSpan.TicksPerMillisecond );
    }
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

// Example of the TimeSpan fields.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

int main()
{
   String^ numberFmt = "{0,-22}{1,18:N0}";
   String^ timeFmt = "{0,-22}{1,26}";
   Console::WriteLine( "This example of the fields of the TimeSpan class"
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field", "Value" );
   Console::WriteLine( numberFmt, "-----", "-----" );

   // Display the maximum, minimum, and zero TimeSpan values.
   Console::WriteLine( timeFmt, "Maximum TimeSpan", Align( TimeSpan::MaxValue ) );
   Console::WriteLine( timeFmt, "Minimum TimeSpan", Align( TimeSpan::MinValue ) );
   Console::WriteLine( timeFmt, "Zero TimeSpan", Align( TimeSpan::Zero ) );
   Console::WriteLine();

   // Display the ticks-per-time-unit fields.
   Console::WriteLine( numberFmt, "Ticks per day", TimeSpan::TicksPerDay );
   Console::WriteLine( numberFmt, "Ticks per hour", TimeSpan::TicksPerHour );
   Console::WriteLine( numberFmt, "Ticks per minute", TimeSpan::TicksPerMinute );
   Console::WriteLine( numberFmt, "Ticks per second", TimeSpan::TicksPerSecond );
   Console::WriteLine( numberFmt, "Ticks per millisecond", TimeSpan::TicksPerMillisecond );
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Int64
TicksPerMillisecond
TicksPerMinute
TicksPerHour
TicksPerDay


TimeSpan ..::.Zero 字段

TimeSpan
.
.
::
.
Zero 字段
TimeSpan 结构

表示零 TimeSpan 值。此字段为只读。 表示零 TimeSpan 值。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Zero As TimeSpan
public static readonly TimeSpan Zero
public:
static initonly TimeSpan Zero
static val Zero: TimeSpan

由于它返回一个表示零时间值的 TimeSpan 对象，因此可将 Zero 属性与其他 TimeSpan 对象比较，以确定后者是表示正时间范围还是非零或负时间范围。

下面的示例引用并显示 Zero 字段的值。

' Example of the TimeSpan fields.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanFieldsDemo

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    Sub Main( )

        Const numberFmt As String = "{0,-22}{1,18:N0}"
        Const timeFmt As String = "{0,-22}{1,26}"

        Console.WriteLine( _
            "This example of the fields of the TimeSpan class" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( numberFmt, "Field", "Value" )
        Console.WriteLine( numberFmt, "-----", "-----" )

        ' Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan", _
            Align( TimeSpan.MaxValue ) )
        Console.WriteLine( timeFmt, "Minimum TimeSpan", _
            Align( TimeSpan.MinValue ) )
        Console.WriteLine( timeFmt, "Zero TimeSpan", _
            Align( TimeSpan.Zero ) )
        Console.WriteLine( )

        ' Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day", _
            TimeSpan.TicksPerDay )
        Console.WriteLine( numberFmt, "Ticks per hour", _
            TimeSpan.TicksPerHour )
        Console.WriteLine( numberFmt, "Ticks per minute", _
            TimeSpan.TicksPerMinute )
        Console.WriteLine( numberFmt, "Ticks per second", _
            TimeSpan.TicksPerSecond )
        Console.WriteLine( numberFmt, "Ticks per millisecond", _
            TimeSpan.TicksPerMillisecond )
    End Sub
End Module

' This example of the fields of the TimeSpan class
' generates the following output.
'
' Field                              Value
' -----                              -----
' Maximum TimeSpan       10675199.02:48:05.4775807
' Minimum TimeSpan      -10675199.02:48:05.4775808
' Zero TimeSpan                   00:00:00
'
' Ticks per day            864,000,000,000
' Ticks per hour            36,000,000,000
' Ticks per minute             600,000,000
' Ticks per second              10,000,000
' Ticks per millisecond             10,000

// Example of the TimeSpan fields.
using System;

class TimeSpanFieldsDemo
{
    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    static void Main( )
    {
        const string numberFmt = "{0,-22}{1,18:N0}" ;
        const string timeFmt = "{0,-22}{1,26}" ;

        Console.WriteLine(
            "This example of the fields of the TimeSpan class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( numberFmt, "Field", "Value" );
        Console.WriteLine( numberFmt, "-----", "-----" );

        // Display the maximum, minimum, and zero TimeSpan values.
        Console.WriteLine( timeFmt, "Maximum TimeSpan",
            Align( TimeSpan.MaxValue ) );
        Console.WriteLine( timeFmt, "Minimum TimeSpan",
            Align( TimeSpan.MinValue ) );
        Console.WriteLine( timeFmt, "Zero TimeSpan",
            Align( TimeSpan.Zero ) );
        Console.WriteLine( );

        // Display the ticks-per-time-unit fields.
        Console.WriteLine( numberFmt, "Ticks per day",
            TimeSpan.TicksPerDay );
        Console.WriteLine( numberFmt, "Ticks per hour",
            TimeSpan.TicksPerHour );
        Console.WriteLine( numberFmt, "Ticks per minute",
            TimeSpan.TicksPerMinute );
        Console.WriteLine( numberFmt, "Ticks per second",
            TimeSpan.TicksPerSecond );
        Console.WriteLine( numberFmt, "Ticks per millisecond",
            TimeSpan.TicksPerMillisecond );
    }
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

// Example of the TimeSpan fields.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

int main()
{
   String^ numberFmt = "{0,-22}{1,18:N0}";
   String^ timeFmt = "{0,-22}{1,26}";
   Console::WriteLine( "This example of the fields of the TimeSpan class"
   "\ngenerates the following output.\n" );
   Console::WriteLine( numberFmt, "Field", "Value" );
   Console::WriteLine( numberFmt, "-----", "-----" );

   // Display the maximum, minimum, and zero TimeSpan values.
   Console::WriteLine( timeFmt, "Maximum TimeSpan", Align( TimeSpan::MaxValue ) );
   Console::WriteLine( timeFmt, "Minimum TimeSpan", Align( TimeSpan::MinValue ) );
   Console::WriteLine( timeFmt, "Zero TimeSpan", Align( TimeSpan::Zero ) );
   Console::WriteLine();

   // Display the ticks-per-time-unit fields.
   Console::WriteLine( numberFmt, "Ticks per day", TimeSpan::TicksPerDay );
   Console::WriteLine( numberFmt, "Ticks per hour", TimeSpan::TicksPerHour );
   Console::WriteLine( numberFmt, "Ticks per minute", TimeSpan::TicksPerMinute );
   Console::WriteLine( numberFmt, "Ticks per second", TimeSpan::TicksPerSecond );
   Console::WriteLine( numberFmt, "Ticks per millisecond", TimeSpan::TicksPerMillisecond );
}

/*
This example of the fields of the TimeSpan class
generates the following output.

Field                              Value
-----                              -----
Maximum TimeSpan       10675199.02:48:05.4775807
Minimum TimeSpan      -10675199.02:48:05.4775808
Zero TimeSpan                   00:00:00

Ticks per day            864,000,000,000
Ticks per hour            36,000,000,000
Ticks per minute             600,000,000
Ticks per second              10,000,000
Ticks per millisecond             10,000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan 方法

TimeSpan 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

TimeSpan 类型公开以下成员。

名称 说明
页首

参考

TimeSpan 结构
System 命名空间


TimeSpan ..::.Add 方法

TimeSpan
.
.
::
.
Add 方法
TimeSpan 结构

将指定的 TimeSpan 添加到此实例中。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Add ( _
    ts As TimeSpan _
) As TimeSpan
public TimeSpan Add(
    TimeSpan ts
)
public:
TimeSpan Add(
    TimeSpan ts
)
member Add :
        ts:TimeSpan -> TimeSpan

参数

ts
类型： System TimeSpan
要加上的时间间隔。

返回值

类型： System TimeSpan
一个对象，表示此实例的值加 ts 的值。
异常 | 条件
OverflowException | 所生成的 TimeSpan 小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue。

返回值必须在 TimeSpan..::.MinValue 和 TimeSpan..::.MaxValue 之间；否则将发生异常。

返回值是新的 TimeSpan；不修改原始 TimeSpan。

下面的示例创建几对 TimeSpan 对象，并使用 Add 方法计算它们的和。

' Example of the TimeSpan.Add( ) and TimeSpan.Subtract( ) methods.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanAddSubDemo

    Const dataFmt As String = "{0,-24}{1,24}"

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    ' Display TimeSpan parameters and their sum and difference.
    Sub ShowTimeSpanSumDiff( Left as TimeSpan, Right as TimeSpan )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "TimeSpan Left", Align( Left ) )
        Console.WriteLine( dataFmt, "TimeSpan Right", Align( Right ) )
        Console.WriteLine( dataFmt, "Left.Add( Right )", _
            Align( Left.Add( Right ) ) )
        Console.WriteLine( dataFmt, "Left.Subtract( Right )", _
            Align( Left.Subtract( Right ) ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the TimeSpan.Add( ) and " & _
            "TimeSpan.Subtract( ) " & vbCrLf & "methods " & _
            "generates the following output by creating several " & _
            vbCrLf & "pairs of TimeSpan objects and calculating " & _
            "and displaying " & vbCrLf & "the sum " & _
            "and difference of each." )

        ' Create pairs of TimeSpan objects.
        ShowTimeSpanSumDiff( _
            new TimeSpan( 1, 20, 0 ), _
            new TimeSpan( 0, 45, 10 ) )
        ShowTimeSpanSumDiff( _
            new TimeSpan( 1, 10, 20, 30, 40 ), _
            new TimeSpan( -1, 2, 3, 4, 5 ) )
        ShowTimeSpanSumDiff( _
            new TimeSpan( 182, 12, 30, 30, 505 ), _
            new TimeSpan( 182, 11, 29, 29, 495 ) )
        ShowTimeSpanSumDiff( _
            new TimeSpan( 888888888888888 ), _
            new TimeSpan( 999999999999999 ) )
    End Sub
End Module

' This example of the TimeSpan.Add( ) and TimeSpan.Subtract( )
' methods generates the following output by creating several
' pairs of TimeSpan objects and calculating and displaying
' the sum and difference of each.
'
' TimeSpan Left                   01:20:00
' TimeSpan Right                  00:45:10
' Left.Add( Right )               02:05:10
' Left.Subtract( Right )          00:34:50
'
' TimeSpan Left                 1.10:20:30.0400000
' TimeSpan Right                 -21:56:55.9950000
' Left.Add( Right )               12:23:34.0450000
' Left.Subtract( Right )        2.08:17:26.0350000
'
' TimeSpan Left               182.12:30:30.5050000
' TimeSpan Right              182.11:29:29.4950000
' Left.Add( Right )           365.00:00:00
' Left.Subtract( Right )          01:01:01.0100000
'
' TimeSpan Left              1028.19:21:28.8888888
' TimeSpan Right             1157.09:46:39.9999999
' Left.Add( Right )          2186.05:08:08.8888887
' Left.Subtract( Right )     -128.14:25:11.1111111

// Example of the TimeSpan.Add( ) and TimeSpan.Subtract( ) methods.
using System;

class TimeSpanAddSubDemo
{
    const string dataFmt = "{0,-24}{1,24}" ;

    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    // Display TimeSpan parameters and their sum and difference.
    static void ShowTimeSpanSumDiff( TimeSpan Left, TimeSpan Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "TimeSpan Left", Align( Left ) );
        Console.WriteLine( dataFmt, "TimeSpan Right", Align( Right ) );
        Console.WriteLine( dataFmt, "Left.Add( Right )",
            Align( Left.Add( Right ) ) );
        Console.WriteLine( dataFmt, "Left.Subtract( Right )",
            Align( Left.Subtract( Right ) ) );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan.Add( ) and " +
            "TimeSpan.Subtract( ) \nmethods generates the " +
            "following output by creating several \npairs of " +
            "TimeSpan objects and calculating and displaying \n" +
            "the sum and difference of each." );

        // Create pairs of TimeSpan objects.
        ShowTimeSpanSumDiff(
            new TimeSpan( 1, 20, 0 ),
            new TimeSpan( 0, 45, 10 ) );
        ShowTimeSpanSumDiff(
            new TimeSpan( 1, 10, 20, 30, 40 ),
            new TimeSpan( -1, 2, 3, 4, 5 ) );
        ShowTimeSpanSumDiff(
            new TimeSpan( 182, 12, 30, 30, 505 ),
            new TimeSpan( 182, 11, 29, 29, 495 ) );
        ShowTimeSpanSumDiff(
            new TimeSpan( 888888888888888 ),
            new TimeSpan( 999999999999999 ) );
    }
}

/*
This example of the TimeSpan.Add( ) and TimeSpan.Subtract( )
methods generates the following output by creating several
pairs of TimeSpan objects and calculating and displaying
the sum and difference of each.

TimeSpan Left                   01:20:00
TimeSpan Right                  00:45:10
Left.Add( Right )               02:05:10
Left.Subtract( Right )          00:34:50

TimeSpan Left                 1.10:20:30.0400000
TimeSpan Right                 -21:56:55.9950000
Left.Add( Right )               12:23:34.0450000
Left.Subtract( Right )        2.08:17:26.0350000

TimeSpan Left               182.12:30:30.5050000
TimeSpan Right              182.11:29:29.4950000
Left.Add( Right )           365.00:00:00
Left.Subtract( Right )          01:01:01.0100000

TimeSpan Left              1028.19:21:28.8888888
TimeSpan Right             1157.09:46:39.9999999
Left.Add( Right )          2186.05:08:08.8888887
Left.Subtract( Right )     -128.14:25:11.1111111
*/

// Example of the TimeSpan::Add( ) and TimeSpan::Subtract( ) methods.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

// Display TimeSpan parameters and their sum and difference.
static void ShowTimeSpanSumDiff( TimeSpan Left, TimeSpan Right )
{
   String^ dataFmt = "{0,-24}{1,24}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "TimeSpan Left", Align( Left ) );
   Console::WriteLine( dataFmt, "TimeSpan Right", Align( Right ) );
   Console::WriteLine( dataFmt, "Left.Add( Right )", Align( Left.Add( Right ) ) );
   Console::WriteLine( dataFmt, "Left.Subtract( Right )", Align( Left.Subtract( Right ) ) );
}

int main()
{
   Console::WriteLine( "This example of the TimeSpan::Add( ) and "
   "TimeSpan::Subtract( ) \nmethods generates the "
   "following output by creating several \npairs of "
   "TimeSpan objects and calculating and displaying \n"
   "the sum and difference of each." );

   // Create pairs of TimeSpan objects.
   ShowTimeSpanSumDiff( TimeSpan(1,20,0), TimeSpan(0,45,10) );
   ShowTimeSpanSumDiff( TimeSpan(1,10,20,30,40), TimeSpan( -1,2,3,4,5) );
   ShowTimeSpanSumDiff( TimeSpan(182,12,30,30,505), TimeSpan(182,11,29,29,495) );
   ShowTimeSpanSumDiff( TimeSpan(888888888888888), TimeSpan(999999999999999) );
}

/*
This example of the TimeSpan::Add( ) and TimeSpan::Subtract( )
methods generates the following output by creating several
pairs of TimeSpan objects and calculating and displaying
the sum and difference of each.

TimeSpan Left                   01:20:00
TimeSpan Right                  00:45:10
Left.Add( Right )               02:05:10
Left.Subtract( Right )          00:34:50

TimeSpan Left                 1.10:20:30.0400000
TimeSpan Right                 -21:56:55.9950000
Left.Add( Right )               12:23:34.0450000
Left.Subtract( Right )        2.08:17:26.0350000

TimeSpan Left               182.12:30:30.5050000
TimeSpan Right              182.11:29:29.4950000
Left.Add( Right )           365.00:00:00
Left.Subtract( Right )          01:01:01.0100000

TimeSpan Left              1028.19:21:28.8888888
TimeSpan Right             1157.09:46:39.9999999
Left.Add( Right )          2186.05:08:08.8888887
Left.Subtract( Right )     -128.14:25:11.1111111
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
DateTime Add


TimeSpan ..::.Compare 方法

TimeSpan
.
.
::
.
Compare 方法
TimeSpan 结构

比较两个 TimeSpan 值，并返回一个整数，该整数指示第一个值是短于、等于还是长于第二个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Compare ( _ t1 As TimeSpan, _ t2 As TimeSpan _ ) As Integer
public static int Compare( TimeSpan t1, TimeSpan t2 )
public: static int Compare( TimeSpan t1, TimeSpan t2 )
static member Compare : t1:TimeSpan * t2:TimeSpan -> int
参数
t1
类型： System TimeSpan
要比较的第一个时间间隔。
t2
类型： System TimeSpan
要比较的第二个时间间隔。
返回值
类型： System Int32
以下值之一。
值
说明
-1
t1
短于
t2
。
0
t1
等于
t2
。
1
t1
长于
t2
。

下面的示例使用 Compare 方法将几个 TimeSpan 对象同一个参考 TimeSpan 进行比较。

' Example of the TimeSpan.Compare( TimeSpan, TimeSpan ) and
' TimeSpan.Equals( TimeSpan, TimeSpan ) methods.
Imports System
Imports Microsoft.VisualBasic

Module TSCompareEqualsDemo

    Const dataFmt As String = "{0,-38}{1}"

    ' Compare TimeSpan parameters, and display them with the results.
    Sub CompareTimeSpans( Left as TimeSpan, Right as TimeSpan, _
        RightText as String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, "TimeSpan.Equals( Left, Right )", _
            TimeSpan.Equals( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.Compare( Left, Right )", _
            TimeSpan.Compare( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left as new TimeSpan( 2, 0, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan.Equals( TimeSpan, " & _
            "TimeSpan ) and " & vbCrLf & "TimeSpan.Compare( " & _
            "TimeSpan, TimeSpan ) methods generates the " & vbCrLf & _
            "following output by creating several " & _
            "different TimeSpan " & vbCrLf & "objects and " & _
            "comparing them with a 2-hour TimeSpan." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )", Left )

        ' Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ), _
            "TimeSpan( 0, 120, 0 )" )
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ), _
            "TimeSpan( 2, 0, 1 )" )
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ), _
            "TimeSpan( 2, 0, -1 )" )
        CompareTimeSpans( Left, new TimeSpan( 72000000000 ), _
            "TimeSpan( 72000000000 )" )
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12R ), _
            "TimeSpan.FromDays( 1 / 12 )" )
    End Sub
End Module

' This example of the TimeSpan.Equals( TimeSpan, TimeSpan ) and
' TimeSpan.Compare( TimeSpan, TimeSpan ) methods generates the
' following output by creating several different TimeSpan
' objects and comparing them with a 2-hour TimeSpan.
'
' Left: TimeSpan( 2, 0, 0 )             02:00:00
'
' Right: TimeSpan( 0, 120, 0 )          02:00:00
' TimeSpan.Equals( Left, Right )        True
' TimeSpan.Compare( Left, Right )       0
'
' Right: TimeSpan( 2, 0, 1 )            02:00:01
' TimeSpan.Equals( Left, Right )        False
' TimeSpan.Compare( Left, Right )       -1
'
' Right: TimeSpan( 2, 0, -1 )           01:59:59
' TimeSpan.Equals( Left, Right )        False
' TimeSpan.Compare( Left, Right )       1
'
' Right: TimeSpan( 72000000000 )        02:00:00
' TimeSpan.Equals( Left, Right )        True
' TimeSpan.Compare( Left, Right )       0
'
' Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
' TimeSpan.Equals( Left, Right )        True
' TimeSpan.Compare( Left, Right )       0

// Example of the TimeSpan.Compare( TimeSpan, TimeSpan ) and
// TimeSpan.Equals( TimeSpan, TimeSpan ) methods.
using System;

class TSCompareEqualsDemo
{
    const string dataFmt = "{0,-38}{1}" ;

    // Compare TimeSpan parameters, and display them with the results.
    static void CompareTimeSpans( TimeSpan Left, TimeSpan Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "TimeSpan.Equals( Left, Right )",
            TimeSpan.Equals( Left, Right ) );
        Console.WriteLine( dataFmt,
            "TimeSpan.Compare( Left, Right )",
            TimeSpan.Compare( Left, Right ) );
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 2, 0, 0 );

        Console.WriteLine(
            "This example of the TimeSpan.Equals( TimeSpan, Time" +
            "Span ) and \nTimeSpan.Compare( TimeSpan, TimeSpan ) " +
            "methods generates the \nfollowing output by creating " +
            "several different TimeSpan \nobjects and comparing " +
            "them with a 2-hour TimeSpan.\n" );
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )",
            Left );

        // Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ),
            "TimeSpan( 0, 120, 0 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ),
            "TimeSpan( 2, 0, 1 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ),
            "TimeSpan( 2, 0, -1 )");
        CompareTimeSpans( Left, new TimeSpan( 72000000000 ),
            "TimeSpan( 72000000000 )" );
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12D ),
            "TimeSpan.FromDays( 1 / 12 )" );
    }
}

/*
This example of the TimeSpan.Equals( TimeSpan, TimeSpan ) and
TimeSpan.Compare( TimeSpan, TimeSpan ) methods generates the
following output by creating several different TimeSpan
objects and comparing them with a 2-hour TimeSpan.

Left: TimeSpan( 2, 0, 0 )             02:00:00

Right: TimeSpan( 0, 120, 0 )          02:00:00
TimeSpan.Equals( Left, Right )        True
TimeSpan.Compare( Left, Right )       0

Right: TimeSpan( 2, 0, 1 )            02:00:01
TimeSpan.Equals( Left, Right )        False
TimeSpan.Compare( Left, Right )       -1

Right: TimeSpan( 2, 0, -1 )           01:59:59
TimeSpan.Equals( Left, Right )        False
TimeSpan.Compare( Left, Right )       1

Right: TimeSpan( 72000000000 )        02:00:00
TimeSpan.Equals( Left, Right )        True
TimeSpan.Compare( Left, Right )       0

Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
TimeSpan.Equals( Left, Right )        True
TimeSpan.Compare( Left, Right )       0
*/

// Example of the TimeSpan::Compare( TimeSpan, TimeSpan ) and
// TimeSpan::Equals( TimeSpan, TimeSpan ) methods.
using namespace System;
const __wchar_t * protoFmt = L"{0,-38}{1}";

// Compare TimeSpan parameters, and display them with the results.
void CompareTimeSpans( TimeSpan Left, TimeSpan Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "TimeSpan::Equals( Left, Right )", TimeSpan::Equals( Left, Right ) );
   Console::WriteLine( dataFmt, "TimeSpan::Compare( Left, Right )", TimeSpan::Compare( Left, Right ) );
}

int main()
{
   TimeSpan Left = TimeSpan(2,0,0);
   Console::WriteLine( "This example of the TimeSpan::Equals( TimeSpan, TimeSpan "
   ") and \nTimeSpan::Compare( TimeSpan, TimeSpan ) "
   "methods generates the \nfollowing output by creating "
   "several different TimeSpan \nobjects and comparing "
   "them with a 2-hour TimeSpan.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "Left: TimeSpan( 2, 0, 0 )", Left );

   // Create objects to compare with a 2-hour TimeSpan.
   CompareTimeSpans( Left, TimeSpan(0,120,0), "TimeSpan( 0, 120, 0 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,1), "TimeSpan( 2, 0, 1 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,-1), "TimeSpan( 2, 0, -1 )" );
   CompareTimeSpans( Left, TimeSpan(72000000000), "TimeSpan( 72000000000 )" );
   CompareTimeSpans( Left, TimeSpan::FromDays( 1.0 / 12. ), "TimeSpan::FromDays( 1 / 12 )" );
}

/*
This example of the TimeSpan::Equals( TimeSpan, TimeSpan ) and
TimeSpan::Compare( TimeSpan, TimeSpan ) methods generates the
following output by creating several different TimeSpan
objects and comparing them with a 2-hour TimeSpan.

Left: TimeSpan( 2, 0, 0 )             02:00:00

Right: TimeSpan( 0, 120, 0 )          02:00:00
TimeSpan::Equals( Left, Right )       True
TimeSpan::Compare( Left, Right )      0

Right: TimeSpan( 2, 0, 1 )            02:00:01
TimeSpan::Equals( Left, Right )       False
TimeSpan::Compare( Left, Right )      -1

Right: TimeSpan( 2, 0, -1 )           01:59:59
TimeSpan::Equals( Left, Right )       False
TimeSpan::Compare( Left, Right )      1

Right: TimeSpan( 72000000000 )        02:00:00
TimeSpan::Equals( Left, Right )       True
TimeSpan::Compare( Left, Right )      0

Right: TimeSpan::FromDays( 1 / 12 )   02:00:00
TimeSpan::Equals( Left, Right )       True
TimeSpan::Compare( Left, Right )      0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
CompareTo
Equals


TimeSpan ..::.CompareTo 方法

TimeSpan
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

将此实例与指定对象或 TimeSpan 对象进行比较，并返回一个整数，该整数指示此实例是短于、等于还是长于指定对象或 TimeSpan 对象。

名称 说明
页首

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan ..::.CompareTo 方法 (Object)

TimeSpan
.
.
::
.
CompareTo 方法 (Object)
TimeSpan 结构

将此实例与指定对象进行比较，并返回一个整数，该整数指示此实例是短于、等于还是长于指定对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
以下值之一。
值
说明
-1
此实例短于
value
。
0
此实例等于
value
。
1
此实例长于
value
。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 TimeSpan。

无论 TimeSpan 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 参数必须是 TimeSpan 的实例或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）；否则将引发异常。

下面的示例使用 CompareTo 方法将几个 TimeSpan 结构和其他对象同一个引用 TimeSpan 结构进行比较。

' Example of the TimeSpan.CompareTo( Object ) and
' TimeSpan.Equals( Object ) methods.
Imports System
Imports Microsoft.VisualBasic

Module TSCompToEqualsObjDemo

    ' Compare the TimeSpan to the Object parameters,
    ' and display the Object parameters with the results.
    Sub CompTimeSpanToObject( Left as TimeSpan, Right as Object, _
        RightText as String )

        Console.WriteLine( "{0,-33}{1}", "Object: " & RightText, _
            Right )
        Console.WriteLine( "{0,-33}{1}", "Left.Equals( Object )", _
            Left.Equals( Right ) )
        Console.Write( "{0,-33}", "Left.CompareTo( Object )" )

        ' Catch the exception if CompareTo( ) throws one.
        Try
            Console.WriteLine( "{0}" & vbCrLf, _
                Left.CompareTo( Right ) )
        Catch ex As Exception
            Console.WriteLine( "Error: {0}" & vbCrLf, ex.Message )
        End Try
    End Sub

    Sub Main( )
        Dim Left as new TimeSpan( 0, 5, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan.Equals( Object ) " & _
            "and " & vbCrLf & "TimeSpan.CompareTo( Object ) " & _
            "methods generates the " & vbCrLf & _
            "following output by creating several " & _
            "different TimeSpan " & vbCrLf & "objects and " & _
            "comparing them with a 5-minute TimeSpan." & vbCrLf )
        Console.WriteLine( "{0,-33}{1}" & vbCrLf, _
            "Left: TimeSpan( 0, 5, 0 )", Left )

        ' Create objects to compare with a 5-minute TimeSpan.
        CompTimeSpanToObject( Left, new TimeSpan( 0, 0, 300 ), _
            "TimeSpan( 0, 0, 300 )" )
        CompTimeSpanToObject( Left, new TimeSpan( 0, 5, 1 ), _
            "TimeSpan( 0, 5, 1 )" )
        CompTimeSpanToObject( Left, new TimeSpan( 0, 5, -1 ), _
            "TimeSpan( 0, 5, -1 )" )
        CompTimeSpanToObject( Left, new TimeSpan( 3000000000 ), _
            "TimeSpan( 3000000000 )" )
        CompTimeSpanToObject( Left, 3000000000L, "Long 3000000000L" )
        CompTimeSpanToObject( Left, "00:05:00", _
            "String ""00:05:00""" )
    End Sub
End Module

' This example of the TimeSpan.Equals( Object ) and
' TimeSpan.CompareTo( Object ) methods generates the
' following output by creating several different TimeSpan
' objects and comparing them with a 5-minute TimeSpan.
'
' Left: TimeSpan( 0, 5, 0 )        00:05:00
'
' Object: TimeSpan( 0, 0, 300 )    00:05:00
' Left.Equals( Object )            True
' Left.CompareTo( Object )         0
'
' Object: TimeSpan( 0, 5, 1 )      00:05:01
' Left.Equals( Object )            False
' Left.CompareTo( Object )         -1
'
' Object: TimeSpan( 0, 5, -1 )     00:04:59
' Left.Equals( Object )            False
' Left.CompareTo( Object )         1
'
' Object: TimeSpan( 3000000000 )   00:05:00
' Left.Equals( Object )            True
' Left.CompareTo( Object )         0
'
' Object: Long 3000000000L         3000000000
' Left.Equals( Object )            False
' Left.CompareTo( Object )         Error: Object must be of type TimeSpan.
'
' Object: String "00:05:00"        00:05:00
' Left.Equals( Object )            False
' Left.CompareTo( Object )         Error: Object must be of type TimeSpan.

// Example of the TimeSpan.CompareTo( Object ) and
// TimeSpan.Equals( Object ) methods.
using System;

class TSCompToEqualsObjDemo
{
    // Compare the TimeSpan to the Object parameters,
    // and display the Object parameters with the results.
    static void CompTimeSpanToObject( TimeSpan Left, object Right,
        string RightText )
    {
        Console.WriteLine( "{0,-33}{1}", "Object: " + RightText,
            Right );
        Console.WriteLine( "{0,-33}{1}", "Left.Equals( Object )",
            Left.Equals( Right ) );
        Console.Write( "{0,-33}", "Left.CompareTo( Object )" );

        // Catch the exception if CompareTo( ) throws one.
        try
        {
            Console.WriteLine( "{0}\n", Left.CompareTo( Right ) );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "Error: {0}\n", ex.Message );
        }
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 0, 5, 0 );

        Console.WriteLine(
            "This example of the TimeSpan.Equals( Object ) " +
            "and \nTimeSpan.CompareTo( Object ) methods generates " +
            "the \nfollowing output by creating several different " +
            "TimeSpan \nobjects and comparing them with a " +
            "5-minute TimeSpan.\n" );
        Console.WriteLine( "{0,-33}{1}\n",
            "Left: TimeSpan( 0, 5, 0 )", Left );

        // Create objects to compare with a 5-minute TimeSpan.
        CompTimeSpanToObject( Left, new TimeSpan( 0, 0, 300 ),
            "TimeSpan( 0, 0, 300 )" );
        CompTimeSpanToObject( Left, new TimeSpan( 0, 5, 1 ),
            "TimeSpan( 0, 5, 1 )" );
        CompTimeSpanToObject( Left, new TimeSpan( 0, 5, -1 ),
            "TimeSpan( 0, 5, -1 )" );
        CompTimeSpanToObject( Left, new TimeSpan( 3000000000 ),
            "TimeSpan( 3000000000 )" );
        CompTimeSpanToObject( Left, 3000000000L,
            "long 3000000000L" );
        CompTimeSpanToObject( Left, "00:05:00",
            "string \"00:05:00\"" );
    }
}

/*
This example of the TimeSpan.Equals( Object ) and
TimeSpan.CompareTo( Object ) methods generates the
following output by creating several different TimeSpan
objects and comparing them with a 5-minute TimeSpan.

Left: TimeSpan( 0, 5, 0 )        00:05:00

Object: TimeSpan( 0, 0, 300 )    00:05:00
Left.Equals( Object )            True
Left.CompareTo( Object )         0

Object: TimeSpan( 0, 5, 1 )      00:05:01
Left.Equals( Object )            False
Left.CompareTo( Object )         -1

Object: TimeSpan( 0, 5, -1 )     00:04:59
Left.Equals( Object )            False
Left.CompareTo( Object )         1

Object: TimeSpan( 3000000000 )   00:05:00
Left.Equals( Object )            True
Left.CompareTo( Object )         0

Object: long 3000000000L         3000000000
Left.Equals( Object )            False
Left.CompareTo( Object )         Error: Object must be of type TimeSpan.

Object: string "00:05:00"        00:05:00
Left.Equals( Object )            False
Left.CompareTo( Object )         Error: Object must be of type TimeSpan.
*/

// Example of the TimeSpan::CompareTo( Object* ) and
// TimeSpan::Equals( Object* ) methods.
using namespace System;

// Compare the TimeSpan to the Object parameters,
// and display the Object parameters with the results.
void CompTimeSpanToObject( TimeSpan Left, Object^ Right, String^ RightText )
{
   Console::WriteLine( "{0,-33}{1}", String::Concat( "Object: ", RightText ), Right );
   Console::WriteLine( "{0,-33}{1}", "Left.Equals( Object )", Left.Equals( Right ) );
   Console::Write( "{0,-33}", "Left.CompareTo( Object )" );

   // Catch the exception if CompareTo( ) throws one.
   try
   {
      Console::WriteLine( "{0}\n", Left.CompareTo( Right ) );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "Error: {0}\n", ex->Message );
   }

}

int main()
{
   TimeSpan Left = TimeSpan(0,5,0);
   Console::WriteLine( "This example of the TimeSpan::Equals( Object* ) "
   "and \nTimeSpan::CompareTo( Object* ) methods generates "
   "the \nfollowing output by creating several different "
   "TimeSpan \nobjects and comparing them with a "
   "5-minute TimeSpan.\n" );
   Console::WriteLine( "{0,-33}{1}\n", "Left: TimeSpan( 0, 5, 0 )", Left );

   // Create objects to compare with a 5-minute TimeSpan.
   CompTimeSpanToObject( Left, TimeSpan(0,0,300), "TimeSpan( 0, 0, 300 )" );
   CompTimeSpanToObject( Left, TimeSpan(0,5,1), "TimeSpan( 0, 5, 1 )" );
   CompTimeSpanToObject( Left, TimeSpan(0,5,-1), "TimeSpan( 0, 5, -1 )" );
   CompTimeSpanToObject( Left, TimeSpan(3000000000), "TimeSpan( 3000000000 )" );
   CompTimeSpanToObject( Left, 3000000000L, "__int64 3000000000L" );
   CompTimeSpanToObject( Left, "00:05:00", "String \"00:05:00\"" );
}

/*
This example of the TimeSpan::Equals( Object* ) and
TimeSpan::CompareTo( Object* ) methods generates the
following output by creating several different TimeSpan
objects and comparing them with a 5-minute TimeSpan.

Left: TimeSpan( 0, 5, 0 )        00:05:00

Object: TimeSpan( 0, 0, 300 )    00:05:00
Left.Equals( Object )            True
Left.CompareTo( Object )         0

Object: TimeSpan( 0, 5, 1 )      00:05:01
Left.Equals( Object )            False
Left.CompareTo( Object )         -1

Object: TimeSpan( 0, 5, -1 )     00:04:59
Left.Equals( Object )            False
Left.CompareTo( Object )         1

Object: TimeSpan( 3000000000 )   00:05:00
Left.Equals( Object )            True
Left.CompareTo( Object )         0

Object: __int64 3000000000L      3000000000
Left.Equals( Object )            False
Left.CompareTo( Object )         Error: Object must be of type TimeSpan.

Object: String "00:05:00"        00:05:00
Left.Equals( Object )            False
Left.CompareTo( Object )         Error: Object must be of type TimeSpan.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
CompareTo 重载
System 命名空间
Object
Compare
Equals


TimeSpan ..::.CompareTo 方法 (TimeSpan)

TimeSpan
.
.
::
.
CompareTo 方法 (TimeSpan)
TimeSpan 结构

将此实例与指定的 TimeSpan 对象进行比较，并返回一个整数，该整数指示此实例是短于、等于还是长于 TimeSpan 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As TimeSpan _ ) As Integer
public int CompareTo( TimeSpan value )
public: virtual int CompareTo( TimeSpan value ) sealed
abstract CompareTo : value:TimeSpan -> int override CompareTo : value:TimeSpan -> int
参数
value
类型： System TimeSpan
要与此实例进行比较的对象。
返回值
类型： System Int32
一个有符号数字，该数字指示此实例与
value
的相对值。
值
说明
负整数
此实例短于
value
。
零
此实例等于
value
。
正整数
此实例长于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 TimeSpan..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

下面的示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
CompareTo 重载
System 命名空间


TimeSpan ..::.Duration 方法

TimeSpan
.
.
::
.
Duration 方法
TimeSpan 结构

返回新的 TimeSpan 对象，其值是当前 TimeSpan 对象的绝对值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Duration As TimeSpan
public TimeSpan Duration()
public:
TimeSpan Duration()
member Duration : unit -> TimeSpan

返回值

类型： System TimeSpan
一个新对象，其值是当前 TimeSpan 对象的绝对值。
异常 | 条件
OverflowException | 此实例的值为 TimeSpan..::.MinValue。

下面的代码示例对几个 TimeSpan 对象应用 Duration 方法。

' Example of the TimeSpan.Duration( ) and TimeSpan.Negate( ) methods,
' and the TimeSpan Unary Negation and Unary Plus operators.
Imports System
Imports Microsoft.VisualBasic

Module DuraNegaUnaryDemo

    Const dataFmt As String = "{0,22}{1,22}{2,22}"

    Sub ShowDurationNegate( interval As TimeSpan )

        ' Display the TimeSpan value and the results of the
        ' Duration and Negate methods.
        Console.WriteLine( dataFmt, _
            interval, interval.Duration( ), interval.Negate( ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of TimeSpan.Duration( ), " & _
            "TimeSpan.Negate( ), " & vbCrLf & _
            "and the TimeSpan Unary Negation and " & _
            "Unary Plus operators " & vbCrLf & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( dataFmt, _
            "TimeSpan", "Duration( )", "Negate( )" )
        Console.WriteLine( dataFmt, _
            "--------", "-----------", "---------" )

        ' Create TimeSpan objects and apply the Unary Negation
        ' and Unary Plus operators to them.
        ShowDurationNegate( new TimeSpan( 1 ) )
        ShowDurationNegate( new TimeSpan( -1234567 ) )
        ShowDurationNegate( TimeSpan.op_UnaryPlus( _
            new TimeSpan( 0, 0, 10, -20, -30 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryPlus( _
            new TimeSpan( 0, -10, 20, -30, 40 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryNegation( _
            new TimeSpan( 1, 10, 20, 40, 160 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryNegation( _
            new TimeSpan( -10, -20, -30, -40, -50 ) ) )
    End Sub
End Module

' This example of TimeSpan.Duration( ), TimeSpan.Negate( ),
' and the TimeSpan Unary Negation and Unary Plus operators
' generates the following output.
'
'               TimeSpan           Duration( )             Negate( )
'               --------           -----------             ---------
'       00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
'      -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
'       00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
'      -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
'    -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
'    10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000

// Example of the TimeSpan.Duration( ) and TimeSpan.Negate( ) methods,
// and the TimeSpan Unary Negation and Unary Plus operators.
using System;

class DuraNegaUnaryDemo
{
    const string dataFmt = "{0,22}{1,22}{2,22}" ;

    static void ShowDurationNegate( TimeSpan interval )
    {
        // Display the TimeSpan value and the results of the
        // Duration and Negate methods.
        Console.WriteLine( dataFmt,
            interval, interval.Duration( ), interval.Negate( ) );
    }

    static void Main()
    {
        Console.WriteLine(
            "This example of TimeSpan.Duration( ), " +
            "TimeSpan.Negate( ), \nand the TimeSpan Unary " +
            "Negation and Unary Plus operators \n" +
            "generates the following output.\n" );
        Console.WriteLine( dataFmt,
            "TimeSpan", "Duration( )", "Negate( )" );
        Console.WriteLine( dataFmt,
            "--------", "-----------", "---------" );

        // Create TimeSpan objects and apply the Unary Negation
        // and Unary Plus operators to them.
        ShowDurationNegate( new TimeSpan( 1 ) );
        ShowDurationNegate( new TimeSpan( -1234567 ) );
        ShowDurationNegate(
            + new TimeSpan( 0, 0, 10, -20, -30 ) );
        ShowDurationNegate(
            + new TimeSpan( 0, -10, 20, -30, 40 ) );
        ShowDurationNegate(
            - new TimeSpan( 1, 10, 20, 40, 160 ) );
        ShowDurationNegate(
            - new TimeSpan( -10, -20, -30, -40, -50 ) );
    }
}

/*
This example of TimeSpan.Duration( ), TimeSpan.Negate( ),
and the TimeSpan Unary Negation and Unary Plus operators
generates the following output.

              TimeSpan           Duration( )             Negate( )
              --------           -----------             ---------
      00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
     -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
      00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
     -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
   -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
   10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000
*/

// Example of the TimeSpan::Duration( ) and TimeSpan::Negate( ) methods,
// and the TimeSpan Unary Negation and Unary Plus operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,22}{1,22}{2,22}";
void ShowDurationNegate( TimeSpan interval )
{

   // Display the TimeSpan value and the results of the
   // Duration and Negate methods.
   Console::WriteLine( gcnew String( protoFmt ), interval, interval.Duration(), interval.Negate() );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::Duration( ), "
   "TimeSpan::Negate( ), \nand the TimeSpan Unary "
   "Negation and Unary Plus operators \n"
   "generates the following output.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "TimeSpan", "Duration( )", "Negate( )" );
   Console::WriteLine( gcnew String( protoFmt ), "--------", "-----------", "---------" );

   // Create TimeSpan objects and apply the Unary Negation
   // and Unary Plus operators to them.
   ShowDurationNegate( TimeSpan(1) );
   ShowDurationNegate( TimeSpan( -1234567) );
   ShowDurationNegate(  +TimeSpan(0,0,10,-20,-30) );
   ShowDurationNegate(  +TimeSpan(0,-10,20,-30,40) );
   ShowDurationNegate(  -TimeSpan(1,10,20,40,160) );
   ShowDurationNegate(  -TimeSpan( -10,-20,-30,-40,-50) );
}

/*
This example of TimeSpan::Duration( ), TimeSpan::Negate( ),
and the TimeSpan Unary Negation and Unary Plus operators
generates the following output.

              TimeSpan           Duration( )             Negate( )
              --------           -----------             ---------
      00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
     -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
      00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
     -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
   -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
   10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Ticks


TimeSpan ..::.Equals 方法

TimeSpan
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

返回一个值，该值指示 TimeSpan 的两个实例是否相等。

名称 说明
页首

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan ..::.Equals 方法 (Object)

TimeSpan
.
.
::
.
Equals 方法 (Object)
TimeSpan 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    value As Object _
) As Boolean
public override bool Equals(
    Object value
)
public:
virtual bool Equals(
    Object^ value
) override
abstract Equals :
        value:Object -> bool
override Equals :
        value:Object -> bool

参数

value
类型： System Object
与此实例进行比较的对象。

返回值

类型： System Boolean
如果 value 是表示与当前 TimeSpan 结构具有相同时间间隔的 TimeSpan 对象，则为 true；否则为 false。

下面的代码示例使用 Equals 方法将几个 TimeSpan 和其他对象同一个参考 TimeSpan 进行比较。

' Example of the TimeSpan.CompareTo( Object ) and
' TimeSpan.Equals( Object ) methods.
Imports System
Imports Microsoft.VisualBasic

Module TSCompToEqualsObjDemo

    ' Compare the TimeSpan to the Object parameters,
    ' and display the Object parameters with the results.
    Sub CompTimeSpanToObject( Left as TimeSpan, Right as Object, _
        RightText as String )

        Console.WriteLine( "{0,-33}{1}", "Object: " & RightText, _
            Right )
        Console.WriteLine( "{0,-33}{1}", "Left.Equals( Object )", _
            Left.Equals( Right ) )
        Console.Write( "{0,-33}", "Left.CompareTo( Object )" )

        ' Catch the exception if CompareTo( ) throws one.
        Try
            Console.WriteLine( "{0}" & vbCrLf, _
                Left.CompareTo( Right ) )
        Catch ex As Exception
            Console.WriteLine( "Error: {0}" & vbCrLf, ex.Message )
        End Try
    End Sub

    Sub Main( )
        Dim Left as new TimeSpan( 0, 5, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan.Equals( Object ) " & _
            "and " & vbCrLf & "TimeSpan.CompareTo( Object ) " & _
            "methods generates the " & vbCrLf & _
            "following output by creating several " & _
            "different TimeSpan " & vbCrLf & "objects and " & _
            "comparing them with a 5-minute TimeSpan." & vbCrLf )
        Console.WriteLine( "{0,-33}{1}" & vbCrLf, _
            "Left: TimeSpan( 0, 5, 0 )", Left )

        ' Create objects to compare with a 5-minute TimeSpan.
        CompTimeSpanToObject( Left, new TimeSpan( 0, 0, 300 ), _
            "TimeSpan( 0, 0, 300 )" )
        CompTimeSpanToObject( Left, new TimeSpan( 0, 5, 1 ), _
            "TimeSpan( 0, 5, 1 )" )
        CompTimeSpanToObject( Left, new TimeSpan( 0, 5, -1 ), _
            "TimeSpan( 0, 5, -1 )" )
        CompTimeSpanToObject( Left, new TimeSpan( 3000000000 ), _
            "TimeSpan( 3000000000 )" )
        CompTimeSpanToObject( Left, 3000000000L, "Long 3000000000L" )
        CompTimeSpanToObject( Left, "00:05:00", _
            "String ""00:05:00""" )
    End Sub
End Module

' This example of the TimeSpan.Equals( Object ) and
' TimeSpan.CompareTo( Object ) methods generates the
' following output by creating several different TimeSpan
' objects and comparing them with a 5-minute TimeSpan.
'
' Left: TimeSpan( 0, 5, 0 )        00:05:00
'
' Object: TimeSpan( 0, 0, 300 )    00:05:00
' Left.Equals( Object )            True
' Left.CompareTo( Object )         0
'
' Object: TimeSpan( 0, 5, 1 )      00:05:01
' Left.Equals( Object )            False
' Left.CompareTo( Object )         -1
'
' Object: TimeSpan( 0, 5, -1 )     00:04:59
' Left.Equals( Object )            False
' Left.CompareTo( Object )         1
'
' Object: TimeSpan( 3000000000 )   00:05:00
' Left.Equals( Object )            True
' Left.CompareTo( Object )         0
'
' Object: Long 3000000000L         3000000000
' Left.Equals( Object )            False
' Left.CompareTo( Object )         Error: Object must be of type TimeSpan.
'
' Object: String "00:05:00"        00:05:00
' Left.Equals( Object )            False
' Left.CompareTo( Object )         Error: Object must be of type TimeSpan.

// Example of the TimeSpan.CompareTo( Object ) and
// TimeSpan.Equals( Object ) methods.
using System;

class TSCompToEqualsObjDemo
{
    // Compare the TimeSpan to the Object parameters,
    // and display the Object parameters with the results.
    static void CompTimeSpanToObject( TimeSpan Left, object Right,
        string RightText )
    {
        Console.WriteLine( "{0,-33}{1}", "Object: " + RightText,
            Right );
        Console.WriteLine( "{0,-33}{1}", "Left.Equals( Object )",
            Left.Equals( Right ) );
        Console.Write( "{0,-33}", "Left.CompareTo( Object )" );

        // Catch the exception if CompareTo( ) throws one.
        try
        {
            Console.WriteLine( "{0}\n", Left.CompareTo( Right ) );
        }
        catch( Exception ex )
        {
            Console.WriteLine( "Error: {0}\n", ex.Message );
        }
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 0, 5, 0 );

        Console.WriteLine(
            "This example of the TimeSpan.Equals( Object ) " +
            "and \nTimeSpan.CompareTo( Object ) methods generates " +
            "the \nfollowing output by creating several different " +
            "TimeSpan \nobjects and comparing them with a " +
            "5-minute TimeSpan.\n" );
        Console.WriteLine( "{0,-33}{1}\n",
            "Left: TimeSpan( 0, 5, 0 )", Left );

        // Create objects to compare with a 5-minute TimeSpan.
        CompTimeSpanToObject( Left, new TimeSpan( 0, 0, 300 ),
            "TimeSpan( 0, 0, 300 )" );
        CompTimeSpanToObject( Left, new TimeSpan( 0, 5, 1 ),
            "TimeSpan( 0, 5, 1 )" );
        CompTimeSpanToObject( Left, new TimeSpan( 0, 5, -1 ),
            "TimeSpan( 0, 5, -1 )" );
        CompTimeSpanToObject( Left, new TimeSpan( 3000000000 ),
            "TimeSpan( 3000000000 )" );
        CompTimeSpanToObject( Left, 3000000000L,
            "long 3000000000L" );
        CompTimeSpanToObject( Left, "00:05:00",
            "string \"00:05:00\"" );
    }
}

/*
This example of the TimeSpan.Equals( Object ) and
TimeSpan.CompareTo( Object ) methods generates the
following output by creating several different TimeSpan
objects and comparing them with a 5-minute TimeSpan.

Left: TimeSpan( 0, 5, 0 )        00:05:00

Object: TimeSpan( 0, 0, 300 )    00:05:00
Left.Equals( Object )            True
Left.CompareTo( Object )         0

Object: TimeSpan( 0, 5, 1 )      00:05:01
Left.Equals( Object )            False
Left.CompareTo( Object )         -1

Object: TimeSpan( 0, 5, -1 )     00:04:59
Left.Equals( Object )            False
Left.CompareTo( Object )         1

Object: TimeSpan( 3000000000 )   00:05:00
Left.Equals( Object )            True
Left.CompareTo( Object )         0

Object: long 3000000000L         3000000000
Left.Equals( Object )            False
Left.CompareTo( Object )         Error: Object must be of type TimeSpan.

Object: string "00:05:00"        00:05:00
Left.Equals( Object )            False
Left.CompareTo( Object )         Error: Object must be of type TimeSpan.
*/

// Example of the TimeSpan::CompareTo( Object* ) and
// TimeSpan::Equals( Object* ) methods.
using namespace System;

// Compare the TimeSpan to the Object parameters,
// and display the Object parameters with the results.
void CompTimeSpanToObject( TimeSpan Left, Object^ Right, String^ RightText )
{
   Console::WriteLine( "{0,-33}{1}", String::Concat( "Object: ", RightText ), Right );
   Console::WriteLine( "{0,-33}{1}", "Left.Equals( Object )", Left.Equals( Right ) );
   Console::Write( "{0,-33}", "Left.CompareTo( Object )" );

   // Catch the exception if CompareTo( ) throws one.
   try
   {
      Console::WriteLine( "{0}\n", Left.CompareTo( Right ) );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "Error: {0}\n", ex->Message );
   }

}

int main()
{
   TimeSpan Left = TimeSpan(0,5,0);
   Console::WriteLine( "This example of the TimeSpan::Equals( Object* ) "
   "and \nTimeSpan::CompareTo( Object* ) methods generates "
   "the \nfollowing output by creating several different "
   "TimeSpan \nobjects and comparing them with a "
   "5-minute TimeSpan.\n" );
   Console::WriteLine( "{0,-33}{1}\n", "Left: TimeSpan( 0, 5, 0 )", Left );

   // Create objects to compare with a 5-minute TimeSpan.
   CompTimeSpanToObject( Left, TimeSpan(0,0,300), "TimeSpan( 0, 0, 300 )" );
   CompTimeSpanToObject( Left, TimeSpan(0,5,1), "TimeSpan( 0, 5, 1 )" );
   CompTimeSpanToObject( Left, TimeSpan(0,5,-1), "TimeSpan( 0, 5, -1 )" );
   CompTimeSpanToObject( Left, TimeSpan(3000000000), "TimeSpan( 3000000000 )" );
   CompTimeSpanToObject( Left, 3000000000L, "__int64 3000000000L" );
   CompTimeSpanToObject( Left, "00:05:00", "String \"00:05:00\"" );
}

/*
This example of the TimeSpan::Equals( Object* ) and
TimeSpan::CompareTo( Object* ) methods generates the
following output by creating several different TimeSpan
objects and comparing them with a 5-minute TimeSpan.

Left: TimeSpan( 0, 5, 0 )        00:05:00

Object: TimeSpan( 0, 0, 300 )    00:05:00
Left.Equals( Object )            True
Left.CompareTo( Object )         0

Object: TimeSpan( 0, 5, 1 )      00:05:01
Left.Equals( Object )            False
Left.CompareTo( Object )         -1

Object: TimeSpan( 0, 5, -1 )     00:04:59
Left.Equals( Object )            False
Left.CompareTo( Object )         1

Object: TimeSpan( 3000000000 )   00:05:00
Left.Equals( Object )            True
Left.CompareTo( Object )         0

Object: __int64 3000000000L      3000000000
Left.Equals( Object )            False
Left.CompareTo( Object )         Error: Object must be of type TimeSpan.

Object: String "00:05:00"        00:05:00
Left.Equals( Object )            False
Left.CompareTo( Object )         Error: Object must be of type TimeSpan.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
Equals 重载
System 命名空间
Object
Compare
CompareTo


TimeSpan ..::.Equals 方法 (TimeSpan)

TimeSpan
.
.
::
.
Equals 方法 (TimeSpan)
TimeSpan 结构

返回一个值，该值指示此实例是否与指定的 TimeSpan 对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As TimeSpan _
) As Boolean
public bool Equals(
    TimeSpan obj
)
public:
virtual bool Equals(
    TimeSpan obj
) sealed
abstract Equals :
        obj:TimeSpan -> bool
override Equals :
        obj:TimeSpan -> bool

参数

obj
类型： System TimeSpan
与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 表示的时间间隔与此实例相同，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

下面的示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
Equals 重载
System 命名空间
Equals
CompareTo


TimeSpan ..::.Equals 方法 (TimeSpan, TimeSpan)

TimeSpan
.
.
::
.
Equals 方法 (TimeSpan, TimeSpan)
TimeSpan 结构

返回一个值，该值指示 TimeSpan 的两个指定实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Equals ( _
    t1 As TimeSpan, _
    t2 As TimeSpan _
) As Boolean
public static bool Equals(
    TimeSpan t1,
    TimeSpan t2
)
public:
static bool Equals(
    TimeSpan t1,
    TimeSpan t2
)
static member Equals :
        t1:TimeSpan *
        t2:TimeSpan -> bool

参数

t1
类型： System TimeSpan
要比较的第一个时间间隔。
t2
类型： System TimeSpan
要比较的第二个时间间隔。

返回值

类型： System Boolean
如果 t1 和 t2 的值相等，则为 true；否则为 false。

下面的示例使用静态 Equals 方法将几个 TimeSpan 对象同一个参考 TimeSpan 对象进行比较。

' Example of the TimeSpan.Compare( TimeSpan, TimeSpan ) and
' TimeSpan.Equals( TimeSpan, TimeSpan ) methods.
Imports System
Imports Microsoft.VisualBasic

Module TSCompareEqualsDemo

    Const dataFmt As String = "{0,-38}{1}"

    ' Compare TimeSpan parameters, and display them with the results.
    Sub CompareTimeSpans( Left as TimeSpan, Right as TimeSpan, _
        RightText as String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, "TimeSpan.Equals( Left, Right )", _
            TimeSpan.Equals( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.Compare( Left, Right )", _
            TimeSpan.Compare( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left as new TimeSpan( 2, 0, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan.Equals( TimeSpan, " & _
            "TimeSpan ) and " & vbCrLf & "TimeSpan.Compare( " & _
            "TimeSpan, TimeSpan ) methods generates the " & vbCrLf & _
            "following output by creating several " & _
            "different TimeSpan " & vbCrLf & "objects and " & _
            "comparing them with a 2-hour TimeSpan." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )", Left )

        ' Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ), _
            "TimeSpan( 0, 120, 0 )" )
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ), _
            "TimeSpan( 2, 0, 1 )" )
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ), _
            "TimeSpan( 2, 0, -1 )" )
        CompareTimeSpans( Left, new TimeSpan( 72000000000 ), _
            "TimeSpan( 72000000000 )" )
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12R ), _
            "TimeSpan.FromDays( 1 / 12 )" )
    End Sub
End Module

' This example of the TimeSpan.Equals( TimeSpan, TimeSpan ) and
' TimeSpan.Compare( TimeSpan, TimeSpan ) methods generates the
' following output by creating several different TimeSpan
' objects and comparing them with a 2-hour TimeSpan.
'
' Left: TimeSpan( 2, 0, 0 )             02:00:00
'
' Right: TimeSpan( 0, 120, 0 )          02:00:00
' TimeSpan.Equals( Left, Right )        True
' TimeSpan.Compare( Left, Right )       0
'
' Right: TimeSpan( 2, 0, 1 )            02:00:01
' TimeSpan.Equals( Left, Right )        False
' TimeSpan.Compare( Left, Right )       -1
'
' Right: TimeSpan( 2, 0, -1 )           01:59:59
' TimeSpan.Equals( Left, Right )        False
' TimeSpan.Compare( Left, Right )       1
'
' Right: TimeSpan( 72000000000 )        02:00:00
' TimeSpan.Equals( Left, Right )        True
' TimeSpan.Compare( Left, Right )       0
'
' Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
' TimeSpan.Equals( Left, Right )        True
' TimeSpan.Compare( Left, Right )       0

// Example of the TimeSpan.Compare( TimeSpan, TimeSpan ) and
// TimeSpan.Equals( TimeSpan, TimeSpan ) methods.
using System;

class TSCompareEqualsDemo
{
    const string dataFmt = "{0,-38}{1}" ;

    // Compare TimeSpan parameters, and display them with the results.
    static void CompareTimeSpans( TimeSpan Left, TimeSpan Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "TimeSpan.Equals( Left, Right )",
            TimeSpan.Equals( Left, Right ) );
        Console.WriteLine( dataFmt,
            "TimeSpan.Compare( Left, Right )",
            TimeSpan.Compare( Left, Right ) );
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 2, 0, 0 );

        Console.WriteLine(
            "This example of the TimeSpan.Equals( TimeSpan, Time" +
            "Span ) and \nTimeSpan.Compare( TimeSpan, TimeSpan ) " +
            "methods generates the \nfollowing output by creating " +
            "several different TimeSpan \nobjects and comparing " +
            "them with a 2-hour TimeSpan.\n" );
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )",
            Left );

        // Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ),
            "TimeSpan( 0, 120, 0 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ),
            "TimeSpan( 2, 0, 1 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ),
            "TimeSpan( 2, 0, -1 )");
        CompareTimeSpans( Left, new TimeSpan( 72000000000 ),
            "TimeSpan( 72000000000 )" );
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12D ),
            "TimeSpan.FromDays( 1 / 12 )" );
    }
}

/*
This example of the TimeSpan.Equals( TimeSpan, TimeSpan ) and
TimeSpan.Compare( TimeSpan, TimeSpan ) methods generates the
following output by creating several different TimeSpan
objects and comparing them with a 2-hour TimeSpan.

Left: TimeSpan( 2, 0, 0 )             02:00:00

Right: TimeSpan( 0, 120, 0 )          02:00:00
TimeSpan.Equals( Left, Right )        True
TimeSpan.Compare( Left, Right )       0

Right: TimeSpan( 2, 0, 1 )            02:00:01
TimeSpan.Equals( Left, Right )        False
TimeSpan.Compare( Left, Right )       -1

Right: TimeSpan( 2, 0, -1 )           01:59:59
TimeSpan.Equals( Left, Right )        False
TimeSpan.Compare( Left, Right )       1

Right: TimeSpan( 72000000000 )        02:00:00
TimeSpan.Equals( Left, Right )        True
TimeSpan.Compare( Left, Right )       0

Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
TimeSpan.Equals( Left, Right )        True
TimeSpan.Compare( Left, Right )       0
*/

// Example of the TimeSpan::Compare( TimeSpan, TimeSpan ) and
// TimeSpan::Equals( TimeSpan, TimeSpan ) methods.
using namespace System;
const __wchar_t * protoFmt = L"{0,-38}{1}";

// Compare TimeSpan parameters, and display them with the results.
void CompareTimeSpans( TimeSpan Left, TimeSpan Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "TimeSpan::Equals( Left, Right )", TimeSpan::Equals( Left, Right ) );
   Console::WriteLine( dataFmt, "TimeSpan::Compare( Left, Right )", TimeSpan::Compare( Left, Right ) );
}

int main()
{
   TimeSpan Left = TimeSpan(2,0,0);
   Console::WriteLine( "This example of the TimeSpan::Equals( TimeSpan, TimeSpan "
   ") and \nTimeSpan::Compare( TimeSpan, TimeSpan ) "
   "methods generates the \nfollowing output by creating "
   "several different TimeSpan \nobjects and comparing "
   "them with a 2-hour TimeSpan.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "Left: TimeSpan( 2, 0, 0 )", Left );

   // Create objects to compare with a 2-hour TimeSpan.
   CompareTimeSpans( Left, TimeSpan(0,120,0), "TimeSpan( 0, 120, 0 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,1), "TimeSpan( 2, 0, 1 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,-1), "TimeSpan( 2, 0, -1 )" );
   CompareTimeSpans( Left, TimeSpan(72000000000), "TimeSpan( 72000000000 )" );
   CompareTimeSpans( Left, TimeSpan::FromDays( 1.0 / 12. ), "TimeSpan::FromDays( 1 / 12 )" );
}

/*
This example of the TimeSpan::Equals( TimeSpan, TimeSpan ) and
TimeSpan::Compare( TimeSpan, TimeSpan ) methods generates the
following output by creating several different TimeSpan
objects and comparing them with a 2-hour TimeSpan.

Left: TimeSpan( 2, 0, 0 )             02:00:00

Right: TimeSpan( 0, 120, 0 )          02:00:00
TimeSpan::Equals( Left, Right )       True
TimeSpan::Compare( Left, Right )      0

Right: TimeSpan( 2, 0, 1 )            02:00:01
TimeSpan::Equals( Left, Right )       False
TimeSpan::Compare( Left, Right )      -1

Right: TimeSpan( 2, 0, -1 )           01:59:59
TimeSpan::Equals( Left, Right )       False
TimeSpan::Compare( Left, Right )      1

Right: TimeSpan( 72000000000 )        02:00:00
TimeSpan::Equals( Left, Right )       True
TimeSpan::Compare( Left, Right )      0

Right: TimeSpan::FromDays( 1 / 12 )   02:00:00
TimeSpan::Equals( Left, Right )       True
TimeSpan::Compare( Left, Right )      0
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
Equals 重载
System 命名空间
Boolean
Compare
CompareTo


TimeSpan ..::.FromDays 方法

TimeSpan
.
.
::
.
FromDays 方法
TimeSpan 结构

返回表示指定天数的 TimeSpan，其中对天数的指定精确到最接近的毫秒。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromDays ( _
    value As Double _
) As TimeSpan
public static TimeSpan FromDays(
    double value
)
public:
static TimeSpan FromDays(
    double value
)
static member FromDays :
        value:float -> TimeSpan

参数

value
类型： System Double
天数，精确到最接近的毫秒。

返回值

类型： System TimeSpan
表示 value 的对象。
异常 | 条件
OverflowException | value 小于 MinValue 或大于 MaxValue。 - 或 - value 为 Double..::.PositiveInfinity。 - 或 - value 为 Double..::.NegativeInfinity。
ArgumentException | value 等于 Double..::.NaN。

value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会引发 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会引发 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会引发 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会引发 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。

' The following throws an OverflowException at runtime
Dim maxSpan As TimeSpan = TimeSpan.FromDays(TimeSpan.MaxValue.TotalDays)

// The following throws an OverflowException at runtime
TimeSpan maxSpan = TimeSpan.FromDays(TimeSpan.MaxValue.TotalDays);

下面的代码示例使用 FromDays 方法创建几个 TimeSpan 对象。

' Example of the TimeSpan.FromDays( Double ) method.
Imports System
Imports Microsoft.VisualBasic

Module FromDaysDemo

    Sub GenTimeSpanFromDays( days As Double )

        ' Create a TimeSpan object and TimeSpan string from
        ' a number of days.
        Dim interval As TimeSpan = _
            TimeSpan.FromDays( days )
        Dim timeInterval As String = interval.ToString( )

        ' Pad the end of the TimeSpan string with spaces if it
        ' does not contain milliseconds.
        Dim pIndex As Integer = timeInterval.IndexOf( ":"c )
        pIndex = timeInterval.IndexOf( "."c, pIndex )
        If pIndex < 0 Then  timeInterval &= "        "

        Console.WriteLine( "{0,21}{1,26}", days, timeInterval )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of " & _
            "TimeSpan.FromDays( Double )" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,21}{1,18}", _
            "FromDays", "TimeSpan" )
        Console.WriteLine( "{0,21}{1,18}", _
            "--------", "--------" )

        GenTimeSpanFromDays( 0.000000006 )
        GenTimeSpanFromDays( 0.000000017 )
        GenTimeSpanFromDays( 0.000123456 )
        GenTimeSpanFromDays( 1.234567898 )
        GenTimeSpanFromDays( 12345.678987654 )
        GenTimeSpanFromDays( 0.000011574 )
        GenTimeSpanFromDays( 0.000694444 )
        GenTimeSpanFromDays( 0.041666666 )
        GenTimeSpanFromDays( 1 )
        GenTimeSpanFromDays( 20.84745602 )
    End Sub
End Module

' This example of TimeSpan.FromDays( Double )
' generates the following output.
'
'              FromDays          TimeSpan
'              --------          --------
'                 6E-09          00:00:00.0010000
'               1.7E-08          00:00:00.0010000
'           0.000123456          00:00:10.6670000
'           1.234567898        1.05:37:46.6660000
'       12345.678987654    12345.16:17:44.5330000
'            1.1574E-05          00:00:01
'           0.000694444          00:01:00
'           0.041666666          01:00:00
'                     1        1.00:00:00
'           20.84745602       20.20:20:20.2000000

// Example of the TimeSpan.FromDays( double ) method.
using System;

class FromDaysDemo
{
    static void GenTimeSpanFromDays( double days )
    {
        // Create a TimeSpan object and TimeSpan string from
        // a number of days.
        TimeSpan interval = TimeSpan.FromDays( days );
        string   timeInterval = interval.ToString( );

        // Pad the end of the TimeSpan string with spaces if it
        // does not contain milliseconds.
        int pIndex = timeInterval.IndexOf( ':' );
        pIndex = timeInterval.IndexOf( '.', pIndex );
        if( pIndex < 0 )   timeInterval += "        ";

        Console.WriteLine( "{0,21}{1,26}", days, timeInterval );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of TimeSpan.FromDays( double )\n" +
            "generates the following output.\n" );
        Console.WriteLine( "{0,21}{1,18}",
            "FromDays", "TimeSpan" );
        Console.WriteLine( "{0,21}{1,18}",
            "--------", "--------" );

        GenTimeSpanFromDays( 0.000000006 );
        GenTimeSpanFromDays( 0.000000017 );
        GenTimeSpanFromDays( 0.000123456 );
        GenTimeSpanFromDays( 1.234567898 );
        GenTimeSpanFromDays( 12345.678987654 );
        GenTimeSpanFromDays( 0.000011574 );
        GenTimeSpanFromDays( 0.000694444 );
        GenTimeSpanFromDays( 0.041666666 );
        GenTimeSpanFromDays( 1 );
        GenTimeSpanFromDays( 20.84745602 );
    }
}

/*
This example of TimeSpan.FromDays( double )
generates the following output.

             FromDays          TimeSpan
             --------          --------
                6E-09          00:00:00.0010000
              1.7E-08          00:00:00.0010000
          0.000123456          00:00:10.6670000
          1.234567898        1.05:37:46.6660000
      12345.678987654    12345.16:17:44.5330000
           1.1574E-05          00:00:01
          0.000694444          00:01:00
          0.041666666          01:00:00
                    1        1.00:00:00
          20.84745602       20.20:20:20.2000000
*/

// Example of the TimeSpan::FromDays( double ) method.
using namespace System;
void GenTimeSpanFromDays( double days )
{

   // Create a TimeSpan object and TimeSpan string from
   // a number of days.
   TimeSpan interval = TimeSpan::FromDays( days );
   String^ timeInterval = interval.ToString();

   // Pad the end of the TimeSpan string with spaces if it
   // does not contain milliseconds.
   int pIndex = timeInterval->IndexOf( ':' );
   pIndex = timeInterval->IndexOf( '.', pIndex );
   if ( pIndex < 0 )
      timeInterval = String::Concat( timeInterval, "        " );

   Console::WriteLine( "{0,21}{1,26}", days, timeInterval );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::FromDays( double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "{0,21}{1,18}", "FromDays", "TimeSpan" );
   Console::WriteLine( "{0,21}{1,18}", "--------", "--------" );
   GenTimeSpanFromDays( 0.000000006 );
   GenTimeSpanFromDays( 0.000000017 );
   GenTimeSpanFromDays( 0.000123456 );
   GenTimeSpanFromDays( 1.234567898 );
   GenTimeSpanFromDays( 12345.678987654 );
   GenTimeSpanFromDays( 0.000011574 );
   GenTimeSpanFromDays( 0.000694444 );
   GenTimeSpanFromDays( 0.041666666 );
   GenTimeSpanFromDays( 1 );
   GenTimeSpanFromDays( 20.84745602 );
}

/*
This example of TimeSpan::FromDays( double )
generates the following output.

             FromDays          TimeSpan
             --------          --------
                6E-09          00:00:00.0010000
              1.7E-08          00:00:00.0010000
          0.000123456          00:00:10.6670000
          1.234567898        1.05:37:46.6660000
      12345.678987654    12345.16:17:44.5330000
           1.1574E-05          00:00:01
          0.000694444          00:01:00
          0.041666666          01:00:00
                    1        1.00:00:00
          20.84745602       20.20:20:20.2000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Double
FromTicks
FromMilliseconds
FromSeconds
FromMinutes
FromHours


TimeSpan ..::.FromHours 方法

TimeSpan
.
.
::
.
FromHours 方法
TimeSpan 结构

返回表示指定小时数的 TimeSpan，其中对小时数的指定精确到最接近的毫秒。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromHours ( _
    value As Double _
) As TimeSpan
public static TimeSpan FromHours(
    double value
)
public:
static TimeSpan FromHours(
    double value
)
static member FromHours :
        value:float -> TimeSpan

参数

value
类型： System Double
精确到最接近的毫秒的小时数。

返回值

类型： System TimeSpan
表示 value 的对象。
异常 | 条件
OverflowException | value 小于 MinValue 或大于 MaxValue。 - 或 - value 为 Double..::.PositiveInfinity。 - 或 - value 为 Double..::.NegativeInfinity。
ArgumentException | value 等于 Double..::.NaN。

value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。

' The following throws an OverflowException at runtime
Dim maxSpan As TimeSpan = TimeSpan.FromHours(TimeSpan.MaxValue.TotalHours)

// The following throws an OverflowException at runtime
TimeSpan maxSpan = TimeSpan.FromHours(TimeSpan.MaxValue.TotalHours);

下面的代码示例使用 FromHours 方法创建几个 TimeSpan 对象。

' Example of the TimeSpan.FromHours( Double ) method.
Imports System
Imports Microsoft.VisualBasic

Module FromHoursDemo

    Sub GenTimeSpanFromHours( hours As Double )

        ' Create a TimeSpan object and TimeSpan string from
        ' a number of hours.
        Dim interval As TimeSpan = _
            TimeSpan.FromHours( hours )
        Dim timeInterval As String = interval.ToString( )

        ' Pad the end of the TimeSpan string with spaces if it
        ' does not contain milliseconds.
        Dim pIndex As Integer = timeInterval.IndexOf( ":"c )
        pIndex = timeInterval.IndexOf( "."c, pIndex )
        If pIndex < 0 Then  timeInterval &= "        "

        Console.WriteLine( "{0,21}{1,26}", hours, timeInterval )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of " & _
            "TimeSpan.FromHours( Double )" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,21}{1,18}", _
            "FromHours", "TimeSpan" )
        Console.WriteLine( "{0,21}{1,18}", _
            "---------", "--------" )

        GenTimeSpanFromHours( 0.0000002 )
        GenTimeSpanFromHours( 0.0000003 )
        GenTimeSpanFromHours( 0.0012345 )
        GenTimeSpanFromHours( 12.3456789 )
        GenTimeSpanFromHours( 123456.7898765 )
        GenTimeSpanFromHours( 0.0002777 )
        GenTimeSpanFromHours( 0.0166666 )
        GenTimeSpanFromHours( 1 )
        GenTimeSpanFromHours( 24 )
        GenTimeSpanFromHours( 500.3389445 )
    End Sub
End Module

' This example of TimeSpan.FromHours( Double )
' generates the following output.
'
'             FromHours          TimeSpan
'             ---------          --------
'                 2E-07          00:00:00.0010000
'                 3E-07          00:00:00.0010000
'             0.0012345          00:00:04.4440000
'            12.3456789          12:20:44.4440000
'        123456.7898765     5144.00:47:23.5550000
'             0.0002777          00:00:01
'             0.0166666          00:01:00
'                     1          01:00:00
'                    24        1.00:00:00
'           500.3389445       20.20:20:20.2000000

// Example of the TimeSpan.FromHours( double ) method.
using System;

class FromHoursDemo
{
    static void GenTimeSpanFromHours( double hours )
    {
        // Create a TimeSpan object and TimeSpan string from
        // a number of hours.
        TimeSpan    interval = TimeSpan.FromHours( hours );
        string      timeInterval = interval.ToString( );

        // Pad the end of the TimeSpan string with spaces if it
        // does not contain milliseconds.
        int pIndex = timeInterval.IndexOf( ':' );
        pIndex = timeInterval.IndexOf( '.', pIndex );
        if( pIndex < 0 )   timeInterval += "        ";

        Console.WriteLine( "{0,21}{1,26}", hours, timeInterval );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of TimeSpan.FromHours( double )\n" +
            "generates the following output.\n" );
        Console.WriteLine( "{0,21}{1,18}",
            "FromHours", "TimeSpan" );
        Console.WriteLine( "{0,21}{1,18}",
            "---------", "--------" );

        GenTimeSpanFromHours( 0.0000002 );
        GenTimeSpanFromHours( 0.0000003 );
        GenTimeSpanFromHours( 0.0012345 );
        GenTimeSpanFromHours( 12.3456789 );
        GenTimeSpanFromHours( 123456.7898765 );
        GenTimeSpanFromHours( 0.0002777 );
        GenTimeSpanFromHours( 0.0166666 );
        GenTimeSpanFromHours( 1 );
        GenTimeSpanFromHours( 24 );
        GenTimeSpanFromHours( 500.3389445 );
    }
}

/*
This example of TimeSpan.FromHours( double )
generates the following output.

            FromHours          TimeSpan
            ---------          --------
                2E-07          00:00:00.0010000
                3E-07          00:00:00.0010000
            0.0012345          00:00:04.4440000
           12.3456789          12:20:44.4440000
       123456.7898765     5144.00:47:23.5550000
            0.0002777          00:00:01
            0.0166666          00:01:00
                    1          01:00:00
                   24        1.00:00:00
          500.3389445       20.20:20:20.2000000
*/

// Example of the TimeSpan::FromHours( double ) method.
using namespace System;
void GenTimeSpanFromHours( double hours )
{

   // Create a TimeSpan object and TimeSpan string from
   // a number of hours.
   TimeSpan interval = TimeSpan::FromHours( hours );
   String^ timeInterval = interval.ToString();

   // Pad the end of the TimeSpan string with spaces if it
   // does not contain milliseconds.
   int pIndex = timeInterval->IndexOf( ':' );
   pIndex = timeInterval->IndexOf( '.', pIndex );
   if ( pIndex < 0 )
      timeInterval = String::Concat( timeInterval, "        " );

   Console::WriteLine( "{0,21}{1,26}", hours, timeInterval );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::FromHours( double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "{0,21}{1,18}", "FromHours", "TimeSpan" );
   Console::WriteLine( "{0,21}{1,18}", "---------", "--------" );
   GenTimeSpanFromHours( 0.0000002 );
   GenTimeSpanFromHours( 0.0000003 );
   GenTimeSpanFromHours( 0.0012345 );
   GenTimeSpanFromHours( 12.3456789 );
   GenTimeSpanFromHours( 123456.7898765 );
   GenTimeSpanFromHours( 0.0002777 );
   GenTimeSpanFromHours( 0.0166666 );
   GenTimeSpanFromHours( 1 );
   GenTimeSpanFromHours( 24 );
   GenTimeSpanFromHours( 500.3389445 );
}

/*
This example of TimeSpan::FromHours( double )
generates the following output.

            FromHours          TimeSpan
            ---------          --------
                2E-07          00:00:00.0010000
                3E-07          00:00:00.0010000
            0.0012345          00:00:04.4440000
           12.3456789          12:20:44.4440000
       123456.7898765     5144.00:47:23.5550000
            0.0002777          00:00:01
            0.0166666          00:01:00
                    1          01:00:00
                   24        1.00:00:00
          500.3389445       20.20:20:20.2000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Double
FromTicks
FromMilliseconds
FromSeconds
FromMinutes
FromDays


TimeSpan ..::.FromMilliseconds 方法

TimeSpan
.
.
::
.
FromMilliseconds 方法
TimeSpan 结构

返回表示指定毫秒数的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromMilliseconds ( _
    value As Double _
) As TimeSpan
public static TimeSpan FromMilliseconds(
    double value
)
public:
static TimeSpan FromMilliseconds(
    double value
)
static member FromMilliseconds :
        value:float -> TimeSpan

参数

value
类型： System Double
毫秒数。

返回值

类型： System TimeSpan
表示 value 的对象。
异常 | 条件
OverflowException | value 小于 MinValue 或大于 MaxValue。 - 或 - value 为 Double..::.PositiveInfinity。 - 或 - value 为 Double..::.NegativeInfinity。
ArgumentException | value 等于 Double..::.NaN。

value 参数转换为刻度数，而该刻度数用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为刻度数，而该刻度数用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为刻度数，而该刻度数用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为刻度数，而该刻度数用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。

' The following throws an OverflowException at runtime
Dim maxSpan As TimeSpan = TimeSpan.FromMilliseconds(TimeSpan.MaxValue.TotalMilliseconds)

// The following throws an OverflowException at runtime
TimeSpan maxSpan = TimeSpan.FromMilliseconds(TimeSpan.MaxValue.TotalMilliseconds);

下面的示例使用 FromMilliseconds 方法创建几个 TimeSpan 对象。

' Example of the TimeSpan.FromMilliseconds( Double ) method.
Imports System
Imports Microsoft.VisualBasic

Module FromMillisecDemo

    Sub GenTimeSpanFromMillisec( millisec As Double )

        ' Create a TimeSpan object and TimeSpan string from
        ' a number of milliseconds.
        Dim interval As TimeSpan = _
            TimeSpan.FromMilliseconds( millisec )
        Dim timeInterval As String = interval.ToString( )

        ' Pad the end of the TimeSpan string with spaces if it
        ' does not contain milliseconds.
        Dim pIndex As Integer = timeInterval.IndexOf( ":"c )
        pIndex = timeInterval.IndexOf( "."c, pIndex )
        If pIndex < 0 Then   timeInterval &= "        "

        Console.WriteLine( "{0,21}{1,26}", millisec, timeInterval )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of " & _
            "TimeSpan.FromMilliseconds( Double )" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,21}{1,18}", _
            "FromMilliseconds", "TimeSpan" )
        Console.WriteLine( "{0,21}{1,18}", _
            "----------------", "--------" )

        GenTimeSpanFromMillisec( 1 )
        GenTimeSpanFromMillisec( 1.5 )
        GenTimeSpanFromMillisec( 12345.6 )
        GenTimeSpanFromMillisec( 123456789.8 )
        GenTimeSpanFromMillisec( 1234567898765.4 )
        GenTimeSpanFromMillisec( 1000 )
        GenTimeSpanFromMillisec( 60000 )
        GenTimeSpanFromMillisec( 3600000 )
        GenTimeSpanFromMillisec( 86400000 )
        GenTimeSpanFromMillisec( 1801220200 )
    End Sub
End Module

' This example of TimeSpan.FromMilliseconds( Double )
' generates the following output.
'
'      FromMilliseconds          TimeSpan
'      ----------------          --------
'                     1          00:00:00.0010000
'                   1.5          00:00:00.0020000
'               12345.6          00:00:12.3460000
'           123456789.8        1.10:17:36.7900000
'       1234567898765.4    14288.23:31:38.7650000
'                  1000          00:00:01
'                 60000          00:01:00
'               3600000          01:00:00
'              86400000        1.00:00:00
'            1801220200       20.20:20:20.2000000

// Example of the TimeSpan.FromMilliseconds( double ) method.
using System;

class FromMillisecDemo
{
    static void GenTimeSpanFromMillisec( Double millisec )
    {
        // Create a TimeSpan object and TimeSpan string from
        // a number of milliseconds.
        TimeSpan    interval = TimeSpan.FromMilliseconds( millisec );
        string      timeInterval = interval.ToString( );

        // Pad the end of the TimeSpan string with spaces if it
        // does not contain milliseconds.
        int pIndex = timeInterval.IndexOf( ':' );
        pIndex = timeInterval.IndexOf( '.', pIndex );
        if( pIndex < 0 )   timeInterval += "        ";

        Console.WriteLine( "{0,21}{1,26}", millisec, timeInterval );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of TimeSpan.FromMilliseconds( " +
            "double )\ngenerates the following output.\n" );
        Console.WriteLine( "{0,21}{1,18}",
            "FromMilliseconds", "TimeSpan" );
        Console.WriteLine( "{0,21}{1,18}",
            "----------------", "--------" );

        GenTimeSpanFromMillisec( 1 );
        GenTimeSpanFromMillisec( 1.5 );
        GenTimeSpanFromMillisec( 12345.6 );
        GenTimeSpanFromMillisec( 123456789.8 );
        GenTimeSpanFromMillisec( 1234567898765.4 );
        GenTimeSpanFromMillisec( 1000 );
        GenTimeSpanFromMillisec( 60000 );
        GenTimeSpanFromMillisec( 3600000 );
        GenTimeSpanFromMillisec( 86400000 );
        GenTimeSpanFromMillisec( 1801220200 );
    }
}

/*
This example of TimeSpan.FromMilliseconds( double )
generates the following output.

     FromMilliseconds          TimeSpan
     ----------------          --------
                    1          00:00:00.0010000
                  1.5          00:00:00.0020000
              12345.6          00:00:12.3460000
          123456789.8        1.10:17:36.7900000
      1234567898765.4    14288.23:31:38.7650000
                 1000          00:00:01
                60000          00:01:00
              3600000          01:00:00
             86400000        1.00:00:00
           1801220200       20.20:20:20.2000000
*/

// Example of the TimeSpan::FromMilliseconds( double ) method.
using namespace System;
void GenTimeSpanFromMillisec( Double millisec )
{

   // Create a TimeSpan object and TimeSpan string from
   // a number of milliseconds.
   TimeSpan interval = TimeSpan::FromMilliseconds( millisec );
   String^ timeInterval = interval.ToString();

   // Pad the end of the TimeSpan string with spaces if it
   // does not contain milliseconds.
   int pIndex = timeInterval->IndexOf( ':' );
   pIndex = timeInterval->IndexOf( '.', pIndex );
   if ( pIndex < 0 )
      timeInterval = String::Concat( timeInterval, "        " );

   Console::WriteLine( "{0,21}{1,26}", millisec, timeInterval );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::FromMilliseconds( double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "{0,21}{1,18}", "FromMilliseconds", "TimeSpan" );
   Console::WriteLine( "{0,21}{1,18}", "----------------", "--------" );
   GenTimeSpanFromMillisec( 1 );
   GenTimeSpanFromMillisec( 1.5 );
   GenTimeSpanFromMillisec( 12345.6 );
   GenTimeSpanFromMillisec( 123456789.8 );
   GenTimeSpanFromMillisec( 1234567898765.4 );
   GenTimeSpanFromMillisec( 1000 );
   GenTimeSpanFromMillisec( 60000 );
   GenTimeSpanFromMillisec( 3600000 );
   GenTimeSpanFromMillisec( 86400000 );
   GenTimeSpanFromMillisec( 1801220200 );
}

/*
This example of TimeSpan::FromMilliseconds( double )
generates the following output.

     FromMilliseconds          TimeSpan
     ----------------          --------
                    1          00:00:00.0010000
                  1.5          00:00:00.0020000
              12345.6          00:00:12.3460000
          123456789.8        1.10:17:36.7900000
      1234567898765.4    14288.23:31:38.7650000
                 1000          00:00:01
                60000          00:01:00
              3600000          01:00:00
             86400000        1.00:00:00
           1801220200       20.20:20:20.2000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Double
FromTicks
FromSeconds
FromMinutes
FromHours
FromDays


TimeSpan ..::.FromMinutes 方法

TimeSpan
.
.
::
.
FromMinutes 方法
TimeSpan 结构

返回表示指定分钟数的 TimeSpan，其中对分钟数的指定精确到最接近的毫秒。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromMinutes ( _
    value As Double _
) As TimeSpan
public static TimeSpan FromMinutes(
    double value
)
public:
static TimeSpan FromMinutes(
    double value
)
static member FromMinutes :
        value:float -> TimeSpan

参数

value
类型： System Double
分钟数，精确到最接近的毫秒。

返回值

类型： System TimeSpan
表示 value 的对象。
异常 | 条件
OverflowException | value 小于 MinValue 或大于 MaxValue。 - 或 - value 为 Double..::.PositiveInfinity。 - 或 - value 为 Double..::.NegativeInfinity。
ArgumentException | value 等于 Double..::.NaN。

value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，此转换会生成 OverflowException。例如，在下列实例化 TimeSpan 对象的尝试中，这会导致 OverflowException。

' The following throws an OverflowException at runtime
Dim maxSpan As TimeSpan = TimeSpan.FromMinutes(TimeSpan.MaxValue.TotalMinutes)

// The following throws an OverflowException at runtime
TimeSpan maxSpan = TimeSpan.FromMinutes(TimeSpan.MaxValue.TotalMinutes);

下面的代码示例使用 FromMinutes 方法创建几个 TimeSpan 对象。

' Example of the TimeSpan.FromMinutes( Double ) method.
Imports System
Imports Microsoft.VisualBasic

Module FromMinutesDemo

    Sub GenTimeSpanFromMinutes( minutes As Double )

        ' Create a TimeSpan object and TimeSpan string from
        ' a number of minutes.
        Dim interval As TimeSpan = _
            TimeSpan.FromMinutes( minutes )
        Dim timeInterval As String = interval.ToString( )

        ' Pad the end of the TimeSpan string with spaces if it
        ' does not contain milliseconds.
        Dim pIndex As Integer = timeInterval.IndexOf( ":"c )
        pIndex = timeInterval.IndexOf( "."c, pIndex )
        If pIndex < 0 Then   timeInterval &= "        "

        Console.WriteLine( "{0,21}{1,26}", minutes, timeInterval )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of " & _
            "TimeSpan.FromMinutes( Double )" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,21}{1,18}", _
            "FromMinutes", "TimeSpan" )
        Console.WriteLine( "{0,21}{1,18}", _
            "-----------", "--------" )

        GenTimeSpanFromMinutes( 0.00001 )
        GenTimeSpanFromMinutes( 0.00002 )
        GenTimeSpanFromMinutes( 0.12345 )
        GenTimeSpanFromMinutes( 1234.56789 )
        GenTimeSpanFromMinutes( 12345678.98765 )
        GenTimeSpanFromMinutes( 0.01666 )
        GenTimeSpanFromMinutes( 1 )
        GenTimeSpanFromMinutes( 60 )
        GenTimeSpanFromMinutes( 1440 )
        GenTimeSpanFromMinutes( 30020.33667 )
    End Sub
End Module

' This example of TimeSpan.FromMinutes( Double )
' generates the following output.
'
'           FromMinutes          TimeSpan
'           -----------          --------
'                 1E-05          00:00:00.0010000
'                 2E-05          00:00:00.0010000
'               0.12345          00:00:07.4070000
'            1234.56789          20:34:34.0730000
'        12345678.98765     8573.09:18:59.2590000
'               0.01666          00:00:01
'                     1          00:01:00
'                    60          01:00:00
'                  1440        1.00:00:00
'           30020.33667       20.20:20:20.2000000

// Example of the TimeSpan.FromMinutes( double ) method.
using System;

class FromMinutesDemo
{
    static void GenTimeSpanFromMinutes( double minutes )
    {
        // Create a TimeSpan object and TimeSpan string from
        // a number of minutes.
        TimeSpan    interval = TimeSpan.FromMinutes( minutes );
        string      timeInterval = interval.ToString( );

        // Pad the end of the TimeSpan string with spaces if it
        // does not contain milliseconds.
        int pIndex = timeInterval.IndexOf( ':' );
        pIndex = timeInterval.IndexOf( '.', pIndex );
        if( pIndex < 0 )   timeInterval += "        ";

        Console.WriteLine( "{0,21}{1,26}", minutes, timeInterval );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of TimeSpan.FromMinutes( double )\n" +
            "generates the following output.\n" );
        Console.WriteLine( "{0,21}{1,18}",
            "FromMinutes", "TimeSpan" );
        Console.WriteLine( "{0,21}{1,18}",
            "-----------", "--------" );

        GenTimeSpanFromMinutes( 0.00001 );
        GenTimeSpanFromMinutes( 0.00002 );
        GenTimeSpanFromMinutes( 0.12345 );
        GenTimeSpanFromMinutes( 1234.56789 );
        GenTimeSpanFromMinutes( 12345678.98765 );
        GenTimeSpanFromMinutes( 0.01666 );
        GenTimeSpanFromMinutes( 1 );
        GenTimeSpanFromMinutes( 60 );
        GenTimeSpanFromMinutes( 1440 );
        GenTimeSpanFromMinutes( 30020.33667 );
    }
}

/*
This example of TimeSpan.FromMinutes( double )
generates the following output.

          FromMinutes          TimeSpan
          -----------          --------
                1E-05          00:00:00.0010000
                2E-05          00:00:00.0010000
              0.12345          00:00:07.4070000
           1234.56789          20:34:34.0730000
       12345678.98765     8573.09:18:59.2590000
              0.01666          00:00:01
                    1          00:01:00
                   60          01:00:00
                 1440        1.00:00:00
          30020.33667       20.20:20:20.2000000
*/

// Example of the TimeSpan::FromMinutes( double ) method.
using namespace System;
void GenTimeSpanFromMinutes( double minutes )
{

   // Create a TimeSpan object and TimeSpan string from
   // a number of minutes.
   TimeSpan interval = TimeSpan::FromMinutes( minutes );
   String^ timeInterval = interval.ToString();

   // Pad the end of the TimeSpan string with spaces if it
   // does not contain milliseconds.
   int pIndex = timeInterval->IndexOf( ':' );
   pIndex = timeInterval->IndexOf( '.', pIndex );
   if ( pIndex < 0 )
      timeInterval = String::Concat( timeInterval, "        " );

   Console::WriteLine( "{0,21}{1,26}", minutes, timeInterval );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::FromMinutes( double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "{0,21}{1,18}", "FromMinutes", "TimeSpan" );
   Console::WriteLine( "{0,21}{1,18}", "-----------", "--------" );
   GenTimeSpanFromMinutes( 0.00001 );
   GenTimeSpanFromMinutes( 0.00002 );
   GenTimeSpanFromMinutes( 0.12345 );
   GenTimeSpanFromMinutes( 1234.56789 );
   GenTimeSpanFromMinutes( 12345678.98765 );
   GenTimeSpanFromMinutes( 0.01666 );
   GenTimeSpanFromMinutes( 1 );
   GenTimeSpanFromMinutes( 60 );
   GenTimeSpanFromMinutes( 1440 );
   GenTimeSpanFromMinutes( 30020.33667 );
}

/*
This example of TimeSpan::FromMinutes( double )
generates the following output.

          FromMinutes          TimeSpan
          -----------          --------
                1E-05          00:00:00.0010000
                2E-05          00:00:00.0010000
              0.12345          00:00:07.4070000
           1234.56789          20:34:34.0730000
       12345678.98765     8573.09:18:59.2590000
              0.01666          00:00:01
                    1          00:01:00
                   60          01:00:00
                 1440        1.00:00:00
          30020.33667       20.20:20:20.2000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Double
FromTicks
FromMilliseconds
FromSeconds
FromHours
FromDays


TimeSpan ..::.FromSeconds 方法

TimeSpan
.
.
::
.
FromSeconds 方法
TimeSpan 结构

返回表示指定秒数的 TimeSpan，其中对秒数的指定精确到最接近的毫秒。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromSeconds ( _
    value As Double _
) As TimeSpan
public static TimeSpan FromSeconds(
    double value
)
public:
static TimeSpan FromSeconds(
    double value
)
static member FromSeconds :
        value:float -> TimeSpan

参数

value
类型： System Double
秒数，精确到最接近的毫秒。

返回值

类型： System TimeSpan
表示 value 的对象。
异常 | 条件
OverflowException | value 小于 MinValue 或大于 MaxValue。 - 或 - value 为 Double..::.PositiveInfinity。 - 或 - value 为 Double..::.NegativeInfinity。
ArgumentException | value 等于 Double..::.NaN。

value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，这会生成 OverflowException。例如在下列实例化 TimeSpan 对象的尝试中，这就是导致 OverflowException 的原因。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，这会生成 OverflowException。例如在下列实例化 TimeSpan 对象的尝试中，这就是导致 OverflowException 的原因。 value 参数转换为毫秒，毫秒又转换为刻度，而该刻度数将用于初始化新的 TimeSpan。因此，只认为 value 精确到最近的毫秒。请注意，由于 Double 数据类型的精度丢失，对接近但仍处于 MinValue 或 MaxValue 范围内的值，这会生成 OverflowException。例如在下列实例化 TimeSpan 对象的尝试中，这就是导致 OverflowException 的原因。

' The following throws an OverflowException at runtime
Dim maxSpan As TimeSpan = TimeSpan.FromSeconds(TimeSpan.MaxValue.TotalSeconds)

// The following throws an OverflowException at runtime
TimeSpan maxSpan = TimeSpan.FromSeconds(TimeSpan.MaxValue.TotalSeconds);

下面的代码示例使用 FromSeconds 方法创建几个 TimeSpan 对象。

' Example of the TimeSpan.FromSeconds( Double ) method.
Imports System
Imports Microsoft.VisualBasic

Module FromSecondsDemo

    Sub GenTimeSpanFromSeconds( seconds As Double )

        ' Create a TimeSpan object and TimeSpan string from
        ' a number of seconds.
        Dim interval As TimeSpan = _
            TimeSpan.FromSeconds( seconds )
        Dim timeInterval As String = interval.ToString( )

        ' Pad the end of the TimeSpan string with spaces if it
        ' does not contain milliseconds.
        Dim pIndex As Integer = timeInterval.IndexOf( ":"c )
        pIndex = timeInterval.IndexOf( "."c, pIndex )
        If pIndex < 0 Then   timeInterval &= "        "

        Console.WriteLine( "{0,21}{1,26}", seconds, timeInterval )
    End Sub

    Sub Main( )

        Console.WriteLine( "This example of " & _
            "TimeSpan.FromSeconds( Double )" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,21}{1,18}", _
            "FromSeconds", "TimeSpan" )
        Console.WriteLine( "{0,21}{1,18}", _
            "-----------", "--------" )

        GenTimeSpanFromSeconds( 0.001 )
        GenTimeSpanFromSeconds( 0.0015 )
        GenTimeSpanFromSeconds( 12.3456 )
        GenTimeSpanFromSeconds( 123456.7898 )
        GenTimeSpanFromSeconds( 1234567898.7654 )
        GenTimeSpanFromSeconds( 1 )
        GenTimeSpanFromSeconds( 60 )
        GenTimeSpanFromSeconds( 3600 )
        GenTimeSpanFromSeconds( 86400 )
        GenTimeSpanFromSeconds( 1801220.2 )
    End Sub
End Module

' This example of TimeSpan.FromSeconds( Double )
' generates the following output.
'
'           FromSeconds          TimeSpan
'           -----------          --------
'                 0.001          00:00:00.0010000
'                0.0015          00:00:00.0020000
'               12.3456          00:00:12.3460000
'           123456.7898        1.10:17:36.7900000
'       1234567898.7654    14288.23:31:38.7650000
'                     1          00:00:01
'                    60          00:01:00
'                  3600          01:00:00
'                 86400        1.00:00:00
'             1801220.2       20.20:20:20.2000000

// Example of the TimeSpan.FromSeconds( double ) method.
using System;

class FromSecondsDemo
{
    static void GenTimeSpanFromSeconds( double seconds )
    {
        // Create a TimeSpan object and TimeSpan string from
        // a number of seconds.
        TimeSpan    interval = TimeSpan.FromSeconds( seconds );
        string      timeInterval = interval.ToString( );

        // Pad the end of the TimeSpan string with spaces if it
        // does not contain milliseconds.
        int pIndex = timeInterval.IndexOf( ':' );
        pIndex = timeInterval.IndexOf( '.', pIndex );
        if( pIndex < 0 )   timeInterval += "        ";

        Console.WriteLine( "{0,21}{1,26}", seconds, timeInterval );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of TimeSpan.FromSeconds( double )\n" +
            "generates the following output.\n" );
        Console.WriteLine( "{0,21}{1,18}",
            "FromSeconds", "TimeSpan" );
        Console.WriteLine( "{0,21}{1,18}",
            "-----------", "--------" );

        GenTimeSpanFromSeconds( 0.001 );
        GenTimeSpanFromSeconds( 0.0015 );
        GenTimeSpanFromSeconds( 12.3456 );
        GenTimeSpanFromSeconds( 123456.7898 );
        GenTimeSpanFromSeconds( 1234567898.7654 );
        GenTimeSpanFromSeconds( 1 );
        GenTimeSpanFromSeconds( 60 );
        GenTimeSpanFromSeconds( 3600 );
        GenTimeSpanFromSeconds( 86400 );
        GenTimeSpanFromSeconds( 1801220.2 );
    }
}

/*
This example of TimeSpan.FromSeconds( double )
generates the following output.

          FromSeconds          TimeSpan
          -----------          --------
                0.001          00:00:00.0010000
               0.0015          00:00:00.0020000
              12.3456          00:00:12.3460000
          123456.7898        1.10:17:36.7900000
      1234567898.7654    14288.23:31:38.7650000
                    1          00:00:01
                   60          00:01:00
                 3600          01:00:00
                86400        1.00:00:00
            1801220.2       20.20:20:20.2000000
*/

// Example of the TimeSpan::FromSeconds( double ) method.
using namespace System;
void GenTimeSpanFromSeconds( double seconds )
{

   // Create a TimeSpan object and TimeSpan string from
   // a number of seconds.
   TimeSpan interval = TimeSpan::FromSeconds( seconds );
   String^ timeInterval = interval.ToString();

   // Pad the end of the TimeSpan string with spaces if it
   // does not contain milliseconds.
   int pIndex = timeInterval->IndexOf( ':' );
   pIndex = timeInterval->IndexOf( '.', pIndex );
   if ( pIndex < 0 )
      timeInterval = String::Concat( timeInterval, "        " );

   Console::WriteLine( "{0,21}{1,26}", seconds, timeInterval );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::FromSeconds( double )\n"
   "generates the following output.\n" );
   Console::WriteLine( "{0,21}{1,18}", "FromSeconds", "TimeSpan" );
   Console::WriteLine( "{0,21}{1,18}", "-----------", "--------" );
   GenTimeSpanFromSeconds( 0.001 );
   GenTimeSpanFromSeconds( 0.0015 );
   GenTimeSpanFromSeconds( 12.3456 );
   GenTimeSpanFromSeconds( 123456.7898 );
   GenTimeSpanFromSeconds( 1234567898.7654 );
   GenTimeSpanFromSeconds( 1 );
   GenTimeSpanFromSeconds( 60 );
   GenTimeSpanFromSeconds( 3600 );
   GenTimeSpanFromSeconds( 86400 );
   GenTimeSpanFromSeconds( 1801220.2 );
}

/*
This example of TimeSpan::FromSeconds( double )
generates the following output.

          FromSeconds          TimeSpan
          -----------          --------
                0.001          00:00:00.0010000
               0.0015          00:00:00.0020000
              12.3456          00:00:12.3460000
          123456.7898        1.10:17:36.7900000
      1234567898.7654    14288.23:31:38.7650000
                    1          00:00:01
                   60          00:01:00
                 3600          01:00:00
                86400        1.00:00:00
            1801220.2       20.20:20:20.2000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Double
FromTicks
FromMilliseconds
FromMinutes
FromHours
FromDays


TimeSpan ..::.FromTicks 方法

TimeSpan
.
.
::
.
FromTicks 方法
TimeSpan 结构

返回表示指定时间的 TimeSpan，其中对时间的指定以刻度为单位。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromTicks ( _
    value As Long _
) As TimeSpan
public static TimeSpan FromTicks(
    long value
)
public:
static TimeSpan FromTicks(
    long long value
)
static member FromTicks :
        value:int64 -> TimeSpan

参数

value
类型： System Int64
表示时间的刻度数。

返回值

类型： System TimeSpan
表示 value 的对象。

这是一个与 TimeSpan..::.TimeSpan(Int64) 构造函数具有相同行为的方便方法。

下面的代码示例使用 FromTicks 方法创建几个 TimeSpan 对象。

' Example of the TimeSpan.FromTicks( Long ) method.
Imports System
Imports Microsoft.VisualBasic

Module FromTicksDemo

    Sub GenTimeSpanFromTicks( ticks As Long )

        ' Create a TimeSpan object and TimeSpan string from
        ' a number of ticks.
        Dim interval As TimeSpan = TimeSpan.FromTicks( ticks )
        Dim timeInterval As String = interval.ToString( )

        ' Pad the end of the TimeSpan string with spaces if it
        ' does not contain milliseconds.
        Dim pIndex As Integer = timeInterval.IndexOf( ":"c )
        pIndex = timeInterval.IndexOf( "."c, pIndex )
        If pIndex < 0 Then   timeInterval &= "        "

        Console.WriteLine( "{0,21}{1,26}", ticks, timeInterval )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of TimeSpan.FromTicks( Long )" & _
            vbCrLf & "generates the following output." & vbCrLf )
        Console.WriteLine( "{0,21}{1,18}", _
            "FromTicks", "TimeSpan" )
        Console.WriteLine( "{0,21}{1,18}", _
            "---------", "--------" )

        GenTimeSpanFromTicks( 1 )
        GenTimeSpanFromTicks( 12345 )
        GenTimeSpanFromTicks( 123456789 )
        GenTimeSpanFromTicks( 1234567898765 )
        GenTimeSpanFromTicks( 12345678987654321 )
        GenTimeSpanFromTicks( 10000000 )
        GenTimeSpanFromTicks( 600000000 )
        GenTimeSpanFromTicks( 36000000000 )
        GenTimeSpanFromTicks( 864000000000 )
        GenTimeSpanFromTicks( 18012202000000 )
    End Sub
End Module

' This example of TimeSpan.FromTicks( Long )
' generates the following output.
'
'             FromTicks          TimeSpan
'             ---------          --------
'                     1          00:00:00.0000001
'                 12345          00:00:00.0012345
'             123456789          00:00:12.3456789
'         1234567898765        1.10:17:36.7898765
'     12345678987654321    14288.23:31:38.7654321
'              10000000          00:00:01
'             600000000          00:01:00
'           36000000000          01:00:00
'          864000000000        1.00:00:00
'        18012202000000       20.20:20:20.2000000

// Example of the TimeSpan.FromTicks( long ) method.
using System;

class FromTicksDemo
{
    static void GenTimeSpanFromTicks( long ticks )
    {
        // Create a TimeSpan object and TimeSpan string from
        // a number of ticks.
        TimeSpan    interval = TimeSpan.FromTicks( ticks );
        string      timeInterval = interval.ToString( );

        // Pad the end of the TimeSpan string with spaces if it
        // does not contain milliseconds.
        int pIndex = timeInterval.IndexOf( ':' );
        pIndex = timeInterval.IndexOf( '.', pIndex );
        if( pIndex < 0 )   timeInterval += "        ";

        Console.WriteLine( "{0,21}{1,26}", ticks, timeInterval );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of TimeSpan.FromTicks( long )\n" +
            "generates the following output.\n" );
        Console.WriteLine( "{0,21}{1,18}",
            "FromTicks", "TimeSpan" );
        Console.WriteLine( "{0,21}{1,18}",
            "---------", "--------" );

        GenTimeSpanFromTicks( 1 );
        GenTimeSpanFromTicks( 12345 );
        GenTimeSpanFromTicks( 123456789 );
        GenTimeSpanFromTicks( 1234567898765 );
        GenTimeSpanFromTicks( 12345678987654321 );
        GenTimeSpanFromTicks( 10000000 );
        GenTimeSpanFromTicks( 600000000 );
        GenTimeSpanFromTicks( 36000000000 );
        GenTimeSpanFromTicks( 864000000000 );
        GenTimeSpanFromTicks( 18012202000000 );
    }
}

/*
This example of TimeSpan.FromTicks( long )
generates the following output.

            FromTicks          TimeSpan
            ---------          --------
                    1          00:00:00.0000001
                12345          00:00:00.0012345
            123456789          00:00:12.3456789
        1234567898765        1.10:17:36.7898765
    12345678987654321    14288.23:31:38.7654321
             10000000          00:00:01
            600000000          00:01:00
          36000000000          01:00:00
         864000000000        1.00:00:00
       18012202000000       20.20:20:20.2000000
*/

// Example of the TimeSpan::FromTicks( __int64 ) method.
using namespace System;
void GenTimeSpanFromTicks( __int64 ticks )
{

   // Create a TimeSpan object and TimeSpan string from
   // a number of ticks.
   TimeSpan interval = TimeSpan::FromTicks( ticks );
   String^ timeInterval = interval.ToString();

   // Pad the end of the TimeSpan string with spaces if it
   // does not contain milliseconds.
   int pIndex = timeInterval->IndexOf( ':' );
   pIndex = timeInterval->IndexOf( '.', pIndex );
   if ( pIndex < 0 )
      timeInterval = String::Concat( timeInterval, "        " );

   Console::WriteLine( "{0,21}{1,26}", ticks, timeInterval );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::FromTicks( __int64 )\n"
   "generates the following output.\n" );
   Console::WriteLine( "{0,21}{1,18}", "FromTicks", "TimeSpan" );
   Console::WriteLine( "{0,21}{1,18}", "---------", "--------" );
   GenTimeSpanFromTicks( 1 );
   GenTimeSpanFromTicks( 12345 );
   GenTimeSpanFromTicks( 123456789 );
   GenTimeSpanFromTicks( 1234567898765 );
   GenTimeSpanFromTicks( 12345678987654321 );
   GenTimeSpanFromTicks( 10000000 );
   GenTimeSpanFromTicks( 600000000 );
   GenTimeSpanFromTicks( 36000000000 );
   GenTimeSpanFromTicks( 864000000000 );
   GenTimeSpanFromTicks( 18012202000000 );
}

/*
This example of TimeSpan::FromTicks( __int64 )
generates the following output.

            FromTicks          TimeSpan
            ---------          --------
                    1          00:00:00.0000001
                12345          00:00:00.0012345
            123456789          00:00:12.3456789
        1234567898765        1.10:17:36.7898765
    12345678987654321    14288.23:31:38.7654321
             10000000          00:00:01
            600000000          00:01:00
          36000000000          01:00:00
         864000000000        1.00:00:00
       18012202000000       20.20:20:20.2000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Int64
FromMilliseconds
FromSeconds
FromMinutes
FromHours
FromDays


TimeSpan ..::.GetHashCode 方法

TimeSpan
.
.
::
.
GetHashCode 方法
TimeSpan 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

即使两个 TimeSpan 对象表示不同的时间值，它们也可能具有相同的哈希代码。

下面的示例使用 GetHashCode 方法生成几个 TimeSpan 对象的哈希代码。

' Example for the TimeSpan.GetHashCode( ) method.
Imports System
Imports Microsoft.VisualBasic

Module GetHashCode

    Sub DisplayHashCode( interval As TimeSpan )

        ' Create a hash code and a string representation of
        ' the TimeSpan parameter.
        Dim timeInterval As String = interval.ToString( )
        Dim hashCode As Integer = interval.GetHashCode( )

        ' Pad the end of the TimeSpan string with spaces if it
        ' does not contain milliseconds.
        Dim pIndex As Integer = timeInterval.IndexOf( ":"c )
        pIndex = timeInterval.IndexOf( "."c, pIndex )
        If pIndex < 0 Then timeInterval &= "        "

        Console.WriteLine( "{0,22}   0x{1:X8}, {1}", _
            timeInterval, hashCode )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of TimeSpan.GetHashCode( ) generates " & _
            "the following " & vbCrLf & "output, which displays " & _
            "the hash codes of representative TimeSpan " & vbCrLf & _
            "objects in hexadecimal and decimal formats." & vbCrLf )
        Console.WriteLine( "{0,22}   {1,10}", _
            "TimeSpan        ", "Hash Code" )
        Console.WriteLine( "{0,22}   {1,10}", _
            "--------        ", "---------" )

        DisplayHashCode( new TimeSpan( 0 ) )
        DisplayHashCode( new TimeSpan( 1 ) )
        DisplayHashCode( new TimeSpan( 0, 0, 0, 0, 1 ) )
        DisplayHashCode( new TimeSpan( 0, 0, 1 ) )
        DisplayHashCode( new TimeSpan( 0, 1, 0 ) )
        DisplayHashCode( new TimeSpan( 1, 0, 0 ) )
        DisplayHashCode( new TimeSpan( 36000000001 ) )
        DisplayHashCode( new TimeSpan( 0, 1, 0, 0, 1 ) )
        DisplayHashCode( new TimeSpan( 1, 0, 1 ) )
        DisplayHashCode( new TimeSpan( 1, 0, 0, 0 ) )
        DisplayHashCode( new TimeSpan( 864000000001 ) )
        DisplayHashCode( new TimeSpan( 1, 0, 0, 0, 1 ) )
        DisplayHashCode( new TimeSpan( 1, 0, 0, 1 ) )
        DisplayHashCode( new TimeSpan( 100, 0, 0, 0 ) )
        DisplayHashCode( new TimeSpan( 100, 0, 0, 0, 1 ) )
        DisplayHashCode( new TimeSpan( 100, 0, 0, 1 ) )
    End Sub
End Module

' This example of TimeSpan.GetHashCode( ) generates the following
' output, which displays the hash codes of representative TimeSpan
' objects in hexadecimal and decimal formats.
'
'       TimeSpan            Hash Code
'       --------            ---------
'       00:00:00           0x00000000, 0
'       00:00:00.0000001   0x00000001, 1
'       00:00:00.0010000   0x00002710, 10000
'       00:00:01           0x00989680, 10000000
'       00:01:00           0x23C34600, 600000000
'       01:00:00           0x61C46808, 1640261640
'       01:00:00.0000001   0x61C46809, 1640261641
'       01:00:00.0010000   0x61C48F18, 1640271640
'       01:00:01           0x625CFE88, 1650261640
'     1.00:00:00           0x2A69C0C9, 711573705
'     1.00:00:00.0000001   0x2A69C0C8, 711573704
'     1.00:00:00.0010000   0x2A69E7D9, 711583705
'     1.00:00:01           0x2B025649, 721573449
'   100.00:00:00           0x914F4E94, -1857073516
'   100.00:00:00.0010000   0x914F6984, -1857066620
'   100.00:00:01           0x91E7D814, -1847076844

// Example for the TimeSpan.GetHashCode( ) method.
using System;

class GetHashCode
{
    static void DisplayHashCode( TimeSpan interval )
    {
        // Create a hash code and a string representation of
        // the TimeSpan parameter.
        string  timeInterval = interval.ToString( );
        int     hashCode = interval.GetHashCode( );

        // Pad the end of the TimeSpan string with spaces if it
        // does not contain milliseconds.
        int pIndex = timeInterval.IndexOf( ':' );
        pIndex = timeInterval.IndexOf( '.', pIndex );
        if( pIndex < 0 )   timeInterval += "        ";

        Console.WriteLine( "{0,22}   0x{1:X8}, {1}",
            timeInterval, hashCode );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of TimeSpan.GetHashCode( ) generates " +
            "the following \noutput, which displays " +
            "the hash codes of representative TimeSpan \n" +
            "objects in hexadecimal and decimal formats.\n" );
        Console.WriteLine( "{0,22}   {1,10}",
            "TimeSpan        ", "Hash Code" );
        Console.WriteLine( "{0,22}   {1,10}",
            "--------        ", "---------" );

        DisplayHashCode( new TimeSpan( 0 ) );
        DisplayHashCode( new TimeSpan( 1 ) );
        DisplayHashCode( new TimeSpan( 0, 0, 0, 0, 1 ) );
        DisplayHashCode( new TimeSpan( 0, 0, 1 ) );
        DisplayHashCode( new TimeSpan( 0, 1, 0 ) );
        DisplayHashCode( new TimeSpan( 1, 0, 0 ) );
        DisplayHashCode( new TimeSpan( 36000000001 ) );
        DisplayHashCode( new TimeSpan( 0, 1, 0, 0, 1 ) );
        DisplayHashCode( new TimeSpan( 1, 0, 1 ) );
        DisplayHashCode( new TimeSpan( 1, 0, 0, 0 ) );
        DisplayHashCode( new TimeSpan( 864000000001 ) );
        DisplayHashCode( new TimeSpan( 1, 0, 0, 0, 1 ) );
        DisplayHashCode( new TimeSpan( 1, 0, 0, 1 ) );
        DisplayHashCode( new TimeSpan( 100, 0, 0, 0 ) );
        DisplayHashCode( new TimeSpan( 100, 0, 0, 0, 1 ) );
        DisplayHashCode( new TimeSpan( 100, 0, 0, 1 ) );
    }
}

/*
This example of TimeSpan.GetHashCode( ) generates the following
output, which displays the hash codes of representative TimeSpan
objects in hexadecimal and decimal formats.

      TimeSpan            Hash Code
      --------            ---------
      00:00:00           0x00000000, 0
      00:00:00.0000001   0x00000001, 1
      00:00:00.0010000   0x00002710, 10000
      00:00:01           0x00989680, 10000000
      00:01:00           0x23C34600, 600000000
      01:00:00           0x61C46808, 1640261640
      01:00:00.0000001   0x61C46809, 1640261641
      01:00:00.0010000   0x61C48F18, 1640271640
      01:00:01           0x625CFE88, 1650261640
    1.00:00:00           0x2A69C0C9, 711573705
    1.00:00:00.0000001   0x2A69C0C8, 711573704
    1.00:00:00.0010000   0x2A69E7D9, 711583705
    1.00:00:01           0x2B025649, 721573449
  100.00:00:00           0x914F4E94, -1857073516
  100.00:00:00.0010000   0x914F6984, -1857066620
  100.00:00:01           0x91E7D814, -1847076844
*/

// Example for the TimeSpan::GetHashCode( ) method.
using namespace System;
void DisplayHashCode( TimeSpan interval )
{

   // Create a hash code and a string representation of
   // the TimeSpan parameter.
   String^ timeInterval = interval.ToString();
   int hashCode = interval.GetHashCode();

   // Pad the end of the TimeSpan string with spaces if it
   // does not contain milliseconds.
   int pIndex = timeInterval->IndexOf( ':' );
   pIndex = timeInterval->IndexOf( '.', pIndex );
   if ( pIndex < 0 )
      timeInterval = String::Concat( timeInterval, "        " );

   Console::WriteLine( "{0,22}   0x{1:X8}, {1}", timeInterval, hashCode );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::GetHashCode( ) generates "
   "the following \noutput, which displays "
   "the hash codes of representative TimeSpan \n"
   "objects in hexadecimal and decimal formats.\n" );
   Console::WriteLine( "{0,22}   {1,10}", "TimeSpan        ", "Hash Code" );
   Console::WriteLine( "{0,22}   {1,10}", "--------        ", "---------" );
   DisplayHashCode( TimeSpan(0) );
   DisplayHashCode( TimeSpan(1) );
   DisplayHashCode( TimeSpan(0,0,0,0,1) );
   DisplayHashCode( TimeSpan(0,0,1) );
   DisplayHashCode( TimeSpan(0,1,0) );
   DisplayHashCode( TimeSpan(1,0,0) );
   DisplayHashCode( TimeSpan(36000000001) );
   DisplayHashCode( TimeSpan(0,1,0,0,1) );
   DisplayHashCode( TimeSpan(1,0,1) );
   DisplayHashCode( TimeSpan(1,0,0,0) );
   DisplayHashCode( TimeSpan(864000000001) );
   DisplayHashCode( TimeSpan(1,0,0,0,1) );
   DisplayHashCode( TimeSpan(1,0,0,1) );
   DisplayHashCode( TimeSpan(100,0,0,0) );
   DisplayHashCode( TimeSpan(100,0,0,0,1) );
   DisplayHashCode( TimeSpan(100,0,0,1) );
}

/*
This example of TimeSpan::GetHashCode( ) generates the following
output, which displays the hash codes of representative TimeSpan
objects in hexadecimal and decimal formats.

      TimeSpan            Hash Code
      --------            ---------
      00:00:00           0x00000000, 0
      00:00:00.0000001   0x00000001, 1
      00:00:00.0010000   0x00002710, 10000
      00:00:01           0x00989680, 10000000
      00:01:00           0x23C34600, 600000000
      01:00:00           0x61C46808, 1640261640
      01:00:00.0000001   0x61C46809, 1640261641
      01:00:00.0010000   0x61C48F18, 1640271640
      01:00:01           0x625CFE88, 1650261640
    1.00:00:00           0x2A69C0C9, 711573705
    1.00:00:00.0000001   0x2A69C0C8, 711573704
    1.00:00:00.0010000   0x2A69E7D9, 711583705
    1.00:00:01           0x2B025649, 721573449
  100.00:00:00           0x914F4E94, -1857073516
  100.00:00:00.0010000   0x914F6984, -1857066620
  100.00:00:01           0x91E7D814, -1847076844
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan ..::.Negate 方法

TimeSpan
.
.
::
.
Negate 方法
TimeSpan 结构

返回其值为此实例的相反值的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Negate As TimeSpan
public TimeSpan Negate()
public:
TimeSpan Negate()
member Negate : unit -> TimeSpan

返回值

类型： System TimeSpan
与此实例的数值相同但符号相反。
异常 | 条件
OverflowException | 此实例的求反值不能用 TimeSpan 表示，即此实例的值为 MinValue。

下面的代码示例对几个 TimeSpan 对象应用 Negate 方法。

' Example of the TimeSpan.Duration( ) and TimeSpan.Negate( ) methods,
' and the TimeSpan Unary Negation and Unary Plus operators.
Imports System
Imports Microsoft.VisualBasic

Module DuraNegaUnaryDemo

    Const dataFmt As String = "{0,22}{1,22}{2,22}"

    Sub ShowDurationNegate( interval As TimeSpan )

        ' Display the TimeSpan value and the results of the
        ' Duration and Negate methods.
        Console.WriteLine( dataFmt, _
            interval, interval.Duration( ), interval.Negate( ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of TimeSpan.Duration( ), " & _
            "TimeSpan.Negate( ), " & vbCrLf & _
            "and the TimeSpan Unary Negation and " & _
            "Unary Plus operators " & vbCrLf & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( dataFmt, _
            "TimeSpan", "Duration( )", "Negate( )" )
        Console.WriteLine( dataFmt, _
            "--------", "-----------", "---------" )

        ' Create TimeSpan objects and apply the Unary Negation
        ' and Unary Plus operators to them.
        ShowDurationNegate( new TimeSpan( 1 ) )
        ShowDurationNegate( new TimeSpan( -1234567 ) )
        ShowDurationNegate( TimeSpan.op_UnaryPlus( _
            new TimeSpan( 0, 0, 10, -20, -30 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryPlus( _
            new TimeSpan( 0, -10, 20, -30, 40 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryNegation( _
            new TimeSpan( 1, 10, 20, 40, 160 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryNegation( _
            new TimeSpan( -10, -20, -30, -40, -50 ) ) )
    End Sub
End Module

' This example of TimeSpan.Duration( ), TimeSpan.Negate( ),
' and the TimeSpan Unary Negation and Unary Plus operators
' generates the following output.
'
'               TimeSpan           Duration( )             Negate( )
'               --------           -----------             ---------
'       00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
'      -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
'       00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
'      -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
'    -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
'    10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000

// Example of the TimeSpan.Duration( ) and TimeSpan.Negate( ) methods,
// and the TimeSpan Unary Negation and Unary Plus operators.
using System;

class DuraNegaUnaryDemo
{
    const string dataFmt = "{0,22}{1,22}{2,22}" ;

    static void ShowDurationNegate( TimeSpan interval )
    {
        // Display the TimeSpan value and the results of the
        // Duration and Negate methods.
        Console.WriteLine( dataFmt,
            interval, interval.Duration( ), interval.Negate( ) );
    }

    static void Main()
    {
        Console.WriteLine(
            "This example of TimeSpan.Duration( ), " +
            "TimeSpan.Negate( ), \nand the TimeSpan Unary " +
            "Negation and Unary Plus operators \n" +
            "generates the following output.\n" );
        Console.WriteLine( dataFmt,
            "TimeSpan", "Duration( )", "Negate( )" );
        Console.WriteLine( dataFmt,
            "--------", "-----------", "---------" );

        // Create TimeSpan objects and apply the Unary Negation
        // and Unary Plus operators to them.
        ShowDurationNegate( new TimeSpan( 1 ) );
        ShowDurationNegate( new TimeSpan( -1234567 ) );
        ShowDurationNegate(
            + new TimeSpan( 0, 0, 10, -20, -30 ) );
        ShowDurationNegate(
            + new TimeSpan( 0, -10, 20, -30, 40 ) );
        ShowDurationNegate(
            - new TimeSpan( 1, 10, 20, 40, 160 ) );
        ShowDurationNegate(
            - new TimeSpan( -10, -20, -30, -40, -50 ) );
    }
}

/*
This example of TimeSpan.Duration( ), TimeSpan.Negate( ),
and the TimeSpan Unary Negation and Unary Plus operators
generates the following output.

              TimeSpan           Duration( )             Negate( )
              --------           -----------             ---------
      00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
     -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
      00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
     -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
   -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
   10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000
*/

// Example of the TimeSpan::Duration( ) and TimeSpan::Negate( ) methods,
// and the TimeSpan Unary Negation and Unary Plus operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,22}{1,22}{2,22}";
void ShowDurationNegate( TimeSpan interval )
{

   // Display the TimeSpan value and the results of the
   // Duration and Negate methods.
   Console::WriteLine( gcnew String( protoFmt ), interval, interval.Duration(), interval.Negate() );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::Duration( ), "
   "TimeSpan::Negate( ), \nand the TimeSpan Unary "
   "Negation and Unary Plus operators \n"
   "generates the following output.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "TimeSpan", "Duration( )", "Negate( )" );
   Console::WriteLine( gcnew String( protoFmt ), "--------", "-----------", "---------" );

   // Create TimeSpan objects and apply the Unary Negation
   // and Unary Plus operators to them.
   ShowDurationNegate( TimeSpan(1) );
   ShowDurationNegate( TimeSpan( -1234567) );
   ShowDurationNegate(  +TimeSpan(0,0,10,-20,-30) );
   ShowDurationNegate(  +TimeSpan(0,-10,20,-30,40) );
   ShowDurationNegate(  -TimeSpan(1,10,20,40,160) );
   ShowDurationNegate(  -TimeSpan( -10,-20,-30,-40,-50) );
}

/*
This example of TimeSpan::Duration( ), TimeSpan::Negate( ),
and the TimeSpan Unary Negation and Unary Plus operators
generates the following output.

              TimeSpan           Duration( )             Negate( )
              --------           -----------             ---------
      00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
     -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
      00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
     -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
   -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
   10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan ..::.Parse 方法

TimeSpan
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

将时间间隔的字符串表示形式转换为等效的 TimeSpan。

名称 说明
页首

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
TryParse


TimeSpan ..::.Parse 方法 (String)

TimeSpan
.
.
::
.
Parse 方法 (String)
TimeSpan 结构

将时间间隔的字符串表示形式转换为等效的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    s As String _
) As TimeSpan
public static TimeSpan Parse(
    string s
)
public:
static TimeSpan Parse(
    String^ s
)
static member Parse :
        s:string -> TimeSpan

参数

s
类型： System String
一个字符串，用于指定进行转换的时间间隔。

返回值

类型： System TimeSpan
与 s 对应的时间间隔。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 具有无效的格式。
OverflowException | s 表示小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue 的数字。 - 或 - 天、小时、分钟或秒中至少有一个分量超出其有效范围。

s 参数包含一个如下形式的时间间隔规范：

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

方括号（[ 和 ]）中的元素是可选的。需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
- | 一个可选的减号，指示负的 TimeSpan。
d | 天，范围从 0 到 10675199。
. | 一个区分区域性的符号，用于将天与小时分开。固定格式使用句点 (".") 字符。 一个区分区域性的符号，用于将天与小时分开。固定格式使用句点 (".") 字符。
hh | 小时，范围从 0 到 23。
: | 区分区域性的时间分隔符。固定格式使用冒号 (":") 字符。 区分区域性的时间分隔符。固定格式使用冒号 (":") 字符。
mm | 分钟，范围从 0 到 59。
ss | 可选的秒，范围从 0 到 59。
. | 一个区分区域性的符号，用于将秒与秒的小数部分分开。固定格式使用句点 (".") 字符。 一个区分区域性的符号，用于将秒与秒的小数部分分开。固定格式使用句点 (".") 字符。
ff | 可选的秒的小数部分，包含 1 到 7 位小数。

s 的分量必须整体指定大于或等于 TimeSpan..::.MinValue 并小于或等于 TimeSpan..::.MaxValue 的时间间隔。

Parse(String) 方法尝试通过使用当前区域的各个特殊区域格式来分析 s。

对调用者的说明

当要分析的字符串中的时间间隔组件包含超过七位数字时，在 .NET Framework 3.5 以及早期版本中的分析操作可能与 .NET Framework 4 中的分析操作可能在行为上有所不同。在某些情况下，可以在 .NET Framework 3.5 和更早版本中成功执行的分析操作在 .NET Framework 4 中可能失败并引发 OverflowException。其他情况下，在 .NET Framework 3.5 及更早版本中引发 FormatException 的分析操作会失败，并且在 .NET Framework 4 中引发 OverflowException。下面的示例阐释了这两种方案。 当要分析的字符串中的时间间隔组件包含超过七位数字时，在 .NET Framework 3.5 以及早期版本中的分析操作可能与 .NET Framework 4 中的分析操作可能在行为上有所不同。在某些情况下，可以在 .NET Framework 3.5 和更早版本中成功执行的分析操作在 .NET Framework 4 中可能失败并引发 OverflowException。其他情况下，在 .NET Framework 3.5 及更早版本中引发 FormatException 的分析操作会失败，并且在 .NET Framework 4 中引发 OverflowException。下面的示例阐释了这两种方案。 当要分析的字符串中的时间间隔组件包含超过七位数字时，在 .NET Framework 3.5 以及早期版本中的分析操作可能与 .NET Framework 4 中的分析操作可能在行为上有所不同。在某些情况下，可以在 .NET Framework 3.5 和更早版本中成功执行的分析操作在 .NET Framework 4 中可能失败并引发 OverflowException。其他情况下，在 .NET Framework 3.5 及更早版本中引发 FormatException 的分析操作会失败，并且在 .NET Framework 4 中引发 OverflowException。下面的示例阐释了这两种方案。 当要分析的字符串中的时间间隔组件包含超过七位数字时，在 .NET Framework 3.5 以及早期版本中的分析操作可能与 .NET Framework 4 中的分析操作可能在行为上有所不同。在某些情况下，可以在 .NET Framework 3.5 和更早版本中成功执行的分析操作在 .NET Framework 4 中可能失败并引发 OverflowException。其他情况下，在 .NET Framework 3.5 及更早版本中引发 FormatException 的分析操作会失败，并且在 .NET Framework 4 中引发 OverflowException。下面的示例阐释了这两种方案。

Dim values() As String = { "000000006", "12.12:12:12.12345678" }
For Each value As String In values
   Try
      Dim interval As TimeSpan = TimeSpan.Parse(value)
      Console.WriteLine("{0} --> {1}", value, interval)
   Catch e As FormatException
      Console.WriteLine("{0}: Bad Format", value)
   Catch e As OverflowException
      Console.WriteLine("{0}: Overflow", value)
   End Try
Next
' Output from .NET Framework 3.5 and earlier versions:
'       000000006 --> 6.00:00:00
'       12.12:12:12.12345678: Bad Format
' Output from .NET Framework 4:
'       000000006: Overflow
'       12.12:12:12.12345678: Overflow

string[] values = { "000000006", "12.12:12:12.12345678" };
foreach (string value in values)
{
   try {
      TimeSpan interval = TimeSpan.Parse(value);
      Console.WriteLine("{0} --> {1}", value, interval);
   }
   catch (FormatException) {
      Console.WriteLine("{0}: Bad Format", value);
   }
   catch (OverflowException) {
      Console.WriteLine("{0}: Overflow", value);
   }
}
// Output from .NET Framework 3.5 and earlier versions:
//       000000006 --> 6.00:00:00
//       12.12:12:12.12345678: Bad Format
// Output from .NET Framework 4:
//       000000006: Overflow
//       12.12:12:12.12345678: Overflow

下面的示例使用 Parse 方法将字符串数组中的每个元素转化为 TimeSpan 值。它将当前系统区域性更改为“克罗地亚语 - 克罗地亚”("hr-HR") 以及“英语 - 美国”("en-US")，以说明当前系统区域性如何影响分析操作。 下面的示例使用 Parse 方法将字符串数组中的每个元素转化为 TimeSpan 值。它将当前系统区域性更改为“克罗地亚语 - 克罗地亚”("hr-HR") 以及“英语 - 美国”("en-US")，以说明当前系统区域性如何影响分析操作。

Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim values() As String = { "6", "6:12", "6:12:14", "6:12:14:45",
                                 "6.12:14:45", "6:12:14:45.3448",
                                 "6:12:14:45,3448", "6:34:14:45" }
      Dim cultureNames() As String = { "hr-HR", "en-US"}

      ' Change the current culture.
      For Each cultureName As String In cultureNames
         Thread.CurrentThread.CurrentCulture = New CultureInfo(cultureName)
         Console.WriteLine("Current Culture: {0}",
                           Thread.CurrentThread.CurrentCulture.Name)
         For Each value As String In values
            Try
               Dim ts As TimeSpan = TimeSpan.Parse(value)
               Console.WriteLine("{0} --> {1}", value, ts.ToString("c"))
            Catch e As FormatException
               Console.WriteLine("{0}: Bad Format", value)
            Catch e As OverflowException
               Console.WriteLine("{0}: Overflow", value)
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       Current Culture: hr-HR
'       6 --> 6.00:00:00
'       6:12 --> 06:12:00
'       6:12:14 --> 06:12:14
'       6:12:14:45 --> 6.12:14:45
'       6.12:14:45 --> 6.12:14:45
'       6:12:14:45.3448: Bad Format
'       6:12:14:45,3448 --> 6.12:14:45.3448000
'       6:34:14:45: Overflow
'
'       Current Culture: en-US
'       6 --> 6.00:00:00
'       6:12 --> 06:12:00
'       6:12:14 --> 06:12:14
'       6:12:14:45 --> 6.12:14:45
'       6.12:14:45 --> 6.12:14:45
'       6:12:14:45.3448 --> 6.12:14:45.3448000
'       6:12:14:45,3448: Bad Format
'       6:34:14:45: Overflow

using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      string[] values = { "6", "6:12", "6:12:14", "6:12:14:45",
                          "6.12:14:45", "6:12:14:45.3448",
                          "6:12:14:45,3448", "6:34:14:45" };
      string[] cultureNames = { "hr-HR", "en-US"};

      // Change the current culture.
      foreach (string cultureName in cultureNames)
      {
         Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);
         Console.WriteLine("Current Culture: {0}",
                           Thread.CurrentThread.CurrentCulture.Name);
         foreach (string value in values)
         {
            try {
               TimeSpan ts = TimeSpan.Parse(value);
               Console.WriteLine("{0} --> {1}", value, ts.ToString("c"));
            }
            catch (FormatException) {
               Console.WriteLine("{0}: Bad Format", value);
            }
            catch (OverflowException) {
               Console.WriteLine("{0}: Overflow", value);
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    Current Culture: hr-HR
//    6 --> 6.00:00:00
//    6:12 --> 06:12:00
//    6:12:14 --> 06:12:14
//    6:12:14:45 --> 6.12:14:45
//    6.12:14:45 --> 6.12:14:45
//    6:12:14:45.3448: Bad Format
//    6:12:14:45,3448 --> 6.12:14:45.3448000
//    6:34:14:45: Overflow
//
//    Current Culture: en-US
//    6 --> 6.00:00:00
//    6:12 --> 06:12:00
//    6:12:14 --> 06:12:14
//    6:12:14:45 --> 6.12:14:45
//    6.12:14:45 --> 6.12:14:45
//    6:12:14:45.3448 --> 6.12:14:45.3448000
//    6:12:14:45,3448: Bad Format
//    6:34:14:45: Overflow

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
Parse 重载
System 命名空间


TimeSpan ..::.Parse 方法 (String, IFormatProvider)

TimeSpan
.
.
::
.
Parse 方法 (String, IFormatProvider)
TimeSpan 结构

使用指定的区域性特定格式信息，将时间间隔的字符串表示形式转换为其等效的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    input As String, _
    formatProvider As IFormatProvider _
) As TimeSpan
public static TimeSpan Parse(
    string input,
    IFormatProvider formatProvider
)
public:
static TimeSpan Parse(
    String^ input,
    IFormatProvider^ formatProvider
)
static member Parse :
        input:string *
        formatProvider:IFormatProvider -> TimeSpan

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
formatProvider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System TimeSpan
与 input 对应的时间间隔，由 formatProvider 指定。
异常 | 条件
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 具有无效的格式。
OverflowException | input 表示小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue 的数字。 - 或 - input 中的天、小时、分钟或秒中至少有一个分量超出其有效范围。

input 参数包含一个如下形式的时间间隔规范：

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

方括号（“[”和“]”）中的元素是可选的；需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。 方括号（“[”和“]”）中的元素是可选的；需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
- | 一个可选的减号，指示负的 TimeSpan。
d | 天，范围从 0 到 10675199。
. | 一个区分区域性的符号，用于将天与小时分开。默认值为句号 (".") 字符。 一个区分区域性的符号，用于将天与小时分开。默认值为句号 (".") 字符。
hh | 小时，范围从 0 到 23。
: | 区分区域性的时间分隔符。
mm | 分钟，范围从 0 到 59。
ss | 可选的秒，范围从 0 到 59。
. | 一个区分区域性的符号，用于将秒与秒的小数部分分开。默认值为句号 (".") 字符。 一个区分区域性的符号，用于将秒与秒的小数部分分开。默认值为句号 (".") 字符。
ff | 可选的秒的小数部分，包含 1 到 7 位小数。

input 的分量必须整体指定大于或等于 TimeSpan..::.MinValue 并小于或等于 TimeSpan..::.MaxValue 的时间间隔。

Parse(String) 方法尝试通过使用由 formatProvider 指定的区域的各个特殊区域格式来分析 input。

formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

对调用者的说明

当要分析的字符串中的时间间隔组件包含超过七位数字时，在 .NET Framework 3.5 以及更早版本中的分析操作可能与 .NET Framework 4 中的分析操作可能在行为上有所不同。在某些情况下，可以在 .NET Framework 3.5 和更早版本中成功执行的分析操作在 .NET Framework 4 中可能失败并引发 OverflowException。其他情况下，在 .NET Framework 3.5 及更早版本中引发 FormatException 的分析操作会失败，并且在 .NET Framework 4 中引发 OverflowException。下面的示例阐释了这两种方案。 当要分析的字符串中的时间间隔组件包含超过七位数字时，在 .NET Framework 3.5 以及更早版本中的分析操作可能与 .NET Framework 4 中的分析操作可能在行为上有所不同。在某些情况下，可以在 .NET Framework 3.5 和更早版本中成功执行的分析操作在 .NET Framework 4 中可能失败并引发 OverflowException。其他情况下，在 .NET Framework 3.5 及更早版本中引发 FormatException 的分析操作会失败，并且在 .NET Framework 4 中引发 OverflowException。下面的示例阐释了这两种方案。 当要分析的字符串中的时间间隔组件包含超过七位数字时，在 .NET Framework 3.5 以及更早版本中的分析操作可能与 .NET Framework 4 中的分析操作可能在行为上有所不同。在某些情况下，可以在 .NET Framework 3.5 和更早版本中成功执行的分析操作在 .NET Framework 4 中可能失败并引发 OverflowException。其他情况下，在 .NET Framework 3.5 及更早版本中引发 FormatException 的分析操作会失败，并且在 .NET Framework 4 中引发 OverflowException。下面的示例阐释了这两种方案。 当要分析的字符串中的时间间隔组件包含超过七位数字时，在 .NET Framework 3.5 以及更早版本中的分析操作可能与 .NET Framework 4 中的分析操作可能在行为上有所不同。在某些情况下，可以在 .NET Framework 3.5 和更早版本中成功执行的分析操作在 .NET Framework 4 中可能失败并引发 OverflowException。其他情况下，在 .NET Framework 3.5 及更早版本中引发 FormatException 的分析操作会失败，并且在 .NET Framework 4 中引发 OverflowException。下面的示例阐释了这两种方案。

Dim values() As String = { "000000006", "12.12:12:12.12345678" }
For Each value As String In values
   Try
      Dim interval As TimeSpan = TimeSpan.Parse(value)
      Console.WriteLine("{0} --> {1}", value, interval)
   Catch e As FormatException
      Console.WriteLine("{0}: Bad Format", value)
   Catch e As OverflowException
      Console.WriteLine("{0}: Overflow", value)
   End Try
Next
' Output from .NET Framework 3.5 and earlier versions:
'       000000006 --> 6.00:00:00
'       12.12:12:12.12345678: Bad Format
' Output from .NET Framework 4:
'       000000006: Overflow
'       12.12:12:12.12345678: Overflow

string[] values = { "000000006", "12.12:12:12.12345678" };
foreach (string value in values)
{
   try {
      TimeSpan interval = TimeSpan.Parse(value);
      Console.WriteLine("{0} --> {1}", value, interval);
   }
   catch (FormatException) {
      Console.WriteLine("{0}: Bad Format", value);
   }
   catch (OverflowException) {
      Console.WriteLine("{0}: Overflow", value);
   }
}
// Output from .NET Framework 3.5 and earlier versions:
//       000000006 --> 6.00:00:00
//       12.12:12:12.12345678: Bad Format
// Output from .NET Framework 4:
//       000000006: Overflow
//       12.12:12:12.12345678: Overflow

下面的示例定义了 CultureInfo 对象的数组，并使用 Parse(String, IFormatProvider) 方法调用中的每个对象来分析字符串数组中的元素。该示例说明了特定区域性的约定如何影响格式设置操作。 下面的示例定义了 CultureInfo 对象的数组，并使用 Parse(String, IFormatProvider) 方法调用中的每个对象来分析字符串数组中的元素。该示例说明了特定区域性的约定如何影响格式设置操作。

Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim values() As String = { "6", "6:12", "6:12:14", "6:12:14:45",
                                 "6.12:14:45", "6:12:14:45.3448",
                                 "6:12:14:45,3448", "6:34:14:45" }
      Dim cultures() As CultureInfo = { New CultureInfo("en-US"),
                                        New CultureInfo("ru-RU"),
                                        CultureInfo.InvariantCulture }

      Dim header As String = String.Format("{0,-17}", "String")
      For Each culture As CultureInfo In cultures
         header += If(culture.Equals(CultureInfo.InvariantCulture),
                      String.Format("{0,20}", "Invariant"),
                      String.Format("{0,20}", culture.Name))
      Next
      Console.WriteLine(header)
      Console.WriteLine()

      For Each value As String In values
         Console.Write("{0,-17}", value)
         For Each culture As CultureInfo In cultures
            Try
               Dim ts As TimeSpan = TimeSpan.Parse(value, culture)
               Console.Write("{0,20}", ts.ToString("c"))
            Catch e As FormatException
               Console.Write("{0,20}", "Bad Format")
            Catch e As OverflowException
               Console.Write("{0,20}", "Overflow")
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    String                          en-US               ru-RU           Invariant
'
'    6                          6.00:00:00          6.00:00:00          6.00:00:00
'    6:12                         06:12:00            06:12:00            06:12:00
'    6:12:14                      06:12:14            06:12:14            06:12:14
'    6:12:14:45                 6.12:14:45          6.12:14:45          6.12:14:45
'    6.12:14:45                 6.12:14:45          6.12:14:45          6.12:14:45
'    6:12:14:45.3448    6.12:14:45.3448000          Bad Format  6.12:14:45.3448000
'    6:12:14:45,3448            Bad Format  6.12:14:45.3448000          Bad Format
'    6:34:14:45                   Overflow            Overflow            Overflow

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string[] values = { "6", "6:12", "6:12:14", "6:12:14:45",
                          "6.12:14:45", "6:12:14:45.3448",
                          "6:12:14:45,3448", "6:34:14:45" };
      CultureInfo[] cultures = { new CultureInfo("en-US"),
                                 new CultureInfo("ru-RU"),
                                 CultureInfo.InvariantCulture };

      string header = String.Format("{0,-17}", "String");
      foreach (CultureInfo culture in cultures)
         header += culture.Equals(CultureInfo.InvariantCulture) ?
                      String.Format("{0,20}", "Invariant") :
                      String.Format("{0,20}", culture.Name);
      Console.WriteLine(header);
      Console.WriteLine();

      foreach (string value in values)
      {
         Console.Write("{0,-17}", value);
         foreach (CultureInfo culture in cultures)
         {
            try {
               TimeSpan ts = TimeSpan.Parse(value, culture);
               Console.Write("{0,20}", ts.ToString("c"));
            }
            catch (FormatException) {
               Console.Write("{0,20}", "Bad Format");
            }
            catch (OverflowException) {
               Console.Write("{0,20}", "Overflow");
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    String                          en-US               ru-RU           Invariant
//
//    6                          6.00:00:00          6.00:00:00          6.00:00:00
//    6:12                         06:12:00            06:12:00            06:12:00
//    6:12:14                      06:12:14            06:12:14            06:12:14
//    6:12:14:45                 6.12:14:45          6.12:14:45          6.12:14:45
//    6.12:14:45                 6.12:14:45          6.12:14:45          6.12:14:45
//    6:12:14:45.3448    6.12:14:45.3448000          Bad Format  6.12:14:45.3448000
//    6:12:14:45,3448            Bad Format  6.12:14:45.3448000          Bad Format
//    6:34:14:45                   Overflow            Overflow            Overflow

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
Parse 重载
System 命名空间


TimeSpan ..::.ParseExact 方法

TimeSpan
.
.
::
.
ParseExact 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

将时间间隔的字符串表示形式转换为等效的 TimeSpan。字符串表示形式的格式必须与指定的格式完全匹配。 将时间间隔的字符串表示形式转换为等效的 TimeSpan。字符串表示形式的格式必须与指定的格式完全匹配。

名称 说明
页首

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
TryParseExact


TimeSpan ..::.ParseExact 方法 (String, String, IFormatProvider)

TimeSpan
.
.
::
.
ParseExact 方法 (String, String, IFormatProvider)
TimeSpan 结构

使用指定的格式和区域性特定格式信息，将时间间隔的字符串表示形式转换为其等效的 TimeSpan。字符串表示形式的格式必须与指定的格式完全匹配。 使用指定的格式和区域性特定格式信息，将时间间隔的字符串表示形式转换为其等效的 TimeSpan。字符串表示形式的格式必须与指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    input As String, _
    format As String, _
    formatProvider As IFormatProvider _
) As TimeSpan
public static TimeSpan ParseExact(
    string input,
    string format,
    IFormatProvider formatProvider
)
public:
static TimeSpan ParseExact(
    String^ input,
    String^ format,
    IFormatProvider^ formatProvider
)
static member ParseExact :
        input:string *
        format:string *
        formatProvider:IFormatProvider -> TimeSpan

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
format
类型： System String
用于定义所需的 input 格式的标准或自定义格式字符串。
formatProvider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System TimeSpan
与 input 对应的时间间隔，由 format 和 formatProvider 指定。
异常 | 条件
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 具有无效的格式。
OverflowException | input 表示小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue 的数字。 - 或 - input 中的天、小时、分钟或秒中至少有一个分量超出其有效范围。

ParseExact(String, String, IFormatProvider) 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 format 的格式，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, String, IFormatProvider, TimeSpan%) 方法来代替。 ParseExact(String, String, IFormatProvider) 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 format 的格式，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, String, IFormatProvider, TimeSpan%) 方法来代替。 ParseExact(String, String, IFormatProvider) 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 format 的格式，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, String, IFormatProvider, TimeSpan%) 方法来代替。

format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 input 格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 input 格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。

重要说明 重要事项

仅在 format 是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时，ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在 format 是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时，ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在 format 是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时，ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。

如果 format 为标准格式字符串，formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： 如果 format 为标准格式字符串，formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

下面的示例使用 ParseExact(String, String, IFormatProvider) 方法来分析若干使用多种格式字符串和区域性的时间间隔的字符串表现形式。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim intervalString, format As String
      Dim interval As TimeSpan
      Dim culture As CultureInfo

      ' Parse hour:minute value with "g" specifier current culture.
      intervalString = "17:14"
      format = "g"
      culture = CultureInfo.CurrentCulture
      Try
         interval = TimeSpan.ParseExact(intervalString, format, culture)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse hour:minute:second value with "G" specifier.
      intervalString = "17:14:48"
      format = "G"
      culture = CultureInfo.InvariantCulture
      Try
         interval = TimeSpan.ParseExact(intervalString, format, culture)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse hours:minute.second value with "G" specifier
      ' and current (en-US) culture.
      intervalString = "17:14:48.153"
      format = "G"
      culture = CultureInfo.CurrentCulture
      Try
         interval = TimeSpan.ParseExact(intervalString, format, culture)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse days:hours:minute.second value with "G" specifier
      ' and current (en-US) culture.
      intervalString = "3:17:14:48.153"
      format = "G"
      culture = CultureInfo.CurrentCulture
      Try
         interval = TimeSpan.ParseExact(intervalString, format, culture)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse days:hours:minute.second value with "G" specifier
      ' and fr-FR culture.
      intervalString = "3:17:14:48.153"
      format = "G"
      culture = New CultureInfo("fr-FR")
      Try
         interval = TimeSpan.ParseExact(intervalString, format, culture)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse days:hours:minute.second value with "G" specifier
      ' and fr-FR culture.
      intervalString = "3:17:14:48,153"
      format = "G"
      culture = New CultureInfo("fr-FR")
      Try
         interval = TimeSpan.ParseExact(intervalString, format, culture)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse a single number using the "c" standard format string.
      intervalString = "12"
      format = "c"
      Try
         interval = TimeSpan.ParseExact(intervalString, format, Nothing)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse a single number using the "%h" custom format string.
      format = "%h"
      Try
         interval = TimeSpan.ParseExact(intervalString, format, Nothing)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse a single number using the "%s" custom format string.
      format = "%s"
      Try
         interval = TimeSpan.ParseExact(intervalString, format, Nothing)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try
   End Sub
End Module
' The example displays the following output:
'       '17:14' --> 17:14:00
'       '17:14:48': Bad Format for 'G'
'       '17:14:48.153': Bad Format for 'G'
'       '3:17:14:48.153' --> 3.17:14:48.1530000
'       '3:17:14:48.153': Bad Format for 'G'
'       '3:17:14:48,153' --> 3.17:14:48.1530000
'       '12' --> 12.00:00:00
'       '12' --> 12:00:00
'       '12' --> 00:00:12

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string intervalString, format;
      TimeSpan interval;
      CultureInfo culture;

      // Parse hour:minute value with "g" specifier current culture.
      intervalString = "17:14";
      format = "g";
      culture = CultureInfo.CurrentCulture;
      try {
         interval = TimeSpan.ParseExact(intervalString, format, culture);
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'",
                           intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse hour:minute:second value with "G" specifier.
      intervalString = "17:14:48";
      format = "G";
      culture = CultureInfo.InvariantCulture;
      try {
         interval = TimeSpan.ParseExact(intervalString, format, culture);
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse hours:minute.second value with "G" specifier
      // and current (en-US) culture.
      intervalString = "17:14:48.153";
      format = "G";
      culture = CultureInfo.CurrentCulture;
      try {
         interval = TimeSpan.ParseExact(intervalString, format, culture);
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse days:hours:minute.second value with "G" specifier
      // and current (en-US) culture.
      intervalString = "3:17:14:48.153";
      format = "G";
      culture = CultureInfo.CurrentCulture;
      try {
         interval = TimeSpan.ParseExact(intervalString, format, culture);
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse days:hours:minute.second value with "G" specifier
      // and fr-FR culture.
      intervalString = "3:17:14:48.153";
      format = "G";
      culture = new CultureInfo("fr-FR");
      try {
         interval = TimeSpan.ParseExact(intervalString, format, culture);
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse days:hours:minute.second value with "G" specifier
      // and fr-FR culture.
      intervalString = "3:17:14:48,153";
      format = "G";
      try {
         interval = TimeSpan.ParseExact(intervalString, format, culture);
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse a single number using the "c" standard format string.
      intervalString = "12";
      format = "c";
      try {
         interval = TimeSpan.ParseExact(intervalString, format, null);
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse a single number using the "%h" custom format string.
      format = "%h";
      try {
         interval = TimeSpan.ParseExact(intervalString, format, null);
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse a single number using the "%s" custom format string.
      format = "%s";
      try {
         interval = TimeSpan.ParseExact(intervalString, format, null);
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }
   }
}
// The example displays the following output:
//       '17:14' --> 17:14:00
//       '17:14:48': Bad Format for 'G'
//       '17:14:48.153': Bad Format for 'G'
//       '3:17:14:48.153' --> 3.17:14:48.1530000
//       '3:17:14:48.153': Bad Format for 'G'
//       '3:17:14:48,153' --> 3.17:14:48.1530000
//       '12' --> 12.00:00:00
//       '12' --> 12:00:00
//       '12' --> 00:00:12

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
ParseExact 重载
System 命名空间

其他资源

标准 TimeSpan 格式字符串
自定义的 TimeSpan 格式字符串


TimeSpan ..::.ParseExact 方法 (String, array<String >[]()[], IFormatProvider)

TimeSpan
.
.
::
.
ParseExact 方法 (String,
array<
String
>
[]
()
[]
, IFormatProvider)
TimeSpan 结构

使用指定的格式字符串数组和区域性特定格式信息，将时间间隔的字符串表示形式转换为其等效的 TimeSpan。字符串表示形式的格式必须与一种指定的格式完全匹配。 使用指定的格式字符串数组和区域性特定格式信息，将时间间隔的字符串表示形式转换为其等效的 TimeSpan。字符串表示形式的格式必须与一种指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    input As String, _
    formats As String(), _
    formatProvider As IFormatProvider _
) As TimeSpan
public static TimeSpan ParseExact(
    string input,
    string[] formats,
    IFormatProvider formatProvider
)
public:
static TimeSpan ParseExact(
    String^ input,
    array<String^>^ formats,
    IFormatProvider^ formatProvider
)
static member ParseExact :
        input:string *
        formats:string[] *
        formatProvider:IFormatProvider -> TimeSpan

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
formats
类型：
array<
System String
>
[]
()
[]

用于定义所需的 input 格式的标准或自定义格式字符串的数组。
formatProvider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。

返回值

类型： System TimeSpan
与 input 对应的时间间隔，由 formats 和 formatProvider 指定。
异常 | 条件
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 具有无效的格式。
OverflowException | input 表示小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue 的数字。 - 或 - input 中的天、小时、分钟或秒中至少有一个分量超出其有效范围。

ParseExact(String, String, IFormatProvider) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数定义的格式之一，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 formats 中指定的格式之一，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpan%) 方法来代替。 ParseExact(String, String, IFormatProvider) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数定义的格式之一，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 formats 中指定的格式之一，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpan%) 方法来代替。 ParseExact(String, String, IFormatProvider) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数定义的格式之一，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 formats 中指定的格式之一，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpan%) 方法来代替。

formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。

重要说明 重要事项

仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。

如果用于分析 input 的格式字符串是标准格式字符串，formatProvider 参数是 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： 如果用于分析 input 的格式字符串是标准格式字符串，formatProvider 参数是 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

下面的示例调用 ParseExact(String, array<String>[]()[], IFormatProvider) 方法将字符串数组的每个元素转化为 TimeSpan 值。该示例使用法语（法国）("fr-FR") 区域性的格式设置约定解释字符串。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。 下面的示例调用 ParseExact(String, array<String>[]()[], IFormatProvider) 方法将字符串数组的每个元素转化为 TimeSpan 值。该示例使用法语（法国）("fr-FR") 区域性的格式设置约定解释字符串。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。 下面的示例调用 ParseExact(String, array<String>[]()[], IFormatProvider) 方法将字符串数组的每个元素转化为 TimeSpan 值。该示例使用法语（法国）("fr-FR") 区域性的格式设置约定解释字符串。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。

此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim inputs() As String = { "3", "16:42", "1:6:52:35.0625",
                                 "1:6:52:35,0625" }
      Dim formats() As String = { "%h", "g", "G" }
      Dim interval As TimeSpan
      Dim culture As New CultureInfo("fr-FR")

      ' Parse each string in inputs using formats and the fr-FR culture.
      For Each input As String In inputs
         Try
            interval = TimeSpan.ParseExact(input, formats, culture)
            Console.WriteLine("{0} --> {1:c}", input, interval)
         Catch e As FormatException
            Console.WriteLine("{0} --> Bad Format", input)
         Catch e As OverflowException
            Console.WriteLine("{0} --> Overflow", input)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       3 --> 3.00:00:00
'       16:42 --> 16:42:00
'       1:6:52:35.0625 --> Bad Format
'       1:6:52:35,0625 --> 1.06:52:35.0625000

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] inputs = { "3", "16:42", "1:6:52:35.0625",
                          "1:6:52:35,0625" };
      string[] formats = { "g", "G", "%h"};
      TimeSpan interval;
      CultureInfo culture = new CultureInfo("fr-FR");

      // Parse each string in inputs using formats and the fr-FR culture.
      foreach (string input in inputs) {
         try {
            interval = TimeSpan.ParseExact(input, formats, culture);
            Console.WriteLine("{0} --> {1:c}", input, interval);
         }
         catch (FormatException) {
            Console.WriteLine("{0} --> Bad Format", input);
         }
         catch (OverflowException) {
            Console.WriteLine("{0} --> Overflow", input);
         }
      }
   }
}
// The example displays the following output:
//       3 --> 03:00:00
//       16:42 --> 16:42:00
//       1:6:52:35.0625 --> Bad Format
//       1:6:52:35,0625 --> 1.06:52:35.0625000

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
ParseExact 重载
System 命名空间
TryParseExact

其他资源

标准 TimeSpan 格式字符串
自定义的 TimeSpan 格式字符串


TimeSpan ..::.ParseExact 方法 (String, String, IFormatProvider, TimeSpanStyles)

TimeSpan
.
.
::
.
ParseExact 方法 (String, String, IFormatProvider, TimeSpanStyles)
TimeSpan 结构

使用指定的格式、区域性特定格式信息和样式，将时间间隔的字符串表示形式转换为其等效的 TimeSpan。字符串表示形式的格式必须与指定的格式完全匹配。 使用指定的格式、区域性特定格式信息和样式，将时间间隔的字符串表示形式转换为其等效的 TimeSpan。字符串表示形式的格式必须与指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    input As String, _
    format As String, _
    formatProvider As IFormatProvider, _
    styles As TimeSpanStyles _
) As TimeSpan
public static TimeSpan ParseExact(
    string input,
    string format,
    IFormatProvider formatProvider,
    TimeSpanStyles styles
)
public:
static TimeSpan ParseExact(
    String^ input,
    String^ format,
    IFormatProvider^ formatProvider,
    TimeSpanStyles styles
)
static member ParseExact :
        input:string *
        format:string *
        formatProvider:IFormatProvider *
        styles:TimeSpanStyles -> TimeSpan

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
format
类型： System String
用于定义所需的 input 格式的标准或自定义格式字符串。
formatProvider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。
styles
类型： System.Globalization TimeSpanStyles
枚举值的按位组合，用于定义可出现在 input 中的样式元素。

返回值

类型： System TimeSpan
与 input 对应的时间间隔，由 format、formatProvider 和 styles 指定。
异常 | 条件
ArgumentException | styles是无效的 TimeSpanStyles 值。
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 具有无效的格式。
OverflowException | input 表示小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue 的数字。 - 或 - input 中的天、小时、分钟或秒中至少有一个分量超出其有效范围。

ParseExact 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 format 的格式，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, String, IFormatProvider, TimeSpanStyles, TimeSpan%) 方法来代替。 ParseExact 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 format 的格式，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, String, IFormatProvider, TimeSpanStyles, TimeSpan%) 方法来代替。 ParseExact 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 format 的格式，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, String, IFormatProvider, TimeSpanStyles, TimeSpan%) 方法来代替。

format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 input 格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 input 格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。

重要说明 重要事项

仅在 format 是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时，ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在 format 是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时，ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在 format 是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时，ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。

如果 format 为标准格式字符串，formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： 如果 format 为标准格式字符串，formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。 styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。 styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。

下面的示例使用 ParseExact(String, String, IFormatProvider) 方法来分析若干使用多种格式字符串和区域性的时间间隔的字符串表现形式。它还使用 TimeSpanStyles..::.AssumeNegative 值将每个字符串解释为一个负的时间间隔。该示例的输出阐释了 TimeSpanStyles..::.AssumeNegative 样式仅当其与自定义格式字符串一起使用时，才影响返回的值。 下面的示例使用 ParseExact(String, String, IFormatProvider) 方法来分析若干使用多种格式字符串和区域性的时间间隔的字符串表现形式。它还使用 TimeSpanStyles..::.AssumeNegative 值将每个字符串解释为一个负的时间间隔。该示例的输出阐释了 TimeSpanStyles..::.AssumeNegative 样式仅当其与自定义格式字符串一起使用时，才影响返回的值。 下面的示例使用 ParseExact(String, String, IFormatProvider) 方法来分析若干使用多种格式字符串和区域性的时间间隔的字符串表现形式。它还使用 TimeSpanStyles..::.AssumeNegative 值将每个字符串解释为一个负的时间间隔。该示例的输出阐释了 TimeSpanStyles..::.AssumeNegative 样式仅当其与自定义格式字符串一起使用时，才影响返回的值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim intervalString, format As String
      Dim interval As TimeSpan
      Dim culture As CultureInfo = Nothing

      ' Parse hour:minute value with custom format specifier.
      intervalString = "17:14"
      format = "h\:mm"
      culture = CultureInfo.CurrentCulture
      Try
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative)
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse hour:minute:second value with "g" specifier.
      intervalString = "17:14:48"
      format = "g"
      culture = CultureInfo.InvariantCulture
      Try
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative)
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse hours:minute.second value with custom format specifier.
      intervalString = "17:14:48.153"
      format = "h\:mm\:ss\.fff"
      culture = Nothing
      Try
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative)
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse days:hours:minute.second value with "G" specifier
      ' and current (en-US) culture.
      intervalString = "3:17:14:48.153"
      format = "G"
      culture = CultureInfo.CurrentCulture
      Try
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative)
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse days:hours:minute.second value with a custom format specifier.
      intervalString = "3:17:14:48.153"
      format = "d\:hh\:mm\:ss\.fff"
      culture = Nothing
      Try
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative)
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse days:hours:minute.second value with "G" specifier
      ' and fr-FR culture.
      intervalString = "3:17:14:48,153"
      format = "G"
      culture = New CultureInfo("fr-FR")
      Try
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative)
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse a single number using the "c" standard format string.
      intervalString = "12"
      format = "c"
      Try
         interval = TimeSpan.ParseExact(intervalString, format,
                                        Nothing, TimeSpanStyles.AssumeNegative)
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse a single number using the "%h" custom format string.
      format = "%h"
      Try
         interval = TimeSpan.ParseExact(intervalString, format,
                                        Nothing, TimeSpanStyles.AssumeNegative)
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try

      ' Parse a single number using the "%s" custom format string.
      format = "%s"
      Try
         interval = TimeSpan.ParseExact(intervalString, format,
                                        Nothing, TimeSpanStyles.AssumeNegative)
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Catch e As FormatException
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format)
      Catch e As OverflowException
         Console.WriteLine("'{0}': Overflow", intervalString)
      End Try
   End Sub
End Module
' The example displays the following output:
'    '17:14' (h\:mm) --> -17:14:00
'    '17:14:48' (g) --> 17:14:48
'    '17:14:48.153' (h\:mm\:ss\.fff) --> -17:14:48.1530000
'    '3:17:14:48.153' (G) --> 3.17:14:48.1530000
'    '3:17:14:48.153' (d\:hh\:mm\:ss\.fff) --> -3.17:14:48.1530000
'    '3:17:14:48,153' (G) --> 3.17:14:48.1530000
'    '12' (c) --> 12.00:00:00
'    '12' (%h) --> -12:00:00
'    '12' (%s) --> -00:00:12

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string intervalString, format;
      TimeSpan interval;
      CultureInfo culture = null;

      // Parse hour:minute value with custom format specifier.
      intervalString = "17:14";
      format = "h\\:mm";
      culture = CultureInfo.CurrentCulture;
      try {
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative);
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse hour:minute:second value with "g" specifier.
      intervalString = "17:14:48";
      format = "g";
      culture = CultureInfo.InvariantCulture;
      try {
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative);
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse hours:minute.second value with custom format specifier.
      intervalString = "17:14:48.153";
      format = @"h\:mm\:ss\.fff";
      culture = null;
      try {
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative);
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse days:hours:minute.second value with "G" specifier
      // and current (en-US) culture.
      intervalString = "3:17:14:48.153";
      format = "G";
      culture = CultureInfo.CurrentCulture;
      try {
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative);
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse days:hours:minute.second value with a custom format specifier.
      intervalString = "3:17:14:48.153";
      format = @"d\:hh\:mm\:ss\.fff";
      culture = null;
      try {
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative);
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse days:hours:minute.second value with "G" specifier
      // and fr-FR culture.
      intervalString = "3:17:14:48,153";
      format = "G";
      culture = new CultureInfo("fr-FR");
      try {
         interval = TimeSpan.ParseExact(intervalString, format,
                                        culture, TimeSpanStyles.AssumeNegative);
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse a single number using the "c" standard format string.
      intervalString = "12";
      format = "c";
      try {
         interval = TimeSpan.ParseExact(intervalString, format,
                                        null, TimeSpanStyles.AssumeNegative);
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse a single number using the "%h" custom format string.
      format = "%h";
      try {
         interval = TimeSpan.ParseExact(intervalString, format,
                                        null, TimeSpanStyles.AssumeNegative);
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }

      // Parse a single number using the "%s" custom format string.
      format = "%s";
      try {
         interval = TimeSpan.ParseExact(intervalString, format,
                                        null, TimeSpanStyles.AssumeNegative);
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}': Bad Format for '{1}'", intervalString, format);
      }
      catch (OverflowException) {
         Console.WriteLine("'{0}': Overflow", intervalString);
      }
   }
}
// The example displays the following output:
//    '17:14' (h\:mm) --> -17:14:00
//    '17:14:48' (g) --> 17:14:48
//    '17:14:48.153' (h\:mm\:ss\.fff) --> -17:14:48.1530000
//    '3:17:14:48.153' (G) --> 3.17:14:48.1530000
//    '3:17:14:48.153' (d\:hh\:mm\:ss\.fff) --> -3.17:14:48.1530000
//    '3:17:14:48,153' (G) --> 3.17:14:48.1530000
//    '12' (c) --> 12.00:00:00
//    '12' (%h) --> -12:00:00
//    '12' (%s) --> -00:00:12

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
ParseExact 重载
System 命名空间

其他资源

标准 TimeSpan 格式字符串
自定义的 TimeSpan 格式字符串


TimeSpan ..::.ParseExact 方法 (String, array<String >[]()[], IFormatProvider, TimeSpanStyles)

TimeSpan
.
.
::
.
ParseExact 方法 (String,
array<
String
>
[]
()
[]
, IFormatProvider, TimeSpanStyles)
TimeSpan 结构

使用指定的格式、区域性特定格式信息和样式，将时间间隔的字符串表示形式转换为其等效的 TimeSpan。字符串表示形式的格式必须与一种指定的格式完全匹配。 使用指定的格式、区域性特定格式信息和样式，将时间间隔的字符串表示形式转换为其等效的 TimeSpan。字符串表示形式的格式必须与一种指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ParseExact ( _
    input As String, _
    formats As String(), _
    formatProvider As IFormatProvider, _
    styles As TimeSpanStyles _
) As TimeSpan
public static TimeSpan ParseExact(
    string input,
    string[] formats,
    IFormatProvider formatProvider,
    TimeSpanStyles styles
)
public:
static TimeSpan ParseExact(
    String^ input,
    array<String^>^ formats,
    IFormatProvider^ formatProvider,
    TimeSpanStyles styles
)
static member ParseExact :
        input:string *
        formats:string[] *
        formatProvider:IFormatProvider *
        styles:TimeSpanStyles -> TimeSpan

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
formats
类型：
array<
System String
>
[]
()
[]

用于定义所需的 input 格式的标准或自定义格式字符串的数组。
formatProvider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。
styles
类型： System.Globalization TimeSpanStyles
枚举值的按位组合，用于定义可出现在 input 中的样式元素。

返回值

类型： System TimeSpan
与 input 对应的时间间隔，由 formats、formatProvider 和 styles 指定。
异常 | 条件
ArgumentException | styles是无效的 TimeSpanStyles 值。
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | input 具有无效的格式。
OverflowException | input 表示小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue 的数字。 - 或 - input 中的天、小时、分钟或秒中至少有一个分量超出其有效范围。

ParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数定义的格式之一，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 formats 中指定的格式之一，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles, TimeSpan%) 方法来代替。 ParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数定义的格式之一，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 formats 中指定的格式之一，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles, TimeSpan%) 方法来代替。 ParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数定义的格式之一，只不过前导和尾随空白字符都将被忽略。由于 input 必须完全符合 formats 中指定的格式之一，因此在用户将字符串输入转换为时间间隔时，您总是应该使用异常处理。如果您希望不使用异常处理，您可以调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles, TimeSpan%) 方法来代替。

formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。

重要说明 重要事项

仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。

如果用于分析 input 的格式字符串是标准格式字符串，formatProvider 参数是 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： 如果用于分析 input 的格式字符串是标准格式字符串，formatProvider 参数是 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。 styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。 styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。

下面的示例调用 ParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles) 方法将字符串数组的每个元素转化为 TimeSpan 值。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。 下面的示例调用 ParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles) 方法将字符串数组的每个元素转化为 TimeSpan 值。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。

此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim inputs() As String = { "3", "16:42", "1:6:52:35.0625",
                                 "1:6:52:35,0625" }
      Dim formats() As String = { "%h", "g", "G" }
      Dim interval As TimeSpan
      Dim culture As New CultureInfo("de-DE")

      ' Parse each string in inputs using formats and the de-DE culture.
      For Each input As String In inputs
         Try
            interval = TimeSpan.ParseExact(input, formats, culture,
                                           TimeSpanStyles.AssumeNegative)
            Console.WriteLine("{0} --> {1:c}", input, interval)
         Catch e As FormatException
            Console.WriteLine("{0} --> Bad Format", input)
         Catch e As OverflowException
            Console.WriteLine("{0} --> Overflow", input)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       3 --> -03:00:00
'       16:42 --> 16:42:00
'       1:6:52:35.0625 --> Bad Format
'       1:6:52:35,0625 --> 1.06:52:35.0625000

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] inputs = { "3", "16:42", "1:6:52:35.0625",
                          "1:6:52:35,0625" };
      string[] formats = { "%h", "g", "G" };
      TimeSpan interval;
      CultureInfo culture = new CultureInfo("de-DE");

      // Parse each string in inputs using formats and the de-DE culture.
      foreach (string input in inputs) {
         try {
            interval = TimeSpan.ParseExact(input, formats, culture,
                                           TimeSpanStyles.AssumeNegative);
            Console.WriteLine("{0} --> {1:c}", input, interval);
         }
         catch (FormatException) {
            Console.WriteLine("{0} --> Bad Format", input);
         }
         catch (OverflowException) {
            Console.WriteLine("{0} --> Overflow", input);
         }
      }
   }
}
// The example displays the following output:
//       3 --> -03:00:00
//       16:42 --> 16:42:00
//       1:6:52:35.0625 --> Bad Format
//       1:6:52:35,0625 --> 1.06:52:35.0625000

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
ParseExact 重载
System 命名空间

其他资源

标准 TimeSpan 格式字符串
自定义的 TimeSpan 格式字符串


TimeSpan ..::.Subtract 方法

TimeSpan
.
.
::
.
Subtract 方法
TimeSpan 结构

从此实例中减去指定的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Subtract ( _
    ts As TimeSpan _
) As TimeSpan
public TimeSpan Subtract(
    TimeSpan ts
)
public:
TimeSpan Subtract(
    TimeSpan ts
)
member Subtract :
        ts:TimeSpan -> TimeSpan

参数

ts
类型： System TimeSpan
要减去的时间间隔。

返回值

类型： System TimeSpan
一个时间间隔，其值为此实例的值减去 ts 的值所得的结果。
异常 | 条件
OverflowException | 返回值小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue。

返回值必须在 TimeSpan..::.MinValue 和 TimeSpan..::.MaxValue 之间；否则将发生异常。

返回值是新的 TimeSpan；不修改原始 TimeSpan。

下面的示例创建几对 TimeSpan 对象，并使用 Subtract 方法计算它们的差。

' Example of the TimeSpan.Add( ) and TimeSpan.Subtract( ) methods.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanAddSubDemo

    Const dataFmt As String = "{0,-24}{1,24}"

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    ' Display TimeSpan parameters and their sum and difference.
    Sub ShowTimeSpanSumDiff( Left as TimeSpan, Right as TimeSpan )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "TimeSpan Left", Align( Left ) )
        Console.WriteLine( dataFmt, "TimeSpan Right", Align( Right ) )
        Console.WriteLine( dataFmt, "Left.Add( Right )", _
            Align( Left.Add( Right ) ) )
        Console.WriteLine( dataFmt, "Left.Subtract( Right )", _
            Align( Left.Subtract( Right ) ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the TimeSpan.Add( ) and " & _
            "TimeSpan.Subtract( ) " & vbCrLf & "methods " & _
            "generates the following output by creating several " & _
            vbCrLf & "pairs of TimeSpan objects and calculating " & _
            "and displaying " & vbCrLf & "the sum " & _
            "and difference of each." )

        ' Create pairs of TimeSpan objects.
        ShowTimeSpanSumDiff( _
            new TimeSpan( 1, 20, 0 ), _
            new TimeSpan( 0, 45, 10 ) )
        ShowTimeSpanSumDiff( _
            new TimeSpan( 1, 10, 20, 30, 40 ), _
            new TimeSpan( -1, 2, 3, 4, 5 ) )
        ShowTimeSpanSumDiff( _
            new TimeSpan( 182, 12, 30, 30, 505 ), _
            new TimeSpan( 182, 11, 29, 29, 495 ) )
        ShowTimeSpanSumDiff( _
            new TimeSpan( 888888888888888 ), _
            new TimeSpan( 999999999999999 ) )
    End Sub
End Module

' This example of the TimeSpan.Add( ) and TimeSpan.Subtract( )
' methods generates the following output by creating several
' pairs of TimeSpan objects and calculating and displaying
' the sum and difference of each.
'
' TimeSpan Left                   01:20:00
' TimeSpan Right                  00:45:10
' Left.Add( Right )               02:05:10
' Left.Subtract( Right )          00:34:50
'
' TimeSpan Left                 1.10:20:30.0400000
' TimeSpan Right                 -21:56:55.9950000
' Left.Add( Right )               12:23:34.0450000
' Left.Subtract( Right )        2.08:17:26.0350000
'
' TimeSpan Left               182.12:30:30.5050000
' TimeSpan Right              182.11:29:29.4950000
' Left.Add( Right )           365.00:00:00
' Left.Subtract( Right )          01:01:01.0100000
'
' TimeSpan Left              1028.19:21:28.8888888
' TimeSpan Right             1157.09:46:39.9999999
' Left.Add( Right )          2186.05:08:08.8888887
' Left.Subtract( Right )     -128.14:25:11.1111111

// Example of the TimeSpan.Add( ) and TimeSpan.Subtract( ) methods.
using System;

class TimeSpanAddSubDemo
{
    const string dataFmt = "{0,-24}{1,24}" ;

    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    // Display TimeSpan parameters and their sum and difference.
    static void ShowTimeSpanSumDiff( TimeSpan Left, TimeSpan Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "TimeSpan Left", Align( Left ) );
        Console.WriteLine( dataFmt, "TimeSpan Right", Align( Right ) );
        Console.WriteLine( dataFmt, "Left.Add( Right )",
            Align( Left.Add( Right ) ) );
        Console.WriteLine( dataFmt, "Left.Subtract( Right )",
            Align( Left.Subtract( Right ) ) );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan.Add( ) and " +
            "TimeSpan.Subtract( ) \nmethods generates the " +
            "following output by creating several \npairs of " +
            "TimeSpan objects and calculating and displaying \n" +
            "the sum and difference of each." );

        // Create pairs of TimeSpan objects.
        ShowTimeSpanSumDiff(
            new TimeSpan( 1, 20, 0 ),
            new TimeSpan( 0, 45, 10 ) );
        ShowTimeSpanSumDiff(
            new TimeSpan( 1, 10, 20, 30, 40 ),
            new TimeSpan( -1, 2, 3, 4, 5 ) );
        ShowTimeSpanSumDiff(
            new TimeSpan( 182, 12, 30, 30, 505 ),
            new TimeSpan( 182, 11, 29, 29, 495 ) );
        ShowTimeSpanSumDiff(
            new TimeSpan( 888888888888888 ),
            new TimeSpan( 999999999999999 ) );
    }
}

/*
This example of the TimeSpan.Add( ) and TimeSpan.Subtract( )
methods generates the following output by creating several
pairs of TimeSpan objects and calculating and displaying
the sum and difference of each.

TimeSpan Left                   01:20:00
TimeSpan Right                  00:45:10
Left.Add( Right )               02:05:10
Left.Subtract( Right )          00:34:50

TimeSpan Left                 1.10:20:30.0400000
TimeSpan Right                 -21:56:55.9950000
Left.Add( Right )               12:23:34.0450000
Left.Subtract( Right )        2.08:17:26.0350000

TimeSpan Left               182.12:30:30.5050000
TimeSpan Right              182.11:29:29.4950000
Left.Add( Right )           365.00:00:00
Left.Subtract( Right )          01:01:01.0100000

TimeSpan Left              1028.19:21:28.8888888
TimeSpan Right             1157.09:46:39.9999999
Left.Add( Right )          2186.05:08:08.8888887
Left.Subtract( Right )     -128.14:25:11.1111111
*/

// Example of the TimeSpan::Add( ) and TimeSpan::Subtract( ) methods.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

// Display TimeSpan parameters and their sum and difference.
static void ShowTimeSpanSumDiff( TimeSpan Left, TimeSpan Right )
{
   String^ dataFmt = "{0,-24}{1,24}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "TimeSpan Left", Align( Left ) );
   Console::WriteLine( dataFmt, "TimeSpan Right", Align( Right ) );
   Console::WriteLine( dataFmt, "Left.Add( Right )", Align( Left.Add( Right ) ) );
   Console::WriteLine( dataFmt, "Left.Subtract( Right )", Align( Left.Subtract( Right ) ) );
}

int main()
{
   Console::WriteLine( "This example of the TimeSpan::Add( ) and "
   "TimeSpan::Subtract( ) \nmethods generates the "
   "following output by creating several \npairs of "
   "TimeSpan objects and calculating and displaying \n"
   "the sum and difference of each." );

   // Create pairs of TimeSpan objects.
   ShowTimeSpanSumDiff( TimeSpan(1,20,0), TimeSpan(0,45,10) );
   ShowTimeSpanSumDiff( TimeSpan(1,10,20,30,40), TimeSpan( -1,2,3,4,5) );
   ShowTimeSpanSumDiff( TimeSpan(182,12,30,30,505), TimeSpan(182,11,29,29,495) );
   ShowTimeSpanSumDiff( TimeSpan(888888888888888), TimeSpan(999999999999999) );
}

/*
This example of the TimeSpan::Add( ) and TimeSpan::Subtract( )
methods generates the following output by creating several
pairs of TimeSpan objects and calculating and displaying
the sum and difference of each.

TimeSpan Left                   01:20:00
TimeSpan Right                  00:45:10
Left.Add( Right )               02:05:10
Left.Subtract( Right )          00:34:50

TimeSpan Left                 1.10:20:30.0400000
TimeSpan Right                 -21:56:55.9950000
Left.Add( Right )               12:23:34.0450000
Left.Subtract( Right )        2.08:17:26.0350000

TimeSpan Left               182.12:30:30.5050000
TimeSpan Right              182.11:29:29.4950000
Left.Add( Right )           365.00:00:00
Left.Subtract( Right )          01:01:01.0100000

TimeSpan Left              1028.19:21:28.8888888
TimeSpan Right             1157.09:46:39.9999999
Left.Add( Right )          2186.05:08:08.8888887
Left.Subtract( Right )     -128.14:25:11.1111111
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
DateTime Subtract


TimeSpan ..::.ToString 方法

TimeSpan
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

将当前 TimeSpan 对象的值转换为其等效的字符串表示形式。

名称 说明
页首

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan ..::.ToString 方法

TimeSpan
.
.
::
.
ToString 方法
TimeSpan 结构

将当前 TimeSpan 对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前 TimeSpan 值的字符串表示形式。

返回的字符串使用 "c" 格式说明符进行格式设置，且具有以下格式：

[-][d.]hh:mm:ss[.fffffff]

返回的字符串中可能不包括方括号（[ 和 ]）中的元素。冒号和句号（: 和 .）是原义字符。下表列出了非原义元素。注意，ToString()()() 方法所返回的字符串区不分区域性。
返回的字符串中可能不包括方括号（[ 和 ]）中的元素。冒号和句号（: 和 .）是原义字符。下表列出了非原义元素。注意，ToString()()() 方法所返回的字符串区不分区域性。
返回的字符串中可能不包括方括号（[ 和 ]）中的元素。冒号和句号（: 和 .）是原义字符。下表列出了非原义元素。注意，ToString()()() 方法所返回的字符串区不分区域性。
返回的字符串中可能不包括方括号（[ 和 ]）中的元素。冒号和句号（: 和 .）是原义字符。下表列出了非原义元素。注意，ToString()()() 方法所返回的字符串区不分区域性。

项 | 说明
“-” | 减号，指示负时间跨度。正时间跨度不包含任何符号。 减号，指示负时间跨度。正时间跨度不包含任何符号。
“d” | 时间间隔中的天数。如果时间间隔小于一天，则忽略此元素。 时间间隔中的天数。如果时间间隔小于一天，则忽略此元素。
“hh” | 时间间隔中的小时数，范围从 0 到 23。
“mm” | 时间间隔中的分钟数，范围从 0 到 59。
“ss” | 时间间隔中的秒数，范围从 0 到 59。
“fffffff” | 时间跨度中秒的小数部分。如果时间间隔不包括秒的小数部分，则忽略此元素。如果包括，则始终使用 7 位数表示秒的小数部分。 时间跨度中秒的小数部分。如果时间间隔不包括秒的小数部分，则忽略此元素。如果包括，则始终使用 7 位数表示秒的小数部分。 时间跨度中秒的小数部分。如果时间间隔不包括秒的小数部分，则忽略此元素。如果包括，则始终使用 7 位数表示秒的小数部分。
说明 说明

有关比较 TimeSpan 的字符串表示形式与 Oracle 数据类型的更多信息，请参见知识库文章 324577: System.TimeSpan Does Not Match Oracle 9i INTERVAL DAY TO SECOND Data Type（324577：System.TimeSpan 不匹配 Oracle 9i INTERVAL DAY TO SECOND 数据类型）。

对调用者的说明

在 .NET Framework 4 版 中添加了对 TimeSpan 值进行格式设置的支持。但是，ToString()()() 方法重载仍然是不区分区域性的。其行为与以前版本的 .NET Framework 保持不变。 在 .NET Framework 4 版 中添加了对 TimeSpan 值进行格式设置的支持。但是，ToString()()() 方法重载仍然是不区分区域性的。其行为与以前版本的 .NET Framework 保持不变。 在 .NET Framework 4 版 中添加了对 TimeSpan 值进行格式设置的支持。但是，ToString()()() 方法重载仍然是不区分区域性的。其行为与以前版本的 .NET Framework 保持不变。

下面的示例显示通过将 ToString 方法与许多 TimeSpan 值一起调用返回的字符串。

Module ToString
   Public Sub Main()
      Dim span As TimeSpan

      ' Initialize a time span to zero.
      span = TimeSpan.Zero
      Console.WriteLine(span)

      ' Initialize a time span to 14 days.
      span = New TimeSpan(-14, 0, 0, 0, 0)
      Console.WriteLine(span)

      ' Initialize a time span to 1:02:03.
      span = New TimeSpan(1, 2, 3)
      Console.WriteLine(span)

      ' Initialize a time span to 250 milliseconds.
      span = New TimeSpan(0, 0, 0, 0, 250)
      Console.WriteLine(span)

      ' Initalize a time span to 99 days, 23 hours, 59 minutes, and 59.9999999 seconds.
      span = New TimeSpan(99, 23, 59, 59, 999)
      Console.WriteLine(span)

      ' Initalize a time span to 3 hours.
      span = New TimeSpan(3, 0, 0)
      Console.WriteLine(span)

      ' Initalize a timespan to 25 milliseconds.
      span = New TimeSpan(0, 0, 0, 0, 25)
      Console.WriteLine(span)
   End Sub
End Module
' The example displays the following output:
'       00:00:00
'       -14.00:00:00
'       01:02:03
'       00:00:00.2500000
'       99.23:59:59.9990000
'       03:00:00
'       00:00:00.0250000

using System;

public class ToString
{
   public static void Main()
   {
      TimeSpan span;

      // Initialize a time span to zero.
      span = TimeSpan.Zero;
      Console.WriteLine(span);

      // Initialize a time span to 14 days.
      span = new TimeSpan(-14, 0, 0, 0, 0);
      Console.WriteLine(span);

      // Initialize a time span to 1:02:03.
      span = new TimeSpan(1, 2, 3);
      Console.WriteLine(span);

      // Initialize a time span to 250 milliseconds.
      span = new TimeSpan(0, 0, 0, 0, 250);
      Console.WriteLine(span);

      // Initalize a time span to 99 days, 23 hours, 59 minutes, and 59.999 seconds.
      span = new TimeSpan(99, 23, 59, 59, 999);
      Console.WriteLine(span);

      // Initalize a time span to 3 hours.
      span = new TimeSpan(3, 0, 0);
      Console.WriteLine(span);

      // Initalize a timespan to 25 milliseconds.
      span = new TimeSpan(0, 0, 0, 0, 25);
      Console.WriteLine(span);
   }
}
// The example displays the following output:
//       00:00:00
//       -14.00:00:00
//       01:02:03
//       00:00:00.2500000
//       99.23:59:59.9990000
//       03:00:00
//       00:00:00.0250000

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
ToString 重载
System 命名空间
String
Parse
TryParse


TimeSpan ..::.ToString 方法 (String)

TimeSpan
.
.
::
.
ToString 方法 (String)
TimeSpan 结构

使用指定的格式将当前 TimeSpan 对象的值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
标准或自定义的 TimeSpan 格式字符串。

返回值

类型： System String
当前 TimeSpan 值的字符串表示形式，该值使用 format 参数指定的格式。
异常 | 条件
FormatException | 无法识别或不支持 format 参数。

format 参数可以是用于 TimeSpan 值的任何有效或自定义的格式说明符。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 TimeSpan 对象的返回值会使用通用格式说明符（“c”）来设置格式。如果 format 是任何其他值，则该方法将引发 FormatException。 format 参数可以是用于 TimeSpan 值的任何有效或自定义的格式说明符。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 TimeSpan 对象的返回值会使用通用格式说明符（“c”）来设置格式。如果 format 是任何其他值，则该方法将引发 FormatException。 format 参数可以是用于 TimeSpan 值的任何有效或自定义的格式说明符。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 TimeSpan 对象的返回值会使用通用格式说明符（“c”）来设置格式。如果 format 是任何其他值，则该方法将引发 FormatException。

如果 format 是标准格式字符串，所返回字符串的格式通过设置当前区域性约定的格式来定义。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关 TimeSpan 值格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。

  • 有关对 .NET Framework 中的格式设置支持的更多信息，请参见格式化类型。

下面的示例使用标准 TimeSpan 格式字符串显示 TimeSpan 值数组中每个元素的字符串表示形式。

Module Example
   Public Sub Main()
      Dim spans() As TimeSpan = { TimeSpan.Zero, New TimeSpan(-14, 0, 0, 0, 0),
                                  New TimeSpan(1, 2, 3),
                                  New TimeSpan(0, 0, 0, 0, 250),
                                  New TimeSpan(99, 23, 59, 59, 999),
                                  New TimeSpan(3, 0, 0),
                                  New TimeSpan(0, 0, 0, 0, 25) }
      Dim fmts() As String = { "c", "g", "G" }
      For Each span As TimeSpan In spans
         For Each fmt As String In fmts
            Console.WriteLine("{0}: {1}", fmt, span.ToString(fmt))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       c: 00:00:00
'       g: 0:00:00
'       G: 0:00:00:00.0000000
'
'       c: -14.00:00:00
'       g: -14:0:00:00
'       G: -14:00:00:00.0000000
'
'       c: 01:02:03
'       g: 1:02:03
'       G: 0:01:02:03.0000000
'
'       c: 00:00:00.2500000
'       g: 0:00:00.25
'       G: 0:00:00:00.2500000
'
'       c: 99.23:59:59.9990000
'       g: 99:23:59:59.999
'       G: 99:23:59:59.9990000
'
'       c: 03:00:00
'       g: 3:00:00
'       G: 0:03:00:00.0000000
'
'       c: 00:00:00.0250000
'       g: 0:00:00.025
'       G: 0:00:00:00.0250000

using System;

public class Class1
{
   public static void Main()
   {
      TimeSpan[] spans = { TimeSpan.Zero, new TimeSpan(-14, 0, 0, 0, 0),
                           new TimeSpan(1, 2, 3),
                           new TimeSpan(0, 0, 0, 0, 250),
                           new TimeSpan(99, 23, 59, 59, 999),
                           new TimeSpan(3, 0, 0),
                           new TimeSpan(0, 0, 0, 0, 25) };
      string[] fmts = { "c", "g", "G" };
      foreach (TimeSpan span in spans)
      {
         foreach (string fmt in fmts)
            Console.WriteLine("{0}: {1}", fmt, span.ToString(fmt));

         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       c: 00:00:00
//       g: 0:00:00
//       G: 0:00:00:00.0000000
//
//       c: -14.00:00:00
//       g: -14:0:00:00
//       G: -14:00:00:00.0000000
//
//       c: 01:02:03
//       g: 1:02:03
//       G: 0:01:02:03.0000000
//
//       c: 00:00:00.2500000
//       g: 0:00:00.25
//       G: 0:00:00:00.2500000
//
//       c: 99.23:59:59.9990000
//       g: 99:23:59:59.999
//       G: 99:23:59:59.9990000
//
//       c: 03:00:00
//       g: 3:00:00
//       G: 0:03:00:00.0000000
//
//       c: 00:00:00.0250000
//       g: 0:00:00.025
//       G: 0:00:00:00.0250000

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
ToString 重载
System 命名空间

其他资源

标准 TimeSpan 格式字符串
自定义的 TimeSpan 格式字符串


TimeSpan ..::.ToString 方法 (String, IFormatProvider)

TimeSpan
.
.
::
.
ToString 方法 (String, IFormatProvider)
TimeSpan 结构

使用指定的格式和区域性特定的格式设置信息，将当前 TimeSpan 对象的值转换为其等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    formatProvider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider formatProvider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ formatProvider
) sealed
abstract ToString :
        format:string *
        formatProvider:IFormatProvider -> string
override ToString :
        format:string *
        formatProvider:IFormatProvider -> string

参数

format
类型： System String
标准或自定义的 TimeSpan 格式字符串。
formatProvider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
当前 TimeSpan 值的字符串表示形式，格式由 format 和 formatProvider 指定。

实现

异常 | 条件
FormatException | 无法识别或不支持 format 参数。

format 参数可以是用于 TimeSpan 值的任何有效或自定义的格式说明符。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 TimeSpan 对象的返回值会使用通用格式说明符（“c”）来设置格式。如果格式是其他任何值，则该方法引发 FormatException。 format 参数可以是用于 TimeSpan 值的任何有效或自定义的格式说明符。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 TimeSpan 对象的返回值会使用通用格式说明符（“c”）来设置格式。如果格式是其他任何值，则该方法引发 FormatException。 format 参数可以是用于 TimeSpan 值的任何有效或自定义的格式说明符。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 TimeSpan 对象的返回值会使用通用格式说明符（“c”）来设置格式。如果格式是其他任何值，则该方法引发 FormatException。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关 TimeSpan 值格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。

  • 有关对 .NET Framework 中的格式设置支持的更多信息，请参见格式化类型。

formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。如果 format 是自定义格式字符串，则忽略 formatProvider 参数。 如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。如果 format 是自定义格式字符串，则忽略 formatProvider 参数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
ToString 重载
System 命名空间


TimeSpan ..::.TryParse 方法

TimeSpan
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

将时间间隔的指定字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。

名称 说明
页首

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Parse


TimeSpan ..::.TryParse 方法 (String, TimeSpan%)

TimeSpan
.
.
::
.
TryParse 方法 (String, TimeSpan%)
TimeSpan 结构

将时间间隔的字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As TimeSpan _
) As Boolean
public static bool TryParse(
    string s,
    out TimeSpan result
)
public:
static bool TryParse(
    String^ s,
    [OutAttribute] TimeSpan% result
)
static member TryParse :
        s:string *
        result:TimeSpan byref -> bool

参数

s
类型： System String
一个字符串，用于指定进行转换的时间间隔。
result
类型： System TimeSpan %
此方法返回时，包含表示由 s 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。 此方法返回时，包含表示由 s 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 s，则为 true；否则为 false。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 String..::.Empty，格式无效，表示的时间间隔小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue，或者天、小时、分钟或秒分量中至少有一个超出其有效范围，则此运算返回 false。 如果成功转换了 s，则为 true；否则为 false。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 String..::.Empty，格式无效，表示的时间间隔小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue，或者天、小时、分钟或秒分量中至少有一个超出其有效范围，则此运算返回 false。

TryParse 方法类似于 TimeSpan..::.Parse(String) 方法，不同之处在于该方法在转换失败时不引发异常。

s 参数包含一个如下形式的时间间隔规范：

[ws][-]{ d |d.hh:mm[:ss[.ff]] | hh:mm[:ss[.ff]] }[ws] | [ws][-]{ d |d.hh:mm[:ss[.ff]] | hh:mm[:ss[.ff]] }[ws]

方括号（[ 和 ]）中的元素是可选的。需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
- | 一个可选的减号，指示负的 TimeSpan。
d | 天，范围从 0 到 10675199。
. | 一个区分区域性的符号，用于将天与小时分开。固定格式使用句点 (".") 字符。 一个区分区域性的符号，用于将天与小时分开。固定格式使用句点 (".") 字符。
hh | 小时，范围从 0 到 23。
: | 区分区域性的时间分隔符。固定格式使用冒号 (":") 字符。 区分区域性的时间分隔符。固定格式使用冒号 (":") 字符。
mm | 分钟，范围从 0 到 59。
ss | 可选的秒，范围从 0 到 59。
. | 一个区分区域性的符号，用于将秒与秒的小数部分分开。固定格式使用句点 (".") 字符。 一个区分区域性的符号，用于将秒与秒的小数部分分开。固定格式使用句点 (".") 字符。
ff | 可选的秒的小数部分，包含 1 到 7 位小数。

s 的分量必须整体指定大于或等于 TimeSpan..::.MinValue 并小于或等于 TimeSpan..::.MaxValue 的时间间隔。

Parse(String) 方法尝试通过使用当前区域的各个特殊区域格式来分析 s。

对调用者的说明

在某些情况下，当要分析的字符串中的时间间隔组件包含超过 7 位数字，在 .NET Framework 3.5 以及更早版本中成功执行的分析操作在 .NET Framework 4 中可能失败并引发 OverflowException。以下示例说明了此情形。

Dim value As String = "000000006"
Dim interval As TimeSpan
If TimeSpan.TryParse(value, interval) Then
   Console.WriteLine("{0} --> {1}", value, interval)
Else
   Console.WriteLine("Unable to parse '{0}'", value)
End If
' Output from .NET Framework 3.5 and earlier versions:
'       000000006 --> 6.00:00:00
' Output from .NET Framework 4:
'       Unable to parse '000000006'

string value = "000000006";
TimeSpan interval;
if (TimeSpan.TryParse(value, out interval))
   Console.WriteLine("{0} --> {1}", value, interval);
else
   Console.WriteLine("Unable to parse '{0}'", value);
// Output from .NET Framework 3.5 and earlier versions:
//       000000006 --> 6.00:00:00
// Output from .NET Framework 4:
//       Unable to parse //000000006//

下面的示例使用 TryParse 方法，通过有效的 TimeSpan 字符串创建 TimeSpan 对象，并指示因时间跨度字符串无效而导致分析操作失败的情况。

Module TryParse
    Sub ParseTimeSpan( intervalStr As String )
        ' Write the first part of the output line.
        Console.Write( "{0,20}   ", intervalStr )

        ' Parse the parameter, and then convert it back to a string.
         Dim intervalVal As TimeSpan
         If TimeSpan.TryParse( intervalStr, intervalVal ) Then
            Dim intervalToStr As String = intervalVal.ToString( )

            ' Pad the end of the TimeSpan string with spaces if it
            ' does not contain milliseconds.
            Dim pIndex As Integer = intervalToStr.IndexOf( ":"c )
            pIndex = intervalToStr.IndexOf( "."c, pIndex )
            If pIndex < 0 Then   intervalToStr &= "        "

            Console.WriteLine( "{0,21}", intervalToStr )
         ' Handle failure of TryParse method.
         Else
            Console.WriteLine("Parse operation failed.")
        End If
    End Sub

    Public Sub Main( )
        Console.WriteLine( "{0,20}   {1,21}", _
            "String to Parse", "TimeSpan" )
        Console.WriteLine( "{0,20}   {1,21}", _
            "---------------", "---------------------" )

        ParseTimeSpan("0")
        ParseTimeSpan("14")
        ParseTimeSpan("1:2:3")
        ParseTimeSpan("0:0:0.250")
        ParseTimeSpan("10.20:30:40.50")
        ParseTimeSpan("99.23:59:59.9999999")
        ParseTimeSpan("0023:0059:0059.0099")
        ParseTimeSpan("23:0:0")
        ParseTimeSpan("24:0:0")
        ParseTimespan("0:59:0")
        ParseTimeSpan("0:60:0")
        ParseTimespan("0:0:59")
        ParseTimeSpan("0:0:60")
        ParseTimeSpan("10:")
        ParsetimeSpan("10:0")
        ParseTimeSpan(":10")
        ParseTimeSpan("0:10")
        ParseTimeSpan("10:20:")
        ParseTimeSpan("10:20:0")
        ParseTimeSpan(".123")
        ParseTimeSpan("0.12:00")
        ParseTimeSpan("10.")
        ParseTimeSpan("10.12")
        ParseTimeSpan("10.12:00")
    End Sub
End Module
' This example generates the following output:
'            String to Parse                TimeSpan
'            ---------------   ---------------------
'                          0        00:00:00
'                         14     14.00:00:00
'                      1:2:3        01:02:03
'                  0:0:0.250        00:00:00.2500000
'             10.20:30:40.50     10.20:30:40.5000000
'        99.23:59:59.9999999     99.23:59:59.9999999
'        0023:0059:0059.0099        23:59:59.0099000
'                     23:0:0        23:00:00
'                     24:0:0   Parse operation failed.
'                     0:59:0        00:59:00
'                     0:60:0   Parse operation failed.
'                     0:0:59        00:00:59
'                     0:0:60   Parse operation failed.
'                        10:   Parse operation failed.
'                       10:0        10:00:00
'                        :10   Parse operation failed.
'                       0:10        00:10:00
'                     10:20:   Parse operation failed.
'                    10:20:0        10:20:00
'                       .123   Parse operation failed.
'                    0.12:00        12:00:00
'                        10.   Parse operation failed.
'                      10.12   Parse operation failed.
'                   10.12:00     10.12:00:00

using System;

public class TryParse
{
   private static void ParseTimeSpan(string intervalStr)
   {
      // Write the first part of the output line.
      Console.Write( "{0,20}   ", intervalStr );

      // Parse the parameter, and then convert it back to a string.
      TimeSpan intervalVal;
      if (TimeSpan.TryParse(intervalStr, out intervalVal))
      {
         string intervalToStr = intervalVal.ToString();

         // Pad the end of the TimeSpan string with spaces if it
         // does not contain milliseconds.
         int pIndex = intervalToStr.IndexOf(':');
         pIndex = intervalToStr.IndexOf('.', pIndex);
         if (pIndex < 0)
            intervalToStr += "        ";

         Console.WriteLine("{0,21}", intervalToStr);
         // Handle failure of TryParse method.
      }
      else
      {
         Console.WriteLine("Parse operation failed.");
      }
   }

   public static void Main()
   {
        Console.WriteLine( "{0,20}   {1,21}",
            "String to Parse", "TimeSpan" );
        Console.WriteLine( "{0,20}   {1,21}",
            "---------------", "---------------------" );

        ParseTimeSpan("0");
        ParseTimeSpan("14");
        ParseTimeSpan("1:2:3");
        ParseTimeSpan("0:0:0.250");
        ParseTimeSpan("10.20:30:40.50");
        ParseTimeSpan("99.23:59:59.9999999");
        ParseTimeSpan("0023:0059:0059.0099");
        ParseTimeSpan("23:0:0");
        ParseTimeSpan("24:0:0");
        ParseTimeSpan("0:59:0");
        ParseTimeSpan("0:60:0");
        ParseTimeSpan("0:0:59");
        ParseTimeSpan("0:0:60");
        ParseTimeSpan("10:");
        ParseTimeSpan("10:0");
        ParseTimeSpan(":10");
        ParseTimeSpan("0:10");
        ParseTimeSpan("10:20:");
        ParseTimeSpan("10:20:0");
        ParseTimeSpan(".123");
        ParseTimeSpan("0.12:00");
        ParseTimeSpan("10.");
        ParseTimeSpan("10.12");
        ParseTimeSpan("10.12:00");
   }
}
//            String to Parse                TimeSpan
//            ---------------   ---------------------
//                          0        00:00:00
//                         14     14.00:00:00
//                      1:2:3        01:02:03
//                  0:0:0.250        00:00:00.2500000
//             10.20:30:40.50     10.20:30:40.5000000
//        99.23:59:59.9999999     99.23:59:59.9999999
//        0023:0059:0059.0099        23:59:59.0099000
//                     23:0:0        23:00:00
//                     24:0:0   Parse operation failed.
//                     0:59:0        00:59:00
//                     0:60:0   Parse operation failed.
//                     0:0:59        00:00:59
//                     0:0:60   Parse operation failed.
//                        10:   Parse operation failed.
//                       10:0        10:00:00
//                        :10   Parse operation failed.
//                       0:10        00:10:00
//                     10:20:   Parse operation failed.
//                    10:20:0        10:20:00
//                       .123   Parse operation failed.
//                    0.12:00        12:00:00
//                        10.   Parse operation failed.
//                      10.12   Parse operation failed.
//                   10.12:00     10.12:00:00

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
TryParse 重载
System 命名空间


TimeSpan ..::.TryParse 方法 (String, IFormatProvider, TimeSpan%)

TimeSpan
.
.
::
.
TryParse 方法 (String, IFormatProvider, TimeSpan%)
TimeSpan 结构

使用指定的区域性特定格式设置信息，将时间间隔的字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    input As String, _
    formatProvider As IFormatProvider, _
    <OutAttribute> ByRef result As TimeSpan _
) As Boolean
public static bool TryParse(
    string input,
    IFormatProvider formatProvider,
    out TimeSpan result
)
public:
static bool TryParse(
    String^ input,
    IFormatProvider^ formatProvider,
    [OutAttribute] TimeSpan% result
)
static member TryParse :
        input:string *
        formatProvider:IFormatProvider *
        result:TimeSpan byref -> bool

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
formatProvider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。
result
类型： System TimeSpan %
此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。 此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 input，则为 true；否则为 false。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 String..::.Empty，格式无效，表示的时间间隔小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue，或者天、小时、分钟或秒分量中至少有一个超出其有效范围，则此运算返回 false。 如果成功转换了 input，则为 true；否则为 false。如果 input 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 String..::.Empty，格式无效，表示的时间间隔小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue，或者天、小时、分钟或秒分量中至少有一个超出其有效范围，则此运算返回 false。

TryParse(String, IFormatProvider, TimeSpan%) 方法类似于 Parse(String, IFormatProvider) 方法，不同之处在于该方法在转换失败时不引发异常。

input 参数包含一个如下形式的时间间隔规范：

[ws][-]{ d |d.hh:mm[:ss[.ff]] | hh:mm[:ss[.ff]] }[ws] | [ws][-]{ d |d.hh:mm[:ss[.ff]] | hh:mm[:ss[.ff]] }[ws]

方括号（[ 和 ]）中的元素是可选的。需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。需要从大括号（“{”和“}”）内由竖线 (|) 分隔的替换选项列表中选择一项。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
- | 一个可选的减号，指示负的 TimeSpan。
d | 天，范围从 0 到 10675199。
. | 一个区分区域性的符号，用于将天与小时分开。固定格式使用句点 (".") 字符。 一个区分区域性的符号，用于将天与小时分开。固定格式使用句点 (".") 字符。
hh | 小时，范围从 0 到 23。
: | 区分区域性的时间分隔符。固定格式使用冒号 (":") 字符。 区分区域性的时间分隔符。固定格式使用冒号 (":") 字符。
mm | 分钟，范围从 0 到 59。
ss | 可选的秒，范围从 0 到 59。
. | 一个区分区域性的符号，用于将秒与秒的小数部分分开。固定格式使用句点 (".") 字符。 一个区分区域性的符号，用于将秒与秒的小数部分分开。固定格式使用句点 (".") 字符。
ff | 可选的秒的小数部分，包含 1 到 7 位小数。

input 的分量必须整体指定大于或等于 TimeSpan..::.MinValue 并小于或等于 TimeSpan..::.MaxValue 的时间间隔。

TryParse(String, IFormatProvider, TimeSpan%) 方法尝试通过使用由 formatProvider 指定的区域的各个特殊区域格式来分析 input。

formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

对调用者的说明

在某些情况下，当要分析的字符串中的时间间隔组件包含超过 7 位数字，在 .NET Framework 3.5 以及更早版本中成功执行并返回 true 的分析操作在 .NET Framework 4 中可能失败并返回 false。以下示例说明了此情形。

Dim value As String = "000000006"
Dim interval As TimeSpan
If TimeSpan.TryParse(value, interval) Then
   Console.WriteLine("{0} --> {1}", value, interval)
Else
   Console.WriteLine("Unable to parse '{0}'", value)
End If
' Output from .NET Framework 3.5 and earlier versions:
'       000000006 --> 6.00:00:00
' Output from .NET Framework 4:
'       Unable to parse '000000006'

string value = "000000006";
TimeSpan interval;
if (TimeSpan.TryParse(value, out interval))
   Console.WriteLine("{0} --> {1}", value, interval);
else
   Console.WriteLine("Unable to parse '{0}'", value);
// Output from .NET Framework 3.5 and earlier versions:
//       000000006 --> 6.00:00:00
// Output from .NET Framework 4:
//       Unable to parse //000000006//

下面的示例定义了 CultureInfo 对象的数组，并使用 TryParse(String, IFormatProvider, TimeSpan%) 方法调用中的每个对象来分析字符串数组中的元素。该示例说明了特定区域性的约定如何影响格式设置操作。 下面的示例定义了 CultureInfo 对象的数组，并使用 TryParse(String, IFormatProvider, TimeSpan%) 方法调用中的每个对象来分析字符串数组中的元素。该示例说明了特定区域性的约定如何影响格式设置操作。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim values() As String = { "6", "6:12", "6:12:14", "6:12:14:45",
                                 "6.12:14:45", "6:12:14:45.3448",
                                 "6:12:14:45,3448", "6:34:14:45" }
      Dim cultures() As CultureInfo = { New CultureInfo("en-US"),
                                        New CultureInfo("ru-RU"),
                                        CultureInfo.InvariantCulture }

      Dim header As String = String.Format("{0,-17}", "String")
      For Each culture As CultureInfo In cultures
         header += If(culture.Equals(CultureInfo.InvariantCulture),
                      String.Format("{0,20}", "Invariant"),
                      String.Format("{0,20}", culture.Name))
      Next
      Console.WriteLine(header)
      Console.WriteLine()

      For Each value As String In values
         Console.Write("{0,-17}", value)
         For Each culture As CultureInfo In cultures
            Dim interval As New TimeSpan()
            If TimeSpan.TryParse(value, culture, interval) Then
               Console.Write("{0,20}", interval.ToString("c"))
            Else
               Console.Write("{0,20}", "Unable to Parse")
            End If
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    String                          en-US               ru-RU           Invariant
'
'    6                          6.00:00:00          6.00:00:00          6.00:00:00
'    6:12                         06:12:00            06:12:00            06:12:00
'    6:12:14                      06:12:14            06:12:14            06:12:14
'    6:12:14:45                 6.12:14:45          6.12:14:45          6.12:14:45
'    6.12:14:45                 6.12:14:45          6.12:14:45          6.12:14:45
'    6:12:14:45.3448    6.12:14:45.3448000     Unable to Parse  6.12:14:45.3448000
'    6:12:14:45,3448       Unable to Parse  6.12:14:45.3448000     Unable to Parse
'    6:34:14:45            Unable to Parse     Unable to Parse     Unable to Parse

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values = { "6", "6:12", "6:12:14", "6:12:14:45",
                          "6.12:14:45", "6:12:14:45.3448",
                          "6:12:14:45,3448", "6:34:14:45" };
      CultureInfo[] cultures = { new CultureInfo("en-US"),
                                 new CultureInfo("ru-RU"),
                                 CultureInfo.InvariantCulture };

      string header = String.Format("{0,-17}", "String");
      foreach (CultureInfo culture in cultures)
         header += culture.Equals(CultureInfo.InvariantCulture) ?
                      String.Format("{0,20}", "Invariant") :
                      String.Format("{0,20}", culture.Name);

      Console.WriteLine(header);
      Console.WriteLine();

      foreach (string value in values)
      {
         Console.Write("{0,-17}", value);
         foreach (CultureInfo culture in cultures)
         {
            TimeSpan interval = new TimeSpan();
            if (TimeSpan.TryParse(value, culture, out interval))
               Console.Write("{0,20}", interval.ToString("c"));
            else
               Console.Write("{0,20}", "Unable to Parse");
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    String                          en-US               ru-RU           Invariant
//
//    6                          6.00:00:00          6.00:00:00          6.00:00:00
//    6:12                         06:12:00            06:12:00            06:12:00
//    6:12:14                      06:12:14            06:12:14            06:12:14
//    6:12:14:45                 6.12:14:45          6.12:14:45          6.12:14:45
//    6.12:14:45                 6.12:14:45          6.12:14:45          6.12:14:45
//    6:12:14:45.3448    6.12:14:45.3448000     Unable to Parse  6.12:14:45.3448000
//    6:12:14:45,3448       Unable to Parse  6.12:14:45.3448000     Unable to Parse
//    6:34:14:45            Unable to Parse     Unable to Parse     Unable to Parse

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
TryParse 重载
System 命名空间


TimeSpan ..::.TryParseExact 方法

TimeSpan
.
.
::
.
TryParseExact 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

将时间间隔的字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与指定的格式完全匹配。 将时间间隔的字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与指定的格式完全匹配。

名称 说明
页首

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
ParseExact


TimeSpan ..::.TryParseExact 方法 (String, String, IFormatProvider, TimeSpan%)

TimeSpan
.
.
::
.
TryParseExact 方法 (String, String, IFormatProvider, TimeSpan%)
TimeSpan 结构

使用指定的格式和区域性特定格式信息，将时间间隔的字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与指定的格式完全匹配。 使用指定的格式和区域性特定格式信息，将时间间隔的字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParseExact ( _
    input As String, _
    format As String, _
    formatProvider As IFormatProvider, _
    <OutAttribute> ByRef result As TimeSpan _
) As Boolean
public static bool TryParseExact(
    string input,
    string format,
    IFormatProvider formatProvider,
    out TimeSpan result
)
public:
static bool TryParseExact(
    String^ input,
    String^ format,
    IFormatProvider^ formatProvider,
    [OutAttribute] TimeSpan% result
)
static member TryParseExact :
        input:string *
        format:string *
        formatProvider:IFormatProvider *
        result:TimeSpan byref -> bool

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
format
类型： System String
用于定义所需的 input 格式的标准或自定义格式字符串。
formatProvider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。
result
类型： System TimeSpan %
此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。 此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 input，则为 true；否则为 false。

TryParseExact(String, String, IFormatProvider, TimeSpan%) 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。此方法类似于 ParseExact(String, String, IFormatProvider) 方法，不同之处在于在转换失败时不会引发异常。 TryParseExact(String, String, IFormatProvider, TimeSpan%) 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。此方法类似于 ParseExact(String, String, IFormatProvider) 方法，不同之处在于在转换失败时不会引发异常。

format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 input 格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 input 格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。

重要说明 重要事项

仅在 format 是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时，TryParseExact(String, String, IFormatProvider, TimeSpan%) 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在 format 是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时，TryParseExact(String, String, IFormatProvider, TimeSpan%) 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在 format 是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时，TryParseExact(String, String, IFormatProvider, TimeSpan%) 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。

如果 format 为标准格式字符串，formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： 如果 format 为标准格式字符串，formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

下面的示例使用 TryParseExact(String, String, IFormatProvider, TimeSpanStyles, TimeSpan%) 方法来分析若干使用多种格式字符串和区域性的时间间隔的字符串表现形式。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim intervalString, format As String
      Dim interval As TimeSpan
      Dim culture As CultureInfo

      ' Parse hour:minute value with "g" specifier current culture.
      intervalString = "17:14"
      format = "g"
      culture = CultureInfo.CurrentCulture
      If TimeSpan.TryParseExact(intervalString, format, culture, interval) Then
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Else
         Console.WriteLine("Unable to parse {0}", intervalString)
      End If

      ' Parse hour:minute:second value with "G" specifier.
      intervalString = "17:14:48"
      format = "G"
      culture = CultureInfo.InvariantCulture
      If TimeSpan.TryParseExact(intervalString, format, culture, interval) Then
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Else
         Console.WriteLine("Unable to parse {0}", intervalString)
      End If

      ' Parse hours:minute.second value with "G" specifier
      ' and current (en-US) culture.
      intervalString = "17:14:48.153"
      format = "G"
      culture = CultureInfo.CurrentCulture
      If TimeSpan.TryParseExact(intervalString, format, culture, interval) Then
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Else
         Console.WriteLine("Unable to parse {0}", intervalString)
      End If

      ' Parse days:hours:minute.second value with "G" specifier
      ' and current (en-US) culture.
      intervalString = "3:17:14:48.153"
      format = "G"
      culture = CultureInfo.CurrentCulture
      If TimeSpan.TryParseExact(intervalString, format, culture, interval) Then
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Else
         Console.WriteLine("Unable to parse {0}", intervalString)
      End If

      ' Parse days:hours:minute.second value with "G" specifier
      ' and fr-FR culture.
      intervalString = "3:17:14:48.153"
      format = "G"
      culture = New CultureInfo("fr-FR")
      If TimeSpan.TryParseExact(intervalString, format, culture, interval) Then
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Else
         Console.WriteLine("Unable to parse {0}", intervalString)
      End If

      ' Parse days:hours:minute.second value with "G" specifier
      ' and fr-FR culture.
      intervalString = "3:17:14:48,153"
      format = "G"
      culture = New CultureInfo("fr-FR")
      If TimeSpan.TryParseExact(intervalString, format, culture, interval) Then
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Else
         Console.WriteLine("Unable to parse {0}", intervalString)
      End If

      ' Parse a single number using the "c" standard format string.
      intervalString = "12"
      format = "c"
      If TimeSpan.TryParseExact(intervalString, format, Nothing, interval)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Else
         Console.WriteLine("Unable to parse {0}", intervalString)
      End If

      ' Parse a single number using the "%h" custom format string.
      format = "%h"
      If TimeSpan.TryParseExact(intervalString, format, Nothing, interval)
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Else
         Console.WriteLine("Unable to parse {0}", intervalString)
      End If

      ' Parse a single number using the "%s" custom format string.
      format = "%s"
      If TimeSpan.TryParseExact(intervalString, format, Nothing, interval) Then
         Console.WriteLine("'{0}' --> {1}", intervalString, interval)
      Else
         Console.WriteLine("Unable to parse {0}", intervalString)
      End If
   End Sub
End Module
' The example displays the following output:
'       '17:14' --> 17:14:00
'       Unable to parse 17:14:48
'       Unable to parse 17:14:48.153
'       '3:17:14:48.153' --> 3.17:14:48.1530000
'       Unable to parse 3:17:14:48.153
'       '3:17:14:48,153' --> 3.17:14:48.1530000
'       '12' --> 12.00:00:00
'       '12' --> 12:00:00
'       '12' --> 00:00:12

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string intervalString, format;
      TimeSpan interval;
      CultureInfo culture;

      // Parse hour:minute value with "g" specifier current culture.
      intervalString = "17:14";
      format = "g";
      culture = CultureInfo.CurrentCulture;
      if (TimeSpan.TryParseExact(intervalString, format, culture, out interval))
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      else
         Console.WriteLine("Unable to parse {0}", intervalString);

      // Parse hour:minute:second value with "G" specifier.
      intervalString = "17:14:48";
      format = "G";
      culture = CultureInfo.InvariantCulture;
      if (TimeSpan.TryParseExact(intervalString, format, culture, out interval))
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      else
         Console.WriteLine("Unable to parse {0}", intervalString);

      // Parse hours:minute.second value with "G" specifier
      // and current (en-US) culture.
      intervalString = "17:14:48.153";
      format = "G";
      culture = CultureInfo.CurrentCulture;
      if (TimeSpan.TryParseExact(intervalString, format, culture, out interval))
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      else
         Console.WriteLine("Unable to parse {0}", intervalString);

      // Parse days:hours:minute.second value with "G" specifier
      // and current (en-US) culture.
      intervalString = "3:17:14:48.153";
      format = "G";
      culture = CultureInfo.CurrentCulture;
      if (TimeSpan.TryParseExact(intervalString, format, culture, out interval))
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      else
         Console.WriteLine("Unable to parse {0}", intervalString);

      // Parse days:hours:minute.second value with "G" specifier
      // and fr-FR culture.
      intervalString = "3:17:14:48.153";
      format = "G";
      culture = new CultureInfo("fr-FR");
      if (TimeSpan.TryParseExact(intervalString, format, culture, out interval))
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      else
         Console.WriteLine("Unable to parse {0}", intervalString);

      // Parse days:hours:minute.second value with "G" specifier
      // and fr-FR culture.
      intervalString = "3:17:14:48,153";
      format = "G";
      if (TimeSpan.TryParseExact(intervalString, format, culture, out interval))
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      else
         Console.WriteLine("Unable to parse {0}", intervalString);

      // Parse a single number using the "c" standard format string.
      intervalString = "12";
      format = "c";
      if (TimeSpan.TryParseExact(intervalString, format, null, out interval))
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      else
         Console.WriteLine("Unable to parse {0}", intervalString);

      // Parse a single number using the "%h" custom format string.
      format = "%h";
      if (TimeSpan.TryParseExact(intervalString, format, null, out interval))
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      else
         Console.WriteLine("Unable to parse {0}", intervalString);

      // Parse a single number using the "%s" custom format string.
      format = "%s";
      if (TimeSpan.TryParseExact(intervalString, format, null, out interval))
         Console.WriteLine("'{0}' --> {1}", intervalString, interval);
      else
         Console.WriteLine("Unable to parse {0}", intervalString);
   }
}
// The example displays the following output:
//       '17:14' --> 17:14:00
//       Unable to parse 17:14:48
//       Unable to parse 17:14:48.153
//       '3:17:14:48.153' --> 3.17:14:48.1530000
//       Unable to parse 3:17:14:48.153
//       '3:17:14:48,153' --> 3.17:14:48.1530000
//       '12' --> 12.00:00:00
//       '12' --> 12:00:00
//       '12' --> 00:00:12

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
TryParseExact 重载
System 命名空间

其他资源

标准 TimeSpan 格式字符串
自定义的 TimeSpan 格式字符串


TimeSpan ..::.TryParseExact 方法 (String, array<String >[]()[], IFormatProvider, TimeSpan%)

TimeSpan
.
.
::
.
TryParseExact 方法 (String,
array<
String
>
[]
()
[]
, IFormatProvider, TimeSpan%)
TimeSpan 结构

使用指定的格式和区域性特定格式信息，将时间间隔的指定字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与一种指定的格式完全匹配。 使用指定的格式和区域性特定格式信息，将时间间隔的指定字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与一种指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParseExact ( _
    input As String, _
    formats As String(), _
    formatProvider As IFormatProvider, _
    <OutAttribute> ByRef result As TimeSpan _
) As Boolean
public static bool TryParseExact(
    string input,
    string[] formats,
    IFormatProvider formatProvider,
    out TimeSpan result
)
public:
static bool TryParseExact(
    String^ input,
    array<String^>^ formats,
    IFormatProvider^ formatProvider,
    [OutAttribute] TimeSpan% result
)
static member TryParseExact :
        input:string *
        formats:string[] *
        formatProvider:IFormatProvider *
        result:TimeSpan byref -> bool

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
formats
类型：
array<
System String
>
[]
()
[]

用于定义可接受的 input 格式的标准或自定义格式字符串的数组。
formatProvider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。
result
类型： System TimeSpan %
此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。 此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 input，则为 true；否则为 false。

TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpan%) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数指定的格式字符串之一定义的格式，只不过前导和尾随空白字符都将被忽略。此方法类似于 ParseExact(String, array<String>[]()[], IFormatProvider) 方法，不同之处在于在转换失败时不会引发异常。 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpan%) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数指定的格式字符串之一定义的格式，只不过前导和尾随空白字符都将被忽略。此方法类似于 ParseExact(String, array<String>[]()[], IFormatProvider) 方法，不同之处在于在转换失败时不会引发异常。

formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。

重要说明 重要事项

仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， TryParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， TryParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， TryParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。

如果用于分析 input 的格式字符串是标准格式字符串，formatProvider 参数是 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： 如果用于分析 input 的格式字符串是标准格式字符串，formatProvider 参数是 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

下面的示例调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpan%) 方法将字符串数组的每个元素转化为 TimeSpan 值。该示例使用法语（法国）("fr-FR") 区域性的格式设置约定解释字符串。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。 下面的示例调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpan%) 方法将字符串数组的每个元素转化为 TimeSpan 值。该示例使用法语（法国）("fr-FR") 区域性的格式设置约定解释字符串。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。 下面的示例调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpan%) 方法将字符串数组的每个元素转化为 TimeSpan 值。该示例使用法语（法国）("fr-FR") 区域性的格式设置约定解释字符串。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。

此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim inputs() As String = { "3", "16:42", "1:6:52:35.0625",
                                 "1:6:52:35,0625" }
      Dim formats() As String = { "%h", "g", "G" }
      Dim interval As TimeSpan
      Dim culture As New CultureInfo("fr-FR")

      ' Parse each string in inputs using formats and the fr-FR culture.
      For Each input As String In inputs
         If TimeSpan.TryParseExact(input, formats, culture, interval) Then
            Console.WriteLine("{0} --> {1:c}", input, interval)
         Else
            Console.WriteLine("Unable to parse {0}", input)
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'       3 --> 03:00:00
'       16:42 --> 16:42:00
'       Unable to parse 1:6:52:35.0625
'       1:6:52:35,0625 --> 1.06:52:35.0625000

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] inputs = { "3", "16:42", "1:6:52:35.0625",
                          "1:6:52:35,0625" };
      string[] formats = { "g", "G", "%h"};
      TimeSpan interval;
      CultureInfo culture = new CultureInfo("fr-FR");

      // Parse each string in inputs using formats and the fr-FR culture.
      foreach (string input in inputs) {
         if(TimeSpan.TryParseExact(input, formats, culture, out interval))
            Console.WriteLine("{0} --> {1:c}", input, interval);
         else
            Console.WriteLine("Unable to parse {0}", input);
      }
   }
}
// The example displays the following output:
//       3 --> 03:00:00
//       16:42 --> 16:42:00
//       Unable to parse 1:6:52:35.0625
//       1:6:52:35,0625 --> 1.06:52:35.0625000

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
TryParseExact 重载
System 命名空间

其他资源

标准 TimeSpan 格式字符串
自定义的 TimeSpan 格式字符串


TimeSpan ..::.TryParseExact 方法 (String, String, IFormatProvider, TimeSpanStyles, TimeSpan%)

TimeSpan
.
.
::
.
TryParseExact 方法 (String, String, IFormatProvider, TimeSpanStyles, TimeSpan%)
TimeSpan 结构

使用指定的格式、区域性特定格式信息和样式，将时间间隔的字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与指定的格式完全匹配。 使用指定的格式、区域性特定格式信息和样式，将时间间隔的字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParseExact ( _
    input As String, _
    format As String, _
    formatProvider As IFormatProvider, _
    styles As TimeSpanStyles, _
    <OutAttribute> ByRef result As TimeSpan _
) As Boolean
public static bool TryParseExact(
    string input,
    string format,
    IFormatProvider formatProvider,
    TimeSpanStyles styles,
    out TimeSpan result
)
public:
static bool TryParseExact(
    String^ input,
    String^ format,
    IFormatProvider^ formatProvider,
    TimeSpanStyles styles,
    [OutAttribute] TimeSpan% result
)
static member TryParseExact :
        input:string *
        format:string *
        formatProvider:IFormatProvider *
        styles:TimeSpanStyles *
        result:TimeSpan byref -> bool

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
format
类型： System String
用于定义所需的 input 格式的标准或自定义格式字符串。
formatProvider
类型： System IFormatProvider
一个对象，提供区域性特定的格式设置信息。
styles
类型： System.Globalization TimeSpanStyles
用于指示 input 的样式的一个或多个枚举值。
result
类型： System TimeSpan %
此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。 此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 input，则为 true；否则为 false。

TryParseExact(String, String, IFormatProvider, TimeSpanStyles, TimeSpan%) 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。此方法类似于 ParseExact(String, String, IFormatProvider, TimeSpanStyles) 方法，不同之处在于在转换失败时不会引发异常。 TryParseExact(String, String, IFormatProvider, TimeSpanStyles, TimeSpan%) 方法将分析时间间隔的字符串表示形式，该间隔必须是 format 参数定义的格式，只不过前导和尾随空白字符都将被忽略。此方法类似于 ParseExact(String, String, IFormatProvider, TimeSpanStyles) 方法，不同之处在于在转换失败时不会引发异常。

format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 input 格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。 format 参数是一个字符串，该字符串包含单一的标准格式说明符，或者包含一个或多个用于定义要求的 input 格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。

如果 format 为标准格式字符串，formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： 如果 format 为标准格式字符串，formatProvider 参数是一个 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。 styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。 styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。

下面的示例使用 ParseExact(String, String, IFormatProvider) 方法来分析若干使用多种格式字符串和区域性的时间间隔的字符串表现形式。它还使用 TimeSpanStyles..::.AssumeNegative 值将每个字符串解释为一个负的时间间隔。该示例的输出阐释了 TimeSpanStyles..::.AssumeNegative 样式仅当其与自定义格式字符串一起使用时，才影响返回的值。 下面的示例使用 ParseExact(String, String, IFormatProvider) 方法来分析若干使用多种格式字符串和区域性的时间间隔的字符串表现形式。它还使用 TimeSpanStyles..::.AssumeNegative 值将每个字符串解释为一个负的时间间隔。该示例的输出阐释了 TimeSpanStyles..::.AssumeNegative 样式仅当其与自定义格式字符串一起使用时，才影响返回的值。 下面的示例使用 ParseExact(String, String, IFormatProvider) 方法来分析若干使用多种格式字符串和区域性的时间间隔的字符串表现形式。它还使用 TimeSpanStyles..::.AssumeNegative 值将每个字符串解释为一个负的时间间隔。该示例的输出阐释了 TimeSpanStyles..::.AssumeNegative 样式仅当其与自定义格式字符串一起使用时，才影响返回的值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim intervalString, format As String
      Dim interval As TimeSpan
      Dim culture As CultureInfo = Nothing

      ' Parse hour:minute value with custom format specifier.
      intervalString = "17:14"
      format = "h\:mm"
      culture = CultureInfo.CurrentCulture
      If TimeSpan.TryParseExact(intervalString, format,
                                culture, TimeSpanStyles.AssumeNegative, interval) Then
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format)
      End If

      ' Parse hour:minute:second value with "g" specifier.
      intervalString = "17:14:48"
      format = "g"
      culture = CultureInfo.InvariantCulture
      If TimeSpan.TryParseExact(intervalString, format,
                                culture, TimeSpanStyles.AssumeNegative, interval) Then
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format)
      End If

      ' Parse hours:minute.second value with custom format specifier.
      intervalString = "17:14:48.153"
      format = "h\:mm\:ss\.fff"
      culture = Nothing
      If TimeSpan.TryParseExact(intervalString, format,
                                culture, TimeSpanStyles.AssumeNegative, interval) Then
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format)
      End If

      ' Parse days:hours:minute.second value with "G" specifier
      ' and current (en-US) culture.
      intervalString = "3:17:14:48.153"
      format = "G"
      culture = CultureInfo.CurrentCulture
      If TimeSpan.TryParseExact(intervalString, format,
                                culture, TimeSpanStyles.AssumeNegative, interval) Then
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format)
      End If

      ' Parse days:hours:minute.second value with a custom format specifier.
      intervalString = "3:17:14:48.153"
      format = "d\:hh\:mm\:ss\.fff"
      culture = Nothing
      If TimeSpan.TryParseExact(intervalString, format,
                                culture, TimeSpanStyles.AssumeNegative, interval) Then
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format)
      End If

      ' Parse days:hours:minute.second value with "G" specifier
      ' and fr-FR culture.
      intervalString = "3:17:14:48,153"
      format = "G"
      culture = New CultureInfo("fr-FR")
      If TimeSpan.TryParseExact(intervalString, format,
                                culture, TimeSpanStyles.AssumeNegative, interval) Then
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format)
      End If

      ' Parse a single number using the "c" standard format string.
      intervalString = "12"
      format = "c"
      If TimeSpan.TryParseExact(intervalString, format,
                                Nothing, TimeSpanStyles.AssumeNegative, interval) Then
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format)
      End If

      ' Parse a single number using the "%h" custom format string.
      format = "%h"
      If TimeSpan.TryParseExact(intervalString, format,
                                Nothing, TimeSpanStyles.AssumeNegative, interval) Then
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format)
      End If

      ' Parse a single number using the "%s" custom format string.
      format = "%s"
      If TimeSpan.TryParseExact(intervalString, format,
                                Nothing, TimeSpanStyles.AssumeNegative, interval) Then
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval)
      Else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format)
      End If
   End Sub
End Module
' The example displays the following output:
'    '17:14' (h\:mm) --> -17:14:00
'    '17:14:48' (g) --> 17:14:48
'    '17:14:48.153' (h\:mm\:ss\.fff) --> -17:14:48.1530000
'    '3:17:14:48.153' (G) --> 3.17:14:48.1530000
'    '3:17:14:48.153' (d\:hh\:mm\:ss\.fff) --> -3.17:14:48.1530000
'    '3:17:14:48,153' (G) --> 3.17:14:48.1530000
'    '12' (c) --> 12.00:00:00
'    '12' (%h) --> -12:00:00
'    '12' (%s) --> -00:00:12

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string intervalString, format;
      TimeSpan interval;
      CultureInfo culture = null;

      // Parse hour:minute value with custom format specifier.
      intervalString = "17:14";
      format = "h\\:mm";
      culture = CultureInfo.CurrentCulture;
      if (TimeSpan.TryParseExact(intervalString, format,
                                 culture, TimeSpanStyles.AssumeNegative, out interval))
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format);

      // Parse hour:minute:second value with "g" specifier.
      intervalString = "17:14:48";
      format = "g";
      culture = CultureInfo.InvariantCulture;
      if (TimeSpan.TryParseExact(intervalString, format,
                                 culture, TimeSpanStyles.AssumeNegative, out interval))
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format);

      // Parse hours:minute.second value with custom format specifier.
      intervalString = "17:14:48.153";
      format = @"h\:mm\:ss\.fff";
      culture = null;
      if (TimeSpan.TryParseExact(intervalString, format,
                                 culture, TimeSpanStyles.AssumeNegative, out interval))
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format);

      // Parse days:hours:minute.second value with "G" specifier
      // and current (en-US) culture.
      intervalString = "3:17:14:48.153";
      format = "G";
      culture = CultureInfo.CurrentCulture;
      if (TimeSpan.TryParseExact(intervalString, format,
                                 culture, TimeSpanStyles.AssumeNegative, out interval))
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format);

      // Parse days:hours:minute.second value with a custom format specifier.
      intervalString = "3:17:14:48.153";
      format = @"d\:hh\:mm\:ss\.fff";
      culture = null;
      if (TimeSpan.TryParseExact(intervalString, format,
                                 culture, TimeSpanStyles.AssumeNegative, out interval))
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format);

      // Parse days:hours:minute.second value with "G" specifier
      // and fr-FR culture.
      intervalString = "3:17:14:48,153";
      format = "G";
      culture = new CultureInfo("fr-FR");
      if (TimeSpan.TryParseExact(intervalString, format,
                                 culture, TimeSpanStyles.AssumeNegative, out interval))
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format);

      // Parse a single number using the "c" standard format string.
      intervalString = "12";
      format = "c";
      if (TimeSpan.TryParseExact(intervalString, format,
                                 null, TimeSpanStyles.AssumeNegative, out interval))
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format);

      // Parse a single number using the "%h" custom format string.
      format = "%h";
      if (TimeSpan.TryParseExact(intervalString, format,
                                 null, TimeSpanStyles.AssumeNegative, out interval))
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format);

      // Parse a single number using the "%s" custom format string.
      format = "%s";
      if (TimeSpan.TryParseExact(intervalString, format,
                                 null, TimeSpanStyles.AssumeNegative, out interval))
         Console.WriteLine("'{0}' ({1}) --> {2}", intervalString, format, interval);
      else
         Console.WriteLine("Unable to parse '{0}' using format {1}",
                           intervalString, format);
   }
}
// The example displays the following output:
//    '17:14' (h\:mm) --> -17:14:00
//    '17:14:48' (g) --> 17:14:48
//    '17:14:48.153' (h\:mm\:ss\.fff) --> -17:14:48.1530000
//    '3:17:14:48.153' (G) --> 3.17:14:48.1530000
//    '3:17:14:48.153' (d\:hh\:mm\:ss\.fff) --> -3.17:14:48.1530000
//    '3:17:14:48,153' (G) --> 3.17:14:48.1530000
//    '12' (c) --> 12.00:00:00
//    '12' (%h) --> -12:00:00
//    '12' (%s) --> -00:00:12

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
TryParseExact 重载
System 命名空间

其他资源

标准 TimeSpan 格式字符串
自定义的 TimeSpan 格式字符串


TimeSpan ..::.TryParseExact 方法 (String, array<String >[]()[], IFormatProvider, TimeSpanStyles, TimeSpan%)

TimeSpan
.
.
::
.
TryParseExact 方法 (String,
array<
String
>
[]
()
[]
, IFormatProvider, TimeSpanStyles, TimeSpan%)
TimeSpan 结构

使用指定的格式、区域性特定格式信息和样式，将时间间隔的指定字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与一种指定的格式完全匹配。 使用指定的格式、区域性特定格式信息和样式，将时间间隔的指定字符串表示形式转换为其等效的 TimeSpan，并返回一个指示转换是否成功的值。字符串表示形式的格式必须与一种指定的格式完全匹配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParseExact ( _
    input As String, _
    formats As String(), _
    formatProvider As IFormatProvider, _
    styles As TimeSpanStyles, _
    <OutAttribute> ByRef result As TimeSpan _
) As Boolean
public static bool TryParseExact(
    string input,
    string[] formats,
    IFormatProvider formatProvider,
    TimeSpanStyles styles,
    out TimeSpan result
)
public:
static bool TryParseExact(
    String^ input,
    array<String^>^ formats,
    IFormatProvider^ formatProvider,
    TimeSpanStyles styles,
    [OutAttribute] TimeSpan% result
)
static member TryParseExact :
        input:string *
        formats:string[] *
        formatProvider:IFormatProvider *
        styles:TimeSpanStyles *
        result:TimeSpan byref -> bool

参数

input
类型： System String
一个字符串，用于指定进行转换的时间间隔。
formats
类型：
array<
System String
>
[]
()
[]

用于定义可接受的 input 格式的标准或自定义格式字符串的数组。
formatProvider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。
styles
类型： System.Globalization TimeSpanStyles
用于指示 input 的样式的一个或多个枚举值。
result
类型： System TimeSpan %
此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。 此方法返回时，包含表示由 input 指定的时间间隔的对象；或者如果转换失败，则包含 TimeSpan..::.Zero。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 input，则为 true；否则为 false。

TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles, TimeSpan%) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数指定的格式字符串之一定义的格式，只不过前导和尾随空白字符都将被忽略。此方法类似于 ParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles) 方法，不同之处在于在转换失败时不会引发异常。 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles, TimeSpan%) 方法将分析时间间隔的字符串表示形式，该间隔必须是 formats 参数指定的格式字符串之一定义的格式，只不过前导和尾随空白字符都将被忽略。此方法类似于 ParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles) 方法，不同之处在于在转换失败时不会引发异常。

formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。 formats 参数是一个字符串数组，该数组的元素包含单一的标准格式说明符，或者包含一个或多个用于定义 input 的必要格式的自定义格式说明符。有关有效格式字符串的更多信息，请参见标准 TimeSpan 格式字符串和自定义的 TimeSpan 格式字符串。input 必须严格对应于 formats 的成员，分析操作才能成功。分析操作将尝试将 input 匹配到从该数组中第一个元素开始的 formats 中的每个元素。

重要说明 重要事项

仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。 仅在用于分析 input 的格式字符串是标准的 TimeSpan 格式字符串（其值为 "G" 或 "g"）时， ParseExact 方法使用由 formatProvider 参数指定的区域性转换。"c"、"t" 和 "T" 标准格式字符串使用固定区域性的格式约定。自定义格式字符串定义输入字符串的精确格式，并使用文本字符分隔时间间隔的组件。

如果用于分析 input 的格式字符串是标准格式字符串，formatProvider 参数是 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项： 如果用于分析 input 的格式字符串是标准格式字符串，formatProvider 参数是 IFormatProvider 实现，提供有关返回字符串格式的区域性特定信息。formatProvider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。 一个 CultureInfo 对象，表示其格式设置约定将反映在返回字符串中的区域性。CultureInfo..::.DateTimeFormat 属性所返回的 DateTimeFormatInfo 对象定义返回字符串的格式设置。

  • 一个 DateTimeFormatInfo 对象，定义了返回字符串的格式设置。

  • 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。 一个实现 IFormatProvider 接口的自定义对象。其 IFormatProvider..::.GetFormat 方法返回提供格式设置信息的 DateTimeFormatInfo 对象。

如果 formatProvider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用与当前区域性关联的 DateTimeFormatInfo 对象。

styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。 styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。 styles 参数会影响使用自定义格式字符串分析的字符串的解释。它确定 input 是仅在存在负号时被解释为负的时间间隔 (TimeSpanStyles..::.None)，还是始终被解释为负的时间间隔 (TimeSpanStyles..::.AssumeNegative)。如果没有使用 TimeSpanStyles..::.AssumeNegative，则 format 必须包括文本的负号（如"\-"）以成功分析负时间间隔。

下面的示例调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles, TimeSpan%) 方法将字符串数组的每个元素转化为 TimeSpan 值。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。 下面的示例调用 TryParseExact(String, array<String>[]()[], IFormatProvider, TimeSpanStyles, TimeSpan%) 方法将字符串数组的每个元素转化为 TimeSpan 值。这些字符串可以以常规的短格式或常规的长格式表示一个时间间隔。

此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。 此外，该示例将更改时间间隔分析方法解释一位数字的方式。通常，一位数字都将被解释为时间间隔中的天数。相反，%h 自定义格式字符串用于将一位数字解释为小时数。要使更改有效，请注意 %h 自定义格式字符串必须在 formats 数组中的其他格式字符串前面。另外注意，输出表明方法调用中指定的 TimeSpanStyles..::.AssumeNegative 标志仅在使用此格式说明符分析字符串时使用。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim inputs() As String = { "3", "16:42", "1:6:52:35.0625",
                                 "1:6:52:35,0625" }
      Dim formats() As String = { "%h", "g", "G" }
      Dim interval As TimeSpan
      Dim culture As New CultureInfo("de-DE")

      ' Parse each string in inputs using formats and the fr-FR culture.
      For Each input As String In inputs
         If TimeSpan.TryParseExact(input, formats, culture,
                                   TimeSpanStyles.AssumeNegative, interval) Then
            Console.WriteLine("{0} --> {1:c}", input, interval)
         Else
            Console.WriteLine("Unable to parse {0}", input)
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'       3 --> -03:00:00
'       16:42 --> 16:42:00
'       Unable to parse 1:6:52:35.0625
'       1:6:52:35,0625 --> 1.06:52:35.0625000

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] inputs = { "3", "16:42", "1:6:52:35.0625",
                          "1:6:52:35,0625" };
      string[] formats = { "%h", "g", "G" };
      TimeSpan interval;
      CultureInfo culture = new CultureInfo("fr-FR");

      // Parse each string in inputs using formats and the fr-FR culture.
      foreach (string input in inputs) {
         if(TimeSpan.TryParseExact(input, formats, culture,
                                   TimeSpanStyles.AssumeNegative, out interval))
            Console.WriteLine("{0} --> {1:c}", input, interval);
         else
            Console.WriteLine("Unable to parse {0}", input);
      }
   }
}
// The example displays the following output:
//       3 --> -03:00:00
//       16:42 --> 16:42:00
//       Unable to parse 1:6:52:35.0625
//       1:6:52:35,0625 --> 1.06:52:35.0625000

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
TryParseExact 重载
System 命名空间

其他资源

标准 TimeSpan 格式字符串
自定义的 TimeSpan 格式字符串


TimeSpan 运算符

TimeSpan 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

TimeSpan 类型公开以下成员。

名称 说明
页首

参考

TimeSpan 结构
System 命名空间


TimeSpan ..::.Addition 运算符

TimeSpan
.
.
::
.
Addition 运算符
TimeSpan 结构

添加两个指定的 TimeSpan 实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator + ( _
    t1 As TimeSpan, _
    t2 As TimeSpan _
) As TimeSpan
public static TimeSpan operator +(
    TimeSpan t1,
    TimeSpan t2
)
public:
static TimeSpan operator +(
    TimeSpan t1,
    TimeSpan t2
)
static let inline (+)
        t1:TimeSpan *
        t2:TimeSpan  : TimeSpan

参数

t1
类型： System TimeSpan
要加上的第一个时间间隔。
t2
类型： System TimeSpan
要加上的第二个时间间隔。

返回值

类型： System TimeSpan
一个对象，其值为 t1 与 t2 的值之和。
异常 | 条件
OverflowException | 所生成的 TimeSpan 小于 MinValue 或大于 MaxValue。

Addition 方法定义了 TimeSpan 值的加法运算符。它启用了诸如以下内容的代码： Addition 方法定义了 TimeSpan 值的加法运算符。它启用了诸如以下内容的代码：

Dim time1 As New TimeSpan(1, 0, 0, 0)   ' TimeSpan equivalent to 1 day.
Dim time2 As New TimeSpan(12, 0, 0)     ' TimeSpan equivalent to 1/2 day.
Dim time3 As TimeSpan = time1 + time2   ' Add the two time spans.

Console.WriteLine("  {0,12}{3} +  {1,10}{3}   {4}{3}    {2,10}", _
                  time1, time2, time3, vbCrLf, New String("_"c, 10))
' The example displays the following output:
'           1.00:00:00
'        +    12:00:00
'          __________
'           1.12:00:00

TimeSpan time1 = new TimeSpan(1, 0, 0, 0);   // TimeSpan equivalent to 1 day.
TimeSpan time2 = new TimeSpan(12, 0, 0);     // TimeSpan equivalent to 1/2 day.
TimeSpan time3 = time1 + time2;              // Add the two time spans.

Console.WriteLine("  {0,12}\n +  {1,10}\n   {3}\n    {2,10}",
                  time1, time2, time3, new String('_', 10));
// The example displays the following output:
//           1.00:00:00
//        +    12:00:00
//          __________
//           1.12:00:00

不支持自定义运算符的语言可以改为调用 Add 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Add


TimeSpan ..::.Equality 运算符

TimeSpan
.
.
::
.
Equality 运算符
TimeSpan 结构

指示两个 TimeSpan 实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    t1 As TimeSpan, _
    t2 As TimeSpan _
) As Boolean
public static bool operator ==(
    TimeSpan t1,
    TimeSpan t2
)
public:
static bool operator ==(
    TimeSpan t1,
    TimeSpan t2
)
static let inline (=)
        t1:TimeSpan *
        t2:TimeSpan  : bool

参数

t1
类型： System TimeSpan
要加上的第一个时间间隔。
t2
类型： System TimeSpan
要加上的第二个时间间隔。

返回值

类型： System Boolean
如果 t1 和 t2 的值相等，则为 true；否则为 false。

下面的示例使用 Equality 运算符，将几个 TimeSpan 对象同一个参考 TimeSpan 进行比较。

' Example of the TimeSpan relational operators.
Imports System
Imports Microsoft.VisualBasic

Module TSRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare TimeSpan parameters, and display them with the results.
    Sub CompareTimeSpans( Left As TimeSpan, Right As TimeSpan, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Equality( Left, Right )", _
            TimeSpan.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThan( Left, Right )", _
            TimeSpan.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThanOrEqual( Left, Right )", _
            TimeSpan.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Inequality( Left, Right )", _
            TimeSpan.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThan( Left, Right )", _
            TimeSpan.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThanOrEqual( Left, Right )", _
            TimeSpan.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New TimeSpan( 2, 0, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan relational operators " & _
            "generates " & vbCrLf & "the following output. It " & _
            "creates several different TimeSpan " & vbCrLf & _
            "objects and compares them with a 2-hour " & _
            "TimeSpan." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )", Left )

        ' Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, New TimeSpan( 0, 120, 0 ), _
            "TimeSpan( 0, 120, 0 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, 1 ), _
            "TimeSpan( 2, 0, 1 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, - 1 ), _
            "TimeSpan( 2, 0, -1 )" )
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12.0 ), _
            "TimeSpan.FromDays( 1 / 12 )" )
    End Sub
End Module

' This example of the TimeSpan relational operators generates
' the following output. It creates several different TimeSpan
' objects and compares them with a 2-hour TimeSpan.
'
' Left: TimeSpan( 2, 0, 0 )                      02:00:00
'
' Right: TimeSpan( 0, 120, 0 )                   02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, 1 )                     02:00:01
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  False
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            True
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, -1 )                    01:59:59
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         True
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     False
'
' Right: TimeSpan.FromDays( 1 / 12 )             02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True

// Example of the TimeSpan relational operators.
using System;

class TSRelationalOpsDemo
{
    const string dataFmt = "{0,34}    {1}" ;

    // Compare TimeSpan parameters, and display them with the results.
    static void CompareTimeSpans( TimeSpan Left, TimeSpan Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 2, 0, 0 );

        Console.WriteLine(
            "This example of the TimeSpan relational operators " +
            "generates \nthe following output. It creates several " +
            "different TimeSpan \nobjects and compares them with " +
            "a 2-hour TimeSpan.\n" );
        Console.WriteLine( dataFmt,
            "Left: TimeSpan( 2, 0, 0 )", Left );

        // Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ),
            "TimeSpan( 0, 120, 0 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ),
            "TimeSpan( 2, 0, 1 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ),
            "TimeSpan( 2, 0, -1 )" );
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12D ),
            "TimeSpan.FromDays( 1 / 12 )" );
    }
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

         Left: TimeSpan( 2, 0, 0 )    02:00:00

      Right: TimeSpan( 0, 120, 0 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True

        Right: TimeSpan( 2, 0, 1 )    02:00:01
                     Left == Right    False
                     Left >  Right    False
                     Left >= Right    False
                     Left != Right    True
                     Left <  Right    True
                     Left <= Right    True

       Right: TimeSpan( 2, 0, -1 )    01:59:59
                     Left == Right    False
                     Left >  Right    True
                     Left >= Right    True
                     Left != Right    True
                     Left <  Right    False
                     Left <= Right    False

Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True
*/

// Example of the TimeSpan relational operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,35}    {1}";

// Compare TimeSpan parameters, and display them with the results.
void CompareTimeSpans( TimeSpan Left, TimeSpan Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   TimeSpan Left = TimeSpan(2,0,0);
   Console::WriteLine( "This example of the TimeSpan relational operators "
   "generates \nthe following output. It creates several "
   "different TimeSpan \nobjects and compares them with "
   "a 2-hour TimeSpan.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "Left: TimeSpan( 2, 0, 0 )", Left );

   // Create objects to compare with a 2-hour TimeSpan.
   CompareTimeSpans( Left, TimeSpan(0,120,0), "TimeSpan( 0, 120, 0 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,1), "TimeSpan( 2, 0, 1 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,-1), "TimeSpan( 2, 0, -1 )" );
   CompareTimeSpans( Left, TimeSpan::FromDays( 1.0 / 12. ), "TimeSpan::FromDays( 1 / 12 )" );
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

          Left: TimeSpan( 2, 0, 0 )    02:00:00

       Right: TimeSpan( 0, 120, 0 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True

         Right: TimeSpan( 2, 0, 1 )    02:00:01
                      Left == Right    False
                      Left >  Right    False
                      Left >= Right    False
                      Left != Right    True
                      Left <  Right    True
                      Left <= Right    True

        Right: TimeSpan( 2, 0, -1 )    01:59:59
                      Left == Right    False
                      Left >  Right    True
                      Left >= Right    True
                      Left != Right    True
                      Left <  Right    False
                      Left <= Right    False

Right: TimeSpan::FromDays( 1 / 12 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Equals
Compare
CompareTo


TimeSpan ..::.GreaterThan 运算符

TimeSpan
.
.
::
.
GreaterThan 运算符
TimeSpan 结构

指示指定的 TimeSpan 是否大于另一个指定的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator > ( _
    t1 As TimeSpan, _
    t2 As TimeSpan _
) As Boolean
public static bool operator >(
    TimeSpan t1,
    TimeSpan t2
)
public:
static bool operator >(
    TimeSpan t1,
    TimeSpan t2
)
static let inline (>)
        t1:TimeSpan *
        t2:TimeSpan  : bool

参数

t1
类型： System TimeSpan
要比较的第一个时间间隔。
t2
类型： System TimeSpan
要比较的第二个时间间隔。

返回值

类型： System Boolean
如果 t1 的值大于 t2 的值，则为 true；否则为 false。

下面的示例使用 GreaterThan 运算符，将几个 TimeSpan 对象同一个参考 TimeSpan 进行比较。

' Example of the TimeSpan relational operators.
Imports System
Imports Microsoft.VisualBasic

Module TSRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare TimeSpan parameters, and display them with the results.
    Sub CompareTimeSpans( Left As TimeSpan, Right As TimeSpan, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Equality( Left, Right )", _
            TimeSpan.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThan( Left, Right )", _
            TimeSpan.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThanOrEqual( Left, Right )", _
            TimeSpan.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Inequality( Left, Right )", _
            TimeSpan.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThan( Left, Right )", _
            TimeSpan.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThanOrEqual( Left, Right )", _
            TimeSpan.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New TimeSpan( 2, 0, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan relational operators " & _
            "generates " & vbCrLf & "the following output. It " & _
            "creates several different TimeSpan " & vbCrLf & _
            "objects and compares them with a 2-hour " & _
            "TimeSpan." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )", Left )

        ' Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, New TimeSpan( 0, 120, 0 ), _
            "TimeSpan( 0, 120, 0 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, 1 ), _
            "TimeSpan( 2, 0, 1 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, - 1 ), _
            "TimeSpan( 2, 0, -1 )" )
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12.0 ), _
            "TimeSpan.FromDays( 1 / 12 )" )
    End Sub
End Module

' This example of the TimeSpan relational operators generates
' the following output. It creates several different TimeSpan
' objects and compares them with a 2-hour TimeSpan.
'
' Left: TimeSpan( 2, 0, 0 )                      02:00:00
'
' Right: TimeSpan( 0, 120, 0 )                   02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, 1 )                     02:00:01
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  False
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            True
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, -1 )                    01:59:59
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         True
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     False
'
' Right: TimeSpan.FromDays( 1 / 12 )             02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True

// Example of the TimeSpan relational operators.
using System;

class TSRelationalOpsDemo
{
    const string dataFmt = "{0,34}    {1}" ;

    // Compare TimeSpan parameters, and display them with the results.
    static void CompareTimeSpans( TimeSpan Left, TimeSpan Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 2, 0, 0 );

        Console.WriteLine(
            "This example of the TimeSpan relational operators " +
            "generates \nthe following output. It creates several " +
            "different TimeSpan \nobjects and compares them with " +
            "a 2-hour TimeSpan.\n" );
        Console.WriteLine( dataFmt,
            "Left: TimeSpan( 2, 0, 0 )", Left );

        // Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ),
            "TimeSpan( 0, 120, 0 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ),
            "TimeSpan( 2, 0, 1 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ),
            "TimeSpan( 2, 0, -1 )" );
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12D ),
            "TimeSpan.FromDays( 1 / 12 )" );
    }
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

         Left: TimeSpan( 2, 0, 0 )    02:00:00

      Right: TimeSpan( 0, 120, 0 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True

        Right: TimeSpan( 2, 0, 1 )    02:00:01
                     Left == Right    False
                     Left >  Right    False
                     Left >= Right    False
                     Left != Right    True
                     Left <  Right    True
                     Left <= Right    True

       Right: TimeSpan( 2, 0, -1 )    01:59:59
                     Left == Right    False
                     Left >  Right    True
                     Left >= Right    True
                     Left != Right    True
                     Left <  Right    False
                     Left <= Right    False

Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True
*/

// Example of the TimeSpan relational operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,35}    {1}";

// Compare TimeSpan parameters, and display them with the results.
void CompareTimeSpans( TimeSpan Left, TimeSpan Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   TimeSpan Left = TimeSpan(2,0,0);
   Console::WriteLine( "This example of the TimeSpan relational operators "
   "generates \nthe following output. It creates several "
   "different TimeSpan \nobjects and compares them with "
   "a 2-hour TimeSpan.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "Left: TimeSpan( 2, 0, 0 )", Left );

   // Create objects to compare with a 2-hour TimeSpan.
   CompareTimeSpans( Left, TimeSpan(0,120,0), "TimeSpan( 0, 120, 0 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,1), "TimeSpan( 2, 0, 1 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,-1), "TimeSpan( 2, 0, -1 )" );
   CompareTimeSpans( Left, TimeSpan::FromDays( 1.0 / 12. ), "TimeSpan::FromDays( 1 / 12 )" );
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

          Left: TimeSpan( 2, 0, 0 )    02:00:00

       Right: TimeSpan( 0, 120, 0 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True

         Right: TimeSpan( 2, 0, 1 )    02:00:01
                      Left == Right    False
                      Left >  Right    False
                      Left >= Right    False
                      Left != Right    True
                      Left <  Right    True
                      Left <= Right    True

        Right: TimeSpan( 2, 0, -1 )    01:59:59
                      Left == Right    False
                      Left >  Right    True
                      Left >= Right    True
                      Left != Right    True
                      Left <  Right    False
                      Left <= Right    False

Right: TimeSpan::FromDays( 1 / 12 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Compare
CompareTo


TimeSpan ..::.GreaterThanOrEqual 运算符

TimeSpan
.
.
::
.
GreaterThanOrEqual 运算符
TimeSpan 结构

指示指定的 TimeSpan 是否大于或等于另一个指定的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator >= ( _
    t1 As TimeSpan, _
    t2 As TimeSpan _
) As Boolean
public static bool operator >=(
    TimeSpan t1,
    TimeSpan t2
)
public:
static bool operator >=(
    TimeSpan t1,
    TimeSpan t2
)
static let inline (>=)
        t1:TimeSpan *
        t2:TimeSpan  : bool

参数

t1
类型： System TimeSpan
要比较的第一个时间间隔。
t2
类型： System TimeSpan
要比较的第二个时间间隔。

返回值

类型： System Boolean
如果 t1 的值大于或等于 t2 的值，则为 true；否则为 false。

下面的示例使用 GreaterThanOrEqual 运算符，将几个 TimeSpan 对象同一个参考 TimeSpan 进行比较。

' Example of the TimeSpan relational operators.
Imports System
Imports Microsoft.VisualBasic

Module TSRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare TimeSpan parameters, and display them with the results.
    Sub CompareTimeSpans( Left As TimeSpan, Right As TimeSpan, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Equality( Left, Right )", _
            TimeSpan.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThan( Left, Right )", _
            TimeSpan.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThanOrEqual( Left, Right )", _
            TimeSpan.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Inequality( Left, Right )", _
            TimeSpan.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThan( Left, Right )", _
            TimeSpan.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThanOrEqual( Left, Right )", _
            TimeSpan.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New TimeSpan( 2, 0, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan relational operators " & _
            "generates " & vbCrLf & "the following output. It " & _
            "creates several different TimeSpan " & vbCrLf & _
            "objects and compares them with a 2-hour " & _
            "TimeSpan." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )", Left )

        ' Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, New TimeSpan( 0, 120, 0 ), _
            "TimeSpan( 0, 120, 0 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, 1 ), _
            "TimeSpan( 2, 0, 1 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, - 1 ), _
            "TimeSpan( 2, 0, -1 )" )
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12.0 ), _
            "TimeSpan.FromDays( 1 / 12 )" )
    End Sub
End Module

' This example of the TimeSpan relational operators generates
' the following output. It creates several different TimeSpan
' objects and compares them with a 2-hour TimeSpan.
'
' Left: TimeSpan( 2, 0, 0 )                      02:00:00
'
' Right: TimeSpan( 0, 120, 0 )                   02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, 1 )                     02:00:01
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  False
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            True
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, -1 )                    01:59:59
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         True
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     False
'
' Right: TimeSpan.FromDays( 1 / 12 )             02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True

// Example of the TimeSpan relational operators.
using System;

class TSRelationalOpsDemo
{
    const string dataFmt = "{0,34}    {1}" ;

    // Compare TimeSpan parameters, and display them with the results.
    static void CompareTimeSpans( TimeSpan Left, TimeSpan Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 2, 0, 0 );

        Console.WriteLine(
            "This example of the TimeSpan relational operators " +
            "generates \nthe following output. It creates several " +
            "different TimeSpan \nobjects and compares them with " +
            "a 2-hour TimeSpan.\n" );
        Console.WriteLine( dataFmt,
            "Left: TimeSpan( 2, 0, 0 )", Left );

        // Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ),
            "TimeSpan( 0, 120, 0 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ),
            "TimeSpan( 2, 0, 1 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ),
            "TimeSpan( 2, 0, -1 )" );
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12D ),
            "TimeSpan.FromDays( 1 / 12 )" );
    }
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

         Left: TimeSpan( 2, 0, 0 )    02:00:00

      Right: TimeSpan( 0, 120, 0 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True

        Right: TimeSpan( 2, 0, 1 )    02:00:01
                     Left == Right    False
                     Left >  Right    False
                     Left >= Right    False
                     Left != Right    True
                     Left <  Right    True
                     Left <= Right    True

       Right: TimeSpan( 2, 0, -1 )    01:59:59
                     Left == Right    False
                     Left >  Right    True
                     Left >= Right    True
                     Left != Right    True
                     Left <  Right    False
                     Left <= Right    False

Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True
*/

// Example of the TimeSpan relational operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,35}    {1}";

// Compare TimeSpan parameters, and display them with the results.
void CompareTimeSpans( TimeSpan Left, TimeSpan Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   TimeSpan Left = TimeSpan(2,0,0);
   Console::WriteLine( "This example of the TimeSpan relational operators "
   "generates \nthe following output. It creates several "
   "different TimeSpan \nobjects and compares them with "
   "a 2-hour TimeSpan.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "Left: TimeSpan( 2, 0, 0 )", Left );

   // Create objects to compare with a 2-hour TimeSpan.
   CompareTimeSpans( Left, TimeSpan(0,120,0), "TimeSpan( 0, 120, 0 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,1), "TimeSpan( 2, 0, 1 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,-1), "TimeSpan( 2, 0, -1 )" );
   CompareTimeSpans( Left, TimeSpan::FromDays( 1.0 / 12. ), "TimeSpan::FromDays( 1 / 12 )" );
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

          Left: TimeSpan( 2, 0, 0 )    02:00:00

       Right: TimeSpan( 0, 120, 0 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True

         Right: TimeSpan( 2, 0, 1 )    02:00:01
                      Left == Right    False
                      Left >  Right    False
                      Left >= Right    False
                      Left != Right    True
                      Left <  Right    True
                      Left <= Right    True

        Right: TimeSpan( 2, 0, -1 )    01:59:59
                      Left == Right    False
                      Left >  Right    True
                      Left >= Right    True
                      Left != Right    True
                      Left <  Right    False
                      Left <= Right    False

Right: TimeSpan::FromDays( 1 / 12 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Compare
CompareTo


TimeSpan ..::.Inequality 运算符

TimeSpan
.
.
::
.
Inequality 运算符
TimeSpan 结构

指示两个 TimeSpan 实例是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    t1 As TimeSpan, _
    t2 As TimeSpan _
) As Boolean
public static bool operator !=(
    TimeSpan t1,
    TimeSpan t2
)
public:
static bool operator !=(
    TimeSpan t1,
    TimeSpan t2
)
static let inline (<>)
        t1:TimeSpan *
        t2:TimeSpan  : bool

参数

t1
类型： System TimeSpan
要比较的第一个时间间隔。
t2
类型： System TimeSpan
要比较的第二个时间间隔。

返回值

类型： System Boolean
如果 t1 和 t2 的值不相等，则为 true；否则为 false。

下面的示例使用 Inequality 运算符，将几个 TimeSpan 对象同一个参考 TimeSpan 进行比较。

' Example of the TimeSpan relational operators.
Imports System
Imports Microsoft.VisualBasic

Module TSRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare TimeSpan parameters, and display them with the results.
    Sub CompareTimeSpans( Left As TimeSpan, Right As TimeSpan, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Equality( Left, Right )", _
            TimeSpan.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThan( Left, Right )", _
            TimeSpan.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThanOrEqual( Left, Right )", _
            TimeSpan.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Inequality( Left, Right )", _
            TimeSpan.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThan( Left, Right )", _
            TimeSpan.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThanOrEqual( Left, Right )", _
            TimeSpan.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New TimeSpan( 2, 0, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan relational operators " & _
            "generates " & vbCrLf & "the following output. It " & _
            "creates several different TimeSpan " & vbCrLf & _
            "objects and compares them with a 2-hour " & _
            "TimeSpan." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )", Left )

        ' Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, New TimeSpan( 0, 120, 0 ), _
            "TimeSpan( 0, 120, 0 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, 1 ), _
            "TimeSpan( 2, 0, 1 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, - 1 ), _
            "TimeSpan( 2, 0, -1 )" )
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12.0 ), _
            "TimeSpan.FromDays( 1 / 12 )" )
    End Sub
End Module

' This example of the TimeSpan relational operators generates
' the following output. It creates several different TimeSpan
' objects and compares them with a 2-hour TimeSpan.
'
' Left: TimeSpan( 2, 0, 0 )                      02:00:00
'
' Right: TimeSpan( 0, 120, 0 )                   02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, 1 )                     02:00:01
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  False
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            True
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, -1 )                    01:59:59
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         True
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     False
'
' Right: TimeSpan.FromDays( 1 / 12 )             02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True

// Example of the TimeSpan relational operators.
using System;

class TSRelationalOpsDemo
{
    const string dataFmt = "{0,34}    {1}" ;

    // Compare TimeSpan parameters, and display them with the results.
    static void CompareTimeSpans( TimeSpan Left, TimeSpan Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 2, 0, 0 );

        Console.WriteLine(
            "This example of the TimeSpan relational operators " +
            "generates \nthe following output. It creates several " +
            "different TimeSpan \nobjects and compares them with " +
            "a 2-hour TimeSpan.\n" );
        Console.WriteLine( dataFmt,
            "Left: TimeSpan( 2, 0, 0 )", Left );

        // Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ),
            "TimeSpan( 0, 120, 0 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ),
            "TimeSpan( 2, 0, 1 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ),
            "TimeSpan( 2, 0, -1 )" );
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12D ),
            "TimeSpan.FromDays( 1 / 12 )" );
    }
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

         Left: TimeSpan( 2, 0, 0 )    02:00:00

      Right: TimeSpan( 0, 120, 0 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True

        Right: TimeSpan( 2, 0, 1 )    02:00:01
                     Left == Right    False
                     Left >  Right    False
                     Left >= Right    False
                     Left != Right    True
                     Left <  Right    True
                     Left <= Right    True

       Right: TimeSpan( 2, 0, -1 )    01:59:59
                     Left == Right    False
                     Left >  Right    True
                     Left >= Right    True
                     Left != Right    True
                     Left <  Right    False
                     Left <= Right    False

Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True
*/

// Example of the TimeSpan relational operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,35}    {1}";

// Compare TimeSpan parameters, and display them with the results.
void CompareTimeSpans( TimeSpan Left, TimeSpan Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   TimeSpan Left = TimeSpan(2,0,0);
   Console::WriteLine( "This example of the TimeSpan relational operators "
   "generates \nthe following output. It creates several "
   "different TimeSpan \nobjects and compares them with "
   "a 2-hour TimeSpan.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "Left: TimeSpan( 2, 0, 0 )", Left );

   // Create objects to compare with a 2-hour TimeSpan.
   CompareTimeSpans( Left, TimeSpan(0,120,0), "TimeSpan( 0, 120, 0 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,1), "TimeSpan( 2, 0, 1 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,-1), "TimeSpan( 2, 0, -1 )" );
   CompareTimeSpans( Left, TimeSpan::FromDays( 1.0 / 12. ), "TimeSpan::FromDays( 1 / 12 )" );
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

          Left: TimeSpan( 2, 0, 0 )    02:00:00

       Right: TimeSpan( 0, 120, 0 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True

         Right: TimeSpan( 2, 0, 1 )    02:00:01
                      Left == Right    False
                      Left >  Right    False
                      Left >= Right    False
                      Left != Right    True
                      Left <  Right    True
                      Left <= Right    True

        Right: TimeSpan( 2, 0, -1 )    01:59:59
                      Left == Right    False
                      Left >  Right    True
                      Left >= Right    True
                      Left != Right    True
                      Left <  Right    False
                      Left <= Right    False

Right: TimeSpan::FromDays( 1 / 12 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Compare
CompareTo


TimeSpan ..::.LessThan 运算符

TimeSpan
.
.
::
.
LessThan 运算符
TimeSpan 结构

指示指定的 TimeSpan 是否小于另一个指定的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator < ( _
    t1 As TimeSpan, _
    t2 As TimeSpan _
) As Boolean
public static bool operator <(
    TimeSpan t1,
    TimeSpan t2
)
public:
static bool operator <(
    TimeSpan t1,
    TimeSpan t2
)
static let inline (<)
        t1:TimeSpan *
        t2:TimeSpan  : bool

参数

t1
类型： System TimeSpan
要比较的第一个时间间隔。
t2
类型： System TimeSpan
要比较的第二个时间间隔。

返回值

类型： System Boolean
如果 t1 的值小于 t2 的值，则为 true；否则为 false。

下面的示例使用 LessThan 运算符，将几个 TimeSpan 对象同一个参考 TimeSpan 进行比较。

' Example of the TimeSpan relational operators.
Imports System
Imports Microsoft.VisualBasic

Module TSRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare TimeSpan parameters, and display them with the results.
    Sub CompareTimeSpans( Left As TimeSpan, Right As TimeSpan, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Equality( Left, Right )", _
            TimeSpan.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThan( Left, Right )", _
            TimeSpan.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThanOrEqual( Left, Right )", _
            TimeSpan.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Inequality( Left, Right )", _
            TimeSpan.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThan( Left, Right )", _
            TimeSpan.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThanOrEqual( Left, Right )", _
            TimeSpan.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New TimeSpan( 2, 0, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan relational operators " & _
            "generates " & vbCrLf & "the following output. It " & _
            "creates several different TimeSpan " & vbCrLf & _
            "objects and compares them with a 2-hour " & _
            "TimeSpan." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )", Left )

        ' Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, New TimeSpan( 0, 120, 0 ), _
            "TimeSpan( 0, 120, 0 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, 1 ), _
            "TimeSpan( 2, 0, 1 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, - 1 ), _
            "TimeSpan( 2, 0, -1 )" )
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12.0 ), _
            "TimeSpan.FromDays( 1 / 12 )" )
    End Sub
End Module

' This example of the TimeSpan relational operators generates
' the following output. It creates several different TimeSpan
' objects and compares them with a 2-hour TimeSpan.
'
' Left: TimeSpan( 2, 0, 0 )                      02:00:00
'
' Right: TimeSpan( 0, 120, 0 )                   02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, 1 )                     02:00:01
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  False
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            True
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, -1 )                    01:59:59
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         True
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     False
'
' Right: TimeSpan.FromDays( 1 / 12 )             02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True

// Example of the TimeSpan relational operators.
using System;

class TSRelationalOpsDemo
{
    const string dataFmt = "{0,34}    {1}" ;

    // Compare TimeSpan parameters, and display them with the results.
    static void CompareTimeSpans( TimeSpan Left, TimeSpan Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 2, 0, 0 );

        Console.WriteLine(
            "This example of the TimeSpan relational operators " +
            "generates \nthe following output. It creates several " +
            "different TimeSpan \nobjects and compares them with " +
            "a 2-hour TimeSpan.\n" );
        Console.WriteLine( dataFmt,
            "Left: TimeSpan( 2, 0, 0 )", Left );

        // Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ),
            "TimeSpan( 0, 120, 0 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ),
            "TimeSpan( 2, 0, 1 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ),
            "TimeSpan( 2, 0, -1 )" );
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12D ),
            "TimeSpan.FromDays( 1 / 12 )" );
    }
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

         Left: TimeSpan( 2, 0, 0 )    02:00:00

      Right: TimeSpan( 0, 120, 0 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True

        Right: TimeSpan( 2, 0, 1 )    02:00:01
                     Left == Right    False
                     Left >  Right    False
                     Left >= Right    False
                     Left != Right    True
                     Left <  Right    True
                     Left <= Right    True

       Right: TimeSpan( 2, 0, -1 )    01:59:59
                     Left == Right    False
                     Left >  Right    True
                     Left >= Right    True
                     Left != Right    True
                     Left <  Right    False
                     Left <= Right    False

Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True
*/

// Example of the TimeSpan relational operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,35}    {1}";

// Compare TimeSpan parameters, and display them with the results.
void CompareTimeSpans( TimeSpan Left, TimeSpan Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   TimeSpan Left = TimeSpan(2,0,0);
   Console::WriteLine( "This example of the TimeSpan relational operators "
   "generates \nthe following output. It creates several "
   "different TimeSpan \nobjects and compares them with "
   "a 2-hour TimeSpan.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "Left: TimeSpan( 2, 0, 0 )", Left );

   // Create objects to compare with a 2-hour TimeSpan.
   CompareTimeSpans( Left, TimeSpan(0,120,0), "TimeSpan( 0, 120, 0 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,1), "TimeSpan( 2, 0, 1 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,-1), "TimeSpan( 2, 0, -1 )" );
   CompareTimeSpans( Left, TimeSpan::FromDays( 1.0 / 12. ), "TimeSpan::FromDays( 1 / 12 )" );
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

          Left: TimeSpan( 2, 0, 0 )    02:00:00

       Right: TimeSpan( 0, 120, 0 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True

         Right: TimeSpan( 2, 0, 1 )    02:00:01
                      Left == Right    False
                      Left >  Right    False
                      Left >= Right    False
                      Left != Right    True
                      Left <  Right    True
                      Left <= Right    True

        Right: TimeSpan( 2, 0, -1 )    01:59:59
                      Left == Right    False
                      Left >  Right    True
                      Left >= Right    True
                      Left != Right    True
                      Left <  Right    False
                      Left <= Right    False

Right: TimeSpan::FromDays( 1 / 12 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Compare
CompareTo


TimeSpan ..::.LessThanOrEqual 运算符

TimeSpan
.
.
::
.
LessThanOrEqual 运算符
TimeSpan 结构

指示指定的 TimeSpan 是否小于或等于另一个指定的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <= ( _
    t1 As TimeSpan, _
    t2 As TimeSpan _
) As Boolean
public static bool operator <=(
    TimeSpan t1,
    TimeSpan t2
)
public:
static bool operator <=(
    TimeSpan t1,
    TimeSpan t2
)
static let inline (<=)
        t1:TimeSpan *
        t2:TimeSpan  : bool

参数

t1
类型： System TimeSpan
要比较的第一个时间间隔。
t2
类型： System TimeSpan
要比较的第二个时间间隔。

返回值

类型： System Boolean
如果 t1 的值小于或等于 t2 的值，则为 true；否则为 false。

下面的示例使用 LessThanOrEqual 运算符，将几个 TimeSpan 对象同一个参考 TimeSpan 进行比较。

' Example of the TimeSpan relational operators.
Imports System
Imports Microsoft.VisualBasic

Module TSRelationalOpsDemo

    Const dataFmt As String = "{0,-47}{1}"

    ' Compare TimeSpan parameters, and display them with the results.
    Sub CompareTimeSpans( Left As TimeSpan, Right As TimeSpan, _
        RightText As String )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "Right: " & RightText, Right )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Equality( Left, Right )", _
            TimeSpan.op_Equality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThan( Left, Right )", _
            TimeSpan.op_GreaterThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_GreaterThanOrEqual( Left, Right )", _
            TimeSpan.op_GreaterThanOrEqual( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Inequality( Left, Right )", _
            TimeSpan.op_Inequality( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThan( Left, Right )", _
            TimeSpan.op_LessThan( Left, Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_LessThanOrEqual( Left, Right )", _
            TimeSpan.op_LessThanOrEqual( Left, Right ) )
    End Sub

    Sub Main( )
        Dim Left As New TimeSpan( 2, 0, 0 )

        Console.WriteLine( _
            "This example of the TimeSpan relational operators " & _
            "generates " & vbCrLf & "the following output. It " & _
            "creates several different TimeSpan " & vbCrLf & _
            "objects and compares them with a 2-hour " & _
            "TimeSpan." & vbCrLf )
        Console.WriteLine( dataFmt, "Left: TimeSpan( 2, 0, 0 )", Left )

        ' Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, New TimeSpan( 0, 120, 0 ), _
            "TimeSpan( 0, 120, 0 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, 1 ), _
            "TimeSpan( 2, 0, 1 )" )
        CompareTimeSpans( Left, New TimeSpan( 2, 0, - 1 ), _
            "TimeSpan( 2, 0, -1 )" )
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12.0 ), _
            "TimeSpan.FromDays( 1 / 12 )" )
    End Sub
End Module

' This example of the TimeSpan relational operators generates
' the following output. It creates several different TimeSpan
' objects and compares them with a 2-hour TimeSpan.
'
' Left: TimeSpan( 2, 0, 0 )                      02:00:00
'
' Right: TimeSpan( 0, 120, 0 )                   02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, 1 )                     02:00:01
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  False
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            True
' TimeSpan.op_LessThanOrEqual( Left, Right )     True
'
' Right: TimeSpan( 2, 0, -1 )                    01:59:59
' TimeSpan.op_Equality( Left, Right )            False
' TimeSpan.op_GreaterThan( Left, Right )         True
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          True
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     False
'
' Right: TimeSpan.FromDays( 1 / 12 )             02:00:00
' TimeSpan.op_Equality( Left, Right )            True
' TimeSpan.op_GreaterThan( Left, Right )         False
' TimeSpan.op_GreaterThanOrEqual( Left, Right )  True
' TimeSpan.op_Inequality( Left, Right )          False
' TimeSpan.op_LessThan( Left, Right )            False
' TimeSpan.op_LessThanOrEqual( Left, Right )     True

// Example of the TimeSpan relational operators.
using System;

class TSRelationalOpsDemo
{
    const string dataFmt = "{0,34}    {1}" ;

    // Compare TimeSpan parameters, and display them with the results.
    static void CompareTimeSpans( TimeSpan Left, TimeSpan Right,
        string RightText )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "Right: " + RightText, Right );
        Console.WriteLine( dataFmt, "Left == Right", Left == Right );
        Console.WriteLine( dataFmt, "Left >  Right", Left > Right );
        Console.WriteLine( dataFmt, "Left >= Right", Left >= Right );
        Console.WriteLine( dataFmt, "Left != Right", Left != Right );
        Console.WriteLine( dataFmt, "Left <  Right", Left < Right );
        Console.WriteLine( dataFmt, "Left <= Right", Left <= Right );
    }

    static void Main( )
    {
        TimeSpan Left = new TimeSpan( 2, 0, 0 );

        Console.WriteLine(
            "This example of the TimeSpan relational operators " +
            "generates \nthe following output. It creates several " +
            "different TimeSpan \nobjects and compares them with " +
            "a 2-hour TimeSpan.\n" );
        Console.WriteLine( dataFmt,
            "Left: TimeSpan( 2, 0, 0 )", Left );

        // Create objects to compare with a 2-hour TimeSpan.
        CompareTimeSpans( Left, new TimeSpan( 0, 120, 0 ),
            "TimeSpan( 0, 120, 0 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, 1 ),
            "TimeSpan( 2, 0, 1 )" );
        CompareTimeSpans( Left, new TimeSpan( 2, 0, -1 ),
            "TimeSpan( 2, 0, -1 )" );
        CompareTimeSpans( Left, TimeSpan.FromDays( 1.0 / 12D ),
            "TimeSpan.FromDays( 1 / 12 )" );
    }
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

         Left: TimeSpan( 2, 0, 0 )    02:00:00

      Right: TimeSpan( 0, 120, 0 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True

        Right: TimeSpan( 2, 0, 1 )    02:00:01
                     Left == Right    False
                     Left >  Right    False
                     Left >= Right    False
                     Left != Right    True
                     Left <  Right    True
                     Left <= Right    True

       Right: TimeSpan( 2, 0, -1 )    01:59:59
                     Left == Right    False
                     Left >  Right    True
                     Left >= Right    True
                     Left != Right    True
                     Left <  Right    False
                     Left <= Right    False

Right: TimeSpan.FromDays( 1 / 12 )    02:00:00
                     Left == Right    True
                     Left >  Right    False
                     Left >= Right    True
                     Left != Right    False
                     Left <  Right    False
                     Left <= Right    True
*/

// Example of the TimeSpan relational operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,35}    {1}";

// Compare TimeSpan parameters, and display them with the results.
void CompareTimeSpans( TimeSpan Left, TimeSpan Right, String^ RightText )
{
   String^ dataFmt = gcnew String( protoFmt );
   Console::WriteLine();
   Console::WriteLine( dataFmt, String::Concat( "Right: ", RightText ), Right );
   Console::WriteLine( dataFmt, "Left == Right", Left == Right );
   Console::WriteLine( dataFmt, "Left >  Right", Left > Right );
   Console::WriteLine( dataFmt, "Left >= Right", Left >= Right );
   Console::WriteLine( dataFmt, "Left != Right", Left != Right );
   Console::WriteLine( dataFmt, "Left <  Right", Left < Right );
   Console::WriteLine( dataFmt, "Left <= Right", Left <= Right );
}

int main()
{
   TimeSpan Left = TimeSpan(2,0,0);
   Console::WriteLine( "This example of the TimeSpan relational operators "
   "generates \nthe following output. It creates several "
   "different TimeSpan \nobjects and compares them with "
   "a 2-hour TimeSpan.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "Left: TimeSpan( 2, 0, 0 )", Left );

   // Create objects to compare with a 2-hour TimeSpan.
   CompareTimeSpans( Left, TimeSpan(0,120,0), "TimeSpan( 0, 120, 0 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,1), "TimeSpan( 2, 0, 1 )" );
   CompareTimeSpans( Left, TimeSpan(2,0,-1), "TimeSpan( 2, 0, -1 )" );
   CompareTimeSpans( Left, TimeSpan::FromDays( 1.0 / 12. ), "TimeSpan::FromDays( 1 / 12 )" );
}

/*
This example of the TimeSpan relational operators generates
the following output. It creates several different TimeSpan
objects and compares them with a 2-hour TimeSpan.

          Left: TimeSpan( 2, 0, 0 )    02:00:00

       Right: TimeSpan( 0, 120, 0 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True

         Right: TimeSpan( 2, 0, 1 )    02:00:01
                      Left == Right    False
                      Left >  Right    False
                      Left >= Right    False
                      Left != Right    True
                      Left <  Right    True
                      Left <= Right    True

        Right: TimeSpan( 2, 0, -1 )    01:59:59
                      Left == Right    False
                      Left >  Right    True
                      Left >= Right    True
                      Left != Right    True
                      Left <  Right    False
                      Left <= Right    False

Right: TimeSpan::FromDays( 1 / 12 )    02:00:00
                      Left == Right    True
                      Left >  Right    False
                      Left >= Right    True
                      Left != Right    False
                      Left <  Right    False
                      Left <= Right    True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Compare
CompareTo


TimeSpan ..::.Subtraction 运算符

TimeSpan
.
.
::
.
Subtraction 运算符
TimeSpan 结构

从另一个指定的 TimeSpan 中减去指定的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    t1 As TimeSpan, _
    t2 As TimeSpan _
) As TimeSpan
public static TimeSpan operator -(
    TimeSpan t1,
    TimeSpan t2
)
public:
static TimeSpan operator -(
    TimeSpan t1,
    TimeSpan t2
)
static let inline (-)
        t1:TimeSpan *
        t2:TimeSpan  : TimeSpan

参数

t1
类型： System TimeSpan
被减数。
t2
类型： System TimeSpan
减数。

返回值

类型： System TimeSpan
一个对象，其值是 t1 的值减去 t2 的值后所得结果。
异常 | 条件
OverflowException | 返回值小于 TimeSpan..::.MinValue 或大于 TimeSpan..::.MaxValue。

下面的代码示例创建几对 TimeSpan 对象，并使用 Subtraction 运算符计算它们的差。

' Example of the TimeSpan Addition and Subtraction operators.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanAddSubOpsDemo

    Const dataFmt As String = "{0,-38}{1,24}"

    ' Pad the end of a TimeSpan string with spaces if it does not
    ' contain milliseconds.
    Function Align( interval As TimeSpan ) As String

        Dim intervalStr As String = interval.ToString( )
        Dim pointIndex  As Integer = intervalStr.IndexOf( ":"c )

        pointIndex = intervalStr.IndexOf( "."c, pointIndex )
        If pointIndex < 0 Then intervalStr &= "        "
        Align = intervalStr
    End Function

    ' Display TimeSpan parameters and their sum and difference.
    Sub ShowTimeSpanSumDiff( Left as TimeSpan, Right as TimeSpan )

        Console.WriteLine( )
        Console.WriteLine( dataFmt, "TimeSpan Left", Align( Left ) )
        Console.WriteLine( dataFmt, "TimeSpan Right", Align( Right ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Addition( Left, Right )", _
            Align( TimeSpan.op_Addition( Left, Right ) ) )
        Console.WriteLine( dataFmt, _
            "TimeSpan.op_Subtraction( Left, Right )", _
            Align( TimeSpan.op_Subtraction( Left, Right ) ) )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the TimeSpan Addition and " & _
            "Subtraction " & vbCrLf & "operators " & _
            "generates the following output by creating " & vbCrLf & _
            "several pairs of TimeSpan objects and calculating " & _
            "and " & vbCrLf & "displaying the sum " & _
            "and difference of each." )

        ' Create pairs of TimeSpan objects.
        ShowTimeSpanSumDiff( _
            new TimeSpan( 1, 20, 0 ), _
            new TimeSpan( 0, 45, 10 ) )
        ShowTimeSpanSumDiff( _
            new TimeSpan( 1, 10, 20, 30, 40 ), _
            new TimeSpan( -1, 2, 3, 4, 5 ) )
        ShowTimeSpanSumDiff( _
            new TimeSpan( 182, 12, 30, 30, 505 ), _
            new TimeSpan( 182, 11, 29, 29, 495 ) )
        ShowTimeSpanSumDiff( _
            new TimeSpan( 888888888888888 ), _
            new TimeSpan( 999999999999999 ) )
    End Sub
End Module

' This example of the TimeSpan Addition and Subtraction
' operators generates the following output by creating
' several pairs of TimeSpan objects and calculating and
' displaying the sum and difference of each.
'
' TimeSpan Left                                 01:20:00
' TimeSpan Right                                00:45:10
' TimeSpan.op_Addition( Left, Right )           02:05:10
' TimeSpan.op_Subtraction( Left, Right )        00:34:50
'
' TimeSpan Left                               1.10:20:30.0400000
' TimeSpan Right                               -21:56:55.9950000
' TimeSpan.op_Addition( Left, Right )           12:23:34.0450000
' TimeSpan.op_Subtraction( Left, Right )      2.08:17:26.0350000
'
' TimeSpan Left                             182.12:30:30.5050000
' TimeSpan Right                            182.11:29:29.4950000
' TimeSpan.op_Addition( Left, Right )       365.00:00:00
' TimeSpan.op_Subtraction( Left, Right )        01:01:01.0100000
'
' TimeSpan Left                            1028.19:21:28.8888888
' TimeSpan Right                           1157.09:46:39.9999999
' TimeSpan.op_Addition( Left, Right )      2186.05:08:08.8888887
' TimeSpan.op_Subtraction( Left, Right )   -128.14:25:11.1111111

// Example of the TimeSpan Addition and Subtraction operators.
using System;

class TimeSpanAddSubOpsDemo
{
    const string dataFmt = "{0,-18}{1,24}" ;

    // Pad the end of a TimeSpan string with spaces if it does not
    // contain milliseconds.
    static string Align( TimeSpan interval )
    {
        string  intervalStr = interval.ToString( );
        int     pointIndex = intervalStr.IndexOf( ':' );

        pointIndex = intervalStr.IndexOf( '.', pointIndex );
        if( pointIndex < 0 ) intervalStr += "        ";
        return intervalStr;
    }

    // Display TimeSpan parameters and their sum and difference.
    static void ShowTimeSpanSumDiff( TimeSpan Left, TimeSpan Right )
    {
        Console.WriteLine( );
        Console.WriteLine( dataFmt, "TimeSpan Left", Align( Left ) );
        Console.WriteLine( dataFmt, "TimeSpan Right", Align( Right ) );
        Console.WriteLine( dataFmt, "Left + Right",
            Align( Left + Right ) );
        Console.WriteLine( dataFmt, "Left - Right",
            Align( Left - Right ) );
    }

    static void Main( )
    {
        Console.WriteLine( "This example of the TimeSpan " +
            "Addition and Subtraction \noperators generates the " +
            "following output by creating \nseveral pairs of " +
            "TimeSpan objects and calculating and \ndisplaying " +
            "the sum and difference of each." );

        // Create pairs of TimeSpan objects.
        ShowTimeSpanSumDiff(
            new TimeSpan( 1, 20, 0 ),
            new TimeSpan( 0, 45, 10 ) );
        ShowTimeSpanSumDiff(
            new TimeSpan( 1, 10, 20, 30, 40 ),
            new TimeSpan( -1, 2, 3, 4, 5 ) );
        ShowTimeSpanSumDiff(
            new TimeSpan( 182, 12, 30, 30, 505 ),
            new TimeSpan( 182, 11, 29, 29, 495 ) );
        ShowTimeSpanSumDiff(
            new TimeSpan( 888888888888888 ),
            new TimeSpan( 999999999999999 ) );
    }
}

/*
This example of the TimeSpan Addition and Subtraction
operators generates the following output by creating
several pairs of TimeSpan objects and calculating and
displaying the sum and difference of each.

TimeSpan Left             01:20:00
TimeSpan Right            00:45:10
Left + Right              02:05:10
Left - Right              00:34:50

TimeSpan Left           1.10:20:30.0400000
TimeSpan Right           -21:56:55.9950000
Left + Right              12:23:34.0450000
Left - Right            2.08:17:26.0350000

TimeSpan Left         182.12:30:30.5050000
TimeSpan Right        182.11:29:29.4950000
Left + Right          365.00:00:00
Left - Right              01:01:01.0100000

TimeSpan Left        1028.19:21:28.8888888
TimeSpan Right       1157.09:46:39.9999999
Left + Right         2186.05:08:08.8888887
Left - Right         -128.14:25:11.1111111
*/

// Example of the TimeSpan Addition and Subtraction operators.
using namespace System;

// Pad the end of a TimeSpan string with spaces if it does not
// contain milliseconds.
String^ Align( TimeSpan interval )
{
   String^ intervalStr = interval.ToString();
   int pointIndex = intervalStr->IndexOf( ':' );
   pointIndex = intervalStr->IndexOf( '.', pointIndex );
   if ( pointIndex < 0 )
      intervalStr = String::Concat( intervalStr, "        " );

   return intervalStr;
}

// Display TimeSpan parameters and their sum and difference.
static void ShowTimeSpanSumDiff( TimeSpan Left, TimeSpan Right )
{
   String^ dataFmt = "{0,-18}{1,24}";
   Console::WriteLine();
   Console::WriteLine( dataFmt, "TimeSpan Left", Align( Left ) );
   Console::WriteLine( dataFmt, "TimeSpan Right", Align( Right ) );
   Console::WriteLine( dataFmt, "Left + Right", Align( Left + Right ) );
   Console::WriteLine( dataFmt, "Left - Right", Align( Left - Right ) );
}

int main()
{
   Console::WriteLine( "This example of the TimeSpan "
   "Addition and Subtraction \noperators generates the "
   "following output by creating \nseveral pairs of "
   "TimeSpan objects and calculating and \ndisplaying "
   "the sum and difference of each." );

   // Create pairs of TimeSpan objects.
   ShowTimeSpanSumDiff( TimeSpan(1,20,0), TimeSpan(0,45,10) );
   ShowTimeSpanSumDiff( TimeSpan(1,10,20,30,40), TimeSpan( -1,2,3,4,5) );
   ShowTimeSpanSumDiff( TimeSpan(182,12,30,30,505), TimeSpan(182,11,29,29,495) );
   ShowTimeSpanSumDiff( TimeSpan(888888888888888), TimeSpan(999999999999999) );
}

/*
This example of the TimeSpan Addition and Subtraction
operators generates the following output by creating
several pairs of TimeSpan objects and calculating and
displaying the sum and difference of each.

TimeSpan Left             01:20:00
TimeSpan Right            00:45:10
Left + Right              02:05:10
Left - Right              00:34:50

TimeSpan Left           1.10:20:30.0400000
TimeSpan Right           -21:56:55.9950000
Left + Right              12:23:34.0450000
Left - Right            2.08:17:26.0350000

TimeSpan Left         182.12:30:30.5050000
TimeSpan Right        182.11:29:29.4950000
Left + Right          365.00:00:00
Left - Right              01:01:01.0100000

TimeSpan Left        1028.19:21:28.8888888
TimeSpan Right       1157.09:46:39.9999999
Left + Right         2186.05:08:08.8888887
Left - Right         -128.14:25:11.1111111
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan ..::.UnaryNegation 运算符

TimeSpan
.
.
::
.
UnaryNegation 运算符
TimeSpan 结构

返回其值为指定实例的相反值的 TimeSpan。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    t As TimeSpan _
) As TimeSpan
public static TimeSpan operator -(
    TimeSpan t
)
public:
static TimeSpan operator -(
    TimeSpan t
)
static let inline (-)
        t:TimeSpan  : TimeSpan

参数

t
类型： System TimeSpan
要求反的时间间隔。

返回值

类型： System TimeSpan
与此实例的数值相同，但符号相反的对象。
异常 | 条件
OverflowException | 此实例的求反值不能用 TimeSpan 表示，即此实例的值为 TimeSpan..::.MinValue。

下面的代码示例对几个 TimeSpan 对象应用 UnaryNegation 运算符。

' Example of the TimeSpan.Duration( ) and TimeSpan.Negate( ) methods,
' and the TimeSpan Unary Negation and Unary Plus operators.
Imports System
Imports Microsoft.VisualBasic

Module DuraNegaUnaryDemo

    Const dataFmt As String = "{0,22}{1,22}{2,22}"

    Sub ShowDurationNegate( interval As TimeSpan )

        ' Display the TimeSpan value and the results of the
        ' Duration and Negate methods.
        Console.WriteLine( dataFmt, _
            interval, interval.Duration( ), interval.Negate( ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of TimeSpan.Duration( ), " & _
            "TimeSpan.Negate( ), " & vbCrLf & _
            "and the TimeSpan Unary Negation and " & _
            "Unary Plus operators " & vbCrLf & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( dataFmt, _
            "TimeSpan", "Duration( )", "Negate( )" )
        Console.WriteLine( dataFmt, _
            "--------", "-----------", "---------" )

        ' Create TimeSpan objects and apply the Unary Negation
        ' and Unary Plus operators to them.
        ShowDurationNegate( new TimeSpan( 1 ) )
        ShowDurationNegate( new TimeSpan( -1234567 ) )
        ShowDurationNegate( TimeSpan.op_UnaryPlus( _
            new TimeSpan( 0, 0, 10, -20, -30 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryPlus( _
            new TimeSpan( 0, -10, 20, -30, 40 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryNegation( _
            new TimeSpan( 1, 10, 20, 40, 160 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryNegation( _
            new TimeSpan( -10, -20, -30, -40, -50 ) ) )
    End Sub
End Module

' This example of TimeSpan.Duration( ), TimeSpan.Negate( ),
' and the TimeSpan Unary Negation and Unary Plus operators
' generates the following output.
'
'               TimeSpan           Duration( )             Negate( )
'               --------           -----------             ---------
'       00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
'      -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
'       00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
'      -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
'    -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
'    10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000

// Example of the TimeSpan.Duration( ) and TimeSpan.Negate( ) methods,
// and the TimeSpan Unary Negation and Unary Plus operators.
using System;

class DuraNegaUnaryDemo
{
    const string dataFmt = "{0,22}{1,22}{2,22}" ;

    static void ShowDurationNegate( TimeSpan interval )
    {
        // Display the TimeSpan value and the results of the
        // Duration and Negate methods.
        Console.WriteLine( dataFmt,
            interval, interval.Duration( ), interval.Negate( ) );
    }

    static void Main()
    {
        Console.WriteLine(
            "This example of TimeSpan.Duration( ), " +
            "TimeSpan.Negate( ), \nand the TimeSpan Unary " +
            "Negation and Unary Plus operators \n" +
            "generates the following output.\n" );
        Console.WriteLine( dataFmt,
            "TimeSpan", "Duration( )", "Negate( )" );
        Console.WriteLine( dataFmt,
            "--------", "-----------", "---------" );

        // Create TimeSpan objects and apply the Unary Negation
        // and Unary Plus operators to them.
        ShowDurationNegate( new TimeSpan( 1 ) );
        ShowDurationNegate( new TimeSpan( -1234567 ) );
        ShowDurationNegate(
            + new TimeSpan( 0, 0, 10, -20, -30 ) );
        ShowDurationNegate(
            + new TimeSpan( 0, -10, 20, -30, 40 ) );
        ShowDurationNegate(
            - new TimeSpan( 1, 10, 20, 40, 160 ) );
        ShowDurationNegate(
            - new TimeSpan( -10, -20, -30, -40, -50 ) );
    }
}

/*
This example of TimeSpan.Duration( ), TimeSpan.Negate( ),
and the TimeSpan Unary Negation and Unary Plus operators
generates the following output.

              TimeSpan           Duration( )             Negate( )
              --------           -----------             ---------
      00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
     -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
      00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
     -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
   -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
   10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000
*/

// Example of the TimeSpan::Duration( ) and TimeSpan::Negate( ) methods,
// and the TimeSpan Unary Negation and Unary Plus operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,22}{1,22}{2,22}";
void ShowDurationNegate( TimeSpan interval )
{

   // Display the TimeSpan value and the results of the
   // Duration and Negate methods.
   Console::WriteLine( gcnew String( protoFmt ), interval, interval.Duration(), interval.Negate() );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::Duration( ), "
   "TimeSpan::Negate( ), \nand the TimeSpan Unary "
   "Negation and Unary Plus operators \n"
   "generates the following output.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "TimeSpan", "Duration( )", "Negate( )" );
   Console::WriteLine( gcnew String( protoFmt ), "--------", "-----------", "---------" );

   // Create TimeSpan objects and apply the Unary Negation
   // and Unary Plus operators to them.
   ShowDurationNegate( TimeSpan(1) );
   ShowDurationNegate( TimeSpan( -1234567) );
   ShowDurationNegate(  +TimeSpan(0,0,10,-20,-30) );
   ShowDurationNegate(  +TimeSpan(0,-10,20,-30,40) );
   ShowDurationNegate(  -TimeSpan(1,10,20,40,160) );
   ShowDurationNegate(  -TimeSpan( -10,-20,-30,-40,-50) );
}

/*
This example of TimeSpan::Duration( ), TimeSpan::Negate( ),
and the TimeSpan Unary Negation and Unary Plus operators
generates the following output.

              TimeSpan           Duration( )             Negate( )
              --------           -----------             ---------
      00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
     -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
      00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
     -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
   -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
   10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan ..::.UnaryPlus 运算符

TimeSpan
.
.
::
.
UnaryPlus 运算符
TimeSpan 结构

返回 TimeSpan 的指定实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator + ( _
    t As TimeSpan _
) As TimeSpan
public static TimeSpan operator +(
    TimeSpan t
)
public:
static TimeSpan operator +(
    TimeSpan t
)
static let inline (+)
        t:TimeSpan  : TimeSpan

参数

t
类型： System TimeSpan
要返回的时间间隔。

返回值

类型： System TimeSpan
t 所定义的时间间隔。

下面的代码示例对几个 TimeSpan 对象应用 UnaryPlus 运算符。

' Example of the TimeSpan.Duration( ) and TimeSpan.Negate( ) methods,
' and the TimeSpan Unary Negation and Unary Plus operators.
Imports System
Imports Microsoft.VisualBasic

Module DuraNegaUnaryDemo

    Const dataFmt As String = "{0,22}{1,22}{2,22}"

    Sub ShowDurationNegate( interval As TimeSpan )

        ' Display the TimeSpan value and the results of the
        ' Duration and Negate methods.
        Console.WriteLine( dataFmt, _
            interval, interval.Duration( ), interval.Negate( ) )
    End Sub

    Sub Main( )

        Console.WriteLine( _
            "This example of TimeSpan.Duration( ), " & _
            "TimeSpan.Negate( ), " & vbCrLf & _
            "and the TimeSpan Unary Negation and " & _
            "Unary Plus operators " & vbCrLf & _
            "generates the following output." & vbCrLf )
        Console.WriteLine( dataFmt, _
            "TimeSpan", "Duration( )", "Negate( )" )
        Console.WriteLine( dataFmt, _
            "--------", "-----------", "---------" )

        ' Create TimeSpan objects and apply the Unary Negation
        ' and Unary Plus operators to them.
        ShowDurationNegate( new TimeSpan( 1 ) )
        ShowDurationNegate( new TimeSpan( -1234567 ) )
        ShowDurationNegate( TimeSpan.op_UnaryPlus( _
            new TimeSpan( 0, 0, 10, -20, -30 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryPlus( _
            new TimeSpan( 0, -10, 20, -30, 40 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryNegation( _
            new TimeSpan( 1, 10, 20, 40, 160 ) ) )
        ShowDurationNegate( TimeSpan.op_UnaryNegation( _
            new TimeSpan( -10, -20, -30, -40, -50 ) ) )
    End Sub
End Module

' This example of TimeSpan.Duration( ), TimeSpan.Negate( ),
' and the TimeSpan Unary Negation and Unary Plus operators
' generates the following output.
'
'               TimeSpan           Duration( )             Negate( )
'               --------           -----------             ---------
'       00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
'      -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
'       00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
'      -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
'    -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
'    10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000

// Example of the TimeSpan.Duration( ) and TimeSpan.Negate( ) methods,
// and the TimeSpan Unary Negation and Unary Plus operators.
using System;

class DuraNegaUnaryDemo
{
    const string dataFmt = "{0,22}{1,22}{2,22}" ;

    static void ShowDurationNegate( TimeSpan interval )
    {
        // Display the TimeSpan value and the results of the
        // Duration and Negate methods.
        Console.WriteLine( dataFmt,
            interval, interval.Duration( ), interval.Negate( ) );
    }

    static void Main()
    {
        Console.WriteLine(
            "This example of TimeSpan.Duration( ), " +
            "TimeSpan.Negate( ), \nand the TimeSpan Unary " +
            "Negation and Unary Plus operators \n" +
            "generates the following output.\n" );
        Console.WriteLine( dataFmt,
            "TimeSpan", "Duration( )", "Negate( )" );
        Console.WriteLine( dataFmt,
            "--------", "-----------", "---------" );

        // Create TimeSpan objects and apply the Unary Negation
        // and Unary Plus operators to them.
        ShowDurationNegate( new TimeSpan( 1 ) );
        ShowDurationNegate( new TimeSpan( -1234567 ) );
        ShowDurationNegate(
            + new TimeSpan( 0, 0, 10, -20, -30 ) );
        ShowDurationNegate(
            + new TimeSpan( 0, -10, 20, -30, 40 ) );
        ShowDurationNegate(
            - new TimeSpan( 1, 10, 20, 40, 160 ) );
        ShowDurationNegate(
            - new TimeSpan( -10, -20, -30, -40, -50 ) );
    }
}

/*
This example of TimeSpan.Duration( ), TimeSpan.Negate( ),
and the TimeSpan Unary Negation and Unary Plus operators
generates the following output.

              TimeSpan           Duration( )             Negate( )
              --------           -----------             ---------
      00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
     -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
      00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
     -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
   -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
   10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000
*/

// Example of the TimeSpan::Duration( ) and TimeSpan::Negate( ) methods,
// and the TimeSpan Unary Negation and Unary Plus operators.
using namespace System;
const __wchar_t * protoFmt = L"{0,22}{1,22}{2,22}";
void ShowDurationNegate( TimeSpan interval )
{

   // Display the TimeSpan value and the results of the
   // Duration and Negate methods.
   Console::WriteLine( gcnew String( protoFmt ), interval, interval.Duration(), interval.Negate() );
}

int main()
{
   Console::WriteLine( "This example of TimeSpan::Duration( ), "
   "TimeSpan::Negate( ), \nand the TimeSpan Unary "
   "Negation and Unary Plus operators \n"
   "generates the following output.\n" );
   Console::WriteLine( gcnew String( protoFmt ), "TimeSpan", "Duration( )", "Negate( )" );
   Console::WriteLine( gcnew String( protoFmt ), "--------", "-----------", "---------" );

   // Create TimeSpan objects and apply the Unary Negation
   // and Unary Plus operators to them.
   ShowDurationNegate( TimeSpan(1) );
   ShowDurationNegate( TimeSpan( -1234567) );
   ShowDurationNegate(  +TimeSpan(0,0,10,-20,-30) );
   ShowDurationNegate(  +TimeSpan(0,-10,20,-30,40) );
   ShowDurationNegate(  -TimeSpan(1,10,20,40,160) );
   ShowDurationNegate(  -TimeSpan( -10,-20,-30,-40,-50) );
}

/*
This example of TimeSpan::Duration( ), TimeSpan::Negate( ),
and the TimeSpan Unary Negation and Unary Plus operators
generates the following output.

              TimeSpan           Duration( )             Negate( )
              --------           -----------             ---------
      00:00:00.0000001      00:00:00.0000001     -00:00:00.0000001
     -00:00:00.1234567      00:00:00.1234567      00:00:00.1234567
      00:09:39.9700000      00:09:39.9700000     -00:09:39.9700000
     -09:40:29.9600000      09:40:29.9600000      09:40:29.9600000
   -1.10:20:40.1600000    1.10:20:40.1600000    1.10:20:40.1600000
   10.20:30:40.0500000   10.20:30:40.0500000  -10.20:30:40.0500000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间


TimeSpan 属性

TimeSpan 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeSpan 结构

TimeSpan 类型公开以下成员。

名称 说明
页首

参考

TimeSpan 结构
System 命名空间


TimeSpan ..::.Days 属性

TimeSpan
.
.
::
.
Days 属性
TimeSpan 结构

获取当前 TimeSpan 结构所表示的时间间隔的天数部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Days As Integer
    Get
public int Days { get; }
public:
property int Days {
    int get ();
}
member Days : int

属性值

类型： System Int32
此实例的天数部分。返回值可以是正数也可以是负数。 此实例的天数部分。返回值可以是正数也可以是负数。

TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Days 属性的值是表示天的分量 d。 TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Days 属性的值是表示天的分量 d。

下面的示例创建几个 TimeSpan 对象并显示每个对象的 Days 属性。

' Example of the TimeSpan class properties.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanPropertiesDemo

    Const headerFmt As String = vbCrLf & "{0,-45}"
    Const dataFmt As String = "{0,-12}{1,8}       {2,-18}{3,21}"

    ' Display the properties of the TimeSpan parameter.
    Sub ShowTimeSpanProperties( interval as TimeSpan )

        Console.WriteLine( "{0,21}", interval )
        Console.WriteLine( dataFmt, _
            "Days", interval.Days, "TotalDays", interval.TotalDays )
        Console.WriteLine( dataFmt, "Hours", interval.Hours, _
            "TotalHours", interval.TotalHours )
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes, _
            "TotalMinutes", interval.TotalMinutes )
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds, _
            "TotalSeconds", interval.TotalSeconds )
        Console.WriteLine( dataFmt, _
            "Milliseconds", interval.Milliseconds, _
            "TotalMilliseconds", interval.TotalMilliseconds )
        Console.WriteLine( dataFmt, _
            Nothing, Nothing, "Ticks", interval.Ticks )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the TimeSpan class properties " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several TimeSpan objects and " & vbCrLf & _
            "displays the values of the TimeSpan properties for " & _
            "each."  )

        ' Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" )
        ShowTimeSpanProperties( new TimeSpan( 1 ) )

        ' Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" )
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) )

        ' This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" )
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) )

        ' This TimeSpan has all fields overflowing.
        Console.Write( headerFmt, _
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" )
        ShowTimeSpanProperties( _
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) )

        ' This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" )
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) )
    End Sub
End Module

' This example of the TimeSpan class properties generates the
' following output. It creates several TimeSpan objects and
' displays the values of the TimeSpan properties for each.
'
' TimeSpan( 1 )                                     00:00:00.0000001
' Days               0       TotalDays          1.15740740740741E-12
' Hours              0       TotalHours         2.77777777777778E-11
' Minutes            0       TotalMinutes       1.66666666666667E-09
' Seconds            0       TotalSeconds                      1E-07
' Milliseconds       0       TotalMilliseconds                0.0001
'                            Ticks                                 1
'
' TimeSpan( 111222333444555 )                   128.17:30:33.3444555
' Days             128       TotalDays              128.729552597865
' Hours             17       TotalHours             3089.50926234875
' Minutes           30       TotalMinutes           185370.555740925
' Seconds           33       TotalSeconds           11122233.3444555
' Milliseconds     344       TotalMilliseconds      11122233344.4555
'                            Ticks                   111222333444555
'
' TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
' Days              10       TotalDays              10.8546302083333
' Hours             20       TotalHours                   260.511125
' Minutes           30       TotalMinutes                 15630.6675
' Seconds           40       TotalSeconds                  937840.05
' Milliseconds      50       TotalMilliseconds             937840050
'                            Ticks                     9378400500000
'
' TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
' Days            1205       TotalDays              1205.94941614583
' Hours             22       TotalHours                28942.7859875
' Minutes           47       TotalMinutes              1736567.15925
' Seconds            9       TotalSeconds              104194029.555
' Milliseconds     555       TotalMilliseconds          104194029555
'                            Ticks                  1041940295550000
'
' FromDays( 20.84745602 )                        20.20:20:20.2000000
' Days              20       TotalDays              20.8474560185185
' Hours             20       TotalHours             500.338944444444
' Minutes           20       TotalMinutes           30020.3366666667
' Seconds           20       TotalSeconds                  1801220.2
' Milliseconds     200       TotalMilliseconds            1801220200
'                            Ticks                    18012202000000

// Example of the TimeSpan class properties.
using System;

class TimeSpanPropertiesDemo
{
    const string headerFmt = "\n{0,-45}";
    const string dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}" ;

    // Display the properties of the TimeSpan parameter.
    static void ShowTimeSpanProperties( TimeSpan interval )
    {
        Console.WriteLine( "{0,21}", interval );
        Console.WriteLine( dataFmt, "Days", interval.Days,
            "TotalDays", interval.TotalDays );
        Console.WriteLine( dataFmt, "Hours", interval.Hours,
            "TotalHours", interval.TotalHours );
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes,
            "TotalMinutes", interval.TotalMinutes );
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds,
            "TotalSeconds", interval.TotalSeconds );
        Console.WriteLine( dataFmt, "Milliseconds",
            interval.Milliseconds, "TotalMilliseconds",
            interval.TotalMilliseconds );
        Console.WriteLine( dataFmt, null, null,
            "Ticks", interval.Ticks );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan class properties " +
            "generates the \nfollowing output. It " +
            "creates several TimeSpan objects and \ndisplays " +
            "the values of the TimeSpan properties for each." );

        // Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" );
        ShowTimeSpanProperties( new TimeSpan( 1 ) );

        // Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" );
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) );

        // This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) );

        // This TimeSpan has all fields overflowing.
        Console.Write( headerFmt,
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
        ShowTimeSpanProperties(
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) );

        // This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" );
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) );
    }
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

// Example of the TimeSpan class properties.
using namespace System;

// Display the properties of the TimeSpan parameter.
static void ShowTimeSpanProperties( TimeSpan interval )
{
   Object^ null = nullptr;
   String^ dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}";
   Console::WriteLine( "{0,21}", interval );
   Console::WriteLine( dataFmt, "Days", interval.Days, "TotalDays", interval.TotalDays );
   Console::WriteLine( dataFmt, "Hours", interval.Hours, "TotalHours", interval.TotalHours );
   Console::WriteLine( dataFmt, "Minutes", interval.Minutes, "TotalMinutes", interval.TotalMinutes );
   Console::WriteLine( dataFmt, "Seconds", interval.Seconds, "TotalSeconds", interval.TotalSeconds );
   Console::WriteLine( dataFmt, "Milliseconds", interval.Milliseconds, "TotalMilliseconds", interval.TotalMilliseconds );
   Console::WriteLine( dataFmt, null, null, "Ticks", interval.Ticks );
}

int main()
{
   String^ headerFmt = "\n{0,-45}";
   Console::WriteLine( "This example of the TimeSpan class properties "
   "generates the \nfollowing output. It "
   "creates several TimeSpan objects and \ndisplays "
   "the values of the TimeSpan properties for each." );

   // Create and display a TimeSpan value of 1 tick.
   Console::Write( headerFmt, "TimeSpan( 1 )" );
   ShowTimeSpanProperties( TimeSpan(1) );

   // Create a TimeSpan value with a large number of ticks.
   Console::Write( headerFmt, "TimeSpan( 111222333444555 )" );
   ShowTimeSpanProperties( TimeSpan(111222333444555) );

   // This TimeSpan has all fields specified.
   Console::Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
   ShowTimeSpanProperties( TimeSpan(10,20,30,40,50) );

   // This TimeSpan has all fields overflowing.
   Console::Write( headerFmt, "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
   ShowTimeSpanProperties( TimeSpan(1111,2222,3333,4444,5555) );

   // This TimeSpan is based on a number of days.
   Console::Write( headerFmt, "FromDays( 20.84745602 )" );
   ShowTimeSpanProperties( TimeSpan::FromDays( 20.84745602 ) );
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
TotalDays
Ticks
Milliseconds
Seconds
Minutes
Hours


TimeSpan ..::.Hours 属性

TimeSpan
.
.
::
.
Hours 属性
TimeSpan 结构

获取当前 TimeSpan 结构所表示的时间间隔的小时数部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Hours As Integer
    Get
public int Hours { get; }
public:
property int Hours {
    int get ();
}
member Hours : int

属性值

类型： System Int32
当前 TimeSpan 结构的小时分量。返回值的范围为 -23 到 23。 当前 TimeSpan 结构的小时分量。返回值的范围为 -23 到 23。

TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Hours 属性的值是表示小时的分量 hh。 TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Hours 属性的值是表示小时的分量 hh。

下面的示例创建几个 TimeSpan 对象并显示每个对象的 Hours 属性。

' Example of the TimeSpan class properties.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanPropertiesDemo

    Const headerFmt As String = vbCrLf & "{0,-45}"
    Const dataFmt As String = "{0,-12}{1,8}       {2,-18}{3,21}"

    ' Display the properties of the TimeSpan parameter.
    Sub ShowTimeSpanProperties( interval as TimeSpan )

        Console.WriteLine( "{0,21}", interval )
        Console.WriteLine( dataFmt, _
            "Days", interval.Days, "TotalDays", interval.TotalDays )
        Console.WriteLine( dataFmt, "Hours", interval.Hours, _
            "TotalHours", interval.TotalHours )
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes, _
            "TotalMinutes", interval.TotalMinutes )
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds, _
            "TotalSeconds", interval.TotalSeconds )
        Console.WriteLine( dataFmt, _
            "Milliseconds", interval.Milliseconds, _
            "TotalMilliseconds", interval.TotalMilliseconds )
        Console.WriteLine( dataFmt, _
            Nothing, Nothing, "Ticks", interval.Ticks )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the TimeSpan class properties " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several TimeSpan objects and " & vbCrLf & _
            "displays the values of the TimeSpan properties for " & _
            "each."  )

        ' Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" )
        ShowTimeSpanProperties( new TimeSpan( 1 ) )

        ' Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" )
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) )

        ' This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" )
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) )

        ' This TimeSpan has all fields overflowing.
        Console.Write( headerFmt, _
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" )
        ShowTimeSpanProperties( _
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) )

        ' This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" )
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) )
    End Sub
End Module

' This example of the TimeSpan class properties generates the
' following output. It creates several TimeSpan objects and
' displays the values of the TimeSpan properties for each.
'
' TimeSpan( 1 )                                     00:00:00.0000001
' Days               0       TotalDays          1.15740740740741E-12
' Hours              0       TotalHours         2.77777777777778E-11
' Minutes            0       TotalMinutes       1.66666666666667E-09
' Seconds            0       TotalSeconds                      1E-07
' Milliseconds       0       TotalMilliseconds                0.0001
'                            Ticks                                 1
'
' TimeSpan( 111222333444555 )                   128.17:30:33.3444555
' Days             128       TotalDays              128.729552597865
' Hours             17       TotalHours             3089.50926234875
' Minutes           30       TotalMinutes           185370.555740925
' Seconds           33       TotalSeconds           11122233.3444555
' Milliseconds     344       TotalMilliseconds      11122233344.4555
'                            Ticks                   111222333444555
'
' TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
' Days              10       TotalDays              10.8546302083333
' Hours             20       TotalHours                   260.511125
' Minutes           30       TotalMinutes                 15630.6675
' Seconds           40       TotalSeconds                  937840.05
' Milliseconds      50       TotalMilliseconds             937840050
'                            Ticks                     9378400500000
'
' TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
' Days            1205       TotalDays              1205.94941614583
' Hours             22       TotalHours                28942.7859875
' Minutes           47       TotalMinutes              1736567.15925
' Seconds            9       TotalSeconds              104194029.555
' Milliseconds     555       TotalMilliseconds          104194029555
'                            Ticks                  1041940295550000
'
' FromDays( 20.84745602 )                        20.20:20:20.2000000
' Days              20       TotalDays              20.8474560185185
' Hours             20       TotalHours             500.338944444444
' Minutes           20       TotalMinutes           30020.3366666667
' Seconds           20       TotalSeconds                  1801220.2
' Milliseconds     200       TotalMilliseconds            1801220200
'                            Ticks                    18012202000000

// Example of the TimeSpan class properties.
using System;

class TimeSpanPropertiesDemo
{
    const string headerFmt = "\n{0,-45}";
    const string dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}" ;

    // Display the properties of the TimeSpan parameter.
    static void ShowTimeSpanProperties( TimeSpan interval )
    {
        Console.WriteLine( "{0,21}", interval );
        Console.WriteLine( dataFmt, "Days", interval.Days,
            "TotalDays", interval.TotalDays );
        Console.WriteLine( dataFmt, "Hours", interval.Hours,
            "TotalHours", interval.TotalHours );
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes,
            "TotalMinutes", interval.TotalMinutes );
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds,
            "TotalSeconds", interval.TotalSeconds );
        Console.WriteLine( dataFmt, "Milliseconds",
            interval.Milliseconds, "TotalMilliseconds",
            interval.TotalMilliseconds );
        Console.WriteLine( dataFmt, null, null,
            "Ticks", interval.Ticks );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan class properties " +
            "generates the \nfollowing output. It " +
            "creates several TimeSpan objects and \ndisplays " +
            "the values of the TimeSpan properties for each." );

        // Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" );
        ShowTimeSpanProperties( new TimeSpan( 1 ) );

        // Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" );
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) );

        // This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) );

        // This TimeSpan has all fields overflowing.
        Console.Write( headerFmt,
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
        ShowTimeSpanProperties(
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) );

        // This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" );
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) );
    }
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

// Example of the TimeSpan class properties.
using namespace System;

// Display the properties of the TimeSpan parameter.
static void ShowTimeSpanProperties( TimeSpan interval )
{
   Object^ null = nullptr;
   String^ dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}";
   Console::WriteLine( "{0,21}", interval );
   Console::WriteLine( dataFmt, "Days", interval.Days, "TotalDays", interval.TotalDays );
   Console::WriteLine( dataFmt, "Hours", interval.Hours, "TotalHours", interval.TotalHours );
   Console::WriteLine( dataFmt, "Minutes", interval.Minutes, "TotalMinutes", interval.TotalMinutes );
   Console::WriteLine( dataFmt, "Seconds", interval.Seconds, "TotalSeconds", interval.TotalSeconds );
   Console::WriteLine( dataFmt, "Milliseconds", interval.Milliseconds, "TotalMilliseconds", interval.TotalMilliseconds );
   Console::WriteLine( dataFmt, null, null, "Ticks", interval.Ticks );
}

int main()
{
   String^ headerFmt = "\n{0,-45}";
   Console::WriteLine( "This example of the TimeSpan class properties "
   "generates the \nfollowing output. It "
   "creates several TimeSpan objects and \ndisplays "
   "the values of the TimeSpan properties for each." );

   // Create and display a TimeSpan value of 1 tick.
   Console::Write( headerFmt, "TimeSpan( 1 )" );
   ShowTimeSpanProperties( TimeSpan(1) );

   // Create a TimeSpan value with a large number of ticks.
   Console::Write( headerFmt, "TimeSpan( 111222333444555 )" );
   ShowTimeSpanProperties( TimeSpan(111222333444555) );

   // This TimeSpan has all fields specified.
   Console::Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
   ShowTimeSpanProperties( TimeSpan(10,20,30,40,50) );

   // This TimeSpan has all fields overflowing.
   Console::Write( headerFmt, "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
   ShowTimeSpanProperties( TimeSpan(1111,2222,3333,4444,5555) );

   // This TimeSpan is based on a number of days.
   Console::Write( headerFmt, "FromDays( 20.84745602 )" );
   ShowTimeSpanProperties( TimeSpan::FromDays( 20.84745602 ) );
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
TotalHours
Ticks
Milliseconds
Seconds
Minutes
Days


TimeSpan ..::.Milliseconds 属性

TimeSpan
.
.
::
.
Milliseconds 属性
TimeSpan 结构

获取当前 TimeSpan 结构所表示的时间间隔的毫秒数部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Milliseconds As Integer
    Get
public int Milliseconds { get; }
public:
property int Milliseconds {
    int get ();
}
member Milliseconds : int

属性值

类型： System Int32
当前 TimeSpan 结构的毫秒分量。返回值的范围为 -999 到 999。 当前 TimeSpan 结构的毫秒分量。返回值的范围为 -999 到 999。

TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Milliseconds 属性的值是表示秒的小数部分的分量 ff。 TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Milliseconds 属性的值是表示秒的小数部分的分量 ff。

下面的示例创建几个 TimeSpan 对象并显示每个对象的 Milliseconds 属性。

' Example of the TimeSpan class properties.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanPropertiesDemo

    Const headerFmt As String = vbCrLf & "{0,-45}"
    Const dataFmt As String = "{0,-12}{1,8}       {2,-18}{3,21}"

    ' Display the properties of the TimeSpan parameter.
    Sub ShowTimeSpanProperties( interval as TimeSpan )

        Console.WriteLine( "{0,21}", interval )
        Console.WriteLine( dataFmt, _
            "Days", interval.Days, "TotalDays", interval.TotalDays )
        Console.WriteLine( dataFmt, "Hours", interval.Hours, _
            "TotalHours", interval.TotalHours )
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes, _
            "TotalMinutes", interval.TotalMinutes )
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds, _
            "TotalSeconds", interval.TotalSeconds )
        Console.WriteLine( dataFmt, _
            "Milliseconds", interval.Milliseconds, _
            "TotalMilliseconds", interval.TotalMilliseconds )
        Console.WriteLine( dataFmt, _
            Nothing, Nothing, "Ticks", interval.Ticks )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the TimeSpan class properties " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several TimeSpan objects and " & vbCrLf & _
            "displays the values of the TimeSpan properties for " & _
            "each."  )

        ' Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" )
        ShowTimeSpanProperties( new TimeSpan( 1 ) )

        ' Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" )
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) )

        ' This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" )
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) )

        ' This TimeSpan has all fields overflowing.
        Console.Write( headerFmt, _
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" )
        ShowTimeSpanProperties( _
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) )

        ' This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" )
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) )
    End Sub
End Module

' This example of the TimeSpan class properties generates the
' following output. It creates several TimeSpan objects and
' displays the values of the TimeSpan properties for each.
'
' TimeSpan( 1 )                                     00:00:00.0000001
' Days               0       TotalDays          1.15740740740741E-12
' Hours              0       TotalHours         2.77777777777778E-11
' Minutes            0       TotalMinutes       1.66666666666667E-09
' Seconds            0       TotalSeconds                      1E-07
' Milliseconds       0       TotalMilliseconds                0.0001
'                            Ticks                                 1
'
' TimeSpan( 111222333444555 )                   128.17:30:33.3444555
' Days             128       TotalDays              128.729552597865
' Hours             17       TotalHours             3089.50926234875
' Minutes           30       TotalMinutes           185370.555740925
' Seconds           33       TotalSeconds           11122233.3444555
' Milliseconds     344       TotalMilliseconds      11122233344.4555
'                            Ticks                   111222333444555
'
' TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
' Days              10       TotalDays              10.8546302083333
' Hours             20       TotalHours                   260.511125
' Minutes           30       TotalMinutes                 15630.6675
' Seconds           40       TotalSeconds                  937840.05
' Milliseconds      50       TotalMilliseconds             937840050
'                            Ticks                     9378400500000
'
' TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
' Days            1205       TotalDays              1205.94941614583
' Hours             22       TotalHours                28942.7859875
' Minutes           47       TotalMinutes              1736567.15925
' Seconds            9       TotalSeconds              104194029.555
' Milliseconds     555       TotalMilliseconds          104194029555
'                            Ticks                  1041940295550000
'
' FromDays( 20.84745602 )                        20.20:20:20.2000000
' Days              20       TotalDays              20.8474560185185
' Hours             20       TotalHours             500.338944444444
' Minutes           20       TotalMinutes           30020.3366666667
' Seconds           20       TotalSeconds                  1801220.2
' Milliseconds     200       TotalMilliseconds            1801220200
'                            Ticks                    18012202000000

// Example of the TimeSpan class properties.
using System;

class TimeSpanPropertiesDemo
{
    const string headerFmt = "\n{0,-45}";
    const string dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}" ;

    // Display the properties of the TimeSpan parameter.
    static void ShowTimeSpanProperties( TimeSpan interval )
    {
        Console.WriteLine( "{0,21}", interval );
        Console.WriteLine( dataFmt, "Days", interval.Days,
            "TotalDays", interval.TotalDays );
        Console.WriteLine( dataFmt, "Hours", interval.Hours,
            "TotalHours", interval.TotalHours );
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes,
            "TotalMinutes", interval.TotalMinutes );
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds,
            "TotalSeconds", interval.TotalSeconds );
        Console.WriteLine( dataFmt, "Milliseconds",
            interval.Milliseconds, "TotalMilliseconds",
            interval.TotalMilliseconds );
        Console.WriteLine( dataFmt, null, null,
            "Ticks", interval.Ticks );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan class properties " +
            "generates the \nfollowing output. It " +
            "creates several TimeSpan objects and \ndisplays " +
            "the values of the TimeSpan properties for each." );

        // Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" );
        ShowTimeSpanProperties( new TimeSpan( 1 ) );

        // Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" );
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) );

        // This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) );

        // This TimeSpan has all fields overflowing.
        Console.Write( headerFmt,
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
        ShowTimeSpanProperties(
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) );

        // This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" );
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) );
    }
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

// Example of the TimeSpan class properties.
using namespace System;

// Display the properties of the TimeSpan parameter.
static void ShowTimeSpanProperties( TimeSpan interval )
{
   Object^ null = nullptr;
   String^ dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}";
   Console::WriteLine( "{0,21}", interval );
   Console::WriteLine( dataFmt, "Days", interval.Days, "TotalDays", interval.TotalDays );
   Console::WriteLine( dataFmt, "Hours", interval.Hours, "TotalHours", interval.TotalHours );
   Console::WriteLine( dataFmt, "Minutes", interval.Minutes, "TotalMinutes", interval.TotalMinutes );
   Console::WriteLine( dataFmt, "Seconds", interval.Seconds, "TotalSeconds", interval.TotalSeconds );
   Console::WriteLine( dataFmt, "Milliseconds", interval.Milliseconds, "TotalMilliseconds", interval.TotalMilliseconds );
   Console::WriteLine( dataFmt, null, null, "Ticks", interval.Ticks );
}

int main()
{
   String^ headerFmt = "\n{0,-45}";
   Console::WriteLine( "This example of the TimeSpan class properties "
   "generates the \nfollowing output. It "
   "creates several TimeSpan objects and \ndisplays "
   "the values of the TimeSpan properties for each." );

   // Create and display a TimeSpan value of 1 tick.
   Console::Write( headerFmt, "TimeSpan( 1 )" );
   ShowTimeSpanProperties( TimeSpan(1) );

   // Create a TimeSpan value with a large number of ticks.
   Console::Write( headerFmt, "TimeSpan( 111222333444555 )" );
   ShowTimeSpanProperties( TimeSpan(111222333444555) );

   // This TimeSpan has all fields specified.
   Console::Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
   ShowTimeSpanProperties( TimeSpan(10,20,30,40,50) );

   // This TimeSpan has all fields overflowing.
   Console::Write( headerFmt, "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
   ShowTimeSpanProperties( TimeSpan(1111,2222,3333,4444,5555) );

   // This TimeSpan is based on a number of days.
   Console::Write( headerFmt, "FromDays( 20.84745602 )" );
   ShowTimeSpanProperties( TimeSpan::FromDays( 20.84745602 ) );
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
TotalMilliseconds
Ticks
Seconds
Minutes
Hours
Days


TimeSpan ..::.Minutes 属性

TimeSpan
.
.
::
.
Minutes 属性
TimeSpan 结构

获取当前 TimeSpan 结构所表示的时间间隔的分钟数部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Minutes As Integer
    Get
public int Minutes { get; }
public:
property int Minutes {
    int get ();
}
member Minutes : int

属性值

类型： System Int32
当前 TimeSpan 结构的分钟分量。返回值的范围为 -59 到 59。 当前 TimeSpan 结构的分钟分量。返回值的范围为 -59 到 59。

TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Minutes 属性的值是表示分钟的分量 mm。 TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Minutes 属性的值是表示分钟的分量 mm。

下面的示例创建几个 TimeSpan 对象并显示每个对象的 Minutes 属性。

' Example of the TimeSpan class properties.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanPropertiesDemo

    Const headerFmt As String = vbCrLf & "{0,-45}"
    Const dataFmt As String = "{0,-12}{1,8}       {2,-18}{3,21}"

    ' Display the properties of the TimeSpan parameter.
    Sub ShowTimeSpanProperties( interval as TimeSpan )

        Console.WriteLine( "{0,21}", interval )
        Console.WriteLine( dataFmt, _
            "Days", interval.Days, "TotalDays", interval.TotalDays )
        Console.WriteLine( dataFmt, "Hours", interval.Hours, _
            "TotalHours", interval.TotalHours )
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes, _
            "TotalMinutes", interval.TotalMinutes )
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds, _
            "TotalSeconds", interval.TotalSeconds )
        Console.WriteLine( dataFmt, _
            "Milliseconds", interval.Milliseconds, _
            "TotalMilliseconds", interval.TotalMilliseconds )
        Console.WriteLine( dataFmt, _
            Nothing, Nothing, "Ticks", interval.Ticks )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the TimeSpan class properties " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several TimeSpan objects and " & vbCrLf & _
            "displays the values of the TimeSpan properties for " & _
            "each."  )

        ' Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" )
        ShowTimeSpanProperties( new TimeSpan( 1 ) )

        ' Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" )
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) )

        ' This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" )
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) )

        ' This TimeSpan has all fields overflowing.
        Console.Write( headerFmt, _
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" )
        ShowTimeSpanProperties( _
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) )

        ' This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" )
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) )
    End Sub
End Module

' This example of the TimeSpan class properties generates the
' following output. It creates several TimeSpan objects and
' displays the values of the TimeSpan properties for each.
'
' TimeSpan( 1 )                                     00:00:00.0000001
' Days               0       TotalDays          1.15740740740741E-12
' Hours              0       TotalHours         2.77777777777778E-11
' Minutes            0       TotalMinutes       1.66666666666667E-09
' Seconds            0       TotalSeconds                      1E-07
' Milliseconds       0       TotalMilliseconds                0.0001
'                            Ticks                                 1
'
' TimeSpan( 111222333444555 )                   128.17:30:33.3444555
' Days             128       TotalDays              128.729552597865
' Hours             17       TotalHours             3089.50926234875
' Minutes           30       TotalMinutes           185370.555740925
' Seconds           33       TotalSeconds           11122233.3444555
' Milliseconds     344       TotalMilliseconds      11122233344.4555
'                            Ticks                   111222333444555
'
' TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
' Days              10       TotalDays              10.8546302083333
' Hours             20       TotalHours                   260.511125
' Minutes           30       TotalMinutes                 15630.6675
' Seconds           40       TotalSeconds                  937840.05
' Milliseconds      50       TotalMilliseconds             937840050
'                            Ticks                     9378400500000
'
' TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
' Days            1205       TotalDays              1205.94941614583
' Hours             22       TotalHours                28942.7859875
' Minutes           47       TotalMinutes              1736567.15925
' Seconds            9       TotalSeconds              104194029.555
' Milliseconds     555       TotalMilliseconds          104194029555
'                            Ticks                  1041940295550000
'
' FromDays( 20.84745602 )                        20.20:20:20.2000000
' Days              20       TotalDays              20.8474560185185
' Hours             20       TotalHours             500.338944444444
' Minutes           20       TotalMinutes           30020.3366666667
' Seconds           20       TotalSeconds                  1801220.2
' Milliseconds     200       TotalMilliseconds            1801220200
'                            Ticks                    18012202000000

// Example of the TimeSpan class properties.
using System;

class TimeSpanPropertiesDemo
{
    const string headerFmt = "\n{0,-45}";
    const string dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}" ;

    // Display the properties of the TimeSpan parameter.
    static void ShowTimeSpanProperties( TimeSpan interval )
    {
        Console.WriteLine( "{0,21}", interval );
        Console.WriteLine( dataFmt, "Days", interval.Days,
            "TotalDays", interval.TotalDays );
        Console.WriteLine( dataFmt, "Hours", interval.Hours,
            "TotalHours", interval.TotalHours );
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes,
            "TotalMinutes", interval.TotalMinutes );
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds,
            "TotalSeconds", interval.TotalSeconds );
        Console.WriteLine( dataFmt, "Milliseconds",
            interval.Milliseconds, "TotalMilliseconds",
            interval.TotalMilliseconds );
        Console.WriteLine( dataFmt, null, null,
            "Ticks", interval.Ticks );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan class properties " +
            "generates the \nfollowing output. It " +
            "creates several TimeSpan objects and \ndisplays " +
            "the values of the TimeSpan properties for each." );

        // Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" );
        ShowTimeSpanProperties( new TimeSpan( 1 ) );

        // Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" );
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) );

        // This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) );

        // This TimeSpan has all fields overflowing.
        Console.Write( headerFmt,
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
        ShowTimeSpanProperties(
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) );

        // This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" );
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) );
    }
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

// Example of the TimeSpan class properties.
using namespace System;

// Display the properties of the TimeSpan parameter.
static void ShowTimeSpanProperties( TimeSpan interval )
{
   Object^ null = nullptr;
   String^ dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}";
   Console::WriteLine( "{0,21}", interval );
   Console::WriteLine( dataFmt, "Days", interval.Days, "TotalDays", interval.TotalDays );
   Console::WriteLine( dataFmt, "Hours", interval.Hours, "TotalHours", interval.TotalHours );
   Console::WriteLine( dataFmt, "Minutes", interval.Minutes, "TotalMinutes", interval.TotalMinutes );
   Console::WriteLine( dataFmt, "Seconds", interval.Seconds, "TotalSeconds", interval.TotalSeconds );
   Console::WriteLine( dataFmt, "Milliseconds", interval.Milliseconds, "TotalMilliseconds", interval.TotalMilliseconds );
   Console::WriteLine( dataFmt, null, null, "Ticks", interval.Ticks );
}

int main()
{
   String^ headerFmt = "\n{0,-45}";
   Console::WriteLine( "This example of the TimeSpan class properties "
   "generates the \nfollowing output. It "
   "creates several TimeSpan objects and \ndisplays "
   "the values of the TimeSpan properties for each." );

   // Create and display a TimeSpan value of 1 tick.
   Console::Write( headerFmt, "TimeSpan( 1 )" );
   ShowTimeSpanProperties( TimeSpan(1) );

   // Create a TimeSpan value with a large number of ticks.
   Console::Write( headerFmt, "TimeSpan( 111222333444555 )" );
   ShowTimeSpanProperties( TimeSpan(111222333444555) );

   // This TimeSpan has all fields specified.
   Console::Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
   ShowTimeSpanProperties( TimeSpan(10,20,30,40,50) );

   // This TimeSpan has all fields overflowing.
   Console::Write( headerFmt, "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
   ShowTimeSpanProperties( TimeSpan(1111,2222,3333,4444,5555) );

   // This TimeSpan is based on a number of days.
   Console::Write( headerFmt, "FromDays( 20.84745602 )" );
   ShowTimeSpanProperties( TimeSpan::FromDays( 20.84745602 ) );
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
TotalMinutes
Ticks
Milliseconds
Seconds
Hours
Days


TimeSpan ..::.Seconds 属性

TimeSpan
.
.
::
.
Seconds 属性
TimeSpan 结构

获取当前 TimeSpan 结构所表示的时间间隔的秒数部分。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Seconds As Integer
    Get
public int Seconds { get; }
public:
property int Seconds {
    int get ();
}
member Seconds : int

属性值

类型： System Int32
当前 TimeSpan 结构的秒分量。返回值的范围为 -59 到 59。 当前 TimeSpan 结构的秒分量。返回值的范围为 -59 到 59。

TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Seconds 属性的值是表示秒的分量 ss。 TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff，其中减号是可选的，它指示负时间间隔，d 分量表示天，hh 表示小时（24 小时制），mm 表示分钟，ss 表示秒，而 ff 为秒的小数部分。Seconds 属性的值是表示秒的分量 ss。

下面的示例创建几个 TimeSpan 对象并显示每个对象的 Seconds 属性。

' Example of the TimeSpan class properties.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanPropertiesDemo

    Const headerFmt As String = vbCrLf & "{0,-45}"
    Const dataFmt As String = "{0,-12}{1,8}       {2,-18}{3,21}"

    ' Display the properties of the TimeSpan parameter.
    Sub ShowTimeSpanProperties( interval as TimeSpan )

        Console.WriteLine( "{0,21}", interval )
        Console.WriteLine( dataFmt, _
            "Days", interval.Days, "TotalDays", interval.TotalDays )
        Console.WriteLine( dataFmt, "Hours", interval.Hours, _
            "TotalHours", interval.TotalHours )
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes, _
            "TotalMinutes", interval.TotalMinutes )
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds, _
            "TotalSeconds", interval.TotalSeconds )
        Console.WriteLine( dataFmt, _
            "Milliseconds", interval.Milliseconds, _
            "TotalMilliseconds", interval.TotalMilliseconds )
        Console.WriteLine( dataFmt, _
            Nothing, Nothing, "Ticks", interval.Ticks )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the TimeSpan class properties " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several TimeSpan objects and " & vbCrLf & _
            "displays the values of the TimeSpan properties for " & _
            "each."  )

        ' Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" )
        ShowTimeSpanProperties( new TimeSpan( 1 ) )

        ' Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" )
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) )

        ' This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" )
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) )

        ' This TimeSpan has all fields overflowing.
        Console.Write( headerFmt, _
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" )
        ShowTimeSpanProperties( _
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) )

        ' This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" )
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) )
    End Sub
End Module

' This example of the TimeSpan class properties generates the
' following output. It creates several TimeSpan objects and
' displays the values of the TimeSpan properties for each.
'
' TimeSpan( 1 )                                     00:00:00.0000001
' Days               0       TotalDays          1.15740740740741E-12
' Hours              0       TotalHours         2.77777777777778E-11
' Minutes            0       TotalMinutes       1.66666666666667E-09
' Seconds            0       TotalSeconds                      1E-07
' Milliseconds       0       TotalMilliseconds                0.0001
'                            Ticks                                 1
'
' TimeSpan( 111222333444555 )                   128.17:30:33.3444555
' Days             128       TotalDays              128.729552597865
' Hours             17       TotalHours             3089.50926234875
' Minutes           30       TotalMinutes           185370.555740925
' Seconds           33       TotalSeconds           11122233.3444555
' Milliseconds     344       TotalMilliseconds      11122233344.4555
'                            Ticks                   111222333444555
'
' TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
' Days              10       TotalDays              10.8546302083333
' Hours             20       TotalHours                   260.511125
' Minutes           30       TotalMinutes                 15630.6675
' Seconds           40       TotalSeconds                  937840.05
' Milliseconds      50       TotalMilliseconds             937840050
'                            Ticks                     9378400500000
'
' TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
' Days            1205       TotalDays              1205.94941614583
' Hours             22       TotalHours                28942.7859875
' Minutes           47       TotalMinutes              1736567.15925
' Seconds            9       TotalSeconds              104194029.555
' Milliseconds     555       TotalMilliseconds          104194029555
'                            Ticks                  1041940295550000
'
' FromDays( 20.84745602 )                        20.20:20:20.2000000
' Days              20       TotalDays              20.8474560185185
' Hours             20       TotalHours             500.338944444444
' Minutes           20       TotalMinutes           30020.3366666667
' Seconds           20       TotalSeconds                  1801220.2
' Milliseconds     200       TotalMilliseconds            1801220200
'                            Ticks                    18012202000000

// Example of the TimeSpan class properties.
using System;

class TimeSpanPropertiesDemo
{
    const string headerFmt = "\n{0,-45}";
    const string dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}" ;

    // Display the properties of the TimeSpan parameter.
    static void ShowTimeSpanProperties( TimeSpan interval )
    {
        Console.WriteLine( "{0,21}", interval );
        Console.WriteLine( dataFmt, "Days", interval.Days,
            "TotalDays", interval.TotalDays );
        Console.WriteLine( dataFmt, "Hours", interval.Hours,
            "TotalHours", interval.TotalHours );
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes,
            "TotalMinutes", interval.TotalMinutes );
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds,
            "TotalSeconds", interval.TotalSeconds );
        Console.WriteLine( dataFmt, "Milliseconds",
            interval.Milliseconds, "TotalMilliseconds",
            interval.TotalMilliseconds );
        Console.WriteLine( dataFmt, null, null,
            "Ticks", interval.Ticks );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan class properties " +
            "generates the \nfollowing output. It " +
            "creates several TimeSpan objects and \ndisplays " +
            "the values of the TimeSpan properties for each." );

        // Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" );
        ShowTimeSpanProperties( new TimeSpan( 1 ) );

        // Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" );
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) );

        // This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) );

        // This TimeSpan has all fields overflowing.
        Console.Write( headerFmt,
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
        ShowTimeSpanProperties(
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) );

        // This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" );
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) );
    }
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

// Example of the TimeSpan class properties.
using namespace System;

// Display the properties of the TimeSpan parameter.
static void ShowTimeSpanProperties( TimeSpan interval )
{
   Object^ null = nullptr;
   String^ dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}";
   Console::WriteLine( "{0,21}", interval );
   Console::WriteLine( dataFmt, "Days", interval.Days, "TotalDays", interval.TotalDays );
   Console::WriteLine( dataFmt, "Hours", interval.Hours, "TotalHours", interval.TotalHours );
   Console::WriteLine( dataFmt, "Minutes", interval.Minutes, "TotalMinutes", interval.TotalMinutes );
   Console::WriteLine( dataFmt, "Seconds", interval.Seconds, "TotalSeconds", interval.TotalSeconds );
   Console::WriteLine( dataFmt, "Milliseconds", interval.Milliseconds, "TotalMilliseconds", interval.TotalMilliseconds );
   Console::WriteLine( dataFmt, null, null, "Ticks", interval.Ticks );
}

int main()
{
   String^ headerFmt = "\n{0,-45}";
   Console::WriteLine( "This example of the TimeSpan class properties "
   "generates the \nfollowing output. It "
   "creates several TimeSpan objects and \ndisplays "
   "the values of the TimeSpan properties for each." );

   // Create and display a TimeSpan value of 1 tick.
   Console::Write( headerFmt, "TimeSpan( 1 )" );
   ShowTimeSpanProperties( TimeSpan(1) );

   // Create a TimeSpan value with a large number of ticks.
   Console::Write( headerFmt, "TimeSpan( 111222333444555 )" );
   ShowTimeSpanProperties( TimeSpan(111222333444555) );

   // This TimeSpan has all fields specified.
   Console::Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
   ShowTimeSpanProperties( TimeSpan(10,20,30,40,50) );

   // This TimeSpan has all fields overflowing.
   Console::Write( headerFmt, "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
   ShowTimeSpanProperties( TimeSpan(1111,2222,3333,4444,5555) );

   // This TimeSpan is based on a number of days.
   Console::Write( headerFmt, "FromDays( 20.84745602 )" );
   ShowTimeSpanProperties( TimeSpan::FromDays( 20.84745602 ) );
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
TotalSeconds
Ticks
Milliseconds
Minutes
Hours
Days


TimeSpan ..::.Ticks 属性

TimeSpan
.
.
::
.
Ticks 属性
TimeSpan 结构

获取表示当前 TimeSpan 结构的值的刻度数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Ticks As Long
    Get
public long Ticks { get; }
public:
property long long Ticks {
    long long get ();
}
member Ticks : int64

属性值

类型： System Int64
此实例包含的刻度数。

时间的最小单位为“刻度”，等于 100 毫微秒。刻度可以是负值或正值。 时间的最小单位为“刻度”，等于 100 毫微秒。刻度可以是负值或正值。

下面的示例创建几个 TimeSpan 对象并显示每个对象的 Ticks 属性。

' Example of the TimeSpan class properties.
Imports System
Imports Microsoft.VisualBasic

Module TimeSpanPropertiesDemo

    Const headerFmt As String = vbCrLf & "{0,-45}"
    Const dataFmt As String = "{0,-12}{1,8}       {2,-18}{3,21}"

    ' Display the properties of the TimeSpan parameter.
    Sub ShowTimeSpanProperties( interval as TimeSpan )

        Console.WriteLine( "{0,21}", interval )
        Console.WriteLine( dataFmt, _
            "Days", interval.Days, "TotalDays", interval.TotalDays )
        Console.WriteLine( dataFmt, "Hours", interval.Hours, _
            "TotalHours", interval.TotalHours )
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes, _
            "TotalMinutes", interval.TotalMinutes )
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds, _
            "TotalSeconds", interval.TotalSeconds )
        Console.WriteLine( dataFmt, _
            "Milliseconds", interval.Milliseconds, _
            "TotalMilliseconds", interval.TotalMilliseconds )
        Console.WriteLine( dataFmt, _
            Nothing, Nothing, "Ticks", interval.Ticks )
    End Sub

    Sub Main( )
        Console.WriteLine( _
            "This example of the TimeSpan class properties " & _
            "generates the " & vbCrLf & "following output. It " & _
            "creates several TimeSpan objects and " & vbCrLf & _
            "displays the values of the TimeSpan properties for " & _
            "each."  )

        ' Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" )
        ShowTimeSpanProperties( new TimeSpan( 1 ) )

        ' Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" )
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) )

        ' This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" )
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) )

        ' This TimeSpan has all fields overflowing.
        Console.Write( headerFmt, _
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" )
        ShowTimeSpanProperties( _
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) )

        ' This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" )
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) )
    End Sub
End Module

' This example of the TimeSpan class properties generates the
' following output. It creates several TimeSpan objects and
' displays the values of the TimeSpan properties for each.
'
' TimeSpan( 1 )                                     00:00:00.0000001
' Days               0       TotalDays          1.15740740740741E-12
' Hours              0       TotalHours         2.77777777777778E-11
' Minutes            0       TotalMinutes       1.66666666666667E-09
' Seconds            0       TotalSeconds                      1E-07
' Milliseconds       0       TotalMilliseconds                0.0001
'                            Ticks                                 1
'
' TimeSpan( 111222333444555 )                   128.17:30:33.3444555
' Days             128       TotalDays              128.729552597865
' Hours             17       TotalHours             3089.50926234875
' Minutes           30       TotalMinutes           185370.555740925
' Seconds           33       TotalSeconds           11122233.3444555
' Milliseconds     344       TotalMilliseconds      11122233344.4555
'                            Ticks                   111222333444555
'
' TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
' Days              10       TotalDays              10.8546302083333
' Hours             20       TotalHours                   260.511125
' Minutes           30       TotalMinutes                 15630.6675
' Seconds           40       TotalSeconds                  937840.05
' Milliseconds      50       TotalMilliseconds             937840050
'                            Ticks                     9378400500000
'
' TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
' Days            1205       TotalDays              1205.94941614583
' Hours             22       TotalHours                28942.7859875
' Minutes           47       TotalMinutes              1736567.15925
' Seconds            9       TotalSeconds              104194029.555
' Milliseconds     555       TotalMilliseconds          104194029555
'                            Ticks                  1041940295550000
'
' FromDays( 20.84745602 )                        20.20:20:20.2000000
' Days              20       TotalDays              20.8474560185185
' Hours             20       TotalHours             500.338944444444
' Minutes           20       TotalMinutes           30020.3366666667
' Seconds           20       TotalSeconds                  1801220.2
' Milliseconds     200       TotalMilliseconds            1801220200
'                            Ticks                    18012202000000

// Example of the TimeSpan class properties.
using System;

class TimeSpanPropertiesDemo
{
    const string headerFmt = "\n{0,-45}";
    const string dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}" ;

    // Display the properties of the TimeSpan parameter.
    static void ShowTimeSpanProperties( TimeSpan interval )
    {
        Console.WriteLine( "{0,21}", interval );
        Console.WriteLine( dataFmt, "Days", interval.Days,
            "TotalDays", interval.TotalDays );
        Console.WriteLine( dataFmt, "Hours", interval.Hours,
            "TotalHours", interval.TotalHours );
        Console.WriteLine( dataFmt, "Minutes", interval.Minutes,
            "TotalMinutes", interval.TotalMinutes );
        Console.WriteLine( dataFmt, "Seconds", interval.Seconds,
            "TotalSeconds", interval.TotalSeconds );
        Console.WriteLine( dataFmt, "Milliseconds",
            interval.Milliseconds, "TotalMilliseconds",
            interval.TotalMilliseconds );
        Console.WriteLine( dataFmt, null, null,
            "Ticks", interval.Ticks );
    }

    static void Main( )
    {
        Console.WriteLine(
            "This example of the TimeSpan class properties " +
            "generates the \nfollowing output. It " +
            "creates several TimeSpan objects and \ndisplays " +
            "the values of the TimeSpan properties for each." );

        // Create and display a TimeSpan value of 1 tick.
        Console.Write( headerFmt, "TimeSpan( 1 )" );
        ShowTimeSpanProperties( new TimeSpan( 1 ) );

        // Create a TimeSpan value with a large number of ticks.
        Console.Write( headerFmt, "TimeSpan( 111222333444555 )" );
        ShowTimeSpanProperties( new TimeSpan( 111222333444555 ) );

        // This TimeSpan has all fields specified.
        Console.Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
        ShowTimeSpanProperties( new TimeSpan( 10, 20, 30, 40, 50 ) );

        // This TimeSpan has all fields overflowing.
        Console.Write( headerFmt,
            "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
        ShowTimeSpanProperties(
            new TimeSpan( 1111, 2222, 3333, 4444, 5555 ) );

        // This TimeSpan is based on a number of days.
        Console.Write( headerFmt, "FromDays( 20.84745602 )" );
        ShowTimeSpanProperties( TimeSpan.FromDays( 20.84745602 ) );
    }
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

// Example of the TimeSpan class properties.
using namespace System;

// Display the properties of the TimeSpan parameter.
static void ShowTimeSpanProperties( TimeSpan interval )
{
   Object^ null = nullptr;
   String^ dataFmt = "{0,-12}{1,8}       {2,-18}{3,21}";
   Console::WriteLine( "{0,21}", interval );
   Console::WriteLine( dataFmt, "Days", interval.Days, "TotalDays", interval.TotalDays );
   Console::WriteLine( dataFmt, "Hours", interval.Hours, "TotalHours", interval.TotalHours );
   Console::WriteLine( dataFmt, "Minutes", interval.Minutes, "TotalMinutes", interval.TotalMinutes );
   Console::WriteLine( dataFmt, "Seconds", interval.Seconds, "TotalSeconds", interval.TotalSeconds );
   Console::WriteLine( dataFmt, "Milliseconds", interval.Milliseconds, "TotalMilliseconds", interval.TotalMilliseconds );
   Console::WriteLine( dataFmt, null, null, "Ticks", interval.Ticks );
}

int main()
{
   String^ headerFmt = "\n{0,-45}";
   Console::WriteLine( "This example of the TimeSpan class properties "
   "generates the \nfollowing output. It "
   "creates several TimeSpan objects and \ndisplays "
   "the values of the TimeSpan properties for each." );

   // Create and display a TimeSpan value of 1 tick.
   Console::Write( headerFmt, "TimeSpan( 1 )" );
   ShowTimeSpanProperties( TimeSpan(1) );

   // Create a TimeSpan value with a large number of ticks.
   Console::Write( headerFmt, "TimeSpan( 111222333444555 )" );
   ShowTimeSpanProperties( TimeSpan(111222333444555) );

   // This TimeSpan has all fields specified.
   Console::Write( headerFmt, "TimeSpan( 10, 20, 30, 40, 50 )" );
   ShowTimeSpanProperties( TimeSpan(10,20,30,40,50) );

   // This TimeSpan has all fields overflowing.
   Console::Write( headerFmt, "TimeSpan( 1111, 2222, 3333, 4444, 5555 )" );
   ShowTimeSpanProperties( TimeSpan(1111,2222,3333,4444,5555) );

   // This TimeSpan is based on a number of days.
   Console::Write( headerFmt, "FromDays( 20.84745602 )" );
   ShowTimeSpanProperties( TimeSpan::FromDays( 20.84745602 ) );
}

/*
This example of the TimeSpan class properties generates the
following output. It creates several TimeSpan objects and
displays the values of the TimeSpan properties for each.

TimeSpan( 1 )                                     00:00:00.0000001
Days               0       TotalDays          1.15740740740741E-12
Hours              0       TotalHours         2.77777777777778E-11
Minutes            0       TotalMinutes       1.66666666666667E-09
Seconds            0       TotalSeconds                      1E-07
Milliseconds       0       TotalMilliseconds                0.0001
                           Ticks                                 1

TimeSpan( 111222333444555 )                   128.17:30:33.3444555
Days             128       TotalDays              128.729552597865
Hours             17       TotalHours             3089.50926234875
Minutes           30       TotalMinutes           185370.555740925
Seconds           33       TotalSeconds           11122233.3444555
Milliseconds     344       TotalMilliseconds      11122233344.4555
                           Ticks                   111222333444555

TimeSpan( 10, 20, 30, 40, 50 )                 10.20:30:40.0500000
Days              10       TotalDays              10.8546302083333
Hours             20       TotalHours                   260.511125
Minutes           30       TotalMinutes                 15630.6675
Seconds           40       TotalSeconds                  937840.05
Milliseconds      50       TotalMilliseconds             937840050
                           Ticks                     9378400500000

TimeSpan( 1111, 2222, 3333, 4444, 5555 )     1205.22:47:09.5550000
Days            1205       TotalDays              1205.94941614583
Hours             22       TotalHours                28942.7859875
Minutes           47       TotalMinutes              1736567.15925
Seconds            9       TotalSeconds              104194029.555
Milliseconds     555       TotalMilliseconds          104194029555
                           Ticks                  1041940295550000

FromDays( 20.84745602 )                        20.20:20:20.2000000
Days              20       TotalDays              20.8474560185185
Hours             20       TotalHours             500.338944444444
Minutes           20       TotalMinutes           30020.3366666667
Seconds           20       TotalSeconds                  1801220.2
Milliseconds     200       TotalMilliseconds            1801220200
                           Ticks                    18012202000000
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Int64
Milliseconds
Seconds
Minutes
Hours
Days


TimeSpan ..::.TotalDays 属性

TimeSpan
.
.
::
.
TotalDays 属性
TimeSpan 结构

获取以整天数和天的小数部分表示的当前 TimeSpan 结构的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TotalDays As Double
    Get
public double TotalDays { get; }
public:
property double TotalDays {
    double get ();
}
member TotalDays : float

属性值

类型： System Double
此实例表示的总天数。

该属性将此实例的值由刻度数转换为天数。该数字可包含整天数和天的小数部分。 该属性将此实例的值由刻度数转换为天数。该数字可包含整天数和天的小数部分。

下面的示例举例说明了 TimeSpan 对象，并显示其 TotalDays 属性的值。它还显示构成 TotalDays 属性值的小数部分的每个组件（小时、分钟、秒和毫秒）的值。 下面的示例举例说明了 TimeSpan 对象，并显示其 TotalDays 属性的值。它还显示构成 TotalDays 属性值的小数部分的每个组件（小时、分钟、秒和毫秒）的值。

Module Example
   Public Sub Main()
      ' Define an interval of 3 days, 16+ hours.
      Dim interval As New TimeSpan(3, 16, 42, 45, 750)
      Console.WriteLine("Value of TimeSpan: {0}", interval)

      Console.WriteLine("{0:N5} days, as follows:", interval.TotalDays)
      Console.WriteLine("   Days:         {0,3}", interval.Days)
      Console.WriteLine("   Hours:        {0,3}", interval.Hours)
      Console.WriteLine("   Minutes:      {0,3}", interval.Minutes)
      Console.WriteLine("   Seconds:      {0,3}", interval.Seconds)
      Console.WriteLine("   Milliseconds: {0,3}", interval.Milliseconds)
   End Sub
End Module
' The example displays the following output:
'       Value of TimeSpan: 3.16:42:45.7500000
'       3.69636 days, as follows:
'          Days:           3
'          Hours:         16
'          Minutes:       42
'          Seconds:       45
'          Milliseconds: 750

using System;

public class Example
{
   public static void Main()
   {
      // Define an interval of 3 days, 16+ hours.
      TimeSpan interval = new TimeSpan(3, 16, 42, 45, 750);
      Console.WriteLine("Value of TimeSpan: {0}", interval);

      Console.WriteLine("{0:N5} days, as follows:", interval.TotalDays);
      Console.WriteLine("   Days:         {0,3}", interval.Days);
      Console.WriteLine("   Hours:        {0,3}", interval.Hours);
      Console.WriteLine("   Minutes:      {0,3}", interval.Minutes);
      Console.WriteLine("   Seconds:      {0,3}", interval.Seconds);
      Console.WriteLine("   Milliseconds: {0,3}", interval.Milliseconds);
   }
}
// The example displays the following output:
//       Value of TimeSpan: 3.16:42:45.7500000
//       3.69636 days, as follows:
//          Days:           3
//          Hours:         16
//          Minutes:       42
//          Seconds:       45
//          Milliseconds: 750

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Days
TotalMilliseconds
TotalSeconds
TotalMinutes
TotalHours


TimeSpan ..::.TotalHours 属性

TimeSpan
.
.
::
.
TotalHours 属性
TimeSpan 结构

获取以整小时数和小时的小数部分表示的当前 TimeSpan 结构的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TotalHours As Double
    Get
public double TotalHours { get; }
public:
property double TotalHours {
    double get ();
}
member TotalHours : float

属性值

类型： System Double
此实例表示的总小时数。

该属性将此实例的值由刻度数转换为小时数。该数字包含整小时数和小时的小数部分。 该属性将此实例的值由刻度数转换为小时数。该数字包含整小时数和小时的小数部分。

下面的示例举例说明了 TimeSpan 对象，并显示其 TotalHours 属性的值。它还显示构成 TotalHours 属性值的小数部分的每个组件（小时、分钟、秒和毫秒）的值。 下面的示例举例说明了 TimeSpan 对象，并显示其 TotalHours 属性的值。它还显示构成 TotalHours 属性值的小数部分的每个组件（小时、分钟、秒和毫秒）的值。

Module Example
   Public Sub Main()
      ' Define an interval of 1 day, 15+ hours.
      Dim interval As New TimeSpan(1, 15, 42, 45, 750)
      Console.WriteLine("Value of TimeSpan: {0}", interval)

      Console.WriteLine("{0:N5} hours, as follows:", interval.TotalHours)
      Console.WriteLine("   Hours:        {0,3}", _
                        interval.Days * 24 + interval.Hours)
      Console.WriteLine("   Minutes:      {0,3}", interval.Minutes)
      Console.WriteLine("   Seconds:      {0,3}", interval.Seconds)
      Console.WriteLine("   Milliseconds: {0,3}", interval.Milliseconds)
   End Sub
End Module
' The example displays the following output:
'       Value of TimeSpan: 1.15:42:45.7500000
'       39.71271 hours, as follows:
'          Hours:         39
'          Minutes:       42
'          Seconds:       45
'          Milliseconds: 750

using System;

public class Example
{
   public static void Main()
   {
      // Define an interval of 1 day, 15+ hours.
      TimeSpan interval = new TimeSpan(1, 15, 42, 45, 750);
      Console.WriteLine("Value of TimeSpan: {0}", interval);

      Console.WriteLine("{0:N5} hours, as follows:", interval.TotalHours);
      Console.WriteLine("   Hours:        {0,3}",
                        interval.Days * 24 + interval.Hours);
      Console.WriteLine("   Minutes:      {0,3}", interval.Minutes);
      Console.WriteLine("   Seconds:      {0,3}", interval.Seconds);
      Console.WriteLine("   Milliseconds: {0,3}", interval.Milliseconds);
   }
}
// The example displays the following output:
//       Value of TimeSpan: 1.15:42:45.7500000
//       39.71271 hours, as follows:
//          Hours:         39
//          Minutes:       42
//          Seconds:       45
//          Milliseconds: 750

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Hours
TotalMilliseconds
TotalSeconds
TotalMinutes
TotalDays


TimeSpan ..::.TotalMilliseconds 属性

TimeSpan
.
.
::
.
TotalMilliseconds 属性
TimeSpan 结构

获取以整毫秒数和毫秒的小数部分表示的当前 TimeSpan 结构的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TotalMilliseconds As Double
    Get
public double TotalMilliseconds { get; }
public:
property double TotalMilliseconds {
    double get ();
}
member TotalMilliseconds : float

属性值

类型： System Double
此实例表示的总毫秒数。

该属性将此实例的值由刻度数转换为毫秒数。该数字可包含整毫秒数和毫秒的小数部分。 该属性将此实例的值由刻度数转换为毫秒数。该数字可包含整毫秒数和毫秒的小数部分。

下面的示例举例说明了 TimeSpan 对象，并显示其 TotalMilliseconds 属性的值。

Option Strict On

Module Example
   Public Sub Main()
      ' Define an interval of 1 day, 15+ hours.
      Dim interval As New TimeSpan(1, 15, 42, 45, 750)
      Console.WriteLine("Value of TimeSpan: {0}", interval)

      Console.WriteLine("There are {0:N5} milliseconds, as follows:", interval.TotalMilliseconds)
      Dim nMilliseconds As Long = interval.Days * 24 * 60 * 60 * 1000 + _
                                     interval.Hours *60 * 60 * 1000 + _
                                     interval.Minutes * 60 * 1000 + _
                                     interval.Seconds * 1000 + _
                                     interval.Milliseconds
      Console.WriteLine("   Millieconds:      {0,18:N0}", nMilliseconds)
      Console.WriteLine("   Ticks:            {0,18:N0}", nMilliseconds * 10000 - interval.Ticks)
   End Sub
End Module
' The example displays the following output:
'       Value of TimeSpan: 1.15:42:45.7500000
'       There are 142,965,750.00000 milliseconds, as follows:
'          Millieconds:             142,965,750
'          Ticks:                             0

using System;

public class Example
{
   public static void Main()
   {
      // Define an interval of 1 day, 15+ hours.
      TimeSpan interval = new TimeSpan(1, 15, 42, 45, 750);
      Console.WriteLine("Value of TimeSpan: {0}", interval);

      Console.WriteLine("There are {0:N5} milliseconds, as follows:", interval.TotalMilliseconds);
      long nMilliseconds = interval.Days * 24 * 60 * 60 * 1000 +
                           interval.Hours *60 * 60 * 1000 +
                           interval.Minutes * 60 * 1000 +
                           interval.Seconds * 1000 +
                           interval.Milliseconds;
      Console.WriteLine("   Millieconds:      {0,18:N0}", nMilliseconds);
      Console.WriteLine("   Ticks:            {0,18:N0}",
                        nMilliseconds * 10000 - interval.Ticks);
   }
}
// The example displays the following output:
//       Value of TimeSpan: 1.15:42:45.7500000
//       There are 142,965,750.00000 milliseconds, as follows:
//          Millieconds:             142,965,750
//          Ticks:                             0

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Milliseconds
TotalSeconds
TotalMinutes
TotalHours
TotalDays


TimeSpan ..::.TotalMinutes 属性

TimeSpan
.
.
::
.
TotalMinutes 属性
TimeSpan 结构

获取以整分钟数和分钟的小数部分表示的当前 TimeSpan 结构的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TotalMinutes As Double
    Get
public double TotalMinutes { get; }
public:
property double TotalMinutes {
    double get ();
}
member TotalMinutes : float

属性值

类型： System Double
此实例表示的总分钟数。

该属性将此实例的值由刻度数转换为分钟数。该数字可包含整分钟数和分钟的小数部分。 该属性将此实例的值由刻度数转换为分钟数。该数字可包含整分钟数和分钟的小数部分。

下面的示例举例说明了 TimeSpan 对象，并显示其 TotalMinutes 属性的值。它还显示构成 TotalMinutes 属性值的小数部分的每个组件（秒、毫秒）的值。 下面的示例举例说明了 TimeSpan 对象，并显示其 TotalMinutes 属性的值。它还显示构成 TotalMinutes 属性值的小数部分的每个组件（秒、毫秒）的值。

Module Example
   Public Sub Main()
      ' Define an interval of 1 day, 15+ hours.
      Dim interval As New TimeSpan(1, 15, 42, 45, 750)
      Console.WriteLine("Value of TimeSpan: {0}", interval)

      Console.WriteLine("{0:N5} minutes, as follows:", interval.TotalMinutes)
      Console.WriteLine("   Minutes:      {0,5}", interval.Days * 24 * 60 + _
                                                  interval.Hours * 60 + _
                                                  interval.Minutes)
      Console.WriteLine("   Seconds:      {0,5}", interval.Seconds)
      Console.WriteLine("   Milliseconds: {0,5}", interval.Milliseconds)
   End Sub
End Module
' The example displays the following output:
'       Value of TimeSpan: 1.15:42:45.7500000
'       2,382.76250 minutes, as follows:
'          Minutes:       2382
'          Seconds:         45
'          Milliseconds:   750

using System;

public class Example
{
   public static void Main()
   {
      // Define an interval of 1 day, 15+ hours.
      TimeSpan interval = new TimeSpan(1, 15, 42, 45, 750);
      Console.WriteLine("Value of TimeSpan: {0}", interval);

      Console.WriteLine("{0:N5} minutes, as follows:", interval.TotalMinutes);
      Console.WriteLine("   Minutes:      {0,5}", interval.Days * 24 * 60 +
                                                  interval.Hours * 60 +
                                                  interval.Minutes);
      Console.WriteLine("   Seconds:      {0,5}", interval.Seconds);
      Console.WriteLine("   Milliseconds: {0,5}", interval.Milliseconds);
   }
}
// The example displays the following output:
//       Value of TimeSpan: 1.15:42:45.7500000
//       2,382.76250 minutes, as follows:
//          Minutes:       2382
//          Seconds:         45
//          Milliseconds:   750

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Minutes
TotalMilliseconds
TotalSeconds
TotalHours
TotalDays


TimeSpan ..::.TotalSeconds 属性

TimeSpan
.
.
::
.
TotalSeconds 属性
TimeSpan 结构

获取以整秒数和秒的小数部分表示的当前 TimeSpan 结构的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TotalSeconds As Double
    Get
public double TotalSeconds { get; }
public:
property double TotalSeconds {
    double get ();
}
member TotalSeconds : float

属性值

类型： System Double
此实例表示的总秒数。

该属性将此实例的值由刻度数转换为秒数。该数字可包含整秒数和秒的小数部分。 该属性将此实例的值由刻度数转换为秒数。该数字可包含整秒数和秒的小数部分。

下面的示例举例说明了 TimeSpan 对象，并显示其 TotalSeconds 属性的值。它还显示构成 TotalSeconds 属性值的小数部分的毫秒组件的值。 下面的示例举例说明了 TimeSpan 对象，并显示其 TotalSeconds 属性的值。它还显示构成 TotalSeconds 属性值的小数部分的毫秒组件的值。

Module Example
   Public Sub Main()
      ' Define an interval of 1 day, 15+ hours.
      Dim interval As New TimeSpan(1, 15, 42, 45, 750)
      Console.WriteLine("Value of TimeSpan: {0}", interval)

      Console.WriteLine("{0:N5} seconds, as follows:", interval.TotalSeconds)
      Console.WriteLine("   Seconds:      {0,8:N0}", interval.Days * 24 * 60 * 60 + _
                                                  interval.Hours *60 * 60 + _
                                                  interval.Minutes * 60 + _
                                                  interval.Seconds)
      Console.WriteLine("   Milliseconds: {0,8}", interval.Milliseconds)
   End Sub
End Module
' The example displays the following output:
'       Value of TimeSpan: 1.15:42:45.7500000
'       142,965.75000 seconds, as follows:
'          Seconds:       142,965
'          Milliseconds:      750

using System;

public class Example
{
   public static void Main()
   {
      // Define an interval of 1 day, 15+ hours.
      TimeSpan interval = new TimeSpan(1, 15, 42, 45, 750);
      Console.WriteLine("Value of TimeSpan: {0}", interval);

      Console.WriteLine("{0:N5} seconds, as follows:", interval.TotalSeconds);
      Console.WriteLine("   Seconds:      {0,8:N0}", interval.Days * 24 * 60 * 60 +
                                                  interval.Hours *60 * 60 +
                                                  interval.Minutes * 60 +
                                                  interval.Seconds);
      Console.WriteLine("   Milliseconds: {0,8}", interval.Milliseconds);
   }
}
// The example displays the following output:
//       Value of TimeSpan: 1.15:42:45.7500000
//       142,965.75000 seconds, as follows:
//          Seconds:       142,965
//          Milliseconds:      750

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeSpan 结构
TimeSpan 成员
System 命名空间
Seconds
TotalMilliseconds
TotalMinutes
TotalHours
TotalDays


TimeZone 类

TimeZone 类
成员

表示时区。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class TimeZone
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class TimeZone
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class TimeZone abstract
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type TimeZone =  class end

时区是使用同一标准时间的地理区域。

重要说明 重要事项

应尽可能使用 TimeZoneInfo 类替代 TimeZone 类。

可以使用 TimeZone 类来检索有关当前时区的信息，并将时间从本地时间转换为协调世界时 (UTC)，反之亦然。但不可使用 TimeZone 类来表示本地时区以外的时区，或者将日期和时间从一个时区转换到另一个时区。要进行检索，请使用 TimeZoneInfo 类。可以使用此类来检索在本地系统上定义的任何时区的信息、创建自定义时区以及将时间从一个时区转换到另一个时区。 可以使用 TimeZone 类来检索有关当前时区的信息，并将时间从本地时间转换为协调世界时 (UTC)，反之亦然。但不可使用 TimeZone 类来表示本地时区以外的时区，或者将日期和时间从一个时区转换到另一个时区。要进行检索，请使用 TimeZoneInfo 类。可以使用此类来检索在本地系统上定义的任何时区的信息、创建自定义时区以及将时间从一个时区转换到另一个时区。 可以使用 TimeZone 类来检索有关当前时区的信息，并将时间从本地时间转换为协调世界时 (UTC)，反之亦然。但不可使用 TimeZone 类来表示本地时区以外的时区，或者将日期和时间从一个时区转换到另一个时区。要进行检索，请使用 TimeZoneInfo 类。可以使用此类来检索在本地系统上定义的任何时区的信息、创建自定义时区以及将时间从一个时区转换到另一个时区。 可以使用 TimeZone 类来检索有关当前时区的信息，并将时间从本地时间转换为协调世界时 (UTC)，反之亦然。但不可使用 TimeZone 类来表示本地时区以外的时区，或者将日期和时间从一个时区转换到另一个时区。要进行检索，请使用 TimeZoneInfo 类。可以使用此类来检索在本地系统上定义的任何时区的信息、创建自定义时区以及将时间从一个时区转换到另一个时区。

TimeZone 类只支持本地时区的单个夏时制调整规则。因此，TimeZone 类只有在最新调整规则有效期间才能准确报告夏时制信息，或者在 UTC 和本地时间之间进行转换。相反，TimeZoneInfo 类支持多个调整规则，因而可以处理历史时区数据。 TimeZone 类只支持本地时区的单个夏时制调整规则。因此，TimeZone 类只有在最新调整规则有效期间才能准确报告夏时制信息，或者在 UTC 和本地时间之间进行转换。相反，TimeZoneInfo 类支持多个调整规则，因而可以处理历史时区数据。 TimeZone 类只支持本地时区的单个夏时制调整规则。因此，TimeZone 类只有在最新调整规则有效期间才能准确报告夏时制信息，或者在 UTC 和本地时间之间进行转换。相反，TimeZoneInfo 类支持多个调整规则，因而可以处理历史时区数据。

对继承者的说明

除了为其 abstract 成员（这些成员在 Visual Basic 中标记为 MustOverride）提供实现外，重要的是从 TimeZone 派生的类会重写 ToLocalTime 方法的默认行为。这是因为在 .NET Framework 2.0 版中，ToLocalTime 的默认行为不依赖于对 GetUtcOffset 的调用，而在 .NET Framework 1.0 和 1.1 版中则依赖于该调用。有关详细信息，请参见 ToLocalTime 方法。 除了为其 abstract 成员（这些成员在 Visual Basic 中标记为 MustOverride）提供实现外，重要的是从 TimeZone 派生的类会重写 ToLocalTime 方法的默认行为。这是因为在 .NET Framework 2.0 版中，ToLocalTime 的默认行为不依赖于对 GetUtcOffset 的调用，而在 .NET Framework 1.0 和 1.1 版中则依赖于该调用。有关详细信息，请参见 ToLocalTime 方法。 除了为其 abstract 成员（这些成员在 Visual Basic 中标记为 MustOverride）提供实现外，重要的是从 TimeZone 派生的类会重写 ToLocalTime 方法的默认行为。这是因为在 .NET Framework 2.0 版中，ToLocalTime 的默认行为不依赖于对 GetUtcOffset 的调用，而在 .NET Framework 1.0 和 1.1 版中则依赖于该调用。有关详细信息，请参见 ToLocalTime 方法。

下面的示例引用并显示选定的 TimeZone 类元素。

' Example of selected TimeZone class elements.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module TimeZoneDemo

    Sub Main( )

        Const dataFmt As String = "{0,-30}{1}"
        Const timeFmt As String = "{0,-30}{1:yyyy-MM-dd HH:mm}"

        Console.WriteLine( "This example of selected " & _
            "TimeZone class elements generates the following " & _
            vbCrLf & "output, which varies depending on the " & _
            "time zone in which it is run." & vbCrLf )

        ' Get the local time zone and the current local time and year.
        Dim localZone As TimeZone = TimeZone.CurrentTimeZone
        Dim currentDate As DateTime = DateTime.Now
        Dim currentYear As Integer = currentDate.Year

        ' Display the names for standard time and daylight saving
        ' time for the local time zone.
        Console.WriteLine( dataFmt, "Standard time name:", _
            localZone.StandardName )
        Console.WriteLine( dataFmt, "Daylight saving time name:", _
            localZone.DaylightName )

        ' Display the current date and time and show if they occur
        ' in daylight saving time.
        Console.WriteLine( vbCrLf & timeFmt, _
            "Current date and time:", currentDate )
        Console.WriteLine( dataFmt, "Daylight saving time?", _
            localZone.IsDaylightSavingTime( currentDate ) )

        ' Get the current Coordinated Universal Time (UTC) and UTC
        ' offset.
        Dim currentUTC As DateTime = _
            localZone.ToUniversalTime( currentDate )
        Dim currentOffset As TimeSpan = _
            localZone.GetUtcOffset( currentDate )

        Console.WriteLine( timeFmt, "Coordinated Universal Time:", _
            currentUTC )
        Console.WriteLine( dataFmt, "UTC offset:", currentOffset )

        ' Get the DaylightTime object for the current year.
        Dim daylight As DaylightTime = _
            localZone.GetDaylightChanges( currentYear )

        ' Display the daylight saving time range for the current year.
        Console.WriteLine( vbCrLf & _
            "Daylight saving time for year {0}:", currentYear )
        Console.WriteLine( "{0:yyyy-MM-dd HH:mm} to " & _
            "{1:yyyy-MM-dd HH:mm}, delta: {2}", _
            daylight.Start, daylight.End, daylight.Delta )
    End Sub
End Module

'This example of selected TimeZone class elements generates the following
'output, which varies depending on the time zone in which it is run.
'
'Standard time name:           Pacific Standard Time
'Daylight saving time name:    Pacific Daylight Time
'
'Current date and time:        2006-01-06 16:47
'Daylight saving time?         False
'Coordinated Universal Time:   2006-01-07 00:47
'UTC offset:                   -08:00:00
'
'Daylight saving time for year 2006:
'2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00

// Example of selected TimeZone class elements.
using System;
using System.Globalization;

class TimeZoneDemo
{
    static void Main( )
    {
        const string dataFmt = "{0,-30}{1}";
        const string timeFmt = "{0,-30}{1:yyyy-MM-dd HH:mm}";

        Console.WriteLine(
            "This example of selected TimeZone class " +
            "elements generates the following \n" +
            "output, which varies depending on the " +
            "time zone in which it is run.\n" );

        // Get the local time zone and the current local time and year.
        TimeZone localZone = TimeZone.CurrentTimeZone;
        DateTime currentDate = DateTime.Now;
        int      currentYear = currentDate.Year;

        // Display the names for standard time and daylight saving
        // time for the local time zone.
        Console.WriteLine( dataFmt, "Standard time name:",
            localZone.StandardName );
        Console.WriteLine( dataFmt, "Daylight saving time name:",
            localZone.DaylightName );

        // Display the current date and time and show if they occur
        // in daylight saving time.
        Console.WriteLine( "\n" + timeFmt, "Current date and time:",
            currentDate );
        Console.WriteLine( dataFmt, "Daylight saving time?",
            localZone.IsDaylightSavingTime( currentDate ) );

        // Get the current Coordinated Universal Time (UTC) and UTC
        // offset.
        DateTime currentUTC =
            localZone.ToUniversalTime( currentDate );
        TimeSpan currentOffset =
            localZone.GetUtcOffset( currentDate );

        Console.WriteLine( timeFmt, "Coordinated Universal Time:",
            currentUTC );
        Console.WriteLine( dataFmt, "UTC offset:", currentOffset );

        // Get the DaylightTime object for the current year.
        DaylightTime daylight =
            localZone.GetDaylightChanges( currentYear );

        // Display the daylight saving time range for the current year.
        Console.WriteLine(
            "\nDaylight saving time for year {0}:", currentYear );
        Console.WriteLine( "{0:yyyy-MM-dd HH:mm} to " +
            "{1:yyyy-MM-dd HH:mm}, delta: {2}",
            daylight.Start, daylight.End, daylight.Delta );
    }
}

/*
This example of selected TimeZone class elements generates the following
output, which varies depending on the time zone in which it is run.

Standard time name:           Pacific Standard Time
Daylight saving time name:    Pacific Daylight Time

Current date and time:        2006-01-06 16:47
Daylight saving time?         False
Coordinated Universal Time:   2006-01-07 00:47
UTC offset:                   -08:00:00

Daylight saving time for year 2006:
2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00
*/

// Example of selected TimeZone class elements.
using namespace System;
using namespace System::Globalization;
int main()
{
   String^ dataFmt = "{0,-30}{1}";
   String^ timeFmt = "{0,-30}{1:yyyy-MM-dd HH:mm}";
   Console::WriteLine( "This example of selected TimeZone class "
   "elements generates the following \n"
   "output, which varies depending on the "
   "time zone in which it is run.\n" );

   // Get the local time zone and the current local time and year.
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   DateTime currentDate = DateTime::Now;
   int currentYear = currentDate.Year;

   // Display the names for standard time and daylight saving
   // time for the local time zone.
   Console::WriteLine( dataFmt, "Standard time name:", localZone->StandardName );
   Console::WriteLine( dataFmt, "Daylight saving time name:", localZone->DaylightName );

   // Display the current date and time and show if they occur
   // in daylight saving time.
   Console::WriteLine( String::Concat( "\n", timeFmt ), "Current date and time:", currentDate );
   Console::WriteLine( dataFmt, "Daylight saving time?", localZone->IsDaylightSavingTime( currentDate ) );

   // Get the current Coordinated Universal Time (UTC) and UTC
   // offset.
   DateTime currentUTC = localZone->ToUniversalTime( currentDate );
   TimeSpan currentOffset = localZone->GetUtcOffset( currentDate );
   Console::WriteLine( timeFmt, "Coordinated Universal Time:", currentUTC );
   Console::WriteLine( dataFmt, "UTC offset:", currentOffset );

   // Get the DaylightTime object for the current year.
   DaylightTime^ daylight = localZone->GetDaylightChanges( currentYear );

   // Display the daylight saving time range for the current year.
   Console::WriteLine( "\nDaylight saving time for year {0}:", currentYear );
   Console::WriteLine( "{0:yyyy-MM-dd HH:mm} to "
   "{1:yyyy-MM-dd HH:mm}, delta: {2}", daylight->Start, daylight->End, daylight->Delta );
}

/*
This example of selected TimeZone class elements generates the following
output, which varies depending on the time zone in which it is run.

Standard time name:           Pacific Standard Time
Daylight saving time name:    Pacific Daylight Time

Current date and time:        2006-01-06 16:47
Daylight saving time?         False
Coordinated Universal Time:   2006-01-07 00:47
UTC offset:                   -08:00:00

Daylight saving time for year 2006:
2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00
*/

System System..::.TimeZoneTimeZone
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 成员
System 命名空间
DateTime
DateTimeOffset
TimeZoneInfo


TimeZone 成员

TimeZone 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZone 类

表示时区。

TimeZone 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TimeZone 类
System 命名空间


TimeZone 构造函数

TimeZone 构造函数
TimeZone 类

初始化 TimeZone 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected TimeZone()
protected:
TimeZone()
new : unit -> TimeZone

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
System 命名空间


TimeZone 方法

TimeZone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZone 类

TimeZone 类型公开以下成员。

名称 说明
页首

参考

TimeZone 类
System 命名空间


TimeZone ..::.GetDaylightChanges 方法

TimeZone
.
.
::
.
GetDaylightChanges 方法
TimeZone 类

返回特定年份的夏时制期间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetDaylightChanges ( _
    year As Integer _
) As DaylightTime
public abstract DaylightTime GetDaylightChanges(
    int year
)
public:
virtual DaylightTime^ GetDaylightChanges(
    int year
) abstract
abstract GetDaylightChanges :
        year:int -> DaylightTime

参数

year
类型： System Int32
要应用夏时制期间的年份。

返回值

类型： System.Globalization DaylightTime
一个 System.Globalization..::.DaylightTime 对象，包含 year 中夏时制的起始和结束日期。
异常 | 条件
ArgumentOutOfRangeException | year 小于 1 或大于 9999。

每年只支持一个夏时制期间。

由于 TimeZone 类只支持一个夏时制调整规则，因此 GetDaylightChanges 方法会将当前的调整规则应用到任何年份，而无论调整规则是否实际应用于该年份。假定操作系统本身具有特定年份的准确数据，则通过处理由 TimeZoneInfo..::.GetAdjustmentRules 方法返回的 TimeZoneInfo..::.AdjustmentRule 对象的数组可以获得更准确的结果。 由于 TimeZone 类只支持一个夏时制调整规则，因此 GetDaylightChanges 方法会将当前的调整规则应用到任何年份，而无论调整规则是否实际应用于该年份。假定操作系统本身具有特定年份的准确数据，则通过处理由 TimeZoneInfo..::.GetAdjustmentRules 方法返回的 TimeZoneInfo..::.AdjustmentRule 对象的数组可以获得更准确的结果。

如果在当前时区中不使用夏时制，则返回值为 DaylightTime 对象，其中 Start 和 End 的值为 DateTime..::.MinValue，而 DaylightTime..::.Delta 的值为初始化为 0 个时钟周期的 TimeSpan。

下面的示例使用 GetDaylightChanges 方法，返回所选年份的夏时制长度和偏移量。

' Example of the TimeZone.GetDaylightChanges( Integer ) method.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module DaylightChangesDemo

    ' Get the local time zone and a base local time.
    Dim localZone As TimeZone = TimeZone.CurrentTimeZone

    Sub CreateDaylightTime( year As Integer )

        ' Create a DaylightTime object for the specified year.
        Dim daylight As DaylightTime = _
            localZone.GetDaylightChanges( year )

        ' Display the start and end dates and the time change.
        Console.WriteLine( "{0,-7}{1,-20:yyyy-MM-dd HH:mm}" & _
            "{2,-20:yyyy-MM-dd HH:mm}{3}", _
            year, daylight.Start, daylight.End, daylight.Delta )
    End Sub

    Sub Main( )

        Const headFmt As String = "{0,-7}{1,-20}{2,-20}{3}"

        Console.WriteLine( _
            "This example of TimeZone.GetDaylightChanges( " & _
            "Integer ) generates the " & vbCrLf & "following " & _
            "output, which varies depending on the time zone " & _
            "in which " & vbCrLf & "it is run. The example " & _
            "creates DaylightTime objects for specified " & _
            vbCrLf & "years and displays the start and end dates " & _
            "and time change for " & vbCrLf &  "daylight " & _
            "saving time." & vbCrLf )

        ' Write a message explaining that start dates prior to 1986
        ' in the en-US culture may not be correct.
        If CultureInfo.CurrentCulture.Name = "en-US" Then

            Console.WriteLine( _
                "Note: In the [en-US] culture, all start dates " & _
                "are calculated from " & vbCrLf & "the first " & _
                "Sunday in April, based on a standard set in " & _
                "1986. For " & vbCrLf & "dates prior to 1986, " & _
                "the calculated start date may not be accurate." )
        End If

        Console.WriteLine( vbCrLf & "Local time: {0}" & vbCrLf, _
            localZone.StandardName )

        Console.WriteLine( headFmt, "Year", "Start", "End", "Change" )
        Console.WriteLine( headFmt, "----", "-----", "---", "------" )

        CreateDaylightTime( 1960 )
        CreateDaylightTime( 1970 )
        CreateDaylightTime( 1980 )
        CreateDaylightTime( 1990 )
        CreateDaylightTime( 2000 )
        CreateDaylightTime( 2001 )
        CreateDaylightTime( 2002 )
        CreateDaylightTime( 2003 )
        CreateDaylightTime( 2004 )
        CreateDaylightTime( 2005 )
        CreateDaylightTime( 2020 )
        CreateDaylightTime( 2040 )
    End Sub
End Module

' This example of TimeZone.GetDaylightChanges( Integer ) generates the
' following output, which varies depending on the time zone in which
' it is run. The example creates DaylightTime objects for specified
' years and displays the start and end dates and time change for
' daylight saving time.
'
' Note: In the [en-US] culture, all start dates are calculated from
' the first Sunday in April, based on a standard set in 1986. For
' dates prior to 1986, the calculated start date may not be accurate.
'
' Local time: Pacific Standard Time
'
' Year   Start               End                 Change
' ----   -----               ---                 ------
' 1960   1960-04-03 02:00    1960-10-30 02:00    01:00:00
' 1970   1970-04-05 02:00    1970-10-25 02:00    01:00:00
' 1980   1980-04-06 02:00    1980-10-26 02:00    01:00:00
' 1990   1990-04-01 02:00    1990-10-28 02:00    01:00:00
' 2000   2000-04-02 02:00    2000-10-29 02:00    01:00:00
' 2001   2001-04-01 02:00    2001-10-28 02:00    01:00:00
' 2002   2002-04-07 02:00    2002-10-27 02:00    01:00:00
' 2003   2003-04-06 02:00    2003-10-26 02:00    01:00:00
' 2004   2004-04-04 02:00    2004-10-31 02:00    01:00:00
' 2005   2005-04-03 02:00    2005-10-30 02:00    01:00:00
' 2020   2020-04-05 02:00    2020-10-25 02:00    01:00:00
' 2040   2040-04-01 02:00    2040-10-28 02:00    01:00:00

// Example of the TimeZone.GetDaylightChanges( int ) method.
using System;
using System.Globalization;

class DaylightChangesDemo
{
    // Get the local time zone and a base local time.
    static TimeZone localZone = TimeZone.CurrentTimeZone;

    static void CreateDaylightTime( int year )
    {
        // Create a DaylightTime object for the specified year.
        DaylightTime daylight =
            localZone.GetDaylightChanges( year );

        // Display the start and end dates and the time change.
        Console.WriteLine( "{0,-7}{1,-20:yyyy-MM-dd HH:mm}" +
            "{2,-20:yyyy-MM-dd HH:mm}{3}",
            year, daylight.Start, daylight.End, daylight.Delta );
    }

    static void Main( )
    {
        const string headFmt = "{0,-7}{1,-20}{2,-20}{3}";

        Console.WriteLine(
            "This example of TimeZone.GetDaylightChanges( int ) " +
            "generates the \nfollowing output, which varies " +
            "depending on the time zone in which \nit is run. The " +
            "example creates DaylightTime objects for specified \n" +
            "years and displays the start and end dates and time " +
            "change for \ndaylight saving time.\n" );

        // Write a message explaining that start dates prior to 1986
        // in the en-US culture may not be correct.
        if( CultureInfo.CurrentCulture.Name == "en-US" )
        {
            Console.WriteLine(
                "Note: In the [en-US] culture, all start dates are " +
                "calculated from \nthe first Sunday in April, " +
                "based on a standard set in 1986. For \ndates " +
                "prior to 1986, the calculated start date may not " +
                "be accurate." );
        }

        Console.WriteLine( "\nLocal time: {0}\n",
            localZone.StandardName );

        Console.WriteLine( headFmt, "Year", "Start", "End", "Change" );
        Console.WriteLine( headFmt, "----", "-----", "---", "------" );

        CreateDaylightTime( 1960 );
        CreateDaylightTime( 1970 );
        CreateDaylightTime( 1980 );
        CreateDaylightTime( 1990 );
        CreateDaylightTime( 2000 );
        CreateDaylightTime( 2001 );
        CreateDaylightTime( 2002 );
        CreateDaylightTime( 2003 );
        CreateDaylightTime( 2004 );
        CreateDaylightTime( 2005 );
        CreateDaylightTime( 2020 );
        CreateDaylightTime( 2040 );
    }
}

/*
This example of TimeZone.GetDaylightChanges( int ) generates the
following output, which varies depending on the time zone in which
it is run. The example creates DaylightTime objects for specified
years and displays the start and end dates and time change for
daylight saving time.

Note: In the [en-US] culture, all start dates are calculated from
the first Sunday in April, based on a standard set in 1986. For
dates prior to 1986, the calculated start date may not be accurate.

Local time: Pacific Standard Time

Year   Start               End                 Change
----   -----               ---                 ------
1960   1960-04-03 02:00    1960-10-30 02:00    01:00:00
1970   1970-04-05 02:00    1970-10-25 02:00    01:00:00
1980   1980-04-06 02:00    1980-10-26 02:00    01:00:00
1990   1990-04-01 02:00    1990-10-28 02:00    01:00:00
2000   2000-04-02 02:00    2000-10-29 02:00    01:00:00
2001   2001-04-01 02:00    2001-10-28 02:00    01:00:00
2002   2002-04-07 02:00    2002-10-27 02:00    01:00:00
2003   2003-04-06 02:00    2003-10-26 02:00    01:00:00
2004   2004-04-04 02:00    2004-10-31 02:00    01:00:00
2005   2005-04-03 02:00    2005-10-30 02:00    01:00:00
2020   2020-04-05 02:00    2020-10-25 02:00    01:00:00
2040   2040-04-01 02:00    2040-10-28 02:00    01:00:00
*/

// Example of the TimeZone::GetDaylightChanges( int ) method.
using namespace System;
using namespace System::Globalization;
void CreateDaylightTime( int year, TimeZone^ localZone )
{

   // Create a DaylightTime object for the specified year.
   DaylightTime^ daylight = localZone->GetDaylightChanges( year );

   // Display the start and end dates and the time change.
   Console::WriteLine( "{0,-7}{1,-20:yyyy-MM-dd HH:mm}"
   "{2,-20:yyyy-MM-dd HH:mm}{3}", year, daylight->Start, daylight->End, daylight->Delta );
}

int main()
{
   String^ headFmt = "{0,-7}{1,-20}{2,-20}{3}";

   // Get the local time zone.
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   Console::WriteLine( "This example of TimeZone::GetDaylightChanges( int ) "
   "generates the \nfollowing output, which varies "
   "depending on the time zone in which \nit is run. The "
   "example creates DaylightTime objects for specified \n"
   "years and displays the start and end dates and time "
   "change for \ndaylight saving time.\n" );

   // Write a message explaining that start dates prior to 1986
   // in the en-US culture may not be correct.
   // ( CultureInfo::CurrentCulture->Name == S"en-US" ) returns False.
   if ( CultureInfo::CurrentCulture->Name->CompareTo( "en-US" ) == 0 )
   {
      Console::WriteLine( "Note: In the [en-US] culture, all start dates are "
      "calculated from \nthe first Sunday in April, based on "
      "a standard set in 1986. For \ndates prior to 1986, "
      "the calculated start date may not be accurate." );
   }

   Console::WriteLine( "\nLocal time: {0}\n", localZone->StandardName );
   Console::WriteLine( headFmt, "Year", "Start", "End", "Change" );
   Console::WriteLine( headFmt, "----", "-----", "---", "------" );
   CreateDaylightTime( 1960, localZone );
   CreateDaylightTime( 1970, localZone );
   CreateDaylightTime( 1980, localZone );
   CreateDaylightTime( 1990, localZone );
   CreateDaylightTime( 2000, localZone );
   CreateDaylightTime( 2001, localZone );
   CreateDaylightTime( 2002, localZone );
   CreateDaylightTime( 2003, localZone );
   CreateDaylightTime( 2004, localZone );
   CreateDaylightTime( 2005, localZone );
   CreateDaylightTime( 2020, localZone );
   CreateDaylightTime( 2040, localZone );
}

/*
This example of TimeZone::GetDaylightChanges( int ) generates the
following output, which varies depending on the time zone in which
it is run. The example creates DaylightTime objects for specified
years and displays the start and end dates and time change for
daylight saving time.

Note: In the [en-US] culture, all start dates are calculated from
the first Sunday in April, based on a standard set in 1986. For
dates prior to 1986, the calculated start date may not be accurate.

Local time: Pacific Standard Time

Year   Start               End                 Change
----   -----               ---                 ------
1960   1960-04-03 02:00    1960-10-30 02:00    01:00:00
1970   1970-04-05 02:00    1970-10-25 02:00    01:00:00
1980   1980-04-06 02:00    1980-10-26 02:00    01:00:00
1990   1990-04-01 02:00    1990-10-28 02:00    01:00:00
2000   2000-04-02 02:00    2000-10-29 02:00    01:00:00
2001   2001-04-01 02:00    2001-10-28 02:00    01:00:00
2002   2002-04-07 02:00    2002-10-27 02:00    01:00:00
2003   2003-04-06 02:00    2003-10-26 02:00    01:00:00
2004   2004-04-04 02:00    2004-10-31 02:00    01:00:00
2005   2005-04-03 02:00    2005-10-30 02:00    01:00:00
2020   2020-04-05 02:00    2020-10-25 02:00    01:00:00
2040   2040-04-01 02:00    2040-10-28 02:00    01:00:00
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
System 命名空间
Int32


TimeZone ..::.GetUtcOffset 方法

TimeZone
.
.
::
.
GetUtcOffset 方法
TimeZone 类

返回指定本地时间的协调世界时 (UTC) 偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetUtcOffset ( _
    time As DateTime _
) As TimeSpan
public abstract TimeSpan GetUtcOffset(
    DateTime time
)
public:
virtual TimeSpan GetUtcOffset(
    DateTime time
) abstract
abstract GetUtcOffset :
        time:DateTime -> TimeSpan

参数

time
类型： System DateTime
日期和时间值。

返回值

类型： System TimeSpan
与 Time 相比的协调世界时 (UTC) 偏移量。

该方法返回 time 参数与协调世界时 (UTC) 之间的偏移量（即差值）。即： 该方法返回 time 参数与协调世界时 (UTC) 之间的偏移量（即差值）。即：

时间 = UTC + 偏移量

该方法根据其 Kind 属性解释 time 的时区。如果 Kind 属性值为 DateTimeKind..::.Local 或 DateTimeKind..::.Unspecified，则该方法返回本地时区的偏移量。如果 Kind 属性值为 DateTimeKind..::.Utc，则该方法返回一个等于 TimeSpan..::.Zero 的偏移量。 该方法根据其 Kind 属性解释 time 的时区。如果 Kind 属性值为 DateTimeKind..::.Local 或 DateTimeKind..::.Unspecified，则该方法返回本地时区的偏移量。如果 Kind 属性值为 DateTimeKind..::.Utc，则该方法返回一个等于 TimeSpan..::.Zero 的偏移量。 该方法根据其 Kind 属性解释 time 的时区。如果 Kind 属性值为 DateTimeKind..::.Local 或 DateTimeKind..::.Unspecified，则该方法返回本地时区的偏移量。如果 Kind 属性值为 DateTimeKind..::.Utc，则该方法返回一个等于 TimeSpan..::.Zero 的偏移量。

如果本地时区遵守夏时制，则确定本地时区的偏移量时，GetUtcOffset 将当前调整规则应用于 time。即 GetUtcOffset 返回的偏移量会反映 time 为时区的标准时间还是夏时制。 如果本地时区遵守夏时制，则确定本地时区的偏移量时，GetUtcOffset 将当前调整规则应用于 time。即 GetUtcOffset 返回的偏移量会反映 time 为时区的标准时间还是夏时制。

说明 说明

GetUtcOffset 方法只识别本地时区的当前夏时制调整规则。因此，只有在最新调整规则有效期间才能保证准确返回本地时间的 UTC 偏移量。如果 Time 为遵守先前调整规则的历史日期和时间值，则可能会返回不准确的结果。 GetUtcOffset 方法只识别本地时区的当前夏时制调整规则。因此，只有在最新调整规则有效期间才能保证准确返回本地时间的 UTC 偏移量。如果 Time 为遵守先前调整规则的历史日期和时间值，则可能会返回不准确的结果。 GetUtcOffset 方法只识别本地时区的当前夏时制调整规则。因此，只有在最新调整规则有效期间才能保证准确返回本地时间的 UTC 偏移量。如果 Time 为遵守先前调整规则的历史日期和时间值，则可能会返回不准确的结果。

GetUtcOffset 方法对应于 TimeZoneInfo..::.BaseUtcOffset 属性。

由于 Time 表示的日期和时间值以及该值与 UTC 的偏移量未紧密耦合，因此在不同计算机上运行时或者在同一计算机的不同时区下运行时，本地或未指定的日期和时间值可能会返回不同的偏移值。如果不希望此行为发生，请改用 DateTimeOffset 值。DateTimeOffset 数据类型将日期和时间值与它和 UTC 的偏移量紧密耦合。 由于 Time 表示的日期和时间值以及该值与 UTC 的偏移量未紧密耦合，因此在不同计算机上运行时或者在同一计算机的不同时区下运行时，本地或未指定的日期和时间值可能会返回不同的偏移值。如果不希望此行为发生，请改用 DateTimeOffset 值。DateTimeOffset 数据类型将日期和时间值与它和 UTC 的偏移量紧密耦合。 由于 Time 表示的日期和时间值以及该值与 UTC 的偏移量未紧密耦合，因此在不同计算机上运行时或者在同一计算机的不同时区下运行时，本地或未指定的日期和时间值可能会返回不同的偏移值。如果不希望此行为发生，请改用 DateTimeOffset 值。DateTimeOffset 数据类型将日期和时间值与它和 UTC 的偏移量紧密耦合。

下面的示例使用 GetUtcOffset 方法，返回几个本地时间的协调世界时 (UTC) 偏移量。

' Example of the TimeZone.ToLocalTime( DateTime ) and
' TimeZone.GetUtcOffset( DateTime ) methods.
Imports System
Imports Microsoft.VisualBasic

Module UTCTimeDemo

    Sub Main( )

        Const headFmt As String = "{0,-20}{1,-20}{2,-12}{3}"

        ' Get the local time zone and a base Coordinated Universal
        ' Time (UTC).
        Dim localZone As TimeZone = TimeZone.CurrentTimeZone
        Dim baseUTC As DateTime = new DateTime( 2000, 1, 1 )

        Console.WriteLine( "This example of " & vbCrLf & _
            "   TimeZone.ToLocalTime( DateTime ) and" & vbCrLf & _
            "   TimeZone.GetUtcOffset( DateTime ) " & vbCrLf & _
            "generates the following output, which varies " & _
            "depending on the time zone " & vbCrLf & "in which " & _
            "it is run. The example creates several Coordinated " & _
            "Universal " & vbCrLf & "Times (UTC), displays the " & _
            "corresponding local times and UTC offsets, " & _
            vbCrLf & "and shows if the times occur in daylight " & _
            "saving time (DST)." & vbCrLf )
        Console.WriteLine( "Local time: {0}" & vbCrLf, _
            localZone.StandardName )

        Console.WriteLine( headFmt, "UTC", "Local Time", _
            " Offset", "DST?" )
        Console.WriteLine( headFmt, "---", "----------", _
            " ------", "----" )

        ' Generate several UTC times.
        Dim loopX As Integer
        For loopX = 0 to 10

            ' Calculate the local time and UTC offset.
            Dim localTime As DateTime = _
                localZone.ToLocalTime( baseUTC )
            Dim localOffset As TimeSpan = _
                localZone.GetUtcOffset( localTime )

            Console.WriteLine( "{0,-20:yyyy-MM-dd HH:mm}" & _
                "{1,-20:yyyy-MM-dd HH:mm}{2,-12}{3}", _
                baseUTC, localTime, localOffset, _
                localZone.IsDaylightSavingTime( localTime ) )

            ' Advance to another UTC.
            baseUTC = baseUTC.AddDays( 155.55 )
        Next loopX
    End Sub
End Module

' This example of
'    TimeZone.ToLocalTime( DateTime ) and
'    TimeZone.GetUtcOffset( DateTime )
' generates the following output, which varies depending on the time zone
' in which it is run. The example creates several Coordinated Universal
' Times (UTC), displays the corresponding local times and UTC offsets,
' and shows if the times occur in daylight saving time (DST).
'
' Local time: Pacific Standard Time
'
' UTC                 Local Time           Offset     DST?
' ---                 ----------           ------     ----
' 2000-01-01 00:00    1999-12-31 16:00    -08:00:00   False
' 2000-06-04 13:12    2000-06-04 06:12    -07:00:00   True
' 2000-11-07 02:24    2000-11-06 18:24    -08:00:00   False
' 2001-04-11 15:36    2001-04-11 08:36    -07:00:00   True
' 2001-09-14 04:48    2001-09-13 21:48    -07:00:00   True
' 2002-02-16 18:00    2002-02-16 10:00    -08:00:00   False
' 2002-07-22 07:12    2002-07-22 00:12    -07:00:00   True
' 2002-12-24 20:24    2002-12-24 12:24    -08:00:00   False
' 2003-05-29 09:36    2003-05-29 02:36    -07:00:00   True
' 2003-10-31 22:48    2003-10-31 14:48    -08:00:00   False
' 2004-04-04 12:00    2004-04-04 05:00    -07:00:00   True

// Example of the TimeZone.ToLocalTime( DateTime ) and
// TimeZone.GetUtcOffset( DateTime ) methods.
using System;

class UTCTimeDemo
{
    static void Main( )
    {
        const string headFmt = "{0,-20}{1,-20}{2,-12}{3}";

        // Get the local time zone and a base Coordinated Universal
        // Time (UTC).
        TimeZone localZone = TimeZone.CurrentTimeZone;
        DateTime baseUTC = new DateTime( 2000, 1, 1 );

        Console.WriteLine( "This example of \n" +
            "   TimeZone.ToLocalTime( DateTime ) and\n" +
            "   TimeZone.GetUtcOffset( DateTime ) \ngenerates the " +
            "following output, which varies depending on the time " +
            "zone \nin which it is run. The example creates several " +
            "Coordinated Universal \nTimes (UTC), displays the " +
            "corresponding local times and UTC offsets, \nand shows " +
            "if the times occur in daylight saving time (DST)." );
        Console.WriteLine( "\nLocal time: {0}\n",
            localZone.StandardName );

        Console.WriteLine( headFmt, "UTC", "Local Time",
            " Offset", "DST?" );
        Console.WriteLine( headFmt, "---", "----------",
            " ------", "----" );

        // Generate several UTC times.
        for( int loopX = 0; loopX <= 10; loopX++ )
        {
            // Calculate the local time and UTC offset.
            DateTime localTime = localZone.ToLocalTime( baseUTC );
            TimeSpan localOffset =
                localZone.GetUtcOffset( localTime );

            Console.WriteLine( "{0,-20:yyyy-MM-dd HH:mm}" +
                "{1,-20:yyyy-MM-dd HH:mm}{2,-12}{3}",
                baseUTC, localTime, localOffset,
                localZone.IsDaylightSavingTime( localTime ) );

            // Advance to another UTC.
            baseUTC = baseUTC.AddDays( 155.55 );
        }
    }
}

/*
This example of
   TimeZone.ToLocalTime( DateTime ) and
   TimeZone.GetUtcOffset( DateTime )
generates the following output, which varies depending on the time zone
in which it is run. The example creates several Coordinated Universal
Times (UTC), displays the corresponding local times and UTC offsets,
and shows if the times occur in daylight saving time (DST).

Local time: Pacific Standard Time

UTC                 Local Time           Offset     DST?
---                 ----------           ------     ----
2000-01-01 00:00    1999-12-31 16:00    -08:00:00   False
2000-06-04 13:12    2000-06-04 06:12    -07:00:00   True
2000-11-07 02:24    2000-11-06 18:24    -08:00:00   False
2001-04-11 15:36    2001-04-11 08:36    -07:00:00   True
2001-09-14 04:48    2001-09-13 21:48    -07:00:00   True
2002-02-16 18:00    2002-02-16 10:00    -08:00:00   False
2002-07-22 07:12    2002-07-22 00:12    -07:00:00   True
2002-12-24 20:24    2002-12-24 12:24    -08:00:00   False
2003-05-29 09:36    2003-05-29 02:36    -07:00:00   True
2003-10-31 22:48    2003-10-31 14:48    -08:00:00   False
2004-04-04 12:00    2004-04-04 05:00    -07:00:00   True
*/

// Example of the TimeZone::ToLocalTime( DateTime ) and
// TimeZone::GetUtcOffset( DateTime ) methods.
using namespace System;
int main()
{
   String^ headFmt = "{0,-20}{1,-20}{2,-12}{3}";

   // Get the local time zone and a base Coordinated Universal
   // Time (UTC).
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   DateTime baseUTC = DateTime(2000,1,1);
   Console::WriteLine( "This example of \n"
   "   TimeZone::ToLocalTime( DateTime ) and\n"
   "   TimeZone::GetUtcOffset( DateTime ) \ngenerates the "
   "following output, which varies depending on the time "
   "zone \nin which it is run. The example creates several "
   "Coordinated Universal \nTimes (UTC), displays the "
   "corresponding local times and UTC offsets, \nand shows "
   "if the times occur in daylight saving time (DST)." );
   Console::WriteLine( "\nLocal time: {0}\n", localZone->StandardName );
   Console::WriteLine( headFmt, "UTC", "Local Time", " Offset", "DST?" );
   Console::WriteLine( headFmt, "---", "----------", " ------", "----" );

   // Generate several UTC times.
   for ( int loopX = 0; loopX <= 10; loopX++ )
   {

      // Calculate the local time and UTC offset.
      DateTime localTime = localZone->ToLocalTime( baseUTC );
      TimeSpan localOffset = localZone->GetUtcOffset( localTime );
      Console::WriteLine( "{0,-20:yyyy-MM-dd HH:mm}"
      "{1,-20:yyyy-MM-dd HH:mm}{2,-12}{3}", baseUTC, localTime, localOffset, localZone->IsDaylightSavingTime( localTime ) );

      // Advance to another UTC.
      baseUTC = baseUTC.AddDays( 155.55 );

   }
}

/*
This example of
   TimeZone::ToLocalTime( DateTime ) and
   TimeZone::GetUtcOffset( DateTime )
generates the following output, which varies depending on the time zone
in which it is run. The example creates several Coordinated Universal
Times (UTC), displays the corresponding local times and UTC offsets,
and shows if the times occur in daylight saving time (DST).

Local time: Pacific Standard Time

UTC                 Local Time           Offset     DST?
---                 ----------           ------     ----
2000-01-01 00:00    1999-12-31 16:00    -08:00:00   False
2000-06-04 13:12    2000-06-04 06:12    -07:00:00   True
2000-11-07 02:24    2000-11-06 18:24    -08:00:00   False
2001-04-11 15:36    2001-04-11 08:36    -07:00:00   True
2001-09-14 04:48    2001-09-13 21:48    -07:00:00   True
2002-02-16 18:00    2002-02-16 10:00    -08:00:00   False
2002-07-22 07:12    2002-07-22 00:12    -07:00:00   True
2002-12-24 20:24    2002-12-24 12:24    -08:00:00   False
2003-05-29 09:36    2003-05-29 02:36    -07:00:00   True
2003-10-31 22:48    2003-10-31 14:48    -08:00:00   False
2004-04-04 12:00    2004-04-04 05:00    -07:00:00   True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
System 命名空间


TimeZone ..::.IsDaylightSavingTime 方法

TimeZone
.
.
::
.
IsDaylightSavingTime 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZone 类

返回一个值，用以指示指定日期和时间是否处于夏时制期间。

名称 说明
页首

参考

TimeZone 类
TimeZone 成员
System 命名空间


TimeZone ..::.IsDaylightSavingTime 方法 (DateTime)

TimeZone
.
.
::
.
IsDaylightSavingTime 方法 (DateTime)
TimeZone 类

返回一个值，用以指示指定日期和时间是否处于夏时制期间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IsDaylightSavingTime ( _
    time As DateTime _
) As Boolean
public virtual bool IsDaylightSavingTime(
    DateTime time
)
public:
virtual bool IsDaylightSavingTime(
    DateTime time
)
abstract IsDaylightSavingTime :
        time:DateTime -> bool
override IsDaylightSavingTime :
        time:DateTime -> bool

参数

time
类型： System DateTime
日期和时间。

返回值

类型： System Boolean
如果 time 处于夏时制期间，则为 true；否则为 false。

要应用夏时制期间的年份是从 time 参数派生的。

由于 TimeZone 类支持单个夏时制调整规则，因此 IsDaylightSavingTime(DateTime) 方法会将当前的调整规则应用到任何日期，而无论调整规则在该日期是否有效。假定操作系统本身具有准确的历史夏时制数据，则通过使用 TimeZoneInfo..::.IsDaylightSavingTime 方法可以获得更准确的结果。 由于 TimeZone 类支持单个夏时制调整规则，因此 IsDaylightSavingTime(DateTime) 方法会将当前的调整规则应用到任何日期，而无论调整规则在该日期是否有效。假定操作系统本身具有准确的历史夏时制数据，则通过使用 TimeZoneInfo..::.IsDaylightSavingTime 方法可以获得更准确的结果。

下面的示例使用 IsDaylightSavingTime 方法，确定选定的日期是否在任何年份都属于夏时制时间。

' Example of the TimeZone.IsDaylightSavingTime( DateTime ),
' TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
' TimeZone.ToUniversalTime( DateTime ) methods.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module DaylightTimeDemo

    Sub Main( )

        Const headFmt As String = "{0,-22}{1,-10}{2,-10}{3,-10}{4}"

        ' Get the local time zone and a base local time.
        Dim localZone As TimeZone = TimeZone.CurrentTimeZone
        Dim localTime As DateTime = new DateTime( 2001, 1, 1 )

        Console.WriteLine( "This example of " & vbCrLf & _
            "   TimeZone.IsDaylightSavingTime( DateTime ), " & _
            vbCrLf & "   TimeZone.IsDaylightSavingTime( " & _
            "DateTime, DaylightTime ), and " & vbCrLf & _
            "   TimeZone.ToUniversalTime( DateTime )" & vbCrLf & _
            "generates the following output, which varies " & _
            "depending on the " & vbCrLf & "time zone in which " & _
            "it is run." & vbCrLf )
        Console.WriteLine( "The example creates " & _
            "several local times and the corresponding " & vbCrLf & _
            "Coordinated Universal Times (UTC) and shows if " & _
            "they occur in " & vbCrLf & "daylight saving time " & _
            "(DST), both for specified years and for " & vbCrLf & _
            "any year." & vbCrLf )
        Console.WriteLine( "Local time: {0}" & vbCrLf, _
            localZone.StandardName )

        Console.WriteLine( headFmt, "Local Date and Time", _
            "2001 DST?", "2002 DST?", "Any DST?", "Corresponding UTC" )
        Console.WriteLine( headFmt, "-------------------", _
            "---------", "---------", "--------", "-----------------" )

        ' Create DaylightTime objects for specific years.
        Dim daylight2001 As DaylightTime = _
            localZone.GetDaylightChanges( 2001 )
        Dim daylight2002 As DaylightTime = _
            localZone.GetDaylightChanges( 2002 )

        ' Generate several local times.
        Dim loopX As Integer
        For loopX = 0 to 10

            ' Calculate the corresponding UTC.
            Dim utcTime As DateTime = _
                localZone.ToUniversalTime( localTime )

            ' Show if dates and times occur in daylight saving
            ' time, for specified years and for any year.
            Console.WriteLine( "{0,-22:yyyy-MM-dd HH:mm}" & _
                "{1,-10}{2,-10}{3,-10}{4:yyyy-MM-dd HH:mm}", _
                localTime, _
                TimeZone.IsDaylightSavingTime( _
                    localTime, daylight2001 ), _
                TimeZone.IsDaylightSavingTime( _
                    localTime, daylight2002 ), _
                localZone.IsDaylightSavingTime( localTime ), _
                utcTime )

            ' Advance to another local time.
            localTime = localTime.AddDays( 109.1 )
        Next loopX
    End Sub
End Module

' This example of
'    TimeZone.IsDaylightSavingTime( DateTime ),
'    TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
'    TimeZone.ToUniversalTime( DateTime )
' generates the following output, which varies depending on the
' time zone in which it is run.
'
' The example creates several local times and the corresponding
' Coordinated Universal Times (UTC) and shows if they occur in
' daylight saving time (DST), both for specified years and for
' any year.
'
' Local time: Pacific Standard Time
'
' Local Date and Time   2001 DST? 2002 DST? Any DST?  Corresponding UTC
' -------------------   --------- --------- --------  -----------------
' 2001-01-01 00:00      False     False     False     2001-01-01 08:00
' 2001-04-20 02:24      True      False     True      2001-04-20 09:24
' 2001-08-07 04:48      True      False     True      2001-08-07 11:48
' 2001-11-24 07:12      False     False     False     2001-11-24 15:12
' 2002-03-13 09:36      False     False     False     2002-03-13 17:36
' 2002-06-30 12:00      False     True      True      2002-06-30 19:00
' 2002-10-17 14:24      False     True      True      2002-10-17 21:24
' 2003-02-03 16:48      False     False     False     2003-02-04 00:48
' 2003-05-23 19:12      False     False     True      2003-05-24 02:12
' 2003-09-09 21:36      False     False     True      2003-09-10 04:36
' 2003-12-28 00:00      False     False     False     2003-12-28 08:00

// Example of the TimeZone.IsDaylightSavingTime( DateTime ),
// TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
// TimeZone.ToUniversalTime( DateTime ) methods.
using System;
using System.Globalization;

class DaylightTimeDemo
{
    static void Main( )
    {
        const string headFmt = "{0,-22}{1,-10}{2,-10}{3,-10}{4}";

        // Get the local time zone and a base local time.
        TimeZone localZone = TimeZone.CurrentTimeZone;
        DateTime localTime = new DateTime( 2001, 1, 1 );

        Console.WriteLine( "This example of \n" +
            "   TimeZone.IsDaylightSavingTime( DateTime ), \n" +
            "   TimeZone.IsDaylightSavingTime( " +
            "DateTime, DaylightTime ), and \n" +
            "   TimeZone.ToUniversalTime( DateTime )\n" +
            "generates the following output, which varies " +
            "depending on the \ntime zone in which it is run.\n" );
        Console.WriteLine( "The example creates several local " +
            "times and the corresponding \nCoordinated Universal " +
            "Times (UTC) and shows if they occur in \ndaylight " +
            "saving time (DST), both for specified years " +
            "and for \nany year.\n" );
        Console.WriteLine( "Local time: {0}\n",
            localZone.StandardName );

        Console.WriteLine( headFmt, "Local Date and Time", "2001 DST?",
            "2002 DST?", "Any DST?", "Corresponding UTC" );
        Console.WriteLine( headFmt, "-------------------", "---------",
            "---------", "--------", "-----------------" );

        // Create DaylightTime objects for specific years.
        DaylightTime daylight2001 =
            localZone.GetDaylightChanges( 2001 );
        DaylightTime daylight2002 =
            localZone.GetDaylightChanges( 2002 );

        // Generate several local times.
        for( int loopX = 0; loopX <= 10; loopX++ )
        {
            // Calculate the corresponding UTC.
            DateTime utcTime =
                localZone.ToUniversalTime( localTime );

            // Show if dates and times occur in daylight saving
            // time, for specified years and for any year.
            Console.WriteLine( "{0,-22:yyyy-MM-dd HH:mm}" +
                "{1,-10}{2,-10}{3,-10}{4:yyyy-MM-dd HH:mm}",
                localTime,
                TimeZone.IsDaylightSavingTime(
                    localTime, daylight2001 ),
                TimeZone.IsDaylightSavingTime(
                    localTime, daylight2002 ),
                localZone.IsDaylightSavingTime( localTime ),
                utcTime );

            // Advance to another local time.
            localTime = localTime.AddDays( 109.1 );
        }
    }
}

/*
This example of
   TimeZone.IsDaylightSavingTime( DateTime ),
   TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
   TimeZone.ToUniversalTime( DateTime )
generates the following output, which varies depending on the
time zone in which it is run.

The example creates several local times and the corresponding
Coordinated Universal Times (UTC) and shows if they occur in
daylight saving time (DST), both for specified years and for
any year.

Local time: Pacific Standard Time

Local Date and Time   2001 DST? 2002 DST? Any DST?  Corresponding UTC
-------------------   --------- --------- --------  -----------------
2001-01-01 00:00      False     False     False     2001-01-01 08:00
2001-04-20 02:24      True      False     True      2001-04-20 09:24
2001-08-07 04:48      True      False     True      2001-08-07 11:48
2001-11-24 07:12      False     False     False     2001-11-24 15:12
2002-03-13 09:36      False     False     False     2002-03-13 17:36
2002-06-30 12:00      False     True      True      2002-06-30 19:00
2002-10-17 14:24      False     True      True      2002-10-17 21:24
2003-02-03 16:48      False     False     False     2003-02-04 00:48
2003-05-23 19:12      False     False     True      2003-05-24 02:12
2003-09-09 21:36      False     False     True      2003-09-10 04:36
2003-12-28 00:00      False     False     False     2003-12-28 08:00
*/

// Example of the TimeZone::IsDaylightSavingTime( DateTime ),
// TimeZone::IsDaylightSavingTime( DateTime, DaylightTime ), and
// TimeZone::ToUniversalTime( DateTime ) methods.
using namespace System;
using namespace System::Globalization;
int main()
{
   String^ headFmt = "{0,-22}{1,-10}{2,-10}{3,-10}{4}";

   // Get the local time zone and a base local time.
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   DateTime localTime = DateTime(2001,1,1);
   Console::WriteLine( "This example of \n"
   "   TimeZone::IsDaylightSavingTime( DateTime ), \n"
   "   TimeZone::IsDaylightSavingTime( "
   "DateTime, DaylightTime* ), and \n"
   "   TimeZone::ToUniversalTime( DateTime )\n"
   "generates the following output, which varies "
   "depending on the \ntime zone in which it is run.\n" );
   Console::WriteLine( "The example creates several local "
   "times and the corresponding \nCoordinated Universal "
   "Times (UTC) and shows if they occur in \ndaylight "
   "saving time (DST), both for specified years "
   "and for \nany year.\n" );
   Console::WriteLine( "Local time: {0}\n", localZone->StandardName );
   Console::WriteLine( headFmt, "Local Date and Time", "2001 DST?", "2002 DST?", "Any DST?", "Corresponding UTC" );
   Console::WriteLine( headFmt, "-------------------", "---------", "---------", "--------", "-----------------" );

   // Create DaylightTime objects for specific years.
   DaylightTime^ daylight2001 = localZone->GetDaylightChanges( 2001 );
   DaylightTime^ daylight2002 = localZone->GetDaylightChanges( 2002 );

   // Generate several local times.
   for ( int loopX = 0; loopX <= 10; loopX++ )
   {

      // Calculate the corresponding UTC.
      DateTime utcTime = localZone->ToUniversalTime( localTime );

      // Show if dates and times occur in daylight saving
      // time, for specified years and for any year.
      Console::WriteLine( "{0,-22:yyyy-MM-dd HH:mm}"
      "{1,-10}{2,-10}{3,-10}{4:yyyy-MM-dd HH:mm}", localTime, TimeZone::IsDaylightSavingTime( localTime, daylight2001 ), TimeZone::IsDaylightSavingTime( localTime, daylight2002 ), localZone->IsDaylightSavingTime( localTime ), utcTime );

      // Advance to another local time.
      localTime = localTime.AddDays( 109.1 );

   }
}

/*
This example of
   TimeZone::IsDaylightSavingTime( DateTime ),
   TimeZone::IsDaylightSavingTime( DateTime, DaylightTime* ), and
   TimeZone::ToUniversalTime( DateTime )
generates the following output, which varies depending on the
time zone in which it is run.

The example creates several local times and the corresponding
Coordinated Universal Times (UTC) and shows if they occur in
daylight saving time (DST), both for specified years and for
any year.

Local time: Pacific Standard Time

Local Date and Time   2001 DST? 2002 DST? Any DST?  Corresponding UTC
-------------------   --------- --------- --------  -----------------
2001-01-01 00:00      False     False     False     2001-01-01 08:00
2001-04-20 02:24      True      False     True      2001-04-20 09:24
2001-08-07 04:48      True      False     True      2001-08-07 11:48
2001-11-24 07:12      False     False     False     2001-11-24 15:12
2002-03-13 09:36      False     False     False     2002-03-13 17:36
2002-06-30 12:00      False     True      True      2002-06-30 19:00
2002-10-17 14:24      False     True      True      2002-10-17 21:24
2003-02-03 16:48      False     False     False     2003-02-04 00:48
2003-05-23 19:12      False     False     True      2003-05-24 02:12
2003-09-09 21:36      False     False     True      2003-09-10 04:36
2003-12-28 00:00      False     False     False     2003-12-28 08:00
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
IsDaylightSavingTime 重载
System 命名空间


TimeZone ..::.IsDaylightSavingTime 方法 (DateTime, DaylightTime)

TimeZone
.
.
::
.
IsDaylightSavingTime 方法 (DateTime, DaylightTime)
TimeZone 类

返回一个值，用以指示指定日期和时间是否处于指定的夏时制期间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function IsDaylightSavingTime ( _
    time As DateTime, _
    daylightTimes As DaylightTime _
) As Boolean
public static bool IsDaylightSavingTime(
    DateTime time,
    DaylightTime daylightTimes
)
public:
static bool IsDaylightSavingTime(
    DateTime time,
    DaylightTime^ daylightTimes
)
static member IsDaylightSavingTime :
        time:DateTime *
        daylightTimes:DaylightTime -> bool

参数

time
类型： System DateTime
日期和时间。
daylightTimes
类型： System.Globalization DaylightTime
夏时制期间。

返回值

类型： System Boolean
如果 time 处于 daylightTimes，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | daylightTimes 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

TimeZoneInfo..::.IsDaylightSavingTime 方法提供与 IsDaylightSavingTime 方法的该重载相同的功能。

下面的示例使用 IsDaylightSavingTime 方法，确定选定的日期是否在某个特定的年份属于夏时制时间。

' Example of the TimeZone.IsDaylightSavingTime( DateTime ),
' TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
' TimeZone.ToUniversalTime( DateTime ) methods.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module DaylightTimeDemo

    Sub Main( )

        Const headFmt As String = "{0,-22}{1,-10}{2,-10}{3,-10}{4}"

        ' Get the local time zone and a base local time.
        Dim localZone As TimeZone = TimeZone.CurrentTimeZone
        Dim localTime As DateTime = new DateTime( 2001, 1, 1 )

        Console.WriteLine( "This example of " & vbCrLf & _
            "   TimeZone.IsDaylightSavingTime( DateTime ), " & _
            vbCrLf & "   TimeZone.IsDaylightSavingTime( " & _
            "DateTime, DaylightTime ), and " & vbCrLf & _
            "   TimeZone.ToUniversalTime( DateTime )" & vbCrLf & _
            "generates the following output, which varies " & _
            "depending on the " & vbCrLf & "time zone in which " & _
            "it is run." & vbCrLf )
        Console.WriteLine( "The example creates " & _
            "several local times and the corresponding " & vbCrLf & _
            "Coordinated Universal Times (UTC) and shows if " & _
            "they occur in " & vbCrLf & "daylight saving time " & _
            "(DST), both for specified years and for " & vbCrLf & _
            "any year." & vbCrLf )
        Console.WriteLine( "Local time: {0}" & vbCrLf, _
            localZone.StandardName )

        Console.WriteLine( headFmt, "Local Date and Time", _
            "2001 DST?", "2002 DST?", "Any DST?", "Corresponding UTC" )
        Console.WriteLine( headFmt, "-------------------", _
            "---------", "---------", "--------", "-----------------" )

        ' Create DaylightTime objects for specific years.
        Dim daylight2001 As DaylightTime = _
            localZone.GetDaylightChanges( 2001 )
        Dim daylight2002 As DaylightTime = _
            localZone.GetDaylightChanges( 2002 )

        ' Generate several local times.
        Dim loopX As Integer
        For loopX = 0 to 10

            ' Calculate the corresponding UTC.
            Dim utcTime As DateTime = _
                localZone.ToUniversalTime( localTime )

            ' Show if dates and times occur in daylight saving
            ' time, for specified years and for any year.
            Console.WriteLine( "{0,-22:yyyy-MM-dd HH:mm}" & _
                "{1,-10}{2,-10}{3,-10}{4:yyyy-MM-dd HH:mm}", _
                localTime, _
                TimeZone.IsDaylightSavingTime( _
                    localTime, daylight2001 ), _
                TimeZone.IsDaylightSavingTime( _
                    localTime, daylight2002 ), _
                localZone.IsDaylightSavingTime( localTime ), _
                utcTime )

            ' Advance to another local time.
            localTime = localTime.AddDays( 109.1 )
        Next loopX
    End Sub
End Module

' This example of
'    TimeZone.IsDaylightSavingTime( DateTime ),
'    TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
'    TimeZone.ToUniversalTime( DateTime )
' generates the following output, which varies depending on the
' time zone in which it is run.
'
' The example creates several local times and the corresponding
' Coordinated Universal Times (UTC) and shows if they occur in
' daylight saving time (DST), both for specified years and for
' any year.
'
' Local time: Pacific Standard Time
'
' Local Date and Time   2001 DST? 2002 DST? Any DST?  Corresponding UTC
' -------------------   --------- --------- --------  -----------------
' 2001-01-01 00:00      False     False     False     2001-01-01 08:00
' 2001-04-20 02:24      True      False     True      2001-04-20 09:24
' 2001-08-07 04:48      True      False     True      2001-08-07 11:48
' 2001-11-24 07:12      False     False     False     2001-11-24 15:12
' 2002-03-13 09:36      False     False     False     2002-03-13 17:36
' 2002-06-30 12:00      False     True      True      2002-06-30 19:00
' 2002-10-17 14:24      False     True      True      2002-10-17 21:24
' 2003-02-03 16:48      False     False     False     2003-02-04 00:48
' 2003-05-23 19:12      False     False     True      2003-05-24 02:12
' 2003-09-09 21:36      False     False     True      2003-09-10 04:36
' 2003-12-28 00:00      False     False     False     2003-12-28 08:00

// Example of the TimeZone.IsDaylightSavingTime( DateTime ),
// TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
// TimeZone.ToUniversalTime( DateTime ) methods.
using System;
using System.Globalization;

class DaylightTimeDemo
{
    static void Main( )
    {
        const string headFmt = "{0,-22}{1,-10}{2,-10}{3,-10}{4}";

        // Get the local time zone and a base local time.
        TimeZone localZone = TimeZone.CurrentTimeZone;
        DateTime localTime = new DateTime( 2001, 1, 1 );

        Console.WriteLine( "This example of \n" +
            "   TimeZone.IsDaylightSavingTime( DateTime ), \n" +
            "   TimeZone.IsDaylightSavingTime( " +
            "DateTime, DaylightTime ), and \n" +
            "   TimeZone.ToUniversalTime( DateTime )\n" +
            "generates the following output, which varies " +
            "depending on the \ntime zone in which it is run.\n" );
        Console.WriteLine( "The example creates several local " +
            "times and the corresponding \nCoordinated Universal " +
            "Times (UTC) and shows if they occur in \ndaylight " +
            "saving time (DST), both for specified years " +
            "and for \nany year.\n" );
        Console.WriteLine( "Local time: {0}\n",
            localZone.StandardName );

        Console.WriteLine( headFmt, "Local Date and Time", "2001 DST?",
            "2002 DST?", "Any DST?", "Corresponding UTC" );
        Console.WriteLine( headFmt, "-------------------", "---------",
            "---------", "--------", "-----------------" );

        // Create DaylightTime objects for specific years.
        DaylightTime daylight2001 =
            localZone.GetDaylightChanges( 2001 );
        DaylightTime daylight2002 =
            localZone.GetDaylightChanges( 2002 );

        // Generate several local times.
        for( int loopX = 0; loopX <= 10; loopX++ )
        {
            // Calculate the corresponding UTC.
            DateTime utcTime =
                localZone.ToUniversalTime( localTime );

            // Show if dates and times occur in daylight saving
            // time, for specified years and for any year.
            Console.WriteLine( "{0,-22:yyyy-MM-dd HH:mm}" +
                "{1,-10}{2,-10}{3,-10}{4:yyyy-MM-dd HH:mm}",
                localTime,
                TimeZone.IsDaylightSavingTime(
                    localTime, daylight2001 ),
                TimeZone.IsDaylightSavingTime(
                    localTime, daylight2002 ),
                localZone.IsDaylightSavingTime( localTime ),
                utcTime );

            // Advance to another local time.
            localTime = localTime.AddDays( 109.1 );
        }
    }
}

/*
This example of
   TimeZone.IsDaylightSavingTime( DateTime ),
   TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
   TimeZone.ToUniversalTime( DateTime )
generates the following output, which varies depending on the
time zone in which it is run.

The example creates several local times and the corresponding
Coordinated Universal Times (UTC) and shows if they occur in
daylight saving time (DST), both for specified years and for
any year.

Local time: Pacific Standard Time

Local Date and Time   2001 DST? 2002 DST? Any DST?  Corresponding UTC
-------------------   --------- --------- --------  -----------------
2001-01-01 00:00      False     False     False     2001-01-01 08:00
2001-04-20 02:24      True      False     True      2001-04-20 09:24
2001-08-07 04:48      True      False     True      2001-08-07 11:48
2001-11-24 07:12      False     False     False     2001-11-24 15:12
2002-03-13 09:36      False     False     False     2002-03-13 17:36
2002-06-30 12:00      False     True      True      2002-06-30 19:00
2002-10-17 14:24      False     True      True      2002-10-17 21:24
2003-02-03 16:48      False     False     False     2003-02-04 00:48
2003-05-23 19:12      False     False     True      2003-05-24 02:12
2003-09-09 21:36      False     False     True      2003-09-10 04:36
2003-12-28 00:00      False     False     False     2003-12-28 08:00
*/

// Example of the TimeZone::IsDaylightSavingTime( DateTime ),
// TimeZone::IsDaylightSavingTime( DateTime, DaylightTime ), and
// TimeZone::ToUniversalTime( DateTime ) methods.
using namespace System;
using namespace System::Globalization;
int main()
{
   String^ headFmt = "{0,-22}{1,-10}{2,-10}{3,-10}{4}";

   // Get the local time zone and a base local time.
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   DateTime localTime = DateTime(2001,1,1);
   Console::WriteLine( "This example of \n"
   "   TimeZone::IsDaylightSavingTime( DateTime ), \n"
   "   TimeZone::IsDaylightSavingTime( "
   "DateTime, DaylightTime* ), and \n"
   "   TimeZone::ToUniversalTime( DateTime )\n"
   "generates the following output, which varies "
   "depending on the \ntime zone in which it is run.\n" );
   Console::WriteLine( "The example creates several local "
   "times and the corresponding \nCoordinated Universal "
   "Times (UTC) and shows if they occur in \ndaylight "
   "saving time (DST), both for specified years "
   "and for \nany year.\n" );
   Console::WriteLine( "Local time: {0}\n", localZone->StandardName );
   Console::WriteLine( headFmt, "Local Date and Time", "2001 DST?", "2002 DST?", "Any DST?", "Corresponding UTC" );
   Console::WriteLine( headFmt, "-------------------", "---------", "---------", "--------", "-----------------" );

   // Create DaylightTime objects for specific years.
   DaylightTime^ daylight2001 = localZone->GetDaylightChanges( 2001 );
   DaylightTime^ daylight2002 = localZone->GetDaylightChanges( 2002 );

   // Generate several local times.
   for ( int loopX = 0; loopX <= 10; loopX++ )
   {

      // Calculate the corresponding UTC.
      DateTime utcTime = localZone->ToUniversalTime( localTime );

      // Show if dates and times occur in daylight saving
      // time, for specified years and for any year.
      Console::WriteLine( "{0,-22:yyyy-MM-dd HH:mm}"
      "{1,-10}{2,-10}{3,-10}{4:yyyy-MM-dd HH:mm}", localTime, TimeZone::IsDaylightSavingTime( localTime, daylight2001 ), TimeZone::IsDaylightSavingTime( localTime, daylight2002 ), localZone->IsDaylightSavingTime( localTime ), utcTime );

      // Advance to another local time.
      localTime = localTime.AddDays( 109.1 );

   }
}

/*
This example of
   TimeZone::IsDaylightSavingTime( DateTime ),
   TimeZone::IsDaylightSavingTime( DateTime, DaylightTime* ), and
   TimeZone::ToUniversalTime( DateTime )
generates the following output, which varies depending on the
time zone in which it is run.

The example creates several local times and the corresponding
Coordinated Universal Times (UTC) and shows if they occur in
daylight saving time (DST), both for specified years and for
any year.

Local time: Pacific Standard Time

Local Date and Time   2001 DST? 2002 DST? Any DST?  Corresponding UTC
-------------------   --------- --------- --------  -----------------
2001-01-01 00:00      False     False     False     2001-01-01 08:00
2001-04-20 02:24      True      False     True      2001-04-20 09:24
2001-08-07 04:48      True      False     True      2001-08-07 11:48
2001-11-24 07:12      False     False     False     2001-11-24 15:12
2002-03-13 09:36      False     False     False     2002-03-13 17:36
2002-06-30 12:00      False     True      True      2002-06-30 19:00
2002-10-17 14:24      False     True      True      2002-10-17 21:24
2003-02-03 16:48      False     False     False     2003-02-04 00:48
2003-05-23 19:12      False     False     True      2003-05-24 02:12
2003-09-09 21:36      False     False     True      2003-09-10 04:36
2003-12-28 00:00      False     False     False     2003-12-28 08:00
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
IsDaylightSavingTime 重载
System 命名空间


TimeZone ..::.ToLocalTime 方法

TimeZone
.
.
::
.
ToLocalTime 方法
TimeZone 类

返回对应于指定日期和时间值的本地时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ToLocalTime ( _
    time As DateTime _
) As DateTime
public virtual DateTime ToLocalTime(
    DateTime time
)
public:
virtual DateTime ToLocalTime(
    DateTime time
)
abstract ToLocalTime :
        time:DateTime -> DateTime
override ToLocalTime :
        time:DateTime -> DateTime

参数

time
类型： System DateTime
协调世界时 (UTC) 时间。

返回值

类型： System DateTime
一个 DateTime 对象，其值为对应于 time 的本地时间。

下表显示了 time 参数与该方法返回的 DateTime 值之间的关系。

time 参数 | 行为 | 返回值
协调世界时 (UTC) 时间 (DateTimeKind..::.Utc)。 | 将时间从 UTC 转换为本地时间。 | 一个 DateTime 对象，其值为对应于 time 的本地时间。
本地时间 (DateTimeKind..::.Local)。 | 不需要进行转换。 | 由 time 参数表示的同一 DateTime 值。
未指定的时间 (DateTimeKind..::.Unspecified)。 | 假定时间为 UTC 并将其从 UTC 转换为本地时间。 | 一个 DateTime 对象，其值为对应于 time 的本地时间。

如果本地时区遵守夏时制，则执行转换时，ToLocalTime 会将当前调整规则应用于 time。

说明 说明

ToLocalTime 方法只识别本地时区的当前夏时制调整规则。因此，只有在最新调整规则有效期间才能保证准确返回对应于特定 UTC 时间的本地时间。如果 time 为遵守先前调整规则的历史日期和时间值，则可能会返回不准确的结果。 ToLocalTime 方法只识别本地时区的当前夏时制调整规则。因此，只有在最新调整规则有效期间才能保证准确返回对应于特定 UTC 时间的本地时间。如果 time 为遵守先前调整规则的历史日期和时间值，则可能会返回不准确的结果。 ToLocalTime 方法只识别本地时区的当前夏时制调整规则。因此，只有在最新调整规则有效期间才能保证准确返回对应于特定 UTC 时间的本地时间。如果 time 为遵守先前调整规则的历史日期和时间值，则可能会返回不准确的结果。

ToLocalTime 方法对应于 TimeZoneInfo..::.ConvertTimeFromUtc 方法，其 destinationTimeZone 参数设置为 TimeZoneInfo..::.Local。

对继承者的说明

尽管不是必须，但大多数情况下在 .NET Framework 2.0 版上运行的派生类应重写该方法的默认实现。在 .NET Framework 1.0 和 1.1 版中，ToLocalTime 方法调用 GetUtcOffset 方法，并在返回本地时间时调整为夏时制时间。然而，从 .NET Framework 2.0 开始，默认实现的行为取决于 time 参数的 Kind 属性。如果其值为 DateTimeKind..::.Local，则该方法返回未更改的 time。如果其值为 DateTimeKind..::.Utc 或 DateTimeKind..::.Unspecified，则该方法假定 time 为 UTC 并将其转换为本地系统时间，而不调用 GetUtcOffset 方法。 尽管不是必须，但大多数情况下在 .NET Framework 2.0 版上运行的派生类应重写该方法的默认实现。在 .NET Framework 1.0 和 1.1 版中，ToLocalTime 方法调用 GetUtcOffset 方法，并在返回本地时间时调整为夏时制时间。然而，从 .NET Framework 2.0 开始，默认实现的行为取决于 time 参数的 Kind 属性。如果其值为 DateTimeKind..::.Local，则该方法返回未更改的 time。如果其值为 DateTimeKind..::.Utc 或 DateTimeKind..::.Unspecified，则该方法假定 time 为 UTC 并将其转换为本地系统时间，而不调用 GetUtcOffset 方法。 尽管不是必须，但大多数情况下在 .NET Framework 2.0 版上运行的派生类应重写该方法的默认实现。在 .NET Framework 1.0 和 1.1 版中，ToLocalTime 方法调用 GetUtcOffset 方法，并在返回本地时间时调整为夏时制时间。然而，从 .NET Framework 2.0 开始，默认实现的行为取决于 time 参数的 Kind 属性。如果其值为 DateTimeKind..::.Local，则该方法返回未更改的 time。如果其值为 DateTimeKind..::.Utc 或 DateTimeKind..::.Unspecified，则该方法假定 time 为 UTC 并将其转换为本地系统时间，而不调用 GetUtcOffset 方法。 尽管不是必须，但大多数情况下在 .NET Framework 2.0 版上运行的派生类应重写该方法的默认实现。在 .NET Framework 1.0 和 1.1 版中，ToLocalTime 方法调用 GetUtcOffset 方法，并在返回本地时间时调整为夏时制时间。然而，从 .NET Framework 2.0 开始，默认实现的行为取决于 time 参数的 Kind 属性。如果其值为 DateTimeKind..::.Local，则该方法返回未更改的 time。如果其值为 DateTimeKind..::.Utc 或 DateTimeKind..::.Unspecified，则该方法假定 time 为 UTC 并将其转换为本地系统时间，而不调用 GetUtcOffset 方法。 尽管不是必须，但大多数情况下在 .NET Framework 2.0 版上运行的派生类应重写该方法的默认实现。在 .NET Framework 1.0 和 1.1 版中，ToLocalTime 方法调用 GetUtcOffset 方法，并在返回本地时间时调整为夏时制时间。然而，从 .NET Framework 2.0 开始，默认实现的行为取决于 time 参数的 Kind 属性。如果其值为 DateTimeKind..::.Local，则该方法返回未更改的 time。如果其值为 DateTimeKind..::.Utc 或 DateTimeKind..::.Unspecified，则该方法假定 time 为 UTC 并将其转换为本地系统时间，而不调用 GetUtcOffset 方法。

下面的代码提供 ToLocalTime 方法的默认实现的简单重写。在该代码中，internalTimeZone 变量表示 TimeZone 类的专用实例： 下面的代码提供 ToLocalTime 方法的默认实现的简单重写。在该代码中，internalTimeZone 变量表示 TimeZone 类的专用实例：

Public Overrides Function ToLocalTime(time As Date) As Date
   If time.Kind = DateTimeKind.Local Then
      Return time
   ElseIf time.Kind = DateTimeKind.Utc Then
      Dim returnTime As New Date(time.Ticks, DateTimeKind.Local)
      returnTime += me.GetUtcOffset(returnTime)
      if internalTimeZone.IsDaylightSavingTime(returnTime) Then
         returnTime -= New TimeSpan(1, 0, 0)
      End If
      Return returnTime
   Else
      Throw New ArgumentException("The source time zone cannot be determined.")
   End If
End Function

public override DateTime ToLocalTime(DateTime time)
{
   if (time.Kind == DateTimeKind.Local)
   {
      return time;
   }
   else if (time.Kind == DateTimeKind.Utc)
   {
      DateTime returnTime = new DateTime(time.Ticks, DateTimeKind.Local);
      returnTime += this.GetUtcOffset(returnTime);
      if (internalTimeZone.IsDaylightSavingTime(returnTime))
         returnTime -= new TimeSpan(1, 0, 0);
      return returnTime;
   }
   else
   {
      throw new ArgumentException("The source time zone cannot be determined.");
   }
}

下面的示例使用 ToLocalTime 方法，返回与数个协调世界时 (UTC) 时间相对应的本地时间。

' Example of the TimeZone.ToLocalTime( DateTime ) and
' TimeZone.GetUtcOffset( DateTime ) methods.
Imports System
Imports Microsoft.VisualBasic

Module UTCTimeDemo

    Sub Main( )

        Const headFmt As String = "{0,-20}{1,-20}{2,-12}{3}"

        ' Get the local time zone and a base Coordinated Universal
        ' Time (UTC).
        Dim localZone As TimeZone = TimeZone.CurrentTimeZone
        Dim baseUTC As DateTime = new DateTime( 2000, 1, 1 )

        Console.WriteLine( "This example of " & vbCrLf & _
            "   TimeZone.ToLocalTime( DateTime ) and" & vbCrLf & _
            "   TimeZone.GetUtcOffset( DateTime ) " & vbCrLf & _
            "generates the following output, which varies " & _
            "depending on the time zone " & vbCrLf & "in which " & _
            "it is run. The example creates several Coordinated " & _
            "Universal " & vbCrLf & "Times (UTC), displays the " & _
            "corresponding local times and UTC offsets, " & _
            vbCrLf & "and shows if the times occur in daylight " & _
            "saving time (DST)." & vbCrLf )
        Console.WriteLine( "Local time: {0}" & vbCrLf, _
            localZone.StandardName )

        Console.WriteLine( headFmt, "UTC", "Local Time", _
            " Offset", "DST?" )
        Console.WriteLine( headFmt, "---", "----------", _
            " ------", "----" )

        ' Generate several UTC times.
        Dim loopX As Integer
        For loopX = 0 to 10

            ' Calculate the local time and UTC offset.
            Dim localTime As DateTime = _
                localZone.ToLocalTime( baseUTC )
            Dim localOffset As TimeSpan = _
                localZone.GetUtcOffset( localTime )

            Console.WriteLine( "{0,-20:yyyy-MM-dd HH:mm}" & _
                "{1,-20:yyyy-MM-dd HH:mm}{2,-12}{3}", _
                baseUTC, localTime, localOffset, _
                localZone.IsDaylightSavingTime( localTime ) )

            ' Advance to another UTC.
            baseUTC = baseUTC.AddDays( 155.55 )
        Next loopX
    End Sub
End Module

' This example of
'    TimeZone.ToLocalTime( DateTime ) and
'    TimeZone.GetUtcOffset( DateTime )
' generates the following output, which varies depending on the time zone
' in which it is run. The example creates several Coordinated Universal
' Times (UTC), displays the corresponding local times and UTC offsets,
' and shows if the times occur in daylight saving time (DST).
'
' Local time: Pacific Standard Time
'
' UTC                 Local Time           Offset     DST?
' ---                 ----------           ------     ----
' 2000-01-01 00:00    1999-12-31 16:00    -08:00:00   False
' 2000-06-04 13:12    2000-06-04 06:12    -07:00:00   True
' 2000-11-07 02:24    2000-11-06 18:24    -08:00:00   False
' 2001-04-11 15:36    2001-04-11 08:36    -07:00:00   True
' 2001-09-14 04:48    2001-09-13 21:48    -07:00:00   True
' 2002-02-16 18:00    2002-02-16 10:00    -08:00:00   False
' 2002-07-22 07:12    2002-07-22 00:12    -07:00:00   True
' 2002-12-24 20:24    2002-12-24 12:24    -08:00:00   False
' 2003-05-29 09:36    2003-05-29 02:36    -07:00:00   True
' 2003-10-31 22:48    2003-10-31 14:48    -08:00:00   False
' 2004-04-04 12:00    2004-04-04 05:00    -07:00:00   True

// Example of the TimeZone.ToLocalTime( DateTime ) and
// TimeZone.GetUtcOffset( DateTime ) methods.
using System;

class UTCTimeDemo
{
    static void Main( )
    {
        const string headFmt = "{0,-20}{1,-20}{2,-12}{3}";

        // Get the local time zone and a base Coordinated Universal
        // Time (UTC).
        TimeZone localZone = TimeZone.CurrentTimeZone;
        DateTime baseUTC = new DateTime( 2000, 1, 1 );

        Console.WriteLine( "This example of \n" +
            "   TimeZone.ToLocalTime( DateTime ) and\n" +
            "   TimeZone.GetUtcOffset( DateTime ) \ngenerates the " +
            "following output, which varies depending on the time " +
            "zone \nin which it is run. The example creates several " +
            "Coordinated Universal \nTimes (UTC), displays the " +
            "corresponding local times and UTC offsets, \nand shows " +
            "if the times occur in daylight saving time (DST)." );
        Console.WriteLine( "\nLocal time: {0}\n",
            localZone.StandardName );

        Console.WriteLine( headFmt, "UTC", "Local Time",
            " Offset", "DST?" );
        Console.WriteLine( headFmt, "---", "----------",
            " ------", "----" );

        // Generate several UTC times.
        for( int loopX = 0; loopX <= 10; loopX++ )
        {
            // Calculate the local time and UTC offset.
            DateTime localTime = localZone.ToLocalTime( baseUTC );
            TimeSpan localOffset =
                localZone.GetUtcOffset( localTime );

            Console.WriteLine( "{0,-20:yyyy-MM-dd HH:mm}" +
                "{1,-20:yyyy-MM-dd HH:mm}{2,-12}{3}",
                baseUTC, localTime, localOffset,
                localZone.IsDaylightSavingTime( localTime ) );

            // Advance to another UTC.
            baseUTC = baseUTC.AddDays( 155.55 );
        }
    }
}

/*
This example of
   TimeZone.ToLocalTime( DateTime ) and
   TimeZone.GetUtcOffset( DateTime )
generates the following output, which varies depending on the time zone
in which it is run. The example creates several Coordinated Universal
Times (UTC), displays the corresponding local times and UTC offsets,
and shows if the times occur in daylight saving time (DST).

Local time: Pacific Standard Time

UTC                 Local Time           Offset     DST?
---                 ----------           ------     ----
2000-01-01 00:00    1999-12-31 16:00    -08:00:00   False
2000-06-04 13:12    2000-06-04 06:12    -07:00:00   True
2000-11-07 02:24    2000-11-06 18:24    -08:00:00   False
2001-04-11 15:36    2001-04-11 08:36    -07:00:00   True
2001-09-14 04:48    2001-09-13 21:48    -07:00:00   True
2002-02-16 18:00    2002-02-16 10:00    -08:00:00   False
2002-07-22 07:12    2002-07-22 00:12    -07:00:00   True
2002-12-24 20:24    2002-12-24 12:24    -08:00:00   False
2003-05-29 09:36    2003-05-29 02:36    -07:00:00   True
2003-10-31 22:48    2003-10-31 14:48    -08:00:00   False
2004-04-04 12:00    2004-04-04 05:00    -07:00:00   True
*/

// Example of the TimeZone::ToLocalTime( DateTime ) and
// TimeZone::GetUtcOffset( DateTime ) methods.
using namespace System;
int main()
{
   String^ headFmt = "{0,-20}{1,-20}{2,-12}{3}";

   // Get the local time zone and a base Coordinated Universal
   // Time (UTC).
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   DateTime baseUTC = DateTime(2000,1,1);
   Console::WriteLine( "This example of \n"
   "   TimeZone::ToLocalTime( DateTime ) and\n"
   "   TimeZone::GetUtcOffset( DateTime ) \ngenerates the "
   "following output, which varies depending on the time "
   "zone \nin which it is run. The example creates several "
   "Coordinated Universal \nTimes (UTC), displays the "
   "corresponding local times and UTC offsets, \nand shows "
   "if the times occur in daylight saving time (DST)." );
   Console::WriteLine( "\nLocal time: {0}\n", localZone->StandardName );
   Console::WriteLine( headFmt, "UTC", "Local Time", " Offset", "DST?" );
   Console::WriteLine( headFmt, "---", "----------", " ------", "----" );

   // Generate several UTC times.
   for ( int loopX = 0; loopX <= 10; loopX++ )
   {

      // Calculate the local time and UTC offset.
      DateTime localTime = localZone->ToLocalTime( baseUTC );
      TimeSpan localOffset = localZone->GetUtcOffset( localTime );
      Console::WriteLine( "{0,-20:yyyy-MM-dd HH:mm}"
      "{1,-20:yyyy-MM-dd HH:mm}{2,-12}{3}", baseUTC, localTime, localOffset, localZone->IsDaylightSavingTime( localTime ) );

      // Advance to another UTC.
      baseUTC = baseUTC.AddDays( 155.55 );

   }
}

/*
This example of
   TimeZone::ToLocalTime( DateTime ) and
   TimeZone::GetUtcOffset( DateTime )
generates the following output, which varies depending on the time zone
in which it is run. The example creates several Coordinated Universal
Times (UTC), displays the corresponding local times and UTC offsets,
and shows if the times occur in daylight saving time (DST).

Local time: Pacific Standard Time

UTC                 Local Time           Offset     DST?
---                 ----------           ------     ----
2000-01-01 00:00    1999-12-31 16:00    -08:00:00   False
2000-06-04 13:12    2000-06-04 06:12    -07:00:00   True
2000-11-07 02:24    2000-11-06 18:24    -08:00:00   False
2001-04-11 15:36    2001-04-11 08:36    -07:00:00   True
2001-09-14 04:48    2001-09-13 21:48    -07:00:00   True
2002-02-16 18:00    2002-02-16 10:00    -08:00:00   False
2002-07-22 07:12    2002-07-22 00:12    -07:00:00   True
2002-12-24 20:24    2002-12-24 12:24    -08:00:00   False
2003-05-29 09:36    2003-05-29 02:36    -07:00:00   True
2003-10-31 22:48    2003-10-31 14:48    -08:00:00   False
2004-04-04 12:00    2004-04-04 05:00    -07:00:00   True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
System 命名空间
ToUniversalTime
GetUtcOffset


TimeZone ..::.ToUniversalTime 方法

TimeZone
.
.
::
.
ToUniversalTime 方法
TimeZone 类

返回对应于指定时间的协调世界时 (UTC)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ToUniversalTime ( _
    time As DateTime _
) As DateTime
public virtual DateTime ToUniversalTime(
    DateTime time
)
public:
virtual DateTime ToUniversalTime(
    DateTime time
)
abstract ToUniversalTime :
        time:DateTime -> DateTime
override ToUniversalTime :
        time:DateTime -> DateTime

参数

time
类型： System DateTime
日期和时间。

返回值

类型： System DateTime
一个 DateTime 对象，其值为对应于 time 的协调世界时 (UTC)。

如果本地时区遵守夏时制，则执行转换时，ToUniversalTime 会将当前调整规则应用于 time 参数。

说明 说明

ToUniversalTime 方法只识别本地时区的当前夏时制调整规则。因此，只有在最新调整规则有效期间才能保证准确返回对应于特定本地时间的协调世界时 (UTC)。如果 time 为遵守先前调整规则的历史日期和时间值，则可能会返回不准确的结果。 ToUniversalTime 方法只识别本地时区的当前夏时制调整规则。因此，只有在最新调整规则有效期间才能保证准确返回对应于特定本地时间的协调世界时 (UTC)。如果 time 为遵守先前调整规则的历史日期和时间值，则可能会返回不准确的结果。 ToUniversalTime 方法只识别本地时区的当前夏时制调整规则。因此，只有在最新调整规则有效期间才能保证准确返回对应于特定本地时间的协调世界时 (UTC)。如果 time 为遵守先前调整规则的历史日期和时间值，则可能会返回不准确的结果。

如果 time 参数为不明确的时间，则该方法假定其为标准时间。（不明确的时间是指可在本地时区中映射为标准时间或夏时制的时间。）如果 time 为无效时间，则该方法只从本地时区的 UTC 偏移量中减去本地时间，以返回 UTC。（无效时间是指因应用夏时制调整规则而不存在的时间。） 如果 time 参数为不明确的时间，则该方法假定其为标准时间。（不明确的时间是指可在本地时区中映射为标准时间或夏时制的时间。）如果 time 为无效时间，则该方法只从本地时区的 UTC 偏移量中减去本地时间，以返回 UTC。（无效时间是指因应用夏时制调整规则而不存在的时间。） 如果 time 参数为不明确的时间，则该方法假定其为标准时间。（不明确的时间是指可在本地时区中映射为标准时间或夏时制的时间。）如果 time 为无效时间，则该方法只从本地时区的 UTC 偏移量中减去本地时间，以返回 UTC。（无效时间是指因应用夏时制调整规则而不存在的时间。）

由于相对于当前系统上的当前时区对 time 进行解释，因此如果在不同计算机上或者同一计算机上的不同时区下运行应用程序，则该方法返回的日期和时间可能会有所不同。对于日期和时间值必须表示单一、明确时间点的情况，请使用 DateTimeOffset 值来表示本地时间。 由于相对于当前系统上的当前时区对 time 进行解释，因此如果在不同计算机上或者同一计算机上的不同时区下运行应用程序，则该方法返回的日期和时间可能会有所不同。对于日期和时间值必须表示单一、明确时间点的情况，请使用 DateTimeOffset 值来表示本地时间。

ToUniversalTime 方法对应于 TimeZoneInfo..::.ConvertTimeToUtc(DateTime) 方法，后者的 DateTime 参数的 Kind 属性不等于 DateTimeKind..::.Utc。

下面的示例使用 ToUniversalTime 方法，返回与选定的本地时间相对应的协调世界时 (UTC) 时间。

' Example of the TimeZone.IsDaylightSavingTime( DateTime ),
' TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
' TimeZone.ToUniversalTime( DateTime ) methods.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module DaylightTimeDemo

    Sub Main( )

        Const headFmt As String = "{0,-22}{1,-10}{2,-10}{3,-10}{4}"

        ' Get the local time zone and a base local time.
        Dim localZone As TimeZone = TimeZone.CurrentTimeZone
        Dim localTime As DateTime = new DateTime( 2001, 1, 1 )

        Console.WriteLine( "This example of " & vbCrLf & _
            "   TimeZone.IsDaylightSavingTime( DateTime ), " & _
            vbCrLf & "   TimeZone.IsDaylightSavingTime( " & _
            "DateTime, DaylightTime ), and " & vbCrLf & _
            "   TimeZone.ToUniversalTime( DateTime )" & vbCrLf & _
            "generates the following output, which varies " & _
            "depending on the " & vbCrLf & "time zone in which " & _
            "it is run." & vbCrLf )
        Console.WriteLine( "The example creates " & _
            "several local times and the corresponding " & vbCrLf & _
            "Coordinated Universal Times (UTC) and shows if " & _
            "they occur in " & vbCrLf & "daylight saving time " & _
            "(DST), both for specified years and for " & vbCrLf & _
            "any year." & vbCrLf )
        Console.WriteLine( "Local time: {0}" & vbCrLf, _
            localZone.StandardName )

        Console.WriteLine( headFmt, "Local Date and Time", _
            "2001 DST?", "2002 DST?", "Any DST?", "Corresponding UTC" )
        Console.WriteLine( headFmt, "-------------------", _
            "---------", "---------", "--------", "-----------------" )

        ' Create DaylightTime objects for specific years.
        Dim daylight2001 As DaylightTime = _
            localZone.GetDaylightChanges( 2001 )
        Dim daylight2002 As DaylightTime = _
            localZone.GetDaylightChanges( 2002 )

        ' Generate several local times.
        Dim loopX As Integer
        For loopX = 0 to 10

            ' Calculate the corresponding UTC.
            Dim utcTime As DateTime = _
                localZone.ToUniversalTime( localTime )

            ' Show if dates and times occur in daylight saving
            ' time, for specified years and for any year.
            Console.WriteLine( "{0,-22:yyyy-MM-dd HH:mm}" & _
                "{1,-10}{2,-10}{3,-10}{4:yyyy-MM-dd HH:mm}", _
                localTime, _
                TimeZone.IsDaylightSavingTime( _
                    localTime, daylight2001 ), _
                TimeZone.IsDaylightSavingTime( _
                    localTime, daylight2002 ), _
                localZone.IsDaylightSavingTime( localTime ), _
                utcTime )

            ' Advance to another local time.
            localTime = localTime.AddDays( 109.1 )
        Next loopX
    End Sub
End Module

' This example of
'    TimeZone.IsDaylightSavingTime( DateTime ),
'    TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
'    TimeZone.ToUniversalTime( DateTime )
' generates the following output, which varies depending on the
' time zone in which it is run.
'
' The example creates several local times and the corresponding
' Coordinated Universal Times (UTC) and shows if they occur in
' daylight saving time (DST), both for specified years and for
' any year.
'
' Local time: Pacific Standard Time
'
' Local Date and Time   2001 DST? 2002 DST? Any DST?  Corresponding UTC
' -------------------   --------- --------- --------  -----------------
' 2001-01-01 00:00      False     False     False     2001-01-01 08:00
' 2001-04-20 02:24      True      False     True      2001-04-20 09:24
' 2001-08-07 04:48      True      False     True      2001-08-07 11:48
' 2001-11-24 07:12      False     False     False     2001-11-24 15:12
' 2002-03-13 09:36      False     False     False     2002-03-13 17:36
' 2002-06-30 12:00      False     True      True      2002-06-30 19:00
' 2002-10-17 14:24      False     True      True      2002-10-17 21:24
' 2003-02-03 16:48      False     False     False     2003-02-04 00:48
' 2003-05-23 19:12      False     False     True      2003-05-24 02:12
' 2003-09-09 21:36      False     False     True      2003-09-10 04:36
' 2003-12-28 00:00      False     False     False     2003-12-28 08:00

// Example of the TimeZone.IsDaylightSavingTime( DateTime ),
// TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
// TimeZone.ToUniversalTime( DateTime ) methods.
using System;
using System.Globalization;

class DaylightTimeDemo
{
    static void Main( )
    {
        const string headFmt = "{0,-22}{1,-10}{2,-10}{3,-10}{4}";

        // Get the local time zone and a base local time.
        TimeZone localZone = TimeZone.CurrentTimeZone;
        DateTime localTime = new DateTime( 2001, 1, 1 );

        Console.WriteLine( "This example of \n" +
            "   TimeZone.IsDaylightSavingTime( DateTime ), \n" +
            "   TimeZone.IsDaylightSavingTime( " +
            "DateTime, DaylightTime ), and \n" +
            "   TimeZone.ToUniversalTime( DateTime )\n" +
            "generates the following output, which varies " +
            "depending on the \ntime zone in which it is run.\n" );
        Console.WriteLine( "The example creates several local " +
            "times and the corresponding \nCoordinated Universal " +
            "Times (UTC) and shows if they occur in \ndaylight " +
            "saving time (DST), both for specified years " +
            "and for \nany year.\n" );
        Console.WriteLine( "Local time: {0}\n",
            localZone.StandardName );

        Console.WriteLine( headFmt, "Local Date and Time", "2001 DST?",
            "2002 DST?", "Any DST?", "Corresponding UTC" );
        Console.WriteLine( headFmt, "-------------------", "---------",
            "---------", "--------", "-----------------" );

        // Create DaylightTime objects for specific years.
        DaylightTime daylight2001 =
            localZone.GetDaylightChanges( 2001 );
        DaylightTime daylight2002 =
            localZone.GetDaylightChanges( 2002 );

        // Generate several local times.
        for( int loopX = 0; loopX <= 10; loopX++ )
        {
            // Calculate the corresponding UTC.
            DateTime utcTime =
                localZone.ToUniversalTime( localTime );

            // Show if dates and times occur in daylight saving
            // time, for specified years and for any year.
            Console.WriteLine( "{0,-22:yyyy-MM-dd HH:mm}" +
                "{1,-10}{2,-10}{3,-10}{4:yyyy-MM-dd HH:mm}",
                localTime,
                TimeZone.IsDaylightSavingTime(
                    localTime, daylight2001 ),
                TimeZone.IsDaylightSavingTime(
                    localTime, daylight2002 ),
                localZone.IsDaylightSavingTime( localTime ),
                utcTime );

            // Advance to another local time.
            localTime = localTime.AddDays( 109.1 );
        }
    }
}

/*
This example of
   TimeZone.IsDaylightSavingTime( DateTime ),
   TimeZone.IsDaylightSavingTime( DateTime, DaylightTime ), and
   TimeZone.ToUniversalTime( DateTime )
generates the following output, which varies depending on the
time zone in which it is run.

The example creates several local times and the corresponding
Coordinated Universal Times (UTC) and shows if they occur in
daylight saving time (DST), both for specified years and for
any year.

Local time: Pacific Standard Time

Local Date and Time   2001 DST? 2002 DST? Any DST?  Corresponding UTC
-------------------   --------- --------- --------  -----------------
2001-01-01 00:00      False     False     False     2001-01-01 08:00
2001-04-20 02:24      True      False     True      2001-04-20 09:24
2001-08-07 04:48      True      False     True      2001-08-07 11:48
2001-11-24 07:12      False     False     False     2001-11-24 15:12
2002-03-13 09:36      False     False     False     2002-03-13 17:36
2002-06-30 12:00      False     True      True      2002-06-30 19:00
2002-10-17 14:24      False     True      True      2002-10-17 21:24
2003-02-03 16:48      False     False     False     2003-02-04 00:48
2003-05-23 19:12      False     False     True      2003-05-24 02:12
2003-09-09 21:36      False     False     True      2003-09-10 04:36
2003-12-28 00:00      False     False     False     2003-12-28 08:00
*/

// Example of the TimeZone::IsDaylightSavingTime( DateTime ),
// TimeZone::IsDaylightSavingTime( DateTime, DaylightTime ), and
// TimeZone::ToUniversalTime( DateTime ) methods.
using namespace System;
using namespace System::Globalization;
int main()
{
   String^ headFmt = "{0,-22}{1,-10}{2,-10}{3,-10}{4}";

   // Get the local time zone and a base local time.
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   DateTime localTime = DateTime(2001,1,1);
   Console::WriteLine( "This example of \n"
   "   TimeZone::IsDaylightSavingTime( DateTime ), \n"
   "   TimeZone::IsDaylightSavingTime( "
   "DateTime, DaylightTime* ), and \n"
   "   TimeZone::ToUniversalTime( DateTime )\n"
   "generates the following output, which varies "
   "depending on the \ntime zone in which it is run.\n" );
   Console::WriteLine( "The example creates several local "
   "times and the corresponding \nCoordinated Universal "
   "Times (UTC) and shows if they occur in \ndaylight "
   "saving time (DST), both for specified years "
   "and for \nany year.\n" );
   Console::WriteLine( "Local time: {0}\n", localZone->StandardName );
   Console::WriteLine( headFmt, "Local Date and Time", "2001 DST?", "2002 DST?", "Any DST?", "Corresponding UTC" );
   Console::WriteLine( headFmt, "-------------------", "---------", "---------", "--------", "-----------------" );

   // Create DaylightTime objects for specific years.
   DaylightTime^ daylight2001 = localZone->GetDaylightChanges( 2001 );
   DaylightTime^ daylight2002 = localZone->GetDaylightChanges( 2002 );

   // Generate several local times.
   for ( int loopX = 0; loopX <= 10; loopX++ )
   {

      // Calculate the corresponding UTC.
      DateTime utcTime = localZone->ToUniversalTime( localTime );

      // Show if dates and times occur in daylight saving
      // time, for specified years and for any year.
      Console::WriteLine( "{0,-22:yyyy-MM-dd HH:mm}"
      "{1,-10}{2,-10}{3,-10}{4:yyyy-MM-dd HH:mm}", localTime, TimeZone::IsDaylightSavingTime( localTime, daylight2001 ), TimeZone::IsDaylightSavingTime( localTime, daylight2002 ), localZone->IsDaylightSavingTime( localTime ), utcTime );

      // Advance to another local time.
      localTime = localTime.AddDays( 109.1 );

   }
}

/*
This example of
   TimeZone::IsDaylightSavingTime( DateTime ),
   TimeZone::IsDaylightSavingTime( DateTime, DaylightTime* ), and
   TimeZone::ToUniversalTime( DateTime )
generates the following output, which varies depending on the
time zone in which it is run.

The example creates several local times and the corresponding
Coordinated Universal Times (UTC) and shows if they occur in
daylight saving time (DST), both for specified years and for
any year.

Local time: Pacific Standard Time

Local Date and Time   2001 DST? 2002 DST? Any DST?  Corresponding UTC
-------------------   --------- --------- --------  -----------------
2001-01-01 00:00      False     False     False     2001-01-01 08:00
2001-04-20 02:24      True      False     True      2001-04-20 09:24
2001-08-07 04:48      True      False     True      2001-08-07 11:48
2001-11-24 07:12      False     False     False     2001-11-24 15:12
2002-03-13 09:36      False     False     False     2002-03-13 17:36
2002-06-30 12:00      False     True      True      2002-06-30 19:00
2002-10-17 14:24      False     True      True      2002-10-17 21:24
2003-02-03 16:48      False     False     False     2003-02-04 00:48
2003-05-23 19:12      False     False     True      2003-05-24 02:12
2003-09-09 21:36      False     False     True      2003-09-10 04:36
2003-12-28 00:00      False     False     False     2003-12-28 08:00
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
System 命名空间
ToLocalTime
GetUtcOffset


TimeZone 属性

TimeZone 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZone 类

TimeZone 类型公开以下成员。

名称 说明
页首

参考

TimeZone 类
System 命名空间


TimeZone ..::.CurrentTimeZone 属性

TimeZone
.
.
::
.
CurrentTimeZone 属性
TimeZone 类

获取当前计算机的时区。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property CurrentTimeZone As TimeZone
    Get
public static TimeZone CurrentTimeZone { get; }
public:
static property TimeZone^ CurrentTimeZone {
    TimeZone^ get ();
}
static member CurrentTimeZone : TimeZone

属性值

类型： System TimeZone
一个 TimeZone 对象，表示当前的本地时区。

CurrentTimeZone 属性对应于 TimeZoneInfo..::.Local 属性。

下面的示例引用 CurrentTimeZone 属性并显示本地时区的标准时间和夏时制时间的名称。

' Example of selected TimeZone class elements.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module TimeZoneDemo

    Sub Main( )

        Const dataFmt As String = "{0,-30}{1}"
        Const timeFmt As String = "{0,-30}{1:yyyy-MM-dd HH:mm}"

        Console.WriteLine( "This example of selected " & _
            "TimeZone class elements generates the following " & _
            vbCrLf & "output, which varies depending on the " & _
            "time zone in which it is run." & vbCrLf )

        ' Get the local time zone and the current local time and year.
        Dim localZone As TimeZone = TimeZone.CurrentTimeZone
        Dim currentDate As DateTime = DateTime.Now
        Dim currentYear As Integer = currentDate.Year

        ' Display the names for standard time and daylight saving
        ' time for the local time zone.
        Console.WriteLine( dataFmt, "Standard time name:", _
            localZone.StandardName )
        Console.WriteLine( dataFmt, "Daylight saving time name:", _
            localZone.DaylightName )

        ' Display the current date and time and show if they occur
        ' in daylight saving time.
        Console.WriteLine( vbCrLf & timeFmt, _
            "Current date and time:", currentDate )
        Console.WriteLine( dataFmt, "Daylight saving time?", _
            localZone.IsDaylightSavingTime( currentDate ) )

        ' Get the current Coordinated Universal Time (UTC) and UTC
        ' offset.
        Dim currentUTC As DateTime = _
            localZone.ToUniversalTime( currentDate )
        Dim currentOffset As TimeSpan = _
            localZone.GetUtcOffset( currentDate )

        Console.WriteLine( timeFmt, "Coordinated Universal Time:", _
            currentUTC )
        Console.WriteLine( dataFmt, "UTC offset:", currentOffset )

        ' Get the DaylightTime object for the current year.
        Dim daylight As DaylightTime = _
            localZone.GetDaylightChanges( currentYear )

        ' Display the daylight saving time range for the current year.
        Console.WriteLine( vbCrLf & _
            "Daylight saving time for year {0}:", currentYear )
        Console.WriteLine( "{0:yyyy-MM-dd HH:mm} to " & _
            "{1:yyyy-MM-dd HH:mm}, delta: {2}", _
            daylight.Start, daylight.End, daylight.Delta )
    End Sub
End Module

'This example of selected TimeZone class elements generates the following
'output, which varies depending on the time zone in which it is run.
'
'Standard time name:           Pacific Standard Time
'Daylight saving time name:    Pacific Daylight Time
'
'Current date and time:        2006-01-06 16:47
'Daylight saving time?         False
'Coordinated Universal Time:   2006-01-07 00:47
'UTC offset:                   -08:00:00
'
'Daylight saving time for year 2006:
'2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00

// Example of selected TimeZone class elements.
using System;
using System.Globalization;

class TimeZoneDemo
{
    static void Main( )
    {
        const string dataFmt = "{0,-30}{1}";
        const string timeFmt = "{0,-30}{1:yyyy-MM-dd HH:mm}";

        Console.WriteLine(
            "This example of selected TimeZone class " +
            "elements generates the following \n" +
            "output, which varies depending on the " +
            "time zone in which it is run.\n" );

        // Get the local time zone and the current local time and year.
        TimeZone localZone = TimeZone.CurrentTimeZone;
        DateTime currentDate = DateTime.Now;
        int      currentYear = currentDate.Year;

        // Display the names for standard time and daylight saving
        // time for the local time zone.
        Console.WriteLine( dataFmt, "Standard time name:",
            localZone.StandardName );
        Console.WriteLine( dataFmt, "Daylight saving time name:",
            localZone.DaylightName );

        // Display the current date and time and show if they occur
        // in daylight saving time.
        Console.WriteLine( "\n" + timeFmt, "Current date and time:",
            currentDate );
        Console.WriteLine( dataFmt, "Daylight saving time?",
            localZone.IsDaylightSavingTime( currentDate ) );

        // Get the current Coordinated Universal Time (UTC) and UTC
        // offset.
        DateTime currentUTC =
            localZone.ToUniversalTime( currentDate );
        TimeSpan currentOffset =
            localZone.GetUtcOffset( currentDate );

        Console.WriteLine( timeFmt, "Coordinated Universal Time:",
            currentUTC );
        Console.WriteLine( dataFmt, "UTC offset:", currentOffset );

        // Get the DaylightTime object for the current year.
        DaylightTime daylight =
            localZone.GetDaylightChanges( currentYear );

        // Display the daylight saving time range for the current year.
        Console.WriteLine(
            "\nDaylight saving time for year {0}:", currentYear );
        Console.WriteLine( "{0:yyyy-MM-dd HH:mm} to " +
            "{1:yyyy-MM-dd HH:mm}, delta: {2}",
            daylight.Start, daylight.End, daylight.Delta );
    }
}

/*
This example of selected TimeZone class elements generates the following
output, which varies depending on the time zone in which it is run.

Standard time name:           Pacific Standard Time
Daylight saving time name:    Pacific Daylight Time

Current date and time:        2006-01-06 16:47
Daylight saving time?         False
Coordinated Universal Time:   2006-01-07 00:47
UTC offset:                   -08:00:00

Daylight saving time for year 2006:
2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00
*/

// Example of selected TimeZone class elements.
using namespace System;
using namespace System::Globalization;
int main()
{
   String^ dataFmt = "{0,-30}{1}";
   String^ timeFmt = "{0,-30}{1:yyyy-MM-dd HH:mm}";
   Console::WriteLine( "This example of selected TimeZone class "
   "elements generates the following \n"
   "output, which varies depending on the "
   "time zone in which it is run.\n" );

   // Get the local time zone and the current local time and year.
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   DateTime currentDate = DateTime::Now;
   int currentYear = currentDate.Year;

   // Display the names for standard time and daylight saving
   // time for the local time zone.
   Console::WriteLine( dataFmt, "Standard time name:", localZone->StandardName );
   Console::WriteLine( dataFmt, "Daylight saving time name:", localZone->DaylightName );

   // Display the current date and time and show if they occur
   // in daylight saving time.
   Console::WriteLine( String::Concat( "\n", timeFmt ), "Current date and time:", currentDate );
   Console::WriteLine( dataFmt, "Daylight saving time?", localZone->IsDaylightSavingTime( currentDate ) );

   // Get the current Coordinated Universal Time (UTC) and UTC
   // offset.
   DateTime currentUTC = localZone->ToUniversalTime( currentDate );
   TimeSpan currentOffset = localZone->GetUtcOffset( currentDate );
   Console::WriteLine( timeFmt, "Coordinated Universal Time:", currentUTC );
   Console::WriteLine( dataFmt, "UTC offset:", currentOffset );

   // Get the DaylightTime object for the current year.
   DaylightTime^ daylight = localZone->GetDaylightChanges( currentYear );

   // Display the daylight saving time range for the current year.
   Console::WriteLine( "\nDaylight saving time for year {0}:", currentYear );
   Console::WriteLine( "{0:yyyy-MM-dd HH:mm} to "
   "{1:yyyy-MM-dd HH:mm}, delta: {2}", daylight->Start, daylight->End, daylight->Delta );
}

/*
This example of selected TimeZone class elements generates the following
output, which varies depending on the time zone in which it is run.

Standard time name:           Pacific Standard Time
Daylight saving time name:    Pacific Daylight Time

Current date and time:        2006-01-06 16:47
Daylight saving time?         False
Coordinated Universal Time:   2006-01-07 00:47
UTC offset:                   -08:00:00

Daylight saving time for year 2006:
2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
System 命名空间


TimeZone ..::.DaylightName 属性

TimeZone
.
.
::
.
DaylightName 属性
TimeZone 类

获取夏时制时区名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property DaylightName As String
    Get
public abstract string DaylightName { get; }
public:
virtual property String^ DaylightName {
    String^ get () abstract;
}
abstract DaylightName : string

属性值

类型： System String
夏时制时区名称。

如果时区中没有使用夏时制，则返回空字符串 ("")。

DaylightName 属性对应于 TimeZoneInfo..::.DaylightName 属性。

下面的示例引用并显示当前时区的 DaylightName 属性。

' Example of selected TimeZone class elements.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module TimeZoneDemo

    Sub Main( )

        Const dataFmt As String = "{0,-30}{1}"
        Const timeFmt As String = "{0,-30}{1:yyyy-MM-dd HH:mm}"

        Console.WriteLine( "This example of selected " & _
            "TimeZone class elements generates the following " & _
            vbCrLf & "output, which varies depending on the " & _
            "time zone in which it is run." & vbCrLf )

        ' Get the local time zone and the current local time and year.
        Dim localZone As TimeZone = TimeZone.CurrentTimeZone
        Dim currentDate As DateTime = DateTime.Now
        Dim currentYear As Integer = currentDate.Year

        ' Display the names for standard time and daylight saving
        ' time for the local time zone.
        Console.WriteLine( dataFmt, "Standard time name:", _
            localZone.StandardName )
        Console.WriteLine( dataFmt, "Daylight saving time name:", _
            localZone.DaylightName )

        ' Display the current date and time and show if they occur
        ' in daylight saving time.
        Console.WriteLine( vbCrLf & timeFmt, _
            "Current date and time:", currentDate )
        Console.WriteLine( dataFmt, "Daylight saving time?", _
            localZone.IsDaylightSavingTime( currentDate ) )

        ' Get the current Coordinated Universal Time (UTC) and UTC
        ' offset.
        Dim currentUTC As DateTime = _
            localZone.ToUniversalTime( currentDate )
        Dim currentOffset As TimeSpan = _
            localZone.GetUtcOffset( currentDate )

        Console.WriteLine( timeFmt, "Coordinated Universal Time:", _
            currentUTC )
        Console.WriteLine( dataFmt, "UTC offset:", currentOffset )

        ' Get the DaylightTime object for the current year.
        Dim daylight As DaylightTime = _
            localZone.GetDaylightChanges( currentYear )

        ' Display the daylight saving time range for the current year.
        Console.WriteLine( vbCrLf & _
            "Daylight saving time for year {0}:", currentYear )
        Console.WriteLine( "{0:yyyy-MM-dd HH:mm} to " & _
            "{1:yyyy-MM-dd HH:mm}, delta: {2}", _
            daylight.Start, daylight.End, daylight.Delta )
    End Sub
End Module

'This example of selected TimeZone class elements generates the following
'output, which varies depending on the time zone in which it is run.
'
'Standard time name:           Pacific Standard Time
'Daylight saving time name:    Pacific Daylight Time
'
'Current date and time:        2006-01-06 16:47
'Daylight saving time?         False
'Coordinated Universal Time:   2006-01-07 00:47
'UTC offset:                   -08:00:00
'
'Daylight saving time for year 2006:
'2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00

// Example of selected TimeZone class elements.
using System;
using System.Globalization;

class TimeZoneDemo
{
    static void Main( )
    {
        const string dataFmt = "{0,-30}{1}";
        const string timeFmt = "{0,-30}{1:yyyy-MM-dd HH:mm}";

        Console.WriteLine(
            "This example of selected TimeZone class " +
            "elements generates the following \n" +
            "output, which varies depending on the " +
            "time zone in which it is run.\n" );

        // Get the local time zone and the current local time and year.
        TimeZone localZone = TimeZone.CurrentTimeZone;
        DateTime currentDate = DateTime.Now;
        int      currentYear = currentDate.Year;

        // Display the names for standard time and daylight saving
        // time for the local time zone.
        Console.WriteLine( dataFmt, "Standard time name:",
            localZone.StandardName );
        Console.WriteLine( dataFmt, "Daylight saving time name:",
            localZone.DaylightName );

        // Display the current date and time and show if they occur
        // in daylight saving time.
        Console.WriteLine( "\n" + timeFmt, "Current date and time:",
            currentDate );
        Console.WriteLine( dataFmt, "Daylight saving time?",
            localZone.IsDaylightSavingTime( currentDate ) );

        // Get the current Coordinated Universal Time (UTC) and UTC
        // offset.
        DateTime currentUTC =
            localZone.ToUniversalTime( currentDate );
        TimeSpan currentOffset =
            localZone.GetUtcOffset( currentDate );

        Console.WriteLine( timeFmt, "Coordinated Universal Time:",
            currentUTC );
        Console.WriteLine( dataFmt, "UTC offset:", currentOffset );

        // Get the DaylightTime object for the current year.
        DaylightTime daylight =
            localZone.GetDaylightChanges( currentYear );

        // Display the daylight saving time range for the current year.
        Console.WriteLine(
            "\nDaylight saving time for year {0}:", currentYear );
        Console.WriteLine( "{0:yyyy-MM-dd HH:mm} to " +
            "{1:yyyy-MM-dd HH:mm}, delta: {2}",
            daylight.Start, daylight.End, daylight.Delta );
    }
}

/*
This example of selected TimeZone class elements generates the following
output, which varies depending on the time zone in which it is run.

Standard time name:           Pacific Standard Time
Daylight saving time name:    Pacific Daylight Time

Current date and time:        2006-01-06 16:47
Daylight saving time?         False
Coordinated Universal Time:   2006-01-07 00:47
UTC offset:                   -08:00:00

Daylight saving time for year 2006:
2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00
*/

// Example of selected TimeZone class elements.
using namespace System;
using namespace System::Globalization;
int main()
{
   String^ dataFmt = "{0,-30}{1}";
   String^ timeFmt = "{0,-30}{1:yyyy-MM-dd HH:mm}";
   Console::WriteLine( "This example of selected TimeZone class "
   "elements generates the following \n"
   "output, which varies depending on the "
   "time zone in which it is run.\n" );

   // Get the local time zone and the current local time and year.
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   DateTime currentDate = DateTime::Now;
   int currentYear = currentDate.Year;

   // Display the names for standard time and daylight saving
   // time for the local time zone.
   Console::WriteLine( dataFmt, "Standard time name:", localZone->StandardName );
   Console::WriteLine( dataFmt, "Daylight saving time name:", localZone->DaylightName );

   // Display the current date and time and show if they occur
   // in daylight saving time.
   Console::WriteLine( String::Concat( "\n", timeFmt ), "Current date and time:", currentDate );
   Console::WriteLine( dataFmt, "Daylight saving time?", localZone->IsDaylightSavingTime( currentDate ) );

   // Get the current Coordinated Universal Time (UTC) and UTC
   // offset.
   DateTime currentUTC = localZone->ToUniversalTime( currentDate );
   TimeSpan currentOffset = localZone->GetUtcOffset( currentDate );
   Console::WriteLine( timeFmt, "Coordinated Universal Time:", currentUTC );
   Console::WriteLine( dataFmt, "UTC offset:", currentOffset );

   // Get the DaylightTime object for the current year.
   DaylightTime^ daylight = localZone->GetDaylightChanges( currentYear );

   // Display the daylight saving time range for the current year.
   Console::WriteLine( "\nDaylight saving time for year {0}:", currentYear );
   Console::WriteLine( "{0:yyyy-MM-dd HH:mm} to "
   "{1:yyyy-MM-dd HH:mm}, delta: {2}", daylight->Start, daylight->End, daylight->Delta );
}

/*
This example of selected TimeZone class elements generates the following
output, which varies depending on the time zone in which it is run.

Standard time name:           Pacific Standard Time
Daylight saving time name:    Pacific Daylight Time

Current date and time:        2006-01-06 16:47
Daylight saving time?         False
Coordinated Universal Time:   2006-01-07 00:47
UTC offset:                   -08:00:00

Daylight saving time for year 2006:
2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
System 命名空间


TimeZone ..::.StandardName 属性

TimeZone
.
.
::
.
StandardName 属性
TimeZone 类

获取标准时区名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property StandardName As String
    Get
public abstract string StandardName { get; }
public:
virtual property String^ StandardName {
    String^ get () abstract;
}
abstract StandardName : string

属性值

类型： System String
标准时区名称。
异常 | 条件
ArgumentNullException | 尝试将该属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

StandardName 属性对应于 TimeZoneInfo..::.StandardName 属性。

下面的示例引用并显示当前时区的 StandardName 属性。

' Example of selected TimeZone class elements.
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic

Module TimeZoneDemo

    Sub Main( )

        Const dataFmt As String = "{0,-30}{1}"
        Const timeFmt As String = "{0,-30}{1:yyyy-MM-dd HH:mm}"

        Console.WriteLine( "This example of selected " & _
            "TimeZone class elements generates the following " & _
            vbCrLf & "output, which varies depending on the " & _
            "time zone in which it is run." & vbCrLf )

        ' Get the local time zone and the current local time and year.
        Dim localZone As TimeZone = TimeZone.CurrentTimeZone
        Dim currentDate As DateTime = DateTime.Now
        Dim currentYear As Integer = currentDate.Year

        ' Display the names for standard time and daylight saving
        ' time for the local time zone.
        Console.WriteLine( dataFmt, "Standard time name:", _
            localZone.StandardName )
        Console.WriteLine( dataFmt, "Daylight saving time name:", _
            localZone.DaylightName )

        ' Display the current date and time and show if they occur
        ' in daylight saving time.
        Console.WriteLine( vbCrLf & timeFmt, _
            "Current date and time:", currentDate )
        Console.WriteLine( dataFmt, "Daylight saving time?", _
            localZone.IsDaylightSavingTime( currentDate ) )

        ' Get the current Coordinated Universal Time (UTC) and UTC
        ' offset.
        Dim currentUTC As DateTime = _
            localZone.ToUniversalTime( currentDate )
        Dim currentOffset As TimeSpan = _
            localZone.GetUtcOffset( currentDate )

        Console.WriteLine( timeFmt, "Coordinated Universal Time:", _
            currentUTC )
        Console.WriteLine( dataFmt, "UTC offset:", currentOffset )

        ' Get the DaylightTime object for the current year.
        Dim daylight As DaylightTime = _
            localZone.GetDaylightChanges( currentYear )

        ' Display the daylight saving time range for the current year.
        Console.WriteLine( vbCrLf & _
            "Daylight saving time for year {0}:", currentYear )
        Console.WriteLine( "{0:yyyy-MM-dd HH:mm} to " & _
            "{1:yyyy-MM-dd HH:mm}, delta: {2}", _
            daylight.Start, daylight.End, daylight.Delta )
    End Sub
End Module

'This example of selected TimeZone class elements generates the following
'output, which varies depending on the time zone in which it is run.
'
'Standard time name:           Pacific Standard Time
'Daylight saving time name:    Pacific Daylight Time
'
'Current date and time:        2006-01-06 16:47
'Daylight saving time?         False
'Coordinated Universal Time:   2006-01-07 00:47
'UTC offset:                   -08:00:00
'
'Daylight saving time for year 2006:
'2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00

// Example of selected TimeZone class elements.
using System;
using System.Globalization;

class TimeZoneDemo
{
    static void Main( )
    {
        const string dataFmt = "{0,-30}{1}";
        const string timeFmt = "{0,-30}{1:yyyy-MM-dd HH:mm}";

        Console.WriteLine(
            "This example of selected TimeZone class " +
            "elements generates the following \n" +
            "output, which varies depending on the " +
            "time zone in which it is run.\n" );

        // Get the local time zone and the current local time and year.
        TimeZone localZone = TimeZone.CurrentTimeZone;
        DateTime currentDate = DateTime.Now;
        int      currentYear = currentDate.Year;

        // Display the names for standard time and daylight saving
        // time for the local time zone.
        Console.WriteLine( dataFmt, "Standard time name:",
            localZone.StandardName );
        Console.WriteLine( dataFmt, "Daylight saving time name:",
            localZone.DaylightName );

        // Display the current date and time and show if they occur
        // in daylight saving time.
        Console.WriteLine( "\n" + timeFmt, "Current date and time:",
            currentDate );
        Console.WriteLine( dataFmt, "Daylight saving time?",
            localZone.IsDaylightSavingTime( currentDate ) );

        // Get the current Coordinated Universal Time (UTC) and UTC
        // offset.
        DateTime currentUTC =
            localZone.ToUniversalTime( currentDate );
        TimeSpan currentOffset =
            localZone.GetUtcOffset( currentDate );

        Console.WriteLine( timeFmt, "Coordinated Universal Time:",
            currentUTC );
        Console.WriteLine( dataFmt, "UTC offset:", currentOffset );

        // Get the DaylightTime object for the current year.
        DaylightTime daylight =
            localZone.GetDaylightChanges( currentYear );

        // Display the daylight saving time range for the current year.
        Console.WriteLine(
            "\nDaylight saving time for year {0}:", currentYear );
        Console.WriteLine( "{0:yyyy-MM-dd HH:mm} to " +
            "{1:yyyy-MM-dd HH:mm}, delta: {2}",
            daylight.Start, daylight.End, daylight.Delta );
    }
}

/*
This example of selected TimeZone class elements generates the following
output, which varies depending on the time zone in which it is run.

Standard time name:           Pacific Standard Time
Daylight saving time name:    Pacific Daylight Time

Current date and time:        2006-01-06 16:47
Daylight saving time?         False
Coordinated Universal Time:   2006-01-07 00:47
UTC offset:                   -08:00:00

Daylight saving time for year 2006:
2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00
*/

// Example of selected TimeZone class elements.
using namespace System;
using namespace System::Globalization;
int main()
{
   String^ dataFmt = "{0,-30}{1}";
   String^ timeFmt = "{0,-30}{1:yyyy-MM-dd HH:mm}";
   Console::WriteLine( "This example of selected TimeZone class "
   "elements generates the following \n"
   "output, which varies depending on the "
   "time zone in which it is run.\n" );

   // Get the local time zone and the current local time and year.
   TimeZone^ localZone = TimeZone::CurrentTimeZone;
   DateTime currentDate = DateTime::Now;
   int currentYear = currentDate.Year;

   // Display the names for standard time and daylight saving
   // time for the local time zone.
   Console::WriteLine( dataFmt, "Standard time name:", localZone->StandardName );
   Console::WriteLine( dataFmt, "Daylight saving time name:", localZone->DaylightName );

   // Display the current date and time and show if they occur
   // in daylight saving time.
   Console::WriteLine( String::Concat( "\n", timeFmt ), "Current date and time:", currentDate );
   Console::WriteLine( dataFmt, "Daylight saving time?", localZone->IsDaylightSavingTime( currentDate ) );

   // Get the current Coordinated Universal Time (UTC) and UTC
   // offset.
   DateTime currentUTC = localZone->ToUniversalTime( currentDate );
   TimeSpan currentOffset = localZone->GetUtcOffset( currentDate );
   Console::WriteLine( timeFmt, "Coordinated Universal Time:", currentUTC );
   Console::WriteLine( dataFmt, "UTC offset:", currentOffset );

   // Get the DaylightTime object for the current year.
   DaylightTime^ daylight = localZone->GetDaylightChanges( currentYear );

   // Display the daylight saving time range for the current year.
   Console::WriteLine( "\nDaylight saving time for year {0}:", currentYear );
   Console::WriteLine( "{0:yyyy-MM-dd HH:mm} to "
   "{1:yyyy-MM-dd HH:mm}, delta: {2}", daylight->Start, daylight->End, daylight->Delta );
}

/*
This example of selected TimeZone class elements generates the following
output, which varies depending on the time zone in which it is run.

Standard time name:           Pacific Standard Time
Daylight saving time name:    Pacific Daylight Time

Current date and time:        2006-01-06 16:47
Daylight saving time?         False
Coordinated Universal Time:   2006-01-07 00:47
UTC offset:                   -08:00:00

Daylight saving time for year 2006:
2006-04-02 02:00 to 2006-10-29 02:00, delta: 01:00:00
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TimeZone 类
TimeZone 成员
System 命名空间
String


TimeZoneInfo 类

TimeZoneInfo 类
成员

表示世界上的任何时区。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public NotInheritable Class TimeZoneInfo _
    Implements IEquatable(Of TimeZoneInfo), ISerializable,  _
    IDeserializationCallback
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class TimeZoneInfo : IEquatable<TimeZoneInfo>,
    ISerializable, IDeserializationCallback
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public ref class TimeZoneInfo sealed : IEquatable<TimeZoneInfo^>,
    ISerializable, IDeserializationCallback
[<SealedAttribute>]
[<SerializableAttribute>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type TimeZoneInfo =
    class
        interface IEquatable<TimeZoneInfo>
        interface ISerializable
        interface IDeserializationCallback
    end

时区是使用同一时间的地理区域。

TimeZoneInfo 类对 TimeZone 类进行了显著增强，而后者仅提供有限的功能。

TimeZone 类只识别本地时区，但可以在协调世界时 (UTC) 和本地时间之间转换时间。TimeZoneInfo 对象可以表示任意时区，且 TimeZoneInfo 类的方法可用于将一个时区的时间转换为其他任意时区的相应时间。TimeZoneInfo 类的成员支持以下操作： TimeZone 类只识别本地时区，但可以在协调世界时 (UTC) 和本地时间之间转换时间。TimeZoneInfo 对象可以表示任意时区，且 TimeZoneInfo 类的方法可用于将一个时区的时间转换为其他任意时区的相应时间。TimeZoneInfo 类的成员支持以下操作： TimeZone 类只识别本地时区，但可以在协调世界时 (UTC) 和本地时间之间转换时间。TimeZoneInfo 对象可以表示任意时区，且 TimeZoneInfo 类的方法可用于将一个时区的时间转换为其他任意时区的相应时间。TimeZoneInfo 类的成员支持以下操作：

  • 检索操作系统已定义的时区。

  • 枚举系统上可用的时区。

  • 在不同时区之间转换时间。

  • 创建操作系统尚未定义的新时区。

  • 序列化时区，供以后检索使用。

说明 说明

TimeZoneInfo 类的实例是不可变的。一旦实例化对象后，就无法修改其值。 TimeZoneInfo 类的实例是不可变的。一旦实例化对象后，就无法修改其值。

您不能使用 new 关键字实例化 TimeZoneInfo 对象。相反，您必须调用下表所示的 TimeZoneInfo 类的静态成员之一。 您不能使用 new 关键字实例化 TimeZoneInfo 对象。相反，您必须调用下表所示的 TimeZoneInfo 类的静态成员之一。

静态成员名 | 说明
CreateCustomTimeZone 方法 | 使用应用程序提供的数据创建自定义时区。
FindSystemTimeZoneById 方法 | 根据时区的标识符实例化在系统注册表中定义的时区。
FromSerializedString 方法 | 反序列化一个字符串值，以重新创建先前已序列化的 TimeZoneInfo 对象。
GetSystemTimeZones 方法 | 返回 TimeZoneInfo 对象的可枚举的 ReadOnlyCollection<(Of <(T>)>)，它表示本地系统上可用的所有时区。
Local 属性 | 实例化表示本地时区的 TimeZoneInfo 对象。
Utc 属性 | 实例化表示 UTC 时区的 TimeZoneInfo 对象。

可以使用 CreateCustomTimeZone 方法创建在本地系统注册表中未定义的时区。然后可使用 ToSerializedString 属性将时区对象的信息保存为字符串，该字符串可以以应用程序可访问的某种格式存储。使用 FromSerializedString 方法可将序列化字符串转换回 TimeZoneInfo 对象。 可以使用 CreateCustomTimeZone 方法创建在本地系统注册表中未定义的时区。然后可使用 ToSerializedString 属性将时区对象的信息保存为字符串，该字符串可以以应用程序可访问的某种格式存储。使用 FromSerializedString 方法可将序列化字符串转换回 TimeZoneInfo 对象。 可以使用 CreateCustomTimeZone 方法创建在本地系统注册表中未定义的时区。然后可使用 ToSerializedString 属性将时区对象的信息保存为字符串，该字符串可以以应用程序可访问的某种格式存储。使用 FromSerializedString 方法可将序列化字符串转换回 TimeZoneInfo 对象。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

System System..::.TimeZoneInfoTimeZoneInfo
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 成员
System 命名空间

其他资源

时间和时区
时区概述


TimeZoneInfo 成员

TimeZoneInfo 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

表示世界上的任何时区。

TimeZoneInfo 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TimeZoneInfo 类
System 命名空间


TimeZoneInfo 方法

TimeZoneInfo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

TimeZoneInfo 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

TimeZoneInfo 类
System 命名空间


TimeZoneInfo ..::.ClearCachedData 方法

TimeZoneInfo
.
.
::
.
ClearCachedData 方法
TimeZoneInfo 类

清除已缓存的时区数据。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Sub ClearCachedData
public static void ClearCachedData()
public:
static void ClearCachedData()
static member ClearCachedData : unit -> unit

已缓存的时区数据包括以下时区的相关数据：本地时区、协调世界时 (UTC) 时区以及任何使用 FindSystemTimeZoneById 和 GetSystemTimeZones 之类的方法检索的时区。

您可以调用 ClearCachedData 方法来减小时区信息的应用程序缓存的专用内存，或者反映本地系统的时区已经更改这一事实。

不建议将引用存储至本地时区和 UTC 时区。调用 ClearCachedData 方法后，这些对象变量将成为未定义的 TimeZoneInfo 对象，不再引用 TimeZoneInfo..::.Local 或 TimeZoneInfo..::.Utc。例如，在下面的代码中，对 TimeZoneInfo..::.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法的第二次调用引发 ArgumentException，因为 local 变量不再被视为与 TimeZoneInfo..::.Local 相等。 不建议将引用存储至本地时区和 UTC 时区。调用 ClearCachedData 方法后，这些对象变量将成为未定义的 TimeZoneInfo 对象，不再引用 TimeZoneInfo..::.Local 或 TimeZoneInfo..::.Utc。例如，在下面的代码中，对 TimeZoneInfo..::.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法的第二次调用引发 ArgumentException，因为 local 变量不再被视为与 TimeZoneInfo..::.Local 相等。 不建议将引用存储至本地时区和 UTC 时区。调用 ClearCachedData 方法后，这些对象变量将成为未定义的 TimeZoneInfo 对象，不再引用 TimeZoneInfo..::.Local 或 TimeZoneInfo..::.Utc。例如，在下面的代码中，对 TimeZoneInfo..::.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法的第二次调用引发 ArgumentException，因为 local 变量不再被视为与 TimeZoneInfo..::.Local 相等。

Dim cst As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")
Dim local As TimeZoneInfo = TimeZoneInfo.Local
Console.WriteLine(TimeZoneInfo.ConvertTime(Date.Now, local, cst))

TimeZoneInfo.ClearCachedData()
Try
   Console.WriteLine(TimeZoneInfo.ConvertTime(Date.Now, local, cst))
Catch e As ArgumentException
   Console.WriteLine(e.GetType().Name & vbCrLf & "   " & e.Message)
End Try

TimeZoneInfo cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
TimeZoneInfo local = TimeZoneInfo.Local;
Console.WriteLine(TimeZoneInfo.ConvertTime(DateTime.Now, local, cst));

TimeZoneInfo.ClearCachedData();
try
{
   Console.WriteLine(TimeZoneInfo.ConvertTime(DateTime.Now, local, cst));
}
catch (ArgumentException e)
{
   Console.WriteLine(e.GetType().Name + "\n   " + e.Message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.ConvertTime 方法

TimeZoneInfo
.
.
::
.
ConvertTime 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

将时间转换为特定时区的时间。

名称 说明
页首

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTime 方法 (DateTime, TimeZoneInfo)

TimeZoneInfo
.
.
::
.
ConvertTime 方法 (DateTime, TimeZoneInfo)
TimeZoneInfo 类

将时间转换为特定时区的时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertTime ( _
    dateTime As DateTime, _
    destinationTimeZone As TimeZoneInfo _
) As DateTime
public static DateTime ConvertTime(
    DateTime dateTime,
    TimeZoneInfo destinationTimeZone
)
public:
static DateTime ConvertTime(
    DateTime dateTime,
    TimeZoneInfo^ destinationTimeZone
)
static member ConvertTime :
        dateTime:DateTime *
        destinationTimeZone:TimeZoneInfo -> DateTime

参数

dateTime
类型： System DateTime
要转换的日期和时间。
destinationTimeZone
类型： System TimeZoneInfo
要将 dateTime 转换到的时区。

返回值

类型： System DateTime
目标时区的日期和时间。
异常 | 条件
ArgumentException | dateTime 参数值表示无效时间。
ArgumentNullException | destinationTimeZone 参数的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此 ConvertTime(DateTime, TimeZoneInfo) 方法重载通过 dateTime 参数的 Kind 属性值确定源时区，如下表所示。

Kind 属性值 | 源时区 | 方法行为
DateTimeKind Local | Local | 将本地时间转换为 destinationTimeZone 中的时间。
DateTimeKind Utc | Utc | 将协调世界时 (UTC) 转换为 destinationTimeZone 中的时间。
DateTimeKind Unspecified | 假定为 Local。 | 将本地时间转换为 destinationTimeZone 中的时间。

如下表所示设置返回的 DateTime 值的 Kind 属性。

条件 | 返回的 Kind 属性值
destinationTimeZone 参数为 TimeZoneInfo..::.Utc。 | DateTimeKind Utc
dateTime 的 Kind 属性为 DateTimeKind..::.Local，并且 destinationTimeZone 为 DateTimeKind..::.Local。 | DateTimeKind Local
所有其他日期和时间值以及目标时区。 | DateTimeKind Unspecified

如果 dateTime 参数值为不明确的本地时间，则将该时间解释为标准时间。如果 dateTime 参数为无效的本地时间，则此方法会引发 ArgumentException。 如果 dateTime 参数值为不明确的本地时间，则将该时间解释为标准时间。如果 dateTime 参数为无效的本地时间，则此方法会引发 ArgumentException。

如果 dateTime 的转换结果为早于 DateTime..::.MinValue 或晚于 DateTime..::.MaxValue 的日期和时间值，则此方法分别返回 DateTime..::.MinValue 或 DateTime..::.MaxValue。

您还可以通过调用 ConvertTimeFromUtc 和 ConvertTimeToUtc 方法转换成 UTC 或者从 UTC 进行转换。

下面的示例将一个数组的日期和时间值转换为美国东部标准时间时区的时间。和加拿大。它显示了源时区取决于源 DateTime 值的 DateTime..::.Kind 属性。它还阐释了 ConvertTime 方法已经进行时区调整，因为时区调整发生在源和目标时区凌晨 2:00。在 2010 年 11 月 7 日。 下面的示例将一个数组的日期和时间值转换为美国东部标准时间时区的时间。和加拿大。它显示了源时区取决于源 DateTime 值的 DateTime..::.Kind 属性。它还阐释了 ConvertTime 方法已经进行时区调整，因为时区调整发生在源和目标时区凌晨 2:00。在 2010 年 11 月 7 日。 下面的示例将一个数组的日期和时间值转换为美国东部标准时间时区的时间。和加拿大。它显示了源时区取决于源 DateTime 值的 DateTime..::.Kind 属性。它还阐释了 ConvertTime 方法已经进行时区调整，因为时区调整发生在源和目标时区凌晨 2:00。在 2010 年 11 月 7 日。 下面的示例将一个数组的日期和时间值转换为美国东部标准时间时区的时间。和加拿大。它显示了源时区取决于源 DateTime 值的 DateTime..::.Kind 属性。它还阐释了 ConvertTime 方法已经进行时区调整，因为时区调整发生在源和目标时区凌晨 2:00。在 2010 年 11 月 7 日。 下面的示例将一个数组的日期和时间值转换为美国东部标准时间时区的时间。和加拿大。它显示了源时区取决于源 DateTime 值的 DateTime..::.Kind 属性。它还阐释了 ConvertTime 方法已经进行时区调整，因为时区调整发生在源和目标时区凌晨 2:00。在 2010 年 11 月 7 日。

Module Example
   Public Sub Main()
      ' Define times to be converted.
      Dim times() As Date = { #1/1/2010 12:01AM#, _
                              DateTime.SpecifyKind(#1/1/2010 12:01AM#, DateTimeKind.Utc), _
                              DateTime.SpecifyKind(#1/1/2010 12:01AM#, DateTimeKind.Local), _
                              #11/6/2010 11:30PM#, #11/7/2010 2:30AM# }

      ' Retrieve the time zone for Eastern Standard Time (U.S. and Canada).
      Dim est As TimeZoneInfo
      Try
         est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
      Catch e As TimeZoneNotFoundException
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.")
         Exit Sub
      Catch e As InvalidTimeZoneException
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.")
         Exit Sub
      End Try

      ' Display the current time zone name.
      Console.WriteLine("Local time zone: {0}", TimeZoneInfo.Local.DisplayName)
      Console.WriteLine()

      ' Convert each time in the array.
      For Each timeToConvert As Date In times
         Dim targetTime As Date = TimeZoneInfo.ConvertTime(timeToConvert, est)
         Console.WriteLine("Converted {0} {1} to {2}.", timeToConvert, _
                           timeToConvert.Kind, targetTime)
      Next
   End Sub
End Module
' The example displays the following output:
'    Local time zone: (GMT-08:00) Pacific Time (US & Canada)
'
'    Converted 1/1/2010 12:01:00 AM Unspecified to 1/1/2010 3:01:00 AM.
'    Converted 1/1/2010 12:01:00 AM Utc to 12/31/2009 7:01:00 PM.
'    Converted 1/1/2010 12:01:00 AM Local to 1/1/2010 3:01:00 AM.
'    Converted 11/6/2010 11:30:00 PM Unspecified to 11/7/2010 1:30:00 AM.
'    Converted 11/7/2010 2:30:00 AM Unspecified to 11/7/2010 5:30:00 AM.

using System;

public class Example
{
   public static void Main()
   {
      // Define times to be converted.
      DateTime[] times = { new DateTime(2010, 1, 1, 0, 1, 0),
                           new DateTime(2010, 1, 1, 0, 1, 0, DateTimeKind.Utc),
                           new DateTime(2010, 1, 1, 0, 1, 0, DateTimeKind.Local),
                           new DateTime(2010, 11, 6, 23, 30, 0),
                           new DateTime(2010, 11, 7, 2, 30, 0) };

      // Retrieve the time zone for Eastern Standard Time (U.S. and Canada).
      TimeZoneInfo est;
      try {
         est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
      }
      catch (TimeZoneNotFoundException) {
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.");
         return;
      }
      catch (InvalidTimeZoneException) {
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.");
         return;
      }

      // Display the current time zone name.
      Console.WriteLine("Local time zone: {0}\n", TimeZoneInfo.Local.DisplayName);

      // Convert each time in the array.
      foreach (DateTime timeToConvert in times)
      {
         DateTime targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est);
         Console.WriteLine("Converted {0} {1} to {2}.", timeToConvert,
                           timeToConvert.Kind, targetTime);
      }
   }
}
// The example displays the following output:
//    Local time zone: (GMT-08:00) Pacific Time (US & Canada)
//
//    Converted 1/1/2010 12:01:00 AM Unspecified to 1/1/2010 3:01:00 AM.
//    Converted 1/1/2010 12:01:00 AM Utc to 12/31/2009 7:01:00 PM.
//    Converted 1/1/2010 12:01:00 AM Local to 1/1/2010 3:01:00 AM.
//    Converted 11/6/2010 11:30:00 PM Unspecified to 11/7/2010 1:30:00 AM.
//    Converted 11/7/2010 2:30:00 AM Unspecified to 11/7/2010 5:30:00 AM.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
ConvertTime 重载
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTime 方法 (DateTimeOffset, TimeZoneInfo)

TimeZoneInfo
.
.
::
.
ConvertTime 方法 (DateTimeOffset, TimeZoneInfo)
TimeZoneInfo 类

将时间转换为特定时区的时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertTime ( _
    dateTimeOffset As DateTimeOffset, _
    destinationTimeZone As TimeZoneInfo _
) As DateTimeOffset
public static DateTimeOffset ConvertTime(
    DateTimeOffset dateTimeOffset,
    TimeZoneInfo destinationTimeZone
)
public:
static DateTimeOffset ConvertTime(
    DateTimeOffset dateTimeOffset,
    TimeZoneInfo^ destinationTimeZone
)
static member ConvertTime :
        dateTimeOffset:DateTimeOffset *
        destinationTimeZone:TimeZoneInfo -> DateTimeOffset

参数

dateTimeOffset
类型： System DateTimeOffset
要转换的日期和时间。
destinationTimeZone
类型： System TimeZoneInfo
要将 dateTime 转换到的时区。

返回值

类型： System DateTimeOffset
目标时区的日期和时间。
异常 | 条件
ArgumentNullException | destinationTimeZone 参数的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此重载与 ConvertTime 方法的其他重载的不同之处在于，它接受 DateTimeOffset 值作为其第一个参数。这样就将日期和时间识别为与协调世界时 (UTC) 的偏移量，而不是特定时区中的日期和时间。因此，dateTimeOffset 参数不能表示不明确的时间或无效时间。 此重载与 ConvertTime 方法的其他重载的不同之处在于，它接受 DateTimeOffset 值作为其第一个参数。这样就将日期和时间识别为与协调世界时 (UTC) 的偏移量，而不是特定时区中的日期和时间。因此，dateTimeOffset 参数不能表示不明确的时间或无效时间。 此重载与 ConvertTime 方法的其他重载的不同之处在于，它接受 DateTimeOffset 值作为其第一个参数。这样就将日期和时间识别为与协调世界时 (UTC) 的偏移量，而不是特定时区中的日期和时间。因此，dateTimeOffset 参数不能表示不明确的时间或无效时间。

在将 dateTimeOffset 值转换为目标时区时间的过程中，此方法会考虑目标时区中所有有效的调整规则。

如果 dateTimeOffset 的转换结果为早于 DateTimeOffset..::.MinValue 或晚于 DateTimeOffset..::.MaxValue 的日期和时间值，则此方法分别返回 DateTimeOffset..::.MinValue 或 DateTimeOffset..::.MaxValue。

下面的示例将一个数组的 DateTimeOffset 值转换为美国东部标准时间时区的时间。和加拿大。它阐释了 ConvertTime 方法已经进行时区调整，因为时区调整发生在源和目标时区凌晨 2:00。在 2010 年 11 月 7 日。 下面的示例将一个数组的 DateTimeOffset 值转换为美国东部标准时间时区的时间。和加拿大。它阐释了 ConvertTime 方法已经进行时区调整，因为时区调整发生在源和目标时区凌晨 2:00。在 2010 年 11 月 7 日。 下面的示例将一个数组的 DateTimeOffset 值转换为美国东部标准时间时区的时间。和加拿大。它阐释了 ConvertTime 方法已经进行时区调整，因为时区调整发生在源和目标时区凌晨 2:00。在 2010 年 11 月 7 日。 下面的示例将一个数组的 DateTimeOffset 值转换为美国东部标准时间时区的时间。和加拿大。它阐释了 ConvertTime 方法已经进行时区调整，因为时区调整发生在源和目标时区凌晨 2:00。在 2010 年 11 月 7 日。

Module Example
   Public Sub Main()
      ' Define times to be converted.
      Dim time1 As Date = #1/1/2010 12:01AM#
      Dim time2 As Date = #11/6/2010 11:30PM#
      Dim times() As DateTimeOffset = { New DateTimeOffset(time1, TimeZoneInfo.Local.GetUtcOffset(time1)), _
                                        New DateTimeOffset(time1, Timespan.Zero), _
                                        New DateTimeOffset(time2, TimeZoneInfo.Local.GetUtcOffset(time2)), _
                                        New DateTimeOffset(time2.AddHours(3), TimeZoneInfo.Local.GetUtcOffset(time2.AddHours(3))) }

      ' Retrieve the time zone for Eastern Standard Time (U.S. and Canada).
      Dim est As TimeZoneInfo
      Try
         est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
      Catch e As TimeZoneNotFoundException
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.")
         Exit Sub
      Catch e As InvalidTimeZoneException
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.")
         Exit Sub
      End Try

      ' Display the current time zone name.
      Console.WriteLine("Local time zone: {0}", TimeZoneInfo.Local.DisplayName)
      Console.WriteLine()

      ' Convert each time in the array.
      For Each timeToConvert As DateTimeOffset In times
         Dim targetTime As DateTimeOffset = TimeZoneInfo.ConvertTime(timeToConvert, est)
         Console.WriteLine("Converted {0} to {1}.", timeToConvert, targetTime)
      Next
   End Sub
End Module
' The example displays the following output:
'    Local time zone: (GMT-08:00) Pacific Time (US & Canada)
'
'    Converted 1/1/2010 12:01:00 AM -08:00 to 1/1/2010 3:01:00 AM -05:00.
'    Converted 1/1/2010 12:01:00 AM +00:00 to 12/31/2009 7:01:00 PM -05:00.
'    Converted 11/6/2010 11:30:00 PM -07:00 to 11/7/2010 1:30:00 AM -05:00.
'    Converted 11/7/2010 2:30:00 AM -08:00 to 11/7/2010 5:30:00 AM -05:00.

using System;

public class Example
{
   public static void Main()
   {
      // Define times to be converted.
      DateTime time1 = new DateTime(2010, 1, 1, 12, 1, 0);
      DateTime time2 = new DateTime(2010, 11, 6, 23, 30, 0);
      DateTimeOffset[] times = { new DateTimeOffset(time1, TimeZoneInfo.Local.GetUtcOffset(time1)),
                                 new DateTimeOffset(time1, TimeSpan.Zero),
                                 new DateTimeOffset(time2, TimeZoneInfo.Local.GetUtcOffset(time2)),
                                 new DateTimeOffset(time2.AddHours(3), TimeZoneInfo.Local.GetUtcOffset(time2.AddHours(3))) };

      // Retrieve the time zone for Eastern Standard Time (U.S. and Canada).
      TimeZoneInfo est;
      try {
         est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
      }
      catch (TimeZoneNotFoundException) {
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.");
         return;
      }
      catch (InvalidTimeZoneException) {
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.");
         return;
      }

      // Display the current time zone name.
      Console.WriteLine("Local time zone: {0}\n", TimeZoneInfo.Local.DisplayName);

      // Convert each time in the array.
      foreach (DateTimeOffset timeToConvert in times)
      {
         DateTimeOffset targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est);
         Console.WriteLine("Converted {0} to {1}.", timeToConvert, targetTime);
      }
   }
}
// The example displays the following output:
//    Local time zone: (GMT-08:00) Pacific Time (US & Canada)
//
//    Converted 1/1/2010 12:01:00 AM -08:00 to 1/1/2010 3:01:00 AM -05:00.
//    Converted 1/1/2010 12:01:00 AM +00:00 to 12/31/2009 7:01:00 PM -05:00.
//    Converted 11/6/2010 11:30:00 PM -07:00 to 11/7/2010 1:30:00 AM -05:00.
//    Converted 11/7/2010 2:30:00 AM -08:00 to 11/7/2010 5:30:00 AM -05:00.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
ConvertTime 重载
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTime 方法 (DateTime, TimeZoneInfo, TimeZoneInfo)

TimeZoneInfo
.
.
::
.
ConvertTime 方法 (DateTime, TimeZoneInfo, TimeZoneInfo)
TimeZoneInfo 类

将时间从一个时区转换为另一个时区。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertTime ( _
    dateTime As DateTime, _
    sourceTimeZone As TimeZoneInfo, _
    destinationTimeZone As TimeZoneInfo _
) As DateTime
public static DateTime ConvertTime(
    DateTime dateTime,
    TimeZoneInfo sourceTimeZone,
    TimeZoneInfo destinationTimeZone
)
public:
static DateTime ConvertTime(
    DateTime dateTime,
    TimeZoneInfo^ sourceTimeZone,
    TimeZoneInfo^ destinationTimeZone
)
static member ConvertTime :
        dateTime:DateTime *
        sourceTimeZone:TimeZoneInfo *
        destinationTimeZone:TimeZoneInfo -> DateTime

参数

dateTime
类型： System DateTime
要转换的日期和时间。
sourceTimeZone
类型： System TimeZoneInfo
dateTime 的时区。
destinationTimeZone
类型： System TimeZoneInfo
要将 dateTime 转换到的时区。

返回值

类型： System DateTime
目标时区中与源时区中的 dateTime 参数对应的日期和时间。
异常 | 条件
ArgumentException | dateTime 参数的 Kind 属性为 DateTimeKind..::.Local，但 sourceTimeZone 参数不等于 DateTimeKind..::.Local。 - 或 - dateTime 参数的 Kind 属性为 DateTimeKind..::.Utc，但 sourceTimeZone 参数不等于 TimeZoneInfo..::.Utc。 - 或 - dateTime 参数为无效时间（即，它表示因时区的调整规则而不存在的时间）。
ArgumentNullException | sourceTimeZone 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - destinationTimeZone 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

dateTime 参数的 Kind 属性值必须对应于 sourceTimeZone 参数，如下表所示。

DateTime.Kind 值 | sourceTimeZone 值 | 方法行为
DateTimeKind Utc | 等于 TimeZoneInfo..::.Utc。 | 将 dateTime 转换为目标时区的时间。
DateTimeKind Utc | 不等于 TimeZoneInfo..::.Utc。 | 引发 ArgumentException。
DateTimeKind Local | 等于 TimeZoneInfo..::.Local。 | 将 dateTime 转换为目标时区的时间。
DateTimeKind Local | 不等于 TimeZoneInfo..::.Local。 | 引发 ArgumentException。
DateTimeKind Unspecified | 任意。 | 将 dateTime 转换为目标时区的时间。

您还可以通过调用 ConvertTimeFromUtc 和 ConvertTimeToUtc 方法转换成协调世界时 (UTC) 或从 UTC 进行转换。

如下表所示设置返回的 DateTime 值的 Kind 属性。

条件 | 返回的 Kind 属性值
destinationTimeZone 参数为 TimeZoneInfo..::.Utc。 | DateTimeKind Utc
dateTime 的 Kind 属性为 DateTimeKind..::.Local，并且 sourceTimeZone 和 destinationTimeZone 都是 DateTimeKind..::.Local。 | DateTimeKind Local
所有其他日期和时间值、源时区以及目标时区。 | DateTimeKind Unspecified

如果 dateTime 参数值是源时区中的不明确时间，则将该时间解释为标准时间。如果 dateTime 参数是源时区中的无效时间，则此方法会引发 ArgumentException。 如果 dateTime 参数值是源时区中的不明确时间，则将该时间解释为标准时间。如果 dateTime 参数是源时区中的无效时间，则此方法会引发 ArgumentException。

如果 dateTime 的转换结果为早于 DateTime..::.MinValue 或晚于 DateTime..::.MaxValue 的日期和时间值，则此方法分别返回 DateTime..::.MinValue 或 DateTime..::.MaxValue。

下面的示例阐释如何使用 ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法将夏威夷标准时间转换为本地时间。

Dim hwTime As Date = #2/01/2007 8:00:00 AM#
Try
   Dim hwZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time")
   Console.WriteLine("{0} {1} is {2} local time.", _
                     hwTime, _
                     IIf(hwZone.IsDaylightSavingTime(hwTime), hwZone.DaylightName, hwZone.StandardName), _
                     TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local))
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.")
Catch e As InvalidTimeZoneException
   Console.WriteLine("Registry data on the Hawaiian Standard Time zone has been corrupted.")
End Try

DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00);
try
{
   TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
   Console.WriteLine("{0} {1} is {2} local time.",
           hwTime,
           hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName,
           TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.");
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Hawaiian STandard Time zone has been corrupted.");
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
ConvertTime 重载
System 命名空间
ConvertTimeBySystemTimeZoneId

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTimeBySystemTimeZoneId 方法

TimeZoneInfo
.
.
::
.
ConvertTimeBySystemTimeZoneId 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

根据时区标识符将时间转换为另一时区中的时间。

名称 说明
页首

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTimeBySystemTimeZoneId 方法 (DateTime, String)

TimeZoneInfo
.
.
::
.
ConvertTimeBySystemTimeZoneId 方法 (DateTime, String)
TimeZoneInfo 类

根据时区标识符将时间转换为另一时区中的时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertTimeBySystemTimeZoneId ( _
    dateTime As DateTime, _
    destinationTimeZoneId As String _
) As DateTime
public static DateTime ConvertTimeBySystemTimeZoneId(
    DateTime dateTime,
    string destinationTimeZoneId
)
public:
static DateTime ConvertTimeBySystemTimeZoneId(
    DateTime dateTime,
    String^ destinationTimeZoneId
)
static member ConvertTimeBySystemTimeZoneId :
        dateTime:DateTime *
        destinationTimeZoneId:string -> DateTime

参数

dateTime
类型： System DateTime
要转换的日期和时间。
destinationTimeZoneId
类型： System String
目标时区的标识符。

返回值

类型： System DateTime
目标时区的日期和时间。
异常 | 条件
ArgumentNullException | destinationTimeZoneId 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidTimeZoneException | 已找到时区标识符，但注册表数据已损坏。
SecurityException | 进程没有读取包含时区信息的注册表项所需的权限。
TimeZoneNotFoundException | 在本地系统上找不到 destinationTimeZoneId 标识符。

此 ConvertTimeBySystemTimeZoneId(DateTime, String) 方法重载大致相当于调用 ConvertTime(DateTime, TimeZoneInfo) 方法，区别是前者允许您通过其标识符而不是对象引用来指定目标时区。如果您必须转换时间而不检索与该时间相对应的时区对象，并且不需要知道转换后的时间是标准时间还是夏时制时间，则此方法非常有用。 此 ConvertTimeBySystemTimeZoneId(DateTime, String) 方法重载大致相当于调用 ConvertTime(DateTime, TimeZoneInfo) 方法，区别是前者允许您通过其标识符而不是对象引用来指定目标时区。如果您必须转换时间而不检索与该时间相对应的时区对象，并且不需要知道转换后的时间是标准时间还是夏时制时间，则此方法非常有用。

ConvertTimeBySystemTimeZoneId(DateTime, String) 方法通过 dateTime 参数的 Kind 属性值确定源时区，如下表所示。

Kind 属性值 | 源时区 | 方法行为
DateTimeKind Local | Local | 将本地时间转换为 destinationTimeZone 中的时间。
DateTimeKind Utc | Utc | 将协调世界时 (UTC) 转换为 destinationTimeZone 中的时间。
DateTimeKind Unspecified | 假定为 Local。 | 将本地时间转换为 destinationTimeZone 中的时间。

如下表所示设置返回的 DateTime 值的 Kind 属性。

条件 | 返回的 Kind 属性值
destinationTimeZone 为 TimeZoneInfo.Utc.Id。 | DateTimeKind Utc
任何其他 destinationTimeZone 值。 | DateTimeKind Unspecified

如果 dateTime 参数值为不明确的本地时间，则将该时间解释为标准时间。如果 dateTime 参数为无效的本地时间，则此方法会引发 ArgumentException。 如果 dateTime 参数值为不明确的本地时间，则将该时间解释为标准时间。如果 dateTime 参数为无效的本地时间，则此方法会引发 ArgumentException。

如果 dateTime 的转换结果为早于 DateTime..::.MinValue 或晚于 DateTime..::.MaxValue 的日期和时间值，则此方法分别返回 DateTime..::.MinValue 或 DateTime..::.MaxValue。

此方法检索标识符由 destinationTimeZoneId 参数从注册表指定的时区。它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。若要匹配成功，destinationTimeZoneId 参数必须在长度上与时区的注册表项完全对应，但与大小写无关。即，destinationTimeZoneId 与时区标识符的比较不区分大小写。 此方法检索标识符由 destinationTimeZoneId 参数从注册表指定的时区。它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。若要匹配成功，destinationTimeZoneId 参数必须在长度上与时区的注册表项完全对应，但与大小写无关。即，destinationTimeZoneId 与时区标识符的比较不区分大小写。 此方法检索标识符由 destinationTimeZoneId 参数从注册表指定的时区。它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。若要匹配成功，destinationTimeZoneId 参数必须在长度上与时区的注册表项完全对应，但与大小写无关。即，destinationTimeZoneId 与时区标识符的比较不区分大小写。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
ConvertTimeBySystemTimeZoneId 重载
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTimeBySystemTimeZoneId 方法 (DateTimeOffset, String)

TimeZoneInfo
.
.
::
.
ConvertTimeBySystemTimeZoneId 方法 (DateTimeOffset, String)
TimeZoneInfo 类

根据时区标识符将时间转换为另一时区中的时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertTimeBySystemTimeZoneId ( _
    dateTimeOffset As DateTimeOffset, _
    destinationTimeZoneId As String _
) As DateTimeOffset
public static DateTimeOffset ConvertTimeBySystemTimeZoneId(
    DateTimeOffset dateTimeOffset,
    string destinationTimeZoneId
)
public:
static DateTimeOffset ConvertTimeBySystemTimeZoneId(
    DateTimeOffset dateTimeOffset,
    String^ destinationTimeZoneId
)
static member ConvertTimeBySystemTimeZoneId :
        dateTimeOffset:DateTimeOffset *
        destinationTimeZoneId:string -> DateTimeOffset

参数

dateTimeOffset
类型： System DateTimeOffset
要转换的日期和时间。
destinationTimeZoneId
类型： System String
目标时区的标识符。

返回值

类型： System DateTimeOffset
目标时区的日期和时间。
异常 | 条件
ArgumentNullException | destinationTimeZoneId 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidTimeZoneException | 已找到时区标识符，但注册表数据已损坏。
SecurityException | 进程没有读取包含时区信息的注册表项所需的权限。
TimeZoneNotFoundException | 在本地系统上找不到 destinationTimeZoneId 标识符。

此 ConvertTimeBySystemTimeZoneId(DateTimeOffset, String) 方法重载相当于调用 ConvertTime(DateTime, TimeZoneInfo) 方法，区别是前者允许您通过其标识符而不是对象引用来指定目标时区。如果您必须转换时间而不检索与该时间相对应的时区对象，并且不需要知道转换后的时间是标准时间还是夏时制时间，则此方法非常有用。 此 ConvertTimeBySystemTimeZoneId(DateTimeOffset, String) 方法重载相当于调用 ConvertTime(DateTime, TimeZoneInfo) 方法，区别是前者允许您通过其标识符而不是对象引用来指定目标时区。如果您必须转换时间而不检索与该时间相对应的时区对象，并且不需要知道转换后的时间是标准时间还是夏时制时间，则此方法非常有用。

由于 dateTimeOffset 参数将日期和时间与该时间和协调世界时 (UTC) 的偏移量一起表示，因此它不能表示不明确的时间或无效时间。

此方法检索标识符由 destinationTimeZoneId 参数从注册表指定的时区。它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。若要匹配成功，destinationTimeZoneId 参数必须在长度上与时区的注册表项完全对应，但与大小写无关。即，destinationTimeZoneId 与时区标识符的比较不区分大小写。 此方法检索标识符由 destinationTimeZoneId 参数从注册表指定的时区。它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。若要匹配成功，destinationTimeZoneId 参数必须在长度上与时区的注册表项完全对应，但与大小写无关。即，destinationTimeZoneId 与时区标识符的比较不区分大小写。 此方法检索标识符由 destinationTimeZoneId 参数从注册表指定的时区。它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。若要匹配成功，destinationTimeZoneId 参数必须在长度上与时区的注册表项完全对应，但与大小写无关。即，destinationTimeZoneId 与时区标识符的比较不区分大小写。

在将 dateTimeOffset 值转换为目标时区时间的过程中，此方法会考虑目标时区中所有有效的调整规则。

如果 dateTimeOffset 的转换结果为早于 DateTimeOffset..::.MinValue 或晚于 DateTimeOffset..::.MaxValue 的日期和时间值，则此方法分别返回 DateTimeOffset..::.MinValue 或 DateTimeOffset..::.MaxValue。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
ConvertTimeBySystemTimeZoneId 重载
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTimeBySystemTimeZoneId 方法 (DateTime, String, String)

TimeZoneInfo
.
.
::
.
ConvertTimeBySystemTimeZoneId 方法 (DateTime, String, String)
TimeZoneInfo 类

根据时区标识符将时间从一个时区转换到另一个时区。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertTimeBySystemTimeZoneId ( _
    dateTime As DateTime, _
    sourceTimeZoneId As String, _
    destinationTimeZoneId As String _
) As DateTime
public static DateTime ConvertTimeBySystemTimeZoneId(
    DateTime dateTime,
    string sourceTimeZoneId,
    string destinationTimeZoneId
)
public:
static DateTime ConvertTimeBySystemTimeZoneId(
    DateTime dateTime,
    String^ sourceTimeZoneId,
    String^ destinationTimeZoneId
)
static member ConvertTimeBySystemTimeZoneId :
        dateTime:DateTime *
        sourceTimeZoneId:string *
        destinationTimeZoneId:string -> DateTime

参数

dateTime
类型： System DateTime
要转换的日期和时间。
sourceTimeZoneId
类型： System String
源时区的标识符。
destinationTimeZoneId
类型： System String
目标时区的标识符。

返回值

类型： System DateTime
目标时区中与源时区中的 dateTime 参数对应的日期和时间。
异常 | 条件
ArgumentException | dateTime 参数的 Kind 属性与源时区不对应。 - 或 - dateTime 是源时区中的无效时间。
ArgumentNullException | sourceTimeZoneId 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - destinationTimeZoneId 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidTimeZoneException | 已找到时区标识符，但注册表数据已损坏。
SecurityException | 进程没有读取包含时区信息的注册表项所需的权限。
TimeZoneNotFoundException | 在本地系统上找不到 sourceTimeZoneId 标识符。 - 或 - 在本地系统上找不到 destinationTimeZoneId 标识符。
SecurityException | 用户没有读取包含时区数据的注册表项所需的权限。

尽管与 TimeZoneInfo..::.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法类似，但您可以使用 TimeZoneInfo..::.ConvertTimeBySystemTimeZoneId(DateTime, String, String) 并通过其标识符而不是其 TimeZoneInfo 对象来指定源时区和目标时区。如果您必须转换时间而不检索与该时间相对应的时区对象，并且不需要知道转换后的时间是标准时间还是夏时制时间，则此方法非常有用。 尽管与 TimeZoneInfo..::.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法类似，但您可以使用 TimeZoneInfo..::.ConvertTimeBySystemTimeZoneId(DateTime, String, String) 并通过其标识符而不是其 TimeZoneInfo 对象来指定源时区和目标时区。如果您必须转换时间而不检索与该时间相对应的时区对象，并且不需要知道转换后的时间是标准时间还是夏时制时间，则此方法非常有用。

此方法检索标识符是来自注册表的 sourceTimeZoneId 和 destinationTimeZoneId 参数的时区。它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。 此方法检索标识符是来自注册表的 sourceTimeZoneId 和 destinationTimeZoneId 参数的时区。它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。

dateTime 参数的 Kind 属性值必须对应于 sourceTimeZoneId 参数，如下表所示。

DateTime.Kind 值 | sourceTimeZone 值 | 方法行为
DateTimeKind Utc | 等于 TimeZoneInfo.Utc.Id。 | 将 dateTime 转换为目标时区的时间。
DateTimeKind Utc | 不等于 TimeZoneInfo.Utc.Id。 | 引发 ArgumentException。
DateTimeKind Local | 等于 TimeZoneInfo.Local.Id。 | 将 dateTime 转换为目标时区的时间。
DateTimeKind Local | 不等于 TimeZoneInfo.Local.Id。 | 引发 ArgumentException。
DateTimeKind Unspecified | 任意。 | 将 dateTime 转换为目标时区的时间。

由于 ConvertTimeBySystemTimeZoneId 方法依赖于对 FindSystemTimeZoneById 方法的调用，因此前者执行不区分大小写的搜索，以查找与 sourceTimeZoneId 和 destinationTimeZoneId 相对应的时区。

如果 dateTime 参数值是源时区中的不明确时间，则将该时间解释为标准时间。如果 dateTime 参数是源时区中的无效时间，则此方法会引发 ArgumentException。 如果 dateTime 参数值是源时区中的不明确时间，则将该时间解释为标准时间。如果 dateTime 参数是源时区中的无效时间，则此方法会引发 ArgumentException。

将返回的 DateTime 值的 Kind 属性设置为 DateTimeKind..::.Unspecified，除非目标时区为协调世界时 (UTC)，在该情况下将该属性设置为 DateTimeKind..::.Utc。

下面的示例使用 TimeZoneInfo..::.ConvertTimeBySystemTimeZoneId(DateTime, String, String) 方法显示对应于世界上八个城市的本地系统时间的时间。

Dim currentTime As Date = Date.Now
Console.WriteLine("Current Times:")
Console.WriteLine()
Console.WriteLine("Los Angeles: {0}", _
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Pacific Standard Time"))
Console.WriteLine("Chicago: {0}", _
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Central Standard Time"))
Console.WriteLine("New York: {0}", _
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Eastern Standard Time"))
Console.WriteLine("London: {0}", _
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "GMT Standard Time"))
Console.WriteLine("Moscow: {0}", _
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Russian Standard Time"))
Console.WriteLine("New Delhi: {0}", _
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "India Standard Time"))
Console.WriteLine("Beijing: {0}", _
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "China Standard Time"))
Console.WriteLine("Tokyo: {0}", _
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Tokyo Standard Time"))

DateTime currentTime = DateTime.Now;
Console.WriteLine("Current Times:");
Console.WriteLine();
Console.WriteLine("Los Angeles: {0}",
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Pacific Standard Time"));
Console.WriteLine("Chicago: {0}",
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Central Standard Time"));
Console.WriteLine("New York: {0}",
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Eastern Standard Time"));
Console.WriteLine("London: {0}",
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "GMT Standard Time"));
Console.WriteLine("Moscow: {0}",
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Russian Standard Time"));
Console.WriteLine("New Delhi: {0}",
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "India Standard Time"));
Console.WriteLine("Beijing: {0}",
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "China Standard Time"));
Console.WriteLine("Tokyo: {0}",
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Tokyo Standard Time"));

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
ConvertTimeBySystemTimeZoneId 重载
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTimeFromUtc 方法

TimeZoneInfo
.
.
::
.
ConvertTimeFromUtc 方法
TimeZoneInfo 类

将协调世界时 (UTC) 转换为指定时区中的时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertTimeFromUtc ( _
    dateTime As DateTime, _
    destinationTimeZone As TimeZoneInfo _
) As DateTime
public static DateTime ConvertTimeFromUtc(
    DateTime dateTime,
    TimeZoneInfo destinationTimeZone
)
public:
static DateTime ConvertTimeFromUtc(
    DateTime dateTime,
    TimeZoneInfo^ destinationTimeZone
)
static member ConvertTimeFromUtc :
        dateTime:DateTime *
        destinationTimeZone:TimeZoneInfo -> DateTime

参数

dateTime
类型： System DateTime
协调世界时 (UTC)。
destinationTimeZone
类型： System TimeZoneInfo
要将 dateTime 转换到的时区。

返回值

类型： System DateTime
目标时区的日期和时间。如果 destinationTimeZone 为 TimeZoneInfo..::.Utc，则该值的 DateTime..::.Kind 属性为 DateTimeKind..::.Utc；否则该值的 DateTime..::.Kind 属性为 DateTimeKind..::.Unspecified。 目标时区的日期和时间。如果 destinationTimeZone 为 TimeZoneInfo..::.Utc，则该值的 DateTime..::.Kind 属性为 DateTimeKind..::.Utc；否则该值的 DateTime..::.Kind 属性为 DateTimeKind..::.Unspecified。
异常 | 条件
ArgumentException | dateTime 的 Kind 属性为 DateTimeKind..::.Local。
ArgumentNullException | destinationTimeZone 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法的确切行为取决于 dateTime 参数的 Kind 属性值，如下表所示。

DateTime.Kind 属性 | 转换
DateTimeKind Local | 引发 ArgumentException。
DateTimeKind..::.Unspecified 或 DateTimeKind..::.Utc | 从协调世界时 (UTC) 进行转换。

如果 dateTime 的转换结果为早于 DateTime..::.MinValue 或晚于 DateTime..::.MaxValue 的日期和时间值，则此方法分别返回 DateTime..::.MinValue 或 DateTime..::.MaxValue。

下面的示例将协调世界时 (UTC) 转换为中部标准时间。

Dim timeUtc As Date = Date.UtcNow
Try
   Dim cstZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")
   Dim cstTime As Date = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone)
   Console.WriteLine("The date and time are {0} {1}.", _
                     cstTime, _
                     IIf(cstZone.IsDaylightSavingTime(cstTime), _
                         cstZone.DaylightName, cstZone.StandardName))
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The registry does not define the Central Standard Time zone.")
Catch e As InvalidTimeZoneException
   Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.")
End Try

DateTime timeUtc = DateTime.UtcNow;
try
{
   TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
   DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);
   Console.WriteLine("The date and time are {0} {1}.",
                     cstTime,
                     cstZone.IsDaylightSavingTime(cstTime) ?
                             cstZone.DaylightName : cstZone.StandardName);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Central Standard Time zone.");
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Central STandard Time zone has been corrupted.");
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTimeToUtc 方法

TimeZoneInfo
.
.
::
.
ConvertTimeToUtc 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

将日期和时间转换为协调世界时 (UTC)。

名称 说明
页首

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTimeToUtc 方法 (DateTime)

TimeZoneInfo
.
.
::
.
ConvertTimeToUtc 方法 (DateTime)
TimeZoneInfo 类

将当前日期和时间转换为协调世界时 (UTC)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertTimeToUtc ( _
    dateTime As DateTime _
) As DateTime
public static DateTime ConvertTimeToUtc(
    DateTime dateTime
)
public:
static DateTime ConvertTimeToUtc(
    DateTime dateTime
)
static member ConvertTimeToUtc :
        dateTime:DateTime -> DateTime

参数

dateTime
类型： System DateTime
要转换的日期和时间。

返回值

类型： System DateTime
与 dateTime 参数对应的协调世界时 (UTC)。DateTime 值的 Kind 属性始终设置为 DateTimeKind..::.Utc。 与 dateTime 参数对应的协调世界时 (UTC)。DateTime 值的 Kind 属性始终设置为 DateTimeKind..::.Utc。
异常 | 条件
ArgumentException | TimeZoneInfo.Local.IsInvalidDateTime(dateTime TimeZoneInfo.Local.IsInvalidDateTime(dateTime) 返回 true。

所执行的确切转换取决于 dateTime 参数的 Kind 属性值，如下表所示。

DateTime.Kind 属性 | 转换
DateTimeKind Local | 从本地时间转换为协调世界时 (UTC)。
DateTimeKind Unspecified | 假定 dateTime 为本地时间并将其从本地时间转换为 UTC。
DateTimeKind Utc | 返回未更改的 dateTime。

如果 dateTime 对应于不明确的本地时间，此方法将假定其为标准本地时间。如果 dateTime 对应于无效的本地时间，此方法将引发 ArgumentException。 如果 dateTime 对应于不明确的本地时间，此方法将假定其为标准本地时间。如果 dateTime 对应于无效的本地时间，此方法将引发 ArgumentException。

说明 说明

如果当前计算机的本地时区包括多个调整规则，则此 ConvertTimeToUtc 方法重载返回的结果可能与 TimeZone..::.ToUniversalTime 和 DateTime..::.ToUniversalTime 方法返回的结果不同

如果等于 dateTime 的 UTC 早于 DateTime..::.MinValue 或晚于 DateTime..::.MaxValue，则此方法分别返回 MinValue 或 MaxValue。

下面的示例阐释 Kind 属性分别为 DateTimeKind..::.Utc、DateTimeKind..::.Local 和 DateTimeKind..::.Unspecified 的时间值的转换。该示例还阐释不明确的时间和无效时间的转换。 下面的示例阐释 Kind 属性分别为 DateTimeKind..::.Utc、DateTimeKind..::.Local 和 DateTimeKind..::.Unspecified 的时间值的转换。该示例还阐释不明确的时间和无效时间的转换。

Dim datNowLocal As Date = Date.Now
Console.WriteLine("Converting {0}, Kind {1}:", datNowLocal, datNowLocal.Kind)
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datNowLocal), TimeZoneInfo.ConvertTimeToUtc(datNowLocal).Kind)
Console.WriteLine()

Dim datNowUtc As Date = Date.UtcNow
Console.WriteLine("Converting {0}, Kind {1}", datNowUtc, datNowUtc.Kind)
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datNowUtc), TimeZoneInfo.ConvertTimeToUtc(datNowUtc).Kind)
Console.WriteLine()

Dim datNow As Date = CDate("10/26/2007 1:32:00 PM")
Console.WriteLine("Converting {0}, Kind {1}", datNow, datNow.Kind)
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datNow), TimeZoneInfo.ConvertTimeToUtc(datNow).Kind)
Console.WriteLine()

Dim datAmbiguous As Date = #11/4/2007 1:30:00AM#
Console.WriteLine("Converting {0}, Kind {1}, Ambiguous {2}", datAmbiguous, datAmbiguous.Kind, TimeZoneInfo.Local.IsAmbiguousTime(datAmbiguous))
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datAmbiguous), TimeZoneInfo.ConvertTimeToUtc(datAmbiguous).Kind)
Console.WriteLine()

Dim datInvalid As Date = #03/11/2007 2:30:00AM#
Console.WriteLine("Converting {0}, Kind {1}, Invalid {2}", datInvalid, datInvalid.Kind, TimeZoneInfo.Local.IsInvalidTime(datInvalid))
Try
   Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datInvalid), TimeZoneInfo.ConvertTimeToUtc(datInvalid).Kind)
Catch e As ArgumentException
   Console.WriteLine("   {0}: Cannot convert {1} to UTC.", e.GetType().Name, datInvalid)
End Try
Console.WriteLine()

Dim datNearMax As Date = #12/31/9999 10:00:00PM#
Console.WriteLine("Converting {0}, Kind {1}", datNearMax, datNearMax.Kind)
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datNearMax), TimeZoneInfo.ConvertTimeToUtc(datNearMax).Kind)
Console.WriteLine()
'
' This example produces the following output if the local time zone
' is Pacific Standard Time:
'
'    Converting 8/31/2007 2:26:28 PM, Kind Local:
'       ConvertTimeToUtc: 8/31/2007 9:26:28 PM, Kind Utc
'
'    Converting 8/31/2007 9:26:28 PM, Kind Utc
'       ConvertTimeToUtc: 8/31/2007 9:26:28 PM, Kind Utc
'
'    Converting 10/26/2007 1:32:00 PM, Kind Unspecified
'       ConvertTimeToUtc: 10/26/2007 8:32:00 PM, Kind Utc
'
'    Converting 11/4/2007 1:30:00 AM, Kind Unspecified, Ambiguous True
'       ConvertTimeToUtc: 11/4/2007 9:30:00 AM, Kind Utc
'
'    Converting 3/11/2007 2:30:00 AM, Kind Unspecified, Invalid True
'       ArgumentException: Cannot convert 3/11/2007 2:30:00 AM to UTC.
'
'    Converting 12/31/9999 10:00:00 PM, Kind Unspecified
'       ConvertTimeToUtc: 12/31/9999 11:59:59 PM, Kind Utc

DateTime datNowLocal = DateTime.Now;
Console.WriteLine("Converting {0}, Kind {1}:", datNowLocal, datNowLocal.Kind);
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datNowLocal), TimeZoneInfo.ConvertTimeToUtc(datNowLocal).Kind);
Console.WriteLine();

DateTime datNowUtc = DateTime.UtcNow;
Console.WriteLine("Converting {0}, Kind {1}", datNowUtc, datNowUtc.Kind);
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datNowUtc), TimeZoneInfo.ConvertTimeToUtc(datNowUtc).Kind);
Console.WriteLine();

DateTime datNow = new DateTime(2006, 10, 26, 13, 32, 00);
Console.WriteLine("Converting {0}, Kind {1}", datNow, datNow.Kind);
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datNow), TimeZoneInfo.ConvertTimeToUtc(datNow).Kind);
Console.WriteLine();

DateTime datAmbiguous = new DateTime(2007, 11, 4, 1, 30, 00);
Console.WriteLine("Converting {0}, Kind {1}, Ambiguous {2}", datAmbiguous, datAmbiguous.Kind, TimeZoneInfo.Local.IsAmbiguousTime(datAmbiguous));
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datAmbiguous), TimeZoneInfo.ConvertTimeToUtc(datAmbiguous).Kind);
Console.WriteLine();

DateTime datInvalid = new DateTime(2007, 3, 11, 02, 30, 00);
Console.WriteLine("Converting {0}, Kind {1}, Invalid {2}", datInvalid, datInvalid.Kind, TimeZoneInfo.Local.IsInvalidTime(datInvalid));
try
{
   Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datInvalid), TimeZoneInfo.ConvertTimeToUtc(datInvalid).Kind);
}
catch (ArgumentException e)
{
   Console.WriteLine("   {0}: Cannot convert {1} to UTC.", e.GetType().Name, datInvalid);
}
Console.WriteLine();

DateTime datNearMax = new DateTime(9999, 12, 31, 22, 00, 00);
Console.WriteLine("Converting {0}, Kind {1}", datNearMax, datNearMax.Kind);
Console.WriteLine("   ConvertTimeToUtc: {0}, Kind {1}", TimeZoneInfo.ConvertTimeToUtc(datNearMax), TimeZoneInfo.ConvertTimeToUtc(datNearMax).Kind);
Console.WriteLine();
//
// This example produces the following output if the local time zone
// is Pacific Standard Time:
//
//    Converting 8/31/2007 2:26:28 PM, Kind Local:
//       ConvertTimeToUtc: 8/31/2007 9:26:28 PM, Kind Utc
//
//    Converting 8/31/2007 9:26:28 PM, Kind Utc
//       ConvertTimeToUtc: 8/31/2007 9:26:28 PM, Kind Utc
//
//    Converting 10/26/2007 1:32:00 PM, Kind Unspecified
//       ConvertTimeToUtc: 10/26/2007 8:32:00 PM, Kind Utc
//
//    Converting 11/4/2007 1:30:00 AM, Kind Unspecified, Ambiguous True
//       ConvertTimeToUtc: 11/4/2007 9:30:00 AM, Kind Utc
//
//    Converting 3/11/2007 2:30:00 AM, Kind Unspecified, Invalid True
//       ArgumentException: Cannot convert 3/11/2007 2:30:00 AM to UTC.
//
//    Converting 12/31/9999 10:00:00 PM, Kind Unspecified
//       ConvertTimeToUtc: 12/31/9999 11:59:59 PM, Kind Utc
//

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
ConvertTimeToUtc 重载
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.ConvertTimeToUtc 方法 (DateTime, TimeZoneInfo)

TimeZoneInfo
.
.
::
.
ConvertTimeToUtc 方法 (DateTime, TimeZoneInfo)
TimeZoneInfo 类

将指定时区中的时间转换为协调世界时 (UTC)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ConvertTimeToUtc ( _
    dateTime As DateTime, _
    sourceTimeZone As TimeZoneInfo _
) As DateTime
public static DateTime ConvertTimeToUtc(
    DateTime dateTime,
    TimeZoneInfo sourceTimeZone
)
public:
static DateTime ConvertTimeToUtc(
    DateTime dateTime,
    TimeZoneInfo^ sourceTimeZone
)
static member ConvertTimeToUtc :
        dateTime:DateTime *
        sourceTimeZone:TimeZoneInfo -> DateTime

参数

dateTime
类型： System DateTime
要转换的日期和时间。
sourceTimeZone
类型： System TimeZoneInfo
dateTime 的时区。

返回值

类型： System DateTime
与 dateTime 参数对应的协调世界时 (UTC)。DateTime 对象的 Kind 属性始终设置为 DateTimeKind..::.Utc。 与 dateTime 参数对应的协调世界时 (UTC)。DateTime 对象的 Kind 属性始终设置为 DateTimeKind..::.Utc。
异常 | 条件
ArgumentException | dateTime dateTime.Kind 为 DateTimeKind..::.Utc，并且 sourceTimeZone 不等于 TimeZoneInfo..::.Utc。 - 或 - dateTime dateTime.Kind 为 DateTimeKind..::.Local，并且 sourceTimeZone 不等于 TimeZoneInfo..::.Local。 - 或 - sourceTimeZone.IsInvalidDateTime(dateTime sourceTimeZone.IsInvalidDateTime(dateTime) 返回 true。
ArgumentNullException | sourceTimeZone 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果 dateTime 参数的 Kind 属性等于 DateTimeKind..::.Utc，并且 sourceTimeZone 参数等于 TimeZoneInfo..::.Utc，则此方法返回 dateTime，而不执行任何转换。

如果 dateTime 对应于不明确的时间，则此方法假定其为源时区的标准时间。如果 dateTime 对应于无效时间，则此方法会引发 ArgumentException。 如果 dateTime 对应于不明确的时间，则此方法假定其为源时区的标准时间。如果 dateTime 对应于无效时间，则此方法会引发 ArgumentException。

如果等于 dateTime 的协调世界时 (UTC) 早于 DateTime..::.MinValue 或晚于 DateTime..::.MaxValue，则此方法分别返回 MinValue 或 MaxValue。

下面的示例从本地系统中检索当前日期并将其转换为协调世界时 (UTC)，然后再转换为东京标准时间，最后从东京标准时间转换回 UTC。请注意，这两个 UTC 时间是相同的。 下面的示例从本地系统中检索当前日期并将其转换为协调世界时 (UTC)，然后再转换为东京标准时间，最后从东京标准时间转换回 UTC。请注意，这两个 UTC 时间是相同的。

' Get time in local time zone
Dim thisTime As Date = Date.Now
Console.WriteLine("Time in {0} zone: {1}", IIf(TimeZoneInfo.Local.IsDaylightSavingTime(thisTime), _
                  TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), thisTime)
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local))
' Get Tokyo Standard Time zone
Dim tst As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")
Dim tstTime As Date = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst)
Console.WriteLine("Time in {0} zone: {1}", IIf(TimeZoneInfo.Local.IsDaylightSavingTime(tstTime), _
                  tst.DaylightName, tst.StandardName), tstTime)
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst))

// Get time in local time zone
DateTime thisTime = DateTime.Now;
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
                  TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
// Get Tokyo Standard Time zone
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(tstTime) ?
                  tst.DaylightName : tst.StandardName, tstTime);
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
ConvertTimeToUtc 重载
System 命名空间

其他资源

在不同时区之间转换时间


TimeZoneInfo ..::.CreateCustomTimeZone 方法

TimeZoneInfo
.
.
::
.
CreateCustomTimeZone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

定义在本地计算机上未找到的时区。

名称 说明
页首

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.CreateCustomTimeZone 方法 (String, TimeSpan, String, String)

TimeZoneInfo
.
.
::
.
CreateCustomTimeZone 方法 (String, TimeSpan, String, String)
TimeZoneInfo 类

创建带指定标识符的自定义时区、与协调世界时 (UTC) 的偏移量、显示名称以及标准时间显示名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateCustomTimeZone ( _
    id As String, _
    baseUtcOffset As TimeSpan, _
    displayName As String, _
    standardDisplayName As String _
) As TimeZoneInfo
public static TimeZoneInfo CreateCustomTimeZone(
    string id,
    TimeSpan baseUtcOffset,
    string displayName,
    string standardDisplayName
)
public:
static TimeZoneInfo^ CreateCustomTimeZone(
    String^ id,
    TimeSpan baseUtcOffset,
    String^ displayName,
    String^ standardDisplayName
)
static member CreateCustomTimeZone :
        id:string *
        baseUtcOffset:TimeSpan *
        displayName:string *
        standardDisplayName:string -> TimeZoneInfo

参数

id
类型： System String
时区标识符。
baseUtcOffset
类型： System TimeSpan
一个对象，表示此时区和协调世界时 (UTC) 之间的时差。
displayName
类型： System String
新时区的显示名称。
standardDisplayName
类型： System String
新时区的标准时间名称。

返回值

类型： System TimeZoneInfo
新时区。
异常 | 条件
ArgumentNullException | id 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | id 参数是空字符串 ("")。 - 或 - baseUtcOffset 参数不表示整分钟数。
ArgumentOutOfRangeException | baseUtcOffset 参数大于 14 小时或小于 -14 小时。

此 CreateCustomTimeZone(String, TimeSpan, String, String) 方法重载适合于创建没有调整的时区（即，不支持夏时制的时区）。若要定义包括夏时制调整的时区，请使用 TimeZoneInfo..::.CreateCustomTimeZone 或 TimeZoneInfo..::.CreateCustomTimeZone 方法。 此 CreateCustomTimeZone(String, TimeSpan, String, String) 方法重载适合于创建没有调整的时区（即，不支持夏时制的时区）。若要定义包括夏时制调整的时区，请使用 TimeZoneInfo..::.CreateCustomTimeZone 或 TimeZoneInfo..::.CreateCustomTimeZone 方法。

下表显示提供给 TimeZoneInfo..::.CreateCustomTimeZone 方法的参数与该方法调用返回的 TimeZoneInfo 对象的属性之间的关系。

CreateCustomTimeZone 参数 | TimeZoneInfo 属性
id | Id
baseUtcOffset | BaseUtcOffset
displayName | DisplayName
standardDisplayName | StandardName

通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如：

(GMT+02:00) Athens, Beirut, Istanbul, Minsk
(GMT-02:00) Mid-Atlantic
(GMT-07:00) Mountain Time (US & Canada)

下面的示例为南极洲莫森和豪尔姆湾地区创建自定义时区，然后显示将本地时间转换为新时区中时间的结果。 下面的示例为南极洲莫森和豪尔姆湾地区创建自定义时区，然后显示将本地时间转换为新时区中时间的结果。

Dim displayName As String = "(GMT+06:00) Antarctica/Mawson Time"
Dim standardName As String = "Mawson Time"
Dim offset As TimeSpan = New TimeSpan(06, 00, 00)
Dim mawson As TimeZoneInfo = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName)
Console.WriteLine("The current time is {0} {1}", _
                  TimeZoneInfo.ConvertTime(Date.Now, TimeZoneInfo.Local, mawson), _
                  mawson.StandardName)

string displayName = "(GMT+06:00) Antarctica/Mawson Time";
string standardName = "Mawson Time";
TimeSpan offset = new TimeSpan(06, 00, 00);
TimeZoneInfo mawson = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName);
Console.WriteLine("The current time is {0} {1}",
                  TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, mawson),
                  mawson.StandardName);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
CreateCustomTimeZone 重载
System 命名空间

其他资源

如何：创建不带调整规则的时区


TimeZoneInfo ..::.CreateCustomTimeZone 方法 (String, TimeSpan, String, String, String, array<TimeZoneInfo ..::.AdjustmentRule >[]()[])

TimeZoneInfo
.
.
::
.
CreateCustomTimeZone 方法 (String, TimeSpan, String, String, String,
array<
TimeZoneInfo
.
.
::
.
AdjustmentRule
>
[]
()
[]
)
TimeZoneInfo 类

创建带指定标识符的自定义时区、与协调世界时 (UTC) 的偏移量、显示名称、标准时间名称、夏时制名称和夏时制规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateCustomTimeZone ( _
    id As String, _
    baseUtcOffset As TimeSpan, _
    displayName As String, _
    standardDisplayName As String, _
    daylightDisplayName As String, _
    adjustmentRules As TimeZoneInfo..::..AdjustmentRule() _
) As TimeZoneInfo
public static TimeZoneInfo CreateCustomTimeZone(
    string id,
    TimeSpan baseUtcOffset,
    string displayName,
    string standardDisplayName,
    string daylightDisplayName,
    TimeZoneInfo..::..AdjustmentRule[] adjustmentRules
)
public:
static TimeZoneInfo^ CreateCustomTimeZone(
    String^ id,
    TimeSpan baseUtcOffset,
    String^ displayName,
    String^ standardDisplayName,
    String^ daylightDisplayName,
    array<TimeZoneInfo..::..AdjustmentRule^>^ adjustmentRules
)
static member CreateCustomTimeZone :
        id:string *
        baseUtcOffset:TimeSpan *
        displayName:string *
        standardDisplayName:string *
        daylightDisplayName:string *
        adjustmentRules:TimeZoneInfo..::..AdjustmentRule[] -> TimeZoneInfo

参数

id
类型： System String
时区标识符。
baseUtcOffset
类型： System TimeSpan
一个对象，表示此时区和协调世界时 (UTC) 之间的时差。
displayName
类型： System String
新时区的显示名称。
standardDisplayName
类型： System String
新时区的标准时间名称。
daylightDisplayName
类型： System String
新时区的夏时制名称。
adjustmentRules
类型：
array<
System TimeZoneInfo AdjustmentRule
>
[]
()
[]

一个数组，它将基本 UTC 偏移量增加了特定的时间。

返回值

类型： System TimeZoneInfo
一个表示新时区的 TimeZoneInfo 对象。
异常 | 条件
ArgumentNullException | id 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | id 参数是空字符串 ("")。 - 或 - baseUtcOffset 参数不表示整分钟数。
ArgumentOutOfRangeException | baseUtcOffset 参数大于 14 小时或小于 -14 小时。
InvalidTimeZoneException | 在 adjustmentRules 参数中指定的调整规则重叠。 - 或 - 在 adjustmentRules 参数中指定的调整规则不是按时间顺序排列。 - 或 - adjustmentRules 中的一个或多个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - 一个日期可以有多个应用于该日期的调整规则。 - 或 - baseUtcOffset 参数与 adjustmentRules 数组中一个或多个对象的 TimeZoneInfo..::.AdjustmentRule..::.DaylightDelta 值的和大于 14 小时或小于 -14 小时。

此 TimeZoneInfo..::.CreateCustomTimeZone 方法重载适合于创建支持夏时制的时区。若要定义不支持夏时制的时区，请使用 TimeZoneInfo..::.CreateCustomTimeZone 或 TimeZoneInfo..::.CreateCustomTimeZone 方法。 此 TimeZoneInfo..::.CreateCustomTimeZone 方法重载适合于创建支持夏时制的时区。若要定义不支持夏时制的时区，请使用 TimeZoneInfo..::.CreateCustomTimeZone 或 TimeZoneInfo..::.CreateCustomTimeZone 方法。

下表显示提供给 TimeZoneInfo..::.CreateCustomTimeZone 方法的参数与该方法调用返回的 TimeZoneInfo 对象成员之间的关系。

CreateCustomTimeZone 参数 | TimeZoneInfo 成员
id | Id
baseUtcOffset | BaseUtcOffset
displayName | DisplayName
standardDisplayName | StandardName
daylightDisplayName | DaylightName
adjustmentRules | GetAdjustmentRules 方法返回的 System..::.TimeZoneInfo..::.AdjustmentRule 对象的数组。

通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如：

(GMT+02:00) Athens, Beirut, Istanbul, Minsk
(GMT-02:00) Mid-Atlantic
(GMT-07:00) Mountain Time (US & Canada)

baseUtcOffset 参数为所有时区的调整规则定义自定义时区与协调世界时 (UTC) 的偏移量。也就是说，TimeZoneInfo 对象模型假定时区与 UTC 的偏移量在时区的整个生命中是常量，并且独立于特定调整规则而存在。若要反映已更改其与 UTC 的偏移量的时区，必须创建新时区对象。 baseUtcOffset 参数为所有时区的调整规则定义自定义时区与协调世界时 (UTC) 的偏移量。也就是说，TimeZoneInfo 对象模型假定时区与 UTC 的偏移量在时区的整个生命中是常量，并且独立于特定调整规则而存在。若要反映已更改其与 UTC 的偏移量的时区，必须创建新时区对象。 baseUtcOffset 参数为所有时区的调整规则定义自定义时区与协调世界时 (UTC) 的偏移量。也就是说，TimeZoneInfo 对象模型假定时区与 UTC 的偏移量在时区的整个生命中是常量，并且独立于特定调整规则而存在。若要反映已更改其与 UTC 的偏移量的时区，必须创建新时区对象。

可通过以下操作来定义时区的调整规则：

  1. 调用 CreateFloatingDateRule 或 CreateFixedDateRule 方法来定义每个调整规则的开始和结束转换时间。

  2. 为每个调整规则调用 CreateAdjustmentRule 方法。

  3. 将调整规则分配给可作为 adjustmentRules 参数传递的数组。

下面的示例为南极洲帕默站和安维斯岛创建自定义时区，然后将本地时间转换为新时区中的时间并显示结果。 下面的示例为南极洲帕默站和安维斯岛创建自定义时区，然后将本地时间转换为新时区中的时间并显示结果。

' Define transition times to/from DST
Dim startTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#04:00:00#, 10, 2, DayOfWeek.Sunday)
Dim endTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#3:00:00#, 3, 2, DayOfWeek.Sunday)
' Define adjustment rule
Dim delta As TimeSpan = New TimeSpan(1, 0, 0)
Dim adjustment As TimeZoneInfo.AdjustmentRule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#10/01/1999#, Date.MaxValue.Date, delta, startTransition, endTransition)
' Create array for adjustment rules
Dim adjustments() As TimeZoneInfo.AdjustmentRule = {adjustment}
' Define other custom time zone arguments
Dim DisplayName As String = "(GMT-04:00) Antarctica/Palmer Time"
Dim standardName As String = "Palmer Standard Time"
Dim daylightName As String = "Palmer Daylight Time"
Dim offset As TimeSpan = New TimeSpan(-4, 0, 0)
Dim palmer As TimeZoneInfo = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments)
Console.WriteLine("The current time is {0} {1}", _
                  TimeZoneInfo.ConvertTime(Date.Now, TimeZoneInfo.Local, palmer), _
                  palmer.StandardName)

// Define transition times to/from DST
TimeZoneInfo.TransitionTime startTransition, endTransition;
startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0),
                                                                  10, 2, DayOfWeek.Sunday);
endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0),
                                                                3, 2, DayOfWeek.Sunday);
// Define adjustment rule
TimeSpan delta = new TimeSpan(1, 0, 0);
TimeZoneInfo.AdjustmentRule adjustment;
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1999, 10, 1), DateTime.MaxValue.Date, delta, startTransition, endTransition);
// Create array for adjustment rules
TimeZoneInfo.AdjustmentRule[] adjustments = {adjustment};
// Define other custom time zone arguments
string displayName = "(GMT-04:00) Antarctica/Palmer Time";
string standardName = "Palmer Time";
string daylightName = "Palmer Daylight Time";
TimeSpan offset = new TimeSpan(-4, 0, 0);
TimeZoneInfo palmer = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments);
Console.WriteLine("The current time is {0} {1}",
                  TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, palmer),
                  palmer.StandardName);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
CreateCustomTimeZone 重载
System 命名空间

其他资源

如何：创建带有调整规则的时区


TimeZoneInfo ..::.CreateCustomTimeZone 方法 (String, TimeSpan, String, String, String, array<TimeZoneInfo ..::.AdjustmentRule >[]()[], Boolean)

TimeZoneInfo
.
.
::
.
CreateCustomTimeZone 方法 (String, TimeSpan, String, String, String,
array<
TimeZoneInfo
.
.
::
.
AdjustmentRule
>
[]
()
[]
, Boolean)
TimeZoneInfo 类

创建带指定标识符的自定义时区、与协调世界时 (UTC) 的偏移量、显示名称、标准时间名称、夏时制名称、夏时制规则以及指示返回的对象是否反映夏时制信息的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateCustomTimeZone ( _
    id As String, _
    baseUtcOffset As TimeSpan, _
    displayName As String, _
    standardDisplayName As String, _
    daylightDisplayName As String, _
    adjustmentRules As TimeZoneInfo..::..AdjustmentRule(), _
    disableDaylightSavingTime As Boolean _
) As TimeZoneInfo
public static TimeZoneInfo CreateCustomTimeZone(
    string id,
    TimeSpan baseUtcOffset,
    string displayName,
    string standardDisplayName,
    string daylightDisplayName,
    TimeZoneInfo..::..AdjustmentRule[] adjustmentRules,
    bool disableDaylightSavingTime
)
public:
static TimeZoneInfo^ CreateCustomTimeZone(
    String^ id,
    TimeSpan baseUtcOffset,
    String^ displayName,
    String^ standardDisplayName,
    String^ daylightDisplayName,
    array<TimeZoneInfo..::..AdjustmentRule^>^ adjustmentRules,
    bool disableDaylightSavingTime
)
static member CreateCustomTimeZone :
        id:string *
        baseUtcOffset:TimeSpan *
        displayName:string *
        standardDisplayName:string *
        daylightDisplayName:string *
        adjustmentRules:TimeZoneInfo..::..AdjustmentRule[] *
        disableDaylightSavingTime:bool -> TimeZoneInfo

参数

id
类型： System String
时区标识符。
baseUtcOffset
类型： System TimeSpan
一个 TimeSpan 对象，表示此时区和协调世界时 (UTC) 之间的时差。
displayName
类型： System String
新时区的显示名称。
standardDisplayName
类型： System String
新时区的标准时间名称。
daylightDisplayName
类型： System String
新时区的夏时制名称。
adjustmentRules
类型：
array<
System TimeZoneInfo AdjustmentRule
>
[]
()
[]

一个 TimeZoneInfo..::.AdjustmentRule 对象的数组，这些对象增加特定期间的基本 UTC 偏移量。
disableDaylightSavingTime
类型： System Boolean
如果为 true，则丢弃包含新对象的 adjustmentRules 中与夏时制相关的所有信息；否则为 false。

返回值

类型： System TimeZoneInfo
新时区。如果 disableDaylightSavingTime 参数为 true，则返回的对象没有夏时制数据。 新时区。如果 disableDaylightSavingTime 参数为 true，则返回的对象没有夏时制数据。
异常 | 条件
ArgumentNullException | id 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | id 参数是空字符串 ("")。 - 或 - baseUtcOffset 参数不表示整分钟数。
ArgumentOutOfRangeException | baseUtcOffset 参数大于 14 小时或小于 -14 小时。
InvalidTimeZoneException | 在 adjustmentRules 参数中指定的调整规则重叠。 - 或 - 在 adjustmentRules 参数中指定的调整规则不是按时间顺序排列。 - 或 - adjustmentRules 中的一个或多个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - 一个日期可以有多个应用于该日期的调整规则。 - 或 - baseUtcOffset 参数与 adjustmentRules 数组中一个或多个对象的 TimeZoneInfo..::.AdjustmentRule..::.DaylightDelta 值的和大于 14 小时或小于 -14 小时。

可以使用此 TimeZoneInfo..::.CreateCustomTimeZone 方法重载创建可由运行时的条件确定其是否支持夏时制的自定义时区。

下表显示提供给 TimeZoneInfo..::.CreateCustomTimeZone 方法的参数与该方法调用返回的 TimeZoneInfo 对象成员之间的关系。

CreateCustomTimeZone 参数 | TimeZoneInfo 属性
id | Id
baseUtcOffset | BaseUtcOffset
displayName | DisplayName
standardDisplayName | StandardName
daylightDisplayName | 如果 disableDaylightSavingTime 为 false，则为 DaylightName；如果 disableDaylightSavingTime 为 true，则为 String..::.Empty。
adjustmentRules | 如果 disableDaylightSavingTime 为 false，则为 GetAdjustmentRules 方法返回的 TimeZoneInfo..::.AdjustmentRule 对象的数组；如果 disableDaylightSavingTime 为 true，则为 GetAdjustmentRules 方法返回的空数组。
disableDaylightSavingTime | 非 SupportsDaylightSavingTime。

通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如： 通常，时区的标准时间名称与其标识符是相同的。但时区标识符的长度不应超过 32 个字符。传递给 displayName 参数的字符串遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。例如：

(GMT+02:00) Athens, Beirut, Istanbul, Minsk
(GMT-02:00) Mid-Atlantic
(GMT-07:00) Mountain Time (US & Canada)

可通过以下操作来定义时区的调整规则：

  1. 调用 CreateFloatingDateRule 或 CreateFixedDateRule 方法来定义每个调整规则的开始和结束转换规则。

  2. 为每个调整规则调用 CreateAdjustmentRule 方法。

  3. 将调整规则分配给可作为 adjustmentRules 参数传递的数组。

如果 disableDaylightSavingTime 参数为 false，则此方法的使用等效于 TimeZoneInfo..::.CreateCustomTimeZone 重载。如果 disableDaylightSavingTime 为 true，则返回的对象不包括调整规则和值为空字符串的 DaylightName 属性。 如果 disableDaylightSavingTime 参数为 false，则此方法的使用等效于 TimeZoneInfo..::.CreateCustomTimeZone 重载。如果 disableDaylightSavingTime 为 true，则返回的对象不包括调整规则和值为空字符串的 DaylightName 属性。

下面的示例为南极洲帕默站和安维斯岛创建自定义时区，它在对 TimeZoneInfo..::.CreateCustomTimeZone 方法的调用中将 disableDaylightSavingTime 参数设置为 true。然后该示例显示新时区的夏时制名称（如果有）和调整规则数，以确认新时区没有夏时制信息。
下面的示例为南极洲帕默站和安维斯岛创建自定义时区，它在对 TimeZoneInfo..::.CreateCustomTimeZone 方法的调用中将 disableDaylightSavingTime 参数设置为 true。然后该示例显示新时区的夏时制名称（如果有）和调整规则数，以确认新时区没有夏时制信息。
下面的示例为南极洲帕默站和安维斯岛创建自定义时区，它在对 TimeZoneInfo..::.CreateCustomTimeZone 方法的调用中将 disableDaylightSavingTime 参数设置为 true。然后该示例显示新时区的夏时制名称（如果有）和调整规则数，以确认新时区没有夏时制信息。

' Define transition times to/from DST
Dim startTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#04:00:00#, 10, 2, DayOfWeek.Sunday)
Dim endTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#3:00:00#, 3, 2, DayOfWeek.Sunday)
' Define adjustment rule
Dim delta As TimeSpan = New TimeSpan(1, 0, 0)
Dim adjustment As TimeZoneInfo.AdjustmentRule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#10/01/1999#, Date.MaxValue.Date, delta, startTransition, endTransition)
' Create array for adjustment rules
Dim adjustments() As TimeZoneInfo.AdjustmentRule = {adjustment}
' Define other custom time zone arguments
Dim displayName As String = "(GMT-04:00) Antarctica/Palmer Time"
Dim standardName As String = "Palmer Standard Time"
Dim daylightName As String = "Palmer Daylight Time"
Dim offset As TimeSpan = New TimeSpan(-4, 0, 0)
Dim palmer As TimeZoneInfo = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments, True)
' Indicate whether new time zone's adjustment rules are present
Console.WriteLine("{0} {1}has {2} adjustment rules.", _
                  palmer.StandardName, _
                  IIf(Not String.IsNullOrEmpty(palmer.DaylightName), "(" & palmer.DaylightName & ") ", ""), _
                  palmer.GetAdjustmentRules().Length)
' Indicate whether new time zone supports DST
Console.WriteLine("{0} supports DST: {1}", palmer.StandardName, palmer.SupportsDaylightSavingTime)

// Define transition times to/from DST
TimeZoneInfo.TransitionTime startTransition, endTransition;
startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0),
                                                                  10, 2, DayOfWeek.Sunday);
endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1,3, 0, 0),
                                                                3, 2, DayOfWeek.Sunday);
// Define adjustment rule
TimeSpan delta = new TimeSpan(1, 0, 0);
TimeZoneInfo.AdjustmentRule adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1999, 10, 1),
                                      DateTime.MaxValue.Date, delta, startTransition, endTransition);
// Create array for adjustment rules
TimeZoneInfo.AdjustmentRule[] adjustments = {adjustment};
// Define other custom time zone arguments
string displayName = "(GMT-04:00) Antarctica/Palmer Time";
string standardName = "Palmer Standard Time";
string daylightName = "Palmer Daylight Time";
TimeSpan offset = new TimeSpan(-4, 0, 0);
// Create custom time zone without copying DST information
TimeZoneInfo palmer = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName,
                                                  daylightName, adjustments, true);
// Indicate whether new time zone//s adjustment rules are present
Console.WriteLine("{0} {1}has {2} adjustment rules.",
                  palmer.StandardName,
                  ! (string.IsNullOrEmpty(palmer.DaylightName)) ?  "(" + palmer.DaylightName + ") ": "" ,
                  palmer.GetAdjustmentRules().Length);
// Indicate whether new time zone supports DST
Console.WriteLine("{0} supports DST: {1}", palmer.StandardName, palmer.SupportsDaylightSavingTime);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
CreateCustomTimeZone 重载
System 命名空间

其他资源

如何：创建不带调整规则的时区
如何：创建带有调整规则的时区


TimeZoneInfo ..::.Equals 方法

TimeZoneInfo
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

确定两个 TimeZoneInfo 对象是否相等。

名称 说明
页首

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.Equals 方法 (TimeZoneInfo)

TimeZoneInfo
.
.
::
.
Equals 方法 (TimeZoneInfo)
TimeZoneInfo 类

确定当前的 TimeZoneInfo 对象和另一个 TimeZoneInfo 对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    other As TimeZoneInfo _
) As Boolean
public bool Equals(
    TimeZoneInfo other
)
public:
virtual bool Equals(
    TimeZoneInfo^ other
) sealed
abstract Equals :
        other:TimeZoneInfo -> bool
override Equals :
        other:TimeZoneInfo -> bool

参数

other
类型： System TimeZoneInfo
要与当前对象进行比较的另一个对象。

返回值

类型： System Boolean
如果两个 TimeZoneInfo 对象相等，则为 true；否则为 false。

实现

相等性以值的比较为基础。在以下条件下，两个 TimeZoneInfo 对象被视为相等： 相等性以值的比较为基础。在以下条件下，两个 TimeZoneInfo 对象被视为相等：

  • 它们的 Id 属性值相同。

  • 它们具有相同的调整规则。

TimeZoneInfo..::.Equals(TimeZoneInfo) 返回计算以下表达式所得到的布尔值：

[C#]

other.Id == this.Id && HasSameRules(other);

[Visual Basic]

other.Id = me.Id AndAlso HasSameRules(other)

如果 other 参数为未初始化的 TimeZoneInfo 对象，则此方法返回 false。

下面的示例使用 Equals(TimeZoneInfo) 方法确定本地时区是太平洋标准时间还是东部标准时间。

Dim thisTimeZone, zone1, zone2 As TimeZoneInfo

thisTimeZone = TimeZoneInfo.Local
zone1 = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")
zone2 = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
Console.WriteLine(thisTimeZone.Equals(zone1))
Console.WriteLine(thisTimeZone.Equals(zone2))

TimeZoneInfo thisTimeZone, zone1, zone2;

thisTimeZone = TimeZoneInfo.Local;
zone1 = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
zone2 = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
Console.WriteLine(thisTimeZone.Equals(zone1));
Console.WriteLine(thisTimeZone.Equals(zone2));

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
Equals 重载
System 命名空间


TimeZoneInfo ..::.FindSystemTimeZoneById 方法

TimeZoneInfo
.
.
::
.
FindSystemTimeZoneById 方法
TimeZoneInfo 类

根据其标识符从注册表中检索 TimeZoneInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FindSystemTimeZoneById ( _
    id As String _
) As TimeZoneInfo
public static TimeZoneInfo FindSystemTimeZoneById(
    string id
)
public:
static TimeZoneInfo^ FindSystemTimeZoneById(
    String^ id
)
static member FindSystemTimeZoneById :
        id:string -> TimeZoneInfo

参数

id
类型： System String
时区标识符，它对应于 Id 属性。

返回值

类型： System TimeZoneInfo
一个对象，其标识符为 id 参数的值。
异常 | 条件
OutOfMemoryException | 系统没有足够内存保留有关时区的信息。
ArgumentNullException | id 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TimeZoneNotFoundException | 未找到 id 指定的时区标识符。这表示名称与 id 匹配的注册表项不存在，或者该项存在但不包含任何时区数据。 未找到 id 指定的时区标识符。这表示名称与 id 匹配的注册表项不存在，或者该项存在但不包含任何时区数据。
SecurityException | 进程没有读取包含时区信息的注册表项所需的权限。
InvalidTimeZoneException | 已找到时区标识符，但注册表数据已损坏。

若要匹配成功，id 参数必须在长度上与时区的注册表项完全对应，但与大小写无关。即，id 与时区标识符的比较不区分大小写。若要根据部分匹配检索时区对象，则可以编写自定义过程来使用 GetSystemTimeZones 方法返回的 TimeZoneInfo 对象的只读集合。 若要匹配成功，id 参数必须在长度上与时区的注册表项完全对应，但与大小写无关。即，id 与时区标识符的比较不区分大小写。若要根据部分匹配检索时区对象，则可以编写自定义过程来使用 GetSystemTimeZones 方法返回的 TimeZoneInfo 对象的只读集合。

FindSystemTimeZoneById 尝试将 id 匹配至注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 分支的子项名称（对于 Windows XP 和 Windows Vista）。此分支不一定包含综合的时区标识符列表。如果应用程序需要，您可以创建一个特定时区，具体方法为调用 CreateCustomTimeZone 方法的重载之一，或者调用 FromSerializedString 来反序列化表示所需时区的 TimeZoneInfo 对象。然而，这些方法调用所创建的时区不包括在注册表中，从而不能使用 FindSystemTimeZoneById 方法进行检索。只能通过由 CreateCustomTimeZone 或 FromSerializedString 方法调用返回的对象引用来访问这些自定义时区。 FindSystemTimeZoneById 尝试将 id 匹配至注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 分支的子项名称（对于 Windows XP 和 Windows Vista）。此分支不一定包含综合的时区标识符列表。如果应用程序需要，您可以创建一个特定时区，具体方法为调用 CreateCustomTimeZone 方法的重载之一，或者调用 FromSerializedString 来反序列化表示所需时区的 TimeZoneInfo 对象。然而，这些方法调用所创建的时区不包括在注册表中，从而不能使用 FindSystemTimeZoneById 方法进行检索。只能通过由 CreateCustomTimeZone 或 FromSerializedString 方法调用返回的对象引用来访问这些自定义时区。 FindSystemTimeZoneById 尝试将 id 匹配至注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 分支的子项名称（对于 Windows XP 和 Windows Vista）。此分支不一定包含综合的时区标识符列表。如果应用程序需要，您可以创建一个特定时区，具体方法为调用 CreateCustomTimeZone 方法的重载之一，或者调用 FromSerializedString 来反序列化表示所需时区的 TimeZoneInfo 对象。然而，这些方法调用所创建的时区不包括在注册表中，从而不能使用 FindSystemTimeZoneById 方法进行检索。只能通过由 CreateCustomTimeZone 或 FromSerializedString 方法调用返回的对象引用来访问这些自定义时区。 FindSystemTimeZoneById 尝试将 id 匹配至注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 分支的子项名称（对于 Windows XP 和 Windows Vista）。此分支不一定包含综合的时区标识符列表。如果应用程序需要，您可以创建一个特定时区，具体方法为调用 CreateCustomTimeZone 方法的重载之一，或者调用 FromSerializedString 来反序列化表示所需时区的 TimeZoneInfo 对象。然而，这些方法调用所创建的时区不包括在注册表中，从而不能使用 FindSystemTimeZoneById 方法进行检索。只能通过由 CreateCustomTimeZone 或 FromSerializedString 方法调用返回的对象引用来访问这些自定义时区。 FindSystemTimeZoneById 尝试将 id 匹配至注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 分支的子项名称（对于 Windows XP 和 Windows Vista）。此分支不一定包含综合的时区标识符列表。如果应用程序需要，您可以创建一个特定时区，具体方法为调用 CreateCustomTimeZone 方法的重载之一，或者调用 FromSerializedString 来反序列化表示所需时区的 TimeZoneInfo 对象。然而，这些方法调用所创建的时区不包括在注册表中，从而不能使用 FindSystemTimeZoneById 方法进行检索。只能通过由 CreateCustomTimeZone 或 FromSerializedString 方法调用返回的对象引用来访问这些自定义时区。

下面的示例使用 FindSystemTimeZoneById 方法检索东京标准时区。然后该示例使用此 TimeZoneInfo 对象将本地时间转换为东京时间，并确定其是东京标准时间还是东京夏时制。 下面的示例使用 FindSystemTimeZoneById 方法检索东京标准时区。然后该示例使用此 TimeZoneInfo 对象将本地时间转换为东京时间，并确定其是东京标准时间还是东京夏时制。

' Get time in local time zone
Dim thisTime As Date = Date.Now
Console.WriteLine("Time in {0} zone: {1}", IIf(TimeZoneInfo.Local.IsDaylightSavingTime(thisTime), _
                  TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), thisTime)
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local))
' Get Tokyo Standard Time zone
Dim tst As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")
Dim tstTime As Date = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst)
Console.WriteLine("Time in {0} zone: {1}", IIf(TimeZoneInfo.Local.IsDaylightSavingTime(tstTime), _
                  tst.DaylightName, tst.StandardName), tstTime)
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst))

// Get time in local time zone
DateTime thisTime = DateTime.Now;
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
                  TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
// Get Tokyo Standard Time zone
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(tstTime) ?
                  tst.DaylightName : tst.StandardName, tstTime);
Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间
Id

其他资源

如何：实例化 TimeZoneInfo 对象


TimeZoneInfo ..::.FromSerializedString 方法

TimeZoneInfo
.
.
::
.
FromSerializedString 方法
TimeZoneInfo 类

反序列化一个字符串，以重新创建原来已序列化的 TimeZoneInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FromSerializedString ( _
    source As String _
) As TimeZoneInfo
public static TimeZoneInfo FromSerializedString(
    string source
)
public:
static TimeZoneInfo^ FromSerializedString(
    String^ source
)
static member FromSerializedString :
        source:string -> TimeZoneInfo

参数

source
类型： System String
已序列化的 TimeZoneInfo 对象的字符串表示形式。

返回值

类型： System TimeZoneInfo
原始序列化对象。
异常 | 条件
ArgumentException | source 参数为 String..::.Empty。
ArgumentNullException | source 参数为空字符串。
SerializationException | 无法将源参数反序列化回 TimeZoneInfo 对象。

有一种替代办法是提供创建在注册表中找不到的时区所需的所有代码。您可以定义自定义时区，然后在独立可执行文件中使用 ToSerializedString 方法，或者使用应用程序的安装程序将该时区保存为字符串。应用程序随后能从该字符串的存储位置检索到它，并使用 FromSerializedString 方法将它实例化。 有一种替代办法是提供创建在注册表中找不到的时区所需的所有代码。您可以定义自定义时区，然后在独立可执行文件中使用 ToSerializedString 方法，或者使用应用程序的安装程序将该时区保存为字符串。应用程序随后能从该字符串的存储位置检索到它，并使用 FromSerializedString 方法将它实例化。 有一种替代办法是提供创建在注册表中找不到的时区所需的所有代码。您可以定义自定义时区，然后在独立可执行文件中使用 ToSerializedString 方法，或者使用应用程序的安装程序将该时区保存为字符串。应用程序随后能从该字符串的存储位置检索到它，并使用 FromSerializedString 方法将它实例化。

下面的示例尝试从本地系统中检索南极时区。如果失败，代码将尝试从应用程序目录中的文本文件检索有关时区的信息。如果此尝试失败，代码将创建时区并将时区的相关信息写入文本文件。 下面的示例尝试从本地系统中检索南极时区。如果失败，代码将尝试从应用程序目录中的文本文件检索有关时区的信息。如果此尝试失败，代码将创建时区并将时区的相关信息写入文本文件。 下面的示例尝试从本地系统中检索南极时区。如果失败，代码将尝试从应用程序目录中的文本文件检索有关时区的信息。如果此尝试失败，代码将创建时区并将时区的相关信息写入文本文件。

Private Function InitializeTimeZone() As TimeZoneInfo
   Dim southPole As TimeZoneInfo = Nothing
   ' Determine if South Pole time zone is defined in system
   Try
      southPole = TimeZoneInfo.FindSystemTimeZoneById("Antarctica/South Pole Standard Time")
   ' Time zone does not exist; create it, store it in a text file, and return it
   Catch e As TimeZoneNotFoundException
      Dim found As Boolean
      Const filename As String = ".\TimeZoneInfo.txt"

      If File.Exists(filename) Then
         Dim reader As StreamReader = New StreamReader(fileName)
         Dim timeZoneString As String
         Do While reader.Peek() >= 0
            timeZoneString = reader.ReadLine()
            If timeZoneString.Contains("Antarctica/South Pole") Then
               southPole = TimeZoneInfo.FromSerializedString(timeZoneString)
               reader.Close()
               found = True
               Exit Do
            End If
         Loop
      End If
      If Not found Then
         ' Define transition times to/from DST
         Dim startTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00#, 10, 1, DayOfWeek.Sunday)
         Dim endTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00#, 3, 3, DayOfWeek.Sunday)
         ' Define adjustment rule
         Dim delta As TimeSpan = New TimeSpan(1, 0, 0)
         Dim adjustment As TimeZoneInfo.AdjustmentRule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#10/01/1989#, Date.MaxValue.Date, delta, startTransition, endTransition)
         ' Create array for adjustment rules
         Dim adjustments() As TimeZoneInfo.AdjustmentRule = {adjustment}
         ' Define other custom time zone arguments
         Dim displayName As String = "(GMT+12:00) Antarctica/South Pole"
         Dim standardName As String = "Antarctica/South Pole Standard Time"
         Dim daylightName As String = "Antarctica/South Pole Daylight Time"
         Dim offset As TimeSpan = New TimeSpan(12, 0, 0)
         southPole = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments)
         ' Write time zone to the file
         Dim writer As StreamWriter = New StreamWriter(filename, True)
         writer.WriteLine(southPole.ToSerializedString())
         writer.Close()
      End If
   End Try
   Return southPole
End Function

private TimeZoneInfo InitializeTimeZone()
{
   TimeZoneInfo southPole = null;
   // Determine if South Pole time zone is defined in system
   try
   {
      southPole = TimeZoneInfo.FindSystemTimeZoneById("Antarctica/South Pole Standard Time");
   }
   // Time zone does not exist; create it, store it in a text file, and return it
   catch
   {
      const string filename = @".\TimeZoneInfo.txt";
      bool found = false;

      if (File.Exists(filename))
      {
         StreamReader reader = new StreamReader(filename);
         string timeZoneInfo;
         while (reader.Peek() >= 0)
         {
            timeZoneInfo = reader.ReadLine();
            if (timeZoneInfo.Contains("Antarctica/South Pole"))
            {
               southPole = TimeZoneInfo.FromSerializedString(timeZoneInfo);
               reader.Close();
               found = true;
               break;
            }
         }
      }
      if (! found)
      {
         // Define transition times to/from DST
         TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 10, 1, DayOfWeek.Sunday);
         TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 3, 3, DayOfWeek.Sunday);
         // Define adjustment rule
         TimeSpan delta = new TimeSpan(1, 0, 0);
         TimeZoneInfo.AdjustmentRule adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1989, 10, 1), DateTime.MaxValue.Date, delta, startTransition, endTransition);
         // Create array for adjustment rules
         TimeZoneInfo.AdjustmentRule[] adjustments = {adjustment};
         // Define other custom time zone arguments
         string displayName = "(GMT+12:00) Antarctica/South Pole";
         string standardName = "Antarctica/South Pole Standard Time";
         string daylightName = "Antarctica/South Pole Daylight Time";
         TimeSpan offset = new TimeSpan(12, 0, 0);
         southPole = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments);
         // Write time zone to the file
         StreamWriter writer = new StreamWriter(filename, true);
         writer.WriteLine(southPole.ToSerializedString());
         writer.Close();
      }
   }
   return southPole;
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间
ToSerializedString

其他资源

如何：从嵌入的资源还原时区


TimeZoneInfo ..::.GetAdjustmentRules 方法

TimeZoneInfo
.
.
::
.
GetAdjustmentRules 方法
TimeZoneInfo 类

检索应用至当前 TimeZoneInfo 对象的 TimeZoneInfo..::.AdjustmentRule 对象的数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetAdjustmentRules As TimeZoneInfo..::..AdjustmentRule()
public TimeZoneInfo..::..AdjustmentRule[] GetAdjustmentRules()
public:
array<TimeZoneInfo..::..AdjustmentRule^>^ GetAdjustmentRules()
member GetAdjustmentRules : unit -> TimeZoneInfo..::..AdjustmentRule[]

返回值

类型：
array<
System TimeZoneInfo AdjustmentRule
>
[]
()
[]

此时区的对象的数组。
异常 | 条件
OutOfMemoryException | 系统没有足够内存来制作调整规则在内存中的副本。

GetAdjustmentRules 方法检索 System..::.TimeZoneInfo..::.AdjustmentRule 对象的数组。数组中的每个对象定义该时区调整的有效开始日期和结束日期以及增量（即调整用来使时间更改的确切数量）。此外，两个属性返回 System..::.TimeZoneInfo..::.TransitionTime 对象，而这些对象定义每年与标准时间发生转换的时间。
GetAdjustmentRules 方法检索 System..::.TimeZoneInfo..::.AdjustmentRule 对象的数组。数组中的每个对象定义该时区调整的有效开始日期和结束日期以及增量（即调整用来使时间更改的确切数量）。此外，两个属性返回 System..::.TimeZoneInfo..::.TransitionTime 对象，而这些对象定义每年与标准时间发生转换的时间。
GetAdjustmentRules 方法检索 System..::.TimeZoneInfo..::.AdjustmentRule 对象的数组。数组中的每个对象定义该时区调整的有效开始日期和结束日期以及增量（即调整用来使时间更改的确切数量）。此外，两个属性返回 System..::.TimeZoneInfo..::.TransitionTime 对象，而这些对象定义每年与标准时间发生转换的时间。

如果时区没有调整规则，则 GetAdjustmentRules 方法返回空数组（Length 为零的数组）。

对 GetAdjustmentRules 方法返回的数组的元素进行的任何修改均不反映在属于特定时区的调整规则中。若要修改时区的调整规则（例如，反映其与夏时制之间的历史转换），则必须使用适当的调整规则创建新时区，而不是修改现有的时区。 对 GetAdjustmentRules 方法返回的数组的元素进行的任何修改均不反映在属于特定时区的调整规则中。若要修改时区的调整规则（例如，反映其与夏时制之间的历史转换），则必须使用适当的调整规则创建新时区，而不是修改现有的时区。

下面的示例检索在本地系统上定义的所有时区，并将其调整规则的完整信息显示在控制台上。

Private Enum WeekOfMonth As Integer
   First = 1
   Second = 2
   Third = 3
   Fourth = 4
   Last = 5
End Enum

Private Sub ShowStartAndEndDates()
   ' Get all time zones from system
   Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
   ' Get each time zone
   For Each timeZone As TimeZoneInfo In timeZones
      Dim adjustments() As TimeZoneInfo.AdjustmentRule = timeZone.GetAdjustmentRules()
      ' Display message for time zones with no adjustments
      If adjustments.Length = 0 Then
         Console.WriteLine("{0} has no adjustment rules", timeZone.StandardName)
      Else
         ' Handle time zones with 1 or 2+ adjustments differently
         Dim showCount As Boolean = False
         Dim ctr As Integer = 0
         Dim spacer As String = ""

         Console.WriteLine("{0} Adjustment rules", timeZone.StandardName)
         If adjustments.Length > 1 Then showCount = True : spacer = "   "
         ' Iterate adjustment rules
         For Each adjustment As TimeZoneInfo.AdjustmentRule in adjustments
            If showCount Then
               Console.WriteLine("   Adjustment rule #{0}", ctr+1)
               ctr += 1
            End If
            ' Display general adjustment information
            Console.WriteLine("{0}   Start Date: {1:D}", spacer, adjustment.DateStart)
            Console.WriteLine("{0}   End Date: {1:D}", spacer, adjustment.DateEnd)
            Console.WriteLine("{0}   Time Change: {1}:{2:00} hours", spacer, _
                              adjustment.DaylightDelta.Hours, adjustment.DaylightDelta.Minutes)
            ' Get transition start information
            Dim transitionStart As TimeZoneInfo.TransitionTime = adjustment.DaylightTransitionStart
            Console.Write("{0}   Annual Start: ", spacer)
            If transitionStart.IsFixedDateRule Then
               Console.WriteLine("On {0} {1} at {2:t}", _
                                 MonthName(transitionStart.Month), _
                                 transitionStart.Day, _
                                 transitionStart.TimeOfDay)
            Else
               Console.WriteLine("The {0} {1} of {2} at {3:t}", _
                                 CType(transitionStart.Week, WeekOfMonth).ToString(), _
                                 transitionStart.DayOfWeek.ToString(), _
                                 MonthName(transitionStart.Month), _
                                 transitionStart.TimeOfDay)
            End If
            ' Get transition end information
            Dim transitionEnd As TimeZoneInfo.TransitionTime = adjustment.DaylightTransitionEnd

            Console.Write("{0}   Annual End: ", spacer)
            If transitionEnd.IsFixedDateRule Then
               Console.WriteLine("On {0} {1} at {2:t}", _
                                 MonthName(transitionEnd.Month), _
                                 transitionEnd.Day, _
                                 transitionEnd.TimeOfDay)
            Else
               Console.WriteLine("The {0} {1} of {2} at {3:t}", _
                                 CType(transitionEnd.Week, WeekOfMonth).ToString(), _
                                 transitionEnd.DayOfWeek.ToString(), _
                                 MonthName(transitionEnd.Month), _
                                 transitionEnd.TimeOfDay)
            End If
         Next
      End If
      Console.WriteLine()
   Next
End Sub

private enum WeekOfMonth
{
   First = 1,
   Second = 2,
   Third = 3,
   Fourth = 4,
   Last = 5,
}

private static void ShowStartAndEndDates()
{
   // Get all time zones from system
   ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
   string[] monthNames = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
   // Get each time zone
   foreach (TimeZoneInfo timeZone in timeZones)
   {
      TimeZoneInfo.AdjustmentRule[] adjustments = timeZone.GetAdjustmentRules();
      // Display message for time zones with no adjustments
      if (adjustments.Length == 0)
      {
         Console.WriteLine("{0} has no adjustment rules", timeZone.StandardName);
      }
      else
      {
         // Handle time zones with 1 or 2+ adjustments differently
         bool showCount = false;
         int ctr = 0;
         string spacer = "";

         Console.WriteLine("{0} Adjustment rules", timeZone.StandardName);
         if (adjustments.Length > 1)
         {
            showCount = true;
            spacer = "   ";
         }
         // Iterate adjustment rules
         foreach (TimeZoneInfo.AdjustmentRule adjustment in adjustments)
         {
            if (showCount)
            {
               Console.WriteLine("   Adjustment rule #{0}", ctr+1);
               ctr++;
            }
            // Display general adjustment information
            Console.WriteLine("{0}   Start Date: {1:D}", spacer, adjustment.DateStart);
            Console.WriteLine("{0}   End Date: {1:D}", spacer, adjustment.DateEnd);
            Console.WriteLine("{0}   Time Change: {1}:{2:00} hours", spacer,
                              adjustment.DaylightDelta.Hours, adjustment.DaylightDelta.Minutes);
            // Get transition start information
            TimeZoneInfo.TransitionTime transitionStart = adjustment.DaylightTransitionStart;
            Console.Write("{0}   Annual Start: ", spacer);
            if (transitionStart.IsFixedDateRule)
            {
               Console.WriteLine("On {0} {1} at {2:t}",
                                 monthNames[transitionStart.Month - 1],
                                 transitionStart.Day,
                                 transitionStart.TimeOfDay);
            }
            else
            {
               Console.WriteLine("The {0} {1} of {2} at {3:t}",
                                 ((WeekOfMonth)transitionStart.Week).ToString(),
                                 transitionStart.DayOfWeek.ToString(),
                                 monthNames[transitionStart.Month - 1],
                                 transitionStart.TimeOfDay);
            }
            // Get transition end information
            TimeZoneInfo.TransitionTime transitionEnd = adjustment.DaylightTransitionEnd;
            Console.Write("{0}   Annual End: ", spacer);
            if (transitionEnd.IsFixedDateRule)
            {
               Console.WriteLine("On {0} {1} at {2:t}",
                                 monthNames[transitionEnd.Month - 1],
                                 transitionEnd.Day,
                                 transitionEnd.TimeOfDay);
            }
            else
            {
               Console.WriteLine("The {0} {1} of {2} at {3:t}",
                                 ((WeekOfMonth)transitionEnd.Week).ToString(),
                                 transitionEnd.DayOfWeek.ToString(),
                                 monthNames[transitionEnd.Month - 1],
                                 transitionEnd.TimeOfDay);
            }
         }
      }
      Console.WriteLine();
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间
TimeZoneInfo AdjustmentRule


TimeZoneInfo ..::.GetAmbiguousTimeOffsets 方法

TimeZoneInfo
.
.
::
.
GetAmbiguousTimeOffsets 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

返回不明确的日期和时间可能映射到的日期和时间的相关信息。

名称 说明
页首

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.GetAmbiguousTimeOffsets 方法 (DateTime)

TimeZoneInfo
.
.
::
.
GetAmbiguousTimeOffsets 方法 (DateTime)
TimeZoneInfo 类

返回不明确的日期和时间可能映射到的日期和时间的相关信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetAmbiguousTimeOffsets ( _
    dateTime As DateTime _
) As TimeSpan()
public TimeSpan[] GetAmbiguousTimeOffsets(
    DateTime dateTime
)
public:
array<TimeSpan>^ GetAmbiguousTimeOffsets(
    DateTime dateTime
)
member GetAmbiguousTimeOffsets :
        dateTime:DateTime -> TimeSpan[]

参数

dateTime
类型： System DateTime
日期和时间。

返回值

类型：
array<
System TimeSpan
>
[]
()
[]

对象的数组，它表示特定日期和时间可以映射到的可能的协调世界时 (UTC) 偏移量。
异常 | 条件
ArgumentException | dateTime 是明确的时间。

此方法的确切行为取决于 Kind 属性和 TimeZoneInfo 对象之间的关系，如下表所示。

TimeZoneInfo 对象类型 | Kind 属性值 | 行为
TimeZoneInfo Local | DateTimeKind..::.Local 或 DateTimeKind..::.Unspecified | 返回 dateTime 的不明确的时间偏移量。
TimeZoneInfo Local | DateTimeKind Utc | 将 dateTime 转换为本地时间，然后返回该时间的不明确的时间偏移量。
TimeZoneInfo Utc | 任意值。 | 引发 ArgumentException。
任何其他时区。 | Local 或 DateTimeKind..::.Utc | 将 dateTime 转换为指定的时区，然后确定该时间是否不明确。
任何其他时区。 | DateTimeKind Unspecified | 确定 dateTime 在指定时区中是否不明确。

尚未定义 TimeSpan 对象在该方法返回的数组中的顺序。但可以通过比较数组元素值与时区的 BaseUtcOffset 属性，来确定哪个元素表示与时区标准时间的偏移量。若要将不明确的时间映射至时区的标准时间，请参见如何：解决不明确的时间。 尚未定义 TimeSpan 对象在该方法返回的数组中的顺序。但可以通过比较数组元素值与时区的 BaseUtcOffset 属性，来确定哪个元素表示与时区标准时间的偏移量。若要将不明确的时间映射至时区的标准时间，请参见如何：解决不明确的时间。 尚未定义 TimeSpan 对象在该方法返回的数组中的顺序。但可以通过比较数组元素值与时区的 BaseUtcOffset 属性，来确定哪个元素表示与时区标准时间的偏移量。若要将不明确的时间映射至时区的标准时间，请参见如何：解决不明确的时间。

下面的示例定义一个名为 ShowPossibleUtcTimes 的方法，该方法使用 GetAmbiguousTimeOffsets(DateTime) 方法将不明确的时间映射至可能的协调世界时 (UTC) 的相应时间。

Private Sub ShowPossibleUtcTimes(ambiguousTime As Date, timeZone As TimeZoneInfo)
   ' Determine if time is ambiguous in target time zone
   If Not timeZone.IsAmbiguousTime(ambiguousTime) Then
      Console.WriteLine("{0} is not ambiguous in time zone {1}.", _
                        ambiguousTime, _
                        timeZone.DisplayName)
   Else
      ' Display time and its time zone (local, UTC, or indicated by timeZone argument)
      Dim originalTimeZoneName As String
      If ambiguousTime.Kind = DateTimeKind.Utc Then
         originalTimeZoneName = "UTC"
      ElseIf ambiguousTime.Kind = DateTimeKind.Local Then
         originalTimeZoneName = "local time"
      Else
         originalTimeZoneName = timeZone.DisplayName
      End If
      Console.WriteLine("{0} {1} maps to the following possible times:", _
                        ambiguousTime, originalTimeZoneName)
      ' Get ambiguous offsets
      Dim offsets() As TimeSpan = timeZone.GetAmbiguousTimeOffsets(ambiguousTime)
      ' Handle times not in time zone of timeZone argument
      ' Local time where timeZone is not local zone
      If (ambiguousTime.Kind = DateTimeKind.Local) And Not timeZone.Equals(TimeZoneInfo.Local) Then
         ambiguousTime = TimeZoneInfo.ConvertTime(ambiguousTime, TimeZoneInfo.Local, timeZone)
      ' UTC time where timeZone is not UTC zone
      ElseIf (ambiguousTime.Kind = DateTimeKind.Utc) And Not timeZone.Equals(TimeZoneInfo.Utc) Then
         ambiguousTime = TimeZoneInfo.ConvertTime(ambiguousTime, TimeZoneInfo.Utc, timeZone)
      End If
      ' Display each offset and its mapping to UTC
      For Each offset As TimeSpan In offsets
         If offset.Equals(timeZone.BaseUtcOffset) Then
            Console.WriteLine("If {0} is {1}, {2} UTC", ambiguousTime, timeZone.StandardName, ambiguousTime - offset)
         Else
            Console.WriteLine("If {0} is {1}, {2} UTC", ambiguousTime, timeZone.DaylightName, ambiguousTime - offset)
         End If
      Next
   End If
End Sub

private void ShowPossibleUtcTimes(DateTime ambiguousTime, TimeZoneInfo timeZone)
{
   // Determine if time is ambiguous in target time zone
   if (! timeZone.IsAmbiguousTime(ambiguousTime))
   {
      Console.WriteLine("{0} is not ambiguous in time zone {1}.",
                        ambiguousTime,
                        timeZone.DisplayName);
   }
   else
   {
      // Display time and its time zone (local, UTC, or indicated by timeZone argument)
      string originalTimeZoneName;
      if (ambiguousTime.Kind == DateTimeKind.Utc)
         originalTimeZoneName = "UTC";
      else if (ambiguousTime.Kind == DateTimeKind.Local)
         originalTimeZoneName = "local time";
      else
         originalTimeZoneName = timeZone.DisplayName;

      Console.WriteLine("{0} {1} maps to the following possible times:",
                        ambiguousTime, originalTimeZoneName);
      // Get ambiguous offsets
      TimeSpan[] offsets = timeZone.GetAmbiguousTimeOffsets(ambiguousTime);
      // Handle times not in time zone of timeZone argument
      // Local time where timeZone is not local zone
      if ((ambiguousTime.Kind == DateTimeKind.Local) && ! timeZone.Equals(TimeZoneInfo.Local))
         ambiguousTime = TimeZoneInfo.ConvertTime(ambiguousTime, TimeZoneInfo.Local, timeZone);
      // UTC time where timeZone is not UTC zone
      else if ((ambiguousTime.Kind == DateTimeKind.Utc) && ! timeZone.Equals(TimeZoneInfo.Utc))
         ambiguousTime = TimeZoneInfo.ConvertTime(ambiguousTime, TimeZoneInfo.Utc, timeZone);

      // Display each offset and its mapping to UTC
      foreach (TimeSpan offset in offsets)
      {
         if (offset.Equals(timeZone.BaseUtcOffset))
            Console.WriteLine("If {0} is {1}, {2} UTC", ambiguousTime, timeZone.StandardName, ambiguousTime - offset);
         else
            Console.WriteLine("If {0} is {1}, {2} UTC", ambiguousTime, timeZone.DaylightName, ambiguousTime - offset);
      }
   }
}

然后，可使用如下所示的代码调用该方法：

ShowPossibleUtcTimes(#11/4/2007 1:00:00#, TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))
Console.WriteLine()
ShowPossibleUtcTimes(New Date(2007, 11, 4, 01, 00, 00, DateTimeKind.Local), _
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))
Console.WriteLine()
ShowPossibleUtcTimes(New Date(2007, 11, 4, 00, 00, 00, DateTimeKind.Local), _
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))
Console.WriteLine()
ShowPossibleUtcTimes(New Date(2007, 11, 4, 01, 00, 00, DateTimeKind.Unspecified), _
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))
Console.WriteLine()
ShowPossibleUtcTimes(New Date(2007, 11, 4, 07, 00, 00, DateTimeKind.Utc), _
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))
'
' This example produces the following output if run in the Pacific time zone:
'
'    11/4/2007 1:00:00 AM (GMT-06:00) Central Time (US & Canada) maps to the following possible times:
'    If 11/4/2007 1:00:00 AM is Central Standard Time, 11/4/2007 7:00:00 AM UTC
'    If 11/4/2007 1:00:00 AM is Central Daylight Time, 11/4/2007 6:00:00 AM UTC
'
'    11/4/2007 1:00:00 AM Pacific Standard Time is not ambiguous in time zone (GMT-06:00) Central Time (US & Canada).
'
'    11/4/2007 12:00:00 AM local time maps to the following possible times:
'    If 11/4/2007 1:00:00 AM is Central Standard Time, 11/4/2007 7:00:00 AM UTC
'    If 11/4/2007 1:00:00 AM is Central Daylight Time, 11/4/2007 6:00:00 AM UTC
'
'    11/4/2007 1:00:00 AM (GMT-06:00) Central Time (US & Canada) maps to the following possible times:
'    If 11/4/2007 1:00:00 AM is Central Standard Time, 11/4/2007 7:00:00 AM UTC
'    If 11/4/2007 1:00:00 AM is Central Daylight Time, 11/4/2007 6:00:00 AM UTC
'
'    11/4/2007 7:00:00 AM UTC maps to the following possible times:
'    If 11/4/2007 1:00:00 AM is Central Standard Time, 11/4/2007 7:00:00 AM UTC
'    If 11/4/2007 1:00:00 AM is Central Daylight Time, 11/4/2007 6:00:00 AM UTC

Console.WriteLine();
ShowPossibleUtcTimes(new DateTime(2007, 11, 4, 1, 0, 0),
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"));
Console.WriteLine();
ShowPossibleUtcTimes(new DateTime(2007, 11, 4, 01, 00, 00, DateTimeKind.Local),
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"));
Console.WriteLine();
ShowPossibleUtcTimes(new DateTime(2007, 11, 4, 00, 00, 00, DateTimeKind.Local),
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"));
Console.WriteLine();
ShowPossibleUtcTimes(new DateTime(2007, 11, 4, 01, 00, 00, DateTimeKind.Unspecified),
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"));
Console.WriteLine();
ShowPossibleUtcTimes(new DateTime(2007, 11, 4, 07, 00, 00, DateTimeKind.Utc),
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"));
//
// This example produces the following output if run in the Pacific time zone:
//
//    11/4/2007 1:00:00 AM (GMT-06:00) Central Time (US & Canada) maps to the following possible times:
//    If 11/4/2007 1:00:00 AM is Central Standard Time, 11/4/2007 7:00:00 AM UTC
//    If 11/4/2007 1:00:00 AM is Central Daylight Time, 11/4/2007 6:00:00 AM UTC
//
//    11/4/2007 1:00:00 AM Pacific Standard Time is not ambiguous in time zone (GMT-06:00) Central Time (US & Canada).
//
//    11/4/2007 12:00:00 AM local time maps to the following possible times:
//    If 11/4/2007 1:00:00 AM is Central Standard Time, 11/4/2007 7:00:00 AM UTC
//    If 11/4/2007 1:00:00 AM is Central Daylight Time, 11/4/2007 6:00:00 AM UTC
//
//    11/4/2007 1:00:00 AM (GMT-06:00) Central Time (US & Canada) maps to the following possible times:
//    If 11/4/2007 1:00:00 AM is Central Standard Time, 11/4/2007 7:00:00 AM UTC
//    If 11/4/2007 1:00:00 AM is Central Daylight Time, 11/4/2007 6:00:00 AM UTC
//
//    11/4/2007 7:00:00 AM UTC maps to the following possible times:
//    If 11/4/2007 1:00:00 AM is Central Standard Time, 11/4/2007 7:00:00 AM UTC
//    If 11/4/2007 1:00:00 AM is Central Daylight Time, 11/4/2007 6:00:00 AM UTC
//

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
GetAmbiguousTimeOffsets 重载
System 命名空间
IsAmbiguousTime

其他资源

如何：解决不明确的时间
如何：让用户解决不明确的时间


TimeZoneInfo ..::.GetAmbiguousTimeOffsets 方法 (DateTimeOffset)

TimeZoneInfo
.
.
::
.
GetAmbiguousTimeOffsets 方法 (DateTimeOffset)
TimeZoneInfo 类

返回不明确的日期和时间可能映射到的日期和时间的相关信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetAmbiguousTimeOffsets ( _
    dateTimeOffset As DateTimeOffset _
) As TimeSpan()
public TimeSpan[] GetAmbiguousTimeOffsets(
    DateTimeOffset dateTimeOffset
)
public:
array<TimeSpan>^ GetAmbiguousTimeOffsets(
    DateTimeOffset dateTimeOffset
)
member GetAmbiguousTimeOffsets :
        dateTimeOffset:DateTimeOffset -> TimeSpan[]

参数

dateTimeOffset
类型： System DateTimeOffset
日期和时间。

返回值

类型：
array<
System TimeSpan
>
[]
()
[]

对象的数组，它表示特定日期和时间可以映射到的可能的协调世界时 (UTC) 偏移量。
异常 | 条件
ArgumentException | dateTime 是明确的时间。

此方法的确切行为取决于 dateTimeOffset 参数的 Offset 属性与 TimeZoneInfo 对象之间的关系。如果 Offset 属性值对应于当前时区与该日期和时间所对应协调世界时 (UTC) 的可能偏移量，则该方法返回可能的偏移量。否则，该方法将 dateTime 转换为当前时区中的时间，然后返回该日期和时间的可能偏移量。 此方法的确切行为取决于 dateTimeOffset 参数的 Offset 属性与 TimeZoneInfo 对象之间的关系。如果 Offset 属性值对应于当前时区与该日期和时间所对应协调世界时 (UTC) 的可能偏移量，则该方法返回可能的偏移量。否则，该方法将 dateTime 转换为当前时区中的时间，然后返回该日期和时间的可能偏移量。 此方法的确切行为取决于 dateTimeOffset 参数的 Offset 属性与 TimeZoneInfo 对象之间的关系。如果 Offset 属性值对应于当前时区与该日期和时间所对应协调世界时 (UTC) 的可能偏移量，则该方法返回可能的偏移量。否则，该方法将 dateTime 转换为当前时区中的时间，然后返回该日期和时间的可能偏移量。

尚未定义 TimeSpan 对象在该方法返回的数组中的顺序。但可以通过比较数组元素值与时区的 BaseUtcOffset 属性，来确定哪个元素表示与时区标准时间的偏移量。若要将不明确的时间映射至时区的标准时间，请参见如何：解决不明确的时间。 尚未定义 TimeSpan 对象在该方法返回的数组中的顺序。但可以通过比较数组元素值与时区的 BaseUtcOffset 属性，来确定哪个元素表示与时区标准时间的偏移量。若要将不明确的时间映射至时区的标准时间，请参见如何：解决不明确的时间。 尚未定义 TimeSpan 对象在该方法返回的数组中的顺序。但可以通过比较数组元素值与时区的 BaseUtcOffset 属性，来确定哪个元素表示与时区标准时间的偏移量。若要将不明确的时间映射至时区的标准时间，请参见如何：解决不明确的时间。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
GetAmbiguousTimeOffsets 重载
System 命名空间
IsAmbiguousTime

其他资源

如何：解决不明确的时间
如何：让用户解决不明确的时间


TimeZoneInfo ..::.GetHashCode 方法

TimeZoneInfo
.
.
::
.
GetHashCode 方法
TimeZoneInfo 类

用作哈希算法的哈希函数和数据结构（如哈希表）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
一个 32 位有符号整数，用作此 TimeZoneInfo 对象的哈希代码。

有关 GetHashCode 方法的其他详细信息，请参见 GetHashCode。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.GetSystemTimeZones 方法

TimeZoneInfo
.
.
::
.
GetSystemTimeZones 方法
TimeZoneInfo 类

返回时区信息在本地系统上可用的所有时区的已排序集合。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetSystemTimeZones As ReadOnlyCollection(Of TimeZoneInfo)
public static ReadOnlyCollection<TimeZoneInfo> GetSystemTimeZones()
public:
static ReadOnlyCollection<TimeZoneInfo^>^ GetSystemTimeZones()
static member GetSystemTimeZones : unit -> ReadOnlyCollection<TimeZoneInfo>

返回值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
TimeZoneInfo
>
)
>
)

TimeZoneInfo 对象的只读集合。
异常 | 条件
OutOfMemoryException | 内存不足，无法存储所有时区信息。
SecurityException | 用户没有读取包含时区信息的注册表项所需的权限。

GetSystemTimeZones 方法从注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 项的子项检索所有可用的时区信息。如果无法成功检索并分析各个 TimeZoneInfo 对象的特定字符串属性值，则此方法将这些值设置为空字符串 ("")。 GetSystemTimeZones 方法从注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 项的子项检索所有可用的时区信息。如果无法成功检索并分析各个 TimeZoneInfo 对象的特定字符串属性值，则此方法将这些值设置为空字符串 ("")。

重要说明 重要事项

GetSystemTimeZones 方法只为在注册表中定义的时区返回 TimeZoneInfo 对象的集合，而不包括使用 CreateCustomTimeZone 方法重载创建的时区。只能通过由时区创建方法返回的对象引用访问这些时区。 GetSystemTimeZones 方法只为在注册表中定义的时区返回 TimeZoneInfo 对象的集合，而不包括使用 CreateCustomTimeZone 方法重载创建的时区。只能通过由时区创建方法返回的对象引用访问这些时区。 GetSystemTimeZones 方法只为在注册表中定义的时区返回 TimeZoneInfo 对象的集合，而不包括使用 CreateCustomTimeZone 方法重载创建的时区。只能通过由时区创建方法返回的对象引用访问这些时区。

此方法返回的集合使用当前区域性按显示名称排序。有关显示名称的信息，请参见 DisplayName。 此方法返回的集合使用当前区域性按显示名称排序。有关显示名称的信息，请参见 DisplayName。

此方法返回的 ReadOnlyCollection<(Of <(T>)>) 对象支持 IEnumerable<(Of <(T>)>) 接口，这表示可以使用 foreach（在 C# 中）或 For Each…Next（在 Visual Basic 中）语句对该对象进行迭代。每次循环迭代提供集合中的下一个 TimeZoneInfo 对象。 此方法返回的 ReadOnlyCollection<(Of <(T>)>) 对象支持 IEnumerable<(Of <(T>)>) 接口，这表示可以使用 foreach（在 C# 中）或 For Each…Next（在 Visual Basic 中）语句对该对象进行迭代。每次循环迭代提供集合中的下一个 TimeZoneInfo 对象。

TimeZoneInfo 对象的集合表示在本地计算机上定义的时区；它不一定提供所有时区在所有期间的完整信息。如果在本地计算机上找不到应用程序所需要的时区，则可以使用 CreateCustomTimeZone 方法重载创建自定义时区。有关更多信息，请参见如何：创建不带调整规则的时区和如何：创建带有调整规则的时区。 TimeZoneInfo 对象的集合表示在本地计算机上定义的时区；它不一定提供所有时区在所有期间的完整信息。如果在本地计算机上找不到应用程序所需要的时区，则可以使用 CreateCustomTimeZone 方法重载创建自定义时区。有关更多信息，请参见如何：创建不带调整规则的时区和如何：创建带有调整规则的时区。 TimeZoneInfo 对象的集合表示在本地计算机上定义的时区；它不一定提供所有时区在所有期间的完整信息。如果在本地计算机上找不到应用程序所需要的时区，则可以使用 CreateCustomTimeZone 方法重载创建自定义时区。有关更多信息，请参见如何：创建不带调整规则的时区和如何：创建带有调整规则的时区。

您还可以通过调用 FindSystemTimeZoneById 方法并提供您要检索的时区的标识符作为参数，来确定是否在本地计算机上定义单个时区。

下面的示例检索表示时区已在计算机上定义的时区对象的集合，并将相关信息写入文本文件。

Const OUTPUTFILENAME As String = "C:\Temp\TimeZoneInfo.txt"

Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
Dim sw As StreamWriter = New StreamWriter(OUTPUTFILENAME, False)

For Each timeZone As TimeZoneInfo in timeZones
   Dim hasDST As Boolean = timeZone.SupportsDaylightSavingTime
   Dim offsetFromUtc As TimeSpan = timeZone.BaseUtcOffset
   Dim adjustRules() As System.TimeZoneInfo.AdjustmentRule
   Dim offsetString As String

   sw.WriteLine("ID: {0}", timeZone.Id)
   sw.WriteLine("   Display Name: {0, 40}", timeZone.DisplayName)
   sw.WriteLine("   Standard Name: {0, 39}", timeZone.StandardName)
   sw.Write("   Daylight Name: {0, 39}", timeZone.DaylightName)
   sw.Write(iif(hasDST, "   ***Has ", "   ***Does Not Have "))
   sw.WriteLine("Daylight Saving Time***")
   offsetString = String.Format("{0} hours, {1} minutes", offsetFromUtc.Hours, offsetFromUtc.Minutes)
   sw.WriteLine("   Offset from UTC: {0, 40}", offsetString)
   adjustRules = timeZone.GetAdjustmentRules()
   sw.WriteLine("   Number of adjustment rules: {0, 26}", adjustRules.Length)
   If adjustRules.Length > 0 Then
      sw.WriteLine("   Adjustment Rules:")
      For Each rule As TimeZoneInfo.AdjustmentRule In adjustRules
         Dim transTimeStart As TimeZoneInfo.TransitionTime = rule.DaylightTransitionStart
         Dim transTimeEnd As TimeZoneInfo.TransitionTime = rule.DaylightTransitionEnd

         sw.WriteLine("      From {0} to {1}", rule.DateStart, rule.DateEnd)
         sw.WriteLine("      Delta: {0}", rule.DaylightDelta)
         If Not transTimeStart.IsFixedDateRule
            sw.WriteLine("      Begins at {0:t} on {1} of week {2} of {3}", transTimeStart.TimeOfDay, _
                                                                          transTimeStart.DayOfWeek, _
                                                                          transTimeStart.Week, _
                                                                          MonthName(transTimeStart.Month))
            sw.WriteLine("      Ends at {0:t} on {1} of week {2} of {3}", transTimeEnd.TimeOfDay, _
                                                                          transTimeEnd.DayOfWeek, _
                                                                          transTimeEnd.Week, _
                                                                          MonthName(transTimeEnd.Month))
         Else
            sw.WriteLine("      Begins at {0:t} on {1} {2}", transTimeStart.TimeOfDay, _
                                                           transTimeStart.Day, _
                                                           MonthName(transTimeStart.Month))
            sw.WriteLine("      Ends at {0:t} on {1} {2}", transTimeEnd.TimeOfDay, _
                                                         transTimeEnd.Day, _
                                                         MonthName(transTimeEnd.Month))
         End If
      Next
   End If
Next
sw.Close()

const string OUTPUTFILENAME = @"C:\Temp\TimeZoneInfo.txt";

DateTimeFormatInfo dateFormats = CultureInfo.CurrentCulture.DateTimeFormat;
ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
StreamWriter sw = new StreamWriter(OUTPUTFILENAME, false);

foreach (TimeZoneInfo timeZone in timeZones)
{
   bool hasDST = timeZone.SupportsDaylightSavingTime;
   TimeSpan offsetFromUtc = timeZone.BaseUtcOffset;
   TimeZoneInfo.AdjustmentRule[] adjustRules;
   string offsetString;

   sw.WriteLine("ID: {0}", timeZone.Id);
   sw.WriteLine("   Display Name: {0, 40}", timeZone.DisplayName);
   sw.WriteLine("   Standard Name: {0, 39}", timeZone.StandardName);
   sw.Write("   Daylight Name: {0, 39}", timeZone.DaylightName);
   sw.Write(hasDST ? "   ***Has " : "   ***Does Not Have ");
   sw.WriteLine("Daylight Saving Time***");
   offsetString = String.Format("{0} hours, {1} minutes", offsetFromUtc.Hours, offsetFromUtc.Minutes);
   sw.WriteLine("   Offset from UTC: {0, 40}", offsetString);
   adjustRules = timeZone.GetAdjustmentRules();
   sw.WriteLine("   Number of adjustment rules: {0, 26}", adjustRules.Length);
   if (adjustRules.Length > 0)
   {
      sw.WriteLine("   Adjustment Rules:");
      foreach (TimeZoneInfo.AdjustmentRule rule in adjustRules)
      {
         TimeZoneInfo.TransitionTime transTimeStart = rule.DaylightTransitionStart;
         TimeZoneInfo.TransitionTime transTimeEnd = rule.DaylightTransitionEnd;

         sw.WriteLine("      From {0} to {1}", rule.DateStart, rule.DateEnd);
         sw.WriteLine("      Delta: {0}", rule.DaylightDelta);
         if (! transTimeStart.IsFixedDateRule)
         {
            sw.WriteLine("      Begins at {0:t} on {1} of week {2} of {3}", transTimeStart.TimeOfDay,
                                                                          transTimeStart.DayOfWeek,
                                                                          transTimeStart.Week,
                                                                          dateFormats.MonthNames[transTimeStart.Month - 1]);
            sw.WriteLine("      Ends at {0:t} on {1} of week {2} of {3}", transTimeEnd.TimeOfDay,
                                                                          transTimeEnd.DayOfWeek,
                                                                          transTimeEnd.Week,
                                                                          dateFormats.MonthNames[transTimeEnd.Month - 1]);
         }
         else
         {
            sw.WriteLine("      Begins at {0:t} on {1} {2}", transTimeStart.TimeOfDay,
                                                           transTimeStart.Day,
                                                           dateFormats.MonthNames[transTimeStart.Month - 1]);
            sw.WriteLine("      Ends at {0:t} on {1} {2}", transTimeEnd.TimeOfDay,
                                                         transTimeEnd.Day,
                                                         dateFormats.MonthNames[transTimeEnd.Month - 1]);
         }
      }
   }
}
sw.Close();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.GetUtcOffset 方法

TimeZoneInfo
.
.
::
.
GetUtcOffset 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

计算此时区中的时间与协调世界时 (UTC) 之间针对特定日期和时间的偏移量或差值。

名称 说明
页首

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.GetUtcOffset 方法 (DateTime)

TimeZoneInfo
.
.
::
.
GetUtcOffset 方法 (DateTime)
TimeZoneInfo 类

计算此时区中的时间与协调世界时 (UTC) 之间针对特定日期和时间的偏移量或差值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetUtcOffset ( _
    dateTime As DateTime _
) As TimeSpan
public TimeSpan GetUtcOffset(
    DateTime dateTime
)
public:
TimeSpan GetUtcOffset(
    DateTime dateTime
)
member GetUtcOffset :
        dateTime:DateTime -> TimeSpan

参数

dateTime
类型： System DateTime
要为其确定偏移量的日期和时间。

返回值

类型： System TimeSpan
一个对象，该对象指示两个时区之间的时差。

返回的时间跨度包括因将调整规则应用到当前时区而引起的任何差值。它与 BaseUtcOffset 属性不同，后者返回协调世界时 (UTC) 和时区标准时间之间的差值，因此不考虑调整规则。 返回的时间跨度包括因将调整规则应用到当前时区而引起的任何差值。它与 BaseUtcOffset 属性不同，后者返回协调世界时 (UTC) 和时区标准时间之间的差值，因此不考虑调整规则。

如果 dateTime 参数的 Kind 属性与时区对象不对应，则此方法在返回结果前会执行必要的转换。例如，如果 Kind 属性为 DateTimeKind..::.Local，但时区对象不是本地时区，则会执行上述转换。如果 dateTime 不明确，或者转换后的时间不明确，则此方法会将不明确的时间解释为标准时间。如果 dateTime 无效，则此方法返回一个 TimeSpan 对象，该对象反映 UTC 与时区标准时间之间的差值。 如果 dateTime 参数的 Kind 属性与时区对象不对应，则此方法在返回结果前会执行必要的转换。例如，如果 Kind 属性为 DateTimeKind..::.Local，但时区对象不是本地时区，则会执行上述转换。如果 dateTime 不明确，或者转换后的时间不明确，则此方法会将不明确的时间解释为标准时间。如果 dateTime 无效，则此方法返回一个 TimeSpan 对象，该对象反映 UTC 与时区标准时间之间的差值。 如果 dateTime 参数的 Kind 属性与时区对象不对应，则此方法在返回结果前会执行必要的转换。例如，如果 Kind 属性为 DateTimeKind..::.Local，但时区对象不是本地时区，则会执行上述转换。如果 dateTime 不明确，或者转换后的时间不明确，则此方法会将不明确的时间解释为标准时间。如果 dateTime 无效，则此方法返回一个 TimeSpan 对象，该对象反映 UTC 与时区标准时间之间的差值。 如果 dateTime 参数的 Kind 属性与时区对象不对应，则此方法在返回结果前会执行必要的转换。例如，如果 Kind 属性为 DateTimeKind..::.Local，但时区对象不是本地时区，则会执行上述转换。如果 dateTime 不明确，或者转换后的时间不明确，则此方法会将不明确的时间解释为标准时间。如果 dateTime 无效，则此方法返回一个 TimeSpan 对象，该对象反映 UTC 与时区标准时间之间的差值。

TimeZoneInfo..::.GetUtcOffset(DateTime) 方法在操作上类似于 TimeZone 类的 GetUtcOffset 方法。

下面的示例阐释在时区不同且日期值具有不同的 Kind 属性值的情况下，如何使用 GetUtcOffset(DateTime) 方法。

Option Strict On

<Assembly: CLSCompliant(True)>
Module TimeOffsets
   Public Sub Main()
      Dim cst As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")

      ShowOffset(#6/12/2006 11:00AM#, TimeZoneInfo.Local)
      ShowOffset(#11/4/2007 1:00AM#, TimeZoneInfo.Local)
      ShowOffset(#12/10/2006 3:00PM#, TimeZoneInfo.Local)
      ShowOffset(#3/11/2007 2:30:00AM#, TimeZoneInfo.Local)
      ShowOffset(Date.UtcNow, TimeZoneInfo.Local)
      ShowOffset(#6/12/2006 11:00AM#, TimeZoneInfo.Utc)
      ShowOffset(#11/4/2007 1:00AM#, TimeZoneInfo.Utc)
      ShowOffset(#12/10/2006 3:00PM#, TimeZoneInfo.Utc)
      ShowOffset(#3/11/2007 2:30:00AM#, TimeZoneInfo.Utc)
      ShowOffset(Date.Now, TimeZoneInfo.Utc)
      ShowOffset(#6/12/2006 11:00AM#, cst)
      ShowOffset(#11/4/2007 1:00AM#, cst)
      ShowOffset(#12/10/2006 3:00PM#, cst)
      ShowOffset(#3/11/2007 2:30:00AM#, cst)
      ShowOffset(New Date(2007, 11, 14, 00, 00, 00, DateTimeKind.Local), cst)
   End Sub

   Private Sub ShowOffset(time As Date, timeZone As TimeZoneInfo)
      Dim convertedTime As Date = time
      Dim offset As TimeSpan

      If time.Kind = DateTimeKind.Local And Not timeZone.Equals(TimeZoneInfo.Local) Then
         convertedTime = TimeZoneInfo.ConvertTime(time, TimeZoneInfo.Local, timeZone)
      ElseIf time.Kind = DateTimeKind.Utc And Not timeZone.Equals(TimeZoneInfo.Utc) Then
         convertedTime = TimeZoneInfo.ConvertTime(time, TimeZoneInfo.Utc, timeZone)
      End If
      offset = timeZone.GetUtcOffset(time)
      If time = convertedTime Then
         Console.WriteLine("{0} {1} ", time, _
                           IIf(timeZone.IsDaylightSavingTime(time), timeZone.DaylightName, timeZone.StandardName))
         Console.WriteLine("   It differs from UTC by {0} hours, {1} minutes.", _
                            offset.Hours, _
                            offset.Minutes)
      Else
         Console.WriteLine("{0} {1} ", time, _
                           IIf(time.Kind = DateTimeKind.Utc, "UTC", TimeZoneInfo.Local.Id))
         Console.WriteLine("   converts to {0} {1}.", _
                           convertedTime, _
                           timeZone.Id)
         Console.WriteLine("   It differs from UTC by {0} hours, {1} minutes.", _
                           offset.Hours, offset.Minutes)
       End If
       Console.WriteLine()
   End Sub
End Module
'
' The example produces the following output:
'
'       6/12/2006 11:00:00 AM Pacific Daylight Time
'          It differs from UTC by -7 hours, 0 minutes.
'
'       11/4/2007 1:00:00 AM Pacific Standard Time
'          It differs from UTC by -8 hours, 0 minutes.
'
'       12/10/2006 3:00:00 PM Pacific Standard Time
'          It differs from UTC by -8 hours, 0 minutes.
'
'       3/11/2007 2:30:00 AM Pacific Standard Time
'          It differs from UTC by -8 hours, 0 minutes.
'
'       2/2/2007 8:35:46 PM UTC
'          converts to 2/2/2007 12:35:46 PM Pacific Standard Time.
'          It differs from UTC by -8 hours, 0 minutes.
'
'       6/12/2006 11:00:00 AM UTC
'          It differs from UTC by 0 hours, 0 minutes.
'
'       11/4/2007 1:00:00 AM UTC
'          It differs from UTC by 0 hours, 0 minutes.
'
'       12/10/2006 3:00:00 AM UTC
'          It differs from UTC by 0 hours, 0 minutes.
'
'       3/11/2007 2:30:00 AM UTC
'          It differs from UTC by 0 hours, 0 minutes.
'
'       2/2/2007 12:35:46 PM Pacific Standard Time
'          converts to 2/2/2007 8:35:46 PM UTC.
'          It differs from UTC by 0 hours, 0 minutes.
'
'       6/12/2006 11:00:00 AM Central Daylight Time
'          It differs from UTC by -5 hours, 0 minutes.
'
'       11/4/2007 1:00:00 AM Central Standard Time
'          It differs from UTC by -6 hours, 0 minutes.
'
'       12/10/2006 3:00:00 PM Central Standard Time
'          It differs from UTC by -6 hours, 0 minutes.
'
'       3/11/2007 2:30:00 AM Central Standard Time
'          It differs from UTC by -6 hours, 0 minutes.
'
'       11/14/2007 12:00:00 AM Pacific Standard Time
'          converts to 11/14/2007 2:00:00 AM Central Standard Time.
'          It differs from UTC by -6 hours, 0 minutes.

using System;

[assembly:CLSCompliant(true)]
namespace TimeZoneInfoCode
{
   public class TimeOffsets
   {
      public static void Main()
      {
         TimeOffsets timeoff = new TimeOffsets();
         TimeZoneInfo cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");

         timeoff.ShowOffset(new DateTime(2006, 6, 12, 11, 0, 0), TimeZoneInfo.Local);
         timeoff.ShowOffset(new DateTime(2007, 11, 4, 1, 0, 0), TimeZoneInfo.Local);
         timeoff.ShowOffset(new DateTime(2006, 12, 10, 15, 0, 0), TimeZoneInfo.Local);
         timeoff.ShowOffset(new DateTime(2007, 3, 11, 2, 30, 0), TimeZoneInfo.Local);
         timeoff.ShowOffset(DateTime.UtcNow, TimeZoneInfo.Local);
         timeoff.ShowOffset(new DateTime(2006, 6, 12, 11, 0, 0), TimeZoneInfo.Utc);
         timeoff.ShowOffset(new DateTime(2007, 11, 4, 1, 0, 0), TimeZoneInfo.Utc);
         timeoff.ShowOffset(new DateTime(2006, 12, 10, 3, 0, 0), TimeZoneInfo.Utc);
         timeoff.ShowOffset(new DateTime(2007, 3, 11, 2, 30, 0), TimeZoneInfo.Utc);
         timeoff.ShowOffset(DateTime.Now, TimeZoneInfo.Utc);
         timeoff.ShowOffset(new DateTime(2006, 6, 12, 11, 0, 0), cst);
         timeoff.ShowOffset(new DateTime(2007, 11, 4, 1, 0, 0), cst);
         timeoff.ShowOffset(new DateTime(2006, 12, 10, 15, 0, 0), cst);
         timeoff.ShowOffset(new DateTime(2007, 3, 11, 2, 30, 0, 0), cst);
         timeoff.ShowOffset(new DateTime(2007, 11, 14, 00, 00, 00, DateTimeKind.Local), cst);
      }

      private void ShowOffset(DateTime time, TimeZoneInfo timeZone)
      {
         DateTime convertedTime = time;
         TimeSpan offset;

         if (time.Kind == DateTimeKind.Local && ! timeZone.Equals(TimeZoneInfo.Local))
            convertedTime = TimeZoneInfo.ConvertTime(time, TimeZoneInfo.Local, timeZone);
         else if (time.Kind == DateTimeKind.Utc && ! timeZone.Equals(TimeZoneInfo.Utc))
            convertedTime = TimeZoneInfo.ConvertTime(time, TimeZoneInfo.Utc, timeZone);

         offset = timeZone.GetUtcOffset(time);
         if (time == convertedTime)
         {
            Console.WriteLine("{0} {1} ", time,
                              timeZone.IsDaylightSavingTime(time) ? timeZone.DaylightName : timeZone.StandardName);
            Console.WriteLine("   It differs from UTC by {0} hours, {1} minutes.",
                               offset.Hours,
                               offset.Minutes);
         }
         else
         {
            Console.WriteLine("{0} {1} ", time,
                              time.Kind == DateTimeKind.Utc ? "UTC" :  TimeZoneInfo.Local.Id);
            Console.WriteLine("   converts to {0} {1}.",
                              convertedTime,
                              timeZone.Id);
            Console.WriteLine("   It differs from UTC by {0} hours, {1} minutes.",
                              offset.Hours, offset.Minutes);
         }
         Console.WriteLine();
      }
   }
}
// The example produces the following output:
//
//       6/12/2006 11:00:00 AM Pacific Daylight Time
//          It differs from UTC by -7 hours, 0 minutes.
//
//       11/4/2007 1:00:00 AM Pacific Standard Time
//          It differs from UTC by -8 hours, 0 minutes.
//
//       12/10/2006 3:00:00 PM Pacific Standard Time
//          It differs from UTC by -8 hours, 0 minutes.
//
//       3/11/2007 2:30:00 AM Pacific Standard Time
//          It differs from UTC by -8 hours, 0 minutes.
//
//       2/2/2007 8:35:46 PM UTC
//          converts to 2/2/2007 12:35:46 PM Pacific Standard Time.
//          It differs from UTC by -8 hours, 0 minutes.
//
//       6/12/2006 11:00:00 AM UTC
//          It differs from UTC by 0 hours, 0 minutes.
//
//       11/4/2007 1:00:00 AM UTC
//          It differs from UTC by 0 hours, 0 minutes.
//
//       12/10/2006 3:00:00 AM UTC
//          It differs from UTC by 0 hours, 0 minutes.
//
//       3/11/2007 2:30:00 AM UTC
//          It differs from UTC by 0 hours, 0 minutes.
//
//       2/2/2007 12:35:46 PM Pacific Standard Time
//          converts to 2/2/2007 8:35:46 PM UTC.
//          It differs from UTC by 0 hours, 0 minutes.
//
//       6/12/2006 11:00:00 AM Central Daylight Time
//          It differs from UTC by -5 hours, 0 minutes.
//
//       11/4/2007 1:00:00 AM Central Standard Time
//          It differs from UTC by -6 hours, 0 minutes.
//
//       12/10/2006 3:00:00 PM Central Standard Time
//          It differs from UTC by -6 hours, 0 minutes.
//
//       3/11/2007 2:30:00 AM Central Standard Time
//          It differs from UTC by -6 hours, 0 minutes.
//
//       11/14/2007 12:00:00 AM Pacific Standard Time
//          converts to 11/14/2007 2:00:00 AM Central Standard Time.
//          It differs from UTC by -6 hours, 0 minutes.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
GetUtcOffset 重载
System 命名空间
BaseUtcOffset


TimeZoneInfo ..::.GetUtcOffset 方法 (DateTimeOffset)

TimeZoneInfo
.
.
::
.
GetUtcOffset 方法 (DateTimeOffset)
TimeZoneInfo 类

计算此时区中的时间与协调世界时 (UTC) 之间针对特定日期和时间的偏移量或差值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetUtcOffset ( _
    dateTimeOffset As DateTimeOffset _
) As TimeSpan
public TimeSpan GetUtcOffset(
    DateTimeOffset dateTimeOffset
)
public:
TimeSpan GetUtcOffset(
    DateTimeOffset dateTimeOffset
)
member GetUtcOffset :
        dateTimeOffset:DateTimeOffset -> TimeSpan

参数

dateTimeOffset
类型： System DateTimeOffset
要为其确定偏移量的日期和时间。

返回值

类型： System TimeSpan
一个对象，该对象指示协调世界时 (UTC) 与当前时区之间的时差。

返回的时间跨度包括因将调整规则应用到当前时区而引起的任何差值。它与 BaseUtcOffset 属性不同，后者返回协调世界时 (UTC) 和时区标准时间之间的差值，因此不考虑调整规则。 返回的时间跨度包括因将调整规则应用到当前时区而引起的任何差值。它与 BaseUtcOffset 属性不同，后者返回协调世界时 (UTC) 和时区标准时间之间的差值，因此不考虑调整规则。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
GetUtcOffset 重载
System 命名空间


TimeZoneInfo ..::.HasSameRules 方法

TimeZoneInfo
.
.
::
.
HasSameRules 方法
TimeZoneInfo 类

指示当前对象和另一个 TimeZoneInfo 对象是否具有相同的调整规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function HasSameRules ( _
    other As TimeZoneInfo _
) As Boolean
public bool HasSameRules(
    TimeZoneInfo other
)
public:
bool HasSameRules(
    TimeZoneInfo^ other
)
member HasSameRules :
        other:TimeZoneInfo -> bool

参数

other
类型： System TimeZoneInfo
要与当前的 TimeZoneInfo 对象进行比较的另一个对象。

返回值

类型： System Boolean
如果两个时区具有相同的调整规则和相同的基本偏移量，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | other 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

与 TimeZoneInfo..::.Equals(TimeZoneInfo) 方法类似的是，HasSameRules 方法指示两个时区是否具有相同的基本偏移量（由 BaseUtcOffset 属性定义）和相同的调整规则。与 TimeZoneInfo..::.Equals(TimeZoneInfo) 方法不同的是，HasSameRules 不比较时区标识符（由 Id 属性定义）。 与 TimeZoneInfo..::.Equals(TimeZoneInfo) 方法类似的是，HasSameRules 方法指示两个时区是否具有相同的基本偏移量（由 BaseUtcOffset 属性定义）和相同的调整规则。与 TimeZoneInfo..::.Equals(TimeZoneInfo) 方法不同的是，HasSameRules 不比较时区标识符（由 Id 属性定义）。

通常，在注册表中定义的许多时区具有相同的与协调世界时 (UTC) 的偏移量和相同的调整规则。下面的示例将这些时区的列表显示在控制台中。 通常，在注册表中定义的许多时区具有相同的与协调世界时 (UTC) 的偏移量和相同的调整规则。下面的示例将这些时区的列表显示在控制台中。

Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
Dim timeZoneArray(timeZones.Count - 1) As TimeZoneInfo
timeZones.CopyTo(timeZoneArray, 0)
'Dim arrayPtr As Integer = 1
' Iterate array from top to bottom
For ctr As Integer = timeZoneArray.GetUpperBound(0) To 1 Step -1
   ' Get next item from top
   Dim thisTimeZone As TimeZoneInfo = timeZoneArray(ctr)
   For compareCtr As Integer = 0 To ctr - 1
      ' Determine if time zones have the same rules
      If thisTimeZone.HasSameRules(timeZoneArray(compareCtr)) Then
         Console.WriteLine("{0} has the same rules as {1}", _
                           thisTimeZone.StandardName, _
                           timeZoneArray(compareCtr).StandardName)
      End If
   Next
Next

ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
TimeZoneInfo[] timeZoneArray = new TimeZoneInfo[timeZones.Count];
timeZones.CopyTo(timeZoneArray, 0);
// Iterate array from top to bottom
for (int ctr = timeZoneArray.GetUpperBound(0); ctr >= 1; ctr--)
{
   // Get next item from top
   TimeZoneInfo thisTimeZone = timeZoneArray[ctr];
   for (int compareCtr = 0; compareCtr <= ctr - 1; compareCtr++)
   {
      // Determine if time zones have the same rules
      if (thisTimeZone.HasSameRules(timeZoneArray[compareCtr]))
      {
         Console.WriteLine("{0} has the same rules as {1}",
                           thisTimeZone.StandardName,
                           timeZoneArray[compareCtr].StandardName);
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.IDeserializationCallback ..::.OnDeserialization 方法

TimeZoneInfo
.
.
::
.
IDeserializationCallback
.
.
::
.
OnDeserialization 方法
TimeZoneInfo 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

在对象的反序列化完成时运行。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub OnDeserialization ( _
    sender As Object _
) Implements IDeserializationCallback.OnDeserialization
void IDeserializationCallback.OnDeserialization(
    Object sender
)
private:
virtual void OnDeserialization(
    Object^ sender
) sealed = IDeserializationCallback::OnDeserialization
private abstract OnDeserialization :
        sender:Object -> unit
private override OnDeserialization :
        sender:Object -> unit

参数

sender
类型： System Object
开始回调的对象。当前未实现该参数的功能。 开始回调的对象。当前未实现该参数的功能。

实现

异常 | 条件
SerializationException | TimeZoneInfo 对象包含无效数据或损坏的数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.IsAmbiguousTime 方法

TimeZoneInfo
.
.
::
.
IsAmbiguousTime 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

确定特定时区中的特定日期和时间是否不明确以及是否可以映射至两个或多个协调世界时 (UTC) 时间。

名称 说明
页首

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.IsAmbiguousTime 方法 (DateTime)

TimeZoneInfo
.
.
::
.
IsAmbiguousTime 方法 (DateTime)
TimeZoneInfo 类

确定特定时区中的特定日期和时间是否不明确以及是否可以映射至两个或多个协调世界时 (UTC) 时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsAmbiguousTime ( _
    dateTime As DateTime _
) As Boolean
public bool IsAmbiguousTime(
    DateTime dateTime
)
public:
bool IsAmbiguousTime(
    DateTime dateTime
)
member IsAmbiguousTime :
        dateTime:DateTime -> bool

参数

dateTime
类型： System DateTime
日期和时间值。

返回值

类型： System Boolean
如果 dateTime 参数不明确，则为 true；否则为 false。
异常 | 条件
ArgumentException | dateTime 值的 Kind 属性为 DateTimeKind..::.Local，并且 dateTime 为无效时间。

一个不明确时间处于当前时区的时间范围内。这表示该时间可以是标准时间，也可以是应用调整规则后产生的时间。通常，将时钟设置为从夏时制返回至标准时间时，会产生不明确的时间。有关说明，请参见“示例”部分。 一个不明确时间处于当前时区的时间范围内。这表示该时间可以是标准时间，也可以是应用调整规则后产生的时间。通常，将时钟设置为从夏时制返回至标准时间时，会产生不明确的时间。有关说明，请参见“示例”部分。 一个不明确时间处于当前时区的时间范围内。这表示该时间可以是标准时间，也可以是应用调整规则后产生的时间。通常，将时钟设置为从夏时制返回至标准时间时，会产生不明确的时间。有关说明，请参见“示例”部分。 一个不明确时间处于当前时区的时间范围内。这表示该时间可以是标准时间，也可以是应用调整规则后产生的时间。通常，将时钟设置为从夏时制返回至标准时间时，会产生不明确的时间。有关说明，请参见“示例”部分。

协调世界时 (UTC) 没有不明确的时间；不支持夏时制的时区也没有不明确的时间。因此，这些时区没有调整规则，并且对 IsAmbiguousTime 方法的调用始终返回 false。 协调世界时 (UTC) 没有不明确的时间；不支持夏时制的时区也没有不明确的时间。因此，这些时区没有调整规则，并且对 IsAmbiguousTime 方法的调用始终返回 false。

对于确实观察了夏时制的时区，此方法的确切行为取决于 Kind 属性和 TimeZoneInfo 对象之间的关系，如下表所示。

TimeZoneInfo 对象类型 | Kind 属性值 | 行为
TimeZoneInfo Local | DateTimeKind..::.Local 或 DateTimeKind..::.Unspecified | 确定 dateTime 参数是否不明确。
TimeZoneInfo Local | DateTimeKind Utc | 将 dateTime 转换为本地时间，然后确定该时间是否不明确。
TimeZoneInfo Utc | DateTimeKind..::.Utc 或 DateTimeKind..::.Unspecified | 返回 false。
TimeZoneInfo Utc | DateTimeKind Local | 如果 dateTime 不明确，则假定它是标准时间，将其转换为 UTC，然后返回 false。
任何其他时区。 | DateTimeKind..::.Local 或 DateTimeKind..::.Utc | 将 dateTime 转换为指定时区中的时间，然后确定该时间是否不明确。
任何其他时区。 | DateTimeKind Unspecified | 确定 dateTime 是否不明确。

在太平洋标准时间区域中，夏时制结束于凌晨 2:00。在 2007 年 11 月 4 日。以下示例从上午 12:59 开始按一分钟间隔传递时间。在 2007 年 11 月 4 日，到凌晨 2:01。在 2007 年 11 月 4 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsAmbiguousTime(DateTime) 方法。控制台输出指示从 1:00 A.M.在 2007 年 11 月 4 日，到凌晨 1:59。在 2007 年 11 月 4，是不明确的。 在太平洋标准时间区域中，夏时制结束于凌晨 2:00。在 2007 年 11 月 4 日。以下示例从上午 12:59 开始按一分钟间隔传递时间。在 2007 年 11 月 4 日，到凌晨 2:01。在 2007 年 11 月 4 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsAmbiguousTime(DateTime) 方法。控制台输出指示从 1:00 A.M.在 2007 年 11 月 4 日，到凌晨 1:59。在 2007 年 11 月 4，是不明确的。 在太平洋标准时间区域中，夏时制结束于凌晨 2:00。在 2007 年 11 月 4 日。以下示例从上午 12:59 开始按一分钟间隔传递时间。在 2007 年 11 月 4 日，到凌晨 2:01。在 2007 年 11 月 4 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsAmbiguousTime(DateTime) 方法。控制台输出指示从 1:00 A.M.在 2007 年 11 月 4 日，到凌晨 1:59。在 2007 年 11 月 4，是不明确的。 在太平洋标准时间区域中，夏时制结束于凌晨 2:00。在 2007 年 11 月 4 日。以下示例从上午 12:59 开始按一分钟间隔传递时间。在 2007 年 11 月 4 日，到凌晨 2:01。在 2007 年 11 月 4 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsAmbiguousTime(DateTime) 方法。控制台输出指示从 1:00 A.M.在 2007 年 11 月 4 日，到凌晨 1:59。在 2007 年 11 月 4，是不明确的。 在太平洋标准时间区域中，夏时制结束于凌晨 2:00。在 2007 年 11 月 4 日。以下示例从上午 12:59 开始按一分钟间隔传递时间。在 2007 年 11 月 4 日，到凌晨 2:01。在 2007 年 11 月 4 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsAmbiguousTime(DateTime) 方法。控制台输出指示从 1:00 A.M.在 2007 年 11 月 4 日，到凌晨 1:59。在 2007 年 11 月 4，是不明确的。 在太平洋标准时间区域中，夏时制结束于凌晨 2:00。在 2007 年 11 月 4 日。以下示例从上午 12:59 开始按一分钟间隔传递时间。在 2007 年 11 月 4 日，到凌晨 2:01。在 2007 年 11 月 4 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsAmbiguousTime(DateTime) 方法。控制台输出指示从 1:00 A.M.在 2007 年 11 月 4 日，到凌晨 1:59。在 2007 年 11 月 4，是不明确的。 在太平洋标准时间区域中，夏时制结束于凌晨 2:00。在 2007 年 11 月 4 日。以下示例从上午 12:59 开始按一分钟间隔传递时间。在 2007 年 11 月 4 日，到凌晨 2:01。在 2007 年 11 月 4 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsAmbiguousTime(DateTime) 方法。控制台输出指示从 1:00 A.M.在 2007 年 11 月 4 日，到凌晨 1:59。在 2007 年 11 月 4，是不明确的。 在太平洋标准时间区域中，夏时制结束于凌晨 2:00。在 2007 年 11 月 4 日。以下示例从上午 12:59 开始按一分钟间隔传递时间。在 2007 年 11 月 4 日，到凌晨 2:01。在 2007 年 11 月 4 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsAmbiguousTime(DateTime) 方法。控制台输出指示从 1:00 A.M.在 2007 年 11 月 4 日，到凌晨 1:59。在 2007 年 11 月 4，是不明确的。

' Specify DateTimeKind in Date constructor
Dim baseTime As New Date(2007, 11, 4, 0, 59, 00, DateTimeKind.Unspecified)
Dim newTime As Date

' Get Pacific Standard Time zone
Dim pstZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")

' List possible ambiguous times for 63-minute interval, from 12:59 AM to 2:01 AM
For ctr As Integer = 0 To 62
   ' Because of assignment, newTime.Kind is also DateTimeKind.Unspecified
   newTime = baseTime.AddMinutes(ctr)
   Console.WriteLine("{0} is ambiguous: {1}", newTime, pstZone.IsAmbiguousTime(newTime))
Next

// Specify DateTimeKind in Date constructor
DateTime baseTime = new DateTime(2007, 11, 4, 0, 59, 00, DateTimeKind.Unspecified);
DateTime newTime;

// Get Pacific Standard Time zone
TimeZoneInfo pstZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");

// List possible ambiguous times for 63-minute interval, from 12:59 AM to 2:01 AM
for (int ctr = 0; ctr < 63; ctr++)
{
   // Because of assignment, newTime.Kind is also DateTimeKind.Unspecified
   newTime = baseTime.AddMinutes(ctr);
   Console.WriteLine("{0} is ambiguous: {1}", newTime, pstZone.IsAmbiguousTime(newTime));
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
IsAmbiguousTime 重载
System 命名空间
IsInvalidTime


TimeZoneInfo ..::.IsAmbiguousTime 方法 (DateTimeOffset)

TimeZoneInfo
.
.
::
.
IsAmbiguousTime 方法 (DateTimeOffset)
TimeZoneInfo 类

确定特定时区中的特定日期和时间是否不明确以及是否可以映射至两个或多个协调世界时 (UTC) 时间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsAmbiguousTime ( _
    dateTimeOffset As DateTimeOffset _
) As Boolean
public bool IsAmbiguousTime(
    DateTimeOffset dateTimeOffset
)
public:
bool IsAmbiguousTime(
    DateTimeOffset dateTimeOffset
)
member IsAmbiguousTime :
        dateTimeOffset:DateTimeOffset -> bool

参数

dateTimeOffset
类型： System DateTimeOffset
日期和时间。

返回值

类型： System Boolean
如果 dateTimeOffset 参数在当前时区中不明确，则为 true；否则为 false。

一个不明确时间处于当前时区的时间范围内。这表示该时间可以是标准时间，也可以是应用调整规则而导致的时间。通常，将时钟设置为从夏时制返回至标准时间时，会产生不明确的时间。协调世界时 (UTC) 没有不明确的时间；不支持夏时制的时区也没有不明确的时间。 一个不明确时间处于当前时区的时间范围内。这表示该时间可以是标准时间，也可以是应用调整规则而导致的时间。通常，将时钟设置为从夏时制返回至标准时间时，会产生不明确的时间。协调世界时 (UTC) 没有不明确的时间；不支持夏时制的时区也没有不明确的时间。 一个不明确时间处于当前时区的时间范围内。这表示该时间可以是标准时间，也可以是应用调整规则而导致的时间。通常，将时钟设置为从夏时制返回至标准时间时，会产生不明确的时间。协调世界时 (UTC) 没有不明确的时间；不支持夏时制的时区也没有不明确的时间。 一个不明确时间处于当前时区的时间范围内。这表示该时间可以是标准时间，也可以是应用调整规则而导致的时间。通常，将时钟设置为从夏时制返回至标准时间时，会产生不明确的时间。协调世界时 (UTC) 没有不明确的时间；不支持夏时制的时区也没有不明确的时间。

此方法的确切行为取决于 dateTimeOffset 参数的 Offset 属性与当前时区之间的关系。如果 Offset 属性值为当前时区与 UTC 的可能偏移量，则此方法确定日期和时间是否不明确。否则，此方法将 dateTimeOffset 转换为当前时区中的时间，然后确定该日期和时间是否不明确。 此方法的确切行为取决于 dateTimeOffset 参数的 Offset 属性与当前时区之间的关系。如果 Offset 属性值为当前时区与 UTC 的可能偏移量，则此方法确定日期和时间是否不明确。否则，此方法将 dateTimeOffset 转换为当前时区中的时间，然后确定该日期和时间是否不明确。 此方法的确切行为取决于 dateTimeOffset 参数的 Offset 属性与当前时区之间的关系。如果 Offset 属性值为当前时区与 UTC 的可能偏移量，则此方法确定日期和时间是否不明确。否则，此方法将 dateTimeOffset 转换为当前时区中的时间，然后确定该日期和时间是否不明确。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
IsAmbiguousTime 重载
System 命名空间


TimeZoneInfo ..::.IsDaylightSavingTime 方法

TimeZoneInfo
.
.
::
.
IsDaylightSavingTime 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

指示指定的日期和时间是否处于当前 TimeZoneInfo 对象时区的夏时制范围内。

名称 说明
页首

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.IsDaylightSavingTime 方法 (DateTime)

TimeZoneInfo
.
.
::
.
IsDaylightSavingTime 方法 (DateTime)
TimeZoneInfo 类

指示指定日期和时间是否处于当前 TimeZoneInfo 对象时区的夏时制范围内。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsDaylightSavingTime ( _
    dateTime As DateTime _
) As Boolean
public bool IsDaylightSavingTime(
    DateTime dateTime
)
public:
bool IsDaylightSavingTime(
    DateTime dateTime
)
member IsDaylightSavingTime :
        dateTime:DateTime -> bool

参数

dateTime
类型： System DateTime
日期和时间值。

返回值

类型： System Boolean
如果 dateTime 参数为夏时制，则为 true；否则为 false。
异常 | 条件
ArgumentException | dateTime 值的 Kind 属性为 DateTimeKind..::.Local，并且 dateTime 为无效时间。

TimeZoneInfo..::.IsDaylightSavingTime 的返回值受 TimeZoneInfo 对象表示的时区与 dateTime 参数的 Kind 属性之间关系的影响，如下表所示。

TimeZoneInfo 对象 | DateTime.Kind 属性 | 结果
TimeZoneInfo Local | DateTimeKind.Local | 确定 dateTime 是否为夏时制。
TimeZoneInfo Local | DateTimeKind.Utc | 将 dateTime 从协调世界时 (UTC) 转换为本地时间，并确定其是否为夏时制。
TimeZoneInfo Local | DateTimeKind.Unspecified | 假定 dateTime 表示本地时间，并确定其是否为夏时制。
TimeZoneInfo Utc | DateTimeKind.Local、DateTimeKind.Unspecified 或 DateTimeKind.Utc | 返回 false（UTC 不支持夏时制）。
任何其他 TimeZoneInfo 对象。 | DateTimeKind.Local | 将本地时间转换为 TimeZoneInfo 对象的相当时间，然后确定后者是否为夏时制。
任何其他 TimeZoneInfo 对象。 | DateTimeKind.Utc | 将 UTC 转换为 TimeZoneInfo 对象的相当时间，然后确定后者是否为夏时制。
任何其他 TimeZoneInfo 对象。 | DateTimeKind.Unspecified | 确定 dateTime 是否为夏时制。

如果 TimeZoneInfo 对象表示的时区不支持夏时制，则此方法始终返回 false。许多时区（包括 Utc）不观察夏时制。 如果 TimeZoneInfo 对象表示的时区不支持夏时制，则此方法始终返回 false。许多时区（包括 Utc）不观察夏时制。

如果 dateTime 参数指定当前对象时区中的不明确时间，则 TimeZoneInfo..::.IsDaylightSavingTime 方法会将 dateTime 解释为标准时间；如果此对象的 Kind 属性为 DateTimeKind..::.Local 或 DateTimeKind..::.Unspecified，则此方法返回 false。如果 Kind 属性为 DateTimeKind..::.Utc，则此方法将选择正确的不明确时间，并指示该时间是否为夏时制。 如果 dateTime 参数指定当前对象时区中的不明确时间，则 TimeZoneInfo..::.IsDaylightSavingTime 方法会将 dateTime 解释为标准时间；如果此对象的 Kind 属性为 DateTimeKind..::.Local 或 DateTimeKind..::.Unspecified，则此方法返回 false。如果 Kind 属性为 DateTimeKind..::.Utc，则此方法将选择正确的不明确时间，并指示该时间是否为夏时制。

因为 TimeZoneInfo..::.IsDaylightSavingTime(DateTime) 方法会为不明确的日期和时间（即，可以表示特定时区中的标准时间或夏时制的日期和时间）返回 false，所以 TimeZoneInfo..::.IsAmbiguousTime(DateTime) 方法可与 IsDaylightSavingTime(DateTime) 方法配合使用来确定时间是否为夏时制。因为不明确的时间可同时为夏时制和标准时间，所以可以首先调用 IsAmbiguousTime(DateTime) 方法来确定日期和时间是否为夏时制。如果该方法返回 false，则可以调用 IsDaylightSavingTime(DateTime) 方法来确定 DateTime 值是否为夏时制。下面的示例演示此技术。 因为 TimeZoneInfo..::.IsDaylightSavingTime(DateTime) 方法会为不明确的日期和时间（即，可以表示特定时区中的标准时间或夏时制的日期和时间）返回 false，所以 TimeZoneInfo..::.IsAmbiguousTime(DateTime) 方法可与 IsDaylightSavingTime(DateTime) 方法配合使用来确定时间是否为夏时制。因为不明确的时间可同时为夏时制和标准时间，所以可以首先调用 IsAmbiguousTime(DateTime) 方法来确定日期和时间是否为夏时制。如果该方法返回 false，则可以调用 IsDaylightSavingTime(DateTime) 方法来确定 DateTime 值是否为夏时制。下面的示例演示此技术。 因为 TimeZoneInfo..::.IsDaylightSavingTime(DateTime) 方法会为不明确的日期和时间（即，可以表示特定时区中的标准时间或夏时制的日期和时间）返回 false，所以 TimeZoneInfo..::.IsAmbiguousTime(DateTime) 方法可与 IsDaylightSavingTime(DateTime) 方法配合使用来确定时间是否为夏时制。因为不明确的时间可同时为夏时制和标准时间，所以可以首先调用 IsAmbiguousTime(DateTime) 方法来确定日期和时间是否为夏时制。如果该方法返回 false，则可以调用 IsDaylightSavingTime(DateTime) 方法来确定 DateTime 值是否为夏时制。下面的示例演示此技术。 因为 TimeZoneInfo..::.IsDaylightSavingTime(DateTime) 方法会为不明确的日期和时间（即，可以表示特定时区中的标准时间或夏时制的日期和时间）返回 false，所以 TimeZoneInfo..::.IsAmbiguousTime(DateTime) 方法可与 IsDaylightSavingTime(DateTime) 方法配合使用来确定时间是否为夏时制。因为不明确的时间可同时为夏时制和标准时间，所以可以首先调用 IsAmbiguousTime(DateTime) 方法来确定日期和时间是否为夏时制。如果该方法返回 false，则可以调用 IsDaylightSavingTime(DateTime) 方法来确定 DateTime 值是否为夏时制。下面的示例演示此技术。

Dim unclearDate As Date = #11/4/2007 1:30AM#
' Test if time is ambiguous.
Console.WriteLine("In the {0}, {1} is {2}ambiguous.", _
                  TimeZoneInfo.Local.DisplayName, _
                  unclearDate, _
                  IIf(TimeZoneInfo.Local.IsAmbiguousTime(unclearDate), "", "not "))
' Test if time is DST.
Console.WriteLine("In the {0}, {1} is {2}daylight saving time.", _
                  TimeZoneInfo.Local.DisplayName, _
                  unclearDate, _
                  IIf(TimeZoneInfo.Local.IsDaylightSavingTime(unclearDate), "", "not "))
Console.WriteLine()
' Report time as DST if it is either ambiguous or DST.
If TimeZoneInfo.Local.IsAmbiguousTime(unclearDate) OrElse _
   TimeZoneInfo.Local.IsDaylightSavingTime(unclearDate) Then
    Console.WriteLine("{0} may be daylight saving time in {1}.", _
                      unclearDate, TimeZoneInfo.Local.DisplayName)
End If
' The example displays the following output:
'    In the (GMT-08:00) Pacific Time (US & Canada), 11/4/2007 1:30:00 AM is ambiguous.
'    In the (GMT-08:00) Pacific Time (US & Canada), 11/4/2007 1:30:00 AM is not daylight saving time.
'
'    11/4/2007 1:30:00 AM may be daylight saving time in (GMT-08:00) Pacific Time (US & Canada).

DateTime unclearDate = new DateTime(2007, 11, 4, 1, 30, 0);
// Test if time is ambiguous.
Console.WriteLine("In the {0}, {1} is {2}ambiguous.",
                  TimeZoneInfo.Local.DisplayName,
                  unclearDate,
                  TimeZoneInfo.Local.IsAmbiguousTime(unclearDate) ? "" : "not ");
// Test if time is DST.
Console.WriteLine("In the {0}, {1} is {2}daylight saving time.",
                  TimeZoneInfo.Local.DisplayName,
                  unclearDate,
                  TimeZoneInfo.Local.IsDaylightSavingTime(unclearDate) ? "" : "not ");
Console.WriteLine();
// Report time as DST if it is either ambiguous or DST.
if (TimeZoneInfo.Local.IsAmbiguousTime(unclearDate) ||
    TimeZoneInfo.Local.IsDaylightSavingTime(unclearDate))
    Console.WriteLine("{0} may be daylight saving time in {1}.",
                      unclearDate, TimeZoneInfo.Local.DisplayName);
// The example displays the following output:
//    In the (GMT-08:00) Pacific Time (US & Canada), 11/4/2007 1:30:00 AM is ambiguous.
//    In the (GMT-08:00) Pacific Time (US & Canada), 11/4/2007 1:30:00 AM is not daylight saving time.
//
//    11/4/2007 1:30:00 AM may be daylight saving time in (GMT-08:00) Pacific Time (US & Canada).

如果 dateTime 参数指定的是无效时间，并且 dateTime 参数的 Kind 属性值为 DateTimeKind..::.Local，则方法调用会引发 ArgumentException；否则，此方法返回 false。

调用 TimeZoneInfo..::.IsDaylightSavingTime 方法以确定在显示时区名称时，是使用时区的 StandardName 值还是时区的 DaylightName 值。有关说明，请参见“示例”部分。 调用 TimeZoneInfo..::.IsDaylightSavingTime 方法以确定在显示时区名称时，是使用时区的 StandardName 值还是时区的 DaylightName 值。有关说明，请参见“示例”部分。

下面的示例定义名为 DisplayDateWithTimeZoneName 的方法，该方法使用 TimeZoneInfo..::.IsDaylightSavingTime 方法确定是显示时区的标准时间名称还是夏时制名称。

Private Sub DisplayDateWithTimeZoneName(date1 As Date, timeZone As TimeZoneInfo)
   Console.WriteLine("The time is {0:t} on {0:d} {1}", _
                     date1, _
                     IIf(timeZone.IsDaylightSavingTime(date1), _
                         timezone.DaylightName, timezone.StandardName))
End Sub

private void DisplayDateWithTimeZoneName(DateTime date1, TimeZoneInfo timeZone)
{
   Console.WriteLine("The time is {0:t} on {0:d} {1}",
                     date1,
                     timeZone.IsDaylightSavingTime(date1) ?
                         timeZone.DaylightName : timeZone.StandardName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
IsDaylightSavingTime 重载
System 命名空间


TimeZoneInfo ..::.IsDaylightSavingTime 方法 (DateTimeOffset)

TimeZoneInfo
.
.
::
.
IsDaylightSavingTime 方法 (DateTimeOffset)
TimeZoneInfo 类

指示指定日期和时间是否处于当前 TimeZoneInfo 对象时区的夏时制范围内。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsDaylightSavingTime ( _
    dateTimeOffset As DateTimeOffset _
) As Boolean
public bool IsDaylightSavingTime(
    DateTimeOffset dateTimeOffset
)
public:
bool IsDaylightSavingTime(
    DateTimeOffset dateTimeOffset
)
member IsDaylightSavingTime :
        dateTimeOffset:DateTimeOffset -> bool

参数

dateTimeOffset
类型： System DateTimeOffset
日期和时间值。

返回值

类型： System Boolean
如果 dateTimeOffset 参数为夏时制，则为 true；否则为 false。

TimeZoneInfo..::.IsDaylightSavingTime 的返回值受 TimeZoneInfo 对象表示的时区和 dateTimeOffset 参数的 Offset 属性之间关系的影响。如果 dateTimeOffset 并不对应于当前时区与协调世界时 (UTC) 的偏移量，则该方法将该时间转换为当前时区中的时间，然后确定该日期和时间是否为夏时制。 TimeZoneInfo..::.IsDaylightSavingTime 的返回值受 TimeZoneInfo 对象表示的时区和 dateTimeOffset 参数的 Offset 属性之间关系的影响。如果 dateTimeOffset 并不对应于当前时区与协调世界时 (UTC) 的偏移量，则该方法将该时间转换为当前时区中的时间，然后确定该日期和时间是否为夏时制。 TimeZoneInfo..::.IsDaylightSavingTime 的返回值受 TimeZoneInfo 对象表示的时区和 dateTimeOffset 参数的 Offset 属性之间关系的影响。如果 dateTimeOffset 并不对应于当前时区与协调世界时 (UTC) 的偏移量，则该方法将该时间转换为当前时区中的时间，然后确定该日期和时间是否为夏时制。

如果 TimeZoneInfo 对象表示的时区不支持夏时制，则此方法始终返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
IsDaylightSavingTime 重载
System 命名空间


TimeZoneInfo ..::.ISerializable ..::.GetObjectData 方法

TimeZoneInfo
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
TimeZoneInfo 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

用序列化当前 TimeZoneInfo 对象所需的数据填充 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
private:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
private override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要使用数据填充的 SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
此序列化的目标（请参见 StreamingContext）。

实现

异常 | 条件
ArgumentNullException | info 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.IsInvalidTime 方法

TimeZoneInfo
.
.
::
.
IsInvalidTime 方法
TimeZoneInfo 类

指示特定日期和时间是否无效。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function IsInvalidTime ( _
    dateTime As DateTime _
) As Boolean
public bool IsInvalidTime(
    DateTime dateTime
)
public:
bool IsInvalidTime(
    DateTime dateTime
)
member IsInvalidTime :
        dateTime:DateTime -> bool

参数

dateTime
类型： System DateTime
日期和时间值。

返回值

类型： System Boolean
如果 dateTime 无效，则为 true；否则为 false。

一个无效时间处于当前时区的时间范围内，而由于应用了调整规则，无法将该时间映射至协调世界时 (UTC)。通常，当时间针对夏时制而提前时会出现无效时间。有关说明，请参见“示例”部分。 一个无效时间处于当前时区的时间范围内，而由于应用了调整规则，无法将该时间映射至协调世界时 (UTC)。通常，当时间针对夏时制而提前时会出现无效时间。有关说明，请参见“示例”部分。 一个无效时间处于当前时区的时间范围内，而由于应用了调整规则，无法将该时间映射至协调世界时 (UTC)。通常，当时间针对夏时制而提前时会出现无效时间。有关说明，请参见“示例”部分。

dateTime 参数的 Kind 属性值会影响 dateTime 是否表示无效时间，如下表所示。

DateTime.Kind 属性 | TimeZoneInfo 对象（如果适用） | 行为
DateTimeKind Local | TimeZoneInfo Local | 确定时间是否无效。
DateTimeKind Local | TimeZoneInfo..::.Utc 或非本地时区。 | 将 dateTime 转换为 TimeZoneInfo 对象的时间，并返回 false。
DateTimeKind Unspecified | 不适用。 | 假定 dateTime 为 TimeZoneInfo 对象的时间，并确定其是否无效。
DateTimeKind Utc | 不适用。 | 返回 false。

在太平洋标准时间区域中，夏时制开始于凌晨 2:00。在 2006 年 4 月 2 日。下面的代码按一分钟间隔传递时间，从 1:59 A.M. 开始。在 2006 年 4 月 2 日，到凌晨 3:01在 2006 年 4 月 2 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsInvalidTime 方法。控制台输出指示从 2:00 A.M.在 2006 年 4 月 2 日，到凌晨 2:59在 2006 年 4 月 2 日，是无效的。 在太平洋标准时间区域中，夏时制开始于凌晨 2:00。在 2006 年 4 月 2 日。下面的代码按一分钟间隔传递时间，从 1:59 A.M. 开始。在 2006 年 4 月 2 日，到凌晨 3:01在 2006 年 4 月 2 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsInvalidTime 方法。控制台输出指示从 2:00 A.M.在 2006 年 4 月 2 日，到凌晨 2:59在 2006 年 4 月 2 日，是无效的。 在太平洋标准时间区域中，夏时制开始于凌晨 2:00。在 2006 年 4 月 2 日。下面的代码按一分钟间隔传递时间，从 1:59 A.M. 开始。在 2006 年 4 月 2 日，到凌晨 3:01在 2006 年 4 月 2 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsInvalidTime 方法。控制台输出指示从 2:00 A.M.在 2006 年 4 月 2 日，到凌晨 2:59在 2006 年 4 月 2 日，是无效的。 在太平洋标准时间区域中，夏时制开始于凌晨 2:00。在 2006 年 4 月 2 日。下面的代码按一分钟间隔传递时间，从 1:59 A.M. 开始。在 2006 年 4 月 2 日，到凌晨 3:01在 2006 年 4 月 2 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsInvalidTime 方法。控制台输出指示从 2:00 A.M.在 2006 年 4 月 2 日，到凌晨 2:59在 2006 年 4 月 2 日，是无效的。 在太平洋标准时间区域中，夏时制开始于凌晨 2:00。在 2006 年 4 月 2 日。下面的代码按一分钟间隔传递时间，从 1:59 A.M. 开始。在 2006 年 4 月 2 日，到凌晨 3:01在 2006 年 4 月 2 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsInvalidTime 方法。控制台输出指示从 2:00 A.M.在 2006 年 4 月 2 日，到凌晨 2:59在 2006 年 4 月 2 日，是无效的。 在太平洋标准时间区域中，夏时制开始于凌晨 2:00。在 2006 年 4 月 2 日。下面的代码按一分钟间隔传递时间，从 1:59 A.M. 开始。在 2006 年 4 月 2 日，到凌晨 3:01在 2006 年 4 月 2 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsInvalidTime 方法。控制台输出指示从 2:00 A.M.在 2006 年 4 月 2 日，到凌晨 2:59在 2006 年 4 月 2 日，是无效的。 在太平洋标准时间区域中，夏时制开始于凌晨 2:00。在 2006 年 4 月 2 日。下面的代码按一分钟间隔传递时间，从 1:59 A.M. 开始。在 2006 年 4 月 2 日，到凌晨 3:01在 2006 年 4 月 2 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsInvalidTime 方法。控制台输出指示从 2:00 A.M.在 2006 年 4 月 2 日，到凌晨 2:59在 2006 年 4 月 2 日，是无效的。 在太平洋标准时间区域中，夏时制开始于凌晨 2:00。在 2006 年 4 月 2 日。下面的代码按一分钟间隔传递时间，从 1:59 A.M. 开始。在 2006 年 4 月 2 日，到凌晨 3:01在 2006 年 4 月 2 日，到表示的太平洋标准时间时区的 TimeZoneInfo 对象的 IsInvalidTime 方法。控制台输出指示从 2:00 A.M.在 2006 年 4 月 2 日，到凌晨 2:59在 2006 年 4 月 2 日，是无效的。

' Specify DateTimeKind in Date constructor
Dim baseTime As New Date(2007, 3, 11, 1, 59, 0, DateTimeKind.Unspecified)
Dim newTime As Date

' Get Pacific Standard Time zone
Dim pstZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")

' List possible invalid times for 63-minute interval, from 1:59 AM to 3:01 AM
For ctr As Integer = 0 To 62
   ' Because of assignment, newTime.Kind is also DateTimeKind.Unspecified
   newTime = baseTime.AddMinutes(ctr)
   Console.WriteLine("{0} is invalid: {1}", newTime, pstZone.IsInvalidTime(newTime))
Next

// Specify DateTimeKind in Date constructor
DateTime baseTime = new DateTime(2007, 3, 11, 1, 59, 0, DateTimeKind.Unspecified);
DateTime newTime;

// Get Pacific Standard Time zone
TimeZoneInfo pstZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");

// List possible invalid times for a 63-minute interval, from 1:59 AM to 3:01 AM
for (int ctr = 0; ctr < 63; ctr++)
{
   // Because of assignment, newTime.Kind is also DateTimeKind.Unspecified
   newTime = baseTime.AddMinutes(ctr);
   Console.WriteLine("{0} is invalid: {1}", newTime, pstZone.IsInvalidTime(newTime));
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间
IsAmbiguousTime


TimeZoneInfo ..::.ToSerializedString 方法

TimeZoneInfo
.
.
::
.
ToSerializedString 方法
TimeZoneInfo 类

将当前的 TimeZoneInfo 对象转换为序列化字符串。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToSerializedString As String
public string ToSerializedString()
public:
String^ ToSerializedString()
member ToSerializedString : unit -> string

返回值

类型： System String
一个字符串，表示当前的 TimeZoneInfo 对象。

如果应用程序依赖于通常不在 Windows 系统注册表中定义的时区，则这样的应用程序可以使用 CreateCustomTimeZone 方法将必要的时区实例化为 TimeZoneInfo 对象。然后，应用程序可调用 ToSerializedString 方法将该时区对象转换为字符串。 如果应用程序依赖于通常不在 Windows 系统注册表中定义的时区，则这样的应用程序可以使用 CreateCustomTimeZone 方法将必要的时区实例化为 TimeZoneInfo 对象。然后，应用程序可调用 ToSerializedString 方法将该时区对象转换为字符串。

TimeZoneInfo 对象还应存储在应用程序在需要时能检索到的位置。可能的位置包括： TimeZoneInfo 对象还应存储在应用程序在需要时能检索到的位置。可能的位置包括：

  • 注册表。

  • 应用程序资源文件。

  • 外部文件，如文本文件。

下面的示例尝试从本地系统中检索南极时区。如果失败，代码将尝试从应用程序目录中的文本文件检索有关时区的信息。如果此尝试失败，代码将创建时区并将时区的相关信息写入文本文件。 下面的示例尝试从本地系统中检索南极时区。如果失败，代码将尝试从应用程序目录中的文本文件检索有关时区的信息。如果此尝试失败，代码将创建时区并将时区的相关信息写入文本文件。 下面的示例尝试从本地系统中检索南极时区。如果失败，代码将尝试从应用程序目录中的文本文件检索有关时区的信息。如果此尝试失败，代码将创建时区并将时区的相关信息写入文本文件。

Private Function InitializeTimeZone() As TimeZoneInfo
   Dim southPole As TimeZoneInfo = Nothing
   ' Determine if South Pole time zone is defined in system
   Try
      southPole = TimeZoneInfo.FindSystemTimeZoneById("Antarctica/South Pole Standard Time")
   ' Time zone does not exist; create it, store it in a text file, and return it
   Catch e As TimeZoneNotFoundException
      Dim found As Boolean
      Const filename As String = ".\TimeZoneInfo.txt"

      If File.Exists(filename) Then
         Dim reader As StreamReader = New StreamReader(fileName)
         Dim timeZoneString As String
         Do While reader.Peek() >= 0
            timeZoneString = reader.ReadLine()
            If timeZoneString.Contains("Antarctica/South Pole") Then
               southPole = TimeZoneInfo.FromSerializedString(timeZoneString)
               reader.Close()
               found = True
               Exit Do
            End If
         Loop
      End If
      If Not found Then
         ' Define transition times to/from DST
         Dim startTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00#, 10, 1, DayOfWeek.Sunday)
         Dim endTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00#, 3, 3, DayOfWeek.Sunday)
         ' Define adjustment rule
         Dim delta As TimeSpan = New TimeSpan(1, 0, 0)
         Dim adjustment As TimeZoneInfo.AdjustmentRule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#10/01/1989#, Date.MaxValue.Date, delta, startTransition, endTransition)
         ' Create array for adjustment rules
         Dim adjustments() As TimeZoneInfo.AdjustmentRule = {adjustment}
         ' Define other custom time zone arguments
         Dim displayName As String = "(GMT+12:00) Antarctica/South Pole"
         Dim standardName As String = "Antarctica/South Pole Standard Time"
         Dim daylightName As String = "Antarctica/South Pole Daylight Time"
         Dim offset As TimeSpan = New TimeSpan(12, 0, 0)
         southPole = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments)
         ' Write time zone to the file
         Dim writer As StreamWriter = New StreamWriter(filename, True)
         writer.WriteLine(southPole.ToSerializedString())
         writer.Close()
      End If
   End Try
   Return southPole
End Function

private TimeZoneInfo InitializeTimeZone()
{
   TimeZoneInfo southPole = null;
   // Determine if South Pole time zone is defined in system
   try
   {
      southPole = TimeZoneInfo.FindSystemTimeZoneById("Antarctica/South Pole Standard Time");
   }
   // Time zone does not exist; create it, store it in a text file, and return it
   catch
   {
      const string filename = @".\TimeZoneInfo.txt";
      bool found = false;

      if (File.Exists(filename))
      {
         StreamReader reader = new StreamReader(filename);
         string timeZoneInfo;
         while (reader.Peek() >= 0)
         {
            timeZoneInfo = reader.ReadLine();
            if (timeZoneInfo.Contains("Antarctica/South Pole"))
            {
               southPole = TimeZoneInfo.FromSerializedString(timeZoneInfo);
               reader.Close();
               found = true;
               break;
            }
         }
      }
      if (! found)
      {
         // Define transition times to/from DST
         TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 10, 1, DayOfWeek.Sunday);
         TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 3, 3, DayOfWeek.Sunday);
         // Define adjustment rule
         TimeSpan delta = new TimeSpan(1, 0, 0);
         TimeZoneInfo.AdjustmentRule adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1989, 10, 1), DateTime.MaxValue.Date, delta, startTransition, endTransition);
         // Create array for adjustment rules
         TimeZoneInfo.AdjustmentRule[] adjustments = {adjustment};
         // Define other custom time zone arguments
         string displayName = "(GMT+12:00) Antarctica/South Pole";
         string standardName = "Antarctica/South Pole Standard Time";
         string daylightName = "Antarctica/South Pole Daylight Time";
         TimeSpan offset = new TimeSpan(12, 0, 0);
         southPole = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments);
         // Write time zone to the file
         StreamWriter writer = new StreamWriter(filename, true);
         writer.WriteLine(southPole.ToSerializedString());
         writer.Close();
      }
   }
   return southPole;
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间
FromSerializedString

其他资源

如何：将时区保存到嵌入的资源中


TimeZoneInfo ..::.ToString 方法

TimeZoneInfo
.
.
::
.
ToString 方法
TimeZoneInfo 类

返回当前 TimeZoneInfo 对象的显示名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前 TimeZoneInfo 对象的 DisplayName 属性值。

将包含 TimeZoneInfo 对象的集合分配至列表控件（如 ListBox 控件）时，该控件会自动调用 ToString 方法来提取对将要在列表中显示的各对象进行描述的字符串。因此，您不必将有意义的对象描述保存为字符串，而且用户也不必使用该字符串从集合中提取对象。有关详细信息，请参见如何：枚举计算机上存在的时区。 将包含 TimeZoneInfo 对象的集合分配至列表控件（如 ListBox 控件）时，该控件会自动调用 ToString 方法来提取对将要在列表中显示的各对象进行描述的字符串。因此，您不必将有意义的对象描述保存为字符串，而且用户也不必使用该字符串从集合中提取对象。有关详细信息，请参见如何：枚举计算机上存在的时区。 将包含 TimeZoneInfo 对象的集合分配至列表控件（如 ListBox 控件）时，该控件会自动调用 ToString 方法来提取对将要在列表中显示的各对象进行描述的字符串。因此，您不必将有意义的对象描述保存为字符串，而且用户也不必使用该字符串从集合中提取对象。有关详细信息，请参见如何：枚举计算机上存在的时区。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo 属性

TimeZoneInfo 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo 类

TimeZoneInfo 类型公开以下成员。

名称 说明
页首

参考

TimeZoneInfo 类
System 命名空间


TimeZoneInfo ..::.BaseUtcOffset 属性

TimeZoneInfo
.
.
::
.
BaseUtcOffset 属性
TimeZoneInfo 类

获取当前时区的标准时间与协调世界时 (UTC) 之间的时差。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property BaseUtcOffset As TimeSpan
    Get
public TimeSpan BaseUtcOffset { get; }
public:
property TimeSpan BaseUtcOffset {
    TimeSpan get ();
}
member BaseUtcOffset : TimeSpan

属性值

类型： System TimeSpan
一个对象，指示当前时区的标准时间与协调世界时 (UTC) 之间的时差。

BaseUtcOffset 属性返回的时间跨度范围可以从 14 小时（对于比协调世界时 (UTC) 早 14 小时的时区）到 -14 小时（对于比 UTC 晚 14 小时的时区）。早于 UTC 的时区具有正偏移量；晚于 UTC 的时区具有负偏移量。 BaseUtcOffset 属性返回的时间跨度范围可以从 14 小时（对于比协调世界时 (UTC) 早 14 小时的时区）到 -14 小时（对于比 UTC 晚 14 小时的时区）。早于 UTC 的时区具有正偏移量；晚于 UTC 的时区具有负偏移量。

BaseUtcOffset 值以整分钟数表示。它不能包括分钟的小数部分。 BaseUtcOffset 值以整分钟数表示。它不能包括分钟的小数部分。

说明 说明

因为 BaseUtcOffset 是 TimeZoneInfo 对象而非 TimeZoneInfo..::.AdjustmentRule 对象的属性，所以 TimeZoneInfo 类将与 UTC 的单个偏移量应用到所有时区的调整。若要反映已修改其与 UTC 的偏移量的时区，必须使用 CreateCustomTimeZone 方法创建新时区。 因为 BaseUtcOffset 是 TimeZoneInfo 对象而非 TimeZoneInfo..::.AdjustmentRule 对象的属性，所以 TimeZoneInfo 类将与 UTC 的单个偏移量应用到所有时区的调整。若要反映已修改其与 UTC 的偏移量的时区，必须使用 CreateCustomTimeZone 方法创建新时区。

BaseUtcOffset 属性与 GetUtcOffset 方法在以下几个方面有所不同：

  • BaseUtcOffset 属性返回 UTC 和时区的标准时间之间的差值；GetUtcOffset 方法返回特定时间点处 UTC 和时区时间之间的差值。

  • GetUtcOffset 方法反映对时区进行的任何调整规则的应用；BaseUtcOffset 属性则不会反映这一应用。

下面的示例使用 BaseUtcOffset 属性显示本地时间与协调世界时 (UTC) 之间的差值。

Dim localZone As TimeZoneInfo = TimeZoneInfo.Local
Console.WriteLine("The {0} time zone is {1}:{2} {3} than Coordinated Universal Time.", _
                  localZone.StandardName, _
                  Math.Abs(localZone.BaseUtcOffset.Hours), _
                  Math.Abs(localZone.BaseUtcOffset.Minutes), _
                  IIf(localZone.BaseUtcOffset >= TimeSpan.Zero, "later", "earlier"))

TimeZoneInfo localZone = TimeZoneInfo.Local;
Console.WriteLine("The {0} time zone is {1}:{2} {3} than Coordinated Universal Time.",
                  localZone.DisplayName,
                  Math.Abs(localZone.BaseUtcOffset.Hours),
                  Math.Abs(localZone.BaseUtcOffset.Minutes),
                  (localZone.BaseUtcOffset >= TimeSpan.Zero) ? "later" : "earlier");

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间
GetUtcOffset


TimeZoneInfo ..::.DaylightName 属性

TimeZoneInfo
.
.
::
.
DaylightName 属性
TimeZoneInfo 类

获取当前时区的夏时制的本地化显示名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DaylightName As String
    Get
public string DaylightName { get; }
public:
property String^ DaylightName {
    String^ get ();
}
member DaylightName : string

属性值

类型： System String
时区的本地化夏时制的显示名称。

其值不是 String..::.Empty 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的 DaylightName 属性不一定指示时区支持夏时制。要确定时区是否支持夏时制，请检查其 SupportsDaylightSavingTime 属性值。 其值不是 String..::.Empty 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的 DaylightName 属性不一定指示时区支持夏时制。要确定时区是否支持夏时制，请检查其 SupportsDaylightSavingTime 属性值。

在大多数情况下，注册表中定义的时区的 DaylightName 属性不是 String..::.Empty 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。然而，可以将自定义时区的 DaylightName 属性设置为 String..::.Empty。如果自定义时区由 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String) 或 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String, String, array<TimeZoneInfo..::.AdjustmentRule>[]()[], Boolean) 重载创建，并且 disableDaylightSavingTime 参数为 true，可以进行以上设置。因此，您的代码永远不应假定 DaylightName 属性值不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空。 在大多数情况下，注册表中定义的时区的 DaylightName 属性不是 String..::.Empty 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。然而，可以将自定义时区的 DaylightName 属性设置为 String..::.Empty。如果自定义时区由 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String) 或 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String, String, array<TimeZoneInfo..::.AdjustmentRule>[]()[], Boolean) 重载创建，并且 disableDaylightSavingTime 参数为 true，可以进行以上设置。因此，您的代码永远不应假定 DaylightName 属性值不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空。 在大多数情况下，注册表中定义的时区的 DaylightName 属性不是 String..::.Empty 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。然而，可以将自定义时区的 DaylightName 属性设置为 String..::.Empty。如果自定义时区由 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String) 或 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String, String, array<TimeZoneInfo..::.AdjustmentRule>[]()[], Boolean) 重载创建，并且 disableDaylightSavingTime 参数为 true，可以进行以上设置。因此，您的代码永远不应假定 DaylightName 属性值不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空。 在大多数情况下，注册表中定义的时区的 DaylightName 属性不是 String..::.Empty 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。然而，可以将自定义时区的 DaylightName 属性设置为 String..::.Empty。如果自定义时区由 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String) 或 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String, String, array<TimeZoneInfo..::.AdjustmentRule>[]()[], Boolean) 重载创建，并且 disableDaylightSavingTime 参数为 true，可以进行以上设置。因此，您的代码永远不应假定 DaylightName 属性值不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空。

DaylightName 属性等效于 TimeZone 类的 DaylightName 属性。

下面的示例定义名为 DisplayDateWithTimeZoneName 的方法，该方法使用 IsDaylightSavingTime(DateTime) 方法确定是显示时区的标准时间名称还是夏时制名称。

Private Sub DisplayDateWithTimeZoneName(date1 As Date, timeZone As TimeZoneInfo)
   Console.WriteLine("The time is {0:t} on {0:d} {1}", _
                     date1, _
                     IIf(timeZone.IsDaylightSavingTime(date1), _
                         timezone.DaylightName, timezone.StandardName))
End Sub

private void DisplayDateWithTimeZoneName(DateTime date1, TimeZoneInfo timeZone)
{
   Console.WriteLine("The time is {0:t} on {0:d} {1}",
                     date1,
                     timeZone.IsDaylightSavingTime(date1) ?
                         timeZone.DaylightName : timeZone.StandardName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.DisplayName 属性

TimeZoneInfo
.
.
::
.
DisplayName 属性
TimeZoneInfo 类

获取表示时区的本地化一般显示名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DisplayName As String
    Get
public string DisplayName { get; }
public:
property String^ DisplayName {
    String^ get ();
}
member DisplayName : string

属性值

类型： System String
时区的本地化一般显示名称。

Windows 系统时区的时区显示名称遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。对协调世界时来说，括在括号内的是没有偏移量的首字母缩略词 GMT。随后是标识时区或时区中的一个或多个城市、地区或国家的字符串。例如： Windows 系统时区的时区显示名称遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。对协调世界时来说，括在括号内的是没有偏移量的首字母缩略词 GMT。随后是标识时区或时区中的一个或多个城市、地区或国家的字符串。例如： Windows 系统时区的时区显示名称遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。对协调世界时来说，括在括号内的是没有偏移量的首字母缩略词 GMT。随后是标识时区或时区中的一个或多个城市、地区或国家的字符串。例如： Windows 系统时区的时区显示名称遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。对协调世界时来说，括在括号内的是没有偏移量的首字母缩略词 GMT。随后是标识时区或时区中的一个或多个城市、地区或国家的字符串。例如： Windows 系统时区的时区显示名称遵循相当标准的格式。显示名称的第一部分是时区与协调世界时的基本偏移量，以首字母缩略词 GMT（表示格林尼治标准时间）表示并括在括号内。对协调世界时来说，括在括号内的是没有偏移量的首字母缩略词 GMT。随后是标识时区或时区中的一个或多个城市、地区或国家的字符串。例如：

(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London
(GMT+02:00) Athens, Beirut, Istanbul, Minsk
(GMT-02:00) Mid-Atlantic
(GMT-07:00) Mountain Time (US & Canada)

下面的示例检索表示本地时区的 TimeZoneInfo 对象，并输出其显示名称、标准时间名称和夏时制名称。

Dim localZone As TimeZoneInfo = TimeZoneInfo.Local
Console.WriteLine("Local Time Zone ID: {0}", localZone.Id)
Console.WriteLine("   Display Name is: {0}.", localZone.DisplayName)
Console.WriteLine("   Standard name is: {0}.", localZone.StandardName)
Console.WriteLine("   Daylight saving name is: {0}.", localZone.DaylightName)

TimeZoneInfo localZone = TimeZoneInfo.Local;
Console.WriteLine("Local Time Zone ID: {0}", localZone.Id);
Console.WriteLine("   Display Name is: {0}.", localZone.DisplayName);
Console.WriteLine("   Standard name is: {0}.", localZone.StandardName);
Console.WriteLine("   Daylight saving name is: {0}.", localZone.DaylightName);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.Id 属性

TimeZoneInfo
.
.
::
.
Id 属性
TimeZoneInfo 类

获取时区标识符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Id As String
    Get
public string Id { get; }
public:
property String^ Id {
    String^ get ();
}
member Id : string

属性值

类型： System String
时区标识符。

时区标识符是唯一地标识特定时区的键字符串。在 Windows XP 和 Windows Vista 中，它对应于注册表中 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zone 分支的子项。可以将它作为参数传递给 FindSystemTimeZoneById 方法，以便从注册表中检索特定时区。 时区标识符是唯一地标识特定时区的键字符串。在 Windows XP 和 Windows Vista 中，它对应于注册表中 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zone 分支的子项。可以将它作为参数传递给 FindSystemTimeZoneById 方法，以便从注册表中检索特定时区。 时区标识符是唯一地标识特定时区的键字符串。在 Windows XP 和 Windows Vista 中，它对应于注册表中 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zone 分支的子项。可以将它作为参数传递给 FindSystemTimeZoneById 方法，以便从注册表中检索特定时区。

重要说明 重要事项

如果要您定义自定义时区，则不应为其分配超过 32 个字符的标识符，因为这是 Windows 注册表支持的最大长度。

Id 属性值通常（但并不总是）与 StandardName 属性值相同。协调世界时时区的标识符为 UTC。 Id 属性值通常（但并不总是）与 StandardName 属性值相同。协调世界时时区的标识符为 UTC。

下面的示例列出在本地计算机上定义的各时区的标识符。

Dim zones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
Console.WriteLine("The local system has the following {0} time zones", zones.Count)
For Each zone As TimeZoneInfo In zones
   Console.WriteLine(zone.Id)
Next

ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones();
Console.WriteLine("The local system has the following {0} time zones", zones.Count);
foreach (TimeZoneInfo zone in zones)
   Console.WriteLine(zone.Id);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.Local 属性

TimeZoneInfo
.
.
::
.
Local 属性
TimeZoneInfo 类

获取表示本地时区的 TimeZoneInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Local As TimeZoneInfo
    Get
public static TimeZoneInfo Local { get; }
public:
static property TimeZoneInfo^ Local {
    TimeZoneInfo^ get ();
}
static member Local : TimeZoneInfo

属性值

类型： System TimeZoneInfo
一个对象，表示本地时区。

本地时区是指执行代码的计算机上的时区。

重要说明 重要事项

应始终通过 TimeZoneInfo..::.Local 属性访问本地时区，而不是将本地时区分配给 TimeZoneInfo 对象变量。这可以防止 TimeZoneInfo 对象变量因调用 ClearCachedData 方法而失效。 应始终通过 TimeZoneInfo..::.Local 属性访问本地时区，而不是将本地时区分配给 TimeZoneInfo 对象变量。这可以防止 TimeZoneInfo 对象变量因调用 ClearCachedData 方法而失效。

TimeZoneInfo..::.Local 属性返回的 TimeZoneInfo 对象反映“控制面板”的“日期和时间”应用程序中“针对夏时制的变化自动调整时钟”复选框或“针对夏时制自动调整时钟”复选框（分别针对 Windows XP 和 Windows Vista）的设置。如果未选中相应的复选框，则本地时区的缓存副本将不包含夏时制信息。这表示： TimeZoneInfo..::.Local 属性返回的 TimeZoneInfo 对象反映“控制面板”的“日期和时间”应用程序中“针对夏时制的变化自动调整时钟”复选框或“针对夏时制自动调整时钟”复选框（分别针对 Windows XP 和 Windows Vista）的设置。如果未选中相应的复选框，则本地时区的缓存副本将不包含夏时制信息。这表示： TimeZoneInfo..::.Local 属性返回的 TimeZoneInfo 对象反映“控制面板”的“日期和时间”应用程序中“针对夏时制的变化自动调整时钟”复选框或“针对夏时制自动调整时钟”复选框（分别针对 Windows XP 和 Windows Vista）的设置。如果未选中相应的复选框，则本地时区的缓存副本将不包含夏时制信息。这表示：

  • 本地时区的 GetAdjustmentRules 方法返回长度为零的数组。

  • 本地时区的 SupportsDaylightSavingTime 属性返回 false。

  • 本地时区没有不明确或无效的时间（对 IsAmbiguousTime 或 IsInvalidTime 的所有调用均返回 false）。

  • 在各个本地时间下，对 IsDaylightSavingTime 的所有调用均返回 false。

但如果使用 FindSystemTimeZoneById 方法检索对本地时区的引用，则情况不是这样。

Local 属性与 TimeZone 类的 CurrentTimeZone 属性相对应。

下面的示例检索表示本地时区的 TimeZoneInfo 对象，并输出其显示名称、标准时间名称和夏时制名称。

Dim localZone As TimeZoneInfo = TimeZoneInfo.Local
Console.WriteLine("Local Time Zone ID: {0}", localZone.Id)
Console.WriteLine("   Display Name is: {0}.", localZone.DisplayName)
Console.WriteLine("   Standard name is: {0}.", localZone.StandardName)
Console.WriteLine("   Daylight saving name is: {0}.", localZone.DaylightName)

TimeZoneInfo localZone = TimeZoneInfo.Local;
Console.WriteLine("Local Time Zone ID: {0}", localZone.Id);
Console.WriteLine("   Display Name is: {0}.", localZone.DisplayName);
Console.WriteLine("   Standard name is: {0}.", localZone.StandardName);
Console.WriteLine("   Daylight saving name is: {0}.", localZone.DaylightName);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间

其他资源

如何：访问预定义的 UTC 和本地时区对象


TimeZoneInfo ..::.StandardName 属性

TimeZoneInfo
.
.
::
.
StandardName 属性
TimeZoneInfo 类

获取时区标准时间的本地化显示名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property StandardName As String
    Get
public string StandardName { get; }
public:
property String^ StandardName {
    String^ get ();
}
member StandardName : string

属性值

类型： System String
时区标准时间的本地化显示名称。

StandardName 属性与 TimeZone 类的 StandardName 属性相同。

StandardName 属性值通常（但并不总是）与 Id 属性值相同。

下面的示例定义名为 DisplayDateWithTimeZoneName 的方法，该方法使用 IsDaylightSavingTime(DateTime) 方法确定是显示时区的标准时间名称还是夏时制名称。

Private Sub DisplayDateWithTimeZoneName(date1 As Date, timeZone As TimeZoneInfo)
   Console.WriteLine("The time is {0:t} on {0:d} {1}", _
                     date1, _
                     IIf(timeZone.IsDaylightSavingTime(date1), _
                         timezone.DaylightName, timezone.StandardName))
End Sub

private void DisplayDateWithTimeZoneName(DateTime date1, TimeZoneInfo timeZone)
{
   Console.WriteLine("The time is {0:t} on {0:d} {1}",
                     date1,
                     timeZone.IsDaylightSavingTime(date1) ?
                         timeZone.DaylightName : timeZone.StandardName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.SupportsDaylightSavingTime 属性

TimeZoneInfo
.
.
::
.
SupportsDaylightSavingTime 属性
TimeZoneInfo 类

获取一个值，该值指示时区是否具有任何夏时制规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property SupportsDaylightSavingTime As Boolean
    Get
public bool SupportsDaylightSavingTime { get; }
public:
property bool SupportsDaylightSavingTime {
    bool get ();
}
member SupportsDaylightSavingTime : bool

属性值

类型： System Boolean
如果时区支持夏时制，则为 true；否则为 false。

TimeZoneInfo..::.Local 属性返回的本地时区的 SupportsDaylightSavingTime 属性值反映“控制面板”的“日期和时间”应用程序中复选框的设置，该设置定义系统是否针对夏时制自动进行调整。如果未选中该复选框，或者未显示针对时区的复选框，则该属性的值为 false。 TimeZoneInfo..::.Local 属性返回的本地时区的 SupportsDaylightSavingTime 属性值反映“控制面板”的“日期和时间”应用程序中复选框的设置，该设置定义系统是否针对夏时制自动进行调整。如果未选中该复选框，或者未显示针对时区的复选框，则该属性的值为 false。

下面的示例检索本地系统上可用的所有时区的集合，并显示不支持夏时制的时区名称。

Dim zones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
For Each zone As TimeZoneInfo In zones
   If Not zone.SupportsDaylightSavingTime Then _
      Console.WriteLine(zone.DisplayName)
Next

ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones();
foreach(TimeZoneInfo zone in zones)
{
   if (! zone.SupportsDaylightSavingTime)
      Console.WriteLine(zone.DisplayName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间


TimeZoneInfo ..::.Utc 属性

TimeZoneInfo
.
.
::
.
Utc 属性
TimeZoneInfo 类

获取表示协调世界时 (UTC) 时区的 TimeZoneInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Utc As TimeZoneInfo
    Get
public static TimeZoneInfo Utc { get; }
public:
static property TimeZoneInfo^ Utc {
    TimeZoneInfo^ get ();
}
static member Utc : TimeZoneInfo

属性值

类型： System TimeZoneInfo
一个对象，表示协调世界时 (UTC) 时区。

这是一个内置对象；不从注册表中检索有关此 TimeZoneInfo 对象的信息。

重要说明 重要事项

应始终通过 TimeZoneInfo..::.Utc 属性访问协调世界时 (UTC) 时区，而不应将 UTC 时区分配给 TimeZoneInfo 对象变量。这可以防止 TimeZoneInfo 对象变量因调用 ClearCachedData 方法而失效。 应始终通过 TimeZoneInfo..::.Utc 属性访问协调世界时 (UTC) 时区，而不应将 UTC 时区分配给 TimeZoneInfo 对象变量。这可以防止 TimeZoneInfo 对象变量因调用 ClearCachedData 方法而失效。

协调世界时原来称为格林尼治标准时间 (GMT)。

下面的示例检索表示协调世界时 (UTC) 的 TimeZoneInfo 对象，并输出其显示名称、标准时间名称和夏时制名称。

Dim universalZone As TimeZoneInfo = TimeZoneInfo.Utc
Console.WriteLine("The universal time zone is {0}.", universalZone.DisplayName)
Console.WriteLine("Its standard name is {0}.", universalZone.StandardName)
Console.WriteLine("Its daylight savings name is {0}.", universalZone.DaylightName)

TimeZoneInfo universalZone = TimeZoneInfo.Utc;
Console.WriteLine("The universal time zone is {0}.", universalZone.DisplayName);
Console.WriteLine("Its standard name is {0}.", universalZone.StandardName);
Console.WriteLine("Its daylight savings name is {0}.", universalZone.DaylightName);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo 类
TimeZoneInfo 成员
System 命名空间

其他资源

如何：访问预定义的 UTC 和本地时区对象


TimeZoneInfo ..::.AdjustmentRule 类

TimeZoneInfo
.
.
::
.
AdjustmentRule 类
TimeZoneInfo 类 成员

提供有关时区调整（如与夏时制之间的转换）的信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public NotInheritable Class AdjustmentRule _
    Implements IEquatable(Of TimeZoneInfo..::..AdjustmentRule), ISerializable,  _
    IDeserializationCallback
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class AdjustmentRule : IEquatable<TimeZoneInfo..::..AdjustmentRule>,
    ISerializable, IDeserializationCallback
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public ref class AdjustmentRule sealed : IEquatable<TimeZoneInfo..::..AdjustmentRule^>,
    ISerializable, IDeserializationCallback
[<SealedAttribute>]
[<SerializableAttribute>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type AdjustmentRule =
    class
        interface IEquatable<TimeZoneInfo..::..AdjustmentRule>
        interface ISerializable
        interface IDeserializationCallback
    end

TimeZoneInfo..::.AdjustmentRule 类定义特定时间与夏时制来回转换的有效开始日期和结束日期，以及其增量（即调整使时区的标准时间发生的确切变动量）。此外，两个属性返回 TimeZoneInfo..::.TransitionTime 对象，这些对象定义每次与标准时间发生转换的时间。 TimeZoneInfo..::.AdjustmentRule 类定义特定时间与夏时制来回转换的有效开始日期和结束日期，以及其增量（即调整使时区的标准时间发生的确切变动量）。此外，两个属性返回 TimeZoneInfo..::.TransitionTime 对象，这些对象定义每次与标准时间发生转换的时间。

说明 说明

TimeZoneInfo..::.AdjustmentRule 类的实例是不可变的。一旦创建了对象，就不能修改其值。 TimeZoneInfo..::.AdjustmentRule 类的实例是不可变的。一旦创建了对象，就不能修改其值。

要创建 TimeZoneInfo..::.AdjustmentRule 对象，请调用 static（在 Visual Basic 中为 Shared）TimeZoneInfo..::.AdjustmentRule..::.CreateAdjustmentRule 方法。然后，您便可以将 TimeZoneInfo..::.AdjustmentRule 对象的数组提供给 TimeZoneInfo..::.CreateCustomTimeZone 方法的两个重载。要检索特定时区的调整规则，请调用其 TimeZoneInfo..::.GetAdjustmentRules 方法，此方法返回 TimeZoneInfo..::.AdjustmentRule 对象的数组。 要创建 TimeZoneInfo..::.AdjustmentRule 对象，请调用 static（在 Visual Basic 中为 Shared）TimeZoneInfo..::.AdjustmentRule..::.CreateAdjustmentRule 方法。然后，您便可以将 TimeZoneInfo..::.AdjustmentRule 对象的数组提供给 TimeZoneInfo..::.CreateCustomTimeZone 方法的两个重载。要检索特定时区的调整规则，请调用其 TimeZoneInfo..::.GetAdjustmentRules 方法，此方法返回 TimeZoneInfo..::.AdjustmentRule 对象的数组。 要创建 TimeZoneInfo..::.AdjustmentRule 对象，请调用 static（在 Visual Basic 中为 Shared）TimeZoneInfo..::.AdjustmentRule..::.CreateAdjustmentRule 方法。然后，您便可以将 TimeZoneInfo..::.AdjustmentRule 对象的数组提供给 TimeZoneInfo..::.CreateCustomTimeZone 方法的两个重载。要检索特定时区的调整规则，请调用其 TimeZoneInfo..::.GetAdjustmentRules 方法，此方法返回 TimeZoneInfo..::.AdjustmentRule 对象的数组。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例检索在本地系统上定义的所有时区，并显示其调整规则的完整信息。

Private Enum WeekOfMonth As Integer
   First = 1
   Second = 2
   Third = 3
   Fourth = 4
   Last = 5
End Enum

Private Sub ShowStartAndEndDates()
   ' Get all time zones from system
   Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
   ' Get each time zone
   For Each timeZone As TimeZoneInfo In timeZones
      Dim adjustments() As TimeZoneInfo.AdjustmentRule = timeZone.GetAdjustmentRules()
      ' Display message for time zones with no adjustments
      If adjustments.Length = 0 Then
         Console.WriteLine("{0} has no adjustment rules", timeZone.StandardName)
      Else
         ' Handle time zones with 1 or 2+ adjustments differently
         Dim showCount As Boolean = False
         Dim ctr As Integer = 0
         Dim spacer As String = ""

         Console.WriteLine("{0} Adjustment rules", timeZone.StandardName)
         If adjustments.Length > 1 Then showCount = True : spacer = "   "
         ' Iterate adjustment rules
         For Each adjustment As TimeZoneInfo.AdjustmentRule in adjustments
            If showCount Then
               Console.WriteLine("   Adjustment rule #{0}", ctr+1)
               ctr += 1
            End If
            ' Display general adjustment information
            Console.WriteLine("{0}   Start Date: {1:D}", spacer, adjustment.DateStart)
            Console.WriteLine("{0}   End Date: {1:D}", spacer, adjustment.DateEnd)
            Console.WriteLine("{0}   Time Change: {1}:{2:00} hours", spacer, _
                              adjustment.DaylightDelta.Hours, adjustment.DaylightDelta.Minutes)
            ' Get transition start information
            Dim transitionStart As TimeZoneInfo.TransitionTime = adjustment.DaylightTransitionStart
            Console.Write("{0}   Annual Start: ", spacer)
            If transitionStart.IsFixedDateRule Then
               Console.WriteLine("On {0} {1} at {2:t}", _
                                 MonthName(transitionStart.Month), _
                                 transitionStart.Day, _
                                 transitionStart.TimeOfDay)
            Else
               Console.WriteLine("The {0} {1} of {2} at {3:t}", _
                                 CType(transitionStart.Week, WeekOfMonth).ToString(), _
                                 transitionStart.DayOfWeek.ToString(), _
                                 MonthName(transitionStart.Month), _
                                 transitionStart.TimeOfDay)
            End If
            ' Get transition end information
            Dim transitionEnd As TimeZoneInfo.TransitionTime = adjustment.DaylightTransitionEnd

            Console.Write("{0}   Annual End: ", spacer)
            If transitionEnd.IsFixedDateRule Then
               Console.WriteLine("On {0} {1} at {2:t}", _
                                 MonthName(transitionEnd.Month), _
                                 transitionEnd.Day, _
                                 transitionEnd.TimeOfDay)
            Else
               Console.WriteLine("The {0} {1} of {2} at {3:t}", _
                                 CType(transitionEnd.Week, WeekOfMonth).ToString(), _
                                 transitionEnd.DayOfWeek.ToString(), _
                                 MonthName(transitionEnd.Month), _
                                 transitionEnd.TimeOfDay)
            End If
         Next
      End If
      Console.WriteLine()
   Next
End Sub

private enum WeekOfMonth
{
   First = 1,
   Second = 2,
   Third = 3,
   Fourth = 4,
   Last = 5,
}

private static void ShowStartAndEndDates()
{
   // Get all time zones from system
   ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
   string[] monthNames = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
   // Get each time zone
   foreach (TimeZoneInfo timeZone in timeZones)
   {
      TimeZoneInfo.AdjustmentRule[] adjustments = timeZone.GetAdjustmentRules();
      // Display message for time zones with no adjustments
      if (adjustments.Length == 0)
      {
         Console.WriteLine("{0} has no adjustment rules", timeZone.StandardName);
      }
      else
      {
         // Handle time zones with 1 or 2+ adjustments differently
         bool showCount = false;
         int ctr = 0;
         string spacer = "";

         Console.WriteLine("{0} Adjustment rules", timeZone.StandardName);
         if (adjustments.Length > 1)
         {
            showCount = true;
            spacer = "   ";
         }
         // Iterate adjustment rules
         foreach (TimeZoneInfo.AdjustmentRule adjustment in adjustments)
         {
            if (showCount)
            {
               Console.WriteLine("   Adjustment rule #{0}", ctr+1);
               ctr++;
            }
            // Display general adjustment information
            Console.WriteLine("{0}   Start Date: {1:D}", spacer, adjustment.DateStart);
            Console.WriteLine("{0}   End Date: {1:D}", spacer, adjustment.DateEnd);
            Console.WriteLine("{0}   Time Change: {1}:{2:00} hours", spacer,
                              adjustment.DaylightDelta.Hours, adjustment.DaylightDelta.Minutes);
            // Get transition start information
            TimeZoneInfo.TransitionTime transitionStart = adjustment.DaylightTransitionStart;
            Console.Write("{0}   Annual Start: ", spacer);
            if (transitionStart.IsFixedDateRule)
            {
               Console.WriteLine("On {0} {1} at {2:t}",
                                 monthNames[transitionStart.Month - 1],
                                 transitionStart.Day,
                                 transitionStart.TimeOfDay);
            }
            else
            {
               Console.WriteLine("The {0} {1} of {2} at {3:t}",
                                 ((WeekOfMonth)transitionStart.Week).ToString(),
                                 transitionStart.DayOfWeek.ToString(),
                                 monthNames[transitionStart.Month - 1],
                                 transitionStart.TimeOfDay);
            }
            // Get transition end information
            TimeZoneInfo.TransitionTime transitionEnd = adjustment.DaylightTransitionEnd;
            Console.Write("{0}   Annual End: ", spacer);
            if (transitionEnd.IsFixedDateRule)
            {
               Console.WriteLine("On {0} {1} at {2:t}",
                                 monthNames[transitionEnd.Month - 1],
                                 transitionEnd.Day,
                                 transitionEnd.TimeOfDay);
            }
            else
            {
               Console.WriteLine("The {0} {1} of {2} at {3:t}",
                                 ((WeekOfMonth)transitionEnd.Week).ToString(),
                                 transitionEnd.DayOfWeek.ToString(),
                                 monthNames[transitionEnd.Month - 1],
                                 transitionEnd.TimeOfDay);
            }
         }
      }
      Console.WriteLine();
   }
}

以下为此示例生成的输出的一小部分。准确的输出可能因运行示例的操作系统和日期而异。 以下为此示例生成的输出的一小部分。准确的输出可能因运行示例的操作系统和日期而异。

Morocco Standard Time Adjustment rules
   Adjustment rule #1
      Start Date: Tuesday, January 01, 2008
      End Date: Wednesday, December 31, 2008
      Time Change: 1:00 hours
      Annual Start: The Last Saturday of May at 11:59 PM
      Annual End: The Last Sunday of August at 11:59 PM
   Adjustment rule #2
      Start Date: Thursday, January 01, 2009
      End Date: Thursday, December 31, 2009
      Time Change: 1:00 hours
      Annual Start: The Last Sunday of May at 11:59 PM
      Annual End: The Third Thursday of August at 11:59 PM

Coordinated Universal Time has no adjustment rules

GMT Standard Time Adjustment rules
   Start Date: Monday, January 01, 0001
   End Date: Friday, December 31, 9999
   Time Change: 1:00 hours
   Annual Start: The Last Sunday of March at 1:00 AM
   Annual End: The Last Sunday of October at 2:00 AM

Greenwich Standard Time has no adjustment rules

W.Europe Standard Time Adjustment rules
   Start Date: Monday, January 01, 0001
   End Date: Friday, December 31, 9999
   Time Change: 1:00 hours
   Annual Start: The Last Sunday of March at 2:00 AM
   Annual End: The Last Sunday of October at 3:00 AM

Central Europe Standard Time Adjustment rules
   Start Date: Monday, January 01, 0001
   End Date: Friday, December 31, 9999
   Time Change: 1:00 hours
   Annual Start: The Last Sunday of March at 2:00 AM
   Annual End: The Last Sunday of October at 3:00 AM

Romance Standard Time Adjustment rules
   Start Date: Monday, January 01, 0001
   End Date: Friday, December 31, 9999
   Time Change: 1:00 hours
   Annual Start: The Last Sunday of March at 2:00 AM
   Annual End: The Last Sunday of October at 3:00 AM

Central European Standard Time Adjustment rules
   Start Date: Monday, January 01, 0001
   End Date: Friday, December 31, 9999
   Time Change: 1:00 hours
   Annual Start: The Last Sunday of March at 2:00 AM
   Annual End: The Last Sunday of October at 3:00 AM

W.Central Africa Standard Time has no adjustment rules

System System..::.TimeZoneInfo..::.AdjustmentRuleTimeZoneInfo System..::.TimeZoneInfo..::.AdjustmentRuleAdjustmentRule
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 成员
System 命名空间
TimeZoneInfo


TimeZoneInfo ..::.AdjustmentRule 成员

TimeZoneInfo
.
.
::
.
AdjustmentRule 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo

提供有关时区调整（如与夏时制之间的转换）的信息。

TimeZoneInfo AdjustmentRule 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TimeZoneInfo AdjustmentRule 类
System 命名空间


TimeZoneInfo ..::.AdjustmentRule 方法

TimeZoneInfo
.
.
::
.
AdjustmentRule 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo

TimeZoneInfo AdjustmentRule 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

TimeZoneInfo AdjustmentRule 类
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.CreateAdjustmentRule 方法

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
CreateAdjustmentRule 方法
TimeZoneInfo

为特定时区创建新的调整规则。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateAdjustmentRule ( _
    dateStart As DateTime, _
    dateEnd As DateTime, _
    daylightDelta As TimeSpan, _
    daylightTransitionStart As TimeZoneInfo..::..TransitionTime, _
    daylightTransitionEnd As TimeZoneInfo..::..TransitionTime _
) As TimeZoneInfo..::..AdjustmentRule
public static TimeZoneInfo..::..AdjustmentRule CreateAdjustmentRule(
    DateTime dateStart,
    DateTime dateEnd,
    TimeSpan daylightDelta,
    TimeZoneInfo..::..TransitionTime daylightTransitionStart,
    TimeZoneInfo..::..TransitionTime daylightTransitionEnd
)
public:
static TimeZoneInfo..::..AdjustmentRule^ CreateAdjustmentRule(
    DateTime dateStart,
    DateTime dateEnd,
    TimeSpan daylightDelta,
    TimeZoneInfo..::..TransitionTime daylightTransitionStart,
    TimeZoneInfo..::..TransitionTime daylightTransitionEnd
)
static member CreateAdjustmentRule :
        dateStart:DateTime *
        dateEnd:DateTime *
        daylightDelta:TimeSpan *
        daylightTransitionStart:TimeZoneInfo..::..TransitionTime *
        daylightTransitionEnd:TimeZoneInfo..::..TransitionTime -> TimeZoneInfo..::..AdjustmentRule

参数

dateStart
类型： System DateTime
调整规则的生效日期。如果 dateStart 参数的值为 DateTime.MinValue.Date，则这是对某时区生效的第一个调整规则。 调整规则的生效日期。如果 dateStart 参数的值为 DateTime.MinValue.Date，则这是对某时区生效的第一个调整规则。
dateEnd
类型： System DateTime
调整规则生效的最后日期。如果 dateEnd 参数的值为 DateTime.MaxValue.Date，则调整规则没有结束日期。 调整规则生效的最后日期。如果 dateEnd 参数的值为 DateTime.MaxValue.Date，则调整规则没有结束日期。
daylightDelta
类型： System TimeSpan
调整产生的时间更改。将此值添加到时区的 TimeZoneInfo..::.BaseUtcOffset 属性，以获取与协调世界时 (UTC) 之间正确的白昼偏移量。此值的范围是从 -14 到 14。 调整产生的时间更改。将此值添加到时区的 TimeZoneInfo..::.BaseUtcOffset 属性，以获取与协调世界时 (UTC) 之间正确的白昼偏移量。此值的范围是从 -14 到 14。 调整产生的时间更改。将此值添加到时区的 TimeZoneInfo..::.BaseUtcOffset 属性，以获取与协调世界时 (UTC) 之间正确的白昼偏移量。此值的范围是从 -14 到 14。
daylightTransitionStart
类型： System TimeZoneInfo TransitionTime
一个 TimeZoneInfo..::.TransitionTime 对象，定义夏时制的起始时间。
daylightTransitionEnd
类型： System TimeZoneInfo TransitionTime
一个 TimeZoneInfo..::.TransitionTime 对象，定义夏时制的结束时间。

返回值

类型： System TimeZoneInfo AdjustmentRule
一个 TimeZoneInfo..::.AdjustmentRule 对象，表示新的调整规则。
异常 | 条件
ArgumentException | dateStart 或 dateEnd 参数的 Kind 属性不等于 DateTimeKind..::.Unspecified。 - 或 - daylightTransitionStart 参数等于 daylightTransitionEnd 参数。 - 或 - dateStart 或 dateEnd 参数包含一个时间值。
ArgumentOutOfRangeException | dateEnd 早于 dateStart。 - 或 - daylightDelta 小于 -14 或大于 14。 - 或 - daylightDelta 参数的 Milliseconds 属性不等于 0。 - 或 - daylightDelta 参数的 Ticks 属性不等于整秒数。

可以使用此方法为自定义时区创建一个或多个调整规则。然后，将调用此方法返回的 TimeZoneInfo..::.AdjustmentRule 对象数组作为 adjustmentRules 参数传递给 CreateCustomTimeZone 方法的两个重载。下面的示例演示此过程。 可以使用此方法为自定义时区创建一个或多个调整规则。然后，将调用此方法返回的 TimeZoneInfo..::.AdjustmentRule 对象数组作为 adjustmentRules 参数传递给 CreateCustomTimeZone 方法的两个重载。下面的示例演示此过程。 可以使用此方法为自定义时区创建一个或多个调整规则。然后，将调用此方法返回的 TimeZoneInfo..::.AdjustmentRule 对象数组作为 adjustmentRules 参数传递给 CreateCustomTimeZone 方法的两个重载。下面的示例演示此过程。

说明 说明

CreateAdjustmentRule 方法只能用于定义新时区的调整规则；不能将其用于修改现有时区的调整规则。

dateStart 和 dateEnd 参数必须是不包含时间分量的日期值，否则会引发 ArgumentException。要移除时间分量，可以从日期和时间的 Date 属性检索 DateTime 值，如下列语句所示： dateStart 和 dateEnd 参数必须是不包含时间分量的日期值，否则会引发 ArgumentException。要移除时间分量，可以从日期和时间的 Date 属性检索 DateTime 值，如下列语句所示：

DateTime.MinValue.Date
DateTime.MaxValue.Date
DateTime.Now.Date
dateVariable.Date

dateStart 和 dateEnd 参数的 Kind 属性还必须是 DateTimeKind..::.Unspecified。

daylightDelta 参数的值范围为 -14 到 14。daylightDelta 参数的和的范围为 -14 到 14，在 TimeZoneInfo..::.CreateCustomTimeZone 方法调用中使用的 baseUtcOffset 参数的和也必须必须介于 -14 与 14 之间，否则会引发 InvalidTimeZoneException。 daylightDelta 参数的值范围为 -14 到 14。daylightDelta 参数的和的范围为 -14 到 14，在 TimeZoneInfo..::.CreateCustomTimeZone 方法调用中使用的 baseUtcOffset 参数的和也必须必须介于 -14 与 14 之间，否则会引发 InvalidTimeZoneException。

说明 说明

daylightDelta 参数定义时区的标准时间和其夏时制之间的时差。它不用于定义时区的标准时间与协调世界时 (UTC) 的偏移量。TimeZoneInfo 类假定与 UTC 的此偏移量在时区的整个生命中是常量。若要反映非应用调整规则引起的时区与 UTC 的偏移量的变化，必须使用 CreateCustomTimeZone 方法创建新自定义时区。 daylightDelta 参数定义时区的标准时间和其夏时制之间的时差。它不用于定义时区的标准时间与协调世界时 (UTC) 的偏移量。TimeZoneInfo 类假定与 UTC 的此偏移量在时区的整个生命中是常量。若要反映非应用调整规则引起的时区与 UTC 的偏移量的变化，必须使用 CreateCustomTimeZone 方法创建新自定义时区。 daylightDelta 参数定义时区的标准时间和其夏时制之间的时差。它不用于定义时区的标准时间与协调世界时 (UTC) 的偏移量。TimeZoneInfo 类假定与 UTC 的此偏移量在时区的整个生命中是常量。若要反映非应用调整规则引起的时区与 UTC 的偏移量的变化，必须使用 CreateCustomTimeZone 方法创建新自定义时区。 daylightDelta 参数定义时区的标准时间和其夏时制之间的时差。它不用于定义时区的标准时间与协调世界时 (UTC) 的偏移量。TimeZoneInfo 类假定与 UTC 的此偏移量在时区的整个生命中是常量。若要反映非应用调整规则引起的时区与 UTC 的偏移量的变化，必须使用 CreateCustomTimeZone 方法创建新自定义时区。

下面的示例创建备用中部标准时区，并为 1976-1986、1987-2006 和 2007 至以后这三个时期定义三个调整规则。这些规则会被添加到泛型 List<(Of <(T>)>) 对象，然后其中的元素将被复制到 TimeZoneInfo..::.AdjustmentRule 数组。此数组随后将用于 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String, String, array<TimeZoneInfo..::.AdjustmentRule>[]()[]) 方法调用。 下面的示例创建备用中部标准时区，并为 1976-1986、1987-2006 和 2007 至以后这三个时期定义三个调整规则。这些规则会被添加到泛型 List<(Of <(T>)>) 对象，然后其中的元素将被复制到 TimeZoneInfo..::.AdjustmentRule 数组。此数组随后将用于 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String, String, array<TimeZoneInfo..::.AdjustmentRule>[]()[]) 方法调用。 下面的示例创建备用中部标准时区，并为 1976-1986、1987-2006 和 2007 至以后这三个时期定义三个调整规则。这些规则会被添加到泛型 List<(Of <(T>)>) 对象，然后其中的元素将被复制到 TimeZoneInfo..::.AdjustmentRule 数组。此数组随后将用于 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String, String, array<TimeZoneInfo..::.AdjustmentRule>[]()[]) 方法调用。

' Create alternate Central Standard Time to include historical time zone information
'
' Declare necessary TimeZoneInfo.AdjustmentRule objects for time zone
Dim delta As New TimeSpan(1, 0, 0)
Dim adjustment As TimeZoneInfo.AdjustmentRule
Dim adjustmentList As New List(Of TimeZoneInfo.AdjustmentRule)
' Declare transition time variables to hold transition time information
Dim transitionRuleStart, transitionRuleEnd As TimeZoneInfo.TransitionTime

' Define end rule (for 1976-2006)
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00AM#, 10, 5, DayOfWeek.Sunday)
' Define rule (1976-1986)
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#2:00:00AM#, 04, 05, DayOfWeek.Sunday)
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#01/01/1976#, #12/31/1986#, delta, transitionRuleStart, transitionRuleEnd)
adjustmentList.Add(adjustment)
' Define rule (1987-2006)
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#2:00:00AM#, 04, 01, DayOfWeek.Sunday)
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#01/01/1987#, #12/31/2006#, delta, transitionRuleStart, transitionRuleEnd)
adjustmentList.Add(adjustment)
' Define rule (2007- )
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#2:00:00AM#, 03, 02, DayOfWeek.Sunday)
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#2:00:00AM#, 11, 01, DayOfWeek.Sunday)
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#01/01/2007#, Date.MaxValue.Date, delta, transitionRuleStart, transitionRuleEnd)
adjustmentList.Add(adjustment)

' Create custom U.S. Central Standard Time Zone
TimeZoneInfo.CreateCustomTimeZone("Central Standard Time", New TimeSpan(-6, 0, 0), _
                "(GMT-06:00) Central Time (US Only)", "Central Standard Time", _
                "Central Daylight Time", adjustmentList.ToArray())

// Create alternate Central Standard Time to include historical time zone information
//
// Declare necessary TimeZoneInfo.AdjustmentRule objects for time zone
TimeSpan delta = new TimeSpan(1, 0, 0);
TimeZoneInfo.AdjustmentRule adjustment;
List<TimeZoneInfo.AdjustmentRule> adjustmentList = new List<TimeZoneInfo.AdjustmentRule>();
// Declare transition time variables to hold transition time information
TimeZoneInfo.TransitionTime transitionRuleStart, transitionRuleEnd;

// Define end rule (for 1976-2006)
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 10, 5, DayOfWeek.Sunday);
// Define rule (1976-1986)
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 04, 05, DayOfWeek.Sunday);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1976, 1, 1), new DateTime(1986, 12, 31), delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);
// Define rule (1987-2006)
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 04, 01, DayOfWeek.Sunday);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1987, 1, 1), new DateTime(2006, 12, 31), delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);
// Define rule (2007- )
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 03, 02, DayOfWeek.Sunday);
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 11, 01, DayOfWeek.Sunday);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(2007, 01, 01), DateTime.MaxValue.Date, delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);

// Create custom U.S. Central Standard Time zone
TimeZoneInfo.CreateCustomTimeZone("Central Standard Time", new TimeSpan(-6, 0, 0),
                "(GMT-06:00) Central Time (US Only)", "Central Standard Time",
                "Central Daylight Time", adjustmentList.ToArray());

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.Equals 方法

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo

指示两个 TimeZoneInfo..::.AdjustmentRule 对象是否相等。

名称 说明
页首

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.Equals 方法 (TimeZoneInfo ..::.AdjustmentRule)

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
Equals 方法 (TimeZoneInfo
.
.
::
.
AdjustmentRule)
TimeZoneInfo

确定当前 TimeZoneInfo..::.AdjustmentRule 对象是否等于另一个 TimeZoneInfo..::.AdjustmentRule 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    other As TimeZoneInfo..::..AdjustmentRule _
) As Boolean
public bool Equals(
    TimeZoneInfo..::..AdjustmentRule other
)
public:
virtual bool Equals(
    TimeZoneInfo..::..AdjustmentRule^ other
) sealed
abstract Equals :
        other:TimeZoneInfo..::..AdjustmentRule -> bool
override Equals :
        other:TimeZoneInfo..::..AdjustmentRule -> bool

参数

other
类型： System TimeZoneInfo AdjustmentRule
另一个 TimeZoneInfo..::.AdjustmentRule 对象。

返回值

类型： System Boolean
如果两个 TimeZoneInfo..::.AdjustmentRule 对象具有相等的值，则为 true；否则为 false。

实现

为确定两个 TimeZoneInfo..::.AdjustmentRule 对象是否相等，Equals(TimeZoneInfo..::.AdjustmentRule) 方法会对每个对象的成员值进行比较。如果两个调整规则具有相同的生效日期、相同的增量，并且它们的 DaylightTransitionStart 和 DaylightTransitionEnd 属性返回的 TimeZoneInfo..::.TransitionTime 对象的值也相等，则这两个调整规则相等。 为确定两个 TimeZoneInfo..::.AdjustmentRule 对象是否相等，Equals(TimeZoneInfo..::.AdjustmentRule) 方法会对每个对象的成员值进行比较。如果两个调整规则具有相同的生效日期、相同的增量，并且它们的 DaylightTransitionStart 和 DaylightTransitionEnd 属性返回的 TimeZoneInfo..::.TransitionTime 对象的值也相等，则这两个调整规则相等。

下面的示例调用 TimeZoneInfo..::.AdjustmentRule..::.Equals(TimeZoneInfo..::.AdjustmentRule) 方法将中部标准时间的调整规则与加拿大中部标准时间和墨西哥标准时间的调整规则进行比较。

Dim timeZoneName As String = String.Empty
' Get CST, Canadian CST, and Mexican CST adjustment rules
Dim usCstAdjustments(), canCstAdjustments(), mexCstAdjustments() As TimeZoneInfo.AdjustmentRule
Try
   timeZoneName = "Central Standard Time"
   usCstAdjustments = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName).GetAdjustmentRules
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The {0} time zone is not defined in the registry.", timeZoneName)
Catch e As InvalidTimeZoneException
   Console.WriteLine("Data for the {0} time zone is invalid.", timeZoneName)
End Try
Try
   timeZoneName = "Canada Central Standard Time"
   canCstAdjustments = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName).GetAdjustmentRules
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The {0} time zone is not defined in the registry.", timeZoneName)
Catch e As InvalidTimeZoneException
   Console.WriteLine("Data for the {0} time zone is invalid.", timeZoneName)
End Try
Try
   timeZoneName = "Mexico Standard Time"
   mexCstAdjustments = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName).GetAdjustmentRules
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The {0} time zone is not defined in the registry.", timeZoneName)
Catch e As InvalidTimeZoneException
   Console.WriteLine("Data for the {0} time zone is invalid.", timeZoneName)
End Try
' Determine if CST and other time zones have the same rules
For Each rule As TimeZoneInfo.AdjustmentRule In usCstAdjustments
   Console.WriteLine("Comparing Central Standard Time rule for {0:d} to {1:d} with:", _
                     rule.DateStart, rule.DateEnd)
   ' Compare with Canada Central Standard Time
   If canCstAdjustments.Length = 0 Then
      Console.WriteLine("   Canada Central Standard Time has no adjustment rules.")
   Else
      For Each canRule As TimeZoneInfo.AdjustmentRule In canCstAdjustments
         Console.WriteLine("   Canadian CST for {0:d} to {1:d}: {2}", _
                           canRule.DateStart, canRule.DateEnd, _
                           IIf(rule.Equals(canRule), "Equal", "Not Equal"))
      Next
   End If

   ' Compare with Mexico Central Standard Time
   If mexCstAdjustments.Length = 0 Then
      Console.WriteLine("   Mexican Central Standard Time has no adjustment rules.")
   Else
      For Each mexRule As TimeZoneInfo.AdjustmentRule In mexCstAdjustments
         Console.WriteLine("   Mexican CST for {0:d} to {1:d}: {2}", _
                           mexRule.DateStart, mexRule.DateEnd, _
                           IIf(rule.Equals(mexRule), "Equal", "Not Equal"))
      Next
   End If
Next
' This code displays the following output to the console:
'
' Comparing Central Standard Time rule for 1/1/0001 to 12/31/9999 with:
'    Canada Central Standard Time has no adjustment rules.
'    Mexican CST for 1/1/0001 to 12/31/9999: Equal

string timeZoneName = "";
// Get CST, Canadian CST, and Mexican CST adjustment rules
TimeZoneInfo.AdjustmentRule[] usCstAdjustments = null;
TimeZoneInfo.AdjustmentRule[] canCstAdjustments = null;
TimeZoneInfo.AdjustmentRule[] mexCstAdjustments = null;
try
{
   timeZoneName = "Central Standard Time";
   usCstAdjustments = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName).GetAdjustmentRules();
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The {0} time zone is not defined in the registry.",
                     timeZoneName);
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Data for the {0} time zone is invalid.",
                     timeZoneName);
}
try
{
   timeZoneName = "Canada Central Standard Time";
   canCstAdjustments = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName).GetAdjustmentRules();
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The {0} time zone is not defined in the registry.",
                     timeZoneName);
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Data for the {0} time zone is invalid.",
                     timeZoneName);
}
try
{
   timeZoneName = "Mexico Standard Time";
   mexCstAdjustments = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName).GetAdjustmentRules();
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The {0} time zone is not defined in the registry.",
                     timeZoneName);
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Data for the {0} time zone is invalid.",
                     timeZoneName);
}
// Determine if CST and other time zones have the same rules
foreach(TimeZoneInfo.AdjustmentRule rule in usCstAdjustments)
{
   Console.WriteLine("Comparing Central Standard Time rule for {0:d} to {1:d} with:",
                     rule.DateStart, rule.DateEnd);
   // Compare with Canada Central Standard Time
   if (canCstAdjustments.Length == 0)
   {
      Console.WriteLine("   Canada Central Standard Time has no adjustment rules.");
   }
   else
   {
      foreach (TimeZoneInfo.AdjustmentRule canRule in canCstAdjustments)
      {
         Console.WriteLine("   Canadian CST for {0:d} to {1:d}: {2}",
                           canRule.DateStart, canRule.DateEnd,
                           rule.Equals(canRule) ? "Equal" : "Not Equal");
      }
   }

   // Compare with Mexico Central Standard Time
   if (mexCstAdjustments.Length == 0)
   {
      Console.WriteLine("   Mexican Central Standard Time has no adjustment rules.");
   }
   else
   {
      foreach (TimeZoneInfo.AdjustmentRule mexRule in mexCstAdjustments)
      {
         Console.WriteLine("   Mexican CST for {0:d} to {1:d}: {2}",
                           mexRule.DateStart, mexRule.DateEnd,
                           rule.Equals(mexRule) ? "Equal" : "Not Equal");
      }
   }
}
// This code displays the following output to the console:
//
// Comparing Central Standard Time rule for 1/1/0001 to 12/31/9999 with:
//    Canada Central Standard Time has no adjustment rules.
//    Mexican CST for 1/1/0001 to 12/31/9999: Equal

这段代码将以下输出显示到控制台：

Comparing Central Standard Time rule for 1/1/0001 to 12/31/9999 with:
   Canada Central Standard Time has no adjustment rules.Mexican CST for 1/1/0001 to 12/31/9999: Equal

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
Equals 重载
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.GetHashCode 方法

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
GetHashCode 方法
TimeZoneInfo

用作哈希算法的哈希函数和数据结构（如哈希表）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
一个 32 位有符号整数，用作当前 TimeZoneInfo..::.AdjustmentRule 对象的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.IDeserializationCallback ..::.OnDeserialization 方法

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
IDeserializationCallback
.
.
::
.
OnDeserialization 方法
TimeZoneInfo

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

在 TimeZoneInfo..::.AdjustmentRule 对象的反序列化完成时运行。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub OnDeserialization ( _
    sender As Object _
) Implements IDeserializationCallback.OnDeserialization
void IDeserializationCallback.OnDeserialization(
    Object sender
)
private:
virtual void OnDeserialization(
    Object^ sender
) sealed = IDeserializationCallback::OnDeserialization
private abstract OnDeserialization :
        sender:Object -> unit
private override OnDeserialization :
        sender:Object -> unit

参数

sender
类型： System Object
开始回调的对象。当前未实现该参数的功能。 开始回调的对象。当前未实现该参数的功能。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.ISerializable ..::.GetObjectData 方法

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
TimeZoneInfo

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

使用序列化 SerializationInfo 对象所需的数据填充该对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
private:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
private override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要用数据填充的 SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
此序列化的目标（请参见 StreamingContext）。

实现

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.AdjustmentRule 属性

TimeZoneInfo
.
.
::
.
AdjustmentRule 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo

TimeZoneInfo AdjustmentRule 类型公开以下成员。

名称 说明
页首

参考

TimeZoneInfo AdjustmentRule 类
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.DateEnd 属性

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
DateEnd 属性
TimeZoneInfo

获取调整规则的失效日期。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DateEnd As DateTime
    Get
public DateTime DateEnd { get; }
public:
property DateTime DateEnd {
    DateTime get ();
}
member DateEnd : DateTime

属性值

类型： System DateTime
一个 DateTime 值，指示调整规则的结束日期。

DateEnd 属性的值是不包含时间分量的日期值。

因为当前调整规则的结束日期通常是未知的，所以您可以在创建自定义调整规则时将 DateTime.MaxValue.Date 分配给 DateEnd 属性。

重要说明 重要事项

除非有充分的理由，否则应将调整规则的结束日期定义为在时区采用标准时间的时间间隔内发生。除非有充分的理由，否则不应将调整规则的结束日期定义为在时区采用夏时制的时间间隔内发生。例如，如果时区从夏时制转换发生在三月的第三个星期日，转换为夏时制发生在十月的第一个星期日，则调整规则的有效结束日期不应为特定年的 12 月 31 日，因为该日期位于夏时制期间内。 除非有充分的理由，否则应将调整规则的结束日期定义为在时区采用标准时间的时间间隔内发生。除非有充分的理由，否则不应将调整规则的结束日期定义为在时区采用夏时制的时间间隔内发生。例如，如果时区从夏时制转换发生在三月的第三个星期日，转换为夏时制发生在十月的第一个星期日，则调整规则的有效结束日期不应为特定年的 12 月 31 日，因为该日期位于夏时制期间内。 除非有充分的理由，否则应将调整规则的结束日期定义为在时区采用标准时间的时间间隔内发生。除非有充分的理由，否则不应将调整规则的结束日期定义为在时区采用夏时制的时间间隔内发生。例如，如果时区从夏时制转换发生在三月的第三个星期日，转换为夏时制发生在十月的第一个星期日，则调整规则的有效结束日期不应为特定年的 12 月 31 日，因为该日期位于夏时制期间内。

默认情况下，Windows XP 中的注册表为每个时区定义一个调整规则，其结束日期为 9999 年 12 月 31 日星期五（DateTime.MaxValue.Date 的值）。对于美国的时区，Windows Vista 中的注册表定义了两个调整规则： 默认情况下，Windows XP 中的注册表为每个时区定义一个调整规则，其结束日期为 9999 年 12 月 31 日星期五（DateTime.MaxValue.Date 的值）。对于美国的时区，Windows Vista 中的注册表定义了两个调整规则：

  • 0001 年 1 月 1 日星期一至 2006 年 12 月 31 日星期日。

  • 2007 年 1 月 1 日星期一至 9999 年 12 月 31 日星期五。

这意味着，尽管注册表中存储的时区调整规则对于执行与当前时区相关的操作很有用，但它们不能可靠地用于检索历史时区信息。要了解如何定义具有多个调整规则的自定义时区，以便在历史时区识别应用程序中使用，请参见如何：创建带有调整规则的时区。 这意味着，尽管注册表中存储的时区调整规则对于执行与当前时区相关的操作很有用，但它们不能可靠地用于检索历史时区信息。要了解如何定义具有多个调整规则的自定义时区，以便在历史时区识别应用程序中使用，请参见如何：创建带有调整规则的时区。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.DateStart 属性

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
DateStart 属性
TimeZoneInfo

获取调整规则的生效日期。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DateStart As DateTime
    Get
public DateTime DateStart { get; }
public:
property DateTime DateStart {
    DateTime get ();
}
member DateStart : DateTime

属性值

类型： System DateTime
一个 DateTime 值，指示调整规则何时生效。

DateStart 属性的值是不包含时间分量的日期值。

创建在无需处理历史时区信息的时区识别应用程序中使用的自定义调整规则时，可将 DateTime.MinValue.Date 分配给 DateEnd 属性。

重要说明 重要事项

除非有充分的理由，否则应将调整规则的开始日期定义为在时区采用标准时间的时间间隔内发生。除非有充分的理由，否则不应将调整规则的开始日期定义为在时区采用夏时制的时间间隔内发生。例如，如果时区从夏时制转换发生在三月的第三个星期日，转换为夏时制发生在十月的第一个星期日，则调整规则的有效开始日期不应为特定年的 1 月 1 日，因为该日期位于夏时制期间内。 除非有充分的理由，否则应将调整规则的开始日期定义为在时区采用标准时间的时间间隔内发生。除非有充分的理由，否则不应将调整规则的开始日期定义为在时区采用夏时制的时间间隔内发生。例如，如果时区从夏时制转换发生在三月的第三个星期日，转换为夏时制发生在十月的第一个星期日，则调整规则的有效开始日期不应为特定年的 1 月 1 日，因为该日期位于夏时制期间内。 除非有充分的理由，否则应将调整规则的开始日期定义为在时区采用标准时间的时间间隔内发生。除非有充分的理由，否则不应将调整规则的开始日期定义为在时区采用夏时制的时间间隔内发生。例如，如果时区从夏时制转换发生在三月的第三个星期日，转换为夏时制发生在十月的第一个星期日，则调整规则的有效开始日期不应为特定年的 1 月 1 日，因为该日期位于夏时制期间内。

默认情况下，Windows XP 中的注册表为每个时区定义一个调整规则，其起始日期为 0001 年 1 月 1 日星期一（DateTime.MinValue.Date 的值）。对于美国的时区，Windows Vista 中的注册表定义了两个调整规则： 默认情况下，Windows XP 中的注册表为每个时区定义一个调整规则，其起始日期为 0001 年 1 月 1 日星期一（DateTime.MinValue.Date 的值）。对于美国的时区，Windows Vista 中的注册表定义了两个调整规则：

  • 0001 年 1 月 1 日星期一至 2006 年 12 月 31 日星期日。

  • 2007 年 1 月 1 日星期一至 9999 年 12 月 31 日星期五。

这意味着，尽管注册表中存储的时区调整规则对于执行与当前时区相关的操作很有用，但它们不能可靠地用于检索历史时区信息。要了解如何定义具有多个调整规则的自定义时区，以便在历史时区识别应用程序中使用，请参见如何：创建带有调整规则的时区。 这意味着，尽管注册表中存储的时区调整规则对于执行与当前时区相关的操作很有用，但它们不能可靠地用于检索历史时区信息。要了解如何定义具有多个调整规则的自定义时区，以便在历史时区识别应用程序中使用，请参见如何：创建带有调整规则的时区。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.DaylightDelta 属性

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
DaylightDelta 属性
TimeZoneInfo

获取形成时区的夏时制所需的时间量。该时间量添加到时区与协调世界时 (UTC) 的偏移量中。 获取形成时区的夏时制所需的时间量。该时间量添加到时区与协调世界时 (UTC) 的偏移量中。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DaylightDelta As TimeSpan
    Get
public TimeSpan DaylightDelta { get; }
public:
property TimeSpan DaylightDelta {
    TimeSpan get ();
}
member DaylightDelta : TimeSpan

属性值

类型： System TimeSpan
一个 TimeSpan 对象，指示作为调整规则的执行结果而添加到标准时间更改中的时间量。

下面的公式定义时区的夏时制：

TimeZoneTime = BaseUtcOffset + DaylightDelta + UtcTime

DaylightDelta 属性的值的范围可从 14 小时到 -14 小时。

说明 说明

DaylightDelta 属性测量时区的标准时间和其夏时制之间的时差。它不适用于时区的标准时间与协调世界时 (UTC) 的偏移量的变化。若要表示已更改其标准时间与 UTC 的偏移量的时区，必须调用 CreateCustomTimeZone 方法来创建新时区。 DaylightDelta 属性测量时区的标准时间和其夏时制之间的时差。它不适用于时区的标准时间与协调世界时 (UTC) 的偏移量的变化。若要表示已更改其标准时间与 UTC 的偏移量的时区，必须调用 CreateCustomTimeZone 方法来创建新时区。 DaylightDelta 属性测量时区的标准时间和其夏时制之间的时差。它不适用于时区的标准时间与协调世界时 (UTC) 的偏移量的变化。若要表示已更改其标准时间与 UTC 的偏移量的时区，必须调用 CreateCustomTimeZone 方法来创建新时区。

DaylightDelta 属性的最常用值为 1.0 小时。夏时制调整规则的应用以一小时为增量增加时区与协调世界时 (UTC) 的偏移量。 DaylightDelta 属性的最常用值为 1.0 小时。夏时制调整规则的应用以一小时为增量增加时区与协调世界时 (UTC) 的偏移量。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.DaylightTransitionEnd 属性

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
DaylightTransitionEnd 属性
TimeZoneInfo

获取有关每年何时从夏时制转换回标准时间的信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DaylightTransitionEnd As TimeZoneInfo..::..TransitionTime
    Get
public TimeZoneInfo..::..TransitionTime DaylightTransitionEnd { get; }
public:
property TimeZoneInfo..::..TransitionTime DaylightTransitionEnd {
    TimeZoneInfo..::..TransitionTime get ();
}
member DaylightTransitionEnd : TimeZoneInfo..::..TransitionTime

属性值

类型： System TimeZoneInfo TransitionTime
一个 TimeZoneInfo..::.TransitionTime 对象，定义每年何时从夏时制转换回时区的标准时间。

DaylightTransitionEnd 属性返回的 TimeZoneInfo..::.TransitionTime 对象定义返回至标准时间的固定日期规则或浮动日期规则。固定日期规则提供转换发生当天的月、日和时间。浮动日期规则提供转换发生当天的月、周、周日期和时间。
DaylightTransitionEnd 属性返回的 TimeZoneInfo..::.TransitionTime 对象定义返回至标准时间的固定日期规则或浮动日期规则。固定日期规则提供转换发生当天的月、日和时间。浮动日期规则提供转换发生当天的月、周、周日期和时间。
DaylightTransitionEnd 属性返回的 TimeZoneInfo..::.TransitionTime 对象定义返回至标准时间的固定日期规则或浮动日期规则。固定日期规则提供转换发生当天的月、日和时间。浮动日期规则提供转换发生当天的月、周、周日期和时间。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.AdjustmentRule ..::.DaylightTransitionStart 属性

TimeZoneInfo
.
.
::
.
AdjustmentRule
.
.
::
.
DaylightTransitionStart 属性
TimeZoneInfo

获取有关每年何时从标准时间转换为夏时制的信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DaylightTransitionStart As TimeZoneInfo..::..TransitionTime
    Get
public TimeZoneInfo..::..TransitionTime DaylightTransitionStart { get; }
public:
property TimeZoneInfo..::..TransitionTime DaylightTransitionStart {
    TimeZoneInfo..::..TransitionTime get ();
}
member DaylightTransitionStart : TimeZoneInfo..::..TransitionTime

属性值

类型： System TimeZoneInfo TransitionTime
一个 TimeZoneInfo..::.TransitionTime 对象，定义每年何时从时区的标准时间转换为夏时制。

DaylightTransitionStart 属性返回的 TimeZoneInfo..::.TransitionTime 对象定义转换为夏时制的固定日期规则或浮动日期规则。固定日期规则提供转换发生当天的月、日和时间。浮动日期规则提供转换发生当天的月、周、周日期和时间。
DaylightTransitionStart 属性返回的 TimeZoneInfo..::.TransitionTime 对象定义转换为夏时制的固定日期规则或浮动日期规则。固定日期规则提供转换发生当天的月、日和时间。浮动日期规则提供转换发生当天的月、周、周日期和时间。
DaylightTransitionStart 属性返回的 TimeZoneInfo..::.TransitionTime 对象定义转换为夏时制的固定日期规则或浮动日期规则。固定日期规则提供转换发生当天的月、日和时间。浮动日期规则提供转换发生当天的月、周、周日期和时间。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo AdjustmentRule 类
TimeZoneInfo AdjustmentRule 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime 结构

TimeZoneInfo
.
.
::
.
TransitionTime 结构
TimeZoneInfo 类 成员

提供有关特定时区中特定时间更改（例如从夏时制更改为标准时间，或者从标准时间更改为夏时制）的信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Structure TransitionTime _
    Implements IEquatable(Of TimeZoneInfo..::..TransitionTime), ISerializable,  _
    IDeserializationCallback
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public struct TransitionTime : IEquatable<TimeZoneInfo..::..TransitionTime>,
    ISerializable, IDeserializationCallback
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public value class TransitionTime : IEquatable<TimeZoneInfo..::..TransitionTime>,
    ISerializable, IDeserializationCallback
[<SealedAttribute>]
[<SerializableAttribute>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type TransitionTime =
    struct
        interface IEquatable<TimeZoneInfo..::..TransitionTime>
        interface ISerializable
        interface IDeserializationCallback
    end

可以使用 TimeZoneInfo..::.TransitionTime 结构指示从标准时间转换为夏时制或者从夏时制转换回标准时间的时间。此结构支持固定日期规则和浮动日期规则。对于在特定月份的特定一天发生的时间转换，使用固定日期规则（如凌晨 2:00在 11 月 3 日）。对于在特定月份、特定星期的特定一天发生的时间转换，使用浮动日期规则（如凌晨 2:00在 11 月的第一个星期日。 可以使用 TimeZoneInfo..::.TransitionTime 结构指示从标准时间转换为夏时制或者从夏时制转换回标准时间的时间。此结构支持固定日期规则和浮动日期规则。对于在特定月份的特定一天发生的时间转换，使用固定日期规则（如凌晨 2:00在 11 月 3 日）。对于在特定月份、特定星期的特定一天发生的时间转换，使用浮动日期规则（如凌晨 2:00在 11 月的第一个星期日。 可以使用 TimeZoneInfo..::.TransitionTime 结构指示从标准时间转换为夏时制或者从夏时制转换回标准时间的时间。此结构支持固定日期规则和浮动日期规则。对于在特定月份的特定一天发生的时间转换，使用固定日期规则（如凌晨 2:00在 11 月 3 日）。对于在特定月份、特定星期的特定一天发生的时间转换，使用浮动日期规则（如凌晨 2:00在 11 月的第一个星期日。 可以使用 TimeZoneInfo..::.TransitionTime 结构指示从标准时间转换为夏时制或者从夏时制转换回标准时间的时间。此结构支持固定日期规则和浮动日期规则。对于在特定月份的特定一天发生的时间转换，使用固定日期规则（如凌晨 2:00在 11 月 3 日）。对于在特定月份、特定星期的特定一天发生的时间转换，使用浮动日期规则（如凌晨 2:00在 11 月的第一个星期日。 可以使用 TimeZoneInfo..::.TransitionTime 结构指示从标准时间转换为夏时制或者从夏时制转换回标准时间的时间。此结构支持固定日期规则和浮动日期规则。对于在特定月份的特定一天发生的时间转换，使用固定日期规则（如凌晨 2:00在 11 月 3 日）。对于在特定月份、特定星期的特定一天发生的时间转换，使用浮动日期规则（如凌晨 2:00在 11 月的第一个星期日。 可以使用 TimeZoneInfo..::.TransitionTime 结构指示从标准时间转换为夏时制或者从夏时制转换回标准时间的时间。此结构支持固定日期规则和浮动日期规则。对于在特定月份的特定一天发生的时间转换，使用固定日期规则（如凌晨 2:00在 11 月 3 日）。对于在特定月份、特定星期的特定一天发生的时间转换，使用浮动日期规则（如凌晨 2:00在 11 月的第一个星期日。

说明 说明

TimeZoneInfo..::.TransitionTime 结构的实例是不可变的。一旦创建了对象，就不能修改其值。 TimeZoneInfo..::.TransitionTime 结构的实例是不可变的。一旦创建了对象，就不能修改其值。

可通过调用 static（在 Visual Basic 中为 Shared）CreateFixedDateRule 和 CreateFloatingDateRule 方法分别创建固定或浮动日期规则来创建 TimeZoneInfo..::.TransitionTime 对象。开始和结束 TimeZoneInfo..::.TransitionTime 对象随后作为参数提供给 CreateAdjustmentRule 方法，以创建包括此转换时间信息的新调整规则。 可通过调用 static（在 Visual Basic 中为 Shared）CreateFixedDateRule 和 CreateFloatingDateRule 方法分别创建固定或浮动日期规则来创建 TimeZoneInfo..::.TransitionTime 对象。开始和结束 TimeZoneInfo..::.TransitionTime 对象随后作为参数提供给 CreateAdjustmentRule 方法，以创建包括此转换时间信息的新调整规则。

TimeZoneInfo..::.AdjustmentRule 对象的 DaylightTransitionStart 和 DaylightTransitionEnd 属性返回 TimeZoneInfo..::.TransitionTime 对象。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime 成员

TimeZoneInfo
.
.
::
.
TransitionTime 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo

提供有关特定时区中特定时间更改（例如从夏时制更改为标准时间，或者从标准时间更改为夏时制）的信息。

TimeZoneInfo TransitionTime 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TimeZoneInfo TransitionTime 结构
System 命名空间


TimeZoneInfo ..::.TransitionTime 方法

TimeZoneInfo
.
.
::
.
TransitionTime 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo

TimeZoneInfo TransitionTime 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

TimeZoneInfo TransitionTime 结构
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.CreateFixedDateRule 方法

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
CreateFixedDateRule 方法
TimeZoneInfo

定义使用固定日期规则的时间更改。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateFixedDateRule ( _
    timeOfDay As DateTime, _
    month As Integer, _
    day As Integer _
) As TimeZoneInfo..::..TransitionTime
public static TimeZoneInfo..::..TransitionTime CreateFixedDateRule(
    DateTime timeOfDay,
    int month,
    int day
)
public:
static TimeZoneInfo..::..TransitionTime CreateFixedDateRule(
    DateTime timeOfDay,
    int month,
    int day
)
static member CreateFixedDateRule :
        timeOfDay:DateTime *
        month:int *
        day:int -> TimeZoneInfo..::..TransitionTime

参数

timeOfDay
类型： System DateTime
发生时间更改的时间。
month
类型： System Int32
发生时间更改的月份。
day
类型： System Int32
发生时间更改的月份的日期。

返回值

类型： System TimeZoneInfo TransitionTime
有关时间更改的数据。
异常 | 条件
ArgumentException | timeOfDay 参数具有非默认的日期部分。 - 或 - timeOfDay 参数的 Kind 属性不是 DateTimeKind..::.Unspecified。 - 或 - timeOfDay 参数不表示整毫秒数。
ArgumentOutOfRangeException | month 参数小于 1 或大于 12。 - 或 - day 参数小于 1 或大于 31。

此方法创建固定日期规则（即，发生在特定月份的特定日期的时间更改）。例如，总是在 10 月 28 日发生的时间更改遵循固定日期规则。 此方法创建固定日期规则（即，发生在特定月份的特定日期的时间更改）。例如，总是在 10 月 28 日发生的时间更改遵循固定日期规则。

下表指示 CreateFixedDateRule 方法的参数如何对应于 TimeZoneInfo..::.TransitionTime 对象的属性。

CreateFloatingDateRule 参数 | TransitionTime 属性
timeOfDay | TimeOfDay
month | Month
day | Day

下面的示例使用固定日期规则和浮动日期规则，来创建虚构时区的时区转换。固定日期规则定义了凌晨 2:00 开始的时区调整在 3 月 15 日，结束于凌晨 3:00。在 1900 年到 1955 年的 11 月 15 日。 下面的示例使用固定日期规则和浮动日期规则，来创建虚构时区的时区转换。固定日期规则定义了凌晨 2:00 开始的时区调整在 3 月 15 日，结束于凌晨 3:00。在 1900 年到 1955 年的 11 月 15 日。 下面的示例使用固定日期规则和浮动日期规则，来创建虚构时区的时区转换。固定日期规则定义了凌晨 2:00 开始的时区调整在 3 月 15 日，结束于凌晨 3:00。在 1900 年到 1955 年的 11 月 15 日。 下面的示例使用固定日期规则和浮动日期规则，来创建虚构时区的时区转换。固定日期规则定义了凌晨 2:00 开始的时区调整在 3 月 15 日，结束于凌晨 3:00。在 1900 年到 1955 年的 11 月 15 日。

' Declare necessary TimeZoneInfo.AdjustmentRule objects for time zone
Dim imaginaryTZ As TimeZoneInfo
Dim delta As New TimeSpan(1, 0, 0)
Dim adjustment As TimeZoneInfo.AdjustmentRule
Dim adjustmentList As New List(Of TimeZoneInfo.AdjustmentRule)
' Declare transition time variables to hold transition time information
Dim transitionRuleStart, transitionRuleEnd As TimeZoneInfo.TransitionTime

' Define a fictitious new time zone consisting of fixed and floating adjustment rules
' Define fixed rule (for 1900-1955)
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule(#2:00:00AM#, 3, 15)
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule(#3:00:00AM#, 11, 15)
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#1/1/1900#, #12/31/1955#, delta, _
             transitionRuleStart, transitionRuleEnd)
adjustmentList.Add(adjustment)
' Define floating rule (for 1956- )
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00AM#, 3, 5, DayOfWeek.Sunday)
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#03:00:00AM#, 10, 4, DayOfWeek.Sunday)
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#01/01/1956#, Date.MaxValue.Date, delta, transitionRuleStart, transitionRuleEnd)
adjustmentList.Add(adjustment)

' Create fictitious time zone
imaginaryTZ = TimeZoneInfo.CreateCustomTimeZone("Fictitious Standard Time", New TimeSpan(-9, 0, 0), _
                "(GMT-09:00) Fictitious Time", "Fictitious Standard Time", _
                "Fictitious Daylight Time", adjustmentList.ToArray())

// Declare necessary TimeZoneInfo.AdjustmentRule objects for time zone
TimeZoneInfo imaginaryTZ;
TimeSpan delta = new TimeSpan(1, 0, 0);
TimeZoneInfo.AdjustmentRule adjustment;
List<TimeZoneInfo.AdjustmentRule> adjustmentList = new List<TimeZoneInfo.AdjustmentRule>();
// Declare transition time variables to hold transition time information
TimeZoneInfo.TransitionTime transitionRuleStart, transitionRuleEnd;

// Define a fictitious new time zone consisting of fixed and floating adjustment rules
// Define fixed rule (for 1900-1955)
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 2, 0, 0), 3, 15);
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 3, 0, 0), 11, 15);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1900, 1, 1), new DateTime(1955, 12, 31),
             delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);
// Define floating rule (for 1956- )
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 3, 5, DayOfWeek.Sunday);
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 10, 4, DayOfWeek.Sunday);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1956, 1, 1), DateTime.MaxValue.Date, delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);

// Create fictitious time zone
imaginaryTZ = TimeZoneInfo.CreateCustomTimeZone("Fictitious Standard Time", new TimeSpan(-9, 0, 0),
                "(GMT-09:00) Fictitious Time", "Fictitious Standard Time",
                "Fictitious Daylight Time", adjustmentList.ToArray());

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.CreateFloatingDateRule 方法

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
CreateFloatingDateRule 方法
TimeZoneInfo

定义使用浮动日期规则的时间更改。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function CreateFloatingDateRule ( _
    timeOfDay As DateTime, _
    month As Integer, _
    week As Integer, _
    dayOfWeek As DayOfWeek _
) As TimeZoneInfo..::..TransitionTime
public static TimeZoneInfo..::..TransitionTime CreateFloatingDateRule(
    DateTime timeOfDay,
    int month,
    int week,
    DayOfWeek dayOfWeek
)
public:
static TimeZoneInfo..::..TransitionTime CreateFloatingDateRule(
    DateTime timeOfDay,
    int month,
    int week,
    DayOfWeek dayOfWeek
)
static member CreateFloatingDateRule :
        timeOfDay:DateTime *
        month:int *
        week:int *
        dayOfWeek:DayOfWeek -> TimeZoneInfo..::..TransitionTime

参数

timeOfDay
类型： System DateTime
发生时间更改的时间。
month
类型： System Int32
发生时间更改的月份。
week
类型： System Int32
发生时间更改的月份的第几个星期。
dayOfWeek
类型： System DayOfWeek
发生时间更改的星期几。

返回值

类型： System TimeZoneInfo TransitionTime
有关时间更改的数据。
异常 | 条件
ArgumentException | timeOfDay 参数具有非默认的日期部分。 - 或 - timeOfDay 参数不表示整毫秒数。 - 或 - timeOfDay 参数的 Kind 属性不是 DateTimeKind..::.Unspecified。
ArgumentOutOfRangeException | month 小于 1 或大于 12。 - 或 - week 小于 1 或大于 5。 - 或 - dayOfWeek 参数不是 DayOfWeek 枚举的成员。

此方法创建浮动日期规则（即，发生在特定月份的特定星期的特定星期几的时间更改）。例如，10 月的最后一个星期日发生的时间更改遵循浮动日期规则。 此方法创建浮动日期规则（即，发生在特定月份的特定星期的特定星期几的时间更改）。例如，10 月的最后一个星期日发生的时间更改遵循浮动日期规则。

下表指示 CreateFloatingDateRule 方法的参数如何对应于 TimeZoneInfo..::.TransitionTime 对象的属性。

CreateFloatingDateRule 参数 | TransitionTime 属性
timeOfDay | TimeOfDay
month | Month
week | Week
dayOfWeek | DayOfWeek

下面的示例使用固定日期规则和浮动日期规则，来创建虚构时区的时区转换。浮动日期规则定义了凌晨 2:00 开始的时区调整在 3 月的最后一个星期日，结束于凌晨 3:00。在 1956 年以后的 10 月的第四个星期日。 下面的示例使用固定日期规则和浮动日期规则，来创建虚构时区的时区转换。浮动日期规则定义了凌晨 2:00 开始的时区调整在 3 月的最后一个星期日，结束于凌晨 3:00。在 1956 年以后的 10 月的第四个星期日。 下面的示例使用固定日期规则和浮动日期规则，来创建虚构时区的时区转换。浮动日期规则定义了凌晨 2:00 开始的时区调整在 3 月的最后一个星期日，结束于凌晨 3:00。在 1956 年以后的 10 月的第四个星期日。 下面的示例使用固定日期规则和浮动日期规则，来创建虚构时区的时区转换。浮动日期规则定义了凌晨 2:00 开始的时区调整在 3 月的最后一个星期日，结束于凌晨 3:00。在 1956 年以后的 10 月的第四个星期日。

' Declare necessary TimeZoneInfo.AdjustmentRule objects for time zone
Dim imaginaryTZ As TimeZoneInfo
Dim delta As New TimeSpan(1, 0, 0)
Dim adjustment As TimeZoneInfo.AdjustmentRule
Dim adjustmentList As New List(Of TimeZoneInfo.AdjustmentRule)
' Declare transition time variables to hold transition time information
Dim transitionRuleStart, transitionRuleEnd As TimeZoneInfo.TransitionTime

' Define a fictitious new time zone consisting of fixed and floating adjustment rules
' Define fixed rule (for 1900-1955)
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule(#2:00:00AM#, 3, 15)
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule(#3:00:00AM#, 11, 15)
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#1/1/1900#, #12/31/1955#, delta, _
             transitionRuleStart, transitionRuleEnd)
adjustmentList.Add(adjustment)
' Define floating rule (for 1956- )
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00AM#, 3, 5, DayOfWeek.Sunday)
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#03:00:00AM#, 10, 4, DayOfWeek.Sunday)
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#01/01/1956#, Date.MaxValue.Date, delta, transitionRuleStart, transitionRuleEnd)
adjustmentList.Add(adjustment)

' Create fictitious time zone
imaginaryTZ = TimeZoneInfo.CreateCustomTimeZone("Fictitious Standard Time", New TimeSpan(-9, 0, 0), _
                "(GMT-09:00) Fictitious Time", "Fictitious Standard Time", _
                "Fictitious Daylight Time", adjustmentList.ToArray())

// Declare necessary TimeZoneInfo.AdjustmentRule objects for time zone
TimeZoneInfo imaginaryTZ;
TimeSpan delta = new TimeSpan(1, 0, 0);
TimeZoneInfo.AdjustmentRule adjustment;
List<TimeZoneInfo.AdjustmentRule> adjustmentList = new List<TimeZoneInfo.AdjustmentRule>();
// Declare transition time variables to hold transition time information
TimeZoneInfo.TransitionTime transitionRuleStart, transitionRuleEnd;

// Define a fictitious new time zone consisting of fixed and floating adjustment rules
// Define fixed rule (for 1900-1955)
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 2, 0, 0), 3, 15);
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 3, 0, 0), 11, 15);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1900, 1, 1), new DateTime(1955, 12, 31),
             delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);
// Define floating rule (for 1956- )
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 3, 5, DayOfWeek.Sunday);
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 10, 4, DayOfWeek.Sunday);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1956, 1, 1), DateTime.MaxValue.Date, delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);

// Create fictitious time zone
imaginaryTZ = TimeZoneInfo.CreateCustomTimeZone("Fictitious Standard Time", new TimeSpan(-9, 0, 0),
                "(GMT-09:00) Fictitious Time", "Fictitious Standard Time",
                "Fictitious Daylight Time", adjustmentList.ToArray());

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.Equals 方法

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo

确定两个 TimeZoneInfo..::.TransitionTime 对象是否具有相同的值。

名称 说明
页首

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.Equals 方法 (Object)

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
Equals 方法 (Object)
TimeZoneInfo

确定一个对象与当前的 TimeZoneInfo..::.TransitionTime 对象是否具有相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
将与当前的 TimeZoneInfo..::.TransitionTime 对象进行比较的对象。

返回值

类型： System Boolean
如果两个对象相等，则为 true；否则为 false。

相等性定义如下：obj 参数必须为 TimeZoneInfo..::.TransitionTime 对象，并且必须具有与当前的 TimeZoneInfo..::.TransitionTime 对象相同的属性值。

下面的示例演示了对 Equals 方法的调用。

Dim tt1 As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFixedDateRule(#02:00:00AM#, 11, 03)
Dim tt2 As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFixedDateRule(#02:00:00AM#, 11, 03)
Dim tt3 As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00AM#, 10, 05, DayOfWeek.Sunday)
Dim tz As TimeZoneInfo = TimeZoneInfo.Local
Console.WriteLine(tt1.Equals(tz))          ' Returns False (overload with argument of type Object)
Console.WriteLine(tt1.Equals(tt1))         ' Returns True (an object always equals itself)
Console.WriteLine(tt1.Equals(tt2))         ' Returns True (identical property values)
Console.WriteLine(tt1.Equals(tt3))         ' Returns False (different property values)

TimeZoneInfo.TransitionTime tt1 = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 02, 00, 00), 11, 03);
TimeZoneInfo.TransitionTime tt2 = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 02, 00, 00), 11, 03);
TimeZoneInfo.TransitionTime tt3 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 02, 00, 00), 10, 05, DayOfWeek.Sunday);
TimeZoneInfo tz = TimeZoneInfo.Local;
Console.WriteLine(tt1.Equals(tz));         // Returns False (overload with argument of type Object)
Console.WriteLine(tt1.Equals(tt1));        // Returns True (an object always equals itself)
Console.WriteLine(tt1.Equals(tt2));        // Returns True (identical property values)
Console.WriteLine(tt1.Equals(tt3));        // Returns False (different property values)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
Equals 重载
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.Equals 方法 (TimeZoneInfo ..::.TransitionTime)

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
Equals 方法 (TimeZoneInfo
.
.
::
.
TransitionTime)
TimeZoneInfo

确定当前的 TimeZoneInfo..::.TransitionTime 对象与另一个 TimeZoneInfo..::.TransitionTime 对象是否具有相同的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    other As TimeZoneInfo..::..TransitionTime _
) As Boolean
public bool Equals(
    TimeZoneInfo..::..TransitionTime other
)
public:
virtual bool Equals(
    TimeZoneInfo..::..TransitionTime other
) sealed
abstract Equals :
        other:TimeZoneInfo..::..TransitionTime -> bool
override Equals :
        other:TimeZoneInfo..::..TransitionTime -> bool

参数

other
类型： System TimeZoneInfo TransitionTime
要与当前实例进行比较的对象。

返回值

类型： System Boolean
如果这两个对象具有相同的属性值，则为 true；否则为 false。

实现

为确定两个 TimeZoneInfo..::.TransitionTime 对象是否相等，此方法将对属性进行逐个比较。在针对当前的 TimeZoneInfo..::.TransitionTime 对象与 other 对象进行比较时，仅当这两个 TimeZoneInfo..::.TransitionTime 对象的全部六个属性值都相同时，该方法才返回 true。 为确定两个 TimeZoneInfo..::.TransitionTime 对象是否相等，此方法将对属性进行逐个比较。在针对当前的 TimeZoneInfo..::.TransitionTime 对象与 other 对象进行比较时，仅当这两个 TimeZoneInfo..::.TransitionTime 对象的全部六个属性值都相同时，该方法才返回 true。

下面的示例演示了对 Equals 方法的调用。

Dim tt1 As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFixedDateRule(#02:00:00AM#, 11, 03)
Dim tt2 As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFixedDateRule(#02:00:00AM#, 11, 03)
Dim tt3 As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00AM#, 10, 05, DayOfWeek.Sunday)
Console.WriteLine(tt1.Equals(tt1))         ' Returns True (an object always equals itself)
Console.WriteLine(tt1.Equals(tt2))         ' Returns True (identical property values)
Console.WriteLine(tt1.Equals(tt3))         ' Returns False (different property values)

TimeZoneInfo.TransitionTime tt1 = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 02, 00, 00), 11, 03);
TimeZoneInfo.TransitionTime tt2 = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 02, 00, 00), 11, 03);
TimeZoneInfo.TransitionTime tt3 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 02, 00, 00), 10, 05, DayOfWeek.Sunday);
Console.WriteLine(tt1.Equals(tt1));        // Returns True (an object always equals itself)
Console.WriteLine(tt1.Equals(tt2));        // Returns True (identical property values)
Console.WriteLine(tt1.Equals(tt3));        // Returns False (different property values)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
Equals 重载
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.GetHashCode 方法

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
GetHashCode 方法
TimeZoneInfo

用作哈希算法的哈希函数和数据结构（如哈希表）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
一个 32 位有符号整数，作为此 TimeZoneInfo..::.TransitionTime 对象的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.IDeserializationCallback ..::.OnDeserialization 方法

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
IDeserializationCallback
.
.
::
.
OnDeserialization 方法
TimeZoneInfo

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

在对象的反序列化完成时运行。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub OnDeserialization ( _
    sender As Object _
) Implements IDeserializationCallback.OnDeserialization
void IDeserializationCallback.OnDeserialization(
    Object sender
)
private:
virtual void OnDeserialization(
    Object^ sender
) sealed = IDeserializationCallback::OnDeserialization
private abstract OnDeserialization :
        sender:Object -> unit
private override OnDeserialization :
        sender:Object -> unit

参数

sender
类型： System Object
开始回调的对象。当前未实现该参数的功能。 开始回调的对象。当前未实现该参数的功能。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.ISerializable ..::.GetObjectData 方法

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
TimeZoneInfo

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

使用序列化 SerializationInfo 对象所需的数据填充该对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
private:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
private override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要用数据填充的 SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
此序列化的目标（请参见 StreamingContext）。

实现

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime 运算符

TimeZoneInfo
.
.
::
.
TransitionTime 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo

TimeZoneInfo TransitionTime 类型公开以下成员。

名称 说明
页首

参考

TimeZoneInfo TransitionTime 结构
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.Equality 运算符

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
Equality 运算符
TimeZoneInfo

确定两个指定的 TimeZoneInfo..::.TransitionTime 对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    t1 As TimeZoneInfo..::..TransitionTime, _
    t2 As TimeZoneInfo..::..TransitionTime _
) As Boolean
public static bool operator ==(
    TimeZoneInfo..::..TransitionTime t1,
    TimeZoneInfo..::..TransitionTime t2
)
public:
static bool operator ==(
    TimeZoneInfo..::..TransitionTime t1,
    TimeZoneInfo..::..TransitionTime t2
)
static let inline (=)
        t1:TimeZoneInfo..::..TransitionTime *
        t2:TimeZoneInfo..::..TransitionTime  : bool

参数

t1
类型： System TimeZoneInfo TransitionTime
要比较的第一个对象。
t2
类型： System TimeZoneInfo TransitionTime
要比较的第二个对象。

返回值

类型： System Boolean
如果 t1 和 t2 具有相同的值，则为 true；否则为 false。

如果两个 TimeZoneInfo..::.TransitionTime 对象的所有六个属性值相同，则这两个对象相等；否则为不相等。 如果两个 TimeZoneInfo..::.TransitionTime 对象的所有六个属性值相同，则这两个对象相等；否则为不相等。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.Inequality 运算符

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
Inequality 运算符
TimeZoneInfo

确定两个指定的 TimeZoneInfo..::.TransitionTime 对象是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    t1 As TimeZoneInfo..::..TransitionTime, _
    t2 As TimeZoneInfo..::..TransitionTime _
) As Boolean
public static bool operator !=(
    TimeZoneInfo..::..TransitionTime t1,
    TimeZoneInfo..::..TransitionTime t2
)
public:
static bool operator !=(
    TimeZoneInfo..::..TransitionTime t1,
    TimeZoneInfo..::..TransitionTime t2
)
static let inline (<>)
        t1:TimeZoneInfo..::..TransitionTime *
        t2:TimeZoneInfo..::..TransitionTime  : bool

参数

t1
类型： System TimeZoneInfo TransitionTime
要比较的第一个对象。
t2
类型： System TimeZoneInfo TransitionTime
要比较的第二个对象。

返回值

类型： System Boolean
如果 t1 和 t2 具有任何不同的成员值，则为 true；否则为 false。

如果两个 TimeZoneInfo..::.TransitionTime 对象针对其六个属性中的任意一个具有不同的值，则这两个对象不相等；否则为相等。 如果两个 TimeZoneInfo..::.TransitionTime 对象针对其六个属性中的任意一个具有不同的值，则这两个对象不相等；否则为相等。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime 属性

TimeZoneInfo
.
.
::
.
TransitionTime 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneInfo

TimeZoneInfo TransitionTime 类型公开以下成员。

名称 说明
页首

参考

TimeZoneInfo TransitionTime 结构
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.Day 属性

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
Day 属性
TimeZoneInfo

获取发生时间更改的那一天。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Day As Integer
    Get
public int Day { get; }
public:
property int Day {
    int get ();
}
member Day : int

属性值

类型： System Int32
发生时间更改的那一天。

仅当 IsFixedDateRule 属性为 true 时，Day 属性才返回有效值。

Day 属性值对应于 CreateFixedDateRule 方法的 day 参数值。如果该值大于发生转换的月份的天数，则在该月的最后一天发生转换。 Day 属性值对应于 CreateFixedDateRule 方法的 day 参数值。如果该值大于发生转换的月份的天数，则在该月的最后一天发生转换。

Day 属性指示应用固定日期规则的月中的日期（例如 4 月 15 日）。相比而言，DayOfWeek 属性指示应用浮动日期规则的周中的天（例如 11 月的第二个周日）。 Day 属性指示应用固定日期规则的月中的日期（例如 4 月 15 日）。相比而言，DayOfWeek 属性指示应用浮动日期规则的周中的天（例如 11 月的第二个周日）。

下面的示例枚举在本地计算机上找到的时区，并显示所有固定日期转换的转换时间信息。时间信息包括发生时间更改的那一天。 下面的示例枚举在本地计算机上找到的时区，并显示所有固定日期转换的转换时间信息。时间信息包括发生时间更改的那一天。

Private Sub GetFixedTransitionTimes()
   Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
   For Each zone As TimeZoneInfo In timeZones
      Dim adjustmentRules() As TimeZoneInfo.AdjustmentRule = zone.GetAdjustmentRules()
      For Each adjustmentRule As TimeZoneInfo.AdjustmentRule in adjustmentRules
         Dim daylightStart As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionStart
         If daylightStart.IsFixedDateRule Then
            Console.WriteLine("For {0}, daylight savings time begins at {1:t} on {2} {3} from {4:d} to {5:d}.", _
                              zone.StandardName, _
                              daylightStart.TimeOfDay, _
                              MonthName(daylightStart.Month), _
                              daylightStart.Day, _
                              adjustmentRule.DateStart, _
                              adjustmentRule.DateEnd)
         End If
         Dim daylightEnd As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionEnd
         If daylightEnd.IsFixedDateRule Then
            Console.WriteLine("For {0}, daylight savings time ends at {1:t} on {2} {3} from {4:d} to {5:d}.", _
                              zone.StandardName, _
                              daylightEnd.TimeOfDay, _
                              MonthName(daylightEnd.Month), _
                              daylightEnd.Day, _
                              adjustmentRule.DateStart, _
                              adjustmentRule.DateEnd)
         End If
      Next
   Next
End Sub

private void GetFixedTransitionTimes()
{
   ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
   DateTimeFormatInfo dateInfo = CultureInfo.CurrentCulture.DateTimeFormat;
   foreach (TimeZoneInfo zone in timeZones)
   {
      TimeZoneInfo.AdjustmentRule[] adjustmentRules = zone.GetAdjustmentRules();
      foreach (TimeZoneInfo.AdjustmentRule adjustmentRule in adjustmentRules)
      {
         TimeZoneInfo.TransitionTime daylightStart = adjustmentRule.DaylightTransitionStart;
         if (daylightStart.IsFixedDateRule)
            Console.WriteLine("For {0}, daylight savings time begins at {1:t} on {2} {3} from {4:d} to {5:d}.",
                              zone.StandardName,
                              daylightStart.TimeOfDay,
                              dateInfo.GetMonthName(daylightStart.Month),
                              daylightStart.Day,
                              adjustmentRule.DateStart,
                              adjustmentRule.DateEnd);
         TimeZoneInfo.TransitionTime daylightEnd = adjustmentRule.DaylightTransitionEnd;
         if (daylightEnd.IsFixedDateRule)
            Console.WriteLine("For {0}, daylight savings time ends at {1:t} on {2} {3} from {4:d} to {5:d}.",
                              zone.StandardName,
                              daylightEnd.TimeOfDay,
                              dateInfo.GetMonthName(daylightEnd.Month),
                              daylightEnd.Day,
                              adjustmentRule.DateStart,
                              adjustmentRule.DateEnd);
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.DayOfWeek 属性

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
DayOfWeek 属性
TimeZoneInfo

获取发生时间更改的星期几。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property DayOfWeek As DayOfWeek
    Get
public DayOfWeek DayOfWeek { get; }
public:
property DayOfWeek DayOfWeek {
    DayOfWeek get ();
}
member DayOfWeek : DayOfWeek

属性值

类型： System DayOfWeek
发生时间更改的星期几。

仅当 IsFixedDateRule 属性为 false 时，DayOfWeek 属性才返回有效值。

DayOfWeek 属性指示应用浮动日期规则的周中的天（例如 11 月的第二个周日）。相比而言，Day 属性指示应用固定日期规则的月中的日期（例如 4 月 15 日）。 DayOfWeek 属性指示应用浮动日期规则的周中的天（例如 11 月的第二个周日）。相比而言，Day 属性指示应用固定日期规则的月中的日期（例如 4 月 15 日）。

下面的示例枚举在本地计算机上找到的时区，并显示所有浮动日期转换的转换时间信息。时间信息包括发生时间更改的星期几。 下面的示例枚举在本地计算机上找到的时区，并显示所有浮动日期转换的转换时间信息。时间信息包括发生时间更改的星期几。

Private Enum WeekOfMonth As Integer
   First = 1
   Second = 2
   Third = 3
   Fourth = 4
   Last = 5
End Enum

Private Sub GetFloatingTransitionTimes()
   Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
   For Each zone As TimeZoneInfo In timeZones
      Dim adjustmentRules() As TimeZoneInfo.AdjustmentRule = zone.GetAdjustmentRules()
      For Each adjustmentRule As TimeZoneInfo.AdjustmentRule in adjustmentRules
         Dim daylightStart As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionStart
         If Not daylightStart.IsFixedDateRule Then
            Console.WriteLine("{0}, {1:d}-{2:d}: Begins at {3:t} on the {4} {5} of {6}.", _
                              zone.StandardName, _
                              adjustmentRule.DateStart, _
                              adjustmentRule.DateEnd, _
                              daylightStart.TimeOfDay, _
                              CType(daylightStart.Week, WeekOfMonth).ToString(), _
                              daylightStart.DayOfWeek.ToString(), _
                              MonthName(daylightStart.Month))
         End If
         Dim daylightEnd As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionEnd
         If Not daylightEnd.IsFixedDateRule Then
            Console.WriteLine("{0}, {1:d}-{2:d}: Ends at {3:t} on the {4} {5} of {6}.", _
                              zone.StandardName, _
                              adjustmentRule.DateStart, _
                              adjustmentRule.DateEnd, _
                              daylightEnd.TimeOfDay, _
                              CType(daylightEnd.Week, WeekOfMonth).ToString(), _
                              daylightEnd.DayOfWeek.ToString(), _
                              MonthName(daylightEnd.Month))
         End If
      Next
   Next
End Sub

private enum WeekOfMonth
{
   First = 1,
   Second = 2,
   Third = 3,
   Fourth = 4,
   Last = 5
}

private void GetFloatingTransitionTimes()
{
   ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
   foreach (TimeZoneInfo zone in timeZones)
   {
      TimeZoneInfo.AdjustmentRule[] adjustmentRules = zone.GetAdjustmentRules();
      DateTimeFormatInfo dateInfo = CultureInfo.CurrentCulture.DateTimeFormat;
      foreach (TimeZoneInfo.AdjustmentRule adjustmentRule in adjustmentRules)
      {
         TimeZoneInfo.TransitionTime daylightStart = adjustmentRule.DaylightTransitionStart;
         if (! daylightStart.IsFixedDateRule)
            Console.WriteLine("{0}, {1:d}-{2:d}: Begins at {3:t} on the {4} {5} of {6}.",
                              zone.StandardName,
                              adjustmentRule.DateStart,
                              adjustmentRule.DateEnd,
                              daylightStart.TimeOfDay,
                              ((WeekOfMonth)daylightStart.Week).ToString(),
                              daylightStart.DayOfWeek.ToString(),
                              dateInfo.GetMonthName(daylightStart.Month));

         TimeZoneInfo.TransitionTime daylightEnd = adjustmentRule.DaylightTransitionEnd;
         if (! daylightEnd.IsFixedDateRule)
            Console.WriteLine("{0}, {1:d}-{2:d}: Ends at {3:t} on the {4} {5} of {6}.",
                              zone.StandardName,
                              adjustmentRule.DateStart,
                              adjustmentRule.DateEnd,
                              daylightEnd.TimeOfDay,
                              ((WeekOfMonth)daylightEnd.Week).ToString(),
                              daylightEnd.DayOfWeek.ToString(),
                              dateInfo.GetMonthName(daylightEnd.Month));
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.IsFixedDateRule 属性

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
IsFixedDateRule 属性
TimeZoneInfo

获取一个值，该值指示是在固定日期和时间（如 11 月 1 日）还是在浮动日期和时间（如 10 月的最后一个星期日）发生时间更改。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsFixedDateRule As Boolean
    Get
public bool IsFixedDateRule { get; }
public:
property bool IsFixedDateRule {
    bool get ();
}
member IsFixedDateRule : bool

属性值

类型： System Boolean
如果时间更改规则为固定日期，则为 true；如果时间更改规则为浮动日期，则为 false。

固定日期规则指示每年中在应用调整规则的同一日期和时间发生转换。例如，每年 11 月 3 日发生的时间更改遵循固定日期规则。浮动日期规则指示每年中在应用调整规则的特定月份的特定星期的特定一天发生转换。例如，11 月的第一个星期日发生的时间更改遵循浮动日期规则。 固定日期规则指示每年中在应用调整规则的同一日期和时间发生转换。例如，每年 11 月 3 日发生的时间更改遵循固定日期规则。浮动日期规则指示每年中在应用调整规则的特定月份的特定星期的特定一天发生转换。例如，11 月的第一个星期日发生的时间更改遵循浮动日期规则。 固定日期规则指示每年中在应用调整规则的同一日期和时间发生转换。例如，每年 11 月 3 日发生的时间更改遵循固定日期规则。浮动日期规则指示每年中在应用调整规则的特定月份的特定星期的特定一天发生转换。例如，11 月的第一个星期日发生的时间更改遵循浮动日期规则。 固定日期规则指示每年中在应用调整规则的同一日期和时间发生转换。例如，每年 11 月 3 日发生的时间更改遵循固定日期规则。浮动日期规则指示每年中在应用调整规则的特定月份的特定星期的特定一天发生转换。例如，11 月的第一个星期日发生的时间更改遵循浮动日期规则。

IsFixedDateRule 属性值确定 TimeZoneInfo..::.TransitionTime 对象的哪些属性具有有效值。下表指示哪些属性受 IsFixedDateRule 属性值的影响。 IsFixedDateRule 属性值确定 TimeZoneInfo..::.TransitionTime 对象的哪些属性具有有效值。下表指示哪些属性受 IsFixedDateRule 属性值的影响。

TransitionTime 属性 | IsFixedDateRule = true | IsFixedDateRule = false
Day | 有效 | 未使用
DayOfWeek | 未使用 | 有效
Week | 未使用 | 有效
Month | 有效 | 有效
TimeOfDay | 有效 | 有效

下面的示例列出本地系统上可用的所有时区与夏时制相互转换的时间。对于具有固定日期规则的时区，该示例通过 TimeZoneInfo..::.TransitionTime 对象的属性显示转换时间信息。对于不具有固定日期规则的时区，该示例使用表示当前系统日历的 Calendar 对象来确定转换的实际开始和结束日期。该示例在控制台中显示结果。
下面的示例列出本地系统上可用的所有时区与夏时制相互转换的时间。对于具有固定日期规则的时区，该示例通过 TimeZoneInfo..::.TransitionTime 对象的属性显示转换时间信息。对于不具有固定日期规则的时区，该示例使用表示当前系统日历的 Calendar 对象来确定转换的实际开始和结束日期。该示例在控制台中显示结果。
下面的示例列出本地系统上可用的所有时区与夏时制相互转换的时间。对于具有固定日期规则的时区，该示例通过 TimeZoneInfo..::.TransitionTime 对象的属性显示转换时间信息。对于不具有固定日期规则的时区，该示例使用表示当前系统日历的 Calendar 对象来确定转换的实际开始和结束日期。该示例在控制台中显示结果。
下面的示例列出本地系统上可用的所有时区与夏时制相互转换的时间。对于具有固定日期规则的时区，该示例通过 TimeZoneInfo..::.TransitionTime 对象的属性显示转换时间信息。对于不具有固定日期规则的时区，该示例使用表示当前系统日历的 Calendar 对象来确定转换的实际开始和结束日期。该示例在控制台中显示结果。

Private Sub GetTransitionTimes(year As Integer)
   ' Get and iterate time zones on local computer
   Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
   For Each timeZone As TimeZoneInfo In timeZones
      Console.WriteLine("{0}:", timeZone.StandardName)
      Dim adjustments() As TimeZoneInfo.AdjustmentRule = timeZone.GetAdjustmentRules()
      Dim startYear As Integer = year
      Dim endYear As Integer = startYear

      If adjustments.Length = 0 Then
         Console.WriteLine("   No adjustment rules.")
      Else
         Dim adjustment As TimeZoneInfo.AdjustmentRule = GetAdjustment(adjustments, year)
         If adjustment Is Nothing Then
            Console.WriteLine("   No adjustment rules available for this year.")
            Continue For
         End If
         Dim startTransition, endTransition As TimeZoneInfo.TransitionTime

         ' Determine if starting transition is fixed
         startTransition = adjustment.DaylightTransitionStart
         ' Determine if starting transition is fixed and display transition info for year
         If startTransition.IsFixedDateRule Then
            Console.WriteLine("   Begins on {0} {1} at {2:t}", _
                              MonthName(startTransition.Month), _
                              startTransition.Day, _
                              startTransition.TimeOfDay)
         Else
            DisplayTransitionInfo(startTransition, startYear, "Begins on")
         End If

         ' Determine if ending transition is fixed and display transition info for year
         endTransition = adjustment.DaylightTransitionEnd

         ' Does the transition back occur in an earlier month (i.e.,
         ' the following year) than the transition to DST? If so, make
         ' sure we have the right adjustment rule.
         If endTransition.Month < startTransition.Month Then
            endTransition = GetAdjustment(adjustments, year + 1).DaylightTransitionEnd
            endYear += 1
         End If

         If endTransition.IsFixedDateRule Then
            Console.WriteLine("   Ends on {0} {1} at {2:t}", _
                              MonthName(endTransition.Month), _
                              endTransition.Day, _
                              endTransition.TimeOfDay)
         Else
            DisplayTransitionInfo(endTransition, endYear, "Ends on")
         End If
      End If
   Next
End Sub

Private Function GetAdjustment(adjustments As TimeZoneInfo.AdjustmentRule(), _
                               year As Integer) As TimeZoneInfo.AdjustmentRule
   ' Iterate adjustment rules for time zone
   For Each adjustment As TimeZoneInfo.AdjustmentRule In adjustments
      ' Determine if this adjustment rule covers year desired
      If adjustment.DateStart.Year <= year And adjustment.DateEnd.Year >= year Then
         Return adjustment
      End If
   Next
   Return Nothing
End Function

Private Sub DisplayTransitionInfo(transition As TimeZoneInfo.TransitionTime, year As Integer, label As String)
   ' For non-fixed date rules, get local calendar
   Static cal As Calendar = CultureInfo.CurrentCulture.Calendar

   ' Get first day of week for transition
   ' For example, the 3rd week starts no earlier than the 15th of the month
   Dim startOfWeek As Integer = transition.Week * 7 - 6
   ' What day of the week does the month start on?
   Dim firstDayOfWeek As Integer = cal.GetDayOfWeek(New Date(year, transition.Month, 1))
   ' Determine how much start date has to be adjusted
   Dim transitionDay As Integer
   Dim changeDayOfWeek As Integer = transition.DayOfWeek

   If firstDayOfWeek <= changeDayOfWeek Then
      transitionDay = startOfWeek + (changeDayOfWeek - firstDayOfWeek)
   Else
      transitionDay = startOfWeek + (7 - firstDayOfWeek + changeDayOfWeek)
   End If
   ' Adjust for months with no fifth week
   If transitionDay > cal.GetDaysInMonth(year, transition.Month) Then
      transitionDay -= 7
   End If
   Console.WriteLine("   {0} {1}, {2:d} at {3:t}", _
                     label, _
                     transition.DayOfWeek, _
                     New DateTime(year, transition.Month, transitionDay), _
                     transition.TimeOfDay)
End Sub

private void GetTransitionTimes(int year)
{
   // Instantiate DateTimeFormatInfo object for month names
   DateTimeFormatInfo dateFormat = CultureInfo.CurrentCulture.DateTimeFormat;

   // Get and iterate time zones on local computer
   ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
   foreach (TimeZoneInfo timeZone in timeZones)
   {
      Console.WriteLine("{0}:", timeZone.StandardName);
      TimeZoneInfo.AdjustmentRule[] adjustments = timeZone.GetAdjustmentRules();
      int startYear = year;
      int endYear = startYear;

      if (adjustments.Length == 0)
      {
         Console.WriteLine("   No adjustment rules.");
      }
      else
      {
         TimeZoneInfo.AdjustmentRule adjustment = GetAdjustment(adjustments, year);
         if (adjustment == null)
         {
            Console.WriteLine("   No adjustment rules available for this year.");
            continue;
         }
         TimeZoneInfo.TransitionTime startTransition, endTransition;

         // Determine if starting transition is fixed
         startTransition = adjustment.DaylightTransitionStart;
         // Determine if starting transition is fixed and display transition info for year
         if (startTransition.IsFixedDateRule)
            Console.WriteLine("   Begins on {0} {1} at {2:t}",
                              dateFormat.GetMonthName(startTransition.Month),
                              startTransition.Day,
                              startTransition.TimeOfDay);
         else
            DisplayTransitionInfo(startTransition, startYear, "Begins on");

         // Determine if ending transition is fixed and display transition info for year
         endTransition = adjustment.DaylightTransitionEnd;

         // Does the transition back occur in an earlier month (i.e.,
         // the following year) than the transition to DST? If so, make
         // sure we have the right adjustment rule.
         if (endTransition.Month < startTransition.Month)
         {
            endTransition = GetAdjustment(adjustments, year + 1).DaylightTransitionEnd;
            endYear++;
         }

         if (endTransition.IsFixedDateRule)
            Console.WriteLine("   Ends on {0} {1} at {2:t}",
                              dateFormat.GetMonthName(endTransition.Month),
                              endTransition.Day,
                              endTransition.TimeOfDay);
         else
            DisplayTransitionInfo(endTransition, endYear, "Ends on");
      }
   }
}

private static TimeZoneInfo.AdjustmentRule GetAdjustment(TimeZoneInfo.AdjustmentRule[] adjustments,
                                                  int year)
{
   // Iterate adjustment rules for time zone
   foreach (TimeZoneInfo.AdjustmentRule adjustment in adjustments)
   {
      // Determine if this adjustment rule covers year desired
      if (adjustment.DateStart.Year <= year && adjustment.DateEnd.Year >= year)
         return adjustment;
   }
   return null;
}

private void DisplayTransitionInfo(TimeZoneInfo.TransitionTime transition, int year, string label)
{
   // For non-fixed date rules, get local calendar
   Calendar cal = CultureInfo.CurrentCulture.Calendar;
   // Get first day of week for transition
   // For example, the 3rd week starts no earlier than the 15th of the month
   int startOfWeek = transition.Week * 7 - 6;
   // What day of the week does the month start on?
   int firstDayOfWeek = (int) cal.GetDayOfWeek(new DateTime(year, transition.Month, 1));
   // Determine how much start date has to be adjusted
   int transitionDay;
   int changeDayOfWeek = (int) transition.DayOfWeek;

   if (firstDayOfWeek <= changeDayOfWeek)
      transitionDay = startOfWeek + (changeDayOfWeek - firstDayOfWeek);
   else
      transitionDay = startOfWeek + (7 - firstDayOfWeek + changeDayOfWeek);

   // Adjust for months with no fifth week
   if (transitionDay > cal.GetDaysInMonth(year, transition.Month))
      transitionDay -= 7;

   Console.WriteLine("   {0} {1}, {2:d} at {3:t}",
                     label,
                     transition.DayOfWeek,
                     new DateTime(year, transition.Month, transitionDay),
                     transition.TimeOfDay);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.Month 属性

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
Month 属性
TimeZoneInfo

获取发生时间更改的月份。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Month As Integer
    Get
public int Month { get; }
public:
property int Month {
    int get ();
}
member Month : int

属性值

类型： System Int32
发生时间更改的月份。

Month 属性有效值范围是从 1 到 12。

Month 属性既可用于固定日期规则又可用于浮动日期规则。

下面的示例枚举在本地计算机上找到的时区，并显示所有浮动日期转换的转换时间信息。时间信息包括发生时间更改的月份。 下面的示例枚举在本地计算机上找到的时区，并显示所有浮动日期转换的转换时间信息。时间信息包括发生时间更改的月份。

Private Enum WeekOfMonth As Integer
   First = 1
   Second = 2
   Third = 3
   Fourth = 4
   Last = 5
End Enum

Private Sub GetFloatingTransitionTimes()
   Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
   For Each zone As TimeZoneInfo In timeZones
      Dim adjustmentRules() As TimeZoneInfo.AdjustmentRule = zone.GetAdjustmentRules()
      For Each adjustmentRule As TimeZoneInfo.AdjustmentRule in adjustmentRules
         Dim daylightStart As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionStart
         If Not daylightStart.IsFixedDateRule Then
            Console.WriteLine("{0}, {1:d}-{2:d}: Begins at {3:t} on the {4} {5} of {6}.", _
                              zone.StandardName, _
                              adjustmentRule.DateStart, _
                              adjustmentRule.DateEnd, _
                              daylightStart.TimeOfDay, _
                              CType(daylightStart.Week, WeekOfMonth).ToString(), _
                              daylightStart.DayOfWeek.ToString(), _
                              MonthName(daylightStart.Month))
         End If
         Dim daylightEnd As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionEnd
         If Not daylightEnd.IsFixedDateRule Then
            Console.WriteLine("{0}, {1:d}-{2:d}: Ends at {3:t} on the {4} {5} of {6}.", _
                              zone.StandardName, _
                              adjustmentRule.DateStart, _
                              adjustmentRule.DateEnd, _
                              daylightEnd.TimeOfDay, _
                              CType(daylightEnd.Week, WeekOfMonth).ToString(), _
                              daylightEnd.DayOfWeek.ToString(), _
                              MonthName(daylightEnd.Month))
         End If
      Next
   Next
End Sub

private enum WeekOfMonth
{
   First = 1,
   Second = 2,
   Third = 3,
   Fourth = 4,
   Last = 5
}

private void GetFloatingTransitionTimes()
{
   ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
   foreach (TimeZoneInfo zone in timeZones)
   {
      TimeZoneInfo.AdjustmentRule[] adjustmentRules = zone.GetAdjustmentRules();
      DateTimeFormatInfo dateInfo = CultureInfo.CurrentCulture.DateTimeFormat;
      foreach (TimeZoneInfo.AdjustmentRule adjustmentRule in adjustmentRules)
      {
         TimeZoneInfo.TransitionTime daylightStart = adjustmentRule.DaylightTransitionStart;
         if (! daylightStart.IsFixedDateRule)
            Console.WriteLine("{0}, {1:d}-{2:d}: Begins at {3:t} on the {4} {5} of {6}.",
                              zone.StandardName,
                              adjustmentRule.DateStart,
                              adjustmentRule.DateEnd,
                              daylightStart.TimeOfDay,
                              ((WeekOfMonth)daylightStart.Week).ToString(),
                              daylightStart.DayOfWeek.ToString(),
                              dateInfo.GetMonthName(daylightStart.Month));

         TimeZoneInfo.TransitionTime daylightEnd = adjustmentRule.DaylightTransitionEnd;
         if (! daylightEnd.IsFixedDateRule)
            Console.WriteLine("{0}, {1:d}-{2:d}: Ends at {3:t} on the {4} {5} of {6}.",
                              zone.StandardName,
                              adjustmentRule.DateStart,
                              adjustmentRule.DateEnd,
                              daylightEnd.TimeOfDay,
                              ((WeekOfMonth)daylightEnd.Week).ToString(),
                              daylightEnd.DayOfWeek.ToString(),
                              dateInfo.GetMonthName(daylightEnd.Month));
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.TimeOfDay 属性

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
TimeOfDay 属性
TimeZoneInfo

获取发生时间更改的小时、分钟和秒。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TimeOfDay As DateTime
    Get
public DateTime TimeOfDay { get; }
public:
property DateTime TimeOfDay {
    DateTime get ();
}
member TimeOfDay : DateTime

属性值

类型： System DateTime
一天内发生时间更改的时间。

TimeOfDay 属性只定义时间更改的时间，而不定义其日期。对于固定规则的更改，由 Month 和 Day 属性确定日期；对于浮动规则的更改，由 Month、Week 和 DayOfWeek 属性确定日期。 TimeOfDay 属性只定义时间更改的时间，而不定义其日期。对于固定规则的更改，由 Month 和 Day 属性确定日期；对于浮动规则的更改，由 Month、Week 和 DayOfWeek 属性确定日期。

TimeOfDay 属性既可用于固定日期转换又可用于浮动日期转换。

下面的示例枚举在本地计算机上找到的时区，并显示具有调整规则的那些时区的转换时间信息。时间信息包括发生时间更改的那一天的时间。 下面的示例枚举在本地计算机上找到的时区，并显示具有调整规则的那些时区的转换时间信息。时间信息包括发生时间更改的那一天的时间。

Private Enum WeekOfMonth As Integer
   First = 1
   Second = 2
   Third = 3
   Fourth = 4
   Last = 5
End Enum

Sub GetAllTransitionTimes()
   Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
   For Each zone As TimeZoneInfo In timeZones
      Console.WriteLine("{0} transition time information:", zone.StandardName)
      Dim adjustmentRules() As TimeZoneInfo.AdjustmentRule = zone.GetAdjustmentRules()

      ' Indicate that time zone has no adjustment rules
      If adjustmentRules.Length = 0 Then
         Console.WriteLine("   No adjustment rules defined.")
      Else
         ' Iterate adjustment rules
         For Each adjustmentRule As TimeZoneInfo.AdjustmentRule in adjustmentRules
            Console.WriteLine("   Adjustment rule from {0:d} to {1:d}:", _
                              adjustmentRule.DateStart, _
                              adjustmentRule.DateEnd)

            ' Get start of transition
            Dim daylightStart As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionStart
            ' Display information on fixed date rule
            If Not daylightStart.IsFixedDateRule Then
               Console.WriteLine("      Begins at {0:t} on the {1} {2} of {3}.", _
                              daylightStart.TimeOfDay, _
                              CType(daylightStart.Week, WeekOfMonth).ToString(), _
                              daylightStart.DayOfWeek.ToString(), _
                              MonthName(daylightStart.Month))
            ' Display information on floating date rule
            Else
               Console.WriteLine("      Begins at {0:t} on the {1} {2} of {3}.", _
                                 daylightStart.TimeOfDay, _
                                 CType(daylightStart.Week, WeekOfMonth).ToString(), _
                                 daylightStart.DayOfWeek.ToString(), _
                                 MonthName(daylightStart.Month))
            End If

            ' Get end of transition
            Dim daylightEnd As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionEnd
            ' Display information on fixed date rule
            If Not daylightEnd.IsFixedDateRule Then
               Console.WriteLine("      Ends at {0:t} on the {1} {2} of {3}.", _
                              daylightEnd.TimeOfDay, _
                              CType(daylightEnd.Week, WeekOfMonth).ToString(), _
                              daylightEnd.DayOfWeek.ToString(), _
                              MonthName(daylightEnd.Month))
            ' Display information on floating date rule
            Else
               Console.WriteLine("      Ends at {0:t} on the {1} {2} of {3}.", _
                                 daylightStart.TimeOfDay, _
                                 CType(daylightStart.Week, WeekOfMonth).ToString(), _
                                 daylightStart.DayOfWeek.ToString(), _
                                 MonthName(daylightStart.Month))
            End If
         Next
      End If
   Next
End Sub

private enum WeekOfMonth
{
   First = 1,
   Second = 2,
   Third = 3,
   Fourth = 4,
   Last = 5,
}

public void GetAllTransitionTimes()
{
   ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
   DateTimeFormatInfo dateInfo = CultureInfo.CurrentCulture.DateTimeFormat;

   foreach (TimeZoneInfo zone in timeZones)
   {
      Console.WriteLine("{0} transition time information:", zone.StandardName);
      TimeZoneInfo.AdjustmentRule[] adjustmentRules= zone.GetAdjustmentRules();

      // Indicate that time zone has no adjustment rules
      if (adjustmentRules.Length == 0)
      {
         Console.WriteLine("   No adjustment rules defined.");
      }
      else
      {
         // Iterate adjustment rules
         foreach (TimeZoneInfo.AdjustmentRule adjustmentRule in adjustmentRules)
         {
            Console.WriteLine("   Adjustment rule from {0:d} to {1:d}:",
                              adjustmentRule.DateStart,
                              adjustmentRule.DateEnd);

            // Get start of transition
            TimeZoneInfo.TransitionTime daylightStart = adjustmentRule.DaylightTransitionStart;
            // Display information on fixed date rule
            if (! daylightStart.IsFixedDateRule)
               Console.WriteLine("      Begins at {0:t} on the {1} {2} of {3}.",
                              daylightStart.TimeOfDay,
                              ((WeekOfMonth)daylightStart.Week).ToString(),
                              daylightStart.DayOfWeek.ToString(),
                              dateInfo.GetMonthName(daylightStart.Month));
            // Display information on floating date rule
            else
               Console.WriteLine("      Begins at {0:t} on the {1} {2} of {3}.",
                                 daylightStart.TimeOfDay,
                                 ((WeekOfMonth)daylightStart.Week).ToString(),
                                 daylightStart.DayOfWeek.ToString(),
                                 dateInfo.GetMonthName(daylightStart.Month));

            // Get end of transition
            TimeZoneInfo.TransitionTime daylightEnd = adjustmentRule.DaylightTransitionEnd;
            // Display information on fixed date rule
            if (! daylightEnd.IsFixedDateRule)
               Console.WriteLine("      Ends at {0:t} on the {1} {2} of {3}.",
                              daylightEnd.TimeOfDay,
                              ((WeekOfMonth)daylightEnd.Week).ToString(),
                              daylightEnd.DayOfWeek.ToString(),
                              dateInfo.GetMonthName(daylightEnd.Month));
            // Display information on floating date rule
            else
               Console.WriteLine("      Ends at {0:t} on the {1} {2} of {3}.",
                                 daylightStart.TimeOfDay,
                                 ((WeekOfMonth)daylightStart.Week).ToString(),
                                 daylightStart.DayOfWeek.ToString(),
                                 dateInfo.GetMonthName(daylightStart.Month));
         }
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间


TimeZoneInfo ..::.TransitionTime ..::.Week 属性

TimeZoneInfo
.
.
::
.
TransitionTime
.
.
::
.
Week 属性
TimeZoneInfo

获取发生时间更改的月份的第几个星期。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Week As Integer
    Get
public int Week { get; }
public:
property int Week {
    int get ();
}
member Week : int

属性值

类型： System Int32
发生时间更改的月份的第几个星期。

Week 属性值仅用于针对浮动日期规则的时间更改。有效值的范围是从 1 到 5。5 值表示月份的最后一个星期。 Week 属性值仅用于针对浮动日期规则的时间更改。有效值的范围是从 1 到 5。5 值表示月份的最后一个星期。 Week 属性值仅用于针对浮动日期规则的时间更改。有效值的范围是从 1 到 5。5 值表示月份的最后一个星期。

Month 属性定义发生时间更改的月份。Week 属性确定了在转换发生的一周。Day 属性定义了在转换发生一周的某一天。 Month 属性定义发生时间更改的月份。Week 属性确定了在转换发生的一周。Day 属性定义了在转换发生一周的某一天。 Month 属性定义发生时间更改的月份。Week 属性确定了在转换发生的一周。Day 属性定义了在转换发生一周的某一天。

下面的示例枚举在本地计算机上找到的时区，并显示所有浮动日期转换的转换时间信息。时间信息包括发生时间更改的月份的第几个星期。该示例还定义 WeekOfMonth 枚举，以显示表示 Week 属性序数值（而不是整数）的字符串。 下面的示例枚举在本地计算机上找到的时区，并显示所有浮动日期转换的转换时间信息。时间信息包括发生时间更改的月份的第几个星期。该示例还定义 WeekOfMonth 枚举，以显示表示 Week 属性序数值（而不是整数）的字符串。 下面的示例枚举在本地计算机上找到的时区，并显示所有浮动日期转换的转换时间信息。时间信息包括发生时间更改的月份的第几个星期。该示例还定义 WeekOfMonth 枚举，以显示表示 Week 属性序数值（而不是整数）的字符串。

Private Enum WeekOfMonth As Integer
   First = 1
   Second = 2
   Third = 3
   Fourth = 4
   Last = 5
End Enum

Private Sub GetFloatingTransitionTimes()
   Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
   For Each zone As TimeZoneInfo In timeZones
      Dim adjustmentRules() As TimeZoneInfo.AdjustmentRule = zone.GetAdjustmentRules()
      For Each adjustmentRule As TimeZoneInfo.AdjustmentRule in adjustmentRules
         Dim daylightStart As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionStart
         If Not daylightStart.IsFixedDateRule Then
            Console.WriteLine("{0}, {1:d}-{2:d}: Begins at {3:t} on the {4} {5} of {6}.", _
                              zone.StandardName, _
                              adjustmentRule.DateStart, _
                              adjustmentRule.DateEnd, _
                              daylightStart.TimeOfDay, _
                              CType(daylightStart.Week, WeekOfMonth).ToString(), _
                              daylightStart.DayOfWeek.ToString(), _
                              MonthName(daylightStart.Month))
         End If
         Dim daylightEnd As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionEnd
         If Not daylightEnd.IsFixedDateRule Then
            Console.WriteLine("{0}, {1:d}-{2:d}: Ends at {3:t} on the {4} {5} of {6}.", _
                              zone.StandardName, _
                              adjustmentRule.DateStart, _
                              adjustmentRule.DateEnd, _
                              daylightEnd.TimeOfDay, _
                              CType(daylightEnd.Week, WeekOfMonth).ToString(), _
                              daylightEnd.DayOfWeek.ToString(), _
                              MonthName(daylightEnd.Month))
         End If
      Next
   Next
End Sub

private enum WeekOfMonth
{
   First = 1,
   Second = 2,
   Third = 3,
   Fourth = 4,
   Last = 5
}

private void GetFloatingTransitionTimes()
{
   ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
   foreach (TimeZoneInfo zone in timeZones)
   {
      TimeZoneInfo.AdjustmentRule[] adjustmentRules = zone.GetAdjustmentRules();
      DateTimeFormatInfo dateInfo = CultureInfo.CurrentCulture.DateTimeFormat;
      foreach (TimeZoneInfo.AdjustmentRule adjustmentRule in adjustmentRules)
      {
         TimeZoneInfo.TransitionTime daylightStart = adjustmentRule.DaylightTransitionStart;
         if (! daylightStart.IsFixedDateRule)
            Console.WriteLine("{0}, {1:d}-{2:d}: Begins at {3:t} on the {4} {5} of {6}.",
                              zone.StandardName,
                              adjustmentRule.DateStart,
                              adjustmentRule.DateEnd,
                              daylightStart.TimeOfDay,
                              ((WeekOfMonth)daylightStart.Week).ToString(),
                              daylightStart.DayOfWeek.ToString(),
                              dateInfo.GetMonthName(daylightStart.Month));

         TimeZoneInfo.TransitionTime daylightEnd = adjustmentRule.DaylightTransitionEnd;
         if (! daylightEnd.IsFixedDateRule)
            Console.WriteLine("{0}, {1:d}-{2:d}: Ends at {3:t} on the {4} {5} of {6}.",
                              zone.StandardName,
                              adjustmentRule.DateStart,
                              adjustmentRule.DateEnd,
                              daylightEnd.TimeOfDay,
                              ((WeekOfMonth)daylightEnd.Week).ToString(),
                              daylightEnd.DayOfWeek.ToString(),
                              dateInfo.GetMonthName(daylightEnd.Month));
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneInfo TransitionTime 结构
TimeZoneInfo TransitionTime 成员
System 命名空间
Day
Month


TimeZoneNotFoundException 类

TimeZoneNotFoundException 类
成员

找不到时区时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort := True)> _
Public Class TimeZoneNotFoundException _
    Inherits Exception
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class TimeZoneNotFoundException : Exception
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction::LinkDemand, MayLeakOnAbort = true)]
public ref class TimeZoneNotFoundException : public Exception
[<SerializableAttribute>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)>]
type TimeZoneNotFoundException =
    class
        inherit Exception
    end

如果在本地系统上找不到时区标识符，或者没有与特定时区标识符相关联的数据，则 ConvertTimeBySystemTimeZoneId 和 FindSystemTimeZoneById 方法引发此异常。

由于注册表在 Windows XP 和 Windows Vista 中用作时区信息的储存库，因此此异常指示注册表不包含有关特定时区的信息。时区信息存储在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 的子项中。 由于注册表在 Windows XP 和 Windows Vista 中用作时区信息的储存库，因此此异常指示注册表不包含有关特定时区的信息。时区信息存储在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 的子项中。

如果应用程序依赖于特定时区的存在，并且尝试检索该时区时引发 TimeZoneNotFoundException，则应用程序可以用下面两种方式之一处理该异常：

  • 通过调用 FromSerializedString 方法反序列化已保存的 TimeZoneInfo 对象。

  • 通过调用 CreateCustomTimeZone 方法的重载之一创建时区。

请参见 TimeZoneInfo..::.CreateCustomTimeZone(String, TimeSpan, String, String, String, array<TimeZoneInfo..::.AdjustmentRule>[]()[], Boolean) 和 FromSerializedString 方法的示例。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：MayLeakOnAbort。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

System System..::.TimeZoneNotFoundExceptionTimeZoneNotFoundException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneNotFoundException 成员
System 命名空间


TimeZoneNotFoundException 成员

TimeZoneNotFoundException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneNotFoundException 类

找不到时区时引发的异常。

TimeZoneNotFoundException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TimeZoneNotFoundException 类
System 命名空间


TimeZoneNotFoundException 构造函数

TimeZoneNotFoundException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneNotFoundException 类

初始化 TimeZoneNotFoundException 类的新实例。

名称 说明
页首

参考

TimeZoneNotFoundException 类
TimeZoneNotFoundException 成员
System 命名空间


TimeZoneNotFoundException 构造函数

TimeZoneNotFoundException 构造函数
TimeZoneNotFoundException 类

使用系统提供的消息初始化 TimeZoneNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public TimeZoneNotFoundException()
public:
TimeZoneNotFoundException()
new : unit -> TimeZoneNotFoundException

这是 TimeZoneNotFoundException 类的默认构造函数。此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“在本地计算机上未找到时区‘时区名称’”。此消息将针对当前系统区域性进行本地化。 这是 TimeZoneNotFoundException 类的默认构造函数。此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“在本地计算机上未找到时区‘时区名称’”。此消息将针对当前系统区域性进行本地化。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneNotFoundException 类
TimeZoneNotFoundException 成员
TimeZoneNotFoundException 重载
System 命名空间


TimeZoneNotFoundException 构造函数 (String)

TimeZoneNotFoundException 构造函数 (String)
TimeZoneNotFoundException 类

使用指定的消息字符串初始化 TimeZoneNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public TimeZoneNotFoundException(
    string message
)
public:
TimeZoneNotFoundException(
    String^ message
)
new :
        message:string -> TimeZoneNotFoundException

参数

message
类型： System String
描述异常的字符串。

message 字符串被分配给 Message 属性。应针对当前区域性对该字符串进行本地化。 message 字符串被分配给 Message 属性。应针对当前区域性对该字符串进行本地化。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneNotFoundException 类
TimeZoneNotFoundException 成员
TimeZoneNotFoundException 重载
System 命名空间


TimeZoneNotFoundException 构造函数 (SerializationInfo, StreamingContext)

TimeZoneNotFoundException 构造函数 (SerializationInfo, StreamingContext)
TimeZoneNotFoundException 类

用序列化数据初始化 TimeZoneNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected TimeZoneNotFoundException(
    SerializationInfo info,
    StreamingContext context
)
protected:
TimeZoneNotFoundException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> TimeZoneNotFoundException

参数

info
类型： System.Runtime.Serialization SerializationInfo
包含序列化数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
包含序列化数据的流。
异常 | 条件
ArgumentNullException | info 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - context 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此构造函数不直接由代码调用来实例化 TimeZoneNotFoundException 对象。而是在从流反序列化 TimeZoneNotFoundException 对象时，由 IFormatter 对象的 Deserialize 方法调用。 此构造函数不直接由代码调用来实例化 TimeZoneNotFoundException 对象。而是在从流反序列化 TimeZoneNotFoundException 对象时，由 IFormatter 对象的 Deserialize 方法调用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneNotFoundException 类
TimeZoneNotFoundException 成员
TimeZoneNotFoundException 重载
System 命名空间


TimeZoneNotFoundException 构造函数 (String, Exception)

TimeZoneNotFoundException 构造函数 (String, Exception)
TimeZoneNotFoundException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 TimeZoneNotFoundException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public TimeZoneNotFoundException(
    string message,
    Exception innerException
)
public:
TimeZoneNotFoundException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> TimeZoneNotFoundException

参数

message
类型： System String
描述异常的字符串。
innerException
类型： System Exception
导致当前异常的异常。

通常可使用此 TimeZoneNotFoundException 重载来处理 try…catch 块中的异常。innerException 参数应为对在 catch 块中处理的异常对象的引用，否则该参数可能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。该值随后被分配给 TimeZoneNotFoundException 对象的 InnerException 属性。 通常可使用此 TimeZoneNotFoundException 重载来处理 try…catch 块中的异常。innerException 参数应为对在 catch 块中处理的异常对象的引用，否则该参数可能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。该值随后被分配给 TimeZoneNotFoundException 对象的 InnerException 属性。 通常可使用此 TimeZoneNotFoundException 重载来处理 try…catch 块中的异常。innerException 参数应为对在 catch 块中处理的异常对象的引用，否则该参数可能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。该值随后被分配给 TimeZoneNotFoundException 对象的 InnerException 属性。

message 字符串被分配给 Message 属性。应针对当前区域性对该字符串进行本地化。 message 字符串被分配给 Message 属性。应针对当前区域性对该字符串进行本地化。

下面的示例尝试检索不存在的时区，从而引发 TimeZoneNotFoundException。异常处理程序会将异常包装到新的 TimeZoneNotFoundException 对象中，然后将其返回至调用方。调用方的异常处理程序随后显示外部和内部异常的相关信息。 下面的示例尝试检索不存在的时区，从而引发 TimeZoneNotFoundException。异常处理程序会将异常包装到新的 TimeZoneNotFoundException 对象中，然后将其返回至调用方。调用方的异常处理程序随后显示外部和内部异常的相关信息。 下面的示例尝试检索不存在的时区，从而引发 TimeZoneNotFoundException。异常处理程序会将异常包装到新的 TimeZoneNotFoundException 对象中，然后将其返回至调用方。调用方的异常处理程序随后显示外部和内部异常的相关信息。

Private Sub HandleInnerException()
   Dim timeZoneName As String = "Any Standard Time"
   Dim tz As TimeZoneInfo
   Try
      tz = RetrieveTimeZone(timeZoneName)
      Console.WriteLine("The time zone display name is {0}.", tz.DisplayName)
   Catch e As TimeZoneNotFoundException
      Console.WriteLine("{0} thrown by application", e.GetType().Name)
      Console.WriteLine("   Message: {0}", e.Message)
      If e.InnerException IsNot Nothing Then
         Console.WriteLine("   Inner Exception Information:")
         Dim innerEx As Exception = e.InnerException
         Do
            Console.WriteLine("      {0}: {1}", innerEx.GetType().Name, innerEx.Message)
            innerEx = innerEx.InnerException
         Loop While innerEx IsNot Nothing
      End If
   End Try
End Sub

Private Function RetrieveTimeZone(tzName As String) As TimeZoneInfo
   Try
      Return TimeZoneInfo.FindSystemTimeZoneById(tzName)
   Catch ex1 As TimeZoneNotFoundException
      Throw New TimeZoneNotFoundException( _
            String.Format("The time zone '{0}' cannot be found.", tzName), _
            ex1)
   Catch ex2 As InvalidTimeZoneException
      Throw New InvalidTimeZoneException( _
            String.Format("The time zone {0} contains invalid data.", tzName), _
            ex2)
   End Try
End Function

private void HandleInnerException()
{
   string timeZoneName = "Any Standard Time";
   TimeZoneInfo tz;
   try
   {
      tz = RetrieveTimeZone(timeZoneName);
      Console.WriteLine("The time zone display name is {0}.", tz.DisplayName);
   }
   catch (TimeZoneNotFoundException e)
   {
      Console.WriteLine("{0} thrown by application", e.GetType().Name);
      Console.WriteLine("   Message: {0}", e.Message);
      if (e.InnerException != null)
      {
         Console.WriteLine("   Inner Exception Information:");
         Exception innerEx = e.InnerException;
         while (innerEx != null)
         {
            Console.WriteLine("      {0}: {1}", innerEx.GetType().Name, innerEx.Message);
            innerEx = innerEx.InnerException;
         }
      }
   }
}

private TimeZoneInfo RetrieveTimeZone(string tzName)
{
   try
   {
      return TimeZoneInfo.FindSystemTimeZoneById(tzName);
   }
   catch (TimeZoneNotFoundException ex1)
   {
      throw new TimeZoneNotFoundException(
            String.Format("The time zone '{0}' cannot be found.", tzName),
            ex1);
   }
   catch (InvalidTimeZoneException ex2)
   {
      throw new InvalidTimeZoneException(
            String.Format("The time zone {0} contains invalid data.", tzName),
            ex2);
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TimeZoneNotFoundException 类
TimeZoneNotFoundException 成员
TimeZoneNotFoundException 重载
System 命名空间


TimeZoneNotFoundException 方法

TimeZoneNotFoundException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneNotFoundException 类

TimeZoneNotFoundException 类型公开以下成员。

名称 说明
页首

参考

TimeZoneNotFoundException 类
System 命名空间


TimeZoneNotFoundException 属性

TimeZoneNotFoundException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneNotFoundException 类

TimeZoneNotFoundException 类型公开以下成员。

名称 说明
页首

参考

TimeZoneNotFoundException 类
System 命名空间


TimeZoneNotFoundException 事件

TimeZoneNotFoundException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TimeZoneNotFoundException 类

TimeZoneNotFoundException 类型公开以下成员。

名称 说明
页首

参考

TimeZoneNotFoundException 类
System 命名空间


Tuple 类

Tuple 类
成员

提供用于创建元组对象的静态方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public NotInheritable Class Tuple
public static class Tuple
public ref class Tuple abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type Tuple =  class end

Tuple 为工厂类，它提供了静态方法，用于创建由 .NET Framework 支持的元组类型的实例。它提供帮助器方法，调用这些方法可以实例化特定元组对象而不需要您显式指定每个元组分量的类型。 Tuple 为工厂类，它提供了静态方法，用于创建由 .NET Framework 支持的元组类型的实例。它提供帮助器方法，调用这些方法可以实例化特定元组对象而不需要您显式指定每个元组分量的类型。

帮助器方法直接支持创建具有一到八个组件（即一元组到八元组）的元组对象。尽管对一个元组可以拥有的组件数没有实际限制，但是帮助器方法不能用于创建包含九个或更多组件的元组。若要创建此类元组，必须调用构造函数。 帮助器方法直接支持创建具有一到八个组件（即一元组到八元组）的元组对象。尽管对一个元组可以拥有的组件数没有实际限制，但是帮助器方法不能用于创建包含九个或更多组件的元组。若要创建此类元组，必须调用构造函数。 帮助器方法直接支持创建具有一到八个组件（即一元组到八元组）的元组对象。尽管对一个元组可以拥有的组件数没有实际限制，但是帮助器方法不能用于创建包含九个或更多组件的元组。若要创建此类元组，必须调用构造函数。

下面的示例创建一个8 元组（八元组），其中包含小于 20 的质数 。

Dim primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19)

var primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19);

System System..::.TupleTuple
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple 成员
System 命名空间
Tuple T1
Tuple T1, T2
Tuple T1, T2, T3
Tuple T1, T2, T3, T4
Tuple T1, T2, T3, T4, T5
Tuple T1, T2, T3, T4, T5, T6
Tuple T1, T2, T3, T4, T5, T6, T7
Tuple T1, T2, T3, T4, T5, T6, T7, TRest


Tuple 成员

Tuple 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple 类

提供用于创建元组对象的静态方法。

名称 说明
页首

参考

Tuple 类
System 命名空间


Tuple 方法

Tuple 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple 类
名称 说明
页首

参考

Tuple 类
System 命名空间


Tuple ..::.Create 方法

Tuple
.
.
::
.
Create 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple 类

创建新的元组对象。

名称 说明
页首

参考

Tuple 类
Tuple 成员
System 命名空间


Tuple ..::.Create <(Of <(T1 >)>) 方法 (T1)

Tuple
.
.
::
.
Create
<
(Of
<
(
T1
>
)
>
)
方法 (T1)
Tuple 类

创建新的 1 元组，即单一实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Create(Of T1) ( _
    item1 As T1 _
) As Tuple(Of T1)
public static Tuple<T1> Create<T1>(
    T1 item1
)

public:
generic<typename T1>
static Tuple<T1>^ Create(
    T1 item1
)
static member Create :
        item1:'T1 -> Tuple<'T1>

类型参数

T1

元组的唯一一个分量的类型。

参数

item1
类型：T1
元组仅有的分量的值。

返回值

类型： System Tuple
<
(Of
<
(
T1
>
)
>
)

值为 (item1) 的元组。

Create 为帮助器方法，您可以调用该方法以实例化 1 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个一元组，其分量的类型为 Int32。 Create 为帮助器方法，您可以调用该方法以实例化 1 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个一元组，其分量的类型为 Int32。

Dim tuple1 = Tuple.Create(12)

var tuple1 = Tuple.Create(12);

此代码等效于下面的对 Tuple<(Of <(T1>)>) 类构造函数的调用。

Dim tuple1 = New Tuple(Of Integer)(12)

var tuple1 = new Tuple<int>(12);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple 类
Tuple 成员
Create 重载
System 命名空间
Tuple T1


Tuple ..::.Create <(Of <(T1, T2 >)>) 方法 (T1, T2)

Tuple
.
.
::
.
Create
<
(Of
<
(
T1, T2
>
)
>
)
方法 (T1, T2)
Tuple 类

创建新的 2 元组，即二元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Create(Of T1, T2) ( _
    item1 As T1, _
    item2 As T2 _
) As Tuple(Of T1, T2)
public static Tuple<T1, T2> Create<T1, T2>(
    T1 item1,
    T2 item2
)

public:
generic<typename T1, typename T2>
static Tuple<T1, T2>^ Create(
    T1 item1,
    T2 item2
)
static member Create :
        item1:'T1 *
        item2:'T2 -> Tuple<'T1, 'T2>

类型参数

T1

此元组的第一个分量的类型。

T2

元组的第二个分量的类型。

参数

item1
类型：T1
此元组的第一个分量的值。
item2
类型：T2
此元组的第二个分量的值。

返回值

类型： System Tuple
<
(Of
<
(
T1, T2
>
)
>
)

值为 (item1, item2) 的 2 元组。

Create 为帮助器方法，您可以调用该方法以实例化 2 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个二元组。 Create 为帮助器方法，您可以调用该方法以实例化 2 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个二元组。

Dim tuple2 = Tuple.Create("New York", 32.68)

var tuple2 = Tuple.Create("New York", 32.68);

此代码等效于下面的对 Tuple<(Of <(T1, T2>)>) 类构造函数的调用。

Dim tuple2 = New Tuple(Of String, Double)("New York", 32.68)

var tuple2 = new Tuple<string, double>("New York", 32.68);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple 类
Tuple 成员
Create 重载
System 命名空间
Tuple T1, T2


Tuple ..::.Create <(Of <(T1, T2, T3 >)>) 方法 (T1, T2, T3)

Tuple
.
.
::
.
Create
<
(Of
<
(
T1, T2, T3
>
)
>
)
方法 (T1, T2, T3)
Tuple 类

创建新的 3 元组，即三元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Create(Of T1, T2, T3) ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3 _
) As Tuple(Of T1, T2, T3)
public static Tuple<T1, T2, T3> Create<T1, T2, T3>(
    T1 item1,
    T2 item2,
    T3 item3
)

public:
generic<typename T1, typename T2, typename T3>
static Tuple<T1, T2, T3>^ Create(
    T1 item1,
    T2 item2,
    T3 item3
)
static member Create :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 -> Tuple<'T1, 'T2, 'T3>

类型参数

T1

此元组的第一个分量的类型。

T2

元组的第二个分量的类型。

T3

元组的第三个分量的类型。

参数

item1
类型：T1
此元组的第一个分量的值。
item2
类型：T2
此元组的第二个分量的值。
item3
类型：T3
此元组的第三个分量的值。

返回值

类型： System Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)

值为 (item1, item2, item3) 的 3 元组。

Create 为帮助器方法，您可以调用该方法以实例化 3 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个三元组。 Create 为帮助器方法，您可以调用该方法以实例化 3 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个三元组。

Dim tuple3 = Tuple.Create("New York", 32.68, 51.87)

var tuple3 = Tuple.Create("New York", 32.68, 51.87);

此代码等效于下面的对 Tuple<(Of <(T1, T2, T3>)>)..::.Tuple<(Of <(T1, T2, T3>)>) 类构造函数的调用。

Dim tuple3 = New Tuple(Of String, Double, Double)("New York", 32.68, 51.87)

var tuple3 = new Tuple<string, double, double>
                      ("New York", 32.68, 51.87);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple 类
Tuple 成员
Create 重载
System 命名空间
Tuple T1, T2, T3


Tuple ..::.Create <(Of <(T1, T2, T3, T4 >)>) 方法 (T1, T2, T3, T4)

Tuple
.
.
::
.
Create
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
方法 (T1, T2, T3, T4)
Tuple 类

创建新的 4 元组，即四元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Create(Of T1, T2, T3, T4) ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4 _
) As Tuple(Of T1, T2, T3, T4)
public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4
)

public:
generic<typename T1, typename T2, typename T3, typename T4>
static Tuple<T1, T2, T3, T4>^ Create(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4
)
static member Create :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 -> Tuple<'T1, 'T2, 'T3, 'T4>

类型参数

T1

此元组的第一个分量的类型。

T2

元组的第二个分量的类型。

T3

元组的第三个分量的类型。

T4

此元组的第四个分量的类型。

参数

item1
类型：T1
此元组的第一个分量的值。
item2
类型：T2
此元组的第二个分量的值。
item3
类型：T3
此元组的第三个分量的值。
item4
类型：T4
此元组的第四个分量的值。

返回值

类型： System Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)

值为 (item1, item2, item3, item4) 的 4 元组。

Create 为帮助器方法，您可以调用该方法以实例化 4 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个四元组。 Create 为帮助器方法，您可以调用该方法以实例化 4 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个四元组。

Dim tuple4 = Tuple.Create("New York", 32.68, 51.87, 76.3)

var tuple4 = Tuple.Create("New York", 32.68, 51.87, 76.3);

此代码等效于下面的对 Tuple<(Of <(T1, T2, T3, T4>)>)..::.Tuple<(Of <(T1, T2, T3, T4>)>) 类构造函数的调用。

Dim tuple4 = New Tuple(Of String, Double, Double, Double) _
                      ("New York", 32.68, 51.87, 76.3)

var tuple4 = new Tuple<string, double, double, double>
                      ("New York", 32.68, 51.87, 76.3);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple 类
Tuple 成员
Create 重载
System 命名空间
Tuple T1, T2, T3, T4


Tuple ..::.Create <(Of <(T1, T2, T3, T4, T5 >)>) 方法 (T1, T2, T3, T4, T5)

Tuple
.
.
::
.
Create
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
方法 (T1, T2, T3, T4, T5)
Tuple 类

创建新的 5 元组，即五元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Create(Of T1, T2, T3, T4, T5) ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4, _
    item5 As T5 _
) As Tuple(Of T1, T2, T3, T4, T5)
public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5
)

public:
generic<typename T1, typename T2, typename T3, typename T4, typename T5>
static Tuple<T1, T2, T3, T4, T5>^ Create(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5
)
static member Create :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 *
        item5:'T5 -> Tuple<'T1, 'T2, 'T3, 'T4, 'T5>

类型参数

T1

此元组的第一个分量的类型。

T2

元组的第二个分量的类型。

T3

元组的第三个分量的类型。

T4

此元组的第四个分量的类型。

T5

此元组的第五个分量的类型。

参数

item1
类型：T1
此元组的第一个分量的值。
item2
类型：T2
此元组的第二个分量的值。
item3
类型：T3
此元组的第三个分量的值。
item4
类型：T4
此元组的第四个分量的值。
item5
类型：T5
此元组的第五个分量的值。

返回值

类型： System Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)

值为 (item1, item2, item3, item4, item5) 的 5 元组。

Create 为帮助器方法，您可以调用该方法以实例化 5 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个五元组。 Create 为帮助器方法，您可以调用该方法以实例化 5 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个五元组。

Dim tuple5 = Tuple.Create("New York", 1990, 7322564, 2000,
                          8008278)

var tuple5 = Tuple.Create("New York", 1990, 7322564, 2000, 8008278);

此代码等效于下面的对 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 类构造函数的调用。

Dim tuple5 = New Tuple(Of String, Integer, Integer,
                       Integer, Integer) _
                       ("New York", 1990, 7322564, 2000, 8008278)

var tuple5 = new Tuple<string, int, int, int, int>
                      ("New York", 1990, 7322564, 2000, 8008278);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple 类
Tuple 成员
Create 重载
System 命名空间
Tuple T1, T2, T3, T4, T5


Tuple ..::.Create <(Of <(T1, T2, T3, T4, T5, T6 >)>) 方法 (T1, T2, T3, T4, T5, T6)

Tuple
.
.
::
.
Create
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
方法 (T1, T2, T3, T4, T5, T6)
Tuple 类

创建新的 6 元组，即六元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Create(Of T1, T2, T3, T4, T5, T6) ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4, _
    item5 As T5, _
    item6 As T6 _
) As Tuple(Of T1, T2, T3, T4, T5, T6)
public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6
)

public:
generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
static Tuple<T1, T2, T3, T4, T5, T6>^ Create(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6
)
static member Create :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 *
        item5:'T5 *
        item6:'T6 -> Tuple<'T1, 'T2, 'T3, 'T4, 'T5, 'T6>

类型参数

T1

此元组的第一个分量的类型。

T2

元组的第二个分量的类型。

T3

元组的第三个分量的类型。

T4

此元组的第四个分量的类型。

T5

此元组的第五个分量的类型。

T6

此元组的第六个分量的类型。

参数

item1
类型：T1
此元组的第一个分量的值。
item2
类型：T2
此元组的第二个分量的值。
item3
类型：T3
此元组的第三个分量的值。
item4
类型：T4
此元组的第四个分量的值。
item5
类型：T5
此元组的第五个分量的值。
item6
类型：T6
此元组的第六个分量的值。

返回值

类型： System Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)

值为 (item1, item2, item3, item4, item5, item6) 的 6 元组。

Create 为帮助器方法，您可以调用该方法以实例化 6 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个六元组。 Create 为帮助器方法，您可以调用该方法以实例化 6 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个六元组。

Dim tuple6 = Tuple.Create("Jane", 90, 87, 93, 67, 100)

var tuple6 = Tuple.Create("Jane", 90, 87, 93, 67, 100);

此代码等效于下面的对 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 类构造函数的调用。

Dim tuple6 = New Tuple(Of String, Integer, Integer, Integer,
                       Integer, Integer) _
                       ("Jane", 90, 87, 93, 67, 100)

var tuple6 = new Tuple<string, int, int, int, int, int>
                      ("Jane", 90, 87, 93, 67, 100);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple 类
Tuple 成员
Create 重载
System 命名空间
Tuple T1, T2, T3, T4, T5, T6


Tuple ..::.Create <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) 方法 (T1, T2, T3, T4, T5, T6, T7)

Tuple
.
.
::
.
Create
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
方法 (T1, T2, T3, T4, T5, T6, T7)
Tuple 类

创建新的 7 元组，即七元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Create(Of T1, T2, T3, T4, T5, T6, T7) ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4, _
    item5 As T5, _
    item6 As T6, _
    item7 As T7 _
) As Tuple(Of T1, T2, T3, T4, T5, T6, T7)
public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6,
    T7 item7
)

public:
generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
static Tuple<T1, T2, T3, T4, T5, T6, T7>^ Create(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6,
    T7 item7
)
static member Create :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 *
        item5:'T5 *
        item6:'T6 *
        item7:'T7 -> Tuple<'T1, 'T2, 'T3, 'T4, 'T5, 'T6, 'T7>

类型参数

T1

此元组的第一个分量的类型。

T2

元组的第二个分量的类型。

T3

元组的第三个分量的类型。

T4

此元组的第四个分量的类型。

T5

此元组的第五个分量的类型。

T6

此元组的第六个分量的类型。

T7

元组的第七个分量的类型。

参数

item1
类型：T1
此元组的第一个分量的值。
item2
类型：T2
此元组的第二个分量的值。
item3
类型：T3
此元组的第三个分量的值。
item4
类型：T4
此元组的第四个分量的值。
item5
类型：T5
此元组的第五个分量的值。
item6
类型：T6
此元组的第六个分量的值。
item7
类型：T7
元组的第七个分量的值。

返回值

类型： System Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)

值为 (item1, item2, item3, item4, item5, item6, item7) 的 7 元组。

Create 为帮助器方法，您可以调用该方法以实例化 7 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个七元组。 Create 为帮助器方法，您可以调用该方法以实例化 7 元组对象，而不必显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个七元组。

Dim tuple7 = Tuple.Create("Jane", 90, 87, 93, 67, 100, 92)

var tuple7 = Tuple.Create("Jane", 90, 87, 93, 67, 100, 92);

此代码等效于下面的对 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类构造函数的调用。

Dim tuple7 = New Tuple(Of String, Integer, Integer,
                       Integer, Integer, Integer, Integer) _
                       ("Jane", 90, 87, 93, 67, 100, 92)

var tuple7 = new Tuple<string, int, int, int, int, int, int>
                      ("Jane", 90, 87, 93, 67, 100, 92);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple 类
Tuple 成员
Create 重载
System 命名空间
Tuple T1, T2, T3, T4, T5, T6, T7


Tuple ..::.Create <(Of <(T1, T2, T3, T4, T5, T6, T7, T8 >)>) 方法 (T1, T2, T3, T4, T5, T6, T7, T8)

Tuple
.
.
::
.
Create
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, T8
>
)
>
)
方法 (T1, T2, T3, T4, T5, T6, T7, T8)
Tuple 类

创建新的 8 元组，即八元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Create(Of T1, T2, T3, T4, T5, T6, T7, T8) ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4, _
    item5 As T5, _
    item6 As T6, _
    item7 As T7, _
    item8 As T8 _
) As Tuple(Of T1, T2, T3, T4, T5, T6, T7, Tuple(Of T8))
public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6,
    T7 item7,
    T8 item8
)

public:
generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>^>^ Create(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6,
    T7 item7,
    T8 item8
)
static member Create :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 *
        item5:'T5 *
        item6:'T6 *
        item7:'T7 *
        item8:'T8 -> Tuple<'T1, 'T2, 'T3, 'T4, 'T5, 'T6, 'T7, Tuple<'T8>>

类型参数

T1

此元组的第一个分量的类型。

T2

元组的第二个分量的类型。

T3

元组的第三个分量的类型。

T4

此元组的第四个分量的类型。

T5

此元组的第五个分量的类型。

T6

此元组的第六个分量的类型。

T7

元组的第七个分量的类型。

T8

参数

item1
类型：T1
此元组的第一个分量的值。
item2
类型：T2
此元组的第二个分量的值。
item3
类型：T3
此元组的第三个分量的值。
item4
类型：T4
此元组的第四个分量的值。
item5
类型：T5
此元组的第五个分量的值。
item6
类型：T6
此元组的第六个分量的值。
item7
类型：T7
元组的第七个分量的值。
item8
类型：T8
元组的第八个分量的值。

返回值

类型： System Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, Tuple
<
(Of
<
(
T8
>
)
>
)
>
)
>
)

值为 (item1, item2, item3, item4, item5, item6, item7, item8) 的 8 元祖（八元组）。

Create 为帮助器方法，您可以调用该方法以实例化 8 元组，而不必显式指定其组件的类型。

说明 说明

您必须调用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>)(T1, T2, T3, T4, T5, T6, T7, T8) 构造函数以创建一个包含九个或九个以上元素的元组，除非您的语言已为此目的提供特殊语法。Tuple 类的静态（Visual Basic 中的 Shared)方法不能用于创建具有九个或更多元素的元组。 您必须调用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6, T7, T8>)>)(T1, T2, T3, T4, T5, T6, T7, T8) 构造函数以创建一个包含九个或九个以上元素的元组，除非您的语言已为此目的提供特殊语法。Tuple 类的静态（Visual Basic 中的 Shared)方法不能用于创建具有九个或更多元素的元组。

下面的示例创建一个 8 元组，其分量为小于 20 的质数。

Dim primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19)

var primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19);

这等效于下面的示例，此示例使用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类构造函数，而不是 Create 工厂创建方法。注意，以此方式实例化 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象涉及相当多的代码，因为您必须将嵌套的 Tuple<(Of <(T1>)>) 对象声明为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第 8 个组件以生成一个八元组。 这等效于下面的示例，此示例使用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类构造函数，而不是 Create 工厂创建方法。注意，以此方式实例化 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象涉及相当多的代码，因为您必须将嵌套的 Tuple<(Of <(T1>)>) 对象声明为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第 8 个组件以生成一个八元组。

Dim primes As New Tuple(Of Integer, Integer, Integer, Integer,
                           Integer, Integer, Integer,
                           Tuple(Of Integer)) _
                       (2, 3, 5, 7, 11, 13, 17,
                        New Tuple(Of Integer)(19))

var primes = new Tuple<int, int, int, int, int, int, int,
                 Tuple<int>>(2, 3, 5, 7, 11, 13, 16,
                 new Tuple<int>(19));

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple 类
Tuple 成员
Create 重载
System 命名空间
Tuple T1, T2, T3, T4, T5, T6, T7, TRest


Tuple <(Of <(T1 >)>) 类

Tuple
<
(Of
<
(
T1
>
)
>
)
类
成员

表示 1 元组，即单一实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class Tuple(Of T1) _
    Implements IStructuralEquatable, IStructuralComparable, IComparable
[SerializableAttribute]
public class Tuple<T1> : IStructuralEquatable, IStructuralComparable,
    IComparable

[SerializableAttribute]
generic<typename T1>
public ref class Tuple : IStructuralEquatable, IStructuralComparable,
    IComparable
[<SerializableAttribute>]
type Tuple<'T1> =
    class
        interface IStructuralEquatable
        interface IStructuralComparable
        interface IComparable
    end

类型参数

T1

元组的唯一一个分量的类型。

元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1>)>) 类表示一个一元组，即具有一个分量的元组。在应用程序开发中，很少使用单一实例。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1>)>) 类表示一个一元组，即具有一个分量的元组。在应用程序开发中，很少使用单一实例。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1>)>) 类表示一个一元组，即具有一个分量的元组。在应用程序开发中，很少使用单一实例。

可以通过调用 Tuple<(Of <(T1>)>) 构造函数或静态 Tuple..::.Create 方法来实例化 Tuple<(Of <(T1>)>) 对象。可以通过使用只读的 Item1 实例属性来检索元组的单个元素的值。 可以通过调用 Tuple<(Of <(T1>)>) 构造函数或静态 Tuple..::.Create 方法来实例化 Tuple<(Of <(T1>)>) 对象。可以通过使用只读的 Item1 实例属性来检索元组的单个元素的值。

System
System..::.Tuple<(Of <(T1>)>)Tuple
System..::.Tuple<(Of <(T1>)>)T1
System..::.Tuple<(Of <(T1>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 成员
System 命名空间
Tuple
Tuple T1, T2
Tuple T1, T2, T3
Tuple T1, T2, T3, T4
Tuple T1, T2, T3, T4, T5
Tuple T1, T2, T3, T4, T5, T6
Tuple T1, T2, T3, T4, T5, T6, T7
Tuple T1, T2, T3, T4, T5, T6, T7, TRest


Tuple <(Of <(T1 >)>) 成员

Tuple
<
(Of
<
(
T1
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

表示 1 元组，即单一实例。

Tuple T1 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Tuple T1 类
System 命名空间


Tuple <(Of <(T1 >)>) 构造函数

Tuple
<
(Of
<
(
T1
>
)
>
)
构造函数
Tuple

初始化 Tuple<(Of <(T1>)>) 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    item1 As T1 _
)
public Tuple(
    T1 item1
)
public:
Tuple(
    T1 item1
)
new :
        item1:'T1 -> Tuple

参数

item1
类型： T1
元组的唯一一个分量的值。

此外可以使用 Tuple..::.Create 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个一元组，其分量的类型为 Int32。 此外可以使用 Tuple..::.Create 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Create 方法来实例化一个一元组，其分量的类型为 Int32。

Dim tuple1 = Tuple.Create(12)

var tuple1 = Tuple.Create(12);

这等效于下面的对 Tuple<(Of <(T1>)>) 类构造函数的调用。

Dim tuple1 = New Tuple(Of Integer)(12)

var tuple1 = new Tuple<int>(12);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 类
Tuple T1 成员
System 命名空间


Tuple <(Of <(T1 >)>) 方法

Tuple
<
(Of
<
(
T1
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Tuple T1 类
System 命名空间


Tuple <(Of <(T1 >)>) ..::.Equals 方法

Tuple
<
(Of
<
(
T1
>
)
>
)
.
.
::
.
Equals 方法
Tuple

返回一个值，该值指示当前的 Tuple<(Of <(T1>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

在下列情况下，obj 参数视为等于当前实例：

  • 它是 Tuple<(Of <(T1>)>) 对象。

  • 它的一个组件的类型与当前实例相同。

  • 它的一个组件的值与当前实例的对应值相同。

下面的示例调用 Tuple<(Of <(T1>)>)..::.Equals(Object) 方法，来比较其组件为 Double 值的 Tuple<(Of <(T1>)>) 对象与三个其组件具有下列特征 Tuple<(Of <(T1>)>) 对象：

  • 类型相同 (Double)，值相同。

  • 类型相同 (Double)，但值不同。

  • 类型 (Single) 不同，但值相同。

Module Example
    Sub Main()
        Dim doubleTuple1 = Tuple.Create(12.3455)

        Dim doubleTuple2 = Tuple.Create(16.8912)
        Dim doubleTuple3 = Tuple.Create(12.3455)
        Dim singleTuple1 = Tuple.Create(CSng(12.3455))
        Dim tuple2 = Tuple.Create("James", 97.3)
        ' Compare first tuple with a Tuple(Of Double) with a different value.
        TestEquality(doubleTuple1, doubleTuple2)
        ' Compare first tuple with a Tuple(Of Double) with the same value.
        TestEquality(doubleTuple1, doubleTuple3)
        ' Compare first tuple with a Tuple(Of Single) with the same value.
        TestEquality(doubleTuple1, singleTuple1)
        ' Compare a 1-tuple with a 2-tuple.
        TestEquality(doubleTuple1, tuple2)
    End Sub

   Private Sub TestEquality(tuple As Tuple(Of Double), obj As Object)
      Try
         Console.WriteLine("{0} = {1}: {2}", tuple.ToString(),
                                            obj.ToString,
                                            tuple.Equals(obj))

      Catch e As ArgumentException
         If obj.GetType.IsGenericType Then
            If obj.GetType().Name = "Tuple`1" Then
               Console.WriteLine("Cannot compare a Tuple(Of {0}) with a Tuple(Of {1}).",
                              tuple.Item1.GetType().Name, obj.Item1.GetType().Name)
            Else
               Console.WriteLine("Cannot compare a {0} with a {1}.", tuple.GetType().Name,
                                                                     obj.GetType().Name)
            End If
         Else
            Console.WriteLine("Cannot compare a {0} with a {1}.", tuple.GetType().Name,
                                                                  obj.GetType().Name)
         End If
      End Try
   End Sub
End Module
' The example displays the following output:
'       (12.3455) = (16.8912): False
'       (12.3455) = (12.3455): True
'       (12.3455) = (12.3455): False
'       (12.3455) = (James, 97.3): False

using System;

public class Example
{
   public static void Main()
   {
      var doubleTuple1 = Tuple.Create(12.3455);
      var doubleTuple2 = Tuple.Create(16.8912);
      var doubleTuple3 = Tuple.Create(12.3455);
      var singleTuple1 = Tuple.Create(12.3455f);
      var tuple2 = Tuple.Create("James", 97.3);

      // Compare first tuple with a Tuple(Of Double) with a different value.
      TestEquality(doubleTuple1, doubleTuple2);
      // Compare first tuple with a Tuple(Of Double) with the same value.
      TestEquality(doubleTuple1, doubleTuple3);
      // Compare first tuple with a Tuple(Of Single) with the same value.
      TestEquality(doubleTuple1, singleTuple1);
      // Compare a 1-tuple with a 2-tuple.
      TestEquality(doubleTuple1, tuple2);
   }

   private static void TestEquality(Tuple<double> tuple, object obj)
   {
      Console.WriteLine("{0} = {1}: {2}", tuple.ToString(),
                                          obj.ToString(),
                                          tuple.Equals(obj));
   }
}
// The example displays the following output:
//       (12.3455) = (16.8912): False
//       (12.3455) = (12.3455): True
//       (12.3455) = (12.3455): False
//       (12.3455) = (James, 97.3): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 类
Tuple T1 成员
System 命名空间


Tuple <(Of <(T1 >)>) ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1
>
)
>
)
.
.
::
.
GetHashCode 方法
Tuple

返回当前 Tuple<(Of <(T1>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 类
Tuple T1 成员
System 命名空间


Tuple <(Of <(T1 >)>) ..::.IComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1
>
)
>
)
.
.
::
.
IComparable
.
.
::
.
CompareTo 方法
Tuple

将当前 Tuple<(Of <(T1>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是位于指定对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ obj As Object _ ) As Integer Implements IComparable.CompareTo
int IComparable.CompareTo( Object obj )
private: virtual int CompareTo( Object^ obj ) sealed = IComparable::CompareTo
private abstract CompareTo : obj:Object -> int private override CompareTo : obj:Object -> int
参数
obj
类型： System Object
与当前实例进行比较的对象。
返回值
类型： System Int32
一个有符号整数，指示此实例与
obj
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
obj
之前。
零
此实例与
obj
在排序顺序中的位置相同。
一个正整数
此实例在
obj
之后。
实现
异常 | 条件
ArgumentException | obj 不是 Tuple<(Of <(T1>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1>)>) 实例强制转换为 IComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1>)>) 实例强制转换为 IComparable 接口时使用它。

此方法提供 Tuple<(Of <(T1>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法的默认重载（如 Array..::.Sort(Array) 和 SortedList..::.Add）调用，用于对集合成员进行排序。 此方法提供 Tuple<(Of <(T1>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法的默认重载（如 Array..::.Sort(Array) 和 SortedList..::.Add）调用，用于对集合成员进行排序。

警告说明 警告

Tuple<(Of <(T1>)>)..::.IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。 Tuple<(Of <(T1>)>)..::.IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。 Tuple<(Of <(T1>)>)..::.IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。

Tuple<(Of <(T1>)>)..::.IComparable..::.CompareTo 方法使用 Comparer<(Of <(T>)>)..::.Default 比较器。

下面的示例创建一个单一实例数组，这些单一实例的组件是 Double 值。它无序显示数组中每个元组分量的值，对数组排序，然后按排序顺序显示这些值。请注意，该示例不直接调用 Tuple<(Of <(T1>)>)..::.IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个单一实例数组，这些单一实例的组件是 Double 值。它无序显示数组中每个元组分量的值，对数组排序，然后按排序顺序显示这些值。请注意，该示例不直接调用 Tuple<(Of <(T1>)>)..::.IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个单一实例数组，这些单一实例的组件是 Double 值。它无序显示数组中每个元组分量的值，对数组排序，然后按排序顺序显示这些值。请注意，该示例不直接调用 Tuple<(Of <(T1>)>)..::.IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个单一实例数组，这些单一实例的组件是 Double 值。它无序显示数组中每个元组分量的值，对数组排序，然后按排序顺序显示这些值。请注意，该示例不直接调用 Tuple<(Of <(T1>)>)..::.IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。

Module Example
    Sub Main()
        Dim values() = { Tuple.Create(13.54),
                         Tuple.Create(Double.NaN),
                         Tuple.Create(-189.42993),
                         Tuple.Create(Double.PositiveInfinity),
                         Tuple.Create(Double.Epsilon),
                         Tuple.Create(1.934E-17),
                         Tuple.Create(Double.NegativeInfinity),
                         Tuple.Create(-0.000000000003588),
                         Nothing}

        Console.WriteLine("The values in unsorted order:")
        For Each value In values
            If value IsNot Nothing Then
                Console.WriteLine("   {0}", value.Item1)
            Else
                Console.WriteLine("   <null>")
            End If
        Next
        Console.WriteLine()

        Array.Sort(values)

        Console.WriteLine("The values in sorted order:")
        For Each value In values
            If value IsNot Nothing Then
                Console.WriteLine("   {0}", value.Item1)
            Else
                Console.WriteLine("   <null>")
            End If
        Next
    End Sub
End Module
' The example displays the following output:
'      The values in unsorted order:
'         13.54
'         NaN
'         -189.42993
'         Infinity
'         4.94065645841247E-324
'         1.934E-17
'         -Infinity
'         -3.588E-12
'         <null>
'
'      The values in sorted order:
'         <null>
'         NaN
'         -Infinity
'         -189.42993
'         -3.588E-12
'         4.94065645841247E-324
'         1.934E-17
'         13.54
'         Infinity

using System;

class Example
{
   static void Main()
   {
      Tuple<Double>[] values = { Tuple.Create(13.54),
                                 Tuple.Create(Double.NaN),
                                 Tuple.Create(-189.42993),
                                 Tuple.Create(Double.PositiveInfinity),
                                 Tuple.Create(Double.Epsilon),
                                 Tuple.Create(1.934E-17),
                                 Tuple.Create(Double.NegativeInfinity),
                                 Tuple.Create(-0.000000000003588),
                                 null };
      Console.WriteLine("The values in unsorted order:");
      foreach (var value in values)
         if (value != null)
            Console.WriteLine("   {0}", value.Item1);
         else
            Console.WriteLine("   <null>");
      Console.WriteLine();

      Array.Sort(values);

      Console.WriteLine("The values in sorted order:");
      foreach (var value in values)
         if (value != null)
            Console.WriteLine("   {0}", value.Item1);
         else
            Console.WriteLine("   <null>");
   }
}
// The example displays the following output:
//      The values in unsorted order:
//         13.54
//         NaN
//         -189.42993
//         Infinity
//         4.94065645841247E-324
//         1.934E-17
//         -Infinity
//         -3.588E-12
//
//      The values in sorted order:
//         NaN
//         -Infinity
//         -189.42993
//         -3.588E-12
//         4.94065645841247E-324
//         1.934E-17
//         13.54
//         Infinity

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 类
Tuple T1 成员
System 命名空间
Equals Equals()()()


Tuple <(Of <(T1 >)>) ..::.IStructuralComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1
>
)
>
)
.
.
::
.
IStructuralComparable
.
.
::
.
CompareTo 方法
Tuple

使用指定的比较器将当前的 Tuple<(Of <(T1>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer Implements IStructuralComparable.CompareTo
int IStructuralComparable.CompareTo( Object other, IComparer comparer )
private: virtual int CompareTo( Object^ other, IComparer^ comparer ) sealed = IStructuralComparable::CompareTo
private abstract CompareTo : other:Object * comparer:IComparer -> int private override CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个对象，提供自定义比较规则。
返回值
类型： System Int32
一个有符号整数，指示此实例与
other
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
other
之前。
零
此实例与
other
在排序顺序中的位置相同。
一个正整数
此实例在
other
之后。
实现
异常 | 条件
ArgumentException | other 不是 Tuple<(Of <(T1>)>) 对象。

虽然可以直接调用此方法，但它通常由包含 IComparer 参数的集合排序方法调用，用于对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。 虽然可以直接调用此方法，但它通常由包含 IComparer 参数的集合排序方法调用，用于对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。

警告说明 警告

IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。

下面的示例定义一个名为 DescendingComparer 的泛型类，此泛型类执行 IComparer<(Of <(T>)>) 接口。通过反转默认比较器为特定类型返回的值，DescendingComparer 可以按降序而不是升序排序对象。然后，泛型 DescendingComparer 类的实例传递给 Array..::.Sort(Array, IComparer) 方法，以便对 Tuple<(Of <(T1>)>) 对象数组进行降序排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例定义一个名为 DescendingComparer 的泛型类，此泛型类执行 IComparer<(Of <(T>)>) 接口。通过反转默认比较器为特定类型返回的值，DescendingComparer 可以按降序而不是升序排序对象。然后，泛型 DescendingComparer 类的实例传递给 Array..::.Sort(Array, IComparer) 方法，以便对 Tuple<(Of <(T1>)>) 对象数组进行降序排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例定义一个名为 DescendingComparer 的泛型类，此泛型类执行 IComparer<(Of <(T>)>) 接口。通过反转默认比较器为特定类型返回的值，DescendingComparer 可以按降序而不是升序排序对象。然后，泛型 DescendingComparer 类的实例传递给 Array..::.Sort(Array, IComparer) 方法，以便对 Tuple<(Of <(T1>)>) 对象数组进行降序排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例定义一个名为 DescendingComparer 的泛型类，此泛型类执行 IComparer<(Of <(T>)>) 接口。通过反转默认比较器为特定类型返回的值，DescendingComparer 可以按降序而不是升序排序对象。然后，泛型 DescendingComparer 类的实例传递给 Array..::.Sort(Array, IComparer) 方法，以便对 Tuple<(Of <(T1>)>) 对象数组进行降序排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例定义一个名为 DescendingComparer 的泛型类，此泛型类执行 IComparer<(Of <(T>)>) 接口。通过反转默认比较器为特定类型返回的值，DescendingComparer 可以按降序而不是升序排序对象。然后，泛型 DescendingComparer 类的实例传递给 Array..::.Sort(Array, IComparer) 方法，以便对 Tuple<(Of <(T1>)>) 对象数组进行降序排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。

Imports System.Collections.Generic

Public Class DescendingComparer(Of T) : Implements IComparer(Of T)
    Public Function Compare(ByVal x As T, ByVal y As T) As Integer Implements IComparer(Of T).Compare
        Return -1 * Comparer(Of T).Default.Compare(x, y)
    End Function
End Class

Module Example
    Sub Main()
        Dim values() = { Tuple.Create(13.54),
                         Tuple.Create(Double.NaN),
                         Tuple.Create(-189.42993),
                         Tuple.Create(Double.PositiveInfinity),
                         Tuple.Create(Double.Epsilon),
                         Tuple.Create(1.934E-17),
                         Tuple.Create(Double.NegativeInfinity),
                         Tuple.Create(-0.000000000003588),
                         Nothing}

        Console.WriteLine("The values in unsorted order:")
        For Each value As Tuple(Of Double) In values
            If value IsNot Nothing Then
                Console.WriteLine("   {0}", value.Item1)
            Else
                Console.WriteLine("   <null>")
            End If
        Next
        Console.WriteLine()

        Array.Sort(values, New DescendingComparer(Of Tuple(Of Double)))

        Console.WriteLine("The values sorted in descending order:")
        For Each value As Tuple(Of Double) In values
            If value IsNot Nothing Then
                Console.WriteLine("   {0}", value.Item1)
            Else
                Console.WriteLine("   <null>")
            End If
        Next
    End Sub
End Module
' The example displays the following output:
'      The values in unsorted order:
'         13.54
'         NaN
'         -189.42993
'         Infinity
'         4.94065645841247E-324
'         1.934E-17
'         -Infinity
'         -3.588E-12
'         <null>
'
'      The values sorted in descending order:
'         Infinity
'         13.54
'         1.934E-17
'         4.94065645841247E-324
'         -3.588E-12
'         -189.42993
'         -Infinity
'         NaN
'         <null>

using System;
using System.Collections.Generic;

public class DescendingComparer<T> : IComparer<T>
{
    public int Compare(T x, T y)
    {
        return -1 * Comparer<T>.Default.Compare(x, y);
    }
}

class CompareTo2
{
   static void Main()
   {
       Tuple<Double>[] values = { Tuple.Create(13.54),
                                  Tuple.Create(Double.NaN),
                                  Tuple.Create(-189.42993),
                                  Tuple.Create(Double.PositiveInfinity),
                                  Tuple.Create(Double.Epsilon),
                                  Tuple.Create(1.934E-17),
                                  Tuple.Create(Double.NegativeInfinity),
                                  Tuple.Create(-0.000000000003588),
                                  null };
       Console.WriteLine("The values in unsorted order:");
       foreach (var value in values)
           if (value != null)
               Console.WriteLine("   {0}", value.Item1);
           else
               Console.WriteLine("   <null>");
       Console.WriteLine();

       Array.Sort(values, new DescendingComparer<Tuple<Double>>());

       Console.WriteLine("The values sorted in descending order:");
       foreach (var value in values)
           if (value != null)
               Console.WriteLine("   {0}", value.Item1);
           else
               Console.WriteLine("   <null>");
    }
}
// The example displays the following output:
//      The values in unsorted order:
//         13.54
//         NaN
//         -189.42993
//         Infinity
//         4.94065645841247E-324
//         1.934E-17
//         -Infinity
//         -3.588E-12
//         <null>
//
//      The values sorted in descending order:
//         Infinity
//         13.54
//         1.934E-17
//         4.94065645841247E-324
//         -3.588E-12
//         -189.42993
//         -Infinity
//         NaN
//         <null>

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 类
Tuple T1 成员
System 命名空间
IStructuralEquatable Equals


Tuple <(Of <(T1 >)>) ..::.IStructuralEquatable ..::.Equals 方法

Tuple
<
(Of
<
(
T1
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
Equals 方法
Tuple

返回一个值，该值根据指定的比较方法指示当前的 Tuple<(Of <(T1>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals
bool IStructuralEquatable.Equals(
    Object other,
    IEqualityComparer comparer
)
private:
virtual bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::Equals
private abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool
private override Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
与该实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个对象，定义用于评估两个对象是否相等的方法。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1>)>) 对象（该对象的单个组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。如果当前 Item1 对象的每个部分都与 Tuple<(Of <(T1>)>) 参数的相应部分匹配，则为 Item1；否则为 other。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1>)>) 对象（该对象的单个组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。如果当前 Item1 对象的每个部分都与 Tuple<(Of <(T1>)>) 参数的相应部分匹配，则为 Item1；否则为 other。

下面的示例定义一个 IEqualityComparer 实现，认为两个近似相等（即，一个值与另一个值相比，差别不超过 0.01 %）的浮点值相等 。

Imports System.Collections

Public Class Tuple1Comparer : Implements IEqualityComparer
   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
                   Implements IEqualityComparer.Equals
      ' Check if x is a floating point type. If x is, then y is.
      If TypeOf x Is Double Or TypeOf x Is Single Then
         ' Convert to Double values.
         Dim dblX As Double = CDbl(x)
         Dim dblY As Double = CDbl(y)
         If Double.IsNan(dblX) Or Double.IsInfinity(dblX) Or _
            Double.IsNan(dblY) Or Double.IsInfinity(dblY) Then
            Return dblX.Equals(dblY)
         Else
            Return Math.Abs(dblX - dblY) <= dblY * .0001
         End If
      Else
         Return x.Equals(y)
      End If
   End Function

   Public Overloads Function GetHashCode(obj As Object) As Integer _
                   Implements IEqualityComparer.GetHashCode
      Return obj.GetHashCode()
   End Function
End Class

Module Example
   Public Sub Main()
      Dim doubleTuple1 = Tuple.Create(12.3455)

      Dim doubleTuple2 = Tuple.Create(16.8912)
      Dim doubleTuple3 = Tuple.Create(12.3449599)

      ' Compare first tuple with a Tuple(Of Double) with a different value.
      TestEquality(doubleTuple1, doubleTuple2)
      ' Compare first tuple with a Tuple(Of Double) with the same value.
      TestEquality(doubleTuple1, doubleTuple3)
   End Sub

   Private Sub TestEquality(tuple As Tuple(Of Double), obj As Object)
      Try
         Console.WriteLine("{0} = {1}: {2}", tuple.ToString(),
                                             obj.ToString,
                                             DirectCAst(tuple, IStructuralEquatable).Equals(obj, New Tuple1Comparer()))

      Catch e As ArgumentException
         If obj.GetType.IsGenericType Then
            If obj.GetType().Name = "Tuple`1" Then
               Console.WriteLine("Cannot compare a Tuple(Of {0}) with a Tuple(Of {1}).",
                              tuple.Item1.GetType().Name, obj.Item1.GetType().Name)
            Else
               Console.WriteLine("Cannot compare a {0} with a {1}.", tuple.GetType().Name,
                                                                     obj.GetType().Name)
            End If
         Else
            Console.WriteLine("Cannot compare a {0} with a {1}.", tuple.GetType().Name,
                                                                  obj.GetType().Name)
         End If
      End Try
   End Sub
End Module
' The example displays the following output:
'       (12.3455) = (16.8912): False
'       (12.3455) = (12.3449599): True

using System;
using System.Collections;

public class Tuple1Comparer : IEqualityComparer
{
   new public bool Equals(object x, object y)
   {
      // Check if x is a floating point type. If x is, then y is.
      if (x is double | x is float)
      {
         // Convert to Double values.
         double dblX = (double) x;
         double dblY = (double) y;
         if (Double.IsNaN(dblX) | Double.IsInfinity(dblX) |
             Double.IsNaN(dblY) | Double.IsInfinity(dblY))
            return dblX.Equals(dblY);
         else
            return Math.Abs(dblX - dblY) <= dblX * .0001;
      }
      else
      {
         return x.Equals(y);
      }
   }

   public int GetHashCode(object obj)
   {
      return obj.GetHashCode();
   }
}

public class Example
{
   public static void Main()
   {
      var doubleTuple1 = Tuple.Create(12.3455);

      var doubleTuple2 = Tuple.Create(16.8912);
      var doubleTuple3 = Tuple.Create(12.3449599);

      // Compare first tuple with a Tuple<double> with a different value.
      TestEquality(doubleTuple1, doubleTuple2);
      //Compare first tuple with a Tuple<double> with the same value.
      TestEquality(doubleTuple1, doubleTuple3);
   }

   private static void TestEquality(Tuple<double> tuple, object obj)
   {
      Console.WriteLine("{0} = {1}: {2}", tuple.ToString(),
                                             obj.ToString(),
                                             ((IStructuralEquatable)tuple).Equals(obj, new Tuple1Comparer()));
   }
}
// The example displays the following output:
//       (12.3455) = (16.8912): False
//       (12.3455) = (12.3449599): True

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 类
Tuple T1 成员
System 命名空间
IEqualityComparer


Tuple <(Of <(T1 >)>) ..::.IStructuralEquatable ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
GetHashCode 方法
Tuple

使用指定的计算方法计算当前 Tuple<(Of <(T1>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer Implements IStructuralEquatable.GetHashCode
int IStructuralEquatable.GetHashCode(
    IEqualityComparer comparer
)
private:
virtual int GetHashCode(
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::GetHashCode
private abstract GetHashCode :
        comparer:IEqualityComparer -> int
private override GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个对象，其 GetHashCode 方法计算当前 Tuple<(Of <(T1>)>) 对象的哈希代码。

返回值

类型： System Int32
32 位带符号整数哈希代码。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

该方法只是包装对 comparer 对象的 IEqualityComparer..::.GetHashCode 实现的调用。

对于两个视为相等 Tuple<(Of <(T1>)>) 的对象，用于计算哈希代码的算法应当返回相同的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 类
Tuple T1 成员
System 命名空间


Tuple <(Of <(T1 >)>) ..::.ToString 方法

Tuple
<
(Of
<
(
T1
>
)
>
)
.
.
::
.
ToString 方法
Tuple

返回一个字符串，该字符串表示此 Tuple<(Of <(T1>)>) 实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此 Tuple<(Of <(T1>)>) 对象的字符串表示形式。

此方法所返回的字符串的格式为 (Item1)，其中 Item1 表示 Item1 属性的值。如果 Item1 的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则它表示为 String..::.Empty。 此方法所返回的字符串的格式为 (Item1)，其中 Item1 表示 Item1 属性的值。如果 Item1 的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则它表示为 String..::.Empty。

下面的示例演示 ToString 方法。

Module Example
   Public Sub Main()
      Dim tuple1Double = Tuple.Create(3.456e-18)
      DisplayTuple(tuple1Double)

      Dim tuple1String = Tuple.Create("Australia")
      DisplayTuple(tuple1String)

      Dim tuple1Bool = Tuple.Create(True)
      DisplayTuple(tuple1Bool)

      Dim tuple1Char = Tuple.Create("a"c)
      DisplayTuple(tuple1Char)
   End Sub

   Private Sub DisplayTuple(obj As Object)
      Console.WriteLine(obj.ToString())
   End Sub
End Module
' The example displays the following output:
'       (3.456E-18)
'       (Australia)
'       (True)
'       (a)

using System;

public class Example
{
   public static void Main()
   {
      var tuple1Double = Tuple.Create(3.456e-18);
      DisplayTuple(tuple1Double);

      var tuple1String = Tuple.Create("Australia");
      DisplayTuple(tuple1String);

      var tuple1Bool = Tuple.Create(true);
      DisplayTuple(tuple1Bool);

      var tuple1Char = Tuple.Create('a');
      DisplayTuple(tuple1Char);
   }

   private static void DisplayTuple(object obj)
   {
      Console.WriteLine(obj.ToString());
   }
}
// The example displays the following output:
//       (3.456E-18)
//       (Australia)
//       (True)
//       (a)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 类
Tuple T1 成员
System 命名空间


Tuple <(Of <(T1 >)>) 属性

Tuple
<
(Of
<
(
T1
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1 类型公开以下成员。

名称 说明
页首

参考

Tuple T1 类
System 命名空间


Tuple <(Of <(T1 >)>) ..::.Item1 属性

Tuple
<
(Of
<
(
T1
>
)
>
)
.
.
::
.
Item1 属性
Tuple

获取 Tuple<(Of <(T1>)>) 对象的单一分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item1 As T1
    Get
public T1 Item1 { get; }
public:
property T1 Item1 {
    T1 get ();
}
member Item1 : 'T1

属性值

类型： T1
当前 Tuple<(Of <(T1>)>) 对象的单一分量的值。

可以通过以下两种方式之一来确定 Item1 组件的类型：

  • 在 Item1 属性返回的值上调用 GetType 方法。

  • 通过检索代表 Tuple<(Of <(T1>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第一个元素。

该示例演示了这两种方法。

下面的示例显示两个单一实例及其组件的信息。

Imports System.Numerics

Module modMain
   Public Sub Main()
      Dim tuple1 = Tuple.Create(-1.23445e-32)
      ' Display information about this singleton.
      Dim tuple1Type As Type = tuple1.GetType()
      Console.WriteLine("First 1-Tuple:")
      Console.WriteLine("   Type: {0}", tuple1Type.Name)
      Console.WriteLine("   Generic Parameter Type: {0}",
                        tuple1Type.GetGenericArguments()(0))
      Console.WriteLine("   Component Value: {0}", tuple1.Item1)
      Console.WriteLine("   Component Value Type: {0}",
                        tuple1.Item1.GetType().Name)
      Console.WriteLine()

      Dim tuple2 As New Tuple(Of BigInteger)(1.83789322281780983781356676e103)
      ' Display information about this singleton.
      Dim tuple2Type As Type = tuple2.GetType()
      Console.WriteLine("Second 1-Tuple:")
      Console.WriteLine("   Type: {0}", tuple2Type.Name)
      Console.WriteLine("   Generic Parameter Type: {0}",
                        tuple2Type.GetGenericArguments()(0))
      Console.WriteLine("   Component Value: {0}", tuple2.Item1)
      Console.WriteLine("   Component Value Type: {0}",
                        tuple2.Item1.GetType().Name)
   End Sub
End Module
' The example displays the following output:
'       First 1-Tuple:
'          Type: Tuple`1
'          Generic Parameter Type: System.Double
'          Component Value: -1.23445E-32
'          Component Value Type: Double
'
'       Second 1-Tuple:
'          Type: Tuple`1
'          Generic Parameter Type: System.Numerics.BigInteger
'          Component Value: 1.8378932228178098168858909492E+103
'          Component Value Type: BigInteger

using System;
using System.Numerics;

public class Example
{
   public static void Main()
   {
      var tuple1 = Tuple.Create(-1.23445e-32);
      // Display information about this singleton.
      Type tuple1Type = tuple1.GetType();
      Console.WriteLine("First 1-Tuple:");
      Console.WriteLine("   Type: {0}", tuple1Type.Name);
      Console.WriteLine("   Generic Parameter Type: {0}",
                        tuple1Type.GetGenericArguments()[0]);
      Console.WriteLine("   Component Value: {0}", tuple1.Item1);
      Console.WriteLine("   Component Value Type: {0}",
                        tuple1.Item1.GetType().Name);
      Console.WriteLine();

      var tuple2 = Tuple.Create((BigInteger)1.83789322281780983781356676e103);
      // Display information about this singleton.
      Type tuple2Type = tuple2.GetType();
      Console.WriteLine("Second 1-Tuple:");
      Console.WriteLine("   Type: {0}", tuple2Type.Name);
      Console.WriteLine("   Generic Parameter Type: {0}",
                        tuple2Type.GetGenericArguments()[0]);
      Console.WriteLine("   Component Value: {0}", tuple2.Item1);
      Console.WriteLine("   Component Value Type: {0}",
                        tuple2.Item1.GetType().Name);
   }
}
// The example displays the following output:
//       First 1-Tuple:
//          Type: Tuple`1
//          Generic Parameter Type: System.Double
//          Component Value: -1.23445E-32
//          Component Value Type: Double
//
//       Second 1-Tuple:
//          Type: Tuple`1
//          Generic Parameter Type: System.Numerics.BigInteger
//          Component Value: 1.8378932228178098168858909492E+103
//          Component Value Type: BigInteger

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1 类
Tuple T1 成员
System 命名空间


Tuple <(Of <(T1, T2 >)>) 类

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
类
成员

表示 2 元组，即二元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class Tuple(Of T1, T2) _
    Implements IStructuralEquatable, IStructuralComparable, IComparable
[SerializableAttribute]
public class Tuple<T1, T2> : IStructuralEquatable, IStructuralComparable,
    IComparable

[SerializableAttribute]
generic<typename T1, typename T2>
public ref class Tuple : IStructuralEquatable, IStructuralComparable,
    IComparable
[<SerializableAttribute>]
type Tuple<'T1, 'T2> =
    class
        interface IStructuralEquatable
        interface IStructuralComparable
        interface IComparable
    end

类型参数

T1

此元组的第一个组件的类型。

T2

此元组的第二个组件的类型。

元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2>)>) 类表示一个二元组，即具有两个分量的元组。2 元组类似于 KeyValuePair<(Of <(TKey, TValue>)>) 结构。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2>)>) 类表示一个二元组，即具有两个分量的元组。2 元组类似于 KeyValuePair<(Of <(TKey, TValue>)>) 结构。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2>)>) 类表示一个二元组，即具有两个分量的元组。2 元组类似于 KeyValuePair<(Of <(TKey, TValue>)>) 结构。

可以通过调用 Tuple<(Of <(T1, T2>)>) 构造函数或静态 Tuple..::.Create<(Of <(T1, T2>)>)(T1, T2) 方法来实例化 Tuple<(Of <(T1, T2>)>) 对象。通过使用只读的 Item1 和 Item2 实例属性，可以检索元组中组件的值。 可以通过调用 Tuple<(Of <(T1, T2>)>) 构造函数或静态 Tuple..::.Create<(Of <(T1, T2>)>)(T1, T2) 方法来实例化 Tuple<(Of <(T1, T2>)>) 对象。通过使用只读的 Item1 和 Item2 实例属性，可以检索元组中组件的值。

元组通常有四种不同的使用方式：

  • 表示一组数据。例如，元组可以表示数据库中的一条记录，并且其组件可以表示该记录的字段。 表示一组数据。例如，元组可以表示数据库中的一条记录，并且其组件可以表示该记录的字段。

  • 提供对数据集的轻松访问和操作。下面的示例定义一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生的姓名以及对丁的测验分数。然后，它循环访问数组来计算平均测试分数。 提供对数据集的轻松访问和操作。下面的示例定义一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生的姓名以及对丁的测验分数。然后，它循环访问数组来计算平均测试分数。 提供对数据集的轻松访问和操作。下面的示例定义一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生的姓名以及对丁的测验分数。然后，它循环访问数组来计算平均测试分数。

    Module Example
   Public Sub Main()
      Dim scores() As Tuple(Of String, Nullable(Of Integer)) =
                      { New Tuple(Of String, Nullable(Of Integer))("Jack", 78),
                        New Tuple(Of String, Nullable(Of Integer))("Abbey", 92),
                        New Tuple(Of String, Nullable(Of Integer))("Dave", 88),
                        New Tuple(Of String, Nullable(Of Integer))("Sam", 91),
                        New Tuple(Of String, Nullable(Of Integer))("Ed", Nothing),
                        New Tuple(Of String, Nullable(Of Integer))("Penelope", 82),
                        New Tuple(Of String, Nullable(Of Integer))("Linda", 99),
                        New Tuple(Of String, Nullable(Of Integer))("Judith", 84) }
      Dim number As Integer
      Dim mean As Double = ComputeMean(scores, number)
      Console.WriteLine("Average test score: {0:N2} (n={1})", mean, number)
   End Sub

   Private Function ComputeMean(scores() As Tuple(Of String, Nullable(Of Integer)),
                                ByRef n As Integer) As Double
      n = 0
      Dim sum As Integer
      For Each score In scores
         If score.Item2.HasValue Then
            n += 1
            sum += score.Item2.Value
         End If
      Next
      If n > 0 Then
         Return sum / n
      Else
         Return 0
      End If
   End Function
End Module
' The example displays the following output:
'       Average test score: 88 (n=7)

    using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, Nullable<int>>[] scores =
                    { new Tuple<string, Nullable<int>>("Jack", 78),
                      new Tuple<string, Nullable<int>>("Abbey", 92),
                      new Tuple<string, Nullable<int>>("Dave", 88),
                      new Tuple<string, Nullable<int>>("Sam", 91),
                      new Tuple<string, Nullable<int>>("Ed", null),
                      new Tuple<string, Nullable<int>>("Penelope", 82),
                      new Tuple<string, Nullable<int>>("Linda", 99),
                      new Tuple<string, Nullable<int>>("Judith", 84) };
      int number;
      double mean = ComputeMean(scores, out number);
      Console.WriteLine("Average test score: {0:N2} (n={1})", mean, number);
   }

   private static double ComputeMean(Tuple<string, Nullable<int>>[] scores, out int n)
   {
      n = 0;
      int sum = 0;
      foreach (var score in scores)
      {
         if (score.Item2.HasValue)
         {
            n += 1;
            sum += score.Item2.Value;
         }
      }
      if (n > 0)
         return sum / (double) n;
      else
         return 0;
   }
}
// The example displays the following output:
//       Average test score: 88 (n=7)

  • 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，下面的示例使用 Tuple<(Of <(T1, T2>)>) 对象返回从整数除法得到的商和余数。 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，下面的示例使用 Tuple<(Of <(T1, T2>)>) 对象返回从整数除法得到的商和余数。

    Module modMain
   Public Sub Main()
      Dim dividend, divisor As Integer
      Dim result As Tuple(Of Integer, Integer)

      dividend = 136945 : divisor = 178
      result = IntegerDivide(dividend, divisor)
      If result IsNot Nothing Then
         Console.WriteLine("{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2)
      Else
         Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor)
      End If

      dividend = Int32.MaxValue : divisor = -2073
      result = IntegerDivide(dividend, divisor)
      If result IsNot Nothing Then
         Console.WriteLine("{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2)
      Else
         Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor)
      End If
   End Sub

   Private Function IntegerDivide(dividend As Integer, divisor As Integer) As Tuple(Of Integer, Integer)
      Try
         Dim remainder As Integer
         Dim quotient As Integer = Math.DivRem(dividend, divisor, remainder)
         Return New Tuple(Of Integer, Integer)(quotient, remainder)
      Catch e As DivideByZeroException
         Return Nothing
      End Try
   End Function
End Module
' The example displays the following output:
'       136945 \ 178 = 769, remainder 63
'       2147483647 \ -2073 = -1035930, remainder 757

    using System;

public class Class1
{
   public static void Main()
   {
      int dividend, divisor;
      Tuple<int, int> result;

      dividend = 136945; divisor = 178;
      result = IntegerDivide(dividend, divisor);
      if (result != null)
         Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2);
      else
         Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);

      dividend = Int32.MaxValue; divisor = -2073;
      result = IntegerDivide(dividend, divisor);
      if (result != null)
         Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2);
      else
         Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);
   }

   private static Tuple<int, int> IntegerDivide(int dividend, int divisor)
   {
      try {
         int remainder;
         int quotient = Math.DivRem(dividend, divisor, out remainder);
         return new Tuple<int, int>(quotient, remainder);
      }
      catch (DivideByZeroException) {
         return null;
      }
   }
}
// The example displays the following output:
//       136945 \ 178 = 769, remainder 63
//       2147483647 \ -2073 = -1035930, remainder 757

  • 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2>)>) 对象作为方法参数提供，则可以提供具有两项数据的线程启动例程。
通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2>)>) 对象作为方法参数提供，则可以提供具有两项数据的线程启动例程。
通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2>)>) 对象作为方法参数提供，则可以提供具有两项数据的线程启动例程。

System
System..::.Tuple<(Of <(T1, T2>)>)Tuple
System..::.Tuple<(Of <(T1, T2>)>)T1, T2
System..::.Tuple<(Of <(T1, T2>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 成员
System 命名空间
Tuple
Tuple T1
Tuple T1, T2, T3
Tuple T1, T2, T3, T4
Tuple T1, T2, T3, T4, T5
Tuple T1, T2, T3, T4, T5, T6
Tuple T1, T2, T3, T4, T5, T6, T7
Tuple T1, T2, T3, T4, T5, T6, T7, TRest


Tuple <(Of <(T1, T2 >)>) 成员

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

表示 2 元组，即二元组。

Tuple T1, T2 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2 类
System 命名空间


Tuple <(Of <(T1, T2 >)>) 构造函数

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
构造函数
Tuple

初始化 Tuple<(Of <(T1, T2>)>) 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    item1 As T1, _
    item2 As T2 _
)
public Tuple(
    T1 item1,
    T2 item2
)
public:
Tuple(
    T1 item1,
    T2 item2
)
new :
        item1:'T1 *
        item2:'T2 -> Tuple

参数

item1
类型： T1
此元组的第一个组件的值。
item2
类型： T2
此元组的第二个组件的值。

还可以使用 Tuple..::.Create<(Of <(T1, T2>)>)(T1, T2) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2>)>)(T1, T2) 方法来实例化一个二元组，其分量的类型为 String 和 Double 。 还可以使用 Tuple..::.Create<(Of <(T1, T2>)>)(T1, T2) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2>)>)(T1, T2) 方法来实例化一个二元组，其分量的类型为 String 和 Double 。

Dim tuple2 = Tuple.Create("New York", 32.68)

var tuple2 = Tuple.Create("New York", 32.68);

这等效于下面的对 Tuple<(Of <(T1, T2>)>) 类构造函数的调用。

Dim tuple2 = New Tuple(Of String, Double)("New York", 32.68)

var tuple2 = new Tuple<string, double>("New York", 32.68);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间


Tuple <(Of <(T1, T2 >)>) 方法

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2 类
System 命名空间


Tuple <(Of <(T1, T2 >)>) ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
.
.
::
.
Equals 方法
Tuple

返回一个值，该值指示当前的 Tuple<(Of <(T1, T2>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

在下列情况下，obj 参数视为等于当前实例：

  • 它是 Tuple<(Of <(T1, T2>)>) 对象。

  • 它的两个组件的类型与当前实例相同。

  • 它的两个组件的值与当前实例的对应值相同。

下面的示例调用 Tuple<(Of <(T1, T2>)>)..::.Equals(Object) 方法，来确定 Tuple<(Of <(T1, T2>)>) 对象数组中的任何对象是否彼此相等。输出表明，仅当比较所有部分的值都相等的 Tuple<(Of <(T1, T2>)>) 对象时，Equals(Object) 方法才会返回 true。 下面的示例调用 Tuple<(Of <(T1, T2>)>)..::.Equals(Object) 方法，来确定 Tuple<(Of <(T1, T2>)>) 对象数组中的任何对象是否彼此相等。输出表明，仅当比较所有部分的值都相等的 Tuple<(Of <(T1, T2>)>) 对象时，Equals(Object) 方法才会返回 true。

Module Example
   Public Sub Main()
      Dim scores() As Tuple(Of String, Nullable(Of Integer)) =
                      { New Tuple(Of String, Nullable(Of Integer))("Dan", 90),
                        New Tuple(Of String, Nullable(Of Integer))("Ernie", Nothing),
                        New Tuple(Of String, Nullable(Of Integer))("Jill", 88),
                        New Tuple(Of String, Nullable(Of Integer))("Ernie", Nothing),
                        New Tuple(Of String, Nullable(Of Integer))("Nancy", 88),
                        New Tuple(Of String, Nullable(Of Integer))("Dan", 90) }

      ' Compare the Tuple objects
      For ctr As Integer = 0 To scores.Length - 1
         Dim currentTuple As Tuple(Of String, Nullable(Of Integer)) = scores(ctr)
         For innerCtr As Integer = ctr + 1 To scores.Length - 1
            Console.WriteLine("{0} = {1}: {2}",
                              scores(ctr), scores(innerCtr),
                              scores(ctr).Equals(scores(innerCtr)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       (Dan, 90) = (Ernie, ): False
'       (Dan, 90) = (Jill, 88): False
'       (Dan, 90) = (Ernie, ): False
'       (Dan, 90) = (Nancy, 88): False
'       (Dan, 90) = (Dan, 90): True
'
'       (Ernie, ) = (Jill, 88): False
'       (Ernie, ) = (Ernie, ): True
'       (Ernie, ) = (Nancy, 88): False
'       (Ernie, ) = (Dan, 90): False
'
'       (Jill, 88) = (Ernie, ): False
'       (Jill, 88) = (Nancy, 88): False
'       (Jill, 88) = (Dan, 90): False
'
'       (Ernie, ) = (Nancy, 88): False
'       (Ernie, ) = (Dan, 90): False
'
'       (Nancy, 88) = (Dan, 90): False

using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, Nullable<int>>[] scores =
                      { new Tuple<string, Nullable<int>>("Dan", 90),
                        new Tuple<string, Nullable<int>>("Ernie", null),
                        new Tuple<string, Nullable<int>>("Jill", 88),
                        new Tuple<string, Nullable<int>>("Ernie", null),
                        new Tuple<string, Nullable<int>>("Nancy", 88),
                        new Tuple<string, Nullable<int>>("Dan", 90) };

      // Compare the Tuple objects
      for (int ctr = 0; ctr < scores.Length; ctr++)
      {
         Tuple<string, Nullable<int>> currentTuple = scores[ctr];
         for (int innerCtr = ctr + 1; innerCtr < scores.Length; innerCtr++)
         {
            Console.WriteLine("{0} = {1}: {2}",
                              scores[ctr], scores[innerCtr],
                              scores[ctr].Equals(scores[innerCtr]));
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       (Dan, 90) = (Ernie, ): False
//       (Dan, 90) = (Jill, 88): False
//       (Dan, 90) = (Ernie, ): False
//       (Dan, 90) = (Nancy, 88): False
//       (Dan, 90) = (Dan, 90): True
//
//       (Ernie, ) = (Jill, 88): False
//       (Ernie, ) = (Ernie, ): True
//       (Ernie, ) = (Nancy, 88): False
//       (Ernie, ) = (Dan, 90): False
//
//       (Jill, 88) = (Ernie, ): False
//       (Jill, 88) = (Nancy, 88): False
//       (Jill, 88) = (Dan, 90): False
//
//       (Ernie, ) = (Nancy, 88): False
//       (Ernie, ) = (Dan, 90): False
//
//       (Nancy, 88) = (Dan, 90): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间


Tuple <(Of <(T1, T2 >)>) ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
.
.
::
.
GetHashCode 方法
Tuple

返回当前 Tuple<(Of <(T1, T2>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间


Tuple <(Of <(T1, T2 >)>) ..::.IComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
.
.
::
.
IComparable
.
.
::
.
CompareTo 方法
Tuple

将当前 Tuple<(Of <(T1, T2>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是位于指定对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ obj As Object _ ) As Integer Implements IComparable.CompareTo
int IComparable.CompareTo( Object obj )
private: virtual int CompareTo( Object^ obj ) sealed = IComparable::CompareTo
private abstract CompareTo : obj:Object -> int private override CompareTo : obj:Object -> int
参数
obj
类型： System Object
与当前实例进行比较的对象。
返回值
类型： System Int32
一个有符号整数，指示此实例与
obj
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
obj
之前。
零
此实例与
obj
在排序顺序中的位置相同。
一个正整数
此实例在
obj
之后。
实现
异常 | 条件
ArgumentException | obj 不是 Tuple<(Of <(T1, T2>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2>)>) 实例强制转换为 IComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2>)>) 实例强制转换为 IComparable 接口时使用它。

此方法提供 Tuple<(Of <(T1, T2>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法的默认重载（如 Array..::.Sort(Array) 和 SortedList..::.Add）调用，用于对集合成员进行排序。 此方法提供 Tuple<(Of <(T1, T2>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法的默认重载（如 Array..::.Sort(Array) 和 SortedList..::.Add）调用，用于对集合成员进行排序。

警告说明 警告

Tuple<(Of <(T1, T2>)>)..::.IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。 Tuple<(Of <(T1, T2>)>)..::.IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。 Tuple<(Of <(T1, T2>)>)..::.IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。

Tuple<(Of <(T1, T2>)>)..::.IComparable..::.CompareTo 方法使用 Comparer<(Of <(T>)>)..::.Default 比较器。

下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。

Module Example
   Public Sub Main()
      Dim scores() As Tuple(Of String, Nullable(Of Integer)) =
                      { New Tuple(Of String, Nullable(Of Integer))("Jack", 78),
                        New Tuple(Of String, Nullable(Of Integer))("Abbey", 92),
                        New Tuple(Of String, Nullable(Of Integer))("Dave", 88),
                        New Tuple(Of String, Nullable(Of Integer))("Sam", 91),
                        New Tuple(Of String, Nullable(Of Integer))("Ed", Nothing),
                        New Tuple(Of String, Nullable(Of Integer))("Penelope", 82),
                        New Tuple(Of String, Nullable(Of Integer))("Linda", 99),
                        New Tuple(Of String, Nullable(Of Integer))("Judith", 84) }

      Console.WriteLine("The values in unsorted order:")
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
      Console.WriteLine()

      Array.Sort(scores)

      Console.WriteLine("The values in sorted order:")
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
   End Sub
End Module
' The example displays the following output;
'       The values in unsorted order:
'       (Jack, 78)
'       (Abbey, 92)
'       (Dave, 88)
'       (Sam, 91)
'       (Ed, )
'       (Penelope, 82)
'       (Linda, 99)
'       (Judith, 84)
'
'       The values in sorted order:
'       (Abbey, 92)
'       (Dave, 88)
'       (Ed, )
'       (Jack, 78)
'       (Judith, 84)
'       (Linda, 99)
'       (Penelope, 82)
'       (Sam, 91)

using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, Nullable<int>>[] scores =
                    { new Tuple<string, Nullable<int>>("Jack", 78),
                      new Tuple<string, Nullable<int>>("Abbey", 92),
                      new Tuple<string, Nullable<int>>("Dave", 88),
                      new Tuple<string, Nullable<int>>("Sam", 91),
                      new Tuple<string, Nullable<int>>("Ed", null),
                      new Tuple<string, Nullable<int>>("Penelope", 82),
                      new Tuple<string, Nullable<int>>("Linda", 99),
                      new Tuple<string, Nullable<int>>("Judith", 84) };

      Console.WriteLine("The values in unsorted order:");
      foreach (Tuple<string, Nullable<int>> score in scores)
         Console.WriteLine(score.ToString());

      Console.WriteLine();

      Array.Sort(scores);

      Console.WriteLine("The values in sorted order:");
      foreach (Tuple<string, Nullable<int>> score in scores)
         Console.WriteLine(score.ToString());
   }
}
// The example displays the following output;
//       The values in unsorted order:
//       (Jack, 78)
//       (Abbey, 92)
//       (Dave, 88)
//       (Sam, 91)
//       (Ed, )
//       (Penelope, 82)
//       (Linda, 99)
//       (Judith, 84)
//
//       The values in sorted order:
//       (Abbey, 92)
//       (Dave, 88)
//       (Ed, )
//       (Jack, 78)
//       (Judith, 84)
//       (Linda, 99)
//       (Penelope, 82)
//       (Sam, 91)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间
Equals Equals()()()


Tuple <(Of <(T1, T2 >)>) ..::.IStructuralComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
.
.
::
.
IStructuralComparable
.
.
::
.
CompareTo 方法
Tuple

使用指定的比较器将当前的 Tuple<(Of <(T1, T2>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer Implements IStructuralComparable.CompareTo
int IStructuralComparable.CompareTo( Object other, IComparer comparer )
private: virtual int CompareTo( Object^ other, IComparer^ comparer ) sealed = IStructuralComparable::CompareTo
private abstract CompareTo : other:Object * comparer:IComparer -> int private override CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个对象，提供自定义比较规则。
返回值
类型： System Int32
一个有符号整数，指示此实例与
other
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
other
之前。
零
此实例与
other
在排序顺序中的位置相同。
一个正整数
此实例在
other
之后。
实现
异常 | 条件
ArgumentException | other 不是 Tuple<(Of <(T1, T2>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2>)>) 实例强制转换为 IStructuralComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2>)>) 实例强制转换为 IStructuralComparable 接口时使用它。

虽然可以直接调用此方法，但它通常由包含 IComparer 参数的集合排序方法调用，用于对集合成员进行排序。例如，它由 Array..::.Sort(Array, IComparer) 方法和使用 SortedList..::.SortedList(IComparer) 构造函数实例化的 SortedList 对象的 Add 方法调用。

警告说明 警告

IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。

下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建了一个 Tuple<(Of <(T1, T2>)>) 对象数组，其中包含学生姓名和测验分数。它将无序显示数组中每个元组的元素、对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。

Imports System.Collections
Imports System.Collections.Generic

Public Class ScoreComparer(Of T1, T2) : Implements IComparer
   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare
      Dim tX As Tuple(Of T1, T2) = TryCast(x, Tuple(Of T1, T2))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY As Tuple(Of T1, T2) = DirectCast(y, Tuple(Of T1, T2))
         Return Comparer(Of T2).Default.Compare(tx.Item2, tY.Item2)
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim scores() As Tuple(Of String, Nullable(Of Integer)) =
                      { New Tuple(Of String, Nullable(Of Integer))("Jack", 78),
                        New Tuple(Of String, Nullable(Of Integer))("Abbey", 92),
                        New Tuple(Of String, Nullable(Of Integer))("Dave", 88),
                        New Tuple(Of String, Nullable(Of Integer))("Sam", 91),
                        New Tuple(Of String, Nullable(Of Integer))("Ed", Nothing),
                        New Tuple(Of String, Nullable(Of Integer))("Penelope", 82),
                        New Tuple(Of String, Nullable(Of Integer))("Linda", 99),
                        New Tuple(Of String, Nullable(Of Integer))("Judith", 84) }

      Console.WriteLine("The values in unsorted order:")
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
      Console.WriteLine()

      Array.Sort(scores, New ScoreComparer(Of String, Nullable(Of Integer))())

      Console.WriteLine("The values in sorted order:")
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
   End Sub
End Module
' The example displays the following output;
'       The values in unsorted order:
'       (Jack, 78)
'       (Abbey, 92)
'       (Dave, 88)
'       (Sam, 91)
'       (Ed, )
'       (Penelope, 82)
'       (Linda, 99)
'       (Judith, 84)
'
'       The values in sorted order:
'       (Ed, )
'       (Jack, 78)
'       (Penelope, 82)
'       (Judith, 84)
'       (Dave, 88)
'       (Sam, 91)
'       (Abbey, 92)
'       (Linda, 99)

using System;
using System.Collections;
using System.Collections.Generic;

public class ScoreComparer<T1, T2> : IComparer
{
   public int Compare(object x, object y)
   {
      Tuple<T1, T2> tX = x as Tuple<T1,T2>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         Tuple<T1, T2> tY = y as Tuple<T1, T2>;
         return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2);
      }
   }
}

public class Example
{
   public static void Main()
   {
      Tuple<string, Nullable<int>>[] scores =
                    { new Tuple<string, Nullable<int>>("Jack", 78),
                      new Tuple<string, Nullable<int>>("Abbey", 92),
                      new Tuple<string, Nullable<int>>("Dave", 88),
                      new Tuple<string, Nullable<int>>("Sam", 91),
                      new Tuple<string, Nullable<int>>("Ed", null),
                      new Tuple<string, Nullable<int>>("Penelope", 82),
                      new Tuple<string, Nullable<int>>("Linda", 99),
                      new Tuple<string, Nullable<int>>("Judith", 84) };

      Console.WriteLine("The values in unsorted order:");
      foreach (var score in scores)
         Console.WriteLine(score.ToString());

      Console.WriteLine();

      Array.Sort(scores, new ScoreComparer<string, Nullable<int>>());

      Console.WriteLine("The values in sorted order:");
      foreach (var score in scores)
         Console.WriteLine(score.ToString());
   }
}
// The example displays the following output;
//       The values in unsorted order:
//       (Jack, 78)
//       (Abbey, 92)
//       (Dave, 88)
//       (Sam, 91)
//       (Ed, )
//       (Penelope, 82)
//       (Linda, 99)
//       (Judith, 84)
//
//       The values in sorted order:
//       (Ed, )
//       (Jack, 78)
//       (Penelope, 82)
//       (Judith, 84)
//       (Dave, 88)
//       (Sam, 91)
//       (Abbey, 92)
//       (Linda, 99)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间
IStructuralEquatable Equals


Tuple <(Of <(T1, T2 >)>) ..::.IStructuralEquatable ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
Equals 方法
Tuple

返回一个值，该值根据指定的比较方法指示当前的 Tuple<(Of <(T1, T2>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals
bool IStructuralEquatable.Equals(
    Object other,
    IEqualityComparer comparer
)
private:
virtual bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::Equals
private abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool
private override Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
与该实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个对象，定义用于评估两个对象是否相等的方法。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IStructuralEquatable..::.Equals 实现。IStructuralEquatable..::.Equals 方法首先将要比较的 Tuple<(Of <(T1, T2>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2>)>) 对象的 Item2 值。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IStructuralEquatable..::.Equals 实现。IStructuralEquatable..::.Equals 方法首先将要比较的 Tuple<(Of <(T1, T2>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2>)>) 对象的 Item2 值。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IStructuralEquatable..::.Equals 实现。IStructuralEquatable..::.Equals 方法首先将要比较的 Tuple<(Of <(T1, T2>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2>)>) 对象的 Item2 值。

下例定义一个 Item2Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2>)>) 对象的 Item1 属性值时，该方法始终返回 true。然后，该方法调用 IStructuralEquatable..::.Equals 方法来评估对象的 Item2 属性值。因此，该方法仅基于 Item2 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2>)>) 对象的数据集的结果，用于记录跑步者的名称以及他们所跑的距离。 下例定义一个 Item2Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2>)>) 对象的 Item1 属性值时，该方法始终返回 true。然后，该方法调用 IStructuralEquatable..::.Equals 方法来评估对象的 Item2 属性值。因此，该方法仅基于 Item2 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2>)>) 对象的数据集的结果，用于记录跑步者的名称以及他们所跑的距离。 下例定义一个 Item2Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2>)>) 对象的 Item1 属性值时，该方法始终返回 true。然后，该方法调用 IStructuralEquatable..::.Equals 方法来评估对象的 Item2 属性值。因此，该方法仅基于 Item2 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2>)>) 对象的数据集的结果，用于记录跑步者的名称以及他们所跑的距离。 下例定义一个 Item2Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2>)>) 对象的 Item1 属性值时，该方法始终返回 true。然后，该方法调用 IStructuralEquatable..::.Equals 方法来评估对象的 Item2 属性值。因此，该方法仅基于 Item2 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2>)>) 对象的数据集的结果，用于记录跑步者的名称以及他们所跑的距离。

Imports System.Collections

Public Class Item2Comparer(Of T1, T2) : Implements IEqualityComparer

   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
                   Implements IEqualityComparer.Equals
      ' Return true for all values of Item1.
      If TypeOf x Is T1 Then
         Return True
      Else
         Return x.Equals(y)
      End If
   End Function

   Public Overloads Function GetHashCode(obj As Object) As Integer _
                    Implements IEqualityComparer.GetHashCode
      If TypeOf obj Is T1 Then
         Return CType(obj, T1).GetHashCode()
      Else
         Return CType(obj, T2).GetHashCode()
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim distancesWalked() = {
                        Tuple.Create("Jan", Double.NaN),
                        Tuple.Create("Joe", Double.NaN),
                        Tuple.Create("Adam", 1.36),
                        Tuple.Create("Selena", 2.01),
                        Tuple.Create("Jake", 1.36) }
      For ctr As Integer = 0 To distancesWalked.Length - 1
         Dim distanceWalked As Tuple(Of String, Double) = distancesWalked(ctr)
         For ctr2 As Integer = ctr + 1 To distancesWalked.Length - 1
            Console.WriteLine("{0} = {1}: {2}", distanceWalked,
                              distancesWalked(ctr2),
                              DirectCast(distanceWalked, IStructuralEquatable).Equals(distancesWalked(ctr2),
                                                    new Item2Comparer(Of String, Double)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       (Jan, NaN) = (Joe, NaN): True
'       (Jan, NaN) = (Adam, 1.36): False
'       (Jan, NaN) = (Selena, 2.01): False
'       (Jan, NaN) = (Jake, 1.36): False
'
'       (Joe, NaN) = (Adam, 1.36): False
'       (Joe, NaN) = (Selena, 2.01): False
'       (Joe, NaN) = (Jake, 1.36): False
'
'       (Adam, 1.36) = (Selena, 2.01): False
'       (Adam, 1.36) = (Jake, 1.36): True
'
'       (Selena, 2.01) = (Jake, 1.36): False

using System;
using System.Collections;

public class Item2Comparer<T1, T2> : IEqualityComparer
{
   new public bool Equals(object x, object y)
   {
      // Return true for all values of Item1.
      if (x is T1)
      //if (typeof(x) is string)
         return true;
      else
         return x.Equals(y);
   }

   public int GetHashCode(object obj)
   {
      if (obj is T1)
         return ((T1) obj).GetHashCode();
      else
         return ((T2) obj).GetHashCode();
   }
}

public class Example
{
   public static void Main()
   {
      Tuple<string, double>[] distancesWalked = {
                        Tuple.Create("Jan", Double.NaN),
                        Tuple.Create("Joe", Double.NaN),
                        Tuple.Create("Adam", 1.36),
                        Tuple.Create("Selena", 2.01),
                        Tuple.Create("Jake", 1.36) };
      for (int ctr = 0; ctr < distancesWalked.Length; ctr++)
      {
         Tuple<string, double> distanceWalked = distancesWalked[ctr];
         for (int ctr2 = ctr + 1; ctr2 < distancesWalked.Length; ctr2++)
         {
            Console.WriteLine("{0} = {1}: {2}", distanceWalked,
                              distancesWalked[ctr2],
                              ((IStructuralEquatable)distanceWalked).Equals(distancesWalked[ctr2],
                                                    new Item2Comparer<string, double>()));
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       (Jan, NaN) = (Joe, NaN): True
//       (Jan, NaN) = (Adam, 1.36): False
//       (Jan, NaN) = (Selena, 2.01): False
//       (Jan, NaN) = (Jake, 1.36): False
//
//       (Joe, NaN) = (Adam, 1.36): False
//       (Joe, NaN) = (Selena, 2.01): False
//       (Joe, NaN) = (Jake, 1.36): False
//
//       (Adam, 1.36) = (Selena, 2.01): False
//       (Adam, 1.36) = (Jake, 1.36): True
//
//       (Selena, 2.01) = (Jake, 1.36): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间
IEqualityComparer


Tuple <(Of <(T1, T2 >)>) ..::.IStructuralEquatable ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
GetHashCode 方法
Tuple

使用指定的计算方法计算当前 Tuple<(Of <(T1, T2>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer Implements IStructuralEquatable.GetHashCode
int IStructuralEquatable.GetHashCode(
    IEqualityComparer comparer
)
private:
virtual int GetHashCode(
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::GetHashCode
private abstract GetHashCode :
        comparer:IEqualityComparer -> int
private override GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个对象，其 GetHashCode 方法计算当前 Tuple<(Of <(T1, T2>)>) 对象的哈希代码。

返回值

类型： System Int32
32 位带符号整数哈希代码。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

该方法只是包装对 comparer 对象的 IEqualityComparer..::.GetHashCode 实现的调用。

对于两个视为相等 Tuple<(Of <(T1, T2>)>) 的对象，用于计算哈希代码的算法应当返回相同的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间


Tuple <(Of <(T1, T2 >)>) ..::.ToString 方法

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
.
.
::
.
ToString 方法
Tuple

返回一个字符串，该字符串表示此 Tuple<(Of <(T1, T2>)>) 实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此 Tuple<(Of <(T1, T2>)>) 对象的字符串表示形式。

此方法所返回的字符串的格式为 (Item1, Item2)，其中 Item1 和 Item2 表示 Item1 和 Item2 属性的值。如果任何一个属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则它表示为 String..::.Empty。 此方法所返回的字符串的格式为 (Item1, Item2)，其中 Item1 和 Item2 表示 Item1 和 Item2 属性的值。如果任何一个属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则它表示为 String..::.Empty。

下面的示例演示 ToString 方法。

Module modMain
   Public Sub Main()
      Dim scores() As Tuple(Of String, Nullable(Of Integer)) =
                      { New Tuple(Of String, Nullable(Of Integer))("Abbey", 92),
                        New Tuple(Of String, Nullable(Of Integer))("Dave", 88),
                        New Tuple(Of String, Nullable(Of Integer))("Ed", Nothing),                        New Tuple(Of String, Nullable(Of Integer))("Jack", 78),
                        New Tuple(Of String, Nullable(Of Integer))("Linda", 99),
                        New Tuple(Of String, Nullable(Of Integer))("Judith", 84),
                        New Tuple(Of String, Nullable(Of Integer))("Penelope", 82),
                        New Tuple(Of String, Nullable(Of Integer))("Sam", 91) }
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'       (Abbey, 92)
'       (Dave, 88)
'       (Ed, )
'       (Jack, 78)
'       (Linda, 99)
'       (Judith, 84)
'       (Penelope, 82)
'       (Sam, 91)

using System;

public class Class1
{
   public static void Main()
   {
      Tuple<string, Nullable<int>>[] scores =
                      { new Tuple<string, Nullable<int>>("Abbey", 92),
                        new Tuple<string, Nullable<int>>("Dave", 88),
                        new Tuple<string, Nullable<int>>("Ed", null),
                        new Tuple<string, Nullable<int>>("Jack", 78),
                        new Tuple<string, Nullable<int>>("Linda", 99),
                        new Tuple<string, Nullable<int>>("Judith", 84),
                        new Tuple<string, Nullable<int>>("Penelope", 82),
                        new Tuple<string, Nullable<int>>("Sam", 91) };
      foreach (var score in scores)
         Console.WriteLine(score.ToString());
   }
}
// The example displays the following output:
//       (Abbey, 92)
//       (Dave, 88)
//       (Ed, )
//       (Jack, 78)
//       (Linda, 99)
//       (Judith, 84)
//       (Penelope, 82)
//       (Sam, 91)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间


Tuple <(Of <(T1, T2 >)>) 属性

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2 类型公开以下成员。

名称 说明
页首

参考

Tuple T1, T2 类
System 命名空间


Tuple <(Of <(T1, T2 >)>) ..::.Item1 属性

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
.
.
::
.
Item1 属性
Tuple

获取当前 Tuple<(Of <(T1, T2>)>) 对象的第一个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item1 As T1
    Get
public T1 Item1 { get; }
public:
property T1 Item1 {
    T1 get ();
}
member Item1 : 'T1

属性值

类型： T1
当前 Tuple<(Of <(T1, T2>)>) 对象的第一个分量的值。

您可以通过以下两种方式之一动态确定 Item1 组件的类型：

  • 对 GetType 属性所返回的值调用 Item1 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第一个元素。

该示例演示如何使用 Item1 和 Item2 属性来定义一个以二元组形式返回多个值的方法。

Module modMain
   Public Sub Main()
      Dim dividend, divisor As Integer
      Dim result As Tuple(Of Integer, Integer)

      dividend = 136945 : divisor = 178
      result = IntegerDivide(dividend, divisor)
      If result IsNot Nothing Then
         Console.WriteLine("{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2)
      Else
         Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor)
      End If

      dividend = Int32.MaxValue : divisor = -2073
      result = IntegerDivide(dividend, divisor)
      If result IsNot Nothing Then
         Console.WriteLine("{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2)
      Else
         Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor)
      End If
   End Sub

   Private Function IntegerDivide(dividend As Integer, divisor As Integer) As Tuple(Of Integer, Integer)
      Try
         Dim remainder As Integer
         Dim quotient As Integer = Math.DivRem(dividend, divisor, remainder)
         Return New Tuple(Of Integer, Integer)(quotient, remainder)
      Catch e As DivideByZeroException
         Return Nothing
      End Try
   End Function
End Module
' The example displays the following output:
'       136945 \ 178 = 769, remainder 63
'       2147483647 \ -2073 = -1035930, remainder 757

using System;

public class Class1
{
   public static void Main()
   {
      int dividend, divisor;
      Tuple<int, int> result;

      dividend = 136945; divisor = 178;
      result = IntegerDivide(dividend, divisor);
      if (result != null)
         Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2);
      else
         Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);

      dividend = Int32.MaxValue; divisor = -2073;
      result = IntegerDivide(dividend, divisor);
      if (result != null)
         Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2);
      else
         Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);
   }

   private static Tuple<int, int> IntegerDivide(int dividend, int divisor)
   {
      try {
         int remainder;
         int quotient = Math.DivRem(dividend, divisor, out remainder);
         return new Tuple<int, int>(quotient, remainder);
      }
      catch (DivideByZeroException) {
         return null;
      }
   }
}
// The example displays the following output:
//       136945 \ 178 = 769, remainder 63
//       2147483647 \ -2073 = -1035930, remainder 757

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间


Tuple <(Of <(T1, T2 >)>) ..::.Item2 属性

Tuple
<
(Of
<
(
T1, T2
>
)
>
)
.
.
::
.
Item2 属性
Tuple

获取当前 Tuple<(Of <(T1, T2>)>) 对象的第二个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item2 As T2
    Get
public T2 Item2 { get; }
public:
property T2 Item2 {
    T2 get ();
}
member Item2 : 'T2

属性值

类型： T2
当前 Tuple<(Of <(T1, T2>)>) 对象的第二个分量的值。

您可以通过以下两种方式之一动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第二个元素。

该示例演示如何使用 Item1 和 Item2 属性来定义一个以二元组形式返回多个值的方法。

Module modMain
   Public Sub Main()
      Dim dividend, divisor As Integer
      Dim result As Tuple(Of Integer, Integer)

      dividend = 136945 : divisor = 178
      result = IntegerDivide(dividend, divisor)
      If result IsNot Nothing Then
         Console.WriteLine("{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2)
      Else
         Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor)
      End If

      dividend = Int32.MaxValue : divisor = -2073
      result = IntegerDivide(dividend, divisor)
      If result IsNot Nothing Then
         Console.WriteLine("{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2)
      Else
         Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor)
      End If
   End Sub

   Private Function IntegerDivide(dividend As Integer, divisor As Integer) As Tuple(Of Integer, Integer)
      Try
         Dim remainder As Integer
         Dim quotient As Integer = Math.DivRem(dividend, divisor, remainder)
         Return New Tuple(Of Integer, Integer)(quotient, remainder)
      Catch e As DivideByZeroException
         Return Nothing
      End Try
   End Function
End Module
' The example displays the following output:
'       136945 \ 178 = 769, remainder 63
'       2147483647 \ -2073 = -1035930, remainder 757

using System;

public class Class1
{
   public static void Main()
   {
      int dividend, divisor;
      Tuple<int, int> result;

      dividend = 136945; divisor = 178;
      result = IntegerDivide(dividend, divisor);
      if (result != null)
         Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2);
      else
         Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);

      dividend = Int32.MaxValue; divisor = -2073;
      result = IntegerDivide(dividend, divisor);
      if (result != null)
         Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}",
                           dividend, divisor, result.Item1, result.Item2);
      else
         Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);
   }

   private static Tuple<int, int> IntegerDivide(int dividend, int divisor)
   {
      try {
         int remainder;
         int quotient = Math.DivRem(dividend, divisor, out remainder);
         return new Tuple<int, int>(quotient, remainder);
      }
      catch (DivideByZeroException) {
         return null;
      }
   }
}
// The example displays the following output:
//       136945 \ 178 = 769, remainder 63
//       2147483647 \ -2073 = -1035930, remainder 757

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2 类
Tuple T1, T2 成员
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) 类

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
类
成员

表示 3 元组，即三元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class Tuple(Of T1, T2, T3) _
    Implements IStructuralEquatable, IStructuralComparable, IComparable
[SerializableAttribute]
public class Tuple<T1, T2, T3> : IStructuralEquatable,
    IStructuralComparable, IComparable

[SerializableAttribute]
generic<typename T1, typename T2, typename T3>
public ref class Tuple : IStructuralEquatable, IStructuralComparable,
    IComparable
[<SerializableAttribute>]
type Tuple<'T1, 'T2, 'T3> =
    class
        interface IStructuralEquatable
        interface IStructuralComparable
        interface IComparable
    end

类型参数

T1

此元组的第一个组件的类型。

T2

此元组的第二个组件的类型。

T3

此元组的第三个组件的类型。

元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3>)>) 类表示一个三元组，即具有三个分量的元组。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3>)>) 类表示一个三元组，即具有三个分量的元组。

可以通过调用 Tuple<(Of <(T1, T2, T3>)>) 构造函数或静态 Tuple..::.Create<(Of <(T1, T2, T3>)>)(T1, T2, T3) 方法来实例化 Tuple<(Of <(T1, T2, T3>)>) 对象。通过使用只读的 Item1、Item2 和 Item3 实例属性，可以检索元组中组件的值。 可以通过调用 Tuple<(Of <(T1, T2, T3>)>) 构造函数或静态 Tuple..::.Create<(Of <(T1, T2, T3>)>)(T1, T2, T3) 方法来实例化 Tuple<(Of <(T1, T2, T3>)>) 对象。通过使用只读的 Item1、Item2 和 Item3 实例属性，可以检索元组中组件的值。

元组通常有四种不同的使用方式：

  • 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算测试分数的平均值和标准偏差 。 提供对数据集的轻松访问和操作。下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算测试分数的平均值和标准偏差 。 提供对数据集的轻松访问和操作。下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算测试分数的平均值和标准偏差 。

    Module Example
   Public Sub Main()
      Dim scores() =
                      { Tuple.Create("Jack", 78.8, 8),
                        Tuple.Create("Abbey", 92.1, 9),
                        Tuple.Create("Dave", 88.3, 9),
                        Tuple.Create("Sam", 91.7, 8),
                        Tuple.Create("Ed", 71.2, 5),
                        Tuple.Create("Penelope", 82.9, 8),
                        Tuple.Create("Linda", 99.0, 9),
                        Tuple.Create("Judith", 84.3, 9) }
      Dim result = ComputeStatistics(scores)
      Console.WriteLine("Mean score: {0:N2} (SD={1:N2}) (n={2})",
                        result.Item2, result.Item3, result.Item1)
   End Sub

   Private Function ComputeStatistics(scores() As Tuple(Of String, Double, Integer)) _
                                As Tuple(Of Integer, Double, Double)
      Dim n As Integer = 0
      Dim sum As Double = 0

      ' Compute the mean.
      For Each score In scores
         n+= score.Item3
         sum += score.Item2 * score.Item3
      Next
      Dim mean As Double = sum / n

      ' Compute the standard deviation.
      Dim ss As Double = 0
      For Each score In scores
         ss = Math.Pow(score.Item2 - mean, 2)
      Next
      Dim sd As Double = Math.Sqrt(ss/scores.Length)
      Return Tuple.Create(scores.Length, mean, sd)
   End Function
End Module
' The example displays the following output:
'       Mean score: 87.02 (SD=0.96) (n=8)

    using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, double, int>[] scores =
                    { Tuple.Create("Jack", 78.8, 8),
                      Tuple.Create("Abbey", 92.1, 9),
                      Tuple.Create("Dave", 88.3, 9),
                      Tuple.Create("Sam", 91.7, 8),
                      Tuple.Create("Ed", 71.2, 5),
                      Tuple.Create("Penelope", 82.9, 8),
                      Tuple.Create("Linda", 99.0, 9),
                      Tuple.Create("Judith", 84.3, 9) };
      var result = ComputeStatistics(scores);
      Console.WriteLine("Mean score: {0:N2} (SD={1:N2}) (n={2})",
                        result.Item2, result.Item3, result.Item1);
   }

   private static Tuple<int, double, double> ComputeStatistics(Tuple<string, double, int>[] scores)
   {
      int n = 0;
      double sum = 0;

      // Compute the mean.
      foreach (var score in scores)
      {
         n += score.Item3;
         sum += score.Item2 * score.Item3;
      }
      double mean = sum / n;

      // Compute the standard deviation.
      double ss = 0;
      foreach (var score in scores)
      {
         ss = Math.Pow(score.Item2 - mean, 2);
      }
      double sd = Math.Sqrt(ss/scores.Length);
      return Tuple.Create(scores.Length, mean, sd);
   }
}
// The example displays the following output:
//       Mean score: 87.02 (SD=0.96) (n=8)

  • 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，上面的示例在 Tuple<(Of <(T1, T2, T3>)>) 对象中返回其摘要测试分数统计信息。 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，上面的示例在 Tuple<(Of <(T1, T2, T3>)>) 对象中返回其摘要测试分数统计信息。

  • 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3>)>) 对象作为方法参数提供，则可以提供具有三项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3>)>) 对象作为方法参数提供，则可以提供具有三项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3>)>) 对象作为方法参数提供，则可以提供具有三项数据的线程启动例程。

System
System..::.Tuple<(Of <(T1, T2, T3>)>)Tuple
System..::.Tuple<(Of <(T1, T2, T3>)>)T1, T2, T3
System..::.Tuple<(Of <(T1, T2, T3>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 成员
System 命名空间
Tuple
Tuple T1
Tuple T1, T2
Tuple T1, T2, T3, T4
Tuple T1, T2, T3, T4, T5
Tuple T1, T2, T3, T4, T5, T6
Tuple T1, T2, T3, T4, T5, T6, T7
Tuple T1, T2, T3, T4, T5, T6, T7, TRest


Tuple <(Of <(T1, T2, T3 >)>) 成员

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

表示 3 元组，即三元组。

Tuple T1, T2, T3 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3 类
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) 构造函数

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
构造函数
Tuple

初始化 Tuple<(Of <(T1, T2, T3>)>) 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3 _
)
public Tuple(
    T1 item1,
    T2 item2,
    T3 item3
)
public:
Tuple(
    T1 item1,
    T2 item2,
    T3 item3
)
new :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 -> Tuple

参数

item1
类型： T1
此元组的第一个组件的值。
item2
类型： T2
此元组的第二个组件的值。
item3
类型： T3
此元组的第三个组件的值。

此外可以使用 Tuple..::.Create<(Of <(T1, T2, T3>)>)(T1, T2, T3) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3>)>)(T1, T2, T3) 方法来实例化一个三元组，其分量的类型为 String、Double 和 Double。 此外可以使用 Tuple..::.Create<(Of <(T1, T2, T3>)>)(T1, T2, T3) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3>)>)(T1, T2, T3) 方法来实例化一个三元组，其分量的类型为 String、Double 和 Double。

Dim tuple3 = Tuple.Create("New York", 32.68, 51.87)

var tuple3 = Tuple.Create("New York", 32.68, 51.87);

这等效于下面的对 Tuple<(Of <(T1, T2, T3>)>) 类构造函数的调用。

Dim tuple3 = New Tuple(Of String, Double, Double)("New York", 32.68, 51.87)

var tuple3 = new Tuple<string, double, double>
                      ("New York", 32.68, 51.87);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) 方法

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3 类
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
Equals 方法
Tuple

返回一个值，该值指示当前的 Tuple<(Of <(T1, T2, T3>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

在下列情况下，obj 参数视为等于当前实例：

  • 它是 Tuple<(Of <(T1, T2, T3>)>) 对象。

  • 它的三个组件的类型与当前实例相同。

  • 它的三个组件的值与当前实例的对应值相同。

下面的示例调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals(Object) 方法，来确定 Tuple<(Of <(T1, T2, T3>)>) 对象数组中的任何对象是否彼此相等。输出表明，仅当比较所有部分的值都相等的 Tuple<(Of <(T1, T2, T3>)>) 对象时，Equals(Object) 方法才会返回 true。 下面的示例调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals(Object) 方法，来确定 Tuple<(Of <(T1, T2, T3>)>) 对象数组中的任何对象是否彼此相等。输出表明，仅当比较所有部分的值都相等的 Tuple<(Of <(T1, T2, T3>)>) 对象时，Equals(Object) 方法才会返回 true。

Module Example
   Public Sub Main()
      Dim scores() =
              { Tuple.Create("Ed", 78.8, 8),
                Tuple.Create("Abbey", 92.1, 9),
                Tuple.Create("Ed", 71.2, 9),
                Tuple.Create("Sam", 91.7, 8),
                Tuple.Create("Ed", 71.2, 5),
                Tuple.Create("Penelope", 82.9, 8),
                Tuple.Create("Ed", 71.2, 9),
                Tuple.Create("Judith", 84.3, 9) }

      ' Test each tuple object for equality with every other tuple.
      For ctr As Integer = 0 To scores.Length - 1
         Dim currentTuple = scores(ctr)
         For ctr2 As Integer = ctr + 1 To scores.Length - 1
            Console.WriteLine("{0} = {1}: {2}", currentTuple, scores(ctr2),
                                                currentTuple.Equals(scores(ctr2)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output;
'    (Ed, 78.8, 8) = (Abbey, 92.1, 9): False
'    (Ed, 78.8, 8) = (Ed, 71.2, 9): False
'    (Ed, 78.8, 8) = (Sam, 91.7, 8): False
'    (Ed, 78.8, 8) = (Ed, 71.2, 5): False
'    (Ed, 78.8, 8) = (Penelope, 82.9, 8): False
'    (Ed, 78.8, 8) = (Ed, 71.2, 9): False
'    (Ed, 78.8, 8) = (Judith, 84.3, 9): False
'
'    (Abbey, 92.1, 9) = (Ed, 71.2, 9): False
'    (Abbey, 92.1, 9) = (Sam, 91.7, 8): False
'    (Abbey, 92.1, 9) = (Ed, 71.2, 5): False
'    (Abbey, 92.1, 9) = (Penelope, 82.9, 8): False
'    (Abbey, 92.1, 9) = (Ed, 71.2, 9): False
'    (Abbey, 92.1, 9) = (Judith, 84.3, 9): False
'
'    (Ed, 71.2, 9) = (Sam, 91.7, 8): False
'    (Ed, 71.2, 9) = (Ed, 71.2, 5): False
'    (Ed, 71.2, 9) = (Penelope, 82.9, 8): False
'    (Ed, 71.2, 9) = (Ed, 71.2, 9): True
'    (Ed, 71.2, 9) = (Judith, 84.3, 9): False
'
'    (Sam, 91.7, 8) = (Ed, 71.2, 5): False
'    (Sam, 91.7, 8) = (Penelope, 82.9, 8): False
'    (Sam, 91.7, 8) = (Ed, 71.2, 9): False
'    (Sam, 91.7, 8) = (Judith, 84.3, 9): False
'
'    (Ed, 71.2, 5) = (Penelope, 82.9, 8): False
'    (Ed, 71.2, 5) = (Ed, 71.2, 9): False
'    (Ed, 71.2, 5) = (Judith, 84.3, 9): False
'
'    (Penelope, 82.9, 8) = (Ed, 71.2, 9): False
'    (Penelope, 82.9, 8) = (Judith, 84.3, 9): False
'
'    (Ed, 71.2, 9) = (Judith, 84.3, 9): False

using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, double, int>[] scores =
                      { Tuple.Create("Ed", 78.8, 8),
                        Tuple.Create("Abbey", 92.1, 9),
                        Tuple.Create("Ed", 71.2, 9),
                        Tuple.Create("Sam", 91.7, 8),
                        Tuple.Create("Ed", 71.2, 5),
                        Tuple.Create("Penelope", 82.9, 8),
                        Tuple.Create("Ed", 71.2, 9),
                        Tuple.Create("Judith", 84.3, 9) };

      // Test each tuple object for equality with every other tuple.
      for (int ctr = 0; ctr < scores.Length; ctr++)
      {
         var currentTuple = scores[ctr];
         for (int ctr2 = ctr + 1; ctr2 < scores.Length; ctr2++)
            Console.WriteLine("{0} = {1}: {2}", currentTuple, scores[ctr2],
                                                currentTuple.Equals(scores[ctr2]));

         Console.WriteLine();
      }
   }
}
// The example displays the following output;
//    (Ed, 78.8, 8) = (Abbey, 92.1, 9): False
//    (Ed, 78.8, 8) = (Ed, 71.2, 9): False
//    (Ed, 78.8, 8) = (Sam, 91.7, 8): False
//    (Ed, 78.8, 8) = (Ed, 71.2, 5): False
//    (Ed, 78.8, 8) = (Penelope, 82.9, 8): False
//    (Ed, 78.8, 8) = (Ed, 71.2, 9): False
//    (Ed, 78.8, 8) = (Judith, 84.3, 9): False
//
//    (Abbey, 92.1, 9) = (Ed, 71.2, 9): False
//    (Abbey, 92.1, 9) = (Sam, 91.7, 8): False
//    (Abbey, 92.1, 9) = (Ed, 71.2, 5): False
//    (Abbey, 92.1, 9) = (Penelope, 82.9, 8): False
//    (Abbey, 92.1, 9) = (Ed, 71.2, 9): False
//    (Abbey, 92.1, 9) = (Judith, 84.3, 9): False
//
//    (Ed, 71.2, 9) = (Sam, 91.7, 8): False
//    (Ed, 71.2, 9) = (Ed, 71.2, 5): False
//    (Ed, 71.2, 9) = (Penelope, 82.9, 8): False
//    (Ed, 71.2, 9) = (Ed, 71.2, 9): True
//    (Ed, 71.2, 9) = (Judith, 84.3, 9): False
//
//    (Sam, 91.7, 8) = (Ed, 71.2, 5): False
//    (Sam, 91.7, 8) = (Penelope, 82.9, 8): False
//    (Sam, 91.7, 8) = (Ed, 71.2, 9): False
//    (Sam, 91.7, 8) = (Judith, 84.3, 9): False
//
//    (Ed, 71.2, 5) = (Penelope, 82.9, 8): False
//    (Ed, 71.2, 5) = (Ed, 71.2, 9): False
//    (Ed, 71.2, 5) = (Judith, 84.3, 9): False
//
//    (Penelope, 82.9, 8) = (Ed, 71.2, 9): False
//    (Penelope, 82.9, 8) = (Judith, 84.3, 9): False
//
//    (Ed, 71.2, 9) = (Judith, 84.3, 9): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
GetHashCode 方法
Tuple

返回当前的 Tuple<(Of <(T1, T2, T3>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) ..::.IComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
IComparable
.
.
::
.
CompareTo 方法
Tuple

将当前 Tuple<(Of <(T1, T2, T3>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是位于指定对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ obj As Object _ ) As Integer Implements IComparable.CompareTo
int IComparable.CompareTo( Object obj )
private: virtual int CompareTo( Object^ obj ) sealed = IComparable::CompareTo
private abstract CompareTo : obj:Object -> int private override CompareTo : obj:Object -> int
参数
obj
类型： System Object
与当前实例进行比较的对象。
返回值
类型： System Int32
一个有符号整数，指示此实例与
obj
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
obj
之前。
零
此实例与
obj
在排序顺序中的位置相同。
一个正整数
此实例在
obj
之后。
实现
异常 | 条件
ArgumentException | obj 不是 Tuple<(Of <(T1, T2, T3>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3>)>) 实例强制转换为 IComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3>)>) 实例强制转换为 IComparable 接口时使用它。

此方法提供 Tuple<(Of <(T1, T2, T3>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法的默认重载（如 Array..::.Sort(Array) 和 SortedList..::.Add）调用，用于对集合成员进行排序。 此方法提供 Tuple<(Of <(T1, T2, T3>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法的默认重载（如 Array..::.Sort(Array) 和 SortedList..::.Add）调用，用于对集合成员进行排序。

警告说明 警告

Tuple<(Of <(T1, T2, T3>)>)..::.IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。 Tuple<(Of <(T1, T2, T3>)>)..::.IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。 Tuple<(Of <(T1, T2, T3>)>)..::.IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。

Tuple<(Of <(T1, T2, T3>)>)..::.IComparable..::.CompareTo 方法使用 Comparer<(Of <(T>)>)..::.Default 比较器。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，这些对象的组件中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，这些对象的组件中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，这些对象的组件中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，这些对象的组件中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，这些对象的组件中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按其第一个元素排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。

Module Example
   Public Sub Main()
      Dim scores() =
                 { Tuple.Create("Jack", 78.8, 8),
                   Tuple.Create("Abbey", 92.1, 9),
                   Tuple.Create("Dave", 88.3, 9),
                   Tuple.Create("Sam", 91.7, 8),
                   Tuple.Create("Ed", 71.2, 5),
                   Tuple.Create("Penelope", 82.9, 8),
                   Tuple.Create("Linda", 99.0, 9),
                   Tuple.Create("Judith", 84.3, 9) }

      Console.WriteLine("The values in unsorted order:")
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
      Console.WriteLine()

      Array.Sort(scores)

      Console.WriteLine("The values in sorted order:")
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
   End Sub
End Module
' The example displays the following output;
'    The values in unsorted order:
'    (Jack, 78.8, 8)
'    (Abbey, 92.1, 9)
'    (Dave, 88.3, 9)
'    (Sam, 91.7, 8)
'    (Ed, 71.2, 5)
'    (Penelope, 82.9, 8)
'    (Linda, 99, 9)
'    (Judith, 84.3, 9)
'
'    The values in sorted order:
'    (Abbey, 92.1, 9)
'    (Dave, 88.3, 9)
'    (Ed, 71.2, 5)
'    (Jack, 78.8, 8)
'    (Judith, 84.3, 9)
'    (Linda, 99, 9)
'    (Penelope, 82.9, 8)
'    (Sam, 91.7, 8)

using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, double, int>[] scores =
                    { Tuple.Create("Jack", 78.8, 8),
                      Tuple.Create("Abbey", 92.1, 9),
                      Tuple.Create("Dave", 88.3, 9),
                      Tuple.Create("Sam", 91.7, 8),
                      Tuple.Create("Ed", 71.2, 5),
                      Tuple.Create("Penelope", 82.9, 8),
                      Tuple.Create("Linda", 99.0, 9),
                      Tuple.Create("Judith", 84.3, 9) };

      Console.WriteLine("The values in unsorted order:");
      foreach (var score in scores)
         Console.WriteLine(score.ToString());

      Console.WriteLine();

      Array.Sort(scores);

      Console.WriteLine("The values in sorted order:");
      foreach (var score in scores)
         Console.WriteLine(score.ToString());
   }
}
// The example displays the following output;
//    The values in unsorted order:
//    (Jack, 78.8, 8)
//    (Abbey, 92.1, 9)
//    (Dave, 88.3, 9)
//    (Sam, 91.7, 8)
//    (Ed, 71.2, 5)
//    (Penelope, 82.9, 8)
//    (Linda, 99, 9)
//    (Judith, 84.3, 9)
//
//    The values in sorted order:
//    (Abbey, 92.1, 9)
//    (Dave, 88.3, 9)
//    (Ed, 71.2, 5)
//    (Jack, 78.8, 8)
//    (Judith, 84.3, 9)
//    (Linda, 99, 9)
//    (Penelope, 82.9, 8)
//    (Sam, 91.7, 8)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间
Equals


Tuple <(Of <(T1, T2, T3 >)>) ..::.IStructuralComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
IStructuralComparable
.
.
::
.
CompareTo 方法
Tuple

使用指定的比较器将当前的 Tuple<(Of <(T1, T2, T3>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer Implements IStructuralComparable.CompareTo
int IStructuralComparable.CompareTo( Object other, IComparer comparer )
private: virtual int CompareTo( Object^ other, IComparer^ comparer ) sealed = IStructuralComparable::CompareTo
private abstract CompareTo : other:Object * comparer:IComparer -> int private override CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个对象，提供自定义比较规则。
返回值
类型： System Int32
一个有符号整数，指示此实例与
other
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
other
之前。
零
此实例与
other
在排序顺序中的位置相同。
一个正整数
此实例在
other
之后。
实现
异常 | 条件
ArgumentException | other 不是 Tuple<(Of <(T1, T2, T3>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3>)>) 实例强制转换为 IStructuralComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3>)>) 实例强制转换为 IStructuralComparable 接口时使用它。

虽然可以直接调用此方法，但它通常由包含 IComparer 参数的集合排序方法调用，用于对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。 虽然可以直接调用此方法，但它通常由包含 IComparer 参数的集合排序方法调用，用于对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。

警告说明 警告

Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法。 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法。 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的分量，对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的分量，对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的分量，对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的分量，对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、平均测验分数和测验次数。它无序显示数组中每个元组的分量，对数组排序，然后调用 ToString 按排序顺序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 ScoreComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3>)>) 对象第二个元素（而非第一个元素）值的升序对这些对象进行排序。请注意，该示例不直接调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。

Imports System.Collections
Imports System.Collections.Generic

Public Class ScoreComparer(Of T1, T2, T3) : Implements IComparer
   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare
      Dim tX As Tuple(Of T1, T2, T3) = TryCast(x, Tuple(Of T1, T2, T3))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY As Tuple(Of T1, T2, T3) = DirectCast(y, Tuple(Of T1, T2, T3))
         Return Comparer(Of T2).Default.Compare(tx.Item2, tY.Item2)
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim scores() =
                 { Tuple.Create("Jack", 78.8, 8),
                   Tuple.Create("Abbey", 92.1, 9),
                   Tuple.Create("Dave", 88.3, 9),
                   Tuple.Create("Sam", 91.7, 8),
                   Tuple.Create("Ed", 71.2, 5),
                   Tuple.Create("Penelope", 82.9, 8),
                   Tuple.Create("Linda", 99.0, 9),
                   Tuple.Create("Judith", 84.3, 9) }

      Console.WriteLine("The values in unsorted order:")
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
      Console.WriteLine()

      Array.Sort(scores, New ScoreComparer(Of String, Double, Integer)())

      Console.WriteLine("The values in sorted order:")
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
   End Sub
End Module
' The example displays the following output;
'       The values in unsorted order:
'       (Jack, 78.8, 8)
'       (Abbey, 92.1, 9)
'       (Dave, 88.3, 9)
'       (Sam, 91.7, 8)
'       (Ed, 71.2, 5)
'       (Penelope, 82.9, 8)
'       (Linda, 99, 9)
'       (Judith, 84.3, 9)
'
'       The values in sorted order:
'       (Ed, 71.2, 5)
'       (Jack, 78.8, 8)
'       (Penelope, 82.9, 8)
'       (Judith, 84.3, 9)
'       (Dave, 88.3, 9)
'       (Sam, 91.7, 8)
'       (Abbey, 92.1, 9)
'       (Linda, 99, 9)

using System;
using System.Collections;
using System.Collections.Generic;

public class ScoreComparer<T1, T2, T3> : IComparer
{
   public int Compare(object x, object y)
   {
      Tuple<T1, T2, T3> tX = x as Tuple<T1,T2, T3>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         Tuple<T1, T2, T3> tY = y as Tuple<T1, T2, T3>;
         return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2);
      }
   }
}

public class Example
{
   public static void Main()
   {
      Tuple<string, double, int>[] scores =
                { Tuple.Create("Jack", 78.8, 8),
                  Tuple.Create("Abbey", 92.1, 9),
                  Tuple.Create("Dave", 88.3, 9),
                  Tuple.Create("Sam", 91.7, 8),
                  Tuple.Create("Ed", 71.2, 5),
                  Tuple.Create("Penelope", 82.9, 8),
                  Tuple.Create("Linda", 99.0, 9),
                  Tuple.Create("Judith", 84.3, 9) };

      Console.WriteLine("The values in unsorted order:");
      foreach (var score in scores)
         Console.WriteLine(score.ToString());

      Console.WriteLine();

      Array.Sort(scores, new ScoreComparer<string, double, int>());

      Console.WriteLine("The values in sorted order:");
      foreach (var score in scores)
         Console.WriteLine(score.ToString());
   }
}
// The example displays the following output;
//       The values in unsorted order:
//       (Jack, 78.8, 8)
//       (Abbey, 92.1, 9)
//       (Dave, 88.3, 9)
//       (Sam, 91.7, 8)
//       (Ed, 71.2, 5)
//       (Penelope, 82.9, 8)
//       (Linda, 99, 9)
//       (Judith, 84.3, 9)
//
//       The values in sorted order:
//       (Ed, 71.2, 5)
//       (Jack, 78.8, 8)
//       (Penelope, 82.9, 8)
//       (Judith, 84.3, 9)
//       (Dave, 88.3, 9)
//       (Sam, 91.7, 8)
//       (Abbey, 92.1, 9)
//       (Linda, 99, 9)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间
IStructuralEquatable Equals


Tuple <(Of <(T1, T2, T3 >)>) ..::.IStructuralEquatable ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
Equals 方法
Tuple

返回一个值，该值根据指定的比较方法指示当前的 Tuple<(Of <(T1, T2, T3>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals
bool IStructuralEquatable.Equals(
    Object other,
    IEqualityComparer comparer
)
private:
virtual bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::Equals
private abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool
private override Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
与该实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个对象，定义用于评估两个对象是否相等的方法。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法首先将要比较的 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则再次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item2 值。如果此方法调用再次返回 true，则第三次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item3 值。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法首先将要比较的 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则再次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item2 值。如果此方法调用再次返回 true，则第三次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item3 值。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法首先将要比较的 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则再次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item2 值。如果此方法调用再次返回 true，则第三次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item3 值。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法首先将要比较的 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则再次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item2 值。如果此方法调用再次返回 true，则第三次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item3 值。

下例定义一个 Item2Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item1 属性值时，该方法始终返回 true。然后，该方法调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法来评估对象的 Item2 属性值。如果该方法调用返回 true，它们的 Item3 属性值传递给该方法，该方法始终返回 true。因此，该方法仅基于 Item2 属性的值来测试相等性。该输出说明了 Tuple<(Of <(T1, T2, T3>)>) 对象的数据集的结果，用于记录班级中学生的名称、平均测试分数和测试数。 下例定义一个 Item2Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item1 属性值时，该方法始终返回 true。然后，该方法调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法来评估对象的 Item2 属性值。如果该方法调用返回 true，它们的 Item3 属性值传递给该方法，该方法始终返回 true。因此，该方法仅基于 Item2 属性的值来测试相等性。该输出说明了 Tuple<(Of <(T1, T2, T3>)>) 对象的数据集的结果，用于记录班级中学生的名称、平均测试分数和测试数。 下例定义一个 Item2Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item1 属性值时，该方法始终返回 true。然后，该方法调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法来评估对象的 Item2 属性值。如果该方法调用返回 true，它们的 Item3 属性值传递给该方法，该方法始终返回 true。因此，该方法仅基于 Item2 属性的值来测试相等性。该输出说明了 Tuple<(Of <(T1, T2, T3>)>) 对象的数据集的结果，用于记录班级中学生的名称、平均测试分数和测试数。 下例定义一个 Item2Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item1 属性值时，该方法始终返回 true。然后，该方法调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法来评估对象的 Item2 属性值。如果该方法调用返回 true，它们的 Item3 属性值传递给该方法，该方法始终返回 true。因此，该方法仅基于 Item2 属性的值来测试相等性。该输出说明了 Tuple<(Of <(T1, T2, T3>)>) 对象的数据集的结果，用于记录班级中学生的名称、平均测试分数和测试数。 下例定义一个 Item2Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3>)>) 对象的 Item1 属性值时，该方法始终返回 true。然后，该方法调用 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals 方法来评估对象的 Item2 属性值。如果该方法调用返回 true，它们的 Item3 属性值传递给该方法，该方法始终返回 true。因此，该方法仅基于 Item2 属性的值来测试相等性。该输出说明了 Tuple<(Of <(T1, T2, T3>)>) 对象的数据集的结果，用于记录班级中学生的名称、平均测试分数和测试数。

Imports System.Collections

Public Class Item2Comparer(Of T1, T2, T3) : Implements IEqualityComparer

   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
                   Implements IEqualityComparer.Equals
      ' Return true for all values of Item1.
      If TypeOf x Is T1 Then
         Return True
      ElseIf TypeOf x Is T2 Then
         Return x.Equals(y)
      Else
         Return True
      End If
   End Function

   Public Overloads Function GetHashCode(obj As Object) As Integer _
                    Implements IEqualityComparer.GetHashCode
      If TypeOf obj Is T1 Then
         Return CType(obj, T1).GetHashCode()
      ElseIf TypeOf obj Is T2 Then
         Return CType(obj, T2).GetHashCode()
      Else
         Return CType(obj, T3).GetHashCode()
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim scores() =
                { Tuple.Create("Ed", 78.8, 8),
                  Tuple.Create("Abbey", 92.1, 9),
                  Tuple.Create("Jim", 71.2, 9),
                  Tuple.Create("Sam", 91.7, 8),
                  Tuple.Create("Sandy", 71.2, 5),
                  Tuple.Create("Penelope", 82.9, 8),
                  Tuple.Create("Serena", 71.2, 9),
                  Tuple.Create("Judith", 84.3, 9) }

      For ctr As Integer = 0 To scores.Length - 1
         Dim score As IStructuralEquatable = scores(ctr)
         For ctr2 As Integer = ctr + 1 To scores.Length - 1
            Console.WriteLine("{0} = {1}: {2}", score,
                              scores(ctr2),
                              score.Equals(scores(ctr2),
                                           new Item2Comparer(Of String, Double, Integer)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'      (Ed, 78.8, 8) = (Abbey, 92.1, 9): False
'      (Ed, 78.8, 8) = (Jim, 71.2, 9): False
'      (Ed, 78.8, 8) = (Sam, 91.7, 8): False
'      (Ed, 78.8, 8) = (Sandy, 71.2, 5): False
'      (Ed, 78.8, 8) = (Penelope, 82.9, 8): False
'      (Ed, 78.8, 8) = (Serena, 71.2, 9): False
'      (Ed, 78.8, 8) = (Judith, 84.3, 9): False
'
'      (Abbey, 92.1, 9) = (Jim, 71.2, 9): False
'      (Abbey, 92.1, 9) = (Sam, 91.7, 8): False
'      (Abbey, 92.1, 9) = (Sandy, 71.2, 5): False
'      (Abbey, 92.1, 9) = (Penelope, 82.9, 8): False
'      (Abbey, 92.1, 9) = (Serena, 71.2, 9): False
'      (Abbey, 92.1, 9) = (Judith, 84.3, 9): False
'
'      (Jim, 71.2, 9) = (Sam, 91.7, 8): False
'      (Jim, 71.2, 9) = (Sandy, 71.2, 5): True
'      (Jim, 71.2, 9) = (Penelope, 82.9, 8): False
'      (Jim, 71.2, 9) = (Serena, 71.2, 9): True
'      (Jim, 71.2, 9) = (Judith, 84.3, 9): False
'
'      (Sam, 91.7, 8) = (Sandy, 71.2, 5): False
'      (Sam, 91.7, 8) = (Penelope, 82.9, 8): False
'      (Sam, 91.7, 8) = (Serena, 71.2, 9): False
'      (Sam, 91.7, 8) = (Judith, 84.3, 9): False
'
'      (Sandy, 71.2, 5) = (Penelope, 82.9, 8): False
'      (Sandy, 71.2, 5) = (Serena, 71.2, 9): True
'      (Sandy, 71.2, 5) = (Judith, 84.3, 9): False
'
'      (Penelope, 82.9, 8) = (Serena, 71.2, 9): False
'      (Penelope, 82.9, 8) = (Judith, 84.3, 9): False
'
'      (Serena, 71.2, 9) = (Judith, 84.3, 9): False

using System;
using System.Collections;

public class Item2Comparer<T1, T2, T3> : IEqualityComparer
{
   new public bool Equals(object x, object y)
   {
      // Return true for all values of Item1.
      if (x is T1)
         return true;
      else if (x is T2)
         return x.Equals(y);
      else
         return true;
   }

   public int GetHashCode(object obj)
   {
      if (obj is T1)
         return ((T1) obj).GetHashCode();
      else if (obj is T2)
         return ((T2) obj).GetHashCode();
      else
         return ((T3) obj).GetHashCode();
   }
}

public class Example
{
   public static void Main()
   {
      Tuple<string, double, int>[] scores =
           { Tuple.Create("Ed", 78.8, 8),
             Tuple.Create("Abbey", 92.1, 9),
             Tuple.Create("Jim", 71.2, 9),
             Tuple.Create("Sam", 91.7, 8),
             Tuple.Create("Sandy", 71.2, 5),
             Tuple.Create("Penelope", 82.9, 8),
             Tuple.Create("Serena", 71.2, 9),
             Tuple.Create("Judith", 84.3, 9) };

      for (int ctr = 0; ctr < scores.Length; ctr++)
      {
         IStructuralEquatable score = scores[ctr];
         for (int ctr2 = ctr + 1; ctr2 < scores.Length; ctr2++)
         {
            Console.WriteLine("{0} = {1}: {2}", score,
                              scores[ctr2],
                              score.Equals(scores[ctr2],
                                           new Item2Comparer<string, double, int>()));
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//      (Ed, 78.8, 8) = (Abbey, 92.1, 9): False
//      (Ed, 78.8, 8) = (Jim, 71.2, 9): False
//      (Ed, 78.8, 8) = (Sam, 91.7, 8): False
//      (Ed, 78.8, 8) = (Sandy, 71.2, 5): False
//      (Ed, 78.8, 8) = (Penelope, 82.9, 8): False
//      (Ed, 78.8, 8) = (Serena, 71.2, 9): False
//      (Ed, 78.8, 8) = (Judith, 84.3, 9): False
//
//      (Abbey, 92.1, 9) = (Jim, 71.2, 9): False
//      (Abbey, 92.1, 9) = (Sam, 91.7, 8): False
//      (Abbey, 92.1, 9) = (Sandy, 71.2, 5): False
//      (Abbey, 92.1, 9) = (Penelope, 82.9, 8): False
//      (Abbey, 92.1, 9) = (Serena, 71.2, 9): False
//      (Abbey, 92.1, 9) = (Judith, 84.3, 9): False
//
//      (Jim, 71.2, 9) = (Sam, 91.7, 8): False
//      (Jim, 71.2, 9) = (Sandy, 71.2, 5): True
//      (Jim, 71.2, 9) = (Penelope, 82.9, 8): False
//      (Jim, 71.2, 9) = (Serena, 71.2, 9): True
//      (Jim, 71.2, 9) = (Judith, 84.3, 9): False
//
//      (Sam, 91.7, 8) = (Sandy, 71.2, 5): False
//      (Sam, 91.7, 8) = (Penelope, 82.9, 8): False
//      (Sam, 91.7, 8) = (Serena, 71.2, 9): False
//      (Sam, 91.7, 8) = (Judith, 84.3, 9): False
//
//      (Sandy, 71.2, 5) = (Penelope, 82.9, 8): False
//      (Sandy, 71.2, 5) = (Serena, 71.2, 9): True
//      (Sandy, 71.2, 5) = (Judith, 84.3, 9): False
//
//      (Penelope, 82.9, 8) = (Serena, 71.2, 9): False
//      (Penelope, 82.9, 8) = (Judith, 84.3, 9): False
//
//      (Serena, 71.2, 9) = (Judith, 84.3, 9): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) ..::.IStructuralEquatable ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
GetHashCode 方法
Tuple

使用指定的计算方法计算当前 Tuple<(Of <(T1, T2, T3>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer Implements IStructuralEquatable.GetHashCode
int IStructuralEquatable.GetHashCode(
    IEqualityComparer comparer
)
private:
virtual int GetHashCode(
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::GetHashCode
private abstract GetHashCode :
        comparer:IEqualityComparer -> int
private override GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个对象，其 GetHashCode 方法计算当前 Tuple<(Of <(T1, T2, T3>)>) 对象的哈希代码。

返回值

类型： System Int32
32 位带符号整数哈希代码。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

该方法只是包装对 comparer 对象的 IEqualityComparer..::.GetHashCode 实现的调用。

对于两个视为相等 Tuple<(Of <(T1, T2, T3>)>) 的对象，用于计算哈希代码的算法应当返回相同的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) ..::.ToString 方法

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
ToString 方法
Tuple

返回一个字符串，该字符串表示此 Tuple<(Of <(T1, T2, T3>)>) 实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此 Tuple<(Of <(T1, T2, T3>)>) 对象的字符串表示形式。

此方法所返回的字符串的格式为 (Item1, Item2, Item3)，其中 Item1、Item2 和 Item3 表示 Item1、Item2 和 Item3 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。 此方法所返回的字符串的格式为 (Item1, Item2, Item3)，其中 Item1、Item2 和 Item3 表示 Item1、Item2 和 Item3 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。

下面的示例演示 ToString 方法。

Module Example
   Public Sub Main()
      Dim scores() =
                { Tuple.Create("Jack", 78.8, 8),
                  Tuple.Create("Abbey", 92.1, 9),
                  Tuple.Create("Dave", 88.3, 9),
                  Tuple.Create("Sam", 91.7, 8),
                  Tuple.Create("Ed", 71.2, 5),
                  Tuple.Create("Penelope", 82.9, 8),
                  Tuple.Create("Linda", 99.0, 9),
                  Tuple.Create("Judith", 84.3, 9) }
      Array.Sort(scores)
      For Each score In scores
         Console.WriteLine(score.ToString())
      Next
   End Sub
End Module
' The example displays the following output;
'    (Abbey, 92.1, 9)
'    (Dave, 88.3, 9)
'    (Ed, 71.2, 5)
'    (Jack, 78.8, 8)
'    (Judith, 84.3, 9)
'    (Linda, 99, 9)
'    (Penelope, 82.9, 8)
'    (Sam, 91.7, 8)

using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, double, int>[] scores =
                    { Tuple.Create("Jack", 78.8, 8),
                      Tuple.Create("Abbey", 92.1, 9),
                      Tuple.Create("Dave", 88.3, 9),
                      Tuple.Create("Sam", 91.7, 8),
                      Tuple.Create("Ed", 71.2, 5),
                      Tuple.Create("Penelope", 82.9, 8),
                      Tuple.Create("Linda", 99.0, 9),
                      Tuple.Create("Judith", 84.3, 9) };
      Array.Sort(scores);
      foreach (var score in scores)
         Console.WriteLine(score.ToString());
   }
}
// The example displays the following output;
//    (Abbey, 92.1, 9)
//    (Dave, 88.3, 9)
//    (Ed, 71.2, 5)
//    (Jack, 78.8, 8)
//    (Judith, 84.3, 9)
//    (Linda, 99, 9)
//    (Penelope, 82.9, 8)
//    (Sam, 91.7, 8)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) 属性

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3 类型公开以下成员。

名称 说明
页首

参考

Tuple T1, T2, T3 类
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) ..::.Item1 属性

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
Item1 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3>)>) 对象的第一个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item1 As T1
    Get
public T1 Item1 { get; }
public:
property T1 Item1 {
    T1 get ();
}
member Item1 : 'T1

属性值

类型： T1
当前 Tuple<(Of <(T1, T2, T3>)>) 对象的第一个分量的值。

您可以通过以下两种方式之一动态确定 Item1 组件的类型：

  • 对 GetType 属性所返回的值调用 Item1 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第一个元素。

下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item1 属性包含情况数量。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item1 属性包含情况数量。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item1 属性包含情况数量。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item1 属性包含情况数量。

Module Example
   Public Sub Main()
      Dim scores() =
                      { Tuple.Create("Jack", 78.8, 8),
                        Tuple.Create("Abbey", 92.1, 9),
                        Tuple.Create("Dave", 88.3, 9),
                        Tuple.Create("Sam", 91.7, 8),
                        Tuple.Create("Ed", 71.2, 5),
                        Tuple.Create("Penelope", 82.9, 8),
                        Tuple.Create("Linda", 99.0, 9),
                        Tuple.Create("Judith", 84.3, 9) }
      Dim result = ComputeStatistics(scores)
      Console.WriteLine("Mean score: {0:N2} (SD={1:N2}) (n={2})",
                        result.Item2, result.Item3, result.Item1)
   End Sub

   Private Function ComputeStatistics(scores() As Tuple(Of String, Double, Integer)) _
                                As Tuple(Of Integer, Double, Double)
      Dim n As Integer = 0
      Dim sum As Double = 0

      ' Compute the mean.
      For Each score In scores
         n+= score.Item3
         sum += score.Item2 * score.Item3
      Next
      Dim mean As Double = sum / n

      ' Compute the standard deviation.
      Dim ss As Double = 0
      For Each score In scores
         ss = Math.Pow(score.Item2 - mean, 2)
      Next
      Dim sd As Double = Math.Sqrt(ss/scores.Length)
      Return Tuple.Create(scores.Length, mean, sd)
   End Function
End Module
' The example displays the following output:
'       Mean score: 87.02 (SD=0.96) (n=8)

using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, double, int>[] scores =
                    { Tuple.Create("Jack", 78.8, 8),
                      Tuple.Create("Abbey", 92.1, 9),
                      Tuple.Create("Dave", 88.3, 9),
                      Tuple.Create("Sam", 91.7, 8),
                      Tuple.Create("Ed", 71.2, 5),
                      Tuple.Create("Penelope", 82.9, 8),
                      Tuple.Create("Linda", 99.0, 9),
                      Tuple.Create("Judith", 84.3, 9) };
      var result = ComputeStatistics(scores);
      Console.WriteLine("Mean score: {0:N2} (SD={1:N2}) (n={2})",
                        result.Item2, result.Item3, result.Item1);
   }

   private static Tuple<int, double, double> ComputeStatistics(Tuple<string, double, int>[] scores)
   {
      int n = 0;
      double sum = 0;

      // Compute the mean.
      foreach (var score in scores)
      {
         n += score.Item3;
         sum += score.Item2 * score.Item3;
      }
      double mean = sum / n;

      // Compute the standard deviation.
      double ss = 0;
      foreach (var score in scores)
      {
         ss = Math.Pow(score.Item2 - mean, 2);
      }
      double sd = Math.Sqrt(ss/scores.Length);
      return Tuple.Create(scores.Length, mean, sd);
   }
}
// The example displays the following output:
//       Mean score: 87.02 (SD=0.96) (n=8)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) ..::.Item2 属性

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
Item2 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3>)>) 对象的第二个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item2 As T2
    Get
public T2 Item2 { get; }
public:
property T2 Item2 {
    T2 get ();
}
member Item2 : 'T2

属性值

类型： T2
当前 Tuple<(Of <(T1, T2, T3>)>) 对象的第二个分量的值。

您可以通过以下两种方式之一动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第二个元素。

下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item2 属性包含平均测试分数。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item2 属性包含平均测试分数。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item2 属性包含平均测试分数。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item2 属性包含平均测试分数。

Module Example
   Public Sub Main()
      Dim scores() =
                      { Tuple.Create("Jack", 78.8, 8),
                        Tuple.Create("Abbey", 92.1, 9),
                        Tuple.Create("Dave", 88.3, 9),
                        Tuple.Create("Sam", 91.7, 8),
                        Tuple.Create("Ed", 71.2, 5),
                        Tuple.Create("Penelope", 82.9, 8),
                        Tuple.Create("Linda", 99.0, 9),
                        Tuple.Create("Judith", 84.3, 9) }
      Dim result = ComputeStatistics(scores)
      Console.WriteLine("Mean score: {0:N2} (SD={1:N2}) (n={2})",
                        result.Item2, result.Item3, result.Item1)
   End Sub

   Private Function ComputeStatistics(scores() As Tuple(Of String, Double, Integer)) _
                                As Tuple(Of Integer, Double, Double)
      Dim n As Integer = 0
      Dim sum As Double = 0

      ' Compute the mean.
      For Each score In scores
         n+= score.Item3
         sum += score.Item2 * score.Item3
      Next
      Dim mean As Double = sum / n

      ' Compute the standard deviation.
      Dim ss As Double = 0
      For Each score In scores
         ss = Math.Pow(score.Item2 - mean, 2)
      Next
      Dim sd As Double = Math.Sqrt(ss/scores.Length)
      Return Tuple.Create(scores.Length, mean, sd)
   End Function
End Module
' The example displays the following output:
'       Mean score: 87.02 (SD=0.96) (n=8)

using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, double, int>[] scores =
                    { Tuple.Create("Jack", 78.8, 8),
                      Tuple.Create("Abbey", 92.1, 9),
                      Tuple.Create("Dave", 88.3, 9),
                      Tuple.Create("Sam", 91.7, 8),
                      Tuple.Create("Ed", 71.2, 5),
                      Tuple.Create("Penelope", 82.9, 8),
                      Tuple.Create("Linda", 99.0, 9),
                      Tuple.Create("Judith", 84.3, 9) };
      var result = ComputeStatistics(scores);
      Console.WriteLine("Mean score: {0:N2} (SD={1:N2}) (n={2})",
                        result.Item2, result.Item3, result.Item1);
   }

   private static Tuple<int, double, double> ComputeStatistics(Tuple<string, double, int>[] scores)
   {
      int n = 0;
      double sum = 0;

      // Compute the mean.
      foreach (var score in scores)
      {
         n += score.Item3;
         sum += score.Item2 * score.Item3;
      }
      double mean = sum / n;

      // Compute the standard deviation.
      double ss = 0;
      foreach (var score in scores)
      {
         ss = Math.Pow(score.Item2 - mean, 2);
      }
      double sd = Math.Sqrt(ss/scores.Length);
      return Tuple.Create(scores.Length, mean, sd);
   }
}
// The example displays the following output:
//       Mean score: 87.02 (SD=0.96) (n=8)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间


Tuple <(Of <(T1, T2, T3 >)>) ..::.Item3 属性

Tuple
<
(Of
<
(
T1, T2, T3
>
)
>
)
.
.
::
.
Item3 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3>)>) 对象的第三个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item3 As T3
    Get
public T3 Item3 { get; }
public:
property T3 Item3 {
    T3 get ();
}
member Item3 : 'T3

属性值

类型： T3
当前 Tuple<(Of <(T1, T2, T3>)>) 对象的第三个分量的值。

可以通过以下两种方式之一来动态确定 Item3 组件的类型：

  • 通过在 Item3 属性返回的值上调用 GetType 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第三个元素。

下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item3 属性包含标准偏差。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item3 属性包含标准偏差。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item3 属性包含标准偏差。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3>)>) 对象数组，其中包含学生姓名、其平均测验分数和所进行测验的次数。数组传递给ComputeStatistics 方法，该方法计算平均分数、标准偏差以及计算统计信息所基于的情况数量。这些值存储在 ComputeStatistics 方法返回的 Tuple<(Of <(T1, T2, T3>)>) 对象中。Item3 属性包含标准偏差。

Module Example
   Public Sub Main()
      Dim scores() =
                      { Tuple.Create("Jack", 78.8, 8),
                        Tuple.Create("Abbey", 92.1, 9),
                        Tuple.Create("Dave", 88.3, 9),
                        Tuple.Create("Sam", 91.7, 8),
                        Tuple.Create("Ed", 71.2, 5),
                        Tuple.Create("Penelope", 82.9, 8),
                        Tuple.Create("Linda", 99.0, 9),
                        Tuple.Create("Judith", 84.3, 9) }
      Dim result = ComputeStatistics(scores)
      Console.WriteLine("Mean score: {0:N2} (SD={1:N2}) (n={2})",
                        result.Item2, result.Item3, result.Item1)
   End Sub

   Private Function ComputeStatistics(scores() As Tuple(Of String, Double, Integer)) _
                                As Tuple(Of Integer, Double, Double)
      Dim n As Integer = 0
      Dim sum As Double = 0

      ' Compute the mean.
      For Each score In scores
         n+= score.Item3
         sum += score.Item2 * score.Item3
      Next
      Dim mean As Double = sum / n

      ' Compute the standard deviation.
      Dim ss As Double = 0
      For Each score In scores
         ss = Math.Pow(score.Item2 - mean, 2)
      Next
      Dim sd As Double = Math.Sqrt(ss/scores.Length)
      Return Tuple.Create(scores.Length, mean, sd)
   End Function
End Module
' The example displays the following output:
'       Mean score: 87.02 (SD=0.96) (n=8)

using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, double, int>[] scores =
                    { Tuple.Create("Jack", 78.8, 8),
                      Tuple.Create("Abbey", 92.1, 9),
                      Tuple.Create("Dave", 88.3, 9),
                      Tuple.Create("Sam", 91.7, 8),
                      Tuple.Create("Ed", 71.2, 5),
                      Tuple.Create("Penelope", 82.9, 8),
                      Tuple.Create("Linda", 99.0, 9),
                      Tuple.Create("Judith", 84.3, 9) };
      var result = ComputeStatistics(scores);
      Console.WriteLine("Mean score: {0:N2} (SD={1:N2}) (n={2})",
                        result.Item2, result.Item3, result.Item1);
   }

   private static Tuple<int, double, double> ComputeStatistics(Tuple<string, double, int>[] scores)
   {
      int n = 0;
      double sum = 0;

      // Compute the mean.
      foreach (var score in scores)
      {
         n += score.Item3;
         sum += score.Item2 * score.Item3;
      }
      double mean = sum / n;

      // Compute the standard deviation.
      double ss = 0;
      foreach (var score in scores)
      {
         ss = Math.Pow(score.Item2 - mean, 2);
      }
      double sd = Math.Sqrt(ss/scores.Length);
      return Tuple.Create(scores.Length, mean, sd);
   }
}
// The example displays the following output:
//       Mean score: 87.02 (SD=0.96) (n=8)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3 类
Tuple T1, T2, T3 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) 类

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
类
成员

表示 4 元组，即四元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class Tuple(Of T1, T2, T3, T4) _
    Implements IStructuralEquatable, IStructuralComparable, IComparable
[SerializableAttribute]
public class Tuple<T1, T2, T3, T4> : IStructuralEquatable,
    IStructuralComparable, IComparable

[SerializableAttribute]
generic<typename T1, typename T2, typename T3, typename T4>
public ref class Tuple : IStructuralEquatable, IStructuralComparable,
    IComparable
[<SerializableAttribute>]
type Tuple<'T1, 'T2, 'T3, 'T4> =
    class
        interface IStructuralEquatable
        interface IStructuralComparable
        interface IComparable
    end

类型参数

T1

此元组的第一个组件的类型。

T2

此元组的第二个组件的类型。

T3

此元组的第三个组件的类型。

T4

此元组的第四个组件的类型。

元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4>)>) 类表示一个四元组，即具有四个分量的元组。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4>)>) 类表示一个四元组，即具有四个分量的元组。

可以通过调用 Tuple<(Of <(T1, T2, T3, T4>)>) 构造函数或静态 Tuple..::.Create<(Of <(T1, T2, T3, T4>)>)(T1, T2, T3, T4) 方法来实例化 Tuple<(Of <(T1, T2, T3, T4>)>) 对象。通过使用只读的 Item1、 Item2、 Item3 和 Item4 实例属性，可以检索元组中组件的值。 可以通过调用 Tuple<(Of <(T1, T2, T3, T4>)>) 构造函数或静态 Tuple..::.Create<(Of <(T1, T2, T3, T4>)>)(T1, T2, T3, T4) 方法来实例化 Tuple<(Of <(T1, T2, T3, T4>)>) 对象。通过使用只读的 Item1、 Item2、 Item3 和 Item4 实例属性，可以检索元组中组件的值。

元组通常有四种不同的使用方式：

  • 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。下例定义了一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象包含棒球投手的姓名、投球的局数、自责分数（无野手失误而得分），以及他们放弃的安打。数组传递给 ComputeStatistics 方法，该方法计算每个投手的平均自责分（九局比赛中放弃的平均分数），和每局放弃的平均安打分数。该方法还使用这两个平均值来计算一个假设的有效性平均值。 提供对数据集的轻松访问和操作。下例定义了一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象包含棒球投手的姓名、投球的局数、自责分数（无野手失误而得分），以及他们放弃的安打。数组传递给 ComputeStatistics 方法，该方法计算每个投手的平均自责分（九局比赛中放弃的平均分数），和每局放弃的平均安打分数。该方法还使用这两个平均值来计算一个假设的有效性平均值。 提供对数据集的轻松访问和操作。下例定义了一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象包含棒球投手的姓名、投球的局数、自责分数（无野手失误而得分），以及他们放弃的安打。数组传递给 ComputeStatistics 方法，该方法计算每个投手的平均自责分（九局比赛中放弃的平均分数），和每局放弃的平均安打分数。该方法还使用这两个平均值来计算一个假设的有效性平均值。 提供对数据集的轻松访问和操作。下例定义了一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象包含棒球投手的姓名、投球的局数、自责分数（无野手失误而得分），以及他们放弃的安打。数组传递给 ComputeStatistics 方法，该方法计算每个投手的平均自责分（九局比赛中放弃的平均分数），和每局放弃的平均安打分数。该方法还使用这两个平均值来计算一个假设的有效性平均值。

    Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim pitchers() =
               { Tuple.Create("McHale, Joe", 240.1d, 221, 96),
                 Tuple.Create("Paul, Dave", 233.1d, 231, 84),
                 Tuple.Create("Williams, Mike", 193.2d, 183, 86),
                 Tuple.Create("Blair, Jack", 168.1d, 146, 65),
                 Tuple.Create("Henry, Walt", 140.1d, 96, 30),
                 Tuple.Create("Lee, Adam", 137.2d, 109, 45),
                 Tuple.Create("Rohr, Don", 101.0d, 110, 42) }
      Dim results() = ComputeStatistics(pitchers)

      ' Display the results.
      Console.WriteLine("{0,-20} {1,9} {2,11} {3,15}", "Pitcher", "ERA", "Hits/Inn.", "Effectiveness")
      Console.WriteLine()
      For Each result In results
         Console.WriteLine("{0,-20} {1,9:F2} {2,11:F2} {3,15:F2}",
                        result.Item1, result.Item2, result.Item3, result.Item4)
      Next
   End Sub

   Private Function ComputeStatistics(pitchers() As Tuple(Of String, Decimal, Integer, Integer)) _
                                As Tuple(Of String, Double, Double, Double)()
      Dim list As New List(Of Tuple(Of String, Double, Double, Double))
      Dim result As Tuple(Of String, Double, Double, Double)

      For Each pitcher As Tuple(Of String, Decimal, Integer, Integer) In pitchers
         ' Decimal portion of innings pitched represents 1/3 of an inning
         Dim innings As Double = CDbl(Math.Truncate(pitcher.Item2))
         innings = innings + ((pitcher.Item2 - innings) * .33)

         Dim ERA As Double = pitcher.Item4/innings * 9
         Dim hitsPerInning As Double = pitcher.Item3/innings
         Dim EI As Double = (ERA * 2 + hitsPerInning * 9)/3
         result = New Tuple(Of String, Double, Double, Double) _
                           (pitcher.Item1, ERA, hitsPerInning, EI)
         list.Add(result)
      Next
      Return list.ToArray()
   End Function
End Module
' The example displays the following output:
'       Pitcher                    ERA   Hits/Inn.   Effectiveness
'
'       McHale, Joe               3.60        0.92            5.16
'       Paul, Dave                3.24        0.99            5.14
'       Williams, Mike            4.01        0.95            5.52
'       Blair, Jack               3.48        0.87            4.93
'       Henry, Walt               1.93        0.69            3.34
'       Lee, Adam                 2.95        0.80            4.36
'       Rohr, Don                 3.74        1.09            5.76

    using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Tuple<string, decimal, int, int>[] pitchers  =
           { Tuple.Create("McHale, Joe", 240.1m, 221, 96),
             Tuple.Create("Paul, Dave", 233.1m, 231, 84),
             Tuple.Create("Williams, Mike", 193.2m, 183, 86),
             Tuple.Create("Blair, Jack", 168.1m, 146, 65),
             Tuple.Create("Henry, Walt", 140.1m, 96, 30),
             Tuple.Create("Lee, Adam", 137.2m, 109, 45),
             Tuple.Create("Rohr, Don", 101.0m, 110, 42) };
      Tuple<string, double, double, double>[] results= ComputeStatistics(pitchers);

      // Display the results.
      Console.WriteLine("{0,-20} {1,9} {2,11} {3,15}\n",
                        "Pitcher", "ERA", "Hits/Inn.", "Effectiveness");
      foreach (var result in results)
         Console.WriteLine("{0,-20} {1,9:F2} {2,11:F2} {3,15:F2}",
                        result.Item1, result.Item2, result.Item3, result.Item4);
   }

   private static Tuple<string, double, double, double>[] ComputeStatistics(Tuple<string, decimal, int, int>[] pitchers)
   {
      var list = new List<Tuple<string, double, double, double>>();
      Tuple<string, double, double, double> result;

      foreach (var pitcher in pitchers)
      {
         // Decimal portion of innings pitched represents 1/3 of an inning
         double innings = (double) Math.Truncate(pitcher.Item2);
         innings = innings + (((double)pitcher.Item2 - innings) * .33);

         double ERA = pitcher.Item4/innings * 9;
         double hitsPerInning = pitcher.Item3/innings;
         double EI = (ERA * 2 + hitsPerInning * 9)/3;
         result = new Tuple<string, double, double, double>
                           (pitcher.Item1, ERA, hitsPerInning, EI);
         list.Add(result);
      }
      return list.ToArray();
   }
}
// The example displays the following output;
//       Pitcher                    ERA   Hits/Inn.   Effectiveness
//
//       McHale, Joe               3.60        0.92            5.16
//       Paul, Dave                3.24        0.99            5.14
//       Williams, Mike            4.01        0.95            5.52
//       Blair, Jack               3.48        0.87            4.93
//       Henry, Walt               1.93        0.69            3.34
//       Lee, Adam                 2.95        0.80            4.36
//       Rohr, Don                 3.74        1.09            5.76

  • 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前例在 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的数组中返回投手姓名及计算统计信息。 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前例在 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的数组中返回投手姓名及计算统计信息。

  • 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4>)>) 对象作为方法参数提供，则可以提供具有四项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4>)>) 对象作为方法参数提供，则可以提供具有四项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4>)>) 对象作为方法参数提供，则可以提供具有四项数据的线程启动例程。

System System..::.Tuple<(Of <(T1, T2, T3, T4>)>)Tuple System..::.Tuple<(Of <(T1, T2, T3, T4>)>)T1, T2, T3, T4 System..::.Tuple<(Of <(T1, T2, T3, T4>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 成员
System 命名空间
Tuple
Tuple T1
Tuple T1, T2
Tuple T1, T2, T3
Tuple T1, T2, T3, T4, T5
Tuple T1, T2, T3, T4, T5, T6
Tuple T1, T2, T3, T4, T5, T6, T7
Tuple T1, T2, T3, T4, T5, T6, T7, TRest


Tuple <(Of <(T1, T2, T3, T4 >)>) 成员

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

表示 4 元组，即四元组。

Tuple T1, T2, T3, T4 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) 构造函数

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
构造函数
Tuple

初始化 Tuple<(Of <(T1, T2, T3, T4>)>) 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4 _
)
public Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4
)
public:
Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4
)
new :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 -> Tuple

参数

item1
类型： T1
此元组的第一个组件的值。
item2
类型： T2
此元组的第二个组件的值。
item3
类型： T3
此元组的第三个组件的值。
item4
类型： T4
此元组的第四个组件的值

此外可以使用 Tuple..::.Create<(Of <(T1, T2, T3, T4>)>)(T1, T2, T3, T4) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3, T4>)>)(T1, T2, T3, T4) 方法来实例化一个四元组，其元素的类型分别为 String、Double、Double 和 Double。 此外可以使用 Tuple..::.Create<(Of <(T1, T2, T3, T4>)>)(T1, T2, T3, T4) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3, T4>)>)(T1, T2, T3, T4) 方法来实例化一个四元组，其元素的类型分别为 String、Double、Double 和 Double。

Dim tuple4 = Tuple.Create("New York", 32.68, 51.87, 76.3)

var tuple4 = Tuple.Create("New York", 32.68, 51.87, 76.3);

这等价于对 Tuple<(Of <(T1, T2, T3, T4>)>) 类构造函数的以下调用。

Dim tuple4 = New Tuple(Of String, Double, Double, Double) _
                      ("New York", 32.68, 51.87, 76.3)

var tuple4 = new Tuple<string, double, double, double>
                      ("New York", 32.68, 51.87, 76.3);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
Equals 方法
Tuple

返回一个值，该值指示当前的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

在下列情况下，obj 参数视为等于当前实例：

  • 它是 Tuple<(Of <(T1, T2, T3, T4>)>) 对象。

  • 它的四个组件的类型与当前实例相同。

  • 它的四个组件的值与当前实例的对应值相同。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象提供某一天中三个时间的温度数据。调用 Equals(Object) 方法，以便将每个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象与其他每个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象进行比较。输出表明，仅当 Tuple<(Of <(T1, T2, T3, T4>)>) 对象所有四个部分的值都相等时，Equals(Object) 方法才会返回 true。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象提供某一天中三个时间的温度数据。调用 Equals(Object) 方法，以便将每个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象与其他每个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象进行比较。输出表明，仅当 Tuple<(Of <(T1, T2, T3, T4>)>) 对象所有四个部分的值都相等时，Equals(Object) 方法才会返回 true。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象提供某一天中三个时间的温度数据。调用 Equals(Object) 方法，以便将每个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象与其他每个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象进行比较。输出表明，仅当 Tuple<(Of <(T1, T2, T3, T4>)>) 对象所有四个部分的值都相等时，Equals(Object) 方法才会返回 true。

Module Example
   Public Sub Main()
      Dim temperatures() =
              { Tuple.Create(#1/16/2009#, 3, 5, 4), _
                Tuple.Create(#4/22/2009#, 9, 14, 11), _
                Tuple.Create(#4/22/2009#, 9, 14, 10), _
                Tuple.Create(#6/01/2009#, 23, 28, 21), _
                Tuple.Create(#4/22/2009#, 9, 14, 11), _
                Tuple.Create(#9/06/2009#, 25, 30, 25) }
      ' Compare each item with every other item for equality.
      For ctr As Integer = 0 To temperatures.Length - 1
         Dim temperatureInfo = temperatures(ctr)
         For ctr2 As Integer = ctr + 1 To temperatures.Length - 1
            Console.WriteLine("{0} = {1}: {2}", temperatureInfo, temperatures(ctr2),
                                                temperatureInfo.Equals(temperatures(ctr2)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    (1/16/2009 12:00:00 AM, 3, 5, 4) = (4/22/2009 12:00:00 AM, 9, 14, 11): False
'    (1/16/2009 12:00:00 AM, 3, 5, 4) = (4/22/2009 12:00:00 AM, 9, 14, 10): False
'    (1/16/2009 12:00:00 AM, 3, 5, 4) = (6/1/2009 12:00:00 AM, 23, 28, 21): False
'    (1/16/2009 12:00:00 AM, 3, 5, 4) = (4/22/2009 12:00:00 AM, 9, 14, 11): False
'    (1/16/2009 12:00:00 AM, 3, 5, 4) = (9/6/2009 12:00:00 AM, 25, 30, 25): False
'
'    (4/22/2009 12:00:00 AM, 9, 14, 11) = (4/22/2009 12:00:00 AM, 9, 14, 10): False
'    (4/22/2009 12:00:00 AM, 9, 14, 11) = (6/1/2009 12:00:00 AM, 23, 28, 21): False
'    (4/22/2009 12:00:00 AM, 9, 14, 11) = (4/22/2009 12:00:00 AM, 9, 14, 11): True
'    (4/22/2009 12:00:00 AM, 9, 14, 11) = (9/6/2009 12:00:00 AM, 25, 30, 25): False
'
'    (4/22/2009 12:00:00 AM, 9, 14, 10) = (6/1/2009 12:00:00 AM, 23, 28, 21): False
'    (4/22/2009 12:00:00 AM, 9, 14, 10) = (4/22/2009 12:00:00 AM, 9, 14, 11): False
'    (4/22/2009 12:00:00 AM, 9, 14, 10) = (9/6/2009 12:00:00 AM, 25, 30, 25): False
'
'    (6/1/2009 12:00:00 AM, 23, 28, 21) = (4/22/2009 12:00:00 AM, 9, 14, 11): False
'    (6/1/2009 12:00:00 AM, 23, 28, 21) = (9/6/2009 12:00:00 AM, 25, 30, 25): False
'
'    (4/22/2009 12:00:00 AM, 9, 14, 11) = (9/6/2009 12:00:00 AM, 25, 30, 25): False

using System;

public class Class1
{
   public static void Main()
   {
      Tuple<DateTime, double, double, double>[] temperatures =
            { Tuple.Create(new DateTime(2009, 1, 16), 3.0, 5.0, 4.0),
              Tuple.Create(new DateTime(2009, 4, 22), 9.0, 14.0, 11.0),
              Tuple.Create(new DateTime(2009, 4, 22), 9.0, 14.0, 10.0),
              Tuple.Create(new DateTime(2009, 6, 1), 23.0, 28.0, 21.0),
              Tuple.Create(new DateTime(2009, 4, 22), 9.0, 14.0, 11.0),
              Tuple.Create(new DateTime(2009, 9, 6), 25.0, 30.0, 25.0) };
      // Compare each item with every other item for equality.
      for (int ctr = 0; ctr < temperatures.Length; ctr++)
      {
         var temperatureInfo = temperatures[ctr];
         for (int ctr2 = ctr + 1; ctr2 < temperatures.Length; ctr2++)
            Console.WriteLine("{0} = {1}: {2}", temperatureInfo, temperatures[ctr2],
                                                temperatureInfo.Equals(temperatures[ctr2]));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    (1/16/2009 12:00:00 AM, 3, 5, 4) = (4/22/2009 12:00:00 AM, 9, 14, 11): False
//    (1/16/2009 12:00:00 AM, 3, 5, 4) = (4/22/2009 12:00:00 AM, 9, 14, 10): False
//    (1/16/2009 12:00:00 AM, 3, 5, 4) = (6/1/2009 12:00:00 AM, 23, 28, 21): False
//    (1/16/2009 12:00:00 AM, 3, 5, 4) = (4/22/2009 12:00:00 AM, 9, 14, 11): False
//    (1/16/2009 12:00:00 AM, 3, 5, 4) = (9/6/2009 12:00:00 AM, 25, 30, 25): False
//
//    (4/22/2009 12:00:00 AM, 9, 14, 11) = (4/22/2009 12:00:00 AM, 9, 14, 10): False
//    (4/22/2009 12:00:00 AM, 9, 14, 11) = (6/1/2009 12:00:00 AM, 23, 28, 21): False
//    (4/22/2009 12:00:00 AM, 9, 14, 11) = (4/22/2009 12:00:00 AM, 9, 14, 11): True
//    (4/22/2009 12:00:00 AM, 9, 14, 11) = (9/6/2009 12:00:00 AM, 25, 30, 25): False
//
//    (4/22/2009 12:00:00 AM, 9, 14, 10) = (6/1/2009 12:00:00 AM, 23, 28, 21): False
//    (4/22/2009 12:00:00 AM, 9, 14, 10) = (4/22/2009 12:00:00 AM, 9, 14, 11): False
//    (4/22/2009 12:00:00 AM, 9, 14, 10) = (9/6/2009 12:00:00 AM, 25, 30, 25): False
//
//    (6/1/2009 12:00:00 AM, 23, 28, 21) = (4/22/2009 12:00:00 AM, 9, 14, 11): False
//    (6/1/2009 12:00:00 AM, 23, 28, 21) = (9/6/2009 12:00:00 AM, 25, 30, 25): False
//
//    (4/22/2009 12:00:00 AM, 9, 14, 11) = (9/6/2009 12:00:00 AM, 25, 30, 25): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
GetHashCode 方法
Tuple

返回当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.IComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
IComparable
.
.
::
.
CompareTo 方法
Tuple

将当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是位于指定对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ obj As Object _ ) As Integer Implements IComparable.CompareTo
int IComparable.CompareTo( Object obj )
private: virtual int CompareTo( Object^ obj ) sealed = IComparable::CompareTo
private abstract CompareTo : obj:Object -> int private override CompareTo : obj:Object -> int
参数
obj
类型： System Object
与当前实例进行比较的对象。
返回值
类型： System Int32
一个有符号整数，指示此实例与
obj
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
obj
之前。
零
此实例与
obj
在排序顺序中的位置相同。
一个正整数
此实例在
obj
之后。
实现
异常 | 条件
ArgumentException | obj 不是 Tuple<(Of <(T1, T2, T3, T4>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4>)>) 实例强制转换为 IComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4>)>) 实例强制转换为 IComparable 接口时使用它。

此方法提供 Tuple<(Of <(T1, T2, T3, T4>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法的默认重载（如 Array..::.Sort(Array) 和 SortedList..::.Add）调用，用于对集合成员进行排序。 此方法提供 Tuple<(Of <(T1, T2, T3, T4>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法的默认重载（如 Array..::.Sort(Array) 和 SortedList..::.Add）调用，用于对集合成员进行排序。

警告说明 警告

IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Equals 方法。

IComparable..::.CompareTo 方法使用 Comparer<(Of <(T>)>)..::.Default 比较器。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象的组件中包含棒球投手的姓名、他们投球的局数以及放弃的安打分数和自责分数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象的组件中包含棒球投手的姓名、他们投球的局数以及放弃的安打分数和自责分数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象的组件中包含棒球投手的姓名、他们投球的局数以及放弃的安打分数和自责分数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象的组件中包含棒球投手的姓名、他们投球的局数以及放弃的安打分数和自责分数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，这些对象的组件中包含棒球投手的姓名、他们投球的局数以及放弃的安打分数和自责分数。它无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。

Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim pitchers() =
                { Tuple.Create("McHale, Joe", 240.1d, 221, 96),
                  Tuple.Create("Paul, Dave", 233.1d, 231, 84),
                  Tuple.Create("Williams, Mike", 193.2d, 183, 86),
                  Tuple.Create("Blair, Jack", 168.1d, 146, 65),
                  Tuple.Create("Henry, Walt", 140.1d, 96, 30),
                  Tuple.Create("Lee, Adam", 137.2d, 109, 45),
                  Tuple.Create("Rohr, Don", 101.0d, 110, 42) }

      ' Display the array in unsorted order.
      Console.WriteLine("The values in unsorted order:")
      For Each pitcher In pitchers
         Console.WriteLine(pitcher.ToString())
      Next
      Console.WriteLine()

      ' Sort the array
      Array.Sort(pitchers)

      ' Display the array in sorted order.
      Console.WriteLine("The values in sorted order:")
      For Each pitcher In pitchers
         Console.WriteLine(pitcher.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'       The values in unsorted order:
'       (McHale, Joe, 240.1, 221, 96)
'       (Paul, Dave, 233.1, 231, 84)
'       (Williams, Mike, 193.2, 183, 86)
'       (Blair, Jack, 168.1, 146, 65)
'       (Henry, Walt, 140.1, 96, 30)
'       (Lee, Adam, 137.2, 109, 45)
'       (Rohr, Don, 101, 110, 42)
'
'       The values in sorted order:
'       (Blair, Jack, 168.1, 146, 65)
'       (Henry, Walt, 140.1, 96, 30)
'       (Lee, Adam, 137.2, 109, 45)
'       (McHale, Joe, 240.1, 221, 96)
'       (Paul, Dave, 233.1, 231, 84)
'       (Rohr, Don, 101, 110, 42)
'       (Williams, Mike, 193.2, 183, 86)

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Tuple<string, decimal, int, int>[] pitchers  =
                      { Tuple.Create("McHale, Joe", 240.1m, 221, 96),
                        Tuple.Create("Paul, Dave", 233.1m, 231, 84),
                        Tuple.Create("Williams, Mike", 193.2m, 183, 86),
                        Tuple.Create("Blair, Jack", 168.1m, 146, 65),
                        Tuple.Create("Henry, Walt", 140.1m, 96, 30),
                        Tuple.Create("Lee, Adam", 137.2m, 109, 45),
                        Tuple.Create("Rohr, Don", 101.0m, 110, 42) };

      // Display the array in unsorted order.
      Console.WriteLine("The values in unsorted order:");
      foreach (var pitcher in pitchers)
         Console.WriteLine(pitcher.ToString());
      Console.WriteLine();

      // Sort the array
      Array.Sort(pitchers);

      // Display the array in sorted order.
      Console.WriteLine("The values in sorted order:");
      foreach (var pitcher in pitchers)
         Console.WriteLine(pitcher.ToString());
   }
}
// The example displays the following output;
//       The values in unsorted order:
//       (McHale, Joe, 240.1, 221, 96)
//       (Paul, Dave, 233.1, 231, 84)
//       (Williams, Mike, 193.2, 183, 86)
//       (Blair, Jack, 168.1, 146, 65)
//       (Henry, Walt, 140.1, 96, 30)
//       (Lee, Adam, 137.2, 109, 45)
//       (Rohr, Don, 101, 110, 42)
//
//       The values in sorted order:
//       (Blair, Jack, 168.1, 146, 65)
//       (Henry, Walt, 140.1, 96, 30)
//       (Lee, Adam, 137.2, 109, 45)
//       (McHale, Joe, 240.1, 221, 96)
//       (Paul, Dave, 233.1, 231, 84)
//       (Rohr, Don, 101, 110, 42)
//       (Williams, Mike, 193.2, 183, 86)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间
Equals


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.IStructuralComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
IStructuralComparable
.
.
::
.
CompareTo 方法
Tuple

使用指定的比较器将当前的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer Implements IStructuralComparable.CompareTo
int IStructuralComparable.CompareTo( Object other, IComparer comparer )
private: virtual int CompareTo( Object^ other, IComparer^ comparer ) sealed = IStructuralComparable::CompareTo
private abstract CompareTo : other:Object * comparer:IComparer -> int private override CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个对象，提供自定义比较规则。
返回值
类型： System Int32
一个有符号整数，指示此实例与
other
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
other
之前。
零
此实例与
other
在排序顺序中的位置相同。
一个正整数
此实例在
other
之后。
实现
异常 | 条件
ArgumentException | other 不是 Tuple<(Of <(T1, T2, T3, T4>)>) 对象。

此成员是显式的接口成员实现。它只能在 Tuple<(Of <(T1, T2, T3, T4>)>) 实例被强制转换为 IStructuralComparable 接口时使用。 此成员是显式的接口成员实现。它只能在 Tuple<(Of <(T1, T2, T3, T4>)>) 实例被强制转换为 IStructuralComparable 接口时使用。

虽然可以直接调用此方法，但它通常由包含 IComparer 参数的集合排序方法调用，用于对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。 虽然可以直接调用此方法，但它通常由包含 IComparer 参数的集合排序方法调用，用于对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。

警告说明 警告

IStructuralComparable..::.CompareTo(Object, IComparer) 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法。 IStructuralComparable..::.CompareTo(Object, IComparer) 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法。 IStructuralComparable..::.CompareTo(Object, IComparer) 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其中包含有关棒球投手的统计信息。数据项包括投手姓名、投球局数以及投手平均自责分（每场比赛投手允许的平均得分）以及投手放弃的安打分。该示例乱序显示数组中每个元组的分量、排序数组，然后调用 ToString 有序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 PitcherComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4>)>) 对象第三个元素（平均自责分）值的升序对这些对象进行排序，而不是按第一个元素。请注意，示例没有直接调用 IStructuralComparable..::.CompareTo(Object, IComparer) 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其中包含有关棒球投手的统计信息。数据项包括投手姓名、投球局数以及投手平均自责分（每场比赛投手允许的平均得分）以及投手放弃的安打分。该示例乱序显示数组中每个元组的分量、排序数组，然后调用 ToString 有序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 PitcherComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4>)>) 对象第三个元素（平均自责分）值的升序对这些对象进行排序，而不是按第一个元素。请注意，示例没有直接调用 IStructuralComparable..::.CompareTo(Object, IComparer) 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其中包含有关棒球投手的统计信息。数据项包括投手姓名、投球局数以及投手平均自责分（每场比赛投手允许的平均得分）以及投手放弃的安打分。该示例乱序显示数组中每个元组的分量、排序数组，然后调用 ToString 有序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 PitcherComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4>)>) 对象第三个元素（平均自责分）值的升序对这些对象进行排序，而不是按第一个元素。请注意，示例没有直接调用 IStructuralComparable..::.CompareTo(Object, IComparer) 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其中包含有关棒球投手的统计信息。数据项包括投手姓名、投球局数以及投手平均自责分（每场比赛投手允许的平均得分）以及投手放弃的安打分。该示例乱序显示数组中每个元组的分量、排序数组，然后调用 ToString 有序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 PitcherComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4>)>) 对象第三个元素（平均自责分）值的升序对这些对象进行排序，而不是按第一个元素。请注意，示例没有直接调用 IStructuralComparable..::.CompareTo(Object, IComparer) 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其中包含有关棒球投手的统计信息。数据项包括投手姓名、投球局数以及投手平均自责分（每场比赛投手允许的平均得分）以及投手放弃的安打分。该示例乱序显示数组中每个元组的分量、排序数组，然后调用 ToString 有序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 PitcherComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4>)>) 对象第三个元素（平均自责分）值的升序对这些对象进行排序，而不是按第一个元素。请注意，示例没有直接调用 IStructuralComparable..::.CompareTo(Object, IComparer) 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其中包含有关棒球投手的统计信息。数据项包括投手姓名、投球局数以及投手平均自责分（每场比赛投手允许的平均得分）以及投手放弃的安打分。该示例乱序显示数组中每个元组的分量、排序数组，然后调用 ToString 有序显示每个元组的值。为了对数组进行排序，该示例定义了一个泛型 PitcherComparer 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4>)>) 对象第三个元素（平均自责分）值的升序对这些对象进行排序，而不是按第一个元素。请注意，示例没有直接调用 IStructuralComparable..::.CompareTo(Object, IComparer) 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。

Imports System.Collections
Imports System.Collections.Generic

Public Class PitcherComparer(Of T1, T2, T3, T4) : Implements IComparer
   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare
      Dim tX As Tuple(Of T1, T2, T3) = TryCast(x, Tuple(Of T1, T2, T3))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY As Tuple(Of T1, T2, T3) = DirectCast(y, Tuple(Of T1, T2, T3))
         Return Comparer(Of T3).Default.Compare(tx.Item3, tY.Item3)
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim pitchers() =
                { Tuple.Create("McHale, Joe", 240.1, 3.60, 221),
                  Tuple.Create("Paul, Dave", 233.1, 3.24, 231),
                  Tuple.Create("Williams, Mike", 193.2, 4.00, 183),
                  Tuple.Create("Blair, Jack", 168.1, 3.48, 146),
                  Tuple.Create("Henry, Walt", 140.1, 1.92, 96),
                  Tuple.Create("Lee, Adam", 137.2, 2.94, 109),
                  Tuple.Create("Rohr, Don", 101.0, 3.74, 110) }

      Console.WriteLine("The values in unsorted order:")
      For Each pitcher In pitchers
         Console.WriteLine(pitcher.ToString())
      Next
      Console.WriteLine()

      Array.Sort(pitchers, New PitcherComparer(Of String, Double, Double, Integer)())

      Console.WriteLine("The values sorted by earned run average (component 3):")
      For Each pitcher In pitchers
         Console.WriteLine(pitcher.ToString())
      Next
   End Sub
End Module
' The example displays the following output;
'       The values in unsorted order:
'       (McHale, Joe, 240.1, 3.6, 221)
'       (Paul, Dave, 233.1, 3.24, 231)
'       (Williams, Mike, 193.2, 4, 183)
'       (Blair, Jack, 168.1, 3.48, 146)
'       (Henry, Walt, 140.1, 1.92, 96)
'       (Lee, Adam, 137.2, 2.94, 109)
'       (Rohr, Don, 101, 3.74, 110)
'
'       The values sorted by earned run average (component 3):
'       (Henry, Walt, 140.1, 1.92, 96)
'       (Lee, Adam, 137.2, 2.94, 109)
'       (Rohr, Don, 101, 3.74, 110)
'       (Blair, Jack, 168.1, 3.48, 146)
'       (McHale, Joe, 240.1, 3.6, 221)
'       (Paul, Dave, 233.1, 3.24, 231)
'       (Williams, Mike, 193.2, 4, 183)

using System;
using System.Collections;
using System.Collections.Generic;

public class PitcherComparer<T1, T2, T3, T4> : IComparer
{
   public int Compare(object x, object y)
   {
      Tuple<T1, T2, T3, T4> tX = x as Tuple<T1, T2, T3, T4>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         Tuple<T1, T2, T3, T4> tY = y as Tuple<T1, T2, T3, T4>;
         return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3);
      }
   }
}

public class Example
{
   public static void Main()
   {
      Tuple<string, double, double, int>[] pitchers =
                    { Tuple.Create("McHale, Joe", 240.1, 3.60, 221),
                      Tuple.Create("Paul, Dave", 233.1, 3.24, 231),
                      Tuple.Create("Williams, Mike", 193.2, 4.00, 183),
                      Tuple.Create("Blair, Jack", 168.1, 3.48, 146),
                      Tuple.Create("Henry, Walt", 140.1, 1.92, 96),
                      Tuple.Create("Lee, Adam", 137.2, 2.94, 109),
                      Tuple.Create("Rohr, Don", 101.0, 3.74, 110) };

      Console.WriteLine("The values in unsorted order:");
      foreach (var pitcher in pitchers)
         Console.WriteLine(pitcher.ToString());

      Console.WriteLine();

      Array.Sort(pitchers, new PitcherComparer<string, double, double, int>());

      Console.WriteLine("The values sorted by earned run average (component 3):");
      foreach (var pitcher in pitchers)
         Console.WriteLine(pitcher.ToString());
   }
}
// The example displays the following output;
//       The values in unsorted order:
//       (McHale, Joe, 240.1, 3.6, 221)
//       (Paul, Dave, 233.1, 3.24, 231)
//       (Williams, Mike, 193.2, 4, 183)
//       (Blair, Jack, 168.1, 3.48, 146)
//       (Henry, Walt, 140.1, 1.92, 96)
//       (Lee, Adam, 137.2, 2.94, 109)
//       (Rohr, Don, 101, 3.74, 110)
//
//       The values sorted by earned run average (component 3):
//       (Henry, Walt, 140.1, 1.92, 96)
//       (Lee, Adam, 137.2, 2.94, 109)
//       (Rohr, Don, 101, 3.74, 110)
//       (Blair, Jack, 168.1, 3.48, 146)
//       (McHale, Joe, 240.1, 3.6, 221)
//       (Paul, Dave, 233.1, 3.24, 231)
//       (Williams, Mike, 193.2, 4, 183)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.IStructuralEquatable ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
Equals 方法
Tuple

返回一个值，该值根据指定的比较方法指示当前的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals
bool IStructuralEquatable.Equals(
    Object other,
    IEqualityComparer comparer
)
private:
virtual bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::Equals
private abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool
private override Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
与该实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个对象，定义用于评估两个对象是否相等的方法。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则再次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item2 值。如果此方法调用再次返回 true，则第三次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item3 值。如果此方法调用再次返回 true，则第四次（最后一次）调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item4 值。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则再次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item2 值。如果此方法调用再次返回 true，则第三次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item3 值。如果此方法调用再次返回 true，则第四次（最后一次）调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item4 值。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则再次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item2 值。如果此方法调用再次返回 true，则第三次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item3 值。如果此方法调用再次返回 true，则第四次（最后一次）调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item4 值。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则再次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item2 值。如果此方法调用再次返回 true，则第三次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item3 值。如果此方法调用再次返回 true，则第四次（最后一次）调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item4 值。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则再次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item2 值。如果此方法调用再次返回 true，则第三次调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item3 值。如果此方法调用再次返回 true，则第四次（最后一次）调用该方法，并传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item4 值。

下例定义一个 Item3And4Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3, T4>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 和 Item2 属性值时，该方法始终返回 true。然后，该方法调用 obj.Equals 方法来评估对象的 Item3 属性值。如果此方法调用返回 true，它还将调用 obj.Equals 方法来计算元组的 Item4 属性值。因此，此方法仅基于 Item3 和 Item4 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的数据集的结果，用于记录一个美国人的名字。城市的名称、月份、以及该月的平均高温和平均低温。 下例定义一个 Item3And4Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3, T4>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 和 Item2 属性值时，该方法始终返回 true。然后，该方法调用 obj.Equals 方法来评估对象的 Item3 属性值。如果此方法调用返回 true，它还将调用 obj.Equals 方法来计算元组的 Item4 属性值。因此，此方法仅基于 Item3 和 Item4 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的数据集的结果，用于记录一个美国人的名字。城市的名称、月份、以及该月的平均高温和平均低温。 下例定义一个 Item3And4Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3, T4>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 和 Item2 属性值时，该方法始终返回 true。然后，该方法调用 obj.Equals 方法来评估对象的 Item3 属性值。如果此方法调用返回 true，它还将调用 obj.Equals 方法来计算元组的 Item4 属性值。因此，此方法仅基于 Item3 和 Item4 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的数据集的结果，用于记录一个美国人的名字。城市的名称、月份、以及该月的平均高温和平均低温。 下例定义一个 Item3And4Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3, T4>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 和 Item2 属性值时，该方法始终返回 true。然后，该方法调用 obj.Equals 方法来评估对象的 Item3 属性值。如果此方法调用返回 true，它还将调用 obj.Equals 方法来计算元组的 Item4 属性值。因此，此方法仅基于 Item3 和 Item4 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的数据集的结果，用于记录一个美国人的名字。城市的名称、月份、以及该月的平均高温和平均低温。 下例定义一个 Item3And4Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3, T4>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 和 Item2 属性值时，该方法始终返回 true。然后，该方法调用 obj.Equals 方法来评估对象的 Item3 属性值。如果此方法调用返回 true，它还将调用 obj.Equals 方法来计算元组的 Item4 属性值。因此，此方法仅基于 Item3 和 Item4 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的数据集的结果，用于记录一个美国人的名字。城市的名称、月份、以及该月的平均高温和平均低温。 下例定义一个 Item3And4Comparer 类，该类实现 IEqualityComparer 接口，并更改评估 Tuple<(Of <(T1, T2, T3, T4>)>) 对象相等性的方式。在传递两个 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Item1 和 Item2 属性值时，该方法始终返回 true。然后，该方法调用 obj.Equals 方法来评估对象的 Item3 属性值。如果此方法调用返回 true，它还将调用 obj.Equals 方法来计算元组的 Item4 属性值。因此，此方法仅基于 Item3 和 Item4 属性的值来测试相等性。输出说明了 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的数据集的结果，用于记录一个美国人的名字。城市的名称、月份、以及该月的平均高温和平均低温。

Imports System.Collections

Public Class Item3And4Comparer(Of T1, T2, T3, T4) : Implements IEqualityComparer

   Private argument As Integer = 0

   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
                   Implements IEqualityComparer.Equals
      argument += 1

      ' Return true for all values of Item1, Item2.
      If argument <= 2 Then
         Return True
      Else
         Return x.Equals(y)
      End If
   End Function

   Public Overloads Function GetHashCode(obj As Object) As Integer _
                    Implements IEqualityComparer.GetHashCode
      If TypeOf obj Is T1 Then
         Return CType(obj, T1).GetHashCode()
      ElseIf TypeOf obj Is T2 Then
         Return CType(obj, T2).GetHashCode()
      ElseIf TypeOf obj Is T3 Then
         REturn CType(Obj, T3).GetHashCode()
      Else
         Return CType(obj, T4).GetHashCode()
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim temperatures() =
              { Tuple.Create("New York, NY", 4, 61, 43), _
                Tuple.Create("Chicago, IL", 2, 34, 18), _
                Tuple.Create("Newark, NJ", 4, 61, 43), _
                Tuple.Create("Boston, MA", 6, 77, 59), _
                Tuple.Create("Detroit, MI", 9, 74, 53), _
                Tuple.Create("Minneapolis, MN", 8, 81, 61) }
      ' Compare each item with every other item for equality.
      For ctr As Integer = 0 To temperatures.Length - 1
         Dim temperatureInfo As IStructuralEquatable = temperatures(ctr)
         For ctr2 As Integer = ctr + 1 To temperatures.Length - 1
            Console.WriteLine("{0} = {1}: {2}",
                              temperatureInfo, temperatures(ctr2),
                              temperatureInfo.Equals(temperatures(ctr2),
                                              New Item3And4Comparer(Of String, Integer, Double, Double)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    (New York, NY, 4, 61, 43) = (Chicago, IL, 2, 34, 18): False
'    (New York, NY, 4, 61, 43) = (Newark, NJ, 4, 61, 43): True
'    (New York, NY, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
'    (New York, NY, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
'    (New York, NY, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
'
'    (Chicago, IL, 2, 34, 18) = (Newark, NJ, 4, 61, 43): False
'    (Chicago, IL, 2, 34, 18) = (Boston, MA, 6, 77, 59): False
'    (Chicago, IL, 2, 34, 18) = (Detroit, MI, 9, 74, 53): False
'    (Chicago, IL, 2, 34, 18) = (Minneapolis, MN, 8, 81, 61): False
'
'    (Newark, NJ, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
'    (Newark, NJ, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
'    (Newark, NJ, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
'
'    (Boston, MA, 6, 77, 59) = (Detroit, MI, 9, 74, 53): False
'    (Boston, MA, 6, 77, 59) = (Minneapolis, MN, 8, 81, 61): False
'
'    (Detroit, MI, 9, 74, 53) = (Minneapolis, MN, 8, 81, 61): False

using System;
using System.Collections;

public class Item3And4Comparer<T1, T2, T3, T4> : IEqualityComparer
{
   private int argument = 0;

   new public bool Equals(object x, object y)
   {
      argument++;

      // Return true for all values of Item1, Item2.
      if (argument <= 2)
         return true;
      else
         return x.Equals(y);
   }

   public int GetHashCode(object obj)
   {
      if (obj is T1)
         return ((T1) obj).GetHashCode();
      else if (obj is T2)
         return ((T2) obj).GetHashCode();
      else if (obj is T3)
         return ((T3) obj).GetHashCode();
      else
         return ((T4) obj).GetHashCode();
   }
}

public class Example
{
   public static void Main()
   {
      Tuple<string, int, double, double>[] temperatures =
            { Tuple.Create("New York, NY", 4, 61.0, 43.0),
              Tuple.Create("Chicago, IL", 2, 34.0, 18.0),
              Tuple.Create("Newark, NJ", 4, 61.0, 43.0),
              Tuple.Create("Boston, MA", 6, 77.0, 59.0),
              Tuple.Create("Detroit, MI", 9, 74.0, 53.0),
              Tuple.Create("Minneapolis, MN", 8, 81.0, 61.0) };
      // Compare each item with every other item for equality.
      for (int ctr = 0; ctr < temperatures.Length; ctr++)
      {
         IStructuralEquatable temperatureInfo = temperatures[ctr];
         for (int ctr2 = ctr + 1; ctr2 < temperatures.Length; ctr2++)
            Console.WriteLine("{0} = {1}: {2}",
                              temperatureInfo, temperatures[ctr2],
                              temperatureInfo.Equals(temperatures[ctr2],
                                              new Item3And4Comparer<string, int, double, double>()));

         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    (New York, NY, 4, 61, 43) = (Chicago, IL, 2, 34, 18): False
//    (New York, NY, 4, 61, 43) = (Newark, NJ, 4, 61, 43): True
//    (New York, NY, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
//    (New York, NY, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
//    (New York, NY, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
//    (Chicago, IL, 2, 34, 18) = (Newark, NJ, 4, 61, 43): False
//    (Chicago, IL, 2, 34, 18) = (Boston, MA, 6, 77, 59): False
//    (Chicago, IL, 2, 34, 18) = (Detroit, MI, 9, 74, 53): False
//    (Chicago, IL, 2, 34, 18) = (Minneapolis, MN, 8, 81, 61): False
//
//    (Newark, NJ, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
//    (Newark, NJ, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
//    (Newark, NJ, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
//    (Boston, MA, 6, 77, 59) = (Detroit, MI, 9, 74, 53): False
//    (Boston, MA, 6, 77, 59) = (Minneapolis, MN, 8, 81, 61): False
//
//    (Detroit, MI, 9, 74, 53) = (Minneapolis, MN, 8, 81, 61): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.IStructuralEquatable ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
GetHashCode 方法
Tuple

使用指定的计算方法计算当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer Implements IStructuralEquatable.GetHashCode
int IStructuralEquatable.GetHashCode(
    IEqualityComparer comparer
)
private:
virtual int GetHashCode(
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::GetHashCode
private abstract GetHashCode :
        comparer:IEqualityComparer -> int
private override GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个对象，其 IEqualityComparer..::.GetHashCode 方法计算当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的哈希代码。

返回值

类型： System Int32
32 位带符号整数哈希代码。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

该方法只是包装对 comparer 对象的 IEqualityComparer..::.GetHashCode 实现的调用。

对于两个视为相等 Tuple<(Of <(T1, T2, T3, T4>)>) 的对象，用于计算哈希代码的算法应当返回相同的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.ToString 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
ToString 方法
Tuple

返回一个字符串，该字符串表示此 Tuple<(Of <(T1, T2, T3, T4>)>) 实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的字符串表示形式。

此方法返回的字符串采用形式 (Item1, Item2, Item3, Item4)，其中 Item1、Item2、Item3 和 Item4 分别代表 Item1、Item2、Item3 和Item4 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。 此方法返回的字符串采用形式 (Item1, Item2, Item3, Item4)，其中 Item1、Item2、Item3 和 Item4 分别代表 Item1、Item2、Item3 和Item4 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。

下面的示例演示 ToString 方法。它显示四元组对象数组的组件，包含城市名称、月份以及当月的平均高温和平均低温。 下面的示例演示 ToString 方法。它显示四元组对象数组的组件，包含城市名称、月份以及当月的平均高温和平均低温。

Module Example
   Public Sub Main()
      Dim temperatures() =
             { Tuple.Create("New York, NY", 4, 61, 43), _
               Tuple.Create("Chicago, IL", 2, 34, 18), _
               Tuple.Create("Newark, NJ", 4, 61, 43), _
               Tuple.Create("Boston, MA", 6, 77, 59), _
               Tuple.Create("Detroit, MI", 9, 74, 53), _
               Tuple.Create("Minneapolis, MN", 8, 81, 61) }
      ' Display the array of 4-tuple objects.
      For Each temperature In temperatures
         Console.WriteLine(temperature.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'       (New York, NY, 4, 61, 43)
'       (Chicago, IL, 2, 34, 18)
'       (Newark, NJ, 4, 61, 43)
'       (Boston, MA, 6, 77, 59)
'       (Detroit, MI, 9, 74, 53)
'       (Minneapolis, MN, 8, 81, 61)

using System;

public class Example
{
   public static void Main()
   {
      Tuple<string, int, int, int>[] temperatures =
            { Tuple.Create("New York, NY", 4, 61, 43),
              Tuple.Create("Chicago, IL", 2, 34, 18),
              Tuple.Create("Newark, NJ", 4, 61, 43),
              Tuple.Create("Boston, MA", 6, 77, 59),
              Tuple.Create("Detroit, MI", 9, 74, 53),
              Tuple.Create("Minneapolis, MN", 8, 81, 61) };
      // Display the array of 4-tuple objects.
      foreach (var temperature in temperatures)
         Console.WriteLine(temperature.ToString());
   }
}
// The example displays the following output:
//       (New York, NY, 4, 61, 43)
//       (Chicago, IL, 2, 34, 18)
//       (Newark, NJ, 4, 61, 43)
//       (Boston, MA, 6, 77, 59)
//       (Detroit, MI, 9, 74, 53)
//       (Minneapolis, MN, 8, 81, 61)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4 类型公开以下成员。

名称 说明
页首

参考

Tuple T1, T2, T3, T4 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.Item1 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
Item1 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的第一个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item1 As T1
    Get
public T1 Item1 { get; }
public:
property T1 Item1 {
    T1 get ();
}
member Item1 : 'T1

属性值

类型： T1
当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的第一个分量的值。

您可以通过以下两种方式之一动态确定 Item1 组件的类型：

  • 对 GetType 属性所返回的值调用 Item1 方法。

  • 检索代表 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第一个数组元素。

下例定义 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其元素中包含城市名称、月份以及当月的平均高温和平均低温。然后，检索并显示每个元素的值。 下例定义 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其元素中包含城市名称、月份以及当月的平均高温和平均低温。然后，检索并显示每个元素的值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim temperatures() =
             { Tuple.Create("New York, NY", 4, 61, 43), _
               Tuple.Create("Chicago, IL", 2, 34, 18), _
               Tuple.Create("Newark, NJ", 4, 61, 43), _
               Tuple.Create("Boston, MA", 6, 77, 59), _
               Tuple.Create("Detroit, MI", 9, 74, 53), _
               Tuple.Create("Minneapolis, MN", 8, 81, 61) }
      ' Display the array of 4-tuples.
      Console.WriteLine("{0,41}", "Temperatures")
      Console.WriteLine("{0,-20} {1,5}    {2,4}  {3,4}",
                        "City", "Month", "High", "Low")
      Console.WriteLine()
      For Each temperature In temperatures
         Console.WriteLine("{0,-20} {1,5}    {2,4:N1}  {3,4:N1}",
                           temperature.Item1,
                           DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(temperature.Item2 - 1),
                           temperature.Item3, temperature.Item4)
      Next
   End Sub
End Module
' The example displays the following output:
'                                    Temperatures
'       City                 Month    High   Low
'
'       New York, NY           Mar    61.0  43.0
'       Chicago, IL            Jan    34.0  18.0
'       Newark, NJ             Mar    61.0  43.0
'       Boston, MA             May    77.0  59.0
'       Detroit, MI            Aug    74.0  53.0
'       Minneapolis, MN        Jul    81.0  61.0

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      Tuple<string, int, double, double>[] temperatures =
            { Tuple.Create("New York, NY", 4, 61.0, 43.0),
              Tuple.Create("Chicago, IL", 2, 34.0, 18.0),
              Tuple.Create("Newark, NJ", 4, 61.0, 43.0),
              Tuple.Create("Boston, MA", 6, 77.0, 59.0),
              Tuple.Create("Detroit, MI", 9, 74.0, 53.0),
              Tuple.Create("Minneapolis, MN", 8, 81.0, 61.0) };
      // Display the array of 4-tuple objects.
      Console.WriteLine("{0,41}", "Temperatures");
      Console.WriteLine("{0,-20} {1,5}    {2,4}  {3,4}\n",
                        "City", "Month", "High", "Low");
      foreach (var temperature in temperatures)
         Console.WriteLine("{0,-20} {1,5}    {2,4:N1}  {3,4:N1}",
                           temperature.Item1,
                           DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(temperature.Item2 - 1),
                           temperature.Item3, temperature.Item4);
   }
}
// The example displays the following output:
//                                    Temperatures
//       City                 Month    High   Low
//
//       New York, NY           Mar    61.0  43.0
//       Chicago, IL            Jan    34.0  18.0
//       Newark, NJ             Mar    61.0  43.0
//       Boston, MA             May    77.0  59.0
//       Detroit, MI            Aug    74.0  53.0
//       Minneapolis, MN        Jul    81.0  61.0

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.Item2 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
Item2 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的第二个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item2 As T2
    Get
public T2 Item2 { get; }
public:
property T2 Item2 {
    T2 get ();
}
member Item2 : 'T2

属性值

类型： T2
当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的第二个分量的值。

可以通过以下两种方式之一来动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第二个数组元素。

下例定义 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其元素中包含城市名称、月份以及当月的平均高温和平均低温。然后，检索并显示每个元素的值。 下例定义 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其元素中包含城市名称、月份以及当月的平均高温和平均低温。然后，检索并显示每个元素的值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim temperatures() =
             { Tuple.Create("New York, NY", 4, 61, 43), _
               Tuple.Create("Chicago, IL", 2, 34, 18), _
               Tuple.Create("Newark, NJ", 4, 61, 43), _
               Tuple.Create("Boston, MA", 6, 77, 59), _
               Tuple.Create("Detroit, MI", 9, 74, 53), _
               Tuple.Create("Minneapolis, MN", 8, 81, 61) }
      ' Display the array of 4-tuples.
      Console.WriteLine("{0,41}", "Temperatures")
      Console.WriteLine("{0,-20} {1,5}    {2,4}  {3,4}",
                        "City", "Month", "High", "Low")
      Console.WriteLine()
      For Each temperature In temperatures
         Console.WriteLine("{0,-20} {1,5}    {2,4:N1}  {3,4:N1}",
                           temperature.Item1,
                           DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(temperature.Item2 - 1),
                           temperature.Item3, temperature.Item4)
      Next
   End Sub
End Module
' The example displays the following output:
'                                    Temperatures
'       City                 Month    High   Low
'
'       New York, NY           Mar    61.0  43.0
'       Chicago, IL            Jan    34.0  18.0
'       Newark, NJ             Mar    61.0  43.0
'       Boston, MA             May    77.0  59.0
'       Detroit, MI            Aug    74.0  53.0
'       Minneapolis, MN        Jul    81.0  61.0

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      Tuple<string, int, double, double>[] temperatures =
            { Tuple.Create("New York, NY", 4, 61.0, 43.0),
              Tuple.Create("Chicago, IL", 2, 34.0, 18.0),
              Tuple.Create("Newark, NJ", 4, 61.0, 43.0),
              Tuple.Create("Boston, MA", 6, 77.0, 59.0),
              Tuple.Create("Detroit, MI", 9, 74.0, 53.0),
              Tuple.Create("Minneapolis, MN", 8, 81.0, 61.0) };
      // Display the array of 4-tuple objects.
      Console.WriteLine("{0,41}", "Temperatures");
      Console.WriteLine("{0,-20} {1,5}    {2,4}  {3,4}\n",
                        "City", "Month", "High", "Low");
      foreach (var temperature in temperatures)
         Console.WriteLine("{0,-20} {1,5}    {2,4:N1}  {3,4:N1}",
                           temperature.Item1,
                           DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(temperature.Item2 - 1),
                           temperature.Item3, temperature.Item4);
   }
}
// The example displays the following output:
//                                    Temperatures
//       City                 Month    High   Low
//
//       New York, NY           Mar    61.0  43.0
//       Chicago, IL            Jan    34.0  18.0
//       Newark, NJ             Mar    61.0  43.0
//       Boston, MA             May    77.0  59.0
//       Detroit, MI            Aug    74.0  53.0
//       Minneapolis, MN        Jul    81.0  61.0

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.Item3 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
Item3 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的第三个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item3 As T3
    Get
public T3 Item3 { get; }
public:
property T3 Item3 {
    T3 get ();
}
member Item3 : 'T3

属性值

类型： T3
当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的第三个分量的值。

您可以通过以下两种方式之一动态确定 Item3 组件的类型：

  • 对 GetType 属性所返回的值调用 Item3 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第三个数组元素。

下例定义 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其元素中包含城市名称、月份以及当月的平均高温和平均低温。然后，检索并显示每个元素的值。 下例定义 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其元素中包含城市名称、月份以及当月的平均高温和平均低温。然后，检索并显示每个元素的值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim temperatures() =
             { Tuple.Create("New York, NY", 4, 61, 43), _
               Tuple.Create("Chicago, IL", 2, 34, 18), _
               Tuple.Create("Newark, NJ", 4, 61, 43), _
               Tuple.Create("Boston, MA", 6, 77, 59), _
               Tuple.Create("Detroit, MI", 9, 74, 53), _
               Tuple.Create("Minneapolis, MN", 8, 81, 61) }
      ' Display the array of 4-tuples.
      Console.WriteLine("{0,41}", "Temperatures")
      Console.WriteLine("{0,-20} {1,5}    {2,4}  {3,4}",
                        "City", "Month", "High", "Low")
      Console.WriteLine()
      For Each temperature In temperatures
         Console.WriteLine("{0,-20} {1,5}    {2,4:N1}  {3,4:N1}",
                           temperature.Item1,
                           DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(temperature.Item2 - 1),
                           temperature.Item3, temperature.Item4)
      Next
   End Sub
End Module
' The example displays the following output:
'                                    Temperatures
'       City                 Month    High   Low
'
'       New York, NY           Mar    61.0  43.0
'       Chicago, IL            Jan    34.0  18.0
'       Newark, NJ             Mar    61.0  43.0
'       Boston, MA             May    77.0  59.0
'       Detroit, MI            Aug    74.0  53.0
'       Minneapolis, MN        Jul    81.0  61.0

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      Tuple<string, int, double, double>[] temperatures =
            { Tuple.Create("New York, NY", 4, 61.0, 43.0),
              Tuple.Create("Chicago, IL", 2, 34.0, 18.0),
              Tuple.Create("Newark, NJ", 4, 61.0, 43.0),
              Tuple.Create("Boston, MA", 6, 77.0, 59.0),
              Tuple.Create("Detroit, MI", 9, 74.0, 53.0),
              Tuple.Create("Minneapolis, MN", 8, 81.0, 61.0) };
      // Display the array of 4-tuple objects.
      Console.WriteLine("{0,41}", "Temperatures");
      Console.WriteLine("{0,-20} {1,5}    {2,4}  {3,4}\n",
                        "City", "Month", "High", "Low");
      foreach (var temperature in temperatures)
         Console.WriteLine("{0,-20} {1,5}    {2,4:N1}  {3,4:N1}",
                           temperature.Item1,
                           DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(temperature.Item2 - 1),
                           temperature.Item3, temperature.Item4);
   }
}
// The example displays the following output:
//                                    Temperatures
//       City                 Month    High   Low
//
//       New York, NY           Mar    61.0  43.0
//       Chicago, IL            Jan    34.0  18.0
//       Newark, NJ             Mar    61.0  43.0
//       Boston, MA             May    77.0  59.0
//       Detroit, MI            Aug    74.0  53.0
//       Minneapolis, MN        Jul    81.0  61.0

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4 >)>) ..::.Item4 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4
>
)
>
)
.
.
::
.
Item4 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的第四个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item4 As T4
    Get
public T4 Item4 { get; }
public:
property T4 Item4 {
    T4 get ();
}
member Item4 : 'T4

属性值

类型： T4
当前 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的第四个分量的值。

您可以通过以下两种方式之一动态确定 Item4 组件的类型：

  • 对 GetType 属性所返回的值调用 Item4 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第四个数组元素。

下例定义 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其元素中包含城市名称、月份以及当月的平均高温和平均低温。然后，检索并显示每个元素的值。 下例定义 Tuple<(Of <(T1, T2, T3, T4>)>) 对象数组，其元素中包含城市名称、月份以及当月的平均高温和平均低温。然后，检索并显示每个元素的值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim temperatures() =
             { Tuple.Create("New York, NY", 4, 61, 43), _
               Tuple.Create("Chicago, IL", 2, 34, 18), _
               Tuple.Create("Newark, NJ", 4, 61, 43), _
               Tuple.Create("Boston, MA", 6, 77, 59), _
               Tuple.Create("Detroit, MI", 9, 74, 53), _
               Tuple.Create("Minneapolis, MN", 8, 81, 61) }
      ' Display the array of 4-tuples.
      Console.WriteLine("{0,41}", "Temperatures")
      Console.WriteLine("{0,-20} {1,5}    {2,4}  {3,4}",
                        "City", "Month", "High", "Low")
      Console.WriteLine()
      For Each temperature In temperatures
         Console.WriteLine("{0,-20} {1,5}    {2,4:N1}  {3,4:N1}",
                           temperature.Item1,
                           DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(temperature.Item2 - 1),
                           temperature.Item3, temperature.Item4)
      Next
   End Sub
End Module
' The example displays the following output:
'                                    Temperatures
'       City                 Month    High   Low
'
'       New York, NY           Mar    61.0  43.0
'       Chicago, IL            Jan    34.0  18.0
'       Newark, NJ             Mar    61.0  43.0
'       Boston, MA             May    77.0  59.0
'       Detroit, MI            Aug    74.0  53.0
'       Minneapolis, MN        Jul    81.0  61.0

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      Tuple<string, int, double, double>[] temperatures =
            { Tuple.Create("New York, NY", 4, 61.0, 43.0),
              Tuple.Create("Chicago, IL", 2, 34.0, 18.0),
              Tuple.Create("Newark, NJ", 4, 61.0, 43.0),
              Tuple.Create("Boston, MA", 6, 77.0, 59.0),
              Tuple.Create("Detroit, MI", 9, 74.0, 53.0),
              Tuple.Create("Minneapolis, MN", 8, 81.0, 61.0) };
      // Display the array of 4-tuple objects.
      Console.WriteLine("{0,41}", "Temperatures");
      Console.WriteLine("{0,-20} {1,5}    {2,4}  {3,4}\n",
                        "City", "Month", "High", "Low");
      foreach (var temperature in temperatures)
         Console.WriteLine("{0,-20} {1,5}    {2,4:N1}  {3,4:N1}",
                           temperature.Item1,
                           DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(temperature.Item2 - 1),
                           temperature.Item3, temperature.Item4);
   }
}
// The example displays the following output:
//                                    Temperatures
//       City                 Month    High   Low
//
//       New York, NY           Mar    61.0  43.0
//       Chicago, IL            Jan    34.0  18.0
//       Newark, NJ             Mar    61.0  43.0
//       Boston, MA             May    77.0  59.0
//       Detroit, MI            Aug    74.0  53.0
//       Minneapolis, MN        Jul    81.0  61.0

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4 类
Tuple T1, T2, T3, T4 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) 类

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
类
成员

表示 5 元组，即五元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class Tuple(Of T1, T2, T3, T4, T5) _
    Implements IStructuralEquatable, IStructuralComparable, IComparable
[SerializableAttribute]
public class Tuple<T1, T2, T3, T4, T5> : IStructuralEquatable,
    IStructuralComparable, IComparable

[SerializableAttribute]
generic<typename T1, typename T2, typename T3, typename T4, typename T5>
public ref class Tuple : IStructuralEquatable, IStructuralComparable,
    IComparable
[<SerializableAttribute>]
type Tuple<'T1, 'T2, 'T3, 'T4, 'T5> =
    class
        interface IStructuralEquatable
        interface IStructuralComparable
        interface IComparable
    end

类型参数

T1

此元组的第一个组件的类型。

T2

此元组的第二个组件的类型。

T3

此元组的第三个组件的类型。

T4

此元组的第四个组件的类型。

T5

元组的第五个分量的类型。

元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4, T5>)>) 类表示一个 5 元组，即具有 5 个分量的元组。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4, T5>)>) 类表示一个 5 元组，即具有 5 个分量的元组。

可以通过调用 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 构造函数或静态 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5>)>)(T1, T2, T3, T4, T5) 方法来实例化 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象。通过使用只读的 Item1、Item2、Item3、Item4、和 Item5 实例属性，可以检索元组中组件的值。 可以通过调用 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 构造函数或静态 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5>)>)(T1, T2, T3, T4, T5) 方法来实例化 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象。通过使用只读的 Item1、Item2、Item3、Item4、和 Item5 实例属性，可以检索元组中组件的值。

元组通常有四种不同的使用方式：

  • 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。下面的示例定义了 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。该数组传递给 ComputeStatistics 方法，该方法计算跑卫的每场带球次数、每场平均码数、每次带球的平均码数以及每次比赛中的平均达阵次数。 提供对数据集的轻松访问和操作。下面的示例定义了 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。该数组传递给 ComputeStatistics 方法，该方法计算跑卫的每场带球次数、每场平均码数、每次带球的平均码数以及每次比赛中的平均达阵次数。 提供对数据集的轻松访问和操作。下面的示例定义了 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。该数组传递给 ComputeStatistics 方法，该方法计算跑卫的每场带球次数、每场平均码数、每次带球的平均码数以及每次比赛中的平均达阵次数。

    Imports System.Collections.Generic

Module Example
   Public Sub Main()
      ' Organization of runningBacks 5-tuple:
      '    Component 1: Player name
      '    Component 2: Number of games played
      '    Component 3: Number of attempts (carries)
      '    Component 4: Number of yards gained
      '    Component 5: Number of touchdowns
      Dim runningBacks() =
          { Tuple.Create("Payton, Walter", 190, 3838, 16726, 110),
            Tuple.Create("Sanders, Barry", 153, 3062, 15269, 99),
            Tuple.Create("Brown, Jim", 118, 2359, 12312, 106),
            Tuple.Create("Dickerson, Eric", 144, 2996, 13259, 90),
            Tuple.Create("Faulk, Marshall", 176, 2836, 12279, 100) }
      ' Calculate statistics.
      ' Organization of runningStats 5-tuple:
      '    Component 1: Player name
      '    Component 2: Number of attempts per game
      '    Component 3: Number of yards per game
      '    Component 4: Number of yards per attempt
      '    Component 5: Number of touchdowns per attempt
      Dim runningStats() = ComputeStatistics(runningBacks)

      ' Display the result.
      Console.WriteLine("{0,-16} {1,5} {2,6} {3,7} {4,7} {5,7} {6,7} {7,5} {8,7}",
                        "Name", "Games", "Att", "Att/Gm", "Yards", "Yds/Gm",
                        "Yds/Att", "TD", "TD/Att")
      Console.WriteLine()
      For ctr As Integer = 0 To runningBacks.Length - 1
         Console.WriteLine("{0,-16} {1,5} {2,6:N0} {3,7:N1} {4,7:N0} {5,7:N1} {6,7:N2} {7,5} {8,7:N3}",
                           runningBacks(ctr).Item1, runningBacks(ctr).Item2, runningBacks(ctr).Item3,
                           runningStats(ctr).Item2, runningBacks(ctr).Item4, runningStats(ctr).Item3,
                           runningStats(ctr).Item4, runningBacks(ctr).Item5, runningStats(ctr).Item5)
         Console.WriteLine()
      Next
   End Sub

   Private Function ComputeStatistics(players() As Tuple(Of String, Integer, Integer, Integer, Integer)) _
                    As Tuple(Of String, Double, Double, Double, Double)()

      Dim result As Tuple(Of String, Double, Double, Double, Double)
      Dim list As New List(Of Tuple(Of String, Double, Double, Double, Double))()

      For Each player In players
         ' Create result object containing player name and statistics.
         result = Tuple.Create(player.Item1,
                            player.Item3/player.Item2, player.Item4/player.Item2,
                            player.Item4/player.Item3, player.Item5/player.Item3)
         list.Add(result)
      Next
      Return list.ToArray()
   End Function
End Module
' The example displays the following output:
'    Name             Games    Att  Att/Gm   Yards  Yds/Gm Yds/Att    TD  TD/Att
'
'    Payton, Walter     190  3,838    20.2  16,726    88.0    4.36   110   0.029
'
'    Sanders, Barry     153  3,062    20.0  15,269    99.8    4.99    99   0.032
'
'    Brown, Jim         118  2,359    20.0  12,312   104.3    5.22   106   0.045
'
'    Dickerson, Eric    144  2,996    20.8  13,259    92.1    4.43    90   0.030
'
'    Faulk, Marshall    176  2,836    16.1  12,279    69.8    4.33   100   0.035

    using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      // Organization of runningBacks 5-tuple:
      //    Component 1: Player name
      //    Component 2: Number of games played
      //    Component 3: Number of attempts (carries)
      //    Component 4: Number of yards gained
      //    Component 5: Number of touchdowns
      Tuple<string, int, int, int, int>[] runningBacks =
           { Tuple.Create("Payton, Walter", 190, 3838, 16726, 110),
             Tuple.Create("Sanders, Barry", 153, 3062, 15269, 99),
             Tuple.Create("Brown, Jim", 118, 2359, 12312, 106),
             Tuple.Create("Dickerson, Eric", 144, 2996, 13259, 90),
             Tuple.Create("Faulk, Marshall", 176, 2836, 12279, 100) };
      // Calculate statistics.
      // Organization of runningStats 5-tuple:
      //    Component 1: Player name
      //    Component 2: Number of attempts per game
      //    Component 3: Number of yards per game
      //    Component 4: Number of yards per attempt
      //    Component 5: Number of touchdowns per attempt
      Tuple<string, double, double, double, double>[] runningStats  =
          ComputeStatistics(runningBacks);

      // Display the result.
      Console.WriteLine("{0,-16} {1,5} {2,6} {3,7} {4,7} {5,7} {6,7} {7,5} {8,7}\n",
                        "Name", "Games", "Att", "Att/Gm", "Yards", "Yds/Gm",
                        "Yds/Att", "TD", "TD/Att");
      for (int ctr = 0; ctr < runningBacks.Length; ctr++)
         Console.WriteLine("{0,-16} {1,5} {2,6:N0} {3,7:N1} {4,7:N0} {5,7:N1} {6,7:N2} {7,5} {8,7:N3}\n",
                           runningBacks[ctr].Item1, runningBacks[ctr].Item2, runningBacks[ctr].Item3,
                           runningStats[ctr].Item2, runningBacks[ctr].Item4, runningStats[ctr].Item3,
                           runningStats[ctr].Item4, runningBacks[ctr].Item5, runningStats[ctr].Item5);
   }

   private static Tuple<string, double, double, double, double>[] ComputeStatistics(
                Tuple<string, int, int, int, int>[] players)
   {
      Tuple<string, double, double, double, double> result;
      var list = new List<Tuple<string, double, double, double, double>>();

      foreach (var player in players)
      {
         // Create result object containing player name and statistics.
         result = Tuple.Create(player.Item1,
                               player.Item3/((double)player.Item2),
                               player.Item4/((double)player.Item2),
                               player.Item4/((double)player.Item3),
                               player.Item5/((double)player.Item3));
         list.Add(result);
      }
      return list.ToArray();
   }
}
// The example displays the following output:
//    Name             Games    Att  Att/Gm   Yards  Yds/Gm Yds/Att    TD  TD/Att
//
//    Payton, Walter     190  3,838    20.2  16,726    88.0    4.36   110   0.029
//
//    Sanders, Barry     153  3,062    20.0  15,269    99.8    4.99    99   0.032
//
//    Brown, Jim         118  2,359    20.0  12,312   104.3    5.22   106   0.045
//
//    Dickerson, Eric    144  2,996    20.8  13,259    92.1    4.43    90   0.030
//
//    Faulk, Marshall    176  2,836    16.1  12,279    69.8    4.33   100   0.035

  • 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前例在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的数组中返回运动员姓名及计算统计信息。 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前例在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的数组中返回运动员姓名及计算统计信息。

  • 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象作为方法参数提供，则可以提供具有五项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象作为方法参数提供，则可以提供具有五项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象作为方法参数提供，则可以提供具有五项数据的线程启动例程。

System System..::.Tuple<(Of <(T1, T2, T3, T4, T5>)>)Tuple System..::.Tuple<(Of <(T1, T2, T3, T4, T5>)>)T1, T2, T3, T4, T5 System..::.Tuple<(Of <(T1, T2, T3, T4, T5>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 成员
System 命名空间
Tuple
Tuple T1
Tuple T1, T2
Tuple T1, T2, T3
Tuple T1, T2, T3, T4
Tuple T1, T2, T3, T4, T5, T6
Tuple T1, T2, T3, T4, T5, T6, T7
Tuple T1, T2, T3, T4, T5, T6, T7, TRest


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) 成员

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

表示 5 元组，即五元组。

Tuple T1, T2, T3, T4, T5 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) 构造函数

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
构造函数
Tuple

初始化 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4, _
    item5 As T5 _
)
public Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5
)
public:
Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5
)
new :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 *
        item5:'T5 -> Tuple

参数

item1
类型： T1
此元组的第一个组件的值。
item2
类型： T2
此元组的第二个组件的值。
item3
类型： T3
此元组的第三个组件的值。
item4
类型： T4
此元组的第四个组件的值
item5
类型： T5
元组的第五个分量的值。

还可以使用静态 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5>)>)(T1, T2, T3, T4, T5) 方法实例化 5 元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5>)>)(T1, T2, T3, T4, T5) 方法来实例化一个 5 元组，其中第一个组件的类型为 String、其余 4 个组件的类型为 Int32。 还可以使用静态 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5>)>)(T1, T2, T3, T4, T5) 方法实例化 5 元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5>)>)(T1, T2, T3, T4, T5) 方法来实例化一个 5 元组，其中第一个组件的类型为 String、其余 4 个组件的类型为 Int32。

Dim tuple5 = Tuple.Create("New York", 1990, 7322564, 2000,
                          8008278)

var tuple5 = Tuple.Create("New York", 1990, 7322564, 2000, 8008278);

这等效于下面的对 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 类构造函数的调用。

Dim tuple5 = New Tuple(Of String, Integer, Integer,
                       Integer, Integer) _
                       ("New York", 1990, 7322564, 2000, 8008278)

var tuple5 = new Tuple<string, int, int, int, int>
                      ("New York", 1990, 7322564, 2000, 8008278);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4, T5 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
Equals 方法
Tuple

返回一个值，该值指示当前的 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

在下列情况下，obj 参数视为等于当前实例：

  • 它是 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象。

  • 它的五个组件的类型与当前实例相同。

  • 它的五个组件的值与当前实例的对应值相同。

下面的示例定义一个包含两个测试组中病人温度相关数据的 5 元组对象的数组。数组的第一个组件提供了测试组的个数，第二至第五个组件按小时为间隔提供患者的温度。调用 Tuple<(Of <(T1, T2, T3, T4, T5>)>)..::.Equals(Object) 方法，以便将每个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象与其他每个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象进行比较。输出表明，仅当 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象所有五个部分的值都相等时，Equals 方法才会返回 true。 下面的示例定义一个包含两个测试组中病人温度相关数据的 5 元组对象的数组。数组的第一个组件提供了测试组的个数，第二至第五个组件按小时为间隔提供患者的温度。调用 Tuple<(Of <(T1, T2, T3, T4, T5>)>)..::.Equals(Object) 方法，以便将每个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象与其他每个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象进行比较。输出表明，仅当 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象所有五个部分的值都相等时，Equals 方法才会返回 true。 下面的示例定义一个包含两个测试组中病人温度相关数据的 5 元组对象的数组。数组的第一个组件提供了测试组的个数，第二至第五个组件按小时为间隔提供患者的温度。调用 Tuple<(Of <(T1, T2, T3, T4, T5>)>)..::.Equals(Object) 方法，以便将每个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象与其他每个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象进行比较。输出表明，仅当 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象所有五个部分的值都相等时，Equals 方法才会返回 true。 下面的示例定义一个包含两个测试组中病人温度相关数据的 5 元组对象的数组。数组的第一个组件提供了测试组的个数，第二至第五个组件按小时为间隔提供患者的温度。调用 Tuple<(Of <(T1, T2, T3, T4, T5>)>)..::.Equals(Object) 方法，以便将每个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象与其他每个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象进行比较。输出表明，仅当 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象所有五个部分的值都相等时，Equals 方法才会返回 true。

Module Example
   Public Sub Main()
      Dim temperatureInfos() =
             { Tuple.Create(2, 97.9, 97.8, 98.0, 98.2),
               Tuple.Create(1, 98.6, 98.8, 98.8, 99.0),
               Tuple.Create(2, 98.6, 98.6, 98.6, 98.4),
               Tuple.Create(1, 98.4, 98.6, 99.0, 99.2),
               Tuple.Create(2, 98.6, 98.6, 98.6, 98.4),
               Tuple.Create(1, 98.6, 98.8, 98.8, 99.0) }
      ' Compare each item with every other item for equality.
      For ctr As Integer = 0 To temperatureInfos.Length - 1
         Dim temperatureInfo = temperatureInfos(ctr)
         For ctr2 As Integer = ctr + 1 To temperatureInfos.Length - 1
            Console.WriteLine("{0} = {1}: {2}", temperatureInfo, temperatureInfos(ctr2),
                                                temperatureInfo.Equals(temperatureInfos(ctr2)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    (2, 97.9, 97.8, 98, 98.2) = (1, 98.6, 98.8, 98.8, 99): False
'    (2, 97.9, 97.8, 98, 98.2) = (2, 98.6, 98.6, 98.6, 98.4): False
'    (2, 97.9, 97.8, 98, 98.2) = (1, 98.4, 98.6, 99, 99.2): False
'    (2, 97.9, 97.8, 98, 98.2) = (2, 98.6, 98.6, 98.6, 98.4): False
'    (2, 97.9, 97.8, 98, 98.2) = (1, 98.6, 98.8, 98.8, 99): False
'
'    (1, 98.6, 98.8, 98.8, 99) = (2, 98.6, 98.6, 98.6, 98.4): False
'    (1, 98.6, 98.8, 98.8, 99) = (1, 98.4, 98.6, 99, 99.2): False
'    (1, 98.6, 98.8, 98.8, 99) = (2, 98.6, 98.6, 98.6, 98.4): False
'    (1, 98.6, 98.8, 98.8, 99) = (1, 98.6, 98.8, 98.8, 99): True
'
'    (2, 98.6, 98.6, 98.6, 98.4) = (1, 98.4, 98.6, 99, 99.2): False
'    (2, 98.6, 98.6, 98.6, 98.4) = (2, 98.6, 98.6, 98.6, 98.4): True
'    (2, 98.6, 98.6, 98.6, 98.4) = (1, 98.6, 98.8, 98.8, 99): False
'
'    (1, 98.4, 98.6, 99, 99.2) = (2, 98.6, 98.6, 98.6, 98.4): False
'    (1, 98.4, 98.6, 99, 99.2) = (1, 98.6, 98.8, 98.8, 99): False
'
'    (2, 98.6, 98.6, 98.6, 98.4) = (1, 98.6, 98.8, 98.8, 99): False

using System;

public class Class1
{
   public static void Main()
   {
      Tuple<int, double, double, double, double>[] temperatureInfos =
                           { Tuple.Create(2, 97.9, 97.8, 98.0, 98.2),
                             Tuple.Create(1, 98.6, 98.8, 98.8, 99.0),
                             Tuple.Create(2, 98.6, 98.6, 98.6, 98.4),
                             Tuple.Create(1, 98.4, 98.6, 99.0, 99.2),
                             Tuple.Create(2, 98.6, 98.6, 98.6, 98.4),
                             Tuple.Create(1, 98.6, 98.8, 98.8, 99.0) };
      // Compare each item with every other item for equality.
      for (int ctr = 0; ctr < temperatureInfos.Length; ctr++)
      {
         var temperatureInfo = temperatureInfos[ctr];
         for (int ctr2 = ctr + 1; ctr2 < temperatureInfos.Length; ctr2++)
            Console.WriteLine("{0} = {1}: {2}", temperatureInfo, temperatureInfos[ctr2],
                                                temperatureInfo.Equals(temperatureInfos[ctr2]));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    (2, 97.9, 97.8, 98, 98.2) = (1, 98.6, 98.8, 98.8, 99): False
//    (2, 97.9, 97.8, 98, 98.2) = (2, 98.6, 98.6, 98.6, 98.4): False
//    (2, 97.9, 97.8, 98, 98.2) = (1, 98.4, 98.6, 99, 99.2): False
//    (2, 97.9, 97.8, 98, 98.2) = (2, 98.6, 98.6, 98.6, 98.4): False
//    (2, 97.9, 97.8, 98, 98.2) = (1, 98.6, 98.8, 98.8, 99): False
//
//    (1, 98.6, 98.8, 98.8, 99) = (2, 98.6, 98.6, 98.6, 98.4): False
//    (1, 98.6, 98.8, 98.8, 99) = (1, 98.4, 98.6, 99, 99.2): False
//    (1, 98.6, 98.8, 98.8, 99) = (2, 98.6, 98.6, 98.6, 98.4): False
//    (1, 98.6, 98.8, 98.8, 99) = (1, 98.6, 98.8, 98.8, 99): True
//
//    (2, 98.6, 98.6, 98.6, 98.4) = (1, 98.4, 98.6, 99, 99.2): False
//    (2, 98.6, 98.6, 98.6, 98.4) = (2, 98.6, 98.6, 98.6, 98.4): True
//    (2, 98.6, 98.6, 98.6, 98.4) = (1, 98.6, 98.8, 98.8, 99): False
//
//    (1, 98.4, 98.6, 99, 99.2) = (2, 98.6, 98.6, 98.6, 98.4): False
//    (1, 98.4, 98.6, 99, 99.2) = (1, 98.6, 98.8, 98.8, 99): False
//
//    (2, 98.6, 98.6, 98.6, 98.4) = (1, 98.6, 98.8, 98.8, 99): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
GetHashCode 方法
Tuple

返回当前的 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.IComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
IComparable
.
.
::
.
CompareTo 方法
Tuple

将当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是位于指定对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ obj As Object _ ) As Integer Implements IComparable.CompareTo
int IComparable.CompareTo( Object obj )
private: virtual int CompareTo( Object^ obj ) sealed = IComparable::CompareTo
private abstract CompareTo : obj:Object -> int private override CompareTo : obj:Object -> int
参数
obj
类型： System Object
与当前实例进行比较的对象。
返回值
类型： System Int32
一个有符号整数，指示此实例与
obj
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
obj
之前。
零
此实例与
obj
在排序顺序中的位置相同。
一个正整数
此实例在
obj
之后。
实现
异常 | 条件
ArgumentException | obj 不是 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 实例强制转换为 IComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 实例强制转换为 IComparable 接口时使用它。

此方法提供 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法（例如 Array..::.Sort(Array) 和 SortedList..::.Add）的默认重载方法调用，用来对集合成员进行排序。 此方法提供 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法（例如 Array..::.Sort(Array) 和 SortedList..::.Add）的默认重载方法调用，用来对集合成员进行排序。

警告说明 警告

IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5>)>)..::.Equals(Object) 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5>)>)..::.Equals(Object) 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5>)>)..::.Equals(Object) 方法。

IComparable..::.CompareTo(Object) 方法使用 Comparer<(Of <(T>)>)..::.Default 比较器。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。五元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。五元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。五元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。五元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。五元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。五元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。

Imports System.Collections.Generic

Module Example
   Public Sub Main()
      ' Organization of runningBacks 5-tuple:
      '    Component 1: Player name
      '    Component 2: Number of games played
      '    Component 3: Number of attempts (carries)
      '    Component 4: Number of yards gained
      '    Component 5: Number of touchdowns
      Dim runningBacks() =
          { Tuple.Create("Payton, Walter", 190, 3838, 16726, 110),
            Tuple.Create("Sanders, Barry", 153, 3062, 15269, 99),
            Tuple.Create("Brown, Jim", 118, 2359, 12312, 106),
            Tuple.Create("Dickerson, Eric", 144, 2996, 13259, 90),
            Tuple.Create("Faulk, Marshall", 176, 2836, 12279, 100) }

      ' Display the array in unsorted order.
      Console.WriteLine("The values in unsorted order:")
      For Each runningBack In runningBacks
         Console.WriteLine(runningBack.ToString())
      Next
      Console.WriteLine()

      ' Sort the array
      Array.Sort(runningBacks)

      ' Display the array in sorted order.
      Console.WriteLine("The values in sorted order:")
      For Each runningBack In runningBacks
         Console.WriteLine(runningBack.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'       The values in unsorted order:
'       (Payton, Walter, 190, 3838, 16726, 110)
'       (Sanders, Barry, 153, 3062, 15269, 99)
'       (Brown, Jim, 118, 2359, 12312, 106)
'       (Dickerson, Eric, 144, 2996, 13259, 90)
'       (Faulk, Marshall, 176, 2836, 12279, 100)
'
'       The values in sorted order:
'       (Brown, Jim, 118, 2359, 12312, 106)
'       (Dickerson, Eric, 144, 2996, 13259, 90)
'       (Faulk, Marshall, 176, 2836, 12279, 100)
'       (Payton, Walter, 190, 3838, 16726, 110)
'       (Sanders, Barry, 153, 3062, 15269, 99)

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      // Organization of runningBacks 5-tuple:
      //    Component 1: Player name
      //    Component 2: Number of games played
      //    Component 3: Number of attempts (carries)
      //    Component 4: Number of yards gained
      //    Component 5: Number of touchdowns
      Tuple<string, int, int, int, int>[] runningBacks =
           { Tuple.Create("Payton, Walter", 190, 3838, 16726, 110),
             Tuple.Create("Sanders, Barry", 153, 3062, 15269, 99),
             Tuple.Create("Brown, Jim", 118, 2359, 12312, 106),
             Tuple.Create("Dickerson, Eric", 144, 2996, 13259, 90),
             Tuple.Create("Faulk, Marshall", 176, 2836, 12279, 100) };

      // Display the array in unsorted order.
      Console.WriteLine("The values in unsorted order:");
      foreach (var runningBack in runningBacks)
         Console.WriteLine(runningBack.ToString());
      Console.WriteLine();

      // Sort the array
      Array.Sort(runningBacks);

      // Display the array in sorted order.
      Console.WriteLine("The values in sorted order:");
      foreach (var runningBack in runningBacks)
         Console.WriteLine(runningBack.ToString());
   }
}
// The example displays the following output:
//       The values in unsorted order:
//       (Payton, Walter, 190, 3838, 16726, 110)
//       (Sanders, Barry, 153, 3062, 15269, 99)
//       (Brown, Jim, 118, 2359, 12312, 106)
//       (Dickerson, Eric, 144, 2996, 13259, 90)
//       (Faulk, Marshall, 176, 2836, 12279, 100)
//
//       The values in sorted order:
//       (Brown, Jim, 118, 2359, 12312, 106)
//       (Dickerson, Eric, 144, 2996, 13259, 90)
//       (Faulk, Marshall, 176, 2836, 12279, 100)
//       (Payton, Walter, 190, 3838, 16726, 110)
//       (Sanders, Barry, 153, 3062, 15269, 99)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间
Equals


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.IStructuralComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
IStructuralComparable
.
.
::
.
CompareTo 方法
Tuple

使用指定的比较器将当前的 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer Implements IStructuralComparable.CompareTo
int IStructuralComparable.CompareTo( Object other, IComparer comparer )
private: virtual int CompareTo( Object^ other, IComparer^ comparer ) sealed = IStructuralComparable::CompareTo
private abstract CompareTo : other:Object * comparer:IComparer -> int private override CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个对象，提供自定义比较规则。
返回值
类型： System Int32
一个有符号整数，指示此实例与
other
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
other
之前。
零
此实例与
other
在排序顺序中的位置相同。
一个正整数
此实例在
other
之后。
实现
异常 | 条件
ArgumentException | other 不是 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 实例强制转换为 IStructuralComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 实例强制转换为 IStructuralComparable 接口时使用它。

虽然可以直接调用该方法，但它通常由包括 IComparer 参数的集合排序方法调用，用来对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。 虽然可以直接调用该方法，但它通常由包括 IComparer 参数的集合排序方法调用，用来对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。

警告说明 警告

IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。5 元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。为了对数组进行排序，该示例定义了一个泛型 YardsGained 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象第四个组件（获得的码数）值的降序对这些对象进行排序，而不是按第一个组件。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。5 元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。为了对数组进行排序，该示例定义了一个泛型 YardsGained 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象第四个组件（获得的码数）值的降序对这些对象进行排序，而不是按第一个组件。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。5 元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。为了对数组进行排序，该示例定义了一个泛型 YardsGained 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象第四个组件（获得的码数）值的降序对这些对象进行排序，而不是按第一个组件。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。5 元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。为了对数组进行排序，该示例定义了一个泛型 YardsGained 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象第四个组件（获得的码数）值的降序对这些对象进行排序，而不是按第一个组件。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。5 元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。为了对数组进行排序，该示例定义了一个泛型 YardsGained 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象第四个组件（获得的码数）值的降序对这些对象进行排序，而不是按第一个组件。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其中包含美国职业橄榄球跑卫的职业统计数据。5 元组的组件包含了美国橄榄球跑卫的名称、他们参加的比赛数量、带球次数、获得的总码数以及这些比赛中得分的达阵次数。此示例无序显示数组中每个元组的组件，对数组排序，然后调用 ToString 有序显示每个元组。为了对数组进行排序，该示例定义了一个泛型 YardsGained 类，该类实现 IComparer 接口，并按 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象第四个组件（获得的码数）值的降序对这些对象进行排序，而不是按第一个组件。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 方法。Array..::.Sort(Array, IComparer) 方法为数组中的每个元素隐式调用此方法。

Imports System.Collections
Imports System.Collections.Generic

Public Class YardsGained(Of T1, T2, T3, T4, T5) : Implements IComparer
   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare
      Dim tX As Tuple(Of T1, T2, T3, T4, T5) = TryCast(x, Tuple(Of T1, T2, T3, T4, T5))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY As Tuple(Of T1, T2, T3, T4, T5) = DirectCast(y, Tuple(Of T1, T2, T3, T4, T5))
         Return -1 * Comparer(Of T4).Default.Compare(tx.Item4, tY.Item4)
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      ' Organization of runningBacks 5-tuple:
      '    Component 1: Player name
      '    Component 2: Number of games played
      '    Component 3: Number of attempts (carries)
      '    Component 4: Number of yards gained
      '    Component 5: Number of touchdowns
      Dim runningBacks() =
          { Tuple.Create("Payton, Walter", 190, 3838, 16726, 110),
            Tuple.Create("Sanders, Barry", 153, 3062, 15269, 99),
            Tuple.Create("Brown, Jim", 118, 2359, 12312, 106),
            Tuple.Create("Dickerson, Eric", 144, 2996, 13259, 90),
            Tuple.Create("Faulk, Marshall", 176, 2836, 12279, 100) }

      ' Display the array in unsorted order.
      Console.WriteLine("The values in unsorted order:")
      For Each runningBack In runningBacks
         Console.WriteLine(runningBack.ToString())
      Next
      Console.WriteLine()

      ' Sort the array
      Array.Sort(runningBacks, New YardsGained(Of String, Integer, Integer, Integer, Integer)())

      ' Display the array in sorted order.
      Console.WriteLine("The values in sorted order:")
      For Each runningBack In runningBacks
         Console.WriteLine(runningBack.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'       The values in unsorted order:
'       (Payton, Walter, 190, 3838, 16726, 110)
'       (Sanders, Barry, 153, 3062, 15269, 99)
'       (Brown, Jim, 118, 2359, 12312, 106)
'       (Dickerson, Eric, 144, 2996, 13259, 90)
'       (Faulk, Marshall, 176, 2836, 12279, 100)
'
'       The values in sorted order:
'       (Payton, Walter, 190, 3838, 16726, 110)
'       (Sanders, Barry, 153, 3062, 15269, 99)
'       (Dickerson, Eric, 144, 2996, 13259, 90)
'       (Brown, Jim, 118, 2359, 12312, 106)
'       (Faulk, Marshall, 176, 2836, 12279, 100)

using System;
using System.Collections;
using System.Collections.Generic;

public class YardsGained<T1, T2, T3, T4, T5> : IComparer
{
   public int Compare(object x, object y)
   {
      Tuple<T1, T2, T3, T4, T5> tX = x as Tuple<T1, T2, T3, T4, T5>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         Tuple<T1, T2, T3, T4, T5> tY = y as Tuple<T1, T2, T3, T4, T5>;
         return -1 * Comparer<T4>.Default.Compare(tX.Item4, tY.Item4);
      }
   }
}

public class Example
{
   public static void Main()
   {
      // Organization of runningBacks 5-tuple:
      //    Component 1: Player name
      //    Component 2: Number of games played
      //    Component 3: Number of attempts (carries)
      //    Component 4: Number of yards gained
      //    Component 5: Number of touchdowns
      Tuple<string, int, int, int, int>[] runningBacks =
           { Tuple.Create("Payton, Walter", 190, 3838, 16726, 110),
             Tuple.Create("Sanders, Barry", 153, 3062, 15269, 99),
             Tuple.Create("Brown, Jim", 118, 2359, 12312, 106),
             Tuple.Create("Dickerson, Eric", 144, 2996, 13259, 90),
             Tuple.Create("Faulk, Marshall", 176, 2836, 12279, 100) };

      // Display the array in unsorted order.
      Console.WriteLine("The values in unsorted order:");
      foreach (var runningBack in runningBacks)
         Console.WriteLine(runningBack.ToString());
      Console.WriteLine();

      // Sort the array
      Array.Sort(runningBacks, new YardsGained<string, int, int, int, int>());

      // Display the array in sorted order.
      Console.WriteLine("The values in sorted order:");
      foreach (var runningBack in runningBacks)
         Console.WriteLine(runningBack.ToString());
   }
}
// The example displays the following output:
//       The values in unsorted order:
//       (Payton, Walter, 190, 3838, 16726, 110)
//       (Sanders, Barry, 153, 3062, 15269, 99)
//       (Brown, Jim, 118, 2359, 12312, 106)
//       (Dickerson, Eric, 144, 2996, 13259, 90)
//       (Faulk, Marshall, 176, 2836, 12279, 100)
//
//       The values in sorted order:
//       (Brown, Jim, 118, 2359, 12312, 106)
//       (Dickerson, Eric, 144, 2996, 13259, 90)
//       (Faulk, Marshall, 176, 2836, 12279, 100)
//       (Payton, Walter, 190, 3838, 16726, 110)
//       (Sanders, Barry, 153, 3062, 15269, 99)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.IStructuralEquatable ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
Equals 方法
Tuple

返回一个值，该值根据指定的比较方法指示当前的 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals
bool IStructuralEquatable.Equals(
    Object other,
    IEqualityComparer comparer
)
private:
virtual bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::Equals
private abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool
private override Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
与该实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个对象，定义用于评估两个对象是否相等的方法。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item5 值传递给该方法为止。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item5 值传递给该方法为止。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item5 值传递给该方法为止。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item5 值传递给该方法为止。

下面的示例定义一个实现 IEqualityComparer 接口的 DoubleComparer 类。该示例通过使用随机数生成器来填充其第二到第五个组件，来实例化两个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象、将第一个实例强制转换为 IStructuralEquatable 接口，然后使用 DoubleComparer 对象测试两个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象是否大致相等。 下面的示例定义一个实现 IEqualityComparer 接口的 DoubleComparer 类。该示例通过使用随机数生成器来填充其第二到第五个组件，来实例化两个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象、将第一个实例强制转换为 IStructuralEquatable 接口，然后使用 DoubleComparer 对象测试两个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象是否大致相等。

Imports System.Collections

Public Class DoubleComparer(Of T1, T2, T3, T4, T5) : Implements IEqualityComparer
   Private difference As Double
   Private argument As Integer = 0

   Public Sub New(difference As Double)
      Me.difference = difference
   End Sub

   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
                   Implements IEqualityComparer.Equals
      argument += 1

      ' Return true for Item1.
      If argument = 1 Then
         Return True
      Else
         Dim d1 As Double = CDbl(x)
         Dim d2 As Double = CDbl(y)
         If d1 - d2 < d1 * difference Then
            Return True
         Else
            Return False
         End If
      End If
   End Function

   Public Overloads Function GetHashCode(obj As Object) As Integer _
                    Implements IEqualityComparer.GetHashCode
      If TypeOf obj Is T1 Then
         Return CType(obj, T1).GetHashCode()
      ElseIf TypeOf obj Is T2 Then
         Return CType(obj, T2).GetHashCode()
      ElseIf TypeOf obj Is T3 Then
         Return CType(Obj, T3).GetHashCode()
      ElseIf TypeOf obj Is T4 Then
         Return CType(Obj, T4).GetHashCode()
      Else
         Return CType(obj, T5).GetHashCode()
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim value1 = GetValues(1)
      Dim value2 = GetValues(2)
      Dim iValue1 As IStructuralEquatable = value1
      Console.WriteLine("{0} ={3}{1} :{3}{2}", value1, value2, _
                        iValue1.Equals(value2, _
                        New DoubleComparer(Of Integer, Double, Double, Double, Double)(.01)), _
                        vbCrLf)
   End Sub

   Private Function GetValues(ctr As Integer) As Tuple(Of Integer, Double, Double, Double, Double)
      ' Generate four random numbers between 0 and 1
      Dim rnd As New Random(CInt((DateTime.Now.Ticks >> 32) >> ctr))
      Return Tuple.Create(ctr, rnd.NextDouble(), rnd.NextDouble(),
                          rnd.NextDouble(), rnd.NextDouble)
   End Function
End Module
' The example displays output like the following:
'    (1, 0.910850029862882, 0.894596965934428, 0.319678635019659, 0.801647342649124) =
'    (2, 0.818546649915421, 0.355961162762698, 0.0438506622071614, 0.679904267042831) :
'    False

using System;
using System.Collections;

public class DoubleComparer<T1, T2, T3, T4, T5> : IEqualityComparer
{
   private double difference;
   private int argument = 0;

   public DoubleComparer(double difference)
   {
      this.difference = difference;
   }

   new public bool Equals(object x, object y)
   {
      argument += 1;

      // Return true for Item1.
      if (argument == 1) return true;

      double d1 = (double) x;
      double d2 = (double) y;

      if (d1 - d2 < d1 * difference)
         return true;
      else
         return false;
   }

   public int GetHashCode(object obj)
   {
      if (obj is T1)
         return ((T1) obj).GetHashCode();
      else if (obj is T2)
         return ((T2) obj).GetHashCode();
      else if (obj is T3)
         return ((T3) obj).GetHashCode();
      else if (obj is T4)
         return ((T4) obj).GetHashCode();
      else
         return ((T5) obj).GetHashCode();
   }
}

public class Example
{
   public static void Main()
   {
      var value1 = GetValues(1);
      var value2 = GetValues(2);
      IStructuralEquatable iValue1 = value1;
      Console.WriteLine("{0} =\n{1} :\n{2}", value1, value2,
                        iValue1.Equals(value2,
                        new DoubleComparer<int, double, double, double, double>(.01)));
   }

   private static Tuple<int, double, double, double, double> GetValues(int ctr)
   {
      // Generate four random numbers between 0 and 1
      Random rnd = new Random((int)DateTime.Now.Ticks >> 32 >> ctr);
      return Tuple.Create(ctr, rnd.NextDouble(), rnd.NextDouble(),
                          rnd.NextDouble(), rnd.NextDouble());
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.IStructuralEquatable ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
GetHashCode 方法
Tuple

使用指定的计算方法计算当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer Implements IStructuralEquatable.GetHashCode
int IStructuralEquatable.GetHashCode(
    IEqualityComparer comparer
)
private:
virtual int GetHashCode(
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::GetHashCode
private abstract GetHashCode :
        comparer:IEqualityComparer -> int
private override GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个对象，其 IEqualityComparer..::.GetHashCode 方法计算当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的哈希代码。

返回值

类型： System Int32
32 位带符号整数哈希代码。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

该方法只是包装对 comparer 对象的 IEqualityComparer..::.GetHashCode 实现的调用。

对于两个视为相等 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 的对象，用于计算哈希代码的算法应当返回相同的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.ToString 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
ToString 方法
Tuple

返回一个字符串，该字符串表示此 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的字符串表示形式。

此方法返回的字符串采用形式（Item1、Item2、Item3、Item4、Item5），其中 Item1、Item2、Item3、Item4 和 Item5 分别代表 Item1、Item2、Item3、Item4 和 Item5 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。 此方法返回的字符串采用形式（Item1、Item2、Item3、Item4、Item5），其中 Item1、Item2、Item3、Item4 和 Item5 分别代表 Item1、Item2、Item3、Item4 和 Item5 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。

下面的示例演示 ToString 方法。它将显示一个包含美国州的名称、各州 1990 和 2000 年的人口、10 年周期内人口变化以及人口年变化速度的 5 元组对象的数组。 下面的示例演示 ToString 方法。它将显示一个包含美国州的名称、各州 1990 和 2000 年的人口、10 年周期内人口变化以及人口年变化速度的 5 元组对象的数组。

Module Example
   Public Sub Main()
      ' Define array of tuples reflecting population change by state, 1990-2000.
      Dim populationChanges() =
            { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
              Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
              Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) }
      ' Display each tuple.
      For Each item In populationChanges
         Console.WriteLine(item.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'       (California, 29760021, 33871648, 4111627, 13.8)
'       (Illinois, 11430602, 12419293, 988691, 8.6)
'       (Washington, 4866692, 5894121, 1027429, 21.1)

using System;

public class Example
{
   public static void Main()
   {
      // Define array of tuples reflecting population change by state, 1990-2000.
      Tuple<string, int, int, int, double>[] populationChanges =
           { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
             Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
             Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) };
      // Display each tuple.
      foreach (var item in populationChanges)
         Console.WriteLine(item.ToString());
   }
}
// The example displays the following output:
//       (California, 29760021, 33871648, 4111627, 13.8)
//       (Illinois, 11430602, 12419293, 988691, 8.6)
//       (Washington, 4866692, 5894121, 1027429, 21.1)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4, T5 类型公开以下成员。

名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.Item1 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
Item1 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第一个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item1 As T1
    Get
public T1 Item1 { get; }
public:
property T1 Item1 {
    T1 get ();
}
member Item1 : 'T1

属性值

类型： T1
当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第一个分量的值。

您可以通过以下两种方式之一动态确定 Item1 组件的类型：

  • 对 GetType 属性所返回的值调用 Item1 方法。

  • 检索代表 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第一个数组元素。

下面的示例定义了一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其成分包含美国各州的名称、各州在 1990 和 2000 年的人口、近 10 年内各州的人口变化以及人口变化百分比。然后，它循环访问数组，并显示元组中每个组件的值。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其成分包含美国各州的名称、各州在 1990 和 2000 年的人口、近 10 年内各州的人口变化以及人口变化百分比。然后，它循环访问数组，并显示元组中每个组件的值。

Module Example
   Public Sub Main()
      ' Define array of tuples reflecting population change by state, 1990-2000.
      Dim statesData() =
          { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
            Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
            Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) }
      ' Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}", "State", "Population 1990", _
                        "Population 2000", "Change", "% Change")
      Console.WriteLine()
      For Each stateData As Tuple(Of String, Integer, Integer, Integer, Double) In statesData
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}", _
                           stateData.Item1, stateData.Item2, _
                           stateData.Item3, stateData.Item4, stateData.Item5/100)
      Next
   End Sub
End Module
' The example displays the following output:
'    State          Population 1990   Population 2000         Change    % Change
'
'    California          29,760,021        33,871,648      4,111,627      13.8 %
'    Illinois            11,430,602        12,419,293        988,691       8.6 %
'    Washington           4,866,692         5,894,121      1,027,429      21.1 %

using System;

public class Example
{
   public static void Main()
   {
      // Define array of tuples reflecting population change by state, 1990-2000.
      Tuple<string, int, int, int, double>[] statesData =
         { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
           Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
           Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) };

      // Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}\n", "State",
                        "Population 1990", "Population 2000", "Change",
                        "% Change");
      foreach(Tuple<string, int, int, int, double> stateData in statesData)
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}",
                           stateData.Item1, stateData.Item2,
                           stateData.Item3, stateData.Item4, stateData.Item5/100);
   }
}
// The example displays the following output:
//    State          Population 1990   Population 2000         Change    % Change
//
//    California          29,760,021        33,871,648      4,111,627      13.8 %
//    Illinois            11,430,602        12,419,293        988,691       8.6 %
//    Washington           4,866,692         5,894,121      1,027,429      21.1 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.Item2 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
Item2 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第二个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item2 As T2
    Get
public T2 Item2 { get; }
public:
property T2 Item2 {
    T2 get ();
}
member Item2 : 'T2

属性值

类型： T2
当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第二个分量的值。

可以通过以下两种方式之一来动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第二个数组元素。

下面的示例定义了一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其成分包含美国各州的名称、各州在 1990 和 2000 年的人口、近 10 年内各州的人口变化以及人口变化百分比。然后，它循环访问数组，并显示元组中每个组件的值。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其成分包含美国各州的名称、各州在 1990 和 2000 年的人口、近 10 年内各州的人口变化以及人口变化百分比。然后，它循环访问数组，并显示元组中每个组件的值。

Module Example
   Public Sub Main()
      ' Define array of tuples reflecting population change by state, 1990-2000.
      Dim statesData() =
          { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
            Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
            Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) }
      ' Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}", "State", "Population 1990", _
                        "Population 2000", "Change", "% Change")
      Console.WriteLine()
      For Each stateData As Tuple(Of String, Integer, Integer, Integer, Double) In statesData
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}", _
                           stateData.Item1, stateData.Item2, _
                           stateData.Item3, stateData.Item4, stateData.Item5/100)
      Next
   End Sub
End Module
' The example displays the following output:
'    State          Population 1990   Population 2000         Change    % Change
'
'    California          29,760,021        33,871,648      4,111,627      13.8 %
'    Illinois            11,430,602        12,419,293        988,691       8.6 %
'    Washington           4,866,692         5,894,121      1,027,429      21.1 %

using System;

public class Example
{
   public static void Main()
   {
      // Define array of tuples reflecting population change by state, 1990-2000.
      Tuple<string, int, int, int, double>[] statesData =
         { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
           Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
           Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) };

      // Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}\n", "State",
                        "Population 1990", "Population 2000", "Change",
                        "% Change");
      foreach(Tuple<string, int, int, int, double> stateData in statesData)
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}",
                           stateData.Item1, stateData.Item2,
                           stateData.Item3, stateData.Item4, stateData.Item5/100);
   }
}
// The example displays the following output:
//    State          Population 1990   Population 2000         Change    % Change
//
//    California          29,760,021        33,871,648      4,111,627      13.8 %
//    Illinois            11,430,602        12,419,293        988,691       8.6 %
//    Washington           4,866,692         5,894,121      1,027,429      21.1 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.Item3 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
Item3 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第三个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item3 As T3
    Get
public T3 Item3 { get; }
public:
property T3 Item3 {
    T3 get ();
}
member Item3 : 'T3

属性值

类型： T3
当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第三个分量的值。

可以通过以下两种方式之一来动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第二个数组元素。

下面的示例定义了一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其成分包含美国各州的名称、各州在 1990 和 2000 年的人口、近 10 年内各州的人口变化以及人口变化百分比。然后，它循环访问数组，并显示元组中每个组件的值。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其成分包含美国各州的名称、各州在 1990 和 2000 年的人口、近 10 年内各州的人口变化以及人口变化百分比。然后，它循环访问数组，并显示元组中每个组件的值。

Module Example
   Public Sub Main()
      ' Define array of tuples reflecting population change by state, 1990-2000.
      Dim statesData() =
          { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
            Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
            Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) }
      ' Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}", "State", "Population 1990", _
                        "Population 2000", "Change", "% Change")
      Console.WriteLine()
      For Each stateData As Tuple(Of String, Integer, Integer, Integer, Double) In statesData
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}", _
                           stateData.Item1, stateData.Item2, _
                           stateData.Item3, stateData.Item4, stateData.Item5/100)
      Next
   End Sub
End Module
' The example displays the following output:
'    State          Population 1990   Population 2000         Change    % Change
'
'    California          29,760,021        33,871,648      4,111,627      13.8 %
'    Illinois            11,430,602        12,419,293        988,691       8.6 %
'    Washington           4,866,692         5,894,121      1,027,429      21.1 %

using System;

public class Example
{
   public static void Main()
   {
      // Define array of tuples reflecting population change by state, 1990-2000.
      Tuple<string, int, int, int, double>[] statesData =
         { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
           Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
           Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) };

      // Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}\n", "State",
                        "Population 1990", "Population 2000", "Change",
                        "% Change");
      foreach(Tuple<string, int, int, int, double> stateData in statesData)
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}",
                           stateData.Item1, stateData.Item2,
                           stateData.Item3, stateData.Item4, stateData.Item5/100);
   }
}
// The example displays the following output:
//    State          Population 1990   Population 2000         Change    % Change
//
//    California          29,760,021        33,871,648      4,111,627      13.8 %
//    Illinois            11,430,602        12,419,293        988,691       8.6 %
//    Washington           4,866,692         5,894,121      1,027,429      21.1 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.Item4 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
Item4 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第四个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item4 As T4
    Get
public T4 Item4 { get; }
public:
property T4 Item4 {
    T4 get ();
}
member Item4 : 'T4

属性值

类型： T4
当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第四个分量的值。

可以通过以下两种方式之一来动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第二个数组元素。

下面的示例定义了一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其成分包含美国各州的名称、各州在 1990 和 2000 年的人口、近 10 年内各州的人口变化以及人口变化百分比。然后，它循环访问数组，并显示元组中每个组件的值。 下面的示例定义了一个 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象数组，其成分包含美国各州的名称、各州在 1990 和 2000 年的人口、近 10 年内各州的人口变化以及人口变化百分比。然后，它循环访问数组，并显示元组中每个组件的值。

Module Example
   Public Sub Main()
      ' Define array of tuples reflecting population change by state, 1990-2000.
      Dim statesData() =
          { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
            Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
            Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) }
      ' Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}", "State", "Population 1990", _
                        "Population 2000", "Change", "% Change")
      Console.WriteLine()
      For Each stateData As Tuple(Of String, Integer, Integer, Integer, Double) In statesData
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}", _
                           stateData.Item1, stateData.Item2, _
                           stateData.Item3, stateData.Item4, stateData.Item5/100)
      Next
   End Sub
End Module
' The example displays the following output:
'    State          Population 1990   Population 2000         Change    % Change
'
'    California          29,760,021        33,871,648      4,111,627      13.8 %
'    Illinois            11,430,602        12,419,293        988,691       8.6 %
'    Washington           4,866,692         5,894,121      1,027,429      21.1 %

using System;

public class Example
{
   public static void Main()
   {
      // Define array of tuples reflecting population change by state, 1990-2000.
      Tuple<string, int, int, int, double>[] statesData =
         { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
           Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
           Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) };

      // Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}\n", "State",
                        "Population 1990", "Population 2000", "Change",
                        "% Change");
      foreach(Tuple<string, int, int, int, double> stateData in statesData)
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}",
                           stateData.Item1, stateData.Item2,
                           stateData.Item3, stateData.Item4, stateData.Item5/100);
   }
}
// The example displays the following output:
//    State          Population 1990   Population 2000         Change    % Change
//
//    California          29,760,021        33,871,648      4,111,627      13.8 %
//    Illinois            11,430,602        12,419,293        988,691       8.6 %
//    Washington           4,866,692         5,894,121      1,027,429      21.1 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5 >)>) ..::.Item5 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5
>
)
>
)
.
.
::
.
Item5 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第五个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item5 As T5
    Get
public T5 Item5 { get; }
public:
property T5 Item5 {
    T5 get ();
}
member Item5 : 'T5

属性值

类型： T5
当前 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的第五个分量的值。

可以通过以下两种方式之一来动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第二个数组元素。

下面的示例定义 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的数组，其成分包含美国州的名称、各州在 1990 和 2000 年的人口、近 10 年期间各州的人口变化以及州人口百分比更改。然后，它循环访问数组，并显示元组中每个组件的值。 下面的示例定义 Tuple<(Of <(T1, T2, T3, T4, T5>)>) 对象的数组，其成分包含美国州的名称、各州在 1990 和 2000 年的人口、近 10 年期间各州的人口变化以及州人口百分比更改。然后，它循环访问数组，并显示元组中每个组件的值。

Module Example
   Public Sub Main()
      ' Define array of tuples reflecting population change by state, 1990-2000.
      Dim statesData() =
          { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
            Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
            Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) }
      ' Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}", "State", "Population 1990", _
                        "Population 2000", "Change", "% Change")
      Console.WriteLine()
      For Each stateData As Tuple(Of String, Integer, Integer, Integer, Double) In statesData
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}", _
                           stateData.Item1, stateData.Item2, _
                           stateData.Item3, stateData.Item4, stateData.Item5/100)
      Next
   End Sub
End Module
' The example displays the following output:
'    State          Population 1990   Population 2000         Change    % Change
'
'    California          29,760,021        33,871,648      4,111,627      13.8 %
'    Illinois            11,430,602        12,419,293        988,691       8.6 %
'    Washington           4,866,692         5,894,121      1,027,429      21.1 %

using System;

public class Example
{
   public static void Main()
   {
      // Define array of tuples reflecting population change by state, 1990-2000.
      Tuple<string, int, int, int, double>[] statesData =
         { Tuple.Create("California", 29760021, 33871648, 4111627, 13.8),
           Tuple.Create("Illinois", 11430602, 12419293, 988691, 8.6),
           Tuple.Create("Washington", 4866692, 5894121, 1027429, 21.1) };

      // Display the items of each tuple
      Console.WriteLine("{0,-12}{1,18}{2,18}{3,15}{4,12}\n", "State",
                        "Population 1990", "Population 2000", "Change",
                        "% Change");
      foreach(Tuple<string, int, int, int, double> stateData in statesData)
         Console.WriteLine("{0,-12}{1,18:N0}{2,18:N0}{3,15:N0}{4,12:P1}",
                           stateData.Item1, stateData.Item2,
                           stateData.Item3, stateData.Item4, stateData.Item5/100);
   }
}
// The example displays the following output:
//    State          Population 1990   Population 2000         Change    % Change
//
//    California          29,760,021        33,871,648      4,111,627      13.8 %
//    Illinois            11,430,602        12,419,293        988,691       8.6 %
//    Washington           4,866,692         5,894,121      1,027,429      21.1 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5 类
Tuple T1, T2, T3, T4, T5 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) 类

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
类
成员

表示 6 元组，即六元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class Tuple(Of T1, T2, T3, T4, T5, T6) _
    Implements IStructuralEquatable, IStructuralComparable, IComparable
[SerializableAttribute]
public class Tuple<T1, T2, T3, T4, T5, T6> : IStructuralEquatable,
    IStructuralComparable, IComparable

[SerializableAttribute]
generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
public ref class Tuple : IStructuralEquatable, IStructuralComparable,
    IComparable
[<SerializableAttribute>]
type Tuple<'T1, 'T2, 'T3, 'T4, 'T5, 'T6> =
    class
        interface IStructuralEquatable
        interface IStructuralComparable
        interface IComparable
    end

类型参数

T1

此元组的第一个组件的类型。

T2

此元组的第二个组件的类型。

T3

此元组的第三个组件的类型。

T4

此元组的第四个组件的类型。

T5

元组的第五个分量的类型。

T6

元组的第六个分量的类型。

元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 类表示一个六元组，即具有六个分量的元组。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 类表示一个六元组，即具有六个分量的元组。

可以通过调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 或静态 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6>)>)(T1, T2, T3, T4, T5, T6) 方法来实例化 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象。通过使用只读的 Item1、Item2、Item3、Item4、Item5 和 Item6 实例属性，可以检索元组中组件的值。 可以通过调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 或静态 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6>)>)(T1, T2, T3, T4, T5, T6) 方法来实例化 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象。通过使用只读的 Item1、Item2、Item3、Item4、Item5 和 Item6 实例属性，可以检索元组中组件的值。

元组通常有四种不同的使用方式：

  • 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象，此对象包含从 1960 年到 2000 年每次人口普查的纽约人口数据。该六元组被传递到 ComputePopulationChange 方法，以计算两次人口普查间的年变化率，以及整个 50 年期间的年变化率。 提供对数据集的轻松访问和操作。下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象，此对象包含从 1960 年到 2000 年每次人口普查的纽约人口数据。该六元组被传递到 ComputePopulationChange 方法，以计算两次人口普查间的年变化率，以及整个 50 年期间的年变化率。 提供对数据集的轻松访问和操作。下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象，此对象包含从 1960 年到 2000 年每次人口普查的纽约人口数据。该六元组被传递到 ComputePopulationChange 方法，以计算两次人口普查间的年变化率，以及整个 50 年期间的年变化率。

    Module Example
   Public Sub Main()
      ' Get population data for New York City, 1960-2000.
      Dim population = Tuple.Create(
                     "New York", 7781984, 7894862, 7071639, 7322564, 8008278)
      Dim rate = ComputePopulationChange(population)
      ' Display results.
      Console.WriteLine("Population Change, {0}, 1960-2000", population.Item1)
      Console.WriteLine()
      Console.WriteLine("Year      {0,10} {1,9}", "Population", "Annual Rate")
      Console.WriteLine("1960      {0,10:N0} {1,11}", population.Item2, "NA")
      Console.WriteLine("1970      {0,10:N0} {1,11:P2}", population.Item3, rate.Item2/10)
      Console.WriteLine("1980      {0,10:N0} {1,11:P2}", population.Item4, rate.Item3/10)
      Console.WriteLine("1990      {0,10:N0} {1,11:P2}", population.Item5, rate.Item4/10)
      Console.WriteLine("2000      {0,10:N0} {1,11:P2}", population.Item6, rate.Item5/10)
      Console.WriteLine("1960-2000 {0,10:N0} {1,11:P2}", "", rate.Item6/50)
   End Sub

      ' Compute rate of population change by decade and overall.
   Private Function ComputePopulationChange(data As Tuple(Of String, Integer, Integer, Integer, Integer, Integer)) _
           As Tuple(Of String, Double, Double, Double, Double, Double)
      Dim rate = Tuple.Create(data.Item1,
                              (data.Item3 - data.Item2)/data.Item2,
                              (data.Item4 - data.Item3)/data.Item3,
                              (data.Item5 - data.Item4)/data.Item4,
                              (data.Item6 - data.Item5)/data.Item5,
                              (data.Item6 - data.Item2)/data.Item2 )
      Return rate
   End Function
End Module
' The example displays the following output:
'       Population Change, New York, 1960-2000
'
'       Year      Population Annual Rate
'       1960       7,781,984          NA
'       1970       7,894,862      0.15 %
'       1980       7,071,639     -1.04 %
'       1990       7,322,564      0.35 %
'       2000       8,008,278      0.94 %
'       1960-2000                 0.06 %

    using System;

public class Example
{
   public static void Main()
   {
      // Get population data for New York City, 1960-2000.
      var population =
           Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278);
      var rate = ComputePopulationChange(population);
      // Display results.
      Console.WriteLine("Population Change, {0}, 1960-2000\n", population.Item1);
      Console.WriteLine("Year      {0,10} {1,9}", "Population", "Annual Rate");
      Console.WriteLine("1960      {0,10:N0} {1,11}", population.Item2, "NA");
      Console.WriteLine("1970      {0,10:N0} {1,11:P2}", population.Item3, rate.Item2/10);
      Console.WriteLine("1980      {0,10:N0} {1,11:P2}", population.Item4, rate.Item3/10);
      Console.WriteLine("1990      {0,10:N0} {1,11:P2}", population.Item5, rate.Item4/10);
      Console.WriteLine("2000      {0,10:N0} {1,11:P2}", population.Item6, rate.Item5/10);
      Console.WriteLine("1960-2000 {0,10:N0} {1,11:P2}", "", rate.Item6/50);
   }

   private static Tuple<string, double, double, double, double, double> ComputePopulationChange(
           Tuple<string, int, int, int, int, int> data)
   {
      var rate = Tuple.Create(data.Item1,
                              (double)(data.Item3 - data.Item2)/data.Item2,
                              (double)(data.Item4 - data.Item3)/data.Item3,
                              (double)(data.Item5 - data.Item4)/data.Item4,
                              (double)(data.Item6 - data.Item5)/data.Item5,
                              (double)(data.Item6 - data.Item2)/data.Item2 );
      return rate;
   }
}
// The example displays the following output:
//       Population Change, New York, 1960-2000
//
//       Year      Population Annual Rate
//       1960       7,781,984          NA
//       1970       7,894,862      0.15 %
//       1980       7,071,639     -1.04 %
//       1990       7,322,564      0.35 %
//       2000       8,008,278      0.94 %
//       1960-2000                 0.06 %

  • 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前一个示例在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象中除返回城市名称外，还返回计算所得的统计信息。 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前一个示例在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象中除返回城市名称外，还返回计算所得的统计信息。

  • 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象作为方法参数提供，则可以提供具有六项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象作为方法参数提供，则可以提供具有六项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象作为方法参数提供，则可以提供具有六项数据的线程启动例程。

System System..::.Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>)Tuple System..::.Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>)T1, T2, T3, T4, T5, T6 System..::.Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间
Tuple
Tuple T1
Tuple T1, T2
Tuple T1, T2, T3
Tuple T1, T2, T3, T4
Tuple T1, T2, T3, T4, T5
Tuple T1, T2, T3, T4, T5, T6, T7
Tuple T1, T2, T3, T4, T5, T6, T7, TRest


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) 成员

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

表示 6 元组，即六元组。

Tuple T1, T2, T3, T4, T5, T6 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5, T6 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) 构造函数

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
构造函数
Tuple

初始化 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4, _
    item5 As T5, _
    item6 As T6 _
)
public Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6
)
public:
Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6
)
new :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 *
        item5:'T5 *
        item6:'T6 -> Tuple

参数

item1
类型： T1
此元组的第一个组件的值。
item2
类型： T2
此元组的第二个组件的值。
item3
类型： T3
此元组的第三个组件的值。
item4
类型： T4
此元组的第四个组件的值
item5
类型： T5
元组的第五个分量的值。
item6
类型： T6
元组的第六个分量的值。

此外可以使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6>)>)(T1, T2, T3, T4, T5, T6) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6>)>)(T1, T2, T3, T4, T5, T6) 方法来实例化一个六元组，其中第一个元素的类型为 String、其余元素的类型为 Int32。 此外可以使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6>)>)(T1, T2, T3, T4, T5, T6) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6>)>)(T1, T2, T3, T4, T5, T6) 方法来实例化一个六元组，其中第一个元素的类型为 String、其余元素的类型为 Int32。

Dim tuple6 = Tuple.Create("Jane", 90, 87, 93, 67, 100)

var tuple6 = Tuple.Create("Jane", 90, 87, 93, 67, 100);

这等效于下面的对 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 类构造函数的调用。

Dim tuple6 = New Tuple(Of String, Integer, Integer, Integer,
                       Integer, Integer) _
                       ("Jane", 90, 87, 93, 67, 100)

var tuple6 = new Tuple<string, int, int, int, int, int>
                      ("Jane", 90, 87, 93, 67, 100);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4, T5, T6 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5, T6 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
Equals 方法
Tuple

返回一个值，该值指示当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

在下列情况下，obj 参数视为等于当前实例：

  • 它是 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象。

  • 它的六个组件的类型与当前实例相同。

  • 它的六个组件的值与当前实例的对应值相同。

下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1960 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个六元组包含纽约的数据。第一个六元组与第四个六元组重复。第三个 sextuple 将城市标识为“纽约”而不是“纽约市”。如上例所示，只有第四个六元组等于第一个六元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1960 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个六元组包含纽约的数据。第一个六元组与第四个六元组重复。第三个 sextuple 将城市标识为“纽约”而不是“纽约市”。如上例所示，只有第四个六元组等于第一个六元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1960 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个六元组包含纽约的数据。第一个六元组与第四个六元组重复。第三个 sextuple 将城市标识为“纽约”而不是“纽约市”。如上例所示，只有第四个六元组等于第一个六元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1960 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个六元组包含纽约的数据。第一个六元组与第四个六元组重复。第三个 sextuple 将城市标识为“纽约”而不是“纽约市”。如上例所示，只有第四个六元组等于第一个六元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1960 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个六元组包含纽约的数据。第一个六元组与第四个六元组重复。第三个 sextuple 将城市标识为“纽约”而不是“纽约市”。如上例所示，只有第四个六元组等于第一个六元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1960 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个六元组包含纽约的数据。第一个六元组与第四个六元组重复。第三个 sextuple 将城市标识为“纽约”而不是“纽约市”。如上例所示，只有第四个六元组等于第一个六元组。

Module Example
   Public Sub Main()
      ' Get population data for New York City and Los Angeles, 1960-2000.
      Dim urbanPopulations() =
           { Tuple.Create("New York", 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("New York City", 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("New York", 7781984, 7894862,
                          7071639, 7322564, 8008278) }
      ' Compare each tuple with every other tuple for equality.
      For ctr As Integer = 0 To urbanPopulations.Length - 2
         Dim urbanPopulation = urbanPopulations(ctr)
         Console.WriteLine(urbanPopulation.ToString() + " = ")
         For innerCtr As Integer = ctr + 1 To urbanPopulations.Length - 1
            Console.WriteLine("   {0}: {1}", urbanPopulations(innerCtr), _
                              urbanPopulation.Equals(urbanPopulations(innerCtr)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278) =
'       (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820): False
'       (New York City, 7781984, 7894862, 7071639, 7322564, 8008278): False
'       (New York, 7781984, 7894862, 7071639, 7322564, 8008278): True
'
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820) =
'       (New York City, 7781984, 7894862, 7071639, 7322564, 8008278): False
'       (New York, 7781984, 7894862, 7071639, 7322564, 8008278): False
'
'    (New York City, 7781984, 7894862, 7071639, 7322564, 8008278) =
'       (New York, 7781984, 7894862, 7071639, 7322564, 8008278): False

using System;

public class Example
{
   public static void Main()
   {
      // Get population data for New York City and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int>[] urbanPopulations =
           { Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York City", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278) };
      // Compare each tuple with every other tuple for equality.
      for (int ctr = 0; ctr <= urbanPopulations.Length - 2; ctr++)
      {
         var urbanPopulation = urbanPopulations[ctr];
         Console.WriteLine(urbanPopulation.ToString() + " = ");
         for (int innerCtr = ctr +1; innerCtr <= urbanPopulations.Length - 1; innerCtr++)
            Console.WriteLine("   {0}: {1}", urbanPopulations[innerCtr],
                              urbanPopulation.Equals(urbanPopulations[innerCtr]));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278) =
//       (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820): False
//       (New York City, 7781984, 7894862, 7071639, 7322564, 8008278): False
//       (New York, 7781984, 7894862, 7071639, 7322564, 8008278): True
//
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820) =
//       (New York City, 7781984, 7894862, 7071639, 7322564, 8008278): False
//       (New York, 7781984, 7894862, 7071639, 7322564, 8008278): False
//
//    (New York City, 7781984, 7894862, 7071639, 7322564, 8008278) =
//       (New York, 7781984, 7894862, 7071639, 7322564, 8008278): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
GetHashCode 方法
Tuple

返回当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.IComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
IComparable
.
.
::
.
CompareTo 方法
Tuple

将当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是位于指定对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ obj As Object _ ) As Integer Implements IComparable.CompareTo
int IComparable.CompareTo( Object obj )
private: virtual int CompareTo( Object^ obj ) sealed = IComparable::CompareTo
private abstract CompareTo : obj:Object -> int private override CompareTo : obj:Object -> int
参数
obj
类型： System Object
与当前实例进行比较的对象。
返回值
类型： System Int32
一个有符号整数，指示此实例与
obj
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
obj
之前。
零
此实例与
obj
在排序顺序中的位置相同。
一个正整数
此实例在
obj
之后。
实现
异常 | 条件
ArgumentException | obj 不是 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 实例强制转换为 IComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 实例强制转换为 IComparable 接口时使用它。

此方法提供 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法（例如 Array..::.Sort(Array) 和 SortedList..::.Add）的默认重载方法调用，用来对集合成员进行排序。 此方法提供 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法（例如 Array..::.Sort(Array) 和 SortedList..::.Add）的默认重载方法调用，用来对集合成员进行排序。

警告说明 警告

IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>)..::.Equals(Object) 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>)..::.Equals(Object) 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>)..::.Equals(Object) 方法。

IComparable..::.CompareTo(Object) 方法使用 Comparer<(Of <(T>)>)..::.Default 比较器。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个城市从 1960 年到 2000 年的人口数据。六个组件中包含城市名，其后是从 1960 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个城市从 1960 年到 2000 年的人口数据。六个组件中包含城市名，其后是从 1960 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个城市从 1960 年到 2000 年的人口数据。六个组件中包含城市名，其后是从 1960 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个城市从 1960 年到 2000 年的人口数据。六个组件中包含城市名，其后是从 1960 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个城市从 1960 年到 2000 年的人口数据。六个组件中包含城市名，其后是从 1960 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个城市从 1960 年到 2000 年的人口数据。六个组件中包含城市名，其后是从 1960 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。

Module Example
   Public Sub Main()
      ' Create array of sextuple with population data for three U.S.
      ' cities, 1960-2000.
      Dim cities() =
          { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) }

      ' Display array in unsorted order.
      Console.WriteLine("In unsorted order:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities)

      ' Display array in sorted order.
      Console.WriteLine("In sorted order:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'    In unsorted order:
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
'
'    In sorted order:
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)

using System;

public class Example
{
   public static void Main()
   {
      // Create array of sextuple with population data for three U.S.
      // cities, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
          { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());

      Console.WriteLine();

      Array.Sort(cities);

      // Display array in sorted order.
      Console.WriteLine("In sorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//
//    In sorted order:
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.IStructuralComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
IStructuralComparable
.
.
::
.
CompareTo 方法
Tuple

使用指定的比较器将当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer Implements IStructuralComparable.CompareTo
int IStructuralComparable.CompareTo( Object other, IComparer comparer )
private: virtual int CompareTo( Object^ other, IComparer^ comparer ) sealed = IStructuralComparable::CompareTo
private abstract CompareTo : other:Object * comparer:IComparer -> int private override CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个对象，提供自定义比较规则。
返回值
类型： System Int32
一个有符号整数，指示此实例与
other
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
other
之前。
零
此实例与
other
在排序顺序中的位置相同。
一个正整数
此实例在
other
之后。
实现
异常 | 条件
ArgumentException | other 不是 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 实例强制转换为 IStructuralComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 实例强制转换为 IStructuralComparable 接口时使用它。

此方法允许您定义 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的自定义比较。例如，可以使用此方法，根据特定组件的值对 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象进行排序。 此方法允许您定义 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的自定义比较。例如，可以使用此方法，根据特定组件的值对 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象进行排序。

虽然可以直接调用该方法，但它通常由包括 IComparer 参数的集合排序方法调用，用来对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。 虽然可以直接调用该方法，但它通常由包括 IComparer 参数的集合排序方法调用，用来对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。

警告说明 警告

CompareTo()()() 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法。 CompareTo()()() 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法。 CompareTo()()() 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的 10 年间隔的人口。

PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对六元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个 Boolean 值（该值指示是按升序还是降序对元组对象进行排序）。 PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对六元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个 Boolean 值（该值指示是按升序还是降序对元组对象进行排序）。

然后，本示例显示未排序的数组元素，将它们按第三个组件（1970 年的人口数据）排序并显示，然后将它们按第六个组件（2000 年的人口数据）排序并显示。

Imports System.Collections
Imports System.Collections.Generic

Public Class PopulationComparer(Of T1, T2, T3, T4, T5, T6) : Implements IComparer
   Private itemPosition As Integer
   Private multiplier As Integer = -1

   Public Sub New(component As Integer)
      Me.New(component, True)
   End Sub

   Public Sub New(component As Integer, descending As Boolean)
      If Not descending Then multiplier = 1

      If component <= 0 Or component > 6 Then
         Throw New ArgumentException("The component argument is out of range.")
      End If
      itemPosition = component
   End Sub

   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare

      Dim tX = TryCast(x, Tuple(Of T1, T2, T3, T4, T5, T6))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY = DirectCast(y, Tuple(Of T1, T2, T3, T4, T5, T6))
         Select Case itemPosition
            Case 1
               Return Comparer(Of T1).Default.Compare(tX.Item1, tY.Item1) * multiplier
            Case 2
               Return Comparer(Of T2).Default.Compare(tX.Item2, tY.Item2) * multiplier
            Case 3
               Return Comparer(Of T3).Default.Compare(tX.Item3, tY.Item3) * multiplier
            Case 4
               Return Comparer(Of T4).Default.Compare(tX.Item4, tY.Item4) * multiplier
            Case 5
               Return Comparer(Of T5).Default.Compare(tX.Item5, tY.Item5) * multiplier
            Case 6
               Return Comparer(Of T6).Default.Compare(tX.Item6, tY.Item6) * multiplier
            ' This should never happen.
            Case Else
               Return 0
         End Select
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      ' Create array of sextuple with population data for three U.S.
      ' cities, 1960-2000.
      Dim cities() =
          { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) }

      ' Display array in unsorted order.
      Console.WriteLine("In unsorted order:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer)(3))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 1970:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer)(6))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'    In unsorted order:
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
'
'    Sorted by population in 1970:
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'
'    Sorted by population in 2000:
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)

using System;
using System.Collections;
using System.Collections.Generic;

public class PopulationComparer<T1, T2, T3, T4, T5, T6> : IComparer
{
   private int itemPosition;
   private int multiplier = -1;

   public PopulationComparer(int component) : this(component, true)
   { }

   public PopulationComparer(int component, bool descending)
   {
      if (! descending) multiplier = 1;

      if (component <= 0 || component > 6)
         throw new ArgumentException("The component argument is out of range.");

      itemPosition = component;
   }

   public int Compare(object x, object y)
   {
      var tX = x as Tuple<T1, T2, T3, T4, T5, T6>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         var tY = y as Tuple<T1, T2, T3, T4, T5, T6>;
         switch (itemPosition)
         {
            case 1:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
            case 2:
               return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2) * multiplier;
            case 3:
               return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3) * multiplier;
            case 4:
               return Comparer<T4>.Default.Compare(tX.Item4, tY.Item4) * multiplier;
            case 5:
               return Comparer<T5>.Default.Compare(tX.Item5, tY.Item5) * multiplier;
            case 6:
               return Comparer<T6>.Default.Compare(tX.Item6, tY.Item6) * multiplier;
            default:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
         }
      }
   }
}

public class Example
{
   public static void Main()
   {
      // Create array of sextuple with population data for three U.S.
      // cities, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(3));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1970:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(6));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//
//    Sorted by population in 1970:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//
//    Sorted by population in 2000:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.IStructuralEquatable ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
Equals 方法
Tuple

返回一个值，该值根据指定的比较方法指示当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals
bool IStructuralEquatable.Equals(
    Object other,
    IEqualityComparer comparer
)
private:
virtual bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::Equals
private abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool
private override Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
与该实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个对象，定义用于评估两个对象是否相等的方法。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item6 值传递给该方法为止。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item6 值传递给该方法为止。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item6 值传递给该方法为止。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item6 值传递给该方法为止。

下面的示例定义一个 RateComparer 类，用以执行自定义的相等性测试。如果传递给其 IStructuralEquatable..::.Equals 方法的值的类型为 Single 或 Double，则该方法使用最多三个小数位数测试相等性。否则，它只调用 x 参数的 Equals 方法。该示例使用此 IEqualityComparer 实现来确定四个包含 1960 年到 2000 年之间的人口变化率数据的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象是否相等。 下面的示例定义一个 RateComparer 类，用以执行自定义的相等性测试。如果传递给其 IStructuralEquatable..::.Equals 方法的值的类型为 Single 或 Double，则该方法使用最多三个小数位数测试相等性。否则，它只调用 x 参数的 Equals 方法。该示例使用此 IEqualityComparer 实现来确定四个包含 1960 年到 2000 年之间的人口变化率数据的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象是否相等。 下面的示例定义一个 RateComparer 类，用以执行自定义的相等性测试。如果传递给其 IStructuralEquatable..::.Equals 方法的值的类型为 Single 或 Double，则该方法使用最多三个小数位数测试相等性。否则，它只调用 x 参数的 Equals 方法。该示例使用此 IEqualityComparer 实现来确定四个包含 1960 年到 2000 年之间的人口变化率数据的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象是否相等。 下面的示例定义一个 RateComparer 类，用以执行自定义的相等性测试。如果传递给其 IStructuralEquatable..::.Equals 方法的值的类型为 Single 或 Double，则该方法使用最多三个小数位数测试相等性。否则，它只调用 x 参数的 Equals 方法。该示例使用此 IEqualityComparer 实现来确定四个包含 1960 年到 2000 年之间的人口变化率数据的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象是否相等。

Imports System.Collections

Public Class RateComparer(Of T1, T2, T3, T4, T5, T6) : Implements IEqualityComparer
   Private argument As Integer = 0

   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
                   Implements IEqualityComparer.Equals
      argument += 1
      If argument = 1 Then
         Return True
      Else
         Dim fx, fy As Double
         If typeof x Is Double Or typeof x Is Single Then
            fx = CDbl(x)
            fy = CDbl(y)
            Return Math.Round(fx * 1000).Equals(Math.Round(fy * 1000))
         Else
            Return x.Equals(y)
         End If
      End If
   End Function

   Public Overloads Function GetHashCode(obj As Object) As Integer _
                    Implements IEqualityComparer.GetHashCode
      If TypeOf(obj) Is Single Or TypeOf(obj) Is Double Then
         Return Math.Round(CDbl(obj) * 1000).GetHashCode()
      Else
         Return obj.GetHashCode()
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim rate1 = Tuple.Create("New York", .014505, -.1042733,
                               .0354833, .093644, .0290792)
      Dim rate2 = Tuple.Create("Unknown City", .014505, -.1042733,
                               .0354833, .093644, .0290792)
      Dim rate3 = Tuple.Create("Unknown City", .014505, -.1042733,
                               .0354833, .093644, .029079)
      Dim rate4 = Tuple.Create("San Francisco", -.0332858, -.0512803,
                               .0662544, .0728964, .0491912)
      Dim eq As IStructuralEquatable = rate1
      ' Compare first tuple with remaining two tuples.
      Console.WriteLine("{0} = ", rate1.ToString())
      Console.WriteLine("   {0} : {1}", rate2,
                        eq.Equals(rate2, New RateComparer(Of String, Double, Double, Double, Double, Double)()))
      Console.WriteLine("   {0} : {1}", rate3,
                        eq.Equals(rate3, New RateComparer(Of String, Double, Double, Double, Double, Double)()))
      Console.WriteLine("   {0} : {1}", rate4,
                        eq.Equals(rate4, New RateComparer(Of String, Double, Double, Double, Double, Double)()))
   End Sub
End Module
' The example displays the following output:
'    (New York, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) =
'       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True
'       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True
'       (San Francisco, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : False

using System;
using System.Collections;

public class RateComparer<T1, T2, T3, T4, T5, T6> : IEqualityComparer
{
   private int argument = 0;

   public new bool Equals(object x, object y)
   {
      argument++;
      if (argument == 1) return true;

      double fx, fy;
      if (x is Double || x is Single)
      {
            fx = (double) x;
            fy = (double) y;
            return Math.Round(fx * 1000).Equals(Math.Round(fy * 1000));
      }
      else
      {
         return x.Equals(y);
      }
   }

   public int GetHashCode(object obj)
   {
      if (obj is Single || obj is Double)
         return Math.Round(((double) obj) * 1000).GetHashCode();
      else
         return obj.GetHashCode();
   }
}

public class Example
{
   public static void Main()
   {
      var rate1 = Tuple.Create("New York", .014505, -.1042733,
                               .0354833, .093644, .0290792);
      var rate2 = Tuple.Create("Unknown City", .014505, -.1042733,
                               .0354833, .093644, .0290792);
      var rate3 = Tuple.Create("Unknown City", .014505, -.1042733,
                               .0354833, .093644, .029079);
      var rate4 = Tuple.Create("San Francisco", -.0332858, -.0512803,
                               .0662544, .0728964, .0491912);
      IStructuralEquatable eq = rate1;
      // Compare first tuple with remaining two tuples.
      Console.WriteLine("{0} = ", rate1.ToString());
      Console.WriteLine("   {0} : {1}", rate2,
                        eq.Equals(rate2, new RateComparer<string, double, double, double, double, double>()));
      Console.WriteLine("   {0} : {1}", rate3,
                        eq.Equals(rate3, new RateComparer<string, double, double, double, double, double>()));
      Console.WriteLine("   {0} : {1}", rate4,
                        eq.Equals(rate4, new RateComparer<string, double, double, double, double, double>()));
   }
}
// The example displays the following output:
//    (New York, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) =
//       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True
//       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True
//       (San Francisco, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.IStructuralEquatable ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
GetHashCode 方法
Tuple

使用指定的计算方法计算当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer Implements IStructuralEquatable.GetHashCode
int IStructuralEquatable.GetHashCode(
    IEqualityComparer comparer
)
private:
virtual int GetHashCode(
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::GetHashCode
private abstract GetHashCode :
        comparer:IEqualityComparer -> int
private override GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个对象，其 IEqualityComparer..::.GetHashCode 方法计算当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的哈希代码。

返回值

类型： System Int32
32 位带符号整数哈希代码。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

该方法只是包装对 comparer 对象的 IEqualityComparer..::.GetHashCode 实现的调用。

对于两个视为相等 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 的对象，用于计算哈希代码的算法应当返回相同的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.ToString 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
ToString 方法
Tuple

返回一个字符串，该字符串表示此 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的字符串表示形式。

此方法返回的字符串采用以下格式 (Item1, Item2, Item3, Item4, Item5, Item6)，其中 Item1、Item2、 Item3、Item4、Item5 和 Item6 分别表示 Item1、Item2、Item3、Item4、Item5 和 Item6 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。 此方法返回的字符串采用以下格式 (Item1, Item2, Item3, Item4, Item5, Item6)，其中 Item1、Item2、 Item3、Item4、Item5 和 Item6 分别表示 Item1、Item2、Item3、Item4、Item5 和 Item6 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象，此对象包含从 1960 年到 2000 年每次人口普查的纽约人口数据。然后通过 ToString 方法的调用，显示该六元组的组件。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象，此对象包含从 1960 年到 2000 年每次人口普查的纽约人口数据。然后通过 ToString 方法的调用，显示该六元组的组件。

Module Example
   Public Sub Main()
      ' Get population data for New York City, 1960-2000.
      Dim population = Tuple.Create("New York", 7781984, 7894862,
                                    7071639, 7322564, 8008278)
      Console.WriteLine(population.ToString())
   End Sub
End Module
' The example displays the following output:
'       (New York, 7781984, 7894862, 7071639, 7322564, 8008278)

using System;

public class Example
{
   public static void Main()
   {
      // Get population data for New York City, 1960-2000.
      var population = Tuple.Create("New York", 7781984, 7894862,
                                    7071639, 7322564, 8008278);
      Console.WriteLine(population.ToString());
   }
}
// The example displays the following output:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4, T5, T6 类型公开以下成员。

名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5, T6 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.Item1 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
Item1 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第一个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item1 As T1
    Get
public T1 Item1 { get; }
public:
property T1 Item1 {
    T1 get ();
}
member Item1 : 'T1

属性值

类型： T1
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第一个分量的值。

您可以通过以下两种方式之一动态确定 Item1 组件的类型：

  • 对 GetType 属性所返回的值调用 Item1 方法。

  • 检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第一个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示城市名称，它将检索每个 Item1 对象的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示城市名称，它将检索每个 Item1 对象的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示城市名称，它将检索每个 Item1 对象的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示城市名称，它将检索每个 Item1 对象的 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,60}",
                        "City", New String("-"c,(60-header.Length)\2) + header + _
                                New String("-"c, (60-header.Length)\2))
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}",
                        "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          -----------------------Population in-----------------------
'                         1960        1970        1980        1990        2000
'
'    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
'    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
'    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,60}",
                        "City", new String('-',(60-header.Length)/2) + header +
                                new String('-', (60-header.Length)/2));
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}\n",
                        "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6);
   }
}
// The example displays the following output:
//    City          -----------------------Population in-----------------------
//                         1960        1970        1980        1990        2000
//
//    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
//    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
//    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.Item2 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
Item2 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第二个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item2 As T2
    Get
public T2 Item2 { get; }
public:
property T2 Item2 {
    T2 get ();
}
member Item2 : 'T2

属性值

类型： T2
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第二个分量的值。

您可以通过以下两种方式之一动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第一个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1960 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item2 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1960 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item2 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1960 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item2 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1960 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item2 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,60}",
                        "City", New String("-"c,(60-header.Length)\2) + header + _
                                New String("-"c, (60-header.Length)\2))
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}",
                        "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          -----------------------Population in-----------------------
'                         1960        1970        1980        1990        2000
'
'    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
'    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
'    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,60}",
                        "City", new String('-',(60-header.Length)/2) + header +
                                new String('-', (60-header.Length)/2));
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}\n",
                        "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6);
   }
}
// The example displays the following output:
//    City          -----------------------Population in-----------------------
//                         1960        1970        1980        1990        2000
//
//    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
//    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
//    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.Item3 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
Item3 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第三个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item3 As T3
    Get
public T3 Item3 { get; }
public:
property T3 Item3 {
    T3 get ();
}
member Item3 : 'T3

属性值

类型： T3
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第三个分量的值。

您可以通过以下两种方式之一动态确定 Item3 组件的类型：

  • 对 GetType 属性所返回的值调用 Item3 方法。

  • 检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第一个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1970 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item3 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1970 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item3 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1970 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item3 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1970 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item3 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,60}",
                        "City", New String("-"c,(60-header.Length)\2) + header + _
                                New String("-"c, (60-header.Length)\2))
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}",
                        "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          -----------------------Population in-----------------------
'                         1960        1970        1980        1990        2000
'
'    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
'    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
'    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,60}",
                        "City", new String('-',(60-header.Length)/2) + header +
                                new String('-', (60-header.Length)/2));
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}\n",
                        "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6);
   }
}
// The example displays the following output:
//    City          -----------------------Population in-----------------------
//                         1960        1970        1980        1990        2000
//
//    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
//    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
//    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.Item4 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
Item4 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第四个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item4 As T4
    Get
public T4 Item4 { get; }
public:
property T4 Item4 {
    T4 get ();
}
member Item4 : 'T4

属性值

类型： T4
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第四个分量的值。

您可以通过以下两种方式之一动态确定 Item4 组件的类型：

  • 对 GetType 属性所返回的值调用 Item4 方法。

  • 检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第一个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1980 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item4 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1980 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item4 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1980 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item4 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1980 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item4 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,60}",
                        "City", New String("-"c,(60-header.Length)\2) + header + _
                                New String("-"c, (60-header.Length)\2))
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}",
                        "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          -----------------------Population in-----------------------
'                         1960        1970        1980        1990        2000
'
'    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
'    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
'    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,60}",
                        "City", new String('-',(60-header.Length)/2) + header +
                                new String('-', (60-header.Length)/2));
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}\n",
                        "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6);
   }
}
// The example displays the following output:
//    City          -----------------------Population in-----------------------
//                         1960        1970        1980        1990        2000
//
//    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
//    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
//    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.Item5 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
Item5 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第五个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item5 As T5
    Get
public T5 Item5 { get; }
public:
property T5 Item5 {
    T5 get ();
}
member Item5 : 'T5

属性值

类型： T5
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第五个分量的值。

可以通过以下两种方式之一来动态确定 Item5 组件的类型：

  • 对 GetType 属性所返回的值调用 Item5 方法。

  • 检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第一个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1990 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item5 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1990 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item5 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1990 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item5 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1990 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item5 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,60}",
                        "City", New String("-"c,(60-header.Length)\2) + header + _
                                New String("-"c, (60-header.Length)\2))
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}",
                        "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          -----------------------Population in-----------------------
'                         1960        1970        1980        1990        2000
'
'    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
'    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
'    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,60}",
                        "City", new String('-',(60-header.Length)/2) + header +
                                new String('-', (60-header.Length)/2));
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}\n",
                        "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6);
   }
}
// The example displays the following output:
//    City          -----------------------Population in-----------------------
//                         1960        1970        1980        1990        2000
//
//    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
//    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
//    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6 >)>) ..::.Item6 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6
>
)
>
)
.
.
::
.
Item6 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第六个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item6 As T6
    Get
public T6 Item6 { get; }
public:
property T6 Item6 {
    T6 get ();
}
member Item6 : 'T6

属性值

类型： T6
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的第六个分量的值。

可以通过以下两种方式之一来动态确定 Item6 组件的类型：

  • 对 GetType 属性所返回的值调用 Item6 方法。

  • 检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第一个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 2000 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item6 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 2000 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item6 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 2000 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item6 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1960 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 2000 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象的 Item6 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,60}",
                        "City", New String("-"c,(60-header.Length)\2) + header + _
                                New String("-"c, (60-header.Length)\2))
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}",
                        "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          -----------------------Population in-----------------------
'                         1960        1970        1980        1990        2000
'
'    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
'    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
'    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,60}",
                        "City", new String('-',(60-header.Length)/2) + header +
                                new String('-', (60-header.Length)/2));
      Console.WriteLine("{0,25}{1,12}{2,12}{3,12}{4,12}\n",
                        "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,12:N0}{2,12:N0}{3,12:N0}{4,12:N0}{5,12:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6);
   }
}
// The example displays the following output:
//    City          -----------------------Population in-----------------------
//                         1960        1970        1980        1990        2000
//
//    New York        7,781,984   7,894,862   7,071,639   7,322,564   8,008,278
//    Los Angeles     2,479,015   2,816,061   2,966,850   3,485,398   3,694,820
//    Chicago         3,550,904   3,366,957   3,005,072   2,783,726   2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6 类
Tuple T1, T2, T3, T4, T5, T6 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) 类

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
类
成员

表示 7 元组，即七元组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class Tuple(Of T1, T2, T3, T4, T5, T6, T7) _
    Implements IStructuralEquatable, IStructuralComparable, IComparable
[SerializableAttribute]
public class Tuple<T1, T2, T3, T4, T5, T6, T7> : IStructuralEquatable,
    IStructuralComparable, IComparable

[SerializableAttribute]
generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
public ref class Tuple : IStructuralEquatable, IStructuralComparable,
    IComparable
[<SerializableAttribute>]
type Tuple<'T1, 'T2, 'T3, 'T4, 'T5, 'T6, 'T7> =
    class
        interface IStructuralEquatable
        interface IStructuralComparable
        interface IComparable
    end

类型参数

T1

此元组的第一个组件的类型。

T2

此元组的第二个组件的类型。

T3

此元组的第三个组件的类型。

T4

此元组的第四个组件的类型。

T5

元组的第五个分量的类型。

T6

元组的第六个分量的类型。

T7

元组的第七个分量的类型。

元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类表示一个七元组，即具有七个分量的元组。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类表示一个七元组，即具有七个分量的元组。

可以通过调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 或静态 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)(T1, T2, T3, T4, T5, T6, T7) 方法来实例化 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象。通过使用只读的 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 实例属性，可以检索元组中组件的值。 可以通过调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 或静态 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)(T1, T2, T3, T4, T5, T6, T7) 方法来实例化 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象。通过使用只读的 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 实例属性，可以检索元组中组件的值。

元组通常有四种不同的使用方式：

  • 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象，此对象包含从 1950 年到 2000 年每次人口普查的纽约人口数据。该七元组传递到 ComputePopulationChange 方法，以计算两次人口普查间的年变化率，以及整个 60 年期间的年变化率。 提供对数据集的轻松访问和操作。下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象，此对象包含从 1950 年到 2000 年每次人口普查的纽约人口数据。该七元组传递到 ComputePopulationChange 方法，以计算两次人口普查间的年变化率，以及整个 60 年期间的年变化率。 提供对数据集的轻松访问和操作。下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象，此对象包含从 1950 年到 2000 年每次人口普查的纽约人口数据。该七元组传递到 ComputePopulationChange 方法，以计算两次人口普查间的年变化率，以及整个 60 年期间的年变化率。

    Module Example
   Public Sub Main()
      ' Get population data for New York City, 1950-2000.
      Dim population = Tuple.Create("New York", 7891957, 7781984,
                                    7894862, 7071639, 7322564, 8008278)
      Dim rate = ComputePopulationChange(population)
      ' Display results.
      Console.WriteLine("Population Change, {0}, 1950-2000", population.Item1)
      Console.WriteLine()
      Console.WriteLine("Year      {0,10} {1,9}", "Population", "Annual Rate")
      Console.WriteLine("1950      {0,10:N0} {1,11}", population.Item2, "NA")
      Console.WriteLine("1960      {0,10:N0} {1,11:P2}", population.Item3, rate.Item2/10)
      Console.WriteLine("1970      {0,10:N0} {1,11:P2}", population.Item4, rate.Item3/10)
      Console.WriteLine("1980      {0,10:N0} {1,11:P2}", population.Item5, rate.Item4/10)
      Console.WriteLine("1990      {0,10:N0} {1,11:P2}", population.Item6, rate.Item5/10)
      Console.WriteLine("2000      {0,10:N0} {1,11:P2}", population.Item7, rate.Item6/10)
      Console.WriteLine("1950-2000 {0,10:N0} {1,11:P2}", "", rate.Item7/50)
   End Sub

      ' Compute rate of population change by decade and overall.
   Private Function ComputePopulationChange(data As Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer)) _
           As Tuple(Of String, Double, Double, Double, Double, Double, Double)
      Dim rate = Tuple.Create( data.Item1,
                       (data.Item3 - data.Item2)/data.Item2,
                       (data.Item4 - data.Item3)/data.Item3,
                       (data.Item5 - data.Item4)/data.Item4,
                       (data.Item6 - data.Item5)/data.Item5,
                       (data.Item7 - data.Item6)/data.Item6,
                       (data.Item7 - data.Item2)/data.Item2 )
      Return rate
   End Function
End Module
' The example displays the following output:
'       Population Change, New York, 1950-2000
'
'       Year      Population Annual Rate
'       1950       7,891,957          NA
'       1960       7,781,984     -0.14 %
'       1970       7,894,862      0.15 %
'       1980       7,071,639     -1.04 %
'       1990       7,322,564      0.35 %
'       2000       8,008,278      0.94 %
'       1950-2000                 0.03 %

    using System;

public class Example
{
   public static void Main()
   {
      // Get population data for New York City, 1950-2000.
      var population = Tuple.Create("New York", 7891957, 7781984,
                                    7894862, 7071639, 7322564, 8008278);
      var rate = ComputePopulationChange(population);
      // Display results.
      Console.WriteLine("Population Change, {0}, 1950-2000\n", population.Item1);
      Console.WriteLine("Year      {0,10} {1,9}", "Population", "Annual Rate");
      Console.WriteLine("1950      {0,10:N0} {1,11}", population.Item2, "NA");
      Console.WriteLine("1960      {0,10:N0} {1,11:P2}", population.Item3, rate.Item2/10);
      Console.WriteLine("1970      {0,10:N0} {1,11:P2}", population.Item4, rate.Item3/10);
      Console.WriteLine("1980      {0,10:N0} {1,11:P2}", population.Item5, rate.Item4/10);
      Console.WriteLine("1990      {0,10:N0} {1,11:P2}", population.Item6, rate.Item5/10);
      Console.WriteLine("2000      {0,10:N0} {1,11:P2}", population.Item7, rate.Item6/10);
      Console.WriteLine("1950-2000 {0,10:N0} {1,11:P2}", "", rate.Item7/50);
   }

   private static Tuple<string, double, double, double, double, double, double>
        ComputePopulationChange(
           Tuple<string, int, int, int, int, int, int> data)
   {
      var rate = Tuple.Create(data.Item1,
                       (double)(data.Item3 - data.Item2)/data.Item2,
                       (double)(data.Item4 - data.Item3)/data.Item3,
                       (double)(data.Item5 - data.Item4)/data.Item4,
                       (double)(data.Item6 - data.Item5)/data.Item5,
                       (double)(data.Item7 - data.Item6)/data.Item6,
                       (double)(data.Item7 - data.Item2)/data.Item2 );
      return rate;
   }
}
// The example displays the following output:
//       Population Change, New York, 1950-2000
//
//       Year      Population Annual Rate
//       1950       7,891,957          NA
//       1960       7,781,984     -0.14 %
//       1970       7,894,862      0.15 %
//       1980       7,071,639     -1.04 %
//       1990       7,322,564      0.35 %
//       2000       8,008,278      0.94 %
//       1950-2000                 0.03 %

  • 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前一个示例在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象中除返回城市名称外，还返回计算所得的统计信息。 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前一个示例在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象中除返回城市名称外，还返回计算所得的统计信息。

  • 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象作为方法参数提供，则可以提供具有七项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象作为方法参数提供，则可以提供具有七项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象作为方法参数提供，则可以提供具有七项数据的线程启动例程。

System System..::.Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)Tuple System..::.Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)T1, T2, T3, T4, T5, T6, T7 System..::.Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间
Tuple
Tuple T1
Tuple T1, T2
Tuple T1, T2, T3
Tuple T1, T2, T3, T4
Tuple T1, T2, T3, T4, T5
Tuple T1, T2, T3, T4, T5, T6
Tuple T1, T2, T3, T4, T5, T6, T7, TRest


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) 成员

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

表示 7 元组，即七元组。

Tuple T1, T2, T3, T4, T5, T6, T7 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) 构造函数

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
构造函数
Tuple

初始化 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4, _
    item5 As T5, _
    item6 As T6, _
    item7 As T7 _
)
public Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6,
    T7 item7
)
public:
Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6,
    T7 item7
)
new :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 *
        item5:'T5 *
        item6:'T6 *
        item7:'T7 -> Tuple

参数

item1
类型： T1
此元组的第一个组件的值。
item2
类型： T2
此元组的第二个组件的值。
item3
类型： T3
此元组的第三个组件的值。
item4
类型： T4
此元组的第四个组件的值
item5
类型： T5
元组的第五个分量的值。
item6
类型： T6
元组的第六个分量的值。
item7
类型： T7
元组的第七个分量的值。

您可以使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)(T1, T2, T3, T4, T5, T6, T7) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)(T1, T2, T3, T4, T5, T6, T7) 方法来实例化一个七元组，其中第一个元素的类型为 String、其余元素的类型为 Int32。 您可以使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)(T1, T2, T3, T4, T5, T6, T7) 静态方法实例化四元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)(T1, T2, T3, T4, T5, T6, T7) 方法来实例化一个七元组，其中第一个元素的类型为 String、其余元素的类型为 Int32。

Dim tuple7 = Tuple.Create("Jane", 90, 87, 93, 67, 100, 92)

var tuple7 = Tuple.Create("Jane", 90, 87, 93, 67, 100, 92);

这等效于下面的对 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类构造函数的调用。

Dim tuple7 = New Tuple(Of String, Integer, Integer,
                       Integer, Integer, Integer, Integer) _
                       ("Jane", 90, 87, 93, 67, 100, 92)

var tuple7 = new Tuple<string, int, int, int, int, int, int>
                      ("Jane", 90, 87, 93, 67, 100, 92);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4, T5, T6, T7 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
Equals 方法
Tuple

返回一个值，该值指示当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

在下列情况下，obj 参数视为等于当前实例：

  • 它是 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象。

  • 它的七个组件的类型与当前实例相同。

  • 它的七个组件的值与当前实例的对应值相同。

下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1950 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个七元组包含纽约的数据。第一个七元组与第四个七元组重复。第三个 septuple 将城市标识为“纽约市”而不是“纽约”。如上例所示，只有第四个七元组等于第一个七元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1950 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个七元组包含纽约的数据。第一个七元组与第四个七元组重复。第三个 septuple 将城市标识为“纽约市”而不是“纽约”。如上例所示，只有第四个七元组等于第一个七元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1950 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个七元组包含纽约的数据。第一个七元组与第四个七元组重复。第三个 septuple 将城市标识为“纽约市”而不是“纽约”。如上例所示，只有第四个七元组等于第一个七元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1950 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个七元组包含纽约的数据。第一个七元组与第四个七元组重复。第三个 septuple 将城市标识为“纽约市”而不是“纽约”。如上例所示，只有第四个七元组等于第一个七元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1950 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个七元组包含纽约的数据。第一个七元组与第四个七元组重复。第三个 septuple 将城市标识为“纽约市”而不是“纽约”。如上例所示，只有第四个七元组等于第一个七元组。 下面的示例定义一个七元组数组，其中包含洛杉矶和纽约从 1950 年到 2000 年的人口数据。每个七元组的第一个组件标识其所在的城市。第一个、第三个和第四个七元组包含纽约的数据。第一个七元组与第四个七元组重复。第三个 septuple 将城市标识为“纽约市”而不是“纽约”。如上例所示，只有第四个七元组等于第一个七元组。

Module Example
   Public Sub Main()
      ' Get population data for New York City and Los Angeles, 1960-2000.
      Dim urbanPopulations() =
           { Tuple.Create("New York", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("New York City", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("New York", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278) }
      ' Compare each tuple with every other tuple for equality.
      For ctr As Integer = 0 To urbanPopulations.Length - 2
         Dim urbanPopulation = urbanPopulations(ctr)
         Console.WriteLine(urbanPopulation.ToString() + " = ")
         For innerCtr As Integer = ctr + 1 To urbanPopulations.Length - 1
            Console.WriteLine("   {0}: {1}", urbanPopulations(innerCtr), _
                              urbanPopulation.Equals(urbanPopulations(innerCtr)))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278) =
'       (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820): False
'       (New York City, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): False
'       (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): True
'
'    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820) =
'       (New York City, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): False
'       (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): False
'
'    (New York City, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278) =
'       (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): False

using System;

public class Example
{
   public static void Main()
   {
      // Get population data for New York City and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] urbanPopulations =
           { Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York City", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278) };
      // Compare each tuple with every other tuple for equality.
      for (int ctr = 0; ctr <= urbanPopulations.Length - 2; ctr++)
      {
         var urbanPopulation = urbanPopulations[ctr];
         Console.WriteLine(urbanPopulation.ToString() + " = ");
         for (int innerCtr = ctr +1; innerCtr <= urbanPopulations.Length - 1; innerCtr++)
            Console.WriteLine("   {0}: {1}", urbanPopulations[innerCtr],
                              urbanPopulation.Equals(urbanPopulations[innerCtr]));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278) =
//       (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820): False
//       (New York City, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): False
//       (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): True
//
//    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820) =
//       (New York City, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): False
//       (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): False
//
//    (New York City, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278) =
//       (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278): False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
GetHashCode 方法
Tuple

返回当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.IComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
IComparable
.
.
::
.
CompareTo 方法
Tuple

将当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是位于指定对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ obj As Object _ ) As Integer Implements IComparable.CompareTo
int IComparable.CompareTo( Object obj )
private: virtual int CompareTo( Object^ obj ) sealed = IComparable::CompareTo
private abstract CompareTo : obj:Object -> int private override CompareTo : obj:Object -> int
参数
obj
类型： System Object
与当前实例进行比较的对象。
返回值
类型： System Int32
一个有符号整数，指示此实例与
obj
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
obj
之前。
零
此实例与
obj
在排序顺序中的位置相同。
一个正整数
此实例在
obj
之后。
实现
异常 | 条件
ArgumentException | obj 不是 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 实例强制转换为 IComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 实例强制转换为 IComparable 接口时使用它。

此方法提供 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法（例如 Array..::.Sort(Array) 和 SortedList..::.Add）的默认重载方法调用，用来对集合成员进行排序。 此方法提供 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法（例如 Array..::.Sort(Array) 和 SortedList..::.Add）的默认重载方法调用，用来对集合成员进行排序。

警告说明 警告

IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)..::.Equals(Object) 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)..::.Equals(Object) 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)..::.Equals(Object) 方法。

此方法使用 Comparer<(Of <(T>)>)..::.Default 比较器。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个城市从 1950 年到 2000 年的人口数据。七个组件中包含城市名，其后是从 1950 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个城市从 1950 年到 2000 年的人口数据。七个组件中包含城市名，其后是从 1950 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个城市从 1950 年到 2000 年的人口数据。七个组件中包含城市名，其后是从 1950 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个城市从 1950 年到 2000 年的人口数据。七个组件中包含城市名，其后是从 1950 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个城市从 1950 年到 2000 年的人口数据。七个组件中包含城市名，其后是从 1950 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个城市从 1950 年到 2000 年的人口数据。七个组件中包含城市名，其后是从 1950 年到 2000 年间以十年为间隔的城市人口。该示例乱序显示数组中每个元组的组件、排序数组，然后调用 ToString 方法来有序显示每个元组的值。输出显示，数组已按名称（第一个元素）排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。

Module Example
   Public Sub Main()
      ' Create array of sextuple with population data for three U.S.
      ' cities, 1950-2000.
      Dim cities() = _
          { Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) }

      ' Display array in unsorted order.
      Console.WriteLine("In unsorted order:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities)

      ' Display array in sorted order.
      Console.WriteLine("In sorted order:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'    In unsorted order:
'    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
'
'    In sorted order:
'    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
'    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)

using System;

public class Example
{
   public static void Main()
   {
      // Create array of sextuple with population data for three U.S.
      // cities, 1950-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
          { Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());

      Console.WriteLine();

      Array.Sort(cities);

      // Display array in sorted order.
      Console.WriteLine("In sorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
//
//    In sorted order:
//    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.IStructuralComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
IStructuralComparable
.
.
::
.
CompareTo 方法
Tuple

使用指定的比较器将当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer Implements IStructuralComparable.CompareTo
int IStructuralComparable.CompareTo( Object other, IComparer comparer )
private: virtual int CompareTo( Object^ other, IComparer^ comparer ) sealed = IStructuralComparable::CompareTo
private abstract CompareTo : other:Object * comparer:IComparer -> int private override CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个对象，提供自定义比较规则。
返回值
类型： System Int32
一个有符号整数，指示此实例与
other
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
other
之前。
零
此实例与
other
在排序顺序中的位置相同。
一个正整数
此实例在
other
之后。
实现
异常 | 条件
ArgumentException | other 不是 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象。

此成员是一个显式接口实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 实例强制转换为 IStructuralComparable 接口时使用它。 此成员是一个显式接口实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 实例强制转换为 IStructuralComparable 接口时使用它。

此方法允许您定义 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的自定义比较。例如，可以使用此方法，根据特定组件的值对 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象进行排序。 此方法允许您定义 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的自定义比较。例如，可以使用此方法，根据特定组件的值对 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象进行排序。

虽然可以直接调用该方法，但它通常由包括 IComparer 参数的集合排序方法调用，用来对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。 虽然可以直接调用该方法，但它通常由包括 IComparer 参数的集合排序方法调用，用来对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。

警告说明 警告

IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1950 到 2000 的人口数据。该七元组的第一个组件为城市名。其余的五个组件表示 1950 年到 2000 年的 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1950 到 2000 的人口数据。该七元组的第一个组件为城市名。其余的五个组件表示 1950 年到 2000 年的 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1950 到 2000 的人口数据。该七元组的第一个组件为城市名。其余的五个组件表示 1950 年到 2000 年的 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1950 到 2000 的人口数据。该七元组的第一个组件为城市名。其余的五个组件表示 1950 年到 2000 年的 10 年间隔的人口。

PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对七元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个 Boolean 值（该值指示是按升序还是降序对元组对象进行排序）。 PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对七元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个 Boolean 值（该值指示是按升序还是降序对元组对象进行排序）。

然后，本示例显示未排序的数组元素，将它们按第三个组件（1960 年的人口数据）排序并显示，然后将它们按第六个组件（1990 年的人口数据）排序并显示。

Imports System.Collections
Imports System.Collections.Generic

Public Class PopulationComparer(Of T1, T2, T3, T4, T5, T6, T7) : Implements IComparer
   Private itemPosition As Integer
   Private multiplier As Integer = -1

   Public Sub New(component As Integer)
      Me.New(component, True)
   End Sub

   Public Sub New(component As Integer, descending As Boolean)
      If Not descending Then multiplier = 1

      If component <= 0 Or component > 7 Then
         Throw New ArgumentException("The component argument is out of range.")
      End If
      itemPosition = component
   End Sub

   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare

      Dim tX As Tuple(Of T1, T2, T3, T4, T5, T6, T7) = TryCast(x, Tuple(Of T1, T2, T3, T4, T5, T6, T7))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY As Tuple(Of T1, T2, T3, T4, T5, T6, T7) = DirectCast(y, Tuple(Of T1, T2, T3, T4, T5, T6, T7))
         Select Case itemPosition
            Case 1
               Return Comparer(Of T1).Default.Compare(tX.Item1, tY.Item1) * multiplier
            Case 2
               Return Comparer(Of T2).Default.Compare(tX.Item2, tY.Item2) * multiplier
            Case 3
               Return Comparer(Of T3).Default.Compare(tX.Item3, tY.Item3) * multiplier
            Case 4
               Return Comparer(Of T4).Default.Compare(tX.Item4, tY.Item4) * multiplier
            Case 5
               Return Comparer(Of T5).Default.Compare(tX.Item5, tY.Item5) * multiplier
            Case 6
               Return Comparer(Of T6).Default.Compare(tX.Item6, tY.Item6) * multiplier
            Case 7
               Return Comparer(Of T7).Default.Compare(tX.Item7, tY.Item7) * multiplier
            ' This should never be reached.
            Case Else
               Return 0
         End Select
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      ' Create array of sextuple with population data for three U.S.
      ' cities, 1950-2000.
      Dim cities() =
          { Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) }

      ' Display array in unsorted order.
      Console.WriteLine("In unsorted order:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer, Integer)(3))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 1960:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer, Integer)(6))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 1990:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'    In unsorted order:
'    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
'
'    Sorted by population in 1960:
'    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
'    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
'
'    Sorted by population in 1990:
'    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)

using System;
using System.Collections;
using System.Collections.Generic;

public class PopulationComparer<T1, T2, T3, T4, T5, T6, T7> : IComparer
{
   private int itemPosition;
   private int multiplier = -1;

   public PopulationComparer(int component) : this(component, true)
   { }

   public PopulationComparer(int component, bool descending)
   {
      if (! descending) multiplier = 1;

      if (component <= 0 || component > 7)
         throw new ArgumentException("The component argument is out of range.");

      itemPosition = component;
   }

   public int Compare(object x, object y)
   {
      Tuple<T1, T2, T3, T4, T5, T6, T7> tX = x as Tuple<T1, T2, T3, T4, T5, T6, T7>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         Tuple<T1, T2, T3, T4, T5, T6, T7> tY = y as Tuple<T1, T2, T3, T4, T5, T6, T7>;
         switch (itemPosition)
         {
            case 1:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
            case 2:
               return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2) * multiplier;
            case 3:
               return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3) * multiplier;
            case 4:
               return Comparer<T4>.Default.Compare(tX.Item4, tY.Item4) * multiplier;
            case 5:
               return Comparer<T5>.Default.Compare(tX.Item5, tY.Item5) * multiplier;
            case 6:
               return Comparer<T6>.Default.Compare(tX.Item6, tY.Item6) * multiplier;
            case 7:
               return Comparer<T7>.Default.Compare(tX.Item7, tY.Item7) * multiplier;
            default:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
         }
      }
   }
}

public class Example
{
   public static void Main()
   {
      // Create array of sextuple with population data for three U.S.
      // cities, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
           { Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int, int>(3));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1960:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int, int>(6));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1990:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
//
//    Sorted by population in 1960:
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//
//    Sorted by population in 1990:
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间
IStructuralEquatable Equals


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.IStructuralEquatable ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
Equals 方法
Tuple

返回一个值，该值根据指定的比较方法指示当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals
bool IStructuralEquatable.Equals(
    Object other,
    IEqualityComparer comparer
)
private:
virtual bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::Equals
private abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool
private override Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
与该实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个对象，定义用于评估两个对象是否相等的方法。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item7 值传递给该方法为止。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item7 值传递给该方法为止。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item7 值传递给该方法为止。 仅当 other 不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且可以成功地强制转换（在 C# 中）或转换（在 Visual Basic 中）为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象（该对象的组件与当前实例具有相同的类型）时，才会调用 IEqualityComparer..::.Equals 实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item1 值传递给 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对 Item 值时返回 false 或者两个 Item7 值传递给该方法为止。

下面的示例定义一个 RateComparer 类，用以执行自定义的相等性测试。如果传递给其 IStructuralEquatable..::.Equals 方法的值的类型为 Single 或 Double，则该方法使用最多三个小数位数测试相等性。否则，它只调用 x 参数的 Equals 方法。该示例使用此 IEqualityComparer 实现来确定四个包含 1950 年到 2000 年之间的人口变化率数据的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象是否相等。 下面的示例定义一个 RateComparer 类，用以执行自定义的相等性测试。如果传递给其 IStructuralEquatable..::.Equals 方法的值的类型为 Single 或 Double，则该方法使用最多三个小数位数测试相等性。否则，它只调用 x 参数的 Equals 方法。该示例使用此 IEqualityComparer 实现来确定四个包含 1950 年到 2000 年之间的人口变化率数据的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象是否相等。 下面的示例定义一个 RateComparer 类，用以执行自定义的相等性测试。如果传递给其 IStructuralEquatable..::.Equals 方法的值的类型为 Single 或 Double，则该方法使用最多三个小数位数测试相等性。否则，它只调用 x 参数的 Equals 方法。该示例使用此 IEqualityComparer 实现来确定四个包含 1950 年到 2000 年之间的人口变化率数据的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象是否相等。 下面的示例定义一个 RateComparer 类，用以执行自定义的相等性测试。如果传递给其 IStructuralEquatable..::.Equals 方法的值的类型为 Single 或 Double，则该方法使用最多三个小数位数测试相等性。否则，它只调用 x 参数的 Equals 方法。该示例使用此 IEqualityComparer 实现来确定四个包含 1950 年到 2000 年之间的人口变化率数据的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象是否相等。

Imports System.Collections

Public Class RateComparer(Of T1, T2, T3, T4, T5, T6, T7) : Implements IEqualityComparer
   Private argument As Integer = 0

   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
                   Implements IEqualityComparer.Equals
      argument += 1
      If argument = 1 Then
         Return True
      Else
         Dim fx, fy As Double
         If typeof x Is Double Or typeof x Is Single Then
            fx = CDbl(x)
            fy = CDbl(y)
            Return Math.Round(fx * 1000).Equals(Math.Round(fy * 1000))
         Else
            Return x.Equals(y)
         End If
      End If
   End Function

   Public Overloads Function GetHashCode(obj As Object) As Integer _
                    Implements IEqualityComparer.GetHashCode
      If TypeOf(obj) Is Single Or TypeOf(obj) Is Double Then
         Return Math.Round(CDbl(obj) * 1000).GetHashCode()
      Else
         Return obj.GetHashCode()
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim rate1 = Tuple.Create("New York", -.013934, .014505,
                               -.1042733, .0354833, .093644, .0290792)
      Dim rate2 = Tuple.Create("Unknown City", -.013934, .014505,
                               -.1042733, .0354833, .093644, .0290792)
      Dim rate3 = Tuple.Create("Unknown City", -.013934, .014505,
                               -.1042733, .0354833, .093644, .029079)
      Dim rate4 = Tuple.Create("San Francisco", -.0451934, -.0332858,
                               -.0512803, .0662544, .0728964, .0491912)
      Dim eq As IStructuralEquatable = rate1
      ' Compare first tuple with remaining two tuples.
      Console.WriteLine("{0} = ", rate1.ToString())
      Console.WriteLine("   {0} : {1}", rate2,
                        eq.Equals(rate2, New RateComparer(Of String, Double, Double, Double, Double, Double, Double)()))
      Console.WriteLine("   {0} : {1}", rate3,
                        eq.Equals(rate3, New RateComparer(Of String, Double, Double, Double, Double, Double, Double)()))
      Console.WriteLine("   {0} : {1}", rate4,
                        eq.Equals(rate4, New RateComparer(Of String, Double, Double, Double, Double, Double, Double)()))
   End Sub
End Module
' The example displays the following output:
'    (New York, -0.013934, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) =
'       (Unknown City, -0.013934, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True
'       (Unknown City, -0.013934, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True
'       (San Francisco, -0.0451934, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : False

using System;
using System.Collections;

public class RateComparer<T1, T2, T3, T4, T5, T6, T7> : IEqualityComparer
{
   private int argument = 0;

   public new bool Equals(object x, object y)
   {
      argument++;
      if (argument == 1) return true;

      double fx, fy;
      if (x is Double || x is Single)
      {
            fx = (double) x;
            fy = (double) y;
            return Math.Round(fx * 1000).Equals(Math.Round(fy * 1000));
      }
      else
      {
         return x.Equals(y);
      }
   }

   public int GetHashCode(object obj)
   {
      if (obj is Single || obj is Double)
         return Math.Round(((double) obj) * 1000).GetHashCode();
      else
         return obj.GetHashCode();
   }
}

public class Example
{
   public static void Main()
   {
      var rate1 = Tuple.Create("New York", -.013934, .014505,
                               -.1042733, .0354833, .093644, .0290792);
      var rate2 = Tuple.Create("Unknown City", -.013934, .014505,
                               -.1042733, .0354833, .093644, .0290792);
      var rate3 = Tuple.Create("Unknown City", -.013934, .014505,
                               -.1042733, .0354833, .093644, .029079);
      var rate4 = Tuple.Create("San Francisco", -.0451934, -.0332858,
                               -.0512803, .0662544, .0728964, .0491912);
      IStructuralEquatable eq = rate1;
      // Compare first tuple with remaining two tuples.
      Console.WriteLine("{0} = ", rate1.ToString());
      Console.WriteLine("   {0} : {1}", rate2,
                        eq.Equals(rate2, new RateComparer<string, double, double, double, double, double, double>()));
      Console.WriteLine("   {0} : {1}", rate3,
                        eq.Equals(rate3, new RateComparer<string, double, double, double, double, double, double>()));
      Console.WriteLine("   {0} : {1}", rate4,
                        eq.Equals(rate4, new RateComparer<string, double, double,double,  double, double, double>()));
   }
}
// The example displays the following output:
//    (New York, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) =
//       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True
//       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True
//       (San Francisco, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.IStructuralEquatable ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
GetHashCode 方法
Tuple

使用指定的计算方法计算当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer Implements IStructuralEquatable.GetHashCode
int IStructuralEquatable.GetHashCode(
    IEqualityComparer comparer
)
private:
virtual int GetHashCode(
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::GetHashCode
private abstract GetHashCode :
        comparer:IEqualityComparer -> int
private override GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个对象，其 IEqualityComparer..::.GetHashCode 方法计算当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的哈希代码。

返回值

类型： System Int32
32 位带符号整数哈希代码。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

该方法只是包装对比较器对象的 IEqualityComparer..::.GetHashCode 实现的调用。

对于两个视为相等 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 的对象，用于计算哈希代码的算法应当返回相同的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.ToString 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
ToString 方法
Tuple

返回一个字符串，该字符串表示此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的字符串表示形式。

此方法返回的字符串采用以下格式 (Item1, Item2, Item3, Item4, Item5, Item6, Item7)，其中 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 分别表示 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。 此方法返回的字符串采用以下格式 (Item1, Item2, Item3, Item4, Item5, Item6, Item7)，其中 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 分别表示 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 属性的值。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象，此对象包含从 1950 年到 2000 年每次人口普查的纽约人口数据。然后通过 ToString 方法的调用，显示该六元组的组件。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象，此对象包含从 1950 年到 2000 年每次人口普查的纽约人口数据。然后通过 ToString 方法的调用，显示该六元组的组件。

Module Example
   Public Sub Main()
      ' Get population data for New York City, 1960-2000.
      Dim population = Tuple.Create("New York", 7891957, 7781984,
                                    7894862, 7071639, 7322564, 8008278)
      Console.WriteLine(population.ToString())
   End Sub
End Module
' The example displays the following output:
'       (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)

using System;

public class Example
{
   public static void Main()
   {
      // Get population data for New York City, 1960-2000.
      var population = Tuple.Create("New York", 7891957, 7781984,
                                    7894862, 7071639, 7322564, 8008278);
      Console.WriteLine(population.ToString());
   }
}
// The example displays the following output:
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4, T5, T6, T7 类型公开以下成员。

名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.Item1 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
Item1 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第一个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item1 As T1
    Get
public T1 Item1 { get; }
public:
property T1 Item1 {
    T1 get ();
}
member Item1 : 'T1

属性值

类型： T1
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第一个分量的值。

您可以通过以下两种方式之一动态确定 Item1 组件的类型：

  • 对 GetType 属性所返回的值调用 Item1 方法。

  • 检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第一个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示城市名称，它将检索每个 Item1 对象的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示城市名称，它将检索每个 Item1 对象的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示城市名称，它将检索每个 Item1 对象的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示城市名称，它将检索每个 Item1 对象的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,66}",
                        "City", New String("-"c,(66-header.Length)\2) + header + _
                                New String("-"c, (66-header.Length)\2))
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}",
                        "1950", "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          --------------------------Population in--------------------------
'                        1950       1960       1970       1980       1990       2000
'
'    New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
'    Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
'    Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,66}",
                        "City", new String('-',(66-header.Length)/2) + header +
                                new String('-', (66-header.Length)/2));
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}\n",
                        "1950", "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7);
   }
}
// The example displays the following output:
//   City          --------------------------Population in--------------------------
//                       1950       1960       1970       1980       1990       2000
//
//   New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
//   Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
//   Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.Item2 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
Item2 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第二个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item2 As T2
    Get
public T2 Item2 { get; }
public:
property T2 Item2 {
    T2 get ();
}
member Item2 : 'T2

属性值

类型： T2
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第二个分量的值。

您可以通过以下两种方式之一动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第二个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1950 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item2 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1950 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item2 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1950 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item2 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1950 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item2 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,66}",
                        "City", New String("-"c,(66-header.Length)\2) + header + _
                                New String("-"c, (66-header.Length)\2))
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}",
                        "1950", "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          --------------------------Population in--------------------------
'                        1950       1960       1970       1980       1990       2000
'
'    New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
'    Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
'    Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,66}",
                        "City", new String('-',(66-header.Length)/2) + header +
                                new String('-', (66-header.Length)/2));
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}\n",
                        "1950", "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7);
   }
}
// The example displays the following output:
//   City          --------------------------Population in--------------------------
//                       1950       1960       1970       1980       1990       2000
//
//   New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
//   Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
//   Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.Item3 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
Item3 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第三个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item3 As T3
    Get
public T3 Item3 { get; }
public:
property T3 Item3 {
    T3 get ();
}
member Item3 : 'T3

属性值

类型： T3
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第三个分量的值。

您可以通过以下两种方式之一动态确定 Item3 组件的类型：

  • 对 GetType 属性所返回的值调用 Item3 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第三个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1960 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item3 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1960 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item3 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1960 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item3 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1960 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item3 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,66}",
                        "City", New String("-"c,(66-header.Length)\2) + header + _
                                New String("-"c, (66-header.Length)\2))
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}",
                        "1950", "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          --------------------------Population in--------------------------
'                        1950       1960       1970       1980       1990       2000
'
'    New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
'    Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
'    Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,66}",
                        "City", new String('-',(66-header.Length)/2) + header +
                                new String('-', (66-header.Length)/2));
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}\n",
                        "1950", "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7);
   }
}
// The example displays the following output:
//   City          --------------------------Population in--------------------------
//                       1950       1960       1970       1980       1990       2000
//
//   New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
//   Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
//   Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.Item4 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
Item4 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第四个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item4 As T4
    Get
public T4 Item4 { get; }
public:
property T4 Item4 {
    T4 get ();
}
member Item4 : 'T4

属性值

类型： T4
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第四个分量的值。

您可以通过以下两种方式之一动态确定 Item4 组件的类型：

  • 对 GetType 属性所返回的值调用 Item4 方法。

  • 检索表示 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Type 对象，并检索由其 Type..::.GetGenericArguments 方法返回的第四个数组元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1970 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item4 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1970 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item4 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1970 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item4 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1970 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item4 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,66}",
                        "City", New String("-"c,(66-header.Length)\2) + header + _
                                New String("-"c, (66-header.Length)\2))
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}",
                        "1950", "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          --------------------------Population in--------------------------
'                        1950       1960       1970       1980       1990       2000
'
'    New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
'    Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
'    Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,66}",
                        "City", new String('-',(66-header.Length)/2) + header +
                                new String('-', (66-header.Length)/2));
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}\n",
                        "1950", "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7);
   }
}
// The example displays the following output:
//   City          --------------------------Population in--------------------------
//                       1950       1960       1970       1980       1990       2000
//
//   New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
//   Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
//   Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.Item5 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
Item5 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第五个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item5 As T5
    Get
public T5 Item5 { get; }
public:
property T5 Item5 {
    T5 get ();
}
member Item5 : 'T5

属性值

类型： T5
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第五个分量的值。

可以通过以下两种方式之一来动态确定 Item5 组件的类型：

  • 对 GetType 属性所返回的值调用 Item5 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第五个元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1980 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item5 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1980 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item5 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1980 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item5 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1980 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item5 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,66}",
                        "City", New String("-"c,(66-header.Length)\2) + header + _
                                New String("-"c, (66-header.Length)\2))
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}",
                        "1950", "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          --------------------------Population in--------------------------
'                        1950       1960       1970       1980       1990       2000
'
'    New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
'    Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
'    Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,66}",
                        "City", new String('-',(66-header.Length)/2) + header +
                                new String('-', (66-header.Length)/2));
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}\n",
                        "1950", "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7);
   }
}
// The example displays the following output:
//   City          --------------------------Population in--------------------------
//                       1950       1960       1970       1980       1990       2000
//
//   New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
//   Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
//   Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.Item6 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
Item6 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第六个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item6 As T6
    Get
public T6 Item6 { get; }
public:
property T6 Item6 {
    T6 get ();
}
member Item6 : 'T6

属性值

类型： T6
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第六个分量的值。

可以通过以下两种方式之一来动态确定 Item6 组件的类型：

  • 对 GetType 属性所返回的值调用 Item6 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第六个元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1990 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item6 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1990 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item6 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1990 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item6 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 1990 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item6 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,66}",
                        "City", New String("-"c,(66-header.Length)\2) + header + _
                                New String("-"c, (66-header.Length)\2))
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}",
                        "1950", "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          --------------------------Population in--------------------------
'                        1950       1960       1970       1980       1990       2000
'
'    New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
'    Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
'    Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,66}",
                        "City", new String('-',(66-header.Length)/2) + header +
                                new String('-', (66-header.Length)/2));
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}\n",
                        "1950", "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7);
   }
}
// The example displays the following output:
//   City          --------------------------Population in--------------------------
//                       1950       1960       1970       1980       1990       2000
//
//   New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
//   Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
//   Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7 >)>) ..::.Item7 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7
>
)
>
)
.
.
::
.
Item7 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第七个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item7 As T7
    Get
public T7 Item7 { get; }
public:
property T7 Item7 {
    T7 get ();
}
member Item7 : 'T7

属性值

类型： T7
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的第七个分量的值。

可以通过以下两种方式之一来动态确定 Item7 组件的类型：

  • 对 GetType 属性所返回的值调用 Item7 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第七个元素。

下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 2000 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item7 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 2000 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item7 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 2000 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item7 属性的值。 下面的示例定义一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象数组，该数组的对象包含美国三个州的人口数据。从 1950 年到 2000 年的城市（纽约、芝加哥和洛杉矶）。然后，它显示一个列出数据的表。若要显示 2000 年的人口，它将检索每个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象的 Item7 属性的值。

Module Example
   Public Sub Main()
      ' Create tuples containing population data for New York, Chicago,
      ' and Los Angeles, 1960-2000.
      Dim cities() =
           { Tuple.Create("New York", 7891957, 7781984, 7894862,
                          7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061,
                          2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957,
                          3005072, 2783726, 2896016) }

      ' Display tuple data in table.
      Dim header As String = "Population in"
      Console.WriteLine("{0,-12} {1,66}",
                        "City", New String("-"c,(66-header.Length)\2) + header + _
                                New String("-"c, (66-header.Length)\2))
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}",
                        "1950", "1960", "1970", "1980", "1990", "2000")
      Console.WriteLine()
      For Each city In cities
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7)
      Next
   End Sub
End Module
' The example displays the following output:
'    City          --------------------------Population in--------------------------
'                        1950       1960       1970       1980       1990       2000
'
'    New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
'    Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
'    Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      // Create tuples containing population data for New York, Chicago,
      // and Los Angeles, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
           { Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display tuple data in table.
      string header = "Population in";
      Console.WriteLine("{0,-12} {1,66}",
                        "City", new String('-',(66-header.Length)/2) + header +
                                new String('-', (66-header.Length)/2));
      Console.WriteLine("{0,24}{1,11}{2,11}{3,11}{4,11}{5,11}\n",
                        "1950", "1960", "1970", "1980", "1990", "2000");

      foreach (var city in cities)
         Console.WriteLine("{0,-12} {1,11:N0}{2,11:N0}{3,11:N0}{4,11:N0}{5,11:N0}{6,11:N0}",
                           city.Item1, city.Item2, city.Item3, city.Item4,
                           city.Item5, city.Item6, city.Item7);
   }
}
// The example displays the following output:
//   City          --------------------------Population in--------------------------
//                       1950       1960       1970       1980       1990       2000
//
//   New York       7,891,957  7,781,984  7,894,862  7,071,639  7,322,564  8,008,278
//   Los Angeles    1,970,358  2,479,015  2,816,061  2,966,850  3,485,398  3,694,820
//   Chicago        3,620,962  3,550,904  3,366,957  3,005,072  2,783,726  2,896,016

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7 类
Tuple T1, T2, T3, T4, T5, T6, T7 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) 类

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
类
成员

表示 n 元组，其中 n 为 8 或更大。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class Tuple(Of T1, T2, T3, T4, T5, T6, T7, TRest) _
    Implements IStructuralEquatable, IStructuralComparable, IComparable
[SerializableAttribute]
public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable,
    IStructuralComparable, IComparable

[SerializableAttribute]
generic<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename TRest>
public ref class Tuple : IStructuralEquatable, IStructuralComparable,
    IComparable
[<SerializableAttribute>]
type Tuple<'T1, 'T2, 'T3, 'T4, 'T5, 'T6, 'T7, 'TRest> =
    class
        interface IStructuralEquatable
        interface IStructuralComparable
        interface IComparable
    end

类型参数

T1

此元组的第一个组件的类型。

T2

此元组的第二个组件的类型。

T3

此元组的第三个组件的类型。

T4

此元组的第四个组件的类型。

T5

元组的第五个分量的类型。

T6

元组的第六个分量的类型。

T7

元组的第七个分量的类型。

TRest

任何常规 Tuple 对象，用于定义元组的剩余分量的类型。

元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类表示具有八个或更多组件的 n 元组。 元组是一种数据结构，其中的值具有特定数目和序列。Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类表示具有八个或更多组件的 n 元组。

可以通过调用静态 Tuple..::.Create 方法来实例化恰好包含八个组件的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。下面的示例创建一个8 元组（八元组），其中包含小于 20 的质数 。注意，它使用类型推理来确定每个组件的类型。 可以通过调用静态 Tuple..::.Create 方法来实例化恰好包含八个组件的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。下面的示例创建一个8 元组（八元组），其中包含小于 20 的质数 。注意，它使用类型推理来确定每个组件的类型。 可以通过调用静态 Tuple..::.Create 方法来实例化恰好包含八个组件的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。下面的示例创建一个8 元组（八元组），其中包含小于 20 的质数 。注意，它使用类型推理来确定每个组件的类型。

Dim primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19)

var primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19);

还可以通过调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数来实例化包含八个或更多组件的 n 元组对象。下面的示例使用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数创建一个 8 元组，该元组等效于前面的示例中创建的元组。 还可以通过调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数来实例化包含八个或更多组件的 n 元组对象。下面的示例使用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数创建一个 8 元组，该元组等效于前面的示例中创建的元组。

Dim primes = New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32, _
             Tuple(Of Int32))(2, 3, 5, 7, 11, 13, 17, New Tuple(Of Int32)(19))

var primes = new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
             Tuple<Int32>> (2, 3, 5, 7, 11, 13, 17, new Tuple<Int32>(19));
说明 说明

若要创建包含九个或更多组件的 n 元组，您必须调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数。Tuple 类的静态工厂方法并不支持具有多于八个组件的 Tuple 对象的创建。 若要创建包含九个或更多组件的 n 元组，您必须调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数。Tuple 类的静态工厂方法并不支持具有多于八个组件的 Tuple 对象的创建。

若要使用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数实例化具有八个或更多组件的 n 元组，必须提供一个作为 rest 参数的泛型 Tuple 对象，以定义该元组的第八到 n 个组件。通过以这种方式嵌套泛型 Tuple 对象，您可以创建一个对其组件数量没有实际限制的元组。 若要使用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数实例化具有八个或更多组件的 n 元组，必须提供一个作为 rest 参数的泛型 Tuple 对象，以定义该元组的第八到 n 个组件。通过以这种方式嵌套泛型 Tuple 对象，您可以创建一个对其组件数量没有实际限制的元组。

下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次国家普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。17 元组是通过在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象内嵌套 Tuple<(Of <(T1, T2, T3>)>) 对象而创建的。即，Tuple<(Of <(T1, T2, T3>)>) 对象作为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类构造函数中的 rest 参数的值提供。此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象又嵌套在一个外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象中。即，Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象作为外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的类构造函数中的 rest 参数的值提供。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次国家普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。17 元组是通过在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象内嵌套 Tuple<(Of <(T1, T2, T3>)>) 对象而创建的。即，Tuple<(Of <(T1, T2, T3>)>) 对象作为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类构造函数中的 rest 参数的值提供。此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象又嵌套在一个外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象中。即，Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象作为外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的类构造函数中的 rest 参数的值提供。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次国家普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。17 元组是通过在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象内嵌套 Tuple<(Of <(T1, T2, T3>)>) 对象而创建的。即，Tuple<(Of <(T1, T2, T3>)>) 对象作为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类构造函数中的 rest 参数的值提供。此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象又嵌套在一个外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象中。即，Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象作为外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的类构造函数中的 rest 参数的值提供。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次国家普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。17 元组是通过在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象内嵌套 Tuple<(Of <(T1, T2, T3>)>) 对象而创建的。即，Tuple<(Of <(T1, T2, T3>)>) 对象作为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类构造函数中的 rest 参数的值提供。此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象又嵌套在一个外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象中。即，Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象作为外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的类构造函数中的 rest 参数的值提供。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次国家普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。17 元组是通过在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象内嵌套 Tuple<(Of <(T1, T2, T3>)>) 对象而创建的。即，Tuple<(Of <(T1, T2, T3>)>) 对象作为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类构造函数中的 rest 参数的值提供。此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象又嵌套在一个外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象中。即，Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象作为外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的类构造函数中的 rest 参数的值提供。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次国家普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。17 元组是通过在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象内嵌套 Tuple<(Of <(T1, T2, T3>)>) 对象而创建的。即，Tuple<(Of <(T1, T2, T3>)>) 对象作为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类构造函数中的 rest 参数的值提供。此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象又嵌套在一个外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象中。即，Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象作为外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的类构造函数中的 rest 参数的值提供。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次国家普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。17 元组是通过在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象内嵌套 Tuple<(Of <(T1, T2, T3>)>) 对象而创建的。即，Tuple<(Of <(T1, T2, T3>)>) 对象作为 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类构造函数中的 rest 参数的值提供。此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象又嵌套在一个外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象中。即，Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象作为外部 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的类构造函数中的 rest 参数的值提供。

Dim from1980 = Tuple.Create(1203339, 1027974, 951270)
Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
    Tuple(Of Integer, Integer, Integer)) _
    (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
    Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
    ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

var from1980 = Tuple.Create(1203339, 1027974, 951270);
var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
    (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
var population = new Tuple<string, int, int, int, int, int, int,
    Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
    ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

通过使用只读 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 实例属性，可以检索元组的前七个组件的值。任何其他组件都是嵌套的，可以从 Rest 属性中检索到。在前一个示例中，Item1 到 Item7 属性检索元组的第一到七个组件。第八到十四个组件包含在第二层嵌套的元组中，并由 Rest.Item1 到 Rest.Item7 属性表示。第十五到十七个组件包含在第三层嵌套的元组中，并由 Rest.Rest.Item1 到 Rest.Rest.Item3 属性表示。 通过使用只读 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 实例属性，可以检索元组的前七个组件的值。任何其他组件都是嵌套的，可以从 Rest 属性中检索到。在前一个示例中，Item1 到 Item7 属性检索元组的第一到七个组件。第八到十四个组件包含在第二层嵌套的元组中，并由 Rest.Item1 到 Rest.Item7 属性表示。第十五到十七个组件包含在第三层嵌套的元组中，并由 Rest.Rest.Item1 到 Rest.Rest.Item3 属性表示。 通过使用只读 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 实例属性，可以检索元组的前七个组件的值。任何其他组件都是嵌套的，可以从 Rest 属性中检索到。在前一个示例中，Item1 到 Item7 属性检索元组的第一到七个组件。第八到十四个组件包含在第二层嵌套的元组中，并由 Rest.Item1 到 Rest.Item7 属性表示。第十五到十七个组件包含在第三层嵌套的元组中，并由 Rest.Rest.Item1 到 Rest.Rest.Item3 属性表示。 通过使用只读 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 实例属性，可以检索元组的前七个组件的值。任何其他组件都是嵌套的，可以从 Rest 属性中检索到。在前一个示例中，Item1 到 Item7 属性检索元组的第一到七个组件。第八到十四个组件包含在第二层嵌套的元组中，并由 Rest.Item1 到 Rest.Item7 属性表示。第十五到十七个组件包含在第三层嵌套的元组中，并由 Rest.Rest.Item1 到 Rest.Rest.Item3 属性表示。 通过使用只读 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 实例属性，可以检索元组的前七个组件的值。任何其他组件都是嵌套的，可以从 Rest 属性中检索到。在前一个示例中，Item1 到 Item7 属性检索元组的第一到七个组件。第八到十四个组件包含在第二层嵌套的元组中，并由 Rest.Item1 到 Rest.Item7 属性表示。第十五到十七个组件包含在第三层嵌套的元组中，并由 Rest.Rest.Item1 到 Rest.Rest.Item3 属性表示。

元组通常有四种不同的使用方式：

  • 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。 表示一组数据。例如，元组可以表示一条数据库记录，并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。

  • 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前一个示例在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象中除返回城市名称外，还返回计算所得的统计信息。 在不使用 out 参数（在 C# 中）或 ByRef 参数（在 Visual Basic）的情况下，从方法中返回多个值。例如，前一个示例在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象中除返回城市名称外，还返回计算所得的统计信息。

  • 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象作为方法参数提供，则可以提供具有七项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象作为方法参数提供，则可以提供具有七项数据的线程启动例程。 通过单个参数将多个值传递给一个方法。例如，Thread..::.Start(Object) 方法有一个单一参数，可以使用该参数向在启动时线程执行的方法提供一个值。如果将 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 对象作为方法参数提供，则可以提供具有七项数据的线程启动例程。

System System..::.Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>)Tuple System..::.Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>)T1, T2, T3, T4, T5, T6, T7, TRest System..::.Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间
Tuple
Tuple T1
Tuple T1, T2
Tuple T1, T2, T3
Tuple T1, T2, T3, T4
Tuple T1, T2, T3, T4, T5
Tuple T1, T2, T3, T4, T5, T6
Tuple T1, T2, T3, T4, T5, T6, T7


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) 成员

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

表示 n 元组，其中 n 为 8 或更大。

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) 构造函数

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
构造函数
Tuple

初始化 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    item1 As T1, _
    item2 As T2, _
    item3 As T3, _
    item4 As T4, _
    item5 As T5, _
    item6 As T6, _
    item7 As T7, _
    rest As TRest _
)
public Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6,
    T7 item7,
    TRest rest
)
public:
Tuple(
    T1 item1,
    T2 item2,
    T3 item3,
    T4 item4,
    T5 item5,
    T6 item6,
    T7 item7,
    TRest rest
)
new :
        item1:'T1 *
        item2:'T2 *
        item3:'T3 *
        item4:'T4 *
        item5:'T5 *
        item6:'T6 *
        item7:'T7 *
        rest:'TRest -> Tuple

参数

item1
类型： T1
此元组的第一个组件的值。
item2
类型： T2
此元组的第二个组件的值。
item3
类型： T3
此元组的第三个组件的值。
item4
类型： T4
此元组的第四个组件的值
item5
类型： T5
元组的第五个分量的值。
item6
类型： T6
元组的第六个分量的值。
item7
类型： T7
元组的第七个分量的值。
rest
类型： TRest
任何常规 Tuple 对象，其中包含元组的剩余分量的值。
异常 | 条件
ArgumentException | rest 不是泛型 Tuple 对象。

您还可以使用静态 Tuple..::.Create 方法实例化 8 元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create 方法实例化包含小于 20 的质数的 8 元组对象。 您还可以使用静态 Tuple..::.Create 方法实例化 8 元组对象，而无需显式指定其组件的类型。下面的示例使用 Tuple..::.Create 方法实例化包含小于 20 的质数的 8 元组对象。

Dim primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19)

var primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19);

这等效于下面的对 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类构造函数的调用。

Dim primes = New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32, _
             Tuple(Of Int32))(2, 3, 5, 7, 11, 13, 17, New Tuple(Of Int32)(19))

var primes = new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
             Tuple<Int32>> (2, 3, 5, 7, 11, 13, 17, new Tuple<Int32>(19));

但是，静态 Tuple..::.Create 方法不能用于创建一个包含超过八个组件的元组对象。

使用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数创建具有八个或更多组件的 n 元组时，需要使用 rest 参数创建具有一到七个组件的嵌套 n 元组。通过使用连续的嵌套层数，您可以创建组件数几乎不受限制的 n 元组。例如，要创建一个 25 元组，可以实例化一个有三级嵌套的Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象，如下所示： 使用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数创建具有八个或更多组件的 n 元组时，需要使用 rest 参数创建具有一到七个组件的嵌套 n 元组。通过使用连续的嵌套层数，您可以创建组件数几乎不受限制的 n 元组。例如，要创建一个 25 元组，可以实例化一个有三级嵌套的Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象，如下所示： 使用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 构造函数创建具有八个或更多组件的 n 元组时，需要使用 rest 参数创建具有一到七个组件的嵌套 n 元组。通过使用连续的嵌套层数，您可以创建组件数几乎不受限制的 n 元组。例如，要创建一个 25 元组，可以实例化一个有三级嵌套的Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象，如下所示：

  • 最外层 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象包含第一到第七个组件。它的 Rest 属性可以用于访问第一级嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。 最外层 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象包含第一到第七个组件。它的 Rest 属性可以用于访问第一级嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。

  • 最外层嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象包含第八到十四个组件，其 Rest 属性提供对位于第二层嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的访问。

  • 位于第二层嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象包含第十五到二十一个组件，其 Rest 属性提供对位于第三层嵌套的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象的访问。

  • 最内层的元组是一个包含第二十二到二十五个组件的 Tuple<(Of <(T1, T2, T3, T4>)>) 对象。

下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。本示例使用两层嵌套来创建 17 元组：它定义一个其第三到七个组件包含 1860 到 1900 年人口数据的 7 元组、一个包含 1910 到 1970 年人口数据的嵌套 7 元组，以及一个包含 1980 到 2000 年人口数据的内部嵌套 3 元组。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。本示例使用两层嵌套来创建 17 元组：它定义一个其第三到七个组件包含 1860 到 1900 年人口数据的 7 元组、一个包含 1910 到 1970 年人口数据的嵌套 7 元组，以及一个包含 1980 到 2000 年人口数据的内部嵌套 3 元组。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。本示例使用两层嵌套来创建 17 元组：它定义一个其第三到七个组件包含 1860 到 1900 年人口数据的 7 元组、一个包含 1910 到 1970 年人口数据的嵌套 7 元组，以及一个包含 1980 到 2000 年人口数据的内部嵌套 3 元组。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。本示例使用两层嵌套来创建 17 元组：它定义一个其第三到七个组件包含 1860 到 1900 年人口数据的 7 元组、一个包含 1910 到 1970 年人口数据的嵌套 7 元组，以及一个包含 1980 到 2000 年人口数据的内部嵌套 3 元组。 下面的示例创建一个 17 元组，该元组包含密歇根州底特律从 1860 到 2000 年每次普查的人口数据。该元组的第一个组件为城市名。第二个组件是数据系列的开始日期，第三个组件是开始日期的人口。每个后续批次提供以十年为间隔的人口数。本示例使用两层嵌套来创建 17 元组：它定义一个其第三到七个组件包含 1860 到 1900 年人口数据的 7 元组、一个包含 1910 到 1970 年人口数据的嵌套 7 元组，以及一个包含 1980 到 2000 年人口数据的内部嵌套 3 元组。

Dim from1980 = Tuple.Create(1203339, 1027974, 951270)
Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
    Tuple(Of Integer, Integer, Integer)) _
    (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
    Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
    ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

var from1980 = Tuple.Create(1203339, 1027974, 951270);
var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
    (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
var population = new Tuple<string, int, int, int, int, int, int,
    Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
    ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间
Tuple Create


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
Equals 方法
Tuple

返回一个值，该值指示当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的对象。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

如果符合下列所有条件，则 obj 参数视为与当前实例相等：

  • 它是 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。

  • 它的总组件数与当前实例同一类型的总组件数相同。

  • 它的组件（包括嵌套组件）具有与当前实例相同的值。

下列示例定义五个包含质数的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。然后，它将第一个对象与每个其余对象进行比较。如输出所示，只有第一个和最后一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象相等，因为它们具有数目相同的组件，这些组件具有相同的值。 下列示例定义五个包含质数的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。然后，它将第一个对象与每个其余对象进行比较。如输出所示，只有第一个和最后一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象相等，因为它们具有数目相同的组件，这些组件具有相同的值。 下列示例定义五个包含质数的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。然后，它将第一个对象与每个其余对象进行比较。如输出所示，只有第一个和最后一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象相等，因为它们具有数目相同的组件，这些组件具有相同的值。

Module Example
   Public Sub Main()
      ' Create five 8-tuple objects containing prime numbers.
      Dim prime1 = New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple(Of Int32)) (2, 3, 5, 7, 11, 13, 17,
                           New Tuple(Of Int32)(19))
      Dim prime2 = New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple(Of Int32)) (23, 29, 31, 37, 41, 43, 47,
                           New Tuple(Of Int32)(55))
      Dim prime3 = New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple(Of Int32)) (3, 2, 5, 7, 11, 13, 17,
                           New Tuple(Of Int32)(19))
      Dim prime4 = New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple(Of Int32, Int32)) (2, 3, 5, 7, 11, 13, 17,
                           New Tuple(Of Int32, Int32)(19, 23))
      Dim prime5 = New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple(Of Int32)) (2, 3, 5, 7, 11, 13, 17,
                           New Tuple(Of Int32)(19))
      Console.WriteLine("{0} = {1} : {2}", prime1, prime2, prime1.Equals(prime2))
      Console.WriteLine("{0} = {1} : {2}", prime1, prime3, prime1.Equals(prime3))
      Console.WriteLine("{0} = {1} : {2}", prime1, prime4, prime1.Equals(prime4))
      Console.WriteLine("{0} = {1} : {2}", prime1, prime5, prime1.Equals(prime5))
   End Sub
End Module
' The example displays the following output:
'    (2, 3, 5, 7, 11, 13, 17, 19) = (23, 29, 31, 37, 41, 43, 47, 55) : False
'    (2, 3, 5, 7, 11, 13, 17, 19) = (3, 2, 5, 7, 11, 13, 17, 19) : False
'    (2, 3, 5, 7, 11, 13, 17, 19) = (2, 3, 5, 7, 11, 13, 17, 19, 23) : False
'    (2, 3, 5, 7, 11, 13, 17, 19) = (2, 3, 5, 7, 11, 13, 17, 19) : True

using System;

public class Class1
{
   public static void Main()
   {
      // Create five 8-tuple objects containing prime numbers.
      var prime1 = new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple<Int32>> (2, 3, 5, 7, 11, 13, 17,
                           new Tuple<Int32>(19));
      var prime2 = new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple<Int32>> (23, 29, 31, 37, 41, 43, 47,
                           new Tuple<Int32>(55));
      var prime3 = new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple<Int32>> (3, 2, 5, 7, 11, 13, 17,
                           new Tuple<Int32>(19));
      var prime4 = new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple<Int32, Int32>> (2, 3, 5, 7, 11, 13, 17,
                           new Tuple<Int32, Int32>(19, 23));
      var prime5 = new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple<Int32>> (2, 3, 5, 7, 11, 13, 17,
                           new Tuple<Int32>(19));
      Console.WriteLine("{0} = {1} : {2}", prime1, prime2, prime1.Equals(prime2));
      Console.WriteLine("{0} = {1} : {2}", prime1, prime3, prime1.Equals(prime3));
      Console.WriteLine("{0} = {1} : {2}", prime1, prime4, prime1.Equals(prime4));
      Console.WriteLine("{0} = {1} : {2}", prime1, prime5, prime1.Equals(prime5));
   }
}
// The example displays the following output:
//    (2, 3, 5, 7, 11, 13, 17, 19) = (23, 29, 31, 37, 41, 43, 47, 55) : False
//    (2, 3, 5, 7, 11, 13, 17, 19) = (3, 2, 5, 7, 11, 13, 17, 19) : False
//    (2, 3, 5, 7, 11, 13, 17, 19) = (2, 3, 5, 7, 11, 13, 17, 19, 23) : False
//    (2, 3, 5, 7, 11, 13, 17, 19) = (2, 3, 5, 7, 11, 13, 17, 19) : True

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
GetHashCode 方法
Tuple

计算当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位带符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.IComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
IComparable
.
.
::
.
CompareTo 方法
Tuple

将当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是位于指定对象之前、之后还是与其位置相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ obj As Object _ ) As Integer Implements IComparable.CompareTo
int IComparable.CompareTo( Object obj )
private: virtual int CompareTo( Object^ obj ) sealed = IComparable::CompareTo
private abstract CompareTo : obj:Object -> int private override CompareTo : obj:Object -> int
参数
obj
类型： System Object
与当前实例进行比较的对象。
返回值
类型： System Int32
一个有符号整数，指示此实例与
obj
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
obj
之前。
零
此实例与
obj
在排序顺序中的位置相同。
一个正整数
此实例在
obj
之后。
实现
异常 | 条件
ArgumentException | obj 不是 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 实例强制转换为 IComparable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 实例强制转换为 IComparable 接口时使用它。

此方法提供 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法（例如 Array..::.Sort(Array) 和 SortedList..::.Add）的默认重载方法调用，用来对集合成员进行排序。 此方法提供 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>) 类的 IComparable..::.CompareTo 实现。虽然可以直接调用该方法，但它通常由集合排序方法（例如 Array..::.Sort(Array) 和 SortedList..::.Add）的默认重载方法调用，用来对集合成员进行排序。

警告说明 警告

IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)..::.Equals(Object) 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)..::.Equals(Object) 方法。 IComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7>)>)..::.Equals(Object) 方法。

此方法使用 Comparer<(Of <(T>)>)..::.Default 比较器。

下面的示例创建一个八元数组，其组件是包含某一范围的质数的整数。本示例显示未排序的数组元素，对数组进行排序，然后按排序顺序显示数组。输出显示数组已经按 Item1 或元组的第一个组件进行了排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个八元数组，其组件是包含某一范围的质数的整数。本示例显示未排序的数组元素，对数组进行排序，然后按排序顺序显示数组。输出显示数组已经按 Item1 或元组的第一个组件进行了排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个八元数组，其组件是包含某一范围的质数的整数。本示例显示未排序的数组元素，对数组进行排序，然后按排序顺序显示数组。输出显示数组已经按 Item1 或元组的第一个组件进行了排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个八元数组，其组件是包含某一范围的质数的整数。本示例显示未排序的数组元素，对数组进行排序，然后按排序顺序显示数组。输出显示数组已经按 Item1 或元组的第一个组件进行了排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。 下面的示例创建一个八元数组，其组件是包含某一范围的质数的整数。本示例显示未排序的数组元素，对数组进行排序，然后按排序顺序显示数组。输出显示数组已经按 Item1 或元组的第一个组件进行了排序。请注意，示例没有直接调用 IComparable..::.CompareTo(Object) 方法。此方法由数组中的每个元素的 Sort(Array) 方法隐式调用。

Module Example
   Public Sub Main()
      ' Create array of 8-tuple objects containing prime numbers.
      Dim primes() = { New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple(Of Int32)) (2, 3, 5, 7, 11, 13, 17,
                           New Tuple(Of Int32)(19)),
                       New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple(Of Int32)) (23, 29, 31, 37, 41, 43, 47,
                           New Tuple(Of Int32)(55)),
                       New Tuple(Of Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple(Of Int32)) (3, 2, 5, 7, 11, 13, 17,
                           New Tuple(Of Int32)(19)) }
      ' Display 8-tuples in unsorted order.
      For Each prime In primes
         Console.WriteLine(prime.ToString())
      Next
      Console.WriteLine()

      ' Sort the array and display its 8-tuples.
      Array.Sort(primes)
      For Each prime In primes
         Console.WriteLine(prime.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'       (2, 3, 5, 7, 11, 13, 17, 19)
'       (23, 29, 31, 37, 41, 43, 47, 55)
'       (3, 2, 5, 7, 11, 13, 17, 19)
'
'       (2, 3, 5, 7, 11, 13, 17, 19)
'       (3, 2, 5, 7, 11, 13, 17, 19)
'       (23, 29, 31, 37, 41, 43, 47, 55)

using System;

public class Example
{
   public static void Main()
   {
      // Create array of 8-tuple objects containing prime numbers.
      Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32, Tuple<Int32>>[] primes =
                     { new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple<Int32>>(2, 3, 5, 7, 11, 13, 17, new Tuple<Int32>(19)),
                       new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple<Int32>>(23, 29, 31, 37, 41, 43, 47, new Tuple<Int32>(55)),
                       new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,
                           Tuple<Int32>>(3, 2, 5, 7, 11, 13, 17, new Tuple<Int32>(19)) };
      // Display 8-tuples in unsorted order.
      foreach (var prime in primes)
         Console.WriteLine(prime.ToString());
      Console.WriteLine();

      // Sort the array and display its 8-tuples.
      Array.Sort(primes);
      foreach (var prime in primes)
         Console.WriteLine(prime.ToString());
   }
}
// The example displays the following output:
//       (2, 3, 5, 7, 11, 13, 17, 19)
//       (23, 29, 31, 37, 41, 43, 47, 55)
//       (3, 2, 5, 7, 11, 13, 17, 19)
//
//       (2, 3, 5, 7, 11, 13, 17, 19)
//       (3, 2, 5, 7, 11, 13, 17, 19)
//       (23, 29, 31, 37, 41, 43, 47, 55)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.IStructuralComparable ..::.CompareTo 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
IStructuralComparable
.
.
::
.
CompareTo 方法
Tuple

使用指定的比较器将当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象与指定对象进行比较，并返回一个整数，该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer Implements IStructuralComparable.CompareTo
int IStructuralComparable.CompareTo( Object other, IComparer comparer )
private: virtual int CompareTo( Object^ other, IComparer^ comparer ) sealed = IStructuralComparable::CompareTo
private abstract CompareTo : other:Object * comparer:IComparer -> int private override CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个对象，提供自定义比较规则。
返回值
类型： System Int32
一个有符号整数，指示此实例与
other
在排序顺序中的相对位置，如下表所示。
值
说明
一个负整数
此实例在
other
之前。
零
此实例与
other
在排序顺序中的位置相同。
一个正整数
此实例在
other
之后。
实现
异常 | 条件
ArgumentException | other 不是 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象。

此成员是一个显式接口实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 实例强制转换为 IStructuralComparable 接口时使用它。 此成员是一个显式接口实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 实例强制转换为 IStructuralComparable 接口时使用它。

此方法允许您定义 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的自定义比较。例如，可以使用此方法，根据特定组件的值对 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象进行排序。 此方法允许您定义 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的自定义比较。例如，可以使用此方法，根据特定组件的值对 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象进行排序。

虽然可以直接调用该方法，但它通常由包括 IComparer 参数的集合排序方法调用，用来对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。 虽然可以直接调用该方法，但它通常由包括 IComparer 参数的集合排序方法调用，用来对集合成员进行排序。例如，它可由 SortedList 对象的 Array..::.Sort(Array, IComparer) 方法和 Add 方法调用，该对象通过使用 SortedList..::.SortedList(IComparer) 构造函数进行实例化。

警告说明 警告

IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。 IStructuralComparable..::.CompareTo 方法用于排序操作。当比较操作主要是为了确定两个对象是否相等时，不应使用该方法。若要确定两个对象是否相等，请调用 IStructuralEquatable..::.Equals 方法。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象数组，该数组包含美国四个州的人口资料。城市从 1940 到 2000 的人口数据。该八元组的第一个组件为城市名。其余的六个组件表示 1940 年到 2000 年的 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象数组，该数组包含美国四个州的人口资料。城市从 1940 到 2000 的人口数据。该八元组的第一个组件为城市名。其余的六个组件表示 1940 年到 2000 年的 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象数组，该数组包含美国四个州的人口资料。城市从 1940 到 2000 的人口数据。该八元组的第一个组件为城市名。其余的六个组件表示 1940 年到 2000 年的 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象数组，该数组包含美国四个州的人口资料。城市从 1940 到 2000 的人口数据。该八元组的第一个组件为城市名。其余的六个组件表示 1940 年到 2000 年的 10 年间隔的人口。

PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对八元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个 Boolean 值（该值指示是按升序还是降序对元组对象进行排序）。 PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对八元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个 Boolean 值（该值指示是按升序还是降序对元组对象进行排序）。

然后，本示例显示未排序的数组元素，将它们按第三个组件（1950 年的人口数据）排序并显示，然后将它们按第八个组件（2000 年的人口数据）排序并显示。

Imports System.Collections
Imports System.Collections.Generic

Public Class PopulationComparer(Of T1, T2, T3, T4, T5, T6, T7, T8) : Implements IComparer
   Private itemPosition As Integer
   Private multiplier As Integer = -1

   Public Sub New(component As Integer)
      Me.New(component, True)
   End Sub

   Public Sub New(component As Integer, descending As Boolean)
      If Not descending Then multiplier = 1

      If component <= 0 Or component > 8 Then
         Throw New ArgumentException("The component argument is out of range.")
      End If
      itemPosition = component
   End Sub

   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare

      Dim tX As Tuple(Of T1, T2, T3, T4, T5, T6, T7, Tuple(Of T8)) = TryCast(x, Tuple(Of T1, T2, T3, T4, T5, T6, T7, Tuple(Of T8)))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY As Tuple(Of T1, T2, T3, T4, T5, T6, T7, Tuple(Of T8)) = DirectCast(y, Tuple(Of T1, T2, T3, T4, T5, T6, T7, Tuple(Of T8)))
         Select Case itemPosition
            Case 1
               Return Comparer(Of T1).Default.Compare(tX.Item1, tY.Item1) * multiplier
            Case 2
               Return Comparer(Of T2).Default.Compare(tX.Item2, tY.Item2) * multiplier
            Case 3
               Return Comparer(Of T3).Default.Compare(tX.Item3, tY.Item3) * multiplier
            Case 4
               Return Comparer(Of T4).Default.Compare(tX.Item4, tY.Item4) * multiplier
            Case 5
               Return Comparer(Of T5).Default.Compare(tX.Item5, tY.Item5) * multiplier
            Case 6
               Return Comparer(Of T6).Default.Compare(tX.Item6, tY.Item6) * multiplier
            Case 7
               Return Comparer(Of T7).Default.Compare(tX.Item7, tY.Item7) * multiplier
            Case 8
               Return Comparer(Of T8).Default.Compare(tX.Rest.Item1, tY.Rest.Item1) * multiplier
         End Select
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      ' Create array of octuples with population data for three U.S.
      ' cities, 1940-2000.
      Dim cities()  = _
          { Tuple.Create("Los Angeles", 1504277, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7454995, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3396808, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016),
            Tuple.Create("Detroit", 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270) }
      ' Display array in unsorted order.
      Console.WriteLine("In unsorted order:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer, Integer, Integer)(2))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 1950:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer, Integer, Integer)(8))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'    In unsorted order:
'    (Los Angeles, 1504277, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (New York, 7454995, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3396808, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
'    (Detroit, 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270)
'
'    Sorted by population in 1950:
'    (New York, 7454995, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3396808, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
'    (Detroit, 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270)
'    (Los Angeles, 1504277, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
'
'    Sorted by population in 2000:
'    (New York, 7454995, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Los Angeles, 1504277, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (Chicago, 3396808, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
'    (Detroit, 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270)

using System;
using System.Collections;
using System.Collections.Generic;

public class PopulationComparer<T1, T2, T3, T4, T5, T6, T7, T8> : IComparer
{
   private int itemPosition;
   private int multiplier = -1;

   public PopulationComparer(int component) : this(component, true)
   { }

   public PopulationComparer(int component, bool descending)
   {
      if (! descending) multiplier = 1;

      if (component <= 0 || component > 8)
         throw new ArgumentException("The component argument is out of range.");

      itemPosition = component;
   }

   public int Compare(object x, object y)
   {
      Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> tX = x as Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>;
      if (tX == null)
         return 0;

      Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> tY = y as Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>;
      switch (itemPosition)
      {
         case 1:
            return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
         case 2:
            return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2) * multiplier;
         case 3:
            return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3) * multiplier;
         case 4:
            return Comparer<T4>.Default.Compare(tX.Item4, tY.Item4) * multiplier;
         case 5:
            return Comparer<T5>.Default.Compare(tX.Item5, tY.Item5) * multiplier;
         case 6:
            return Comparer<T6>.Default.Compare(tX.Item6, tY.Item6) * multiplier;
         case 7:
            return Comparer<T7>.Default.Compare(tX.Item7, tY.Item7) * multiplier;
         case 8:
            return Comparer<T8>.Default.Compare(tX.Rest.Item1, tY.Rest.Item1) * multiplier;
         default:
            return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
      }
   }
}

public class Example
{
   public static void Main()
   {
      // Create array of octuples with population data for three U.S.
      // cities, 1940-2000.
      Tuple<string, int, int, int, int, int, int, Tuple<int>>[] cities  =
          { Tuple.Create("Los Angeles", 1504277, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7454995, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3396808, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016),
            Tuple.Create("Detroit", 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270) };
      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int, int, int>(2));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1950:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int, int, int>(8));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 1504277, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7454995, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3396808, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Detroit, 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270)
//
//    Sorted by population in 1950:
//    (New York, 7454995, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3396808, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Detroit, 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270)
//    (Los Angeles, 1504277, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//
//    Sorted by population in 2000:
//    (New York, 7454995, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Los Angeles, 1504277, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (Chicago, 3396808, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Detroit, 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.IStructuralEquatable ..::.Equals 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
Equals 方法
Tuple

返回一个值，该值根据指定的比较方法指示当前的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象是否与指定对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals
bool IStructuralEquatable.Equals(
    Object other,
    IEqualityComparer comparer
)
private:
virtual bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::Equals
private abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool
private override Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
与该实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个对象，定义用于评估两个对象是否相等的方法。

返回值

类型： System Boolean
如果当前实例等于指定对象，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

只有在 other 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 IEqualityComparer..::.Equals 实现可以成功强制转换（在 C# 中）或转换（在 Visual Basic 中）为具有与当前实例类型相同、总数相同的组件（包括嵌套的 Tuple 对象中的组件）的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象时，才调用该实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Item1 值传递到 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对值时返回 false 或者两个 Rest 值传递给该方法为止。 只有在 other 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 IEqualityComparer..::.Equals 实现可以成功强制转换（在 C# 中）或转换（在 Visual Basic 中）为具有与当前实例类型相同、总数相同的组件（包括嵌套的 Tuple 对象中的组件）的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象时，才调用该实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Item1 值传递到 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对值时返回 false 或者两个 Rest 值传递给该方法为止。 只有在 other 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 IEqualityComparer..::.Equals 实现可以成功强制转换（在 C# 中）或转换（在 Visual Basic 中）为具有与当前实例类型相同、总数相同的组件（包括嵌套的 Tuple 对象中的组件）的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象时，才调用该实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Item1 值传递到 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对值时返回 false 或者两个 Rest 值传递给该方法为止。 只有在 other 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），且 IEqualityComparer..::.Equals 实现可以成功强制转换（在 C# 中）或转换（在 Visual Basic 中）为具有与当前实例类型相同、总数相同的组件（包括嵌套的 Tuple 对象中的组件）的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象时，才调用该实现。IStructuralEquatable..::.Equals(Object, IEqualityComparer) 方法首先将要比较的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Item1 值传递到 IEqualityComparer..::.Equals 实现。如果此方法调用返回 true，则该方法再次被调用，并传递两个 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Item2 值。这将一直继续，直到方法调用在比较特定的一对值时返回 false 或者两个 Rest 值传递给该方法为止。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.IStructuralEquatable ..::.GetHashCode 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
IStructuralEquatable
.
.
::
.
GetHashCode 方法
Tuple

使用指定的计算方法计算当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer Implements IStructuralEquatable.GetHashCode
int IStructuralEquatable.GetHashCode(
    IEqualityComparer comparer
)
private:
virtual int GetHashCode(
    IEqualityComparer^ comparer
) sealed = IStructuralEquatable::GetHashCode
private abstract GetHashCode :
        comparer:IEqualityComparer -> int
private override GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个对象，其 IEqualityComparer..::.GetHashCode 方法计算当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的哈希代码。

返回值

类型： System Int32
32 位带符号整数哈希代码。

实现

此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。 此成员是显式的接口成员实现。只能在 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 实例强制转换为 IStructuralEquatable 接口时使用它。

该方法只是包装对 comparer 对象的 IEqualityComparer..::.GetHashCode 实现的调用。

对于两个视为相等 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 的对象，用于计算哈希代码的算法应当返回相同的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.ToString 方法

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
ToString 方法
Tuple

返回一个字符串，该字符串表示此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 实例的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的字符串表示形式。

此方法返回的字符串采用以下格式 (Item1, Item2, Item3, Item4, Item5, Item6, Item7, Item8…)，其中 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 表示 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 属性的值。Item8 表示 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Next.Item1 属性的值。任何附加的嵌套组件的值都跟在 Item8 后面。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。 此方法返回的字符串采用以下格式 (Item1, Item2, Item3, Item4, Item5, Item6, Item7, Item8…)，其中 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 表示 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 属性的值。Item8 表示 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Next.Item1 属性的值。任何附加的嵌套组件的值都跟在 Item8 后面。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。 此方法返回的字符串采用以下格式 (Item1, Item2, Item3, Item4, Item5, Item6, Item7, Item8…)，其中 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 表示 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 属性的值。Item8 表示 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Next.Item1 属性的值。任何附加的嵌套组件的值都跟在 Item8 后面。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。 此方法返回的字符串采用以下格式 (Item1, Item2, Item3, Item4, Item5, Item6, Item7, Item8…)，其中 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 表示 Item1、Item2、Item3、Item4、Item5、Item6 和 Item7 属性的值。Item8 表示 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Next.Item1 属性的值。任何附加的嵌套组件的值都跟在 Item8 后面。如有任何属性值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该属性表示为 String..::.Empty。

下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 1900 年的人口数据。然后，它使用 ToString 方法显示元组的数据。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 1900 年的人口数据。然后，它使用 ToString 方法显示元组的数据。

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        Console.WriteLine(population.ToString())
    End Sub
End Module
' The example displays the following output:
'   (Detroit, 1860, 45619, 79577, 116340, 205876, 285704, 465766, 993078,
'    1568622, 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270)

using System;

class Example
{
    static void Main(string[] args)
    {
        Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
        var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
        var population = new Tuple<string, int, int, int, int, int, int,
            Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

        Console.WriteLine(population.ToString());
    }

    private static void ShowPopulationChange(int year, int newPopulation, int oldPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          ((double)(newPopulation - oldPopulation) / oldPopulation) / 10);
    }

    private static void ShowPopulation(int year, int newPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a");
    }
}
// The example displays the following output:
//   (Detroit, 1860, 45619, 79577, 116340, 205876, 285704, 465766, 993078,
//    1568622, 1623452, 1849568, 1670144, 1511462, 1203339, 1027974, 951270)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Tuple

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类型公开以下成员。

名称 说明
页首

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.Item1 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
Item1 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第一个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item1 As T1
    Get
public T1 Item1 { get; }
public:
property T1 Item1 {
    T1 get ();
}
member Item1 : 'T1

属性值

类型： T1
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第一个分量的值。

您可以通过以下两种方式之一动态确定 Item1 组件的类型：

  • 对 GetType 属性所返回的值调用 Item1 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第一个元素。

下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第一个组件为城市名。本示例使用 Item1 属性，在显示人口数据之前在表标头中显示城市名称。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第一个组件为城市名。本示例使用 Item1 属性，在显示人口数据之前在表标头中显示城市名称。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第一个组件为城市名。本示例使用 Item1 属性，在显示人口数据之前在表标头中显示城市名称。

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        Console.WriteLine("Population of {0}", population.Item1)
        Console.WriteLine()
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change")

        Dim year As Integer = population.Item2
        ShowPopulation(year, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item4, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item5, population.Item4)
        year += 10
        ShowPopulationChange(year, population.Item6, population.Item5)
        year += 10
        ShowPopulationChange(year, population.Item7, population.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Item1, population.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2)
        year += 10
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3)
        year += 10
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4)
        year += 10
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5)
        year += 10
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2)
    End Sub

    Private Sub ShowPopulationChange(ByVal year As Integer, ByVal newPopulation As Integer, ByVal oldPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          (newPopulation - oldPopulation) / oldPopulation / 10)
    End Sub

    Private Sub ShowPopulation(ByVal year As Integer, ByVal newPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a")
    End Sub
End Module
' The example displays the following output:
'
'    Population of Detroit
'    Year      Population      Change
'    1860          45,619         n/a
'    1870          79,577      7.44 %
'    1880         116,340      4.62 %
'    1890         205,876      7.70 %
'    1900         285,704      3.88 %
'    1910         465,766      6.30 %
'    1920         993,078     11.32 %
'    1930       1,568,622      5.80 %
'    1940       1,623,452      0.35 %
'    1950       1,849,568      1.39 %
'    1960       1,670,144     -0.97 %
'    1970       1,511,462     -0.95 %
'    1980       1,203,339     -2.04 %
'    1990       1,027,974     -1.46 %
'    2000         951,270     -0.75 %

using System;

class Example
{
    static void Main(string[] args)
    {
        Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
        var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
        var population = new Tuple<string, int, int, int, int, int, int,
            Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

        Console.WriteLine("Population of {0}", population.Item1);
        Console.WriteLine();
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change");

        int year = population.Item2;
        ShowPopulation(year, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item4, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item5, population.Item4);
        year += 10;
        ShowPopulationChange(year, population.Item6, population.Item5);
        year += 10;
        ShowPopulationChange(year, population.Item7, population.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item1, population.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2);
    }

    private static void ShowPopulationChange(int year, int newPopulation, int oldPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          ((double)(newPopulation - oldPopulation) / oldPopulation) / 10);
    }

    private static void ShowPopulation(int year, int newPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a");
    }
}
// The example displays the following output:
//
//    Population of Detroit
//    Year      Population      Change
//    1860          45,619         n/a
//    1870          79,577      7.44 %
//    1880         116,340      4.62 %
//    1890         205,876      7.70 %
//    1900         285,704      3.88 %
//    1910         465,766      6.30 %
//    1920         993,078     11.32 %
//    1930       1,568,622      5.80 %
//    1940       1,623,452      0.35 %
//    1950       1,849,568      1.39 %
//    1960       1,670,144     -0.97 %
//    1970       1,511,462     -0.95 %
//    1980       1,203,339     -2.04 %
//    1990       1,027,974     -1.46 %
//    2000         951,270     -0.75 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.Item2 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
Item2 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第二个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item2 As T2
    Get
public T2 Item2 { get; }
public:
property T2 Item2 {
    T2 get ();
}
member Item2 : 'T2

属性值

类型： T2
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第二个分量的值。

您可以通过以下两种方式之一动态确定 Item2 组件的类型：

  • 对 GetType 属性所返回的值调用 Item2 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第二个元素。

下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第二个组件为该数据序列的第一年。本示例将 Item2 属性的值赋给一个变量，然后使用该变量表示显示数据的年份。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第二个组件为该数据序列的第一年。本示例将 Item2 属性的值赋给一个变量，然后使用该变量表示显示数据的年份。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第二个组件为该数据序列的第一年。本示例将 Item2 属性的值赋给一个变量，然后使用该变量表示显示数据的年份。

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        Console.WriteLine("Population of {0}", population.Item1)
        Console.WriteLine()
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change")

        Dim year As Integer = population.Item2
        ShowPopulation(year, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item4, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item5, population.Item4)
        year += 10
        ShowPopulationChange(year, population.Item6, population.Item5)
        year += 10
        ShowPopulationChange(year, population.Item7, population.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Item1, population.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2)
        year += 10
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3)
        year += 10
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4)
        year += 10
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5)
        year += 10
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2)
    End Sub

    Private Sub ShowPopulationChange(ByVal year As Integer, ByVal newPopulation As Integer, ByVal oldPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          (newPopulation - oldPopulation) / oldPopulation / 10)
    End Sub

    Private Sub ShowPopulation(ByVal year As Integer, ByVal newPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a")
    End Sub
End Module
' The example displays the following output:
'
'    Population of Detroit
'    Year      Population      Change
'    1860          45,619         n/a
'    1870          79,577      7.44 %
'    1880         116,340      4.62 %
'    1890         205,876      7.70 %
'    1900         285,704      3.88 %
'    1910         465,766      6.30 %
'    1920         993,078     11.32 %
'    1930       1,568,622      5.80 %
'    1940       1,623,452      0.35 %
'    1950       1,849,568      1.39 %
'    1960       1,670,144     -0.97 %
'    1970       1,511,462     -0.95 %
'    1980       1,203,339     -2.04 %
'    1990       1,027,974     -1.46 %
'    2000         951,270     -0.75 %

using System;

class Example
{
    static void Main(string[] args)
    {
        Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
        var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
        var population = new Tuple<string, int, int, int, int, int, int,
            Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

        Console.WriteLine("Population of {0}", population.Item1);
        Console.WriteLine();
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change");

        int year = population.Item2;
        ShowPopulation(year, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item4, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item5, population.Item4);
        year += 10;
        ShowPopulationChange(year, population.Item6, population.Item5);
        year += 10;
        ShowPopulationChange(year, population.Item7, population.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item1, population.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2);
    }

    private static void ShowPopulationChange(int year, int newPopulation, int oldPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          ((double)(newPopulation - oldPopulation) / oldPopulation) / 10);
    }

    private static void ShowPopulation(int year, int newPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a");
    }
}
// The example displays the following output:
//
//    Population of Detroit
//    Year      Population      Change
//    1860          45,619         n/a
//    1870          79,577      7.44 %
//    1880         116,340      4.62 %
//    1890         205,876      7.70 %
//    1900         285,704      3.88 %
//    1910         465,766      6.30 %
//    1920         993,078     11.32 %
//    1930       1,568,622      5.80 %
//    1940       1,623,452      0.35 %
//    1950       1,849,568      1.39 %
//    1960       1,670,144     -0.97 %
//    1970       1,511,462     -0.95 %
//    1980       1,203,339     -2.04 %
//    1990       1,027,974     -1.46 %
//    2000         951,270     -0.75 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.Item3 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
Item3 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第三个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item3 As T3
    Get
public T3 Item3 { get; }
public:
property T3 Item3 {
    T3 get ();
}
member Item3 : 'T3

属性值

类型： T3
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第三个分量的值。

您可以通过以下两种方式之一动态确定 Item3 组件的类型：

  • 对 GetType 属性所返回的值调用 Item3 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第三个元素。

下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第三个组件为 1860 年中的人口。该示例使用 Item3 属性，以显示人口值，及计算 1860 年到 1870 年之间的人口年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第三个组件为 1860 年中的人口。该示例使用 Item3 属性，以显示人口值，及计算 1860 年到 1870 年之间的人口年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第三个组件为 1860 年中的人口。该示例使用 Item3 属性，以显示人口值，及计算 1860 年到 1870 年之间的人口年变化率。

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        Console.WriteLine("Population of {0}", population.Item1)
        Console.WriteLine()
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change")

        Dim year As Integer = population.Item2
        ShowPopulation(year, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item4, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item5, population.Item4)
        year += 10
        ShowPopulationChange(year, population.Item6, population.Item5)
        year += 10
        ShowPopulationChange(year, population.Item7, population.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Item1, population.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2)
        year += 10
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3)
        year += 10
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4)
        year += 10
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5)
        year += 10
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2)
    End Sub

    Private Sub ShowPopulationChange(ByVal year As Integer, ByVal newPopulation As Integer, ByVal oldPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          (newPopulation - oldPopulation) / oldPopulation / 10)
    End Sub

    Private Sub ShowPopulation(ByVal year As Integer, ByVal newPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a")
    End Sub
End Module
' The example displays the following output:
'
'    Population of Detroit
'    Year      Population      Change
'    1860          45,619         n/a
'    1870          79,577      7.44 %
'    1880         116,340      4.62 %
'    1890         205,876      7.70 %
'    1900         285,704      3.88 %
'    1910         465,766      6.30 %
'    1920         993,078     11.32 %
'    1930       1,568,622      5.80 %
'    1940       1,623,452      0.35 %
'    1950       1,849,568      1.39 %
'    1960       1,670,144     -0.97 %
'    1970       1,511,462     -0.95 %
'    1980       1,203,339     -2.04 %
'    1990       1,027,974     -1.46 %
'    2000         951,270     -0.75 %

using System;

class Example
{
    static void Main(string[] args)
    {
        Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
        var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
        var population = new Tuple<string, int, int, int, int, int, int,
            Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

        Console.WriteLine("Population of {0}", population.Item1);
        Console.WriteLine();
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change");

        int year = population.Item2;
        ShowPopulation(year, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item4, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item5, population.Item4);
        year += 10;
        ShowPopulationChange(year, population.Item6, population.Item5);
        year += 10;
        ShowPopulationChange(year, population.Item7, population.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item1, population.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2);
    }

    private static void ShowPopulationChange(int year, int newPopulation, int oldPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          ((double)(newPopulation - oldPopulation) / oldPopulation) / 10);
    }

    private static void ShowPopulation(int year, int newPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a");
    }
}
// The example displays the following output:
//
//    Population of Detroit
//    Year      Population      Change
//    1860          45,619         n/a
//    1870          79,577      7.44 %
//    1880         116,340      4.62 %
//    1890         205,876      7.70 %
//    1900         285,704      3.88 %
//    1910         465,766      6.30 %
//    1920         993,078     11.32 %
//    1930       1,568,622      5.80 %
//    1940       1,623,452      0.35 %
//    1950       1,849,568      1.39 %
//    1960       1,670,144     -0.97 %
//    1970       1,511,462     -0.95 %
//    1980       1,203,339     -2.04 %
//    1990       1,027,974     -1.46 %
//    2000         951,270     -0.75 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.Item4 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
Item4 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第四个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item4 As T4
    Get
public T4 Item4 { get; }
public:
property T4 Item4 {
    T4 get ();
}
member Item4 : 'T4

属性值

类型： T4
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第四个分量的值。

您可以通过以下两种方式之一动态确定 Item4 组件的类型：

  • 对 GetType 属性所返回的值调用 Item4 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第四个元素。

下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第四个组件为 1870 年的人口。该示例使用 Item4 属性，以显示人口值，及计算 1870 年到 1880 年之间的人口年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第四个组件为 1870 年的人口。该示例使用 Item4 属性，以显示人口值，及计算 1870 年到 1880 年之间的人口年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第四个组件为 1870 年的人口。该示例使用 Item4 属性，以显示人口值，及计算 1870 年到 1880 年之间的人口年变化率。

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        Console.WriteLine("Population of {0}", population.Item1)
        Console.WriteLine()
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change")

        Dim year As Integer = population.Item2
        ShowPopulation(year, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item4, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item5, population.Item4)
        year += 10
        ShowPopulationChange(year, population.Item6, population.Item5)
        year += 10
        ShowPopulationChange(year, population.Item7, population.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Item1, population.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2)
        year += 10
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3)
        year += 10
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4)
        year += 10
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5)
        year += 10
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2)
    End Sub

    Private Sub ShowPopulationChange(ByVal year As Integer, ByVal newPopulation As Integer, ByVal oldPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          (newPopulation - oldPopulation) / oldPopulation / 10)
    End Sub

    Private Sub ShowPopulation(ByVal year As Integer, ByVal newPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a")
    End Sub
End Module
' The example displays the following output:
'
'    Population of Detroit
'    Year      Population      Change
'    1860          45,619         n/a
'    1870          79,577      7.44 %
'    1880         116,340      4.62 %
'    1890         205,876      7.70 %
'    1900         285,704      3.88 %
'    1910         465,766      6.30 %
'    1920         993,078     11.32 %
'    1930       1,568,622      5.80 %
'    1940       1,623,452      0.35 %
'    1950       1,849,568      1.39 %
'    1960       1,670,144     -0.97 %
'    1970       1,511,462     -0.95 %
'    1980       1,203,339     -2.04 %
'    1990       1,027,974     -1.46 %
'    2000         951,270     -0.75 %

using System;

class Example
{
    static void Main(string[] args)
    {
        Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
        var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
        var population = new Tuple<string, int, int, int, int, int, int,
            Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

        Console.WriteLine("Population of {0}", population.Item1);
        Console.WriteLine();
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change");

        int year = population.Item2;
        ShowPopulation(year, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item4, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item5, population.Item4);
        year += 10;
        ShowPopulationChange(year, population.Item6, population.Item5);
        year += 10;
        ShowPopulationChange(year, population.Item7, population.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item1, population.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2);
    }

    private static void ShowPopulationChange(int year, int newPopulation, int oldPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          ((double)(newPopulation - oldPopulation) / oldPopulation) / 10);
    }

    private static void ShowPopulation(int year, int newPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a");
    }
}
// The example displays the following output:
//
//    Population of Detroit
//    Year      Population      Change
//    1860          45,619         n/a
//    1870          79,577      7.44 %
//    1880         116,340      4.62 %
//    1890         205,876      7.70 %
//    1900         285,704      3.88 %
//    1910         465,766      6.30 %
//    1920         993,078     11.32 %
//    1930       1,568,622      5.80 %
//    1940       1,623,452      0.35 %
//    1950       1,849,568      1.39 %
//    1960       1,670,144     -0.97 %
//    1970       1,511,462     -0.95 %
//    1980       1,203,339     -2.04 %
//    1990       1,027,974     -1.46 %
//    2000         951,270     -0.75 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.Item5 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
Item5 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第五个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item5 As T5
    Get
public T5 Item5 { get; }
public:
property T5 Item5 {
    T5 get ();
}
member Item5 : 'T5

属性值

类型： T5
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第五个分量的值。

可以通过以下两种方式之一来动态确定 Item5 组件的类型：

  • 对 GetType 属性所返回的值调用 Item5 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第五个元素。

下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第五个组件为 1880 年中的人口。该示例使用 Item5 属性，以显示人口值，及计算 1880 年到 1890 年之间人口的年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第五个组件为 1880 年中的人口。该示例使用 Item5 属性，以显示人口值，及计算 1880 年到 1890 年之间人口的年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第五个组件为 1880 年中的人口。该示例使用 Item5 属性，以显示人口值，及计算 1880 年到 1890 年之间人口的年变化率。

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        Console.WriteLine("Population of {0}", population.Item1)
        Console.WriteLine()
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change")

        Dim year As Integer = population.Item2
        ShowPopulation(year, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item4, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item5, population.Item4)
        year += 10
        ShowPopulationChange(year, population.Item6, population.Item5)
        year += 10
        ShowPopulationChange(year, population.Item7, population.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Item1, population.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2)
        year += 10
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3)
        year += 10
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4)
        year += 10
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5)
        year += 10
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2)
    End Sub

    Private Sub ShowPopulationChange(ByVal year As Integer, ByVal newPopulation As Integer, ByVal oldPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          (newPopulation - oldPopulation) / oldPopulation / 10)
    End Sub

    Private Sub ShowPopulation(ByVal year As Integer, ByVal newPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a")
    End Sub
End Module
' The example displays the following output:
'
'    Population of Detroit
'    Year      Population      Change
'    1860          45,619         n/a
'    1870          79,577      7.44 %
'    1880         116,340      4.62 %
'    1890         205,876      7.70 %
'    1900         285,704      3.88 %
'    1910         465,766      6.30 %
'    1920         993,078     11.32 %
'    1930       1,568,622      5.80 %
'    1940       1,623,452      0.35 %
'    1950       1,849,568      1.39 %
'    1960       1,670,144     -0.97 %
'    1970       1,511,462     -0.95 %
'    1980       1,203,339     -2.04 %
'    1990       1,027,974     -1.46 %
'    2000         951,270     -0.75 %

using System;

class Example
{
    static void Main(string[] args)
    {
        Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
        var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
        var population = new Tuple<string, int, int, int, int, int, int,
            Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

        Console.WriteLine("Population of {0}", population.Item1);
        Console.WriteLine();
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change");

        int year = population.Item2;
        ShowPopulation(year, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item4, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item5, population.Item4);
        year += 10;
        ShowPopulationChange(year, population.Item6, population.Item5);
        year += 10;
        ShowPopulationChange(year, population.Item7, population.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item1, population.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2);
    }

    private static void ShowPopulationChange(int year, int newPopulation, int oldPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          ((double)(newPopulation - oldPopulation) / oldPopulation) / 10);
    }

    private static void ShowPopulation(int year, int newPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a");
    }
}
// The example displays the following output:
//
//    Population of Detroit
//    Year      Population      Change
//    1860          45,619         n/a
//    1870          79,577      7.44 %
//    1880         116,340      4.62 %
//    1890         205,876      7.70 %
//    1900         285,704      3.88 %
//    1910         465,766      6.30 %
//    1920         993,078     11.32 %
//    1930       1,568,622      5.80 %
//    1940       1,623,452      0.35 %
//    1950       1,849,568      1.39 %
//    1960       1,670,144     -0.97 %
//    1970       1,511,462     -0.95 %
//    1980       1,203,339     -2.04 %
//    1990       1,027,974     -1.46 %
//    2000         951,270     -0.75 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.Item6 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
Item6 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第六个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item6 As T6
    Get
public T6 Item6 { get; }
public:
property T6 Item6 {
    T6 get ();
}
member Item6 : 'T6

属性值

类型： T6
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第六个分量的值。

可以通过以下两种方式之一来动态确定 Item6 组件的类型：

  • 对 GetType 属性所返回的值调用 Item6 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第六个元素。

下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该十七元组的第六个组件为 1890 年中的人口。该示例使用 Item6 属性，以显示人口值，及计算 1890 年到 1900 年之间人口的年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该十七元组的第六个组件为 1890 年中的人口。该示例使用 Item6 属性，以显示人口值，及计算 1890 年到 1900 年之间人口的年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该十七元组的第六个组件为 1890 年中的人口。该示例使用 Item6 属性，以显示人口值，及计算 1890 年到 1900 年之间人口的年变化率。

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        Console.WriteLine("Population of {0}", population.Item1)
        Console.WriteLine()
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change")

        Dim year As Integer = population.Item2
        ShowPopulation(year, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item4, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item5, population.Item4)
        year += 10
        ShowPopulationChange(year, population.Item6, population.Item5)
        year += 10
        ShowPopulationChange(year, population.Item7, population.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Item1, population.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2)
        year += 10
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3)
        year += 10
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4)
        year += 10
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5)
        year += 10
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2)
    End Sub

    Private Sub ShowPopulationChange(ByVal year As Integer, ByVal newPopulation As Integer, ByVal oldPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          (newPopulation - oldPopulation) / oldPopulation / 10)
    End Sub

    Private Sub ShowPopulation(ByVal year As Integer, ByVal newPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a")
    End Sub
End Module
' The example displays the following output:
'
'    Population of Detroit
'    Year      Population      Change
'    1860          45,619         n/a
'    1870          79,577      7.44 %
'    1880         116,340      4.62 %
'    1890         205,876      7.70 %
'    1900         285,704      3.88 %
'    1910         465,766      6.30 %
'    1920         993,078     11.32 %
'    1930       1,568,622      5.80 %
'    1940       1,623,452      0.35 %
'    1950       1,849,568      1.39 %
'    1960       1,670,144     -0.97 %
'    1970       1,511,462     -0.95 %
'    1980       1,203,339     -2.04 %
'    1990       1,027,974     -1.46 %
'    2000         951,270     -0.75 %

using System;

class Example
{
    static void Main(string[] args)
    {
        Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
        var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
        var population = new Tuple<string, int, int, int, int, int, int,
            Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

        Console.WriteLine("Population of {0}", population.Item1);
        Console.WriteLine();
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change");

        int year = population.Item2;
        ShowPopulation(year, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item4, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item5, population.Item4);
        year += 10;
        ShowPopulationChange(year, population.Item6, population.Item5);
        year += 10;
        ShowPopulationChange(year, population.Item7, population.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item1, population.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2);
    }

    private static void ShowPopulationChange(int year, int newPopulation, int oldPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          ((double)(newPopulation - oldPopulation) / oldPopulation) / 10);
    }

    private static void ShowPopulation(int year, int newPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a");
    }
}
// The example displays the following output:
//
//    Population of Detroit
//    Year      Population      Change
//    1860          45,619         n/a
//    1870          79,577      7.44 %
//    1880         116,340      4.62 %
//    1890         205,876      7.70 %
//    1900         285,704      3.88 %
//    1910         465,766      6.30 %
//    1920         993,078     11.32 %
//    1930       1,568,622      5.80 %
//    1940       1,623,452      0.35 %
//    1950       1,849,568      1.39 %
//    1960       1,670,144     -0.97 %
//    1970       1,511,462     -0.95 %
//    1980       1,203,339     -2.04 %
//    1990       1,027,974     -1.46 %
//    2000         951,270     -0.75 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.Item7 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
Item7 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第七个分量的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Item7 As T7
    Get
public T7 Item7 { get; }
public:
property T7 Item7 {
    T7 get ();
}
member Item7 : 'T7

属性值

类型： T7
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的第七个分量的值。

可以通过以下两种方式之一来动态确定 Item7 组件的类型：

  • 对 GetType 属性所返回的值调用 Item7 方法。

  • 通过检索代表 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Type 对象，以及从其 Type..::.GetGenericArguments 方法返回的数组中检索第七个元素。

下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第七个组件为 1900 年的人口。该示例使用 Item7 属性，以显示人口值，及计算 1900 年到 1910 年之间人口的年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第七个组件为 1900 年的人口。该示例使用 Item7 属性，以显示人口值，及计算 1900 年到 1910 年之间人口的年变化率。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第七个组件为 1900 年的人口。该示例使用 Item7 属性，以显示人口值，及计算 1900 年到 1910 年之间人口的年变化率。

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        Console.WriteLine("Population of {0}", population.Item1)
        Console.WriteLine()
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change")

        Dim year As Integer = population.Item2
        ShowPopulation(year, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item4, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item5, population.Item4)
        year += 10
        ShowPopulationChange(year, population.Item6, population.Item5)
        year += 10
        ShowPopulationChange(year, population.Item7, population.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Item1, population.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2)
        year += 10
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3)
        year += 10
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4)
        year += 10
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5)
        year += 10
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2)
    End Sub

    Private Sub ShowPopulationChange(ByVal year As Integer, ByVal newPopulation As Integer, ByVal oldPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          (newPopulation - oldPopulation) / oldPopulation / 10)
    End Sub

    Private Sub ShowPopulation(ByVal year As Integer, ByVal newPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a")
    End Sub
End Module
' The example displays the following output:
'
'    Population of Detroit
'    Year      Population      Change
'    1860          45,619         n/a
'    1870          79,577      7.44 %
'    1880         116,340      4.62 %
'    1890         205,876      7.70 %
'    1900         285,704      3.88 %
'    1910         465,766      6.30 %
'    1920         993,078     11.32 %
'    1930       1,568,622      5.80 %
'    1940       1,623,452      0.35 %
'    1950       1,849,568      1.39 %
'    1960       1,670,144     -0.97 %
'    1970       1,511,462     -0.95 %
'    1980       1,203,339     -2.04 %
'    1990       1,027,974     -1.46 %
'    2000         951,270     -0.75 %

using System;

class Example
{
    static void Main(string[] args)
    {
        Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
        var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
        var population = new Tuple<string, int, int, int, int, int, int,
            Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

        Console.WriteLine("Population of {0}", population.Item1);
        Console.WriteLine();
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change");

        int year = population.Item2;
        ShowPopulation(year, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item4, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item5, population.Item4);
        year += 10;
        ShowPopulationChange(year, population.Item6, population.Item5);
        year += 10;
        ShowPopulationChange(year, population.Item7, population.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item1, population.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2);
    }

    private static void ShowPopulationChange(int year, int newPopulation, int oldPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          ((double)(newPopulation - oldPopulation) / oldPopulation) / 10);
    }

    private static void ShowPopulation(int year, int newPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a");
    }
}
// The example displays the following output:
//
//    Population of Detroit
//    Year      Population      Change
//    1860          45,619         n/a
//    1870          79,577      7.44 %
//    1880         116,340      4.62 %
//    1890         205,876      7.70 %
//    1900         285,704      3.88 %
//    1910         465,766      6.30 %
//    1920         993,078     11.32 %
//    1930       1,568,622      5.80 %
//    1940       1,623,452      0.35 %
//    1950       1,849,568      1.39 %
//    1960       1,670,144     -0.97 %
//    1970       1,511,462     -0.95 %
//    1980       1,203,339     -2.04 %
//    1990       1,027,974     -1.46 %
//    2000         951,270     -0.75 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Tuple <(Of <(T1, T2, T3, T4, T5, T6, T7, TRest >)>) ..::.Rest 属性

Tuple
<
(Of
<
(
T1, T2, T3, T4, T5, T6, T7, TRest
>
)
>
)
.
.
::
.
Rest 属性
Tuple

获取当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的剩余分量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Rest As TRest
    Get
public TRest Rest { get; }
public:
property TRest Rest {
    TRest get ();
}
member Rest : 'TRest

属性值

类型： TRest
当前 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的剩余分量的值。

Rest 属性返回嵌套的 Tuple 对象，该对象允许访问元组的第八到 n 个组件。根据元组中的组件总数目，可以通过 Item7 属性从嵌套的 Tuple 对象的 Item1 检索第八到十四个组件的值。然后，可以使用嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 的 Rest 属性检索下一层嵌套的 Tuple 对象。 Rest 属性返回嵌套的 Tuple 对象，该对象允许访问元组的第八到 n 个组件。根据元组中的组件总数目，可以通过 Item7 属性从嵌套的 Tuple 对象的 Item1 检索第八到十四个组件的值。然后，可以使用嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 的 Rest 属性检索下一层嵌套的 Tuple 对象。 Rest 属性返回嵌套的 Tuple 对象，该对象允许访问元组的第八到 n 个组件。根据元组中的组件总数目，可以通过 Item7 属性从嵌套的 Tuple 对象的 Item1 检索第八到十四个组件的值。然后，可以使用嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 的 Rest 属性检索下一层嵌套的 Tuple 对象。

通过从 Rest 属性返回的嵌套 Tuple 对象的类型名称中提取数字，可以动态确定该对象中的组件数。下面的示例进行了这方面的演示。 通过从 Rest 属性返回的嵌套 Tuple 对象的类型名称中提取数字，可以动态确定该对象中的组件数。下面的示例进行了这方面的演示。

Imports System.Reflection

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        ShowComponentCount(population)
   End Sub

   Private Sub ShowComponentCount(tuple As Object)
      Static ctr As Integer = 0
      Static totalComponents As Integer = 0
      Dim components As Integer = 0

      ctr += 1
      Dim name As String = tuple.GetType().Name
      components += Int32.Parse(name.Substring(name.IndexOf("`") + 1))
      If components = 8 Then
         totalComponents += 7
         Console.WriteLine("The tuple at level {0} has 7 components.", ctr)
         ShowComponentCount(tuple.Rest)
      Else
         totalComponents += components
         Console.WriteLine("The tuple at level {0} has {1} components.",
                           ctr, components)
         Console.WriteLine("Total components in tuple: {0}", totalComponents)
      End If
   End Sub
End Module
' The example displays the following output:
'       The tuple at level 1 has 7 components.
'       The tuple at level 2 has 7 components.
'       The tuple at level 3 has 3 components.
'       Total components in tuple: 17

下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第七个组件为 1900 年的人口。该示例使用 Rest 属性，以检索从第八个组件到第十四个组件的值，并且其使用嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Rest 属性以检索其余组件的值。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第七个组件为 1900 年的人口。该示例使用 Rest 属性，以检索从第八个组件到第十四个组件的值，并且其使用嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Rest 属性以检索其余组件的值。 下面的示例创建一个 17 元组对象，该对象包含密歇根州底特律从 1860 年到 2000 年的人口数据。该 17 元组的第七个组件为 1900 年的人口。该示例使用 Rest 属性，以检索从第八个组件到第十四个组件的值，并且其使用嵌套的 Tuple<(Of <(T1, T2, T3, T4, T5, T6, T7, TRest>)>) 对象的 Rest 属性以检索其余组件的值。

Module Example
    Sub Main()
        Dim from1980 As Tuple(Of Integer, Integer, Integer) =
            Tuple.Create(1203339, 1027974, 951270)
        Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer)) _
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
        Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer, _
            Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

        Console.WriteLine("Population of {0}", population.Item1)
        Console.WriteLine()
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change")

        Dim year As Integer = population.Item2
        ShowPopulation(year, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item4, population.Item3)
        year += 10
        ShowPopulationChange(year, population.Item5, population.Item4)
        year += 10
        ShowPopulationChange(year, population.Item6, population.Item5)
        year += 10
        ShowPopulationChange(year, population.Item7, population.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Item1, population.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2)
        year += 10
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3)
        year += 10
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4)
        year += 10
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5)
        year += 10
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1)
        year += 10
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2)
    End Sub

    Private Sub ShowPopulationChange(ByVal year As Integer, ByVal newPopulation As Integer, ByVal oldPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          (newPopulation - oldPopulation) / oldPopulation / 10)
    End Sub

    Private Sub ShowPopulation(ByVal year As Integer, ByVal newPopulation As Integer)
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a")
    End Sub
End Module
' The example displays the following output:
'
'    Population of Detroit
'    Year      Population      Change
'    1860          45,619         n/a
'    1870          79,577      7.44 %
'    1880         116,340      4.62 %
'    1890         205,876      7.70 %
'    1900         285,704      3.88 %
'    1910         465,766      6.30 %
'    1920         993,078     11.32 %
'    1930       1,568,622      5.80 %
'    1940       1,623,452      0.35 %
'    1950       1,849,568      1.39 %
'    1960       1,670,144     -0.97 %
'    1970       1,511,462     -0.95 %
'    1980       1,203,339     -2.04 %
'    1990       1,027,974     -1.46 %
'    2000         951,270     -0.75 %

using System;

class Example
{
    static void Main(string[] args)
    {
        Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
        var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
            (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
        var population = new Tuple<string, int, int, int, int, int, int,
            Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
            ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

        Console.WriteLine("Population of {0}", population.Item1);
        Console.WriteLine();
        Console.WriteLine("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change");

        int year = population.Item2;
        ShowPopulation(year, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item4, population.Item3);
        year += 10;
        ShowPopulationChange(year, population.Item5, population.Item4);
        year += 10;
        ShowPopulationChange(year, population.Item6, population.Item5);
        year += 10;
        ShowPopulationChange(year, population.Item7, population.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item1, population.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item2, population.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item3, population.Rest.Item2);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item4, population.Rest.Item3);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item5, population.Rest.Item4);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item6, population.Rest.Item5);
        year += 10;
        ShowPopulationChange(year, population.Rest.Item7, population.Rest.Item6);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item1, population.Rest.Item7);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item2, population.Rest.Rest.Item1);
        year += 10;
        ShowPopulationChange(year, population.Rest.Rest.Item3, population.Rest.Rest.Item2);
    }

    private static void ShowPopulationChange(int year, int newPopulation, int oldPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                          ((double)(newPopulation - oldPopulation) / oldPopulation) / 10);
    }

    private static void ShowPopulation(int year, int newPopulation)
    {
        Console.WriteLine("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a");
    }
}
// The example displays the following output:
//
//    Population of Detroit
//    Year      Population      Change
//    1860          45,619         n/a
//    1870          79,577      7.44 %
//    1880         116,340      4.62 %
//    1890         205,876      7.70 %
//    1900         285,704      3.88 %
//    1910         465,766      6.30 %
//    1920         993,078     11.32 %
//    1930       1,568,622      5.80 %
//    1940       1,623,452      0.35 %
//    1950       1,849,568      1.39 %
//    1960       1,670,144     -0.97 %
//    1970       1,511,462     -0.95 %
//    1980       1,203,339     -2.04 %
//    1990       1,027,974     -1.46 %
//    2000         951,270     -0.75 %

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Tuple T1, T2, T3, T4, T5, T6, T7, TRest 类
Tuple T1, T2, T3, T4, T5, T6, T7, TRest 成员
System 命名空间


Type 类

Type 类
成员

表示类型声明：类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义，以及开放或封闭构造的泛型类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public MustInherit Class Type _
    Inherits MemberInfo _
    Implements _Type, IReflect
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public abstract class Type : MemberInfo,
    _Type, IReflect
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
public ref class Type abstract : public MemberInfo,
    _Type, IReflect
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
[<ClassInterfaceAttribute(ClassInterfaceType.None)>]
type Type =
    class
        inherit MemberInfo
        interface _Type
        interface IReflect
    end

Type 为 System.Reflection 功能的根，也是访问元数据的主要方式。使用 Type 的成员获取关于类型声明的信息，如构造函数、方法、字段、属性和类的事件，以及在其中部署该类的模块和程序集。 Type 为 System.Reflection 功能的根，也是访问元数据的主要方式。使用 Type 的成员获取关于类型声明的信息，如构造函数、方法、字段、属性和类的事件，以及在其中部署该类的模块和程序集。

C# typeof 运算符（在 Visual Basic 中为 GetType 运算符，在 Visual C++ 中为 typeid 运算符）返回一个 Type 对象。

表示某个类型是唯一的 Type 对象；即，两个 Type 对象引用当且仅当它们表示相同的类型时，才引用相同的对象。这允许使用参考等式来比较 Type 对象。 表示某个类型是唯一的 Type 对象；即，两个 Type 对象引用当且仅当它们表示相同的类型时，才引用相同的对象。这允许使用参考等式来比较 Type 对象。

代码无需权限即可使用反射获取有关类型及其成员的信息（无论其访问级别如何）。代码无需权限即可使用反射访问公共成员，或其访问级别使其在常规编译过程中可见的其他成员。但是，为了您的代码能够使用反射来访问通常不可访问的成员（如专用方法或内部方法）或您的类不继承的类型的受保护字段，您的代码必须具有 ReflectionPermission。请参见 反射的安全注意事项。 代码无需权限即可使用反射获取有关类型及其成员的信息（无论其访问级别如何）。代码无需权限即可使用反射访问公共成员，或其访问级别使其在常规编译过程中可见的其他成员。但是，为了您的代码能够使用反射来访问通常不可访问的成员（如专用方法或内部方法）或您的类不继承的类型的受保护字段，您的代码必须具有 ReflectionPermission。请参见 反射的安全注意事项。 代码无需权限即可使用反射获取有关类型及其成员的信息（无论其访问级别如何）。代码无需权限即可使用反射访问公共成员，或其访问级别使其在常规编译过程中可见的其他成员。但是，为了您的代码能够使用反射来访问通常不可访问的成员（如专用方法或内部方法）或您的类不继承的类型的受保护字段，您的代码必须具有 ReflectionPermission。请参见 反射的安全注意事项。 代码无需权限即可使用反射获取有关类型及其成员的信息（无论其访问级别如何）。代码无需权限即可使用反射访问公共成员，或其访问级别使其在常规编译过程中可见的其他成员。但是，为了您的代码能够使用反射来访问通常不可访问的成员（如专用方法或内部方法）或您的类不继承的类型的受保护字段，您的代码必须具有 ReflectionPermission。请参见 反射的安全注意事项。

Type 是允许多个实现的抽象基类。系统将总是提供派生类 RuntimeType。在反射中，所有以 Runtime 一词开头的类对系统中的每个对象都只能创建一次，并且这些类支持比较操作。 Type 是允许多个实现的抽象基类。系统将总是提供派生类 RuntimeType。在反射中，所有以 Runtime 一词开头的类对系统中的每个对象都只能创建一次，并且这些类支持比较操作。 Type 是允许多个实现的抽象基类。系统将总是提供派生类 RuntimeType。在反射中，所有以 Runtime 一词开头的类对系统中的每个对象都只能创建一次，并且这些类支持比较操作。

说明 说明

在多线程方案中，不要锁定 Type 对象以同步对 static 数据的访问。其他不受您控制的代码可能也会锁定您的类类型。这可能会导致死锁。应转而通过锁定私有 static 对象来同步对静态数据的访问。 在多线程方案中，不要锁定 Type 对象以同步对 static 数据的访问。其他不受您控制的代码可能也会锁定您的类类型。这可能会导致死锁。应转而通过锁定私有 static 对象来同步对静态数据的访问。 在多线程方案中，不要锁定 Type 对象以同步对 static 数据的访问。其他不受您控制的代码可能也会锁定您的类类型。这可能会导致死锁。应转而通过锁定私有 static 对象来同步对静态数据的访问。 在多线程方案中，不要锁定 Type 对象以同步对 static 数据的访问。其他不受您控制的代码可能也会锁定您的类类型。这可能会导致死锁。应转而通过锁定私有 static 对象来同步对静态数据的访问。

这个类是线程安全的；多个线程可以同时从此类型的一个实例读取数据。Type 的实例可表示以下任何类型： 这个类是线程安全的；多个线程可以同时从此类型的一个实例读取数据。Type 的实例可表示以下任何类型：

  • 类

  • 值类型

  • 数组

  • Interfaces

  • 指针

  • 枚举

  • 构造泛型类型和泛型类型定义

  • 构造泛型类型、泛型类型定义和泛型方法定义的类型实参和类型形参

可以通过下列方式获得对与某个类型关联的 Type 对象的引用：

  • Object..::.GetType 方法返回表示实例类型的 Type 对象。

  • 静态 GetType 方法返回 Type 对象，该对象表示由其完全限定名指定的类型。

  • Module..::.GetTypes、Module..::.GetType 和 Module..::.FindTypes 方法返回 Type 对象，这些对象表示在某个模块中定义的类型。第一个方法可用于获得模块中定义的所有公共类型和私有类型的 Type 对象的数组。（可以通过 Assembly..::.GetModule 或 Assembly..::.GetModules 方法，或通过 Type..::.Module 属性获得 Module 的实例。） Module..::.GetTypes、Module..::.GetType 和 Module..::.FindTypes 方法返回 Type 对象，这些对象表示在某个模块中定义的类型。第一个方法可用于获得模块中定义的所有公共类型和私有类型的 Type 对象的数组。（可以通过 Assembly..::.GetModule 或 Assembly..::.GetModules 方法，或通过 Type..::.Module 属性获得 Module 的实例。） Module..::.GetTypes、Module..::.GetType 和 Module..::.FindTypes 方法返回 Type 对象，这些对象表示在某个模块中定义的类型。第一个方法可用于获得模块中定义的所有公共类型和私有类型的 Type 对象的数组。（可以通过 Assembly..::.GetModule 或 Assembly..::.GetModules 方法，或通过 Type..::.Module 属性获得 Module 的实例。）

  • FindInterfaces 方法返回某个类型所支持的接口类型的筛选后的列表。

  • GetElementType 方法返回表示元素的 Type 对象。

  • GetInterfaces 和 GetInterface 方法返回表示某个类型所支持的接口类型的 Type 对象。

  • GetTypeArray 方法返回表示任意一组对象所指定的类型的 Type 对象数组。这些对象用 Object 类型的数组指定。 GetTypeArray 方法返回表示任意一组对象所指定的类型的 Type 对象数组。这些对象用 Object 类型的数组指定。

  • GetTypeFromProgID 和 GetTypeFromCLSID 方法是为 COM 互操作而提供的。这些方法返回表示 ProgID 或 CLSID 所指定的类型的 Type 对象。 GetTypeFromProgID 和 GetTypeFromCLSID 方法是为 COM 互操作而提供的。这些方法返回表示 ProgID 或 CLSID 所指定的类型的 Type 对象。

  • GetTypeFromHandle 方法是为交互操作而提供的。此方法返回表示类句柄所指定的类型的 Type 对象。 GetTypeFromHandle 方法是为交互操作而提供的。此方法返回表示类句柄所指定的类型的 Type 对象。

  • C# typeof 运算符、C++ typeid 运算符和 Visual Basic GetType 运算符获得某个类型的 Type 对象。

  • MakeGenericType 方法返回 Type 对象，该对象表示构造泛型类型，如果该对象的 ContainsGenericParameters 属性返回 true，则该类型为开放构造类型，否则为封闭构造类型。只能实例化封闭的泛型类型。 MakeGenericType 方法返回 Type 对象，该对象表示构造泛型类型，如果该对象的 ContainsGenericParameters 属性返回 true，则该类型为开放构造类型，否则为封闭构造类型。只能实例化封闭的泛型类型。

  • MakeArrayType、MakePointerType 和 MakeByRefType 方法返回 Type 对象，这些对象分别表示指定类型的数组、指向指定类型的指针以及引用参数的类型（在 C# 中为 ref，在 Visual Basic 中为 ByRef）。

说明 说明

派生类可以访问调用代码的基类的受保护成员。而且还可以访问调用代码程序集的程序集成员。一般来说，如果允许访问早期绑定代码，那么也就允许访问后期绑定代码。 派生类可以访问调用代码的基类的受保护成员。而且还可以访问调用代码程序集的程序集成员。一般来说，如果允许访问早期绑定代码，那么也就允许访问后期绑定代码。 派生类可以访问调用代码的基类的受保护成员。而且还可以访问调用代码程序集的程序集成员。一般来说，如果允许访问早期绑定代码，那么也就允许访问后期绑定代码。
说明 说明

扩展其他接口的接口不继承被扩展的接口中定义的方法。

对继承者的说明

当从 Type 继承时，必须重写以下成员： GUID、 InvokeMember(String, BindingFlags, Binder, Object, Object , ParameterModifier , CultureInfo, String )、 Module、 Assembly、 TypeHandle、 FullName、 Namespace、 AssemblyQualifiedName、 BaseType、 GetConstructorImpl、 GetConstructors(BindingFlags)、 GetMethodImpl、 GetMethods(BindingFlags)、 GetField(String, BindingFlags)、 GetFields(BindingFlags)、 GetInterface(String, Boolean)、 GetInterfaces 、 GetEvent(String, BindingFlags)、 GetEvents(BindingFlags)、 GetPropertyImpl、 GetProperties(BindingFlags)、 GetNestedType(String, BindingFlags)、 GetNestedTypes(BindingFlags)、 GetAttributeFlagsImpl、 IsArrayImpl、 IsByRefImpl、 IsPointerImpl、 IsPrimitiveImpl、 IsCOMObjectImpl、 GetElementType 、 HasElementTypeImpl、 UnderlyingSystemType、 MemberInfo Name、 MemberInfo IsDefined、 MemberInfo GetCustomAttributes(Boolean) 和 GetCustomAttributes。

下面的代码示例演示 Type 的少数几个具有代表性的功能。C# typeof 运算符（在 Visual Basic 中为 GetType 运算符，在 Visual C++ 中为 typeid 运算符）用于获取表示 String 的 Type 对象。从该 Type 对象，可以使用 GetMethod 方法来获得表示 Substring 重载（该重载采用起始位置和长度）的 MethodInfo。 下面的代码示例演示 Type 的少数几个具有代表性的功能。C# typeof 运算符（在 Visual Basic 中为 GetType 运算符，在 Visual C++ 中为 typeid 运算符）用于获取表示 String 的 Type 对象。从该 Type 对象，可以使用 GetMethod 方法来获得表示 Substring 重载（该重载采用起始位置和长度）的 MethodInfo。 下面的代码示例演示 Type 的少数几个具有代表性的功能。C# typeof 运算符（在 Visual Basic 中为 GetType 运算符，在 Visual C++ 中为 typeid 运算符）用于获取表示 String 的 Type 对象。从该 Type 对象，可以使用 GetMethod 方法来获得表示 Substring 重载（该重载采用起始位置和长度）的 MethodInfo。

为了标识重载签名，该代码示例创建了一个临时数组，其中包含两个表示 int（在 Visual Basic 中为 Integer）的 Type 对象。

说明 说明

为了力求准确，该数组中包含两个对 Type 实例的引用，该实例表示当前应用程序域中的 int。对于任何类型来说，每个应用程序域中都只有一个 Type 实例。 为了力求准确，该数组中包含两个对 Type 实例的引用，该实例表示当前应用程序域中的 int。对于任何类型来说，每个应用程序域中都只有一个 Type 实例。

该代码示例使用 MethodInfo 来对字符串“Hello, World!”调用 Substring 方法，并显示相应的结果。

Imports System
Imports System.Reflection

Module Example

    Sub Main()

        Dim t As Type = GetType(String)

        Dim substr As MethodInfo = t.GetMethod("Substring", _
            New Type() { GetType(Integer), GetType(Integer) })

        Dim result As Object = _
            substr.Invoke("Hello, World!", New Object() { 7, 5 })
        Console.WriteLine("{0} returned ""{1}"".", substr, result)

    End Sub
End Module

' This code example produces the following output:
'
'System.String Substring(Int32, Int32) returned "World".

using System;
using System.Reflection;

class Example
{
    static void Main()
    {
        Type t = typeof(String);

        MethodInfo substr = t.GetMethod("Substring",
            new Type[] { typeof(int), typeof(int) });

        Object result =
            substr.Invoke("Hello, World!", new Object[] { 7, 5 });
        Console.WriteLine("{0} returned \"{1}\".", substr, result);
    }
}

/* This code example produces the following output:

System.String Substring(Int32, Int32) returned "World".
 */

#using <System.dll>

using namespace System;
using namespace System::Reflection;

void main()
{
    // Get a Type object representing the System.String type.
    Type^ t = String::typeid;

    MethodInfo^ substr = t->GetMethod("Substring",
        gcnew array<Type^> { int::typeid, int::typeid });

    Object^ result =
        substr->Invoke("Hello, World!", gcnew array<Object^> { 7, 5 });
    Console::WriteLine("{0} returned \"{1}\".", substr, result);
}

/* This code example produces the following output:

System.String Substring(Int32, Int32) returned "World".
 */

System System..::.TypeType

此类型是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 成员
System 命名空间
Object
System.Reflection
ReflectionPermission


Type 成员

Type 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

表示类型声明：类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义，以及开放或封闭构造的泛型类型。

Type 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Type 类
System 命名空间


Type 构造函数

Type 构造函数
Type 类

初始化 Type 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected Type()
protected:
Type()
new : unit -> Type

在构造类型对象期间，派生类调用该构造函数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间


Type 字段

Type 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

Type 类型公开以下成员。

名称 说明
页首

参考

Type 类
System 命名空间


Type ..::.Delimiter 字段

Type
.
.
::
.
Delimiter 字段
Type 类

分隔 Type 的命名空间中的名称。此字段为只读。 分隔 Type 的命名空间中的名称。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Delimiter As Char
public static readonly char Delimiter
public:
static initonly wchar_t Delimiter
static val Delimiter: char

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间


Type ..::.EmptyTypes 字段

Type
.
.
::
.
EmptyTypes 字段
Type 类

表示 Type 类型的空数组。此字段为只读。 表示 Type 类型的空数组。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly EmptyTypes As Type()
public static readonly Type[] EmptyTypes
public:
static initonly array<Type^>^ EmptyTypes
static val EmptyTypes: Type[]

下面的代码示例显示在 GetConstructor 方法之一中所用的 EmptyTypes 字段，用来获取不使用参数的构造函数。

cInfo = type.GetConstructor(BindingFlags.ExactBinding, _
   Nothing, Type.EmptyTypes, Nothing)

cInfo = type.GetConstructor (BindingFlags.ExactBinding, null,
         Type.EmptyTypes, null);

cInfo = type->GetConstructor( BindingFlags::ExactBinding, nullptr,
   Type::EmptyTypes, nullptr );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.FilterAttribute 字段

Type
.
.
::
.
FilterAttribute 字段
Type 类

表示用在特性上的成员筛选器。此字段为只读。 表示用在特性上的成员筛选器。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly FilterAttribute As MemberFilter
public static readonly MemberFilter FilterAttribute
public:
static initonly MemberFilter^ FilterAttribute
static val FilterAttribute: MemberFilter

此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。Object 可能会被赋予类 FieldAttributes、MethodAttributes 或 MethodImplAttributes 上任一个字段的值。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。Object 可能会被赋予类 FieldAttributes、MethodAttributes 或 MethodImplAttributes 上任一个字段的值。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。Object 可能会被赋予类 FieldAttributes、MethodAttributes 或 MethodImplAttributes 上任一个字段的值。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。Object 可能会被赋予类 FieldAttributes、MethodAttributes 或 MethodImplAttributes 上任一个字段的值。

例如，Object 可分配得到来自 FieldAttributes（如 Public）的一个字段的值。在这种情况下，当调用 FilterAttribute 委托时，只有在 MemberInfo 对象表示的方法用元数据中的公共字段特性修饰时，它才返回 true。 例如，Object 可分配得到来自 FieldAttributes（如 Public）的一个字段的值。在这种情况下，当调用 FilterAttribute 委托时，只有在 MemberInfo 对象表示的方法用元数据中的公共字段特性修饰时，它才返回 true。

下面的示例获取 FilterAttribute 委托，将其作为参数传递给 FindMembers 方法，然后显示指定的成员和它们的特性。

Imports System
Imports System.Reflection
Imports System.Security
Imports Microsoft.VisualBasic

Public Class MyFilterAttributeSample

    Public Shared Sub Main()
        Try
            Dim myFilter As MemberFilter = Type.FilterAttribute
            Dim myType As Type = GetType(System.String)
            Dim myMemberInfoArray As MemberInfo() = myType.FindMembers(MemberTypes.Constructor Or MemberTypes.Method, BindingFlags.Public Or BindingFlags.Static Or BindingFlags.Instance, myFilter, MethodAttributes.SpecialName)
            Dim myMemberinfo As MemberInfo
            For Each myMemberinfo In myMemberInfoArray
                Console.Write(ControlChars.newline + myMemberinfo.Name)
                Console.Write(" is a " + myMemberinfo.MemberType.ToString())
            Next myMemberinfo

        Catch e As ArgumentNullException
            Console.Write("ArgumentNullException : " + e.Message.ToString())
        Catch e As SecurityException
            Console.Write("SecurityException : " + e.Message.ToString())
        Catch e As Exception
            Console.Write("Exception :" + e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyFilterAttributeSample

using System;
using System.Reflection;
using System.Security;

public class MyFilterAttributeSample
{
    public static void Main()
    {
        try
        {
            MemberFilter myFilter = Type.FilterAttribute;
            Type myType = typeof(System.String);
            MemberInfo[] myMemberInfoArray = myType.FindMembers(MemberTypes.Constructor
                |MemberTypes.Method, BindingFlags.Public | BindingFlags.Static |
                BindingFlags.Instance, myFilter, MethodAttributes.SpecialName);
            foreach (MemberInfo myMemberinfo in myMemberInfoArray)
            {
                Console.Write ("\n" + myMemberinfo.Name);
                Console.Write (" is a " + myMemberinfo.MemberType.ToString());
            }
        }
        catch(ArgumentNullException e)
        {
            Console.Write("ArgumentNullException : " + e.Message);
        }
        catch(SecurityException e)
        {
            Console.Write("SecurityException : " + e.Message);
        }
        catch(Exception e)
        {
            Console.Write("Exception :" + e.Message);
        }
    }
}

using namespace System;
using namespace System::Collections;
using namespace System::Reflection;
using namespace System::Security;
int main()
{
   try
   {
      MemberFilter^ myFilter = Type::FilterAttribute;
      Type^ myType = System::String::typeid;
      array<MemberInfo^>^myMemberInfoArray = myType->FindMembers( static_cast<MemberTypes>(MemberTypes::Constructor | MemberTypes::Method), static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::Instance), myFilter, MethodAttributes::SpecialName );
      IEnumerator^ myEnum = myMemberInfoArray->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         MemberInfo^ myMemberinfo = safe_cast<MemberInfo^>(myEnum->Current);
         Console::Write( "\n {0}", myMemberinfo->Name );
         Console::Write( " is a {0}", myMemberinfo->MemberType );
      }
   }
   catch ( ArgumentNullException^ e )
   {
      Console::Write( "ArgumentNullException : {0}", e->Message );
   }
   catch ( SecurityException^ e )
   {
      Console::Write( "SecurityException : {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::Write( "Exception : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
FindMembers
MemberFilter


Type ..::.FilterName 字段

Type
.
.
::
.
FilterName 字段
Type 类

表示用于名称的区分大小写的成员筛选器。此字段为只读。 表示用于名称的区分大小写的成员筛选器。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly FilterName As MemberFilter
public static readonly MemberFilter FilterName
public:
static initonly MemberFilter^ FilterName
static val FilterName: MemberFilter

此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。

例如，可能分配给 Object 值“Byte*”。在这种情况下，当调用 FilterName 委托时，只有当 MemberInfo 对象表示的方法具有以“Byte”开始的名称，它才返回 true。 例如，可能分配给 Object 值“Byte*”。在这种情况下，当调用 FilterName 委托时，只有当 MemberInfo 对象表示的方法具有以“Byte”开始的名称，它才返回 true。

下面的代码示例获取与用户定义的 Application 类型关联的方法。

' Get the set of methods associated with the type
Dim mi As MemberInfo() = _
   GetType(Application).FindMembers( _
   MemberTypes.Constructor Or MemberTypes.Method, _
   BindingFlags.DeclaredOnly, _
   Type.FilterName, "*")
Console.WriteLine("Number of methods (includes constructors): " & _
   mi.Length.ToString())

// Get the set of methods associated with the type
MemberInfo[] mi = typeof(Application).FindMembers(MemberTypes.Constructor |
    MemberTypes.Method,
    BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic |
    BindingFlags.Instance | BindingFlags.DeclaredOnly,
    Type.FilterName, "*");
  Console.WriteLine("Number of methods (includes constructors): " + mi.Length);

// Get the set of methods associated with the type
array<MemberInfo^>^ mi = Application::typeid->FindMembers(
   (MemberTypes)(MemberTypes::Constructor | MemberTypes::Method),
   (BindingFlags)(BindingFlags::Public | BindingFlags::Static |
      BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::DeclaredOnly),
   Type::FilterName, "*" );
Console::WriteLine( "Number of methods (includes constructors): {0}", mi->Length );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
FindMembers
MemberFilter


Type ..::.FilterNameIgnoreCase 字段

Type
.
.
::
.
FilterNameIgnoreCase 字段
Type 类

表示用于名称的不区分大小写的成员筛选器。此字段为只读。 表示用于名称的不区分大小写的成员筛选器。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly FilterNameIgnoreCase As MemberFilter
public static readonly MemberFilter FilterNameIgnoreCase
public:
static initonly MemberFilter^ FilterNameIgnoreCase
static val FilterNameIgnoreCase: MemberFilter

此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。 此字段含有对 FindMembers 方法使用的委托的引用。此委托封装的方法使用两个参数：第一个是 MemberInfo 对象，第二个是 Object。此方法确定 MemberInfo 对象是否与 Object 指定的判据相匹配。给 Object 分配了一个字符串值，此字符串值可能包含一个尾部通配符字符“*”。仅支持通配符结尾字符串匹配。

例如，可能分配给 Object 值“ByTe*”。在这种情况下，当调用 FilterName 委托时，只有当 MemberInfo 对象表示的方法具有以“byte”开始的名称，它才返回真，不区分大小写。 例如，可能分配给 Object 值“ByTe*”。在这种情况下，当调用 FilterName 委托时，只有当 MemberInfo 对象表示的方法具有以“byte”开始的名称，它才返回真，不区分大小写。

下面的示例获取 MemberFilter 委托，将其作为参数传递给 FindMembers 方法，然后显示这些方法及 String 类的以字母“c”或“C”开头的特性。

Imports System
Imports System.Reflection
Imports System.Security
Imports Microsoft.VisualBasic

Public Class MyFilterNameIgnoreCaseSample
    Public Shared Sub Main()
        Try
            Dim myFilter As MemberFilter = Type.FilterNameIgnoreCase
            Dim myType As Type = GetType(System.String)
            Dim myMemberinfo1 As MemberInfo() = myType.FindMembers(MemberTypes.Constructor Or MemberTypes.Method, BindingFlags.Public Or BindingFlags.Static Or BindingFlags.Instance, myFilter, "C*")
            Dim myMemberinfo2 As MemberInfo
            For Each myMemberinfo2 In myMemberinfo1
                Console.Write((ControlChars.NewLine + myMemberinfo2.Name))
                Dim Mymembertypes As MemberTypes = myMemberinfo2.MemberType
                Console.WriteLine((" is a " + Mymembertypes.ToString()))
            Next myMemberinfo2
        Catch e As ArgumentNullException
            Console.Write("ArgumentNullException : " + e.Message.Tostring())
        Catch e As SecurityException
            Console.Write("SecurityException : " + e.Message.Tostring())
        Catch e As Exception
            Console.Write("Exception : " + e.Message.Tostring())
        End Try
    End Sub 'Main
End Class 'MyFilterNameIgnoreCaseSample

using System;
using System.Reflection;
using System.Security;
public class MyFilterNameIgnoreCaseSample
{
    public static void Main()
    {
        try
        {
            MemberFilter myFilter = Type.FilterNameIgnoreCase;
            Type myType = typeof(System.String);
            MemberInfo[] myMemberinfo1 = myType.FindMembers(MemberTypes.Constructor
                |MemberTypes.Method, BindingFlags.Public | BindingFlags.Static |
                BindingFlags.Instance, myFilter, "C*");
            foreach (MemberInfo myMemberinfo2 in myMemberinfo1)
            {
                Console.Write("\n" + myMemberinfo2.Name);
                MemberTypes Mymembertypes = myMemberinfo2.MemberType;
                Console.WriteLine(" is a " + Mymembertypes.ToString());
            }
        }
        catch(ArgumentNullException e)
        {
            Console.Write("ArgumentNullException : " + e.Message);
        }
        catch(SecurityException e)
        {
            Console.Write("SecurityException : " + e.Message);
        }
        catch(Exception e)
        {
            Console.Write("Exception : " + e.Message);
        }
    }
}

using namespace System;
using namespace System::Collections;
using namespace System::Reflection;
using namespace System::Security;
int main()
{
   try
   {
      MemberFilter^ myFilter = Type::FilterNameIgnoreCase;
      Type^ myType = System::String::typeid;
      array<MemberInfo^>^myMemberinfo1 = myType->FindMembers( static_cast<MemberTypes>(MemberTypes::Constructor | MemberTypes::Method), static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::Instance), myFilter, "C*" );
      IEnumerator^ myEnum = myMemberinfo1->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         MemberInfo^ myMemberinfo2 = safe_cast<MemberInfo^>(myEnum->Current);
         Console::Write( "\n {0}", myMemberinfo2->Name );
         MemberTypes Mymembertypes = myMemberinfo2->MemberType;
         Console::WriteLine( " is a {0}", Mymembertypes );
      }
   }
   catch ( ArgumentNullException^ e )
   {
      Console::Write( "ArgumentNullException : {0}", e->Message );
   }
   catch ( SecurityException^ e )
   {
      Console::Write( "SecurityException : {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::Write( "Exception : {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
FindMembers
MemberFilter


Type ..::.Missing 字段

Type
.
.
::
.
Missing 字段
Type 类

表示 Type 信息中的缺少值。此字段为只读。 表示 Type 信息中的缺少值。此字段为只读。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Missing As Object
public static readonly Object Missing
public:
static initonly Object^ Missing
static val Missing: Object

使用 Missing 字段通过反射进行调用，以获取参数的默认值。如果传入一个参数值的 Missing 字段，并且该参数没有默认值，则引发 ArgumentException。 使用 Missing 字段通过反射进行调用，以获取参数的默认值。如果传入一个参数值的 Missing 字段，并且该参数没有默认值，则引发 ArgumentException。

下面的代码示例显示使用 Missing 字段调用带有默认参数的方法。

Option Strict Off
Imports System
Imports System.Reflection
Public Class OptionalArg
    Public Sub MyMethod(ByVal a As Integer, Optional ByVal b As Double = 1.2, Optional ByVal c As Integer = 1)
        Console.WriteLine("a = " & a & " b = " & b & " c = " & c)
    End Sub
End Class
Module module1
    Sub main()
        Dim o As New OptionalArg()
        Dim t As Type
        t = GetType(OptionalArg)
        Dim param As Object() = {10, 20, 30}
        t.InvokeMember("MyMethod", BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod Or BindingFlags.OptionalParamBinding, Nothing, o, New Object() {10, 55.3, 12})
        t.InvokeMember("MyMethod", BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod Or BindingFlags.OptionalParamBinding, Nothing, o, New Object() {10, 1.3, Type.Missing})
        t.InvokeMember("MyMethod", BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod Or BindingFlags.OptionalParamBinding, Nothing, o, New Object() {10, Type.Missing, Type.Missing})
    End Sub
End Module

此代码产生下列输出：

a = 10 b = 55.3 c = 12

a = 10 b = 1.3 c = 1

a = 10 b = 1.2 c = 1

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
Missing

其他资源

访问默认参数值


Type 方法

Type 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

Type 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Type 类
System 命名空间


Type ..::._Type ..::.GetIDsOfNames 方法

Type
.
.
::
.
_Type
.
.
::
.
GetIDsOfNames 方法
Type 类

将一组名称映射为对应的一组调度标识符。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetIDsOfNames ( _
    ByRef riid As Guid, _
    rgszNames As IntPtr, _
    cNames As UInteger, _
    lcid As UInteger, _
    rgDispId As IntPtr _
) Implements _Type.GetIDsOfNames
void _Type.GetIDsOfNames(
    ref Guid riid,
    IntPtr rgszNames,
    uint cNames,
    uint lcid,
    IntPtr rgDispId
)
private:
virtual void GetIDsOfNames(
    [InAttribute] Guid% riid,
    IntPtr rgszNames,
    unsigned int cNames,
    unsigned int lcid,
    IntPtr rgDispId
) sealed = _Type::GetIDsOfNames
private abstract GetIDsOfNames :
        riid:Guid byref *
        rgszNames:IntPtr *
        cNames:uint32 *
        lcid:uint32 *
        rgDispId:IntPtr -> unit
private override GetIDsOfNames :
        riid:Guid byref *
        rgszNames:IntPtr *
        cNames:uint32 *
        lcid:uint32 *
        rgDispId:IntPtr -> unit

参数

riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
rgszNames
类型： System IntPtr
要映射的名称的传入数组。
cNames
类型： System UInt32
要映射的名称的计数。
lcid
类型： System UInt32
要在其中解释名称的区域设置上下文。
rgDispId
类型： System IntPtr
调用方分配的数组，用于接收与名称对应的 ID。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetIDsOfNames 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::._Type ..::.GetTypeInfo 方法

Type
.
.
::
.
_Type
.
.
::
.
GetTypeInfo 方法
Type 类

检索对象的类型信息，然后可以使用该信息获取接口的类型信息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetTypeInfo ( _
    iTInfo As UInteger, _
    lcid As UInteger, _
    ppTInfo As IntPtr _
) Implements _Type.GetTypeInfo
void _Type.GetTypeInfo(
    uint iTInfo,
    uint lcid,
    IntPtr ppTInfo
)
private:
virtual void GetTypeInfo(
    unsigned int iTInfo,
    unsigned int lcid,
    IntPtr ppTInfo
) sealed = _Type::GetTypeInfo
private abstract GetTypeInfo :
        iTInfo:uint32 *
        lcid:uint32 *
        ppTInfo:IntPtr -> unit
private override GetTypeInfo :
        iTInfo:uint32 *
        lcid:uint32 *
        ppTInfo:IntPtr -> unit

参数

iTInfo
类型： System UInt32
要返回的类型信息。
lcid
类型： System UInt32
类型信息的区域设置标识符。
ppTInfo
类型： System IntPtr
指向请求的类型信息对象的指针。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfo 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::._Type ..::.GetTypeInfoCount 方法

Type
.
.
::
.
_Type
.
.
::
.
GetTypeInfoCount 方法
Type 类

检索对象提供的类型信息接口的数量（0 或 1）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetTypeInfoCount ( _
    <OutAttribute> ByRef pcTInfo As UInteger _
) Implements _Type.GetTypeInfoCount
void _Type.GetTypeInfoCount(
    out uint pcTInfo
)
private:
virtual void GetTypeInfoCount(
    [OutAttribute] unsigned int% pcTInfo
) sealed = _Type::GetTypeInfoCount
private abstract GetTypeInfoCount :
        pcTInfo:uint32 byref -> unit
private override GetTypeInfoCount :
        pcTInfo:uint32 byref -> unit

参数

pcTInfo
类型： System UInt32 %
指向一个位置，该位置接收对象提供的类型信息接口的数量。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::GetTypeInfoCount 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::._Type ..::.Invoke 方法

Type
.
.
::
.
_Type
.
.
::
.
Invoke 方法
Type 类

提供对某一对象公开的属性和方法的访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Invoke ( _
    dispIdMember As UInteger, _
    ByRef riid As Guid, _
    lcid As UInteger, _
    wFlags As Short, _
    pDispParams As IntPtr, _
    pVarResult As IntPtr, _
    pExcepInfo As IntPtr, _
    puArgErr As IntPtr _
) Implements _Type.Invoke
void _Type.Invoke(
    uint dispIdMember,
    ref Guid riid,
    uint lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
)
private:
virtual void Invoke(
    unsigned int dispIdMember,
    [InAttribute] Guid% riid,
    unsigned int lcid,
    short wFlags,
    IntPtr pDispParams,
    IntPtr pVarResult,
    IntPtr pExcepInfo,
    IntPtr puArgErr
) sealed = _Type::Invoke
private abstract Invoke :
        dispIdMember:uint32 *
        riid:Guid byref *
        lcid:uint32 *
        wFlags:int16 *
        pDispParams:IntPtr *
        pVarResult:IntPtr *
        pExcepInfo:IntPtr *
        puArgErr:IntPtr -> unit
private override Invoke :
        dispIdMember:uint32 *
        riid:Guid byref *
        lcid:uint32 *
        wFlags:int16 *
        pDispParams:IntPtr *
        pVarResult:IntPtr *
        pExcepInfo:IntPtr *
        puArgErr:IntPtr -> unit

参数

dispIdMember
类型： System UInt32
标识成员。
riid
类型： System Guid %
保留供将来使用。必须为 IID_NULL。 保留供将来使用。必须为 IID_NULL。
lcid
类型： System UInt32
要在其中解释参数的区域设置上下文。
wFlags
类型： System Int16
描述调用的上下文的标志。
pDispParams
类型： System IntPtr
指向一个结构的指针，该结构包含一个参数数组、一个命名参数的 DISPID 参数数组和数组中元素数的计数。
pVarResult
类型： System IntPtr
指向要存储结果的位置的指针。
pExcepInfo
类型： System IntPtr
指向一个包含异常信息的结构的指针。
puArgErr
类型： System IntPtr
第一个出错参数的索引。

实现

异常 | 条件
NotImplementedException | 不支持使用 COM IDispatch 接口进行后期绑定访问。

此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。 此方法用于从非托管代码访问托管类，不应从托管代码调用。有关 IDispatch::Invoke 的更多信息，请参见 MSDN Library。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.Equals 方法

Type
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

确定当前 Type 的基础系统类型是否与指定 Object 或 Type 的基础系统类型相同。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.Equals 方法 (Object)

Type
.
.
::
.
Equals 方法 (Object)
Type 类

确定当前 Type 的基础系统类型是否与指定 Object 的基础系统类型相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    o As Object _
) As Boolean
public override bool Equals(
    Object o
)
public:
virtual bool Equals(
    Object^ o
) override
abstract Equals :
        o:Object -> bool
override Equals :
        o:Object -> bool

参数

o
类型： System Object
Object，其基础系统类型将与当前 Type 的基础系统类型相比较。

返回值

类型： System Boolean
如果 o 的基础系统类型与当前 Type 的基础系统类型相同，则为 true；否则为 false。如果 o 参数指定的对象不是 Type，此方法也会返回 false。 如果 o 的基础系统类型与当前 Type 的基础系统类型相同，则为 true；否则为 false。如果 o 参数指定的对象不是 Type，此方法也会返回 false。

实现

此方法重写 Object..::.Equals。

下面的示例使用 Equals 比较两个 Object 实例。

Imports System
Imports System.Reflection

Class Example

    Public Shared Sub Main()

        Dim a As Type = GetType(System.Object)
        Dim b As Type = GetType(System.Object)
        Console.WriteLine("{0} = {1}: {2}", a, b, a.Equals(b))
        ' The Type objects in a and b are equal,
        ' because they represent System.Object.

        a = GetType(Example)
        b = New Example().GetType()
        Console.WriteLine("{0} is equal to {1}: {2}", a, b, a.Equals(b))
        ' The Type objects in a and b are equal,
        ' because they both represent type Example.

        b = GetType([Object])
        Console.WriteLine("typeof({0}).Equals(typeof({1})): {2}", a, b, a.Equals(b))

        ' The Type objects in a and b are not equal,
        ' because variable a represents type Example
        ' and variable b represents type Object.

        'Console.ReadLine();

    End Sub
End Class
'
' This code example produces the following output:
'    System.Object = System.Object: True
'    Example is equal to Example: True
'    typeof(Example).Equals(typeof(System.Type)): False
'

using System;
using System.Reflection;

class Example
{
    public static void Main()
    {

        Type a = typeof(System.Object);
        Type b = typeof(System.Object);

        Console.WriteLine("{0} == {1}: {2}", a, b, a.Equals(b));

        // The Type objects in a and b are equal,
        // because they represent System.Object.

        a = typeof(Example);
        b = new Example().GetType();

        Console.WriteLine("{0} is equal to {1}: {2}", a, b, a.Equals(b));

        // The Type objects in a and b are equal,
        // because they both represent type Example.

        b = typeof(Object);

        Console.WriteLine("typeof({0}).Equals(typeof({1})): {2}", a, b, a.Equals(b));

        // The Type objects in a and b are not equal,
        // because variable a represents type Example
        // and variable b represents type Object.

        //Console.ReadLine();

    }
}

//
/* This code example produces the following output:
    System.Object == System.Object: True
    Example is equal to Example: True
    typeof(Example).Equals(typeof(System.Type)): False
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
Equals 重载
System 命名空间
UnderlyingSystemType


Type ..::.Equals 方法 (Type)

Type
.
.
::
.
Equals 方法 (Type)
Type 类

确定当前 Type 的基础系统类型是否与指定 Type 的基础系统类型相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Equals ( _
    o As Type _
) As Boolean
public virtual bool Equals(
    Type o
)
public:
virtual bool Equals(
    Type^ o
)
abstract Equals :
        o:Type -> bool
override Equals :
        o:Type -> bool

参数

o
类型： System Type
Type，其基础系统类型将与当前 Type 的基础系统类型相比较。

返回值

类型： System Boolean
如果 o 的基础系统类型与当前 Type 的基础系统类型相同，则为 true；否则为 false。

实现

下面的示例使用 Equals 比较两个类型。

Imports System
Imports System.Reflection

Class Example

    Public Shared Sub Main()

        Dim a As Type = GetType(System.String)
        Dim b As Type = GetType(System.Int32)

        Console.WriteLine("{0} = {1}: {2}", a, b, a.Equals(b))
        ' The Type objects in a and b are not equal,
        ' because they represent different types.

        a = GetType(Example)
        b = New Example().GetType()
        Console.WriteLine("{0} is equal to {1}: {2}", a, b, a.Equals(b))
        ' The Type objects in a and b are equal,
        ' because they both represent type Example.

        b = GetType(Type)
        Console.WriteLine("typeof({0}).Equals(typeof({1})): {2}", a, b, a.Equals(b))
        ' The Type objects in a and b are not equal,
        ' because variable a represents type Example
        ' and variable b represents type Type.

        'Console.ReadLine()

    End Sub
End Class
'
' This code example produces the following output:
'    System.String = System.Int32: False
'    Example is equal to Example: True
'    typeof(Example).Equals(typeof(System.Type)): False
'

using System;
using System.Reflection;

class Example
{
    public static void Main()
    {

        Type a = typeof(System.String);
        Type b = typeof(System.Int32);

        Console.WriteLine("{0} == {1}: {2}", a, b, a.Equals(b));

        // The Type objects in a and b are not equal,
        // because they represent different types.

        a = typeof(Example);
        b = new Example().GetType();

        Console.WriteLine("{0} is equal to {1}: {2}", a, b, a.Equals(b));

        // The Type objects in a and b are equal,
        // because they both represent type Example.

        b = typeof(Type);

        Console.WriteLine("typeof({0}).Equals(typeof({1})): {2}", a, b, a.Equals(b));

        // The Type objects in a and b are not equal,
        // because variable a represents type Example
        // and variable b represents type Type.

        //Console.ReadLine();

    }
}

//
/* This code example produces the following output:
    System.String == System.Int32: False
    Example is equal to Example: True
    typeof(Example).Equals(typeof(System.Type)): False
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
Equals 重载
System 命名空间
UnderlyingSystemType


Type ..::.FindInterfaces 方法

Type
.
.
::
.
FindInterfaces 方法
Type 类

返回表示接口（由当前 Type 所实现或继承）的筛选列表的 Type 对象数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function FindInterfaces ( _
    filter As TypeFilter, _
    filterCriteria As Object _
) As Type()
public virtual Type[] FindInterfaces(
    TypeFilter filter,
    Object filterCriteria
)
public:
virtual array<Type^>^ FindInterfaces(
    TypeFilter^ filter,
    Object^ filterCriteria
)
abstract FindInterfaces :
        filter:TypeFilter *
        filterCriteria:Object -> Type[]
override FindInterfaces :
        filter:TypeFilter *
        filterCriteria:Object -> Type[]

参数

filter
类型： System.Reflection TypeFilter
对照 filterCriteria 比较接口的 TypeFilter 委托。
filterCriteria
类型： System Object
确定接口是否应包括在返回数组中的搜索判据。

返回值

类型：
array<
System Type
>
[]
()
[]

一个表示当前 Type 实现或继承的接口的筛选列表的 Type 对象数组，或者类型 Type 的空数组（如果当前 Type 没有实现或继承匹配筛选器的接口）。

实现

异常 | 条件
ArgumentNullException | filter 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TargetInvocationException | 调用静态初始值设定项并引发异常。

此方法可由派生类重写。

System.Reflection..::.Module 类提供的 Module..::.FilterTypeName 和 Module..::.FilterTypeNameIgnoreCase 委托也可能被使用，以替代 System.Reflection..::.TypeFilter 委托。

无论是由基类声明还是由该类自己声明，该类实现的所有接口在搜索期间都会被考虑。

此方法搜索基类层次结构，返回每个类所实现的每个匹配接口，以及那些接口中的每一个所实现的所有匹配接口（即返回匹配接口的可传递结束）。不返回重复的接口。 此方法搜索基类层次结构，返回每个类所实现的每个匹配接口，以及那些接口中的每一个所实现的所有匹配接口（即返回匹配接口的可传递结束）。不返回重复的接口。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则 FindInterfaces 搜索类型参数的约束中声明的所有接口，以及通过约束中声明的接口继承的所有接口。如果当前 Type 表示泛型类型的类型实参，则 FindInterfaces 搜索该类型实现的所有接口，而不管它们是否匹配那些约束。 如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则 FindInterfaces 搜索类型参数的约束中声明的所有接口，以及通过约束中声明的接口继承的所有接口。如果当前 Type 表示泛型类型的类型实参，则 FindInterfaces 搜索该类型实现的所有接口，而不管它们是否匹配那些约束。

说明 说明

即使在非泛型类型上，FindInterfaces 也可能会返回泛型接口。例如，某个非泛型类型可能实现了 IEnumerable<int>（在 Visual Basic 中为 IEnumerable(Of Integer)）。 即使在非泛型类型上，FindInterfaces 也可能会返回泛型接口。例如，某个非泛型类型可能实现了 IEnumerable<int>（在 Visual Basic 中为 IEnumerable(Of Integer)）。

下面的示例查找由指定的类型实现或继承的指定接口，然后显示这些接口名称。

Imports System
Imports System.Xml
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class MyFindInterfacesSample
    Public Shared Sub Main()
        Try
            Dim myXMLDoc As New XmlDocument()
            myXMLDoc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" _
                & "<title>Pride And Prejudice</title>" & "</book>")
            Dim myType As Type = myXMLDoc.GetType()

            ' Specify the TypeFilter delegate that compares the
            ' interfaces against filter criteria.
            Dim myFilter As New TypeFilter(AddressOf MyInterfaceFilter)
            Dim myInterfaceList() As String = _
                {"System.Collections.IEnumerable", _
                "System.Collections.ICollection"}
            Dim index As Integer
            For index = 0 To myInterfaceList.Length - 1
                Dim myInterfaces As Type() = _
                    myType.FindInterfaces(myFilter, myInterfaceList(index))
                If myInterfaces.Length > 0 Then
                    Console.WriteLine(ControlChars.Cr & _
                        "{0} implements the interface {1}.", _
                        myType, myInterfaceList(index))
                    Dim j As Integer
                    For j = 0 To myInterfaces.Length - 1
                        Console.WriteLine("Interfaces supported: {0}", _
                            myInterfaces(j).ToString())
                    Next j
                Else
                    Console.WriteLine(ControlChars.Cr & _
                        "{0} does not implement the interface {1}.", _
                        myType, myInterfaceList(index))
                End If
            Next index
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException: " & e.Message)
        Catch e As TargetInvocationException
            Console.WriteLine("TargetInvocationException: " & e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " & e.Message)
        End Try
    End Sub 'Main
    Public Shared Function MyInterfaceFilter(ByVal typeObj As Type, _
        ByVal criteriaObj As [Object]) As Boolean
        If typeObj.ToString() = criteriaObj.ToString() Then
            Return True
        Else
            Return False
        End If
    End Function 'MyInterfaceFilter
End Class 'MyFindInterfacesSample

using System;
using System.Xml;
using System.Reflection;

public class MyFindInterfacesSample
{
    public static void Main()
    {
        try
        {
            XmlDocument myXMLDoc = new XmlDocument();
            myXMLDoc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" + "</book>");
            Type myType = myXMLDoc.GetType();

            // Specify the TypeFilter delegate that compares the
            // interfaces against filter criteria.
            TypeFilter myFilter = new TypeFilter(MyInterfaceFilter);
            String[] myInterfaceList = new String[2]
                {"System.Collections.IEnumerable",
                "System.Collections.ICollection"};
            for(int index=0; index < myInterfaceList.Length; index++)
            {
                Type[] myInterfaces = myType.FindInterfaces(myFilter,
                    myInterfaceList[index]);
                if (myInterfaces.Length > 0)
                {
                    Console.WriteLine("\n{0} implements the interface {1}.",
                        myType, myInterfaceList[index]);
                    for(int j =0;j < myInterfaces.Length;j++)
                        Console.WriteLine("Interfaces supported: {0}.",
                            myInterfaces[j].ToString());
                }
                else
                    Console.WriteLine(
                        "\n{0} does not implement the interface {1}.",
                        myType,myInterfaceList[index]);
            }
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException: " + e.Message);
        }
        catch(TargetInvocationException e)
        {
            Console.WriteLine("TargetInvocationException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }

    public static bool MyInterfaceFilter(Type typeObj,Object criteriaObj)
    {
        if(typeObj.ToString() == criteriaObj.ToString())
            return true;
        else
            return false;
    }
}

#using <system.xml.dll>

using namespace System;
using namespace System::Xml;
using namespace System::Reflection;
public ref class MyFindInterfacesSample
{
public:
    static bool MyInterfaceFilter(Type^ typeObj, Object^ criteriaObj)
    {
        if(typeObj->ToString()->Equals(criteriaObj->ToString()))
            return true;
        else
            return false;
   }
};

int main()
{
    try
    {
        XmlDocument^ myXMLDoc = gcnew XmlDocument;
        myXMLDoc->LoadXml("<book genre='novel' ISBN='1-861001-57-5'>"
            + "<title>Pride And Prejudice</title> </book>");
        Type^ myType = myXMLDoc->GetType();

        // Specify the TypeFilter delegate that compares the interfaces
        // against filter criteria.
        TypeFilter^ myFilter = gcnew TypeFilter(
            MyFindInterfacesSample::MyInterfaceFilter);
        array<String^>^myInterfaceList = {"System.Collections.IEnumerable",
            "System.Collections.ICollection"};
        for(int index = 0; index < myInterfaceList->Length; index++)
        {
            array<Type^>^myInterfaces = myType->FindInterfaces(
                myFilter, myInterfaceList[index]);
            if(myInterfaces->Length > 0)
            {
                Console::WriteLine("\n{0} implements the interface {1}.",
                    myType, myInterfaceList[index]);
                for(int j = 0; j < myInterfaces->Length; j++)
                Console::WriteLine("Interfaces supported: {0}.",
                    myInterfaces[j]);
            }
            else
                Console::WriteLine(
                    "\n{0} does not implement the interface {1}.",
                    myType, myInterfaceList[index]);

        }
    }
    catch(ArgumentNullException^ e)
    {
        Console::WriteLine("ArgumentNullException: {0}", e->Message);
    }
    catch(TargetInvocationException^ e)
    {
        Console::WriteLine("TargetInvocationException: {0}", e->Message);
    }
    catch(Exception^ e)
    {
        Console::WriteLine("Exception: {0}", e->Message);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
Module
TypeFilter
GetInterface
GetInterfaces


Type ..::.FindMembers 方法

Type
.
.
::
.
FindMembers 方法
Type 类

返回指定成员类型的 MemberInfo 对象的筛选数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function FindMembers ( _
    memberType As MemberTypes, _
    bindingAttr As BindingFlags, _
    filter As MemberFilter, _
    filterCriteria As Object _
) As MemberInfo()
public virtual MemberInfo[] FindMembers(
    MemberTypes memberType,
    BindingFlags bindingAttr,
    MemberFilter filter,
    Object filterCriteria
)
public:
virtual array<MemberInfo^>^ FindMembers(
    MemberTypes memberType,
    BindingFlags bindingAttr,
    MemberFilter^ filter,
    Object^ filterCriteria
)
abstract FindMembers :
        memberType:MemberTypes *
        bindingAttr:BindingFlags *
        filter:MemberFilter *
        filterCriteria:Object -> MemberInfo[]
override FindMembers :
        memberType:MemberTypes *
        bindingAttr:BindingFlags *
        filter:MemberFilter *
        filterCriteria:Object -> MemberInfo[]

参数

memberType
类型： System.Reflection MemberTypes
指示要搜索的成员类型的 MemberTypes 对象。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
filter
类型： System.Reflection MemberFilter
执行比较的委托，如果当前被检查的成员匹配 filterCriteria，则返回 true；否则返回 false。可以使用该类提供的 FilterAttribute、FilterName 和 FilterNameIgnoreCase 委托。第一个委托使用 FieldAttributes、MethodAttributes 和 MethodImplAttributes 的字段作为搜索判据，另两个委托使用 String 对象作为搜索判据。 执行比较的委托，如果当前被检查的成员匹配 filterCriteria，则返回 true；否则返回 false。可以使用该类提供的 FilterAttribute、FilterName 和 FilterNameIgnoreCase 委托。第一个委托使用 FieldAttributes、MethodAttributes 和 MethodImplAttributes 的字段作为搜索判据，另两个委托使用 String 对象作为搜索判据。 执行比较的委托，如果当前被检查的成员匹配 filterCriteria，则返回 true；否则返回 false。可以使用该类提供的 FilterAttribute、FilterName 和 FilterNameIgnoreCase 委托。第一个委托使用 FieldAttributes、MethodAttributes 和 MethodImplAttributes 的字段作为搜索判据，另两个委托使用 String 对象作为搜索判据。
filterCriteria
类型： System Object
确定成员是否在 MemberInfo 对象数组中返回的搜索判据。
FieldAttributes、MethodAttributes 和 MethodImplAttributes 的字段可以和该类提供的 FilterAttribute 委托一起使用。

返回值

类型：
array<
System.Reflection MemberInfo
>
[]
()
[]

指定成员类型的 MemberInfo 对象的筛选数组。
- 或 -
如果当前 Type 没有匹配筛选判据的 memberType 类型成员，则为 MemberInfo 类型的空数组。

实现

异常 | 条件
ArgumentNullException | filter 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法可由派生类重写。

成员包括属性、方法、字段、事件等。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Instance，以便将实例成员包含在搜索中。

  • 指定 BindingFlags.Static，以便将静态成员包含在搜索中。

  • 指定 BindingFlags.Public 可在搜索中包含公共成员。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共成员（即私有成员、内部成员和受保护的成员）。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.DeclaredOnly，仅搜索 Type 上声明的成员，而不搜索被简单继承的成员。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

MemberType 的有效值在 MemberInfo 中定义。如果没有找到这样的成员，则返回空数组。 MemberType 的有效值在 MemberInfo 中定义。如果没有找到这样的成员，则返回空数组。

若要使用此方法获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 若要使用此方法获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 若要使用此方法获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

如果当前 Type 表示泛型类型或泛型方法的类型参数，则 FindMembers 处理由类型参数的类约束和接口约束声明的任何成员。

下面的示例在类中查找与指定搜索条件相匹配的所有成员，然后显示匹配的成员。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Class MyFindMembersClass

    Public Shared Sub Main()
        Dim objTest As New Object()
        Dim objType As Type = objTest.GetType()
        Dim arrayMemberInfo() As MemberInfo
        Try
            'Find all static or public methods in the Object
            'class that match the specified name.
            arrayMemberInfo = objType.FindMembers(MemberTypes.Method, _
                              BindingFlags.Public Or BindingFlags.Static _
                              Or BindingFlags.Instance, _
                              New MemberFilter(AddressOf DelegateToSearchCriteria), _
                              "ReferenceEquals")

            Dim index As Integer
            For index = 0 To arrayMemberInfo.Length - 1
                Console.WriteLine("Result of FindMembers -" + ControlChars.Tab + _
                               arrayMemberInfo(index).ToString() + ControlChars.Cr)
            Next index
        Catch e As Exception
            Console.WriteLine("Exception : " + e.ToString())
        End Try
    End Sub 'Main

    Public Shared Function DelegateToSearchCriteria _
                            (ByVal objMemberInfo As MemberInfo, _
                             ByVal objSearch As Object) As Boolean
        ' Compare the name of the member function with the filter criteria.
        If objMemberInfo.Name.ToString() = objSearch.ToString() Then
            Return True
        Else
            Return False
        End If
    End Function 'DelegateToSearchCriteria
End Class 'MyFindMembersClass

using System;
using System.Reflection;

class MyFindMembersClass
{
    public static void Main()
    {
        Object objTest = new Object();
        Type objType = objTest.GetType ();
        MemberInfo[] arrayMemberInfo;
        try
        {
            //Find all static or public methods in the Object class that match the specified name.
            arrayMemberInfo = objType.FindMembers(MemberTypes.Method,
                BindingFlags.Public | BindingFlags.Static| BindingFlags.Instance,
                new MemberFilter(DelegateToSearchCriteria),
                "ReferenceEquals");

            for(int index=0;index < arrayMemberInfo.Length ;index++)
                Console.WriteLine ("Result of FindMembers -\t"+ arrayMemberInfo[index].ToString() +"\n");
        }
        catch (Exception e)
        {
            Console.WriteLine ("Exception : " + e.ToString() );
        }
    }
    public static bool DelegateToSearchCriteria(MemberInfo objMemberInfo, Object objSearch)
    {
        // Compare the name of the member function with the filter criteria.
        if(objMemberInfo.Name.ToString() == objSearch.ToString())
            return true;
        else
            return false;
    }
}

using namespace System;
using namespace System::Reflection;
ref class MyFindMembersClass
{
public:
   static void Test()
   {
      Object^ objTest = gcnew Object;
      Type^ objType = objTest->GetType();
      array<MemberInfo^>^arrayMemberInfo;
      try
      {

         //Find all static or public methods in the Object class that match the specified name.
         arrayMemberInfo = objType->FindMembers( MemberTypes::Method, static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::Instance), gcnew MemberFilter( DelegateToSearchCriteria ), "ReferenceEquals" );
         for ( int index = 0; index < arrayMemberInfo->Length; index++ )
            Console::WriteLine( "Result of FindMembers -\t {0}", String::Concat( arrayMemberInfo[ index ], "\n" ) );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( "Exception : {0}", e );
      }

   }

   static bool DelegateToSearchCriteria( MemberInfo^ objMemberInfo, Object^ objSearch )
   {

      // Compare the name of the member function with the filter criteria.
      if ( objMemberInfo->Name->Equals( objSearch->ToString() ) )
            return true;
      else
            return false;
   }

};

int main()
{
   MyFindMembersClass::Test();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
MemberInfo
BindingFlags
DefaultBinder
GetMember
GetMembers
GetDefaultMembers


Type ..::.GetArrayRank 方法

Type
.
.
::
.
GetArrayRank 方法
Type 类

获取 Array 中的维数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetArrayRank As Integer
public virtual int GetArrayRank()
public:
virtual int GetArrayRank()
abstract GetArrayRank : unit -> int
override GetArrayRank : unit -> int

返回值

类型： System Int32
包含当前 Type 中维数的 Int32。

实现

异常 | 条件
NotSupportedException | 此方法的功能在基类中不受支持，而必须在派生类中实现。
ArgumentException | 当前 Type 不是数组。

下面的示例显示数组中的维数。

Imports System
Imports Microsoft.VisualBasic

Class MyArrayRankSample
    Public Shared Sub Main()
        Try
            Dim myArray(,,) As Integer = {{{12, 2, 35}, {300, 78, 33}}, {{92, 42, 135}, {30, 7, 3}}}
            Dim myType As Type = myArray.GetType()
            Console.WriteLine("Contents of myArray: {{{12,2,35},{300,78,33}},{{92,42,135},{30,7,3}}}")
            Console.WriteLine("myArray has {0} dimensions.", myType.GetArrayRank())
        Catch e As NotSupportedException
            Console.WriteLine("NotSupportedException raised.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As Exception
            Console.WriteLine("Exception raised.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        End Try
    End Sub 'Main
End Class 'MyArrayRankSample

using System;

class MyArrayRankSample
{
    public static void Main()
    {
        try
        {
            int[,,] myArray = new int[,,] {{{12,2,35},{300,78,33}},{{92,42,135},{30,7,3}}};
            Type myType = myArray.GetType();

            Console.WriteLine("Contents of myArray: {{{12,2,35},{300,78,33}},{{92,42,135},{30,7,3}}}");
            Console.WriteLine("myArray has {0} dimensions.", myType.GetArrayRank());
        }
        catch(NotSupportedException e)
        {
            Console.WriteLine("NotSupportedException raised.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception raised.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
    }
}

using namespace System;
int main()
{
   try
   {
      array<Int32, 3>^myArray = gcnew array<Int32,3>(3,4,5);
      Type^ myType = myArray->GetType();
      Console::WriteLine( "myArray has {0} dimensions.", myType->GetArrayRank() );
   }
   catch ( NotSupportedException^ e )
   {
      Console::WriteLine( "NotSupportedException raised." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception raised." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
Array
Rank


Type ..::.GetAttributeFlagsImpl 方法

Type
.
.
::
.
GetAttributeFlagsImpl 方法
Type 类

当在派生类中重写时，实现 Attributes 属性，并获取指示与 Type 关联的特性的位屏蔽。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function GetAttributeFlagsImpl As TypeAttributes
protected abstract TypeAttributes GetAttributeFlagsImpl()
protected:
virtual TypeAttributes GetAttributeFlagsImpl() abstract
abstract GetAttributeFlagsImpl : unit -> TypeAttributes

返回值

类型： System.Reflection TypeAttributes
表示 Type 的特性集的 TypeAttributes 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
Attributes
TypeAttributes


Type ..::.GetConstructor 方法

Type
.
.
::
.
GetConstructor 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的特定构造函数。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetConstructor 方法 ( array<Type >[]()[])

Type
.
.
::
.
GetConstructor 方法 (
array<
Type
>
[]
()
[]
)
Type 类

搜索其参数与指定数组中的类型匹配的公共实例构造函数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Function GetConstructor ( _
    types As Type() _
) As ConstructorInfo
[ComVisibleAttribute(true)]
public ConstructorInfo GetConstructor(
    Type[] types
)
[ComVisibleAttribute(true)]
public:
virtual ConstructorInfo^ GetConstructor(
    array<Type^>^ types
) sealed
[<ComVisibleAttribute(true)>]
abstract GetConstructor :
        types:Type[] -> ConstructorInfo
[<ComVisibleAttribute(true)>]
override GetConstructor :
        types:Type[] -> ConstructorInfo

参数

types
类型：
array<
System Type
>
[]
()
[]

表示需要的构造函数的参数个数、顺序和类型的 Type 对象的数组。
- 或 -
Type 对象的空数组，用于获取不带参数的构造函数。这样的空数组由 static 字段 Type..::.EmptyTypes 提供。 Type 对象的空数组，用于获取不带参数的构造函数。这样的空数组由 static 字段 Type..::.EmptyTypes 提供。

返回值

类型： System.Reflection ConstructorInfo
为表示某个公共实例构造函数（该构造函数的参数与参数类型数组中的类型匹配）的 ConstructorInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 中的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。

此方法重载寻找公共实例构造函数，并且不能用于获取类初始值设定项 (.cctor)。若要获取类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载寻找公共实例构造函数，并且不能用于获取类初始值设定项 (.cctor)。若要获取类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 此方法重载寻找公共实例构造函数，并且不能用于获取类初始值设定项 (.cctor)。若要获取类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载寻找公共实例构造函数，并且不能用于获取类初始值设定项 (.cctor)。若要获取类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

如果请求的构造函数是非公共的，则此方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo，并且其类型形参替换为相应的类型实参。如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法始终返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo，并且其类型形参替换为相应的类型实参。如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法始终返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例获取 MyClass 的类型，获取 ConstructorInfo 对象，然后显示构造函数签名。

Imports System
Imports System.Reflection
Imports System.Security
Imports Microsoft.VisualBasic

Public Class MyClass1

    Public Sub New()
    End Sub 'New

    Public Sub New(ByVal i As Integer)
    End Sub 'New

    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyClass1)
            Dim types(0) As Type
            types(0) = GetType(Int32)
            ' Get the constructor that takes an integer as a parameter.
            Dim constructorInfoObj As ConstructorInfo = myType.GetConstructor(types)
            If Not (constructorInfoObj Is Nothing) Then
                Console.WriteLine("The constructor of MyClass that takes an integer as a parameter is: ")
                Console.WriteLine(constructorInfoObj.ToString())
            Else
                Console.WriteLine("The constructor of MyClass that takes no " + "parameters is not available.")
            End If

        Catch e As Exception
            Console.WriteLine("Exception caught.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        End Try
    End Sub 'Main
End Class 'MyClass1

using System;
using System.Reflection;
using System.Security;

public class MyClass1
{
    public MyClass1(){}
    public MyClass1(int i){}

    public static void Main()
    {
        try
        {
            Type myType = typeof(MyClass1);
            Type[] types = new Type[1];
            types[0] = typeof(int);
            // Get the constructor that takes an integer as a parameter.
            ConstructorInfo constructorInfoObj = myType.GetConstructor(types);
            if (constructorInfoObj != null)
            {
                Console.WriteLine("The constructor of MyClass1 that takes an " +
                    "integer as a parameter is: ");
                Console.WriteLine(constructorInfoObj.ToString());
            }
            else
            {
                Console.WriteLine("The constructor of MyClass1 that takes an integer " +
                    "as a parameter is not available.");
            }
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception caught.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyClass1
{
public:
   MyClass1(){}

   MyClass1( int i ){}

};

int main()
{
   try
   {
      Type^ myType = MyClass1::typeid;
      array<Type^>^types = gcnew array<Type^>(1);
      types[ 0 ] = int::typeid;

      // Get the constructor that takes an integer as a parameter.
      ConstructorInfo^ constructorInfoObj = myType->GetConstructor( types );
      if ( constructorInfoObj != nullptr )
      {
         Console::WriteLine( "The constructor of MyClass1 that takes an integer as a parameter is: " );
         Console::WriteLine( constructorInfoObj );
      }
      else
      {
         Console::WriteLine( "The constructor of MyClass1 that takes an integer as a parameter is not available." );
      }
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception caught." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetConstructor 重载
System 命名空间
ConstructorInfo
DefaultBinder
GetConstructorImpl
GetConstructors


Type ..::.GetConstructor 方法 (BindingFlags, Binder, array<Type >[]()[], array<ParameterModifier >[]()[])

Type
.
.
::
.
GetConstructor 方法 (BindingFlags, Binder,
array<
Type
>
[]
()
[]
,
array<
ParameterModifier
>
[]
()
[]
)
Type 类

使用指定绑定约束搜索其参数与指定参数类型和修饰符匹配的构造函数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Function GetConstructor ( _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As ConstructorInfo
[ComVisibleAttribute(true)]
public ConstructorInfo GetConstructor(
    BindingFlags bindingAttr,
    Binder binder,
    Type[] types,
    ParameterModifier[] modifiers
)
[ComVisibleAttribute(true)]
public:
virtual ConstructorInfo^ GetConstructor(
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) sealed
[<ComVisibleAttribute(true)>]
abstract GetConstructor :
        bindingAttr:BindingFlags *
        binder:Binder *
        types:Type[] *
        modifiers:ParameterModifier[] -> ConstructorInfo
[<ComVisibleAttribute(true)>]
override GetConstructor :
        bindingAttr:BindingFlags *
        binder:Binder *
        types:Type[] *
        modifiers:ParameterModifier[] -> ConstructorInfo

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。
types
类型：
array<
System Type
>
[]
()
[]

Type 对象数组，表示构造函数要获取的参数的个数、顺序和类型。
- 或 -
获取不使用参数的构造函数的 Type 类型的空数组（即 Type[] types = new Type[0]）。
- 或 -
EmptyTypes.
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与参数类型数组中的相应元素关联的特性。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与参数类型数组中的相应元素关联的特性。默认的联编程序不处理此参数。

返回值

类型： System.Reflection ConstructorInfo
表示符合指定要求的构造函数的 ConstructorInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 中的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。 - 或 - types 和 modifiers 的长度不同。

如果不存在完全匹配项，binder 将尝试强制 types 数组中指定的参数类型以便选择一个匹配项。如果 binder 无法选择匹配项，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 如果不存在完全匹配项，binder 将尝试强制 types 数组中指定的参数类型以便选择一个匹配项。如果 binder 无法选择匹配项，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下列 BindingFlags 筛选标志可用于定义要包含在搜索中的构造函数：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共构造函数。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共构造函数（即私有构造函数、内部构造函数和受保护的构造函数）。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

若要使用此方法重载获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 若要使用此方法重载获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 若要使用此方法重载获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo，并且其类型形参替换为相应的类型实参。如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法始终返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo，并且其类型形参替换为相应的类型实参。如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法始终返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的程序获取 MyClass1 类的类型，获取与指定绑定标志相匹配的 ConstructorInfo 对象，然后显示该构造函数的签名。

Imports System
Imports System.Reflection
Imports System.Security

Public Class MyClass1
    Public Sub New(ByVal i As Integer)
    End Sub 'New

    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyClass1)
            Dim types(0) As Type
            types(0) = GetType(Integer)
            ' Get the constructor that is public and takes an integer parameter.
            Dim constructorInfoObj As ConstructorInfo = _
                     myType.GetConstructor(BindingFlags.Instance Or _
                     BindingFlags.Public, Nothing, types, Nothing)
            If Not (constructorInfoObj Is Nothing) Then
                Console.WriteLine("The constructor of MyClass1 that is " + _
                               "public and takes an integer as a parameter is ")
                Console.WriteLine(constructorInfoObj.ToString())
            Else
                Console.WriteLine("The constructor of MyClass1 that is " + _
                  "public and takes an integer as a parameter is not available.")
            End If
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException: " + e.Message)
        Catch e As ArgumentException
            Console.WriteLine("ArgumentException: " + e.Message)
        Catch e As SecurityException
            Console.WriteLine("SecurityException: " + e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message)
        End Try
    End Sub
End Class

using System;
using System.Reflection;
using System.Security;

public class MyClass1
{
    public MyClass1(int i){}
    public static void Main()
    {
        try
        {
            Type myType = typeof(MyClass1);
            Type[] types = new Type[1];
            types[0] = typeof(int);
            // Get the constructor that is public and takes an integer parameter.
            ConstructorInfo constructorInfoObj = myType.GetConstructor(
                BindingFlags.Instance | BindingFlags.Public, null, types, null);
            if (constructorInfoObj != null )
            {
                Console.WriteLine("The constructor of MyClass1 that is public " +
                    "and takes an integer as a parameter is:");
                Console.WriteLine(constructorInfoObj.ToString());
            }
            else
            {
                Console.WriteLine("The constructor of the MyClass1 that is public " +
                    "and takes an integer as a parameter is not available.");
            }
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException: " + e.Message);
        }
        catch(ArgumentException e)
        {
            Console.WriteLine("ArgumentException: " + e.Message);
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyClass1
{
public:
   MyClass1( int i ){}

};

int main()
{
   try
   {
      Type^ myType = MyClass1::typeid;
      array<Type^>^types = gcnew array<Type^>(1);
      types[ 0 ] = int::typeid;

      // Get the constructor that is public and takes an integer parameter.
      ConstructorInfo^ constructorInfoObj = myType->GetConstructor( static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public), nullptr, types, nullptr );
      if ( constructorInfoObj != nullptr )
      {
         Console::WriteLine( "The constructor of MyClass1 that is public and takes an integer as a parameter is:" );
         Console::WriteLine( constructorInfoObj );
      }
      else
      {
         Console::WriteLine( "The constructor of the MyClass1 that is public and takes an integer as a parameter is not available." );
      }
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "ArgumentNullException: {0}", e->Message );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( "ArgumentException: {0}", e->Message );
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "SecurityException: {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetConstructor 重载
System 命名空间
ConstructorInfo
BindingFlags
Binder
DefaultBinder
ParameterModifier
GetConstructorImpl
GetConstructors


Type ..::.GetConstructor 方法 (BindingFlags, Binder, CallingConventions, array<Type >[]()[], array<ParameterModifier >[]()[])

Type
.
.
::
.
GetConstructor 方法 (BindingFlags, Binder, CallingConventions,
array<
Type
>
[]
()
[]
,
array<
ParameterModifier
>
[]
()
[]
)
Type 类

用指定绑定约束和指定调用约定，搜索其参数与指定参数类型及修饰符匹配的构造函数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Function GetConstructor ( _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    callConvention As CallingConventions, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As ConstructorInfo
[ComVisibleAttribute(true)]
public ConstructorInfo GetConstructor(
    BindingFlags bindingAttr,
    Binder binder,
    CallingConventions callConvention,
    Type[] types,
    ParameterModifier[] modifiers
)
[ComVisibleAttribute(true)]
public:
virtual ConstructorInfo^ GetConstructor(
    BindingFlags bindingAttr,
    Binder^ binder,
    CallingConventions callConvention,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) sealed
[<ComVisibleAttribute(true)>]
abstract GetConstructor :
        bindingAttr:BindingFlags *
        binder:Binder *
        callConvention:CallingConventions *
        types:Type[] *
        modifiers:ParameterModifier[] -> ConstructorInfo
[<ComVisibleAttribute(true)>]
override GetConstructor :
        bindingAttr:BindingFlags *
        binder:Binder *
        callConvention:CallingConventions *
        types:Type[] *
        modifiers:ParameterModifier[] -> ConstructorInfo

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。
callConvention
类型： System.Reflection CallingConventions
CallingConventions 对象，用于指定要使用的一套规则，这些规则涉及参数的顺序和布局、传递返回值的方式、用于参数的寄存器和清理堆栈的方式。
types
类型：
array<
System Type
>
[]
()
[]

Type 对象数组，表示构造函数要获取的参数的个数、顺序和类型。
- 或 -
获取不使用参数的构造函数的 Type 类型的空数组（即 Type[] types = new Type[0]）。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。

返回值

类型： System.Reflection ConstructorInfo
表示符合指定要求的构造函数的 ConstructorInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 中的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。 - 或 - types 和 modifiers 的长度不同。

虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

如果不存在完全匹配项，binder 将尝试强制 types 数组中指定的参数类型以便选择一个匹配项。如果 binder 无法选择匹配项，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 如果不存在完全匹配项，binder 将尝试强制 types 数组中指定的参数类型以便选择一个匹配项。如果 binder 无法选择匹配项，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下列 BindingFlags 筛选标志可用于定义要包含在搜索中的构造函数：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共构造函数。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共构造函数（即私有构造函数、内部构造函数和受保护的构造函数）。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

若要使用此方法获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 若要使用此方法获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 若要使用此方法获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo，并且其类型形参替换为相应的类型实参。如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法始终返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo，并且其类型形参替换为相应的类型实参。如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法始终返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例获取 MyClass1 的类型，获取与指定的绑定标志相匹配的 ConstructorInfo 对象，然后显示构造函数签名。

Public Class MyClass1
    Public Sub New(ByVal i As Integer)
    End Sub
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyClass1)
            Dim types(0) As Type
            types(0) = GetType(Integer)
            ' Get the public instance constructor that takes an integer parameter.
            Dim constructorInfoObj As ConstructorInfo = _
                        myType.GetConstructor(BindingFlags.Instance Or _
                        BindingFlags.Public, Nothing, _
                        CallingConventions.HasThis, types, Nothing)
            If Not (constructorInfoObj Is Nothing) Then
                Console.WriteLine("The constructor of MyClass1 that " + _
                                  "is a public instance method and takes an " + _
                                  "integer as a parameter is: ")
                Console.WriteLine(constructorInfoObj.ToString())
            Else
                Console.WriteLine("The constructor MyClass1 that " + _
                                  "is a public instance method and takes an " + _
                                  "integer as a parameter is not available.")
            End If
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException: " + e.Message)
        Catch e As ArgumentException
            Console.WriteLine("ArgumentException: " + e.Message)
        Catch e As SecurityException
            Console.WriteLine("SecurityException: " + e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message)
        End Try
    End Sub
End Class

using System;
using System.Reflection;
using System.Security;

public class MyClass1
{
    public MyClass1(int i){}
    public static void Main()
    {
        try
        {
            Type  myType = typeof(MyClass1);
            Type[] types = new Type[1];
            types[0] = typeof(int);
            // Get the public instance constructor that takes an integer parameter.
            ConstructorInfo constructorInfoObj = myType.GetConstructor(
                BindingFlags.Instance | BindingFlags.Public, null,
                CallingConventions.HasThis, types, null);
            if(constructorInfoObj != null)
            {
                Console.WriteLine("The constructor of MyClass1 that is a public " +
                    "instance method and takes an integer as a parameter is: ");
                Console.WriteLine(constructorInfoObj.ToString());
            }
            else
            {
                Console.WriteLine("The constructor of MyClass1 that is a public instance " +
                    "method and takes an integer as a parameter is not available.");
            }
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException: " + e.Message);
        }
        catch(ArgumentException e)
        {
            Console.WriteLine("ArgumentException: " + e.Message);
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyClass1
{
public:
   MyClass1( int i ){}

};

int main()
{
   try
   {
      Type^ myType = MyClass1::typeid;
      array<Type^>^types = gcnew array<Type^>(1);
      types[ 0 ] = int::typeid;

      // Get the public instance constructor that takes an integer parameter.
      ConstructorInfo^ constructorInfoObj = myType->GetConstructor( static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public), nullptr, CallingConventions::HasThis, types, nullptr );
      if ( constructorInfoObj != nullptr )
      {
         Console::WriteLine( "The constructor of MyClass1 that is a public instance method and takes an integer as a parameter is: " );
         Console::WriteLine( constructorInfoObj );
      }
      else
      {
         Console::WriteLine( "The constructor of MyClass1 that is a public instance method and takes an integer as a parameter is not available." );
      }
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "ArgumentNullException: {0}", e->Message );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( "ArgumentException: {0}", e->Message );
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "SecurityException: {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetConstructor 重载
System 命名空间
ConstructorInfo
BindingFlags
Binder
DefaultBinder
CallingConventions
ParameterModifier
GetConstructorImpl
GetConstructors


Type ..::.GetConstructorImpl 方法

Type
.
.
::
.
GetConstructorImpl 方法
Type 类

当在派生类中重写时，使用指定的绑定约束和指定的调用约定搜索其参数与指定的参数类型和修饰符匹配的构造函数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function GetConstructorImpl ( _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    callConvention As CallingConventions, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As ConstructorInfo
protected abstract ConstructorInfo GetConstructorImpl(
    BindingFlags bindingAttr,
    Binder binder,
    CallingConventions callConvention,
    Type[] types,
    ParameterModifier[] modifiers
)
protected:
virtual ConstructorInfo^ GetConstructorImpl(
    BindingFlags bindingAttr,
    Binder^ binder,
    CallingConventions callConvention,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) abstract
abstract GetConstructorImpl :
        bindingAttr:BindingFlags *
        binder:Binder *
        callConvention:CallingConventions *
        types:Type[] *
        modifiers:ParameterModifier[] -> ConstructorInfo

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。
callConvention
类型： System.Reflection CallingConventions
CallingConventions 对象，用于指定要使用的一套规则，这些规则涉及参数的顺序和布局、传递返回值的方式、用于参数的寄存器和清理堆栈的方式。
types
类型：
array<
System Type
>
[]
()
[]

Type 对象数组，表示构造函数要获取的参数的个数、顺序和类型。
- 或 -
获取不使用参数的构造函数的 Type 类型的空数组（即 Type[] types = new Type[0]）。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。

返回值

类型： System.Reflection ConstructorInfo
表示符合指定要求的构造函数的 ConstructorInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 中的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。 - 或 - types 和 modifiers 的长度不同。

虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

如果不存在完全匹配项，binder 将尝试强制 types 数组中指定的参数类型以便选择一个匹配项。如果 binder 无法选择匹配项，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 如果不存在完全匹配项，binder 将尝试强制 types 数组中指定的参数类型以便选择一个匹配项。如果 binder 无法选择匹配项，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下列 BindingFlags 筛选标志可用于定义要包含在搜索中的构造函数：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共构造函数。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共构造函数（即私有构造函数、内部构造函数和受保护的构造函数）。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

此方法实现 GetConstructor。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
ConstructorInfo
BindingFlags
Binder
DefaultBinder
CallingConventions
ParameterModifier
GetConstructor
GetConstructors


Type ..::.GetConstructors 方法

Type
.
.
::
.
GetConstructors 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的构造函数。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetConstructors 方法

Type
.
.
::
.
GetConstructors 方法
Type 类

返回为当前 Type 定义的所有公共构造函数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Function GetConstructors As ConstructorInfo()
[ComVisibleAttribute(true)]
public ConstructorInfo[] GetConstructors()
[ComVisibleAttribute(true)]
public:
virtual array<ConstructorInfo^>^ GetConstructors() sealed
[<ComVisibleAttribute(true)>]
abstract GetConstructors : unit -> ConstructorInfo[]
[<ComVisibleAttribute(true)>]
override GetConstructors : unit -> ConstructorInfo[]

返回值

类型：
array<
System.Reflection ConstructorInfo
>
[]
()
[]

ConstructorInfo 对象数组，表示当前 Type 定义的所有公共实例构造函数，但不包括类型初始值设定项（静态构造函数）。如果没有为当前 Type 定义公共实例构造函数，或者当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则返回 ConstructorInfo 类型的空数组。 ConstructorInfo 对象数组，表示当前 Type 定义的所有公共实例构造函数，但不包括类型初始值设定项（静态构造函数）。如果没有为当前 Type 定义公共实例构造函数，或者当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则返回 ConstructorInfo 类型的空数组。

实现

GetConstructors 方法不按特定的顺序（如声明顺序）返回构造函数。您的代码一定不能依赖于构造函数的返回顺序，因为该顺序可以改变。 GetConstructors 方法不按特定的顺序（如声明顺序）返回构造函数。您的代码一定不能依赖于构造函数的返回顺序，因为该顺序可以改变。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

此方法重载使用 BindingFlags..::.Public 调用 GetConstructors(BindingFlags) 方法重载 |BindingFlags..::.Instance（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.Instance）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 此方法重载使用 BindingFlags..::.Public 调用 GetConstructors(BindingFlags) 方法重载 |BindingFlags..::.Instance（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.Instance）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载使用 BindingFlags..::.Public 调用 GetConstructors(BindingFlags) 方法重载 |BindingFlags..::.Instance（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.Instance）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载使用 BindingFlags..::.Public 调用 GetConstructors(BindingFlags) 方法重载 |BindingFlags..::.Instance（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.Instance）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 此方法重载使用 BindingFlags..::.Public 调用 GetConstructors(BindingFlags) 方法重载 |BindingFlags..::.Instance（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.Instance）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载使用 BindingFlags..::.Public 调用 GetConstructors(BindingFlags) 方法重载 |BindingFlags..::.Instance（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.Instance）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo 对象，并且其类型形参替换为相应的类型实参。例如，如果类 C<T> 有一个构造函数 C(T t1)（在 Visual Basic 中为 Sub New(ByVal t1 As T)），那么调用 C<int> 上的 GetConstructors 将返回在 C# 中表示 C(int t1)（在 Visual Basic 中为 Sub New(ByVal t1 As Integer)）的 ConstructorInfo。 如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo 对象，并且其类型形参替换为相应的类型实参。例如，如果类 C<T> 有一个构造函数 C(T t1)（在 Visual Basic 中为 Sub New(ByVal t1 As T)），那么调用 C<int> 上的 GetConstructors 将返回在 C# 中表示 C(int t1)（在 Visual Basic 中为 Sub New(ByVal t1 As Integer)）的 ConstructorInfo。

如果当前 Type 表示泛型类型形参，则 GetConstructors 方法将返回一个空数组。

此示例显示具有两个实例构造函数和一个静态构造函数的类中的 GetConstructors 重载的输出。

Imports System
Imports System.Reflection

Public Class t

    Public Sub New()
    End Sub

    Shared Sub New()
    End Sub

    Public Sub New(i As Integer)
    End Sub

    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(t).GetConstructors()
        Console.WriteLine(p.Length)

        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors();
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   static t(){}

   t( int /*i*/ ){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors();
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );

   }
}

该代码的输出为：

2

False

False

由于 GetConstructors()()() 重载仅使用 BindingFlags..::.Public 和 BindingFlags..::.Instance，所以该静态构造函数既不由 for 表达式计数，也不由 IsStatic 计算。

若要查找静态构造函数，请使用 GetConstructors(BindingFlags) 重载，并传递 BindingFlags..::.Public、BindingFlags..::.Static、BindingFlags..::.NonPublic 和 BindingFlags..::.Instance 的组合（逻辑 OR），如下面的代码示例所示：

Imports System
Imports System.Reflection

Public Class t

    Public Sub New()
    End Sub

    Shared Sub New()
    End Sub

    Public Sub New(i As Integer)
    End Sub

    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(T).GetConstructors( _
           BindingFlags.Public Or _
           BindingFlags.Static Or _
           BindingFlags.NonPublic Or _
           BindingFlags.Instance)
        Console.WriteLine(p.Length)

        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors(
           BindingFlags.Public | BindingFlags.Static |
           BindingFlags.NonPublic | BindingFlags.Instance);
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   t( int /*i*/ ){}

   static t(){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::NonPublic | BindingFlags::Instance) );
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );
   }
}

现在输出为：

3

False

True

False

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetConstructors 重载
System 命名空间
ConstructorInfo
GetConstructor


Type ..::.GetConstructors 方法 (BindingFlags)

Type
.
.
::
.
GetConstructors 方法 (BindingFlags)
Type 类

当在派生类中重写时，使用指定 BindingFlags 搜索为当前 Type 定义的构造函数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public MustOverride Function GetConstructors ( _
    bindingAttr As BindingFlags _
) As ConstructorInfo()
[ComVisibleAttribute(true)]
public abstract ConstructorInfo[] GetConstructors(
    BindingFlags bindingAttr
)
[ComVisibleAttribute(true)]
public:
virtual array<ConstructorInfo^>^ GetConstructors(
    BindingFlags bindingAttr
) abstract
[<ComVisibleAttribute(true)>]
abstract GetConstructors :
        bindingAttr:BindingFlags -> ConstructorInfo[]

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型：
array<
System.Reflection ConstructorInfo
>
[]
()
[]

表示为当前 Type 定义的匹配指定绑定约束的所有构造函数的 ConstructorInfo 对象数组，包括类型初始值设定项（如果定义的话）。在以下情况下返回 ConstructorInfo 类型的空数组：没有为当前 Type 定义构造函数，没有与绑定约束匹配的已定义构造函数，或者当前 Type 表示泛型类型或泛型方法的定义中的类型参数。 表示为当前 Type 定义的匹配指定绑定约束的所有构造函数的 ConstructorInfo 对象数组，包括类型初始值设定项（如果定义的话）。在以下情况下返回 ConstructorInfo 类型的空数组：没有为当前 Type 定义构造函数，没有与绑定约束匹配的已定义构造函数，或者当前 Type 表示泛型类型或泛型方法的定义中的类型参数。

实现

GetConstructors 方法不按特定的顺序（如声明顺序）返回构造函数。您的代码一定不能依赖于构造函数的返回顺序，因为该顺序可以改变。 GetConstructors 方法不按特定的顺序（如声明顺序）返回构造函数。您的代码一定不能依赖于构造函数的返回顺序，因为该顺序可以改变。

bindingAttr 可用来指定是只返回公共构造函数还是将公共构造函数和非公共构造函数都返回。

如果不存在完全匹配项，binder 将尝试强制 types 数组中指定的参数类型以便选择一个匹配项。如果 binder 无法选择匹配项，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 如果不存在完全匹配项，binder 将尝试强制 types 数组中指定的参数类型以便选择一个匹配项。如果 binder 无法选择匹配项，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下列 BindingFlags 筛选标志可用于定义要包含在搜索中的构造函数：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共构造函数。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共构造函数（即私有构造函数、内部构造函数和受保护的构造函数）。不返回基类的构造函数。 指定 BindingFlags.NonPublic 可在搜索中包含非公共构造函数（即私有构造函数、内部构造函数和受保护的构造函数）。不返回基类的构造函数。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

若要使用此方法重载获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 若要使用此方法重载获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 若要使用此方法重载获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo 对象，并且其类型形参替换为相应的类型实参。例如，如果类 C<T> 有一个构造函数 C(T t1)（在 Visual Basic 中为 Sub New(ByVal t1 As T)），那么调用 C<int> 上的 GetConstructors 将返回在 C# 中表示 C(int t1)（在 Visual Basic 中为 Sub New(ByVal t1 As Integer)）的 ConstructorInfo。 如果当前 Type 表示构造泛型类型，则此方法将返回 ConstructorInfo 对象，并且其类型形参替换为相应的类型实参。例如，如果类 C<T> 有一个构造函数 C(T t1)（在 Visual Basic 中为 Sub New(ByVal t1 As T)），那么调用 C<int> 上的 GetConstructors 将返回在 C# 中表示 C(int t1)（在 Visual Basic 中为 Sub New(ByVal t1 As Integer)）的 ConstructorInfo。

如果当前 Type 表示泛型类型形参，则 GetConstructors 方法将返回一个空数组。

此示例显示具有两个实例构造函数和一个静态构造函数的类中的 GetConstructors()()() 重载的输出。

Imports System
Imports System.Reflection

Public Class t

    Public Sub New()
    End Sub

    Shared Sub New()
    End Sub

    Public Sub New(i As Integer)
    End Sub

    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(t).GetConstructors()
        Console.WriteLine(p.Length)

        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors();
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   static t(){}

   t( int /*i*/ ){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors();
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );

   }
}

该代码的输出为：

2

False

False

由于 GetConstructors 重载仅使用 Public 和 Instance，所以该静态构造函数既不由 for 表达式计数，也不由 IsStatic 计算。

为了查找静态构造函数，可使用 GetConstructors 重载，并向它传递 BindingFlags..::.Public、BindingFlags..::.Static、BindingFlags..::.NonPublic、BindingFlags..::.Instance 的组合（逻辑或），如下面的代码示例所示：

Imports System
Imports System.Reflection

Public Class t

    Public Sub New()
    End Sub

    Shared Sub New()
    End Sub

    Public Sub New(i As Integer)
    End Sub

    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(T).GetConstructors( _
           BindingFlags.Public Or _
           BindingFlags.Static Or _
           BindingFlags.NonPublic Or _
           BindingFlags.Instance)
        Console.WriteLine(p.Length)

        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors(
           BindingFlags.Public | BindingFlags.Static |
           BindingFlags.NonPublic | BindingFlags.Instance);
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   t( int /*i*/ ){}

   static t(){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::NonPublic | BindingFlags::Instance) );
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );
   }
}

现在输出为：

3

False

True

False

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetConstructors 重载
System 命名空间
ConstructorInfo
BindingFlags
DefaultBinder
GetConstructor


Type ..::.GetCustomAttributes 方法

Type
.
.
::
.
GetCustomAttributes 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

在派生类中重写时，返回应用于此成员的自定义特性。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetDefaultMembers 方法

Type
.
.
::
.
GetDefaultMembers 方法
Type 类

搜索为设置了 DefaultMemberAttribute 的当前 Type 定义的成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetDefaultMembers As MemberInfo()
public virtual MemberInfo[] GetDefaultMembers()
public:
virtual array<MemberInfo^>^ GetDefaultMembers()
abstract GetDefaultMembers : unit -> MemberInfo[]
override GetDefaultMembers : unit -> MemberInfo[]

返回值

类型：
array<
System.Reflection MemberInfo
>
[]
()
[]

表示当前 Type 的所有默认成员的 MemberInfo 对象数组。
- 或 -
如果当前 Type 没有默认成员，则为 MemberInfo 类型的空数组。

实现

GetDefaultMembers 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。 GetDefaultMembers 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。

此方法可由派生类重写。

成员包括属性、方法、字段、事件等。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

如果当前 Type 表示构造泛型类型，则此方法将返回 MemberInfo 对象，并且其类型形参替换为相应的类型实参。例如，如果类 C<T> 具有一个返回 T 的属性 P，调用 C<int> 上的 GetDefaultMembers 在 C# 中将返回 int P（在 Visual Basic 中为 Property P As Integer）。 如果当前 Type 表示构造泛型类型，则此方法将返回 MemberInfo 对象，并且其类型形参替换为相应的类型实参。例如，如果类 C<T> 具有一个返回 T 的属性 P，调用 C<int> 上的 GetDefaultMembers 在 C# 中将返回 int P（在 Visual Basic 中为 Property P As Integer）。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的成员或 Object 的成员（如果没有类约束的话）。

下面的示例获取 MyClass 的默认成员信息，并显示这些默认成员。

Imports System
Imports System.Reflection
Imports System.IO
Imports Microsoft.VisualBasic

<DefaultMemberAttribute("Age")> Public Class [MyClass]

    Public Sub Name(ByVal s As String)
    End Sub 'Name

    Public ReadOnly Property Age() As Integer
        Get
            Return 20
        End Get
    End Property

    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType([MyClass])
            Dim memberInfoArray As MemberInfo() = myType.GetDefaultMembers()
            If memberInfoArray.Length > 0 Then
                Dim memberInfoObj As MemberInfo
                For Each memberInfoObj In memberInfoArray
                    Console.WriteLine("The default member name is: " + memberInfoObj.ToString())
                Next memberInfoObj
            Else
                Console.WriteLine("No default members are available.")
            End If
        Catch e As InvalidOperationException
            Console.WriteLine("InvalidOperationException: " + e.Message)
        Catch e As IOException
            Console.WriteLine("IOException: " + e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message)
        End Try
    End Sub 'Main
End Class '[MyClass]

using System;
using System.Reflection;
using System.IO;

[DefaultMemberAttribute("Age")]
public class MyClass
{
    public void Name(String s) {}
    public int Age
    {
        get
        {
            return 20;
        }
    }
    public static void Main()
    {
        try
        {
            Type  myType = typeof(MyClass);
            MemberInfo[] memberInfoArray = myType.GetDefaultMembers();
            if (memberInfoArray.Length > 0)
            {
                foreach(MemberInfo memberInfoObj in memberInfoArray)
                {
                    Console.WriteLine("The default member name is: " + memberInfoObj.ToString());
                }
            }
            else
            {
                Console.WriteLine("No default members are available.");
            }
        }
        catch(InvalidOperationException e)
        {
            Console.WriteLine("InvalidOperationException: " + e.Message);
        }
        catch(IOException e)
        {
            Console.WriteLine("IOException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::IO;

[DefaultMemberAttribute("Age")]
public ref class MyClass
{
public:
   void Name( String^ s ){}

   property int Age
   {
      int get()
      {
         return 20;
      }

   }

};

int main()
{
   try
   {
      Type^ myType = MyClass::typeid;
      array<MemberInfo^>^memberInfoArray = myType->GetDefaultMembers();
      if ( memberInfoArray->Length > 0 )
      {
         System::Collections::IEnumerator^ myEnum = memberInfoArray->GetEnumerator();
         while ( myEnum->MoveNext() )
         {
            MemberInfo^ memberInfoObj = safe_cast<MemberInfo^>(myEnum->Current);
            Console::WriteLine( "The default member name is: {0}", memberInfoObj );
         }
      }
      else
      {
         Console::WriteLine( "No default members are available." );
      }
   }
   catch ( InvalidOperationException^ e )
   {
      Console::WriteLine( "InvalidOperationException: {0}", e->Message );
   }
   catch ( IOException^ e )
   {
      Console::WriteLine( "IOException: {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
MemberInfo
DefaultMemberAttribute
GetMember
GetMembers
FindMembers


Type ..::.GetElementType 方法

Type
.
.
::
.
GetElementType 方法
Type 类

当在派生类中重写时，返回当前数组、指针或引用类型包含的或引用的对象的 Type。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetElementType As Type
public abstract Type GetElementType()
public:
virtual Type^ GetElementType() abstract
abstract GetElementType : unit -> Type

返回值

类型： System Type
当前数组、指针或引用类型包含或引用的对象的 Type；如果当前 Type 不是数组或指针，不是按引用传递，或者表示泛型类型或泛型方法的定义中的泛型类型或类型参数，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

对于 Array 类，此方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例说明如何使用 GetElementType 方法。

Imports System

Class TestGetElementType

    Public Shared Sub Main()
        Dim array As Integer() = {1, 2, 3}
        Dim t As Type = array.GetType()
        Dim t2 As Type = t.GetElementType()
        Console.WriteLine("The element type of {0} is {1}.", array, t2.ToString())
        Dim newMe As New TestGetElementType()
        t = newMe.GetType()
        t2 = t.GetElementType()
        If t2 Is Nothing Then
            Console.WriteLine("The element type of {0} is {1}.", newMe, "null")
        Else
            Console.WriteLine("The element type of {0} is {1}.", newMe, t2.ToString())
        End If
    End Sub 'Main
End Class 'TestGetElementType

' This code produces the following output:
'
'The element type of System.Int32[] is System.Int32.
'The element type of TestGetElementType is null.

using System;
class TestGetElementType
{
    public static void Main()
    {
        int[] array = {1,2,3};
        Type t = array.GetType();
        Type t2 = t.GetElementType();
        Console.WriteLine("The element type of {0} is {1}.",array, t2.ToString());
        TestGetElementType newMe = new TestGetElementType();
        t = newMe.GetType();
        t2 = t.GetElementType();
        Console.WriteLine("The element type of {0} is {1}.", newMe, t2==null? "null" : t2.ToString());
    }
}

/* This code produces the following output:

The element type of System.Int32[] is System.Int32.
The element type of TestGetElementType is null.
 */

using namespace System;
public ref class TestGetElementType{};

int main()
{
   array<Int32>^array = {1,2,3};
   Type^ t = array->GetType();
   Type^ t2 = t->GetElementType();
   Console::WriteLine( "The element type of {0} is {1}.", array, t2 );
   TestGetElementType^ newMe = gcnew TestGetElementType;
   t = newMe->GetType();
   t2 = t->GetElementType();
   Console::WriteLine( "The element type of {0} is {1}.", newMe, t2 == nullptr ? "null" : t2->ToString() );
}

/* This code produces the following output:

The element type of System.Int32[] is System.Int32.
The element type of TestGetElementType is null.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
HasElementType


Type ..::.GetEnumName 方法

Type
.
.
::
.
GetEnumName 方法
Type 类

返回当前枚举类型中具有指定值的常数的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumName ( _
    value As Object _
) As String
public virtual string GetEnumName(
    Object value
)
public:
virtual String^ GetEnumName(
    Object^ value
)
abstract GetEnumName :
        value:Object -> string
override GetEnumName :
        value:Object -> string

参数

value
类型： System Object
要检索其名称的值。

返回值

类型： System String
当前枚举类型中具有指定值的成员的名称；如果未找到这样的常数，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentException | 当前类型不是枚举。 - 或 - value 不是当前类型，也不具有与当前类型相同的基础类型。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetEnumNames 方法

Type
.
.
::
.
GetEnumNames 方法
Type 类

返回当前枚举类型中各个成员的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumNames As String()
public virtual string[] GetEnumNames()
public:
virtual array<String^>^ GetEnumNames()
abstract GetEnumNames : unit -> string[]
override GetEnumNames : unit -> string[]

返回值

类型：
array<
System String
>
[]
()
[]

一个数组，其中包含枚举中各个成员的名称。
异常 | 条件
ArgumentException | 当前类型不是枚举。

返回值数组的元素按枚举常量的值排序。如果数组包含具有相同值的枚举常量，则不指定其相应名称的顺序。 返回值数组的元素按枚举常量的值排序。如果数组包含具有相同值的枚举常量，则不指定其相应名称的顺序。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetEnumUnderlyingType 方法

Type
.
.
::
.
GetEnumUnderlyingType 方法
Type 类

返回当前枚举类型的基础类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumUnderlyingType As Type
public virtual Type GetEnumUnderlyingType()
public:
virtual Type^ GetEnumUnderlyingType()
abstract GetEnumUnderlyingType : unit -> Type
override GetEnumUnderlyingType : unit -> Type

返回值

类型： System Type
当前枚举的基础数据类型。
异常 | 条件
ArgumentException | 当前类型不是枚举。 - 或 - 枚举类型是无效，因为它包含多个实例字段。

默认情况下，C# 和 Visual Basic 中枚举的基础类型为 Int32。可以指定其他整数类型。 默认情况下，C# 和 Visual Basic 中枚举的基础类型为 Int32。可以指定其他整数类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetEnumValues 方法

Type
.
.
::
.
GetEnumValues 方法
Type 类

返回当前枚举类型中各个常数的值组成的数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumValues As Array
public virtual Array GetEnumValues()
public:
virtual Array^ GetEnumValues()
abstract GetEnumValues : unit -> Array
override GetEnumValues : unit -> Array

返回值

类型： System Array
包含值的数组。该数组的元素按枚举常数的二进制值排序。 包含值的数组。该数组的元素按枚举常数的二进制值排序。
异常 | 条件
ArgumentException | 当前类型不是枚举。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetEvent 方法

Type
.
.
::
.
GetEvent 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取由当前 Type 声明或继承的特定事件。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetEvent 方法 (String)

Type
.
.
::
.
GetEvent 方法 (String)
Type 类

返回表示指定的公共事件的 EventInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetEvent ( _
    name As String _
) As EventInfo
public EventInfo GetEvent(
    string name
)
public:
virtual EventInfo^ GetEvent(
    String^ name
) sealed
abstract GetEvent :
        name:string -> EventInfo
override GetEvent :
        name:string -> EventInfo

参数

name
类型： System String
String，包含由当前的 Type 声明或继承的事件的名称。

返回值

类型： System.Reflection EventInfo
如找到，则为表示由当前 Type 声明或继承的指定公共事件的 EventInfo 对象；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

对 name 的搜索区分大小写。搜索范围包括公共静态和公共实例事件。 对 name 的搜索区分大小写。搜索范围包括公共静态和公共实例事件。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

如果当前 Type 表示构造泛型类型，则此方法将返回 EventInfo，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的事件。

下面的示例创建一个 EventInfo 对象，并获取指定事件的按钮类的事件。

Imports System
Imports System.Reflection
Imports System.Security
Imports Microsoft.VisualBasic

' Compile this sample using the following command line:
' vbc type_getevent.vb /r:"System.Windows.Forms.dll" /r:"System.dll"

Class MyEventExample
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(System.Windows.Forms.Button)
            Dim myEvent As EventInfo = myType.GetEvent("Click")
            If Not (myEvent Is Nothing) Then
                Console.WriteLine(ControlChars.Cr + "Looking for the Click event in the Button class.")
                Console.WriteLine(ControlChars.Cr + myEvent.ToString())
            Else
                Console.WriteLine("The Click event is not available with the Button class.")
            End If
        Catch e As SecurityException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As Exception
            Console.WriteLine("The following exception was raised : {0}", e.Message)
        End Try
    End Sub 'Main
End Class 'MyEventExample

using System;
using System.Reflection;
using System.Security;

class MyEventExample
{
    public static void Main()
    {
        try
        {

            Type myType = typeof(System.Windows.Forms.Button);
            EventInfo myEvent = myType.GetEvent("Click");
            if(myEvent != null)
            {
                Console.WriteLine("Looking for the Click event in the Button class.");
                Console.WriteLine(myEvent.ToString());
            }
            else
                Console.WriteLine("The Click event is not available in the Button class.");
        }
        catch(SecurityException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("The following exception was raised : {0}",e.Message);
        }
    }
}

#using <system.dll>
#using <system.windows.forms.dll>
#using <system.drawing.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Security;

int main()
{
   try
   {
      Type^ myType = System::Windows::Forms::Button::typeid;
      EventInfo^ myEvent = myType->GetEvent( "Click" );
      if ( myEvent != nullptr )
      {
         Console::WriteLine( "Looking for the Click event in the Button class." );
         Console::WriteLine( myEvent );
      }
      else
            Console::WriteLine( "The Click event is not available in the Button class." );
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "The following exception was raised : {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetEvent 重载
System 命名空间
EventInfo
String
DefaultBinder
GetEvents


Type ..::.GetEvent 方法 (String, BindingFlags)

Type
.
.
::
.
GetEvent 方法 (String, BindingFlags)
Type 类

当在派生类中重写时，使用指定绑定约束，返回表示指定事件的 EventInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetEvent ( _
    name As String, _
    bindingAttr As BindingFlags _
) As EventInfo
public abstract EventInfo GetEvent(
    string name,
    BindingFlags bindingAttr
)
public:
virtual EventInfo^ GetEvent(
    String^ name,
    BindingFlags bindingAttr
) abstract
abstract GetEvent :
        name:string *
        bindingAttr:BindingFlags -> EventInfo

参数

name
类型： System String
String，包含由当前的 Type 声明或继承的事件的名称。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System.Reflection EventInfo
表示由当前 Type 声明或继承的指定事件的 EventInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的事件：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共事件。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共事件（即私有事件、内部事件和受保护的事件）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，表示仅搜索在 Type 上声明的事件，而不搜索被简单继承的事件。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

如果当前 Type 表示构造泛型类型，则此方法将返回 EventInfo，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的事件。

下面的代码示例使用 GetEvent(String, BindingFlags) 方法搜索公共或非公共事件的类型，该事件名称为“Click”且不为 static（在 Visual Basic 中为 Shared）。

Imports System
Imports System.Reflection
Imports System.Security
Imports Microsoft.VisualBasic

' Compile this sample using the following command line:
' vbc type_getevent.vb /r:"System.Windows.Forms.dll" /r:"System.dll"

Class MyEventExample
    Public Shared Sub Main()
        Try
            ' Creates a bitmask comprising  BindingFlags.
            Dim myBindingFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public _
                                                 Or BindingFlags.NonPublic
            Dim myTypeBindingFlags As Type = GetType(System.Windows.Forms.Button)
            Dim myEventBindingFlags As EventInfo = myTypeBindingFlags.GetEvent("Click", myBindingFlags)
            If myEventBindingFlags IsNot Nothing Then
                Console.WriteLine("Looking for the Click event in the Button class with the specified BindingFlags.")
                Console.WriteLine(myEventBindingFlags.ToString())
            Else
                Console.WriteLine("The Click event is not available with the Button class.")
            End If
        Catch e As SecurityException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As Exception
            Console.WriteLine("The following exception was raised : {0}", e.Message)
        End Try
    End Sub 'Main
End Class 'MyEventExample

using System;
using System.Reflection;
using System.Security;

class MyEventExample
{
    public static void Main()
    {
        try
        {

            // Creates a bitmask based on BindingFlags.
            BindingFlags myBindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
            Type myTypeBindingFlags = typeof(System.Windows.Forms.Button);
            EventInfo myEventBindingFlags = myTypeBindingFlags.GetEvent("Click", myBindingFlags);
            if(myEventBindingFlags != null)
            {
                Console.WriteLine("Looking for the Click event in the Button class with the specified BindingFlags.");
                Console.WriteLine(myEventBindingFlags.ToString());
            }
            else
                Console.WriteLine("The Click event is not available with the Button class.");
        }
        catch(SecurityException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message :"+e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("The following exception was raised : {0}",e.Message);
        }
    }
}

#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
using namespace System::Windows::Forms;

int main()
{
   try
   {
      // Creates a bitmask based on BindingFlags.
      BindingFlags myBindingFlags = static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public | BindingFlags::NonPublic);
      Type^ myTypeBindingFlags = System::Windows::Forms::Button::typeid;
      EventInfo^ myEventBindingFlags = myTypeBindingFlags->GetEvent( "Click", myBindingFlags );
      if ( myEventBindingFlags != nullptr )
      {
         Console::WriteLine( "Looking for the Click event in the Button class with the specified BindingFlags." );
         Console::WriteLine( myEventBindingFlags );
      }
      else
            Console::WriteLine( "The Click event is not available with the Button class." );
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "The following exception was raised : {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetEvent 重载
System 命名空间
EventInfo
String
BindingFlags
DefaultBinder
GetEvents


Type ..::.GetEvents 方法

Type
.
.
::
.
GetEvents 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取由当前 Type 声明或继承的事件。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetEvents 方法

Type
.
.
::
.
GetEvents 方法
Type 类

返回由当前 Type 声明或继承的所有公共事件。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEvents As EventInfo()
public virtual EventInfo[] GetEvents()
public:
virtual array<EventInfo^>^ GetEvents()
abstract GetEvents : unit -> EventInfo[]
override GetEvents : unit -> EventInfo[]

返回值

类型：
array<
System.Reflection EventInfo
>
[]
()
[]

表示由当前 Type 声明或继承的所有公共事件的 EventInfo 对象数组。
- 或 -
如果当前 Type 没有公共事件，则为 EventInfo 类型的空数组。

实现

如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

GetEvents 方法不按特定的顺序（如字母顺序或声明顺序）返回事件。您的代码一定不能依赖于事件的返回顺序，因为该顺序可以改变。 GetEvents 方法不按特定的顺序（如字母顺序或声明顺序）返回事件。您的代码一定不能依赖于事件的返回顺序，因为该顺序可以改变。

此方法可由派生类重写。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

如果当前 Type 表示构造泛型类型，则此方法将返回 EventInfo 对象，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的事件。

下面的示例获取 EventInfo 对象的数组，获取 Button 类的所有事件，然后显示事件名称。若要编译 Visual Basic 示例，请使用以下命令行： 下面的示例获取 EventInfo 对象的数组，获取 Button 类的所有事件，然后显示事件名称。若要编译 Visual Basic 示例，请使用以下命令行：

vbc type_getevents1.vb /r:System.Windows.Forms.dll /r:System.dll

Imports System
Imports System.Reflection
Imports System.Security
Imports Microsoft.VisualBasic

' Compile this sample using the following command line:
' vbc type_getevents.vb /r:"System.Windows.Forms.dll" /r:"System.dll"

Class EventsSample

    Public Shared Sub Main()
        Try
            ' Creates a bitmask based on BindingFlags.
            Dim myBindingFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public
            Dim myTypeEvent As Type = GetType(System.Windows.Forms.Button)
            Dim myEventsBindingFlags As EventInfo() = myTypeEvent.GetEvents(myBindingFlags)
            Console.WriteLine(ControlChars.Cr + "The events on the Button class with the specified BindingFlags are : ")
            Dim index As Integer
            For index = 0 To myEventsBindingFlags.Length - 1
                Console.WriteLine(myEventsBindingFlags(index).ToString())
            Next index
        Catch e As SecurityException
            Console.WriteLine(("SecurityException :" + e.Message))
        Catch e As ArgumentNullException
            Console.WriteLine(("ArgumentNullException : " + e.Message))
        Catch e As Exception
            Console.WriteLine(("Exception : " + e.Message))
        End Try
    End Sub 'Main
End Class 'EventsSample

using System;
using System.Reflection;
using System.Security;

class EventsSample
{
    public static void Main()
    {
        try
        {
            // Creates a bitmask based on BindingFlags.
            BindingFlags myBindingFlags = BindingFlags.Instance | BindingFlags.Public;
            Type myTypeEvent = typeof(System.Windows.Forms.Button);
            EventInfo[] myEventsBindingFlags = myTypeEvent.GetEvents(myBindingFlags);
            Console.WriteLine("\nThe events on the Button class with the specified BindingFlags are : ");
            for (int index = 0; index < myEventsBindingFlags.Length; index++)
            {
                Console.WriteLine(myEventsBindingFlags[index].ToString());
            }
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException :" + e.Message);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException : " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception : " + e.Message);
        }
    }
}

#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Security;

int main()
{
   try
   {
      Type^ myType = System::Windows::Forms::Button::typeid;
      array<EventInfo^>^myEvents = myType->GetEvents();
      Console::WriteLine( "The events on the Button class are: " );
      for ( int index = 0; index < myEvents->Length; index++ )
      {
         Console::WriteLine( myEvents[ index ] );

      }
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "SecurityException: {0}", e->Message );
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "ArgumentNullException: {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetEvents 重载
System 命名空间
EventInfo
GetEvent


Type ..::.GetEvents 方法 (BindingFlags)

Type
.
.
::
.
GetEvents 方法 (BindingFlags)
Type 类

当在派生类中重写时，使用指定绑定约束，搜索由当前 Type 声明或继承的事件。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetEvents ( _
    bindingAttr As BindingFlags _
) As EventInfo()
public abstract EventInfo[] GetEvents(
    BindingFlags bindingAttr
)
public:
virtual array<EventInfo^>^ GetEvents(
    BindingFlags bindingAttr
) abstract
abstract GetEvents :
        bindingAttr:BindingFlags -> EventInfo[]

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型：
array<
System.Reflection EventInfo
>
[]
()
[]

表示由当前 Type 声明或继承的匹配指定绑定约束的所有事件的 EventInfo 对象数组。
- 或 -
如果当前 Type 没有事件，或者如果没有一个事件匹配绑定约束，则为 EventInfo 类型的空数组。

实现

GetEvents 方法不按特定的顺序（如字母顺序或声明顺序）返回事件。您的代码一定不能依赖于事件的返回顺序，因为该顺序可以改变。 GetEvents 方法不按特定的顺序（如字母顺序或声明顺序）返回事件。您的代码一定不能依赖于事件的返回顺序，因为该顺序可以改变。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的事件：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共事件。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共事件（即私有事件、内部事件和受保护的事件）。只返回基类上的受保护事件和内部事件；不返回基类上的私有事件。 指定 BindingFlags.NonPublic 可在搜索中包含非公共事件（即私有事件、内部事件和受保护的事件）。只返回基类上的受保护事件和内部事件；不返回基类上的私有事件。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.DeclaredOnly，表示仅搜索在 Type 上声明的事件，而不搜索被简单继承的事件。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果某事件至少有一个公共的方法或访问器，则该事件被视为对于反射是公共的。否则，该事件将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

如果当前 Type 表示构造泛型类型，则此方法将返回 EventInfo 对象，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的事件。

下面的示例获取与指定绑定标志相匹配的 EventInfo 对象的数组，获取 Button 类的所有事件，然后显示事件名称。若要编译 Visual Basic 示例，请使用以下命令行： 下面的示例获取与指定绑定标志相匹配的 EventInfo 对象的数组，获取 Button 类的所有事件，然后显示事件名称。若要编译 Visual Basic 示例，请使用以下命令行：

vbc type_getevents2.vb /r:System.Windows.Forms.dll /r:System.dll

Imports System
Imports System.Reflection
Imports System.Security
Imports System.Windows.Forms
Imports Microsoft.VisualBasic

Class EventsSample

    Public Shared Sub Main()
        Try
            ' Create a bitmask based on BindingFlags.
            Dim myBindingFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public
            Dim myTypeEvent As Type = GetType(System.Windows.Forms.Button)
            Dim myEventsBindingFlags As EventInfo() = myTypeEvent.GetEvents(myBindingFlags)
            Console.WriteLine(ControlChars.Cr + "The events on the Button class with the specified BindingFlags are:")
            Dim index As Integer
            For index = 0 To myEventsBindingFlags.Length - 1
                Console.WriteLine(myEventsBindingFlags(index).ToString())
            Next index
        Catch e As SecurityException
            Console.WriteLine("SecurityException:" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException: " + e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message)
        End Try
    End Sub 'Main
End Class 'EventsSample

using System;
using System.Reflection;
using System.Security;

class EventsSample
{
    public static void Main()
    {
        try
        {
            // Create a bitmask based on BindingFlags.
            BindingFlags myBindingFlags = BindingFlags.Instance | BindingFlags.Public;
            Type myTypeEvent = typeof(System.Windows.Forms.Button);
            EventInfo[] myEventsBindingFlags = myTypeEvent.GetEvents(myBindingFlags);
            Console.WriteLine("\nThe events on the Button class with the specified BindingFlags are:");
            for (int index = 0; index < myEventsBindingFlags.Length; index++)
            {
                Console.WriteLine(myEventsBindingFlags[index].ToString());
            }
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException:" + e.Message);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }
}

#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Security;

int main()
{
   try
   {

      // Create a bitmask based on BindingFlags.
      BindingFlags myBindingFlags = static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public);
      Type^ myTypeEvent = System::Windows::Forms::Button::typeid;
      array<EventInfo^>^myEventsBindingFlags = myTypeEvent->GetEvents( myBindingFlags );
      Console::WriteLine( "\nThe events on the Button class with the specified BindingFlags are:" );
      for ( int index = 0; index < myEventsBindingFlags->Length; index++ )
      {
         Console::WriteLine( myEventsBindingFlags[ index ] );

      }
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "SecurityException: {0}", e->Message );
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "ArgumentNullException: {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetEvents 重载
System 命名空间
EventInfo
BindingFlags
DefaultBinder
GetEvent


Type ..::.GetField 方法

Type
.
.
::
.
GetField 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的特定字段。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetField 方法 (String)

Type
.
.
::
.
GetField 方法 (String)
Type 类

搜索具有指定名称的公共字段。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetField ( _
    name As String _
) As FieldInfo
public FieldInfo GetField(
    string name
)
public:
virtual FieldInfo^ GetField(
    String^ name
) sealed
abstract GetField :
        name:string -> FieldInfo
override GetField :
        name:string -> FieldInfo

参数

name
类型： System String
包含要获取的数据字段的名称的 String。

返回值

类型： System.Reflection FieldInfo
如找到，则为表示具有指定名称的公共字段的 FieldInfo 对象；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 该 Type 对象为 TypeBuilder，其 CreateType 方法尚未被调用。

对 name 的搜索区分大小写。搜索范围包括公共静态和公共实例字段。 对 name 的搜索区分大小写。搜索范围包括公共静态和公共实例字段。

如果当前 Type 表示构造泛型类型，则此方法将返回 FieldInfo，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的字段。

下面的示例获取指定类的 Type 对象，获取字段的 FieldInfo 对象，然后显示该字段的值。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class MyFieldClassA
    Public Field As String = "A Field"
End Class 'MyFieldClassA

Public Class MyFieldClassB
    Private myField As String = "B Field"

    Public Property Field() As String
        Get
            Return myField
        End Get
        Set(ByVal Value As String)
            If myField <> value Then
                myField = value
            End If
        End Set
    End Property
End Class 'MyFieldClassB

Public Class MyFieldInfoClass

    Public Shared Sub Main()
        Dim myFieldObjectB As New MyFieldClassB()
        Dim myFieldObjectA As New MyFieldClassA()

        Dim myTypeA As Type = GetType(MyFieldClassA)
        Dim myFieldInfo As FieldInfo = myTypeA.GetField("Field")

        Dim myTypeB As Type = GetType(MyFieldClassB)
        Dim myFieldInfo1 As FieldInfo = myTypeB.GetField("myField", _
            BindingFlags.NonPublic Or BindingFlags.Instance)

        Console.WriteLine("The value of the public field is: '{0}'", _
            myFieldInfo.GetValue(myFieldObjectA))
        Console.WriteLine("The value of the private field is: '{0}'", _
            myFieldInfo1.GetValue(myFieldObjectB))
    End Sub 'Main

End Class 'MyFieldInfoClass

using System;
using System.Reflection;

public class MyFieldClassA
{
    public string Field = "A Field";
}

public class MyFieldClassB
{
    private string field = "B Field";
    public string Field
    {
        get
        {
            return field;
        }
        set
        {
            if (field!=value)
            {
                field=value;
            }
        }
    }
}

public class MyFieldInfoClass
{
    public static void Main()
    {
        MyFieldClassB myFieldObjectB = new MyFieldClassB();
        MyFieldClassA myFieldObjectA = new MyFieldClassA();

        Type myTypeA = typeof(MyFieldClassA);
        FieldInfo myFieldInfo = myTypeA.GetField("Field");

        Type myTypeB = typeof(MyFieldClassB);
        FieldInfo myFieldInfo1 = myTypeB.GetField("field",
            BindingFlags.NonPublic | BindingFlags.Instance);

        Console.WriteLine("The value of the public field is: '{0}'",
            myFieldInfo.GetValue(myFieldObjectA));
        Console.WriteLine("The value of the private field is: '{0}'",
            myFieldInfo1.GetValue(myFieldObjectB));
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyFieldClassA
{
public:
   String^ field;
   MyFieldClassA()
   {
      field = "A Field";
   }

   property String^ Field
   {
      String^ get()
      {
         return field;
      }

      void set( String^ value )
      {
         if ( field != value )
         {
            field = value;
         }
      }

   }

};

public ref class MyFieldClassB
{
public:
   String^ field;
   MyFieldClassB()
   {
      field = "B Field";
   }

   property String^ Field
   {
      String^ get()
      {
         return field;
      }

      void set( String^ value )
      {
         if ( field != value )
         {
            field = value;
         }
      }

   }

};

int main()
{
   try
   {
      MyFieldClassB^ myFieldObjectB = gcnew MyFieldClassB;
      MyFieldClassA^ myFieldObjectA = gcnew MyFieldClassA;
      Type^ myTypeA = Type::GetType( "MyFieldClassA" );
      FieldInfo^ myFieldInfo = myTypeA->GetField( "field" );
      Type^ myTypeB = Type::GetType( "MyFieldClassB" );
      FieldInfo^ myFieldInfo1 = myTypeB->GetField( "field", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
      Console::WriteLine( "The value of the field is : {0} ", myFieldInfo->GetValue( myFieldObjectA ) );
      Console::WriteLine( "The value of the field is : {0} ", myFieldInfo1->GetValue( myFieldObjectB ) );
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "Exception Raised!" );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "Exception Raised!" );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception Raised!" );
      Console::WriteLine( "Message : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetField 重载
System 命名空间
FieldInfo
String
DefaultBinder
GetFields


Type ..::.GetField 方法 (String, BindingFlags)

Type
.
.
::
.
GetField 方法 (String, BindingFlags)
Type 类

使用指定绑定约束搜索指定字段。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetField ( _
    name As String, _
    bindingAttr As BindingFlags _
) As FieldInfo
public abstract FieldInfo GetField(
    string name,
    BindingFlags bindingAttr
)
public:
virtual FieldInfo^ GetField(
    String^ name,
    BindingFlags bindingAttr
) abstract
abstract GetField :
        name:string *
        bindingAttr:BindingFlags -> FieldInfo

参数

name
类型： System String
包含要获取的数据字段的名称的 String。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System.Reflection FieldInfo
表示符合指定要求的字段的 FieldInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的字段：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共字段。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共字段（即私有字段、内部字段和受保护的字段）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，表示仅搜索在 Type 上声明的字段，而不搜索简单继承的字段。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果当前 Type 表示构造泛型类型，则此方法将返回 FieldInfo，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的字段。

下面的示例获取指定类的 Type 对象，获取与指定绑定标志相匹配的字段的 FieldInfo 对象，然后显示该字段的值。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class MyFieldClassA
    Public Field As String = "A Field"
End Class 'MyFieldClassA

Public Class MyFieldClassB
    Private myField As String = "B Field"

    Public Property Field() As String
        Get
            Return myField
        End Get
        Set(ByVal Value As String)
            If myField <> value Then
                myField = value
            End If
        End Set
    End Property
End Class 'MyFieldClassB

Public Class MyFieldInfoClass

    Public Shared Sub Main()
        Dim myFieldObjectB As New MyFieldClassB()
        Dim myFieldObjectA As New MyFieldClassA()

        Dim myTypeA As Type = GetType(MyFieldClassA)
        Dim myFieldInfo As FieldInfo = myTypeA.GetField("Field")

        Dim myTypeB As Type = GetType(MyFieldClassB)
        Dim myFieldInfo1 As FieldInfo = myTypeB.GetField("myField", _
            BindingFlags.NonPublic Or BindingFlags.Instance)

        Console.WriteLine("The value of the public field is: '{0}'", _
            myFieldInfo.GetValue(myFieldObjectA))
        Console.WriteLine("The value of the private field is: '{0}'", _
            myFieldInfo1.GetValue(myFieldObjectB))
    End Sub 'Main

End Class 'MyFieldInfoClass

using System;
using System.Reflection;

public class MyFieldClassA
{
    public string Field = "A Field";
}

public class MyFieldClassB
{
    private string field = "B Field";
    public string Field
    {
        get
        {
            return field;
        }
        set
        {
            if (field!=value)
            {
                field=value;
            }
        }
    }
}

public class MyFieldInfoClass
{
    public static void Main()
    {
        MyFieldClassB myFieldObjectB = new MyFieldClassB();
        MyFieldClassA myFieldObjectA = new MyFieldClassA();

        Type myTypeA = typeof(MyFieldClassA);
        FieldInfo myFieldInfo = myTypeA.GetField("Field");

        Type myTypeB = typeof(MyFieldClassB);
        FieldInfo myFieldInfo1 = myTypeB.GetField("field",
            BindingFlags.NonPublic | BindingFlags.Instance);

        Console.WriteLine("The value of the public field is: '{0}'",
            myFieldInfo.GetValue(myFieldObjectA));
        Console.WriteLine("The value of the private field is: '{0}'",
            myFieldInfo1.GetValue(myFieldObjectB));
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyFieldClassA
{
public:
   String^ field;
   MyFieldClassA()
   {
      field = "A Field";
   }

   property String^ Field
   {
      String^ get()
      {
         return field;
      }

      void set( String^ value )
      {
         if ( field != value )
         {
            field = value;
         }
      }

   }

};

public ref class MyFieldClassB
{
public:
   String^ field;
   MyFieldClassB()
   {
      field = "B Field";
   }

   property String^ Field
   {
      String^ get()
      {
         return field;
      }

      void set( String^ value )
      {
         if ( field != value )
         {
            field = value;
         }
      }

   }

};

int main()
{
   try
   {
      MyFieldClassB^ myFieldObjectB = gcnew MyFieldClassB;
      MyFieldClassA^ myFieldObjectA = gcnew MyFieldClassA;
      Type^ myTypeA = Type::GetType( "MyFieldClassA" );
      FieldInfo^ myFieldInfo = myTypeA->GetField( "field" );
      Type^ myTypeB = Type::GetType( "MyFieldClassB" );
      FieldInfo^ myFieldInfo1 = myTypeB->GetField( "field", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
      Console::WriteLine( "The value of the field is : {0} ", myFieldInfo->GetValue( myFieldObjectA ) );
      Console::WriteLine( "The value of the field is : {0} ", myFieldInfo1->GetValue( myFieldObjectB ) );
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "Exception Raised!" );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "Exception Raised!" );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception Raised!" );
      Console::WriteLine( "Message : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetField 重载
System 命名空间
FieldInfo
String
BindingFlags
DefaultBinder
GetFields


Type ..::.GetFields 方法

Type
.
.
::
.
GetFields 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的字段。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetFields 方法

Type
.
.
::
.
GetFields 方法
Type 类

返回当前 Type 的所有公共字段。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetFields As FieldInfo()
public FieldInfo[] GetFields()
public:
virtual array<FieldInfo^>^ GetFields() sealed
abstract GetFields : unit -> FieldInfo[]
override GetFields : unit -> FieldInfo[]

返回值

类型：
array<
System.Reflection FieldInfo
>
[]
()
[]

表示为当前 Type 定义的所有公共字段的 FieldInfo 对象数组。
- 或 -
如果没有为当前 Type 定义的公共字段，则为 FieldInfo 类型的空数组。

实现

GetFields 方法不按特定的顺序返回字段，例如按字母顺序或声明顺序。您的代码一定不能依赖于字段的返回顺序，因为该顺序可以改变。 GetFields 方法不按特定的顺序返回字段，例如按字母顺序或声明顺序。您的代码一定不能依赖于字段的返回顺序，因为该顺序可以改变。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

如果当前 Type 表示构造泛型类型，则此方法将返回 FieldInfo 对象，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的公共字段。

下面的示例显示 GetFields() 方法的用法。

Imports System
Imports System.Reflection
Imports System.ComponentModel.Design
Imports Microsoft.VisualBasic

Class FieldInfo_IsSpecialName

    Public Shared Sub Main()
        Try
            ' Get the type handle of a specified class.
            Dim myType As Type = GetType(ViewTechnology)

            ' Get the fields of a specified class.
            Dim myField As FieldInfo() = myType.GetFields()

            Console.WriteLine(ControlChars.Cr + "Displaying fields that have SpecialName attributes:" + ControlChars.Cr)
            Dim i As Integer
            For i = 0 To myField.Length - 1
                ' Determine whether or not each field is a special name.
                If myField(i).IsSpecialName Then
                    Console.WriteLine("The field {0} has a SpecialName attribute.", myField(i).Name)
                End If
            Next i
        Catch e As Exception
            Console.WriteLine("Exception : {0} ", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'FieldInfo_IsSpecialName

using System;
using System.Reflection;
using System.ComponentModel.Design;

class FieldInfo_IsSpecialName
{
    public static void Main()
    {
        try
        {
            // Get the type handle of a specified class.
            Type myType = typeof(ViewTechnology);

            // Get the fields of the specified class.
            FieldInfo[] myField = myType.GetFields();

            Console.WriteLine("\nDisplaying fields that have SpecialName attributes:\n");
            for(int i = 0; i < myField.Length; i++)
            {
                // Determine whether or not each field is a special name.
                if(myField[i].IsSpecialName)
                {
                    Console.WriteLine("The field {0} has a SpecialName attribute.",
                        myField[i].Name);
                }
            }
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception : {0} " , e.Message);
        }
    }
}

#using <system.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel::Design;

int main()
{
   try
   {
      // Get the type handle of a specified class.
      Type^ myType = ViewTechnology::typeid;

      // Get the fields of the specified class.
      array<FieldInfo^>^myField = myType->GetFields();
      Console::WriteLine( "\nDisplaying fields that have SpecialName attributes:\n" );
      for ( int i = 0; i < myField->Length; i++ )
      {
         // Determine whether or not each field is a special name.
         if ( myField[ i ]->IsSpecialName )
         {
            Console::WriteLine( "The field {0} has a SpecialName attribute.", myField[ i ]->Name );
         }
      }
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception : {0} ", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetFields 重载
System 命名空间
FieldInfo
GetField


Type ..::.GetFields 方法 (BindingFlags)

Type
.
.
::
.
GetFields 方法 (BindingFlags)
Type 类

当在派生类中重写时，使用指定绑定约束，搜索为当前 Type 定义的字段。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetFields ( _
    bindingAttr As BindingFlags _
) As FieldInfo()
public abstract FieldInfo[] GetFields(
    BindingFlags bindingAttr
)
public:
virtual array<FieldInfo^>^ GetFields(
    BindingFlags bindingAttr
) abstract
abstract GetFields :
        bindingAttr:BindingFlags -> FieldInfo[]

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型：
array<
System.Reflection FieldInfo
>
[]
()
[]

表示为当前 Type 定义的匹配指定绑定约束的所有字段的 FieldInfo 对象数组。
- 或 -
如果没有为当前 Type 定义的字段，或者如果没有一个定义的字段匹配绑定约束，则为 FieldInfo 类型的空数组。

实现

GetFields 方法不按特定的顺序返回字段，例如按字母顺序或声明顺序。您的代码一定不能依赖于字段的返回顺序，因为该顺序可以改变。 GetFields 方法不按特定的顺序返回字段，例如按字母顺序或声明顺序。您的代码一定不能依赖于字段的返回顺序，因为该顺序可以改变。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的字段：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共字段。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共字段（即私有字段、内部字段和受保护的字段）。只返回基类上的受保护字段和内部字段；不返回基类上的私有字段。 指定 BindingFlags.NonPublic 可在搜索中包含非公共字段（即私有字段、内部字段和受保护的字段）。只返回基类上的受保护字段和内部字段；不返回基类上的私有字段。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.DeclaredOnly，表示仅搜索在 Type 上声明的字段，而不搜索简单继承的字段。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果当前 Type 表示构造泛型类型，则此方法将返回 FieldInfo 对象，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的公共字段。

下面的示例显示 GetFields(BindingFlags) 方法的用法。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Class AttributesSample

    Public Sub Mymethod(ByVal int1m As Integer, ByRef str2m As String, ByRef str3m As String)
        str2m = "in Mymethod"
    End Sub 'Mymethod

    Public Shared Function Main(ByVal args() As String) As Integer
        Console.WriteLine("Reflection.MethodBase.Attributes Sample")

        ' Get the type.
        Dim MyType As Type = Type.GetType("AttributesSample")

        ' Get the method Mymethod on the type.
        Dim Mymethodbase As MethodBase = MyType.GetMethod("Mymethod")

        ' Display the method name.
        Console.WriteLine("Mymethodbase = {0}.", Mymethodbase)

        ' Get the MethodAttribute enumerated value.
        Dim Myattributes As MethodAttributes = Mymethodbase.Attributes

        ' Display the flags that are set.
        PrintAttributes(GetType(System.Reflection.MethodAttributes), CInt(Myattributes))
        Return 0
    End Function 'Main

    Public Shared Sub PrintAttributes(ByVal attribType As Type, ByVal iAttribValue As Integer)
        If Not attribType.IsEnum Then
            Console.WriteLine("This type is not an enum.")
            Return
        End If
        Dim fields As FieldInfo() = attribType.GetFields((BindingFlags.Public Or BindingFlags.Static))
        Dim i As Integer
        For i = 0 To fields.Length - 1
            Dim fieldvalue As Integer = CType(fields(i).GetValue(Nothing), Int32)
            If (fieldvalue And iAttribValue) = fieldvalue Then
                Console.WriteLine(fields(i).Name)
            End If
        Next i
    End Sub 'PrintAttributes
End Class 'AttributesSample

using System;
using System.Reflection;

class AttributesSample
{
    public void Mymethod (int int1m, out string str2m, ref string str3m)
    {
        str2m = "in Mymethod";
    }

    public static int Main(string[] args)
    {
        Console.WriteLine ("Reflection.MethodBase.Attributes Sample");

        // Get the type.
        Type MyType = Type.GetType("AttributesSample");

        // Get the method Mymethod on the type.
        MethodBase Mymethodbase = MyType.GetMethod("Mymethod");

        // Display the method name.
        Console.WriteLine("Mymethodbase = " + Mymethodbase);

        // Get the MethodAttribute enumerated value.
        MethodAttributes Myattributes = Mymethodbase.Attributes;

        // Display the flags that are set.
        PrintAttributes(typeof(System.Reflection.MethodAttributes), (int) Myattributes);
        return 0;
    }

    public static void PrintAttributes(Type attribType, int iAttribValue)
    {
        if (!attribType.IsEnum)
        {
            Console.WriteLine("This type is not an enum.");
            return;
        }

        FieldInfo[] fields = attribType.GetFields(BindingFlags.Public | BindingFlags.Static);
        for (int i = 0; i < fields.Length; i++)
        {
            int fieldvalue = (Int32)fields[i].GetValue(null);
            if ((fieldvalue & iAttribValue) == fieldvalue)
            {
                Console.WriteLine(fields[i].Name);
            }
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::InteropServices;
public ref class AttributesSample
{
public:
   void Mymethod( int int1m, [Out]interior_ptr<String^> str2m, interior_ptr<String^> str3m )
   {
       *str2m = "in Mymethod";
   }
};

void PrintAttributes( Type^ attribType, int iAttribValue )
{
   if (  !attribType->IsEnum )
   {
      Console::WriteLine( "This type is not an enum." );
      return;
   }

   array<FieldInfo^>^fields = attribType->GetFields( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static) );
   for ( int i = 0; i < fields->Length; i++ )
   {
      int fieldvalue = safe_cast<Int32>(fields[ i ]->GetValue( nullptr ));
      if ( (fieldvalue & iAttribValue) == fieldvalue )
      {
         Console::WriteLine( fields[ i ]->Name );
      }
   }
}

int main()
{
   Console::WriteLine( "Reflection.MethodBase.Attributes Sample" );

   // Get the type.
   Type^ MyType = Type::GetType( "AttributesSample" );

   // Get the method Mymethod on the type.
   MethodBase^ Mymethodbase = MyType->GetMethod( "Mymethod" );

   // Display the method name.
   Console::WriteLine( "Mymethodbase = {0}", Mymethodbase );

   // Get the MethodAttribute enumerated value.
   MethodAttributes Myattributes = Mymethodbase->Attributes;

   // Display the flags that are set.
   PrintAttributes( System::Reflection::MethodAttributes::typeid, (int)Myattributes );
   return 0;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetFields 重载
System 命名空间
FieldInfo
BindingFlags
DefaultBinder
GetField


Type ..::.GetGenericArguments 方法

Type
.
.
::
.
GetGenericArguments 方法
Type 类

返回表示泛型类型的类型实参或泛型类型定义的类型形参的 Type 对象的数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetGenericArguments As Type()
public virtual Type[] GetGenericArguments()
public:
virtual array<Type^>^ GetGenericArguments()
abstract GetGenericArguments : unit -> Type[]
override GetGenericArguments : unit -> Type[]

返回值

类型：
array<
System Type
>
[]
()
[]

表示泛型类型的类型实参的 Type 对象的数组。如果当前类型不是泛型类型，则返回一个空数组。 表示泛型类型的类型实参的 Type 对象的数组。如果当前类型不是泛型类型，则返回一个空数组。
异常 | 条件
NotSupportedException | 基类不支持所调用的方法。派生类必须提供实现。 基类不支持所调用的方法。派生类必须提供实现。

数组元素按照它们出现在泛型类型的类型实参列表中的顺序返回。

  • 如果当前类型是封闭构造类型（即 ContainsGenericParameters 属性返回 false），则 GetGenericArguments 方法返回的数组将包含已赋予泛型类型定义的泛型类型形参的类型。

  • 如果当前类型是泛型类型定义，该数组将包含类型形参。

  • 如果当前类型为开放构造类型（即 ContainsGenericParameters 属性返回 true），也就是说特定类型尚未分配给所有类型参数和封闭泛型类型或方法的类型参数，则数组同时包含类型和类型参数。使用 IsGenericParameter 属性来区分它们。有关这种情况的演示，请参见 ContainsGenericParameters 属性的代码示例。 如果当前类型为开放构造类型（即 ContainsGenericParameters 属性返回 true），也就是说特定类型尚未分配给所有类型参数和封闭泛型类型或方法的类型参数，则数组同时包含类型和类型参数。使用 IsGenericParameter 属性来区分它们。有关这种情况的演示，请参见 ContainsGenericParameters 属性的代码示例。 如果当前类型为开放构造类型（即 ContainsGenericParameters 属性返回 true），也就是说特定类型尚未分配给所有类型参数和封闭泛型类型或方法的类型参数，则数组同时包含类型和类型参数。使用 IsGenericParameter 属性来区分它们。有关这种情况的演示，请参见 ContainsGenericParameters 属性的代码示例。

有关泛型反射中使用的术语的固定条件列表，请参见 IsGenericType 属性备注。

下面的代码示例使用 GetGenericArguments 方法显示构造类型的类型变量及其泛型类型定义的类型参数。

该代码示例摘自为 IsGenericTypeDefinition 属性提供的更大的示例。

If t.IsGenericType Then
    ' If this is a generic type, display the type arguments.
    '
    Dim typeArguments As Type() = t.GetGenericArguments()

    Console.WriteLine(vbTab & "List type arguments (" _
        & typeArguments.Length & "):")

    For Each tParam As Type In typeArguments
        ' If this is a type parameter, display its position.
        '
        If tParam.IsGenericParameter Then
            Console.WriteLine(vbTab & vbTab & tParam.ToString() _
                & vbTab & "(unassigned - parameter position " _
                & tParam.GenericParameterPosition & ")")
        Else
            Console.WriteLine(vbTab & vbTab & tParam.ToString())
        End If
    Next tParam
End If

if (t.IsGenericType)
{
    // If this is a generic type, display the type arguments.
    //
    Type[] typeArguments = t.GetGenericArguments();

    Console.WriteLine("\tList type arguments ({0}):",
        typeArguments.Length);

    foreach (Type tParam in typeArguments)
    {
        // If this is a type parameter, display its
        // position.
        //
        if (tParam.IsGenericParameter)
        {
            Console.WriteLine("\t\t{0}\t(unassigned - parameter position {1})",
                tParam,
                tParam.GenericParameterPosition);
        }
        else
        {
            Console.WriteLine("\t\t{0}", tParam);
        }
    }
}

if ( t->IsGenericType )
{

   // If this is a generic type, display the type arguments.
   //
   array<Type^>^typeArguments = t->GetGenericArguments();
   Console::WriteLine( L"\tList type arguments ({0}):",
      typeArguments->Length );
   System::Collections::IEnumerator^ myEnum =
      typeArguments->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Type^ tParam = safe_cast<Type^>(myEnum->Current);

      // If this is a type parameter, display its
      // position.
      //
      if ( tParam->IsGenericParameter )
      {
         Console::WriteLine(
            L"\t\t{0}\t(unassigned - parameter position {1})",
            tParam, tParam->GenericParameterPosition );
      }
      else
      {
         Console::WriteLine( L"\t\t{0}", tParam );
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
ContainsGenericParameters
IsGenericTypeDefinition

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.GetGenericParameterConstraints 方法

Type
.
.
::
.
GetGenericParameterConstraints 方法
Type 类

返回表示当前泛型类型参数上的约束的 Type 对象的数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetGenericParameterConstraints As Type()
public virtual Type[] GetGenericParameterConstraints()
public:
virtual array<Type^>^ GetGenericParameterConstraints()
abstract GetGenericParameterConstraints : unit -> Type[]
override GetGenericParameterConstraints : unit -> Type[]

返回值

类型：
array<
System Type
>
[]
()
[]

表示当前泛型类型参数上的约束的 Type 对象的数组。
异常 | 条件
InvalidOperationException | 当前的 Type 对象不是泛型类型参数。即 IsGenericParameter 属性返回 false。 当前的 Type 对象不是泛型类型参数。即 IsGenericParameter 属性返回 false。

泛型类型参数上的每个约束都表示为一个 Type 对象。使用 IsClass 属性确定约束是否为基类约束；如果该属性返回 false，则该约束为接口约束。如果类型参数没有类约束和接口约束，则返回空数组。 泛型类型参数上的每个约束都表示为一个 Type 对象。使用 IsClass 属性确定约束是否为基类约束；如果该属性返回 false，则该约束为接口约束。如果类型参数没有类约束和接口约束，则返回空数组。 泛型类型参数上的每个约束都表示为一个 Type 对象。使用 IsClass 属性确定约束是否为基类约束；如果该属性返回 false，则该约束为接口约束。如果类型参数没有类约束和接口约束，则返回空数组。

有关泛型反射中使用的术语的固定条件列表，请参见 IsGenericType 属性备注。

下面的代码示例定义泛型类型 Test，该泛型类型包含两个具有不同约束的类型参数。当程序执行时，使用 GenericParameterAttributes 属性和 GetGenericParameterConstraints 方法检查这些约束。 下面的代码示例定义泛型类型 Test，该泛型类型包含两个具有不同约束的类型参数。当程序执行时，使用 GenericParameterAttributes 属性和 GetGenericParameterConstraints 方法检查这些约束。

Imports System
Imports System.Reflection

' Define a sample interface to use as an interface constraint.
Public Interface ITest
End Interface

' Define a base type to use as a base class constraint.
Public Class Base
End Class

' Define the generic type to examine. The first generic type parameter,
' T, derives from the class Base and implements ITest. This demonstrates
' a base class constraint and an interface constraint. The second generic
' type parameter, U, must be a reference type (Class) and must have a
' default constructor (New). This demonstrates special constraints.
'
Public Class Test(Of T As {Base, ITest}, U As {New, Class})
End Class

' Define a type that derives from Base and implements ITtest. This type
' satisfies the constraints on T in class Test.
Public Class Derived
    Inherits Base
    Implements ITest
End Class

Public Class Example

    Public Shared Sub Main()
        ' To get the generic type definition, omit the type
        ' arguments but retain the comma to indicate the number
        ' of type arguments.
        '
        Dim def As Type = GetType(Test(Of ,))
        Console.WriteLine(vbCrLf & "Examining generic type {0}", def)

        ' Get the type parameters of the generic type definition,
        ' and display them.
        '
        Dim defparams() As Type = def.GetGenericArguments()
        For Each tp As Type In defparams

            Console.WriteLine(vbCrLf & "Type parameter: {0}", tp.Name)
            Console.WriteLine(vbTab & ListGenericParameterAttributes(tp))

            ' List the base class and interface constraints. The
            ' constraints do not appear in any particular order. An
            ' empty array is returned if there are no constraints.
            '
            Dim tpConstraints As Type() = _
                tp.GetGenericParameterConstraints()
            For Each tpc As Type In  tpConstraints
                Console.WriteLine(vbTab & tpc.ToString())
            Next tpc
        Next tp

    End Sub

    ' List the variance and special constraint flags.
    '
    Private Shared Function ListGenericParameterAttributes(ByVal t As Type) As String
        Dim retval As String
        Dim gpa As GenericParameterAttributes = t.GenericParameterAttributes

        ' Select the variance flags.
        Dim variance As GenericParameterAttributes = _
            gpa And GenericParameterAttributes.VarianceMask

        If variance = GenericParameterAttributes.None Then
            retval = "No variance flag;"
        Else
            If (variance And GenericParameterAttributes.Covariant) <> 0 Then
                retval = "Covariant;"
            Else
                retval = "Contravariant;"
            End If
        End If

        ' Select the constraint flags.
        Dim constraints As GenericParameterAttributes = _
            gpa And GenericParameterAttributes.SpecialConstraintMask

        If constraints = GenericParameterAttributes.None Then
            retval &= " no special constraints."
        Else
            If (constraints And GenericParameterAttributes.ReferenceTypeConstraint) <> 0 Then
                retval &= " ReferenceTypeConstraint"
            End If
            If (constraints And GenericParameterAttributes.NotNullableValueTypeConstraint) <> 0 Then
                retval &= " NotNullableValueTypeConstraint"
            End If
            If (constraints And GenericParameterAttributes.DefaultConstructorConstraint) <> 0 Then
                retval &= " DefaultConstructorConstraint"
            End If
        End If
        Return retval

    End Function
End Class
' This example produces the following output:
'
'Examining generic type Test`2[T,U]
'
'Type parameter: T
'        No variance flag; no special constraints.
'        Base
'        ITest
'
'Type parameter: U
'        No variance flag; ReferenceTypeConstraint DefaultConstructorConstraint
'

using System;
using System.Reflection;

// Define a sample interface to use as an interface constraint.
public interface ITest {}

// Define a base type to use as a base class constraint.
public class Base {}

// Define the generic type to examine. The first generic type parameter,
// T, derives from the class Base and implements ITest. This demonstrates
// a base class constraint and an interface constraint. The second generic
// type parameter, U, must be a reference type (class) and must have a
// default constructor (new()). This demonstrates special constraints.
//
public class Test<T,U>
    where T : Base, ITest
    where U : class, new() {}

// Define a type that derives from Base and implements ITest. This type
// satisfies the constraints on T in class Test.
public class Derived : Base, ITest {}

public class Example
{
    public static void Main()
    {
        // To get the generic type definition, omit the type
        // arguments but retain the comma to indicate the number
        // of type arguments.
        //
        Type def = typeof(Test<,>);
        Console.WriteLine("\r\nExamining generic type {0}", def);

        // Get the type parameters of the generic type definition,
        // and display them.
        //
        Type[] defparams = def.GetGenericArguments();
        foreach (Type tp in defparams)
        {
            Console.WriteLine("\r\nType parameter: {0}", tp.Name);
            Console.WriteLine("\t{0}",
                ListGenericParameterAttributes(tp));

            // List the base class and interface constraints. The
            // constraints are returned in no particular order. If
            // there are no class or interface constraints, an empty
            // array is returned.
            //
            Type[] tpConstraints = tp.GetGenericParameterConstraints();
            foreach (Type tpc in tpConstraints)
            {
                Console.WriteLine("\t{0}", tpc);
            }
        }
    }

    // List the variance and special constraint flags.
    //
    private static string ListGenericParameterAttributes(Type t)
    {
        string retval;
        GenericParameterAttributes gpa = t.GenericParameterAttributes;
        GenericParameterAttributes variance = gpa &
            GenericParameterAttributes.VarianceMask;

        // Select the variance flags.
        if (variance == GenericParameterAttributes.None)
            retval = "No variance flag;";
        else
        {
            if ((variance & GenericParameterAttributes.Covariant) != 0)
                retval = "Covariant;";
            else
                retval = "Contravariant;";
        }

        // Select
        GenericParameterAttributes constraints = gpa &
            GenericParameterAttributes.SpecialConstraintMask;

        if (constraints == GenericParameterAttributes.None)
            retval += " No special constraints";
        else
        {
            if ((constraints & GenericParameterAttributes.ReferenceTypeConstraint) != 0)
                retval += " ReferenceTypeConstraint";
            if ((constraints & GenericParameterAttributes.NotNullableValueTypeConstraint) != 0)
                retval += " NotNullableValueTypeConstraint";
            if ((constraints & GenericParameterAttributes.DefaultConstructorConstraint) != 0)
                retval += " DefaultConstructorConstraint";
        }

        return retval;
    }
}
/* This example produces the following output:

Examining generic type Test`2[T,U]

Type parameter: T
        No variance flag; no special constraints.
        Base
        ITest

Type parameter: U
        No variance flag; ReferenceTypeConstraint DefaultConstructorConstraint
 */

using namespace System;
using namespace System::Collections;
using namespace System::Reflection;

// Define a sample interface to use as an interface constraint.
interface class ITest{};

// Define a base type to use as a class constraint.
public ref class Base{};

// Define the generic type to examine. The first generic type parameter,
// T, derives from the class Base and implements ITest. This demonstrates
// a base class constraint and an interface constraint. In the .NET
// Framework version 2.0, C++ has no way of expressing special constraints.
// See the C# example code.
//
generic <typename T, typename U>
   where T :  Base, ITest
ref class Test {};

// Define a type that derives from Base and implements interface
// ITest. This type satisfies the constraint on T in class Test.
public ref class Derived: public Base, public ITest {};

public ref class Example
{
public:
   static void Main()
   {
      // Create a constructed type from Test<T,U>, and from it
      // get the generic type definition.
      //
      Type^ def = Test::typeid;
      Console::WriteLine( L"\r\nExamining generic type {0}", def );

      // Get the type parameters of the generic type definition,
      // and display them.
      //
      for each (Type^ tp in def->GetGenericArguments())
      {
         Console::WriteLine( L"\r\nType parameter: {0}", tp);
         Console::WriteLine( L"\t{0}",
            ListGenericParameterAttributes( tp ) );

         // List the base class and interface constraints. The
         // constraints do not appear in any particular order. If
         // there are no class or interface constraints, an empty
         // array is returned.
         //
         for each (Type^ constraint in tp->GetGenericParameterConstraints())
         {
            Console::WriteLine( L"\t{0}", constraint );
         }
      }
   }

private:

   // List the variance and special constraint flags.
   //
   static String^ ListGenericParameterAttributes( Type^ t )
   {
      String^ retval;
      GenericParameterAttributes gpa = t->GenericParameterAttributes;

      // Select the variance flag.
      GenericParameterAttributes variance =
         static_cast<GenericParameterAttributes>(
            gpa & GenericParameterAttributes::VarianceMask );

      if ( variance == GenericParameterAttributes::None )
            retval = L"No variance flag;";
      else
      {
         if ( (variance & GenericParameterAttributes::Covariant) !=
               GenericParameterAttributes::None )
            retval = L"Covariant;";
         else
            retval = L"Contravariant;";
      }

      // Select the special constraint flags.
      GenericParameterAttributes constraints =
         static_cast<GenericParameterAttributes>(
            gpa & GenericParameterAttributes::SpecialConstraintMask);

      if ( constraints == GenericParameterAttributes::None )
            retval = String::Concat( retval, L" No special constraints" );
      else
      {
         if ( (constraints & GenericParameterAttributes::ReferenceTypeConstraint) !=
               GenericParameterAttributes::None )
            retval = String::Concat( retval, L" ReferenceTypeConstraint" );

         if ( (constraints & GenericParameterAttributes::NotNullableValueTypeConstraint) !=
               GenericParameterAttributes::None )
            retval = String::Concat( retval, L" NotNullableValueTypeConstraint" );

         if ( (constraints & GenericParameterAttributes::DefaultConstructorConstraint) !=
               GenericParameterAttributes::None )
            retval = String::Concat( retval, L" DefaultConstructorConstraint" );
      }

      return retval;
   }
};

int main()
{
   Example::Main();
}

/* This example produces the following output:

Examining generic type Test`2[T,U]

Type parameter: T
        No variance flag; No special constraints
        Base
        ITest

Type parameter: U
        No variance flag; No special constraints
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
GenericParameterAttributes
IsGenericParameter

其他资源

如何：使用反射检查和实例化泛型类型


Type ..::.GetGenericTypeDefinition 方法

Type
.
.
::
.
GetGenericTypeDefinition 方法
Type 类

返回一个表示可用于构造当前泛型类型的泛型类型定义的 Type 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetGenericTypeDefinition As Type
public virtual Type GetGenericTypeDefinition()
public:
virtual Type^ GetGenericTypeDefinition()
abstract GetGenericTypeDefinition : unit -> Type
override GetGenericTypeDefinition : unit -> Type

返回值

类型： System Type
表示可用于构造当前类型的泛型类型的 Type 对象。
异常 | 条件
InvalidOperationException | 当前对象不是泛型类型。即 IsGenericType 返回 false。 当前对象不是泛型类型。即 IsGenericType 返回 false。
NotSupportedException | 基类不支持所调用的方法。派生类必须提供实现。 基类不支持所调用的方法。派生类必须提供实现。

泛型类型定义是可用于构造其他类型的模板。例如，可使用泛型类型定义 G<T>（以 C# 语法表示；在 Visual Basic 中为 G(Of T)；在 C++ 中为 generic <typename T> ref class G）构造和初始化类型 G<int>（在 Visual Basic 中为 G(Of Integer)）。给定一个表示此构造类型的 Type 对象，GetGenericTypeDefinition 方法将返回泛型类型定义。 泛型类型定义是可用于构造其他类型的模板。例如，可使用泛型类型定义 G<T>（以 C# 语法表示；在 Visual Basic 中为 G(Of T)；在 C++ 中为 generic <typename T> ref class G）构造和初始化类型 G<int>（在 Visual Basic 中为 G(Of Integer)）。给定一个表示此构造类型的 Type 对象，GetGenericTypeDefinition 方法将返回泛型类型定义。 泛型类型定义是可用于构造其他类型的模板。例如，可使用泛型类型定义 G<T>（以 C# 语法表示；在 Visual Basic 中为 G(Of T)；在 C++ 中为 generic <typename T> ref class G）构造和初始化类型 G<int>（在 Visual Basic 中为 G(Of Integer)）。给定一个表示此构造类型的 Type 对象，GetGenericTypeDefinition 方法将返回泛型类型定义。

如果使用相同的类型实参从相同的泛型类型定义创建两个构造类型，GetGenericTypeDefinition 方法对两个类型都返回相同的 Type 对象。

如果调用已经表示泛型类型定义的 Type 对象的 GetGenericTypeDefinition 方法，它将返回当前的 Type。

重要说明 重要事项

泛型类型的数组本身不是泛型。在 C# 代码 A<int>[] v; 或在 Visual Basic 代码 Dim v() As A(Of Integer) 中，变量 v 的类型不是泛型。在调用 GetGenericTypeDefinition 之前，应使用 IsGenericType 来确定某个类型是否为泛型。 泛型类型的数组本身不是泛型。在 C# 代码 A<int>[] v; 或在 Visual Basic 代码 Dim v() As A(Of Integer) 中，变量 v 的类型不是泛型。在调用 GetGenericTypeDefinition 之前，应使用 IsGenericType 来确定某个类型是否为泛型。 泛型类型的数组本身不是泛型。在 C# 代码 A<int>[] v; 或在 Visual Basic 代码 Dim v() As A(Of Integer) 中，变量 v 的类型不是泛型。在调用 GetGenericTypeDefinition 之前，应使用 IsGenericType 来确定某个类型是否为泛型。

有关泛型反射中使用的术语的固定条件列表，请参见 IsGenericType 属性备注。

下面的代码示例通过使用普通的实例创建来创建构造类型的实例，然后使用 GetType 和 GetGenericTypeDefinition 方法检索构造类型和泛型类型定义。此示例使用泛型 Dictionary<(Of <(TKey, TValue>)>) 类型；构造类型表示具有字符串键的 Test 对象的 Dictionary<(Of <(TKey, TValue>)>)。 下面的代码示例通过使用普通的实例创建来创建构造类型的实例，然后使用 GetType 和 GetGenericTypeDefinition 方法检索构造类型和泛型类型定义。此示例使用泛型 Dictionary<(Of <(TKey, TValue>)>) 类型；构造类型表示具有字符串键的 Test 对象的 Dictionary<(Of <(TKey, TValue>)>)。

Imports System
Imports System.Reflection
Imports System.Collections.Generic
Imports Microsoft.VisualBasic

Public Class Test
    Public Shared Sub Main()
        Console.WriteLine(vbCrLf & "--- Get the generic type that defines a constructed type.")

        ' Create a Dictionary of Test objects, using strings for the
        ' keys.
        Dim d As New Dictionary(Of String, Test)

        ' Get a Type object representing the constructed type.
        '
        Dim constructed As Type = d.GetType()
        DisplayTypeInfo(constructed)

        Dim generic As Type = constructed.GetGenericTypeDefinition()
        DisplayTypeInfo(generic)
    End Sub 'Main

    Private Shared Sub DisplayTypeInfo(ByVal t As Type)
        Console.WriteLine(vbCrLf & t.ToString())
        Console.WriteLine(vbTab & "Is this a generic type definition? " _
            & t.IsGenericTypeDefinition)
        Console.WriteLine(vbTab & "Is it a generic type? " _
            & t.IsGenericType)
        Dim typeArguments As Type() = t.GetGenericArguments()
        Console.WriteLine(vbTab & "List type arguments (" _
            & typeArguments.Length & "):")
        For Each tParam As Type In typeArguments
            Console.WriteLine(vbTab & vbTab & tParam.ToString())
        Next tParam
    End Sub 'DisplayTypeInfo
End Class 'Test

' This example produces the following output:
'
'--- Get the generic type that defines a constructed type.
'
'System.Collections.Generic.Dictionary`2[System.String,Test]
'        Is this a generic type definition? False
'        Is it a generic type? True
'        List type arguments (2):
'                System.String
'                Test
'
'System.Collections.Generic.Dictionary`2[TKey,TValue]
'        Is this a generic type definition? True
'        Is it a generic type? True
'        List type arguments (2):
'                TKey
'                TValue
'

using System;
using System.Reflection;
using System.Collections.Generic;

public class Test
{
    public static void Main()
    {
        Console.WriteLine("\r\n--- Get the generic type that defines a constructed type.");

        // Create a Dictionary of Test objects, using strings for the
        // keys.
        Dictionary<string, Test> d = new Dictionary<string, Test>();

        // Get a Type object representing the constructed type.
        //
        Type constructed = d.GetType();
        DisplayTypeInfo(constructed);

        Type generic = constructed.GetGenericTypeDefinition();
        DisplayTypeInfo(generic);
    }

    private static void DisplayTypeInfo(Type t)
    {
        Console.WriteLine("\r\n{0}", t);
        Console.WriteLine("\tIs this a generic type definition? {0}",
            t.IsGenericTypeDefinition);
        Console.WriteLine("\tIs it a generic type? {0}",
            t.IsGenericType);
        Type[] typeArguments = t.GetGenericArguments();
        Console.WriteLine("\tList type arguments ({0}):", typeArguments.Length);
        foreach (Type tParam in typeArguments)
        {
            Console.WriteLine("\t\t{0}", tParam);
        }
    }
}

/* This example produces the following output:

--- Get the generic type that defines a constructed type.

System.Collections.Generic.Dictionary`2[System.String,Test]
        Is this a generic type definition? False
        Is it a generic type? True
        List type arguments (2):
                System.String
                Test

System.Collections.Generic.Dictionary`2[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey
                TValue
 */

using namespace System;
using namespace System::Reflection;
using namespace System::Collections::Generic;

public ref class Test
{
public:
   static void Main()
   {
      Console::Write( L"\r\n--- Get the generic type that " );
      Console::WriteLine( L"defines a constructed type." );

      // Create a Dictionary of Test objects, using strings for the
      // keys.
      Dictionary< String^,Test^ >^ d = gcnew Dictionary< String^,Test^ >;

      // Get a Type object representing the constructed type.
      //
      Type^ constructed = d->GetType();
      DisplayTypeInfo( constructed );
      Type^ myGeneric = constructed->GetGenericTypeDefinition();
      DisplayTypeInfo( myGeneric );
   }

private:
   static void DisplayTypeInfo( Type^ t )
   {
      Console::WriteLine( L"\r\n{0}", t );
      Console::WriteLine( L"\tIs this a generic type definition? {0}",
         t->IsGenericTypeDefinition );
      Console::WriteLine( L"\tIs it a generic type? {0}",
         t->IsGenericType );
      array<Type^>^typeArguments = t->GetGenericArguments();
      Console::WriteLine( L"\tList type arguments ({0}):",
         typeArguments->Length );
      System::Collections::IEnumerator^ myEnum =
         typeArguments->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Type^ tParam = safe_cast<Type^>(myEnum->Current);
         Console::WriteLine( L"\t\t{0}", tParam );
      }
   }
};

int main()
{
   Test::Main();
}

/* This example produces the following output:

--- Get the generic type that defines a constructed type.

System.Collections.Generic.Dictionary`2[System.String,Test]
        Is this a generic type definition? False
        Is it a generic type? True
        List type arguments (2):
                System.String
                Test

System.Collections.Generic.Dictionary`2[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey
                TValue
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
MakeGenericType
ContainsGenericParameters
IsGenericTypeDefinition

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.GetHashCode 方法

Type
.
.
::
.
GetHashCode 方法
Type 类

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
包含此实例的哈希代码的 Int32。

实现

此方法重写 Object..::.GetHashCode。

下面的示例显示 System.Windows.Forms.Button 类的哈希代码。

Imports System
Imports System.Security
Imports System.Reflection
Imports Microsoft.VisualBasic

' Compile this sample using the following command line:
' vbc type_gethashcode_getfields.vb /r:"System.Windows.Forms.dll" /r:"System.dll"

Class FieldsSample

    Public Shared Sub Main()
        Dim myType As Type = GetType(System.Net.IPAddress)
        Dim myFields As FieldInfo() = myType.GetFields((BindingFlags.Static Or BindingFlags.NonPublic))
        Console.WriteLine(ControlChars.Lf & "The IPAddress class has the following nonpublic fields: ")
        Dim myField As FieldInfo
        For Each myField In myFields
            Console.WriteLine(myField.ToString())
        Next myField
        Dim myType1 As Type = GetType(System.Net.IPAddress)
        Dim myFields1 As FieldInfo() = myType1.GetFields()
        Console.WriteLine(ControlChars.Lf & "The IPAddress class has the following public fields: ")
        Dim myField1 As FieldInfo
        For Each myField1 In myFields1
            Console.WriteLine(myField.ToString())
        Next myField1
        Try
            Console.WriteLine("The HashCode of the System.Windows.Forms.Button type is: {0}", GetType(System.Windows.Forms.Button).GetHashCode())
        Catch e As SecurityException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine(("Message: " & e.Message))
        Catch e As Exception
            Console.WriteLine("An exception occurred.")
            Console.WriteLine(("Message: " & e.Message))
        End Try
    End Sub 'Main
End Class 'FieldsSample

using System;
using System.Security;
using System.Reflection;

class FieldsSample
{
    public static void Main()
    {
        Type myType = typeof(System.Net.IPAddress);
        FieldInfo [] myFields = myType.GetFields(BindingFlags.Static | BindingFlags.NonPublic);
        Console.WriteLine ("\nThe IPAddress class has the following nonpublic fields: ");
        foreach (FieldInfo myField in myFields)
        {
            Console.WriteLine(myField.ToString());
        }
        Type myType1 = typeof(System.Net.IPAddress);
        FieldInfo [] myFields1 = myType1.GetFields();
        Console.WriteLine ("\nThe IPAddress class has the following public fields: ");
        foreach (FieldInfo myField in myFields1)
        {
            Console.WriteLine(myField.ToString());
        }
        try
        {
            Console.WriteLine("The HashCode of the System.Windows.Forms.Button type is: {0}",
                typeof(System.Windows.Forms.Button).GetHashCode());
        }
        catch(SecurityException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message: "+e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Message: "+e.Message);

        }
    }
}

#using <system.dll>
#using <system.windows.forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::Security;
using namespace System::Reflection;

int main()
{
   Type^ myType = System::Net::IPAddress::typeid;
   array<FieldInfo^>^myFields = myType->GetFields( static_cast<BindingFlags>(BindingFlags::Static | BindingFlags::NonPublic) );
   Console::WriteLine( "\nThe IPAddress class has the following nonpublic fields: " );
   System::Collections::IEnumerator^ myEnum = myFields->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      FieldInfo^ myField = safe_cast<FieldInfo^>(myEnum->Current);
      Console::WriteLine( myField );
   }

   Type^ myType1 = System::Net::IPAddress::typeid;
   array<FieldInfo^>^myFields1 = myType1->GetFields();
   Console::WriteLine( "\nThe IPAddress class has the following public fields: " );
   System::Collections::IEnumerator^ myEnum2 = myFields1->GetEnumerator();
   while ( myEnum2->MoveNext() )
   {
      FieldInfo^ myField = safe_cast<FieldInfo^>(myEnum2->Current);
      Console::WriteLine( myField );
   }

   try
   {
      Console::WriteLine( "The HashCode of the System::Windows::Forms::Button type is: {0}", System::Windows::Forms::Button::typeid->GetHashCode() );
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Message: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetInterface 方法

Type
.
.
::
.
GetInterface 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取由当前 Type 实现或继承的特定接口。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetInterface 方法 (String)

Type
.
.
::
.
GetInterface 方法 (String)
Type 类

搜索具有指定名称的接口。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetInterface ( _
    name As String _
) As Type
public Type GetInterface(
    string name
)
public:
virtual Type^ GetInterface(
    String^ name
) sealed
abstract GetInterface :
        name:string -> Type
override GetInterface :
        name:string -> Type

参数

name
类型： System String
包含要获取的接口名称的 String。对于泛型接口，这是重整名称。 包含要获取的接口名称的 String。对于泛型接口，这是重整名称。

返回值

类型： System Type
表示具有指定名称且由当前的 Type 实现或继承的接口的 Type 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
AmbiguousMatchException | 当前 Type 表示使用不同类型参数实现同一泛型接口的类型。

对 name 的搜索区分大小写。

如果当前 Type 表示构造泛型类型，则此方法将返回 Type，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索接口约束以及从类或接口约束继承的所有接口。

说明 说明

对于泛型接口，name 参数为改变后的名称，以抑音符 (`) 和类型参数的数目结尾。泛型接口定义和构造泛型接口都是如此。例如，为了查找 IExample<T>（在 Visual Basic 中为 IExample(Of T)）或 IExample<string>（在 Visual Basic 中为 IExample(Of String)），可搜索 "IExample`1"。 对于泛型接口，name 参数为改变后的名称，以抑音符 (`) 和类型参数的数目结尾。泛型接口定义和构造泛型接口都是如此。例如，为了查找 IExample<T>（在 Visual Basic 中为 IExample(Of T)）或 IExample<string>（在 Visual Basic 中为 IExample(Of String)），可搜索 "IExample`1"。 对于泛型接口，name 参数为改变后的名称，以抑音符 (`) 和类型参数的数目结尾。泛型接口定义和构造泛型接口都是如此。例如，为了查找 IExample<T>（在 Visual Basic 中为 IExample(Of T)）或 IExample<string>（在 Visual Basic 中为 IExample(Of String)），可搜索 "IExample`1"。

下面的代码示例使用 GetInterface(String) 方法搜索 IDeserializationCallback 接口的 Hashtable 类，并列出该接口的方法。

该代码示例还演示 GetInterface(String, Boolean) 方法重载和 GetInterfaceMap 方法。

   Public Shared Sub Main()
      Dim hashtableObj As New Hashtable()
      Dim objType As Type = hashtableObj.GetType()
      Dim arrayMemberInfo() As MemberInfo
      Dim arrayMethodInfo() As MethodInfo
      Try
         ' Get the methods implemented in 'IDeserializationCallback' interface.
         arrayMethodInfo = objType.GetInterface("IDeserializationCallback").GetMethods()
         Console.WriteLine(ControlChars.Cr + "Methods of 'IDeserializationCallback' Interface :")
         Dim index As Integer
         For index = 0 To arrayMethodInfo.Length - 1
            Console.WriteLine(arrayMethodInfo(index).ToString())
         Next index
         ' Get FullName for interface by using Ignore case search.
         Console.WriteLine(ControlChars.Cr + "Methods of 'IEnumerable' Interface")
         arrayMethodInfo = objType.GetInterface("ienumerable", True).GetMethods()
         For index = 0 To arrayMethodInfo.Length - 1
            Console.WriteLine(arrayMethodInfo(index).ToString())
         Next index
         'Get the Interface methods for 'IDictionary' interface
         Dim interfaceMappingObj As InterfaceMapping
         interfaceMappingObj = objType.GetInterfaceMap(GetType(IDictionary))
         arrayMemberInfo = interfaceMappingObj.InterfaceMethods
         Console.WriteLine(ControlChars.Cr + "Hashtable class Implements the following IDictionary Interface methods :")
         For index = 0 To arrayMemberInfo.Length - 1
            Console.WriteLine(arrayMemberInfo(index).ToString())
         Next index
      Catch e As Exception
         Console.WriteLine(("Exception : " + e.ToString()))
      End Try
   End Sub 'Main
End Class 'MyInterfaceClass

public static void Main()
{
    Hashtable hashtableObj = new Hashtable();
    Type objType = hashtableObj.GetType();
    MemberInfo[] arrayMemberInfo;
    MethodInfo[] arrayMethodInfo;
    try
    {
        // Get the methods implemented in 'IDeserializationCallback' interface.
        arrayMethodInfo =objType.GetInterface("IDeserializationCallback").GetMethods();
        Console.WriteLine ("\nMethods of 'IDeserializationCallback' Interface :");
        for(int index=0;index < arrayMethodInfo.Length ;index++)
            Console.WriteLine (arrayMethodInfo[index].ToString() );

        // Get FullName for interface by using Ignore case search.
        Console.WriteLine ("\nMethods of 'IEnumerable' Interface");
        arrayMethodInfo = objType.GetInterface("ienumerable",true).GetMethods();
        for(int index=0;index < arrayMethodInfo.Length ;index++)
           Console.WriteLine (arrayMethodInfo[index].ToString());

        //Get the Interface methods for 'IDictionary' interface
        InterfaceMapping interfaceMappingObj;
        interfaceMappingObj = objType.GetInterfaceMap(typeof(IDictionary));
        arrayMemberInfo = interfaceMappingObj.InterfaceMethods;
        Console.WriteLine ("\nHashtable class Implements the following IDictionary Interface methods :");
        for(int index=0; index < arrayMemberInfo.Length; index++)
            Console.WriteLine (arrayMemberInfo[index].ToString() );
    }
    catch (Exception e)
    {
        Console.WriteLine ("Exception : " + e.ToString());
    }
}

int main()
{
   Hashtable^ hashtableObj = gcnew Hashtable;
   Type^ objType = hashtableObj->GetType();
   array<MemberInfo^>^arrayMemberInfo;
   array<MethodInfo^>^arrayMethodInfo;
   try
   {
      // Get the methods implemented in 'IDeserializationCallback' interface.
      arrayMethodInfo = objType->GetInterface( "IDeserializationCallback" )->GetMethods();
      Console::WriteLine( "\nMethods of 'IDeserializationCallback' Interface :" );
      for ( int index = 0; index < arrayMethodInfo->Length; index++ )
         Console::WriteLine( arrayMethodInfo[ index ] );

      // Get FullName for interface by using Ignore case search.
      Console::WriteLine( "\nMethods of 'IEnumerable' Interface" );
      arrayMethodInfo = objType->GetInterface( "ienumerable", true )->GetMethods();
      for ( int index = 0; index < arrayMethodInfo->Length; index++ )
         Console::WriteLine( arrayMethodInfo[ index ] );

      //Get the Interface methods for 'IDictionary*' interface
      InterfaceMapping interfaceMappingObj;
      interfaceMappingObj = objType->GetInterfaceMap( IDictionary::typeid );
      arrayMemberInfo = interfaceMappingObj.InterfaceMethods;
      Console::WriteLine( "\nHashtable class Implements the following IDictionary Interface methods :" );
      for ( int index = 0; index < arrayMemberInfo->Length; index++ )
         Console::WriteLine( arrayMemberInfo[ index ] );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception : {0}", e );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetInterface 重载
System 命名空间
String
GetInterfaces
FindInterfaces


Type ..::.GetInterface 方法 (String, Boolean)

Type
.
.
::
.
GetInterface 方法 (String, Boolean)
Type 类

当在派生类中重写时，搜索指定的接口，指定是否对接口名称执行不区分大小写的搜索。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetInterface ( _
    name As String, _
    ignoreCase As Boolean _
) As Type
public abstract Type GetInterface(
    string name,
    bool ignoreCase
)
public:
virtual Type^ GetInterface(
    String^ name,
    bool ignoreCase
) abstract
abstract GetInterface :
        name:string *
        ignoreCase:bool -> Type

参数

name
类型： System String
包含要获取的接口名称的 String。对于泛型接口，这是重整名称。 包含要获取的接口名称的 String。对于泛型接口，这是重整名称。
ignoreCase
类型： System Boolean
true 表示对于 name（用来指定简单接口名称）中指定命名空间大小写必须正确的部分，忽略其大小写。
- 或 -
false 表示对 name 的所有部分执行区分大小写的搜索。

返回值

类型： System Type
表示具有指定名称且由当前的 Type 实现或继承的接口的 Type 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
AmbiguousMatchException | 当前 Type 表示使用不同类型参数实现同一泛型接口的类型。

ignoreCase 参数仅适用于简单的接口名称，而不适用于命名空间。name 中的某一部分，该部分指定命名空间的大小写必须正确，否则将找不到该接口。例如，字符串“System.icomparable”能够找到 IComparable 接口，但是字符串“system.icomparable”找不到该接口。 ignoreCase 参数仅适用于简单的接口名称，而不适用于命名空间。name 中的某一部分，该部分指定命名空间的大小写必须正确，否则将找不到该接口。例如，字符串“System.icomparable”能够找到 IComparable 接口，但是字符串“system.icomparable”找不到该接口。 ignoreCase 参数仅适用于简单的接口名称，而不适用于命名空间。name 中的某一部分，该部分指定命名空间的大小写必须正确，否则将找不到该接口。例如，字符串“System.icomparable”能够找到 IComparable 接口，但是字符串“system.icomparable”找不到该接口。

如果当前 Type 表示构造泛型类型，则此方法将返回 Type，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索接口约束以及从类或接口约束继承的所有接口。

说明 说明

对于泛型接口，name 参数为改变后的名称，以抑音符 (`) 和类型参数的数目结尾。泛型接口定义和构造泛型接口都是如此。例如，为了查找 IExample<T>（在 Visual Basic 中为 IExample(Of T)）或 IExample<string>（在 Visual Basic 中为 IExample(Of String)），可搜索 "IExample`1"。 对于泛型接口，name 参数为改变后的名称，以抑音符 (`) 和类型参数的数目结尾。泛型接口定义和构造泛型接口都是如此。例如，为了查找 IExample<T>（在 Visual Basic 中为 IExample(Of T)）或 IExample<string>（在 Visual Basic 中为 IExample(Of String)），可搜索 "IExample`1"。 对于泛型接口，name 参数为改变后的名称，以抑音符 (`) 和类型参数的数目结尾。泛型接口定义和构造泛型接口都是如此。例如，为了查找 IExample<T>（在 Visual Basic 中为 IExample(Of T)）或 IExample<string>（在 Visual Basic 中为 IExample(Of String)），可搜索 "IExample`1"。

下面的代码示例使用 GetInterface(String, Boolean) 方法对 IEnumerable 接口的 Hashtable 类执行不区分大小写的搜索。

该代码示例还演示 GetInterface(String) 方法重载和 GetInterfaceMap 方法。

   Public Shared Sub Main()
      Dim hashtableObj As New Hashtable()
      Dim objType As Type = hashtableObj.GetType()
      Dim arrayMemberInfo() As MemberInfo
      Dim arrayMethodInfo() As MethodInfo
      Try
         ' Get the methods implemented in 'IDeserializationCallback' interface.
         arrayMethodInfo = objType.GetInterface("IDeserializationCallback").GetMethods()
         Console.WriteLine(ControlChars.Cr + "Methods of 'IDeserializationCallback' Interface :")
         Dim index As Integer
         For index = 0 To arrayMethodInfo.Length - 1
            Console.WriteLine(arrayMethodInfo(index).ToString())
         Next index
         ' Get FullName for interface by using Ignore case search.
         Console.WriteLine(ControlChars.Cr + "Methods of 'IEnumerable' Interface")
         arrayMethodInfo = objType.GetInterface("ienumerable", True).GetMethods()
         For index = 0 To arrayMethodInfo.Length - 1
            Console.WriteLine(arrayMethodInfo(index).ToString())
         Next index
         'Get the Interface methods for 'IDictionary' interface
         Dim interfaceMappingObj As InterfaceMapping
         interfaceMappingObj = objType.GetInterfaceMap(GetType(IDictionary))
         arrayMemberInfo = interfaceMappingObj.InterfaceMethods
         Console.WriteLine(ControlChars.Cr + "Hashtable class Implements the following IDictionary Interface methods :")
         For index = 0 To arrayMemberInfo.Length - 1
            Console.WriteLine(arrayMemberInfo(index).ToString())
         Next index
      Catch e As Exception
         Console.WriteLine(("Exception : " + e.ToString()))
      End Try
   End Sub 'Main
End Class 'MyInterfaceClass

public static void Main()
{
    Hashtable hashtableObj = new Hashtable();
    Type objType = hashtableObj.GetType();
    MemberInfo[] arrayMemberInfo;
    MethodInfo[] arrayMethodInfo;
    try
    {
        // Get the methods implemented in 'IDeserializationCallback' interface.
        arrayMethodInfo =objType.GetInterface("IDeserializationCallback").GetMethods();
        Console.WriteLine ("\nMethods of 'IDeserializationCallback' Interface :");
        for(int index=0;index < arrayMethodInfo.Length ;index++)
            Console.WriteLine (arrayMethodInfo[index].ToString() );

        // Get FullName for interface by using Ignore case search.
        Console.WriteLine ("\nMethods of 'IEnumerable' Interface");
        arrayMethodInfo = objType.GetInterface("ienumerable",true).GetMethods();
        for(int index=0;index < arrayMethodInfo.Length ;index++)
           Console.WriteLine (arrayMethodInfo[index].ToString());

        //Get the Interface methods for 'IDictionary' interface
        InterfaceMapping interfaceMappingObj;
        interfaceMappingObj = objType.GetInterfaceMap(typeof(IDictionary));
        arrayMemberInfo = interfaceMappingObj.InterfaceMethods;
        Console.WriteLine ("\nHashtable class Implements the following IDictionary Interface methods :");
        for(int index=0; index < arrayMemberInfo.Length; index++)
            Console.WriteLine (arrayMemberInfo[index].ToString() );
    }
    catch (Exception e)
    {
        Console.WriteLine ("Exception : " + e.ToString());
    }
}

int main()
{
   Hashtable^ hashtableObj = gcnew Hashtable;
   Type^ objType = hashtableObj->GetType();
   array<MemberInfo^>^arrayMemberInfo;
   array<MethodInfo^>^arrayMethodInfo;
   try
   {
      // Get the methods implemented in 'IDeserializationCallback' interface.
      arrayMethodInfo = objType->GetInterface( "IDeserializationCallback" )->GetMethods();
      Console::WriteLine( "\nMethods of 'IDeserializationCallback' Interface :" );
      for ( int index = 0; index < arrayMethodInfo->Length; index++ )
         Console::WriteLine( arrayMethodInfo[ index ] );

      // Get FullName for interface by using Ignore case search.
      Console::WriteLine( "\nMethods of 'IEnumerable' Interface" );
      arrayMethodInfo = objType->GetInterface( "ienumerable", true )->GetMethods();
      for ( int index = 0; index < arrayMethodInfo->Length; index++ )
         Console::WriteLine( arrayMethodInfo[ index ] );

      //Get the Interface methods for 'IDictionary*' interface
      InterfaceMapping interfaceMappingObj;
      interfaceMappingObj = objType->GetInterfaceMap( IDictionary::typeid );
      arrayMemberInfo = interfaceMappingObj.InterfaceMethods;
      Console::WriteLine( "\nHashtable class Implements the following IDictionary Interface methods :" );
      for ( int index = 0; index < arrayMemberInfo->Length; index++ )
         Console::WriteLine( arrayMemberInfo[ index ] );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception : {0}", e );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetInterface 重载
System 命名空间
String
GetInterfaces
FindInterfaces


Type ..::.GetInterfaceMap 方法

Type
.
.
::
.
GetInterfaceMap 方法
Type 类

返回指定接口类型的接口映射。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Overridable Function GetInterfaceMap ( _
    interfaceType As Type _
) As InterfaceMapping
[ComVisibleAttribute(true)]
public virtual InterfaceMapping GetInterfaceMap(
    Type interfaceType
)
[ComVisibleAttribute(true)]
public:
virtual InterfaceMapping GetInterfaceMap(
    Type^ interfaceType
)
[<ComVisibleAttribute(true)>]
abstract GetInterfaceMap :
        interfaceType:Type -> InterfaceMapping
[<ComVisibleAttribute(true)>]
override GetInterfaceMap :
        interfaceType:Type -> InterfaceMapping

参数

interfaceType
类型： System Type
要检索其映射的接口的 Type。

返回值

类型： System.Reflection InterfaceMapping
表示 interfaceType 的接口映射的 InterfaceMapping 对象。

实现

异常 | 条件
ArgumentException | interfaceType 参数不引用接口。 - 或 - interfaceType 是泛型接口，当前类型是数组类型。
ArgumentNullException | interfaceType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 当前的 Type 表示泛型类型参数；即，IsGenericParameter 为 true。
NotSupportedException | 基类不支持所调用的方法。派生类必须提供实现。 基类不支持所调用的方法。派生类必须提供实现。

接口映射表示接口是如何被映射到实现该接口的类上的实际方法。

如果当前 Type 表示构造泛型类型，类型形参将被替换为此方法返回的 InterfaceMapping 的元素中的相应类型实参。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
InterfaceMapping


Type ..::.GetInterfaces 方法

Type
.
.
::
.
GetInterfaces 方法
Type 类

当在派生类中重写时，获取由当前 Type 实现或继承的所有接口。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetInterfaces As Type()
public abstract Type[] GetInterfaces()
public:
virtual array<Type^>^ GetInterfaces() abstract
abstract GetInterfaces : unit -> Type[]

返回值

类型：
array<
System Type
>
[]
()
[]

表示由当前 Type 实现或继承的所有接口的 Type 对象数组。
- 或 -
如果没有由当前 Type 实现或继承的接口，则为 Type 类型的空数组。

实现

异常 | 条件
TargetInvocationException | 调用静态初始值设定项并引发异常。

GetInterfaces 方法不按特定的顺序（如字母顺序或声明顺序）返回接口。您的代码一定不能依赖于接口的返回顺序，因为该顺序可以改变。 GetInterfaces 方法不按特定的顺序（如字母顺序或声明顺序）返回接口。您的代码一定不能依赖于接口的返回顺序，因为该顺序可以改变。

如果当前 Type 表示构造泛型类型，则此方法将返回 Type 对象，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索接口约束以及从类或接口约束继承的所有接口。

下面的示例获取指定类的类型，并显示该类型实现或继承的所有接口。若要编译 Visual Basic 示例，请使用以下编译器命令： 下面的示例获取指定类的类型，并显示该类型实现或继承的所有接口。若要编译 Visual Basic 示例，请使用以下编译器命令：

vbc type_getinterfaces1.vb /r:System.Web.dll /r:System.dll

Imports System.Collections.Generic

Public Class Example

    Shared Sub Main()

        Console.WriteLine(vbCrLf & _
            "Interfaces implemented by Dictionary(Of Integer, String):" & vbCrLf)

        For Each tinterface As Type In GetType(Dictionary(Of Integer, String)).GetInterfaces()

            Console.WriteLine(tinterface.ToString())

        Next

        'Console.ReadLine()      ' Uncomment this line for Visual Studio.
    End Sub
End Class

' This example produces output similar to the following:
'
'Interfaces implemented by Dictionary(Of Integer, String):
'System.Collections.Generic.IDictionary`2[System.Int32,System.String]
'System.Collections.Generic.ICollection`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.String]]
'System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.String]]
'System.Collection.IEnumerable
'System.Collection.IDictionary
'System.Collection.ICollection
'System.Runtime.Serialization.ISerializable
'System.Runtime.Serialization.IDeserializationCallback

using System;
using System.Collections.Generic;

public class Example
{
    static void Main()
    {
        Console.WriteLine("\r\nInterfaces implemented by Dictionary<int, string>:\r\n");

        foreach (Type tinterface in typeof(Dictionary<int, string>).GetInterfaces())
        {
            Console.WriteLine(tinterface.ToString());
        }

        //Console.ReadLine()      // Uncomment this line for Visual Studio.
    }
}

/* This example produces output similar to the following:

Interfaces implemented by Dictionary<int, string>:

System.Collections.Generic.IDictionary`2[System.Int32,System.String]
System.Collections.Generic.ICollection`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.String]]
System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.String]]
System.Collection.IEnumerable
System.Collection.IDictionary
System.Collection.ICollection
System.Runtime.Serialization.ISerializable
System.Runtime.Serialization.IDeserializationCallback
 */

using namespace System;
using namespace System::Collections::Generic;

void main()
{
    Console::WriteLine("\r\nInterfaces implemented by Dictionary<int, String^>:\r\n");

    for each (Type^ tinterface in Dictionary<int, String^>::typeid->GetInterfaces())
    {
        Console::WriteLine(tinterface->ToString());
    }

    //Console::ReadLine()      // Uncomment this line for Visual Studio.
}

/* This example produces output similar to the following:

Interfaces implemented by Dictionary<int, String^>:

System.Collections.Generic.IDictionary`2[System.Int32,System.String]
System.Collections.Generic.ICollection`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.String]]
System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.String]]
System.Collection.IEnumerable
System.Collection.IDictionary
System.Collection.ICollection
System.Runtime.Serialization.ISerializable
System.Runtime.Serialization.IDeserializationCallback
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
GetInterface
FindInterfaces


Type ..::.GetMember 方法

Type
.
.
::
.
GetMember 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的指定成员。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetMember 方法 (String)

Type
.
.
::
.
GetMember 方法 (String)
Type 类

搜索具有指定名称的公共成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetMember ( _
    name As String _
) As MemberInfo()
public MemberInfo[] GetMember(
    string name
)
public:
virtual array<MemberInfo^>^ GetMember(
    String^ name
) sealed
abstract GetMember :
        name:string -> MemberInfo[]
override GetMember :
        name:string -> MemberInfo[]

参数

name
类型： System String
包含要获取的公共成员名称的 String。

返回值

类型：
array<
System.Reflection MemberInfo
>
[]
()
[]

一个表示具有指定名称的公共成员的 MemberInfo 对象数组（如果找到的话）；否则为空数组。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

对 name 的搜索区分大小写。搜索范围包括公共静态和公共实例成员。 对 name 的搜索区分大小写。搜索范围包括公共静态和公共实例成员。

成员包括属性、方法、字段、事件等。

GetMember 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。 GetMember 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。

此方法重载将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 此方法重载将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

如果当前 Type 表示构造泛型类型，则此方法将返回 MemberInfo，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的成员或 Object 的成员（如果没有类约束的话）。

说明 说明

对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。 对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。

下面的示例显示以字母“C”开头的 String 类的所有成员。

Imports System
Imports System.Security
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class MyMemberSample

    Public Shared Sub Main()
        Dim [myClass] As New MyMemberSample()
        Try
            [myClass].GetMemberInfo()
            [myClass].GetPublicStaticMemberInfo()
            [myClass].GetPublicInstanceMethodMemberInfo()
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As NotSupportedException
            Console.WriteLine("NotSupportedException occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As SecurityException
            Console.WriteLine("SecurityException occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As Exception
            Console.WriteLine("Exception occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        End Try
    End Sub 'Main

    Public Sub GetMemberInfo()
        Dim myString As [String] = "GetMember_String"
        Dim myType As Type = myString.GetType()
        ' Get the members for myString starting with the letter C.
        Dim myMembers As MemberInfo() = myType.GetMember("C*")
        If myMembers.Length > 0 Then
            Console.WriteLine(ControlChars.Cr + "The member(s) starting with the letter C for type {0}:", myType)
            Dim index As Integer
            For index = 0 To myMembers.Length - 1
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
            Next index
        Else
            Console.WriteLine("No members match the search criteria.")
        End If
    End Sub 'GetMemberInfo

using System;
using System.Security;
using System.Reflection;

public class MyMemberSample
{
    public static void Main()
    {
        MyMemberSample myClass = new MyMemberSample();
        try
        {
            myClass.GetMemberInfo();
            myClass.GetPublicStaticMemberInfo();
            myClass.GetPublicInstanceMethodMemberInfo();
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(NotSupportedException e)
        {
            Console.WriteLine("NotSupportedException occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
    }

    public void GetMemberInfo()
    {
        String myString = "GetMember_String";

        Type myType = myString.GetType();
        // Get the members for myString starting with the letter C.
        MemberInfo[] myMembers = myType.GetMember("C*");
        if(myMembers.Length > 0)
        {
            Console.WriteLine("\nThe member(s) starting with the letter C for type {0}:", myType);
            for(int index=0; index < myMembers.Length; index++)
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
        }
        else
            Console.WriteLine("No members match the search criteria.");
    }

using namespace System;
using namespace System::Security;
using namespace System::Reflection;

// forward declarations:
void GetMemberInfo();
void GetPublicStaticMemberInfo();
void GetPublicInstanceMethodMemberInfo();
int main()
{
   try
   {
      GetMemberInfo();
      GetPublicStaticMemberInfo();
      GetPublicInstanceMethodMemberInfo();
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "ArgumentNullException occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( NotSupportedException^ e )
   {
      Console::WriteLine( "NotSupportedException occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "SecurityException occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }

}

void GetMemberInfo()
{
   String^ myString = "GetMember_String";
   Type^ myType = myString->GetType();

   // Get the members for myString starting with the letter C.
   array<MemberInfo^>^myMembers = myType->GetMember( "C*" );
   if ( myMembers->Length > 0 )
   {
      Console::WriteLine( "\nThe member(s) starting with the letter C for type {0}:", myType );
      for ( int index = 0; index < myMembers->Length; index++ )
         Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
   }
   else
      Console::WriteLine( "No members match the search criteria." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMember 重载
System 命名空间
MemberInfo
String
DefaultBinder
GetMembers
GetDefaultMembers
FindMembers


Type ..::.GetMember 方法 (String, BindingFlags)

Type
.
.
::
.
GetMember 方法 (String, BindingFlags)
Type 类

使用指定绑定约束搜索指定成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetMember ( _
    name As String, _
    bindingAttr As BindingFlags _
) As MemberInfo()
public virtual MemberInfo[] GetMember(
    string name,
    BindingFlags bindingAttr
)
public:
virtual array<MemberInfo^>^ GetMember(
    String^ name,
    BindingFlags bindingAttr
)
abstract GetMember :
        name:string *
        bindingAttr:BindingFlags -> MemberInfo[]
override GetMember :
        name:string *
        bindingAttr:BindingFlags -> MemberInfo[]

参数

name
类型： System String
包含要获取的成员的名称的 String。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，返回空数组。

返回值

类型：
array<
System.Reflection MemberInfo
>
[]
()
[]

一个表示具有指定名称的公共成员的 MemberInfo 对象数组（如果找到的话）；否则为空数组。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法可由派生类重写。

成员包括属性、方法、字段、事件等。

GetMember 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。 GetMember 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共成员。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共成员（即私有成员、内部成员和受保护的成员）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，仅搜索 Type 上声明的成员，而不搜索被简单继承的成员。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

若要使用此方法重载获取类初始值设定项 (.cctor)，必须为 name 和 BindingFlags..::.Static 指定“.cctor”。 |bindingAttr 的 BindingFlags..::.NonPublic（Visual Basic 中 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 若要使用此方法重载获取类初始值设定项 (.cctor)，必须为 name 和 BindingFlags..::.Static 指定“.cctor”。 |bindingAttr 的 BindingFlags..::.NonPublic（Visual Basic 中 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 若要使用此方法重载获取类初始值设定项 (.cctor)，必须为 name 和 BindingFlags..::.Static 指定“.cctor”。 |bindingAttr 的 BindingFlags..::.NonPublic（Visual Basic 中 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

如果当前 Type 表示构造泛型类型，则此方法将返回 MemberInfo，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的成员或 Object 的成员（如果没有类约束的话）。

说明 说明

对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。 对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。

下面的示例显示以字母“C”开头的 myString 类的所有公共静态成员。

Public Sub GetPublicStaticMemberInfo()
    Dim myString As [String] = "GetMember_String_BindingFlag"

    Dim myType As Type = myString.GetType()
    ' Get the public static members for the class myString starting with the letter C.
    Dim myMembers As MemberInfo() = myType.GetMember("C*", BindingFlags.Public Or BindingFlags.Static)

    If myMembers.Length > 0 Then
        Console.WriteLine(ControlChars.Cr + "The public static member(s) starting with the letter C for type {0}:", myType)
        Dim index As Integer
        For index = 0 To myMembers.Length - 1
            Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
        Next index
    Else
        Console.WriteLine("No members match the search criteria.")
    End If
End Sub 'GetPublicStaticMemberInfo

public void GetPublicStaticMemberInfo()
{
    String myString = "GetMember_String_BindingFlag";
    Type myType = myString.GetType();
    // Get the public static members for the class myString starting with the letter C.
    MemberInfo[] myMembers = myType.GetMember("C*",
        BindingFlags.Public |BindingFlags.Static);
    if(myMembers.Length > 0)
    {
        Console.WriteLine("\nThe public static member(s) starting with the letter C for type {0}:", myType);
        for(int index=0; index < myMembers.Length; index++)
            Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
    }
    else
        Console.WriteLine("No members match the search criteria.");
}

void GetPublicStaticMemberInfo()
{
   String^ myString = "GetMember_String_BindingFlag";
   Type^ myType = myString->GetType();

   // Get the public static members for the class myString starting with the letter C
   array<MemberInfo^>^myMembers = myType->GetMember( "C*", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static) );
   if ( myMembers->Length > 0 )
   {
      Console::WriteLine( "\nThe public static member(s) starting with the letter C for type {0}:", myType );
      for ( int index = 0; index < myMembers->Length; index++ )
         Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
   }
   else
      Console::WriteLine( "No members match the search criteria." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMember 重载
System 命名空间
MemberInfo
String
BindingFlags
DefaultBinder
GetMembers
GetDefaultMembers
FindMembers


Type ..::.GetMember 方法 (String, MemberTypes, BindingFlags)

Type
.
.
::
.
GetMember 方法 (String, MemberTypes, BindingFlags)
Type 类

使用指定绑定约束搜索指定成员类型的指定成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetMember ( _
    name As String, _
    type As MemberTypes, _
    bindingAttr As BindingFlags _
) As MemberInfo()
public virtual MemberInfo[] GetMember(
    string name,
    MemberTypes type,
    BindingFlags bindingAttr
)
public:
virtual array<MemberInfo^>^ GetMember(
    String^ name,
    MemberTypes type,
    BindingFlags bindingAttr
)
abstract GetMember :
        name:string *
        type:MemberTypes *
        bindingAttr:BindingFlags -> MemberInfo[]
override GetMember :
        name:string *
        type:MemberTypes *
        bindingAttr:BindingFlags -> MemberInfo[]

参数

name
类型： System String
包含要获取的成员的名称的 String。
type
类型： System.Reflection MemberTypes
要搜索的 MemberTypes 值。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，返回空数组。

返回值

类型：
array<
System.Reflection MemberInfo
>
[]
()
[]

一个表示具有指定名称的公共成员的 MemberInfo 对象数组（如果找到的话）；否则为空数组。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 派生类必须提供实现。

成员包括属性、方法、字段、事件等。

GetMember 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。 GetMember 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共成员。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共成员（即私有成员、内部成员和受保护的成员）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，仅搜索 Type 上声明的成员，而不搜索被简单继承的成员。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

若要使用此方法重载获取类初始值设定项 (.cctor)，必须为 name、type 的 MemberTypes..::.Constructor、BindingFlags..::.Static 指定“.cctor”。 |bindingAttr 的 BindingFlags..::.NonPublic（Visual Basic 中 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 若要使用此方法重载获取类初始值设定项 (.cctor)，必须为 name、type 的 MemberTypes..::.Constructor、BindingFlags..::.Static 指定“.cctor”。 |bindingAttr 的 BindingFlags..::.NonPublic（Visual Basic 中 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 若要使用此方法重载获取类初始值设定项 (.cctor)，必须为 name、type 的 MemberTypes..::.Constructor、BindingFlags..::.Static 指定“.cctor”。 |bindingAttr 的 BindingFlags..::.NonPublic（Visual Basic 中 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

如果当前 Type 表示构造泛型类型，则此方法将返回 MemberInfo，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的成员或 Object 的成员（如果没有类约束的话）。

说明 说明

对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。 对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。

下面的示例显示以字母“C”开头的 myString 类的所有方法。

    Public Sub GetPublicInstanceMethodMemberInfo()
        Dim myString As [String] = "GetMember_String_MemberType_BindingFlag"

        Dim myType As Type = myString.GetType()
        ' Get the public instance methods for myString starting with the letter C.
        Dim myMembers As MemberInfo() = myType.GetMember("C*", MemberTypes.Method, BindingFlags.Public Or BindingFlags.Instance)
        If myMembers.Length > 0 Then
            Console.WriteLine(ControlChars.Cr + "The public instance method(s) starting with the letter C for type {0}:", myType)
            Dim index As Integer
            For index = 0 To myMembers.Length - 1
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
            Next index
        Else
            Console.WriteLine("No members match the search criteria.")
        End If
    End Sub 'GetPublicInstanceMethodMemberInfo
End Class 'MyMemberSample

    public void GetPublicInstanceMethodMemberInfo()
    {
        String myString = "GetMember_String_MemberType_BindingFlag";
        Type myType = myString.GetType();
        // Get the public instance methods for myString starting with the letter C.
        MemberInfo[] myMembers = myType.GetMember("C*", MemberTypes.Method,
            BindingFlags.Public | BindingFlags.Instance);
        if(myMembers.Length > 0)
        {
            Console.WriteLine("\nThe public instance method(s) starting with the letter C for type {0}:", myType);
            for(int index=0; index < myMembers.Length; index++)
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
        }
        else
            Console.WriteLine("No members match the search criteria.");
    }
}

void GetPublicInstanceMethodMemberInfo()
{
   String^ myString = "GetMember_String_MemberType_BindingFlag";
   Type^ myType = myString->GetType();

   // Get the public instance methods for myString starting with the letter C.
   array<MemberInfo^>^myMembers = myType->GetMember( "C*", MemberTypes::Method, static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
   if ( myMembers->Length > 0 )
   {
      Console::WriteLine( "\nThe public instance method(s) starting with the letter C for type {0}:", myType );
      for ( int index = 0; index < myMembers->Length; index++ )
         Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
   }
   else
      Console::WriteLine( "No members match the search criteria." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetMember 重载
System 命名空间
MemberInfo
String
BindingFlags
DefaultBinder
GetMembers
GetDefaultMembers
FindMembers


Type ..::.GetMembers 方法

Type
.
.
::
.
GetMembers 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的成员（包括属性、方法、字段、事件等）。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetMembers 方法

Type
.
.
::
.
GetMembers 方法
Type 类

返回当前 Type 的所有公共成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetMembers As MemberInfo()
public MemberInfo[] GetMembers()
public:
virtual array<MemberInfo^>^ GetMembers() sealed
abstract GetMembers : unit -> MemberInfo[]
override GetMembers : unit -> MemberInfo[]

返回值

类型：
array<
System.Reflection MemberInfo
>
[]
()
[]

表示当前 Type 的所有公共成员的 MemberInfo 对象数组。
- 或 -
如果当前 Type 没有公共成员，则为 MemberInfo 类型的空数组。

实现

成员包括属性、方法、字段、事件等。

GetMembers 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。 GetMembers 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。

此方法重载使用 BindingFlags..::.Public 调用 GetMembers(BindingFlags) 方法重载 | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.InstanceOrBindingFlags..::.Static）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | BindingFlags Instance | 此方法重载使用 BindingFlags..::.Public 调用 GetMembers(BindingFlags) 方法重载 | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.InstanceOrBindingFlags..::.Static）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载使用 BindingFlags..::.Public 调用 GetMembers(BindingFlags) 方法重载 | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.InstanceOrBindingFlags..::.Static）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载使用 BindingFlags..::.Public 调用 GetMembers(BindingFlags) 方法重载 | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.InstanceOrBindingFlags..::.Static）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 此方法重载使用 BindingFlags..::.Public 调用 GetMembers(BindingFlags) 方法重载 | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.InstanceOrBindingFlags..::.Static）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 此方法重载使用 BindingFlags..::.Public 调用 GetMembers(BindingFlags) 方法重载 | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中为 BindingFlags..::.PublicOrBindingFlags..::.InstanceOrBindingFlags..::.Static）。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项，请使用采用 BindingFlags 的重载并指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

如果当前 Type 表示构造泛型类型，则此方法将返回 MemberInfo 对象，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的成员或 Object 的成员（如果没有类约束的话）。

下面的代码示例演示如何使用 GetMembers()()() 方法重载收集有关所指定类的所有公共成员的信息。

Class [MyClass]
   Public myInt As Integer = 0
   Public myString As String = Nothing

   Public Sub New()
   End Sub 'New

   Public Sub Myfunction()
   End Sub 'Myfunction
End Class '[MyClass]

Class Type_GetMembers

   Public Shared Sub Main()
      Try
         Dim myObject As New [MyClass]()
         Dim myMemberInfo() As MemberInfo

         ' Get the type of 'MyClass'.
         Dim myType As Type = myObject.GetType()

         ' Get the information related to all public member's of 'MyClass'.
         myMemberInfo = myType.GetMembers()

         Console.WriteLine(ControlChars.Cr + "The members of class '{0}' are :" + ControlChars.Cr, myType)
         Dim i As Integer
         For i = 0 To myMemberInfo.Length - 1
            ' Display name and type of the concerned member.
            Console.WriteLine("'{0}' is a {1}", myMemberInfo(i).Name, myMemberInfo(i).MemberType)
         Next i

      Catch e As SecurityException
         Console.WriteLine(("Exception : " + e.Message.ToString()))
      End Try
   End Sub 'Main
End Class 'Type_GetMembers

class MyClass
{
   public int myInt = 0;
   public string myString = null;

   public MyClass()
   {
   }
   public void Myfunction()
   {
   }
}

class Type_GetMembers
{
   public static void Main()
   {
      try
      {
         MyClass myObject = new MyClass();
         MemberInfo[] myMemberInfo;

         // Get the type of 'MyClass'.
         Type myType = myObject.GetType();

         // Get the information related to all public member's of 'MyClass'.
         myMemberInfo = myType.GetMembers();

         Console.WriteLine( "\nThe members of class '{0}' are :\n", myType);
         for (int i =0 ; i < myMemberInfo.Length ; i++)
         {
            // Display name and type of the concerned member.
            Console.WriteLine( "'{0}' is a {1}", myMemberInfo[i].Name, myMemberInfo[i].MemberType);
         }
      }
      catch(SecurityException e)
      {
         Console.WriteLine("Exception : " + e.Message );
      }
   }
}

ref class MyClass
{
public:
   int myInt;
   String^ myString;
   MyClass(){}

   void Myfunction(){}

};

int main()
{
   try
   {
      MyClass^ myObject = gcnew MyClass;
      array<MemberInfo^>^myMemberInfo;

      // Get the type of 'MyClass'.
      Type^ myType = myObject->GetType();

      // Get the information related to all public members of 'MyClass'.
      myMemberInfo = myType->GetMembers();
      Console::WriteLine( "\nThe members of class '{0}' are :\n", myType );
      for ( int i = 0; i < myMemberInfo->Length; i++ )
      {

         // Display name and type of the concerned member.
         Console::WriteLine( "'{0}' is a {1}", myMemberInfo[ i ]->Name, myMemberInfo[ i ]->MemberType );

      }
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "Exception : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMembers 重载
System 命名空间
MemberInfo
GetMember
GetDefaultMembers
FindMembers


Type ..::.GetMembers 方法 (BindingFlags)

Type
.
.
::
.
GetMembers 方法 (BindingFlags)
Type 类

当在派生类中重写时，使用指定绑定约束，搜索为当前 Type 定义的成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetMembers ( _
    bindingAttr As BindingFlags _
) As MemberInfo()
public abstract MemberInfo[] GetMembers(
    BindingFlags bindingAttr
)
public:
virtual array<MemberInfo^>^ GetMembers(
    BindingFlags bindingAttr
) abstract
abstract GetMembers :
        bindingAttr:BindingFlags -> MemberInfo[]

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型：
array<
System.Reflection MemberInfo
>
[]
()
[]

表示为当前 Type 定义的匹配指定绑定约束的所有成员的 MemberInfo 对象数组。
- 或 -
如果没有为当前 Type 定义的成员，或者如果没有一个定义的成员匹配绑定约束，则为 MemberInfo 类型的空数组。

实现

成员包括属性、方法、字段、事件等。

GetMembers 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。 GetMembers 方法不按特定的顺序（如字母顺序或声明顺序）返回成员。您的代码一定不能依赖于成员的返回顺序，因为该顺序可以改变。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共成员。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共成员（即私有成员、内部成员和受保护的成员）。只返回基类上的受保护成员和内部成员；不返回基类上的私有成员。 指定 BindingFlags.NonPublic 可在搜索中包含非公共成员（即私有成员、内部成员和受保护的成员）。只返回基类上的受保护成员和内部成员；不返回基类上的私有成员。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.DeclaredOnly，仅搜索 Type 上声明的成员，而不搜索被简单继承的成员。

仅用 Public 标志或仅用 NonPublic 标志调用此方法将返回指定成员，并且不需要任何其他标志。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

若要使用此方法重载获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 | 若要使用此方法重载获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。 若要使用此方法重载获取类初始值设定项 (.cctor)，您必须指定 BindingFlags..::.Static。 |BindingFlags..::.NonPublic（在 Visual Basic 中为 BindingFlags..::.StaticOrBindingFlags..::.NonPublic）。还可以使用 TypeInitializer 属性获取类初始值设定项。

如果当前 T:System.Type 表示构造泛型类型，则此方法将返回 MemberInfo 对象，并且其类型形参替换为相应的类型实参。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的成员或 Object 的成员（如果没有类约束的话）。

下面的代码示例演示如何使用 GetMembers(BindingFlags) 方法重载收集有关所指定类的所有公共实例成员的信息。

Class [MyClass]
   Public myInt As Integer = 0
   Public myString As String = Nothing

   Public Sub New()
   End Sub 'New

   Public Sub Myfunction()
   End Sub 'Myfunction
End Class '[MyClass]

Class Type_GetMembers_BindingFlags

   Public Shared Sub Main()
      Try
         Dim MyObject As New [MyClass]()
         Dim myMemberInfo() As MemberInfo

         ' Get the type of the class 'MyClass'.
         Dim myType As Type = MyObject.GetType()

         ' Get the public instance members of the class 'MyClass'.
         myMemberInfo = myType.GetMembers((BindingFlags.Public Or BindingFlags.Instance))

         Console.WriteLine(ControlChars.Cr + "The public instance members of class '{0}' are : " + ControlChars.Cr, myType)
         Dim i As Integer
         For i = 0 To myMemberInfo.Length - 1
            ' Display name and type of the member of 'MyClass'.
            Console.WriteLine("'{0}' is a {1}", myMemberInfo(i).Name, myMemberInfo(i).MemberType)
         Next i

      Catch e As SecurityException
         Console.WriteLine(("SecurityException : " + e.Message.ToString()))
      End Try
   End Sub 'Main
End Class 'Type_GetMembers_BindingFlags

class MyClass
{
   public int myInt = 0;
   public string myString = null;

   public MyClass()
   {
   }
   public void Myfunction()
   {
   }
}

class Type_GetMembers_BindingFlags
{
   public static void Main()
   {
      try
      {
         MyClass MyObject = new MyClass();
         MemberInfo [] myMemberInfo;

         // Get the type of the class 'MyClass'.
         Type myType = MyObject.GetType();

         // Get the public instance members of the class 'MyClass'.
         myMemberInfo = myType.GetMembers(BindingFlags.Public|BindingFlags.Instance);

         Console.WriteLine( "\nThe public instance members of class '{0}' are : \n", myType);
         for (int i =0 ; i < myMemberInfo.Length ; i++)
         {
            // Display name and type of the member of 'MyClass'.
            Console.WriteLine( "'{0}' is a {1}", myMemberInfo[i].Name, myMemberInfo[i].MemberType);
         }

      }
      catch (SecurityException e)
      {
         Console.WriteLine("SecurityException : " + e.Message );
      }
   }
}

ref class MyClass
{
public:
   int * myInt;
   String^ myString;
   MyClass(){}

   void Myfunction(){}

};

int main()
{
   try
   {
      MyClass^ MyObject = gcnew MyClass;
      array<MemberInfo^>^myMemberInfo;

      // Get the type of the class 'MyClass'.
      Type^ myType = MyObject->GetType();

      // Get the public instance members of the class 'MyClass'.
      myMemberInfo = myType->GetMembers( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
      Console::WriteLine( "\nThe public instance members of class '{0}' are : \n", myType );
      for ( int i = 0; i < myMemberInfo->Length; i++ )
      {

         // Display name and type of the member of 'MyClass'.
         Console::WriteLine( "'{0}' is a {1}", myMemberInfo[ i ]->Name, myMemberInfo[ i ]->MemberType );

      }
   }
   catch ( SecurityException^ e )
   {
      Console::WriteLine( "SecurityException : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMembers 重载
System 命名空间
MemberInfo
BindingFlags
DefaultBinder
GetMember
GetDefaultMembers
FindMembers


Type ..::.GetMethod 方法

Type
.
.
::
.
GetMethod 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的特定方法。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetMethod 方法 (String)

Type
.
.
::
.
GetMethod 方法 (String)
Type 类

搜索具有指定名称的公共方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetMethod ( _
    name As String _
) As MethodInfo
public MethodInfo GetMethod(
    string name
)
public:
virtual MethodInfo^ GetMethod(
    String^ name
) sealed
abstract GetMethod :
        name:string -> MethodInfo
override GetMethod :
        name:string -> MethodInfo

参数

name
类型： System String
包含要获取的公共方法的名称的 String。

返回值

类型： System.Reflection MethodInfo
表示具有指定名称的公共方法的 MethodInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到不止一个具有指定名称的方法。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

对 name 的搜索区分大小写。搜索范围包括公共静态方法和公共实例方法。 对 name 的搜索区分大小写。搜索范围包括公共静态方法和公共实例方法。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 MethodInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的方法或 Object 的方法（如果没有类约束的话）。

说明 说明

对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。 对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。

下面的示例获取名为 MethodA 的方法。

Imports System
Imports System.Reflection

Class Program

    ' Method to get:
    Public Sub MethodA()
    End Sub

    Public Shared Sub Main(ByVal args() As String)

        ' Get MethodA()
        Dim mInfo As MethodInfo = GetType(Program).GetMethod("MethodA")
        Console.WriteLine("Found method: {0}", mInfo)

    End Sub
End Class

using System;
using System.Reflection;

class Program
{

    // Method to get:
    public void MethodA() { }

    static void Main(string[] args)
    {

        // Get MethodA()
        MethodInfo mInfo = typeof(Program).GetMethod("MethodA");
        Console.WriteLine("Found method: {0}", mInfo);

    }
}

using namespace System;
using namespace System::Reflection;
public ref class Program
{

    public:

        // Method to get:
        void MethodA() { }

    };

    int main()
    {

        // Get MethodA()
        MethodInfo^ mInfo = Program::typeid->GetMethod("MethodA");
        Console::WriteLine("Found method: {0}", mInfo );

    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMethod 重载
System 命名空间
MethodInfo
String
DefaultBinder
GetMethodImpl
GetMethods


Type ..::.GetMethod 方法 (String, BindingFlags)

Type
.
.
::
.
GetMethod 方法 (String, BindingFlags)
Type 类

使用指定绑定约束搜索指定方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetMethod ( _
    name As String, _
    bindingAttr As BindingFlags _
) As MethodInfo
public MethodInfo GetMethod(
    string name,
    BindingFlags bindingAttr
)
public:
virtual MethodInfo^ GetMethod(
    String^ name,
    BindingFlags bindingAttr
) sealed
abstract GetMethod :
        name:string *
        bindingAttr:BindingFlags -> MethodInfo
override GetMethod :
        name:string *
        bindingAttr:BindingFlags -> MethodInfo

参数

name
类型： System String
包含要获取的方法名称的 String。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System.Reflection MethodInfo
表示符合指定要求的方法的 MethodInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到多个有指定名称且与指定绑定约束匹配的方法。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的方法：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共方法。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共方法（即私有方法、内部方法和受保护的方法）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，表示仅搜索在 Type 上声明的方法，而不搜索简单继承的方法。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 MethodInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的方法或 Object 的方法（如果没有类约束的话）。

说明 说明

对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。 对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。

下面的示例获取与指定绑定标志相匹配的方法。

Imports System
Imports System.Reflection

Class Program

    ' Method to get:
    Public Sub MethodA()
    End Sub

    Public Shared Sub Main(ByVal args() As String)

        ' Get MethodA()
        Dim mInfo As MethodInfo = GetType(Program).GetMethod("MethodA", _
            BindingFlags.Public Or BindingFlags.Instance)
        Console.WriteLine("Found method: {0}", mInfo)

    End Sub
End Class

using System;
using System.Reflection;

class Program
{

    // Method to get:
    public void MethodA() { }

    static void Main(string[] args)
    {

        // Get MethodA()
        MethodInfo mInfo = typeof(Program).GetMethod("MethodA",
            BindingFlags.Public | BindingFlags.Instance);
        Console.WriteLine("Found method: {0}", mInfo);

    }
}

using namespace System;
using namespace System::Reflection;
public ref class Program
{

    public:

        // Method to get:
        void MethodA() { }

    };

    int main()
    {

        // Get MethodA()
        MethodInfo^ mInfo = Program::typeid->GetMethod("MethodA",
            static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance));
        Console::WriteLine("Found method: {0}", mInfo );

    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMethod 重载
System 命名空间
MethodInfo
String
BindingFlags
DefaultBinder
GetMethodImpl
GetMethods


Type ..::.GetMethod 方法 (String, array<Type >[]()[])

Type
.
.
::
.
GetMethod 方法 (String,
array<
Type
>
[]
()
[]
)
Type 类

搜索其参数与指定参数类型匹配的指定公共方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetMethod ( _
    name As String, _
    types As Type() _
) As MethodInfo
public MethodInfo GetMethod(
    string name,
    Type[] types
)
public:
virtual MethodInfo^ GetMethod(
    String^ name,
    array<Type^>^ types
) sealed
abstract GetMethod :
        name:string *
        types:Type[] -> MethodInfo
override GetMethod :
        name:string *
        types:Type[] -> MethodInfo

参数

name
类型： System String
包含要获取的公共方法的名称的 String。
types
类型：
array<
System Type
>
[]
()
[]

表示此方法要获取的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
空的 Type 对象数组（由 EmptyTypes 字段提供），用来获取不采用参数的方法。

返回值

类型： System.Reflection MethodInfo
表示其参数与指定参数类型匹配的公共方法的 MethodInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到不止一个具有指定名称和指定参数的方法。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 中的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。

对 name 的搜索区分大小写。搜索范围包括公共静态方法和公共实例方法。 对 name 的搜索区分大小写。搜索范围包括公共静态方法和公共实例方法。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 MethodInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的方法或 Object 的方法（如果没有类约束的话）。

说明 说明

name 参数不能包含类型参数。例如，C# 代码 GetMethod("MyGenericMethod<int>") 搜索文本名称为 MyGenericMethod<int>" 的方法，而不是搜索具有一个 int 类型的泛型实参的名为 MyGenericMethod 的方法。 name 参数不能包含类型参数。例如，C# 代码 GetMethod("MyGenericMethod<int>") 搜索文本名称为 MyGenericMethod<int>" 的方法，而不是搜索具有一个 int 类型的泛型实参的名为 MyGenericMethod 的方法。

下面的示例查找 MethodA 的特定重载，并指定各种参数类型。

说明 说明

Visual C# 2005 示例需要 /unsafe 编译器选项。

Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

Class Program

    ' Methods to get:

    Public Overloads Sub MethodA(ByVal i As Integer, ByVal l As Long)

    End Sub

    Public Overloads Sub MethodA(ByVal i() As Integer)

    End Sub

    Public Overloads Sub MethodA(ByRef r As Integer)

    End Sub

    ' Method that takes an out parameter. Note that an Imports
    ' reference is needed to System.Runtime.InteropServices
    ' for the <OutAttribute>, which can be shortened to <Out>.
    Public Overloads Sub MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
        o = 100
    End Sub

    Public Shared Sub Main(ByVal args() As String)
        Dim mInfo As MethodInfo

        ' Get MethodA(i As Integer i, l As Long)
        mInfo = GetType(Program).GetMethod("MethodA", New Type() {GetType(Integer), GetType(Long)})
        Console.WriteLine("Found method: {0}", mInfo)

        ' Get  MethodA(i As Integer())
        mInfo = GetType(Program).GetMethod("MethodA", New Type() {GetType(Integer())})
        Console.WriteLine("Found method: {0}", mInfo)

        ' Get MethodA(ByRef r As Integer)
        mInfo = GetType(Program).GetMethod("MethodA", New Type() {GetType(Integer).MakeByRefType})
        Console.WriteLine("Found method: {0}", mInfo)

        ' Get MethodA(i As Integer, ByRef r As Integer)
        mInfo = GetType(Program).GetMethod("MethodA", New Type() {GetType(Integer), _
            GetType(Integer).MakeByRefType})
        Console.WriteLine("Found method: {0}", mInfo)

    End Sub
End Class

using System;
using System.Reflection;

class Program
{
    // Methods to get:

    public void MethodA(int i, int j) { }

    public void MethodA(int[] i) { }

    public unsafe void MethodA(int* i) { }

    public void MethodA(ref int r) {}

    // Method that takes an out parameter:
    public void MethodA(int i, out int o) { o = 100;}

  static void Main(string[] args)
  {
    MethodInfo mInfo;

    // Get MethodA(int i, int i)
    mInfo = typeof(Program).GetMethod("MethodA",
        new Type[] { typeof(int), typeof(int) });
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int[] i)
    mInfo = typeof(Program).GetMethod("MethodA",
        new Type[] { typeof(int[]) });
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int* i)
    mInfo = typeof(Program).GetMethod("MethodA",
        new Type[] { typeof(int).MakePointerType() });
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(ref int r)
    mInfo = typeof(Program).GetMethod("MethodA",
        new Type[] { typeof(int).MakeByRefType() });
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int i, out int o)
    mInfo = typeof(Program).GetMethod("MethodA",
        new Type[] { typeof(int), typeof(int).MakeByRefType() });
    Console.WriteLine("Found method: {0}", mInfo);

  }
}

using namespace System;
using namespace System::Reflection;

public ref class Program
{

public:
    // Methods to get:

    void MethodA(int i, int j) { }

    void MethodA(array<int>^ iarry) { }

    void MethodA(double *ip) { }

    // Method that takes a managed reference parameter.
    void MethodA(int% r) {}
};

int main()
{
    MethodInfo^ mInfo;

    // Get MethodA(int i, int j)
    mInfo = Program::typeid->GetMethod("MethodA", gcnew array<Type^> {int::typeid,int::typeid});
    Console::WriteLine("Found method: {0}", mInfo );

    // Get MethodA(array<int>^ iarry)
    mInfo = Program::typeid->GetMethod("MethodA", gcnew array<Type^> {int::typeid->MakeArrayType()});
    Console::WriteLine("Found method: {0}", mInfo );

    // Get MethodA(double *ip)
    mInfo = Program::typeid->GetMethod("MethodA", gcnew array<Type^> {double::typeid->MakePointerType()});
    Console::WriteLine("Found method: {0}", mInfo );

    // Get MethodA(int% r)
    mInfo = Program::typeid->GetMethod("MethodA", gcnew array<Type^> {int::typeid->MakeByRefType()});
    // Display the method information.
    Console::WriteLine("Found method: {0}", mInfo );

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMethod 重载
System 命名空间
MethodInfo
String
DefaultBinder
GetMethodImpl
GetMethods


Type ..::.GetMethod 方法 (String, array<Type >[]()[], array<ParameterModifier >[]()[])

Type
.
.
::
.
GetMethod 方法 (String,
array<
Type
>
[]
()
[]
,
array<
ParameterModifier
>
[]
()
[]
)
Type 类

搜索其参数与指定参数类型及修饰符匹配的指定公共方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetMethod ( _
    name As String, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As MethodInfo
public MethodInfo GetMethod(
    string name,
    Type[] types,
    ParameterModifier[] modifiers
)
public:
virtual MethodInfo^ GetMethod(
    String^ name,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) sealed
abstract GetMethod :
        name:string *
        types:Type[] *
        modifiers:ParameterModifier[] -> MethodInfo
override GetMethod :
        name:string *
        types:Type[] *
        modifiers:ParameterModifier[] -> MethodInfo

参数

name
类型： System String
包含要获取的公共方法的名称的 String。
types
类型：
array<
System Type
>
[]
()
[]

表示此方法要获取的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
空的 Type 对象数组（由 EmptyTypes 字段提供），用来获取不采用参数的方法。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。

返回值

类型： System.Reflection MethodInfo
表示符合指定要求的公共方法的 MethodInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到不止一个具有指定名称和指定参数的方法。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 中的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。

虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

对 name 的搜索区分大小写。搜索范围包括公共静态方法和公共实例方法。 对 name 的搜索区分大小写。搜索范围包括公共静态方法和公共实例方法。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 MethodInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的方法或 Object 的方法（如果没有类约束的话）。

说明 说明

对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。 对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMethod 重载
System 命名空间
MethodInfo
String
DefaultBinder
ParameterModifier
GetMethodImpl
GetMethods


Type ..::.GetMethod 方法 (String, BindingFlags, Binder, array<Type >[]()[], array<ParameterModifier >[]()[])

Type
.
.
::
.
GetMethod 方法 (String, BindingFlags, Binder,
array<
Type
>
[]
()
[]
,
array<
ParameterModifier
>
[]
()
[]
)
Type 类

使用指定绑定约束，搜索其参数与指定参数类型及修饰符匹配的指定方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetMethod ( _
    name As String, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As MethodInfo
public MethodInfo GetMethod(
    string name,
    BindingFlags bindingAttr,
    Binder binder,
    Type[] types,
    ParameterModifier[] modifiers
)
public:
virtual MethodInfo^ GetMethod(
    String^ name,
    BindingFlags bindingAttr,
    Binder^ binder,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) sealed
abstract GetMethod :
        name:string *
        bindingAttr:BindingFlags *
        binder:Binder *
        types:Type[] *
        modifiers:ParameterModifier[] -> MethodInfo
override GetMethod :
        name:string *
        bindingAttr:BindingFlags *
        binder:Binder *
        types:Type[] *
        modifiers:ParameterModifier[] -> MethodInfo

参数

name
类型： System String
包含要获取的方法名称的 String。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。
types
类型：
array<
System Type
>
[]
()
[]

表示此方法要获取的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
空的 Type 对象数组（由 EmptyTypes 字段提供），用来获取不采用参数的方法。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。

返回值

类型： System.Reflection MethodInfo
表示符合指定要求的方法的 MethodInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到多个有指定名称且与指定绑定约束匹配的方法。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 中的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。

虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的方法：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共方法。

  • 指定 BindingFlags.NonPublic 可以在搜索中包括非公共方法（即私有方法、内部方法和受保护方法）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，表示仅搜索在 Type 上声明的方法，而不搜索简单继承的方法。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 MethodInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的方法或 Object 的方法（如果没有类约束的话）。

说明 说明

对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。 对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。

下面的示例查找 MethodA 的特定重载，并指定绑定约束和各种参数类型。

说明 说明

Visual C# 2005 示例需要 /unsafe 编译器选项。

Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

Class Program

    ' Methods to get:

    Public Overloads Sub MethodA(ByVal i As Integer, ByVal l As Long)

    End Sub

    Public Overloads Sub MethodA(ByVal i() As Integer)

    End Sub

    Public Overloads Sub MethodA(ByRef r As Integer)

    End Sub

    ' Method that takes an out parameter. Note that an Imports
    ' reference is needed to System.Runtime.InteropServices
    ' for the <OutAttribute>, which can be shortened to <Out>.
    Public Overloads Sub MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
        o = 100
    End Sub

    Public Shared Sub Main(ByVal args() As String)
        Dim mInfo As MethodInfo

        ' Get MethodA(ByVal i As Integer, ByVal l As Long)
        mInfo = GetType(Program).GetMethod("MethodA", _
            BindingFlags.Public Or BindingFlags.Instance, _
            Nothing, _
            New Type() {GetType(System.Int32), _
            GetType(System.Int64)}, _
            Nothing)
        Console.WriteLine("Found method: {0}", mInfo)

        ' Get MethodA(ByVal i() As Integer)
        mInfo = GetType(Program).GetMethod("MethodA", _
            BindingFlags.Public Or BindingFlags.Instance, _
            Nothing, _
            New Type() {GetType(System.Int32())}, _
            Nothing)
        Console.WriteLine("Found method: {0}", mInfo)

        ' Get MethodA(ByRef r As Integer)
        mInfo = GetType(Program).GetMethod("MethodA", _
            BindingFlags.Public Or BindingFlags.Instance, _
            Nothing, _
            New Type() {GetType(System.Int32).MakeByRefType}, _
            Nothing)
        Console.WriteLine("Found method: {0}", mInfo)

        ' Get MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
        mInfo = GetType(Program).GetMethod("MethodA", _
            BindingFlags.Public Or BindingFlags.Instance, _
            Nothing, _
            New Type() {GetType(System.Int32), GetType(System.Int32).MakeByRefType}, _
            Nothing)
        Console.WriteLine("Found method: {0}", mInfo)

    End Sub
End Class

using System;
using System.Reflection;

class Program
{
    // Methods to get:

    public void MethodA(int i, int j) { }

    public void MethodA(int[] i) { }

    public unsafe void MethodA(int* i) { }

    public void MethodA(ref int r) {}

    // Method that takes an out parameter.
    public void MethodA(int i, out int o) { o = 100; }

  static void Main(string[] args)
  {
    MethodInfo mInfo;

    // Get MethodA(int i, int j)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        new Type[] { typeof(int), typeof(int) },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int[] i)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        new Type[] { typeof(int[]) },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int* i)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        new Type[] { typeof(int).MakePointerType() },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(ref int r)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        new Type[] { typeof(int).MakeByRefType() },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int i, out int o)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        new Type[] { typeof(int), typeof(int).MakeByRefType() },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

  }
}

using namespace System;
using namespace System::Reflection;

public ref class Program
{

public:
    // Methods to get:

    void MethodA(int i, int j) { }

    void MethodA(array<int>^ iarry) { }

    void MethodA(double *ip) { }

    // Method that takes a managed reference parameter.
    void MethodA(int% r) {}
};

int main()
{
    MethodInfo^ mInfo;

    // Get MethodA(int i, int j)
    mInfo = Program::typeid->GetMethod("MethodA",
        static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance),
        nullptr,
        gcnew array<Type^> {int::typeid, int::typeid},
        nullptr);
    Console::WriteLine("Found method: {0}", mInfo );

    // Get  MethodA(array<int>^ iarry)
    mInfo = Program::typeid->GetMethod("MethodA",
        static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance),
        nullptr,
        gcnew array<Type^> {int::typeid->MakeArrayType()},
        nullptr);
    Console::WriteLine("Found method: {0}", mInfo );

    // Get MethodA(double *ip)
    mInfo = Program::typeid->GetMethod("MethodA",
        static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance),
        nullptr,
        gcnew array<Type^> {double::typeid->MakePointerType()},
        nullptr);
    Console::WriteLine("Found method: {0}", mInfo );

    // Get MethodA(int% r)
    mInfo = Program::typeid->GetMethod("MethodA",
        static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance),
        nullptr,
        gcnew array<Type^> {int::typeid->MakeByRefType()},
        nullptr);
    Console::WriteLine("Found method: {0}", mInfo );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMethod 重载
System 命名空间
MethodInfo
String
BindingFlags
Binder
DefaultBinder
ParameterModifier
GetMethodImpl
GetMethods


Type ..::.GetMethod 方法 (String, BindingFlags, Binder, CallingConventions, array<Type >[]()[], array<ParameterModifier >[]()[])

Type
.
.
::
.
GetMethod 方法 (String, BindingFlags, Binder, CallingConventions,
array<
Type
>
[]
()
[]
,
array<
ParameterModifier
>
[]
()
[]
)
Type 类

用指定的绑定约束和指定的调用约定，搜索参数与指定的参数类型及修饰符相匹配的指定方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetMethod ( _
    name As String, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    callConvention As CallingConventions, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As MethodInfo
public MethodInfo GetMethod(
    string name,
    BindingFlags bindingAttr,
    Binder binder,
    CallingConventions callConvention,
    Type[] types,
    ParameterModifier[] modifiers
)
public:
virtual MethodInfo^ GetMethod(
    String^ name,
    BindingFlags bindingAttr,
    Binder^ binder,
    CallingConventions callConvention,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) sealed
abstract GetMethod :
        name:string *
        bindingAttr:BindingFlags *
        binder:Binder *
        callConvention:CallingConventions *
        types:Type[] *
        modifiers:ParameterModifier[] -> MethodInfo
override GetMethod :
        name:string *
        bindingAttr:BindingFlags *
        binder:Binder *
        callConvention:CallingConventions *
        types:Type[] *
        modifiers:ParameterModifier[] -> MethodInfo

参数

name
类型： System String
包含要获取的方法名称的 String。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。
callConvention
类型： System.Reflection CallingConventions
CallingConventions 对象，用于指定要使用的一套规则，这些规则涉及参数的顺序和布局、传递返回值的方式、用于参数的寄存器和清理堆栈的方式。
types
类型：
array<
System Type
>
[]
()
[]

表示此方法要获取的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
空的 Type 对象数组（由 EmptyTypes 字段提供），用来获取不采用参数的方法。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。

返回值

类型： System.Reflection MethodInfo
表示符合指定要求的方法的 MethodInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到多个有指定名称且与指定绑定约束匹配的方法。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 中的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。

虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

下表显示在某个类型上进行反射时，GetXXX 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的方法：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共方法。

  • 指定 BindingFlags.NonPublic 可以在搜索中包括非公共方法（即私有方法、内部方法和受保护方法）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，表示仅搜索在 Type 上声明的方法，而不搜索简单继承的方法。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 MethodInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的方法或 Object 的方法（如果没有类约束的话）。

说明 说明

对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。 对于泛型方法，请不要在 name 中包括此类型参数。例如，C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员，而不是搜索一个名为 MyMethod 的方法，该方法具有一个 int 类型的泛型参数。

下面的示例查找 MethodA 的特定重载，并指定绑定约束、调用约定和各种参数类型。

说明 说明

Visual C# 2005 示例需要 /unsafe 编译器选项。

Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

Class Program

    ' Methods to get:

    Public Overloads Sub MethodA(ByVal i As Integer, ByVal l As Long)

    End Sub

    Public Overloads Sub MethodA(ByVal i() As Integer)

    End Sub

    Public Overloads Sub MethodA(ByRef r As Integer)

    End Sub

    ' Method that takes an integer and an out parameter. Note that an
    ' Imports reference is needed to System.Runtime.InteropServices
    ' for the <OutAttribute>, which can be shortened to <Out>.
    Public Overloads Sub MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
        o = 100
    End Sub

    Public Shared Sub Main(ByVal args() As String)
        Dim mInfo As MethodInfo

        ' Get MethodA(ByVal i As Integer, ByVal l As Long)
        mInfo = GetType(Program).GetMethod("MethodA", _
            BindingFlags.Public Or BindingFlags.Instance, _
            Nothing, _
            CallingConventions.Any, _
            New Type() {GetType(System.Int32), _
            GetType(System.Int64)}, _
            Nothing)
        Console.WriteLine("Found method: {0}", mInfo)

        ' Get  MethodA(ByVal i() As Integer)
        mInfo = GetType(Program).GetMethod("MethodA", _
            BindingFlags.Public Or BindingFlags.Instance, _
            Nothing, _
            CallingConventions.Any, _
            New Type() {GetType(System.Int32())}, _
            Nothing)
        Console.WriteLine("Found method: {0}", mInfo)

        ' Get MethodA(ByRef r As Integer)
        mInfo = GetType(Program).GetMethod("MethodA", _
        BindingFlags.Public Or BindingFlags.Instance, _
        Nothing, _
        CallingConventions.Any, _
        New Type() {GetType(System.Int32).MakeByRefType}, _
        Nothing)
        Console.WriteLine("Found method: {0}", mInfo)

        ' Get MethodA(ByVal i As Integer, <Out()> ByRef o As Integer)
        mInfo = GetType(Program).GetMethod("MethodA", _
        BindingFlags.Public Or BindingFlags.Instance, _
        Nothing, _
        CallingConventions.Any, _
        New Type() {GetType(System.Int32), GetType(System.Int32).MakeByRefType}, _
        Nothing)
        Console.WriteLine("Found method: {0}", mInfo)

    End Sub
End Class

using System;
using System.Reflection;

class Program
{
    // Methods to get:

    public void MethodA(int i, int j) { }

    public void MethodA(int[] i) { }

    public unsafe void MethodA(int* i) { }

    public void MethodA(ref int r) {}

    // Method that takes an out parameter:
    public void MethodA(int i, out int o) { o = 100;}

  static void Main(string[] args)
  {
    MethodInfo mInfo;

    // Get MethodA(int i, int j)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int), typeof(int) },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int[] i)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int[]) },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int* i)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int).MakePointerType() },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(ref int r)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int).MakeByRefType() },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

    // Get MethodA(int i, out int o)
    mInfo = typeof(Program).GetMethod("MethodA",
        BindingFlags.Public | BindingFlags.Instance,
        null,
        CallingConventions.Any,
        new Type[] { typeof(int), typeof(int).MakeByRefType() },
        null);
    Console.WriteLine("Found method: {0}", mInfo);

  }
}

using namespace System;
using namespace System::Reflection;

public ref class Program
{

public:
    // Methods to get:

    void MethodA(int i, int j) { }

    void MethodA(array<int>^ iarry) { }

    void MethodA(double *ip) { }

    // Method that takes a managed reference paramter.
    void MethodA(int% r) {}
};

int main()
{
    MethodInfo^ mInfo;

    // Get MethodA(int i, int j)
    mInfo = Program::typeid->GetMethod("MethodA",
        BindingFlags::Public | BindingFlags::Instance,
        nullptr,
        CallingConventions::Any,
        gcnew array<Type^> {int::typeid, int::typeid},
        nullptr);
    Console::WriteLine("Found method: {0}", mInfo );

    // Get  MethodA(array<int>^ iarry)
    mInfo = Program::typeid->GetMethod("MethodA",
        BindingFlags::Public | BindingFlags::Instance,
        nullptr,
        CallingConventions::Any,
        gcnew array<Type^> {int::typeid->MakeArrayType()},
        nullptr);
    Console::WriteLine("Found method: {0}", mInfo );

    // Get MethodA(double *ip)
    mInfo = Program::typeid->GetMethod("MethodA",
        BindingFlags::Public | BindingFlags::Instance,
        nullptr,
        CallingConventions::Any,
        gcnew array<Type^> {double::typeid->MakePointerType()},
        nullptr);
    Console::WriteLine("Found method: {0}", mInfo );

    // Get MethodA(int% r)
    mInfo = Program::typeid->GetMethod("MethodA",
        BindingFlags::Public | BindingFlags::Instance,
        nullptr,
        CallingConventions::Any,
        gcnew array<Type^> {int::typeid->MakeByRefType()},
        nullptr);
    Console::WriteLine("Found method: {0}", mInfo );

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMethod 重载
System 命名空间
MethodInfo
String
BindingFlags
Binder
DefaultBinder
CallingConventions
ParameterModifier
GetMethodImpl
GetMethods


Type ..::.GetMethodImpl 方法

Type
.
.
::
.
GetMethodImpl 方法
Type 类

当在派生类中重写时，使用指定的绑定约束和指定的调用约定搜索其参数与指定的参数类型和修饰符匹配的指定方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function GetMethodImpl ( _
    name As String, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    callConvention As CallingConventions, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As MethodInfo
protected abstract MethodInfo GetMethodImpl(
    string name,
    BindingFlags bindingAttr,
    Binder binder,
    CallingConventions callConvention,
    Type[] types,
    ParameterModifier[] modifiers
)
protected:
virtual MethodInfo^ GetMethodImpl(
    String^ name,
    BindingFlags bindingAttr,
    Binder^ binder,
    CallingConventions callConvention,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) abstract
abstract GetMethodImpl :
        name:string *
        bindingAttr:BindingFlags *
        binder:Binder *
        callConvention:CallingConventions *
        types:Type[] *
        modifiers:ParameterModifier[] -> MethodInfo

参数

name
类型： System String
包含要获取的方法名称的 String。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。
callConvention
类型： System.Reflection CallingConventions
CallingConventions 对象，用于指定要使用的一套规则，这些规则涉及参数的顺序和布局、传递返回值的方式、用于参数的寄存器以及哪个进程清理堆栈。
types
类型：
array<
System Type
>
[]
()
[]

表示此方法要获取的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
获取不使用参数的方法的 Type 类型的空数组（即 Type[] types = new Type[0]）。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.如果 types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则参数不匹配。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.如果 types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则参数不匹配。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。

返回值

类型： System.Reflection MethodInfo
表示符合指定要求的方法的 MethodInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
AmbiguousMatchException | 找到多个有指定名称且与指定绑定约束匹配的方法。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。 - 或 - types 和 modifiers 的长度不同。

虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

如果 types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则参数不匹配。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的方法：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共方法。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共方法（即私有方法、内部方法和受保护的方法）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，表示仅搜索在 Type 上声明的方法，而不搜索简单继承的方法。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
MethodInfo
String
BindingFlags
Binder
DefaultBinder
CallingConventions
ParameterModifier
GetMethod
GetMethods


Type ..::.GetMethods 方法

Type
.
.
::
.
GetMethods 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的方法。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetMethods 方法

Type
.
.
::
.
GetMethods 方法
Type 类

返回当前 Type 的所有公共方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetMethods As MethodInfo()
public MethodInfo[] GetMethods()
public:
virtual array<MethodInfo^>^ GetMethods() sealed
abstract GetMethods : unit -> MethodInfo[]
override GetMethods : unit -> MethodInfo[]

返回值

类型：
array<
System.Reflection MethodInfo
>
[]
()
[]

表示为当前 Type 定义的所有公共方法的 MethodInfo 对象数组。
- 或 -
如果没有为当前 Type 定义的公共方法，则为 MethodInfo 类型的空数组。

实现

GetMethods 方法不按特定的顺序（如字母顺序或声明顺序）返回方法。您的代码一定不能依赖于方法的返回顺序，因为该顺序可以改变。 GetMethods 方法不按特定的顺序（如字母顺序或声明顺序）返回方法。您的代码一定不能依赖于方法的返回顺序，因为该顺序可以改变。

构造函数不包括在由此调用返回的方法数组中。请对 GetConstructors() 进行单独调用，以获取构造函数方法。 构造函数不包括在由此调用返回的方法数组中。请对 GetConstructors() 进行单独调用，以获取构造函数方法。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 MethodInfo 对象，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的方法或 Object 的方法（如果没有类约束的话）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMethods 重载
System 命名空间
MethodInfo
GetMethod


Type ..::.GetMethods 方法 (BindingFlags)

Type
.
.
::
.
GetMethods 方法 (BindingFlags)
Type 类

当在派生类中重写时，使用指定绑定约束，搜索为当前 Type 定义的方法。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetMethods ( _
    bindingAttr As BindingFlags _
) As MethodInfo()
public abstract MethodInfo[] GetMethods(
    BindingFlags bindingAttr
)
public:
virtual array<MethodInfo^>^ GetMethods(
    BindingFlags bindingAttr
) abstract
abstract GetMethods :
        bindingAttr:BindingFlags -> MethodInfo[]

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型：
array<
System.Reflection MethodInfo
>
[]
()
[]

表示为当前 Type 定义的匹配指定绑定约束的所有方法的 MethodInfo 对象数组。
- 或 -
如果没有为当前 Type 定义的方法，或者如果没有一个定义的方法匹配绑定约束，则为 MethodInfo 类型的空数组。

实现

GetMethods 方法不按特定的顺序（如字母顺序或声明顺序）返回方法。您的代码一定不能依赖于方法的返回顺序，因为该顺序可以改变。 GetMethods 方法不按特定的顺序（如字母顺序或声明顺序）返回方法。您的代码一定不能依赖于方法的返回顺序，因为该顺序可以改变。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的方法：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共方法。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共方法（即私有方法、内部方法和受保护的方法）。只返回基类上的受保护方法和内部方法；不返回基类上的私有方法。 指定 BindingFlags.NonPublic 可在搜索中包含非公共方法（即私有方法、内部方法和受保护的方法）。只返回基类上的受保护方法和内部方法；不返回基类上的私有方法。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.DeclaredOnly，表示仅搜索在 Type 上声明的方法，而不搜索简单继承的方法。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

说明 说明

查找构造函数和方法时不能省略参数。只能在调用时省略参数。 查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 MethodInfo 对象，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的方法或 Object 的方法（如果没有类约束的话）。

下面的示例创建具有两个公共方法和一个受保护方法的类，创建一个对应于 MyTypeClass 的 Type 对象，获取所有公共和非公共方法，并显示它们的名称。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit
Imports Microsoft.VisualBasic

' Create a class having two public methods and one protected method.
Public Class MyTypeClass
    Public Sub MyMethods()
    End Sub 'MyMethods
    Public Function MyMethods1() As Integer
        Return 3
    End Function 'MyMethods1
    Protected Function MyMethods2() As [String]
        Return "hello"
    End Function 'MyMethods2
End Class 'MyTypeClass
Public Class TypeMain
    Public Shared Sub Main()

        Dim myType As Type = GetType(MyTypeClass)
        ' Get the public methods.
        Dim myArrayMethodInfo As MethodInfo() = myType.GetMethods((BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.DeclaredOnly))
        Console.WriteLine((ControlChars.Cr + "The number of public methods is " & myArrayMethodInfo.Length.ToString() & "."))
        ' Display all the public methods.
        DisplayMethodInfo(myArrayMethodInfo)
        ' Get the nonpublic methods.
        Dim myArrayMethodInfo1 As MethodInfo() = myType.GetMethods((BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.DeclaredOnly))
        Console.WriteLine((ControlChars.Cr + "The number of protected methods is " & myArrayMethodInfo1.Length.ToString() & "."))
        ' Display all the nonpublic methods.
        DisplayMethodInfo(myArrayMethodInfo1)
    End Sub 'Main

    Public Shared Sub DisplayMethodInfo(ByVal myArrayMethodInfo() As MethodInfo)
        ' Display information for all methods.
        Dim i As Integer
        For i = 0 To myArrayMethodInfo.Length - 1
            Dim myMethodInfo As MethodInfo = CType(myArrayMethodInfo(i), MethodInfo)
            Console.WriteLine((ControlChars.Cr + "The name of the method is " & myMethodInfo.Name & "."))
        Next i
    End Sub 'DisplayMethodInfo
End Class 'TypeMain

using System;
using System.Reflection;
using System.Reflection.Emit;

        // Create a class having two public methods and one protected method.
public class MyTypeClass
{
    public void MyMethods()
    {
    }
    public int MyMethods1()
    {
        return 3;
    }
    protected String MyMethods2()
    {
        return "hello";
    }
}
public class TypeMain
{
    public static void Main()
    {
        Type myType =(typeof(MyTypeClass));
        // Get the public methods.
        MethodInfo[] myArrayMethodInfo = myType.GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.DeclaredOnly);
        Console.WriteLine("\nThe number of public methods is {0}.", myArrayMethodInfo.Length);
        // Display all the methods.
        DisplayMethodInfo(myArrayMethodInfo);
        // Get the nonpublic methods.
        MethodInfo[] myArrayMethodInfo1 = myType.GetMethods(BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.DeclaredOnly);
        Console.WriteLine("\nThe number of protected methods is {0}.", myArrayMethodInfo1.Length);
        // Display information for all methods.
        DisplayMethodInfo(myArrayMethodInfo1);
    }
    public static void DisplayMethodInfo(MethodInfo[] myArrayMethodInfo)
    {
        // Display information for all methods.
        for(int i=0;i<myArrayMethodInfo.Length;i++)
        {
            MethodInfo myMethodInfo = (MethodInfo)myArrayMethodInfo[i];
            Console.WriteLine("\nThe name of the method is {0}.", myMethodInfo.Name);
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

// Create a class having two public methods and one protected method.
public ref class MyTypeClass
{
public:
   void MyMethods(){}

   int MyMethods1()
   {
      return 3;
   }

protected:
   String^ MyMethods2()
   {
      return "hello";
   }
};

void DisplayMethodInfo( array<MethodInfo^>^myArrayMethodInfo )
{
   // Display information for all methods.
   for ( int i = 0; i < myArrayMethodInfo->Length; i++ )
   {
      MethodInfo^ myMethodInfo = dynamic_cast<MethodInfo^>(myArrayMethodInfo[ i ]);
      Console::WriteLine( "\nThe name of the method is {0}.", myMethodInfo->Name );
   }
}

int main()
{
   Type^ myType = MyTypeClass::typeid;

   // Get the public methods.
   array<MethodInfo^>^myArrayMethodInfo = myType->GetMethods( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance | BindingFlags::DeclaredOnly) );
   Console::WriteLine( "\nThe number of public methods is {0}->", myArrayMethodInfo->Length );

   // Display all the methods.
   DisplayMethodInfo( myArrayMethodInfo );

   // Get the nonpublic methods.
   array<MethodInfo^>^myArrayMethodInfo1 = myType->GetMethods( static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::DeclaredOnly) );
   Console::WriteLine( "\nThe number of protected methods is {0}->", myArrayMethodInfo1->Length );

   // Display information for all methods.
   DisplayMethodInfo( myArrayMethodInfo1 );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetMethods 重载
System 命名空间
MethodInfo
BindingFlags
DefaultBinder
GetMethod


Type ..::.GetNestedType 方法

Type
.
.
::
.
GetNestedType 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取嵌套在当前 Type 中的特定类型。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetNestedType 方法 (String)

Type
.
.
::
.
GetNestedType 方法 (String)
Type 类

搜索具有指定名称的公共嵌套类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetNestedType ( _
    name As String _
) As Type
public Type GetNestedType(
    string name
)
public:
virtual Type^ GetNestedType(
    String^ name
) sealed
abstract GetNestedType :
        name:string -> Type
override GetNestedType :
        name:string -> Type

参数

name
类型： System String
包含要获取的嵌套类型的名称的字符串。

返回值

类型： System Type
如找到，则为表示具有指定名称的公共嵌套类型的 Type 对象；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

对 name 的搜索区分大小写。

对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。 对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。 对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。 对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。 对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的嵌套类型。

如果嵌套类型为泛型，则此方法返回其泛型类型定义。即使封闭泛型类型为封闭构造类型，也是如此。 如果嵌套类型为泛型，则此方法返回其泛型类型定义。即使封闭泛型类型为封闭构造类型，也是如此。

说明 说明

如果当前 Type 表示在 C#、Visual Basic 或 C++ 中定义的泛型类型，则其嵌套类型都是泛型，即使它们没有自己的泛型参数也是如此。对于动态程序集中定义的嵌套类型或使用 Ilasm.exe（MSIL 汇编程序） 编译的嵌套类型，并不一定如此。 如果当前 Type 表示在 C#、Visual Basic 或 C++ 中定义的泛型类型，则其嵌套类型都是泛型，即使它们没有自己的泛型参数也是如此。对于动态程序集中定义的嵌套类型或使用 Ilasm.exe（MSIL 汇编程序） 编译的嵌套类型，并不一定如此。

有关嵌套泛型类型以及基于泛型类型定义构造嵌套泛型类型的信息，请参见 MakeGenericType。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetNestedType 重载
System 命名空间
String
DefaultBinder
GetNestedTypes


Type ..::.GetNestedType 方法 (String, BindingFlags)

Type
.
.
::
.
GetNestedType 方法 (String, BindingFlags)
Type 类

当在派生类中重写时，使用指定绑定约束搜索指定嵌套类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetNestedType ( _
    name As String, _
    bindingAttr As BindingFlags _
) As Type
public abstract Type GetNestedType(
    string name,
    BindingFlags bindingAttr
)
public:
virtual Type^ GetNestedType(
    String^ name,
    BindingFlags bindingAttr
) abstract
abstract GetNestedType :
        name:string *
        bindingAttr:BindingFlags -> Type

参数

name
类型： System String
包含要获取的嵌套类型的名称的字符串。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Type
表示符合指定要求的嵌套类型的 Type 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。 对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。 对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。 对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。 对于 name，应使用嵌套类的简单名称。不要使用外层类的名称来限定它。对于泛型嵌套类，使用改变后的名称 - 即末尾附加了抑音符和泛型参数的数目。例如，使用字符串“Inner`1”获取泛型嵌套类 Inner<T>（在 Visual Basic 中为 Inner(Of T)）。不要对类型参数使用语言特定的语法。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的嵌套类型：

  • 要获取返回值，必须指定 BindingFlags.Public 或 BindingFlags.NonPublic。

  • 指定 BindingFlags.Public 可在搜索中包含公共嵌套类型。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共嵌套类型（即私有类型、内部类型和受保护类型）。

此方法只返回当前类型的嵌套类型。它不搜索当前类型的基类。若要查找嵌套在基类中的类型，必须搜索继承层次结构，并在每一层都调用 GetNestedType。 此方法只返回当前类型的嵌套类型。它不搜索当前类型的基类。若要查找嵌套在基类中的类型，必须搜索继承层次结构，并在每一层都调用 GetNestedType。 此方法只返回当前类型的嵌套类型。它不搜索当前类型的基类。若要查找嵌套在基类中的类型，必须搜索继承层次结构，并在每一层都调用 GetNestedType。

忽略 BindingFlags.Instance 和 BindingFlags.Static。

仅用 BindingFlags..::.Public 标志或仅用 BindingFlags..::.NonPublic 标志调用此方法将返回指定嵌套类型，并且不需要任何其他标志。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的嵌套类型。

如果嵌套类型为泛型，则此方法返回其泛型类型定义。即使封闭泛型类型为封闭构造类型，也是如此。 如果嵌套类型为泛型，则此方法返回其泛型类型定义。即使封闭泛型类型为封闭构造类型，也是如此。

说明 说明

如果当前 Type 表示在 C#、Visual Basic 或 C++ 中定义的泛型类型，则其嵌套类型都是泛型，即使它们没有自己的泛型参数也是如此。对于动态程序集中定义的嵌套类型或使用 Ilasm.exe（MSIL 汇编程序） 编译的嵌套类型，并不一定如此。 如果当前 Type 表示在 C#、Visual Basic 或 C++ 中定义的泛型类型，则其嵌套类型都是泛型，即使它们没有自己的泛型参数也是如此。对于动态程序集中定义的嵌套类型或使用 Ilasm.exe（MSIL 汇编程序） 编译的嵌套类型，并不一定如此。

有关嵌套泛型类型以及基于泛型类型定义构造嵌套泛型类型的信息，请参见 MakeGenericType。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetNestedType 重载
System 命名空间
String
BindingFlags
DefaultBinder
GetNestedTypes


Type ..::.GetNestedTypes 方法

Type
.
.
::
.
GetNestedTypes 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取嵌套在当前 Type 中的类型。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetNestedTypes 方法

Type
.
.
::
.
GetNestedTypes 方法
Type 类

返回嵌套在当前的 Type 中的公共类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetNestedTypes As Type()
public Type[] GetNestedTypes()
public:
virtual array<Type^>^ GetNestedTypes() sealed
abstract GetNestedTypes : unit -> Type[]
override GetNestedTypes : unit -> Type[]

返回值

类型：
array<
System Type
>
[]
()
[]

Type 对象数组，这些对象表示嵌套在当前的 Type 中的公共类型（搜索是非递归的）；如果当前的 Type 中没有嵌套公共类型，则为 Type 类型的空数组。

实现

GetNestedTypes 方法不按特定的顺序（如字母顺序或声明顺序）返回类型。您的代码一定不能依赖于类型的返回顺序，因为该顺序可以改变。 GetNestedTypes 方法不按特定的顺序（如字母顺序或声明顺序）返回类型。您的代码一定不能依赖于类型的返回顺序，因为该顺序可以改变。

只返回直接嵌套在当前类型中的公共类型；搜索是非递归的。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的嵌套类型。

如果嵌套类型为泛型，则此方法返回其泛型类型定义。即使封闭泛型类型为封闭构造类型，也是如此。 如果嵌套类型为泛型，则此方法返回其泛型类型定义。即使封闭泛型类型为封闭构造类型，也是如此。

说明 说明

如果当前 Type 表示在 C#、Visual Basic 或 C++ 中定义的泛型类型，则其嵌套类型都是泛型，即使它们没有自己的泛型参数也是如此。对于动态程序集中定义的嵌套类型或使用 Ilasm.exe（MSIL 汇编程序） 编译的嵌套类型，并不一定如此。 如果当前 Type 表示在 C#、Visual Basic 或 C++ 中定义的泛型类型，则其嵌套类型都是泛型，即使它们没有自己的泛型参数也是如此。对于动态程序集中定义的嵌套类型或使用 Ilasm.exe（MSIL 汇编程序） 编译的嵌套类型，并不一定如此。

有关嵌套泛型类型以及基于泛型类型定义构造嵌套泛型类型的信息，请参见 MakeGenericType。

下面的示例在 MyClass 中定义一个嵌套类和一个 struct，然后使用 MyClass 类型获得嵌套类型的对象。

Imports System
Imports System.Reflection

Public Class MyClass1
    Public Class NestClass
        Public Shared myPublicInt As Integer = 0
    End Class 'NestClass

    Public Structure NestStruct
        Public myPublicInt As Integer
    End Structure 'NestStruct
End Class 'MyClass1

Public Class MyMainClass
    Public Shared Sub Main()
        Try
            ' Get the Type object corresponding to MyClass.
            Dim myType As Type = GetType(MyClass1)
            ' Get an array of nested type objects in MyClass.
            Dim nestType As Type() = myType.GetNestedTypes()
            Console.WriteLine("The number of nested types is {0}.", nestType.Length)
            Dim t As Type
            For Each t In nestType
                Console.WriteLine("Nested type is {0}.", t.ToString())
            Next t
        Catch e As Exception
            Console.WriteLine("Error", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyMainClass

using System;
using System.Reflection;
public class MyClass
{
    public class NestClass
    {
        public static int myPublicInt=0;
    }
    public struct NestStruct
    {
        public static int myPublicInt=0;
    }
}

public class MyMainClass
{
    public static void Main()
    {
        try
        {
            // Get the Type object corresponding to MyClass.
            Type myType=typeof(MyClass);
            // Get an array of nested type objects in MyClass.
            Type[] nestType=myType.GetNestedTypes();
            Console.WriteLine("The number of nested types is {0}.", nestType.Length);
            foreach(Type t in nestType)
                Console.WriteLine("Nested type is {0}.", t.ToString());
        }
        catch(Exception e)
        {
            Console.WriteLine("Error"+e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class MyClass
{
public:
   ref class NestClass
   {
      public:
         static int myPublicInt = 0;
   };

   ref struct NestStruct
   {
      public:
         static int myPublicInt = 0;
   };
};

int main()
{
   try
   {
      // Get the Type object corresponding to MyClass.
      Type^ myType = MyClass::typeid;

      // Get an array of nested type objects in MyClass.
      array<Type^>^nestType = myType->GetNestedTypes();
      Console::WriteLine( "The number of nested types is {0}.", nestType->Length );
      System::Collections::IEnumerator^ myEnum = nestType->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Type^ t = safe_cast<Type^>(myEnum->Current);
         Console::WriteLine( "Nested type is {0}.", t );
      }
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Error {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetNestedTypes 重载
System 命名空间
GetNestedType


Type ..::.GetNestedTypes 方法 (BindingFlags)

Type
.
.
::
.
GetNestedTypes 方法 (BindingFlags)
Type 类

当在派生类中重写时，使用指定绑定约束搜索嵌套在当前 Type 中的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetNestedTypes ( _
    bindingAttr As BindingFlags _
) As Type()
public abstract Type[] GetNestedTypes(
    BindingFlags bindingAttr
)
public:
virtual array<Type^>^ GetNestedTypes(
    BindingFlags bindingAttr
) abstract
abstract GetNestedTypes :
        bindingAttr:BindingFlags -> Type[]

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型：
array<
System Type
>
[]
()
[]

Type 对象数组，这些对象表示嵌套在当前 Type 中的所有与指定的绑定约束匹配的类型（搜索是非递归的）；如果没有找到与绑定约束匹配的嵌套类型，则为 Type 类型的空数组。

实现

对嵌套类型的搜索是非递归的。

GetNestedTypes 方法不按特定的顺序（如字母顺序或声明顺序）返回类型。您的代码一定不能依赖于类型的返回顺序，因为该顺序可以改变。 GetNestedTypes 方法不按特定的顺序（如字母顺序或声明顺序）返回类型。您的代码一定不能依赖于类型的返回顺序，因为该顺序可以改变。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的嵌套类型：

  • 要获取返回值，必须指定 BindingFlags.Public 或 BindingFlags.NonPublic。

  • 指定 BindingFlags.Public 可在搜索中包含公共嵌套类型。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共嵌套类型（即私有类型、内部类型和受保护类型）。

此方法只返回当前类型的嵌套类型。它不搜索当前类型的基类。若要查找嵌套在基类中的类型，必须搜索继承层次结构，并在每一层都调用 GetNestedTypes。 此方法只返回当前类型的嵌套类型。它不搜索当前类型的基类。若要查找嵌套在基类中的类型，必须搜索继承层次结构，并在每一层都调用 GetNestedTypes。 此方法只返回当前类型的嵌套类型。它不搜索当前类型的基类。若要查找嵌套在基类中的类型，必须搜索继承层次结构，并在每一层都调用 GetNestedTypes。

忽略 BindingFlags.Instance 和 BindingFlags.Static。

仅用 BindingFlags..::.Public 标志或仅用 BindingFlags..::.NonPublic 标志调用此方法将返回指定嵌套类型，并且不需要任何其他标志。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的嵌套类型。

如果嵌套类型为泛型，则此方法返回其泛型类型定义。即使封闭泛型类型为封闭构造类型，也是如此。 如果嵌套类型为泛型，则此方法返回其泛型类型定义。即使封闭泛型类型为封闭构造类型，也是如此。

说明 说明

如果当前 Type 表示在 C#、Visual Basic 或 C++ 中定义的泛型类型，则其嵌套类型都是泛型，即使它们没有自己的泛型参数也是如此。对于动态程序集中定义的嵌套类型或使用 Ilasm.exe（MSIL 汇编程序） 编译的嵌套类型，并不一定如此。 如果当前 Type 表示在 C#、Visual Basic 或 C++ 中定义的泛型类型，则其嵌套类型都是泛型，即使它们没有自己的泛型参数也是如此。对于动态程序集中定义的嵌套类型或使用 Ilasm.exe（MSIL 汇编程序） 编译的嵌套类型，并不一定如此。

有关嵌套泛型类型以及基于泛型类型定义构造嵌套泛型类型的信息，请参见 MakeGenericType。

下面的示例创建两个嵌套公共类和两个嵌套受保护类，并显示与指定的绑定约束相匹配的类的信息。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit
Imports Microsoft.VisualBasic

' Create a class with name 'MyTypeClass' with three properties.
Public Class MyTypeClass

    Public Class Myclass1
    End Class 'Myclass1

    Public Class Myclass2
    End Class 'Myclass2

    Protected Class MyClass3
    End Class 'MyClass3

    Protected Class MyClass4
    End Class 'MyClass4
End Class 'MyTypeClass

Public Class TypeMain

    Public Shared Sub Main()

        Dim myType As Type = GetType(MyTypeClass)
        ' Get the public nested classes.
        Dim myTypeArray As Type() = myType.GetNestedTypes((BindingFlags.Public Or BindingFlags.Instance))
        Console.WriteLine("The number of public nested classes is {0}.", myTypeArray.Length.ToString())
        ' Display all the public nested classes.
        DisplayTypeInfo(myTypeArray)
        ' Get the nonpublic nested classes.
        Dim myTypeArray1 As Type() = myType.GetNestedTypes((BindingFlags.NonPublic Or BindingFlags.Instance))
        Console.WriteLine("The number of protected nested classes is {0}.", myTypeArray1.Length.ToString())
        ' Display  the information for all nested classes.
        DisplayTypeInfo(myTypeArray1)
    End Sub 'Main

    Public Shared Sub DisplayTypeInfo(ByVal myArrayType() As Type)
        ' Display the information for all nested classes.
        Dim i As Integer
        For i = 0 To myArrayType.Length - 1
            Dim myType As Type = CType(myArrayType(i), Type)
            Console.WriteLine("The name of the nested class is {0}.", myType.ToString())
        Next i
    End Sub 'DisplayTypeInfo
End Class 'TypeMain

using System;
using System.Reflection;
using System.Reflection.Emit;

// Create a class with two nested public classes and two nested protected classes.
public class MyTypeClass
{
    public class Myclass1
    {
    }
    public class Myclass2
    {
    }
    protected class MyClass3
    {
    }
    protected class MyClass4
    {
    }
}

public class TypeMain
{
    public static void Main()
    {
        Type myType =(typeof(MyTypeClass));
        // Get the public nested classes.
        Type[] myTypeArray = myType.GetNestedTypes(BindingFlags.Public|BindingFlags.Instance);
        Console.WriteLine("The number of nested public classes is {0}.", myTypeArray.Length);
        // Display all the public nested classes.
        DisplayTypeInfo(myTypeArray);
        // Get the nonpublic nested classes.
        Type[] myTypeArray1 = myType.GetNestedTypes(BindingFlags.NonPublic|BindingFlags.Instance);
        Console.WriteLine("The number of nested protected classes is {0}.", myTypeArray1.Length);
        // Display all the nonpublic nested classes.
        DisplayTypeInfo(myTypeArray1);
    }
    public static void DisplayTypeInfo(Type[] myArrayType)
    {
        // Display the information for all the nested classes.
        for(int i=0;i<myArrayType.Length;i++)
        {
            Type myType = (Type)myArrayType[i];
            Console.WriteLine("The name of the nested class is {0}.", myType.ToString());
        }
    }

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

// Create a class with two nested public classes and two nested protected classes.
public ref class MyTypeClass
{
public:
   ref class Myclass1{};

private:
   ref class Myclass2{};

protected:
   ref class MyClass3{};

private:
   ref class MyClass4{};
};

void DisplayTypeInfo( array<Type^>^myArrayType )
{
   // Display the information for all the nested classes.
   for ( int i = 0; i < myArrayType->Length; i++ )
   {
      Type^ myType = myArrayType[ i ];
      Console::WriteLine( "The name of the nested class is {0}.", myType );

   }
}

int main()
{
   Type^ myType = MyTypeClass::typeid;

   // Get the public nested classes.
   array<Type^>^myTypeArray = myType->GetNestedTypes( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
   Console::WriteLine( "The number of nested public classes is {0}.", myTypeArray->Length );

   // Display all the public nested classes.
   DisplayTypeInfo( myTypeArray );

   // Get the nonpublic nested classes.
   array<Type^>^myTypeArray1 = myType->GetNestedTypes( static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance) );
   Console::WriteLine( "The number of nested protected classes is {0}.", myTypeArray1->Length );

   // Display all the nonpublic nested classes.
   DisplayTypeInfo( myTypeArray1 );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetNestedTypes 重载
System 命名空间
BindingFlags
DefaultBinder
GetNestedType


Type ..::.GetProperties 方法

Type
.
.
::
.
GetProperties 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的属性。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetProperties 方法

Type
.
.
::
.
GetProperties 方法
Type 类

返回当前 Type 的所有公共属性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetProperties As PropertyInfo()
public PropertyInfo[] GetProperties()
public:
virtual array<PropertyInfo^>^ GetProperties() sealed
abstract GetProperties : unit -> PropertyInfo[]
override GetProperties : unit -> PropertyInfo[]

返回值

类型：
array<
System.Reflection PropertyInfo
>
[]
()
[]

表示当前 Type 的所有公共属性的 PropertyInfo 对象数组。
- 或 -
如果当前 Type 没有公共属性，则为 PropertyInfo 类型的空数组。

实现

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

GetProperties 方法不按特定的顺序（如字母顺序或声明顺序）返回属性。您的代码一定不能依赖于属性的返回顺序，因为该顺序可以改变。 GetProperties 方法不按特定的顺序（如字母顺序或声明顺序）返回属性。您的代码一定不能依赖于属性的返回顺序，因为该顺序可以改变。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 PropertyInfo 对象，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的属性。

下面的示例说明 GetProperties 方法的用法。

Dim myPropertyInfo() As PropertyInfo
' Get the properties of 'Type' class object.
myPropertyInfo = Type.GetType("System.Type").GetProperties()
Console.WriteLine("Properties of System.Type are:")
Dim i As Integer
For i = 0 To myPropertyInfo.Length - 1
   Console.WriteLine(myPropertyInfo(i).ToString())
Next i

PropertyInfo[] myPropertyInfo;
// Get the properties of 'Type' class object.
myPropertyInfo = Type.GetType("System.Type").GetProperties();
Console.WriteLine("Properties of System.Type are:");
for (int i = 0; i < myPropertyInfo.Length; i++)
{
    Console.WriteLine(myPropertyInfo[i].ToString());
}

array<PropertyInfo^>^myPropertyInfo;

// Get the properties of 'Type' class object.
myPropertyInfo = Type::GetType( "System.Type" )->GetProperties();
Console::WriteLine( "Properties of System.Type are:" );
for ( int i = 0; i < myPropertyInfo->Length; i++ )
{
   Console::WriteLine( myPropertyInfo[ i ] );

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetProperties 重载
System 命名空间
PropertyInfo
GetProperty


Type ..::.GetProperties 方法 (BindingFlags)

Type
.
.
::
.
GetProperties 方法 (BindingFlags)
Type 类

当在派生类中重写时，使用指定绑定约束，搜索当前 Type 的如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function GetProperties ( _
    bindingAttr As BindingFlags _
) As PropertyInfo()
public abstract PropertyInfo[] GetProperties(
    BindingFlags bindingAttr
)
public:
virtual array<PropertyInfo^>^ GetProperties(
    BindingFlags bindingAttr
) abstract
abstract GetProperties :
        bindingAttr:BindingFlags -> PropertyInfo[]

参数

bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型：
array<
System.Reflection PropertyInfo
>
[]
()
[]

表示当前 Type 的匹配指定绑定约束的所有属性的 PropertyInfo 对象数组。
- 或 -
如果当前 Type 没有属性，或者如果没有一个属性匹配绑定约束，则为 PropertyInfo 类型的空数组。

实现

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

GetProperties 方法不按特定的顺序（如字母顺序或声明顺序）返回属性。您的代码一定不能依赖于属性的返回顺序，因为该顺序可以改变。 GetProperties 方法不按特定的顺序（如字母顺序或声明顺序）返回属性。您的代码一定不能依赖于属性的返回顺序，因为该顺序可以改变。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的嵌套类型：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共属性。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共属性（即私有属性、内部属性和受保护属性）。只返回基类上的受保护属性和内部属性；不返回基类上的私有属性。 指定 BindingFlags.NonPublic 可在搜索中包含非公共属性（即私有属性、内部属性和受保护属性）。只返回基类上的受保护属性和内部属性；不返回基类上的私有属性。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.DeclaredOnly，表示仅搜索 Type 上声明的属性，而不搜索被简单继承的属性。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

如果当前 T:System.Type 表示某种已构造的泛型类型，则此方法将返回 PropertyInfo 对象，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的属性。

下面的示例创建两个公共属性和一个受保护属性，并显示与指定绑定约束相匹配的属性的信息。

Imports System
Imports System.Reflection
Imports System.Reflection.Emit
Imports Microsoft.VisualBasic

' Create a class having three properties.
Public Class MyTypeClass
    Public ReadOnly Property MyProperty1() As [String]
        Get
            Return "hello"
        End Get
    End Property
    Public ReadOnly Property MyProperty2() As [String]
        Get
            Return "hello"
        End Get
    End Property
    Protected ReadOnly Property MyProperty3() As [String]
        Get
            Return "hello"
        End Get
    End Property
End Class 'MyTypeClass

Public Class TypeMain
    Public Shared Sub Main()
        Dim myType As Type = GetType(MyTypeClass)
        ' Get the public properties.
        Dim myPropertyInfo As PropertyInfo() = myType.GetProperties((BindingFlags.Public Or BindingFlags.Instance))
        Console.WriteLine("The number of public properties is {0}.", myPropertyInfo.Length.ToString())
        ' Display the public properties.
        DisplayPropertyInfo(myPropertyInfo)
        ' Get the nonpublic properties.
        Dim myPropertyInfo1 As PropertyInfo() = myType.GetProperties((BindingFlags.NonPublic Or BindingFlags.Instance))
        Console.WriteLine("The number of protected properties is {0}.", myPropertyInfo1.Length.ToString())
        ' Display the nonpublic properties.
        DisplayPropertyInfo(myPropertyInfo1)
    End Sub 'Main

    Public Shared Sub DisplayPropertyInfo(ByVal myPropertyInfo() As PropertyInfo)
        ' Display the information for all properties.
        Dim i As Integer
        For i = 0 To myPropertyInfo.Length - 1
            Dim myPropInfo As PropertyInfo = CType(myPropertyInfo(i), PropertyInfo)
            Console.WriteLine("The property name is {0}.", myPropInfo.Name.ToString())
            Console.WriteLine("The property type is {0}.", myPropInfo.PropertyType.ToString())
        Next i
    End Sub 'DisplayPropertyInfo
End Class 'TypeMain

using System;
using System.Reflection;
using System.Reflection.Emit;

// Create a class having three properties.
public class MyTypeClass
{
    public String MyProperty1
    {
        get
        {
            return "hello";
        }
    }
    public String MyProperty2
    {
        get
        {
            return "hello";
        }
    }
    protected String MyProperty3
    {
        get
        {
            return "hello";
        }
    }
}

public class TypeMain
{
    public static void Main()
    {
        Type myType =(typeof(MyTypeClass));
        // Get the public properties.
        PropertyInfo[] myPropertyInfo = myType.GetProperties(BindingFlags.Public|BindingFlags.Instance);
        Console.WriteLine("The mumber of public properties is {0}.", myPropertyInfo.Length);
        // Display the public properties.
        DisplayPropertyInfo(myPropertyInfo);
        // Get the nonpublic properties.
        PropertyInfo[] myPropertyInfo1 = myType.GetProperties(BindingFlags.NonPublic|BindingFlags.Instance);
        Console.WriteLine("The number of protected properties is {0}.", myPropertyInfo1.Length);
        // Display all the nonpublic properties.
        DisplayPropertyInfo(myPropertyInfo1);
    }
    public static void DisplayPropertyInfo(PropertyInfo[] myPropertyInfo)
    {
        // Display information for all properties.
        for(int i=0;i<myPropertyInfo.Length;i++)
        {
            PropertyInfo myPropInfo = (PropertyInfo)myPropertyInfo[i];
            Console.WriteLine("The property name is {0}.", myPropInfo.Name);
            Console.WriteLine("The property type is {0}.", myPropInfo.PropertyType);
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

// Create a class having three properties.
public ref class MyTypeClass
{
public:

   property String^ MyProperty1
   {
      String^ get()
      {
         return "hello";
      }
   }

   property String^ MyProperty2
   {
      String^ get()
      {
         return "hello";
      }
   }

protected:

   property String^ MyProperty3
   {
      String^ get()
      {
         return "hello";
      }
   }
};

void DisplayPropertyInfo( array<PropertyInfo^>^myPropertyInfo )
{
   // Display information for all properties.
   for ( int i = 0; i < myPropertyInfo->Length; i++ )
   {
      PropertyInfo^ myPropInfo = myPropertyInfo[ i ];
      Console::WriteLine( "The property name is {0}.", myPropInfo->Name );
      Console::WriteLine( "The property type is {0}.", myPropInfo->PropertyType );
   }
}

int main()
{
   Type^ myType = MyTypeClass::typeid;

   // Get the public properties.
   array<PropertyInfo^>^myPropertyInfo = myType->GetProperties( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
   Console::WriteLine( "The mumber of public properties is {0}.", myPropertyInfo->Length );

   // Display the public properties.
   DisplayPropertyInfo( myPropertyInfo );

   // Get the nonpublic properties.
   array<PropertyInfo^>^myPropertyInfo1 = myType->GetProperties( static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance) );
   Console::WriteLine( "The number of protected properties is {0}.", myPropertyInfo1->Length );

   // Display all the nonpublic properties.
   DisplayPropertyInfo( myPropertyInfo1 );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetProperties 重载
System 命名空间
PropertyInfo
BindingFlags
DefaultBinder
GetProperty


Type ..::.GetProperty 方法

Type
.
.
::
.
GetProperty 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取当前 Type 的特定属性。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetProperty 方法 (String)

Type
.
.
::
.
GetProperty 方法 (String)
Type 类

搜索具有指定名称的公共属性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetProperty ( _
    name As String _
) As PropertyInfo
public PropertyInfo GetProperty(
    string name
)
public:
virtual PropertyInfo^ GetProperty(
    String^ name
) sealed
abstract GetProperty :
        name:string -> PropertyInfo
override GetProperty :
        name:string -> PropertyInfo

参数

name
类型： System String
包含要获取的公共属性名的 String。

返回值

类型： System.Reflection PropertyInfo
表示具有指定名称的公共属性的 PropertyInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到不止一个具有指定名称的属性。请参见“备注”。 找到不止一个具有指定名称的属性。请参见“备注”。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。 对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

如果当前 Type 表示某种已构造的泛型类型，则此方法将返回 PropertyInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的属性。

发生 AmbiguousMatchException 的情形包括以下几种：

  • 一种类型包含两个名称相同但参数数目不同的索引属性。要解析多义性，请使用 GetProperty 方法重载来指定参数类型。 一种类型包含两个名称相同但参数数目不同的索引属性。要解析多义性，请使用 GetProperty 方法重载来指定参数类型。

  • 派生类型通过使用 new 修饰符（在 Visual Basic 中为 Shadows），声明隐藏同名继承属性的属性。要解析多义性，请使用 GetProperty(String, BindingFlags) 方法重载并包括 BindingFlags..::.DeclaredOnly 以限制对非继承成员的搜索。 派生类型通过使用 new 修饰符（在 Visual Basic 中为 Shadows），声明隐藏同名继承属性的属性。要解析多义性，请使用 GetProperty(String, BindingFlags) 方法重载并包括 BindingFlags..::.DeclaredOnly 以限制对非继承成员的搜索。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。

在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。

若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。 若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。

下面的示例检索用户定义类的 Type 对象，检索该类的属性，并显示属性名称。

Imports System
Imports System.Reflection
Class MyClass1
    Private myProperty1 As Integer
    ' Declare MyProperty.

    Public Property MyProperty() As Integer
        Get
            Return myProperty1
        End Get
        Set(ByVal Value As Integer)
            myProperty1 = Value
        End Set
    End Property
End Class 'MyClass1

Public Class MyTypeClass
    Public Shared Sub Main(ByVal args() As String)
        Try
            ' Get Type Object corresponding to MyClass.
            Dim myType As Type = GetType(MyClass1)
            ' Get PropertyInfo object by passing property name.
            Dim myPropInfo As PropertyInfo = myType.GetProperty("MyProperty")
            ' Display Name propety to console.
            Console.WriteLine("The {0} property exists in MyClass.", myPropInfo.Name)
        Catch e As NullReferenceException
            Console.WriteLine("The property does not exist in MyClass.", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeClass

using System;
using System.Reflection;

class MyClass
{
    private int myProperty;
    // Declare MyProperty.
    public int MyProperty
    {
        get
        {
            return myProperty;
        }
        set
        {
            myProperty=value;
        }
    }
}
public class MyTypeClass
{
    public static void Main(string[] args)
    {
        try
        {
            // Get the Type object corresponding to MyClass.
            Type myType=typeof(MyClass);
            // Get the PropertyInfo object by passing the property name.
            PropertyInfo myPropInfo = myType.GetProperty("MyProperty");
            // Display the property name.
            Console.WriteLine("The {0} property exists in MyClass.", myPropInfo.Name);
        }
        catch(NullReferenceException e)
        {
            Console.WriteLine("The property does not exist in MyClass." + e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
ref class MyClass
{
private:
   int myProperty;

public:

   property int MyProperty
   {
      // Declare MyProperty.
      int get()
      {
         return myProperty;
      }

      void set( int value )
      {
         myProperty = value;
      }
   }
};

int main()
{
   try
   {
      // Get the Type object corresponding to MyClass.
      Type^ myType = MyClass::typeid;

      // Get the PropertyInfo object by passing the property name.
      PropertyInfo^ myPropInfo = myType->GetProperty( "MyProperty" );

      // Display the property name.
      Console::WriteLine( "The {0} property exists in MyClass.", myPropInfo->Name );
   }
   catch ( NullReferenceException^ e )
   {
      Console::WriteLine( "The property does not exist in MyClass. {0}", e->Message );
   }
}

在内部，此属性在元数据中通过名称“Item”引用。因此，使用反射获取 PropertyInfo 的任何尝试都必须指定此内部名称，才能正确地返回 PropertyInfo 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetProperty 重载
System 命名空间
PropertyInfo
String
DefaultBinder
GetPropertyImpl
GetProperties


Type ..::.GetProperty 方法 (String, BindingFlags)

Type
.
.
::
.
GetProperty 方法 (String, BindingFlags)
Type 类

使用指定的绑定约束搜索指定属性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetProperty ( _
    name As String, _
    bindingAttr As BindingFlags _
) As PropertyInfo
public PropertyInfo GetProperty(
    string name,
    BindingFlags bindingAttr
)
public:
virtual PropertyInfo^ GetProperty(
    String^ name,
    BindingFlags bindingAttr
) sealed
abstract GetProperty :
        name:string *
        bindingAttr:BindingFlags -> PropertyInfo
override GetProperty :
        name:string *
        bindingAttr:BindingFlags -> PropertyInfo

参数

name
类型： System String
包含要获取的属性名的 String。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System.Reflection PropertyInfo
表示符合指定要求的属性的 PropertyInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到多个有指定名称且与指定绑定约束匹配的属性。请参见“备注”。 找到多个有指定名称且与指定绑定约束匹配的属性。请参见“备注”。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的属性：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共属性。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共属性（即私有属性、内部属性和受保护属性）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，表示仅搜索 Type 上声明的属性，而不搜索被简单继承的属性。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果当前 Type 表示某种已构造的泛型类型，则此方法将返回 PropertyInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的属性。

发生 AmbiguousMatchException 的情形包括以下几种：

  • 一种类型包含两个名称相同但参数数目不同的索引属性。要解析多义性，请使用 GetProperty 方法重载来指定参数类型。 一种类型包含两个名称相同但参数数目不同的索引属性。要解析多义性，请使用 GetProperty 方法重载来指定参数类型。

  • 派生类型通过使用 new 修饰符（在 Visual Basic 中为 Shadows），声明隐藏同名继承属性的属性。要解析多义性，请包括 BindingFlags..::.DeclaredOnly 以限制对非继承成员的搜索。 派生类型通过使用 new 修饰符（在 Visual Basic 中为 Shadows），声明隐藏同名继承属性的属性。要解析多义性，请包括 BindingFlags..::.DeclaredOnly 以限制对非继承成员的搜索。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。

在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。

若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。 若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。

下面的示例检索用户定义的类的类型，检索该类的属性，并显示与指定的绑定约束相匹配的属性名称。

Imports System
Imports System.Reflection
Module Module1
    Public Class MyClass1
        Private myProperty1 As Integer
        ' Declare MyProperty.
        Public Property MyProperty() As Integer
            Get
                Return myProperty1
            End Get
            Set(ByVal Value As Integer)
                myProperty1 = Value
            End Set
        End Property
        Public Shared Sub Main()
            Try
                ' Get a Type object corresponding to MyClass.
                Dim myType As Type = GetType(MyClass1)
                ' Get a PropertyInfo object by passing property name and specifying BindingFlags.
                Dim myPropInfo As PropertyInfo = myType.GetProperty("MyProperty", BindingFlags.Public Or BindingFlags.Instance)
                ' Display the Name property.
                Console.WriteLine("{0} is a property of MyClass.", myPropInfo.Name)
            Catch e As NullReferenceException
                Console.WriteLine("MyProperty does not exist in MyClass.", e.Message.ToString())
            End Try
        End Sub 'Main
    End Class 'MyClass1
End Module 'Module1

using System;
using System.Reflection;
class MyClass
{
    private int myProperty;
    // Declare MyProperty.
    public int MyProperty
    {
        get
        {
            return myProperty;
        }
        set
        {
            myProperty=value;
        }
    }
}
public class MyTypeClass
{
    public static void Main(string[] args)
    {
        try
        {
            // Get Type object of MyClass.
            Type myType=typeof(MyClass);
            // Get the PropertyInfo by passing the property name and specifying the BindingFlags.
            PropertyInfo myPropInfo = myType.GetProperty("MyProperty", BindingFlags.Public | BindingFlags.Instance);
            // Display Name propety to console.
            Console.WriteLine("{0} is a property of MyClass.", myPropInfo.Name);
        }
        catch(NullReferenceException e)
        {
            Console.WriteLine("MyProperty does not exist in MyClass." +e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
ref class MyClass
{
private:
   int myProperty;

public:

   property int MyProperty
   {
      // Declare MyProperty.
      int get()
      {
         return myProperty;
      }

      void set( int value )
      {
         myProperty = value;
      }
   }
};

int main()
{
   try
   {
      // Get Type object of MyClass.
      Type^ myType = MyClass::typeid;

      // Get the PropertyInfo by passing the property name and specifying the BindingFlags.
      PropertyInfo^ myPropInfo = myType->GetProperty( "MyProperty", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );

      // Display Name propety to console.
      Console::WriteLine( "{0} is a property of MyClass.", myPropInfo->Name );
   }
   catch ( NullReferenceException^ e )
   {
      Console::WriteLine( "MyProperty does not exist in MyClass. {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetProperty 重载
System 命名空间
PropertyInfo
String
BindingFlags
DefaultBinder
GetPropertyImpl
GetProperties


Type ..::.GetProperty 方法 (String, Type)

Type
.
.
::
.
GetProperty 方法 (String, Type)
Type 类

搜索具有指定名称和返回类型的公共属性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetProperty ( _
    name As String, _
    returnType As Type _
) As PropertyInfo
public PropertyInfo GetProperty(
    string name,
    Type returnType
)
public:
virtual PropertyInfo^ GetProperty(
    String^ name,
    Type^ returnType
) sealed
abstract GetProperty :
        name:string *
        returnType:Type -> PropertyInfo
override GetProperty :
        name:string *
        returnType:Type -> PropertyInfo

参数

name
类型： System String
包含要获取的公共属性名的 String。
returnType
类型： System Type
属性的返回类型。

返回值

类型： System.Reflection PropertyInfo
表示具有指定名称的公共属性的 PropertyInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到不止一个具有指定名称的属性。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或 returnType 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。 对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。

如果当前 Type 表示某种已构造的泛型类型，则此方法将返回 PropertyInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。

在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。

若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。 若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。

下面的示例定义具有一个属性的类，并检索该属性的名称和类型。

Imports System
Imports System.Reflection
Class MyClass1
    Private myMessage As [String] = "Hello World."
    Public Property MyProperty1() As String
        Get
            Return myMessage
        End Get
        Set(ByVal Value As String)
            myMessage = Value
        End Set
    End Property
End Class 'MyClass1

Class TestClass
    Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyClass1)
            ' Get the PropertyInfo object representing MyProperty1.
            Dim myStringProperties1 As PropertyInfo = myType.GetProperty("MyProperty1", GetType(String))
            Console.WriteLine("The name of the first property of MyClass1 is {0}.", myStringProperties1.Name)
            Console.WriteLine("The type of the first property of MyClass1 is {0}.", myStringProperties1.PropertyType.ToString())
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException :" + e.Message.ToString())
        Catch e As AmbiguousMatchException
            Console.WriteLine("AmbiguousMatchException :" + e.Message.ToString())
        Catch e As NullReferenceException
            Console.WriteLine("Source : {0}", e.Source.ToString())
            Console.WriteLine("Message : {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'TestClass

using System;
using System.Reflection;

class MyClass1
{
    String myMessage="Hello World.";
    public string MyProperty1
    {
        get
        {
            return myMessage;
        }
        set
        {
            myMessage =value;
        }
    }
}
class TestClass
{
    static void Main()
    {
        try
        {
            Type myType = typeof(MyClass1);
            // Get the PropertyInfo object representing MyProperty1.
            PropertyInfo myStringProperties1 = myType.GetProperty("MyProperty1",
                typeof(string));
            Console.WriteLine("The name of the first property of MyClass1 is {0}.", myStringProperties1.Name);
            Console.WriteLine("The type of the first property of MyClass1 is {0}.", myStringProperties1.PropertyType);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException :"+e.Message);

        }
        catch(AmbiguousMatchException e)
        {
            Console.WriteLine("AmbiguousMatchException :"+e.Message);
        }
        catch(NullReferenceException e)
        {
            Console.WriteLine("Source : {0}" , e.Source);
            Console.WriteLine("Message : {0}" , e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
ref class MyClass1
{
private:
   String^ myMessage;

public:

   property String^ MyProperty1
   {
      String^ get()
      {
         return myMessage;
      }

      void set( String^ value )
      {
         myMessage = value;
      }
   }
};

int main()
{
   try
   {
      Type^ myType = MyClass1::typeid;

      // Get the PropertyInfo Object* representing MyProperty1.
      PropertyInfo^ myStringProperties1 = myType->GetProperty( "MyProperty1", String::typeid );
      Console::WriteLine( "The name of the first property of MyClass1 is {0}.", myStringProperties1->Name );
      Console::WriteLine( "The type of the first property of MyClass1 is {0}.", myStringProperties1->PropertyType );
   }
   catch ( ArgumentNullException^ e )
   {
      Console::WriteLine( "ArgumentNullException : {0}", e->Message );
   }
   catch ( AmbiguousMatchException^ e )
   {
      Console::WriteLine( "AmbiguousMatchException : {0}", e->Message );
   }
   catch ( NullReferenceException^ e )
   {
      Console::WriteLine( "Source : {0}", e->Source );
      Console::WriteLine( "Message : {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetProperty 重载
System 命名空间
PropertyInfo
String
DefaultBinder
GetPropertyImpl
GetProperties


Type ..::.GetProperty 方法 (String, array<Type >[]()[])

Type
.
.
::
.
GetProperty 方法 (String,
array<
Type
>
[]
()
[]
)
Type 类

搜索其参数与指定参数类型匹配的指定公共属性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetProperty ( _
    name As String, _
    types As Type() _
) As PropertyInfo
public PropertyInfo GetProperty(
    string name,
    Type[] types
)
public:
virtual PropertyInfo^ GetProperty(
    String^ name,
    array<Type^>^ types
) sealed
abstract GetProperty :
        name:string *
        types:Type[] -> PropertyInfo
override GetProperty :
        name:string *
        types:Type[] -> PropertyInfo

参数

name
类型： System String
包含要获取的公共属性名的 String。
types
类型：
array<
System Type
>
[]
()
[]

表示要获取的索引属性的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
获取未被索引的属性的 Type 类型的空数组（即 Type[] types = new Type[0]）。

返回值

类型： System.Reflection PropertyInfo
表示其参数与指定参数类型匹配的公共属性的 PropertyInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到不止一个具有指定名称并与指定参数类型匹配的属性。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。
NullReferenceException | types 的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。 对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。

如果当前 Type 表示某种已构造的泛型类型，则此方法将返回 PropertyInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。

在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。

若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。 若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。

下面的示例检索用户定义类的 Type 对象，检索该类的属性，并显示属性名称和传递到 GetProperty 的参数所指定的属性的类型。

Imports System
Imports System.Reflection

Module Module1
    Class MyClass1
        Private myArray As Integer(,) = {{1, 2}, {3, 4}}
        ' Declare an indexer.
        Default Public Property Item(ByVal i As Integer, ByVal j As Integer) As Integer
            Get
                Return myArray(i, j)
            End Get
            Set(ByVal Value As Integer)

                myArray(i, j) = Value
            End Set
        End Property
    End Class 'MyClass1

    Public Class MyTypeClass
        Public Shared Sub Main()
            Try
                ' Get the Type Object.
                Dim myType As Type = GetType(MyClass1)
                Dim myTypeArr(1) As Type
                ' Create an instance of a Type array.
                myTypeArr.SetValue(GetType(Integer), 0)
                myTypeArr.SetValue(GetType(Integer), 1)
                ' Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
                Dim myPropInfo As PropertyInfo = myType.GetProperty("Item", myTypeArr)
                ' Display the property.
                Console.WriteLine("The {0} property exists in MyClass1.", myPropInfo.ToString())
            Catch e As NullReferenceException
                Console.WriteLine("An exception occurred.")
                Console.WriteLine("Source : {0}", e.Source.ToString())
                Console.WriteLine("Message : {0}", e.Message.ToString())
            End Try
        End Sub 'Main
    End Class 'MyTypeClass
End Module 'Module1

using System;
using System.Reflection;
class MyClass1
{
    private int [,] myArray = {{1,2},{3,4}};
    // Declare an indexer.
    public int this [int i,int j]
    {
        get
        {
            return myArray[i,j];
        }
        set
        {
            myArray[i,j] = value;
        }
    }
}
public class MyTypeClass
{
    public static void Main(string[] args)
    {
        try
        {
            // Get the Type object.
            Type myType=typeof(MyClass1);
            Type[] myTypeArr = new Type[2];
            // Create an instance of a Type array.
            myTypeArr.SetValue(typeof(int),0);
            myTypeArr.SetValue(typeof(int),1);
            // Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
            PropertyInfo myPropInfo = myType.GetProperty("Item", myTypeArr);
            // Display the property.
            Console.WriteLine("The {0} property exists in MyClass1.", myPropInfo.ToString());
        }
        catch(NullReferenceException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Source : {0}" , e.Source);
            Console.WriteLine("Message : {0}" , e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
ref class MyClass1
{
private:
   array<int, 2>^myArray;

public:

   property int Item [int, int]
   {

      // Declare an indexer.
      int get( int i, int j )
      {
         return myArray[ i,j ];
      }

      void set( int i, int j, int value )
      {
         myArray[ i,j ] = value;
      }

   }

};

int main()
{
   try
   {

      // Get the Type object.
      Type^ myType = MyClass1::typeid;
      array<Type^>^myTypeArr = gcnew array<Type^>(2);

      // Create an instance of a Type array.
      myTypeArr->SetValue( int::typeid, 0 );
      myTypeArr->SetValue( int::typeid, 1 );

      // Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
      PropertyInfo^ myPropInfo = myType->GetProperty( "Item", myTypeArr );

      // Display the property.
      Console::WriteLine( "The {0} property exists in MyClass1.", myPropInfo );
   }
   catch ( NullReferenceException^ e )
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Source : {0}", e->Source );
      Console::WriteLine( "Message : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetProperty 重载
System 命名空间
PropertyInfo
String
DefaultBinder
GetPropertyImpl
GetProperties


Type ..::.GetProperty 方法 (String, Type, array<Type >[]()[])

Type
.
.
::
.
GetProperty 方法 (String, Type,
array<
Type
>
[]
()
[]
)
Type 类

搜索其参数与指定参数类型匹配的指定公共属性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetProperty ( _
    name As String, _
    returnType As Type, _
    types As Type() _
) As PropertyInfo
public PropertyInfo GetProperty(
    string name,
    Type returnType,
    Type[] types
)
public:
virtual PropertyInfo^ GetProperty(
    String^ name,
    Type^ returnType,
    array<Type^>^ types
) sealed
abstract GetProperty :
        name:string *
        returnType:Type *
        types:Type[] -> PropertyInfo
override GetProperty :
        name:string *
        returnType:Type *
        types:Type[] -> PropertyInfo

参数

name
类型： System String
包含要获取的公共属性名的 String。
returnType
类型： System Type
属性的返回类型。
types
类型：
array<
System Type
>
[]
()
[]

表示要获取的索引属性的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
获取未被索引的属性的 Type 类型的空数组（即 Type[] types = new Type[0]）。

返回值

类型： System.Reflection PropertyInfo
表示其参数与指定参数类型匹配的公共属性的 PropertyInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到不止一个具有指定名称并与指定参数类型匹配的属性。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。
NullReferenceException | types 的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。 对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。

如果当前 Type 表示某种已构造的泛型类型，则此方法将返回 PropertyInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。

在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。

若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。 若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetProperty 重载
System 命名空间
PropertyInfo
String
DefaultBinder
GetPropertyImpl
GetProperties


Type ..::.GetProperty 方法 (String, Type, array<Type >[]()[], array<ParameterModifier >[]()[])

Type
.
.
::
.
GetProperty 方法 (String, Type,
array<
Type
>
[]
()
[]
,
array<
ParameterModifier
>
[]
()
[]
)
Type 类

搜索其参数与指定参数类型及修饰符匹配的指定公共属性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetProperty ( _
    name As String, _
    returnType As Type, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As PropertyInfo
public PropertyInfo GetProperty(
    string name,
    Type returnType,
    Type[] types,
    ParameterModifier[] modifiers
)
public:
virtual PropertyInfo^ GetProperty(
    String^ name,
    Type^ returnType,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) sealed
abstract GetProperty :
        name:string *
        returnType:Type *
        types:Type[] *
        modifiers:ParameterModifier[] -> PropertyInfo
override GetProperty :
        name:string *
        returnType:Type *
        types:Type[] *
        modifiers:ParameterModifier[] -> PropertyInfo

参数

name
类型： System String
包含要获取的公共属性名的 String。
returnType
类型： System Type
属性的返回类型。
types
类型：
array<
System Type
>
[]
()
[]

表示要获取的索引属性的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
获取未被索引的属性的 Type 类型的空数组（即 Type[] types = new Type[0]）。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。

返回值

类型： System.Reflection PropertyInfo
表示符合指定要求的公共属性的 PropertyInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到不止一个具有指定名称并与指定参数类型及修饰符匹配的属性。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。 - 或 - types 和 modifiers 的长度不同。
NullReferenceException | types 的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。 对 name 的搜索区分大小写。搜索范围包括公共静态属性和公共实例属性。

如果当前 Type 表示某种已构造的泛型类型，则此方法将返回 PropertyInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。

在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。

若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。 若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。

下面的示例获取对应 MyPropertyClass 的 Type 对象，并使用传递到 GetProperty 方法的参数来检索此类的索引属性。

Imports System
Imports System.Reflection

Public Class MyPropertyClass
    Private myPropertyArray(9, 9) As Integer
    ' Declare an indexer.
    Default Public Property Item(ByVal i As Integer, ByVal j As Integer) As Integer
        Get
            Return myPropertyArray(i, j)
        End Get
        Set(ByVal Value As Integer)
            myPropertyArray(i, j) = Value
        End Set
    End Property
End Class 'MyPropertyClass

Public Class MyTypeClass
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyPropertyClass)
            Dim myTypeArray(1) As Type
            ' Create an instance of a Type array representing the number, order
            ' and type of the parameters for the property.
            myTypeArray.SetValue(GetType(Integer), 0)
            myTypeArray.SetValue(GetType(Integer), 1)
            ' Search for the indexed property whose parameters match the
            ' specified argument types and modifiers.
            Dim myPropertyInfo As PropertyInfo = myType.GetProperty("Item", _
                  GetType(Integer), myTypeArray, Nothing)
            Console.WriteLine(myType.FullName + "." + myPropertyInfo.Name + _
                  " has a property  type of " + myPropertyInfo.PropertyType.ToString())
        Catch ex As Exception
            Console.WriteLine("An exception occurred " + ex.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeClass

using System;
using System.Reflection;
public class MyPropertyClass
{
    private int [,] myPropertyArray = new int[10,10];
    // Declare an indexer.
    public int this [int i,int j]
    {
        get
        {
            return myPropertyArray[i,j];
        }
        set
        {
            myPropertyArray[i,j] = value;
        }
    }
}
public class MyTypeClass
{
    public static void Main()
    {
        try
        {
            Type myType=typeof(MyPropertyClass);
            Type[] myTypeArray = new Type[2];
            // Create an instance of the Type array representing the number, order
            // and type of the parameters for the property.
            myTypeArray.SetValue(typeof(int),0);
            myTypeArray.SetValue(typeof(int),1);
            // Search for the indexed property whose parameters match the
            // specified argument types and modifiers.
            PropertyInfo myPropertyInfo = myType.GetProperty("Item",
                typeof(int),myTypeArray,null);
            Console.WriteLine(myType.FullName + "." + myPropertyInfo.Name +
                " has a property type of " + myPropertyInfo.PropertyType);
         }
        catch(Exception ex)
        {
            Console.WriteLine("An exception occurred " + ex.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class MyPropertyClass
{
private:
   array<int, 2>^ myPropertyArray;

public:

   property int Item [int, int]
   {
      // Declare an indexer.
      int get( int i, int j )
      {
         return myPropertyArray[ i,j ];
      }

      void set( int i, int j, int value )
      {
         myPropertyArray[ i,j ] = value;
      }

   }

};

int main()
{
   try
   {
      Type^ myType = MyPropertyClass::typeid;
      array<Type^>^myTypeArray = gcnew array<Type^>(2);

      // Create an instance of the Type array representing the number, order
      // and type of the parameters for the property.
      myTypeArray->SetValue( int::typeid, 0 );
      myTypeArray->SetValue( int::typeid, 1 );

      // Search for the indexed property whose parameters match the
      // specified argument types and modifiers.
      PropertyInfo^ myPropertyInfo = myType->GetProperty( "Item", int::typeid, myTypeArray, nullptr );
      Console::WriteLine( "{0}.{1} has a property type of {2}", myType->FullName, myPropertyInfo->Name, myPropertyInfo->PropertyType );
   }
   catch ( Exception^ ex )
   {
      Console::WriteLine( "An exception occurred {0}", ex->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetProperty 重载
System 命名空间
PropertyInfo
String
DefaultBinder
ParameterModifier
GetPropertyImpl
GetProperties


Type ..::.GetProperty 方法 (String, BindingFlags, Binder, Type, array<Type >[]()[], array<ParameterModifier >[]()[])

Type
.
.
::
.
GetProperty 方法 (String, BindingFlags, Binder, Type,
array<
Type
>
[]
()
[]
,
array<
ParameterModifier
>
[]
()
[]
)
Type 类

使用指定的绑定约束，搜索参数与指定的参数类型及修饰符匹配的指定属性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetProperty ( _
    name As String, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    returnType As Type, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As PropertyInfo
public PropertyInfo GetProperty(
    string name,
    BindingFlags bindingAttr,
    Binder binder,
    Type returnType,
    Type[] types,
    ParameterModifier[] modifiers
)
public:
virtual PropertyInfo^ GetProperty(
    String^ name,
    BindingFlags bindingAttr,
    Binder^ binder,
    Type^ returnType,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) sealed
abstract GetProperty :
        name:string *
        bindingAttr:BindingFlags *
        binder:Binder *
        returnType:Type *
        types:Type[] *
        modifiers:ParameterModifier[] -> PropertyInfo
override GetProperty :
        name:string *
        bindingAttr:BindingFlags *
        binder:Binder *
        returnType:Type *
        types:Type[] *
        modifiers:ParameterModifier[] -> PropertyInfo

参数

name
类型： System String
包含要获取的属性名的 String。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。
returnType
类型： System Type
属性的返回类型。
types
类型：
array<
System Type
>
[]
()
[]

表示要获取的索引属性的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
获取未被索引的属性的 Type 类型的空数组（即 Type[] types = new Type[0]）。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。

返回值

类型： System.Reflection PropertyInfo
表示符合指定要求的属性的 PropertyInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
AmbiguousMatchException | 找到多个有指定名称且与指定绑定约束匹配的属性。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。 - 或 - types 和 modifiers 的长度不同。
NullReferenceException | types 的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。 | BindingFlags Instance | 如果属性至少有一个为公共的访问器，则该属性被视为对于反射是公共的。否则，该属性将被视为私有，您必须使用 BindingFlags..::.NonPublic | BindingFlags..::.Instance |BindingFlags..::.Static（在 Visual Basic 中，使用 Or 来组合值）以获取它。

虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的属性：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共属性。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共属性（即私有属性、内部属性和受保护属性）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，表示仅搜索 Type 上声明的属性，而不搜索被简单继承的属性。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果当前 Type 表示某种已构造的泛型类型，则此方法将返回 PropertyInfo，并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法搜索类约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。 Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法，并允许将一个索引属性设为其类型的默认属性。例如，如果变量 myList 引用 ArrayList，则语法 myList[3] （在 Visual Basic 中为 myList(3)）将检索索引为 3 的元素。可以重载该属性。

在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。 在 C# 中，此功能称为索引器，而且不能按名称引用。默认情况下，C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是，类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如，String 类具有一个名为 Chars 的索引器。 使用 C# 以外的语言创建的索引属性也可以具有"Item"以外的名称。

若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。 若要确定某个类型是否具有默认属性，请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute，则 MemberName 属性返回默认属性的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetProperty 重载
System 命名空间
PropertyInfo
String
BindingFlags
Binder
DefaultBinder
ParameterModifier
GetPropertyImpl
GetProperties


Type ..::.GetPropertyImpl 方法

Type
.
.
::
.
GetPropertyImpl 方法
Type 类

当在派生类中重写时，使用指定的绑定约束搜索其参数与指定的参数类型和修饰符匹配的指定属性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function GetPropertyImpl ( _
    name As String, _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    returnType As Type, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As PropertyInfo
protected abstract PropertyInfo GetPropertyImpl(
    string name,
    BindingFlags bindingAttr,
    Binder binder,
    Type returnType,
    Type[] types,
    ParameterModifier[] modifiers
)
protected:
virtual PropertyInfo^ GetPropertyImpl(
    String^ name,
    BindingFlags bindingAttr,
    Binder^ binder,
    Type^ returnType,
    array<Type^>^ types,
    array<ParameterModifier>^ modifiers
) abstract
abstract GetPropertyImpl :
        name:string *
        bindingAttr:BindingFlags *
        binder:Binder *
        returnType:Type *
        types:Type[] *
        modifiers:ParameterModifier[] -> PropertyInfo

参数

name
类型： System String
包含要获取的属性名的 String。
bindingAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零，以返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载成员、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。
returnType
类型： System Type
属性的返回类型。
types
类型：
array<
System Type
>
[]
()
[]

表示要获取的索引属性的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
获取未被索引的属性的 Type 类型的空数组（即 Type[] types = new Type[0]）。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。 ParameterModifier 对象数组，表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。

返回值

类型： System.Reflection PropertyInfo
表示符合指定要求的属性的 PropertyInfo 对象（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
AmbiguousMatchException | 找到多个有指定名称且与指定绑定约束匹配的属性。
ArgumentNullException | name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - types 中的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | types 是多维的。 - 或 - modifiers 是多维的。 - 或 - types 和 modifiers 的长度不同。

虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier（modifiers 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的属性：

  • 为了获取返回值，必须指定 BindingFlags.Instance 或 BindingFlags.Static。

  • 指定 BindingFlags.Public 可在搜索中包含公共属性。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共属性（即私有属性、内部属性和受保护属性）。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员；不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，表示仅搜索 Type 上声明的属性，而不搜索被简单继承的属性。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
PropertyInfo
String
BindingFlags
Binder
DefaultBinder
ParameterModifier
GetProperty
GetProperties


Type ..::.GetType 方法

Type
.
.
::
.
GetType 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取表示指定类型的 Type 对象。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetType 方法

Type
.
.
::
.
GetType 方法
Type 类

获取当前 Type。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetType As Type
public Type GetType()
public:
virtual Type^ GetType() sealed
abstract GetType : unit -> Type
override GetType : unit -> Type

返回值

类型： System Type
当前的 Type。

实现

异常 | 条件
TargetInvocationException | 调用类初始值设定项并引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetType 重载
System 命名空间
TypeLoadException

其他资源

指定完全限定的类型名称


Type ..::.GetType 方法 (String)

Type
.
.
::
.
GetType 方法 (String)
Type 类

获取具有指定名称的 Type，执行区分大小写的搜索。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetType ( _
    typeName As String _
) As Type
public static Type GetType(
    string typeName
)
public:
static Type^ GetType(
    String^ typeName
)
static member GetType :
        typeName:string -> Type

参数

typeName
类型： System String
要获取的类型的程序集限定名称。请参见 AssemblyQualifiedName。如果该类型位于当前正在执行的程序集中或者 Mscorlib.dll 中，则提供由命名空间限定的类型名称就足够了。 要获取的类型的程序集限定名称。请参见 AssemblyQualifiedName。如果该类型位于当前正在执行的程序集中或者 Mscorlib.dll 中，则提供由命名空间限定的类型名称就足够了。 要获取的类型的程序集限定名称。请参见 AssemblyQualifiedName。如果该类型位于当前正在执行的程序集中或者 Mscorlib.dll 中，则提供由命名空间限定的类型名称就足够了。

返回值

类型： System Type
具有指定名称的 Type（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TargetInvocationException | 调用类初始值设定项并引发异常。
ArgumentException | typeName 表示具有指针类型、ByRef 类型或 Void 作为其类型参数之一的泛型类型。 - 或 - typeName 表示具有不正确数量的类型参数的泛型类型。 - 或 - typeName 表示泛型类型，其类型参数之一不满足对应类型参数的约束。
TypeLoadException | typeName 表示 TypedReference 的数组。
FileLoadException | 找到了该程序集或它的某个依赖项，但未能加载。
BadImageFormatException | 该程序集或它的某个依赖项无效。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而该程序集是用更高版本的公共语言运行时编译的。

您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。 您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。 您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。 您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。

GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要对动态模块使用 GetType，请在保存之前预订 AppDomain..::.AssemblyResolve 事件并调用 GetType。否则，将获得内存中程序集的两个副本。 若要对动态模块使用 GetType，请在保存之前预订 AppDomain..::.AssemblyResolve 事件并调用 GetType。否则，将获得内存中程序集的两个副本。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

不对数组或 COM 类型执行搜索，除非已将它们加载到可用类表中。

typeName 可以是由命名空间限定的类型名称，也可以是包含程序集名称规范的程序集限定名称。请参见 AssemblyQualifiedName。 typeName 可以是由命名空间限定的类型名称，也可以是包含程序集名称规范的程序集限定名称。请参见 AssemblyQualifiedName。

如果 typeName 包含命名空间，而不包含程序集名称，则此方法将只是以该顺序搜索调用对象的程序集以及 Mscorlib.dll。如果 typeName 是用部分或完整的程序集名称完全限定的，则此方法将在指定的程序集中进行搜索。如果程序集具有强名称，则需要完整的程序集名称。 如果 typeName 包含命名空间，而不包含程序集名称，则此方法将只是以该顺序搜索调用对象的程序集以及 Mscorlib.dll。如果 typeName 是用部分或完整的程序集名称完全限定的，则此方法将在指定的程序集中进行搜索。如果程序集具有强名称，则需要完整的程序集名称。 如果 typeName 包含命名空间，而不包含程序集名称，则此方法将只是以该顺序搜索调用对象的程序集以及 Mscorlib.dll。如果 typeName 是用部分或完整的程序集名称完全限定的，则此方法将在指定的程序集中进行搜索。如果程序集具有强名称，则需要完整的程序集名称。

AssemblyQualifiedName 属性返回完全限定的类型名称（包括嵌套类型、程序集名称和泛型类型参数）。所有支持公共语言运行时的编译器将发出嵌套类的简单名称，并且当被查询时，反射将依照下列约定构造一个 mangled 名称。 AssemblyQualifiedName 属性返回完全限定的类型名称（包括嵌套类型、程序集名称和泛型类型参数）。所有支持公共语言运行时的编译器将发出嵌套类的简单名称，并且当被查询时，反射将依照下列约定构造一个 mangled 名称。

说明 说明

在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。

分隔符 | 含义
反斜杠 (\) | 转义符。
反引号 (`) | 位于泛型类型名称末尾处的一个或多个数字之前，这些数字表示类型参数的数目。
中括号 ([]) | 将已构造泛型类型的泛型类型参数列表括在括号内；在类型参数列表内，将程序集限定类型括在括号内。
逗号 (,) | 位于程序集名称前。
句点 (.) | 表示命名空间标识符。
加号 (+) | 位于嵌套类前。

例如，类的完全限定名可能类似于如下形式：

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

如果命名空间为 TopNamespace.Sub+Namespace，则该字符串就必须在加号 (+) 前加转义符 (\)，以防止将加号解释成嵌套分隔符。反射按如下形式发出该字符串： 如果命名空间为 TopNamespace.Sub+Namespace，则该字符串就必须在加号 (+) 前加转义符 (\)，以防止将加号解释成嵌套分隔符。反射按如下形式发出该字符串：

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

“++”变成“\+\+”，而“\”变成“\\”。

可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。

类型名可能包含尾部字符，尾部字符表示有关该类型的附加信息，如类型是引用类型、指针类型还是数组类型。若要检索不具有这些尾随字符的类型名称，请使用 t.GetElementType().ToString()，其中 t 为类型。 类型名可能包含尾部字符，尾部字符表示有关该类型的附加信息，如类型是引用类型、指针类型还是数组类型。若要检索不具有这些尾随字符的类型名称，请使用 t.GetElementType().ToString()，其中 t 为类型。

在除程序集名称之外的所有类型名称组成部分中，空格都相关。在程序集名称中，“,”分隔符之前的空格相关，但“,”分隔符之后的空格将被忽略。 在除程序集名称之外的所有类型名称组成部分中，空格都相关。在程序集名称中，“,”分隔符之前的空格相关，但“,”分隔符之后的空格将被忽略。

泛型类型的名称以反引号 (`) 结尾，后跟表示泛型类型参数数目的数字。之所以进行这样的名称重整，是为了允许编译器支持出现在同一范围内名称相同但类型参数数目不同的泛型类型。例如，反射功能从泛型方法 Tuple(Of T) 和 Tuple(Of T0, T1)（在 Visual Basic 中）或 Tuple<T> 和 Tuple<T0, T1>（在 Visual C# 中）返回重整后的名称 Tuple`1 和 Tuple`2。 泛型类型的名称以反引号 (`) 结尾，后跟表示泛型类型参数数目的数字。之所以进行这样的名称重整，是为了允许编译器支持出现在同一范围内名称相同但类型参数数目不同的泛型类型。例如，反射功能从泛型方法 Tuple(Of T) 和 Tuple(Of T0, T1)（在 Visual Basic 中）或 Tuple<T> 和 Tuple<T0, T1>（在 Visual C# 中）返回重整后的名称 Tuple`1 和 Tuple`2。 泛型类型的名称以反引号 (`) 结尾，后跟表示泛型类型参数数目的数字。之所以进行这样的名称重整，是为了允许编译器支持出现在同一范围内名称相同但类型参数数目不同的泛型类型。例如，反射功能从泛型方法 Tuple(Of T) 和 Tuple(Of T0, T1)（在 Visual Basic 中）或 Tuple<T> 和 Tuple<T0, T1>（在 Visual C# 中）返回重整后的名称 Tuple`1 和 Tuple`2。

对于泛型类型，类型参数列表括在中括号内，类型参数之间用逗号隔开。例如，泛型 Dictionary<(Of <(TKey, TValue>)>) 有两个类型参数。键类型为 String 的 MyType 的 Dictionary<(Of <(TKey, TValue>)>) 可以表示为如下形式： 对于泛型类型，类型参数列表括在中括号内，类型参数之间用逗号隔开。例如，泛型 Dictionary<(Of <(TKey, TValue>)>) 有两个类型参数。键类型为 String 的 MyType 的 Dictionary<(Of <(TKey, TValue>)>) 可以表示为如下形式： 对于泛型类型，类型参数列表括在中括号内，类型参数之间用逗号隔开。例如，泛型 Dictionary<(Of <(TKey, TValue>)>) 有两个类型参数。键类型为 String 的 MyType 的 Dictionary<(Of <(TKey, TValue>)>) 可以表示为如下形式：

System.Collections.Generic.Dictionary`2[System.String,MyType]

若要在类型参数列表中指定程序集限定类型，请将程序集限定类型括在中括号内。否则，分隔程序集限定名称的逗号将被解释为限制其他类型参数。例如，可以按如下方式指定 MyAssembly.dll 中 MyType 的 Dictionary<(Of <(TKey, TValue>)>)（具有 String 类型的键）： 若要在类型参数列表中指定程序集限定类型，请将程序集限定类型括在中括号内。否则，分隔程序集限定名称的逗号将被解释为限制其他类型参数。例如，可以按如下方式指定 MyAssembly.dll 中 MyType 的 Dictionary<(Of <(TKey, TValue>)>)（具有 String 类型的键）： 若要在类型参数列表中指定程序集限定类型，请将程序集限定类型括在中括号内。否则，分隔程序集限定名称的逗号将被解释为限制其他类型参数。例如，可以按如下方式指定 MyAssembly.dll 中 MyType 的 Dictionary<(Of <(TKey, TValue>)>)（具有 String 类型的键）：

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
说明 说明

只有当程序集限定类型出现在类型参数列表中时，才可以将它括在中括号内。在程序集中搜索类型参数列表中限定类型和非限定类型的规则与搜索限定非通用类型和非限定非通用类型的规则相同。 只有当程序集限定类型出现在类型参数列表中时，才可以将它括在中括号内。在程序集中搜索类型参数列表中限定类型和非限定类型的规则与搜索限定非通用类型和非限定非通用类型的规则相同。

可以为 Null 的类型是泛型类型的特例。例如，可为 Null 的 Int32 由字符串“System.Nullable`1[System.Int32]”表示。 可以为 Null 的类型是泛型类型的特例。例如，可为 Null 的 Int32 由字符串“System.Nullable`1[System.Int32]”表示。

说明 说明

在 C#、C++ 和 Visual Basic 中，还可以使用类型运算符来获取可以为 Null 的类型。例如，可为 Null 的 Boolean 类型由 typeof(Nullable<bool>)（在 C# 中）、Nullable<Boolean>::typeid（在 C++ 中）和 GetType(Nullable(Of Boolean))（在 Visual Basic 中）返回。 在 C#、C++ 和 Visual Basic 中，还可以使用类型运算符来获取可以为 Null 的类型。例如，可为 Null 的 Boolean 类型由 typeof(Nullable<bool>)（在 C# 中）、Nullable<Boolean>::typeid（在 C++ 中）和 GetType(Nullable(Of Boolean))（在 Visual Basic 中）返回。

下表显示用于各种类型的 GetType 的语法。

若要获取 | 请使用
可为 Null 的 Int32 | Type.GetType("System.Nullable`1[System.Int32]")
指向 MyType 的非托管指针 | Type.GetType("MyType*")
指向 MyType 指针的非托管指针 | Type.GetType("MyType**")
指向 MyType 的托管指针或引用 | Type.GetType("MyType&").请注意，与指针不同，引用仅限于一个级别。 Type.GetType("MyType&").请注意，与指针不同，引用仅限于一个级别。
父类和嵌套类 | Type.GetType("MyParentClass+MyNestedClass")
下限为 0 的一维数组 | Type.GetType("MyType[]")
下限未知的一维数组 | Type.GetType("MyType[*]")
n 维数组 | 逗号 (,) 在中括号中一共出现 n-1 次。例如，System.Object[,,] 表示一个三维 Object 数组。 逗号 (,) 在中括号中一共出现 n-1 次。例如，System.Object[,,] 表示一个三维 Object 数组。
一维数组的数组 | Type.GetType("MyType[][]")
下限未知的矩形二维数组 | Type.GetType("MyType[,]")
具有一个类型参数的泛型类型 | Type.GetType("MyGenericType`1[MyType]")
具有两个类型参数的泛型类型 | Type.GetType("MyGenericType`2[MyType,AnotherType]")
具有两个程序集限定类型参数的泛型类型 | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
具有程序集限定类型参数的程序集限定泛型类型 | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
一个泛型类型，其类型参数是具有两个类型参数的泛型类型 | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

下面的示例检索 System.Int32 的类型并使用该类型对象来显示 System.Int32 的 FullName 属性。

Imports System
Namespace MyTypeNameSpace
    Class MyClass1
        Public Shared Sub Main()
            Try
                ' Get the type of the specified class.
                Dim myType1 As Type = Type.GetType("System.Int32")
                Console.WriteLine("The full name is {0}.", myType1.FullName)
                ' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
                Dim myType2 As Type = Type.GetType("NoneSuch", True)
                Console.WriteLine("The full name is {0}.", myType2.FullName)
            Catch e As TypeLoadException
                Console.WriteLine(e.Message.ToString())
            Catch e As Exception
                Console.WriteLine(e.Message.ToString())
            End Try
        End Sub 'Main
    End Class 'MyClass1
End Namespace 'MyTypeNameSpace

using System;
namespace MyTypeNameSpace
{
    class MyClass
    {
        public static void Main(string[] arg)
        {
            try
            {
                // Get the type of a specified class.
                Type myType1 = Type.GetType("System.Int32");
                Console.WriteLine("The full name is {0}.", myType1.FullName);
                // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
                Type myType2 = Type.GetType("NoneSuch", true);
                Console.WriteLine("The full name is {0}.", myType2.FullName);
            }
            catch(TypeLoadException e)
            {
                Console.WriteLine(e.Message);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

using namespace System;
int main()
{
   try
   {

      // Get the type of a specified class.
      Type^ myType1 = Type::GetType( "System.Int32" );
      Console::WriteLine( "The full name is {0}.", myType1->FullName );

      // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
      Type^ myType2 = Type::GetType( "NoneSuch", true );
      Console::WriteLine( "The full name is {0}.", myType2->FullName );
   }
   catch ( TypeLoadException^ e )
   {
      Console::WriteLine( e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetType 重载
System 命名空间
String
TypeLoadException
AssemblyQualifiedName
GetAssembly
GetType
AssemblyName

其他资源

指定完全限定的类型名称


Type ..::.GetType 方法 (String, Boolean)

Type
.
.
::
.
GetType 方法 (String, Boolean)
Type 类

获取具有指定名称的 Type，同时执行大小写敏感的搜索，并指定是否在没有找到该类型时引发异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetType ( _
    typeName As String, _
    throwOnError As Boolean _
) As Type
public static Type GetType(
    string typeName,
    bool throwOnError
)
public:
static Type^ GetType(
    String^ typeName,
    bool throwOnError
)
static member GetType :
        typeName:string *
        throwOnError:bool -> Type

参数

typeName
类型： System String
要获取的类型的程序集限定名称。请参见 AssemblyQualifiedName。如果该类型位于当前正在执行的程序集中或者 Mscorlib.dll 中，则提供由命名空间限定的类型名称就足够了。 要获取的类型的程序集限定名称。请参见 AssemblyQualifiedName。如果该类型位于当前正在执行的程序集中或者 Mscorlib.dll 中，则提供由命名空间限定的类型名称就足够了。 要获取的类型的程序集限定名称。请参见 AssemblyQualifiedName。如果该类型位于当前正在执行的程序集中或者 Mscorlib.dll 中，则提供由命名空间限定的类型名称就足够了。
throwOnError
类型： System Boolean
如果为 true，则在找不到该类型时引发异常；如果为 false，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。指定 false 还会消除其他一些异常情况，但不能全部消除。请参见“异常”一节。 如果为 true，则在找不到该类型时引发异常；如果为 false，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。指定 false 还会消除其他一些异常情况，但不能全部消除。请参见“异常”一节。 如果为 true，则在找不到该类型时引发异常；如果为 false，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。指定 false 还会消除其他一些异常情况，但不能全部消除。请参见“异常”一节。

返回值

类型： System Type
具有指定名称的类型。如果未找到该类型，则 throwOnError 参数指定是返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 还是引发异常。某些情况下，无论 throwOnError 的值是什么，都会引发异常。请参见“异常”一节。 具有指定名称的类型。如果未找到该类型，则 throwOnError 参数指定是返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 还是引发异常。某些情况下，无论 throwOnError 的值是什么，都会引发异常。请参见“异常”一节。 具有指定名称的类型。如果未找到该类型，则 throwOnError 参数指定是返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 还是引发异常。某些情况下，无论 throwOnError 的值是什么，都会引发异常。请参见“异常”一节。 具有指定名称的类型。如果未找到该类型，则 throwOnError 参数指定是返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 还是引发异常。某些情况下，无论 throwOnError 的值是什么，都会引发异常。请参见“异常”一节。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TargetInvocationException | 调用类初始值设定项并引发异常。
TypeLoadException | throwOnError 为 true，未找到该类型。 - 或 - throwOnError 为 true 并且 typeName 包含无效的字符，如内嵌选项卡。 - 或 - throwOnError 为 true 并且 typeName 为空字符串。 - 或 - throwOnError 为 true 并且 typeName 表示具有无效大小的数组类型。 - 或 - typeName 表示 TypedReference 的数组。
ArgumentException | throwOnError 为 true 且 typeName 包含无效的语法。例如，"MyType[,*,]"。 throwOnError 为 true 且 typeName 包含无效的语法。例如，"MyType[,*,]"。 - 或 - typeName 表示具有指针类型、ByRef 类型或 Void 作为其类型参数之一的泛型类型。 - 或 - typeName 表示具有不正确数量的类型参数的泛型类型。 - 或 - typeName 表示泛型类型，其类型参数之一不满足对应类型参数的约束。
FileNotFoundException | throwOnError 为 true，并且未找到该程序集或其依赖项之一。
FileLoadException | 找到了该程序集或它的某个依赖项，但未能加载。
BadImageFormatException | 该程序集或它的某个依赖项无效。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而该程序集是用更高版本的公共语言运行时编译的。

您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。 您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。 您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。 您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。

GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要对动态模块使用 GetType，请在保存之前预订 AppDomain..::.AssemblyResolve 事件并调用 GetType。否则，将获得内存中程序集的两个副本。 若要对动态模块使用 GetType，请在保存之前预订 AppDomain..::.AssemblyResolve 事件并调用 GetType。否则，将获得内存中程序集的两个副本。

throwOnError 参数指定当找不到该类型时发生的事件，还取消某些其他异常条件（如"异常"部分所述）。将引发某些异常，而不考虑 throwOnError 的值。例如，如果找到但无法加载此类型，则即使 throwOnError 为 false，也会引发 TypeLoadException。 throwOnError 参数指定当找不到该类型时发生的事件，还取消某些其他异常条件（如"异常"部分所述）。将引发某些异常，而不考虑 throwOnError 的值。例如，如果找到但无法加载此类型，则即使 throwOnError 为 false，也会引发 TypeLoadException。 throwOnError 参数指定当找不到该类型时发生的事件，还取消某些其他异常条件（如"异常"部分所述）。将引发某些异常，而不考虑 throwOnError 的值。例如，如果找到但无法加载此类型，则即使 throwOnError 为 false，也会引发 TypeLoadException。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

不对数组或 COM 类型执行搜索，除非已将它们加载到可用类表中。

typeName 可以是由命名空间限定的类型名称，也可以是包含程序集名称规范的程序集限定名称。请参见 AssemblyQualifiedName。 typeName 可以是由命名空间限定的类型名称，也可以是包含程序集名称规范的程序集限定名称。请参见 AssemblyQualifiedName。

如果 typeName 包含命名空间，而不包含程序集名称，则此方法将只是以该顺序搜索调用对象的程序集以及 Mscorlib.dll。如果 typeName 是用部分或完整的程序集名称完全限定的，则此方法将在指定的程序集中进行搜索。如果程序集具有强名称，则需要完整的程序集名称。 如果 typeName 包含命名空间，而不包含程序集名称，则此方法将只是以该顺序搜索调用对象的程序集以及 Mscorlib.dll。如果 typeName 是用部分或完整的程序集名称完全限定的，则此方法将在指定的程序集中进行搜索。如果程序集具有强名称，则需要完整的程序集名称。 如果 typeName 包含命名空间，而不包含程序集名称，则此方法将只是以该顺序搜索调用对象的程序集以及 Mscorlib.dll。如果 typeName 是用部分或完整的程序集名称完全限定的，则此方法将在指定的程序集中进行搜索。如果程序集具有强名称，则需要完整的程序集名称。

AssemblyQualifiedName 属性返回完全限定的类型名称（包括嵌套类型、程序集名称和泛型参数）。所有支持公共语言运行时的编译器将发出嵌套类的简单名称，并且当被查询时，反射将依照下列约定构造一个 mangled 名称。 AssemblyQualifiedName 属性返回完全限定的类型名称（包括嵌套类型、程序集名称和泛型参数）。所有支持公共语言运行时的编译器将发出嵌套类的简单名称，并且当被查询时，反射将依照下列约定构造一个 mangled 名称。

说明 说明

在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。

分隔符 | 含义
反斜杠 (\) | 转义符。
反引号 (`) | 位于泛型类型名称末尾处的一个或多个数字之前，这些数字表示类型参数的数目。
中括号 ([]) | 将已构造泛型类型的泛型类型参数列表括在括号内；在类型参数列表内，将程序集限定类型括在括号内。
逗号 (,) | 位于程序集名称前。
句点 (.) | 表示命名空间标识符。
加号 (+) | 位于嵌套类前。

例如，类的完全限定名可能类似于如下形式：

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

如果命名空间为 TopNamespace.Sub+Namespace，则该字符串就必须在加号 (+) 前加转义符 (\)，以防止将加号解释成嵌套分隔符。反射按如下形式发出该字符串： 如果命名空间为 TopNamespace.Sub+Namespace，则该字符串就必须在加号 (+) 前加转义符 (\)，以防止将加号解释成嵌套分隔符。反射按如下形式发出该字符串：

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

“++”变成“\+\+”，而“\”变成“\\”。

可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。

类型名可能包含尾部字符，尾部字符表示有关该类型的附加信息，如类型是引用类型、指针类型还是数组类型。若要检索不具有这些尾随字符的类型名称，请使用 t.GetElementType().ToString()，其中 t 为类型。 类型名可能包含尾部字符，尾部字符表示有关该类型的附加信息，如类型是引用类型、指针类型还是数组类型。若要检索不具有这些尾随字符的类型名称，请使用 t.GetElementType().ToString()，其中 t 为类型。

在除程序集名称之外的所有类型名称组成部分中，空格都相关。在程序集名称中，“,”分隔符之前的空格相关，但“,”分隔符之后的空格将被忽略。 在除程序集名称之外的所有类型名称组成部分中，空格都相关。在程序集名称中，“,”分隔符之前的空格相关，但“,”分隔符之后的空格将被忽略。

泛型类型的名称以反引号 (`) 结尾，后跟表示泛型类型参数数目的数字。之所以进行这样的名称重整，是为了允许编译器支持出现在同一范围内名称相同但类型参数数目不同的泛型类型。例如，反射功能从泛型方法 Tuple(Of T) 和 Tuple(Of T0, T1)（在 Visual Basic 中）或 Tuple<T> 和 Tuple<T0, T1>（在 Visual C# 中）返回重整后的名称 Tuple`1 和 Tuple`2。 泛型类型的名称以反引号 (`) 结尾，后跟表示泛型类型参数数目的数字。之所以进行这样的名称重整，是为了允许编译器支持出现在同一范围内名称相同但类型参数数目不同的泛型类型。例如，反射功能从泛型方法 Tuple(Of T) 和 Tuple(Of T0, T1)（在 Visual Basic 中）或 Tuple<T> 和 Tuple<T0, T1>（在 Visual C# 中）返回重整后的名称 Tuple`1 和 Tuple`2。 泛型类型的名称以反引号 (`) 结尾，后跟表示泛型类型参数数目的数字。之所以进行这样的名称重整，是为了允许编译器支持出现在同一范围内名称相同但类型参数数目不同的泛型类型。例如，反射功能从泛型方法 Tuple(Of T) 和 Tuple(Of T0, T1)（在 Visual Basic 中）或 Tuple<T> 和 Tuple<T0, T1>（在 Visual C# 中）返回重整后的名称 Tuple`1 和 Tuple`2。

对于泛型类型，类型参数列表括在中括号内，类型参数之间用逗号隔开。例如，泛型 Dictionary<(Of <(TKey, TValue>)>) 有两个类型参数。键类型为 String 的 MyType 的 Dictionary<(Of <(TKey, TValue>)>) 可以表示为如下形式： 对于泛型类型，类型参数列表括在中括号内，类型参数之间用逗号隔开。例如，泛型 Dictionary<(Of <(TKey, TValue>)>) 有两个类型参数。键类型为 String 的 MyType 的 Dictionary<(Of <(TKey, TValue>)>) 可以表示为如下形式： 对于泛型类型，类型参数列表括在中括号内，类型参数之间用逗号隔开。例如，泛型 Dictionary<(Of <(TKey, TValue>)>) 有两个类型参数。键类型为 String 的 MyType 的 Dictionary<(Of <(TKey, TValue>)>) 可以表示为如下形式：

System.Collections.Generic.Dictionary`2[System.String,MyType]

若要在类型参数列表中指定程序集限定类型，请将程序集限定类型括在中括号内。否则，分隔程序集限定名称的逗号将被解释为限制其他类型参数。例如，可以按如下方式指定 MyAssembly.dll 中 MyType 的 Dictionary<(Of <(TKey, TValue>)>)（具有 String 类型的键）： 若要在类型参数列表中指定程序集限定类型，请将程序集限定类型括在中括号内。否则，分隔程序集限定名称的逗号将被解释为限制其他类型参数。例如，可以按如下方式指定 MyAssembly.dll 中 MyType 的 Dictionary<(Of <(TKey, TValue>)>)（具有 String 类型的键）： 若要在类型参数列表中指定程序集限定类型，请将程序集限定类型括在中括号内。否则，分隔程序集限定名称的逗号将被解释为限制其他类型参数。例如，可以按如下方式指定 MyAssembly.dll 中 MyType 的 Dictionary<(Of <(TKey, TValue>)>)（具有 String 类型的键）：

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
说明 说明

只有当程序集限定类型出现在类型参数列表中时，才可以将它括在中括号内。在程序集中搜索类型参数列表中限定类型和非限定类型的规则与搜索限定非通用类型和非限定非通用类型的规则相同。 只有当程序集限定类型出现在类型参数列表中时，才可以将它括在中括号内。在程序集中搜索类型参数列表中限定类型和非限定类型的规则与搜索限定非通用类型和非限定非通用类型的规则相同。

可以为 Null 的类型是泛型类型的特例。例如，可为 Null 的 Int32 由字符串“System.Nullable`1[System.Int32]”表示。 可以为 Null 的类型是泛型类型的特例。例如，可为 Null 的 Int32 由字符串“System.Nullable`1[System.Int32]”表示。

说明 说明

在 C#、C++ 和 Visual Basic 中，还可以使用类型运算符来获取可以为 Null 的类型。例如，可为 Null 的 Boolean 类型由 typeof(Nullable<bool>)（在 C# 中）、Nullable<Boolean>::typeid（在 C++ 中）和 GetType(Nullable(Of Boolean))（在 Visual Basic 中）返回。 在 C#、C++ 和 Visual Basic 中，还可以使用类型运算符来获取可以为 Null 的类型。例如，可为 Null 的 Boolean 类型由 typeof(Nullable<bool>)（在 C# 中）、Nullable<Boolean>::typeid（在 C++ 中）和 GetType(Nullable(Of Boolean))（在 Visual Basic 中）返回。

下表显示用于各种类型的 GetType 的语法。

若要获取 | 请使用
可为 Null 的 Int32 | Type.GetType("System.Nullable`1[System.Int32]")
指向 MyType 的非托管指针 | Type.GetType("MyType*")
指向 MyType 指针的非托管指针 | Type.GetType("MyType**")
指向 MyType 的托管指针或引用 | Type.GetType("MyType&").请注意，与指针不同，引用仅限于一个级别。 Type.GetType("MyType&").请注意，与指针不同，引用仅限于一个级别。
父类和嵌套类 | Type.GetType("MyParentClass+MyNestedClass")
下限为 0 的一维数组 | Type.GetType("MyArray[]")
下限未知的一维数组 | Type.GetType("MyArray[*]")
n 维数组 | 逗号 (,) 在中括号中一共出现 n-1 次。例如，System.Object[,,] 表示一个三维 Object 数组。 逗号 (,) 在中括号中一共出现 n-1 次。例如，System.Object[,,] 表示一个三维 Object 数组。
二维数组的数组 | Type.GetType("MyArray[][]")
下限未知的矩形二维数组 | Type.GetType("MyArray[,]")
具有一个类型参数的泛型类型 | Type.GetType("MyGenericType`1[MyType]")
具有两个类型参数的泛型类型 | Type.GetType("MyGenericType`2[MyType,AnotherType]")
具有两个程序集限定类型参数的泛型类型 | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
具有程序集限定类型参数的程序集限定泛型类型 | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
一个泛型类型，其类型参数是具有两个类型参数的泛型类型 | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

下面的示例检索 System.Int32 的类型并使用该类型对象来显示 System.Int32 的 FullName 属性。如果类型对象引用的程序集不存在，则此示例引发一个异常。 下面的示例检索 System.Int32 的类型并使用该类型对象来显示 System.Int32 的 FullName 属性。如果类型对象引用的程序集不存在，则此示例引发一个异常。

Imports System
Namespace MyTypeNameSpace
    Class MyClass1
        Public Shared Sub Main()
            Try
                ' Get the type of the specified class.
                Dim myType1 As Type = Type.GetType("System.Int32")
                Console.WriteLine("The full name is {0}.", myType1.FullName)
                ' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
                Dim myType2 As Type = Type.GetType("NoneSuch", True)
                Console.WriteLine("The full name is {0}.", myType2.FullName)
            Catch e As TypeLoadException
                Console.WriteLine(e.Message.ToString())
            Catch e As Exception
                Console.WriteLine(e.Message.ToString())
            End Try
        End Sub 'Main
    End Class 'MyClass1
End Namespace 'MyTypeNameSpace

using System;
namespace MyTypeNameSpace
{
    class MyClass
    {
        public static void Main(string[] arg)
        {
            try
            {
                // Get the type of a specified class.
                Type myType1 = Type.GetType("System.Int32");
                Console.WriteLine("The full name is {0}.", myType1.FullName);
                // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
                Type myType2 = Type.GetType("NoneSuch", true);
                Console.WriteLine("The full name is {0}.", myType2.FullName);
            }
            catch(TypeLoadException e)
            {
                Console.WriteLine(e.Message);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

using namespace System;
int main()
{
   try
   {

      // Get the type of a specified class.
      Type^ myType1 = Type::GetType( "System.Int32" );
      Console::WriteLine( "The full name is {0}.", myType1->FullName );

      // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
      Type^ myType2 = Type::GetType( "NoneSuch", true );
      Console::WriteLine( "The full name is {0}.", myType2->FullName );
   }
   catch ( TypeLoadException^ e )
   {
      Console::WriteLine( e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetType 重载
System 命名空间
String
TypeLoadException
AssemblyQualifiedName
GetAssembly
GetType
AssemblyName

其他资源

指定完全限定的类型名称


Type ..::.GetType 方法 (String, Boolean, Boolean)

Type
.
.
::
.
GetType 方法 (String, Boolean, Boolean)
Type 类

获取具有指定名称的 Type，指定是否执行区分大小写的搜索，以及在找不到类型时是否引发异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetType ( _
    typeName As String, _
    throwOnError As Boolean, _
    ignoreCase As Boolean _
) As Type
public static Type GetType(
    string typeName,
    bool throwOnError,
    bool ignoreCase
)
public:
static Type^ GetType(
    String^ typeName,
    bool throwOnError,
    bool ignoreCase
)
static member GetType :
        typeName:string *
        throwOnError:bool *
        ignoreCase:bool -> Type

参数

typeName
类型： System String
要获取的类型的程序集限定名称。请参见 AssemblyQualifiedName。如果该类型位于当前正在执行的程序集中或者 Mscorlib.dll 中，则提供由命名空间限定的类型名称就足够了。 要获取的类型的程序集限定名称。请参见 AssemblyQualifiedName。如果该类型位于当前正在执行的程序集中或者 Mscorlib.dll 中，则提供由命名空间限定的类型名称就足够了。 要获取的类型的程序集限定名称。请参见 AssemblyQualifiedName。如果该类型位于当前正在执行的程序集中或者 Mscorlib.dll 中，则提供由命名空间限定的类型名称就足够了。
throwOnError
类型： System Boolean
如果为 true，则在找不到该类型时引发异常；如果为 false，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。指定 false 还会消除其他一些异常情况，但不能全部消除。请参见“异常”一节。 如果为 true，则在找不到该类型时引发异常；如果为 false，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。指定 false 还会消除其他一些异常情况，但不能全部消除。请参见“异常”一节。 如果为 true，则在找不到该类型时引发异常；如果为 false，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。指定 false 还会消除其他一些异常情况，但不能全部消除。请参见“异常”一节。
ignoreCase
类型： System Boolean
为 typeName 执行的搜索不区分大小写则为 true，为 typeName 执行的搜索区分大小写则为 false。

返回值

类型： System Type
具有指定名称的类型。如果未找到该类型，则 throwOnError 参数指定是返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 还是引发异常。某些情况下，无论 throwOnError 的值是什么，都会引发异常。请参见“异常”一节。 具有指定名称的类型。如果未找到该类型，则 throwOnError 参数指定是返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 还是引发异常。某些情况下，无论 throwOnError 的值是什么，都会引发异常。请参见“异常”一节。 具有指定名称的类型。如果未找到该类型，则 throwOnError 参数指定是返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 还是引发异常。某些情况下，无论 throwOnError 的值是什么，都会引发异常。请参见“异常”一节。 具有指定名称的类型。如果未找到该类型，则 throwOnError 参数指定是返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 还是引发异常。某些情况下，无论 throwOnError 的值是什么，都会引发异常。请参见“异常”一节。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TargetInvocationException | 调用类初始值设定项并引发异常。
TypeLoadException | throwOnError 为 true，未找到该类型。 - 或 - throwOnError 为 true 并且 typeName 包含无效的字符，如内嵌选项卡。 - 或 - throwOnError 为 true 并且 typeName 为空字符串。 - 或 - throwOnError 为 true 并且 typeName 表示具有无效大小的数组类型。 - 或 - typeName 表示 TypedReference 的数组。
ArgumentException | throwOnError 为 true 且 typeName 包含无效的语法。例如，"MyType[,*,]"。 throwOnError 为 true 且 typeName 包含无效的语法。例如，"MyType[,*,]"。 - 或 - typeName 表示具有指针类型、ByRef 类型或 Void 作为其类型参数之一的泛型类型。 - 或 - typeName 表示具有不正确数量的类型参数的泛型类型。 - 或 - typeName 表示泛型类型，其类型参数之一不满足对应类型参数的约束。
FileNotFoundException | throwOnError 为 true，并且未找到该程序集或其依赖项之一。
FileLoadException | 找到了该程序集或它的某个依赖项，但未能加载。
BadImageFormatException | 该程序集或它的某个依赖项无效。 - 或 - 当前加载的是 2.0 或更高版本的公共语言运行时，而该程序集是用更高版本的公共语言运行时编译的。

您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。 您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。 您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。 您可以使用 GetType 方法来获取另一个程序集中某个类型的 Type 对象（如果您知道该程序集的命名空间限定名称）。GetType 导致加载 typeName 中指定的程序集。您还可以使用 Load 方法来加载程序集，然后使用 Assembly 类的 GetType 或 GetTypes 方法来获取 Type 对象。如果在编译时，程序集中的类型对于您的程序来说是已知的，则使用 typeof（在 C# 中）、GetType（在 Visual Basic 中）或 typeid（在 C++ 中）更为高效。

GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 GetType 仅适用于从磁盘加载的程序集。如果调用 GetType 来查找在用 System.Reflection.Emit 服务定义的动态程序集中定义的类型，则可能会获得不一致的行为。该行为取决于动态程序集是否持久，即是否是使用 System.Reflection.Emit..::.AssemblyBuilderAccess 枚举的 RunAndSave 或 Save 访问模式创建的。如果动态程序集持久并已在调用 GetType 之前写入磁盘，则加载器会在磁盘上查找已保存的程序集，加载该程序集并从该程序集中检索类型。如果在调用 GetType 时尚未将程序集保存到磁盘，该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。GetType 不能识别瞬态动态程序集；因此，通过调用 GetType 来检索瞬态动态程序集中的类型会返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要对动态模块使用 GetType，请在保存之前预订 AppDomain..::.AssemblyResolve 事件并调用 GetType。否则，将获得内存中程序集的两个副本。 若要对动态模块使用 GetType，请在保存之前预订 AppDomain..::.AssemblyResolve 事件并调用 GetType。否则，将获得内存中程序集的两个副本。

throwOnError 参数指定当找不到该类型时发生的事件，还取消某些其他异常条件（如"异常"部分所述）。将引发某些异常，而不考虑 throwOnError 的值。例如，如果找到但无法加载此类型，则即使 throwOnError 为 false，也会引发 TypeLoadException。 throwOnError 参数指定当找不到该类型时发生的事件，还取消某些其他异常条件（如"异常"部分所述）。将引发某些异常，而不考虑 throwOnError 的值。例如，如果找到但无法加载此类型，则即使 throwOnError 为 false，也会引发 TypeLoadException。 throwOnError 参数指定当找不到该类型时发生的事件，还取消某些其他异常条件（如"异常"部分所述）。将引发某些异常，而不考虑 throwOnError 的值。例如，如果找到但无法加载此类型，则即使 throwOnError 为 false，也会引发 TypeLoadException。

下表显示在某个类型上进行反射时，Get 方法返回的基类的成员。

成员类型 | Static | 非静态
构造函数 | 不支持 | 不支持
字段 | 不支持 | 是。字段总是按名称和签名隐藏。 是。字段总是按名称和签名隐藏。
Event | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。
方法 | 不支持 | 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。 是。方法（虚方法和非虚方法）可按名称隐藏或按名称和签名隐藏。
嵌套类型 | 不支持 | 不支持
Property | 不适用 | 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。 常规类型系统规则是：该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

  1. 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。 按名称和签名隐藏会考虑签名的所有部分，包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。 对于反射，属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性，但派生类中仅有 get 访问器，则派生类属性隐藏基类属性，并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

不对数组或 COM 类型执行搜索，除非已将它们加载到可用类表中。

typeName 可以是由命名空间限定的类型名称，也可以是包含程序集名称规范的程序集限定名称。请参见 AssemblyQualifiedName。 typeName 可以是由命名空间限定的类型名称，也可以是包含程序集名称规范的程序集限定名称。请参见 AssemblyQualifiedName。

如果 typeName 包含命名空间，而不包含程序集名称，则此方法将只是以该顺序搜索调用对象的程序集以及 Mscorlib.dll。如果 typeName 是用部分或完整的程序集名称完全限定的，则此方法将在指定的程序集中进行搜索。如果程序集具有强名称，则需要完整的程序集名称。 如果 typeName 包含命名空间，而不包含程序集名称，则此方法将只是以该顺序搜索调用对象的程序集以及 Mscorlib.dll。如果 typeName 是用部分或完整的程序集名称完全限定的，则此方法将在指定的程序集中进行搜索。如果程序集具有强名称，则需要完整的程序集名称。 如果 typeName 包含命名空间，而不包含程序集名称，则此方法将只是以该顺序搜索调用对象的程序集以及 Mscorlib.dll。如果 typeName 是用部分或完整的程序集名称完全限定的，则此方法将在指定的程序集中进行搜索。如果程序集具有强名称，则需要完整的程序集名称。

AssemblyQualifiedName 属性返回完全限定的类型名称（包括嵌套类型、程序集名称和类型参数）。所有支持公共语言运行时的编译器将发出嵌套类的简单名称，并且当被查询时，反射将依照下列约定构造一个 mangled 名称。 AssemblyQualifiedName 属性返回完全限定的类型名称（包括嵌套类型、程序集名称和类型参数）。所有支持公共语言运行时的编译器将发出嵌套类的简单名称，并且当被查询时，反射将依照下列约定构造一个 mangled 名称。

说明 说明

在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。还可以通过创建 AssemblyName 对象并将其传递到 Load 方法的相应重载来加载类型。然后就可以使用 Assembly..::.GetType 方法来从程序集加载类型。请参见 AssemblyName..::.ProcessorArchitecture。

分隔符 | 含义
反斜杠 (\) | 转义符。
反引号 (`) | 位于泛型类型名称末尾处的一个或多个数字之前，这些数字表示类型参数的数目。
中括号 ([]) | 将已构造泛型类型的泛型类型参数列表括在括号内；在类型参数列表内，将程序集限定类型括在括号内。
逗号 (,) | 位于程序集名称前。
句点 (.) | 表示命名空间标识符。
加号 (+) | 位于嵌套类前。

例如，类的完全限定名可能类似于如下形式：

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

如果命名空间为 TopNamespace.Sub+Namespace，则该字符串就必须在加号 (+) 前加转义符 (\)，以防止将加号解释成嵌套分隔符。反射按如下形式发出该字符串： 如果命名空间为 TopNamespace.Sub+Namespace，则该字符串就必须在加号 (+) 前加转义符 (\)，以防止将加号解释成嵌套分隔符。反射按如下形式发出该字符串：

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

“++”变成“\+\+”，而“\”变成“\\”。

可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。

类型名可能包含尾部字符，尾部字符表示有关该类型的附加信息，如类型是引用类型、指针类型还是数组类型。若要检索不具有这些尾随字符的类型名称，请使用 t.GetElementType().ToString()，其中 t 为类型。 类型名可能包含尾部字符，尾部字符表示有关该类型的附加信息，如类型是引用类型、指针类型还是数组类型。若要检索不具有这些尾随字符的类型名称，请使用 t.GetElementType().ToString()，其中 t 为类型。

在除程序集名称之外的所有类型名称组成部分中，空格都相关。在程序集名称中，“,”分隔符之前的空格相关，但“,”分隔符之后的空格将被忽略。 在除程序集名称之外的所有类型名称组成部分中，空格都相关。在程序集名称中，“,”分隔符之前的空格相关，但“,”分隔符之后的空格将被忽略。

泛型类型的名称以反引号 (`) 结尾，后跟表示泛型类型参数数目的数字。之所以进行这样的名称重整，是为了允许编译器支持出现在同一范围内名称相同但类型参数数目不同的泛型类型。例如，反射功能从泛型方法 Tuple(Of T) 和 Tuple(Of T0, T1)（在 Visual Basic 中）或 Tuple<T> 和 Tuple<T0, T1>（在 Visual C# 中）返回重整后的名称 Tuple`1 和 Tuple`2。 泛型类型的名称以反引号 (`) 结尾，后跟表示泛型类型参数数目的数字。之所以进行这样的名称重整，是为了允许编译器支持出现在同一范围内名称相同但类型参数数目不同的泛型类型。例如，反射功能从泛型方法 Tuple(Of T) 和 Tuple(Of T0, T1)（在 Visual Basic 中）或 Tuple<T> 和 Tuple<T0, T1>（在 Visual C# 中）返回重整后的名称 Tuple`1 和 Tuple`2。 泛型类型的名称以反引号 (`) 结尾，后跟表示泛型类型参数数目的数字。之所以进行这样的名称重整，是为了允许编译器支持出现在同一范围内名称相同但类型参数数目不同的泛型类型。例如，反射功能从泛型方法 Tuple(Of T) 和 Tuple(Of T0, T1)（在 Visual Basic 中）或 Tuple<T> 和 Tuple<T0, T1>（在 Visual C# 中）返回重整后的名称 Tuple`1 和 Tuple`2。

对于泛型类型，类型参数列表括在中括号内，类型参数之间用逗号隔开。例如，泛型 Dictionary<(Of <(TKey, TValue>)>) 有两个类型参数。键类型为 String 的 MyType 的 Dictionary<(Of <(TKey, TValue>)>) 可以表示为如下形式： 对于泛型类型，类型参数列表括在中括号内，类型参数之间用逗号隔开。例如，泛型 Dictionary<(Of <(TKey, TValue>)>) 有两个类型参数。键类型为 String 的 MyType 的 Dictionary<(Of <(TKey, TValue>)>) 可以表示为如下形式： 对于泛型类型，类型参数列表括在中括号内，类型参数之间用逗号隔开。例如，泛型 Dictionary<(Of <(TKey, TValue>)>) 有两个类型参数。键类型为 String 的 MyType 的 Dictionary<(Of <(TKey, TValue>)>) 可以表示为如下形式：

System.Collections.Generic.Dictionary`2[System.String,MyType]

若要在类型参数列表中指定程序集限定类型，请将程序集限定类型括在中括号内。否则，分隔程序集限定名称的逗号将被解释为限制其他类型参数。例如，可以按如下方式指定 MyAssembly.dll 中 MyType 的 Dictionary<(Of <(TKey, TValue>)>)（具有 String 类型的键）： 若要在类型参数列表中指定程序集限定类型，请将程序集限定类型括在中括号内。否则，分隔程序集限定名称的逗号将被解释为限制其他类型参数。例如，可以按如下方式指定 MyAssembly.dll 中 MyType 的 Dictionary<(Of <(TKey, TValue>)>)（具有 String 类型的键）： 若要在类型参数列表中指定程序集限定类型，请将程序集限定类型括在中括号内。否则，分隔程序集限定名称的逗号将被解释为限制其他类型参数。例如，可以按如下方式指定 MyAssembly.dll 中 MyType 的 Dictionary<(Of <(TKey, TValue>)>)（具有 String 类型的键）：

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
说明 说明

只有当程序集限定类型出现在类型参数列表中时，才可以将它括在中括号内。在程序集中搜索类型参数列表中限定类型和非限定类型的规则与搜索限定非通用类型和非限定非通用类型的规则相同。 只有当程序集限定类型出现在类型参数列表中时，才可以将它括在中括号内。在程序集中搜索类型参数列表中限定类型和非限定类型的规则与搜索限定非通用类型和非限定非通用类型的规则相同。

可以为 Null 的类型是泛型类型的特例。例如，可为 Null 的 Int32 由字符串“System.Nullable`1[System.Int32]”表示。 可以为 Null 的类型是泛型类型的特例。例如，可为 Null 的 Int32 由字符串“System.Nullable`1[System.Int32]”表示。

说明 说明

在 C#、C++ 和 Visual Basic 中，还可以使用类型运算符来获取可以为 Null 的类型。例如，可为 Null 的 Boolean 类型由 typeof(Nullable<bool>)（在 C# 中）、Nullable<Boolean>::typeid（在 C++ 中）和 GetType(Nullable(Of Boolean))（在 Visual Basic 中）返回。 在 C#、C++ 和 Visual Basic 中，还可以使用类型运算符来获取可以为 Null 的类型。例如，可为 Null 的 Boolean 类型由 typeof(Nullable<bool>)（在 C# 中）、Nullable<Boolean>::typeid（在 C++ 中）和 GetType(Nullable(Of Boolean))（在 Visual Basic 中）返回。

下表显示用于各种类型的 GetType 的语法。

若要获取 | 请使用
可为 Null 的 Int32 | Type.GetType("System.Nullable`1[System.Int32]")
指向 MyType 的非托管指针 | Type.GetType("MyType*")
指向 MyType 指针的非托管指针 | Type.GetType("MyType**")
指向 MyType 的托管指针或引用 | Type.GetType("MyType&").请注意，与指针不同，引用仅限于一个级别。 Type.GetType("MyType&").请注意，与指针不同，引用仅限于一个级别。
父类和嵌套类 | Type.GetType("MyParentClass+MyNestedClass")
下限为 0 的一维数组 | Type.GetType("MyArray[]")
下限未知的一维数组 | Type.GetType("MyArray[*]")
n 维数组 | 逗号 (,) 在中括号中一共出现 n-1 次。例如，System.Object[,,] 表示一个三维 Object 数组。 逗号 (,) 在中括号中一共出现 n-1 次。例如，System.Object[,,] 表示一个三维 Object 数组。
二维数组的数组 | Type.GetType("MyArray[][]")
下限未知的矩形二维数组 | Type.GetType("MyArray[,]")
具有一个类型参数的泛型类型 | Type.GetType("MyGenericType`1[MyType]")
具有两个类型参数的泛型类型 | Type.GetType("MyGenericType`2[MyType,AnotherType]")
具有两个程序集限定类型参数的泛型类型 | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
具有程序集限定类型参数的程序集限定泛型类型 | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
一个泛型类型，其类型参数是具有两个类型参数的泛型类型 | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
GetType 重载
System 命名空间
String
TypeLoadException
AssemblyQualifiedName
GetAssembly
GetType
AssemblyName

其他资源

指定完全限定的类型名称


Type ..::.GetType 方法 (String, Func <(Of <(AssemblyName, Assembly >)>), Func <(Of <(Assembly, String, Boolean, Type >)>))

Type
.
.
::
.
GetType 方法 (String, Func
<
(Of
<
(
AssemblyName, Assembly
>
)
>
)
, Func
<
(Of
<
(
Assembly, String, Boolean, Type
>
)
>
)
)
Type 类

获取具有指定名称的类型，（可选）提供自定义方法以解析程序集和该类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetType ( _ typeName As String, _ assemblyResolver As Func(Of AssemblyName, Assembly), _ typeResolver As Func(Of Assembly, String, Boolean, Type) _ ) As Type
public static Type GetType( string typeName, Func<AssemblyName, Assembly> assemblyResolver, Func<Assembly, string, bool, Type> typeResolver )
public: static Type^ GetType( String^ typeName, Func<AssemblyName^, Assembly^>^ assemblyResolver, Func<Assembly^, String^, bool, Type^>^ typeResolver )
static member GetType : typeName:string * assemblyResolver:Func<AssemblyName, Assembly> * typeResolver:Func<Assembly, string, bool, Type> -> Type
参数
typeName
类型： System String
要获取的类型的名称。
如果提供了
typeResolver
参数，则类型名称可以为
typeResolver
能够解析的任何字符串。
如果提供了
assemblyResolver
参数，或者使用了标准类型解析，则除非该类型位于当前正在执行的程序集或 Mscorlib.dll 中（在这种情况下足以提供其命名空间所限定的类型名称），否则
typeName
必须为程序集限定的名称（请参见
AssemblyQualifiedName
）。
要获取的类型的名称。
如果提供了
typeResolver
参数，则类型名称可以为
typeResolver
能够解析的任何字符串。
如果提供了
assemblyResolver
参数，或者使用了标准类型解析，则除非该类型位于当前正在执行的程序集或 Mscorlib.dll 中（在这种情况下足以提供其命名空间所限定的类型名称），否则
typeName
必须为程序集限定的名称（请参见
AssemblyQualifiedName
）。
要获取的类型的名称。
如果提供了
typeResolver
参数，则类型名称可以为
typeResolver
能够解析的任何字符串。
如果提供了
assemblyResolver
参数，或者使用了标准类型解析，则除非该类型位于当前正在执行的程序集或 Mscorlib.dll 中（在这种情况下足以提供其命名空间所限定的类型名称），否则
typeName
必须为程序集限定的名称（请参见
AssemblyQualifiedName
）。
assemblyResolver
类型： System Func
<
(Of
<
(
AssemblyName, Assembly
>
)
>
)
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
警告
不要通过未知的或不受信任的调用方传递方法。
此操作可能会导致恶意代码特权提升。
仅使用您提供或者熟悉的方法。
不要通过未知的或不受信任的调用方传递方法。
此操作可能会导致恶意代码特权提升。
仅使用您提供或者熟悉的方法。
不要通过未知的或不受信任的调用方传递方法。
此操作可能会导致恶意代码特权提升。
仅使用您提供或者熟悉的方法。
typeResolver
类型： System Func
<
(Of
<
(
Assembly, String, Boolean, Type
>
)
>
)
一个方法，它在由
assemblyResolver
或标准程序集解析返回的程序集中定位并返回
typeName
所指定的类型。
如果未提供任何程序集，则
typeResolver
方法可以提供一个程序集。
该方法还采用一个参数以指定是否执行不区分大小写的搜索；
false
传递给该参数。
一个方法，它在由
assemblyResolver
或标准程序集解析返回的程序集中定位并返回
typeName
所指定的类型。
如果未提供任何程序集，则
typeResolver
方法可以提供一个程序集。
该方法还采用一个参数以指定是否执行不区分大小写的搜索；
false
传递给该参数。
一个方法，它在由
assemblyResolver
或标准程序集解析返回的程序集中定位并返回
typeName
所指定的类型。
如果未提供任何程序集，则
typeResolver
方法可以提供一个程序集。
该方法还采用一个参数以指定是否执行不区分大小写的搜索；
false
传递给该参数。
警告
不要通过未知的或不受信任的调用方传递方法。
返回值
类型： System Type
具有指定名称的类型，如果未找到该类型，则返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TargetInvocationException | 调用类初始值设定项并引发异常。
ArgumentException | 当 typeName 分析为类型名称和程序集名称（例如当简单类型名包含未转义的特殊字符）时，将发生错误。 - 或 - typeName 表示具有指针类型、ByRef 类型或 Void 作为其类型参数之一的泛型类型。 - 或 - typeName 表示具有不正确数量的类型参数的泛型类型。 - 或 - typeName 表示泛型类型，其类型参数之一不满足对应类型参数的约束。
TypeLoadException | typeName 表示 TypedReference 的数组。
FileLoadException | 找到了该程序集或它的某个依赖项，但未能加载。 - 或 - typeName 包含无效的程序集名称。 - 或 - typeName 是不含类型名称的有效程序集名称。
BadImageFormatException | 该程序集或它的某个依赖项无效。 - 或 - 该程序集是使用比当前加载的版本更高的公共语言运行时版本编译的。

在 GetType(String, Func<(Of <(AssemblyName, Assembly>)>), Func<(Of <(Assembly, String, Boolean, Type>)>), Boolean, Boolean) 方法重载中，可以找到有关此方法的使用方案以及关于 assemblyResolver 和 typeResolver 参数的详细信息。

调用此方法重载等效于调用 GetType(String, Func<(Of <(AssemblyName, Assembly>)>), Func<(Of <(Assembly, String, Boolean, Type>)>), Boolean, Boolean) 方法重载并且为 throwOnError 和 ignoreCase 参数指定 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetType 重载
System 命名空间


Type ..::.GetType 方法 (String, Func <(Of <(AssemblyName, Assembly >)>), Func <(Of <(Assembly, String, Boolean, Type >)>), Boolean)

Type
.
.
::
.
GetType 方法 (String, Func
<
(Of
<
(
AssemblyName, Assembly
>
)
>
)
, Func
<
(Of
<
(
Assembly, String, Boolean, Type
>
)
>
)
, Boolean)
Type 类

获取具有指定名称的类型，指定在找不到该类型时是否引发异常，（可选）提供自定义方法以解析程序集和该类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetType ( _ typeName As String, _ assemblyResolver As Func(Of AssemblyName, Assembly), _ typeResolver As Func(Of Assembly, String, Boolean, Type), _ throwOnError As Boolean _ ) As Type
public static Type GetType( string typeName, Func<AssemblyName, Assembly> assemblyResolver, Func<Assembly, string, bool, Type> typeResolver, bool throwOnError )
public: static Type^ GetType( String^ typeName, Func<AssemblyName^, Assembly^>^ assemblyResolver, Func<Assembly^, String^, bool, Type^>^ typeResolver, bool throwOnError )
static member GetType : typeName:string * assemblyResolver:Func<AssemblyName, Assembly> * typeResolver:Func<Assembly, string, bool, Type> * throwOnError:bool -> Type
参数
typeName
类型： System String
要获取的类型的名称。
如果提供了
typeResolver
参数，则类型名称可以为
typeResolver
能够解析的任何字符串。
如果提供了
assemblyResolver
参数，或者使用了标准类型解析，则除非该类型位于当前正在执行的程序集或 Mscorlib.dll 中（在这种情况下足以提供其命名空间所限定的类型名称），否则
typeName
必须为程序集限定的名称（请参见
AssemblyQualifiedName
）。
要获取的类型的名称。
如果提供了
typeResolver
参数，则类型名称可以为
typeResolver
能够解析的任何字符串。
如果提供了
assemblyResolver
参数，或者使用了标准类型解析，则除非该类型位于当前正在执行的程序集或 Mscorlib.dll 中（在这种情况下足以提供其命名空间所限定的类型名称），否则
typeName
必须为程序集限定的名称（请参见
AssemblyQualifiedName
）。
要获取的类型的名称。
如果提供了
typeResolver
参数，则类型名称可以为
typeResolver
能够解析的任何字符串。
如果提供了
assemblyResolver
参数，或者使用了标准类型解析，则除非该类型位于当前正在执行的程序集或 Mscorlib.dll 中（在这种情况下足以提供其命名空间所限定的类型名称），否则
typeName
必须为程序集限定的名称（请参见
AssemblyQualifiedName
）。
assemblyResolver
类型： System Func
<
(Of
<
(
AssemblyName, Assembly
>
)
>
)
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
警告
不要通过未知的或不受信任的调用方传递方法。
此操作可能会导致恶意代码特权提升。
仅使用您提供或者熟悉的方法。
不要通过未知的或不受信任的调用方传递方法。
此操作可能会导致恶意代码特权提升。
仅使用您提供或者熟悉的方法。
不要通过未知的或不受信任的调用方传递方法。
此操作可能会导致恶意代码特权提升。
仅使用您提供或者熟悉的方法。
typeResolver
类型： System Func
<
(Of
<
(
Assembly, String, Boolean, Type
>
)
>
)
一个方法，它在由
assemblyResolver
或标准程序集解析返回的程序集中定位并返回
typeName
所指定的类型。
如果未提供任何程序集，则该方法可以提供一个程序集。
该方法还采用一个参数以指定是否执行不区分大小写的搜索；
false
传递给该参数。
一个方法，它在由
assemblyResolver
或标准程序集解析返回的程序集中定位并返回
typeName
所指定的类型。
如果未提供任何程序集，则该方法可以提供一个程序集。
该方法还采用一个参数以指定是否执行不区分大小写的搜索；
false
传递给该参数。
一个方法，它在由
assemblyResolver
或标准程序集解析返回的程序集中定位并返回
typeName
所指定的类型。
如果未提供任何程序集，则该方法可以提供一个程序集。
该方法还采用一个参数以指定是否执行不区分大小写的搜索；
false
传递给该参数。
警告
不要通过未知的或不受信任的调用方传递方法。
throwOnError
类型： System Boolean
如果为
true
，则在找不到该类型时引发异常；如果为
false
，则返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
指定
false
还会消除其他一些异常情况，但不能全部消除。
请参见“异常”一节。
如果为
true
，则在找不到该类型时引发异常；如果为
false
，则返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
指定
false
还会消除其他一些异常情况，但不能全部消除。
请参见“异常”一节。
如果为
true
，则在找不到该类型时引发异常；如果为
false
，则返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
指定
false
还会消除其他一些异常情况，但不能全部消除。
请参见“异常”一节。
返回值
类型： System Type
具有指定名称的类型。
如果未找到该类型，则
throwOnError
参数指定是返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
还是引发异常。
某些情况下，无论
throwOnError
的值是什么，都会引发异常。
请参见“异常”一节。
具有指定名称的类型。
如果未找到该类型，则
throwOnError
参数指定是返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
还是引发异常。
某些情况下，无论
throwOnError
的值是什么，都会引发异常。
请参见“异常”一节。
具有指定名称的类型。
如果未找到该类型，则
throwOnError
参数指定是返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
还是引发异常。
某些情况下，无论
throwOnError
的值是什么，都会引发异常。
请参见“异常”一节。
具有指定名称的类型。
如果未找到该类型，则
throwOnError
参数指定是返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
还是引发异常。
某些情况下，无论
throwOnError
的值是什么，都会引发异常。
请参见“异常”一节。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TargetInvocationException | 调用类初始值设定项并引发异常。
TypeLoadException | throwOnError 为 true，未找到该类型。 - 或 - throwOnError 为 true 并且 typeName 包含无效的字符，如内嵌选项卡。 - 或 - throwOnError 为 true 并且 typeName 为空字符串。 - 或 - throwOnError 为 true 并且 typeName 表示具有无效大小的数组类型。 - 或 - typeName 表示 TypedReference 的数组。
ArgumentException | 当 typeName 分析为类型名称和程序集名称（例如当简单类型名包含未转义的特殊字符）时，将发生错误。 - 或 - throwOnError 为 true 且 typeName 包含无效的语法（例如，"MyType[,*,]"）。 - 或 - typeName 表示具有指针类型、ByRef 类型或 Void 作为其类型参数之一的泛型类型。 - 或 - typeName 表示具有不正确数量的类型参数的泛型类型。 - 或 - typeName 表示泛型类型，其类型参数之一不满足对应类型参数的约束。
FileNotFoundException | throwOnError 为 true，并且未找到该程序集或其依赖项之一。 - 或 - typeName 包含无效的程序集名称。 - 或 - typeName 是不含类型名称的有效程序集名称。
FileLoadException | 找到了该程序集或它的某个依赖项，但未能加载。
BadImageFormatException | 该程序集或它的某个依赖项无效。 - 或 - 该程序集是使用比当前加载的版本更高的公共语言运行时版本编译的。

在 GetType(String, Func<(Of <(AssemblyName, Assembly>)>), Func<(Of <(Assembly, String, Boolean, Type>)>), Boolean, Boolean) 方法重载中，可以找到有关此方法的使用方案以及关于 assemblyResolver 和 typeResolver 参数的详细信息。

调用此方法重载等效于调用 GetType(String, Func<(Of <(AssemblyName, Assembly>)>), Func<(Of <(Assembly, String, Boolean, Type>)>), Boolean, Boolean) 方法重载并且为ignoreCase 参数指定 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetType 重载
System 命名空间


Type ..::.GetType 方法 (String, Func <(Of <(AssemblyName, Assembly >)>), Func <(Of <(Assembly, String, Boolean, Type >)>), Boolean, Boolean)

Type
.
.
::
.
GetType 方法 (String, Func
<
(Of
<
(
AssemblyName, Assembly
>
)
>
)
, Func
<
(Of
<
(
Assembly, String, Boolean, Type
>
)
>
)
, Boolean, Boolean)
Type 类

获取具有指定名称的类型，指定是否执行区分大小写的搜索，在找不到类型时是否引发异常，（可选）提供自定义方法以解析程序集和该类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetType ( _ typeName As String, _ assemblyResolver As Func(Of AssemblyName, Assembly), _ typeResolver As Func(Of Assembly, String, Boolean, Type), _ throwOnError As Boolean, _ ignoreCase As Boolean _ ) As Type
public static Type GetType( string typeName, Func<AssemblyName, Assembly> assemblyResolver, Func<Assembly, string, bool, Type> typeResolver, bool throwOnError, bool ignoreCase )
public: static Type^ GetType( String^ typeName, Func<AssemblyName^, Assembly^>^ assemblyResolver, Func<Assembly^, String^, bool, Type^>^ typeResolver, bool throwOnError, bool ignoreCase )
static member GetType : typeName:string * assemblyResolver:Func<AssemblyName, Assembly> * typeResolver:Func<Assembly, string, bool, Type> * throwOnError:bool * ignoreCase:bool -> Type
参数
typeName
类型： System String
要获取的类型的名称。
如果提供了
typeResolver
参数，则类型名称可以为
typeResolver
能够解析的任何字符串。
如果提供了
assemblyResolver
参数，或者使用了标准类型解析，则除非该类型位于当前正在执行的程序集或 Mscorlib.dll 中（在这种情况下足以提供其命名空间所限定的类型名称），否则
typeName
必须为程序集限定的名称（请参见
AssemblyQualifiedName
）。
要获取的类型的名称。
如果提供了
typeResolver
参数，则类型名称可以为
typeResolver
能够解析的任何字符串。
如果提供了
assemblyResolver
参数，或者使用了标准类型解析，则除非该类型位于当前正在执行的程序集或 Mscorlib.dll 中（在这种情况下足以提供其命名空间所限定的类型名称），否则
typeName
必须为程序集限定的名称（请参见
AssemblyQualifiedName
）。
要获取的类型的名称。
如果提供了
typeResolver
参数，则类型名称可以为
typeResolver
能够解析的任何字符串。
如果提供了
assemblyResolver
参数，或者使用了标准类型解析，则除非该类型位于当前正在执行的程序集或 Mscorlib.dll 中（在这种情况下足以提供其命名空间所限定的类型名称），否则
typeName
必须为程序集限定的名称（请参见
AssemblyQualifiedName
）。
assemblyResolver
类型： System Func
<
(Of
<
(
AssemblyName, Assembly
>
)
>
)
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
一个方法，它定位并返回
typeName
中指定的程序集。
以
AssemblyName
对象形式传递给
assemblyResolver
的程序集名称。
如果
typeName
不包含程序集的名称，则不调用
assemblyResolver
。
如果未提供
assemblyResolver
，则执行标准程序集解析。
警告
不要通过未知的或不受信任的调用方传递方法。
此操作可能会导致恶意代码特权提升。
仅使用您提供或者熟悉的方法。
不要通过未知的或不受信任的调用方传递方法。
此操作可能会导致恶意代码特权提升。
仅使用您提供或者熟悉的方法。
不要通过未知的或不受信任的调用方传递方法。
此操作可能会导致恶意代码特权提升。
仅使用您提供或者熟悉的方法。
typeResolver
类型： System Func
<
(Of
<
(
Assembly, String, Boolean, Type
>
)
>
)
一个方法，它在由
assemblyResolver
或标准程序集解析返回的程序集中定位并返回
typeName
所指定的类型。
如果未提供任何程序集，则该方法可以提供一个程序集。
该方法还采用一个参数以指定是否执行不区分大小写的搜索；
ignoreCase
的值传递给该参数。
一个方法，它在由
assemblyResolver
或标准程序集解析返回的程序集中定位并返回
typeName
所指定的类型。
如果未提供任何程序集，则该方法可以提供一个程序集。
该方法还采用一个参数以指定是否执行不区分大小写的搜索；
ignoreCase
的值传递给该参数。
一个方法，它在由
assemblyResolver
或标准程序集解析返回的程序集中定位并返回
typeName
所指定的类型。
如果未提供任何程序集，则该方法可以提供一个程序集。
该方法还采用一个参数以指定是否执行不区分大小写的搜索；
ignoreCase
的值传递给该参数。
警告
不要通过未知的或不受信任的调用方传递方法。
throwOnError
类型： System Boolean
如果为
true
，则在找不到该类型时引发异常；如果为
false
，则返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
指定
false
还会消除其他一些异常情况，但不能全部消除。
请参见“异常”一节。
如果为
true
，则在找不到该类型时引发异常；如果为
false
，则返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
指定
false
还会消除其他一些异常情况，但不能全部消除。
请参见“异常”一节。
如果为
true
，则在找不到该类型时引发异常；如果为
false
，则返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
指定
false
还会消除其他一些异常情况，但不能全部消除。
请参见“异常”一节。
ignoreCase
类型： System Boolean
为
typeName
执行的搜索不区分大小写则为
true
，为
typeName
执行的搜索区分大小写则为
false
。
返回值
类型： System Type
具有指定名称的类型。
如果未找到该类型，则
throwOnError
参数指定是返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
还是引发异常。
某些情况下，无论
throwOnError
的值是什么，都会引发异常。
请参见“异常”一节。
具有指定名称的类型。
如果未找到该类型，则
throwOnError
参数指定是返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
还是引发异常。
某些情况下，无论
throwOnError
的值是什么，都会引发异常。
请参见“异常”一节。
具有指定名称的类型。
如果未找到该类型，则
throwOnError
参数指定是返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
还是引发异常。
某些情况下，无论
throwOnError
的值是什么，都会引发异常。
请参见“异常”一节。
具有指定名称的类型。
如果未找到该类型，则
throwOnError
参数指定是返回
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
还是引发异常。
某些情况下，无论
throwOnError
的值是什么，都会引发异常。
请参见“异常”一节。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TargetInvocationException | 调用类初始值设定项并引发异常。
TypeLoadException | throwOnError 为 true，未找到该类型。 - 或 - throwOnError 为 true 并且 typeName 包含无效的字符，如内嵌选项卡。 - 或 - throwOnError 为 true 并且 typeName 为空字符串。 - 或 - throwOnError 为 true 并且 typeName 表示具有无效大小的数组类型。 - 或 - typeName 表示 TypedReference 的数组。
ArgumentException | 当 typeName 分析为类型名称和程序集名称（例如当简单类型名包含未转义的特殊字符）时，将发生错误。 - 或 - throwOnError 为 true 且 typeName 包含无效的语法（例如，"MyType[,*,]"）。 - 或 - typeName 表示具有指针类型、ByRef 类型或 Void 作为其类型参数之一的泛型类型。 - 或 - typeName 表示具有不正确数量的类型参数的泛型类型。 - 或 - typeName 表示泛型类型，其类型参数之一不满足对应类型参数的约束。
FileNotFoundException | throwOnError 为 true，并且未找到该程序集或其依赖项之一。
FileLoadException | 找到了该程序集或它的某个依赖项，但未能加载。 - 或 - typeName 包含无效的程序集名称。 - 或 - typeName 是不含类型名称的有效程序集名称。
BadImageFormatException | 该程序集或它的某个依赖项无效。 - 或 - 该程序集是使用比当前加载的版本更高的公共语言运行时版本编译的。

使用此方法重载及其关联的重载（GetType(String, Func<(Of <(AssemblyName, Assembly>)>), Func<(Of <(Assembly, String, Boolean, Type>)>)) 和 GetType(String, Func<(Of <(AssemblyName, Assembly>)>), Func<(Of <(Assembly, String, Boolean, Type>)>), Boolean))将 GetType 方法的默认实现替换为更灵活的实现。通过提供自己的方法来解析类型名以及包含这些类型名的程序集的名称，您可以执行下列操作： 使用此方法重载及其关联的重载（GetType(String, Func<(Of <(AssemblyName, Assembly>)>), Func<(Of <(Assembly, String, Boolean, Type>)>)) 和 GetType(String, Func<(Of <(AssemblyName, Assembly>)>), Func<(Of <(Assembly, String, Boolean, Type>)>), Boolean))将 GetType 方法的默认实现替换为更灵活的实现。通过提供自己的方法来解析类型名以及包含这些类型名的程序集的名称，您可以执行下列操作：

  • 控制从中加载类型的程序集的版本。

  • 提供了另一个位置来查找不包含程序集名称的类型名称。

  • 使用部分程序集名称加载程序集。

  • 返回不由公共语言运行时 (CLR) 创建的 System..::.Type 的子类。

例如，在版本容错序列化中，此方法使您可以使用部分名称搜索“最佳”程序集。GetType 方法的其他重载需要程序集限定类型名称，包括版本号。 例如，在版本容错序列化中，此方法使您可以使用部分名称搜索“最佳”程序集。GetType 方法的其他重载需要程序集限定类型名称，包括版本号。

类型系统的替代实现可能需要返回不是由 CLR 创建的 System..::.Type 的子类；由 GetType 方法的其他重载返回的所有类型都是运行时类型。

用法说明

此方法重载及其关联的重载将 typeName 分析成某种类型的名称和程序集的名称，然后解析该名称。程序集名称的解析在类型名称解析之间进行，这是因为类型名称必须在程序集的上下文中解析。 此方法重载及其关联的重载将 typeName 分析成某种类型的名称和程序集的名称，然后解析该名称。程序集名称的解析在类型名称解析之间进行，这是因为类型名称必须在程序集的上下文中解析。

说明 说明

如果您不熟悉程序集限定类型名称的概念，请参阅 AssemblyQualifiedName 属性。

如果 typeName 不是程序集限定名称，则跳过程序集解析。非限定类型名称可以在 Mscorlib.dll 或当前执行的程序集的上下文中加以解析，或者您可以选择在 typeResolver 参数中提供程序集。包含或忽略不同种类的名称解析的程序集名称的效果将显示为混合名称解析部分中的表。 如果 typeName 不是程序集限定名称，则跳过程序集解析。非限定类型名称可以在 Mscorlib.dll 或当前执行的程序集的上下文中加以解析，或者您可以选择在 typeResolver 参数中提供程序集。包含或忽略不同种类的名称解析的程序集名称的效果将显示为混合名称解析部分中的表。 如果 typeName 不是程序集限定名称，则跳过程序集解析。非限定类型名称可以在 Mscorlib.dll 或当前执行的程序集的上下文中加以解析，或者您可以选择在 typeResolver 参数中提供程序集。包含或忽略不同种类的名称解析的程序集名称的效果将显示为混合名称解析部分中的表。

常规用法注释：

  • 请不要将方法传递到 assemblyResolver 或 typeResolver（如果他们来自未知或不受信任的调用方）。仅使用您提供或者熟悉的方法。 请不要将方法传递到 assemblyResolver 或 typeResolver（如果他们来自未知或不受信任的调用方）。仅使用您提供或者熟悉的方法。

    警告说明 警告

    使用来自未知或不受信任的调用方的方法可能会导致恶意代码的特权提升。

  • 如果忽略 assemblyResolver 和/或 typeResolver 参数，则 throwOnError 参数的值传递给执行默认解析的方法。

  • 如果 throwOnError 为 true，当 typeResolver 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，此方法引发 TypeLoadException，当 assemblyResolver 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时则引发 FileNotFoundException。

  • 此方法不会捕捉 assemblyResolver 和 typeResolver 引发的异常。您负责处理解析程序方法引发的任何异常。 此方法不会捕捉 assemblyResolver 和 typeResolver 引发的异常。您负责处理解析程序方法引发的任何异常。

解析程序集

assemblyResolver 方法接收一个通过分析 AssemblyName 中包含的字符串程序集名称而生成的 typeName 对象。如果 typeName 不包含程序集名称，则不调用 assemblyResolver，且 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 传递给 typeResolver。 assemblyResolver 方法接收一个通过分析 AssemblyName 中包含的字符串程序集名称而生成的 typeName 对象。如果 typeName 不包含程序集名称，则不调用 assemblyResolver，且 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 传递给 typeResolver。

如果未提供 assemblyResolver，则使用标准程序集探测来定位程序集。如果提供了 assemblyResolver，则 GetType 方法不执行标准探测；在这种情况下，您必须确保您 assemblyResolver 可以处理您传递给它的所有程序集。 如果未提供 assemblyResolver，则使用标准程序集探测来定位程序集。如果提供了 assemblyResolver，则 GetType 方法不执行标准探测；在这种情况下，您必须确保您 assemblyResolver 可以处理您传递给它的所有程序集。

如果无法分析程序集，assemblyResolver 方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 assemblyResolver 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不调用 typeResolver 且不发生进一步处理；另外，如果 throwOnError 为 true，则引发 FileNotFoundException。 如果无法分析程序集，assemblyResolver 方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 assemblyResolver 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不调用 typeResolver 且不发生进一步处理；另外，如果 throwOnError 为 true，则引发 FileNotFoundException。

如果传递给 assemblyResolver 的 AssemblyName 是部分名称，则其一个或多个部分为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。例如，如果没有版本，则 Version 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 Version 属性、CultureInfo 属性和 GetPublicKeyToken 方法都返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则仅提供程序集的简单名称。assemblyResolver 方法可以使用或忽略程序集名称的所有部分。 如果传递给 assemblyResolver 的 AssemblyName 是部分名称，则其一个或多个部分为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。例如，如果没有版本，则 Version 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 Version 属性、CultureInfo 属性和 GetPublicKeyToken 方法都返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则仅提供程序集的简单名称。assemblyResolver 方法可以使用或忽略程序集名称的所有部分。 如果传递给 assemblyResolver 的 AssemblyName 是部分名称，则其一个或多个部分为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。例如，如果没有版本，则 Version 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 Version 属性、CultureInfo 属性和 GetPublicKeyToken 方法都返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则仅提供程序集的简单名称。assemblyResolver 方法可以使用或忽略程序集名称的所有部分。 如果传递给 assemblyResolver 的 AssemblyName 是部分名称，则其一个或多个部分为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。例如，如果没有版本，则 Version 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果 Version 属性、CultureInfo 属性和 GetPublicKeyToken 方法都返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则仅提供程序集的简单名称。assemblyResolver 方法可以使用或忽略程序集名称的所有部分。

对于简单和程序集限定类型名称，不同的程序集解析选项的效果将显示为混合名称解析部分中的表。

解析类型

如果 typeName 未指定程序集名称，则始终调用 typeResolver。如果 typeName 指定了程序集名称，则仅当成功解析该程序集名称时才调用 typeResolver。如果 assemblyResolver 或标准程序集探测返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不调用 typeResolver。 如果 typeName 未指定程序集名称，则始终调用 typeResolver。如果 typeName 指定了程序集名称，则仅当成功解析该程序集名称时才调用 typeResolver。如果 assemblyResolver 或标准程序集探测返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不调用 typeResolver。 如果 typeName 未指定程序集名称，则始终调用 typeResolver。如果 typeName 指定了程序集名称，则仅当成功解析该程序集名称时才调用 typeResolver。如果 assemblyResolver 或标准程序集探测返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则不调用 typeResolver。

typeResolver 方法接收三个参数：

  • 如果 typeName 不包含程序集名称，则是要搜索的程序集或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

  • 类型的简单名称。在嵌套类型的情况下，这是最外层的包含类型。在泛型类型的情况下，这是泛型类型的简单名称。 类型的简单名称。在嵌套类型的情况下，这是最外层的包含类型。在泛型类型的情况下，这是泛型类型的简单名称。 类型的简单名称。在嵌套类型的情况下，这是最外层的包含类型。在泛型类型的情况下，这是泛型类型的简单名称。

  • 一个布尔值，在忽略类型名称时值为 true。

实现确定这些参数的使用方式。typeResolver 方法应返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（如果它不能解析类型）。如果 typeResolver 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 且 throwOnError 为 true，则 GetType 的此重载引发 TypeLoadException。 实现确定这些参数的使用方式。typeResolver 方法应返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（如果它不能解析类型）。如果 typeResolver 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 且 throwOnError 为 true，则 GetType 的此重载引发 TypeLoadException。 实现确定这些参数的使用方式。typeResolver 方法应返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（如果它不能解析类型）。如果 typeResolver 返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 且 throwOnError 为 true，则 GetType 的此重载引发 TypeLoadException。

对于简单和程序集限定类型名称，不同的类型解析选项的效果将显示为混合名称解析部分中的表。

解析嵌套类型

如果 typeName 是嵌套的类型，则只有最外面的包含类型的名称将传递到 typeResolver。当 typeResolver 返回此类型时，将按递归方式调用 GetNestedType 方法，直到解析完最里面的嵌套类型。 如果 typeName 是嵌套的类型，则只有最外面的包含类型的名称将传递到 typeResolver。当 typeResolver 返回此类型时，将按递归方式调用 GetNestedType 方法，直到解析完最里面的嵌套类型。

解析泛型类型

GetType 被递归调用来解析泛型类型：先解析泛型类型本身，然后解析其类型参数。如果类型参数是泛型参数，则递归调用 GetType 以解析其类型参数，依次类推。 GetType 被递归调用来解析泛型类型：先解析泛型类型本身，然后解析其类型参数。如果类型参数是泛型参数，则递归调用 GetType 以解析其类型参数，依次类推。

assemblyResolver 和您提供的 typeResolver 的组合必须能够求解此递归的所有级别。例如，假设您提供一个控制 MyAssembly 加载的 assemblyResolver。假定您希望解析泛型类型 Dictionary<string, MyType>（Visual Basic 中的Dictionary(Of String, MyType)）。您可以传递下面的泛型类型名称： assemblyResolver 和您提供的 typeResolver 的组合必须能够求解此递归的所有级别。例如，假设您提供一个控制 MyAssembly 加载的 assemblyResolver。假定您希望解析泛型类型 Dictionary<string, MyType>（Visual Basic 中的Dictionary(Of String, MyType)）。您可以传递下面的泛型类型名称： assemblyResolver 和您提供的 typeResolver 的组合必须能够求解此递归的所有级别。例如，假设您提供一个控制 MyAssembly 加载的 assemblyResolver。假定您希望解析泛型类型 Dictionary<string, MyType>（Visual Basic 中的Dictionary(Of String, MyType)）。您可以传递下面的泛型类型名称： assemblyResolver 和您提供的 typeResolver 的组合必须能够求解此递归的所有级别。例如，假设您提供一个控制 MyAssembly 加载的 assemblyResolver。假定您希望解析泛型类型 Dictionary<string, MyType>（Visual Basic 中的Dictionary(Of String, MyType)）。您可以传递下面的泛型类型名称：

"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"

请注意 MyType 是程序集限定的唯一类型参数。Dictionary<(Of <(TKey, TValue>)>) 和 String 类的名称不是程序集限定名。您的 typeResolver 必须能够处理程序集或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），因为它将为 Dictionary<(Of <(TKey, TValue>)>) 和 String 接收到 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它可以通过调用 GetType 方法的重载处理该情况，这是因为两个非限定类型名称都在 Mscorlib.dll 中： 请注意 MyType 是程序集限定的唯一类型参数。Dictionary<(Of <(TKey, TValue>)>) 和 String 类的名称不是程序集限定名。您的 typeResolver 必须能够处理程序集或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），因为它将为 Dictionary<(Of <(TKey, TValue>)>) 和 String 接收到 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它可以通过调用 GetType 方法的重载处理该情况，这是因为两个非限定类型名称都在 Mscorlib.dll 中： 请注意 MyType 是程序集限定的唯一类型参数。Dictionary<(Of <(TKey, TValue>)>) 和 String 类的名称不是程序集限定名。您的 typeResolver 必须能够处理程序集或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），因为它将为 Dictionary<(Of <(TKey, TValue>)>) 和 String 接收到 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它可以通过调用 GetType 方法的重载处理该情况，这是因为两个非限定类型名称都在 Mscorlib.dll 中： 请注意 MyType 是程序集限定的唯一类型参数。Dictionary<(Of <(TKey, TValue>)>) 和 String 类的名称不是程序集限定名。您的 typeResolver 必须能够处理程序集或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），因为它将为 Dictionary<(Of <(TKey, TValue>)>) 和 String 接收到 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。它可以通过调用 GetType 方法的重载处理该情况，这是因为两个非限定类型名称都在 Mscorlib.dll 中：

Type t = Type.GetType(test,
                      (aName) => aName.Name == "MyAssembly" ?
                          Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
                      (assem, name, ignore) => assem == null ?
                          Type.GetType(name, false, ignore) :
                              assem.GetType(name, false, ignore)
                     );

不会为字典类型和字符串类型调用 assemblyResolver 方法，因为这些类型名称不是程序集限定名称。

现在假设，第一个泛型参数类型不是 System.String，而是 YourAssembly 中的 YourType：

"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"

由于此程序集不是 Mscorlib.dll，也不是当前正在执行的程序集，因此没有程序集限定的名称时不能解析 YourType。由于您的 assemblyResolve 将被递归调用，因此必须能够处理此情况。它现在使用提供的 AssemblyName 对象执行程序集加载，而不是对 MyAssembly 之外的其他程序集返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 由于此程序集不是 Mscorlib.dll，也不是当前正在执行的程序集，因此没有程序集限定的名称时不能解析 YourType。由于您的 assemblyResolve 将被递归调用，因此必须能够处理此情况。它现在使用提供的 AssemblyName 对象执行程序集加载，而不是对 MyAssembly 之外的其他程序集返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 由于此程序集不是 Mscorlib.dll，也不是当前正在执行的程序集，因此没有程序集限定的名称时不能解析 YourType。由于您的 assemblyResolve 将被递归调用，因此必须能够处理此情况。它现在使用提供的 AssemblyName 对象执行程序集加载，而不是对 MyAssembly 之外的其他程序集返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Type t2 = Type.GetType(test,
                       (aName) => aName.Name == "MyAssembly" ?
                           Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
                           Assembly.Load(aName),
                       (assem, name, ignore) => assem == null ?
                           Type.GetType(name, false, ignore) :
                               assem.GetType(name, false, ignore), true
                      );

返回到用法说明。

解析具有特殊字符的类型名称

某些字符在程序集限定的名称中具有特殊含义。如果简单类型名称中包含这些字符，则在简单名称作为程序集限定名称一部分的情况下，这些字符将导致分析错误。为了避免出现分析错误，您必须用反斜杠转义特殊字符，然后才能将程序集限定名称传递给 GetType 方法。例如，如果类型命名为 Strange]Type，则必须在方括号前添加转义字符，如下所示：Strange\]Type。 某些字符在程序集限定的名称中具有特殊含义。如果简单类型名称中包含这些字符，则在简单名称作为程序集限定名称一部分的情况下，这些字符将导致分析错误。为了避免出现分析错误，您必须用反斜杠转义特殊字符，然后才能将程序集限定名称传递给 GetType 方法。例如，如果类型命名为 Strange]Type，则必须在方括号前添加转义字符，如下所示：Strange\]Type。 某些字符在程序集限定的名称中具有特殊含义。如果简单类型名称中包含这些字符，则在简单名称作为程序集限定名称一部分的情况下，这些字符将导致分析错误。为了避免出现分析错误，您必须用反斜杠转义特殊字符，然后才能将程序集限定名称传递给 GetType 方法。例如，如果类型命名为 Strange]Type，则必须在方括号前添加转义字符，如下所示：Strange\]Type。 某些字符在程序集限定的名称中具有特殊含义。如果简单类型名称中包含这些字符，则在简单名称作为程序集限定名称一部分的情况下，这些字符将导致分析错误。为了避免出现分析错误，您必须用反斜杠转义特殊字符，然后才能将程序集限定名称传递给 GetType 方法。例如，如果类型命名为 Strange]Type，则必须在方括号前添加转义字符，如下所示：Strange\]Type。

说明 说明

不能在 Visual Basic 或 C# 中创建具有此类特殊字符的名称，但可以通过使用 Microsoft 中间语言 (MSIL) 或者通过发出动态程序集来创建。

下表显示了类型名称的特殊字符。

字符 | 含义
,（逗号） | 程序集限定名称的分隔符。
[]（方括号） | 作为后缀对，表示数组类型；作为分隔符，将泛型参数列表和程序集限定名引起来。
&(“and”符) | 作为后缀，表示类型为引用类型。
*（星号） | 作为后缀，表示类型为指针类型。
+（加号） | 嵌套类型的分隔符。
\（反斜杠） | 转义符。

属性（如 AssemblyQualifiedName）返回正确转义的字符串。您必须向 GetType 方法传递正确转义的字符串。接下来，GetType 方法将转义名称正确传递给 typeResolver 和默认类型解析方法。如果需要将某名称与 typeResolver 中未转义的名称进行比较，则必须移除转义字符。 属性（如 AssemblyQualifiedName）返回正确转义的字符串。您必须向 GetType 方法传递正确转义的字符串。接下来，GetType 方法将转义名称正确传递给 typeResolver 和默认类型解析方法。如果需要将某名称与 typeResolver 中未转义的名称进行比较，则必须移除转义字符。 属性（如 AssemblyQualifiedName）返回正确转义的字符串。您必须向 GetType 方法传递正确转义的字符串。接下来，GetType 方法将转义名称正确传递给 typeResolver 和默认类型解析方法。如果需要将某名称与 typeResolver 中未转义的名称进行比较，则必须移除转义字符。 属性（如 AssemblyQualifiedName）返回正确转义的字符串。您必须向 GetType 方法传递正确转义的字符串。接下来，GetType 方法将转义名称正确传递给 typeResolver 和默认类型解析方法。如果需要将某名称与 typeResolver 中未转义的名称进行比较，则必须移除转义字符。

返回到用法说明。

混合名称解析

下表总结了 assemblyResolver 和 typeResolver 之间的交互以及默认名称解析（针对 typeName 中类型名称和程序集名称的所有组合）。

类型名称的内容。 | 程序集冲解析程序方法 | 类型解析程序方法 | 结果
类型，程序集 | null | null | 等效于调用 Type..::.GetType(String, Boolean, Boolean) 方法重载。
类型，程序集 | 已提供 | null | assemblyResolver 返回程序集，在无法解析程序集时返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果该程序集已解析，则使用 Assembly..::.GetType(String, Boolean, Boolean) 方法重载来从程序集加载该类型；否则，将不尝试解析该类型。 assemblyResolver 返回程序集，在无法解析程序集时返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果该程序集已解析，则使用 Assembly..::.GetType(String, Boolean, Boolean) 方法重载来从程序集加载该类型；否则，将不尝试解析该类型。
类型，程序集 | null | 已提供 | 等效于将程序集名称转换为 AssemblyName 对象，并调用 Assembly..::.Load(AssemblyName) 方法重载来获取程序集。如果该程序集已解析，则它传递给 typeResolver；否则，将不调用 typeResolver 且不进一步尝试解析该类型。 等效于将程序集名称转换为 AssemblyName 对象，并调用 Assembly..::.Load(AssemblyName) 方法重载来获取程序集。如果该程序集已解析，则它传递给 typeResolver；否则，将不调用 typeResolver 且不进一步尝试解析该类型。
类型，程序集 | 已提供 | 已提供 | assemblyResolver 返回程序集，在无法解析程序集时返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果该程序集已解析，则它传递给 typeResolver；否则，将不调用 typeResolver 且不进一步尝试解析该类型。 assemblyResolver 返回程序集，在无法解析程序集时返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。如果该程序集已解析，则它传递给 typeResolver；否则，将不调用 typeResolver 且不进一步尝试解析该类型。
type | null，已提供 | null | 等效于调用 Type..::.GetType(String, Boolean, Boolean) 方法重载。由于未提供程序集名称，因此只搜索 Mscorlib.dll 和当前正在执行的程序集。如果提供了 assemblyResolver，则忽略它。 等效于调用 Type..::.GetType(String, Boolean, Boolean) 方法重载。由于未提供程序集名称，因此只搜索 Mscorlib.dll 和当前正在执行的程序集。如果提供了 assemblyResolver，则忽略它。 等效于调用 Type..::.GetType(String, Boolean, Boolean) 方法重载。由于未提供程序集名称，因此只搜索 Mscorlib.dll 和当前正在执行的程序集。如果提供了 assemblyResolver，则忽略它。
type | null，已提供 | 已提供 | 系统调用了 typeResolver，并为程序集传递了 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。typeResolver 可以提供任何程序集（包括它专门加载的程序集）中的类型。如果提供了 assemblyResolver，则忽略它。 系统调用了 typeResolver，并为程序集传递了 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。typeResolver 可以提供任何程序集（包括它专门加载的程序集）中的类型。如果提供了 assemblyResolver，则忽略它。 系统调用了 typeResolver，并为程序集传递了 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。typeResolver 可以提供任何程序集（包括它专门加载的程序集）中的类型。如果提供了 assemblyResolver，则忽略它。
assembly | null，已提供 | null，已提供 | 引发 FileLoadException，因为程序集名称会当作程序集限定的类型名称一样进行分析。这将导致无效的程序集名称。 引发 FileLoadException，因为程序集名称会当作程序集限定的类型名称一样进行分析。这将导致无效的程序集名称。

返回到：用法说明、解析程序集、解析类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetType 重载
System 命名空间


Type ..::.GetTypeArray 方法

Type
.
.
::
.
GetTypeArray 方法
Type 类

获取指定数组中对象的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeArray ( _
    args As Object() _
) As Type()
public static Type[] GetTypeArray(
    Object[] args
)
public:
static array<Type^>^ GetTypeArray(
    array<Object^>^ args
)
static member GetTypeArray :
        args:Object[] -> Type[]

参数

args
类型：
array<
System Object
>
[]
()
[]

要确定其类型的对象数组。

返回值

类型：
array<
System Type
>
[]
()
[]

表示 args 中相应元素的类型的 Type 对象数组。
异常 | 条件
ArgumentNullException | args 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TargetInvocationException | 类初始值设定项被调用，并且其中至少有一个引发异常。

下面的代码示例演示如何使用 GetTypeArray 方法列出一个数组的元素类型。

Dim myObject(2) As Object
myObject(0) = 66
myObject(1) = "puri"
myObject(2) = 33.33
' Get the array of 'Type' class objects.
Dim myTypeArray As Type() = Type.GetTypeArray(myObject)
Console.WriteLine("Full names of the 'Type' objects in the array are:")
Dim h As Integer
For h = 0 To myTypeArray.Length - 1
   Console.WriteLine(myTypeArray(h).FullName)
Next h

Object[] myObject = new Object[3];
myObject[0] = 66;
myObject[1] = "puri";
myObject[2] = 33.33;
// Get the array of 'Type' class objects.
Type[] myTypeArray = Type.GetTypeArray(myObject);
Console.WriteLine("Full names of the 'Type' objects in the array are:");
for(int h = 0; h < myTypeArray.Length ; h++)
{
    Console.WriteLine(myTypeArray[h].FullName);
}

array<Object^>^myObject = gcnew array<Object^>(3);
myObject[ 0 ] = 66;
myObject[ 1 ] = "puri";
myObject[ 2 ] = 33.33;

// Get the array of 'Type' class objects.
array<Type^>^myTypeArray = Type::GetTypeArray( myObject );
Console::WriteLine( "Full names of the 'Type' objects in the array are:" );
for ( int h = 0; h < myTypeArray->Length; h++ )
{
   Console::WriteLine( myTypeArray[ h ]->FullName );

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetTypeCode 方法

Type
.
.
::
.
GetTypeCode 方法
Type 类

获取指定 Type 的基础类型代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeCode ( _
    type As Type _
) As TypeCode
public static TypeCode GetTypeCode(
    Type type
)
public:
static TypeCode GetTypeCode(
    Type^ type
)
static member GetTypeCode :
        type:Type -> TypeCode

参数

type
类型： System Type
要获取其基础类型代码的 Type。

返回值

类型： System TypeCode
基础类型的代码。

当您从 Type 继承时，可通过重写 GetTypeCodeImpl 方法来更改此方法的行为。

下面的代码示例说明了如何使用 TypeCode 枚举。在 WriteObjectInfo 方法内的决策块中，将检查 Object 参数的 TypeCode，并向控制台写入适当的消息。 下面的代码示例说明了如何使用 TypeCode 枚举。在 WriteObjectInfo 方法内的决策块中，将检查 Object 参数的 TypeCode，并向控制台写入适当的消息。

Sub WriteObjectInfo(ByVal testObject As Object)
    Dim typeCode As TypeCode = Type.GetTypeCode(testObject.GetType())

    Select Case typeCode
        Case typeCode.Boolean
            Console.WriteLine("Boolean: {0}", testObject)

        Case typeCode.Double
            Console.WriteLine("Double: {0}", testObject)

        Case Else
            Console.WriteLine("{0}: {1}", typeCode.ToString(), testObject)
    End Select
End Sub

static void WriteObjectInfo(object testObject)
{
    TypeCode    typeCode = Type.GetTypeCode( testObject.GetType() );

    switch( typeCode )
    {
        case TypeCode.Boolean:
            Console.WriteLine("Boolean: {0}", testObject);
            break;

        case TypeCode.Double:
            Console.WriteLine("Double: {0}", testObject);
            break;

        default:
            Console.WriteLine("{0}: {1}", typeCode.ToString(), testObject);
            break;
    }
}

void WriteObjectInfo( Object^ testObject )
{
   TypeCode typeCode = Type::GetTypeCode( testObject->GetType() );
   switch ( typeCode )
   {
      case TypeCode::Boolean:
         Console::WriteLine( "Boolean: {0}", testObject );
         break;

      case TypeCode::Double:
         Console::WriteLine( "Double: {0}", testObject );
         break;

      default:
         Console::WriteLine( "{0}: {1}", typeCode, testObject );
         break;
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeCode
GetTypeCodeImpl


Type ..::.GetTypeCodeImpl 方法

Type
.
.
::
.
GetTypeCodeImpl 方法
Type 类

返回指定的 Type 的基础类型代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function GetTypeCodeImpl As TypeCode
protected virtual TypeCode GetTypeCodeImpl()
protected:
virtual TypeCode GetTypeCodeImpl()
abstract GetTypeCodeImpl : unit -> TypeCode
override GetTypeCodeImpl : unit -> TypeCode

返回值

类型： System TypeCode
基础类型的代码。

此方法提供 GetTypeCode 方法的实现。当您从 Type 继承时，可以重写此方法以提供您自己的 GetTypeCode 实现。 此方法提供 GetTypeCode 方法的实现。当您从 Type 继承时，可以重写此方法以提供您自己的 GetTypeCode 实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
TypeCode
GetTypeCode


Type ..::.GetTypeFromCLSID 方法

Type
.
.
::
.
GetTypeFromCLSID 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取与指定类标识符 (CLSID) 关联的类型。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetTypeFromCLSID 方法 (Guid)

Type
.
.
::
.
GetTypeFromCLSID 方法 (Guid)
Type 类

获取与指定类标识符 (CLSID) 关联的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeFromCLSID ( _
    clsid As Guid _
) As Type
public static Type GetTypeFromCLSID(
    Guid clsid
)
public:
static Type^ GetTypeFromCLSID(
    Guid clsid
)
static member GetTypeFromCLSID :
        clsid:Guid -> Type

参数

clsid
类型： System Guid
要获取的类型的 CLSID。

返回值

类型： System Type
System.__ComObject，无论 CLSID 是否有效。

下面的示例通过将 clsid 参数传递到 Guid 结构的构造函数来检索 GUID，然后检索与指定的类标识符 (CLSID) 相关联的类型。

Imports System
Class MyGetTypeFromCLSID
    Public Shared Sub Main()
        ' Create  a GUID object by passing the clsid parameter.
        Dim myGuid1 As New Guid("1AE77DA4-1063-4ab3-BCD2-085B001EFB97")
        ' Get the type associated with the CLSID.
        Dim myType1 As Type = Type.GetTypeFromCLSID(myGuid1)
        ' Display the GUID.
        Console.WriteLine(myType1.GUID.ToString())
        ' Convert the GUID to a string.
        Console.WriteLine(myType1.ToString())
    End Sub 'Main
End Class 'MyGetTypeFromCLSID

using System;
class MyGetTypeFromCLSID
{
    public static void Main()
    {
        // Create a GUID object by passing the clsid parameter.
        Guid myGuid1 = new Guid("1AE77DA4-1063-4ab3-BCD2-085B001EFB97");
        // Get the type object associated with the CLSID.
        Type myType1 = Type.GetTypeFromCLSID(myGuid1);
        // Display the GUID.
        Console.WriteLine(myType1.GUID);
        // Convert the GUID to a string.
        Console.WriteLine(myType1.ToString());
    }
}

using namespace System;
int main()
{

   // Create a GUID object by passing the clsid parameter.
   Guid myGuid1 = Guid("1AE77DA4-1063-4ab3-BCD2-085B001EFB97");

   // Get the type object associated with the CLSID.
   Type^ myType1 = Type::GetTypeFromCLSID( myGuid1 );

   // Display the GUID.
   Console::WriteLine( myType1->GUID );

   // Convert the GUID to a String*.
   Console::WriteLine( myType1 );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetTypeFromCLSID 重载
System 命名空间


Type ..::.GetTypeFromCLSID 方法 (Guid, Boolean)

Type
.
.
::
.
GetTypeFromCLSID 方法 (Guid, Boolean)
Type 类

获取与指定类标识符 (CLSID) 关联的类型，指定在加载该类型时如果发生错误是否引发异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeFromCLSID ( _
    clsid As Guid, _
    throwOnError As Boolean _
) As Type
public static Type GetTypeFromCLSID(
    Guid clsid,
    bool throwOnError
)
public:
static Type^ GetTypeFromCLSID(
    Guid clsid,
    bool throwOnError
)
static member GetTypeFromCLSID :
        clsid:Guid *
        throwOnError:bool -> Type

参数

clsid
类型： System Guid
要获取的类型的 CLSID。
throwOnError
类型： System Boolean
true 将引发所发生的任何异常。
- 或 -
false 将忽略所发生的任何异常。

返回值

类型： System Type
System.__ComObject，无论 CLSID 是否有效。

OutOfMemoryException 等异常将在为 throwOnError 指定 true 时引发，但它对于未注册的 CLSID 不会失败。

下面的示例从本地主机检索与 CLSID 关联的类型，并指定在加载类型时如果出现错误是否引发异常。

Imports System
Class MyGetTypeFromCLSIDSample
    Public Shared Sub Main()
        Try
            ' Create a GUID.
            Dim myGuid1 As New Guid("1DCD0710-0B41-11D3-A565-00C04F8EF6E3")
            ' Get the type associated with the CLSID
            ' and specify whether to throw an exception if an error occurs
            ' while loading the type.
            Dim myType1 As Type = Type.GetTypeFromCLSID(myGuid1, True)
            Console.WriteLine("The GUID associated with myType1 is {0}.", myType1.GUID.ToString())
            Console.WriteLine("The type of the GUID is {0}.", myType1.ToString())

using System;
class MyGetTypeFromCLSIDSample
{
    public static void Main()
    {
        try
        {
            // Create a GUID.
            Guid myGuid1 = new Guid("1DCD0710-0B41-11D3-A565-00C04F8EF6E3");
            // Get the type associated with the CLSID
            // and specify whether to throw an exception if an error occurs
            // while loading the type.
            Type myType1 =Type.GetTypeFromCLSID(myGuid1, true);
            Console.WriteLine("The GUID associated with myType1 is {0}.", myType1.GUID);
            Console.WriteLine("The type of the GUID is {0}.", myType1.ToString());

using namespace System;

int main()
{
   try
   {
      // Create a GUID.
      Guid myGuid1 = Guid("1DCD0710-0B41-11D3-A565-00C04F8EF6E3");
      // Get the type associated with the CLSID
      // and specify whether to throw an exception if an error occurs
      // while loading the type.
      Type^ myType1 = Type::GetTypeFromCLSID( myGuid1, true );
      Console::WriteLine( "The GUID associated with myType1 is {0}.", myType1->GUID );
      Console::WriteLine( "The type of the GUID is {0}.", myType1 );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetTypeFromCLSID 重载
System 命名空间


Type ..::.GetTypeFromCLSID 方法 (Guid, String)

Type
.
.
::
.
GetTypeFromCLSID 方法 (Guid, String)
Type 类

从指定服务器获取与指定类标识符 (CLSID) 关联的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeFromCLSID ( _
    clsid As Guid, _
    server As String _
) As Type
public static Type GetTypeFromCLSID(
    Guid clsid,
    string server
)
public:
static Type^ GetTypeFromCLSID(
    Guid clsid,
    String^ server
)
static member GetTypeFromCLSID :
        clsid:Guid *
        server:string -> Type

参数

clsid
类型： System Guid
要获取的类型的 CLSID。
server
类型： System String
用于从中加载该类型的服务器。如果服务器名称为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法会自动恢复到本地计算机上。 用于从中加载该类型的服务器。如果服务器名称为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法会自动恢复到本地计算机上。

返回值

类型： System Type
System.__ComObject，无论 CLSID 是否有效。

下面的示例从本地主机检索与 CLSID 关联的类型。

' Create a GUID.
Dim myGuid2 As New Guid("00020812-0000-0000-c000-000000000046")
' Get the type associated with the CLSID
' from the local host.
Dim myType2 As Type = Type.GetTypeFromCLSID(myGuid2, ".")
Console.WriteLine("The GUID associated with myType2 is {0}.", myType2.GUID.ToString())
Console.WriteLine("The type of the GUID is {0}.", myType2.ToString())

// Create a GUID.
Guid myGuid2 = new Guid("00020812-0000-0000-c000-000000000046");
// Get the type associated with the CLSID
// from the local host.
Type myType2 =Type.GetTypeFromCLSID(myGuid2, ".");
Console.WriteLine("The GUID associated with myType2 is {0}.", myType2.GUID);
Console.WriteLine("The type of the GUID is {0}.", myType2.ToString());

// Create a GUID.
Guid myGuid2 = Guid("00020812-0000-0000-c000-000000000046");
// Get the type associated with the CLSID
// from the local host.
Type^ myType2 = Type::GetTypeFromCLSID( myGuid2, "." );
Console::WriteLine( "The GUID associated with myType2 is {0}.", myType2->GUID );
Console::WriteLine( "The type of the GUID is {0}.", myType2 );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetTypeFromCLSID 重载
System 命名空间


Type ..::.GetTypeFromCLSID 方法 (Guid, String, Boolean)

Type
.
.
::
.
GetTypeFromCLSID 方法 (Guid, String, Boolean)
Type 类

从指定服务器获取与指定类标识符 (CLSID) 关联的类型，指定在加载该类型时如果发生错误是否引发异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeFromCLSID ( _
    clsid As Guid, _
    server As String, _
    throwOnError As Boolean _
) As Type
public static Type GetTypeFromCLSID(
    Guid clsid,
    string server,
    bool throwOnError
)
public:
static Type^ GetTypeFromCLSID(
    Guid clsid,
    String^ server,
    bool throwOnError
)
static member GetTypeFromCLSID :
        clsid:Guid *
        server:string *
        throwOnError:bool -> Type

参数

clsid
类型： System Guid
要获取的类型的 CLSID。
server
类型： System String
用于从中加载该类型的服务器。如果服务器名称为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法会自动恢复到本地计算机上。 用于从中加载该类型的服务器。如果服务器名称为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法会自动恢复到本地计算机上。
throwOnError
类型： System Boolean
true 将引发所发生的任何异常。
- 或 -
false 将忽略所发生的任何异常。

返回值

类型： System Type
System.__ComObject，无论 CLSID 是否有效。

OutOfMemoryException 等异常将在为 throwOnError 指定 true 时引发，但它对于未注册的 CLSID 不会失败。

下面的示例从本地主机检索与 CLSID 关联的类型，并指定在加载类型时如果出现错误是否引发异常。

' Create a GUID.
Dim myGuid3 As New Guid("8D8529D3-625D-4496-8354-3DAD630ECC1B")
' Get the type associated with the CLSID
' from the local host and specify whether to throw an exception if an
' error occurs while loading the type.
Dim myType3 As Type = Type.GetTypeFromCLSID(myGuid3, ".", True)
Console.WriteLine("The GUID associated with myType3 is {0}.", myType3.GUID.ToString())
Console.WriteLine("The type of the GUID is {0}.", myType3.ToString())

// Create a GUID.
Guid myGuid3 = new Guid("8D8529D3-625D-4496-8354-3DAD630ECC1B");
// Get the type associated with the CLSID
// from the local host and specify whether to throw an exception if an
// error occurs while loading the type.
Type myType3 =Type.GetTypeFromCLSID(myGuid3, ".", true);
Console.WriteLine("The GUID associated with myType3 is {0}.", myType3.GUID);
Console.WriteLine("The type of the GUID is {0}.", myType3.ToString());

// Create a GUID.
Guid myGuid3 = Guid("8D8529D3-625D-4496-8354-3DAD630ECC1B");
// Get the type associated with the CLSID
// from the local host and specify whether to throw an exception if an
// error occurs while loading the type.
Type^ myType3 = Type::GetTypeFromCLSID( myGuid3, ".", true );
Console::WriteLine( "The GUID associated with myType3 is {0}.", myType3->GUID );
Console::WriteLine( "The type of the GUID is {0}.", myType3 );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetTypeFromCLSID 重载
System 命名空间


Type ..::.GetTypeFromHandle 方法

Type
.
.
::
.
GetTypeFromHandle 方法
Type 类

获取由指定类型句柄引用的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeFromHandle ( _
    handle As RuntimeTypeHandle _
) As Type
public static Type GetTypeFromHandle(
    RuntimeTypeHandle handle
)
public:
static Type^ GetTypeFromHandle(
    RuntimeTypeHandle handle
)
static member GetTypeFromHandle :
        handle:RuntimeTypeHandle -> Type

参数

handle
类型： System RuntimeTypeHandle
引用类型的 RuntimeTypeHandle 对象。

返回值

类型： System Type
如果 handle 的 Value 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为由指定的 RuntimeTypeHandle 引用的类型，或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
TargetInvocationException | 调用类初始值设定项并引发异常。

这些句柄仅在获取它们的应用程序域中有效。

下面的示例使用 GetTypeFromHandle 方法从由 GetTypeHandle 方法提供的 RuntimeTypeHandle 获取 Type 对象。

   Dim myClass1 As New MyClass1()
   ' Get the type referenced by the specified type handle.
   Dim myClass1Type As Type = Type.GetTypeFromHandle(Type.GetTypeHandle(MyClass1))
   Console.WriteLine(("The Names of the Attributes :" + myClass1Type.Attributes.ToString()))
End Sub 'Main

        MyClass1 myClass1 = new MyClass1();
         // Get the type referenced by the specified type handle.
        Type myClass1Type = Type.GetTypeFromHandle(Type.GetTypeHandle(myClass1));
        Console.WriteLine("The Names of the Attributes :"+myClass1Type.Attributes);

MyClass1^ myClass1 = gcnew MyClass1;
// Get the type referenced by the specified type handle.
Type^ myClass1Type = Type::GetTypeFromHandle( Type::GetTypeHandle( myClass1 ) );
Console::WriteLine( "The Names of the Attributes : {0}", myClass1Type->Attributes );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
RuntimeTypeHandle
TypeHandle
GetTypeHandle


Type ..::.GetTypeFromProgID 方法

Type
.
.
::
.
GetTypeFromProgID 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

获取与指定程序标识符 (ProgID) 关联的类型。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.GetTypeFromProgID 方法 (String)

Type
.
.
::
.
GetTypeFromProgID 方法 (String)
Type 类

获取与指定程序标识符 (ProgID) 关联的类型，如果在加载 Type 时遇到错误，则返回空值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeFromProgID ( _
    progID As String _
) As Type
public static Type GetTypeFromProgID(
    string progID
)
public:
static Type^ GetTypeFromProgID(
    String^ progID
)
static member GetTypeFromProgID :
        progID:string -> Type

参数

progID
类型： System String
要获取的类型的 ProgID。

返回值

类型： System Type
如果 progID 是注册表中的有效项，并且有与之关联的类型，则为与指定 ProgID 关联的类型；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentException | progID 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法是为 COM 支持提供的。Microsoft .NET Framework 不使用 ProgID，因为 ProgID 已被命名空间的概念所取代。 此方法是为 COM 支持提供的。Microsoft .NET Framework 不使用 ProgID，因为 ProgID 已被命名空间的概念所取代。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetTypeFromProgID 重载
System 命名空间
GetProgIdForType


Type ..::.GetTypeFromProgID 方法 (String, Boolean)

Type
.
.
::
.
GetTypeFromProgID 方法 (String, Boolean)
Type 类

获取与指定程序标识符 (ProgID) 关联的类型，指定如果在加载该类型时发生错误是否引发异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeFromProgID ( _
    progID As String, _
    throwOnError As Boolean _
) As Type
public static Type GetTypeFromProgID(
    string progID,
    bool throwOnError
)
public:
static Type^ GetTypeFromProgID(
    String^ progID,
    bool throwOnError
)
static member GetTypeFromProgID :
        progID:string *
        throwOnError:bool -> Type

参数

progID
类型： System String
要获取的类型的 ProgID。
throwOnError
类型： System Boolean
true 将引发所发生的任何异常。
- 或 -
false 将忽略所发生的任何异常。

返回值

类型： System Type
如果 progID 是注册表中的有效项且有与之关联的类型，则为与指定程序标识符 (ProgID) 关联的类型；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentException | progID 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
COMException | 指定的 ProgID 没有注册。

此方法是为 COM 支持提供的。Microsoft .NET Framework 不使用程序 ID，因为程序 ID 已被命名空间的概念所取代。 此方法是为 COM 支持提供的。Microsoft .NET Framework 不使用程序 ID，因为程序 ID 已被命名空间的概念所取代。

下面的示例通过传递 ProgID、指定 ProgID 无效时是否引发异常来检索类型。该示例然后显示与该 ProgID 相关的 ClassID，以及任何适用的异常消息。 下面的示例通过传递 ProgID、指定 ProgID 无效时是否引发异常来检索类型。该示例然后显示与该 ProgID 相关的 ClassID，以及任何适用的异常消息。

Imports System
Class MainApp
    Public Shared Sub Main()
        Try
            ' Use the ProgID HKEY_CLASSES_ROOT\DirControl.DirList.1.
            Dim myString1 As String = "DIRECT.ddPalette.3"
            ' Use a nonexistent ProgID WrongProgID.
            Dim myString2 As String = "WrongProgID"
            ' Make a call to the method to get the type information of the given ProgID.
            Dim myType1 As Type = Type.GetTypeFromProgID(myString1, True)
            Console.WriteLine("GUID for ProgID DirControl.DirList.1 is {0}.", myType1.GUID.ToString())
            ' Throw an exception because the ProgID is invalid and the throwOnError
            ' parameter is set to True.
            Dim myType2 As Type = Type.GetTypeFromProgID(myString2, True)
        Catch e As Exception
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Source: {0}", e.Source.ToString())
            Console.WriteLine("Message: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MainApp

using System;
class MainApp
{
    public static void Main()
    {
        try
        {
            // Use the ProgID HKEY_CLASSES_ROOT\DirControl.DirList.1.
            string myString1 ="DIRECT.ddPalette.3";
            // Use a nonexistent ProgID WrongProgID.
            string myString2 ="WrongProgID";
            // Make a call to the method to get the type information of the given ProgID.
            Type myType1 =Type.GetTypeFromProgID(myString1,true);
            Console.WriteLine("GUID for ProgID DirControl.DirList.1 is {0}.", myType1.GUID);
            // Throw an exception because the ProgID is invalid and the throwOnError
            // parameter is set to True.
            Type myType2 =Type.GetTypeFromProgID(myString2,true);
        }
        catch(Exception e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Source: {0}", e.Source);
            Console.WriteLine("Message: {0}", e.Message);
        }
    }
}

using namespace System;
int main()
{
   try
   {

      // Use the ProgID HKEY_CLASSES_ROOT\DirControl.DirList.1.
      String^ myString1 = "DIRECT.ddPalette.3";

      // Use a nonexistent ProgID WrongProgID.
      String^ myString2 = "WrongProgID";

      // Make a call to the method to get the type information of the given ProgID.
      Type^ myType1 = Type::GetTypeFromProgID( myString1, true );
      Console::WriteLine( "GUID for ProgID DirControl.DirList.1 is {0}.", myType1->GUID );

      // Throw an exception because the ProgID is invalid and the throwOnError
      // parameter is set to True.
      Type^ myType2 = Type::GetTypeFromProgID( myString2, true );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }

}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetTypeFromProgID 重载
System 命名空间
GetProgIdForType


Type ..::.GetTypeFromProgID 方法 (String, String)

Type
.
.
::
.
GetTypeFromProgID 方法 (String, String)
Type 类

从指定服务器获取与指定程序标识符 (progID) 关联的类型，如果在加载该类型时遇到错误则返回空值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeFromProgID ( _
    progID As String, _
    server As String _
) As Type
public static Type GetTypeFromProgID(
    string progID,
    string server
)
public:
static Type^ GetTypeFromProgID(
    String^ progID,
    String^ server
)
static member GetTypeFromProgID :
        progID:string *
        server:string -> Type

参数

progID
类型： System String
要获取的类型的 ProgID。
server
类型： System String
用于从中加载该类型的服务器。如果服务器名称为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法会自动恢复到本地计算机上。 用于从中加载该类型的服务器。如果服务器名称为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法会自动恢复到本地计算机上。

返回值

类型： System Type
如果 progID 是注册表中的有效项且有与之关联的类型，则为与指定程序标识符 (ProgID) 关联的类型；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentException | prodID 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法是为 COM 支持提供的。Microsoft .NET Framework 不使用程序 ID，因为程序 ID 已被命名空间的概念所取代。 此方法是为 COM 支持提供的。Microsoft .NET Framework 不使用程序 ID，因为程序 ID 已被命名空间的概念所取代。

下面的示例通过传递 ProgID 和服务器名来检索类型。然后，该示例显示与该 ProgID 相关的 ClassID，或者在 ProgID 或服务器名称无效时引发异常。 下面的示例通过传递 ProgID 和服务器名来检索类型。然后，该示例显示与该 ProgID 相关的 ClassID，或者在 ProgID 或服务器名称无效时引发异常。

Imports System
Class MainApp
    Public Shared Sub Main()
        Try
            ' Use ProgID localhost\HKEY_CLASSES_ROOT\DirControl.DirList.1.
            Dim theProgramID As String = "DirControl.DirList.1"
            ' Use Server name localhost.
            Dim theServer As String = "localhost"
            ' Make a call to the method to get the type information for the given ProgID.
            Dim myType As Type = Type.GetTypeFromProgID(theProgramID, theServer)
            If myType Is Nothing Then
                Throw New Exception("Invalid ProgID or server.")
            End If
            Console.WriteLine("GUID for ProgID DirControl.DirList.1 is {0}.", myType.GUID.ToString())
        Catch e As Exception
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Source: {0}.", e.Source.ToString())
            Console.WriteLine("Message: {0}.", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MainApp

using System;
class MainApp
{
    public static void Main()
    {
        try
        {
            // Use the ProgID localhost\HKEY_CLASSES_ROOT\DirControl.DirList.1.
            string theProgramID ="DirControl.DirList.1";
            // Use the server name localhost.
            string theServer="localhost";
            // Make a call to the method to get the type information for the given ProgID.
            Type myType =Type.GetTypeFromProgID(theProgramID,theServer);
            if(myType==null)
            {
                throw new Exception("Invalid ProgID or Server.");
            }
            Console.WriteLine("GUID for ProgID DirControl.DirList.1 is {0}.", myType.GUID);
        }
        catch(Exception e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Source: {0}" , e.Source);
            Console.WriteLine("Message: {0}" , e.Message);
        }
    }
}

using namespace System;
int main()
{
   try
   {

      // Use the ProgID localhost\HKEY_CLASSES_ROOT\DirControl::DirList.1.
      String^ theProgramID = "DirControl.DirList.1";

      // Use the server name localhost.
      String^ theServer = "localhost";

      // Make a call to the method to get the type information for the given ProgID.
      Type^ myType = Type::GetTypeFromProgID( theProgramID, theServer );
      if ( myType == nullptr )
      {
         throw gcnew Exception( "Invalid ProgID or Server." );
      }
      Console::WriteLine( "GUID for ProgID DirControl.DirList.1 is {0}.", myType->GUID );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }

}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetTypeFromProgID 重载
System 命名空间
GetProgIdForType


Type ..::.GetTypeFromProgID 方法 (String, String, Boolean)

Type
.
.
::
.
GetTypeFromProgID 方法 (String, String, Boolean)
Type 类

从指定服务器获取与指定程序标识符 (progID) 关联的类型，指定如果在加载该类型时发生错误是否引发异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeFromProgID ( _
    progID As String, _
    server As String, _
    throwOnError As Boolean _
) As Type
public static Type GetTypeFromProgID(
    string progID,
    string server,
    bool throwOnError
)
public:
static Type^ GetTypeFromProgID(
    String^ progID,
    String^ server,
    bool throwOnError
)
static member GetTypeFromProgID :
        progID:string *
        server:string *
        throwOnError:bool -> Type

参数

progID
类型： System String
要获取的 Type 的 progID。
server
类型： System String
用于从中加载该类型的服务器。如果服务器名称为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法会自动恢复到本地计算机上。 用于从中加载该类型的服务器。如果服务器名称为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法会自动恢复到本地计算机上。
throwOnError
类型： System Boolean
true 将引发所发生的任何异常。
- 或 -
false 将忽略所发生的任何异常。

返回值

类型： System Type
如果 progID 是注册表中的有效项且有与之关联的类型，则为与指定程序标识符 (progID) 关联的 Type；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentException | progID 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
COMException | 指定的 ProgID 没有注册。

此方法是为 COM 支持提供的。Microsoft .NET Framework 不使用程序 ID，因为程序 ID 已被命名空间的概念所取代。 此方法是为 COM 支持提供的。Microsoft .NET Framework 不使用程序 ID，因为程序 ID 已被命名空间的概念所取代。

下面的示例通过传递 ProgID 和服务器名来检索类型。然后，该示例显示与 ProgID 相关的 ClassID，指定 ProgID 或服务器名称无效时是否引发异常。 下面的示例通过传递 ProgID 和服务器名来检索类型。然后，该示例显示与 ProgID 相关的 ClassID，指定 ProgID 或服务器名称无效时是否引发异常。

Imports System
Class MainApp
    Public Shared Sub Main()
        Try
            ' Use Server localhost.
            Dim theServer As String = "localhost"
            ' Use  ProgID HKEY_CLASSES_ROOT\DirControl.DirList.1.
            Dim myString1 As String = "DirControl.DirList.1"
            ' Use a wrong ProgID WrongProgID.
            Dim myString2 As String = "WrongProgID"
            ' Make a call to the method to get the type information for the given ProgID.
            Dim myType1 As Type = Type.GetTypeFromProgID(myString1, theServer, True)
            Console.WriteLine("GUID for ProgID DirControl.DirList.1 is {0}.", myType1.GUID.ToString())
            ' Throw an exception because the ProgID is invalid and the throwOnError
            ' parameter is set to True.
            Dim myType2 As Type = Type.GetTypeFromProgID(myString2, theServer, True)
        Catch e As Exception
            Console.WriteLine("An exception occurred. The ProgID is wrong.")
            Console.WriteLine("Source: {0}", e.Source.ToString())
            Console.WriteLine("Message: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MainApp

using System;
class MainApp
{
    public static void Main()
    {
        try
        {
            // Use server localhost.
            string theServer="localhost";
            // Use  ProgID HKEY_CLASSES_ROOT\DirControl.DirList.1.
            string myString1 ="DirControl.DirList.1";
            // Use a wrong ProgID WrongProgID.
            string myString2 ="WrongProgID";
            // Make a call to the method to get the type information for the given ProgID.
            Type myType1 =Type.GetTypeFromProgID(myString1,theServer,true);
            Console.WriteLine("GUID for ProgID DirControl.DirList.1 is {0}.", myType1.GUID);
            // Throw an exception because the ProgID is invalid and the throwOnError
            // parameter is set to True.
            Type myType2 =Type.GetTypeFromProgID(myString2, theServer, true);
        }
        catch(Exception e)
        {
            Console.WriteLine("An exception occurred. The ProgID is wrong.");
            Console.WriteLine("Source: {0}" , e.Source);
            Console.WriteLine("Message: {0}" , e.Message);
        }
    }
}

using namespace System;
int main()
{
   try
   {

      // Use server localhost.
      String^ theServer = "localhost";

      // Use  ProgID HKEY_CLASSES_ROOT\DirControl.DirList.1.
      String^ myString1 = "DirControl.DirList.1";

      // Use a wrong ProgID WrongProgID.
      String^ myString2 = "WrongProgID";

      // Make a call to the method to get the type information for the given ProgID.
      Type^ myType1 = Type::GetTypeFromProgID( myString1, theServer, true );
      Console::WriteLine( "GUID for ProgID DirControl.DirList.1 is {0}.", myType1->GUID );

      // Throw an exception because the ProgID is invalid and the throwOnError
      // parameter is set to True.
      Type^ myType2 = Type::GetTypeFromProgID( myString2, theServer, true );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "An exception occurred. The ProgID is wrong." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }

}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
GetTypeFromProgID 重载
System 命名空间
GetProgIdForType
TypeLoadException


Type ..::.GetTypeHandle 方法

Type
.
.
::
.
GetTypeHandle 方法
Type 类

获取指定对象的 Type 的句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTypeHandle ( _
    o As Object _
) As RuntimeTypeHandle
public static RuntimeTypeHandle GetTypeHandle(
    Object o
)
public:
static RuntimeTypeHandle GetTypeHandle(
    Object^ o
)
static member GetTypeHandle :
        o:Object -> RuntimeTypeHandle

参数

o
类型： System Object
要获取类型句柄的 Object。

返回值

类型： System RuntimeTypeHandle
指定 Object 的 Type 的句柄。
异常 | 条件
ArgumentNullException | o 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

这些句柄仅在获取它们的应用程序域中有效。

下面的示例定义类 MyClass1，获取它的实例，并检索该对象的运行时句柄。

Imports System
Imports System.Reflection

Public Class MyClass1
    Private x As Integer = 0

    Public Function MyMethod() As Integer
        Return x
    End Function 'MyMethod
End Class

Public Class MyClass2

    Public Shared Sub Main()
        Dim myClass1 As New MyClass1()

        ' Get the RuntimeTypeHandle from an object.
        Dim myRTHFromObject As RuntimeTypeHandle = Type.GetTypeHandle(myClass1)
        ' Get the RuntimeTypeHandle from a type.
        Dim myRTHFromType As RuntimeTypeHandle = GetType(MyClass1).TypeHandle

        Console.WriteLine(vbLf & "myRTHFromObject.Value:  {0}", _
            myRTHFromObject.Value)
        Console.WriteLine("myRTHFromObject.GetType():  {0}", _
            myRTHFromObject.GetType())
        Console.WriteLine("Get the type back from the handle...")
        Console.WriteLine("Type.GetTypeFromHandle(myRTHFromObject):  {0}", _
            Type.GetTypeFromHandle(myRTHFromObject))

        Console.WriteLine(vbLf & "myRTHFromObject.Equals(myRTHFromType):  {0}", _
            myRTHFromObject.Equals(myRTHFromType))

        Console.WriteLine(vbLf & "myRTHFromType.Value:  {0}", _
            myRTHFromType.Value)
        Console.WriteLine("myRTHFromType.GetType():  {0}", _
            myRTHFromType.GetType())
        Console.WriteLine("Get the type back from the handle...")
        Console.WriteLine("Type.GetTypeFromHandle(myRTHFromType):  {0}", _
            Type.GetTypeFromHandle(myRTHFromType))
    End Sub
End Class

' This code example produces output similar to the following:
'
'myRTHFromObject.Value:  7549720
'myRTHFromObject.GetType():  System.RuntimeTypeHandle
'Get the type back from the handle...
'Type.GetTypeFromHandle(myRTHFromObject):  MyClass1
'
'myRTHFromObject.Equals(myRTHFromType):  True
'
'myRTHFromType.Value:  7549720
'myRTHFromType.GetType():  System.RuntimeTypeHandle
'Get the type back from the handle...
'Type.GetTypeFromHandle(myRTHFromType):  MyClass1

using System;
using System.Reflection;

public class MyClass1
{
    private int x=0;
    public int MyMethod()
    {
        return x;
    }
}

public class MyClass2
{
    public static void Main()
    {
        MyClass1 myClass1 = new MyClass1();

        // Get the RuntimeTypeHandle from an object.
        RuntimeTypeHandle myRTHFromObject = Type.GetTypeHandle(myClass1);
        // Get the RuntimeTypeHandle from a type.
        RuntimeTypeHandle myRTHFromType = typeof(MyClass1).TypeHandle;

        Console.WriteLine("\nmyRTHFromObject.Value:  {0}", myRTHFromObject.Value);
        Console.WriteLine("myRTHFromObject.GetType():  {0}", myRTHFromObject.GetType());
        Console.WriteLine("Get the type back from the handle...");
        Console.WriteLine("Type.GetTypeFromHandle(myRTHFromObject):  {0}",
            Type.GetTypeFromHandle(myRTHFromObject));

        Console.WriteLine("\nmyRTHFromObject.Equals(myRTHFromType):  {0}",
            myRTHFromObject.Equals(myRTHFromType));

        Console.WriteLine("\nmyRTHFromType.Value:  {0}", myRTHFromType.Value);
        Console.WriteLine("myRTHFromType.GetType():  {0}", myRTHFromType.GetType());
        Console.WriteLine("Get the type back from the handle...");
        Console.WriteLine("Type.GetTypeFromHandle(myRTHFromType):  {0}",
            Type.GetTypeFromHandle(myRTHFromType));
    }
}

/* This code example produces output similar to the following:

myRTHFromObject.Value:  799464
myRTHFromObject.GetType():  System.RuntimeTypeHandle
Get the type back from the handle...
Type.GetTypeFromHandle(myRTHFromObject):  MyClass1

myRTHFromObject.Equals(myRTHFromType):  True

myRTHFromType.Value:  799464
myRTHFromType.GetType():  System.RuntimeTypeHandle
Get the type back from the handle...
Type.GetTypeFromHandle(myRTHFromType):  MyClass1
 */

using namespace System;
using namespace System::Reflection;

public ref class MyClass1
{
private:
    int x;

public:
    int MyMethod()
    {
        return x;
    }
};

int main()
{
    MyClass1^ myClass1 = gcnew MyClass1;

    // Get the RuntimeTypeHandle from an object.
    RuntimeTypeHandle myRTHFromObject = Type::GetTypeHandle( myClass1 );

    // Get the RuntimeTypeHandle from a type.
    RuntimeTypeHandle myRTHFromType = MyClass1::typeid->TypeHandle;

    Console::WriteLine( "\nmyRTHFromObject.Value:  {0}", myRTHFromObject.Value );
    Console::WriteLine( "myRTHFromObject.GetType():  {0}", myRTHFromObject.GetType() );
    Console::WriteLine( "Get the type back from the handle..." );
    Console::WriteLine( "Type::GetTypeFromHandle(myRTHFromObject):  {0}",
        Type::GetTypeFromHandle(myRTHFromObject) );

    Console::WriteLine( "\nmyRTHFromObject.Equals(myRTHFromType):  {0}",
        myRTHFromObject.Equals(myRTHFromType) );

    Console::WriteLine( "\nmyRTHFromType.Value:  {0}", myRTHFromType.Value );
    Console::WriteLine( "myRTHFromType.GetType():  {0}", myRTHFromType.GetType() );
    Console::WriteLine( "Get the type back from the handle..." );
    Console::WriteLine( "Type::GetTypeFromHandle(myRTHFromType):  {0}",
        Type::GetTypeFromHandle(myRTHFromType) );
}

/* This code example produces output similar to the following:

myRTHFromObject.Value:  3295832
myRTHFromObject.GetType():  System.RuntimeTypeHandle
Get the type back from the handle...
Type::GetTypeFromHandle(myRTHFromObject):  MyClass1

myRTHFromObject.Equals(myRTHFromType):  True

myRTHFromType.Value:  3295832
myRTHFromType.GetType():  System.RuntimeTypeHandle
Get the type back from the handle...
Type::GetTypeFromHandle(myRTHFromType):  MyClass1
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
RuntimeTypeHandle
TypeHandle
GetTypeFromHandle


Type ..::.HasElementTypeImpl 方法

Type
.
.
::
.
HasElementTypeImpl 方法
Type 类

当在派生类中重写时，实现 HasElementType 属性，确定当前 Type 是否包含另一类型或对其引用；即，当前 Type 是否是数组、指针或由引用传递。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function HasElementTypeImpl As Boolean
protected abstract bool HasElementTypeImpl()
protected:
virtual bool HasElementTypeImpl() abstract
abstract HasElementTypeImpl : unit -> bool

返回值

类型： System Boolean
如果 Type 为数组、指针或按引用传递，则为 true；否则为 false。

例如，Type.GetType("Int32[]").HasElementTypeImpl 返回 true，而 Type.GetType("Int32").HasElementTypeImpl 返回 false。对于“Int32*”和“Int32&”，HasElementTypeImpl 也返回 true。 例如，Type.GetType("Int32[]").HasElementTypeImpl 返回 true，而 Type.GetType("Int32").HasElementTypeImpl 返回 false。对于“Int32*”和“Int32&”，HasElementTypeImpl 也返回 true。

下面的示例定义类 MyTypeDelegator，该类会重写 HasElementTypeImpl 方法。主类将检查 HasElementType 属性并显示元素类型。 下面的示例定义类 MyTypeDelegator，该类会重写 HasElementTypeImpl 方法。主类将检查 HasElementType 属性并显示元素类型。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class MyTypeDelegator
    Inherits TypeDelegator
    Public myElementType As String = Nothing
    Private myType As Type = Nothing
    Public Sub New(ByVal myType As Type)
        MyBase.New(myType)
        Me.myType = myType
    End Sub 'New
    ' Override Type.HasElementTypeImpl().
    Protected Overrides Function HasElementTypeImpl() As Boolean
        ' Determine whether the type is an array.
        If myType.IsArray Then
            myElementType = "array"
            Return True
        End If
        ' Determine whether the type is a reference.
        If myType.IsByRef Then
            myElementType = "reference"
            Return True
        End If
        ' Determine whether the type is a pointer.
        If myType.IsPointer Then
            myElementType = "pointer"
            Return True
        End If
        ' The type is not a reference, array, or pointer type.
        Return False
    End Function 'HasElementTypeImpl
End Class 'MyTypeDelegator
Public Class Type_HasElementTypeImpl
    Public Shared Sub Main()
        Try
            Dim myInt As Integer = 0
            Dim myArray(4) As Integer
            Dim myType As New MyTypeDelegator(myArray.GetType())
            Console.WriteLine(ControlChars.NewLine + "Determine whether a variable refers to an array or pointer or reference type." + ControlChars.NewLine)
            ' Determine whether myType is an array, pointer, reference type.
            If myType.HasElementType Then
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType.ToString())
            Else
                Console.WriteLine("myArray is not an array, pointer, or reference type.")
            End If
            myType = New MyTypeDelegator(myInt.GetType())
            ' Determine whether myType is an array, pointer, reference type.
            If myType.HasElementType Then
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType.ToString())
            Else
                Console.WriteLine("myInt is not an array, pointer, or reference type.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_HasElementTypeImpl

using System;
using System.Reflection;
public class MyTypeDelegator : TypeDelegator
{
    public string myElementType = null;
    private Type myType = null ;
    public MyTypeDelegator(Type myType) : base(myType)
    {
        this.myType = myType;
    }
    // Override Type.HasElementTypeImpl().
    protected override bool HasElementTypeImpl()
    {
        // Determine whether the type is an array.
        if(myType.IsArray)
        {
            myElementType = "array";
            return true;
        }
        // Determine whether the type is a reference.
        if(myType.IsByRef)
        {
            myElementType = "reference";
            return true;
        }
        // Determine whether the type is a pointer.
        if(myType.IsPointer)
        {
            myElementType = "pointer";
            return true;
        }
        // Return false if the type is not a reference, array, or pointer type.
        return false;
    }
}
public class Type_HasElementTypeImpl
{
    public static void Main()
    {
        try
        {
            int myInt = 0 ;
            int[] myArray = new int[5];
            MyTypeDelegator myType = new MyTypeDelegator(myArray.GetType());
            // Determine whether myType is an array, pointer, reference type.
            Console.WriteLine("\nDetermine whether a variable is an array, pointer, or reference type.\n");
            if( myType.HasElementType)
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType);
            else
                Console.WriteLine("myArray is not an array, pointer, or reference type.");
            myType = new MyTypeDelegator(myInt.GetType());
            // Determine whether myType is an array, pointer, reference type.
            if( myType.HasElementType)
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType);
            else
                Console.WriteLine("myInt is not an array, pointer, or reference type.");
        }
        catch( Exception e )
        {
            Console.WriteLine("Exception: {0}", e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class MyTypeDelegator: public TypeDelegator
{
public:
   String^ myElementType;

private:
   Type^ myType;

public:
   MyTypeDelegator( Type^ myType )
      : TypeDelegator( myType )
   {
      this->myType = myType;
   }

protected:

   // Override Type::HasElementTypeImpl().
   virtual bool HasElementTypeImpl() override
   {

      // Determine whether the type is an array.
      if ( myType->IsArray )
      {
         myElementType = "array";
         return true;
      }

      // Determine whether the type is a reference.
      if ( myType->IsByRef )
      {
         myElementType = "reference";
         return true;
      }

      // Determine whether the type is a pointer.
      if ( myType->IsPointer )
      {
         myElementType = "pointer";
         return true;
      }

      // Return false if the type is not a reference, array, or pointer type.
      return false;
   }

};

int main()
{
   try
   {
      int myInt = 0;
      array<Int32>^myArray = gcnew array<Int32>(5);
      MyTypeDelegator^ myType = gcnew MyTypeDelegator( myArray->GetType() );

      // Determine whether myType is an array, pointer, reference type.
      Console::WriteLine( "\nDetermine whether a variable is an array, pointer, or reference type.\n" );
      if ( myType->HasElementType )
            Console::WriteLine( "The type of myArray is {0}.", myType->myElementType );
      else
            Console::WriteLine( "myArray is not an array, pointer, or reference type." );
      myType = gcnew MyTypeDelegator( myInt.GetType() );

      // Determine whether myType is an array, pointer, reference type.
      if ( myType->HasElementType )
            Console::WriteLine( "The type of myInt is {0}.", myType->myElementType );
      else
            Console::WriteLine( "myInt is not an array, pointer, or reference type." );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
HasElementType
IsArray
IsPointer
IsByRef
GetElementType
GetType


Type ..::.InvokeMember 方法

Type
.
.
::
.
InvokeMember 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

调用当前 Type 的特定成员。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.InvokeMember 方法 (String, BindingFlags, Binder, Object, array<Object >[]()[])

Type
.
.
::
.
InvokeMember 方法 (String, BindingFlags, Binder, Object,
array<
Object
>
[]
()
[]
)
Type 类

使用指定的绑定约束并匹配指定的参数列表，调用指定成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function InvokeMember ( _
    name As String, _
    invokeAttr As BindingFlags, _
    binder As Binder, _
    target As Object, _
    args As Object() _
) As Object
public Object InvokeMember(
    string name,
    BindingFlags invokeAttr,
    Binder binder,
    Object target,
    Object[] args
)
public:
virtual Object^ InvokeMember(
    String^ name,
    BindingFlags invokeAttr,
    Binder^ binder,
    Object^ target,
    array<Object^>^ args
) sealed
abstract InvokeMember :
        name:string *
        invokeAttr:BindingFlags *
        binder:Binder *
        target:Object *
        args:Object[] -> Object
override InvokeMember :
        name:string *
        invokeAttr:BindingFlags *
        binder:Binder *
        target:Object *
        args:Object[] -> Object

参数

name
类型： System String
String，它包含要调用的构造函数、方法、属性或字段成员的名称。
- 或 -
空字符串 ("")，表示调用默认成员。
- 或 -
对于 IDispatch 成员，则为一个表示 DispID 的字符串，例如“[DispID=3]”。
invokeAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 | BindingFlags.Instance | 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。请注意，为了成功地使用变量参数来调用方法重载，可能必须显式定义 Binder 对象。 若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。请注意，为了成功地使用变量参数来调用方法重载，可能必须显式定义 Binder 对象。
target
类型： System Object
要在其上调用指定成员的 Object。
args
类型：
array<
System Object
>
[]
()
[]

包含传递给要调用的成员的参数的数组。

返回值

类型： System Object
表示被调用成员的返回值的 Object。

实现

异常 | 条件
ArgumentNullException | invokeAttr 不包含 CreateInstance 并且 name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | invokeAttr 不是有效的 BindingFlags 特性。 - 或 - invokeAttr 不包含下列绑定标志之一：InvokeMethod、CreateInstance、GetField、SetField、GetProperty 或 SetProperty。 - 或 - invokeAttr 包含与 InvokeMethod、GetField、SetField、GetProperty 或 SetProperty 组合的 CreateInstance。 - 或 - invokeAttr 同时包含 GetField 和 SetField。 - 或 - invokeAttr 同时包含 GetProperty 和 SetProperty。 - 或 - invokeAttr 包含与 SetField 或 SetProperty 组合的 InvokeMethod。 - 或 - invokeAttr 包含 SetField，并且 args 具有一个以上的元素。 - 或 - 对 COM 对象调用此方法，且未传入下列绑定标志之一：BindingFlags.InvokeMethod、BindingFlags.GetProperty、BindingFlags.SetProperty、BindingFlags.PutDispProperty 或 BindingFlags.PutRefDispProperty。 - 或 - 某个命名参数数组包含一个为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的字符串。
MethodAccessException | 指定的成员是类初始值设定项。
MissingFieldException | 找不到该字段或属性。
MissingMethodException | 找不到任何与 args 中的参数匹配的方法。 - 或 - 当前 Type 对象表示包含开放类型参数的类型，即 ContainsGenericParameters 返回 true。
TargetException | 在 target 上无法调用指定的成员。
AmbiguousMatchException | 多个方法匹配绑定条件。
NotSupportedException | .NET Compact Framework 当前不支持此方法。
InvalidOperationException | 由 name 表示的方法具有一个或多个未指定的泛型类型参数。即，该方法的 ContainsGenericParameters 属性返回 true。 由 name 表示的方法具有一个或多个未指定的泛型类型参数。即，该方法的 ContainsGenericParameters 属性返回 true。
说明 说明

不能使用 InvokeMember 来调用泛型方法。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员：

  • 指定 BindingFlags.Public 可在搜索中包含公共成员。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共成员（即私有成员和受保护的成员）。

  • 指定 BindingFlags.FlattenHierarchy 可包含层次结构上的静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，仅搜索 Type 上声明的成员，而不搜索被简单继承的成员。

可以使用下列 BindingFlags 调用标志表示要对成员采取的操作：

  • CreateInstance 用于调用构造函数。将忽略 name。对其他调用标志无效。 CreateInstance 用于调用构造函数。将忽略 name。对其他调用标志无效。 CreateInstance 用于调用构造函数。将忽略 name。对其他调用标志无效。

  • InvokeMethod，表示调用方法，而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。如果 InvokeMethod 由其自身指定，则会自动包括 BindingFlags.Public、BindingFlags.Instance 和 BindingFlags.Static。 InvokeMethod，表示调用方法，而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。如果 InvokeMethod 由其自身指定，则会自动包括 BindingFlags.Public、BindingFlags.Instance 和 BindingFlags.Static。 InvokeMethod，表示调用方法，而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。如果 InvokeMethod 由其自身指定，则会自动包括 BindingFlags.Public、BindingFlags.Instance 和 BindingFlags.Static。

  • GetField，表示获取字段值。对 SetField 无效。 GetField，表示获取字段值。对 SetField 无效。

  • SetField，表示设置字段值。对 GetField 无效。 SetField，表示设置字段值。对 GetField 无效。

  • GetProperty，表示获取属性。对 SetProperty 无效。 GetProperty，表示获取属性。对 SetProperty 无效。

  • SetProperty 表示设置属性。对 GetProperty 无效。 SetProperty 表示设置属性。对 GetProperty 无效。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果下列条件为真，则将调用方法：

  • 方法声明中的参数个数等于 args 数组中的参数个数（除非在成员上定义了默认参数）。

  • 每个参数 (argument) 的类型可以被联编程序转换为参数 (parameter) 类型。

联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型（BindingFlags 值 InvokeMethod、GetProperty 等）。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。 联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型（BindingFlags 值 InvokeMethod、GetProperty 等）。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。 联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型（BindingFlags 值 InvokeMethod、GetProperty 等）。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。

选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。

对于完全受信任的代码将忽略访问限制；即，只要代码是完全受信任的，就可以通过 System.Reflection 访问和调用私有的构造函数、方法、字段和属性。

通过指定 BindingFlags..::.SetField，可以使用 Type.InvokeMember 将某个字段设置为特定值。例如，如果要设置 C 类上名为 F 的公共实例字段，并且 F 为 String，则可使用下列代码： 通过指定 BindingFlags..::.SetField，可以使用 Type.InvokeMember 将某个字段设置为特定值。例如，如果要设置 C 类上名为 F 的公共实例字段，并且 F 为 String，则可使用下列代码：

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});

如果 F 为 String[]，则可使用下列代码：

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});

这会将字段 F 初始化为此新数组。还可用 Type.InvokeMember 设置数组中的某个位置（通过提供值索引），然后通过使用下列代码设置下一个值： 这会将字段 F 初始化为此新数组。还可用 Type.InvokeMember 设置数组中的某个位置（通过提供值索引），然后通过使用下列代码设置下一个值：

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});

这会将 F 在数组中所占据的字符串“z”更改为字符串“b”。

当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。 当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。 当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。 当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共成员。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共成员。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。

下面的示例使用 InvokeMember 访问一种类型的成员。

Imports System
Imports System.Reflection

' This sample class has a field, constructor, method, and property.
Class MyType
    Private myField As Int32

    Public Sub New(ByRef x As Int32)
        x *= 5
    End Sub 'New

    Public Overrides Function ToString() As [String]
        Return myField.ToString()
    End Function 'ToString

    Public Property MyProp() As Int32
        Get
            Return myField
        End Get
        Set(ByVal Value As Int32)
            If Value < 1 Then
                Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
            End If
            myField = Value
        End Set
    End Property
End Class 'MyType

Class MyApp

    Shared Sub Main()
        Dim t As Type = GetType(MyType)
        ' Create an instance of a type.
        Dim args() As [Object] = {8}
        Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
        Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
        Console.WriteLine("Type: {0}", obj.GetType().ToString())
        Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))

        ' Read and write to a field.
        t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
        Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
        Console.WriteLine("myField: {0}", v)

        ' Call a method.
        Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
        Console.WriteLine("ToString: {0}", s)

        ' Read and write a property. First, attempt to assign an
        ' invalid value; then assign a valid value; finally, get
        ' the value.
        Try
            ' Assign the value zero to MyProp. The Property Set
            ' throws an exception, because zero is an invalid value.
            ' InvokeMember catches the exception, and throws
            ' TargetInvocationException. To discover the real cause
            ' you must catch TargetInvocationException and examine
            ' the inner exception.
            t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
        Catch e As TargetInvocationException
            ' If the property assignment failed for some unexpected
            ' reason, rethrow the TargetInvocationException.
            If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
                Throw
            End If
            Console.WriteLine("An invalid value was assigned to MyProp.")
        End Try
        t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
        v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
        Console.WriteLine("MyProp: {0}", v)
    End Sub 'Main
End Class 'MyApp

using System;
using System.Reflection;

// This sample class has a field, constructor, method, and property.
class MyType
{
    Int32 myField;
    public MyType(ref Int32 x) {x *= 5;}
    public override String ToString() {return myField.ToString();}
    public Int32 MyProp
    {
        get {return myField;}
        set
        {
            if (value < 1)
                throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
            myField = value;
        }
    }
}

class MyApp
{
    static void Main()
    {
        Type t = typeof(MyType);
        // Create an instance of a type.
        Object[] args = new Object[] {8};
        Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
        Object obj = t.InvokeMember(null,
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
        Console.WriteLine("Type: " + obj.GetType().ToString());
        Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);

        // Read and write to a field.
        t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
        Int32 v = (Int32) t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
        Console.WriteLine("myField: " + v);

        // Call a method.
        String s = (String) t.InvokeMember("ToString",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
        Console.WriteLine("ToString: " + s);

        // Read and write a property. First, attempt to assign an
        // invalid value; then assign a valid value; finally, get
        // the value.
        try
        {
            // Assign the value zero to MyProp. The Property Set
            // throws an exception, because zero is an invalid value.
            // InvokeMember catches the exception, and throws
            // TargetInvocationException. To discover the real cause
            // you must catch TargetInvocationException and examine
            // the inner exception.
            t.InvokeMember("MyProp",
                BindingFlags.DeclaredOnly |
                BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
        }
        catch (TargetInvocationException e)
        {
            // If the property assignment failed for some unexpected
            // reason, rethrow the TargetInvocationException.
            if (e.InnerException.GetType() !=
                typeof(ArgumentOutOfRangeException))
                throw;
            Console.WriteLine("An invalid value was assigned to MyProp.");
        }
        t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
        v = (Int32) t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
        Console.WriteLine("MyProp: " + v);
    }
}

using namespace System;
using namespace System::Reflection;

// This sample class has a field, constructor, method, and property.
ref class MyType
{
private:
   Int32 myField;

public:
   MyType( interior_ptr<Int32> x )
   {
       *x *= 5;
   }

   virtual String^ ToString() override
   {
      return myField.ToString();
   }

   property Int32 MyProp
   {
      Int32 get()
      {
         return myField;
      }

      void set( Int32 value )
      {
         if ( value < 1 )
                  throw gcnew ArgumentOutOfRangeException( "value",value,"value must be > 0" );

         myField = value;
      }
   }
};

int main()
{
   Type^ t = MyType::typeid;

   // Create an instance of a type.
   array<Object^>^args = {8};
   Console::WriteLine( "The value of x before the constructor is called is {0}.", args[ 0 ] );
   Object^ obj = t->InvokeMember( nullptr, static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::CreateInstance), nullptr, nullptr, args );
   Console::WriteLine( "Type: {0}", obj->GetType() );
   Console::WriteLine( "The value of x after the constructor returns is {0}.", args[ 0 ] );

   // Read and write to a field.
   array<Object^>^obj5 = {5};
   t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetField), nullptr, obj, obj5 );
   Int32 v = safe_cast<Int32>(t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetField), nullptr, obj, nullptr ));
   Console::WriteLine( "myField: {0}", v );

   // Call a method.
   String^ s = safe_cast<String^>(t->InvokeMember( "ToString", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::InvokeMethod), nullptr, obj, nullptr ));
   Console::WriteLine( "ToString: {0}", s );

   // Read and write a property. First, attempt to assign an
   // invalid value; then assign a valid value; finally, get
   // the value.
   try
   {
      // Assign the value zero to MyProp. The Property Set
      // throws an exception, because zero is an invalid value.
      // InvokeMember catches the exception, and throws
      // TargetInvocationException. To discover the real cause
      // you must catch TargetInvocationException and examine
      // the inner exception.
      array<Object^>^obj0 = {(int^)0};
      t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj0 );
   }
   catch ( TargetInvocationException^ e )
   {
      // If the property assignment failed for some unexpected
      // reason, rethrow the TargetInvocationException.
      if ( e->InnerException->GetType() != ArgumentOutOfRangeException::typeid )
            throw;

      Console::WriteLine( "An invalid value was assigned to MyProp." );
   }

   array<Object^>^obj2 = {2};
   t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj2 );
   v =  safe_cast<Int32>(t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetProperty), nullptr, obj, nullptr ));
   Console::WriteLine( "MyProp: {0}", v );
}
  • ReflectionPermission

    用于在非公共成员的授予集限制为调用方的授予集或其子集时，访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共成员的授予集限制为调用方的授予集或其子集时，访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • SecurityPermission

    以调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 以调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
InvokeMember 重载
System 命名空间
String
Binder
DefaultBinder
BindingFlags
ParameterModifier
ParameterAttributes
CultureInfo
ReflectionPermission


Type ..::.InvokeMember 方法 (String, BindingFlags, Binder, Object, array<Object >[]()[], CultureInfo)

Type
.
.
::
.
InvokeMember 方法 (String, BindingFlags, Binder, Object,
array<
Object
>
[]
()
[]
, CultureInfo)
Type 类

使用指定的绑定约束和匹配的指定参数列表及区域性来调用指定成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function InvokeMember ( _
    name As String, _
    invokeAttr As BindingFlags, _
    binder As Binder, _
    target As Object, _
    args As Object(), _
    culture As CultureInfo _
) As Object
public Object InvokeMember(
    string name,
    BindingFlags invokeAttr,
    Binder binder,
    Object target,
    Object[] args,
    CultureInfo culture
)
public:
virtual Object^ InvokeMember(
    String^ name,
    BindingFlags invokeAttr,
    Binder^ binder,
    Object^ target,
    array<Object^>^ args,
    CultureInfo^ culture
) sealed
abstract InvokeMember :
        name:string *
        invokeAttr:BindingFlags *
        binder:Binder *
        target:Object *
        args:Object[] *
        culture:CultureInfo -> Object
override InvokeMember :
        name:string *
        invokeAttr:BindingFlags *
        binder:Binder *
        target:Object *
        args:Object[] *
        culture:CultureInfo -> Object

参数

name
类型： System String
String，它包含要调用的构造函数、方法、属性或字段成员的名称。
- 或 -
空字符串 ("")，表示调用默认成员。
- 或 -
对于 IDispatch 成员，则为一个表示 DispID 的字符串，例如“[DispID=3]”。
invokeAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 | BindingFlags.Instance | 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。请注意，为了成功地使用变量参数来调用方法重载，可能必须显式定义 Binder 对象。 若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。请注意，为了成功地使用变量参数来调用方法重载，可能必须显式定义 Binder 对象。
target
类型： System Object
要在其上调用指定成员的 Object。
args
类型：
array<
System Object
>
[]
()
[]

包含传递给要调用的成员的参数的数组。
culture
类型： System.Globalization CultureInfo
表示要使用的全局化区域设置的 CultureInfo 对象，它对区域设置特定的转换可能是必需的，比如将数字 String 转换为 Double。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），表示使用当前线程的 CultureInfo。

返回值

类型： System Object
表示被调用成员的返回值的 Object。

实现

异常 | 条件
ArgumentNullException | invokeAttr 不包含 CreateInstance 并且 name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | invokeAttr 不是有效的 BindingFlags 特性。 - 或 - invokeAttr 不包含下列绑定标志之一：InvokeMethod、CreateInstance、GetField、SetField、GetProperty 或 SetProperty。 - 或 - invokeAttr 包含与 InvokeMethod、GetField、SetField、GetProperty 或 SetProperty 组合的 CreateInstance。 - 或 - invokeAttr 同时包含 GetField 和 SetField。 - 或 - invokeAttr 同时包含 GetProperty 和 SetProperty。 - 或 - invokeAttr 包含与 SetField 或 SetProperty 组合的 InvokeMethod。 - 或 - invokeAttr 包含 SetField，并且 args 具有一个以上的元素。 - 或 - 对 COM 对象调用此方法，且未传入下列绑定标志之一：BindingFlags.InvokeMethod、BindingFlags.GetProperty、BindingFlags.SetProperty、BindingFlags.PutDispProperty 或 BindingFlags.PutRefDispProperty。 - 或 - 某个命名参数数组包含一个为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的字符串。
MethodAccessException | 指定的成员是类初始值设定项。
MissingFieldException | 找不到该字段或属性。
MissingMethodException | 找不到任何与 args 中的参数匹配的方法。 - 或 - 当前 Type 对象表示包含开放类型参数的类型，即 ContainsGenericParameters 返回 true。
TargetException | 在 target 上无法调用指定的成员。
AmbiguousMatchException | 多个方法匹配绑定条件。
InvalidOperationException | 由 name 表示的方法具有一个或多个未指定的泛型类型参数。即，该方法的 ContainsGenericParameters 属性返回 true。 由 name 表示的方法具有一个或多个未指定的泛型类型参数。即，该方法的 ContainsGenericParameters 属性返回 true。

虽然默认联编程序不处理 CultureInfo（culture 参数），但您可以使用抽象 System.Reflection..::.Binder 类编写确实处理 culture 的自定义联编程序。

说明 说明

不能使用 InvokeMember 来调用泛型方法。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员：

  • 指定 BindingFlags.Public 可在搜索中包含公共成员。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共成员（即私有成员、内部成员和受保护的成员）。

  • 指定 BindingFlags.FlattenHierarchy 可包含层次结构上的静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，仅搜索 Type 上声明的成员，而不搜索被简单继承的成员。

可以使用下列 BindingFlags 调用标志表示要对成员采取的操作：

  • CreateInstance 用于调用构造函数。将忽略 name。对其他调用标志无效。 CreateInstance 用于调用构造函数。将忽略 name。对其他调用标志无效。 CreateInstance 用于调用构造函数。将忽略 name。对其他调用标志无效。

  • InvokeMethod，表示调用方法，而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。如果 InvokeMethod 由其自身指定，则会自动包括 BindingFlags.Public、BindingFlags.Instance 和 BindingFlags.Static。 InvokeMethod，表示调用方法，而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。如果 InvokeMethod 由其自身指定，则会自动包括 BindingFlags.Public、BindingFlags.Instance 和 BindingFlags.Static。 InvokeMethod，表示调用方法，而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。如果 InvokeMethod 由其自身指定，则会自动包括 BindingFlags.Public、BindingFlags.Instance 和 BindingFlags.Static。

  • GetField，表示获取字段值。对 SetField 无效。 GetField，表示获取字段值。对 SetField 无效。

  • SetField，表示设置字段值。对 GetField 无效。 SetField，表示设置字段值。对 GetField 无效。

  • GetProperty，表示获取属性。对 SetProperty 无效。 GetProperty，表示获取属性。对 SetProperty 无效。

  • SetProperty 表示设置属性。对 GetProperty 无效。 SetProperty 表示设置属性。对 GetProperty 无效。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果下列条件为真，则将调用方法：

  • 方法声明中的参数个数等于 args 数组中的参数个数（除非在成员上定义了默认参数）。

  • 每个参数 (argument) 的类型可以被联编程序转换为参数 (parameter) 类型。

联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型（BindingFlags 值 InvokeMethod、GetProperty 等）。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。 联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型（BindingFlags 值 InvokeMethod、GetProperty 等）。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。 联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型（BindingFlags 值 InvokeMethod、GetProperty 等）。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。

选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。

对于完全受信任的代码将忽略访问限制；即，只要代码是完全受信任的，就可以通过反射访问和调用私有的构造函数、方法、字段和属性。

通过指定 BindingFlags..::.SetField，可以使用 Type.InvokeMember 将某个字段设置为特定值。例如，如果要设置 C 类上名为 F 的公共实例字段，并且 F 为 String，则可使用下列代码： 通过指定 BindingFlags..::.SetField，可以使用 Type.InvokeMember 将某个字段设置为特定值。例如，如果要设置 C 类上名为 F 的公共实例字段，并且 F 为 String，则可使用下列代码：

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);

如果 F 为 String[]，则可使用下列代码：

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);

这会将字段 F 初始化为此新数组。还可用 Type.InvokeMember 设置数组中的某个位置（通过提供值索引），然后通过使用下列代码设置下一个值： 这会将字段 F 初始化为此新数组。还可用 Type.InvokeMember 设置数组中的某个位置（通过提供值索引），然后通过使用下列代码设置下一个值：

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);

这会将 F 在数组中所占据的字符串“z”更改为字符串“b”。

当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。 当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。 当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。 当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共成员。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共成员。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • ReflectionPermission

    用于在非公共成员的授予集限制为调用方的授予集或其子集时，访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共成员的授予集限制为调用方的授予集或其子集时，访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • SecurityPermission

    以调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 以调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
InvokeMember 重载
System 命名空间
String
Binder
DefaultBinder
BindingFlags
ParameterModifier
ParameterAttributes
CultureInfo
ReflectionPermission


Type ..::.InvokeMember 方法 (String, BindingFlags, Binder, Object, array<Object >[]()[], array<ParameterModifier >[]()[], CultureInfo, array<String >[]()[])

Type
.
.
::
.
InvokeMember 方法 (String, BindingFlags, Binder, Object,
array<
Object
>
[]
()
[]
,
array<
ParameterModifier
>
[]
()
[]
, CultureInfo,
array<
String
>
[]
()
[]
)
Type 类

当在派生类中重写时，使用指定的绑定约束并匹配指定的参数列表、修饰符和区域性，调用指定成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride Function InvokeMember ( _
    name As String, _
    invokeAttr As BindingFlags, _
    binder As Binder, _
    target As Object, _
    args As Object(), _
    modifiers As ParameterModifier(), _
    culture As CultureInfo, _
    namedParameters As String() _
) As Object
public abstract Object InvokeMember(
    string name,
    BindingFlags invokeAttr,
    Binder binder,
    Object target,
    Object[] args,
    ParameterModifier[] modifiers,
    CultureInfo culture,
    string[] namedParameters
)
public:
virtual Object^ InvokeMember(
    String^ name,
    BindingFlags invokeAttr,
    Binder^ binder,
    Object^ target,
    array<Object^>^ args,
    array<ParameterModifier>^ modifiers,
    CultureInfo^ culture,
    array<String^>^ namedParameters
) abstract
abstract InvokeMember :
        name:string *
        invokeAttr:BindingFlags *
        binder:Binder *
        target:Object *
        args:Object[] *
        modifiers:ParameterModifier[] *
        culture:CultureInfo *
        namedParameters:string[] -> Object

参数

name
类型： System String
String，它包含要调用的构造函数、方法、属性或字段成员的名称。
- 或 -
空字符串 ("")，表示调用默认成员。
- 或 -
对于 IDispatch 成员，则为一个表示 DispID 的字符串，例如“[DispID=3]”。
invokeAttr
类型： System.Reflection BindingFlags
一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。 | BindingFlags.Instance | 一个位屏蔽，由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一，如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找的类型，则将使用 BindingFlags.Public | BindingFlags.Instance |使用 BindingFlags.Static。
binder
类型： System.Reflection Binder
一个 Binder 对象，该对象定义一组属性并启用绑定，而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。请注意，为了成功地使用变量参数来调用方法重载，可能必须显式定义 Binder 对象。 若为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用 DefaultBinder。请注意，为了成功地使用变量参数来调用方法重载，可能必须显式定义 Binder 对象。
target
类型： System Object
要在其上调用指定成员的 Object。
args
类型：
array<
System Object
>
[]
()
[]

包含传递给要调用的成员的参数的数组。
modifiers
类型：
array<
System.Reflection ParameterModifier
>
[]
()
[]

ParameterModifier 对象数组，表示与 args 数组中的相应元素关联的特性。参数的关联的特性存储在成员的签名中。 ParameterModifier 对象数组，表示与 args 数组中的相应元素关联的特性。参数的关联的特性存储在成员的签名中。
只有在调用 COM 组件时，默认联编程序才处理此参数。
culture
类型： System.Globalization CultureInfo
表示要使用的全局化区域设置的 CultureInfo 对象，它对区域设置特定的转换可能是必需的，比如将数字 String 转换为 Double。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），表示使用当前线程的 CultureInfo。
namedParameters
类型：
array<
System String
>
[]
()
[]

包含参数名称的数组，args 数组中的值被传递给这些参数。

返回值

类型： System Object
表示被调用成员的返回值的 Object。

实现

异常 | 条件
ArgumentNullException | invokeAttr 不包含 CreateInstance 并且 name 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | args 和 modifiers 的长度不同。 - 或 - invokeAttr 不是有效的 BindingFlags 特性。 - 或 - invokeAttr 不包含下列绑定标志之一：InvokeMethod、CreateInstance、GetField、SetField、GetProperty 或 SetProperty。 - 或 - invokeAttr 包含与 InvokeMethod、GetField、SetField、GetProperty 或 SetProperty 组合的 CreateInstance。 - 或 - invokeAttr 同时包含 GetField 和 SetField。 - 或 - invokeAttr 同时包含 GetProperty 和 SetProperty。 - 或 - invokeAttr 包含与 SetField 或 SetProperty 组合的 InvokeMethod。 - 或 - invokeAttr 包含 SetField，并且 args 具有一个以上的元素。 - 或 - 命名参数数组大于此参数数组。 - 或 - 对 COM 对象调用此方法，且未传入下列绑定标志之一：BindingFlags.InvokeMethod、BindingFlags.GetProperty、BindingFlags.SetProperty、BindingFlags.PutDispProperty 或 BindingFlags.PutRefDispProperty。 - 或 - 某个命名参数数组包含一个为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的字符串。
MethodAccessException | 指定的成员是类初始值设定项。
MissingFieldException | 找不到该字段或属性。
MissingMethodException | 找不到任何与 args 中的参数匹配的方法。 - 或 - 找不到任何成员具有 namedParameters 中提供的参数名称。 - 或 - 当前 Type 对象表示包含开放类型参数的类型，即 ContainsGenericParameters 返回 true。
TargetException | 在 target 上无法调用指定的成员。
AmbiguousMatchException | 多个方法匹配绑定条件。
InvalidOperationException | 由 name 表示的方法具有一个或多个未指定的泛型类型参数。即，该方法的 ContainsGenericParameters 属性返回 true。 由 name 表示的方法具有一个或多个未指定的泛型类型参数。即，该方法的 ContainsGenericParameters 属性返回 true。

InvokeMember 调用构造函数成员或方法成员，获取或设置属性成员，获取或设置数据字段成员，或者获取或设置数组成员的元素。

说明 说明

不能使用 InvokeMember 来调用泛型方法。

当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。 当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。 当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。 当调用 IDispatch 成员时，可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如，如果 MyComMethod 的 DispID 为 3，则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中，DispID 有时是调用所需成员的唯一方式。

虽然默认联编程序不处理 ParameterModifier 或 CultureInfo（modifiers 和 culture 参数），但您可以使用抽象 System.Reflection..::.Binder 类来编写处理 modifiers 和 culture 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。 虽然默认联编程序不处理 ParameterModifier 或 CultureInfo（modifiers 和 culture 参数），但您可以使用抽象 System.Reflection..::.Binder 类来编写处理 modifiers 和 culture 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用，而且仅处理通过引用传递的参数。

namedParameters 数组中的每一个参数获取 args 数组中相应元素中的值。如果 args 的长度大于 namedParameters 的长度，则按顺序传递剩余的参数值。 namedParameters 数组中的每一个参数获取 args 数组中相应元素中的值。如果 args 的长度大于 namedParameters 的长度，则按顺序传递剩余的参数值。

namedParameters 数组可用于更改输入数组中的参数的顺序。例如，假设方法 M(string a, int b)（在 Visual Basic 中为 M(ByVal a As String, ByVal b As Integer)）以及输入数组 { 42, "x" }，如果为 namedParameters 提供数组 { "b", "a" }，则可将该输入数组原样传递给 args。 namedParameters 数组可用于更改输入数组中的参数的顺序。例如，假设方法 M(string a, int b)（在 Visual Basic 中为 M(ByVal a As String, ByVal b As Integer)）以及输入数组 { 42, "x" }，如果为 namedParameters 提供数组 { "b", "a" }，则可将该输入数组原样传递给 args。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员：

  • 指定 BindingFlags.Public 可在搜索中包含公共成员。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共成员（即私有成员、内部成员和受保护的成员）。

  • 指定 BindingFlags.FlattenHierarchy 可包含层次结构上的静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式：

  • BindingFlags.IgnoreCase，表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly，仅搜索 Type 上声明的成员，而不搜索被简单继承的成员。

可以使用下列 BindingFlags 调用标志表示要对成员采取的操作：

  • CreateInstance 用于调用构造函数。将忽略 name。对其他调用标志无效。 CreateInstance 用于调用构造函数。将忽略 name。对其他调用标志无效。 CreateInstance 用于调用构造函数。将忽略 name。对其他调用标志无效。

  • InvokeMethod，表示调用方法，而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。如果 InvokeMethod 由其自身指定，则会自动包括 BindingFlags.Public、BindingFlags.Instance 和 BindingFlags.Static。 InvokeMethod，表示调用方法，而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。如果 InvokeMethod 由其自身指定，则会自动包括 BindingFlags.Public、BindingFlags.Instance 和 BindingFlags.Static。 InvokeMethod，表示调用方法，而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。如果 InvokeMethod 由其自身指定，则会自动包括 BindingFlags.Public、BindingFlags.Instance 和 BindingFlags.Static。

  • GetField，表示获取字段值。对 SetField 无效。 GetField，表示获取字段值。对 SetField 无效。

  • SetField，表示设置字段值。对 GetField 无效。 SetField，表示设置字段值。对 GetField 无效。

  • GetProperty，表示获取属性。对 SetProperty 无效。 GetProperty，表示获取属性。对 SetProperty 无效。

  • SetProperty 表示设置属性。对 GetProperty 无效。 SetProperty 表示设置属性。对 GetProperty 无效。

有关更多信息，请参见 System.Reflection..::.BindingFlags。

如果下列条件为真，则将调用方法：

  • 方法声明中的参数个数等于 args 数组中的参数个数（除非在成员上定义了默认参数）。

  • 每个参数 (argument) 的类型可以被联编程序转换为参数 (parameter) 类型。

联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型（BindingFlags 值 InvokeMethod、GetProperty 等）。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。 联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型（BindingFlags 值 InvokeMethod、GetProperty 等）。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。 联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型（BindingFlags 值 InvokeMethod、GetProperty 等）。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。

选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。
选择方法后，方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder..::.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。

InvokeMember 可用于调用带参数（这些参数有默认值）的方法。要绑定到这些方法，“反射”要求指定 BindingFlags..::.OptionalParamBinding。对于具有默认值的参数，可以提供不同的值，也可以提供 Missing..::.Value 以使用默认值。
InvokeMember 可用于调用带参数（这些参数有默认值）的方法。要绑定到这些方法，“反射”要求指定 BindingFlags..::.OptionalParamBinding。对于具有默认值的参数，可以提供不同的值，也可以提供 Missing..::.Value 以使用默认值。
InvokeMember 可用于调用带参数（这些参数有默认值）的方法。要绑定到这些方法，“反射”要求指定 BindingFlags..::.OptionalParamBinding。对于具有默认值的参数，可以提供不同的值，也可以提供 Missing..::.Value 以使用默认值。

例如，请看这个方法 MyMethod(int x, float y = 2.0)。若要调用只带第一个参数的此方法，即 MyMethod(4)，请传递上面的绑定标志之一并传递两个参数，即第一个参数为 4，第二个参数为 Missing.Value。除非使用 Missing.Value，否则不能省略 Invoke 方法的可选参数。如果必须这样做，则使用 InvokeMember 代替。
例如，请看这个方法 MyMethod(int x, float y = 2.0)。若要调用只带第一个参数的此方法，即 MyMethod(4)，请传递上面的绑定标志之一并传递两个参数，即第一个参数为 4，第二个参数为 Missing.Value。除非使用 Missing.Value，否则不能省略 Invoke 方法的可选参数。如果必须这样做，则使用 InvokeMember 代替。
例如，请看这个方法 MyMethod(int x, float y = 2.0)。若要调用只带第一个参数的此方法，即 MyMethod(4)，请传递上面的绑定标志之一并传递两个参数，即第一个参数为 4，第二个参数为 Missing.Value。除非使用 Missing.Value，否则不能省略 Invoke 方法的可选参数。如果必须这样做，则使用 InvokeMember 代替。
例如，请看这个方法 MyMethod(int x, float y = 2.0)。若要调用只带第一个参数的此方法，即 MyMethod(4)，请传递上面的绑定标志之一并传递两个参数，即第一个参数为 4，第二个参数为 Missing.Value。除非使用 Missing.Value，否则不能省略 Invoke 方法的可选参数。如果必须这样做，则使用 InvokeMember 代替。

对于完全受信任的代码将忽略访问限制；即，只要代码是完全受信任的，就可以通过 System.Reflection 访问和调用私有的构造函数、方法、字段和属性。

通过指定 BindingFlags..::.SetField，可以使用 Type.InvokeMember 将某个字段设置为特定值。例如，如果要设置 C 类上名为 F 的公共实例字段，并且 F 为 String，则可使用下列代码： 通过指定 BindingFlags..::.SetField，可以使用 Type.InvokeMember 将某个字段设置为特定值。例如，如果要设置 C 类上名为 F 的公共实例字段，并且 F 为 String，则可使用下列代码：

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);

如果 F 为 String[]，则可使用下列代码：

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);

这会将字段 F 初始化为此新数组。还可用 Type.InvokeMember 设置数组中的某个位置（通过提供值索引），然后通过使用下列代码设置下一个值： 这会将字段 F 初始化为此新数组。还可用 Type.InvokeMember 设置数组中的某个位置（通过提供值索引），然后通过使用下列代码设置下一个值：

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);

这会将 F 在数组中所占据的字符串“z”更改为字符串“b”。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共成员。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共成员。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • ReflectionPermission

    用于在非公共成员的授予集限制为调用方的授予集或其子集时，访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess 用于在非公共成员的授予集限制为调用方的授予集或其子集时，访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.RestrictedMemberAccess

  • ReflectionPermission

    无论其授予集是什么，都用于访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess 无论其授予集是什么，都用于访问非公共成员。关联的枚举：ReflectionPermissionFlag..::.MemberAccess

  • SecurityPermission

    以调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode 以调用非托管代码。关联的枚举：SecurityPermissionFlag..::.UnmanagedCode

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
InvokeMember 重载
System 命名空间
String
Binder
DefaultBinder
BindingFlags
ParameterModifier
ParameterAttributes
CultureInfo
ReflectionPermission


Type ..::.IsArrayImpl 方法

Type
.
.
::
.
IsArrayImpl 方法
Type 类

当在派生类中重写时，实现 IsArray 属性并确定 Type 是否为数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function IsArrayImpl As Boolean
protected abstract bool IsArrayImpl()
protected:
virtual bool IsArrayImpl() abstract
abstract IsArrayImpl : unit -> bool

返回值

类型： System Boolean
如果 Type 是数组，则为 true；否则为 false。

Array 类的实例必须返回 false，因为它是对象而不是数组。

下面的示例重写 MyTypeDelegator 类中的 IsArrayImpl 方法，检查变量是不是数组，并显示结果。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class MyTypeDelegator
    Inherits TypeDelegator
    Public myElementType As String = Nothing
    Public myType As Type
    Public Sub New(ByVal myType As Type)
        MyBase.New(myType)
        Me.myType = myType
    End Sub 'New
    ' Override IsArrayImpl().
    Protected Overrides Function IsArrayImpl() As Boolean
        ' Determine whether the type is an array.
        If myType.IsArray Then
            myElementType = "array"
            Return True
        End If
        ' Return false if the type is not an array.
        Return False
    End Function 'IsArrayImpl
End Class 'MyTypeDelegator

Public Class Type_IsArrayImpl
    Public Shared Sub Main()
        Try
            Dim myInt As Integer = 0
            ' Create an instance of an array element.
            Dim myArray(4) As Integer
            Dim myType As New MyTypeDelegator(myArray.GetType())
            Console.WriteLine(ControlChars.NewLine + "Determine whether the variable is an array." + ControlChars.NewLine)
            ' Determine whether 'myType' is an array type.
            If myType.IsArray Then
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType)
            Else
                Console.WriteLine("myArray is not an array.")
            End If
            myType = New MyTypeDelegator(myInt.GetType())
            ' Determine whether myType is an array type.
            If myType.IsArray Then
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType)
            Else
                Console.WriteLine("myInt is not an array.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_IsArrayImpl

using System;
using System.Reflection;
public class MyTypeDelegator : TypeDelegator
{
    public string myElementType = null;
    public Type myType;
    public MyTypeDelegator(Type myType) : base(myType)
    {
        this.myType = myType;
    }
    // Override IsArrayImpl().
    protected override bool IsArrayImpl()
    {
        // Determine whether the type is an array.
        if(myType.IsArray)
        {
            myElementType = "array";
            return true;
        }
        // Return false if the type is not an array.
        return false;
    }
}
public class Type_IsArrayImpl
{
    public static void Main()
    {
        try
        {
            int myInt = 0 ;
            // Create an instance of an array element.
            int[] myArray = new int[5];
            MyTypeDelegator myType = new MyTypeDelegator(myArray.GetType());
            Console.WriteLine("\nDetermine whether the variable is an array.\n");
            // Determine whether myType is an array type.
            if( myType.IsArray)
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType);
            else
                Console.WriteLine("myArray is not an array.");
            myType = new MyTypeDelegator(myInt.GetType());

            // Determine whether myType is an array type.
            if( myType.IsArray)
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType);
            else
                Console.WriteLine("myInt is not an array.");
        }
        catch( Exception e )
        {
            Console.WriteLine("Exception: {0}", e.Message );
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class MyTypeDelegator: public TypeDelegator
{
public:
   String^ myElementType;
   Type^ myType;
   MyTypeDelegator( Type^ myType )
      : TypeDelegator( myType )
   {
      this->myType = myType;
   }

protected:

   // Override IsArrayImpl().
   virtual bool IsArrayImpl() override
   {

      // Determine whether the type is an array.
      if ( myType->IsArray )
      {
         myElementType = "array";
         return true;
      }

      // Return false if the type is not an array.
      return false;
   }

};

int main()
{
   try
   {
      int myInt = 0;

      // Create an instance of an array element.
      array<Int32>^myArray = gcnew array<Int32>(5);
      MyTypeDelegator^ myType = gcnew MyTypeDelegator( myArray->GetType() );
      Console::WriteLine( "\nDetermine whether the variable is an array.\n" );

      // Determine whether myType is an array type.
      if ( myType->IsArray )
            Console::WriteLine( "The type of myArray is {0}.", myType->myElementType );
      else
            Console::WriteLine( "myArray is not an array." );
      myType = gcnew MyTypeDelegator( myInt.GetType() );

      // Determine whether myType is an array type.
      if ( myType->IsArray )
            Console::WriteLine( "The type of myInt is {0}.", myType->myElementType );
      else
            Console::WriteLine( "myInt is not an array." );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
IsArray


Type ..::.IsAssignableFrom 方法

Type
.
.
::
.
IsAssignableFrom 方法
Type 类

确定当前的 Type 的实例是否可以从指定 Type 的实例分配。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IsAssignableFrom ( _
    c As Type _
) As Boolean
public virtual bool IsAssignableFrom(
    Type c
)
public:
virtual bool IsAssignableFrom(
    Type^ c
)
abstract IsAssignableFrom :
        c:Type -> bool
override IsAssignableFrom :
        c:Type -> bool

参数

c
类型： System Type
与当前的 Type 进行比较的 Type。

返回值

类型： System Boolean
如果满足下列任一条件，则为 true：c 和当前 Type 表示同一类型；当前 Type 位于 c 的继承层次结构中；当前 Type 是 c 实现的接口；c 是泛型类型参数且当前 Type 表示 c 的约束之一。如果不满足上述任何一个条件或者 c 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 false。 如果满足下列任一条件，则为 true：c 和当前 Type 表示同一类型；当前 Type 位于 c 的继承层次结构中；当前 Type 是 c 实现的接口；c 是泛型类型参数且当前 Type 表示 c 的约束之一。如果不满足上述任何一个条件或者 c 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 false。

实现

此方法可由派生类重写。

说明 说明

泛型类型定义不可以从封闭构造的类型赋值。也就是说，不能将封闭构造类型 MyGenericList<int>（在 Visual Basic 中为 MyGenericList(Of Integer)）赋给 MyGenericList<T> 类型的变量。 泛型类型定义不可以从封闭构造的类型赋值。也就是说，不能将封闭构造类型 MyGenericList<int>（在 Visual Basic 中为 MyGenericList(Of Integer)）赋给 MyGenericList<T> 类型的变量。

可以使用 GetElementType 来确定 Type 的元素类型。

如果 c 参数的类型为 TypeBuilder，则结果基于要生成的类型。下面的代码示例使用名为 B 的生成类型对此进行演示。 如果 c 参数的类型为 TypeBuilder，则结果基于要生成的类型。下面的代码示例使用名为 B 的生成类型对此进行演示。

TypeBuilder b1 = moduleBuilder.DefineType("B", TypeAttributes.Public, typeof(A));
// Returns true:
typeof(A).IsAssignableFrom(b1))

下面的示例使用所定义的类、整数数组和泛型来演示 IsAssignableFrom 方法。

Imports System
Imports System.Collections.Generic

Class ArrayTypeTest

    Public Shared Sub Main()
        ' Demonstrate classes:
        Console.WriteLine("Defned Classes:")
        Dim room1 As Room = New Room
        Dim kitchen1 As Kitchen = New Kitchen
        Dim bedroom1 As Bedroom = New Bedroom
        Dim guestroom1 As Guestroom = New Guestroom
        Dim masterbedroom1 As MasterBedroom = New MasterBedroom

        Dim room1Type As Type = room1.GetType
        Dim kitchen1Type As Type = kitchen1.GetType
        Dim bedroom1Type As Type = bedroom1.GetType
        Dim guestroom1Type As Type = guestroom1.GetType
        Dim masterbedroom1Type As Type = masterbedroom1.GetType

        Console.WriteLine("room assignable from kitchen: {0}", room1Type.IsAssignableFrom(kitchen1Type))
        Console.WriteLine("bedroom assignable from guestroom: {0}", bedroom1Type.IsAssignableFrom(guestroom1Type))
        Console.WriteLine("kitchen assignable from masterbedroom: {0}", kitchen1Type.IsAssignableFrom(masterbedroom1Type))

        ' Demonstrate arrays:
        Console.WriteLine()
        Console.WriteLine("Integer arrays:")

        Dim array10(10) As Integer
        Dim array2(2) As Integer
        Dim array22(2, 2) As Integer
        Dim array24(2, 4) As Integer

        Dim array10Type As Type = array10.GetType
        Dim array2Type As Type = array2.GetType
        Dim array22Type As Type = array22.GetType
        Dim array24Type As Type = array24.GetType

        Console.WriteLine("int[2] assignable from int[10]: {0}", array2Type.IsAssignableFrom(array10Type))
        Console.WriteLine("int[2] assignable from int[2,4]: {0}", array2Type.IsAssignableFrom(array24Type))
        Console.WriteLine("int[2,4] assignable from int[2,2]: {0}", array24Type.IsAssignableFrom(array22Type))

        ' Demonstrate generics:
        Console.WriteLine()
        Console.WriteLine("Generics:")
        ' Note that "int?[]" is the same as "Nullable<int>[]"

        Dim arrayNull(10) As Nullable(Of Integer)
        Dim genIntList As New List(Of Integer)
        Dim genTList As New List(Of Type)

        Dim arrayNullType As Type = arrayNull.GetType
        Dim genIntListType As Type = genIntList.GetType
        Dim genTListType As Type = genTList.GetType

        Console.WriteLine("int[10] assignable from int?[10]: {0}", array10Type.IsAssignableFrom(arrayNullType))
        Console.WriteLine("List<int> assignable from List<Type>: {0}", genIntListType.IsAssignableFrom(genTListType))
        Console.WriteLine("List<Type> assignable from List<int>: {0}", genTListType.IsAssignableFrom(genIntListType))
        Console.ReadLine()
    End Sub
End Class
Class Room
End Class
Class Kitchen
    Inherits Room
End Class
Class Bedroom
    Inherits Room
End Class
Class Guestroom
    Inherits Bedroom
End Class
Class MasterBedroom
    Inherits Bedroom
End Class

using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
            // Demonstrate classes:
            Console.WriteLine("Defned Classes:");
            Room room1 = new Room();
            Kitchen kitchen1 = new Kitchen();
            Bedroom bedroom1 = new Bedroom();
            Guestroom guestroom1 = new Guestroom();
            MasterBedroom masterbedroom1 = new MasterBedroom();

            Type room1Type = room1.GetType();
            Type kitchen1Type = kitchen1.GetType();
            Type bedroom1Type = bedroom1.GetType();
            Type guestroom1Type = guestroom1.GetType();
            Type masterbedroom1Type = masterbedroom1.GetType();

            Console.WriteLine("room assignable from kitchen: {0}", room1Type.IsAssignableFrom(kitchen1Type));
            Console.WriteLine("bedroom assignable from guestroom: {0}", bedroom1Type.IsAssignableFrom(guestroom1Type));
            Console.WriteLine("kitchen assignable from masterbedroom: {0}", kitchen1Type.IsAssignableFrom(masterbedroom1Type));

            // Demonstrate arrays:
            Console.WriteLine();
            Console.WriteLine("Integer arrays:");

            int[] array2 = new int[2];
            int[] array10 = new int[10];
            int[,] array22 = new int[2, 2];
            int[,] array24 = new int[2, 4];

            Type array2Type = array2.GetType();
            Type array10Type = array10.GetType();
            Type array22Type = array22.GetType();
            Type array24Type = array24.GetType();

            Console.WriteLine("int[2] assignable from int[10]: {0}", array2Type.IsAssignableFrom(array10Type));
            Console.WriteLine("int[2] assignable from int[2,4]: {0}", array2Type.IsAssignableFrom(array24Type));
            Console.WriteLine("int[2,4] assignable from int[2,2]: {0}", array24Type.IsAssignableFrom(array22Type));

            // Demonstrate generics:
            Console.WriteLine();
            Console.WriteLine("Generics:");

            // Note that "int?[]" is the same as "Nullable<int>[]"
            int?[] arrayNull = new int?[10];
            List<int> genIntList = new List<int>();
            List<Type> genTList = new List<Type>();

            Type arrayNullType = arrayNull.GetType();
            Type genIntListType = genIntList.GetType();
            Type genTListType = genTList.GetType();

            Console.WriteLine("int[10] assignable from int?[10]: {0}", array10Type.IsAssignableFrom(arrayNullType));
            Console.WriteLine("List<int> assignable from List<Type>: {0}", genIntListType.IsAssignableFrom(genTListType));
            Console.WriteLine("List<Type> assignable from List<int>: {0}", genTListType.IsAssignableFrom(genIntListType));

            Console.ReadLine();

    }
}
class Room
{
}

class Kitchen : Room
{
}

class Bedroom : Room
{
}

class Guestroom : Bedroom
{
}

class MasterBedroom : Bedroom
{
}

此代码示例产生以下输出：

Defned Classes:
room assignable from kitchen: True
bedroom assignable from guestroom: True
kitchen assignable from masterbedroom: False

Integer arrays:
int[2] assignable from int[10]: True
int[2] assignable from int[2,4]: False
int[2,4] assignable from int[2,2]: True

Generics:
int[10] assignable from int?[10]: False
List<int> assignable from List<Type>: False
List<Type> assignable from List<int>: True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间


Type ..::.IsByRefImpl 方法

Type
.
.
::
.
IsByRefImpl 方法
Type 类

当在派生类中重写时，实现 IsByRef 属性并确定 Type 是否由引用传递。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function IsByRefImpl As Boolean
protected abstract bool IsByRefImpl()
protected:
virtual bool IsByRefImpl() abstract
abstract IsByRefImpl : unit -> bool

返回值

类型： System Boolean
如果 Type 按引用传递，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
IsByRef


Type ..::.IsCOMObjectImpl 方法

Type
.
.
::
.
IsCOMObjectImpl 方法
Type 类

当在派生类中重写时，实现 IsCOMObject 属性并确定 Type 是否为 COM 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function IsCOMObjectImpl As Boolean
protected abstract bool IsCOMObjectImpl()
protected:
virtual bool IsCOMObjectImpl() abstract
abstract IsCOMObjectImpl : unit -> bool

返回值

类型： System Boolean
如果 Type 为 COM 对象，则为 true；否则为 false。

此方法对 COM 接口返回 false，因为 COM 接口不是对象。COM 接口可由 Microsoft .NET Framework 对象实现。 此方法对 COM 接口返回 false，因为 COM 接口不是对象。COM 接口可由 Microsoft .NET Framework 对象实现。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
IsCOMObject


Type ..::.IsContextfulImpl 方法

Type
.
.
::
.
IsContextfulImpl 方法
Type 类

实现 IsContextful 属性并确定 Type 在上下文中是否可以被承载。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function IsContextfulImpl As Boolean
protected virtual bool IsContextfulImpl()
protected:
virtual bool IsContextfulImpl()
abstract IsContextfulImpl : unit -> bool
override IsContextfulImpl : unit -> bool

返回值

类型： System Boolean
如果 Type 能够在某个上下文中承载，则为 true；否则为 false。

此方法可由派生类重写。

上下文截获对类成员的调用，并实施应用到类的策略（例如同步）。

下面的示例说明 IsContextfulImpl 方法的用法。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class MyTypeDelegatorClass
    Inherits TypeDelegator
    Public myElementType As String = Nothing
    Private myType As Type = Nothing
    Public Sub New(ByVal myType As Type)
        MyBase.New(myType)
        Me.myType = myType
    End Sub 'New
    ' Override IsContextfulImpl.
    Protected Overrides Function IsContextfulImpl() As Boolean
        ' Check whether the type is contextful.
        If myType.IsContextful Then
            myElementType = " is contextful "
            Return True
        End If
        Return False
    End Function 'IsContextfulImpl
End Class 'MyTypeDelegatorClass
Public Class MyTypeDemoClass
    Public Shared Sub Main()
        Try
            Dim myType As MyTypeDelegatorClass
            Console.WriteLine("Check whether MyContextBoundClass can be hosted in a context.")
            ' Check whether MyContextBoundClass is contextful.
            myType = New MyTypeDelegatorClass(GetType(MyContextBoundClass))
            If myType.IsContextful Then
                Console.WriteLine(GetType(MyContextBoundClass).ToString() + " can be hosted in a context.")
            Else
                Console.WriteLine(GetType(MyContextBoundClass).ToString() + " cannot be hosted in a context.")
            End If
            ' Check whether the int type is contextful.
            myType = New MyTypeDelegatorClass(GetType(MyTypeDemoClass))
            Console.WriteLine(ControlChars.NewLine + "Check whether MyTypeDemoClass can be hosted in a context.")
            If myType.IsContextful Then
                Console.WriteLine(GetType(MyTypeDemoClass).ToString() + " can be hosted in a context.")
            Else
                Console.WriteLine(GetType(MyTypeDemoClass).ToString() + " cannot be hosted in a context.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeDemoClass
' This class demonstrates the IsContextfulImpl method.
Public Class MyContextBoundClass
    Inherits ContextBoundObject
    Public myString As String = "This class is used to demonstrate members of the Type class."
End Class 'MyContextBoundClass

using System;
using System.Reflection;
public class MyTypeDelegatorClass : TypeDelegator
{
    public string myElementType = null;
    private Type myType = null ;

    public MyTypeDelegatorClass(Type myType) : base(myType)
    {
        this.myType = myType;
    }
    // Override IsContextfulImpl.
    protected override bool IsContextfulImpl()
    {
        // Check whether the type is contextful.
        if(myType.IsContextful)
        {
            myElementType = " is contextful ";
            return true;
        }
        return false;
    }
}
public class MyTypeDemoClass
{
    public static void Main()
    {
        try
        {
            MyTypeDelegatorClass myType;
            Console.WriteLine ("Check whether MyContextBoundClass can be hosted in a context.");
            // Check whether MyContextBoundClass is contextful.
            myType = new MyTypeDelegatorClass(typeof(MyContextBoundClass));
            if( myType.IsContextful)
            {
                Console.WriteLine(typeof(MyContextBoundClass) + " can be hosted in a context.");
            }
            else
            {
                Console.WriteLine(typeof(MyContextBoundClass) + " cannot be hosted in a context.");
            }
            // Check whether the int type is contextful.
            myType = new MyTypeDelegatorClass(typeof(MyTypeDemoClass));
            Console.WriteLine ("\nCheck whether MyTypeDemoClass can be hosted in a context.");
            if( myType.IsContextful)
            {
                Console.WriteLine(typeof(MyTypeDemoClass) + " can be hosted in a context.");
            }
            else
            {
                Console.WriteLine(typeof(MyTypeDemoClass) + " cannot be hosted in a context.");
            }
        }
        catch( Exception e )
        {
            Console.WriteLine("Exception: {0}", e.Message);
        }
    }
}
// This class demonstrates IsContextfulImpl.
public class MyContextBoundClass : ContextBoundObject
{
    public string myString = "This class is used to demonstrate members of the Type class.";
}

using namespace System;
using namespace System::Reflection;

public ref class MyTypeDelegatorClass: public TypeDelegator
{
public:
   String^ myElementType;

private:
   Type^ myType;

public:
   MyTypeDelegatorClass( Type^ myType )
      : TypeDelegator( myType )
   {
      this->myType = myType;
   }

protected:

   // Override IsContextfulImpl.
   virtual bool IsContextfulImpl() override
   {

      // Check whether the type is contextful.
      if ( myType->IsContextful )
      {
         myElementType = " is contextful ";
         return true;
      }

      return false;
   }

};

public ref class MyTypeDemoClass{};

// This class demonstrates IsContextfulImpl.
public ref class MyContextBoundClass: public ContextBoundObject
{
public:
   String^ myString;
};

int main()
{
   try
   {
      MyTypeDelegatorClass^ myType;
      Console::WriteLine( "Check whether MyContextBoundClass can be hosted in a context." );

      // Check whether MyContextBoundClass is contextful.
      myType = gcnew MyTypeDelegatorClass( MyContextBoundClass::typeid );
      if ( myType->IsContextful )
      {
         Console::WriteLine( "{0} can be hosted in a context.", MyContextBoundClass::typeid );
      }
      else
      {
         Console::WriteLine( "{0} cannot be hosted in a context.", MyContextBoundClass::typeid );
      }
      myType = gcnew MyTypeDelegatorClass( MyTypeDemoClass::typeid );
      Console::WriteLine( "\nCheck whether MyTypeDemoClass can be hosted in a context." );
      if ( myType->IsContextful )
      {
         Console::WriteLine( "{0} can be hosted in a context.", MyTypeDemoClass::typeid );
      }
      else
      {
         Console::WriteLine( "{0} cannot be hosted in a context.", MyTypeDemoClass::typeid );
      }
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
IsContextful


Type ..::.IsEnumDefined 方法

Type
.
.
::
.
IsEnumDefined 方法
Type 类

返回一个值，该值指示当前的枚举类型中是否存在指定的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IsEnumDefined ( _
    value As Object _
) As Boolean
public virtual bool IsEnumDefined(
    Object value
)
public:
virtual bool IsEnumDefined(
    Object^ value
)
abstract IsEnumDefined :
        value:Object -> bool
override IsEnumDefined :
        value:Object -> bool

参数

value
类型： System Object
要测试的值。

返回值

类型： System Boolean
如果指定的值是当前枚举类型的成员，则为 true；否则为 false。
异常 | 条件
ArgumentException | 当前类型不是枚举。
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | value 的类型不能是枚举的基础类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.IsEquivalentTo 方法

Type
.
.
::
.
IsEquivalentTo 方法
Type 类

确定两个 COM 类型是否具有相同的标识，以及是否符合类型等效的条件。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IsEquivalentTo ( _
    other As Type _
) As Boolean
public virtual bool IsEquivalentTo(
    Type other
)
public:
virtual bool IsEquivalentTo(
    Type^ other
)
abstract IsEquivalentTo :
        other:Type -> bool
override IsEquivalentTo :
        other:Type -> bool

参数

other
类型： System Type
要测试是否与当前类型等效的 COM 类型。

返回值

类型： System Boolean
如果 COM 类型等效，则为 true；否则为 false。如果一个类型位于为执行加载的程序集中，而另一个类型位于已加载到仅限反射上下文的程序集中，则此方法也返回 false。 如果 COM 类型等效，则为 true；否则为 false。如果一个类型位于为执行加载的程序集中，而另一个类型位于已加载到仅限反射上下文的程序集中，则此方法也返回 false。

从 .NET Framework 4 版 开始，公共语言运行时支持将 COM 类型的类型信息直接嵌入到托管程序集中，而不是要求托管程序集从 interop 程序集获取 COM 类型的类型信息。由于嵌入的类型信息只包含托管程序集实际所使用的类型和成员，因此两个托管程序集可能会具有相同 COM 类型的截然不同的视图。每个托管程序集使用不同的 Type 对象来表示各自的 COM 类型视图。公共语言运行时支持这些不同视图之间的类型等效性，这些类型包括接口、结构、枚举和委托。 从 .NET Framework 4 版 开始，公共语言运行时支持将 COM 类型的类型信息直接嵌入到托管程序集中，而不是要求托管程序集从 interop 程序集获取 COM 类型的类型信息。由于嵌入的类型信息只包含托管程序集实际所使用的类型和成员，因此两个托管程序集可能会具有相同 COM 类型的截然不同的视图。每个托管程序集使用不同的 Type 对象来表示各自的 COM 类型视图。公共语言运行时支持这些不同视图之间的类型等效性，这些类型包括接口、结构、枚举和委托。 从 .NET Framework 4 版 开始，公共语言运行时支持将 COM 类型的类型信息直接嵌入到托管程序集中，而不是要求托管程序集从 interop 程序集获取 COM 类型的类型信息。由于嵌入的类型信息只包含托管程序集实际所使用的类型和成员，因此两个托管程序集可能会具有相同 COM 类型的截然不同的视图。每个托管程序集使用不同的 Type 对象来表示各自的 COM 类型视图。公共语言运行时支持这些不同视图之间的类型等效性，这些类型包括接口、结构、枚举和委托。 从 .NET Framework 4 版 开始，公共语言运行时支持将 COM 类型的类型信息直接嵌入到托管程序集中，而不是要求托管程序集从 interop 程序集获取 COM 类型的类型信息。由于嵌入的类型信息只包含托管程序集实际所使用的类型和成员，因此两个托管程序集可能会具有相同 COM 类型的截然不同的视图。每个托管程序集使用不同的 Type 对象来表示各自的 COM 类型视图。公共语言运行时支持这些不同视图之间的类型等效性，这些类型包括接口、结构、枚举和委托。

类型等效性意味着，在两个托管程序集之间传递的 COM 对象在接收程序集中可以转换为适当的托管类型。IsEquivalentTo 方法使程序集可以确定从另一个程序集获得的 COM 对象的 COM 标识与第一个程序集自己的嵌入式互操作类型之一相同，因此可以强制转换为该类型。 类型等效性意味着，在两个托管程序集之间传递的 COM 对象在接收程序集中可以转换为适当的托管类型。IsEquivalentTo 方法使程序集可以确定从另一个程序集获得的 COM 对象的 COM 标识与第一个程序集自己的嵌入式互操作类型之一相同，因此可以强制转换为该类型。

有关更多信息，请参见类型等效性和嵌入的互操作类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.IsInstanceOfType 方法

Type
.
.
::
.
IsInstanceOfType 方法
Type 类

确定指定的对象是否是当前 Type 的实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IsInstanceOfType ( _
    o As Object _
) As Boolean
public virtual bool IsInstanceOfType(
    Object o
)
public:
virtual bool IsInstanceOfType(
    Object^ o
)
abstract IsInstanceOfType :
        o:Object -> bool
override IsInstanceOfType :
        o:Object -> bool

参数

o
类型： System Object
将与当前 Type 进行比较的对象。

返回值

类型： System Boolean
如果满足下列任一条件，则为 true：当前 Type 位于由 o 表示的对象的继承层次结构中；当前 Type 是 o 支持的接口。如果不属于其中任一种情况，或者 o 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者当前 Type 为开放式泛型类型（即 ContainsGenericParameters 返回 true），则为 false。 如果满足下列任一条件，则为 true：当前 Type 位于由 o 表示的对象的继承层次结构中；当前 Type 是 o 支持的接口。如果不属于其中任一种情况，或者 o 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者当前 Type 为开放式泛型类型（即 ContainsGenericParameters 返回 true），则为 false。

实现

此方法可由派生类重写。

说明 说明

构造类型不是其泛型类型定义的实例。也就是说，MyGenericList<int>（在 Visual Basic 中为 MyGenericList(Of Integer)）不是 MyGenericList<T>（在 Visual Basic 中为 MyGenericList(Of T)）的实例。 构造类型不是其泛型类型定义的实例。也就是说，MyGenericList<int>（在 Visual Basic 中为 MyGenericList(Of Integer)）不是 MyGenericList<T>（在 Visual Basic 中为 MyGenericList(Of T)）的实例。

下面的示例演示 IsInstanceOfType 方法的用法。

Imports System
Public Interface IMyIfc
End Interface 'IMyIfc
Public Class [MyClass]
    Implements IMyIfc
End Class '[MyClass]
Public Class MyDerivedClass
    Inherits [MyClass]
End Class 'MyDerivedClass
Class IsInstanceTest
    Public Shared Sub Main()
        Dim imyifcType As Type = GetType(IMyIfc)
        Dim mc As New [MyClass]()
        Dim mcType As Type = mc.GetType()
        Dim mdc = New MyDerivedClass()
        Dim mdcType As Type = mdc.GetType()
        Dim array(10) As Integer
        Dim arrayType As Type = GetType(Array)
        Console.WriteLine("Is int[] an instance of the Array class? {0}.", arrayType.IsInstanceOfType(array))
        Console.WriteLine("Is myclass an instance of MyClass? {0}.", mcType.IsInstanceOfType(mc))
        Console.WriteLine("Is myderivedclass an instance of MyClass? {0}.", mcType.IsInstanceOfType(mdc))
        Console.WriteLine("Is myclass an instance of IMyIfc? {0}.", imyifcType.IsInstanceOfType(mc))
        Console.WriteLine("Is myderivedclass an instance of IMyIfc? {0}.", imyifcType.IsInstanceOfType(mdc))
    End Sub 'Main
End Class 'IsInstanceTest

using System;
public interface IMyIfc {}
public class MyClass : IMyIfc {}
public class MyDerivedClass : MyClass {}
class IsInstanceTest
{
    public static void Main()
    {
        Type imyifcType=typeof(IMyIfc);
        MyClass mc = new MyClass();
        Type mcType = mc.GetType();
        MyClass mdc = new MyDerivedClass();
        Type mdcType = mdc.GetType();
        int [] array  = new int [10];
        Type arrayType = typeof(Array);
        Console.WriteLine("Is int[] an instance of the Array class? {0}.", arrayType.IsInstanceOfType(array));
        Console.WriteLine("Is myclass an instance of MyClass? {0}.", mcType.IsInstanceOfType(mc));
        Console.WriteLine("Is myderivedclass an instance of MyClass? {0}.", mcType.IsInstanceOfType(mdc));
        Console.WriteLine("Is myclass an instance of IMyIfc? {0}.", imyifcType.IsInstanceOfType(mc));
        Console.WriteLine("Is myderivedclass an instance of IMyIfc? {0}.", imyifcType.IsInstanceOfType(mdc));
    }
}

using namespace System;
interface class IMyIfc{};
public ref class MyClass: public IMyIfc{};

public ref class MyDerivedClass: public MyClass{};

int main()
{
   Type^ imyifcType = IMyIfc::typeid;
   MyClass^ mc = gcnew MyClass;
   Type^ mcType = mc->GetType();
   MyClass^ mdc = gcnew MyDerivedClass;
   Type^ mdcType = mdc->GetType();
   array<Int32>^arr = gcnew array<Int32>(10);
   Type^ arrayType = Array::typeid;
   Console::WriteLine( "Is Int32[] an instance of the Array class? {0}.", arrayType->IsInstanceOfType( arr ) );
   Console::WriteLine( "Is myclass an instance of MyClass? {0}.", mcType->IsInstanceOfType( mc ) );
   Console::WriteLine( "Is myderivedclass an instance of MyClass? {0}.", mcType->IsInstanceOfType( mdc ) );
   Console::WriteLine( "Is myclass an instance of IMyIfc? {0}.", imyifcType->IsInstanceOfType( mc ) );
   Console::WriteLine( "Is myderivedclass an instance of IMyIfc? {0}.", imyifcType->IsInstanceOfType( mdc ) );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间


Type ..::.IsMarshalByRefImpl 方法

Type
.
.
::
.
IsMarshalByRefImpl 方法
Type 类

实现 IsMarshalByRef 属性并确定 Type 是否按引用来进行封送。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function IsMarshalByRefImpl As Boolean
protected virtual bool IsMarshalByRefImpl()
protected:
virtual bool IsMarshalByRefImpl()
abstract IsMarshalByRefImpl : unit -> bool
override IsMarshalByRefImpl : unit -> bool

返回值

类型： System Boolean
如果 Type 是由引用封送的，则为 true；否则为 false。

此方法可由派生类重写。

下面的示例确定是否按引用封送给定的类型，并显示结果。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class MyTypeDelegatorClass
    Inherits TypeDelegator
    Public myElementType As String = Nothing
    Private myType As Type = Nothing
    Public Sub New(ByVal myType As Type)
        MyBase.New(myType)
        Me.myType = myType
    End Sub 'New

    ' Override IsMarshalByRefImpl.
    Protected Overrides Function IsMarshalByRefImpl() As Boolean
        ' Determine whether the type is marshalled by reference.
        If myType.IsMarshalByRef Then
            myElementType = " marshalled by reference"
            Return True
        End If
        Return False
    End Function 'IsMarshalByRefImpl
End Class 'MyTypeDelegatorClass

Public Class MyTypeDemoClass

    Public Shared Sub Main()
        Try
            Dim myType As MyTypeDelegatorClass
            Console.WriteLine("Determine whether MyContextBoundClass is marshalled by reference.")
            ' Determine whether MyContextBoundClass is marshalled by reference.
            myType = New MyTypeDelegatorClass(GetType(MyContextBoundClass))
            If myType.IsMarshalByRef Then
                Console.WriteLine(GetType(MyContextBoundClass).ToString() + " is marshalled by reference.")
            Else
                Console.WriteLine(GetType(MyContextBoundClass).ToString() + " is not marshalled by reference.")
            End If

            ' Determine whether int is marshalled by reference.
            myType = New MyTypeDelegatorClass(GetType(Integer))
            Console.WriteLine(ControlChars.NewLine + "Determine whether int is marshalled by reference.")
            If myType.IsMarshalByRef Then
                Console.WriteLine(GetType(Integer).ToString() + " is marshalled by reference.")
            Else
                Console.WriteLine(GetType(Integer).ToString() + " is not marshalled by reference.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeDemoClass

' This class is used to demonstrate 'IsMarshalByRefImpl' method.
Public Class MyContextBoundClass
    Inherits ContextBoundObject
    Public myString As String = "This class is used to demonstrate members of the Type class."
End Class 'MyContextBoundClass

using System;
using System.Reflection;
public class MyTypeDelegatorClass : TypeDelegator
{
    public string myElementType = null;
    private Type myType = null ;
    public MyTypeDelegatorClass(Type myType) : base(myType)
    {
        this.myType = myType;
    }
    // Override IsMarshalByRefImpl.
    protected override bool IsMarshalByRefImpl()
    {
        // Determine whether the type is marshalled by reference.
        if(myType.IsMarshalByRef)
        {
            myElementType = " marshalled by reference";
            return true;
        }
        return false;
    }
}
public class MyTypeDemoClass
{
    public static void Main()
    {
        try
        {
            MyTypeDelegatorClass myType;
            Console.WriteLine ("Determine whether MyContextBoundClass is marshalled by reference.");
            // Determine whether MyContextBoundClass type is marshalled by reference.
            myType = new MyTypeDelegatorClass(typeof(MyContextBoundClass));
            if( myType.IsMarshalByRef )
            {
                Console.WriteLine(typeof(MyContextBoundClass) + " is marshalled by reference.");
            }
            else
            {
                Console.WriteLine(typeof(MyContextBoundClass) + " is not marshalled by reference.");
            }

            // Determine whether int type is marshalled by reference.
            myType = new MyTypeDelegatorClass(typeof(int));
            Console.WriteLine ("\nDetermine whether int is marshalled by reference.");
            if( myType.IsMarshalByRef)
            {
                Console.WriteLine(typeof(int) + " is marshalled by reference.");
            }
            else
            {
                Console.WriteLine(typeof(int) + " is not marshalled by reference.");
            }
        }
        catch( Exception e )
        {
            Console.WriteLine("Exception: {0}", e.Message);
        }
    }
}
// This class is used to demonstrate the IsMarshalByRefImpl method.
public class MyContextBoundClass : ContextBoundObject
{
    public string myString = "This class is used to demonstrate members of the Type class.";
}

using namespace System;
using namespace System::Reflection;
public ref class MyTypeDelegatorClass: public TypeDelegator
{
public:
   String^ myElementType;

private:
   Type^ myType;

public:
   MyTypeDelegatorClass( Type^ myType )
      : TypeDelegator( myType )
   {
      this->myType = myType;
   }

protected:

   // Override IsMarshalByRefImpl.
   virtual bool IsMarshalByRefImpl() override
   {
      // Determine whether the type is marshalled by reference.
      if ( myType->IsMarshalByRef )
      {
         myElementType = " marshalled by reference";
         return true;
      }

      return false;
   }
};

public ref class MyTypeDemoClass{};

// This class is used to demonstrate the IsMarshalByRefImpl method.
public ref class MyContextBoundClass: public ContextBoundObject
{
public:
   String^ myString;
};

int main()
{
   try
   {
      MyTypeDelegatorClass^ myType;
      Console::WriteLine( "Determine whether MyContextBoundClass is marshalled by reference." );

      // Determine whether MyContextBoundClass type is marshalled by reference.
      myType = gcnew MyTypeDelegatorClass( MyContextBoundClass::typeid );
      if ( myType->IsMarshalByRef )
      {
         Console::WriteLine( "{0} is marshalled by reference.", MyContextBoundClass::typeid );
      }
      else
      {
         Console::WriteLine( "{0} is not marshalled by reference.", MyContextBoundClass::typeid );
      }

      // Determine whether int type is marshalled by reference.
      myType = gcnew MyTypeDelegatorClass( int::typeid );
      Console::WriteLine( "\nDetermine whether int is marshalled by reference." );
      if ( myType->IsMarshalByRef )
      {
         Console::WriteLine( "{0} is marshalled by reference.", int::typeid );
      }
      else
      {
         Console::WriteLine( "{0} is not marshalled by reference.", int::typeid );
      }
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
IsMarshalByRef


Type ..::.IsPointerImpl 方法

Type
.
.
::
.
IsPointerImpl 方法
Type 类

当在派生类中重写时，实现 IsPointer 属性并确定 Type 是否为指针。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function IsPointerImpl As Boolean
protected abstract bool IsPointerImpl()
protected:
virtual bool IsPointerImpl() abstract
abstract IsPointerImpl : unit -> bool

返回值

类型： System Boolean
如果 Type 是指针，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
IsPointer


Type ..::.IsPrimitiveImpl 方法

Type
.
.
::
.
IsPrimitiveImpl 方法
Type 类

当在派生类中重写时，实现 IsPrimitive 属性并确定 Type 是否为基元类型之一。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected MustOverride Function IsPrimitiveImpl As Boolean
protected abstract bool IsPrimitiveImpl()
protected:
virtual bool IsPrimitiveImpl() abstract
abstract IsPrimitiveImpl : unit -> bool

返回值

类型： System Boolean
如果 Type 为基元类型之一，则为 true；否则为 false。

基元类型是 Boolean、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Char、Double 和 Single。

下面的示例确定给定的类型是否是基元类型，并显示结果。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class MyTypeDelegatorClass
    Inherits TypeDelegator
    Public myElementType As String = Nothing
    Private myType As Type = Nothing
    Public Sub New(ByVal myType As Type)
        MyBase.New(myType)
        Me.myType = myType
    End Sub 'New
    ' Override the IsPrimitiveImpl method.
    Protected Overrides Function IsPrimitiveImpl() As Boolean
        ' Determine whether the type is a primitive type.
        If myType.IsPrimitive Then
            myElementType = "primitive"
            Return True
        End If
        Return False
    End Function 'IsPrimitiveImpl
End Class 'MyTypeDelegatorClass
Public Class MyTypeDemoClass
    Public Shared Sub Main()
        Try
            Console.WriteLine("Determine whether int is a primitive type.")
            Dim myType As MyTypeDelegatorClass
            myType = New MyTypeDelegatorClass(GetType(Integer))
            ' Determine whether int is a primitive type.
            If myType.IsPrimitive Then
                Console.WriteLine(GetType(Integer).ToString() + " is a primitive type.")
            Else
                Console.WriteLine(GetType(Integer).ToString() + " is not a primitive type.")
            End If
            Console.WriteLine(ControlChars.NewLine + "Determine whether string is a primitive type.")
            myType = New MyTypeDelegatorClass(GetType(String))
            ' Determine whether string is a primitive type.
            If myType.IsPrimitive Then
                Console.WriteLine(GetType(String).ToString() + " is a primitive type.")
            Else
                Console.WriteLine(GetType(String).ToString() + " is not a primitive type.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeDemoClass

using System;
using System.Reflection;
public class MyTypeDelegatorClass : TypeDelegator
{
    public string myElementType = null;
    private Type myType = null ;
    public MyTypeDelegatorClass(Type myType) : base(myType)
    {
        this.myType = myType;
    }
    // Override the IsPrimitiveImpl.
    protected override bool IsPrimitiveImpl()
    {
        // Determine whether the type is a primitive type.
        if(myType.IsPrimitive)
        {
            myElementType = "primitive";
            return true;
        }
        return false;
    }
}
public class MyTypeDemoClass
{
    public static void Main()
    {
        try
        {
            Console.WriteLine ("Determine whether int is a primitive type.");
            MyTypeDelegatorClass myType;
            myType = new MyTypeDelegatorClass(typeof(int));
            // Determine whether int is a primitive type.
            if( myType.IsPrimitive)
            {
                Console.WriteLine(typeof(int) + " is a primitive type.");
            }
            else
            {
                Console.WriteLine(typeof(int) + " is not a primitive type.");
            }
            Console.WriteLine ("\nDetermine whether string is a primitive type.");
            myType = new MyTypeDelegatorClass(typeof(string));
            // Determine if string is a primitive type.
            if( myType.IsPrimitive)
            {
                Console.WriteLine(typeof(string) + " is a primitive type.");
            }
            else
            {
                Console.WriteLine(typeof(string) + " is not a primitive type.");
            }
        }
        catch( Exception e )
        {
            Console.WriteLine("Exception: {0}", e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;

public ref class MyTypeDelegatorClass: public TypeDelegator
{
public:
   String^ myElementType;

private:
   Type^ myType;

public:
   MyTypeDelegatorClass( Type^ myType )
      : TypeDelegator( myType )
   {
      this->myType = myType;
   }

protected:

   // Override the IsPrimitiveImpl.
   virtual bool IsPrimitiveImpl() override
   {

      // Determine whether the type is a primitive type.
      if ( myType->IsPrimitive )
      {
         myElementType = "primitive";
         return true;
      }

      return false;
   }
};

int main()
{
   try
   {
      Console::WriteLine( "Determine whether int is a primitive type." );
      MyTypeDelegatorClass^ myType;
      myType = gcnew MyTypeDelegatorClass( int::typeid );

      // Determine whether int is a primitive type.
      if ( myType->IsPrimitive )
      {
         Console::WriteLine( "{0} is a primitive type.", int::typeid );
      }
      else
      {
         Console::WriteLine( "{0} is not a primitive type.", int::typeid );
      }
      Console::WriteLine( "\nDetermine whether String is a primitive type." );
      myType = gcnew MyTypeDelegatorClass( String::typeid );

      // Determine if String is a primitive type.
      if ( myType->IsPrimitive )
      {
         Console::WriteLine( "{0} is a primitive type.", String::typeid );
      }
      else
      {
         Console::WriteLine( "{0} is not a primitive type.", String::typeid );
      }
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
Boolean
Byte
SByte
Int16
UInt16
Int32
UInt32
Int64
UInt64
Char
Double
Single
IsPrimitive


Type ..::.IsSubclassOf 方法

Type
.
.
::
.
IsSubclassOf 方法
Type 类

确定当前 Type 表示的类是否是从指定的 Type 表示的类派生的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Overridable Function IsSubclassOf ( _
    c As Type _
) As Boolean
[ComVisibleAttribute(true)]
public virtual bool IsSubclassOf(
    Type c
)
[ComVisibleAttribute(true)]
public:
virtual bool IsSubclassOf(
    Type^ c
)
[<ComVisibleAttribute(true)>]
abstract IsSubclassOf :
        c:Type -> bool
[<ComVisibleAttribute(true)>]
override IsSubclassOf :
        c:Type -> bool

参数

c
类型： System Type
与当前的 Type 进行比较的 Type。

返回值

类型： System Boolean
如果 Type 由 c 参数表示并且当前的 Type 表示类，并且当前的 Type 所表示的类是从 c 所表示的类派生的，则为 true；否则为 false。如果 c 和当前的 Type 表示相同的类，则此方法还返回 false。 如果 Type 由 c 参数表示并且当前的 Type 表示类，并且当前的 Type 所表示的类是从 c 所表示的类派生的，则为 true；否则为 false。如果 c 和当前的 Type 表示相同的类，则此方法还返回 false。

实现

异常 | 条件
ArgumentNullException | c 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

IsSubclassOf 方法不能用于确定某个接口是否派生自另一个接口或某个类是否实现了某个接口。对于此目的，应该使用 GetInterface 方法。请注意，如果某个类型是从接口派生的，而且该类型是 Object 的子类，则此方法将返回 true。 IsSubclassOf 方法不能用于确定某个接口是否派生自另一个接口或某个类是否实现了某个接口。对于此目的，应该使用 GetInterface 方法。请注意，如果某个类型是从接口派生的，而且该类型是 Object 的子类，则此方法将返回 true。 IsSubclassOf 方法不能用于确定某个接口是否派生自另一个接口或某个类是否实现了某个接口。对于此目的，应该使用 GetInterface 方法。请注意，如果某个类型是从接口派生的，而且该类型是 Object 的子类，则此方法将返回 true。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则它派生自其类约束；如果它没有类约束，则派生自 System..::.Object。

说明 说明

如果 IsSubclassOf 是 IsAssignableFrom 的逆反。也就是说，如果 t1.IsSubclassOf(t2) 为 true，则 t2.IsAssignableFrom(t1) 也为 true。 如果 IsSubclassOf 是 IsAssignableFrom 的逆反。也就是说，如果 t1.IsSubclassOf(t2) 为 true，则 t2.IsAssignableFrom(t1) 也为 true。

此方法可由派生类重写。

下面的示例演示如何通过创建类的实例及其派生类的实例来使用 IsSubclassOf 方法。

Imports System

Public Class Class1
End Class

Public Class DerivedC1
    Inherits Class1
End Class

Class IsSubclassTest

    Public Shared Sub Main()
        Dim myC1 As Class1 = New Class1
        Dim myDClass As DerivedC1 = New DerivedC1
        Dim myClassType As Type = myC1.GetType
        Dim myDClassType As Type = myDClass.GetType

        ' Returns true:
        Console.WriteLine("myDClass subclass of myClass: {0}", myDClassType.IsSubclassOf(myClassType))
        Console.ReadLine()
    End Sub
End Class

using System;

public class Class1 { }
public class DerivedC1 : Class1 { }

class IsSubclassTest
{
    public static void Main()
    {
        Class1 myClass = new Class1();
        DerivedC1 myDClass = new DerivedC1();
        Type myClassType = myClass.GetType();
        Type myDClassType = myDClass.GetType();

        // Returns true:
        Console.WriteLine("myDClass subclass of myClass: {0}", myDClassType.IsSubclassOf(myClassType));
        Console.ReadLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
BaseType


Type ..::.IsValueTypeImpl 方法

Type
.
.
::
.
IsValueTypeImpl 方法
Type 类

实现 IsValueType 属性并确定 Type 是否是值类型；即，它不是类或接口。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function IsValueTypeImpl As Boolean
protected virtual bool IsValueTypeImpl()
protected:
virtual bool IsValueTypeImpl()
abstract IsValueTypeImpl : unit -> bool
override IsValueTypeImpl : unit -> bool

返回值

类型： System Boolean
如果 Type 是值类型，则为 true；否则为 false。

之所以提供此方法，是为了能够实现替代类型系统。通常不在应用程序代码中使用。 之所以提供此方法，是为了能够实现替代类型系统。通常不在应用程序代码中使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
IsClass
IsInterface
ValueType
IsValueType


Type ..::.MakeArrayType 方法

Type
.
.
::
.
MakeArrayType 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

返回表示当前类型的数组的 Type 对象。

名称 说明
页首

参考

Type 类
Type 成员
System 命名空间


Type ..::.MakeArrayType 方法

Type
.
.
::
.
MakeArrayType 方法
Type 类

返回一个表示当前类型的一维数组（下限为零）的 Type 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function MakeArrayType As Type
public virtual Type MakeArrayType()
public:
virtual Type^ MakeArrayType()
abstract MakeArrayType : unit -> Type
override MakeArrayType : unit -> Type

返回值

类型： System Type
返回一个表示当前类型的一维数组（下限为零）的 Type 对象。
异常 | 条件
NotSupportedException | 基类不支持所调用的方法。派生类必须提供实现。 基类不支持所调用的方法。派生类必须提供实现。

MakeArrayType 方法提供了一种生成元素类型在运行时计算的数组类型的方式。

注意   公共语言运行时对向量（即始终从零开始的一维数组）和多维数组进行了区分。向量始终只有一个维度，它与恰好只有一个维度的多维数组不同。此方法重载只能用来创建向量类型，而且是创建向量类型的唯一方法。请使用 MakeArrayType(Int32) 方法重载来创建多维数组类型。
注意   公共语言运行时对向量（即始终从零开始的一维数组）和多维数组进行了区分。向量始终只有一个维度，它与恰好只有一个维度的多维数组不同。此方法重载只能用来创建向量类型，而且是创建向量类型的唯一方法。请使用 MakeArrayType(Int32) 方法重载来创建多维数组类型。
注意   公共语言运行时对向量（即始终从零开始的一维数组）和多维数组进行了区分。向量始终只有一个维度，它与恰好只有一个维度的多维数组不同。此方法重载只能用来创建向量类型，而且是创建向量类型的唯一方法。请使用 MakeArrayType(Int32) 方法重载来创建多维数组类型。
注意   公共语言运行时对向量（即始终从零开始的一维数组）和多维数组进行了区分。向量始终只有一个维度，它与恰好只有一个维度的多维数组不同。此方法重载只能用来创建向量类型，而且是创建向量类型的唯一方法。请使用 MakeArrayType(Int32) 方法重载来创建多维数组类型。

下面的代码示例为 Test 类创建数组、ref（在 Visual Basic 中为 ByRef）和指针类型。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Create a Type object that represents a one-dimensional
        ' array of Example objects.
        Dim t As Type = GetType(Example).MakeArrayType()
        Console.WriteLine(vbCrLf & "Array of Example: " & t.ToString())

        ' Create a Type object that represents a two-dimensional
        ' array of Example objects.
        t = GetType(Example).MakeArrayType(2)
        Console.WriteLine(vbCrLf & "Two-dimensional array of Example: " & t.ToString())

        ' Demonstrate an exception when an invalid array rank is
        ' specified.
        Try
            t = GetType(Example).MakeArrayType(-1)
        Catch ex As Exception
            Console.WriteLine(vbCrLf & ex.ToString())
        End Try

        ' Create a Type object that represents a ByRef parameter
        ' of type Example.
        t = GetType(Example).MakeByRefType()
        Console.WriteLine(vbCrLf & "ByRef Example: " & t.ToString())

        ' Get a Type object representing the Example class, a
        ' MethodInfo representing the "Test" method, a ParameterInfo
        ' representing the parameter of type Example, and finally
        ' a Type object representing the type of this ByRef parameter.
        ' Compare this Type object with the Type object created using
        ' MakeByRefType.
        Dim t2 As Type = GetType(Example)
        Dim mi As MethodInfo = t2.GetMethod("Test")
        Dim pi As ParameterInfo = mi.GetParameters()(0)
        Dim pt As Type = pi.ParameterType
        Console.WriteLine("Are the ByRef types equal? " & (t Is pt))

        ' Create a Type object that represents a pointer to an
        ' Example object.
        t = GetType(Example).MakePointerType()
        Console.WriteLine(vbCrLf & "Pointer to Example: " & t.ToString())
    End Sub

    ' A sample method with a ByRef parameter.
    '
    Public Sub Test(ByRef e As Example)
    End Sub
End Class

' This example produces output similar to the following:
'
'Array of Example: Example[]
'
'Two-dimensional array of Example: Example[,]
'
'System.IndexOutOfRangeException: Index was outside the bounds of the array.
'   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
'   at Example.Main()
'
'ByRef Example: Example&
'Are the ByRef types equal? True
'
'Pointer to Example: Example*

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        // Create a Type object that represents a one-dimensional
        // array of Example objects.
        Type t = typeof(Example).MakeArrayType();
        Console.WriteLine("\r\nArray of Example: {0}", t);

        // Create a Type object that represents a two-dimensional
        // array of Example objects.
        t = typeof(Example).MakeArrayType(2);
        Console.WriteLine("\r\nTwo-dimensional array of Example: {0}", t);

        // Demonstrate an exception when an invalid array rank is
        // specified.
        try
        {
            t = typeof(Example).MakeArrayType(-1);
        }
        catch(Exception ex)
        {
            Console.WriteLine("\r\n{0}", ex);
        }

        // Create a Type object that represents a ByRef parameter
        // of type Example.
        t = typeof(Example).MakeByRefType();
        Console.WriteLine("\r\nByRef Example: {0}", t);

        // Get a Type object representing the Example class, a
        // MethodInfo representing the "Test" method, a ParameterInfo
        // representing the parameter of type Example, and finally
        // a Type object representing the type of this ByRef parameter.
        // Compare this Type object with the Type object created using
        // MakeByRefType.
        Type t2 = typeof(Example);
        MethodInfo mi = t2.GetMethod("Test");
        ParameterInfo pi = mi.GetParameters()[0];
        Type pt = pi.ParameterType;
        Console.WriteLine("Are the ByRef types equal? {0}", (t == pt));

        // Create a Type object that represents a pointer to an
        // Example object.
        t = typeof(Example).MakePointerType();
        Console.WriteLine("\r\nPointer to Example: {0}", t);
    }

    // A sample method with a ByRef parameter.
    //
    public void Test(ref Example e)
    {
    }
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */

using namespace System;
using namespace System::Reflection;

public ref class Example
{
public:
   static void Main()
   {
      // Create a Type object that represents a one-dimensional
      // array of Example objects.
      Type^ t = Example::typeid->MakeArrayType();
      Console::WriteLine( L"\r\nArray of Example: {0}", t );

      // Create a Type object that represents a two-dimensional
      // array of Example objects.
      t = Example::typeid->MakeArrayType( 2 );
      Console::WriteLine( L"\r\nTwo-dimensional array of Example: {0}", t );

      // Demonstrate an exception when an invalid array rank is
      // specified.
      try
      {
         t = Example::typeid->MakeArrayType(  -1 );
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( L"\r\n{0}", ex );
      }

      // Create a Type object that represents a ByRef parameter
      // of type Example.
      t = Example::typeid->MakeByRefType();
      Console::WriteLine( L"\r\nByRef Example: {0}", t );

      // Get a Type object representing the Example class, a
      // MethodInfo representing the "Test" method, a ParameterInfo
      // representing the parameter of type Example, and finally
      // a Type object representing the type of this ByRef parameter.
      // Compare this Type object with the Type object created using
      // MakeByRefType.
      Type^ t2 = Example::typeid;
      MethodInfo^ mi = t2->GetMethod( L"Test" );
      ParameterInfo^ pi = mi->GetParameters()[ 0 ];
      Type^ pt = pi->ParameterType;
      Console::WriteLine( L"Are the ByRef types equal? {0}", (t == pt) );

      // Create a Type object that represents a pointer to an
      // Example object.
      t = Example::typeid->MakePointerType();
      Console::WriteLine( L"\r\nPointer to Example: {0}", t );
   }

   // A sample method with a ByRef parameter.
   //
   void Test( interior_ptr<Example^> /*e*/ )
   {
   }
};

int main()
{
   Example::Main();
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
MakeArrayType 重载
System 命名空间
MakeByRefType
MakePointerType


Type ..::.MakeArrayType 方法 (Int32)

Type
.
.
::
.
MakeArrayType 方法 (Int32)
Type 类

返回表示当前类型的指定维数的数组的 Type 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function MakeArrayType ( _
    rank As Integer _
) As Type
public virtual Type MakeArrayType(
    int rank
)
public:
virtual Type^ MakeArrayType(
    int rank
)
abstract MakeArrayType :
        rank:int -> Type
override MakeArrayType :
        rank:int -> Type

参数

rank
类型： System Int32
数组的维数。

返回值

类型： System Type
表示当前类型的指定维数的数组的 Type 对象。
异常 | 条件
IndexOutOfRangeException | rank 无效。例如，0 或负数。 rank 无效。例如，0 或负数。
NotSupportedException | 基类不支持所调用的方法。

MakeArrayType 方法提供了一种生成元素类型在运行时计算的数组类型的方式。

说明 说明

公共语言运行时对向量（即始终从零开始的一维数组）和多维数组进行了区分。向量始终只有一个维度，它与恰好只有一个维度的多维数组不同。不能使用此方法重载来创建向量类型；如果 rank 为 1，则此方法重载返回恰巧具有一维的多维数组类型。请使用 MakeArrayType()()() 方法重载来创建向量类型。 公共语言运行时对向量（即始终从零开始的一维数组）和多维数组进行了区分。向量始终只有一个维度，它与恰好只有一个维度的多维数组不同。不能使用此方法重载来创建向量类型；如果 rank 为 1，则此方法重载返回恰巧具有一维的多维数组类型。请使用 MakeArrayType()()() 方法重载来创建向量类型。 公共语言运行时对向量（即始终从零开始的一维数组）和多维数组进行了区分。向量始终只有一个维度，它与恰好只有一个维度的多维数组不同。不能使用此方法重载来创建向量类型；如果 rank 为 1，则此方法重载返回恰巧具有一维的多维数组类型。请使用 MakeArrayType()()() 方法重载来创建向量类型。 公共语言运行时对向量（即始终从零开始的一维数组）和多维数组进行了区分。向量始终只有一个维度，它与恰好只有一个维度的多维数组不同。不能使用此方法重载来创建向量类型；如果 rank 为 1，则此方法重载返回恰巧具有一维的多维数组类型。请使用 MakeArrayType()()() 方法重载来创建向量类型。

下面的代码示例为 Test 类创建数组、ref（在 Visual Basic 中为 ByRef）和指针类型。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Create a Type object that represents a one-dimensional
        ' array of Example objects.
        Dim t As Type = GetType(Example).MakeArrayType()
        Console.WriteLine(vbCrLf & "Array of Example: " & t.ToString())

        ' Create a Type object that represents a two-dimensional
        ' array of Example objects.
        t = GetType(Example).MakeArrayType(2)
        Console.WriteLine(vbCrLf & "Two-dimensional array of Example: " & t.ToString())

        ' Demonstrate an exception when an invalid array rank is
        ' specified.
        Try
            t = GetType(Example).MakeArrayType(-1)
        Catch ex As Exception
            Console.WriteLine(vbCrLf & ex.ToString())
        End Try

        ' Create a Type object that represents a ByRef parameter
        ' of type Example.
        t = GetType(Example).MakeByRefType()
        Console.WriteLine(vbCrLf & "ByRef Example: " & t.ToString())

        ' Get a Type object representing the Example class, a
        ' MethodInfo representing the "Test" method, a ParameterInfo
        ' representing the parameter of type Example, and finally
        ' a Type object representing the type of this ByRef parameter.
        ' Compare this Type object with the Type object created using
        ' MakeByRefType.
        Dim t2 As Type = GetType(Example)
        Dim mi As MethodInfo = t2.GetMethod("Test")
        Dim pi As ParameterInfo = mi.GetParameters()(0)
        Dim pt As Type = pi.ParameterType
        Console.WriteLine("Are the ByRef types equal? " & (t Is pt))

        ' Create a Type object that represents a pointer to an
        ' Example object.
        t = GetType(Example).MakePointerType()
        Console.WriteLine(vbCrLf & "Pointer to Example: " & t.ToString())
    End Sub

    ' A sample method with a ByRef parameter.
    '
    Public Sub Test(ByRef e As Example)
    End Sub
End Class

' This example produces output similar to the following:
'
'Array of Example: Example[]
'
'Two-dimensional array of Example: Example[,]
'
'System.IndexOutOfRangeException: Index was outside the bounds of the array.
'   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
'   at Example.Main()
'
'ByRef Example: Example&
'Are the ByRef types equal? True
'
'Pointer to Example: Example*

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        // Create a Type object that represents a one-dimensional
        // array of Example objects.
        Type t = typeof(Example).MakeArrayType();
        Console.WriteLine("\r\nArray of Example: {0}", t);

        // Create a Type object that represents a two-dimensional
        // array of Example objects.
        t = typeof(Example).MakeArrayType(2);
        Console.WriteLine("\r\nTwo-dimensional array of Example: {0}", t);

        // Demonstrate an exception when an invalid array rank is
        // specified.
        try
        {
            t = typeof(Example).MakeArrayType(-1);
        }
        catch(Exception ex)
        {
            Console.WriteLine("\r\n{0}", ex);
        }

        // Create a Type object that represents a ByRef parameter
        // of type Example.
        t = typeof(Example).MakeByRefType();
        Console.WriteLine("\r\nByRef Example: {0}", t);

        // Get a Type object representing the Example class, a
        // MethodInfo representing the "Test" method, a ParameterInfo
        // representing the parameter of type Example, and finally
        // a Type object representing the type of this ByRef parameter.
        // Compare this Type object with the Type object created using
        // MakeByRefType.
        Type t2 = typeof(Example);
        MethodInfo mi = t2.GetMethod("Test");
        ParameterInfo pi = mi.GetParameters()[0];
        Type pt = pi.ParameterType;
        Console.WriteLine("Are the ByRef types equal? {0}", (t == pt));

        // Create a Type object that represents a pointer to an
        // Example object.
        t = typeof(Example).MakePointerType();
        Console.WriteLine("\r\nPointer to Example: {0}", t);
    }

    // A sample method with a ByRef parameter.
    //
    public void Test(ref Example e)
    {
    }
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */

using namespace System;
using namespace System::Reflection;

public ref class Example
{
public:
   static void Main()
   {
      // Create a Type object that represents a one-dimensional
      // array of Example objects.
      Type^ t = Example::typeid->MakeArrayType();
      Console::WriteLine( L"\r\nArray of Example: {0}", t );

      // Create a Type object that represents a two-dimensional
      // array of Example objects.
      t = Example::typeid->MakeArrayType( 2 );
      Console::WriteLine( L"\r\nTwo-dimensional array of Example: {0}", t );

      // Demonstrate an exception when an invalid array rank is
      // specified.
      try
      {
         t = Example::typeid->MakeArrayType(  -1 );
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( L"\r\n{0}", ex );
      }

      // Create a Type object that represents a ByRef parameter
      // of type Example.
      t = Example::typeid->MakeByRefType();
      Console::WriteLine( L"\r\nByRef Example: {0}", t );

      // Get a Type object representing the Example class, a
      // MethodInfo representing the "Test" method, a ParameterInfo
      // representing the parameter of type Example, and finally
      // a Type object representing the type of this ByRef parameter.
      // Compare this Type object with the Type object created using
      // MakeByRefType.
      Type^ t2 = Example::typeid;
      MethodInfo^ mi = t2->GetMethod( L"Test" );
      ParameterInfo^ pi = mi->GetParameters()[ 0 ];
      Type^ pt = pi->ParameterType;
      Console::WriteLine( L"Are the ByRef types equal? {0}", (t == pt) );

      // Create a Type object that represents a pointer to an
      // Example object.
      t = Example::typeid->MakePointerType();
      Console::WriteLine( L"\r\nPointer to Example: {0}", t );
   }

   // A sample method with a ByRef parameter.
   //
   void Test( interior_ptr<Example^> /*e*/ )
   {
   }
};

int main()
{
   Example::Main();
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
MakeArrayType 重载
System 命名空间
MakeByRefType
MakePointerType


Type ..::.MakeByRefType 方法

Type
.
.
::
.
MakeByRefType 方法
Type 类

返回表示作为 ref 参数（在 Visual Basic 中为 ByRef 参数）传递时的当前类型的 Type 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function MakeByRefType As Type
public virtual Type MakeByRefType()
public:
virtual Type^ MakeByRefType()
abstract MakeByRefType : unit -> Type
override MakeByRefType : unit -> Type

返回值

类型： System Type
表示作为 ref 参数（在 Visual Basic 中为 ByRef 参数）传递时的当前类型的 Type 对象。
异常 | 条件
NotSupportedException | 基类不支持所调用的方法。

MakeByRefType 方法提供了一种为参数列表生成 ref 类型（在 Visual Basic 中为 ByRef）的方法。

使用 Microsoft 中间语言 (MSIL) 的语法，如果当前 Type 对象表示 Int32，则此方法将返回表示 Int32& 的 Type 对象。

下面的代码示例为 Test 类创建数组、ref（在 Visual Basic 中为 ByRef）和指针类型。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Create a Type object that represents a one-dimensional
        ' array of Example objects.
        Dim t As Type = GetType(Example).MakeArrayType()
        Console.WriteLine(vbCrLf & "Array of Example: " & t.ToString())

        ' Create a Type object that represents a two-dimensional
        ' array of Example objects.
        t = GetType(Example).MakeArrayType(2)
        Console.WriteLine(vbCrLf & "Two-dimensional array of Example: " & t.ToString())

        ' Demonstrate an exception when an invalid array rank is
        ' specified.
        Try
            t = GetType(Example).MakeArrayType(-1)
        Catch ex As Exception
            Console.WriteLine(vbCrLf & ex.ToString())
        End Try

        ' Create a Type object that represents a ByRef parameter
        ' of type Example.
        t = GetType(Example).MakeByRefType()
        Console.WriteLine(vbCrLf & "ByRef Example: " & t.ToString())

        ' Get a Type object representing the Example class, a
        ' MethodInfo representing the "Test" method, a ParameterInfo
        ' representing the parameter of type Example, and finally
        ' a Type object representing the type of this ByRef parameter.
        ' Compare this Type object with the Type object created using
        ' MakeByRefType.
        Dim t2 As Type = GetType(Example)
        Dim mi As MethodInfo = t2.GetMethod("Test")
        Dim pi As ParameterInfo = mi.GetParameters()(0)
        Dim pt As Type = pi.ParameterType
        Console.WriteLine("Are the ByRef types equal? " & (t Is pt))

        ' Create a Type object that represents a pointer to an
        ' Example object.
        t = GetType(Example).MakePointerType()
        Console.WriteLine(vbCrLf & "Pointer to Example: " & t.ToString())
    End Sub

    ' A sample method with a ByRef parameter.
    '
    Public Sub Test(ByRef e As Example)
    End Sub
End Class

' This example produces output similar to the following:
'
'Array of Example: Example[]
'
'Two-dimensional array of Example: Example[,]
'
'System.IndexOutOfRangeException: Index was outside the bounds of the array.
'   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
'   at Example.Main()
'
'ByRef Example: Example&
'Are the ByRef types equal? True
'
'Pointer to Example: Example*

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        // Create a Type object that represents a one-dimensional
        // array of Example objects.
        Type t = typeof(Example).MakeArrayType();
        Console.WriteLine("\r\nArray of Example: {0}", t);

        // Create a Type object that represents a two-dimensional
        // array of Example objects.
        t = typeof(Example).MakeArrayType(2);
        Console.WriteLine("\r\nTwo-dimensional array of Example: {0}", t);

        // Demonstrate an exception when an invalid array rank is
        // specified.
        try
        {
            t = typeof(Example).MakeArrayType(-1);
        }
        catch(Exception ex)
        {
            Console.WriteLine("\r\n{0}", ex);
        }

        // Create a Type object that represents a ByRef parameter
        // of type Example.
        t = typeof(Example).MakeByRefType();
        Console.WriteLine("\r\nByRef Example: {0}", t);

        // Get a Type object representing the Example class, a
        // MethodInfo representing the "Test" method, a ParameterInfo
        // representing the parameter of type Example, and finally
        // a Type object representing the type of this ByRef parameter.
        // Compare this Type object with the Type object created using
        // MakeByRefType.
        Type t2 = typeof(Example);
        MethodInfo mi = t2.GetMethod("Test");
        ParameterInfo pi = mi.GetParameters()[0];
        Type pt = pi.ParameterType;
        Console.WriteLine("Are the ByRef types equal? {0}", (t == pt));

        // Create a Type object that represents a pointer to an
        // Example object.
        t = typeof(Example).MakePointerType();
        Console.WriteLine("\r\nPointer to Example: {0}", t);
    }

    // A sample method with a ByRef parameter.
    //
    public void Test(ref Example e)
    {
    }
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */

using namespace System;
using namespace System::Reflection;

public ref class Example
{
public:
   static void Main()
   {
      // Create a Type object that represents a one-dimensional
      // array of Example objects.
      Type^ t = Example::typeid->MakeArrayType();
      Console::WriteLine( L"\r\nArray of Example: {0}", t );

      // Create a Type object that represents a two-dimensional
      // array of Example objects.
      t = Example::typeid->MakeArrayType( 2 );
      Console::WriteLine( L"\r\nTwo-dimensional array of Example: {0}", t );

      // Demonstrate an exception when an invalid array rank is
      // specified.
      try
      {
         t = Example::typeid->MakeArrayType(  -1 );
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( L"\r\n{0}", ex );
      }

      // Create a Type object that represents a ByRef parameter
      // of type Example.
      t = Example::typeid->MakeByRefType();
      Console::WriteLine( L"\r\nByRef Example: {0}", t );

      // Get a Type object representing the Example class, a
      // MethodInfo representing the "Test" method, a ParameterInfo
      // representing the parameter of type Example, and finally
      // a Type object representing the type of this ByRef parameter.
      // Compare this Type object with the Type object created using
      // MakeByRefType.
      Type^ t2 = Example::typeid;
      MethodInfo^ mi = t2->GetMethod( L"Test" );
      ParameterInfo^ pi = mi->GetParameters()[ 0 ];
      Type^ pt = pi->ParameterType;
      Console::WriteLine( L"Are the ByRef types equal? {0}", (t == pt) );

      // Create a Type object that represents a pointer to an
      // Example object.
      t = Example::typeid->MakePointerType();
      Console::WriteLine( L"\r\nPointer to Example: {0}", t );
   }

   // A sample method with a ByRef parameter.
   //
   void Test( interior_ptr<Example^> /*e*/ )
   {
   }
};

int main()
{
   Example::Main();
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
MakeArrayType
MakePointerType


Type ..::.MakeGenericType 方法

Type
.
.
::
.
MakeGenericType 方法
Type 类

替代由当前泛型类型定义的类型参数组成的类型数组的元素，并返回表示结果构造类型的 Type 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function MakeGenericType ( _
    ParamArray typeArguments As Type() _
) As Type
public virtual Type MakeGenericType(
    params Type[] typeArguments
)
public:
virtual Type^ MakeGenericType(
    ... array<Type^>^ typeArguments
)
abstract MakeGenericType :
        typeArguments:Type[] -> Type
override MakeGenericType :
        typeArguments:Type[] -> Type

参数

typeArguments
类型：
array<
System Type
>
[]
()
[]

将代替当前泛型类型的类型参数的类型数组。

返回值

类型： System Type
Type 表示的构造类型通过以下方式形成：用 typeArguments 的元素取代当前泛型类型的类型参数。
异常 | 条件
InvalidOperationException | 当前类型不表示泛型类型定义。即，IsGenericTypeDefinition 返回 false。 当前类型不表示泛型类型定义。即，IsGenericTypeDefinition 返回 false。
ArgumentNullException | typeArguments 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - typeArguments 的所有元素均为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | typeArguments 中元素的个数不等于当前泛型类型定义中类型参数的个数。 - 或 - typeArguments 的所有元素都不满足为当前泛型类型的对应类型参数指定的约束。
NotSupportedException | 基类不支持所调用的方法。派生类必须提供实现。 基类不支持所调用的方法。派生类必须提供实现。

MakeGenericType 方法允许编写向泛型类型定义的类型参数赋予特定类型的代码，从而创建表示特定构造类型的 Type 对象。可以使用此 Type 对象来创建该构造类型的运行时实例。 MakeGenericType 方法允许编写向泛型类型定义的类型参数赋予特定类型的代码，从而创建表示特定构造类型的 Type 对象。可以使用此 Type 对象来创建该构造类型的运行时实例。

使用 MakeGenericType 构造的类型可以是开放的，即它们的一些类型实参可以是封闭泛型方法或类型的类型形参。您可以在发出动态程序集时使用这样的开放构造的类型。例如，考虑下面的代码中的类 Base 和 Derived。 使用 MakeGenericType 构造的类型可以是开放的，即它们的一些类型实参可以是封闭泛型方法或类型的类型形参。您可以在发出动态程序集时使用这样的开放构造的类型。例如，考虑下面的代码中的类 Base 和 Derived。 使用 MakeGenericType 构造的类型可以是开放的，即它们的一些类型实参可以是封闭泛型方法或类型的类型形参。您可以在发出动态程序集时使用这样的开放构造的类型。例如，考虑下面的代码中的类 Base 和 Derived。

Public Class Base(Of T, U)
End Class
Public Class Derived(Of V)
    Inherits Base(Of Integer, V)
End Class

public class Base<T, U> { }
public class Derived<V> : Base<int, V> { }

generic<typename T, typename U>
    public ref class Base { };
generic<typename V>
    public ref class Derived : Base<int, V> { };

为了在动态程序集中生成 Derived，必须构造其基类型。为此，可以使用泛型类型实参 Int32 和 Derived 中的类型形参 V 来调用表示类 Base 的 Type 对象上的 MakeGenericType 方法。由于类型和泛型类型形参均由 Type 对象表示，因此可以向 MakeGenericType 方法传递同时包含这两者的数组。 为了在动态程序集中生成 Derived，必须构造其基类型。为此，可以使用泛型类型实参 Int32 和 Derived 中的类型形参 V 来调用表示类 Base 的 Type 对象上的 MakeGenericType 方法。由于类型和泛型类型形参均由 Type 对象表示，因此可以向 MakeGenericType 方法传递同时包含这两者的数组。 为了在动态程序集中生成 Derived，必须构造其基类型。为此，可以使用泛型类型实参 Int32 和 Derived 中的类型形参 V 来调用表示类 Base 的 Type 对象上的 MakeGenericType 方法。由于类型和泛型类型形参均由 Type 对象表示，因此可以向 MakeGenericType 方法传递同时包含这两者的数组。

说明 说明

诸如 Base<int, V> 的构造类型在发出代码时非常有用，但是您不能对此类型调用 MakeGenericType 方法，因为它不是泛型类型定义。为了创建能够实例化的封闭构造的类型，可首先调用 GetGenericTypeDefinition 方法来获取表示泛型类型定义的 Type 对象，然后使用需要的类型实参调用 MakeGenericType。 诸如 Base<int, V> 的构造类型在发出代码时非常有用，但是您不能对此类型调用 MakeGenericType 方法，因为它不是泛型类型定义。为了创建能够实例化的封闭构造的类型，可首先调用 GetGenericTypeDefinition 方法来获取表示泛型类型定义的 Type 对象，然后使用需要的类型实参调用 MakeGenericType。

MakeGenericType 返回的 Type 对象与调用所产生构造类型的 GetType 方法（或从使用相同类型实参的相同泛型类型定义创建的任何构造类型的 GetType 方法）获得的 Type 相同。

说明 说明

泛型类型的数组本身不是泛型类型。您不能对诸如 C<T>[]（在 Visual Basic 中为 Dim ac() As C(Of T)）的数组类型调用 MakeGenericType。若要基于 C<T>[] 构造封闭泛型类型，需要调用 GetElementType 以获取泛型类型定义 C<T>，对该泛型类型定义调用 MakeGenericType 以创建构造类型，最后对该构造类型调用 MakeArrayType 方法以创建数组类型。对于指针类型和 ref 类型（在 Visual Basic 中为 ByRef）也是如此。 泛型类型的数组本身不是泛型类型。您不能对诸如 C<T>[]（在 Visual Basic 中为 Dim ac() As C(Of T)）的数组类型调用 MakeGenericType。若要基于 C<T>[] 构造封闭泛型类型，需要调用 GetElementType 以获取泛型类型定义 C<T>，对该泛型类型定义调用 MakeGenericType 以创建构造类型，最后对该构造类型调用 MakeArrayType 方法以创建数组类型。对于指针类型和 ref 类型（在 Visual Basic 中为 ByRef）也是如此。 泛型类型的数组本身不是泛型类型。您不能对诸如 C<T>[]（在 Visual Basic 中为 Dim ac() As C(Of T)）的数组类型调用 MakeGenericType。若要基于 C<T>[] 构造封闭泛型类型，需要调用 GetElementType 以获取泛型类型定义 C<T>，对该泛型类型定义调用 MakeGenericType 以创建构造类型，最后对该构造类型调用 MakeArrayType 方法以创建数组类型。对于指针类型和 ref 类型（在 Visual Basic 中为 ByRef）也是如此。 泛型类型的数组本身不是泛型类型。您不能对诸如 C<T>[]（在 Visual Basic 中为 Dim ac() As C(Of T)）的数组类型调用 MakeGenericType。若要基于 C<T>[] 构造封闭泛型类型，需要调用 GetElementType 以获取泛型类型定义 C<T>，对该泛型类型定义调用 MakeGenericType 以创建构造类型，最后对该构造类型调用 MakeArrayType 方法以创建数组类型。对于指针类型和 ref 类型（在 Visual Basic 中为 ByRef）也是如此。

有关泛型反射中使用的术语的固定条件列表，请参见 IsGenericType 属性备注。

嵌套类型

如果泛型类型是使用 C#、C++ 或 Visual Basic 定义的，那么其嵌套类型都是泛型。即使嵌套类型没有自己的类型参数也是如此，因为所有三种语言都在嵌套类型的类型参数列表中包括了封闭类型的类型参数。请考虑下面的类： 如果泛型类型是使用 C#、C++ 或 Visual Basic 定义的，那么其嵌套类型都是泛型。即使嵌套类型没有自己的类型参数也是如此，因为所有三种语言都在嵌套类型的类型参数列表中包括了封闭类型的类型参数。请考虑下面的类： 如果泛型类型是使用 C#、C++ 或 Visual Basic 定义的，那么其嵌套类型都是泛型。即使嵌套类型没有自己的类型参数也是如此，因为所有三种语言都在嵌套类型的类型参数列表中包括了封闭类型的类型参数。请考虑下面的类：

Public Class Outermost(Of T)
    Public Class Inner(Of U)
        Public Class Innermost1(Of V)
        End Class
        Public Class Innermost2
        End Class
    End Class
End Class

public class Outermost<T>
{
    public class Inner<U>
    {
        public class Innermost1<V> {}
        public class Innermost2 {}
    }
}

generic<typename T> public ref class Outermost
{
public:
    generic<typename U> ref class Inner
    {
    public:
        generic<typename V> ref class Innermost1 {};
        ref class Innermost2 {};
    };
};

嵌套类 Inner 的类型参数列表有两个类型参数 T 和 U，其中第一个是其封闭类的类型参数。类似地，嵌套类 Innermost1 的类型参数列表有三个类型参数 T、U 和 V，其中 T 和 U 来自其封闭类。嵌套类 Innermost2 有两个类型参数 T 和 U，它们都来自其封闭类。 嵌套类 Inner 的类型参数列表有两个类型参数 T 和 U，其中第一个是其封闭类的类型参数。类似地，嵌套类 Innermost1 的类型参数列表有三个类型参数 T、U 和 V，其中 T 和 U 来自其封闭类。嵌套类 Innermost2 有两个类型参数 T 和 U，它们都来自其封闭类。 嵌套类 Inner 的类型参数列表有两个类型参数 T 和 U，其中第一个是其封闭类的类型参数。类似地，嵌套类 Innermost1 的类型参数列表有三个类型参数 T、U 和 V，其中 T 和 U 来自其封闭类。嵌套类 Innermost2 有两个类型参数 T 和 U，它们都来自其封闭类。

如果封闭类型的参数列表有多个类型参数，则所有类型参数都按顺序包括在嵌套类型的类型参数列表中。

为了从嵌套的类型的泛型类型定义来构造泛型类型，可以使用通过串联所有封闭类型的类型实参数组（从最外层的泛型类型开始，到嵌套的类型本身的类型实参数组结束 — 如果它有自己的类型参数的话）形成的数组来调用 MakeGenericType 方法。若要创建 Innermost1 的实例，请对包含三个类型（这些类型要分配给 T、U 和 V）的数组调用 MakeGenericType 方法。若要创建 Innermost2 的实例，请对包含两个类型（这些类型要分配给 T 和 U）的数组调用 MakeGenericType 方法。 为了从嵌套的类型的泛型类型定义来构造泛型类型，可以使用通过串联所有封闭类型的类型实参数组（从最外层的泛型类型开始，到嵌套的类型本身的类型实参数组结束 — 如果它有自己的类型参数的话）形成的数组来调用 MakeGenericType 方法。若要创建 Innermost1 的实例，请对包含三个类型（这些类型要分配给 T、U 和 V）的数组调用 MakeGenericType 方法。若要创建 Innermost2 的实例，请对包含两个类型（这些类型要分配给 T 和 U）的数组调用 MakeGenericType 方法。 为了从嵌套的类型的泛型类型定义来构造泛型类型，可以使用通过串联所有封闭类型的类型实参数组（从最外层的泛型类型开始，到嵌套的类型本身的类型实参数组结束 — 如果它有自己的类型参数的话）形成的数组来调用 MakeGenericType 方法。若要创建 Innermost1 的实例，请对包含三个类型（这些类型要分配给 T、U 和 V）的数组调用 MakeGenericType 方法。若要创建 Innermost2 的实例，请对包含两个类型（这些类型要分配给 T 和 U）的数组调用 MakeGenericType 方法。

语言以此方式传播封闭类型的类型参数，所以，您可以使用封闭类型的类型参数来定义嵌套类型的字段。否则，类型参数将不会在嵌套类型体的范围内。通过在动态程序集中发出代码或使用 Ilasm.exe（MSIL 汇编程序），无需传播封闭类型的类型参数即可定义嵌套类型。考虑 MSIL 汇编程序的以下代码： 语言以此方式传播封闭类型的类型参数，所以，您可以使用封闭类型的类型参数来定义嵌套类型的字段。否则，类型参数将不会在嵌套类型体的范围内。通过在动态程序集中发出代码或使用 Ilasm.exe（MSIL 汇编程序），无需传播封闭类型的类型参数即可定义嵌套类型。考虑 MSIL 汇编程序的以下代码： 语言以此方式传播封闭类型的类型参数，所以，您可以使用封闭类型的类型参数来定义嵌套类型的字段。否则，类型参数将不会在嵌套类型体的范围内。通过在动态程序集中发出代码或使用 Ilasm.exe（MSIL 汇编程序），无需传播封闭类型的类型参数即可定义嵌套类型。考虑 MSIL 汇编程序的以下代码： 语言以此方式传播封闭类型的类型参数，所以，您可以使用封闭类型的类型参数来定义嵌套类型的字段。否则，类型参数将不会在嵌套类型体的范围内。通过在动态程序集中发出代码或使用 Ilasm.exe（MSIL 汇编程序），无需传播封闭类型的类型参数即可定义嵌套类型。考虑 MSIL 汇编程序的以下代码：

.class public Outer<T> {
    .class nested public Inner<U> {
        .class nested public Innermost {
        }
    }
}

在此例中，无法在类 Innermost 中定义 T 或 U 类型的字段，因为这些类型参数不在范围内。下面的汇编程序代码定义与在 C++、Visual Basic 和 C# 中定义时具有相同表现的嵌套类： 在此例中，无法在类 Innermost 中定义 T 或 U 类型的字段，因为这些类型参数不在范围内。下面的汇编程序代码定义与在 C++、Visual Basic 和 C# 中定义时具有相同表现的嵌套类：

.class public Outer<T> {
    .class nested public Inner<T, U> {
        .class nested public Innermost<T, U, V> {
        }
    }
}

可以使用 Ildasm.exe（MSIL 反汇编程序） 检验在高级别语言中定义的嵌套类，并遵循此命名方案。

下面的示例使用 MakeGenericType 方法基于 Dictionary<(Of <(TKey, TValue>)>) 类型的泛型类型定义创建构造类型。构造类型表示具有字符串键的 Test 对象的 Dictionary<(Of <(TKey, TValue>)>)。 下面的示例使用 MakeGenericType 方法基于 Dictionary<(Of <(TKey, TValue>)>) 类型的泛型类型定义创建构造类型。构造类型表示具有字符串键的 Test 对象的 Dictionary<(Of <(TKey, TValue>)>)。

Imports System
Imports System.Reflection
Imports System.Collections.Generic
Imports Microsoft.VisualBasic

Public Class Test
    Public Shared Sub Main()
        Console.WriteLine(vbCrLf & "--- Create a constructed type from the generic Dictionary type.")

        ' Create a type object representing the generic Dictionary
        ' type, by omitting the type arguments (but keeping the
        ' comma that separates them, so the compiler can infer the
        ' number of type parameters).
        Dim generic As Type = GetType(Dictionary(Of ,))
        DisplayTypeInfo(generic)

        ' Create an array of types to substitute for the type
        ' parameters of Dictionary. The key is of type string, and
        ' the type to be contained in the Dictionary is Test.
        Dim typeArgs() As Type = { GetType(String), GetType(Test) }

        ' Create a Type object representing the constructed generic
        ' type.
        Dim constructed As Type = generic.MakeGenericType(typeArgs)
        DisplayTypeInfo(constructed)

        ' Compare the type objects obtained above to type objects
        ' obtained using GetType() and GetGenericTypeDefinition().
        Console.WriteLine(vbCrLf & "--- Compare types obtained by different methods:")

        Dim t As Type = GetType(Dictionary(Of String, Test))
        Console.WriteLine(vbTab & "Are the constructed types equal? " _
            & (t Is constructed))
        Console.WriteLine(vbTab & "Are the generic types equal? " _
            & (t.GetGenericTypeDefinition() Is generic))
    End Sub

    Private Shared Sub DisplayTypeInfo(ByVal t As Type)
        Console.WriteLine(vbCrLf & t.ToString())

        Console.WriteLine(vbTab & "Is this a generic type definition? " _
            & t.IsGenericTypeDefinition)

        Console.WriteLine(vbTab & "Is it a generic type? " _
            & t.IsGenericType)

        Dim typeArguments() As Type = t.GetGenericArguments()
        Console.WriteLine(vbTab & "List type arguments ({0}):", _
            typeArguments.Length)
        For Each tParam As Type In typeArguments
            Console.WriteLine(vbTab & vbTab & tParam.ToString())
        Next
    End Sub
End Class

' This example produces the following output:
'
'--- Create a constructed type from the generic Dictionary type.
'
'System.Collections.Generic.Dictionary'2[TKey,TValue]
'        Is this a generic type definition? True
'        Is it a generic type? True
'        List type arguments (2):
'                TKey
'                TValue
'
'System.Collections.Generic.Dictionary`2[System.String,Test]
'        Is this a generic type definition? False
'        Is it a generic type? True
'        List type arguments (2):
'                System.String
'                Test
'
'--- Compare types obtained by different methods:
'        Are the constructed types equal? True
'        Are the generic types equal? True

using System;
using System.Reflection;
using System.Collections.Generic;

public class Test
{
    public static void Main()
    {
        Console.WriteLine("\r\n--- Create a constructed type from the generic Dictionary type.");

        // Create a type object representing the generic Dictionary
        // type, by omitting the type arguments (but keeping the
        // comma that separates them, so the compiler can infer the
        // number of type parameters).
        Type generic = typeof(Dictionary<,>);
        DisplayTypeInfo(generic);

        // Create an array of types to substitute for the type
        // parameters of Dictionary. The key is of type string, and
        // the type to be contained in the Dictionary is Test.
        Type[] typeArgs = { typeof(string), typeof(Test) };

        // Create a Type object representing the constructed generic
        // type.
        Type constructed = generic.MakeGenericType(typeArgs);
        DisplayTypeInfo(constructed);

        // Compare the type objects obtained above to type objects
        // obtained using typeof() and GetGenericTypeDefinition().
        Console.WriteLine("\r\n--- Compare types obtained by different methods:");

        Type t = typeof(Dictionary<String, Test>);
        Console.WriteLine("\tAre the constructed types equal? {0}", t == constructed);
        Console.WriteLine("\tAre the generic types equal? {0}",
            t.GetGenericTypeDefinition() == generic);
    }

    private static void DisplayTypeInfo(Type t)
    {
        Console.WriteLine("\r\n{0}", t);

        Console.WriteLine("\tIs this a generic type definition? {0}",
            t.IsGenericTypeDefinition);

        Console.WriteLine("\tIs it a generic type? {0}",
            t.IsGenericType);

        Type[] typeArguments = t.GetGenericArguments();
        Console.WriteLine("\tList type arguments ({0}):", typeArguments.Length);
        foreach (Type tParam in typeArguments)
        {
            Console.WriteLine("\t\t{0}", tParam);
        }
    }
}

/* This example produces the following output:

--- Create a constructed type from the generic Dictionary type.

System.Collections.Generic.Dictionary`2[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey
                TValue

System.Collections.Generic.Dictionary`2[System.String, Test]
        Is this a generic type definition? False
        Is it a generic type? True
        List type arguments (2):
                System.String
                Test

--- Compare types obtained by different methods:
        Are the constructed types equal? True
        Are the generic types equal? True
 */

using namespace System;
using namespace System::Reflection;
using namespace System::Collections::Generic;

namespace Example
{
    public ref class Test
    {
    public:
        static void CreateConstructedType(void)
        {
            Console::WriteLine("\r\n--- Create a constructed type"
                " from the generic Dictionary`2 type.");

            // Create a type object representing
            // the generic Dictionary`2 type.
            Type^ genericType = Type::GetType(
                "System.Collections.Generic.Dictionary`2");
            if (genericType != nullptr)
            {
                DisplayTypeInfo(genericType);
            }
            else
            {
                Console::WriteLine("The type is not found");
                return;
            }

            // Create an array of types to substitute for the type
            // parameters of Dictionary`2.
            // The key is of type string, and the type to be
            // contained in the Dictionary`2 is Test.
            array<Type^>^ typeArgs = {String::typeid, Test::typeid};
            Type^ constructedType =
                genericType->MakeGenericType(typeArgs);
            DisplayTypeInfo(constructedType);

            // Compare the type objects obtained above to type objects
            // obtained using typeof() and GetGenericTypeDefinition().
            Console::WriteLine("\r\n--- Compare types obtained by"
                " different methods:");

            Type^ definedType = Dictionary<String^, Test^>::typeid;
            Console::WriteLine("\tAre the constructed types "
                "equal? {0}", definedType == constructedType);
            Console::WriteLine("\tAre the generic types equal? {0}",
                definedType->GetGenericTypeDefinition() == genericType);
        }

    private:
        static void DisplayTypeInfo(Type^ typeToDisplay)
        {
            Console::WriteLine("\r\n{0}", typeToDisplay);
            Console::WriteLine("\tIs this a generic type definition? "
                "{0}", typeToDisplay->IsGenericTypeDefinition);
            Console::WriteLine("\tIs it a generic type? "
                "{0}", typeToDisplay->IsGenericType);

            array<Type^>^ typeArguments =
                typeToDisplay->GetGenericArguments();
            Console::WriteLine("\tList type arguments ({0}):",
                typeArguments->Length);

            for each (Type^ typeArgument in typeArguments)
            {
                Console::WriteLine("\t\t{0}", typeArgument);
            }
        }
    };
}

int main(void)
{
    Example::Test::CreateConstructedType();
}

/* This example produces the following output:

--- Create a constructed type from the generic Dictionary`2 type.

System.Collections.Generic.Dictionary`2[KeyType,ValueType]
          Is this a generic type definition? True
          Is it a generic type? True
          List type arguments (2):
                     K
                     V

System.Collections.Generic.Dictionary`2[System.String, Test]
          Is this a generic type definition? False
          Is it a generic type? True
          List type arguments (2):
                     System.String
                     Test

--- Compare types obtained by different methods:
          Are the constructed types equal? True
          Are the generic types equal? True
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
IsGenericTypeDefinition
GetGenericTypeDefinition

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.MakePointerType 方法

Type
.
.
::
.
MakePointerType 方法
Type 类

返回表示指向当前类型的指针的 Type 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function MakePointerType As Type
public virtual Type MakePointerType()
public:
virtual Type^ MakePointerType()
abstract MakePointerType : unit -> Type
override MakePointerType : unit -> Type

返回值

类型： System Type
表示指向当前类型的指针的 Type 对象。
异常 | 条件
NotSupportedException | 基类不支持所调用的方法。

MakePointerType 方法提供了一种为参数列表生成指针类型的方法。

使用 Microsoft 中间语言 (MSIL) 的语法，如果当前 Type 对象表示 Int32，则此方法将返回表示 Int32* 的 Type 对象。

下面的代码示例为 Test 类创建数组、ref（在 Visual Basic 中为 ByRef）和指针类型。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class Example
    Public Shared Sub Main()
        ' Create a Type object that represents a one-dimensional
        ' array of Example objects.
        Dim t As Type = GetType(Example).MakeArrayType()
        Console.WriteLine(vbCrLf & "Array of Example: " & t.ToString())

        ' Create a Type object that represents a two-dimensional
        ' array of Example objects.
        t = GetType(Example).MakeArrayType(2)
        Console.WriteLine(vbCrLf & "Two-dimensional array of Example: " & t.ToString())

        ' Demonstrate an exception when an invalid array rank is
        ' specified.
        Try
            t = GetType(Example).MakeArrayType(-1)
        Catch ex As Exception
            Console.WriteLine(vbCrLf & ex.ToString())
        End Try

        ' Create a Type object that represents a ByRef parameter
        ' of type Example.
        t = GetType(Example).MakeByRefType()
        Console.WriteLine(vbCrLf & "ByRef Example: " & t.ToString())

        ' Get a Type object representing the Example class, a
        ' MethodInfo representing the "Test" method, a ParameterInfo
        ' representing the parameter of type Example, and finally
        ' a Type object representing the type of this ByRef parameter.
        ' Compare this Type object with the Type object created using
        ' MakeByRefType.
        Dim t2 As Type = GetType(Example)
        Dim mi As MethodInfo = t2.GetMethod("Test")
        Dim pi As ParameterInfo = mi.GetParameters()(0)
        Dim pt As Type = pi.ParameterType
        Console.WriteLine("Are the ByRef types equal? " & (t Is pt))

        ' Create a Type object that represents a pointer to an
        ' Example object.
        t = GetType(Example).MakePointerType()
        Console.WriteLine(vbCrLf & "Pointer to Example: " & t.ToString())
    End Sub

    ' A sample method with a ByRef parameter.
    '
    Public Sub Test(ByRef e As Example)
    End Sub
End Class

' This example produces output similar to the following:
'
'Array of Example: Example[]
'
'Two-dimensional array of Example: Example[,]
'
'System.IndexOutOfRangeException: Index was outside the bounds of the array.
'   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
'   at Example.Main()
'
'ByRef Example: Example&
'Are the ByRef types equal? True
'
'Pointer to Example: Example*

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        // Create a Type object that represents a one-dimensional
        // array of Example objects.
        Type t = typeof(Example).MakeArrayType();
        Console.WriteLine("\r\nArray of Example: {0}", t);

        // Create a Type object that represents a two-dimensional
        // array of Example objects.
        t = typeof(Example).MakeArrayType(2);
        Console.WriteLine("\r\nTwo-dimensional array of Example: {0}", t);

        // Demonstrate an exception when an invalid array rank is
        // specified.
        try
        {
            t = typeof(Example).MakeArrayType(-1);
        }
        catch(Exception ex)
        {
            Console.WriteLine("\r\n{0}", ex);
        }

        // Create a Type object that represents a ByRef parameter
        // of type Example.
        t = typeof(Example).MakeByRefType();
        Console.WriteLine("\r\nByRef Example: {0}", t);

        // Get a Type object representing the Example class, a
        // MethodInfo representing the "Test" method, a ParameterInfo
        // representing the parameter of type Example, and finally
        // a Type object representing the type of this ByRef parameter.
        // Compare this Type object with the Type object created using
        // MakeByRefType.
        Type t2 = typeof(Example);
        MethodInfo mi = t2.GetMethod("Test");
        ParameterInfo pi = mi.GetParameters()[0];
        Type pt = pi.ParameterType;
        Console.WriteLine("Are the ByRef types equal? {0}", (t == pt));

        // Create a Type object that represents a pointer to an
        // Example object.
        t = typeof(Example).MakePointerType();
        Console.WriteLine("\r\nPointer to Example: {0}", t);
    }

    // A sample method with a ByRef parameter.
    //
    public void Test(ref Example e)
    {
    }
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */

using namespace System;
using namespace System::Reflection;

public ref class Example
{
public:
   static void Main()
   {
      // Create a Type object that represents a one-dimensional
      // array of Example objects.
      Type^ t = Example::typeid->MakeArrayType();
      Console::WriteLine( L"\r\nArray of Example: {0}", t );

      // Create a Type object that represents a two-dimensional
      // array of Example objects.
      t = Example::typeid->MakeArrayType( 2 );
      Console::WriteLine( L"\r\nTwo-dimensional array of Example: {0}", t );

      // Demonstrate an exception when an invalid array rank is
      // specified.
      try
      {
         t = Example::typeid->MakeArrayType(  -1 );
      }
      catch ( Exception^ ex )
      {
         Console::WriteLine( L"\r\n{0}", ex );
      }

      // Create a Type object that represents a ByRef parameter
      // of type Example.
      t = Example::typeid->MakeByRefType();
      Console::WriteLine( L"\r\nByRef Example: {0}", t );

      // Get a Type object representing the Example class, a
      // MethodInfo representing the "Test" method, a ParameterInfo
      // representing the parameter of type Example, and finally
      // a Type object representing the type of this ByRef parameter.
      // Compare this Type object with the Type object created using
      // MakeByRefType.
      Type^ t2 = Example::typeid;
      MethodInfo^ mi = t2->GetMethod( L"Test" );
      ParameterInfo^ pi = mi->GetParameters()[ 0 ];
      Type^ pt = pi->ParameterType;
      Console::WriteLine( L"Are the ByRef types equal? {0}", (t == pt) );

      // Create a Type object that represents a pointer to an
      // Example object.
      t = Example::typeid->MakePointerType();
      Console::WriteLine( L"\r\nPointer to Example: {0}", t );
   }

   // A sample method with a ByRef parameter.
   //
   void Test( interior_ptr<Example^> /*e*/ )
   {
   }
};

int main()
{
   Example::Main();
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
MakeByRefType
MakeArrayType


Type ..::.ReflectionOnlyGetType 方法

Type
.
.
::
.
ReflectionOnlyGetType 方法
Type 类

获取具有指定名称的 Type，指定是否执行区分大小写的搜索，以及在找不到类型时是否引发异常。该类型只为反射加载，而不为执行加载。 获取具有指定名称的 Type，指定是否执行区分大小写的搜索，以及在找不到类型时是否引发异常。该类型只为反射加载，而不为执行加载。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ReflectionOnlyGetType ( _
    typeName As String, _
    throwIfNotFound As Boolean, _
    ignoreCase As Boolean _
) As Type
public static Type ReflectionOnlyGetType(
    string typeName,
    bool throwIfNotFound,
    bool ignoreCase
)
public:
static Type^ ReflectionOnlyGetType(
    String^ typeName,
    bool throwIfNotFound,
    bool ignoreCase
)
static member ReflectionOnlyGetType :
        typeName:string *
        throwIfNotFound:bool *
        ignoreCase:bool -> Type

参数

typeName
类型： System String
要获取的 Type 的名称。
throwIfNotFound
类型： System Boolean
如果为 true，则会在找不到该类型时引发 TypeLoadException；如果为 false，则在找不到该类型时返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ignoreCase
类型： System Boolean
如果为 true，则执行不区分大小写的 typeName 搜索；如果为 false，则执行区分大小写的 typeName 搜索。

返回值

类型： System Type
具有指定名称的 Type（如果找到的话）；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentNullException | typeName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
TargetInvocationException | 调用类初始值设定项并引发异常。
TypeLoadException | throwIfNotFound 为 true，该类型未找到。
ArgumentException | typeName 无效，例如，它包含无效字符或是一个长度为零的字符串。

如果包含该类型的程序集尚未加载到仅反射上下文中，且该类型是程序集限定类型，则使用 ReflectionOnlyGetType 方法等效于首先使用 ReflectionOnlyLoad 方法仅为反射加载程序集，然后通过调用程序集的 Assembly..::.GetType 方法加载该类型。有关指定类型名称的详细信息，请参见 GetType(String, Boolean, Boolean) 方法重载。 如果包含该类型的程序集尚未加载到仅反射上下文中，且该类型是程序集限定类型，则使用 ReflectionOnlyGetType 方法等效于首先使用 ReflectionOnlyLoad 方法仅为反射加载程序集，然后通过调用程序集的 Assembly..::.GetType 方法加载该类型。有关指定类型名称的详细信息，请参见 GetType(String, Boolean, Boolean) 方法重载。

如果程序集已为执行而加载，则另一个副本加载到仅反射上下文中。

throwIfNotFound 参数只影响在找不到该类型时发生的情况。它不会对任何其他可能引发的异常造成影响。特别是，如果找到该类型但是无法加载，那么即使 throwIfNotFound 为 false，也可能引发 TypeLoadException。 throwIfNotFound 参数只影响在找不到该类型时发生的情况。它不会对任何其他可能引发的异常造成影响。特别是，如果找到该类型但是无法加载，那么即使 throwIfNotFound 为 false，也可能引发 TypeLoadException。 throwIfNotFound 参数只影响在找不到该类型时发生的情况。它不会对任何其他可能引发的异常造成影响。特别是，如果找到该类型但是无法加载，那么即使 throwIfNotFound 为 false，也可能引发 TypeLoadException。

有关使用仅反射上下文的更多信息，请参见如何：将程序集加载到仅反射上下文中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
String
TypeLoadException
AssemblyQualifiedName
GetAssembly
GetType
AssemblyName

其他资源

指定完全限定的类型名称
如何：将程序集加载到仅反射上下文中


Type ..::.ToString 方法

Type
.
.
::
.
ToString 方法
Type 类

返回表示当前 Type 的名称的 String。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
表示当前 Type 的名称的 String。

实现

此方法为所有基元类型返回完全限定的公共语言运行时命名空间和名称。例如，C# 指令 (long)0.Type().ToString() 返回“System.Int64”而不只是“Int64”。 此方法为所有基元类型返回完全限定的公共语言运行时命名空间和名称。例如，C# 指令 (long)0.Type().ToString() 返回“System.Int64”而不只是“Int64”。

如果当前 Type 表示泛型类型，该类型及其类型实参将由命名空间和嵌套类型限定，但是不会由程序集限定。如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法返回类型参数的非限定名称。 如果当前 Type 表示泛型类型，该类型及其类型实参将由命名空间和嵌套类型限定，但是不会由程序集限定。如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此方法返回类型参数的非限定名称。

下面的示例说明如何使用 Type 的 Namespace 和 Module 属性以及 ToString 方法。

Imports System
Imports Microsoft.VisualBasic
Namespace MyNamespace
    Class [MyClass]
    End Class '[MyClass]
End Namespace 'MyNamespace
Public Class Type_ToString_3
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyNamespace.MyClass)
            Console.WriteLine(ControlChars.NewLine + "Printing the details of {0}." + ControlChars.NewLine, myType)
            ' Get the namespace of the class Type_ToString_3.
            Console.WriteLine("Namespace: {0}.", myType.Namespace)
            ' Get the name of the module.
            Console.WriteLine("Module: {0}.", myType.Module)
            ' Get the fully qualified common language runtime namespace.
            Console.WriteLine("Fully qualified type: {0}.", myType.ToString())
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_ToString_3

using System;
namespace MyNamespace
{
    class MyClass
    {
    }
}
public class Type_ToString_3
{
    public static void Main()
    {
        try
        {
            Type myType = typeof(MyNamespace.MyClass);
            Console.WriteLine("\nPrinting the details of {0}.\n", myType);
            // Get the namespace of the class Type_ToString_3.
            Console.WriteLine("Namespace: {0}.", myType.Namespace);
            // Get the name of the module.
            Console.WriteLine("Module: {0}.", myType.Module);
            // Get the fully qualified common language runtime namespace.
            Console.WriteLine("Fully qualified type: {0}.", myType.ToString());
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message );
        }
    }
}

using namespace System;

namespace MyNamespace
{
   ref class MyClass{};

}

int main()
{
   try
   {
      Type^ myType = MyNamespace::MyClass::typeid;
      Console::WriteLine( "\nPrinting the details of {0}.\n", myType );

      // Get the namespace of the class MyClass.
      Console::WriteLine( "Namespace: {0}.", myType->Namespace );

      // Get the name of the module.
      Console::WriteLine( "Module: {0}.", myType->Module );

      // Get the fully qualified common language runtime namespace.
      Console::WriteLine( "Fully qualified type: {0}.", myType );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
String


Type 运算符

Type 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

Type 类型公开以下成员。

名称 说明
页首

参考

Type 类
System 命名空间


Type ..::.Equality 运算符

Type
.
.
::
.
Equality 运算符
Type 类

指示两个 Type 对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    left As Type, _
    right As Type _
) As Boolean
public static bool operator ==(
    Type left,
    Type right
)
public:
static bool operator ==(
    Type^ left,
    Type^ right
)
static let inline (=)
        left:Type *
        right:Type  : bool

参数

left
类型： System Type
要比较的第一个对象。
right
类型： System Type
要比较的第二个对象。

返回值

类型： System Boolean
如果 left 等于 right，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type ..::.Inequality 运算符

Type
.
.
::
.
Inequality 运算符
Type 类

指示两个 Type 对象是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    left As Type, _
    right As Type _
) As Boolean
public static bool operator !=(
    Type left,
    Type right
)
public:
static bool operator !=(
    Type^ left,
    Type^ right
)
static let inline (<>)
        left:Type *
        right:Type  : bool

参数

left
类型： System Type
要比较的第一个对象。
right
类型： System Type
要比较的第二个对象。

返回值

类型： System Boolean
如果 left 不等于 right，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间


Type 属性

Type 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Type 类

Type 类型公开以下成员。

名称 说明
页首

参考

Type 类
System 命名空间


Type ..::.Assembly 属性

Type
.
.
::
.
Assembly 属性
Type 类

获取在其中声明该类型 Assembly。对于泛型类型，则获取在其中定义该泛型类型的 Assembly。 获取在其中声明该类型 Assembly。对于泛型类型，则获取在其中定义该泛型类型的 Assembly。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property Assembly As Assembly
    Get
public abstract Assembly Assembly { get; }
public:
virtual property Assembly^ Assembly {
    Assembly^ get () abstract;
}
abstract Assembly : Assembly

属性值

类型： System.Reflection Assembly
描述包含当前类型的程序集的 Assembly 实例。对于泛型类型，该实例描述包含泛型类型定义的程序集，而不是创建和使用特定构造类型的程序集。 描述包含当前类型的程序集的 Assembly 实例。对于泛型类型，该实例描述包含泛型类型定义的程序集，而不是创建和使用特定构造类型的程序集。

实现

如果当前 Type 对象表示构造泛型类型，则该属性返回包含泛型类型定义的程序集。例如，假设您创建了一个名为 MyGenerics.dll 的程序集，该程序集包含泛型类型定义 MyGenericStack<T>（在 Visual Basic 中为 MyGenericStack(Of T)，在 C++ 中为 generic<T> ref class MyGenericStack）。如果您在另一个程序集中创建了 MyGenericStack<int>（在 Visual Basic 中为 MyGenericStack(Of Integer)）的实例，则该构造类型的 Assembly 属性返回表示 MyGenerics.dll 的 Assembly 对象。 如果当前 Type 对象表示构造泛型类型，则该属性返回包含泛型类型定义的程序集。例如，假设您创建了一个名为 MyGenerics.dll 的程序集，该程序集包含泛型类型定义 MyGenericStack<T>（在 Visual Basic 中为 MyGenericStack(Of T)，在 C++ 中为 generic<T> ref class MyGenericStack）。如果您在另一个程序集中创建了 MyGenericStack<int>（在 Visual Basic 中为 MyGenericStack(Of Integer)）的实例，则该构造类型的 Assembly 属性返回表示 MyGenerics.dll 的 Assembly 对象。 如果当前 Type 对象表示构造泛型类型，则该属性返回包含泛型类型定义的程序集。例如，假设您创建了一个名为 MyGenerics.dll 的程序集，该程序集包含泛型类型定义 MyGenericStack<T>（在 Visual Basic 中为 MyGenericStack(Of T)，在 C++ 中为 generic<T> ref class MyGenericStack）。如果您在另一个程序集中创建了 MyGenericStack<int>（在 Visual Basic 中为 MyGenericStack(Of Integer)）的实例，则该构造类型的 Assembly 属性返回表示 MyGenerics.dll 的 Assembly 对象。

类似地，如果当前 Type 对象表示未分配的泛型参数 T，则此属性返回包含定义 T 的泛型类型的程序集。

此属性为只读。

下面的示例显示与类关联的程序集名和类型的完全限定名。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Class MyAssemblyClass
    Public Shared Sub Main()
        Dim objType As Type = GetType(System.Array)
        ' Print the full assembly name.
        Console.WriteLine("Full assembly name: {0}.", objType.Assembly.FullName.ToString())
        ' Print the qualified assembly name.
        Console.WriteLine("Qualified assembly name: {0}.", objType.AssemblyQualifiedName.ToString())
    End Sub 'Main
End Class 'MyAssemblyClass

using System;
using System.Reflection;

class MyAssemblyClass
{

    public static void Main()
    {
        Type objType = typeof(System.Array);

        // Print the full assembly name.
        Console.WriteLine ("Full assembly name: {0}.", objType.Assembly.FullName.ToString());

        // Print the qualified assembly name.
        Console.WriteLine ("Qualified assembly name: {0}.", objType.AssemblyQualifiedName.ToString());
    }
}

using namespace System;
using namespace System::Reflection;
int main()
{
   Type^ objType = System::Array::typeid;

   // Print the full assembly name.
   Console::WriteLine( "Full assembly name: {0}.", objType->Assembly->FullName );

   // Print the qualified assembly name.
   Console::WriteLine( "Qualified assembly name: {0}.", objType->AssemblyQualifiedName );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间


Type ..::.AssemblyQualifiedName 属性

Type
.
.
::
.
AssemblyQualifiedName 属性
Type 类

获取 Type 的程序集限定名，其中包括从中加载 Type 的程序集的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property AssemblyQualifiedName As String
    Get
public abstract string AssemblyQualifiedName { get; }
public:
virtual property String^ AssemblyQualifiedName {
    String^ get () abstract;
}
abstract AssemblyQualifiedName : string

属性值

类型： System String
Type 的程序集限定名，其中包括从中加载 Type 的程序集的名称；或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（如果当前实例表示泛型类型参数）。

实现

类型的程序集限定名由类型的名称（包括类型的命名空间）加上一个逗号再加上程序集的显示名称组成。程序集的显示名称是使用 Assembly..::.FullName 属性获得的。 类型的程序集限定名由类型的名称（包括类型的命名空间）加上一个逗号再加上程序集的显示名称组成。程序集的显示名称是使用 Assembly..::.FullName 属性获得的。

说明 说明

在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。请参见 AssemblyName..::.ProcessorArchitecture。 在 .NET Framework 2.0 版中，已将处理器架构添加到程序集标识中，并可将其指定为程序集名称字符串的一部分。例如，“ProcessorArchitecture=msil”。但是，出于兼容方面的考虑，并未将它包括在由 AssemblyQualifiedName 属性返回的字符串中。请参见 AssemblyName..::.ProcessorArchitecture。

所有支持公共语言运行时的编译器将发出嵌套类的简单名称，并且在接受查询时，反射将依照下列约定构造一个重整名称。

分隔符 | 含义
反斜杠 (\) | 转义符。
逗号 (,) | 位于程序集名称前。
加号 (+) | 位于嵌套类前。
句点 (.) | 表示命名空间标识符。
中括号 ([]) | 在类型名称之后，表示该类型的数组。 - 或 - 对于泛型类型，则括起泛型类型实参列表。 - 或 - 在类型实参列表中，则括起程序集限定的类型。

例如，某个类的程序集限定的名称可能类似如下：

TopNamespace.SubNameSpace.ContainingClass+NestedClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089

如果命名空间包含一个加号，例如 TopNamespace.Sub+Namespace，则在加号 (+) 前面将附加一个转义字符 (\) 以防止将它解释为嵌套分隔符。反射将按如下形式发出此字符串： 如果命名空间包含一个加号，例如 TopNamespace.Sub+Namespace，则在加号 (+) 前面将附加一个转义字符 (\) 以防止将它解释为嵌套分隔符。反射将按如下形式发出此字符串：

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089

“++”变成“\+\+”，而“\”变成“\\”。

可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。 可以保持此限定名并在以后使用它来加载 Type。若要搜索并加载 Type，请在使用 GetType 时仅使用类型名称或使用程序集限定的类型名称。只结合类型名时，GetType 将只在调用方的程序集中查找 Type，然后再在系统程序集中查找。结合程序集限定类型名时，GetType 将在所有程序集中查找 Type。

类型名可能包含尾部字符，尾部字符表示有关该类型的附加信息，如类型是引用类型、指针类型还是数组类型。若要检索不具有这些尾随字符的类型名称，请使用 t.GetElementType().ToString()，其中 t 为类型。 类型名可能包含尾部字符，尾部字符表示有关该类型的附加信息，如类型是引用类型、指针类型还是数组类型。若要检索不具有这些尾随字符的类型名称，请使用 t.GetElementType().ToString()，其中 t 为类型。

在除程序集名称之外的所有类型名称组成部分中，空格都相关。在程序集名称中，“,”分隔符之前的空格相关，但“,”分隔符之后的空格将被忽略。 在除程序集名称之外的所有类型名称组成部分中，空格都相关。在程序集名称中，“,”分隔符之前的空格相关，但“,”分隔符之后的空格将被忽略。

泛型类型的泛型参数本身由程序集名称限定。例如，在 MyGenericClass<int>（在 Visual Basic 中为 MyGenericClass(Of Integer)）的程序集限定类型名中，int 扩展为 Int32 的程序集限定类型名。 泛型类型的泛型参数本身由程序集名称限定。例如，在 MyGenericClass<int>（在 Visual Basic 中为 MyGenericClass(Of Integer)）的程序集限定类型名中，int 扩展为 Int32 的程序集限定类型名。

如果当前 Type 对象表示泛型参数，则此属性返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例显示与类关联的程序集名和类型的完全限定名。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Class MyAssemblyClass
    Public Shared Sub Main()
        Dim objType As Type = GetType(System.Array)
        ' Print the full assembly name.
        Console.WriteLine("Full assembly name: {0}.", objType.Assembly.FullName.ToString())
        ' Print the qualified assembly name.
        Console.WriteLine("Qualified assembly name: {0}.", objType.AssemblyQualifiedName.ToString())
    End Sub 'Main
End Class 'MyAssemblyClass

using System;
using System.Reflection;

class MyAssemblyClass
{

    public static void Main()
    {
        Type objType = typeof(System.Array);

        // Print the full assembly name.
        Console.WriteLine ("Full assembly name: {0}.", objType.Assembly.FullName.ToString());

        // Print the qualified assembly name.
        Console.WriteLine ("Qualified assembly name: {0}.", objType.AssemblyQualifiedName.ToString());
    }
}

using namespace System;
using namespace System::Reflection;
int main()
{
   Type^ objType = System::Array::typeid;

   // Print the full assembly name.
   Console::WriteLine( "Full assembly name: {0}.", objType->Assembly->FullName );

   // Print the qualified assembly name.
   Console::WriteLine( "Qualified assembly name: {0}.", objType->AssemblyQualifiedName );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
String
GetType
FullName
Namespace
AssemblyName

其他资源

指定完全限定的类型名称


Type ..::.Attributes 属性

Type
.
.
::
.
Attributes 属性
Type 类

获取与 Type 关联的特性。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Attributes As TypeAttributes
    Get
public TypeAttributes Attributes { get; }
public:
virtual property TypeAttributes Attributes {
    TypeAttributes get () sealed;
}
abstract Attributes : TypeAttributes
override Attributes : TypeAttributes

属性值

类型： System.Reflection TypeAttributes
表示 Type 的特性集的 TypeAttributes 对象，除非 Type 表示泛型类型形参，在此情况下该值未指定。

实现

如果当前 Type 表示构造泛型类型，则此属性将返回泛型类型定义的特性。例如，为 MyGenericClass<int>（在 Visual Basic 中为 MyGenericClass(Of Integer)）返回的特性是 MyGenericClass<T>（在 Visual Basic 中为 MyGenericClass(Of T)）的特性。 如果当前 Type 表示构造泛型类型，则此属性将返回泛型类型定义的特性。例如，为 MyGenericClass<int>（在 Visual Basic 中为 MyGenericClass(Of Integer)）返回的特性是 MyGenericClass<T>（在 Visual Basic 中为 MyGenericClass(Of T)）的特性。

如果当前 Type 表示泛型类型形参 — 也就是说，如果 IsGenericParameter 属性返回 true — 则此属性返回的 TypeAttributes 值未指定。

下面的示例说明 Type.Attributes 属性的用法。

Imports System
Imports System.Reflection

Public Class Class1
    Protected t As Type
    Public Sub Method1()
        If t.Attributes And TypeAttributes.ClassSemanticsMask = TypeAttributes.Interface Then
            Console.WriteLine("t is an interface.")
        End If
        If t.Attributes And TypeAttributes.Public <> 0 Then
            Console.WriteLine("t is public.")
        End If
    End Sub 'Method1
End Class 'Class1

using System;
using System.Reflection;

public class Class1
{
    protected Type t;
    public void Method1()
    {
        if ((t.Attributes & TypeAttributes.ClassSemanticsMask) == TypeAttributes.Interface)
            Console.WriteLine ("t is an interface.");
        if ((t.Attributes & TypeAttributes.Public) != 0)
            Console.WriteLine ("t is public.");
    }
}

#using <System.DLL>

using namespace System;
using namespace System::Reflection;
ref class Sample
{
private:
   void Method( Type^ t )
   {
      if ( (t->Attributes & TypeAttributes::ClassSemanticsMask) == TypeAttributes::Interface )
            Console::WriteLine(  "t is an interface." );

      if ( (t->Attributes & TypeAttributes::Public) != (TypeAttributes)0 )
            Console::WriteLine(  "t is public." );
   }

};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
GetAttributeFlagsImpl
TypeAttributes


Type ..::.BaseType 属性

Type
.
.
::
.
BaseType 属性
Type 类

获取当前 Type 直接从中继承的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property BaseType As Type
    Get
public abstract Type BaseType { get; }
public:
virtual property Type^ BaseType {
    Type^ get () abstract;
}
abstract BaseType : Type

属性值

类型： System Type
当前的 Type 直接从中继承的 Type；或者如果当前的 Type 表示 Object 类或一个接口，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

基类型是当前类型直接从中继承的类型。Object 是唯一没有基类型的类型，因此 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为 Object 的基类型返回。 基类型是当前类型直接从中继承的类型。Object 是唯一没有基类型的类型，因此 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为 Object 的基类型返回。

接口从零个或多个基接口继承；因此，如果 Type 对象表示一个接口，则此属性返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。可以用 GetInterfaces 或 FindInterfaces 确定基接口。 接口从零个或多个基接口继承；因此，如果 Type 对象表示一个接口，则此属性返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。可以用 GetInterfaces 或 FindInterfaces 确定基接口。

如果当前 Type 表示构造泛型类型，则基类型将反射泛型形参。例如，请考虑下列声明： 如果当前 Type 表示构造泛型类型，则基类型将反射泛型形参。例如，请考虑下列声明：

Class B(Of U)
End Class
Class C(Of T)
    Inherits B(Of T)
End Class

class B<U> { }
class C<T> : B<T> { }

generic<typename U> ref class B { };
generic<typename T> ref class C : B<T> { };

对于构造类型 C<int>（在 Visual Basic 中为 C(Of Integer)），BaseType 属性将返回 B<int>。

如果当前 Type 表示泛型类型定义的类型形参，则 BaseType 将返回类约束，即类型形参所必需继承的类。如果没有这样的类约束，则 BaseType 将返回 System..::.Object。 如果当前 Type 表示泛型类型定义的类型形参，则 BaseType 将返回类约束，即类型形参所必需继承的类。如果没有这样的类约束，则 BaseType 将返回 System..::.Object。

此属性为只读。

下面的示例演示如何使用 BaseType 属性。

Imports System

Class TestType

    Public Shared Sub Main()
        Dim t As Type = GetType(Integer)
        Console.WriteLine("{0} inherits from {1}.", t, t.BaseType)
    End Sub 'Main
End Class 'TestType

using System;
class TestType
{
    public static void Main()
    {
        Type t = typeof(int);
        Console.WriteLine("{0} inherits from {1}.", t,t.BaseType);
    }
}

using namespace System;
void main()
{
   Type^ t = int::typeid;
   Console::WriteLine( "{0} inherits from {1}.", t, t->BaseType );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
Object
GetInterfaces
FindInterfaces
UnderlyingSystemType
IsSubclassOf

其他资源

反射类型和泛型类型


Type ..::.ContainsGenericParameters 属性

Type
.
.
::
.
ContainsGenericParameters 属性
Type 类

获取一个值，该值指示当前 Type 对象是否具有尚未被特定类型替代的类型参数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property ContainsGenericParameters As Boolean
    Get
public virtual bool ContainsGenericParameters { get; }
public:
virtual property bool ContainsGenericParameters {
    bool get ();
}
abstract ContainsGenericParameters : bool
override ContainsGenericParameters : bool

属性值

类型： System Boolean
如果 Type 对象本身是泛型类型形参或者具有尚未提供特定类型的类型形参，则为 true；否则为 false。

为了创建某个类型的实例，该类型本身的类型实参、任何封闭泛型类型或该类型的任何元素中一定不能存在泛型类型定义或开放构造类型。对此的另一种表述是：在递归地进行检查时，该类型一定不能包含任何泛型类型参数。 为了创建某个类型的实例，该类型本身的类型实参、任何封闭泛型类型或该类型的任何元素中一定不能存在泛型类型定义或开放构造类型。对此的另一种表述是：在递归地进行检查时，该类型一定不能包含任何泛型类型参数。

由于类型可以任意复杂，要确定这点是很困难的。为了方便起见和减小出错的可能性，ContainsGenericParameters 属性提供了一种标准方法来区分封闭构造类型（可以实例化）和开放构造类型（不能实例化）。如果 ContainsGenericParameters 属性返回 true，则该类型不能实例化。 由于类型可以任意复杂，要确定这点是很困难的。为了方便起见和减小出错的可能性，ContainsGenericParameters 属性提供了一种标准方法来区分封闭构造类型（可以实例化）和开放构造类型（不能实例化）。如果 ContainsGenericParameters 属性返回 true，则该类型不能实例化。 由于类型可以任意复杂，要确定这点是很困难的。为了方便起见和减小出错的可能性，ContainsGenericParameters 属性提供了一种标准方法来区分封闭构造类型（可以实例化）和开放构造类型（不能实例化）。如果 ContainsGenericParameters 属性返回 true，则该类型不能实例化。

ContainsGenericParameters 属性递归地搜索类型参数。例如，对于其元素为类型 A<T>（在 Visual Basic 中为 A(Of T)）的数组，它将返回 true，虽然该数组本身不是泛型。IsGenericType 属性的行为与此形成对比，它对数组返回 false。 ContainsGenericParameters 属性递归地搜索类型参数。例如，对于其元素为类型 A<T>（在 Visual Basic 中为 A(Of T)）的数组，它将返回 true，虽然该数组本身不是泛型。IsGenericType 属性的行为与此形成对比，它对数组返回 false。 ContainsGenericParameters 属性递归地搜索类型参数。例如，对于其元素为类型 A<T>（在 Visual Basic 中为 A(Of T)）的数组，它将返回 true，虽然该数组本身不是泛型。IsGenericType 属性的行为与此形成对比，它对数组返回 false。

有关示例类集合和显示 ContainsGenericParameters 属性值的表，请参见 IsGenericType。

下面的示例定义具有两个类型参数的泛型类，然后定义从第一个类派生的第二个泛型类。派生类的基类有两个类型参数：第一个参数为 Int32，第二个参数为派生类型的类型参数。该示例显示有关这些泛型类的信息，其中包括 GenericParameterPosition 属性报告的位置。 下面的示例定义具有两个类型参数的泛型类，然后定义从第一个类派生的第二个泛型类。派生类的基类有两个类型参数：第一个参数为 Int32，第二个参数为派生类型的类型参数。该示例显示有关这些泛型类的信息，其中包括 GenericParameterPosition 属性报告的位置。 下面的示例定义具有两个类型参数的泛型类，然后定义从第一个类派生的第二个泛型类。派生类的基类有两个类型参数：第一个参数为 Int32，第二个参数为派生类型的类型参数。该示例显示有关这些泛型类的信息，其中包括 GenericParameterPosition 属性报告的位置。

Imports System
Imports System.Reflection
Imports System.Collections.Generic
Imports Microsoft.VisualBasic

' Define a base class with two type parameters.
Public Class Base(Of T, U)
End Class

' Define a derived class. The derived class inherits from a constructed
' class that meets the following criteria:
'   (1) Its generic type definition is Base<T, U>.
'   (2) It uses int for the first type parameter.
'   (3) For the second type parameter, it uses the same type that is used
'       for the type parameter of the derived class.
' Thus, the derived class is a generic type with one type parameter, but
' its base class is an open constructed type with one assigned type
' parameter and one unassigned type parameter.
Public Class Derived(Of V)
    Inherits Base(Of Integer, V)
End Class

Public Class Test

    Public Shared Sub Main()
        Console.WriteLine(vbCrLf _
            & "--- Display a generic type and the open constructed")
        Console.WriteLine("    type from which it is derived.")

        ' Create a Type object representing the generic type definition
        ' for the Derived type, by omitting the type argument. (For
        ' types with multiple type parameters, supply the commas but
        ' omit the type arguments.)
        '
        Dim derivedType As Type = GetType(Derived(Of ))
        DisplayGenericTypeInfo(derivedType)

        ' Display its open constructed base type.
        DisplayGenericTypeInfo(derivedType.BaseType)

    End Sub 'Main

    Private Shared Sub DisplayGenericTypeInfo(ByVal t As Type)
        Console.WriteLine(vbCrLf & "{0}", t)

        Console.WriteLine(vbTab & "Is this a generic type definition? " _
            & t.IsGenericTypeDefinition)

        Console.WriteLine(vbTab & "Is it a generic type? " _
            & t.IsGenericType)

        Console.WriteLine(vbTab _
            & "Does it have unassigned generic parameters? " _
            & t.ContainsGenericParameters)

        If t.IsGenericType Then
            ' If this is a generic type, display the type arguments.
            '
            Dim typeArguments As Type() = t.GetGenericArguments()

            Console.WriteLine(vbTab & "List type arguments (" _
                & typeArguments.Length & "):")

            For Each tParam As Type In typeArguments
                ' IsGenericParameter is true only for generic type
                ' parameters.
                '
                If tParam.IsGenericParameter Then
                    Console.WriteLine(vbTab & vbTab & tParam.ToString() _
                        & "  (unassigned - parameter position " _
                        & tParam.GenericParameterPosition & ")")
                Else
                    Console.WriteLine(vbTab & vbTab & tParam.ToString())
                End If
            Next tParam
        End If

    End Sub 'DisplayGenericTypeInfo
End Class 'Test

' This example produces the following output:
'
'--- Display a generic type and the open constructed
'    type from which it is derived.
'
'Derived`1[V]
'        Is this a generic type definition? True
'        Is it a generic type? True
'        Does it have unassigned generic parameters? True
'        List type arguments (1):
'                V  (unassigned - parameter position 0)
'
'Base`2[System.Int32,V]
'        Is this a generic type definition? False
'        Is it a generic type? True
'        Does it have unassigned generic parameters? True
'        List type parameters (2):
'                System.Int32
'                V  (unassigned - parameter position 0)
'

using System;
using System.Reflection;
using System.Collections.Generic;

// Define a base class with two type parameters.
public class Base<T, U> { }

// Define a derived class. The derived class inherits from a constructed
// class that meets the following criteria:
//   (1) Its generic type definition is Base<T, U>.
//   (2) It specifies int for the first type parameter.
//   (3) For the second type parameter, it uses the same type that is used
//       for the type parameter of the derived class.
// Thus, the derived class is a generic type with one type parameter, but
// its base class is an open constructed type with one type argument and
// one type parameter.
public class Derived<V> : Base<int, V> { }

public class Test
{
    public static void Main()
    {
        Console.WriteLine(
            "\r\n--- Display a generic type and the open constructed");
        Console.WriteLine("    type from which it is derived.");

        // Create a Type object representing the generic type definition
        // for the Derived type, by omitting the type argument. (For
        // types with multiple type parameters, supply the commas but
        // omit the type arguments.)
        //
        Type derivedType = typeof(Derived<>);
        DisplayGenericTypeInfo(derivedType);

        // Display its open constructed base type.
        DisplayGenericTypeInfo(derivedType.BaseType);
    }

    private static void DisplayGenericTypeInfo(Type t)
    {
        Console.WriteLine("\r\n{0}", t);

        Console.WriteLine("\tIs this a generic type definition? {0}",
            t.IsGenericTypeDefinition);

        Console.WriteLine("\tIs it a generic type? {0}",
            t.IsGenericType);

        Console.WriteLine("\tDoes it have unassigned generic parameters? {0}",
            t.ContainsGenericParameters);

        if (t.IsGenericType)
        {
            // If this is a generic type, display the type arguments.
            //
            Type[] typeArguments = t.GetGenericArguments();

            Console.WriteLine("\tList type arguments ({0}):",
                typeArguments.Length);

            foreach (Type tParam in typeArguments)
            {
                // IsGenericParameter is true only for generic type
                // parameters.
                //
                if (tParam.IsGenericParameter)
                {
                    Console.WriteLine(
                        "\t\t{0}  (unassigned - parameter position {1})",
                        tParam,
                        tParam.GenericParameterPosition);
                }
                else
                {
                    Console.WriteLine("\t\t{0}", tParam);
                }
            }
        }
    }
}

/* This example produces the following output:

--- Display a generic type and the open constructed
    type from which it is derived.

Derived`1[V]
        Is this a generic type definition? True
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (1):
                V  (unassigned - parameter position 0)

Base`2[System.Int32,V]
        Is this a generic type definition? False
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (2):
                System.Int32
                V  (unassigned - parameter position 0)
 */

using namespace System;
using namespace System::Reflection;
using namespace System::Collections::Generic;

// Define a base class with two type parameters.
generic< class T,class U >
public ref class Base {};

// Define a derived class. The derived class inherits from a constructed
// class that meets the following criteria:
//   (1) Its generic type definition is Base<T, U>.
//   (2) It specifies int for the first type parameter.
//   (3) For the second type parameter, it uses the same type that is used
//       for the type parameter of the derived class.
// Thus, the derived class is a generic type with one type parameter, but
// its base class is an open constructed type with one type argument and
// one type parameter.
generic<class V>
public ref class Derived : Base<int,V> {};

public ref class Test
{
public:
    static void Main()
    {
        Console::WriteLine(
            L"\r\n--- Display a generic type and the open constructed");
        Console::WriteLine(L"    type from which it is derived.");

        // Create a Type object representing the generic type definition
        // for the Derived type. Note the absence of type arguments.
        //
        Type^ derivedType = Derived::typeid;
        DisplayGenericTypeInfo(derivedType);

        // Display its open constructed base type.
        DisplayGenericTypeInfo(derivedType->BaseType);
    }

private:
    static void DisplayGenericTypeInfo(Type^ t)
    {
        Console::WriteLine(L"\r\n{0}", t);
        Console::WriteLine(L"\tIs this a generic type definition? {0}",
            t->IsGenericTypeDefinition);
        Console::WriteLine(L"\tIs it a generic type? {0}", t->IsGenericType);
        Console::WriteLine(L"\tDoes it have unassigned generic parameters? {0}",
            t->ContainsGenericParameters);
        if (t->IsGenericType)
        {

            // If this is a generic type, display the type arguments.
            //
            array<Type^>^typeArguments = t->GetGenericArguments();
            Console::WriteLine(L"\tList type arguments ({0}):",
                typeArguments->Length);
            System::Collections::IEnumerator^ myEnum =
                typeArguments->GetEnumerator();
            while (myEnum->MoveNext())
            {
                Type^ tParam = safe_cast<Type^>(myEnum->Current);

                // IsGenericParameter is true only for generic type
                // parameters.
                //
                if (tParam->IsGenericParameter)
                {
                    Console::WriteLine(
                        L"\t\t{0}  (unassigned - parameter position {1})",
                        tParam, tParam->GenericParameterPosition);
                }
                else
                {
                    Console::WriteLine(L"\t\t{0}", tParam);
                }
            }
        }
    }
};

int main()
{
    Test::Main();
}

/* This example produces the following output:

--- Display a generic type and the open constructed
    type from which it is derived.

Derived`1[V]
        Is this a generic type definition? True
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (1):
                V  (unassigned - parameter position 0)

Base`2[System.Int32,V]
        Is this a generic type definition? False
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (2):
                System.Int32
                V  (unassigned - parameter position 0)
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
ContainsGenericParameters
IsGenericTypeDefinition
MakeGenericType

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.DeclaringMethod 属性

Type
.
.
::
.
DeclaringMethod 属性
Type 类

获取一个表示声明方法的 MethodBase（如果当前 Type 表示泛型方法的一个类型参数）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property DeclaringMethod As MethodBase
    Get
public virtual MethodBase DeclaringMethod { get; }
public:
virtual property MethodBase^ DeclaringMethod {
    MethodBase^ get ();
}
abstract DeclaringMethod : MethodBase
override DeclaringMethod : MethodBase

属性值

类型： System.Reflection MethodBase
如果当前 Type 表示泛型方法的一个类型参数，则为一个表示声明方法的 MethodBase；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

声明方法是一个泛型方法定义。也就是说，如果 DeclaringMethod 没有返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 DeclaringMethod.IsGenericMethodDefinition 返回 true。 声明方法是一个泛型方法定义。也就是说，如果 DeclaringMethod 没有返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 DeclaringMethod.IsGenericMethodDefinition 返回 true。

DeclaringType 和 DeclaringMethod 属性标识最初定义泛型类型参数的泛型类型定义或泛型方法定义：

  • 如果 DeclaringMethod 属性返回 MethodInfo，该 MethodInfo 表示泛型方法定义，当前 Type 对象表示该泛型方法定义的类型参数。

  • 如果 DeclaringMethod 属性返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 DeclaringType 属性始终返回一个表示泛型类型定义的 Type 对象，当前 Type 对象表示该泛型类型定义的类型参数。

  • 在 IsGenericParameter 属性为 false 的类型上获取 DeclaringMethod 属性会引发 InvalidOperationException。

DeclaringMethod 属性返回的 MethodBase 为 MethodInfo（对于泛型方法），或为 ConstructorInfo（对于泛型构造函数）。

说明 说明

.NET Framework 2.0 版不支持泛型构造函数。

有关泛型反射中使用的术语的固定条件列表，请参见 IsGenericType 属性备注。

下面的代码示例定义一个具有泛型方法的类，向该方法分配类型参数，并调用产生的构造泛型方法。它还显示关于泛型方法定义和构造方法的信息。在显示关于泛型方法定义的类型参数的信息时，在 DisplayGenericMethodInfo 方法中，代码示例显示了该方法的泛型类型参数的 DeclaringMethod 属性的值。 下面的代码示例定义一个具有泛型方法的类，向该方法分配类型参数，并调用产生的构造泛型方法。它还显示关于泛型方法定义和构造方法的信息。在显示关于泛型方法定义的类型参数的信息时，在 DisplayGenericMethodInfo 方法中，代码示例显示了该方法的泛型类型参数的 DeclaringMethod 属性的值。 下面的代码示例定义一个具有泛型方法的类，向该方法分配类型参数，并调用产生的构造泛型方法。它还显示关于泛型方法定义和构造方法的信息。在显示关于泛型方法定义的类型参数的信息时，在 DisplayGenericMethodInfo 方法中，代码示例显示了该方法的泛型类型参数的 DeclaringMethod 属性的值。

Imports System
Imports System.Reflection

' Define a class with a generic method.
Public Class Example
    Public Shared Sub Generic(Of T)(ByVal toDisplay As T)
        Console.WriteLine(vbCrLf & "Here it is: {0}", toDisplay)
    End Sub
End Class

Public Class Test
    Public Shared Sub Main()
        Console.WriteLine(vbCrLf & "--- Examine a generic method.")

        ' Create a Type object representing class Example, and
        ' get a MethodInfo representing the generic method.
        '
        Dim ex As Type = GetType(Example)
        Dim mi As MethodInfo = ex.GetMethod("Generic")

        DisplayGenericMethodInfo(mi)

        ' Assign the Integer type to the type parameter of the Example
        ' method.
        '
        Dim arguments() As Type = { GetType(Integer) }
        Dim miConstructed As MethodInfo = mi.MakeGenericMethod(arguments)

        DisplayGenericMethodInfo(miConstructed)

        ' Invoke the method.
        Dim args() As Object = { 42 }
        miConstructed.Invoke(Nothing, args)

        ' Invoke the method normally.
        Example.Generic(Of Integer)(42)

        ' Get the generic type definition from the constructed method,
        ' and show that it's the same as the original definition.
        '
        Dim miDef As MethodInfo = miConstructed.GetGenericMethodDefinition()
        Console.WriteLine(vbCrLf & "The definition is the same: {0}", _
            miDef Is mi)
    End Sub 'Main

    Private Shared Sub DisplayGenericMethodInfo(ByVal mi As MethodInfo)
        Console.WriteLine(vbCrLf & mi.ToString())

        Console.WriteLine(vbTab _
            & "Is this a generic method definition? {0}", _
            mi.IsGenericMethodDefinition)

        Console.WriteLine(vbTab & "Is it a generic method? {0}", _
            mi.IsGenericMethod)

        Console.WriteLine(vbTab _
            & "Does it have unassigned generic parameters? {0}", _
            mi.ContainsGenericParameters)

        ' If this is a generic method, display its type arguments.
        '
        If mi.IsGenericMethod Then
            Dim typeArguments As Type() = mi.GetGenericArguments()

            Console.WriteLine(vbTab & "List type arguments ({0}):", _
                typeArguments.Length)

            For Each tParam As Type In typeArguments
                ' IsGenericParameter is true only for generic type
                ' parameters.
                '
                If tParam.IsGenericParameter Then
                    Console.WriteLine(vbTab & vbTab _
                        & "{0}  parameter position: {1}" _
                        & vbCrLf & vbTab & vbTab _
                        & "   declaring method: {2}", _
                        tParam,  _
                        tParam.GenericParameterPosition, _
                        tParam.DeclaringMethod)
                Else
                    Console.WriteLine(vbTab & vbTab & tParam.ToString())
                End If
            Next tParam
        End If
    End Sub
End Class

' This example produces the following output:
'
'--- Examine a generic method.
'
'Void Generic[T](T)
'        Is this a generic method definition? True
'        Is it a generic method? True
'        Does it have unassigned generic parameters? True
'        List type arguments (1):
'                T  parameter position: 0
'                   declaring method: Void Generic[T](T)
'
'Void Generic[Int32](Int32)
'        Is this a generic method definition? False
'        Is it a generic method? True
'        Does it have unassigned generic parameters? False
'        List type arguments (1):
'                System.Int32
'
'Here it is: 42
'
'Here it is: 42
'
'The definition is the same: True
'

using System;
using System.Reflection;

// Define a class with a generic method.
public class Example
{
    public static void Generic<T>(T toDisplay)
    {
        Console.WriteLine("\r\nHere it is: {0}", toDisplay);
    }
}

public class Test
{
    public static void Main()
    {
        Console.WriteLine("\r\n--- Examine a generic method.");

        // Create a Type object representing class Example, and
        // get a MethodInfo representing the generic method.
        //
        Type ex = typeof(Example);
        MethodInfo mi = ex.GetMethod("Generic");

        DisplayGenericMethodInfo(mi);

        // Assign the int type to the type parameter of the Example
        // method.
        //
        MethodInfo miConstructed = mi.MakeGenericMethod(typeof(int));

        DisplayGenericMethodInfo(miConstructed);

        // Invoke the method.
        object[] args = {42};
        miConstructed.Invoke(null, args);

        // Invoke the method normally.
        Example.Generic<int>(42);

        // Get the generic type definition from the closed method,
        // and show it's the same as the original definition.
        //
        MethodInfo miDef = miConstructed.GetGenericMethodDefinition();
        Console.WriteLine("\r\nThe definition is the same: {0}",
            miDef == mi);
    }

    private static void DisplayGenericMethodInfo(MethodInfo mi)
    {
        Console.WriteLine("\r\n{0}", mi);

        Console.WriteLine("\tIs this a generic method definition? {0}",
            mi.IsGenericMethodDefinition);

        Console.WriteLine("\tIs it a generic method? {0}",
            mi.IsGenericMethod);

        Console.WriteLine("\tDoes it have unassigned generic parameters? {0}",
            mi.ContainsGenericParameters);

        // If this is a generic method, display its type arguments.
        //
        if (mi.IsGenericMethod)
        {
            Type[] typeArguments = mi.GetGenericArguments();

            Console.WriteLine("\tList type arguments ({0}):",
                typeArguments.Length);

            foreach (Type tParam in typeArguments)
            {
                // IsGenericParameter is true only for generic type
                // parameters.
                //
                if (tParam.IsGenericParameter)
                {
                    Console.WriteLine("\t\t{0}  parameter position {1}" +
                        "\n\t\t   declaring method: {2}",
                        tParam,
                        tParam.GenericParameterPosition,
                        tParam.DeclaringMethod);
                }
                else
                {
                    Console.WriteLine("\t\t{0}", tParam);
                }
            }
        }
    }
}

/* This example produces the following output:

--- Examine a generic method.

Void Generic[T](T)
        Is this a generic method definition? True
        Is it a generic method? True
        Does it have unassigned generic parameters? True
        List type arguments (1):
                T  parameter position 0
                   declaring method: Void Generic[T](T)

Void Generic[Int32](Int32)
        Is this a generic method definition? False
        Is it a generic method? True
        Does it have unassigned generic parameters? False
        List type arguments (1):
                System.Int32

Here it is: 42

Here it is: 42

The definition is the same: True

 */

using namespace System;
using namespace System::Reflection;

// Define a class with a generic method.
ref class Example
{
public:
    generic<typename T> static void Generic(T toDisplay)
    {
        Console::WriteLine("\r\nHere it is: {0}", toDisplay);
    }
};

void DisplayGenericMethodInfo(MethodInfo^ mi)
{
    Console::WriteLine("\r\n{0}", mi);

    Console::WriteLine("\tIs this a generic method definition? {0}",
        mi->IsGenericMethodDefinition);

    Console::WriteLine("\tIs it a generic method? {0}",
        mi->IsGenericMethod);

    Console::WriteLine("\tDoes it have unassigned generic parameters? {0}",
        mi->ContainsGenericParameters);

    // If this is a generic method, display its type arguments.
    //
    if (mi->IsGenericMethod)
    {
        array<Type^>^ typeArguments = mi->GetGenericArguments();

        Console::WriteLine("\tList type arguments ({0}):",
            typeArguments->Length);

        for each (Type^ tParam in typeArguments)
        {
            // IsGenericParameter is true only for generic type
            // parameters.
            //
            if (tParam->IsGenericParameter)
            {
                Console::WriteLine("\t\t{0}  parameter position {1}" +
                    "\n\t\t   declaring method: {2}",
                    tParam,
                    tParam->GenericParameterPosition,
                    tParam->DeclaringMethod);
            }
            else
            {
                Console::WriteLine("\t\t{0}", tParam);
            }
        }
    }
};

void main()
{
    Console::WriteLine("\r\n--- Examine a generic method.");

    // Create a Type object representing class Example, and
    // get a MethodInfo representing the generic method.
    //
    Type^ ex = Example::typeid;
    MethodInfo^ mi = ex->GetMethod("Generic");

    DisplayGenericMethodInfo(mi);

    // Assign the int type to the type parameter of the Example
    // method.
    //
    MethodInfo^ miConstructed = mi->MakeGenericMethod(int::typeid);

    DisplayGenericMethodInfo(miConstructed);

    // Invoke the method.
    array<Object^>^ args = { 42 };
    miConstructed->Invoke((Object^) 0, args);

    // Invoke the method normally.
    Example::Generic<int>(42);

    // Get the generic type definition from the closed method,
    // and show it's the same as the original definition.
    //
    MethodInfo^ miDef = miConstructed->GetGenericMethodDefinition();
    Console::WriteLine("\r\nThe definition is the same: {0}",
            miDef == mi);
};

/* This example produces the following output:

--- Examine a generic method.

Void Generic[T](T)
        Is this a generic method definition? True
        Is it a generic method? True
        Does it have unassigned generic parameters? True
        List type arguments (1):
                T  parameter position 0
                   declaring method: Void Generic[T](T)

Void Generic[Int32](Int32)
        Is this a generic method definition? False
        Is it a generic method? True
        Does it have unassigned generic parameters? False
        List type arguments (1):
                System.Int32

Here it is: 42

Here it is: 42

The definition is the same: True

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
IsGenericParameter

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.DeclaringType 属性

Type
.
.
::
.
DeclaringType 属性
Type 类

获取用来声明当前的嵌套类型或泛型类型参数的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property DeclaringType As Type
    Get
public override Type DeclaringType { get; }
public:
virtual property Type^ DeclaringType {
    Type^ get () override;
}
abstract DeclaringType : Type
override DeclaringType : Type

属性值

类型： System Type
如果当前的类型是嵌套类型，则为表示封闭类型的 Type 对象；如果当前的类型是泛型类型的类型参数，则为泛型类型的定义；如果当前的类型是泛型方法的类型参数，则为用来声明泛型方法的类型；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

如果当前的 Type 对象表示泛型类型的类型参数，则该属性始终返回泛型类型定义。

如果当前的 Type 对象表示泛型方法的类型参数，则该属性返回包含泛型方法定义的类型。如果该类型是泛型类型，则返回泛型类型定义。即，下面的代码返回包含 ConvertAll<(Of <(TOutput>)>) 泛型方法的 List<(Of <(T>)>) 泛型类的泛型类型定义： 如果当前的 Type 对象表示泛型方法的类型参数，则该属性返回包含泛型方法定义的类型。如果该类型是泛型类型，则返回泛型类型定义。即，下面的代码返回包含 ConvertAll<(Of <(TOutput>)>) 泛型方法的 List<(Of <(T>)>) 泛型类的泛型类型定义： 如果当前的 Type 对象表示泛型方法的类型参数，则该属性返回包含泛型方法定义的类型。如果该类型是泛型类型，则返回泛型类型定义。即，下面的代码返回包含 ConvertAll<(Of <(TOutput>)>) 泛型方法的 List<(Of <(T>)>) 泛型类的泛型类型定义：

Dim t As Type = GetType(List(Of String)).GetMethod("ConvertAll").GetGenericArguments()(0).DeclaringType

Type t = typeof(List<string>).GetMethod("ConvertAll").GetGenericArguments()[0].DeclaringType;

Type^ t = List<String^>::typeid->GetMethod("ConvertAll")->GetGenericArguments()[0]->DeclaringType;

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则 DeclaringType 和 DeclaringMethod 属性标识最初定义泛型类型参数的泛型类型定义或泛型方法定义：

  • 如果 DeclaringMethod 属性返回 MethodInfo，该 MethodInfo 表示泛型方法定义，当前 Type 对象表示该泛型方法定义的类型参数。

  • 如果 DeclaringMethod 属性返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 DeclaringType 属性始终返回一个表示泛型类型定义的 Type 对象，当前 Type 对象表示该泛型类型定义的类型参数。

  • 在 IsGenericParameter 属性为 false 的类型上获取 DeclaringType 属性会引发 InvalidOperationException。

本示例显示派生类中方法的声明类型。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public MustInherit Class dtype

    Public MustInherit Class MyClassA
        Public MustOverride Function m() As Integer
    End Class

    Public MustInherit Class MyClassB
        Inherits MyClassA
    End Class

    Public Shared Sub Main()
        Console.WriteLine("The declaring type of m is {0}.", _
           GetType(MyClassB).GetMethod("m").DeclaringType)
    End Sub
End Class

using System;
using System.Reflection;

public abstract class dtype
{

    public abstract class MyClassA
    {
        public abstract int m();
    }

    public abstract class MyClassB : MyClassA
    {
    }

    public static void Main(string[] args)
    {
        Console.WriteLine("The declaring type of m is {0}.",
            typeof(MyClassB).GetMethod("m").DeclaringType);
    }
}

using namespace System;
using namespace System::Reflection;

public ref class dtype abstract
{
public:
   ref class MyClassA abstract
   {
   public:
      virtual int m() = 0;
   };

   ref class MyClassB abstract: public MyClassA{};
};

int main()
{
   Console::WriteLine( "The declaring type of m is {0}.", dtype::MyClassB::typeid->GetMethod( "m" )->DeclaringType );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
MemberInfo
ReflectedType


Type ..::.DefaultBinder 属性

Type
.
.
::
.
DefaultBinder 属性
Type 类

获取默认联编程序的引用，该程序实现的内部规则用于选择由 InvokeMember 调用的合适成员。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property DefaultBinder As Binder
    Get
public static Binder DefaultBinder { get; }
public:
static property Binder^ DefaultBinder {
    Binder^ get ();
}
static member DefaultBinder : Binder

属性值

类型： System.Reflection Binder
系统使用的默认联编程序的引用。

公共语言运行时提供的默认联编程序适用于除了几种极个别情况之外的所有情况。如果需要一个联编程序，该程序遵守的规则与所提供的默认联编程序的规则不同，则可定义一个从 Binder 类派生的类型，并使用 InvokeMember 重载之一的 binder 参数传递该类型的实例。 公共语言运行时提供的默认联编程序适用于除了几种极个别情况之外的所有情况。如果需要一个联编程序，该程序遵守的规则与所提供的默认联编程序的规则不同，则可定义一个从 Binder 类派生的类型，并使用 InvokeMember 重载之一的 binder 参数传递该类型的实例。

“反射”建立常规类型系统的可访问规则模型。例如，如果调用方在相同的程序集内，则它不需要内部成员的特殊权限。否则，调用方需要 ReflectionPermission。这与保护成员、私有成员等成员的查找是一致的。 “反射”建立常规类型系统的可访问规则模型。例如，如果调用方在相同的程序集内，则它不需要内部成员的特殊权限。否则，调用方需要 ReflectionPermission。这与保护成员、私有成员等成员的查找是一致的。 “反射”建立常规类型系统的可访问规则模型。例如，如果调用方在相同的程序集内，则它不需要内部成员的特殊权限。否则，调用方需要 ReflectionPermission。这与保护成员、私有成员等成员的查找是一致的。 “反射”建立常规类型系统的可访问规则模型。例如，如果调用方在相同的程序集内，则它不需要内部成员的特殊权限。否则，调用方需要 ReflectionPermission。这与保护成员、私有成员等成员的查找是一致的。

一般原则是，ChangeType 应只执行永远不会丢失数据的扩展转换。扩展转换的一个例子是将 32 位有符号整数值转换为 64 位有符号整数值。这与收缩转换不同，后者可能丢失数据。收缩转换的一个例子是将 64 位有符号整数转换为 32 位有符号整数。 一般原则是，ChangeType 应只执行永远不会丢失数据的扩展转换。扩展转换的一个例子是将 32 位有符号整数值转换为 64 位有符号整数值。这与收缩转换不同，后者可能丢失数据。收缩转换的一个例子是将 64 位有符号整数转换为 32 位有符号整数。 一般原则是，ChangeType 应只执行永远不会丢失数据的扩展转换。扩展转换的一个例子是将 32 位有符号整数值转换为 64 位有符号整数值。这与收缩转换不同，后者可能丢失数据。收缩转换的一个例子是将 64 位有符号整数转换为 32 位有符号整数。 一般原则是，ChangeType 应只执行永远不会丢失数据的扩展转换。扩展转换的一个例子是将 32 位有符号整数值转换为 64 位有符号整数值。这与收缩转换不同，后者可能丢失数据。收缩转换的一个例子是将 64 位有符号整数转换为 32 位有符号整数。

下表列出了默认联编程序支持的转换。

源类型 | 目标类型
任何类型 | 它的基类型。
任何类型 | 它实现的接口。
Char | Unt16、UInt32、Int32、UInt64、Int64、Single、Double
Byte | Char、Unt16、Int16、UInt32、Int32、UInt64、Int64、Single、Double
SByte | Int16、Int32、Int64、Single、Double
UInt16 | UInt32、Int32、UInt64、Int64、Single、Double
Int16 | Int32、Int64、Single、Double
UInt32 | UInt64、Int64、Single、Double
Int32 | Int64、Single、Double
UInt64 | Single、Double
Int64 | Single、Double
Single | Double
非引用 | 通过引用。

下面的示例从 DefaultBinder 属性获取默认联编程序，然后通过将 DefaultBinder 值作为参数传递到 InvokeMember 来调用 MyClass 的成员。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class MyDefaultBinderSample
    Public Shared Sub Main()
        Try
            Dim defaultBinder As Binder = Type.DefaultBinder
            Dim [myClass] As New [MyClass]()
            ' Invoke the HelloWorld method of MyClass.
            [myClass].GetType().InvokeMember("HelloWorld", BindingFlags.InvokeMethod, defaultBinder, [myClass], New Object() {})
        Catch e As Exception
            Console.WriteLine("Exception :" + e.Message.ToString())
        End Try
    End Sub 'Main

    Class [MyClass]

        Public Sub HelloWorld()
            Console.WriteLine("Hello World")
        End Sub 'HelloWorld
    End Class '[MyClass]
End Class 'MyDefaultBinderSample

using System;
using System.Reflection;

public class MyDefaultBinderSample
{
    public static void Main()
    {
        try
        {
            Binder defaultBinder = Type.DefaultBinder;
            MyClass myClass = new MyClass();
            // Invoke the HelloWorld method of MyClass.
            myClass.GetType().InvokeMember("HelloWorld", BindingFlags.InvokeMethod,
                defaultBinder, myClass, new object [] {});
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception :" + e.Message);
        }
    }

    class MyClass
    {
        public void HelloWorld()
        {
            Console.WriteLine("Hello World");
        }
    }
}

using namespace System;
using namespace System::Reflection;
ref class MyClass
{
public:
   void HelloWorld()
   {
      Console::WriteLine( "Hello World" );
   }

};

int main()
{
   try
   {
      Binder^ defaultBinder = Type::DefaultBinder;
      MyClass^ myClass = gcnew MyClass;

      // Invoke the HelloWorld method of MyClass.
      myClass->GetType()->InvokeMember( "HelloWorld", BindingFlags::InvokeMethod, defaultBinder, myClass, nullptr );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
Binder


Type ..::.FullName 属性

Type
.
.
::
.
FullName 属性
Type 类

获取 Type 的完全限定名，包括 Type 的命名空间，但不包括程序集。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property FullName As String
    Get
public abstract string FullName { get; }
public:
virtual property String^ FullName {
    String^ get () abstract;
}
abstract FullName : string

属性值

类型： System String
Type 的完全限定名，包括 Type 的命名空间，但不包括程序集；如果当前实例表示泛型类型参数、数组类型、指针类型或基于类型参数的 byref 类型，或表示不属于泛型类型定义但包含无法解析的类型参数的泛型类型，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

例如，C# 字符串类型的完全限定名为 System.String。这与程序集限定的名称形成对比，后者是完整的名称加上 AssemblyQualifiedName 属性提供的程序集。 例如，C# 字符串类型的完全限定名为 System.String。这与程序集限定的名称形成对比，后者是完整的名称加上 AssemblyQualifiedName 属性提供的程序集。

如果当前 Type 表示泛型类型，则 FullName 返回的字符串中的类型实参是使用它们的程序集、版本等来限定的 — 尽管该泛型类型本身的字符串表示形式不是由程序集限定的。因此，串联 t.FullName + ", " + t.Assembly.FullName 将产生等效于 t.AssemblyQualifiedName 的结果，对于非泛型类型也是如此。 如果当前 Type 表示泛型类型，则 FullName 返回的字符串中的类型实参是使用它们的程序集、版本等来限定的 — 尽管该泛型类型本身的字符串表示形式不是由程序集限定的。因此，串联 t.FullName + ", " + t.Assembly.FullName 将产生等效于 t.AssemblyQualifiedName 的结果，对于非泛型类型也是如此。

如果当前 Type 表示泛型类型的类型参数，或表示数组类型、指针类型或基于类型参数的 byref 类型，则此属性将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果当前类型包含尚未被特定类型替换的泛型类型参数（即，ContainsGenericParameters 属性返回 true），但该类型不属于泛型类型定义（即，IsGenericTypeDefinition 属性返回 false），此属性将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。例如，考虑下面的代码中的类 Base 和 Derived。 如果当前类型包含尚未被特定类型替换的泛型类型参数（即，ContainsGenericParameters 属性返回 true），但该类型不属于泛型类型定义（即，IsGenericTypeDefinition 属性返回 false），此属性将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。例如，考虑下面的代码中的类 Base 和 Derived。

Public Class Base(Of TBase)
End Class
Public Class Derived(Of TDerived)
    Inherits Base(Of TDerived)
End Class

public class Base<TBase> { }
public class Derived<TDerived> : Base<TDerived> { }

generic<typename TBase>
    public ref class Base { };
generic<typename TDerived>
    public ref class Derived : Base<TDerived> { };

如果您使用 BaseType 属性获取 Derived 的基类型，则生成的 Type 对象的 FullName 属性将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。若要获取非空 FullName，您可以使用 GetGenericTypeDefinition 方法来获取泛型类型定义。 如果您使用 BaseType 属性获取 Derived 的基类型，则生成的 Type 对象的 FullName 属性将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。若要获取非空 FullName，您可以使用 GetGenericTypeDefinition 方法来获取泛型类型定义。

此属性为只读。

下面的示例显示指定类型的全称。

Imports System

Class TestFullName

    Public Shared Sub Main()
        Dim t As Type = GetType(Array)
        Console.WriteLine("The full name of the Array type is {0}.", t.FullName)
    End Sub 'Main
End Class 'TestFullName

' This example produces the following output:
'
'The full name of the Array type is System.Array.
'

using System;
class TestFullName
{
public static void Main()
    {
    Type t = typeof(Array);
    Console.WriteLine("The full name of the Array type is {0}.", t.FullName);
    }
}

/* This example produces the following output:

The full name of the Array type is System.Array.
 */

using namespace System;
int main()
{
   Type^ t = Array::typeid;
   Console::WriteLine( "The full name of the Array type is {0}.", t->FullName );
}

/* This example produces the following output:

The full name of the Array type is System.Array.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
String
Namespace
AssemblyQualifiedName
AssemblyName

其他资源

指定完全限定的类型名称


Type ..::.GenericParameterAttributes 属性

Type
.
.
::
.
GenericParameterAttributes 属性
Type 类

获取描述当前泛型类型参数的协变和特殊约束的 GenericParameterAttributes 标志。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property GenericParameterAttributes As GenericParameterAttributes
    Get
public virtual GenericParameterAttributes GenericParameterAttributes { get; }
public:
virtual property GenericParameterAttributes GenericParameterAttributes {
    GenericParameterAttributes get ();
}
abstract GenericParameterAttributes : GenericParameterAttributes
override GenericParameterAttributes : GenericParameterAttributes

属性值

类型： System.Reflection GenericParameterAttributes
GenericParameterAttributes 值的按位组合，用于描述当前泛型类型参数的协变和特殊约束。
异常 | 条件
InvalidOperationException | 当前的 Type 对象不是泛型类型参数。即 IsGenericParameter 属性返回 false。 当前的 Type 对象不是泛型类型参数。即 IsGenericParameter 属性返回 false。
NotSupportedException | 基类不支持所调用的方法。

此属性的值包含了描述当前泛型类型参数是否为协变的标志以及描述任何特殊约束的标志。使用 GenericParameterAttributes..::.VarianceMask 值可以选择协变标志，使用 GenericParameterAttributes..::.SpecialConstraintMask 值可以选择约束标志。 此属性的值包含了描述当前泛型类型参数是否为协变的标志以及描述任何特殊约束的标志。使用 GenericParameterAttributes..::.VarianceMask 值可以选择协变标志，使用 GenericParameterAttributes..::.SpecialConstraintMask 值可以选择约束标志。

有关泛型反射中使用的术语的固定条件列表，请参见 IsGenericType 属性备注。

下面的代码示例定义泛型类型 Test，该泛型类型包含两个具有不同约束的类型参数。当程序执行时，使用 GenericParameterAttributes 属性和 GetGenericParameterConstraints 方法检查这些约束。 下面的代码示例定义泛型类型 Test，该泛型类型包含两个具有不同约束的类型参数。当程序执行时，使用 GenericParameterAttributes 属性和 GetGenericParameterConstraints 方法检查这些约束。

Imports System
Imports System.Reflection

' Define a sample interface to use as an interface constraint.
Public Interface ITest
End Interface

' Define a base type to use as a base class constraint.
Public Class Base
End Class

' Define the generic type to examine. The first generic type parameter,
' T, derives from the class Base and implements ITest. This demonstrates
' a base class constraint and an interface constraint. The second generic
' type parameter, U, must be a reference type (Class) and must have a
' default constructor (New). This demonstrates special constraints.
'
Public Class Test(Of T As {Base, ITest}, U As {New, Class})
End Class

' Define a type that derives from Base and implements ITtest. This type
' satisfies the constraints on T in class Test.
Public Class Derived
    Inherits Base
    Implements ITest
End Class

Public Class Example

    Public Shared Sub Main()
        ' To get the generic type definition, omit the type
        ' arguments but retain the comma to indicate the number
        ' of type arguments.
        '
        Dim def As Type = GetType(Test(Of ,))
        Console.WriteLine(vbCrLf & "Examining generic type {0}", def)

        ' Get the type parameters of the generic type definition,
        ' and display them.
        '
        Dim defparams() As Type = def.GetGenericArguments()
        For Each tp As Type In defparams

            Console.WriteLine(vbCrLf & "Type parameter: {0}", tp.Name)
            Console.WriteLine(vbTab & ListGenericParameterAttributes(tp))

            ' List the base class and interface constraints. The
            ' constraints do not appear in any particular order. An
            ' empty array is returned if there are no constraints.
            '
            Dim tpConstraints As Type() = _
                tp.GetGenericParameterConstraints()
            For Each tpc As Type In  tpConstraints
                Console.WriteLine(vbTab & tpc.ToString())
            Next tpc
        Next tp

    End Sub

    ' List the variance and special constraint flags.
    '
    Private Shared Function ListGenericParameterAttributes(ByVal t As Type) As String
        Dim retval As String
        Dim gpa As GenericParameterAttributes = t.GenericParameterAttributes

        ' Select the variance flags.
        Dim variance As GenericParameterAttributes = _
            gpa And GenericParameterAttributes.VarianceMask

        If variance = GenericParameterAttributes.None Then
            retval = "No variance flag;"
        Else
            If (variance And GenericParameterAttributes.Covariant) <> 0 Then
                retval = "Covariant;"
            Else
                retval = "Contravariant;"
            End If
        End If

        ' Select the constraint flags.
        Dim constraints As GenericParameterAttributes = _
            gpa And GenericParameterAttributes.SpecialConstraintMask

        If constraints = GenericParameterAttributes.None Then
            retval &= " no special constraints."
        Else
            If (constraints And GenericParameterAttributes.ReferenceTypeConstraint) <> 0 Then
                retval &= " ReferenceTypeConstraint"
            End If
            If (constraints And GenericParameterAttributes.NotNullableValueTypeConstraint) <> 0 Then
                retval &= " NotNullableValueTypeConstraint"
            End If
            If (constraints And GenericParameterAttributes.DefaultConstructorConstraint) <> 0 Then
                retval &= " DefaultConstructorConstraint"
            End If
        End If
        Return retval

    End Function
End Class
' This example produces the following output:
'
'Examining generic type Test`2[T,U]
'
'Type parameter: T
'        No variance flag; no special constraints.
'        Base
'        ITest
'
'Type parameter: U
'        No variance flag; ReferenceTypeConstraint DefaultConstructorConstraint
'

using System;
using System.Reflection;

// Define a sample interface to use as an interface constraint.
public interface ITest {}

// Define a base type to use as a base class constraint.
public class Base {}

// Define the generic type to examine. The first generic type parameter,
// T, derives from the class Base and implements ITest. This demonstrates
// a base class constraint and an interface constraint. The second generic
// type parameter, U, must be a reference type (class) and must have a
// default constructor (new()). This demonstrates special constraints.
//
public class Test<T,U>
    where T : Base, ITest
    where U : class, new() {}

// Define a type that derives from Base and implements ITest. This type
// satisfies the constraints on T in class Test.
public class Derived : Base, ITest {}

public class Example
{
    public static void Main()
    {
        // To get the generic type definition, omit the type
        // arguments but retain the comma to indicate the number
        // of type arguments.
        //
        Type def = typeof(Test<,>);
        Console.WriteLine("\r\nExamining generic type {0}", def);

        // Get the type parameters of the generic type definition,
        // and display them.
        //
        Type[] defparams = def.GetGenericArguments();
        foreach (Type tp in defparams)
        {
            Console.WriteLine("\r\nType parameter: {0}", tp.Name);
            Console.WriteLine("\t{0}",
                ListGenericParameterAttributes(tp));

            // List the base class and interface constraints. The
            // constraints are returned in no particular order. If
            // there are no class or interface constraints, an empty
            // array is returned.
            //
            Type[] tpConstraints = tp.GetGenericParameterConstraints();
            foreach (Type tpc in tpConstraints)
            {
                Console.WriteLine("\t{0}", tpc);
            }
        }
    }

    // List the variance and special constraint flags.
    //
    private static string ListGenericParameterAttributes(Type t)
    {
        string retval;
        GenericParameterAttributes gpa = t.GenericParameterAttributes;
        GenericParameterAttributes variance = gpa &
            GenericParameterAttributes.VarianceMask;

        // Select the variance flags.
        if (variance == GenericParameterAttributes.None)
            retval = "No variance flag;";
        else
        {
            if ((variance & GenericParameterAttributes.Covariant) != 0)
                retval = "Covariant;";
            else
                retval = "Contravariant;";
        }

        // Select
        GenericParameterAttributes constraints = gpa &
            GenericParameterAttributes.SpecialConstraintMask;

        if (constraints == GenericParameterAttributes.None)
            retval += " No special constraints";
        else
        {
            if ((constraints & GenericParameterAttributes.ReferenceTypeConstraint) != 0)
                retval += " ReferenceTypeConstraint";
            if ((constraints & GenericParameterAttributes.NotNullableValueTypeConstraint) != 0)
                retval += " NotNullableValueTypeConstraint";
            if ((constraints & GenericParameterAttributes.DefaultConstructorConstraint) != 0)
                retval += " DefaultConstructorConstraint";
        }

        return retval;
    }
}
/* This example produces the following output:

Examining generic type Test`2[T,U]

Type parameter: T
        No variance flag; no special constraints.
        Base
        ITest

Type parameter: U
        No variance flag; ReferenceTypeConstraint DefaultConstructorConstraint
 */

using namespace System;
using namespace System::Collections;
using namespace System::Reflection;

// Define a sample interface to use as an interface constraint.
interface class ITest{};

// Define a base type to use as a class constraint.
public ref class Base{};

// Define the generic type to examine. The first generic type parameter,
// T, derives from the class Base and implements ITest. This demonstrates
// a base class constraint and an interface constraint. In the .NET
// Framework version 2.0, C++ has no way of expressing special constraints.
// See the C# example code.
//
generic <typename T, typename U>
   where T :  Base, ITest
ref class Test {};

// Define a type that derives from Base and implements interface
// ITest. This type satisfies the constraint on T in class Test.
public ref class Derived: public Base, public ITest {};

public ref class Example
{
public:
   static void Main()
   {
      // Create a constructed type from Test<T,U>, and from it
      // get the generic type definition.
      //
      Type^ def = Test::typeid;
      Console::WriteLine( L"\r\nExamining generic type {0}", def );

      // Get the type parameters of the generic type definition,
      // and display them.
      //
      for each (Type^ tp in def->GetGenericArguments())
      {
         Console::WriteLine( L"\r\nType parameter: {0}", tp);
         Console::WriteLine( L"\t{0}",
            ListGenericParameterAttributes( tp ) );

         // List the base class and interface constraints. The
         // constraints do not appear in any particular order. If
         // there are no class or interface constraints, an empty
         // array is returned.
         //
         for each (Type^ constraint in tp->GetGenericParameterConstraints())
         {
            Console::WriteLine( L"\t{0}", constraint );
         }
      }
   }

private:

   // List the variance and special constraint flags.
   //
   static String^ ListGenericParameterAttributes( Type^ t )
   {
      String^ retval;
      GenericParameterAttributes gpa = t->GenericParameterAttributes;

      // Select the variance flag.
      GenericParameterAttributes variance =
         static_cast<GenericParameterAttributes>(
            gpa & GenericParameterAttributes::VarianceMask );

      if ( variance == GenericParameterAttributes::None )
            retval = L"No variance flag;";
      else
      {
         if ( (variance & GenericParameterAttributes::Covariant) !=
               GenericParameterAttributes::None )
            retval = L"Covariant;";
         else
            retval = L"Contravariant;";
      }

      // Select the special constraint flags.
      GenericParameterAttributes constraints =
         static_cast<GenericParameterAttributes>(
            gpa & GenericParameterAttributes::SpecialConstraintMask);

      if ( constraints == GenericParameterAttributes::None )
            retval = String::Concat( retval, L" No special constraints" );
      else
      {
         if ( (constraints & GenericParameterAttributes::ReferenceTypeConstraint) !=
               GenericParameterAttributes::None )
            retval = String::Concat( retval, L" ReferenceTypeConstraint" );

         if ( (constraints & GenericParameterAttributes::NotNullableValueTypeConstraint) !=
               GenericParameterAttributes::None )
            retval = String::Concat( retval, L" NotNullableValueTypeConstraint" );

         if ( (constraints & GenericParameterAttributes::DefaultConstructorConstraint) !=
               GenericParameterAttributes::None )
            retval = String::Concat( retval, L" DefaultConstructorConstraint" );
      }

      return retval;
   }
};

int main()
{
   Example::Main();
}

/* This example produces the following output:

Examining generic type Test`2[T,U]

Type parameter: T
        No variance flag; No special constraints
        Base
        ITest

Type parameter: U
        No variance flag; No special constraints
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
GetGenericParameterConstraints
IsGenericParameter

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.GenericParameterPosition 属性

Type
.
.
::
.
GenericParameterPosition 属性
Type 类

当 Type 对象表示泛型类型或泛型方法的类型参数时，获取类型参数在声明它的泛型类型或方法的类型参数列表中的位置。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property GenericParameterPosition As Integer
    Get
public virtual int GenericParameterPosition { get; }
public:
virtual property int GenericParameterPosition {
    int get ();
}
abstract GenericParameterPosition : int
override GenericParameterPosition : int

属性值

类型： System Int32
类型参数在定义它的泛型类型或方法的类型参数列表中的位置。位置编号从 0 开始。 类型参数在定义它的泛型类型或方法的类型参数列表中的位置。位置编号从 0 开始。
异常 | 条件
InvalidOperationException | 当前类型不表示类型参数。即 IsGenericParameter 返回 false。 当前类型不表示类型参数。即 IsGenericParameter 返回 false。

GenericParameterPosition 属性返回类型参数在最初定义该类型参数的泛型类型定义或方法定义的参数列表中的位置。DeclaringType 和 DeclaringMethod 属性标识泛型类型或方法定义： GenericParameterPosition 属性返回类型参数在最初定义该类型参数的泛型类型定义或方法定义的参数列表中的位置。DeclaringType 和 DeclaringMethod 属性标识泛型类型或方法定义：

  • 如果 DeclaringMethod 属性返回 MethodInfo，该 MethodInfo 表示泛型方法定义，当前 Type 对象表示该泛型方法定义的类型参数。

  • 如果 DeclaringMethod 属性返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 DeclaringType 属性始终返回一个表示泛型类型定义的 Type 对象，当前 Type 对象表示该泛型类型定义的类型参数。

为了给 GenericParameterPosition 属性的值提供正确的上下文，有必要标识类型参数所属的泛型类型或方法。例如，考虑以下代码中的泛型方法 GetSomething 的返回值： 为了给 GenericParameterPosition 属性的值提供正确的上下文，有必要标识类型参数所属的泛型类型或方法。例如，考虑以下代码中的泛型方法 GetSomething 的返回值：

Public Class B(Of T, U)
End Class
Public Class A(Of V)
    Public Function GetSomething(Of X)() As B(Of V, X)
        Return New B(Of V, X)()
    End Function
End Class

public class B<T, U> { }
public class A<V>
{
    public B<V, X> GetSomething<X>()
    {
        return new B<V, X>();
    }
}

generic<typename T, typename U> public ref class B { };
generic<typename V> public ref class A
{
public:
    generic<typename X> B<V, X>^ GetSomething()
    {
        return gcnew B<V, X>();
    }
};

GetSomething 返回的类型取决于提供给类 A 和 GetSomething 自身的类型参数。您可以为 GetSomething 获取 MethodInfo，然后从中获取返回类型。当检查返回类型的类型参数时，GenericParameterPosition 对二者均返回 0。V 的位置为 0，因为 V 是类 A 的类型参数列表中的第一个类型参数。X 的位置为 0，因为 X 是 GetSomething 的类型参数列表中的第一个类型参数。 GetSomething 返回的类型取决于提供给类 A 和 GetSomething 自身的类型参数。您可以为 GetSomething 获取 MethodInfo，然后从中获取返回类型。当检查返回类型的类型参数时，GenericParameterPosition 对二者均返回 0。V 的位置为 0，因为 V 是类 A 的类型参数列表中的第一个类型参数。X 的位置为 0，因为 X 是 GetSomething 的类型参数列表中的第一个类型参数。 GetSomething 返回的类型取决于提供给类 A 和 GetSomething 自身的类型参数。您可以为 GetSomething 获取 MethodInfo，然后从中获取返回类型。当检查返回类型的类型参数时，GenericParameterPosition 对二者均返回 0。V 的位置为 0，因为 V 是类 A 的类型参数列表中的第一个类型参数。X 的位置为 0，因为 X 是 GetSomething 的类型参数列表中的第一个类型参数。 GetSomething 返回的类型取决于提供给类 A 和 GetSomething 自身的类型参数。您可以为 GetSomething 获取 MethodInfo，然后从中获取返回类型。当检查返回类型的类型参数时，GenericParameterPosition 对二者均返回 0。V 的位置为 0，因为 V 是类 A 的类型参数列表中的第一个类型参数。X 的位置为 0，因为 X 是 GetSomething 的类型参数列表中的第一个类型参数。 GetSomething 返回的类型取决于提供给类 A 和 GetSomething 自身的类型参数。您可以为 GetSomething 获取 MethodInfo，然后从中获取返回类型。当检查返回类型的类型参数时，GenericParameterPosition 对二者均返回 0。V 的位置为 0，因为 V 是类 A 的类型参数列表中的第一个类型参数。X 的位置为 0，因为 X 是 GetSomething 的类型参数列表中的第一个类型参数。

说明 说明

如果当前 Type 不表示类型参数，调用 GenericParameterPosition 属性将导致异常。在检查开放构造类型的类型实参时，应使用 IsGenericParameter 属性来告知哪些是类型参数，哪些是类型。IsGenericParameter 属性对于类型参数返回 true；然后您可以使用 GenericParameterPosition 方法获取其位置，使用 DeclaringMethod 和 DeclaringType 属性确定定义它的泛型方法或类型定义。 如果当前 Type 不表示类型参数，调用 GenericParameterPosition 属性将导致异常。在检查开放构造类型的类型实参时，应使用 IsGenericParameter 属性来告知哪些是类型参数，哪些是类型。IsGenericParameter 属性对于类型参数返回 true；然后您可以使用 GenericParameterPosition 方法获取其位置，使用 DeclaringMethod 和 DeclaringType 属性确定定义它的泛型方法或类型定义。 如果当前 Type 不表示类型参数，调用 GenericParameterPosition 属性将导致异常。在检查开放构造类型的类型实参时，应使用 IsGenericParameter 属性来告知哪些是类型参数，哪些是类型。IsGenericParameter 属性对于类型参数返回 true；然后您可以使用 GenericParameterPosition 方法获取其位置，使用 DeclaringMethod 和 DeclaringType 属性确定定义它的泛型方法或类型定义。

下面的示例定义具有两个类型参数的泛型类，并定义从第一个类派生的第二个泛型类。派生类的基类有两个类型参数：第一个参数为 Int32，第二个参数为派生类型的类型参数。该示例显示有关这些泛型类的信息，其中包括 GenericParameterPosition 属性报告的位置。 下面的示例定义具有两个类型参数的泛型类，并定义从第一个类派生的第二个泛型类。派生类的基类有两个类型参数：第一个参数为 Int32，第二个参数为派生类型的类型参数。该示例显示有关这些泛型类的信息，其中包括 GenericParameterPosition 属性报告的位置。 下面的示例定义具有两个类型参数的泛型类，并定义从第一个类派生的第二个泛型类。派生类的基类有两个类型参数：第一个参数为 Int32，第二个参数为派生类型的类型参数。该示例显示有关这些泛型类的信息，其中包括 GenericParameterPosition 属性报告的位置。

Imports System
Imports System.Reflection
Imports System.Collections.Generic
Imports Microsoft.VisualBasic

' Define a base class with two type parameters.
Public Class Base(Of T, U)
End Class

' Define a derived class. The derived class inherits from a constructed
' class that meets the following criteria:
'   (1) Its generic type definition is Base<T, U>.
'   (2) It uses int for the first type parameter.
'   (3) For the second type parameter, it uses the same type that is used
'       for the type parameter of the derived class.
' Thus, the derived class is a generic type with one type parameter, but
' its base class is an open constructed type with one assigned type
' parameter and one unassigned type parameter.
Public Class Derived(Of V)
    Inherits Base(Of Integer, V)
End Class

Public Class Test

    Public Shared Sub Main()
        Console.WriteLine(vbCrLf _
            & "--- Display a generic type and the open constructed")
        Console.WriteLine("    type from which it is derived.")

        ' Create a Type object representing the generic type definition
        ' for the Derived type, by omitting the type argument. (For
        ' types with multiple type parameters, supply the commas but
        ' omit the type arguments.)
        '
        Dim derivedType As Type = GetType(Derived(Of ))
        DisplayGenericTypeInfo(derivedType)

        ' Display its open constructed base type.
        DisplayGenericTypeInfo(derivedType.BaseType)

    End Sub 'Main

    Private Shared Sub DisplayGenericTypeInfo(ByVal t As Type)
        Console.WriteLine(vbCrLf & "{0}", t)

        Console.WriteLine(vbTab & "Is this a generic type definition? " _
            & t.IsGenericTypeDefinition)

        Console.WriteLine(vbTab & "Is it a generic type? " _
            & t.IsGenericType)

        Console.WriteLine(vbTab _
            & "Does it have unassigned generic parameters? " _
            & t.ContainsGenericParameters)

        If t.IsGenericType Then
            ' If this is a generic type, display the type arguments.
            '
            Dim typeArguments As Type() = t.GetGenericArguments()

            Console.WriteLine(vbTab & "List type arguments (" _
                & typeArguments.Length & "):")

            For Each tParam As Type In typeArguments
                ' IsGenericParameter is true only for generic type
                ' parameters.
                '
                If tParam.IsGenericParameter Then
                    Console.WriteLine(vbTab & vbTab & tParam.ToString() _
                        & "  (unassigned - parameter position " _
                        & tParam.GenericParameterPosition & ")")
                Else
                    Console.WriteLine(vbTab & vbTab & tParam.ToString())
                End If
            Next tParam
        End If

    End Sub 'DisplayGenericTypeInfo
End Class 'Test

' This example produces the following output:
'
'--- Display a generic type and the open constructed
'    type from which it is derived.
'
'Derived`1[V]
'        Is this a generic type definition? True
'        Is it a generic type? True
'        Does it have unassigned generic parameters? True
'        List type arguments (1):
'                V  (unassigned - parameter position 0)
'
'Base`2[System.Int32,V]
'        Is this a generic type definition? False
'        Is it a generic type? True
'        Does it have unassigned generic parameters? True
'        List type parameters (2):
'                System.Int32
'                V  (unassigned - parameter position 0)
'

using System;
using System.Reflection;
using System.Collections.Generic;

// Define a base class with two type parameters.
public class Base<T, U> { }

// Define a derived class. The derived class inherits from a constructed
// class that meets the following criteria:
//   (1) Its generic type definition is Base<T, U>.
//   (2) It specifies int for the first type parameter.
//   (3) For the second type parameter, it uses the same type that is used
//       for the type parameter of the derived class.
// Thus, the derived class is a generic type with one type parameter, but
// its base class is an open constructed type with one type argument and
// one type parameter.
public class Derived<V> : Base<int, V> { }

public class Test
{
    public static void Main()
    {
        Console.WriteLine(
            "\r\n--- Display a generic type and the open constructed");
        Console.WriteLine("    type from which it is derived.");

        // Create a Type object representing the generic type definition
        // for the Derived type, by omitting the type argument. (For
        // types with multiple type parameters, supply the commas but
        // omit the type arguments.)
        //
        Type derivedType = typeof(Derived<>);
        DisplayGenericTypeInfo(derivedType);

        // Display its open constructed base type.
        DisplayGenericTypeInfo(derivedType.BaseType);
    }

    private static void DisplayGenericTypeInfo(Type t)
    {
        Console.WriteLine("\r\n{0}", t);

        Console.WriteLine("\tIs this a generic type definition? {0}",
            t.IsGenericTypeDefinition);

        Console.WriteLine("\tIs it a generic type? {0}",
            t.IsGenericType);

        Console.WriteLine("\tDoes it have unassigned generic parameters? {0}",
            t.ContainsGenericParameters);

        if (t.IsGenericType)
        {
            // If this is a generic type, display the type arguments.
            //
            Type[] typeArguments = t.GetGenericArguments();

            Console.WriteLine("\tList type arguments ({0}):",
                typeArguments.Length);

            foreach (Type tParam in typeArguments)
            {
                // IsGenericParameter is true only for generic type
                // parameters.
                //
                if (tParam.IsGenericParameter)
                {
                    Console.WriteLine(
                        "\t\t{0}  (unassigned - parameter position {1})",
                        tParam,
                        tParam.GenericParameterPosition);
                }
                else
                {
                    Console.WriteLine("\t\t{0}", tParam);
                }
            }
        }
    }
}

/* This example produces the following output:

--- Display a generic type and the open constructed
    type from which it is derived.

Derived`1[V]
        Is this a generic type definition? True
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (1):
                V  (unassigned - parameter position 0)

Base`2[System.Int32,V]
        Is this a generic type definition? False
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (2):
                System.Int32
                V  (unassigned - parameter position 0)
 */

using namespace System;
using namespace System::Reflection;
using namespace System::Collections::Generic;

// Define a base class with two type parameters.
generic< class T,class U >
public ref class Base {};

// Define a derived class. The derived class inherits from a constructed
// class that meets the following criteria:
//   (1) Its generic type definition is Base<T, U>.
//   (2) It specifies int for the first type parameter.
//   (3) For the second type parameter, it uses the same type that is used
//       for the type parameter of the derived class.
// Thus, the derived class is a generic type with one type parameter, but
// its base class is an open constructed type with one type argument and
// one type parameter.
generic<class V>
public ref class Derived : Base<int,V> {};

public ref class Test
{
public:
    static void Main()
    {
        Console::WriteLine(
            L"\r\n--- Display a generic type and the open constructed");
        Console::WriteLine(L"    type from which it is derived.");

        // Create a Type object representing the generic type definition
        // for the Derived type. Note the absence of type arguments.
        //
        Type^ derivedType = Derived::typeid;
        DisplayGenericTypeInfo(derivedType);

        // Display its open constructed base type.
        DisplayGenericTypeInfo(derivedType->BaseType);
    }

private:
    static void DisplayGenericTypeInfo(Type^ t)
    {
        Console::WriteLine(L"\r\n{0}", t);
        Console::WriteLine(L"\tIs this a generic type definition? {0}",
            t->IsGenericTypeDefinition);
        Console::WriteLine(L"\tIs it a generic type? {0}", t->IsGenericType);
        Console::WriteLine(L"\tDoes it have unassigned generic parameters? {0}",
            t->ContainsGenericParameters);
        if (t->IsGenericType)
        {

            // If this is a generic type, display the type arguments.
            //
            array<Type^>^typeArguments = t->GetGenericArguments();
            Console::WriteLine(L"\tList type arguments ({0}):",
                typeArguments->Length);
            System::Collections::IEnumerator^ myEnum =
                typeArguments->GetEnumerator();
            while (myEnum->MoveNext())
            {
                Type^ tParam = safe_cast<Type^>(myEnum->Current);

                // IsGenericParameter is true only for generic type
                // parameters.
                //
                if (tParam->IsGenericParameter)
                {
                    Console::WriteLine(
                        L"\t\t{0}  (unassigned - parameter position {1})",
                        tParam, tParam->GenericParameterPosition);
                }
                else
                {
                    Console::WriteLine(L"\t\t{0}", tParam);
                }
            }
        }
    }
};

int main()
{
    Test::Main();
}

/* This example produces the following output:

--- Display a generic type and the open constructed
    type from which it is derived.

Derived`1[V]
        Is this a generic type definition? True
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (1):
                V  (unassigned - parameter position 0)

Base`2[System.Int32,V]
        Is this a generic type definition? False
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (2):
                System.Int32
                V  (unassigned - parameter position 0)
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
MakeGenericType
ContainsGenericParameters
IsGenericParameter

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.GUID 属性

Type
.
.
::
.
GUID 属性
Type 类

获取与 Type 关联的 GUID。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property GUID As Guid
    Get
public abstract Guid GUID { get; }
public:
virtual property Guid GUID {
    Guid get () abstract;
}
abstract GUID : Guid

属性值

类型： System Guid
与 Type 关联的 GUID。

实现

GUID 通过 GuidAttribute 特性与类型关联。

下面的示例创建具有公共方法的类 MyClass1，创建与 MyClass1 对应的 Type 对象，然后使用 Type 类的 GUID 属性获取 Guid 结构。

Imports System

Class MyGetTypeFromCLSID

    Public Class MyClass1

        Public Sub MyMethod1()
        End Sub 'MyMethod1

    End Class 'MyClass1

    Public Shared Sub Main()
        ' Get the type corresponding to the class MyClass.
        Dim myType As Type = GetType(MyClass1)
        ' Get the object of the Guid.
        Dim myGuid As Guid = CType(myType.GUID, Guid)
        Console.WriteLine(("The name of the class is " + myType.ToString()))
        Console.WriteLine(("The ClassId of MyClass is " + myType.GUID.ToString()))
    End Sub 'Main
End Class 'MyGetTypeFromCLSID

using System;

class MyGetTypeFromCLSID
{
    public class MyClass1
    {
        public void MyMethod1()
        {
        }
    }
    public static void Main()
    {
        // Get the type corresponding to the class MyClass.
        Type myType = typeof(MyClass1);
        // Get the object of the Guid.
        Guid myGuid =(Guid) myType.GUID;
        Console.WriteLine("The name of the class is "+myType.ToString());
        Console.WriteLine("The ClassId of MyClass is "+myType.GUID);
    }
}

using namespace System;
ref class MyGetTypeFromCLSID
{
public:
   ref class MyClass1
   {
   public:
      void MyMethod1(){}
   };
};

int main()
{

   // Get the type corresponding to the class MyClass.
   Type^ myType = MyGetTypeFromCLSID::MyClass1::typeid;

   // Get the Object* of the Guid.
   Guid myGuid = (Guid)myType->GUID;
   Console::WriteLine( "The name of the class is {0}", myType );
   Console::WriteLine( "The ClassId of MyClass is {0}", myType->GUID );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
Guid


Type ..::.HasElementType 属性

Type
.
.
::
.
HasElementType 属性
Type 类

获取一个值，通过该值指示当前 Type 是包含还是引用另一类型，即当前 Type 是数组、指针还是通过引用传递。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property HasElementType As Boolean
    Get
public bool HasElementType { get; }
public:
virtual property bool HasElementType {
    bool get () sealed;
}
abstract HasElementType : bool
override HasElementType : bool

属性值

类型： System Boolean
如果 Type 为数组、指针或按引用传递，则为 true；否则为 false。

实现

例如，Type.GetType("Int32[]").HasElementType 返回 true，而 Type.GetType("Int32").HasElementType 返回 false。对于“Int32*”和“Int32&”，HasElementType 也返回 true。 例如，Type.GetType("Int32[]").HasElementType 返回 true，而 Type.GetType("Int32").HasElementType 返回 false。对于“Int32*”和“Int32&”，HasElementType 也返回 true。

如果当前 Type 表示泛型类型，或泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

下面的示例根据对象是否是数组、引用类型或指针来返回 true 或 false。

Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

Public Class Example

    ' This method is for demonstration purposes.
    Public Shared Sub Test(ByRef x As Integer, <Out> ByRef y As Integer)
    End Sub

    Public Shared Sub Main()
        ' All of the following display 'True'.

        ' Define an array, get its type, and display HasElementType.
        Dim nums() As Integer = {1, 1, 2, 3, 5, 8, 13}
        Dim t As Type = nums.GetType()
        Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType)

        ' Test an array type without defining an array.
        t = GetType(Example())
        Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType)

        ' When you use Reflection Emit to emit dynamic methods and
        ' assemblies, you can create array types using MakeArrayType.
        ' The following creates the type 'array of Example'.
        t = GetType(Example).MakeArrayType()
        Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType)

        ' When you reflect over methods, HasElementType is true for
        ' ref, out, and pointer parameter types. The following
        ' gets the Test method, defined above, and examines its
        ' parameters.
        Dim mi As MethodInfo = GetType(Example).GetMethod("Test")
        Dim parms() As ParameterInfo = mi.GetParameters()
        t = parms(0).ParameterType
        Console.WriteLine("HasElementType is '{0}' for ref parameter types.", t.HasElementType)
        t = parms(1).ParameterType
        Console.WriteLine("HasElementType is '{0}' for <Out> parameter types.", t.HasElementType)

        ' When you use Reflection Emit to emit dynamic methods and
        ' assemblies, you can create pointer and ByRef types to use
        ' when you define method parameters.
        t = GetType(Example).MakePointerType()
        Console.WriteLine("HasElementType is '{0}' for pointer types.", t.HasElementType)
        t = GetType(Example).MakeByRefType()
        Console.WriteLine("HasElementType is '{0}' for ByRef types.", t.HasElementType)
    End Sub

End Class

// This code must be compiled with the /unsafe switch:
//   csc /unsafe source.cs
using System;
using System.Reflection;

public class Example
{
    // This method is for demonstration purposes.
    unsafe public void Test(ref int x, out int y, int* z)
    {
        *z = x = y = 0;
    }

    public static void Main()
    {
        // All of the following display 'True'.

        // Define an array, get its type, and display HasElementType.
        int[] nums = {1, 1, 2, 3, 5, 8, 13};
        Type t = nums.GetType();
        Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType);

        // Test an array type without defining an array.
        t = typeof(Example[]);
        Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType);

        // When you use Reflection Emit to emit dynamic methods and
        // assemblies, you can create array types using MakeArrayType.
        // The following creates the type 'array of Example'.
        t = typeof(Example).MakeArrayType();
        Console.WriteLine("HasElementType is '{0}' for array types.", t.HasElementType);

        // When you reflect over methods, HasElementType is true for
        // ref, out, and pointer parameter types. The following
        // gets the Test method, defined above, and examines its
        // parameters.
        MethodInfo mi = typeof(Example).GetMethod("Test");
        ParameterInfo[] parms = mi.GetParameters();
        t = parms[0].ParameterType;
        Console.WriteLine("HasElementType is '{0}' for ref parameter types.", t.HasElementType);
        t = parms[1].ParameterType;
        Console.WriteLine("HasElementType is '{0}' for out parameter types.", t.HasElementType);
        t = parms[2].ParameterType;
        Console.WriteLine("HasElementType is '{0}' for pointer parameter types.", t.HasElementType);

        // When you use Reflection Emit to emit dynamic methods and
        // assemblies, you can create pointer and ByRef types to use
        // when you define method parameters.
        t = typeof(Example).MakePointerType();
        Console.WriteLine("HasElementType is '{0}' for pointer types.", t.HasElementType);
        t = typeof(Example).MakeByRefType();
        Console.WriteLine("HasElementType is '{0}' for ByRef types.", t.HasElementType);
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::InteropServices;

public ref class Example
{
public:
    // This method is for demonstration purposes. It includes a
    // tracking reference (C# ref, VB ByRef), an out parameter,
    // and a pointer.
    void Test(int% x, [OutAttribute()] int% y, int* z)
    {
        *z = x = y = 0;
    }
};

int main()
{
    // All of the following display 'True'.

    // Define a managed array, get its type, and display HasElementType.
    array<Example^>^ examples = {gcnew Example(), gcnew Example()};
    Type^ t = examples::typeid;
    Console::WriteLine(t);
    Console::WriteLine("HasElementType is '{0}' for managed array types.", t->HasElementType);

    // When you use Reflection Emit to emit dynamic methods and
    // assemblies, you can create array types using MakeArrayType.
    // The following creates the type 'array of Example'.
    t = Example::typeid->MakeArrayType();
    Console::WriteLine("HasElementType is '{0}' for managed array types.", t->HasElementType);

    // When you reflect over methods, HasElementType is true for
    // ref, out, and pointer parameter types. The following
    // gets the Test method, defined above, and examines its
    // parameters.
    MethodInfo^ mi = Example::typeid->GetMethod("Test");
    array<ParameterInfo^>^ parms = mi->GetParameters();
    t = parms[0]->ParameterType;
    Console::WriteLine("HasElementType is '{0}' for ref parameter types.", t->HasElementType);
    t = parms[1]->ParameterType;
    Console::WriteLine("HasElementType is '{0}' for out parameter types.", t->HasElementType);
    t = parms[2]->ParameterType;
    Console::WriteLine("HasElementType is '{0}' for pointer parameter types.", t->HasElementType);

    // When you use Reflection Emit to emit dynamic methods and
    // assemblies, you can create pointer and ByRef types to use
    // when you define method parameters.
    t = Example::typeid->MakePointerType();
    Console::WriteLine("HasElementType is '{0}' for pointer types.", t->HasElementType);
    t = Example::typeid->MakeByRefType();
    Console::WriteLine("HasElementType is '{0}' for ByRef types.", t->HasElementType);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
HasElementTypeImpl
IsArray
IsPointer
IsByRef
GetElementType
GetType


Type ..::.IsAbstract 属性

Type
.
.
::
.
IsAbstract 属性
Type 类

获取一个值，通过该值指示 Type 是否为抽象的并且必须被重写。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsAbstract As Boolean
    Get
public bool IsAbstract { get; }
public:
virtual property bool IsAbstract {
    bool get () sealed;
}
abstract IsAbstract : bool
override IsAbstract : bool

属性值

类型： System Boolean
如果 Type 是抽象的，则为 true；否则为 false。

实现

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

下面的示例在指定的对象为 abstract 时返回 true；否则，它将返回 false。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public MustInherit Class MyMustInheritClass
End Class 'MyMustInheritClass
Public Class [MyClass]
End Class '[MyClass]
Public Class Type_IsMustInherit
    Public Shared Sub Main()
        Try
            ' Check whether the return type of MyMustInheritClass is MustInherit or not.
            Console.WriteLine(ControlChars.NewLine + "Checking whether the type is MustInherit." + ControlChars.NewLine)

            If GetType([MyMustInheritClass]).IsAbstract = True Then
                Console.WriteLine("MyMustInheritClass is {0}", "a MustInherit class.")
            Else
                Console.WriteLine("MyMustInheritClass is {0}", "not a MustInherit class.")
            End If
            ' Check whether the return type of MyClass is MustInherit or not.
            If GetType([MyClass]).IsAbstract = True Then
                Console.WriteLine("MyClass is {0}", "a MustInherit class.")
            Else
                Console.WriteLine("MyClass is {0}", "not a MustInherit class.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception: {0} " + ControlChars.Cr, e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_IsMustInherit

using System;
using System.Reflection;
public abstract class MyAbstractClass
{
}
public class MyClass
{
}
public class Type_IsAbstract
{
    public static void Main()
    {
        try
        {
            // Check whether the return type of MyAbstractClass is abstract or not.
            Console.WriteLine("\nChecking whether the type is abstract.\n");
            Console.WriteLine("MyAbstractClass is {0}", (typeof(MyAbstractClass).IsAbstract) ? "an abstract class." : "not an abstract class.");
            // Check whether the return type of MyClass is abstract or not.
            Console.WriteLine("MyClass is {0}", (typeof(MyClass).IsAbstract) ? "an abstract class." : "not an abstract class.");
        }
        catch( Exception e )
        {
            Console.WriteLine( "Exception: {0} \n", e.Message );
        }
    }
}

using namespace System;
using namespace System::Reflection;

public  ref class AbstractClass abstract
{
};

public ref class NonAbstractClass
{
};

int main()
{
    // Check whether the return type of MyAbstractClass is abstract or not.
    Console::WriteLine("\nChecking whether the type is abstract.\n");
    if ((AbstractClass::typeid->IsAbstract))
    {
        Console::WriteLine("The AbstractClass is an abstract class.");
    }
    else
    {
        Console::WriteLine("The AbstractClass is not an abstract class.");
    }

    // Check whether the return type of MyClass is abstract or not.
    if ((NonAbstractClass::typeid->IsAbstract))
    {
        Console::WriteLine("The NonAbstractClass is an abstract class.");
    }
    else
    {
        Console::WriteLine("The NonAbstractClass is not an abstract class.");
    }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsAnsiClass 属性

Type
.
.
::
.
IsAnsiClass 属性
Type 类

获取一个指示是否为 Type 选择了字符串格式特性 AnsiClass 的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsAnsiClass As Boolean
    Get
public bool IsAnsiClass { get; }
public:
virtual property bool IsAnsiClass {
    bool get () sealed;
}
abstract IsAnsiClass : bool
override IsAnsiClass : bool

属性值

类型： System Boolean
如果为 Type 选择了字符串格式特性 AnsiClass，则为 true；否则为 false。

实现

StringFormatMask 选择字符串格式特性。字符串格式特性通过定义字符串的解释方式来增强交互操作。 StringFormatMask 选择字符串格式特性。字符串格式特性通过定义字符串的解释方式来增强交互操作。

如果当前 Type 表示某个泛型类型，则此属性 适用于在其基础上构造该类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某个泛型类型，则此属性 适用于在其基础上构造该类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型的类型形参，则此属性始终返回 false。

下面的示例获取字段信息，并检查 AnsiClass 特性。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class MyClass1
    Protected myField As String = "A sample protected field."
End Class 'MyClass1
Public Class MyType_IsAnsiClass
    Public Shared Sub Main()
        Try
            Dim myObject As New MyClass1()
            ' Get the type of MyClass1.
            Dim myType As Type = GetType(MyClass1)
            ' Get the field information and the attributes associated with MyClass1.
            Dim myFieldInfo As FieldInfo = myType.GetField("myField", BindingFlags.NonPublic Or BindingFlags.Instance)

            Console.WriteLine(ControlChars.NewLine + "Checking for AnsiClass attribute for a field." + ControlChars.NewLine)
            ' Get and display the name, field, and the AnsiClass attribute.
            Console.WriteLine("Name of Class: {0} " + ControlChars.NewLine + "Value of Field: {1} " + ControlChars.NewLine + "IsAnsiClass = {2}", myType.FullName, myFieldInfo.GetValue(myObject), myType.IsAnsiClass)
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyType_IsAnsiClass

using System;
using System.Reflection;
public class MyClass
{
    protected string myField = "A sample protected field." ;
}
public class MyType_IsAnsiClass
{
    public static void Main()
    {
        try
        {
            MyClass myObject = new MyClass();
            // Get the type of the 'MyClass'.
            Type myType = typeof(MyClass);
            // Get the field information and the attributes associated with MyClass.
            FieldInfo myFieldInfo = myType.GetField("myField", BindingFlags.NonPublic|BindingFlags.Instance);
            Console.WriteLine( "\nChecking for the AnsiClass attribute for a field.\n");
            // Get and display the name, field, and the AnsiClass attribute.
            Console.WriteLine("Name of Class: {0} \nValue of Field: {1} \nIsAnsiClass = {2}", myType.FullName, myFieldInfo.GetValue(myObject), myType.IsAnsiClass);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: {0}",e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class MyClass
{
protected:
   String^ myField;

public:
   MyClass()
   {
      myField =  "A sample protected field";
   }
};

int main()
{
   try
   {
      MyClass^ myObject = gcnew MyClass;

      // Get the type of the 'MyClass'.
      Type^ myType = MyClass::typeid;

      // Get the field information and the attributes associated with MyClass.
      FieldInfo^ myFieldInfo = myType->GetField( "myField", static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance) );
      Console::WriteLine( "\nChecking for the AnsiClass attribute for a field.\n" );

      // Get and display the name, field, and the AnsiClass attribute.
      Console::WriteLine( "Name of Class: {0} \nValue of Field: {1} \nIsAnsiClass = {2}", myType->FullName, myFieldInfo->GetValue( myObject ), myType->IsAnsiClass );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
IsUnicodeClass
IsAutoClass


Type ..::.IsArray 属性

Type
.
.
::
.
IsArray 属性
Type 类

获取一个值，通过该值指示 Type 是否为数组。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsArray As Boolean
    Get
public bool IsArray { get; }
public:
virtual property bool IsArray {
    bool get () sealed;
}
abstract IsArray : bool
override IsArray : bool

属性值

类型： System Boolean
如果 Type 是数组，则为 true；否则为 false。

实现

对于 Array 类，IsArray 属性返回 false。

要检查数组，请使用诸如 typeof(Array).IsAssignableFrom(type) 之类的代码。

如果当前 Type 表示泛型类型，或泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

此属性为只读。

下面的示例演示如何使用 IsArray 属性。

Imports System

Class TestIsArray
    Public Shared Sub Main()
        Dim array As Integer() =  {1, 2, 3, 4}
        Dim at As Type = GetType(Array)
        Dim t As Type = array.GetType()
        Console.WriteLine("The type is {0}. Is this type an array? {1}", at, at.IsArray)
        Console.WriteLine("The type is {0}. Is this type an array? {1}", t, t.IsArray)
    End Sub 'Main
End Class 'TestType

using System;
class TestIsArray
{
    public static void Main()
    {
    int [] array = {1,2,3,4};
    Type at = typeof(Array);
    Type t = array.GetType();
    Console.WriteLine("The type is {0}. Is this type an array? {1}", at, at.IsArray);
    Console.WriteLine("The type is {0}. Is this type an array? {1}", t, t.IsArray);
    }
}

using namespace System;
int main()
{
   array<Int32>^array = {1,2,3,4};
   Type^ at = Array::typeid;
   Type^ t = array->GetType();
   Console::WriteLine( "The type is {0}. Is this type an array? {1}", at, at->IsArray.ToString() );
   Console::WriteLine( "The type is {0}. Is this type an array? {1}", t, t->IsArray.ToString() );
}

此代码产生下列输出：

Type is System.Array.IsArray?False
Type is System.Int32[].IsArray?True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
IsArrayImpl


Type ..::.IsAutoClass 属性

Type
.
.
::
.
IsAutoClass 属性
Type 类

获取一个值，该值指示是否为 Type 选择字符串格式特性 AutoClass。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsAutoClass As Boolean
    Get
public bool IsAutoClass { get; }
public:
virtual property bool IsAutoClass {
    bool get () sealed;
}
abstract IsAutoClass : bool
override IsAutoClass : bool

属性值

类型： System Boolean
如果为 Type 选择了字符串格式特性 AutoClass，则为 true；否则为 false。

实现

StringFormatMask 选择字符串格式特性。字符串格式特性通过定义字符串的解释方式来增强交互操作。 StringFormatMask 选择字符串格式特性。字符串格式特性通过定义字符串的解释方式来增强交互操作。

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型的类型形参，则此属性始终返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
IsAnsiClass
IsUnicodeClass


Type ..::.IsAutoLayout 属性

Type
.
.
::
.
IsAutoLayout 属性
Type 类

获取一个指示是否为 Type 选择了类布局特性 AutoLayout 的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsAutoLayout As Boolean
    Get
public bool IsAutoLayout { get; }
public:
virtual property bool IsAutoLayout {
    bool get () sealed;
}
abstract IsAutoLayout : bool
override IsAutoLayout : bool

属性值

类型： System Boolean
如果为 Type 选定了类布局特性 AutoLayout，则为 true；否则为 false。

实现

LayoutMask 用于选择类布局特性。类布局特性（AutoLayout、SequentialLayout 和 ExplicitLayout）定义类实例的字段在内存中进行布局的方式。 LayoutMask 用于选择类布局特性。类布局特性（AutoLayout、SequentialLayout 和 ExplicitLayout）定义类实例的字段在内存中进行布局的方式。

使用 AutoLayout 特性让运行时引擎决定对类的对象进行布局的最佳方式。用 AutoLayout 特性标记的类指示加载程序将选择适当的方式对类进行布局；任何可能已被指定的布局信息均被忽略。 使用 AutoLayout 特性让运行时引擎决定对类的对象进行布局的最佳方式。用 AutoLayout 特性标记的类指示加载程序将选择适当的方式对类进行布局；任何可能已被指定的布局信息均被忽略。

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

下面的示例创建类型的实例，并显示 IsAutoLayout 属性。

Imports System
Imports System.Runtime.InteropServices
Imports Microsoft.VisualBasic

' The Demo class is has the AutoLayout attribute.
<StructLayoutAttribute(LayoutKind.Auto)> _
Public Class Demo
End Class

Public Class Example
    Public Shared Sub Main()
        ' Get the Type object for the Demo class.
        Dim myType As Type = GetType(Demo)
        ' Get and display the IsAutoLayout property of the
        ' Demo class.
        Console.WriteLine("The AutoLayout property for the Demo class is '{0}'.", _
            myType.IsAutoLayout.ToString())
    End Sub
End Class

using System;
using System.Runtime.InteropServices;

// The Demo class is attributed as AutoLayout.
[StructLayoutAttribute(LayoutKind.Auto)]
public class Demo
{
}

public class Example
{
    public static void Main()
    {
        // Create an instance of the Type class using the GetType method.
        Type  myType=typeof(Demo);
        // Get and display the IsAutoLayout property of the
        // Demoinstance.
        Console.WriteLine("\nThe AutoLayout property for the Demo class is {0}.",
            myType.IsAutoLayout);
    }
}

#using <System.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;
using namespace System::Runtime::InteropServices;

// The MyDemoAttribute class is selected as AutoLayout.

[StructLayoutAttribute(LayoutKind::Auto)]
public ref class MyDemoAttribute{};

void MyAutoLayoutMethod( String^ typeName )
{
   try
   {

      // Create an instance of the Type class using the GetType method.
      Type^ myType = Type::GetType( typeName );

      // Get and display the IsAutoLayout property of the
      // MyDemoAttribute instance.
      Console::WriteLine( "\nThe AutoLayout property for the MyDemoAttribute is {0}.", myType->IsAutoLayout );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "\nAn exception occurred: {0}.", e->Message );
   }

}

int main()
{
   MyAutoLayoutMethod( "MyDemoAttribute" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
IsLayoutSequential
IsExplicitLayout

其他资源

元数据和自描述组件


Type ..::.IsByRef 属性

Type
.
.
::
.
IsByRef 属性
Type 类

获取一个值，通过该值指示 Type 是否由引用传递。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsByRef As Boolean
    Get
public bool IsByRef { get; }
public:
virtual property bool IsByRef {
    bool get () sealed;
}
abstract IsByRef : bool
override IsByRef : bool

属性值

类型： System Boolean
如果 Type 按引用传递，则为 true；否则为 false。

实现

要获得实际的类型，可取消引用通过引用传递的类型，然后对该类型调用 GetElementType。

下面的示例说明如何使用 IsByRef 属性检查指定的类型是否是通过引用传递的。该示例定义了类 MyTypeDelegator，该类重写 HasElementTypeImpl 方法。主类将检查 HasElementType 属性并显示元素类型。 下面的示例说明如何使用 IsByRef 属性检查指定的类型是否是通过引用传递的。该示例定义了类 MyTypeDelegator，该类重写 HasElementTypeImpl 方法。主类将检查 HasElementType 属性并显示元素类型。 下面的示例说明如何使用 IsByRef 属性检查指定的类型是否是通过引用传递的。该示例定义了类 MyTypeDelegator，该类重写 HasElementTypeImpl 方法。主类将检查 HasElementType 属性并显示元素类型。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class MyTypeDelegator
    Inherits TypeDelegator
    Public myElementType As String = Nothing
    Private myType As Type = Nothing
    Public Sub New(ByVal myType As Type)
        MyBase.New(myType)
        Me.myType = myType
    End Sub 'New
    ' Override Type.HasElementTypeImpl().
    Protected Overrides Function HasElementTypeImpl() As Boolean
        ' Determine whether the type is an array.
        If myType.IsArray Then
            myElementType = "array"
            Return True
        End If
        ' Determine whether the type is a reference.
        If myType.IsByRef Then
            myElementType = "reference"
            Return True
        End If
        ' Determine whether the type is a pointer.
        If myType.IsPointer Then
            myElementType = "pointer"
            Return True
        End If
        ' The type is not a reference, array, or pointer type.
        Return False
    End Function 'HasElementTypeImpl
End Class 'MyTypeDelegator
Public Class Type_HasElementTypeImpl
    Public Shared Sub Main()
        Try
            Dim myInt As Integer = 0
            Dim myArray(4) As Integer
            Dim myType As New MyTypeDelegator(myArray.GetType())
            Console.WriteLine(ControlChars.NewLine + "Determine whether a variable refers to an array or pointer or reference type." + ControlChars.NewLine)
            ' Determine whether myType is an array, pointer, reference type.
            If myType.HasElementType Then
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType.ToString())
            Else
                Console.WriteLine("myArray is not an array, pointer, or reference type.")
            End If
            myType = New MyTypeDelegator(myInt.GetType())
            ' Determine whether myType is an array, pointer, reference type.
            If myType.HasElementType Then
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType.ToString())
            Else
                Console.WriteLine("myInt is not an array, pointer, or reference type.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_HasElementTypeImpl

using System;
using System.Reflection;
public class MyTypeDelegator : TypeDelegator
{
    public string myElementType = null;
    private Type myType = null ;
    public MyTypeDelegator(Type myType) : base(myType)
    {
        this.myType = myType;
    }
    // Override Type.HasElementTypeImpl().
    protected override bool HasElementTypeImpl()
    {
        // Determine whether the type is an array.
        if(myType.IsArray)
        {
            myElementType = "array";
            return true;
        }
        // Determine whether the type is a reference.
        if(myType.IsByRef)
        {
            myElementType = "reference";
            return true;
        }
        // Determine whether the type is a pointer.
        if(myType.IsPointer)
        {
            myElementType = "pointer";
            return true;
        }
        // Return false if the type is not a reference, array, or pointer type.
        return false;
    }
}
public class Type_HasElementTypeImpl
{
    public static void Main()
    {
        try
        {
            int myInt = 0 ;
            int[] myArray = new int[5];
            MyTypeDelegator myType = new MyTypeDelegator(myArray.GetType());
            // Determine whether myType is an array, pointer, reference type.
            Console.WriteLine("\nDetermine whether a variable is an array, pointer, or reference type.\n");
            if( myType.HasElementType)
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType);
            else
                Console.WriteLine("myArray is not an array, pointer, or reference type.");
            myType = new MyTypeDelegator(myInt.GetType());
            // Determine whether myType is an array, pointer, reference type.
            if( myType.HasElementType)
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType);
            else
                Console.WriteLine("myInt is not an array, pointer, or reference type.");
        }
        catch( Exception e )
        {
            Console.WriteLine("Exception: {0}", e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class MyTypeDelegator: public TypeDelegator
{
public:
   String^ myElementType;

private:
   Type^ myType;

public:
   MyTypeDelegator( Type^ myType )
      : TypeDelegator( myType )
   {
      this->myType = myType;
   }

protected:

   // Override Type::HasElementTypeImpl().
   virtual bool HasElementTypeImpl() override
   {

      // Determine whether the type is an array.
      if ( myType->IsArray )
      {
         myElementType = "array";
         return true;
      }

      // Determine whether the type is a reference.
      if ( myType->IsByRef )
      {
         myElementType = "reference";
         return true;
      }

      // Determine whether the type is a pointer.
      if ( myType->IsPointer )
      {
         myElementType = "pointer";
         return true;
      }

      // Return false if the type is not a reference, array, or pointer type.
      return false;
   }

};

int main()
{
   try
   {
      int myInt = 0;
      array<Int32>^myArray = gcnew array<Int32>(5);
      MyTypeDelegator^ myType = gcnew MyTypeDelegator( myArray->GetType() );

      // Determine whether myType is an array, pointer, reference type.
      Console::WriteLine( "\nDetermine whether a variable is an array, pointer, or reference type.\n" );
      if ( myType->HasElementType )
            Console::WriteLine( "The type of myArray is {0}.", myType->myElementType );
      else
            Console::WriteLine( "myArray is not an array, pointer, or reference type." );
      myType = gcnew MyTypeDelegator( myInt.GetType() );

      // Determine whether myType is an array, pointer, reference type.
      if ( myType->HasElementType )
            Console::WriteLine( "The type of myInt is {0}.", myType->myElementType );
      else
            Console::WriteLine( "myInt is not an array, pointer, or reference type." );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
IsByRefImpl


Type ..::.IsClass 属性

Type
.
.
::
.
IsClass 属性
Type 类

获取一个值，通过该值指示 Type 是否是一个类；即，不是值类型或接口。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsClass As Boolean
    Get
public bool IsClass { get; }
public:
virtual property bool IsClass {
    bool get () sealed;
}
abstract IsClass : bool
override IsClass : bool

属性值

类型： System Boolean
如果 Type 是类，则为 true；否则为 false。

实现

对于表示 Enum 和 ValueType 的 Type，此属性返回 true。

ClassSemanticsMask 将类型声明区分为类、接口或值类型。

如果当前 Type 表示构造泛型类型，此属性将在泛型类型定义为类定义（即没有定义接口或值类型）时返回 true。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

此属性为只读。

下面的示例创建类型的实例，并指示该类型是否是类。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class MyDemoClass
End Class 'MyDemoClass

Public Class MyTypeClass
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyDemoClass)
            ' Get and display the 'IsClass' property of the 'MyDemoClass' instance.
            Console.WriteLine(ControlChars.Cr + "Is the specified type a class? {0}.", myType.IsClass.ToString())
        Catch e As Exception
            Console.WriteLine(ControlChars.Cr + "An exception occurred: {0}.", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeClass

using System;
using System.Reflection;

public  class MyDemoClass
{
}

public class MyTypeClass
{
    public static void Main(string[] args)
    {
        try
        {
            Type  myType = typeof(MyDemoClass);
            // Get and display the 'IsClass' property of the 'MyDemoClass' instance.
            Console.WriteLine("\nIs the specified type a class? {0}.", myType.IsClass);
        }
        catch(Exception e)
        {
            Console.WriteLine("\nAn exception occurred: {0}." ,e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class MyDemoClass{};

int main()
{
   try
   {
      Type^ myType = Type::GetType( "MyDemoClass" );

      // Get and display the 'IsClass' property of the 'MyDemoClass' instance.
      Console::WriteLine( "\nIs the specified type a class? {0}.", myType->IsClass );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "\nAn exception occurred: {0}.", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
IsInterface
IsValueType


Type ..::.IsCOMObject 属性

Type
.
.
::
.
IsCOMObject 属性
Type 类

获取一个值，通过该值指示 Type 是否为 COM 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsCOMObject As Boolean
    Get
public bool IsCOMObject { get; }
public:
virtual property bool IsCOMObject {
    bool get () sealed;
}
abstract IsCOMObject : bool
override IsCOMObject : bool

属性值

类型： System Boolean
如果 Type 为 COM 对象，则为 true；否则为 false。

实现

此方法对 COM 接口返回 false，因为 COM 接口不是对象。COM 接口可由 Microsoft .NET Framework 对象实现。 此方法对 COM 接口返回 false，因为 COM 接口不是对象。COM 接口可由 Microsoft .NET Framework 对象实现。

也可以使用Tlbimp.exe（类型库导入程序） 工具加载 COM 类并获取该 COM 类的 Type 对象。

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
IsCOMObjectImpl


Type ..::.IsContextful 属性

Type
.
.
::
.
IsContextful 属性
Type 类

获取一个值，通过该值指示 Type 在上下文中是否可以被承载。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsContextful As Boolean
    Get
public bool IsContextful { get; }
public:
virtual property bool IsContextful {
    bool get () sealed;
}
abstract IsContextful : bool
override IsContextful : bool

属性值

类型： System Boolean
如果 Type 能够在某个上下文中承载，则为 true；否则为 false。

实现

上下文截获对类成员的调用，并实施应用到类的策略（例如同步）。有关远程上下文的更详细的信息，请参见 Context。 上下文截获对类成员的调用，并实施应用到类的策略（例如同步）。有关远程上下文的更详细的信息，请参见 Context。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

下面的示例演示 Type 类的 IsContextful、IsMarshalByRef 和 IsPrimitive 属性。它将检查给定类型可否在上下文中承载，该类型可否按引用来进行封送，以及该类型是否是基元数据类型。 下面的示例演示 Type 类的 IsContextful、IsMarshalByRef 和 IsPrimitive 属性。它将检查给定类型可否在上下文中承载，该类型可否按引用来进行封送，以及该类型是否是基元数据类型。

Imports System
Imports System.Runtime.Remoting.Contexts
Imports Microsoft.VisualBasic
Public Class MyContextBoundClass
    Inherits ContextBoundObject
    Public myString As String = "This class demonstrates the IsContextful, IsMarshalByRef, and IsPrimitive properties."
End Class 'MyContextBoundClass
Public Class MyTypeDemoClass
    Public Shared Sub Main()
        Try
            ' Determine whether the types can be hosted in a Context.
            Console.WriteLine("The Contextful property for the {0} type is {1}.", GetType(MyTypeDemoClass).Name, GetType(MyTypeDemoClass).IsContextful.ToString())
            Console.WriteLine("The Contextful property for the {0} type is {1}.", GetType(MyContextBoundClass).Name, GetType(MyContextBoundClass).IsContextful.ToString())
            ' Determine whether the types are marshalled by reference.
            Console.WriteLine("The MarshalByRef property of {0} is {1}.", GetType(MyTypeDemoClass).Name, GetType(MyTypeDemoClass).IsMarshalByRef.ToString())
            Console.WriteLine("The MarshalByRef property of {0} is {1}.", GetType(MyContextBoundClass).Name, GetType(MyContextBoundClass).IsMarshalByRef.ToString())
            ' Determine whether the types are primitive datatypes.
            Console.WriteLine("Is {0} a primitive data type? {1}.", GetType(Integer).Name, GetType(Integer).IsPrimitive.ToString())
            Console.WriteLine("Is {0} a primitive data type? {1}.", GetType(String).Name, GetType(String).IsPrimitive.ToString())
        Catch e As Exception
            Console.WriteLine("An exception occurred: " + e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeDemoClass

using System;
using System.Runtime.Remoting.Contexts;
public class MyContextBoundClass: ContextBoundObject
{
    public string myString = "This class demonstrates the IsContextful, IsMarshalByRef, and IsPrimitive properties.";
}
public class MyTypeDemoClass
{
    public static void Main()
    {
        try
        {
            // Determine whether the types can be hosted in a Context.
            Console.WriteLine ("The IsContextful property for the {0} type is {1}.", typeof(MyTypeDemoClass).Name, typeof(MyTypeDemoClass).IsContextful);
            Console.WriteLine ("The IsContextful property for the {0} type is {1}.", typeof(MyContextBoundClass).Name, typeof(MyContextBoundClass).IsContextful);

            // Determine whether the types are marshalled by reference.
            Console.WriteLine ("The MarshalByRef property of {0} is {1}.", typeof(MyTypeDemoClass).Name, typeof(MyTypeDemoClass).IsMarshalByRef);
            Console.WriteLine ("The MarshalByRef property of {0} is {1}.", typeof(MyContextBoundClass).Name, typeof(MyContextBoundClass).IsMarshalByRef);

            // Determine whether the types are primitive datatypes.
            Console.WriteLine ("Is {0} is a primitive data type? {1}.", typeof(int).Name, typeof(int).IsPrimitive);
            Console.WriteLine ("Is {0} a primitive data type? {1}.", typeof(string).Name, typeof(string).IsPrimitive);
        }
        catch (Exception e)
        {
            Console.WriteLine("An exception occurred: " + e.Message);
        }
    }
}

using namespace System;
using namespace System::Runtime::Remoting::Contexts;
public ref class MyContextBoundClass: public ContextBoundObject
{
public:
   String^ myString;
};

public ref class MyTypeDemoClass
{
public:
   void Demo()
   {
      try
      {
         // Determine whether the types can be hosted in a Context.
         Console::WriteLine( "The IsContextful property for the {0} type is {1}.", MyTypeDemoClass::typeid->Name, MyTypeDemoClass::typeid->IsContextful );
         Console::WriteLine( "The IsContextful property for the {0} type is {1}.", MyContextBoundClass::typeid->Name, MyContextBoundClass::typeid->IsContextful );

         // Determine whether the types are marshalled by reference.
         Console::WriteLine( "The MarshalByRef property of {0} is {1}.", MyTypeDemoClass::typeid->Name, MyTypeDemoClass::typeid->IsMarshalByRef );
         Console::WriteLine( "The MarshalByRef property of {0} is {1}.", MyContextBoundClass::typeid->Name, MyContextBoundClass::typeid->IsMarshalByRef );

         // Determine whether the types are primitive datatypes.
         Console::WriteLine( "Is {0} is a primitive data type? {1}.", int::typeid->Name, int::typeid->IsPrimitive );
         Console::WriteLine( "Is {0} a primitive data type? {1}.", String::typeid->Name, String::typeid->IsPrimitive );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( "An exception occurred: {0}", e->Message );
      }
   }
};

int main()
{
   MyTypeDemoClass^ mtdc = gcnew MyTypeDemoClass;
   mtdc->Demo();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
IsContextfulImpl


Type ..::.IsEnum 属性

Type
.
.
::
.
IsEnum 属性
Type 类

获取一个值，该值指示当前的 Type 是否表示枚举。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsEnum As Boolean
    Get
public virtual bool IsEnum { get; }
public:
virtual property bool IsEnum {
    bool get ();
}
abstract IsEnum : bool
override IsEnum : bool

属性值

类型： System Boolean
如果当前 Type 表示枚举，则为 true；否则为 false。

实现

此属性对枚举返回 true，但是对 Enum 类型本身则不然。

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

此属性为只读。

下面的示例演示如何使用 IsEnum 属性。

Imports System

Public Enum Color
    Red
    Blue
    Green
End Enum 'Color
Class TestIsEnum
   Public Shared Sub Main()
        Dim colorType As Type = GetType(Color)
        Dim enumType As Type = GetType([Enum])
        Console.WriteLine("Is Color an enum? {0}.", colorType.IsEnum)
        Console.WriteLine("Is Color a value type? {0}.", colorType.IsValueType)
        Console.WriteLine("Is Enum an enum type? {0}.", enumType.IsEnum)
        Console.WriteLine("Is Enum a value type? {0}.", enumType.IsValueType)
    End Sub 'Main
End Class 'TestType

using System;
public enum Color
{
Red, Blue, Green
}
class TestIsEnum
{
    public static void Main()
    {
       Type colorType = typeof(Color);
       Type enumType = typeof(Enum);
       Console.WriteLine("Is Color an enum? {0}.", colorType.IsEnum);
       Console.WriteLine("Is Color a value type? {0}.", colorType.IsValueType);
       Console.WriteLine("Is Enum an enum Type? {0}.", enumType.IsEnum);
       Console.WriteLine("Is Enum a value type? {0}.", enumType.IsValueType);
   }
}

using namespace System;
enum class Color
{
   Red, Blue, Green
};

int main()
{
   Type^ colorType = Color::typeid;
   Type^ enumType = Enum::typeid;
   Console::WriteLine( "Is Color an enum? {0}.", colorType->IsEnum );
   Console::WriteLine( "Is Color a value type? {0}.", colorType->IsValueType );
   Console::WriteLine( "Is Enum an enum Type? {0}.", enumType->IsEnum );
   Console::WriteLine( "Is Enum a value type? {0}.", enumType->IsValueType );
}

此代码产生下列输出：

Is Color an enum?True.Is Color a value type?True.Is Enum an enum type?False.Is Enum a value type?False.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsExplicitLayout 属性

Type
.
.
::
.
IsExplicitLayout 属性
Type 类

获取一个值，通过该值指示是否为 Type 选定了类布局特性 ExplicitLayout。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsExplicitLayout As Boolean
    Get
public bool IsExplicitLayout { get; }
public:
virtual property bool IsExplicitLayout {
    bool get () sealed;
}
abstract IsExplicitLayout : bool
override IsExplicitLayout : bool

属性值

类型： System Boolean
如果为 Type 选定了类布局特性 ExplicitLayout，则为 true；否则为 false。

实现

LayoutMask 用于选择类布局特性。类布局特性（AutoLayout、SequentialLayout 和 ExplicitLayout）定义类实例的字段在内存中进行布局的方式。 LayoutMask 用于选择类布局特性。类布局特性（AutoLayout、SequentialLayout 和 ExplicitLayout）定义类实例的字段在内存中进行布局的方式。

用 ExplicitLayout 特性标记的类导致加载程序忽略字段序列和使用所提供的显式布局规则，采用的形式为字段偏移量、全部类大小和对齐，或者所有这些形式。

使用 ExplicitLayout 特性指定偏移量（每个字段以此偏移量开始），或者指定全部大小，还可以指定类的对象封装大小。封装大小是各字段之间的空白内存空间，必须为 1、2、4、8 或 16 字节。 使用 ExplicitLayout 特性指定偏移量（每个字段以此偏移量开始），或者指定全部大小，还可以指定类的对象封装大小。封装大小是各字段之间的空白内存空间，必须为 1、2、4、8 或 16 字节。

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

下面的示例创建类型的实例，并显示它的 IsExplicitLayout 属性的值。它使用 MySystemTime 类，StructLayoutAttribute 的代码示例中也有该类。 下面的示例创建类型的实例，并显示它的 IsExplicitLayout 属性的值。它使用 MySystemTime 类，StructLayoutAttribute 的代码示例中也有该类。

Imports System
Imports System.Reflection
Imports System.ComponentModel
Imports System.Runtime.InteropServices
Imports Microsoft.VisualBasic

'Class to test for the ExplicitLayout property.
   <StructLayout(LayoutKind.Explicit, Size := 16, CharSet := CharSet.Ansi)>  _
   Public Class MySystemTime
      <FieldOffset(0)> Public wYear As Short
      <FieldOffset(2)> Public wMonth As Short
      <FieldOffset(4)> Public wDayOfWeek As Short
      <FieldOffset(6)> Public wDay As Short
      <FieldOffset(8)> Public wHour As Short
      <FieldOffset(10)> Public wMinute As Short
      <FieldOffset(12)> Public wSecond As Short
      <FieldOffset(14)> Public wMilliseconds As Short
   End Class

Public Class Program
    Public Shared Sub Main()
        'Create an instance of type using the GetType method.
        Dim t As Type = GetType(MySystemTime)
        ' Get and display the IsExplicitLayout property.
        Console.WriteLine(vbCrLf & "IsExplicitLayout for MySystemTime is {0}.", _
            t.IsExplicitLayout)
    End Sub
End Class

using System;
using System.Reflection;
using System.ComponentModel;
using System.Runtime.InteropServices;

// Class to test for the ExplicitLayout property.
[StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)]
public class MySystemTime
{
   [FieldOffset(0)]public ushort wYear;
   [FieldOffset(2)]public ushort wMonth;
   [FieldOffset(4)]public ushort wDayOfWeek;
   [FieldOffset(6)]public ushort wDay;
   [FieldOffset(8)]public ushort wHour;
   [FieldOffset(10)]public ushort wMinute;
   [FieldOffset(12)]public ushort wSecond;
   [FieldOffset(14)]public ushort wMilliseconds;
}

public class Program
{
    public static void Main(string[] args)
    {
        // Create an instance of the type using the GetType method.
        Type  t = typeof(MySystemTime);
        // Get and display the IsExplicitLayout property.
        Console.WriteLine("\nIsExplicitLayout for MySystemTime is {0}.",
            t.IsExplicitLayout);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
StructLayoutAttribute
IsAutoLayout
IsLayoutSequential

其他资源

元数据和自描述组件


Type ..::.IsGenericParameter 属性

Type
.
.
::
.
IsGenericParameter 属性
Type 类

获取一个值，该值指示当前 Type 是否表示泛型类型或方法的定义中的类型参数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsGenericParameter As Boolean
    Get
public virtual bool IsGenericParameter { get; }
public:
virtual property bool IsGenericParameter {
    bool get ();
}
abstract IsGenericParameter : bool
override IsGenericParameter : bool

属性值

类型： System Boolean
如果 Type 对象表示泛型类型定义或泛型方法定义的类型参数，则为 true；否则为 false。

表示泛型类型参数的 Type 对象可通过调用表示泛型类型定义的 Type 对象的 GetGenericArguments 方法或表示泛型方法定义的 MethodInfo 对象的 GetGenericArguments 方法来获得。

  • 对于泛型类型或方法定义，IsGenericParameter 属性对产生的数组的每个元素返回 true。

  • 对于封闭构造的类型或方法，IsGenericParameter 属性对 GetGenericArguments 方法返回的数组的每个元素返回 false。

  • 对于开放构造类型或方法，数组的某些元素可能是特定的类型，而其他可能是类型参数。IsGenericParameter 针对类型返回 false，针对类型参数返回 true。ContainsGenericParameters 属性的代码示例演示了混合有类型和类型参数的泛型类。 对于开放构造类型或方法，数组的某些元素可能是特定的类型，而其他可能是类型参数。IsGenericParameter 针对类型返回 false，针对类型参数返回 true。ContainsGenericParameters 属性的代码示例演示了混合有类型和类型参数的泛型类。 对于开放构造类型或方法，数组的某些元素可能是特定的类型，而其他可能是类型参数。IsGenericParameter 针对类型返回 false，针对类型参数返回 true。ContainsGenericParameters 属性的代码示例演示了混合有类型和类型参数的泛型类。

有关泛型反射中使用的术语的固定条件列表，请参见 IsGenericType 属性备注。

下面的示例使用 IsGenericParameter 属性测试泛型类型中的泛型类型参数。

If t.IsGenericType Then
    ' If this is a generic type, display the type arguments.
    '
    Dim typeArguments As Type() = t.GetGenericArguments()

    Console.WriteLine(vbTab & "List type arguments (" _
        & typeArguments.Length & "):")

    For Each tParam As Type In typeArguments
        ' If this is a type parameter, display its position.
        '
        If tParam.IsGenericParameter Then
            Console.WriteLine(vbTab & vbTab & tParam.ToString() _
                & vbTab & "(unassigned - parameter position " _
                & tParam.GenericParameterPosition & ")")
        Else
            Console.WriteLine(vbTab & vbTab & tParam.ToString())
        End If
    Next tParam
End If

if (t.IsGenericType)
{
    // If this is a generic type, display the type arguments.
    //
    Type[] typeArguments = t.GetGenericArguments();

    Console.WriteLine("\tList type arguments ({0}):",
        typeArguments.Length);

    foreach (Type tParam in typeArguments)
    {
        // If this is a type parameter, display its
        // position.
        //
        if (tParam.IsGenericParameter)
        {
            Console.WriteLine("\t\t{0}\t(unassigned - parameter position {1})",
                tParam,
                tParam.GenericParameterPosition);
        }
        else
        {
            Console.WriteLine("\t\t{0}", tParam);
        }
    }
}

if ( t->IsGenericType )
{

   // If this is a generic type, display the type arguments.
   //
   array<Type^>^typeArguments = t->GetGenericArguments();
   Console::WriteLine( L"\tList type arguments ({0}):",
      typeArguments->Length );
   System::Collections::IEnumerator^ myEnum =
      typeArguments->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Type^ tParam = safe_cast<Type^>(myEnum->Current);

      // If this is a type parameter, display its
      // position.
      //
      if ( tParam->IsGenericParameter )
      {
         Console::WriteLine(
            L"\t\t{0}\t(unassigned - parameter position {1})",
            tParam, tParam->GenericParameterPosition );
      }
      else
      {
         Console::WriteLine( L"\t\t{0}", tParam );
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
GenericParameterPosition
GetGenericArguments
GetGenericParameterConstraints
GenericParameterAttributes

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.IsGenericType 属性

Type
.
.
::
.
IsGenericType 属性
Type 类

获取一个值，该值指示当前类型是否是泛型类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsGenericType As Boolean
    Get
public virtual bool IsGenericType { get; }
public:
virtual property bool IsGenericType {
    bool get ();
}
abstract IsGenericType : bool
override IsGenericType : bool

属性值

类型： System Boolean
如果当前类型是泛型类型，则为 true；否则为 false。

使用 IsGenericType 属性来确定 Type 对象是否表示泛型类型。使用 ContainsGenericParameters 属性来确定某个 Type 对象是表示开放构造的类型还是封闭构造的类型。 使用 IsGenericType 属性来确定 Type 对象是否表示泛型类型。使用 ContainsGenericParameters 属性来确定某个 Type 对象是表示开放构造的类型还是封闭构造的类型。

说明 说明

如果直接类型不是泛型，则 IsGenericType 属性将返回 false。例如，元素为 A<int> 类型（在 Visual Basic 中为 A(Of Integer)）的数组本身不是泛型类型。 如果直接类型不是泛型，则 IsGenericType 属性将返回 false。例如，元素为 A<int> 类型（在 Visual Basic 中为 A(Of Integer)）的数组本身不是泛型类型。

下表总结了泛型反射中使用的常见术语的固定条件。

术语 | 固定条件
Generic Type Definition — 泛型类型定义 | IsGenericTypeDefinition 属性为 true。 定义泛型类型。构造类型的创建方式是：调用表示泛型类型定义的 Type 对象的 MakeGenericType 方法，并指定类型参数数组。 定义泛型类型。构造类型的创建方式是：调用表示泛型类型定义的 Type 对象的 MakeGenericType 方法，并指定类型参数数组。 只能在泛型类型定义上调用 MakeGenericType。 任何泛型类型定义都是泛型类型（IsGenericType 属性为 true），但反过来则不成立。
Generic Type — 泛型类型 | IsGenericType 属性为 true。 可以是泛型类型定义、开封构造类型或封闭构造类型。 注意，元素类型为泛型的数组类型本身并不是泛型类型。表示指向泛型类型的指针的 Type 对象同样也不是泛型类型。 注意，元素类型为泛型的数组类型本身并不是泛型类型。表示指向泛型类型的指针的 Type 对象同样也不是泛型类型。
开放构造类型 | ContainsGenericParameters 属性为 true。 示例有：具有未分配类型参数的泛型类型、嵌套在泛型类型定义或开放构造类型中的类型，或具有类型变量的泛型类型（ContainsGenericParameters 属性为 true）。 不能创建开放构造类型的实例。 注意，并非所有开放构造类型都是泛型。例如，元素类型为泛型类型定义的数组并不是泛型，指向开放构造类型的指针也不是泛型。 注意，并非所有开放构造类型都是泛型。例如，元素类型为泛型类型定义的数组并不是泛型，指向开放构造类型的指针也不是泛型。
封闭构造类型 | ContainsGenericParameters 属性为 false。 当递归进行检查时，该类型没有未赋值的泛型参数。
Generic Type Parameter — 泛型类型参数 | IsGenericParameter 属性为 true。 ContainsGenericParameters 属性为 true。 在泛型类型定义中，指将在以后赋值的类型的占位符。
Generic Type Argument — 泛型类型变量 | 可以是任何类型，包括泛型类型形参。 类型实参是在创建构造泛型类型时作为传递给 MakeGenericType 方法的 Type 对象的数组来指定的。如果要创建所产生的类型的实例，所有类型实参的 ContainsGenericParameters 属性都必须为 false。 类型实参是在创建构造泛型类型时作为传递给 MakeGenericType 方法的 Type 对象的数组来指定的。如果要创建所产生的类型的实例，所有类型实参的 ContainsGenericParameters 属性都必须为 false。

下面的代码示例和表格阐释了其中的一些术语和常量。Derived 类特别重要，因为其基类型是类型参数列表中同时具有类型和类型参数的构造类型。 下面的代码示例和表格阐释了其中的一些术语和常量。Derived 类特别重要，因为其基类型是类型参数列表中同时具有类型和类型参数的构造类型。

Public Class Base(Of T, U)
End Class

Public Class Derived(Of V)
    Inherits Base(Of String, V)

    Public F As G(Of Derived(Of V))

    Public Class Nested
    End Class
End Class

Public Class G(Of T)
End Class

public class Base<T, U> {}

public class Derived<V> : Base<string, V>
{
    public G<Derived <V>> F;

    public class Nested {}
}

public class G<T> {}

generic<typename T, typename U> public ref class Base {};

generic<typename T> public ref class G {};

generic<typename V> public ref class Derived : Base<String^, V>
{
public:
    G<Derived<V>^>^ F;

    ref class Nested {};
};

下表显示了使用和依赖类 Base、Derived 和 G 的示例。如果 C++ 和 C# 代码相同，则只显示一个项。 下表显示了使用和依赖类 Base、Derived 和 G 的示例。如果 C++ 和 C# 代码相同，则只显示一个项。

示例

固定条件

Derived(Of V)

Derived<V>

对于此类型：

IsGenericType 为 true。

IsGenericTypeDefinition 为 true。

ContainsGenericParameters 为 true。

Base(Of String, V)

Base<String,V>

Base<String^,V>

对于此类型：

IsGenericType 为 true。

IsGenericTypeDefinition 为 false。

ContainsGenericParameters 为 true。

Dim d() As Derived(Of Integer)

Derived<int>[] d;

array<Derived<int>^>^ d;

对于变量 d 的类型：

IsGenericType 为 false，因为 d 是一个数组。

IsGenericTypeDefinition 为 false。

ContainsGenericParameters 为 false。

T、U 和 V（不管它们出现在何处）

IsGenericParameter 为 true。

IsGenericType 为 false，因为没有办法将类型形参约束为泛型类型。

IsGenericTypeDefinition 为 false。

ContainsGenericParameters 为 true，因为 T、U 和 V 本身是泛型类型形参。这并不意味着稍后分配到这些形参的类型实参的任何相关信息。 ContainsGenericParameters 为 true，因为 T、U 和 V 本身是泛型类型形参。这并不意味着稍后分配到这些形参的类型实参的任何相关信息。

字段 F 的类型

IsGenericType 为 true。

IsGenericTypeDefinition 为 false，因为已经向 G 的类型形参赋予了类型。注意，这等效于调用了 MakeGenericType 方法。 IsGenericTypeDefinition 为 false，因为已经向 G 的类型形参赋予了类型。注意，这等效于调用了 MakeGenericType 方法。

ContainsGenericParameters 为 true，因为字段 F 的类型具有一个属于开放构造类型的类型实参。该构造类型是开放的，因为其类型实参（也就是 Base）是一个泛型类型定义。这说明了 IsGenericType 属性的递归性质。 ContainsGenericParameters 为 true，因为字段 F 的类型具有一个属于开放构造类型的类型实参。该构造类型是开放的，因为其类型实参（也就是 Base）是一个泛型类型定义。这说明了 IsGenericType 属性的递归性质。 ContainsGenericParameters 为 true，因为字段 F 的类型具有一个属于开放构造类型的类型实参。该构造类型是开放的，因为其类型实参（也就是 Base）是一个泛型类型定义。这说明了 IsGenericType 属性的递归性质。

嵌套类 Nested

IsGenericType 为 true，虽然 Nested 类没有它自己的泛型类型参数，因为它嵌套在一个泛型类型中。

IsGenericTypeDefinition 为 true。也就是说，您可以调用 MakeGenericType 方法，并提供封闭类型 Derived 的类型参数。 IsGenericTypeDefinition 为 true。也就是说，您可以调用 MakeGenericType 方法，并提供封闭类型 Derived 的类型参数。

ContainsGenericParameters 为 true，因为封闭类型 Derived 具有泛型类型参数。这一点说明了 ContainsGenericParameters 属性的递归本质。 ContainsGenericParameters 为 true，因为封闭类型 Derived 具有泛型类型参数。这一点说明了 ContainsGenericParameters 属性的递归本质。

下面的代码示例显示了“备注”一节所述的类型的 IsGenericType、IsGenericTypeDefinition、IsGenericParameter 和 ContainsGenericParameters 属性的值。有关属性值的解释，请参见“备注”中的附表。 下面的代码示例显示了“备注”一节所述的类型的 IsGenericType、IsGenericTypeDefinition、IsGenericParameter 和 ContainsGenericParameters 属性的值。有关属性值的解释，请参见“备注”中的附表。

Imports System
Imports System.Reflection

'
Public Class Base(Of T, U)
End Class

Public Class Derived(Of V)
    Inherits Base(Of String, V)

    Public F As G(Of Derived(Of V))

    Public Class Nested
    End Class
End Class

Public Class G(Of T)
End Class

Module Example

    Sub Main

        ' Get the generic type definition for Derived, and the base
        ' type for Derived.
        '
        Dim tDerived As Type = GetType(Derived(Of ))
        Dim tDerivedBase As Type = tDerived.BaseType

        ' Declare an array of Derived(Of Integer), and get its type.
        '
        Dim d(0) As Derived(Of Integer)
        Dim tDerivedArray As Type = d.GetType()

        ' Get a generic type parameter, the type of a field, and a
        ' type that is nested in Derived. Notice that in order to
        ' get the nested type it is necessary to either (1) specify
        ' the generic type definition Derived(Of ), as shown here,
        ' or (2) specify a type parameter for Derived.
        '
        Dim tT As Type = GetType(Base(Of ,)).GetGenericArguments()(0)
        Dim tF As Type = tDerived.GetField("F").FieldType
        Dim tNested As Type = GetType(Derived(Of ).Nested)

        DisplayGenericType(tDerived, "Derived(Of V)")
        DisplayGenericType(tDerivedBase, "Base type of Derived(Of V)")
        DisplayGenericType(tDerivedArray, "Array of Derived(Of Integer)")
        DisplayGenericType(tT, "Type parameter T from Base(Of T)")
        DisplayGenericType(tF, "Field type, G(Of Derived(Of V))")
        DisplayGenericType(tNested, "Nested type in Derived(Of V)")

    End Sub

    Sub DisplayGenericType(ByVal t As Type, ByVal caption As String)

        Console.WriteLine(vbLf & caption)
        Console.WriteLine("    Type: {0}", t)

        Console.WriteLine(vbTab & "            IsGenericType: {0}", _
            t.IsGenericType)
        Console.WriteLine(vbTab & "  IsGenericTypeDefinition: {0}", _
            t.IsGenericTypeDefinition)
        Console.WriteLine(vbTab & "ContainsGenericParameters: {0}", _
            t.ContainsGenericParameters)
        Console.WriteLine(vbTab & "       IsGenericParameter: {0}", _
            t.IsGenericParameter)

    End Sub

End Module

' This code example produces the following output:
'
'Derived(Of V)
'    Type: Derived`1[V]
'                    IsGenericType: True
'          IsGenericTypeDefinition: True
'        ContainsGenericParameters: True
'               IsGenericParameter: False
'
'Base type of Derived(Of V)
'    Type: Base`2[System.String,V]
'                    IsGenericType: True
'          IsGenericTypeDefinition: False
'        ContainsGenericParameters: True
'               IsGenericParameter: False
'
'Array of Derived(Of Integer)
'    Type: Derived`1[System.Int32][]
'                    IsGenericType: False
'          IsGenericTypeDefinition: False
'        ContainsGenericParameters: False
'               IsGenericParameter: False
'
'Type parameter T from Base(Of T)
'    Type: T
'                    IsGenericType: False
'          IsGenericTypeDefinition: False
'        ContainsGenericParameters: True
'               IsGenericParameter: True
'
'Field type, G(Of Derived(Of V))
'    Type: G`1[Derived`1[V]]
'                    IsGenericType: True
'          IsGenericTypeDefinition: False
'        ContainsGenericParameters: True
'               IsGenericParameter: False
'
'Nested type in Derived(Of V)
'    Type: Derived`1+Nested[V]
'                    IsGenericType: True
'          IsGenericTypeDefinition: True
'        ContainsGenericParameters: True
'               IsGenericParameter: False

using System;
using System.Reflection;

public class Base<T, U> {}

public class Derived<V> : Base<string, V>
{
    public G<Derived <V>> F;

    public class Nested {}
}

public class G<T> {}

class Example
{
    public static void Main()
    {
        // Get the generic type definition for Derived, and the base
        // type for Derived.
        //
        Type tDerived = typeof(Derived<>);
        Type tDerivedBase = tDerived.BaseType;

        // Declare an array of Derived<int>, and get its type.
        //
        Derived<int>[] d = new Derived<int>[0];
        Type tDerivedArray = d.GetType();

        // Get a generic type parameter, the type of a field, and a
        // type that is nested in Derived. Notice that in order to
        // get the nested type it is necessary to either (1) specify
        // the generic type definition Derived<>, as shown here,
        // or (2) specify a type parameter for Derived.
        //
        Type tT = typeof(Base<,>).GetGenericArguments()[0];
        Type tF = tDerived.GetField("F").FieldType;
        Type tNested = typeof(Derived<>.Nested);

        DisplayGenericType(tDerived, "Derived<V>");
        DisplayGenericType(tDerivedBase, "Base type of Derived<V>");
        DisplayGenericType(tDerivedArray, "Array of Derived<int>");
        DisplayGenericType(tT, "Type parameter T from Base<T>");
        DisplayGenericType(tF, "Field type, G<Derived<V>>");
        DisplayGenericType(tNested, "Nested type in Derived<V>");
    }

    public static void DisplayGenericType(Type t, string caption)
    {
        Console.WriteLine("\n{0}", caption);
        Console.WriteLine("    Type: {0}", t);

        Console.WriteLine("\t            IsGenericType: {0}",
            t.IsGenericType);
        Console.WriteLine("\t  IsGenericTypeDefinition: {0}",
            t.IsGenericTypeDefinition);
        Console.WriteLine("\tContainsGenericParameters: {0}",
            t.ContainsGenericParameters);
        Console.WriteLine("\t       IsGenericParameter: {0}",
            t.IsGenericParameter);
    }
}

/* This code example produces the following output:

Derived<V>
    Type: Derived`1[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False

Base type of Derived<V>
    Type: Base`2[System.String,V]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Array of Derived<int>
    Type: Derived`1[System.Int32][]
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: False
               IsGenericParameter: False

Type parameter T from Base<T>
    Type: T
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: True

Field type, G<Derived<V>>
    Type: G`1[Derived`1[V]]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Nested type in Derived<V>
    Type: Derived`1+Nested[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False
 */

using namespace System;
using namespace System::Reflection;

generic<typename T, typename U> public ref class Base {};

generic<typename T> public ref class G {};

generic<typename V> public ref class Derived : Base<String^, V>
{
public:
    G<Derived<V>^>^ F;

    ref class Nested {};
};

void DisplayGenericType(Type^ t, String^ caption)
{
    Console::WriteLine("\n{0}", caption);
    Console::WriteLine("    Type: {0}", t);

    Console::WriteLine("\t            IsGenericType: {0}",
        t->IsGenericType);
    Console::WriteLine("\t  IsGenericTypeDefinition: {0}",
        t->IsGenericTypeDefinition);
    Console::WriteLine("\tContainsGenericParameters: {0}",
        t->ContainsGenericParameters);
    Console::WriteLine("\t       IsGenericParameter: {0}",
        t->IsGenericParameter);
}

void main()
{
    // Get the generic type definition for Derived, and the base
    // type for Derived.
    //
    Type^ tDerived = Derived::typeid;
    Type^ tDerivedBase = tDerived->BaseType;

    // Declare an array of Derived<int>, and get its type.
    //
    array<Derived<int>^>^ d = gcnew array<Derived<int>^>(0);
    Type^ tDerivedArray = d->GetType();

    // Get a generic type parameter, the type of a field, and a
    // type that is nested in Derived. Notice that in order to
    // get the nested type it is necessary to either (1) specify
    // the generic type definition Derived::typeid, as shown here,
    // or (2) specify a type parameter for Derived.
    //
    Type^ tT = Base::typeid->GetGenericArguments()[0];
    Type^ tF = tDerived->GetField("F")->FieldType;
    Type^ tNested = Derived::Nested::typeid;

    DisplayGenericType(tDerived, "generic<V> Derived");
    DisplayGenericType(tDerivedBase, "Base type of generic<V> Derived");
    DisplayGenericType(tDerivedArray, "Array of Derived<int>");
    DisplayGenericType(tT, "Type parameter T from generic<T> Base");
    DisplayGenericType(tF, "Field type, G<Derived<V>^>^");
    DisplayGenericType(tNested, "Nested type in generic<V> Derived");
}

/* This code example produces the following output:

generic<V> Derived
    Type: Derived`1[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False

Base type of generic<V> Derived
    Type: Base`2[System.String,V]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Array of Derived<int>
    Type: Derived`1[System.Int32][]
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: False
               IsGenericParameter: False

Type parameter T from generic<T> Base
    Type: T
                    IsGenericType: False
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: True

Field type, G<Derived<V>^>^
    Type: G`1[Derived`1[V]]
                    IsGenericType: True
          IsGenericTypeDefinition: False
        ContainsGenericParameters: True
               IsGenericParameter: False

Nested type in generic<V> Derived
    Type: Derived`1+Nested[V]
                    IsGenericType: True
          IsGenericTypeDefinition: True
        ContainsGenericParameters: True
               IsGenericParameter: False
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
ContainsGenericParameters
IsGenericTypeDefinition

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.IsGenericTypeDefinition 属性

Type
.
.
::
.
IsGenericTypeDefinition 属性
Type 类

获取一个值，该值指示当前 Type 是否表示可以用来构造其他泛型类型的泛型类型定义。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsGenericTypeDefinition As Boolean
    Get
public virtual bool IsGenericTypeDefinition { get; }
public:
virtual property bool IsGenericTypeDefinition {
    bool get ();
}
abstract IsGenericTypeDefinition : bool
override IsGenericTypeDefinition : bool

属性值

类型： System Boolean
如果此 Type 对象表示泛型类型定义，则为 true；否则为 false。

泛型类型定义是可用于构造其他类型的模板。例如，使用泛型类型定义 G<T>（以 C# 语法表示；在 Visual Basic 中为 G(Of T)；在 C++ 中为 generic <typename T> ref class G），可通过使用包含 Int32 类型的泛型实参列表调用 MakeGenericType 方法来构造和实例化类型 G<int>（在 Visual Basic 中为 G(Of Integer)）。给定一个表示此构造类型的 Type 对象，GetGenericTypeDefinition 方法将再次取回泛型类型定义。 泛型类型定义是可用于构造其他类型的模板。例如，使用泛型类型定义 G<T>（以 C# 语法表示；在 Visual Basic 中为 G(Of T)；在 C++ 中为 generic <typename T> ref class G），可通过使用包含 Int32 类型的泛型实参列表调用 MakeGenericType 方法来构造和实例化类型 G<int>（在 Visual Basic 中为 G(Of Integer)）。给定一个表示此构造类型的 Type 对象，GetGenericTypeDefinition 方法将再次取回泛型类型定义。 泛型类型定义是可用于构造其他类型的模板。例如，使用泛型类型定义 G<T>（以 C# 语法表示；在 Visual Basic 中为 G(Of T)；在 C++ 中为 generic <typename T> ref class G），可通过使用包含 Int32 类型的泛型实参列表调用 MakeGenericType 方法来构造和实例化类型 G<int>（在 Visual Basic 中为 G(Of Integer)）。给定一个表示此构造类型的 Type 对象，GetGenericTypeDefinition 方法将再次取回泛型类型定义。

使用 IsGenericTypeDefinition 属性来确定是否能够从当前类型创建新的类型。如果 IsGenericTypeDefinition 属性返回 true，那么您可以调用 MakeGenericType 方法来创建新的泛型类型。 使用 IsGenericTypeDefinition 属性来确定是否能够从当前类型创建新的类型。如果 IsGenericTypeDefinition 属性返回 true，那么您可以调用 MakeGenericType 方法来创建新的泛型类型。

有关泛型反射中使用的术语的固定条件列表，请参见 IsGenericType 属性备注。

下面的示例显示关于某个类型的信息，包括它是否为泛型类型定义。其中显示了一个构造类型、其泛型类型定义以及一个普通类型的信息。 下面的示例显示关于某个类型的信息，包括它是否为泛型类型定义。其中显示了一个构造类型、其泛型类型定义以及一个普通类型的信息。

Imports System
Imports System.Reflection
Imports System.Collections.Generic
Imports Microsoft.VisualBasic

Public Class Test
    Private Shared Sub DisplayGenericTypeInfo(ByVal t As Type)
        Console.WriteLine(vbCrLf & t.ToString())

        Console.WriteLine(vbTab & "Is this a generic type definition? " _
            & t.IsGenericTypeDefinition)

        Console.WriteLine(vbTab & "Is it a generic type? " _
            & t.IsGenericType)

        If t.IsGenericType Then
            ' If this is a generic type, display the type arguments.
            '
            Dim typeArguments As Type() = t.GetGenericArguments()

            Console.WriteLine(vbTab & "List type arguments (" _
                & typeArguments.Length & "):")

            For Each tParam As Type In typeArguments
                ' If this is a type parameter, display its position.
                '
                If tParam.IsGenericParameter Then
                    Console.WriteLine(vbTab & vbTab & tParam.ToString() _
                        & vbTab & "(unassigned - parameter position " _
                        & tParam.GenericParameterPosition & ")")
                Else
                    Console.WriteLine(vbTab & vbTab & tParam.ToString())
                End If
            Next tParam
        End If

    End Sub

    Public Shared Sub Main()
        Console.WriteLine(vbCrLf & "--- Display information about a constructed type, its")
        Console.WriteLine("    generic type definition, and an ordinary type.")

        ' Create a Dictionary of Test objects, using strings for the
        ' keys.
        Dim d As New Dictionary(Of String, Test)()

        DisplayGenericTypeInfo(d.GetType())
        DisplayGenericTypeInfo(d.GetType().GetGenericTypeDefinition())

        ' Display information for an ordinary type.
        DisplayGenericTypeInfo(GetType(String))

    End Sub 'Main
End Class 'Test

' This example produces the following output:
'
'--- Display information about a constructed type, its
'    generic type definition, and an ordinary type.
'
'System.Collections.Generic.Dictionary[System.String, Test]
'        Is this a generic type definition? False
'        Is it a generic type? True
'        List type arguments (2):
'                System.String
'                Test
'
'System.Collections.Generic.Dictionary[TKey,TValue]
'        Is this a generic type definition? True
'        Is it a generic type? True
'        List type arguments (2):
'                TKey    (unassigned - parameter position 0)
'                TValue  (unassigned - parameter position 1)
'
'System.String
'        Is this a generic type definition? False
'        Is it a generic type? False

using System;
using System.Reflection;
using System.Collections.Generic;

public class Test
{
    private static void DisplayGenericTypeInfo(Type t)
    {
        Console.WriteLine("\r\n{0}", t);

        Console.WriteLine("\tIs this a generic type definition? {0}",
            t.IsGenericTypeDefinition);

        Console.WriteLine("\tIs it a generic type? {0}",
            t.IsGenericType);

        if (t.IsGenericType)
        {
            // If this is a generic type, display the type arguments.
            //
            Type[] typeArguments = t.GetGenericArguments();

            Console.WriteLine("\tList type arguments ({0}):",
                typeArguments.Length);

            foreach (Type tParam in typeArguments)
            {
                // If this is a type parameter, display its
                // position.
                //
                if (tParam.IsGenericParameter)
                {
                    Console.WriteLine("\t\t{0}\t(unassigned - parameter position {1})",
                        tParam,
                        tParam.GenericParameterPosition);
                }
                else
                {
                    Console.WriteLine("\t\t{0}", tParam);
                }
            }
        }
    }

    public static void Main()
    {
        Console.WriteLine("\r\n--- Display information about a constructed type, its");
        Console.WriteLine("    generic type definition, and an ordinary type.");

        // Create a Dictionary of Test objects, using strings for the
        // keys.
        Dictionary<string, Test> d = new Dictionary<string, Test>();

        // Display information for the constructed type and its generic
        // type definition.
        DisplayGenericTypeInfo(d.GetType());
        DisplayGenericTypeInfo(d.GetType().GetGenericTypeDefinition());

        // Display information for an ordinary type.
        DisplayGenericTypeInfo(typeof(string));
    }
}

/* This example produces the following output:

--- Display information about a constructed type, its
    generic type definition, and an ordinary type.

System.Collections.Generic.Dictionary[System.String,Test]
        Is this a generic type definition? False
        Is it a generic type? True
        List type arguments (2):
                System.String
                Test

System.Collections.Generic.Dictionary[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey    (unassigned - parameter position 0)
                TValue  (unassigned - parameter position 1)

System.String
        Is this a generic type definition? False
        Is it a generic type? False
 */

using namespace System;
using namespace System::Reflection;
using namespace System::Collections::Generic;

public ref class Test
{
private:
   static void DisplayGenericTypeInfo( Type^ t )
   {
      Console::WriteLine( L"\r\n{0}", t );
      Console::WriteLine( L"\tIs this a generic type definition? {0}",
         t->IsGenericTypeDefinition );
      Console::WriteLine( L"\tIs it a generic type? {0}",
         t->IsGenericType );

      if ( t->IsGenericType )
      {

         // If this is a generic type, display the type arguments.
         //
         array<Type^>^typeArguments = t->GetGenericArguments();
         Console::WriteLine( L"\tList type arguments ({0}):",
            typeArguments->Length );
         System::Collections::IEnumerator^ myEnum =
            typeArguments->GetEnumerator();
         while ( myEnum->MoveNext() )
         {
            Type^ tParam = safe_cast<Type^>(myEnum->Current);

            // If this is a type parameter, display its
            // position.
            //
            if ( tParam->IsGenericParameter )
            {
               Console::WriteLine(
                  L"\t\t{0}\t(unassigned - parameter position {1})",
                  tParam, tParam->GenericParameterPosition );
            }
            else
            {
               Console::WriteLine( L"\t\t{0}", tParam );
            }
         }
      }
   }

public:
   static void Main()
   {
      Console::Write( L"\r\n--- Display information about a " );
      Console::WriteLine( L"constructed type, its" );
      Console::WriteLine( L"    generic type definition, and an ordinary type." );

      // Create a Dictionary of Test objects, using strings for the
      // keys.
      Dictionary< String^,Test^ >^ d = gcnew Dictionary< String^,Test^ >;

      // Display information for the constructed type and its generic
      // type definition.
      DisplayGenericTypeInfo( d->GetType() );
      DisplayGenericTypeInfo( d->GetType()->GetGenericTypeDefinition() );

      // Display information for an ordinary type.
      DisplayGenericTypeInfo( String::typeid );
   }

};

int main()
{
   Test::Main();
}

/* This example produces the following output:

--- Display information about a constructed type, its
    generic type definition, and an ordinary type.

System.Collections.Generic.Dictionary[System.String,Test]
        Is this a generic type definition? False
        Is it a generic type? True
        List type arguments (2):
                System.String
                Test

System.Collections.Generic.Dictionary[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey    (unassigned - parameter position 0)
                TValue  (unassigned - parameter position 1)

System.String
        Is this a generic type definition? False
        Is it a generic type? False
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
ContainsGenericParameters
GetGenericTypeDefinition

其他资源

反射类型和泛型类型
如何：使用反射检查和实例化泛型类型


Type ..::.IsImport 属性

Type
.
.
::
.
IsImport 属性
Type 类

获取一个值，该值指示 Type 是否应用了 ComImportAttribute 特性，如果应用了该特性，则表示它是从 COM 类型库导入的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsImport As Boolean
    Get
public bool IsImport { get; }
public:
virtual property bool IsImport {
    bool get () sealed;
}
abstract IsImport : bool
override IsImport : bool

属性值

类型： System Boolean
如果 Type 具有 ComImportAttribute，则为 true；否则为 false。

实现

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsInterface 属性

Type
.
.
::
.
IsInterface 属性
Type 类

获取一个值，通过该值指示 Type 是否为接口（即不是类或值类型）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsInterface As Boolean
    Get
public bool IsInterface { get; }
public:
virtual property bool IsInterface {
    bool get () sealed;
}
abstract IsInterface : bool
override IsInterface : bool

属性值

类型： System Boolean
如果 Type 是接口，则为 true；否则为 false。

实现

ClassSemanticsMask 将类型声明区分为类、接口或值类型。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

此属性为只读。

下面的示例创建一个接口，检查接口类型，并指示类是否具有 IsInterface 属性集。

Imports System
Imports Microsoft.VisualBasic
' Declare an interface.
Interface myIFace
End Interface 'myIFace
Class MyIsInterface
    Public Shared Sub Main()
        Try
            ' Get the IsInterface attribute for myIFace.
            Dim myBool1 As Boolean = GetType(myIFace).IsInterface
            ' Display the IsInterface attribute for myIFace.
            Console.WriteLine("Is the specified type an interface? {0}.", myBool1.ToString)
            ' Get the IsInterface attribute for MyIsInterface.
            Dim myBool2 As Boolean = GetType(MyIsInterface).IsInterface
            ' Display the IsInterface attribute for MyIsInterface.
            Console.WriteLine("Is the specified type an interface? {0}.", myBool2.ToString)
        Catch e As Exception
            Console.WriteLine(ControlChars.Cr + "An exception occurred: {0}", e.Message.ToString)
        End Try
    End Sub 'Main
End Class 'MyIsInterface

using System;
// Declare an interface.
interface myIFace
{
}
class MyIsInterface
{
    public static void Main(string []args)
    {
        try
        {
            // Get the IsInterface attribute for myIFace.
            bool myBool1 = typeof(myIFace).IsInterface;
            //Display the IsInterface attribute for myIFace.
            Console.WriteLine("Is the specified type an interface? {0}.", myBool1);
            // Get the attribute IsInterface for MyIsInterface.
            bool myBool2 = typeof(MyIsInterface).IsInterface;
            //Display the IsInterface attribute for MyIsInterface.
            Console.WriteLine("Is the specified type an interface? {0}.", myBool2);
        }
        catch(Exception e)
        {
            Console.WriteLine("\nAn exception occurred: {0}.", e.Message);
        }
    }
}

using namespace System;

// Declare an interface.
interface class myIFace{};
public ref class MyIsInterface{};

void main()
{
   try
   {
      // Get the IsInterface attribute for myIFace.
      bool myBool1 = myIFace::typeid->IsInterface;

      //Display the IsInterface attribute for myIFace.
      Console::WriteLine( "Is the specified type an interface? {0}.", myBool1 );

      // Get the attribute IsInterface for MyIsInterface.
      bool myBool2 = MyIsInterface::typeid->IsInterface;

      //Display the IsInterface attribute for MyIsInterface.
      Console::WriteLine( "Is the specified type an interface? {0}.", myBool2 );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "\nAn exception occurred: {0}.", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
IsClass
IsValueType


Type ..::.IsLayoutSequential 属性

Type
.
.
::
.
IsLayoutSequential 属性
Type 类

获取一个值，通过该值指示是否为 Type 选定了类布局特性 SequentialLayout。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsLayoutSequential As Boolean
    Get
public bool IsLayoutSequential { get; }
public:
virtual property bool IsLayoutSequential {
    bool get () sealed;
}
abstract IsLayoutSequential : bool
override IsLayoutSequential : bool

属性值

类型： System Boolean
如果为 Type 选定了类布局特性 SequentialLayout，则为 true；否则为 false。

实现

LayoutMask 用于选择类布局特性。类布局特性（AutoLayout、SequentialLayout 和 ExplicitLayout）定义类实例的字段在内存中进行布局的方式。 LayoutMask 用于选择类布局特性。类布局特性（AutoLayout、SequentialLayout 和 ExplicitLayout）定义类实例的字段在内存中进行布局的方式。

有关更多信息，请参见 Common Language Infrastructure (CLI) 规范文档的第 9.1.2 节“Partition II: Metadata Definition and Semantics”（第二部分：元数据定义和语义）。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。 有关更多信息，请参见 Common Language Infrastructure (CLI) 规范文档的第 9.1.2 节“Partition II: Metadata Definition and Semantics”（第二部分：元数据定义和语义）。该文档可联机获得；请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards（ECMA C# 和公共语言基础结构标准）和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)（标准 ECMA-335 - 公共语言基础结构 (CLI)）。

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int> （在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int> （在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

下面的示例创建一个类的实例（已为该类在 StructLayoutAttribute 类中设置了 LayoutKind 枚举的 Sequential 成员），检查属性 IsLayoutSequential，然后显示结果。

Imports System
Imports System.Reflection
Imports System.ComponentModel
Imports System.Runtime.InteropServices
Imports Microsoft.VisualBasic
Class MyTypeSequential1
End Class 'MyTypeSequential1
<StructLayoutAttribute(LayoutKind.Sequential)> Class MyTypeSequential2
    Public Shared Sub Main()
        Try
            ' Create an instance of MyTypeSequential1.
            Dim myObj1 As New MyTypeSequential1()
            Dim myTypeObj1 As Type = myObj1.GetType()
            ' Check for and display the SequentialLayout attribute.
            Console.WriteLine(ControlChars.Cr + "The object myObj1 has IsLayoutSequential: {0}.", myObj1.GetType().IsLayoutSequential.ToString())
            ' Create an instance of MyTypeSequential2.
            Dim myObj2 As New MyTypeSequential2()
            Dim myTypeObj2 As Type = myObj2.GetType()
            ' Check for and display the SequentialLayout attribute.
            Console.WriteLine(ControlChars.Cr + "The object myObj2 has IsLayoutSequential: {0}.", myObj2.GetType().IsLayoutSequential.ToString())
        Catch e As Exception
            Console.WriteLine(ControlChars.Cr + "An exception occurred: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeSeq2

using System;
using System.Reflection;
using System.ComponentModel;
using System.Runtime.InteropServices;
class MyTypeSequential1
{
}
[StructLayoutAttribute(LayoutKind.Sequential)]
class MyTypeSequential2
{
    public static void Main(string []args)
    {
        try
        {
            // Create an instance of myTypeSeq1.
            MyTypeSequential1 myObj1 = new MyTypeSequential1();
            Type myTypeObj1 = myObj1.GetType();
            // Check for and display the SequentialLayout attribute.
            Console.WriteLine("\nThe object myObj1 has IsLayoutSequential: {0}.", myObj1.GetType().IsLayoutSequential);
            // Create an instance of 'myTypeSeq2' class.
            MyTypeSequential2 myObj2 = new MyTypeSequential2();
            Type myTypeObj2 = myObj2.GetType();
            // Check for and display the SequentialLayout attribute.
            Console.WriteLine("\nThe object myObj2 has IsLayoutSequential: {0}.", myObj2.GetType().IsLayoutSequential);
        }
        catch(Exception e)
        {
            Console.WriteLine("\nAn exception occurred: {0}", e.Message);
        }
    }
}

#using <System.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;
using namespace System::Runtime::InteropServices;
ref class MyTypeSequential1{};

[StructLayoutAttribute(LayoutKind::Sequential)]
ref class MyTypeSequential2{};

int main()
{
   try
   {

      // Create an instance of myTypeSeq1.
      MyTypeSequential1^ myObj1 = gcnew MyTypeSequential1;

      // Check for and display the SequentialLayout attribute.
      Console::WriteLine( "\nThe object myObj1 has IsLayoutSequential: {0}.", myObj1->GetType()->IsLayoutSequential );

      // Create an instance of 'myTypeSeq2' class.
      MyTypeSequential2^ myObj2 = gcnew MyTypeSequential2;

      // Check for and display the SequentialLayout attribute.
      Console::WriteLine( "\nThe object myObj2 has IsLayoutSequential: {0}.", myObj2->GetType()->IsLayoutSequential );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "\nAn exception occurred: {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
IsAutoLayout
IsExplicitLayout

其他资源

元数据和自描述组件


Type ..::.IsMarshalByRef 属性

Type
.
.
::
.
IsMarshalByRef 属性
Type 类

获取一个值，该值指示 Type 是否按引用进行封送。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsMarshalByRef As Boolean
    Get
public bool IsMarshalByRef { get; }
public:
virtual property bool IsMarshalByRef {
    bool get () sealed;
}
abstract IsMarshalByRef : bool
override IsMarshalByRef : bool

属性值

类型： System Boolean
如果 Type 是由引用封送的，则为 true；否则为 false。

实现

下面的示例演示 Type 类的 IsContextful、IsMarshalByRef 和 IsPrimitive 属性。它将检查给定类型可否在上下文中承载，该类型可否按引用来进行封送，以及该类型是否是基元数据类型。 下面的示例演示 Type 类的 IsContextful、IsMarshalByRef 和 IsPrimitive 属性。它将检查给定类型可否在上下文中承载，该类型可否按引用来进行封送，以及该类型是否是基元数据类型。

Imports System
Imports System.Runtime.Remoting.Contexts
Imports Microsoft.VisualBasic
Public Class MyContextBoundClass
    Inherits ContextBoundObject
    Public myString As String = "This class demonstrates the IsContextful, IsMarshalByRef, and IsPrimitive properties."
End Class 'MyContextBoundClass
Public Class MyTypeDemoClass
    Public Shared Sub Main()
        Try
            ' Determine whether the types can be hosted in a Context.
            Console.WriteLine("The Contextful property for the {0} type is {1}.", GetType(MyTypeDemoClass).Name, GetType(MyTypeDemoClass).IsContextful.ToString())
            Console.WriteLine("The Contextful property for the {0} type is {1}.", GetType(MyContextBoundClass).Name, GetType(MyContextBoundClass).IsContextful.ToString())
            ' Determine whether the types are marshalled by reference.
            Console.WriteLine("The MarshalByRef property of {0} is {1}.", GetType(MyTypeDemoClass).Name, GetType(MyTypeDemoClass).IsMarshalByRef.ToString())
            Console.WriteLine("The MarshalByRef property of {0} is {1}.", GetType(MyContextBoundClass).Name, GetType(MyContextBoundClass).IsMarshalByRef.ToString())
            ' Determine whether the types are primitive datatypes.
            Console.WriteLine("Is {0} a primitive data type? {1}.", GetType(Integer).Name, GetType(Integer).IsPrimitive.ToString())
            Console.WriteLine("Is {0} a primitive data type? {1}.", GetType(String).Name, GetType(String).IsPrimitive.ToString())
        Catch e As Exception
            Console.WriteLine("An exception occurred: " + e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeDemoClass

using System;
using System.Runtime.Remoting.Contexts;
public class MyContextBoundClass: ContextBoundObject
{
    public string myString = "This class demonstrates the IsContextful, IsMarshalByRef, and IsPrimitive properties.";
}
public class MyTypeDemoClass
{
    public static void Main()
    {
        try
        {
            // Determine whether the types can be hosted in a Context.
            Console.WriteLine ("The IsContextful property for the {0} type is {1}.", typeof(MyTypeDemoClass).Name, typeof(MyTypeDemoClass).IsContextful);
            Console.WriteLine ("The IsContextful property for the {0} type is {1}.", typeof(MyContextBoundClass).Name, typeof(MyContextBoundClass).IsContextful);

            // Determine whether the types are marshalled by reference.
            Console.WriteLine ("The MarshalByRef property of {0} is {1}.", typeof(MyTypeDemoClass).Name, typeof(MyTypeDemoClass).IsMarshalByRef);
            Console.WriteLine ("The MarshalByRef property of {0} is {1}.", typeof(MyContextBoundClass).Name, typeof(MyContextBoundClass).IsMarshalByRef);

            // Determine whether the types are primitive datatypes.
            Console.WriteLine ("Is {0} is a primitive data type? {1}.", typeof(int).Name, typeof(int).IsPrimitive);
            Console.WriteLine ("Is {0} a primitive data type? {1}.", typeof(string).Name, typeof(string).IsPrimitive);
        }
        catch (Exception e)
        {
            Console.WriteLine("An exception occurred: " + e.Message);
        }
    }
}

using namespace System;
using namespace System::Runtime::Remoting::Contexts;
public ref class MyContextBoundClass: public ContextBoundObject
{
public:
   String^ myString;
};

public ref class MyTypeDemoClass
{
public:
   void Demo()
   {
      try
      {
         // Determine whether the types can be hosted in a Context.
         Console::WriteLine( "The IsContextful property for the {0} type is {1}.", MyTypeDemoClass::typeid->Name, MyTypeDemoClass::typeid->IsContextful );
         Console::WriteLine( "The IsContextful property for the {0} type is {1}.", MyContextBoundClass::typeid->Name, MyContextBoundClass::typeid->IsContextful );

         // Determine whether the types are marshalled by reference.
         Console::WriteLine( "The MarshalByRef property of {0} is {1}.", MyTypeDemoClass::typeid->Name, MyTypeDemoClass::typeid->IsMarshalByRef );
         Console::WriteLine( "The MarshalByRef property of {0} is {1}.", MyContextBoundClass::typeid->Name, MyContextBoundClass::typeid->IsMarshalByRef );

         // Determine whether the types are primitive datatypes.
         Console::WriteLine( "Is {0} is a primitive data type? {1}.", int::typeid->Name, int::typeid->IsPrimitive );
         Console::WriteLine( "Is {0} a primitive data type? {1}.", String::typeid->Name, String::typeid->IsPrimitive );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( "An exception occurred: {0}", e->Message );
      }
   }
};

int main()
{
   MyTypeDemoClass^ mtdc = gcnew MyTypeDemoClass;
   mtdc->Demo();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
IsMarshalByRefImpl


Type ..::.IsNested 属性

Type
.
.
::
.
IsNested 属性
Type 类

获取一个指示当前 Type 对象是否表示其定义嵌套在另一个类型的定义之内的类型的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsNested As Boolean
    Get
public bool IsNested { get; }
public:
property bool IsNested {
    bool get ();
}
member IsNested : bool

属性值

类型： System Boolean
如果 Type 嵌套在另一个类型内，则为 true；否则为 false。

IsNested 属性对所有嵌套类型都返回 true，而不管这些类型的可见性如何。要同时测试嵌套和可见性，可使用相关的属性 IsNestedAssembly、IsNestedFamily、IsNestedFamANDAssem、IsNestedFamORAssem、IsNestedPrivate 或 IsNestedPublic。 IsNested 属性对所有嵌套类型都返回 true，而不管这些类型的可见性如何。要同时测试嵌套和可见性，可使用相关的属性 IsNestedAssembly、IsNestedFamily、IsNestedFamANDAssem、IsNestedFamORAssem、IsNestedPrivate 或 IsNestedPublic。

说明 说明

VisibilityMask 枚举成员为类型选择可见性特性。

下面的代码示例同时显示了受保护嵌套类和公共嵌套类的 IsNested 属性的值。

Imports System

Public Class Example
    Protected Class NestedProtected
    End Class

    Public Class NestedPublic
    End Class

    Public Shared Sub Main()
        With GetType(NestedProtected)
            Console.WriteLine("Is " & .FullName & " nested? " & .IsNested)
        End With
        With GetType(NestedPublic)
            Console.WriteLine("Is " & .FullName & " nested? " & .IsNested)
        End With
    End Sub
End Class

' This example produces the following output:
'
'Is Example+NestedProtected nested? True
'Is Example+NestedPublic nested? True

using System;

public class Example
{
    protected class NestedProtected
    {
    }

    public class NestedPublic
    {
    }

    public static void Main()
    {
        Type t = typeof(NestedProtected);
        Console.WriteLine("Is {0} nested? {1}", t.FullName, t.IsNested);
        t = typeof(NestedPublic);
        Console.WriteLine("Is {0} nested? {1}", t.FullName, t.IsNested);
    }
}

/* This example produces the following output:

Is Example+NestedProtected nested? True
Is Example+NestedPublic nested? True
 */

using namespace System;

public ref class Example
{
protected:
   ref class NestedProtected{};

public:
   ref class NestedPublic{};

   static void Main()
   {
      Type^ t = NestedProtected::typeid;
      Console::WriteLine( L"Is {0} nested? {1}",
         t->FullName, t->IsNested );
      t = NestedPublic::typeid;
      Console::WriteLine( L"Is {0} nested? {1}",
         t->FullName, t->IsNested );
   }

};

int main()
{
   Example::Main();
}

/* This example produces the following output:

Is Example+NestedProtected nested? True
Is Example+NestedPublic nested? True
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
IsNestedAssembly
IsNestedFamily
IsNestedFamANDAssem
IsNestedFamORAssem
IsNestedPrivate
IsNestedPublic


Type ..::.IsNestedAssembly 属性

Type
.
.
::
.
IsNestedAssembly 属性
Type 类

获取一个值，通过该值指示 Type 是否是嵌套的并且只能在它自己的程序集内可见。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsNestedAssembly As Boolean
    Get
public bool IsNestedAssembly { get; }
public:
virtual property bool IsNestedAssembly {
    bool get () sealed;
}
abstract IsNestedAssembly : bool
override IsNestedAssembly : bool

属性值

类型： System Boolean
如果 Type 是嵌套的并且仅在它自己的程序集中可见，则为 true；否则为 false。

实现

如果当前 Type 表示泛型类型的类型形参，则此属性始终返回 false。

TypeAttributes..::.VisibilityMask 选择可见性特性。

下面的示例声明一个在本身的程序集中具有可见性的嵌套类，并显示其 IsNestedAssembly 属性值。

Imports System
Imports Microsoft.VisualBasic
' Nest a class.
Class MyClassA
    Friend Class MyClassB
    End Class 'MyClassB
End Class 'MyClassA
Class MyTestClass
    Public Shared Sub Main()
        ' Get the type of the nested class.
        Dim myTypeB As Type = GetType(MyClassA.MyClassB)
        ' Get the IsNestedAssembly property  of the nested class.
        Console.WriteLine(ControlChars.Cr + "The IsNestedAssembly property value of MyClassB is {0}.", myTypeB.IsNestedAssembly.ToString())
    End Sub 'Main
End Class 'MyTestClass

using System;
// Nest a class.
class MyClassA
{
    internal class MyClassB
    {
    }
}
class MyTestClass
{
    public static void Main(string[] args)
    {
        // Get the type of the nested class.
        Type myTypeB = typeof(MyClassA.MyClassB);
        // Get the IsNestedAssembly property  of the nested class.
        Console.WriteLine("\nThe IsNestedAssembly property value of MyClassB is {0}.", myTypeB.IsNestedAssembly.ToString());
    }
}

using namespace System;

// Nest a class.
ref class MyClassA
{
internal:
   ref class MyClassB{};
};

int main()
{
   // Get the type of the nested class.
   Type^ myTypeB = MyClassA::MyClassB::typeid;

   // Get the IsNestedAssembly property  of the nested class.
   Console::WriteLine( "\nThe IsNestedAssembly property value of MyClassB is {0}.", myTypeB->IsNestedAssembly );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsNestedFamANDAssem 属性

Type
.
.
::
.
IsNestedFamANDAssem 属性
Type 类

获取一个值，通过该值指示 Type 是否是嵌套的并且只对同时属于自己家族和自己程序集的类可见。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsNestedFamANDAssem As Boolean
    Get
public bool IsNestedFamANDAssem { get; }
public:
virtual property bool IsNestedFamANDAssem {
    bool get () sealed;
}
abstract IsNestedFamANDAssem : bool
override IsNestedFamANDAssem : bool

属性值

类型： System Boolean
如果 Type 是嵌套的并且只对同时属于它自己的家族和它自己的程序集的类可见，则为 true；否则为 false。

实现

如果当前 Type 表示泛型类型的类型形参，则此属性始终返回 false。

TypeAttributes..::.VisibilityMask 选择可见性特性。

Type 对象的家族被定义为具有完全相同的 Type 及其子类型的所有对象。

下面的示例说明 IsNestedFamANDAssem 属性的用法。

Imports System
Imports Microsoft.VisualBasic
' Enclose a class.
Class MyClassA
    ' Protected friend nested class.
    Protected Friend Class MyClassB
    End Class 'MyClassB
End Class 'MyClassA
Class MyTestClass
    Public Shared Sub Main()
        ' Get the type of the nested class.
        Dim myTypeB As Type = GetType(MyClassA.MyClassB)
        ' Get the IsNestedFamANDAssem property of the nested class.
        Console.WriteLine(ControlChars.Cr + "The IsNestedFamANDAssem property value of the nested class is {0}.", myTypeB.IsNestedFamANDAssem.ToString())
    End Sub 'Main
End Class 'MyTestClass

using System;
// Enclose a class.
class MyClassA
{
    protected internal class MyClassB
    {
    }
}
class MyTestClass
{
    public static void Main(string[] args)
    {
        // Get the type of the nested class.
        Type myTypeB = typeof(MyClassA.MyClassB);
        // Get the IsNestedFamANDAssem property of the nested class.
        Console.WriteLine("\nThe IsNestedFamANDAssem property value of the nested class is {0}.", myTypeB.IsNestedFamANDAssem.ToString());
    }
}

using namespace System;

// Enclose a class.
ref class MyClassA
{
public protected:
   ref class MyClassB{};
};

int main()
{
   // Get the type of the nested class.
   Type^ myTypeB = MyClassA::MyClassB::typeid;

   // Get the IsNestedFamANDAssem property of the nested class.
   Console::WriteLine( "\nThe IsNestedFamANDAssem property value of the nested class is {0}.", myTypeB->IsNestedFamANDAssem );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsNestedFamily 属性

Type
.
.
::
.
IsNestedFamily 属性
Type 类

获取一个值，通过该值指示 Type 是否是嵌套的并且只在它自己的家族内可见。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsNestedFamily As Boolean
    Get
public bool IsNestedFamily { get; }
public:
virtual property bool IsNestedFamily {
    bool get () sealed;
}
abstract IsNestedFamily : bool
override IsNestedFamily : bool

属性值

类型： System Boolean
如果 Type 是嵌套的并且仅在它自己的家族中可见，则为 true；否则为 false。

实现

如果当前 Type 表示泛型类型的类型形参，则此属性始终返回 false。

TypeAttributes..::.VisibilityMask 选择可见性特性。

Type 对象的家族被定义为具有完全相同的 Type 及其子类型的所有对象。

下面的代码示例演示如何使用 IsNestedFamily 属性确定一个类型是否既是嵌套类型又是 protected 类型。

' Enclose a class.
Class MyClassA

  ' Protected nested class.
   Protected Class MyClassB
   End Class 'MyClassB
End Class 'MyClassA

Class MyTestClass
   Inherits MyClassA

   Public Shared Sub Main()
      ' Get the Type of the nested class.
      Dim myTypeB As Type = GetType(MyClassA.MyClassB)
      ' Get the 'IsNestedFamily' property the of the nested class
      ' 'Type'.
      Console.WriteLine((ControlChars.Cr + "The nested class has the property 'IsNestedFamily' value: " + myTypeB.IsNestedFamily.ToString()))
   End Sub 'Main
End Class 'MyTestClass

// Enclose a class.
class MyClassA
{
   // Protected nested class.
   protected class MyClassB
   {
   }
}
class MyTestClass : MyClassA
{
   public static void Main(string[] args)
   {
      // Get the Type of the nested class.
      Type myTypeB = typeof(MyClassA.MyClassB);
      // Get the 'IsNestedFamily' property the of the nested class
      // 'Type'.
      Console.WriteLine("\nThe nested class has the property 'IsNestedFamily' value: "+
                        myTypeB.IsNestedFamily.ToString());
   }
}

// Enclose a class.
ref class MyClassA
{
protected:

   // Protected nested class.
   ref class MyClassB{};
};

ref class MyTestClass: public MyClassA
{
public:
   static void Test()
   {
      // Get the Type of the nested class.
      Type^ myTypeB = MyClassA::MyClassB::typeid;

      // Get the 'IsNestedFamily' property the of the nested class
      // 'Type'.
      Console::WriteLine( "\nThe nested class has the property 'IsNestedFamily' value: {0}", myTypeB->IsNestedFamily );
   }
};

int main()
{
   MyTestClass::Test();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsNestedFamORAssem 属性

Type
.
.
::
.
IsNestedFamORAssem 属性
Type 类

获取一个值，通过该值指示 Type 是否是嵌套的并且只对属于它自己的家族或它自己的程序集的类可见。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsNestedFamORAssem As Boolean
    Get
public bool IsNestedFamORAssem { get; }
public:
virtual property bool IsNestedFamORAssem {
    bool get () sealed;
}
abstract IsNestedFamORAssem : bool
override IsNestedFamORAssem : bool

属性值

类型： System Boolean
如果 Type 是嵌套的并且只对属于它自己的家族或属于它自己的程序集的类可见，则为 true；否则为 false。

实现

如果当前 Type 表示泛型类型的类型形参，则此属性始终返回 false。

TypeAttributes..::.VisibilityMask 选择可见性特性。

Type 对象的家族被定义为具有完全相同的 Type 及其子类型的所有对象。

下面的示例声明一个在本身的系列或程序集中具有可见性的嵌套类，并显示该嵌套类的 IsNestedFamORAssem 属性值。

Imports System
Imports Microsoft.VisualBasic
' Enclose a class.
Class MyClassA
    ' Protected friend nested class.
    Protected Friend Class MyClassB
    End Class 'MyClassB
End Class 'MyClassA
Class MyTestClass
    Public Shared Sub Main()
        ' Get the type of the nested class.
        Dim myTypeB As Type = GetType(MyClassA.MyClassB)
        ' Get the IsNestedFamORAssem property of the nested class.
        Console.WriteLine(ControlChars.Cr + "The IsNestedFamORAssem property value of the nested class is {0}.", myTypeB.IsNestedFamORAssem.ToString())
    End Sub 'Main
End Class 'MyTestClass

using System;
// Enclose a class.
class MyClassA
{
    protected internal class MyClassB
    {
    }
}
class MyTestClass
{
    public static void Main(string[] args)
    {
        // Get the type of the nested class.
        Type myTypeB = typeof(MyClassA.MyClassB);
        // Get the IsNestedFamORAssem property of the nested class.
        Console.WriteLine("\nThe IsNestedFamORAssem property value of the nested class is {0}.", myTypeB.IsNestedFamANDAssem.ToString());
    }
}

using namespace System;

// Enclose a class.
ref class MyClassA
{
public protected:
   ref class MyClassB{};
};

int main()
{
   // Get the type of the nested class.
   Type^ myTypeB = MyClassA::MyClassB::typeid;

   // Get the IsNestedFamORAssem property of the nested class.
   Console::WriteLine( "\nThe IsNestedFamORAssem property value of the nested class is {0}.", myTypeB->IsNestedFamORAssem );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsNestedPrivate 属性

Type
.
.
::
.
IsNestedPrivate 属性
Type 类

获取一个值，通过该值指示 Type 是否是嵌套的并声明为私有。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsNestedPrivate As Boolean
    Get
public bool IsNestedPrivate { get; }
public:
virtual property bool IsNestedPrivate {
    bool get () sealed;
}
abstract IsNestedPrivate : bool
override IsNestedPrivate : bool

属性值

类型： System Boolean
如果 Type 是嵌套的并声明为私有的，则为 true；否则为 false。

实现

如果当前 Type 表示泛型类型的类型形参，则此属性始终返回 false。

TypeAttributes..::.VisibilityMask 选择可见性特性。

下面的示例将一个嵌套类声明为私有，并显示该嵌套类的 IsNestedPrivate 属性值。

Imports System
Imports Microsoft.VisualBasic
' Outer class.
Public Class MyClassA
    ' Private nested class.
    Private Class MyClassB
    End Class 'MyClassB
    Public Shared Sub Main()
        ' Get the type of the nested class.
        Dim myTypeB As Type = GetType(MyClassA.MyClassB)
        ' Get the IsNestedPrivate property of the nested class.
        Console.WriteLine(ControlChars.Cr + "The IsNestedPrivate property value of the nested class is {0}.", myTypeB.IsNestedPrivate.ToString())
    End Sub 'Main
End Class 'MyClassA

using System;
// Outer class.
public class MyClassA
{
    // Private nested class.
    private class MyClassB
    {
    }
    public static void Main(string[] args)
    {
        // Get the type of the nested class.
        Type myTypeB = typeof(MyClassA.MyClassB);
        // Get the IsNestedPrivate property of the nested class.
        Console.WriteLine("\nThe IsNestedPrivate property value of the nested class is {0}.", myTypeB.IsNestedPrivate.ToString());
    }
}

using namespace System;

// Outer class.
public ref class MyClassA
{
private:

   // Private nested class.
   ref class MyClassB{};

public:
   static void Test()
   {
      // Get the type of the nested class.
      Type^ myTypeB = MyClassA::MyClassB::typeid;

      // Get the IsNestedPrivate property of the nested class.
      Console::WriteLine( "\nThe IsNestedPrivate property value of the nested class is {0}.", myTypeB->IsNestedPrivate );
   }
};

int main()
{
   MyClassA::Test();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsNestedPublic 属性

Type
.
.
::
.
IsNestedPublic 属性
Type 类

获取一个值，通过该值指示类是否是嵌套的并且声明为公共的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsNestedPublic As Boolean
    Get
public bool IsNestedPublic { get; }
public:
virtual property bool IsNestedPublic {
    bool get () sealed;
}
abstract IsNestedPublic : bool
override IsNestedPublic : bool

属性值

类型： System Boolean
如果类是嵌套的并且声明为公共的，则为 true；否则为 false。

实现

如果当前 Type 表示泛型类型的类型形参，则此属性始终返回 false。

TypeAttributes..::.VisibilityMask 选择可见性特性。

下面的示例声明一个公共嵌套类，并显示它的 IsNestedPublic 属性值。

Imports System
Imports Microsoft.VisualBasic
' Enclose a class.
Public Class MyClassA
    ' Public nested class.
    Public Class MyClassB
    End Class 'MyClassB
    Public Shared Sub Main()
        ' Get the type of the nested class.
        Dim myTypeB As Type = GetType(MyClassA.MyClassB)
        ' Get the IsNestedPublic property of the nested class.
        Console.WriteLine(ControlChars.Cr + "The IsNestedPublic property value of the nested class is {0}.", myTypeB.IsNestedPublic.ToString())
    End Sub 'Main
End Class 'MyClassA

using System;
// Enclose a class.
public class MyClassA
{
    // Public nested class.
    public class MyClassB
    {
    }
    public static void Main(string[] args)
    {
        // Get the type of the nested class.
        Type myTypeB = typeof(MyClassA.MyClassB);
        // Get the IsNestedPublic property of the nested class.
        Console.WriteLine("\nThe IsNestedPublic property value of the nested class is {0}.", myTypeB.IsNestedPublic.ToString());
    }
}

using namespace System;

// Enclose a class.
public ref class MyClassA
{
public:

   // Public nested class.
   ref class MyClassB{};
};

int main()
{

   // Get the type of the nested class.
   Type^ myTypeB = MyClassA::MyClassB::typeid;

   // Get the IsNestedPublic property of the nested class.
   Console::WriteLine( "\nThe IsNestedPublic property value of the nested class is {0}.", myTypeB->IsNestedPublic.ToString() );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsNotPublic 属性

Type
.
.
::
.
IsNotPublic 属性
Type 类

获取一个值，该值指示 Type 是否声明为公共类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsNotPublic As Boolean
    Get
public bool IsNotPublic { get; }
public:
virtual property bool IsNotPublic {
    bool get () sealed;
}
abstract IsNotPublic : bool
override IsNotPublic : bool

属性值

类型： System Boolean
如果 Type 未声明为公共类型且不是嵌套类型，则为 true；否则为 false。

实现

不要使用嵌套类型，而应使用 IsNestedPublic。

如果当前 Type 表示泛型类型的类型形参，则此属性将返回 false。

TypeAttributes..::.VisibilityMask 选择可见性特性。

本示例演示如何使用 IsNotPublic 获取类型的可见性。

Imports System
Imports System.IO
Imports System.Reflection
Imports Microsoft.VisualBasic
Class MyMemberInfo
    Public Shared Sub Main()
        Console.WriteLine(ControlChars.Cr + "Reflection.MemberInfo")
        'Get the Type and MemberInfo.
        Dim MyType As Type = Type.GetType("System.IO.File")
        Dim Mymemberinfoarray As MemberInfo() = MyType.GetMembers()
        'Get and display the DeclaringType method.
        Console.WriteLine(ControlChars.Cr + "There are {0} members in {1}.", _
           Mymemberinfoarray.Length, MyType.FullName)
        Console.WriteLine("Is {0} nonpublic? {1}", MyType.FullName, _
           MyType.IsNotPublic.ToString())
    End Sub
End Class

using System;
using System.IO;
using System.Reflection;
class MyMemberInfo
{
    public static void Main(string[] args)
    {
        Console.WriteLine ("\nReflection.MemberInfo");
        //Get the Type and MemberInfo.
        Type MyType =Type.GetType("System.IO.File");
        MemberInfo[] Mymemberinfoarray = MyType.GetMembers();
        //Get and display the DeclaringType method.
        Console.WriteLine("\nThere are {0} members in {1}.", Mymemberinfoarray.Length, MyType.FullName);
        Console.WriteLine("Is {0} nonpublic? {1}", MyType.FullName, MyType.IsNotPublic.ToString());
    }
}

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
int main()
{
   Console::WriteLine( "\nReflection.MemberInfo" );

   //Get the Type and MemberInfo.
   Type^ MyType = Type::GetType( "System.IO.File" );
   array<MemberInfo^>^Mymemberinfoarray = MyType->GetMembers();

   //Get and display the DeclaringType method.
   Console::WriteLine( "\nThere are {0} members in {1}.", Mymemberinfoarray->Length, MyType->FullName );
   Console::WriteLine( "Is {0} nonpublic? {1}", MyType->FullName, MyType->IsNotPublic );
}

此代码产生下列输出：

There are 27 members in System.IO.File.

Is System.IO.File public?False Is System.IO.File public?False

下面的代码示例说明不能对嵌套类使用 IsPublic 和 IsNotPublic 的原因。

Public Class A
    Public Class B
    End Class
    Private Class C
    End Class
End Class

public class A
{
    public class B { }
    private class C { }
}

public ref class A
{
public:
   ref class B{};

private:
   ref class C{};

};

对于嵌套类，忽略 IsPublic 和 IsNotPublic 的结果，而只注意 IsNestedPublic 和 IsNestedPrivate 的结果。此代码段的反射输出如下： 对于嵌套类，忽略 IsPublic 和 IsNotPublic 的结果，而只注意 IsNestedPublic 和 IsNestedPrivate 的结果。此代码段的反射输出如下：

Class | IsNotPublic | IsPublic | IsNestedPublic | IsNestedPrivate
A | FALSE | TRUE | FALSE | FALSE
B | FALSE | FALSE | TRUE | FALSE
C | FALSE | FALSE | FALSE | TRUE

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsPointer 属性

Type
.
.
::
.
IsPointer 属性
Type 类

获取一个值，通过该值指示 Type 是否为指针。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsPointer As Boolean
    Get
public bool IsPointer { get; }
public:
virtual property bool IsPointer {
    bool get () sealed;
}
abstract IsPointer : bool
override IsPointer : bool

属性值

类型： System Boolean
如果 Type 是指针，则为 true；否则为 false。

实现

如果当前 Type 表示泛型类型，或泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

此属性为只读。

下面的示例说明 IsPointer 属性的用法。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class MyTypeDelegator
    Inherits TypeDelegator
    Public myElementType As String = Nothing
    Private myType As Type = Nothing
    Public Sub New(ByVal myType As Type)
        MyBase.New(myType)
        Me.myType = myType
    End Sub 'New
    ' Override Type.HasElementTypeImpl().
    Protected Overrides Function HasElementTypeImpl() As Boolean
        ' Determine whether the type is an array.
        If myType.IsArray Then
            myElementType = "array"
            Return True
        End If
        ' Determine whether the type is a reference.
        If myType.IsByRef Then
            myElementType = "reference"
            Return True
        End If
        ' Determine whether the type is a pointer.
        If myType.IsPointer Then
            myElementType = "pointer"
            Return True
        End If
        ' The type is not a reference, array, or pointer type.
        Return False
    End Function 'HasElementTypeImpl
End Class 'MyTypeDelegator
Public Class Type_HasElementTypeImpl
    Public Shared Sub Main()
        Try
            Dim myInt As Integer = 0
            Dim myArray(4) As Integer
            Dim myType As New MyTypeDelegator(myArray.GetType())
            Console.WriteLine(ControlChars.NewLine + "Determine whether a variable refers to an array or pointer or reference type." + ControlChars.NewLine)
            ' Determine whether myType is an array, pointer, reference type.
            If myType.HasElementType Then
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType.ToString())
            Else
                Console.WriteLine("myArray is not an array, pointer, or reference type.")
            End If
            myType = New MyTypeDelegator(myInt.GetType())
            ' Determine whether myType is an array, pointer, reference type.
            If myType.HasElementType Then
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType.ToString())
            Else
                Console.WriteLine("myInt is not an array, pointer, or reference type.")
            End If
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_HasElementTypeImpl

using System;
using System.Reflection;
public class MyTypeDelegator : TypeDelegator
{
    public string myElementType = null;
    private Type myType = null ;
    public MyTypeDelegator(Type myType) : base(myType)
    {
        this.myType = myType;
    }
    // Override Type.HasElementTypeImpl().
    protected override bool HasElementTypeImpl()
    {
        // Determine whether the type is an array.
        if(myType.IsArray)
        {
            myElementType = "array";
            return true;
        }
        // Determine whether the type is a reference.
        if(myType.IsByRef)
        {
            myElementType = "reference";
            return true;
        }
        // Determine whether the type is a pointer.
        if(myType.IsPointer)
        {
            myElementType = "pointer";
            return true;
        }
        // Return false if the type is not a reference, array, or pointer type.
        return false;
    }
}
public class Type_HasElementTypeImpl
{
    public static void Main()
    {
        try
        {
            int myInt = 0 ;
            int[] myArray = new int[5];
            MyTypeDelegator myType = new MyTypeDelegator(myArray.GetType());
            // Determine whether myType is an array, pointer, reference type.
            Console.WriteLine("\nDetermine whether a variable is an array, pointer, or reference type.\n");
            if( myType.HasElementType)
                Console.WriteLine("The type of myArray is {0}.", myType.myElementType);
            else
                Console.WriteLine("myArray is not an array, pointer, or reference type.");
            myType = new MyTypeDelegator(myInt.GetType());
            // Determine whether myType is an array, pointer, reference type.
            if( myType.HasElementType)
                Console.WriteLine("The type of myInt is {0}.", myType.myElementType);
            else
                Console.WriteLine("myInt is not an array, pointer, or reference type.");
        }
        catch( Exception e )
        {
            Console.WriteLine("Exception: {0}", e.Message);
        }
    }
}

using namespace System;
using namespace System::Reflection;
public ref class MyTypeDelegator: public TypeDelegator
{
public:
   String^ myElementType;

private:
   Type^ myType;

public:
   MyTypeDelegator( Type^ myType )
      : TypeDelegator( myType )
   {
      this->myType = myType;
   }

protected:

   // Override Type::HasElementTypeImpl().
   virtual bool HasElementTypeImpl() override
   {

      // Determine whether the type is an array.
      if ( myType->IsArray )
      {
         myElementType = "array";
         return true;
      }

      // Determine whether the type is a reference.
      if ( myType->IsByRef )
      {
         myElementType = "reference";
         return true;
      }

      // Determine whether the type is a pointer.
      if ( myType->IsPointer )
      {
         myElementType = "pointer";
         return true;
      }

      // Return false if the type is not a reference, array, or pointer type.
      return false;
   }

};

int main()
{
   try
   {
      int myInt = 0;
      array<Int32>^myArray = gcnew array<Int32>(5);
      MyTypeDelegator^ myType = gcnew MyTypeDelegator( myArray->GetType() );

      // Determine whether myType is an array, pointer, reference type.
      Console::WriteLine( "\nDetermine whether a variable is an array, pointer, or reference type.\n" );
      if ( myType->HasElementType )
            Console::WriteLine( "The type of myArray is {0}.", myType->myElementType );
      else
            Console::WriteLine( "myArray is not an array, pointer, or reference type." );
      myType = gcnew MyTypeDelegator( myInt.GetType() );

      // Determine whether myType is an array, pointer, reference type.
      if ( myType->HasElementType )
            Console::WriteLine( "The type of myInt is {0}.", myType->myElementType );
      else
            Console::WriteLine( "myInt is not an array, pointer, or reference type." );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
IsPointerImpl


Type ..::.IsPrimitive 属性

Type
.
.
::
.
IsPrimitive 属性
Type 类

获取一个值，通过该值指示 Type 是否为基元类型之一。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsPrimitive As Boolean
    Get
public bool IsPrimitive { get; }
public:
virtual property bool IsPrimitive {
    bool get () sealed;
}
abstract IsPrimitive : bool
override IsPrimitive : bool

属性值

类型： System Boolean
如果 Type 为基元类型之一，则为 true；否则为 false。

实现

基元类型为 Boolean、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、IntPtr、UIntPtr、Char、Double 和 Single。

如果当前 Type 表示泛型类型，或泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

下面的示例演示 Type 类的 IsContextful、IsMarshalByRef 和 IsPrimitive 属性。它将检查给定类型可否在上下文中承载，该类型可否按引用来进行封送，以及该类型是否是基元数据类型。 下面的示例演示 Type 类的 IsContextful、IsMarshalByRef 和 IsPrimitive 属性。它将检查给定类型可否在上下文中承载，该类型可否按引用来进行封送，以及该类型是否是基元数据类型。

Imports System
Imports System.Runtime.Remoting.Contexts
Imports Microsoft.VisualBasic
Public Class MyContextBoundClass
    Inherits ContextBoundObject
    Public myString As String = "This class demonstrates the IsContextful, IsMarshalByRef, and IsPrimitive properties."
End Class 'MyContextBoundClass
Public Class MyTypeDemoClass
    Public Shared Sub Main()
        Try
            ' Determine whether the types can be hosted in a Context.
            Console.WriteLine("The Contextful property for the {0} type is {1}.", GetType(MyTypeDemoClass).Name, GetType(MyTypeDemoClass).IsContextful.ToString())
            Console.WriteLine("The Contextful property for the {0} type is {1}.", GetType(MyContextBoundClass).Name, GetType(MyContextBoundClass).IsContextful.ToString())
            ' Determine whether the types are marshalled by reference.
            Console.WriteLine("The MarshalByRef property of {0} is {1}.", GetType(MyTypeDemoClass).Name, GetType(MyTypeDemoClass).IsMarshalByRef.ToString())
            Console.WriteLine("The MarshalByRef property of {0} is {1}.", GetType(MyContextBoundClass).Name, GetType(MyContextBoundClass).IsMarshalByRef.ToString())
            ' Determine whether the types are primitive datatypes.
            Console.WriteLine("Is {0} a primitive data type? {1}.", GetType(Integer).Name, GetType(Integer).IsPrimitive.ToString())
            Console.WriteLine("Is {0} a primitive data type? {1}.", GetType(String).Name, GetType(String).IsPrimitive.ToString())
        Catch e As Exception
            Console.WriteLine("An exception occurred: " + e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'MyTypeDemoClass

using System;
using System.Runtime.Remoting.Contexts;
public class MyContextBoundClass: ContextBoundObject
{
    public string myString = "This class demonstrates the IsContextful, IsMarshalByRef, and IsPrimitive properties.";
}
public class MyTypeDemoClass
{
    public static void Main()
    {
        try
        {
            // Determine whether the types can be hosted in a Context.
            Console.WriteLine ("The IsContextful property for the {0} type is {1}.", typeof(MyTypeDemoClass).Name, typeof(MyTypeDemoClass).IsContextful);
            Console.WriteLine ("The IsContextful property for the {0} type is {1}.", typeof(MyContextBoundClass).Name, typeof(MyContextBoundClass).IsContextful);

            // Determine whether the types are marshalled by reference.
            Console.WriteLine ("The MarshalByRef property of {0} is {1}.", typeof(MyTypeDemoClass).Name, typeof(MyTypeDemoClass).IsMarshalByRef);
            Console.WriteLine ("The MarshalByRef property of {0} is {1}.", typeof(MyContextBoundClass).Name, typeof(MyContextBoundClass).IsMarshalByRef);

            // Determine whether the types are primitive datatypes.
            Console.WriteLine ("Is {0} is a primitive data type? {1}.", typeof(int).Name, typeof(int).IsPrimitive);
            Console.WriteLine ("Is {0} a primitive data type? {1}.", typeof(string).Name, typeof(string).IsPrimitive);
        }
        catch (Exception e)
        {
            Console.WriteLine("An exception occurred: " + e.Message);
        }
    }
}

using namespace System;
using namespace System::Runtime::Remoting::Contexts;
public ref class MyContextBoundClass: public ContextBoundObject
{
public:
   String^ myString;
};

public ref class MyTypeDemoClass
{
public:
   void Demo()
   {
      try
      {
         // Determine whether the types can be hosted in a Context.
         Console::WriteLine( "The IsContextful property for the {0} type is {1}.", MyTypeDemoClass::typeid->Name, MyTypeDemoClass::typeid->IsContextful );
         Console::WriteLine( "The IsContextful property for the {0} type is {1}.", MyContextBoundClass::typeid->Name, MyContextBoundClass::typeid->IsContextful );

         // Determine whether the types are marshalled by reference.
         Console::WriteLine( "The MarshalByRef property of {0} is {1}.", MyTypeDemoClass::typeid->Name, MyTypeDemoClass::typeid->IsMarshalByRef );
         Console::WriteLine( "The MarshalByRef property of {0} is {1}.", MyContextBoundClass::typeid->Name, MyContextBoundClass::typeid->IsMarshalByRef );

         // Determine whether the types are primitive datatypes.
         Console::WriteLine( "Is {0} is a primitive data type? {1}.", int::typeid->Name, int::typeid->IsPrimitive );
         Console::WriteLine( "Is {0} a primitive data type? {1}.", String::typeid->Name, String::typeid->IsPrimitive );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( "An exception occurred: {0}", e->Message );
      }
   }
};

int main()
{
   MyTypeDemoClass^ mtdc = gcnew MyTypeDemoClass;
   mtdc->Demo();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
Boolean
Byte
SByte
Int16
UInt16
Int32
UInt32
Int64
UInt64
Char
Double
Single
IsPrimitiveImpl


Type ..::.IsPublic 属性

Type
.
.
::
.
IsPublic 属性
Type 类

获取一个值，该值指示 Type 是否声明为公共类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsPublic As Boolean
    Get
public bool IsPublic { get; }
public:
virtual property bool IsPublic {
    bool get () sealed;
}
abstract IsPublic : bool
override IsPublic : bool

属性值

类型： System Boolean
如果 Type 声明为公共类型且不是嵌套类型，则为 true；否则为 false。

实现

不要使用嵌套类型，而应使用 IsNestedPublic。

如果当前 Type 表示泛型类型的类型形参，则此属性将返回 true。

TypeAttributes..::.VisibilityMask 选择可见性特性。

下面的示例创建 MyTestClass 的实例，检查 IsPublic 属性，然后显示结果。

Imports System
Imports Microsoft.VisualBasic
Namespace SystemType
    ' Declare MyTestClass as public.
    Public Class MyTestClass
    End Class 'MyTestClass
    Public Class [MyClass]
        Public Shared Sub Main()
            Try
                Dim myBool As Boolean = False
                Dim myTestClassInstance As New MyTestClass()
                ' Get the type of myTestClassInstance.
                Dim myType As Type = myTestClassInstance.GetType()
                ' Get the IsPublic property of myTestClassInstance.
                myBool = myType.IsPublic
                Console.WriteLine(ControlChars.Cr + "Is {0 public? {1}.", myType.FullName, myBool.ToString())
            Catch e As Exception
                Console.WriteLine(ControlChars.Cr + "An exception occurred: {0}", e.Message.ToString())
            End Try
        End Sub 'Main
    End Class '[MyClass]
End Namespace 'SystemType

using System;
namespace SystemType
{
    // Declare MyTestClass as public.
    public class MyTestClass
    {
    }
    public class MyClass
    {
        public static void Main(string []args)
        {
            try
            {
                bool myBool = false;
                MyTestClass myTestClassInstance = new MyTestClass();
                // Get the type of myTestClassInstance.
                Type   myType = myTestClassInstance.GetType();
                // Get the IsPublic property of the myTestClassInstance.
                myBool = myType.IsPublic;
                Console.WriteLine("\nIs {0} public? {1}.", myType.FullName, myBool.ToString ());
            }
            catch (Exception e)
            {
                Console.WriteLine("\nAn exception occurred: {0}", e.Message);
            }
        }
    }
}

using namespace System;

namespace SystemType
{

   // Declare MyTestClass as public.
   public ref class MyTestClass{};

   public ref class MyClass{};

}

int main()
{
   try
   {
      bool myBool = false;
      SystemType::MyTestClass^ myTestClassInstance = gcnew SystemType::MyTestClass;

      // Get the type of myTestClassInstance.
      Type^ myType = myTestClassInstance->GetType();

      // Get the IsPublic property of the myTestClassInstance.
      myBool = myType->IsPublic;
      Console::WriteLine( "\nIs {0} public? {1}.", myType->FullName, myBool.ToString() );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "\nAn exception occurred: {0}", e->Message );
   }

}

对于嵌套类，忽略 IsPublic 和 IsNotPublic 的结果，而只注意 IsNestedPublic 和 IsNestedPrivate 的结果。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsSealed 属性

Type
.
.
::
.
IsSealed 属性
Type 类

获取一个值，通过该值指示 Type 是否声明为密封的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsSealed As Boolean
    Get
public bool IsSealed { get; }
public:
virtual property bool IsSealed {
    bool get () sealed;
}
abstract IsSealed : bool
override IsSealed : bool

属性值

类型： System Boolean
如果 Type 被声明为密封的，则为 true；否则为 false。

实现

如果当前 Type 表示泛型类型的类型形参，则此属性始终返回 true。

下面的示例创建 sealed 类的实例，检查 IsSealed 属性，并显示结果。

Imports System
Imports Microsoft.VisualBasic
Namespace SystemType
    Public Class [MyClass]
        ' Declare MyTestClass as sealed.
        Public NotInheritable Class MyTestClass
        End Class 'MyTestClass
        Public Shared Sub Main()
            Try
                Dim myBool As Boolean = False
                Dim myTestClassInstance As New MyTestClass()
                ' Get the type of myTestClassInstance.
                Dim myType As Type = myTestClassInstance.GetType()
                ' Get the IsSealed property of myTestClassInstance.
                myBool = myType.IsSealed
                Console.WriteLine(ControlChars.Cr + "Is {0} sealed? {1}.", myType.FullName, myBool.ToString())
            Catch e As Exception
                Console.WriteLine(ControlChars.Cr + "An exception occurred: {0}", e.Message.ToString())
            End Try
        End Sub 'Main
    End Class '[MyClass]
End Namespace 'SystemType

using System;
namespace SystemType
{
    public class MyClass
    {
        // Declare MyTestClass as sealed.
        sealed public class MyTestClass
        {
        }
        public static void Main(string []args)
        {
            try
            {
                bool myBool = false;
                MyTestClass myTestClassInstance = new MyTestClass();
                // Get the type of myTestClassInstance.
                Type myType = myTestClassInstance.GetType();
                // Get the IsSealed property of the myTestClassInstance.
                myBool = myType.IsSealed;
                Console.WriteLine("\nIs {0} sealed? {1}.", myType.FullName, myBool.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine("\nAn exception occurred: {0}",e.Message);
            }
        }
    }
}

using namespace System;

   // Declare MyTestClass as sealed.
   ref class MyTestClass sealed{};

int main()
   {
      try
      {
         bool myBool = false;
         MyTestClass^ myTestClassInstance = gcnew MyTestClass;

         // Get the type of myTestClassInstance.
         Type^ myType = myTestClassInstance->GetType();

         // Get the IsSealed property of the myTestClassInstance.
         myBool = myType->IsSealed;
         Console::WriteLine( "\nIs {0} sealed? {1}.", myType->FullName, myBool );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( "\nAn exception occurred: {0}", e->Message );
      }

   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsSecurityCritical 属性

Type
.
.
::
.
IsSecurityCritical 属性
Type 类

获取一个值，该值指示当前的类型在当前信任级别上是安全关键的还是安全可靠关键的，并因此可以执行关键操作。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsSecurityCritical As Boolean
    Get
public virtual bool IsSecurityCritical { get; }
public:
virtual property bool IsSecurityCritical {
    bool get ();
}
abstract IsSecurityCritical : bool
override IsSecurityCritical : bool

属性值

类型： System Boolean
如果当前类型在当前信任级别上是安全关键的或安全可靠关键的，则为 true；如果它是透明的，则为 false。

IsSecurityCritical、IsSecuritySafeCritical 和 IsSecurityTransparent 属性报告由公共语言运行库 (CLR) 确定的在其当前信任级别上类型的透明度级别。下表显示了这些属性的组合： IsSecurityCritical、IsSecuritySafeCritical 和 IsSecurityTransparent 属性报告由公共语言运行库 (CLR) 确定的在其当前信任级别上类型的透明度级别。下表显示了这些属性的组合：

安全级别 | IsSecurityCritical | IsSecuritySafeCritical | IsSecurityTransparent
Critical | true | false | false
安全临界点 | true | true | false
透明的 | false | false | true

相对于检查程序集及其类型的安全批注、检查当前信任级别以及尝试复制运行时的规则，使用这些属性要简单很多。

重要说明 重要事项

对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。

有关反射和透明度的更多信息，请参见反射的安全注意事项。有关透明度的信息，请参见 .NET Framework 4 中的安全性更改。 有关反射和透明度的更多信息，请参见反射的安全注意事项。有关透明度的信息，请参见 .NET Framework 4 中的安全性更改。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
IsSecuritySafeCritical
IsSecurityTransparent

其他资源

反射的安全注意事项
.NET Framework 4 中的安全性更改


Type ..::.IsSecuritySafeCritical 属性

Type
.
.
::
.
IsSecuritySafeCritical 属性
Type 类

获取一个值，该值指示当前类型在当前信任级别上是否是安全可靠关键的；即它是否可以执行关键操作并可以由透明代码访问。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsSecuritySafeCritical As Boolean
    Get
public virtual bool IsSecuritySafeCritical { get; }
public:
virtual property bool IsSecuritySafeCritical {
    bool get ();
}
abstract IsSecuritySafeCritical : bool
override IsSecuritySafeCritical : bool

属性值

类型： System Boolean
如果当前类型在当前信任级别上是安全可靠关键的，则为 true；如果它是安全关键的或透明的，则为 false。

IsSecurityCritical、IsSecuritySafeCritical 和 IsSecurityTransparent 属性报告由公共语言运行库 (CLR) 确定的在其当前信任级别上类型的透明度级别。下表显示了这些属性的组合： IsSecurityCritical、IsSecuritySafeCritical 和 IsSecurityTransparent 属性报告由公共语言运行库 (CLR) 确定的在其当前信任级别上类型的透明度级别。下表显示了这些属性的组合：

安全级别 | IsSecurityCritical | IsSecuritySafeCritical | IsSecurityTransparent
Critical | true | false | false
安全临界点 | true | true | false
透明的 | false | false | true

相对于检查程序集及其类型的安全批注、检查当前信任级别以及尝试复制运行时的规则，使用这些属性要简单很多。

重要说明 重要事项

对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。

有关反射和透明度的更多信息，请参见反射的安全注意事项。有关透明度的信息，请参见 .NET Framework 4 中的安全性更改。 有关反射和透明度的更多信息，请参见反射的安全注意事项。有关透明度的信息，请参见 .NET Framework 4 中的安全性更改。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
IsSecurityCritical
IsSecurityTransparent

其他资源

反射的安全注意事项
.NET Framework 4 中的安全性更改


Type ..::.IsSecurityTransparent 属性

Type
.
.
::
.
IsSecurityTransparent 属性
Type 类

获取一个值，该值指示当前类型在当前信任级别上是否是透明的而无法执行关键操作。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsSecurityTransparent As Boolean
    Get
public virtual bool IsSecurityTransparent { get; }
public:
virtual property bool IsSecurityTransparent {
    bool get ();
}
abstract IsSecurityTransparent : bool
override IsSecurityTransparent : bool

属性值

类型： System Boolean
如果该类型在当前信任级别上是安全透明的，则为 true；否则为 false。

如果此属性返回 true，则 IsSecurityCritical 和 IsSecuritySafeCritical 属性返回 false。

IsSecurityCritical、IsSecuritySafeCritical 和 IsSecurityTransparent 属性报告由公共语言运行库 (CLR) 确定的在其当前信任级别上类型的透明度级别。相对于检查程序集及其类型的安全批注、检查当前信任级别以及尝试复制运行时的规则，使用这些属性要简单很多。 IsSecurityCritical、IsSecuritySafeCritical 和 IsSecurityTransparent 属性报告由公共语言运行库 (CLR) 确定的在其当前信任级别上类型的透明度级别。相对于检查程序集及其类型的安全批注、检查当前信任级别以及尝试复制运行时的规则，使用这些属性要简单很多。

重要说明 重要事项

对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。 对于部分信任的程序集，此属性的值取决于该程序集的当前信任级别。如果程序集被加载到一个部分信任的应用程序域（例如，加载到沙盒中的应用程序域），则运行时将忽略程序集的安全注释。将程序集及其所有类型都当作透明。仅当该程序集被加载到一个完全受信任的应用程序域时（例如，加载到桌面应用程序的默认应用程序域中），运行库才会注意部分受信任的程序集的安全注释。相反，受信任的程序集（即，安装在全局程序集缓存中的强名称程序集）始终以完全信任的方式加载，而不管应用程序域的信任级别，因此其当前信任级别始终是完全受信任。使用 Assembly..::.IsFullyTrusted 和 AppDomain..::.IsFullyTrusted 属性，可确定程序集和应用程序域的当前信任级别。

有关反射和透明度的更多信息，请参见反射的安全注意事项。有关透明度的信息，请参见 .NET Framework 4 中的安全性更改。 有关反射和透明度的更多信息，请参见反射的安全注意事项。有关透明度的信息，请参见 .NET Framework 4 中的安全性更改。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
IsSecurityCritical
IsSecuritySafeCritical

其他资源

反射的安全注意事项
.NET Framework 4 中的安全性更改


Type ..::.IsSerializable 属性

Type
.
.
::
.
IsSerializable 属性
Type 类

获取一个值，通过该值指示 Type 是否为可串行的。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsSerializable As Boolean
    Get
public virtual bool IsSerializable { get; }
public:
virtual property bool IsSerializable {
    bool get ();
}
abstract IsSerializable : bool
override IsSerializable : bool

属性值

类型： System Boolean
如果 Type 是可序列化的，则为 true；否则为 false。

实现

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

下面的示例创建 MyTestClass 类的实例，设置 [Serializable] 特性，然后检查 IsSerializable 属性是 true 还是 false。

Imports System
Imports Microsoft.VisualBasic
Namespace SystemType
    Public Class [MyClass]
        ' Declare a public class with the [Serializable] attribute.
        <Serializable()> Public Class MyTestClass
        End Class 'MyTestClass
        Public Overloads Shared Sub Main()
            Try
                Dim myBool As Boolean = False
                Dim myTestClassInstance As New MyTestClass()
                ' Get the type of myTestClassInstance.
                Dim myType As Type = myTestClassInstance.GetType()
                ' Get the IsSerializable property of myTestClassInstance.
                myBool = myType.IsSerializable
                Console.WriteLine(ControlChars.Cr + "Is {0} serializable? {1}.", myType.FullName, myBool.ToString())
            Catch e As Exception
                Console.WriteLine(ControlChars.Cr + "An exception occurred: {0}", e.Message.ToString())
            End Try
        End Sub 'Main
    End Class '[MyClass]
End Namespace 'SystemType

using System;
namespace SystemType
{
    public class MyClass
    {
        // Declare a public class with the [Serializable] attribute.
        [Serializable] public class MyTestClass
        {
        }
        public static void Main(string []args)
        {
            try
            {
                bool myBool = false;
                MyTestClass myTestClassInstance = new MyTestClass();
                // Get the type of myTestClassInstance.
                Type myType = myTestClassInstance.GetType();
                // Get the IsSerializable property of myTestClassInstance.
                myBool = myType.IsSerializable;
                Console.WriteLine("\nIs {0} serializable? {1}.", myType.FullName, myBool.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine("\nAn exception occurred: {0}", e.Message);
            }
        }
    }
}

using namespace System;
public ref class MyClass
{
public:

   // Declare a public class with the [Serializable] attribute.

   [Serializable]
   ref class MyTestClass{};

};

int main()
{
   try
   {
      bool myBool = false;
      MyClass::MyTestClass^ myTestClassInstance = gcnew MyClass::MyTestClass;

      // Get the type of myTestClassInstance.
      Type^ myType = myTestClassInstance->GetType();

      // Get the IsSerializable property of myTestClassInstance.
      myBool = myType->IsSerializable;
      Console::WriteLine( "\nIs {0} serializable? {1}.", myType->FullName, myBool );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "\nAn exception occurred: {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
ISerializable


Type ..::.IsSpecialName 属性

Type
.
.
::
.
IsSpecialName 属性
Type 类

获取一个值，通过该值指示 Type 是否具有需要特殊处理的名称。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsSpecialName As Boolean
    Get
public bool IsSpecialName { get; }
public:
virtual property bool IsSpecialName {
    bool get () sealed;
}
abstract IsSpecialName : bool
override IsSpecialName : bool

属性值

类型： System Boolean
如果 Type 具有需要特殊处理的名称，则为 true；否则为 false。

实现

以下划线字符 (_) 开头或包含下划线字符 (_) 的名称、属性访问器和运算符重载方法都属于可能要求某些编译器进行特殊处理的类型。

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes


Type ..::.IsUnicodeClass 属性

Type
.
.
::
.
IsUnicodeClass 属性
Type 类

获取一个值，通过该值指示是否为 Type 选定了字符串格式特性 UnicodeClass。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsUnicodeClass As Boolean
    Get
public bool IsUnicodeClass { get; }
public:
virtual property bool IsUnicodeClass {
    bool get () sealed;
}
abstract IsUnicodeClass : bool
override IsUnicodeClass : bool

属性值

类型： System Boolean
如果为 Type 选择了字符串格式特性 UnicodeClass，则为 true；否则为 false。

实现

StringFormatMask 用于选择字符串格式特性。字符串格式特性通过定义字符串的解释方式来增强交互操作。 StringFormatMask 用于选择字符串格式特性。字符串格式特性通过定义字符串的解释方式来增强交互操作。

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
IsAnsiClass
IsAutoClass


Type ..::.IsValueType 属性

Type
.
.
::
.
IsValueType 属性
Type 类

获取一个值，通过该值指示 Type 是否为值类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsValueType As Boolean
    Get
public bool IsValueType { get; }
public:
virtual property bool IsValueType {
    bool get () sealed;
}
abstract IsValueType : bool
override IsValueType : bool

属性值

类型： System Boolean
如果 Type 是值类型，则为 true；否则为 false。

实现

值类型是那些表示为位序列的类型；值类型不是类或接口。在一些编程语言中，值类型被称为"structs"。枚举是值类型的特殊情况。 值类型是那些表示为位序列的类型；值类型不是类或接口。在一些编程语言中，值类型被称为"structs"。枚举是值类型的特殊情况。 值类型是那些表示为位序列的类型；值类型不是类或接口。在一些编程语言中，值类型被称为"structs"。枚举是值类型的特殊情况。

此属性对 ValueType 类返回 false，因为 ValueType 自身不是值类型。它是所有值类型的基类，因此可以将任何值类型分配给它。如果 ValueType 自身是值类型，则不能这样做。在将值类型分配给类型为 ValueType 的字段时，会将值类型装箱。 此属性对 ValueType 类返回 false，因为 ValueType 自身不是值类型。它是所有值类型的基类，因此可以将任何值类型分配给它。如果 ValueType 自身是值类型，则不能这样做。在将值类型分配给类型为 ValueType 的字段时，会将值类型装箱。 此属性对 ValueType 类返回 false，因为 ValueType 自身不是值类型。它是所有值类型的基类，因此可以将任何值类型分配给它。如果 ValueType 自身是值类型，则不能这样做。在将值类型分配给类型为 ValueType 的字段时，会将值类型装箱。 此属性对 ValueType 类返回 false，因为 ValueType 自身不是值类型。它是所有值类型的基类，因此可以将任何值类型分配给它。如果 ValueType 自身是值类型，则不能这样做。在将值类型分配给类型为 ValueType 的字段时，会将值类型装箱。

此属性对枚举返回 true，但是对 Enum 类型本身则不然。有关演示此行为的示例，请参见 IsEnum。 此属性对枚举返回 true，但是对 Enum 类型本身则不然。有关演示此行为的示例，请参见 IsEnum。

此属性为只读。

下面的示例创建类型 MyEnum 的变量，检查 IsValueType 属性，然后显示结果。

Imports System
Imports Microsoft.VisualBasic
Namespace SystemType
    Public Class [MyClass]

        ' Declare an enum type.
        Enum MyEnum
            One
            Two
        End Enum 'MyEnum

        Public Overloads Shared Sub Main()
            Try
                Dim myBool As Boolean = False
                Dim myTestEnum As MyEnum = MyEnum.One
                ' Get the type of myTestEnum.
                Dim myType As Type = myTestEnum.GetType()
                ' Get the IsValueType property of the myTestEnum variable.
                myBool = myType.IsValueType
                Console.WriteLine(ControlChars.Cr + "Is {0} a value type? {1}.", myType.FullName, myBool.ToString())
            Catch e As Exception
                Console.WriteLine(ControlChars.Cr + "An exception occurred: {0}", e.Message.ToString())
            End Try
        End Sub 'Main
    End Class '[MyClass]
End Namespace 'SystemType

using System;
namespace SystemType
{
    public class MyClass
    {
        // Declare an enum type.
        enum MyEnum
        {
            One,
            Two
        }
        public static void Main(string []args)
        {
            try
            {
                bool myBool = false;
                MyEnum myTestEnum = MyEnum.One;
                // Get the type of myTestEnum.
                Type myType = myTestEnum.GetType();
                // Get the IsValueType property of the myTestEnum
                // variable.
                myBool = myType.IsValueType;
                Console.WriteLine("\nIs {0} a value type? {1}.", myType.FullName, myBool.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine("\nAn exception occurred: {0}", e.Message);
            }
        }
    }
}

using namespace System;

// Declare an enum type.
enum class MyEnum
{
   One, Two
};

int main()
{
   try
   {
      bool myBool = false;
      MyEnum myTestEnum = MyEnum::One;

      // Get the type of myTestEnum.
      Type^ myType = myTestEnum.GetType();

      // Get the IsValueType property of the myTestEnum
      // variable.
      myBool = myType->IsValueType;
      Console::WriteLine( "\nIs {0} a value type? {1}.", myType->FullName, myBool );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "\nAn exception occurred: {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
TypeAttributes
IsClass
IsInterface
ValueType
IsValueTypeImpl


Type ..::.IsVisible 属性

Type
.
.
::
.
IsVisible 属性
Type 类

获取一个指示 Type 是否可由程序集之外的代码访问的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsVisible As Boolean
    Get
public bool IsVisible { get; }
public:
property bool IsVisible {
    bool get ();
}
member IsVisible : bool

属性值

类型： System Boolean
如果当前 Type 是公共类型或公共嵌套类型从而使所有封闭类型都是公共类型，则为 true；否则为 false.

使用此属性可以确定类型是否为组件程序集的公共接口的一部分。

下面的代码示例测试两个类，其中仅有一个类在程序集之外可见。

Imports System

Friend Class InternalOnly
    Public Class Nested
    End Class
End Class

Public Class Example
    Public Class Nested
    End Class

    Public Shared Sub Main()
        With GetType(InternalOnly.Nested)
            Console.WriteLine("Is the " & .FullName _
                & " class visible outside the assembly? " & .IsVisible)
        End With

        With GetType(Example.Nested)
            Console.WriteLine("Is the " & .FullName _
                & " class visible outside the assembly? " & .IsVisible)
        End With
    End Sub
End Class

' This example produces the following output:
'
'Is the InternalOnly+Nested class visible outside the assembly? False
'Is the Example+Nested class visible outside the assembly? True

using System;

internal class InternalOnly
{
    public class Nested {}
}

public class Example
{
    public class Nested {}

    public static void Main()
    {
        Type t = typeof(InternalOnly.Nested);
        Console.WriteLine(
            "Is the {0} class visible outside the assembly? {1}",
            t.FullName,
            t.IsVisible
        );

        t = typeof(Example.Nested);
        Console.WriteLine(
            "Is the {0} class visible outside the assembly? {1}",
            t.FullName,
            t.IsVisible
        );
    }
}

/* This example produces the following output:

Is the InternalOnly+Nested class visible outside the assembly? False
Is the Example+Nested class visible outside the assembly? True
 */

using namespace System;

private ref class InternalOnly
{
public:
    ref class Nested {};
};

public ref class Example
{
public:
    ref class Nested {};
};

// Entry point of example
int main()
{
    Type^ classType = InternalOnly::Nested::typeid;
    Console::WriteLine(
        "Is the {0} class visible outside the assembly? {1}",
        classType->FullName, classType->IsVisible);

    classType = Example::Nested::typeid;
    Console::WriteLine(
        "Is the {0} class visible outside the assembly? {1}",
        classType->FullName, classType->IsVisible);
}

/* This example produces the following output:

Is the InternalOnly+Nested class visible outside the assembly? False
Is the Example+Nested class visible outside the assembly? True
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间


Type ..::.MemberType 属性

Type
.
.
::
.
MemberType 属性
Type 类

获取一个指示此成员是类型还是嵌套类型的 MemberTypes 值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property MemberType As MemberTypes
    Get
public override MemberTypes MemberType { get; }
public:
virtual property MemberTypes MemberType {
    MemberTypes get () override;
}
abstract MemberType : MemberTypes
override MemberType : MemberTypes

属性值

类型： System.Reflection MemberTypes
一个 MemberTypes 值，指示此成员是类型还是嵌套类型。

实现

此属性重写 MemberInfo..::.MemberType。因此，在检查一组 MemberInfo 对象（例如 GetMembers 返回的数组）时，MemberType 属性将在给定的成员是嵌套类型时返回 MemberTypes..::.NestedType。 此属性重写 MemberInfo..::.MemberType。因此，在检查一组 MemberInfo 对象（例如 GetMembers 返回的数组）时，MemberType 属性将在给定的成员是嵌套类型时返回 MemberTypes..::.NestedType。

如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。 如果当前 Type 表示某种已构造的泛型类型，则此属性适用于从中构造此类型的泛型类型定义。例如，如果当前 Type 表示 MyGenericType<int>（在 Visual Basic 中为 MyGenericType(Of Integer)），则此属性的值由 MyGenericType<T> 确定。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性始终返回 MemberTypes..::.TypeInfo。

下面的代码示例将 MemberType 字段显示为 GetMember 方法的参数：

Dim others As MemberInfo() = t.GetMember(mi.Name, mi.MemberType, _
BindingFlags.Public Or BindingFlags.Static Or BindingFlags.NonPublic _
Or BindingFlags.Instance)

MemberInfo[] others = t.GetMember(mi.Name, mi.MemberType, BindingFlags.Public |
BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance);

array<MemberInfo^>^ others = t->GetMember( mi->Name, mi->MemberType,
   (BindingFlags)(BindingFlags::Public | BindingFlags::Static |
      BindingFlags::NonPublic | BindingFlags::Instance) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
MemberTypes


Type ..::.Module 属性

Type
.
.
::
.
Module 属性
Type 类

获取在其中定义当前 Type 的模块 (DLL)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property Module As Module
    Get
public abstract Module Module { get; }
public:
virtual property Module^ Module {
    Module^ get () abstract;
}
abstract Module : Module

属性值

类型： System.Reflection Module
在其中定义当前 Type 的模块。

实现

如果当前 Type 表示构造泛型类型，则此属性将返回在其中定义了该泛型类型定义的模块。例如，如果创建 MyGenericStack<int> 的实例，构造类型的 Module 属性将返回在其中定义 MyGenericStack<T> 的模块。 如果当前 Type 表示构造泛型类型，则此属性将返回在其中定义了该泛型类型定义的模块。例如，如果创建 MyGenericStack<int> 的实例，构造类型的 Module 属性将返回在其中定义 MyGenericStack<T> 的模块。

类似地，如果当前 Type 表示泛型参数 T，则此属性返回包含定义 T 的泛型类型的程序集。

下面的示例说明如何使用 Type 的 Namespace 和 Module 属性以及 ToString 方法。

Imports System
Imports Microsoft.VisualBasic
Namespace MyNamespace
    Class [MyClass]
    End Class '[MyClass]
End Namespace 'MyNamespace
Public Class Type_ToString_3
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyNamespace.MyClass)
            Console.WriteLine(ControlChars.NewLine + "Printing the details of {0}." + ControlChars.NewLine, myType)
            ' Get the namespace of the class Type_ToString_3.
            Console.WriteLine("Namespace: {0}.", myType.Namespace)
            ' Get the name of the module.
            Console.WriteLine("Module: {0}.", myType.Module)
            ' Get the fully qualified common language runtime namespace.
            Console.WriteLine("Fully qualified type: {0}.", myType.ToString())
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_ToString_3

using System;
namespace MyNamespace
{
    class MyClass
    {
    }
}
public class Type_ToString_3
{
    public static void Main()
    {
        try
        {
            Type myType = typeof(MyNamespace.MyClass);
            Console.WriteLine("\nPrinting the details of {0}.\n", myType);
            // Get the namespace of the class Type_ToString_3.
            Console.WriteLine("Namespace: {0}.", myType.Namespace);
            // Get the name of the module.
            Console.WriteLine("Module: {0}.", myType.Module);
            // Get the fully qualified common language runtime namespace.
            Console.WriteLine("Fully qualified type: {0}.", myType.ToString());
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message );
        }
    }
}

using namespace System;

namespace MyNamespace
{
   ref class MyClass{};

}

int main()
{
   try
   {
      Type^ myType = MyNamespace::MyClass::typeid;
      Console::WriteLine( "\nPrinting the details of {0}.\n", myType );

      // Get the namespace of the class MyClass.
      Console::WriteLine( "Namespace: {0}.", myType->Namespace );

      // Get the name of the module.
      Console::WriteLine( "Module: {0}.", myType->Module );

      // Get the fully qualified common language runtime namespace.
      Console::WriteLine( "Fully qualified type: {0}.", myType );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
Module


Type ..::.Namespace 属性

Type
.
.
::
.
Namespace 属性
Type 类

获取 Type 的命名空间。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property Namespace As String
    Get
public abstract string Namespace { get; }
public:
virtual property String^ Namespace {
    String^ get () abstract;
}
abstract Namespace : string

属性值

类型： System String
Type 的命名空间；如果当前实例没有命名空间或表示泛型参数，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

命名空间是一种逻辑上的设计时命名的简便方法，主要用于在应用程序中定义范围或在单层次结构中组织类和其他类型。从运行时的角度来看，不存在命名空间。 命名空间是一种逻辑上的设计时命名的简便方法，主要用于在应用程序中定义范围或在单层次结构中组织类和其他类型。从运行时的角度来看，不存在命名空间。

如果当前 Type 表示构造泛型类型，则此属性将返回包含泛型类型定义的命名空间。类似地，如果当前 Type 表示泛型参数 T，则此属性返回包含定义 T 的泛型类型定义的命名空间。 如果当前 Type 表示构造泛型类型，则此属性将返回包含泛型类型定义的命名空间。类似地，如果当前 Type 表示泛型参数 T，则此属性返回包含定义 T 的泛型类型定义的命名空间。

如果当前 Type 对象表示泛型参数，则此属性返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例说明如何使用 Type 的 Namespace 和 Module 属性以及 ToString 方法。

Imports System
Imports Microsoft.VisualBasic
Namespace MyNamespace
    Class [MyClass]
    End Class '[MyClass]
End Namespace 'MyNamespace
Public Class Type_ToString_3
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyNamespace.MyClass)
            Console.WriteLine(ControlChars.NewLine + "Printing the details of {0}." + ControlChars.NewLine, myType)
            ' Get the namespace of the class Type_ToString_3.
            Console.WriteLine("Namespace: {0}.", myType.Namespace)
            ' Get the name of the module.
            Console.WriteLine("Module: {0}.", myType.Module)
            ' Get the fully qualified common language runtime namespace.
            Console.WriteLine("Fully qualified type: {0}.", myType.ToString())
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message.ToString())
        End Try
    End Sub 'Main
End Class 'Type_ToString_3

using System;
namespace MyNamespace
{
    class MyClass
    {
    }
}
public class Type_ToString_3
{
    public static void Main()
    {
        try
        {
            Type myType = typeof(MyNamespace.MyClass);
            Console.WriteLine("\nPrinting the details of {0}.\n", myType);
            // Get the namespace of the class Type_ToString_3.
            Console.WriteLine("Namespace: {0}.", myType.Namespace);
            // Get the name of the module.
            Console.WriteLine("Module: {0}.", myType.Module);
            // Get the fully qualified common language runtime namespace.
            Console.WriteLine("Fully qualified type: {0}.", myType.ToString());
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message );
        }
    }
}

using namespace System;

namespace MyNamespace
{
   ref class MyClass{};

}

int main()
{
   try
   {
      Type^ myType = MyNamespace::MyClass::typeid;
      Console::WriteLine( "\nPrinting the details of {0}.\n", myType );

      // Get the namespace of the class MyClass.
      Console::WriteLine( "Namespace: {0}.", myType->Namespace );

      // Get the name of the module.
      Console::WriteLine( "Module: {0}.", myType->Module );

      // Get the fully qualified common language runtime namespace.
      Console::WriteLine( "Fully qualified type: {0}.", myType );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
String
FullName
AssemblyQualifiedName

其他资源

指定完全限定的类型名称


Type ..::.ReflectedType 属性

Type
.
.
::
.
ReflectedType 属性
Type 类

获取用于获取该成员的类对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property ReflectedType As Type
    Get
public override Type ReflectedType { get; }
public:
virtual property Type^ ReflectedType {
    Type^ get () override;
}
abstract ReflectedType : Type
override ReflectedType : Type

属性值

类型： System Type
Type 对象，通过它获取了该 MemberInfo 对象。

实现

对于 Type 对象，此属性的值与 DeclaringType 属性的值相同。

本示例显示派生类中某个方法的反射类型。尽管在 MyClassA 中声明了方法 m，但从 MyClassB 中获取其反射类型。 本示例显示派生类中某个方法的反射类型。尽管在 MyClassA 中声明了方法 m，但从 MyClassB 中获取其反射类型。

Imports System
Imports System.Reflection

Public MustInherit Class rtype

    Public MustInherit Class MyClassA
        Public MustOverride Function m() As Integer
    End Class

    Public MustInherit Class MyClassB
        Inherits MyClassA
    End Class

    Public Shared Sub Main()
        Console.WriteLine("Reflected type of m is {0}", _
           GetType(MyClassB).GetMethod("m").ReflectedType)
    End Sub
End Class

using System;
using System.Reflection;

public abstract class rtype
{
    public abstract class MyClassA
    {
        public abstract int m();
    }

    public abstract class MyClassB : MyClassA
    {
    }

    public static void Main(string[] args)
    {
        Console.WriteLine("Reflected type of m is {0}",
            typeof(MyClassB).GetMethod("m").ReflectedType);
    }
}

using namespace System;
using namespace System::Reflection;

public ref class rtype abstract
{
public:
   ref class MyClassA abstract
   {
   public:
      virtual int m() = 0;
   };

   ref class MyClassB abstract: public MyClassA{};
};

int main()
{
   Console::WriteLine( "Reflected type of m is {0}", rtype::MyClassB::typeid->GetMethod( "m" )->ReflectedType );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
MemberInfo
DeclaringType


Type ..::.StructLayoutAttribute 属性

Type
.
.
::
.
StructLayoutAttribute 属性
Type 类

获取一个描述当前类型的布局的 StructLayoutAttribute。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property StructLayoutAttribute As StructLayoutAttribute
    Get
public virtual StructLayoutAttribute StructLayoutAttribute { get; }
public:
virtual property StructLayoutAttribute^ StructLayoutAttribute {
    StructLayoutAttribute^ get ();
}
abstract StructLayoutAttribute : StructLayoutAttribute
override StructLayoutAttribute : StructLayoutAttribute

属性值

类型： System.Runtime.InteropServices StructLayoutAttribute
获取一个描述当前类型的大致布局特性的 StructLayoutAttribute。
异常 | 条件
NotSupportedException | 基类不支持所调用的方法。

StructLayoutAttribute 不是由 GetCustomAttributes 方法返回。应改为使用此属性来获取它。 StructLayoutAttribute 不是由 GetCustomAttributes 方法返回。应改为使用此属性来获取它。

下面的代码示例首先定义一个类、一个结构和一个具有特殊布局特性的结构（结构嵌套在类中）。然后该示例使用 StructLayoutAttribute 属性为每个类型获取一个 StructLayoutAttribute，并显示特性的属性。 下面的代码示例首先定义一个类、一个结构和一个具有特殊布局特性的结构（结构嵌套在类中）。然后该示例使用 StructLayoutAttribute 属性为每个类型获取一个 StructLayoutAttribute，并显示特性的属性。

Imports System
Imports System.Runtime.InteropServices

Public Class Example
    Public Shared Sub Main()
        DisplayLayoutAttribute(GetType(Example).StructLayoutAttribute)
        DisplayLayoutAttribute(GetType(Test1).StructLayoutAttribute)
        DisplayLayoutAttribute(GetType(Test2).StructLayoutAttribute)
    End Sub

    Private Shared Sub DisplayLayoutAttribute( _
        ByVal sla As StructLayoutAttribute)
        Console.WriteLine(vbCrLf & "CharSet: " & sla.CharSet.ToString() _
            & vbCrLf & "   Pack: " & sla.Pack.ToString() _
            & vbCrLf & "   Size: " & sla.Size.ToString() _
            & vbCrLf & "  Value: " & sla.Value.ToString())
    End Sub

    Public Structure Test1
        Public B1 As Byte
        Public S As Short
        Public B2 As Byte
    End Structure

    <StructLayout(LayoutKind.Explicit, Pack:=1)> _
    Public Structure Test2
        <FieldOffset(0)> Public B1 As Byte
        <FieldOffset(1)> Public S As Short
        <FieldOffset(3)> Public B2 As Byte
    End Structure
End Class

using System;
using System.Runtime.InteropServices;

public class Example
{
    public static void Main()
    {
        DisplayLayoutAttribute(typeof(Example).StructLayoutAttribute);
        DisplayLayoutAttribute(typeof(Test1).StructLayoutAttribute);
        DisplayLayoutAttribute(typeof(Test2).StructLayoutAttribute);
    }

    private static void DisplayLayoutAttribute(StructLayoutAttribute sla)
    {
        Console.WriteLine("\r\nCharSet: "+sla.CharSet.ToString()+"\r\n   Pack: "+sla.Pack.ToString()+"\r\n   Size: "+sla.Size.ToString()+"\r\n  Value: "+sla.Value.ToString());
    }
    public struct Test1
    {
        public byte B1;
        public short S;
        public byte B2;
    }
    [StructLayout(LayoutKind.Explicit, Pack=1)] public struct Test2
    {
        [FieldOffset(0)] public byte B1;
        [FieldOffset(1)] public short S;
        [FieldOffset(3)] public byte B2;
    }
}

using namespace System;
using namespace System::Runtime::InteropServices;
value struct Test1
{
public:
   Byte B1;
   short S;
   Byte B2;
};

[StructLayout(LayoutKind::Explicit,Pack=1)]
value struct Test2
{
public:

   [FieldOffset(0)]
   Byte B1;

   [FieldOffset(1)]
   short S;

   [FieldOffset(3)]
   Byte B2;
};

static void DisplayLayoutAttribute( StructLayoutAttribute^ sla )
{
   Console::WriteLine( L"\r\nCharSet: {0}\r\n   Pack: {1}\r\n   Size: {2}\r\n  Value: {3}", sla->CharSet, sla->Pack, sla->Size, sla->Value );
}

int main()
{
   DisplayLayoutAttribute( Test1::typeid->StructLayoutAttribute );
   return 0;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
StructLayoutAttribute


Type ..::.TypeHandle 属性

Type
.
.
::
.
TypeHandle 属性
Type 类

获取当前 Type 的句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property TypeHandle As RuntimeTypeHandle
    Get
public virtual RuntimeTypeHandle TypeHandle { get; }
public:
virtual property RuntimeTypeHandle TypeHandle {
    RuntimeTypeHandle get ();
}
abstract TypeHandle : RuntimeTypeHandle
override TypeHandle : RuntimeTypeHandle

属性值

类型： System RuntimeTypeHandle
当前 Type 的句柄。

实现

异常 | 条件
NotSupportedException | .NET Compact Framework 当前不支持此属性。

TypeHandle 封装指向表示类型的内部数据结构的指针。此句柄在进程的生存期内是唯一的。该句柄仅在从中获取它的应用程序域中有效。 TypeHandle 封装指向表示类型的内部数据结构的指针。此句柄在进程的生存期内是唯一的。该句柄仅在从中获取它的应用程序域中有效。 TypeHandle 封装指向表示类型的内部数据结构的指针。此句柄在进程的生存期内是唯一的。该句柄仅在从中获取它的应用程序域中有效。

下面的示例返回对应类型的句柄，将该句柄传递到从该句柄获取类型的方法并显示它。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Class [MyClass]
    Public myField As Integer = 10
End Class '[MyClass]
Class Type_TypeHandle
    Public Shared Sub Main()
        Try
            Dim [myClass] As New [MyClass]()

            ' Get the type of MyClass.
            Dim myClassType As Type = [myClass].GetType()

            ' Get the runtime handle of MyClass.
            Dim myClassHandle As RuntimeTypeHandle = myClassType.TypeHandle

            DisplayTypeHandle(myClassHandle)
        Catch e As Exception
            Console.WriteLine("Exception: {0}", e.Message.ToString())
        End Try
    End Sub 'Main

    Public Shared Sub DisplayTypeHandle(ByVal myTypeHandle As RuntimeTypeHandle)
        ' Get the type from the handle.
        Dim myType As Type = Type.GetTypeFromHandle(myTypeHandle)
        ' Display the type.
        Console.WriteLine(ControlChars.NewLine + "Displaying the type from the handle:" + ControlChars.NewLine)
        Console.WriteLine("The type is {0}.", myType.ToString())
    End Sub 'DisplayTypeHandle
End Class 'Type_TypeHandle

using System;
using System.Reflection;
class MyClass
{
    public int myField = 10;
}

class Type_TypeHandle
{
    public static void Main()
    {
        try
        {
            MyClass myClass = new MyClass();

            // Get the type of MyClass.
            Type myClassType = myClass.GetType();

            // Get the runtime handle of MyClass.
            RuntimeTypeHandle myClassHandle = myClassType.TypeHandle;

            DisplayTypeHandle(myClassHandle);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: {0}", e.Message );
        }
    }

    public static void DisplayTypeHandle(RuntimeTypeHandle myTypeHandle)
    {
        // Get the type from the handle.
        Type myType = Type.GetTypeFromHandle(myTypeHandle);
        // Display the type.
        Console.WriteLine("\nDisplaying the type from the handle:\n");
        Console.WriteLine("The type is {0}.", myType.ToString());
    }
}

using namespace System;
using namespace System::Reflection;
ref class MyClass
{
public:
   int myField;
};

void DisplayTypeHandle( RuntimeTypeHandle myTypeHandle )
{

   // Get the type from the handle.
   Type^ myType = Type::GetTypeFromHandle( myTypeHandle );

   // Display the type.
   Console::WriteLine( "\nDisplaying the type from the handle:\n" );
   Console::WriteLine( "The type is {0}.", myType );
}

int main()
{
   try
   {
      MyClass^ myClass = gcnew MyClass;

      // Get the type of MyClass.
      Type^ myClassType = myClass->GetType();

      // Get the runtime handle of MyClass.
      RuntimeTypeHandle myClassHandle = myClassType->TypeHandle;
      DisplayTypeHandle( myClassHandle );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
RuntimeTypeHandle
GetTypeHandle
GetTypeFromHandle


Type ..::.TypeInitializer 属性

Type
.
.
::
.
TypeInitializer 属性
Type 类

获取 Type 的初始值设定项。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public ReadOnly Property TypeInitializer As ConstructorInfo
    Get
[ComVisibleAttribute(true)]
public ConstructorInfo TypeInitializer { get; }
[ComVisibleAttribute(true)]
public:
virtual property ConstructorInfo^ TypeInitializer {
    ConstructorInfo^ get () sealed;
}
[<ComVisibleAttribute(true)>]
abstract TypeInitializer : ConstructorInfo
[<ComVisibleAttribute(true)>]
override TypeInitializer : ConstructorInfo

属性值

类型： System.Reflection ConstructorInfo
包含 Type 的类构造函数的名称的 ConstructorInfo。

实现

类初始值设定项还通过 FindMembers 方法可用，或通过接受 BindingFlags 作为参数的 GetMember、GetMembers、GetConstructor 和 GetConstructors 方法的重载方法可用。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数，则此属性返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Type 类
Type 成员
System 命名空间
ConstructorInfo


Type ..::.UnderlyingSystemType 属性

Type
.
.
::
.
UnderlyingSystemType 属性
Type 类

指示表示该类型的公共语言运行时提供的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public MustOverride ReadOnly Property UnderlyingSystemType As Type
    Get
public abstract Type UnderlyingSystemType { get; }
public:
virtual property Type^ UnderlyingSystemType {
    Type^ get () abstract;
}
abstract UnderlyingSystemType : Type

属性值

类型： System Type
Type 的基础系统类型。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Type 类
Type 成员
System 命名空间
BaseType


TypeAccessException 类

TypeAccessException 类
成员

当方法尝试使用它无权访问的类型时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
Public Class TypeAccessException _
    Inherits TypeLoadException
[SerializableAttribute]
public class TypeAccessException : TypeLoadException
[SerializableAttribute]
public ref class TypeAccessException : public TypeLoadException
[<SerializableAttribute>]
type TypeAccessException =
    class
        inherit TypeLoadException
    end

当方法尝试将对象强制转换为从该方法不可访问的类型时，引发 TypeAccessException。例如，匿名承载的动态方法不能访问安全关键类型，因为该方法是透明的。如果方法包含将对象强制转换为安全关键类型或强制转换为具有安全关键类型作为其类型参数之一的泛型类型的 OpCodes..::.Castclass 指令，则通过 JIT 编译器引发 TypeAccessException。 当方法尝试将对象强制转换为从该方法不可访问的类型时，引发 TypeAccessException。例如，匿名承载的动态方法不能访问安全关键类型，因为该方法是透明的。如果方法包含将对象强制转换为安全关键类型或强制转换为具有安全关键类型作为其类型参数之一的泛型类型的 OpCodes..::.Castclass 指令，则通过 JIT 编译器引发 TypeAccessException。 当方法尝试将对象强制转换为从该方法不可访问的类型时，引发 TypeAccessException。例如，匿名承载的动态方法不能访问安全关键类型，因为该方法是透明的。如果方法包含将对象强制转换为安全关键类型或强制转换为具有安全关键类型作为其类型参数之一的泛型类型的 OpCodes..::.Castclass 指令，则通过 JIT 编译器引发 TypeAccessException。

同样，为使用另一个程序集中的内部类型的动态方法引发 TypeAccessException。方法不一定具有其包含类型、返回类型或某一个参数类型的访问权限。 同样，为使用另一个程序集中的内部类型的动态方法引发 TypeAccessException。方法不一定具有其包含类型、返回类型或某一个参数类型的访问权限。

System System..::.TypeAccessExceptionTypeAccessException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TypeAccessException 成员
System 命名空间


TypeAccessException 成员

TypeAccessException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeAccessException 类

当方法尝试使用它无权访问的类型时引发的异常。

TypeAccessException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TypeAccessException 类
System 命名空间


TypeAccessException 构造函数

TypeAccessException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeAccessException 类

初始化 TypeAccessException 类的新实例。

名称 说明
页首

参考

TypeAccessException 类
TypeAccessException 成员
System 命名空间


TypeAccessException 构造函数

TypeAccessException 构造函数
TypeAccessException 类

使用由系统提供的用来描述错误的消息初始化 TypeAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public TypeAccessException()
public:
TypeAccessException()
new : unit -> TypeAccessException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，如“尝试访问该类型时失败”。此消息考虑了当前系统区域性。

下表显示 InsufficientMemoryException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TypeAccessException 类
TypeAccessException 成员
TypeAccessException 重载
System 命名空间

其他资源

处理和引发异常


TypeAccessException 构造函数 (String)

TypeAccessException 构造函数 (String)
TypeAccessException 类

使用指定的错误描述消息初始化 TypeAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public TypeAccessException(
    string message
)
public:
TypeAccessException(
    String^ message
)
new :
        message:string -> TypeAccessException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方必须确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方必须确保此字符串已针对当前系统区域性进行了本地化。

下表显示 TypeAccessException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TypeAccessException 类
TypeAccessException 成员
TypeAccessException 重载
System 命名空间

其他资源

处理和引发异常


TypeAccessException 构造函数 (SerializationInfo, StreamingContext)

TypeAccessException 构造函数 (SerializationInfo, StreamingContext)
TypeAccessException 类

用序列化数据初始化 TypeAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected TypeAccessException(
    SerializationInfo info,
    StreamingContext context
)
protected:
TypeAccessException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> TypeAccessException

参数

info
类型： System.Runtime.Serialization SerializationInfo
包含序列化数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见XML and SOAP Serialization。 在反序列化过程中调用此构造函数来重建通过流传输的异常对象。有关更多信息，请参见XML and SOAP Serialization。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TypeAccessException 类
TypeAccessException 成员
TypeAccessException 重载
System 命名空间

其他资源

XML and SOAP Serialization


TypeAccessException 构造函数 (String, Exception)

TypeAccessException 构造函数 (String, Exception)
TypeAccessException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 TypeAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public TypeAccessException(
    string message,
    Exception inner
)
public:
TypeAccessException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> TypeAccessException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方必须确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方必须确保此字符串已针对当前系统区域性进行了本地化。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 TypeAccessException 实例的初始属性值。

Property | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

TypeAccessException 类
TypeAccessException 成员
TypeAccessException 重载
System 命名空间

其他资源

处理和引发异常


TypeAccessException 方法

TypeAccessException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeAccessException 类

TypeAccessException 类型公开以下成员。

名称 说明
页首

参考

TypeAccessException 类
System 命名空间


TypeAccessException 属性

TypeAccessException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeAccessException 类

TypeAccessException 类型公开以下成员。

名称 说明
页首

参考

TypeAccessException 类
System 命名空间


TypeAccessException 事件

TypeAccessException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeAccessException 类

TypeAccessException 类型公开以下成员。

名称 说明
页首

参考

TypeAccessException 类
System 命名空间


TypeCode 枚举

TypeCode 枚举

指定对象的类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration TypeCode
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum TypeCode
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class TypeCode
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type TypeCode
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Empty | 空引用。
由 XNA Framework 提供支持 | Object | 常规类型，表示不会由另一个 TypeCode 显式表示的任何引用或值类型。
由 XNA Framework 提供支持 | DBNull | 数据库空（列）值。
由 XNA Framework 提供支持 | Boolean | 简单类型，表示 true 或 false 的布尔值。
由 XNA Framework 提供支持 | Char | 整型，表示值介于 0 到 65535 之间的无符号 16 位整数。Char 类型的可能值集与 Unicode 字符集相对应。 整型，表示值介于 0 到 65535 之间的无符号 16 位整数。Char 类型的可能值集与 Unicode 字符集相对应。
由 XNA Framework 提供支持 | SByte | 整型，表示值介于 -128 到 127 之间的有符号 8 位整数。
由 XNA Framework 提供支持 | Byte | 整型，表示值介于 0 到 255 之间的无符号 8 位整数。
由 XNA Framework 提供支持 | Int16 | 整型，表示值介于 -32768 到 32767 之间的有符号 16 位整数。
由 XNA Framework 提供支持 | UInt16 | 整型，表示值介于 0 到 65535 之间的无符号 16 位整数。
由 XNA Framework 提供支持 | Int32 | 整型，表示值介于 -2147483648 到 2147483647 之间的有符号 32 位整数。
由 XNA Framework 提供支持 | UInt32 | 整型，表示值介于 0 到 4294967295 之间的无符号 32 位整数。
由 XNA Framework 提供支持 | Int64 | 整型，表示值介于 -9223372036854775808 到 9223372036854775807 之间的有符号 64 位整数。
由 XNA Framework 提供支持 | UInt64 | 整型，表示值介于 0 到 18446744073709551615 之间的无符号 64 位整数。
由 XNA Framework 提供支持 | Single | 浮点型，表示从大约 1.5 x 10 -45 到 3.4 x 10 38 且精度为 7 位的值。
由 XNA Framework 提供支持 | Double | 浮点型，表示从大约 5.0 x 10 -324 到 1.7 x 10 308 且精度为 15 到 16 位的值。
由 XNA Framework 提供支持 | Decimal | 简单类型，表示从 1.0 x 10 -28 到大约 7.9 x 10 28 且有效位数为 28 到 29 位的值。
由 XNA Framework 提供支持 | DateTime | 表示一个日期和时间值的类型。
由 XNA Framework 提供支持 | String | 密封类类型，表示 Unicode 字符串。

在实现 IConvertible 接口的类上调用 GetTypeCode 方法，以获得该类的实例的类型代码。

其他情况下，调用对象的 GetType 方法，以获得其 Type 对象，然后调用 Type 对象的 GetTypeCode 方法以获得该对象的类型代码。

下面的代码示例说明了如何使用 TypeCode 枚举。在 WriteObjectInfo 方法内的决策块中，将检查 Object 参数的 TypeCode，并向控制台写入适当的消息。 下面的代码示例说明了如何使用 TypeCode 枚举。在 WriteObjectInfo 方法内的决策块中，将检查 Object 参数的 TypeCode，并向控制台写入适当的消息。

Sub WriteObjectInfo(ByVal testObject As Object)
    Dim typeCode As TypeCode = Type.GetTypeCode(testObject.GetType())

    Select Case typeCode
        Case typeCode.Boolean
            Console.WriteLine("Boolean: {0}", testObject)

        Case typeCode.Double
            Console.WriteLine("Double: {0}", testObject)

        Case Else
            Console.WriteLine("{0}: {1}", typeCode.ToString(), testObject)
    End Select
End Sub

static void WriteObjectInfo(object testObject)
{
    TypeCode    typeCode = Type.GetTypeCode( testObject.GetType() );

    switch( typeCode )
    {
        case TypeCode.Boolean:
            Console.WriteLine("Boolean: {0}", testObject);
            break;

        case TypeCode.Double:
            Console.WriteLine("Double: {0}", testObject);
            break;

        default:
            Console.WriteLine("{0}: {1}", typeCode.ToString(), testObject);
            break;
    }
}

void WriteObjectInfo( Object^ testObject )
{
   TypeCode typeCode = Type::GetTypeCode( testObject->GetType() );
   switch ( typeCode )
   {
      case TypeCode::Boolean:
         Console::WriteLine( "Boolean: {0}", testObject );
         break;

      case TypeCode::Double:
         Console::WriteLine( "Double: {0}", testObject );
         break;

      default:
         Console::WriteLine( "{0}: {1}", typeCode, testObject );
         break;
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


TypedReference 结构

TypedReference 结构
成员

描述既包含指向某位置的托管指针，也包含该位置可能存储的类型的运行时表示形式的对象。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<CLSCompliantAttribute(False)> _
Public Structure TypedReference
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public struct TypedReference
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public value class TypedReference
[<SealedAttribute>]
[<ComVisibleAttribute(true)>]
[<CLSCompliantAttribute(false)>]
type TypedReference =  struct end

类型引用是用于 varargs 和其他支持的类型/值组合。TypedReference 是可用于参数和局部变量的内置值类型。 类型引用是用于 varargs 和其他支持的类型/值组合。TypedReference 是可用于参数和局部变量的内置值类型。

无法创建 TypedReference 对象数组。例如，下面的调用无效： 无法创建 TypedReference 对象数组。例如，下面的调用无效：

        Assembly.Load("mscorlib.dll").GetType("System.TypedReference[]")

        Assembly.Load("mscorlib.dll").GetType("System.TypedReference[]");

Assembly::Load("mscorlib.dll")->GetType("System.TypedReference[]");
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TypedReference 成员
System 命名空间


TypedReference 成员

TypedReference 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedReference 结构

描述既包含指向某位置的托管指针，也包含该位置可能存储的类型的运行时表示形式的对象。

TypedReference 类型公开以下成员。

名称 说明
页首

参考

TypedReference 结构
System 命名空间


TypedReference 方法

TypedReference 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedReference 结构

TypedReference 类型公开以下成员。

名称 说明
页首

参考

TypedReference 结构
System 命名空间


TypedReference ..::.Equals 方法

TypedReference
.
.
::
.
Equals 方法
TypedReference 结构

检查该对象是否等于指定对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    o As Object _
) As Boolean
public override bool Equals(
    Object o
)
public:
virtual bool Equals(
    Object^ o
) override
abstract Equals :
        o:Object -> bool
override Equals :
        o:Object -> bool

参数

o
类型： System Object
用于和当前对象进行比较的对象。

返回值

类型： System Boolean
如果该对象等于指定对象，则为 true；否则为 false。
异常 | 条件
NotSupportedException | 此方法未实现。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedReference 结构
TypedReference 成员
System 命名空间


TypedReference ..::.GetHashCode 方法

TypedReference
.
.
::
.
GetHashCode 方法
TypedReference 结构

返回该对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
该对象的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedReference 结构
TypedReference 成员
System 命名空间


TypedReference ..::.GetTargetType 方法

TypedReference
.
.
::
.
GetTargetType 方法
TypedReference 结构

返回指定 TypedReference 的目标类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function GetTargetType ( _
    value As TypedReference _
) As Type
public static Type GetTargetType(
    TypedReference value
)
public:
static Type^ GetTargetType(
    TypedReference value
)
static member GetTargetType :
        value:TypedReference -> Type

参数

value
类型： System TypedReference
要返回其目标类型的值。

返回值

类型： System Type
指定 TypedReference 的目标类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedReference 结构
TypedReference 成员
System 命名空间


TypedReference ..::.MakeTypedReference 方法

TypedReference
.
.
::
.
MakeTypedReference 方法
TypedReference 结构

为由指定对象和字段说明列表标识的字段生成 TypedReference。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function MakeTypedReference ( _
    target As Object, _
    flds As FieldInfo() _
) As TypedReference
[CLSCompliantAttribute(false)]
public static TypedReference MakeTypedReference(
    Object target,
    FieldInfo[] flds
)
[CLSCompliantAttribute(false)]
public:
static TypedReference MakeTypedReference(
    Object^ target,
    array<FieldInfo^>^ flds
)
[<CLSCompliantAttribute(false)>]
static member MakeTypedReference :
        target:Object *
        flds:FieldInfo[] -> TypedReference

参数

target
类型： System Object
包含由 flds 的第一个元素说明的字段的对象。
flds
类型：
array<
System.Reflection FieldInfo
>
[]
()
[]

字段说明列表，其中每个元素说明的字段均包含了由后续元素说明的字段。每个说明的字段都必须是值类型。字段说明必须是类型系统所提供的 RuntimeFieldInfo 对象。 字段说明列表，其中每个元素说明的字段均包含了由后续元素说明的字段。每个说明的字段都必须是值类型。字段说明必须是类型系统所提供的 RuntimeFieldInfo 对象。 字段说明列表，其中每个元素说明的字段均包含了由后续元素说明的字段。每个说明的字段都必须是值类型。字段说明必须是类型系统所提供的 RuntimeFieldInfo 对象。

返回值

类型： System TypedReference
由 flds 的最后一个元素说明的字段的 TypedReference。
异常 | 条件
ArgumentNullException | target 或 flds 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - flds 的一个元素为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | flds 数组没有元素。 - 或 - flds 的元素不是 RuntimeFieldInfo。 - 或 - flds 元素的 IsInitOnly 或 IsStatic 属性为 true。
MissingMemberException | 参数 target 不包含下面这样的元素所说明的字段：flds 的第一个元素；或者 flds 的这样一种元素：它说明了一个字段，而 flds 的后续元素说明的字段中不包含该字段。 - 或 - 由 flds 的元素说明的字段不是值类型。

MakeTypedReference 方法返回一些结束字段的类型化引用，其中 target 参数包含由 flds 的第一个元素说明的字段，由 flds 的第一个元素说明的字段包含由 flds 的第二个元素说明的字段，依此类推，直到达到结束字段。

有关运行时类型系统对象（如 RuntimeFieldInfo）的说明，请参见 反射中的运行时类型。

说明 说明

从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共成员。（请参见 反射的安全注意事项。） 从 .NET Framework 2.0 Service Pack 1 开始，如果已授予调用方带有 ReflectionPermissionFlag..::.RestrictedMemberAccess 标志的 ReflectionPermission，并且非公共成员的授予集限制为调用方的授予集或其子集，则此方法可用于访问非公共成员。（请参见 反射的安全注意事项。）

若要使用此功能，您的应用程序应面向 .NET Framework 3.5 版 或更高版本。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedReference 结构
TypedReference 成员
System 命名空间


TypedReference ..::.SetTypedReference 方法

TypedReference
.
.
::
.
SetTypedReference 方法
TypedReference 结构

将指定值转换为 TypedReference。不支持此方法。 将指定值转换为 TypedReference。不支持此方法。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Sub SetTypedReference ( _
    target As TypedReference, _
    value As Object _
)
[CLSCompliantAttribute(false)]
public static void SetTypedReference(
    TypedReference target,
    Object value
)
[CLSCompliantAttribute(false)]
public:
static void SetTypedReference(
    TypedReference target,
    Object^ value
)
[<CLSCompliantAttribute(false)>]
static member SetTypedReference :
        target:TypedReference *
        value:Object -> unit

参数

target
类型： System TypedReference
转换的目标。
value
类型： System Object
要转换的值。
异常 | 条件
NotSupportedException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedReference 结构
TypedReference 成员
System 命名空间


TypedReference ..::.TargetTypeToken 方法

TypedReference
.
.
::
.
TargetTypeToken 方法
TypedReference 结构

返回指定 TypedReference 的内部元数据类型句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TargetTypeToken ( _
    value As TypedReference _
) As RuntimeTypeHandle
public static RuntimeTypeHandle TargetTypeToken(
    TypedReference value
)
public:
static RuntimeTypeHandle TargetTypeToken(
    TypedReference value
)
static member TargetTypeToken :
        value:TypedReference -> RuntimeTypeHandle

参数

value
类型： System TypedReference
请求该类型句柄的 TypedReference。

返回值

类型： System RuntimeTypeHandle
指定 TypedReference 的内部元数据类型句柄。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedReference 结构
TypedReference 成员
System 命名空间


TypedReference ..::.ToObject 方法

TypedReference
.
.
::
.
ToObject 方法
TypedReference 结构

将指定 TypedReference 转换为 Object。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ToObject ( _
    value As TypedReference _
) As Object
public static Object ToObject(
    TypedReference value
)
public:
static Object^ ToObject(
    TypedReference value
)
static member ToObject :
        value:TypedReference -> Object

参数

value
类型： System TypedReference
要转换的 TypedReference。

返回值

类型： System Object
Object，转换自 TypedReference。

这可能是装箱操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedReference 结构
TypedReference 成员
System 命名空间


TypeInitializationException 类

TypeInitializationException 类
成员

作为由类初始值设定项引发的异常周围的包装引发的异常。此类不能被继承。 作为由类初始值设定项引发的异常周围的包装引发的异常。此类不能被继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class TypeInitializationException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class TypeInitializationException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class TypeInitializationException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type TypeInitializationException =
    class
        inherit SystemException
    end

当类初始值设定项不能初始化类型时，将创建 TypeInitializationException 并向其传递由该类型的类初始值设定项引发的异常引用。TypeInitializationException 的 InnerException 属性包含基础异常。 当类初始值设定项不能初始化类型时，将创建 TypeInitializationException 并向其传递由该类型的类初始值设定项引发的异常引用。TypeInitializationException 的 InnerException 属性包含基础异常。

TypeInitializationException 使用值为 0x80131534 的 HRESULT COR_E_TYPEINITIALIZATION。

有关 TypeInitializationException 实例的初始属性值列表，请参见 TypeInitializationException 构造函数。

System System..::.TypeInitializationExceptionTypeInitializationException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeInitializationException 成员
System 命名空间
Exception

其他资源

处理和引发异常


TypeInitializationException 成员

TypeInitializationException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeInitializationException 类

作为由类初始值设定项引发的异常周围的包装引发的异常。此类不能被继承。 作为由类初始值设定项引发的异常周围的包装引发的异常。此类不能被继承。

TypeInitializationException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TypeInitializationException 类
System 命名空间


TypeInitializationException 构造函数

TypeInitializationException 构造函数
TypeInitializationException 类

用默认错误消息、指定的类型名称和对内部异常（为该异常的根源）的引用来初始化 TypeInitializationException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    fullTypeName As String, _
    innerException As Exception _
)
public TypeInitializationException(
    string fullTypeName,
    Exception innerException
)
public:
TypeInitializationException(
    String^ fullTypeName,
    Exception^ innerException
)
new :
        fullTypeName:string *
        innerException:Exception -> TypeInitializationException

参数

fullTypeName
类型： System String
未能初始化类型的完全限定名。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 TypeInitializationException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 本地化的错误信息字符串。
TypeName | 类型名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeInitializationException 类
TypeInitializationException 成员
System 命名空间
Exception

其他资源

处理和引发异常


TypeInitializationException 方法

TypeInitializationException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeInitializationException 类

TypeInitializationException 类型公开以下成员。

名称 说明
页首

参考

TypeInitializationException 类
System 命名空间


TypeInitializationException ..::.GetObjectData 方法

TypeInitializationException
.
.
::
.
GetObjectData 方法
TypeInitializationException 类

设置带有文件名和附加异常信息的 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

实现

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeInitializationException 类
TypeInitializationException 成员
System 命名空间


TypeInitializationException 属性

TypeInitializationException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeInitializationException 类

TypeInitializationException 类型公开以下成员。

名称 说明
页首

参考

TypeInitializationException 类
System 命名空间


TypeInitializationException ..::.TypeName 属性

TypeInitializationException
.
.
::
.
TypeName 属性
TypeInitializationException 类

获取未能初始化类型的完全限定名。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TypeName As String
    Get
public string TypeName { get; }
public:
property String^ TypeName {
    String^ get ();
}
member TypeName : string

属性值

类型： System String
未能初始化类型的完全限定名。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeInitializationException 类
TypeInitializationException 成员
System 命名空间


TypeInitializationException 事件

TypeInitializationException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeInitializationException 类

TypeInitializationException 类型公开以下成员。

名称 说明
页首

参考

TypeInitializationException 类
System 命名空间


TypeLoadException 类

TypeLoadException 类
成员

类型加载失败发生时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class TypeLoadException _
    Inherits SystemException _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class TypeLoadException : SystemException,
    ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class TypeLoadException : public SystemException,
    ISerializable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type TypeLoadException =
    class
        inherit SystemException
        interface ISerializable
    end

当公共语言运行时无法找到程序集、程序集内的类型或者无法加载类型时引发 TypeLoadException。

TypeLoadException 使用值为 0x80131522 的 HRESULT COR_E_TYPELOAD。

有关 TypeLoadException 实例的初始属性值列表，请参见 TypeLoadException 构造函数。

System System..::.TypeLoadExceptionTypeLoadException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TypeLoadException 成员
System 命名空间
Exception

其他资源

处理和引发异常


TypeLoadException 成员

TypeLoadException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeLoadException 类

类型加载失败发生时引发的异常。

TypeLoadException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TypeLoadException 类
System 命名空间


TypeLoadException 构造函数

TypeLoadException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeLoadException 类

初始化 TypeLoadException 类的一个新实例。

名称 说明
页首

参考

TypeLoadException 类
TypeLoadException 成员
System 命名空间


TypeLoadException 构造函数

TypeLoadException 构造函数
TypeLoadException 类

初始化 TypeLoadException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public TypeLoadException()
public:
TypeLoadException()
new : unit -> TypeLoadException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“加载类型时出现错误”。此消息将考虑当前系统区域性。

下表显示 TypeLoadException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误信息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TypeLoadException 类
TypeLoadException 成员
TypeLoadException 重载
System 命名空间


TypeLoadException 构造函数 (String)

TypeLoadException 构造函数 (String)
TypeLoadException 类

使用指定错误消息初始化 TypeLoadException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public TypeLoadException(
    string message
)
public:
TypeLoadException(
    String^ message
)
new :
        message:string -> TypeLoadException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 TypeLoadException 实例的初始属性值。

Property | 值
InnerException | 空引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

下面的代码示例演示了 TypeLoadException(String) 构造函数。它包含一个方法，该方法将使用自定义的消息生成 TypeLoadException，并将此错误消息显示到控制台上。 下面的代码示例演示了 TypeLoadException(String) 构造函数。它包含一个方法，该方法将使用自定义的消息生成 TypeLoadException，并将此错误消息显示到控制台上。

Imports System

Public Class TypeLoadException_Constructor2
   Public Shared Sub Main()
      Console.WriteLine("This program throws an exception upon successful run.")
      Console.WriteLine("Generating TypeLoadException with custom message...")
      Try
         ' Generate a new instance of TypeLoadException.
         TypeLoadExceptionDemoClass.GenerateException()
      Catch e As TypeLoadException
         Console.WriteLine(("TypeLoadException: " + ControlChars.Cr + ControlChars.Tab + "Error Message = " + e.Message))
      Catch e As Exception
         Console.WriteLine(("Exception: " + ControlChars.Cr + ControlChars.Tab + "Error Message = " + e.Message))
      End Try
   End Sub 'Main
End Class 'TypeLoadException_Constructor2

Class TypeLoadExceptionDemoClass
   Public Shared Function GenerateException() As Boolean
      ' Throw a TypeLoadException with custom defined message.
      Throw New TypeLoadException("This is a custom generated TypeLoadException error message")
   End Function 'GenerateException
End Class 'TypeLoadExceptionDemoClass

using System;

public class TypeLoadException_Constructor2
{
   public static void Main()
   {
      Console.WriteLine("This program throws an exception upon successful run.");
      Console.WriteLine("Generating TypeLoadException with custom message...");
      try
      {
         // Generate a new instance of TypeLoadException.
         TypeLoadExceptionDemoClass.GenerateException();
      }
      catch (TypeLoadException e)
      {
         Console.WriteLine ("TypeLoadException: \n\tError Message = " + e.Message);
      }
      catch (Exception e)
      {
         Console.WriteLine ("Exception: \n\tError Message = " + e.Message);
      }
   }
}

class TypeLoadExceptionDemoClass
{
   public static bool GenerateException()
   {
      // Throw a TypeLoadException with custom defined message.
      throw new TypeLoadException("This is a custom generated TypeLoadException error message");
   }
}

using namespace System;
class TypeLoadExceptionDemoClass
{
public:
   static bool GenerateException()
   {

      // Throw a TypeLoadException with custom defined message.
      throw gcnew TypeLoadException( "This is a custom generated TypeLoadException error message" );
   }

};

int main()
{
   Console::WriteLine( "This program throws an exception upon successful run." );
   Console::WriteLine( "Generating TypeLoadException with custom message..." );
   try
   {

      // Generate a new instance of TypeLoadException.
      TypeLoadExceptionDemoClass::GenerateException();
   }
   catch ( TypeLoadException^ e )
   {
      Console::WriteLine( "TypeLoadException: \n\tError Message = {0}", e->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: \n\tError Message = {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TypeLoadException 类
TypeLoadException 成员
TypeLoadException 重载
System 命名空间


TypeLoadException 构造函数 (SerializationInfo, StreamingContext)

TypeLoadException 构造函数 (SerializationInfo, StreamingContext)
TypeLoadException 类

用序列化数据初始化 TypeLoadException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected TypeLoadException(
    SerializationInfo info,
    StreamingContext context
)
protected:
TypeLoadException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> TypeLoadException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。
异常 | 条件
ArgumentNullException | info 对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

下面的示例生成一个异常，并将异常数据序列化为一个文件，然后重新设立该异常。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例生成一个异常，并将异常数据序列化为一个文件，然后重新设立该异常。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例生成一个异常，并将异常数据序列化为一个文件，然后重新设立该异常。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。

Imports System
Imports System.Reflection
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Imports System.Security.Permissions
Imports System.IO

Class GetObjectDataDemo

   Public Shared Sub Main()
      ' Get a reference to the assembly mscorlib.dll, which is always
      ' loaded. (System.String is defined in mscorlib.)
      Dim tString As Type = GetType(String)
      Dim mscorlib As [Assembly] = tString.Assembly

      Try
         Console.WriteLine("Attempting to load a type not present in the assembly 'mscorlib'")
         ' This loading of invalid type raises a TypeLoadException
         Dim myType As Type = mscorlib.GetType("System.NonExistentType", True)
      Catch
         ' Serialize the exception to disk and reconstitute it.
         Dim ErrorDatetime as System.DateTime = DateTime.Now
         Console.WriteLine("A TypeLoadException has been raised.")

         ' Create MyTypeLoadException instance with current time.
         Dim myException As new MyTypeLoadException(ErrorDatetime)
         Dim myFormatter as IFormatter  = new SoapFormatter()
         Dim myFileStream as Stream
         myFileStream = New FileStream("typeload.xml", FileMode.Create, FileAccess.Write, FileShare.None)
         Console.WriteLine("Serializing the TypeLoadException with DateTime as " _
             & ErrorDatetime.ToString())

         ' Serialize the MyTypeLoadException instance to a file.
         myFormatter.Serialize(myFileStream, myException)
         myFileStream.Close()

         Console.WriteLine("Deserializing the Exception.")
         myFileStream = New FileStream("typeload.xml", FileMode.Open, FileAccess.Read, FileShare.None)

         ' Deserialize and reconstitute the instance from file.
         myException = CType(myFormatter.Deserialize(myFileStream), MyTypeLoadException)
         myFileStream.Close()
         Console.WriteLine("Deserialized exception has ErrorDateTime = " + myException.ErrorDateTime.ToString())
      End Try
   End Sub 'Main
End Class

' This class overrides the GetObjectData method and initializes
' its data with current time.
<Serializable()> _
Public Class MyTypeLoadException
   Inherits TypeLoadException

   Private _errorDateTime As System.DateTime = DateTime.Now
   Public ReadOnly Property ErrorDateTime As DateTime
      Get
         Return _errorDateTime
      End Get
   End Property

   Public Sub New(myDateTime As DateTime)
      _errorDateTime = myDateTime
   End Sub 'New

   Protected Sub New(sInfo As SerializationInfo, sContext As StreamingContext)
      MyBase.New(sInfo, sContext)
      ' Reconstitute the deserialized information into the instance.
      _errorDateTime = sInfo.GetDateTime("ErrorDate")
   End Sub 'New

   ' GetObjectData overrides must always have a demand for SerializationFormatter.
   <SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter:=true)> _
   Public Overrides Sub GetObjectData(sInfo As SerializationInfo, sContext As StreamingContext)
      MyBase.GetObjectData(sInfo, sContext)
      ' Add a value to the Serialization information.
      sInfo.AddValue("ErrorDate", ErrorDateTime)
   End Sub 'GetObjectData

End Class 'MyTypeLoadExceptionChild

using System;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.Security.Permissions;
using System.IO;

class GetObjectDataDemo
{
   public static void Main()
   {
      // Get a reference to the assembly mscorlib.dll, which is always
      // loaded. (System.String is defined in mscorlib.)
      Assembly mscorlib = typeof(string).Assembly;

      try
      {
         Console.WriteLine ("Attempting to load a type not present in the assembly 'mscorlib'");
         // This loading of invalid type raises a TypeLoadException
         Type myType = mscorlib.GetType("System.NonExistentType", true);
      }
      catch (TypeLoadException)
      {
         // Serialize the exception to disk and reconstitute it.
         System.DateTime ErrorDatetime = DateTime.Now;
         Console.WriteLine("A TypeLoadException has been raised.");

         // Create MyTypeLoadException instance with current time.
         MyTypeLoadException myException = new MyTypeLoadException(ErrorDatetime);
         IFormatter myFormatter = new SoapFormatter();
         Stream myFileStream = new FileStream("typeload.xml", FileMode.Create, FileAccess.Write, FileShare.None);
         Console.WriteLine("Serializing the TypeLoadException with DateTime as " + ErrorDatetime);

         // Serialize the MyTypeLoadException instance to a file.
         myFormatter.Serialize(myFileStream, myException);
         myFileStream.Close();

         Console.WriteLine("Deserializing the Exception.");
         myFileStream = new FileStream("typeload.xml", FileMode.Open, FileAccess.Read, FileShare.None);

         // Deserialize and reconstitute the instance from file.
         myException = (MyTypeLoadException) myFormatter.Deserialize(myFileStream);
         myFileStream.Close();
         Console.WriteLine("Deserialized exception has ErrorDateTime = " + myException.ErrorDateTime);
      }
   }
}

// This class overrides the GetObjectData method and initializes
// its data with current time.

[Serializable]
public class MyTypeLoadException : TypeLoadException
{
   private System.DateTime _errorDateTime = DateTime.Now;
   public DateTime ErrorDateTime { get { return _errorDateTime; }}

   public MyTypeLoadException(DateTime myDateTime)
   {
      _errorDateTime = myDateTime;
   }

   protected MyTypeLoadException(SerializationInfo sInfo, StreamingContext sContext)
       : base(sInfo, sContext)
   {
      // Reconstitute the deserialized information into the instance.
      _errorDateTime = sInfo.GetDateTime("ErrorDate");
   }

   // GetObjectData overrides must always have a demand for SerializationFormatter.
   [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter=true)]
   public override void GetObjectData(SerializationInfo sInfo, StreamingContext sContext)
   {
      base.GetObjectData(sInfo, sContext);
      // Add a value to the Serialization information.
      sInfo.AddValue("ErrorDate", ErrorDateTime);
   }
}

#using <System.Runtime.Serialization.Formatters.Soap.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Soap;
using namespace System::IO;

// This class overrides the GetObjectData method and initializes
// its data with current time.

[Serializable]
public ref class MyTypeLoadExceptionChild: public TypeLoadException
{
public:
   System::DateTime ErrorDateTime;
   MyTypeLoadExceptionChild()
   {
      ErrorDateTime = DateTime::Now;
   }

   MyTypeLoadExceptionChild( DateTime myDateTime )
   {
      ErrorDateTime = myDateTime;
   }

protected:
   MyTypeLoadExceptionChild( SerializationInfo^ sInfo, StreamingContext * sContext )
   {

      // Reconstitute the deserialized information into the instance.
      ErrorDateTime = sInfo->GetDateTime( "ErrorDate" );
   }

public:
   void GetObjectData( SerializationInfo^ sInfo, StreamingContext * sContext )
   {

      // Add a value to the Serialization information.
      sInfo->AddValue( "ErrorDate", ErrorDateTime );
   }

};

int main()
{

   // Load the mscorlib assembly and get a reference to it.
   // You must supply the fully qualified assembly name for mscorlib.dll here.
   Assembly^ myAssembly = Assembly::Load( "Assembly text name, Version, Culture, PublicKeyToken" );
   try
   {
      Console::WriteLine( "Attempting to load a type not present in the assembly 'mscorlib'" );

      // This loading of invalid type raises a TypeLoadException
      Type^ myType = myAssembly->GetType( "System::NonExistentType", true );
   }
   catch ( TypeLoadException^ )
   {

      // Serialize the exception to disk and reconstitute it back again.
      try
      {
         System::DateTime ErrorDatetime = DateTime::Now;
         Console::WriteLine( "A TypeLoadException has been raised." );

         // Create MyTypeLoadException instance with current time.
         MyTypeLoadExceptionChild^ myTypeLoadExceptionChild = gcnew MyTypeLoadExceptionChild( ErrorDatetime );
         IFormatter^ myFormatter = gcnew SoapFormatter;
         Stream^ myFileStream = gcnew FileStream( "typeload.xml",FileMode::Create,FileAccess::Write,FileShare::None );
         Console::WriteLine( "Serializing the TypeLoadException with DateTime as {0}", ErrorDatetime );

         // Serialize the MyTypeLoadException instance to a file.
         myFormatter->Serialize( myFileStream, myTypeLoadExceptionChild );
         myFileStream->Close();
         Console::WriteLine( "Deserializing the Exception." );
         myFileStream = gcnew FileStream( "typeload.xml",FileMode::Open,FileAccess::Read,FileShare::None );

         // Deserialize and reconstitute the instance from file.
         myTypeLoadExceptionChild = safe_cast<MyTypeLoadExceptionChild^>(myFormatter->Deserialize( myFileStream ));
         myFileStream->Close();
         Console::WriteLine( "Deserialized exception has ErrorDateTime = {0}", myTypeLoadExceptionChild->ErrorDateTime );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( "Exception : {0}", e->Message );
      }

   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception : {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeLoadException 类
TypeLoadException 成员
TypeLoadException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


TypeLoadException 构造函数 (String, Exception)

TypeLoadException 构造函数 (String, Exception)
TypeLoadException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 TypeLoadException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public TypeLoadException(
    string message,
    Exception inner
)
public:
TypeLoadException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> TypeLoadException

参数

message
类型： System String
解释异常原因的错误消息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 inner 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 TypeLoadException 实例的初始属性值。

Property | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

下面的代码示例演示了 TypeLoadException(String, Exception) 构造函数。它包含一个方法，该方法生成 TypeLoadException，捕获该异常，用自定义的消息引发一个新的 TypeLoadException，并将原来的 TypeLoadException 作为内部异常包括在内。 下面的代码示例演示了 TypeLoadException(String, Exception) 构造函数。它包含一个方法，该方法生成 TypeLoadException，捕获该异常，用自定义的消息引发一个新的 TypeLoadException，并将原来的 TypeLoadException 作为内部异常包括在内。

Imports System
Imports System.Runtime.InteropServices

Public Class TypeLoadException_Constructor3
   Public Shared Sub Main()
      Console.WriteLine("Calling a method in a non-existent DLL which triggers a TypeLoadException.")
      Try
         TypeLoadExceptionDemoClass.GenerateException()
      Catch e As TypeLoadException
         Console.WriteLine(("TypeLoadException: " + ControlChars.Cr + ControlChars.Tab + "Error Message = " + e.Message))
         Console.WriteLine(("TypeLoadException: " + ControlChars.Cr + ControlChars.Tab + "InnerException Message = " + e.InnerException.Message))
      Catch e As Exception
         Console.WriteLine(("Exception: " + ControlChars.Cr + ControlChars.Tab + "Error Message = " + e.Message))
      End Try
   End Sub 'Main
End Class 'TypeLoadException_Constructor3

Class TypeLoadExceptionDemoClass
   ' A call to this method will raise a TypeLoadException.
   Public Declare Sub NonExistentMethod Lib "NonExistentDLL.DLL" Alias "MethodNotExists" ()

   Public Shared Sub GenerateException()
      Try
         NonExistentMethod()
      Catch e As TypeLoadException
         ' Rethrow exception with the exception as inner exception
         Throw New TypeLoadException("This exception was raised due to a call to an invalid method.", e)
      End Try
   End Sub 'GenerateException
End Class 'TypeLoadExceptionDemoClass

using System;
using System.Runtime.InteropServices;

public class TypeLoadException_Constructor3
{
   public static void Main()
   {
      Console.WriteLine("Calling a method in a non-existent DLL which triggers a TypeLoadException.");
      try
      {
         TypeLoadExceptionDemoClass.GenerateException();
      }
      catch (TypeLoadException e)
      {
         Console.WriteLine ("TypeLoadException: \n\tError Message = " + e.Message);
         Console.WriteLine ("TypeLoadException: \n\tInnerException Message = " + e.InnerException.Message );
      }
      catch (Exception e)
      {
         Console.WriteLine ("Exception: \n\tError Message = " + e.Message);
      }
   }
}

class TypeLoadExceptionDemoClass
{
   // A call to this method will raise a TypeLoadException.
   [DllImport("NonExistentDLL.DLL", EntryPoint="MethodNotExists")]
   public static extern void NonExistentMethod();

   public static void GenerateException()
   {
      try
      {
         NonExistentMethod();
      }
      catch (TypeLoadException e)
      {
         // Rethrow exception with the exception as inner exception
         throw new TypeLoadException("This exception was raised due to a call to an invalid method.", e);
      }
   }
}

using namespace System;
using namespace System::Runtime::InteropServices;
ref class TypeLoadExceptionDemoClass
{
public:

   // A call to this method will raise a TypeLoadException.

   [DllImport("NonExistentDLL.DLL",EntryPoint="MethodNotExists")]
   static void NonExistentMethod();
   static void GenerateException()
   {
      try
      {
         NonExistentMethod();
      }
      catch ( TypeLoadException^ e )
      {

         // Rethrow exception with the exception as inner exception
         throw gcnew TypeLoadException( "This exception was raised due to a call to an invalid method.",e );
      }

   }

};

int main()
{
   Console::WriteLine( "Calling a method in a non-existent DLL which triggers a TypeLoadException." );
   try
   {
      TypeLoadExceptionDemoClass::GenerateException();
   }
   catch ( TypeLoadException^ e )
   {
      Console::WriteLine( "TypeLoadException: \n\tError Message = {0}", e->Message );
      Console::WriteLine( "TypeLoadException: \n\tInnerException Message = {0}", e->InnerException->Message );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception: \n\tError Message = {0}", e->Message );
   }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

TypeLoadException 类
TypeLoadException 成员
TypeLoadException 重载
System 命名空间
Exception

其他资源

处理和引发异常


TypeLoadException 方法

TypeLoadException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeLoadException 类

TypeLoadException 类型公开以下成员。

名称 说明
页首

参考

TypeLoadException 类
System 命名空间


TypeLoadException ..::.GetObjectData 方法

TypeLoadException
.
.
::
.
GetObjectData 方法
TypeLoadException 类

使用类名、方法名称、资源 ID 和附加异常信息来设置 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

实现

异常 | 条件
ArgumentNullException | info 对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。 GetObjectData 用针对于序列化的所有异常对象数据设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常对象。

有关更多信息，请参见 [<topic://cpconSerialization>]。

下面的示例生成一个异常，并将异常数据序列化为一个文件，然后重新设立该异常。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例生成一个异常，并将异常数据序列化为一个文件，然后重新设立该异常。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例生成一个异常，并将异常数据序列化为一个文件，然后重新设立该异常。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。

Imports System
Imports System.Reflection
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Imports System.Security.Permissions
Imports System.IO

Class GetObjectDataDemo

   Public Shared Sub Main()
      ' Get a reference to the assembly mscorlib.dll, which is always
      ' loaded. (System.String is defined in mscorlib.)
      Dim tString As Type = GetType(String)
      Dim mscorlib As [Assembly] = tString.Assembly

      Try
         Console.WriteLine("Attempting to load a type not present in the assembly 'mscorlib'")
         ' This loading of invalid type raises a TypeLoadException
         Dim myType As Type = mscorlib.GetType("System.NonExistentType", True)
      Catch
         ' Serialize the exception to disk and reconstitute it.
         Dim ErrorDatetime as System.DateTime = DateTime.Now
         Console.WriteLine("A TypeLoadException has been raised.")

         ' Create MyTypeLoadException instance with current time.
         Dim myException As new MyTypeLoadException(ErrorDatetime)
         Dim myFormatter as IFormatter  = new SoapFormatter()
         Dim myFileStream as Stream
         myFileStream = New FileStream("typeload.xml", FileMode.Create, FileAccess.Write, FileShare.None)
         Console.WriteLine("Serializing the TypeLoadException with DateTime as " _
             & ErrorDatetime.ToString())

         ' Serialize the MyTypeLoadException instance to a file.
         myFormatter.Serialize(myFileStream, myException)
         myFileStream.Close()

         Console.WriteLine("Deserializing the Exception.")
         myFileStream = New FileStream("typeload.xml", FileMode.Open, FileAccess.Read, FileShare.None)

         ' Deserialize and reconstitute the instance from file.
         myException = CType(myFormatter.Deserialize(myFileStream), MyTypeLoadException)
         myFileStream.Close()
         Console.WriteLine("Deserialized exception has ErrorDateTime = " + myException.ErrorDateTime.ToString())
      End Try
   End Sub 'Main
End Class

' This class overrides the GetObjectData method and initializes
' its data with current time.
<Serializable()> _
Public Class MyTypeLoadException
   Inherits TypeLoadException

   Private _errorDateTime As System.DateTime = DateTime.Now
   Public ReadOnly Property ErrorDateTime As DateTime
      Get
         Return _errorDateTime
      End Get
   End Property

   Public Sub New(myDateTime As DateTime)
      _errorDateTime = myDateTime
   End Sub 'New

   Protected Sub New(sInfo As SerializationInfo, sContext As StreamingContext)
      MyBase.New(sInfo, sContext)
      ' Reconstitute the deserialized information into the instance.
      _errorDateTime = sInfo.GetDateTime("ErrorDate")
   End Sub 'New

   ' GetObjectData overrides must always have a demand for SerializationFormatter.
   <SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter:=true)> _
   Public Overrides Sub GetObjectData(sInfo As SerializationInfo, sContext As StreamingContext)
      MyBase.GetObjectData(sInfo, sContext)
      ' Add a value to the Serialization information.
      sInfo.AddValue("ErrorDate", ErrorDateTime)
   End Sub 'GetObjectData

End Class 'MyTypeLoadExceptionChild

using System;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.Security.Permissions;
using System.IO;

class GetObjectDataDemo
{
   public static void Main()
   {
      // Get a reference to the assembly mscorlib.dll, which is always
      // loaded. (System.String is defined in mscorlib.)
      Assembly mscorlib = typeof(string).Assembly;

      try
      {
         Console.WriteLine ("Attempting to load a type not present in the assembly 'mscorlib'");
         // This loading of invalid type raises a TypeLoadException
         Type myType = mscorlib.GetType("System.NonExistentType", true);
      }
      catch (TypeLoadException)
      {
         // Serialize the exception to disk and reconstitute it.
         System.DateTime ErrorDatetime = DateTime.Now;
         Console.WriteLine("A TypeLoadException has been raised.");

         // Create MyTypeLoadException instance with current time.
         MyTypeLoadException myException = new MyTypeLoadException(ErrorDatetime);
         IFormatter myFormatter = new SoapFormatter();
         Stream myFileStream = new FileStream("typeload.xml", FileMode.Create, FileAccess.Write, FileShare.None);
         Console.WriteLine("Serializing the TypeLoadException with DateTime as " + ErrorDatetime);

         // Serialize the MyTypeLoadException instance to a file.
         myFormatter.Serialize(myFileStream, myException);
         myFileStream.Close();

         Console.WriteLine("Deserializing the Exception.");
         myFileStream = new FileStream("typeload.xml", FileMode.Open, FileAccess.Read, FileShare.None);

         // Deserialize and reconstitute the instance from file.
         myException = (MyTypeLoadException) myFormatter.Deserialize(myFileStream);
         myFileStream.Close();
         Console.WriteLine("Deserialized exception has ErrorDateTime = " + myException.ErrorDateTime);
      }
   }
}

// This class overrides the GetObjectData method and initializes
// its data with current time.

[Serializable]
public class MyTypeLoadException : TypeLoadException
{
   private System.DateTime _errorDateTime = DateTime.Now;
   public DateTime ErrorDateTime { get { return _errorDateTime; }}

   public MyTypeLoadException(DateTime myDateTime)
   {
      _errorDateTime = myDateTime;
   }

   protected MyTypeLoadException(SerializationInfo sInfo, StreamingContext sContext)
       : base(sInfo, sContext)
   {
      // Reconstitute the deserialized information into the instance.
      _errorDateTime = sInfo.GetDateTime("ErrorDate");
   }

   // GetObjectData overrides must always have a demand for SerializationFormatter.
   [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter=true)]
   public override void GetObjectData(SerializationInfo sInfo, StreamingContext sContext)
   {
      base.GetObjectData(sInfo, sContext);
      // Add a value to the Serialization information.
      sInfo.AddValue("ErrorDate", ErrorDateTime);
   }
}

#using <System.Runtime.Serialization.Formatters.Soap.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Soap;
using namespace System::IO;

// This class overrides the GetObjectData method and initializes
// its data with current time.

[Serializable]
public ref class MyTypeLoadExceptionChild: public TypeLoadException
{
public:
   System::DateTime ErrorDateTime;
   MyTypeLoadExceptionChild()
   {
      ErrorDateTime = DateTime::Now;
   }

   MyTypeLoadExceptionChild( DateTime myDateTime )
   {
      ErrorDateTime = myDateTime;
   }

protected:
   MyTypeLoadExceptionChild( SerializationInfo^ sInfo, StreamingContext * sContext )
   {

      // Reconstitute the deserialized information into the instance.
      ErrorDateTime = sInfo->GetDateTime( "ErrorDate" );
   }

public:
   void GetObjectData( SerializationInfo^ sInfo, StreamingContext * sContext )
   {

      // Add a value to the Serialization information.
      sInfo->AddValue( "ErrorDate", ErrorDateTime );
   }

};

int main()
{

   // Load the mscorlib assembly and get a reference to it.
   // You must supply the fully qualified assembly name for mscorlib.dll here.
   Assembly^ myAssembly = Assembly::Load( "Assembly text name, Version, Culture, PublicKeyToken" );
   try
   {
      Console::WriteLine( "Attempting to load a type not present in the assembly 'mscorlib'" );

      // This loading of invalid type raises a TypeLoadException
      Type^ myType = myAssembly->GetType( "System::NonExistentType", true );
   }
   catch ( TypeLoadException^ )
   {

      // Serialize the exception to disk and reconstitute it back again.
      try
      {
         System::DateTime ErrorDatetime = DateTime::Now;
         Console::WriteLine( "A TypeLoadException has been raised." );

         // Create MyTypeLoadException instance with current time.
         MyTypeLoadExceptionChild^ myTypeLoadExceptionChild = gcnew MyTypeLoadExceptionChild( ErrorDatetime );
         IFormatter^ myFormatter = gcnew SoapFormatter;
         Stream^ myFileStream = gcnew FileStream( "typeload.xml",FileMode::Create,FileAccess::Write,FileShare::None );
         Console::WriteLine( "Serializing the TypeLoadException with DateTime as {0}", ErrorDatetime );

         // Serialize the MyTypeLoadException instance to a file.
         myFormatter->Serialize( myFileStream, myTypeLoadExceptionChild );
         myFileStream->Close();
         Console::WriteLine( "Deserializing the Exception." );
         myFileStream = gcnew FileStream( "typeload.xml",FileMode::Open,FileAccess::Read,FileShare::None );

         // Deserialize and reconstitute the instance from file.
         myTypeLoadExceptionChild = safe_cast<MyTypeLoadExceptionChild^>(myFormatter->Deserialize( myFileStream ));
         myFileStream->Close();
         Console::WriteLine( "Deserialized exception has ErrorDateTime = {0}", myTypeLoadExceptionChild->ErrorDateTime );
      }
      catch ( Exception^ e )
      {
         Console::WriteLine( "Exception : {0}", e->Message );
      }

   }
   catch ( Exception^ e )
   {
      Console::WriteLine( "Exception : {0}", e->Message );
   }

}
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeLoadException 类
TypeLoadException 成员
System 命名空间
SerializationInfo

其他资源

[<topic://cpconSerialization>]


TypeLoadException 属性

TypeLoadException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeLoadException 类

TypeLoadException 类型公开以下成员。

名称 说明
页首

参考

TypeLoadException 类
System 命名空间


TypeLoadException ..::.Message 属性

TypeLoadException
.
.
::
.
Message 属性
TypeLoadException 类

获取此异常的错误消息。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides ReadOnly Property Message As String
    Get
public override string Message { get; }
public:
virtual property String^ Message {
    String^ get () override;
}
abstract Message : string
override Message : string

属性值

类型： System String
错误消息字符串。

实现

此属性重写 Message。应本地化错误消息。 此属性重写 Message。应本地化错误消息。

此属性为只读。

下面的示例尝试从 mscorlib 程序集加载不存在的类型。产生的异常已捕获，并且显示 TypeName 和 Message 值。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例尝试从 mscorlib 程序集加载不存在的类型。产生的异常已捕获，并且显示 TypeName 和 Message 值。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例尝试从 mscorlib 程序集加载不存在的类型。产生的异常已捕获，并且显示 TypeName 和 Message 值。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例尝试从 mscorlib 程序集加载不存在的类型。产生的异常已捕获，并且显示 TypeName 和 Message 值。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class Example
   Public Shared Sub Main()
      ' Get a reference to the assembly mscorlib.dll, which is always
      ' loaded. (System.String is defined in mscorlib.)
      Dim tString As Type = GetType(String)
      Dim mscorlib As [Assembly] = tString.Assembly

      Try
         Console.WriteLine("Attempting to load a type that does not exist in mscorlib.")
         ' The boolean parameter causes an exception to be thrown if the
         ' type is not found.
         Dim myType As Type = mscorlib.GetType("System.NonExistentType", True)
      Catch ex As TypeLoadException
         ' Display the name of the type that was not found, and the
         ' exception message.
         Console.WriteLine("TypeLoadException was caught. Type = '{0}'.", _
             ex.TypeName)
         Console.WriteLine("Error Message = '{0}'", ex.Message)
      End Try
   End Sub
End Class
'
' This example produces output similar to the following:
'
'Attempting to load a type that does not exist in mscorlib.
'TypeLoadException was caught. Type = 'System.NonExistentType'
'Error Message = 'Could not load type System.NonExistentType from assembly mscorl
'ib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.'

using System;
using System.Reflection;

public class TypeLoadException_TypeName
{
   public static void Main()
   {
      // Get a reference to the assembly mscorlib.dll, which is always
      // loaded. (System.String is defined in mscorlib.)
      Assembly mscorlib = typeof(string).Assembly;

      try
      {
         Console.WriteLine("Attempting to load a type that does not exist in mscorlib.");
         // The boolean parameter causes an exception to be thrown if the
         // type is not found.
         Type myType = mscorlib.GetType("System.NonExistentType", true);
      }
      catch (TypeLoadException ex)
      {
         // Display the name of the type that was not found, and the
         // exception message.
         Console.WriteLine("TypeLoadException was caught. Type = '{0}'.",
             ex.TypeName);
         Console.WriteLine("Error Message = '{0}'", ex.Message);
      }
   }
}
/*
 This code example produces output similar to the following:

Attempting to load a type that does not exist in mscorlib.
TypeLoadException was caught. Type = 'System.NonExistentType'
Error Message = 'Could not load type System.NonExistentType from assembly mscorl
ib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.'
 */

// Load the mscorlib assembly and get a reference to it.
// You must supply the fully qualified assembly name for mscorlib.dll here.
Assembly^ myAssembly = Assembly::Load( "Assembly text name, Version, Culture, PublicKeyToken" );
try
{
   Console::WriteLine( "This program throws an exception upon successful run." );

   // Attempt to load a non-existent type from an assembly.
   Type^ myType = myAssembly->GetType( "System.NonExistentType", true );
}
catch ( TypeLoadException^ e )
{
   // Display the name of the Type that was not found.
   Console::WriteLine( "TypeLoadException: \n\tError loading the type '{0}' from the assembly 'mscorlib'", e->TypeName );
   Console::WriteLine( "\tError Message = {0}", e->Message );
}
catch ( Exception^ e )
{
   Console::WriteLine( "Exception: Error Message = {0}", e->Message );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeLoadException 类
TypeLoadException 成员
System 命名空间


TypeLoadException ..::.TypeName 属性

TypeLoadException
.
.
::
.
TypeName 属性
TypeLoadException 类

获取导致异常的类型的完全限定名。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property TypeName As String
    Get
public string TypeName { get; }
public:
property String^ TypeName {
    String^ get ();
}
member TypeName : string

属性值

类型： System String
完全限定的类型名。

对继承者的说明

重写某个派生类中的 TypeName 时，请确保调用基类的 TypeName 属性。

此属性为只读。

下面的示例尝试从 mscorlib 程序集加载不存在的类型。产生的异常已捕获，并且显示 TypeName 和 Message 值。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例尝试从 mscorlib 程序集加载不存在的类型。产生的异常已捕获，并且显示 TypeName 和 Message 值。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例尝试从 mscorlib 程序集加载不存在的类型。产生的异常已捕获，并且显示 TypeName 和 Message 值。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。 下面的示例尝试从 mscorlib 程序集加载不存在的类型。产生的异常已捕获，并且显示 TypeName 和 Message 值。要运行该代码实例，必须提供完全限定程序集名称。有关如何获取完全限定程序集名称的信息，请参见 程序集名称。

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Public Class Example
   Public Shared Sub Main()
      ' Get a reference to the assembly mscorlib.dll, which is always
      ' loaded. (System.String is defined in mscorlib.)
      Dim tString As Type = GetType(String)
      Dim mscorlib As [Assembly] = tString.Assembly

      Try
         Console.WriteLine("Attempting to load a type that does not exist in mscorlib.")
         ' The boolean parameter causes an exception to be thrown if the
         ' type is not found.
         Dim myType As Type = mscorlib.GetType("System.NonExistentType", True)
      Catch ex As TypeLoadException
         ' Display the name of the type that was not found, and the
         ' exception message.
         Console.WriteLine("TypeLoadException was caught. Type = '{0}'.", _
             ex.TypeName)
         Console.WriteLine("Error Message = '{0}'", ex.Message)
      End Try
   End Sub
End Class
'
' This example produces output similar to the following:
'
'Attempting to load a type that does not exist in mscorlib.
'TypeLoadException was caught. Type = 'System.NonExistentType'
'Error Message = 'Could not load type System.NonExistentType from assembly mscorl
'ib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.'

using System;
using System.Reflection;

public class TypeLoadException_TypeName
{
   public static void Main()
   {
      // Get a reference to the assembly mscorlib.dll, which is always
      // loaded. (System.String is defined in mscorlib.)
      Assembly mscorlib = typeof(string).Assembly;

      try
      {
         Console.WriteLine("Attempting to load a type that does not exist in mscorlib.");
         // The boolean parameter causes an exception to be thrown if the
         // type is not found.
         Type myType = mscorlib.GetType("System.NonExistentType", true);
      }
      catch (TypeLoadException ex)
      {
         // Display the name of the type that was not found, and the
         // exception message.
         Console.WriteLine("TypeLoadException was caught. Type = '{0}'.",
             ex.TypeName);
         Console.WriteLine("Error Message = '{0}'", ex.Message);
      }
   }
}
/*
 This code example produces output similar to the following:

Attempting to load a type that does not exist in mscorlib.
TypeLoadException was caught. Type = 'System.NonExistentType'
Error Message = 'Could not load type System.NonExistentType from assembly mscorl
ib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.'
 */

// Load the mscorlib assembly and get a reference to it.
// You must supply the fully qualified assembly name for mscorlib.dll here.
Assembly^ myAssembly = Assembly::Load( "Assembly text name, Version, Culture, PublicKeyToken" );
try
{
   Console::WriteLine( "This program throws an exception upon successful run." );

   // Attempt to load a non-existent type from an assembly.
   Type^ myType = myAssembly->GetType( "System.NonExistentType", true );
}
catch ( TypeLoadException^ e )
{
   // Display the name of the Type that was not found.
   Console::WriteLine( "TypeLoadException: \n\tError loading the type '{0}' from the assembly 'mscorlib'", e->TypeName );
   Console::WriteLine( "\tError Message = {0}", e->Message );
}
catch ( Exception^ e )
{
   Console::WriteLine( "Exception: Error Message = {0}", e->Message );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeLoadException 类
TypeLoadException 成员
System 命名空间


TypeLoadException 事件

TypeLoadException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeLoadException 类

TypeLoadException 类型公开以下成员。

名称 说明
页首

参考

TypeLoadException 类
System 命名空间


TypeUnloadedException 类

TypeUnloadedException 类
成员

尝试访问已卸载的类时引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class TypeUnloadedException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class TypeUnloadedException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class TypeUnloadedException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type TypeUnloadedException =
    class
        inherit SystemException
    end

TypeUnloadedException 使用值为 0x80131013 的 HRESULT COR_E_TYPEUNLOADED。

有关 TypeUnloadedException 实例的初始属性值列表，请参见 TypeUnloadedException 构造函数。

System System..::.TypeUnloadedExceptionTypeUnloadedException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeUnloadedException 成员
System 命名空间
Exception

其他资源

处理和引发异常


TypeUnloadedException 成员

TypeUnloadedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeUnloadedException 类

尝试访问已卸载的类时引发的异常。

TypeUnloadedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TypeUnloadedException 类
System 命名空间


TypeUnloadedException 构造函数

TypeUnloadedException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeUnloadedException 类

初始化 TypeUnloadedException 类的新实例。

名称 说明
页首

参考

TypeUnloadedException 类
TypeUnloadedException 成员
System 命名空间


TypeUnloadedException 构造函数

TypeUnloadedException 构造函数
TypeUnloadedException 类

初始化 TypeUnloadedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public TypeUnloadedException()
public:
TypeUnloadedException()
new : unit -> TypeUnloadedException

此构造函数将新实例的 Message 属性初始化为系统提供的消息，该消息对错误进行描述，例如“已卸载类型。”。此消息将考虑当前系统区域性。

下表显示 TypeUnloadedException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeUnloadedException 类
TypeUnloadedException 成员
TypeUnloadedException 重载
System 命名空间


TypeUnloadedException 构造函数 (String)

TypeUnloadedException 构造函数 (String)
TypeUnloadedException 类

使用指定错误信息初始化 TypeUnloadedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public TypeUnloadedException(
    string message
)
public:
TypeUnloadedException(
    String^ message
)
new :
        message:string -> TypeUnloadedException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为最终用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为最终用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 TypeUnloadedException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeUnloadedException 类
TypeUnloadedException 成员
TypeUnloadedException 重载
System 命名空间


TypeUnloadedException 构造函数 (SerializationInfo, StreamingContext)

TypeUnloadedException 构造函数 (SerializationInfo, StreamingContext)
TypeUnloadedException 类

用序列化数据初始化 TypeUnloadedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected TypeUnloadedException(
    SerializationInfo info,
    StreamingContext context
)
protected:
TypeUnloadedException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> TypeUnloadedException

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化对象数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。 在反序列化过程中调用该构造函数来重建通过流传输的异常对象。有关更多信息，请参见 [<topic://cpconSerialization>]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeUnloadedException 类
TypeUnloadedException 成员
TypeUnloadedException 重载
System 命名空间

其他资源

[<topic://cpconSerialization>]


TypeUnloadedException 构造函数 (String, Exception)

TypeUnloadedException 构造函数 (String, Exception)
TypeUnloadedException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 TypeUnloadedException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public TypeUnloadedException(
    string message,
    Exception innerException
)
public:
TypeUnloadedException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> TypeUnloadedException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 innerException 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 因前一个异常而直接引发的异常可以在 InnerException 属性中包含对前一个异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 TypeUnloadedException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypeUnloadedException 类
TypeUnloadedException 成员
TypeUnloadedException 重载
System 命名空间
Exception

其他资源

处理和引发异常


TypeUnloadedException 方法

TypeUnloadedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeUnloadedException 类

TypeUnloadedException 类型公开以下成员。

名称 说明
页首

参考

TypeUnloadedException 类
System 命名空间


TypeUnloadedException 属性

TypeUnloadedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeUnloadedException 类

TypeUnloadedException 类型公开以下成员。

名称 说明
页首

参考

TypeUnloadedException 类
System 命名空间


TypeUnloadedException 事件

TypeUnloadedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypeUnloadedException 类

TypeUnloadedException 类型公开以下成员。

名称 说明
页首

参考

TypeUnloadedException 类
System 命名空间


UInt16 结构

UInt16 结构
成员

表示 16 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Int32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public Structure UInt16 _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of UShort),  _
    IEquatable(Of UShort)
[SerializableAttribute]
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public struct UInt16 : IComparable, IFormattable,
    IConvertible, IComparable<ushort>, IEquatable<ushort>
[SerializableAttribute]
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public value class UInt16 : IComparable,
    IFormattable, IConvertible, IComparable<unsigned short>, IEquatable<unsigned short>
[<SealedAttribute>]
[<SerializableAttribute>]
[<CLSCompliantAttribute(false)>]
[<ComVisibleAttribute(true)>]
type UInt16 =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<uint16>
        interface IEquatable<uint16>
    end

UInt16 值类型表示值介于 0 和 65535 之间的无符号整数。

重要说明 重要事项

UInt16 类型不符合 CLS。符合 CLS 的替代类型是 Int32。可以改用 Int16 来替换从零到 MaxValue 范围内的 UInt16 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 UInt16 类型不符合 CLS。符合 CLS 的替代类型是 Int32。可以改用 Int16 来替换从零到 MaxValue 范围内的 UInt16 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 UInt16 类型不符合 CLS。符合 CLS 的替代类型是 Int32。可以改用 Int16 来替换从零到 MaxValue 范围内的 UInt16 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 UInt16 类型不符合 CLS。符合 CLS 的替代类型是 Int32。可以改用 Int16 来替换从零到 MaxValue 范围内的 UInt16 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。

UInt16 结构提供比较此类型的实例的方法，将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。

有关格式规范代码如何控制值类型的字符串表示形式的信息，请参见 格式化类型。

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 成员
System 命名空间
Int32


UInt16 成员

UInt16 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt16 结构

表示 16 位无符号整数。

UInt16 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UInt16 结构
System 命名空间


UInt16 字段

UInt16 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt16 结构

UInt16 类型公开以下成员。

名称 说明
页首

参考

UInt16 结构
System 命名空间


UInt16 ..::.MaxValue 字段

UInt16
.
.
::
.
MaxValue 字段
UInt16 结构

表示 UInt16 的最大可能值。此字段为常数。 表示 UInt16 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As UShort
public const ushort MaxValue
public:
literal unsigned short MaxValue
static val mutable MaxValue: uint16

该常数的值为 65535；即十六进制的 0xFFFF。

下面的示例使用 UInt16..::.MaxValue 和 UInt16..::.MinValue 属性来确保 Int32 值在转换为 UInt16 值之前在 UInt16 类型范围内。这样可以防止转换操作在整数值不在 UInt16 类型范围内的情况下引发 OverflowException。 下面的示例使用 UInt16..::.MaxValue 和 UInt16..::.MinValue 属性来确保 Int32 值在转换为 UInt16 值之前在 UInt16 类型范围内。这样可以防止转换操作在整数值不在 UInt16 类型范围内的情况下引发 OverflowException。

Dim integerValue As Integer = 1216
Dim uIntegerValue As UShort

If integerValue >= UShort.MinValue And integerValue <= UShort.MaxValue Then
   uIntegerValue = CUShort(integerValue)
   Console.WriteLine(uIntegerValue)
Else
   Console.WriteLine("Unable to convert {0} to a UInt16t.", integerValue)
End If

int integerValue = 1216;
ushort uIntegerValue;

if (integerValue >= ushort.MinValue & integerValue <= ushort.MaxValue)
{
   uIntegerValue = (ushort) integerValue;
   Console.WriteLine(uIntegerValue);
}
else
{
   Console.WriteLine("Unable to convert {0} to a UInt16t.", integerValue);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间
MinValue


UInt16 ..::.MinValue 字段

UInt16
.
.
::
.
MinValue 字段
UInt16 结构

表示 UInt16 的最小可能值。此字段为常数。 表示 UInt16 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As UShort
public const ushort MinValue
public:
literal unsigned short MinValue
static val mutable MinValue: uint16

此常数的值是 0。

下面的示例使用 MinValue 和 MaxValue 属性来确保 Int32 值在转换为 UInt16 值之前在 UInt16 类型范围内。这样可以防止转换操作在整数值不在 UInt16 类型范围内的情况下引发 OverflowException。 下面的示例使用 MinValue 和 MaxValue 属性来确保 Int32 值在转换为 UInt16 值之前在 UInt16 类型范围内。这样可以防止转换操作在整数值不在 UInt16 类型范围内的情况下引发 OverflowException。

Dim integerValue As Integer = 1216
Dim uIntegerValue As UShort

If integerValue >= UShort.MinValue And integerValue <= UShort.MaxValue Then
   uIntegerValue = CUShort(integerValue)
   Console.WriteLine(uIntegerValue)
Else
   Console.WriteLine("Unable to convert {0} to a UInt16t.", integerValue)
End If

int integerValue = 1216;
ushort uIntegerValue;

if (integerValue >= ushort.MinValue & integerValue <= ushort.MaxValue)
{
   uIntegerValue = (ushort) integerValue;
   Console.WriteLine(uIntegerValue);
}
else
{
   Console.WriteLine("Unable to convert {0} to a UInt16t.", integerValue);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间
MaxValue


UInt16 方法

UInt16 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt16 结构

UInt16 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

UInt16 结构
System 命名空间


UInt16 ..::.CompareTo 方法

UInt16
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt16 结构

将此实例与指定的对象或 UInt16 进行比较，并返回这些值相对大小的标志。

名称 说明
页首

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.CompareTo 方法 (Object)

UInt16
.
.
::
.
CompareTo 方法 (Object)
UInt16 结构

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 UInt16。

无论 UInt16 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者是 UInt16 的实例；否则将引发异常。

下面的示例说明 CompareTo 方法。

    Public Class Temperature : Implements IComparable
        ' The value holder
        Protected m_value As UShort

        ''' <summary>
        ''' IComparable.CompareTo implementation.
        ''' </summary>
        Public Function CompareTo(obj As Object) As Integer _
               Implements IComparable.CompareTo

            If TypeOf(obj) Is Temperature Then
                Dim temp As Temperature = DirectCast(obj, Temperature)

                Return m_value.CompareTo(temp.m_value)
            End If

            Throw New ArgumentException("object is not a Temperature")
        End Function

        Public Property Value As UShort
            Get
                Return m_value
            End Get
            Set
                Me.m_value = value
            End Set
        End Property
    End Class

    public class Temperature : IComparable {
        /// <summary>
        /// IComparable.CompareTo implementation.
        /// </summary>
        public int CompareTo(object obj) {
            if(obj is Temperature) {
                Temperature temp = (Temperature) obj;

                return m_value.CompareTo(temp.m_value);
            }

            throw new ArgumentException("object is not a Temperature");
        }

        // The value holder
        protected ushort m_value;

        public ushort Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }
    }

   public ref class Temperature: public IComparable
   {
   protected:

      /// <summary>
      /// IComparable.CompareTo implementation.
      /// </summary>
      // The value holder
      short m_value;

   public:
      virtual Int32 CompareTo( Object^ obj )
      {
         if ( obj->GetType() == Temperature::typeid )
         {
            Temperature^ temp = dynamic_cast<Temperature^>(obj);
            return m_value.CompareTo( temp->m_value );
         }

         throw gcnew ArgumentException(  "object is not a Temperature" );
      }

      property short Value
      {
         short get()
         {
            return m_value;
         }

         void set( short value )
         {
            m_value = value;
         }

      }

      property short Celsius
      {
         short get()
         {
            return (short)((m_value - 32) / 2);
         }

         void set( short value )
         {
            m_value = (value * 2 + 32);
         }

      }

   };

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
CompareTo 重载
System 命名空间
Equals


UInt16 ..::.CompareTo 方法 (UInt16)

UInt16
.
.
::
.
CompareTo 方法 (UInt16)
UInt16 结构

将此实例与指定的 16 位无符号整数进行比较并返回对其相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As UShort _ ) As Integer
public int CompareTo( ushort value )
public: virtual int CompareTo( unsigned short value ) sealed
abstract CompareTo : value:uint16 -> int override CompareTo : value:uint16 -> int
参数
value
类型： System UInt16
要比较的无符号整数。
返回值
类型： System Int32
有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 UInt16..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
CompareTo 重载
System 命名空间
Equals


UInt16 ..::.Equals 方法

UInt16
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt16 结构

返回一个值，该值指示此实例是否与指定的对象或 UInt16 相等。

名称 说明
页首

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.Equals 方法 (Object)

UInt16
.
.
::
.
Equals 方法 (Object)
UInt16 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 UInt16 的实例且等于此实例的值，则为 true；否则为 false。

下面的示例说明 Equals 方法。

   Dim myVariable1 As UInt16 = UInt16.Parse(10)
   Dim myVariable2 As UInt16 = UInt16.Parse(10)

   ' Display the declaring type.
   Console.WriteLine(ControlChars.NewLine + "Type of 'myVariable1' is '{0}' and" +  _
         " value is :{1}", myVariable1.GetType().ToString(), myVariable1.ToString())
   Console.WriteLine("Type of 'myVariable2' is '{0}' and" +  _
            " value is :{1}" , myVariable2.GetType().ToString(), myVariable2.ToString())

   ' Compare 'myVariable1' instance with 'myVariable2' Object.
   If myVariable1.Equals(myVariable2) Then
      Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and" +  _
            " 'myVariable2' are equal")
   Else
      Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and" +  _
      " 'myVariable2' are not equal")
   End If

UInt16 myVariable1 = 10;
UInt16 myVariable2 = 10;

//Display the declaring type.
Console.WriteLine("\nType of 'myVariable1' is '{0}' and"+
     " value is :{1}",myVariable1.GetType(), myVariable1);
Console.WriteLine("Type of 'myVariable2' is '{0}' and"+
     " value is :{1}",myVariable2.GetType(), myVariable2);

// Compare 'myVariable1' instance with 'myVariable2' Object.
if( myVariable1.Equals( myVariable2 ) )
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are equal");
else
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are not equal");

UInt16 myVariable1 = 10;
UInt16 myVariable2 = 10;

//Display the declaring type.
Console::WriteLine( "\nType of 'myVariable1' is '{0}' and  value is : {1}", myVariable1.GetType(), myVariable1 );
Console::WriteLine( "Type of 'myVariable2' is '{0}' and  value is : {1}", myVariable2.GetType(), myVariable2 );

// Compare 'myVariable1' instance with 'myVariable2' Object.
if ( myVariable1.Equals( myVariable2 ) )
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are equal" );
else
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are not equal" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
Equals 重载
System 命名空间


UInt16 ..::.Equals 方法 (UInt16)

UInt16
.
.
::
.
Equals 方法 (UInt16)
UInt16 结构

返回一个值，该值指示此实例是否与指定的 UInt16 值相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As UShort _
) As Boolean
public bool Equals(
    ushort obj
)
public:
virtual bool Equals(
    unsigned short obj
) sealed
abstract Equals :
        obj:uint16 -> bool
override Equals :
        obj:uint16 -> bool

参数

obj
类型： System UInt16
要与此实例进行比较的 16 位无符号整数。

返回值

类型： System Boolean
如果 obj 的值与此实例相同，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
Equals 重载
System 命名空间


UInt16 ..::.GetHashCode 方法

UInt16
.
.
::
.
GetHashCode 方法
UInt16 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.GetTypeCode 方法

UInt16
.
.
::
.
GetTypeCode 方法
UInt16 结构

返回值类型 UInt16 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.UInt16。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间
TypeCode


UInt16 ..::.IConvertible ..::.ToBoolean 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToBoolean(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToByte 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToByte(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToChar 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
当前实例的值，已转换为 Char。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToChar(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToDateTime 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToDecimal 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
转换为 Decimal 的该实例的当前值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDecimal(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToDouble 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
转换为 Double 的该实例的当前值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToDouble(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToInt16 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
转换为 Int16 的该实例的当前值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt16(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToInt32 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
转换为 Int32 的该实例的值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt32(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToInt64 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
转换为 Int64 的该实例的当前值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToInt64(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToSByte 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
转换为 SByte 的该实例的当前值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSByte(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToSingle 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
转换为 Single 的该实例的当前值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToSingle(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToType 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
此 UInt16 值要转换为的类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的信息。

返回值

类型： System Object
转换为 type 的该实例的当前值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToUInt16 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
该实例的当前值（未更改）。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToUInt32 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
转换为 UInt32 的该实例的当前值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt32(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.IConvertible ..::.ToUInt64 方法

UInt16
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
UInt16 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
转换为 UInt64 的该实例的当前值。

实现

此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(UInt16) 方法。 此成员是显式的接口成员实现。只能在 UInt16 实例强制转换为 IConvertible 接口时使用它。建议使用的替代方法是调用 Convert..::.ToUInt64(UInt16) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.Parse 方法

UInt16
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt16 结构

将数字的字符串表示形式转换为它的等效 16 位无符号整数。

名称 说明
页首

参考

UInt16 结构
UInt16 成员
System 命名空间
TryParse


UInt16 ..::.Parse 方法 (String)

UInt16
.
.
::
.
Parse 方法 (String)
UInt16 结构

将数字的字符串表示形式转换为其等效的 16 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort Parse(
    string s
)
[CLSCompliantAttribute(false)]
public:
static unsigned short Parse(
    String^ s
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string -> uint16

参数

s
类型： System String
表示要转换的数字的字符串。

返回值

类型： System UInt16
与 s 中包含的数字等效的 16 位无符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue 的数字。

s 参数应该是以下形式的数字字符串表示形式。

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。但是，只能对零使用负号；否则，该方法将引发 OverflowException。
数字 | 一系列从 0 到 9 之间的数字。任何前导零都将被忽略。 一系列从 0 到 9 之间的数字。任何前导零都将被忽略。
说明 说明

使用 NumberStyles..::.Integer 样式来解释由 s 参数指定的字符串。它不能包含任何组分隔符或小数分隔符，也不能有小数部分。 使用 NumberStyles..::.Integer 样式来解释由 s 参数指定的字符串。它不能包含任何组分隔符或小数分隔符，也不能有小数部分。

s 参数是使用针对当前系统区域性初始化的 System.Globalization..::.NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息来分析字符串，请使用 Parse(String, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 System.Globalization..::.NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息来分析字符串，请使用 Parse(String, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 System.Globalization..::.NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息来分析字符串，请使用 Parse(String, IFormatProvider) 方法。

下面的示例调用 Parse(String) 方法以将一字符串数组中的每个元素转换为 16 位整数。

Module Example
   Public Sub Main()
      Dim values() As String = { "-0", "17", "-12", "185", "66012", _
                                 "+0", "", Nothing, "16.1", "28.0", _
                                 "1,034" }
      For Each value As String In values
         Try
            Dim number As UShort = UInt16.Parse(value)
            Console.WriteLine("'{0}' --> {1}", value, number)
         Catch e As FormatException
            Console.WriteLine("'{0}' --> Bad Format", value)
         Catch e As OverflowException
            Console.WriteLine("'{0}' --> OverflowException", value)
         Catch e As ArgumentNullException
            Console.WriteLine("'{0}' --> Null", value)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       '-0' --> 0
'       '17' --> 17
'       '-12' --> OverflowException
'       '185' --> 185
'       '66012' --> OverflowException
'       '+0' --> 0
'       '' --> Bad Format
'       '' --> Null
'       '16.1' --> Bad Format
'       '28.0' --> Bad Format
'       '1,034' --> Bad Format

using System;

public class Example
{
   public static void Main()
   {
      string[] values = { "-0", "17", "-12", "185", "66012", "+0",
                          "", null, "16.1", "28.0", "1,034" };
      foreach (string value in values)
      {
         try {
            ushort number = UInt16.Parse(value);
            Console.WriteLine("'{0}' --> {1}", value, number);
         }
         catch (FormatException) {
            Console.WriteLine("'{0}' --> Bad Format", value);
         }
         catch (OverflowException) {
            Console.WriteLine("'{0}' --> OverflowException", value);
         }
         catch (ArgumentNullException) {
            Console.WriteLine("'{0}' --> Null", value);
         }
      }
   }
}
// The example displays the following output:
//       '-0' --> 0
//       '17' --> 17
//       '-12' --> OverflowException
//       '185' --> 185
//       '66012' --> OverflowException
//       '+0' --> 0
//       '' --> Bad Format
//       '' --> Null
//       '16.1' --> Bad Format
//       '28.0' --> Bad Format
//       '1,034' --> Bad Format

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


UInt16 ..::.Parse 方法 (String, NumberStyles)

UInt16
.
.
::
.
Parse 方法 (String, NumberStyles)
UInt16 结构

将数字的指定样式的字符串表示形式转换为其等效的 16 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort Parse(
    string s,
    NumberStyles style
)
[CLSCompliantAttribute(false)]
public:
static unsigned short Parse(
    String^ s,
    NumberStyles style
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        style:NumberStyles -> uint16

参数

s
类型： System String
表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。 表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，这些枚举值指定 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。 枚举值的按位组合，这些枚举值指定 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。

返回值

类型： System UInt16
与 s 中指定的数字等效的 16 位无符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 NumberStyles..::.AllowHexSpecifier 和 NumberStyles..::.HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格、正负号、组分隔符或小数点符号）。style 必须是 NumberStyles 枚举中位标志的组合。当 s 包含十六进制的字符串表现形式、当 s 代表的数字系统（十进制或十六进制）仅在运行时才能知道时或者当希望在 s 中禁用空格或正负符号时，style 参数将使得此方法重载非常有用。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格、正负号、组分隔符或小数点符号）。style 必须是 NumberStyles 枚举中位标志的组合。当 s 包含十六进制的字符串表现形式、当 s 代表的数字系统（十进制或十六进制）仅在运行时才能知道时或者当希望在 s 中禁用空格或正负符号时，style 参数将使得此方法重载非常有用。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格、正负号、组分隔符或小数点符号）。style 必须是 NumberStyles 枚举中位标志的组合。当 s 包含十六进制的字符串表现形式、当 s 代表的数字系统（十进制或十六进制）仅在运行时才能知道时或者当希望在 s 中禁用空格或正负符号时，style 参数将使得此方法重载非常有用。

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][E[sign]exponential_digits][ws]

方括号（[ 和 ]）中的元素是可选的。如果 style 包括 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素： 方括号（[ 和 ]）中的元素是可选的。如果 style 包括 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素：

[ws]hexdigits[ws]

下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。
数字 fractional_digits exponential_digits | 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。
, | 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 FormatException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 FormatException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 FormatException。
E | "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 digits 元素。
AllowDecimalPoint | 小数点 (.)和 fractional-digits 元素。
AllowExponent | 字符"e"或"E"，用于指示指数表示法以及 exponential_digits。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 开头的符号元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 组分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign，以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign，以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、组分隔符 (,) 和小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数字。 所有元素。但是，s 不能表示十六进制数字。

与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

说明 说明

如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。 如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。

下面的示例尝试使用许多 NumberStyles 值解析字符串数组中的每个元素。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim values() As String = { " 214 ", "1,064", "(0)", "1241+", " + 214 ", " +214 ", "2153.0", "1e03", "1300.0e-2" }
      Dim whitespace As NumberStyles =  NumberStyles.AllowLeadingWhite Or NumberStyles.AllowTrailingWhite
      Dim styles() As NumberStyles = { NumberStyles.None, _
                                       whitespace, _
                                       NumberStyles.AllowLeadingSign Or NumberStyles.AllowTrailingSign Or whitespace, _
                                       NumberStyles.AllowThousands Or NumberStyles.AllowCurrencySymbol, _
                                       NumberStyles.AllowExponent Or NumberStyles.AllowDecimalPoint }

      ' Attempt to convert each number using each style combination.
      For Each value As String In values
         Console.WriteLine("Attempting to convert '{0}':", value)
         For Each style As NumberStyles In styles
            Try
               Dim number As UShort = UInt16.Parse(value, style)
               Console.WriteLine("   {0}: {1}", style, number)
            Catch e As FormatException
               Console.WriteLine("   {0}: Bad Format", style)
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    Attempting to convert ' 214 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: 214
'       Integer, AllowTrailingSign: 214
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '1,064':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: 1064
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '(0)':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '1241+':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: 1241
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert ' + 214 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert ' +214 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: 214
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '2153.0':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 2153
'
'    Attempting to convert '1e03':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 1000
'
'    Attempting to convert '1300.0e-2':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 13

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Define a custom culture that uses "++" as a positive sign.
      Dim ci As CultureInfo = New CultureInfo("")
      ci.NumberFormat.PositiveSign = "++"
      ' Create an array of cultures.
      Dim cultures() As CultureInfo = { ci, CultureInfo.InvariantCulture }
      ' Create an array of strings to parse.
      Dim values() As String = { "++1403", "-0", "+0", "+16034", _
                                 Int16.MinValue.ToString(), "14.0", "18012" }
      ' Parse the strings using each culture.
      For Each culture As CultureInfo In cultures
         Console.WriteLine("Parsing with the '{0}' culture.", culture.Name)
         For Each value As String In values
            Try
               Dim number As UShort = UInt16.Parse(value, culture)
               Console.WriteLine("   Converted '{0}' to {1}.", value, number)
            Catch e As FormatException
               Console.WriteLine("   The format of '{0}' is invalid.", value)
            Catch e As OverflowException
               Console.WriteLine("   '{0}' is outside the range of a UInt16 value.", value)
            End Try
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'       Parsing with the  culture.
'          Converted '++1403' to 1403.
'          Converted '-0' to 0.
'          The format of '+0' is invalid.
'          The format of '+16034' is invalid.
'          '-32768' is outside the range of a UInt16 value.
'          The format of '14.0' is invalid.
'          Converted '18012' to 18012.
'       Parsing with the '' culture.
'          The format of '++1403' is invalid.
'          Converted '-0' to 0.
'          Converted '+0' to 0.
'          Converted '+16034' to 16034.
'          '-32768' is outside the range of a UInt16 value.
'          The format of '14.0' is invalid.
'          Converted '18012' to 18012.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values = { " 214 ", "1,064", "(0)", "1241+", " + 214 ", " +214 ", "2153.0", "1e03", "1300.0e-2" };
      NumberStyles whitespace =  NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite;
      NumberStyles[] styles = { NumberStyles.None, whitespace,
                                NumberStyles.AllowLeadingSign | NumberStyles.AllowTrailingSign | whitespace,
                                NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol,
                                NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint };

      // Attempt to convert each number using each style combination.
      foreach (string value in values)
      {
         Console.WriteLine("Attempting to convert '{0}':", value);
         foreach (NumberStyles style in styles)
         {
            try {
               ushort number = UInt16.Parse(value, style);
               Console.WriteLine("   {0}: {1}", style, number);
            }
            catch (FormatException) {
               Console.WriteLine("   {0}: Bad Format", style);
            }
         }
         Console.WriteLine();
      }
   }
}
// The example display the following output:
//    Attempting to convert ' 214 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: 214
//       Integer, AllowTrailingSign: 214
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '1,064':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: 1064
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '(0)':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '1241+':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: 1241
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert ' + 214 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert ' +214 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: 214
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '2153.0':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 2153
//
//    Attempting to convert '1e03':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 1000
//
//    Attempting to convert '1300.0e-2':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 13

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Define a custom culture that uses "++" as a positive sign.
      CultureInfo ci = new CultureInfo("");
      ci.NumberFormat.PositiveSign = "++";
      // Create an array of cultures.
      CultureInfo[] cultures = { ci, CultureInfo.InvariantCulture };
      // Create an array of strings to parse.
      string[] values = { "++1403", "-0", "+0", "+16034",
                          Int16.MinValue.ToString(), "14.0", "18012" };
      // Parse the strings using each culture.
      foreach (CultureInfo culture in cultures)
      {
         Console.WriteLine("Parsing with the '{0}' culture.", culture.Name);
         foreach (string value in values)
         {
            try {
               ushort number = UInt16.Parse(value, culture);
               Console.WriteLine("   Converted '{0}' to {1}.", value, number);
            }
            catch (FormatException) {
               Console.WriteLine("   The format of '{0}' is invalid.", value);
            }
            catch (OverflowException) {
               Console.WriteLine("   '{0}' is outside the range of a UInt16 value.", value);
            }
         }
      }
   }
}
// The example displays the following output:
//       Parsing with the  culture.
//          Converted '++1403' to 1403.
//          Converted '-0' to 0.
//          The format of '+0' is invalid.
//          The format of '+16034' is invalid.
//          '-32768' is outside the range of a UInt16 value.
//          The format of '14.0' is invalid.
//          Converted '18012' to 18012.
//       Parsing with the '' culture.
//          The format of '++1403' is invalid.
//          Converted '-0' to 0.
//          Converted '+0' to 0.
//          Converted '+16034' to 16034.
//          '-32768' is outside the range of a UInt16 value.
//          The format of '14.0' is invalid.
//          Converted '18012' to 18012.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


UInt16 ..::.Parse 方法 (String, IFormatProvider)

UInt16
.
.
::
.
Parse 方法 (String, IFormatProvider)
UInt16 结构

将数字的指定区域性特定格式的字符串表示形式转换为其等效的 16 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort Parse(
    string s,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned short Parse(
    String^ s,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        provider:IFormatProvider -> uint16

参数

s
类型： System String
表示要转换的数字的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System UInt16
与 s 中指定的数字等效的 16 位无符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 的格式不正确。
OverflowException | s 表示小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 如果 s 表示零值，则为可选符号或负号。
数字 | 一系列从 0 到 9 之间的数字。

参数是用 NumberStyles..::.Integer 样式解释的。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在负号，则 s 必须表示零值，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 参数是用 NumberStyles..::.Integer 样式解释的。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在负号，则 s 必须表示零值，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 参数是用 NumberStyles..::.Integer 样式解释的。除了字节值的十进制数字之外，只允许使用前导空格和尾随空格以及前导符号。（如果存在负号，则 s 必须表示零值，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关 s 的格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关 s 的格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。

  • 您可以传递一个自定义的 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回提供格式设置信息的 NumberFormatInfo 对象。 您可以传递一个自定义的 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

下面的示例实例化一个使用两个加号 (++) 作为正号的自定义区域性。然后它将调用 Parse(String, IFormatProvider) 方法，通过使用表示此自定义区域性和固定区域性的 CultureInfo 对象来分析字符串数组。 下面的示例实例化一个使用两个加号 (++) 作为正号的自定义区域性。然后它将调用 Parse(String, IFormatProvider) 方法，通过使用表示此自定义区域性和固定区域性的 CultureInfo 对象来分析字符串数组。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim values() As String = { " 214 ", "1,064", "(0)", "1241+", " + 214 ", " +214 ", "2153.0", "1e03", "1300.0e-2" }
      Dim whitespace As NumberStyles =  NumberStyles.AllowLeadingWhite Or NumberStyles.AllowTrailingWhite
      Dim styles() As NumberStyles = { NumberStyles.None, _
                                       whitespace, _
                                       NumberStyles.AllowLeadingSign Or NumberStyles.AllowTrailingSign Or whitespace, _
                                       NumberStyles.AllowThousands Or NumberStyles.AllowCurrencySymbol, _
                                       NumberStyles.AllowExponent Or NumberStyles.AllowDecimalPoint }

      ' Attempt to convert each number using each style combination.
      For Each value As String In values
         Console.WriteLine("Attempting to convert '{0}':", value)
         For Each style As NumberStyles In styles
            Try
               Dim number As UShort = UInt16.Parse(value, style)
               Console.WriteLine("   {0}: {1}", style, number)
            Catch e As FormatException
               Console.WriteLine("   {0}: Bad Format", style)
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    Attempting to convert ' 214 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: 214
'       Integer, AllowTrailingSign: 214
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '1,064':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: 1064
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '(0)':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '1241+':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: 1241
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert ' + 214 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert ' +214 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: 214
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '2153.0':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 2153
'
'    Attempting to convert '1e03':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 1000
'
'    Attempting to convert '1300.0e-2':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 13

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Define a custom culture that uses "++" as a positive sign.
      Dim ci As CultureInfo = New CultureInfo("")
      ci.NumberFormat.PositiveSign = "++"
      ' Create an array of cultures.
      Dim cultures() As CultureInfo = { ci, CultureInfo.InvariantCulture }
      ' Create an array of strings to parse.
      Dim values() As String = { "++1403", "-0", "+0", "+16034", _
                                 Int16.MinValue.ToString(), "14.0", "18012" }
      ' Parse the strings using each culture.
      For Each culture As CultureInfo In cultures
         Console.WriteLine("Parsing with the '{0}' culture.", culture.Name)
         For Each value As String In values
            Try
               Dim number As UShort = UInt16.Parse(value, culture)
               Console.WriteLine("   Converted '{0}' to {1}.", value, number)
            Catch e As FormatException
               Console.WriteLine("   The format of '{0}' is invalid.", value)
            Catch e As OverflowException
               Console.WriteLine("   '{0}' is outside the range of a UInt16 value.", value)
            End Try
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'       Parsing with the  culture.
'          Converted '++1403' to 1403.
'          Converted '-0' to 0.
'          The format of '+0' is invalid.
'          The format of '+16034' is invalid.
'          '-32768' is outside the range of a UInt16 value.
'          The format of '14.0' is invalid.
'          Converted '18012' to 18012.
'       Parsing with the '' culture.
'          The format of '++1403' is invalid.
'          Converted '-0' to 0.
'          Converted '+0' to 0.
'          Converted '+16034' to 16034.
'          '-32768' is outside the range of a UInt16 value.
'          The format of '14.0' is invalid.
'          Converted '18012' to 18012.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values = { " 214 ", "1,064", "(0)", "1241+", " + 214 ", " +214 ", "2153.0", "1e03", "1300.0e-2" };
      NumberStyles whitespace =  NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite;
      NumberStyles[] styles = { NumberStyles.None, whitespace,
                                NumberStyles.AllowLeadingSign | NumberStyles.AllowTrailingSign | whitespace,
                                NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol,
                                NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint };

      // Attempt to convert each number using each style combination.
      foreach (string value in values)
      {
         Console.WriteLine("Attempting to convert '{0}':", value);
         foreach (NumberStyles style in styles)
         {
            try {
               ushort number = UInt16.Parse(value, style);
               Console.WriteLine("   {0}: {1}", style, number);
            }
            catch (FormatException) {
               Console.WriteLine("   {0}: Bad Format", style);
            }
         }
         Console.WriteLine();
      }
   }
}
// The example display the following output:
//    Attempting to convert ' 214 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: 214
//       Integer, AllowTrailingSign: 214
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '1,064':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: 1064
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '(0)':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '1241+':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: 1241
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert ' + 214 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert ' +214 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: 214
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '2153.0':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 2153
//
//    Attempting to convert '1e03':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 1000
//
//    Attempting to convert '1300.0e-2':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 13

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Define a custom culture that uses "++" as a positive sign.
      CultureInfo ci = new CultureInfo("");
      ci.NumberFormat.PositiveSign = "++";
      // Create an array of cultures.
      CultureInfo[] cultures = { ci, CultureInfo.InvariantCulture };
      // Create an array of strings to parse.
      string[] values = { "++1403", "-0", "+0", "+16034",
                          Int16.MinValue.ToString(), "14.0", "18012" };
      // Parse the strings using each culture.
      foreach (CultureInfo culture in cultures)
      {
         Console.WriteLine("Parsing with the '{0}' culture.", culture.Name);
         foreach (string value in values)
         {
            try {
               ushort number = UInt16.Parse(value, culture);
               Console.WriteLine("   Converted '{0}' to {1}.", value, number);
            }
            catch (FormatException) {
               Console.WriteLine("   The format of '{0}' is invalid.", value);
            }
            catch (OverflowException) {
               Console.WriteLine("   '{0}' is outside the range of a UInt16 value.", value);
            }
         }
      }
   }
}
// The example displays the following output:
//       Parsing with the  culture.
//          Converted '++1403' to 1403.
//          Converted '-0' to 0.
//          The format of '+0' is invalid.
//          The format of '+16034' is invalid.
//          '-32768' is outside the range of a UInt16 value.
//          The format of '14.0' is invalid.
//          Converted '18012' to 18012.
//       Parsing with the '' culture.
//          The format of '++1403' is invalid.
//          Converted '-0' to 0.
//          Converted '+0' to 0.
//          Converted '+16034' to 16034.
//          '-32768' is outside the range of a UInt16 value.
//          The format of '14.0' is invalid.
//          Converted '18012' to 18012.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UInt16 结构
UInt16 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


UInt16 ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

UInt16
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
UInt16 结构

将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 16 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As UShort
[CLSCompliantAttribute(false)]
public static ushort Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned short Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> uint16

参数

s
类型： System String
表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。 表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，这些枚举值指示可出现在 s 中的样式元素。要指定的一个典型值为 NumberStyles..::.Integer。 枚举值的按位组合，这些枚举值指示可出现在 s 中的样式元素。要指定的一个典型值为 NumberStyles..::.Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System UInt16
与 s 中指定的数字等效的 16 位无符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数中允许的样式元素（例如，空白或者正号或负号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。 style 参数定义 s 参数中允许的样式元素（例如，空白或者正号或负号）以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign]digits[.fractional_digits][E[sign]exponential_digits][ws]

方括号（[ 和 ]）中的元素是可选的。如果 style 包括 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包括以下元素： 方括号（[ 和 ]）中的元素是可选的。如果 style 包括 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包括以下元素：

[ws]hexdigits[ws]

下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。（如果 s 包括一个负号并表示一个非零数字，该方法将引发 OverflowException。)如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。（如果 s 包括一个负号并表示一个非零数字，该方法将引发 OverflowException。)如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。（如果 s 包括一个负号并表示一个非零数字，该方法将引发 OverflowException。)如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
数字 | 由从 0 到 9 的数字组成的序列。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional_digits | 如果 style 包括 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果不包括，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 如果 style 包括 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果不包括，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
E | "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential_digits | 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。但是，如果 style 未包括 NumberStyles..::.AllowExponent 标志，则 fractional_digits 必须仅包含一个或多个数字 0；否则将引发 OverflowException。 小数点 (.)和 fractional_digits 元素。但是，如果 style 未包括 NumberStyles..::.AllowExponent 标志，则 fractional_digits 必须仅包含一个或多个数字 0；否则将引发 OverflowException。
NumberStyles AllowExponent | 字符"e"或"E"，用于指示指数表示法以及 exponential_digits。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | digits 之前的符号。
NumberStyles AllowTrailingSign | digits 之后的符号。
NumberStyles AllowParentheses | 位于 digits 之前和之后用于指示负值的括号。
NumberStyles AllowThousands | 组分隔符 (,) 元素。
NumberStyles AllowCurrencySymbol | 货币 ($) 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含复合数字样式 NumberStyles..::.HexNumber，其中包含两种空白标志。）

说明 说明

如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。 如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。

provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关 s 的格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是 IFormatProvider 的实现，其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关 s 的格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。

  • 您可以传递一个自定义的 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回提供格式设置信息的 NumberFormatInfo 对象。 您可以传递一个自定义的 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例使用 Parse(String, NumberStyles, IFormatProvider) 方法将数字的各种字符串表示形式转换为 16 位无符号的整数值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR" }
      Dim styles() As NumberStyles = { NumberStyles.Integer, _
                                       NumberStyles.Integer Or NumberStyles.AllowDecimalPoint }
      Dim values() As String = { "1702", "+1702.0", "+1702,0", "-1032.00", _
                                 "-1032,00", "1045.1", "1045,1" }

      ' Parse strings using each culture
      For Each cultureName As String In cultureNames
         Dim ci As New CultureInfo(cultureName)
         Console.WriteLine("Parsing strings using the {0} culture", ci.DisplayName)
         ' Use each style.
         For Each style As NumberStyles In styles
            Console.WriteLine("   Style: {0}", style.ToString())
            ' Parse each numeric string.
            For Each value As String In values
               Try
                  Console.WriteLine("      Converted '{0}' to {1}.", value, _
                                    UInt16.Parse(value, style, ci))
               Catch e As FormatException
                  Console.WriteLine("      Unable to parse '{0}'.", value)
               Catch e As OverflowException
                  Console.WriteLine("      '{0}' is out of range of the UInt16 type.", _
                                    value)
               End Try
            Next
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'       Parsing strings using the English (United States) culture
'          Style: Integer
'             Converted '1702' to 1702.
'             Unable to parse '+1702.0'.
'             Unable to parse '+1702,0'.
'             Unable to parse '-1032.00'.
'             Unable to parse '-1032,00'.
'             Unable to parse '1045.1'.
'             Unable to parse '1045,1'.
'          Style: Integer, AllowDecimalPoint
'             Converted '1702' to 1702.
'             Converted '+1702.0' to 1702.
'             Unable to parse '+1702,0'.
'             '-1032.00' is out of range of the UInt16 type.
'             Unable to parse '-1032,00'.
'             '1045.1' is out of range of the UInt16 type.
'             Unable to parse '1045,1'.
'       Parsing strings using the French (France) culture
'          Style: Integer
'             Converted '1702' to 1702.
'             Unable to parse '+1702.0'.
'             Unable to parse '+1702,0'.
'             Unable to parse '-1032.00'.
'             Unable to parse '-1032,00'.
'             Unable to parse '1045.1'.
'             Unable to parse '1045,1'.
'          Style: Integer, AllowDecimalPoint
'             Converted '1702' to 1702.
'             Unable to parse '+1702.0'.
'             Converted '+1702,0' to 1702.
'             Unable to parse '-1032.00'.
'             '-1032,00' is out of range of the UInt16 type.
'             Unable to parse '1045.1'.
'             '1045,1' is out of range of the UInt16 type.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR" };
      NumberStyles[] styles= { NumberStyles.Integer,
                               NumberStyles.Integer | NumberStyles.AllowDecimalPoint };
      string[] values = { "1702", "+1702.0", "+1702,0", "-1032.00",
                          "-1032,00", "1045.1", "1045,1" };

      // Parse strings using each culture
      foreach (string cultureName in cultureNames)
      {
         CultureInfo ci = new CultureInfo(cultureName);
         Console.WriteLine("Parsing strings using the {0} culture",
                           ci.DisplayName);
         // Use each style.
         foreach (NumberStyles style in styles)
         {
            Console.WriteLine("   Style: {0}", style.ToString());
            // Parse each numeric string.
            foreach (string value in values)
            {
               try {
                  Console.WriteLine("      Converted '{0}' to {1}.", value,
                                    UInt16.Parse(value, style, ci));
               }
               catch (FormatException) {
                  Console.WriteLine("      Unable to parse '{0}'.", value);
               }
               catch (OverflowException) {
                  Console.WriteLine("      '{0}' is out of range of the UInt16 type.",
                                    value);
               }
            }
         }
      }
   }
}
// The example displays the following output:
//       Parsing strings using the English (United States) culture
//          Style: Integer
//             Converted '1702' to 1702.
//             Unable to parse '+1702.0'.
//             Unable to parse '+1702,0'.
//             Unable to parse '-1032.00'.
//             Unable to parse '-1032,00'.
//             Unable to parse '1045.1'.
//             Unable to parse '1045,1'.
//          Style: Integer, AllowDecimalPoint
//             Converted '1702' to 1702.
//             Converted '+1702.0' to 1702.
//             Unable to parse '+1702,0'.
//             '-1032.00' is out of range of the UInt16 type.
//             Unable to parse '-1032,00'.
//             '1045.1' is out of range of the UInt16 type.
//             Unable to parse '1045,1'.
//       Parsing strings using the French (France) culture
//          Style: Integer
//             Converted '1702' to 1702.
//             Unable to parse '+1702.0'.
//             Unable to parse '+1702,0'.
//             Unable to parse '-1032.00'.
//             Unable to parse '-1032,00'.
//             Unable to parse '1045.1'.
//             Unable to parse '1045,1'.
//          Style: Integer, AllowDecimalPoint
//             Converted '1702' to 1702.
//             Unable to parse '+1702.0'.
//             Converted '+1702,0' to 1702.
//             Unable to parse '-1032.00'.
//             '-1032,00' is out of range of the UInt16 type.
//             Unable to parse '1045.1'.
//             '1045,1' is out of range of the UInt16 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


UInt16 ..::.ToString 方法

UInt16
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt16 结构

将此实例的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

UInt16 结构
UInt16 成员
System 命名空间


UInt16 ..::.ToString 方法

UInt16
.
.
::
.
ToString 方法
UInt16 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示形式，由一系列 0 到 9 之间的数字组成，不包含符号或前导零。

返回值是使用通用数值格式说明符 ("G") 和当前区域性的 NumberFormatInfo 对象进行设置格式的。UInt16 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。 返回值是使用通用数值格式说明符 ("G") 和当前区域性的 NumberFormatInfo 对象进行设置格式的。UInt16 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。

若要定义 16 位无符号整数值的字符串表示形式的格式设置，请调用 ToString(String) 方法。

下面的示例使用默认的 ToString()()() 方法显示 UInt16 值。此示例还显示通过使用许多标准格式说明符得到的 UInt16 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 UInt16 值。此示例还显示通过使用许多标准格式说明符得到的 UInt16 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 UInt16 值。此示例还显示通过使用许多标准格式说明符得到的 UInt16 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。

Module Example
   Public Sub Main()
      Dim value As UInt16 = 16324
      ' Display value using default ToString method.
      Console.WriteLine(value.ToString())
      Console.WriteLine()

      ' Define an array of format specifiers.
      Dim formats() As String = { "G", "C", "D", "F", "N", "X" }
      ' Display value using the standard format specifiers.
      For Each format As String In formats
         Console.WriteLine("{0} format specifier: {1,12}", _
                           format, value.ToString(format))
      Next
   End Sub
End Module
' The example displays the following output:
'       16324
'
'       G format specifier:        16324
'       C format specifier:   $16,324.00
'       D format specifier:        16324
'       F format specifier:     16324.00
'       N format specifier:    16,324.00
'       X format specifier:         3FC4

using System;

public class Example
{
   public static void Main()
   {
      ushort value = 16324;
      // Display value using default ToString method.
      Console.WriteLine(value.ToString());
      Console.WriteLine();

      // Define an array of format specifiers.
      string[] formats = { "G", "C", "D", "F", "N", "X" };
      // Display value using the standard format specifiers.
      foreach (string format in formats)
         Console.WriteLine("{0} format specifier: {1,12}",
                           format, value.ToString(format));
   }
}
// The example displays the following output:
//       16324
//
//       G format specifier:        16324
//       C format specifier:   $16,324.00
//       D format specifier:        16324
//       F format specifier:     16324.00
//       N format specifier:    16,324.00
//       X format specifier:         3FC4

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型


UInt16 ..::.ToString 方法 (IFormatProvider)

UInt16
.
.
::
.
ToString 方法 (IFormatProvider)
UInt16 结构

使用指定的区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由一系列 0 到 9 之间的数字组成，不包含符号或前导零。

实现

此实例使用通用数值格式说明符（“G”）进行格式设置。UInt16 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。 此实例使用通用数值格式说明符（“G”）进行格式设置。UInt16 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回提供区域性特定区域性信息的 NumberFormatInfo 对象。但是，在使用通用数值格式说明符 ("G") 设置格式时没有使用 NumberFormatInfo 的属性。 provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回提供区域性特定区域性信息的 NumberFormatInfo 对象。但是，在使用通用数值格式说明符 ("G") 设置格式时没有使用 NumberFormatInfo 的属性。 provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回提供区域性特定区域性信息的 NumberFormatInfo 对象。但是，在使用通用数值格式说明符 ("G") 设置格式时没有使用 NumberFormatInfo 的属性。

下面的示例使用多个格式提供程序设置 16 位带符号值的格式，其中包括一个用于固定区域性的格式提供程序。该示例的输出阐释了 ToString(IFormatProvider) 方法返回的格式化字符串相同，与格式提供程序无关。 下面的示例使用多个格式提供程序设置 16 位带符号值的格式，其中包括一个用于固定区域性的格式提供程序。该示例的输出阐释了 ToString(IFormatProvider) 方法返回的格式化字符串相同，与格式提供程序无关。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Define an array of CultureInfo objects.
      Dim ci() As CultureInfo = { New CultureInfo("en-US"), _
                                  New CultureInfo("fr-FR"), _
                                  CultureInfo.InvariantCulture }
      Dim value As UInt16 = 18924
      Console.WriteLine("  {0,12}   {1,12}   {2,12}", _
                        GetName(ci(0)), GetName(ci(1)), GetName(ci(2)))
      Console.WriteLine("  {0,12}   {1,12}   {2,12}", _
                        value.ToString(ci(0)), value.ToString(ci(1)), value.ToString(ci(2)))

   End Sub

   Private Function GetName(ci As CultureInfo) As String
      If ci.Equals(CultureInfo.InvariantCulture) Then
         Return "Invariant"
      Else
         Return ci.Name
      End If
   End Function
End Module
' The example displays the following output:
'         en-US          fr-FR      Invariant
'         18924          18924          18924

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Define an array of CultureInfo objects.
      CultureInfo[] ci = { new CultureInfo("en-US"),
                           new CultureInfo("fr-FR"),
                           CultureInfo.InvariantCulture };
      UInt16 value = 18924;
      Console.WriteLine("  {0,12}   {1,12}   {2,12}",
                        GetName(ci[0]), GetName(ci[1]), GetName(ci[2]));
      Console.WriteLine("  {0,12}   {1,12}   {2,12}",
                        value.ToString(ci[0]), value.ToString(ci[1]), value.ToString(ci[2]));
   }

   private static string GetName(CultureInfo ci)
   {
      if (ci.Equals(CultureInfo.InvariantCulture))
         return "Invariant";
      else
         return ci.Name;
   }
}
// The example displays the following output:
//          en-US          fr-FR      Invariant
//          18924          18924          18924

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型


UInt16 ..::.ToString 方法 (String)

UInt16
.
.
::
.
ToString 方法 (String)
UInt16 结构

使用指定的格式将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
一个数值格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 参数无效。

format 参数可以是任何有效标准数值格式说明符，或者是自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt16 对象的返回值用通用数值格式说明符（"G"）进行格式设置。如果 format 是任何其他值，则该方法将引发 FormatException。 format 参数可以是任何有效标准数值格式说明符，或者是自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt16 对象的返回值用通用数值格式说明符（"G"）进行格式设置。如果 format 是任何其他值，则该方法将引发 FormatException。 format 参数可以是任何有效标准数值格式说明符，或者是自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt16 对象的返回值用通用数值格式说明符（"G"）进行格式设置。如果 format 是任何其他值，则该方法将引发 FormatException。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关对 .NET Framework 中的格式设置支持的更多信息，请参见格式化类型。

返回的字符串的格式由当前区域性的 NumberFormatInfo 对象确定。根据 format 参数，此对象可以控制输出字符串中的组分隔符和小数点符号等符号。若要为不同于当前区域性的区域性提供格式设置信息，请调用 ToString(String, IFormatProvider) 重载。 返回的字符串的格式由当前区域性的 NumberFormatInfo 对象确定。根据 format 参数，此对象可以控制输出字符串中的组分隔符和小数点符号等符号。若要为不同于当前区域性的区域性提供格式设置信息，请调用 ToString(String, IFormatProvider) 重载。 返回的字符串的格式由当前区域性的 NumberFormatInfo 对象确定。根据 format 参数，此对象可以控制输出字符串中的组分隔符和小数点符号等符号。若要为不同于当前区域性的区域性提供格式设置信息，请调用 ToString(String, IFormatProvider) 重载。

下面的示例使用每个标准格式字符串和某些自定义格式字符串来显示一个 16 位无符号的整数值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim value As UShort = 21708
      Dim specifiers() As String = { "G", "C", "D3", "E2", "e3", "F", _
                                     "N", "P", "X", "000000.0", "#.0", _
                                     "00000000;(0);**Zero**" }

      For Each specifier As String In specifiers
         Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
      Next
   End Sub
End Module
' The example displays the following output:
'       G: 21708
'       C: $21,708.00
'       D3: 21708
'       E2: 2.17E+004
'       e3: 2.171e+004
'       F: 21708.00
'       N: 21,708.00
'       P: 2,170,800.00 %
'       X: 54CC
'       000000.0: 021708.0
'       #.0: 21708.0
'       00000000;(0);**Zero**: 00021708

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      ushort value = 21708;
      string[] specifiers = { "G", "C", "D3", "E2", "e3", "F",
                              "N", "P", "X", "000000.0", "#.0",
                              "00000000;(0);**Zero**" };

      foreach (string specifier in specifiers)
         Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
   }
}
// The example displays the following output:
//       G: 21708
//       C: $21,708.00
//       D3: 21708
//       E2: 2.17E+004
//       e3: 2.171e+004
//       F: 21708.00
//       N: 21,708.00
//       P: 2,170,800.00 %
//       X: 54CC
//       000000.0: 021708.0
//       #.0: 21708.0
//       00000000;(0);**Zero**: 00021708

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
如何：用前导零填充数字


UInt16 ..::.ToString 方法 (String, IFormatProvider)

UInt16
.
.
::
.
ToString 方法 (String, IFormatProvider)
UInt16 结构

使用指定的格式和区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
一个数值格式字符串。
provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式形式，由 format 和 provider 指定。

实现

异常 | 条件
FormatException | format 无效。

format 参数可以是任何有效标准数值格式说明符，或者是自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt16 对象的返回值用通用数值格式说明符（"G"）进行格式设置。如果 format 是任何其他值，则该方法将引发 FormatException。 format 参数可以是任何有效标准数值格式说明符，或者是自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt16 对象的返回值用通用数值格式说明符（"G"）进行格式设置。如果 format 是任何其他值，则该方法将引发 FormatException。 format 参数可以是任何有效标准数值格式说明符，或者是自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt16 对象的返回值用通用数值格式说明符（"G"）进行格式设置。如果 format 是任何其他值，则该方法将引发 FormatException。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt16 值格式的信息，如组分隔符号或小数点符号。有三种使用 provider 参数向 ToString(String, IFormatProvider) 方法提供格式设置信息的方式： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt16 值格式的信息，如组分隔符号或小数点符号。有三种使用 provider 参数向 ToString(String, IFormatProvider) 方法提供格式设置信息的方式： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt16 值格式的信息，如组分隔符号或小数点符号。有三种使用 provider 参数向 ToString(String, IFormatProvider) 方法提供格式设置信息的方式： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt16 值格式的信息，如组分隔符号或小数点符号。有三种使用 provider 参数向 ToString(String, IFormatProvider) 方法提供格式设置信息的方式： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt16 值格式的信息，如组分隔符号或小数点符号。有三种使用 provider 参数向 ToString(String, IFormatProvider) 方法提供格式设置信息的方式：

  • 您可以传递一个 CultureInfo 对象，表示提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供针对该区域性的数值格式设置信息。 您可以传递一个 CultureInfo 对象，表示提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供针对该区域性的数值格式设置信息。

  • 可以传递提供数值格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供数值格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回提供格式设置信息的 NumberFormatInfo 对象。 可以传递一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回的字符串的格式设置基于当前区域性的 NumberFormatInfo 对象。

下面的示例使用标准数字格式说明符和许多特定的 CultureInfo 对象来显示一个 16 位无符号的整数值。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Define cultures whose formatting conventions are to be used.
      Dim cultures() As CultureInfo = {CultureInfo.CreateSpecificCulture("en-US"), _
                                       CultureInfo.CreateSpecificCulture("fr-FR"), _
                                       CultureInfo.CreateSpecificCulture("es-ES") }
      Dim specifiers() As String = {"G", "C", "D4", "E2", "F", "N", "P", "X2"}
      Dim value As UShort = 22042

      For Each specifier As String In specifiers
         For Each culture As CultureInfo In Cultures
            Console.WriteLine("{0,2} format using {1} culture: {2, 16}", _
                              specifier, culture.Name, _
                              value.ToString(specifier, culture))

         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'        G format using en-US culture:            22042
'        G format using fr-FR culture:            22042
'        G format using es-ES culture:            22042
'
'        C format using en-US culture:       $22,042.00
'        C format using fr-FR culture:      22 042,00 �
'        C format using es-ES culture:      22.042,00 �
'
'       D4 format using en-US culture:            22042
'       D4 format using fr-FR culture:            22042
'       D4 format using es-ES culture:            22042
'
'       E2 format using en-US culture:        2.20E+004
'       E2 format using fr-FR culture:        2,20E+004
'       E2 format using es-ES culture:        2,20E+004
'
'        F format using en-US culture:         22042.00
'        F format using fr-FR culture:         22042,00
'        F format using es-ES culture:         22042,00
'
'        N format using en-US culture:        22,042.00
'        N format using fr-FR culture:        22 042,00
'        N format using es-ES culture:        22.042,00
'
'        P format using en-US culture:   2,204,200.00 %
'        P format using fr-FR culture:   2 204 200,00 %
'        P format using es-ES culture:   2.204.200,00 %
'
'       X2 format using en-US culture:             561A
'       X2 format using fr-FR culture:             561A
'       X2 format using es-ES culture:             561A

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Define cultures whose formatting conventions are to be used.
      CultureInfo[] cultures = { CultureInfo.CreateSpecificCulture("en-US"),
                                 CultureInfo.CreateSpecificCulture("fr-FR"),
                                 CultureInfo.CreateSpecificCulture("es-ES") };
      string[] specifiers = {"G", "C", "D4", "E2", "F", "N", "P", "X2"};
      ushort value = 22042;

      foreach (string specifier in specifiers)
      {
         foreach (CultureInfo culture in cultures)
            Console.WriteLine("{0,2} format using {1} culture: {2, 16}",
                              specifier, culture.Name,
                              value.ToString(specifier, culture));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//        G format using en-US culture:            22042
//        G format using fr-FR culture:            22042
//        G format using es-ES culture:            22042
//
//        C format using en-US culture:       $22,042.00
//        C format using fr-FR culture:      22 042,00 �
//        C format using es-ES culture:      22.042,00 �
//
//       D4 format using en-US culture:            22042
//       D4 format using fr-FR culture:            22042
//       D4 format using es-ES culture:            22042
//
//       E2 format using en-US culture:        2.20E+004
//       E2 format using fr-FR culture:        2,20E+004
//       E2 format using es-ES culture:        2,20E+004
//
//        F format using en-US culture:         22042.00
//        F format using fr-FR culture:         22042,00
//        F format using es-ES culture:         22042,00
//
//        N format using en-US culture:        22,042.00
//        N format using fr-FR culture:        22 042,00
//        N format using es-ES culture:        22.042,00
//
//        P format using en-US culture:   2,204,200.00 %
//        P format using fr-FR culture:   2 204 200,00 %
//        P format using es-ES culture:   2.204.200,00 %
//
//       X2 format using en-US culture:             561A
//       X2 format using fr-FR culture:             561A
//       X2 format using es-ES culture:             561A

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt16 结构
UInt16 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
如何：用前导零填充数字


UInt16 ..::.TryParse 方法

UInt16
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt16 结构

将数字的字符串表示形式转换为其等效的 16 位无符号整数。一个指示转换是否成功的返回值。 将数字的字符串表示形式转换为其等效的 16 位无符号整数。一个指示转换是否成功的返回值。

名称 说明
页首

参考

UInt16 结构
UInt16 成员
System 命名空间
Parse


UInt16 ..::.TryParse 方法 (String, UInt16%)

UInt16
.
.
::
.
TryParse 方法 (String, UInt16%)
UInt16 结构

尝试将数字的字符串表示形式转换为等效的 16 位无符号整数。一个指示转换是否成功的返回值。 尝试将数字的字符串表示形式转换为等效的 16 位无符号整数。一个指示转换是否成功的返回值。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 TryParse(String, Int32 )。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As UShort _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool TryParse(
    string s,
    out ushort result
)
[CLSCompliantAttribute(false)]
public:
static bool TryParse(
    String^ s,
    [OutAttribute] unsigned short% result
)
[<CLSCompliantAttribute(false)>]
static member TryParse :
        s:string *
        result:uint16 byref -> bool

参数

s
类型： System String
表示要转换的数字的字符串。
result
类型： System UInt16 %
当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 16 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 16 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 16 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue，则转换失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 16 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue，则转换失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 s，则为 true；否则为 false。

TryParse(String, UInt16%) 方法类似于 Parse(String) 方法，不同之处在于该方法在转换失败时不引发异常。该方法可以消除在 s 无效因而无法成功分析的情况下使用异常处理来测试 FormatException 的需要。 TryParse(String, UInt16%) 方法类似于 Parse(String) 方法，不同之处在于该方法在转换失败时不引发异常。该方法可以消除在 s 无效因而无法成功分析的情况下使用异常处理来测试 FormatException 的需要。

s 参数应该是以下形式的十进制数字的字符串表示形式：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。
数字 | 一系列从 0 到 9 之间的十进制数字。
说明 说明

s 参数指定的字符串不能包含任何组分隔符或小数点分隔符，并且它不能具有小数部分。

使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt16%) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt16%) 方法。 使用 NumberStyles..::.Integer 样式解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt16%) 方法。

s 参数是使用当前系统区域性的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。 s 参数是使用当前系统区域性的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。

此重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请改为调用 TryParse(String, NumberStyles, IFormatProvider, UInt16%) 重载。 此重载将 s 参数中的所有数字解释为十进制数字。若要分析十六进制数的字符串表示形式，请改为调用 TryParse(String, NumberStyles, IFormatProvider, UInt16%) 重载。

下面的示例为字符串数组中的每个元素调用 TryParse(String, UInt16%) 方法一次。

Dim numericStrings() As String = {"1293.8", "+1671.7", "28347.", _
                                  "   33113684  ", "(0)", "-0", "+1293617", _
                                  "18-", "119870", "31,024", "  3127094 ", _
                                  "0070000" }
Dim number As UInteger
For Each numericString As String In numericStrings
   If UInt32.TryParse(numericString, number) Then
      Console.WriteLine("Converted '{0}' to {1}.", numericString, number)
   Else
      Console.WriteLine("Cannot convert '{0}' to a UInt32.", numericString)
   End If
Next
' The example displays the following output:
'       Cannot convert '1293.8' to a UInt32.
'       Cannot convert '+1671.7' to a UInt32.
'       Cannot convert '28347.' to a UInt32.
'       Converted '   33113684  ' to 33113684.
'       Cannot convert '(0)' to a UInt32.
'       Converted '-0' to 0.
'       Converted '+1293617' to 1293617.
'       Cannot convert '18-' to a UInt32.
'       Converted '119870' to 119870.
'       Cannot convert '31,024' to a UInt32.
'       Converted '  3127094 ' to 3127094.
'       Converted '0070000' to 70000.

string[] numericStrings = { "1293.8", "+1671.7", "28347.",
                            "   33113684  ", "(0)", "-0", "+1293617",
                            "18-", "119870", "31,024", "  3127094 ",
                            "00700000" };
uint number;
foreach (string numericString in numericStrings)
{
   if (UInt32.TryParse(numericString, out number))
      Console.WriteLine("Converted '{0}' to {1}.", numericString, number);
   else
      Console.WriteLine("Cannot convert '{0}' to a UInt32.", numericString);
}
// The example displays the following output:
//       Cannot convert '1293.8' to a UInt32.
//       Cannot convert '+1671.7' to a UInt32.
//       Cannot convert '28347.' to a UInt32.
//       Converted '   33113684  ' to 33113684.
//       Cannot convert '(0)' to a UInt32.
//       Converted '-0' to 0.
//       Converted '+1293617' to 1293617.
//       Cannot convert '18-' to a UInt32.
//       Converted '119870' to 119870.
//       Cannot convert '31,024' to a UInt32.
//       Converted '  3127094 ' to 3127094.
//       Converted '0070000' to 70000.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UInt16 结构
UInt16 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


UInt16 ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, UInt16%)

UInt16
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, UInt16%)
UInt16 结构

尝试将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 16 位无符号整数。一个指示转换是否成功的返回值。 尝试将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 16 位无符号整数。一个指示转换是否成功的返回值。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 TryParse(String, Int32 )。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As UShort _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out ushort result
)
[CLSCompliantAttribute(false)]
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] unsigned short% result
)
[<CLSCompliantAttribute(false)>]
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:uint16 byref -> bool

参数

s
类型： System String
表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。 表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的一个按位组合，指示 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。 枚举值的一个按位组合，指示 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
result
类型： System UInt16 %
当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 16 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 16 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 16 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 UInt16..::.MinValue 或大于 UInt16..::.MaxValue，则转换会失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。

TryParse(String, NumberStyles, IFormatProvider, UInt16%) 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于该方法在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse(String, NumberStyles, IFormatProvider, UInt16%) 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于该方法在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][E[sign]exponential_digits][ws]

方括号（“[”和“]”）中的项是可选的。或者，如果 style 参数包含 AllowHexSpecifier，s 参数可能包含以下元素： 方括号（“[”和“]”）中的项是可选的。或者，如果 style 参数包含 AllowHexSpecifier，s 参数可能包含以下元素：

[ws]hexdigits[ws]

下表描述每个元素。

ws

可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。

$

区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。

sign

一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。

数字

由从 0 到 9 的数字组成的序列。

,

区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的组分隔符可以出现在 s 中。

.

区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。

fractional_digits

出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。

E

"e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 "e"或"E"字符，指示用指数（科学型）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。

exponential_digits

由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。

hexdigits

由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。大多数剩余的 NumberStyles 成员控件元素可能（但不是必须）存在于此输入字符串中。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | 值中允许的除数字之外的元素
None | 仅十进制数字。
AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。
AllowExponent | 字符"e"或"E"，用于指示指数表示法以及 exponential_digits。如果 s 表示使用指数表示法的数字，则不能具有非零的小数部分。 字符"e"或"E"，用于指示指数表示法以及 exponential_digits。如果 s 表示使用指数表示法的数字，则不能具有非零的小数部分。
AllowLeadingWhite | 位于 s 的开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 digits 之前的 sign 元素。
AllowTrailingSign | 位于 digits 之后的 sign 元素。
AllowParentheses | 采用在括号内包含零数值的形式的 sign 元素。
AllowThousands | 组分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。 所有元素。但是，s 不能表示十六进制数字，也不能表示使用指数表示法的数字。
Float | 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign，以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign，以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、组分隔符 (,) 和小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数字。 所有元素。但是，s 不能表示十六进制数字。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。）

说明 说明

如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。 如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 s 格式的区域性特定信息。provider 参数可以是以下任意一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 s 格式的区域性特定信息。provider 参数可以是以下任意一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 s 格式的区域性特定信息。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供针对该区域性的数值格式设置信息。 一个 CultureInfo 对象，表示提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，该对象提供针对该区域性的数值格式设置信息。

  • 一个 NumberFormatInfo 对象，它提供数值格式设置信息。（其 GetFormat 实现仅返回它自身。） 一个 NumberFormatInfo 对象，它提供数值格式设置信息。（其 GetFormat 实现仅返回它自身。）

  • 一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回提供格式设置信息的 NumberFormatInfo 对象。 一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回提供格式设置信息的 NumberFormatInfo 对象。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例将 TryParse(String, NumberStyles, IFormatProvider, UInt16%) 方法与许多不同的字符串和 NumberStyles 值一起调用。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim numericString As String
      Dim styles As NumberStyles

      numericString = "10603"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)

      numericString = "-10603"
      styles = NumberStyles.None
      CallTryParse(numericString, styles)

      numericString = "29103.00"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "10345.72"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "2210E-01"
      styles = NumberStyles.Integer Or NumberStyles.AllowExponent
      CallTryParse(numericString, styles)

      numericString = "9112E-01"
      CallTryParse(numericString, styles)

      numericString = "312E01"
      CallTryParse(numericString, styles)

      numericString = "FFC8"
      CallTryParse(numericString, NumberStyles.HexNumber)

      numericString = "0x8F8C"
      CallTryParse(numericString, NumberStyles.HexNumber)
   End Sub

   Private Sub CallTryParse(stringToConvert As String, styles AS NumberStyles)
      Dim number As UShort
      Dim result As Boolean = UInt16.TryParse(stringToConvert, styles, _
                                              CultureInfo.InvariantCulture, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
      Else
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           Convert.ToString(stringToConvert))
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '10603' to 10603.
'       Attempted conversion of '-10603' failed.
'       Converted '29103.00' to 29103.
'       Attempted conversion of '10345.72' failed.
'       Converted '2210E-01' to 221.
'       Attempted conversion of '9112E-01' failed.
'       Converted '312E01' to 3120.
'       Converted 'FFC8' to 65480.
'       Attempted conversion of '0x8F8C' failed.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string numericString;
      NumberStyles styles;

      numericString = "10603";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      numericString = "-10603";
      styles = NumberStyles.None;
      CallTryParse(numericString, styles);

      numericString = "29103.00";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "10345.72";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "2210E-01";
      styles = NumberStyles.Integer | NumberStyles.AllowExponent;
      CallTryParse(numericString, styles);

      numericString = "9112E-01";
      CallTryParse(numericString, styles);

      numericString = "312E01";
      CallTryParse(numericString, styles);

      numericString = "FFC8";
      CallTryParse(numericString, NumberStyles.HexNumber);

      numericString = "0x8F8C";
      CallTryParse(numericString, NumberStyles.HexNumber);
   }

   private static void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      ushort number;
      bool result = UInt16.TryParse(stringToConvert, styles,
                                   CultureInfo.InvariantCulture, out number);
      if (result)
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
      else
         Console.WriteLine("Attempted conversion of '{0}' failed.",
                           Convert.ToString(stringToConvert));
   }
}
// The example displays the following output:
//       Converted '10603' to 10603.
//       Attempted conversion of '-10603' failed.
//       Converted '29103.00' to 29103.
//       Attempted conversion of '10345.72' failed.
//       Converted '2210E-01' to 221.
//       Attempted conversion of '9112E-01' failed.
//       Converted '312E01' to 3120.
//       Converted 'FFC8' to 65480.
//       Attempted conversion of '0x8F8C' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UInt16 结构
UInt16 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


UInt32 结构

UInt32 结构
成员

表示 32 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Int64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public Structure UInt32 _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of UInteger),  _
    IEquatable(Of UInteger)
[SerializableAttribute]
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public struct UInt32 : IComparable, IFormattable,
    IConvertible, IComparable<uint>, IEquatable<uint>
[SerializableAttribute]
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public value class UInt32 : IComparable,
    IFormattable, IConvertible, IComparable<unsigned int>, IEquatable<unsigned int>
[<SealedAttribute>]
[<SerializableAttribute>]
[<CLSCompliantAttribute(false)>]
[<ComVisibleAttribute(true)>]
type UInt32 =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<uint32>
        interface IEquatable<uint32>
    end

UInt32 值类型表示值介于 0 到 4,294,967,295 之间的无符号整数。

重要说明 重要事项

UInt32 类型不符合 CLS。符合 CLS 的替代类型是 Int64。可以改用 Int32 来替换从零到 MaxValue 范围内的 UInt32 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 UInt32 类型不符合 CLS。符合 CLS 的替代类型是 Int64。可以改用 Int32 来替换从零到 MaxValue 范围内的 UInt32 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 UInt32 类型不符合 CLS。符合 CLS 的替代类型是 Int64。可以改用 Int32 来替换从零到 MaxValue 范围内的 UInt32 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 UInt32 类型不符合 CLS。符合 CLS 的替代类型是 Int64。可以改用 Int32 来替换从零到 MaxValue 范围内的 UInt32 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。

UInt32 为比较该类型的实例、将实例值转换为它的 String 表示形式以及将数字的 String 表示形式转换为该类型的实例提供了相应的方法。

有关格式规范代码如何控制值类型的 String 表示形式的信息，请参见格式化类型。

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 成员
System 命名空间
Int32


UInt32 成员

UInt32 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt32 结构

表示 32 位无符号整数。

UInt32 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UInt32 结构
System 命名空间


UInt32 字段

UInt32 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt32 结构

UInt32 类型公开以下成员。

名称 说明
页首

参考

UInt32 结构
System 命名空间


UInt32 ..::.MaxValue 字段

UInt32
.
.
::
.
MaxValue 字段
UInt32 结构

表示 UInt32 的最大可能值。此字段为常数。 表示 UInt32 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As UInteger
public const uint MaxValue
public:
literal unsigned int MaxValue
static val mutable MaxValue: uint32

此常数的值为 4,294,967,295；即十六进制的 0xFFFFFFFF。

下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Int64 值是否在 UInt32 类型的范围之内。此验证可防止在运行时发生 OverflowException。 下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Int64 值是否在 UInt32 类型的范围之内。此验证可防止在运行时发生 OverflowException。

Dim longValue As Long = Long.MaxValue \ 2
Dim integerValue As UInteger

If longValue <= UInteger.MaxValue AndAlso _
   longValue >= UInteger.MinValue Then
   integerValue = CUInt(longValue)
   Console.WriteLine("Converted long integer value to {0:n0}.", _
                     integerValue)
Else
   Dim rangeLimit As UInteger
   Dim relationship As String

   If longValue > UInteger.MaxValue Then
      rangeLimit = UInteger.MaxValue
      relationship = "greater"
   Else
      rangeLimit = UInteger.MinValue
      relationship = "less"
   End If

   Console.WriteLine("Conversion failure: {0:n0} is {1} than {2:n0}.", _
                     longValue, _
                     relationship, _
                     rangeLimit)
End If

long longValue = long.MaxValue / 2;
uint integerValue;

if (longValue <= uint.MaxValue &&
    longValue >= uint.MinValue)
{
   integerValue = (uint) longValue;
   Console.WriteLine("Converted long integer value to {0:n0}.",
                     integerValue);
}
else
{
   uint rangeLimit;
   string relationship;

   if (longValue > uint.MaxValue)
   {
      rangeLimit = uint.MaxValue;
      relationship = "greater";
   }
   else
   {
      rangeLimit = uint.MinValue;
      relationship = "less";
   }

   Console.WriteLine("Conversion failure: {0:n0} is {1} than {2:n0}",
                     longValue,
                     relationship,
                     rangeLimit);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间
MinValue


UInt32 ..::.MinValue 字段

UInt32
.
.
::
.
MinValue 字段
UInt32 结构

表示 UInt32 的最小可能值。此字段为常数。 表示 UInt32 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As UInteger
public const uint MinValue
public:
literal unsigned int MinValue
static val mutable MinValue: uint32

此常数的值是 0。

下面的示例演示如何使用 MinValue 字段显示 UInt32 变量的最小可能值。

   Public Class Temperature
        ' The value holder
        Protected m_value As UInteger

        Public Shared ReadOnly Property MinValue As UInteger
            Get
                Return UInt32.MinValue
            End Get
        End Property

        Public Shared ReadOnly Property MaxValue As UInteger
            Get
                Return UInt32.MaxValue
            End Get
        End Property

        Public Property Value As UInteger
            Get
                Return Me.m_value
            End Get
            Set
                Me.m_value = value
            End Set
        End Property
   End Class

    public class Temperature {
        public static uint MinValue {
            get {
                return UInt32.MinValue;
            }
        }

        public static uint MaxValue {
            get {
                return UInt32.MaxValue;
            }
        }

        // The value holder
        protected uint m_value;

        public uint Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }
    }

   public ref class Temperature
   {
   public:
      static property UInt32 MinValue
      {
         UInt32 get()
         {
            return UInt32::MinValue;
         }
      }

      static property UInt32 MaxValue
      {
         UInt32 get()
         {
            return UInt32::MaxValue;
         }
      }

   protected:
      // The value holder
      UInt32 m_value;

   public:
      property UInt32 Value
      {
         UInt32 get()
         {
            return m_value;
         }
         void set( UInt32 value )
         {
            m_value = value;
         }
      }
   };
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间
MaxValue


UInt32 方法

UInt32 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt32 结构

UInt32 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

UInt32 结构
System 命名空间


UInt32 ..::.CompareTo 方法

UInt32
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt32 结构

将此实例与指定的对象或 UInt32 进行比较，并返回二者相对值的指示。

名称 说明
页首

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.CompareTo 方法 (Object)

UInt32
.
.
::
.
CompareTo 方法 (Object)
UInt32 结构

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 UInt32。

无论 UInt32 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 参数必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是 UInt32 的实例；否则将引发异常。

下面的代码示例说明了 CompareTo 方法。

    Public Class Temperature : Implements IComparable
        ' The value holder
        Protected m_value As UInteger

        ''' <summary>
        ''' IComparable.CompareTo implementation.
        ''' </summary>
        Public Function CompareTo(obj As Object) As Integer _
               Implements IComparable.CompareTo

            If TypeOf(obj) Is Temperature Then
                Dim temp As Temperature = DirectCast(obj, Temperature)

                Return m_value.CompareTo(temp.m_value)
            End If

            Throw New ArgumentException("object is not a Temperature")
        End Function

        Public Property Value As UInteger
            Get
                Return m_value
            End Get
            Set
                Me.m_value = value
            End Set
        End Property
    End Class

    public class Temperature : IComparable {
        /// <summary>
        /// IComparable.CompareTo implementation.
        /// </summary>
        public int CompareTo(object obj) {
            if(obj is Temperature) {
                Temperature temp = (Temperature) obj;

                return m_value.CompareTo(temp.m_value);
            }

            throw new ArgumentException("object is not a Temperature");
        }

        // The value holder
        protected uint m_value;

        public uint Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }
    }

   public ref class Temperature: public IComparable
   {
   public:
      /// <summary>
      /// IComparable.CompareTo implementation.
      /// </summary>
      virtual int CompareTo( Object^ obj )
      {
         if ( (Temperature^)( obj ) )
         {
            Temperature^ temp = (Temperature^)( obj );

            return m_value.CompareTo( temp->m_value );
         }

         throw gcnew ArgumentException( "object is not a Temperature" );
      }

   protected:
      // The value holder
      UInt32 m_value;

   public:
      property UInt32 Value
      {
         UInt32 get()
         {
            return m_value;
         }
         void set( UInt32 value )
         {
            m_value = value;
         }
      }
   };
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
CompareTo 重载
System 命名空间
Equals


UInt32 ..::.CompareTo 方法 (UInt32)

UInt32
.
.
::
.
CompareTo 方法 (UInt32)
UInt32 结构

将此实例与指定的 32 位无符号整数进行比较并返回对其相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As UInteger _ ) As Integer
public int CompareTo( uint value )
public: virtual int CompareTo( unsigned int value ) sealed
abstract CompareTo : value:uint32 -> int override CompareTo : value:uint32 -> int
参数
value
类型： System UInt32
要比较的无符号整数。
返回值
类型： System Int32
一个有符号数字，该数字指示此实例与
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 UInt32..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的代码示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
CompareTo 重载
System 命名空间
Equals


UInt32 ..::.Equals 方法

UInt32
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt32 结构

返回一个值，该值指示此实例是否与指定的对象或 UInt32 相等。

名称 说明
页首

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.Equals 方法 (Object)

UInt32
.
.
::
.
Equals 方法 (Object)
UInt32 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 UInt32 的实例并且等于此实例的值，则为 true；否则为 false。

下面的代码示例说明了 Equals 方法。

Dim myVariable1 As UInt32 = UInt32.Parse(20)
Dim myVariable2 As UInt32 = UInt32.Parse(20)

' Display the declaring type.
Console.WriteLine(ControlChars.NewLine + "Type of 'myVariable1' is '{0}' and" +  _
         " value is :{1}", myVariable1.GetType().ToString(), myVariable1.ToString())
Console.WriteLine("Type of 'myVariable2' is '{0}' and" +  _
      " value is :{1}", myVariable2.GetType().ToString(), myVariable2.ToString())
' Compare 'myVariable1' instance with 'myVariable2' Object.
If myVariable1.Equals(myVariable2) Then
   Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and" +  _
      " 'myVariable2' are equal")
Else
   Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and" +  _
         " 'myVariable2' are not equal")
End If

UInt32 myVariable1 = 20;
UInt32 myVariable2 = 20;

// Display the declaring type.
Console.WriteLine("\nType of 'myVariable1' is '{0}' and"+
     " value is :{1}",myVariable1.GetType(), myVariable1);
Console.WriteLine("Type of 'myVariable2' is '{0}' and"+
     " value is :{1}",myVariable2.GetType(), myVariable2);

// Compare 'myVariable1' instance with 'myVariable2' Object.
if( myVariable1.Equals( myVariable2 ) )
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are equal");
else
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are not equal");

UInt32 myVariable1 = 20;
UInt32 myVariable2 = 20;

// Display the declaring type.
Console::WriteLine( "\nType of 'myVariable1' is '{0}' and  value is : {1}", myVariable1.GetType(), myVariable1 );
Console::WriteLine( "Type of 'myVariable2' is '{0}' and  value is : {1}", myVariable2.GetType(), myVariable2 );

// Compare 'myVariable1' instance with 'myVariable2' Object.
if ( myVariable1.Equals( myVariable2 ) )
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are equal" );
else
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are not equal" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
Equals 重载
System 命名空间
CompareTo


UInt32 ..::.Equals 方法 (UInt32)

UInt32
.
.
::
.
Equals 方法 (UInt32)
UInt32 结构

返回一个值，该值指示此实例是否与指定的 UInt32 相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As UInteger _
) As Boolean
public bool Equals(
    uint obj
)
public:
virtual bool Equals(
    unsigned int obj
) sealed
abstract Equals :
        obj:uint32 -> bool
override Equals :
        obj:uint32 -> bool

参数

obj
类型： System UInt32
要与此实例进行比较的值。

返回值

类型： System Boolean
如果 obj 的值与此实例相同，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
Equals 重载
System 命名空间


UInt32 ..::.GetHashCode 方法

UInt32
.
.
::
.
GetHashCode 方法
UInt32 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.GetTypeCode 方法

UInt32
.
.
::
.
GetTypeCode 方法
UInt32 结构

返回值类型 UInt32 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.UInt32。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间
TypeCode


UInt32 ..::.IConvertible ..::.ToBoolean 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToByte 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToChar 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
当前实例的值，已转换为 Char。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToDateTime 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToDecimal 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
当前实例的值，已转换为 Decimal。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToDouble 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，已转换为 Double。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToInt16 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，已转换为 Int16。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToInt32 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，已转换为 Int32。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToInt64 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，已转换为 Int64。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToSByte 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，已转换为 SByte。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToSingle 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，已转换为 Single。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToType 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要将此 UInt32 值转换为的类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的区域性特定信息。

返回值

类型： System Object
当前实例的值，已转换为 type。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToUInt16 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，已转换为 UInt16。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToUInt32 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，未更改。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.IConvertible ..::.ToUInt64 方法

UInt32
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
UInt32 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，已转换为 UInt64。

实现

此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(UInt32) 方法。 此成员是显式接口成员的实现。它只能在 UInt32 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt64(UInt32) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.Parse 方法

UInt32
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt32 结构

将数字的字符串表示形式转换为它的等效 32 位无符号整数。

名称 说明
页首

参考

UInt32 结构
UInt32 成员
System 命名空间
TryParse


UInt32 ..::.Parse 方法 (String)

UInt32
.
.
::
.
Parse 方法 (String)
UInt32 结构

将数字的字符串表示形式转换为它的等效 32 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint Parse(
    string s
)
[CLSCompliantAttribute(false)]
public:
static unsigned int Parse(
    String^ s
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string -> uint32

参数

s
类型： System String
一个字符串，表示要转换的数字。

返回值

类型： System UInt32
与 s 中包含的数字等效的 32 位无符号整数。
异常 | 条件
ArgumentNullException | s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 参数的格式不正确。
OverflowException | s 参数表示小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue 的数字。

s 参数应该是以下形式的数字字符串表示形式。

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。但是，只能对零使用负号；否则，该方法将引发 OverflowException。
digits | 一系列从 0 到 9 之间的数字。任何前导零都将被忽略。 一系列从 0 到 9 之间的数字。任何前导零都将被忽略。
说明 说明

s 参数指定的字符串使用 NumberStyles..::.Integer 样式来进行解释。它不能包含任何组分隔符或小数分隔符，也不能有小数部分。 s 参数指定的字符串使用 NumberStyles..::.Integer 样式来进行解释。它不能包含任何组分隔符或小数分隔符，也不能有小数部分。

s 参数是使用针对当前系统区域性初始化的 System.Globalization..::.NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息来分析字符串，请使用 Parse(String, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 System.Globalization..::.NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息来分析字符串，请使用 Parse(String, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 System.Globalization..::.NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息来分析字符串，请使用 Parse(String, IFormatProvider) 方法。

下面的示例使用 Parse(String) 方法分析一个字符串值数组。

Dim values() As String = { "+13230", "-0", "1,390,146", "$190,235,421,127", _
                           "0xFA1B", "163042", "-10", "14065839182", _
                           "16e07", "134985.0", "-12034" }
For Each value As String In values
   Try
      Dim number As UInteger = UInt32.Parse(value)
      Console.WriteLine("{0} --> {1}", value, number)
   Catch e As FormatException
      Console.WriteLine("{0}: Bad Format", value)
   Catch e As OverflowException
      Console.WriteLine("{0}: Overflow", value)
   End Try
Next
' The example displays the following output:
'       +13230 --> 13230
'       -0 --> 0
'       1,390,146: Bad Format
'       $190,235,421,127: Bad Format
'       0xFA1B: Bad Format
'       163042 --> 163042
'       -10: Overflow
'       14065839182: Overflow
'       16e07: Bad Format
'       134985.0: Bad Format
'       -12034: Overflow

string[] values = { "+13230", "-0", "1,390,146", "$190,235,421,127",
                    "0xFA1B", "163042", "-10", "14065839182",
                    "16e07", "134985.0", "-12034" };
foreach (string value in values)
{
   try {
      uint number = UInt32.Parse(value);
      Console.WriteLine("{0} --> {1}", value, number);
   }
   catch (FormatException) {
      Console.WriteLine("{0}: Bad Format", value);
   }
   catch (OverflowException) {
      Console.WriteLine("{0}: Overflow", value);
   }
}
// The example displays the following output:
//       +13230 --> 13230
//       -0 --> 0
//       1,390,146: Bad Format
//       $190,235,421,127: Bad Format
//       0xFA1B: Bad Format
//       163042 --> 163042
//       -10: Overflow
//       14065839182: Overflow
//       16e07: Bad Format
//       134985.0: Bad Format
//       -12034: Overflow

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


UInt32 ..::.Parse 方法 (String, NumberStyles)

UInt32
.
.
::
.
Parse 方法 (String, NumberStyles)
UInt32 结构

将数字的指定样式的字符串表示形式转换为其等效的 32 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint Parse(
    string s,
    NumberStyles style
)
[CLSCompliantAttribute(false)]
public:
static unsigned int Parse(
    String^ s,
    NumberStyles style
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        style:NumberStyles -> uint32

参数

s
类型： System String
一个字符串，表示要转换的数字。该字符串使用由 style 参数指定的样式来进行解释。 一个字符串，表示要转换的数字。该字符串使用由 style 参数指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，这些枚举值指定 s 所允许的格式。要指定的一个典型值为 Integer。 枚举值的按位组合，这些枚举值指定 s 所允许的格式。要指定的一个典型值为 Integer。

返回值

类型： System UInt32
与 s 中指定的数字等效的 32 位无符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格、正负号、组分隔符或小数点符号）。style必须是 NumberStyles 枚举中位标志的组合。当 s 包含十六进制的字符串表现形式、当 s 代表的数字系统（十进制或十六进制）仅在运行时才能知道时或者当希望在 s 中禁用空格或正负符号时，style 参数将使得此方法重载非常有用。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格、正负号、组分隔符或小数点符号）。style必须是 NumberStyles 枚举中位标志的组合。当 s 包含十六进制的字符串表现形式、当 s 代表的数字系统（十进制或十六进制）仅在运行时才能知道时或者当希望在 s 中禁用空格或正负符号时，style 参数将使得此方法重载非常有用。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格、正负号、组分隔符或小数点符号）。style必须是 NumberStyles 枚举中位标志的组合。当 s 包含十六进制的字符串表现形式、当 s 代表的数字系统（十进制或十六进制）仅在运行时才能知道时或者当希望在 s 中禁用空格或正负符号时，style 参数将使得此方法重载非常有用。

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][E[sign]exponential_digits][ws]

方括号（[ 和 ]）中的元素是可选的。如果 style 包含 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素： 方括号（[ 和 ]）中的元素是可选的。如果 style 包含 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素：

[ws]hexdigits[ws]

下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。
digits fractional_digits exponential_digits | 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。
, | 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 FormatException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 FormatException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 FormatException。
E | “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 digits 元素。
AllowDecimalPoint | 小数点 (.)和 fractional-digits 元素。
AllowExponent | “e”或“E”字符与 exponential_digits 一起指示指数表示法。
AllowLeadingWhite | 位于 s 开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 开头的符号元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 组分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数，也不能表示使用指数表示法的数。 所有元素。但是，s 不能表示十六进制数，也不能表示使用指数表示法的数。
Float | 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、组分隔符 (,) 和小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数。 所有元素。但是，s 不能表示十六进制数。

与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。）

说明 说明

如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。 如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。

下面的示例尝试使用许多 NumberStyles 值解析字符串数组中的每个元素。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim values() As String = { " 214309 ", "1,064,181", "(0)", "10241+", _
                                 " + 21499 ", " +21499 ", "122153.00", _
                                 "1e03ff", "91300.0e-2" }
      Dim whitespace As NumberStyles =  NumberStyles.AllowLeadingWhite Or NumberStyles.AllowTrailingWhite
      Dim styles() As NumberStyles = { NumberStyles.None, _
                                       whitespace, _
                                       NumberStyles.AllowLeadingSign Or NumberStyles.AllowTrailingSign Or whitespace, _
                                       NumberStyles.AllowThousands Or NumberStyles.AllowCurrencySymbol, _
                                       NumberStyles.AllowExponent Or NumberStyles.AllowDecimalPoint }

      ' Attempt to convert each number using each style combination.
      For Each value As String In values
         Console.WriteLine("Attempting to convert '{0}':", value)
         For Each style As NumberStyles In styles
            Try
               Dim number As UInteger = UInt32.Parse(value, style)
               Console.WriteLine("   {0}: {1}", style, number)
            Catch e As FormatException
               Console.WriteLine("   {0}: Bad Format", style)
            Catch e As OverflowException
               Console.WriteLine("   {0}: Overflow", value)
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    Attempting to convert ' 214309 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: 214309
'       Integer, AllowTrailingSign: 214309
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '1,064,181':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: 1064181
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '(0)':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '10241+':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: 10241
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert ' + 21499 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert ' +21499 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: 21499
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '122153.00':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 122153
'
'    Attempting to convert '1e03ff':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '91300.0e-2':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 913

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values= { " 214309 ", "1,064,181", "(0)", "10241+", " + 21499 ",
                         " +21499 ", "122153.00", "1e03ff", "91300.0e-2" };
      NumberStyles whitespace =  NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite;
      NumberStyles[] styles= { NumberStyles.None, whitespace,
                               NumberStyles.AllowLeadingSign | NumberStyles.AllowTrailingSign | whitespace,
                               NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol,
                               NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint };

      // Attempt to convert each number using each style combination.
      foreach (string value in values)
      {
         Console.WriteLine("Attempting to convert '{0}':", value);
         foreach (NumberStyles style in styles)
         {
            try {
               uint number = UInt32.Parse(value, style);
               Console.WriteLine("   {0}: {1}", style, number);
            }
            catch (FormatException) {
               Console.WriteLine("   {0}: Bad Format", style);
            }
            catch (OverflowException)
            {
               Console.WriteLine("   {0}: Overflow", value);
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    Attempting to convert ' 214309 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: 214309
//       Integer, AllowTrailingSign: 214309
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '1,064,181':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: 1064181
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '(0)':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '10241+':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: 10241
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert ' + 21499 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert ' +21499 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: 21499
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '122153.00':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 122153
//
//    Attempting to convert '1e03ff':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '91300.0e-2':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 913

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


UInt32 ..::.Parse 方法 (String, IFormatProvider)

UInt32
.
.
::
.
Parse 方法 (String, IFormatProvider)
UInt32 结构

将数字的指定区域性特定格式的字符串表示形式转换为其等效的 32 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint Parse(
    string s,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned int Parse(
    String^ s,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        provider:IFormatProvider -> uint32

参数

s
类型： System String
表示要转换的数字的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System UInt32
与 s 中指定的数字等效的 32 位无符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 采用的样式不正确。
OverflowException | s 表示小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue 的数字。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 如果 s 表示零值，则为可选符号或负号。
digits | 一系列从 0 到 9 之间的数字。

参数是用 NumberStyles..::.Integer 样式解释的。除了不带符号的整数值的十进制数字之外，只允许使用前导和尾随空格以及前导符号。（如果存在负号，则 s 必须表示零值，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 参数是用 NumberStyles..::.Integer 样式解释的。除了不带符号的整数值的十进制数字之外，只允许使用前导和尾随空格以及前导符号。（如果存在负号，则 s 必须表示零值，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 参数是用 NumberStyles..::.Integer 样式解释的。除了不带符号的整数值的十进制数字之外，只允许使用前导和尾随空格以及前导符号。（如果存在负号，则 s 必须表示零值，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。

provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。

  • 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 UInt32 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 UInt32 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 UInt32 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 UInt32 值。

Protected Sub OKToUInteger_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OKToUInteger.Click
   Dim locale As String
   Dim culture As CultureInfo
   Dim number As UInteger

   ' Return if string is empty
   If String.IsNullOrEmpty(Me.inputNumber.Text) Then Exit Sub

   ' Get locale of web request to determine possible format of number
   If Request.UserLanguages.Length = 0 Then Exit Sub
   locale = Request.UserLanguages(0)
   If String.IsNullOrEmpty(locale) Then Exit Sub

   ' Instantiate CultureInfo object for the user's locale
   culture = New CultureInfo(locale)

   ' Convert user input from a string to a number
   Try
      number = UInt32.Parse(Me.inputNumber.Text, culture.NumberFormat)
   Catch ex As FormatException
      Exit Sub
   Catch ex As Exception
      Exit Sub
   End Try

   ' Output number to label on web form
   Me.outputNumber.Text = "Number is " & number.ToString()
End Sub

protected void OkToUInteger_Click(object sender, EventArgs e)
{
   string locale;
   uint number;
   CultureInfo culture;

   // Return if string is empty
   if (String.IsNullOrEmpty(this.inputNumber.Text))
      return;

   // Get locale of web request to determine possible format of number
   if (Request.UserLanguages.Length == 0)
      return;
   locale = Request.UserLanguages[0];
   if (String.IsNullOrEmpty(locale))
      return;

  // Instantiate CultureInfo object for the user's locale
   culture = new CultureInfo(locale);

   // Convert user input from a string to a number
   try
   {
      number = UInt32.Parse(this.inputNumber.Text, culture.NumberFormat);
   }
   catch (FormatException)
   {
      return;
   }
   catch (Exception)
   {
      return;
   }
   // Output number to label on web form
   this.outputNumber.Text = "Number is " + number.ToString();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UInt32 结构
UInt32 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


UInt32 ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

UInt32
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
UInt32 结构

将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 32 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As UInteger
[CLSCompliantAttribute(false)]
public static uint Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned int Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> uint32

参数

s
类型： System String
一个字符串，表示要转换的数字。该字符串使用由 style 参数指定的样式来进行解释。 一个字符串，表示要转换的数字。该字符串使用由 style 参数指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System UInt32
与 s 中指定的数字等效的 32 位无符号整数。
异常 | 条件
ArgumentNullException | s 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 的格式不符合 style。
OverflowException | s 表示小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign]digits[.fractional_digits][E[sign]exponential_digits][ws]

方括号（[ 和 ]）中的元素是可选的。如果 style 包含 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素： 方括号（[ 和 ]）中的元素是可选的。如果 style 包含 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素：

[ws]hexdigits[ws]

下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。（如果 s 包括一个负号并表示一个非零数字，该方法将引发 OverflowException。）如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。（如果 s 包括一个负号并表示一个非零数字，该方法将引发 OverflowException。）如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。（如果 s 包括一个负号并表示一个非零数字，该方法将引发 OverflowException。）如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
digits | 由从 0 到 9 的数字组成的序列。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional_digits | 如果 style 包含 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果它不包含该标志，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 如果 style 包含 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果它不包含该标志，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
E | “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential_digits | 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。但是，如果样式不包含 NumberStyles..::.AllowExponent 标志，fractional_digits 必须由一个或多个数字 0 组成；否则，将引发 OverflowException。 小数点 (.)和 fractional_digits 元素。但是，如果样式不包含 NumberStyles..::.AllowExponent 标志，fractional_digits 必须由一个或多个数字 0 组成；否则，将引发 OverflowException。
NumberStyles AllowExponent | “e”或“E”字符与 exponential_digits 一起指示指数表示法。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | digits 之前的符号。
NumberStyles AllowTrailingSign | digits 之后的符号。
NumberStyles AllowParentheses | 数字之前和之后的括号用于表示负值。
NumberStyles AllowThousands | 组分隔符 (,) 元素。
NumberStyles AllowCurrencySymbol | 货币 ($) 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。）

说明 说明

如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。 如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。

provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。

  • 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例使用 Parse(String, NumberStyles, IFormatProvider) 方法将数字的各种字符串表示形式转换为 32 位无符号的整数值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR" }
      Dim styles() As NumberStyles = { NumberStyles.Integer, _
                                       NumberStyles.Integer Or NumberStyles.AllowDecimalPoint }
      Dim values() As String = { "170209", "+170209.0", "+170209,0", "-103214.00", _
                                 "-103214,00", "104561.1", "104561,1" }

      ' Parse strings using each culture
      For Each cultureName As String In cultureNames
         Dim ci As New CultureInfo(cultureName)
         Console.WriteLine("Parsing strings using the {0} culture", ci.DisplayName)
         ' Use each style.
         For Each style As NumberStyles In styles
            Console.WriteLine("   Style: {0}", style.ToString())
            ' Parse each numeric string.
            For Each value As String In values
               Try
                  Console.WriteLine("      Converted '{0}' to {1}.", value, _
                                    UInt32.Parse(value, style, ci))
               Catch e As FormatException
                  Console.WriteLine("      Unable to parse '{0}'.", value)
               Catch e As OverflowException
                  Console.WriteLine("      '{0}' is out of range of the UInt32 type.", _
                                    value)
               End Try
            Next
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'       Parsing strings using the English (United States) culture
'          Style: Integer
'             Converted '170209' to 170209.
'             Unable to parse '+170209.0'.
'             Unable to parse '+170209,0'.
'             Unable to parse '-103214.00'.
'             Unable to parse '-103214,00'.
'             Unable to parse '104561.1'.
'             Unable to parse '104561,1'.
'          Style: Integer, AllowDecimalPoint
'             Converted '170209' to 170209.
'             Converted '+170209.0' to 170209.
'             Unable to parse '+170209,0'.
'             '-103214.00' is out of range of the UInt32 type.
'             Unable to parse '-103214,00'.
'             '104561.1' is out of range of the UInt32 type.
'             Unable to parse '104561,1'.
'       Parsing strings using the French (France) culture
'          Style: Integer
'             Converted '170209' to 170209.
'             Unable to parse '+170209.0'.
'             Unable to parse '+170209,0'.
'             Unable to parse '-103214.00'.
'             Unable to parse '-103214,00'.
'             Unable to parse '104561.1'.
'             Unable to parse '104561,1'.
'          Style: Integer, AllowDecimalPoint
'             Converted '170209' to 170209.
'             Unable to parse '+170209.0'.
'             Converted '+170209,0' to 170209.
'             Unable to parse '-103214.00'.
'             '-103214,00' is out of range of the UInt32 type.
'             Unable to parse '104561.1'.
'             '104561,1' is out of range of the UInt32 type.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] cultureNames= { "en-US", "fr-FR" };
      NumberStyles[] styles= { NumberStyles.Integer,
                               NumberStyles.Integer | NumberStyles.AllowDecimalPoint };
      string[] values = { "170209", "+170209.0", "+170209,0", "-103214.00",
                                 "-103214,00", "104561.1", "104561,1" };

      // Parse strings using each culture
      foreach (string cultureName in cultureNames)
      {
         CultureInfo ci = new CultureInfo(cultureName);
         Console.WriteLine("Parsing strings using the {0} culture",
                           ci.DisplayName);
         // Use each style.
         foreach (NumberStyles style in styles)
         {
            Console.WriteLine("   Style: {0}", style.ToString());
            // Parse each numeric string.
            foreach (string value in values)
            {
               try {
                  Console.WriteLine("      Converted '{0}' to {1}.", value,
                                    UInt32.Parse(value, style, ci));
               }
               catch (FormatException) {
                  Console.WriteLine("      Unable to parse '{0}'.", value);
               }
               catch (OverflowException) {
                  Console.WriteLine("      '{0}' is out of range of the UInt32 type.",
                                    value);
               }
            }
         }
      }
   }
}
// The example displays the following output:
//       Parsing strings using the English (United States) culture
//          Style: Integer
//             Converted '170209' to 170209.
//             Unable to parse '+170209.0'.
//             Unable to parse '+170209,0'.
//             Unable to parse '-103214.00'.
//             Unable to parse '-103214,00'.
//             Unable to parse '104561.1'.
//             Unable to parse '104561,1'.
//          Style: Integer, AllowDecimalPoint
//             Converted '170209' to 170209.
//             Converted '+170209.0' to 170209.
//             Unable to parse '+170209,0'.
//             '-103214.00' is out of range of the UInt32 type.
//             Unable to parse '-103214,00'.
//             '104561.1' is out of range of the UInt32 type.
//             Unable to parse '104561,1'.
//       Parsing strings using the French (France) culture
//          Style: Integer
//             Converted '170209' to 170209.
//             Unable to parse '+170209.0'.
//             Unable to parse '+170209,0'.
//             Unable to parse '-103214.00'.
//             Unable to parse '-103214,00'.
//             Unable to parse '104561.1'.
//             Unable to parse '104561,1'.
//          Style: Integer, AllowDecimalPoint
//             Converted '170209' to 170209.
//             Unable to parse '+170209.0'.
//             Converted '+170209,0' to 170209.
//             Unable to parse '-103214.00'.
//             '-103214,00' is out of range of the UInt32 type.
//             Unable to parse '104561.1'.
//             '104561,1' is out of range of the UInt32 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


UInt32 ..::.ToString 方法

UInt32
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt32 结构

将此实例的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

UInt32 结构
UInt32 成员
System 命名空间


UInt32 ..::.ToString 方法

UInt32
.
.
::
.
ToString 方法
UInt32 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示形式，由一系列从 0 到 9 之间的数字组成，不包含符号或前导零。

返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 进行格式设置。UInt32 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。 返回值由通用数值格式说明符（“G”）和当前区域性的 NumberFormatInfo 进行格式设置。UInt32 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。

若要定义 32 位无符号整数值的字符串表示形式的格式设置，请调用 ToString(String) 方法。

下面的示例使用默认的 ToString()()() 方法显示 UInt32 值。此示例还显示通过使用许多标准格式说明符得到的 UInt32 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 UInt32 值。此示例还显示通过使用许多标准格式说明符得到的 UInt32 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 UInt32 值。此示例还显示通过使用许多标准格式说明符得到的 UInt32 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。

Module Example
   Public Sub Main()
      Dim value As UInteger = 1632490
      ' Display value using default ToString method.
      Console.WriteLine(value.ToString())
      Console.WriteLine()

      ' Define an array of format specifiers.
      Dim formats() As String = { "G", "C", "D", "F", "N", "X" }
      ' Display value using the standard format specifiers.
      For Each format As String In formats
         Console.WriteLine("{0} format specifier: {1,16}", _
                           format, value.ToString(format))
      Next
   End Sub
End Module
' The example displays the following output:
'       1632490
'
'       G format specifier:          1632490
'       C format specifier:    $1,632,490.00
'       D format specifier:          1632490
'       F format specifier:       1632490.00
'       N format specifier:     1,632,490.00
'       X format specifier:           18E8EA

using System;

public class Example
{
   public static void Main()
   {
      uint value = 1632490;
      // Display value using default ToString method.
      Console.WriteLine(value.ToString());
      Console.WriteLine();

      // Define an array of format specifiers.
      string[] formats = { "G", "C", "D", "F", "N", "X" };
      // Display value using the standard format specifiers.
      foreach (string format in formats)
         Console.WriteLine("{0} format specifier: {1,16}",
                           format, value.ToString(format));
   }
}
// The example displays the following output:
//       1632490
//
//       G format specifier:          1632490
//       C format specifier:    $1,632,490.00
//       D format specifier:          1632490
//       F format specifier:       1632490.00
//       N format specifier:     1,632,490.00
//       X format specifier:           18E8EA

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型


UInt32 ..::.ToString 方法 (IFormatProvider)

UInt32
.
.
::
.
ToString 方法 (IFormatProvider)
UInt32 结构

使用指定的区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由一系列 0 到 9 之间的数字组成，不包含符号或前导零。

实现

此实例使用通用数值格式说明符（“G”）进行格式设置。UInt32 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。 此实例使用通用数值格式说明符（“G”）进行格式设置。UInt32 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回提供区域性特定格式设置信息的 NumberFormatInfo 对象。但是，在使用通用数值格式说明符 ("G") 设置格式时没有使用 NumberFormatInfo 的属性。 provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回提供区域性特定格式设置信息的 NumberFormatInfo 对象。但是，在使用通用数值格式说明符 ("G") 设置格式时没有使用 NumberFormatInfo 的属性。 provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回提供区域性特定格式设置信息的 NumberFormatInfo 对象。但是，在使用通用数值格式说明符 ("G") 设置格式时没有使用 NumberFormatInfo 的属性。

下面的示例使用多个格式提供程序设置 16 位带符号值的格式，其中包括一个用于固定区域性的格式提供程序。该示例的输出阐释了 ToString(IFormatProvider) 方法返回的格式化字符串相同，与格式提供程序无关。 下面的示例使用多个格式提供程序设置 16 位带符号值的格式，其中包括一个用于固定区域性的格式提供程序。该示例的输出阐释了 ToString(IFormatProvider) 方法返回的格式化字符串相同，与格式提供程序无关。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Define an array of CultureInfo objects.
      Dim ci() As CultureInfo = { New CultureInfo("en-US"), _
                                  New CultureInfo("fr-FR"), _
                                  CultureInfo.InvariantCulture }
      Dim value As UInteger = 1870924
      Console.WriteLine("  {0,12}   {1,12}   {2,12}", _
                        GetName(ci(0)), GetName(ci(1)), GetName(ci(2)))
      Console.WriteLine("  {0,12}   {1,12}   {2,12}", _
                        value.ToString(ci(0)), value.ToString(ci(1)), value.ToString(ci(2)))

   End Sub

   Private Function GetName(ci As CultureInfo) As String
      If ci.Equals(CultureInfo.InvariantCulture) Then
         Return "Invariant"
      Else
         Return ci.Name
      End If
   End Function
End Module
' The example displays the following output:
'        en-US          fr-FR      Invariant
'      1870924        1870924        1870924

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Define an array of CultureInfo objects.
      CultureInfo[] ci = { new CultureInfo("en-US"),
                           new CultureInfo("fr-FR"),
                           CultureInfo.InvariantCulture };
      uint value = 1870924;
      Console.WriteLine("  {0,12}   {1,12}   {2,12}",
                        GetName(ci[0]), GetName(ci[1]), GetName(ci[2]));
      Console.WriteLine("  {0,12}   {1,12}   {2,12}",
                        value.ToString(ci[0]), value.ToString(ci[1]), value.ToString(ci[2]));
   }

   private static string GetName(CultureInfo ci)
   {
      if (ci.Equals(CultureInfo.InvariantCulture))
         return "Invariant";
      else
         return ci.Name;
   }
}
// The example displays the following output:
//             en-US          fr-FR      Invariant
//           1870924        1870924        1870924

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型


UInt32 ..::.ToString 方法 (String)

UInt32
.
.
::
.
ToString 方法 (String)
UInt32 结构

使用指定的格式将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
一个数值格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 参数无效。

format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt32 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。 format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt32 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。 format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt32 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关 .NET Framework 中的格式设置支持的更多信息，请参见格式化类型。

返回字符串的格式由当前区域性的 NumberFormatInfo 对象确定。根据 format 参数，此对象可以控制输出字符串中的组分隔符和小数点符号等符号。若要为不同于当前区域性的区域性提供格式设置信息，请调用 ToString(String, IFormatProvider) 重载。 返回字符串的格式由当前区域性的 NumberFormatInfo 对象确定。根据 format 参数，此对象可以控制输出字符串中的组分隔符和小数点符号等符号。若要为不同于当前区域性的区域性提供格式设置信息，请调用 ToString(String, IFormatProvider) 重载。 返回字符串的格式由当前区域性的 NumberFormatInfo 对象确定。根据 format 参数，此对象可以控制输出字符串中的组分隔符和小数点符号等符号。若要为不同于当前区域性的区域性提供格式设置信息，请调用 ToString(String, IFormatProvider) 重载。

下面的示例使用每个标准格式字符串和某些自定义格式字符串来显示一个 32 位无符号的整数值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim value As UInteger = 2179608
      Dim specifiers() As String = { "G", "C", "D3", "E2", "e3", "F", _
                                     "N", "P", "X", "000000.0", "#.0", _
                                     "00000000;(0);**Zero**" }

      For Each specifier As String In specifiers
         Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
      Next
   End Sub
End Module
' The example displays the following output:
'       G: 2179608
'       C: $2,179,608.00
'       D3: 2179608
'       E2: 2.18E+006
'       e3: 2.180e+006
'       F: 2179608.00
'       N: 2,179,608.00
'       P: 217,960,800.00 %
'       X: 214218
'       000000.0: 2179608.0
'       #.0: 2179608.0
'       00000000;(0);**Zero**: 02179608

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      uint value = 2179608;
      string[] specifiers = { "G", "C", "D3", "E2", "e3", "F",
                              "N", "P", "X", "000000.0", "#.0",
                              "00000000;(0);**Zero**" };

      foreach (string specifier in specifiers)
         Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
   }
}
// The example displays the following output:
//       G: 2179608
//       C: $2,179,608.00
//       D3: 2179608
//       E2: 2.18E+006
//       e3: 2.180e+006
//       F: 2179608.00
//       N: 2,179,608.00
//       P: 217,960,800.00 %
//       X: 214218
//       000000.0: 2179608.0
//       #.0: 2179608.0
//       00000000;(0);**Zero**: 02179608

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
如何：用前导零填充数字


UInt32 ..::.ToString 方法 (String, IFormatProvider)

UInt32
.
.
::
.
ToString 方法 (String, IFormatProvider)
UInt32 结构

使用指定的格式和区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
一个数值格式字符串。
provider
类型： System IFormatProvider
一个对象，它提供有关此实例的区域性特定格式设置信息。

返回值

类型： System String
此实例的值的字符串表示形式形式，由 format 和 provider 指定。

实现

异常 | 条件
FormatException | format 参数无效。

format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt32 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。 format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt32 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。 format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt32 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt32 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt32 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt32 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt32 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt32 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息：

  • 可传递 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。 可传递 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。

  • 可以传递提供数字格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供数字格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可传递实现了 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 可传递实现了 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回的字符串的格式设置基于当前区域性的 NumberFormatInfo 对象。

下面的示例使用标准数字格式说明符和许多特定的 CultureInfo 对象来显示一个 32 位无符号的整数值。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Define cultures whose formatting conventions are to be used.
      Dim cultures() As CultureInfo = {CultureInfo.CreateSpecificCulture("en-US"), _
                                       CultureInfo.CreateSpecificCulture("fr-FR"), _
                                       CultureInfo.CreateSpecificCulture("es-ES") }
      Dim specifiers() As String = {"G", "C", "D4", "E2", "F", "N", "P", "X2"}
      Dim value As UInteger = 2222402

      For Each specifier As String In specifiers
         For Each culture As CultureInfo In Cultures
            Console.WriteLine("{0,2} format using {1} culture: {2, 18}", _
                              specifier, culture.Name, _
                              value.ToString(specifier, culture))

         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'        G format using en-US culture:            2222402
'        G format using fr-FR culture:            2222402
'        G format using es-ES culture:            2222402
'
'        C format using en-US culture:      $2,222,402.00
'        C format using fr-FR culture:     2 222 402,00 �
'        C format using es-ES culture:     2.222.402,00 �
'
'       D4 format using en-US culture:            2222402
'       D4 format using fr-FR culture:            2222402
'       D4 format using es-ES culture:            2222402
'
'       E2 format using en-US culture:          2.22E+006
'       E2 format using fr-FR culture:          2,22E+006
'       E2 format using es-ES culture:          2,22E+006
'
'        F format using en-US culture:         2222402.00
'        F format using fr-FR culture:         2222402,00
'        F format using es-ES culture:         2222402,00
'
'        N format using en-US culture:       2,222,402.00
'        N format using fr-FR culture:       2 222 402,00
'        N format using es-ES culture:       2.222.402,00
'
'        P format using en-US culture:   222,240,200.00 %
'        P format using fr-FR culture:   222 240 200,00 %
'        P format using es-ES culture:   222.240.200,00 %
'
'       X2 format using en-US culture:             21E942
'       X2 format using fr-FR culture:             21E942
'       X2 format using es-ES culture:             21E942

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Define cultures whose formatting conventions are to be used.
      CultureInfo[] cultures = { CultureInfo.CreateSpecificCulture("en-US"),
                                 CultureInfo.CreateSpecificCulture("fr-FR"),
                                 CultureInfo.CreateSpecificCulture("es-ES") };
      string[] specifiers = {"G", "C", "D4", "E2", "F", "N", "P", "X2"};
      uint value = 2222402;

      foreach (string specifier in specifiers)
      {
         foreach (CultureInfo culture in cultures)
            Console.WriteLine("{0,2} format using {1} culture: {2, 18}",
                              specifier, culture.Name,
                              value.ToString(specifier, culture));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//        G format using en-US culture:            2222402
//        G format using fr-FR culture:            2222402
//        G format using es-ES culture:            2222402
//
//        C format using en-US culture:      $2,222,402.00
//        C format using fr-FR culture:     2 222 402,00 �
//        C format using es-ES culture:     2.222.402,00 �
//
//       D4 format using en-US culture:            2222402
//       D4 format using fr-FR culture:            2222402
//       D4 format using es-ES culture:            2222402
//
//       E2 format using en-US culture:          2.22E+006
//       E2 format using fr-FR culture:          2,22E+006
//       E2 format using es-ES culture:          2,22E+006
//
//        F format using en-US culture:         2222402.00
//        F format using fr-FR culture:         2222402,00
//        F format using es-ES culture:         2222402,00
//
//        N format using en-US culture:       2,222,402.00
//        N format using fr-FR culture:       2 222 402,00
//        N format using es-ES culture:       2.222.402,00
//
//        P format using en-US culture:   222,240,200.00 %
//        P format using fr-FR culture:   222 240 200,00 %
//        P format using es-ES culture:   222.240.200,00 %
//
//       X2 format using en-US culture:             21E942
//       X2 format using fr-FR culture:             21E942
//       X2 format using es-ES culture:             21E942

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt32 结构
UInt32 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
如何：用前导零填充数字


UInt32 ..::.TryParse 方法

UInt32
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt32 结构

尝试将数字的字符串表示形式转换为等效的 32 位无符号整数。一个指示转换是否成功的返回值。 尝试将数字的字符串表示形式转换为等效的 32 位无符号整数。一个指示转换是否成功的返回值。

名称 说明
页首

参考

UInt32 结构
UInt32 成员
System 命名空间
Parse


UInt32 ..::.TryParse 方法 (String, UInt32%)

UInt32
.
.
::
.
TryParse 方法 (String, UInt32%)
UInt32 结构

尝试将数字的字符串表示形式转换为等效的 32 位无符号整数。一个指示转换是否成功的返回值。 尝试将数字的字符串表示形式转换为等效的 32 位无符号整数。一个指示转换是否成功的返回值。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 TryParse(String, Int64 )。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As UInteger _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool TryParse(
    string s,
    out uint result
)
[CLSCompliantAttribute(false)]
public:
static bool TryParse(
    String^ s,
    [OutAttribute] unsigned int% result
)
[<CLSCompliantAttribute(false)>]
static member TryParse :
        s:string *
        result:uint32 byref -> bool

参数

s
类型： System String
表示要转换的数字的字符串。
result
类型： System UInt32 %
当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 32 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 32 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 32 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue，则转换会失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 s，则为 true；否则为 false。

TryParse 方法类似于 Parse 方法，不同之处在于它在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse 方法类似于 Parse 方法，不同之处在于它在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

s 参数应该是以下形式的小数数字字符串表示形式：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

元素 | 说明
ws | 可选的空白。
sign | 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。
digits | 一系列从 0 到 9 之间的十进制数字。

使用 NumberStyles..::.Integer 样式来解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt32%) 方法。 使用 NumberStyles..::.Integer 样式来解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt32%) 方法。 使用 NumberStyles..::.Integer 样式来解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt32%) 方法。

说明 说明

s 指定的字符串不能包含任何组分隔符或十进制分隔符，它不能有小数部分。

s 参数是使用当前系统区域性的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。 s 参数是使用当前系统区域性的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。

此重载将 s 参数中的所有数字都解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt32%) 重载代替。 此重载将 s 参数中的所有数字都解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt32%) 重载代替。

下面的示例为字符串数组中的每个元素调用 TryParse(String, UInt32%) 方法一次。

Dim numericStrings() As String = {"1293.8", "+1671.7", "28347.", _
                                  "   33113684  ", "(0)", "-0", "+1293617", _
                                  "18-", "119870", "31,024", "  3127094 ", _
                                  "0070000" }
Dim number As UInteger
For Each numericString As String In numericStrings
   If UInt32.TryParse(numericString, number) Then
      Console.WriteLine("Converted '{0}' to {1}.", numericString, number)
   Else
      Console.WriteLine("Cannot convert '{0}' to a UInt32.", numericString)
   End If
Next
' The example displays the following output:
'       Cannot convert '1293.8' to a UInt32.
'       Cannot convert '+1671.7' to a UInt32.
'       Cannot convert '28347.' to a UInt32.
'       Converted '   33113684  ' to 33113684.
'       Cannot convert '(0)' to a UInt32.
'       Converted '-0' to 0.
'       Converted '+1293617' to 1293617.
'       Cannot convert '18-' to a UInt32.
'       Converted '119870' to 119870.
'       Cannot convert '31,024' to a UInt32.
'       Converted '  3127094 ' to 3127094.
'       Converted '0070000' to 70000.

string[] numericStrings = { "1293.8", "+1671.7", "28347.",
                            "   33113684  ", "(0)", "-0", "+1293617",
                            "18-", "119870", "31,024", "  3127094 ",
                            "00700000" };
uint number;
foreach (string numericString in numericStrings)
{
   if (UInt32.TryParse(numericString, out number))
      Console.WriteLine("Converted '{0}' to {1}.", numericString, number);
   else
      Console.WriteLine("Cannot convert '{0}' to a UInt32.", numericString);
}
// The example displays the following output:
//       Cannot convert '1293.8' to a UInt32.
//       Cannot convert '+1671.7' to a UInt32.
//       Cannot convert '28347.' to a UInt32.
//       Converted '   33113684  ' to 33113684.
//       Cannot convert '(0)' to a UInt32.
//       Converted '-0' to 0.
//       Converted '+1293617' to 1293617.
//       Cannot convert '18-' to a UInt32.
//       Converted '119870' to 119870.
//       Cannot convert '31,024' to a UInt32.
//       Converted '  3127094 ' to 3127094.
//       Converted '0070000' to 70000.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UInt32 结构
UInt32 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


UInt32 ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, UInt32%)

UInt32
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, UInt32%)
UInt32 结构

尝试将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 32 位无符号整数。一个指示转换是否成功的返回值。 尝试将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 32 位无符号整数。一个指示转换是否成功的返回值。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 TryParse(String, Int64 )。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As UInteger _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out uint result
)
[CLSCompliantAttribute(false)]
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] unsigned int% result
)
[<CLSCompliantAttribute(false)>]
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:uint32 byref -> bool

参数

s
类型： System String
表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。 表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的一个按位组合，指示 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。 枚举值的一个按位组合，指示 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
result
类型： System UInt32 %
当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 32 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 32 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue，则转换会失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 32 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 UInt32..::.MinValue 或大于 UInt32..::.MaxValue，则转换会失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 NumberStyles..::.AllowHexSpecifier 和 NumberStyles..::.HexNumber 值的组合。

TryParse(String, NumberStyles, IFormatProvider, UInt32%) 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于它在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse(String, NumberStyles, IFormatProvider, UInt32%) 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于它在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][E[sign]exponential_digits][ws]

方括号（“[”和“]”）中的项是可选的。或者，如果 style 参数包含 NumberStyles..::.AllowHexSpecifier，s 参数可能包含以下元素： 方括号（“[”和“]”）中的项是可选的。或者，如果 style 参数包含 NumberStyles..::.AllowHexSpecifier，s 参数可能包含以下元素：

[ws]hexdigits[ws]

下表描述每个元素。

元素 | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。
digits | 由从 0 到 9 的数字组成的序列。
, | 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的组分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。
fractional_digits | 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
E | “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential_digits | 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 由从 0 到 9 的数字组成的序列。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | 值中允许的除数字之外的元素
None | 仅十进制数字。
AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。
AllowExponent | “e”或“E”字符与 exponential_digits 一起指示指数表示法。如果 s 代表指数表示法中的一个数字，它不能有非零、小数部分。 “e”或“E”字符与 exponential_digits 一起指示指数表示法。如果 s 代表指数表示法中的一个数字，它不能有非零、小数部分。
AllowLeadingWhite | 位于 s 开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | sign 元素位于 digits 之前。
AllowTrailingSign | sign 元素位于 digits 之后。
AllowParentheses | 采用在括号内包含零数值的形式的 sign 元素。
AllowThousands | 组分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数，也不能表示使用指数表示法的数。 所有元素。但是，s 不能表示十六进制数，也不能表示使用指数表示法的数。
Float | 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、组分隔符 (,) 和小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数。 所有元素。但是，s 不能表示十六进制数。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。）

说明 说明

如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。 如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 s 格式的区域性特定信息。provider 参数可以是以下任意一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 s 格式的区域性特定信息。provider 参数可以是以下任意一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 s 格式的区域性特定信息。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。 一个 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。

  • 一个 NumberFormatInfo 对象，提供了数值格式设置信息。（其 GetFormat 实现仅返回它自身。） 一个 NumberFormatInfo 对象，提供了数值格式设置信息。（其 GetFormat 实现仅返回它自身。）

  • 一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例将 TryParse(String, NumberStyles, IFormatProvider, UInt32%) 方法与许多不同的字符串和 NumberStyles 值一起调用。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim numericString As String
      Dim styles As NumberStyles

      numericString = "2106034"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)

      numericString = "-10603"
      styles = NumberStyles.None
      CallTryParse(numericString, styles)

      numericString = "29103674.00"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "10345.72"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "41792210E-01"
      styles = NumberStyles.Integer Or NumberStyles.AllowExponent
      CallTryParse(numericString, styles)

      numericString = "9112E-01"
      CallTryParse(numericString, styles)

      numericString = "312E01"
      CallTryParse(numericString, styles)

      numericString = "FFC86DA1"
      CallTryParse(numericString, NumberStyles.HexNumber)

      numericString = "0x8F8C"
      CallTryParse(numericString, NumberStyles.HexNumber)
   End Sub

   Private Sub CallTryParse(stringToConvert As String, styles AS NumberStyles)
      Dim number As UInteger
      Dim result As Boolean = UInt32.TryParse(stringToConvert, styles, _
                                              CultureInfo.InvariantCulture, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
      Else
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           Convert.ToString(stringToConvert))
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '2106034' to 2106034.
'       Attempted conversion of '-10603' failed.
'       Converted '29103674.00' to 29103674.
'       Attempted conversion of '10345.72' failed.
'       Converted '41792210E-01' to 4179221.
'       Attempted conversion of '9112E-01' failed.
'       Converted '312E01' to 3120.
'       Converted 'FFC86DA1' to 4291325345.
'       Attempted conversion of '0x8F8C' failed.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string numericString;
      NumberStyles styles;

      numericString = "2106034";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      numericString = "-10603";
      styles = NumberStyles.None;
      CallTryParse(numericString, styles);

      numericString = "29103674.00";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "10345.72";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "41792210E-01";
      styles = NumberStyles.Integer | NumberStyles.AllowExponent;
      CallTryParse(numericString, styles);

      numericString = "9112E-01";
      CallTryParse(numericString, styles);

      numericString = "312E01";
      CallTryParse(numericString, styles);

      numericString = "FFC86DA1";
      CallTryParse(numericString, NumberStyles.HexNumber);

      numericString = "0x8F8C";
      CallTryParse(numericString, NumberStyles.HexNumber);
   }

   private static void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      uint number;
      bool result = UInt32.TryParse(stringToConvert, styles,
                                   CultureInfo.InvariantCulture, out number);
      if (result)
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
      else
         Console.WriteLine("Attempted conversion of '{0}' failed.",
                           Convert.ToString(stringToConvert));
   }
}
// The example displays the following output:
//       Converted '2106034' to 2106034.
//       Attempted conversion of '-10603' failed.
//       Converted '29103674.00' to 29103674.
//       Attempted conversion of '10345.72' failed.
//       Converted '41792210E-01' to 4179221.
//       Attempted conversion of '9112E-01' failed.
//       Converted '312E01' to 3120.
//       Converted 'FFC86DA1' to 4291325345.
//       Attempted conversion of '0x8F8C' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UInt32 结构
UInt32 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


UInt64 结构

UInt64 结构
成员

表示 64 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Decimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public Structure UInt64 _
    Implements IComparable, IFormattable, IConvertible, IComparable(Of ULong),  _
    IEquatable(Of ULong)
[SerializableAttribute]
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public struct UInt64 : IComparable, IFormattable,
    IConvertible, IComparable<ulong>, IEquatable<ulong>
[SerializableAttribute]
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public value class UInt64 : IComparable,
    IFormattable, IConvertible, IComparable<unsigned long long>, IEquatable<unsigned long long>
[<SealedAttribute>]
[<SerializableAttribute>]
[<CLSCompliantAttribute(false)>]
[<ComVisibleAttribute(true)>]
type UInt64 =
    struct
        interface IComparable
        interface IFormattable
        interface IConvertible
        interface IComparable<uint64>
        interface IEquatable<uint64>
    end

UInt64 值类型表示值介于 0 到 18,446,744,073,709,551,615 之间的无符号整数。

重要说明 重要事项

UInt64 类型不符合 CLS。符合 CLS 的替代类型是 Decimal。可以改用 Int64 来替换从零到 MaxValue 范围内的 UInt64 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 UInt64 类型不符合 CLS。符合 CLS 的替代类型是 Decimal。可以改用 Int64 来替换从零到 MaxValue 范围内的 UInt64 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 UInt64 类型不符合 CLS。符合 CLS 的替代类型是 Decimal。可以改用 Int64 来替换从零到 MaxValue 范围内的 UInt64 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。 UInt64 类型不符合 CLS。符合 CLS 的替代类型是 Decimal。可以改用 Int64 来替换从零到 MaxValue 范围内的 UInt64 值。有关 CLS 遵从性的更多信息，请参见公共语言规范。

UInt64 为比较此类型的实例，将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。

此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。 此类型的所有成员都是线程安全的。看似修改了实例状态的成员实际上返回一个用新值实例化的新实例。正如对任何其他类型一样，对于包含此类型的实例的共享变量，也必须通过锁定来保护对其进行的读写，以保证实现线程安全。

警告说明 警告

在所有的硬件平台上都分配该类型的一个实例不是线程安全的，因为该实例的二进制表示形式可能太大，无法在单个原子操作中分配。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 成员
System 命名空间
Int64


UInt64 成员

UInt64 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt64 结构

表示 64 位无符号整数。

UInt64 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UInt64 结构
System 命名空间


UInt64 字段

UInt64 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt64 结构

UInt64 类型公开以下成员。

名称 说明
页首

参考

UInt64 结构
System 命名空间


UInt64 ..::.MaxValue 字段

UInt64
.
.
::
.
MaxValue 字段
UInt64 结构

表示 UInt64 的最大可能值。此字段为常数。 表示 UInt64 的最大可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MaxValue As ULong
public const ulong MaxValue
public:
literal unsigned long long MaxValue
static val mutable MaxValue: uint64

此常数的值为 18,446,744,073,709,551,615；即十六进制的 0xFFFFFFFFFFFFFFFF。

下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Double 值是否在 UInt64 类型的范围之内。这样可以防止在运行时引发 OverflowException。 下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Double 值是否在 UInt64 类型的范围之内。这样可以防止在运行时引发 OverflowException。

Dim decimalValue As Double = -1.5
Dim integerValue As ULong

' Discard fractional portion of Double value
Dim decimalInteger As Double = Math.Floor(decimalValue)

If decimalInteger < ULong.MaxValue AndAlso _
   decimalInteger > ULong.MinValue Then
   integerValue = CULng(decimalValue)
   Console.WriteLine("Converted {0} to {1}.", decimalValue, integerValue)
Else
   Dim rangeLimit As ULong
   Dim relationship As String

   If decimalInteger > ULong.MaxValue Then
      rangeLimit = ULong.MaxValue
      relationship = "greater"
   Else
      rangeLimit = ULong.MinValue
      relationship = "less"
   End If

   Console.WriteLine("Conversion failure: {0} is {1} than {2}", _
                     decimalInteger, _
                     relationship, _
                     rangeLimit)
End If

double decimalValue = -1.5;
ulong integerValue;

// Discard fractional portion of Double value
double decimalInteger = Math.Floor(decimalValue);

if (decimalInteger < ulong.MaxValue &&
    decimalInteger > ulong.MinValue)
{
   integerValue = (ulong) decimalValue;
   Console.WriteLine("Converted {0} to {1}.", decimalValue, integerValue);
}
else
{
   ulong rangeLimit;
   string relationship;

   if (decimalInteger > ulong.MaxValue)
   {
      rangeLimit = ulong.MaxValue;
      relationship = "greater";
   }
   else
   {
      rangeLimit = ulong.MinValue;
      relationship = "less";
   }

   Console.WriteLine("Conversion failure: {0} is {1} than {2}.",
                     decimalInteger,
                     relationship,
                     rangeLimit);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间
MinValue


UInt64 ..::.MinValue 字段

UInt64
.
.
::
.
MinValue 字段
UInt64 结构

表示 UInt64 的最小可能值。此字段为常数。 表示 UInt64 的最小可能值。此字段为常数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Const MinValue As ULong
public const ulong MinValue
public:
literal unsigned long long MinValue
static val mutable MinValue: uint64

此常数的值是 0。

下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Double 值是否在 UInt64 类型的范围之内。这样可以防止在运行时引发 OverflowException。 下面的示例在执行类型转换之前使用 MinValue 和 MaxValue 字段验证 Double 值是否在 UInt64 类型的范围之内。这样可以防止在运行时引发 OverflowException。

Dim decimalValue As Double = -1.5
Dim integerValue As ULong

' Discard fractional portion of Double value
Dim decimalInteger As Double = Math.Floor(decimalValue)

If decimalInteger < ULong.MaxValue AndAlso _
   decimalInteger > ULong.MinValue Then
   integerValue = CULng(decimalValue)
   Console.WriteLine("Converted {0} to {1}.", decimalValue, integerValue)
Else
   Dim rangeLimit As ULong
   Dim relationship As String

   If decimalInteger > ULong.MaxValue Then
      rangeLimit = ULong.MaxValue
      relationship = "greater"
   Else
      rangeLimit = ULong.MinValue
      relationship = "less"
   End If

   Console.WriteLine("Conversion failure: {0} is {1} than {2}", _
                     decimalInteger, _
                     relationship, _
                     rangeLimit)
End If

double decimalValue = -1.5;
ulong integerValue;

// Discard fractional portion of Double value
double decimalInteger = Math.Floor(decimalValue);

if (decimalInteger < ulong.MaxValue &&
    decimalInteger > ulong.MinValue)
{
   integerValue = (ulong) decimalValue;
   Console.WriteLine("Converted {0} to {1}.", decimalValue, integerValue);
}
else
{
   ulong rangeLimit;
   string relationship;

   if (decimalInteger > ulong.MaxValue)
   {
      rangeLimit = ulong.MaxValue;
      relationship = "greater";
   }
   else
   {
      rangeLimit = ulong.MinValue;
      relationship = "less";
   }

   Console.WriteLine("Conversion failure: {0} is {1} than {2}.",
                     decimalInteger,
                     relationship,
                     rangeLimit);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间
MaxValue


UInt64 方法

UInt64 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt64 结构

UInt64 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

UInt64 结构
System 命名空间


UInt64 ..::.CompareTo 方法

UInt64
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt64 结构

将此实例与指定的对象或 UInt64 进行比较，并返回二者相对值的指示。

名称 说明
页首

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.CompareTo 方法 (Object)

UInt64
.
.
::
.
CompareTo 方法 (Object)
UInt64 结构

将此实例与指定对象进行比较并返回一个对二者的相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Object _ ) As Integer
public int CompareTo( Object value )
public: virtual int CompareTo( Object^ value ) sealed
abstract CompareTo : value:Object -> int override CompareTo : value:Object -> int
参数
value
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | value 不是 UInt64。

无论 UInt64 的值如何，它的任何实例都被视为大于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

value 必须为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者是 UInt64 的实例；否则将引发异常。

下面的代码示例说明了 CompareTo 方法。

    Public Class Temperature : Implements IComparable
        ' The value holder
        Protected m_value As ULong

        ''' <summary>
        ''' IComparable.CompareTo implementation.
        ''' </summary>
        Public Function CompareTo(obj As Object) As Integer _
               Implements IComparable.CompareTo

            If TypeOf(obj) Is Temperature Then
                Dim temp As Temperature = DirectCast(obj, Temperature)

                Return m_value.CompareTo(temp.m_value)
            End If

            Throw New ArgumentException("object is not a Temperature")
        End Function

        Public Property Value As ULong
            Get
                Return m_value
            End Get
            Set
                Me.m_value = value
            End Set
        End Property
    End Class

    public class Temperature : IComparable {
        /// <summary>
        /// IComparable.CompareTo implementation.
        /// </summary>
        public int CompareTo(object obj) {
            if(obj is Temperature) {
                Temperature temp = (Temperature) obj;

                return m_value.CompareTo(temp.m_value);
            }

            throw new ArgumentException("object is not a Temperature");
        }

        // The value holder
        protected ulong m_value;

        public ulong Value {
            get {
                return m_value;
            }
            set {
                m_value = value;
            }
        }
    }

   public ref class Temperature: public IComparable
   {
   public:
      /// <summary>
      /// IComparable.CompareTo implementation.
      /// </summary>
      virtual int CompareTo( Object^ obj )
      {
      if ( (Temperature^)( obj ) )
      {
         Temperature^ temp = (Temperature^)( obj );

            return m_value.CompareTo( temp->m_value );
         }

         throw gcnew ArgumentException( "object is not a Temperature" );
      }

   protected:
      // The value holder
      UInt64 m_value;

   public:
      property UInt64 Value
      {
         UInt64 get()
         {
            return m_value;
         }
         void set( UInt64 value )
         {
            m_value = value;
         }
      }
   };
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
CompareTo 重载
System 命名空间
Equals


UInt64 ..::.CompareTo 方法 (UInt64)

UInt64
.
.
::
.
CompareTo 方法 (UInt64)
UInt64 结构

将此实例与指定的 64 位无符号整数进行比较并返回对其相对值的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As ULong _ ) As Integer
public int CompareTo( ulong value )
public: virtual int CompareTo( unsigned long long value ) sealed
abstract CompareTo : value:uint64 -> int override CompareTo : value:uint64 -> int
参数
value
类型： System UInt64
要比较的无符号整数。
返回值
类型： System Int32
有符号数字，指示此实例和
value
的相对值。
返回值
说明
小于零
此实例小于
value
。
零
此实例等于
value
。
大于零
此实例大于
value
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，并且执行效果略好于 UInt64..::.CompareTo 方法，这是因为它不必将 value 参数转换为对象。

根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。 根据编程语言的不同，有可能编写参数类型的位数少于实例类型（比实例类型窄）的 CompareTo 方法。造成这种情况的原因可能是某些编程语言执行了隐式扩大转换，这种转换将参数表示为一个与实例位数相同的类型。

例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。 例如，假定实例类型是 Int32 且参数类型是 Byte。Microsoft C# 编译器生成指令来将参数值表示为一个 Int32 对象，然后生成一个 Int32..::.CompareTo 方法，该方法可比较 Int32 实例和 Int32 参数表示形式的值。

请参见所用编程语言的文档，确定相应的编译器是否对数值类型执行隐式扩大转换。

下面的代码示例演示多个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
CompareTo 重载
System 命名空间
Equals


UInt64 ..::.Equals 方法

UInt64
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt64 结构

返回一个值，该值指示此实例是否与指定的对象或 UInt64 相等。

名称 说明
页首

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.Equals 方法 (Object)

UInt64
.
.
::
.
Equals 方法 (Object)
UInt64 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与此实例进行比较的对象。

返回值

类型： System Boolean
如果 obj 是 UInt64 的实例并且等于此实例的值，则为 true；否则为 false。

下面的代码示例说明了 Equals 方法。

Dim myVariable1 As UInt64 = UInt64.Parse(50)
Dim myVariable2 As UInt64 = UInt64.Parse(50)

'Display the declaring type.
Console.WriteLine(ControlChars.NewLine + "Type of 'myVariable1' is '{0}' and" +  _
            " value is :{1}", myVariable1.GetType().ToString(), myVariable1.ToString())
Console.WriteLine("Type of 'myVariable2' is '{0}' and" +  _
      " value is :{1}", myVariable2.GetType().ToString(), myVariable2.ToString())
' Compare 'myVariable1' instance with 'myVariable2' Object.
If myVariable1.Equals(myVariable2) Then
   Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and" +  _
               "'myVariable2' are equal")
Else
   Console.WriteLine(ControlChars.NewLine + "Structures 'myVariable1' and" +  _
         "'myVariable2' are not equal")
End If

UInt64 myVariable1 = 50;
UInt64 myVariable2 = 50;

// Display the declaring type.
Console.WriteLine("\nType of 'myVariable1' is '{0}' and"+
     " value is :{1}",myVariable1.GetType(), myVariable1);
Console.WriteLine("Type of 'myVariable2' is '{0}' and"+
     " value is :{1}",myVariable2.GetType(), myVariable2);
// Compare 'myVariable1' instance with 'myVariable2' Object.
if( myVariable1.Equals( myVariable2 ) )
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are equal");
else
   Console.WriteLine( "\nStructures 'myVariable1' and "+
         "'myVariable2' are not equal");

UInt64 myVariable1 = 50;
UInt64 myVariable2 = 50;

// Display the declaring type.
Console::WriteLine( "\nType of 'myVariable1' is '{0}' and  value is : {1}", myVariable1.GetType(), myVariable1 );
Console::WriteLine( "Type of 'myVariable2' is '{0}' and  value is : {1}", myVariable2.GetType(), myVariable2 );

// Compare 'myVariable1' instance with 'myVariable2' Object.
if ( myVariable1.Equals( myVariable2 ) )
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are equal" );
else
      Console::WriteLine( "\nStructures 'myVariable1' and 'myVariable2' are not equal" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
Equals 重载
System 命名空间
CompareTo


UInt64 ..::.Equals 方法 (UInt64)

UInt64
.
.
::
.
Equals 方法 (UInt64)
UInt64 结构

返回一个值，该值指示此实例是否与指定的 UInt64 值相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As ULong _
) As Boolean
public bool Equals(
    ulong obj
)
public:
virtual bool Equals(
    unsigned long long obj
) sealed
abstract Equals :
        obj:uint64 -> bool
override Equals :
        obj:uint64 -> bool

参数

obj
类型： System UInt64
要与此实例进行比较的 UInt64 值。

返回值

类型： System Boolean
如果 obj 的值与此实例相同，则为 true；否则为 false。

实现

此方法实现 System..::.IEquatable<(Of <(T>)>) 接口，并且执行效果略好于 Equals，这是因为它不必将 obj 参数转换为对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
Equals 重载
System 命名空间


UInt64 ..::.GetHashCode 方法

UInt64
.
.
::
.
GetHashCode 方法
UInt64 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.GetTypeCode 方法

UInt64
.
.
::
.
GetTypeCode 方法
UInt64 结构

返回值类型 UInt64 的 TypeCode。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetTypeCode As TypeCode
public TypeCode GetTypeCode()
public:
virtual TypeCode GetTypeCode() sealed
abstract GetTypeCode : unit -> TypeCode
override GetTypeCode : unit -> TypeCode

返回值

类型： System TypeCode
枚举常数 TypeCode..::.UInt64。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间
TypeCode


UInt64 ..::.IConvertible ..::.ToBoolean 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToBoolean 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToBoolean。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToBoolean ( _
    provider As IFormatProvider _
) As Boolean Implements IConvertible.ToBoolean
bool IConvertible.ToBoolean(
    IFormatProvider provider
)
private:
virtual bool ToBoolean(
    IFormatProvider^ provider
) sealed = IConvertible::ToBoolean
private abstract ToBoolean :
        provider:IFormatProvider -> bool
private override ToBoolean :
        provider:IFormatProvider -> bool

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Boolean
如果当前实例的值不为零，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToBoolean(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToByte 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToByte 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToByte ( _
    provider As IFormatProvider _
) As Byte Implements IConvertible.ToByte
byte IConvertible.ToByte(
    IFormatProvider provider
)
private:
virtual unsigned char ToByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToByte
private abstract ToByte :
        provider:IFormatProvider -> byte
private override ToByte :
        provider:IFormatProvider -> byte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Byte
当前实例的值，已转换为 Byte。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToByte(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToChar 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToChar 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToChar。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToChar ( _
    provider As IFormatProvider _
) As Char Implements IConvertible.ToChar
char IConvertible.ToChar(
    IFormatProvider provider
)
private:
virtual wchar_t ToChar(
    IFormatProvider^ provider
) sealed = IConvertible::ToChar
private abstract ToChar :
        provider:IFormatProvider -> char
private override ToChar :
        provider:IFormatProvider -> char

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Char
当前实例的值，已转换为 Char。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToChar(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToDateTime 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToDateTime 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

不支持此转换。尝试使用此方法将引发 InvalidCastException。 不支持此转换。尝试使用此方法将引发 InvalidCastException。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDateTime ( _
    provider As IFormatProvider _
) As DateTime Implements IConvertible.ToDateTime
DateTime IConvertible.ToDateTime(
    IFormatProvider provider
)
private:
virtual DateTime ToDateTime(
    IFormatProvider^ provider
) sealed = IConvertible::ToDateTime
private abstract ToDateTime :
        provider:IFormatProvider -> DateTime
private override ToDateTime :
        provider:IFormatProvider -> DateTime

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System DateTime
不支持此转换。不返回任何值。 不支持此转换。不返回任何值。

实现

异常 | 条件
InvalidCastException | 在所有情况下。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToDecimal 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToDecimal 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDecimal。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDecimal ( _
    provider As IFormatProvider _
) As Decimal Implements IConvertible.ToDecimal
decimal IConvertible.ToDecimal(
    IFormatProvider provider
)
private:
virtual Decimal ToDecimal(
    IFormatProvider^ provider
) sealed = IConvertible::ToDecimal
private abstract ToDecimal :
        provider:IFormatProvider -> decimal
private override ToDecimal :
        provider:IFormatProvider -> decimal

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Decimal
当前实例的值，已转换为 Decimal。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDecimal(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToDouble 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToDouble 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToDouble。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToDouble ( _
    provider As IFormatProvider _
) As Double Implements IConvertible.ToDouble
double IConvertible.ToDouble(
    IFormatProvider provider
)
private:
virtual double ToDouble(
    IFormatProvider^ provider
) sealed = IConvertible::ToDouble
private abstract ToDouble :
        provider:IFormatProvider -> float
private override ToDouble :
        provider:IFormatProvider -> float

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Double
当前实例的值，已转换为 Double。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToDouble(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToInt16 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToInt16 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt16 ( _
    provider As IFormatProvider _
) As Short Implements IConvertible.ToInt16
short IConvertible.ToInt16(
    IFormatProvider provider
)
private:
virtual short ToInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt16
private abstract ToInt16 :
        provider:IFormatProvider -> int16
private override ToInt16 :
        provider:IFormatProvider -> int16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int16
当前实例的值，已转换为 Int16。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt16(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToInt32 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToInt32 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt32 ( _
    provider As IFormatProvider _
) As Integer Implements IConvertible.ToInt32
int IConvertible.ToInt32(
    IFormatProvider provider
)
private:
virtual int ToInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt32
private abstract ToInt32 :
        provider:IFormatProvider -> int
private override ToInt32 :
        provider:IFormatProvider -> int

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int32
当前实例的值，已转换为 Int32。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt32(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToInt64 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToInt64 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToInt64 ( _
    provider As IFormatProvider _
) As Long Implements IConvertible.ToInt64
long IConvertible.ToInt64(
    IFormatProvider provider
)
private:
virtual long long ToInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToInt64
private abstract ToInt64 :
        provider:IFormatProvider -> int64
private override ToInt64 :
        provider:IFormatProvider -> int64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Int64
当前实例的值，已转换为 Int64。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToInt64(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToSByte 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToSByte 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSByte。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSByte ( _
    provider As IFormatProvider _
) As SByte Implements IConvertible.ToSByte
sbyte IConvertible.ToSByte(
    IFormatProvider provider
)
private:
virtual signed char ToSByte(
    IFormatProvider^ provider
) sealed = IConvertible::ToSByte
private abstract ToSByte :
        provider:IFormatProvider -> sbyte
private override ToSByte :
        provider:IFormatProvider -> sbyte

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System SByte
当前实例的值，已转换为 SByte。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSByte(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToSingle 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToSingle 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToSingle。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToSingle ( _
    provider As IFormatProvider _
) As Single Implements IConvertible.ToSingle
float IConvertible.ToSingle(
    IFormatProvider provider
)
private:
virtual float ToSingle(
    IFormatProvider^ provider
) sealed = IConvertible::ToSingle
private abstract ToSingle :
        provider:IFormatProvider -> float32
private override ToSingle :
        provider:IFormatProvider -> float32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System Single
当前实例的值，已转换为 Single。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToSingle(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToType 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToType 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToType。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToType ( _
    type As Type, _
    provider As IFormatProvider _
) As Object Implements IConvertible.ToType
Object IConvertible.ToType(
    Type type,
    IFormatProvider provider
)
private:
virtual Object^ ToType(
    Type^ type,
    IFormatProvider^ provider
) sealed = IConvertible::ToType
private abstract ToType :
        type:Type *
        provider:IFormatProvider -> Object
private override ToType :
        type:Type *
        provider:IFormatProvider -> Object

参数

type
类型： System Type
要将此 UInt64 值转换为的类型。
provider
类型： System IFormatProvider
一个 IFormatProvider 实现，提供有关返回值格式的信息。

返回值

类型： System Object
当前实例的值，已转换为 type。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 static（在 Visual Basic 中为 Shared）Convert..::.ChangeType 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToUInt16 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToUInt16 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt16。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt16 ( _
    provider As IFormatProvider _
) As UShort Implements IConvertible.ToUInt16
ushort IConvertible.ToUInt16(
    IFormatProvider provider
)
private:
virtual unsigned short ToUInt16(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt16
private abstract ToUInt16 :
        provider:IFormatProvider -> uint16
private override ToUInt16 :
        provider:IFormatProvider -> uint16

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt16
当前实例的值，已转换为 UInt16。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt16(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToUInt32 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToUInt32 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt32。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt32 ( _
    provider As IFormatProvider _
) As UInteger Implements IConvertible.ToUInt32
uint IConvertible.ToUInt32(
    IFormatProvider provider
)
private:
virtual unsigned int ToUInt32(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt32
private abstract ToUInt32 :
        provider:IFormatProvider -> uint32
private override ToUInt32 :
        provider:IFormatProvider -> uint32

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt32
当前实例的值，已转换为 UInt32。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(UInt64) 方法。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。建议使用的替代方法是调用 Convert..::.ToUInt32(UInt64) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.IConvertible ..::.ToUInt64 方法

UInt64
.
.
::
.
IConvertible
.
.
::
.
ToUInt64 方法
UInt64 结构

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IConvertible..::.ToUInt64。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Function ToUInt64 ( _
    provider As IFormatProvider _
) As ULong Implements IConvertible.ToUInt64
ulong IConvertible.ToUInt64(
    IFormatProvider provider
)
private:
virtual unsigned long long ToUInt64(
    IFormatProvider^ provider
) sealed = IConvertible::ToUInt64
private abstract ToUInt64 :
        provider:IFormatProvider -> uint64
private override ToUInt64 :
        provider:IFormatProvider -> uint64

参数

provider
类型： System IFormatProvider
忽略此参数。

返回值

类型： System UInt64
当前实例的值，未更改。

实现

此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。 此成员是显式的接口成员实现。它只能在 UInt64 实例被强制转换为 IConvertible 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.Parse 方法

UInt64
.
.
::
.
Parse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt64 结构

将数字的字符串表示形式转换为它的等效 64 位无符号整数。

名称 说明
页首

参考

UInt64 结构
UInt64 成员
System 命名空间
TryParse


UInt64 ..::.Parse 方法 (String)

UInt64
.
.
::
.
Parse 方法 (String)
UInt64 结构

将数字的字符串表示形式转换为它的等效 64 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong Parse(
    string s
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long Parse(
    String^ s
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string -> uint64

参数

s
类型： System String
表示要转换的数字的字符串。

返回值

类型： System UInt64
与 s 中包含的数字等效的 64 位无符号整数。
异常 | 条件
ArgumentNullException | s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 参数的格式不正确。
OverflowException | s 参数表示小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue 的数字。

s 参数应该是以下形式的数字字符串表示形式。

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

Element | 说明
ws | 可选的空白。
sign | 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。但是，只能对零使用负号；否则，该方法将引发 OverflowException。
数字 | 一系列从 0 到 9 之间的数字。任何前导零都将被忽略。 一系列从 0 到 9 之间的数字。任何前导零都将被忽略。
说明 说明

使用 NumberStyles..::.Integer 样式来解释由 s 参数指定的字符串。它不能包含任何组分隔符或小数分隔符，也不能有小数部分。 使用 NumberStyles..::.Integer 样式来解释由 s 参数指定的字符串。它不能包含任何组分隔符或小数分隔符，也不能有小数部分。

s 参数是使用针对当前系统区域性初始化的 System.Globalization..::.NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息来分析字符串，请使用 Parse(String, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 System.Globalization..::.NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息来分析字符串，请使用 Parse(String, IFormatProvider) 方法。 s 参数是使用针对当前系统区域性初始化的 System.Globalization..::.NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。若要使用特定区域性的格式设置信息来分析字符串，请使用 Parse(String, IFormatProvider) 方法。

下面的示例使用 Parse 方法分析一个字符串值数组。

Dim values() As String = { "+13230", "-0", "1,390,146", "$190,235,421,127", _
                           "0xFA1B", "163042", "-10", "14065839182", _
                           "16e07", "134985.0", "-12034" }
For Each value As String In values
   Try
      Dim number As ULong = UInt64.Parse(value)
      Console.WriteLine("{0} --> {1}", value, number)
   Catch e As FormatException
      Console.WriteLine("{0}: Bad Format", value)
   Catch e As OverflowException
      Console.WriteLine("{0}: Overflow", value)
   End Try
Next
' The example displays the following output:
'       +13230 --> 13230
'       -0 --> 0
'       1,390,146: Bad Format
'       $190,235,421,127: Bad Format
'       0xFA1B: Bad Format
'       163042 --> 163042
'       -10: Overflow
'       14065839182 --> 14065839182
'       16e07: Bad Format
'       134985.0: Bad Format
'       -12034: Overflow

string[] values = { "+13230", "-0", "1,390,146", "$190,235,421,127",
                    "0xFA1B", "163042", "-10", "14065839182",
                    "16e07", "134985.0", "-12034" };
foreach (string value in values)
{
   try {
      ulong number = UInt64.Parse(value);
      Console.WriteLine("{0} --> {1}", value, number);
   }
   catch (FormatException) {
      Console.WriteLine("{0}: Bad Format", value);
   }
   catch (OverflowException) {
      Console.WriteLine("{0}: Overflow", value);
   }
}
// The example displays the following output:
//       +13230 --> 13230
//       -0 --> 0
//       1,390,146: Bad Format
//       $190,235,421,127: Bad Format
//       0xFA1B: Bad Format
//       163042 --> 163042
//       -10: Overflow
//       14065839182 --> 14065839182
//       16e07: Bad Format
//       134985.0: Bad Format
//       -12034: Overflow

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


UInt64 ..::.Parse 方法 (String, NumberStyles)

UInt64
.
.
::
.
Parse 方法 (String, NumberStyles)
UInt64 结构

将指定样式的数字的字符串表示形式转换为它的等效 64 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong Parse(
    string s,
    NumberStyles style
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long Parse(
    String^ s,
    NumberStyles style
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        style:NumberStyles -> uint64

参数

s
类型： System String
表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。 表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，这些枚举值指定 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。 枚举值的按位组合，这些枚举值指定 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。

返回值

类型： System UInt64
与 s 中指定的数字等效的 64 位无符号整数。
异常 | 条件
ArgumentNullException | s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 AllowHexSpecifier 和 HexNumber 值的组合。
FormatException | s 参数的格式不符合 style。
OverflowException | s 参数表示小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格、正负号、组分隔符或小数点符号）。style 必须是 NumberStyles 枚举中位标志的组合。当 s 包含十六进制的字符串表现形式、当 s 代表的数字系统（十进制或十六进制）仅在运行时才能知道时或者当希望在 s 中禁用空格或正负符号时，style 参数将使得此方法重载非常有用。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格、正负号、组分隔符或小数点符号）。style 必须是 NumberStyles 枚举中位标志的组合。当 s 包含十六进制的字符串表现形式、当 s 代表的数字系统（十进制或十六进制）仅在运行时才能知道时或者当希望在 s 中禁用空格或正负符号时，style 参数将使得此方法重载非常有用。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格、正负号、组分隔符或小数点符号）。style 必须是 NumberStyles 枚举中位标志的组合。当 s 包含十六进制的字符串表现形式、当 s 代表的数字系统（十进制或十六进制）仅在运行时才能知道时或者当希望在 s 中禁用空格或正负符号时，style 参数将使得此方法重载非常有用。

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][E[sign]exponential_digits][ws]

方括号（[ 和 ]）中的元素是可选的。如果 style 包含 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素： 方括号（[ 和 ]）中的元素是可选的。如果 style 包含 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素：

[ws]hexdigits[ws]

下表描述每个元素。

Element | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo..::.CurrencyNegativePattern 和 NumberFormatInfo..::.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则当前区域性的货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，只能对零使用负号；否则，该方法将引发 OverflowException。
数字 fractional_digits exponential_digits | 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。 由从 0 到 9 的数字组成的序列。对于 fractional_digits，只有数字 0 有效。
, | 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则当前区域性的组分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 FormatException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 FormatException。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。若要成功执行分析操作，只能将数字 0 作为小数数字；如果 fractional_digits 包含任何其他数字，则会引发 FormatException。
E | “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数（科学）表示法表示值。如果 style 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

NumberStyles 值 | s 中允许的除数字之外的元素
None | 仅 digits 元素。
AllowDecimalPoint | 小数点 (.)和 fractional-digits 元素。
AllowExponent | “e”或“E”字符与 exponential_digits 一起指示指数表示法。
AllowLeadingWhite | 位于 s 开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | 位于 s 开头的符号元素。
AllowTrailingSign | 位于 s 的结尾的 sign 元素。
AllowParentheses | 采用在括号内包含数值的形式的 sign 元素。
AllowThousands | 组分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数，也不能表示使用指数表示法的数。 所有元素。但是，s 不能表示十六进制数，也不能表示使用指数表示法的数。
Float | 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、组分隔符 (,) 和小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数。 所有元素。但是，s 不能表示十六进制数。

与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 与其他 NumberStyles 值不同，NumberStyles..::.AllowHexSpecifier 样式值意味着 s 中的单个数字字符总是被解释为十六进制字符，而后者允许但并不要求在 s 中存在特定的样式元素。有效的十六进制字符为 0-9、A-F 和 a-f。可以与 style 参数一起使用的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。）

说明 说明

如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。 如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性，请调用 Parse(String, NumberStyles, IFormatProvider) 重载。

下面的示例尝试使用许多 NumberStyles 值解析字符串数组中的每个元素。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim values() As String = { " 214309 ", "1,064,181", "(0)", "10241+", _
                                 " + 21499 ", " +21499 ", "122153.00", _
                                 "1e03ff", "91300.0e-2" }
      Dim whitespace As NumberStyles =  NumberStyles.AllowLeadingWhite Or NumberStyles.AllowTrailingWhite
      Dim styles() As NumberStyles = { NumberStyles.None, _
                                       whitespace, _
                                       NumberStyles.AllowLeadingSign Or NumberStyles.AllowTrailingSign Or whitespace, _
                                       NumberStyles.AllowThousands Or NumberStyles.AllowCurrencySymbol, _
                                       NumberStyles.AllowExponent Or NumberStyles.AllowDecimalPoint }

      ' Attempt to convert each number using each style combination.
      For Each value As String In values
         Console.WriteLine("Attempting to convert '{0}':", value)
         For Each style As NumberStyles In styles
            Try
               Dim number As ULong = UInt64.Parse(value, style)
               Console.WriteLine("   {0}: {1}", style, number)
            Catch e As FormatException
               Console.WriteLine("   {0}: Bad Format", style)
            Catch e As OverflowException
               Console.WriteLine("   {0}: Overflow", value)
            End Try
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'    Attempting to convert ' 214309 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: 214309
'       Integer, AllowTrailingSign: 214309
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '1,064,181':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: 1064181
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '(0)':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '10241+':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: 10241
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert ' + 21499 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert ' +21499 ':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: 21499
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '122153.00':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 122153
'
'    Attempting to convert '1e03ff':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: Bad Format
'
'    Attempting to convert '91300.0e-2':
'       None: Bad Format
'       AllowLeadingWhite, AllowTrailingWhite: Bad Format
'       Integer, AllowTrailingSign: Bad Format
'       AllowThousands, AllowCurrencySymbol: Bad Format
'       AllowDecimalPoint, AllowExponent: 913

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values= { " 214309 ", "1,064,181", "(0)", "10241+", " + 21499 ",
                         " +21499 ", "122153.00", "1e03ff", "91300.0e-2" };
      NumberStyles whitespace =  NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite;
      NumberStyles[] styles= { NumberStyles.None, whitespace,
                               NumberStyles.AllowLeadingSign | NumberStyles.AllowTrailingSign | whitespace,
                               NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol,
                               NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint };

      // Attempt to convert each number using each style combination.
      foreach (string value in values)
      {
         Console.WriteLine("Attempting to convert '{0}':", value);
         foreach (NumberStyles style in styles)
         {
            try {
               ulong number = UInt64.Parse(value, style);
               Console.WriteLine("   {0}: {1}", style, number);
            }
            catch (FormatException) {
               Console.WriteLine("   {0}: Bad Format", style);
            }
            catch (OverflowException)
            {
               Console.WriteLine("   {0}: Overflow", value);
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    Attempting to convert ' 214309 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: 214309
//       Integer, AllowTrailingSign: 214309
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '1,064,181':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: 1064181
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '(0)':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '10241+':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: 10241
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert ' + 21499 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert ' +21499 ':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: 21499
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '122153.00':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 122153
//
//    Attempting to convert '1e03ff':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: Bad Format
//
//    Attempting to convert '91300.0e-2':
//       None: Bad Format
//       AllowLeadingWhite, AllowTrailingWhite: Bad Format
//       Integer, AllowTrailingSign: Bad Format
//       AllowThousands, AllowCurrencySymbol: Bad Format
//       AllowDecimalPoint, AllowExponent: 913

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


UInt64 ..::.Parse 方法 (String, IFormatProvider)

UInt64
.
.
::
.
Parse 方法 (String, IFormatProvider)
UInt64 结构

将指定区域性特定格式的数字的字符串表示形式转换为它的等效 64 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    provider As IFormatProvider _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong Parse(
    string s,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long Parse(
    String^ s,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        provider:IFormatProvider -> uint64

参数

s
类型： System String
表示要转换的数字的字符串。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System UInt64
与 s 中指定的数字等效的 64 位无符号整数。
异常 | 条件
ArgumentNullException | s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
FormatException | s 参数的样式不正确。
OverflowException | s 参数表示小于 MinValue 或大于 MaxValue 的数字。

Parse(String, IFormatProvider) 方法的重载通常用于将可以多种方式格式化的文本转换为 UInt64 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。 Parse(String, IFormatProvider) 方法的重载通常用于将可以多种方式格式化的文本转换为 UInt64 值。例如，它可以用于将用户输入 HTML 文本框的文本转换为数值。

s 参数包含一个如下形式的数字：

[ws][sign]digits[ws]

方括号（“[”和“]”）中的项是可选的。下表描述每个元素。 方括号（“[”和“]”）中的项是可选的。下表描述每个元素。

Element | 说明
ws | 可选的空白。
sign | 如果 s 表示值零，则可选地为正号或负号。
数字 | 一系列从 0 到 9 之间的数字。

参数是用 NumberStyles..::.Integer 样式解释的。除了不带符号的整数值的十进制数字之外，只允许使用前导和尾随空格以及前导符号。（如果存在负号，则 s 必须表示零值，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 参数是用 NumberStyles..::.Integer 样式解释的。除了不带符号的整数值的十进制数字之外，只允许使用前导和尾随空格以及前导符号。（如果存在负号，则 s 必须表示零值，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。 参数是用 NumberStyles..::.Integer 样式解释的。除了不带符号的整数值的十进制数字之外，只允许使用前导和尾随空格以及前导符号。（如果存在负号，则 s 必须表示零值，否则该方法将引发 OverflowException。）若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请使用 Parse(String, NumberStyles, IFormatProvider) 方法。

provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。

  • 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo。

下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 UInt64 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 UInt64 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 UInt64 值。 下面的示例为 Web 窗体的按钮单击事件处理程序。该事件处理程序使用 HttpRequest..::.UserLanguages 属性返回的数组确定用户的区域设置，然后实例化对应于该区域设置的 CultureInfo 对象。随后会将属于该 CultureInfo 对象的 NumberFormatInfo 对象传递至 Parse(String, IFormatProvider) 方法，以便将用户输入转换为 UInt64 值。

Protected Sub OkToSingle_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OkToSingle.Click
   Dim locale As String
   Dim culture As CultureInfo
   Dim number As Single

   ' Return if string is empty
   If String.IsNullOrEmpty(Me.inputNumber.Text) Then Exit Sub

   ' Get locale of web request to determine possible format of number
   If Request.UserLanguages.Length = 0 Then Exit Sub
   locale = Request.UserLanguages(0)
   If String.IsNullOrEmpty(locale) Then Exit Sub

   ' Instantiate CultureInfo object for the user's locale
   culture = New CultureInfo(locale)

   ' Convert user input from a string to a number
   Try
      number = Single.Parse(Me.inputNumber.Text, culture.NumberFormat)
   Catch ex As FormatException
      Exit Sub
   Catch ex As Exception
      Exit Sub
   End Try

   ' Output number to label on web form
   Me.outputNumber.Text = "Number is " & number.ToString()
End Sub

protected void OkToSingle_Click(object sender, EventArgs e)
{
   string locale;
   float number;
   CultureInfo culture;

   // Return if string is empty
   if (String.IsNullOrEmpty(this.inputNumber.Text))
      return;

   // Get locale of web request to determine possible format of number
   if (Request.UserLanguages.Length == 0)
      return;
   locale = Request.UserLanguages[0];
   if (String.IsNullOrEmpty(locale))
      return;

   // Instantiate CultureInfo object for the user's locale
   culture = new CultureInfo(locale);

   // Convert user input from a string to a number
   try
   {
      number = Single.Parse(this.inputNumber.Text, culture.NumberFormat);
   }
   catch (FormatException)
   {
      return;
   }
   catch (Exception)
   {
      return;
   }
   // Output number to label on web form
   this.outputNumber.Text = "Number is " + number.ToString();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UInt64 结构
UInt64 成员
Parse 重载
System 命名空间
ToString
TryParse

其他资源

分析数值字符串


UInt64 ..::.Parse 方法 (String, NumberStyles, IFormatProvider)

UInt64
.
.
::
.
Parse 方法 (String, NumberStyles, IFormatProvider)
UInt64 结构

将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 64 位无符号整数。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function Parse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider _
) As ULong
[CLSCompliantAttribute(false)]
public static ulong Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)
[CLSCompliantAttribute(false)]
public:
static unsigned long long Parse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider
)
[<CLSCompliantAttribute(false)>]
static member Parse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider -> uint64

参数

s
类型： System String
表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。 表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。 枚举值的按位组合，用于指示可出现在 s 中的样式元素。一个要指定的典型值为 Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。

返回值

类型： System UInt64
与 s 中指定的数字等效的 64 位无符号整数。
异常 | 条件
ArgumentNullException | s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 NumberStyles..::.AllowHexSpecifier 和 NumberStyles..::.HexNumber 值的组合。
FormatException | s 参数的格式不符合 style。
OverflowException | s 参数表示小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue 的数字。 - 或 - s 包含非零的小数位。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。 style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。

s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign]digits[.fractional_digits][E[sign]exponential_digits][ws]

方括号（[ 和 ]）中的元素是可选的。如果 style 包含 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素： 方括号（[ 和 ]）中的元素是可选的。如果 style 包含 NumberStyles..::.AllowHexSpecifier，则 s 参数可能包含以下元素：

[ws]hexdigits[ws]

下表描述每个元素。

Element | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。（如果 s 包括一个负号并表示一个非零数字，该方法将引发 OverflowException。)如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。（如果 s 包括一个负号并表示一个非零数字，该方法将引发 OverflowException。)如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。 一个可选符号。（如果 s 包括一个负号并表示一个非零数字，该方法将引发 OverflowException。)如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。
数字 | 由从 0 到 9 的数字组成的序列。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则当前区域性的小数点符号可以出现在 s 中。
fractional_digits | 如果 style 包含 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果它不包含该标志，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 如果 style 包含 NumberStyles..::.AllowExponent 标志，则为数字 0-9 的一个或多个匹配项；如果它不包含该标志，则为数字 0 的一个或多个匹配项。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
E | “e”或“E”字符，指示用指数（科学）表示法表示值。如果 s 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数（科学）表示法表示值。如果 s 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential_digits | 由从 0 到 9 的数字组成的序列。如果 s 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 由从 0 到 9 的数字组成的序列。如果 s 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 样式对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | s 中允许的除数字之外的元素
NumberStyles None | 仅十进制数字。
NumberStyles AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。但是，如果样式不包含 NumberStyles..::.AllowExponent 标志，fractional_digits 必须由一个或多个数字 0 组成；否则，将引发 OverflowException。 小数点 (.)和 fractional_digits 元素。但是，如果样式不包含 NumberStyles..::.AllowExponent 标志，fractional_digits 必须由一个或多个数字 0 组成；否则，将引发 OverflowException。
NumberStyles AllowExponent | “e”或“E”字符与 exponential_digits 一起指示指数表示法。
NumberStyles AllowLeadingWhite | 位于 s 的开头的 ws 元素。
NumberStyles AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
NumberStyles AllowLeadingSign | digits 之前的符号。
NumberStyles AllowTrailingSign | digits 之后的符号。
NumberStyles AllowParentheses | 数字之前和之后的括号用于表示负值。
NumberStyles AllowThousands | 组分隔符 (,) 元素。
NumberStyles AllowCurrencySymbol | 货币 ($) 元素。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以与其组合的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举包含组合数字样式 NumberStyles..::.HexNumber，其中包含两个空白标志。）

说明 说明

如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。 如果 s 参数为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致分析操作引发异常。

provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种： provider 参数是一个其 GetFormat 方法返回一个 NumberFormatInfo 对象的 IFormatProvider 实现，该对象提供有关 s 格式的区域性特定信息。使用 provider 参数向分析操作提供自定义的格式设置信息的方法有以下三种：

  • 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。 可以传递一个 CultureInfo 对象，该对象指定要使用其格式设置的区域性。其 NumberFormat 属性提供了格式设置信息。

  • 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 可传递自定义 IFormatProvider 实现。其 GetFormat 方法必须实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例使用 Parse(String, NumberStyles, IFormatProvider) 方法将数字的各种字符串表示形式转换为 64 位无符号的整数值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR" }
      Dim styles() As NumberStyles = { NumberStyles.Integer, _
                                       NumberStyles.Integer Or NumberStyles.AllowDecimalPoint }
      Dim values() As String = { "170209", "+170209.0", "+170209,0", "-103214.00", _
                                 "-103214,00", "104561.1", "104561,1" }

      ' Parse strings using each culture
      For Each cultureName As String In cultureNames
         Dim ci As New CultureInfo(cultureName)
         Console.WriteLine("Parsing strings using the {0} culture", ci.DisplayName)
         ' Use each style.
         For Each style As NumberStyles In styles
            Console.WriteLine("   Style: {0}", style.ToString())
            ' Parse each numeric string.
            For Each value As String In values
               Try
                  Console.WriteLine("      Converted '{0}' to {1}.", value, _
                                    UInt64.Parse(value, style, ci))
               Catch e As FormatException
                  Console.WriteLine("      Unable to parse '{0}'.", value)
               Catch e As OverflowException
                  Console.WriteLine("      '{0}' is out of range of the UInt64 type.", _
                                    value)
               End Try
            Next
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'       Style: Integer
'          Converted '170209' to 170209.
'          Unable to parse '+170209.0'.
'          Unable to parse '+170209,0'.
'          Unable to parse '-103214.00'.
'          Unable to parse '-103214,00'.
'          Unable to parse '104561.1'.
'          Unable to parse '104561,1'.
'       Style: Integer, AllowDecimalPoint
'          Converted '170209' to 170209.
'          Converted '+170209.0' to 170209.
'          Unable to parse '+170209,0'.
'          '-103214.00' is out of range of the UInt64 type.
'          Unable to parse '-103214,00'.
'          '104561.1' is out of range of the UInt64 type.
'          Unable to parse '104561,1'.
'    Parsing strings using the French (France) culture
'       Style: Integer
'          Converted '170209' to 170209.
'          Unable to parse '+170209.0'.
'          Unable to parse '+170209,0'.
'          Unable to parse '-103214.00'.
'          Unable to parse '-103214,00'.
'          Unable to parse '104561.1'.
'          Unable to parse '104561,1'.
'       Style: Integer, AllowDecimalPoint
'          Converted '170209' to 170209.
'          Unable to parse '+170209.0'.
'          Converted '+170209,0' to 170209.
'          Unable to parse '-103214.00'.
'          '-103214,00' is out of range of the UInt64 type.
'          Unable to parse '104561.1'.
'          '104561,1' is out of range of the UInt64 type.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] cultureNames= { "en-US", "fr-FR" };
      NumberStyles[] styles= { NumberStyles.Integer,
                               NumberStyles.Integer | NumberStyles.AllowDecimalPoint };
      string[] values = { "170209", "+170209.0", "+170209,0", "-103214.00",
                                 "-103214,00", "104561.1", "104561,1" };

      // Parse strings using each culture
      foreach (string cultureName in cultureNames)
      {
         CultureInfo ci = new CultureInfo(cultureName);
         Console.WriteLine("Parsing strings using the {0} culture",
                           ci.DisplayName);
         // Use each style.
         foreach (NumberStyles style in styles)
         {
            Console.WriteLine("   Style: {0}", style.ToString());
            // Parse each numeric string.
            foreach (string value in values)
            {
               try {
                  Console.WriteLine("      Converted '{0}' to {1}.", value,
                                    UInt64.Parse(value, style, ci));
               }
               catch (FormatException) {
                  Console.WriteLine("      Unable to parse '{0}'.", value);
               }
               catch (OverflowException) {
                  Console.WriteLine("      '{0}' is out of range of the UInt64 type.",
                                    value);
               }
            }
         }
      }
   }
}
// The example displays the following output:
//       Style: Integer
//          Converted '170209' to 170209.
//          Unable to parse '+170209.0'.
//          Unable to parse '+170209,0'.
//          Unable to parse '-103214.00'.
//          Unable to parse '-103214,00'.
//          Unable to parse '104561.1'.
//          Unable to parse '104561,1'.
//       Style: Integer, AllowDecimalPoint
//          Converted '170209' to 170209.
//          Converted '+170209.0' to 170209.
//          Unable to parse '+170209,0'.
//          '-103214.00' is out of range of the UInt64 type.
//          Unable to parse '-103214,00'.
//          '104561.1' is out of range of the UInt64 type.
//          Unable to parse '104561,1'.
//    Parsing strings using the French (France) culture
//       Style: Integer
//          Converted '170209' to 170209.
//          Unable to parse '+170209.0'.
//          Unable to parse '+170209,0'.
//          Unable to parse '-103214.00'.
//          Unable to parse '-103214,00'.
//          Unable to parse '104561.1'.
//          Unable to parse '104561,1'.
//       Style: Integer, AllowDecimalPoint
//          Converted '170209' to 170209.
//          Unable to parse '+170209.0'.
//          Converted '+170209,0' to 170209.
//          Unable to parse '-103214.00'.
//          '-103214,00' is out of range of the UInt64 type.
//          Unable to parse '104561.1'.
//          '104561,1' is out of range of the UInt64 type.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
Parse 重载
System 命名空间
ToString

其他资源

分析数值字符串


UInt64 ..::.ToString 方法

UInt64
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt64 结构

将此实例的数值转换为其等效的字符串表示形式。

名称 说明
页首

参考

UInt64 结构
UInt64 成员
System 命名空间


UInt64 ..::.ToString 方法

UInt64
.
.
::
.
ToString 方法
UInt64 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示形式，由一系列从 0 到 9 之间的数字组成，不包含符号或前导零。

返回值是使用通用数值格式说明符 ("G") 和当前区域性的 NumberFormatInfo 对象进行设置格式的。UInt64 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。 返回值是使用通用数值格式说明符 ("G") 和当前区域性的 NumberFormatInfo 对象进行设置格式的。UInt64 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。

若要定义 64 位无符号整数值的字符串表示形式的格式设置，请调用 ToString(String) 方法。

下面的示例使用默认的 ToString()()() 方法显示 UInt64 值。此示例还显示通过使用许多标准格式说明符得到的 UInt64 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 UInt64 值。此示例还显示通过使用许多标准格式说明符得到的 UInt64 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。 下面的示例使用默认的 ToString()()() 方法显示 UInt64 值。此示例还显示通过使用许多标准格式说明符得到的 UInt64 值的字符串表示形式。这些示例是使用 en-US 区域性的格式设置转换显示的。

Module Example
   Public Sub Main()
      Dim value As ULong = 163249057
      ' Display value using default ToString method.
      Console.WriteLine(value.ToString())
      Console.WriteLine()

      ' Define an array of format specifiers.
      Dim formats() As String = { "G", "C", "D", "F", "N", "X" }
      ' Display value using the standard format specifiers.
      For Each format As String In formats
         Console.WriteLine("{0} format specifier: {1,16}", _
                           format, value.ToString(format))
      Next
   End Sub
End Module
' The example displays the following output:
'       163249057
'
'       G format specifier:        163249057
'       C format specifier:  $163,249,057.00
'       D format specifier:        163249057
'       F format specifier:     163249057.00
'       N format specifier:   163,249,057.00
'       X format specifier:          9BAFBA1

using System;

public class Example
{
   public static void Main()
   {
      ulong value = 163249057;
      // Display value using default ToString method.
      Console.WriteLine(value.ToString());
      Console.WriteLine();

      // Define an array of format specifiers.
      string[] formats = { "G", "C", "D", "F", "N", "X" };
      // Display value using the standard format specifiers.
      foreach (string format in formats)
         Console.WriteLine("{0} format specifier: {1,16}",
                           format, value.ToString(format));
   }
}
// The example displays the following output:
//       163249057
//
//       G format specifier:        163249057
//       C format specifier:  $163,249,057.00
//       D format specifier:        163249057
//       F format specifier:     163249057.00
//       N format specifier:   163,249,057.00
//       X format specifier:          9BAFBA1

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型


UInt64 ..::.ToString 方法 (IFormatProvider)

UInt64
.
.
::
.
ToString 方法 (IFormatProvider)
UInt64 结构

使用指定的区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    provider As IFormatProvider _
) As String
public string ToString(
    IFormatProvider provider
)
public:
virtual String^ ToString(
    IFormatProvider^ provider
) sealed
abstract ToString :
        provider:IFormatProvider -> string
override ToString :
        provider:IFormatProvider -> string

参数

provider
类型： System IFormatProvider
一个提供区域性特定的格式设置信息的对象。

返回值

类型： System String
此实例的值的字符串表示形式，由 provider 指定。

实现

此实例使用通用数值格式说明符（“G”）进行格式设置。UInt64 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。 此实例使用通用数值格式说明符（“G”）进行格式设置。UInt64 值的字符串表示形式由没有前导零的从 0 到 9 的数字序列组成。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回提供区域性特定区域性信息的 NumberFormatInfo 对象。但是，在使用通用数值格式说明符 ("G") 设置格式时没有使用 NumberFormatInfo 的属性。 provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回提供区域性特定区域性信息的 NumberFormatInfo 对象。但是，在使用通用数值格式说明符 ("G") 设置格式时没有使用 NumberFormatInfo 的属性。 provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回提供区域性特定区域性信息的 NumberFormatInfo 对象。但是，在使用通用数值格式说明符 ("G") 设置格式时没有使用 NumberFormatInfo 的属性。

下面的示例使用多个格式提供程序设置 64 位带符号值的格式，其中包括一个用于固定区域性的格式提供程序。该示例的输出阐释了 ToString(IFormatProvider) 方法返回的格式化字符串相同，与格式提供程序无关。 下面的示例使用多个格式提供程序设置 64 位带符号值的格式，其中包括一个用于固定区域性的格式提供程序。该示例的输出阐释了 ToString(IFormatProvider) 方法返回的格式化字符串相同，与格式提供程序无关。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Define an array of CultureInfo objects.
      Dim ci() As CultureInfo = { New CultureInfo("en-US"), _
                                  New CultureInfo("fr-FR"), _
                                  CultureInfo.InvariantCulture }
      Dim value As ULong = 18709243
      Console.WriteLine("  {0,12}   {1,12}   {2,12}", _
                        GetName(ci(0)), GetName(ci(1)), GetName(ci(2)))
      Console.WriteLine("  {0,12}   {1,12}   {2,12}", _
                        value.ToString(ci(0)), value.ToString(ci(1)), value.ToString(ci(2)))

   End Sub

   Private Function GetName(ci As CultureInfo) As String
      If ci.Equals(CultureInfo.InvariantCulture) Then
         Return "Invariant"
      Else
         Return ci.Name
      End If
   End Function
End Module
' The example displays the following output:
'             en-US          fr-FR      Invariant
'          18709243       18709243       18709243

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Define an array of CultureInfo objects.
      CultureInfo[] ci = { new CultureInfo("en-US"),
                           new CultureInfo("fr-FR"),
                           CultureInfo.InvariantCulture };
      ulong value = 18709243;
      Console.WriteLine("  {0,12}   {1,12}   {2,12}",
                        GetName(ci[0]), GetName(ci[1]), GetName(ci[2]));
      Console.WriteLine("  {0,12}   {1,12}   {2,12}",
                        value.ToString(ci[0]), value.ToString(ci[1]), value.ToString(ci[2]));
   }

   private static string GetName(CultureInfo ci)
   {
      if (ci.Equals(CultureInfo.InvariantCulture))
         return "Invariant";
      else
         return ci.Name;
   }
}
// The example displays the following output:
//             en-US          fr-FR      Invariant
//          18709243       18709243       18709243

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型


UInt64 ..::.ToString 方法 (String)

UInt64
.
.
::
.
ToString 方法 (String)
UInt64 结构

使用指定的格式将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String _
) As String
public string ToString(
    string format
)
public:
String^ ToString(
    String^ format
)
member ToString :
        format:string -> string

参数

format
类型： System String
一个数值格式字符串。

返回值

类型： System String
此实例的值的字符串表示形式，由 format 指定。
异常 | 条件
FormatException | format 参数无效。

format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt64 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。 format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt64 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。 format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt64 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关 .NET Framework 中的格式设置支持的更多信息，请参见格式化类型。

返回字符串的格式由当前区域性的 NumberFormatInfo 对象确定。根据 format 参数，此对象可以控制输出字符串中的组分隔符和小数点符号等符号。若要为不同于当前区域性的区域性提供格式设置信息，请调用 ToString(String, IFormatProvider) 重载。 返回字符串的格式由当前区域性的 NumberFormatInfo 对象确定。根据 format 参数，此对象可以控制输出字符串中的组分隔符和小数点符号等符号。若要为不同于当前区域性的区域性提供格式设置信息，请调用 ToString(String, IFormatProvider) 重载。 返回字符串的格式由当前区域性的 NumberFormatInfo 对象确定。根据 format 参数，此对象可以控制输出字符串中的组分隔符和小数点符号等符号。若要为不同于当前区域性的区域性提供格式设置信息，请调用 ToString(String, IFormatProvider) 重载。

下面的示例使用每个标准格式字符串和某些自定义格式字符串来显示一个 64 位无符号的整数值。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim value As ULong = 217960834
      Dim specifiers() As String = { "G", "C", "D3", "E2", "e3", "F", _
                                     "N", "P", "X", "000000.0", "#.0", _
                                     "00000000;(0);**Zero**" }

      For Each specifier As String In specifiers
         Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier))
      Next
   End Sub
End Module
' The example displays the following output:
'       G: 217960834
'       C: $217,960,834.00
'       D3: 217960834
'       E2: 2.18E+008
'       e3: 2.180e+008
'       F: 217960834.00
'       N: 217,960,834.00
'       P: 21,796,083,400.00 %
'       X: CFDD182
'       000000.0: 217960834.0
'       #.0: 217960834.0
'       00000000;(0);**Zero**: 217960834

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      ulong value = 217960834;
      string[] specifiers = { "G", "C", "D3", "E2", "e3", "F",
                              "N", "P", "X", "000000.0", "#.0",
                              "00000000;(0);**Zero**" };

      foreach (string specifier in specifiers)
         Console.WriteLine("{0}: {1}", specifier, value.ToString(specifier));
   }
}
// The example displays the following output:
//       G: 217960834
//       C: $217,960,834.00
//       D3: 217960834
//       E2: 2.18E+008
//       e3: 2.180e+008
//       F: 217960834.00
//       N: 217,960,834.00
//       P: 21,796,083,400.00 %
//       X: CFDD182
//       000000.0: 217960834.0
//       #.0: 217960834.0
//       00000000;(0);**Zero**: 217960834

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
ToString 重载
System 命名空间
Parse

其他资源

格式化类型
如何：用前导零填充数字


UInt64 ..::.ToString 方法 (String, IFormatProvider)

UInt64
.
.
::
.
ToString 方法 (String, IFormatProvider)
UInt64 结构

使用指定的格式和区域性特定格式信息，将此实例的数值转换为它的等效字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _
    format As String, _
    provider As IFormatProvider _
) As String
public string ToString(
    string format,
    IFormatProvider provider
)
public:
virtual String^ ToString(
    String^ format,
    IFormatProvider^ provider
) sealed
abstract ToString :
        format:string *
        provider:IFormatProvider -> string
override ToString :
        format:string *
        provider:IFormatProvider -> string

参数

format
类型： System String
一个数值格式字符串。
provider
类型： System IFormatProvider
一个对象，它提供有关此实例的区域性特定格式设置信息。

返回值

类型： System String
此实例的值的字符串表示形式形式，由 format 和 provider 指定。

实现

异常 | 条件
FormatException | format 参数无效。

format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt64 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。 format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt64 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。 format 参数可以为任何有效标准数值格式说明符以及自定义数值格式说明符的任何组合。如果 format 等于 String..::.Empty 或者是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前 UInt64 对象的返回值会使用常规格式说明符（“G”）来设置格式。如果 format 是其他任何值，则该方法将引发 FormatException。

.NET Framework 提供了广泛的格式设置支持，下面的格式设置主题中对此有更详细的描述：

  • 有关数值格式说明符的更多信息，请参见标准数字格式字符串和自定义数字格式字符串。

  • 有关格式设置的更多信息，请参见格式化类型。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt64 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt64 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt64 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt64 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回一个 NumberFormatInfo 对象，该对象提供有关此方法返回的字符串格式的区域性特定信息。在调用 ToString(String, IFormatProvider) 方法时，它会调用 provider 参数的 IFormatProvider..::.GetFormat 方法，并向其传递一个表示 NumberFormatInfo 类型的 Type 对象。GetFormat 方法然后返回 NumberFormatInfo 对象来提供用于设置当前 UInt64 值格式的信息，如组分隔符号或小数点符号。可通过三种方法来使用 provider 参数为 ToString(String, IFormatProvider) 方法提供格式设置信息：

  • 可传递 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。 可传递 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。

  • 可以传递提供数字格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。） 可以传递提供数字格式设置信息的实际 NumberFormatInfo 对象。（其 GetFormat 实现仅返回它自身。）

  • 可传递实现了 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 可传递实现了 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回的字符串的格式设置基于当前区域性的 NumberFormatInfo 对象。

下面的示例使用标准数字格式说明符和许多特定的 CultureInfo 对象来显示一个 32 位无符号的整数值。

Imports System.Globalization

Module Example
   Public Sub Main()
      ' Define cultures whose formatting conventions are to be used.
      Dim cultures() As CultureInfo = {CultureInfo.CreateSpecificCulture("en-US"), _
                                       CultureInfo.CreateSpecificCulture("fr-FR"), _
                                       CultureInfo.CreateSpecificCulture("es-ES") }
      Dim specifiers() As String = {"G", "C", "D4", "E2", "F", "N", "P", "X2"}
      Dim value As ULong = 22224021

      For Each specifier As String In specifiers
         For Each culture As CultureInfo In Cultures
            Console.WriteLine("{0,2} format using {1} culture: {2, 18}", _
                              specifier, culture.Name, _
                              value.ToString(specifier, culture))

         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'        G format using en-US culture:           22224021
'        G format using fr-FR culture:           22224021
'        G format using es-ES culture:           22224021
'
'        C format using en-US culture:     $22,224,021.00
'        C format using fr-FR culture:    22 224 021,00 ?
'        C format using es-ES culture:    22.224.021,00 ?
'
'       D4 format using en-US culture:           22224021
'       D4 format using fr-FR culture:           22224021
'       D4 format using es-ES culture:           22224021
'
'       E2 format using en-US culture:          2.22E+007
'       E2 format using fr-FR culture:          2,22E+007
'       E2 format using es-ES culture:          2,22E+007
'
'        F format using en-US culture:        22224021.00
'        F format using fr-FR culture:        22224021,00
'        F format using es-ES culture:        22224021,00
'
'        N format using en-US culture:      22,224,021.00
'        N format using fr-FR culture:      22 224 021,00
'        N format using es-ES culture:      22.224.021,00
'
'        P format using en-US culture: 2,222,402,100.00 %
'        P format using fr-FR culture: 2 222 402 100,00 %
'        P format using es-ES culture: 2.222.402.100,00 %
'
'       X2 format using en-US culture:            1531C95
'       X2 format using fr-FR culture:            1531C95
'       X2 format using es-ES culture:            1531C95

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Define cultures whose formatting conventions are to be used.
      CultureInfo[] cultures = { CultureInfo.CreateSpecificCulture("en-US"),
                                 CultureInfo.CreateSpecificCulture("fr-FR"),
                                 CultureInfo.CreateSpecificCulture("es-ES") };
      string[] specifiers = {"G", "C", "D4", "E2", "F", "N", "P", "X2"};
      ulong value = 22224021;

      foreach (string specifier in specifiers)
      {
         foreach (CultureInfo culture in cultures)
            Console.WriteLine("{0,2} format using {1} culture: {2, 18}",
                              specifier, culture.Name,
                              value.ToString(specifier, culture));
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//        G format using en-US culture:           22224021
//        G format using fr-FR culture:           22224021
//        G format using es-ES culture:           22224021
//
//        C format using en-US culture:     $22,224,021.00
//        C format using fr-FR culture:    22 224 021,00 ?
//        C format using es-ES culture:    22.224.021,00 ?
//
//       D4 format using en-US culture:           22224021
//       D4 format using fr-FR culture:           22224021
//       D4 format using es-ES culture:           22224021
//
//       E2 format using en-US culture:          2.22E+007
//       E2 format using fr-FR culture:          2,22E+007
//       E2 format using es-ES culture:          2,22E+007
//
//        F format using en-US culture:        22224021.00
//        F format using fr-FR culture:        22224021,00
//        F format using es-ES culture:        22224021,00
//
//        N format using en-US culture:      22,224,021.00
//        N format using fr-FR culture:      22 224 021,00
//        N format using es-ES culture:      22.224.021,00
//
//        P format using en-US culture: 2,222,402,100.00 %
//        P format using fr-FR culture: 2 222 402 100,00 %
//        P format using es-ES culture: 2.222.402.100,00 %
//
//       X2 format using en-US culture:            1531C95
//       X2 format using fr-FR culture:            1531C95
//       X2 format using es-ES culture:            1531C95

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UInt64 结构
UInt64 成员
ToString 重载
System 命名空间
Parse
String

其他资源

格式化类型
如何：用前导零填充数字


UInt64 ..::.TryParse 方法

UInt64
.
.
::
.
TryParse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UInt64 结构

尝试将数字的字符串表示形式转换为等效的 64 位无符号整数。一个指示转换是否成功的返回值。 尝试将数字的字符串表示形式转换为等效的 64 位无符号整数。一个指示转换是否成功的返回值。

名称 说明
页首

参考

UInt64 结构
UInt64 成员
System 命名空间
Parse


UInt64 ..::.TryParse 方法 (String, UInt64%)

UInt64
.
.
::
.
TryParse 方法 (String, UInt64%)
UInt64 结构

尝试将数字的字符串表示形式转换为等效的 64 位无符号整数。一个指示转换是否成功的返回值。 尝试将数字的字符串表示形式转换为等效的 64 位无符号整数。一个指示转换是否成功的返回值。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function TryParse ( _
    s As String, _
    <OutAttribute> ByRef result As ULong _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool TryParse(
    string s,
    out ulong result
)
[CLSCompliantAttribute(false)]
public:
static bool TryParse(
    String^ s,
    [OutAttribute] unsigned long long% result
)
[<CLSCompliantAttribute(false)>]
static member TryParse :
        s:string *
        result:uint64 byref -> bool

参数

s
类型： System String
表示要转换的数字的字符串。
result
类型： System UInt64 %
当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt64..::.MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt64..::.MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 中所含数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不正确，或者表示的数字小于 UInt64..::.MinValue 或大于 MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果成功转换了 s，则为 true；否则为 false。

TryParse(String, UInt64%) 方法类似于 Parse(String) 方法，不同之处在于该方法在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse(String, UInt64%) 方法类似于 Parse(String) 方法，不同之处在于该方法在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

s 参数应该是以下形式的小数数字字符串表示形式：

[ws][sign]digits[ws]

方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。 方括号（[ 和 ]）中的元素是可选的。下表描述每个元素。

Element | 说明
ws | 可选的空白。
sign | 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。 一个可选符号。有效的符号字符是由当前区域性的 NumberFormatInfo..::.NegativeSign 和 NumberFormatInfo..::.PositiveSign 属性确定的。
数字 | 一系列从 0 到 9 之间的十进制数字。

使用 NumberStyles..::.Integer 样式来解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt64%) 方法。 使用 NumberStyles..::.Integer 样式来解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt64%) 方法。 使用 NumberStyles..::.Integer 样式来解释 s 参数。除了十进制数字之外，前导符号只能与前导和尾随空格一起使用。若要将样式元素与可以在 s 中存在的区域性特定的格式设置信息一起显式定义，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt64%) 方法。

说明 说明

s 指定的字符串不能包含任何组分隔符或十进制分隔符，它不能有小数部分。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。 s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。有关更多信息，请参见NumberFormatInfo..::.CurrentInfo。

此重载将 s 参数中的所有数字都解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt64%) 重载代替。 此重载将 s 参数中的所有数字都解释为十进制数字。若要分析十六进制数的字符串表示形式，请调用 TryParse(String, NumberStyles, IFormatProvider, UInt64%) 重载代替。

下面的示例为字符串数组中的每个元素调用 TryParse(String, UInt64%) 方法一次。

Dim numericStrings() As String = {"1293.8", "+1671.7", "28347.", _
                                  "   33113684  ", "(0)", "-0", "+1293617", _
                                  "18-", "119870", "31,024", "  3127094 ", _
                                  "0070000" }
Dim number As ULong
For Each numericString As String In numericStrings
   If UInt64.TryParse(numericString, number) Then
      Console.WriteLine("Converted '{0}' to {1}.", numericString, number)
   Else
      Console.WriteLine("Cannot convert '{0}' to a UInt64.", numericString)
   End If
Next
' The example displays the following output:
'       Cannot convert '1293.8' to a UInt64.
'       Cannot convert '+1671.7' to a UInt64.
'       Cannot convert '28347.' to a UInt64.
'       Converted '   33113684  ' to 33113684.
'       Cannot convert '(0)' to a UInt64.
'       Converted '-0' to 0.
'       Converted '+1293617' to 1293617.
'       Cannot convert '18-' to a UInt64.
'       Converted '119870' to 119870.
'       Cannot convert '31,024' to a UInt64.
'       Converted '  3127094 ' to 3127094.
'       Converted '0070000' to 70000.

string[] numericStrings = { "1293.8", "+1671.7", "28347.",
                            "   33113684  ", "(0)", "-0", "+1293617",
                            "18-", "119870", "31,024", "  3127094 ",
                            "00700000" };
ulong number;
foreach (string numericString in numericStrings)
{
   if (UInt64.TryParse(numericString, out number))
      Console.WriteLine("Converted '{0}' to {1}.", numericString, number);
   else
      Console.WriteLine("Cannot convert '{0}' to a UInt64.", numericString);
}
// The example displays the following output:
//       Cannot convert '1293.8' to a UInt64.
//       Cannot convert '+1671.7' to a UInt64.
//       Cannot convert '28347.' to a UInt64.
//       Converted '   33113684  ' to 33113684.
//       Cannot convert '(0)' to a UInt64.
//       Converted '-0' to 0.
//       Converted '+1293617' to 1293617.
//       Cannot convert '18-' to a UInt64.
//       Converted '119870' to 119870.
//       Cannot convert '31,024' to a UInt64.
//       Converted '  3127094 ' to 3127094.
//       Converted '0070000' to 70000.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UInt64 结构
UInt64 成员
TryParse 重载
System 命名空间
Parse
ToString

其他资源

分析数值字符串


UInt64 ..::.TryParse 方法 (String, NumberStyles, IFormatProvider, UInt64%)

UInt64
.
.
::
.
TryParse 方法 (String, NumberStyles, IFormatProvider, UInt64%)
UInt64 结构

尝试将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 64 位无符号整数。一个指示转换是否成功的返回值。 尝试将数字的指定样式和区域性特定格式的字符串表示形式转换为其等效的 64 位无符号整数。一个指示转换是否成功的返回值。

此 API 不兼容 CLS。 兼容 CLS 的替代 API 为 Parse(String)。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Shared Function TryParse ( _
    s As String, _
    style As NumberStyles, _
    provider As IFormatProvider, _
    <OutAttribute> ByRef result As ULong _
) As Boolean
[CLSCompliantAttribute(false)]
public static bool TryParse(
    string s,
    NumberStyles style,
    IFormatProvider provider,
    out ulong result
)
[CLSCompliantAttribute(false)]
public:
static bool TryParse(
    String^ s,
    NumberStyles style,
    IFormatProvider^ provider,
    [OutAttribute] unsigned long long% result
)
[<CLSCompliantAttribute(false)>]
static member TryParse :
        s:string *
        style:NumberStyles *
        provider:IFormatProvider *
        result:uint64 byref -> bool

参数

s
类型： System String
表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。 表示要转换的数字的字符串。该字符串使用由 style 参数指定的样式来进行解释。
style
类型： System.Globalization NumberStyles
枚举值的一个按位组合，指示 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。 枚举值的一个按位组合，指示 s 所允许的格式。要指定的一个典型值为 NumberStyles..::.Integer。
provider
类型： System IFormatProvider
一个对象，提供有关 s 的区域性特定格式设置信息。
result
类型： System UInt64 %
当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue，则转换将失败。该参数未经初始化即被传递。 当此方法返回时，如果转换成功，则包含与 s 所包含的数字等效的 64 位无符号整数值；如果转换失败，则包含零。如果 s 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），格式不符合 style，或者表示的数字小于 UInt64..::.MinValue 或大于 UInt64..::.MaxValue，则转换将失败。该参数未经初始化即被传递。

返回值

类型： System Boolean
如果 s 转换成功，则为 true；否则为 false。
异常 | 条件
ArgumentException | style 不是一个 NumberStyles 值。 - 或 - style 不是 NumberStyles..::.AllowHexSpecifier 和 NumberStyles..::.HexNumber 值的组合。

TryParse(String, NumberStyles, IFormatProvider, UInt64%) 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于该方法在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。 TryParse(String, NumberStyles, IFormatProvider, UInt64%) 方法类似于 Parse(String, NumberStyles, IFormatProvider) 方法，不同之处在于该方法在转换失败时不引发异常。此方法使得在 s 无效且无法成功分析的情况下，无需使用异常处理来测试 FormatException。

style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值： style 参数定义 s 参数成功执行分析操作所需的样式元素（如空格或正负号）。它必须是 NumberStyles 枚举中位标志的组合。s 参数可能包含以下元素，具体取决于 style 的值：

[ws][$][sign][digits,]digits[.fractional_digits][E[sign]exponential_digits][ws]

方括号（“[”和“]”）中的项是可选的。或者，如果 style 参数包含 NumberStyles..::.AllowHexSpecifier，s 参数可能包含以下元素： 方括号（“[”和“]”）中的项是可选的。或者，如果 style 参数包含 NumberStyles..::.AllowHexSpecifier，s 参数可能包含以下元素：

[ws]hexdigits[ws]

下表描述每个元素。

Element | 说明
ws | 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。 可选的空白。如果 style 包含 NumberStyles..::.AllowLeadingWhite 标志，则空白可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingWhite 标志，则空白可以出现在 s 的结尾。
$ | 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。 区域性特定的货币符号。该符号在字符串中的位置由 provider 参数的 GetFormat 方法返回的 NumberFormatInfo 对象的 CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles..::.AllowCurrencySymbol 标志，则货币符号可以出现在 s 中。
sign | 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。 一个可选符号。如果 style 包含 NumberStyles..::.AllowLeadingSign 标志，则该符号可以出现在 s 的开头；如果 style 包含 NumberStyles..::.AllowTrailingSign 标志，则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles..::.AllowParentheses 标志，则可以在 s 中使用括号以指示负值。但是，如果存在负号，则 s 只能表示零值，以使分析操作成功。
数字 | 由从 0 到 9 的数字组成的序列。
, | 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的组分隔符可以出现在 s 中。 区域性特定的组分隔符。如果 style 包含 NumberStyles..::.AllowThousands 标志，则由 provider 指定的区域性的组分隔符可以出现在 s 中。
. | 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。 区域性特定的小数点符号。如果 style 包含 NumberStyles..::.AllowDecimalPoint 标志，则由 provider 指定的区域性的小数点符号可以出现在 s 中。
fractional_digits | 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。 出现一次或多次数字 0。仅在 style 包含 NumberStyles..::.AllowDecimalPoint 标志时，小数位才可以出现在 s 中。
E | “e”或“E”字符，指示用指数（科学）表示法表示值。如果 s 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 “e”或“E”字符，指示用指数（科学）表示法表示值。如果 s 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
exponential_digits | 由从 0 到 9 的数字组成的序列。如果 s 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。 由从 0 到 9 的数字组成的序列。如果 s 包含 NumberStyles..::.AllowExponent 标志，则 s 参数可使用指数表示法表示数字。
hexdigits | 由从 0 到 f 或从 0 到 F 的十六进制数字组成的序列。

仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。 仅带有十进制数字的字符串（与 NumberStyles..::.None 标志对应）总是可以分析成功。其余的大多数 NumberStyles 成员用于控制可能（但不是必须）存在于输入字符串中的元素。下表指示各个 NumberStyles 成员如何影响可能存在于 s 中的元素。

非复合 NumberStyles 值 | 值中允许的除数字之外的元素
None | 仅十进制数字。
AllowDecimalPoint | 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。 小数点 (.)和 fractional_digits 元素。不过，fractional_digits 必须仅包含一个或多个数字 0，否则此方法将返回 false。
AllowExponent | “e”或“E”字符与 exponential_digits 一起指示指数表示法。如果 s 代表指数表示法中的一个数字，它不能有非零、小数部分。 “e”或“E”字符与 exponential_digits 一起指示指数表示法。如果 s 代表指数表示法中的一个数字，它不能有非零、小数部分。
AllowLeadingWhite | 位于 s 开头的 ws 元素。
AllowTrailingWhite | 位于 s 的结尾的 ws 元素。
AllowLeadingSign | sign 元素位于 digits 之前。
AllowTrailingSign | sign 元素位于 digits 之后。
AllowParentheses | 采用在括号内包含零数值的形式的 sign 元素。
AllowThousands | 组分隔符 (,) 元素。
AllowCurrencySymbol | 货币 ($) 元素。
Currency | 所有元素。但是，s 不能表示十六进制数，也不能表示使用指数表示法的数。 所有元素。但是，s 不能表示十六进制数，也不能表示使用指数表示法的数。
Float | 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。 位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign 以及小数点 (.)符号。s 参数也可以使用指数表示法。
Number | ws、sign、组分隔符 (,) 和小数点 (.)元素。
Any | 所有元素。但是，s 不能表示十六进制数。 所有元素。但是，s 不能表示十六进制数。

如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。） 如果使用 NumberStyles..::.AllowHexSpecifier 标志，则 s 必须为十六进制值。可以在 style 中存在的其他标志只有 NumberStyles..::.AllowLeadingWhite 和 NumberStyles..::.AllowTrailingWhite。（NumberStyles 枚举具有包含两个空白标志的组合样式 HexNumber。）

说明 说明

如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。 如果 s 为十六进制数的字符串表示形式，则无法在其前面添加可用于将其识别为十六进制数的任何修饰符（如 0x 或 &h）。这将导致转换失败。

provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 s 格式的区域性特定信息。provider 参数可以是以下任意一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 s 格式的区域性特定信息。provider 参数可以是以下任意一项： provider 参数是 IFormatProvider 实现。其 GetFormat 方法返回的 NumberFormatInfo 对象将提供有关 s 格式的区域性特定信息。provider 参数可以是以下任意一项：

  • 一个 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。 一个 CultureInfo 对象，表示能提供格式设置信息的区域性。其 GetFormat 方法返回 NumberFormatInfo 对象，以便为区域化提供数值格式设置信息。

  • 一个 NumberFormatInfo 对象，提供了数值格式设置信息。（其 GetFormat 实现仅返回它自身。） 一个 NumberFormatInfo 对象，提供了数值格式设置信息。（其 GetFormat 实现仅返回它自身。）

  • 一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。 一个实现 IFormatProvider 的自定义对象。其 GetFormat 方法实例化并返回 NumberFormatInfo 对象，以提供格式设置信息。

如果 provider 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用当前区域性的 NumberFormatInfo 对象。

下面的示例将 TryParse(String, NumberStyles, IFormatProvider, UInt64%) 方法与许多不同的字符串和 NumberStyles 值一起调用。

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim numericString As String
      Dim styles As NumberStyles

      numericString = "2106034"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)

      numericString = "-10603"
      styles = NumberStyles.None
      CallTryParse(numericString, styles)

      numericString = "29103674.00"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "10345.72"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "41792210E-01"
      styles = NumberStyles.Integer Or NumberStyles.AllowExponent
      CallTryParse(numericString, styles)

      numericString = "9112E-01"
      CallTryParse(numericString, styles)

      numericString = "312E01"
      CallTryParse(numericString, styles)

      numericString = "FFC86DA1"
      CallTryParse(numericString, NumberStyles.HexNumber)

      numericString = "0x8F8C"
      CallTryParse(numericString, NumberStyles.HexNumber)
   End Sub

   Private Sub CallTryParse(stringToConvert As String, styles AS NumberStyles)
      Dim number As ULong
      Dim result As Boolean = UInt64.TryParse(stringToConvert, styles, _
                                              CultureInfo.InvariantCulture, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
      Else
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           Convert.ToString(stringToConvert))
      End If
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '2106034' to 2106034.
'       Attempted conversion of '-10603' failed.
'       Converted '29103674.00' to 29103674.
'       Attempted conversion of '10345.72' failed.
'       Converted '41792210E-01' to 4179221.
'       Attempted conversion of '9112E-01' failed.
'       Converted '312E01' to 3120.
'       Converted 'FFC86DA1' to 4291325345.
'       Attempted conversion of '0x8F8C' failed.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string numericString;
      NumberStyles styles;

      numericString = "2106034";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      numericString = "-10603";
      styles = NumberStyles.None;
      CallTryParse(numericString, styles);

      numericString = "29103674.00";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "10345.72";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "41792210E-01";
      styles = NumberStyles.Integer | NumberStyles.AllowExponent;
      CallTryParse(numericString, styles);

      numericString = "9112E-01";
      CallTryParse(numericString, styles);

      numericString = "312E01";
      CallTryParse(numericString, styles);

      numericString = "FFC86DA1";
      CallTryParse(numericString, NumberStyles.HexNumber);

      numericString = "0x8F8C";
      CallTryParse(numericString, NumberStyles.HexNumber);
   }

   private static void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      ulong number;
      bool result = UInt64.TryParse(stringToConvert, styles,
                                   CultureInfo.InvariantCulture, out number);
      if (result)
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
      else
         Console.WriteLine("Attempted conversion of '{0}' failed.",
                           Convert.ToString(stringToConvert));
   }
}
// The example displays the following output:
//       Converted '2106034' to 2106034.
//       Attempted conversion of '-10603' failed.
//       Converted '29103674.00' to 29103674.
//       Attempted conversion of '10345.72' failed.
//       Converted '41792210E-01' to 4179221.
//       Attempted conversion of '9112E-01' failed.
//       Converted '312E01' to 3120.
//       Converted 'FFC86DA1' to 4291325345.
//       Attempted conversion of '0x8F8C' failed.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UInt64 结构
UInt64 成员
TryParse 重载
System 命名空间
Parse
Parse
ToString

其他资源

分析数值字符串


UIntPtr 结构

UIntPtr 结构
成员

用于表示指针或句柄的平台特定类型。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<CLSCompliantAttribute(False)> _
Public Structure UIntPtr _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public struct UIntPtr : ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public value class UIntPtr : ISerializable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
[<CLSCompliantAttribute(false)>]
type UIntPtr =
    struct
        interface ISerializable
    end

UIntPtr 类型被设计成整数，其大小适用于特定平台。即是说，此类型的实例在 32 位硬件和操作系统中将是 32 位，在 64 位硬件和操作系统上将是 64 位。 UIntPtr 类型被设计成整数，其大小适用于特定平台。即是说，此类型的实例在 32 位硬件和操作系统中将是 32 位，在 64 位硬件和操作系统上将是 64 位。

重要说明 重要事项

IntPtr 类型符合 CLS，而 UIntPtr 类型却不符合。只有 IntPtr 类型可用在公共语言运行时中。UIntPtr 类型大多数是提供来维护与 IntPtr 类型之间的体系结构上的对称性。 IntPtr 类型符合 CLS，而 UIntPtr 类型却不符合。只有 IntPtr 类型可用在公共语言运行时中。UIntPtr 类型大多数是提供来维护与 IntPtr 类型之间的体系结构上的对称性。 IntPtr 类型符合 CLS，而 UIntPtr 类型却不符合。只有 IntPtr 类型可用在公共语言运行时中。UIntPtr 类型大多数是提供来维护与 IntPtr 类型之间的体系结构上的对称性。

UIntPtr 类型可以由支持指针的语言使用，并可作为在支持与不支持指针的语言间引用数据的一种通用方式。UIntPtr 对象也可用于保持句柄。 UIntPtr 类型可以由支持指针的语言使用，并可作为在支持与不支持指针的语言间引用数据的一种通用方式。UIntPtr 对象也可用于保持句柄。

此类型实现 ISerializable 接口。

此类型是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 成员
System 命名空间
IntPtr


UIntPtr 成员

UIntPtr 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UIntPtr 结构

用于表示指针或句柄的平台特定类型。

UIntPtr 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UIntPtr 结构
System 命名空间


UIntPtr 构造函数

UIntPtr 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UIntPtr 结构

初始化 UIntPtr 的新实例。

名称 说明
页首

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr 构造函数 (UInt32)

UIntPtr 构造函数 (UInt32)
UIntPtr 结构

使用指定的 32 位指针或句柄初始化 UIntPtr 的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As UInteger _
)
public UIntPtr(
    uint value
)
public:
UIntPtr(
    unsigned int value
)
new :
        value:uint32 -> UIntPtr

参数

value
类型： System UInt32
包含于 32 位无符号整数中的指针或句柄。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
UIntPtr 重载
System 命名空间


UIntPtr 构造函数 (UInt64)

UIntPtr 构造函数 (UInt64)
UIntPtr 结构

使用指定的 64 位指针或句柄初始化 UIntPtr 的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    value As ULong _
)
public UIntPtr(
    ulong value
)
public:
UIntPtr(
    unsigned long long value
)
new :
        value:uint64 -> UIntPtr

参数

value
类型： System UInt64
包含于 64 位无符号整数中的指针或句柄。
异常 | 条件
OverflowException | 在 32 位的平台上，value 太大，无法表示为一个 UIntPtr。

只要 value 的值要求的位数多于当前平台所支持的位数，就会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
UIntPtr 重载
System 命名空间


UIntPtr 构造函数 (Void*)

UIntPtr 构造函数 (Void*)
UIntPtr 结构

使用指向未指定类型的指定指针初始化 UIntPtr 的新实例。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Visual Basic 不支持使用或返回不安全类型的 API。
[CLSCompliantAttribute(false)]
public UIntPtr(
    void* value
)
[CLSCompliantAttribute(false)]
public:
UIntPtr(
    void* value
)
[<CLSCompliantAttribute(false)>]
new :
        value:nativeptr<unit> -> UIntPtr

参数

value
类型： System Void*
指向未指定类型的指针。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
UIntPtr 重载
System 命名空间
Void


UIntPtr 字段

UIntPtr 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UIntPtr 结构

UIntPtr 类型公开以下成员。

名称 说明
页首

参考

UIntPtr 结构
System 命名空间


UIntPtr ..::.Zero 字段

UIntPtr
.
.
::
.
Zero 字段
UIntPtr 结构

一个只读字段，代表已初始化为零的指针或句柄。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Zero As UIntPtr
public static readonly UIntPtr Zero
public:
static initonly UIntPtr Zero
static val Zero: UIntPtr

此字段的值并不等效于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。使用该字段可有效地确定 UIntPtr 的实例是否已被设置为非零值。 此字段的值并不等效于 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。使用该字段可有效地确定 UIntPtr 的实例是否已被设置为非零值。

例如，假定变量 uip 为 UIntPtr 的实例。通过将它与某个构造函数返回的值相比较，就可确定它是否已被设置，例如：“if uip != new UIntPtr(0)...”。但是，通过调用构造函数来获得未被初始化的指针效率很低。代码最好编写为“if uip != UIntPtr.Zero...”或“if !UIntPtr.Zero.Equals(uip)...”。 例如，假定变量 uip 为 UIntPtr 的实例。通过将它与某个构造函数返回的值相比较，就可确定它是否已被设置，例如：“if uip != new UIntPtr(0)...”。但是，通过调用构造函数来获得未被初始化的指针效率很低。代码最好编写为“if uip != UIntPtr.Zero...”或“if !UIntPtr.Zero.Equals(uip)...”。 例如，假定变量 uip 为 UIntPtr 的实例。通过将它与某个构造函数返回的值相比较，就可确定它是否已被设置，例如：“if uip != new UIntPtr(0)...”。但是，通过调用构造函数来获得未被初始化的指针效率很低。代码最好编写为“if uip != UIntPtr.Zero...”或“if !UIntPtr.Zero.Equals(uip)...”。 例如，假定变量 uip 为 UIntPtr 的实例。通过将它与某个构造函数返回的值相比较，就可确定它是否已被设置，例如：“if uip != new UIntPtr(0)...”。但是，通过调用构造函数来获得未被初始化的指针效率很低。代码最好编写为“if uip != UIntPtr.Zero...”或“if !UIntPtr.Zero.Equals(uip)...”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr 方法

UIntPtr 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UIntPtr 结构

UIntPtr 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

UIntPtr 结构
System 命名空间


UIntPtr ..::.Add 方法

UIntPtr
.
.
::
.
Add 方法
UIntPtr 结构

为无符号指针的值增加偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Add ( _
    pointer As UIntPtr, _
    offset As Integer _
) As UIntPtr
public static UIntPtr Add(
    UIntPtr pointer,
    int offset
)
public:
static UIntPtr Add(
    UIntPtr pointer,
    int offset
)
static member Add :
        pointer:UIntPtr *
        offset:int -> UIntPtr

参数

pointer
类型： System UIntPtr
要为其增加偏移量的无符号指针。
offset
类型： System Int32
要增加的偏移量。

返回值

类型： System UIntPtr
新的无符号指针，反映向 pointer 增加 offset 的结果。

如果结果太大而无法表示为指定平台上的指针，Add 方法不会引发异常。而是在未检查的上下文中执行加法运算。 如果结果太大而无法表示为指定平台上的指针，Add 方法不会引发异常。而是在未检查的上下文中执行加法运算。

不支持运算符重载或自定义运算符的语言可以使用此方法为无符号指针的值添加偏移量。

下面的示例实例化一个指向十元素数组开头的 UIntPtr 对象，然后调用 Add 方法来循环访问数组中的元素。

Module Example
   Public Sub Main()
      Dim arr() As Integer = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
      Dim ptr As UIntPtr = CType(arr(0), UIntPtr)
      For ctr As Integer= 0 To arr.Length - 1
         Dim newPtr As UIntPtr = UIntPtr.Add(ptr, ctr)
         Console.Write("{0}   ", newPtr)
      Next
   End Sub
End Module
' The example displays the following output:
'       1   2   3   4   5   6   7   8   9   10

using System;

public class Example
{
   public static void Main()
   {
      int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
      UIntPtr ptr = (UIntPtr) arr[0];
      for (int ctr = 0; ctr < arr.Length; ctr++)
      {
         UIntPtr newPtr = UIntPtr.Add(ptr, ctr);
         Console.Write("{0}   ", newPtr);
      }
   }
}
// The example displays the following output:
//       1   2   3   4   5   6   7   8   9   10

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间
Addition


UIntPtr ..::.Equals 方法

UIntPtr
.
.
::
.
Equals 方法
UIntPtr 结构

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与此实例进行比较的对象或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 obj 是 UIntPtr 的实例并且等于此实例的值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr ..::.GetHashCode 方法

UIntPtr
.
.
::
.
GetHashCode 方法
UIntPtr 结构

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr ..::.ISerializable ..::.GetObjectData 方法

UIntPtr
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
UIntPtr 结构

使用序列化当前 UIntPtr 对象时所需的数据来填充 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
private:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
private override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要填充数据的 SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
此序列化的目标。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。） 此序列化的目标。（未使用此参数；指定 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。）

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法使用当前 UIntPtr 对象的值来填充 info 参数。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr ..::.Subtract 方法

UIntPtr
.
.
::
.
Subtract 方法
UIntPtr 结构

从无符号指针的值中减去偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Subtract ( _
    pointer As UIntPtr, _
    offset As Integer _
) As UIntPtr
public static UIntPtr Subtract(
    UIntPtr pointer,
    int offset
)
public:
static UIntPtr Subtract(
    UIntPtr pointer,
    int offset
)
static member Subtract :
        pointer:UIntPtr *
        offset:int -> UIntPtr

参数

pointer
类型： System UIntPtr
要从中减去偏移量的无符号指针。
offset
类型： System Int32
要减去的偏移量。

返回值

类型： System UIntPtr
新的无符号指针，反映从 pointer 中减去 offset 的结果。

如果结果太小而无法表示为指定平台上的指针，Subtract 方法不会引发异常。而是在未检查的上下文中执行减法运算。 如果结果太小而无法表示为指定平台上的指针，Subtract 方法不会引发异常。而是在未检查的上下文中执行减法运算。

不支持运算符重载或自定义运算符的语言可以使用此方法从无符号指针值中减去偏移量。

下面的示例实例化一个指向十元素数组末尾的 IntPtr 对象，然后调用 Subtract 方法按反序循环访问数组中的元素。

Module Example
   Public Sub Main()
      Dim arr() As Integer = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
      Dim ptr As UIntPtr = CType(arr(arr.GetUpperBound(0)), UIntPtr)
      For ctr As Integer= 0 To arr.GetUpperBound(0)
         Dim newPtr As UIntPtr = UIntPtr.Subtract(ptr, ctr)
         Console.Write("{0}   ", newPtr)
      Next
   End Sub
End Module
' The example displays the following output:
'       10   9   8   7   6   5   4   3   2   1

using System;

public class Example
{
   public static void Main()
   {
      int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
      UIntPtr ptr = (UIntPtr) arr[arr.GetUpperBound(0)];
      for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
      {
         UIntPtr newPtr = UIntPtr.Subtract(ptr, ctr);
         Console.Write("{0}   ", newPtr);
      }
   }
}
// The example displays the following output:
//       10   9   8   7   6   5   4   3   2   1

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间
Subtraction


UIntPtr ..::.ToPointer 方法

UIntPtr
.
.
::
.
ToPointer 方法
UIntPtr 结构

将此实例的值转换为指向未指定的类型的指针。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<CLSCompliantAttribute(False)> _
Public Function ToPointer As Void*
[CLSCompliantAttribute(false)]
public void* ToPointer()
[CLSCompliantAttribute(false)]
public:
void* ToPointer()
[<CLSCompliantAttribute(false)>]
member ToPointer : unit -> nativeptr<unit>

返回值

类型： System Void*
指向 Void 的指针，即是说，该指针所指向的内存包含有未指定的类型的数据。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr ..::.ToString 方法

UIntPtr
.
.
::
.
ToString 方法
UIntPtr 结构

将此实例的数值转换为其等效的字符串表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
此实例的值的字符串表示。

如果此实例的 Size 属性的值为 4，则此方法等效于 ToString；否则，此方法等效于 ToString。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr ..::.ToUInt32 方法

UIntPtr
.
.
::
.
ToUInt32 方法
UIntPtr 结构

将此实例的值转换成 32 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToUInt32 As UInteger
public uint ToUInt32()
public:
unsigned int ToUInt32()
member ToUInt32 : unit -> uint32

返回值

类型： System UInt32
等于此实例的值的 32 位无符号整数。
异常 | 条件
OverflowException | 在 64 位平台上，此实例的值太大，无法表示为 32 位无符号整数。

只要 value 的值要求的位数多于当前平台所支持的位数，就会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr ..::.ToUInt64 方法

UIntPtr
.
.
::
.
ToUInt64 方法
UIntPtr 结构

将此实例的值转换成 64 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToUInt64 As ULong
public ulong ToUInt64()
public:
unsigned long long ToUInt64()
member ToUInt64 : unit -> uint64

返回值

类型： System UInt64
等于此实例的值的 64 位无符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr 运算符和类型转换

UIntPtr 运算符和类型转换
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UIntPtr 结构

UIntPtr 类型公开以下成员。

名称 说明
页首

参考

UIntPtr 结构
System 命名空间


UIntPtr ..::.Addition 运算符

UIntPtr
.
.
::
.
Addition 运算符
UIntPtr 结构

为无符号指针的值增加偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator + ( _
    pointer As UIntPtr, _
    offset As Integer _
) As UIntPtr
public static UIntPtr operator +(
    UIntPtr pointer,
    int offset
)
public:
static UIntPtr operator +(
    UIntPtr pointer,
    int offset
)
static let inline (+)
        pointer:UIntPtr *
        offset:int  : UIntPtr

参数

pointer
类型： System UIntPtr
要为其增加偏移量的无符号指针。
offset
类型： System Int32
要增加的偏移量。

返回值

类型： System UIntPtr
新的无符号指针，反映向 pointer 增加 offset 的结果。

Addition 方法定义了 UIntPtr 对象的加法运算。它启用了诸如以下内容的代码。 Addition 方法定义了 UIntPtr 对象的加法运算。它启用了诸如以下内容的代码。

Dim arr() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
Dim ptr = CType(arr(0), UIntPtr)
For ctr As Integer = 0 To arr.Length - 1
   Dim newPtr As UIntPtr = ptr + ctr
   Console.WriteLine(newPtr)
Next

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
UIntPtr ptr = (UIntPtr) arr[0];
for (int ctr = 0; ctr < arr.Length; ctr++)
{
   UIntPtr newPtr = ptr + ctr;
   Console.WriteLine(newPtr);
}

不支持自定义运算符的语言可以改为调用 Add 方法。

如果结果太大而无法表示为指定平台上的指针，加法运算不会引发异常。而是在未检查的上下文中执行。 如果结果太大而无法表示为指定平台上的指针，加法运算不会引发异常。而是在未检查的上下文中执行。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间
Add


UIntPtr ..::.Equality 运算符

UIntPtr
.
.
::
.
Equality 运算符
UIntPtr 结构

确定 UIntPtr 的两个指定实例是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    value1 As UIntPtr, _
    value2 As UIntPtr _
) As Boolean
public static bool operator ==(
    UIntPtr value1,
    UIntPtr value2
)
public:
static bool operator ==(
    UIntPtr value1,
    UIntPtr value2
)
static let inline (=)
        value1:UIntPtr *
        value2:UIntPtr  : bool

参数

value1
类型： System UIntPtr
要比较的第一个指针或句柄。
value2
类型： System UIntPtr
要比较的第二个指针或句柄。

返回值

类型： System Boolean
如果 value1 等于 value2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr ExplicitNarrowingExplicitExplicit 转换运算符

UIntPtr
Explicit
Narrowing
Explicit
Explicit
转换运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UIntPtr 结构

名称 说明
页首

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr ExplicitNarrowingExplicitExplicit 转换 (UInt32 to UIntPtr)

UIntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (UInt32 to UIntPtr)
UIntPtr 结构

将 32 位无符号整数的值转换成 UIntPtr。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As UInteger _
) As UIntPtr
public static explicit operator UIntPtr (
    uint value
)
static explicit operator UIntPtr (
    unsigned int value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System UInt32
32 位无符号整数。

返回值

类型： System UIntPtr
初始化为 value 的 UIntPtr 新实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
重载
System 命名空间
UIntPtr


UIntPtr ExplicitNarrowingExplicitExplicit 转换 (UInt64 to UIntPtr)

UIntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (UInt64 to UIntPtr)
UIntPtr 结构

将 64 位无符号整数的值转换成 UIntPtr。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As ULong _
) As UIntPtr
public static explicit operator UIntPtr (
    ulong value
)
static explicit operator UIntPtr (
    unsigned long long value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System UInt64
64 位无符号整数。

返回值

类型： System UIntPtr
初始化为 value 的 UIntPtr 新实例。
异常 | 条件
OverflowException | 在 32 位的平台上，value 太大，无法表示为一个 UIntPtr。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
重载
System 命名空间
UIntPtr


UIntPtr ExplicitNarrowingExplicitExplicit 转换 (UIntPtr to Void*)

UIntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (UIntPtr to Void*)
UIntPtr 结构

将指定的 UIntPtr 的值转换为指向未指定类型的指针。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As UIntPtr _
) As Void*
public static explicit operator void* (
    UIntPtr value
)
static explicit operator void* (
    UIntPtr value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System UIntPtr
要转换的指针或句柄。

返回值

类型： System Void*
value 的内容。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
重载
System 命名空间
ToPointer


UIntPtr ExplicitNarrowingExplicitExplicit 转换 (UIntPtr to UInt64)

UIntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (UIntPtr to UInt64)
UIntPtr 结构

将指定的 UIntPtr 的值转换为 64 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As UIntPtr _
) As ULong
public static explicit operator ulong (
    UIntPtr value
)
static explicit operator unsigned long long (
    UIntPtr value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System UIntPtr
要转换的指针或句柄。

返回值

类型： System UInt64
value 的内容。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
重载
System 命名空间
ToUInt64


UIntPtr ExplicitNarrowingExplicitExplicit 转换 (UIntPtr to UInt32)

UIntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (UIntPtr to UInt32)
UIntPtr 结构

将指定的 UIntPtr 的值转换为 32 位无符号整数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As UIntPtr _
) As UInteger
public static explicit operator uint (
    UIntPtr value
)
static explicit operator unsigned int (
    UIntPtr value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System UIntPtr
要转换的指针或句柄。

返回值

类型： System UInt32
value 的内容。
异常 | 条件
OverflowException | 在 64 位平台上，value 的值太大，无法表示为 32 位无符号整数。

只要 value 的值要求的位数多于当前平台所支持的位数，就会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
重载
System 命名空间
ToUInt32


UIntPtr ExplicitNarrowingExplicitExplicit 转换 (Void* to UIntPtr)

UIntPtr
Explicit
Narrowing
Explicit
Explicit
转换 (Void* to UIntPtr)
UIntPtr 结构

将指定的指向未指定类型的指针转换为 UIntPtr。

此 API 不兼容 CLS。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Narrowing Operator CType ( _
    value As Void* _
) As UIntPtr
public static explicit operator UIntPtr (
    void* value
)
static explicit operator UIntPtr (
    void* value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System Void*
指向未指定类型的指针。

返回值

类型： System UIntPtr
UIntPtr 的新实例，初始化为 value。
  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
重载
System 命名空间
UIntPtr


UIntPtr ..::.Inequality 运算符

UIntPtr
.
.
::
.
Inequality 运算符
UIntPtr 结构

确定 UIntPtr 的两个指定实例是否不等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    value1 As UIntPtr, _
    value2 As UIntPtr _
) As Boolean
public static bool operator !=(
    UIntPtr value1,
    UIntPtr value2
)
public:
static bool operator !=(
    UIntPtr value1,
    UIntPtr value2
)
static let inline (<>)
        value1:UIntPtr *
        value2:UIntPtr  : bool

参数

value1
类型： System UIntPtr
要比较的第一个指针或句柄。
value2
类型： System UIntPtr
要比较的第二个指针或句柄。

返回值

类型： System Boolean
如果 value1 不等于 value2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UIntPtr ..::.Subtraction 运算符

UIntPtr
.
.
::
.
Subtraction 运算符
UIntPtr 结构

从无符号指针的值中减去偏移量。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator - ( _
    pointer As UIntPtr, _
    offset As Integer _
) As UIntPtr
public static UIntPtr operator -(
    UIntPtr pointer,
    int offset
)
public:
static UIntPtr operator -(
    UIntPtr pointer,
    int offset
)
static let inline (-)
        pointer:UIntPtr *
        offset:int  : UIntPtr

参数

pointer
类型： System UIntPtr
要从中减去偏移量的无符号指针。
offset
类型： System Int32
要减去的偏移量。

返回值

类型： System UIntPtr
新的无符号指针，反映从 pointer 中减去 offset 的结果。

Subtraction 方法为 UIntPtr 对象定义了减法运算。它启用了诸如以下内容的代码。 Subtraction 方法为 UIntPtr 对象定义了减法运算。它启用了诸如以下内容的代码。

Dim arr() As Integer = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim ptr As UIntPtr = CType(arr(arr.GetUpperBound(0)), UIntPtr)
For ctr As Integer= 0 To arr.GetUpperBound(0)
   Dim newPtr As UIntPtr = UIntPtr.Subtract(ptr, ctr)
   Console.Write("{0}   ", newPtr)
Next

int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
UIntPtr ptr = (UIntPtr) arr[arr.GetUpperBound(0)];
for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
{
   UIntPtr newPtr = ptr - ctr;
   Console.Write("{0}   ", newPtr);
}

不支持自定义运算符的语言可以改为调用 Subtract 方法。

如果结果太小而无法表示为指定平台上的指针，减法运算不会引发异常。而是在未检查的上下文中执行。 如果结果太小而无法表示为指定平台上的指针，减法运算不会引发异常。而是在未检查的上下文中执行。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间
Subtract


UIntPtr 属性

UIntPtr 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UIntPtr 结构

UIntPtr 类型公开以下成员。

名称 说明
页首

参考

UIntPtr 结构
System 命名空间


UIntPtr ..::.Size 属性

UIntPtr
.
.
::
.
Size 属性
UIntPtr 结构

获得此实例的大小。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Size As Integer
    Get
public static int Size { get; }
public:
static property int Size {
    int get ();
}
static member Size : int

属性值

类型： System Int32
此平台上的指针或句柄的大小，按字节计。此属性的值在 32 位平台上为 4，在 64 位平台上为 8。 此平台上的指针或句柄的大小，按字节计。此属性的值在 32 位平台上为 4，在 64 位平台上为 8。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UIntPtr 结构
UIntPtr 成员
System 命名空间


UnauthorizedAccessException 类

UnauthorizedAccessException 类
成员

当操作系统因 I/O 错误或指定类型的安全错误而拒绝访问时所引发的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class UnauthorizedAccessException _
    Inherits SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class UnauthorizedAccessException : SystemException
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class UnauthorizedAccessException : public SystemException
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type UnauthorizedAccessException =
    class
        inherit SystemException
    end

可以在异常对象的详细信息中找到发生异常的原因。 可以在异常对象的详细信息中找到发生异常的原因。

UnauthorizedAccessException 使用值为 0x80070005 的 HRESULT COR_E_UNAUTHORIZEDACCESS。

System System..::.UnauthorizedAccessExceptionUnauthorizedAccessException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UnauthorizedAccessException 成员
System 命名空间
Exception

其他资源

处理和引发异常


UnauthorizedAccessException 成员

UnauthorizedAccessException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UnauthorizedAccessException 类

当操作系统因 I/O 错误或指定类型的安全错误而拒绝访问时所引发的异常。

UnauthorizedAccessException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UnauthorizedAccessException 类
System 命名空间


UnauthorizedAccessException 构造函数

UnauthorizedAccessException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UnauthorizedAccessException 类

初始化 UnauthorizedAccessException 类的一个新实例。

名称 说明
页首

参考

UnauthorizedAccessException 类
UnauthorizedAccessException 成员
System 命名空间


UnauthorizedAccessException 构造函数

UnauthorizedAccessException 构造函数
UnauthorizedAccessException 类

初始化 UnauthorizedAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public UnauthorizedAccessException()
public:
UnauthorizedAccessException()
new : unit -> UnauthorizedAccessException

此构造函数将新实例的 Message 属性初始化为系统提供的、描述错误的消息，例如“尝试执行未经授权的操作。”。此消息将考虑当前系统区域性。

下表显示 MemberAccessException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UnauthorizedAccessException 类
UnauthorizedAccessException 成员
UnauthorizedAccessException 重载
System 命名空间


UnauthorizedAccessException 构造函数 (String)

UnauthorizedAccessException 构造函数 (String)
UnauthorizedAccessException 类

使用指定错误消息初始化 UnauthorizedAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String _
)
public UnauthorizedAccessException(
    string message
)
public:
UnauthorizedAccessException(
    String^ message
)
new :
        message:string -> UnauthorizedAccessException

参数

message
类型： System String
描述错误的消息。

message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 message 参数的内容应为用户所理解。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 UnauthorizedAccessException 实例的初始属性值。

属性 | 值
InnerException | null 引用（在 Visual Basic 中为 Nothing）。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UnauthorizedAccessException 类
UnauthorizedAccessException 成员
UnauthorizedAccessException 重载
System 命名空间


UnauthorizedAccessException 构造函数 (SerializationInfo, StreamingContext)

UnauthorizedAccessException 构造函数 (SerializationInfo, StreamingContext)
UnauthorizedAccessException 类

用序列化数据初始化 UnauthorizedAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected UnauthorizedAccessException(
    SerializationInfo info,
    StreamingContext context
)
protected:
UnauthorizedAccessException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> UnauthorizedAccessException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UnauthorizedAccessException 类
UnauthorizedAccessException 成员
UnauthorizedAccessException 重载
System 命名空间


UnauthorizedAccessException 构造函数 (String, Exception)

UnauthorizedAccessException 构造函数 (String, Exception)
UnauthorizedAccessException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 UnauthorizedAccessException 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public UnauthorizedAccessException(
    string message,
    Exception inner
)
public:
UnauthorizedAccessException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> UnauthorizedAccessException

参数

message
类型： System String
解释异常原因的错误信息。
inner
类型： System Exception
导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。 导致当前异常的异常。如果 inner 参数不是空引用（在 Visual Basic 中为 Nothing），则在处理内部异常的 catch 块中引发当前异常。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性不向构造函数提供内部异常值，则为空引用（在 Visual Basic 中为 Nothing）。

下表显示 UnauthorizedAccessException 实例的初始属性值。

属性 | 值
InnerException | 内部异常引用。
Message | 错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UnauthorizedAccessException 类
UnauthorizedAccessException 成员
UnauthorizedAccessException 重载
System 命名空间


UnauthorizedAccessException 方法

UnauthorizedAccessException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UnauthorizedAccessException 类

UnauthorizedAccessException 类型公开以下成员。

名称 说明
页首

参考

UnauthorizedAccessException 类
System 命名空间


UnauthorizedAccessException 属性

UnauthorizedAccessException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UnauthorizedAccessException 类

UnauthorizedAccessException 类型公开以下成员。

名称 说明
页首

参考

UnauthorizedAccessException 类
System 命名空间


UnauthorizedAccessException 事件

UnauthorizedAccessException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UnauthorizedAccessException 类

UnauthorizedAccessException 类型公开以下成员。

名称 说明
页首

参考

UnauthorizedAccessException 类
System 命名空间


UnhandledExceptionEventArgs 类

UnhandledExceptionEventArgs 类
成员

为以下情况下引发的事件提供数据：存在一个不是在任何应用程序域中处理的异常。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class UnhandledExceptionEventArgs _
    Inherits EventArgs
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class UnhandledExceptionEventArgs : EventArgs
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class UnhandledExceptionEventArgs : public EventArgs
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type UnhandledExceptionEventArgs =
    class
        inherit EventArgs
    end

UnhandledExceptionEventArgs 提供对异常对象和一个标志的访问，该标志指示公共语言运行时是否即将终止。UnhandledExceptionEventArgs 是传递到 AppDomain..::.UnhandledException 事件的 UnhandledExceptionEventHandler 中的一个参数。 UnhandledExceptionEventArgs 提供对异常对象和一个标志的访问，该标志指示公共语言运行时是否即将终止。UnhandledExceptionEventArgs 是传递到 AppDomain..::.UnhandledException 事件的 UnhandledExceptionEventHandler 中的一个参数。

有关事件处理程序委托的更多信息，请参见 事件和委托。

System System..::.UnhandledExceptionEventArgsUnhandledExceptionEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UnhandledExceptionEventArgs 成员
System 命名空间
AppDomain UnhandledException
UnhandledExceptionEventHandler

其他资源

事件和委托


UnhandledExceptionEventArgs 成员

UnhandledExceptionEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UnhandledExceptionEventArgs 类

为以下情况下引发的事件提供数据：存在一个不是在任何应用程序域中处理的异常。

UnhandledExceptionEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UnhandledExceptionEventArgs 类
System 命名空间


UnhandledExceptionEventArgs 构造函数

UnhandledExceptionEventArgs 构造函数
UnhandledExceptionEventArgs 类

使用异常对象和公共语言运行时终止标志初始化 UnhandledExceptionEventArgs 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    exception As Object, _
    isTerminating As Boolean _
)
public UnhandledExceptionEventArgs(
    Object exception,
    bool isTerminating
)
public:
UnhandledExceptionEventArgs(
    Object^ exception,
    bool isTerminating
)
new :
        exception:Object *
        isTerminating:bool -> UnhandledExceptionEventArgs

参数

exception
类型： System Object
未经处理的异常。
isTerminating
类型： System Boolean
如果运行时即将终止，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UnhandledExceptionEventArgs 类
UnhandledExceptionEventArgs 成员
System 命名空间


UnhandledExceptionEventArgs 方法

UnhandledExceptionEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UnhandledExceptionEventArgs 类

UnhandledExceptionEventArgs 类型公开以下成员。

名称 说明
页首

参考

UnhandledExceptionEventArgs 类
System 命名空间


UnhandledExceptionEventArgs 属性

UnhandledExceptionEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UnhandledExceptionEventArgs 类

UnhandledExceptionEventArgs 类型公开以下成员。

名称 说明
页首

参考

UnhandledExceptionEventArgs 类
System 命名空间


UnhandledExceptionEventArgs ..::.ExceptionObject 属性

UnhandledExceptionEventArgs
.
.
::
.
ExceptionObject 属性
UnhandledExceptionEventArgs 类

获取未经处理的异常对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property ExceptionObject As Object
    Get
public Object ExceptionObject { get; }
public:
property Object^ ExceptionObject {
    Object^ get ();
}
member ExceptionObject : Object

属性值

类型： System Object
未经处理的异常对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UnhandledExceptionEventArgs 类
UnhandledExceptionEventArgs 成员
System 命名空间


UnhandledExceptionEventArgs ..::.IsTerminating 属性

UnhandledExceptionEventArgs
.
.
::
.
IsTerminating 属性
UnhandledExceptionEventArgs 类

指示公共语言运行时是否即将终止。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsTerminating As Boolean
    Get
public bool IsTerminating { get; }
public:
property bool IsTerminating {
    bool get ();
}
member IsTerminating : bool

属性值

类型： System Boolean
如果运行时即将终止，则为 true；否则为 false。

从 .NET Framework 2.0 版开始，对于大多数未经处理的异常，此属性都返回 true，除非应用程序兼容性标志被用于还原为 1.0 和 1.1 版的行为。原因是线程（包括线程池线程）中大多数未经处理的异常都被允许自然继续，这通常会导致应用程序终止。有关更多信息（包括运行时不会终止情况的列表），请参见托管线程中的异常。 从 .NET Framework 2.0 版开始，对于大多数未经处理的异常，此属性都返回 true，除非应用程序兼容性标志被用于还原为 1.0 和 1.1 版的行为。原因是线程（包括线程池线程）中大多数未经处理的异常都被允许自然继续，这通常会导致应用程序终止。有关更多信息（包括运行时不会终止情况的列表），请参见托管线程中的异常。 从 .NET Framework 2.0 版开始，对于大多数未经处理的异常，此属性都返回 true，除非应用程序兼容性标志被用于还原为 1.0 和 1.1 版的行为。原因是线程（包括线程池线程）中大多数未经处理的异常都被允许自然继续，这通常会导致应用程序终止。有关更多信息（包括运行时不会终止情况的列表），请参见托管线程中的异常。

版本信息

以下情况适用于 .NET Framework 1.0 和 1.1 版：当在应用程序的主线程中收到异常但未处理时，此属性返回 true。如果非托管线程正在执行托管代码且收到未经处理的异常，则此属性也返回 true。最后，此属性对应用程序创建的线程池线程和托管线程返回 false，因为 1.0 和 1.1 版捕获此类线程中未经处理的异常并忽略它们。 以下情况适用于 .NET Framework 1.0 和 1.1 版：当在应用程序的主线程中收到异常但未处理时，此属性返回 true。如果非托管线程正在执行托管代码且收到未经处理的异常，则此属性也返回 true。最后，此属性对应用程序创建的线程池线程和托管线程返回 false，因为 1.0 和 1.1 版捕获此类线程中未经处理的异常并忽略它们。 以下情况适用于 .NET Framework 1.0 和 1.1 版：当在应用程序的主线程中收到异常但未处理时，此属性返回 true。如果非托管线程正在执行托管代码且收到未经处理的异常，则此属性也返回 true。最后，此属性对应用程序创建的线程池线程和托管线程返回 false，因为 1.0 和 1.1 版捕获此类线程中未经处理的异常并忽略它们。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UnhandledExceptionEventArgs 类
UnhandledExceptionEventArgs 成员
System 命名空间


UnhandledExceptionEventHandler 委托

UnhandledExceptionEventHandler 委托

表示将处理事件的方法，该事件由应用程序域不处理的异常引发。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Delegate Sub UnhandledExceptionEventHandler ( _
    sender As Object, _
    e As UnhandledExceptionEventArgs _
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void UnhandledExceptionEventHandler(
    Object sender,
    UnhandledExceptionEventArgs e
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void UnhandledExceptionEventHandler(
    Object^ sender,
    UnhandledExceptionEventArgs^ e
)
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type UnhandledExceptionEventHandler =
    delegate of
        sender:Object *
        e:UnhandledExceptionEventArgs -> unit

参数

sender
类型： System Object
未经处理的异常事件的源。
e
类型： System UnhandledExceptionEventArgs
包含事件数据的 UnhandledExceptionEventArgs。

UnhandledExceptionEventHandler 只能为由系统创建以执行应用程序的默认应用程序域指定。为由应用程序创建的 AppDomain 指定 UnhandledExceptionEventHandler 没有任何效果。 UnhandledExceptionEventHandler 只能为由系统创建以执行应用程序的默认应用程序域指定。为由应用程序创建的 AppDomain 指定 UnhandledExceptionEventHandler 没有任何效果。

创建 UnhandledExceptionEventHandler 委托时，标识将处理事件的方法。若要使事件处理程序与事件关联，请将该委托的一个实例添加到事件。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 创建 UnhandledExceptionEventHandler 委托时，标识将处理事件的方法。若要使事件处理程序与事件关联，请将该委托的一个实例添加到事件。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 创建 UnhandledExceptionEventHandler 委托时，标识将处理事件的方法。若要使事件处理程序与事件关联，请将该委托的一个实例添加到事件。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 创建 UnhandledExceptionEventHandler 委托时，标识将处理事件的方法。若要使事件处理程序与事件关联，请将该委托的一个实例添加到事件。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间
UnhandledExceptionEventArgs
EventHandler

其他资源

事件和委托


Uri 类

Uri 类
成员

提供统一资源标识符 (URI) 的对象表示形式和对 URI 各部分的轻松访问。

命名空间： System
程序集： System（在 System.dll 中）
<SerializableAttribute> _
<TypeConverterAttribute(GetType(UriTypeConverter))> _
Public Class Uri _
    Implements ISerializable
[SerializableAttribute]
[TypeConverterAttribute(typeof(UriTypeConverter))]
public class Uri : ISerializable
[SerializableAttribute]
[TypeConverterAttribute(typeof(UriTypeConverter))]
public ref class Uri : ISerializable
[<SerializableAttribute>]
[<TypeConverterAttribute(typeof(UriTypeConverter))>]
type Uri =
    class
        interface ISerializable
    end

URI 是 Intranet 或 Internet 上可由应用程序使用的资源的一种简洁表示形式。Uri 类定义了属性和方法来处理 URI，包括分析、比较和组合。Uri 类属性是只读的；若要创建可修改的对象，请使用 UriBuilder 类。 URI 是 Intranet 或 Internet 上可由应用程序使用的资源的一种简洁表示形式。Uri 类定义了属性和方法来处理 URI，包括分析、比较和组合。Uri 类属性是只读的；若要创建可修改的对象，请使用 UriBuilder 类。 URI 是 Intranet 或 Internet 上可由应用程序使用的资源的一种简洁表示形式。Uri 类定义了属性和方法来处理 URI，包括分析、比较和组合。Uri 类属性是只读的；若要创建可修改的对象，请使用 UriBuilder 类。

相对 URI（例如“/new/index.htm”）必须相对于基 URI 展开，这样才是绝对的。提供了 MakeRelative 方法在必要时将绝对 URI 转换为相对 URI。 相对 URI（例如“/new/index.htm”）必须相对于基 URI 展开，这样才是绝对的。提供了 MakeRelative 方法在必要时将绝对 URI 转换为相对 URI。

如果 URI 字符串是格式良好的 URI 并且包括方案标识符，Uri 构造函数将不会转义 URI 字符串。

Uri 属性用转义编码返回规范化数据表示形式，任何 Unicode 值大于 127 的字符都会被替换为等效的十六进制数。为使 URI 具有规范化格式，Uri 构造函数执行以下步骤： Uri 属性用转义编码返回规范化数据表示形式，任何 Unicode 值大于 127 的字符都会被替换为等效的十六进制数。为使 URI 具有规范化格式，Uri 构造函数执行以下步骤：

  • 将 URI 方案转换为小写。

  • 将主机名转换为小写。

  • 如果主机名为 IPv6 地址，则使用规范化 IPv6 地址。ScopeId 和其他可选的 IPv6 数据将被移除。 如果主机名为 IPv6 地址，则使用规范化 IPv6 地址。ScopeId 和其他可选的 IPv6 数据将被移除。

  • 移除默认端口号和空端口号。

  • 通过压缩 /./、/../、// 等序列（包括转义表示形式），规范化分层 URI 的路径。请注意，在某些方案中，不压缩转义表示形式。 通过压缩 /./、/../、// 等序列（包括转义表示形式），规范化分层 URI 的路径。请注意，在某些方案中，不压缩转义表示形式。

  • 对于分层 URI，如果主机未以正斜杠 (/) 结尾，则添加一个正斜杠。

  • 默认情况下，URI 中的任何保留字符都要根据 RFC 2396 进行转义。如果启用了国际资源标识符或国际域名分析，则会按照 RFC 3986 和 RFC 3987 对 URI 中的保留字符进行转义，因此该行为会发生变化。 默认情况下，URI 中的任何保留字符都要根据 RFC 2396 进行转义。如果启用了国际资源标识符或国际域名分析，则会按照 RFC 3986 和 RFC 3987 对 URI 中的保留字符进行转义，因此该行为会发生变化。

在某些方案的构造函数中，作为规范化工作的一部分，将压缩转义表示形式。其 URI 将压缩转义序列的方案包括：file、http、https、net.pipe 和 net.tcp。对于所有方案，转义序列不能压缩。例如，如果您将两个点“..”编码为百分号形式的“%2E%2E”，则对于某些方案，URI 构造函数将压缩此序列。例如，下面的代码示例演示 http 方案的 URI 构造函数。 在某些方案的构造函数中，作为规范化工作的一部分，将压缩转义表示形式。其 URI 将压缩转义序列的方案包括：file、http、https、net.pipe 和 net.tcp。对于所有方案，转义序列不能压缩。例如，如果您将两个点“..”编码为百分号形式的“%2E%2E”，则对于某些方案，URI 构造函数将压缩此序列。例如，下面的代码示例演示 http 方案的 URI 构造函数。 在某些方案的构造函数中，作为规范化工作的一部分，将压缩转义表示形式。其 URI 将压缩转义序列的方案包括：file、http、https、net.pipe 和 net.tcp。对于所有方案，转义序列不能压缩。例如，如果您将两个点“..”编码为百分号形式的“%2E%2E”，则对于某些方案，URI 构造函数将压缩此序列。例如，下面的代码示例演示 http 方案的 URI 构造函数。 在某些方案的构造函数中，作为规范化工作的一部分，将压缩转义表示形式。其 URI 将压缩转义序列的方案包括：file、http、https、net.pipe 和 net.tcp。对于所有方案，转义序列不能压缩。例如，如果您将两个点“..”编码为百分号形式的“%2E%2E”，则对于某些方案，URI 构造函数将压缩此序列。例如，下面的代码示例演示 http 方案的 URI 构造函数。 在某些方案的构造函数中，作为规范化工作的一部分，将压缩转义表示形式。其 URI 将压缩转义序列的方案包括：file、http、https、net.pipe 和 net.tcp。对于所有方案，转义序列不能压缩。例如，如果您将两个点“..”编码为百分号形式的“%2E%2E”，则对于某些方案，URI 构造函数将压缩此序列。例如，下面的代码示例演示 http 方案的 URI 构造函数。

    Uri uri = new Uri("http://myUrl/%2E%2E/%2E%2E");
    Console.WriteLine(uri.AbsoluteUri);
    Console.WriteLine(uri.PathAndQuery);

当这段代码执行时，将返回下面的输出，其中对转义序列进行了压缩。

http://myUrl/
/

下面的代码示例演示 ftp 方案的 URI 构造函数：

    Uri uri = new Uri("ftp://myUrl/%2E%2E/%2E%2E");
    Console.WriteLine(uri.AbsoluteUri);
    Console.WriteLine(uri.PathAndQuery);

当这段代码执行时，将返回下面的输出，其中未对转义序列进行压缩。

ftp://myUrl/%2E%2E/%2E%2E
/%2E%2E/%2E%2E

使用 ToString 方法，可以将 Uri 类的内容从转义编码的 URI 引用转换为可读的 URI 引用。请注意，在 ToString 方法的输出中，某些保留字符可能仍会被转义。这是为了支持利用 ToString 返回的值明确无误地重新构造 URI。 使用 ToString 方法，可以将 Uri 类的内容从转义编码的 URI 引用转换为可读的 URI 引用。请注意，在 ToString 方法的输出中，某些保留字符可能仍会被转义。这是为了支持利用 ToString 返回的值明确无误地重新构造 URI。 使用 ToString 方法，可以将 Uri 类的内容从转义编码的 URI 引用转换为可读的 URI 引用。请注意，在 ToString 方法的输出中，某些保留字符可能仍会被转义。这是为了支持利用 ToString 返回的值明确无误地重新构造 URI。

某些 URI 会包括一个片段标识符或一个查询，或同时包含这两项内容。片段标识符是跟在数字符号 (#) 之后的任意文本（不包括数字符号本身）；段落文本储存在 Fragment 属性中。查询信息是 URI 中跟在问号 (?) 后的任何文本；查询文本存储在 Query 属性中。 某些 URI 会包括一个片段标识符或一个查询，或同时包含这两项内容。片段标识符是跟在数字符号 (#) 之后的任意文本（不包括数字符号本身）；段落文本储存在 Fragment 属性中。查询信息是 URI 中跟在问号 (?) 后的任何文本；查询文本存储在 Query 属性中。 某些 URI 会包括一个片段标识符或一个查询，或同时包含这两项内容。片段标识符是跟在数字符号 (#) 之后的任意文本（不包括数字符号本身）；段落文本储存在 Fragment 属性中。查询信息是 URI 中跟在问号 (?) 后的任何文本；查询文本存储在 Query 属性中。

在 .NET Framework 1.1 版中，如果指定给构造函数的字符串包含未知的方案和“c:\”，则 URI 类会在冒号后面插入“//”。例如，URI xyz:c:\abc 会转换为 xyz://c:/abc。在 .NET Framework 2.0 版中已经移除这一行为，示例字符串会转换为 xyz:c:/abc。 在 .NET Framework 1.1 版中，如果指定给构造函数的字符串包含未知的方案和“c:\”，则 URI 类会在冒号后面插入“//”。例如，URI xyz:c:\abc 会转换为 xyz://c:/abc。在 .NET Framework 2.0 版中已经移除这一行为，示例字符串会转换为 xyz:c:/abc。 在 .NET Framework 1.1 版中，如果指定给构造函数的字符串包含未知的方案和“c:\”，则 URI 类会在冒号后面插入“//”。例如，URI xyz:c:\abc 会转换为 xyz://c:/abc。在 .NET Framework 2.0 版中已经移除这一行为，示例字符串会转换为 xyz:c:/abc。

说明 说明

URI 类支持使用以下格式的 IP 地址：四组表示法的 IPv4 协议和冒号分隔的十六进制 IPv6 协议。请记住在 IPv6 地址两边括上方括号，如 http://[::1]。 URI 类支持使用以下格式的 IP 地址：四组表示法的 IPv4 协议和冒号分隔的十六进制 IPv6 协议。请记住在 IPv6 地址两边括上方括号，如 http://[::1]。

国际资源标识符支持

Web 地址通常使用统一资源标识符表示，该标识符由一组严格限制的字符组成：

  • 英语字母表中的大写和小写 ASCII 字母。

  • 数字 0 到 9。

  • 少量其他 ASCII 符号。

Internet 工程任务组 (IETF) 发布的 RFC 2396、RFC 2732、RFC 3986和 RFC 3987 中说明了 URI 规范。

随着 Internet 的发展，越来越需要使用除英语以外的其他语言来标识资源。能够满足这一需要并允许使用非 ASCII 字符（Unicode/ISO 10646 字符集中的字符）的标识符称为国际资源标识符 (IRI)。IETF 发布的 RFC 3987 中对 IRI 规范进行了说明。使用 IRI 可以在 URL 中包含 Unicode 字符。 随着 Internet 的发展，越来越需要使用除英语以外的其他语言来标识资源。能够满足这一需要并允许使用非 ASCII 字符（Unicode/ISO 10646 字符集中的字符）的标识符称为国际资源标识符 (IRI)。IETF 发布的 RFC 3987 中对 IRI 规范进行了说明。使用 IRI 可以在 URL 中包含 Unicode 字符。 随着 Internet 的发展，越来越需要使用除英语以外的其他语言来标识资源。能够满足这一需要并允许使用非 ASCII 字符（Unicode/ISO 10646 字符集中的字符）的标识符称为国际资源标识符 (IRI)。IETF 发布的 RFC 3987 中对 IRI 规范进行了说明。使用 IRI 可以在 URL 中包含 Unicode 字符。 随着 Internet 的发展，越来越需要使用除英语以外的其他语言来标识资源。能够满足这一需要并允许使用非 ASCII 字符（Unicode/ISO 10646 字符集中的字符）的标识符称为国际资源标识符 (IRI)。IETF 发布的 RFC 3987 中对 IRI 规范进行了说明。使用 IRI 可以在 URL 中包含 Unicode 字符。

现有的 Uri 类在 .NET Framework v3.5、3.0 SP1 和 2.0 SP1 中已被扩展，以提供基于 RFC 3987 的 IRI 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了应用程序与以前版本的 .NET Framework 的兼容性。 现有的 Uri 类在 .NET Framework v3.5、3.0 SP1 和 2.0 SP1 中已被扩展，以提供基于 RFC 3987 的 IRI 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了应用程序与以前版本的 .NET Framework 的兼容性。 现有的 Uri 类在 .NET Framework v3.5、3.0 SP1 和 2.0 SP1 中已被扩展，以提供基于 RFC 3987 的 IRI 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了应用程序与以前版本的 .NET Framework 的兼容性。

若要启用对 IRI 的支持，需要进行以下两项更改：

  1. 在 .NET Framework 2.0 目录下的 machine.config 文件中添加以下代码行

    <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  2. 指定是否对域名应用国际化域名 (IDN) 分析以及是否应该应用 IRI 分析规则。这可以在 machine.config 或 app.config 文件中完成。例如，请添加以下内容： 指定是否对域名应用国际化域名 (IDN) 分析以及是否应该应用 IRI 分析规则。这可以在 machine.config 或 app.config 文件中完成。例如，请添加以下内容： 指定是否对域名应用国际化域名 (IDN) 分析以及是否应该应用 IRI 分析规则。这可以在 machine.config 或 app.config 文件中完成。例如，请添加以下内容：

    <configuration>
  <uri>
  <idn enabled="All" />
  <iriParsing enabled="true" />
  </uri>
</configuration>

启用 IDN 会将域名中的所有 Unicode 标签转换为它们的 Punycode 等效项。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。这样做是为了支持 Internet 中现有的 DNS 服务器，因为大多数 DNS 服务器仅支持 ASCII 字符（请参见 RFC 3940）。 启用 IDN 会将域名中的所有 Unicode 标签转换为它们的 Punycode 等效项。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。这样做是为了支持 Internet 中现有的 DNS 服务器，因为大多数 DNS 服务器仅支持 ASCII 字符（请参见 RFC 3940）。 启用 IDN 会将域名中的所有 Unicode 标签转换为它们的 Punycode 等效项。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。这样做是为了支持 Internet 中现有的 DNS 服务器，因为大多数 DNS 服务器仅支持 ASCII 字符（请参见 RFC 3940）。

启用 IRI 和 IDN 会影响 Uri..::.DnsSafeHost 属性的值。启用 IRI 和 IDN 还可能更改 Equals、OriginalString、GetComponents 和 IsWellFormedOriginalString 方法的行为。 启用 IRI 和 IDN 会影响 Uri..::.DnsSafeHost 属性的值。启用 IRI 和 IDN 还可能更改 Equals、OriginalString、GetComponents 和 IsWellFormedOriginalString 方法的行为。

IDN 有三个可能的值，具体取决于所使用的 DNS 服务器：

  • idn enabled = All

    此值会将任何 Unicode 域名转换为它们的 Punycode 等效项（IDN 名称）。

  • idn enabled = AllExceptIntranet

    此值会将所有不在本地 Intranet 中的 Unicode 域名转换为使用 Punycode 等效项（IDN 名称）。在这种情况下，若要处理本地 Intranet 上的国际化名称，用于 Intranet 的 DNS 服务器应该支持 Unicode 名称解析。 此值会将所有不在本地 Intranet 中的 Unicode 域名转换为使用 Punycode 等效项（IDN 名称）。在这种情况下，若要处理本地 Intranet 上的国际化名称，用于 Intranet 的 DNS 服务器应该支持 Unicode 名称解析。

  • idn enabled = None

    此值不会将任何 Unicode 域名转换为使用 Punycode。这是与 .NET Framework 2.0 行为一致的默认值。 此值不会将任何 Unicode 域名转换为使用 Punycode。这是与 .NET Framework 2.0 行为一致的默认值。

启用 IRI 分析 (iriParsing enabled = true) 将执行正则化，并根据 RFC 3986 和 RFC 3987 中最新的 IRI 规则检查字符。默认值是 false，并将根据 RFC 2396 和 RFC 2732 来检查（对于 IPv6 文本）执行规范化和字符检查。 启用 IRI 分析 (iriParsing enabled = true) 将执行正则化，并根据 RFC 3986 和 RFC 3987 中最新的 IRI 规则检查字符。默认值是 false，并将根据 RFC 2396 和 RFC 2732 来检查（对于 IPv6 文本）执行规范化和字符检查。

还可以使用 System.Configuration..::.IriParsingElement、System.Configuration..::.IdnElement 和 System.Configuration..::.UriSection 配置设置类来控制 Uri 类中的 IRI 和 IDN 处理。System.Configuration..::.IriParsingElement 设置可以启用或禁用 Uri 类中的 IRI 处理。System.Configuration..::.IdnElement 设置可以启用或禁用 Uri 类中的 IDN 处理。System.Configuration..::.IriParsingElement 设置还可以间接控制 IDN。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。 还可以使用 System.Configuration..::.IriParsingElement、System.Configuration..::.IdnElement 和 System.Configuration..::.UriSection 配置设置类来控制 Uri 类中的 IRI 和 IDN 处理。System.Configuration..::.IriParsingElement 设置可以启用或禁用 Uri 类中的 IRI 处理。System.Configuration..::.IdnElement 设置可以启用或禁用 Uri 类中的 IDN 处理。System.Configuration..::.IriParsingElement 设置还可以间接控制 IDN。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。 还可以使用 System.Configuration..::.IriParsingElement、System.Configuration..::.IdnElement 和 System.Configuration..::.UriSection 配置设置类来控制 Uri 类中的 IRI 和 IDN 处理。System.Configuration..::.IriParsingElement 设置可以启用或禁用 Uri 类中的 IRI 处理。System.Configuration..::.IdnElement 设置可以启用或禁用 Uri 类中的 IDN 处理。System.Configuration..::.IriParsingElement 设置还可以间接控制 IDN。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。 还可以使用 System.Configuration..::.IriParsingElement、System.Configuration..::.IdnElement 和 System.Configuration..::.UriSection 配置设置类来控制 Uri 类中的 IRI 和 IDN 处理。System.Configuration..::.IriParsingElement 设置可以启用或禁用 Uri 类中的 IRI 处理。System.Configuration..::.IdnElement 设置可以启用或禁用 Uri 类中的 IDN 处理。System.Configuration..::.IriParsingElement 设置还可以间接控制 IDN。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。 还可以使用 System.Configuration..::.IriParsingElement、System.Configuration..::.IdnElement 和 System.Configuration..::.UriSection 配置设置类来控制 Uri 类中的 IRI 和 IDN 处理。System.Configuration..::.IriParsingElement 设置可以启用或禁用 Uri 类中的 IRI 处理。System.Configuration..::.IdnElement 设置可以启用或禁用 Uri 类中的 IDN 处理。System.Configuration..::.IriParsingElement 设置还可以间接控制 IDN。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。 还可以使用 System.Configuration..::.IriParsingElement、System.Configuration..::.IdnElement 和 System.Configuration..::.UriSection 配置设置类来控制 Uri 类中的 IRI 和 IDN 处理。System.Configuration..::.IriParsingElement 设置可以启用或禁用 Uri 类中的 IRI 处理。System.Configuration..::.IdnElement 设置可以启用或禁用 Uri 类中的 IDN 处理。System.Configuration..::.IriParsingElement 设置还可以间接控制 IDN。若要进行 IDN 处理，必须启用 IRI 处理。如果禁用了 IRI 处理，则 IDN 处理将设置为默认设置，在此情况下，将使用 .NET Framework 2.0 行为以确保兼容，并且不使用 IDN 名称。

在构造第一个 System..::.Uri 类时，将读取 System.Configuration..::.IriParsingElement 和 System.Configuration..::.IdnElement 的配置设置一次。之后进行的配置设置更改将被忽略。 在构造第一个 System..::.Uri 类时，将读取 System.Configuration..::.IriParsingElement 和 System.Configuration..::.IdnElement 的配置设置一次。之后进行的配置设置更改将被忽略。

System..::.GenericUriParser 类也已经进行了扩展，以便创建支持 IRI 和 IDN 的可自定义的分析器。通过向 System..::.GenericUriParser 构造函数传递 System..::.GenericUriParserOptions 枚举中提供的值的按位组合，可以指定 System..::.GenericUriParser 对象的行为。GenericUriParserOptions..::.IriParsing 类型指示分析器支持 RFC 3987 中指定的国际资源标识符 (IRI) 语法分析规则。是否使用 IRI 由前面讨论的配置值指定。 System..::.GenericUriParser 类也已经进行了扩展，以便创建支持 IRI 和 IDN 的可自定义的分析器。通过向 System..::.GenericUriParser 构造函数传递 System..::.GenericUriParserOptions 枚举中提供的值的按位组合，可以指定 System..::.GenericUriParser 对象的行为。GenericUriParserOptions..::.IriParsing 类型指示分析器支持 RFC 3987 中指定的国际资源标识符 (IRI) 语法分析规则。是否使用 IRI 由前面讨论的配置值指定。 System..::.GenericUriParser 类也已经进行了扩展，以便创建支持 IRI 和 IDN 的可自定义的分析器。通过向 System..::.GenericUriParser 构造函数传递 System..::.GenericUriParserOptions 枚举中提供的值的按位组合，可以指定 System..::.GenericUriParser 对象的行为。GenericUriParserOptions..::.IriParsing 类型指示分析器支持 RFC 3987 中指定的国际资源标识符 (IRI) 语法分析规则。是否使用 IRI 由前面讨论的配置值指定。 System..::.GenericUriParser 类也已经进行了扩展，以便创建支持 IRI 和 IDN 的可自定义的分析器。通过向 System..::.GenericUriParser 构造函数传递 System..::.GenericUriParserOptions 枚举中提供的值的按位组合，可以指定 System..::.GenericUriParser 对象的行为。GenericUriParserOptions..::.IriParsing 类型指示分析器支持 RFC 3987 中指定的国际资源标识符 (IRI) 语法分析规则。是否使用 IRI 由前面讨论的配置值指定。

GenericUriParserOptions..::.Idn 类型指示分析器支持对主机名进行国际化域名 (IDN) 语法分析。是否使用 IDN 由前面讨论的配置值指定。 GenericUriParserOptions..::.Idn 类型指示分析器支持对主机名进行国际化域名 (IDN) 语法分析。是否使用 IDN 由前面讨论的配置值指定。

性能注意事项

使用包含 URI 的 Web.config 文件来初始化应用程序时，如果 URI 的方案标识符是非标准的，则需要额外的时间来处理 URI。在这种情况下，请在需要 URI 的时候（而非启动时）初始化应用程序的受影响部分。 使用包含 URI 的 Web.config 文件来初始化应用程序时，如果 URI 的方案标识符是非标准的，则需要额外的时间来处理 URI。在这种情况下，请在需要 URI 的时候（而非启动时）初始化应用程序的受影响部分。

对调用者的说明

出于安全方面的考虑，如果您的应用程序接受来自不受信任来源的 Uri 实例并且 dontEscape 设置为 true，则使用时应谨慎。您可以通过调用 IsWellFormedOriginalString 方法来检查 URI 字符串是否有效。

下面的示例创建 Uri 类的实例，并用它来创建 WebRequest 实例。

Dim siteUri As New Uri("http://www.contoso.com/")

Dim wr As WebRequest = WebRequest.Create(siteUri)

Uri siteUri = new Uri("http://www.contoso.com/");

WebRequest wr = WebRequest.Create(siteUri);

Uri^ siteUri = gcnew Uri( "http://www.contoso.com/" );
WebRequest^ wr = WebRequest::Create( siteUri );

System System..::.UriUri
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 成员
System 命名空间
System.Configuration IdnElement
System.Configuration IriParsingElement
System.Configuration UriSection
DnsSafeHost
MakeRelative
IsWellFormedOriginalString
UriBuilder

其他资源

对 System.Uri (Version 2.0) 命名空间的更改
System.Uri 中的国际资源标识符支持
网络编程


Uri 成员

Uri 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Uri 类

提供统一资源标识符 (URI) 的对象表示形式和对 URI 各部分的轻松访问。

Uri 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Uri 类
System 命名空间


Uri 构造函数

Uri 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Uri 类

初始化 Uri 类的新实例。

名称 说明
页首

参考

Uri 类
Uri 成员
System 命名空间


Uri 构造函数 (String)

Uri 构造函数 (String)
Uri 类

用指定的 URI 初始化 Uri 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    uriString As String _
)
public Uri(
    string uriString
)
public:
Uri(
    String^ uriString
)
new :
        uriString:string -> Uri

参数

uriString
类型： System String
一个 URI。
异常 | 条件
ArgumentNullException | uriString 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
UriFormatException | uriString 为空。 - 或 - uriString 中指定的方案形式不正确。请参见 CheckSchemeName。 uriString 中指定的方案形式不正确。请参见 CheckSchemeName。 - 或 - uriString 包含太多斜杠。 - 或 - uriString 中指定的密码无效。 - 或 - uriString 中指定的主机名无效。 - 或 - uriString 中指定的文件名无效。 - 或 - uriString 中指定的用户名无效。 - 或 - uriString 中指定的主机名或证书颁发机构名不能以反斜杠结尾。 - 或 - uriString 中指定的端口号无效或无法分析。 - 或 - uriString 的长度超过 65519 个字符。 - 或 - uriString 中指定的方案的长度超过 1023 个字符。 - 或 - uriString 中存在无效的字符序列。 - 或 - uriString 中指定的 MS-DOS 路径必须以 c:\\ 开头。

此构造函数从 URI 字符串创建 Uri 实例。它分析 URI，使其具有规范化格式，并进行任何所需的转义编码。 此构造函数从 URI 字符串创建 Uri 实例。它分析 URI，使其具有规范化格式，并进行任何所需的转义编码。

此构造函数无法确保 Uri 引用可访问的资源。

此构造函数假定 string 参数引用的是绝对 URI 并且等效于在 UriKind 设置为 Absolute 时调用 Uri 构造函数。如果传递给构造函数的 string 参数是相对 URI，此构造函数将引发 UriFormatException。 此构造函数假定 string 参数引用的是绝对 URI 并且等效于在 UriKind 设置为 Absolute 时调用 Uri 构造函数。如果传递给构造函数的 string 参数是相对 URI，此构造函数将引发 UriFormatException。

下面的示例创建带 URI“http://www.contoso.com/”的 Uri 实例。

 Dim myUri As New Uri("http://www.contoso.com/")

Uri myUri = new Uri("http://www.contoso.com/");

Uri^ baseUri = gcnew Uri( "http://www.contoso.com/" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
Uri 重载
System 命名空间


Uri 构造函数 (SerializationInfo, StreamingContext)

Uri 构造函数 (SerializationInfo, StreamingContext)
Uri 类

从 SerializationInfo 和 StreamingContext 类的指定实例初始化 Uri 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Protected Sub New ( _
    serializationInfo As SerializationInfo, _
    streamingContext As StreamingContext _
)
protected Uri(
    SerializationInfo serializationInfo,
    StreamingContext streamingContext
)
protected:
Uri(
    SerializationInfo^ serializationInfo,
    StreamingContext streamingContext
)
new :
        serializationInfo:SerializationInfo *
        streamingContext:StreamingContext -> Uri

参数

serializationInfo
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo 类的实例，包含序列化新的 Uri 实例所需的信息。
streamingContext
类型： System.Runtime.Serialization StreamingContext
StreamingContext 类的实例，包含与新的 Uri 实例关联的序列化流的源。
异常 | 条件
ArgumentNullException | serializationInfo 参数包含 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） URI。
UriFormatException | 包含 serializationInfo 参数包含一个空的 URI。 - 或 - 指定的方案形式不正确。请参见 CheckSchemeName。 指定的方案形式不正确。请参见 CheckSchemeName。 - 或 - 该 URI 包含太多斜杠。 - 或 - URI 中指定的密码无效。 - 或 - URI 中指定的主机名无效。 - 或 - URI 中指定的文件名无效。 - 或 - URI 中指定的用户名无效。 - 或 - URI 中指定的主机名或证书颁发机构名不能以反斜杠结尾。 - 或 - URI 中指定的端口号无效或无法分析。 - 或 - URI 的长度超过 65519 个字符。 - 或 - URI 中指定的方案的长度超过 1023 个字符。 - 或 - URI 中存在无效的字符序列。 - 或 - URI 中指定的 MS-DOS 路径必须以 c:\\ 开头。

此构造函数实现 Uri 类的 ISerializable 接口。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Uri 类
Uri 成员
Uri 重载
System 命名空间

其他资源

XML and SOAP Serialization


Uri 构造函数 (String, Boolean)

Uri 构造函数 (String, Boolean)
Uri 类

注意：此 API 现在已过时。

用指定的 URI 初始化 Uri 类的新实例，并对字符转义进行显式控制。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The constructor has been deprecated. Please use new Uri(string). The dontEscape parameter is deprecated and is always false. http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub New ( _
    uriString As String, _
    dontEscape As Boolean _
)
[ObsoleteAttribute("The constructor has been deprecated. Please use new Uri(string). The dontEscape parameter is deprecated and is always false. http://go.microsoft.com/fwlink/?linkid=14202")]
public Uri(
    string uriString,
    bool dontEscape
)
[ObsoleteAttribute(L"The constructor has been deprecated. Please use new Uri(string). The dontEscape parameter is deprecated and is always false. http://go.microsoft.com/fwlink/?linkid=14202")]
public:
Uri(
    String^ uriString,
    bool dontEscape
)
[<ObsoleteAttribute("The constructor has been deprecated. Please use new Uri(string). The dontEscape parameter is deprecated and is always false. http://go.microsoft.com/fwlink/?linkid=14202")>]
new :
        uriString:string *
        dontEscape:bool -> Uri

参数

uriString
类型： System String
一个 URI。
dontEscape
类型： System Boolean
如果 uriString 已完全转义，则为 true；否则为 false。请参见“备注”。 如果 uriString 已完全转义，则为 true；否则为 false。请参见“备注”。
异常 | 条件
ArgumentNullException | uriString 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
UriFormatException | uriString 为空或只包含空格。 - 或 - 在 uriString 中指定的方案无效。 - 或 - uriString 包含太多斜杠。 - 或 - uriString 中指定的密码无效。 - 或 - uriString 中指定的主机名无效。 - 或 - uriString 中指定的文件名无效。 - 或 - uriString 中指定的用户名无效。 - 或 - uriString 中指定的主机名或证书颁发机构名不能以反斜杠结尾。 - 或 - uriString 中指定的端口号无效或无法分析。 - 或 - uriString 的长度超过 65519 个字符。 - 或 - uriString 中指定的方案的长度超过 1023 个字符。 - 或 - uriString 中存在无效的字符序列。 - 或 - uriString 中指定的 MS-DOS 路径必须以 c:\\ 开头。

此构造函数从 URI 字符串创建 Uri 实例。它分析 URI，并使其具有规范化格式。 此构造函数从 URI 字符串创建 Uri 实例。它分析 URI，并使其具有规范化格式。

dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。 dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。 dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。 dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。

如果 dontEscape 设置为 false，此构造函数将转义任何保留字符，方法是检查百分号 (%) 的所有匹配项后面是否有一个有效的转义序列。如果百分号后面的字符序列无效，百分号将被替换为 %25。 如果 dontEscape 设置为 false，此构造函数将转义任何保留字符，方法是检查百分号 (%) 的所有匹配项后面是否有一个有效的转义序列。如果百分号后面的字符序列无效，百分号将被替换为 %25。

此构造函数无法确保 Uri 引用可访问的资源。

下面的示例为 URI http://www.contoso.com/Hello%20World.htm 创建 Uri 实例。由于包含的 URI 已完全转义并且是规范化格式，因此，dontEscape 参数可以设置为 true。 下面的示例为 URI http://www.contoso.com/Hello%20World.htm 创建 Uri 实例。由于包含的 URI 已完全转义并且是规范化格式，因此，dontEscape 参数可以设置为 true。

 Dim myUri As New Uri("http://www.contoso.com/Hello%20World.htm", True)

Uri myUri = new Uri("http://www.contoso.com/Hello%20World.htm", true);

Uri^ myUri = gcnew Uri(  "http://www.contoso.com/Hello%20World.htm",true );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
Uri 重载
System 命名空间


Uri 构造函数 (String, UriKind)

Uri 构造函数 (String, UriKind)
Uri 类

用指定 URI 初始化 Uri 类的新实例。此构造函数允许您指定 URI 字符串是相对 URI、绝对 URI 还是不确定。 用指定 URI 初始化 Uri 类的新实例。此构造函数允许您指定 URI 字符串是相对 URI、绝对 URI 还是不确定。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    uriString As String, _
    uriKind As UriKind _
)
public Uri(
    string uriString,
    UriKind uriKind
)
public:
Uri(
    String^ uriString,
    UriKind uriKind
)
new :
        uriString:string *
        uriKind:UriKind -> Uri

参数

uriString
类型： System String
标识将由 Uri 实例表示的资源的字符串。
uriKind
类型： System UriKind
指定 URI 字符串是相对 URI、绝对 URI 还是不确定。
异常 | 条件
ArgumentException | uriKind 无效。
ArgumentNullException | uriString 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
UriFormatException | uriString 包含相对 URI，而 uriKind 为 Absolute。 或 uriString 包含绝对 URI，而 uriKind 为 Relative。 或 uriString 为空。 - 或 - uriString 中指定的方案形式不正确。请参见 CheckSchemeName。 uriString 中指定的方案形式不正确。请参见 CheckSchemeName。 - 或 - uriString 包含太多斜杠。 - 或 - uriString 中指定的密码无效。 - 或 - uriString 中指定的主机名无效。 - 或 - uriString 中指定的文件名无效。 - 或 - uriString 中指定的用户名无效。 - 或 - uriString 中指定的主机名或证书颁发机构名不能以反斜杠结尾。 - 或 - uriString 中指定的端口号无效或无法分析。 - 或 - uriString 的长度超过 65519 个字符。 - 或 - uriString 中指定的方案的长度超过 1023 个字符。 - 或 - uriString 中存在无效的字符序列。 - 或 - uriString 中指定的 MS-DOS 路径必须以 c:\\ 开头。

相对 URI 和绝对 URI 在格式上有不同的限制。例如，相对 URI 不要求方案或证书颁发机构。您在 uriKind 中指定的值必须与 uriString 中传递的 URI 类型匹配。然而，如果指定 RelativeOrAbsolute，则 URI 字符串既可以是相对的，也可以是绝对的。 相对 URI 和绝对 URI 在格式上有不同的限制。例如，相对 URI 不要求方案或证书颁发机构。您在 uriKind 中指定的值必须与 uriString 中传递的 URI 类型匹配。然而，如果指定 RelativeOrAbsolute，则 URI 字符串既可以是相对的，也可以是绝对的。 相对 URI 和绝对 URI 在格式上有不同的限制。例如，相对 URI 不要求方案或证书颁发机构。您在 uriKind 中指定的值必须与 uriString 中传递的 URI 类型匹配。然而，如果指定 RelativeOrAbsolute，则 URI 字符串既可以是相对的，也可以是绝对的。 相对 URI 和绝对 URI 在格式上有不同的限制。例如，相对 URI 不要求方案或证书颁发机构。您在 uriKind 中指定的值必须与 uriString 中传递的 URI 类型匹配。然而，如果指定 RelativeOrAbsolute，则 URI 字符串既可以是相对的，也可以是绝对的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
Uri 重载
System 命名空间


Uri 构造函数 (Uri, String)

Uri 构造函数 (Uri, String)
Uri 类

根据指定的基 URI 和相对 URI 字符串，初始化 Uri 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    baseUri As Uri, _
    relativeUri As String _
)
public Uri(
    Uri baseUri,
    string relativeUri
)
public:
Uri(
    Uri^ baseUri,
    String^ relativeUri
)
new :
        baseUri:Uri *
        relativeUri:string -> Uri

参数

baseUri
类型： System Uri
基 URI。
relativeUri
类型： System String
要添加到基 URI 的相对 URI。
异常 | 条件
ArgumentNullException | uriString 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | baseUri 不是绝对的 Uri 实例。
UriFormatException | baseUri 和 relativeUri 组合形成的 URI 是空的或只包含空格。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的方案无效。 - 或 - baseUri 和 relativeUri 组合所形成的 URI 包含太多的斜杠。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的密码无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的主机名无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的文件名无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的用户名无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的主机名或证书颁发机构名不能以反斜杠结尾。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的端口号无效或无法分析。 - 或 - baseUri 和 relativeUri 组合形成的 URI 的长度超过 65519 个字符。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的方案的长度超过 1023 个字符。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中存在无效的字符序列。 - 或 - uriString 中指定的 MS-DOS 路径必须以 c:\\ 开头。

此构造函数通过组合 baseUri 和 relativeUri 来创建 Uri 实例。如果 relativeUri 是绝对 URI（包含方案、主机名和可选的端口号），则仅使用 relativeUri 创建 Uri 实例。 此构造函数通过组合 baseUri 和 relativeUri 来创建 Uri 实例。如果 relativeUri 是绝对 URI（包含方案、主机名和可选的端口号），则仅使用 relativeUri 创建 Uri 实例。

此构造函数无法确保 Uri 引用可访问的资源。

下面的示例通过组合相对 URI http://www.contoso.com 和 catalog/showew.htm 以构成绝对 URI http://www.contoso.com/catalog/shownew.htm，来创建 Uri 类的新实例。

 Dim baseUri As New Uri("http://www.contoso.com")
 Dim myUri As New Uri(baseUri, "catalog/shownew.htm")

 Console.WriteLine(myUri.ToString())

Uri baseUri = new Uri("http://www.contoso.com");
 Uri myUri = new Uri(baseUri, "catalog/shownew.htm");

Console.WriteLine(myUri.ToString());

Uri^ baseUri = gcnew Uri(  "http://www.contoso.com" );
Uri^ myUri = gcnew Uri( baseUri, "catalog/shownew.htm" );
Console::WriteLine( myUri->ToString() );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
Uri 重载
System 命名空间


Uri 构造函数 (Uri, Uri)

Uri 构造函数 (Uri, Uri)
Uri 类

根据指定的基 Uri 实例和相对 Uri 实例的组合，初始化 Uri 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    baseUri As Uri, _
    relativeUri As Uri _
)
public Uri(
    Uri baseUri,
    Uri relativeUri
)
public:
Uri(
    Uri^ baseUri,
    Uri^ relativeUri
)
new :
        baseUri:Uri *
        relativeUri:Uri -> Uri

参数

baseUri
类型： System Uri
作为新 Uri 实例的基的绝对 Uri。
relativeUri
类型： System Uri
与 baseUri 结合使用的相对 Uri 实例。
异常 | 条件
ArgumentException | baseUri 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - baseUri 不是绝对的 Uri 实例。
ArgumentOutOfRangeException | baseUri 不是绝对的 Uri 实例。
UriFormatException | baseUri 和 relativeUri 组合形成的 URI 是空的或只包含空格。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的方案无效。 - 或 - baseUri 和 relativeUri 组合所形成的 URI 包含太多的斜杠。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的密码无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的主机名无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的文件名无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的用户名无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的主机名或证书颁发机构名不能以反斜杠结尾。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的端口号无效或无法分析。 - 或 - baseUri 和 relativeUri 组合形成的 URI 的长度超过 65519 个字符。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的方案的长度超过 1023 个字符。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中存在无效的字符序列。 - 或 - uriString 中指定的 MS-DOS 路径必须以 c:\\ 开头。

此构造函数通过组合绝对 Uri 实例 baseUri 和相对 Uri 实例 relativeUri，创建新的 Uri 实例。如果 relativeUri 是绝对 Uri 实例（包含方案、主机名和可选的端口号），则仅使用 relativeUri 创建 Uri 实例。 此构造函数通过组合绝对 Uri 实例 baseUri 和相对 Uri 实例 relativeUri，创建新的 Uri 实例。如果 relativeUri 是绝对 Uri 实例（包含方案、主机名和可选的端口号），则仅使用 relativeUri 创建 Uri 实例。

此构造函数无法确保 Uri 引用可访问的资源。

此示例创建一个绝对 Uri 实例 absoluteUri 和一个相对 Uri 实例 relativeUri。然后，从这两个实例中创建出一个新的 Uri 实例 combinedUri。 此示例创建一个绝对 Uri 实例 absoluteUri 和一个相对 Uri 实例 relativeUri。然后，从这两个实例中创建出一个新的 Uri 实例 combinedUri。

    ' Create an absolute Uri from a string.
    Dim absoluteUri As New Uri("http://www.contoso.com/")

    ' Create a relative Uri from a string.  allowRelative = true to allow for
    ' creating a relative Uri.
    Dim relativeUri As New Uri("/catalog/shownew.htm?date=today")

    ' Check whether the new Uri is absolute or relative.
    If Not relativeUri.IsAbsoluteUri Then
        Console.WriteLine("{0} is a relative Uri.", relativeUri)
    End If
    ' Create a new Uri from an absolute Uri and a relative Uri.
    Dim combinedUri As New Uri(absoluteUri, relativeUri)
    Console.WriteLine(combinedUri.AbsoluteUri)

End Sub 'SampleConstructor

// Create an absolute Uri from a string.
Uri absoluteUri = new Uri("http://www.contoso.com/");

// Create a relative Uri from a string.  allowRelative = true to allow for
// creating a relative Uri.
Uri relativeUri = new Uri("/catalog/shownew.htm?date=today", UriKind.Relative);

// Check whether the new Uri is absolute or relative.
if (!relativeUri.IsAbsoluteUri)
    Console.WriteLine("{0} is a relative Uri.", relativeUri);

// Create a new Uri from an absolute Uri and a relative Uri.
Uri combinedUri = new Uri(absoluteUri, relativeUri);
Console.WriteLine(combinedUri.AbsoluteUri);

// Create an absolute Uri from a string.
String^ addressString1 = "http://www.contoso.com/";
String^ addressString2 = "catalog/shownew.htm?date=today";
Uri^ absoluteUri = gcnew Uri(addressString1);

// Create a relative Uri from a string.  allowRelative = true to allow for
// creating a relative Uri.
Uri^ relativeUri = gcnew Uri(addressString2);

// Check whether the new Uri is absolute or relative.
if (  !relativeUri->IsAbsoluteUri )
   Console::WriteLine( "{0} is a relative Uri.", relativeUri );

// Create a new Uri from an absolute Uri and a relative Uri.
Uri^ combinedUri = gcnew Uri( absoluteUri,relativeUri );
Console::WriteLine( combinedUri->AbsoluteUri );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
Uri 重载
System 命名空间


Uri 构造函数 (Uri, String, Boolean)

Uri 构造函数 (Uri, String, Boolean)
Uri 类

注意：此 API 现在已过时。

根据指定的基 URI 和相对 URI，初始化 Uri 类的新实例，并对字符转义进行显式控制。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The constructor has been deprecated. Please new Uri(Uri, string). The dontEscape parameter is deprecated and is always false. http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Sub New ( _
    baseUri As Uri, _
    relativeUri As String, _
    dontEscape As Boolean _
)
[ObsoleteAttribute("The constructor has been deprecated. Please new Uri(Uri, string). The dontEscape parameter is deprecated and is always false. http://go.microsoft.com/fwlink/?linkid=14202")]
public Uri(
    Uri baseUri,
    string relativeUri,
    bool dontEscape
)
[ObsoleteAttribute(L"The constructor has been deprecated. Please new Uri(Uri, string). The dontEscape parameter is deprecated and is always false. http://go.microsoft.com/fwlink/?linkid=14202")]
public:
Uri(
    Uri^ baseUri,
    String^ relativeUri,
    bool dontEscape
)
[<ObsoleteAttribute("The constructor has been deprecated. Please new Uri(Uri, string). The dontEscape parameter is deprecated and is always false. http://go.microsoft.com/fwlink/?linkid=14202")>]
new :
        baseUri:Uri *
        relativeUri:string *
        dontEscape:bool -> Uri

参数

baseUri
类型： System Uri
基 URI。
relativeUri
类型： System String
要添加到基 URI 的相对 URI。
dontEscape
类型： System Boolean
如果 uriString 已完全转义，则为 true；否则为 false。请参见“备注”。 如果 uriString 已完全转义，则为 true；否则为 false。请参见“备注”。
异常 | 条件
ArgumentNullException | uriString 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | baseUri 不是绝对的 Uri 实例。
UriFormatException | baseUri 和 relativeUri 组合形成的 URI 是空的或只包含空格。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的方案无效。 - 或 - baseUri 和 relativeUri 组合所形成的 URI 包含太多的斜杠。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的密码无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的主机名无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的文件名无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的用户名无效。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的主机名或证书颁发机构名不能以反斜杠结尾。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的端口号无效或无法分析。 - 或 - baseUri 和 relativeUri 组合形成的 URI 的长度超过 65519 个字符。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中指定的方案的长度超过 1023 个字符。 - 或 - baseUri 和 relativeUri 组合形成的 URI 中存在无效的字符序列。 - 或 - uriString 中指定的 MS-DOS 路径必须以 c:\\ 开头。

此构造函数通过组合 baseUri 和 relativeUri 来创建 Uri 实例。如果在 relativeUri 中传递的 URI 是绝对 URI（包含方案、主机名和可选的端口号），则仅使用 relativeUri 创建 Uri 实例。 此构造函数通过组合 baseUri 和 relativeUri 来创建 Uri 实例。如果在 relativeUri 中传递的 URI 是绝对 URI（包含方案、主机名和可选的端口号），则仅使用 relativeUri 创建 Uri 实例。

dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。如果 dontEscape 设置为 false，此构造函数将转义任何保留字符，方法是检查百分号 (%) 的所有匹配项后面是否有一个有效的转义序列。如果百分号后面的字符序列无效，百分号将被替换为 %25。 dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。如果 dontEscape 设置为 false，此构造函数将转义任何保留字符，方法是检查百分号 (%) 的所有匹配项后面是否有一个有效的转义序列。如果百分号后面的字符序列无效，百分号将被替换为 %25。 dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。如果 dontEscape 设置为 false，此构造函数将转义任何保留字符，方法是检查百分号 (%) 的所有匹配项后面是否有一个有效的转义序列。如果百分号后面的字符序列无效，百分号将被替换为 %25。 dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。如果 dontEscape 设置为 false，此构造函数将转义任何保留字符，方法是检查百分号 (%) 的所有匹配项后面是否有一个有效的转义序列。如果百分号后面的字符序列无效，百分号将被替换为 %25。 dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。如果 dontEscape 设置为 false，此构造函数将转义任何保留字符，方法是检查百分号 (%) 的所有匹配项后面是否有一个有效的转义序列。如果百分号后面的字符序列无效，百分号将被替换为 %25。 dontEscape 参数控制保留字符是否被翻译为转义序列。只有当确定 URI 中的所有保留字符都已转义时，才应将此参数设置为 true。对于没有完全转义的 URI，将该值设置为 true 可能导致意外的行为。强烈建议您始终将此参数设置为 false。如果 dontEscape 设置为 false，此构造函数将转义任何保留字符，方法是检查百分号 (%) 的所有匹配项后面是否有一个有效的转义序列。如果百分号后面的字符序列无效，百分号将被替换为 %25。

此构造函数无法确保 Uri 引用可访问的资源。

对调用者的说明

出于安全方面的考虑，您的应用程序不应调用具有来自不受信任来源的 URI 字符串并且 dontEscape 设置为 true 的该构造函数。而是可以由您在调用此构造函数之前通过调用 IsWellFormedOriginalString 方法来检查 URI 字符串是否有效。 出于安全方面的考虑，您的应用程序不应调用具有来自不受信任来源的 URI 字符串并且 dontEscape 设置为 true 的该构造函数。而是可以由您在调用此构造函数之前通过调用 IsWellFormedOriginalString 方法来检查 URI 字符串是否有效。

下面的示例通过将相对 URI http://www.contoso.com 和 Hello%20World.htm 组合在一起构成绝对 URI，来创建 Uri 类的新实例。

 Dim baseUri As New Uri("http://www.contoso.com")
 Dim myUri As New Uri(baseUri, "Hello%20World.htm", False)

 Uri baseUri = new Uri("http://www.contoso.com");
 Uri myUri = new Uri(baseUri, "Hello%20World.htm",false);

Uri^ baseUri = gcnew Uri( "http://www.contoso.com/" );
Uri^ myUri = gcnew Uri( baseUri,"Hello%20World.htm",false );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
Uri 重载
System 命名空间


Uri 字段

Uri 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Uri 类

Uri 类型公开以下成员。

名称 说明
页首

参考

Uri 类
System 命名空间


Uri ..::.SchemeDelimiter 字段

Uri
.
.
::
.
SchemeDelimiter 字段
Uri 类

指定将通讯协议方案同 URI 的地址部分分开的字符。此字段为只读。 指定将通讯协议方案同 URI 的地址部分分开的字符。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly SchemeDelimiter As String
public static readonly string SchemeDelimiter
public:
static initonly String^ SchemeDelimiter
static val SchemeDelimiter: string

下面的示例创建一个来自 UriSchemeHttp、SchemeDelimiter 和一个地址的字符串。然后从这个字符串创建 Uri 实例。 下面的示例创建一个来自 UriSchemeHttp、SchemeDelimiter 和一个地址的字符串。然后从这个字符串创建 Uri 实例。

Dim address As String = "www.contoso.com"
Dim uriString As String = String.Format("{0}{1}{2}", Uri.UriSchemeHttp, Uri.SchemeDelimiter, address)

Dim result As Uri = New Uri(uriString)

If result.IsWellFormedOriginalString() = True Then
    Console.WriteLine("{0} is a well formed Uri", uriString)
else
    Console.WriteLine("{0} is not a well formed Uri", uriString)
End If

            string address = "www.contoso.com";
            string uriString = String.Format("{0}{1}{2}/", Uri.UriSchemeHttp, Uri.SchemeDelimiter, address);
 #if OLDMETHOD
            Uri result;
            if (Uri.TryParse(uriString, false, false, out result) == true)
                Console.WriteLine("{0} is a valid Uri", result.ToString());
            else
                Console.WriteLine("Uri not created");
#endif
            Uri result = new Uri(uriString);
            if (result.IsWellFormedOriginalString())
                Console.WriteLine("{0} is a well formed Uri", uriString);
            else
                Console.WriteLine("{0} is not a well formed Uri", uriString);

         String^ address = "www.contoso.com";
         String^ uriString = String::Format( "{0}{1}{2}",
            Uri::UriSchemeHttp, Uri::SchemeDelimiter, address );

#if OLDMETHOD
         Uri^ result;
         if ( Uri::TryParse( uriString, false, false, result ) == true )
         {
            Console::WriteLine( "{0} is a valid Uri", result );
         }
         else
         {
            Console::WriteLine( "Uri not created" );
         }
#endif
         Uri ^result = gcnew Uri(uriString);
         if (result->IsWellFormedOriginalString())
             Console::WriteLine("{0} is a well formed Uri", uriString);
         else
             Console::WriteLine("{0} is not a well formed Uri", uriString);

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeFile 字段

Uri
.
.
::
.
UriSchemeFile 字段
Uri 类

指定 URI 是指向文件的指针。此字段为只读。 指定 URI 是指向文件的指针。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeFile As String
public static readonly string UriSchemeFile
public:
static initonly String^ UriSchemeFile
static val UriSchemeFile: string

在 .NET Framework 1.1 版中，“file:///path”URI 被转换为“file:/path”。2.0 版中更正了此行为。 在 .NET Framework 1.1 版中，“file:///path”URI 被转换为“file:/path”。2.0 版中更正了此行为。

下面的示例创建一个 Uri 实例，并确定方案是否为 UriSchemeFile。

Dim address2 As New Uri("file://server/filename.ext")
If address2.Scheme = Uri.UriSchemeFile Then
    Console.WriteLine("Uri is a file")
End If

Uri address2 =  new Uri("file://server/filename.ext");
if (address2.Scheme == Uri.UriSchemeFile)
    Console.WriteLine("Uri is a file");

Uri^ address2 = gcnew Uri( "file://server/filename.ext" );
if ( address2->Scheme == Uri::UriSchemeFile )
{
   Console::WriteLine( "Uri is a file" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeFtp 字段

Uri
.
.
::
.
UriSchemeFtp 字段
Uri 类

指定通过文件传输协议 (FTP) 访问 URI。此字段为只读。 指定通过文件传输协议 (FTP) 访问 URI。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeFtp As String
public static readonly string UriSchemeFtp
public:
static initonly String^ UriSchemeFtp
static val UriSchemeFtp: string

下面的示例创建一个 Uri 实例，并确定方案是否为 UriSchemeFtp。

Dim address7 As New Uri("ftp://contoso/files/testfile.txt")
If address7.Scheme = Uri.UriSchemeFtp Then
    Console.WriteLine("Uri is Ftp protocol")
End If

Uri address7 = new Uri("ftp://contoso/files/testfile.txt");
if (address7.Scheme == Uri.UriSchemeFtp)
    Console.WriteLine("Uri is Ftp protocol");

Uri^ address7 = gcnew Uri( "ftp://contoso/files/testfile.txt" );
if ( address7->Scheme == Uri::UriSchemeFtp )
{
   Console::WriteLine( "Uri is Ftp protocol" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeGopher 字段

Uri
.
.
::
.
UriSchemeGopher 字段
Uri 类

指定通过 Gopher 协议访问 URI。此字段为只读。 指定通过 Gopher 协议访问 URI。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeGopher As String
public static readonly string UriSchemeGopher
public:
static initonly String^ UriSchemeGopher
static val UriSchemeGopher: string

下面的示例创建一个 Uri 实例，并确定方案是否为 UriSchemeGopher。

Dim address6 As New Uri("gopher://example.contoso.com/")
If address6.Scheme = Uri.UriSchemeGopher Then
    Console.WriteLine("Uri is Gopher protocol")
End If

Uri address6 = new Uri("gopher://example.contoso.com/");
if (address6.Scheme == Uri.UriSchemeGopher)
    Console.WriteLine("Uri is Gopher protocol");

Uri^ address6 = gcnew Uri( "gopher://example.contoso.com/" );
if ( address6->Scheme == Uri::UriSchemeGopher )
{
   Console::WriteLine( "Uri is Gopher protocol" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeHttp 字段

Uri
.
.
::
.
UriSchemeHttp 字段
Uri 类

指定通过超文本传输协议 (HTTP) 访问 URI。此字段为只读。 指定通过超文本传输协议 (HTTP) 访问 URI。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeHttp As String
public static readonly string UriSchemeHttp
public:
static initonly String^ UriSchemeHttp
static val UriSchemeHttp: string

下面的示例创建一个 Uri 实例，并确定方案是否为 UriSchemeHttp。

Dim address1 As New Uri("http://www.contoso.com/index.htm#search")
Console.WriteLine("address 1 {0} a valid scheme name", IIf(Uri.CheckSchemeName(address1.Scheme), " has", " does not have")) 'TODO: For performance reasons this should be changed to nested IF statements

If address1.Scheme = Uri.UriSchemeHttp Then
    Console.WriteLine("Uri is HTTP type")
End If
Console.WriteLine(address1.HostNameType)

Uri address1 = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine("address 1 {0} a valid scheme name",
      Uri.CheckSchemeName(address1.Scheme) ? " has" : " does not have");

if (address1.Scheme == Uri.UriSchemeHttp)
    Console.WriteLine("Uri is HTTP type");

Console.WriteLine(address1.HostNameType);

Uri^ address1 = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Console::WriteLine( "address 1 {0} a valid scheme name",
   Uri::CheckSchemeName( address1->Scheme ) ? (String^)" has" : " does not have" );
if ( address1->Scheme == Uri::UriSchemeHttp )
{
   Console::WriteLine( "Uri is HTTP type" );
}

Console::WriteLine( address1->HostNameType );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeHttps 字段

Uri
.
.
::
.
UriSchemeHttps 字段
Uri 类

指定通过安全超文本传输协议 (HTTPS) 访问 URI。此字段为只读。 指定通过安全超文本传输协议 (HTTPS) 访问 URI。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeHttps As String
public static readonly string UriSchemeHttps
public:
static initonly String^ UriSchemeHttps
static val UriSchemeHttps: string

下面的示例创建一个 Uri 实例，并确定方案是否为 UriSchemeHttps。

Dim address8 As New Uri("https://example.contoso.com")
If address8.Scheme = Uri.UriSchemeHttps Then
    Console.WriteLine("Uri is Https protocol.")
End If

Uri address8 = new Uri("https://example.contoso.com");
if (address8.Scheme == Uri.UriSchemeHttps)
    Console.WriteLine("Uri is Https protocol.");

Uri^ address8 = gcnew Uri( "https://example.contoso.com" );
if ( address8->Scheme == Uri::UriSchemeHttps )
{
   Console::WriteLine( "Uri is Https protocol." );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeMailto 字段

Uri
.
.
::
.
UriSchemeMailto 字段
Uri 类

指定 URI 是一个电子邮件地址，需通过简单邮件传输协议 (SMTP) 访问。此字段为只读。 指定 URI 是一个电子邮件地址，需通过简单邮件传输协议 (SMTP) 访问。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeMailto As String
public static readonly string UriSchemeMailto
public:
static initonly String^ UriSchemeMailto
static val UriSchemeMailto: string

下面的示例创建一个 Uri 实例，并确定方案是否为 UriSchemeMailto。

Dim address3 As New Uri("mailto:user@contoso.com?subject=uri")
If address3.Scheme = Uri.UriSchemeMailto Then
    Console.WriteLine("Uri is an email address")
End If

Uri address3 = new Uri("mailto:user@contoso.com?subject=uri");
if (address3.Scheme == Uri.UriSchemeMailto)
    Console.WriteLine("Uri is an email address");

Uri^ address3 = gcnew Uri( "mailto:user@contoso.com?subject=uri" );
if ( address3->Scheme == Uri::UriSchemeMailto )
{
   Console::WriteLine( "Uri is an email address" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeNetPipe 字段

Uri
.
.
::
.
UriSchemeNetPipe 字段
Uri 类

指定通过“Indigo”系统的 NetPipe 方案访问此 URI。此字段为只读。 指定通过“Indigo”系统的 NetPipe 方案访问此 URI。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeNetPipe As String
public static readonly string UriSchemeNetPipe
public:
static initonly String^ UriSchemeNetPipe
static val UriSchemeNetPipe: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeNetTcp 字段

Uri
.
.
::
.
UriSchemeNetTcp 字段
Uri 类

指定通过“Indigo”系统的 NetTcp 方案访问此 URI。此字段为只读。 指定通过“Indigo”系统的 NetTcp 方案访问此 URI。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeNetTcp As String
public static readonly string UriSchemeNetTcp
public:
static initonly String^ UriSchemeNetTcp
static val UriSchemeNetTcp: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeNews 字段

Uri
.
.
::
.
UriSchemeNews 字段
Uri 类

指定 URI 是 Internet 新闻组，而且可以通过 Network 新闻传输协议 (NNTP) 进行访问。此字段为只读。 指定 URI 是 Internet 新闻组，而且可以通过 Network 新闻传输协议 (NNTP) 进行访问。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeNews As String
public static readonly string UriSchemeNews
public:
static initonly String^ UriSchemeNews
static val UriSchemeNews: string

下面的示例创建一个 Uri 实例，并确定方案是否为 UriSchemeNews。

Dim address4 As New Uri("news:123456@contoso.com")
If address4.Scheme = Uri.UriSchemeNews Then
    Console.WriteLine("Uri is an Internet news group")
End If

Uri address4 = new Uri("news:123456@contoso.com");
if (address4.Scheme == Uri.UriSchemeNews)
    Console.WriteLine("Uri is an Internet news group");

Uri^ address4 = gcnew Uri( "news:123456@contoso.com" );
if ( address4->Scheme == Uri::UriSchemeNews )
{
   Console::WriteLine( "Uri is an Internet news group" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UriSchemeNntp 字段

Uri
.
.
::
.
UriSchemeNntp 字段
Uri 类

指定 URI 是 Internet 新闻组，而且可以通过 Network 新闻传输协议 (NNTP) 进行访问。此字段为只读。 指定 URI 是 Internet 新闻组，而且可以通过 Network 新闻传输协议 (NNTP) 进行访问。此字段为只读。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared ReadOnly UriSchemeNntp As String
public static readonly string UriSchemeNntp
public:
static initonly String^ UriSchemeNntp
static val UriSchemeNntp: string

.NET Framework 1.1 版中的 NNTP Uri 分析错误已被更正。

下面的示例创建一个 Uri 实例，并确定方案是否为 UriSchemeNntp。

Dim address5 As New Uri("nntp://news.contoso.com/123456@contoso.com")
If address5.Scheme = Uri.UriSchemeNntp Then
    Console.WriteLine("Uri is nntp protocol")
End If

Uri address5 = new Uri("nntp://news.contoso.com/123456@contoso.com");
if (address5.Scheme == Uri.UriSchemeNntp)
    Console.WriteLine("Uri is nntp protocol");

Uri^ address5 = gcnew Uri( "nntp://news.contoso.com/123456@contoso.com" );
if ( address5->Scheme == Uri::UriSchemeNntp )
{
   Console::WriteLine( "Uri is nntp protocol" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri 方法

Uri 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Uri 类

Uri 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Uri 类
System 命名空间


Uri ..::.Canonicalize 方法

Uri
.
.
::
.
Canonicalize 方法
Uri 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意：此 API 现在已过时。

将内部存储的 URI 转换为规范化格式。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")> _
Protected Overridable Sub Canonicalize
[ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected virtual void Canonicalize()
[ObsoleteAttribute(L"The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected:
virtual void Canonicalize()
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract Canonicalize : unit -> unit
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
override Canonicalize : unit -> unit
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此方法仅对绝对 URI 有效。
UriFormatException | URI 的格式不正确。

在内部存储 URI 的规范化版本。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.CheckHostName 方法

Uri
.
.
::
.
CheckHostName 方法
Uri 类

确定指定的主机名是否为有效的 DNS 名称。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function CheckHostName ( _
    name As String _
) As UriHostNameType
public static UriHostNameType CheckHostName(
    string name
)
public:
static UriHostNameType CheckHostName(
    String^ name
)
static member CheckHostName :
        name:string -> UriHostNameType

参数

name
类型： System String
要验证的主机名。可以是 IPv4 或 IPv6 地址或 Internet 主机名。 要验证的主机名。可以是 IPv4 或 IPv6 地址或 Internet 主机名。

返回值

类型： System UriHostNameType
指示主机名类型的 UriHostNameType。如果无法确定主机名的类型，或者主机名为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或零长度字符串，则此方法返回 Unknown。 指示主机名类型的 UriHostNameType。如果无法确定主机名的类型，或者主机名为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或零长度字符串，则此方法返回 Unknown。

CheckHostName 方法检查提供的主机名是否符合有效 Internet 主机名的要求。但是，它不执行主机名查找以验证主机是否存在。 CheckHostName 方法检查提供的主机名是否符合有效 Internet 主机名的要求。但是，它不执行主机名查找以验证主机是否存在。

下面的示例检查主机名是否有效。

 Console.WriteLine(Uri.CheckHostName("www.contoso.com"))

Console.WriteLine(Uri.CheckHostName("www.contoso.com"));

Console::WriteLine( Uri::CheckHostName( "www.contoso.com" ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.CheckSchemeName 方法

Uri
.
.
::
.
CheckSchemeName 方法
Uri 类

确定指定的方案名是否有效。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function CheckSchemeName ( _
    schemeName As String _
) As Boolean
public static bool CheckSchemeName(
    string schemeName
)
public:
static bool CheckSchemeName(
    String^ schemeName
)
static member CheckSchemeName :
        schemeName:string -> bool

参数

schemeName
类型： System String
要验证的方案名。

返回值

类型： System Boolean
一个 Boolean 值。如果方案名有效，则该值为 true；否则为 false。

默认情况下，此方法根据 RFC 2396 检查方案名称的有效性。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986，此方法将检查架构名称是否合法。方案名称必须以字母开头，并且只能包含字母、数字和 "."、"+" 或 "-" 字符。 默认情况下，此方法根据 RFC 2396 检查方案名称的有效性。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986，此方法将检查架构名称是否合法。方案名称必须以字母开头，并且只能包含字母、数字和 "."、"+" 或 "-" 字符。 默认情况下，此方法根据 RFC 2396 检查方案名称的有效性。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986，此方法将检查架构名称是否合法。方案名称必须以字母开头，并且只能包含字母、数字和 "."、"+" 或 "-" 字符。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

下面的示例创建一个 Uri 实例，并检查方案名是否有效。

Dim address1 As New Uri("http://www.contoso.com/index.htm#search")
Console.WriteLine("address 1 {0} a valid scheme name", IIf(Uri.CheckSchemeName(address1.Scheme), " has", " does not have")) 'TODO: For performance reasons this should be changed to nested IF statements

If address1.Scheme = Uri.UriSchemeHttp Then
    Console.WriteLine("Uri is HTTP type")
End If
Console.WriteLine(address1.HostNameType)

Uri address1 = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine("address 1 {0} a valid scheme name",
      Uri.CheckSchemeName(address1.Scheme) ? " has" : " does not have");

if (address1.Scheme == Uri.UriSchemeHttp)
    Console.WriteLine("Uri is HTTP type");

Console.WriteLine(address1.HostNameType);

Uri^ address1 = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Console::WriteLine( "address 1 {0} a valid scheme name",
   Uri::CheckSchemeName( address1->Scheme ) ? (String^)" has" : " does not have" );
if ( address1->Scheme == Uri::UriSchemeHttp )
{
   Console::WriteLine( "Uri is HTTP type" );
}

Console::WriteLine( address1->HostNameType );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.CheckSecurity 方法

Uri
.
.
::
.
CheckSecurity 方法
Uri 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意：此 API 现在已过时。

调用此方法不起任何作用。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")> _
Protected Overridable Sub CheckSecurity
[ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected virtual void CheckSecurity()
[ObsoleteAttribute(L"The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected:
virtual void CheckSecurity()
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract CheckSecurity : unit -> unit
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
override CheckSecurity : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Compare 方法

Uri
.
.
::
.
Compare 方法
Uri 类

使用指定的比较规则比较两个 URI 的指定部分。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function Compare ( _ uri1 As Uri, _ uri2 As Uri, _ partsToCompare As UriComponents, _ compareFormat As UriFormat, _ comparisonType As StringComparison _ ) As Integer
public static int Compare( Uri uri1, Uri uri2, UriComponents partsToCompare, UriFormat compareFormat, StringComparison comparisonType )
public: static int Compare( Uri^ uri1, Uri^ uri2, UriComponents partsToCompare, UriFormat compareFormat, StringComparison comparisonType )
static member Compare : uri1:Uri * uri2:Uri * partsToCompare:UriComponents * compareFormat:UriFormat * comparisonType:StringComparison -> int
参数
uri1
类型： System Uri
第一个
Uri
。
uri2
类型： System Uri
第二个
Uri
。
partsToCompare
类型： System UriComponents
UriComponents
值的按位组合，它指定要比较的
uri1
和
uri2
的部分。
compareFormat
类型： System UriFormat
UriFormat
值中的一个，它指定在比较 URI 部分时使用的字符转义。
comparisonType
类型： System StringComparison
StringComparison
值之一。
返回值
类型： System Int32
一个
Int32
值，指示进行比较的
Uri
部分之间的词法关系。
值
含义
小于零
uri1
小于
uri2
。
零
uri1
等于
uri2
。
大于零
uri1
大于
uri2
。
异常 | 条件
ArgumentException | comparisonType 不是有效的 StringComparison 值。

如果 uri1 和 uri2 均为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），此方法将返回 0。在比较 URI 值时，相对 URI 总是小于绝对 URI，而非空的 URI 总是大于空的 URI。在 uri1 和 uri2 都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 并且二者均为相对 URI 或绝对 URI 时，String..::.Compare(String, String, StringComparison) 方法将执行比较。 如果 uri1 和 uri2 均为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），此方法将返回 0。在比较 URI 值时，相对 URI 总是小于绝对 URI，而非空的 URI 总是大于空的 URI。在 uri1 和 uri2 都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 并且二者均为相对 URI 或绝对 URI 时，String..::.Compare(String, String, StringComparison) 方法将执行比较。 如果 uri1 和 uri2 均为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），此方法将返回 0。在比较 URI 值时，相对 URI 总是小于绝对 URI，而非空的 URI 总是大于空的 URI。在 uri1 和 uri2 都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 并且二者均为相对 URI 或绝对 URI 时，String..::.Compare(String, String, StringComparison) 方法将执行比较。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Equals 方法

Uri
.
.
::
.
Equals 方法
Uri 类

比较两个 Uri 实例是否相等。

命名空间： System
程序集： System（在 System.dll 中）
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags := SecurityPermissionFlag.Infrastructure)> _
Public Overrides Function Equals ( _
    comparand As Object _
) As Boolean
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)]
public override bool Equals(
    Object comparand
)
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, Flags = SecurityPermissionFlag::Infrastructure)]
public:
virtual bool Equals(
    Object^ comparand
) override
[<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)>]
abstract Equals :
        comparand:Object -> bool
[<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)>]
override Equals :
        comparand:Object -> bool

参数

comparand
类型： System Object
与当前实例相比较的 Uri 实例或 URI 标识符。

返回值

类型： System Boolean
一个 Boolean 值。如果两个实例表示相同的 URI，则该值为 true；否则为 false。

Equals 方法比较这两个实例，而不考虑它们可能包含的用户信息 (UserInfo) 和片段 (Fragment) 部分。例如，给定 URI http://www.contoso.com/index.htm#search 和 http://user:password@www.contoso.com/index.htm，Equals 方法将返回 true。 Equals 方法比较这两个实例，而不考虑它们可能包含的用户信息 (UserInfo) 和片段 (Fragment) 部分。例如，给定 URI http://www.contoso.com/index.htm#search 和 http://user:password@www.contoso.com/index.htm，Equals 方法将返回 true。

如果一个 Uri 实例是使用 Unicode 主机名构成的，并且 comparand 参数包含一个使用具有等效 Punycode 主机名的主机名构成的 Uri 实例或标识符，则仅当启用了国际资源标识符 (IRI) 和国际化域名 (IDN) 支持时，Equals 才会返回 true。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。 如果一个 Uri 实例是使用 Unicode 主机名构成的，并且 comparand 参数包含一个使用具有等效 Punycode 主机名的主机名构成的 Uri 实例或标识符，则仅当启用了国际资源标识符 (IRI) 和国际化域名 (IDN) 支持时，Equals 才会返回 true。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

说明 说明

在 .NET Framework 1.0 和 1.1 版中，Query 也会被忽略。
说明 说明

Equals 方法可以在派生类中进行重写；由于恶意实体可能会修改此方法，因此使用时要谨慎。如果您不知道此实例是否来自受信任的来源，请勿使用此方法来执行安全性检查。 Equals 方法可以在派生类中进行重写；由于恶意实体可能会修改此方法，因此使用时要谨慎。如果您不知道此实例是否来自受信任的来源，请勿使用此方法来执行安全性检查。

此示例从字符串创建两个 Uri 实例，并对它们进行比较以确定它们是否表示相同的值。address1 和 address2 是相同，因为对于此比较忽略 Fragment 部分。结果将输出到控制台。 此示例从字符串创建两个 Uri 实例，并对它们进行比较以确定它们是否表示相同的值。address1 和 address2 是相同，因为对于此比较忽略 Fragment 部分。结果将输出到控制台。 此示例从字符串创建两个 Uri 实例，并对它们进行比较以确定它们是否表示相同的值。address1 和 address2 是相同，因为对于此比较忽略 Fragment 部分。结果将输出到控制台。

' Create some Uris.
Dim address1 As New Uri("http://www.contoso.com/index.htm#search")
Dim address2 As New Uri("http://www.contoso.com/index.htm")
If address1.Equals(address2) Then
    Console.WriteLine("The two addresses are equal")
Else
    Console.WriteLine("The two addresses are not equal")
End If

// Create some Uris.
Uri address1 = new Uri("http://www.contoso.com/index.htm#search");
Uri address2 = new Uri("http://www.contoso.com/index.htm");
if (address1.Equals(address2))
    Console.WriteLine("The two addresses are equal");
else
    Console.WriteLine("The two addresses are not equal");

// Create some Uris.
Uri^ address1 = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Uri^ address2 = gcnew Uri( "http://www.contoso.com/index.htm" );
if ( address1->Equals( address2 ) )
{
   Console::WriteLine( "The two addresses are equal" );
}
else
{
   Console::WriteLine( "The two addresses are not equal" );
}
  • SecurityPermission

    以避免从 Uri 派生部分受信任的代码。关联的枚举：Infrastructure。 以避免从 Uri 派生部分受信任的代码。关联的枚举：Infrastructure。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Escape 方法

Uri
.
.
::
.
Escape 方法
Uri 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意：此 API 现在已过时。

将路径部分中的任何不安全字符或保留字符转换为对应的十六进制字符表示形式。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")> _
Protected Overridable Sub Escape
[ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected virtual void Escape()
[ObsoleteAttribute(L"The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected:
virtual void Escape()
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract Escape : unit -> unit
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
override Escape : unit -> unit
异常 | 条件
UriFormatException | 从构造函数传来的 URI 无效。如果 URI 字符太多或 URI 是相对的，则会发生这种异常。 从构造函数传来的 URI 无效。如果 URI 字符太多或 URI 是相对的，则会发生这种异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.EscapeDataString 方法

Uri
.
.
::
.
EscapeDataString 方法
Uri 类

将字符串转换为它的转义表示形式。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function EscapeDataString ( _
    stringToEscape As String _
) As String
public static string EscapeDataString(
    string stringToEscape
)
public:
static String^ EscapeDataString(
    String^ stringToEscape
)
static member EscapeDataString :
        stringToEscape:string -> string

参数

stringToEscape
类型： System String
要转义的字符串。

返回值

类型： System String
一个 String，包含 stringToEscape 的转义表示形式。
异常 | 条件
ArgumentNullException | stringToEscape 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
UriFormatException | stringToEscape 的长度超过 32766 个字符。

默认情况下，EscapeDataString 方法将除 RFC 2396 非保留字符之外的所有字符转换为相应的十六进制表示形式。如果启用了国际资源标识符 (IRIs) 或国际域名 (IDN) 分析，则 EscapeDataString 方法会将除了 RFC 3986 未保留字符外的所有字符转换为十六进制表示形式。所有 Unicode 字符在转义之前都会先转换为 UTF-8 格式。 默认情况下，EscapeDataString 方法将除 RFC 2396 非保留字符之外的所有字符转换为相应的十六进制表示形式。如果启用了国际资源标识符 (IRIs) 或国际域名 (IDN) 分析，则 EscapeDataString 方法会将除了 RFC 3986 未保留字符外的所有字符转换为十六进制表示形式。所有 Unicode 字符在转义之前都会先转换为 UTF-8 格式。 默认情况下，EscapeDataString 方法将除 RFC 2396 非保留字符之外的所有字符转换为相应的十六进制表示形式。如果启用了国际资源标识符 (IRIs) 或国际域名 (IDN) 分析，则 EscapeDataString 方法会将除了 RFC 3986 未保留字符外的所有字符转换为十六进制表示形式。所有 Unicode 字符在转义之前都会先转换为 UTF-8 格式。

此方法假定 stringToEscape 中没有转义序列。

默认情况下，字符串根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义字符串。请参阅这些 RFC 了解有关保留和未保留字符的定义。 默认情况下，字符串根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义字符串。请参阅这些 RFC 了解有关保留和未保留字符的定义。 默认情况下，字符串根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义字符串。请参阅这些 RFC 了解有关保留和未保留字符的定义。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.EscapeString 方法

Uri
.
.
::
.
EscapeString 方法
Uri 类

注意：此 API 现在已过时。

将字符串转换为它的转义表示形式。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. Please use GetComponents() or static EscapeUriString() to escape a Uri component or a string. http://go.microsoft.com/fwlink/?linkid=14202")> _
Protected Shared Function EscapeString ( _
    str As String _
) As String
[ObsoleteAttribute("The method has been deprecated. Please use GetComponents() or static EscapeUriString() to escape a Uri component or a string. http://go.microsoft.com/fwlink/?linkid=14202")]
protected static string EscapeString(
    string str
)
[ObsoleteAttribute(L"The method has been deprecated. Please use GetComponents() or static EscapeUriString() to escape a Uri component or a string. http://go.microsoft.com/fwlink/?linkid=14202")]
protected:
static String^ EscapeString(
    String^ str
)
[<ObsoleteAttribute("The method has been deprecated. Please use GetComponents() or static EscapeUriString() to escape a Uri component or a string. http://go.microsoft.com/fwlink/?linkid=14202")>]
static member EscapeString :
        str:string -> string

参数

str
类型： System String
要转换为它的转义表示形式的字符串。

返回值

类型： System String
字符串的转义表示形式。

EscapeString 方法将 RFC 2396 保留字符和字符值大于 127 的所有字符转换为十六进制表示形式。所有 Unicode 字符在转义之前都会先转换为 UTF-8 格式。 EscapeString 方法将 RFC 2396 保留字符和字符值大于 127 的所有字符转换为十六进制表示形式。所有 Unicode 字符在转义之前都会先转换为 UTF-8 格式。

默认情况下，字符串根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义字符串。 默认情况下，字符串根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义字符串。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.EscapeUriString 方法

Uri
.
.
::
.
EscapeUriString 方法
Uri 类

将 URI 字符串转换为它的转义表示形式。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function EscapeUriString ( _
    stringToEscape As String _
) As String
public static string EscapeUriString(
    string stringToEscape
)
public:
static String^ EscapeUriString(
    String^ stringToEscape
)
static member EscapeUriString :
        stringToEscape:string -> string

参数

stringToEscape
类型： System String
要转义的字符串。

返回值

类型： System String
一个 String，包含 stringToEscape 的转义表示形式。
异常 | 条件
ArgumentNullException | stringToEscape 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
UriFormatException | stringToEscape 的长度超过 32766 个字符。

使用 EscapeUriString 方法准备一个非转义 URI 字符串，这个字符串将用作 Uri 构造函数的参数。

默认情况下，EscapeUriString 方法将除 RFC 2396 非保留字符之外的所有字符转换为相应的十六进制表示形式。如果启用了国际资源标识符 (IRIs) 或国际域名 (IDN) 分析，则 EscapeUriString 方法会将除了 RFC 3986 未保留字符外的所有字符转换为十六进制表示形式。所有 Unicode 字符在转义之前都会先转换为 UTF-8 格式。 默认情况下，EscapeUriString 方法将除 RFC 2396 非保留字符之外的所有字符转换为相应的十六进制表示形式。如果启用了国际资源标识符 (IRIs) 或国际域名 (IDN) 分析，则 EscapeUriString 方法会将除了 RFC 3986 未保留字符外的所有字符转换为十六进制表示形式。所有 Unicode 字符在转义之前都会先转换为 UTF-8 格式。 默认情况下，EscapeUriString 方法将除 RFC 2396 非保留字符之外的所有字符转换为相应的十六进制表示形式。如果启用了国际资源标识符 (IRIs) 或国际域名 (IDN) 分析，则 EscapeUriString 方法会将除了 RFC 3986 未保留字符外的所有字符转换为十六进制表示形式。所有 Unicode 字符在转义之前都会先转换为 UTF-8 格式。

此方法假定 stringToEscape 中没有转义序列。

默认情况下，字符串根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义字符串。请参阅这些 RFC 了解有关保留和未保留字符的定义。 默认情况下，字符串根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义字符串。请参阅这些 RFC 了解有关保留和未保留字符的定义。 默认情况下，字符串根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义字符串。请参阅这些 RFC 了解有关保留和未保留字符的定义。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.FromHex 方法

Uri
.
.
::
.
FromHex 方法
Uri 类

获取十六进制数字的十进制值。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function FromHex ( _
    digit As Char _
) As Integer
public static int FromHex(
    char digit
)
public:
static int FromHex(
    wchar_t digit
)
static member FromHex :
        digit:char -> int

参数

digit
类型： System Char
要转换的十六进制数字（0-9、a-f、A-F）。

返回值

类型： System Int32
一个 Int32 值，包含与指定的十六进制数字对应的介于 0 到 15 之间的数字。
异常 | 条件
ArgumentException | digit 不是有效的十六进制数字（0-9、a-f、A-F）。

FromHex 方法将表示十六进制数字 (0-9, a-f, A-F) 的字符转换为十进制值 (0-15)。如果 digit 不是有效的十六进制数字，则引发 ArgumentException 异常。 FromHex 方法将表示十六进制数字 (0-9, a-f, A-F) 的字符转换为十进制值 (0-15)。如果 digit 不是有效的十六进制数字，则引发 ArgumentException 异常。

下面的示例确定一个字符是否为十六进制字符，如果是的话，则将对应的十进制值输出到控制台。

Dim testChar As Char = "e"c
If Uri.IsHexDigit(testChar) = True Then
    Console.WriteLine("'{0}' is the hexadecimal representation of {1}", testChar, Uri.FromHex(testChar))
Else
    Console.WriteLine("'{0}' is not a hexadecimal character", testChar)
End If
Dim returnString As String = Uri.HexEscape(testChar)
Console.WriteLine("The hexadecimal value of '{0}' is {1}", testChar, returnString)

char  testChar = 'e';
if (Uri.IsHexDigit(testChar) == true)
    Console.WriteLine("'{0}' is the hexadecimal representation of {1}", testChar, Uri.FromHex(testChar));
else
    Console.WriteLine("'{0}' is not a hexadecimal character", testChar);

string returnString = Uri.HexEscape(testChar);
Console.WriteLine("The hexadecimal value of '{0}' is {1}", testChar, returnString);

char testChar = 'e';
if ( Uri::IsHexDigit( testChar ) == true )
{
   Console::WriteLine( "'{0}' is the hexadecimal representation of {1}",
      testChar, Uri::FromHex( testChar ) );
}
else
{
   Console::WriteLine( "'{0}' is not a hex character", testChar );
}

String^ returnString = Uri::HexEscape( testChar );
Console::WriteLine( "The hexadecimal value of '{0}' is {1}", testChar, returnString );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.GetComponents 方法

Uri
.
.
::
.
GetComponents 方法
Uri 类

使用特殊字符的指定转义，获取当前实例的指定部分。

命名空间： System
程序集： System（在 System.dll 中）
Public Function GetComponents ( _
    components As UriComponents, _
    format As UriFormat _
) As String
public string GetComponents(
    UriComponents components,
    UriFormat format
)
public:
String^ GetComponents(
    UriComponents components,
    UriFormat format
)
member GetComponents :
        components:UriComponents *
        format:UriFormat -> string

参数

components
类型： System UriComponents
UriComponents 值的按位组合，它指定当前实例中要返回到调用方的部分。
format
类型： System UriFormat
UriFormat 值中的一个，它控制如何转义特殊字符。

返回值

类型： System String
一个包含这些部分的 String。
异常 | 条件
ArgumentOutOfRangeException | uriComponents 不是有效 UriComponents 值的组合。
InvalidOperationException | 当前 Uri 不是绝对 URI。相对 URI 不能和此方法一起使用。 当前 Uri 不是绝对 URI。相对 URI 不能和此方法一起使用。

单独指定 Query 或 Fragment 时，返回值包括分隔符。Scheme、UserInfo、Host、Port 和 Path 部分不包括分隔符。对于所有其他 UriComponents 值以及这些值的组合，分隔符会包括在返回值中。 单独指定 Query 或 Fragment 时，返回值包括分隔符。Scheme、UserInfo、Host、Port 和 Path 部分不包括分隔符。对于所有其他 UriComponents 值以及这些值的组合，分隔符会包括在返回值中。 单独指定 Query 或 Fragment 时，返回值包括分隔符。Scheme、UserInfo、Host、Port 和 Path 部分不包括分隔符。对于所有其他 UriComponents 值以及这些值的组合，分隔符会包括在返回值中。

这些组成部分按照各自在 URI 中显示的顺序返回。例如，如果指定 Scheme，它将第一个出现。 这些组成部分按照各自在 URI 中显示的顺序返回。例如，如果指定 Scheme，它将第一个出现。

在启用国际资源标识符 (IRI) 和国际化域名 (IDN) 支持之后，String 中返回的字符的数量将增加。用于支持 IRI 的 Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。在启用 IRI 和 IDN 之后，GetComponents 方法将正确处理 Unicode 代理项字符。 在启用国际资源标识符 (IRI) 和国际化域名 (IDN) 支持之后，String 中返回的字符的数量将增加。用于支持 IRI 的 Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。在启用 IRI 和 IDN 之后，GetComponents 方法将正确处理 Unicode 代理项字符。 在启用国际资源标识符 (IRI) 和国际化域名 (IDN) 支持之后，String 中返回的字符的数量将增加。用于支持 IRI 的 Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。在启用 IRI 和 IDN 之后，GetComponents 方法将正确处理 Unicode 代理项字符。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

说明 说明

如果调用 GetComponents 方法时 format 设置为 Unescaped，则不能使用返回值作为 Uri 构造函数的参数来创建等效的 Uri。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.GetHashCode 方法

Uri
.
.
::
.
GetHashCode 方法
Uri 类

获取 URI 的哈希代码。

命名空间： System
程序集： System（在 System.dll 中）
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags := SecurityPermissionFlag.Infrastructure)> _
Public Overrides Function GetHashCode As Integer
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)]
public override int GetHashCode()
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, Flags = SecurityPermissionFlag::Infrastructure)]
public:
virtual int GetHashCode() override
[<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)>]
abstract GetHashCode : unit -> int
[<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)>]
override GetHashCode : unit -> int

返回值

类型： System Int32
一个 Int32，其中包含为此 URI 生成的哈希值。

下面的示例创建一个 Uri 实例并将哈希代码输出到控制台。

' Create Uri
Dim uriAddress As New Uri("http://www.contoso.com/index.htm#search")
Console.WriteLine(uriAddress.Fragment)
Console.WriteLine("Uri {0} the default port ", IIf(uriAddress.IsDefaultPort, "uses", "does not use")) 'TODO: For performance reasons this should be changed to nested IF statements

Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Path))
Console.WriteLine("Hash code {0}", uriAddress.GetHashCode())

// Create Uri
Uri uriAddress = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine(uriAddress.Fragment);
Console.WriteLine("Uri {0} the default port ", uriAddress.IsDefaultPort ? "uses" : "does not use");

Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Path));
Console.WriteLine("Hash code {0}", uriAddress.GetHashCode());

// Create Uri
Uri^ uriAddress = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Console::WriteLine( uriAddress->Fragment );
Console::WriteLine( "Uri {0} the default port ", uriAddress->IsDefaultPort ? (String^)"uses" : "does not use" );

Console::WriteLine( "The path of this Uri is {0}", uriAddress->GetLeftPart( UriPartial::Path ) );
Console::WriteLine( "Hash code {0}", uriAddress->GetHashCode() );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.GetLeftPart 方法

Uri
.
.
::
.
GetLeftPart 方法
Uri 类

获取 Uri 实例的指定部分。

命名空间： System
程序集： System（在 System.dll 中）
Public Function GetLeftPart ( _
    part As UriPartial _
) As String
public string GetLeftPart(
    UriPartial part
)
public:
String^ GetLeftPart(
    UriPartial part
)
member GetLeftPart :
        part:UriPartial -> string

参数

part
类型： System UriPartial
UriPartial 值之一，指定要返回的 URI 部分的结尾。

返回值

类型： System String
一个 String，其中包含 Uri 实例的指定部分。
异常 | 条件
InvalidOperationException | 当前 Uri 实例不是绝对实例。
ArgumentException | 指定的 part 无效。

GetLeftPart 方法返回一个包含 URI 字符串中最左边部分的字符串，它以 part 指定的部分结束。

在下面的情况下，GetLeftPart 包括分隔符：

  • Scheme 包括方案分隔符。

  • Authority 不包括路径分隔符。

  • Path 包括原始 URI 中的任何分隔符，一直到查询或段分隔符。

  • Query 包括 Path，并加上查询及其分隔符。

下面的示例演示一个 URI 以及使用 Scheme、Authority、Path 或 Query 调用 GetLeftPart 的结果。

URI | Scheme | 颁发机构 | 路径 | 查询
http://www.contoso.com/index.htm?date=today | http:// | http://www.contoso.com | http://www.contoso.com/index.htm | http://www.contoso.com/index.htm?date=today
http://www.contoso.com/index.htm#main | http:// | http://www.contoso.com | http://www.contoso.com/index.htm | http://www.contoso.com/index.htm
mailto:user@contoso.com?subject=uri | mailto: | mailto:user@contoso.com | mailto:user@contoso.com?subject=uri | <none>
nntp://news.contoso.com/123456@contoso.com | nntp:// | nntp://news.contoso.com | nntp://news.contoso.com/123456@contoso.com | nntp://news.contoso.com/123456@contoso.com
news:123456@contoso.com | news: | news:123456@contoso.com | news:123456@contoso.com | <none>
file://server/filename.ext | file:// | file://server | file://server/filename.ext | file://server/filename.ext

下面的示例创建一个 Uri 实例并将路径输出到控制台。

' Create Uri
Dim uriAddress As New Uri("http://www.contoso.com/index.htm#search")
Console.WriteLine(uriAddress.Fragment)
Console.WriteLine("Uri {0} the default port ", IIf(uriAddress.IsDefaultPort, "uses", "does not use")) 'TODO: For performance reasons this should be changed to nested IF statements

Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Path))
Console.WriteLine("Hash code {0}", uriAddress.GetHashCode())

// Create Uri
Uri uriAddress = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine(uriAddress.Fragment);
Console.WriteLine("Uri {0} the default port ", uriAddress.IsDefaultPort ? "uses" : "does not use");

Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Path));
Console.WriteLine("Hash code {0}", uriAddress.GetHashCode());

// Create Uri
Uri^ uriAddress = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Console::WriteLine( uriAddress->Fragment );
Console::WriteLine( "Uri {0} the default port ", uriAddress->IsDefaultPort ? (String^)"uses" : "does not use" );

Console::WriteLine( "The path of this Uri is {0}", uriAddress->GetLeftPart( UriPartial::Path ) );
Console::WriteLine( "Hash code {0}", uriAddress->GetHashCode() );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.GetObjectData 方法

Uri
.
.
::
.
GetObjectData 方法
Uri 类

返回序列化当前实例所需的数据。

命名空间： System
程序集： System（在 System.dll 中）
<SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter := True)> _
Protected Sub GetObjectData ( _
    serializationInfo As SerializationInfo, _
    streamingContext As StreamingContext _
)
[SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter = true)]
protected void GetObjectData(
    SerializationInfo serializationInfo,
    StreamingContext streamingContext
)
[SecurityPermissionAttribute(SecurityAction::LinkDemand, SerializationFormatter = true)]
protected:
void GetObjectData(
    SerializationInfo^ serializationInfo,
    StreamingContext streamingContext
)
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter = true)>]
member GetObjectData :
        serializationInfo:SerializationInfo *
        streamingContext:StreamingContext -> unit

参数

serializationInfo
类型： System.Runtime.Serialization SerializationInfo
一个 SerializationInfo 对象，它包含序列化 Uri 所需的信息。
streamingContext
类型： System.Runtime.Serialization StreamingContext
StreamingContext 对象，该对象包含与 Uri 相关联的序列化流的源和目标。
  • SecurityPermission

    以使用序列化方法。关联的枚举：SerializationFormatter。 以使用序列化方法。关联的枚举：SerializationFormatter。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.HexEscape 方法

Uri
.
.
::
.
HexEscape 方法
Uri 类

将指定的字符转换它的等效十六进制字符。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function HexEscape ( _
    character As Char _
) As String
public static string HexEscape(
    char character
)
public:
static String^ HexEscape(
    wchar_t character
)
static member HexEscape :
        character:char -> string

参数

character
类型： System Char
要转换为十六进制表示形式的字符。

返回值

类型： System String
指定字符的十六进制表示形式。
异常 | 条件
ArgumentOutOfRangeException | character 大于 255。

下面的示例将一个字符转换为它的十六进制等效项，并将它输出到控制台。

Dim testChar As Char = "e"c
If Uri.IsHexDigit(testChar) = True Then
    Console.WriteLine("'{0}' is the hexadecimal representation of {1}", testChar, Uri.FromHex(testChar))
Else
    Console.WriteLine("'{0}' is not a hexadecimal character", testChar)
End If
Dim returnString As String = Uri.HexEscape(testChar)
Console.WriteLine("The hexadecimal value of '{0}' is {1}", testChar, returnString)

char  testChar = 'e';
if (Uri.IsHexDigit(testChar) == true)
    Console.WriteLine("'{0}' is the hexadecimal representation of {1}", testChar, Uri.FromHex(testChar));
else
    Console.WriteLine("'{0}' is not a hexadecimal character", testChar);

string returnString = Uri.HexEscape(testChar);
Console.WriteLine("The hexadecimal value of '{0}' is {1}", testChar, returnString);

char testChar = 'e';
if ( Uri::IsHexDigit( testChar ) == true )
{
   Console::WriteLine( "'{0}' is the hexadecimal representation of {1}",
      testChar, Uri::FromHex( testChar ) );
}
else
{
   Console::WriteLine( "'{0}' is not a hex character", testChar );
}

String^ returnString = Uri::HexEscape( testChar );
Console::WriteLine( "The hexadecimal value of '{0}' is {1}", testChar, returnString );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.HexUnescape 方法

Uri
.
.
::
.
HexUnescape 方法
Uri 类

将字符的指定十六进制表示形式转换为字符。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function HexUnescape ( _
    pattern As String, _
    ByRef index As Integer _
) As Char
public static char HexUnescape(
    string pattern,
    ref int index
)
public:
static wchar_t HexUnescape(
    String^ pattern,
    int% index
)
static member HexUnescape :
        pattern:string *
        index:int byref -> char

参数

pattern
类型： System String
字符的十六进制表示形式。
index
类型： System Int32 %
pattern 中字符的十六进制表示形式开始的位置。

返回值

类型： System Char
用十六进制编码表示的位于 index 的字符。如果位于 index 的字符不是用十六进制编码的，则返回位于 index 的字符。index 的值递增以指向跟在返回的字符后面的字符。 用十六进制编码表示的位于 index 的字符。如果位于 index 的字符不是用十六进制编码的，则返回位于 index 的字符。index 的值递增以指向跟在返回的字符后面的字符。 用十六进制编码表示的位于 index 的字符。如果位于 index 的字符不是用十六进制编码的，则返回位于 index 的字符。index 的值递增以指向跟在返回的字符后面的字符。
异常 | 条件
ArgumentOutOfRangeException | index 小于 0，或大于等于 pattern 中的字符数。

下面的代码示例确定一个字符是否为十六进制编码，如果是的话，则将等效字符输出到控制台。

Dim testString As String = "%75"
Dim index As Integer = 0
If Uri.IsHexEncoding(testString, index) Then
    Console.WriteLine("The character is {0}", Uri.HexUnescape(testString, index))
Else
    Console.WriteLine("The character is not hexadecimal encoded")
End If

string testString = "%75";
int index = 0;
if (Uri.IsHexEncoding(testString, index))
     Console.WriteLine("The character is {0}", Uri.HexUnescape(testString, ref index));
else
     Console.WriteLine("The character is not hexadecimal encoded");

String^ testString = "%75";
int index = 0;
if ( Uri::IsHexEncoding( testString, index ) )
{
   Console::WriteLine( "The character is {0}",
      Uri::HexUnescape( testString, index ) );
}
else
{
   Console::WriteLine( "The character is not hex encoded" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsBadFileSystemCharacter 方法

Uri
.
.
::
.
IsBadFileSystemCharacter 方法
Uri 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意：此 API 现在已过时。

获取一个值，该值指示字符是否在文件系统名称中无效。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")> _
Protected Overridable Function IsBadFileSystemCharacter ( _
    character As Char _
) As Boolean
[ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected virtual bool IsBadFileSystemCharacter(
    char character
)
[ObsoleteAttribute(L"The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected:
virtual bool IsBadFileSystemCharacter(
    wchar_t character
)
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract IsBadFileSystemCharacter :
        character:char -> bool
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
override IsBadFileSystemCharacter :
        character:char -> bool

参数

character
类型： System Char
要测试的 Char。

返回值

类型： System Boolean
一个 Boolean 值。如果指定的字符无效，则该值为 true；否则为 false。

根据 NTFS 文件系统的规则分析字符。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsBaseOf 方法

Uri
.
.
::
.
IsBaseOf 方法
Uri 类

确定当前的 Uri 实例是否为指定 Uri 实例的基。

命名空间： System
程序集： System（在 System.dll 中）
Public Function IsBaseOf ( _
    uri As Uri _
) As Boolean
public bool IsBaseOf(
    Uri uri
)
public:
bool IsBaseOf(
    Uri^ uri
)
member IsBaseOf :
        uri:Uri -> bool

参数

uri
类型： System Uri
要测试的指定 Uri 实例。

返回值

类型： System Boolean
如果当前 Uri 实例是 uri 的基，则为 true；否则，为 false。

IsBaseOf 用于将当前 Uri 实例与指定 Uri 相比，以确定此 URI 是否为指定 Uri 的基。当比较两个 Uri 对象以确定基关系时，不计算用户信息 (UserInfo)。当比较两个 URI（uri1 和 uri2）时，如果忽略 uri2 最后一个斜杠 (/) 后的所有内容后两个 URI 完全相同，则 uri1 为 uri2 的基。下表中使用 http://host/path/path/file?query 作为基 URI，显示它是否为其他 URI 的基。 IsBaseOf 用于将当前 Uri 实例与指定 Uri 相比，以确定此 URI 是否为指定 Uri 的基。当比较两个 Uri 对象以确定基关系时，不计算用户信息 (UserInfo)。当比较两个 URI（uri1 和 uri2）时，如果忽略 uri2 最后一个斜杠 (/) 后的所有内容后两个 URI 完全相同，则 uri1 为 uri2 的基。下表中使用 http://host/path/path/file?query 作为基 URI，显示它是否为其他 URI 的基。 IsBaseOf 用于将当前 Uri 实例与指定 Uri 相比，以确定此 URI 是否为指定 Uri 的基。当比较两个 Uri 对象以确定基关系时，不计算用户信息 (UserInfo)。当比较两个 URI（uri1 和 uri2）时，如果忽略 uri2 最后一个斜杠 (/) 后的所有内容后两个 URI 完全相同，则 uri1 为 uri2 的基。下表中使用 http://host/path/path/file?query 作为基 URI，显示它是否为其他 URI 的基。 IsBaseOf 用于将当前 Uri 实例与指定 Uri 相比，以确定此 URI 是否为指定 Uri 的基。当比较两个 Uri 对象以确定基关系时，不计算用户信息 (UserInfo)。当比较两个 URI（uri1 和 uri2）时，如果忽略 uri2 最后一个斜杠 (/) 后的所有内容后两个 URI 完全相同，则 uri1 为 uri2 的基。下表中使用 http://host/path/path/file?query 作为基 URI，显示它是否为其他 URI 的基。

URI | http://host/path/path/file?query 是基 URI
http://host/path/path/file/ | yes
http://host/path/path/#fragment | yes
http://host/path/path/MoreDir/" | yes
http://host/path/path/OtherFile?Query | yes
http://host/path/path/ | yes
http://host/path/path/file | yes
http://host/path/path | no
http://host/path/path?query | no
http://host/path/path#Fragment | no
http://host/path/path2/ | no
http://host/path/path2/MoreDir | no
http://host/path/File | no

此示例创建一个 Uri 实例，该实例表示一个基 Uri 实例。然后，它从一个字符串创建第二个 Uri 实例。它调用 IsBaseOf 以确定基实例是否为第二个实例的基。结果将输出到控制台。 此示例创建一个 Uri 实例，该实例表示一个基 Uri 实例。然后，它从一个字符串创建第二个 Uri 实例。它调用 IsBaseOf 以确定基实例是否为第二个实例的基。结果将输出到控制台。 此示例创建一个 Uri 实例，该实例表示一个基 Uri 实例。然后，它从一个字符串创建第二个 Uri 实例。它调用 IsBaseOf 以确定基实例是否为第二个实例的基。结果将输出到控制台。 此示例创建一个 Uri 实例，该实例表示一个基 Uri 实例。然后，它从一个字符串创建第二个 Uri 实例。它调用 IsBaseOf 以确定基实例是否为第二个实例的基。结果将输出到控制台。

' Create a base Uri.
Dim baseUri As New Uri("http://www.contoso.com/")

' Create a new Uri from a string.
Dim uriAddress As New Uri("http://www.contoso.com/index.htm?date=today")

' Determine whether BaseUri is a base of UriAddress.
If baseUri.IsBaseOf(uriAddress) Then
    Console.WriteLine("{0} is the base of {1}", baseUri, uriAddress)
End If

// Create a base Uri.
Uri baseUri = new Uri("http://www.contoso.com/");

// Create a new Uri from a string.
Uri uriAddress = new Uri("http://www.contoso.com/index.htm?date=today");

// Determine whether BaseUri is a base of UriAddress.
if (baseUri.IsBaseOf(uriAddress))
    Console.WriteLine("{0} is the base of {1}", baseUri, uriAddress);

// Create a base Uri.
Uri^ baseUri = gcnew Uri( "http://www.contoso.com/" );

// Create a new Uri from a string.
Uri^ uriAddress = gcnew Uri( "http://www.contoso.com/index.htm?date=today" );

// Determine whether BaseUri is a base of UriAddress.
if ( baseUri->IsBaseOf( uriAddress ) )
   Console::WriteLine( "{0} is the base of {1}", baseUri, uriAddress );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.ISerializable ..::.GetObjectData 方法

Uri
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
Uri 类

返回序列化当前实例所需的数据。

命名空间： System
程序集： System（在 System.dll 中）
<SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter := True)> _
Private Sub GetObjectData ( _
    serializationInfo As SerializationInfo, _
    streamingContext As StreamingContext _
) Implements ISerializable.GetObjectData
[SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter = true)]
void ISerializable.GetObjectData(
    SerializationInfo serializationInfo,
    StreamingContext streamingContext
)
[SecurityPermissionAttribute(SecurityAction::LinkDemand, SerializationFormatter = true)]
private:
virtual void GetObjectData(
    SerializationInfo^ serializationInfo,
    StreamingContext streamingContext
) sealed = ISerializable::GetObjectData
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter = true)>]
private abstract GetObjectData :
        serializationInfo:SerializationInfo *
        streamingContext:StreamingContext -> unit
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter = true)>]
private override GetObjectData :
        serializationInfo:SerializationInfo *
        streamingContext:StreamingContext -> unit

参数

serializationInfo
类型： System.Runtime.Serialization SerializationInfo
一个 SerializationInfo 对象，它包含序列化 Uri 所需的信息。
streamingContext
类型： System.Runtime.Serialization StreamingContext
StreamingContext 对象，该对象包含与 Uri 相关联的序列化流的源和目标。

实现

  • SecurityPermission

    以使用序列化方法。关联的枚举：SerializationFormatter。 以使用序列化方法。关联的枚举：SerializationFormatter。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsExcludedCharacter 方法

Uri
.
.
::
.
IsExcludedCharacter 方法
Uri 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意：此 API 现在已过时。

获取一个值，该值指示是否应该转义指定的字符。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")> _
Protected Shared Function IsExcludedCharacter ( _
    character As Char _
) As Boolean
[ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected static bool IsExcludedCharacter(
    char character
)
[ObsoleteAttribute(L"The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected:
static bool IsExcludedCharacter(
    wchar_t character
)
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
static member IsExcludedCharacter :
        character:char -> bool

参数

character
类型： System Char
要测试的 Char。

返回值

类型： System Boolean
一个 Boolean 值。如果应该转义指定的字符，则该值为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsHexDigit 方法

Uri
.
.
::
.
IsHexDigit 方法
Uri 类

确定指定的字符是否为有效的十六进制数字。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function IsHexDigit ( _
    character As Char _
) As Boolean
public static bool IsHexDigit(
    char character
)
public:
static bool IsHexDigit(
    wchar_t character
)
static member IsHexDigit :
        character:char -> bool

参数

character
类型： System Char
要验证的字符。

返回值

类型： System Boolean
一个 Boolean 值。如果字符是有效的十六进制数字，则该值为 true；否则为 false。

十六进制数字是数字 0 到 9 和字母 A-F 或 a-f。

下面的示例确定一个字符是否为十六进制字符，如果是的话，则将对应的十进制值输出到控制台。

Dim testChar As Char = "e"c
If Uri.IsHexDigit(testChar) = True Then
    Console.WriteLine("'{0}' is the hexadecimal representation of {1}", testChar, Uri.FromHex(testChar))
Else
    Console.WriteLine("'{0}' is not a hexadecimal character", testChar)
End If
Dim returnString As String = Uri.HexEscape(testChar)
Console.WriteLine("The hexadecimal value of '{0}' is {1}", testChar, returnString)

char  testChar = 'e';
if (Uri.IsHexDigit(testChar) == true)
    Console.WriteLine("'{0}' is the hexadecimal representation of {1}", testChar, Uri.FromHex(testChar));
else
    Console.WriteLine("'{0}' is not a hexadecimal character", testChar);

string returnString = Uri.HexEscape(testChar);
Console.WriteLine("The hexadecimal value of '{0}' is {1}", testChar, returnString);

char testChar = 'e';
if ( Uri::IsHexDigit( testChar ) == true )
{
   Console::WriteLine( "'{0}' is the hexadecimal representation of {1}",
      testChar, Uri::FromHex( testChar ) );
}
else
{
   Console::WriteLine( "'{0}' is not a hex character", testChar );
}

String^ returnString = Uri::HexEscape( testChar );
Console::WriteLine( "The hexadecimal value of '{0}' is {1}", testChar, returnString );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsHexEncoding 方法

Uri
.
.
::
.
IsHexEncoding 方法
Uri 类

确定字符串中的一个字符是否为十六进制编码。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function IsHexEncoding ( _
    pattern As String, _
    index As Integer _
) As Boolean
public static bool IsHexEncoding(
    string pattern,
    int index
)
public:
static bool IsHexEncoding(
    String^ pattern,
    int index
)
static member IsHexEncoding :
        pattern:string *
        index:int -> bool

参数

pattern
类型： System String
要检查的字符串。
index
类型： System Int32
检查十六进制编码的 pattern 中的位置。

返回值

类型： System Boolean
一个 Boolean 值。如果 pattern 在指定位置进行了十六进制编码，则该值为 true；否则为 false。

IsHexEncoding 方法检查字符串中遵循“%hexhex”模式的十六进制编码，其中的“hex”是 0 到 9 的数字或 A-F 的字母（不区分大小写）。

下面的代码示例确定一个字符是否为十六进制编码，如果是的话，则将等效字符输出到控制台。

Dim testString As String = "%75"
Dim index As Integer = 0
If Uri.IsHexEncoding(testString, index) Then
    Console.WriteLine("The character is {0}", Uri.HexUnescape(testString, index))
Else
    Console.WriteLine("The character is not hexadecimal encoded")
End If

string testString = "%75";
int index = 0;
if (Uri.IsHexEncoding(testString, index))
     Console.WriteLine("The character is {0}", Uri.HexUnescape(testString, ref index));
else
     Console.WriteLine("The character is not hexadecimal encoded");

String^ testString = "%75";
int index = 0;
if ( Uri::IsHexEncoding( testString, index ) )
{
   Console::WriteLine( "The character is {0}",
      Uri::HexUnescape( testString, index ) );
}
else
{
   Console::WriteLine( "The character is not hex encoded" );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsReservedCharacter 方法

Uri
.
.
::
.
IsReservedCharacter 方法
Uri 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意：此 API 现在已过时。

获取一个值，该值指示指定的字符是否为保留字符。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")> _
Protected Overridable Function IsReservedCharacter ( _
    character As Char _
) As Boolean
[ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected virtual bool IsReservedCharacter(
    char character
)
[ObsoleteAttribute(L"The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected:
virtual bool IsReservedCharacter(
    wchar_t character
)
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract IsReservedCharacter :
        character:char -> bool
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
override IsReservedCharacter :
        character:char -> bool

参数

character
类型： System Char
要测试的 Char。

返回值

类型： System Boolean
一个 Boolean 值。如果指定的字符是保留字符，则该值为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsWellFormedOriginalString 方法

Uri
.
.
::
.
IsWellFormedOriginalString 方法
Uri 类

指示用于构造此 Uri 的字符串是否格式良好，以及它是否不需要进一步转义。

命名空间： System
程序集： System（在 System.dll 中）
Public Function IsWellFormedOriginalString As Boolean
public bool IsWellFormedOriginalString()
public:
bool IsWellFormedOriginalString()
member IsWellFormedOriginalString : unit -> bool

返回值

类型： System Boolean
一个 Boolean 值。如果该字符串格式正确，则该值为 true；否则为 false。

默认情况下，将认为该字符串的格式是符合 RFC 2396 和 RFC 2732 的标准格式。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987，字符串被认为是标准格式的。 默认情况下，将认为该字符串的格式是符合 RFC 2396 和 RFC 2732 的标准格式。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987，字符串被认为是标准格式的。

如果出现了下列任一情况，则认为该字符串的格式很差，并导致该方法返回 false。

错误 | 示例
此字符串未正确转义。 | http://www.contoso.com/path???/file http://www.contoso.com/path???/file name
字符串是绝对 Uri，它表示隐式文件 Uri。 | c:\\directory\filename
字符串是绝对 URI，它在路径前缺少一个斜杠。 | file://c:/directory/filename
字符串包含非转义反斜杠，即使这些反斜杠被视为正斜杠。 | http:\\host/path/file
字符串表示分层的绝对 Uri，不包含“://”。 | www.contoso.com/path/file
Uri..::.Scheme 的分析器指示原始字符串不是格式良好的。 | 此示例取决于 URI 的方案。

默认情况下，将认为用于构造此 Uri 的字符串的格式是符合 RFC 2396 和 RFC 2732 的标准格式。

在启用国际资源标识符 (IRI) 和国际化域名 (IDN) 支持之后，用于构建此 Uri 的字符串将被认为符合 RFC 3986 和 RFC 3987 的格式要求。用于支持 IRI 的 Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。 在启用国际资源标识符 (IRI) 和国际化域名 (IDN) 支持之后，用于构建此 Uri 的字符串将被认为符合 RFC 3986 和 RFC 3987 的格式要求。用于支持 IRI 的 Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间

其他资源

http://www.ietf.org


Uri ..::.IsWellFormedUriString 方法

Uri
.
.
::
.
IsWellFormedUriString 方法
Uri 类

通过尝试用字符串构造一个 URI 来指示字符串是否为格式良好的，并确保字符串不需要进一步转义。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function IsWellFormedUriString ( _
    uriString As String, _
    uriKind As UriKind _
) As Boolean
public static bool IsWellFormedUriString(
    string uriString,
    UriKind uriKind
)
public:
static bool IsWellFormedUriString(
    String^ uriString,
    UriKind uriKind
)
static member IsWellFormedUriString :
        uriString:string *
        uriKind:UriKind -> bool

参数

uriString
类型： System String
用于尝试构造 Uri 的字符串。
uriKind
类型： System UriKind
uriString 中的 Uri 的类型。

返回值

类型： System Boolean
一个 Boolean 值。如果该字符串格式正确，则该值为 true ；否则为 false。

默认情况下，将认为该字符串的格式是符合 RFC 2396 和 RFC 2732 的标准格式。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987，字符串被认为是标准格式的。 默认情况下，将认为该字符串的格式是符合 RFC 2396 和 RFC 2732 的标准格式。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987，字符串被认为是标准格式的。

如果出现了下面的任一情况，则认为字符串的格式很差，并导致该方法返回 false

错误 | 示例
此字符串未正确转义。 | http://www.contoso.com/path???/file http://www.contoso.com/path???/file name
字符串是绝对 Uri，它表示隐式文件 Uri。 | c:\\directory\filename
字符串是绝对 URI，它在路径前缺少一个斜杠。 | file://c:/directory/filename
字符串包含非转义反斜杠，即使这些反斜杠会被视为正斜杠 | http:\\host/path/file
字符串表示分层的绝对 Uri，不包含“://” | www.contoso.com/path/file
Scheme 的分析器指示原始字符串不是格式良好的。 | 此示例取决于 URI 的方案。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间

其他资源

http://www.ietf.org


Uri ..::.MakeRelative 方法

Uri
.
.
::
.
MakeRelative 方法
Uri 类

注意：此 API 现在已过时。

确定两个 Uri 实例之间的差异。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. Please use MakeRelativeUri(Uri uri). http://go.microsoft.com/fwlink/?linkid=14202")> _
Public Function MakeRelative ( _
    toUri As Uri _
) As String
[ObsoleteAttribute("The method has been deprecated. Please use MakeRelativeUri(Uri uri). http://go.microsoft.com/fwlink/?linkid=14202")]
public string MakeRelative(
    Uri toUri
)
[ObsoleteAttribute(L"The method has been deprecated. Please use MakeRelativeUri(Uri uri). http://go.microsoft.com/fwlink/?linkid=14202")]
public:
String^ MakeRelative(
    Uri^ toUri
)
[<ObsoleteAttribute("The method has been deprecated. Please use MakeRelativeUri(Uri uri). http://go.microsoft.com/fwlink/?linkid=14202")>]
member MakeRelative :
        toUri:Uri -> string

参数

toUri
类型： System Uri
与当前 URI 进行比较的 URI。

返回值

类型： System String
如果此 URI 实例与 toUri 的主机名和方案相同，则此方法返回一个表示相对 URI 的 String。若将此相对 URI 追加到当前 URI 实例，就可以得到 toUri 参数。
如果主机名或方案不同，则此方法返回一个表示 toUri 参数的 String。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此方法仅对绝对 URI 有效。

下表显示 URI 实例、toUri 以及 MakeRelative 的调用结果。

当前的 URI 实例 | toUri | 返回值
http://www.contoso.com/ | http://www.contoso.com/test/test.htm | test/test.htm
http://www.contoso.com/test1/ | http://www.contoso.com/ | ../
http://www.contoso.com:8000/ | http://www.contoso.com/test/test.htm | http://www.contoso.com/test/test.htm
http://username@www.contoso.com/ | http://www.contoso.com/test1/test1.txt | test1/test1.txt

如果 URI 中存在用户信息，则忽略该信息。

下面的示例创建两个 Uri 实例。路径信息中的差异被写入控制台中。 下面的示例创建两个 Uri 实例。路径信息中的差异被写入控制台中。

    ' Create a base Uri.
    Dim address1 As New Uri("http://www.contoso.com/")

    ' Create a new Uri from a string.
    Dim address2 As New Uri("http://www.contoso.com/index.htm?date=today")

    ' Determine the relative Uri.
    Console.WriteLine("The difference is {0}", address1.MakeRelativeUri(address2))

End Sub 'SampleMakeRelative

// Create a base Uri.
Uri address1 = new Uri("http://www.contoso.com/");

// Create a new Uri from a string.
Uri address2 = new Uri("http://www.contoso.com/index.htm?date=today");

// Determine the relative Uri.
Console.WriteLine("The difference is {0}", address1.MakeRelativeUri(address2));

// Create a base Uri.
Uri^ address1 = gcnew Uri( "http://www.contoso.com/" );

// Create a new Uri from a string.
Uri^ address2 = gcnew Uri( "http://www.contoso.com/index.htm?date=today" );

// Determine the relative Uri.
Console::WriteLine( "The difference is {0}", address1->MakeRelativeUri( address2 ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.MakeRelativeUri 方法

Uri
.
.
::
.
MakeRelativeUri 方法
Uri 类

确定两个 Uri 实例之间的差异。

命名空间： System
程序集： System（在 System.dll 中）
Public Function MakeRelativeUri ( _
    uri As Uri _
) As Uri
public Uri MakeRelativeUri(
    Uri uri
)
public:
Uri^ MakeRelativeUri(
    Uri^ uri
)
member MakeRelativeUri :
        uri:Uri -> Uri

参数

uri
类型： System Uri
与当前 URI 进行比较的 URI。

返回值

类型： System Uri
如果此 URI 实例与 toUri 的主机名和方案相同，则此方法返回一个相对 Uri。若将此相对 URI 追加到当前 URI 实例，就可以得到 toUri。
如果主机名或方案不同，则此方法返回一个表示 toUri 参数的 Uri。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

下表显示 URI 实例、toUri 以及 MakeRelativeUri 的调用结果。

当前的 URI 实例 | toUri | 返回值
http://www.contoso.com/ | http://www.contoso.com/test/test.htm | test/test.htm
http://www.contoso.com/test1/ | http://www.contoso.com/ | ../
http://www.contoso.com:8000/ | http://www.contoso.com/test/test.htm | http://www.contoso.com/test/test.htm
http://username@www.contoso.com/ | http://www.contoso.com/test1/test1.txt | test1/test1.txt

如果 URI 中存在用户信息，则忽略该信息。

下面的示例创建两个 Uri 实例。路径信息中的差异被写入控制台中。 下面的示例创建两个 Uri 实例。路径信息中的差异被写入控制台中。

    ' Create a base Uri.
    Dim address1 As New Uri("http://www.contoso.com/")

    ' Create a new Uri from a string.
    Dim address2 As New Uri("http://www.contoso.com/index.htm?date=today")

    ' Determine the relative Uri.
    Console.WriteLine("The difference is {0}", address1.MakeRelativeUri(address2))

End Sub 'SampleMakeRelative

// Create a base Uri.
Uri address1 = new Uri("http://www.contoso.com/");

// Create a new Uri from a string.
Uri address2 = new Uri("http://www.contoso.com/index.htm?date=today");

// Determine the relative Uri.
Console.WriteLine("The difference is {0}", address1.MakeRelativeUri(address2));

// Create a base Uri.
Uri^ address1 = gcnew Uri( "http://www.contoso.com/" );

// Create a new Uri from a string.
Uri^ address2 = gcnew Uri( "http://www.contoso.com/index.htm?date=today" );

// Determine the relative Uri.
Console::WriteLine( "The difference is {0}", address1->MakeRelativeUri( address2 ) );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Parse 方法

Uri
.
.
::
.
Parse 方法
Uri 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意：此 API 现在已过时。

分析当前实例的 URI 以确保它包含有效 URI 所需的所有部分。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")> _
Protected Overridable Sub Parse
[ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected virtual void Parse()
[ObsoleteAttribute(L"The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")]
protected:
virtual void Parse()
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract Parse : unit -> unit
[<ObsoleteAttribute("The method has been deprecated. It is not used by the system. http://go.microsoft.com/fwlink/?linkid=14202")>]
override Parse : unit -> unit
异常 | 条件
UriFormatException | 从构造函数传来的 URI 无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.ToString 方法

Uri
.
.
::
.
ToString 方法
Uri 类

获取指定的 Uri 实例的规范化字符串表示形式。

命名空间： System
程序集： System（在 System.dll 中）
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags := SecurityPermissionFlag.Infrastructure)> _
Public Overrides Function ToString As String
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)]
public override string ToString()
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, Flags = SecurityPermissionFlag::Infrastructure)]
public:
virtual String^ ToString() override
[<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)>]
abstract ToString : unit -> string
[<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)>]
override ToString : unit -> string

返回值

类型： System String
一个 String 实例，它包含 Uri 实例的非转义规范化表示形式。除了 #、? 和 %，所有字符均为非转义字符。 一个 String 实例，它包含 Uri 实例的非转义规范化表示形式。除了 #、? 和 %，所有字符均为非转义字符。

当此端口是方案的默认端口时，此方法返回的字符串不包含端口信息。

说明 说明

由 ToString 方法返回的字符串可能包含一些控制字符，可以损坏控制台应用程序的状态。您可以使用采用 UriFormat..::.SafeUnescaped 格式的 GetComponents 方法从返回字符串中移除控制字符。 由 ToString 方法返回的字符串可能包含一些控制字符，可以损坏控制台应用程序的状态。您可以使用采用 UriFormat..::.SafeUnescaped 格式的 GetComponents 方法从返回字符串中移除控制字符。

下面的示例从一个字符串创建一个新的 Uri 实例。此示例阐释了从 OriginalString 返回的值（传递到构造函数的字符串）和从 ToString 调用返回的值（字符串的规范格式）之间的差异。 下面的示例从一个字符串创建一个新的 Uri 实例。此示例阐释了从 OriginalString 返回的值（传递到构造函数的字符串）和从 ToString 调用返回的值（字符串的规范格式）之间的差异。

    ' Create a new Uri from a string address.
    Dim uriAddress As New Uri("HTTP://www.Contoso.com:80//thick%20and%20thin.htm")

    ' Write the new Uri to the console and note the difference in the two values.
    ' ToString() gives the canonical version.  OriginalString gives the orginal
    ' string that was passed to the constructor.
    ' The following outputs "http://www.contoso.com/thick and thin.htm".
    Console.WriteLine(uriAddress.ToString())

    ' The following outputs "HTTP://www.Contoso.com:80//thick%20and%20thin.htm".
    Console.WriteLine(uriAddress.OriginalString)

End Sub 'SampleToString

// Create a new Uri from a string address.
Uri uriAddress = new Uri("HTTP://www.Contoso.com:80//thick%20and%20thin.htm");

// Write the new Uri to the console and note the difference in the two values.
// ToString() gives the canonical version.  OriginalString gives the orginal
// string that was passed to the constructor.

// The following outputs "http://www.contoso.com/thick and thin.htm".
Console.WriteLine(uriAddress.ToString());

// The following outputs "HTTP://www.Contoso.com:80//thick%20and%20thin.htm".
Console.WriteLine(uriAddress.OriginalString);

// Create a new Uri from a string address.
Uri^ uriAddress = gcnew Uri( "HTTP://www.Contoso.com:80//thick%20and%20thin.htm" );

// Write the new Uri to the console and note the difference in the two values.
// ToString() gives the canonical version.  OriginalString gives the orginal
// string that was passed to the constructor.
// The following outputs "http://www.contoso.com/thick and thin.htm".
Console::WriteLine( uriAddress );

// The following outputs "HTTP://www.Contoso.com:80//thick%20and%20thin.htm".
Console::WriteLine( uriAddress->OriginalString );
  • SecurityPermission

    以避免从 Uri 派生部分受信任的代码。关联的枚举：Infrastructure。 以避免从 Uri 派生部分受信任的代码。关联的枚举：Infrastructure。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.TryCreate 方法

Uri
.
.
::
.
TryCreate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Uri 类

创建一个新的 Uri。在无法创建 Uri 时不引发异常。 创建一个新的 Uri。在无法创建 Uri 时不引发异常。

名称 说明
页首

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.TryCreate 方法 (String, UriKind, Uri%)

Uri
.
.
::
.
TryCreate 方法 (String, UriKind, Uri%)
Uri 类

使用指定的 String 实例和 UriKind 创建一个新的 Uri。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function TryCreate ( _
    uriString As String, _
    uriKind As UriKind, _
    <OutAttribute> ByRef result As Uri _
) As Boolean
public static bool TryCreate(
    string uriString,
    UriKind uriKind,
    out Uri result
)
public:
static bool TryCreate(
    String^ uriString,
    UriKind uriKind,
    [OutAttribute] Uri^% result
)
static member TryCreate :
        uriString:string *
        uriKind:UriKind *
        result:Uri byref -> bool

参数

uriString
类型： System String
表示 Uri 的 String。
uriKind
类型： System UriKind
URI 的类型。
result
类型： System Uri %
此方法返回时，包含构造的 Uri。

返回值

类型： System Boolean
一个 Boolean 值。如果成功创建了 Uri，则该值为 true；否则为 false。

如果此方法返回 true，则新 Uri 位于 result 中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
TryCreate 重载
System 命名空间


Uri ..::.TryCreate 方法 (Uri, String, Uri%)

Uri
.
.
::
.
TryCreate 方法 (Uri, String, Uri%)
Uri 类

使用指定的基和相对 String 实例创建一个新的 Uri。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function TryCreate ( _
    baseUri As Uri, _
    relativeUri As String, _
    <OutAttribute> ByRef result As Uri _
) As Boolean
public static bool TryCreate(
    Uri baseUri,
    string relativeUri,
    out Uri result
)
public:
static bool TryCreate(
    Uri^ baseUri,
    String^ relativeUri,
    [OutAttribute] Uri^% result
)
static member TryCreate :
        baseUri:Uri *
        relativeUri:string *
        result:Uri byref -> bool

参数

baseUri
类型： System Uri
基 Uri。
relativeUri
类型： System String
要添加到基 Uri 的相对 Uri（表示为 String）。
result
类型： System Uri %
此方法返回时，包含从 baseUri 和 relativeUri 构造的 Uri。该参数未经初始化即被传递。 此方法返回时，包含从 baseUri 和 relativeUri 构造的 Uri。该参数未经初始化即被传递。

返回值

类型： System Boolean
一个 Boolean 值。如果成功创建了 Uri，则该值为 true；否则为 false。

如果此方法返回 true，则新 Uri 位于 result 中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
TryCreate 重载
System 命名空间


Uri ..::.TryCreate 方法 (Uri, Uri, Uri%)

Uri
.
.
::
.
TryCreate 方法 (Uri, Uri, Uri%)
Uri 类

使用指定基和相对 Uri 实例创建一个新的 Uri。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function TryCreate ( _
    baseUri As Uri, _
    relativeUri As Uri, _
    <OutAttribute> ByRef result As Uri _
) As Boolean
public static bool TryCreate(
    Uri baseUri,
    Uri relativeUri,
    out Uri result
)
public:
static bool TryCreate(
    Uri^ baseUri,
    Uri^ relativeUri,
    [OutAttribute] Uri^% result
)
static member TryCreate :
        baseUri:Uri *
        relativeUri:Uri *
        result:Uri byref -> bool

参数

baseUri
类型： System Uri
基 Uri。
relativeUri
类型： System Uri
要添加到基 Uri 的相对 Uri。
result
类型： System Uri %
此方法返回时，包含从 baseUri 和 relativeUri 构造的 Uri。该参数未经初始化即被传递。 此方法返回时，包含从 baseUri 和 relativeUri 构造的 Uri。该参数未经初始化即被传递。

返回值

类型： System Boolean
一个 Boolean 值。如果成功创建了 Uri，则该值为 true；否则为 false。

如果此方法返回 true，则新 Uri 位于 result 中。

此方法构造 URI，使之具有规范化的格式并加以验证。如果发生未经处理的异常，则此方法捕捉该异常。若要创建 Uri 并获取异常，请使用 Uri 构造函数之一。 此方法构造 URI，使之具有规范化的格式并加以验证。如果发生未经处理的异常，则此方法捕捉该异常。若要创建 Uri 并获取异常，请使用 Uri 构造函数之一。 此方法构造 URI，使之具有规范化的格式并加以验证。如果发生未经处理的异常，则此方法捕捉该异常。若要创建 Uri 并获取异常，请使用 Uri 构造函数之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
TryCreate 重载
System 命名空间


Uri ..::.Unescape 方法

Uri
.
.
::
.
Unescape 方法
Uri 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

注意：此 API 现在已过时。

转换指定的字符串，方法是将任何转义序列替换为相应的未转义表示形式。

命名空间： System
程序集： System（在 System.dll 中）
<ObsoleteAttribute("The method has been deprecated. Please use GetComponents() or static UnescapeDataString() to unescape a Uri component or a string. http://go.microsoft.com/fwlink/?linkid=14202")> _
Protected Overridable Function Unescape ( _
    path As String _
) As String
[ObsoleteAttribute("The method has been deprecated. Please use GetComponents() or static UnescapeDataString() to unescape a Uri component or a string. http://go.microsoft.com/fwlink/?linkid=14202")]
protected virtual string Unescape(
    string path
)
[ObsoleteAttribute(L"The method has been deprecated. Please use GetComponents() or static UnescapeDataString() to unescape a Uri component or a string. http://go.microsoft.com/fwlink/?linkid=14202")]
protected:
virtual String^ Unescape(
    String^ path
)
[<ObsoleteAttribute("The method has been deprecated. Please use GetComponents() or static UnescapeDataString() to unescape a Uri component or a string. http://go.microsoft.com/fwlink/?linkid=14202")>]
abstract Unescape :
        path:string -> string
[<ObsoleteAttribute("The method has been deprecated. Please use GetComponents() or static UnescapeDataString() to unescape a Uri component or a string. http://go.microsoft.com/fwlink/?linkid=14202")>]
override Unescape :
        path:string -> string

参数

path
类型： System String
要转换的 String。

返回值

类型： System String
一个 String，包含 path 参数的非转义值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UnescapeDataString 方法

Uri
.
.
::
.
UnescapeDataString 方法
Uri 类

将字符串转换为它的非转义表示形式。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function UnescapeDataString ( _
    stringToUnescape As String _
) As String
public static string UnescapeDataString(
    string stringToUnescape
)
public:
static String^ UnescapeDataString(
    String^ stringToUnescape
)
static member UnescapeDataString :
        stringToUnescape:string -> string

参数

stringToUnescape
类型： System String
要恢复原义的字符串。

返回值

类型： System String
一个 String，包含 stringToUnescape 的非转义表示形式。
异常 | 条件
ArgumentNullException | stringToUnescape 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

您应小心使用此方法。对以前已恢复原义的字符串再次恢复原义可能会造成多义性和错误。 您应小心使用此方法。对以前已恢复原义的字符串再次恢复原义可能会造成多义性和错误。

许多 Web 浏览器将 URI 中的空格转义为加号（“+”）字符；但是，UnescapeDataString 方法不会将加号字符转换为空格，因为这种转换并非所有 URI 方案中的标准行为。

下面的代码示例对 URI 恢复原义，然后将所有的加号字符（“+”）转换为空格。

String DataString = Uri.UnescapeDataString(".NET+Framework");
Console.WriteLine("Unescaped string: {0}", DataString);

String PlusString = DataString.Replace('+',' ');
Console.WriteLine("plus to space string: {0}", PlusString);

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间
EscapeDataString
EscapeUriString


Uri 运算符

Uri 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Uri 类

Uri 类型公开以下成员。

名称 说明
页首

参考

Uri 类
System 命名空间


Uri ..::.Equality 运算符

Uri
.
.
::
.
Equality 运算符
Uri 类

确定两个 Uri 实例是否具有相同的值。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Operator = ( _
    uri1 As Uri, _
    uri2 As Uri _
) As Boolean
public static bool operator ==(
    Uri uri1,
    Uri uri2
)
public:
static bool operator ==(
    Uri^ uri1,
    Uri^ uri2
)
static let inline (=)
        uri1:Uri *
        uri2:Uri  : bool

参数

uri1
类型： System Uri
要与 uri2 比较的 Uri 实例。
uri2
类型： System Uri
要与 uri1 进行比较的 Uri 实例。

返回值

类型： System Boolean
一个 Boolean 值。如果这两个 Uri 实例是等效的，则该值为 true；否则为 false。

此重载使用 Equals 方法来确定两个 Uri 实例是否等效。进行此比较时，将忽略 UserInfo 和 Fragment 内容。 此重载使用 Equals 方法来确定两个 Uri 实例是否等效。进行此比较时，将忽略 UserInfo 和 Fragment 内容。

此示例从字符串创建三个 Uri 实例，并对它们进行比较以确定它们是否表示相同的值。Address1 和 Address2 是相同，因为对于此比较忽略 Fragment 部分。结果将输出到控制台。 此示例从字符串创建三个 Uri 实例，并对它们进行比较以确定它们是否表示相同的值。Address1 和 Address2 是相同，因为对于此比较忽略 Fragment 部分。结果将输出到控制台。 此示例从字符串创建三个 Uri 实例，并对它们进行比较以确定它们是否表示相同的值。Address1 和 Address2 是相同，因为对于此比较忽略 Fragment 部分。结果将输出到控制台。

' Create some Uris.
Dim address1 As New Uri("http://www.contoso.com/index.htm#search")
Dim address2 As New Uri("http://www.contoso.com/index.htm")
Dim address3 As New Uri("http://www.contoso.com/index.htm?date=today")

' The first two are equal because the fragment is ignored.
If address1 = address2 Then
    Console.WriteLine("{0} is equal to {1}", address1.ToString(), address2.ToString())
End If
' The second two are not equal.
If address2 <> address3 Then
    Console.WriteLine("{0} is not equal to {1}", address2.ToString(), address3.ToString())
End If

// Create some Uris.
Uri address1 = new Uri("http://www.contoso.com/index.htm#search");
Uri address2 = new Uri("http://www.contoso.com/index.htm");
Uri address3 = new Uri("http://www.contoso.com/index.htm?date=today");

// The first two are equal because the fragment is ignored.
if (address1 == address2)
    Console.WriteLine("{0} is equal to {1}", address1.ToString(), address2.ToString());

// The second two are not equal.
if (address2 != address3)
    Console.WriteLine("{0} is not equal to {1}", address2.ToString(), address3.ToString());

// Create some Uris.
Uri^ address1 = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Uri^ address2 = gcnew Uri( "http://www.contoso.com/index.htm" );
Uri^ address3 = gcnew Uri( "http://www.contoso.com/index.htm?date=today" );

// The first two are equal because the fragment is ignored.
if ( address1 == address2 )
   Console::WriteLine( "{0} is equal to {1}", address1, address2 );

// The second two are not equal.
if ( address2 != address3 )
   Console::WriteLine( "{0} is not equal to {1}", address2, address3 );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Inequality 运算符

Uri
.
.
::
.
Inequality 运算符
Uri 类

确定两个 Uri 实例是否具有不同的值。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Operator <> ( _
    uri1 As Uri, _
    uri2 As Uri _
) As Boolean
public static bool operator !=(
    Uri uri1,
    Uri uri2
)
public:
static bool operator !=(
    Uri^ uri1,
    Uri^ uri2
)
static let inline (<>)
        uri1:Uri *
        uri2:Uri  : bool

参数

uri1
类型： System Uri
要与 uri2 比较的 Uri 实例。
uri2
类型： System Uri
要与 uri1 进行比较的 Uri 实例。

返回值

类型： System Boolean
一个 Boolean 值。如果两个 Uri 实例不相等，则该值为 true；否则为 false。如果两者中任意一个参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 true。 一个 Boolean 值。如果两个 Uri 实例不相等，则该值为 true；否则为 false。如果两者中任意一个参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法返回 true。

此重载使用 Equals 方法来确定两个 Uri 实例是否不等效。进行此比较时，将忽略 UserInfo 和 Fragment 内容。 此重载使用 Equals 方法来确定两个 Uri 实例是否不等效。进行此比较时，将忽略 UserInfo 和 Fragment 内容。

此示例从字符串创建三个 Uri 实例，并对它们进行比较以确定它们是否表示相同的值。Address2 与 Address3 不相同，因为 Address3 包含在 Address2 中找不到的 Query。结果将输出到控制台。 此示例从字符串创建三个 Uri 实例，并对它们进行比较以确定它们是否表示相同的值。Address2 与 Address3 不相同，因为 Address3 包含在 Address2 中找不到的 Query。结果将输出到控制台。 此示例从字符串创建三个 Uri 实例，并对它们进行比较以确定它们是否表示相同的值。Address2 与 Address3 不相同，因为 Address3 包含在 Address2 中找不到的 Query。结果将输出到控制台。

' Create some Uris.
Dim address1 As New Uri("http://www.contoso.com/index.htm#search")
Dim address2 As New Uri("http://www.contoso.com/index.htm")
Dim address3 As New Uri("http://www.contoso.com/index.htm?date=today")

' The first two are equal because the fragment is ignored.
If address1 = address2 Then
    Console.WriteLine("{0} is equal to {1}", address1.ToString(), address2.ToString())
End If
' The second two are not equal.
If address2 <> address3 Then
    Console.WriteLine("{0} is not equal to {1}", address2.ToString(), address3.ToString())
End If

// Create some Uris.
Uri address1 = new Uri("http://www.contoso.com/index.htm#search");
Uri address2 = new Uri("http://www.contoso.com/index.htm");
Uri address3 = new Uri("http://www.contoso.com/index.htm?date=today");

// The first two are equal because the fragment is ignored.
if (address1 == address2)
    Console.WriteLine("{0} is equal to {1}", address1.ToString(), address2.ToString());

// The second two are not equal.
if (address2 != address3)
    Console.WriteLine("{0} is not equal to {1}", address2.ToString(), address3.ToString());

// Create some Uris.
Uri^ address1 = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Uri^ address2 = gcnew Uri( "http://www.contoso.com/index.htm" );
Uri^ address3 = gcnew Uri( "http://www.contoso.com/index.htm?date=today" );

// The first two are equal because the fragment is ignored.
if ( address1 == address2 )
   Console::WriteLine( "{0} is equal to {1}", address1, address2 );

// The second two are not equal.
if ( address2 != address3 )
   Console::WriteLine( "{0} is not equal to {1}", address2, address3 );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri 属性

Uri 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Uri 类

Uri 类型公开以下成员。

名称 说明
页首

参考

Uri 类
System 命名空间


Uri ..::.AbsolutePath 属性

Uri
.
.
::
.
AbsolutePath 属性
Uri 类

获取 URI 的绝对路径。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property AbsolutePath As String
    Get
public string AbsolutePath { get; }
public:
property String^ AbsolutePath {
    String^ get ();
}
member AbsolutePath : string

属性值

类型： System String
包含资源的绝对路径的 String。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

AbsolutePath 属性包含路径信息，服务器使用该路径信息解析对信息的请求。这通常是服务器文件系统上的所需信息的路径，但也可以指示服务器提供信息所必须运行的应用程序或脚本。 AbsolutePath 属性包含路径信息，服务器使用该路径信息解析对信息的请求。这通常是服务器文件系统上的所需信息的路径，但也可以指示服务器提供信息所必须运行的应用程序或脚本。

该路径信息不包括方案、主机名或 URI 的查询部分。

下面的示例将路径 /catalog/shownew.htm 输出到控制台。

 Dim baseUri As New Uri("http://www.contoso.com/")
 Dim myUri As New Uri(baseUri, "catalog/shownew.htm?date=today")

 Console.WriteLine(myUri.AbsolutePath)

Uri baseUri = new Uri("http://www.contoso.com/");
 Uri myUri = new Uri(baseUri, "catalog/shownew.htm?date=today");

 Console.WriteLine(myUri.AbsolutePath);

Uri^ baseUri = gcnew Uri( "http://www.contoso.com/" );
Uri^ myUri = gcnew Uri( baseUri,"catalog/shownew.htm?date=today" );
Console::WriteLine( myUri->AbsolutePath );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.AbsoluteUri 属性

Uri
.
.
::
.
AbsoluteUri 属性
Uri 类

获取绝对 URI。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property AbsoluteUri As String
    Get
public string AbsoluteUri { get; }
public:
property String^ AbsoluteUri {
    String^ get ();
}
member AbsoluteUri : string

属性值

类型： System String
包含整个 URI 的 String。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

AbsoluteUri 属性包括 Uri 实例中存储的整个 URI，包括所有的片段和查询字符串。

下面的示例将 Uri 实例的完整内容输出到控制台。在示例中，http://www.contoso.com/catalog/shownew.htm?date=today 会被输出到控制台。 下面的示例将 Uri 实例的完整内容输出到控制台。在示例中，http://www.contoso.com/catalog/shownew.htm?date=today 会被输出到控制台。

 Dim baseUri As New Uri("http://www.contoso.com")
 Dim myUri As New Uri(baseUri, "catalog/shownew.htm?date=today")
 Console.WriteLine(myUri.AbsoluteUri)

Uri baseUri= new Uri("http://www.contoso.com");
 Uri myUri = new Uri(baseUri,"catalog/shownew.htm?date=today");
 Console.WriteLine(myUri.AbsoluteUri);

Uri^ baseUri = gcnew Uri( "http://www.contoso.com" );
Uri^ myUri = gcnew Uri( baseUri,"catalog/shownew.htm?date=today" );
Console::WriteLine( myUri->AbsoluteUri );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Authority 属性

Uri
.
.
::
.
Authority 属性
Uri 类

获取服务器的域名系统 (DNS) 主机名或 IP 地址和端口号。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property Authority As String
    Get
public string Authority { get; }
public:
property String^ Authority {
    String^ get ();
}
member Authority : string

属性值

类型： System String
包含此实例所表示的 URI 的证书颁发机构部分的 String。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

Authority 属性通常是服务器 DNS 主机名或 IP 地址。如果此属性与 URI 的默认端口不同，它可能会包括服务端口号。如果 Authority 部分包含保留字符，则这些字符会在此属性返回的字符串值中经过转义。 Authority 属性通常是服务器 DNS 主机名或 IP 地址。如果此属性与 URI 的默认端口不同，它可能会包括服务端口号。如果 Authority 部分包含保留字符，则这些字符会在此属性返回的字符串值中经过转义。 Authority 属性通常是服务器 DNS 主机名或 IP 地址。如果此属性与 URI 的默认端口不同，它可能会包括服务端口号。如果 Authority 部分包含保留字符，则这些字符会在此属性返回的字符串值中经过转义。

下面的示例将服务器的主机名 (www.contoso.com ) 和端口号 (8080) 输出到控制台。

 Dim baseUri As New Uri("http://www.contoso.com:8080/")
 Dim myUri As New Uri(baseUri,"shownew.htm?date=today")

 Console.WriteLine(myUri.Authority)

Uri baseUri = new Uri("http://www.contoso.com:8080/");
Uri myUri = new Uri(baseUri,"shownew.htm?date=today");

Console.WriteLine(myUri.Authority);

Uri^ baseUri = gcnew Uri( "http://www.contoso.com:8080/" );
Uri^ myUri = gcnew Uri( baseUri,"shownew.htm?date=today" );
Console::WriteLine( myUri->Authority );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.DnsSafeHost 属性

Uri
.
.
::
.
DnsSafeHost 属性
Uri 类

获得可安全用于 DNS 解析的未转义主机名。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property DnsSafeHost As String
    Get
public string DnsSafeHost { get; }
public:
property String^ DnsSafeHost {
    String^ get ();
}
member DnsSafeHost : string

属性值

类型： System String
一个包含适用于 DNS 解析的未转义 URI 主机部分的 String；或者，如果原始的未转义主机字符串已适用于解析，则为原始的未转义主机字符串。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

对于 IPv6 地址，将移除方括号 ([])，如果在构造此实例时指定了 ScopeId 属性，则会设置该属性。

DnsSafeHost 属性在 .NET Framework v3.5、3.0 SP1 和 2.0 SP1 中已得到扩展，可以提供基于 RFC 3987 的国际资源标识符 (IRI) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了应用程序与以前版本的 .NET Framework 的兼容性。 DnsSafeHost 属性在 .NET Framework v3.5、3.0 SP1 和 2.0 SP1 中已得到扩展，可以提供基于 RFC 3987 的国际资源标识符 (IRI) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了应用程序与以前版本的 .NET Framework 的兼容性。 DnsSafeHost 属性在 .NET Framework v3.5、3.0 SP1 和 2.0 SP1 中已得到扩展，可以提供基于 RFC 3987 的国际资源标识符 (IRI) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了应用程序与以前版本的 .NET Framework 的兼容性。

若要启用对 IRI 的支持，需要进行以下两项更改：

  1. 在 .NET Framework 2.0 目录下的 machine.config 文件中添加以下代码行

    <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  2. 指定是否对域名应用国际化域名 (IDN) 分析以及是否应该应用 IRI 分析规则。这可以在 machine.config 或 app.config 文件中完成。例如，请添加以下内容： 指定是否对域名应用国际化域名 (IDN) 分析以及是否应该应用 IRI 分析规则。这可以在 machine.config 或 app.config 文件中完成。例如，请添加以下内容： 指定是否对域名应用国际化域名 (IDN) 分析以及是否应该应用 IRI 分析规则。这可以在 machine.config 或 app.config 文件中完成。例如，请添加以下内容：

    <configuration>
  <uri>
  <idn enabled="All" />
  <iriParsing enabled="true" />
  </uri>
</configuration>

启用 IDN 会将域名中的所有 Unicode 标签转换为它们的 Punycode 等效项。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。这样做是为了支持 Internet 中现有的 DNS 服务器，因为大多数 DNS 服务器仅支持 ASCII 字符（请参见 RFC 3940）。 启用 IDN 会将域名中的所有 Unicode 标签转换为它们的 Punycode 等效项。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。这样做是为了支持 Internet 中现有的 DNS 服务器，因为大多数 DNS 服务器仅支持 ASCII 字符（请参见 RFC 3940）。 启用 IDN 会将域名中的所有 Unicode 标签转换为它们的 Punycode 等效项。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。这样做是为了支持 Internet 中现有的 DNS 服务器，因为大多数 DNS 服务器仅支持 ASCII 字符（请参见 RFC 3940）。

启用 IDN 只会影响 DnsSafeHost 属性的值。

IDN 有三个可能的值，具体取决于所使用的 DNS 服务器：

  • idn enabled = All

    此值会将任何 Unicode 域名转换为它们的 Punycode 等效项（IDN 名称）。

  • idn enabled = AllExceptIntranet

    此值会将所有外部 Unicode 域名转换为使用 Punycode 等效项（IDN 名称）。在这种情况下，若要处理本地 Intranet 上的国际化名称，用于 Intranet 的 DNS 服务器应该支持 Unicode 名称。 此值会将所有外部 Unicode 域名转换为使用 Punycode 等效项（IDN 名称）。在这种情况下，若要处理本地 Intranet 上的国际化名称，用于 Intranet 的 DNS 服务器应该支持 Unicode 名称。

  • idn enabled = None

    此值不会将任何 Unicode 域名转换为使用 Punycode。这是与 .NET Framework 2.0 行为一致的默认值。 此值不会将任何 Unicode 域名转换为使用 Punycode。这是与 .NET Framework 2.0 行为一致的默认值。

启用 IRI 分析 (iriParsing enabled = true) 将执行正则化，并根据 RFC 3987 中最新的 IRI 规则检查字符。默认值是 false，并将根据 RFC 2396 和 RFC 2732 来检查（对于 IPv6 文本）执行规范化和字符检查。 启用 IRI 分析 (iriParsing enabled = true) 将执行正则化，并根据 RFC 3987 中最新的 IRI 规则检查字符。默认值是 false，并将根据 RFC 2396 和 RFC 2732 来检查（对于 IPv6 文本）执行规范化和字符检查。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

下面的示例从一个字符串创建 Uri 实例。该示例阐释了从 Host 返回的值（URI 中指定的主机名或地址）与从 DnsSafeHost 返回的值（可安全用于 DNS 解析的地址）的区别。 下面的示例从一个字符串创建 Uri 实例。该示例阐释了从 Host 返回的值（URI 中指定的主机名或地址）与从 DnsSafeHost 返回的值（可安全用于 DNS 解析的地址）的区别。

    ' Create new Uri using a string address.
    Dim address As New Uri("http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm")

    ' Make the address DNS safe.
    ' The following outputs "[fe80::200:39ff:fe36:1a2d]".
    Console.WriteLine(address.Host)

    ' The following outputs "fe80::200:39ff:fe36:1a2d%4".
    Console.WriteLine(address.DnsSafeHost)

End Sub 'SampleDNSSafeHost

// Create new Uri using a string address.
Uri address = new Uri("http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm");

// Make the address DNS safe.

// The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console.WriteLine(address.Host);

// The following outputs "fe80::200:39ff:fe36:1a2d%4".
Console.WriteLine(address.DnsSafeHost);

// Create new Uri using a string address.
Uri^ address = gcnew Uri( "http://[fe80::200:39ff:fe36:1a2d%4]/temp/foo.htm" );

// Make the address DNS safe.
// The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console::WriteLine( address->Host );

// The following outputs "fe80::200:39ff:fe36:1a2d%4".
Console::WriteLine( address->DnsSafeHost );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Fragment 属性

Uri
.
.
::
.
Fragment 属性
Uri 类

获取转义 URI 片段。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property Fragment As String
    Get
public string Fragment { get; }
public:
property String^ Fragment {
    String^ get ();
}
member Fragment : string

属性值

类型： System String
一个包含任意 URI 片段信息的 String。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

Fragment 属性获取 URI 中跟在片段标记 (#) 后的任何文本，包括片段标记本身。给定 URI http://www.contoso.com/index.htm#main，Fragment 属性将返回 #main。 Fragment 属性获取 URI 中跟在片段标记 (#) 后的任何文本，包括片段标记本身。给定 URI http://www.contoso.com/index.htm#main，Fragment 属性将返回 #main。

在任何 Equals 比较中均不考虑 Fragment 属性。

下面的示例创建 Uri 实例并将片段信息输出到控制台。

' Create Uri
Dim uriAddress As New Uri("http://www.contoso.com/index.htm#search")
Console.WriteLine(uriAddress.Fragment)
Console.WriteLine("Uri {0} the default port ", IIf(uriAddress.IsDefaultPort, "uses", "does not use")) 'TODO: For performance reasons this should be changed to nested IF statements

Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Path))
Console.WriteLine("Hash code {0}", uriAddress.GetHashCode())

// Create Uri
Uri uriAddress = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine(uriAddress.Fragment);
Console.WriteLine("Uri {0} the default port ", uriAddress.IsDefaultPort ? "uses" : "does not use");

Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Path));
Console.WriteLine("Hash code {0}", uriAddress.GetHashCode());

// Create Uri
Uri^ uriAddress = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Console::WriteLine( uriAddress->Fragment );
Console::WriteLine( "Uri {0} the default port ", uriAddress->IsDefaultPort ? (String^)"uses" : "does not use" );

Console::WriteLine( "The path of this Uri is {0}", uriAddress->GetLeftPart( UriPartial::Path ) );
Console::WriteLine( "Hash code {0}", uriAddress->GetHashCode() );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Host 属性

Uri
.
.
::
.
Host 属性
Uri 类

获取此实例的主机部分。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property Host As String
    Get
public string Host { get; }
public:
property String^ Host {
    String^ get ();
}
member Host : string

属性值

类型： System String
一个包含主机名的 String。这通常是服务器的 DNS 主机名或 IP 地址。 一个包含主机名的 String。这通常是服务器的 DNS 主机名或 IP 地址。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

与 Authority 属性不同，此属性值不包括端口号。

下面的示例将服务器的主机名 (www.contoso.com ) 输出到控制台。

 Dim baseUri As New Uri("http://www.contoso.com:8080/")
 Dim myUri As New Uri(baseUri,"shownew.htm?date=today")

 Console.WriteLine(myUri.Host)

Uri baseUri = new Uri("http://www.contoso.com:8080/");
Uri myUri = new Uri(baseUri, "shownew.htm?date=today");

 Console.WriteLine(myUri.Host);

Uri^ baseUri = gcnew Uri( "http://www.contoso.com:8080/" );
Uri^ myUri = gcnew Uri( baseUri,"shownew.htm?date=today" );
Console::WriteLine( myUri->Host );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.HostNameType 属性

Uri
.
.
::
.
HostNameType 属性
Uri 类

获取 URI 中指定的主机名的类型。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property HostNameType As UriHostNameType
    Get
public UriHostNameType HostNameType { get; }
public:
property UriHostNameType HostNameType {
    UriHostNameType get ();
}
member HostNameType : UriHostNameType

属性值

类型： System UriHostNameType
UriHostNameType 枚举的成员。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

下面的示例创建一个 Uri 实例并将 HostNameType 输出到控制台。

Dim address1 As New Uri("http://www.contoso.com/index.htm#search")
Console.WriteLine("address 1 {0} a valid scheme name", IIf(Uri.CheckSchemeName(address1.Scheme), " has", " does not have")) 'TODO: For performance reasons this should be changed to nested IF statements

If address1.Scheme = Uri.UriSchemeHttp Then
    Console.WriteLine("Uri is HTTP type")
End If
Console.WriteLine(address1.HostNameType)

Uri address1 = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine("address 1 {0} a valid scheme name",
      Uri.CheckSchemeName(address1.Scheme) ? " has" : " does not have");

if (address1.Scheme == Uri.UriSchemeHttp)
    Console.WriteLine("Uri is HTTP type");

Console.WriteLine(address1.HostNameType);

Uri^ address1 = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Console::WriteLine( "address 1 {0} a valid scheme name",
   Uri::CheckSchemeName( address1->Scheme ) ? (String^)" has" : " does not have" );
if ( address1->Scheme == Uri::UriSchemeHttp )
{
   Console::WriteLine( "Uri is HTTP type" );
}

Console::WriteLine( address1->HostNameType );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsAbsoluteUri 属性

Uri
.
.
::
.
IsAbsoluteUri 属性
Uri 类

获取一个值，该值指示 Uri 实例是否为绝对 URI。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property IsAbsoluteUri As Boolean
    Get
public bool IsAbsoluteUri { get; }
public:
property bool IsAbsoluteUri {
    bool get ();
}
member IsAbsoluteUri : bool

属性值

类型： System Boolean
一个 Boolean 值。如果 Uri 实例是绝对 URI，则该值为 true；否则为 false。

如果传入构造函数的字符串或 Uri 实例可以作为一个绝对 Uri 实例（包含方案、证书颁发机构和路径）进行分析，则此属性为 true。否则，Uri 实例被视为相对实例，并可能省略方案或其他 URI 部分。 如果传入构造函数的字符串或 Uri 实例可以作为一个绝对 Uri 实例（包含方案、证书颁发机构和路径）进行分析，则此属性为 true。否则，Uri 实例被视为相对实例，并可能省略方案或其他 URI 部分。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsDefaultPort 属性

Uri
.
.
::
.
IsDefaultPort 属性
Uri 类

获取一个值，该值指示 URI 的端口值是否为此方案的默认值。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property IsDefaultPort As Boolean
    Get
public bool IsDefaultPort { get; }
public:
property bool IsDefaultPort {
    bool get ();
}
member IsDefaultPort : bool

属性值

类型： System Boolean
一个 Boolean 值。如果 Port 属性中的值是此方案的默认端口，则该值为 true；否则为 false。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

下面的示例创建一个 Uri 实例，并检查该实例是否使用默认端口。

' Create Uri
Dim uriAddress As New Uri("http://www.contoso.com/index.htm#search")
Console.WriteLine(uriAddress.Fragment)
Console.WriteLine("Uri {0} the default port ", IIf(uriAddress.IsDefaultPort, "uses", "does not use")) 'TODO: For performance reasons this should be changed to nested IF statements

Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Path))
Console.WriteLine("Hash code {0}", uriAddress.GetHashCode())

// Create Uri
Uri uriAddress = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine(uriAddress.Fragment);
Console.WriteLine("Uri {0} the default port ", uriAddress.IsDefaultPort ? "uses" : "does not use");

Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Path));
Console.WriteLine("Hash code {0}", uriAddress.GetHashCode());

// Create Uri
Uri^ uriAddress = gcnew Uri( "http://www.contoso.com/index.htm#search" );
Console::WriteLine( uriAddress->Fragment );
Console::WriteLine( "Uri {0} the default port ", uriAddress->IsDefaultPort ? (String^)"uses" : "does not use" );

Console::WriteLine( "The path of this Uri is {0}", uriAddress->GetLeftPart( UriPartial::Path ) );
Console::WriteLine( "Hash code {0}", uriAddress->GetHashCode() );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsFile 属性

Uri
.
.
::
.
IsFile 属性
Uri 类

获取一个值，该值指示指定的 Uri 是否为文件 URI。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property IsFile As Boolean
    Get
public bool IsFile { get; }
public:
property bool IsFile {
    bool get ();
}
member IsFile : bool

属性值

类型： System Boolean
一个 Boolean 值。如果 Uri 是文件 URI，则该值为 true；否则为 false。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

当 Scheme 属性等于 UriSchemeFile 时，IsFile 属性为 true。

下面的示例创建一个 Uri 实例并确定它是否为文件 URI。

    Dim uriAddress2 As New Uri("file://server/filename.ext")
    Console.WriteLine(uriAddress2.LocalPath)
    Console.WriteLine("Uri {0} a UNC path", IIf(uriAddress2.IsUnc, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements
    Console.WriteLine("Uri {0} a local host", IIf(uriAddress2.IsLoopback, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements
    Console.WriteLine("Uri {0} a file", IIf(uriAddress2.IsFile, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements

End Sub 'GetParts

Uri uriAddress2 =  new Uri("file://server/filename.ext");
Console.WriteLine(uriAddress2.LocalPath);
Console.WriteLine("Uri {0} a UNC path", uriAddress2.IsUnc ? "is" : "is not");
Console.WriteLine("Uri {0} a local host", uriAddress2.IsLoopback ? "is" : "is not");
Console.WriteLine("Uri {0} a file", uriAddress2.IsFile ? "is" : "is not");

Uri^ uriAddress2 = gcnew Uri( "file://server/filename.ext" );
Console::WriteLine( uriAddress2->LocalPath );
Console::WriteLine( "Uri {0} a UNC path", uriAddress2->IsUnc ? (String^)"is" : "is not" );
Console::WriteLine( "Uri {0} a local host", uriAddress2->IsLoopback ? (String^)"is" : "is not" );
Console::WriteLine( "Uri {0} a file", uriAddress2->IsFile ? (String^)"is" : "is not" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsLoopback 属性

Uri
.
.
::
.
IsLoopback 属性
Uri 类

获取一个值，该值指示指定的 Uri 是否引用了本地主机。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property IsLoopback As Boolean
    Get
public bool IsLoopback { get; }
public:
property bool IsLoopback {
    bool get ();
}
member IsLoopback : bool

属性值

类型： System Boolean
一个 Boolean 值。如果此 Uri 引用了本地主机，则该值为 true；否则为 false。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

如果创建此实例时指定的 URI 为 127.0.0.1、loopback 或 localhost，或者如果 URI 未指定主机信息（例如，file:///c:Dir/file.txt），则 IsLoopback 返回 true。所有其他 URI 返回 false。 如果创建此实例时指定的 URI 为 127.0.0.1、loopback 或 localhost，或者如果 URI 未指定主机信息（例如，file:///c:Dir/file.txt），则 IsLoopback 返回 true。所有其他 URI 返回 false。

下面的示例创建一个 Uri 实例并确定它是否引用本地主机。

    Dim uriAddress2 As New Uri("file://server/filename.ext")
    Console.WriteLine(uriAddress2.LocalPath)
    Console.WriteLine("Uri {0} a UNC path", IIf(uriAddress2.IsUnc, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements
    Console.WriteLine("Uri {0} a local host", IIf(uriAddress2.IsLoopback, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements
    Console.WriteLine("Uri {0} a file", IIf(uriAddress2.IsFile, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements

End Sub 'GetParts

Uri uriAddress2 =  new Uri("file://server/filename.ext");
Console.WriteLine(uriAddress2.LocalPath);
Console.WriteLine("Uri {0} a UNC path", uriAddress2.IsUnc ? "is" : "is not");
Console.WriteLine("Uri {0} a local host", uriAddress2.IsLoopback ? "is" : "is not");
Console.WriteLine("Uri {0} a file", uriAddress2.IsFile ? "is" : "is not");

Uri^ uriAddress2 = gcnew Uri( "file://server/filename.ext" );
Console::WriteLine( uriAddress2->LocalPath );
Console::WriteLine( "Uri {0} a UNC path", uriAddress2->IsUnc ? (String^)"is" : "is not" );
Console::WriteLine( "Uri {0} a local host", uriAddress2->IsLoopback ? (String^)"is" : "is not" );
Console::WriteLine( "Uri {0} a file", uriAddress2->IsFile ? (String^)"is" : "is not" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.IsUnc 属性

Uri
.
.
::
.
IsUnc 属性
Uri 类

获取一个值，该值指示指定的 Uri 是否为统一命名约定 (UNC) 路径。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property IsUnc As Boolean
    Get
public bool IsUnc { get; }
public:
property bool IsUnc {
    bool get ();
}
member IsUnc : bool

属性值

类型： System Boolean
一个 Boolean 值。如果 Uri 是 UNC 路径，则该值为 true；否则为 false。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

如果指定的 Uri 实例是一个 UNC 路径（如 \\server\folder 或 file://server/folder），则 IsUnc 属性为 true。如果 URI 具有 file:// 方案并指定主机部分，则此属性始终返回 true。 如果指定的 Uri 实例是一个 UNC 路径（如 \\server\folder 或 file://server/folder），则 IsUnc 属性为 true。如果 URI 具有 file:// 方案并指定主机部分，则此属性始终返回 true。

下面的示例创建一个 Uri 实例并确定此实例是否为 UNC 路径。

    Dim uriAddress2 As New Uri("file://server/filename.ext")
    Console.WriteLine(uriAddress2.LocalPath)
    Console.WriteLine("Uri {0} a UNC path", IIf(uriAddress2.IsUnc, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements
    Console.WriteLine("Uri {0} a local host", IIf(uriAddress2.IsLoopback, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements
    Console.WriteLine("Uri {0} a file", IIf(uriAddress2.IsFile, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements

End Sub 'GetParts

Uri uriAddress2 =  new Uri("file://server/filename.ext");
Console.WriteLine(uriAddress2.LocalPath);
Console.WriteLine("Uri {0} a UNC path", uriAddress2.IsUnc ? "is" : "is not");
Console.WriteLine("Uri {0} a local host", uriAddress2.IsLoopback ? "is" : "is not");
Console.WriteLine("Uri {0} a file", uriAddress2.IsFile ? "is" : "is not");

Uri^ uriAddress2 = gcnew Uri( "file://server/filename.ext" );
Console::WriteLine( uriAddress2->LocalPath );
Console::WriteLine( "Uri {0} a UNC path", uriAddress2->IsUnc ? (String^)"is" : "is not" );
Console::WriteLine( "Uri {0} a local host", uriAddress2->IsLoopback ? (String^)"is" : "is not" );
Console::WriteLine( "Uri {0} a file", uriAddress2->IsFile ? (String^)"is" : "is not" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.LocalPath 属性

Uri
.
.
::
.
LocalPath 属性
Uri 类

获取文件名的本地操作系统表示形式。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property LocalPath As String
    Get
public string LocalPath { get; }
public:
property String^ LocalPath {
    String^ get ();
}
member LocalPath : string

属性值

类型： System String
一个 String，包含文件名的本地操作系统表示形式。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

此属性返回的值是非转义的。如果路径被识别为 Windows 文件路径，则所有正斜杠 (/) 都会由反斜杠 (\) 替换。 此属性返回的值是非转义的。如果路径被识别为 Windows 文件路径，则所有正斜杠 (/) 都会由反斜杠 (\) 替换。

对于 URI file://computer/file.ext，绝对路径为 /file.ext 而本地路径为 \\computer\file.ext。

下面的示例创建一个 Uri 实例并将本地路径输出到控制台。

    Dim uriAddress2 As New Uri("file://server/filename.ext")
    Console.WriteLine(uriAddress2.LocalPath)
    Console.WriteLine("Uri {0} a UNC path", IIf(uriAddress2.IsUnc, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements
    Console.WriteLine("Uri {0} a local host", IIf(uriAddress2.IsLoopback, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements
    Console.WriteLine("Uri {0} a file", IIf(uriAddress2.IsFile, "is", "is not")) 'TODO: For performance reasons this should be changed to nested IF statements

End Sub 'GetParts

Uri uriAddress2 =  new Uri("file://server/filename.ext");
Console.WriteLine(uriAddress2.LocalPath);
Console.WriteLine("Uri {0} a UNC path", uriAddress2.IsUnc ? "is" : "is not");
Console.WriteLine("Uri {0} a local host", uriAddress2.IsLoopback ? "is" : "is not");
Console.WriteLine("Uri {0} a file", uriAddress2.IsFile ? "is" : "is not");

Uri^ uriAddress2 = gcnew Uri( "file://server/filename.ext" );
Console::WriteLine( uriAddress2->LocalPath );
Console::WriteLine( "Uri {0} a UNC path", uriAddress2->IsUnc ? (String^)"is" : "is not" );
Console::WriteLine( "Uri {0} a local host", uriAddress2->IsLoopback ? (String^)"is" : "is not" );
Console::WriteLine( "Uri {0} a file", uriAddress2->IsFile ? (String^)"is" : "is not" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.OriginalString 属性

Uri
.
.
::
.
OriginalString 属性
Uri 类

获取传递给 Uri 构造函数的原始 URI 字符串。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property OriginalString As String
    Get
public string OriginalString { get; }
public:
property String^ OriginalString {
    String^ get ();
}
member OriginalString : string

属性值

类型： System String
包含构造此实例时指定的同一 URI，则为 String；否则，为 Empty。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

如果指定传递至构造函数的 URI 包含了前导或尾随空格，将保留这些空格。

此属性返回的值与 ToString 和 AbsoluteUri 不同。ToString 返回 URI 的规范化非转义格式。AbsoluteUri 返回 URI 的规范化转义格式。 此属性返回的值与 ToString 和 AbsoluteUri 不同。ToString 返回 URI 的规范化非转义格式。AbsoluteUri 返回 URI 的规范化转义格式。 此属性返回的值与 ToString 和 AbsoluteUri 不同。ToString 返回 URI 的规范化非转义格式。AbsoluteUri 返回 URI 的规范化转义格式。

在启用国际资源标识符 (IRI) 和国际化域名 (IDN) 支持之后，OriginalString 将返回含有 Punycode 主机名的原始非规范化字符串（如果在初始化 Uri 实例时使用了这样的一个字符串）。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。 在启用国际资源标识符 (IRI) 和国际化域名 (IDN) 支持之后，OriginalString 将返回含有 Punycode 主机名的原始非规范化字符串（如果在初始化 Uri 实例时使用了这样的一个字符串）。Punycode 名称仅包含 ASCII 字符，并且总是以 xn-- 前缀开头。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

当 Uri 对象序列化时，不会保留 OriginalString。序列化时，序列化进程将使用完全转义和规范化的 AbsoluteUri 属性。对于包含 IPv6 地址的 Uri，IPv6 地址和作用域 ID 包括在序列化的 Uri 对象中。 当 Uri 对象序列化时，不会保留 OriginalString。序列化时，序列化进程将使用完全转义和规范化的 AbsoluteUri 属性。对于包含 IPv6 地址的 Uri，IPv6 地址和作用域 ID 包括在序列化的 Uri 对象中。 当 Uri 对象序列化时，不会保留 OriginalString。序列化时，序列化进程将使用完全转义和规范化的 AbsoluteUri 属性。对于包含 IPv6 地址的 Uri，IPv6 地址和作用域 ID 包括在序列化的 Uri 对象中。

下面的示例从一个字符串创建一个新的 Uri 实例。此示例阐释了从 OriginalString 返回的值（传递到构造函数的字符串）和从 ToString 调用返回的值（字符串的规范格式）之间的差异。 下面的示例从一个字符串创建一个新的 Uri 实例。此示例阐释了从 OriginalString 返回的值（传递到构造函数的字符串）和从 ToString 调用返回的值（字符串的规范格式）之间的差异。

    ' Create a new Uri from a string address.
    Dim uriAddress As New Uri("HTTP://www.ConToso.com:80//thick%20and%20thin.htm")

    ' Write the new Uri to the console and note the difference in the two values.
    ' ToString() gives the canonical version.  OriginalString gives the orginal
    ' string that was passed to the constructor.
    ' The following outputs "http://www.contoso.com/thick and thin.htm".
    Console.WriteLine(uriAddress.ToString())

    ' The following outputs "HTTP://www.ConToso.com:80//thick%20and%20thin.htm".
    Console.WriteLine(uriAddress.OriginalString)

End Sub 'SampleOriginalString

// Create a new Uri from a string address.
Uri uriAddress = new Uri("HTTP://www.ConToso.com:80//thick%20and%20thin.htm");

// Write the new Uri to the console and note the difference in the two values.
// ToString() gives the canonical version.  OriginalString gives the orginal
// string that was passed to the constructor.

// The following outputs "http://www.contoso.com/thick and thin.htm".
Console.WriteLine(uriAddress.ToString());

// The following outputs "HTTP://www.ConToso.com:80//thick%20and%20thin.htm".
Console.WriteLine(uriAddress.OriginalString);

// Create a new Uri from a string address.
Uri^ uriAddress = gcnew Uri( "HTTP://www.ConToso.com:80//thick%20and%20thin.htm" );

// Write the new Uri to the console and note the difference in the two values.
// ToString() gives the canonical version.  OriginalString gives the orginal
// string that was passed to the constructor.
// The following outputs "http://www.contoso.com/thick and thin.htm".
Console::WriteLine( uriAddress );

// The following outputs "HTTP://www.ConToso.com:80//thick%20and%20thin.htm".
Console::WriteLine( uriAddress->OriginalString );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.PathAndQuery 属性

Uri
.
.
::
.
PathAndQuery 属性
Uri 类

获取用问号 (?) 分隔的 AbsolutePath 和 Query 属性。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property PathAndQuery As String
    Get
public string PathAndQuery { get; }
public:
property String^ PathAndQuery {
    String^ get ();
}
member PathAndQuery : string

属性值

类型： System String
一个 String，它包含用问号 (?) 分隔的 AbsolutePath 和 Query 属性。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

PathAndQuery 属性包含服务器上的绝对路径和随请求发送的查询信息。它等同于将 AbsolutePath 和 Query 属性串联在一起。 PathAndQuery 属性包含服务器上的绝对路径和随请求发送的查询信息。它等同于将 AbsolutePath 和 Query 属性串联在一起。

默认情况下，PathAndQuery 属性根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义 PathAndQuery 属性。 默认情况下，PathAndQuery 属性根据 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义 PathAndQuery 属性。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

下面的示例将 URI 的路径 (/catalog/shownew.htm) 和查询 (date= today) 信息输出到控制台。

 Dim baseUri As New Uri("http://www.contoso.com/")
 Dim myUri As New Uri(baseUri, "catalog/shownew.htm?date=today")

 Console.WriteLine(myUri.PathAndQuery)

Uri baseUri = new Uri("http://www.contoso.com/");
 Uri myUri = new Uri(baseUri, "catalog/shownew.htm?date=today");

 Console.WriteLine(myUri.PathAndQuery);

Uri^ baseUri = gcnew Uri( "http://www.contoso.com/" );
Uri^ myUri = gcnew Uri( baseUri, "catalog/shownew.htm?date=today" );

Console::WriteLine( myUri->PathAndQuery );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Port 属性

Uri
.
.
::
.
Port 属性
Uri 类

获取此 URI 的端口号。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property Port As Integer
    Get
public int Port { get; }
public:
property int Port {
    int get ();
}
member Port : int

属性值

类型： System Int32
一个包含此 URI 的端口号的 Int32 值。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

端口号定义用于联系 URI 中引用的服务器的协议端口。如果端口没有指定为 URI 的一部分，则 Port 属性返回协议的默认值。如果没有默认的端口号，则此属性返回 -1。 端口号定义用于联系 URI 中引用的服务器的协议端口。如果端口没有指定为 URI 的一部分，则 Port 属性返回协议的默认值。如果没有默认的端口号，则此属性返回 -1。 端口号定义用于联系 URI 中引用的服务器的协议端口。如果端口没有指定为 URI 的一部分，则 Port 属性返回协议的默认值。如果没有默认的端口号，则此属性返回 -1。

下面的示例将 URI 的端口号输出到控制台。在本例中，值是 HTTP 的默认端口号：端口 80。 下面的示例将 URI 的端口号输出到控制台。在本例中，值是 HTTP 的默认端口号：端口 80。

 Dim baseUri As New Uri("http://www.contoso.com/")
 Dim myUri As New Uri(baseUri, "catalog/shownew.htm?date=today")

 Console.WriteLine(myUri.Port)

Uri baseUri = new Uri("http://www.contoso.com/");
 Uri myUri = new Uri(baseUri,"catalog/shownew.htm?date=today");

 Console.WriteLine(myUri.Port);

Uri^ baseUri = gcnew Uri( "http://www.contoso.com/" );
Uri^ myUri = gcnew Uri( baseUri,"catalog/shownew.htm?date=today" );
Console::WriteLine( myUri->Port );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Query 属性

Uri
.
.
::
.
Query 属性
Uri 类

获取指定 URI 中包括的任何查询信息。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property Query As String
    Get
public string Query { get; }
public:
property String^ Query {
    String^ get ();
}
member Query : string

属性值

类型： System String
一个 String，包含指定 URI 中包括的任何查询信息。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

Query 属性包含 URI 中包括的任何查询信息。查询信息通过问号 (?) 与路径信息分隔开，而且该信息一直持续到 URI 的末尾。返回的查询信息包括前导问号。 Query 属性包含 URI 中包括的任何查询信息。查询信息通过问号 (?) 与路径信息分隔开，而且该信息一直持续到 URI 的末尾。返回的查询信息包括前导问号。 Query 属性包含 URI 中包括的任何查询信息。查询信息通过问号 (?) 与路径信息分隔开，而且该信息一直持续到 URI 的末尾。返回的查询信息包括前导问号。

查询信息默认情况下按照 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义查询信息。 查询信息默认情况下按照 RFC 2396 进行转义。如果启用了国际资源标识符 (IRIs) 或国际域名称 (IDN) 分析，则根据 RFC 3986 和 RFC 3987 转义查询信息。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

下面的示例将查询 ?date= today 输出到控制台。

        Dim baseUri As New Uri("http://www.contoso.com/")
        Dim myUri As New Uri(baseUri, "catalog/shownew.htm?date=today")

        Console.WriteLine(myUri.Query)

Uri baseUri = new Uri ("http://www.contoso.com/");
Uri myUri = new Uri (baseUri, "catalog/shownew.htm?date=today");

Console.WriteLine (myUri.Query);

Uri^ baseUri = gcnew Uri( "http://www.contoso.com/" );
Uri^ myUri = gcnew Uri( baseUri, "catalog/shownew.htm?date=today" );

Console::WriteLine( myUri->Query );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Scheme 属性

Uri
.
.
::
.
Scheme 属性
Uri 类

获取此 URI 的方案名称。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property Scheme As String
    Get
public string Scheme { get; }
public:
property String^ Scheme {
    String^ get ();
}
member Scheme : string

属性值

类型： System String
一个 String，包含此 URI 的方案（已转换为小写形式）。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

Scheme 属性返回用于初始化 Uri 实例的方案。此属性并未表示用于初始化 Uri 实例的方案被识别。 Scheme 属性返回用于初始化 Uri 实例的方案。此属性并未表示用于初始化 Uri 实例的方案被识别。

下表显示 Scheme 属性可能返回的一些值的示例。

Scheme | Description
file | 资源是本地计算机上的文件。
FTP | 通过 FTP 访问资源。
gopher | 通过 Gopher 协议访问该资源。
http | 通过 HTTP 访问该资源。
https | 通过 SSL 加密的 HTTP 访问该资源。
ldap | 通过 LDAP 协议访问资源。
mailto | 该资源是电子邮件地址，通过 SMTP 协议进行访问。
net.pipe | 通过命名管道访问资源。
net.tcp | 从 TCP 终结点访问资源。
news | 通过 NNTP 协议访问资源。
nntp | 通过 NNTP 协议访问资源。
telnet | 通过 TELNET 协议访问资源。
uuid | 通过与服务通信时使用的唯一 UUID 终结点名称访问资源。

下面的示例将 http://www.contoso.com/ URI 的方案名 (http) 输出到控制台。

 Dim baseUri As New Uri("http://www.contoso.com/")
 Dim myUri As New Uri(baseUri, "catalog/shownew.htm?date=today")

 Console.WriteLine(myUri.Scheme)

Uri baseUri = new Uri("http://www.contoso.com/");
 Uri myUri = new Uri(baseUri, "catalog/shownew.htm?date=today");

 Console.WriteLine(myUri.Scheme);

Uri^ baseUri = gcnew Uri( "http://www.contoso.com/" );
Uri^ myUri = gcnew Uri( baseUri,"catalog/shownew.htm?date=today" );
Console::WriteLine( myUri->Scheme );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.Segments 属性

Uri
.
.
::
.
Segments 属性
Uri 类

获取包含构成指定 URI 的路径段的数组。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property Segments As String()
    Get
public string[] Segments { get; }
public:
property array<String^>^ Segments {
    array<String^>^ get ();
}
member Segments : string[]

属性值

类型：
array<
System String
>
[]
()
[]

一个 String 数组，包含构成指定 URI 的路径段。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

Segments 属性返回一个字符串数组，该数组包含构成 URI 的绝对路径的“段”（子字符串）。通过分析绝对路径的第一个字符到斜杠 (/) 或路径末尾，获得第一个段。每个附加段从前一段后的第一个字符开始，到下一个斜杠或路径末尾结束。（URI 的绝对路径包含主机和端口之后、查询和片段之前的所有内容。） Segments 属性返回一个字符串数组，该数组包含构成 URI 的绝对路径的“段”（子字符串）。通过分析绝对路径的第一个字符到斜杠 (/) 或路径末尾，获得第一个段。每个附加段从前一段后的第一个字符开始，到下一个斜杠或路径末尾结束。（URI 的绝对路径包含主机和端口之后、查询和片段之前的所有内容。） Segments 属性返回一个字符串数组，该数组包含构成 URI 的绝对路径的“段”（子字符串）。通过分析绝对路径的第一个字符到斜杠 (/) 或路径末尾，获得第一个段。每个附加段从前一段后的第一个字符开始，到下一个斜杠或路径末尾结束。（URI 的绝对路径包含主机和端口之后、查询和片段之前的所有内容。） Segments 属性返回一个字符串数组，该数组包含构成 URI 的绝对路径的“段”（子字符串）。通过分析绝对路径的第一个字符到斜杠 (/) 或路径末尾，获得第一个段。每个附加段从前一段后的第一个字符开始，到下一个斜杠或路径末尾结束。（URI 的绝对路径包含主机和端口之后、查询和片段之前的所有内容。）

下面的示例显示两个 URI 的绝对路径和段。第二个示例阐释片段和查询不是绝对路径的部分，因而不是段。 下面的示例显示两个 URI 的绝对路径和段。第二个示例阐释片段和查询不是绝对路径的部分，因而不是段。

绝对 URI

http://www.contoso.com/Chapters/Chapter1/Sections/Section1.htm

绝对路径

/Chapters/Chapter1/Sections/Section1.htm

段

/Chapters/Chapter1/Sections/Section1.htm

绝对 URI

http://www.contoso.com/Chapters/Chapter1/Sections/Section1.htm#page1?answer=NO

绝对路径

/Chapters/Chapter1/Sections/Section1.htm

段

/Chapters/Chapter1/Sections/Section1.htm

请注意，由于绝对路径以“/”开始，因此第一个段就是这个斜杠而不包括其他内容。

下面的示例通过 3 个段创建一个 Uri 实例，并将这些段显示在屏幕上。

Dim uriAddress1 As New Uri("http://www.contoso.com/title/index.htm")
Console.WriteLine("The parts are {0}, {1}, {2}", uriAddress1.Segments(0), uriAddress1.Segments(1), uriAddress1.Segments(2))

Uri uriAddress1 = new Uri("http://www.contoso.com/title/index.htm");
Console.WriteLine("The parts are {0}, {1}, {2}", uriAddress1.Segments[0], uriAddress1.Segments[1], uriAddress1.Segments[2]);

Uri^ uriAddress1 = gcnew Uri( "http://www.contoso.com/title/index.htm" );
Console::WriteLine( "The parts are {0}, {1}, {2}", uriAddress1->Segments[ 0 ], uriAddress1->Segments[ 1 ], uriAddress1->Segments[ 2 ] );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UserEscaped 属性

Uri
.
.
::
.
UserEscaped 属性
Uri 类

指示 URI 字符串在创建 Uri 实例之前已被完全转义。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property UserEscaped As Boolean
    Get
public bool UserEscaped { get; }
public:
property bool UserEscaped {
    bool get ();
}
member UserEscaped : bool

属性值

类型： System Boolean
一个 Boolean 值。如果在创建 Uri 实例时 dontEscape 参数设置为 true，则该值为 true；否则为 false。

UserEscaped 属性设置为 true，以指示用于创建 Uri 实例的字符串在传递到构造函数之前已被完全转义；也就是说，构造函数调用的 dontEscape 参数设置为 true。

下面的示例创建一个 Uri 实例，并确定它是否在创建时已被完全转义。

    Dim uriAddress As New Uri("http://user:password@www.contoso.com/index.htm ")
    Console.WriteLine(uriAddress.UserInfo)
    Console.WriteLine("Fully Escaped {0}", IIf(uriAddress.UserEscaped, "yes", "no")) 'TODO: For performance reasons this should be changed to nested IF statements

End Sub 'SampleUserInfo

Uri uriAddress = new Uri ("http://user:password@www.contoso.com/index.htm ");
Console.WriteLine(uriAddress.UserInfo);
Console.WriteLine("Fully Escaped {0}", uriAddress.UserEscaped ? "yes" : "no");

Uri^ uriAddress = gcnew Uri( "http://user:password@www.contoso.com/index.htm " );
Console::WriteLine( uriAddress->UserInfo );
Console::WriteLine( "Fully Escaped {0}",
   uriAddress->UserEscaped ? (String^)"yes" : "no" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


Uri ..::.UserInfo 属性

Uri
.
.
::
.
UserInfo 属性
Uri 类

获取用户名、密码或其他与指定 URI 关联的特定于用户的信息。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property UserInfo As String
    Get
public string UserInfo { get; }
public:
property String^ UserInfo {
    String^ get ();
}
member UserInfo : string

属性值

类型： System String
一个 String，包含与该 URI 关联的用户信息。返回值不包括“@”字符，该字符是一个保留字符，用于分隔 URI 的用户信息部分。 一个 String，包含与该 URI 关联的用户信息。返回值不包括“@”字符，该字符是一个保留字符，用于分隔 URI 的用户信息部分。
异常 | 条件
InvalidOperationException | 此实例代表一个相对 URI，而此属性仅对绝对 URI 有效。

此属性的返回值的格式通常为“userName:password”。

下面的示例创建一个 Uri 实例，并将用户信息输出到控制台。

    Dim uriAddress As New Uri("http://user:password@www.contoso.com/index.htm ")
    Console.WriteLine(uriAddress.UserInfo)
    Console.WriteLine("Fully Escaped {0}", IIf(uriAddress.UserEscaped, "yes", "no")) 'TODO: For performance reasons this should be changed to nested IF statements

End Sub 'SampleUserInfo

Uri uriAddress = new Uri ("http://user:password@www.contoso.com/index.htm ");
Console.WriteLine(uriAddress.UserInfo);
Console.WriteLine("Fully Escaped {0}", uriAddress.UserEscaped ? "yes" : "no");

Uri^ uriAddress = gcnew Uri( "http://user:password@www.contoso.com/index.htm " );
Console::WriteLine( uriAddress->UserInfo );
Console::WriteLine( "Fully Escaped {0}",
   uriAddress->UserEscaped ? (String^)"yes" : "no" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Uri 类
Uri 成员
System 命名空间


UriBuilder 类

UriBuilder 类
成员

为统一资源标识符 (URI) 提供自定义构造函数，并修改 Uri 类的 URI。

命名空间： System
程序集： System（在 System.dll 中）
Public Class UriBuilder
public class UriBuilder
public ref class UriBuilder
type UriBuilder =  class end

UriBuilder 类提供了修改 Uri 实例内容的方便方法，不必为每次修改创建新的 Uri 实例。

UriBuilder 属性提供对只读 Uri 属性的读/写访问，以便可以修改它们。

System System..::.UriBuilderUriBuilder
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 成员
System 命名空间
Uri


UriBuilder 成员

UriBuilder 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriBuilder 类

为统一资源标识符 (URI) 提供自定义构造函数，并修改 Uri 类的 URI。

UriBuilder 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UriBuilder 类
System 命名空间


UriBuilder 构造函数

UriBuilder 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriBuilder 类

初始化 UriBuilder 类的新实例。

名称 说明
页首

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder 构造函数

UriBuilder 构造函数
UriBuilder 类

初始化 UriBuilder 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public UriBuilder()
public:
UriBuilder()
new : unit -> UriBuilder

默认构造函数会创建 UriBuilder 类的新实例，其属性的初始化如下。

Property | 初始值
段 | Empty
主机 | "loopback"
Password | Empty
Path | “/”
端口 | -1
查询 | Empty
Scheme | "http"
用户名 | Empty

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
UriBuilder 重载
System 命名空间


UriBuilder 构造函数 (String)

UriBuilder 构造函数 (String)
UriBuilder 类

用指定 URI 初始化 UriBuilder 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    uri As String _
)
public UriBuilder(
    string uri
)
public:
UriBuilder(
    String^ uri
)
new :
        uri:string -> UriBuilder

参数

uri
类型： System String
URI 字符串。
异常 | 条件
ArgumentNullException | uri 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
UriFormatException | uri 为零长度字符串或只包含空格。 - 或 - 分析例程检测到方案的格式无效。 - 或 - 分析器检测到不使用“文件”方案的 URI 中有多于两个的连续斜线。 - 或 - uri 不是有效 URI。

此构造函数使用下列属性初始化 UriBuilder 类的新实例：Fragment、Host、Path、Port、Query、Scheme 和 Uri，这些属性是按 uri 中的指定内容设置的。

如果 uri 不指定方案，方案默认为“http:”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
UriBuilder 重载
System 命名空间


UriBuilder 构造函数 (Uri)

UriBuilder 构造函数 (Uri)
UriBuilder 类

用指定的 Uri 实例初始化 UriBuilder 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    uri As Uri _
)
public UriBuilder(
    Uri uri
)
public:
UriBuilder(
    Uri^ uri
)
new :
        uri:Uri -> UriBuilder

参数

uri
类型： System Uri
Uri 类的实例。
异常 | 条件
NullReferenceException | uri 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此构造函数使用下列属性初始化 UriBuilder 类的新实例：Fragment、Host、Path、Port、Query、Scheme 和 Uri，这些属性是按 uri 中的指定内容设置的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
UriBuilder 重载
System 命名空间


UriBuilder 构造函数 (String, String)

UriBuilder 构造函数 (String, String)
UriBuilder 类

用指定的方案和主机初始化 UriBuilder 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    schemeName As String, _
    hostName As String _
)
public UriBuilder(
    string schemeName,
    string hostName
)
public:
UriBuilder(
    String^ schemeName,
    String^ hostName
)
new :
        schemeName:string *
        hostName:string -> UriBuilder

参数

schemeName
类型： System String
Internet 访问协议。
hostName
类型： System String
DNS 样式的域名或 IP 地址。

通过将 Scheme 属性设置为 schemeName 并将 Host 属性设置为 hostName 来初始化 UriBuilder 实例。Port 初始化为值 -1，指示应使用方案的默认端口；Path 属性设置为斜杠字符 (/)。 通过将 Scheme 属性设置为 schemeName 并将 Host 属性设置为 hostName 来初始化 UriBuilder 实例。Port 初始化为值 -1，指示应使用方案的默认端口；Path 属性设置为斜杠字符 (/)。

下面的示例创建一个包含 URI http://www.contoso.com/ 的 UriBuilder 实例。

Dim myUri As New UriBuilder("http", "www.contoso.com")

UriBuilder myUri = new UriBuilder("http","www.contoso.com");

UriBuilder^ myUri = gcnew UriBuilder(  "http", "www.contoso.com" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
UriBuilder 重载
System 命名空间


UriBuilder 构造函数 (String, String, Int32)

UriBuilder 构造函数 (String, String, Int32)
UriBuilder 类

用指定的方案、主机和端口初始化 UriBuilder 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    scheme As String, _
    host As String, _
    portNumber As Integer _
)
public UriBuilder(
    string scheme,
    string host,
    int portNumber
)
public:
UriBuilder(
    String^ scheme,
    String^ host,
    int portNumber
)
new :
        scheme:string *
        host:string *
        portNumber:int -> UriBuilder

参数

scheme
类型： System String
Internet 访问协议。
host
类型： System String
DNS 样式的域名或 IP 地址。
portNumber
类型： System Int32
服务的 IP 端口号。
异常 | 条件
ArgumentOutOfRangeException | portNumber 小于 0 或大于 65,535。

通过将 Scheme 属性设置为 schemeName、将 Host 属性设置为 hostName 和将 Port 属性设置为 portNumber 来初始化 UriBuilder 实例。Path 属性设置为斜杠字符 (/)。 通过将 Scheme 属性设置为 schemeName、将 Host 属性设置为 hostName 和将 Port 属性设置为 portNumber 来初始化 UriBuilder 实例。Path 属性设置为斜杠字符 (/)。

下面的示例创建一个包含 URI http://www.contoso.com:8080/ 的 UriBuilder 实例。

Dim myUri As New UriBuilder("http", "www.contoso.com", 8080)

UriBuilder myUri = new UriBuilder("http","www.contoso.com",8080);

UriBuilder^ myUri = gcnew UriBuilder( "http", "www.contoso.com",8080 );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
UriBuilder 重载
System 命名空间


UriBuilder 构造函数 (String, String, Int32, String)

UriBuilder 构造函数 (String, String, Int32, String)
UriBuilder 类

用指定的方案、主机、端口号和路径初始化 UriBuilder 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    scheme As String, _
    host As String, _
    port As Integer, _
    pathValue As String _
)
public UriBuilder(
    string scheme,
    string host,
    int port,
    string pathValue
)
public:
UriBuilder(
    String^ scheme,
    String^ host,
    int port,
    String^ pathValue
)
new :
        scheme:string *
        host:string *
        port:int *
        pathValue:string -> UriBuilder

参数

scheme
类型： System String
Internet 访问协议。
host
类型： System String
DNS 样式的域名或 IP 地址。
port
类型： System Int32
服务的 IP 端口号。
pathValue
类型： System String
Internet 资源的路径。
异常 | 条件
ArgumentOutOfRangeException | port 小于 0 或大于 65,535。

初始化 UriBuilder 实例，并将 Scheme 属性设置为 schemeName，将 Host 属性设置为 hostName，将 Port 属性设置为 portNumber，将 Path 属性设置为 pathValue。

下面的示例创建一个包含 URI http://www.contoso.com:8080/index.htm 的 UriBuilder 实例。

Dim myUri As New UriBuilder("http", "www.contoso.com", 8080, "index.htm")

UriBuilder myUri = new UriBuilder("http","www.contoso.com",8080,"index.htm");

UriBuilder^ myUri = gcnew UriBuilder( "http","www.contoso.com",8080,"index.htm" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
UriBuilder 重载
System 命名空间


UriBuilder 构造函数 (String, String, Int32, String, String)

UriBuilder 构造函数 (String, String, Int32, String, String)
UriBuilder 类

用指定的方案、主机、端口号、路径和查询字符串或段标识符初始化 UriBuilder 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    scheme As String, _
    host As String, _
    port As Integer, _
    path As String, _
    extraValue As String _
)
public UriBuilder(
    string scheme,
    string host,
    int port,
    string path,
    string extraValue
)
public:
UriBuilder(
    String^ scheme,
    String^ host,
    int port,
    String^ path,
    String^ extraValue
)
new :
        scheme:string *
        host:string *
        port:int *
        path:string *
        extraValue:string -> UriBuilder

参数

scheme
类型： System String
Internet 访问协议。
host
类型： System String
DNS 样式的域名或 IP 地址。
port
类型： System Int32
服务的 IP 端口号。
path
类型： System String
Internet 资源的路径。
extraValue
类型： System String
查询字符串或段标识符。
异常 | 条件
ArgumentException | extraValue 既不是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 也不是 Empty，既不是以井号 (#) 开始的有效段标识符，也不是以问号 (?) 开始的有效查询字符串。
ArgumentOutOfRangeException | port 小于 0 或大于 65,535。

初始化 UriBuilder 实例，并将 Scheme 属性设置为 schemeName，将 Host 属性设置为 hostName，将 Port 属性设置为 portNumber，将 Path 属性设置为 pathValue。如果 extraValue 以井号 (#) 开始，则 Fragment 设置为 extraValue。如果 extraValue 以问号 (?) 开始，则 Query 设置为 extraValue。 初始化 UriBuilder 实例，并将 Scheme 属性设置为 schemeName，将 Host 属性设置为 hostName，将 Port 属性设置为 portNumber，将 Path 属性设置为 pathValue。如果 extraValue 以井号 (#) 开始，则 Fragment 设置为 extraValue。如果 extraValue 以问号 (?) 开始，则 Query 设置为 extraValue。 初始化 UriBuilder 实例，并将 Scheme 属性设置为 schemeName，将 Host 属性设置为 hostName，将 Port 属性设置为 portNumber，将 Path 属性设置为 pathValue。如果 extraValue 以井号 (#) 开始，则 Fragment 设置为 extraValue。如果 extraValue 以问号 (?) 开始，则 Query 设置为 extraValue。

下面的示例创建一个包含 URI http://www.contoso.com:8080/index.htm#top 的 UriBuilder 实例。

Dim myUri As New UriBuilder("http", "www.contoso.com", 8080, "index.htm", "#top")

UriBuilder myUri = new UriBuilder("http","www.contoso.com",8080,"index.htm","#top");

UriBuilder^ myUri = gcnew UriBuilder( "http","www.contoso.com",8080,"index.htm","#top" );

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
UriBuilder 重载
System 命名空间


UriBuilder 方法

UriBuilder 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriBuilder 类

UriBuilder 类型公开以下成员。

名称 说明
页首

参考

UriBuilder 类
System 命名空间


UriBuilder ..::.Equals 方法

UriBuilder
.
.
::
.
Equals 方法
UriBuilder 类

比较现有 Uri 实例与 UriBuilder 的内容是否相等。

命名空间： System
程序集： System（在 System.dll 中）
Public Overrides Function Equals ( _
    rparam As Object _
) As Boolean
public override bool Equals(
    Object rparam
)
public:
virtual bool Equals(
    Object^ rparam
) override
abstract Equals :
        rparam:Object -> bool
override Equals :
        rparam:Object -> bool

参数

rparam
类型： System Object
要与当前实例进行比较的对象。

返回值

类型： System Boolean
如果 rparam 表示的 Uri 与此 UriBuilder 实例构造的 Uri 相同，则为 true；否则为 false。

Equals 方法将指定的 Uri 实例与 UriBuilder 实例生成的 Uri 实例进行比较。如果两者一样，则 Equals 方法返回 true。 Equals 方法将指定的 Uri 实例与 UriBuilder 实例生成的 Uri 实例进行比较。如果两者一样，则 Equals 方法返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.GetHashCode 方法

UriBuilder
.
.
::
.
GetHashCode 方法
UriBuilder 类

返回 URI 的哈希代码。

命名空间： System
程序集： System（在 System.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
为 URI 生成的哈希代码。

生成哈希代码时不包括任何段。URI http://www.contoso.com/index.htm#search 和 http://www.contoso.com/index.htm 生成相同的哈希代码。 生成哈希代码时不包括任何段。URI http://www.contoso.com/index.htm#search 和 http://www.contoso.com/index.htm 生成相同的哈希代码。

当 A.Equals(B) 为 true 时，Uri A 和 B 的哈希代码保证是相同的。

此方法实现 Object..::.GetHashCode。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.ToString 方法

UriBuilder
.
.
::
.
ToString 方法
UriBuilder 类

返回指定 UriBuilder 实例的显示字符串。

命名空间： System
程序集： System（在 System.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
包含 UriBuilder 的非转义显示字符串的字符串。

显示字符串始终包含 Port 属性值，即使它是 Scheme 的默认端口。由 Uri..::.ToString 方法返回的字符串只包含方案的非默认端口。 显示字符串始终包含 Port 属性值，即使它是 Scheme 的默认端口。由 Uri..::.ToString 方法返回的字符串只包含方案的非默认端口。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder 属性

UriBuilder 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriBuilder 类

UriBuilder 类型公开以下成员。

名称 说明
页首

参考

UriBuilder 类
System 命名空间


UriBuilder ..::.Fragment 属性

UriBuilder
.
.
::
.
Fragment 属性
UriBuilder 类

获取或设置 URI 的段部分。

命名空间： System
程序集： System（在 System.dll 中）
Public Property Fragment As String
    Get
    Set
public string Fragment { get; set; }
public:
property String^ Fragment {
    String^ get ();
    void set (String^ value);
}
member Fragment : string with get, set

属性值

类型： System String
URI 的段部分。段标识符 ("#") 添加到段的开头。 URI 的段部分。段标识符 ("#") 添加到段的开头。

Fragment 属性包含 URI 中跟在段标记 (#) 后的任何文本，包括标记本身。在设置 Fragment 属性时，段标记添加到该属性值中。注意 在 .NET Framework 的版本 1.0 和 1.1 中，将 Fragment 属性设置为任何值，包括 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、已清除的 Query 属性，以及将 Fragment 属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或设置为 String..::.Empty 已清除的属性。但是，在 2.0 版中，Fragment 和 Query 属性是独立的。 Fragment 属性包含 URI 中跟在段标记 (#) 后的任何文本，包括标记本身。在设置 Fragment 属性时，段标记添加到该属性值中。注意 在 .NET Framework 的版本 1.0 和 1.1 中，将 Fragment 属性设置为任何值，包括 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、已清除的 Query 属性，以及将 Fragment 属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或设置为 String..::.Empty 已清除的属性。但是，在 2.0 版中，Fragment 和 Query 属性是独立的。 Fragment 属性包含 URI 中跟在段标记 (#) 后的任何文本，包括标记本身。在设置 Fragment 属性时，段标记添加到该属性值中。注意 在 .NET Framework 的版本 1.0 和 1.1 中，将 Fragment 属性设置为任何值，包括 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、已清除的 Query 属性，以及将 Fragment 属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或设置为 String..::.Empty 已清除的属性。但是，在 2.0 版中，Fragment 和 Query 属性是独立的。 Fragment 属性包含 URI 中跟在段标记 (#) 后的任何文本，包括标记本身。在设置 Fragment 属性时，段标记添加到该属性值中。注意 在 .NET Framework 的版本 1.0 和 1.1 中，将 Fragment 属性设置为任何值，包括 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、已清除的 Query 属性，以及将 Fragment 属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或设置为 String..::.Empty 已清除的属性。但是，在 2.0 版中，Fragment 和 Query 属性是独立的。

注意 不要直接向此属性追加字符串。如果 Fragment 的长度大于 1，则将作为字符串来检索该属性值，移除前导井号，并追加新的查询字符串，然后使用组合字符串来设置该属性。 注意 不要直接向此属性追加字符串。如果 Fragment 的长度大于 1，则将作为字符串来检索该属性值，移除前导井号，并追加新的查询字符串，然后使用组合字符串来设置该属性。

下面的示例创建 URI“http://www.contoso.com/index.htm#main”。

Dim uBuild As New UriBuilder("http://www.contoso.com/")
uBuild.Path = "index.htm"
uBuild.Fragment = "main"

Dim myUri As Uri = uBuild.Uri

UriBuilder uBuild = new UriBuilder("http://www.contoso.com/");
uBuild.Path = "index.htm";
uBuild.Fragment = "main";

Uri myUri = uBuild.Uri;

UriBuilder^ uBuild = gcnew UriBuilder( "http://www.contoso.com/" );
uBuild->Path = "index.htm";
uBuild->Fragment = "main";
Uri^ myUri = uBuild->Uri;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.Host 属性

UriBuilder
.
.
::
.
Host 属性
UriBuilder 类

获取或设置服务器的域名系统 (DNS) 主机名或 IP 地址。

命名空间： System
程序集： System（在 System.dll 中）
Public Property Host As String
    Get
    Set
public string Host { get; set; }
public:
property String^ Host {
    String^ get ();
    void set (String^ value);
}
member Host : string with get, set

属性值

类型： System String
服务器的域名系统 (DNS) 主机名或 IP 地址。

Host 属性包含服务器的完全限定 DNS 主机名或 IP 地址。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.Password 属性

UriBuilder
.
.
::
.
Password 属性
UriBuilder 类

获取或设置与访问 URI 的用户关联的密码。

命名空间： System
程序集： System（在 System.dll 中）
Public Property Password As String
    Get
    Set
public string Password { get; set; }
public:
property String^ Password {
    String^ get ();
    void set (String^ value);
}
member Password : string with get, set

属性值

类型： System String
访问 URI 的用户的密码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.Path 属性

UriBuilder
.
.
::
.
Path 属性
UriBuilder 类

获取或设置 URI 引用的资源的路径。

命名空间： System
程序集： System（在 System.dll 中）
Public Property Path As String
    Get
    Set
public string Path { get; set; }
public:
property String^ Path {
    String^ get ();
    void set (String^ value);
}
member Path : string with get, set

属性值

类型： System String
URI 引用的资源的路径。

Path 属性包含路径信息，服务器使用该路径信息解析对信息的请求。这通常是服务器文件系统上的所需信息的路径，但也可以指示服务器提供信息所必须运行的应用程序或脚本。 Path 属性包含路径信息，服务器使用该路径信息解析对信息的请求。这通常是服务器文件系统上的所需信息的路径，但也可以指示服务器提供信息所必须运行的应用程序或脚本。

该路径信息不包括方案、主机名或 URI 的查询部分。Path 属性总是至少返回一个斜杠 (/)。 该路径信息不包括方案、主机名或 URI 的查询部分。Path 属性总是至少返回一个斜杠 (/)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.Port 属性

UriBuilder
.
.
::
.
Port 属性
UriBuilder 类

获取或设置 URI 的端口号。

命名空间： System
程序集： System（在 System.dll 中）
Public Property Port As Integer
    Get
    Set
public int Port { get; set; }
public:
property int Port {
    int get ();
    void set (int value);
}
member Port : int with get, set

属性值

类型： System Int32
URI 的端口号。
异常 | 条件
ArgumentOutOfRangeException | 不能将此端口设为小于 0 或大于 65,535 的值。

端口号定义用于联系 URI 中引用的服务器的协议端口。如果端口没有指定为 URI 的部分，则 Port 属性返回值 -1，指示服务器使用协议的默认值。 端口号定义用于联系 URI 中引用的服务器的协议端口。如果端口没有指定为 URI 的部分，则 Port 属性返回值 -1，指示服务器使用协议的默认值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.Query 属性

UriBuilder
.
.
::
.
Query 属性
UriBuilder 类

获取或设置 URI 中包括的任何查询信息。

命名空间： System
程序集： System（在 System.dll 中）
Public Property Query As String
    Get
    Set
public string Query { get; set; }
public:
property String^ Query {
    String^ get ();
    void set (String^ value);
}
member Query : string with get, set

属性值

类型： System String
URI 中包括的查询信息。

Query 属性包含 URI 中包括的任何查询信息。查询信息通过问号 (?) 与路径信息分隔开，而且该信息一直持续到 URI 的末尾。返回的查询信息包括前导问号。 Query 属性包含 URI 中包括的任何查询信息。查询信息通过问号 (?) 与路径信息分隔开，而且该信息一直持续到 URI 的末尾。返回的查询信息包括前导问号。 Query 属性包含 URI 中包括的任何查询信息。查询信息通过问号 (?) 与路径信息分隔开，而且该信息一直持续到 URI 的末尾。返回的查询信息包括前导问号。

查询信息按照 RFC 2396 转义。

注意 在 .NET Framework 的版本 1.0 和 1.1 中，将 Fragment 属性设置为任何值，包括 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、已清除的 Query 属性，以及将 Fragment 属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或设置为 String..::.Empty 已清除的属性。但是，在 2.0 版中，Fragment 和 Query 属性是独立的。 注意 在 .NET Framework 的版本 1.0 和 1.1 中，将 Fragment 属性设置为任何值，包括 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）、已清除的 Query 属性，以及将 Fragment 属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或设置为 String..::.Empty 已清除的属性。但是，在 2.0 版中，Fragment 和 Query 属性是独立的。

注意 不要直接向此属性追加字符串。如果 Query 的长度大于 1，则将作为字符串来检索该属性值，移除前导问号，并追加新的查询字符串，然后使用组合字符串来设置该属性。 注意 不要直接向此属性追加字符串。如果 Query 的长度大于 1，则将作为字符串来检索该属性值，移除前导问号，并追加新的查询字符串，然后使用组合字符串来设置该属性。

下面的示例设置 Query 属性。

            UriBuilder baseUri = new UriBuilder("http://www.contoso.com/default.aspx?Param1=7890");
            string queryToAppend = "param2=1234";

            if (baseUri.Query != null && baseUri.Query.Length > 1)
                baseUri.Query = baseUri.Query.Substring(1) + "&" + queryToAppend;
            else
                baseUri.Query = queryToAppend;

UriBuilder^ baseUri = gcnew UriBuilder
    ("http://www.contoso.com/default.aspx?Param1=7890");
String^ queryToAppend = "param2=1234";
if (baseUri->Query != nullptr && baseUri->Query->Length > 1)
{
    baseUri->Query = baseUri->Query->Substring(1)+ "&" + queryToAppend;
}

else
{
    baseUri->Query = queryToAppend;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.Scheme 属性

UriBuilder
.
.
::
.
Scheme 属性
UriBuilder 类

获取或设置 URI 的方案名称。

命名空间： System
程序集： System（在 System.dll 中）
Public Property Scheme As String
    Get
    Set
public string Scheme { get; set; }
public:
property String^ Scheme {
    String^ get ();
    void set (String^ value);
}
member Scheme : string with get, set

属性值

类型： System String
URI 的方案。
异常 | 条件
ArgumentOutOfRangeException | 不能将该方案设为无效的方案名称。

下表列出 Scheme 属性的有效方案名称。

Scheme | 说明
file | 资源是本地计算机上的文件。
FTP | 通过 FTP 访问资源。
gopher | 通过 Gopher 协议访问该资源。
http | 通过 HTTP 访问该资源。
https | 通过 SSL 加密的 HTTP 访问该资源。
mailto | 资源是电子邮件地址，通过 SMTP 访问。
news | 通过 NNTP 访问资源。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.Uri 属性

UriBuilder
.
.
::
.
Uri 属性
UriBuilder 类

获取由指定 UriBuilder 实例构造的 Uri 实例。

命名空间： System
程序集： System（在 System.dll 中）
Public ReadOnly Property Uri As Uri
    Get
public Uri Uri { get; }
public:
property Uri^ Uri {
    Uri^ get ();
}
member Uri : Uri

属性值

类型： System Uri
Uri，包含由 UriBuilder 构造的 URI。
异常 | 条件
UriFormatException | 由 UriBuilder 属性构造的 URI 无效。

Uri 属性包含由 UriBuilder 创建的 Uri。对 UriBuilder 属性所做的任何更改都会在 Uri 属性中反映出来。 Uri 属性包含由 UriBuilder 创建的 Uri。对 UriBuilder 属性所做的任何更改都会在 Uri 属性中反映出来。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriBuilder ..::.UserName 属性

UriBuilder
.
.
::
.
UserName 属性
UriBuilder 类

与访问 URI 的用户关联的用户名。

命名空间： System
程序集： System（在 System.dll 中）
Public Property UserName As String
    Get
    Set
public string UserName { get; set; }
public:
property String^ UserName {
    String^ get ();
    void set (String^ value);
}
member UserName : string with get, set

属性值

类型： System String
访问 URI 的用户的用户名。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriBuilder 类
UriBuilder 成员
System 命名空间


UriComponents 枚举

UriComponents 枚举

指定 Uri 的各个部分。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System
程序集： System（在 System.dll 中）
<FlagsAttribute> _
Public Enumeration UriComponents
[FlagsAttribute]
public enum UriComponents
[FlagsAttribute]
public enum class UriComponents
[<FlagsAttribute>]
type UriComponents
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Scheme | Scheme 数据。
由 XNA Framework 提供支持 | UserInfo | UserInfo 数据。
由 XNA Framework 提供支持 | Host | Host 数据。
由 XNA Framework 提供支持 | Port | Port 数据。
由 XNA Framework 提供支持 | Path | LocalPath 数据。
由 XNA Framework 提供支持 | Query | Query 数据。
由 XNA Framework 提供支持 | Fragment | Fragment 数据。
由 XNA Framework 提供支持 | StrongPort | Port 数据。如果在 Uri 中没有端口数据并且已为 Scheme 分配了一个默认端口，则返回该默认端口。如果没有默认端口，则返回 -1。 Port 数据。如果在 Uri 中没有端口数据并且已为 Scheme 分配了一个默认端口，则返回该默认端口。如果没有默认端口，则返回 -1。 Port 数据。如果在 Uri 中没有端口数据并且已为 Scheme 分配了一个默认端口，则返回该默认端口。如果没有默认端口，则返回 -1。
由 XNA Framework 提供支持 | KeepDelimiter | 指定应包含分隔符。
由 XNA Framework 提供支持 | SerializationInfoString | URI 序列化程序所需的完整 Uri 上下文。此上下文包括 IPv6 范围。 URI 序列化程序所需的完整 Uri 上下文。此上下文包括 IPv6 范围。
由 XNA Framework 提供支持 | AbsoluteUri | Scheme、UserInfo、Host、Port、LocalPath、Query 和 Fragment 数据。
由 XNA Framework 提供支持 | HostAndPort | Host 和 Port 数据。如果在 Uri 中没有端口数据并且已为 Scheme 分配了一个默认端口，则返回该默认端口。如果没有默认端口，则返回 -1。 Host 和 Port 数据。如果在 Uri 中没有端口数据并且已为 Scheme 分配了一个默认端口，则返回该默认端口。如果没有默认端口，则返回 -1。 Host 和 Port 数据。如果在 Uri 中没有端口数据并且已为 Scheme 分配了一个默认端口，则返回该默认端口。如果没有默认端口，则返回 -1。
由 XNA Framework 提供支持 | StrongAuthority | UserInfo、Host 和 Port 数据。如果在 Uri 中没有端口数据并且已为 Scheme 分配了一个默认端口，则返回该默认端口。如果没有默认端口，则返回 -1。 UserInfo、Host 和 Port 数据。如果在 Uri 中没有端口数据并且已为 Scheme 分配了一个默认端口，则返回该默认端口。如果没有默认端口，则返回 -1。 UserInfo、Host 和 Port 数据。如果在 Uri 中没有端口数据并且已为 Scheme 分配了一个默认端口，则返回该默认端口。如果没有默认端口，则返回 -1。
由 XNA Framework 提供支持 | SchemeAndServer | Scheme、Host 和 Port 数据。
由 XNA Framework 提供支持 | HttpRequestUrl | Scheme、Host、Port、LocalPath 和 Query 数据。
由 XNA Framework 提供支持 | PathAndQuery | LocalPath 和 Query 数据。另外，请参见 PathAndQuery。 LocalPath 和 Query 数据。另外，请参见 PathAndQuery。

此枚举用于标识 Uri 的各个部分。此枚举与 Uri..::.GetComponents 方法一起使用。 此枚举用于标识 Uri 的各个部分。此枚举与 Uri..::.GetComponents 方法一起使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


UriFormat 枚举

UriFormat 枚举

控制 URI 信息的转义方式。

命名空间： System
程序集： System（在 System.dll 中）
Public Enumeration UriFormat
public enum UriFormat
public enum class UriFormat
type UriFormat
 | 成员名称 | 说明
由 XNA Framework 提供支持 | UriEscaped | 根据 RFC 2396 中的规则执行转义。
由 XNA Framework 提供支持 | Unescaped | 未执行任何转义。
由 XNA Framework 提供支持 | SafeUnescaped | 在请求的 URI 组成部分中具有保留意义的字符将仍然进行转义。所有其他字符不进行转义。请参见备注。 在请求的 URI 组成部分中具有保留意义的字符将仍然进行转义。所有其他字符不进行转义。请参见备注。 在请求的 URI 组成部分中具有保留意义的字符将仍然进行转义。所有其他字符不进行转义。请参见备注。

此枚举由 GetComponents 方法使用，用于指定在返回的 URI 中字符转义的级别。

RFC 2396 定义了 URI 的标准转义，此定义可从 http://rfc-editor.org 网站上获得。

如果下面的字符在所请求的 UriComponents 中具有保留含义，则 SafeUnescaped 将保留这些字符的转义：“%”、“#”、“?”、“/”、“\”和“@”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


UriFormatException 类

UriFormatException 类
成员

当检测到无效的统一资源标识符 (URI) 时引发的异常。

命名空间： System
程序集： System（在 System.dll 中）
<SerializableAttribute> _
Public Class UriFormatException _
    Inherits FormatException _
    Implements ISerializable
[SerializableAttribute]
public class UriFormatException : FormatException,
    ISerializable
[SerializableAttribute]
public ref class UriFormatException : public FormatException,
    ISerializable
[<SerializableAttribute>]
type UriFormatException =
    class
        inherit FormatException
        interface ISerializable
    end

如果未能正确分析提供的 URI，则 URI 类构造函数将引发 UriFormatException。有效 URI 的格式在 RFC 2396 中定义。 如果未能正确分析提供的 URI，则 URI 类构造函数将引发 UriFormatException。有效 URI 的格式在 RFC 2396 中定义。

Message 属性的文本指示引发该异常的原因。

System System..::.UriFormatExceptionUriFormatException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UriFormatException 成员
System 命名空间


UriFormatException 成员

UriFormatException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriFormatException 类

当检测到无效的统一资源标识符 (URI) 时引发的异常。

UriFormatException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UriFormatException 类
System 命名空间


UriFormatException 构造函数

UriFormatException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriFormatException 类

初始化 UriFormatException 类的新实例。

名称 说明
页首

参考

UriFormatException 类
UriFormatException 成员
System 命名空间


UriFormatException 构造函数

UriFormatException 构造函数
UriFormatException 类

初始化 UriFormatException 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public UriFormatException()
public:
UriFormatException()
new : unit -> UriFormatException

默认构造函数初始化 UriFormatException 类的新实例，将所有字段都设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UriFormatException 类
UriFormatException 成员
UriFormatException 重载
System 命名空间


UriFormatException 构造函数 (String)

UriFormatException 构造函数 (String)
UriFormatException 类

用指定的消息初始化 UriFormatException 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    textString As String _
)
public UriFormatException(
    string textString
)
public:
UriFormatException(
    String^ textString
)
new :
        textString:string -> UriFormatException

参数

textString
类型： System String
错误消息字符串。

UriFormatException 构造函数初始化 UriFormatException 实例，将 Message 属性设置为 textString 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UriFormatException 类
UriFormatException 成员
UriFormatException 重载
System 命名空间


UriFormatException 构造函数 (SerializationInfo, StreamingContext)

UriFormatException 构造函数 (SerializationInfo, StreamingContext)
UriFormatException 类

根据指定的 SerializationInfo 和 StreamingContext 实例初始化 UriFormatException 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Protected Sub New ( _
    serializationInfo As SerializationInfo, _
    streamingContext As StreamingContext _
)
protected UriFormatException(
    SerializationInfo serializationInfo,
    StreamingContext streamingContext
)
protected:
UriFormatException(
    SerializationInfo^ serializationInfo,
    StreamingContext streamingContext
)
new :
        serializationInfo:SerializationInfo *
        streamingContext:StreamingContext -> UriFormatException

参数

serializationInfo
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它包含序列化新的 UriFormatException 所需的信息。
streamingContext
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含与新的 UriFormatException 关联的序列化流的源。

此构造函数实现 UriFormatException 类的 ISerializable 接口。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriFormatException 类
UriFormatException 成员
UriFormatException 重载
System 命名空间
ISerializable


UriFormatException 构造函数 (String, Exception)

UriFormatException 构造函数 (String, Exception)
UriFormatException 类

使用指定错误消息和对作为此异常原因的内部异常的引用来初始化 UriFormatException 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New ( _
    textString As String, _
    e As Exception _
)
public UriFormatException(
    string textString,
    Exception e
)
public:
UriFormatException(
    String^ textString,
    Exception^ e
)
new :
        textString:string *
        e:Exception -> UriFormatException

参数

textString
类型： System String
描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
e
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 由上一异常直接引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 UriFormatException 实例的初始属性值。

Property | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 在 message 中指定的错误信息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

UriFormatException 类
UriFormatException 成员
UriFormatException 重载
System 命名空间

其他资源

处理和引发异常


UriFormatException 方法

UriFormatException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriFormatException 类

UriFormatException 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

UriFormatException 类
System 命名空间


UriFormatException ..::.ISerializable ..::.GetObjectData 方法

UriFormatException
.
.
::
.
ISerializable
.
.
::
.
GetObjectData 方法
UriFormatException 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

用序列化 UriFormatException 所需的数据来填充 SerializationInfo 实例。

命名空间： System
程序集： System（在 System.dll 中）
Private Sub GetObjectData ( _
    serializationInfo As SerializationInfo, _
    streamingContext As StreamingContext _
) Implements ISerializable.GetObjectData
void ISerializable.GetObjectData(
    SerializationInfo serializationInfo,
    StreamingContext streamingContext
)
private:
virtual void GetObjectData(
    SerializationInfo^ serializationInfo,
    StreamingContext streamingContext
) sealed = ISerializable::GetObjectData
private abstract GetObjectData :
        serializationInfo:SerializationInfo *
        streamingContext:StreamingContext -> unit
private override GetObjectData :
        serializationInfo:SerializationInfo *
        streamingContext:StreamingContext -> unit

参数

serializationInfo
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它将保留 UriFormatException 的序列化的数据。
streamingContext
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含与新的 UriFormatException 关联的序列化流的目标。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriFormatException 类
UriFormatException 成员
System 命名空间
ISerializable


UriFormatException 属性

UriFormatException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriFormatException 类

UriFormatException 类型公开以下成员。

名称 说明
页首

参考

UriFormatException 类
System 命名空间


UriFormatException 事件

UriFormatException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriFormatException 类

UriFormatException 类型公开以下成员。

名称 说明
页首

参考

UriFormatException 类
System 命名空间


UriHostNameType 枚举

UriHostNameType 枚举

为 Uri..::.CheckHostName 方法定义主机名类型。

命名空间： System
程序集： System（在 System.dll 中）
Public Enumeration UriHostNameType
public enum UriHostNameType
public enum class UriHostNameType
type UriHostNameType
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Unknown | 不提供主机名的类型。
由 XNA Framework 提供支持 | Basic | 设置主机，但无法确定类型。
由 XNA Framework 提供支持 | Dns | 主机名是域名系统 (DNS) 样式主机名。
由 XNA Framework 提供支持 | IPv4 | 主机名是网际协议 (IP) 第 4 版主机地址。
由 XNA Framework 提供支持 | IPv6 | 主机名是网际协议 (IP) 第 6 版主机地址。

UriHostNameType 枚举定义 Uri..::.CheckHostName 方法可以返回的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


UriIdnScope 枚举

UriIdnScope 枚举

提供 System.Configuration 命名空间中的 System.Configuration..::.IdnElement 的配置设置的可能值。

命名空间： System
程序集： System（在 System.dll 中）
Public Enumeration UriIdnScope
public enum UriIdnScope
public enum class UriIdnScope
type UriIdnScope
成员名称 | 说明
None | 此值不会将任何 Unicode 域名转换为使用 Punycode。这是与 .NET Framework 2.0 行为一致的默认值。 此值不会将任何 Unicode 域名转换为使用 Punycode。这是与 .NET Framework 2.0 行为一致的默认值。
AllExceptIntranet | 此值会将所有外部 Unicode 域名转换为使用 Punycode 等效项（IDN 名称）。在这种情况下，若要处理本地 Intranet 上的国际化名称，用于 Intranet 的 DNS 服务器应该支持 Unicode 名称。 此值会将所有外部 Unicode 域名转换为使用 Punycode 等效项（IDN 名称）。在这种情况下，若要处理本地 Intranet 上的国际化名称，用于 Intranet 的 DNS 服务器应该支持 Unicode 名称。
All | 此值会将所有 Unicode 域名转换为它们的 Punycode 等效项（IDN 名称）。

现有的 Uri 类已经进行了扩展，以便提供基于 RFC 3987 的国际资源标识符 (IRI) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。 现有的 Uri 类已经进行了扩展，以便提供基于 RFC 3987 的国际资源标识符 (IRI) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。 现有的 Uri 类已经进行了扩展，以便提供基于 RFC 3987 的国际资源标识符 (IRI) 支持。除非特地启用了 IRI，否则当前用户不会看到 .NET Framework 2.0 的行为发生任何变化。这确保了与以前版本的 .NET Framework 之间保持应用程序兼容性。

国际化域名 (IDN) 特性仅控制 IDN 处理。默认情况下总是执行所有其他 IRI 处理（例如，字符规范化）。 国际化域名 (IDN) 特性仅控制 IDN 处理。默认情况下总是执行所有其他 IRI 处理（例如，字符规范化）。

一旦构造了第一个 Uri 类后，即会读取 System.Configuration..::.IdnElement 的配置设置。之后进行的配置设置更改将被忽略。 一旦构造了第一个 Uri 类后，即会读取 System.Configuration..::.IdnElement 的配置设置。之后进行的配置设置更改将被忽略。

有关 IRI 支持的更多信息，请参见 Uri 类的“备注”部分。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

System 命名空间
System.Configuration IdnElement
System Uri


UriKind 枚举

UriKind 枚举

定义 Uri..::.IsWellFormedUriString(String, UriKind) 的 Uri 的类型和几种 Uri..::.Uri 方法。

命名空间： System
程序集： System（在 System.dll 中）
Public Enumeration UriKind
public enum UriKind
public enum class UriKind
type UriKind
 | 成员名称 | 说明
由 XNA Framework 提供支持 | RelativeOrAbsolute | 此 Uri 的类型不确定。
由 XNA Framework 提供支持 | Absolute | 此 Uri 是绝对 Uri。
由 XNA Framework 提供支持 | Relative | 此 Uri 是相对 Uri。

绝对 URI 的特点是完整地引用资源（例如：http://www.contoso.com/index.html），而相对 Uri 取决于前面定义的基 URI（例如：/index.html）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


UriParser 类

UriParser 类
成员

分析新的 URI 方案。这是一个抽象类。 分析新的 URI 方案。这是一个抽象类。

命名空间： System
程序集： System（在 System.dll 中）
Public MustInherit Class UriParser
public abstract class UriParser
public ref class UriParser abstract
[<AbstractClassAttribute>]
type UriParser =  class end

UriParser 类使您可以为新的 URI 方案创建分析器。您可以完全从头编写这些分析器，也可以从已知方案（HTTP、FTP、和其他基于网络协议的方案）中派生出这些分析器。如果您要创建全新的分析器，请从 GenericUriParser 继承。如果要创建扩展已知 URI 方案的分析器，请从 FtpStyleUriParser、HttpStyleUriParser、FileStyleUriParser、GopherStyleUriParser 或 LdapStyleUriParser 继承。 UriParser 类使您可以为新的 URI 方案创建分析器。您可以完全从头编写这些分析器，也可以从已知方案（HTTP、FTP、和其他基于网络协议的方案）中派生出这些分析器。如果您要创建全新的分析器，请从 GenericUriParser 继承。如果要创建扩展已知 URI 方案的分析器，请从 FtpStyleUriParser、HttpStyleUriParser、FileStyleUriParser、GopherStyleUriParser 或 LdapStyleUriParser 继承。 UriParser 类使您可以为新的 URI 方案创建分析器。您可以完全从头编写这些分析器，也可以从已知方案（HTTP、FTP、和其他基于网络协议的方案）中派生出这些分析器。如果您要创建全新的分析器，请从 GenericUriParser 继承。如果要创建扩展已知 URI 方案的分析器，请从 FtpStyleUriParser、HttpStyleUriParser、FileStyleUriParser、GopherStyleUriParser 或 LdapStyleUriParser 继承。 UriParser 类使您可以为新的 URI 方案创建分析器。您可以完全从头编写这些分析器，也可以从已知方案（HTTP、FTP、和其他基于网络协议的方案）中派生出这些分析器。如果您要创建全新的分析器，请从 GenericUriParser 继承。如果要创建扩展已知 URI 方案的分析器，请从 FtpStyleUriParser、HttpStyleUriParser、FileStyleUriParser、GopherStyleUriParser 或 LdapStyleUriParser 继承。

Microsoft 强烈建议您使用 .NET Framework 附带的分析器。构建自己的分析器会增加应用程序的复杂程度，其执行效果也不如附带的分析器。 Microsoft 强烈建议您使用 .NET Framework 附带的分析器。构建自己的分析器会增加应用程序的复杂程度，其执行效果也不如附带的分析器。

System System..::.UriParserUriParser

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 成员
System 命名空间


UriParser 成员

UriParser 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriParser 类

分析新的 URI 方案。这是一个抽象类。 分析新的 URI 方案。这是一个抽象类。

UriParser 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

UriParser 类
System 命名空间


UriParser 构造函数

UriParser 构造函数
UriParser 类

构建默认的 URI 分析器。

命名空间： System
程序集： System（在 System.dll 中）
Protected Sub New
protected UriParser()
protected:
UriParser()
new : unit -> UriParser

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间


UriParser 方法

UriParser 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriParser 类

UriParser 类型公开以下成员。

名称 说明
页首

参考

UriParser 类
System 命名空间


UriParser ..::.GetComponents 方法

UriParser
.
.
::
.
GetComponents 方法
UriParser 类

从 URI 获取各个组成部分。

命名空间： System
程序集： System（在 System.dll 中）
Protected Overridable Function GetComponents ( _
    uri As Uri, _
    components As UriComponents, _
    format As UriFormat _
) As String
protected virtual string GetComponents(
    Uri uri,
    UriComponents components,
    UriFormat format
)
protected:
virtual String^ GetComponents(
    Uri^ uri,
    UriComponents components,
    UriFormat format
)
abstract GetComponents :
        uri:Uri *
        components:UriComponents *
        format:UriFormat -> string
override GetComponents :
        uri:Uri *
        components:UriComponents *
        format:UriFormat -> string

参数

uri
类型： System Uri
要分析的 URI。
components
类型： System UriComponents
要从 uri 中检索的 UriComponents。
format
类型： System UriFormat
UriFormat 值中的一个，它控制如何转义特殊字符。

返回值

类型： System String
包含组成部分的字符串。
异常 | 条件
ArgumentOutOfRangeException | uriFormat 无效。 - 或 - uriComponents 不是有效 UriComponents 值的组合。
InvalidOperationException | uri 需要用户驱动的语法分析 - 或 - uri 不是绝对 URI。相对 URI 不能和此方法一起使用。 uri 不是绝对 URI。相对 URI 不能和此方法一起使用。

使用 GetComponents 方法可确定 URI 的各个部分的值，如 Scheme、Host 或 Port。

这些组成部分按照各自在 URI 中显示的顺序返回。例如，如果指定 Scheme，它将第一个出现。 这些组成部分按照各自在 URI 中显示的顺序返回。例如，如果指定 Scheme，它将第一个出现。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间
System UriComponents
UriComponents Host
UriComponents Port
UriComponents Scheme
System UriFormat
GetComponents


UriParser ..::.InitializeAndValidate 方法

UriParser
.
.
::
.
InitializeAndValidate 方法
UriParser 类

初始化分析器的状态并验证 URI。

命名空间： System
程序集： System（在 System.dll 中）
Protected Overridable Sub InitializeAndValidate ( _
    uri As Uri, _
    <OutAttribute> ByRef parsingError As UriFormatException _
)
protected virtual void InitializeAndValidate(
    Uri uri,
    out UriFormatException parsingError
)
protected:
virtual void InitializeAndValidate(
    Uri^ uri,
    [OutAttribute] UriFormatException^% parsingError
)
abstract InitializeAndValidate :
        uri:Uri *
        parsingError:UriFormatException byref -> unit
override InitializeAndValidate :
        uri:Uri *
        parsingError:UriFormatException byref -> unit

参数

uri
类型： System Uri
要验证的 T:System.Uri。
parsingError
类型： System UriFormatException %
验证错误（如果有）。

每次实例化 Uri 时都会调用 InitializeAndValidate 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间


UriParser ..::.IsBaseOf 方法

UriParser
.
.
::
.
IsBaseOf 方法
UriParser 类

确定 baseUri 是否为 relativeUri 的基 URI。

命名空间： System
程序集： System（在 System.dll 中）
Protected Overridable Function IsBaseOf ( _
    baseUri As Uri, _
    relativeUri As Uri _
) As Boolean
protected virtual bool IsBaseOf(
    Uri baseUri,
    Uri relativeUri
)
protected:
virtual bool IsBaseOf(
    Uri^ baseUri,
    Uri^ relativeUri
)
abstract IsBaseOf :
        baseUri:Uri *
        relativeUri:Uri -> bool
override IsBaseOf :
        baseUri:Uri *
        relativeUri:Uri -> bool

参数

baseUri
类型： System Uri
基 URI。
relativeUri
类型： System Uri
要测试的 URI。

返回值

类型： System Boolean
如果 baseUri 是 relativeUri 的基 URI，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间


UriParser ..::.IsKnownScheme 方法

UriParser
.
.
::
.
IsKnownScheme 方法
UriParser 类

指示某个方案的分析器是否已注册。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Function IsKnownScheme ( _
    schemeName As String _
) As Boolean
public static bool IsKnownScheme(
    string schemeName
)
public:
static bool IsKnownScheme(
    String^ schemeName
)
static member IsKnownScheme :
        schemeName:string -> bool

参数

schemeName
类型： System String
要检查的方案名称。

返回值

类型： System Boolean
如果已注册 schemeName，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | schemeName 参数为 null。
ArgumentOutOfRangeException | schemeName 参数无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间


UriParser ..::.IsWellFormedOriginalString 方法

UriParser
.
.
::
.
IsWellFormedOriginalString 方法
UriParser 类

指示 URI 是否是格式良好的。

命名空间： System
程序集： System（在 System.dll 中）
Protected Overridable Function IsWellFormedOriginalString ( _
    uri As Uri _
) As Boolean
protected virtual bool IsWellFormedOriginalString(
    Uri uri
)
protected:
virtual bool IsWellFormedOriginalString(
    Uri^ uri
)
abstract IsWellFormedOriginalString :
        uri:Uri -> bool
override IsWellFormedOriginalString :
        uri:Uri -> bool

参数

uri
类型： System Uri
要检查的 URI。

返回值

类型： System Boolean
如果 uri 格式良好，则为 true；否则为 false。

IsWellFormedOriginalString 方法在下列情况下将返回 false：

  • 此字符串未根据 RFC 2396 正确转义。

  • 此字符串表示引用隐式文件 URI 的绝对 URI。

  • 此字符串表示绝对 URI，它在路径部分前缺少一个正斜杠。

  • 此字符串包含非转义反斜杠，即使这些反斜杠会被视为正斜杠。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间


UriParser ..::.OnNewUri 方法

UriParser
.
.
::
.
OnNewUri 方法
UriParser 类

由 Uri 构造函数调用以获取一个 UriParser 实例。

命名空间： System
程序集： System（在 System.dll 中）
Protected Overridable Function OnNewUri As UriParser
protected virtual UriParser OnNewUri()
protected:
virtual UriParser^ OnNewUri()
abstract OnNewUri : unit -> UriParser
override OnNewUri : unit -> UriParser

返回值

类型： System UriParser
用于构建的 Uri 的一个 UriParser。

默认实现返回相同的 UriParser 实例。在多线程环境中操作时，您可能需要重写此方法并为每个调用返回不同的 UriParser。 默认实现返回相同的 UriParser 实例。在多线程环境中操作时，您可能需要重写此方法并为每个调用返回不同的 UriParser。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间


UriParser ..::.OnRegister 方法

UriParser
.
.
::
.
OnRegister 方法
UriParser 类

在注册 UriParser 方法时由 Framework 调用。

命名空间： System
程序集： System（在 System.dll 中）
Protected Overridable Sub OnRegister ( _
    schemeName As String, _
    defaultPort As Integer _
)
protected virtual void OnRegister(
    string schemeName,
    int defaultPort
)
protected:
virtual void OnRegister(
    String^ schemeName,
    int defaultPort
)
abstract OnRegister :
        schemeName:string *
        defaultPort:int -> unit
override OnRegister :
        schemeName:string *
        defaultPort:int -> unit

参数

schemeName
类型： System String
与此 UriParser 关联的方案。
defaultPort
类型： System Int32
方案的端口号。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间


UriParser ..::.Register 方法

UriParser
.
.
::
.
Register 方法
UriParser 类

将方案和端口号与 UriParser 关联。

命名空间： System
程序集： System（在 System.dll 中）
Public Shared Sub Register ( _
    uriParser As UriParser, _
    schemeName As String, _
    defaultPort As Integer _
)
public static void Register(
    UriParser uriParser,
    string schemeName,
    int defaultPort
)
public:
static void Register(
    UriParser^ uriParser,
    String^ schemeName,
    int defaultPort
)
static member Register :
        uriParser:UriParser *
        schemeName:string *
        defaultPort:int -> unit

参数

uriParser
类型： System UriParser
要注册的 URI 分析器。
schemeName
类型： System String
与此分析器关联的方案的名称。
defaultPort
类型： System Int32
指定方案的默认端口号。
异常 | 条件
ArgumentNullException | uriParser 参数为 null - 或 - schemeName 参数为 null。
ArgumentOutOfRangeException | schemeName 参数无效 - 或 - defaultPort 参数无效。defaultPort 参数小于 -1 或大于 65,534。 defaultPort 参数无效。defaultPort 参数小于 -1 或大于 65,534。

如果 defaultPort 参数设置为 -1，Register 方法不会为该端口号注册默认值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间


UriParser ..::.Resolve 方法

UriParser
.
.
::
.
Resolve 方法
UriParser 类

由 Uri 构造函数和 Uri..::.TryCreate()()() 调用以解析相对 URI。

命名空间： System
程序集： System（在 System.dll 中）
Protected Overridable Function Resolve ( _
    baseUri As Uri, _
    relativeUri As Uri, _
    <OutAttribute> ByRef parsingError As UriFormatException _
) As String
protected virtual string Resolve(
    Uri baseUri,
    Uri relativeUri,
    out UriFormatException parsingError
)
protected:
virtual String^ Resolve(
    Uri^ baseUri,
    Uri^ relativeUri,
    [OutAttribute] UriFormatException^% parsingError
)
abstract Resolve :
        baseUri:Uri *
        relativeUri:Uri *
        parsingError:UriFormatException byref -> string
override Resolve :
        baseUri:Uri *
        relativeUri:Uri *
        parsingError:UriFormatException byref -> string

参数

baseUri
类型： System Uri
一个基 URI。
relativeUri
类型： System Uri
一个相对 URI。
parsingError
类型： System UriFormatException %
解析过程中的错误（如果有）。

返回值

类型： System String
经过解析的相对 Uri 的字符串。
异常 | 条件
ArgumentOutOfRangeException | baseUri 参数不是绝对 Uri - 或 - baseUri 参数需要用户驱动的分析。

Uri 构造函数和 Uri..::.TryCreate()()() 使用 Resolve 根据 baseUri 和 relativeUri 构建 URI。

如果发生语法分析错误，则经过解析的相对 Uri 的返回字符串为 null。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriParser 类
UriParser 成员
System 命名空间


UriPartial 枚举

UriPartial 枚举

为 Uri..::.GetLeftPart 方法定义 URI 的各部分。

命名空间： System
程序集： System（在 System.dll 中）
Public Enumeration UriPartial
public enum UriPartial
public enum class UriPartial
type UriPartial
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Scheme | URI 的方案段。
由 XNA Framework 提供支持 | Authority | URI 的方案段与颁发机构段。
由 XNA Framework 提供支持 | Path | URI 的方案段、颁发机构段与路径段。
由 XNA Framework 提供支持 | Query | URI 的方案段、证书颁发机构段、路径段与查询段。

UriPartial 枚举定义可传递给 Uri..::.GetLeftPart 方法的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System 命名空间


UriTemplate 类

UriTemplate 类
成员

一个表示统一资源标识符 (URI) 模板的类。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Class UriTemplate
public class UriTemplate
public ref class UriTemplate
type UriTemplate =  class end

使用 URI 模板，可以定义一组结构相似的 URI。模板由两部分组成，即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值（书写在大括号 [{ }] 内，且被限制为仅与一个段的内容匹配）或必须出现在路径末端的通配符（书写为星号 [*]，与“路径的其余部分”匹配）。查询表达式可以完全省略。如果出现表达式，则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2)，也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串： 使用 URI 模板，可以定义一组结构相似的 URI。模板由两部分组成，即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值（书写在大括号 [{ }] 内，且被限制为仅与一个段的内容匹配）或必须出现在路径末端的通配符（书写为星号 [*]，与“路径的其余部分”匹配）。查询表达式可以完全省略。如果出现表达式，则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2)，也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串： 使用 URI 模板，可以定义一组结构相似的 URI。模板由两部分组成，即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值（书写在大括号 [{ }] 内，且被限制为仅与一个段的内容匹配）或必须出现在路径末端的通配符（书写为星号 [*]，与“路径的其余部分”匹配）。查询表达式可以完全省略。如果出现表达式，则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2)，也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串： 使用 URI 模板，可以定义一组结构相似的 URI。模板由两部分组成，即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值（书写在大括号 [{ }] 内，且被限制为仅与一个段的内容匹配）或必须出现在路径末端的通配符（书写为星号 [*]，与“路径的其余部分”匹配）。查询表达式可以完全省略。如果出现表达式，则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2)，也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串： 使用 URI 模板，可以定义一组结构相似的 URI。模板由两部分组成，即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值（书写在大括号 [{ }] 内，且被限制为仅与一个段的内容匹配）或必须出现在路径末端的通配符（书写为星号 [*]，与“路径的其余部分”匹配）。查询表达式可以完全省略。如果出现表达式，则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2)，也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串： 使用 URI 模板，可以定义一组结构相似的 URI。模板由两部分组成，即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值（书写在大括号 [{ }] 内，且被限制为仅与一个段的内容匹配）或必须出现在路径末端的通配符（书写为星号 [*]，与“路径的其余部分”匹配）。查询表达式可以完全省略。如果出现表达式，则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2)，也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串： 使用 URI 模板，可以定义一组结构相似的 URI。模板由两部分组成，即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值（书写在大括号 [{ }] 内，且被限制为仅与一个段的内容匹配）或必须出现在路径末端的通配符（书写为星号 [*]，与“路径的其余部分”匹配）。查询表达式可以完全省略。如果出现表达式，则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2)，也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串： 使用 URI 模板，可以定义一组结构相似的 URI。模板由两部分组成，即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值（书写在大括号 [{ }] 内，且被限制为仅与一个段的内容匹配）或必须出现在路径末端的通配符（书写为星号 [*]，与“路径的其余部分”匹配）。查询表达式可以完全省略。如果出现表达式，则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2)，也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串： 使用 URI 模板，可以定义一组结构相似的 URI。模板由两部分组成，即路径和查询。路径由一系列由斜杠 (/) 分隔的段组成。每个段都可以具有文本值、变量值（书写在大括号 [{ }] 内，且被限制为仅与一个段的内容匹配）或必须出现在路径末端的通配符（书写为星号 [*]，与“路径的其余部分”匹配）。查询表达式可以完全省略。如果出现表达式，则它指定一组无序的名称/值对。查询表达式的元素可以是文本对 (?x=2)，也可以是变量对 (?x={val})。不允许使用不成对的值。下面的示例演示有效的模板字符串：

  • "weather/WA/Seattle"

  • "weather/{state}/{city}"

  • "weather/*"

  • "weather/{state}/{city}?forecast=today

  • "weather/{state}/{city}?forecast={day}

前面的 URI 模板可用于组织天气预报。括在大括号中的段都是变量，其他都是文本。您可以使用实际的值替换变量，将 UriTemplate 实例转换成 Uri。例如，使用模板“weather/{state}/{city}”，在变量“{state}”和“{city}”中输入值，便会得到“weather/WA/Seattle”。您可以调用 Match(Uri, Uri) 来测试给定的候选 URI 是否与给定的 URI 模板匹配。也可以调用 BindByName(Uri, NameValueCollection) 或 BindByPosition(Uri, array<String>[]()[]) 来使用 UriTemplate 实例根据一组变量值创建 Uri。 前面的 URI 模板可用于组织天气预报。括在大括号中的段都是变量，其他都是文本。您可以使用实际的值替换变量，将 UriTemplate 实例转换成 Uri。例如，使用模板“weather/{state}/{city}”，在变量“{state}”和“{city}”中输入值，便会得到“weather/WA/Seattle”。您可以调用 Match(Uri, Uri) 来测试给定的候选 URI 是否与给定的 URI 模板匹配。也可以调用 BindByName(Uri, NameValueCollection) 或 BindByPosition(Uri, array<String>[]()[]) 来使用 UriTemplate 实例根据一组变量值创建 Uri。 前面的 URI 模板可用于组织天气预报。括在大括号中的段都是变量，其他都是文本。您可以使用实际的值替换变量，将 UriTemplate 实例转换成 Uri。例如，使用模板“weather/{state}/{city}”，在变量“{state}”和“{city}”中输入值，便会得到“weather/WA/Seattle”。您可以调用 Match(Uri, Uri) 来测试给定的候选 URI 是否与给定的 URI 模板匹配。也可以调用 BindByName(Uri, NameValueCollection) 或 BindByPosition(Uri, array<String>[]()[]) 来使用 UriTemplate 实例根据一组变量值创建 Uri。 前面的 URI 模板可用于组织天气预报。括在大括号中的段都是变量，其他都是文本。您可以使用实际的值替换变量，将 UriTemplate 实例转换成 Uri。例如，使用模板“weather/{state}/{city}”，在变量“{state}”和“{city}”中输入值，便会得到“weather/WA/Seattle”。您可以调用 Match(Uri, Uri) 来测试给定的候选 URI 是否与给定的 URI 模板匹配。也可以调用 BindByName(Uri, NameValueCollection) 或 BindByPosition(Uri, array<String>[]()[]) 来使用 UriTemplate 实例根据一组变量值创建 Uri。 前面的 URI 模板可用于组织天气预报。括在大括号中的段都是变量，其他都是文本。您可以使用实际的值替换变量，将 UriTemplate 实例转换成 Uri。例如，使用模板“weather/{state}/{city}”，在变量“{state}”和“{city}”中输入值，便会得到“weather/WA/Seattle”。您可以调用 Match(Uri, Uri) 来测试给定的候选 URI 是否与给定的 URI 模板匹配。也可以调用 BindByName(Uri, NameValueCollection) 或 BindByPosition(Uri, array<String>[]()[]) 来使用 UriTemplate 实例根据一组变量值创建 Uri。 前面的 URI 模板可用于组织天气预报。括在大括号中的段都是变量，其他都是文本。您可以使用实际的值替换变量，将 UriTemplate 实例转换成 Uri。例如，使用模板“weather/{state}/{city}”，在变量“{state}”和“{city}”中输入值，便会得到“weather/WA/Seattle”。您可以调用 Match(Uri, Uri) 来测试给定的候选 URI 是否与给定的 URI 模板匹配。也可以调用 BindByName(Uri, NameValueCollection) 或 BindByPosition(Uri, array<String>[]()[]) 来使用 UriTemplate 实例根据一组变量值创建 Uri。

下面的代码演示如何创建 UriTemplate 实例，并将其绑定和匹配到候选 URI。

Dim template As UriTemplate = New UriTemplate("weather/{state}/{city}?forecast={day}")
Dim prefix As Uri = New Uri("http://localhost")

Console.WriteLine("PathSegmentVariableNames:")
For Each name As String In template.PathSegmentVariableNames
    Console.WriteLine("     {0}", name)
Next

Console.WriteLine()
Console.WriteLine("QueryValueVariableNames:")
For Each name As String In template.QueryValueVariableNames
    Console.WriteLine("     {0}", name)
Next
Console.WriteLine()

Dim positionalUri As Uri = template.BindByPosition(prefix, "Washington", "Redmond", "Today")

Dim parameters As NameValueCollection = New NameValueCollection()
parameters.Add("state", "Washington")
parameters.Add("city", "Redmond")
parameters.Add("day", "Today")
Dim namedUri As Uri = template.BindByName(prefix, parameters)

Dim fullUri As Uri = New Uri("http://localhost/weather/Washington/Redmond?forecast=today")
Dim results As UriTemplateMatch = template.Match(prefix, fullUri)

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString())

If results IsNot Nothing Then
    For Each variableName As String In results.BoundVariables.Keys
        Console.WriteLine("   {0}: {1}", variableName, results.BoundVariables(variableName))
    Next
End If

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");
Uri prefix = new Uri("http://localhost");

Console.WriteLine("PathSegmentVariableNames:");
foreach (string name in template.PathSegmentVariableNames)
{
    Console.WriteLine("     {0}", name);
}
Console.WriteLine();

Console.WriteLine("QueryValueVariableNames:");
foreach (string name in template.QueryValueVariableNames)
{
    Console.WriteLine("     {0}", name);
}
Console.WriteLine();

Uri positionalUri = template.BindByPosition(prefix, "Washington", "Redmond", "Today");

NameValueCollection parameters = new NameValueCollection();
parameters.Add("state", "Washington");
parameters.Add("city", "Redmond");
parameters.Add("day", "Today");
Uri namedUri = template.BindByName(prefix, parameters);

Uri fullUri = new Uri("http://localhost/weather/Washington/Redmond?forecast=today");
UriTemplateMatch results = template.Match(prefix, fullUri);

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

if (results != null)
{
    foreach (string variableName in results.BoundVariables.Keys)
    {
        Console.WriteLine("   {0}: {1}", variableName, results.BoundVariables[variableName]);
    }
}

System System..::.UriTemplateUriTemplate
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 成员
System 命名空间


UriTemplate 成员

UriTemplate 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplate 类

一个表示统一资源标识符 (URI) 模板的类。

UriTemplate 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UriTemplate 类
System 命名空间


UriTemplate 构造函数

UriTemplate 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplate 类

初始化 UriTemplate 类的新实例。

名称 说明
页首

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplate 构造函数 (String)

UriTemplate 构造函数 (String)
UriTemplate 类

使用指定的模板字符串初始化 UriTemplate 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New ( _
    template As String _
)
public UriTemplate(
    string template
)
public:
UriTemplate(
    String^ template
)
new :
        template:string -> UriTemplate

参数

template
类型： System String
模板。

下面的示例演示如何调用构造函数。

Dim template As UriTemplate = New UriTemplate("weather/{state}/{city}?forecast={day}")

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
UriTemplate 重载
System 命名空间


UriTemplate 构造函数 (String, Boolean)

UriTemplate 构造函数 (String, Boolean)
UriTemplate 类

初始化 UriTemplate 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New ( _
    template As String, _
    ignoreTrailingSlash As Boolean _
)
public UriTemplate(
    string template,
    bool ignoreTrailingSlash
)
public:
UriTemplate(
    String^ template,
    bool ignoreTrailingSlash
)
new :
        template:string *
        ignoreTrailingSlash:bool -> UriTemplate

参数

template
类型： System String
模板字符串。
ignoreTrailingSlash
类型： System Boolean
一个值，指定是否应忽略尾部正斜杠“/”字符。

当 ignoreTrailingSlash 设置为 true 时，如果将候选 URI 与模板匹配，将忽略模板末尾处的尾部正斜杠。例如，模板“http://www.microsoft.com/customer/”与以下候选 URI 匹配： 当 ignoreTrailingSlash 设置为 true 时，如果将候选 URI 与模板匹配，将忽略模板末尾处的尾部正斜杠。例如，模板“http://www.microsoft.com/customer/”与以下候选 URI 匹配：

  • "http://www.microsoft.com/customer/"

  • "http://www.microsoft.com/customer"

  • "http://www.microsoft.com/customer/?wsdl"

  • "http://www.microsoft.com/customer?wsdl"

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
UriTemplate 重载
System 命名空间


UriTemplate 构造函数 (String, IDictionary <(Of <(String, String >)>))

UriTemplate 构造函数 (String, IDictionary
<
(Of
<
(
String, String
>
)
>
)
)
UriTemplate 类

初始化 UriTemplate 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New ( _
    template As String, _
    additionalDefaults As IDictionary(Of String, String) _
)
public UriTemplate(
    string template,
    IDictionary<string, string> additionalDefaults
)
public:
UriTemplate(
    String^ template,
    IDictionary<String^, String^>^ additionalDefaults
)
new :
        template:string *
        additionalDefaults:IDictionary<string, string> -> UriTemplate

参数

template
类型： System String
模板字符串。
additionalDefaults
类型： System.Collections.Generic IDictionary
<
(Of
<
(
String, String
>
)
>
)

一个字典，其中包含模板参数的默认值列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
UriTemplate 重载
System 命名空间


UriTemplate 构造函数 (String, Boolean, IDictionary <(Of <(String, String >)>))

UriTemplate 构造函数 (String, Boolean, IDictionary
<
(Of
<
(
String, String
>
)
>
)
)
UriTemplate 类

初始化 UriTemplate 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New ( _
    template As String, _
    ignoreTrailingSlash As Boolean, _
    additionalDefaults As IDictionary(Of String, String) _
)
public UriTemplate(
    string template,
    bool ignoreTrailingSlash,
    IDictionary<string, string> additionalDefaults
)
public:
UriTemplate(
    String^ template,
    bool ignoreTrailingSlash,
    IDictionary<String^, String^>^ additionalDefaults
)
new :
        template:string *
        ignoreTrailingSlash:bool *
        additionalDefaults:IDictionary<string, string> -> UriTemplate

参数

template
类型： System String
模板字符串。
ignoreTrailingSlash
类型： System Boolean
一个布尔值，指定是否忽略尾部正斜杠“/”字符。
additionalDefaults
类型： System.Collections.Generic IDictionary
<
(Of
<
(
String, String
>
)
>
)

一个字典，其中包含模板参数的默认值列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
UriTemplate 重载
System 命名空间


UriTemplate 方法

UriTemplate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplate 类

UriTemplate 类型公开以下成员。

名称 说明
页首

参考

UriTemplate 类
System 命名空间


UriTemplate ..::.BindByName 方法

UriTemplate
.
.
::
.
BindByName 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplate 类

利用模板和参数集合创建一个新的 URI。

名称 说明
页首

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplate ..::.BindByName 方法 (Uri, IDictionary <(Of <(String, String >)>))

UriTemplate
.
.
::
.
BindByName 方法 (Uri, IDictionary
<
(Of
<
(
String, String
>
)
>
)
)
UriTemplate 类

利用模板和参数集合创建一个新的 URI。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function BindByName ( _
    baseAddress As Uri, _
    parameters As IDictionary(Of String, String) _
) As Uri
public Uri BindByName(
    Uri baseAddress,
    IDictionary<string, string> parameters
)
public:
Uri^ BindByName(
    Uri^ baseAddress,
    IDictionary<String^, String^>^ parameters
)
member BindByName :
        baseAddress:Uri *
        parameters:IDictionary<string, string> -> Uri

参数

baseAddress
类型： System Uri
一个包含基址的 Uri。
parameters
类型： System.Collections.Generic IDictionary
<
(Of
<
(
String, String
>
)
>
)

一个字典，其中包含参数名称/值对的集合。

返回值

类型： System Uri
返回 Uri。

IDictionary<(Of <(String, String>)>) 参数包含参数名称和值对的集合。将参数与模板中的变量匹配时使用区分大小写的比较。 IDictionary<(Of <(String, String>)>) 参数包含参数名称和值对的集合。将参数与模板中的变量匹配时使用区分大小写的比较。

说明 说明

传递给此方法的名称/值集合必须包含每个模板变量的键值。与模板变量不匹配的额外名称/值对会追加到最终 URI 的查询字符串之后。 传递给此方法的名称/值集合必须包含每个模板变量的键值。与模板变量不匹配的额外名称/值对会追加到最终 URI 的查询字符串之后。
安全说明 安全说明

您可以在名称/值对中传入文本，以阻止生成的 URI 与用于生成它的模板匹配。此类文本包括“/”、“..”、“*”、“{”和“}”等。 您可以在名称/值对中传入文本，以阻止生成的 URI 与用于生成它的模板匹配。此类文本包括“/”、“..”、“*”、“{”和“}”等。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
BindByName 重载
System 命名空间


UriTemplate ..::.BindByName 方法 (Uri, NameValueCollection)

UriTemplate
.
.
::
.
BindByName 方法 (Uri, NameValueCollection)
UriTemplate 类

利用模板和参数集合创建一个新的 URI。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function BindByName ( _
    baseAddress As Uri, _
    parameters As NameValueCollection _
) As Uri
public Uri BindByName(
    Uri baseAddress,
    NameValueCollection parameters
)
public:
Uri^ BindByName(
    Uri^ baseAddress,
    NameValueCollection^ parameters
)
member BindByName :
        baseAddress:Uri *
        parameters:NameValueCollection -> Uri

参数

baseAddress
类型： System Uri
一个包含基址的 Uri。
parameters
类型： System.Collections.Specialized NameValueCollection
一个包含参数值的 NameValueCollection 实例。

返回值

类型： System Uri
新 Uri 实例。

NameValueCollection 参数包含参数名称和值对的集合。将参数与模板中的变量匹配时使用区分大小写的比较。传入此集合中的值都会经过转义。 NameValueCollection 参数包含参数名称和值对的集合。将参数与模板中的变量匹配时使用区分大小写的比较。传入此集合中的值都会经过转义。 NameValueCollection 参数包含参数名称和值对的集合。将参数与模板中的变量匹配时使用区分大小写的比较。传入此集合中的值都会经过转义。

说明 说明

传递给 BindByName(Uri, NameValueCollection) 的名称/值集合必须包含每个模板变量的键值。与模板变量不匹配的额外名称/值对会追加到最终 URI 的查询字符串之后。 传递给 BindByName(Uri, NameValueCollection) 的名称/值集合必须包含每个模板变量的键值。与模板变量不匹配的额外名称/值对会追加到最终 URI 的查询字符串之后。
说明 说明

您可以在名称/值对中传入文本，以阻止生成的 URI 与用于生成它的模板匹配。此类文本包括“/”、“..”、“*”、“{”和“}”等。 您可以在名称/值对中传入文本，以阻止生成的 URI 与用于生成它的模板匹配。此类文本包括“/”、“..”、“*”、“{”和“}”等。

下面的示例演示如何调用 BindByName(Uri, NameValueCollection) 方法。

Dim template As UriTemplate = New UriTemplate("weather/{state}/{city}?forecast={day}")
Dim prefix As Uri = New Uri("http://localhost")

Dim parameters As NameValueCollection = New NameValueCollection()
parameters.Add("state", "Washington")
parameters.Add("city", "Redmond")
parameters.Add("day", "Today")
Dim namedUri As Uri = template.BindByName(prefix, parameters)

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");
Uri prefix = new Uri("http://localhost");

NameValueCollection parameters = new NameValueCollection();
parameters.Add("state", "Washington");
parameters.Add("city", "Redmond");
parameters.Add("day", "Today");
Uri namedUri = template.BindByName(prefix, parameters);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
BindByName 重载
System 命名空间


UriTemplate ..::.BindByName 方法 (Uri, IDictionary <(Of <(String, String >)>), Boolean)

UriTemplate
.
.
::
.
BindByName 方法 (Uri, IDictionary
<
(Of
<
(
String, String
>
)
>
)
, Boolean)
UriTemplate 类

利用模板和参数集合创建一个新的 URI。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function BindByName ( _
    baseAddress As Uri, _
    parameters As IDictionary(Of String, String), _
    omitDefaults As Boolean _
) As Uri
public Uri BindByName(
    Uri baseAddress,
    IDictionary<string, string> parameters,
    bool omitDefaults
)
public:
Uri^ BindByName(
    Uri^ baseAddress,
    IDictionary<String^, String^>^ parameters,
    bool omitDefaults
)
member BindByName :
        baseAddress:Uri *
        parameters:IDictionary<string, string> *
        omitDefaults:bool -> Uri

参数

baseAddress
类型： System Uri
一个包含基址的 URI。
parameters
类型： System.Collections.Generic IDictionary
<
(Of
<
(
String, String
>
)
>
)

一个字典，其中包含参数名称/值对的集合。
omitDefaults
类型： System Boolean
一个值，指定是否忽略默认值。

返回值

类型： System Uri
返回 Uri。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
BindByName 重载
System 命名空间


UriTemplate ..::.BindByName 方法 (Uri, NameValueCollection, Boolean)

UriTemplate
.
.
::
.
BindByName 方法 (Uri, NameValueCollection, Boolean)
UriTemplate 类

利用模板和参数集合创建一个新的 URI。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function BindByName ( _
    baseAddress As Uri, _
    parameters As NameValueCollection, _
    omitDefaults As Boolean _
) As Uri
public Uri BindByName(
    Uri baseAddress,
    NameValueCollection parameters,
    bool omitDefaults
)
public:
Uri^ BindByName(
    Uri^ baseAddress,
    NameValueCollection^ parameters,
    bool omitDefaults
)
member BindByName :
        baseAddress:Uri *
        parameters:NameValueCollection *
        omitDefaults:bool -> Uri

参数

baseAddress
类型： System Uri
一个包含基址的 Uri。
parameters
类型： System.Collections.Specialized NameValueCollection
一个参数名称/值对的集合。
omitDefaults
类型： System Boolean
一个值，指定是否忽略默认值。

返回值

类型： System Uri
返回 Uri。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
BindByName 重载
System 命名空间


UriTemplate ..::.BindByPosition 方法

UriTemplate
.
.
::
.
BindByPosition 方法
UriTemplate 类

利用模板和参数值数组创建一个新的 URI。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function BindByPosition ( _
    baseAddress As Uri, _
    ParamArray values As String() _
) As Uri
public Uri BindByPosition(
    Uri baseAddress,
    params string[] values
)
public:
Uri^ BindByPosition(
    Uri^ baseAddress,
    ... array<String^>^ values
)
member BindByPosition :
        baseAddress:Uri *
        values:string[] -> Uri

参数

baseAddress
类型： System Uri
一个包含基址的 Uri。
values
类型：
array<
System String
>
[]
()
[]

参数值。

返回值

类型： System Uri
新 Uri 实例。

参数值按位置从左至右绑定。第一个参数值会替换在模板中找到的第一个变量，第二个参数值会替换第二个变量，依此类推。传递给此方法的变量都会经过转义。 参数值按位置从左至右绑定。第一个参数值会替换在模板中找到的第一个变量，第二个参数值会替换第二个变量，依此类推。传递给此方法的变量都会经过转义。 参数值按位置从左至右绑定。第一个参数值会替换在模板中找到的第一个变量，第二个参数值会替换第二个变量，依此类推。传递给此方法的变量都会经过转义。

说明 说明

传入值参数的参数个数必须与模板中的变量个数相符。如果不符，则会引发 FormatException。 传入值参数的参数个数必须与模板中的变量个数相符。如果不符，则会引发 FormatException。
说明 说明

您可以在参数值数组中传入文本，以阻止生成的 URI 与用于生成它的模板匹配。此类文本包括“/”、“.”、“..”、“*”、“{”和“}”等。下面的代码对此进行了演示。 您可以在参数值数组中传入文本，以阻止生成的 URI 与用于生成它的模板匹配。此类文本包括“/”、“.”、“..”、“*”、“{”和“}”等。下面的代码对此进行了演示。 您可以在参数值数组中传入文本，以阻止生成的 URI 与用于生成它的模板匹配。此类文本包括“/”、“.”、“..”、“*”、“{”和“}”等。下面的代码对此进行了演示。

UriTemplate template = new UriTemplate("foo/{bar}/baz");

Uri uri = new Uri("http://localhost/Base");

Uri result = template.BindByPosition(uri, "."); // returns Base/form/baz

Uri result = template.BindByPosition(uri, ".."); // returns Base/baz

Uri result = template.BindByPosition(uri, "x/y"); // returns Base/form/x/y/baz

Uri result = template.BindByPosition(uri, "{x}"); // returns Base/form/{x}/baz

Uri result = template.BindByPosition(uri, "*"); // returns Base/form/*/baz

下面的示例演示如何调用 BindByPosition(Uri, array<String>[]()[])。

Dim template As UriTemplate = New UriTemplate("weather/{state}/{city}?forecast={day}")
Dim prefix As Uri = New Uri("http://localhost")

Dim positionalUri As Uri = template.BindByPosition(prefix, "Washington", "Redmond", "Today")

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");
Uri prefix = new Uri("http://localhost");

Uri positionalUri = template.BindByPosition(prefix, "Washington", "Redmond", "Today");

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplate ..::.IsEquivalentTo 方法

UriTemplate
.
.
::
.
IsEquivalentTo 方法
UriTemplate 类

指示 UriTemplate 与其他模板的结构是否等效。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function IsEquivalentTo ( _
    other As UriTemplate _
) As Boolean
public bool IsEquivalentTo(
    UriTemplate other
)
public:
bool IsEquivalentTo(
    UriTemplate^ other
)
member IsEquivalentTo :
        other:UriTemplate -> bool

参数

other
类型： System UriTemplate
要比较的 UriTemplate。

返回值

类型： System Boolean
一个值，指示 URI 模板是否等效。

如果文本字符串相同，并且变量出现在相同的段中，则两个 UriTemplate 实例的结构等效。例如，“weather/{state}/{city}”与“weather/{country}/{village}”结构等效。 如果文本字符串相同，并且变量出现在相同的段中，则两个 UriTemplate 实例的结构等效。例如，“weather/{state}/{city}”与“weather/{country}/{village}”结构等效。

The following example shows how to call the IsEquivalentTo(UriTemplate).

Dim template As UriTemplate = New UriTemplate("weather/{state}/{city}?forecast={day}")
Dim template2 As UriTemplate = New UriTemplate("weather/{country}/{village}?forecast={type}")

Dim equiv As Boolean = template.IsEquivalentTo(template2)

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");
UriTemplate template2 = new UriTemplate("weather/{country}/{village}?forecast={type}");

bool equiv = template.IsEquivalentTo(template2);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplate ..::.Match 方法

UriTemplate
.
.
::
.
Match 方法
UriTemplate 类

尝试将 URI 与 UriTemplate 匹配。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function Match ( _
    baseAddress As Uri, _
    candidate As Uri _
) As UriTemplateMatch
public UriTemplateMatch Match(
    Uri baseAddress,
    Uri candidate
)
public:
UriTemplateMatch^ Match(
    Uri^ baseAddress,
    Uri^ candidate
)
member Match :
        baseAddress:Uri *
        candidate:Uri -> UriTemplateMatch

参数

baseAddress
类型： System Uri
基址。
candidate
类型： System Uri
要与模板匹配的 Uri。

返回值

类型： System UriTemplateMatch
一个 UriTemplateMatch 实例。

如果匹配成功，则会使用 URI 段、变量值、查询字符串值和候选 URI 的通配符段来填充 UriTemplateMatch。如果匹配失败，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 如果匹配成功，则会使用 URI 段、变量值、查询字符串值和候选 URI 的通配符段来填充 UriTemplateMatch。如果匹配失败，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例演示如何调用 Match(Uri, Uri) 方法。

Dim template As UriTemplate = New UriTemplate("weather/{state}/{city}?forecast={day}")
Dim prefix As Uri = New Uri("http://localhost")

Dim fullUri As Uri = New Uri("http://localhost/weather/Washington/Redmond?forecast=today")
Dim results As UriTemplateMatch = template.Match(prefix, fullUri)

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString())

If results IsNot Nothing Then
    For Each variableName As String In results.BoundVariables.Keys
        Console.WriteLine("   {0}: {1}", variableName, results.BoundVariables(variableName))
    Next
End If

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");
Uri prefix = new Uri("http://localhost");

Uri fullUri = new Uri("http://localhost/weather/Washington/Redmond?forecast=today");
UriTemplateMatch results = template.Match(prefix, fullUri);

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

if (results != null)
{
    foreach (string variableName in results.BoundVariables.Keys)
    {
        Console.WriteLine("   {0}: {1}", variableName, results.BoundVariables[variableName]);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplate ..::.ToString 方法

UriTemplate
.
.
::
.
ToString 方法
UriTemplate 类

返回 UriTemplate 实例的字符串表示形式。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
UriTemplate 实例的表示形式。

下面的示例演示如何调用 ToString()()() 方法。

Dim template As UriTemplate = New UriTemplate("weather/{state}/{city}?forecast={day}")
Console.WriteLine(template.ToString())

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");
Console.WriteLine(template.ToString());

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplate 属性

UriTemplate 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplate 类

UriTemplate 类型公开以下成员。

名称 说明
页首

参考

UriTemplate 类
System 命名空间


UriTemplate ..::.Defaults 属性

UriTemplate
.
.
::
.
Defaults 属性
UriTemplate 类

一个集合，其中包含任何默认参数值的名称和值对。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property Defaults As IDictionary(Of String, String)
    Get
public IDictionary<string, string> Defaults { get; }
public:
property IDictionary<String^, String^>^ Defaults {
    IDictionary<String^, String^>^ get ();
}
member Defaults : IDictionary<string, string>

属性值

类型： System.Collections.Generic IDictionary
<
(Of
<
(
String, String
>
)
>
)

返回 IDictionary<(Of <(TKey, TValue>)>)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplate ..::.IgnoreTrailingSlash 属性

UriTemplate
.
.
::
.
IgnoreTrailingSlash 属性
UriTemplate 类

指定将候选 URI 与模板匹配时，是否应忽略模板中的尾部正斜杠“/”。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property IgnoreTrailingSlash As Boolean
    Get
public bool IgnoreTrailingSlash { get; }
public:
property bool IgnoreTrailingSlash {
    bool get ();
}
member IgnoreTrailingSlash : bool

属性值

类型： System Boolean
返回 Boolean。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplate ..::.PathSegmentVariableNames 属性

UriTemplate
.
.
::
.
PathSegmentVariableNames 属性
UriTemplate 类

获取模板的路径段中所使用的变量名的集合。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property PathSegmentVariableNames As ReadOnlyCollection(Of String)
    Get
public ReadOnlyCollection<string> PathSegmentVariableNames { get; }
public:
property ReadOnlyCollection<String^>^ PathSegmentVariableNames {
    ReadOnlyCollection<String^>^ get ();
}
member PathSegmentVariableNames : ReadOnlyCollection<string>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
String
>
)
>
)

一个集合，包含模板的路径段中显示的变量名。

该集合不包括在模板的查询部分显示的变量名。

下面的示例演示如何访问 PathSegmentVariableNames 属性。

Dim template As UriTemplate = New UriTemplate("weather/{state}/{city}?forecast={day}")

Dim prefix As Uri = New Uri("http://localhost")

Console.WriteLine("PathSegmentVariableNames:")
For Each name As String In template.PathSegmentVariableNames
    Console.WriteLine("     {0}", name)
Next

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");

Uri prefix = new Uri("http://localhost");

Console.WriteLine("PathSegmentVariableNames:");
foreach (string name in template.PathSegmentVariableNames)
{
    Console.WriteLine("     {0}", name);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplate ..::.QueryValueVariableNames 属性

UriTemplate
.
.
::
.
QueryValueVariableNames 属性
UriTemplate 类

获取模板的查询字符串中所使用的变量名的集合。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property QueryValueVariableNames As ReadOnlyCollection(Of String)
    Get
public ReadOnlyCollection<string> QueryValueVariableNames { get; }
public:
property ReadOnlyCollection<String^>^ QueryValueVariableNames {
    ReadOnlyCollection<String^>^ get ();
}
member QueryValueVariableNames : ReadOnlyCollection<string>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
String
>
)
>
)

一个集合，包含在模板字符串的查询部分显示的模板变量名。

此集合不包括在模板字符串的路径部分显示的变量名。

下面的示例演示如何访问 QueryValueVariableNames 属性。

Dim template As UriTemplate = New UriTemplate("weather/{state}/{city}?forecast={day}")
Dim prefix As Uri = New Uri("http://localhost")

Console.WriteLine("QueryValueVariableNames:")
For Each name As String In template.QueryValueVariableNames
    Console.WriteLine("     {0}", name)
Next

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast={day}");
Uri prefix = new Uri("http://localhost");

Console.WriteLine("QueryValueVariableNames:");
foreach (string name in template.QueryValueVariableNames)
{
    Console.WriteLine("     {0}", name);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplate 类
UriTemplate 成员
System 命名空间


UriTemplateEquivalenceComparer 类

UriTemplateEquivalenceComparer 类
成员

一个用于比较 UriTemplate 实例以确定结构（而非引用）等效性的类。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Class UriTemplateEquivalenceComparer _
    Implements IEqualityComparer(Of UriTemplate)
public class UriTemplateEquivalenceComparer : IEqualityComparer<UriTemplate>
public ref class UriTemplateEquivalenceComparer : IEqualityComparer<UriTemplate^>
type UriTemplateEquivalenceComparer =
    class
        interface IEqualityComparer<UriTemplate>
    end

默认情况下，使用引用相等性来比较 UriTemplate 实例。UriTemplateEquivalenceComparer 类会使用 IsEquivalentTo(UriTemplate) 而非默认的引用相等性检查来评估等效性。如果希望根据与两个 UriTemplate 实例匹配的 URI 而非严格的引用相等性来比较这两个实例，则此类会非常有用。 默认情况下，使用引用相等性来比较 UriTemplate 实例。UriTemplateEquivalenceComparer 类会使用 IsEquivalentTo(UriTemplate) 而非默认的引用相等性检查来评估等效性。如果希望根据与两个 UriTemplate 实例匹配的 URI 而非严格的引用相等性来比较这两个实例，则此类会非常有用。 默认情况下，使用引用相等性来比较 UriTemplate 实例。UriTemplateEquivalenceComparer 类会使用 IsEquivalentTo(UriTemplate) 而非默认的引用相等性检查来评估等效性。如果希望根据与两个 UriTemplate 实例匹配的 URI 而非严格的引用相等性来比较这两个实例，则此类会非常有用。

下面的示例说明了引用相等性和结构相等性之间的差异。同时也说明了在字典中使用 UriTemplateEquivalenceComparer 作为比较器的方法。 下面的示例说明了引用相等性和结构相等性之间的差异。同时也说明了在字典中使用 UriTemplateEquivalenceComparer 作为比较器的方法。

'Define two structurally equivalent templates
Dim temp1 As UriTemplate = New UriTemplate("weather/{state}/{city}")
Dim temp2 As UriTemplate = New UriTemplate("weather/{country}/{village}")

'Notice they are not reference equal, in other words
'they are do not refer to the same object
If temp1.Equals(temp2) Then
    Console.WriteLine("{0} and {1} are reference equal", temp1, temp2)
Else
    Console.WriteLine("{0} and {1} are NOT reference equal", temp1, temp2)
End If

'Notice they are structrually equal
If (temp1.IsEquivalentTo(temp2)) Then
    Console.WriteLine("{0} and {1} are structurally equal", temp1, temp2)
Else
    Console.WriteLine("{0} and {1} are NOT structurally equal", temp1, temp2)
End If

'Create a dictionary and use UriTemplateEquivalenceComparer as the comparer
Dim templates As Dictionary(Of UriTemplate, Object) = New Dictionary(Of UriTemplate, Object)(New UriTemplateEquivalenceComparer())

'Add template 1 into the dictionary
templates.Add(temp1, "template1")

'The UriTemplateEquivalenceComparer will be used here to compare the template in the table with template2
'they are structurally equivalent, so ContainsKey will return true.
If (templates.ContainsKey(temp2)) Then
    Console.WriteLine("Both templates hash to the same value")
Else
    Console.WriteLine("Both templates do NOT hash to the same value")
End If

// Define two structurally equivalent templates
UriTemplate temp1 = new UriTemplate("weather/{state}/{city}");
UriTemplate temp2 = new UriTemplate("weather/{country}/{village}");

// Notice they are not reference equal, in other words
// they are do not refer to the same object
if (temp1 == temp2)
    Console.WriteLine("{0} and {1} are reference equal", temp1, temp2);
else
    Console.WriteLine("{0} and {1} are NOT reference equal", temp1, temp2);

// Notice they are structrually equal
if (temp1.IsEquivalentTo(temp2))
    Console.WriteLine("{0} and {1} are structurally equal", temp1, temp2);
else
    Console.WriteLine("{0} and {1} are NOT structurally equal", temp1, temp2);

// Create a dictionary and use UriTemplateEquivalenceComparer as the comparer
Dictionary<UriTemplate, object> templates = new Dictionary<UriTemplate, object>(new UriTemplateEquivalenceComparer());

// Add template 1 into the dictionary
templates.Add(temp1, "template1");

// The UriTemplateEquivalenceComparer will be used here to compare the template in the table with template2
// they are structurally equivalent, so ContainsKey will return true.
if (templates.ContainsKey(temp2))
    Console.WriteLine("Both templates hash to the same value");
else
    Console.WriteLine("Both templates do NOT hash to the same value");

System System..::.UriTemplateEquivalenceComparerUriTemplateEquivalenceComparer
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateEquivalenceComparer 成员
System 命名空间


UriTemplateEquivalenceComparer 成员

UriTemplateEquivalenceComparer 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateEquivalenceComparer 类

一个用于比较 UriTemplate 实例以确定结构（而非引用）等效性的类。

UriTemplateEquivalenceComparer 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

UriTemplateEquivalenceComparer 类
System 命名空间


UriTemplateEquivalenceComparer 构造函数

UriTemplateEquivalenceComparer 构造函数
UriTemplateEquivalenceComparer 类

初始化 UriTemplateEquivalenceComparer 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New
public UriTemplateEquivalenceComparer()
public:
UriTemplateEquivalenceComparer()
new : unit -> UriTemplateEquivalenceComparer

下面的代码示例演示如何调用此类的构造函数。

'Create a dictionary and use UriTemplateEquivalenceComparer as the comparer
Dim templates As Dictionary(Of UriTemplate, Object) = New Dictionary(Of UriTemplate, Object)(New UriTemplateEquivalenceComparer())

// Create a dictionary and use UriTemplateEquivalenceComparer as the comparer
Dictionary<UriTemplate, object> templates = new Dictionary<UriTemplate, object>(new UriTemplateEquivalenceComparer());

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateEquivalenceComparer 类
UriTemplateEquivalenceComparer 成员
System 命名空间


UriTemplateEquivalenceComparer 方法

UriTemplateEquivalenceComparer 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateEquivalenceComparer 类

UriTemplateEquivalenceComparer 类型公开以下成员。

名称 说明
页首

参考

UriTemplateEquivalenceComparer 类
System 命名空间


UriTemplateEquivalenceComparer ..::.Equals 方法

UriTemplateEquivalenceComparer
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateEquivalenceComparer 类

名称 说明
页首

参考

UriTemplateEquivalenceComparer 类
UriTemplateEquivalenceComparer 成员
System 命名空间


UriTemplateEquivalenceComparer ..::.Equals 方法 (UriTemplate, UriTemplate)

UriTemplateEquivalenceComparer
.
.
::
.
Equals 方法 (UriTemplate, UriTemplate)
UriTemplateEquivalenceComparer 类

比较两个 UriTemplate 实例是否等效。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function Equals ( _
    x As UriTemplate, _
    y As UriTemplate _
) As Boolean
public bool Equals(
    UriTemplate x,
    UriTemplate y
)
public:
virtual bool Equals(
    UriTemplate^ x,
    UriTemplate^ y
) sealed
abstract Equals :
        x:UriTemplate *
        y:UriTemplate -> bool
override Equals :
        x:UriTemplate *
        y:UriTemplate -> bool

参数

x
类型： System UriTemplate
一个 UriTemplate 实例。
y
类型： System UriTemplate
A UriTemplate instance.

返回值

类型： System Boolean
一个值，指示两个 UriTemplate 实例是否等效。

实现

通常不直接调用此方法。而是由比较两个 UriTemplate 实例的其他类来调用此方法。 通常不直接调用此方法。而是由比较两个 UriTemplate 实例的其他类来调用此方法。

下面的代码演示如何调用 Equals 方法。

UriTemplate temp1 = new UriTemplate("weather/{state}/{city}");
UriTemplate temp2 = new UriTemplate("weather/{country}/{village}");

// Notice they are not reference equal, in other words
// they are do not refer to the same object
if (temp1 == temp2)
    Console.WriteLine("{0} and {1} are reference equal", temp1, temp2);
else
    Console.WriteLine("{0} and {1} are NOT reference equal", temp1, temp2);

// Notice they are structrually equal
UriTemplateEquivalenceComparer comparer = new UriTemplateEquivalenceComparer();
bool result = comparer.Equals(temp1, temp2);

if (result)
    Console.WriteLine("{0} and {1} are structurally equal", temp1, temp2);
else
    Console.WriteLine("{0} and {1} are NOT structurally equal", temp1, temp2);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateEquivalenceComparer 类
UriTemplateEquivalenceComparer 成员
Equals 重载
System 命名空间


UriTemplateEquivalenceComparer ..::.GetHashCode 方法

UriTemplateEquivalenceComparer
.
.
::
.
GetHashCode 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateEquivalenceComparer 类

名称 说明
页首

参考

UriTemplateEquivalenceComparer 类
UriTemplateEquivalenceComparer 成员
System 命名空间


UriTemplateEquivalenceComparer ..::.GetHashCode 方法 (UriTemplate)

UriTemplateEquivalenceComparer
.
.
::
.
GetHashCode 方法 (UriTemplate)
UriTemplateEquivalenceComparer 类

获取所指定 UriTemplate 实例的哈希代码。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function GetHashCode ( _
    obj As UriTemplate _
) As Integer
public int GetHashCode(
    UriTemplate obj
)
public:
virtual int GetHashCode(
    UriTemplate^ obj
) sealed
abstract GetHashCode :
        obj:UriTemplate -> int
override GetHashCode :
        obj:UriTemplate -> int

参数

obj
类型： System UriTemplate
UriTemplate 实例。

返回值

类型： System Int32
哈希代码。

实现

通常不直接调用此方法。而是由需要 UriTemplate 实例哈希的其他类来调用此方法。 通常不直接调用此方法。而是由需要 UriTemplate 实例哈希的其他类来调用此方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateEquivalenceComparer 类
UriTemplateEquivalenceComparer 成员
GetHashCode 重载
System 命名空间


UriTemplateMatch 类

UriTemplateMatch 类
成员

一个类，表示对 UriTemplate 实例执行匹配操作的结果。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Class UriTemplateMatch
public class UriTemplateMatch
public ref class UriTemplateMatch
type UriTemplateMatch =  class end

UriTemplateMatch 类表示调用 Match(Uri, Uri) 方法的结果。此类不是线程安全的。 UriTemplateMatch 类表示调用 Match(Uri, Uri) 方法的结果。此类不是线程安全的。

下面的代码演示如何使用 UriTemplateMatch 类。

Dim template As New UriTemplate("weather/{state}/{city}?forecast=today")
Dim baseAddress As New Uri("http://localhost")
Dim fullUri As New Uri("http://localhost/weather/WA/Seattle?forecast=today")

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString())

'Match a URI to a template
Dim results As UriTemplateMatch = template.Match(baseAddress, fullUri)
If (results IsNot Nothing) Then

    'BaseUri
    Console.WriteLine("BaseUri: {0}", results.BaseUri)

    Console.WriteLine("BoundVariables:")
    For Each variableName As String In results.BoundVariables.Keys
        Console.WriteLine("    {0}: {1}", variableName, results.BoundVariables(variableName))
    Next

    Console.WriteLine("QueryParameters:")
    For Each queryName As String In results.QueryParameters.Keys
        Console.WriteLine("    {0} : {1}", queryName, results.QueryParameters(queryName))
    Next
    Console.WriteLine()

    Console.WriteLine("RelativePathSegments:")
    For Each segment As String In results.RelativePathSegments
        Console.WriteLine("     {0}", segment)
    Next
    Console.WriteLine()

    Console.WriteLine("RequestUri:")
    Console.WriteLine(results.RequestUri)

    Console.WriteLine("Template:")
    Console.WriteLine(results.Template)

    Console.WriteLine("WildcardPathSegments:")
    For Each segment As String In results.WildcardPathSegments
        Console.WriteLine("     {0}", segment)
    Next
    Console.WriteLine()
End If

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast=today");
Uri baseAddress = new Uri("http://localhost");
Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

// Match a URI to a template
UriTemplateMatch results = template.Match(baseAddress, fullUri);
if (results != null)
{
    // BaseUri
    Console.WriteLine("BaseUri: {0}", results.BaseUri);

    Console.WriteLine("BoundVariables:");
    foreach (string variableName in results.BoundVariables.Keys)
    {
        Console.WriteLine("    {0}: {1}", variableName, results.BoundVariables[variableName]);
    }

    Console.WriteLine("QueryParameters:");
    foreach (string queryName in results.QueryParameters.Keys)
    {
        Console.WriteLine("    {0} : {1}", queryName, results.QueryParameters[queryName]);
    }
    Console.WriteLine();

    Console.WriteLine("RelativePathSegments:");
    foreach (string segment in results.RelativePathSegments)
    {
        Console.WriteLine("     {0}", segment);
    }
    Console.WriteLine();

    Console.WriteLine("RequestUri:");
    Console.WriteLine(results.RequestUri);

    Console.WriteLine("Template:");
    Console.WriteLine(results.Template);

    Console.WriteLine("WildcardPathSegments:");
    foreach (string segment in results.WildcardPathSegments)
    {
        Console.WriteLine("     {0}", segment);
    }
    Console.WriteLine();
}

System System..::.UriTemplateMatchUriTemplateMatch
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 成员
System 命名空间


UriTemplateMatch 成员

UriTemplateMatch 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateMatch 类

一个类，表示对 UriTemplate 实例执行匹配操作的结果。

UriTemplateMatch 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UriTemplateMatch 类
System 命名空间


UriTemplateMatch 构造函数

UriTemplateMatch 构造函数
UriTemplateMatch 类

初始化 UriTemplateMatch 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New
public UriTemplateMatch()
public:
UriTemplateMatch()
new : unit -> UriTemplateMatch

通常不直接实例化此类，而是从 Match(Uri, Uri) 或 MatchSingle(Uri) 方法返回 UriTemplateMatch 实例。Match 方法也会返回 UriTemplateMatch 的集合。 通常不直接实例化此类，而是从 Match(Uri, Uri) 或 MatchSingle(Uri) 方法返回 UriTemplateMatch 实例。Match 方法也会返回 UriTemplateMatch 的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 类
UriTemplateMatch 成员
System 命名空间


UriTemplateMatch 方法

UriTemplateMatch 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateMatch 类

UriTemplateMatch 类型公开以下成员。

名称 说明
页首

参考

UriTemplateMatch 类
System 命名空间


UriTemplateMatch 属性

UriTemplateMatch 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateMatch 类

UriTemplateMatch 类型公开以下成员。

名称 说明
页首

参考

UriTemplateMatch 类
System 命名空间


UriTemplateMatch ..::.BaseUri 属性

UriTemplateMatch
.
.
::
.
BaseUri 属性
UriTemplateMatch 类

获取和设置模板匹配的基 URI。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Property BaseUri As Uri
    Get
    Set
public Uri BaseUri { get; set; }
public:
property Uri^ BaseUri {
    Uri^ get ();
    void set (Uri^ value);
}
member BaseUri : Uri with get, set

属性值

类型： System Uri
一个 Uri 实例，表示模板匹配的基 URI。

下面的代码演示如何访问 BaseUri 属性。

Dim template As New UriTemplate("weather/ state}/ city}?forecast=today")
Dim baseAddress As New Uri("http://localhost")
Dim fullUri As New Uri("http://localhost/weather/WA/Seattle?forecast=today")

Console.WriteLine("Matching  0} to  1}", template.ToString(), fullUri.ToString())

'Match a URI to a template
Dim results As UriTemplateMatch = template.Match(baseAddress, fullUri)
If (results IsNot Nothing) Then

    'BaseUri
    Console.WriteLine("BaseUri:  0}", results.BaseUri)
End If
'output:
'BaseUri: http://localhost

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast=today");
Uri baseAddress = new Uri("http://localhost");
Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

// Match a URI to a template
UriTemplateMatch results = template.Match(baseAddress, fullUri);
if (results != null)
{
    // BaseUri
    Console.WriteLine("BaseUri: {0}", results.BaseUri);
}
// output:
// BaseUri: http://localhost

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 类
UriTemplateMatch 成员
System 命名空间


UriTemplateMatch ..::.BoundVariables 属性

UriTemplateMatch
.
.
::
.
BoundVariables 属性
UriTemplateMatch 类

获取模板匹配的 BoundVariables 集合。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property BoundVariables As NameValueCollection
    Get
public NameValueCollection BoundVariables { get; }
public:
property NameValueCollection^ BoundVariables {
    NameValueCollection^ get ();
}
member BoundVariables : NameValueCollection

属性值

类型： System.Collections.Specialized NameValueCollection
一个 NameValueCollection 实例，包含匹配期间从 URI 中提取的模板变量值。

每个模板变量名都会显示为此集合中的一个名称，而与该变量绑定的值会存储在相应的名称之下。此集合中的值已将所有转义序列转换为实际字符。在匹配变量名称时，此名称值集合使用不区分大小写的搜索。 每个模板变量名都会显示为此集合中的一个名称，而与该变量绑定的值会存储在相应的名称之下。此集合中的值已将所有转义序列转换为实际字符。在匹配变量名称时，此名称值集合使用不区分大小写的搜索。 每个模板变量名都会显示为此集合中的一个名称，而与该变量绑定的值会存储在相应的名称之下。此集合中的值已将所有转义序列转换为实际字符。在匹配变量名称时，此名称值集合使用不区分大小写的搜索。

下面的代码演示如何访问 BoundVariables 属性。

Dim template As New UriTemplate("weather/ state}/ city}?forecast=today")
Dim baseAddress As New Uri("http://localhost")
Dim fullUri As New Uri("http://localhost/weather/WA/Seattle?forecast=today")

Console.WriteLine("Matching  0} to  1}", template.ToString(), fullUri.ToString())

'Match a URI to a template
Dim results As UriTemplateMatch = template.Match(baseAddress, fullUri)
If (results IsNot Nothing) Then

    'BaseUri
    Console.WriteLine("BaseUri:  0}", results.BaseUri)

    Console.WriteLine("BoundVariables:")
    For Each variableName As String In results.BoundVariables.Keys
        Console.WriteLine("     0}:  1}", variableName, results.BoundVariables(variableName))
    Next
End If
'Code output:
'BaseUri: http://localhost/
'BoundVariables:
' state: wa
' city: seattleConsole.WriteLine("BaseUri:  0}", results.BaseUri)

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast=today");
Uri baseAddress = new Uri("http://localhost");
Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

// Match a URI to a template
UriTemplateMatch results = template.Match(baseAddress, fullUri);
if (results != null)
{
    // BaseUri
    Console.WriteLine("BaseUri: {0}", results.BaseUri);

    Console.WriteLine("BoundVariables:");
    foreach (string variableName in results.BoundVariables.Keys)
    {
        Console.WriteLine("    {0}: {1}", variableName, results.BoundVariables[variableName]);
    }
}
// Code output:
// BaseUri: http://localhost/
// BoundVariables:
//  state: wa
//  city: seattleConsole.WriteLine("BaseUri: {0}", results.BaseUri);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 类
UriTemplateMatch 成员
System 命名空间


UriTemplateMatch ..::.Data 属性

UriTemplateMatch
.
.
::
.
Data 属性
UriTemplateMatch 类

获取和设置与 UriTemplateMatch 实例关联的对象。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Property Data As Object
    Get
    Set
public Object Data { get; set; }
public:
property Object^ Data {
    Object^ get ();
    void set (Object^ value);
}
member Data : Object with get, set

属性值

类型： System Object
一个 Object 实例。

将 UriTemplate 添加到 UriTemplateTable 时，数据就会与模板关联起来。此值是应用程序特定的，并没有与之关联的特定语义。调用 Match(Uri) 并找到匹配项时，Data 属性会返回与匹配模板关联的数据。 将 UriTemplate 添加到 UriTemplateTable 时，数据就会与模板关联起来。此值是应用程序特定的，并没有与之关联的特定语义。调用 Match(Uri) 并找到匹配项时，Data 属性会返回与匹配模板关联的数据。 将 UriTemplate 添加到 UriTemplateTable 时，数据就会与模板关联起来。此值是应用程序特定的，并没有与之关联的特定语义。调用 Match(Uri) 并找到匹配项时，Data 属性会返回与匹配模板关联的数据。

下面的代码演示如何访问 Data 属性。

Dim prefix As New Uri("http://localhost/")

' Create some templates:
Dim weatherByCity As New UriTemplate("weather/ state}/ city}")
Dim weatherByState As New UriTemplate("weather/ state}")
Dim traffic As New UriTemplate("traffic/*")
Dim wildcard As New UriTemplate("*")

'Create a template table
Dim table As UriTemplateTable = New UriTemplateTable(prefix)

'Add the templates to the template table along with some associated data
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

'Match a URI to a template
Dim candidateUri As New Uri("http://localhost/weather/WA/Redmond")
Dim results As UriTemplateMatch = table.MatchSingle(candidateUri)

If (results IsNot Nothing) Then

    'Get the data associated with the matching template
    Dim data As String = CType(results.Data, String)
    Console.WriteLine("Matching data is  0}", Data)
End If

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast=today");
Uri baseAddress = new Uri("http://localhost");
Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

// Match a URI to a template
UriTemplateMatch results = template.Match(baseAddress, fullUri);
if (results != null)
{
    Object data = results.Data;
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 类
UriTemplateMatch 成员
System 命名空间


UriTemplateMatch ..::.QueryParameters 属性

UriTemplateMatch
.
.
::
.
QueryParameters 属性
UriTemplateMatch 类

获取查询字符串参数及其值的集合。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property QueryParameters As NameValueCollection
    Get
public NameValueCollection QueryParameters { get; }
public:
property NameValueCollection^ QueryParameters {
    NameValueCollection^ get ();
}
member QueryParameters : NameValueCollection

属性值

类型： System.Collections.Specialized NameValueCollection
一个包含查询字符串参数及其值的 NameValueCollection 实例。

原始 URI 中的所有查询字符串名称/值对都会出现在此集合中，即使没有在匹配的模板字符串中显式指定它们也是如此。此集合中的值已将所有转义序列转换为实际字符。 原始 URI 中的所有查询字符串名称/值对都会出现在此集合中，即使没有在匹配的模板字符串中显式指定它们也是如此。此集合中的值已将所有转义序列转换为实际字符。

下面的代码演示如何访问 QueryParameters 属性。

Dim template As New UriTemplate("weather/ state}/ city}?forecast=today")
Dim baseAddress As New Uri("http://localhost")
Dim fullUri As New Uri("http://localhost/weather/WA/Seattle?forecast=today")

Console.WriteLine("Matching  0} to  1}", template.ToString(), fullUri.ToString())

'Match a URI to a template
Dim results As UriTemplateMatch = template.Match(baseAddress, fullUri)
If (results IsNot Nothing) Then

    Console.WriteLine("QueryParameters:")
    For Each queryName As String In results.QueryParameters.Keys
        Console.WriteLine("     0} :  1}", queryName, results.QueryParameters(queryName))
    Next
    Console.WriteLine()
End If
'Code output:
' QueryParameters:
' forecast : today

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast=today");
Uri baseAddress = new Uri("http://localhost");
Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

// Match a URI to a template
UriTemplateMatch results = template.Match(baseAddress, fullUri);
if (results != null)
{
    Console.WriteLine("QueryParameters:");
    foreach (string queryName in results.QueryParameters.Keys)
    {
        Console.WriteLine("    {0} : {1}", queryName, results.QueryParameters[queryName]);
    }
    Console.WriteLine();
}
// Code output:
//  QueryParameters:
//  forecast : today

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 类
UriTemplateMatch 成员
System 命名空间


UriTemplateMatch ..::.RelativePathSegments 属性

UriTemplateMatch
.
.
::
.
RelativePathSegments 属性
UriTemplateMatch 类

获取相对路径段的集合。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property RelativePathSegments As Collection(Of String)
    Get
public Collection<string> RelativePathSegments { get; }
public:
property Collection<String^>^ RelativePathSegments {
    Collection<String^>^ get ();
}
member RelativePathSegments : Collection<string>

属性值

类型： System.Collections.ObjectModel Collection
<
(Of
<
(
String
>
)
>
)

相对路径段的集合。

此属性包含与模板匹配的候选 URI 中的路径段以及与模板通配符匹配的路径段的集合。WildcardPathSegments 属性也包含与模板通配符匹配的路径段。 此属性包含与模板匹配的候选 URI 中的路径段以及与模板通配符匹配的路径段的集合。WildcardPathSegments 属性也包含与模板通配符匹配的路径段。

下面的代码演示如何访问 RelativePathSegments 属性。

Dim template As New UriTemplate("weather/ state}/ city}?forecast=today")
Dim baseAddress As New Uri("http://localhost")
Dim fullUri As New Uri("http://localhost/weather/WA/Seattle?forecast=today")

Console.WriteLine("Matching  0} to  1}", template.ToString(), fullUri.ToString())

'Match a URI to a template
Dim results As UriTemplateMatch = template.Match(baseAddress, fullUri)
If (results IsNot Nothing) Then

    Console.WriteLine("RelativePathSegments:")
    For Each segment As String In results.RelativePathSegments
        Console.WriteLine("      0}", segment)
    Next
End If
'Code output:
'RelativePathSegments:
'  weather
'  wa
'  seattle

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast=today");
Uri baseAddress = new Uri("http://localhost");
Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

// Match a URI to a template
UriTemplateMatch results = template.Match(baseAddress, fullUri);
if (results != null)
{
    Console.WriteLine("RelativePathSegments:");
    foreach (string segment in results.RelativePathSegments)
    {
        Console.WriteLine("     {0}", segment);
    }
}
// Code output:
// RelativePathSegments:
//   weather
//   wa
//   seattle

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 类
UriTemplateMatch 成员
System 命名空间


UriTemplateMatch ..::.RequestUri 属性

UriTemplateMatch
.
.
::
.
RequestUri 属性
UriTemplateMatch 类

获取和设置匹配的 URI。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Property RequestUri As Uri
    Get
    Set
public Uri RequestUri { get; set; }
public:
property Uri^ RequestUri {
    Uri^ get ();
    void set (Uri^ value);
}
member RequestUri : Uri with get, set

属性值

类型： System Uri
一个 Uri 实例。

下面的代码演示如何访问 RequestUri 属性。

Dim template As New UriTemplate("weather/ state}/ city}?forecast=today")
Dim baseAddress As New Uri("http://localhost")
Dim fullUri As New Uri("http://localhost/weather/WA/Seattle?forecast=today")

Console.WriteLine("Matching  0} to  1}", template.ToString(), fullUri.ToString())

'Match a URI to a template
Dim results As UriTemplateMatch = template.Match(baseAddress, fullUri)
If (results IsNot Nothing) Then

    Console.WriteLine("RequestUri:")
    Console.WriteLine(results.RequestUri)
End If
'Code output:
'RequestUri:
'http://localhost/weather/WA/Seattle?forecast=today

UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast=today");
Uri baseAddress = new Uri("http://localhost");
Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

// Match a URI to a template
UriTemplateMatch results = template.Match(baseAddress, fullUri);
if (results != null)
{
    Console.WriteLine("RequestUri:");
    Console.WriteLine(results.RequestUri);
}
// Code output:
// RequestUri:
// http://localhost/weather/WA/Seattle?forecast=today

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 类
UriTemplateMatch 成员
System 命名空间


UriTemplateMatch ..::.Template 属性

UriTemplateMatch
.
.
::
.
Template 属性
UriTemplateMatch 类

获取和设置与此 UriTemplateMatch 实例关联的 UriTemplate 实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Property Template As UriTemplate
    Get
    Set
public UriTemplate Template { get; set; }
public:
property UriTemplate^ Template {
    UriTemplate^ get ();
    void set (UriTemplate^ value);
}
member Template : UriTemplate with get, set

属性值

类型： System UriTemplate
一个 UriTemplate 实例。

此属性包含候选 URI 匹配的 UriTemplate。

下面的代码演示如何访问 Template 属性。

        Dim template As New UriTemplate("weather/ state}/ city}?forecast=today")
        Dim baseAddress As New Uri("http://localhost")
        Dim fullUri As New Uri("http://localhost/weather/WA/Seattle?forecast=today")

        Console.WriteLine("Matching  0} to  1}", template.ToString(), fullUri.ToString())

        'Match a URI to a template
        Dim results As UriTemplateMatch = template.Match(baseAddress, fullUri)
        If (results IsNot Nothing) Then
            Console.WriteLine("Template:")
            Console.WriteLine(results.Template)
        End If
        'Code output:
        'Template:
        'weather/ state}/ city}?forecast=today

            UriTemplate template = new UriTemplate("weather/{state}/{city}?forecast=today");
            Uri baseAddress = new Uri("http://localhost");
            Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

            Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

            // Match a URI to a template
            UriTemplateMatch results = template.Match(baseAddress, fullUri);
            if (results != null)
            {
                Console.WriteLine("Template:");
                Console.WriteLine(results.Template);
            }
            // Code output:
            // Template:
            // weather/{state}/{city}?forecast=today

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 类
UriTemplateMatch 成员
System 命名空间


UriTemplateMatch ..::.WildcardPathSegments 属性

UriTemplateMatch
.
.
::
.
WildcardPathSegments 属性
UriTemplateMatch 类

获取 URI 模板中由通配符匹配的路径段的集合。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property WildcardPathSegments As Collection(Of String)
    Get
public Collection<string> WildcardPathSegments { get; }
public:
property Collection<String^>^ WildcardPathSegments {
    Collection<String^>^ get ();
}
member WildcardPathSegments : Collection<string>

属性值

类型： System.Collections.ObjectModel Collection
<
(Of
<
(
String
>
)
>
)

URI 模板中由通配符匹配的路径段的集合。

下面的代码演示如何访问 WildcardPathSegments 属性。

UriTemplate template = new UriTemplate("weather/{state}/*?forecast=today");
Uri baseAddress = new Uri("http://localhost");
Uri fullUri = new Uri("http://localhost/weather/WA/Seattle?forecast=today");

Console.WriteLine("Matching {0} to {1}", template.ToString(), fullUri.ToString());

// Match a URI to a template
UriTemplateMatch results = template.Match(baseAddress, fullUri);
if (results != null)
{
    Console.WriteLine("WildcardPathSegments:");
    foreach (string segment in results.WildcardPathSegments)
    {
        Console.WriteLine("     {0}", segment);
    }
    Console.WriteLine();
}
// Code output:
// WildcardPathSegments:
//   seattle

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatch 类
UriTemplateMatch 成员
System 命名空间


UriTemplateMatchException 类

UriTemplateMatchException 类
成员

表示将 Uri 与 UriTemplateTable 匹配时发生的错误。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
<SerializableAttribute> _
Public Class UriTemplateMatchException _
    Inherits SystemException
[SerializableAttribute]
public class UriTemplateMatchException : SystemException
[SerializableAttribute]
public ref class UriTemplateMatchException : public SystemException
[<SerializableAttribute>]
type UriTemplateMatchException =
    class
        inherit SystemException
    end

System System..::.UriTemplateMatchExceptionUriTemplateMatchException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatchException 成员
System 命名空间


UriTemplateMatchException 成员

UriTemplateMatchException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateMatchException 类

表示将 Uri 与 UriTemplateTable 匹配时发生的错误。

UriTemplateMatchException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UriTemplateMatchException 类
System 命名空间


UriTemplateMatchException 构造函数

UriTemplateMatchException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateMatchException 类

初始化 UriTemplateMatchException 类的新实例。

名称 说明
页首

参考

UriTemplateMatchException 类
UriTemplateMatchException 成员
System 命名空间


UriTemplateMatchException 构造函数

UriTemplateMatchException 构造函数
UriTemplateMatchException 类

初始化 UriTemplateMatchException 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New
public UriTemplateMatchException()
public:
UriTemplateMatchException()
new : unit -> UriTemplateMatchException

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatchException 类
UriTemplateMatchException 成员
UriTemplateMatchException 重载
System 命名空间


UriTemplateMatchException 构造函数 (String)

UriTemplateMatchException 构造函数 (String)
UriTemplateMatchException 类

使用指定的错误消息初始化 UriTemplateMatchException 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New ( _
    message As String _
)
public UriTemplateMatchException(
    string message
)
public:
UriTemplateMatchException(
    String^ message
)
new :
        message:string -> UriTemplateMatchException

参数

message
类型： System String
解释异常原因的错误消息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatchException 类
UriTemplateMatchException 成员
UriTemplateMatchException 重载
System 命名空间


UriTemplateMatchException 构造函数 (SerializationInfo, StreamingContext)

UriTemplateMatchException 构造函数 (SerializationInfo, StreamingContext)
UriTemplateMatchException 类

使用序列化数据初始化 UriTemplateMatchException 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected UriTemplateMatchException(
    SerializationInfo info,
    StreamingContext context
)
protected:
UriTemplateMatchException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> UriTemplateMatchException

参数

info
类型： System.Runtime.Serialization SerializationInfo
用于保存序列化数据对象的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关源或目标的上下文信息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatchException 类
UriTemplateMatchException 成员
UriTemplateMatchException 重载
System 命名空间


UriTemplateMatchException 构造函数 (String, Exception)

UriTemplateMatchException 构造函数 (String, Exception)
UriTemplateMatchException 类

使用指定错误消息和对导致此异常的内部异常的引用来初始化 UriTemplateMatchException 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public UriTemplateMatchException(
    string message,
    Exception innerException
)
public:
UriTemplateMatchException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> UriTemplateMatchException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateMatchException 类
UriTemplateMatchException 成员
UriTemplateMatchException 重载
System 命名空间


UriTemplateMatchException 方法

UriTemplateMatchException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateMatchException 类

UriTemplateMatchException 类型公开以下成员。

名称 说明
页首

参考

UriTemplateMatchException 类
System 命名空间


UriTemplateMatchException 属性

UriTemplateMatchException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateMatchException 类

UriTemplateMatchException 类型公开以下成员。

名称 说明
页首

参考

UriTemplateMatchException 类
System 命名空间


UriTemplateMatchException 事件

UriTemplateMatchException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateMatchException 类

UriTemplateMatchException 类型公开以下成员。

名称 说明
页首

参考

UriTemplateMatchException 类
System 命名空间


UriTemplateTable 类

UriTemplateTable 类
成员

一个表示一组关联 UriTemplate 对象的类。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Class UriTemplateTable
public class UriTemplateTable
public ref class UriTemplateTable
type UriTemplateTable =  class end

UriTemplateTable 是一组绑定到开发人员所选对象的关联 UriTemplate 对象。您可以通过它将候选统一资源标识符 (URI) 与集合中的模板进行匹配，然后检索与匹配的模板相关联的数据。在调用 MakeReadOnly(Boolean) 方法之前，可以更改 UriTemplateTable 的内容，调用时会发生下列其中一种类型的验证： UriTemplateTable 是一组绑定到开发人员所选对象的关联 UriTemplate 对象。您可以通过它将候选统一资源标识符 (URI) 与集合中的模板进行匹配，然后检索与匹配的模板相关联的数据。在调用 MakeReadOnly(Boolean) 方法之前，可以更改 UriTemplateTable 的内容，调用时会发生下列其中一种类型的验证： UriTemplateTable 是一组绑定到开发人员所选对象的关联 UriTemplate 对象。您可以通过它将候选统一资源标识符 (URI) 与集合中的模板进行匹配，然后检索与匹配的模板相关联的数据。在调用 MakeReadOnly(Boolean) 方法之前，可以更改 UriTemplateTable 的内容，调用时会发生下列其中一种类型的验证：

  • 如果在调用 MakeReadOnly(Boolean) 时传入 false，则 UriTemplateTable 会检查以确保表中没有多个结构等效的模板。如果找到这样的模板，则会引发异常。如果想要确保只有一个模板与传入的 URI 匹配，则可将此验证类型与 MatchSingle(Uri) 结合使用。 如果在调用 MakeReadOnly(Boolean) 时传入 false，则 UriTemplateTable 会检查以确保表中没有多个结构等效的模板。如果找到这样的模板，则会引发异常。如果想要确保只有一个模板与传入的 URI 匹配，则可将此验证类型与 MatchSingle(Uri) 结合使用。 如果在调用 MakeReadOnly(Boolean) 时传入 false，则 UriTemplateTable 会检查以确保表中没有多个结构等效的模板。如果找到这样的模板，则会引发异常。如果想要确保只有一个模板与传入的 URI 匹配，则可将此验证类型与 MatchSingle(Uri) 结合使用。

  • 如果在调用 MakeReadOnly(Boolean) 时传入 true，则 UriTemplateTable 中可能包含多个结构等效的模板。但是，模板中的所有查询字符串必须无歧义；您可以使用相同的查询字符串。有关以下内容的更多信息 有歧义查询字符串的更多信息，请参见 UriTemplate and UriTemplateTable。 如果在调用 MakeReadOnly(Boolean) 时传入 true，则 UriTemplateTable 中可能包含多个结构等效的模板。但是，模板中的所有查询字符串必须无歧义；您可以使用相同的查询字符串。有关以下内容的更多信息 有歧义查询字符串的更多信息，请参见 UriTemplate and UriTemplateTable。 如果在调用 MakeReadOnly(Boolean) 时传入 true，则 UriTemplateTable 中可能包含多个结构等效的模板。但是，模板中的所有查询字符串必须无歧义；您可以使用相同的查询字符串。有关以下内容的更多信息 有歧义查询字符串的更多信息，请参见 UriTemplate and UriTemplateTable。

下面的代码演示如何创建 UriTemplateTable，对其进行填充，并使用它与候选 Uri 进行匹配。

        Dim prefix As New Uri("http://localhost/")

        ' Create a series of templates
        Dim weatherByCity As New UriTemplate("weather/ state}/ city}")
        Dim weatherByCountry As New UriTemplate("weather/ country}/ village}")
        Dim weatherByState As New UriTemplate("weather/ state}")
        Dim traffic As New UriTemplate("traffic/*")
        Dim wildcard As New UriTemplate("*")

        ' Create a template table
        Dim table As New UriTemplateTable(prefix)
        ' Add each template to the table with some associated data
        table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
        table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
        table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
        table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

        table.MakeReadOnly(True)
        Console.WriteLine("KeyValuePairs:")
        For Each keyPair As KeyValuePair(Of UriTemplate, Object) In table.KeyValuePairs
            Console.WriteLine("     0},  1}", keyPair.Key, keyPair.Value)
        Next

        Console.WriteLine()

        ' Call MatchSingle to retrieve some match results:
        Dim results As System.Collections.Generic.ICollection(Of UriTemplateMatch) = Nothing
        Dim weatherInSeattle As Uri = New Uri("http://localhost/weather/Washington/Seattle")

        results = table.Match(weatherInSeattle)
        If results IsNot Nothing Then
            Console.WriteLine("Matching templates:")
            For Each match As UriTemplateMatch In results
                Console.WriteLine("    0}", match.Template)
            Next
        End If

Uri prefix = new Uri("http://localhost/");

//Create a series of templates
UriTemplate weatherByCity  = new UriTemplate("weather/ state}/ city}");
UriTemplate weatherByCountry = new UriTemplate("weather/ country}/ village}");
UriTemplate weatherByState = new UriTemplate("weather/ state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Create a template table
UriTemplateTable table = new UriTemplateTable(prefix);
//Add each template to the table with some associated data
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

table.MakeReadOnly(true);
Console.WriteLine("KeyValuePairs:");
foreach (KeyValuePair<UriTemplate, Object> keyPair in table.KeyValuePairs)
{
    Console.WriteLine("     0},  1}", keyPair.Key, keyPair.Value);
}

Console.WriteLine();

//Call MatchSingle to retrieve some match results:
ICollection<UriTemplateMatch> results = null;
Uri weatherInSeattle = new Uri("http://localhost/weather/Washington/Seattle");

results = table.Match(weatherInSeattle);
if( results != null)
{
    Console.WriteLine("Matching templates:");
    foreach (UriTemplateMatch match in results)
    {
        Console.WriteLine("    0}", match.Template);
    }
}

System System..::.UriTemplateTableUriTemplateTable
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 成员
System 命名空间


UriTemplateTable 成员

UriTemplateTable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateTable 类

一个表示一组关联 UriTemplate 对象的类。

UriTemplateTable 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UriTemplateTable 类
System 命名空间


UriTemplateTable 构造函数

UriTemplateTable 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateTable 类

初始化 UriTemplateTable 类的新实例。

名称 说明
页首

参考

UriTemplateTable 类
UriTemplateTable 成员
System 命名空间


UriTemplateTable 构造函数

UriTemplateTable 构造函数
UriTemplateTable 类

初始化 UriTemplateTable 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New
public UriTemplateTable()
public:
UriTemplateTable()
new : unit -> UriTemplateTable

下面的示例演示如何实例化 UriTemplateTable 类。

Dim prefix As New Uri("http://localhost/")

' Create a series of templates
Dim weatherByCity As New UriTemplate("weather/ state}/ city}")
Dim weatherByCountry As New UriTemplate("weather/ country}/ village}")
Dim weatherByState As New UriTemplate("weather/ state}")
Dim traffic As New UriTemplate("traffic/*")
Dim wildcard As New UriTemplate("*")

' Create a template table
Dim table As New UriTemplateTable(prefix)
' Add each template to the table with some associated data
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

table.MakeReadOnly(True)

Uri prefix = new Uri("http://localhost/");

//Create a series of templates
UriTemplate weatherByCity  = new UriTemplate("weather/ state}/ city}");
UriTemplate weatherByCountry = new UriTemplate("weather/ country}/ village}");
UriTemplate weatherByState = new UriTemplate("weather/ state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Create a template table
UriTemplateTable table = new UriTemplateTable(prefix);
//Add each template to the table with some associated data
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

table.MakeReadOnly(true);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
UriTemplateTable 重载
System 命名空间


UriTemplateTable 构造函数 (Uri)

UriTemplateTable 构造函数 (Uri)
UriTemplateTable 类

使用指定的基址初始化 UriTemplateTable 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New ( _
    baseAddress As Uri _
)
public UriTemplateTable(
    Uri baseAddress
)
public:
UriTemplateTable(
    Uri^ baseAddress
)
new :
        baseAddress:Uri -> UriTemplateTable

参数

baseAddress
类型： System Uri
一个包含基址的 Uri 实例。

下面的示例演示如何调用此构造函数。

Dim prefix As New Uri("http://localhost/")

' Create a series of templates
Dim weatherByCity As New UriTemplate("weather/ state}/ city}")
Dim weatherByCountry As New UriTemplate("weather/ country}/ village}")
Dim weatherByState As New UriTemplate("weather/ state}")
Dim traffic As New UriTemplate("traffic/*")
Dim wildcard As New UriTemplate("*")

' Create a template table
Dim table As New UriTemplateTable(prefix)
' Add each template to the table with some associated data
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

table.MakeReadOnly(True)

Uri prefix = new Uri("http://localhost/");

//Create a series of templates
UriTemplate weatherByCity  = new UriTemplate("weather/ state}/ city}");
UriTemplate weatherByCountry = new UriTemplate("weather/ country}/ village}");
UriTemplate weatherByState = new UriTemplate("weather/ state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Create a template table
UriTemplateTable table = new UriTemplateTable(prefix);
//Add each template to the table with some associated data
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

table.MakeReadOnly(true);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
UriTemplateTable 重载
System 命名空间


UriTemplateTable 构造函数 (IEnumerable <(Of <(KeyValuePair <(Of <(UriTemplate, Object >)>) >)>))

UriTemplateTable 构造函数 (IEnumerable
<
(Of
<
(
KeyValuePair
<
(Of
<
(
UriTemplate, Object
>
)
>
)
>
)
>
)
)
UriTemplateTable 类

使用指定的键/值对集合初始化 UriTemplateTable 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New ( _
    keyValuePairs As IEnumerable(Of KeyValuePair(Of UriTemplate, Object)) _
)
public UriTemplateTable(
    IEnumerable<KeyValuePair<UriTemplate, Object>> keyValuePairs
)
public:
UriTemplateTable(
    IEnumerable<KeyValuePair<UriTemplate^, Object^>>^ keyValuePairs
)
new :
        keyValuePairs:IEnumerable<KeyValuePair<UriTemplate, Object>> -> UriTemplateTable

参数

keyValuePairs
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
KeyValuePair
<
(Of
<
(
UriTemplate, Object
>
)
>
)
>
)
>
)

一个由 URI 模板和关联数据构成的键/值对集合。

下面的示例演示如何实例化 UriTemplateTable 类。

' Create a series of templates
Dim weatherByCity As New UriTemplate("weather/{state}/{city}")
Dim weatherByCountry As New UriTemplate("weather/{country}/{village}")
Dim weatherByState As New UriTemplate("weather/{state}")
Dim traffic As New UriTemplate("traffic/*")
Dim wildcard As New UriTemplate("*")

' Add each template to the table with some associated data
Dim list As New List(Of KeyValuePair(Of UriTemplate, Object))()
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

'Create a template table
Dim table As New UriTemplateTable(list)
table.BaseAddress = New Uri("http://localhost/")
table.MakeReadOnly(True)

//Create a series of templates
UriTemplate weatherByCity = new UriTemplate("weather/{state}/{city}");
UriTemplate weatherByCountry = new UriTemplate("weather/{country}/{village}");
UriTemplate weatherByState = new UriTemplate("weather/{state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Add each template to the table with some associated data
List<KeyValuePair<UriTemplate,Object>> list = new List<KeyValuePair<UriTemplate,object>>();
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
list.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

//Create a template table
UriTemplateTable table = new UriTemplateTable(list);
table.BaseAddress = new Uri("http://localhost/");
table.MakeReadOnly(true);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
UriTemplateTable 重载
System 命名空间


UriTemplateTable 构造函数 (Uri, IEnumerable <(Of <(KeyValuePair <(Of <(UriTemplate, Object >)>) >)>))

UriTemplateTable 构造函数 (Uri, IEnumerable
<
(Of
<
(
KeyValuePair
<
(Of
<
(
UriTemplate, Object
>
)
>
)
>
)
>
)
)
UriTemplateTable 类

使用指定的基址和键/值对集合初始化 UriTemplateTable 类的新实例。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub New ( _
    baseAddress As Uri, _
    keyValuePairs As IEnumerable(Of KeyValuePair(Of UriTemplate, Object)) _
)
public UriTemplateTable(
    Uri baseAddress,
    IEnumerable<KeyValuePair<UriTemplate, Object>> keyValuePairs
)
public:
UriTemplateTable(
    Uri^ baseAddress,
    IEnumerable<KeyValuePair<UriTemplate^, Object^>>^ keyValuePairs
)
new :
        baseAddress:Uri *
        keyValuePairs:IEnumerable<KeyValuePair<UriTemplate, Object>> -> UriTemplateTable

参数

baseAddress
类型： System Uri
一个包含基址的 Uri 实例。
keyValuePairs
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
KeyValuePair
<
(Of
<
(
UriTemplate, Object
>
)
>
)
>
)
>
)

一个由 URI 模板和关联数据构成的键/值对集合。

下面的示例演示如何调用此构造函数。

Dim baseAddress As New Uri("http://localhost/")
' Create a series of templates
Dim weatherByCity = New UriTemplate("weather/{state}/{city}")
Dim weatherByCountry = New UriTemplate("weather/{country}/{village}")
Dim weatherByState = New UriTemplate("weather/{state}")
Dim traffic = New UriTemplate("traffic/*")
Dim wildcard = New UriTemplate("*")

' Add each template to the table with some associated data
Dim list As New List(Of KeyValuePair(Of UriTemplate, Object))()
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

' Create a template table
Dim table As New UriTemplateTable(baseAddress, list)
table.MakeReadOnly(True)

Uri baseAddress = new Uri("http://localhost/");
//Create a series of templates
UriTemplate weatherByCity = new UriTemplate("weather/{state}/{city}");
UriTemplate weatherByCountry = new UriTemplate("weather/{country}/{village}");
UriTemplate weatherByState = new UriTemplate("weather/{state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Add each template to the table with some associated data
List<KeyValuePair<UriTemplate, Object>> list = new List<KeyValuePair<UriTemplate, object>>();
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
list.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

//Create a template table
UriTemplateTable table = new UriTemplateTable(baseAddress, list);
table.MakeReadOnly(true);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
UriTemplateTable 重载
System 命名空间


UriTemplateTable 方法

UriTemplateTable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateTable 类

UriTemplateTable 类型公开以下成员。

名称 说明
页首

参考

UriTemplateTable 类
System 命名空间


UriTemplateTable ..::.MakeReadOnly 方法

UriTemplateTable
.
.
::
.
MakeReadOnly 方法
UriTemplateTable 类

将 UriTemplateTable 设置为只读。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Sub MakeReadOnly ( _
    allowDuplicateEquivalentUriTemplates As Boolean _
)
public void MakeReadOnly(
    bool allowDuplicateEquivalentUriTemplates
)
public:
void MakeReadOnly(
    bool allowDuplicateEquivalentUriTemplates
)
member MakeReadOnly :
        allowDuplicateEquivalentUriTemplates:bool -> unit

参数

allowDuplicateEquivalentUriTemplates
类型： System Boolean
指定是否允许 UriTemplateTable 中有重复的等效 UriTemplate 实例。

调用 MakeReadOnly(Boolean) 方法时，会发生下列某种验证类型：

  • 如果在调用 MakeReadOnly(Boolean) 时传入 false，则 UriTemplateTable 会检查以确保表中没有多个结构等效的模板。如果找到这样的模板，则会引发异常。如果想要确保只有一个模板与传入的 URI 匹配，则可将此验证类型与 MatchSingle(Uri) 结合使用。 如果在调用 MakeReadOnly(Boolean) 时传入 false，则 UriTemplateTable 会检查以确保表中没有多个结构等效的模板。如果找到这样的模板，则会引发异常。如果想要确保只有一个模板与传入的 URI 匹配，则可将此验证类型与 MatchSingle(Uri) 结合使用。 如果在调用 MakeReadOnly(Boolean) 时传入 false，则 UriTemplateTable 会检查以确保表中没有多个结构等效的模板。如果找到这样的模板，则会引发异常。如果想要确保只有一个模板与传入的 URI 匹配，则可将此验证类型与 MatchSingle(Uri) 结合使用。

  • 如果在调用 MakeReadOnly(Boolean) 时传入 true，则 UriTemplateTable 中可能包含多个结构等效的模板。但是，模板中的所有查询字符串必须无歧义；您可以使用相同的查询字符串。如果允许有多个模板与候选 URI 匹配，则可将此验证类型与 Match(Uri) 结合使用。 如果在调用 MakeReadOnly(Boolean) 时传入 true，则 UriTemplateTable 中可能包含多个结构等效的模板。但是，模板中的所有查询字符串必须无歧义；您可以使用相同的查询字符串。如果允许有多个模板与候选 URI 匹配，则可将此验证类型与 Match(Uri) 结合使用。 如果在调用 MakeReadOnly(Boolean) 时传入 true，则 UriTemplateTable 中可能包含多个结构等效的模板。但是，模板中的所有查询字符串必须无歧义；您可以使用相同的查询字符串。如果允许有多个模板与候选 URI 匹配，则可将此验证类型与 Match(Uri) 结合使用。

系统只接受对 MakeReadOnly(Boolean) 的首次调用，而会忽略后续调用，且不引发任何异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
System 命名空间


UriTemplateTable ..::.Match 方法

UriTemplateTable
.
.
::
.
Match 方法
UriTemplateTable 类

尝试将候选 Uri 与 UriTemplateTable 匹配。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function Match ( _
    uri As Uri _
) As Collection(Of UriTemplateMatch)
public Collection<UriTemplateMatch> Match(
    Uri uri
)
public:
Collection<UriTemplateMatch^>^ Match(
    Uri^ uri
)
member Match :
        uri:Uri -> Collection<UriTemplateMatch>

参数

uri
类型： System Uri
候选 URI。

返回值

类型： System.Collections.ObjectModel Collection
<
(Of
<
(
UriTemplateMatch
>
)
>
)

UriTemplateMatch 实例的集合。

此方法可能会返回多个匹配项。

下面的示例演示如何调用 Match(Uri) 方法。

Dim prefix As New Uri("http://localhost/")

' Create a series of templates
Dim weatherByCity = New UriTemplate("weather/ state}/ city}")
Dim weatherByCountry = New UriTemplate("weather/ country}/ village}")
Dim weatherByState = New UriTemplate("weather/ state}")
Dim traffic = New UriTemplate("traffic/*")
Dim wildcard = New UriTemplate("*")

' Create a template table
Dim table As New UriTemplateTable(prefix)
' Add each template to the table with some associated data
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

table.MakeReadOnly(True)

' Call Match to retrieve some match results:
Dim results As ICollection(Of UriTemplateMatch)
results = Nothing
Dim weatherInSeattle As New Uri("http://localhost/weather/Washington/Seattle")

results = table.Match(weatherInSeattle)
If (results IsNot Nothing) Then

    Console.WriteLine("Matching templates:")
    For Each match As UriTemplateMatch In results
        Console.WriteLine("    0}", match.Template)
    Next
End If

Uri prefix = new Uri("http://localhost/");

//Create a series of templates
UriTemplate weatherByCity  = new UriTemplate("weather/ state}/ city}");
UriTemplate weatherByCountry = new UriTemplate("weather/ country}/ village}");
UriTemplate weatherByState = new UriTemplate("weather/ state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Create a template table
UriTemplateTable table = new UriTemplateTable(prefix);
//Add each template to the table with some associated data
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

table.MakeReadOnly(true);

//Call Match to retrieve some match results:
ICollection<UriTemplateMatch> results = null;
Uri weatherInSeattle = new Uri("http://localhost/weather/Washington/Seattle");

results = table.Match(weatherInSeattle);
if( results != null)
{
    Console.WriteLine("Matching templates:");
    foreach (UriTemplateMatch match in results)
    {
        Console.WriteLine("    0}", match.Template);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
System 命名空间


UriTemplateTable ..::.MatchSingle 方法

UriTemplateTable
.
.
::
.
MatchSingle 方法
UriTemplateTable 类

尝试将候选 Uri 与 UriTemplateTable 匹配。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Function MatchSingle ( _
    uri As Uri _
) As UriTemplateMatch
public UriTemplateMatch MatchSingle(
    Uri uri
)
public:
UriTemplateMatch^ MatchSingle(
    Uri^ uri
)
member MatchSingle :
        uri:Uri -> UriTemplateMatch

参数

uri
类型： System Uri
候选 URI。

返回值

类型： System UriTemplateMatch
单个 UriTemplateMatch 实例。

此方法最多返回一个匹配项。如果找到多个匹配项，则会引发 UriTemplateMatchException。 此方法最多返回一个匹配项。如果找到多个匹配项，则会引发 UriTemplateMatchException。

下面的示例演示如何调用 MatchSingle(Uri) 方法。

Dim prefix As New Uri("http://localhost/")

' Create a series of templates
Dim weatherByCity As New UriTemplate("weather/ state}/ city}")
Dim weatherByCountry As New UriTemplate("weather/ country}/ village}")
Dim weatherByState As New UriTemplate("weather/ state}")
Dim traffic As New UriTemplate("traffic/*")
Dim wildcard = New UriTemplate("*")

' Create a template table
Dim table As New UriTemplateTable(prefix)
' Add each template to the table with some associated data
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

table.MakeReadOnly(True)

' Call MatchSingle to retrieve some match results:
Dim weatherInSeattle As New Uri("http://localhost/weather/Washington/Seattle")
Dim match As UriTemplateMatch
match = table.MatchSingle(weatherInSeattle)

Console.WriteLine("Matching template: {0}", match.Template.ToString())

Uri prefix = new Uri("http://localhost/");

//Create a series of templates
UriTemplate weatherByCity = new UriTemplate("weather/ state}/ city}");
UriTemplate weatherByCountry = new UriTemplate("weather/ country}/ village}");
UriTemplate weatherByState = new UriTemplate("weather/ state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Create a template table
UriTemplateTable table = new UriTemplateTable(prefix);
//Add each template to the table with some associated data
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

table.MakeReadOnly(true);

//Call MatchSingle to retrieve some match results:
Uri weatherInSeattle = new Uri("http://localhost/weather/Washington/Seattle");
UriTemplateMatch match = table.MatchSingle(weatherInSeattle);

Console.WriteLine("Matching template: {0}", match.Template.ToString());

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
System 命名空间


UriTemplateTable 属性

UriTemplateTable 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTemplateTable 类

UriTemplateTable 类型公开以下成员。

名称 说明
页首

参考

UriTemplateTable 类
System 命名空间


UriTemplateTable ..::.BaseAddress 属性

UriTemplateTable
.
.
::
.
BaseAddress 属性
UriTemplateTable 类

获取和设置 UriTemplateTable 实例的基址。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public Property BaseAddress As Uri
    Get
    Set
public Uri BaseAddress { get; set; }
public:
property Uri^ BaseAddress {
    Uri^ get ();
    void set (Uri^ value);
}
member BaseAddress : Uri with get, set

属性值

类型： System Uri
一个包含基址的 Uri。

BaseAddress 属性仅可以在调用 MakeReadOnly(Boolean)、Match(Uri) 或 MatchSingle(Uri) 之前设置，否则会引发 InvalidOperationException。

下面的示例演示如何访问 BaseAddress 属性。

' Create a series of templates
Dim weatherByCity As New UriTemplate("weather/{state}/{city}")
Dim weatherByCountry As New UriTemplate("weather/{country}/{village}")
Dim weatherByState As New UriTemplate("weather/{state}")
Dim traffic As New UriTemplate("traffic/*")
Dim wildcard As New UriTemplate("*")

' Add each template to the table with some associated data
Dim list As New List(Of KeyValuePair(Of UriTemplate, Object))()
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

'Create a template table
Dim table As New UriTemplateTable(list)
table.BaseAddress = New Uri("http://localhost/")
table.MakeReadOnly(True)

//Create a series of templates
UriTemplate weatherByCity = new UriTemplate("weather/{state}/{city}");
UriTemplate weatherByCountry = new UriTemplate("weather/{country}/{village}");
UriTemplate weatherByState = new UriTemplate("weather/{state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Add each template to the table with some associated data
List<KeyValuePair<UriTemplate,Object>> list = new List<KeyValuePair<UriTemplate,object>>();
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
list.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

//Create a template table
UriTemplateTable table = new UriTemplateTable(list);
table.BaseAddress = new Uri("http://localhost/");
table.MakeReadOnly(true);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
System 命名空间


UriTemplateTable ..::.IsReadOnly 属性

UriTemplateTable
.
.
::
.
IsReadOnly 属性
UriTemplateTable 类

获取一个值，该值指定 UriTemplateTable 是否为只读。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property IsReadOnly As Boolean
    Get
public bool IsReadOnly { get; }
public:
property bool IsReadOnly {
    bool get ();
}
member IsReadOnly : bool

属性值

类型： System Boolean
如果 UriTemplateTable 属性是只读属性，则为 true；否则为 false。

调用 MakeReadOnly(Boolean) 方法后，UriTemplateTable 为只读。

下面的示例演示如何访问 IsReadOnly 属性。

Dim baseAddress As New Uri("http://localhost/")
' Create a series of templates
Dim weatherByCity = New UriTemplate("weather/{state}/{city}")
Dim weatherByCountry = New UriTemplate("weather/{country}/{village}")
Dim weatherByState = New UriTemplate("weather/{state}")
Dim traffic = New UriTemplate("traffic/*")
Dim wildcard = New UriTemplate("*")

' Add each template to the table with some associated data
Dim list As New List(Of KeyValuePair(Of UriTemplate, Object))()
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
list.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

' Create a template table
Dim table As New UriTemplateTable(baseAddress, list)
table.MakeReadOnly(True)
If (table.IsReadOnly) Then
    Console.WriteLine("UriTemplateTable is read only")
Else
    Console.WriteLine("UriTemplateTable is not read only")
End If

Uri baseAddress = new Uri("http://localhost/");
//Create a series of templates
UriTemplate weatherByCity = new UriTemplate("weather/{state}/{city}");
UriTemplate weatherByCountry = new UriTemplate("weather/{country}/{village}");
UriTemplate weatherByState = new UriTemplate("weather/{state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Add each template to the table with some associated data
List<KeyValuePair<UriTemplate, Object>> list = new List<KeyValuePair<UriTemplate, object>>();
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
list.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
list.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

//Create a template table
UriTemplateTable table = new UriTemplateTable(baseAddress, list);
table.MakeReadOnly(true);
if (table.IsReadOnly)
    Console.WriteLine("UriTemplateTable is read only");
else
    Console.WriteLine("UriTemplateTable is not read only");

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
System 命名空间


UriTemplateTable ..::.KeyValuePairs 属性

UriTemplateTable
.
.
::
.
KeyValuePairs 属性
UriTemplateTable 类

获取由 UriTemplate 对象及其关联数据构成的键/值对集合。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property KeyValuePairs As IList(Of KeyValuePair(Of UriTemplate, Object))
    Get
public IList<KeyValuePair<UriTemplate, Object>> KeyValuePairs { get; }
public:
property IList<KeyValuePair<UriTemplate^, Object^>>^ KeyValuePairs {
    IList<KeyValuePair<UriTemplate^, Object^>>^ get ();
}
member KeyValuePairs : IList<KeyValuePair<UriTemplate, Object>>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
KeyValuePair
<
(Of
<
(
UriTemplate, Object
>
)
>
)
>
)
>
)

一个键/值对的集合，由 UriTemplate 对象及其关联的数据构成。

表中每个 UriTemplate 实例都有与之关联的数据。KeyValuePairs 属性包含键值对的集合，其中键是 UriTemplate 实例，值是与 UriTemplate 关联的数据。值仅可以在调用 MakeReadOnly(Boolean)、Match(Uri) 或 MatchSingle(Uri) 之前添加到 KeyValuePairs 属性，否则会引发 NotSupportedException。 表中每个 UriTemplate 实例都有与之关联的数据。KeyValuePairs 属性包含键值对的集合，其中键是 UriTemplate 实例，值是与 UriTemplate 关联的数据。值仅可以在调用 MakeReadOnly(Boolean)、Match(Uri) 或 MatchSingle(Uri) 之前添加到 KeyValuePairs 属性，否则会引发 NotSupportedException。 表中每个 UriTemplate 实例都有与之关联的数据。KeyValuePairs 属性包含键值对的集合，其中键是 UriTemplate 实例，值是与 UriTemplate 关联的数据。值仅可以在调用 MakeReadOnly(Boolean)、Match(Uri) 或 MatchSingle(Uri) 之前添加到 KeyValuePairs 属性，否则会引发 NotSupportedException。

下面的示例演示如何访问 KeyValuePairs 属性。

Dim prefix As New Uri("http://localhost/")

' Create a series of templates
Dim weatherByCity = New UriTemplate("weather/ state}/ city}")
Dim weatherByCountry = New UriTemplate("weather/ country}/ village}")
Dim weatherByState = New UriTemplate("weather/ state}")
Dim traffic = New UriTemplate("traffic/*")
Dim wildcard = New UriTemplate("*")

' Create a template table
Dim table As New UriTemplateTable(prefix)
' Add each template to the table with some associated data
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCity, "weatherByCity"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByCountry, "weatherByCountry"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(weatherByState, "weatherByState"))
table.KeyValuePairs.Add(New KeyValuePair(Of UriTemplate, Object)(traffic, "traffic"))

table.MakeReadOnly(True)

Console.WriteLine("KeyValuePairs:")
For Each keyPair As KeyValuePair(Of UriTemplate, Object) In table.KeyValuePairs
    Console.WriteLine("     0},  1}", keyPair.Key, keyPair.Value)
Next

Console.WriteLine()

Uri prefix = new Uri("http://localhost/");

//Create a series of templates
UriTemplate weatherByCity = new UriTemplate("weather/ state}/ city}");
UriTemplate weatherByCountry = new UriTemplate("weather/ country}/ village}");
UriTemplate weatherByState = new UriTemplate("weather/ state}");
UriTemplate traffic = new UriTemplate("traffic/*");
UriTemplate wildcard = new UriTemplate("*");

//Create a template table
UriTemplateTable table = new UriTemplateTable(prefix);
//Add each template to the table with some associated data
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCity, "weatherByCity"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByCountry, "weatherByCountry"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(weatherByState, "weatherByState"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(traffic, "traffic"));

table.MakeReadOnly(true);

Console.WriteLine("KeyValuePairs:");
foreach (KeyValuePair<UriTemplate, Object> keyPair in table.KeyValuePairs)
{
    Console.WriteLine("     0},  1}", keyPair.Key, keyPair.Value);
}

Console.WriteLine();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

UriTemplateTable 类
UriTemplateTable 成员
System 命名空间


UriTemplateTable ..::.OriginalBaseAddress 属性

UriTemplateTable
.
.
::
.
OriginalBaseAddress 属性
UriTemplateTable 类

获取原始基址。

命名空间： System
程序集： System.ServiceModel（在 System.ServiceModel.dll 中）
Public ReadOnly Property OriginalBaseAddress As Uri
    Get
public Uri OriginalBaseAddress { get; }
public:
property Uri^ OriginalBaseAddress {
    Uri^ get ();
}
member OriginalBaseAddress : Uri

属性值

类型： System Uri
原始基址。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

UriTemplateTable 类
UriTemplateTable 成员
System 命名空间


UriTypeConverter 类

UriTypeConverter 类
成员

将 String 类型转换为 Uri 类型，反之亦然。

命名空间： System
程序集： System（在 System.dll 中）
Public Class UriTypeConverter _
    Inherits TypeConverter
public class UriTypeConverter : TypeConverter
public ref class UriTypeConverter : public TypeConverter
type UriTypeConverter =
    class
        inherit TypeConverter
    end

System System..::.UriTypeConverterUriTypeConverter
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriTypeConverter 成员
System 命名空间


UriTypeConverter 成员

UriTypeConverter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

将 String 类型转换为 Uri 类型，反之亦然。

UriTypeConverter 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

UriTypeConverter 类
System 命名空间


UriTypeConverter 构造函数

UriTypeConverter 构造函数
UriTypeConverter 类

初始化 UriTypeConverter 类的新实例。

命名空间： System
程序集： System（在 System.dll 中）
Public Sub New
public UriTypeConverter()
public:
UriTypeConverter()
new : unit -> UriTypeConverter

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter 方法

UriTypeConverter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

UriTypeConverter 类型公开以下成员。

名称 说明
页首

参考

UriTypeConverter 类
System 命名空间


UriTypeConverter ..::.CanConvertFrom 方法

UriTypeConverter
.
.
::
.
CanConvertFrom 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

返回该转换器是否可以将一种类型的对象转换为此转换器的类型。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.CanConvertFrom 方法 (ITypeDescriptorContext, Type)

UriTypeConverter
.
.
::
.
CanConvertFrom 方法 (ITypeDescriptorContext, Type)
UriTypeConverter 类

返回该转换器是否可以将给定类型的对象转换为此转换器的类型。

命名空间： System
程序集： System（在 System.dll 中）
Public Overrides Function CanConvertFrom ( _
    context As ITypeDescriptorContext, _
    sourceType As Type _
) As Boolean
public override bool CanConvertFrom(
    ITypeDescriptorContext context,
    Type sourceType
)
public:
virtual bool CanConvertFrom(
    ITypeDescriptorContext^ context,
    Type^ sourceType
) override
abstract CanConvertFrom :
        context:ITypeDescriptorContext *
        sourceType:Type -> bool
override CanConvertFrom :
        context:ITypeDescriptorContext *
        sourceType:Type -> bool

参数

context
类型： System.ComponentModel ITypeDescriptorContext
ITypeDescriptorContext，提供格式上下文。
sourceType
类型： System Type
一个 Type，表示要转换的类型。

返回值

类型： System Boolean
如果 sourceType 是 String 类型，或者可以从 sourceType 分配 Uri 类型，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | sourceType 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriTypeConverter 类
UriTypeConverter 成员
CanConvertFrom 重载
System 命名空间


UriTypeConverter ..::.CanConvertTo 方法

UriTypeConverter
.
.
::
.
CanConvertTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

返回此转换器是否可将该对象转换为指定的类型。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.CanConvertTo 方法 (ITypeDescriptorContext, Type)

UriTypeConverter
.
.
::
.
CanConvertTo 方法 (ITypeDescriptorContext, Type)
UriTypeConverter 类

返回此转换器是否可以使用指定的上下文将该对象转换为指定的类型。

命名空间： System
程序集： System（在 System.dll 中）
Public Overrides Function CanConvertTo ( _
    context As ITypeDescriptorContext, _
    destinationType As Type _
) As Boolean
public override bool CanConvertTo(
    ITypeDescriptorContext context,
    Type destinationType
)
public:
virtual bool CanConvertTo(
    ITypeDescriptorContext^ context,
    Type^ destinationType
) override
abstract CanConvertTo :
        context:ITypeDescriptorContext *
        destinationType:Type -> bool
override CanConvertTo :
        context:ITypeDescriptorContext *
        destinationType:Type -> bool

参数

context
类型： System.ComponentModel ITypeDescriptorContext
System.ComponentModel..::.ITypeDescriptorContext，提供格式上下文。
destinationType
类型： System Type
一个 Type，表示要转换到的类型。

返回值

类型： System Boolean
如果 destinationType 为 System.ComponentModel.Design.Serialization..::.InstanceDescriptor、String 或 Uri 类型，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriTypeConverter 类
UriTypeConverter 成员
CanConvertTo 重载
System 命名空间


UriTypeConverter ..::.ConvertFrom 方法

UriTypeConverter
.
.
::
.
ConvertFrom 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

将给定值转换为此转换器的类型。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.ConvertFrom 方法 (ITypeDescriptorContext, CultureInfo, Object)

UriTypeConverter
.
.
::
.
ConvertFrom 方法 (ITypeDescriptorContext, CultureInfo, Object)
UriTypeConverter 类

使用指定的上下文和区域性信息将给定的对象转换为此转换器的类型。

命名空间： System
程序集： System（在 System.dll 中）
Public Overrides Function ConvertFrom ( _
    context As ITypeDescriptorContext, _
    culture As CultureInfo, _
    value As Object _
) As Object
public override Object ConvertFrom(
    ITypeDescriptorContext context,
    CultureInfo culture,
    Object value
)
public:
virtual Object^ ConvertFrom(
    ITypeDescriptorContext^ context,
    CultureInfo^ culture,
    Object^ value
) override
abstract ConvertFrom :
        context:ITypeDescriptorContext *
        culture:CultureInfo *
        value:Object -> Object
override ConvertFrom :
        context:ITypeDescriptorContext *
        culture:CultureInfo *
        value:Object -> Object

参数

context
类型： System.ComponentModel ITypeDescriptorContext
ITypeDescriptorContext，提供格式上下文。
culture
类型： System.Globalization CultureInfo
用作当前区域性的 CultureInfo。
value
类型： System Object
要转换的 Object。

返回值

类型： System Object
表示转换的 value 的 Object。
异常 | 条件
NotSupportedException | 不能执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriTypeConverter 类
UriTypeConverter 成员
ConvertFrom 重载
System 命名空间


UriTypeConverter ..::.ConvertFromInvariantString 方法

UriTypeConverter
.
.
::
.
ConvertFromInvariantString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

使用不变区域性将该值转换为此转换器的类型。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.ConvertFromString 方法

UriTypeConverter
.
.
::
.
ConvertFromString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

将指定文本转换为对象。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.ConvertTo 方法

UriTypeConverter
.
.
::
.
ConvertTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

将给定值对象转换为指定的类型。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.ConvertTo 方法 (ITypeDescriptorContext, CultureInfo, Object, Type)

UriTypeConverter
.
.
::
.
ConvertTo 方法 (ITypeDescriptorContext, CultureInfo, Object, Type)
UriTypeConverter 类

使用指定的上下文和区域性信息将给定的值对象转换为指定的类型。

命名空间： System
程序集： System（在 System.dll 中）
Public Overrides Function ConvertTo ( _
    context As ITypeDescriptorContext, _
    culture As CultureInfo, _
    value As Object, _
    destinationType As Type _
) As Object
public override Object ConvertTo(
    ITypeDescriptorContext context,
    CultureInfo culture,
    Object value,
    Type destinationType
)
public:
virtual Object^ ConvertTo(
    ITypeDescriptorContext^ context,
    CultureInfo^ culture,
    Object^ value,
    Type^ destinationType
) override
abstract ConvertTo :
        context:ITypeDescriptorContext *
        culture:CultureInfo *
        value:Object *
        destinationType:Type -> Object
override ConvertTo :
        context:ITypeDescriptorContext *
        culture:CultureInfo *
        value:Object *
        destinationType:Type -> Object

参数

context
类型： System.ComponentModel ITypeDescriptorContext
ITypeDescriptorContext，提供格式上下文。
culture
类型： System.Globalization CultureInfo
CultureInfo。如果传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则采用当前区域性。 CultureInfo。如果传递 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则采用当前区域性。
value
类型： System Object
要转换的 Object。
destinationType
类型： System Type
value 参数要转换成的 Type。

返回值

类型： System Object
表示转换的 value 的 Object。
异常 | 条件
ArgumentNullException | destinationType 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 不能执行转换。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriTypeConverter 类
UriTypeConverter 成员
ConvertTo 重载
System 命名空间


UriTypeConverter ..::.ConvertToInvariantString 方法

UriTypeConverter
.
.
::
.
ConvertToInvariantString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

将指定值转换为区域性不变的字符串表示形式。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.ConvertToString 方法

UriTypeConverter
.
.
::
.
ConvertToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

将指定值转换为字符串表示形式。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.CreateInstance 方法

UriTypeConverter
.
.
::
.
CreateInstance 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

在给定 Object 的一组属性值的情况下重新创建该对象。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.GetCreateInstanceSupported 方法

UriTypeConverter
.
.
::
.
GetCreateInstanceSupported 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

返回更改此对象的值是否求调用 CreateInstance 方法来创建新值。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.GetProperties 方法

UriTypeConverter
.
.
::
.
GetProperties 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

返回由值参数指定的数组类型的属性集合。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.GetPropertiesSupported 方法

UriTypeConverter
.
.
::
.
GetPropertiesSupported 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

返回此对象是否支持属性。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.GetStandardValues 方法

UriTypeConverter
.
.
::
.
GetStandardValues 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

返回此类型转换器设计用于的数据类型的标准值集合。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.GetStandardValuesExclusive 方法

UriTypeConverter
.
.
::
.
GetStandardValuesExclusive 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

返回从 GetStandardValues 返回的标准值的集合是否为独占列表。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.GetStandardValuesSupported 方法

UriTypeConverter
.
.
::
.
GetStandardValuesSupported 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

返回此对象是否支持可以从列表中选取的标准值集。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.IsValid 方法

UriTypeConverter
.
.
::
.
IsValid 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UriTypeConverter 类

返回给定值对象对于此类型是否有效。

名称 说明
页首

参考

UriTypeConverter 类
UriTypeConverter 成员
System 命名空间


UriTypeConverter ..::.IsValid 方法 (ITypeDescriptorContext, Object)

UriTypeConverter
.
.
::
.
IsValid 方法 (ITypeDescriptorContext, Object)
UriTypeConverter 类

返回给定值对象是 Uri，还是可以从该对象创建 Uri。

命名空间： System
程序集： System（在 System.dll 中）
Public Overrides Function IsValid ( _
    context As ITypeDescriptorContext, _
    value As Object _
) As Boolean
public override bool IsValid(
    ITypeDescriptorContext context,
    Object value
)
public:
virtual bool IsValid(
    ITypeDescriptorContext^ context,
    Object^ value
) override
abstract IsValid :
        context:ITypeDescriptorContext *
        value:Object -> bool
override IsValid :
        context:ITypeDescriptorContext *
        value:Object -> bool

参数

context
类型： System.ComponentModel ITypeDescriptorContext
ITypeDescriptorContext，提供格式上下文。
value
类型： System Object
要测试其有效性的 Object。

返回值

类型： System Boolean
如果 value 是 Uri，或者是可以从中创建 Uri 的 String，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

UriTypeConverter 类
UriTypeConverter 成员
IsValid 重载
System 命名空间


ValueType 类

ValueType 类
成员

提供值类型的基类。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class ValueType
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class ValueType
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ValueType abstract
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ValueType =  class end

ValueType 用更合适的值类型实现重写 Object 中的虚方法。请参见从 ValueType 继承的 Enum。 ValueType 用更合适的值类型实现重写 Object 中的虚方法。请参见从 ValueType 继承的 Enum。

数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的，要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时，就在堆上分配一个包装（该包装能使值类型看上去像引用对象一样），并且将该值类型的值复制给它。该包装被加上标记，以便系统知道它包含一个值类型。这个进程称为装箱，其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。 数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的，要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时，就在堆上分配一个包装（该包装能使值类型看上去像引用对象一样），并且将该值类型的值复制给它。该包装被加上标记，以便系统知道它包含一个值类型。这个进程称为装箱，其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。 数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的，要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时，就在堆上分配一个包装（该包装能使值类型看上去像引用对象一样），并且将该值类型的值复制给它。该包装被加上标记，以便系统知道它包含一个值类型。这个进程称为装箱，其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。 数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的，要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时，就在堆上分配一个包装（该包装能使值类型看上去像引用对象一样），并且将该值类型的值复制给它。该包装被加上标记，以便系统知道它包含一个值类型。这个进程称为装箱，其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。 数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的，要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时，就在堆上分配一个包装（该包装能使值类型看上去像引用对象一样），并且将该值类型的值复制给它。该包装被加上标记，以便系统知道它包含一个值类型。这个进程称为装箱，其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。 数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的，要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时，就在堆上分配一个包装（该包装能使值类型看上去像引用对象一样），并且将该值类型的值复制给它。该包装被加上标记，以便系统知道它包含一个值类型。这个进程称为装箱，其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。 数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的，要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时，就在堆上分配一个包装（该包装能使值类型看上去像引用对象一样），并且将该值类型的值复制给它。该包装被加上标记，以便系统知道它包含一个值类型。这个进程称为装箱，其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。 数据类型分隔为值类型和引用类型。值类型要么是堆栈分配的，要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时，就在堆上分配一个包装（该包装能使值类型看上去像引用对象一样），并且将该值类型的值复制给它。该包装被加上标记，以便系统知道它包含一个值类型。这个进程称为装箱，其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。

System System..::.ValueTypeValueType

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ValueType 成员
System 命名空间
Object
Enum


ValueType 成员

ValueType 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ValueType 类

提供值类型的基类。

ValueType 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ValueType 类
System 命名空间


ValueType 构造函数

ValueType 构造函数
ValueType 类

初始化 ValueType 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected ValueType()
protected:
ValueType()
new : unit -> ValueType

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ValueType 类
ValueType 成员
System 命名空间


ValueType 方法

ValueType 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ValueType 类

ValueType 类型公开以下成员。

名称 说明
页首

参考

ValueType 类
System 命名空间


ValueType ..::.Equals 方法

ValueType
.
.
::
.
Equals 方法
ValueType 类

指示此实例与指定对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要比较的另一个对象。

返回值

类型： System Boolean
如果 obj 和该实例具有相同的类型并表示相同的值，则为 true；否则为 false。

Equals 方法的默认实现使用反射对 obj 的对应字段和此实例进行比较。重写特定类型的 Equals 方法可提高该方法的性能，更加接近地表示类型的相等概念。 Equals 方法的默认实现使用反射对 obj 的对应字段和此实例进行比较。重写特定类型的 Equals 方法可提高该方法的性能，更加接近地表示类型的相等概念。

下面的示例说明如何用派生值类型重写 Equals 方法。

Public Structure Complex
   Private m_Re As Double
   Private m_Im As Double

   Public Overloads Function Equals(ob As Object) As Boolean
      If TypeOf ob Is Complex Then
         Dim c As Complex = CType(ob, Complex)
         Return m_Re = c.m_Re And m_Im = c.m_Im
      Else
         Return False
      End If
   End Function

   Public Overloads Function GetHashCode() As Integer
      Return m_Re.GetHashCode() ^ m_Im.GetHashCode()
   End Function

End Structure

    public struct Complex
    {
        public double m_Re;
        public double m_Im;

        public override bool Equals( object ob ){
            if( ob is Complex ) {
                Complex c = (Complex) ob;
                return m_Re==c.m_Re && m_Im==c.m_Im;
            }
            else {
                return false;
            }
        }

        public override int GetHashCode(){
            return m_Re.GetHashCode() ^ m_Im.GetHashCode();
        }
    }

public ref struct Complex
{
public:
   double m_Re;
   double m_Im;
   virtual bool Equals( Object^ ob ) override
   {
      if ( dynamic_cast<Complex^>(ob) )
      {
         Complex^ c = dynamic_cast<Complex^>(ob);
         return m_Re == c->m_Re && m_Im == c->m_Im;
      }
      else
      {
         return false;
      }
   }

   virtual int GetHashCode() override
   {
      return m_Re.GetHashCode() ^ m_Im.GetHashCode();
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ValueType 类
ValueType 成员
System 命名空间


ValueType ..::.GetHashCode 方法

ValueType
.
.
::
.
GetHashCode 方法
ValueType 类

返回此实例的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
一个 32 位有符号整数，它是该实例的哈希代码。

GetHashCode 方法适用于从 ValueType 派生的类型。派生类型的一个或多个字段用于计算返回值。如果您调用派生类型的 GetHashCode 方法，则返回值不大可能适合用作哈希表中的键。此外，如果其中的一个或多个字段的值发生更改，则返回值也可能不适合用作哈希表中的键。这两种情况下，请考虑编写自己的 GetHashCode 方法实现，使其更适于表示类型的哈希代码概念。 GetHashCode 方法适用于从 ValueType 派生的类型。派生类型的一个或多个字段用于计算返回值。如果您调用派生类型的 GetHashCode 方法，则返回值不大可能适合用作哈希表中的键。此外，如果其中的一个或多个字段的值发生更改，则返回值也可能不适合用作哈希表中的键。这两种情况下，请考虑编写自己的 GetHashCode 方法实现，使其更适于表示类型的哈希代码概念。 GetHashCode 方法适用于从 ValueType 派生的类型。派生类型的一个或多个字段用于计算返回值。如果您调用派生类型的 GetHashCode 方法，则返回值不大可能适合用作哈希表中的键。此外，如果其中的一个或多个字段的值发生更改，则返回值也可能不适合用作哈希表中的键。这两种情况下，请考虑编写自己的 GetHashCode 方法实现，使其更适于表示类型的哈希代码概念。 GetHashCode 方法适用于从 ValueType 派生的类型。派生类型的一个或多个字段用于计算返回值。如果您调用派生类型的 GetHashCode 方法，则返回值不大可能适合用作哈希表中的键。此外，如果其中的一个或多个字段的值发生更改，则返回值也可能不适合用作哈希表中的键。这两种情况下，请考虑编写自己的 GetHashCode 方法实现，使其更适于表示类型的哈希代码概念。 GetHashCode 方法适用于从 ValueType 派生的类型。派生类型的一个或多个字段用于计算返回值。如果您调用派生类型的 GetHashCode 方法，则返回值不大可能适合用作哈希表中的键。此外，如果其中的一个或多个字段的值发生更改，则返回值也可能不适合用作哈希表中的键。这两种情况下，请考虑编写自己的 GetHashCode 方法实现，使其更适于表示类型的哈希代码概念。

有关更多信息，请参见 Object..::.GetHashCode 和 System.Collections..::.Hashtable。

下面的示例说明如何用派生值类型重写 GetHashCode 方法。

Public Structure Complex
   Private m_Re As Double
   Private m_Im As Double

   Public Overloads Function Equals(ob As Object) As Boolean
      If TypeOf ob Is Complex Then
         Dim c As Complex = CType(ob, Complex)
         Return m_Re = c.m_Re And m_Im = c.m_Im
      Else
         Return False
      End If
   End Function

   Public Overloads Function GetHashCode() As Integer
      Return m_Re.GetHashCode() ^ m_Im.GetHashCode()
   End Function

End Structure

    public struct Complex
    {
        public double m_Re;
        public double m_Im;

        public override bool Equals( object ob ){
            if( ob is Complex ) {
                Complex c = (Complex) ob;
                return m_Re==c.m_Re && m_Im==c.m_Im;
            }
            else {
                return false;
            }
        }

        public override int GetHashCode(){
            return m_Re.GetHashCode() ^ m_Im.GetHashCode();
        }
    }

public ref struct Complex
{
public:
   double m_Re;
   double m_Im;
   virtual bool Equals( Object^ ob ) override
   {
      if ( dynamic_cast<Complex^>(ob) )
      {
         Complex^ c = dynamic_cast<Complex^>(ob);
         return m_Re == c->m_Re && m_Im == c->m_Im;
      }
      else
      {
         return false;
      }
   }

   virtual int GetHashCode() override
   {
      return m_Re.GetHashCode() ^ m_Im.GetHashCode();
   }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ValueType 类
ValueType 成员
System 命名空间


ValueType ..::.ToString 方法

ValueType
.
.
::
.
ToString 方法
ValueType 类

返回该实例的完全限定类型名。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
包含完全限定类型名的 String。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ValueType 类
ValueType 成员
System 命名空间


Version 类

Version 类
成员

表示公共语言运行时程序集的版本号。此类不能被继承。 表示公共语言运行时程序集的版本号。此类不能被继承。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class Version _
    Implements ICloneable, IComparable, IComparable(Of Version),  _
    IEquatable(Of Version)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class Version : ICloneable,
    IComparable, IComparable<Version>, IEquatable<Version>
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Version sealed : ICloneable,
    IComparable, IComparable<Version^>, IEquatable<Version^>
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Version =
    class
        interface ICloneable
        interface IComparable
        interface IComparable<Version>
        interface IEquatable<Version>
    end

使用 Version 对象可以存储和比较程序集的版本号。请注意，您或应用程序可以将 Version 对象设置为程序集的版本号。但是，Version 对象不会自动设置为任何特定程序集的版本号，Version 类的任何成员都无法获取这些信息。 使用 Version 对象可以存储和比较程序集的版本号。请注意，您或应用程序可以将 Version 对象设置为程序集的版本号。但是，Version 对象不会自动设置为任何特定程序集的版本号，Version 类的任何成员都无法获取这些信息。 使用 Version 对象可以存储和比较程序集的版本号。请注意，您或应用程序可以将 Version 对象设置为程序集的版本号。但是，Version 对象不会自动设置为任何特定程序集的版本号，Version 类的任何成员都无法获取这些信息。

版本号由二至四个部分组成：主要版本号、次要版本号、内部版本号和修订号。主要版本号和次要版本号是必选的；内部版本号和修订号是可选的，但是如果定义了修订号部分，则内部版本号就是必选的。所有定义的组件都必须是大于或等于零的整数。版本号的格式如下所示。可选组件显示在方括号（“[”和“]”）中： 版本号由二至四个部分组成：主要版本号、次要版本号、内部版本号和修订号。主要版本号和次要版本号是必选的；内部版本号和修订号是可选的，但是如果定义了修订号部分，则内部版本号就是必选的。所有定义的组件都必须是大于或等于零的整数。版本号的格式如下所示。可选组件显示在方括号（“[”和“]”）中： 版本号由二至四个部分组成：主要版本号、次要版本号、内部版本号和修订号。主要版本号和次要版本号是必选的；内部版本号和修订号是可选的，但是如果定义了修订号部分，则内部版本号就是必选的。所有定义的组件都必须是大于或等于零的整数。版本号的格式如下所示。可选组件显示在方括号（“[”和“]”）中： 版本号由二至四个部分组成：主要版本号、次要版本号、内部版本号和修订号。主要版本号和次要版本号是必选的；内部版本号和修订号是可选的，但是如果定义了修订号部分，则内部版本号就是必选的。所有定义的组件都必须是大于或等于零的整数。版本号的格式如下所示。可选组件显示在方括号（“[”和“]”）中： 版本号由二至四个部分组成：主要版本号、次要版本号、内部版本号和修订号。主要版本号和次要版本号是必选的；内部版本号和修订号是可选的，但是如果定义了修订号部分，则内部版本号就是必选的。所有定义的组件都必须是大于或等于零的整数。版本号的格式如下所示。可选组件显示在方括号（“[”和“]”）中：

主要版本号.次要版本号[.内部版本号[.修订号]]

应根据下面的约定使用这些部分：

  • 主要版本：名称相同但主要版本号不同的程序集不可互换。例如，这适用于对产品的大量重写，这些重写使得无法实现向后兼容性。 主要版本：名称相同但主要版本号不同的程序集不可互换。例如，这适用于对产品的大量重写，这些重写使得无法实现向后兼容性。

  • 次要版本：如果两个程序集的名称和主要版本号相同，而次要版本号不同，这指示显著增强，但照顾到了向后兼容性。例如，这适用于产品的修正版或完全向后兼容的新版本。 次要版本：如果两个程序集的名称和主要版本号相同，而次要版本号不同，这指示显著增强，但照顾到了向后兼容性。例如，这适用于产品的修正版或完全向后兼容的新版本。

  • 内部版本：内部版本号的不同表示对相同源所作的重新编译。这适合于更改处理器、平台或编译器的情况。 内部版本：内部版本号的不同表示对相同源所作的重新编译。这适合于更改处理器、平台或编译器的情况。

  • 修订号：名称、主要版本号和次要版本号都相同但修订号不同的程序集应是完全可互换的。这适用于修复以前发布的程序集中的安全漏洞。 修订号：名称、主要版本号和次要版本号都相同但修订号不同的程序集应是完全可互换的。这适用于修复以前发布的程序集中的安全漏洞。

程序集的只有内部版本号或修订号不同的后续版本被认为是先前版本的修补程序 (Hotfix) 更新。

从 .NET Framework 2.0 开始，MajorRevision 和 MinorRevision 属性允许您在发布永久解决方案之前标识应用程序的一个临时版本，例如，纠正某个问题。此外，Windows NT 操作系统使用 MajorRevision 属性对 Service Pack 号进行编码。 从 .NET Framework 2.0 开始，MajorRevision 和 MinorRevision 属性允许您在发布永久解决方案之前标识应用程序的一个临时版本，例如，纠正某个问题。此外，Windows NT 操作系统使用 MajorRevision 属性对 Service Pack 号进行编码。

此类实现 ICloneable、IComparable、IComparable<(Of <(T>)>) 和 IEquatable<(Of <(T>)>) 接口。

为程序集指定版本信息

通常，不使用 Version 类来为程序集指定版本号，而是使用 AssemblyVersionAttribute 类来定义程序集的版本。 通常，不使用 Version 类来为程序集指定版本号，而是使用 AssemblyVersionAttribute 类来定义程序集的版本。

检索版本信息

Version 对象最常用于存储有关某个系统或应用程序组件（如操作系统）、公共语言运行时、当前应用程序的可执行文件或特定程序集的版本信息。下面的示例演示一些最常见情况： Version 对象最常用于存储有关某个系统或应用程序组件（如操作系统）、公共语言运行时、当前应用程序的可执行文件或特定程序集的版本信息。下面的示例演示一些最常见情况：

  • 检索操作系统的版本。下面的示例使用 OperatingSystem..::.Version 属性检索操作系统的版本号。 检索操作系统的版本。下面的示例使用 OperatingSystem..::.Version 属性检索操作系统的版本号。

    ' Get the operating system version.
Dim os As OperatingSystem = Environment.OSVersion
Dim ver As Version = os.Version
Console.WriteLine("Operating System: {0} ({1})", os.VersionString, ver.ToString())

    // Get the operating system version.
OperatingSystem os = Environment.OSVersion;
Version ver = os.Version;
Console.WriteLine("Operating System: {0} ({1})", os.VersionString, ver.ToString());

  • 检索公共语言运行时的版本。下面的示例使用 Environment..::.Version 属性检索有关公共语言运行时的版本信息。 检索公共语言运行时的版本。下面的示例使用 Environment..::.Version 属性检索有关公共语言运行时的版本信息。

    ' Get the common language runtime version.
Dim ver As Version = Environment.Version
Console.WriteLine("CLR Version {0}", ver.ToString())

    // Get the common language runtime version.
Version ver = Environment.Version;
Console.WriteLine("CLR Version {0}", ver.ToString());

  • 检索当前应用程序的版本。下面的示例使用 Assembly..::.GetEntryAssembly 方法来获取对表示应用程序可执行文件的 Assembly 对象的引用，然后检索应用程序可执行文件的版本号。 检索当前应用程序的版本。下面的示例使用 Assembly..::.GetEntryAssembly 方法来获取对表示应用程序可执行文件的 Assembly 对象的引用，然后检索应用程序可执行文件的版本号。

    ' Get the version of the executing assembly (that is, this assembly).
Dim assem As Assembly = Assembly.GetEntryAssembly()
Dim assemName As AssemblyName = assem.GetName()
Dim ver As Version = assemName.Version
Console.WriteLine("Application {0}, Version {1}", assemName.Name, ver.ToString())

    // Get the version of the executing assembly (that is, this assembly).
Assembly assem = Assembly.GetEntryAssembly();
AssemblyName assemName = assem.GetName();
Version ver = assemName.Version;
Console.WriteLine("Application {0}, Version {1}", assemName.Name, ver.ToString());

  • 检索当前程序集的版本。下面的示例使用 Assembly..::.GetExecutingAssembly 方法来获取对表示当前程序集的 Assembly 对象的引用，然后检索当前程序集的版本信息。 检索当前程序集的版本。下面的示例使用 Assembly..::.GetExecutingAssembly 方法来获取对表示当前程序集的 Assembly 对象的引用，然后检索当前程序集的版本信息。

    ' Get the version of the current application.
Dim assem As Assembly = Assembly.GetExecutingAssembly()
Dim assemName As AssemblyName = assem.GetName()
Dim ver As Version = assemName.Version
Console.WriteLine("{0}, Version {1}", assemName.Name, ver.ToString())

    // Get the version of the current application.
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName assemName = assem.GetName();
Version ver = assemName.Version;
Console.WriteLine("{0}, Version {1}", assemName.Name, ver.ToString());

  • 检索特定程序集的版本。下面的示例使用 Assembly..::.ReflectionOnlyLoadFrom 方法来获取对具有特定文件名的 Assembly 对象的引用，然后检索其版本信息。请注意，还有其他几种方法可按文件名或强名称实例化 Assembly 对象。 检索特定程序集的版本。下面的示例使用 Assembly..::.ReflectionOnlyLoadFrom 方法来获取对具有特定文件名的 Assembly 对象的引用，然后检索其版本信息。请注意，还有其他几种方法可按文件名或强名称实例化 Assembly 对象。 检索特定程序集的版本。下面的示例使用 Assembly..::.ReflectionOnlyLoadFrom 方法来获取对具有特定文件名的 Assembly 对象的引用，然后检索其版本信息。请注意，还有其他几种方法可按文件名或强名称实例化 Assembly 对象。

    ' Get the version of a specific assembly.
Dim filename As String = ".\StringLibrary.dll"
Dim assem As Assembly = Assembly.ReflectionOnlyLoadFrom(filename)
Dim assemName As AssemblyName = assem.GetName()
Dim ver As Version = assemName.Version
Console.WriteLine("{0}, Version {1}", assemName.Name, ver.ToString())

    // Get the version of a specific assembly.
string filename = @".\StringLibrary.dll";
Assembly assem = Assembly.ReflectionOnlyLoadFrom(filename);
AssemblyName assemName = assem.GetName();
Version ver = assemName.Version;
Console.WriteLine("{0}, Version {1}", assemName.Name, ver.ToString());

下面的代码示例使用 Assembly 类来获取用来标识程序集的 Version 对象。

' This code example demonstrates the Version class.
'
'   This code example loads an assembly and retrieves its
'   version number.
'   Typically, you would use code similar to this example
'   to load a separate assembly and obtain its version number.
'   However, solely to avoid using another assembly, this code
'   example loads itself and retrieves its own version number.
'
'   This code example is created in two steps:
'1) The AssemblyVersionAttribute attribute is applied to this
'   code example at the assembly level. Then the code example
'   is compiled into the MyAssembly.exe executable assembly.
'2) When MyAssembly.exe is executed, it loads itself, then
'   displays its own version number.

Imports System
Imports System.Reflection

' Apply the version number, 1.2.3.4, to this assembly.
<assembly:AssemblyVersionAttribute("1.2.3.4")>
Class Sample
    Public Shared Sub Main()

' Use the Assembly class to load MyAssembly.exe. Note that
' the name of the assembly does not include the ".exe" suffix
' of the executable file.
        Dim myAsm As Assembly = Assembly.Load("MyAssembly")
        Dim aName As AssemblyName = myAsm.GetName()

' Store the version number in a Version object.
        Dim ver As Version = aName.Version

' Display the version number of MyAssembly.
        Console.WriteLine(ver)
    End Sub 'Main
End Class 'Sample

'This code example produces the following results:
'
'1.2.3.4
'

// This code example demonstrates the Version class.

/*
   This code example loads an assembly and retrieves its
   version number.
   Typically, you would use code similar to this example
   to load a separate assembly and obtain its version number.
   However, solely to avoid using another assembly, this code
   example loads itself and retrieves its own version number.

   This code example is created in two steps:
1) The AssemblyVersionAttribute attribute is applied to this
   code example at the assembly level. Then the code example
   is compiled into the MyAssembly.exe executable assembly.
2) When MyAssembly.exe is executed, it loads itself, then
   displays its own version number.
*/

using System;
using System.Reflection;

// Apply the version number, 1.2.3.4, to this assembly.
[assembly:AssemblyVersionAttribute("1.2.3.4")]
class Sample
{
    public static void Main()
    {
// Use the Assembly class to load MyAssembly.exe. Note that
// the name of the assembly does not include the ".exe" suffix
// of the executable file.

    Assembly myAsm = Assembly.Load("MyAssembly");
    AssemblyName aName = myAsm.GetName();

// Store the version number in a Version object.
    Version ver = aName.Version;

// Display the version number of MyAssembly.
    Console.WriteLine(ver);
    }
}

/*
This code example produces the following results:

1.2.3.4

*/

System System..::.VersionVersion
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 成员
System 命名空间


Version 成员

Version 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Version 类

表示公共语言运行时程序集的版本号。此类不能被继承。 表示公共语言运行时程序集的版本号。此类不能被继承。

Version 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Version 类
System 命名空间


Version 构造函数

Version 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Version 类

用指定的主要、次要、内部和修订号初始化 Version 类的一个新实例。

名称 说明
页首

参考

Version 类
Version 成员
System 命名空间


Version 构造函数

Version 构造函数
Version 类

初始化 Version 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public Version()
public:
Version()
new : unit -> Version

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Version 类
Version 成员
Version 重载
System 命名空间


Version 构造函数 (String)

Version 构造函数 (String)
Version 类

使用指定的字符串初始化 Version 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    version As String _
)
public Version(
    string version
)
public:
Version(
    String^ version
)
new :
        version:string -> Version

参数

version
类型： System String
一个包含主要版本号、次要版本号、内部版本号和修订号的字符串，其中的各个号之间以句点字符（“.”）分隔。
异常 | 条件
ArgumentException | version 少于两个部分或多于四个部分。
ArgumentNullException | version 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | 主要版本号、次要版本号、内部版本号或修订号部分小于零。
FormatException | version 的至少一个部分未分析为整数。
OverflowException | version 至少有一个部分表示大于 MaxValue 的数。

version 参数只可以按顺序包含主要版本号、次要版本号、内部版本号和修订号部分，且各部分之间用句点分隔。至少必须有两个部分，最多只能有四个部分。前两个部分应为主要版本号和次要版本号。未定义未指定的部分的值。 version 参数只可以按顺序包含主要版本号、次要版本号、内部版本号和修订号部分，且各部分之间用句点分隔。至少必须有两个部分，最多只能有四个部分。前两个部分应为主要版本号和次要版本号。未定义未指定的部分的值。 version 参数只可以按顺序包含主要版本号、次要版本号、内部版本号和修订号部分，且各部分之间用句点分隔。至少必须有两个部分，最多只能有四个部分。前两个部分应为主要版本号和次要版本号。未定义未指定的部分的值。 version 参数只可以按顺序包含主要版本号、次要版本号、内部版本号和修订号部分，且各部分之间用句点分隔。至少必须有两个部分，最多只能有四个部分。前两个部分应为主要版本号和次要版本号。未定义未指定的部分的值。

版本号的格式如下所示。可选组件显示在方括号（“[”和“]”）中： 版本号的格式如下所示。可选组件显示在方括号（“[”和“]”）中：

主要版本号.次要版本号[.内部版本号[.修订号]]

所有定义的组件都必须是大于或等于零的整数。例如，如果主版本号为 6，次版本号为 2，内部版本号为 1，修订号为 3，则 version 应该为“6.2.1.3”。 所有定义的组件都必须是大于或等于零的整数。例如，如果主版本号为 6，次版本号为 2，内部版本号为 1，修订号为 3，则 version 应该为“6.2.1.3”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
Version 重载
System 命名空间


Version 构造函数 (Int32, Int32)

Version 构造函数 (Int32, Int32)
Version 类

使用指定的主要版本号值和次要版本号值初始化 Version 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    major As Integer, _
    minor As Integer _
)
public Version(
    int major,
    int minor
)
public:
Version(
    int major,
    int minor
)
new :
        major:int *
        minor:int -> Version

参数

major
类型： System Int32
主要版本号。
minor
类型： System Int32
次要版本号。
异常 | 条件
ArgumentOutOfRangeException | major 或 minor 小于零。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
Version 重载
System 命名空间


Version 构造函数 (Int32, Int32, Int32)

Version 构造函数 (Int32, Int32, Int32)
Version 类

使用指定的主要版本号、次要版本号和内部版本号值初始化 Version 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    major As Integer, _
    minor As Integer, _
    build As Integer _
)
public Version(
    int major,
    int minor,
    int build
)
public:
Version(
    int major,
    int minor,
    int build
)
new :
        major:int *
        minor:int *
        build:int -> Version

参数

major
类型： System Int32
主要版本号。
minor
类型： System Int32
次要版本号。
build
类型： System Int32
内部版本号。
异常 | 条件
ArgumentOutOfRangeException | major、minor 或 build 小于零。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
Version 重载
System 命名空间


Version 构造函数 (Int32, Int32, Int32, Int32)

Version 构造函数 (Int32, Int32, Int32, Int32)
Version 类

用指定的主要、次要、内部和修订号初始化 Version 类的一个新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    major As Integer, _
    minor As Integer, _
    build As Integer, _
    revision As Integer _
)
public Version(
    int major,
    int minor,
    int build,
    int revision
)
public:
Version(
    int major,
    int minor,
    int build,
    int revision
)
new :
        major:int *
        minor:int *
        build:int *
        revision:int -> Version

参数

major
类型： System Int32
主要版本号。
minor
类型： System Int32
次要版本号。
build
类型： System Int32
内部版本号。
revision
类型： System Int32
修订号。
异常 | 条件
ArgumentOutOfRangeException | major、minor、build 或 revision 小于零。

下面的代码示例演示 Version 构造函数以及 Major、Minor、Build、Revision、MajorRevision 和 MinorRevision 属性。

' This example demonstrates the Version.Revision,
' MajorRevision, and MinorRevision properties.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim fmtStd As String = "Standard version:" & vbCrLf & _
                               "  major.minor.build.revision = {0}.{1}.{2}.{3}"
        Dim fmtInt As String = "Interim version:" & vbCrLf & _
                               "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}"

        Dim std As New Version(2, 4, 1128, 2)
        Dim interim As New Version(2, 4, 1128, (100 << 16) + 2)

        Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision)
        Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build, _
                          interim.MajorRevision, interim.MinorRevision)
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Standard version:
'  major.minor.build.revision = 2.4.1128.2
'Interim version:
'  major.minor.build.majRev/minRev = 2.4.1128.100/2
'

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using System;

class Sample
{
    public static void Main()
    {

    string fmtStd = "Standard version:\n" +
                    "  major.minor.build.revision = {0}.{1}.{2}.{3}";
    string fmtInt = "Interim version:\n" +
                    "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version std = new Version(2, 4, 1128, 2);
    Version interim = new Version(2, 4, 1128, (100 << 16) + 2);

    Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision);
    Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build,
                              interim.MajorRevision, interim.MinorRevision);
    }
}
/*
This code example produces the following results:

Standard version:
  major.minor.build.revision = 2.4.1128.2
Interim version:
  major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using namespace System;

int main()
{
    String^ formatStandard = "Standard version:\n" +
        " major.minor.build.revision = {0}.{1}.{2}.{3}";
    String^ formatInterim = "Interim version:\n" +
        " major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version^ standardVersion = gcnew Version(2, 4, 1128, 2);
    Version^ interimVersion = gcnew Version(2, 4, 1128, (100 << 16) + 2);

    Console::WriteLine(formatStandard, standardVersion->Major,
        standardVersion->Minor, standardVersion->Build,
        standardVersion->Revision);
    Console::WriteLine(formatInterim, interimVersion->Major,
        interimVersion->Minor, interimVersion->Build,
        interimVersion->MajorRevision, interimVersion->MinorRevision);
};
/*
This code example produces the following results:

Standard version:
major.minor.build.revision = 2.4.1128.2
Interim version:
major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
Version 重载
System 命名空间


Version 方法

Version 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Version 类

Version 类型公开以下成员。

名称 说明
页首

参考

Version 类
System 命名空间


Version ..::.Clone 方法

Version
.
.
::
.
Clone 方法
Version 类

返回一个新的 Version 对象，该对象的值与当前的 Version 对象相同。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Clone As Object
public Object Clone()
public:
virtual Object^ Clone() sealed
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
一个新的 Object，其值为当前 Version 对象的副本。

实现

如果返回值的类型是重要的，则将由此方法返回的 Object 实例强制转换为 Version 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间


Version ..::.CompareTo 方法

Version
.
.
::
.
CompareTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Version 类

将当前 Version 对象与指定的对象或 Version 进行比较，并返回二者相对值的一个指示。

名称 说明
页首

参考

Version 类
Version 成员
System 命名空间


Version ..::.CompareTo 方法 (Object)

Version
.
.
::
.
CompareTo 方法 (Object)
Version 类

将当前 Version 对象与指定的对象进行比较，并返回二者相对值的一个指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ version As Object _ ) As Integer
public int CompareTo( Object version )
public: virtual int CompareTo( Object^ version ) sealed
abstract CompareTo : version:Object -> int override CompareTo : version:Object -> int
参数
version
类型： System Object
要比较的对象，或为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号整数，它指示两个对象的相对值，如下表所示。
返回值
含义
小于零
当前的
Version
对象是
version
之前的一个版本。
零
当前的
Version
对象是与
version
相同的版本。
大于零
当前
Version
对象是
version
之后的一个版本。
- 或 -
version
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现
异常 | 条件
ArgumentException | version 并不属于类型 Version。

Version 的所有部分按重要性递减顺序排列为：主要版本号、次要版本号、内部版本号和修订号。假定未知部分比任何已知部分都旧。 Version 的所有部分按重要性递减顺序排列为：主要版本号、次要版本号、内部版本号和修订号。假定未知部分比任何已知部分都旧。

例如：

  • 1.1 版比 1.1.0 版旧

  • 1.1 版比 1.1.1 版旧

  • 1.1 版比 1.1.2.3 版旧

  • 1.1.2 版比 1.1.2.4 版旧

  • 1.2.5 版比 1.2.3.4 版新

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
CompareTo 重载
System 命名空间
CompareTo
Equals


Version ..::.CompareTo 方法 (Version)

Version
.
.
::
.
CompareTo 方法 (Version)
Version 类

将当前 Version 对象与指定的 Version 对象进行比较，并返回二者相对值的一个指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function CompareTo ( _ value As Version _ ) As Integer
public int CompareTo( Version value )
public: virtual int CompareTo( Version^ value ) sealed
abstract CompareTo : value:Version -> int override CompareTo : value:Version -> int
参数
value
类型： System Version
要与当前的
Version
对象进行比较的
Version
对象，或者为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
返回值
类型： System Int32
一个有符号整数，它指示两个对象的相对值，如下表所示。
返回值
含义
小于零
当前的
Version
对象是
value
之前的一个版本。
零
当前的
Version
对象是与
value
相同的版本。
大于零
当前
Version
对象是
value
之后的一个版本。
- 或 -
value
为
null
Nothing
nullptr
null 引用（在 Visual Basic 中为
Nothing
）
。
实现

此方法实现 System..::.IComparable<(Of <(T>)>) 接口，执行效果略好于 CompareTo 方法，因为它不必将 value 参数取消装箱。

Version 的所有部分按重要性递减顺序排列为：主要版本号、次要版本号、内部版本号和修订号。假定未知部分比任何已知部分都旧。例如： Version 的所有部分按重要性递减顺序排列为：主要版本号、次要版本号、内部版本号和修订号。假定未知部分比任何已知部分都旧。例如： Version 的所有部分按重要性递减顺序排列为：主要版本号、次要版本号、内部版本号和修订号。假定未知部分比任何已知部分都旧。例如：

  • 1.1 版比 1.1.0 版旧

  • 1.1 版比 1.1.1 版旧

  • 1.1 版比 1.1.2.3 版旧

  • 1.1.2 版比 1.1.2.4 版旧

  • 1.2.5 版比 1.2.3.4 版新

下面的代码示例演示几个值类型和引用类型的 CompareTo 方法的泛型和非泛型版本。

' This example demonstrates the generic and non-generic versions of the
' CompareTo method for several base types.
' The non-generic version takes a parameter of type Object, while the generic
' version takes a type-specific parameter, such as Boolean, Int32, or Double.

Imports System

Class Sample
   Public Shared Sub Main()
      Dim nl As String = Environment.NewLine
      Dim msg As String = _
          "{0}The following is the result of using the generic and non-generic{0}" & _
          "versions of the CompareTo method for several base types:{0}"

      Dim now As DateTime = DateTime.Now
      ' Time span = 11 days, 22 hours, 33 minutes, 44 seconds
      Dim tsX As New TimeSpan(11, 22, 33, 44)
      ' Version = 1.2.333.4
      Dim versX As New Version("1.2.333.4")
      ' Guid = CA761232-ED42-11CE-BACD-00AA0057B223
      Dim guidX As New Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}")

      Dim a1 As [Boolean] = True,    a2 As [Boolean] = True
      Dim b1 As [Byte] = 1,          b2 As [Byte] = 1
      Dim c1 As Int16 = -2,          c2 As Int16 = 2
      Dim d1 As Int32 = 3,           d2 As Int32 = 3
      Dim e1 As Int64 = 4,           e2 As Int64 = -4
      Dim f1 As [Decimal] = -5.5D,   f2 As [Decimal] = 5.5D
      Dim g1 As [Single] = 6.6F,     g2 As [Single] = 6.6F
      Dim h1 As [Double] = 7.7,      h2 As [Double] = -7.7
      Dim i1 As [Char] = "A"c,       i2 As [Char] = "A"c
      Dim j1 As String = "abc",      j2 As String = "abc"
      Dim k1 As DateTime = now,      k2 As DateTime = now
      Dim l1 As TimeSpan = tsX,      l2 As TimeSpan = tsX
      Dim m1 As Version = versX,     m2 As New Version("2.0")
      Dim n1 As Guid = guidX,        n2 As Guid = guidX

      ' The following types are not CLS-compliant.
      ' SByte, UInt16, UInt32, UInt64

      Console.WriteLine(msg, nl)
      Try
         ' The second and third Show method call parameters are automatically boxed because
         ' the second and third Show method declaration arguments expect type Object.

         Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo(CObj(a2)))
         Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo(CObj(b2)))
         Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo(CObj(c2)))
         Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo(CObj(d2)))
         Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo(CObj(e2)))
         Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo(CObj(f2)))
         Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo(CObj(g2)))
         Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo(CObj(h2)))
         Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo(CObj(i2)))
         Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo(CObj(j2)))
         Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo(CObj(k2)))
         Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo(CObj(l2)))
         Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo(CObj(m2)))
         Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo(CObj(n2)))
         '
         Console.WriteLine("{0}The following types are not CLS-compliant:", nl)
         Console.WriteLine("SByte, UInt16, UInt32, UInt64")

      Catch e As Exception
         Console.WriteLine(e)
      End Try
   End Sub 'Main

   Public Shared Sub Show(caption As String, var1 As [Object], var2 As [Object], _
                          resultGeneric As Integer, resultNonGeneric As Integer)
      Dim relation As String

      Console.Write(caption)
      If resultGeneric = resultNonGeneric Then
         If resultGeneric < 0 Then
            relation = "less than"
         ElseIf resultGeneric > 0 Then
            relation = "greater than"
         Else
            relation = "equal to"
         End If
         Console.WriteLine("{0} is {1} {2}", var1, relation, var2)

      ' The following condition will never occur because the generic and non-generic
      ' CompareTo methods are equivalent.

      Else
         Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}", _
                            resultGeneric, resultNonGeneric)
      End If
   End Sub 'Show
End Class 'Sample
'
'This example produces the following results:
'
'The following is the result of using the generic and non-generic versions of the
'CompareTo method for several base types:
'
'Boolean:  True is equal to True
'Byte:     1 is equal to 1
'Int16:    -2 is less than 2
'Int32:    3 is equal to 3
'Int64:    4 is greater than -4
'Decimal:  -5.5 is less than 5.5
'Single:   6.6 is equal to 6.6
'Double:   7.7 is greater than -7.7
'Char:     A is equal to A
'String:   abc is equal to abc
'DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
'TimeSpan: 11.22:33:44 is equal to 11.22:33:44
'Version:  1.2.333.4 is less than 2.0
'Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
'aa0057b223
'
'The following types are not CLS-compliant:
'SByte, UInt16, UInt32, UInt64
'

// This example demonstrates the generic and non-generic versions of the
// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.

using System;

class Sample
{
    public static void Main()
    {
    string    nl = Environment.NewLine;
    string    msg = "{0}The following is the result of using the generic and non-generic{0}" +
                    "versions of the CompareTo method for several base types:{0}";

    DateTime  now = DateTime.Now;
// Time span = 11 days, 22 hours, 33 minutes, 44 seconds
    TimeSpan  tsX = new TimeSpan(11, 22, 33, 44);
// Version = 1.2.333.4
    Version   versX = new Version("1.2.333.4");
// Guid = CA761232-ED42-11CE-BACD-00AA0057B223
    Guid      guidX = new Guid("{CA761232-ED42-11CE-BACD-00AA0057B223}");

    Boolean  a1 = true,  a2 = true;
    Byte     b1 = 1,     b2 = 1;
    Int16    c1 = -2,    c2 = 2;
    Int32    d1 = 3,     d2 = 3;
    Int64    e1 = 4,     e2 = -4;
    Decimal  f1 = -5.5m, f2 = 5.5m;
    Single   g1 = 6.6f,  g2 = 6.6f;
    Double   h1 = 7.7d,  h2 = -7.7d;
    Char     i1 = 'A',   i2 = 'A';
    String   j1 = "abc", j2 = "abc";
    DateTime k1 = now,   k2 = now;
    TimeSpan l1 = tsX,   l2 = tsX;
    Version  m1 = versX, m2 = new Version("2.0");
    Guid     n1 = guidX, n2 = guidX;

// The following types are not CLS-compliant.
    SByte    w1 = 8,     w2 = 8;
    UInt16   x1 = 9,     x2 = 9;
    UInt32   y1 = 10,    y2 = 10;
    UInt64   z1 = 11,    z2 = 11;
//
    Console.WriteLine(msg, nl);
    try
        {
// The second and third Show method call parameters are automatically boxed because
// the second and third Show method declaration arguments expect type Object.

        Show("Boolean:  ", a1, a2, a1.CompareTo(a2), a1.CompareTo((Object)a2));
        Show("Byte:     ", b1, b2, b1.CompareTo(b2), b1.CompareTo((Object)b2));
        Show("Int16:    ", c1, c2, c1.CompareTo(c2), c1.CompareTo((Object)c2));
        Show("Int32:    ", d1, d2, d1.CompareTo(d2), d1.CompareTo((Object)d2));
        Show("Int64:    ", e1, e2, e1.CompareTo(e2), e1.CompareTo((Object)e2));
        Show("Decimal:  ", f1, f2, f1.CompareTo(f2), f1.CompareTo((Object)f2));
        Show("Single:   ", g1, g2, g1.CompareTo(g2), g1.CompareTo((Object)g2));
        Show("Double:   ", h1, h2, h1.CompareTo(h2), h1.CompareTo((Object)h2));
        Show("Char:     ", i1, i2, i1.CompareTo(i2), i1.CompareTo((Object)i2));
        Show("String:   ", j1, j2, j1.CompareTo(j2), j1.CompareTo((Object)j2));
        Show("DateTime: ", k1, k2, k1.CompareTo(k2), k1.CompareTo((Object)k2));
        Show("TimeSpan: ", l1, l2, l1.CompareTo(l2), l1.CompareTo((Object)l2));
        Show("Version:  ", m1, m2, m1.CompareTo(m2), m1.CompareTo((Object)m2));
        Show("Guid:     ", n1, n2, n1.CompareTo(n2), n1.CompareTo((Object)n2));
//
        Console.WriteLine("{0}The following types are not CLS-compliant:", nl);
        Show("SByte:    ", w1, w2, w1.CompareTo(w2), w1.CompareTo((Object)w2));
        Show("UInt16:   ", x1, x2, x1.CompareTo(x2), x1.CompareTo((Object)x2));
        Show("UInt32:   ", y1, y2, y1.CompareTo(y2), y1.CompareTo((Object)y2));
        Show("UInt64:   ", z1, z2, z1.CompareTo(z2), z1.CompareTo((Object)z2));
        }
    catch (Exception e)
        {
        Console.WriteLine(e);
        }
    }

    public static void Show(string caption, Object var1, Object var2,
                            int resultGeneric, int resultNonGeneric)
    {
    string relation;

    Console.Write(caption);
    if (resultGeneric == resultNonGeneric)
        {
        if      (resultGeneric < 0) relation = "less than";
        else if (resultGeneric > 0) relation = "greater than";
        else                        relation = "equal to";
        Console.WriteLine("{0} is {1} {2}", var1, relation, var2);
        }

// The following condition will never occur because the generic and non-generic
// CompareTo methods are equivalent.

    else
        {
        Console.WriteLine("Generic CompareTo = {0}; non-generic CompareTo = {1}",
                           resultGeneric, resultNonGeneric);
        }
   }
}
/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

// CompareTo method for several base types.
// The non-generic version takes a parameter of type Object, while the generic
// version takes a type-specific parameter, such as Boolean, Int32, or Double.
using namespace System;
void Show( String^ caption, Object^ var1, Object^ var2, int resultGeneric, int resultNonGeneric )
{
   String^ relation;
   Console::Write( caption );
   if ( resultGeneric == resultNonGeneric )
   {
      if ( resultGeneric < 0 )
            relation = "less than";
      else
      if ( resultGeneric > 0 )
            relation = "greater than";
      else
            relation = "equal to";
      Console::WriteLine( "{0} is {1} {2}", var1, relation, var2 );
   }
   // The following condition will never occur because the generic and non-generic
   // CompareTo methods are equivalent.
   else
   {
      Console::WriteLine( "Generic CompareTo = {0}; non-generic CompareTo = {1}", resultGeneric, resultNonGeneric );
   }
}

int main()
{
   String^ nl = Environment::NewLine;
   String^ msg = "{0}The following is the result of using the generic and non-generic{0}"
   "versions of the CompareTo method for several base types:{0}";
   Object^ obj; // An Object used to insure CompareTo(Object) is called.

   DateTime now = DateTime::Now;

   // Time span = 11 days, 22 hours, 33 minutes, 44 seconds
   TimeSpan tsX = TimeSpan(11,22,33,44);

   // Version = 1.2.333.4
   Version^ versX = gcnew Version(  "1.2.333.4" );

   // Guid = CA761232-ED42-11CE-BACD-00AA0057B223
   Guid guidX = Guid( "{CA761232-ED42-11CE-BACD-00AA0057B223}");
   Boolean a1 = true,a2 = true;
   Byte b1 = 1,b2 = 1;
   Int16 c1 = -2,c2 = 2;
   Int32 d1 = 3,d2 = 3;
   Int64 e1 = 4,e2 = -4;
   Decimal f1 = Decimal(-5.5), f2 = Decimal(5.5);
   Single g1 = 6.6f,g2 = 6.6f;
   Double h1 = 7.7,h2 = -7.7;
   Char i1 = 'A',i2 = 'A';
   String^ j1 = "abc", ^j2 = "abc";
   DateTime k1 = now,k2 = now;
   TimeSpan l1 = tsX,l2 = tsX;
   Version^ m1 = versX, ^m2 = gcnew Version(  "2.0" );
   Guid n1 = guidX,n2 = guidX;

   // The following types are not CLS-compliant.
   SByte w1 = 8,w2 = 8;
   UInt16 x1 = 9,x2 = 9;
   UInt32 y1 = 10,y2 = 10;
   UInt64 z1 = 11,z2 = 11;

   //
   Console::WriteLine( msg, nl );
   try
   {
      Show( "Boolean: ", a1, a2, a1.CompareTo( a2 ), a1.CompareTo( a2 ) );
      Show( "Byte:    ", b1, b2, b1.CompareTo( b2 ), b1.CompareTo( b2 ) );
      Show( "Int16:   ", c1, c2, c1.CompareTo( c2 ), c1.CompareTo( c2 ) );
      Show( "Int32:   ", d1, d2, d1.CompareTo( d2 ), d1.CompareTo( d2 ) );
      Show( "Int64:   ", e1, e2, e1.CompareTo( e2 ), e1.CompareTo( e2 ) );
      Show( "Decimal: ", f1, f2, f1.CompareTo( f2 ), f1.CompareTo( f2 ) );
      Show( "Single:  ", g1, g2, g1.CompareTo( g2 ), g1.CompareTo( g2 ) );
      Show( "Double:  ", h1, h2, h1.CompareTo( h2 ), h1.CompareTo( h2 ) );
      Show( "Char:    ", i1, i2, i1.CompareTo( i2 ), i1.CompareTo( i2 ) );

      // Use an anonymous object to hide the String object.
      obj = j2;
      Show( "String:  ", j1, j2, j1->CompareTo( j2 ), j1->CompareTo( obj ) );
      Show( "DateTime:", k1, k2, k1.CompareTo( k2 ), k1.CompareTo( k2 ) );
      Show(  "TimeSpan: ", l1, l2, l1.CompareTo( l2 ), l1.CompareTo( l2 ) );

      // Use an anonymous object to hide the Version object.
      obj = m2;
      Show(  "Version:  ", m1, m2, m1->CompareTo( m2 ), m1->CompareTo( obj ) );
      Show(  "Guid:     ", n1, n2, n1.CompareTo( n2 ), n1.CompareTo( n2 ) );

      //
      Console::WriteLine( "{0}The following types are not CLS-compliant:", nl );
      Show( "SByte:   ", w1, w2, w1.CompareTo( w2 ), w1.CompareTo( w2 ) );
      Show( "UInt16:  ", x1, x2, x1.CompareTo( x2 ), x1.CompareTo( x2 ) );
      Show( "UInt32:  ", y1, y2, y1.CompareTo( y2 ), y1.CompareTo( y2 ) );
      Show( "UInt64:  ", z1, z2, z1.CompareTo( z2 ), z1.CompareTo( z2 ) );
   }
   catch ( Exception^ e )
   {
      Console::WriteLine( e );
   }

}

/*
This example produces the following results:

The following is the result of using the generic and non-generic versions of the
CompareTo method for several base types:

Boolean:  True is equal to True
Byte:     1 is equal to 1
Int16:    -2 is less than 2
Int32:    3 is equal to 3
Int64:    4 is greater than -4
Decimal:  -5.5 is less than 5.5
Single:   6.6 is equal to 6.6
Double:   7.7 is greater than -7.7
Char:     A is equal to A
String:   abc is equal to abc
DateTime: 12/1/2003 5:37:46 PM is equal to 12/1/2003 5:37:46 PM
TimeSpan: 11.22:33:44 is equal to 11.22:33:44
Version:  1.2.333.4 is less than 2.0
Guid:     ca761232-ed42-11ce-bacd-00aa0057b223 is equal to ca761232-ed42-11ce-bacd-00
aa0057b223

The following types are not CLS-compliant:
SByte:    8 is equal to 8
UInt16:   9 is equal to 9
UInt32:   10 is equal to 10
UInt64:   11 is equal to 11
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
CompareTo 重载
System 命名空间


Version ..::.Equals 方法

Version
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Version 类

返回一个值，该值指示两个 Version 对象是否表示同一个值。

名称 说明
页首

参考

Version 类
Version 成员
System 命名空间


Version ..::.Equals 方法 (Object)

Version
.
.
::
.
Equals 方法 (Object)
Version 类

返回一个值，该值指示当前 Version 对象是否等于指定的对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与当前 Version 对象进行比较的对象，或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果当前 Version 对象和 obj 都为 Version 对象，并且当前 Version 对象的每个部分都与 obj 的相应部分匹配，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
Equals 重载
System 命名空间
CompareTo


Version ..::.Equals 方法 (Version)

Version
.
.
::
.
Equals 方法 (Version)
Version 类

返回一个值，该值指示当前 Version 对象和指定的 Version 对象是否表示同一个值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Equals ( _
    obj As Version _
) As Boolean
public bool Equals(
    Version obj
)
public:
virtual bool Equals(
    Version^ obj
) sealed
abstract Equals :
        obj:Version -> bool
override Equals :
        obj:Version -> bool

参数

obj
类型： System Version
要与当前的 Version 对象进行比较的 Version 对象，或者为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果当前 Version 对象的每个部分都与 obj 参数的相应部分匹配，则为 true；否则为 false。

实现

此方法实现 IEquatable<(Of <(T>)>) 接口，执行效果略好于 Equals 方法，因为它不必将 obj 参数取消装箱。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
Equals 重载
System 命名空间
Equals
CompareTo


Version ..::.GetHashCode 方法

Version
.
.
::
.
GetHashCode 方法
Version 类

返回当前 Version 对象的哈希代码。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

下面的代码示例演示 Version 构造函数以及 Major、Minor、Build、Revision、MajorRevision 和 MinorRevision 属性。

' This example demonstrates the Version.Revision,
' MajorRevision, and MinorRevision properties.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim fmtStd As String = "Standard version:" & vbCrLf & _
                               "  major.minor.build.revision = {0}.{1}.{2}.{3}"
        Dim fmtInt As String = "Interim version:" & vbCrLf & _
                               "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}"

        Dim std As New Version(2, 4, 1128, 2)
        Dim interim As New Version(2, 4, 1128, (100 << 16) + 2)

        Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision)
        Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build, _
                          interim.MajorRevision, interim.MinorRevision)
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Standard version:
'  major.minor.build.revision = 2.4.1128.2
'Interim version:
'  major.minor.build.majRev/minRev = 2.4.1128.100/2
'

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using System;

class Sample
{
    public static void Main()
    {

    string fmtStd = "Standard version:\n" +
                    "  major.minor.build.revision = {0}.{1}.{2}.{3}";
    string fmtInt = "Interim version:\n" +
                    "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version std = new Version(2, 4, 1128, 2);
    Version interim = new Version(2, 4, 1128, (100 << 16) + 2);

    Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision);
    Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build,
                              interim.MajorRevision, interim.MinorRevision);
    }
}
/*
This code example produces the following results:

Standard version:
  major.minor.build.revision = 2.4.1128.2
Interim version:
  major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using namespace System;

int main()
{
    String^ formatStandard = "Standard version:\n" +
        " major.minor.build.revision = {0}.{1}.{2}.{3}";
    String^ formatInterim = "Interim version:\n" +
        " major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version^ standardVersion = gcnew Version(2, 4, 1128, 2);
    Version^ interimVersion = gcnew Version(2, 4, 1128, (100 << 16) + 2);

    Console::WriteLine(formatStandard, standardVersion->Major,
        standardVersion->Minor, standardVersion->Build,
        standardVersion->Revision);
    Console::WriteLine(formatInterim, interimVersion->Major,
        interimVersion->Minor, interimVersion->Build,
        interimVersion->MajorRevision, interimVersion->MinorRevision);
};
/*
This code example produces the following results:

Standard version:
major.minor.build.revision = 2.4.1128.2
Interim version:
major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间


Version ..::.Parse 方法

Version
.
.
::
.
Parse 方法
Version 类

将版本号的字符串表示形式转换为等效的 Version 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Parse ( _
    input As String _
) As Version
public static Version Parse(
    string input
)
public:
static Version^ Parse(
    String^ input
)
static member Parse :
        input:string -> Version

参数

input
类型： System String
包含要转换的版本号的字符串。

返回值

类型： System Version
一个等效于 input 参数中指定的版本号的对象。
异常 | 条件
ArgumentNullException | input 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | input 少于两个组件或多于四个版本组件。
ArgumentOutOfRangeException | 在 input 中至少有一个组件小于零。
FormatException | 在 input 中至少有一个组件不是整数。
OverflowException | input 中至少有一个组件表示大于 Int32..::.MaxValue 的数。

input 参数必须采用以下格式：

major.minor[.build[.revision]]

其中，主、次、内部和修订分别是版本号的四个组件“主版本号、次版本号、内部版本号和修订号”的字符串表示形式。可选组件显示在方括号（[ 和 ]）中：这些组分必须按指定顺序显示，并且必须用句点分隔。 其中，主、次、内部和修订分别是版本号的四个组件“主版本号、次版本号、内部版本号和修订号”的字符串表示形式。可选组件显示在方括号（[ 和 ]）中：这些组分必须按指定顺序显示，并且必须用句点分隔。 其中，主、次、内部和修订分别是版本号的四个组件“主版本号、次版本号、内部版本号和修订号”的字符串表示形式。可选组件显示在方括号（[ 和 ]）中：这些组分必须按指定顺序显示，并且必须用句点分隔。

重要说明 重要事项

由于版本号的字符串表示形式必须符合可识别的模式，因此在调用 Parse 方法分析用户输入时，应用程序始终应使用异常处理。或者，可以调用 TryParse 方法来分析版本号的字符串表示并返回一个指示分析操作是否成功的值。 由于版本号的字符串表示形式必须符合可识别的模式，因此在调用 Parse 方法分析用户输入时，应用程序始终应使用异常处理。或者，可以调用 TryParse 方法来分析版本号的字符串表示并返回一个指示分析操作是否成功的值。

Parse 方法是一个便利方法，等效于调用 Version(String) 构造函数。

下面的示例使用 Parse 方法来解析一组包含版本信息的字符串。

Module Example
   Public Sub Main()
      Dim input As String = "4.0"
      ParseVersion(input)

      input = "4.0."
      ParseVersion(input)

      input = "1.1.2"
      ParseVersion(input)

      input = "1.1.2.01702"
      ParseVersion(input)

      input = "1.1.2.0702.119"
      ParseVersion(input)

      input =  "1.3.5.2150000000"
      ParseVersion(input)
   End Sub

   Private Sub ParseVersion(input As String)
      Try
         Dim ver As Version = Version.Parse(input)
         Console.WriteLine("Converted '{0} to {1}.", input, ver)
      Catch e As ArgumentNullException
         Console.WriteLine("Error: String to be parsed is null.")
      Catch e As ArgumentOutOfRangeException
         Console.WriteLine("Error: Negative value in '{0}'.", input)
      Catch e As ArgumentException
         Console.WriteLine("Error: Bad number of components in '{0}'.",
                           input)
      Catch e As FormatException
         Console.WriteLine("Error: Non-integer value in '{0}'.", input)
      Catch e As OverflowException
         Console.WriteLine("Error: Number out of range in '{0}'.", input)
      End Try
   End Sub
End Module
' The example displays the following output:
'       Converted '4.0 to 4.0.
'       Error: Non-integer value in '4.0.'.
'       Converted '1.1.2 to 1.1.2.
'       Converted '1.1.2.01702 to 1.1.2.1702.
'       Error: Bad number of components in '1.1.2.0702.119'.
'       Error: Number out of range in '1.3.5.2150000000'.

using System;

public class Example
{
   public static void Main()
   {
      string input = "4.0";
      ParseVersion(input);

      input = "4.0.";
      ParseVersion(input);

      input = "1.1.2";
      ParseVersion(input);

      input = "1.1.2.01702";
      ParseVersion(input);

      input = "1.1.2.0702.119";
      ParseVersion(input);

      input =  "1.3.5.2150000000";
      ParseVersion(input);
   }

   private static void ParseVersion(string input)
   {
      try {
         Version ver = Version.Parse(input);
         Console.WriteLine("Converted '{0} to {1}.", input, ver);
      }
      catch (ArgumentNullException) {
         Console.WriteLine("Error: String to be parsed is null.");
      }
      catch (ArgumentOutOfRangeException) {
         Console.WriteLine("Error: Negative value in '{0}'.", input);
      }
      catch (ArgumentException) {
         Console.WriteLine("Error: Bad number of components in '{0}'.",
                           input);
      }
      catch (FormatException) {
         Console.WriteLine("Error: Non-integer value in '{0}'.", input);
      }
      catch (OverflowException) {
         Console.WriteLine("Error: Number out of range in '{0}'.", input);
      }
   }
}
// The example displays the following output:
//       Converted '4.0 to 4.0.
//       Error: Non-integer value in '4.0.'.
//       Converted '1.1.2 to 1.1.2.
//       Converted '1.1.2.01702 to 1.1.2.1702.
//       Error: Bad number of components in '1.1.2.0702.119'.
//       Error: Number out of range in '1.3.5.2150000000'.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Version 类
Version 成员
System 命名空间
ToString
TryParse


Version ..::.ToString 方法

Version
.
.
::
.
ToString 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Version 类

将当前 Version 对象的值转换为其等效的 String 表示形式。

名称 说明
页首

参考

Version 类
Version 成员
System 命名空间


Version ..::.ToString 方法

Version
.
.
::
.
ToString 方法
Version 类

将当前 Version 对象的值转换为其等效的 String 表示形式。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前 Version 对象的主要版本号、次要版本号、内部版本号和修订号部分的值的 String 表示形式（遵循下面所示格式）。各部分之间由句点字符（“.”）分隔。方括号（“[”和“]”）指示在返回值中不会出现的部分（如果未定义该部分）： 当前 Version 对象的主要版本号、次要版本号、内部版本号和修订号部分的值的 String 表示形式（遵循下面所示格式）。各部分之间由句点字符（“.”）分隔。方括号（“[”和“]”）指示在返回值中不会出现的部分（如果未定义该部分）： 当前 Version 对象的主要版本号、次要版本号、内部版本号和修订号部分的值的 String 表示形式（遵循下面所示格式）。各部分之间由句点字符（“.”）分隔。方括号（“[”和“]”）指示在返回值中不会出现的部分（如果未定义该部分）：
主要版本号.次要版本号[.内部版本号[.修订号]]
例如，如果使用构造函数 Version(1,1) 创建 Version 对象，则返回的字符串为“1.1”。如果使用构造函数 Version(1,3,4,2) 创建 Version 对象，则返回的字符串为“1.3.4.2”。 例如，如果使用构造函数 Version(1,1) 创建 Version 对象，则返回的字符串为“1.1”。如果使用构造函数 Version(1,3,4,2) 创建 Version 对象，则返回的字符串为“1.3.4.2”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
ToString 重载
System 命名空间


Version ..::.ToString 方法 (Int32)

Version
.
.
::
.
ToString 方法 (Int32)
Version 类

将当前 Version 对象的值转换为其等效的 String 表示形式。指定的计数指示要返回的部分数。 将当前 Version 对象的值转换为其等效的 String 表示形式。指定的计数指示要返回的部分数。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Function ToString ( _ fieldCount As Integer _ ) As String
public string ToString( int fieldCount )
public: String^ ToString( int fieldCount )
member ToString : fieldCount:int -> string
参数
fieldCount
类型： System Int32
要返回的部分数。
fieldCount
的范围是从 0 到 4。
要返回的部分数。
fieldCount
的范围是从 0 到 4。
返回值
类型： System String
当前
Version
对象的主要版本号、次要版本号、内部版本号和修订号部分的值的
String
表示形式，各部分之间用句点字符（“.”）分隔。
fieldCount
参数确定返回多少个部分。
当前
Version
对象的主要版本号、次要版本号、内部版本号和修订号部分的值的
String
表示形式，各部分之间用句点字符（“.”）分隔。
fieldCount
参数确定返回多少个部分。
fieldCount
返回值
0
空字符串 ("")。
1
主要版本号
2
主要版本号.次要版本号
3
主要版本号.次要版本号.内部版本号
4
主要版本号.次要版本号.内部版本号.修订号
例如，如果使用构造函数
Version(1,3,5)
创建
Version
对象，则
ToString(2)
返回“1.3”，并且
ToString(4)
引发异常。
异常 | 条件
ArgumentException | fieldCount 小于 0 或大于 4。 - 或 - fieldCount 多于在当前 Version 对象中定义的部分的数量。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
ToString 重载
System 命名空间


Version ..::.TryParse 方法

Version
.
.
::
.
TryParse 方法
Version 类

尝试将版本号的字符串表示形式转换为等效的 Version 对象，并返回一个指示转换是否成功的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function TryParse ( _
    input As String, _
    <OutAttribute> ByRef result As Version _
) As Boolean
public static bool TryParse(
    string input,
    out Version result
)
public:
static bool TryParse(
    String^ input,
    [OutAttribute] Version^% result
)
static member TryParse :
        input:string *
        result:Version byref -> bool

参数

input
类型： System String
包含要转换的版本号的字符串。
result
类型： System Version %
当此方法返回时，如果转换成功，则包含与 input 中所含编号等效的 Version；如果转换失败，则包含主版本号和次版本号都为 0 的 Version 对象。

返回值

类型： System Boolean
如果 input 参数成功转换，则为 true；否则为 false。

TryParse 方法类似于 Parse 方法，不同之处在于它在转换失败时不引发异常。相反，如果 input 为 null，则它返回 false，它具有两个以下或四个以上组件、至少一个不为整数的组件、至少一个小于零的组件，或者至少具有一个大于 Int32..::.MaxValue 的组件。 TryParse 方法类似于 Parse 方法，不同之处在于它在转换失败时不引发异常。相反，如果 input 为 null，则它返回 false，它具有两个以下或四个以上组件、至少一个不为整数的组件、至少一个小于零的组件，或者至少具有一个大于 Int32..::.MaxValue 的组件。

为了分析操作成功进行，input 参数必须采用以下格式：

major.minor[.build[.revision]]

其中，主、次、内部和修订分别是版本号的四个组件“主版本号、次版本号、内部版本号和修订号”的字符串表示形式。可选组件显示在方括号（[ 和 ]）中：这些组分必须按顺序显示，并且必须用句点分隔。 其中，主、次、内部和修订分别是版本号的四个组件“主版本号、次版本号、内部版本号和修订号”的字符串表示形式。可选组件显示在方括号（[ 和 ]）中：这些组分必须按顺序显示，并且必须用句点分隔。 其中，主、次、内部和修订分别是版本号的四个组件“主版本号、次版本号、内部版本号和修订号”的字符串表示形式。可选组件显示在方括号（[ 和 ]）中：这些组分必须按顺序显示，并且必须用句点分隔。

下面的示例使用 TryParse 方法来解析一组包含版本信息的字符串。

Module Example
   Public Sub Main()
      Dim input As String = "4.0"
      ParseVersion(input)

      input = "4.0."
      ParseVersion(input)

      input = "1.1.2"
      ParseVersion(input)

      input = "1.1.2.01702"
      ParseVersion(input)

      input = "1.1.2.0702.119"
      ParseVersion(input)

      input =  "1.3.5.2150000000"
      ParseVersion(input)
   End Sub

   Private Sub ParseVersion(input As String)
      Dim ver As Version = Nothing
      If Version.TryParse(input, ver) Then
         Console.WriteLine("Converted '{0} to {1}.", input, ver)
      Else
         Console.WriteLine("Unable to determine the version from '{0}'.",
                           input)
      End If
   End Sub
End Module
' The example displays the following output:
'       Converted '4.0 to 4.0.
'       Unable to determine the version from '4.0.'.
'       Converted '1.1.2 to 1.1.2.
'       Converted '1.1.2.01702 to 1.1.2.1702.
'       Unable to determine the version from '1.1.2.0702.119'.
'       Unable to determine the version from '1.3.5.2150000000'.

using System;

public class Example
{
   public static void Main()
   {
      string input = "4.0";
      ParseVersion(input);

      input = "4.0.";
      ParseVersion(input);

      input = "1.1.2";
      ParseVersion(input);

      input = "1.1.2.01702";
      ParseVersion(input);

      input = "1.1.2.0702.119";
      ParseVersion(input);

      input =  "1.3.5.2150000000";
      ParseVersion(input);
   }

   private static void ParseVersion(string input)
   {
      Version ver = null;
      if (Version.TryParse(input, out ver))
         Console.WriteLine("Converted '{0} to {1}.", input, ver);
      else
         Console.WriteLine("Unable to determine the version from '{0}'.",
                           input);
   }
}
// The example displays the following output:
//       Converted '4.0 to 4.0.
//       Unable to determine the version from '4.0.'.
//       Converted '1.1.2 to 1.1.2.
//       Converted '1.1.2.01702 to 1.1.2.1702.
//       Unable to determine the version from '1.1.2.0702.119'.
//       Unable to determine the version from '1.3.5.2150000000'.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

Version 类
Version 成员
System 命名空间
Parse
ToString


Version 运算符

Version 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Version 类

Version 类型公开以下成员。

名称 说明
页首

参考

Version 类
System 命名空间


Version ..::.Equality 运算符

Version
.
.
::
.
Equality 运算符
Version 类

确定两个指定的 Version 对象是否相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator = ( _
    v1 As Version, _
    v2 As Version _
) As Boolean
public static bool operator ==(
    Version v1,
    Version v2
)
public:
static bool operator ==(
    Version^ v1,
    Version^ v2
)
static let inline (=)
        v1:Version *
        v2:Version  : bool

参数

v1
类型： System Version
第一个 Version 对象。
v2
类型： System Version
第二个 Version 对象。

返回值

类型： System Boolean
如果 v1 等于 v2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间
Equals
CompareTo


Version ..::.GreaterThan 运算符

Version
.
.
::
.
GreaterThan 运算符
Version 类

确定指定的第一个 Version 对象是否大于指定的第二个 Version 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator > ( _
    v1 As Version, _
    v2 As Version _
) As Boolean
public static bool operator >(
    Version v1,
    Version v2
)
public:
static bool operator >(
    Version^ v1,
    Version^ v2
)
static let inline (>)
        v1:Version *
        v2:Version  : bool

参数

v1
类型： System Version
第一个 Version 对象。
v2
类型： System Version
第二个 Version 对象。

返回值

类型： System Boolean
如果 v1 大于 v2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间
Equals
CompareTo


Version ..::.GreaterThanOrEqual 运算符

Version
.
.
::
.
GreaterThanOrEqual 运算符
Version 类

确定指定的第一个 Version 对象是否大于等于指定的第二个 Version 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator >= ( _
    v1 As Version, _
    v2 As Version _
) As Boolean
public static bool operator >=(
    Version v1,
    Version v2
)
public:
static bool operator >=(
    Version^ v1,
    Version^ v2
)
static let inline (>=)
        v1:Version *
        v2:Version  : bool

参数

v1
类型： System Version
第一个 Version 对象。
v2
类型： System Version
第二个 Version 对象。

返回值

类型： System Boolean
如果 v1 大于等于 v2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间
Equals
CompareTo


Version ..::.Inequality 运算符

Version
.
.
::
.
Inequality 运算符
Version 类

确定两个指定的 Version 对象是否不相等。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <> ( _
    v1 As Version, _
    v2 As Version _
) As Boolean
public static bool operator !=(
    Version v1,
    Version v2
)
public:
static bool operator !=(
    Version^ v1,
    Version^ v2
)
static let inline (<>)
        v1:Version *
        v2:Version  : bool

参数

v1
类型： System Version
第一个 Version 对象。
v2
类型： System Version
第二个 Version 对象。

返回值

类型： System Boolean
如果 v1 不等于 v2，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间
Equals
CompareTo


Version ..::.LessThan 运算符

Version
.
.
::
.
LessThan 运算符
Version 类

确定指定的第一个 Version 对象是否小于指定的第二个 Version 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator < ( _
    v1 As Version, _
    v2 As Version _
) As Boolean
public static bool operator <(
    Version v1,
    Version v2
)
public:
static bool operator <(
    Version^ v1,
    Version^ v2
)
static let inline (<)
        v1:Version *
        v2:Version  : bool

参数

v1
类型： System Version
第一个 Version 对象。
v2
类型： System Version
第二个 Version 对象。

返回值

类型： System Boolean
如果 v1 小于 v2，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | v1 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间
Equals
CompareTo


Version ..::.LessThanOrEqual 运算符

Version
.
.
::
.
LessThanOrEqual 运算符
Version 类

确定指定的第一个 Version 对象是否小于或等于第二个 Version 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Operator <= ( _
    v1 As Version, _
    v2 As Version _
) As Boolean
public static bool operator <=(
    Version v1,
    Version v2
)
public:
static bool operator <=(
    Version^ v1,
    Version^ v2
)
static let inline (<=)
        v1:Version *
        v2:Version  : bool

参数

v1
类型： System Version
第一个 Version 对象。
v2
类型： System Version
第二个 Version 对象。

返回值

类型： System Boolean
如果 v1 小于或等于 v2，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | v1 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间
Equals
CompareTo


Version 属性

Version 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Version 类

Version 类型公开以下成员。

名称 说明
页首

参考

Version 类
System 命名空间


Version ..::.Build 属性

Version
.
.
::
.
Build 属性
Version 类

获取当前 Version 对象版本号的内部版本号部分的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Build As Integer
    Get
public int Build { get; }
public:
property int Build {
    int get ();
}
member Build : int

属性值

类型： System Int32
内部版本号或为 -1（如果未定义内部版本号）。

例如，如果版本号为 6.2.1.3，则内部版本号为 1。如果版本号或为 6.2，则未定义内部版本号。 例如，如果版本号为 6.2.1.3，则内部版本号为 1。如果版本号或为 6.2，则未定义内部版本号。

下面的代码示例演示 Version 构造函数以及 Major、Minor、Build、Revision、MajorRevision 和 MinorRevision 属性。

' This example demonstrates the Version.Revision,
' MajorRevision, and MinorRevision properties.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim fmtStd As String = "Standard version:" & vbCrLf & _
                               "  major.minor.build.revision = {0}.{1}.{2}.{3}"
        Dim fmtInt As String = "Interim version:" & vbCrLf & _
                               "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}"

        Dim std As New Version(2, 4, 1128, 2)
        Dim interim As New Version(2, 4, 1128, (100 << 16) + 2)

        Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision)
        Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build, _
                          interim.MajorRevision, interim.MinorRevision)
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Standard version:
'  major.minor.build.revision = 2.4.1128.2
'Interim version:
'  major.minor.build.majRev/minRev = 2.4.1128.100/2
'

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using System;

class Sample
{
    public static void Main()
    {

    string fmtStd = "Standard version:\n" +
                    "  major.minor.build.revision = {0}.{1}.{2}.{3}";
    string fmtInt = "Interim version:\n" +
                    "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version std = new Version(2, 4, 1128, 2);
    Version interim = new Version(2, 4, 1128, (100 << 16) + 2);

    Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision);
    Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build,
                              interim.MajorRevision, interim.MinorRevision);
    }
}
/*
This code example produces the following results:

Standard version:
  major.minor.build.revision = 2.4.1128.2
Interim version:
  major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using namespace System;

int main()
{
    String^ formatStandard = "Standard version:\n" +
        " major.minor.build.revision = {0}.{1}.{2}.{3}";
    String^ formatInterim = "Interim version:\n" +
        " major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version^ standardVersion = gcnew Version(2, 4, 1128, 2);
    Version^ interimVersion = gcnew Version(2, 4, 1128, (100 << 16) + 2);

    Console::WriteLine(formatStandard, standardVersion->Major,
        standardVersion->Minor, standardVersion->Build,
        standardVersion->Revision);
    Console::WriteLine(formatInterim, interimVersion->Major,
        interimVersion->Minor, interimVersion->Build,
        interimVersion->MajorRevision, interimVersion->MinorRevision);
};
/*
This code example produces the following results:

Standard version:
major.minor.build.revision = 2.4.1128.2
Interim version:
major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间


Version ..::.Major 属性

Version
.
.
::
.
Major 属性
Version 类

获取当前 Version 对象版本号的主要版本号部分的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Major As Integer
    Get
public int Major { get; }
public:
property int Major {
    int get ();
}
member Major : int

属性值

类型： System Int32
主要版本号。

例如，如果版本号为 6.2，则主要版本号为 6。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间


Version ..::.MajorRevision 属性

Version
.
.
::
.
MajorRevision 属性
Version 类

获取修订号的高 16 位。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property MajorRevision As Short
    Get
public short MajorRevision { get; }
public:
property short MajorRevision {
    short get ();
}
member MajorRevision : int16

属性值

类型： System Int16
16 位的有符号整数。

假定您发布了应用程序的一个临时版本，以便在发布永久解决方案之前临时纠正某个问题。该临时版本不一定有新的修订号，但确实需要被标识为一个不同的版本。在这种情况下，分别对 32 位修订号的高 16 位和低 16 位部分中的标识信息进行编码。使用 Revision 属性来获取整个修订号，使用 MajorRevision 属性来获取高 16 位，使用 MinorRevision 属性来获取低 16 位。 假定您发布了应用程序的一个临时版本，以便在发布永久解决方案之前临时纠正某个问题。该临时版本不一定有新的修订号，但确实需要被标识为一个不同的版本。在这种情况下，分别对 32 位修订号的高 16 位和低 16 位部分中的标识信息进行编码。使用 Revision 属性来获取整个修订号，使用 MajorRevision 属性来获取高 16 位，使用 MinorRevision 属性来获取低 16 位。 假定您发布了应用程序的一个临时版本，以便在发布永久解决方案之前临时纠正某个问题。该临时版本不一定有新的修订号，但确实需要被标识为一个不同的版本。在这种情况下，分别对 32 位修订号的高 16 位和低 16 位部分中的标识信息进行编码。使用 Revision 属性来获取整个修订号，使用 MajorRevision 属性来获取高 16 位，使用 MinorRevision 属性来获取低 16 位。 假定您发布了应用程序的一个临时版本，以便在发布永久解决方案之前临时纠正某个问题。该临时版本不一定有新的修订号，但确实需要被标识为一个不同的版本。在这种情况下，分别对 32 位修订号的高 16 位和低 16 位部分中的标识信息进行编码。使用 Revision 属性来获取整个修订号，使用 MajorRevision 属性来获取高 16 位，使用 MinorRevision 属性来获取低 16 位。

从 .NET Framework 版本 2.0 开始，Windows NT 操作系统使用 MajorRevision 属性对 Service Pack 号进行编码。

下面的代码示例演示 Version 构造函数以及 Major、Minor、Build、Revision、MajorRevision 和 MinorRevision 属性。

' This example demonstrates the Version.Revision,
' MajorRevision, and MinorRevision properties.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim fmtStd As String = "Standard version:" & vbCrLf & _
                               "  major.minor.build.revision = {0}.{1}.{2}.{3}"
        Dim fmtInt As String = "Interim version:" & vbCrLf & _
                               "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}"

        Dim std As New Version(2, 4, 1128, 2)
        Dim interim As New Version(2, 4, 1128, (100 << 16) + 2)

        Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision)
        Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build, _
                          interim.MajorRevision, interim.MinorRevision)
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Standard version:
'  major.minor.build.revision = 2.4.1128.2
'Interim version:
'  major.minor.build.majRev/minRev = 2.4.1128.100/2
'

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using System;

class Sample
{
    public static void Main()
    {

    string fmtStd = "Standard version:\n" +
                    "  major.minor.build.revision = {0}.{1}.{2}.{3}";
    string fmtInt = "Interim version:\n" +
                    "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version std = new Version(2, 4, 1128, 2);
    Version interim = new Version(2, 4, 1128, (100 << 16) + 2);

    Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision);
    Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build,
                              interim.MajorRevision, interim.MinorRevision);
    }
}
/*
This code example produces the following results:

Standard version:
  major.minor.build.revision = 2.4.1128.2
Interim version:
  major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using namespace System;

int main()
{
    String^ formatStandard = "Standard version:\n" +
        " major.minor.build.revision = {0}.{1}.{2}.{3}";
    String^ formatInterim = "Interim version:\n" +
        " major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version^ standardVersion = gcnew Version(2, 4, 1128, 2);
    Version^ interimVersion = gcnew Version(2, 4, 1128, (100 << 16) + 2);

    Console::WriteLine(formatStandard, standardVersion->Major,
        standardVersion->Minor, standardVersion->Build,
        standardVersion->Revision);
    Console::WriteLine(formatInterim, interimVersion->Major,
        interimVersion->Minor, interimVersion->Build,
        interimVersion->MajorRevision, interimVersion->MinorRevision);
};
/*
This code example produces the following results:

Standard version:
major.minor.build.revision = 2.4.1128.2
Interim version:
major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Version 类
Version 成员
System 命名空间
MinorRevision


Version ..::.Minor 属性

Version
.
.
::
.
Minor 属性
Version 类

获取当前 Version 对象版本号的次要版本号部分的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Minor As Integer
    Get
public int Minor { get; }
public:
property int Minor {
    int get ();
}
member Minor : int

属性值

类型： System Int32
次要版本号。

例如，如果版本号为 6.2，则次要版本号为 2。

下面的代码示例演示 Version 构造函数以及 Major、Minor、Build、Revision、MajorRevision 和 MinorRevision 属性。

' This example demonstrates the Version.Revision,
' MajorRevision, and MinorRevision properties.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim fmtStd As String = "Standard version:" & vbCrLf & _
                               "  major.minor.build.revision = {0}.{1}.{2}.{3}"
        Dim fmtInt As String = "Interim version:" & vbCrLf & _
                               "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}"

        Dim std As New Version(2, 4, 1128, 2)
        Dim interim As New Version(2, 4, 1128, (100 << 16) + 2)

        Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision)
        Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build, _
                          interim.MajorRevision, interim.MinorRevision)
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Standard version:
'  major.minor.build.revision = 2.4.1128.2
'Interim version:
'  major.minor.build.majRev/minRev = 2.4.1128.100/2
'

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using System;

class Sample
{
    public static void Main()
    {

    string fmtStd = "Standard version:\n" +
                    "  major.minor.build.revision = {0}.{1}.{2}.{3}";
    string fmtInt = "Interim version:\n" +
                    "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version std = new Version(2, 4, 1128, 2);
    Version interim = new Version(2, 4, 1128, (100 << 16) + 2);

    Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision);
    Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build,
                              interim.MajorRevision, interim.MinorRevision);
    }
}
/*
This code example produces the following results:

Standard version:
  major.minor.build.revision = 2.4.1128.2
Interim version:
  major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using namespace System;

int main()
{
    String^ formatStandard = "Standard version:\n" +
        " major.minor.build.revision = {0}.{1}.{2}.{3}";
    String^ formatInterim = "Interim version:\n" +
        " major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version^ standardVersion = gcnew Version(2, 4, 1128, 2);
    Version^ interimVersion = gcnew Version(2, 4, 1128, (100 << 16) + 2);

    Console::WriteLine(formatStandard, standardVersion->Major,
        standardVersion->Minor, standardVersion->Build,
        standardVersion->Revision);
    Console::WriteLine(formatInterim, interimVersion->Major,
        interimVersion->Minor, interimVersion->Build,
        interimVersion->MajorRevision, interimVersion->MinorRevision);
};
/*
This code example produces the following results:

Standard version:
major.minor.build.revision = 2.4.1128.2
Interim version:
major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间


Version ..::.MinorRevision 属性

Version
.
.
::
.
MinorRevision 属性
Version 类

获取修订号的低 16 位。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property MinorRevision As Short
    Get
public short MinorRevision { get; }
public:
property short MinorRevision {
    short get ();
}
member MinorRevision : int16

属性值

类型： System Int16
16 位的有符号整数。

假定您发布了应用程序的一个临时版本，以便在发布永久解决方案之前临时纠正某个问题。该临时版本不一定有新的修订号，但确实需要被标识为一个不同的版本。在这种情况下，分别对 32 位修订号的高 16 位和低 16 位部分中的标识信息进行编码。使用 Revision 属性来获取整个修订号，使用 MajorRevision 属性来获取高 16 位，使用 MinorRevision 属性来获取低 16 位。 假定您发布了应用程序的一个临时版本，以便在发布永久解决方案之前临时纠正某个问题。该临时版本不一定有新的修订号，但确实需要被标识为一个不同的版本。在这种情况下，分别对 32 位修订号的高 16 位和低 16 位部分中的标识信息进行编码。使用 Revision 属性来获取整个修订号，使用 MajorRevision 属性来获取高 16 位，使用 MinorRevision 属性来获取低 16 位。 假定您发布了应用程序的一个临时版本，以便在发布永久解决方案之前临时纠正某个问题。该临时版本不一定有新的修订号，但确实需要被标识为一个不同的版本。在这种情况下，分别对 32 位修订号的高 16 位和低 16 位部分中的标识信息进行编码。使用 Revision 属性来获取整个修订号，使用 MajorRevision 属性来获取高 16 位，使用 MinorRevision 属性来获取低 16 位。 假定您发布了应用程序的一个临时版本，以便在发布永久解决方案之前临时纠正某个问题。该临时版本不一定有新的修订号，但确实需要被标识为一个不同的版本。在这种情况下，分别对 32 位修订号的高 16 位和低 16 位部分中的标识信息进行编码。使用 Revision 属性来获取整个修订号，使用 MajorRevision 属性来获取高 16 位，使用 MinorRevision 属性来获取低 16 位。

下面的代码示例演示 Version 构造函数以及 Major、Minor、Build、Revision、MajorRevision 和 MinorRevision 属性。

' This example demonstrates the Version.Revision,
' MajorRevision, and MinorRevision properties.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim fmtStd As String = "Standard version:" & vbCrLf & _
                               "  major.minor.build.revision = {0}.{1}.{2}.{3}"
        Dim fmtInt As String = "Interim version:" & vbCrLf & _
                               "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}"

        Dim std As New Version(2, 4, 1128, 2)
        Dim interim As New Version(2, 4, 1128, (100 << 16) + 2)

        Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision)
        Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build, _
                          interim.MajorRevision, interim.MinorRevision)
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Standard version:
'  major.minor.build.revision = 2.4.1128.2
'Interim version:
'  major.minor.build.majRev/minRev = 2.4.1128.100/2
'

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using System;

class Sample
{
    public static void Main()
    {

    string fmtStd = "Standard version:\n" +
                    "  major.minor.build.revision = {0}.{1}.{2}.{3}";
    string fmtInt = "Interim version:\n" +
                    "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version std = new Version(2, 4, 1128, 2);
    Version interim = new Version(2, 4, 1128, (100 << 16) + 2);

    Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision);
    Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build,
                              interim.MajorRevision, interim.MinorRevision);
    }
}
/*
This code example produces the following results:

Standard version:
  major.minor.build.revision = 2.4.1128.2
Interim version:
  major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using namespace System;

int main()
{
    String^ formatStandard = "Standard version:\n" +
        " major.minor.build.revision = {0}.{1}.{2}.{3}";
    String^ formatInterim = "Interim version:\n" +
        " major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version^ standardVersion = gcnew Version(2, 4, 1128, 2);
    Version^ interimVersion = gcnew Version(2, 4, 1128, (100 << 16) + 2);

    Console::WriteLine(formatStandard, standardVersion->Major,
        standardVersion->Minor, standardVersion->Build,
        standardVersion->Revision);
    Console::WriteLine(formatInterim, interimVersion->Major,
        interimVersion->Minor, interimVersion->Build,
        interimVersion->MajorRevision, interimVersion->MinorRevision);
};
/*
This code example produces the following results:

Standard version:
major.minor.build.revision = 2.4.1128.2
Interim version:
major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Version 类
Version 成员
System 命名空间
MajorRevision


Version ..::.Revision 属性

Version
.
.
::
.
Revision 属性
Version 类

获取当前 Version 对象版本号的修订号部分的值。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Revision As Integer
    Get
public int Revision { get; }
public:
property int Revision {
    int get ();
}
member Revision : int

属性值

类型： System Int32
修订号或为 -1（如果未定义修订号）。

例如，如果版本号为 6.2.1.3，则修订号为 3。如果版本号为 6.2，则未定义修订号。 例如，如果版本号为 6.2.1.3，则修订号为 3。如果版本号为 6.2，则未定义修订号。

下面的代码示例演示 Version 构造函数以及 Major、Minor、Build、Revision、MajorRevision 和 MinorRevision 属性。

' This example demonstrates the Version.Revision,
' MajorRevision, and MinorRevision properties.

Imports System

Class Sample
    Public Shared Sub Main()
        Dim fmtStd As String = "Standard version:" & vbCrLf & _
                               "  major.minor.build.revision = {0}.{1}.{2}.{3}"
        Dim fmtInt As String = "Interim version:" & vbCrLf & _
                               "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}"

        Dim std As New Version(2, 4, 1128, 2)
        Dim interim As New Version(2, 4, 1128, (100 << 16) + 2)

        Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision)
        Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build, _
                          interim.MajorRevision, interim.MinorRevision)
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'Standard version:
'  major.minor.build.revision = 2.4.1128.2
'Interim version:
'  major.minor.build.majRev/minRev = 2.4.1128.100/2
'

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using System;

class Sample
{
    public static void Main()
    {

    string fmtStd = "Standard version:\n" +
                    "  major.minor.build.revision = {0}.{1}.{2}.{3}";
    string fmtInt = "Interim version:\n" +
                    "  major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version std = new Version(2, 4, 1128, 2);
    Version interim = new Version(2, 4, 1128, (100 << 16) + 2);

    Console.WriteLine(fmtStd, std.Major, std.Minor, std.Build, std.Revision);
    Console.WriteLine(fmtInt, interim.Major, interim.Minor, interim.Build,
                              interim.MajorRevision, interim.MinorRevision);
    }
}
/*
This code example produces the following results:

Standard version:
  major.minor.build.revision = 2.4.1128.2
Interim version:
  major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

// This example demonstrates the Version.Revision,
// MajorRevision, and MinorRevision properties.
using namespace System;

int main()
{
    String^ formatStandard = "Standard version:\n" +
        " major.minor.build.revision = {0}.{1}.{2}.{3}";
    String^ formatInterim = "Interim version:\n" +
        " major.minor.build.majRev/minRev = {0}.{1}.{2}.{3}/{4}";

    Version^ standardVersion = gcnew Version(2, 4, 1128, 2);
    Version^ interimVersion = gcnew Version(2, 4, 1128, (100 << 16) + 2);

    Console::WriteLine(formatStandard, standardVersion->Major,
        standardVersion->Minor, standardVersion->Build,
        standardVersion->Revision);
    Console::WriteLine(formatInterim, interimVersion->Major,
        interimVersion->Minor, interimVersion->Build,
        interimVersion->MajorRevision, interimVersion->MinorRevision);
};
/*
This code example produces the following results:

Standard version:
major.minor.build.revision = 2.4.1128.2
Interim version:
major.minor.build.majRev/minRev = 2.4.1128.100/2

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Version 类
Version 成员
System 命名空间


Void 结构

Void 结构
成员

为不返回值的方法指定返回值类型。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Void
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct Void
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class Void
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Void =  struct end

Void 结构用于 System.Reflection 命名空间，但在普通应用程序中用处不大。除所有类型均继承自 Object 类的成员外，Void 结构没有其他成员。 Void 结构用于 System.Reflection 命名空间，但在普通应用程序中用处不大。除所有类型均继承自 Object 类的成员外，Void 结构没有其他成员。

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Void 成员
System 命名空间


Void 成员

Void 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Void 结构

为不返回值的方法指定返回值类型。

Void 类型公开以下成员。

名称 说明
页首

参考

Void 结构
System 命名空间


Void 方法

Void 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Void 结构

Void 类型公开以下成员。

名称 说明
页首

参考

Void 结构
System 命名空间


WeakReference 类

WeakReference 类
成员

表示弱引用，即在引用对象的同时仍然允许垃圾回收来回收该对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags := SecurityPermissionFlag.UnmanagedCode)> _
Public Class WeakReference _
    Implements ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public class WeakReference : ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, Flags = SecurityPermissionFlag::UnmanagedCode)]
public ref class WeakReference : ISerializable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
[<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.UnmanagedCode)>]
type WeakReference =
    class
        interface ISerializable
    end

弱引用允许垃圾回收器在回收对象的同时仍然允许应用程序访问该对象。如果需要该对象，则仍然可以获取对该对象的强引用，并阻止对它进行回收。有关如何使用短弱引用和长弱引用的更多信息，请参见弱引用。 弱引用允许垃圾回收器在回收对象的同时仍然允许应用程序访问该对象。如果需要该对象，则仍然可以获取对该对象的强引用，并阻止对它进行回收。有关如何使用短弱引用和长弱引用的更多信息，请参见弱引用。 弱引用允许垃圾回收器在回收对象的同时仍然允许应用程序访问该对象。如果需要该对象，则仍然可以获取对该对象的强引用，并阻止对它进行回收。有关如何使用短弱引用和长弱引用的更多信息，请参见弱引用。

下面的代码示例演示如何使用弱引用将对象的缓存作为应用程序的资源进行维护。此缓存是使用以索引值为关键字的 WeakReference 对象的 IDictionary<(Of <(TKey, TValue>)>) 构建的。WeakReference 对象的 Target 属性是一个表示数据的字节数组中的对象。 下面的代码示例演示如何使用弱引用将对象的缓存作为应用程序的资源进行维护。此缓存是使用以索引值为关键字的 WeakReference 对象的 IDictionary<(Of <(TKey, TValue>)>) 构建的。WeakReference 对象的 Target 属性是一个表示数据的字节数组中的对象。 下面的代码示例演示如何使用弱引用将对象的缓存作为应用程序的资源进行维护。此缓存是使用以索引值为关键字的 WeakReference 对象的 IDictionary<(Of <(TKey, TValue>)>) 构建的。WeakReference 对象的 Target 属性是一个表示数据的字节数组中的对象。

此示例将随机访问缓存中的对象。如果通过垃圾回收来回收对象，则将重新生成新的数据对象；否则，该对象会因弱引用而可访问。 此示例将随机访问缓存中的对象。如果通过垃圾回收来回收对象，则将重新生成新的数据对象；否则，该对象会因弱引用而可访问。

Imports System
Imports System.Collections.Generic
Public Class Module1

    Public Shared Sub Main()

        ' Create the cache.
        Dim cacheSize As Integer = 50
        Dim r As Random = New Random
        Dim c As Cache = New Cache(cacheSize)

        Dim DataName As String = ""

        ' Randomly access objects in the cache.
        Dim i As Integer
        Do While i < c.Count
            Dim index As Integer = r.Next(c.Count)

            ' Access the object by
            ' getting a property value.
            DataName = c(index).Name

            i += 1
        Loop

        'Show results.
        Dim regenPercent As Double = c.RegenerationCount * 100 / c.Count
        Console.WriteLine("Cache size: {0}, Regenerated: {1}%", c.Count.ToString(), regenPercent.ToString())

    End Sub
End Class
Public Class Cache

    ' Dictionary to contain the cache.
    Private Shared _cache As Dictionary(Of Integer, WeakReference)

    ' Track the number of times an
    ' object is regenerated.
    Dim regenCount As Integer = 0

    Public Sub New(ByVal count As Integer)
        MyBase.New()
        _cache = New Dictionary(Of Integer, WeakReference)

        ' Add data objects with a short
        ' weak reference to the cache.
        Dim i As Integer = 0
        Do While (i < count)
            _cache.Add(i, New WeakReference(New Data(i)))
            i = (i + 1)
        Loop
    End Sub

    ' Number of items in the cache.
    Public ReadOnly Property Count() As Integer
        Get
            Return _cache.Count
        End Get
    End Property

    ' Number of times an
    ' object needs to be regenerated.
    Public ReadOnly Property RegenerationCount() As Integer
        Get
            Return regenCount
        End Get
    End Property

    ' Access a data object from the cache.
    ' If the object was reclaimed for garbage collection,
    ' create a new data object at that index location.
    Default Public ReadOnly Property Item(ByVal index As Integer) As Data
        Get
            ' Obtain an instance of a data
            ' object from the cache of
            ' of weak reference objects.
            Dim d As Data = CType(_cache(index).Target, Data)
            If (d Is Nothing) Then
                ' Object was reclaimed, so generate a new one.
                Console.WriteLine("Regenerate object at {0}: Yes", index.ToString())
                d = New Data(index)
                regenCount += 1
           Else
                 ' Object was obtained with the weak reference.
                Console.WriteLine("Regenerate object at {0}: No", index.ToString())
            End If
            Return d
        End Get

    End Property
End Class

' Class that creates byte arrays to simulate data.
Public Class Data

    Private _data() As Byte

    Private _name As String

    Public Sub New(ByVal size As Integer)
        MyBase.New()
        _data = New Byte(((size * 1024)) - 1) {}
        _name = size.ToString
    End Sub

    ' Simple property for
    ' accessing the object.
    Public ReadOnly Property Name() As String
        Get
            Return _name
        End Get
    End Property
End Class

' Example of the last lines of the output:
' ...
' Regenerate object at 36: Yes
' Regenerate object at 8: Yes
' Regenerate object at 21: Yes
' Regenerate object at 4: Yes
' Regenerate object at 38: No
' Regenerate object at 7: Yes
' Regenerate object at 2: Yes
' Regenerate object at 43: Yes
' Regenerate object at 38: No
' Cache size: 50, Regenerated: 94%
'

using System;
using System.Collections.Generic;

public class Program
{

    public static void Main()
    {

        // Create the cache.
        int cacheSize = 50;
        Random r = new Random();
        Cache c = new Cache(cacheSize);

        string DataName = "";

        // Randomly access objects in the cache.
        for (int i = 0; i < c.Count; i++)
        {
            int index = r.Next(c.Count);

            // Access the object by
            // getting a property value.
            DataName = c[index].Name;
        }
        // Show results.
        double regenPercent = c.RegenerationCount * 100 / c.Count;
        Console.WriteLine("Cache size: {0}, Regenerated: {1}%", c.Count.ToString(), regenPercent.ToString());

    }
}

public class Cache
{
    // Dictionary to contain the cache.
    static Dictionary<int, WeakReference> _cache;

    // Track the number of times an
    // object is regenerated.
    int regenCount = 0;

    public Cache(int count)
    {

        _cache = new Dictionary<int, WeakReference>();

        // Add data objects with a
        // short weak reference to the cache.
       for (int i = 0; i < count; i++)
        {
            _cache.Add(i, new WeakReference(new Data(i), false));
        }

    }

    // Returns the number of items in the cache.
    public int Count
    {
        get
        {
            return _cache.Count;
        }
    }

    // Returns the number of times an
    // object had to be regenerated.
    public int RegenerationCount
    {
        get
        {
            return regenCount;
        }
    }

    // Accesses a data object from the cache.
    // If the object was reclaimed for garbage collection,
    // create a new data object at that index location.
    public Data this[int index]
    {
        get
        {
            // Obtain an instance of a data
            // object from the cache of
            // of weak reference objects.
            Data d = _cache[index].Target as Data;
            if (d == null)
            {
                // Object was reclaimed, so generate a new one.
                Console.WriteLine("Regenerate object at {0}: Yes", index.ToString());
                d = new Data(index);
                regenCount++;
            }
            else
            {
                // Object was obtained with the weak reference.
                Console.WriteLine("Regenerate object at {0}: No", index.ToString());
            }

            return d;
       }

    }

}

// This class creates byte arrays to simulate data.
public class Data
{
    private byte[] _data;
    private string _name;

    public Data(int size)
    {
        _data = new byte[size * 1024];
        _name = size.ToString();
    }

    // Simple property.
    public string Name
    {
        get
        {
            return _name;
        }
    }

}

// Example of the last lines of the output:
//
// ...
// Regenerate object at 36: Yes
// Regenerate object at 8: Yes
// Regenerate object at 21: Yes
// Regenerate object at 4: Yes
// Regenerate object at 38: No
// Regenerate object at 7: Yes
// Regenerate object at 2: Yes
// Regenerate object at 43: Yes
// Regenerate object at 38: No
// Cache size: 50, Regenerated: 94%
//
  • SecurityPermission

    允许调用非托管代码。要求值：InheritanceDemand；权限值：UnmanagedCode 允许调用非托管代码。要求值：InheritanceDemand；权限值：UnmanagedCode

System System..::.WeakReferenceWeakReference
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

WeakReference 成员
System 命名空间
GC

其他资源

弱引用


WeakReference 成员

WeakReference 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
WeakReference 类

表示弱引用，即在引用对象的同时仍然允许垃圾回收来回收该对象。

WeakReference 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

WeakReference 类
System 命名空间


WeakReference 构造函数

WeakReference 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
WeakReference 类

初始化 WeakReference 类的新实例。

名称 说明
页首

参考

WeakReference 类
WeakReference 成员
System 命名空间


WeakReference 构造函数 (Object)

WeakReference 构造函数 (Object)
WeakReference 类

引用指定的对象初始化 WeakReference 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    target As Object _
)
public WeakReference(
    Object target
)
public:
WeakReference(
    Object^ target
)
new :
        target:Object -> WeakReference

参数

target
类型： System Object
要跟踪的对象或为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此构造函数创建对 target 的短弱引用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

WeakReference 类
WeakReference 成员
WeakReference 重载
System 命名空间
Object


WeakReference 构造函数 (Object, Boolean)

WeakReference 构造函数 (Object, Boolean)
WeakReference 类

初始化 WeakReference 类的新实例，引用指定的对象并使用指定的复活跟踪。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    target As Object, _
    trackResurrection As Boolean _
)
public WeakReference(
    Object target,
    bool trackResurrection
)
public:
WeakReference(
    Object^ target,
    bool trackResurrection
)
new :
        target:Object *
        trackResurrection:bool -> WeakReference

参数

target
类型： System Object
要跟踪的对象。
trackResurrection
类型： System Boolean
指示何时停止跟踪对象。如果为 true，则在终结后跟踪对象；如果为 false，则仅在终结前跟踪对象。 指示何时停止跟踪对象。如果为 true，则在终结后跟踪对象；如果为 false，则仅在终结前跟踪对象。

如果 trackResurrection 为 false，则创建短弱引用。如果 trackResurrection 为 true，则创建长弱引用。 如果 trackResurrection 为 false，则创建短弱引用。如果 trackResurrection 为 true，则创建长弱引用。

下面的示例使用短弱引用创建数据对象的缓存。此示例摘自一个为 WeakReference 类提供的更大示例。 下面的示例使用短弱引用创建数据对象的缓存。此示例摘自一个为 WeakReference 类提供的更大示例。

' Add data objects with a short
' weak reference to the cache.
Dim i As Integer = 0
Do While (i < count)
    _cache.Add(i, New WeakReference(New Data(i)))
    i = (i + 1)
Loop

 // Add data objects with a
 // short weak reference to the cache.
for (int i = 0; i < count; i++)
 {
     _cache.Add(i, new WeakReference(new Data(i), false));
 }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

WeakReference 类
WeakReference 成员
WeakReference 重载
System 命名空间
Object
Boolean
GCHandle

其他资源

弱引用


WeakReference 构造函数 (SerializationInfo, StreamingContext)

WeakReference 构造函数 (SerializationInfo, StreamingContext)
WeakReference 类

使用从指定的序列化和流对象反序列化的数据，初始化 WeakReference 类的新实例。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected WeakReference(
    SerializationInfo info,
    StreamingContext context
)
protected:
WeakReference(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> WeakReference

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化或反序列化当前的 WeakReference 对象所需的全部数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
（保留）描述由 info 指定的序列化流的源和目标。
异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

context 参数被保留，它目前不参与此操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

WeakReference 类
WeakReference 成员
WeakReference 重载
System 命名空间


WeakReference 方法

WeakReference 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
WeakReference 类

WeakReference 类型公开以下成员。

名称 说明
页首

参考

WeakReference 类
System 命名空间


WeakReference ..::.Finalize 方法

WeakReference
.
.
::
.
Finalize 方法
WeakReference 类

丢弃对当前 WeakReference 对象表示的目标的引用。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overrides Sub Finalize
protected override void Finalize()
protected:
virtual void Finalize() override
abstract Finalize : unit -> unit
override Finalize : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

WeakReference 类
WeakReference 成员
System 命名空间
GC
Finalize


WeakReference ..::.GetObjectData 方法

WeakReference
.
.
::
.
GetObjectData 方法
WeakReference 类

使用序列化当前的 WeakReference 对象所需的所有数据填充 SerializationInfo 对象。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public virtual void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
)
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
保存序列化或反序列化当前的 WeakReference 对象所需的全部数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
（保留）存储和检索序列化数据的位置。

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法在 info 中存储序列化当前 WeakReference 对象所需的所有信息。

context 参数被保留，目前不用于该方法的执行。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

WeakReference 类
WeakReference 成员
System 命名空间
Object
SerializationInfo


WeakReference 属性

WeakReference 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
WeakReference 类

WeakReference 类型公开以下成员。

名称 说明
页首

参考

WeakReference 类
System 命名空间


WeakReference ..::.IsAlive 属性

WeakReference
.
.
::
.
IsAlive 属性
WeakReference 类

获取当前 WeakReference 对象引用的对象是否已被垃圾回收的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsAlive As Boolean
    Get
public virtual bool IsAlive { get; }
public:
virtual property bool IsAlive {
    bool get ();
}
abstract IsAlive : bool
override IsAlive : bool

属性值

类型： System Boolean
如果当前 WeakReference 对象引用的对象尚未被垃圾回收且仍然可访问，则为 true；否则为 false。

由于在 IsAlive 属性返回 true 之后，可能会立即通过垃圾回收来回收对象，因此不建议使用此属性（除非仅对 false 返回值进行测试）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

WeakReference 类
WeakReference 成员
System 命名空间
GC
Object

其他资源

弱引用


WeakReference ..::.Target 属性

WeakReference
.
.
::
.
Target 属性
WeakReference 类

获取或设置当前 WeakReference 对象引用的对象（目标）。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Property Target As Object
    Get
    Set
public virtual Object Target { get; set; }
public:
virtual property Object^ Target {
    Object^ get ();
    void set (Object^ value);
}
abstract Target : Object with get, set
override Target : Object with get, set

属性值

类型： System Object
如果当前 WeakReference 对象引用的对象已被垃圾回收，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）；否则为对该对象（当前 WeakReference 对象引用的对象）的引用。
异常 | 条件
InvalidOperationException | 对目标对象的引用无效。如果值为 null 引用或者已经在设置操作过程中完成对象，则设置该属性时可能引发此异常。 对目标对象的引用无效。如果值为 null 引用或者已经在设置操作过程中完成对象，则设置该属性时可能引发此异常。

将该属性设置为目标对象后，请确保没有对该对象的其他强引用；否则将不会回收该对象。该对象也应设置为 null。 将该属性设置为目标对象后，请确保没有对该对象的其他强引用；否则将不会回收该对象。该对象也应设置为 null。

下面的示例尝试使用短弱引用从对象的缓存中获取对象。如果通过垃圾回收来回收对象，则会生成新的对象。此示例摘自一个为 WeakReference 类提供的更大示例。 下面的示例尝试使用短弱引用从对象的缓存中获取对象。如果通过垃圾回收来回收对象，则会生成新的对象。此示例摘自一个为 WeakReference 类提供的更大示例。 下面的示例尝试使用短弱引用从对象的缓存中获取对象。如果通过垃圾回收来回收对象，则会生成新的对象。此示例摘自一个为 WeakReference 类提供的更大示例。

 ' Obtain an instance of a data
 ' object from the cache of
 ' of weak reference objects.
 Dim d As Data = CType(_cache(index).Target, Data)
 If (d Is Nothing) Then
     ' Object was reclaimed, so generate a new one.
     Console.WriteLine("Regenerate object at {0}: Yes", index.ToString())
     d = New Data(index)
     regenCount += 1
Else
      ' Object was obtained with the weak reference.
     Console.WriteLine("Regenerate object at {0}: No", index.ToString())
 End If
 Return d

// Obtain an instance of a data
// object from the cache of
// of weak reference objects.
Data d = _cache[index].Target as Data;
if (d == null)
{
    // Object was reclaimed, so generate a new one.
    Console.WriteLine("Regenerate object at {0}: Yes", index.ToString());
    d = new Data(index);
    regenCount++;
}
else
{
    // Object was obtained with the weak reference.
    Console.WriteLine("Regenerate object at {0}: No", index.ToString());
}

return d;

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

WeakReference 类
WeakReference 成员
System 命名空间
Object
GC

其他资源

弱引用


WeakReference ..::.TrackResurrection 属性

WeakReference
.
.
::
.
TrackResurrection 属性
WeakReference 类

获取当前 WeakReference 对象引用的对象在终止后是否会被跟踪的指示。

命名空间： System
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property TrackResurrection As Boolean
    Get
public virtual bool TrackResurrection { get; }
public:
virtual property bool TrackResurrection {
    bool get ();
}
abstract TrackResurrection : bool
override TrackResurrection : bool

属性值

类型： System Boolean
如果当前 WeakReference 对象引用的对象在终止后会被跟踪，则为 true；否则，如果该对象仅在终止前被跟踪，则为 false。

如果为 true，则该弱引用是一个长弱引用，并且为 WeakReference 构造函数中的 trackResurrection 参数指定 true。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

WeakReference 类
WeakReference 成员
System 命名空间
GC

其他资源

弱引用


System.Collections 命名空间

System.Collections 命名空间

The System.Collections namespace contains interfaces and classes that define various collections of objects, such as lists, queues, bit arrays, hash tables and dictionaries.

 | 类 | 说明
公共类 | ArrayList | 使用大小可按需动态增加的数组实现 IList 接口。
公共类 | BitArray | 管理位值的压缩数组，该值表示为布尔值，其中 true 表示位是打开的 (1)，false 表示位是关闭的 (0)。
公共类 | CaseInsensitiveComparer | 比较两个对象是否相等，比较时忽略字符串的大小写。
公共类 | CaseInsensitiveHashCodeProvider | 已过时。 使用忽略字符串大小写的哈希算法，为对象提供哈希代码。
公共类 | CollectionBase | 为强类型集合提供 abstract 基类。
公共类 | Comparer | 比较两个对象是否相等，其中字符串比较是区分大小写的。
公共类 | DictionaryBase | 为键/值对的强类型集合提供 abstract 基类。
公共类 | Hashtable | 表示键/值对的集合，这些键/值对根据键的哈希代码进行组织。
公共类 | Queue | 表示对象的先进先出集合。
公共类 | ReadOnlyCollectionBase | 为强类型非泛型只读集合提供 abstract 基类。
公共类 | SortedList | 表示键/值对的集合，这些键值对按键排序并可按照键和索引访问。
公共类 | Stack | 表示对象的简单的后进先出非泛型集合。
公共类 | StructuralComparisons | 提供用于对两个集合对象执行结构比较的对象。
 | 结构 | 说明
公共结构 | DictionaryEntry | 定义可设置或检索的字典键/值对。
 | 接口 | 说明
公共接口 | ICollection | 定义所有非泛型集合的大小、枚举器和同步方法。
公共接口 | IComparer | 公开一种比较两个对象的方法。
公共接口 | IDictionary | 表示键/值对的非通用集合。
公共接口 | IDictionaryEnumerator | 枚举非泛型字典的元素。
公共接口 | IEnumerable | 公开枚举器，该枚举器支持在非泛型集合上进行简单迭代。
公共接口 | IEnumerator | 支持对非泛型集合的简单迭代。
公共接口 | IEqualityComparer | 定义方法以支持对象的相等比较。
公共接口 | IHashCodeProvider | 已过时。 使用自定义哈希函数为对象提供哈希代码。
公共接口 | IList | 表示可按照索引单独访问的对象的非泛型集合。
公共接口 | IStructuralComparable | 支持集合对象的结构比较。
公共接口 | IStructuralEquatable | 定义方法以支持对象的结构相等性比较。


ArrayList 类

ArrayList 类
成员

使用大小可按需动态增加的数组实现 IList 接口。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ArrayList _
    Implements IList, ICollection, IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ArrayList : IList, ICollection,
    IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ArrayList : IList,
    ICollection, IEnumerable, ICloneable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ArrayList =
    class
        interface IList
        interface ICollection
        interface IEnumerable
        interface ICloneable
    end

不保证会对 ArrayList 排序。在执行需要对 ArrayList 排序的操作（如 BinarySearch）之前，必须对 ArrayList 进行排序。 不保证会对 ArrayList 排序。在执行需要对 ArrayList 排序的操作（如 BinarySearch）之前，必须对 ArrayList 进行排序。

ArrayList 的容量是 ArrayList 可以保存的元素数。随着向 ArrayList 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。 ArrayList 的容量是 ArrayList 可以保存的元素数。随着向 ArrayList 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。 ArrayList 的容量是 ArrayList 可以保存的元素数。随着向 ArrayList 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。

使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。 使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。

ArrayList 集合接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

不支持将多维数组用作 ArrayList 集合中的元素。

下面的代码示例演示如何创建并初始化 ArrayList 以及如何打印出其值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("Hello")
        myAL.Add("World")
        myAL.Add("!")

        ' Displays the properties and values of the ArrayList.
        Console.WriteLine("myAL")
        Console.WriteLine("    Count:    {0}", myAL.Count)
        Console.WriteLine("    Capacity: {0}", myAL.Capacity)
        Console.Write("    Values:")
        PrintValues(myAL)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces output similar to the following:
'
' myAL
'     Count:    3
'     Capacity: 4
'     Values:   Hello   World   !

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add("Hello");
      myAL.Add("World");
      myAL.Add("!");

      // Displays the properties and values of the ArrayList.
      Console.WriteLine( "myAL" );
      Console.WriteLine( "    Count:    {0}", myAL.Count );
      Console.WriteLine( "    Capacity: {0}", myAL.Capacity );
      Console.Write( "    Values:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }

}

/*
This code produces output similar to the following:

myAL
    Count:    3
    Capacity: 4
    Values:   Hello   World   !

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "Hello" );
   myAL->Add( "World" );
   myAL->Add( "!" );

   // Displays the properties and values of the ArrayList.
   Console::WriteLine( "myAL" );
   Console::WriteLine( "    Count:    {0}", myAL->Count );
   Console::WriteLine( "    Capacity: {0}", myAL->Capacity );
   Console::Write( "    Values:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
This code produces output similar to the following:

myAL
    Count:    3
    Capacity: 4
    Values:   Hello   World   !

*/

System.Collections System.Collections..::.ArrayListArrayList

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。

只要集合未修改，ArrayList 就可以同时支持多个阅读器。若要保证 ArrayList 的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。 只要集合未修改，ArrayList 就可以同时支持多个阅读器。若要保证 ArrayList 的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 成员
System.Collections 命名空间
IList
System.Collections.Generic List T

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList 成员

ArrayList 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

使用大小可按需动态增加的数组实现 IList 接口。

ArrayList 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ArrayList 类
System.Collections 命名空间


ArrayList 构造函数

ArrayList 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

初始化 ArrayList 类的新实例。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList 构造函数

ArrayList 构造函数
ArrayList 类

初始化 ArrayList 类的新实例，该实例为空并且具有默认初始容量。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public ArrayList()
public:
ArrayList()
new : unit -> ArrayList

ArrayList 的容量是 ArrayList 可以容纳的元素数。向 ArrayList 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。 ArrayList 的容量是 ArrayList 可以容纳的元素数。向 ArrayList 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 ArrayList 中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
ArrayList 重载
System.Collections 命名空间
Capacity


ArrayList 构造函数 (ICollection)

ArrayList 构造函数 (ICollection)
ArrayList 类

初始化 ArrayList 类的新实例，该实例包含从指定集合复制的元素并且具有与所复制的元素数相同的初始容量。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    c As ICollection _
)
public ArrayList(
    ICollection c
)
public:
ArrayList(
    ICollection^ c
)
new :
        c:ICollection -> ArrayList

参数

c
类型： System.Collections ICollection
ICollection，它的元素被复制到新列表中。
异常 | 条件
ArgumentNullException | c 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

ArrayList 的容量是 ArrayList 可以容纳的元素数。向 ArrayList 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。 ArrayList 的容量是 ArrayList 可以容纳的元素数。向 ArrayList 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 ArrayList 中添加元素时执行大量的大小调整操作。

按照由 ICollection 的 IEnumerator 读取元素的顺序将这些元素复制到 ArrayList 中。

此构造函数的运算复杂度为 O(n)，其中 n 是 c 中元素的个数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
ArrayList 重载
System.Collections 命名空间
ICollection
Capacity


ArrayList 构造函数 (Int32)

ArrayList 构造函数 (Int32)
ArrayList 类

初始化 ArrayList 类的新实例，该实例为空并且具有指定的初始容量。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    capacity As Integer _
)
public ArrayList(
    int capacity
)
public:
ArrayList(
    int capacity
)
new :
        capacity:int -> ArrayList

参数

capacity
类型： System Int32
新列表最初可以存储的元素数。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。

ArrayList 的容量是 ArrayList 可以容纳的元素数。向 ArrayList 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。 ArrayList 的容量是 ArrayList 可以容纳的元素数。向 ArrayList 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 ArrayList 中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
ArrayList 重载
System.Collections 命名空间
Capacity


ArrayList 方法

ArrayList 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

ArrayList 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ArrayList 类
System.Collections 命名空间


ArrayList ..::.Adapter 方法

ArrayList
.
.
::
.
Adapter 方法
ArrayList 类

为特定的 IList 创建 ArrayList 包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Adapter ( _
    list As IList _
) As ArrayList
public static ArrayList Adapter(
    IList list
)
public:
static ArrayList^ Adapter(
    IList^ list
)
static member Adapter :
        list:IList -> ArrayList

参数

list
类型： System.Collections IList
要包装的 IList。

返回值

类型： System.Collections ArrayList
IList 周围的 ArrayList 包装。
异常 | 条件
ArgumentNullException | list 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Adapter 不复制 IList 的内容。相反，它只在 IList 的周围创建 ArrayList 包装；因此，对 IList 进行的更改也会影响 ArrayList。 Adapter 不复制 IList 的内容。相反，它只在 IList 的周围创建 ArrayList 包装；因此，对 IList 进行的更改也会影响 ArrayList。

ArrayList 类提供一般的 Reverse、BinarySearch 和 Sort 方法。此包装可以是在 IList 上使用这些方法的途经；但是，通过此包装执行这些一般操作的效率会比直接在 IList 上应用这些操作低。 ArrayList 类提供一般的 Reverse、BinarySearch 和 Sort 方法。此包装可以是在 IList 上使用这些方法的途经；但是，通过此包装执行这些一般操作的效率会比直接在 IList 上应用这些操作低。

此方法是 O(1) 操作。

版本兼容性

在 .NET Framework 版本 1.0 和 1.1 中，调用 ArrayList 包装上的 GetEnumerator(Int32, Int32) 方法重载会返回一个枚举数，该枚举数将第二个参数视为上限而不是计数。在 .NET Framework 2.0 中，将第二个参数正确视为计数。 在 .NET Framework 版本 1.0 和 1.1 中，调用 ArrayList 包装上的 GetEnumerator(Int32, Int32) 方法重载会返回一个枚举数，该枚举数将第二个参数视为上限而不是计数。在 .NET Framework 2.0 中，将第二个参数正确视为计数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
IList
BinarySearch
Reverse
Sort


ArrayList ..::.Add 方法

ArrayList
.
.
::
.
Add 方法
ArrayList 类

将对象添加到 ArrayList 的结尾处。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Add ( _
    value As Object _
) As Integer
public virtual int Add(
    Object value
)
public:
virtual int Add(
    Object^ value
)
abstract Add :
        value:Object -> int
override Add :
        value:Object -> int

参数

value
类型： System Object
要添加到 ArrayList 的末尾处的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要添加到 ArrayList 的末尾处的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Int32
ArrayList 索引，已在此处添加了 value。

实现

异常 | 条件
NotSupportedException | ArrayList 是只读的。 - 或 - ArrayList 具有固定大小。

ArrayList 接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

如果 Count 已经等于 Capacity，则会通过自动重新分配内部数组增加 ArrayList 的容量，并在添加新元素之前将现有元素复制到新数组中。

如果 Count 小于 Capacity，则此方法是一个 O(1) 运算。如果需要增加容量以容纳新元素，则此方法成为 O(n) 运算，其中 n 为 Count。 如果 Count 小于 Capacity，则此方法是一个 O(1) 运算。如果需要增加容量以容纳新元素，则此方法成为 O(n) 运算，其中 n 为 Count。

下面的代码示例演示如何将元素添加到 ArrayList 中。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")

        ' Creates and initializes a new Queue.
        Dim myQueue As New Queue()
        myQueue.Enqueue("jumped")
        myQueue.Enqueue("over")
        myQueue.Enqueue("the")
        myQueue.Enqueue("lazy")
        myQueue.Enqueue("dog")

        ' Displays the ArrayList and the Queue.
        Console.WriteLine("The ArrayList initially contains the following:")
        PrintValues(myAL, ControlChars.Tab)
        Console.WriteLine("The Queue initially contains the following:")
        PrintValues(myQueue, ControlChars.Tab)

        ' Copies the Queue elements to the end of the ArrayList.
        myAL.AddRange(myQueue)

        ' Displays the ArrayList.
        Console.WriteLine("The ArrayList now contains the following:")
        PrintValues(myAL, ControlChars.Tab)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable, mySeparator As Char)
        Dim obj As [Object]
        For Each obj In  myList
          Console.Write( "{0}{1}", mySeparator, obj )
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The ArrayList initially contains the following:
'     The    quick    brown    fox
' The Queue initially contains the following:
'     jumped    over    the    lazy    dog
' The ArrayList now contains the following:
'     The    quick    brown    fox    jumped    over    the    lazy    dog

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );

      // Creates and initializes a new Queue.
      Queue myQueue = new Queue();
      myQueue.Enqueue( "jumped" );
      myQueue.Enqueue( "over" );
      myQueue.Enqueue( "the" );
      myQueue.Enqueue( "lazy" );
      myQueue.Enqueue( "dog" );

      // Displays the ArrayList and the Queue.
      Console.WriteLine( "The ArrayList initially contains the following:" );
      PrintValues( myAL, '\t' );
      Console.WriteLine( "The Queue initially contains the following:" );
      PrintValues( myQueue, '\t' );

      // Copies the Queue elements to the end of the ArrayList.
      myAL.AddRange( myQueue );

      // Displays the ArrayList.
      Console.WriteLine( "The ArrayList now contains the following:" );
      PrintValues( myAL, '\t' );
   }

   public static void PrintValues( IEnumerable myList, char mySeparator )  {
      foreach ( Object obj in myList )
         Console.Write( "{0}{1}", mySeparator, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The ArrayList initially contains the following:
    The    quick    brown    fox
The Queue initially contains the following:
    jumped    over    the    lazy    dog
The ArrayList now contains the following:
    The    quick    brown    fox    jumped    over    the    lazy    dog
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, char mySeparator );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );

   // Creates and initializes a new Queue.
   Queue^ myQueue = gcnew Queue;
   myQueue->Enqueue( "jumped" );
   myQueue->Enqueue( "over" );
   myQueue->Enqueue( "the" );
   myQueue->Enqueue( "lazy" );
   myQueue->Enqueue( "dog" );

   // Displays the ArrayList and the Queue.
   Console::WriteLine( "The ArrayList initially contains the following:" );
   PrintValues( myAL, '\t' );
   Console::WriteLine( "The Queue initially contains the following:" );
   PrintValues( myQueue, '\t' );

   // Copies the Queue elements to the end of the ArrayList.
   myAL->AddRange( myQueue );

   // Displays the ArrayList.
   Console::WriteLine( "The ArrayList now contains the following:" );
   PrintValues( myAL, '\t' );
}

void PrintValues( IEnumerable^ myList, char mySeparator )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, obj );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

The ArrayList initially contains the following:
    The    quick    brown    fox
The Queue initially contains the following:
    jumped    over    the    lazy    dog
The ArrayList now contains the following:
    The    quick    brown    fox    jumped    over    the    lazy    dog
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
AddRange
Insert
Remove
Count


ArrayList ..::.AddRange 方法

ArrayList
.
.
::
.
AddRange 方法
ArrayList 类

将 ICollection 的元素添加到 ArrayList 的末尾。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub AddRange ( _
    c As ICollection _
)
public virtual void AddRange(
    ICollection c
)
public:
virtual void AddRange(
    ICollection^ c
)
abstract AddRange :
        c:ICollection -> unit
override AddRange :
        c:ICollection -> unit

参数

c
类型： System.Collections ICollection
ICollection，其元素应被添加到 ArrayList 的末尾。集合本身不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但它可以包含为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的元素。 ICollection，其元素应被添加到 ArrayList 的末尾。集合本身不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但它可以包含为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的元素。
异常 | 条件
ArgumentNullException | c 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | ArrayList 是只读的。 - 或 - ArrayList 具有固定大小。

ArrayList 接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

ICollection 中元素的顺序保存在 ArrayList 中。

如果新的 Count（当前 Count 加上集合的大小）大于 Capacity，则会通过自动重新分配内部数组增大 ArrayList 的容量以容纳新元素，并在添加新元素之前将现有元素复制到新数组中。

如果 ArrayList 可以在不增加 Capacity 的情况下容纳新元素，则此方法是 O(n) 运算，其中 n 是要添加的元素数。如果需要增加此容量以容纳新元素，则此方法变为 O(n + m) 运算，其中 n 是要添加的元素数，m 是 Count。 如果 ArrayList 可以在不增加 Capacity 的情况下容纳新元素，则此方法是 O(n) 运算，其中 n 是要添加的元素数。如果需要增加此容量以容纳新元素，则此方法变为 O(n + m) 运算，其中 n 是要添加的元素数，m 是 Count。

下面的代码示例演示如何将元素添加到 ArrayList 中。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")

        ' Creates and initializes a new Queue.
        Dim myQueue As New Queue()
        myQueue.Enqueue("jumped")
        myQueue.Enqueue("over")
        myQueue.Enqueue("the")
        myQueue.Enqueue("lazy")
        myQueue.Enqueue("dog")

        ' Displays the ArrayList and the Queue.
        Console.WriteLine("The ArrayList initially contains the following:")
        PrintValues(myAL, ControlChars.Tab)
        Console.WriteLine("The Queue initially contains the following:")
        PrintValues(myQueue, ControlChars.Tab)

        ' Copies the Queue elements to the end of the ArrayList.
        myAL.AddRange(myQueue)

        ' Displays the ArrayList.
        Console.WriteLine("The ArrayList now contains the following:")
        PrintValues(myAL, ControlChars.Tab)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable, mySeparator As Char)
        Dim obj As [Object]
        For Each obj In  myList
          Console.Write( "{0}{1}", mySeparator, obj )
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The ArrayList initially contains the following:
'     The    quick    brown    fox
' The Queue initially contains the following:
'     jumped    over    the    lazy    dog
' The ArrayList now contains the following:
'     The    quick    brown    fox    jumped    over    the    lazy    dog

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );

      // Creates and initializes a new Queue.
      Queue myQueue = new Queue();
      myQueue.Enqueue( "jumped" );
      myQueue.Enqueue( "over" );
      myQueue.Enqueue( "the" );
      myQueue.Enqueue( "lazy" );
      myQueue.Enqueue( "dog" );

      // Displays the ArrayList and the Queue.
      Console.WriteLine( "The ArrayList initially contains the following:" );
      PrintValues( myAL, '\t' );
      Console.WriteLine( "The Queue initially contains the following:" );
      PrintValues( myQueue, '\t' );

      // Copies the Queue elements to the end of the ArrayList.
      myAL.AddRange( myQueue );

      // Displays the ArrayList.
      Console.WriteLine( "The ArrayList now contains the following:" );
      PrintValues( myAL, '\t' );
   }

   public static void PrintValues( IEnumerable myList, char mySeparator )  {
      foreach ( Object obj in myList )
         Console.Write( "{0}{1}", mySeparator, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The ArrayList initially contains the following:
    The    quick    brown    fox
The Queue initially contains the following:
    jumped    over    the    lazy    dog
The ArrayList now contains the following:
    The    quick    brown    fox    jumped    over    the    lazy    dog
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, char mySeparator );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );

   // Creates and initializes a new Queue.
   Queue^ myQueue = gcnew Queue;
   myQueue->Enqueue( "jumped" );
   myQueue->Enqueue( "over" );
   myQueue->Enqueue( "the" );
   myQueue->Enqueue( "lazy" );
   myQueue->Enqueue( "dog" );

   // Displays the ArrayList and the Queue.
   Console::WriteLine( "The ArrayList initially contains the following:" );
   PrintValues( myAL, '\t' );
   Console::WriteLine( "The Queue initially contains the following:" );
   PrintValues( myQueue, '\t' );

   // Copies the Queue elements to the end of the ArrayList.
   myAL->AddRange( myQueue );

   // Displays the ArrayList.
   Console::WriteLine( "The ArrayList now contains the following:" );
   PrintValues( myAL, '\t' );
}

void PrintValues( IEnumerable^ myList, char mySeparator )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, obj );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

The ArrayList initially contains the following:
    The    quick    brown    fox
The Queue initially contains the following:
    jumped    over    the    lazy    dog
The ArrayList now contains the following:
    The    quick    brown    fox    jumped    over    the    lazy    dog
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
ICollection
Capacity
Count
Add
InsertRange
SetRange
GetRange
RemoveRange


ArrayList ..::.BinarySearch 方法

ArrayList
.
.
::
.
BinarySearch 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

使用对分检索算法在已排序的 ArrayList 或它的一部分中查找特定元素。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.BinarySearch 方法 (Object)

ArrayList
.
.
::
.
BinarySearch 方法 (Object)
ArrayList 类

使用默认的比较器在整个已排序的 ArrayList 中搜索元素，并返回该元素从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function BinarySearch ( _
    value As Object _
) As Integer
public virtual int BinarySearch(
    Object value
)
public:
virtual int BinarySearch(
    Object^ value
)
abstract BinarySearch :
        value:Object -> int
override BinarySearch :
        value:Object -> int

参数

value
类型： System Object
要定位的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要定位的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Int32
如果找到 value，则为已排序的 ArrayList 中从零开始的 value 索引；否则为一个负数，它是大于 value 的下一个元素索引的按位求补，如果没有更大的元素，则为 Count 的按位求补。
异常 | 条件
ArgumentException | 无论是 value 还是 ArrayList 的元素都不实现 IComparable 接口。
InvalidOperationException | value 与 ArrayList 的元素类型不同。

value 参数和 ArrayList 的每个元素必须实现 IComparable 接口，该接口用于比较。必须已经根据 IComparable 实现定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。 value 参数和 ArrayList 的每个元素必须实现 IComparable 接口，该接口用于比较。必须已经根据 IComparable 实现定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。

当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

如果 ArrayList 包含具有同一值的多个元素，则该方法只返回一个匹配项，并且可能返回任何一个匹配项，而不一定是第一个。

如果 ArrayList 不包含指定值，则该方法会返回负整数。可以将按位反码运算 (~) 应用于此负整数，以获取大于搜索值的第一个元素的索引。当向 ArrayList 列表中插入该值时，应将此索引用作插入点，以维护排序顺序。 如果 ArrayList 不包含指定值，则该方法会返回负整数。可以将按位反码运算 (~) 应用于此负整数，以获取大于搜索值的第一个元素的索引。当向 ArrayList 列表中插入该值时，应将此索引用作插入点，以维护排序顺序。 如果 ArrayList 不包含指定值，则该方法会返回负整数。可以将按位反码运算 (~) 应用于此负整数，以获取大于搜索值的第一个元素的索引。当向 ArrayList 列表中插入该值时，应将此索引用作插入点，以维护排序顺序。

此方法的运算复杂度为 O(log n)，其中 n 是 Count。

下面的代码示例演示如何使用 BinarySearch 在 ArrayList 中定位特定的对象。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList. BinarySearch requires
        ' a sorted ArrayList.
        Dim myAL As New ArrayList()
        Dim i As Integer
        For i = 0 To 4
            myAL.Add(i * 2)
        Next i

        ' Displays the ArrayList.
        Console.WriteLine("The Int32 ArrayList contains the following:")
        PrintValues(myAL)

        ' Locates a specific object that does not exist in the ArrayList.
        Dim myObjectOdd As Object = 3
        FindMyObject(myAL, myObjectOdd)

        ' Locates an object that exists in the ArrayList.
        Dim myObjectEven As Object = 6
        FindMyObject(myAL, myObjectEven)
    End Sub

    Public Shared Sub FindMyObject(myList As ArrayList, myObject As Object)
        Dim myIndex As Integer = myList.BinarySearch(myObject)
        If myIndex < 0 Then
            Console.WriteLine("The object to search for ({0}) is not found. " _
               + "The next larger object is at index {1}.", myObject, _
               Not myIndex)
        Else
            Console.WriteLine("The object to search for ({0}) is at index " _
               + "{1}.", myObject, myIndex)
        End If
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The Int32 ArrayList contains the following:
'     0    2    4    6    8
' The object to search for (3) is not found. The next larger object is at index 2.
' The object to search for (6) is at index 3.

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList. BinarySearch requires
      // a sorted ArrayList.
      ArrayList myAL = new ArrayList();
      for ( int i = 0; i <= 4; i++ )
         myAL.Add( i*2 );

      // Displays the ArrayList.
      Console.WriteLine( "The Int32 ArrayList contains the following:" );
      PrintValues( myAL );

      // Locates a specific object that does not exist in the ArrayList.
      Object myObjectOdd = 3;
      FindMyObject( myAL, myObjectOdd );

      // Locates an object that exists in the ArrayList.
      Object myObjectEven = 6;
      FindMyObject( myAL, myObjectEven );
   }

   public static void FindMyObject( ArrayList myList, Object myObject )  {
      int myIndex=myList.BinarySearch( myObject );
      if ( myIndex < 0 )
         Console.WriteLine( "The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject, ~myIndex );
      else
         Console.WriteLine( "The object to search for ({0}) is at index {1}.", myObject, myIndex );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }

}
/*
This code produces the following output.

The Int32 ArrayList contains the following:
   0   2   4   6   8
The object to search for (3) is not found. The next larger object is at index 2.
The object to search for (6) is at index 3.
*/

using namespace System;
using namespace System::Collections;
void FindMyObject( ArrayList^ myList, Object^ myObject );
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList. BinarySearch requires
   // a sorted ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   for ( int i = 0; i <= 4; i++ )
      myAL->Add( i * 2 );

   // Displays the ArrayList.
   Console::WriteLine( "The Int32 ArrayList contains the following:" );
   PrintValues( myAL );

   // Locates a specific object that does not exist in the ArrayList.
   Object^ myObjectOdd = 3;
   FindMyObject( myAL, myObjectOdd );

   // Locates an object that exists in the ArrayList.
   Object^ myObjectEven = 6;
   FindMyObject( myAL, myObjectEven );
}

void FindMyObject( ArrayList^ myList, Object^ myObject )
{
   int myIndex = myList->BinarySearch( myObject );
   if ( myIndex < 0 )
      Console::WriteLine( "The object to search for ({0}) is not found. The next larger object is at index {1}.", myObject,  ~myIndex );
   else
      Console::WriteLine( "The object to search for ({0}) is at index {1}.", myObject, myIndex );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The Int32 ArrayList contains the following:
    0   2   4   6   8
 The object to search for (3) is not found. The next larger object is at index 2.
 The object to search for (6) is at index 3.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
BinarySearch 重载
System.Collections 命名空间

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.BinarySearch 方法 (Object, IComparer)

ArrayList
.
.
::
.
BinarySearch 方法 (Object, IComparer)
ArrayList 类

使用指定的比较器在整个已排序的 ArrayList 中搜索元素，并返回该元素从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function BinarySearch ( _
    value As Object, _
    comparer As IComparer _
) As Integer
public virtual int BinarySearch(
    Object value,
    IComparer comparer
)
public:
virtual int BinarySearch(
    Object^ value,
    IComparer^ comparer
)
abstract BinarySearch :
        value:Object *
        comparer:IComparer -> int
override BinarySearch :
        value:Object *
        comparer:IComparer -> int

参数

value
类型： System Object
要定位的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要定位的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 表示使用默认比较器，即每个元素的 IComparable 实现。

返回值

类型： System Int32
如果找到 value，则为已排序的 ArrayList 中从零开始的 value 索引；否则为一个负数，它是大于 value 的下一个元素索引的按位求补，如果没有更大的元素，则为 Count 的按位求补。
异常 | 条件
ArgumentException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而且 value 和 ArrayList 的元素都不实现 IComparable 接口。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而且 value 与 ArrayList 的元素不属于同一类型。

比较器自定义如何对元素进行比较。例如，可以将 CaseInsensitiveComparer 实例用作比较器，以执行不区分大小写的字符串搜索。 比较器自定义如何对元素进行比较。例如，可以将 CaseInsensitiveComparer 实例用作比较器，以执行不区分大小写的字符串搜索。

如果提供 comparer，则使用指定 IComparer 实现将 ArrayList 的元素与指定值进行比较。必须已经根据 comparer 定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。 如果提供 comparer，则使用指定 IComparer 实现将 ArrayList 的元素与指定值进行比较。必须已经根据 comparer 定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用元素本身所提供的 IComparable 实现或通过指定值来执行比较。必须已经根据 IComparable 实现定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用元素本身所提供的 IComparable 实现或通过指定值来执行比较。必须已经根据 IComparable 实现定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。

当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

如果 ArrayList 包含具有同一值的多个元素，则该方法只返回一个匹配项，并且可能返回任何一个匹配项，而不一定是第一个。

如果 ArrayList 不包含指定值，则该方法会返回负整数。可以将按位反码运算 (~) 应用于此负整数，以获取大于搜索值的第一个元素的索引。当向 ArrayList 列表中插入该值时，应将此索引用作插入点，以维护排序顺序。 如果 ArrayList 不包含指定值，则该方法会返回负整数。可以将按位反码运算 (~) 应用于此负整数，以获取大于搜索值的第一个元素的索引。当向 ArrayList 列表中插入该值时，应将此索引用作插入点，以维护排序顺序。 如果 ArrayList 不包含指定值，则该方法会返回负整数。可以将按位反码运算 (~) 应用于此负整数，以获取大于搜索值的第一个元素的索引。当向 ArrayList 列表中插入该值时，应将此索引用作插入点，以维护排序顺序。

此方法的运算复杂度为 O(log n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
BinarySearch 重载
System.Collections 命名空间

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.BinarySearch 方法 (Int32, Int32, Object, IComparer)

ArrayList
.
.
::
.
BinarySearch 方法 (Int32, Int32, Object, IComparer)
ArrayList 类

使用指定的比较器在已排序 ArrayList 的某个元素范围中搜索元素，并返回该元素从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function BinarySearch ( _
    index As Integer, _
    count As Integer, _
    value As Object, _
    comparer As IComparer _
) As Integer
public virtual int BinarySearch(
    int index,
    int count,
    Object value,
    IComparer comparer
)
public:
virtual int BinarySearch(
    int index,
    int count,
    Object^ value,
    IComparer^ comparer
)
abstract BinarySearch :
        index:int *
        count:int *
        value:Object *
        comparer:IComparer -> int
override BinarySearch :
        index:int *
        count:int *
        value:Object *
        comparer:IComparer -> int

参数

index
类型： System Int32
要搜索的范围从零开始的起始索引。
count
类型： System Int32
要搜索的范围的长度。
value
类型： System Object
要定位的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要定位的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 表示使用默认比较器，即每个元素的 IComparable 实现。

返回值

类型： System Int32
如果找到 value，则为已排序的 ArrayList 中从零开始的 value 索引；否则为一个负数，它是大于 value 的下一个元素索引的按位求补，如果没有更大的元素，则为 Count 的按位求补。
异常 | 条件
ArgumentException | index 和 count 不表示 ArrayList 中的有效范围。 - 或 - comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而且 value 和 ArrayList 的元素都不实现 IComparable 接口。
InvalidOperationException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），而且 value 与 ArrayList 的元素不属于同一类型。
ArgumentOutOfRangeException | index 小于零。 - 或 - count 小于零。

比较器自定义如何对元素进行比较。例如，可以将 CaseInsensitiveComparer 实例用作比较器，以执行不区分大小写的字符串搜索。 比较器自定义如何对元素进行比较。例如，可以将 CaseInsensitiveComparer 实例用作比较器，以执行不区分大小写的字符串搜索。

如果提供 comparer，则使用指定 IComparer 实现将 ArrayList 的元素与指定值进行比较。必须已经根据 comparer 定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。 如果提供 comparer，则使用指定 IComparer 实现将 ArrayList 的元素与指定值进行比较。必须已经根据 comparer 定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。

如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用元素本身所提供的 IComparable 实现或通过指定值来执行比较。必须已经根据 IComparable 实现定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。 如果 comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用元素本身所提供的 IComparable 实现或通过指定值来执行比较。必须已经根据 IComparable 实现定义的排序顺序按升序排序 ArrayList 的元素；否则，结果可能不正确。

当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

如果 ArrayList 包含具有同一值的多个元素，则该方法只返回一个匹配项，并且可能返回任何一个匹配项，而不一定是第一个。

如果 ArrayList 不包含指定值，则该方法会返回负整数。可以将按位反码运算 (~) 应用于此负整数，以获取大于搜索值的第一个元素的索引。当向 ArrayList 列表中插入该值时，应将此索引用作插入点，以维护排序顺序。 如果 ArrayList 不包含指定值，则该方法会返回负整数。可以将按位反码运算 (~) 应用于此负整数，以获取大于搜索值的第一个元素的索引。当向 ArrayList 列表中插入该值时，应将此索引用作插入点，以维护排序顺序。 如果 ArrayList 不包含指定值，则该方法会返回负整数。可以将按位反码运算 (~) 应用于此负整数，以获取大于搜索值的第一个元素的索引。当向 ArrayList 列表中插入该值时，应将此索引用作插入点，以维护排序顺序。

此方法的运算复杂度为 O(log n)，其中 n 是 count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
BinarySearch 重载
System.Collections 命名空间
IComparer
IComparable

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.Clear 方法

ArrayList
.
.
::
.
Clear 方法
ArrayList 类

从 ArrayList 中移除所有元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Clear
public virtual void Clear()
public:
virtual void Clear()
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

异常 | 条件
NotSupportedException | ArrayList 是只读的。 - 或 - ArrayList 具有固定大小。

Count 被设置为零，并且对来自该集合元素的其他对象的引用也被释放。

Capacity 保持不变。若要重置 ArrayList 的容量，请调用 TrimToSize 或直接设置 Capacity 属性。修整空 ArrayList 会将 ArrayList 的容量设置为默认容量。 Capacity 保持不变。若要重置 ArrayList 的容量，请调用 TrimToSize 或直接设置 Capacity 属性。修整空 ArrayList 会将 ArrayList 的容量设置为默认容量。 Capacity 保持不变。若要重置 ArrayList 的容量，请调用 TrimToSize 或直接设置 Capacity 属性。修整空 ArrayList 会将 ArrayList 的容量设置为默认容量。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何裁减 ArrayList 中未使用的部分以及如何清除 ArrayList 的值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("Initially,")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)

        ' Trim the ArrayList.
        myAL.TrimToSize()

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("After TrimToSize,")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)

        ' Clear the ArrayList.
        myAL.Clear()

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("After Clear,")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)

        ' Trim the ArrayList again.
        myAL.TrimToSize()

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("After the second TrimToSize,")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' Initially,
'    Count    : 5
'    Capacity : 16
'    Values:    The    quick    brown    fox    jumped
' After TrimToSize,
'    Count    : 5
'    Capacity : 5
'    Values:    The    quick    brown    fox    jumped
' After Clear,
'    Count    : 0
'    Capacity : 5
'    Values:
' After the second TrimToSize,
'    Count    : 0
'    Capacity : 16
'    Values:

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "Initially," );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );

      // Trim the ArrayList.
      myAL.TrimToSize();

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "After TrimToSize," );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );

      // Clear the ArrayList.
      myAL.Clear();

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "After Clear," );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );

      // Trim the ArrayList again.
      myAL.TrimToSize();

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "After the second TrimToSize," );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }

}
/*
This code produces the following output.

Initially,
   Count    : 5
   Capacity : 16
   Values:    The    quick    brown    fox    jumped
After TrimToSize,
   Count    : 5
   Capacity : 5
   Values:    The    quick    brown    fox    jumped
After Clear,
   Count    : 0
   Capacity : 5
   Values:
After the second TrimToSize,
   Count    : 0
   Capacity : 16
   Values:
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "Initially," );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );

   // Trim the ArrayList.
   myAL->TrimToSize();

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "After TrimToSize," );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );

   // Clear the ArrayList.
   myAL->Clear();

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "After Clear," );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );

   // Trim the ArrayList again.
   myAL->TrimToSize();

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "After the second TrimToSize," );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Initially,
    Count    : 5
    Capacity : 16
    Values:    The    quick    brown    fox    jumped
 After TrimToSize,
    Count    : 5
    Capacity : 5
    Values:    The    quick    brown    fox    jumped
 After Clear,
    Count    : 0
    Capacity : 5
    Values:
 After the second TrimToSize,
    Count    : 0
    Capacity : 16
    Values:
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
TrimToSize
Capacity
Count


ArrayList ..::.Clone 方法

ArrayList
.
.
::
.
Clone 方法
ArrayList 类

创建 ArrayList 的浅表副本。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Clone As Object
public virtual Object Clone()
public:
virtual Object^ Clone()
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
ArrayList 的浅表副本。

实现

集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。 集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。

与之相对，集合的深层副本将复制这些元素以及由它们直接或间接引用的所有内容。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.Contains 方法

ArrayList
.
.
::
.
Contains 方法
ArrayList 类

确定某元素是否在 ArrayList 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Contains ( _
    item As Object _
) As Boolean
public virtual bool Contains(
    Object item
)
public:
virtual bool Contains(
    Object^ item
)
abstract Contains :
        item:Object -> bool
override Contains :
        item:Object -> bool

参数

item
类型： System Object
要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果在 ArrayList 中找到 item，则为 true；否则为 false。

实现

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 是 Count。

此方法通过调用 Object..::.Equals 确定相等性。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
IndexOf
LastIndexOf

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.CopyTo 方法

ArrayList
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

将 ArrayList 或它的一部分复制到一维数组中。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.CopyTo 方法 (Array)

ArrayList
.
.
::
.
CopyTo 方法 (Array)
ArrayList 类

从目标数组的开头开始将整个 ArrayList 复制到兼容的一维 Array 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub CopyTo ( _
    array As Array _
)
public virtual void CopyTo(
    Array array
)
public:
virtual void CopyTo(
    Array^ array
)
abstract CopyTo :
        array:Array -> unit
override CopyTo :
        array:Array -> unit

参数

array
类型： System Array
作为从 ArrayList 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 ArrayList 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | array 是多维数组。 - 或 - 源 ArrayList 中的元素数大于目标 array 可包含的元素数。
InvalidCastException | 无法自动将源 ArrayList 的类型强制转换为目标 array 的类型。

指定的数组必须是兼容类型的数组。

此方法使用 Array..::.Copy 来复制元素。

这些元素将复制到 Array，复制顺序与枚举数循环访问 ArrayList 的顺序一样。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将 ArrayList 复制到一维 System..::.Array 中。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes the source ArrayList.
        Dim mySourceList As New ArrayList()
        mySourceList.Add("three")
        mySourceList.Add("napping")
        mySourceList.Add("cats")
        mySourceList.Add("in")
        mySourceList.Add("the")
        mySourceList.Add("barn")

        ' Creates and initializes the one-dimensional target Array.
        Dim myTargetArray(14) As String
        myTargetArray(0) = "The"
        myTargetArray(1) = "quick"
        myTargetArray(2) = "brown"
        myTargetArray(3) = "fox"
        myTargetArray(4) = "jumped"
        myTargetArray(5) = "over"
        myTargetArray(6) = "the"
        myTargetArray(7) = "lazy"
        myTargetArray(8) = "dog"

        ' Displays the values of the target Array.
        Console.WriteLine("The target Array contains the following " _
           + "(before and after copying):")
        PrintValues(myTargetArray, " "c)

        ' Copies the second element from the source ArrayList to the target
        ' Array starting at index 7.
        mySourceList.CopyTo(1, myTargetArray, 7, 1)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source ArrayList to the target Array starting
        ' at index 6.
        mySourceList.CopyTo(myTargetArray, 6)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source ArrayList to the target Array starting
        ' at index 0.
        mySourceList.CopyTo(myTargetArray)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)
    End Sub

    Public Shared Sub PrintValues(myArr() As String, mySeparator As Char)
        Dim i As Integer
        For i = 0 To myArr.Length - 1
            Console.Write("{0}{1}", mySeparator, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The target Array contains the following (before and after copying):
'  The quick brown fox jumped over the lazy dog
'  The quick brown fox jumped over the napping dog
'  The quick brown fox jumped over three napping cats in the barn
'  three napping cats in the barn three napping cats in the barn

 using System;
 using System.Collections;
 public class SamplesArrayList  {

    public static void Main()  {

       // Creates and initializes the source ArrayList.
       ArrayList mySourceList = new ArrayList();
       mySourceList.Add( "three" );
       mySourceList.Add( "napping" );
       mySourceList.Add( "cats" );
       mySourceList.Add( "in" );
       mySourceList.Add( "the" );
       mySourceList.Add( "barn" );

       // Creates and initializes the one-dimensional target Array.
       String[] myTargetArray = new String[15];
       myTargetArray[0] = "The";
       myTargetArray[1] = "quick";
       myTargetArray[2] = "brown";
       myTargetArray[3] = "fox";
       myTargetArray[4] = "jumped";
       myTargetArray[5] = "over";
       myTargetArray[6] = "the";
       myTargetArray[7] = "lazy";
       myTargetArray[8] = "dog";

       // Displays the values of the target Array.
       Console.WriteLine( "The target Array contains the following (before and after copying):" );
       PrintValues( myTargetArray, ' ' );

       // Copies the second element from the source ArrayList to the target Array starting at index 7.
       mySourceList.CopyTo( 1, myTargetArray, 7, 1 );

       // Displays the values of the target Array.
       PrintValues( myTargetArray, ' ' );

       // Copies the entire source ArrayList to the target Array starting at index 6.
       mySourceList.CopyTo( myTargetArray, 6 );

       // Displays the values of the target Array.
       PrintValues( myTargetArray, ' ' );

       // Copies the entire source ArrayList to the target Array starting at index 0.
       mySourceList.CopyTo( myTargetArray );

       // Displays the values of the target Array.
       PrintValues( myTargetArray, ' ' );
    }

    public static void PrintValues( String[] myArr, char mySeparator )  {
       for ( int i = 0; i < myArr.Length; i++ )
          Console.Write( "{0}{1}", mySeparator, myArr[i] );
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over the napping dog
  The quick brown fox jumped over three napping cats in the barn
  three napping cats in the barn three napping cats in the barn
 */

using namespace System;
using namespace System::Collections;
void PrintValues( array<String^>^myArr, char mySeparator );
int main()
{

   // Creates and initializes the source ArrayList.
   ArrayList^ mySourceList = gcnew ArrayList;
   mySourceList->Add( "three" );
   mySourceList->Add( "napping" );
   mySourceList->Add( "cats" );
   mySourceList->Add( "in" );
   mySourceList->Add( "the" );
   mySourceList->Add( "barn" );

   // Creates and initializes the one-dimensional target Array.
   array<String^>^myTargetArray = gcnew array<String^>(15);
   myTargetArray[ 0 ] = "The";
   myTargetArray[ 1 ] = "quick";
   myTargetArray[ 2 ] = "brown";
   myTargetArray[ 3 ] = "fox";
   myTargetArray[ 4 ] = "jumped";
   myTargetArray[ 5 ] = "over";
   myTargetArray[ 6 ] = "the";
   myTargetArray[ 7 ] = "lazy";
   myTargetArray[ 8 ] = "dog";

   // Displays the values of the target Array.
   Console::WriteLine( "The target Array contains the following (before and after copying):" );
   PrintValues( myTargetArray, ' ' );

   // Copies the second element from the source ArrayList to the target ArrayList starting at index 7.
   mySourceList->CopyTo( 1, myTargetArray, 7, 1 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source ArrayList to the target ArrayList starting at index 6.
   mySourceList->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source ArrayList to the target ArrayList starting at index 0.
   mySourceList->CopyTo( myTargetArray );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );
}

void PrintValues( array<String^>^myArr, char mySeparator )
{
   for ( int i = 0; i < myArr->Length; i++ )
      Console::Write( "{0}{1}", mySeparator, myArr[ i ] );
   Console::WriteLine();
}

/*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over the napping dog
  The quick brown fox jumped over three napping cats in the barn
  three napping cats in the barn three napping cats in the barn
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
CopyTo 重载
System.Collections 命名空间


ArrayList ..::.CopyTo 方法 (Array, Int32)

ArrayList
.
.
::
.
CopyTo 方法 (Array, Int32)
ArrayList 类

从目标数组的指定索引处开始将整个 ArrayList 复制到兼容的一维 Array。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub CopyTo ( _
    array As Array, _
    arrayIndex As Integer _
)
public virtual void CopyTo(
    Array array,
    int arrayIndex
)
public:
virtual void CopyTo(
    Array^ array,
    int arrayIndex
)
abstract CopyTo :
        array:Array *
        arrayIndex:int -> unit
override CopyTo :
        array:Array *
        arrayIndex:int -> unit

参数

array
类型： System Array
作为从 ArrayList 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 ArrayList 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
arrayIndex
类型： System Int32
array 中从零开始的索引，将在此处开始复制。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | arrayIndex 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 ArrayList 中的元素数大于从 arrayIndex 到目标 array 结尾处之间的可用空间。
InvalidCastException | 无法自动将源 ArrayList 的类型强制转换为目标 array 的类型。

指定的数组必须是兼容类型的数组。

此方法使用 Array..::.Copy 来复制元素。

这些元素将复制到 Array，复制顺序与枚举数循环访问 ArrayList 的顺序一样。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将 ArrayList 复制到一维 System..::.Array 中。

Imports System
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes the source ArrayList.
        Dim mySourceList As New ArrayList()
        mySourceList.Add("three")
        mySourceList.Add("napping")
        mySourceList.Add("cats")
        mySourceList.Add("in")
        mySourceList.Add("the")
        mySourceList.Add("barn")

        ' Creates and initializes the one-dimensional target Array.
        Dim myTargetArray(14) As String
        myTargetArray(0) = "The"
        myTargetArray(1) = "quick"
        myTargetArray(2) = "brown"
        myTargetArray(3) = "fox"
        myTargetArray(4) = "jumped"
        myTargetArray(5) = "over"
        myTargetArray(6) = "the"
        myTargetArray(7) = "lazy"
        myTargetArray(8) = "dog"

        ' Displays the values of the target Array.
        Console.WriteLine("The target Array contains the following (before and after copying):")
        PrintValues(myTargetArray, " "c)

        ' Copies the second element from the source ArrayList to the target Array, starting at index 7.
        mySourceList.CopyTo(1, myTargetArray, 7, 1)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source ArrayList to the target Array, starting at index 6.
        mySourceList.CopyTo(myTargetArray, 6)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source ArrayList to the target Array, starting at index 0.
        mySourceList.CopyTo(myTargetArray)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

    End Sub 'Main

    Public Shared Sub PrintValues(myArr() As String, mySeparator As Char)
        Dim i As Integer
        For i = 0 To myArr.Length - 1
            Console.Write("{0}{1}", mySeparator, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The target Array contains the following (before and after copying):
'  The quick brown fox jumped over the lazy dog
'  The quick brown fox jumped over the napping dog
'  The quick brown fox jumped over three napping cats in the barn
'  three napping cats in the barn three napping cats in the barn

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes the source ArrayList.
      ArrayList mySourceList = new ArrayList();
      mySourceList.Add( "three" );
      mySourceList.Add( "napping" );
      mySourceList.Add( "cats" );
      mySourceList.Add( "in" );
      mySourceList.Add( "the" );
      mySourceList.Add( "barn" );

      // Creates and initializes the one-dimensional target Array.
      String[] myTargetArray = new String[15];
      myTargetArray[0] = "The";
      myTargetArray[1] = "quick";
      myTargetArray[2] = "brown";
      myTargetArray[3] = "fox";
      myTargetArray[4] = "jumped";
      myTargetArray[5] = "over";
      myTargetArray[6] = "the";
      myTargetArray[7] = "lazy";
      myTargetArray[8] = "dog";

      // Displays the values of the target Array.
      Console.WriteLine( "The target Array contains the following (before and after copying):" );
      PrintValues( myTargetArray, ' ' );

      // Copies the second element from the source ArrayList to the target Array, starting at index 7.
      mySourceList.CopyTo( 1, myTargetArray, 7, 1 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source ArrayList to the target Array, starting at index 6.
      mySourceList.CopyTo( myTargetArray, 6 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source ArrayList to the target Array, starting at index 0.
      mySourceList.CopyTo( myTargetArray );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

   }

   public static void PrintValues( String[] myArr, char mySeparator )  {
      for ( int i = 0; i < myArr.Length; i++ )
         Console.Write( "{0}{1}", mySeparator, myArr[i] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The target Array contains the following (before and after copying):
 The quick brown fox jumped over the lazy dog
 The quick brown fox jumped over the napping dog
 The quick brown fox jumped over three napping cats in the barn
 three napping cats in the barn three napping cats in the barn

*/

using namespace System;
using namespace System::Collections;
void PrintValues( array<String^>^myArr, char mySeparator );
int main()
{

   // Creates and initializes the source ArrayList.
   ArrayList^ mySourceList = gcnew ArrayList;
   mySourceList->Add( "three" );
   mySourceList->Add( "napping" );
   mySourceList->Add( "cats" );
   mySourceList->Add( "in" );
   mySourceList->Add( "the" );
   mySourceList->Add( "barn" );

   // Creates and initializes the one-dimensional target Array.
   array<String^>^myTargetArray = gcnew array<String^>(15);
   myTargetArray[ 0 ] = "The";
   myTargetArray[ 1 ] = "quick";
   myTargetArray[ 2 ] = "brown";
   myTargetArray[ 3 ] = "fox";
   myTargetArray[ 4 ] = "jumped";
   myTargetArray[ 5 ] = "over";
   myTargetArray[ 6 ] = "the";
   myTargetArray[ 7 ] = "lazy";
   myTargetArray[ 8 ] = "dog";

   // Displays the values of the target Array.
   Console::WriteLine( "The target Array contains the following (before and after copying):" );
   PrintValues( myTargetArray, ' ' );

   // Copies the second element from the source ArrayList to the target Array, starting at index 7.
   mySourceList->CopyTo( 1, myTargetArray, 7, 1 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source ArrayList to the target Array, starting at index 6.
   mySourceList->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source ArrayList to the target Array, starting at index 0.
   mySourceList->CopyTo( myTargetArray );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );
}

void PrintValues( array<String^>^myArr, char mySeparator )
{
   for ( int i = 0; i < myArr->Length; i++ )
      Console::Write( "{0}{1}", mySeparator, myArr[ i ] );
   Console::WriteLine();
}

/*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over the napping dog
  The quick brown fox jumped over three napping cats in the barn
  three napping cats in the barn three napping cats in the barn

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
CopyTo 重载
System.Collections 命名空间


ArrayList ..::.CopyTo 方法 (Int32, Array, Int32, Int32)

ArrayList
.
.
::
.
CopyTo 方法 (Int32, Array, Int32, Int32)
ArrayList 类

从目标数组的指定索引处开始，将一定范围的元素从 ArrayList 复制到兼容的一维 Array 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub CopyTo ( _
    index As Integer, _
    array As Array, _
    arrayIndex As Integer, _
    count As Integer _
)
public virtual void CopyTo(
    int index,
    Array array,
    int arrayIndex,
    int count
)
public:
virtual void CopyTo(
    int index,
    Array^ array,
    int arrayIndex,
    int count
)
abstract CopyTo :
        index:int *
        array:Array *
        arrayIndex:int *
        count:int -> unit
override CopyTo :
        index:int *
        array:Array *
        arrayIndex:int *
        count:int -> unit

参数

index
类型： System Int32
源 ArrayList 中复制开始位置的从零开始的索引。
array
类型： System Array
作为从 ArrayList 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 ArrayList 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
arrayIndex
类型： System Int32
array 中从零开始的索引，将在此处开始复制。
count
类型： System Int32
要复制的元素数。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零。 - 或 - arrayIndex 小于零。 - 或 - count 小于零。
ArgumentException | array 是多维数组。 - 或 - index 等于或大于源 ArrayList 的 Count。 - 或 - 从 index 到源 ArrayList 的末尾的元素数大于从 arrayIndex 到目标 array 的末尾的可用空间。
InvalidCastException | 无法自动将源 ArrayList 的类型强制转换为目标 array 的类型。

指定的数组必须是兼容类型的数组。

此方法使用 Array..::.Copy 来复制元素。

这些元素将复制到 Array，复制顺序与枚举数循环访问 ArrayList 的顺序一样。

此方法的运算复杂度为 O(n)，其中 n 是 count。

下面的代码示例演示如何将 ArrayList 复制到一维 System..::.Array 中。

Imports System
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes the source ArrayList.
        Dim mySourceList As New ArrayList()
        mySourceList.Add("three")
        mySourceList.Add("napping")
        mySourceList.Add("cats")
        mySourceList.Add("in")
        mySourceList.Add("the")
        mySourceList.Add("barn")

        ' Creates and initializes the one-dimensional target Array.
        Dim myTargetArray(14) As String
        myTargetArray(0) = "The"
        myTargetArray(1) = "quick"
        myTargetArray(2) = "brown"
        myTargetArray(3) = "fox"
        myTargetArray(4) = "jumped"
        myTargetArray(5) = "over"
        myTargetArray(6) = "the"
        myTargetArray(7) = "lazy"
        myTargetArray(8) = "dog"

        ' Displays the values of the target Array.
        Console.WriteLine("The target Array contains the following (before and after copying):")
        PrintValues(myTargetArray, " "c)

        ' Copies the second element from the source ArrayList to the target Array, starting at index 7.
        mySourceList.CopyTo(1, myTargetArray, 7, 1)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source ArrayList to the target Array, starting at index 6.
        mySourceList.CopyTo(myTargetArray, 6)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source ArrayList to the target Array, starting at index 0.
        mySourceList.CopyTo(myTargetArray)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

    End Sub 'Main

    Public Shared Sub PrintValues(myArr() As String, mySeparator As Char)
        Dim i As Integer
        For i = 0 To myArr.Length - 1
            Console.Write("{0}{1}", mySeparator, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The target Array contains the following (before and after copying):
'  The quick brown fox jumped over the lazy dog
'  The quick brown fox jumped over the napping dog
'  The quick brown fox jumped over three napping cats in the barn
'  three napping cats in the barn three napping cats in the barn

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes the source ArrayList.
      ArrayList mySourceList = new ArrayList();
      mySourceList.Add( "three" );
      mySourceList.Add( "napping" );
      mySourceList.Add( "cats" );
      mySourceList.Add( "in" );
      mySourceList.Add( "the" );
      mySourceList.Add( "barn" );

      // Creates and initializes the one-dimensional target Array.
      String[] myTargetArray = new String[15];
      myTargetArray[0] = "The";
      myTargetArray[1] = "quick";
      myTargetArray[2] = "brown";
      myTargetArray[3] = "fox";
      myTargetArray[4] = "jumped";
      myTargetArray[5] = "over";
      myTargetArray[6] = "the";
      myTargetArray[7] = "lazy";
      myTargetArray[8] = "dog";

      // Displays the values of the target Array.
      Console.WriteLine( "The target Array contains the following (before and after copying):" );
      PrintValues( myTargetArray, ' ' );

      // Copies the second element from the source ArrayList to the target Array, starting at index 7.
      mySourceList.CopyTo( 1, myTargetArray, 7, 1 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source ArrayList to the target Array, starting at index 6.
      mySourceList.CopyTo( myTargetArray, 6 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source ArrayList to the target Array, starting at index 0.
      mySourceList.CopyTo( myTargetArray );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

   }

   public static void PrintValues( String[] myArr, char mySeparator )  {
      for ( int i = 0; i < myArr.Length; i++ )
         Console.Write( "{0}{1}", mySeparator, myArr[i] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The target Array contains the following (before and after copying):
 The quick brown fox jumped over the lazy dog
 The quick brown fox jumped over the napping dog
 The quick brown fox jumped over three napping cats in the barn
 three napping cats in the barn three napping cats in the barn

*/

using namespace System;
using namespace System::Collections;
void PrintValues( array<String^>^myArr, char mySeparator );
int main()
{

   // Creates and initializes the source ArrayList.
   ArrayList^ mySourceList = gcnew ArrayList;
   mySourceList->Add( "three" );
   mySourceList->Add( "napping" );
   mySourceList->Add( "cats" );
   mySourceList->Add( "in" );
   mySourceList->Add( "the" );
   mySourceList->Add( "barn" );

   // Creates and initializes the one-dimensional target Array.
   array<String^>^myTargetArray = gcnew array<String^>(15);
   myTargetArray[ 0 ] = "The";
   myTargetArray[ 1 ] = "quick";
   myTargetArray[ 2 ] = "brown";
   myTargetArray[ 3 ] = "fox";
   myTargetArray[ 4 ] = "jumped";
   myTargetArray[ 5 ] = "over";
   myTargetArray[ 6 ] = "the";
   myTargetArray[ 7 ] = "lazy";
   myTargetArray[ 8 ] = "dog";

   // Displays the values of the target Array.
   Console::WriteLine( "The target Array contains the following (before and after copying):" );
   PrintValues( myTargetArray, ' ' );

   // Copies the second element from the source ArrayList to the target Array, starting at index 7.
   mySourceList->CopyTo( 1, myTargetArray, 7, 1 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source ArrayList to the target Array, starting at index 6.
   mySourceList->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source ArrayList to the target Array, starting at index 0.
   mySourceList->CopyTo( myTargetArray );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );
}

void PrintValues( array<String^>^myArr, char mySeparator )
{
   for ( int i = 0; i < myArr->Length; i++ )
      Console::Write( "{0}{1}", mySeparator, myArr[ i ] );
   Console::WriteLine();
}

/*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over the napping dog
  The quick brown fox jumped over three napping cats in the barn
  three napping cats in the barn three napping cats in the barn

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
CopyTo 重载
System.Collections 命名空间


ArrayList ..::.FixedSize 方法

ArrayList
.
.
::
.
FixedSize 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

返回具有固定大小的列表包装，其中的元素允许修改，但不允许添加或移除。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.FixedSize 方法 (ArrayList)

ArrayList
.
.
::
.
FixedSize 方法 (ArrayList)
ArrayList 类

返回具有固定大小的 ArrayList 包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FixedSize ( _
    list As ArrayList _
) As ArrayList
public static ArrayList FixedSize(
    ArrayList list
)
public:
static ArrayList^ FixedSize(
    ArrayList^ list
)
static member FixedSize :
        list:ArrayList -> ArrayList

参数

list
类型： System.Collections ArrayList
要包装的 ArrayList。

返回值

类型： System.Collections ArrayList
具有固定大小的 ArrayList 包装。
异常 | 条件
ArgumentNullException | list 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此包装可用于防止在初始 ArrayList 中进行添加和删除。仍可以修改或替换这些元素。 此包装可用于防止在初始 ArrayList 中进行添加和删除。仍可以修改或替换这些元素。

固定大小的集合只是一个具有用于防止添加和移除元素的包装的集合；因此，如果更改基础集合（包括添加和移除元素），则固定大小的集合将反映那些更改。

此方法是 O(1) 操作。

下面的代码示例演示如何在 ArrayList 周围创建一个大小固定的包装。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Create a fixed-size wrapper around the ArrayList.
        Dim myFixedSizeAL As ArrayList = ArrayList.FixedSize(myAL)

        ' Display whether the ArrayLists have a fixed size or not.
        Dim msg As String
        If myAL.IsFixedSize Then
            msg = "has a fixed size"
        Else
            msg = "does not have a fixed size"
        End If
        Console.WriteLine("myAL {0}.", msg)
        If myFixedSizeAL.IsFixedSize Then
            msg = "has a fixed size"
        Else
            msg = "does not have a fixed size"
        End If
        Console.WriteLine("myFixedSizeAL {0}.", msg)
        Console.WriteLine()

        ' Display both ArrayLists.
        Console.WriteLine("Initially,")
        Console.Write("Standard  :")
        PrintValues(myAL, " "c)
        Console.Write("Fixed size:")
        PrintValues(myFixedSizeAL, " "c)

        ' Sort is allowed in the fixed-size ArrayList.
        myFixedSizeAL.Sort()

        ' Display both ArrayLists.
        Console.WriteLine("After Sort,")
        Console.Write("Standard  :")
        PrintValues(myAL, " "c)
        Console.Write("Fixed size:")
        PrintValues(myFixedSizeAL, " "c)

        ' Reverse is allowed in the fixed-size ArrayList.
        myFixedSizeAL.Reverse()

        ' Display both ArrayLists.
        Console.WriteLine("After Reverse,")
        Console.Write("Standard  :")
        PrintValues(myAL, " "c)
        Console.Write("Fixed size:")
        PrintValues(myFixedSizeAL, " "c)

        ' Add an element to the standard ArrayList.
        myAL.Add("AddMe")

        ' Display both ArrayLists.
        Console.WriteLine("After adding to the standard ArrayList,")
        Console.Write("Standard  :")
        PrintValues(myAL, " "c)
        Console.Write("Fixed size:")
        PrintValues(myFixedSizeAL, " "c)
        Console.WriteLine()

        ' Adding or inserting elements to the fixed-size ArrayList throws an exception.
        Try
            myFixedSizeAL.Add("AddMe2")
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try
        Try
            myFixedSizeAL.Insert(3, "InsertMe")
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try
    End Sub 'Main

    Public Shared Sub PrintValues(myList As IEnumerable, mySeparator As Char)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("{0}{1}", mySeparator, obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' myAL does not have a fixed size.
' myFixedSizeAL has a fixed size.
'
' Initially,
' Standard  : The quick brown fox jumped over the lazy dog
' Fixed size: The quick brown fox jumped over the lazy dog
' After Sort,
' Standard  : brown dog fox jumped lazy over quick the The
' Fixed size: brown dog fox jumped lazy over quick the The
' After Reverse,
' Standard  : The the quick over lazy jumped fox dog brown
' Fixed size: The the quick over lazy jumped fox dog brown
' After adding to the standard ArrayList,
' Standard  : The the quick over lazy jumped fox dog brown AddMe
' Fixed size: The the quick over lazy jumped fox dog brown AddMe
'
' Exception: System.NotSupportedException: Collection was of a fixed size.
'    at System.Collections.FixedSizeArrayList.Add(Object obj)
'    at SamplesArrayList.Main()
' Exception: System.NotSupportedException: Collection was of a fixed size.
'    at System.Collections.FixedSizeArrayList.Insert(Int32 index, Object obj)
'    at SamplesArrayList.Main()

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Create a fixed-size wrapper around the ArrayList.
      ArrayList myFixedSizeAL = ArrayList.FixedSize( myAL );

      // Display whether the ArrayLists have a fixed size or not.
      Console.WriteLine( "myAL {0}.", myAL.IsFixedSize ? "has a fixed size" : "does not have a fixed size" );
      Console.WriteLine( "myFixedSizeAL {0}.", myFixedSizeAL.IsFixedSize ? "has a fixed size" : "does not have a fixed size" );
      Console.WriteLine();

      // Display both ArrayLists.
      Console.WriteLine( "Initially," );
      Console.Write( "Standard  :" );
      PrintValues( myAL, ' ' );
      Console.Write( "Fixed size:" );
      PrintValues( myFixedSizeAL, ' ' );

      // Sort is allowed in the fixed-size ArrayList.
      myFixedSizeAL.Sort();

      // Display both ArrayLists.
      Console.WriteLine( "After Sort," );
      Console.Write( "Standard  :" );
      PrintValues( myAL, ' ' );
      Console.Write( "Fixed size:" );
      PrintValues( myFixedSizeAL, ' ' );

      // Reverse is allowed in the fixed-size ArrayList.
      myFixedSizeAL.Reverse();

      // Display both ArrayLists.
      Console.WriteLine( "After Reverse," );
      Console.Write( "Standard  :" );
      PrintValues( myAL, ' ' );
      Console.Write( "Fixed size:" );
      PrintValues( myFixedSizeAL, ' ' );

      // Add an element to the standard ArrayList.
      myAL.Add( "AddMe" );

      // Display both ArrayLists.
      Console.WriteLine( "After adding to the standard ArrayList," );
      Console.Write( "Standard  :" );
      PrintValues( myAL, ' ' );
      Console.Write( "Fixed size:" );
      PrintValues( myFixedSizeAL, ' ' );
      Console.WriteLine();

      // Adding or inserting elements to the fixed-size ArrayList throws an exception.
      try  {
         myFixedSizeAL.Add( "AddMe2" );
      } catch ( Exception myException )  {
         Console.WriteLine("Exception: " + myException.ToString());
      }
      try  {
         myFixedSizeAL.Insert( 3, "InsertMe" );
      } catch ( Exception myException )  {
         Console.WriteLine("Exception: " + myException.ToString());
      }
   }

   public static void PrintValues( IEnumerable myList, char mySeparator )  {
      foreach ( Object obj in myList )
         Console.Write( "{0}{1}", mySeparator, obj );
      Console.WriteLine();
   }

}
/*
This code produces the following output.

myAL does not have a fixed size.
myFixedSizeAL has a fixed size.

Initially,
Standard  : The quick brown fox jumped over the lazy dog
Fixed size: The quick brown fox jumped over the lazy dog
After Sort,
Standard  : brown dog fox jumped lazy over quick the The
Fixed size: brown dog fox jumped lazy over quick the The
After Reverse,
Standard  : The the quick over lazy jumped fox dog brown
Fixed size: The the quick over lazy jumped fox dog brown
After adding to the standard ArrayList,
Standard  : The the quick over lazy jumped fox dog brown AddMe
Fixed size: The the quick over lazy jumped fox dog brown AddMe

Exception: System.NotSupportedException: Collection was of a fixed size.
   at System.Collections.FixedSizeArrayList.Add(Object obj)
   at SamplesArrayList.Main()
Exception: System.NotSupportedException: Collection was of a fixed size.
   at System.Collections.FixedSizeArrayList.Insert(Int32 index, Object obj)
   at SamplesArrayList.Main()

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, char mySeparator );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Create a fixed-size wrapper around the ArrayList.
   ArrayList^ myFixedSizeAL = ArrayList::FixedSize( myAL );

   // Display whether the ArrayLists have a fixed size or not.
   Console::WriteLine( "myAL {0}.", myAL->IsFixedSize ? (String^)"has a fixed size" : "does not have a fixed size" );
   Console::WriteLine( "myFixedSizeAL {0}.", myFixedSizeAL->IsFixedSize ? (String^)"has a fixed size" : "does not have a fixed size" );
   Console::WriteLine();

   // Display both ArrayLists.
   Console::WriteLine( "Initially," );
   Console::Write( "Standard  :" );
   PrintValues( myAL, ' ' );
   Console::Write( "Fixed size:" );
   PrintValues( myFixedSizeAL, ' ' );

   // Sort is allowed in the fixed-size ArrayList.
   myFixedSizeAL->Sort();

   // Display both ArrayLists.
   Console::WriteLine( "After Sort," );
   Console::Write( "Standard  :" );
   PrintValues( myAL, ' ' );
   Console::Write( "Fixed size:" );
   PrintValues( myFixedSizeAL, ' ' );

   // Reverse is allowed in the fixed-size ArrayList.
   myFixedSizeAL->Reverse();

   // Display both ArrayLists.
   Console::WriteLine( "After Reverse," );
   Console::Write( "Standard  :" );
   PrintValues( myAL, ' ' );
   Console::Write( "Fixed size:" );
   PrintValues( myFixedSizeAL, ' ' );

   // Add an element to the standard ArrayList.
   myAL->Add( "AddMe" );

   // Display both ArrayLists.
   Console::WriteLine( "After adding to the standard ArrayList," );
   Console::Write( "Standard  :" );
   PrintValues( myAL, ' ' );
   Console::Write( "Fixed size:" );
   PrintValues( myFixedSizeAL, ' ' );
   Console::WriteLine();

   // Adding or inserting elements to the fixed-size ArrayList throws an exception.
   try
   {
      myFixedSizeAL->Add( "AddMe2" );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

   try
   {
      myFixedSizeAL->Insert( 3, "InsertMe" );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

}

void PrintValues( IEnumerable^ myList, char mySeparator )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 myAL does not have a fixed size.
 myFixedSizeAL has a fixed size.

 Initially,
 Standard  : The quick brown fox jumped over the lazy dog
 Fixed size: The quick brown fox jumped over the lazy dog
 After Sort,
 Standard  : brown dog fox jumped lazy over quick the The
 Fixed size: brown dog fox jumped lazy over quick the The
 After Reverse,
 Standard  : The the quick over lazy jumped fox dog brown
 Fixed size: The the quick over lazy jumped fox dog brown
 After adding to the standard ArrayList,
 Standard  : The the quick over lazy jumped fox dog brown AddMe
 Fixed size: The the quick over lazy jumped fox dog brown AddMe

 Exception: System.NotSupportedException: Collection was of a fixed size.
    at System.Collections.FixedSizeArrayList.Add(Object obj)
    at SamplesArrayList.Main()
 Exception: System.NotSupportedException: Collection was of a fixed size.
    at System.Collections.FixedSizeArrayList.Insert(Int32 index, Object obj)
    at SamplesArrayList.Main()

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
FixedSize 重载
System.Collections 命名空间


ArrayList ..::.FixedSize 方法 (IList)

ArrayList
.
.
::
.
FixedSize 方法 (IList)
ArrayList 类

返回具有固定大小的 IList 包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function FixedSize ( _
    list As IList _
) As IList
public static IList FixedSize(
    IList list
)
public:
static IList^ FixedSize(
    IList^ list
)
static member FixedSize :
        list:IList -> IList

参数

list
类型： System.Collections IList
要包装的 IList。

返回值

类型： System.Collections IList
具有固定大小的 IList 包装。
异常 | 条件
ArgumentNullException | list 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此包装可用于防止在初始 IList 中进行添加和删除。仍可以修改或替换这些元素。 此包装可用于防止在初始 IList 中进行添加和删除。仍可以修改或替换这些元素。

固定大小的集合只是一个具有用于防止添加和移除元素的包装的集合；因此，如果更改基础集合（包括添加和移除元素），则固定大小的集合将反映那些更改。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
FixedSize 重载
System.Collections 命名空间


ArrayList ..::.GetEnumerator 方法

ArrayList
.
.
::
.
GetEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

返回循环访问 ArrayList 的枚举器。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.GetEnumerator 方法

ArrayList
.
.
::
.
GetEnumerator 方法
ArrayList 类

返回整个 ArrayList 的一个枚举器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumerator As IEnumerator
public virtual IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator()
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
用于整个 ArrayList 的 IEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

下面的示例获取 ArrayList 的枚举器，以及 ArrayList 中一系列元素的枚举器。

Imports System
Imports System.Collections

Class Program
    Private Shared Sub Main(ByVal args As String())
        Dim colors As New ArrayList()
        colors.Add("red")
        colors.Add("blue")
        colors.Add("green")
        colors.Add("yellow")
        colors.Add("beige")
        colors.Add("brown")
        colors.Add("magenta")
        colors.Add("purple")

        Dim e As IEnumerator = colors.GetEnumerator()
        While e.MoveNext()
            Dim obj As [Object] = e.Current
            Console.WriteLine(obj)
        End While

        Console.WriteLine()

        Dim e2 As IEnumerator = colors.GetEnumerator(2, 4)
        While e2.MoveNext()
            Dim obj As [Object] = e2.Current
            Console.WriteLine(obj)
        End While
    End Sub
End Class

' This code example produces
' the following ouput:
' red
' blue
' green
' yellow
' beige
' brown
' magenta
' purple
'
' green
' yellow
' beige
' brown
'

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        ArrayList colors = new ArrayList();
        colors.Add("red");
        colors.Add("blue");
        colors.Add("green");
        colors.Add("yellow");
        colors.Add("beige");
        colors.Add("brown");
        colors.Add("magenta");
        colors.Add("purple");

        IEnumerator e = colors.GetEnumerator();
        while (e.MoveNext())
        {
            Object obj = e.Current;
            Console.WriteLine(obj);
        }

        Console.WriteLine();

        IEnumerator e2 = colors.GetEnumerator(2, 4);
        while (e2.MoveNext())
        {
            Object obj = e2.Current;
            Console.WriteLine(obj);
        }
    }
}

/* This code example produces
   the following ouput:
    red
    blue
    green
    yellow
    beige
    brown
    magenta
    purple

    green
    yellow
    beige
    brown
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
GetEnumerator 重载
System.Collections 命名空间
IEnumerator


ArrayList ..::.GetEnumerator 方法 (Int32, Int32)

ArrayList
.
.
::
.
GetEnumerator 方法 (Int32, Int32)
ArrayList 类

返回 ArrayList 中某个范围内的元素的枚举器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumerator ( _
    index As Integer, _
    count As Integer _
) As IEnumerator
public virtual IEnumerator GetEnumerator(
    int index,
    int count
)
public:
virtual IEnumerator^ GetEnumerator(
    int index,
    int count
)
abstract GetEnumerator :
        index:int *
        count:int -> IEnumerator
override GetEnumerator :
        index:int *
        count:int -> IEnumerator

参数

index
类型： System Int32
枚举器应引用的 ArrayList 部分从零开始的起始索引。
count
类型： System Int32
枚举器应引用的 ArrayList 部分中的元素数。

返回值

类型： System.Collections IEnumerator
ArrayList 中指定范围内的元素的 IEnumerator。
异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - count 小于零。
ArgumentException | index 和 count 未指定 ArrayList 中的有效范围。

C# 语言的 foreach 语句（在 Visual C++ 中为 for each，在 Visual Basic 中为 For Each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual C++ 中为 for each，在 Visual Basic 中为 For Each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

版本兼容性

在 .NET Framework 版本 1.0 和 1.1 中，Adapter 方法返回的 ArrayList 包装的枚举数将第二个参数视为上限而不是计数。在 .NET Framework 2.0 中，将第二个参数正确视为计数。 在 .NET Framework 版本 1.0 和 1.1 中，Adapter 方法返回的 ArrayList 包装的枚举数将第二个参数视为上限而不是计数。在 .NET Framework 2.0 中，将第二个参数正确视为计数。

下面的示例获取 ArrayList 的枚举器，以及 ArrayList 中一系列元素的枚举器。

Imports System
Imports System.Collections

Class Program
    Private Shared Sub Main(ByVal args As String())
        Dim colors As New ArrayList()
        colors.Add("red")
        colors.Add("blue")
        colors.Add("green")
        colors.Add("yellow")
        colors.Add("beige")
        colors.Add("brown")
        colors.Add("magenta")
        colors.Add("purple")

        Dim e As IEnumerator = colors.GetEnumerator()
        While e.MoveNext()
            Dim obj As [Object] = e.Current
            Console.WriteLine(obj)
        End While

        Console.WriteLine()

        Dim e2 As IEnumerator = colors.GetEnumerator(2, 4)
        While e2.MoveNext()
            Dim obj As [Object] = e2.Current
            Console.WriteLine(obj)
        End While
    End Sub
End Class

' This code example produces
' the following ouput:
' red
' blue
' green
' yellow
' beige
' brown
' magenta
' purple
'
' green
' yellow
' beige
' brown
'

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        ArrayList colors = new ArrayList();
        colors.Add("red");
        colors.Add("blue");
        colors.Add("green");
        colors.Add("yellow");
        colors.Add("beige");
        colors.Add("brown");
        colors.Add("magenta");
        colors.Add("purple");

        IEnumerator e = colors.GetEnumerator();
        while (e.MoveNext())
        {
            Object obj = e.Current;
            Console.WriteLine(obj);
        }

        Console.WriteLine();

        IEnumerator e2 = colors.GetEnumerator(2, 4);
        while (e2.MoveNext())
        {
            Object obj = e2.Current;
            Console.WriteLine(obj);
        }
    }
}

/* This code example produces
   the following ouput:
    red
    blue
    green
    yellow
    beige
    brown
    magenta
    purple

    green
    yellow
    beige
    brown
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
GetEnumerator 重载
System.Collections 命名空间
IEnumerator


ArrayList ..::.GetRange 方法

ArrayList
.
.
::
.
GetRange 方法
ArrayList 类

返回 ArrayList，它表示源 ArrayList 中元素的子集。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetRange ( _
    index As Integer, _
    count As Integer _
) As ArrayList
public virtual ArrayList GetRange(
    int index,
    int count
)
public:
virtual ArrayList^ GetRange(
    int index,
    int count
)
abstract GetRange :
        index:int *
        count:int -> ArrayList
override GetRange :
        index:int *
        count:int -> ArrayList

参数

index
类型： System Int32
范围开始处的从零开始的 ArrayList 索引。
count
类型： System Int32
范围中的元素数。

返回值

类型： System.Collections ArrayList
ArrayList，它表示源 ArrayList 中元素的子集。
异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - count 小于零。
ArgumentException | index 和 count 不表示 ArrayList 中元素的有效范围。

此方法不创建元素的副本。新 ArrayList 只是一个进入源 ArrayList 的视图窗口。但是，随后对源 ArrayList 进行的所有更改必须通过此视图窗口 ArrayList 完成。如果直接对源 ArrayList 进行更改，则该视图窗口 ArrayList 将无效，对其执行的任何操作将返回 InvalidOperationException。 此方法不创建元素的副本。新 ArrayList 只是一个进入源 ArrayList 的视图窗口。但是，随后对源 ArrayList 进行的所有更改必须通过此视图窗口 ArrayList 完成。如果直接对源 ArrayList 进行更改，则该视图窗口 ArrayList 将无效，对其执行的任何操作将返回 InvalidOperationException。 此方法不创建元素的副本。新 ArrayList 只是一个进入源 ArrayList 的视图窗口。但是，随后对源 ArrayList 进行的所有更改必须通过此视图窗口 ArrayList 完成。如果直接对源 ArrayList 进行更改，则该视图窗口 ArrayList 将无效，对其执行的任何操作将返回 InvalidOperationException。 此方法不创建元素的副本。新 ArrayList 只是一个进入源 ArrayList 的视图窗口。但是，随后对源 ArrayList 进行的所有更改必须通过此视图窗口 ArrayList 完成。如果直接对源 ArrayList 进行更改，则该视图窗口 ArrayList 将无效，对其执行的任何操作将返回 InvalidOperationException。

此方法是 O(1) 操作。

下面的代码示例演示如何设置和获取 ArrayList 中元素的范围。

Imports System
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Creates and initializes the source ICollection.
        Dim mySourceList As New Queue()
        mySourceList.Enqueue("big")
        mySourceList.Enqueue("gray")
        mySourceList.Enqueue("wolf")

        ' Displays the values of five elements starting at index 0.
        Dim mySubAL As ArrayList = myAL.GetRange(0, 5)
        Console.WriteLine("Index 0 through 4 contains:")
        PrintValues(mySubAL, vbTab)

        ' Replaces the values of five elements starting at index 1 with the values in the ICollection.
        myAL.SetRange(1, mySourceList)

        ' Displays the values of five elements starting at index 0.
        mySubAL = myAL.GetRange(0, 5)
        Console.WriteLine("Index 0 through 4 now contains:")
        PrintValues(mySubAL, vbTab)

    End Sub 'Main

    Public Shared Sub PrintValues(myList As IEnumerable, mySeparator As Char)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("{0}{1}", mySeparator, obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' Index 0 through 4 contains:
'         The     quick   brown   fox     jumped
' Index 0 through 4 now contains:
'         The     big     gray    wolf    jumped

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Creates and initializes the source ICollection.
      Queue mySourceList = new Queue();
      mySourceList.Enqueue( "big" );
      mySourceList.Enqueue( "gray" );
      mySourceList.Enqueue( "wolf" );

      // Displays the values of five elements starting at index 0.
      ArrayList mySubAL = myAL.GetRange( 0, 5 );
      Console.WriteLine( "Index 0 through 4 contains:" );
      PrintValues( mySubAL, '\t' );

      // Replaces the values of five elements starting at index 1 with the values in the ICollection.
      myAL.SetRange( 1, mySourceList );

      // Displays the values of five elements starting at index 0.
      mySubAL = myAL.GetRange( 0, 5 );
      Console.WriteLine( "Index 0 through 4 now contains:" );
      PrintValues( mySubAL, '\t' );

   }

   public static void PrintValues( IEnumerable myList, char mySeparator )  {
      foreach ( Object obj in myList )
         Console.Write( "{0}{1}", mySeparator, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Index 0 through 4 contains:
        The     quick   brown   fox     jumped
Index 0 through 4 now contains:
        The     big     gray    wolf    jumped
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, char mySeparator );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Creates and initializes the source ICollection.
   Queue^ mySourceList = gcnew Queue;
   mySourceList->Enqueue( "big" );
   mySourceList->Enqueue( "gray" );
   mySourceList->Enqueue( "wolf" );

   // Displays the values of five elements starting at index 0.
   ArrayList^ mySubAL = myAL->GetRange( 0, 5 );
   Console::WriteLine( "Index 0 through 4 contains:" );
   PrintValues( mySubAL, '\t' );

   // Replaces the values of five elements starting at index 1 with the values in the ICollection.
   myAL->SetRange( 1, mySourceList );

   // Displays the values of five elements starting at index 0.
   mySubAL = myAL->GetRange( 0, 5 );
   Console::WriteLine( "Index 0 through 4 now contains:" );
   PrintValues( mySubAL, '\t' );
}

void PrintValues( IEnumerable^ myList, char mySeparator )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Index 0 through 4 contains:
         The     quick   brown   fox     jumped
 Index 0 through 4 now contains:
         The     big     gray    wolf    jumped
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
RemoveRange
AddRange
InsertRange
SetRange


ArrayList ..::.IndexOf 方法

ArrayList
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

返回 ArrayList 或它的一部分中某个值的第一个匹配项的从零开始的索引。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.IndexOf 方法 (Object)

ArrayList
.
.
::
.
IndexOf 方法 (Object)
ArrayList 类

搜索指定的 Object，并返回整个 ArrayList 中第一个匹配项的从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IndexOf ( _
    value As Object _
) As Integer
public virtual int IndexOf(
    Object value
)
public:
virtual int IndexOf(
    Object^ value
)
abstract IndexOf :
        value:Object -> int
override IndexOf :
        value:Object -> int

参数

value
类型： System Object
要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Int32
如果在整个 ArrayList 中找到 value 的第一个匹配项，则为该项的从零开始的索引；否则为 -1。

实现

从 ArrayList 的第一个元素开始向前搜索，到最后一个元素停止搜索。

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 是 Count。

此方法通过调用 Object..::.Equals 确定相等性。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例显示如何确定指定元素的第一个匹配项的索引。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList with three elements of the same value.
        Dim myAL As New ArrayList()
        myAL.Add("the")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumps")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")
        myAL.Add("in")
        myAL.Add("the")
        myAL.Add("barn")

        ' Displays the values of the ArrayList.
        Console.WriteLine("The ArrayList contains the following values:")
        PrintIndexAndValues(myAL)

        ' Search for the first occurrence of the duplicated value.
        Dim myString As [String] = "the"
        Dim myIndex As Integer = myAL.IndexOf(myString)
        Console.WriteLine("The first occurrence of ""{0}"" is at index {1}.", myString, myIndex)

        ' Search for the first occurrence of the duplicated value in the last section of the ArrayList.
        myIndex = myAL.IndexOf(myString, 4)
        Console.WriteLine("The first occurrence of ""{0}"" between index 4 and the end is at index {1}.", myString, myIndex)

        ' Search for the first occurrence of the duplicated value in a section of the ArrayList.
        myIndex = myAL.IndexOf(myString, 6, 6)
        Console.WriteLine("The first occurrence of ""{0}"" between index 6 and index 11 is at index {1}.", myString, myIndex)

        ' Search for the first occurrence of the duplicated value in a small section at the end of the ArrayList.
        myIndex = myAL.IndexOf(myString, 11)
        Console.WriteLine("The first occurrence of ""{0}"" between index 11 and the end is at index {1}.", myString, myIndex)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(ByVal myList As IEnumerable)
        Dim i As Integer
        Dim obj As [Object]
        For Each obj In myList
            Console.WriteLine("   [{0}]:    {1}", i, obj)
            i = i + 1
        Next obj
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The ArrayList contains the following values:
' 	[0]:	the
' 	[1]:	quick
' 	[2]:	brown
' 	[3]:	fox
' 	[4]:	jumps
' 	[5]:	over
' 	[6]:	the
' 	[7]:	lazy
' 	[8]:	dog
' 	[9]:	in
' 	[10]:	the
' 	[11]:	barn
'
' The first occurrence of "the" is at index 0.
' The first occurrence of "the" between index 4 and the end is at index 6.
' The first occurrence of "the" between index 6 and index 11 is at index 6.
' The first occurrence of "the" between index 11 and the end is at index -1.
'

using System;
using System.Collections;
public class SamplesArrayList
{

    public static void Main()
    {

        // Creates and initializes a new ArrayList with three elements of the same value.
        ArrayList myAL = new ArrayList();
        myAL.Add( "the" );
        myAL.Add( "quick" );
        myAL.Add( "brown" );
        myAL.Add( "fox" );
        myAL.Add( "jumps" );
        myAL.Add( "over" );
        myAL.Add( "the" );
        myAL.Add( "lazy" );
        myAL.Add( "dog" );
        myAL.Add( "in" );
        myAL.Add( "the" );
        myAL.Add( "barn" );

        // Displays the values of the ArrayList.
        Console.WriteLine( "The ArrayList contains the following values:" );
        PrintIndexAndValues( myAL );

        // Search for the first occurrence of the duplicated value.
        String myString = "the";
        int myIndex = myAL.IndexOf( myString );
        Console.WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

        // Search for the first occurrence of the duplicated value in the last section of the ArrayList.
        myIndex = myAL.IndexOf( myString, 4 );
        Console.WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

        // Search for the first occurrence of the duplicated value in a section of the ArrayList.
        myIndex = myAL.IndexOf( myString, 6, 6 );
        Console.WriteLine( "The first occurrence of \"{0}\" between index 6 and index 11 is at index {1}.", myString, myIndex );

        // Search for the first occurrence of the duplicated value in a small section at the end of the ArrayList.
        myIndex = myAL.IndexOf( myString, 11 );
        Console.WriteLine( "The first occurrence of \"{0}\" between index 11 and the end is at index {1}.", myString, myIndex );
    }

    public static void PrintIndexAndValues(IEnumerable myList)
    {
        int i = 0;
        foreach (Object obj in myList)
            Console.WriteLine("   [{0}]:    {1}", i++, obj);
        Console.WriteLine();
    }

}
/*
This code produces output similar to the following:

The ArrayList contains the following values:
   [0]:    the
   [1]:    quick
   [2]:    brown
   [3]:    fox
   [4]:    jumps
   [5]:    over
   [6]:    the
   [7]:    lazy
   [8]:    dog
   [9]:    in
   [10]:    the
   [11]:    barn

The first occurrence of "the" is at index 0.
The first occurrence of "the" between index 4 and the end is at index 6.
The first occurrence of "the" between index 6 and index 11 is at index 6.
The first occurrence of "the" between index 11 and the end is at index -1.
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList with three elements of the same value.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "the" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );
   myAL->Add( "in" );
   myAL->Add( "the" );
   myAL->Add( "barn" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList contains the following values:" );
   PrintIndexAndValues( myAL );

   // Search for the first occurrence of the duplicated value.
   String^ myString = "the";
   int myIndex = myAL->IndexOf( myString );
   Console::WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Search for the first occurrence of the duplicated value in the last section of the ArrayList.
   myIndex = myAL->IndexOf( myString, 4 );
   Console::WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

   // Search for the first occurrence of the duplicated value in a section of the ArrayList.
   myIndex = myAL->IndexOf( myString, 6, 6 );
   Console::WriteLine( "The first occurrence of \"{0}\" between index 6 and index 11 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "   [{0}]:    {1}", i++, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn

 The first occurrence of "the" is at index 0.
 The first occurrence of "the" between index 4 and the end is at index 6.
 The first occurrence of "the" between index 6 and index 11 is at index 6.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
IndexOf 重载
System.Collections 命名空间
LastIndexOf
Contains

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.IndexOf 方法 (Object, Int32)

ArrayList
.
.
::
.
IndexOf 方法 (Object, Int32)
ArrayList 类

搜索指定的 Object，并返回 ArrayList 中从指定索引到最后一个元素的元素范围内第一个匹配项的从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IndexOf ( _
    value As Object, _
    startIndex As Integer _
) As Integer
public virtual int IndexOf(
    Object value,
    int startIndex
)
public:
virtual int IndexOf(
    Object^ value,
    int startIndex
)
abstract IndexOf :
        value:Object *
        startIndex:int -> int
override IndexOf :
        value:Object *
        startIndex:int -> int

参数

value
类型： System Object
要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
startIndex
类型： System Int32
从零开始的搜索的起始索引。空列表中 0（零）为有效值。 从零开始的搜索的起始索引。空列表中 0（零）为有效值。

返回值

类型： System Int32
如果在 ArrayList 中从 startIndex 到最后一个元素的元素范围内找到 value 的第一个匹配项，则为该项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentOutOfRangeException | startIndex 不在 ArrayList 的有效索引范围内。

在 ArrayList 中从 startIndex 开始向前搜索，到最后一个元素停止搜索。

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 为从 startIndex 到 ArrayList 末尾的元素数。

此方法通过调用 Object..::.Equals 确定相等性。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例显示如何确定指定元素的第一个匹配项的索引。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList with three elements of the same value.
        Dim myAL As New ArrayList()
        myAL.Add("the")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumps")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")
        myAL.Add("in")
        myAL.Add("the")
        myAL.Add("barn")

        ' Displays the values of the ArrayList.
        Console.WriteLine("The ArrayList contains the following values:")
        PrintIndexAndValues(myAL)

        ' Search for the first occurrence of the duplicated value.
        Dim myString As [String] = "the"
        Dim myIndex As Integer = myAL.IndexOf(myString)
        Console.WriteLine("The first occurrence of ""{0}"" is at index {1}.", myString, myIndex)

        ' Search for the first occurrence of the duplicated value in the last section of the ArrayList.
        myIndex = myAL.IndexOf(myString, 4)
        Console.WriteLine("The first occurrence of ""{0}"" between index 4 and the end is at index {1}.", myString, myIndex)

        ' Search for the first occurrence of the duplicated value in a section of the ArrayList.
        myIndex = myAL.IndexOf(myString, 6, 6)
        Console.WriteLine("The first occurrence of ""{0}"" between index 6 and index 11 is at index {1}.", myString, myIndex)

        ' Search for the first occurrence of the duplicated value in a small section at the end of the ArrayList.
        myIndex = myAL.IndexOf(myString, 11)
        Console.WriteLine("The first occurrence of ""{0}"" between index 11 and the end is at index {1}.", myString, myIndex)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(ByVal myList As IEnumerable)
        Dim i As Integer
        Dim obj As [Object]
        For Each obj In myList
            Console.WriteLine("   [{0}]:    {1}", i, obj)
            i = i + 1
        Next obj
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The ArrayList contains the following values:
' 	[0]:	the
' 	[1]:	quick
' 	[2]:	brown
' 	[3]:	fox
' 	[4]:	jumps
' 	[5]:	over
' 	[6]:	the
' 	[7]:	lazy
' 	[8]:	dog
' 	[9]:	in
' 	[10]:	the
' 	[11]:	barn
'
' The first occurrence of "the" is at index 0.
' The first occurrence of "the" between index 4 and the end is at index 6.
' The first occurrence of "the" between index 6 and index 11 is at index 6.
' The first occurrence of "the" between index 11 and the end is at index -1.
'

using System;
using System.Collections;
public class SamplesArrayList
{

    public static void Main()
    {

        // Creates and initializes a new ArrayList with three elements of the same value.
        ArrayList myAL = new ArrayList();
        myAL.Add( "the" );
        myAL.Add( "quick" );
        myAL.Add( "brown" );
        myAL.Add( "fox" );
        myAL.Add( "jumps" );
        myAL.Add( "over" );
        myAL.Add( "the" );
        myAL.Add( "lazy" );
        myAL.Add( "dog" );
        myAL.Add( "in" );
        myAL.Add( "the" );
        myAL.Add( "barn" );

        // Displays the values of the ArrayList.
        Console.WriteLine( "The ArrayList contains the following values:" );
        PrintIndexAndValues( myAL );

        // Search for the first occurrence of the duplicated value.
        String myString = "the";
        int myIndex = myAL.IndexOf( myString );
        Console.WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

        // Search for the first occurrence of the duplicated value in the last section of the ArrayList.
        myIndex = myAL.IndexOf( myString, 4 );
        Console.WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

        // Search for the first occurrence of the duplicated value in a section of the ArrayList.
        myIndex = myAL.IndexOf( myString, 6, 6 );
        Console.WriteLine( "The first occurrence of \"{0}\" between index 6 and index 11 is at index {1}.", myString, myIndex );

        // Search for the first occurrence of the duplicated value in a small section at the end of the ArrayList.
        myIndex = myAL.IndexOf( myString, 11 );
        Console.WriteLine( "The first occurrence of \"{0}\" between index 11 and the end is at index {1}.", myString, myIndex );
    }

    public static void PrintIndexAndValues(IEnumerable myList)
    {
        int i = 0;
        foreach (Object obj in myList)
            Console.WriteLine("   [{0}]:    {1}", i++, obj);
        Console.WriteLine();
    }

}
/*
This code produces output similar to the following:

The ArrayList contains the following values:
   [0]:    the
   [1]:    quick
   [2]:    brown
   [3]:    fox
   [4]:    jumps
   [5]:    over
   [6]:    the
   [7]:    lazy
   [8]:    dog
   [9]:    in
   [10]:    the
   [11]:    barn

The first occurrence of "the" is at index 0.
The first occurrence of "the" between index 4 and the end is at index 6.
The first occurrence of "the" between index 6 and index 11 is at index 6.
The first occurrence of "the" between index 11 and the end is at index -1.
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList with three elements of the same value.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "the" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );
   myAL->Add( "in" );
   myAL->Add( "the" );
   myAL->Add( "barn" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList contains the following values:" );
   PrintIndexAndValues( myAL );

   // Search for the first occurrence of the duplicated value.
   String^ myString = "the";
   int myIndex = myAL->IndexOf( myString );
   Console::WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Search for the first occurrence of the duplicated value in the last section of the ArrayList.
   myIndex = myAL->IndexOf( myString, 4 );
   Console::WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

   // Search for the first occurrence of the duplicated value in a section of the ArrayList.
   myIndex = myAL->IndexOf( myString, 6, 6 );
   Console::WriteLine( "The first occurrence of \"{0}\" between index 6 and index 11 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "   [{0}]:    {1}", i++, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn

 The first occurrence of "the" is at index 0.
 The first occurrence of "the" between index 4 and the end is at index 6.
 The first occurrence of "the" between index 6 and index 11 is at index 6.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
IndexOf 重载
System.Collections 命名空间
LastIndexOf
Contains

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.IndexOf 方法 (Object, Int32, Int32)

ArrayList
.
.
::
.
IndexOf 方法 (Object, Int32, Int32)
ArrayList 类

搜索指定的 Object，并返回 ArrayList 中从指定的索引开始并包含指定的元素数的元素范围内第一个匹配项的从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IndexOf ( _
    value As Object, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public virtual int IndexOf(
    Object value,
    int startIndex,
    int count
)
public:
virtual int IndexOf(
    Object^ value,
    int startIndex,
    int count
)
abstract IndexOf :
        value:Object *
        startIndex:int *
        count:int -> int
override IndexOf :
        value:Object *
        startIndex:int *
        count:int -> int

参数

value
类型： System Object
要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
startIndex
类型： System Int32
从零开始的搜索的起始索引。空列表中 0（零）为有效值。 从零开始的搜索的起始索引。空列表中 0（零）为有效值。
count
类型： System Int32
要搜索的部分中的元素数。

返回值

类型： System Int32
如果在 ArrayList 中从 startIndex 开始并包含 count 个元素的元素范围内找到 value 的第一个匹配项，则为该项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentOutOfRangeException | startIndex 不在 ArrayList 的有效索引范围内。 - 或 - count 小于零。 - 或 - startIndex 和 count 未指定 ArrayList 中的有效部分。

如果 count 大于 0，则在 ArrayList 中向前搜索，从 startIndex 处开始，到索引为 startIndex 加上 count 再减 1 的位置结束。

此方法执行线性搜索；因此，此方法为 O(n) 操作，其中 n 是 count。

此方法通过调用 Object..::.Equals 确定相等性。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例显示如何确定指定元素的第一个匹配项的索引。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList with three elements of the same value.
        Dim myAL As New ArrayList()
        myAL.Add("the")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumps")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")
        myAL.Add("in")
        myAL.Add("the")
        myAL.Add("barn")

        ' Displays the values of the ArrayList.
        Console.WriteLine("The ArrayList contains the following values:")
        PrintIndexAndValues(myAL)

        ' Search for the first occurrence of the duplicated value.
        Dim myString As [String] = "the"
        Dim myIndex As Integer = myAL.IndexOf(myString)
        Console.WriteLine("The first occurrence of ""{0}"" is at index {1}.", myString, myIndex)

        ' Search for the first occurrence of the duplicated value in the last section of the ArrayList.
        myIndex = myAL.IndexOf(myString, 4)
        Console.WriteLine("The first occurrence of ""{0}"" between index 4 and the end is at index {1}.", myString, myIndex)

        ' Search for the first occurrence of the duplicated value in a section of the ArrayList.
        myIndex = myAL.IndexOf(myString, 6, 6)
        Console.WriteLine("The first occurrence of ""{0}"" between index 6 and index 11 is at index {1}.", myString, myIndex)

        ' Search for the first occurrence of the duplicated value in a small section at the end of the ArrayList.
        myIndex = myAL.IndexOf(myString, 11)
        Console.WriteLine("The first occurrence of ""{0}"" between index 11 and the end is at index {1}.", myString, myIndex)

    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(ByVal myList As IEnumerable)
        Dim i As Integer
        Dim obj As [Object]
        For Each obj In myList
            Console.WriteLine("   [{0}]:    {1}", i, obj)
            i = i + 1
        Next obj
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The ArrayList contains the following values:
' 	[0]:	the
' 	[1]:	quick
' 	[2]:	brown
' 	[3]:	fox
' 	[4]:	jumps
' 	[5]:	over
' 	[6]:	the
' 	[7]:	lazy
' 	[8]:	dog
' 	[9]:	in
' 	[10]:	the
' 	[11]:	barn
'
' The first occurrence of "the" is at index 0.
' The first occurrence of "the" between index 4 and the end is at index 6.
' The first occurrence of "the" between index 6 and index 11 is at index 6.
' The first occurrence of "the" between index 11 and the end is at index -1.
'

using System;
using System.Collections;
public class SamplesArrayList
{

    public static void Main()
    {

        // Creates and initializes a new ArrayList with three elements of the same value.
        ArrayList myAL = new ArrayList();
        myAL.Add( "the" );
        myAL.Add( "quick" );
        myAL.Add( "brown" );
        myAL.Add( "fox" );
        myAL.Add( "jumps" );
        myAL.Add( "over" );
        myAL.Add( "the" );
        myAL.Add( "lazy" );
        myAL.Add( "dog" );
        myAL.Add( "in" );
        myAL.Add( "the" );
        myAL.Add( "barn" );

        // Displays the values of the ArrayList.
        Console.WriteLine( "The ArrayList contains the following values:" );
        PrintIndexAndValues( myAL );

        // Search for the first occurrence of the duplicated value.
        String myString = "the";
        int myIndex = myAL.IndexOf( myString );
        Console.WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

        // Search for the first occurrence of the duplicated value in the last section of the ArrayList.
        myIndex = myAL.IndexOf( myString, 4 );
        Console.WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

        // Search for the first occurrence of the duplicated value in a section of the ArrayList.
        myIndex = myAL.IndexOf( myString, 6, 6 );
        Console.WriteLine( "The first occurrence of \"{0}\" between index 6 and index 11 is at index {1}.", myString, myIndex );

        // Search for the first occurrence of the duplicated value in a small section at the end of the ArrayList.
        myIndex = myAL.IndexOf( myString, 11 );
        Console.WriteLine( "The first occurrence of \"{0}\" between index 11 and the end is at index {1}.", myString, myIndex );
    }

    public static void PrintIndexAndValues(IEnumerable myList)
    {
        int i = 0;
        foreach (Object obj in myList)
            Console.WriteLine("   [{0}]:    {1}", i++, obj);
        Console.WriteLine();
    }

}
/*
This code produces output similar to the following:

The ArrayList contains the following values:
   [0]:    the
   [1]:    quick
   [2]:    brown
   [3]:    fox
   [4]:    jumps
   [5]:    over
   [6]:    the
   [7]:    lazy
   [8]:    dog
   [9]:    in
   [10]:    the
   [11]:    barn

The first occurrence of "the" is at index 0.
The first occurrence of "the" between index 4 and the end is at index 6.
The first occurrence of "the" between index 6 and index 11 is at index 6.
The first occurrence of "the" between index 11 and the end is at index -1.
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList with three elements of the same value.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "the" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );
   myAL->Add( "in" );
   myAL->Add( "the" );
   myAL->Add( "barn" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList contains the following values:" );
   PrintIndexAndValues( myAL );

   // Search for the first occurrence of the duplicated value.
   String^ myString = "the";
   int myIndex = myAL->IndexOf( myString );
   Console::WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Search for the first occurrence of the duplicated value in the last section of the ArrayList.
   myIndex = myAL->IndexOf( myString, 4 );
   Console::WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

   // Search for the first occurrence of the duplicated value in a section of the ArrayList.
   myIndex = myAL->IndexOf( myString, 6, 6 );
   Console::WriteLine( "The first occurrence of \"{0}\" between index 6 and index 11 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "   [{0}]:    {1}", i++, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn

 The first occurrence of "the" is at index 0.
 The first occurrence of "the" between index 4 and the end is at index 6.
 The first occurrence of "the" between index 6 and index 11 is at index 6.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
IndexOf 重载
System.Collections 命名空间
LastIndexOf
Contains

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.Insert 方法

ArrayList
.
.
::
.
Insert 方法
ArrayList 类

将元素插入 ArrayList 的指定索引处。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Insert ( _
    index As Integer, _
    value As Object _
)
public virtual void Insert(
    int index,
    Object value
)
public:
virtual void Insert(
    int index,
    Object^ value
)
abstract Insert :
        index:int *
        value:Object -> unit
override Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
从零开始的索引，应在该位置插入 value。
value
类型： System Object
要插入的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要插入的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 大于 Count。
NotSupportedException | ArrayList 是只读的。 - 或 - ArrayList 具有固定大小。

ArrayList 接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

如果 Count 已经等于 Capacity，则会通过自动重新分配内部数组增加 ArrayList 的容量，并在添加新元素之前将现有元素复制到新数组中。

如果 index 等于 Count，则 value 将被添加到 ArrayList 的末尾。

在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何向 ArrayList 中插入元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList using Insert instead of Add.
        Dim myAL As New ArrayList()
        myAL.Insert(0, "The")
        myAL.Insert(1, "fox")
        myAL.Insert(2, "jumps")
        myAL.Insert(3, "over")
        myAL.Insert(4, "the")
        myAL.Insert(5, "dog")

        ' Creates and initializes a new Queue.
        Dim myQueue As New Queue()
        myQueue.Enqueue("quick")
        myQueue.Enqueue("brown")

        ' Displays the ArrayList and the Queue.
        Console.WriteLine("The ArrayList initially contains the following:")
        PrintValues(myAL)
        Console.WriteLine("The Queue initially contains the following:")
        PrintValues(myQueue)

        ' Copies the Queue elements to the ArrayList at index 1.
        myAL.InsertRange(1, myQueue)

        ' Displays the ArrayList.
        Console.WriteLine("After adding the Queue, the ArrayList now contains:")
        PrintValues(myAL)

        ' Search for "dog" and add "lazy" before it.
        myAL.Insert(myAL.IndexOf("dog"), "lazy")

        ' Displays the ArrayList.
        Console.WriteLine("After adding ""lazy"", the ArrayList now contains:")
        PrintValues(myAL)

        ' Add "!!!" at the end.
        myAL.Insert(myAL.Count, "!!!")

        ' Displays the ArrayList.
        Console.WriteLine("After adding ""!!!"", the ArrayList now contains:")
        PrintValues(myAL)

        ' Inserting an element beyond Count throws an exception.
        Try
            myAL.Insert(myAL.Count + 1, "anystring")
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The ArrayList initially contains the following:
'     The    fox    jumps    over    the    dog
' The Queue initially contains the following:
'     quick    brown
' After adding the Queue, the ArrayList now contains:
'     The    quick    brown    fox    jumps    over    the    dog
' After adding "lazy", the ArrayList now contains:
'     The    quick    brown    fox    jumps    over    the    lazy    dog
' After adding "!!!", the ArrayList now contains:
'     The    quick    brown    fox    jumps    over    the    lazy    dog    !!!
' Exception: System.ArgumentOutOfRangeException: Insertion index was out of range.  Must be non-negative and less than or equal to size.
' Parameter name: index
'    at System.Collections.ArrayList.Insert(Int32 index, Object value)
'    at SamplesArrayList.Main()

 using System;
 using System.Collections;
 public class SamplesArrayList  {

    public static void Main()  {

       // Creates and initializes a new ArrayList using Insert instead of Add.
       ArrayList myAL = new ArrayList();
       myAL.Insert( 0, "The" );
       myAL.Insert( 1, "fox" );
       myAL.Insert( 2, "jumps" );
       myAL.Insert( 3, "over" );
       myAL.Insert( 4, "the" );
       myAL.Insert( 5, "dog" );

       // Creates and initializes a new Queue.
       Queue myQueue = new Queue();
       myQueue.Enqueue( "quick" );
       myQueue.Enqueue( "brown" );

       // Displays the ArrayList and the Queue.
       Console.WriteLine( "The ArrayList initially contains the following:" );
       PrintValues( myAL );
       Console.WriteLine( "The Queue initially contains the following:" );
       PrintValues( myQueue );

       // Copies the Queue elements to the ArrayList at index 1.
       myAL.InsertRange( 1, myQueue );

       // Displays the ArrayList.
       Console.WriteLine( "After adding the Queue, the ArrayList now contains:" );
       PrintValues( myAL );

       // Search for "dog" and add "lazy" before it.
       myAL.Insert( myAL.IndexOf( "dog" ), "lazy" );

       // Displays the ArrayList.
       Console.WriteLine( "After adding \"lazy\", the ArrayList now contains:" );
       PrintValues( myAL );

       // Add "!!!" at the end.
       myAL.Insert( myAL.Count, "!!!" );

       // Displays the ArrayList.
       Console.WriteLine( "After adding \"!!!\", the ArrayList now contains:" );
       PrintValues( myAL );

       // Inserting an element beyond Count throws an exception.
       try  {
          myAL.Insert( myAL.Count+1, "anystring" );
       } catch ( Exception myException )  {
          Console.WriteLine("Exception: " + myException.ToString());
       }
    }

    public static void PrintValues( IEnumerable myList )  {
       foreach ( Object obj in myList )
          Console.Write( "   {0}", obj );
       Console.WriteLine();
    }

 }
 /*
 This code produces the following output.

 The ArrayList initially contains the following:
    The   fox   jumps   over   the   dog
 The Queue initially contains the following:
    quick   brown
 After adding the Queue, the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   dog
 After adding "lazy", the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   lazy   dog
 After adding "!!!", the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   lazy   dog   !!!
 Exception: System.ArgumentOutOfRangeException: Insertion index was out of range.  Must be non-negative and less than or equal to size.
 Parameter name: index
    at System.Collections.ArrayList.Insert(Int32 index, Object value)
    at SamplesArrayList.Main()
 */

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList using Insert instead of Add.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Insert( 0, "The" );
   myAL->Insert( 1, "fox" );
   myAL->Insert( 2, "jumps" );
   myAL->Insert( 3, "over" );
   myAL->Insert( 4, "the" );
   myAL->Insert( 5, "dog" );

   // Creates and initializes a new Queue.
   Queue^ myQueue = gcnew Queue;
   myQueue->Enqueue( "quick" );
   myQueue->Enqueue( "brown" );

   // Displays the ArrayList and the Queue.
   Console::WriteLine( "The ArrayList initially contains the following:" );
   PrintValues( myAL );
   Console::WriteLine( "The Queue initially contains the following:" );
   PrintValues( myQueue );

   // Copies the Queue elements to the ArrayList at index 1.
   myAL->InsertRange( 1, myQueue );

   // Displays the ArrayList.
   Console::WriteLine( "After adding the Queue, the ArrayList now contains:" );
   PrintValues( myAL );

   // Search for "dog" and add "lazy" before it.
   myAL->Insert( myAL->IndexOf( "dog" ), "lazy" );

   // Displays the ArrayList.
   Console::WriteLine( "After adding \"lazy\", the ArrayList now contains:" );
   PrintValues( myAL );

   // Add "!!!" at the end.
   myAL->Insert( myAL->Count, "!!!" );

   // Displays the ArrayList.
   Console::WriteLine( "After adding \"!!!\", the ArrayList now contains:" );
   PrintValues( myAL );

   // Inserting an element beyond Count throws an exception.
   try
   {
      myAL->Insert( myAL->Count + 1, "anystring" );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList initially contains the following:
    The   fox   jumps   over   the   dog
 The Queue initially contains the following:
    quick   brown
 After adding the Queue, the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   dog
 After adding "lazy", the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   lazy   dog
 After adding "!!!", the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   lazy   dog   !!!
 Exception: System.ArgumentOutOfRangeException: Insertion index was out of range.  Must be non-negative and less than or equal to size.
 Parameter name: index
    at System.Collections.ArrayList.Insert(Int32 index, Object value)
    at SamplesArrayList.Main()
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
InsertRange
Add
Remove


ArrayList ..::.InsertRange 方法

ArrayList
.
.
::
.
InsertRange 方法
ArrayList 类

将集合中的某个元素插入 ArrayList 的指定索引处。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub InsertRange ( _
    index As Integer, _
    c As ICollection _
)
public virtual void InsertRange(
    int index,
    ICollection c
)
public:
virtual void InsertRange(
    int index,
    ICollection^ c
)
abstract InsertRange :
        index:int *
        c:ICollection -> unit
override InsertRange :
        index:int *
        c:ICollection -> unit

参数

index
类型： System Int32
应在此处插入新元素的从零开始的索引。
c
类型： System.Collections ICollection
ICollection，应将其元素插入到 ArrayList 中。集合本身不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但它可以包含为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的元素。 ICollection，应将其元素插入到 ArrayList 中。集合本身不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但它可以包含为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的元素。
异常 | 条件
ArgumentNullException | c 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零。 - 或 - index 大于 Count。
NotSupportedException | ArrayList 是只读的。 - 或 - ArrayList 具有固定大小。

ArrayList 接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

如果新的 Count（当前 Count 加上集合的大小）大于 Capacity，则会通过自动重新分配内部数组增大 ArrayList 的容量以容纳新元素，并在添加新元素之前将现有元素复制到新数组中。

如果 index 等于 Count，则将元素添加到 ArrayList 的末尾。

ICollection 中元素的顺序保存在 ArrayList 中。

在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

此方法的运算复杂度为 O(n + m)，其中 n 是要添加的元素数，m 是 Count。

下面的代码示例演示如何向 ArrayList 中插入元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList using Insert instead of Add.
        Dim myAL As New ArrayList()
        myAL.Insert(0, "The")
        myAL.Insert(1, "fox")
        myAL.Insert(2, "jumps")
        myAL.Insert(3, "over")
        myAL.Insert(4, "the")
        myAL.Insert(5, "dog")

        ' Creates and initializes a new Queue.
        Dim myQueue As New Queue()
        myQueue.Enqueue("quick")
        myQueue.Enqueue("brown")

        ' Displays the ArrayList and the Queue.
        Console.WriteLine("The ArrayList initially contains the following:")
        PrintValues(myAL)
        Console.WriteLine("The Queue initially contains the following:")
        PrintValues(myQueue)

        ' Copies the Queue elements to the ArrayList at index 1.
        myAL.InsertRange(1, myQueue)

        ' Displays the ArrayList.
        Console.WriteLine("After adding the Queue, the ArrayList now contains:")
        PrintValues(myAL)

        ' Search for "dog" and add "lazy" before it.
        myAL.Insert(myAL.IndexOf("dog"), "lazy")

        ' Displays the ArrayList.
        Console.WriteLine("After adding ""lazy"", the ArrayList now contains:")
        PrintValues(myAL)

        ' Add "!!!" at the end.
        myAL.Insert(myAL.Count, "!!!")

        ' Displays the ArrayList.
        Console.WriteLine("After adding ""!!!"", the ArrayList now contains:")
        PrintValues(myAL)

        ' Inserting an element beyond Count throws an exception.
        Try
            myAL.Insert(myAL.Count + 1, "anystring")
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The ArrayList initially contains the following:
'     The    fox    jumps    over    the    dog
' The Queue initially contains the following:
'     quick    brown
' After adding the Queue, the ArrayList now contains:
'     The    quick    brown    fox    jumps    over    the    dog
' After adding "lazy", the ArrayList now contains:
'     The    quick    brown    fox    jumps    over    the    lazy    dog
' After adding "!!!", the ArrayList now contains:
'     The    quick    brown    fox    jumps    over    the    lazy    dog    !!!
' Exception: System.ArgumentOutOfRangeException: Insertion index was out of range.  Must be non-negative and less than or equal to size.
' Parameter name: index
'    at System.Collections.ArrayList.Insert(Int32 index, Object value)
'    at SamplesArrayList.Main()

 using System;
 using System.Collections;
 public class SamplesArrayList  {

    public static void Main()  {

       // Creates and initializes a new ArrayList using Insert instead of Add.
       ArrayList myAL = new ArrayList();
       myAL.Insert( 0, "The" );
       myAL.Insert( 1, "fox" );
       myAL.Insert( 2, "jumps" );
       myAL.Insert( 3, "over" );
       myAL.Insert( 4, "the" );
       myAL.Insert( 5, "dog" );

       // Creates and initializes a new Queue.
       Queue myQueue = new Queue();
       myQueue.Enqueue( "quick" );
       myQueue.Enqueue( "brown" );

       // Displays the ArrayList and the Queue.
       Console.WriteLine( "The ArrayList initially contains the following:" );
       PrintValues( myAL );
       Console.WriteLine( "The Queue initially contains the following:" );
       PrintValues( myQueue );

       // Copies the Queue elements to the ArrayList at index 1.
       myAL.InsertRange( 1, myQueue );

       // Displays the ArrayList.
       Console.WriteLine( "After adding the Queue, the ArrayList now contains:" );
       PrintValues( myAL );

       // Search for "dog" and add "lazy" before it.
       myAL.Insert( myAL.IndexOf( "dog" ), "lazy" );

       // Displays the ArrayList.
       Console.WriteLine( "After adding \"lazy\", the ArrayList now contains:" );
       PrintValues( myAL );

       // Add "!!!" at the end.
       myAL.Insert( myAL.Count, "!!!" );

       // Displays the ArrayList.
       Console.WriteLine( "After adding \"!!!\", the ArrayList now contains:" );
       PrintValues( myAL );

       // Inserting an element beyond Count throws an exception.
       try  {
          myAL.Insert( myAL.Count+1, "anystring" );
       } catch ( Exception myException )  {
          Console.WriteLine("Exception: " + myException.ToString());
       }
    }

    public static void PrintValues( IEnumerable myList )  {
       foreach ( Object obj in myList )
          Console.Write( "   {0}", obj );
       Console.WriteLine();
    }

 }
 /*
 This code produces the following output.

 The ArrayList initially contains the following:
    The   fox   jumps   over   the   dog
 The Queue initially contains the following:
    quick   brown
 After adding the Queue, the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   dog
 After adding "lazy", the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   lazy   dog
 After adding "!!!", the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   lazy   dog   !!!
 Exception: System.ArgumentOutOfRangeException: Insertion index was out of range.  Must be non-negative and less than or equal to size.
 Parameter name: index
    at System.Collections.ArrayList.Insert(Int32 index, Object value)
    at SamplesArrayList.Main()
 */

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList using Insert instead of Add.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Insert( 0, "The" );
   myAL->Insert( 1, "fox" );
   myAL->Insert( 2, "jumps" );
   myAL->Insert( 3, "over" );
   myAL->Insert( 4, "the" );
   myAL->Insert( 5, "dog" );

   // Creates and initializes a new Queue.
   Queue^ myQueue = gcnew Queue;
   myQueue->Enqueue( "quick" );
   myQueue->Enqueue( "brown" );

   // Displays the ArrayList and the Queue.
   Console::WriteLine( "The ArrayList initially contains the following:" );
   PrintValues( myAL );
   Console::WriteLine( "The Queue initially contains the following:" );
   PrintValues( myQueue );

   // Copies the Queue elements to the ArrayList at index 1.
   myAL->InsertRange( 1, myQueue );

   // Displays the ArrayList.
   Console::WriteLine( "After adding the Queue, the ArrayList now contains:" );
   PrintValues( myAL );

   // Search for "dog" and add "lazy" before it.
   myAL->Insert( myAL->IndexOf( "dog" ), "lazy" );

   // Displays the ArrayList.
   Console::WriteLine( "After adding \"lazy\", the ArrayList now contains:" );
   PrintValues( myAL );

   // Add "!!!" at the end.
   myAL->Insert( myAL->Count, "!!!" );

   // Displays the ArrayList.
   Console::WriteLine( "After adding \"!!!\", the ArrayList now contains:" );
   PrintValues( myAL );

   // Inserting an element beyond Count throws an exception.
   try
   {
      myAL->Insert( myAL->Count + 1, "anystring" );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList initially contains the following:
    The   fox   jumps   over   the   dog
 The Queue initially contains the following:
    quick   brown
 After adding the Queue, the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   dog
 After adding "lazy", the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   lazy   dog
 After adding "!!!", the ArrayList now contains:
    The   quick   brown   fox   jumps   over   the   lazy   dog   !!!
 Exception: System.ArgumentOutOfRangeException: Insertion index was out of range.  Must be non-negative and less than or equal to size.
 Parameter name: index
    at System.Collections.ArrayList.Insert(Int32 index, Object value)
    at SamplesArrayList.Main()
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
Insert
AddRange
SetRange
GetRange
RemoveRange


ArrayList ..::.LastIndexOf 方法

ArrayList
.
.
::
.
LastIndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

返回 ArrayList 或它的一部分中某个值的最后一个匹配项的从零开始的索引。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.LastIndexOf 方法 (Object)

ArrayList
.
.
::
.
LastIndexOf 方法 (Object)
ArrayList 类

搜索指定的 Object，并返回整个 ArrayList 中最后一个匹配项的从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function LastIndexOf ( _
    value As Object _
) As Integer
public virtual int LastIndexOf(
    Object value
)
public:
virtual int LastIndexOf(
    Object^ value
)
abstract LastIndexOf :
        value:Object -> int
override LastIndexOf :
        value:Object -> int

参数

value
类型： System Object
要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Int32
如果在整个 ArrayList 中找到 value 的最后一个匹配项，则为该项的从零开始的索引；否则为 -1。

在 ArrayList 中从最后一个元素向后开始搜索，并在第一个元素停止搜索。

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 是 Count。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例演示如何确定指定元素的最后一个匹配项的索引。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

   Public Shared Sub Main()

      ' Creates and initializes a new ArrayList with three elements of the same value.
      Dim myAL As New ArrayList()
      myAL.Add("the")
      myAL.Add("quick")
      myAL.Add("brown")
      myAL.Add("fox")
      myAL.Add("jumps")
      myAL.Add("over")
      myAL.Add("the")
      myAL.Add("lazy")
      myAL.Add("dog")
      myAL.Add("in")
      myAL.Add("the")
      myAL.Add("barn")

      ' Displays the values of the ArrayList.
      Console.WriteLine("The ArrayList contains the following values:")
      PrintIndexAndValues(myAL)

      ' Searches for the last occurrence of the duplicated value.
      Dim myString As [String] = "the"
      Dim myIndex As Integer = myAL.LastIndexOf(myString)
      Console.WriteLine("The last occurrence of ""{0}"" is at index {1}.", myString, myIndex)

      ' Searches for the last occurrence of the duplicated value in the first section of the ArrayList.
      myIndex = myAL.LastIndexOf(myString, 8)
      Console.WriteLine("The last occurrence of ""{0}"" between the start and index 8 is at index {1}.", myString, myIndex)

      ' Searches for the last occurrence of the duplicated value in a section of the ArrayList.  Note that the start index is greater than the end index because the search is done backward.
      myIndex = myAL.LastIndexOf(myString, 10, 6)
      Console.WriteLine("The last occurrence of ""{0}"" between index 10 and index 5 is at index {1}.", myString, myIndex)
   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myList As IEnumerable)
      Dim i as Integer
      Dim obj As [Object]
      For Each obj In  myList
         Console.WriteLine("   [{0}]:    {1}", i, obj)
         i = i + 1
      Next obj
      Console.WriteLine()
   End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The ArrayList contains the following values:
'    [0]:    the
'    [1]:    quick
'    [2]:    brown
'    [3]:    fox
'    [4]:    jumps
'    [5]:    over
'    [6]:    the
'    [7]:    lazy
'    [8]:    dog
'    [9]:    in
'    [10]:    the
'    [11]:    barn
'
' The last occurrence of "the" is at index 10.
' The last occurrence of "the" between the start and index 8 is at index 6.
' The last occurrence of "the" between index 10 and index 5 is at index 10.

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList with three elements of the same value.
      ArrayList myAL = new ArrayList();
      myAL.Add( "the" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );
      myAL.Add( "in" );
      myAL.Add( "the" );
      myAL.Add( "barn" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList contains the following values:" );
      PrintIndexAndValues( myAL );

      // Searches for the last occurrence of the duplicated value.
      String myString = "the";
      int myIndex = myAL.LastIndexOf( myString );
      Console.WriteLine( "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in the first section of the ArrayList.
      myIndex = myAL.LastIndexOf( myString, 8 );
      Console.WriteLine( "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in a section of the ArrayList.  Note that the start index is greater than the end index because the search is done backward.
      myIndex = myAL.LastIndexOf( myString, 10, 6 );
      Console.WriteLine( "The last occurrence of \"{0}\" between index 10 and index 5 is at index {1}.", myString, myIndex );
   }

   public static void PrintIndexAndValues( IEnumerable myList )  {
      int i = 0;
      foreach ( Object obj in myList )
         Console.WriteLine( "   [{0}]:    {1}", i++, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The ArrayList contains the following values:
   [0]:    the
   [1]:    quick
   [2]:    brown
   [3]:    fox
   [4]:    jumps
   [5]:    over
   [6]:    the
   [7]:    lazy
   [8]:    dog
   [9]:    in
   [10]:    the
   [11]:    barn

The last occurrence of "the" is at index 10.
The last occurrence of "the" between the start and index 8 is at index 6.
The last occurrence of "the" between index 10 and index 5 is at index 10.
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList with three elements of the same value.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "the" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );
   myAL->Add( "in" );
   myAL->Add( "the" );
   myAL->Add( "barn" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList contains the following values:" );
   PrintIndexAndValues( myAL );

   // Searches for the last occurrence of the duplicated value.
   String^ myString = "the";
   int myIndex = myAL->LastIndexOf( myString );
   Console::WriteLine( "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in the first section of the ArrayList.
   myIndex = myAL->LastIndexOf( myString, 8 );
   Console::WriteLine( "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in a section of the ArrayList.  Note that the start index is greater than the end index because the search is done backward.
   myIndex = myAL->LastIndexOf( myString, 10, 6 );
   Console::WriteLine( "The last occurrence of \"{0}\" between index 10 and index 5 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "   [{0}]:    {1}", i++, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn

 The last occurrence of "the" is at index 10.
 The last occurrence of "the" between the start and index 8 is at index 6.
 The last occurrence of "the" between index 10 and index 5 is at index 10.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
LastIndexOf 重载
System.Collections 命名空间
IndexOf
Contains

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.LastIndexOf 方法 (Object, Int32)

ArrayList
.
.
::
.
LastIndexOf 方法 (Object, Int32)
ArrayList 类

搜索指定的 Object，并返回 ArrayList 中从第一个元素到指定索引的元素范围内最后一个匹配项的从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function LastIndexOf ( _
    value As Object, _
    startIndex As Integer _
) As Integer
public virtual int LastIndexOf(
    Object value,
    int startIndex
)
public:
virtual int LastIndexOf(
    Object^ value,
    int startIndex
)
abstract LastIndexOf :
        value:Object *
        startIndex:int -> int
override LastIndexOf :
        value:Object *
        startIndex:int -> int

参数

value
类型： System Object
要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
startIndex
类型： System Int32
向后搜索的从零开始的起始索引。

返回值

类型： System Int32
如果在 ArrayList 中从第一个元素到 startIndex 的元素范围内找到 value 的最后一个匹配项，则为该项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentOutOfRangeException | startIndex 不在 ArrayList 的有效索引范围内。

在 ArrayList 中从 startIndex 开始向后搜索，并在第一个元素停止搜索。

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 为从 ArrayList 开头到 startIndex 的元素数。

此方法通过调用 Object..::.Equals 确定相等性。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例演示如何确定指定元素的最后一个匹配项的索引。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

   Public Shared Sub Main()

      ' Creates and initializes a new ArrayList with three elements of the same value.
      Dim myAL As New ArrayList()
      myAL.Add("the")
      myAL.Add("quick")
      myAL.Add("brown")
      myAL.Add("fox")
      myAL.Add("jumps")
      myAL.Add("over")
      myAL.Add("the")
      myAL.Add("lazy")
      myAL.Add("dog")
      myAL.Add("in")
      myAL.Add("the")
      myAL.Add("barn")

      ' Displays the values of the ArrayList.
      Console.WriteLine("The ArrayList contains the following values:")
      PrintIndexAndValues(myAL)

      ' Searches for the last occurrence of the duplicated value.
      Dim myString As [String] = "the"
      Dim myIndex As Integer = myAL.LastIndexOf(myString)
      Console.WriteLine("The last occurrence of ""{0}"" is at index {1}.", myString, myIndex)

      ' Searches for the last occurrence of the duplicated value in the first section of the ArrayList.
      myIndex = myAL.LastIndexOf(myString, 8)
      Console.WriteLine("The last occurrence of ""{0}"" between the start and index 8 is at index {1}.", myString, myIndex)

      ' Searches for the last occurrence of the duplicated value in a section of the ArrayList.  Note that the start index is greater than the end index because the search is done backward.
      myIndex = myAL.LastIndexOf(myString, 10, 6)
      Console.WriteLine("The last occurrence of ""{0}"" between index 10 and index 5 is at index {1}.", myString, myIndex)
   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myList As IEnumerable)
      Dim i as Integer
      Dim obj As [Object]
      For Each obj In  myList
         Console.WriteLine("   [{0}]:    {1}", i, obj)
         i = i + 1
      Next obj
      Console.WriteLine()
   End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The ArrayList contains the following values:
'    [0]:    the
'    [1]:    quick
'    [2]:    brown
'    [3]:    fox
'    [4]:    jumps
'    [5]:    over
'    [6]:    the
'    [7]:    lazy
'    [8]:    dog
'    [9]:    in
'    [10]:    the
'    [11]:    barn
'
' The last occurrence of "the" is at index 10.
' The last occurrence of "the" between the start and index 8 is at index 6.
' The last occurrence of "the" between index 10 and index 5 is at index 10.

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList with three elements of the same value.
      ArrayList myAL = new ArrayList();
      myAL.Add( "the" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );
      myAL.Add( "in" );
      myAL.Add( "the" );
      myAL.Add( "barn" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList contains the following values:" );
      PrintIndexAndValues( myAL );

      // Searches for the last occurrence of the duplicated value.
      String myString = "the";
      int myIndex = myAL.LastIndexOf( myString );
      Console.WriteLine( "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in the first section of the ArrayList.
      myIndex = myAL.LastIndexOf( myString, 8 );
      Console.WriteLine( "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in a section of the ArrayList.  Note that the start index is greater than the end index because the search is done backward.
      myIndex = myAL.LastIndexOf( myString, 10, 6 );
      Console.WriteLine( "The last occurrence of \"{0}\" between index 10 and index 5 is at index {1}.", myString, myIndex );
   }

   public static void PrintIndexAndValues( IEnumerable myList )  {
      int i = 0;
      foreach ( Object obj in myList )
         Console.WriteLine( "   [{0}]:    {1}", i++, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The ArrayList contains the following values:
   [0]:    the
   [1]:    quick
   [2]:    brown
   [3]:    fox
   [4]:    jumps
   [5]:    over
   [6]:    the
   [7]:    lazy
   [8]:    dog
   [9]:    in
   [10]:    the
   [11]:    barn

The last occurrence of "the" is at index 10.
The last occurrence of "the" between the start and index 8 is at index 6.
The last occurrence of "the" between index 10 and index 5 is at index 10.
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList with three elements of the same value.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "the" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );
   myAL->Add( "in" );
   myAL->Add( "the" );
   myAL->Add( "barn" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList contains the following values:" );
   PrintIndexAndValues( myAL );

   // Searches for the last occurrence of the duplicated value.
   String^ myString = "the";
   int myIndex = myAL->LastIndexOf( myString );
   Console::WriteLine( "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in the first section of the ArrayList.
   myIndex = myAL->LastIndexOf( myString, 8 );
   Console::WriteLine( "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in a section of the ArrayList.  Note that the start index is greater than the end index because the search is done backward.
   myIndex = myAL->LastIndexOf( myString, 10, 6 );
   Console::WriteLine( "The last occurrence of \"{0}\" between index 10 and index 5 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "   [{0}]:    {1}", i++, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn

 The last occurrence of "the" is at index 10.
 The last occurrence of "the" between the start and index 8 is at index 6.
 The last occurrence of "the" between index 10 and index 5 is at index 10.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
LastIndexOf 重载
System.Collections 命名空间
IndexOf
Contains

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.LastIndexOf 方法 (Object, Int32, Int32)

ArrayList
.
.
::
.
LastIndexOf 方法 (Object, Int32, Int32)
ArrayList 类

搜索指定的 Object，并返回 ArrayList 中包含指定的元素数并在指定索引处结束的元素范围内最后一个匹配项的从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function LastIndexOf ( _
    value As Object, _
    startIndex As Integer, _
    count As Integer _
) As Integer
public virtual int LastIndexOf(
    Object value,
    int startIndex,
    int count
)
public:
virtual int LastIndexOf(
    Object^ value,
    int startIndex,
    int count
)
abstract LastIndexOf :
        value:Object *
        startIndex:int *
        count:int -> int
override LastIndexOf :
        value:Object *
        startIndex:int *
        count:int -> int

参数

value
类型： System Object
要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 ArrayList 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
startIndex
类型： System Int32
向后搜索的从零开始的起始索引。
count
类型： System Int32
要搜索的部分中的元素数。

返回值

类型： System Int32
如果在 ArrayList 中包含 count 个元素、在 startIndex 处结尾的元素范围内找到 value 的最后一个匹配项，则为该项的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentOutOfRangeException | startIndex 不在 ArrayList 的有效索引范围内。 - 或 - count 小于零。 - 或 - startIndex 和 count 未指定 ArrayList 中的有效部分。

如果 count 大于 0，则在 ArrayList 中向后搜索，从 startIndex 处开始，到索引为 startIndex 减 count 再加上 1 的位置结束。

此方法执行线性搜索；因此，此方法为 O(n) 操作，其中 n 是 count。

此方法通过调用 Object..::.Equals 确定相等性。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例演示如何确定指定元素的最后一个匹配项的索引。请注意，LastIndexOf 是一个向后搜索，因此 count 必须小于或等于 startIndex + 1。 下面的代码示例演示如何确定指定元素的最后一个匹配项的索引。请注意，LastIndexOf 是一个向后搜索，因此 count 必须小于或等于 startIndex + 1。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

   Public Shared Sub Main()

      ' Creates and initializes a new ArrayList with three elements of the same value.
      Dim myAL As New ArrayList()
      myAL.Add("the")
      myAL.Add("quick")
      myAL.Add("brown")
      myAL.Add("fox")
      myAL.Add("jumps")
      myAL.Add("over")
      myAL.Add("the")
      myAL.Add("lazy")
      myAL.Add("dog")
      myAL.Add("in")
      myAL.Add("the")
      myAL.Add("barn")

      ' Displays the values of the ArrayList.
      Console.WriteLine("The ArrayList contains the following values:")
      PrintIndexAndValues(myAL)

      ' Searches for the last occurrence of the duplicated value.
      Dim myString As [String] = "the"
      Dim myIndex As Integer = myAL.LastIndexOf(myString)
      Console.WriteLine("The last occurrence of ""{0}"" is at index {1}.", myString, myIndex)

      ' Searches for the last occurrence of the duplicated value in the first section of the ArrayList.
      myIndex = myAL.LastIndexOf(myString, 8)
      Console.WriteLine("The last occurrence of ""{0}"" between the start and index 8 is at index {1}.", myString, myIndex)

      ' Searches for the last occurrence of the duplicated value in a section of the ArrayList.  Note that the start index is greater than the end index because the search is done backward.
      myIndex = myAL.LastIndexOf(myString, 10, 6)
      Console.WriteLine("The last occurrence of ""{0}"" between index 10 and index 5 is at index {1}.", myString, myIndex)
   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myList As IEnumerable)
      Dim i as Integer
      Dim obj As [Object]
      For Each obj In  myList
         Console.WriteLine("   [{0}]:    {1}", i, obj)
         i = i + 1
      Next obj
      Console.WriteLine()
   End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The ArrayList contains the following values:
'    [0]:    the
'    [1]:    quick
'    [2]:    brown
'    [3]:    fox
'    [4]:    jumps
'    [5]:    over
'    [6]:    the
'    [7]:    lazy
'    [8]:    dog
'    [9]:    in
'    [10]:    the
'    [11]:    barn
'
' The last occurrence of "the" is at index 10.
' The last occurrence of "the" between the start and index 8 is at index 6.
' The last occurrence of "the" between index 10 and index 5 is at index 10.

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList with three elements of the same value.
      ArrayList myAL = new ArrayList();
      myAL.Add( "the" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );
      myAL.Add( "in" );
      myAL.Add( "the" );
      myAL.Add( "barn" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList contains the following values:" );
      PrintIndexAndValues( myAL );

      // Searches for the last occurrence of the duplicated value.
      String myString = "the";
      int myIndex = myAL.LastIndexOf( myString );
      Console.WriteLine( "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in the first section of the ArrayList.
      myIndex = myAL.LastIndexOf( myString, 8 );
      Console.WriteLine( "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

      // Searches for the last occurrence of the duplicated value in a section of the ArrayList.  Note that the start index is greater than the end index because the search is done backward.
      myIndex = myAL.LastIndexOf( myString, 10, 6 );
      Console.WriteLine( "The last occurrence of \"{0}\" between index 10 and index 5 is at index {1}.", myString, myIndex );
   }

   public static void PrintIndexAndValues( IEnumerable myList )  {
      int i = 0;
      foreach ( Object obj in myList )
         Console.WriteLine( "   [{0}]:    {1}", i++, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The ArrayList contains the following values:
   [0]:    the
   [1]:    quick
   [2]:    brown
   [3]:    fox
   [4]:    jumps
   [5]:    over
   [6]:    the
   [7]:    lazy
   [8]:    dog
   [9]:    in
   [10]:    the
   [11]:    barn

The last occurrence of "the" is at index 10.
The last occurrence of "the" between the start and index 8 is at index 6.
The last occurrence of "the" between index 10 and index 5 is at index 10.
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList with three elements of the same value.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "the" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );
   myAL->Add( "in" );
   myAL->Add( "the" );
   myAL->Add( "barn" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList contains the following values:" );
   PrintIndexAndValues( myAL );

   // Searches for the last occurrence of the duplicated value.
   String^ myString = "the";
   int myIndex = myAL->LastIndexOf( myString );
   Console::WriteLine( "The last occurrence of \"{0}\" is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in the first section of the ArrayList.
   myIndex = myAL->LastIndexOf( myString, 8 );
   Console::WriteLine( "The last occurrence of \"{0}\" between the start and index 8 is at index {1}.", myString, myIndex );

   // Searches for the last occurrence of the duplicated value in a section of the ArrayList.  Note that the start index is greater than the end index because the search is done backward.
   myIndex = myAL->LastIndexOf( myString, 10, 6 );
   Console::WriteLine( "The last occurrence of \"{0}\" between index 10 and index 5 is at index {1}.", myString, myIndex );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "   [{0}]:    {1}", i++, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn

 The last occurrence of "the" is at index 10.
 The last occurrence of "the" between the start and index 8 is at index 6.
 The last occurrence of "the" between index 10 and index 5 is at index 10.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
LastIndexOf 重载
System.Collections 命名空间
IndexOf
Contains

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.ReadOnly 方法

ArrayList
.
.
::
.
ReadOnly 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

返回只读的列表包装。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.ReadOnly 方法 (ArrayList)

ArrayList
.
.
::
.
ReadOnly 方法 (ArrayList)
ArrayList 类

返回只读的 ArrayList 包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ReadOnly ( _
    list As ArrayList _
) As ArrayList
public static ArrayList ReadOnly(
    ArrayList list
)
public:
static ArrayList^ ReadOnly(
    ArrayList^ list
)
static member ReadOnly :
        list:ArrayList -> ArrayList

参数

list
类型： System.Collections ArrayList
要包装的 ArrayList。

返回值

类型： System.Collections ArrayList
list 周围的只读 ArrayList 包装。
异常 | 条件
ArgumentNullException | list 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要防止对 list 的任何修改，应该仅通过此包装公开 list。

只读集合就是一个带包装的集合，该包装防止对集合进行修改。如果对基础集合进行了更改，只读集合会反映所做的更改。 只读集合就是一个带包装的集合，该包装防止对集合进行修改。如果对基础集合进行了更改，只读集合会反映所做的更改。

此方法是 O(1) 操作。

下面的代码示例演示如何在 ArrayList 周围创建一个只读包装，以及如何确定 ArrayList 是否为只读。

Imports System
Imports System.Collections

Public Class SamplesArrayList

   Public Shared Sub Main()

      Dim myStr As [String]

      ' Creates and initializes a new ArrayList.
      Dim myAL As New ArrayList()
      myAL.Add("red")
      myAL.Add("orange")
      myAL.Add("yellow")

      ' Creates a read-only copy of the ArrayList.
      Dim myReadOnlyAL As ArrayList = ArrayList.ReadOnly(myAL)

      ' Displays whether the ArrayList is read-only or writable.
      If myAL.IsReadOnly Then
         Console.WriteLine("myAL is read-only.")
      Else
         Console.WriteLine("myAL is writable.")
      End If
      If myReadOnlyAL.IsReadOnly Then
         Console.WriteLine("myReadOnlyAL is read-only.")
      Else
         Console.WriteLine("myReadOnlyAL is writable.")
      End If

      ' Displays the contents of both collections.
      Console.WriteLine()
      Console.WriteLine("Initially,")
      Console.WriteLine("The original ArrayList myAL contains:")
      For Each myStr In  myAL
         Console.WriteLine("   {0}", myStr)
      Next myStr
      Console.WriteLine("The read-only ArrayList myReadOnlyAL contains:")
      For Each myStr In  myReadOnlyAL
         Console.WriteLine("   {0}", myStr)
      Next myStr

      ' Adding an element to a read-only ArrayList throws an exception.
      Console.WriteLine()
      Console.WriteLine("Trying to add a new element to the read-only ArrayList:")
      Try
         myReadOnlyAL.Add("green")
      Catch myException As Exception
         Console.WriteLine(("Exception: " + myException.ToString()))
      End Try

      ' Adding an element to the original ArrayList affects the read-only ArrayList.
      myAL.Add("blue")

      ' Displays the contents of both collections again.
      Console.WriteLine()
      Console.WriteLine("After adding a new element to the original ArrayList,")
      Console.WriteLine("The original ArrayList myAL contains:")
      For Each myStr In  myAL
         Console.WriteLine("   {0}", myStr)
      Next myStr
      Console.WriteLine("The read-only ArrayList myReadOnlyAL contains:")
      For Each myStr In  myReadOnlyAL
         Console.WriteLine("   {0}", myStr)
      Next myStr

   End Sub 'Main

End Class 'SamplesArrayList

'This code produces the following output.
'
'myAL is writable.
'myReadOnlyAL is read-only.
'
'Initially,
'The original ArrayList myAL contains:
'   red
'   orange
'   yellow
'The read-only ArrayList myReadOnlyAL contains:
'   red
'   orange
'   yellow
'
'Trying to add a new element to the read-only ArrayList:
'Exception: System.NotSupportedException: Collection is read-only.
'   at System.Collections.ReadOnlyArrayList.Add(Object obj)
'   at SamplesArrayList.Main()
'
'After adding a new element to the original ArrayList,
'The original ArrayList myAL contains:
'   red
'   orange
'   yellow
'   blue
'The read-only ArrayList myReadOnlyAL contains:
'   red
'   orange
'   yellow
'   blue

 using System;
 using System.Collections;
 public class SamplesArrayList  {

    public static void Main()  {

       // Creates and initializes a new ArrayList.
       ArrayList myAL = new ArrayList();
       myAL.Add( "red" );
       myAL.Add( "orange" );
       myAL.Add( "yellow" );

       // Creates a read-only copy of the ArrayList.
       ArrayList myReadOnlyAL = ArrayList.ReadOnly( myAL );

       // Displays whether the ArrayList is read-only or writable.
       Console.WriteLine( "myAL is {0}.", myAL.IsReadOnly ? "read-only" : "writable" );
       Console.WriteLine( "myReadOnlyAL is {0}.", myReadOnlyAL.IsReadOnly ? "read-only" : "writable" );

       // Displays the contents of both collections.
       Console.WriteLine( "\nInitially," );
       Console.WriteLine( "The original ArrayList myAL contains:" );
       foreach ( String myStr in myAL )
          Console.WriteLine( "   {0}", myStr );
       Console.WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
       foreach ( String myStr in myReadOnlyAL )
          Console.WriteLine( "   {0}", myStr );

       // Adding an element to a read-only ArrayList throws an exception.
       Console.WriteLine( "\nTrying to add a new element to the read-only ArrayList:" );
       try  {
          myReadOnlyAL.Add("green");
       } catch ( Exception myException )  {
          Console.WriteLine("Exception: " + myException.ToString());
       }

       // Adding an element to the original ArrayList affects the read-only ArrayList.
       myAL.Add( "blue" );

       // Displays the contents of both collections again.
       Console.WriteLine( "\nAfter adding a new element to the original ArrayList," );
       Console.WriteLine( "The original ArrayList myAL contains:" );
       foreach ( String myStr in myAL )
          Console.WriteLine( "   {0}", myStr );
       Console.WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
       foreach ( String myStr in myReadOnlyAL )
          Console.WriteLine( "   {0}", myStr );

    }

 }

/*
This code produces the following output.

myAL is writable.
myReadOnlyAL is read-only.

Initially,
The original ArrayList myAL contains:
   red
   orange
   yellow
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow

Trying to add a new element to the read-only ArrayList:
Exception: System.NotSupportedException: Collection is read-only.
   at System.Collections.ReadOnlyArrayList.Add(Object obj)
   at SamplesArrayList.Main()

After adding a new element to the original ArrayList,
The original ArrayList myAL contains:
   red
   orange
   yellow
   blue
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow
   blue

*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "red" );
   myAL->Add( "orange" );
   myAL->Add( "yellow" );

   // Creates a read-only copy of the ArrayList.
   ArrayList^ myReadOnlyAL = ArrayList::ReadOnly( myAL );

   // Displays whether the ArrayList is read-only or writable.
   Console::WriteLine( "myAL is {0}.", myAL->IsReadOnly ? (String^)"read-only" : "writable" );
   Console::WriteLine( "myReadOnlyAL is {0}.", myReadOnlyAL->IsReadOnly ? (String^)"read-only" : "writable" );

   // Displays the contents of both collections.
   Console::WriteLine( "\nInitially," );
   Console::WriteLine( "The original ArrayList myAL contains:" );
   for ( int i(0); i < myAL->Count; ++i )
      Console::WriteLine(  "   {0}", static_cast<String^>(myAL[ i ]) );
   Console::WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
   for ( int i(0); i < myReadOnlyAL->Count; ++i )
      Console::WriteLine( "   {0}", static_cast<String^>(myReadOnlyAL[ i ]) );

   // Adding an element to a read-only ArrayList throws an exception.
   Console::WriteLine( "\nTrying to add a new element to the read-only ArrayList:" );
   try
   {
      myReadOnlyAL->Add( "green" );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( String::Concat( "Exception: ", myException->ToString() ) );
   }

   // Adding an element to the original ArrayList affects the read-only ArrayList.
   myAL->Add( "blue" );

   // Displays the contents of both collections again.
   Console::WriteLine( "\nAfter adding a new element to the original ArrayList," );
   Console::WriteLine( "The original ArrayList myAL contains:" );
   for ( int i(0); i < myAL->Count; ++i )
      Console::WriteLine( "   {0}", static_cast<String^>(myAL[ i ]) );
   Console::WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
   for ( int i(0); i < myReadOnlyAL->Count; ++i )
      Console::WriteLine( "   {0}", static_cast<String^>(myReadOnlyAL[ i ]) );
}

/*
This code produces the following output.

myAL is writable.
myReadOnlyAL is read-only.

Initially,
The original ArrayList myAL contains:
   red
   orange
   yellow
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow

Trying to add a new element to the read-only ArrayList:
Exception: System.NotSupportedException: Collection is read-only.
   at System.Collections.ReadOnlyArrayList.Add(Object obj)
   at SamplesArrayList.Main()

After adding a new element to the original ArrayList,
The original ArrayList myAL contains:
   red
   orange
   yellow
   blue
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow
   blue

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
ReadOnly 重载
System.Collections 命名空间
IsReadOnly


ArrayList ..::.ReadOnly 方法 (IList)

ArrayList
.
.
::
.
ReadOnly 方法 (IList)
ArrayList 类

返回只读的 IList 包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function ReadOnly ( _
    list As IList _
) As IList
public static IList ReadOnly(
    IList list
)
public:
static IList^ ReadOnly(
    IList^ list
)
static member ReadOnly :
        list:IList -> IList

参数

list
类型： System.Collections IList
要包装的 IList。

返回值

类型： System.Collections IList
list 周围的只读 IList 包装。
异常 | 条件
ArgumentNullException | list 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要防止对 list 的任何修改，应该仅通过此包装公开 list。

只读集合就是一个带包装的集合，该包装防止对集合进行修改。如果对基础集合进行了更改，只读集合会反映所做的更改。 只读集合就是一个带包装的集合，该包装防止对集合进行修改。如果对基础集合进行了更改，只读集合会反映所做的更改。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
ReadOnly 重载
System.Collections 命名空间
IsReadOnly


ArrayList ..::.Remove 方法

ArrayList
.
.
::
.
Remove 方法
ArrayList 类

从 ArrayList 中移除特定对象的第一个匹配项。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Remove ( _
    obj As Object _
)
public virtual void Remove(
    Object obj
)
public:
virtual void Remove(
    Object^ obj
)
abstract Remove :
        obj:Object -> unit
override Remove :
        obj:Object -> unit

参数

obj
类型： System Object
要从 ArrayList 移除的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要从 ArrayList 移除的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
NotSupportedException | ArrayList 是只读的。 - 或 - ArrayList 具有固定大小。

如果 ArrayList 不包含指定对象，则 ArrayList 将保持不变。不引发异常。 如果 ArrayList 不包含指定对象，则 ArrayList 将保持不变。不引发异常。

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 是 Count。

此方法通过调用 Object..::.Equals 确定相等性。

在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

下面的代码示例演示如何移除 ArrayList 中的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Displays the ArrayList.
        Console.WriteLine("The ArrayList initially contains the following:")
        PrintValues(myAL)

        ' Removes the element containing "lazy".
        myAL.Remove("lazy")

        ' Displays the current state of the ArrayList.
        Console.WriteLine("After removing ""lazy"":")
        PrintValues(myAL)

        ' Removes the element at index 5.
        myAL.RemoveAt(5)

        ' Displays the current state of the ArrayList.
        Console.WriteLine("After removing the element at index 5:")
        PrintValues(myAL)

        ' Removes three elements starting at index 4.
        myAL.RemoveRange(4, 3)

        ' Displays the current state of the ArrayList.
        Console.WriteLine("After removing three elements starting at index 4:")
        PrintValues(myAL)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The ArrayList initially contains the following:
'    The   quick   brown   fox   jumped   over   the   lazy   dog
' After removing "lazy":
'    The   quick   brown   fox   jumped   over   the   dog
' After removing the element at index 5:
'    The   quick   brown   fox   jumped   the   dog
' After removing three elements starting at index 4:
'    The   quick   brown   fox

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following:" );
      PrintValues( myAL );

      // Removes the element containing "lazy".
      myAL.Remove( "lazy" );

      // Displays the current state of the ArrayList.
      Console.WriteLine( "After removing \"lazy\":" );
      PrintValues( myAL );

      // Removes the element at index 5.
      myAL.RemoveAt( 5 );

      // Displays the current state of the ArrayList.
      Console.WriteLine( "After removing the element at index 5:" );
      PrintValues( myAL );

      // Removes three elements starting at index 4.
      myAL.RemoveRange( 4, 3 );

      // Displays the current state of the ArrayList.
      Console.WriteLine( "After removing three elements starting at index 4:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }

}
/*
This code produces the following output.

The ArrayList initially contains the following:
   The   quick   brown   fox   jumped   over   the   lazy   dog
After removing "lazy":
   The   quick   brown   fox   jumped   over   the   dog
After removing the element at index 5:
   The   quick   brown   fox   jumped   the   dog
After removing three elements starting at index 4:
   The   quick   brown   fox
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following:" );
   PrintValues( myAL );

   // Removes the element containing "lazy".
   myAL->Remove( "lazy" );

   // Displays the current state of the ArrayList.
   Console::WriteLine( "After removing \"lazy\":" );
   PrintValues( myAL );

   // Removes the element at index 5.
   myAL->RemoveAt( 5 );

   // Displays the current state of the ArrayList.
   Console::WriteLine( "After removing the element at index 5:" );
   PrintValues( myAL );

   // Removes three elements starting at index 4.
   myAL->RemoveRange( 4, 3 );

   // Displays the current state of the ArrayList.
   Console::WriteLine( "After removing three elements starting at index 4:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList initially contains the following:
    The   quick   brown   fox   jumped   over   the   lazy   dog
 After removing "lazy":
    The   quick   brown   fox   jumped   over   the   dog
 After removing the element at index 5:
    The   quick   brown   fox   jumped   the   dog
 After removing three elements starting at index 4:
    The   quick   brown   fox
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
RemoveAt
RemoveRange
Add
Insert

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.RemoveAt 方法

ArrayList
.
.
::
.
RemoveAt 方法
ArrayList 类

移除 ArrayList 的指定索引处的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub RemoveAt ( _
    index As Integer _
)
public virtual void RemoveAt(
    int index
)
public:
virtual void RemoveAt(
    int index
)
abstract RemoveAt :
        index:int -> unit
override RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的元素的从零开始的索引。

实现

异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 等于或大于 Count。
NotSupportedException | ArrayList 是只读的。 - 或 - ArrayList 具有固定大小。

在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何移除 ArrayList 中的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Displays the ArrayList.
        Console.WriteLine("The ArrayList initially contains the following:")
        PrintValues(myAL)

        ' Removes the element containing "lazy".
        myAL.Remove("lazy")

        ' Displays the current state of the ArrayList.
        Console.WriteLine("After removing ""lazy"":")
        PrintValues(myAL)

        ' Removes the element at index 5.
        myAL.RemoveAt(5)

        ' Displays the current state of the ArrayList.
        Console.WriteLine("After removing the element at index 5:")
        PrintValues(myAL)

        ' Removes three elements starting at index 4.
        myAL.RemoveRange(4, 3)

        ' Displays the current state of the ArrayList.
        Console.WriteLine("After removing three elements starting at index 4:")
        PrintValues(myAL)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The ArrayList initially contains the following:
'    The   quick   brown   fox   jumped   over   the   lazy   dog
' After removing "lazy":
'    The   quick   brown   fox   jumped   over   the   dog
' After removing the element at index 5:
'    The   quick   brown   fox   jumped   the   dog
' After removing three elements starting at index 4:
'    The   quick   brown   fox

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following:" );
      PrintValues( myAL );

      // Removes the element containing "lazy".
      myAL.Remove( "lazy" );

      // Displays the current state of the ArrayList.
      Console.WriteLine( "After removing \"lazy\":" );
      PrintValues( myAL );

      // Removes the element at index 5.
      myAL.RemoveAt( 5 );

      // Displays the current state of the ArrayList.
      Console.WriteLine( "After removing the element at index 5:" );
      PrintValues( myAL );

      // Removes three elements starting at index 4.
      myAL.RemoveRange( 4, 3 );

      // Displays the current state of the ArrayList.
      Console.WriteLine( "After removing three elements starting at index 4:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }

}
/*
This code produces the following output.

The ArrayList initially contains the following:
   The   quick   brown   fox   jumped   over   the   lazy   dog
After removing "lazy":
   The   quick   brown   fox   jumped   over   the   dog
After removing the element at index 5:
   The   quick   brown   fox   jumped   the   dog
After removing three elements starting at index 4:
   The   quick   brown   fox
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following:" );
   PrintValues( myAL );

   // Removes the element containing "lazy".
   myAL->Remove( "lazy" );

   // Displays the current state of the ArrayList.
   Console::WriteLine( "After removing \"lazy\":" );
   PrintValues( myAL );

   // Removes the element at index 5.
   myAL->RemoveAt( 5 );

   // Displays the current state of the ArrayList.
   Console::WriteLine( "After removing the element at index 5:" );
   PrintValues( myAL );

   // Removes three elements starting at index 4.
   myAL->RemoveRange( 4, 3 );

   // Displays the current state of the ArrayList.
   Console::WriteLine( "After removing three elements starting at index 4:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList initially contains the following:
    The   quick   brown   fox   jumped   over   the   lazy   dog
 After removing "lazy":
    The   quick   brown   fox   jumped   over   the   dog
 After removing the element at index 5:
    The   quick   brown   fox   jumped   the   dog
 After removing three elements starting at index 4:
    The   quick   brown   fox
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
Remove
RemoveRange
Add
Insert


ArrayList ..::.RemoveRange 方法

ArrayList
.
.
::
.
RemoveRange 方法
ArrayList 类

从 ArrayList 中移除一定范围的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub RemoveRange ( _
    index As Integer, _
    count As Integer _
)
public virtual void RemoveRange(
    int index,
    int count
)
public:
virtual void RemoveRange(
    int index,
    int count
)
abstract RemoveRange :
        index:int *
        count:int -> unit
override RemoveRange :
        index:int *
        count:int -> unit

参数

index
类型： System Int32
要移除的元素的范围从零开始的起始索引。
count
类型： System Int32
要移除的元素数。
异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - count 小于零。
ArgumentException | index 和 count 不表示 ArrayList 中元素的有效范围。
NotSupportedException | ArrayList 是只读的。 - 或 - ArrayList 具有固定大小。

在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何移除 ArrayList 中的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Displays the ArrayList.
        Console.WriteLine("The ArrayList initially contains the following:")
        PrintValues(myAL)

        ' Removes the element containing "lazy".
        myAL.Remove("lazy")

        ' Displays the current state of the ArrayList.
        Console.WriteLine("After removing ""lazy"":")
        PrintValues(myAL)

        ' Removes the element at index 5.
        myAL.RemoveAt(5)

        ' Displays the current state of the ArrayList.
        Console.WriteLine("After removing the element at index 5:")
        PrintValues(myAL)

        ' Removes three elements starting at index 4.
        myAL.RemoveRange(4, 3)

        ' Displays the current state of the ArrayList.
        Console.WriteLine("After removing three elements starting at index 4:")
        PrintValues(myAL)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The ArrayList initially contains the following:
'    The   quick   brown   fox   jumped   over   the   lazy   dog
' After removing "lazy":
'    The   quick   brown   fox   jumped   over   the   dog
' After removing the element at index 5:
'    The   quick   brown   fox   jumped   the   dog
' After removing three elements starting at index 4:
'    The   quick   brown   fox

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following:" );
      PrintValues( myAL );

      // Removes the element containing "lazy".
      myAL.Remove( "lazy" );

      // Displays the current state of the ArrayList.
      Console.WriteLine( "After removing \"lazy\":" );
      PrintValues( myAL );

      // Removes the element at index 5.
      myAL.RemoveAt( 5 );

      // Displays the current state of the ArrayList.
      Console.WriteLine( "After removing the element at index 5:" );
      PrintValues( myAL );

      // Removes three elements starting at index 4.
      myAL.RemoveRange( 4, 3 );

      // Displays the current state of the ArrayList.
      Console.WriteLine( "After removing three elements starting at index 4:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }

}
/*
This code produces the following output.

The ArrayList initially contains the following:
   The   quick   brown   fox   jumped   over   the   lazy   dog
After removing "lazy":
   The   quick   brown   fox   jumped   over   the   dog
After removing the element at index 5:
   The   quick   brown   fox   jumped   the   dog
After removing three elements starting at index 4:
   The   quick   brown   fox
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following:" );
   PrintValues( myAL );

   // Removes the element containing "lazy".
   myAL->Remove( "lazy" );

   // Displays the current state of the ArrayList.
   Console::WriteLine( "After removing \"lazy\":" );
   PrintValues( myAL );

   // Removes the element at index 5.
   myAL->RemoveAt( 5 );

   // Displays the current state of the ArrayList.
   Console::WriteLine( "After removing the element at index 5:" );
   PrintValues( myAL );

   // Removes three elements starting at index 4.
   myAL->RemoveRange( 4, 3 );

   // Displays the current state of the ArrayList.
   Console::WriteLine( "After removing three elements starting at index 4:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList initially contains the following:
    The   quick   brown   fox   jumped   over   the   lazy   dog
 After removing "lazy":
    The   quick   brown   fox   jumped   over   the   dog
 After removing the element at index 5:
    The   quick   brown   fox   jumped   the   dog
 After removing three elements starting at index 4:
    The   quick   brown   fox
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
Remove
RemoveAt
GetRange
AddRange
InsertRange
SetRange


ArrayList ..::.Repeat 方法

ArrayList
.
.
::
.
Repeat 方法
ArrayList 类

返回 ArrayList，它的元素是指定值的副本。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared Function Repeat ( _
    value As Object, _
    count As Integer _
) As ArrayList
public static ArrayList Repeat(
    Object value,
    int count
)
public:
static ArrayList^ Repeat(
    Object^ value,
    int count
)
static member Repeat :
        value:Object *
        count:int -> ArrayList

参数

value
类型： System Object
要在新 ArrayList 中对其进行多次复制的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在新 ArrayList 中对其进行多次复制的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
count
类型： System Int32
value 应被复制的次数。

返回值

类型： System.Collections ArrayList
具有 count 所指定的元素数的 ArrayList，其中的所有元素都是 value 的副本。
异常 | 条件
ArgumentOutOfRangeException | count 小于零。

ArrayList 接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

此方法的运算复杂度为 O(n)，其中 n 是 count。

下面的代码示例演示如何用同一个值创建和初始化新 ArrayList。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates a new ArrayList with five elements and initialize each
        ' element with a null value.
        Dim myAL As ArrayList = ArrayList.Repeat(Nothing, 5)

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("ArrayList with five elements with a null value")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)

        ' Creates a new ArrayList with seven elements and initialize each
        ' element with the string "abc".
        myAL = ArrayList.Repeat("abc", 7)

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("ArrayList with seven elements with a string value")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)

    End Sub 'Main

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' ArrayList with five elements with a null value
'    Count    : 5
'    Capacity : 16
'    Values:
' ArrayList with seven elements with a string value
'    Count    : 7
'    Capacity : 16
'    Values:	abc	abc	abc	abc	abc	abc	abc

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates a new ArrayList with five elements and initialize each element with a null value.
      ArrayList myAL = ArrayList.Repeat( null, 5 );

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "ArrayList with five elements with a null value" );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );

      // Creates a new ArrayList with seven elements and initialize each element with the string "abc".
      myAL = ArrayList.Repeat( "abc", 7 );

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "ArrayList with seven elements with a string value" );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );

   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }

}
/*
This code produces the following output.

ArrayList with five elements with a null value
   Count    : 5
   Capacity : 16
   Values:
ArrayList with seven elements with a string value
   Count    : 7
   Capacity : 16
   Values:   abc   abc   abc   abc   abc   abc   abc

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates a new ArrayList with five elements and initialize each element with a null value.
   ArrayList^ myAL = ArrayList::Repeat( 0, 5 );

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "ArrayList with five elements with a null value" );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );

   // Creates a new ArrayList with seven elements and initialize each element with the string "abc".
   myAL = ArrayList::Repeat( "abc", 7 );

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "ArrayList with seven elements with a string value" );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 ArrayList with five elements with a null value
    Count    : 5
    Capacity : 16
    Values:
 ArrayList with seven elements with a string value
    Count    : 7
    Capacity : 16
    Values:   abc   abc   abc   abc   abc   abc   abc

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.Reverse 方法

ArrayList
.
.
::
.
Reverse 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

将 ArrayList 或它的一部分中元素的顺序反转。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.Reverse 方法

ArrayList
.
.
::
.
Reverse 方法
ArrayList 类

将整个 ArrayList 中元素的顺序反转。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Reverse
public virtual void Reverse()
public:
virtual void Reverse()
abstract Reverse : unit -> unit
override Reverse : unit -> unit
异常 | 条件
NotSupportedException | ArrayList 是只读的。

此方法使用 Array..::.Reverse 将元素的顺序反转，从而使得 ArrayList [i]（其中 i 表示该范围内的任何索引）处的元素移到 ArrayList [j]（其中 j 等于 index + index + count - i - 1）。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何反转 ArrayList 中的值的排序顺序。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumps")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Displays the values of the ArrayList.
        Console.WriteLine("The ArrayList initially contains the " _
           + "following values:")
        PrintValues(myAL)

        ' Reverses the sort order of the values of the ArrayList.
        myAL.Reverse()

        ' Displays the values of the ArrayList.
        Console.WriteLine("After reversing:")
        PrintValues(myAL)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.WriteLine("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' The ArrayList initially contains the following values:
'    The
'    quick
'    brown
'    fox
'    jumps
'    over
'    the
'    lazy
'    dog
'
' After reversing:
'    dog
'    lazy
'    the
'    over
'    jumps
'    fox
'    brown
'    quick
'    The

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintValues( myAL );

      // Reverses the sort order of the values of the ArrayList.
      myAL.Reverse();

      // Displays the values of the ArrayList.
      Console.WriteLine( "After reversing:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.WriteLine( "   {0}", obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The ArrayList initially contains the following values:
   The
   quick
   brown
   fox
   jumps
   over
   the
   lazy
   dog

After reversing:
   dog
   lazy
   the
   over
   jumps
   fox
   brown
   quick
   The
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following values:" );
   PrintValues( myAL );

   // Reverses the sort order of the values of the ArrayList.
   myAL->Reverse();

   // Displays the values of the ArrayList.
   Console::WriteLine( "After reversing:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList initially contains the following values:
    The
    quick
    brown
    fox
    jumps
    over
    the
    lazy
    dog

 After reversing:
    dog
    lazy
    the
    over
    jumps
    fox
    brown
    quick
    The
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
Reverse 重载
System.Collections 命名空间


ArrayList ..::.Reverse 方法 (Int32, Int32)

ArrayList
.
.
::
.
Reverse 方法 (Int32, Int32)
ArrayList 类

将指定范围中元素的顺序反转。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Reverse ( _
    index As Integer, _
    count As Integer _
)
public virtual void Reverse(
    int index,
    int count
)
public:
virtual void Reverse(
    int index,
    int count
)
abstract Reverse :
        index:int *
        count:int -> unit
override Reverse :
        index:int *
        count:int -> unit

参数

index
类型： System Int32
要反转的范围的从零开始的起始索引。
count
类型： System Int32
要反转的范围内的元素数。
异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - count 小于零。
ArgumentException | index 和 count 不表示 ArrayList 中元素的有效范围。
NotSupportedException | ArrayList 是只读的。

此方法使用 Array..::.Reverse 将元素的顺序反转，从而使得 ArrayList [i]（其中 i 表示该范围内的任何索引）处的元素移到 ArrayList [j]（其中 j 等于 index + index + count - i - 1）。

此方法的运算复杂度为 O(n)，其中 n 是 count。

下面的代码示例演示如何反转 ArrayList 中某个范围内元素的值的排序顺序。

Imports System
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("QUICK")
        myAL.Add("BROWN")
        myAL.Add("FOX")
        myAL.Add("jumps")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Displays the values of the ArrayList.
        Console.WriteLine("The ArrayList initially contains the following values:")
        PrintValues(myAL)

        ' Reverses the sort order of the values of the ArrayList.
        myAL.Reverse(1, 3)

        ' Displays the values of the ArrayList.
        Console.WriteLine("After reversing:")
        PrintValues(myAL)

    End Sub 'Main

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.WriteLine("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The ArrayList initially contains the following values:
'    The
'    QUICK
'    BROWN
'    FOX
'    jumps
'    over
'    the
'    lazy
'    dog
'
' After reversing:
'    The
'    FOX
'    BROWN
'    QUICK
'    jumps
'    over
'    the
'    lazy
'    dog

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "QUICK" );
      myAL.Add( "BROWN" );
      myAL.Add( "FOX" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintValues( myAL );

      // Reverses the sort order of the values of the ArrayList.
      myAL.Reverse( 1, 3 );

      // Displays the values of the ArrayList.
      Console.WriteLine( "After reversing:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.WriteLine( "   {0}", obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The ArrayList initially contains the following values:
   The
   QUICK
   BROWN
   FOX
   jumps
   over
   the
   lazy
   dog

After reversing:
   The
   FOX
   BROWN
   QUICK
   jumps
   over
   the
   lazy
   dog

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "QUICK" );
   myAL->Add( "BROWN" );
   myAL->Add( "FOX" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following values:" );
   PrintValues( myAL );

   // Reverses the sort order of the values of the ArrayList.
   myAL->Reverse( 1, 3 );

   // Displays the values of the ArrayList.
   Console::WriteLine( "After reversing:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList initially contains the following values:
    The
    QUICK
    BROWN
    FOX
    jumps
    over
    the
    lazy
    dog

 After reversing:
    The
    FOX
    BROWN
    QUICK
    jumps
    over
    the
    lazy
    dog

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
Reverse 重载
System.Collections 命名空间


ArrayList ..::.SetRange 方法

ArrayList
.
.
::
.
SetRange 方法
ArrayList 类

将集合中的元素复制到 ArrayList 中一定范围的元素上。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub SetRange ( _
    index As Integer, _
    c As ICollection _
)
public virtual void SetRange(
    int index,
    ICollection c
)
public:
virtual void SetRange(
    int index,
    ICollection^ c
)
abstract SetRange :
        index:int *
        c:ICollection -> unit
override SetRange :
        index:int *
        c:ICollection -> unit

参数

index
类型： System Int32
从零开始的 ArrayList 索引，从该位置开始复制 c 的元素。
c
类型： System.Collections ICollection
ICollection，要将其元素复制到 ArrayList 中。集合本身不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但它可以包含为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的元素。 ICollection，要将其元素复制到 ArrayList 中。集合本身不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但它可以包含为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的元素。
异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 加上 c 中的元素数大于 Count。
ArgumentNullException | c 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | ArrayList 是只读的。

ArrayList 接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

ICollection 中元素的顺序保存在 ArrayList 中。

此方法的运算复杂度为 O(n+ 1)，其中 n 是 Count。

下面的代码示例演示如何设置和获取 ArrayList 中元素的范围。

Imports System
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Creates and initializes the source ICollection.
        Dim mySourceList As New Queue()
        mySourceList.Enqueue("big")
        mySourceList.Enqueue("gray")
        mySourceList.Enqueue("wolf")

        ' Displays the values of five elements starting at index 0.
        Dim mySubAL As ArrayList = myAL.GetRange(0, 5)
        Console.WriteLine("Index 0 through 4 contains:")
        PrintValues(mySubAL, vbTab)

        ' Replaces the values of five elements starting at index 1 with the values in the ICollection.
        myAL.SetRange(1, mySourceList)

        ' Displays the values of five elements starting at index 0.
        mySubAL = myAL.GetRange(0, 5)
        Console.WriteLine("Index 0 through 4 now contains:")
        PrintValues(mySubAL, vbTab)

    End Sub 'Main

    Public Shared Sub PrintValues(myList As IEnumerable, mySeparator As Char)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("{0}{1}", mySeparator, obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' Index 0 through 4 contains:
'         The     quick   brown   fox     jumped
' Index 0 through 4 now contains:
'         The     big     gray    wolf    jumped

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Creates and initializes the source ICollection.
      Queue mySourceList = new Queue();
      mySourceList.Enqueue( "big" );
      mySourceList.Enqueue( "gray" );
      mySourceList.Enqueue( "wolf" );

      // Displays the values of five elements starting at index 0.
      ArrayList mySubAL = myAL.GetRange( 0, 5 );
      Console.WriteLine( "Index 0 through 4 contains:" );
      PrintValues( mySubAL, '\t' );

      // Replaces the values of five elements starting at index 1 with the values in the ICollection.
      myAL.SetRange( 1, mySourceList );

      // Displays the values of five elements starting at index 0.
      mySubAL = myAL.GetRange( 0, 5 );
      Console.WriteLine( "Index 0 through 4 now contains:" );
      PrintValues( mySubAL, '\t' );

   }

   public static void PrintValues( IEnumerable myList, char mySeparator )  {
      foreach ( Object obj in myList )
         Console.Write( "{0}{1}", mySeparator, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Index 0 through 4 contains:
        The     quick   brown   fox     jumped
Index 0 through 4 now contains:
        The     big     gray    wolf    jumped
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, char mySeparator );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Creates and initializes the source ICollection.
   Queue^ mySourceList = gcnew Queue;
   mySourceList->Enqueue( "big" );
   mySourceList->Enqueue( "gray" );
   mySourceList->Enqueue( "wolf" );

   // Displays the values of five elements starting at index 0.
   ArrayList^ mySubAL = myAL->GetRange( 0, 5 );
   Console::WriteLine( "Index 0 through 4 contains:" );
   PrintValues( mySubAL, '\t' );

   // Replaces the values of five elements starting at index 1 with the values in the ICollection.
   myAL->SetRange( 1, mySourceList );

   // Displays the values of five elements starting at index 0.
   mySubAL = myAL->GetRange( 0, 5 );
   Console::WriteLine( "Index 0 through 4 now contains:" );
   PrintValues( mySubAL, '\t' );
}

void PrintValues( IEnumerable^ myList, char mySeparator )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Index 0 through 4 contains:
         The     quick   brown   fox     jumped
 Index 0 through 4 now contains:
         The     big     gray    wolf    jumped
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
AddRange
InsertRange
GetRange
RemoveRange


ArrayList ..::.Sort 方法

ArrayList
.
.
::
.
Sort 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

对 ArrayList 中的元素或其中的一部分进行排序。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.Sort 方法

ArrayList
.
.
::
.
Sort 方法
ArrayList 类

对整个 ArrayList 中的元素进行排序。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Sort
public virtual void Sort()
public:
virtual void Sort()
abstract Sort : unit -> unit
override Sort : unit -> unit
异常 | 条件
NotSupportedException | ArrayList 是只读的。

此方法使用 Array..::.Sort，后者使用 QuickSort 算法。QuickStort 算法是一个比较排序（也称为不稳定排序），这意味着“小于或等于”比较操作来确定这两个元素中哪个先出现在最终的排序列表中。但是，如果两个元素相等，则可能不会保留其原始次序。相反，稳定排序则会保持相等元素的顺序。若要进行稳定排序，必须实现一个自定义 IComparer 接口，以便与此方法的其他重载配合使用。 此方法使用 Array..::.Sort，后者使用 QuickSort 算法。QuickStort 算法是一个比较排序（也称为不稳定排序），这意味着“小于或等于”比较操作来确定这两个元素中哪个先出现在最终的排序列表中。但是，如果两个元素相等，则可能不会保留其原始次序。相反，稳定排序则会保持相等元素的顺序。若要进行稳定排序，必须实现一个自定义 IComparer 接口，以便与此方法的其他重载配合使用。 此方法使用 Array..::.Sort，后者使用 QuickSort 算法。QuickStort 算法是一个比较排序（也称为不稳定排序），这意味着“小于或等于”比较操作来确定这两个元素中哪个先出现在最终的排序列表中。但是，如果两个元素相等，则可能不会保留其原始次序。相反，稳定排序则会保持相等元素的顺序。若要进行稳定排序，必须实现一个自定义 IComparer 接口，以便与此方法的其他重载配合使用。 此方法使用 Array..::.Sort，后者使用 QuickSort 算法。QuickStort 算法是一个比较排序（也称为不稳定排序），这意味着“小于或等于”比较操作来确定这两个元素中哪个先出现在最终的排序列表中。但是，如果两个元素相等，则可能不会保留其原始次序。相反，稳定排序则会保持相等元素的顺序。若要进行稳定排序，必须实现一个自定义 IComparer 接口，以便与此方法的其他重载配合使用。 此方法使用 Array..::.Sort，后者使用 QuickSort 算法。QuickStort 算法是一个比较排序（也称为不稳定排序），这意味着“小于或等于”比较操作来确定这两个元素中哪个先出现在最终的排序列表中。但是，如果两个元素相等，则可能不会保留其原始次序。相反，稳定排序则会保持相等元素的顺序。若要进行稳定排序，必须实现一个自定义 IComparer 接口，以便与此方法的其他重载配合使用。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 为 Count，最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示如何对 ArrayList 中的值进行排序。

Imports System
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumps")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Displays the values of the ArrayList.
        Console.WriteLine("The ArrayList initially contains the following values:")
        PrintValues(myAL)

        ' Sorts the values of the ArrayList.
        myAL.Sort()

        ' Displays the values of the ArrayList.
        Console.WriteLine("After sorting:")
        PrintValues(myAL)

    End Sub 'Main

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.WriteLine("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesArrayList

' This code produces the following output.
'
' The ArrayList initially contains the following values:
'    The
'    quick
'    brown
'    fox
'    jumps
'    over
'    the
'    lazy
'    dog
'
' After sorting:
'    brown
'    dog
'    fox
'    jumps
'    lazy
'    over
'    quick
'    the
'    The

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintValues( myAL );

      // Sorts the values of the ArrayList.
      myAL.Sort();

      // Displays the values of the ArrayList.
      Console.WriteLine( "After sorting:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.WriteLine( "   {0}", obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The ArrayList initially contains the following values:
   The
   quick
   brown
   fox
   jumps
   over
   the
   lazy
   dog

After sorting:
   brown
   dog
   fox
   jumps
   lazy
   over
   quick
   the
   The
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following values:" );
   PrintValues( myAL );

   // Sorts the values of the ArrayList.
   myAL->Sort();

   // Displays the values of the ArrayList.
   Console::WriteLine( "After sorting:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The ArrayList initially contains the following values:
    The
    quick
    brown
    fox
    jumps
    over
    the
    lazy
    dog

 After sorting:
    brown
    dog
    fox
    jumps
    lazy
    over
    quick
    the
    The
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
Sort 重载
System.Collections 命名空间

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.Sort 方法 (IComparer)

ArrayList
.
.
::
.
Sort 方法 (IComparer)
ArrayList 类

使用指定的比较器对整个 ArrayList 中的元素进行排序。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Sort ( _
    comparer As IComparer _
)
public virtual void Sort(
    IComparer comparer
)
public:
virtual void Sort(
    IComparer^ comparer
)
abstract Sort :
        comparer:IComparer -> unit
override Sort :
        comparer:IComparer -> unit

参数

comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
null 引用（Visual Basic 中为 Nothing）将使用每个元数的 IComparable 实现。
异常 | 条件
NotSupportedException | ArrayList 是只读的。

如果 comparer 设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法执行比较排序（也称为不稳定排序）；即如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。若要执行稳定排序，必须实现自定义 IComparer 界面。 如果 comparer 设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法执行比较排序（也称为不稳定排序）；即如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。若要执行稳定排序，必须实现自定义 IComparer 界面。 如果 comparer 设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法执行比较排序（也称为不稳定排序）；即如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。若要执行稳定排序，必须实现自定义 IComparer 界面。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 为 Count，最坏的情况下其运算复杂度为 O(n ^ 2)。

下面的代码示例演示如何使用默认比较器和一个反转排序顺序的自定义比较器，对 ArrayList 中的值进行排序。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Public Function Compare( ByVal x As Object, ByVal y As Object) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new ArrayList.
      Dim myAL As New ArrayList()
      myAL.Add("The")
      myAL.Add("quick")
      myAL.Add("brown")
      myAL.Add("fox")
      myAL.Add("jumps")
      myAL.Add("over")
      myAL.Add("the")
      myAL.Add("lazy")
      myAL.Add("dog")

      ' Displays the values of the ArrayList.
      Console.WriteLine("The ArrayList initially contains the following values:")
      PrintIndexAndValues(myAL)

      ' Sorts the values of the ArrayList using the default comparer.
      myAL.Sort()
      Console.WriteLine("After sorting with the default comparer:")
      PrintIndexAndValues(myAL)

      ' Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      Dim myComparer = New myReverserClass()
      myAL.Sort(myComparer)
      Console.WriteLine("After sorting with the reverse case-insensitive comparer:")
      PrintIndexAndValues(myAL)

   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myList As IEnumerable)
      Dim i As Integer = 0
      Dim obj As [Object]
      For Each obj In  myList
         Console.WriteLine(vbTab + "[{0}]:" + vbTab + "{1}", i, obj)
         i = i + 1
      Next obj
      Console.WriteLine()
   End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

'This code produces the following output.
'The ArrayList initially contains the following values:
'        [0]:    The
'        [1]:    quick
'        [2]:    brown
'        [3]:    fox
'        [4]:    jumps
'        [5]:    over
'        [6]:    the
'        [7]:    lazy
'        [8]:    dog
'
'After sorting with the default comparer:
'        [0]:    brown
'        [1]:    dog
'        [2]:    fox
'        [3]:    jumps
'        [4]:    lazy
'        [5]:    over
'        [6]:    quick
'        [7]:    the
'        [8]:    The
'
'After sorting with the reverse case-insensitive comparer:
'        [0]:    the
'        [1]:    The
'        [2]:    quick
'        [3]:    over
'        [4]:    lazy
'        [5]:    jumps
'        [6]:    fox
'        [7]:    dog
'        [8]:    brown

using System;
using System.Collections;

public class SamplesArrayList  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the default comparer.
      myAL.Sort();
      Console.WriteLine( "After sorting with the default comparer:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      IComparer myComparer = new myReverserClass();
      myAL.Sort( myComparer );
      Console.WriteLine( "After sorting with the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myAL );

   }

   public static void PrintIndexAndValues( IEnumerable myList )  {
      int i = 0;
      foreach ( Object obj in myList )
         Console.WriteLine( "\t[{0}]:\t{1}", i++, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.
The ArrayList initially contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumps
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting with the default comparer:
        [0]:    brown
        [1]:    dog
        [2]:    fox
        [3]:    jumps
        [4]:    lazy
        [5]:    over
        [6]:    quick
        [7]:    the
        [8]:    The

After sorting with the reverse case-insensitive comparer:
        [0]:    the
        [1]:    The
        [2]:    quick
        [3]:    over
        [4]:    lazy
        [5]:    jumps
        [6]:    fox
        [7]:    dog
        [8]:    brown
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
ref class myReverserClass: public IComparer
{
private:

   // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }

};

int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following values:" );
   PrintIndexAndValues( myAL );

   // Sorts the values of the ArrayList using the default comparer.
   myAL->Sort();
   Console::WriteLine( "After sorting with the default comparer:" );
   PrintIndexAndValues( myAL );

   // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
   IComparer^ myComparer = gcnew myReverserClass;
   myAL->Sort( myComparer );
   Console::WriteLine( "After sorting with the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myAL );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "\t[{0}]:\t{1}", i++, obj );
   }

   Console::WriteLine();
}

/*
This code produces the following output.
The ArrayList initially contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumps
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting with the default comparer:
        [0]:    brown
        [1]:    dog
        [2]:    fox
        [3]:    jumps
        [4]:    lazy
        [5]:    over
        [6]:    quick
        [7]:    the
        [8]:    The

After sorting with the reverse case-insensitive comparer:
        [0]:    the
        [1]:    The
        [2]:    quick
        [3]:    over
        [4]:    lazy
        [5]:    jumps
        [6]:    fox
        [7]:    dog
        [8]:    brown
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
Sort 重载
System.Collections 命名空间

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.Sort 方法 (Int32, Int32, IComparer)

ArrayList
.
.
::
.
Sort 方法 (Int32, Int32, IComparer)
ArrayList 类

使用指定的比较器对 ArrayList 中某个范围内的元素进行排序。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Sort ( _
    index As Integer, _
    count As Integer, _
    comparer As IComparer _
)
public virtual void Sort(
    int index,
    int count,
    IComparer comparer
)
public:
virtual void Sort(
    int index,
    int count,
    IComparer^ comparer
)
abstract Sort :
        index:int *
        count:int *
        comparer:IComparer -> unit
override Sort :
        index:int *
        count:int *
        comparer:IComparer -> unit

参数

index
类型： System Int32
要排序的范围的从零开始的起始索引。
count
类型： System Int32
要排序的范围的长度。
comparer
类型： System.Collections IComparer
比较元素时要使用的 IComparer 实现。
- 或 -
null 引用（Visual Basic 中为 Nothing）将使用每个元数的 IComparable 实现。
异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - count 小于零。
ArgumentException | index 和 count 未指定 ArrayList 中的有效范围。
NotSupportedException | ArrayList 是只读的。

如果 comparer 设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法执行比较排序（也称为不稳定排序）；即如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。若要执行稳定排序，必须实现自定义 IComparer 界面。 如果 comparer 设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法执行比较排序（也称为不稳定排序）；即如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。若要执行稳定排序，必须实现自定义 IComparer 界面。 如果 comparer 设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则此方法执行比较排序（也称为不稳定排序）；即如果两元素相等，则其顺序可能不被保留。相反，稳定排序则会保持相等元素的顺序。若要执行稳定排序，必须实现自定义 IComparer 界面。

一般情况下，此方法的运算复杂度为 O(n log n)，其中 n 为 count；最坏的情况下其运算复杂度为 O(n^2)。

下面的代码示例演示如何使用默认比较器和自定义的反序比较器，对 ArrayList 中某个范围的元素的值进行排序。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Public Function Compare( ByVal x As Object, ByVal y As Object) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new ArrayList.
      Dim myAL As New ArrayList()
      myAL.Add("The")
      myAL.Add("QUICK")
      myAL.Add("BROWN")
      myAL.Add("FOX")
      myAL.Add("jumped")
      myAL.Add("over")
      myAL.Add("the")
      myAL.Add("lazy")
      myAL.Add("dog")

      ' Displays the values of the ArrayList.
      Console.WriteLine("The ArrayList initially contains the following values:")
      PrintIndexAndValues(myAL)

      ' Sorts the values of the ArrayList using the default comparer.
      myAL.Sort(1, 3, Nothing)
      Console.WriteLine("After sorting from index 1 to index 3 with the default comparer:")
      PrintIndexAndValues(myAL)

      ' Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      Dim myComparer = New myReverserClass()
      myAL.Sort(1, 3, myComparer)
      Console.WriteLine("After sorting from index 1 to index 3 with the reverse case-insensitive comparer:")
      PrintIndexAndValues(myAL)

   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myList As IEnumerable)
      Dim i As Integer = 0
      Dim obj As [Object]
      For Each obj In  myList
         Console.WriteLine(vbTab + "[{0}]:" + vbTab + "{1}", i, obj)
         i = i + 1
      Next obj
      Console.WriteLine()
   End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

'This code produces the following output.
'The ArrayList initially contains the following values:
'        [0]:    The
'        [1]:    QUICK
'        [2]:    BROWN
'        [3]:    FOX
'        [4]:    jumped
'        [5]:    over
'        [6]:    the
'        [7]:    lazy
'        [8]:    dog
'
'After sorting from index 1 to index 3 with the default comparer:
'        [0]:    The
'        [1]:    BROWN
'        [2]:    FOX
'        [3]:    QUICK
'        [4]:    jumped
'        [5]:    over
'        [6]:    the
'        [7]:    lazy
'        [8]:    dog
'
'After sorting from index 1 to index 3 with the reverse case-insensitive comparer:
'        [0]:    The
'        [1]:    QUICK
'        [2]:    FOX
'        [3]:    BROWN
'        [4]:    jumped
'        [5]:    over
'        [6]:    the
'        [7]:    lazy
'        [8]:    dog

using System;
using System.Collections;

public class SamplesArrayList  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "QUICK" );
      myAL.Add( "BROWN" );
      myAL.Add( "FOX" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the default comparer.
      myAL.Sort( 1, 3, null );
      Console.WriteLine( "After sorting from index 1 to index 3 with the default comparer:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      IComparer myComparer = new myReverserClass();
      myAL.Sort( 1, 3, myComparer );
      Console.WriteLine( "After sorting from index 1 to index 3 with the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myAL );

   }

   public static void PrintIndexAndValues( IEnumerable myList )  {
      int i = 0;
      foreach ( Object obj in myList )
         Console.WriteLine( "\t[{0}]:\t{1}", i++, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.
The ArrayList initially contains the following values:
        [0]:    The
        [1]:    QUICK
        [2]:    BROWN
        [3]:    FOX
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting from index 1 to index 3 with the default comparer:
        [0]:    The
        [1]:    BROWN
        [2]:    FOX
        [3]:    QUICK
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting from index 1 to index 3 with the reverse case-insensitive comparer:
        [0]:    The
        [1]:    QUICK
        [2]:    FOX
        [3]:    BROWN
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
ref class myReverserClass: public IComparer
{
private:

   // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }

};

int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "QUICK" );
   myAL->Add( "BROWN" );
   myAL->Add( "FOX" );
   myAL->Add( "jumped" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following values:" );
   PrintIndexAndValues( myAL );

   // Sorts the values of the ArrayList using the default comparer.
   myAL->Sort( 1, 3, nullptr );
   Console::WriteLine( "After sorting from index 1 to index 3 with the default comparer:" );
   PrintIndexAndValues( myAL );

   // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
   IComparer^ myComparer = gcnew myReverserClass;
   myAL->Sort( 1, 3, myComparer );
   Console::WriteLine( "After sorting from index 1 to index 3 with the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myAL );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "\t[{0}]:\t{1}", i++, obj );
   }

   Console::WriteLine();
}

/*
This code produces the following output.
The ArrayList initially contains the following values:
        [0]:    The
        [1]:    QUICK
        [2]:    BROWN
        [3]:    FOX
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting from index 1 to index 3 with the default comparer:
        [0]:    The
        [1]:    BROWN
        [2]:    FOX
        [3]:    QUICK
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting from index 1 to index 3 with the reverse case-insensitive comparer:
        [0]:    The
        [1]:    QUICK
        [2]:    FOX
        [3]:    BROWN
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
Sort 重载
System.Collections 命名空间

其他资源

在集合中执行不区分区域性的字符串操作


ArrayList ..::.Synchronized 方法

ArrayList
.
.
::
.
Synchronized 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

返回同步的（线程安全）列表包装。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.Synchronized 方法 (ArrayList)

ArrayList
.
.
::
.
Synchronized 方法 (ArrayList)
ArrayList 类

返回同步的（线程安全）ArrayList 包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True)> _
Public Shared Function Synchronized ( _
    list As ArrayList _
) As ArrayList
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)]
public static ArrayList Synchronized(
    ArrayList list
)
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true)]
public:
static ArrayList^ Synchronized(
    ArrayList^ list
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)>]
static member Synchronized :
        list:ArrayList -> ArrayList

参数

list
类型： System.Collections ArrayList
要同步的 ArrayList。

返回值

类型： System.Collections ArrayList
同步的（线程安全）ArrayList 包装。
异常 | 条件
ArgumentNullException | list 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要保证 ArrayList 的线程安全，则必须通过此包装执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：Synchronization。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。

Dim myCollection As New ArrayList()

SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

ArrayList myCollection = new ArrayList();

lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

ArrayList^ myCollection = gcnew ArrayList();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

此方法是 O(1) 操作。

下面的代码示例演示如何同步 ArrayList、如何确定 ArrayList 是否同步以及如何使用同步的 ArrayList。

Imports System
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")

        ' Creates a synchronized wrapper around the ArrayList.
        Dim mySyncdAL As ArrayList = ArrayList.Synchronized(myAL)

        ' Displays the sychronization status of both ArrayLists.
        Dim str As String
        If myAL.IsSynchronized Then
            str = "synchronized"
        Else
            str = "not synchronized"
        End If
        Console.WriteLine("myAL is {0}.", str)
        If mySyncdAL.IsSynchronized Then
            str = "synchronized"
        Else
            str = "not synchronized"
        End If
        Console.WriteLine("mySyncdAL is {0}.", str)
    End Sub
End Class

' This code produces the following output.
'
' myAL is not synchronized.
' mySyncdAL is synchronized.

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );

      // Creates a synchronized wrapper around the ArrayList.
      ArrayList mySyncdAL = ArrayList.Synchronized( myAL );

      // Displays the sychronization status of both ArrayLists.
      Console.WriteLine( "myAL is {0}.", myAL.IsSynchronized ? "synchronized" : "not synchronized" );
      Console.WriteLine( "mySyncdAL is {0}.", mySyncdAL.IsSynchronized ? "synchronized" : "not synchronized" );
   }
}
/*
This code produces the following output.

myAL is not synchronized.
mySyncdAL is synchronized.
*/

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new ArrayList instance.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );

   // Creates a synchronized wrapper around the ArrayList.
   ArrayList^ mySyncdAL = ArrayList::Synchronized( myAL );

   // Displays the sychronization status of both ArrayLists.
   String^ szRes = myAL->IsSynchronized ?  (String^)"synchronized" :  "not synchronized";
   Console::WriteLine(  "myAL is {0}.", szRes );
   String^ szSyncRes = mySyncdAL->IsSynchronized ?  (String^)"synchronized" :  "not synchronized";
   Console::WriteLine(  "mySyncdAL is {0}.", szSyncRes );
}

/*
 This code produces the following output.

 myAL is not synchronized.
 mySyncdAL is synchronized.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
Synchronized 重载
System.Collections 命名空间
SyncRoot
IsSynchronized


ArrayList ..::.Synchronized 方法 (IList)

ArrayList
.
.
::
.
Synchronized 方法 (IList)
ArrayList 类

返回同步的（线程安全）IList 包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True)> _
Public Shared Function Synchronized ( _
    list As IList _
) As IList
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)]
public static IList Synchronized(
    IList list
)
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true)]
public:
static IList^ Synchronized(
    IList^ list
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)>]
static member Synchronized :
        list:IList -> IList

参数

list
类型： System.Collections IList
要同步的 IList。

返回值

类型： System.Collections IList
同步的（线程安全）IList 包装。
异常 | 条件
ArgumentNullException | list 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要保证 ArrayList 的线程安全，则必须通过此包装执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：Synchronization。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。

Dim myCollection As New ArrayList()

SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

ArrayList myCollection = new ArrayList();

lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

ArrayList^ myCollection = gcnew ArrayList();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ArrayList 类
ArrayList 成员
Synchronized 重载
System.Collections 命名空间
SyncRoot
IsSynchronized


ArrayList ..::.ToArray 方法

ArrayList
.
.
::
.
ToArray 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

将 ArrayList 的元素复制到新数组中。

名称 说明
页首

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.ToArray 方法

ArrayList
.
.
::
.
ToArray 方法
ArrayList 类

将 ArrayList 的元素复制到新 Object 数组中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ToArray As Object()
public virtual Object[] ToArray()
public:
virtual array<Object^>^ ToArray()
abstract ToArray : unit -> Object[]
override ToArray : unit -> Object[]

返回值

类型：
array<
System Object
>
[]
()
[]

Object 数组，它包含 ArrayList 中元素的副本。

元素使用 Array..::.Copy 来进行复制，后者为一种 O(n) 运算，其中 n 为 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
ToArray 重载
System.Collections 命名空间


ArrayList ..::.ToArray 方法 (Type)

ArrayList
.
.
::
.
ToArray 方法 (Type)
ArrayList 类

将 ArrayList 的元素复制到指定元素类型的新数组中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ToArray ( _
    type As Type _
) As Array
public virtual Array ToArray(
    Type type
)
public:
virtual Array^ ToArray(
    Type^ type
)
abstract ToArray :
        type:Type -> Array
override ToArray :
        type:Type -> Array

参数

type
类型： System Type
要创建并向其复制元素的目标数组的元素 Type。

返回值

类型： System Array
指定元素类型的数组，它包含 ArrayList 中元素的副本。
异常 | 条件
ArgumentNullException | type 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | 源 ArrayList 的类型不能自动转换为指定类型。

ArrayList 对象中的所有对象将强制转换为 type 参数中指定的 Type。

元素使用 Array..::.Copy 来进行复制，后者为一种 O(n) 运算，其中 n 为 Count。

下面的复制示例演示如何将 ArrayList 的元素复制到字符串数组。

Imports System
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Displays the values of the ArrayList.
        Console.WriteLine("The ArrayList contains the following values:")
        PrintIndexAndValues(myAL)

        ' Copies the elements of the ArrayList to a string array.
        Dim myArr As String() = CType(myAL.ToArray(GetType(String)), String())

        ' Displays the contents of the string array.
        Console.WriteLine("The string array contains the following values:")
        PrintIndexAndValues(myArr)

    End Sub 'Main

    Overloads Public Shared Sub PrintIndexAndValues(myList As ArrayList)
        Dim i As Integer = 0
        Dim o As [Object]
        For Each o In  myList
            Console.WriteLine("        [{0}]:    {1}", i, o)
            i = i + 1
        Next o
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    Overloads Public Shared Sub PrintIndexAndValues(myArr() As String)
        Dim i As Integer
        For i = 0 To myArr.Length - 1
            Console.WriteLine("        [{0}]:    {1}", i, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

'This code produces the following output.
'
'The ArrayList contains the following values:
'        [0]:    The
'        [1]:    quick
'        [2]:    brown
'        [3]:    fox
'        [4]:    jumped
'        [5]:    over
'        [6]:    the
'        [7]:    lazy
'        [8]:    dog
'
'The string array contains the following values:
'        [0]:    The
'        [1]:    quick
'        [2]:    brown
'        [3]:    fox
'        [4]:    jumped
'        [5]:    over
'        [6]:    the
'        [7]:    lazy
'        [8]:    dog

using System;
using System.Collections;

public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList contains the following values:" );
      PrintIndexAndValues( myAL );

      // Copies the elements of the ArrayList to a string array.
      String[] myArr = (String[]) myAL.ToArray( typeof( string ) );

      // Displays the contents of the string array.
      Console.WriteLine( "The string array contains the following values:" );
      PrintIndexAndValues( myArr );

   }

   public static void PrintIndexAndValues( ArrayList myList )  {
      int i = 0;
      foreach ( Object o in myList )
         Console.WriteLine( "\t[{0}]:\t{1}", i++, o );
      Console.WriteLine();
   }

   public static void PrintIndexAndValues( String[] myArr )  {
      for ( int i = 0; i < myArr.Length; i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArr[i] );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

The ArrayList contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

The string array contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( ArrayList^ myList );
void PrintIndexAndValues( array<String^>^myArr );
int main()
{
   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList contains the following values:" );
   PrintIndexAndValues( myAL );

   // Copies the elements of the ArrayList to a string array.
   array<String^>^myArr = reinterpret_cast<array<String^>^>(myAL->ToArray( String::typeid ));

   // Displays the contents of the string array.
   Console::WriteLine( "The string array contains the following values:" );
   PrintIndexAndValues( myArr );
}

void PrintIndexAndValues( ArrayList^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ o = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "\t[{0}]:\t{1}", i++, o );
   }

   Console::WriteLine();
}

void PrintIndexAndValues( array<String^>^myArr )
{
   for ( int i = 0; i < myArr->Length; i++ )
      Console::WriteLine( "\t[{0}]:\t{1}", i, myArr[ i ] );
   Console::WriteLine();
}

/*
This code produces the following output.

The ArrayList contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

The string array contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumped
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
ToArray 重载
System.Collections 命名空间
Type


ArrayList ..::.TrimToSize 方法

ArrayList
.
.
::
.
TrimToSize 方法
ArrayList 类

将容量设置为 ArrayList 中元素的实际数目。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub TrimToSize
public virtual void TrimToSize()
public:
virtual void TrimToSize()
abstract TrimToSize : unit -> unit
override TrimToSize : unit -> unit
异常 | 条件
NotSupportedException | ArrayList 是只读的。 - 或 - ArrayList 具有固定大小。

如果不向集合中添加新元素，则此方法可用于最小化集合的内存开销。

若要将 ArrayList 重置为它的初始状态，请在调用 TrimToSize 之前调用 Clear 方法。修整空 ArrayList 会将 ArrayList 的容量设置为默认容量。 若要将 ArrayList 重置为它的初始状态，请在调用 TrimToSize 之前调用 Clear 方法。修整空 ArrayList 会将 ArrayList 的容量设置为默认容量。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何裁减 ArrayList 中未使用的部分以及如何清除 ArrayList 的值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("Initially,")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)

        ' Trim the ArrayList.
        myAL.TrimToSize()

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("After TrimToSize,")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)

        ' Clear the ArrayList.
        myAL.Clear()

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("After Clear,")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)

        ' Trim the ArrayList again.
        myAL.TrimToSize()

        ' Displays the count, capacity and values of the ArrayList.
        Console.WriteLine("After the second TrimToSize,")
        Console.WriteLine("   Count    : {0}", myAL.Count)
        Console.WriteLine("   Capacity : {0}", myAL.Capacity)
        Console.Write("   Values:")
        PrintValues(myAL)
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' Initially,
'    Count    : 5
'    Capacity : 16
'    Values:    The    quick    brown    fox    jumped
' After TrimToSize,
'    Count    : 5
'    Capacity : 5
'    Values:    The    quick    brown    fox    jumped
' After Clear,
'    Count    : 0
'    Capacity : 5
'    Values:
' After the second TrimToSize,
'    Count    : 0
'    Capacity : 16
'    Values:

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "Initially," );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );

      // Trim the ArrayList.
      myAL.TrimToSize();

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "After TrimToSize," );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );

      // Clear the ArrayList.
      myAL.Clear();

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "After Clear," );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );

      // Trim the ArrayList again.
      myAL.TrimToSize();

      // Displays the count, capacity and values of the ArrayList.
      Console.WriteLine( "After the second TrimToSize," );
      Console.WriteLine( "   Count    : {0}", myAL.Count );
      Console.WriteLine( "   Capacity : {0}", myAL.Capacity );
      Console.Write( "   Values:" );
      PrintValues( myAL );
   }

   public static void PrintValues( IEnumerable myList )  {
      foreach ( Object obj in myList )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }

}
/*
This code produces the following output.

Initially,
   Count    : 5
   Capacity : 16
   Values:    The    quick    brown    fox    jumped
After TrimToSize,
   Count    : 5
   Capacity : 5
   Values:    The    quick    brown    fox    jumped
After Clear,
   Count    : 0
   Capacity : 5
   Values:
After the second TrimToSize,
   Count    : 0
   Capacity : 16
   Values:
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "Initially," );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );

   // Trim the ArrayList.
   myAL->TrimToSize();

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "After TrimToSize," );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );

   // Clear the ArrayList.
   myAL->Clear();

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "After Clear," );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );

   // Trim the ArrayList again.
   myAL->TrimToSize();

   // Displays the count, capacity and values of the ArrayList.
   Console::WriteLine( "After the second TrimToSize," );
   Console::WriteLine( "   Count    : {0}", myAL->Count );
   Console::WriteLine( "   Capacity : {0}", myAL->Capacity );
   Console::Write( "   Values:" );
   PrintValues( myAL );
}

void PrintValues( IEnumerable^ myList )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "   {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Initially,
    Count    : 5
    Capacity : 16
    Values:    The    quick    brown    fox    jumped
 After TrimToSize,
    Count    : 5
    Capacity : 5
    Values:    The    quick    brown    fox    jumped
 After Clear,
    Count    : 0
    Capacity : 5
    Values:
 After the second TrimToSize,
    Count    : 0
    Capacity : 16
    Values:
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
Clear
Capacity
Count


ArrayList 属性

ArrayList 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ArrayList 类

ArrayList 类型公开以下成员。

名称 说明
页首

参考

ArrayList 类
System.Collections 命名空间


ArrayList ..::.Capacity 属性

ArrayList
.
.
::
.
Capacity 属性
ArrayList 类

获取或设置 ArrayList 可包含的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Property Capacity As Integer
    Get
    Set
public virtual int Capacity { get; set; }
public:
virtual property int Capacity {
    int get ();
    void set (int value);
}
abstract Capacity : int with get, set
override Capacity : int with get, set

属性值

类型： System Int32
ArrayList 可包含的元素数。
异常 | 条件
ArgumentOutOfRangeException | Capacity 设置为小于 Count 的值。
OutOfMemoryException | 系统中没有足够的可用内存。

Capacity 是 ArrayList 可以存储的元素数。Count 是 ArrayList 中的实际元素数。 Capacity 是 ArrayList 可以存储的元素数。Count 是 ArrayList 中的实际元素数。

Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来使容量自动增加。 Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来使容量自动增加。

可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。如果显式设置 Capacity 的值，内部数组也会重新分配以适应指定的容量。 可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。如果显式设置 Capacity 的值，内部数组也会重新分配以适应指定的容量。

检索此属性值的运算复杂度为 O(1)；设置此属性的运算复杂度为 O(n)，其中，n 是新容量。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
Count


ArrayList ..::.Count 属性

ArrayList
.
.
::
.
Count 属性
ArrayList 类

获取 ArrayList 中实际包含的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Count As Integer
    Get
public virtual int Count { get; }
public:
virtual property int Count {
    int get ();
}
abstract Count : int
override Count : int

属性值

类型： System Int32
ArrayList 中实际包含的元素数。

实现

Capacity 是 ArrayList 可以存储的元素数。Count 是 ArrayList 中的实际元素数。 Capacity 是 ArrayList 可以存储的元素数。Count 是 ArrayList 中的实际元素数。

Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来使容量自动增加。 Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来使容量自动增加。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
Capacity


ArrayList ..::.IsFixedSize 属性

ArrayList
.
.
::
.
IsFixedSize 属性
ArrayList 类

获取一个值，该值指示 ArrayList 是否具有固定大小。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsFixedSize As Boolean
    Get
public virtual bool IsFixedSize { get; }
public:
virtual property bool IsFixedSize {
    bool get ();
}
abstract IsFixedSize : bool
override IsFixedSize : bool

属性值

类型： System Boolean
如果 ArrayList 具有固定大小，则为 true；否则为 false。默认值为 false。 如果 ArrayList 具有固定大小，则为 true；否则为 false。默认值为 false。

实现

具有固定大小的集合在创建之后不能再添加或移除元素，但是允许修改现有元素。

固定大小的集合只是一个具有用于防止添加和移除元素的包装的集合；因此，如果更改基础集合（包括添加和移除元素），则固定大小的集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例演示如何在 ArrayList 周围创建一个大小固定的包装。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")
        myAL.Add("jumped")
        myAL.Add("over")
        myAL.Add("the")
        myAL.Add("lazy")
        myAL.Add("dog")

        ' Create a fixed-size wrapper around the ArrayList.
        Dim myFixedSizeAL As ArrayList = ArrayList.FixedSize(myAL)

        ' Display whether the ArrayLists have a fixed size or not.
        Dim msg As String
        If myAL.IsFixedSize Then
            msg = "has a fixed size"
        Else
            msg = "does not have a fixed size"
        End If
        Console.WriteLine("myAL {0}.", msg)
        If myFixedSizeAL.IsFixedSize Then
            msg = "has a fixed size"
        Else
            msg = "does not have a fixed size"
        End If
        Console.WriteLine("myFixedSizeAL {0}.", msg)
        Console.WriteLine()

        ' Display both ArrayLists.
        Console.WriteLine("Initially,")
        Console.Write("Standard  :")
        PrintValues(myAL, " "c)
        Console.Write("Fixed size:")
        PrintValues(myFixedSizeAL, " "c)

        ' Sort is allowed in the fixed-size ArrayList.
        myFixedSizeAL.Sort()

        ' Display both ArrayLists.
        Console.WriteLine("After Sort,")
        Console.Write("Standard  :")
        PrintValues(myAL, " "c)
        Console.Write("Fixed size:")
        PrintValues(myFixedSizeAL, " "c)

        ' Reverse is allowed in the fixed-size ArrayList.
        myFixedSizeAL.Reverse()

        ' Display both ArrayLists.
        Console.WriteLine("After Reverse,")
        Console.Write("Standard  :")
        PrintValues(myAL, " "c)
        Console.Write("Fixed size:")
        PrintValues(myFixedSizeAL, " "c)

        ' Add an element to the standard ArrayList.
        myAL.Add("AddMe")

        ' Display both ArrayLists.
        Console.WriteLine("After adding to the standard ArrayList,")
        Console.Write("Standard  :")
        PrintValues(myAL, " "c)
        Console.Write("Fixed size:")
        PrintValues(myFixedSizeAL, " "c)
        Console.WriteLine()

        ' Adding or inserting elements to the fixed-size ArrayList throws an exception.
        Try
            myFixedSizeAL.Add("AddMe2")
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try
        Try
            myFixedSizeAL.Insert(3, "InsertMe")
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try
    End Sub 'Main

    Public Shared Sub PrintValues(myList As IEnumerable, mySeparator As Char)
        Dim obj As [Object]
        For Each obj In  myList
            Console.Write("{0}{1}", mySeparator, obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' myAL does not have a fixed size.
' myFixedSizeAL has a fixed size.
'
' Initially,
' Standard  : The quick brown fox jumped over the lazy dog
' Fixed size: The quick brown fox jumped over the lazy dog
' After Sort,
' Standard  : brown dog fox jumped lazy over quick the The
' Fixed size: brown dog fox jumped lazy over quick the The
' After Reverse,
' Standard  : The the quick over lazy jumped fox dog brown
' Fixed size: The the quick over lazy jumped fox dog brown
' After adding to the standard ArrayList,
' Standard  : The the quick over lazy jumped fox dog brown AddMe
' Fixed size: The the quick over lazy jumped fox dog brown AddMe
'
' Exception: System.NotSupportedException: Collection was of a fixed size.
'    at System.Collections.FixedSizeArrayList.Add(Object obj)
'    at SamplesArrayList.Main()
' Exception: System.NotSupportedException: Collection was of a fixed size.
'    at System.Collections.FixedSizeArrayList.Insert(Int32 index, Object obj)
'    at SamplesArrayList.Main()

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumped" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Create a fixed-size wrapper around the ArrayList.
      ArrayList myFixedSizeAL = ArrayList.FixedSize( myAL );

      // Display whether the ArrayLists have a fixed size or not.
      Console.WriteLine( "myAL {0}.", myAL.IsFixedSize ? "has a fixed size" : "does not have a fixed size" );
      Console.WriteLine( "myFixedSizeAL {0}.", myFixedSizeAL.IsFixedSize ? "has a fixed size" : "does not have a fixed size" );
      Console.WriteLine();

      // Display both ArrayLists.
      Console.WriteLine( "Initially," );
      Console.Write( "Standard  :" );
      PrintValues( myAL, ' ' );
      Console.Write( "Fixed size:" );
      PrintValues( myFixedSizeAL, ' ' );

      // Sort is allowed in the fixed-size ArrayList.
      myFixedSizeAL.Sort();

      // Display both ArrayLists.
      Console.WriteLine( "After Sort," );
      Console.Write( "Standard  :" );
      PrintValues( myAL, ' ' );
      Console.Write( "Fixed size:" );
      PrintValues( myFixedSizeAL, ' ' );

      // Reverse is allowed in the fixed-size ArrayList.
      myFixedSizeAL.Reverse();

      // Display both ArrayLists.
      Console.WriteLine( "After Reverse," );
      Console.Write( "Standard  :" );
      PrintValues( myAL, ' ' );
      Console.Write( "Fixed size:" );
      PrintValues( myFixedSizeAL, ' ' );

      // Add an element to the standard ArrayList.
      myAL.Add( "AddMe" );

      // Display both ArrayLists.
      Console.WriteLine( "After adding to the standard ArrayList," );
      Console.Write( "Standard  :" );
      PrintValues( myAL, ' ' );
      Console.Write( "Fixed size:" );
      PrintValues( myFixedSizeAL, ' ' );
      Console.WriteLine();

      // Adding or inserting elements to the fixed-size ArrayList throws an exception.
      try  {
         myFixedSizeAL.Add( "AddMe2" );
      } catch ( Exception myException )  {
         Console.WriteLine("Exception: " + myException.ToString());
      }
      try  {
         myFixedSizeAL.Insert( 3, "InsertMe" );
      } catch ( Exception myException )  {
         Console.WriteLine("Exception: " + myException.ToString());
      }
   }

   public static void PrintValues( IEnumerable myList, char mySeparator )  {
      foreach ( Object obj in myList )
         Console.Write( "{0}{1}", mySeparator, obj );
      Console.WriteLine();
   }

}
/*
This code produces the following output.

myAL does not have a fixed size.
myFixedSizeAL has a fixed size.

Initially,
Standard  : The quick brown fox jumped over the lazy dog
Fixed size: The quick brown fox jumped over the lazy dog
After Sort,
Standard  : brown dog fox jumped lazy over quick the The
Fixed size: brown dog fox jumped lazy over quick the The
After Reverse,
Standard  : The the quick over lazy jumped fox dog brown
Fixed size: The the quick over lazy jumped fox dog brown
After adding to the standard ArrayList,
Standard  : The the quick over lazy jumped fox dog brown AddMe
Fixed size: The the quick over lazy jumped fox dog brown AddMe

Exception: System.NotSupportedException: Collection was of a fixed size.
   at System.Collections.FixedSizeArrayList.Add(Object obj)
   at SamplesArrayList.Main()
Exception: System.NotSupportedException: Collection was of a fixed size.
   at System.Collections.FixedSizeArrayList.Insert(Int32 index, Object obj)
   at SamplesArrayList.Main()

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, char mySeparator );
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumped" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Create a fixed-size wrapper around the ArrayList.
   ArrayList^ myFixedSizeAL = ArrayList::FixedSize( myAL );

   // Display whether the ArrayLists have a fixed size or not.
   Console::WriteLine( "myAL {0}.", myAL->IsFixedSize ? (String^)"has a fixed size" : "does not have a fixed size" );
   Console::WriteLine( "myFixedSizeAL {0}.", myFixedSizeAL->IsFixedSize ? (String^)"has a fixed size" : "does not have a fixed size" );
   Console::WriteLine();

   // Display both ArrayLists.
   Console::WriteLine( "Initially," );
   Console::Write( "Standard  :" );
   PrintValues( myAL, ' ' );
   Console::Write( "Fixed size:" );
   PrintValues( myFixedSizeAL, ' ' );

   // Sort is allowed in the fixed-size ArrayList.
   myFixedSizeAL->Sort();

   // Display both ArrayLists.
   Console::WriteLine( "After Sort," );
   Console::Write( "Standard  :" );
   PrintValues( myAL, ' ' );
   Console::Write( "Fixed size:" );
   PrintValues( myFixedSizeAL, ' ' );

   // Reverse is allowed in the fixed-size ArrayList.
   myFixedSizeAL->Reverse();

   // Display both ArrayLists.
   Console::WriteLine( "After Reverse," );
   Console::Write( "Standard  :" );
   PrintValues( myAL, ' ' );
   Console::Write( "Fixed size:" );
   PrintValues( myFixedSizeAL, ' ' );

   // Add an element to the standard ArrayList.
   myAL->Add( "AddMe" );

   // Display both ArrayLists.
   Console::WriteLine( "After adding to the standard ArrayList," );
   Console::Write( "Standard  :" );
   PrintValues( myAL, ' ' );
   Console::Write( "Fixed size:" );
   PrintValues( myFixedSizeAL, ' ' );
   Console::WriteLine();

   // Adding or inserting elements to the fixed-size ArrayList throws an exception.
   try
   {
      myFixedSizeAL->Add( "AddMe2" );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

   try
   {
      myFixedSizeAL->Insert( 3, "InsertMe" );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

}

void PrintValues( IEnumerable^ myList, char mySeparator )
{
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 myAL does not have a fixed size.
 myFixedSizeAL has a fixed size.

 Initially,
 Standard  : The quick brown fox jumped over the lazy dog
 Fixed size: The quick brown fox jumped over the lazy dog
 After Sort,
 Standard  : brown dog fox jumped lazy over quick the The
 Fixed size: brown dog fox jumped lazy over quick the The
 After Reverse,
 Standard  : The the quick over lazy jumped fox dog brown
 Fixed size: The the quick over lazy jumped fox dog brown
 After adding to the standard ArrayList,
 Standard  : The the quick over lazy jumped fox dog brown AddMe
 Fixed size: The the quick over lazy jumped fox dog brown AddMe

 Exception: System.NotSupportedException: Collection was of a fixed size.
    at System.Collections.FixedSizeArrayList.Add(Object obj)
    at SamplesArrayList.Main()
 Exception: System.NotSupportedException: Collection was of a fixed size.
    at System.Collections.FixedSizeArrayList.Insert(Int32 index, Object obj)
    at SamplesArrayList.Main()

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间


ArrayList ..::.IsReadOnly 属性

ArrayList
.
.
::
.
IsReadOnly 属性
ArrayList 类

获取一个值，该值指示 ArrayList 是否为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsReadOnly As Boolean
    Get
public virtual bool IsReadOnly { get; }
public:
virtual property bool IsReadOnly {
    bool get ();
}
abstract IsReadOnly : bool
override IsReadOnly : bool

属性值

类型： System Boolean
如果 ArrayList 为只读，则为 true；否则为 false。默认值为 false。 如果 ArrayList 为只读，则为 true；否则为 false。默认值为 false。

实现

只读集合在创建后就不能再添加、移除或修改元素。

只读集合只是一个具有用于防止修改的包装的集合；因此，如果更改基础集合，则只读集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例演示如何在 ArrayList 周围创建一个只读包装，以及如何确定 ArrayList 是否为只读。

Imports System
Imports System.Collections

Public Class SamplesArrayList

   Public Shared Sub Main()

      Dim myStr As [String]

      ' Creates and initializes a new ArrayList.
      Dim myAL As New ArrayList()
      myAL.Add("red")
      myAL.Add("orange")
      myAL.Add("yellow")

      ' Creates a read-only copy of the ArrayList.
      Dim myReadOnlyAL As ArrayList = ArrayList.ReadOnly(myAL)

      ' Displays whether the ArrayList is read-only or writable.
      If myAL.IsReadOnly Then
         Console.WriteLine("myAL is read-only.")
      Else
         Console.WriteLine("myAL is writable.")
      End If
      If myReadOnlyAL.IsReadOnly Then
         Console.WriteLine("myReadOnlyAL is read-only.")
      Else
         Console.WriteLine("myReadOnlyAL is writable.")
      End If

      ' Displays the contents of both collections.
      Console.WriteLine()
      Console.WriteLine("Initially,")
      Console.WriteLine("The original ArrayList myAL contains:")
      For Each myStr In  myAL
         Console.WriteLine("   {0}", myStr)
      Next myStr
      Console.WriteLine("The read-only ArrayList myReadOnlyAL contains:")
      For Each myStr In  myReadOnlyAL
         Console.WriteLine("   {0}", myStr)
      Next myStr

      ' Adding an element to a read-only ArrayList throws an exception.
      Console.WriteLine()
      Console.WriteLine("Trying to add a new element to the read-only ArrayList:")
      Try
         myReadOnlyAL.Add("green")
      Catch myException As Exception
         Console.WriteLine(("Exception: " + myException.ToString()))
      End Try

      ' Adding an element to the original ArrayList affects the read-only ArrayList.
      myAL.Add("blue")

      ' Displays the contents of both collections again.
      Console.WriteLine()
      Console.WriteLine("After adding a new element to the original ArrayList,")
      Console.WriteLine("The original ArrayList myAL contains:")
      For Each myStr In  myAL
         Console.WriteLine("   {0}", myStr)
      Next myStr
      Console.WriteLine("The read-only ArrayList myReadOnlyAL contains:")
      For Each myStr In  myReadOnlyAL
         Console.WriteLine("   {0}", myStr)
      Next myStr

   End Sub 'Main

End Class 'SamplesArrayList

'This code produces the following output.
'
'myAL is writable.
'myReadOnlyAL is read-only.
'
'Initially,
'The original ArrayList myAL contains:
'   red
'   orange
'   yellow
'The read-only ArrayList myReadOnlyAL contains:
'   red
'   orange
'   yellow
'
'Trying to add a new element to the read-only ArrayList:
'Exception: System.NotSupportedException: Collection is read-only.
'   at System.Collections.ReadOnlyArrayList.Add(Object obj)
'   at SamplesArrayList.Main()
'
'After adding a new element to the original ArrayList,
'The original ArrayList myAL contains:
'   red
'   orange
'   yellow
'   blue
'The read-only ArrayList myReadOnlyAL contains:
'   red
'   orange
'   yellow
'   blue

 using System;
 using System.Collections;
 public class SamplesArrayList  {

    public static void Main()  {

       // Creates and initializes a new ArrayList.
       ArrayList myAL = new ArrayList();
       myAL.Add( "red" );
       myAL.Add( "orange" );
       myAL.Add( "yellow" );

       // Creates a read-only copy of the ArrayList.
       ArrayList myReadOnlyAL = ArrayList.ReadOnly( myAL );

       // Displays whether the ArrayList is read-only or writable.
       Console.WriteLine( "myAL is {0}.", myAL.IsReadOnly ? "read-only" : "writable" );
       Console.WriteLine( "myReadOnlyAL is {0}.", myReadOnlyAL.IsReadOnly ? "read-only" : "writable" );

       // Displays the contents of both collections.
       Console.WriteLine( "\nInitially," );
       Console.WriteLine( "The original ArrayList myAL contains:" );
       foreach ( String myStr in myAL )
          Console.WriteLine( "   {0}", myStr );
       Console.WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
       foreach ( String myStr in myReadOnlyAL )
          Console.WriteLine( "   {0}", myStr );

       // Adding an element to a read-only ArrayList throws an exception.
       Console.WriteLine( "\nTrying to add a new element to the read-only ArrayList:" );
       try  {
          myReadOnlyAL.Add("green");
       } catch ( Exception myException )  {
          Console.WriteLine("Exception: " + myException.ToString());
       }

       // Adding an element to the original ArrayList affects the read-only ArrayList.
       myAL.Add( "blue" );

       // Displays the contents of both collections again.
       Console.WriteLine( "\nAfter adding a new element to the original ArrayList," );
       Console.WriteLine( "The original ArrayList myAL contains:" );
       foreach ( String myStr in myAL )
          Console.WriteLine( "   {0}", myStr );
       Console.WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
       foreach ( String myStr in myReadOnlyAL )
          Console.WriteLine( "   {0}", myStr );

    }

 }

/*
This code produces the following output.

myAL is writable.
myReadOnlyAL is read-only.

Initially,
The original ArrayList myAL contains:
   red
   orange
   yellow
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow

Trying to add a new element to the read-only ArrayList:
Exception: System.NotSupportedException: Collection is read-only.
   at System.Collections.ReadOnlyArrayList.Add(Object obj)
   at SamplesArrayList.Main()

After adding a new element to the original ArrayList,
The original ArrayList myAL contains:
   red
   orange
   yellow
   blue
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow
   blue

*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "red" );
   myAL->Add( "orange" );
   myAL->Add( "yellow" );

   // Creates a read-only copy of the ArrayList.
   ArrayList^ myReadOnlyAL = ArrayList::ReadOnly( myAL );

   // Displays whether the ArrayList is read-only or writable.
   Console::WriteLine( "myAL is {0}.", myAL->IsReadOnly ? (String^)"read-only" : "writable" );
   Console::WriteLine( "myReadOnlyAL is {0}.", myReadOnlyAL->IsReadOnly ? (String^)"read-only" : "writable" );

   // Displays the contents of both collections.
   Console::WriteLine( "\nInitially," );
   Console::WriteLine( "The original ArrayList myAL contains:" );
   for ( int i(0); i < myAL->Count; ++i )
      Console::WriteLine(  "   {0}", static_cast<String^>(myAL[ i ]) );
   Console::WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
   for ( int i(0); i < myReadOnlyAL->Count; ++i )
      Console::WriteLine( "   {0}", static_cast<String^>(myReadOnlyAL[ i ]) );

   // Adding an element to a read-only ArrayList throws an exception.
   Console::WriteLine( "\nTrying to add a new element to the read-only ArrayList:" );
   try
   {
      myReadOnlyAL->Add( "green" );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( String::Concat( "Exception: ", myException->ToString() ) );
   }

   // Adding an element to the original ArrayList affects the read-only ArrayList.
   myAL->Add( "blue" );

   // Displays the contents of both collections again.
   Console::WriteLine( "\nAfter adding a new element to the original ArrayList," );
   Console::WriteLine( "The original ArrayList myAL contains:" );
   for ( int i(0); i < myAL->Count; ++i )
      Console::WriteLine( "   {0}", static_cast<String^>(myAL[ i ]) );
   Console::WriteLine( "The read-only ArrayList myReadOnlyAL contains:" );
   for ( int i(0); i < myReadOnlyAL->Count; ++i )
      Console::WriteLine( "   {0}", static_cast<String^>(myReadOnlyAL[ i ]) );
}

/*
This code produces the following output.

myAL is writable.
myReadOnlyAL is read-only.

Initially,
The original ArrayList myAL contains:
   red
   orange
   yellow
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow

Trying to add a new element to the read-only ArrayList:
Exception: System.NotSupportedException: Collection is read-only.
   at System.Collections.ReadOnlyArrayList.Add(Object obj)
   at SamplesArrayList.Main()

After adding a new element to the original ArrayList,
The original ArrayList myAL contains:
   red
   orange
   yellow
   blue
The read-only ArrayList myReadOnlyAL contains:
   red
   orange
   yellow
   blue

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
ReadOnly


ArrayList ..::.IsSynchronized 属性

ArrayList
.
.
::
.
IsSynchronized 属性
ArrayList 类

获取一个值，该值指示是否同步对 ArrayList 的访问（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsSynchronized As Boolean
    Get
public virtual bool IsSynchronized { get; }
public:
virtual property bool IsSynchronized {
    bool get ();
}
abstract IsSynchronized : bool
override IsSynchronized : bool

属性值

类型： System Boolean
如果对 ArrayList 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。 如果对 ArrayList 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。

实现

若要保证 ArrayList 的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。

Dim myCollection As New ArrayList()

SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

ArrayList myCollection = new ArrayList();

lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

ArrayList^ myCollection = gcnew ArrayList();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例演示如何同步 ArrayList、如何确定 ArrayList 是否同步以及如何使用同步的 ArrayList。

Imports System
Imports System.Collections

Public Class SamplesArrayList

    Public Shared Sub Main()

        ' Creates and initializes a new ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("The")
        myAL.Add("quick")
        myAL.Add("brown")
        myAL.Add("fox")

        ' Creates a synchronized wrapper around the ArrayList.
        Dim mySyncdAL As ArrayList = ArrayList.Synchronized(myAL)

        ' Displays the sychronization status of both ArrayLists.
        Dim str As String
        If myAL.IsSynchronized Then
            str = "synchronized"
        Else
            str = "not synchronized"
        End If
        Console.WriteLine("myAL is {0}.", str)
        If mySyncdAL.IsSynchronized Then
            str = "synchronized"
        Else
            str = "not synchronized"
        End If
        Console.WriteLine("mySyncdAL is {0}.", str)
    End Sub
End Class

' This code produces the following output.
'
' myAL is not synchronized.
' mySyncdAL is synchronized.

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );

      // Creates a synchronized wrapper around the ArrayList.
      ArrayList mySyncdAL = ArrayList.Synchronized( myAL );

      // Displays the sychronization status of both ArrayLists.
      Console.WriteLine( "myAL is {0}.", myAL.IsSynchronized ? "synchronized" : "not synchronized" );
      Console.WriteLine( "mySyncdAL is {0}.", mySyncdAL.IsSynchronized ? "synchronized" : "not synchronized" );
   }
}
/*
This code produces the following output.

myAL is not synchronized.
mySyncdAL is synchronized.
*/

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new ArrayList instance.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );

   // Creates a synchronized wrapper around the ArrayList.
   ArrayList^ mySyncdAL = ArrayList::Synchronized( myAL );

   // Displays the sychronization status of both ArrayLists.
   String^ szRes = myAL->IsSynchronized ?  (String^)"synchronized" :  "not synchronized";
   Console::WriteLine(  "myAL is {0}.", szRes );
   String^ szSyncRes = mySyncdAL->IsSynchronized ?  (String^)"synchronized" :  "not synchronized";
   Console::WriteLine(  "mySyncdAL is {0}.", szSyncRes );
}

/*
 This code produces the following output.

 myAL is not synchronized.
 mySyncdAL is synchronized.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
SyncRoot
Synchronized


ArrayList ..::.Item 属性

ArrayList
.
.
::
.
Item 属性
ArrayList 类

获取或设置指定索引处的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Property Item ( _
    index As Integer _
) As Object
    Get
    Set
public virtual Object this[
    int index
] { get; set; }
public:
virtual property Object^ Item[int index] {
    Object^ get (int index);
    void set (int index, Object^ value);
}
abstract Item : Object with get, set
override Item : Object with get, set

参数

index
类型： System Int32
要获得或设置的元素从零开始的索引。

属性值

类型： System Object
指定索引处的元素。

实现

异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 等于或大于 Count。

ArrayList 接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

可以使用下面的语法通过此属性访问集合中的特定元素：myCollection[index]。

C# 语言使用 this 关键字来定义索引器而不是通过实现 Item 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。 C# 语言使用 this 关键字来定义索引器而不是通过实现 Item 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。

检索此属性值的运算复杂度是 O(1)；设置此属性的运算复杂度也是 O(1)。

下面的代码示例创建一个 ArrayList 并添加多个项。该示例演示如何使用 Item 属性（在 C# 中为索引器)访问元素，并通过为指定索引的 Item 属性赋新值来更改该元素。该示例还演示 Item 属性不能用于在列表的当前大小之外访问或添加元素。 下面的代码示例创建一个 ArrayList 并添加多个项。该示例演示如何使用 Item 属性（在 C# 中为索引器)访问元素，并通过为指定索引的 Item 属性赋新值来更改该元素。该示例还演示 Item 属性不能用于在列表的当前大小之外访问或添加元素。 下面的代码示例创建一个 ArrayList 并添加多个项。该示例演示如何使用 Item 属性（在 C# 中为索引器)访问元素，并通过为指定索引的 Item 属性赋新值来更改该元素。该示例还演示 Item 属性不能用于在列表的当前大小之外访问或添加元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class Example

    Public Shared Sub Main

        ' Create an empty ArrayList, and add some elements.
        Dim stringList As New ArrayList

        stringList.Add("a")
        stringList.Add("abc")
        stringList.Add("abcdef")
        stringList.Add("abcdefg")

        ' Item is the default property, so the property name is
        ' not required.
        Console.WriteLine("Element {0} is ""{1}""", 2, stringList(2))

        ' Assigning a value to the property changes the value of
        ' the indexed element.
        stringList(2) = "abcd"
        Console.WriteLine("Element {0} is ""{1}""", 2, stringList(2))

        ' Accessing an element outside the current element count
        ' causes an exception. The ArrayList index is zero-based,
        ' so the index of the last element is (Count - 1).
        Console.WriteLine("Number of elements in the list: {0}", _
            stringList.Count)
        Try
            Console.WriteLine("Element {0} is ""{1}""", _
                stringList.Count, _
                stringList(stringList.Count))
        Catch aoore As ArgumentOutOfRangeException
            Console.WriteLine("stringList({0}) is out of range.", _
                stringList.Count)
        End Try

        ' You cannot use the Item property to add new elements.
        Try
            stringList(stringList.Count) = "42"
        Catch aoore As ArgumentOutOfRangeException
            Console.WriteLine("stringList({0}) is out of range.", _
                stringList.Count)
        End Try

        Console.WriteLine()
        For i As Integer = 0 To stringList.Count - 1
            Console.WriteLine("Element {0} is ""{1}""", i, stringList(i))
        Next

        Console.WriteLine()
        For Each o As Object In stringList
            Console.WriteLine(o)
        Next

    End Sub

End Class
'
' This code example produces the following output:
'
'Element 2 is "abcdef"
'Element 2 is "abcd"
'Number of elements in the list: 4
'stringList(4) is out of range.
'stringList(4) is out of range.
'
'Element 0 is "a"
'Element 1 is "abc"
'Element 2 is "abcd"
'Element 3 is "abcdefg"
'
'a
'abc
'abcd
'abcdefg

using System;
using System.Collections;

public class Example
{
    public static void Main()
    {
        // Create an empty ArrayList, and add some elements.
        ArrayList stringList = new ArrayList();

        stringList.Add("a");
        stringList.Add("abc");
        stringList.Add("abcdef");
        stringList.Add("abcdefg");

        // The Item property is an indexer, so the property name is
        // not required.
        Console.WriteLine("Element {0} is \"{1}\"", 2, stringList[2]);

        // Assigning a value to the property changes the value of
        // the indexed element.
        stringList[2] = "abcd";
        Console.WriteLine("Element {0} is \"{1}\"", 2, stringList[2]);

        // Accessing an element outside the current element count
        // causes an exception.
        Console.WriteLine("Number of elements in the list: {0}",
            stringList.Count);
        try
        {
            Console.WriteLine("Element {0} is \"{1}\"",
                stringList.Count, stringList[stringList.Count]);
        }
        catch(ArgumentOutOfRangeException aoore)
        {
            Console.WriteLine("stringList({0}) is out of range.",
                stringList.Count);
        }

        // You cannot use the Item property to add new elements.
        try
        {
            stringList[stringList.Count] = "42";
        }
        catch(ArgumentOutOfRangeException aoore)
        {
            Console.WriteLine("stringList({0}) is out of range.",
                stringList.Count);
        }

        Console.WriteLine();
        for (int i = 0; i < stringList.Count; i++)
        {
            Console.WriteLine("Element {0} is \"{1}\"", i,
                stringList[i]);
        }

        Console.WriteLine();
        foreach (object o in stringList)
        {
            Console.WriteLine(o);
        }
    }
}
/*
 This code example produces the following output:

Element 2 is "abcdef"
Element 2 is "abcd"
Number of elements in the list: 4
stringList(4) is out of range.
stringList(4) is out of range.

Element 0 is "a"
Element 1 is "abc"
Element 2 is "abcd"
Element 3 is "abcdefg"

a
abc
abcd
abcdefg
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
Count


ArrayList ..::.SyncRoot 属性

ArrayList
.
.
::
.
SyncRoot 属性
ArrayList 类

获取可用于同步 ArrayList 访问的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property SyncRoot As Object
    Get
public virtual Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get ();
}
abstract SyncRoot : Object
override SyncRoot : Object

属性值

类型： System Object
可用于同步对 ArrayList 的访问的对象。

实现

若要创建 ArrayList 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 ArrayList 同步版本。同步代码必须在 ArrayList 的 SyncRoot 上执行操作，而不是直接在 ArrayList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 ArrayList 对象。 若要创建 ArrayList 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 ArrayList 同步版本。同步代码必须在 ArrayList 的 SyncRoot 上执行操作，而不是直接在 ArrayList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 ArrayList 对象。 若要创建 ArrayList 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 ArrayList 同步版本。同步代码必须在 ArrayList 的 SyncRoot 上执行操作，而不是直接在 ArrayList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 ArrayList 对象。 若要创建 ArrayList 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 ArrayList 同步版本。同步代码必须在 ArrayList 的 SyncRoot 上执行操作，而不是直接在 ArrayList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 ArrayList 对象。 若要创建 ArrayList 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 ArrayList 同步版本。同步代码必须在 ArrayList 的 SyncRoot 上执行操作，而不是直接在 ArrayList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 ArrayList 对象。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。

Dim myCollection As New ArrayList()

SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

ArrayList myCollection = new ArrayList();

lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

ArrayList^ myCollection = gcnew ArrayList();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ArrayList 类
ArrayList 成员
System.Collections 命名空间
IsSynchronized
Synchronized


BitArray 类

BitArray 类
成员

管理位值的压缩数组，该值表示为布尔值，其中 true 表示位是打开的 (1)，false 表示位是关闭的 (0)。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class BitArray _
    Implements ICollection, IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class BitArray : ICollection,
    IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class BitArray sealed : ICollection,
    IEnumerable, ICloneable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type BitArray =
    class
        interface ICollection
        interface IEnumerable
        interface ICloneable
    end

BitArray 的大小由客户端控制；编写索引时超过 BitArray 的结尾将引发 ArgumentException。

使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。 使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。

下面的代码示例演示如何创建和初始化 BitArray 以及如何打印出其值。

Imports System
Imports System.Collections

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes several BitArrays.
        Dim myBA1 As New BitArray(5)

        Dim myBA2 As New BitArray(5, False)

        Dim myBytes() As Byte = {1, 2, 3, 4, 5}
        Dim myBA3 As New BitArray(myBytes)

        Dim myBools() As Boolean = {True, False, True, True, False}
        Dim myBA4 As New BitArray(myBools)

        Dim myInts() As Integer = {6, 7, 8, 9, 10}
        Dim myBA5 As New BitArray(myInts)

        ' Displays the properties and values of the BitArrays.
        Console.WriteLine("myBA1")
        Console.WriteLine("   Count:    {0}", myBA1.Count)
        Console.WriteLine("   Length:   {0}", myBA1.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA1, 8)

        Console.WriteLine("myBA2")
        Console.WriteLine("   Count:    {0}", myBA2.Count)
        Console.WriteLine("   Length:   {0}", myBA2.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA2, 8)

        Console.WriteLine("myBA3")
        Console.WriteLine("   Count:    {0}", myBA3.Count)
        Console.WriteLine("   Length:   {0}", myBA3.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA3, 8)

        Console.WriteLine("myBA4")
        Console.WriteLine("   Count:    {0}", myBA4.Count)
        Console.WriteLine("   Length:   {0}", myBA4.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA4, 8)

        Console.WriteLine("myBA5")
        Console.WriteLine("   Count:    {0}", myBA5.Count)
        Console.WriteLine("   Length:   {0}", myBA5.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA5, 8)

    End Sub 'Main

    Public Shared Sub PrintValues(myList As IEnumerable, myWidth As Integer)
        Dim i As Integer = myWidth
        Dim obj As [Object]
        For Each obj In  myList
            If i <= 0 Then
                i = myWidth
                Console.WriteLine()
            End If
            i -= 1
            Console.Write("{0,8}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesBitArray

' This code produces the following output.
'
' myBA1
'    Count:    5
'    Length:   5
'    Values:
'    False   False   False   False   False
' myBA2
'    Count:    5
'    Length:   5
'    Values:
'    False   False   False   False   False
' myBA3
'    Count:    40
'    Length:   40
'    Values:
'     True   False   False   False   False   False   False   False
'    False    True   False   False   False   False   False   False
'     True    True   False   False   False   False   False   False
'    False   False    True   False   False   False   False   False
'     True   False    True   False   False   False   False   False
' myBA4
'    Count:    5
'    Length:   5
'    Values:
'     True   False    True    True   False
' myBA5
'    Count:    160
'    Length:   160
'    Values:
'    False    True    True   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'     True    True    True   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False    True   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'     True   False   False    True   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False    True   False    True   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False

 using System;
 using System.Collections;
 public class SamplesBitArray  {

    public static void Main()  {

       // Creates and initializes several BitArrays.
       BitArray myBA1 = new BitArray( 5 );

       BitArray myBA2 = new BitArray( 5, false );

       byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
       BitArray myBA3 = new BitArray( myBytes );

       bool[] myBools = new bool[5] { true, false, true, true, false };
       BitArray myBA4 = new BitArray( myBools );

       int[]  myInts  = new int[5] { 6, 7, 8, 9, 10 };
       BitArray myBA5 = new BitArray( myInts );

       // Displays the properties and values of the BitArrays.
       Console.WriteLine( "myBA1" );
       Console.WriteLine( "   Count:    {0}", myBA1.Count );
       Console.WriteLine( "   Length:   {0}", myBA1.Length );
       Console.WriteLine( "   Values:" );
       PrintValues( myBA1, 8 );

       Console.WriteLine( "myBA2" );
       Console.WriteLine( "   Count:    {0}", myBA2.Count );
       Console.WriteLine( "   Length:   {0}", myBA2.Length );
       Console.WriteLine( "   Values:" );
       PrintValues( myBA2, 8 );

       Console.WriteLine( "myBA3" );
       Console.WriteLine( "   Count:    {0}", myBA3.Count );
       Console.WriteLine( "   Length:   {0}", myBA3.Length );
       Console.WriteLine( "   Values:" );
       PrintValues( myBA3, 8 );

       Console.WriteLine( "myBA4" );
       Console.WriteLine( "   Count:    {0}", myBA4.Count );
       Console.WriteLine( "   Length:   {0}", myBA4.Length );
       Console.WriteLine( "   Values:" );
       PrintValues( myBA4, 8 );

       Console.WriteLine( "myBA5" );
       Console.WriteLine( "   Count:    {0}", myBA5.Count );
       Console.WriteLine( "   Length:   {0}", myBA5.Length );
       Console.WriteLine( "   Values:" );
       PrintValues( myBA5, 8 );
    }

    public static void PrintValues( IEnumerable myList, int myWidth )  {
       int i = myWidth;
       foreach ( Object obj in myList ) {
          if ( i <= 0 )  {
             i = myWidth;
             Console.WriteLine();
          }
          i--;
          Console.Write( "{0,8}", obj );
       }
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 myBA1
    Count:    5
    Length:   5
    Values:
    False   False   False   False   False
 myBA2
    Count:    5
    Length:   5
    Values:
    False   False   False   False   False
 myBA3
    Count:    40
    Length:   40
    Values:
     True   False   False   False   False   False   False   False
    False    True   False   False   False   False   False   False
     True    True   False   False   False   False   False   False
    False   False    True   False   False   False   False   False
     True   False    True   False   False   False   False   False
 myBA4
    Count:    5
    Length:   5
    Values:
     True   False    True    True   False
 myBA5
    Count:    160
    Length:   160
    Values:
    False    True    True   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
     True    True    True   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False    True   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
     True   False   False    True   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False    True   False    True   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
 */

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, int myWidth );
int main()
{

   // Creates and initializes several BitArrays.
   BitArray^ myBA1 = gcnew BitArray( 5 );
   BitArray^ myBA2 = gcnew BitArray( 5,false );
   array<Byte>^myBytes = {1,2,3,4,5};
   BitArray^ myBA3 = gcnew BitArray( myBytes );
   array<Boolean>^myBools = {true,false,true,true,false};
   BitArray^ myBA4 = gcnew BitArray( myBools );
   array<Int32>^myInts = {6,7,8,9,10};
   BitArray^ myBA5 = gcnew BitArray( myInts );

   // Displays the properties and values of the BitArrays.
   Console::WriteLine( "myBA1" );
   Console::WriteLine( "   Count:    {0}", myBA1->Count );
   Console::WriteLine( "   Length:   {0}", myBA1->Length );
   Console::WriteLine( "   Values:" );
   PrintValues( myBA1, 8 );
   Console::WriteLine( "myBA2" );
   Console::WriteLine( "   Count:    {0}", myBA2->Count );
   Console::WriteLine( "   Length:   {0}", myBA2->Length );
   Console::WriteLine( "   Values:" );
   PrintValues( myBA2, 8 );
   Console::WriteLine( "myBA3" );
   Console::WriteLine( "   Count:    {0}", myBA3->Count );
   Console::WriteLine( "   Length:   {0}", myBA3->Length );
   Console::WriteLine( "   Values:" );
   PrintValues( myBA3, 8 );
   Console::WriteLine( "myBA4" );
   Console::WriteLine( "   Count:    {0}", myBA4->Count );
   Console::WriteLine( "   Length:   {0}", myBA4->Length );
   Console::WriteLine( "   Values:" );
   PrintValues( myBA4, 8 );
   Console::WriteLine( "myBA5" );
   Console::WriteLine( "   Count:    {0}", myBA5->Count );
   Console::WriteLine( "   Length:   {0}", myBA5->Length );
   Console::WriteLine( "   Values:" );
   PrintValues( myBA5, 8 );
}

void PrintValues( IEnumerable^ myList, int myWidth )
{
   int i = myWidth;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      if ( i <= 0 )
      {
         i = myWidth;
         Console::WriteLine();
      }

      i--;
      Console::Write( "{0,8}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 myBA1
    Count:    5
    Length:   5
    Values:
    False   False   False   False   False
 myBA2
    Count:    5
    Length:   5
    Values:
    False   False   False   False   False
 myBA3
    Count:    40
    Length:   40
    Values:
     True   False   False   False   False   False   False   False
    False    True   False   False   False   False   False   False
     True    True   False   False   False   False   False   False
    False   False    True   False   False   False   False   False
     True   False    True   False   False   False   False   False
 myBA4
    Count:    5
    Length:   5
    Values:
     True   False    True    True   False
 myBA5
    Count:    160
    Length:   160
    Values:
    False    True    True   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
     True    True    True   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False    True   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
     True   False   False    True   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False    True   False    True   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
    False   False   False   False   False   False   False   False
 */

System.Collections System.Collections..::.BitArrayBitArray

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。

此实现不为 BitArray 提供同步的（线程安全）包装。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 成员
System.Collections 命名空间
System.Collections.Generic


BitArray 成员

BitArray 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BitArray 类

管理位值的压缩数组，该值表示为布尔值，其中 true 表示位是打开的 (1)，false 表示位是关闭的 (0)。

BitArray 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

BitArray 类
System.Collections 命名空间


BitArray 构造函数

BitArray 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BitArray 类

初始化 BitArray 类的新实例，可指定该实例的容量和初始值。

名称 说明
页首

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray 构造函数 (BitArray)

BitArray 构造函数 (BitArray)
BitArray 类

初始化 BitArray 类的新实例，该实例包含从指定的 BitArray 复制的位值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    bits As BitArray _
)
public BitArray(
    BitArray bits
)
public:
BitArray(
    BitArray^ bits
)
new :
        bits:BitArray -> BitArray

参数

bits
类型： System.Collections BitArray
要复制的 BitArray。
异常 | 条件
ArgumentNullException | bits 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此构造函数的运算复杂度为 O(n)，其中 n 是 bits 中元素的个数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
BitArray 重载
System.Collections 命名空间


BitArray 构造函数 ( array<Boolean >[]()[])

BitArray 构造函数 (
array<
Boolean
>
[]
()
[]
)
BitArray 类

初始化 BitArray 类的新实例，该实例包含从指定的布尔值数组复制的位值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    values As Boolean() _
)
public BitArray(
    bool[] values
)
public:
BitArray(
    array<bool>^ values
)
new :
        values:bool[] -> BitArray

参数

values
类型：
array<
System Boolean
>
[]
()
[]

要复制的布尔值数组。
异常 | 条件
ArgumentNullException | values 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此构造函数的运算复杂度为 O(n)，其中 n 是 values 中元素的个数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
BitArray 重载
System.Collections 命名空间


BitArray 构造函数 ( array<Byte >[]()[])

BitArray 构造函数 (
array<
Byte
>
[]
()
[]
)
BitArray 类

初始化 BitArray 类的新实例，该实例包含从指定的字节数组复制的位值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    bytes As Byte() _
)
public BitArray(
    byte[] bytes
)
public:
BitArray(
    array<unsigned char>^ bytes
)
new :
        bytes:byte[] -> BitArray

参数

bytes
类型：
array<
System Byte
>
[]
()
[]

包含要复制的值的字节数组，其中每个字节表示 8 个连续位。
异常 | 条件
ArgumentNullException | bytes 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | bytes 的长度大于 MaxValue。

该数组中的第一个字节表示 0 到 7 位，第二个字节表示 8 到 15 位，依此类推。每个字节的“最低有效位”表示最小索引值："bytes[0] & 1" 表示位 0，"bytes[0] & 2" 表示位 1，"bytes [0] & 4" 表示位 2，等等。 该数组中的第一个字节表示 0 到 7 位，第二个字节表示 8 到 15 位，依此类推。每个字节的“最低有效位”表示最小索引值："bytes[0] & 1" 表示位 0，"bytes[0] & 2" 表示位 1，"bytes [0] & 4" 表示位 2，等等。

此构造函数的运算复杂度为 O(n)，其中 n 是 bytes 中元素的个数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
BitArray 重载
System.Collections 命名空间


BitArray 构造函数 (Int32)

BitArray 构造函数 (Int32)
BitArray 类

初始化 BitArray 类的新实例，该实例可拥有指定数目的位值，位值最初设置为 false。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    length As Integer _
)
public BitArray(
    int length
)
public:
BitArray(
    int length
)
new :
        length:int -> BitArray

参数

length
类型： System Int32
新 BitArray 中位值的数目。
异常 | 条件
ArgumentOutOfRangeException | length 小于零。

此构造函数的运算复杂度为 O(n)，其中 n 是 length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
BitArray 重载
System.Collections 命名空间


BitArray 构造函数 ( array<Int32 >[]()[])

BitArray 构造函数 (
array<
Int32
>
[]
()
[]
)
BitArray 类

初始化 BitArray 类的新实例，该实例包括从指定的 32 位整数数组复制的位值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    values As Integer() _
)
public BitArray(
    int[] values
)
public:
BitArray(
    array<int>^ values
)
new :
        values:int[] -> BitArray

参数

values
类型：
array<
System Int32
>
[]
()
[]

包含要复制的值的整数数组，其中每个整数表示 32 个连续位。
异常 | 条件
ArgumentNullException | values 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | values 的长度大于 MaxValue。

第一个 values 数组元素中的数字表示 0 到 31 位，该数组中的第二个数字表示 32 到 63 位，依此类推。每个整数的“最低有效位”表示最小索引值：" values[0] & 1" 表示位 0，" values[0] & 2" 表示位 1，" values[0] & 4" 表示位 2，等等。 第一个 values 数组元素中的数字表示 0 到 31 位，该数组中的第二个数字表示 32 到 63 位，依此类推。每个整数的“最低有效位”表示最小索引值：" values[0] & 1" 表示位 0，" values[0] & 2" 表示位 1，" values[0] & 4" 表示位 2，等等。

此构造函数的运算复杂度为 O(n)，其中 n 是 values 中元素的个数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
BitArray 重载
System.Collections 命名空间


BitArray 构造函数 (Int32, Boolean)

BitArray 构造函数 (Int32, Boolean)
BitArray 类

初始化 BitArray 类的新实例，该实例可拥有指定数目的位值，位值最初设置为指定值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    length As Integer, _
    defaultValue As Boolean _
)
public BitArray(
    int length,
    bool defaultValue
)
public:
BitArray(
    int length,
    bool defaultValue
)
new :
        length:int *
        defaultValue:bool -> BitArray

参数

length
类型： System Int32
新 BitArray 中位值的数目。
defaultValue
类型： System Boolean
要分配给每个位的布尔值。
异常 | 条件
ArgumentOutOfRangeException | length 小于零。

此构造函数的运算复杂度为 O(n)，其中 n 是 length。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
BitArray 重载
System.Collections 命名空间


BitArray 方法

BitArray 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BitArray 类

BitArray 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

BitArray 类
System.Collections 命名空间


BitArray ..::.And 方法

BitArray
.
.
::
.
And 方法
BitArray 类

对当前 BitArray 中的元素和指定的 BitArray 中的相应元素执行按位 AND 运算。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function And ( _
    value As BitArray _
) As BitArray
public BitArray And(
    BitArray value
)
public:
BitArray^ And(
    BitArray^ value
)
member And :
        value:BitArray -> BitArray

参数

value
类型： System.Collections BitArray
要对其执行按位 AND 运算的 BitArray。

返回值

类型： System.Collections BitArray
当前实例，包含对当前 BitArray 中的元素和指定的 BitArray 中的相应元素执行按位“与”运算的结果。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | value 和当前 BitArray 的元素数不同。

如果两个操作数均为 true，则按位 AND 运算返回 true；如果一个或两个操作数为 false，则按位 AND 运算返回 false。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将 AND 应用于两个 BitArray 实例。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes two BitArrays of the same size.
        Dim myBA1 As New BitArray(4)
        Dim myBA2 As New BitArray(4)
        myBA1(1) = False
        myBA1(0) = False
        myBA1(3) = True
        myBA1(2) = True
        myBA2(2) = False
        myBA2(0) = False
        myBA2(3) = True
        myBA2(1) = True

        ' Performs a bitwise AND operation between BitArray instances of the same size.
        Console.WriteLine("Initial values")
        Console.Write("myBA1:")
        PrintValues(myBA1, 8)
        Console.Write("myBA2:")
        PrintValues(myBA2, 8)
        Console.WriteLine()

        Console.WriteLine("Result")
        Console.Write("AND:")
        PrintValues(myBA1.And(myBA2), 8)
        Console.WriteLine()

        Console.WriteLine("After AND")
        Console.Write("myBA1:")
        PrintValues(myBA1, 8)
        Console.Write("myBA2:")
        PrintValues(myBA2, 8)
        Console.WriteLine()

        ' Performing AND between BitArray instances of different sizes returns an exception.
        Try
            Dim myBA3 As New BitArray(8)
            myBA3(0) = False
            myBA3(1) = False
            myBA3(2) = False
            myBA3(3) = False
            myBA3(4) = True
            myBA3(5) = True
            myBA3(6) = True
            myBA3(7) = True
            myBA1.And(myBA3)
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable, myWidth As Integer)
        Dim i As Integer = myWidth
        Dim obj As [Object]
        For Each obj In  myList
            If i <= 0 Then
                i = myWidth
                Console.WriteLine()
            End If
            i -= 1
            Console.Write("{0,8}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' Initial values
' myBA1:   False   False    True    True
' myBA2:   False    True   False    True
'
' Result
' AND:   False   False   False    True
'
' After AND
' myBA1:   False   False   False    True
' myBA2:   False    True   False    True
'
' Exception: System.ArgumentException: Array lengths must be the same.
'    at System.Collections.BitArray.And(BitArray value)
'    at SamplesBitArray.Main()

using System;
using System.Collections;
public class SamplesBitArray  {

   public static void Main()  {

      // Creates and initializes two BitArrays of the same size.
      BitArray myBA1 = new BitArray( 4 );
      BitArray myBA2 = new BitArray( 4 );
      myBA1[0] = myBA1[1] = false;
      myBA1[2] = myBA1[3] = true;
      myBA2[0] = myBA2[2] = false;
      myBA2[1] = myBA2[3] = true;

      // Performs a bitwise AND operation between BitArray instances of the same size.
      Console.WriteLine( "Initial values" );
      Console.Write( "myBA1:" );
      PrintValues( myBA1, 8 );
      Console.Write( "myBA2:" );
      PrintValues( myBA2, 8 );
      Console.WriteLine();

      Console.WriteLine( "Result" );
      Console.Write( "AND:" );
      PrintValues( myBA1.And( myBA2 ), 8 );
      Console.WriteLine();

      Console.WriteLine( "After AND" );
      Console.Write( "myBA1:" );
      PrintValues( myBA1, 8 );
      Console.Write( "myBA2:" );
      PrintValues( myBA2, 8 );
      Console.WriteLine();

      // Performing AND between BitArray instances of different sizes returns an exception.
      try  {
         BitArray myBA3 = new BitArray( 8 );
         myBA3[0] = myBA3[1] = myBA3[2] = myBA3[3] = false;
         myBA3[4] = myBA3[5] = myBA3[6] = myBA3[7] = true;
         myBA1.And( myBA3 );
      } catch ( Exception myException )  {
         Console.WriteLine("Exception: " + myException.ToString());
      }
   }

   public static void PrintValues( IEnumerable myList, int myWidth )  {
      int i = myWidth;
      foreach ( Object obj in myList ) {
         if ( i <= 0 )  {
            i = myWidth;
            Console.WriteLine();
         }
         i--;
         Console.Write( "{0,8}", obj );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Initial values
myBA1:   False   False    True    True
myBA2:   False    True   False    True

Result
AND:   False   False   False    True

After AND
myBA1:   False   False   False    True
myBA2:   False    True   False    True

Exception: System.ArgumentException: Array lengths must be the same.
   at System.Collections.BitArray.And(BitArray value)
   at SamplesBitArray.Main()
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, int myWidth );
int main()
{

   // Creates and initializes two BitArrays of the same size.
   BitArray^ myBA1 = gcnew BitArray( 4 );
   BitArray^ myBA2 = gcnew BitArray( 4 );
   myBA1[ 0 ] = false;
   myBA1[ 1 ] = false;
   myBA1[ 2 ] = true;
   myBA1[ 3 ] = true;
   myBA2[ 0 ] = false;
   myBA2[ 2 ] = false;
   myBA2[ 1 ] = true;
   myBA2[ 3 ] = true;

   // Performs a bitwise AND operation between BitArray instances of the same size.
   Console::WriteLine( "Initial values" );
   Console::Write( "myBA1:" );
   PrintValues( myBA1, 8 );
   Console::Write( "myBA2:" );
   PrintValues( myBA2, 8 );
   Console::WriteLine();
   Console::WriteLine( "Result" );
   Console::Write( "AND:" );
   PrintValues( myBA1->And( myBA2 ), 8 );
   Console::WriteLine();
   Console::WriteLine( "After AND" );
   Console::Write( "myBA1:" );
   PrintValues( myBA1, 8 );
   Console::Write( "myBA2:" );
   PrintValues( myBA2, 8 );
   Console::WriteLine();

   // Performing AND between BitArray instances of different sizes returns an exception.
   try
   {
      BitArray^ myBA3 = gcnew BitArray( 8 );
      myBA3[ 0 ] = false;
      myBA3[ 1 ] = false;
      myBA3[ 2 ] = false;
      myBA3[ 3 ] = false;
      myBA3[ 4 ] = true;
      myBA3[ 5 ] = true;
      myBA3[ 6 ] = true;
      myBA3[ 7 ] = true;
      myBA1->And( myBA3 );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

}

void PrintValues( IEnumerable^ myList, int myWidth )
{
   int i = myWidth;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      if ( i <= 0 )
      {
         i = myWidth;
         Console::WriteLine();
      }

      i--;
      Console::Write( "{0,8}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Initial values
 myBA1:   False   False    True    True
 myBA2:   False    True   False    True

 Result
 AND:   False   False   False    True

 After AND
 myBA1:   False   False   False    True
 myBA2:   False    True   False    True

 Exception: System.ArgumentException: Array lengths must be the same.
    at System.Collections.BitArray.And(BitArray value)
    at SamplesBitArray.Main()
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.Clone 方法

BitArray
.
.
::
.
Clone 方法
BitArray 类

创建 BitArray 的浅表副本。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Clone As Object
public Object Clone()
public:
virtual Object^ Clone() sealed
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
BitArray 的浅表副本。

实现

集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。 集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。

与之相对，集合的深层副本将复制这些元素以及由它们直接或间接引用的所有内容。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.CopyTo 方法

BitArray
.
.
::
.
CopyTo 方法
BitArray 类

从目标数组的指定索引处开始将整个 BitArray 复制到兼容的一维 Array。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
public void CopyTo(
    Array array,
    int index
)
public:
virtual void CopyTo(
    Array^ array,
    int index
) sealed
abstract CopyTo :
        array:Array *
        index:int -> unit
override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
作为从 BitArray 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 BitArray 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
index
类型： System Int32
array 中从零开始的索引，将在此处开始复制。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 BitArray 中的元素数大于从 index 到目标 array 结尾处之间的可用空间。
InvalidCastException | 无法自动将源 BitArray 的类型强制转换为目标 array 的类型。

指定的数组必须是兼容类型的数组。仅支持 bool、int 和 byte 类型的数组。 指定的数组必须是兼容类型的数组。仅支持 bool、int 和 byte 类型的数组。

此方法使用 Array..::.Copy 来复制元素。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将 BitArray 复制到一维 Array 中。

Imports System
Imports System.Collections

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes the source BitArray.
        Dim myBA As New BitArray(4)
        myBA(0) = True
        myBA(1) = True
        myBA(2) = True
        myBA(3) = True

        ' Creates and initializes the one-dimensional target Array of type Boolean.
        Dim myBoolArray(7) As Boolean
        myBoolArray(0) = False
        myBoolArray(1) = False

        ' Displays the values of the target Array.
        Console.WriteLine("The target Boolean Array contains the following (before and after copying):")
        PrintValues(myBoolArray)

        ' Copies the entire source BitArray to the target BitArray, starting at index 3.
        myBA.CopyTo(myBoolArray, 3)

        ' Displays the values of the target Array.
        PrintValues(myBoolArray)

        ' Creates and initializes the one-dimensional target Array of type integer.
        Dim myIntArray(7) As Integer
        myIntArray(0) = 42
        myIntArray(1) = 43

        ' Displays the values of the target Array.
        Console.WriteLine("The target Boolean Array contains the following (before and after copying):")
        PrintValues(myIntArray)

        ' Copies the entire source BitArray to the target BitArray, starting at index 3.
        myBA.CopyTo(myIntArray, 3)

        ' Displays the values of the target Array.
        PrintValues(myIntArray)

        ' Creates and initializes the one-dimensional target Array of type integer.
        Dim myByteArray As Array = Array.CreateInstance(GetType(Byte), 8)
        myByteArray.SetValue(System.Convert.ToByte(10), 0)
        myByteArray.SetValue(System.Convert.ToByte(11), 1)

        ' Displays the values of the target Array.
        Console.WriteLine("The target Boolean Array contains the following (before and after copying):")
        PrintValues(myByteArray)

        ' Copies the entire source BitArray to the target BitArray, starting at index 3.
        myBA.CopyTo(myByteArray, 3)

        ' Displays the values of the target Array.
        PrintValues(myByteArray)

        ' Returns an exception if the array is not of type Boolean, integer or byte.
        Try
            Dim myStringArray As Array = Array.CreateInstance(GetType(String), 8)
            myStringArray.SetValue("Hello", 0)
            myStringArray.SetValue("World", 1)
            myBA.CopyTo(myStringArray, 3)
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try

    End Sub 'Main

    Public Shared Sub PrintValues(myArr As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myArr
            Console.Write("{0,8}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesBitArray

' This code produces the following output.
'
' The target Boolean Array contains the following (before and after copying):
'    False   False   False   False   False   False   False   False
'    False   False   False    True    True    True    True   False
' The target Boolean Array contains the following (before and after copying):
'       42      43       0       0       0       0       0       0
'       42      43       0      15       0       0       0       0
' The target Boolean Array contains the following (before and after copying):
'       10      11       0       0       0       0       0       0
'       10      11       0      15       0       0       0       0
' Exception: System.ArgumentException: Only supported array types for CopyTo on BitArrays are Boolean[], Int32[] and Byte[].
'    at System.Collections.BitArray.CopyTo(Array array, Int32 index)
'    at SamplesBitArray.Main()

using System;
using System.Collections;
public class SamplesBitArray  {

   public static void Main()  {

      // Creates and initializes the source BitArray.
      BitArray myBA = new BitArray( 4 );
      myBA[0] = myBA[1] = myBA[2] = myBA[3] = true;

      // Creates and initializes the one-dimensional target Array of type Boolean.
      bool[] myBoolArray = new bool[8];
      myBoolArray[0] = false;
      myBoolArray[1] = false;

      // Displays the values of the target Array.
      Console.WriteLine( "The target Boolean Array contains the following (before and after copying):" );
      PrintValues( myBoolArray );

      // Copies the entire source BitArray to the target BitArray, starting at index 3.
      myBA.CopyTo( myBoolArray, 3 );

      // Displays the values of the target Array.
      PrintValues( myBoolArray );

      // Creates and initializes the one-dimensional target Array of type integer.
      int[] myIntArray = new int[8];
      myIntArray[0] = 42;
      myIntArray[1] = 43;

      // Displays the values of the target Array.
      Console.WriteLine( "The target Boolean Array contains the following (before and after copying):" );
      PrintValues( myIntArray );

      // Copies the entire source BitArray to the target BitArray, starting at index 3.
      myBA.CopyTo( myIntArray, 3 );

      // Displays the values of the target Array.
      PrintValues( myIntArray );

      // Creates and initializes the one-dimensional target Array of type integer.
      Array myByteArray = Array.CreateInstance( typeof(byte), 8 );
      myByteArray.SetValue( (byte) 10, 0 );
      myByteArray.SetValue( (byte) 11, 1 );

      // Displays the values of the target Array.
      Console.WriteLine( "The target Boolean Array contains the following (before and after copying):" );
      PrintValues( myByteArray );

      // Copies the entire source BitArray to the target BitArray, starting at index 3.
      myBA.CopyTo( myByteArray, 3 );

      // Displays the values of the target Array.
      PrintValues( myByteArray );

      // Returns an exception if the array is not of type Boolean, integer or byte.
      try  {
         Array myStringArray=Array.CreateInstance( typeof(String), 8 );
         myStringArray.SetValue( "Hello", 0 );
         myStringArray.SetValue( "World", 1 );
         myBA.CopyTo( myStringArray, 3 );
      } catch ( Exception myException )  {
         Console.WriteLine("Exception: " + myException.ToString());
      }
   }

   public static void PrintValues( IEnumerable myArr )  {
      foreach ( Object obj in myArr ) {
         Console.Write( "{0,8}", obj );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The target Boolean Array contains the following (before and after copying):
   False   False   False   False   False   False   False   False
   False   False   False    True    True    True    True   False
The target Boolean Array contains the following (before and after copying):
      42      43       0       0       0       0       0       0
      42      43       0      15       0       0       0       0
The target Boolean Array contains the following (before and after copying):
      10      11       0       0       0       0       0       0
      10      11       0      15       0       0       0       0
Exception: System.ArgumentException: Only supported array types for CopyTo on BitArrays are Boolean[], Int32[] and Byte[].
   at System.Collections.BitArray.CopyTo(Array array, Int32 index)
   at SamplesBitArray.Main()

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myArr );
int main()
{
   // Creates and initializes the source BitArray.
   BitArray^ myBA = gcnew BitArray( 4 );
   myBA[ 0 ] = true;
   myBA[ 1 ] = true;
   myBA[ 2 ] = true;
   myBA[ 3 ] = true;

   // Creates and initializes the one-dimensional target Array of type Boolean.
   array<Boolean>^myBoolArray = gcnew array<Boolean>(8);
   myBoolArray[ 0 ] = false;
   myBoolArray[ 1 ] = false;

   // Displays the values of the target Array.
   Console::WriteLine( "The target Boolean Array contains the following (before and after copying):" );
   PrintValues( dynamic_cast<IEnumerable^>(myBoolArray) );

   // Copies the entire source BitArray to the target BitArray, starting at index 3.
   myBA->CopyTo( myBoolArray, 3 );

   // Displays the values of the target Array.
   PrintValues( dynamic_cast<IEnumerable^>(myBoolArray) );

   // Creates and initializes the one-dimensional target Array of type integer.
   array<Int32>^myIntArray = gcnew array<Int32>(8);
   myIntArray[ 0 ] = 42;
   myIntArray[ 1 ] = 43;

   // Displays the values of the target Array.
   Console::WriteLine( "The target Boolean Array contains the following (before and after copying):" );
   PrintValues( dynamic_cast<IEnumerable^>(myIntArray) );

   // Copies the entire source BitArray to the target BitArray, starting at index 3.
   myBA->CopyTo( myIntArray, 3 );

   // Displays the values of the target Array.
   PrintValues( dynamic_cast<IEnumerable^>(myIntArray) );

   // Creates and initializes the one-dimensional target Array of type integer.
   Array^ myByteArray = Array::CreateInstance( Byte::typeid, 8 );
   myByteArray->SetValue( (Byte)10, 0 );
   myByteArray->SetValue( (Byte)11, 1 );

   // Displays the values of the target Array.
   Console::WriteLine( "The target Boolean Array contains the following (before and after copying):" );
   PrintValues( myByteArray );

   // Copies the entire source BitArray to the target BitArray, starting at index 3.
   myBA->CopyTo( myByteArray, 3 );

   // Displays the values of the target Array.
   PrintValues( myByteArray );

   // Returns an exception if the array is not of type Boolean, integer or byte.
   try
   {
      Array^ myStringArray = Array::CreateInstance( String::typeid, 8 );
      myStringArray->SetValue( "Hello", 0 );
      myStringArray->SetValue( "World", 1 );
      myBA->CopyTo( myStringArray, 3 );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

}

void PrintValues( IEnumerable^ myArr )
{
   IEnumerator^ myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0,8}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The target Boolean Array contains the following (before and after copying):
    False   False   False   False   False   False   False   False
    False   False   False    True    True    True    True   False
 The target Boolean Array contains the following (before and after copying):
       42      43       0       0       0       0       0       0
       42      43       0      15       0       0       0       0
 The target Boolean Array contains the following (before and after copying):
       10      11       0       0       0       0       0       0
       10      11       0      15       0       0       0       0
 Exception: System.ArgumentException: Only supported array types for CopyTo on BitArrays are Boolean[], Int32[] and Byte[].
    at System.Collections.BitArray.CopyTo(Array array, Int32 index)
    at SamplesBitArray.Main()

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间
Array


BitArray ..::.Get 方法

BitArray
.
.
::
.
Get 方法
BitArray 类

获取 BitArray 中特定位置处的位的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Get ( _
    index As Integer _
) As Boolean
public bool Get(
    int index
)
public:
bool Get(
    int index
)
member Get :
        index:int -> bool

参数

index
类型： System Int32
要获取的值的从零开始的索引。

返回值

类型： System Boolean
在 index 位置处的位的值。
异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 大于或等于 BitArray 中的元素数。

此方法是 O(1) 操作。

下面的代码示例演示如何设置或获取 BitArray 中的特定元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes a BitArray.
        Dim myBA As New BitArray(5)

        ' Displays the properties and values of the BitArray.
        Console.WriteLine("myBA values:")
        PrintIndexAndValues(myBA)

        ' Sets all the elements to true.
        myBA.SetAll(True)

        ' Displays the properties and values of the BitArray.
        Console.WriteLine("After setting all elements to true,")
        PrintIndexAndValues(myBA)

        ' Sets the last index to false.
        myBA.Set(myBA.Count - 1, False)

        ' Displays the properties and values of the BitArray.
        Console.WriteLine("After setting the last element to false,")
        PrintIndexAndValues(myBA)

        ' Gets the value of the last two elements.
        Console.WriteLine("The last two elements are: ")
        Console.WriteLine("    at index {0} : {1}", _
           myBA.Count - 2, myBA.Get(myBA.Count - 2))
        Console.WriteLine("    at index {0} : {1}", _
           myBA.Count - 1, myBA.Get(myBA.Count - 1))
    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(myCol As IEnumerable)
        Dim i As Integer
        Dim obj As Object
        i = 0
        For Each obj In  myCol
            Console.WriteLine("    [{0}]:    {1}", i, obj)
            i = i + 1
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' myBA values:
'     [0]:    False
'     [1]:    False
'     [2]:    False
'     [3]:    False
'     [4]:    False
'
' After setting all elements to true,
'     [0]:    True
'     [1]:    True
'     [2]:    True
'     [3]:    True
'     [4]:    True
'
' After setting the last element to false,
'     [0]:    True
'     [1]:    True
'     [2]:    True
'     [3]:    True
'     [4]:    False
'
' The last two elements are:
'     at index 3 : True
'     at index 4 : False

using System;
using System.Collections;
public class SamplesBitArray  {

   public static void Main()  {

      // Creates and initializes a BitArray.
      BitArray myBA = new BitArray( 5 );

      // Displays the properties and values of the BitArray.
      Console.WriteLine( "myBA values:" );
      PrintIndexAndValues( myBA );

      // Sets all the elements to true.
      myBA.SetAll( true );

      // Displays the properties and values of the BitArray.
      Console.WriteLine( "After setting all elements to true," );
      PrintIndexAndValues( myBA );

      // Sets the last index to false.
      myBA.Set( myBA.Count - 1, false );

      // Displays the properties and values of the BitArray.
      Console.WriteLine( "After setting the last element to false," );
      PrintIndexAndValues( myBA );

      // Gets the value of the last two elements.
      Console.WriteLine( "The last two elements are: " );
      Console.WriteLine( "    at index {0} : {1}", myBA.Count - 2, myBA.Get( myBA.Count - 2 ) );
      Console.WriteLine( "    at index {0} : {1}", myBA.Count - 1, myBA.Get( myBA.Count - 1 ) );
   }

   public static void PrintIndexAndValues( IEnumerable myCol )  {
      int i = 0;
      foreach ( Object obj in myCol ) {
         Console.WriteLine( "    [{0}]:    {1}", i++, obj );
      }
      Console.WriteLine();
   }

}
/*
This code produces the following output.

myBA values:
    [0]:    False
    [1]:    False
    [2]:    False
    [3]:    False
    [4]:    False

After setting all elements to true,
    [0]:    True
    [1]:    True
    [2]:    True
    [3]:    True
    [4]:    True

After setting the last element to false,
    [0]:    True
    [1]:    True
    [2]:    True
    [3]:    True
    [4]:    False

The last two elements are:
    at index 3 : True
    at index 4 : False

*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myCol );
int main()
{

   // Creates and initializes a BitArray.
   BitArray^ myBA = gcnew BitArray( 5 );

   // Displays the properties and values of the BitArray.
   Console::WriteLine( "myBA values:" );
   PrintIndexAndValues( myBA );

   // Sets all the elements to true.
   myBA->SetAll( true );

   // Displays the properties and values of the BitArray.
   Console::WriteLine( "After setting all elements to true," );
   PrintIndexAndValues( myBA );

   // Sets the last index to false.
   myBA->Set( myBA->Count - 1, false );

   // Displays the properties and values of the BitArray.
   Console::WriteLine( "After setting the last element to false," );
   PrintIndexAndValues( myBA );

   // Gets the value of the last two elements.
   Console::WriteLine( "The last two elements are: " );
   Console::WriteLine( "    at index {0} : {1}", myBA->Count - 2, myBA->Get( myBA->Count - 2 ) );
   Console::WriteLine( "    at index {0} : {1}", myBA->Count - 1, myBA->Get( myBA->Count - 1 ) );
}

void PrintIndexAndValues( IEnumerable^ myCol )
{
   int i = 0;
   IEnumerator^ myEnum = myCol->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "    [{0}]:    {1}", i++, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 myBA values:
     [0]:    False
     [1]:    False
     [2]:    False
     [3]:    False
     [4]:    False

 After setting all elements to true,
     [0]:    True
     [1]:    True
     [2]:    True
     [3]:    True
     [4]:    True

 After setting the last element to false,
     [0]:    True
     [1]:    True
     [2]:    True
     [3]:    True
     [4]:    False

 The last two elements are:
     at index 3 : True
     at index 4 : False

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.GetEnumerator 方法

BitArray
.
.
::
.
GetEnumerator 方法
BitArray 类

返回循环访问 BitArray 的枚举器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetEnumerator As IEnumerator
public IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
用于整个 BitArray 的 IEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间
IEnumerator


BitArray ..::.Not 方法

BitArray
.
.
::
.
Not 方法
BitArray 类

反转当前 BitArray 中的所有位值，以便将设置为 true 的元素更改为 false；将设置为 false 的元素更改为 true。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Not As BitArray
public BitArray Not()
public:
BitArray^ Not()
member Not : unit -> BitArray

返回值

类型： System.Collections BitArray
具有已反转的位值的当前实例。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将 NOT 应用于 BitArray。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes two BitArrays of the same size.
        Dim myBA1 As New BitArray(4)
        Dim myBA2 As New BitArray(4)
        myBA1(0) = False
        myBA1(1) = False
        myBA1(2) = True
        myBA1(3) = True
        myBA2(0) = False
        myBA2(2) = False
        myBA2(1) = True
        myBA2(3) = True

        ' Performs a bitwise NOT operation between BitArray instances of the same size.
        Console.WriteLine("Initial values")
        Console.Write("myBA1:")
        PrintValues(myBA1, 8)
        Console.Write("myBA2:")
        PrintValues(myBA2, 8)
        Console.WriteLine()

        myBA1.Not()
        myBA2.Not()

        Console.WriteLine("After NOT")
        Console.Write("myBA1:")
        PrintValues(myBA1, 8)
        Console.Write("myBA2:")
        PrintValues(myBA2, 8)
        Console.WriteLine()
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable, myWidth As Integer)
        Dim i As Integer = myWidth
        Dim obj As [Object]
        For Each obj In  myList
            If i <= 0 Then
                i = myWidth
                Console.WriteLine()
            End If
            i -= 1
            Console.Write("{0,8}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' Initial values
' myBA1:    False    False    True    True
' myBA2:    False    True    False    True
'
' After NOT
' myBA1:    True    True    False    False
' myBA2:    True    False    True    False

using System;
using System.Collections;
public class SamplesBitArray  {

   public static void Main()  {

      // Creates and initializes two BitArrays of the same size.
      BitArray myBA1 = new BitArray( 4 );
      BitArray myBA2 = new BitArray( 4 );
      myBA1[0] = myBA1[1] = false;
      myBA1[2] = myBA1[3] = true;
      myBA2[0] = myBA2[2] = false;
      myBA2[1] = myBA2[3] = true;

      // Performs a bitwise NOT operation between BitArray instances of the same size.
      Console.WriteLine( "Initial values" );
      Console.Write( "myBA1:" );
      PrintValues( myBA1, 8 );
      Console.Write( "myBA2:" );
      PrintValues( myBA2, 8 );
      Console.WriteLine();

      myBA1.Not();
      myBA2.Not();

      Console.WriteLine( "After NOT" );
      Console.Write( "myBA1:" );
      PrintValues( myBA1, 8 );
      Console.Write( "myBA2:" );
      PrintValues( myBA2, 8 );
      Console.WriteLine();
   }

   public static void PrintValues( IEnumerable myList, int myWidth )  {
      int i = myWidth;
      foreach ( Object obj in myList ) {
         if ( i <= 0 )  {
            i = myWidth;
            Console.WriteLine();
         }
         i--;
         Console.Write( "{0,8}", obj );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Initial values
myBA1:   False   False    True    True
myBA2:   False    True   False    True

After NOT
myBA1:    True    True   False   False
myBA2:    True   False    True   False

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, int myWidth );
int main()
{

   // Creates and initializes two BitArrays of the same size.
   BitArray^ myBA1 = gcnew BitArray( 4 );
   BitArray^ myBA2 = gcnew BitArray( 4 );
   myBA1[ 0 ] = false;
   myBA1[ 1 ] = false;
   myBA1[ 2 ] = true;
   myBA1[ 3 ] = true;
   myBA2[ 0 ] = false;
   myBA2[ 1 ] = true;
   myBA2[ 2 ] = false;
   myBA2[ 3 ] = true;

   // Performs a bitwise NOT operation between BitArray instances of the same size.
   Console::WriteLine( "Initial values" );
   Console::Write( "myBA1:" );
   PrintValues( myBA1, 8 );
   Console::Write( "myBA2:" );
   PrintValues( myBA2, 8 );
   Console::WriteLine();
   myBA1->Not();
   myBA2->Not();
   Console::WriteLine( "After NOT" );
   Console::Write( "myBA1:" );
   PrintValues( myBA1, 8 );
   Console::Write( "myBA2:" );
   PrintValues( myBA2, 8 );
   Console::WriteLine();
}

void PrintValues( IEnumerable^ myList, int myWidth )
{
   int i = myWidth;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      if ( i <= 0 )
      {
         i = myWidth;
         Console::WriteLine();
      }

      i--;
      Console::Write( "{0,8}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Initial values
 myBA1:   False   False    True    True
 myBA2:   False    True   False    True

 After NOT
 myBA1:    True    True   False   False
 myBA2:    True   False    True   False

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.Or 方法

BitArray
.
.
::
.
Or 方法
BitArray 类

对当前 BitArray 中的元素和指定的 BitArray 中的相应元素执行按位“或”运算。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Or ( _
    value As BitArray _
) As BitArray
public BitArray Or(
    BitArray value
)
public:
BitArray^ Or(
    BitArray^ value
)
member Or :
        value:BitArray -> BitArray

参数

value
类型： System.Collections BitArray
要对其执行按位“或”运算的 BitArray。

返回值

类型： System.Collections BitArray
当前实例，包含对当前 BitArray 中的元素和指定的 BitArray 中的相应元素执行按位“或”运算的结果。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | value 和当前 BitArray 的元素数不同。

如果一个或两个操作数为 true，则按位“或”运算返回 true；如果两个操作数都为 false，则按位“或”运算返回 false。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将 OR 应用于两个 BitArray 实例。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes two BitArrays of the same size.
        Dim myBA1 As New BitArray(4)
        Dim myBA2 As New BitArray(4)
        myBA1(0) = False
        myBA1(1) = False
        myBA1(2) = True
        myBA1(3) = True
        myBA2(0) = False
        myBA2(2) = False
        myBA2(1) = True
        myBA2(3) = True

        ' Performs a bitwise OR operation between BitArray instances of the same size.
        Console.WriteLine("Initial values")
        Console.Write("myBA1:")
        PrintValues(myBA1, 8)
        Console.Write("myBA2:")
        PrintValues(myBA2, 8)
        Console.WriteLine()

        Console.WriteLine("Result")
        Console.Write("OR:")
        PrintValues(myBA1.Or(myBA2), 8)
        Console.WriteLine()

        Console.WriteLine("After OR")
        Console.Write("myBA1:")
        PrintValues(myBA1, 8)
        Console.Write("myBA2:")
        PrintValues(myBA2, 8)
        Console.WriteLine()

        ' Performing OR between BitArray instances of different sizes returns an exception.
        Try
            Dim myBA3 As New BitArray(8)
            myBA3(0) = False
            myBA3(1) = False
            myBA3(2) = False
            myBA3(3) = False
            myBA3(4) = True
            myBA3(5) = True
            myBA3(6) = True
            myBA3(7) = True
            myBA1.Or(myBA3)
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable, myWidth As Integer)
        Dim i As Integer = myWidth
        Dim obj As [Object]
        For Each obj In  myList
            If i <= 0 Then
                i = myWidth
                Console.WriteLine()
            End If
            i -= 1
            Console.Write("{0,8}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' Initial values
' myBA1:   False   False    True    True
' myBA2:   False    True   False    True
'
' Result
' OR:   False    True    True    True
'
' After OR
' myBA1:   False    True    True    True
' myBA2:   False    True   False    True
'
' Exception: System.ArgumentException: Array lengths must be the same.
'    at System.Collections.BitArray.Or(BitArray value)
'    at SamplesBitArray.Main()

 using System;
 using System.Collections;
 public class SamplesBitArray  {

    public static void Main()  {

       // Creates and initializes two BitArrays of the same size.
       BitArray myBA1 = new BitArray( 4 );
       BitArray myBA2 = new BitArray( 4 );
       myBA1[0] = myBA1[1] = false;
       myBA1[2] = myBA1[3] = true;
       myBA2[0] = myBA2[2] = false;
       myBA2[1] = myBA2[3] = true;

       // Performs a bitwise OR operation between BitArray instances of the same size.
       Console.WriteLine( "Initial values" );
       Console.Write( "myBA1:" );
       PrintValues( myBA1, 8 );
       Console.Write( "myBA2:" );
       PrintValues( myBA2, 8 );
       Console.WriteLine();

       Console.WriteLine( "Result" );
       Console.Write( "OR:" );
       PrintValues( myBA1.Or( myBA2 ), 8 );
       Console.WriteLine();

       Console.WriteLine( "After OR" );
       Console.Write( "myBA1:" );
       PrintValues( myBA1, 8 );
       Console.Write( "myBA2:" );
       PrintValues( myBA2, 8 );
       Console.WriteLine();

       // Performing OR between BitArray instances of different sizes returns an exception.
       try  {
          BitArray myBA3 = new BitArray( 8 );
          myBA3[0] = myBA3[1] = myBA3[2] = myBA3[3] = false;
          myBA3[4] = myBA3[5] = myBA3[6] = myBA3[7] = true;
          myBA1.Or( myBA3 );
       } catch ( Exception myException )  {
          Console.WriteLine("Exception: " + myException.ToString());
       }
    }

    public static void PrintValues( IEnumerable myList, int myWidth )  {
       int i = myWidth;
       foreach ( Object obj in myList ) {
          if ( i <= 0 )  {
             i = myWidth;
             Console.WriteLine();
          }
          i--;
          Console.Write( "{0,8}", obj );
       }
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 Initial values
 myBA1:   False   False    True    True
 myBA2:   False    True   False    True

 Result
 OR:   False    True    True    True

 After OR
 myBA1:   False    True    True    True
 myBA2:   False    True   False    True

 Exception: System.ArgumentException: Array lengths must be the same.
    at System.Collections.BitArray.Or(BitArray value)
    at SamplesBitArray.Main()
 */

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, int myWidth );
int main()
{

   // Creates and initializes two BitArrays of the same size.
   BitArray^ myBA1 = gcnew BitArray( 4 );
   BitArray^ myBA2 = gcnew BitArray( 4 );
   myBA1[ 0 ] = false;
   myBA1[ 1 ] = false;
   myBA1[ 2 ] = true;
   myBA1[ 3 ] = true;
   myBA2[ 0 ] = false;
   myBA2[ 1 ] = true;
   myBA2[ 2 ] = false;
   myBA2[ 3 ] = true;

   // Performs a bitwise OR operation between BitArray instances of the same size.
   Console::WriteLine( "Initial values" );
   Console::Write( "myBA1:" );
   PrintValues( myBA1, 8 );
   Console::Write( "myBA2:" );
   PrintValues( myBA2, 8 );
   Console::WriteLine();
   Console::WriteLine( "Result" );
   Console::Write( "OR:" );
   PrintValues( myBA1->Or( myBA2 ), 8 );
   Console::WriteLine();
   Console::WriteLine( "After OR" );
   Console::Write( "myBA1:" );
   PrintValues( myBA1, 8 );
   Console::Write( "myBA2:" );
   PrintValues( myBA2, 8 );
   Console::WriteLine();

   // Performing OR between BitArray instances of different sizes returns an exception.
   try
   {
      BitArray^ myBA3 = gcnew BitArray( 8 );
      myBA3[ 0 ] = false;
      myBA3[ 1 ] = false;
      myBA3[ 2 ] = false;
      myBA3[ 3 ] = false;
      myBA3[ 4 ] = true;
      myBA3[ 5 ] = true;
      myBA3[ 6 ] = true;
      myBA3[ 7 ] = true;
      myBA1->Or( myBA3 );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

}

void PrintValues( IEnumerable^ myList, int myWidth )
{
   int i = myWidth;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      if ( i <= 0 )
      {
         i = myWidth;
         Console::WriteLine();
      }

      i--;
      Console::Write( "{0,8}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Initial values
 myBA1:   False   False    True    True
 myBA2:   False    True   False    True

 Result
 OR:   False    True    True    True

 After OR
 myBA1:   False    True    True    True
 myBA2:   False    True   False    True

 Exception: System.ArgumentException: Array lengths must be the same.
    at System.Collections.BitArray.Or(BitArray value)
    at SamplesBitArray.Main()
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.Set 方法

BitArray
.
.
::
.
Set 方法
BitArray 类

将 BitArray 中特定位置处的位设置为指定值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Set ( _
    index As Integer, _
    value As Boolean _
)
public void Set(
    int index,
    bool value
)
public:
void Set(
    int index,
    bool value
)
member Set :
        index:int *
        value:bool -> unit

参数

index
类型： System Int32
要设置的位的从零开始的索引。
value
类型： System Boolean
要分配给位的布尔值。
异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 大于或等于 BitArray 中的元素数。

此方法是 O(1) 操作。

下面的代码示例演示如何设置或获取 BitArray 中的特定元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes a BitArray.
        Dim myBA As New BitArray(5)

        ' Displays the properties and values of the BitArray.
        Console.WriteLine("myBA values:")
        PrintIndexAndValues(myBA)

        ' Sets all the elements to true.
        myBA.SetAll(True)

        ' Displays the properties and values of the BitArray.
        Console.WriteLine("After setting all elements to true,")
        PrintIndexAndValues(myBA)

        ' Sets the last index to false.
        myBA.Set(myBA.Count - 1, False)

        ' Displays the properties and values of the BitArray.
        Console.WriteLine("After setting the last element to false,")
        PrintIndexAndValues(myBA)

        ' Gets the value of the last two elements.
        Console.WriteLine("The last two elements are: ")
        Console.WriteLine("    at index {0} : {1}", _
           myBA.Count - 2, myBA.Get(myBA.Count - 2))
        Console.WriteLine("    at index {0} : {1}", _
           myBA.Count - 1, myBA.Get(myBA.Count - 1))
    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(myCol As IEnumerable)
        Dim i As Integer
        Dim obj As Object
        i = 0
        For Each obj In  myCol
            Console.WriteLine("    [{0}]:    {1}", i, obj)
            i = i + 1
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' myBA values:
'     [0]:    False
'     [1]:    False
'     [2]:    False
'     [3]:    False
'     [4]:    False
'
' After setting all elements to true,
'     [0]:    True
'     [1]:    True
'     [2]:    True
'     [3]:    True
'     [4]:    True
'
' After setting the last element to false,
'     [0]:    True
'     [1]:    True
'     [2]:    True
'     [3]:    True
'     [4]:    False
'
' The last two elements are:
'     at index 3 : True
'     at index 4 : False

using System;
using System.Collections;
public class SamplesBitArray  {

   public static void Main()  {

      // Creates and initializes a BitArray.
      BitArray myBA = new BitArray( 5 );

      // Displays the properties and values of the BitArray.
      Console.WriteLine( "myBA values:" );
      PrintIndexAndValues( myBA );

      // Sets all the elements to true.
      myBA.SetAll( true );

      // Displays the properties and values of the BitArray.
      Console.WriteLine( "After setting all elements to true," );
      PrintIndexAndValues( myBA );

      // Sets the last index to false.
      myBA.Set( myBA.Count - 1, false );

      // Displays the properties and values of the BitArray.
      Console.WriteLine( "After setting the last element to false," );
      PrintIndexAndValues( myBA );

      // Gets the value of the last two elements.
      Console.WriteLine( "The last two elements are: " );
      Console.WriteLine( "    at index {0} : {1}", myBA.Count - 2, myBA.Get( myBA.Count - 2 ) );
      Console.WriteLine( "    at index {0} : {1}", myBA.Count - 1, myBA.Get( myBA.Count - 1 ) );
   }

   public static void PrintIndexAndValues( IEnumerable myCol )  {
      int i = 0;
      foreach ( Object obj in myCol ) {
         Console.WriteLine( "    [{0}]:    {1}", i++, obj );
      }
      Console.WriteLine();
   }

}
/*
This code produces the following output.

myBA values:
    [0]:    False
    [1]:    False
    [2]:    False
    [3]:    False
    [4]:    False

After setting all elements to true,
    [0]:    True
    [1]:    True
    [2]:    True
    [3]:    True
    [4]:    True

After setting the last element to false,
    [0]:    True
    [1]:    True
    [2]:    True
    [3]:    True
    [4]:    False

The last two elements are:
    at index 3 : True
    at index 4 : False

*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myCol );
int main()
{

   // Creates and initializes a BitArray.
   BitArray^ myBA = gcnew BitArray( 5 );

   // Displays the properties and values of the BitArray.
   Console::WriteLine( "myBA values:" );
   PrintIndexAndValues( myBA );

   // Sets all the elements to true.
   myBA->SetAll( true );

   // Displays the properties and values of the BitArray.
   Console::WriteLine( "After setting all elements to true," );
   PrintIndexAndValues( myBA );

   // Sets the last index to false.
   myBA->Set( myBA->Count - 1, false );

   // Displays the properties and values of the BitArray.
   Console::WriteLine( "After setting the last element to false," );
   PrintIndexAndValues( myBA );

   // Gets the value of the last two elements.
   Console::WriteLine( "The last two elements are: " );
   Console::WriteLine( "    at index {0} : {1}", myBA->Count - 2, myBA->Get( myBA->Count - 2 ) );
   Console::WriteLine( "    at index {0} : {1}", myBA->Count - 1, myBA->Get( myBA->Count - 1 ) );
}

void PrintIndexAndValues( IEnumerable^ myCol )
{
   int i = 0;
   IEnumerator^ myEnum = myCol->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "    [{0}]:    {1}", i++, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 myBA values:
     [0]:    False
     [1]:    False
     [2]:    False
     [3]:    False
     [4]:    False

 After setting all elements to true,
     [0]:    True
     [1]:    True
     [2]:    True
     [3]:    True
     [4]:    True

 After setting the last element to false,
     [0]:    True
     [1]:    True
     [2]:    True
     [3]:    True
     [4]:    False

 The last two elements are:
     at index 3 : True
     at index 4 : False

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.SetAll 方法

BitArray
.
.
::
.
SetAll 方法
BitArray 类

将 BitArray 中的所有位设置为指定值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub SetAll ( _
    value As Boolean _
)
public void SetAll(
    bool value
)
public:
void SetAll(
    bool value
)
member SetAll :
        value:bool -> unit

参数

value
类型： System Boolean
要分配给所有位的布尔值。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何设置或获取 BitArray 中的特定元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes a BitArray.
        Dim myBA As New BitArray(5)

        ' Displays the properties and values of the BitArray.
        Console.WriteLine("myBA values:")
        PrintIndexAndValues(myBA)

        ' Sets all the elements to true.
        myBA.SetAll(True)

        ' Displays the properties and values of the BitArray.
        Console.WriteLine("After setting all elements to true,")
        PrintIndexAndValues(myBA)

        ' Sets the last index to false.
        myBA.Set(myBA.Count - 1, False)

        ' Displays the properties and values of the BitArray.
        Console.WriteLine("After setting the last element to false,")
        PrintIndexAndValues(myBA)

        ' Gets the value of the last two elements.
        Console.WriteLine("The last two elements are: ")
        Console.WriteLine("    at index {0} : {1}", _
           myBA.Count - 2, myBA.Get(myBA.Count - 2))
        Console.WriteLine("    at index {0} : {1}", _
           myBA.Count - 1, myBA.Get(myBA.Count - 1))
    End Sub 'Main

    Public Shared Sub PrintIndexAndValues(myCol As IEnumerable)
        Dim i As Integer
        Dim obj As Object
        i = 0
        For Each obj In  myCol
            Console.WriteLine("    [{0}]:    {1}", i, obj)
            i = i + 1
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' myBA values:
'     [0]:    False
'     [1]:    False
'     [2]:    False
'     [3]:    False
'     [4]:    False
'
' After setting all elements to true,
'     [0]:    True
'     [1]:    True
'     [2]:    True
'     [3]:    True
'     [4]:    True
'
' After setting the last element to false,
'     [0]:    True
'     [1]:    True
'     [2]:    True
'     [3]:    True
'     [4]:    False
'
' The last two elements are:
'     at index 3 : True
'     at index 4 : False

using System;
using System.Collections;
public class SamplesBitArray  {

   public static void Main()  {

      // Creates and initializes a BitArray.
      BitArray myBA = new BitArray( 5 );

      // Displays the properties and values of the BitArray.
      Console.WriteLine( "myBA values:" );
      PrintIndexAndValues( myBA );

      // Sets all the elements to true.
      myBA.SetAll( true );

      // Displays the properties and values of the BitArray.
      Console.WriteLine( "After setting all elements to true," );
      PrintIndexAndValues( myBA );

      // Sets the last index to false.
      myBA.Set( myBA.Count - 1, false );

      // Displays the properties and values of the BitArray.
      Console.WriteLine( "After setting the last element to false," );
      PrintIndexAndValues( myBA );

      // Gets the value of the last two elements.
      Console.WriteLine( "The last two elements are: " );
      Console.WriteLine( "    at index {0} : {1}", myBA.Count - 2, myBA.Get( myBA.Count - 2 ) );
      Console.WriteLine( "    at index {0} : {1}", myBA.Count - 1, myBA.Get( myBA.Count - 1 ) );
   }

   public static void PrintIndexAndValues( IEnumerable myCol )  {
      int i = 0;
      foreach ( Object obj in myCol ) {
         Console.WriteLine( "    [{0}]:    {1}", i++, obj );
      }
      Console.WriteLine();
   }

}
/*
This code produces the following output.

myBA values:
    [0]:    False
    [1]:    False
    [2]:    False
    [3]:    False
    [4]:    False

After setting all elements to true,
    [0]:    True
    [1]:    True
    [2]:    True
    [3]:    True
    [4]:    True

After setting the last element to false,
    [0]:    True
    [1]:    True
    [2]:    True
    [3]:    True
    [4]:    False

The last two elements are:
    at index 3 : True
    at index 4 : False

*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myCol );
int main()
{

   // Creates and initializes a BitArray.
   BitArray^ myBA = gcnew BitArray( 5 );

   // Displays the properties and values of the BitArray.
   Console::WriteLine( "myBA values:" );
   PrintIndexAndValues( myBA );

   // Sets all the elements to true.
   myBA->SetAll( true );

   // Displays the properties and values of the BitArray.
   Console::WriteLine( "After setting all elements to true," );
   PrintIndexAndValues( myBA );

   // Sets the last index to false.
   myBA->Set( myBA->Count - 1, false );

   // Displays the properties and values of the BitArray.
   Console::WriteLine( "After setting the last element to false," );
   PrintIndexAndValues( myBA );

   // Gets the value of the last two elements.
   Console::WriteLine( "The last two elements are: " );
   Console::WriteLine( "    at index {0} : {1}", myBA->Count - 2, myBA->Get( myBA->Count - 2 ) );
   Console::WriteLine( "    at index {0} : {1}", myBA->Count - 1, myBA->Get( myBA->Count - 1 ) );
}

void PrintIndexAndValues( IEnumerable^ myCol )
{
   int i = 0;
   IEnumerator^ myEnum = myCol->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "    [{0}]:    {1}", i++, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 myBA values:
     [0]:    False
     [1]:    False
     [2]:    False
     [3]:    False
     [4]:    False

 After setting all elements to true,
     [0]:    True
     [1]:    True
     [2]:    True
     [3]:    True
     [4]:    True

 After setting the last element to false,
     [0]:    True
     [1]:    True
     [2]:    True
     [3]:    True
     [4]:    False

 The last two elements are:
     at index 3 : True
     at index 4 : False

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.Xor 方法

BitArray
.
.
::
.
Xor 方法
BitArray 类

对当前 BitArray 中的元素和指定的 BitArray 中的相应元素执行按位“异或”运算。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Xor ( _
    value As BitArray _
) As BitArray
public BitArray Xor(
    BitArray value
)
public:
BitArray^ Xor(
    BitArray^ value
)
member Xor :
        value:BitArray -> BitArray

参数

value
类型： System.Collections BitArray
要对其执行按位“异或”运算的 BitArray。

返回值

类型： System.Collections BitArray
当前实例，包含对当前 BitArray 中的元素和指定的 BitArray 中的相应元素执行按位“异或”运算的结果。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | value 和当前 BitArray 的元素数不同。

如果恰好只有一个操作数为 true，则按位“异或”运算返回 true；如果两个操作数的布尔值相同，则按位“异或”运算返回 false。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将 XOR 应用于两个 BitArray 实例。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes two BitArrays of the same size.
        Dim myBA1 As New BitArray(4)
        Dim myBA2 As New BitArray(4)
        myBA1(0) = False
        myBA1(1) = False
        myBA1(2) = True
        myBA1(3) = True
        myBA2(0) = False
        myBA2(2) = False
        myBA2(1) = True
        myBA2(3) = True

        ' Performs a bitwise XOR operation between BitArray instances of the same size.
        Console.WriteLine("Initial values")
        Console.Write("myBA1:")
        PrintValues(myBA1, 8)
        Console.Write("myBA2:")
        PrintValues(myBA2, 8)
        Console.WriteLine()

        Console.WriteLine("Result")
        Console.Write("XOR:")
        PrintValues(myBA1.Xor(myBA2), 8)
        Console.WriteLine()

        Console.WriteLine("After XOR")
        Console.Write("myBA1:")
        PrintValues(myBA1, 8)
        Console.Write("myBA2:")
        PrintValues(myBA2, 8)
        Console.WriteLine()

        ' Performing XOR between BitArray instances of different sizes returns an exception.
        Try
            Dim myBA3 As New BitArray(8)
            myBA3(0) = False
            myBA3(1) = False
            myBA3(2) = False
            myBA3(3) = False
            myBA3(4) = True
            myBA3(5) = True
            myBA3(6) = True
            myBA3(7) = True
            myBA1.Xor(myBA3)
        Catch myException As Exception
            Console.WriteLine("Exception: " + myException.ToString())
        End Try
    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable, myWidth As Integer)
        Dim i As Integer = myWidth
        Dim obj As [Object]
        For Each obj In  myList
            If i <= 0 Then
                i = myWidth
                Console.WriteLine()
            End If
            i -= 1
            Console.Write("{0,8}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' Initial values
' myBA1:   False   False    True    True
' myBA2:   False    True   False    True
'
' Result
' XOR:   False    True    True   False
'
' After XOR
' myBA1:   False    True    True   False
' myBA2:   False    True   False    True
'
' Exception: System.ArgumentException: Array lengths must be the same.
'    at System.Collections.BitArray.Xor(BitArray value)
'    at SamplesBitArray.Main()

using System;
using System.Collections;
public class SamplesBitArray  {

   public static void Main()  {

      // Creates and initializes two BitArrays of the same size.
      BitArray myBA1 = new BitArray( 4 );
      BitArray myBA2 = new BitArray( 4 );
      myBA1[0] = myBA1[1] = false;
      myBA1[2] = myBA1[3] = true;
      myBA2[0] = myBA2[2] = false;
      myBA2[1] = myBA2[3] = true;

      // Performs a bitwise XOR operation between BitArray instances of the same size.
      Console.WriteLine( "Initial values" );
      Console.Write( "myBA1:" );
      PrintValues( myBA1, 8 );
      Console.Write( "myBA2:" );
      PrintValues( myBA2, 8 );
      Console.WriteLine();

      Console.WriteLine( "Result" );
      Console.Write( "XOR:" );
      PrintValues( myBA1.Xor( myBA2 ), 8 );
      Console.WriteLine();

      Console.WriteLine( "After XOR" );
      Console.Write( "myBA1:" );
      PrintValues( myBA1, 8 );
      Console.Write( "myBA2:" );
      PrintValues( myBA2, 8 );
      Console.WriteLine();

      // Performing XOR between BitArray instances of different sizes returns an exception.
      try  {
         BitArray myBA3 = new BitArray( 8 );
         myBA3[0] = myBA3[1] = myBA3[2] = myBA3[3] = false;
         myBA3[4] = myBA3[5] = myBA3[6] = myBA3[7] = true;
         myBA1.Xor( myBA3 );
      } catch ( Exception myException )  {
         Console.WriteLine("Exception: " + myException.ToString());
      }
   }

   public static void PrintValues( IEnumerable myList, int myWidth )  {
      int i = myWidth;
      foreach ( Object obj in myList ) {
         if ( i <= 0 )  {
            i = myWidth;
            Console.WriteLine();
         }
         i--;
         Console.Write( "{0,8}", obj );
      }
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Initial values
myBA1:   False   False    True    True
myBA2:   False    True   False    True

Result
XOR:   False    True    True   False

After XOR
myBA1:   False    True    True   False
myBA2:   False    True   False    True

Exception: System.ArgumentException: Array lengths must be the same.
   at System.Collections.BitArray.Xor(BitArray value)
   at SamplesBitArray.Main()

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, int myWidth );
int main()
{

   // Creates and initializes two BitArrays of the same size.
   BitArray^ myBA1 = gcnew BitArray( 4 );
   BitArray^ myBA2 = gcnew BitArray( 4 );
   myBA1[ 0 ] = false;
   myBA1[ 1 ] = false;
   myBA1[ 2 ] = true;
   myBA1[ 3 ] = true;
   myBA2[ 0 ] = false;
   myBA2[ 1 ] = true;
   myBA2[ 2 ] = false;
   myBA2[ 3 ] = true;

   // Performs a bitwise XOR operation between BitArray instances of the same size.
   Console::WriteLine( "Initial values" );
   Console::Write( "myBA1:" );
   PrintValues( myBA1, 8 );
   Console::Write( "myBA2:" );
   PrintValues( myBA2, 8 );
   Console::WriteLine();
   Console::WriteLine( "Result" );
   Console::Write( "XOR:" );
   PrintValues( myBA1->Xor( myBA2 ), 8 );
   Console::WriteLine();
   Console::WriteLine( "After XOR" );
   Console::Write( "myBA1:" );
   PrintValues( myBA1, 8 );
   Console::Write( "myBA2:" );
   PrintValues( myBA2, 8 );
   Console::WriteLine();

   // Performing XOR between BitArray instances of different sizes returns an exception.
   try
   {
      BitArray^ myBA3 = gcnew BitArray( 8 );
      myBA3[ 0 ] = false;
      myBA3[ 1 ] = false;
      myBA3[ 2 ] = false;
      myBA3[ 3 ] = false;
      myBA3[ 4 ] = true;
      myBA3[ 5 ] = true;
      myBA3[ 6 ] = true;
      myBA3[ 7 ] = true;
      myBA1->Xor( myBA3 );
   }
   catch ( Exception^ myException )
   {
      Console::WriteLine( "Exception: {0}", myException );
   }

}

void PrintValues( IEnumerable^ myList, int myWidth )
{
   int i = myWidth;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      if ( i <= 0 )
      {
         i = myWidth;
         Console::WriteLine();
      }

      i--;
      Console::Write( "{0,8}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Initial values
 myBA1:   False   False    True    True
 myBA2:   False    True   False    True

 Result
 XOR:   False    True    True   False

 After XOR
 myBA1:   False    True    True   False
 myBA2:   False    True   False    True

 Exception: System.ArgumentException: Array lengths must be the same.
    at System.Collections.BitArray.Xor(BitArray value)
    at SamplesBitArray.Main()

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray 属性

BitArray 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
BitArray 类

BitArray 类型公开以下成员。

名称 说明
页首

参考

BitArray 类
System.Collections 命名空间


BitArray ..::.Count 属性

BitArray
.
.
::
.
Count 属性
BitArray 类

获取 BitArray 中包含的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Count As Integer
    Get
public int Count { get; }
public:
virtual property int Count {
    int get () sealed;
}
abstract Count : int
override Count : int

属性值

类型： System Int32
BitArray 中包含的元素数。

实现

Length 和 Count 返回相同的值。可将 Length 设为指定值，但是 Count 为只读。 Length 和 Count 返回相同的值。可将 Length 设为指定值，但是 Count 为只读。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.IsReadOnly 属性

BitArray
.
.
::
.
IsReadOnly 属性
BitArray 类

获取一个值，该值指示 BitArray 是否为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsReadOnly As Boolean
    Get
public bool IsReadOnly { get; }
public:
property bool IsReadOnly {
    bool get ();
}
member IsReadOnly : bool

属性值

类型： System Boolean
此属性恒为 false。

BitArray 实现 IsReadOnly 属性，因为这是 System.Collections..::.IList 接口所需要的。

只读集合在创建后就不能再添加、移除或修改元素。

只读集合只是一个具有用于防止修改的包装的集合；因此，如果更改基础集合，则只读集合将反映那些更改。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.IsSynchronized 属性

BitArray
.
.
::
.
IsSynchronized 属性
BitArray 类

获取一个值，该值指示是否同步对 BitArray 的访问（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property IsSynchronized As Boolean
    Get
public bool IsSynchronized { get; }
public:
virtual property bool IsSynchronized {
    bool get () sealed;
}
abstract IsSynchronized : bool
override IsSynchronized : bool

属性值

类型： System Boolean
此属性恒为 false。

实现

BitArray 实现 IsSynchronized 属性，因为这是 System.Collections..::.ICollection 接口所需要的。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。

Dim myCollection As New BitArray(64, true)
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

BitArray myCollection = new BitArray(64, true);
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

BitArray^ myCollection = gcnew BitArray(64, true);
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间
SyncRoot


BitArray ..::.Item 属性

BitArray
.
.
::
.
Item 属性
BitArray 类

获取或设置 BitArray 中特定位置的位的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Property Item ( _
    index As Integer _
) As Boolean
    Get
    Set
public bool this[
    int index
] { get; set; }
public:
property bool Item[int index] {
    bool get (int index);
    void set (int index, bool value);
}
member Item : bool with get, set

参数

index
类型： System Int32
要获取或设置的值的从零开始的索引。

属性值

类型： System Boolean
在 index 位置处的位的值。
异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 等于或大于 Count。

可以使用下面的语法通过此属性访问集合中的特定元素：myCollection[index]。

C# 语言使用 this 关键字来定义索引器而不是通过实现 Item 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。 C# 语言使用 this 关键字来定义索引器而不是通过实现 Item 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。

检索此属性值的运算复杂度是 O(1)；设置此属性的运算复杂度也是 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间
Count


BitArray ..::.Length 属性

BitArray
.
.
::
.
Length 属性
BitArray 类

获取或设置 BitArray 中元素的数目。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Property Length As Integer
    Get
    Set
public int Length { get; set; }
public:
property int Length {
    int get ();
    void set (int value);
}
member Length : int with get, set

属性值

类型： System Int32
BitArray 中元素的数目。
异常 | 条件
ArgumentOutOfRangeException | 属性设置为一个小于零的值。

Length 和 Count 返回相同的值。可将 Length 设为指定值，但是 Count 为只读。 Length 和 Count 返回相同的值。可将 Length 设为指定值，但是 Count 为只读。

如果将 Length 设置为一个小于 Count 的值，那么将截断 BitArray，并删除索引 value-1 之后的元素。

如果 Length 设置为大于 Count 的值，则新元素被设置为 false。

检索此属性的值的运算复杂度为 O(1)。设置此属性的运算复杂度为 O(n)。 检索此属性的值的运算复杂度为 O(1)。设置此属性的运算复杂度为 O(n)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间


BitArray ..::.SyncRoot 属性

BitArray
.
.
::
.
SyncRoot 属性
BitArray 类

获取可用于同步 BitArray 访问的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property SyncRoot As Object
    Get
public Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get () sealed;
}
abstract SyncRoot : Object
override SyncRoot : Object

属性值

类型： System Object
可用于同步对 BitArray 的访问的对象。

实现

派生类可以使用 SyncRoot 属性提供其自己的 BitArray 同步版本。同步代码必须在 BitArray 的 SyncRoot 上执行操作，而不是直接在 BitArray 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 BitArray 对象。 派生类可以使用 SyncRoot 属性提供其自己的 BitArray 同步版本。同步代码必须在 BitArray 的 SyncRoot 上执行操作，而不是直接在 BitArray 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 BitArray 对象。 派生类可以使用 SyncRoot 属性提供其自己的 BitArray 同步版本。同步代码必须在 BitArray 的 SyncRoot 上执行操作，而不是直接在 BitArray 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 BitArray 对象。 派生类可以使用 SyncRoot 属性提供其自己的 BitArray 同步版本。同步代码必须在 BitArray 的 SyncRoot 上执行操作，而不是直接在 BitArray 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 BitArray 对象。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。

Dim myCollection As New BitArray(64, true)
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

BitArray myCollection = new BitArray(64, true);
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

BitArray^ myCollection = gcnew BitArray(64, true);
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

BitArray 类
BitArray 成员
System.Collections 命名空间
IsSynchronized


CaseInsensitiveComparer 类

CaseInsensitiveComparer 类
成员

比较两个对象是否相等，比较时忽略字符串的大小写。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class CaseInsensitiveComparer _
    Implements IComparer
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class CaseInsensitiveComparer : IComparer
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class CaseInsensitiveComparer : IComparer
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type CaseInsensitiveComparer =
    class
        interface IComparer
    end

CaseInsensitiveComparer 实现 IComparer 接口，该接口支持对字符串进行不区分大小写的比较，正如 CaseInsensitiveHashCodeProvider 实现 IHashCodeProvider 接口（该接口支持对字符串进行不区分大小写的比较）一样。

Comparer 类为 IComparer 接口的默认实现，并执行区分大小写的字符串比较。

要重写 Object..::.GetHashCode 方法（或 IHashCodeProvider 接口）和 Object..::.Equals 方法（或 IComparer 接口），需要有被 Hashtable 用作键的对象。两个方法或接口的实现必须以相同的方式处理大小写；否则，Hashtable 的行为可能不正确。例如，创建 Hashtable 时，您必须配合使用此类和 CaseInsensitiveHashCodeProvider 类或任何不区分大小写的 IHashCodeProvider 实现。 要重写 Object..::.GetHashCode 方法（或 IHashCodeProvider 接口）和 Object..::.Equals 方法（或 IComparer 接口），需要有被 Hashtable 用作键的对象。两个方法或接口的实现必须以相同的方式处理大小写；否则，Hashtable 的行为可能不正确。例如，创建 Hashtable 时，您必须配合使用此类和 CaseInsensitiveHashCodeProvider 类或任何不区分大小写的 IHashCodeProvider 实现。 要重写 Object..::.GetHashCode 方法（或 IHashCodeProvider 接口）和 Object..::.Equals 方法（或 IComparer 接口），需要有被 Hashtable 用作键的对象。两个方法或接口的实现必须以相同的方式处理大小写；否则，Hashtable 的行为可能不正确。例如，创建 Hashtable 时，您必须配合使用此类和 CaseInsensitiveHashCodeProvider 类或任何不区分大小写的 IHashCodeProvider 实现。

根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例创建一个区分大小写的哈希表和一个不区分大小写的哈希表，并演示二者行为的差别，甚至是当二者包含相同的元素时各自行为的差别。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a Hashtable using the default hash code provider and the default comparer.
      Dim myHT1 As New Hashtable()
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the culture of the current thread.
      Dim myHT2 As New Hashtable(New CaseInsensitiveHashCodeProvider(), New CaseInsensitiveComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the InvariantCulture.
      Dim myHT3 As New Hashtable(CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant)
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT4 As New Hashtable(New CaseInsensitiveHashCodeProvider(myCul), New CaseInsensitiveComparer(myCul))
      myHT4.Add("FIRST", "Hello")
      myHT4.Add("SECOND", "World")
      myHT4.Add("THIRD", "!")

      ' Search for a key in each hashtable.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
      Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

public class SamplesHashtable  {

   public static void Main()  {

      // Create a Hashtable using the default hash code provider and the default comparer.
      Hashtable myHT1 = new Hashtable();
      myHT1.Add("FIRST", "Hello");
      myHT1.Add("SECOND", "World");
      myHT1.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the culture of the current thread.
      Hashtable myHT2 = new Hashtable( new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer() );
      myHT2.Add("FIRST", "Hello");
      myHT2.Add("SECOND", "World");
      myHT2.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the InvariantCulture.
      Hashtable myHT3 = new Hashtable( CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant );
      myHT3.Add("FIRST", "Hello");
      myHT3.Add("SECOND", "World");
      myHT3.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      CultureInfo myCul = new CultureInfo( "tr-TR" );
      Hashtable myHT4 = new Hashtable( new CaseInsensitiveHashCodeProvider( myCul ), new CaseInsensitiveComparer( myCul ) );
      myHT4.Add("FIRST", "Hello");
      myHT4.Add("SECOND", "World");
      myHT4.Add("THIRD", "!");

      // Search for a key in each hashtable.
      Console.WriteLine( "first is in myHT1: {0}", myHT1.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT2: {0}", myHT2.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT3: {0}", myHT3.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT4: {0}", myHT4.ContainsKey( "first" ) );

   }

}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Create a Hashtable using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable;
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the culture of the current thread.
   Hashtable^ myHT2 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider,gcnew CaseInsensitiveComparer );
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable( CaseInsensitiveHashCodeProvider::DefaultInvariant,CaseInsensitiveComparer::DefaultInvariant );
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   Hashtable^ myHT4 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider( myCul ),gcnew CaseInsensitiveComparer( myCul ) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hashtable.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

System.Collections System.Collections..::.CaseInsensitiveComparerCaseInsensitiveComparer
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveComparer 成员
System.Collections 命名空间
IComparer
IComparable
Comparer
System.Globalization CompareInfo
Thread CurrentCulture
System.Globalization CultureInfo
CaseInsensitiveHashCodeProvider

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveComparer 成员

CaseInsensitiveComparer 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CaseInsensitiveComparer 类

比较两个对象是否相等，比较时忽略字符串的大小写。

CaseInsensitiveComparer 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

CaseInsensitiveComparer 类
System.Collections 命名空间


CaseInsensitiveComparer 构造函数

CaseInsensitiveComparer 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CaseInsensitiveComparer 类

初始化 CaseInsensitiveComparer 类的新实例。

名称 说明
页首

参考

CaseInsensitiveComparer 类
CaseInsensitiveComparer 成员
System.Collections 命名空间


CaseInsensitiveComparer 构造函数

CaseInsensitiveComparer 构造函数
CaseInsensitiveComparer 类

使用当前线程的 Thread..::.CurrentCulture 初始化 CaseInsensitiveComparer 类的新实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public CaseInsensitiveComparer()
public:
CaseInsensitiveComparer()
new : unit -> CaseInsensitiveComparer

当使用此构造函数创建 CaseInsensitiveComparer 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定排序顺序和大小写规则；因此，字符串比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 当使用此构造函数创建 CaseInsensitiveComparer 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定排序顺序和大小写规则；因此，字符串比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 当使用此构造函数创建 CaseInsensitiveComparer 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定排序顺序和大小写规则；因此，字符串比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例创建一个区分大小写的哈希表和一个不区分大小写的哈希表，并演示二者行为的差别，甚至是当二者包含相同的元素时各自行为的差别。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a Hashtable using the default hash code provider and the default comparer.
      Dim myHT1 As New Hashtable()
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the culture of the current thread.
      Dim myHT2 As New Hashtable(New CaseInsensitiveHashCodeProvider(), New CaseInsensitiveComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the InvariantCulture.
      Dim myHT3 As New Hashtable(CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant)
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT4 As New Hashtable(New CaseInsensitiveHashCodeProvider(myCul), New CaseInsensitiveComparer(myCul))
      myHT4.Add("FIRST", "Hello")
      myHT4.Add("SECOND", "World")
      myHT4.Add("THIRD", "!")

      ' Search for a key in each hashtable.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
      Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

public class SamplesHashtable  {

   public static void Main()  {

      // Create a Hashtable using the default hash code provider and the default comparer.
      Hashtable myHT1 = new Hashtable();
      myHT1.Add("FIRST", "Hello");
      myHT1.Add("SECOND", "World");
      myHT1.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the culture of the current thread.
      Hashtable myHT2 = new Hashtable( new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer() );
      myHT2.Add("FIRST", "Hello");
      myHT2.Add("SECOND", "World");
      myHT2.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the InvariantCulture.
      Hashtable myHT3 = new Hashtable( CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant );
      myHT3.Add("FIRST", "Hello");
      myHT3.Add("SECOND", "World");
      myHT3.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      CultureInfo myCul = new CultureInfo( "tr-TR" );
      Hashtable myHT4 = new Hashtable( new CaseInsensitiveHashCodeProvider( myCul ), new CaseInsensitiveComparer( myCul ) );
      myHT4.Add("FIRST", "Hello");
      myHT4.Add("SECOND", "World");
      myHT4.Add("THIRD", "!");

      // Search for a key in each hashtable.
      Console.WriteLine( "first is in myHT1: {0}", myHT1.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT2: {0}", myHT2.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT3: {0}", myHT3.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT4: {0}", myHT4.ContainsKey( "first" ) );

   }

}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Create a Hashtable using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable;
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the culture of the current thread.
   Hashtable^ myHT2 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider,gcnew CaseInsensitiveComparer );
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable( CaseInsensitiveHashCodeProvider::DefaultInvariant,CaseInsensitiveComparer::DefaultInvariant );
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   Hashtable^ myHT4 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider( myCul ),gcnew CaseInsensitiveComparer( myCul ) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hashtable.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveComparer 类
CaseInsensitiveComparer 成员
CaseInsensitiveComparer 重载
System.Collections 命名空间
Thread CurrentCulture
System.Globalization CultureInfo
System.Globalization CompareInfo

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveComparer 构造函数 (CultureInfo)

CaseInsensitiveComparer 构造函数 (CultureInfo)
CaseInsensitiveComparer 类

使用指定的 System.Globalization..::.CultureInfo 初始化 CaseInsensitiveComparer 类的新实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    culture As CultureInfo _
)
public CaseInsensitiveComparer(
    CultureInfo culture
)
public:
CaseInsensitiveComparer(
    CultureInfo^ culture
)
new :
        culture:CultureInfo -> CaseInsensitiveComparer

参数

culture
类型： System.Globalization CultureInfo
要用于新 CaseInsensitiveComparer 的 System.Globalization..::.CultureInfo。
异常 | 条件
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

比较过程使用指定的 System.Globalization..::.CultureInfo 来确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用指定的 System.Globalization..::.CultureInfo 来确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用指定的 System.Globalization..::.CultureInfo 来确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例创建一个区分大小写的哈希表和一个不区分大小写的哈希表，并演示二者行为的差别，甚至是当二者包含相同的元素时各自行为的差别。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a Hashtable using the default hash code provider and the default comparer.
      Dim myHT1 As New Hashtable()
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the culture of the current thread.
      Dim myHT2 As New Hashtable(New CaseInsensitiveHashCodeProvider(), New CaseInsensitiveComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the InvariantCulture.
      Dim myHT3 As New Hashtable(CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant)
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT4 As New Hashtable(New CaseInsensitiveHashCodeProvider(myCul), New CaseInsensitiveComparer(myCul))
      myHT4.Add("FIRST", "Hello")
      myHT4.Add("SECOND", "World")
      myHT4.Add("THIRD", "!")

      ' Search for a key in each hashtable.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
      Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

public class SamplesHashtable  {

   public static void Main()  {

      // Create a Hashtable using the default hash code provider and the default comparer.
      Hashtable myHT1 = new Hashtable();
      myHT1.Add("FIRST", "Hello");
      myHT1.Add("SECOND", "World");
      myHT1.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the culture of the current thread.
      Hashtable myHT2 = new Hashtable( new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer() );
      myHT2.Add("FIRST", "Hello");
      myHT2.Add("SECOND", "World");
      myHT2.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the InvariantCulture.
      Hashtable myHT3 = new Hashtable( CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant );
      myHT3.Add("FIRST", "Hello");
      myHT3.Add("SECOND", "World");
      myHT3.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      CultureInfo myCul = new CultureInfo( "tr-TR" );
      Hashtable myHT4 = new Hashtable( new CaseInsensitiveHashCodeProvider( myCul ), new CaseInsensitiveComparer( myCul ) );
      myHT4.Add("FIRST", "Hello");
      myHT4.Add("SECOND", "World");
      myHT4.Add("THIRD", "!");

      // Search for a key in each hashtable.
      Console.WriteLine( "first is in myHT1: {0}", myHT1.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT2: {0}", myHT2.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT3: {0}", myHT3.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT4: {0}", myHT4.ContainsKey( "first" ) );

   }

}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Create a Hashtable using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable;
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the culture of the current thread.
   Hashtable^ myHT2 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider,gcnew CaseInsensitiveComparer );
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable( CaseInsensitiveHashCodeProvider::DefaultInvariant,CaseInsensitiveComparer::DefaultInvariant );
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   Hashtable^ myHT4 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider( myCul ),gcnew CaseInsensitiveComparer( myCul ) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hashtable.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveComparer 类
CaseInsensitiveComparer 成员
CaseInsensitiveComparer 重载
System.Collections 命名空间
System.Globalization CultureInfo
System.Globalization CompareInfo

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveComparer 方法

CaseInsensitiveComparer 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CaseInsensitiveComparer 类

CaseInsensitiveComparer 类型公开以下成员。

名称 说明
页首

参考

CaseInsensitiveComparer 类
System.Collections 命名空间


CaseInsensitiveComparer ..::.Compare 方法

CaseInsensitiveComparer
.
.
::
.
Compare 方法
CaseInsensitiveComparer 类

对同一类型的两个对象执行不区分大小写的比较，并返回一个值，指示其中一个对象是小于、等于还是大于另一个对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Compare ( _ a As Object, _ b As Object _ ) As Integer
public int Compare( Object a, Object b )
public: virtual int Compare( Object^ a, Object^ b ) sealed
abstract Compare : a:Object * b:Object -> int override Compare : a:Object * b:Object -> int
参数
a
类型： System Object
要比较的第一个对象。
b
类型： System Object
要比较的第二个对象。
返回值
类型： System Int32
一个带符号整数，它指示
a
与
b
的相对值，如下表所示。
值
含义
小于零
在忽略大小写的情况下，
a
小于
b
。
零
在忽略大小写的情况下，
a
等于
b
。
大于零
在忽略大小写的情况下，
a
大于
b
。
实现
异常 | 条件
ArgumentException | a 和 b 都不实现 IComparable 接口。 - 或 - a 和 b 的类型不同。

如果 a 和 b 都是字符串，则此方法使用 CompareInfo..::.Compare 比较这两个字符串，并且忽略大小写；否则使用每个对象的 IComparable 实现。就是说，如果 a 实现 IComparable，则此方法返回 a 的结果。CompareTob )，否则，如果 b 实现 IComparable，则它返回负值的 b 结果。CompareTo (a). 如果 a 和 b 都是字符串，则此方法使用 CompareInfo..::.Compare 比较这两个字符串，并且忽略大小写；否则使用每个对象的 IComparable 实现。就是说，如果 a 实现 IComparable，则此方法返回 a 的结果。CompareTob )，否则，如果 b 实现 IComparable，则它返回负值的 b 结果。CompareTo (a). 如果 a 和 b 都是字符串，则此方法使用 CompareInfo..::.Compare 比较这两个字符串，并且忽略大小写；否则使用每个对象的 IComparable 实现。就是说，如果 a 实现 IComparable，则此方法返回 a 的结果。CompareTob )，否则，如果 b 实现 IComparable，则它返回负值的 b 结果。CompareTo (a). 如果 a 和 b 都是字符串，则此方法使用 CompareInfo..::.Compare 比较这两个字符串，并且忽略大小写；否则使用每个对象的 IComparable 实现。就是说，如果 a 实现 IComparable，则此方法返回 a 的结果。CompareTob )，否则，如果 b 实现 IComparable，则它返回负值的 b 结果。CompareTo (a).

当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveComparer 类
CaseInsensitiveComparer 成员
System.Collections 命名空间
IComparable
System.Globalization CompareInfo
Thread CurrentCulture
System.Globalization CultureInfo

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveComparer 属性

CaseInsensitiveComparer 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CaseInsensitiveComparer 类

CaseInsensitiveComparer 类型公开以下成员。

名称 说明
页首

参考

CaseInsensitiveComparer 类
System.Collections 命名空间


CaseInsensitiveComparer ..::.Default 属性

CaseInsensitiveComparer
.
.
::
.
Default 属性
CaseInsensitiveComparer 类

获取 CaseInsensitiveComparer 的一个实例，该实例与当前线程的 Thread..::.CurrentCulture 关联并且始终可用。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Default As CaseInsensitiveComparer
    Get
public static CaseInsensitiveComparer Default { get; }
public:
static property CaseInsensitiveComparer^ Default {
    CaseInsensitiveComparer^ get ();
}
static member Default : CaseInsensitiveComparer

属性值

类型： System.Collections CaseInsensitiveComparer
CaseInsensitiveComparer 的实例，它与当前线程的 Thread..::.CurrentCulture 关联。

当使用此无参数构造函数创建 CaseInsensitiveComparer 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定排序顺序和大小写规则；因此，字符串比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 当使用此无参数构造函数创建 CaseInsensitiveComparer 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定排序顺序和大小写规则；因此，字符串比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 当使用此无参数构造函数创建 CaseInsensitiveComparer 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定排序顺序和大小写规则；因此，字符串比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveComparer 类
CaseInsensitiveComparer 成员
System.Collections 命名空间
Thread CurrentCulture
System.Globalization CompareInfo

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveComparer ..::.DefaultInvariant 属性

CaseInsensitiveComparer
.
.
::
.
DefaultInvariant 属性
CaseInsensitiveComparer 类

获取 CaseInsensitiveComparer 的一个实例，该实例与 CultureInfo..::.InvariantCulture 关联并且始终可用。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property DefaultInvariant As CaseInsensitiveComparer
    Get
public static CaseInsensitiveComparer DefaultInvariant { get; }
public:
static property CaseInsensitiveComparer^ DefaultInvariant {
    CaseInsensitiveComparer^ get ();
}
static member DefaultInvariant : CaseInsensitiveComparer

属性值

类型： System.Collections CaseInsensitiveComparer
CaseInsensitiveComparer 的实例，它与 CultureInfo..::.InvariantCulture 关联。

比较过程使用 CultureInfo..::.InvariantCulture 确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用 CultureInfo..::.InvariantCulture 确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用 CultureInfo..::.InvariantCulture 确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例创建一个区分大小写的哈希表和一个不区分大小写的哈希表，并演示二者行为的差别，甚至是当二者包含相同的元素时各自行为的差别。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a Hashtable using the default hash code provider and the default comparer.
      Dim myHT1 As New Hashtable()
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the culture of the current thread.
      Dim myHT2 As New Hashtable(New CaseInsensitiveHashCodeProvider(), New CaseInsensitiveComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the InvariantCulture.
      Dim myHT3 As New Hashtable(CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant)
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT4 As New Hashtable(New CaseInsensitiveHashCodeProvider(myCul), New CaseInsensitiveComparer(myCul))
      myHT4.Add("FIRST", "Hello")
      myHT4.Add("SECOND", "World")
      myHT4.Add("THIRD", "!")

      ' Search for a key in each hashtable.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
      Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

public class SamplesHashtable  {

   public static void Main()  {

      // Create a Hashtable using the default hash code provider and the default comparer.
      Hashtable myHT1 = new Hashtable();
      myHT1.Add("FIRST", "Hello");
      myHT1.Add("SECOND", "World");
      myHT1.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the culture of the current thread.
      Hashtable myHT2 = new Hashtable( new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer() );
      myHT2.Add("FIRST", "Hello");
      myHT2.Add("SECOND", "World");
      myHT2.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the InvariantCulture.
      Hashtable myHT3 = new Hashtable( CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant );
      myHT3.Add("FIRST", "Hello");
      myHT3.Add("SECOND", "World");
      myHT3.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      CultureInfo myCul = new CultureInfo( "tr-TR" );
      Hashtable myHT4 = new Hashtable( new CaseInsensitiveHashCodeProvider( myCul ), new CaseInsensitiveComparer( myCul ) );
      myHT4.Add("FIRST", "Hello");
      myHT4.Add("SECOND", "World");
      myHT4.Add("THIRD", "!");

      // Search for a key in each hashtable.
      Console.WriteLine( "first is in myHT1: {0}", myHT1.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT2: {0}", myHT2.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT3: {0}", myHT3.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT4: {0}", myHT4.ContainsKey( "first" ) );

   }

}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Create a Hashtable using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable;
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the culture of the current thread.
   Hashtable^ myHT2 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider,gcnew CaseInsensitiveComparer );
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable( CaseInsensitiveHashCodeProvider::DefaultInvariant,CaseInsensitiveComparer::DefaultInvariant );
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   Hashtable^ myHT4 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider( myCul ),gcnew CaseInsensitiveComparer( myCul ) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hashtable.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveComparer 类
CaseInsensitiveComparer 成员
System.Collections 命名空间
CultureInfo InvariantCulture
System.Globalization CompareInfo

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveHashCodeProvider 类

CaseInsensitiveHashCodeProvider 类
成员

注意：此 API 现在已过时。 非过时替代项是 StringComparer。

使用忽略字符串大小写的哈希算法，为对象提供哈希代码。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ObsoleteAttribute("Please use StringComparer instead.")> _
<ComVisibleAttribute(True)> _
Public Class CaseInsensitiveHashCodeProvider _
    Implements IHashCodeProvider
[SerializableAttribute]
[ObsoleteAttribute("Please use StringComparer instead.")]
[ComVisibleAttribute(true)]
public class CaseInsensitiveHashCodeProvider : IHashCodeProvider
[SerializableAttribute]
[ObsoleteAttribute(L"Please use StringComparer instead.")]
[ComVisibleAttribute(true)]
public ref class CaseInsensitiveHashCodeProvider : IHashCodeProvider
[<SerializableAttribute>]
[<ObsoleteAttribute("Please use StringComparer instead.")>]
[<ComVisibleAttribute(true)>]
type CaseInsensitiveHashCodeProvider =
    class
        interface IHashCodeProvider
    end

CaseInsensitiveHashCodeProvider 实现 IHashCodeProvider 接口，该接口支持对字符串进行不区分大小写的比较，正如 CaseInsensitiveComparer 实现 IComparer 接口（该接口支持对字符串进行不区分大小写的比较）一样。

要重写 Object..::.GetHashCode 方法（或 IHashCodeProvider 接口）和 Object..::.Equals 方法（或 IComparer 接口），需要有被 Hashtable 用作键的对象。两个方法或接口的实现必须以相同的方式处理大小写；否则，Hashtable 的行为可能不正确。例如，创建 Hashtable 时，您必须配合使用此类和 CaseInsensitiveComparer 类或任何不区分大小写的 IComparer 实现。 要重写 Object..::.GetHashCode 方法（或 IHashCodeProvider 接口）和 Object..::.Equals 方法（或 IComparer 接口），需要有被 Hashtable 用作键的对象。两个方法或接口的实现必须以相同的方式处理大小写；否则，Hashtable 的行为可能不正确。例如，创建 Hashtable 时，您必须配合使用此类和 CaseInsensitiveComparer 类或任何不区分大小写的 IComparer 实现。 要重写 Object..::.GetHashCode 方法（或 IHashCodeProvider 接口）和 Object..::.Equals 方法（或 IComparer 接口），需要有被 Hashtable 用作键的对象。两个方法或接口的实现必须以相同的方式处理大小写；否则，Hashtable 的行为可能不正确。例如，创建 Hashtable 时，您必须配合使用此类和 CaseInsensitiveComparer 类或任何不区分大小写的 IComparer 实现。

下面的代码示例创建一个区分大小写的哈希表和一个不区分大小写的哈希表，并演示二者行为的差别，甚至是当二者包含相同的元素时各自行为的差别。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a Hashtable using the default hash code provider and the default comparer.
      Dim myHT1 As New Hashtable()
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the culture of the current thread.
      Dim myHT2 As New Hashtable(New CaseInsensitiveHashCodeProvider(), New CaseInsensitiveComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the InvariantCulture.
      Dim myHT3 As New Hashtable(CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant)
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT4 As New Hashtable(New CaseInsensitiveHashCodeProvider(myCul), New CaseInsensitiveComparer(myCul))
      myHT4.Add("FIRST", "Hello")
      myHT4.Add("SECOND", "World")
      myHT4.Add("THIRD", "!")

      ' Search for a key in each hashtable.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
      Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

public class SamplesHashtable  {

   public static void Main()  {

      // Create a Hashtable using the default hash code provider and the default comparer.
      Hashtable myHT1 = new Hashtable();
      myHT1.Add("FIRST", "Hello");
      myHT1.Add("SECOND", "World");
      myHT1.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the culture of the current thread.
      Hashtable myHT2 = new Hashtable( new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer() );
      myHT2.Add("FIRST", "Hello");
      myHT2.Add("SECOND", "World");
      myHT2.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the InvariantCulture.
      Hashtable myHT3 = new Hashtable( CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant );
      myHT3.Add("FIRST", "Hello");
      myHT3.Add("SECOND", "World");
      myHT3.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      CultureInfo myCul = new CultureInfo( "tr-TR" );
      Hashtable myHT4 = new Hashtable( new CaseInsensitiveHashCodeProvider( myCul ), new CaseInsensitiveComparer( myCul ) );
      myHT4.Add("FIRST", "Hello");
      myHT4.Add("SECOND", "World");
      myHT4.Add("THIRD", "!");

      // Search for a key in each hashtable.
      Console.WriteLine( "first is in myHT1: {0}", myHT1.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT2: {0}", myHT2.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT3: {0}", myHT3.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT4: {0}", myHT4.ContainsKey( "first" ) );

   }

}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Create a Hashtable using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable;
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the culture of the current thread.
   Hashtable^ myHT2 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider,gcnew CaseInsensitiveComparer );
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable( CaseInsensitiveHashCodeProvider::DefaultInvariant,CaseInsensitiveComparer::DefaultInvariant );
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   Hashtable^ myHT4 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider( myCul ),gcnew CaseInsensitiveComparer( myCul ) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hashtable.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

System.Collections System.Collections..::.CaseInsensitiveHashCodeProviderCaseInsensitiveHashCodeProvider
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

CaseInsensitiveHashCodeProvider 成员
System.Collections 命名空间
Hashtable
IHashCodeProvider
Thread CurrentCulture
System.Globalization CultureInfo
CaseInsensitiveComparer

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveHashCodeProvider 成员

CaseInsensitiveHashCodeProvider 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CaseInsensitiveHashCodeProvider 类

使用忽略字符串大小写的哈希算法，为对象提供哈希代码。

CaseInsensitiveHashCodeProvider 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

CaseInsensitiveHashCodeProvider 类
System.Collections 命名空间


CaseInsensitiveHashCodeProvider 构造函数

CaseInsensitiveHashCodeProvider 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CaseInsensitiveHashCodeProvider 类

初始化 CaseInsensitiveHashCodeProvider 类的新实例。

名称 说明
页首

参考

CaseInsensitiveHashCodeProvider 类
CaseInsensitiveHashCodeProvider 成员
System.Collections 命名空间


CaseInsensitiveHashCodeProvider 构造函数

CaseInsensitiveHashCodeProvider 构造函数
CaseInsensitiveHashCodeProvider 类

使用当前线程的 Thread..::.CurrentCulture 初始化 CaseInsensitiveHashCodeProvider 类的新实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public CaseInsensitiveHashCodeProvider()
public:
CaseInsensitiveHashCodeProvider()
new : unit -> CaseInsensitiveHashCodeProvider

当使用此构造函数创建 CaseInsensitiveHashCodeProvider 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定大小写规则；因此，哈希代码比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 当使用此构造函数创建 CaseInsensitiveHashCodeProvider 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定大小写规则；因此，哈希代码比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 当使用此构造函数创建 CaseInsensitiveHashCodeProvider 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定大小写规则；因此，哈希代码比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例创建一个区分大小写的哈希表和一个不区分大小写的哈希表，并演示二者行为的差别，甚至是当二者包含相同的元素时各自行为的差别。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a Hashtable using the default hash code provider and the default comparer.
      Dim myHT1 As New Hashtable()
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the culture of the current thread.
      Dim myHT2 As New Hashtable(New CaseInsensitiveHashCodeProvider(), New CaseInsensitiveComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the InvariantCulture.
      Dim myHT3 As New Hashtable(CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant)
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT4 As New Hashtable(New CaseInsensitiveHashCodeProvider(myCul), New CaseInsensitiveComparer(myCul))
      myHT4.Add("FIRST", "Hello")
      myHT4.Add("SECOND", "World")
      myHT4.Add("THIRD", "!")

      ' Search for a key in each hashtable.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
      Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

public class SamplesHashtable  {

   public static void Main()  {

      // Create a Hashtable using the default hash code provider and the default comparer.
      Hashtable myHT1 = new Hashtable();
      myHT1.Add("FIRST", "Hello");
      myHT1.Add("SECOND", "World");
      myHT1.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the culture of the current thread.
      Hashtable myHT2 = new Hashtable( new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer() );
      myHT2.Add("FIRST", "Hello");
      myHT2.Add("SECOND", "World");
      myHT2.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the InvariantCulture.
      Hashtable myHT3 = new Hashtable( CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant );
      myHT3.Add("FIRST", "Hello");
      myHT3.Add("SECOND", "World");
      myHT3.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      CultureInfo myCul = new CultureInfo( "tr-TR" );
      Hashtable myHT4 = new Hashtable( new CaseInsensitiveHashCodeProvider( myCul ), new CaseInsensitiveComparer( myCul ) );
      myHT4.Add("FIRST", "Hello");
      myHT4.Add("SECOND", "World");
      myHT4.Add("THIRD", "!");

      // Search for a key in each hashtable.
      Console.WriteLine( "first is in myHT1: {0}", myHT1.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT2: {0}", myHT2.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT3: {0}", myHT3.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT4: {0}", myHT4.ContainsKey( "first" ) );

   }

}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Create a Hashtable using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable;
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the culture of the current thread.
   Hashtable^ myHT2 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider,gcnew CaseInsensitiveComparer );
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable( CaseInsensitiveHashCodeProvider::DefaultInvariant,CaseInsensitiveComparer::DefaultInvariant );
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   Hashtable^ myHT4 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider( myCul ),gcnew CaseInsensitiveComparer( myCul ) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hashtable.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveHashCodeProvider 类
CaseInsensitiveHashCodeProvider 成员
CaseInsensitiveHashCodeProvider 重载
System.Collections 命名空间
Thread CurrentCulture
System.Globalization CultureInfo
System.Globalization CompareInfo

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveHashCodeProvider 构造函数 (CultureInfo)

CaseInsensitiveHashCodeProvider 构造函数 (CultureInfo)
CaseInsensitiveHashCodeProvider 类

使用指定的 System.Globalization..::.CultureInfo 初始化 CaseInsensitiveHashCodeProvider 类的新实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    culture As CultureInfo _
)
public CaseInsensitiveHashCodeProvider(
    CultureInfo culture
)
public:
CaseInsensitiveHashCodeProvider(
    CultureInfo^ culture
)
new :
        culture:CultureInfo -> CaseInsensitiveHashCodeProvider

参数

culture
类型： System.Globalization CultureInfo
要用于新 CaseInsensitiveHashCodeProvider 的 System.Globalization..::.CultureInfo。
异常 | 条件
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

比较过程使用指定的 System.Globalization..::.CultureInfo 来确定大小写规则。根据区域性的不同，哈希代码比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用指定的 System.Globalization..::.CultureInfo 来确定大小写规则。根据区域性的不同，哈希代码比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用指定的 System.Globalization..::.CultureInfo 来确定大小写规则。根据区域性的不同，哈希代码比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例创建一个区分大小写的哈希表和一个不区分大小写的哈希表，并演示二者行为的差别，甚至是当二者包含相同的元素时各自行为的差别。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a Hashtable using the default hash code provider and the default comparer.
      Dim myHT1 As New Hashtable()
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the culture of the current thread.
      Dim myHT2 As New Hashtable(New CaseInsensitiveHashCodeProvider(), New CaseInsensitiveComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the InvariantCulture.
      Dim myHT3 As New Hashtable(CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant)
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT4 As New Hashtable(New CaseInsensitiveHashCodeProvider(myCul), New CaseInsensitiveComparer(myCul))
      myHT4.Add("FIRST", "Hello")
      myHT4.Add("SECOND", "World")
      myHT4.Add("THIRD", "!")

      ' Search for a key in each hashtable.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
      Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

public class SamplesHashtable  {

   public static void Main()  {

      // Create a Hashtable using the default hash code provider and the default comparer.
      Hashtable myHT1 = new Hashtable();
      myHT1.Add("FIRST", "Hello");
      myHT1.Add("SECOND", "World");
      myHT1.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the culture of the current thread.
      Hashtable myHT2 = new Hashtable( new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer() );
      myHT2.Add("FIRST", "Hello");
      myHT2.Add("SECOND", "World");
      myHT2.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the InvariantCulture.
      Hashtable myHT3 = new Hashtable( CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant );
      myHT3.Add("FIRST", "Hello");
      myHT3.Add("SECOND", "World");
      myHT3.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      CultureInfo myCul = new CultureInfo( "tr-TR" );
      Hashtable myHT4 = new Hashtable( new CaseInsensitiveHashCodeProvider( myCul ), new CaseInsensitiveComparer( myCul ) );
      myHT4.Add("FIRST", "Hello");
      myHT4.Add("SECOND", "World");
      myHT4.Add("THIRD", "!");

      // Search for a key in each hashtable.
      Console.WriteLine( "first is in myHT1: {0}", myHT1.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT2: {0}", myHT2.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT3: {0}", myHT3.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT4: {0}", myHT4.ContainsKey( "first" ) );

   }

}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Create a Hashtable using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable;
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the culture of the current thread.
   Hashtable^ myHT2 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider,gcnew CaseInsensitiveComparer );
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable( CaseInsensitiveHashCodeProvider::DefaultInvariant,CaseInsensitiveComparer::DefaultInvariant );
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   Hashtable^ myHT4 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider( myCul ),gcnew CaseInsensitiveComparer( myCul ) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hashtable.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveHashCodeProvider 类
CaseInsensitiveHashCodeProvider 成员
CaseInsensitiveHashCodeProvider 重载
System.Collections 命名空间
System.Globalization CultureInfo

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveHashCodeProvider 方法

CaseInsensitiveHashCodeProvider 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CaseInsensitiveHashCodeProvider 类

CaseInsensitiveHashCodeProvider 类型公开以下成员。

名称 说明
页首

参考

CaseInsensitiveHashCodeProvider 类
System.Collections 命名空间


CaseInsensitiveHashCodeProvider ..::.GetHashCode 方法

CaseInsensitiveHashCodeProvider
.
.
::
.
GetHashCode 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CaseInsensitiveHashCodeProvider 类

使用忽略字符串大小写的哈希算法返回哈希代码。

名称 说明
页首

参考

CaseInsensitiveHashCodeProvider 类
CaseInsensitiveHashCodeProvider 成员
System.Collections 命名空间


CaseInsensitiveHashCodeProvider ..::.GetHashCode 方法 (Object)

CaseInsensitiveHashCodeProvider
.
.
::
.
GetHashCode 方法 (Object)
CaseInsensitiveHashCodeProvider 类

使用忽略字符串大小写的哈希算法返回给定对象的哈希代码。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetHashCode ( _
    obj As Object _
) As Integer
public int GetHashCode(
    Object obj
)
public:
virtual int GetHashCode(
    Object^ obj
) sealed
abstract GetHashCode :
        obj:Object -> int
override GetHashCode :
        obj:Object -> int

参数

obj
类型： System Object
Object，将为其返回哈希代码。

返回值

类型： System Int32
给定对象的哈希代码（使用忽略字符串大小写的哈希算法返回）。

实现

异常 | 条件
ArgumentNullException | obj 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

该方法的返回值决不能持久，有两个原因。首先，类的哈希函数可能改变以生成一个更好的分布，从而使旧哈希函数中的所有值都无用。其次，该类的默认实现不保证不同的实例返回相同的值。 该方法的返回值决不能持久，有两个原因。首先，类的哈希函数可能改变以生成一个更好的分布，从而使旧哈希函数中的所有值都无用。其次，该类的默认实现不保证不同的实例返回相同的值。 该方法的返回值决不能持久，有两个原因。首先，类的哈希函数可能改变以生成一个更好的分布，从而使旧哈希函数中的所有值都无用。其次，该类的默认实现不保证不同的实例返回相同的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveHashCodeProvider 类
CaseInsensitiveHashCodeProvider 成员
GetHashCode 重载
System.Collections 命名空间
Object GetHashCode

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveHashCodeProvider 属性

CaseInsensitiveHashCodeProvider 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CaseInsensitiveHashCodeProvider 类

CaseInsensitiveHashCodeProvider 类型公开以下成员。

名称 说明
页首

参考

CaseInsensitiveHashCodeProvider 类
System.Collections 命名空间


CaseInsensitiveHashCodeProvider ..::.Default 属性

CaseInsensitiveHashCodeProvider
.
.
::
.
Default 属性
CaseInsensitiveHashCodeProvider 类

获取 CaseInsensitiveHashCodeProvider 的一个实例，该实例与当前线程的 Thread..::.CurrentCulture 关联并且始终可用。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property Default As CaseInsensitiveHashCodeProvider
    Get
public static CaseInsensitiveHashCodeProvider Default { get; }
public:
static property CaseInsensitiveHashCodeProvider^ Default {
    CaseInsensitiveHashCodeProvider^ get ();
}
static member Default : CaseInsensitiveHashCodeProvider

属性值

类型： System.Collections CaseInsensitiveHashCodeProvider
CaseInsensitiveHashCodeProvider 的实例，它与当前线程的 Thread..::.CurrentCulture 关联。

当使用此无参数构造函数创建 CaseInsensitiveHashCodeProvider 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定大小写规则；因此，哈希代码比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 当使用此无参数构造函数创建 CaseInsensitiveHashCodeProvider 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定大小写规则；因此，哈希代码比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 当使用此无参数构造函数创建 CaseInsensitiveHashCodeProvider 实例时，会保存当前线程的 Thread..::.CurrentCulture。比较过程使用保存的区域性来确定大小写规则；因此，哈希代码比较可能会有不同的结果，具体取决于所使用的区域性。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveHashCodeProvider 类
CaseInsensitiveHashCodeProvider 成员
System.Collections 命名空间
Thread CurrentCulture

其他资源

在集合中执行不区分区域性的字符串操作


CaseInsensitiveHashCodeProvider ..::.DefaultInvariant 属性

CaseInsensitiveHashCodeProvider
.
.
::
.
DefaultInvariant 属性
CaseInsensitiveHashCodeProvider 类

获取 CaseInsensitiveHashCodeProvider 的一个实例，该实例与 CultureInfo..::.InvariantCulture 关联并且始终可用。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property DefaultInvariant As CaseInsensitiveHashCodeProvider
    Get
public static CaseInsensitiveHashCodeProvider DefaultInvariant { get; }
public:
static property CaseInsensitiveHashCodeProvider^ DefaultInvariant {
    CaseInsensitiveHashCodeProvider^ get ();
}
static member DefaultInvariant : CaseInsensitiveHashCodeProvider

属性值

类型： System.Collections CaseInsensitiveHashCodeProvider
CaseInsensitiveHashCodeProvider 的实例，它与 CultureInfo..::.InvariantCulture 关联。

比较过程使用 CultureInfo..::.InvariantCulture 来确定大小写规则。根据区域性的不同，哈希代码比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用 CultureInfo..::.InvariantCulture 来确定大小写规则。根据区域性的不同，哈希代码比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用 CultureInfo..::.InvariantCulture 来确定大小写规则。根据区域性的不同，哈希代码比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例创建一个区分大小写的哈希表和一个不区分大小写的哈希表，并演示二者行为的差别，甚至是当二者包含相同的元素时各自行为的差别。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a Hashtable using the default hash code provider and the default comparer.
      Dim myHT1 As New Hashtable()
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the culture of the current thread.
      Dim myHT2 As New Hashtable(New CaseInsensitiveHashCodeProvider(), New CaseInsensitiveComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the InvariantCulture.
      Dim myHT3 As New Hashtable(CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant)
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      ' based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT4 As New Hashtable(New CaseInsensitiveHashCodeProvider(myCul), New CaseInsensitiveComparer(myCul))
      myHT4.Add("FIRST", "Hello")
      myHT4.Add("SECOND", "World")
      myHT4.Add("THIRD", "!")

      ' Search for a key in each hashtable.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
      Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

public class SamplesHashtable  {

   public static void Main()  {

      // Create a Hashtable using the default hash code provider and the default comparer.
      Hashtable myHT1 = new Hashtable();
      myHT1.Add("FIRST", "Hello");
      myHT1.Add("SECOND", "World");
      myHT1.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the culture of the current thread.
      Hashtable myHT2 = new Hashtable( new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer() );
      myHT2.Add("FIRST", "Hello");
      myHT2.Add("SECOND", "World");
      myHT2.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the InvariantCulture.
      Hashtable myHT3 = new Hashtable( CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant );
      myHT3.Add("FIRST", "Hello");
      myHT3.Add("SECOND", "World");
      myHT3.Add("THIRD", "!");

      // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
      // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
      CultureInfo myCul = new CultureInfo( "tr-TR" );
      Hashtable myHT4 = new Hashtable( new CaseInsensitiveHashCodeProvider( myCul ), new CaseInsensitiveComparer( myCul ) );
      myHT4.Add("FIRST", "Hello");
      myHT4.Add("SECOND", "World");
      myHT4.Add("THIRD", "!");

      // Search for a key in each hashtable.
      Console.WriteLine( "first is in myHT1: {0}", myHT1.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT2: {0}", myHT2.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT3: {0}", myHT3.ContainsKey( "first" ) );
      Console.WriteLine( "first is in myHT4: {0}", myHT4.ContainsKey( "first" ) );

   }

}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Create a Hashtable using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable;
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the culture of the current thread.
   Hashtable^ myHT2 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider,gcnew CaseInsensitiveComparer );
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable( CaseInsensitiveHashCodeProvider::DefaultInvariant,CaseInsensitiveComparer::DefaultInvariant );
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a Hashtable using a case-insensitive code provider and a case-insensitive comparer,
   // based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   Hashtable^ myHT4 = gcnew Hashtable( gcnew CaseInsensitiveHashCodeProvider( myCul ),gcnew CaseInsensitiveComparer( myCul ) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hashtable.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: True
first is in myHT4: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CaseInsensitiveHashCodeProvider 类
CaseInsensitiveHashCodeProvider 成员
System.Collections 命名空间
CultureInfo InvariantCulture

其他资源

在集合中执行不区分区域性的字符串操作


CollectionBase 类

CollectionBase 类
成员

为强类型集合提供 abstract 基类。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class CollectionBase _
    Implements IList, ICollection, IEnumerable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class CollectionBase : IList,
    ICollection, IEnumerable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class CollectionBase abstract : IList,
    ICollection, IEnumerable
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type CollectionBase =
    class
        interface IList
        interface ICollection
        interface IEnumerable
    end

CollectionBase 实例始终是可修改的。有关此类的只读版本，请参见 ReadOnlyCollectionBase。 CollectionBase 实例始终是可修改的。有关此类的只读版本，请参见 ReadOnlyCollectionBase。

CollectionBase 的容量是 CollectionBase 可以容纳的元素数。随着向 CollectionBase 中添加元素，容量通过重新分配按需自动增加。通过显式设置 Capacity 属性可以减小容量。 CollectionBase 的容量是 CollectionBase 可以容纳的元素数。随着向 CollectionBase 中添加元素，容量通过重新分配按需自动增加。通过显式设置 Capacity 属性可以减小容量。 CollectionBase 的容量是 CollectionBase 可以容纳的元素数。随着向 CollectionBase 中添加元素，容量通过重新分配按需自动增加。通过显式设置 Capacity 属性可以减小容量。

对实现者的说明

提供此基类旨在使实施者创建强类型自定义集合变得更容易。实现者最好扩展此基类，而不是创建自己的类。 提供此基类旨在使实施者创建强类型自定义集合变得更容易。实现者最好扩展此基类，而不是创建自己的类。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

System.Collections System.Collections..::.CollectionBaseCollectionBase

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。

此实现不为 CollectionBase 提供同步（线程安全）包装，但派生类可使用 SyncRoot 属性创建它们各自的 CollectionBase 同步版本。

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 成员
System.Collections 命名空间
System.Collections ArrayList
System.Collections IList
ReadOnlyCollectionBase
System.Collections.Generic

其他资源

执行不区分区域性的字符串操作


CollectionBase 成员

CollectionBase 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CollectionBase 类

为强类型集合提供 abstract 基类。

CollectionBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

CollectionBase 类
System.Collections 命名空间


CollectionBase 构造函数

CollectionBase 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CollectionBase 类

初始化 CollectionBase 类的新实例。

名称 说明
页首

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间


CollectionBase 构造函数

CollectionBase 构造函数
CollectionBase 类

使用默认初始容量初始化 CollectionBase 类的新实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected CollectionBase()
protected:
CollectionBase()
new : unit -> CollectionBase

CollectionBase 的容量是 CollectionBase 可以容纳的元素数。向 CollectionBase 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。 CollectionBase 的容量是 CollectionBase 可以容纳的元素数。向 CollectionBase 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 CollectionBase 中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
CollectionBase 重载
System.Collections 命名空间
Capacity


CollectionBase 构造函数 (Int32)

CollectionBase 构造函数 (Int32)
CollectionBase 类

使用指定的容量初始化 CollectionBase 类的新实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    capacity As Integer _
)
protected CollectionBase(
    int capacity
)
protected:
CollectionBase(
    int capacity
)
new :
        capacity:int -> CollectionBase

参数

capacity
类型： System Int32
新列表最初可以存储的元素数。

CollectionBase 的容量是 CollectionBase 可以容纳的元素数。向 CollectionBase 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。 CollectionBase 的容量是 CollectionBase 可以容纳的元素数。向 CollectionBase 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 CollectionBase 中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
CollectionBase 重载
System.Collections 命名空间
Capacity


CollectionBase 方法

CollectionBase 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CollectionBase 类

CollectionBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

CollectionBase 类
System.Collections 命名空间


CollectionBase ..::.Clear 方法

CollectionBase
.
.
::
.
Clear 方法
CollectionBase 类

从 CollectionBase 实例移除所有对象。不能重写此方法。 从 CollectionBase 实例移除所有对象。不能重写此方法。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Clear
public void Clear()
public:
virtual void Clear() sealed
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

Count 设置为零。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

若要在清除集合之前或之后执行自定义操作，请重写受保护的 OnClear 或 OnClearComplete 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间


CollectionBase ..::.GetEnumerator 方法

CollectionBase
.
.
::
.
GetEnumerator 方法
CollectionBase 类

返回循环访问 CollectionBase 实例的枚举器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetEnumerator As IEnumerator
public IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
用于 CollectionBase 实例的 IEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

虽然 GetEnumerator 方法在默认情况下对于 COM 客户端是不可见的，但是继承 CollectionBase 类可以公开此方法并会在 COM 客户端导致意外行为。

此方法是 O(1) 操作。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
System.Collections IEnumerator


CollectionBase ..::.ICollection ..::.CopyTo 方法

CollectionBase
.
.
::
.
ICollection
.
.
::
.
CopyTo 方法
CollectionBase 类

从目标数组的指定索引处开始将整个 CollectionBase 复制到兼容的一维 Array。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub CopyTo ( _
    array As Array, _
    index As Integer _
) Implements ICollection.CopyTo
void ICollection.CopyTo(
    Array array,
    int index
)
private:
virtual void CopyTo(
    Array^ array,
    int index
) sealed = ICollection::CopyTo
private abstract CopyTo :
        array:Array *
        index:int -> unit
private override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
作为从 CollectionBase 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 CollectionBase 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
index
类型： System Int32
array 中从零开始的索引，将在此处开始复制。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 CollectionBase 中的元素数大于从 index 到目标 array 结尾处之间的可用空间。
InvalidCastException | 无法自动将源 CollectionBase 的类型强制转换为目标 array 的类型。

指定的数组必须是兼容类型的数组。

此方法使用 Array..::.Copy 来复制元素。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间


CollectionBase ..::.IList ..::.Add 方法

CollectionBase
.
.
::
.
IList
.
.
::
.
Add 方法
CollectionBase 类

将对象添加到 CollectionBase 的结尾处。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Add ( _
    value As Object _
) As Integer Implements IList.Add
int IList.Add(
    Object value
)
private:
virtual int Add(
    Object^ value
) sealed = IList::Add
private abstract Add :
        value:Object -> int
private override Add :
        value:Object -> int

参数

value
类型： System Object
要添加到 CollectionBase 的末尾处的 Object。

返回值

类型： System Int32
CollectionBase 索引，已在此处添加了 value。

实现

异常 | 条件
NotSupportedException | CollectionBase 是只读的。 - 或 - CollectionBase 具有固定大小。

如果 Count 已经等于容量，则通过自动再分配内部数组和将现有元素复制到新数组（在添加新元素之前）来使列表容量加倍。

如果 Count 小于容量，则此方法的运算复杂度为 O(1)。如果需要增加容量以容纳新元素，则此方法的运算复杂度成为 O(n)，其中 n 为 Count。 如果 Count 小于容量，则此方法的运算复杂度为 O(1)。如果需要增加容量以容纳新元素，则此方法的运算复杂度成为 O(n)，其中 n 为 Count。

对实现者的说明

此方法调用 OnValidate、OnInsert 和 OnInsertComplete。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
Count
Insert
Remove


CollectionBase ..::.IList ..::.Contains 方法

CollectionBase
.
.
::
.
IList
.
.
::
.
Contains 方法
CollectionBase 类

确定 CollectionBase 是否包含特定元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Contains ( _
    value As Object _
) As Boolean Implements IList.Contains
bool IList.Contains(
    Object value
)
private:
virtual bool Contains(
    Object^ value
) sealed = IList::Contains
private abstract Contains :
        value:Object -> bool
private override Contains :
        value:Object -> bool

参数

value
类型： System Object
要在 CollectionBase 中查找的 Object。

返回值

类型： System Boolean
如果 CollectionBase 包含指定的 value，则为 true；否则为 false。

实现

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 为 Count。

此方法通过调用 Object..::.Equals 确定相等性。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
IndexOf

其他资源

执行不区分区域性的字符串操作


CollectionBase ..::.IList ..::.IndexOf 方法

CollectionBase
.
.
::
.
IList
.
.
::
.
IndexOf 方法
CollectionBase 类

搜索指定的 Object，并返回整个 CollectionBase 中第一个匹配项的从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Function IndexOf ( _
    value As Object _
) As Integer Implements IList.IndexOf
int IList.IndexOf(
    Object value
)
private:
virtual int IndexOf(
    Object^ value
) sealed = IList::IndexOf
private abstract IndexOf :
        value:Object -> int
private override IndexOf :
        value:Object -> int

参数

value
类型： System Object
要在 CollectionBase 中查找的 Object。

返回值

类型： System Int32
如果在整个 CollectionBase 中找到 value 的第一个匹配项，则为该项的从零开始的索引；否则为 -1。

实现

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 为 Count。

此方法通过调用 Object..::.Equals 确定相等性。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
Contains

其他资源

执行不区分区域性的字符串操作


CollectionBase ..::.IList ..::.Insert 方法

CollectionBase
.
.
::
.
IList
.
.
::
.
Insert 方法
CollectionBase 类

将元素插入 CollectionBase 的指定索引处。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Insert ( _
    index As Integer, _
    value As Object _
) Implements IList.Insert
void IList.Insert(
    int index,
    Object value
)
private:
virtual void Insert(
    int index,
    Object^ value
) sealed = IList::Insert
private abstract Insert :
        index:int *
        value:Object -> unit
private override Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
从零开始的索引，应在该位置插入 value。
value
类型： System Object
要插入的 Object。

实现

异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 大于 Count。
NotSupportedException | CollectionBase 是只读的。 - 或 - CollectionBase 具有固定大小。

如果 Count 已达到容量限制，则在插入新元素之前通过自动重新分配内部数组可将列表容量扩大一倍。

如果 index 等于 Count，则 value 将被添加到 CollectionBase 的末尾。

在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

对实现者的说明

此方法调用 OnValidate、OnInsert 和 OnInsertComplete。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
Add
Remove


CollectionBase ..::.IList ..::.Remove 方法

CollectionBase
.
.
::
.
IList
.
.
::
.
Remove 方法
CollectionBase 类

从 CollectionBase 中移除特定对象的第一个匹配项。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Remove ( _
    value As Object _
) Implements IList.Remove
void IList.Remove(
    Object value
)
private:
virtual void Remove(
    Object^ value
) sealed = IList::Remove
private abstract Remove :
        value:Object -> unit
private override Remove :
        value:Object -> unit

参数

value
类型： System Object
要从 CollectionBase 移除的 Object。

实现

异常 | 条件
ArgumentException | 未在 CollectionBase 对象中找到 value 参数。
NotSupportedException | CollectionBase 是只读的。 - 或 - CollectionBase 具有固定大小。

如果 CollectionBase 不包含指定对象，则 CollectionBase 将保持不变。不引发异常。 如果 CollectionBase 不包含指定对象，则 CollectionBase 将保持不变。不引发异常。

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 为 Count。

此方法通过调用 Object..::.Equals 确定相等性。

在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

对实现者的说明

此方法调用 OnValidate、OnRemove 和 OnRemoveComplete。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
RemoveAt
Add
Insert

其他资源

执行不区分区域性的字符串操作


CollectionBase ..::.OnClear 方法

CollectionBase
.
.
::
.
OnClear 方法
CollectionBase 类

当清除 CollectionBase 实例的内容时执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnClear
protected virtual void OnClear()
protected:
virtual void OnClear()
abstract OnClear : unit -> unit
override OnClear : unit -> unit

此方法的默认实现需要由派生类重写，以便在清除集合之前执行某些操作。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

如果进程失败，则集合恢复到其以前的状态。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在从基础 System.Collections..::.ArrayList 中删除所有元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在从基础 System.Collections..::.ArrayList 中删除所有元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的清除行为之前调用 OnClear，而在标准的清除行为之后调用 OnClearComplete。

例如，实施者可以通过全局“清除”(Clear) 使某些元素不被删除。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
OnClearComplete
OnRemove


CollectionBase ..::.OnClearComplete 方法

CollectionBase
.
.
::
.
OnClearComplete 方法
CollectionBase 类

在清除 CollectionBase 实例的内容之后执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnClearComplete
protected virtual void OnClearComplete()
protected:
virtual void OnClearComplete()
abstract OnClearComplete : unit -> unit
override OnClearComplete : unit -> unit

此方法的默认实现需要由派生类重写，以便在清除集合之后执行某些操作。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在从基础 System.Collections..::.ArrayList 中删除所有元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在从基础 System.Collections..::.ArrayList 中删除所有元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的清除行为之前调用 OnClear，而在标准的清除行为之后调用 OnClearComplete。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
OnClear
OnRemoveComplete


CollectionBase ..::.OnInsert 方法

CollectionBase
.
.
::
.
OnInsert 方法
CollectionBase 类

在向 CollectionBase 实例中插入新元素之前执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnInsert ( _
    index As Integer, _
    value As Object _
)
protected virtual void OnInsert(
    int index,
    Object value
)
protected:
virtual void OnInsert(
    int index,
    Object^ value
)
abstract OnInsert :
        index:int *
        value:Object -> unit
override OnInsert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
从零开始的索引，在该处插入 value。
value
类型： System Object
index 处的元素的新值。

此方法的默认实现需要由派生类重写，以便在插入指定元素之前执行某些操作。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

如果进程失败，则集合恢复到其以前的状态。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在将元素插入基础 System.Collections..::.ArrayList 之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在将元素插入基础 System.Collections..::.ArrayList 之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的插入行为之前调用 OnInsert；而在标准的插入行为之后调用 OnInsertComplete。

例如，实施者可限制能够插入到 System.Collections..::.ArrayList 中的对象的类型。

在调用此方法之前调用 OnValidate。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
OnInsertComplete
OnSet
OnValidate


CollectionBase ..::.OnInsertComplete 方法

CollectionBase
.
.
::
.
OnInsertComplete 方法
CollectionBase 类

在向 CollectionBase 实例中插入新元素之后执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnInsertComplete ( _
    index As Integer, _
    value As Object _
)
protected virtual void OnInsertComplete(
    int index,
    Object value
)
protected:
virtual void OnInsertComplete(
    int index,
    Object^ value
)
abstract OnInsertComplete :
        index:int *
        value:Object -> unit
override OnInsertComplete :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
从零开始的索引，在该处插入 value。
value
类型： System Object
index 处的元素的新值。

此方法的默认实现需要由派生类重写，以便在插入指定元素之后执行某些操作。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

如果出现以下任意一种情况，集合则恢复到其以前的状态：

  • 进程失败。

  • 重写此方法以引发异常。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在将元素插入基础 System.Collections..::.ArrayList 之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在将元素插入基础 System.Collections..::.ArrayList 之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的插入行为之前调用 OnInsert；而在标准的插入行为之后调用 OnInsertComplete。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
OnInsert
OnSetComplete


CollectionBase ..::.OnRemove 方法

CollectionBase
.
.
::
.
OnRemove 方法
CollectionBase 类

当从 CollectionBase 实例移除元素时执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnRemove ( _
    index As Integer, _
    value As Object _
)
protected virtual void OnRemove(
    int index,
    Object value
)
protected:
virtual void OnRemove(
    int index,
    Object^ value
)
abstract OnRemove :
        index:int *
        value:Object -> unit
override OnRemove :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
从零开始的索引，可在该位置找到 value。
value
类型： System Object
要从 index 移除的元素的值。

此方法的默认实现需要由派生类重写，以便在移除指定元素之前执行某些操作。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

如果进程失败，则集合恢复到其以前的状态。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在从基础 System.Collections..::.ArrayList 中移除元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在从基础 System.Collections..::.ArrayList 中移除元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的移除行为之前调用 OnRemove；而在标准的移除行为之后调用 OnRemoveComplete。

例如，实施者通过始终在 OnRemove 中引发异常，可防止移除元素。

在调用此方法之前调用 OnValidate。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
OnRemoveComplete
OnClear


CollectionBase ..::.OnRemoveComplete 方法

CollectionBase
.
.
::
.
OnRemoveComplete 方法
CollectionBase 类

在从 CollectionBase 实例中移除元素之后执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnRemoveComplete ( _
    index As Integer, _
    value As Object _
)
protected virtual void OnRemoveComplete(
    int index,
    Object value
)
protected:
virtual void OnRemoveComplete(
    int index,
    Object^ value
)
abstract OnRemoveComplete :
        index:int *
        value:Object -> unit
override OnRemoveComplete :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
从零开始的索引，可在该位置找到 value。
value
类型： System Object
要从 index 移除的元素的值。

此方法的默认实现需要由派生类重写，以便在移除指定元素之后执行某些操作。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

如果出现以下任意一种情况，集合则恢复到其以前的状态：

  • 进程失败。

  • 重写此方法以引发异常。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在从基础 System.Collections..::.ArrayList 中移除元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在从基础 System.Collections..::.ArrayList 中移除元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的移除行为之前调用 OnRemove；而在标准的移除行为之后调用 OnRemoveComplete。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
OnRemove
OnClearComplete


CollectionBase ..::.OnSet 方法

CollectionBase
.
.
::
.
OnSet 方法
CollectionBase 类

当在 CollectionBase 实例中设置值之前执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnSet ( _
    index As Integer, _
    oldValue As Object, _
    newValue As Object _
)
protected virtual void OnSet(
    int index,
    Object oldValue,
    Object newValue
)
protected:
virtual void OnSet(
    int index,
    Object^ oldValue,
    Object^ newValue
)
abstract OnSet :
        index:int *
        oldValue:Object *
        newValue:Object -> unit
override OnSet :
        index:int *
        oldValue:Object *
        newValue:Object -> unit

参数

index
类型： System Int32
从零开始的索引，可在该位置找到 oldValue。
oldValue
类型： System Object
要用 newValue 替换的值。
newValue
类型： System Object
index 处的元素的新值。

此方法的默认实现需要由派生类重写，以便在设置指定元素之前执行某些操作。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

如果进程失败，则集合恢复到其以前的状态。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在设置基础 System.Collections..::.ArrayList 中的指定元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在设置基础 System.Collections..::.ArrayList 中的指定元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的设置行为之前调用 OnSet，而在标准的设置行为之后调用 OnSetComplete。

例如，实施者通过在 OnSet 内执行检查，可限制能够覆盖的值。

在调用此方法之前调用 OnValidate。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
OnSetComplete
OnInsert
OnValidate


CollectionBase ..::.OnSetComplete 方法

CollectionBase
.
.
::
.
OnSetComplete 方法
CollectionBase 类

当在 CollectionBase 实例中设置值后执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnSetComplete ( _
    index As Integer, _
    oldValue As Object, _
    newValue As Object _
)
protected virtual void OnSetComplete(
    int index,
    Object oldValue,
    Object newValue
)
protected:
virtual void OnSetComplete(
    int index,
    Object^ oldValue,
    Object^ newValue
)
abstract OnSetComplete :
        index:int *
        oldValue:Object *
        newValue:Object -> unit
override OnSetComplete :
        index:int *
        oldValue:Object *
        newValue:Object -> unit

参数

index
类型： System Int32
从零开始的索引，可在该位置找到 oldValue。
oldValue
类型： System Object
要用 newValue 替换的值。
newValue
类型： System Object
index 处的元素的新值。

此方法的默认实现需要由派生类重写，以便在设置指定元素之后执行某些操作。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

如果出现以下任意一种情况，集合则恢复到其以前的状态：

  • 进程失败。

  • 重写此方法以引发异常。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在设置基础 System.Collections..::.ArrayList 中的指定元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在设置基础 System.Collections..::.ArrayList 中的指定元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的设置行为之前调用 OnSet，而在标准的设置行为之后调用 OnSetComplete。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
OnSet
OnInsertComplete


CollectionBase ..::.OnValidate 方法

CollectionBase
.
.
::
.
OnValidate 方法
CollectionBase 类

当验证值时执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnValidate ( _
    value As Object _
)
protected virtual void OnValidate(
    Object value
)
protected:
virtual void OnValidate(
    Object^ value
)
abstract OnValidate :
        value:Object -> unit
override OnValidate :
        value:Object -> unit

参数

value
类型： System Object
要验证的对象。
异常 | 条件
ArgumentNullException | value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法的默认实现确定 value 是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），如果是，则引发 ArgumentNullException。这是为了由派生类重写，以便在验证指定元素时执行其他操作。 此方法的默认实现确定 value 是否为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），如果是，则引发 ArgumentNullException。这是为了由派生类重写，以便在验证指定元素时执行其他操作。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义当执行基础 System.Collections..::.ArrayList 的标准行为时必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义当执行基础 System.Collections..::.ArrayList 的标准行为时必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

OnValidate 可用于对集合中可接受的对象的类型进行限制。默认实现将防止在基础 System.Collections..::.ArrayList 中添加或移除 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 OnValidate 可用于对集合中可接受的对象的类型进行限制。默认实现将防止在基础 System.Collections..::.ArrayList 中添加或移除 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

OnValidate 在调用 OnInsert、OnRemove 和 OnSet 之前调用。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
OnSet
OnInsert


CollectionBase ..::.RemoveAt 方法

CollectionBase
.
.
::
.
RemoveAt 方法
CollectionBase 类

移除 CollectionBase 实例的指定索引处的元素。此方法不可重写。 移除 CollectionBase 实例的指定索引处的元素。此方法不可重写。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub RemoveAt ( _
    index As Integer _
)
public void RemoveAt(
    int index
)
public:
virtual void RemoveAt(
    int index
) sealed
abstract RemoveAt :
        index:int -> unit
override RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的元素的从零开始的索引。

实现

异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 等于或大于 Count。

在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

对实现者的说明

此方法调用 OnValidate、OnRemove 和 OnRemoveComplete。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间


CollectionBase 属性

CollectionBase 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CollectionBase 类

CollectionBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

CollectionBase 类
System.Collections 命名空间


CollectionBase ..::.Capacity 属性

CollectionBase
.
.
::
.
Capacity 属性
CollectionBase 类

获取或设置 CollectionBase 可包含的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(False)> _
Public Property Capacity As Integer
    Get
    Set
[ComVisibleAttribute(false)]
public int Capacity { get; set; }
[ComVisibleAttribute(false)]
public:
property int Capacity {
    int get ();
    void set (int value);
}
[<ComVisibleAttribute(false)>]
member Capacity : int with get, set

属性值

类型： System Int32
CollectionBase 可包含的元素数。
异常 | 条件
ArgumentOutOfRangeException | Capacity 设置为小于 Count 的值。
OutOfMemoryException | 系统中没有足够的可用内存。

Capacity 是 CollectionBase 可以存储的元素数。Count 是 CollectionBase 中的实际元素数。 Capacity 是 CollectionBase 可以存储的元素数。Count 是 CollectionBase 中的实际元素数。

Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来自动增大容量。 Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来自动增大容量。

通过显式设置 Capacity 属性可以减小容量。如果显式设置 Capacity 的值，内部数组也会重新分配以适应指定的容量。 通过显式设置 Capacity 属性可以减小容量。如果显式设置 Capacity 的值，内部数组也会重新分配以适应指定的容量。

检索此属性值的运算复杂度为 O(1)；设置此属性的运算复杂度为 O(n)，其中，n 是新容量。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
Count


CollectionBase ..::.Count 属性

CollectionBase
.
.
::
.
Count 属性
CollectionBase 类

获取包含在 CollectionBase 实例中的元素数。不能重写此属性。 获取包含在 CollectionBase 实例中的元素数。不能重写此属性。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Count As Integer
    Get
public int Count { get; }
public:
virtual property int Count {
    int get () sealed;
}
abstract Count : int
override Count : int

属性值

类型： System Int32
包含在 CollectionBase 实例中的元素数。
检索此属性的值的运算复杂度为 O(1)。

实现

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间


CollectionBase ..::.ICollection ..::.IsSynchronized 属性

CollectionBase
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
CollectionBase 类

获取一个值，该值指示是否同步对 CollectionBase 的访问（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
如果对 CollectionBase 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。 如果对 CollectionBase 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。

实现

CollectionBase 实例不是同步的。派生类可以使用 SyncRoot 属性提供 CollectionBase 的同步版本。 CollectionBase 实例不是同步的。派生类可以使用 SyncRoot 属性提供 CollectionBase 的同步版本。

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例显示如何在整个枚举过程中使用 SyncRoot 锁定集合：

' Get the ICollection interface from the CollectionBase
' derived class.
Dim myCollection As ICollection = myCollectionBase
SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

// Get the ICollection interface from the CollectionBase
// derived class.
ICollection myCollection = myCollectionBase;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

// Get the ICollection interface from the CollectionBase
// derived class.
ICollection^ myCollection = myCollectionBase;
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
SyncRoot


CollectionBase ..::.ICollection ..::.SyncRoot 属性

CollectionBase
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
CollectionBase 类

获取可用于同步 CollectionBase 访问的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
可用于同步对 CollectionBase 的访问的对象。

实现

派生类可以使用 SyncRoot 属性提供其自己的 CollectionBase 同步版本。同步代码必须在 CollectionBase 的 SyncRoot 上执行操作，而不是直接在 CollectionBase 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 CollectionBase 对象。 派生类可以使用 SyncRoot 属性提供其自己的 CollectionBase 同步版本。同步代码必须在 CollectionBase 的 SyncRoot 上执行操作，而不是直接在 CollectionBase 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 CollectionBase 对象。 派生类可以使用 SyncRoot 属性提供其自己的 CollectionBase 同步版本。同步代码必须在 CollectionBase 的 SyncRoot 上执行操作，而不是直接在 CollectionBase 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 CollectionBase 对象。 派生类可以使用 SyncRoot 属性提供其自己的 CollectionBase 同步版本。同步代码必须在 CollectionBase 的 SyncRoot 上执行操作，而不是直接在 CollectionBase 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 CollectionBase 对象。

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例显示如何在整个枚举过程中使用 SyncRoot 锁定集合：

' Get the ICollection interface from the CollectionBase
' derived class.
Dim myCollection As ICollection = myCollectionBase
SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

// Get the ICollection interface from the CollectionBase
// derived class.
ICollection myCollection = myCollectionBase;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

// Get the ICollection interface from the CollectionBase
// derived class.
ICollection^ myCollection = myCollectionBase;
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
IsSynchronized


CollectionBase ..::.IList ..::.IsFixedSize 属性

CollectionBase
.
.
::
.
IList
.
.
::
.
IsFixedSize 属性
CollectionBase 类

获取一个值，该值指示 CollectionBase 是否具有固定大小。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property IsFixedSize As Boolean
    Implements IList.IsFixedSize
    Get
bool IList.IsFixedSize { get; }
private:
virtual property bool IsFixedSize {
    bool get () sealed = IList::IsFixedSize::get;
}
private abstract IsFixedSize : bool
private override IsFixedSize : bool

属性值

类型： System Boolean
如果 CollectionBase 具有固定大小，则为 true；否则为 false。默认值为 false。 如果 CollectionBase 具有固定大小，则为 true；否则为 false。默认值为 false。

实现

具有固定大小的集合在创建之后不能再添加或移除元素，但是允许修改现有元素。

固定大小的集合只是一个具有用于防止添加和移除元素的包装的集合；因此，如果更改基础集合（包括添加和移除元素），则固定大小的集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间


CollectionBase ..::.IList ..::.IsReadOnly 属性

CollectionBase
.
.
::
.
IList
.
.
::
.
IsReadOnly 属性
CollectionBase 类

获取一个值，该值指示 CollectionBase 是否为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements IList.IsReadOnly
    Get
bool IList.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = IList::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
如果 CollectionBase 为只读，则为 true；否则为 false。默认值为 false。 如果 CollectionBase 为只读，则为 true；否则为 false。默认值为 false。

实现

只读集合在创建后就不能再添加、移除或修改元素。

只读集合只是一个具有用于防止修改的包装的集合；因此，如果更改基础集合，则只读集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间


CollectionBase ..::.IList ..::.Item 属性

CollectionBase
.
.
::
.
IList
.
.
::
.
Item 属性
CollectionBase 类

获取或设置指定索引处的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Property Item ( _
    index As Integer _
) As Object Implements IList.Item
    Get
    Set
Object IList.this[
    int index
] { get; set; }
private:
virtual property Object^ Item[int index] {
    Object^ get (int index) sealed = IList::Item::get;
    void set (int index, Object^ value) sealed = IList::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

index
类型： System Int32
要获得或设置的元素从零开始的索引。

属性值

类型： System Object
指定索引处的元素。

实现

异常 | 条件
ArgumentOutOfRangeException | index 小于零。 - 或 - index 等于或大于 Count。

可以使用下面的语法通过此属性访问集合中的特定元素：myCollection[index]。

检索此属性值的运算复杂度是 O(1)；设置此属性的运算复杂度也是 O(1)。

对实现者的说明

设置此属性时，将调用 OnValidate、OnSet 和 OnSetComplete 方法。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间
Count


CollectionBase ..::.InnerList 属性

CollectionBase
.
.
::
.
InnerList 属性
CollectionBase 类

获取一个 ArrayList，它包含 CollectionBase 实例中元素的列表。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected ReadOnly Property InnerList As ArrayList
    Get
protected ArrayList InnerList { get; }
protected:
property ArrayList^ InnerList {
    ArrayList^ get ();
}
member InnerList : ArrayList

属性值

类型： System.Collections ArrayList
表示 CollectionBase 实例本身的 ArrayList。
检索此属性的值的运算复杂度为 O(1)。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间


CollectionBase ..::.List 属性

CollectionBase
.
.
::
.
List 属性
CollectionBase 类

获取一个 IList，它包含 CollectionBase 实例中元素的列表。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected ReadOnly Property List As IList
    Get
protected IList List { get; }
protected:
property IList^ List {
    IList^ get ();
}
member List : IList

属性值

类型： System.Collections IList
表示 CollectionBase 实例本身的 IList。

仅对 List 属性所返回的实例调用 On* 方法，而不对 InnerList 属性所返回的实例调用这些方法。

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例实现 CollectionBase 类，并使用该实现创建 Int16 对象的集合。

Imports System
Imports System.Collections

Public Class Int16Collection
   Inherits CollectionBase

   Default Public Property Item(index As Integer) As Int16
      Get
         Return CType(List(index), Int16)
      End Get
      Set
         List(index) = value
      End Set
   End Property

   Public Function Add(value As Int16) As Integer
      Return List.Add(value)
   End Function 'Add

   Public Function IndexOf(value As Int16) As Integer
      Return List.IndexOf(value)
   End Function 'IndexOf

   Public Sub Insert(index As Integer, value As Int16)
      List.Insert(index, value)
   End Sub 'Insert

   Public Sub Remove(value As Int16)
      List.Remove(value)
   End Sub 'Remove

   Public Function Contains(value As Int16) As Boolean
      ' If value is not of type Int16, this will return false.
      Return List.Contains(value)
   End Function 'Contains

   Protected Overrides Sub OnInsert(index As Integer, value As Object)
      ' Insert additional code to be run only when inserting values.
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(index As Integer, value As Object)
      ' Insert additional code to be run only when removing values.
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(index As Integer, oldValue As Object, newValue As Object)
      ' Insert additional code to be run only when setting values.
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(value As Object)
      If Not GetType(System.Int16).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type Int16.", "value")
      End If
   End Sub 'OnValidate

End Class 'Int16Collection

Public Class SamplesCollectionBase

   Public Shared Sub Main()

      ' Creates and initializes a new CollectionBase.
      Dim myI16 As New Int16Collection()

      ' Adds elements to the collection.
      myI16.Add( 1 )
      myI16.Add( 2 )
      myI16.Add( 3 )
      myI16.Add( 5 )
      myI16.Add( 7 )

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintValues1(myI16)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintValues2(myI16)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Count and Item):")
      PrintIndexAndValues(myI16)

      ' Searches the collection with Contains and IndexOf.
      Console.WriteLine("Contains 3: {0}", myI16.Contains(3))
      Console.WriteLine("2 is at index {0}.", myI16.IndexOf(2))
      Console.WriteLine()

      ' Inserts an element into the collection at index 3.
      myI16.Insert(3, 13)
      Console.WriteLine("Contents of the collection after inserting at index 3:")
      PrintIndexAndValues(myI16)

      ' Gets and sets an element using the index.
      myI16(4) = 123
      Console.WriteLine("Contents of the collection after setting the element at index 4 to 123:")
      PrintIndexAndValues(myI16)

      ' Removes an element from the collection.
      myI16.Remove(2)

      ' Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine("Contents of the collection after removing the element 2:")
      PrintIndexAndValues(myI16)

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As Int16Collection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
          Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
      Next i
      Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As Int16Collection)
      Dim i16 As Int16
      For Each i16 In  myCol
          Console.WriteLine("   {0}", i16)
      Next i16
      Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As Int16Collection)
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          Console.WriteLine("   {0}", myEnumerator.Current)
      End While
      Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   1
'   2
'   3
'   5
'   7
'
'Contents of the collection (using enumerator):
'   1
'   2
'   3
'   5
'   7
'
'Initial contents of the collection (using Count and Item):
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   5
'   [4]:   7
'
'Contains 3: True
'2 is at index 1.
'
'Contents of the collection after inserting at index 3:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   5
'   [5]:   7
'
'Contents of the collection after setting the element at index 4 to 123:
'   [0]:   1
'   [1]:   2
'   [2]:   3
'   [3]:   13
'   [4]:   123
'   [5]:   7
'
'Contents of the collection after removing the element 2:
'   [0]:   1
'   [1]:   3
'   [2]:   13
'   [3]:   123
'   [4]:   7

using System;
using System.Collections;

public class Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   public int Add( Int16 value )  {
      return( List.Add( value ) );
   }

   public int IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   public void Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   public void Remove( Int16 value )  {
      List.Remove( value );
   }

   public bool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.
      return( List.Contains( value ) );
   }

   protected override void OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protected override void OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protected override void OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protected override void OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         throw new ArgumentException( "value must be of type Int16.", "value" );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}

/*
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

#using <System.dll>

using namespace System;
using namespace System::Collections;

public ref class Int16Collection: public CollectionBase
{
public:

   property Int16 Item [int]
   {
      Int16 get( int index )
      {
         return ( (Int16)(List[ index ]));
      }

      void set( int index, Int16 value )
      {
         List[ index ] = value;
      }
   }
   int Add( Int16 value )
   {
      return (List->Add( value ));
   }

   int IndexOf( Int16 value )
   {
      return (List->IndexOf( value ));
   }

   void Insert( int index, Int16 value )
   {
      List->Insert( index, value );
   }

   void Remove( Int16 value )
   {
      List->Remove( value );
   }

   bool Contains( Int16 value )
   {
      // If value is not of type Int16, this will return false.
      return (List->Contains( value ));
   }

protected:
   virtual void OnInsert( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when inserting values.
   }

   virtual void OnRemove( int /*index*/, Object^ /*value*/ ) override
   {
      // Insert additional code to be run only when removing values.
   }

   virtual void OnSet( int /*index*/, Object^ /*oldValue*/, Object^ /*newValue*/ ) override
   {
      // Insert additional code to be run only when setting values.
   }

   virtual void OnValidate( Object^ value ) override
   {
      if ( value->GetType() != Type::GetType( "System.Int16" ) )
            throw gcnew ArgumentException( "value must be of type Int16.","value" );
   }

};

void PrintIndexAndValues( Int16Collection^ myCol );
void PrintValues2( Int16Collection^ myCol );
int main()
{
   // Create and initialize a new CollectionBase.
   Int16Collection^ myI16 = gcnew Int16Collection;

   // Add elements to the collection.
   myI16->Add( (Int16)1 );
   myI16->Add( (Int16)2 );
   myI16->Add( (Int16)3 );
   myI16->Add( (Int16)5 );
   myI16->Add( (Int16)7 );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myI16 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myI16 );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains 3: {0}", myI16->Contains( 3 ) );
   Console::WriteLine( "2 is at index {0}.", myI16->IndexOf( 2 ) );
   Console::WriteLine();

   // Insert an element into the collection at index 3.
   myI16->Insert( 3, (Int16)13 );
   Console::WriteLine( "Contents of the collection after inserting at index 3:" );
   PrintIndexAndValues( myI16 );

   // Get and set an element using the index.
   myI16->Item[ 4 ] = 123;
   Console::WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
   PrintIndexAndValues( myI16 );

   // Remove an element from the collection.
   myI16->Remove( (Int16)2 );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection after removing the element 2:" );
   PrintIndexAndValues( myI16 );
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( Int16Collection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( Int16Collection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

CollectionBase 类
CollectionBase 成员
System.Collections 命名空间


Comparer 类

Comparer 类
成员

比较两个对象是否相等，其中字符串比较是区分大小写的。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class Comparer _
    Implements IComparer, ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class Comparer : IComparer,
    ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Comparer sealed : IComparer,
    ISerializable
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Comparer =
    class
        interface IComparer
        interface ISerializable
    end

此类是 IComparer 接口的默认实现。CaseInsensitiveComparer 类是 IComparer 接口的实现，该接口执行不区分大小写的字符串比较。 此类是 IComparer 接口的默认实现。CaseInsensitiveComparer 类是 IComparer 接口的实现，该接口执行不区分大小写的字符串比较。

除非另行指定，否则比较过程会使用当前线程的 Thread..::.CurrentCulture。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
除非另行指定，否则比较过程会使用当前线程的 Thread..::.CurrentCulture。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
除非另行指定，否则比较过程会使用当前线程的 Thread..::.CurrentCulture。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例显示 Compare 是如何根据与 Comparer 关联的区域性返回不同的值的。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesComparer

   Public Shared Sub Main()

      ' Creates the strings to compare.
      Dim str1 As [String] = "llegar"
      Dim str2 As [String] = "lugar"
      Console.WriteLine("Comparing ""{0}"" and ""{1}"" ...", str1, str2)

      ' Uses the DefaultInvariant Comparer.
      Console.WriteLine("   Invariant Comparer: {0}", Comparer.DefaultInvariant.Compare(str1, str2))

      ' Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
      Dim myCompIntl As New Comparer(New CultureInfo("es-ES", False))
      Console.WriteLine("   International Sort: {0}", myCompIntl.Compare(str1, str2))

      ' Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
      Dim myCompTrad As New Comparer(New CultureInfo(&H40A, False))
      Console.WriteLine("   Traditional Sort  : {0}", myCompTrad.Compare(str1, str2))

   End Sub 'Main

End Class 'SamplesComparer

'This code produces the following output.
'
'Comparing "llegar" and "lugar" ...
'   Invariant Comparer: -1
'   International Sort: -1
'   Traditional Sort  : 1

using System;
using System.Collections;
using System.Globalization;

public class SamplesComparer  {

   public static void Main()  {

      // Creates the strings to compare.
      String str1 = "llegar";
      String str2 = "lugar";
      Console.WriteLine( "Comparing \"{0}\" and \"{1}\" ...", str1, str2 );

      // Uses the DefaultInvariant Comparer.
      Console.WriteLine( "   Invariant Comparer: {0}", Comparer.DefaultInvariant.Compare( str1, str2 ) );

      // Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
      Comparer myCompIntl = new Comparer( new CultureInfo( "es-ES", false ) );
      Console.WriteLine( "   International Sort: {0}", myCompIntl.Compare( str1, str2 ) );

      // Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
      Comparer myCompTrad = new Comparer( new CultureInfo( 0x040A, false ) );
      Console.WriteLine( "   Traditional Sort  : {0}", myCompTrad.Compare( str1, str2 ) );

   }

}

/*
This code produces the following output.

Comparing "llegar" and "lugar" ...
   Invariant Comparer: -1
   International Sort: -1
   Traditional Sort  : 1

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Creates the strings to compare.
   String^ str1 = "llegar";
   String^ str2 = "lugar";
   Console::WriteLine( "Comparing \"{0}\" and \"{1}\" ...", str1, str2 );

   // Uses the DefaultInvariant Comparer.
   Console::WriteLine( "   Invariant Comparer: {0}", Comparer::DefaultInvariant->Compare( str1, str2 ) );

   // Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
   Comparer^ myCompIntl = gcnew Comparer( gcnew CultureInfo(  "es-ES",false ) );
   Console::WriteLine( "   International Sort: {0}", myCompIntl->Compare( str1, str2 ) );

   // Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
   Comparer^ myCompTrad = gcnew Comparer( gcnew CultureInfo( 0x040A,false ) );
   Console::WriteLine( "   Traditional Sort  : {0}", myCompTrad->Compare( str1, str2 ) );
}

/*
This code produces the following output.

Comparing "llegar" and "lugar" ...
   Invariant Comparer: -1
   International Sort: -1
   Traditional Sort  : 1

*/

System.Collections System.Collections..::.ComparerComparer
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Comparer 成员
System.Collections 命名空间
IComparer
IComparable
CaseInsensitiveComparer
System.Collections.Generic Comparer T
System.Globalization CompareInfo
Thread CurrentCulture
System.Globalization CultureInfo


Comparer 成员

Comparer 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Comparer 类

比较两个对象是否相等，其中字符串比较是区分大小写的。

Comparer 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Comparer 类
System.Collections 命名空间


Comparer 构造函数

Comparer 构造函数
Comparer 类

使用指定的 System.Globalization..::.CultureInfo 初始化 Comparer 类的新实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    culture As CultureInfo _
)
public Comparer(
    CultureInfo culture
)
public:
Comparer(
    CultureInfo^ culture
)
new :
        culture:CultureInfo -> Comparer

参数

culture
类型： System.Globalization CultureInfo
要用于新 Comparer 的 System.Globalization..::.CultureInfo。
异常 | 条件
ArgumentNullException | culture 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

比较过程使用指定的 System.Globalization..::.CultureInfo 来确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用指定的 System.Globalization..::.CultureInfo 来确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用指定的 System.Globalization..::.CultureInfo 来确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例显示 Compare 是如何根据与 Comparer 关联的区域性返回不同的值的。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesComparer

   Public Shared Sub Main()

      ' Creates the strings to compare.
      Dim str1 As [String] = "llegar"
      Dim str2 As [String] = "lugar"
      Console.WriteLine("Comparing ""{0}"" and ""{1}"" ...", str1, str2)

      ' Uses the DefaultInvariant Comparer.
      Console.WriteLine("   Invariant Comparer: {0}", Comparer.DefaultInvariant.Compare(str1, str2))

      ' Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
      Dim myCompIntl As New Comparer(New CultureInfo("es-ES", False))
      Console.WriteLine("   International Sort: {0}", myCompIntl.Compare(str1, str2))

      ' Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
      Dim myCompTrad As New Comparer(New CultureInfo(&H40A, False))
      Console.WriteLine("   Traditional Sort  : {0}", myCompTrad.Compare(str1, str2))

   End Sub 'Main

End Class 'SamplesComparer

'This code produces the following output.
'
'Comparing "llegar" and "lugar" ...
'   Invariant Comparer: -1
'   International Sort: -1
'   Traditional Sort  : 1

using System;
using System.Collections;
using System.Globalization;

public class SamplesComparer  {

   public static void Main()  {

      // Creates the strings to compare.
      String str1 = "llegar";
      String str2 = "lugar";
      Console.WriteLine( "Comparing \"{0}\" and \"{1}\" ...", str1, str2 );

      // Uses the DefaultInvariant Comparer.
      Console.WriteLine( "   Invariant Comparer: {0}", Comparer.DefaultInvariant.Compare( str1, str2 ) );

      // Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
      Comparer myCompIntl = new Comparer( new CultureInfo( "es-ES", false ) );
      Console.WriteLine( "   International Sort: {0}", myCompIntl.Compare( str1, str2 ) );

      // Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
      Comparer myCompTrad = new Comparer( new CultureInfo( 0x040A, false ) );
      Console.WriteLine( "   Traditional Sort  : {0}", myCompTrad.Compare( str1, str2 ) );

   }

}

/*
This code produces the following output.

Comparing "llegar" and "lugar" ...
   Invariant Comparer: -1
   International Sort: -1
   Traditional Sort  : 1

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Creates the strings to compare.
   String^ str1 = "llegar";
   String^ str2 = "lugar";
   Console::WriteLine( "Comparing \"{0}\" and \"{1}\" ...", str1, str2 );

   // Uses the DefaultInvariant Comparer.
   Console::WriteLine( "   Invariant Comparer: {0}", Comparer::DefaultInvariant->Compare( str1, str2 ) );

   // Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
   Comparer^ myCompIntl = gcnew Comparer( gcnew CultureInfo(  "es-ES",false ) );
   Console::WriteLine( "   International Sort: {0}", myCompIntl->Compare( str1, str2 ) );

   // Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
   Comparer^ myCompTrad = gcnew Comparer( gcnew CultureInfo( 0x040A,false ) );
   Console::WriteLine( "   Traditional Sort  : {0}", myCompTrad->Compare( str1, str2 ) );
}

/*
This code produces the following output.

Comparing "llegar" and "lugar" ...
   Invariant Comparer: -1
   International Sort: -1
   Traditional Sort  : 1

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Comparer 类
Comparer 成员
System.Collections 命名空间
System.Globalization CultureInfo
System.Globalization CompareInfo


Comparer 字段

Comparer 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Comparer 类

Comparer 类型公开以下成员。

名称 说明
页首

参考

Comparer 类
System.Collections 命名空间


Comparer ..::.Default 字段

Comparer
.
.
::
.
Default 字段
Comparer 类

表示 Comparer 的实例，它与当前线程的 Thread..::.CurrentCulture 关联。此字段为只读。 表示 Comparer 的实例，它与当前线程的 Thread..::.CurrentCulture 关联。此字段为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Default As Comparer
public static readonly Comparer Default
public:
static initonly Comparer^ Default
static val Default: Comparer

比较过程使用当前线程的 Thread..::.CurrentCulture 来确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用当前线程的 Thread..::.CurrentCulture 来确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用当前线程的 Thread..::.CurrentCulture 来确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Comparer 类
Comparer 成员
System.Collections 命名空间
Thread CurrentCulture
System.Globalization CompareInfo


Comparer ..::.DefaultInvariant 字段

Comparer
.
.
::
.
DefaultInvariant 字段
Comparer 类

表示 Comparer 的实例，它与 CultureInfo..::.InvariantCulture 关联。此字段为只读。 表示 Comparer 的实例，它与 CultureInfo..::.InvariantCulture 关联。此字段为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly DefaultInvariant As Comparer
public static readonly Comparer DefaultInvariant
public:
static initonly Comparer^ DefaultInvariant
static val DefaultInvariant: Comparer

比较过程使用 CultureInfo..::.InvariantCulture 确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用 CultureInfo..::.InvariantCulture 确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。
比较过程使用 CultureInfo..::.InvariantCulture 确定排序顺序和大小写规则。根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例显示 Compare 是如何根据与 Comparer 关联的区域性返回不同的值的。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesComparer

   Public Shared Sub Main()

      ' Creates the strings to compare.
      Dim str1 As [String] = "llegar"
      Dim str2 As [String] = "lugar"
      Console.WriteLine("Comparing ""{0}"" and ""{1}"" ...", str1, str2)

      ' Uses the DefaultInvariant Comparer.
      Console.WriteLine("   Invariant Comparer: {0}", Comparer.DefaultInvariant.Compare(str1, str2))

      ' Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
      Dim myCompIntl As New Comparer(New CultureInfo("es-ES", False))
      Console.WriteLine("   International Sort: {0}", myCompIntl.Compare(str1, str2))

      ' Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
      Dim myCompTrad As New Comparer(New CultureInfo(&H40A, False))
      Console.WriteLine("   Traditional Sort  : {0}", myCompTrad.Compare(str1, str2))

   End Sub 'Main

End Class 'SamplesComparer

'This code produces the following output.
'
'Comparing "llegar" and "lugar" ...
'   Invariant Comparer: -1
'   International Sort: -1
'   Traditional Sort  : 1

using System;
using System.Collections;
using System.Globalization;

public class SamplesComparer  {

   public static void Main()  {

      // Creates the strings to compare.
      String str1 = "llegar";
      String str2 = "lugar";
      Console.WriteLine( "Comparing \"{0}\" and \"{1}\" ...", str1, str2 );

      // Uses the DefaultInvariant Comparer.
      Console.WriteLine( "   Invariant Comparer: {0}", Comparer.DefaultInvariant.Compare( str1, str2 ) );

      // Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
      Comparer myCompIntl = new Comparer( new CultureInfo( "es-ES", false ) );
      Console.WriteLine( "   International Sort: {0}", myCompIntl.Compare( str1, str2 ) );

      // Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
      Comparer myCompTrad = new Comparer( new CultureInfo( 0x040A, false ) );
      Console.WriteLine( "   Traditional Sort  : {0}", myCompTrad.Compare( str1, str2 ) );

   }

}

/*
This code produces the following output.

Comparing "llegar" and "lugar" ...
   Invariant Comparer: -1
   International Sort: -1
   Traditional Sort  : 1

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Creates the strings to compare.
   String^ str1 = "llegar";
   String^ str2 = "lugar";
   Console::WriteLine( "Comparing \"{0}\" and \"{1}\" ...", str1, str2 );

   // Uses the DefaultInvariant Comparer.
   Console::WriteLine( "   Invariant Comparer: {0}", Comparer::DefaultInvariant->Compare( str1, str2 ) );

   // Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
   Comparer^ myCompIntl = gcnew Comparer( gcnew CultureInfo(  "es-ES",false ) );
   Console::WriteLine( "   International Sort: {0}", myCompIntl->Compare( str1, str2 ) );

   // Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
   Comparer^ myCompTrad = gcnew Comparer( gcnew CultureInfo( 0x040A,false ) );
   Console::WriteLine( "   Traditional Sort  : {0}", myCompTrad->Compare( str1, str2 ) );
}

/*
This code produces the following output.

Comparing "llegar" and "lugar" ...
   Invariant Comparer: -1
   International Sort: -1
   Traditional Sort  : 1

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Comparer 类
Comparer 成员
System.Collections 命名空间
CultureInfo InvariantCulture
System.Globalization CompareInfo


Comparer 方法

Comparer 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Comparer 类

Comparer 类型公开以下成员。

名称 说明
页首

参考

Comparer 类
System.Collections 命名空间


Comparer ..::.Compare 方法

Comparer
.
.
::
.
Compare 方法
Comparer 类

对同一类型的两个对象执行区分大小写的比较，并返回一个值，指示其中一个对象小于、等于还是大于另一个对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function Compare ( _ a As Object, _ b As Object _ ) As Integer
public int Compare( Object a, Object b )
public: virtual int Compare( Object^ a, Object^ b ) sealed
abstract Compare : a:Object * b:Object -> int override Compare : a:Object * b:Object -> int
参数
a
类型： System Object
要比较的第一个对象。
b
类型： System Object
要比较的第二个对象。
返回值
类型： System Int32
一个带符号整数，它指示
a
与
b
的相对值，如下表所示。
值
含义
小于零
a
小于
b
。
零
a
等于
b
。
大于零
a
大于
b
。
实现
异常 | 条件
ArgumentException | a 和 b 都不实现 IComparable 接口。 - 或 - a 和 b 的类型不同，而且都无法处理与另一个的比较。

如果 a 实现 IComparable，则 a。返回 CompareTo ( b )；否则，如果 b 实现 IComparable，则返回负值的 b 结果。返回 CompareTo (a)。 如果 a 实现 IComparable，则 a。返回 CompareTo ( b )；否则，如果 b 实现 IComparable，则返回负值的 b 结果。返回 CompareTo (a)。 如果 a 实现 IComparable，则 a。返回 CompareTo ( b )；否则，如果 b 实现 IComparable，则返回负值的 b 结果。返回 CompareTo (a)。

当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。 根据区域性的不同，字符串比较可能会有不同的结果。有关区域性特定比较的更多信息，请参见 System.Globalization 命名空间和 编码和本地化。

下面的代码示例显示 Compare 是如何根据与 Comparer 关联的区域性返回不同的值的。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesComparer

   Public Shared Sub Main()

      ' Creates the strings to compare.
      Dim str1 As [String] = "llegar"
      Dim str2 As [String] = "lugar"
      Console.WriteLine("Comparing ""{0}"" and ""{1}"" ...", str1, str2)

      ' Uses the DefaultInvariant Comparer.
      Console.WriteLine("   Invariant Comparer: {0}", Comparer.DefaultInvariant.Compare(str1, str2))

      ' Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
      Dim myCompIntl As New Comparer(New CultureInfo("es-ES", False))
      Console.WriteLine("   International Sort: {0}", myCompIntl.Compare(str1, str2))

      ' Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
      Dim myCompTrad As New Comparer(New CultureInfo(&H40A, False))
      Console.WriteLine("   Traditional Sort  : {0}", myCompTrad.Compare(str1, str2))

   End Sub 'Main

End Class 'SamplesComparer

'This code produces the following output.
'
'Comparing "llegar" and "lugar" ...
'   Invariant Comparer: -1
'   International Sort: -1
'   Traditional Sort  : 1

using System;
using System.Collections;
using System.Globalization;

public class SamplesComparer  {

   public static void Main()  {

      // Creates the strings to compare.
      String str1 = "llegar";
      String str2 = "lugar";
      Console.WriteLine( "Comparing \"{0}\" and \"{1}\" ...", str1, str2 );

      // Uses the DefaultInvariant Comparer.
      Console.WriteLine( "   Invariant Comparer: {0}", Comparer.DefaultInvariant.Compare( str1, str2 ) );

      // Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
      Comparer myCompIntl = new Comparer( new CultureInfo( "es-ES", false ) );
      Console.WriteLine( "   International Sort: {0}", myCompIntl.Compare( str1, str2 ) );

      // Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
      Comparer myCompTrad = new Comparer( new CultureInfo( 0x040A, false ) );
      Console.WriteLine( "   Traditional Sort  : {0}", myCompTrad.Compare( str1, str2 ) );

   }

}

/*
This code produces the following output.

Comparing "llegar" and "lugar" ...
   Invariant Comparer: -1
   International Sort: -1
   Traditional Sort  : 1

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{

   // Creates the strings to compare.
   String^ str1 = "llegar";
   String^ str2 = "lugar";
   Console::WriteLine( "Comparing \"{0}\" and \"{1}\" ...", str1, str2 );

   // Uses the DefaultInvariant Comparer.
   Console::WriteLine( "   Invariant Comparer: {0}", Comparer::DefaultInvariant->Compare( str1, str2 ) );

   // Uses the Comparer based on the culture "es-ES" (Spanish - Spain, international sort).
   Comparer^ myCompIntl = gcnew Comparer( gcnew CultureInfo(  "es-ES",false ) );
   Console::WriteLine( "   International Sort: {0}", myCompIntl->Compare( str1, str2 ) );

   // Uses the Comparer based on the culture identifier 0x040A (Spanish - Spain, traditional sort).
   Comparer^ myCompTrad = gcnew Comparer( gcnew CultureInfo( 0x040A,false ) );
   Console::WriteLine( "   Traditional Sort  : {0}", myCompTrad->Compare( str1, str2 ) );
}

/*
This code produces the following output.

Comparing "llegar" and "lugar" ...
   Invariant Comparer: -1
   International Sort: -1
   Traditional Sort  : 1

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Comparer 类
Comparer 成员
System.Collections 命名空间
IComparable
System.Globalization CompareInfo
Thread CurrentCulture
System.Globalization CultureInfo


Comparer ..::.GetObjectData 方法

Comparer
.
.
::
.
GetObjectData 方法
Comparer 类

用序列化所需的数据填充 SerializationInfo 对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) sealed
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
要填充数据的对象。
context
类型： System.Runtime.Serialization StreamingContext
有关序列化的源或目标的上下文信息。

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

虽然 GetObjectData 方法在默认情况下对于 COM 客户端是不可见的，但是继承 Comparer 类可以公开此方法并会在 COM 客户端导致意外行为。

  • SecurityPermission

    表示提供序列化服务的能力。关联枚举：SerializationFormatter 安全操作：LinkDemand 表示提供序列化服务的能力。关联枚举：SerializationFormatter 安全操作：LinkDemand

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

Comparer 类
Comparer 成员
System.Collections 命名空间


DictionaryBase 类

DictionaryBase 类
成员

为键/值对的强类型集合提供 abstract 基类。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class DictionaryBase _
    Implements IDictionary, ICollection, IEnumerable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class DictionaryBase : IDictionary,
    ICollection, IEnumerable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class DictionaryBase abstract : IDictionary,
    ICollection, IEnumerable
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type DictionaryBase =
    class
        interface IDictionary
        interface ICollection
        interface IEnumerable
    end

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）需要集合中每个元素的类型。由于 DictionaryBase 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）需要集合中每个元素的类型。由于 DictionaryBase 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）需要集合中每个元素的类型。由于 DictionaryBase 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。

foreach 语句是对枚举数的包装，它只允许从集合中读取，不允许写入集合。

说明 说明

由于键可以被继承而且它们的行为已更改，因此使用 Equals 方法进行的比较并不能保证其绝对唯一性。

对实现者的说明

提供此基类旨在使实施者创建强类型自定义集合变得更容易。实现者最好扩展此基类，而不是创建自己的类。 提供此基类旨在使实施者创建强类型自定义集合变得更容易。实现者最好扩展此基类，而不是创建自己的类。

此基类的成员受保护并且只能通过派生类使用。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

System.Collections System.Collections..::.DictionaryBaseDictionaryBase

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。

此实现不为 DictionaryBase 提供同步（线程安全）的包装，但派生类可以使用 SyncRoot 属性创建各自的 DictionaryBase 同步版本。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 成员
System.Collections 命名空间
System.Collections Hashtable
System.Collections IDictionary
System.Collections.Generic

其他资源

执行不区分区域性的字符串操作


DictionaryBase 成员

DictionaryBase 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DictionaryBase 类

为键/值对的强类型集合提供 abstract 基类。

DictionaryBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DictionaryBase 类
System.Collections 命名空间


DictionaryBase 构造函数

DictionaryBase 构造函数
DictionaryBase 类

初始化 DictionaryBase 类的新实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected DictionaryBase()
protected:
DictionaryBase()
new : unit -> DictionaryBase

此构造函数的运算复杂度是 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间


DictionaryBase 方法

DictionaryBase 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DictionaryBase 类

DictionaryBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DictionaryBase 类
System.Collections 命名空间


DictionaryBase ..::.Clear 方法

DictionaryBase
.
.
::
.
Clear 方法
DictionaryBase 类

清除 DictionaryBase 实例的内容。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub Clear
public void Clear()
public:
virtual void Clear() sealed
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

Count 被设置为零，并且对来自该集合元素的其他对象的引用也被释放。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间


DictionaryBase ..::.CopyTo 方法

DictionaryBase
.
.
::
.
CopyTo 方法
DictionaryBase 类

将 DictionaryBase 元素复制到位于指定索引处的一维 Array 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
public void CopyTo(
    Array array,
    int index
)
public:
virtual void CopyTo(
    Array^ array,
    int index
) sealed
abstract CopyTo :
        array:Array *
        index:int -> unit
override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
一维 Array，为从 DictionaryBase 实例复制的 DictionaryEntry 对象的目标位置。Array 必须具有从零开始的索引。 一维 Array，为从 DictionaryBase 实例复制的 DictionaryEntry 对象的目标位置。Array 必须具有从零开始的索引。
index
类型： System Int32
array 中从零开始的索引，将在此处开始复制。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 DictionaryBase 中的元素数大于从 index 到目标 array 结尾处之间的可用空间。
InvalidCastException | 无法自动将源 DictionaryBase 的类型强制转换为目标 array 的类型。

这些元素将复制到 Array，复制顺序与枚举数循环访问 DictionaryBase 的顺序一样。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
System Array
DictionaryEntry
GetEnumerator


DictionaryBase ..::.GetEnumerator 方法

DictionaryBase
.
.
::
.
GetEnumerator 方法
DictionaryBase 类

返回循环访问 DictionaryBase 实例的 IDictionaryEnumerator。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Function GetEnumerator As IDictionaryEnumerator
public IDictionaryEnumerator GetEnumerator()
public:
virtual IDictionaryEnumerator^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IDictionaryEnumerator
override GetEnumerator : unit -> IDictionaryEnumerator

返回值

类型： System.Collections IDictionaryEnumerator
用于 DictionaryBase 实例的 IDictionaryEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
IDictionaryEnumerator
IEnumerator


DictionaryBase ..::.IDictionary ..::.Add 方法

DictionaryBase
.
.
::
.
IDictionary
.
.
::
.
Add 方法
DictionaryBase 类

将带有指定键和值的元素添加到 DictionaryBase 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Add ( _
    key As Object, _
    value As Object _
) Implements IDictionary.Add
void IDictionary.Add(
    Object key,
    Object value
)
private:
virtual void Add(
    Object^ key,
    Object^ value
) sealed = IDictionary::Add
private abstract Add :
        key:Object *
        value:Object -> unit
private override Add :
        key:Object *
        value:Object -> unit

参数

key
类型： System Object
要添加的元素的键。
value
类型： System Object
要添加的元素的值。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | DictionaryBase 中已存在具有相同键的元素。
NotSupportedException | DictionaryBase 是只读的。 - 或 - DictionaryBase 具有固定大小。

其状态和哈希代码值之间不相关的对象通常不应用作键。例如，String 对象比 StringBuilder 对象更适于用作键。 其状态和哈希代码值之间不相关的对象通常不应用作键。例如，String 对象比 StringBuilder 对象更适于用作键。

还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 DictionaryBase 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 DictionaryBase 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 DictionaryBase 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 DictionaryBase 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 DictionaryBase 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 DictionaryBase 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。

此方法是 O(1) 操作。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
Remove
IDictionary Item
Add


DictionaryBase ..::.IDictionary ..::.Contains 方法

DictionaryBase
.
.
::
.
IDictionary
.
.
::
.
Contains 方法
DictionaryBase 类

确定 DictionaryBase 是否包含特定键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Function Contains ( _
    key As Object _
) As Boolean Implements IDictionary.Contains
bool IDictionary.Contains(
    Object key
)
private:
virtual bool Contains(
    Object^ key
) sealed = IDictionary::Contains
private abstract Contains :
        key:Object -> bool
private override Contains :
        key:Object -> bool

参数

key
类型： System Object
要在 DictionaryBase 中定位的键。

返回值

类型： System Boolean
如果 DictionaryBase 包含具有指定键的元素，则为 true；否则为 false。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法是 O(1) 操作。

从 .NET Framework 2.0 开始，此方法对 key 使用该集合对象的 Equals 和 CompareTo 方法来确定 item 是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 key 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 key 使用该集合对象的 Equals 和 CompareTo 方法来确定 item 是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 key 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间

其他资源

执行不区分区域性的字符串操作


DictionaryBase ..::.IDictionary ..::.Remove 方法

DictionaryBase
.
.
::
.
IDictionary
.
.
::
.
Remove 方法
DictionaryBase 类

从 DictionaryBase 中移除带有指定键的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub Remove ( _
    key As Object _
) Implements IDictionary.Remove
void IDictionary.Remove(
    Object key
)
private:
virtual void Remove(
    Object^ key
) sealed = IDictionary::Remove
private abstract Remove :
        key:Object -> unit
private override Remove :
        key:Object -> unit

参数

key
类型： System Object
要移除的元素的键。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | DictionaryBase 是只读的。 - 或 - DictionaryBase 具有固定大小。

如果 DictionaryBase 不包含带有指定键的元素，则 DictionaryBase 保持不变。不引发异常。 如果 DictionaryBase 不包含带有指定键的元素，则 DictionaryBase 保持不变。不引发异常。

此方法是 O(1) 操作。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
Add
IDictionary Remove

其他资源

执行不区分区域性的字符串操作


DictionaryBase ..::.IEnumerable ..::.GetEnumerator 方法

DictionaryBase
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
DictionaryBase 类

返回循环访问 DictionaryBase 的 IEnumerator。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
用于 DictionaryBase 的 IEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
IDictionaryEnumerator
IEnumerator


DictionaryBase ..::.OnClear 方法

DictionaryBase
.
.
::
.
OnClear 方法
DictionaryBase 类

在清除 DictionaryBase 实例的内容之前执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnClear
protected virtual void OnClear()
protected:
virtual void OnClear()
abstract OnClear : unit -> unit
override OnClear : unit -> unit

此方法的默认实现需要由派生类重写，以便在清除集合之前执行某些操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在从基础 System.Collections..::.Hashtable 中删除所有元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在从基础 System.Collections..::.Hashtable 中删除所有元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的清除行为之前调用 OnClear，而在标准的清除行为之后调用 OnClearComplete。

例如，实施者可以通过全局“清除”(Clear) 使某些元素不被删除。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
OnClearComplete
OnRemove


DictionaryBase ..::.OnClearComplete 方法

DictionaryBase
.
.
::
.
OnClearComplete 方法
DictionaryBase 类

在清除 DictionaryBase 实例的内容之后执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnClearComplete
protected virtual void OnClearComplete()
protected:
virtual void OnClearComplete()
abstract OnClearComplete : unit -> unit
override OnClearComplete : unit -> unit

此方法的默认实现需要由派生类重写，以便在清除集合之后执行某些操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在从基础 System.Collections..::.Hashtable 中删除所有元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在从基础 System.Collections..::.Hashtable 中删除所有元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的清除行为之前调用 OnClear，而在标准的清除行为之后调用 OnClearComplete。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
OnClear
OnRemoveComplete


DictionaryBase ..::.OnGet 方法

DictionaryBase
.
.
::
.
OnGet 方法
DictionaryBase 类

获取 DictionaryBase 实例中带有指定键和值的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function OnGet ( _
    key As Object, _
    currentValue As Object _
) As Object
protected virtual Object OnGet(
    Object key,
    Object currentValue
)
protected:
virtual Object^ OnGet(
    Object^ key,
    Object^ currentValue
)
abstract OnGet :
        key:Object *
        currentValue:Object -> Object
override OnGet :
        key:Object *
        currentValue:Object -> Object

参数

key
类型： System Object
要获取的元素的键。
currentValue
类型： System Object
与 key 相关联的元素的当前值。

返回值

类型： System Object
包含带有指定键和值的元素的 Object。

该方法的默认实现返回 currentValue。这是为了由派生类重写，以便在检索指定元素时执行其他操作。 该方法的默认实现返回 currentValue。这是为了由派生类重写，以便在检索指定元素时执行其他操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义当执行基础 System.Collections..::.Hashtable 的标准“获取”(Get) 行为时必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义当执行基础 System.Collections..::.Hashtable 的标准“获取”(Get) 行为时必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

OnGet 可用于指定在返回从基础 System.Collections..::.Hashtable 检索的值之前执行的进程。例如，实施者可在返回某个值之前将该值转换为另一种类型。 OnGet 可用于指定在返回从基础 System.Collections..::.Hashtable 检索的值之前执行的进程。例如，实施者可在返回某个值之前将该值转换为另一种类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间


DictionaryBase ..::.OnInsert 方法

DictionaryBase
.
.
::
.
OnInsert 方法
DictionaryBase 类

在向 DictionaryBase 实例中插入新元素之前执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnInsert ( _
    key As Object, _
    value As Object _
)
protected virtual void OnInsert(
    Object key,
    Object value
)
protected:
virtual void OnInsert(
    Object^ key,
    Object^ value
)
abstract OnInsert :
        key:Object *
        value:Object -> unit
override OnInsert :
        key:Object *
        value:Object -> unit

参数

key
类型： System Object
要插入的元素的键。
value
类型： System Object
要插入的元素的值。

此方法的默认实现需要由派生类重写，以便在插入指定元素之前执行某些操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在将元素插入基础 System.Collections..::.Hashtable 之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在将元素插入基础 System.Collections..::.Hashtable 之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的插入行为之前调用 OnInsert；而在标准的插入行为之后调用 OnInsertComplete。

例如，实施者可限制能够插入到 System.Collections..::.Hashtable 中的对象的类型。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
OnInsertComplete
OnSet
OnValidate


DictionaryBase ..::.OnInsertComplete 方法

DictionaryBase
.
.
::
.
OnInsertComplete 方法
DictionaryBase 类

在向 DictionaryBase 实例中插入新元素之后执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnInsertComplete ( _
    key As Object, _
    value As Object _
)
protected virtual void OnInsertComplete(
    Object key,
    Object value
)
protected:
virtual void OnInsertComplete(
    Object^ key,
    Object^ value
)
abstract OnInsertComplete :
        key:Object *
        value:Object -> unit
override OnInsertComplete :
        key:Object *
        value:Object -> unit

参数

key
类型： System Object
要插入的元素的键。
value
类型： System Object
要插入的元素的值。

此方法的默认实现需要由派生类重写，以便在插入指定元素之后执行某些操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在将元素插入基础 System.Collections..::.Hashtable 之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在将元素插入基础 System.Collections..::.Hashtable 之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的插入行为之前调用 OnInsert；而在标准的插入行为之后调用 OnInsertComplete。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
OnInsert
OnSetComplete


DictionaryBase ..::.OnRemove 方法

DictionaryBase
.
.
::
.
OnRemove 方法
DictionaryBase 类

当从 DictionaryBase 实例移除元素时执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnRemove ( _
    key As Object, _
    value As Object _
)
protected virtual void OnRemove(
    Object key,
    Object value
)
protected:
virtual void OnRemove(
    Object^ key,
    Object^ value
)
abstract OnRemove :
        key:Object *
        value:Object -> unit
override OnRemove :
        key:Object *
        value:Object -> unit

参数

key
类型： System Object
要移除的元素的键。
value
类型： System Object
要移除的元素的值。

此方法的默认实现需要由派生类重写，以便在移除指定元素之前执行某些操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在从基础 System.Collections..::.Hashtable 中移除元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在从基础 System.Collections..::.Hashtable 中移除元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的移除行为之前调用 OnRemove；而在标准的移除行为之后调用 OnRemoveComplete。

例如，实施者通过始终在 OnRemove 中引发异常，可防止移除元素。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
OnRemoveComplete
OnClear


DictionaryBase ..::.OnRemoveComplete 方法

DictionaryBase
.
.
::
.
OnRemoveComplete 方法
DictionaryBase 类

在从 DictionaryBase 实例中移除元素之后执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnRemoveComplete ( _
    key As Object, _
    value As Object _
)
protected virtual void OnRemoveComplete(
    Object key,
    Object value
)
protected:
virtual void OnRemoveComplete(
    Object^ key,
    Object^ value
)
abstract OnRemoveComplete :
        key:Object *
        value:Object -> unit
override OnRemoveComplete :
        key:Object *
        value:Object -> unit

参数

key
类型： System Object
要移除的元素的键。
value
类型： System Object
要移除的元素的值。

此方法的默认实现需要由派生类重写，以便在移除指定元素之后执行某些操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在从基础 System.Collections..::.Hashtable 中移除元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在从基础 System.Collections..::.Hashtable 中移除元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的移除行为之前调用 OnRemove；而在标准的移除行为之后调用 OnRemoveComplete。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
OnRemove
OnClearComplete


DictionaryBase ..::.OnSet 方法

DictionaryBase
.
.
::
.
OnSet 方法
DictionaryBase 类

当在 DictionaryBase 实例中设置值之前执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnSet ( _
    key As Object, _
    oldValue As Object, _
    newValue As Object _
)
protected virtual void OnSet(
    Object key,
    Object oldValue,
    Object newValue
)
protected:
virtual void OnSet(
    Object^ key,
    Object^ oldValue,
    Object^ newValue
)
abstract OnSet :
        key:Object *
        oldValue:Object *
        newValue:Object -> unit
override OnSet :
        key:Object *
        oldValue:Object *
        newValue:Object -> unit

参数

key
类型： System Object
要定位的元素的键。
oldValue
类型： System Object
与 key 相关联的元素的旧值。
newValue
类型： System Object
与 key 相关联的元素的新值。

此方法的默认实现需要由派生类重写，以便在设置指定元素之前执行某些操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在设置基础 System.Collections..::.Hashtable 中的指定元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在设置基础 System.Collections..::.Hashtable 中的指定元素之前必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的设置行为之前调用 OnSet，而在标准的设置行为之后调用 OnSetComplete。

例如，实施者通过在 OnSet 内执行检查，可限制能够覆盖的值。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
OnSetComplete
OnInsert
OnValidate


DictionaryBase ..::.OnSetComplete 方法

DictionaryBase
.
.
::
.
OnSetComplete 方法
DictionaryBase 类

当在 DictionaryBase 实例中设置值后执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnSetComplete ( _
    key As Object, _
    oldValue As Object, _
    newValue As Object _
)
protected virtual void OnSetComplete(
    Object key,
    Object oldValue,
    Object newValue
)
protected:
virtual void OnSetComplete(
    Object^ key,
    Object^ oldValue,
    Object^ newValue
)
abstract OnSetComplete :
        key:Object *
        oldValue:Object *
        newValue:Object -> unit
override OnSetComplete :
        key:Object *
        oldValue:Object *
        newValue:Object -> unit

参数

key
类型： System Object
要定位的元素的键。
oldValue
类型： System Object
与 key 相关联的元素的旧值。
newValue
类型： System Object
与 key 相关联的元素的新值。

此方法的默认实现需要由派生类重写，以便在设置指定元素之后执行某些操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义在设置基础 System.Collections..::.Hashtable 中的指定元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义在设置基础 System.Collections..::.Hashtable 中的指定元素之后必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

在标准的设置行为之前调用 OnSet，而在标准的设置行为之后调用 OnSetComplete。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
OnSet
OnInsertComplete


DictionaryBase ..::.OnValidate 方法

DictionaryBase
.
.
::
.
OnValidate 方法
DictionaryBase 类

当验证带有指定键和值的元素时执行其他自定义进程。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Sub OnValidate ( _
    key As Object, _
    value As Object _
)
protected virtual void OnValidate(
    Object key,
    Object value
)
protected:
virtual void OnValidate(
    Object^ key,
    Object^ value
)
abstract OnValidate :
        key:Object *
        value:Object -> unit
override OnValidate :
        key:Object *
        value:Object -> unit

参数

key
类型： System Object
要验证的元素的键。
value
类型： System Object
要验证的元素的值。

此方法的默认实现是要由派生类重写以在指定的元素被验证时执行某些操作。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

此方法的默认实现的运算复杂度为 O(1)。

对实现者的说明

此方法允许实施者定义当执行基础 System.Collections..::.Hashtable 的标准行为时必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。 此方法允许实施者定义当执行基础 System.Collections..::.Hashtable 的标准行为时必须执行的进程。通过定义此方法，实施者可以向继承方法添加功能，而无须重写所有其他方法。

OnValidate 可用于对集合中可接受的对象的类型进行限制。默认实现将防止在基础 System.Collections..::.Hashtable 中添加或移除 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 OnValidate 可用于对集合中可接受的对象的类型进行限制。默认实现将防止在基础 System.Collections..::.Hashtable 中添加或移除 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
OnSet
OnInsert


DictionaryBase 属性

DictionaryBase 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DictionaryBase 类

DictionaryBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DictionaryBase 类
System.Collections 命名空间


DictionaryBase ..::.Count 属性

DictionaryBase
.
.
::
.
Count 属性
DictionaryBase 类

获取包含在 DictionaryBase 实例中的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public ReadOnly Property Count As Integer
    Get
public int Count { get; }
public:
virtual property int Count {
    int get () sealed;
}
abstract Count : int
override Count : int

属性值

类型： System Int32
包含在 DictionaryBase 实例中的元素数。

实现

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间


DictionaryBase ..::.Dictionary 属性

DictionaryBase
.
.
::
.
Dictionary 属性
DictionaryBase 类

获取包含在 DictionaryBase 实例中的元素的列表。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected ReadOnly Property Dictionary As IDictionary
    Get
protected IDictionary Dictionary { get; }
protected:
property IDictionary^ Dictionary {
    IDictionary^ get ();
}
member Dictionary : IDictionary

属性值

类型： System.Collections IDictionary
表示 DictionaryBase 实例本身的 IDictionary。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间


DictionaryBase ..::.ICollection ..::.IsSynchronized 属性

DictionaryBase
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
DictionaryBase 类

获取一个值，该值指示对 DictionaryBase 对象的访问是否同步（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
如果对 DictionaryBase 对象的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。 如果对 DictionaryBase 对象的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。

实现

DictionaryBase 对象不是同步的。派生类可以使用 SyncRoot 属性提供 DictionaryBase 类的同步版本。 DictionaryBase 对象不是同步的。派生类可以使用 SyncRoot 属性提供 DictionaryBase 类的同步版本。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 属性锁定集合。

Dim myCollection As ICollection = New ShortStringDictionary()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

ICollection myCollection = new ShortStringDictionary();
lock(myCollection.SyncRoot)
{
    foreach (Object item in myCollection)
    {
        // Insert your code here.
    }
}

ICollection^ myCollection = gcnew ShortStringDictionary();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
Hashtable Synchronized
SyncRoot


DictionaryBase ..::.ICollection ..::.SyncRoot 属性

DictionaryBase
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
DictionaryBase 类

获取一个对象，该对象可用于同步对 DictionaryBase 对象的访问。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
一个对象，该对象可用于同步对 DictionaryBase 对象的访问。

实现

派生类可以使用 SyncRoot 属性提供自己的 DictionaryBase 类的同步版本。同步代码必须在 DictionaryBase 对象的 SyncRoot 属性上执行操作，而不是直接在 DictionaryBase 对象上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 DictionaryBase 对象。 派生类可以使用 SyncRoot 属性提供自己的 DictionaryBase 类的同步版本。同步代码必须在 DictionaryBase 对象的 SyncRoot 属性上执行操作，而不是直接在 DictionaryBase 对象上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 DictionaryBase 对象。 派生类可以使用 SyncRoot 属性提供自己的 DictionaryBase 类的同步版本。同步代码必须在 DictionaryBase 对象的 SyncRoot 属性上执行操作，而不是直接在 DictionaryBase 对象上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 DictionaryBase 对象。 派生类可以使用 SyncRoot 属性提供自己的 DictionaryBase 类的同步版本。同步代码必须在 DictionaryBase 对象的 SyncRoot 属性上执行操作，而不是直接在 DictionaryBase 对象上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 DictionaryBase 对象。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 属性锁定集合。

Dim myCollection As ICollection = New ShortStringDictionary()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

ICollection myCollection = new ShortStringDictionary();
lock(myCollection.SyncRoot)
{
    foreach (Object item in myCollection)
    {
        // Insert your code here.
    }
}

ICollection^ myCollection = gcnew ShortStringDictionary();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
IsSynchronized
Hashtable Synchronized


DictionaryBase ..::.IDictionary ..::.IsFixedSize 属性

DictionaryBase
.
.
::
.
IDictionary
.
.
::
.
IsFixedSize 属性
DictionaryBase 类

获取一个值，该值指示 DictionaryBase 对象是否具有固定大小。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property IsFixedSize As Boolean
    Implements IDictionary.IsFixedSize
    Get
bool IDictionary.IsFixedSize { get; }
private:
virtual property bool IsFixedSize {
    bool get () sealed = IDictionary::IsFixedSize::get;
}
private abstract IsFixedSize : bool
private override IsFixedSize : bool

属性值

类型： System Boolean
如果 DictionaryBase 对象具有固定大小，则为 true；否则为 false。默认值为 false。 如果 DictionaryBase 对象具有固定大小，则为 true；否则为 false。默认值为 false。

实现

大小固定的集合在创建之后不允许添加或移除元素，但允许修改现有元素。

固定大小的集合只是一个具有用于防止添加和移除元素的包装的集合；因此，如果更改基础集合（包括添加和移除元素），则固定大小的集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间


DictionaryBase ..::.IDictionary ..::.IsReadOnly 属性

DictionaryBase
.
.
::
.
IDictionary
.
.
::
.
IsReadOnly 属性
DictionaryBase 类

获取一个值，该值指示 DictionaryBase 对象是否为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements IDictionary.IsReadOnly
    Get
bool IDictionary.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = IDictionary::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
如果 DictionaryBase 对象为只读，则为 true；否则为 false。默认值为 false。 如果 DictionaryBase 对象为只读，则为 true；否则为 false。默认值为 false。

实现

只读集合在创建后就不能再添加、移除或修改元素。

只读集合只是一个具有用于防止修改的包装的集合；因此，如果更改基础集合，则只读集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间


DictionaryBase ..::.IDictionary ..::.Item 属性

DictionaryBase
.
.
::
.
IDictionary
.
.
::
.
Item 属性
DictionaryBase 类

获取或设置与指定的键相关联的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Property Item ( _
    key As Object _
) As Object Implements IDictionary.Item
    Get
    Set
Object IDictionary.this[
    Object key
] { get; set; }
private:
virtual property Object^ Item[Object^ key] {
    Object^ get (Object^ key) sealed = IDictionary::Item::get;
    void set (Object^ key, Object^ value) sealed = IDictionary::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

key
类型： System Object
要获取或设置其值的键。

属性值

类型： System Object
与指定的键相关联的值。如果未找到指定的键，尝试获取它将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），尝试设置它将使用指定的键创建新元素。 与指定的键相关联的值。如果未找到指定的键，尝试获取它将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），尝试设置它将使用指定的键创建新元素。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 设置该属性，而且 DictionaryBase 为只读。 - 或 - 设置该属性，集合中不存在 key，而且 DictionaryBase 具有固定大小。

通过使用下面的语法，此属性提供访问集合中特定元素的能力：myCollection[key]。

还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 DictionaryBase 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 DictionaryBase 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 DictionaryBase 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 DictionaryBase 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 DictionaryBase 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 DictionaryBase 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。

检索此属性值的运算复杂度是 O(1)；设置此属性的运算复杂度也是 O(1)。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
Add


DictionaryBase ..::.IDictionary ..::.Keys 属性

DictionaryBase
.
.
::
.
IDictionary
.
.
::
.
Keys 属性
DictionaryBase 类

获取包含 DictionaryBase 对象中的键的 ICollection 对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property Keys As ICollection
    Implements IDictionary.Keys
    Get
ICollection IDictionary.Keys { get; }
private:
virtual property ICollection^ Keys {
    ICollection^ get () sealed = IDictionary::Keys::get;
}
private abstract Keys : ICollection
private override Keys : ICollection

属性值

类型： System.Collections ICollection
包含 DictionaryBase 对象中的键的 ICollection 对象。

实现

未指定 ICollection 对象中键的顺序，但它与 Values 属性返回的 ICollection 对象中的关联值的顺序相同。

返回的 ICollection 不是静态副本；相反，ICollection 反过来引用原始 DictionaryBase 对象中的键。因此，对 DictionaryBase 的更改继续反映到返回的 ICollection 中。 返回的 ICollection 不是静态副本；相反，ICollection 反过来引用原始 DictionaryBase 对象中的键。因此，对 DictionaryBase 的更改继续反映到返回的 ICollection 中。

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 属性小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
ICollection
Values


DictionaryBase ..::.IDictionary ..::.Values 属性

DictionaryBase
.
.
::
.
IDictionary
.
.
::
.
Values 属性
DictionaryBase 类

获取包含 DictionaryBase 对象中的值的 ICollection 对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property Values As ICollection
    Implements IDictionary.Values
    Get
ICollection IDictionary.Values { get; }
private:
virtual property ICollection^ Values {
    ICollection^ get () sealed = IDictionary::Values::get;
}
private abstract Values : ICollection
private override Values : ICollection

属性值

类型： System.Collections ICollection
包含 DictionaryBase 对象中的值的 ICollection 对象。

实现

未指定 ICollection 对象中值的顺序，但它与 Keys 属性返回的 ICollection 对象中的关联键的顺序相同。

返回的 ICollection 不是静态副本；相反，ICollection 反过来引用原始 DictionaryBase 对象中的值。因此，对 DictionaryBase 的更改继续反映到返回的 ICollection 中。 返回的 ICollection 不是静态副本；相反，ICollection 反过来引用原始 DictionaryBase 对象中的值。因此，对 DictionaryBase 的更改继续反映到返回的 ICollection 中。

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例实现 DictionaryBase 类，并使用该实现创建 Length 属性小于或等于 5 个字符的 String 键和值的字典。

Imports System
Imports System.Collections

Public Class ShortStringDictionary
   Inherits DictionaryBase

   Default Public Property Item(key As String) As String
      Get
         Return CType(Dictionary(key), String)
      End Get
      Set
         Dictionary(key) = value
      End Set
   End Property

   Public ReadOnly Property Keys() As ICollection
      Get
         Return Dictionary.Keys
      End Get
   End Property

   Public ReadOnly Property Values() As ICollection
      Get
         Return Dictionary.Values
      End Get
   End Property

   Public Sub Add(key As String, value As String)
      Dictionary.Add(key, value)
   End Sub 'Add

   Public Function Contains(key As String) As Boolean
      Return Dictionary.Contains(key)
   End Function 'Contains

   Public Sub Remove(key As String)
      Dictionary.Remove(key)
   End Sub 'Remove

   Protected Overrides Sub OnInsert(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnInsert

   Protected Overrides Sub OnRemove(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
   End Sub 'OnRemove

   Protected Overrides Sub OnSet(key As Object, oldValue As Object, newValue As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(newValue.GetType()) Then
         Throw New ArgumentException("newValue must be of type String.", "newValue")
      Else
         Dim strValue As String = CType(newValue, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("newValue must be no more than 5 characters in length.", "newValue")
         End If
      End If
   End Sub 'OnSet

   Protected Overrides Sub OnValidate(key As Object, value As Object)
      If Not GetType(System.String).IsAssignableFrom(key.GetType()) Then
         Throw New ArgumentException("key must be of type String.", "key")
      Else
         Dim strKey As String = CType(key, String)
         If strKey.Length > 5 Then
            Throw New ArgumentException("key must be no more than 5 characters in length.", "key")
         End If
      End If
      If Not GetType(System.String).IsAssignableFrom(value.GetType()) Then
         Throw New ArgumentException("value must be of type String.", "value")
      Else
         Dim strValue As String = CType(value, String)
         If strValue.Length > 5 Then
            Throw New ArgumentException("value must be no more than 5 characters in length.", "value")
         End If
      End If
   End Sub 'OnValidate

End Class 'ShortStringDictionary

Public Class SamplesDictionaryBase

   Public Shared Sub Main()

      ' Creates and initializes a new DictionaryBase.
      Dim mySSC As New ShortStringDictionary()

      ' Adds elements to the collection.
      mySSC.Add("One", "a")
      mySSC.Add("Two", "ab")
      mySSC.Add("Three", "abc")
      mySSC.Add("Four", "abcd")
      mySSC.Add("Five", "abcde")

      ' Display the contents of the collection using For Each. This is the preferred method.
      Console.WriteLine("Contents of the collection (using For Each):")
      PrintKeysAndValues1(mySSC)

      ' Display the contents of the collection using the enumerator.
      Console.WriteLine("Contents of the collection (using enumerator):")
      PrintKeysAndValues2(mySSC)

      ' Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine("Initial contents of the collection (using Keys and Item):")
      PrintKeysAndValues3(mySSC)

      ' Tries to add a value that is too long.
      Try
          mySSC.Add("Ten", "abcdefghij")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      ' Tries to add a key that is too long.
      Try
          mySSC.Add("Eleven", "ijk")
      Catch e As ArgumentException
          Console.WriteLine(e.ToString())
      End Try

      Console.WriteLine()

      ' Searches the collection with Contains.
      Console.WriteLine("Contains ""Three"": {0}", mySSC.Contains("Three"))
      Console.WriteLine("Contains ""Twelve"": {0}", mySSC.Contains("Twelve"))
      Console.WriteLine()

      ' Removes an element from the collection.
      mySSC.Remove("Two")

      ' Displays the contents of the collection.
      Console.WriteLine("After removing ""Two"":")
      PrintKeysAndValues1(mySSC)

    End Sub 'Main

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues1(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      For Each myDE In  myCol
          Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
      Next myDE
      Console.WriteLine()
    End Sub 'PrintKeysAndValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintKeysAndValues2(myCol As ShortStringDictionary)
      Dim myDE As DictionaryEntry
      Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
      While myEnumerator.MoveNext()
          If Not (myEnumerator.Current Is Nothing) Then
            myDE = CType(myEnumerator.Current, DictionaryEntry)
            Console.WriteLine("   {0,-5} : {1}", myDE.Key, myDE.Value)
          End If
      End While
      Console.WriteLine()
    End Sub 'PrintKeysAndValues2

    ' Uses the Keys property and the Item property.
    Public Shared Sub PrintKeysAndValues3(myCol As ShortStringDictionary)
      Dim myKeys As ICollection = myCol.Keys
      Dim k As String
      For Each k In  myKeys
          Console.WriteLine("   {0,-5} : {1}", k, myCol(k))
      Next k
      Console.WriteLine()
    End Sub 'PrintKeysAndValues3

End Class 'SamplesDictionaryBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Contents of the collection (using enumerator):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'Initial contents of the collection (using Keys and Item):
'   Three : abc
'   Five  : abcde
'   Two   : ab
'   One   : a
'   Four  : abcd
'
'System.ArgumentException: value must be no more than 5 characters in length.
'Parameter name: value
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'System.ArgumentException: key must be no more than 5 characters in length.
'Parameter name: key
'   at ShortStringDictionary.OnValidate(Object key, Object value)
'   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
'   at SamplesDictionaryBase.Main()
'
'Contains "Three": True
'Contains "Twelve": False
'
'After removing "Two":
'   Three : abc
'   Five  : abcde
'   One   : a
'   Four  : abcd

using System;
using System.Collections;

public class ShortStringDictionary : DictionaryBase  {

   public String this[ String key ]  {
      get  {
         return( (String) Dictionary[key] );
      }
      set  {
         Dictionary[key] = value;
      }
   }

   public ICollection Keys  {
      get  {
         return( Dictionary.Keys );
      }
   }

   public ICollection Values  {
      get  {
         return( Dictionary.Values );
      }
   }

   public void Add( String key, String value )  {
      Dictionary.Add( key, value );
   }

   public bool Contains( String key )  {
      return( Dictionary.Contains( key ) );
   }

   public void Remove( String key )  {
      Dictionary.Remove( key );
   }

   protected override void OnInsert( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

   protected override void OnRemove( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }
   }

   protected override void OnSet( Object key, Object oldValue, Object newValue )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( newValue.GetType() != typeof(System.String) )
         throw new ArgumentException( "newValue must be of type String.", "newValue" );
      else  {
         String strValue = (String) newValue;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "newValue must be no more than 5 characters in length.", "newValue" );
      }
   }

   protected override void OnValidate( Object key, Object value )  {
      if ( key.GetType() != typeof(System.String) )
         throw new ArgumentException( "key must be of type String.", "key" );
      else  {
         String strKey = (String) key;
         if ( strKey.Length > 5 )
            throw new ArgumentException( "key must be no more than 5 characters in length.", "key" );
      }

      if ( value.GetType() != typeof(System.String) )
         throw new ArgumentException( "value must be of type String.", "value" );
      else  {
         String strValue = (String) value;
         if ( strValue.Length > 5 )
            throw new ArgumentException( "value must be no more than 5 characters in length.", "value" );
      }
   }

}

public class SamplesDictionaryBase  {

   public static void Main()  {

      // Creates and initializes a new DictionaryBase.
      ShortStringDictionary mySSC = new ShortStringDictionary();

      // Adds elements to the collection.
      mySSC.Add( "One", "a" );
      mySSC.Add( "Two", "ab" );
      mySSC.Add( "Three", "abc" );
      mySSC.Add( "Four", "abcd" );
      mySSC.Add( "Five", "abcde" );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintKeysAndValues1( mySSC );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintKeysAndValues2( mySSC );

      // Display the contents of the collection using the Keys property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Keys and Item):" );
      PrintKeysAndValues3( mySSC );

      // Tries to add a value that is too long.
      try  {
         mySSC.Add( "Ten", "abcdefghij" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Tries to add a key that is too long.
      try  {
         mySSC.Add( "Eleven", "ijk" );
      }
      catch ( ArgumentException e )  {
         Console.WriteLine( e.ToString() );
      }

      Console.WriteLine();

      // Searches the collection with Contains.
      Console.WriteLine( "Contains \"Three\": {0}", mySSC.Contains( "Three" ) );
      Console.WriteLine( "Contains \"Twelve\": {0}", mySSC.Contains( "Twelve" ) );
      Console.WriteLine();

      // Removes an element from the collection.
      mySSC.Remove( "Two" );

      // Displays the contents of the collection.
      Console.WriteLine( "After removing \"Two\":" );
      PrintKeysAndValues1( mySSC );

   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues1( ShortStringDictionary myCol )  {
      foreach ( DictionaryEntry myDE in myCol )
         Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintKeysAndValues2( ShortStringDictionary myCol )  {
      DictionaryEntry myDE;
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         if ( myEnumerator.Current != null )  {
            myDE = (DictionaryEntry) myEnumerator.Current;
            Console.WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
         }
      Console.WriteLine();
   }

   // Uses the Keys property and the Item property.
   public static void PrintKeysAndValues3( ShortStringDictionary myCol )  {
      ICollection myKeys = myCol.Keys;
      foreach ( String k in myKeys )
         Console.WriteLine( "   {0,-5} : {1}", k, myCol[k] );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

using namespace System;
using namespace System::Collections;

public ref class ShortStringDictionary: public DictionaryBase
{
public:

   property String^ Item [String^]
   {
      String^ get( String^ key )
      {
         return (dynamic_cast<String^>(Dictionary[ key ]));
      }

      void set( String^ value, String^ key )
      {
         Dictionary[ key ] = value;
      }
   }

   property ICollection^ Keys
   {
      ICollection^ get()
      {
         return (Dictionary->Keys);
      }
   }

   property ICollection^ Values
   {
      ICollection^ get()
      {
         return (Dictionary->Values);
      }
   }
   void Add( String^ key, String^ value )
   {
      Dictionary->Add( key, value );
   }

   bool Contains( String^ key )
   {
      return (Dictionary->Contains( key ));
   }

   void Remove( String^ key )
   {
      Dictionary->Remove( key );
   }

protected:
   virtual void OnInsert( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

   virtual void OnRemove( Object^ key, Object^ /*value*/ ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }
   }

   virtual void OnSet( Object^ key, Object^ /*oldValue*/, Object^ newValue ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( newValue->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "newValue must be of type String.","newValue" );
      else
      {
         String^ strValue = dynamic_cast<String^>(newValue);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "newValue must be no more than 5 characters in length.","newValue" );
      }
   }

   virtual void OnValidate( Object^ key, Object^ value ) override
   {
      if ( key->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "key must be of type String.","key" );
      else
      {
         String^ strKey = dynamic_cast<String^>(key);
         if ( strKey->Length > 5 )
                  throw gcnew ArgumentException( "key must be no more than 5 characters in length.","key" );
      }

      if ( value->GetType() != Type::GetType( "System.String" ) )
            throw gcnew ArgumentException( "value must be of type String.","value" );
      else
      {
         String^ strValue = dynamic_cast<String^>(value);
         if ( strValue->Length > 5 )
                  throw gcnew ArgumentException( "value must be no more than 5 characters in length.","value" );
      }
   }

};

void PrintKeysAndValues2( ShortStringDictionary^ myCol );
void PrintKeysAndValues3( ShortStringDictionary^ myCol );
int main()
{
   // Creates and initializes a new DictionaryBase.
   ShortStringDictionary^ mySSC = gcnew ShortStringDictionary;

   // Adds elements to the collection.
   mySSC->Add( "One", "a" );
   mySSC->Add( "Two", "ab" );
   mySSC->Add( "Three", "abc" );
   mySSC->Add( "Four", "abcd" );
   mySSC->Add( "Five", "abcde" );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintKeysAndValues2( mySSC );

   // Display the contents of the collection using the Keys property and the Item property.
   Console::WriteLine( "Initial contents of the collection (using Keys and Item):" );
   PrintKeysAndValues3( mySSC );

   // Tries to add a value that is too long.
   try
   {
      mySSC->Add( "Ten", "abcdefghij" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   // Tries to add a key that is too long.
   try
   {
      mySSC->Add( "Eleven", "ijk" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   Console::WriteLine();

   // Searches the collection with Contains.
   Console::WriteLine( "Contains \"Three\": {0}", mySSC->Contains( "Three" ) );
   Console::WriteLine( "Contains \"Twelve\": {0}", mySSC->Contains( "Twelve" ) );
   Console::WriteLine();

   // Removes an element from the collection.
   mySSC->Remove( "Two" );

   // Displays the contents of the collection.
   Console::WriteLine( "After removing \"Two\":" );
   PrintKeysAndValues2( mySSC );
}

// Uses the enumerator.
void PrintKeysAndValues2( ShortStringDictionary^ myCol )
{
   DictionaryEntry myDE;
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      if ( myEnumerator->Current != nullptr )
   {
      myDE =  *dynamic_cast<DictionaryEntry^>(myEnumerator->Current);
      Console::WriteLine( "   {0,-5} : {1}", myDE.Key, myDE.Value );
   }

   Console::WriteLine();
}

// Uses the Keys property and the Item property.
void PrintKeysAndValues3( ShortStringDictionary^ myCol )
{
   ICollection^ myKeys = myCol->Keys;
   IEnumerator^ myEnum1 = myKeys->GetEnumerator();
   while ( myEnum1->MoveNext() )
   {
      String^ k = safe_cast<String^>(myEnum1->Current);
      Console::WriteLine( "   {0,-5} : {1}", k, myCol->Item[ k ] );
   }

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

Initial contents of the collection (using Keys and Item):
   Three : abc
   Five  : abcde
   Two   : ab
   One   : a
   Four  : abcd

System.ArgumentException: value must be no more than 5 characters in length.
Parameter name: value
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()
System.ArgumentException: key must be no more than 5 characters in length.
Parameter name: key
   at ShortStringDictionary.OnValidate(Object key, Object value)
   at System.Collections.DictionaryBase.System.Collections.IDictionary.Add(Object key, Object value)
   at SamplesDictionaryBase.Main()

Contains "Three": True
Contains "Twelve": False

After removing "Two":
   Three : abc
   Five  : abcde
   One   : a
   Four  : abcd

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间
ICollection
Keys


DictionaryBase ..::.InnerHashtable 属性

DictionaryBase
.
.
::
.
InnerHashtable 属性
DictionaryBase 类

获取包含在 DictionaryBase 实例中的元素的列表。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected ReadOnly Property InnerHashtable As Hashtable
    Get
protected Hashtable InnerHashtable { get; }
protected:
property Hashtable^ InnerHashtable {
    Hashtable^ get ();
}
member InnerHashtable : Hashtable

属性值

类型： System.Collections Hashtable
System.Collections..::.Hashtable，表示 DictionaryBase 实例本身。

仅对 Dictionary 属性所返回的实例调用 On* 方法，而不对 InnerHashtable 属性所返回的实例调用这些方法。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DictionaryBase 类
DictionaryBase 成员
System.Collections 命名空间


DictionaryEntry 结构

DictionaryEntry 结构
成员

定义可设置或检索的字典键/值对。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure DictionaryEntry
[SerializableAttribute]
[ComVisibleAttribute(true)]
public struct DictionaryEntry
[SerializableAttribute]
[ComVisibleAttribute(true)]
public value class DictionaryEntry
[<SealedAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type DictionaryEntry =  struct end

IDictionaryEnumerator..::.Entry 方法返回此类型的实例。

C# 语言中的 foreach 语句（在 Visual C++ 中为 for each，在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 IDictionary 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual C++ 中为 for each，在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 IDictionary 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual C++ 中为 for each，在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 IDictionary 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual C++ 中为 for each，在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 IDictionary 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如：

For Each de As DictionaryEntry In openWith
    Console.WriteLine("Key = {0}, Value = {1}", _
        de.Key, de.Value)
Next de

foreach (DictionaryEntry de in openWith)
{
    Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
}

for each (DictionaryEntry de in openWith)
{
    Console::WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
}

foreach 语句是对枚举数的包装，它只允许从集合中读取，不允许写入集合。

下面的示例演示如何使用 DictionaryEntry 来循环访问 Hashtable 对象。

'A simple example for the DictionaryEntry structure.
Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Module Example

    Sub Main()

        ' Create a new hash table.
        '
        Dim openWith As New Hashtable()

        ' Add some elements to the hash table. There are no
        ' duplicate keys, but some of the values are duplicates.
        openWith.Add("txt", "notepad.exe")
        openWith.Add("bmp", "paint.exe")
        openWith.Add("dib", "paint.exe")
        openWith.Add("rtf", "wordpad.exe")

        ' When you use For Each to enumerate hash table elements,
        ' the elements are retrieved as KeyValuePair objects.
        Console.WriteLine()
        For Each de As DictionaryEntry In openWith
            Console.WriteLine("Key = {0}, Value = {1}", _
                de.Key, de.Value)
        Next de

    End Sub

End Module

' This code example produces output similar to the following:
'
'Key = rtf, Value = winword.exe
'Key = txt, Value = notepad.exe
'Key = dib, Value = paint.exe
'Key = bmp, Value = paint.exe

// A simple example for the DictionaryEntry structure.
using System;
using System.Collections;

class Example
{
    public static void Main()
    {
        // Create a new hash table.
        //
        Hashtable openWith = new Hashtable();

        // Add some elements to the hash table. There are no
        // duplicate keys, but some of the values are duplicates.
        openWith.Add("txt", "notepad.exe");
        openWith.Add("bmp", "paint.exe");
        openWith.Add("dib", "paint.exe");
        openWith.Add("rtf", "wordpad.exe");

        // When you use foreach to enumerate hash table elements,
        // the elements are retrieved as KeyValuePair objects.
        Console.WriteLine();
        foreach (DictionaryEntry de in openWith)
        {
            Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
        }
    }
}

/* This code example produces output similar to the following:

Key = rtf, Value = wordpad.exe
Key = txt, Value = notepad.exe
Key = dib, Value = paint.exe
Key = bmp, Value = paint.exe
 */

// A simple example for the DictionaryEntry structure.
using namespace System;
using namespace System::Collections;

public ref class Example
{
public:
    static void Main()
    {
        // Create a new hash table.
        //
        Hashtable^ openWith = gcnew Hashtable();

        // Add some elements to the hash table. There are no
        // duplicate keys, but some of the values are duplicates.
        openWith->Add("txt", "notepad.exe");
        openWith->Add("bmp", "paint.exe");
        openWith->Add("dib", "paint.exe");
        openWith->Add("rtf", "wordpad.exe");

        // When you use foreach to enumerate hash table elements,
        // the elements are retrieved as KeyValuePair objects.
        Console::WriteLine();
        for each (DictionaryEntry de in openWith)
        {
            Console::WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
        }
    }
};

int main()
{
    Example::Main();
}

/* This code example produces output similar to the following:

Key = rtf, Value = wordpad.exe
Key = txt, Value = notepad.exe
Key = dib, Value = paint.exe
Key = bmp, Value = paint.exe
 */
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DictionaryEntry 成员
System.Collections 命名空间
IDictionary
IDictionaryEnumerator
System.Collections.Generic KeyValuePair TKey, TValue


DictionaryEntry 成员

DictionaryEntry 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DictionaryEntry 结构

定义可设置或检索的字典键/值对。

DictionaryEntry 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DictionaryEntry 结构
System.Collections 命名空间


DictionaryEntry 构造函数

DictionaryEntry 构造函数
DictionaryEntry 结构

使用指定的键和值初始化 DictionaryEntry 类型的实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    key As Object, _
    value As Object _
)
public DictionaryEntry(
    Object key,
    Object value
)
public:
DictionaryEntry(
    Object^ key,
    Object^ value
)
new :
        key:Object *
        value:Object -> DictionaryEntry

参数

key
类型： System Object
每个键/值对中定义的对象。
value
类型： System Object
与 key 相关联的定义。
异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），并且 .NET Framework 版本为 1.0 或 1.1。

在 .NET Framework 2.0 中，key 可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DictionaryEntry 结构
DictionaryEntry 成员
System.Collections 命名空间


DictionaryEntry 方法

DictionaryEntry 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DictionaryEntry 结构

DictionaryEntry 类型公开以下成员。

名称 说明
页首

参考

DictionaryEntry 结构
System.Collections 命名空间


DictionaryEntry 属性

DictionaryEntry 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DictionaryEntry 结构

DictionaryEntry 类型公开以下成员。

名称 说明
页首

参考

DictionaryEntry 结构
System.Collections 命名空间


DictionaryEntry ..::.Key 属性

DictionaryEntry
.
.
::
.
Key 属性
DictionaryEntry 结构

获取或设置键/值对中的键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Property Key As Object
    Get
    Set
public Object Key { get; set; }
public:
property Object^ Key {
    Object^ get ();
    void set (Object^ value);
}
member Key : Object with get, set

属性值

类型： System Object
键/值对中的键。

下面的示例阐释了 Key 属性。此代码示例摘自一个为 DictionaryEntry 类提供的更大示例。 下面的示例阐释了 Key 属性。此代码示例摘自一个为 DictionaryEntry 类提供的更大示例。

Public Sub Add(ByVal key As Object, ByVal value As Object) Implements IDictionary.Add

    ' Add the new key/value pair even if this key already exists in the dictionary.
    If ItemsInUse = items.Length Then
        Throw New InvalidOperationException("The dictionary cannot hold any more items.")
    End If
    items(ItemsInUse) = New DictionaryEntry(key, value)
    ItemsInUse = ItemsInUse + 1
End Sub

public void Add(object key, object value)
{
    // Add the new key/value pair even if this key already exists in the dictionary.
    if (ItemsInUse == items.Length)
        throw new InvalidOperationException("The dictionary cannot hold any more items.");
    items[ItemsInUse++] = new DictionaryEntry(key, value);
}

public:
    virtual void Add(Object^ key, Object^ value)
    {
        // Add the new key/value pair even if this key already exists
        // in the dictionary.
        if (itemsInUse == items->Length)
        {
            throw gcnew InvalidOperationException
                ("The dictionary cannot hold any more items.");
        }
        items[itemsInUse++] = gcnew DictionaryEntry(key, value);
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DictionaryEntry 结构
DictionaryEntry 成员
System.Collections 命名空间


DictionaryEntry ..::.Value 属性

DictionaryEntry
.
.
::
.
Value 属性
DictionaryEntry 结构

获取或设置键/值对中的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Property Value As Object
    Get
    Set
public Object Value { get; set; }
public:
property Object^ Value {
    Object^ get ();
    void set (Object^ value);
}
member Value : Object with get, set

属性值

类型： System Object
键/值对中的值。

下面的示例阐释了 Value 属性。此代码示例摘自一个为 DictionaryEntry 类提供的更大示例。 下面的示例阐释了 Value 属性。此代码示例摘自一个为 DictionaryEntry 类提供的更大示例。

Public Sub Add(ByVal key As Object, ByVal value As Object) Implements IDictionary.Add

    ' Add the new key/value pair even if this key already exists in the dictionary.
    If ItemsInUse = items.Length Then
        Throw New InvalidOperationException("The dictionary cannot hold any more items.")
    End If
    items(ItemsInUse) = New DictionaryEntry(key, value)
    ItemsInUse = ItemsInUse + 1
End Sub

public void Add(object key, object value)
{
    // Add the new key/value pair even if this key already exists in the dictionary.
    if (ItemsInUse == items.Length)
        throw new InvalidOperationException("The dictionary cannot hold any more items.");
    items[ItemsInUse++] = new DictionaryEntry(key, value);
}

public:
    virtual void Add(Object^ key, Object^ value)
    {
        // Add the new key/value pair even if this key already exists
        // in the dictionary.
        if (itemsInUse == items->Length)
        {
            throw gcnew InvalidOperationException
                ("The dictionary cannot hold any more items.");
        }
        items[itemsInUse++] = gcnew DictionaryEntry(key, value);
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DictionaryEntry 结构
DictionaryEntry 成员
System.Collections 命名空间


Hashtable 类

Hashtable 类
成员

表示键/值对的集合，这些键/值对根据键的哈希代码进行组织。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class Hashtable _
    Implements IDictionary, ICollection, IEnumerable, ISerializable,  _
    IDeserializationCallback, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Hashtable : IDictionary, ICollection,
    IEnumerable, ISerializable, IDeserializationCallback, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Hashtable : IDictionary,
    ICollection, IEnumerable, ISerializable, IDeserializationCallback, ICloneable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Hashtable =
    class
        interface IDictionary
        interface ICollection
        interface IEnumerable
        interface ISerializable
        interface IDeserializationCallback
        interface ICloneable
    end

每个元素都是一个存储在 DictionaryEntry 对象中的键/值对。键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。 每个元素都是一个存储在 DictionaryEntry 对象中的键/值对。键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。

要重写 Object..::.GetHashCode 方法（或 IHashCodeProvider 接口）和 Object..::.Equals 方法（或 IComparer 接口），需要有被 Hashtable 用作键的对象。方法和接口的实现必须以相同的方式处理大小写；否则，Hashtable 的行为可能不正确。例如，创建 Hashtable 时，您必须配合使用 CaseInsensitiveHashCodeProvider 类（或任何不区分大小写的 IHashCodeProvider 实现）和 CaseInsensitiveComparer 类（或任何不区分大小写的 IComparer 实现）。 要重写 Object..::.GetHashCode 方法（或 IHashCodeProvider 接口）和 Object..::.Equals 方法（或 IComparer 接口），需要有被 Hashtable 用作键的对象。方法和接口的实现必须以相同的方式处理大小写；否则，Hashtable 的行为可能不正确。例如，创建 Hashtable 时，您必须配合使用 CaseInsensitiveHashCodeProvider 类（或任何不区分大小写的 IHashCodeProvider 实现）和 CaseInsensitiveComparer 类（或任何不区分大小写的 IComparer 实现）。 要重写 Object..::.GetHashCode 方法（或 IHashCodeProvider 接口）和 Object..::.Equals 方法（或 IComparer 接口），需要有被 Hashtable 用作键的对象。方法和接口的实现必须以相同的方式处理大小写；否则，Hashtable 的行为可能不正确。例如，创建 Hashtable 时，您必须配合使用 CaseInsensitiveHashCodeProvider 类（或任何不区分大小写的 IHashCodeProvider 实现）和 CaseInsensitiveComparer 类（或任何不区分大小写的 IComparer 实现）。

此外，如果该键存在于 Hashtable 中，那么当使用相同参数调用这些方法时，这些方法必须生成相同的结果。还有一种方式是使用具有 IEqualityComparer 参数的 Hashtable 构造函数。如果键相等性只是引用相等性，则 Object..::.GetHashCode 和 Object..::.Equals 的继承实现将满足需要。 此外，如果该键存在于 Hashtable 中，那么当使用相同参数调用这些方法时，这些方法必须生成相同的结果。还有一种方式是使用具有 IEqualityComparer 参数的 Hashtable 构造函数。如果键相等性只是引用相等性，则 Object..::.GetHashCode 和 Object..::.Equals 的继承实现将满足需要。 此外，如果该键存在于 Hashtable 中，那么当使用相同参数调用这些方法时，这些方法必须生成相同的结果。还有一种方式是使用具有 IEqualityComparer 参数的 Hashtable 构造函数。如果键相等性只是引用相等性，则 Object..::.GetHashCode 和 Object..::.Equals 的继承实现将满足需要。

只要键对象用作 Hashtable 中的键，它们就必须是永远不变的。

当把某个元素添加到 Hashtable 时，将根据键的哈希代码将该元素放入存储桶中。该键的后续查找将使用键的哈希代码只在一个特定存储桶中搜索，这将大大减少为查找一个元素所需的键比较的次数。 当把某个元素添加到 Hashtable 时，将根据键的哈希代码将该元素放入存储桶中。该键的后续查找将使用键的哈希代码只在一个特定存储桶中搜索，这将大大减少为查找一个元素所需的键比较的次数。

Hashtable 的加载因子确定元素与存储桶的最大比率。加载因子越小，平均查找速度越快，但消耗的内存也增加。默认的加载因子 1.0 通常提供速度和大小之间的最佳平衡。当创建 Hashtable 时，也可以指定其他加载因子。 Hashtable 的加载因子确定元素与存储桶的最大比率。加载因子越小，平均查找速度越快，但消耗的内存也增加。默认的加载因子 1.0 通常提供速度和大小之间的最佳平衡。当创建 Hashtable 时，也可以指定其他加载因子。 Hashtable 的加载因子确定元素与存储桶的最大比率。加载因子越小，平均查找速度越快，但消耗的内存也增加。默认的加载因子 1.0 通常提供速度和大小之间的最佳平衡。当创建 Hashtable 时，也可以指定其他加载因子。 Hashtable 的加载因子确定元素与存储桶的最大比率。加载因子越小，平均查找速度越快，但消耗的内存也增加。默认的加载因子 1.0 通常提供速度和大小之间的最佳平衡。当创建 Hashtable 时，也可以指定其他加载因子。

当向 Hashtable 添加元素时，Hashtable 的实际加载因子将增加。当实际加载因子达到指定的加载因子时，Hashtable 中存储桶的数目自动增加到大于当前 Hashtable 存储桶数两倍的最小质数。 当向 Hashtable 添加元素时，Hashtable 的实际加载因子将增加。当实际加载因子达到指定的加载因子时，Hashtable 中存储桶的数目自动增加到大于当前 Hashtable 存储桶数两倍的最小质数。

Hashtable 中的每个键对象必须提供其自己的哈希函数，可通过调用 GetHash 访问该函数。但是，可将任何实现 IHashCodeProvider 的对象传递到 Hashtable 构造函数，而且该哈希函数用于该表中的所有对象。 Hashtable 中的每个键对象必须提供其自己的哈希函数，可通过调用 GetHash 访问该函数。但是，可将任何实现 IHashCodeProvider 的对象传递到 Hashtable 构造函数，而且该哈希函数用于该表中的所有对象。

Hashtable 的容量是 Hashtable 可拥有的元素数。随着向 Hashtable 中添加元素，容量通过重新分配按需自动增加。 Hashtable 的容量是 Hashtable 可拥有的元素数。随着向 Hashtable 中添加元素，容量通过重新分配按需自动增加。

C# 语言中的 foreach 语句（在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 Hashtable 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 Hashtable 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 Hashtable 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 Hashtable 的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如：

For Each de As DictionaryEntry In myHashtable
    ' ...
Next de

foreach(DictionaryEntry de in myHashtable)
{
    // ...
}

for each(DictionaryEntry de in myHashtable)
{
    // ...
}

foreach 语句是对枚举数的包装，它只允许从集合中读取，不允许写入集合。

因为序列化和反序列化 Hashtable 的枚举数会使元素重新排序，所以不调用 Reset 方法就不能继续枚举。

说明 说明

由于键可以被继承而且它们的行为已更改，因此使用 Equals 方法进行的比较并不能保证其绝对唯一性。

下面的示例说明如何对 Hashtable 创建、初始化并执行各种函数以及如何打印出其键和值。

Imports System
Imports System.Collections

Module Example

    Sub Main()

        ' Create a new hash table.
        '
        Dim openWith As New Hashtable()

        ' Add some elements to the hash table. There are no
        ' duplicate keys, but some of the values are duplicates.
        openWith.Add("txt", "notepad.exe")
        openWith.Add("bmp", "paint.exe")
        openWith.Add("dib", "paint.exe")
        openWith.Add("rtf", "wordpad.exe")

        ' The Add method throws an exception if the new key is
        ' already in the hash table.
        Try
            openWith.Add("txt", "winword.exe")
        Catch
            Console.WriteLine("An element with Key = ""txt"" already exists.")
        End Try

        ' The Item property is the default property, so you
        ' can omit its name when accessing elements.
        Console.WriteLine("For key = ""rtf"", value = {0}.", _
            openWith("rtf"))

        ' The default Item property can be used to change the value
        ' associated with a key.
        openWith("rtf") = "winword.exe"
        Console.WriteLine("For key = ""rtf"", value = {0}.", _
            openWith("rtf"))

        ' If a key does not exist, setting the default Item property
        ' for that key adds a new key/value pair.
        openWith("doc") = "winword.exe"

        ' ContainsKey can be used to test keys before inserting
        ' them.
        If Not openWith.ContainsKey("ht") Then
            openWith.Add("ht", "hypertrm.exe")
            Console.WriteLine("Value added for key = ""ht"": {0}", _
                openWith("ht"))
        End If

        ' When you use foreach to enumerate hash table elements,
        ' the elements are retrieved as KeyValuePair objects.
        Console.WriteLine()
        For Each de As DictionaryEntry In openWith
            Console.WriteLine("Key = {0}, Value = {1}", _
                de.Key, de.Value)
        Next de

        ' To get the values alone, use the Values property.
        Dim valueColl As ICollection = openWith.Values

        ' The elements of the ValueCollection are strongly typed
        ' with the type that was specified for hash table values.
        Console.WriteLine()
        For Each s As String In valueColl
            Console.WriteLine("Value = {0}", s)
        Next s

        ' To get the keys alone, use the Keys property.
        Dim keyColl As ICollection = openWith.Keys

        ' The elements of the KeyCollection are strongly typed
        ' with the type that was specified for hash table keys.
        Console.WriteLine()
        For Each s As String In keyColl
            Console.WriteLine("Key = {0}", s)
        Next s

        ' Use the Remove method to remove a key/value pair.
        Console.WriteLine(vbLf + "Remove(""doc"")")
        openWith.Remove("doc")

        If Not openWith.ContainsKey("doc") Then
            Console.WriteLine("Key ""doc"" is not found.")
        End If

    End Sub

End Module

' This code example produces the following output:
'
'An element with Key = "txt" already exists.
'For key = "rtf", value = wordpad.exe.
'For key = "rtf", value = winword.exe.
'Value added for key = "ht": hypertrm.exe
'
'Key = dib, Value = paint.exe
'Key = txt, Value = notepad.exe
'Key = ht, Value = hypertrm.exe
'Key = bmp, Value = paint.exe
'Key = rtf, Value = winword.exe
'Key = doc, Value = winword.exe
'
'Value = paint.exe
'Value = notepad.exe
'Value = hypertrm.exe
'Value = paint.exe
'Value = winword.exe
'Value = winword.exe
'
'Key = dib
'Key = txt
'Key = ht
'Key = bmp
'Key = rtf
'Key = doc
'
'Remove("doc")
'Key "doc" is not found.

using System;
using System.Collections;

class Example
{
    public static void Main()
    {
        // Create a new hash table.
        //
        Hashtable openWith = new Hashtable();

        // Add some elements to the hash table. There are no
        // duplicate keys, but some of the values are duplicates.
        openWith.Add("txt", "notepad.exe");
        openWith.Add("bmp", "paint.exe");
        openWith.Add("dib", "paint.exe");
        openWith.Add("rtf", "wordpad.exe");

        // The Add method throws an exception if the new key is
        // already in the hash table.
        try
        {
            openWith.Add("txt", "winword.exe");
        }
        catch
        {
            Console.WriteLine("An element with Key = \"txt\" already exists.");
        }

        // The Item property is the default property, so you
        // can omit its name when accessing elements.
        Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // The default Item property can be used to change the value
        // associated with a key.
        openWith["rtf"] = "winword.exe";
        Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // If a key does not exist, setting the default Item property
        // for that key adds a new key/value pair.
        openWith["doc"] = "winword.exe";

        // ContainsKey can be used to test keys before inserting
        // them.
        if (!openWith.ContainsKey("ht"))
        {
            openWith.Add("ht", "hypertrm.exe");
            Console.WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]);
        }

        // When you use foreach to enumerate hash table elements,
        // the elements are retrieved as KeyValuePair objects.
        Console.WriteLine();
        foreach( DictionaryEntry de in openWith )
        {
            Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
        }

        // To get the values alone, use the Values property.
        ICollection valueColl = openWith.Values;

        // The elements of the ValueCollection are strongly typed
        // with the type that was specified for hash table values.
        Console.WriteLine();
        foreach( string s in valueColl )
        {
            Console.WriteLine("Value = {0}", s);
        }

        // To get the keys alone, use the Keys property.
        ICollection keyColl = openWith.Keys;

        // The elements of the KeyCollection are strongly typed
        // with the type that was specified for hash table keys.
        Console.WriteLine();
        foreach( string s in keyColl )
        {
            Console.WriteLine("Key = {0}", s);
        }

        // Use the Remove method to remove a key/value pair.
        Console.WriteLine("\nRemove(\"doc\")");
        openWith.Remove("doc");

        if (!openWith.ContainsKey("doc"))
        {
            Console.WriteLine("Key \"doc\" is not found.");
        }
    }
}

/* This code example produces the following output:

An element with Key = "txt" already exists.
For key = "rtf", value = wordpad.exe.
For key = "rtf", value = winword.exe.
Value added for key = "ht": hypertrm.exe

Key = dib, Value = paint.exe
Key = txt, Value = notepad.exe
Key = ht, Value = hypertrm.exe
Key = bmp, Value = paint.exe
Key = rtf, Value = winword.exe
Key = doc, Value = winword.exe

Value = paint.exe
Value = notepad.exe
Value = hypertrm.exe
Value = paint.exe
Value = winword.exe
Value = winword.exe

Key = dib
Key = txt
Key = ht
Key = bmp
Key = rtf
Key = doc

Remove("doc")
Key "doc" is not found.
 */

using namespace System;
using namespace System::Collections;

public ref class Example
{
public:
    static void Main()
    {
        // Create a new hash table.
        //
        Hashtable^ openWith = gcnew Hashtable();

        // Add some elements to the hash table. There are no
        // duplicate keys, but some of the values are duplicates.
        openWith->Add("txt", "notepad.exe");
        openWith->Add("bmp", "paint.exe");
        openWith->Add("dib", "paint.exe");
        openWith->Add("rtf", "wordpad.exe");

        // The Add method throws an exception if the new key is
        // already in the hash table.
        try
        {
            openWith->Add("txt", "winword.exe");
        }
        catch(...)
        {
            Console::WriteLine("An element with Key = \"txt\" already exists.");
        }

        // The Item property is the default property, so you
        // can omit its name when accessing elements.
        Console::WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // The default Item property can be used to change the value
        // associated with a key.
        openWith["rtf"] = "winword.exe";
        Console::WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // If a key does not exist, setting the default Item property
        // for that key adds a new key/value pair.
        openWith["doc"] = "winword.exe";

        // ContainsKey can be used to test keys before inserting
        // them.
        if (!openWith->ContainsKey("ht"))
        {
            openWith->Add("ht", "hypertrm.exe");
            Console::WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]);
        }

        // When you use foreach to enumerate hash table elements,
        // the elements are retrieved as KeyValuePair objects.
        Console::WriteLine();
        for each( DictionaryEntry de in openWith )
        {
            Console::WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
        }

        // To get the values alone, use the Values property.
        ICollection^ valueColl = openWith->Values;

        // The elements of the ValueCollection are strongly typed
        // with the type that was specified for hash table values.
        Console::WriteLine();
        for each( String^ s in valueColl )
        {
            Console::WriteLine("Value = {0}", s);
        }

        // To get the keys alone, use the Keys property.
        ICollection^ keyColl = openWith->Keys;

        // The elements of the KeyCollection are strongly typed
        // with the type that was specified for hash table keys.
        Console::WriteLine();
        for each( String^ s in keyColl )
        {
            Console::WriteLine("Key = {0}", s);
        }

        // Use the Remove method to remove a key/value pair.
        Console::WriteLine("\nRemove(\"doc\")");
        openWith->Remove("doc");

        if (!openWith->ContainsKey("doc"))
        {
            Console::WriteLine("Key \"doc\" is not found.");
        }
    }
};

int main()
{
    Example::Main();
}

/* This code example produces the following output:

An element with Key = "txt" already exists.
For key = "rtf", value = wordpad.exe.
For key = "rtf", value = winword.exe.
Value added for key = "ht": hypertrm.exe

Key = dib, Value = paint.exe
Key = txt, Value = notepad.exe
Key = ht, Value = hypertrm.exe
Key = bmp, Value = paint.exe
Key = rtf, Value = winword.exe
Key = doc, Value = winword.exe

Value = paint.exe
Value = notepad.exe
Value = hypertrm.exe
Value = paint.exe
Value = winword.exe
Value = winword.exe

Key = dib
Key = txt
Key = ht
Key = bmp
Key = rtf
Key = doc

Remove("doc")
Key "doc" is not found.
 */

System.Collections System.Collections..::.HashtableHashtable

Hashtable 是线程安全的，可由多个读取器线程和一个写入线程使用。多线程使用时，如果只有一个线程执行写入（更新）操作，则它是线程安全的，从而允许进行无锁定的读取（若编写器序列化为 Hashtable）。若要支持多个编写器，如果没有任何线程在读取 Hashtable 对象，则对 Hashtable 的所有操作都必须通过 Synchronized 方法返回的包装完成。 Hashtable 是线程安全的，可由多个读取器线程和一个写入线程使用。多线程使用时，如果只有一个线程执行写入（更新）操作，则它是线程安全的，从而允许进行无锁定的读取（若编写器序列化为 Hashtable）。若要支持多个编写器，如果没有任何线程在读取 Hashtable 对象，则对 Hashtable 的所有操作都必须通过 Synchronized 方法返回的包装完成。 Hashtable 是线程安全的，可由多个读取器线程和一个写入线程使用。多线程使用时，如果只有一个线程执行写入（更新）操作，则它是线程安全的，从而允许进行无锁定的读取（若编写器序列化为 Hashtable）。若要支持多个编写器，如果没有任何线程在读取 Hashtable 对象，则对 Hashtable 的所有操作都必须通过 Synchronized 方法返回的包装完成。

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 成员
System.Collections 命名空间
IDictionary
IHashCodeProvider
Object GetHashCode
Object Equals
DictionaryEntry
System.Collections.Generic Dictionary TKey, TValue
IEqualityComparer


Hashtable 成员

Hashtable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Hashtable 类

表示键/值对的集合，这些键/值对根据键的哈希代码进行组织。

Hashtable 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Hashtable 类
System.Collections 命名空间


Hashtable 构造函数

Hashtable 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Hashtable 类

初始化 Hashtable 类的新实例。

名称 说明
页首

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间


Hashtable 构造函数

Hashtable 构造函数
Hashtable 类

使用默认的初始容量、加载因子、哈希代码提供程序和比较器来初始化 Hashtable 类的新的空实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public Hashtable()
public:
Hashtable()
new : unit -> Hashtable

哈希表的容量可用于根据加载因子来计算哈希表存储桶的最佳数目。容量会根据需要自动增加。 哈希表的容量可用于根据加载因子来计算哈希表存储桶的最佳数目。容量会根据需要自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

此构造函数的运算复杂度是 O(1)。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myComparer
    Implements IEqualityComparer
    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        Return x.Equals(y)
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode

        Return obj.ToString().ToLower().GetHashCode()
    End Function

End Class

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable()
        myHT1.Add("FIRST", "Hello")
        myHT1.Add("SECOND", "World")
        myHT1.Add("THIRD", "!")

        ' Create a hash table using the specified IEqualityComparer that uses
        ' the default Object.Equals to determine equality.
        Dim myHT2 As New Hashtable(New myComparer())
        myHT2.Add("FIRST", "Hello")
        myHT2.Add("SECOND", "World")
        myHT2.Add("THIRD", "!")

        ' Create a hash table using a case-insensitive hash code provider and
        ' case-insensitive comparer based on the InvariantCulture.
        Dim myHT3 As New Hashtable( _
            CaseInsensitiveHashCodeProvider.DefaultInvariant, _
            CaseInsensitiveComparer.DefaultInvariant)
        myHT3.Add("FIRST", "Hello")
        myHT3.Add("SECOND", "World")
        myHT3.Add("THIRD", "!")

        ' Create a hash table using an IEqualityComparer that is based on
        ' the Turkish culture (tr-TR) where "I" is not the uppercase
        ' version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT4 As New Hashtable(New myCultureComparer(myCul))
        myHT4.Add("FIRST", "Hello")
        myHT4.Add("SECOND", "World")
        myHT4.Add("THIRD", "!")

        ' Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
        Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

    End Sub

End Class

'This code produces the following output.
'Results vary depending on the system's culture settings.

'first is in myHT1: False
'first is in myHT2: False
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

class myComparer : IEqualityComparer
{
    public new bool Equals(object x, object y)
    {
        return x.Equals(y);
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable();
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the default Object.Equals to determine equality.
        Hashtable myHT2 = new Hashtable(new myComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using a case-insensitive hash code provider and
        // case-insensitive comparer based on the InvariantCulture.
        Hashtable myHT3 = new Hashtable(
            CaseInsensitiveHashCodeProvider.DefaultInvariant,
            CaseInsensitiveComparer.DefaultInvariant);
        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT4 = new Hashtable(new myCultureComparer(myCul));
        myHT4.Add("FIRST", "Hello");
        myHT4.Add("SECOND", "World");
        myHT4.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));
        Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: False
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myComparer : IEqualityComparer
{
public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        return x->Equals(y);
    }

    virtual int GetHashCode(Object^ obj)
    {
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

ref class myCultureComparer : IEqualityComparer
{
private:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    virtual int GetHashCode(Object^ obj)
    {
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

int main()
{

   // Create a hash table using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable((IEqualityComparer^)nullptr);
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a hash table using the specified IEqualityComparer that uses
   // the default Object.Equals to determine equality.
   Hashtable^ myHT2 = gcnew Hashtable(gcnew myComparer());
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a hash table using a case-insensitive hash code provider and
   // case-insensitive comparer based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable(
            CaseInsensitiveHashCodeProvider::DefaultInvariant,
            CaseInsensitiveComparer::DefaultInvariant);
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a hash table using an IEqualityComparer that is based on
   // the Turkish culture (tr-TR) where "I" is not the uppercase
   // version of "i".
   CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
   Hashtable^ myHT4 = gcnew Hashtable( gcnew myCultureComparer(myCul) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hash table.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: False
first is in myHT3: True
first is in myHT4: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
Object GetHashCode
Object Equals


Hashtable 构造函数 (IDictionary)

Hashtable 构造函数 (IDictionary)
Hashtable 类

通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用默认的加载因子、哈希代码提供程序和比较器。 通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用默认的加载因子、哈希代码提供程序和比较器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    d As IDictionary _
)
public Hashtable(
    IDictionary d
)
public:
Hashtable(
    IDictionary^ d
)
new :
        d:IDictionary -> Hashtable

参数

d
类型： System.Collections IDictionary
要复制到新 Hashtable 对象的 IDictionary 对象。
异常 | 条件
ArgumentNullException | d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。 初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

新 Hashtable 的元素按枚举数循环访问 IDictionary 对象的顺序进行排序。

此构造函数的运算复杂度为 O(n)，其中 n 是 d 参数中的元素数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL)

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, New myCultureComparer())

      ' Create a hash table using an IEqualityComparer that is based on
      ' the Turkish culture (tr-TR) where "I" is not the uppercase
      ' version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, New myCultureComparer(myCul))

      ' Search for a key in each hash table.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create the dictionary.
        SortedList mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(mySL);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(mySL, new myCultureComparer());

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(mySL, new myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {
        // Create the dictionary.
        SortedList^ mySL = gcnew SortedList();
        mySL->Add("FIRST", "Hello");
        mySL->Add("SECOND", "World");
        mySL->Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable^ myHT1 = gcnew Hashtable(mySL);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable^ myHT2 = gcnew Hashtable(mySL, gcnew myCultureComparer());

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
        Hashtable^ myHT3 = gcnew Hashtable(mySL, gcnew myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console::WriteLine("first is in myHT1: {0}", myHT1->ContainsKey("first"));
        Console::WriteLine("first is in myHT2: {0}", myHT2->ContainsKey("first"));
        Console::WriteLine("first is in myHT3: {0}", myHT3->ContainsKey("first"));
    }
};

int main()
{
    SamplesHashtable::Main();
};

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IDictionary
Object GetHashCode
Object Equals


Hashtable 构造函数 (IEqualityComparer)

Hashtable 构造函数 (IEqualityComparer)
Hashtable 类

使用默认的初始容量、默认加载因子和指定的 IEqualityComparer 对象来初始化 Hashtable 类的新的空实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    equalityComparer As IEqualityComparer _
)
public Hashtable(
    IEqualityComparer equalityComparer
)
public:
Hashtable(
    IEqualityComparer^ equalityComparer
)
new :
        equalityComparer:IEqualityComparer -> Hashtable

参数

equalityComparer
类型： System.Collections IEqualityComparer
IEqualityComparer 对象，用于定义要与 Hashtable 对象一起使用的哈希代码提供程序和比较器。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。

哈希表的容量可用于根据加载因子来计算哈希表存储桶的最佳数目。容量会根据需要自动增加。 哈希表的容量可用于根据加载因子来计算哈希表存储桶的最佳数目。容量会根据需要自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 对象中用作键的那些对象。 IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 对象中用作键的那些对象。

哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

IEqualityComparer 允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

此构造函数的运算复杂度是 O(1)。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myComparer
    Implements IEqualityComparer
    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        Return x.Equals(y)
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode

        Return obj.ToString().ToLower().GetHashCode()
    End Function

End Class

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable()
        myHT1.Add("FIRST", "Hello")
        myHT1.Add("SECOND", "World")
        myHT1.Add("THIRD", "!")

        ' Create a hash table using the specified IEqualityComparer that uses
        ' the default Object.Equals to determine equality.
        Dim myHT2 As New Hashtable(New myComparer())
        myHT2.Add("FIRST", "Hello")
        myHT2.Add("SECOND", "World")
        myHT2.Add("THIRD", "!")

        ' Create a hash table using a case-insensitive hash code provider and
        ' case-insensitive comparer based on the InvariantCulture.
        Dim myHT3 As New Hashtable( _
            CaseInsensitiveHashCodeProvider.DefaultInvariant, _
            CaseInsensitiveComparer.DefaultInvariant)
        myHT3.Add("FIRST", "Hello")
        myHT3.Add("SECOND", "World")
        myHT3.Add("THIRD", "!")

        ' Create a hash table using an IEqualityComparer that is based on
        ' the Turkish culture (tr-TR) where "I" is not the uppercase
        ' version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT4 As New Hashtable(New myCultureComparer(myCul))
        myHT4.Add("FIRST", "Hello")
        myHT4.Add("SECOND", "World")
        myHT4.Add("THIRD", "!")

        ' Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
        Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

    End Sub

End Class

'This code produces the following output.
'Results vary depending on the system's culture settings.

'first is in myHT1: False
'first is in myHT2: False
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

class myComparer : IEqualityComparer
{
    public new bool Equals(object x, object y)
    {
        return x.Equals(y);
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable();
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the default Object.Equals to determine equality.
        Hashtable myHT2 = new Hashtable(new myComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using a case-insensitive hash code provider and
        // case-insensitive comparer based on the InvariantCulture.
        Hashtable myHT3 = new Hashtable(
            CaseInsensitiveHashCodeProvider.DefaultInvariant,
            CaseInsensitiveComparer.DefaultInvariant);
        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT4 = new Hashtable(new myCultureComparer(myCul));
        myHT4.Add("FIRST", "Hello");
        myHT4.Add("SECOND", "World");
        myHT4.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));
        Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: False
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myComparer : IEqualityComparer
{
public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        return x->Equals(y);
    }

    virtual int GetHashCode(Object^ obj)
    {
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

ref class myCultureComparer : IEqualityComparer
{
private:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    virtual int GetHashCode(Object^ obj)
    {
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

int main()
{

   // Create a hash table using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable((IEqualityComparer^)nullptr);
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a hash table using the specified IEqualityComparer that uses
   // the default Object.Equals to determine equality.
   Hashtable^ myHT2 = gcnew Hashtable(gcnew myComparer());
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a hash table using a case-insensitive hash code provider and
   // case-insensitive comparer based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable(
            CaseInsensitiveHashCodeProvider::DefaultInvariant,
            CaseInsensitiveComparer::DefaultInvariant);
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a hash table using an IEqualityComparer that is based on
   // the Turkish culture (tr-TR) where "I" is not the uppercase
   // version of "i".
   CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
   Hashtable^ myHT4 = gcnew Hashtable( gcnew myCultureComparer(myCul) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hash table.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: False
first is in myHT3: True
first is in myHT4: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IEqualityComparer


Hashtable 构造函数 (Int32)

Hashtable 构造函数 (Int32)
Hashtable 类

使用指定的初始容量、默认加载因子、默认哈希代码提供程序和默认比较器来初始化 Hashtable 类的新的空实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    capacity As Integer _
)
public Hashtable(
    int capacity
)
public:
Hashtable(
    int capacity
)
new :
        capacity:int -> Hashtable

参数

capacity
类型： System Int32
Hashtable 对象最初可包含的元素的近似数目。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。

如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。 如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(3)
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(3, New myCultureComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a hash table using an IEqualityComparer that is based on
      ' the Turkish culture (tr-TR) where "I" is not the uppercase
      ' version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(3, New myCultureComparer(myCul))
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Search for a key in each hash table.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(3);
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(3, new myCultureComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(3, new myCultureComparer(myCul));
        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {
        // Create a hash table using the default comparer.
        Hashtable^ myHT1 = gcnew Hashtable(3);
        myHT1->Add("FIRST", "Hello");
        myHT1->Add("SECOND", "World");
        myHT1->Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable^ myHT2 = gcnew Hashtable(3, gcnew myCultureComparer());
        myHT2->Add("FIRST", "Hello");
        myHT2->Add("SECOND", "World");
        myHT2->Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
        Hashtable^ myHT3 = gcnew Hashtable(3, gcnew myCultureComparer(myCul));
        myHT3->Add("FIRST", "Hello");
        myHT3->Add("SECOND", "World");
        myHT3->Add("THIRD", "!");

        // Search for a key in each hash table.
        Console::WriteLine("first is in myHT1: {0}", myHT1->ContainsKey("first"));
        Console::WriteLine("first is in myHT2: {0}", myHT2->ContainsKey("first"));
        Console::WriteLine("first is in myHT3: {0}", myHT3->ContainsKey("first"));

    }
};

int main()
{
    SamplesHashtable::Main();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
Object GetHashCode
Object Equals


Hashtable 构造函数 (IDictionary, IEqualityComparer)

Hashtable 构造函数 (IDictionary, IEqualityComparer)
Hashtable 类

通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用默认加载因子和指定的 IEqualityComparer 对象。 通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用默认加载因子和指定的 IEqualityComparer 对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    d As IDictionary, _
    equalityComparer As IEqualityComparer _
)
public Hashtable(
    IDictionary d,
    IEqualityComparer equalityComparer
)
public:
Hashtable(
    IDictionary^ d,
    IEqualityComparer^ equalityComparer
)
new :
        d:IDictionary *
        equalityComparer:IEqualityComparer -> Hashtable

参数

d
类型： System.Collections IDictionary
要复制到新 Hashtable 对象的 IDictionary 对象。
equalityComparer
类型： System.Collections IEqualityComparer
IEqualityComparer 对象，用于定义要用来处理 Hashtable 的哈希代码提供程序和比较器。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。
异常 | 条件
ArgumentNullException | d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。 初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 对象中用作键的那些对象。 IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 对象中用作键的那些对象。

哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

IEqualityComparer 允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

新 Hashtable 的元素按枚举数循环访问 IDictionary 对象的顺序进行排序。

此构造函数的运算复杂度为 O(n)，其中 n 是 d 参数中的元素数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL)

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, New myCultureComparer())

      ' Create a hash table using an IEqualityComparer that is based on
      ' the Turkish culture (tr-TR) where "I" is not the uppercase
      ' version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, New myCultureComparer(myCul))

      ' Search for a key in each hash table.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create the dictionary.
        SortedList mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(mySL);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(mySL, new myCultureComparer());

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(mySL, new myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {
        // Create the dictionary.
        SortedList^ mySL = gcnew SortedList();
        mySL->Add("FIRST", "Hello");
        mySL->Add("SECOND", "World");
        mySL->Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable^ myHT1 = gcnew Hashtable(mySL);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable^ myHT2 = gcnew Hashtable(mySL, gcnew myCultureComparer());

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
        Hashtable^ myHT3 = gcnew Hashtable(mySL, gcnew myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console::WriteLine("first is in myHT1: {0}", myHT1->ContainsKey("first"));
        Console::WriteLine("first is in myHT2: {0}", myHT2->ContainsKey("first"));
        Console::WriteLine("first is in myHT3: {0}", myHT3->ContainsKey("first"));
    }
};

int main()
{
    SamplesHashtable::Main();
};

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IDictionary
IEqualityComparer


Hashtable 构造函数 (IDictionary, Single)

Hashtable 构造函数 (IDictionary, Single)
Hashtable 类

通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用指定的加载因子、默认哈希代码提供程序和默认比较器。 通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用指定的加载因子、默认哈希代码提供程序和默认比较器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    d As IDictionary, _
    loadFactor As Single _
)
public Hashtable(
    IDictionary d,
    float loadFactor
)
public:
Hashtable(
    IDictionary^ d,
    float loadFactor
)
new :
        d:IDictionary *
        loadFactor:float32 -> Hashtable

参数

d
类型： System.Collections IDictionary
要复制到新 Hashtable 对象的 IDictionary 对象。
loadFactor
类型： System Single
0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。 0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。
异常 | 条件
ArgumentNullException | d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | loadFactor 小于 0.1。 - 或 - loadFactor 大于 1.0。

初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。 初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

新 Hashtable 的元素按枚举数循环访问 IDictionary 对象的顺序进行排序。

此构造函数的运算复杂度为 O(n)，其中 n 是 d 参数中的元素数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL, System.Convert.ToSingle(0.8))

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer())

      ' Create a hash table using an IEqualityComparer that is based on
      ' the Turkish culture (tr-TR) where "I" is not the uppercase
      ' version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer(myCul))

      ' Search for a key in each hash table.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create the dictionary.
        SortedList mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(mySL, (float).8);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(mySL, (float).8,
            new myCultureComparer());

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(mySL, (float).8,
            new myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {

       // Create the dictionary.
       SortedList^ mySL = gcnew SortedList;
       mySL->Add( "FIRST", "Hello" );
       mySL->Add( "SECOND", "World" );
       mySL->Add( "THIRD", "!" );

       // Create a hash table using the default hash code provider and the default comparer.
       Hashtable^ myHT1 = gcnew Hashtable( mySL,(float).8 );

       // Create a hash table using the specified case-insensitive hash code provider and case-insensitive comparer.
       Hashtable^ myHT2 = gcnew Hashtable( mySL,(float).8,gcnew myCultureComparer() );

       // Create a hash table using the specified KeyComparer.
       // The KeyComparer uses a case-insensitive hash code provider and a case-insensitive comparer,
       // which are based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
       CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
       Hashtable^ myHT3 = gcnew Hashtable( mySL,(float).8, gcnew myCultureComparer( myCul ) );

       // Search for a key in each hash table.
       Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
       Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
       Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
    }
};

int main()
{
    SamplesHashtable::Main();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IDictionary
Object GetHashCode
Object Equals


Hashtable 构造函数 (IHashCodeProvider, IComparer)

Hashtable 构造函数 (IHashCodeProvider, IComparer)
Hashtable 类

注意：此 API 现在已过时。

使用默认初始容量、默认加载因子、指定的哈希代码提供程序和指定的比较器来初始化 Hashtable 类的新的空实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Please use Hashtable(IEqualityComparer) instead.")> _
Public Sub New ( _
    hcp As IHashCodeProvider, _
    comparer As IComparer _
)
[ObsoleteAttribute("Please use Hashtable(IEqualityComparer) instead.")]
public Hashtable(
    IHashCodeProvider hcp,
    IComparer comparer
)
[ObsoleteAttribute(L"Please use Hashtable(IEqualityComparer) instead.")]
public:
Hashtable(
    IHashCodeProvider^ hcp,
    IComparer^ comparer
)
[<ObsoleteAttribute("Please use Hashtable(IEqualityComparer) instead.")>]
new :
        hcp:IHashCodeProvider *
        comparer:IComparer -> Hashtable

参数

hcp
类型： System.Collections IHashCodeProvider
IHashCodeProvider 对象，用于为 Hashtable 对象中的所有键提供哈希代码。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认哈希代码提供程序，该提供程序是每一个键的 Object..::.GetHashCode 实现。
comparer
类型： System.Collections IComparer
IComparer 对象，用于确定两个键是否相等。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认比较器，该比较器是每一个键的 Object..::.Equals 实现。

哈希表的容量可用于根据加载因子来计算哈希表存储桶的最佳数目。容量会根据需要自动增加。 哈希表的容量可用于根据加载因子来计算哈希表存储桶的最佳数目。容量会根据需要自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

自定义哈希代码提供程序和自定义比较器允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

此构造函数的运算复杂度是 O(1)。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myComparer
    Implements IEqualityComparer
    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        Return x.Equals(y)
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode

        Return obj.ToString().ToLower().GetHashCode()
    End Function

End Class

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable()
        myHT1.Add("FIRST", "Hello")
        myHT1.Add("SECOND", "World")
        myHT1.Add("THIRD", "!")

        ' Create a hash table using the specified IEqualityComparer that uses
        ' the default Object.Equals to determine equality.
        Dim myHT2 As New Hashtable(New myComparer())
        myHT2.Add("FIRST", "Hello")
        myHT2.Add("SECOND", "World")
        myHT2.Add("THIRD", "!")

        ' Create a hash table using a case-insensitive hash code provider and
        ' case-insensitive comparer based on the InvariantCulture.
        Dim myHT3 As New Hashtable( _
            CaseInsensitiveHashCodeProvider.DefaultInvariant, _
            CaseInsensitiveComparer.DefaultInvariant)
        myHT3.Add("FIRST", "Hello")
        myHT3.Add("SECOND", "World")
        myHT3.Add("THIRD", "!")

        ' Create a hash table using an IEqualityComparer that is based on
        ' the Turkish culture (tr-TR) where "I" is not the uppercase
        ' version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT4 As New Hashtable(New myCultureComparer(myCul))
        myHT4.Add("FIRST", "Hello")
        myHT4.Add("SECOND", "World")
        myHT4.Add("THIRD", "!")

        ' Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))
        Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"))

    End Sub

End Class

'This code produces the following output.
'Results vary depending on the system's culture settings.

'first is in myHT1: False
'first is in myHT2: False
'first is in myHT3: True
'first is in myHT4: False

using System;
using System.Collections;
using System.Globalization;

class myComparer : IEqualityComparer
{
    public new bool Equals(object x, object y)
    {
        return x.Equals(y);
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable();
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the default Object.Equals to determine equality.
        Hashtable myHT2 = new Hashtable(new myComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using a case-insensitive hash code provider and
        // case-insensitive comparer based on the InvariantCulture.
        Hashtable myHT3 = new Hashtable(
            CaseInsensitiveHashCodeProvider.DefaultInvariant,
            CaseInsensitiveComparer.DefaultInvariant);
        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT4 = new Hashtable(new myCultureComparer(myCul));
        myHT4.Add("FIRST", "Hello");
        myHT4.Add("SECOND", "World");
        myHT4.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));
        Console.WriteLine("first is in myHT4: {0}", myHT4.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: False
first is in myHT3: True
first is in myHT4: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myComparer : IEqualityComparer
{
public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        return x->Equals(y);
    }

    virtual int GetHashCode(Object^ obj)
    {
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

ref class myCultureComparer : IEqualityComparer
{
private:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    virtual int GetHashCode(Object^ obj)
    {
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

int main()
{

   // Create a hash table using the default hash code provider and the default comparer.
   Hashtable^ myHT1 = gcnew Hashtable((IEqualityComparer^)nullptr);
   myHT1->Add( "FIRST", "Hello" );
   myHT1->Add( "SECOND", "World" );
   myHT1->Add( "THIRD", "!" );

   // Create a hash table using the specified IEqualityComparer that uses
   // the default Object.Equals to determine equality.
   Hashtable^ myHT2 = gcnew Hashtable(gcnew myComparer());
   myHT2->Add( "FIRST", "Hello" );
   myHT2->Add( "SECOND", "World" );
   myHT2->Add( "THIRD", "!" );

   // Create a hash table using a case-insensitive hash code provider and
   // case-insensitive comparer based on the InvariantCulture.
   Hashtable^ myHT3 = gcnew Hashtable(
            CaseInsensitiveHashCodeProvider::DefaultInvariant,
            CaseInsensitiveComparer::DefaultInvariant);
   myHT3->Add( "FIRST", "Hello" );
   myHT3->Add( "SECOND", "World" );
   myHT3->Add( "THIRD", "!" );

   // Create a hash table using an IEqualityComparer that is based on
   // the Turkish culture (tr-TR) where "I" is not the uppercase
   // version of "i".
   CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
   Hashtable^ myHT4 = gcnew Hashtable( gcnew myCultureComparer(myCul) );
   myHT4->Add( "FIRST", "Hello" );
   myHT4->Add( "SECOND", "World" );
   myHT4->Add( "THIRD", "!" );

   // Search for a key in each hash table.
   Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
   Console::WriteLine( "first is in myHT4: {0}", myHT4->ContainsKey( "first" ) );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: False
first is in myHT3: True
first is in myHT4: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IHashCodeProvider
IComparer
Object GetHashCode
Object Equals


Hashtable 构造函数 (Int32, IEqualityComparer)

Hashtable 构造函数 (Int32, IEqualityComparer)
Hashtable 类

使用指定的初始容量和 IEqualityComparer 以及默认的加载因子来初始化 Hashtable 类的新的空实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    capacity As Integer, _
    equalityComparer As IEqualityComparer _
)
public Hashtable(
    int capacity,
    IEqualityComparer equalityComparer
)
public:
Hashtable(
    int capacity,
    IEqualityComparer^ equalityComparer
)
new :
        capacity:int *
        equalityComparer:IEqualityComparer -> Hashtable

参数

capacity
类型： System Int32
Hashtable 对象最初可包含的元素的近似数目。
equalityComparer
类型： System.Collections IEqualityComparer
IEqualityComparer 对象，用于定义要用来处理 Hashtable 的哈希代码提供程序和比较器。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。

如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。 如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 中用作键的那些对象。 IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 中用作键的那些对象。

哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

IEqualityComparer 允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity 参数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(3)
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(3, New myCultureComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a hash table using an IEqualityComparer that is based on
      ' the Turkish culture (tr-TR) where "I" is not the uppercase
      ' version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(3, New myCultureComparer(myCul))
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Search for a key in each hash table.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(3);
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(3, new myCultureComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(3, new myCultureComparer(myCul));
        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {
        // Create a hash table using the default comparer.
        Hashtable^ myHT1 = gcnew Hashtable(3);
        myHT1->Add("FIRST", "Hello");
        myHT1->Add("SECOND", "World");
        myHT1->Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable^ myHT2 = gcnew Hashtable(3, gcnew myCultureComparer());
        myHT2->Add("FIRST", "Hello");
        myHT2->Add("SECOND", "World");
        myHT2->Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
        Hashtable^ myHT3 = gcnew Hashtable(3, gcnew myCultureComparer(myCul));
        myHT3->Add("FIRST", "Hello");
        myHT3->Add("SECOND", "World");
        myHT3->Add("THIRD", "!");

        // Search for a key in each hash table.
        Console::WriteLine("first is in myHT1: {0}", myHT1->ContainsKey("first"));
        Console::WriteLine("first is in myHT2: {0}", myHT2->ContainsKey("first"));
        Console::WriteLine("first is in myHT3: {0}", myHT3->ContainsKey("first"));

    }
};

int main()
{
    SamplesHashtable::Main();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IEqualityComparer


Hashtable 构造函数 (Int32, Single)

Hashtable 构造函数 (Int32, Single)
Hashtable 类

使用指定的初始容量、指定的加载因子、默认的哈希代码提供程序和默认比较器来初始化 Hashtable 类的新的空实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    capacity As Integer, _
    loadFactor As Single _
)
public Hashtable(
    int capacity,
    float loadFactor
)
public:
Hashtable(
    int capacity,
    float loadFactor
)
new :
        capacity:int *
        loadFactor:float32 -> Hashtable

参数

capacity
类型： System Int32
Hashtable 对象最初可包含的元素的近似数目。
loadFactor
类型： System Single
0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。 0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。 - 或 - loadFactor 小于 0.1。 - 或 - loadFactor 大于 1.0。
ArgumentException | capacity 导致溢出。

如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。 如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity 参数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable(3, System.Convert.ToSingle(0.8))
        myHT1.Add("FIRST", "Hello")
        myHT1.Add("SECOND", "World")
        myHT1.Add("THIRD", "!")

        ' Create a hash table using the specified IEqualityComparer that uses
        ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Dim myHT2 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            New myCultureComparer())

        myHT2.Add("FIRST", "Hello")
        myHT2.Add("SECOND", "World")
        myHT2.Add("THIRD", "!")

        ' Create a hash table using an IEqualityComparer that is based on
        ' the Turkish culture (tr-TR) where "I" is not the uppercase
        ' version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT3 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            New myCultureComparer(myCul))

        myHT3.Add("FIRST", "Hello")
        myHT3.Add("SECOND", "World")
        myHT3.Add("THIRD", "!")

        ' Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

    End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(3, (float).8);
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(3, (float).8, new myCultureComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(3, (float).8,
            new myCultureComparer(myCul));

        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {
        // Create a hash table using the default comparer.
        Hashtable^ myHT1 = gcnew Hashtable(3, (float).8);
        myHT1->Add("FIRST", "Hello");
        myHT1->Add("SECOND", "World");
        myHT1->Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable^ myHT2 = gcnew Hashtable(3, (float).8, gcnew myCultureComparer());
        myHT2->Add("FIRST", "Hello");
        myHT2->Add("SECOND", "World");
        myHT2->Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
        Hashtable^ myHT3 = gcnew Hashtable(3, (float).8, gcnew myCultureComparer(myCul));
        myHT3->Add("FIRST", "Hello");
        myHT3->Add("SECOND", "World");
        myHT3->Add("THIRD", "!");

        // Search for a key in each hash table.
        Console::WriteLine("first is in myHT1: {0}", myHT1->ContainsKey("first"));
        Console::WriteLine("first is in myHT2: {0}", myHT2->ContainsKey("first"));
        Console::WriteLine("first is in myHT3: {0}", myHT3->ContainsKey("first"));

    }
};

int main()
{
    SamplesHashtable::Main();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
Object GetHashCode
Object Equals


Hashtable 构造函数 (SerializationInfo, StreamingContext)

Hashtable 构造函数 (SerializationInfo, StreamingContext)
Hashtable 类

初始化 Hashtable 类的新的空实例，该实例可序列化且使用指定的 SerializationInfo 和 StreamingContext。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected Hashtable(
    SerializationInfo info,
    StreamingContext context
)
protected:
Hashtable(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> Hashtable

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo 对象，包含序列化 Hashtable 所需的信息。
context
类型： System.Runtime.Serialization StreamingContext
一个 StreamingContext 对象，它包含与 Hashtable 相关联的序列化流的源和目标。
异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

哈希表的容量可用于根据加载因子来计算哈希表存储桶的最佳数目。容量会根据需要自动增加。 哈希表的容量可用于根据加载因子来计算哈希表存储桶的最佳数目。容量会根据需要自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

此构造函数的运算复杂度为 O(n)，其中 n 是 Count。

因为序列化和反序列化 Hashtable 的枚举数会使元素重新排序，所以不调用 Reset 方法就不能继续枚举。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
ISerializable
SerializationInfo
StreamingContext
OnDeserialization
Object GetHashCode
Object Equals


Hashtable 构造函数 (IDictionary, IHashCodeProvider, IComparer)

Hashtable 构造函数 (IDictionary, IHashCodeProvider, IComparer)
Hashtable 类

注意：此 API 现在已过时。

通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用默认的加载因子、指定的哈希代码提供程序和指定的比较器。 通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用默认的加载因子、指定的哈希代码提供程序和指定的比较器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Please use Hashtable(IDictionary, IEqualityComparer) instead.")> _
Public Sub New ( _
    d As IDictionary, _
    hcp As IHashCodeProvider, _
    comparer As IComparer _
)
[ObsoleteAttribute("Please use Hashtable(IDictionary, IEqualityComparer) instead.")]
public Hashtable(
    IDictionary d,
    IHashCodeProvider hcp,
    IComparer comparer
)
[ObsoleteAttribute(L"Please use Hashtable(IDictionary, IEqualityComparer) instead.")]
public:
Hashtable(
    IDictionary^ d,
    IHashCodeProvider^ hcp,
    IComparer^ comparer
)
[<ObsoleteAttribute("Please use Hashtable(IDictionary, IEqualityComparer) instead.")>]
new :
        d:IDictionary *
        hcp:IHashCodeProvider *
        comparer:IComparer -> Hashtable

参数

d
类型： System.Collections IDictionary
要复制到新 Hashtable 对象的 IDictionary 对象。
hcp
类型： System.Collections IHashCodeProvider
IHashCodeProvider 对象，用于为 Hashtable 中的所有键提供哈希代码。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认哈希代码提供程序，该提供程序是每一个键的 Object..::.GetHashCode 实现。
comparer
类型： System.Collections IComparer
IComparer 对象，用于确定两个键是否相等。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认比较器，该比较器是每一个键的 Object..::.Equals 实现。
异常 | 条件
ArgumentNullException | d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。 初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

自定义哈希代码提供程序和自定义比较器允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

新 Hashtable 的元素按枚举数循环访问 IDictionary 对象的顺序进行排序。

此构造函数的运算复杂度为 O(n)，其中 n 是 d 参数中的元素数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL)

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, New myCultureComparer())

      ' Create a hash table using an IEqualityComparer that is based on
      ' the Turkish culture (tr-TR) where "I" is not the uppercase
      ' version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, New myCultureComparer(myCul))

      ' Search for a key in each hash table.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create the dictionary.
        SortedList mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(mySL);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(mySL, new myCultureComparer());

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(mySL, new myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {
        // Create the dictionary.
        SortedList^ mySL = gcnew SortedList();
        mySL->Add("FIRST", "Hello");
        mySL->Add("SECOND", "World");
        mySL->Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable^ myHT1 = gcnew Hashtable(mySL);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable^ myHT2 = gcnew Hashtable(mySL, gcnew myCultureComparer());

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
        Hashtable^ myHT3 = gcnew Hashtable(mySL, gcnew myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console::WriteLine("first is in myHT1: {0}", myHT1->ContainsKey("first"));
        Console::WriteLine("first is in myHT2: {0}", myHT2->ContainsKey("first"));
        Console::WriteLine("first is in myHT3: {0}", myHT3->ContainsKey("first"));
    }
};

int main()
{
    SamplesHashtable::Main();
};

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IDictionary
IHashCodeProvider
IComparer
Object GetHashCode
Object Equals


Hashtable 构造函数 (IDictionary, Single, IEqualityComparer)

Hashtable 构造函数 (IDictionary, Single, IEqualityComparer)
Hashtable 类

通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用指定的加载因子和 IEqualityComparer 对象。 通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用指定的加载因子和 IEqualityComparer 对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    d As IDictionary, _
    loadFactor As Single, _
    equalityComparer As IEqualityComparer _
)
public Hashtable(
    IDictionary d,
    float loadFactor,
    IEqualityComparer equalityComparer
)
public:
Hashtable(
    IDictionary^ d,
    float loadFactor,
    IEqualityComparer^ equalityComparer
)
new :
        d:IDictionary *
        loadFactor:float32 *
        equalityComparer:IEqualityComparer -> Hashtable

参数

d
类型： System.Collections IDictionary
要复制到新 Hashtable 对象的 IDictionary 对象。
loadFactor
类型： System Single
0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。 0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。
equalityComparer
类型： System.Collections IEqualityComparer
IEqualityComparer 对象，用于定义要用来处理 Hashtable 的哈希代码提供程序和比较器。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。
异常 | 条件
ArgumentNullException | d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | loadFactor 小于 0.1。 - 或 - loadFactor 大于 1.0。

初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。 初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 对象中用作键的那些对象。 IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 对象中用作键的那些对象。

哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

IEqualityComparer 允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

新 Hashtable 的元素按枚举数循环访问 IDictionary 对象的顺序进行排序。

此构造函数的运算复杂度为 O(n)，其中 n 是 d 参数中的元素数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL, System.Convert.ToSingle(0.8))

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer())

      ' Create a hash table using an IEqualityComparer that is based on
      ' the Turkish culture (tr-TR) where "I" is not the uppercase
      ' version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer(myCul))

      ' Search for a key in each hash table.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create the dictionary.
        SortedList mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(mySL, (float).8);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(mySL, (float).8,
            new myCultureComparer());

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(mySL, (float).8,
            new myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {

       // Create the dictionary.
       SortedList^ mySL = gcnew SortedList;
       mySL->Add( "FIRST", "Hello" );
       mySL->Add( "SECOND", "World" );
       mySL->Add( "THIRD", "!" );

       // Create a hash table using the default hash code provider and the default comparer.
       Hashtable^ myHT1 = gcnew Hashtable( mySL,(float).8 );

       // Create a hash table using the specified case-insensitive hash code provider and case-insensitive comparer.
       Hashtable^ myHT2 = gcnew Hashtable( mySL,(float).8,gcnew myCultureComparer() );

       // Create a hash table using the specified KeyComparer.
       // The KeyComparer uses a case-insensitive hash code provider and a case-insensitive comparer,
       // which are based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
       CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
       Hashtable^ myHT3 = gcnew Hashtable( mySL,(float).8, gcnew myCultureComparer( myCul ) );

       // Search for a key in each hash table.
       Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
       Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
       Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
    }
};

int main()
{
    SamplesHashtable::Main();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IEqualityComparer


Hashtable 构造函数 (Int32, IHashCodeProvider, IComparer)

Hashtable 构造函数 (Int32, IHashCodeProvider, IComparer)
Hashtable 类

注意：此 API 现在已过时。

使用指定的初始容量、哈希代码提供程序、比较器和默认加载因子来初始化 Hashtable 类的新的空实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Please use Hashtable(int, IEqualityComparer) instead.")> _
Public Sub New ( _
    capacity As Integer, _
    hcp As IHashCodeProvider, _
    comparer As IComparer _
)
[ObsoleteAttribute("Please use Hashtable(int, IEqualityComparer) instead.")]
public Hashtable(
    int capacity,
    IHashCodeProvider hcp,
    IComparer comparer
)
[ObsoleteAttribute(L"Please use Hashtable(int, IEqualityComparer) instead.")]
public:
Hashtable(
    int capacity,
    IHashCodeProvider^ hcp,
    IComparer^ comparer
)
[<ObsoleteAttribute("Please use Hashtable(int, IEqualityComparer) instead.")>]
new :
        capacity:int *
        hcp:IHashCodeProvider *
        comparer:IComparer -> Hashtable

参数

capacity
类型： System Int32
Hashtable 对象最初可包含的元素的近似数目。
hcp
类型： System.Collections IHashCodeProvider
IHashCodeProvider 对象，用于为 Hashtable 中的所有键提供哈希代码。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认哈希代码提供程序，该提供程序是每一个键的 Object..::.GetHashCode 实现。
comparer
类型： System.Collections IComparer
IComparer 对象，用于确定两个键是否相等。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认比较器，该比较器是每一个键的 Object..::.Equals 实现。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。

如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。 如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

自定义哈希代码提供程序和自定义比较器允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity 参数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(3)
      myHT1.Add("FIRST", "Hello")
      myHT1.Add("SECOND", "World")
      myHT1.Add("THIRD", "!")

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(3, New myCultureComparer())
      myHT2.Add("FIRST", "Hello")
      myHT2.Add("SECOND", "World")
      myHT2.Add("THIRD", "!")

      ' Create a hash table using an IEqualityComparer that is based on
      ' the Turkish culture (tr-TR) where "I" is not the uppercase
      ' version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(3, New myCultureComparer(myCul))
      myHT3.Add("FIRST", "Hello")
      myHT3.Add("SECOND", "World")
      myHT3.Add("THIRD", "!")

      ' Search for a key in each hash table.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(3);
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(3, new myCultureComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(3, new myCultureComparer(myCul));
        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {
        // Create a hash table using the default comparer.
        Hashtable^ myHT1 = gcnew Hashtable(3);
        myHT1->Add("FIRST", "Hello");
        myHT1->Add("SECOND", "World");
        myHT1->Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable^ myHT2 = gcnew Hashtable(3, gcnew myCultureComparer());
        myHT2->Add("FIRST", "Hello");
        myHT2->Add("SECOND", "World");
        myHT2->Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
        Hashtable^ myHT3 = gcnew Hashtable(3, gcnew myCultureComparer(myCul));
        myHT3->Add("FIRST", "Hello");
        myHT3->Add("SECOND", "World");
        myHT3->Add("THIRD", "!");

        // Search for a key in each hash table.
        Console::WriteLine("first is in myHT1: {0}", myHT1->ContainsKey("first"));
        Console::WriteLine("first is in myHT2: {0}", myHT2->ContainsKey("first"));
        Console::WriteLine("first is in myHT3: {0}", myHT3->ContainsKey("first"));

    }
};

int main()
{
    SamplesHashtable::Main();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IHashCodeProvider
IComparer
Object GetHashCode
Object Equals


Hashtable 构造函数 (Int32, Single, IEqualityComparer)

Hashtable 构造函数 (Int32, Single, IEqualityComparer)
Hashtable 类

使用指定的初始容量、加载因子和 IEqualityComparer 对象来初始化 Hashtable 类的新的空实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    capacity As Integer, _
    loadFactor As Single, _
    equalityComparer As IEqualityComparer _
)
public Hashtable(
    int capacity,
    float loadFactor,
    IEqualityComparer equalityComparer
)
public:
Hashtable(
    int capacity,
    float loadFactor,
    IEqualityComparer^ equalityComparer
)
new :
        capacity:int *
        loadFactor:float32 *
        equalityComparer:IEqualityComparer -> Hashtable

参数

capacity
类型： System Int32
Hashtable 对象最初可包含的元素的近似数目。
loadFactor
类型： System Single
0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。 0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。
equalityComparer
类型： System.Collections IEqualityComparer
IEqualityComparer 对象，用于定义要用来处理 Hashtable 的哈希代码提供程序和比较器。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则使用默认哈希代码提供程序和默认比较器。默认哈希代码提供程序是各个键的 Object..::.GetHashCode 实现，而默认比较器是各个键的 Object..::.Equals 实现。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。 - 或 - loadFactor 小于 0.1。 - 或 - loadFactor 大于 1.0。

如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。 如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 中用作键的那些对象。 IEqualityComparer 对象既包含哈希代码提供程序又包含比较器。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 中用作键的那些对象。

哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

IEqualityComparer 允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity 参数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable(3, System.Convert.ToSingle(0.8))
        myHT1.Add("FIRST", "Hello")
        myHT1.Add("SECOND", "World")
        myHT1.Add("THIRD", "!")

        ' Create a hash table using the specified IEqualityComparer that uses
        ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Dim myHT2 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            New myCultureComparer())

        myHT2.Add("FIRST", "Hello")
        myHT2.Add("SECOND", "World")
        myHT2.Add("THIRD", "!")

        ' Create a hash table using an IEqualityComparer that is based on
        ' the Turkish culture (tr-TR) where "I" is not the uppercase
        ' version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT3 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            New myCultureComparer(myCul))

        myHT3.Add("FIRST", "Hello")
        myHT3.Add("SECOND", "World")
        myHT3.Add("THIRD", "!")

        ' Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

    End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(3, (float).8);
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(3, (float).8, new myCultureComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(3, (float).8,
            new myCultureComparer(myCul));

        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {
        // Create a hash table using the default comparer.
        Hashtable^ myHT1 = gcnew Hashtable(3, (float).8);
        myHT1->Add("FIRST", "Hello");
        myHT1->Add("SECOND", "World");
        myHT1->Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable^ myHT2 = gcnew Hashtable(3, (float).8, gcnew myCultureComparer());
        myHT2->Add("FIRST", "Hello");
        myHT2->Add("SECOND", "World");
        myHT2->Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
        Hashtable^ myHT3 = gcnew Hashtable(3, (float).8, gcnew myCultureComparer(myCul));
        myHT3->Add("FIRST", "Hello");
        myHT3->Add("SECOND", "World");
        myHT3->Add("THIRD", "!");

        // Search for a key in each hash table.
        Console::WriteLine("first is in myHT1: {0}", myHT1->ContainsKey("first"));
        Console::WriteLine("first is in myHT2: {0}", myHT2->ContainsKey("first"));
        Console::WriteLine("first is in myHT3: {0}", myHT3->ContainsKey("first"));

    }
};

int main()
{
    SamplesHashtable::Main();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IEqualityComparer


Hashtable 构造函数 (IDictionary, Single, IHashCodeProvider, IComparer)

Hashtable 构造函数 (IDictionary, Single, IHashCodeProvider, IComparer)
Hashtable 类

注意：此 API 现在已过时。

通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用指定的加载因子、哈希代码提供程序和比较器。 通过将指定字典中的元素复制到新的 Hashtable 对象中，初始化 Hashtable 类的一个新实例。新 Hashtable 对象的初始容量等于复制的元素数，并且使用指定的加载因子、哈希代码提供程序和比较器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")> _
Public Sub New ( _
    d As IDictionary, _
    loadFactor As Single, _
    hcp As IHashCodeProvider, _
    comparer As IComparer _
)
[ObsoleteAttribute("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")]
public Hashtable(
    IDictionary d,
    float loadFactor,
    IHashCodeProvider hcp,
    IComparer comparer
)
[ObsoleteAttribute(L"Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")]
public:
Hashtable(
    IDictionary^ d,
    float loadFactor,
    IHashCodeProvider^ hcp,
    IComparer^ comparer
)
[<ObsoleteAttribute("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")>]
new :
        d:IDictionary *
        loadFactor:float32 *
        hcp:IHashCodeProvider *
        comparer:IComparer -> Hashtable

参数

d
类型： System.Collections IDictionary
要复制到新 Hashtable 对象的 IDictionary 对象。
loadFactor
类型： System Single
0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。 0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。
hcp
类型： System.Collections IHashCodeProvider
IHashCodeProvider 对象，用于为 Hashtable 中的所有键提供哈希代码。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认哈希代码提供程序，该提供程序是每一个键的 Object..::.GetHashCode 实现。
comparer
类型： System.Collections IComparer
IComparer 对象，用于确定两个键是否相等。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认比较器，该比较器是每一个键的 Object..::.Equals 实现。
异常 | 条件
ArgumentNullException | d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | loadFactor 小于 0.1。 - 或 - loadFactor 大于 1.0。

初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。 初始容量设置为源字典中元素的数目。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 对象中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

自定义哈希代码提供程序和自定义比较器允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

新 Hashtable 的元素按枚举数循环访问 IDictionary 对象的顺序进行排序。

此构造函数的运算复杂度为 O(n)，其中 n 是 d 参数中的元素数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL, System.Convert.ToSingle(0.8))

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer())

      ' Create a hash table using an IEqualityComparer that is based on
      ' the Turkish culture (tr-TR) where "I" is not the uppercase
      ' version of "i".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer(myCul))

      ' Search for a key in each hash table.
      Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
      Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
      Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

   End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create the dictionary.
        SortedList mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(mySL, (float).8);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(mySL, (float).8,
            new myCultureComparer());

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(mySL, (float).8,
            new myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {

       // Create the dictionary.
       SortedList^ mySL = gcnew SortedList;
       mySL->Add( "FIRST", "Hello" );
       mySL->Add( "SECOND", "World" );
       mySL->Add( "THIRD", "!" );

       // Create a hash table using the default hash code provider and the default comparer.
       Hashtable^ myHT1 = gcnew Hashtable( mySL,(float).8 );

       // Create a hash table using the specified case-insensitive hash code provider and case-insensitive comparer.
       Hashtable^ myHT2 = gcnew Hashtable( mySL,(float).8,gcnew myCultureComparer() );

       // Create a hash table using the specified KeyComparer.
       // The KeyComparer uses a case-insensitive hash code provider and a case-insensitive comparer,
       // which are based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
       CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
       Hashtable^ myHT3 = gcnew Hashtable( mySL,(float).8, gcnew myCultureComparer( myCul ) );

       // Search for a key in each hash table.
       Console::WriteLine( "first is in myHT1: {0}", myHT1->ContainsKey( "first" ) );
       Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
       Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
    }
};

int main()
{
    SamplesHashtable::Main();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间


Hashtable 构造函数 (Int32, Single, IHashCodeProvider, IComparer)

Hashtable 构造函数 (Int32, Single, IHashCodeProvider, IComparer)
Hashtable 类

注意：此 API 现在已过时。

使用指定的初始容量、加载因子、哈希代码提供程序和比较器来初始化 Hashtable 类的新的空实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Please use Hashtable(int, float, IEqualityComparer) instead.")> _
Public Sub New ( _
    capacity As Integer, _
    loadFactor As Single, _
    hcp As IHashCodeProvider, _
    comparer As IComparer _
)
[ObsoleteAttribute("Please use Hashtable(int, float, IEqualityComparer) instead.")]
public Hashtable(
    int capacity,
    float loadFactor,
    IHashCodeProvider hcp,
    IComparer comparer
)
[ObsoleteAttribute(L"Please use Hashtable(int, float, IEqualityComparer) instead.")]
public:
Hashtable(
    int capacity,
    float loadFactor,
    IHashCodeProvider^ hcp,
    IComparer^ comparer
)
[<ObsoleteAttribute("Please use Hashtable(int, float, IEqualityComparer) instead.")>]
new :
        capacity:int *
        loadFactor:float32 *
        hcp:IHashCodeProvider *
        comparer:IComparer -> Hashtable

参数

capacity
类型： System Int32
Hashtable 对象最初可包含的元素的近似数目。
loadFactor
类型： System Single
0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。 0.1 到 1.0 范围内的数字，再乘以提供最佳性能的默认值。结果是元素与存储桶的最大比率。
hcp
类型： System.Collections IHashCodeProvider
IHashCodeProvider 对象，用于为 Hashtable 中的所有键提供哈希代码。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认哈希代码提供程序，该提供程序是每一个键的 Object..::.GetHashCode 实现。
comparer
类型： System.Collections IComparer
IComparer 对象，用于确定两个键是否相等。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用默认比较器，该比较器是每一个键的 Object..::.Equals 实现。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。 - 或 - loadFactor 小于 0.1。 - 或 - loadFactor 大于 1.0。

如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。 如果指定初始容量，则无需在向 Hashtable 对象添加元素时执行大量的大小调整操作。容量会根据需要基于加载因子自动增加。

加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。 加载因子是元素与存储桶的最大比率。较小的加载因子意味着以消耗更大内存为代价的更快查找。加载因子 1.0 是速度和大小之间的最佳平衡。

当实际加载因子达到指定的加载因子时，存储桶的数量会自动增加到比当前存储桶数大两倍的最小质数。

哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。 哈希代码提供程序为 Hashtable 中的键分配哈希代码。默认哈希代码提供程序是键的 Object..::.GetHashCode 实现。

比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。
比较器确定两个键是否相等。Hashtable 中的每个键必须是唯一的。默认比较器是键的 Object..::.Equals 实现。

自定义哈希代码提供程序和自定义比较器允许使用各种方案，例如，使用不区分大小写的字符串进行查找等。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity 参数。

下面的代码示例使用不同的 Hashtable 构造函数创建哈希表，并演示这些哈希表行为之间的差异，即使每个哈希表均包含相同元素也会存在差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable(3, System.Convert.ToSingle(0.8))
        myHT1.Add("FIRST", "Hello")
        myHT1.Add("SECOND", "World")
        myHT1.Add("THIRD", "!")

        ' Create a hash table using the specified IEqualityComparer that uses
        ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Dim myHT2 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            New myCultureComparer())

        myHT2.Add("FIRST", "Hello")
        myHT2.Add("SECOND", "World")
        myHT2.Add("THIRD", "!")

        ' Create a hash table using an IEqualityComparer that is based on
        ' the Turkish culture (tr-TR) where "I" is not the uppercase
        ' version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT3 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            New myCultureComparer(myCul))

        myHT3.Add("FIRST", "Hello")
        myHT3.Add("SECOND", "World")
        myHT3.Add("THIRD", "!")

        ' Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"))
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"))
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"))

    End Sub 'Main

End Class 'SamplesHashtable

'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(3, (float).8);
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(3, (float).8, new myCultureComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(3, (float).8,
            new myCultureComparer(myCul));

        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

ref class myCultureComparer : public IEqualityComparer
{
public:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

public:
    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

public:
    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual int GetHashCode(Object^ obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

public ref class SamplesHashtable
{

public:
    static void Main()
    {
        // Create a hash table using the default comparer.
        Hashtable^ myHT1 = gcnew Hashtable(3, (float).8);
        myHT1->Add("FIRST", "Hello");
        myHT1->Add("SECOND", "World");
        myHT1->Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable^ myHT2 = gcnew Hashtable(3, (float).8, gcnew myCultureComparer());
        myHT2->Add("FIRST", "Hello");
        myHT2->Add("SECOND", "World");
        myHT2->Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
        Hashtable^ myHT3 = gcnew Hashtable(3, (float).8, gcnew myCultureComparer(myCul));
        myHT3->Add("FIRST", "Hello");
        myHT3->Add("SECOND", "World");
        myHT3->Add("THIRD", "!");

        // Search for a key in each hash table.
        Console::WriteLine("first is in myHT1: {0}", myHT1->ContainsKey("first"));
        Console::WriteLine("first is in myHT2: {0}", myHT2->ContainsKey("first"));
        Console::WriteLine("first is in myHT3: {0}", myHT3->ContainsKey("first"));

    }
};

int main()
{
    SamplesHashtable::Main();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

Hashtable 类
Hashtable 成员
Hashtable 重载
System.Collections 命名空间
IHashCodeProvider
IComparer
Object GetHashCode
Object Equals


Hashtable 方法

Hashtable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Hashtable 类

Hashtable 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Hashtable 类
System.Collections 命名空间


Hashtable ..::.Add 方法

Hashtable
.
.
::
.
Add 方法
Hashtable 类

将带有指定键和值的元素添加到 Hashtable 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Add ( _
    key As Object, _
    value As Object _
)
public virtual void Add(
    Object key,
    Object value
)
public:
virtual void Add(
    Object^ key,
    Object^ value
)
abstract Add :
        key:Object *
        value:Object -> unit
override Add :
        key:Object *
        value:Object -> unit

参数

key
类型： System Object
要添加的元素的键。
value
类型： System Object
要添加的元素的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要添加的元素的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | Hashtable 中已存在具有相同键的元素。
NotSupportedException | Hashtable 是只读的。 - 或 - Hashtable 具有固定大小。

键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。

其状态和哈希代码值之间不相关的对象通常不应用作键。例如，String 对象比 StringBuilder 对象更适于用作键。 其状态和哈希代码值之间不相关的对象通常不应用作键。例如，String 对象比 StringBuilder 对象更适于用作键。

还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 Hashtable 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 Hashtable 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 Hashtable 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 Hashtable 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 Hashtable 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 Hashtable 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。

如果 Count 小于 Hashtable 的容量，则此方法的运算复杂度是 O(1)。如果需要增加容量以容纳新元素，则此方法的运算复杂度成为 O(n)，其中 n 为 Count。 如果 Count 小于 Hashtable 的容量，则此方法的运算复杂度是 O(1)。如果需要增加容量以容纳新元素，则此方法的运算复杂度成为 O(n)，其中 n 为 Count。

下面的示例说明如何将元素添加到 Hashtable 中。

Imports System
Imports System.Collections

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Creates and initializes a new Hashtable.
        Dim myHT As New Hashtable()
        myHT.Add("one", "The")
        myHT.Add("two", "quick")
        myHT.Add("three", "brown")
        myHT.Add("four", "fox")

        ' Displays the Hashtable.
        Console.WriteLine("The Hashtable contains the following:")
        PrintKeysAndValues(myHT)

    End Sub 'Main

    Public Shared Sub PrintKeysAndValues(myHT As Hashtable)
        Console.WriteLine(vbTab + "-KEY-" + vbTab + "-VALUE-")
        Dim de As DictionaryEntry
        For Each de In  myHT
            Console.WriteLine(vbTab + "{0}:" + vbTab + "{1}", de.Key, de.Value)
        Next de
        Console.WriteLine()
    End Sub 'PrintKeysAndValues

End Class 'SamplesHashtable

' This code produces the following output.
'
' The Hashtable contains the following:
'         -KEY-   -VALUE-
'         two:    quick
'         three:  brown
'         four:   fox
'         one:    The
'

using System;
using System.Collections;
public class SamplesHashtable  {

   public static void Main()  {

      // Creates and initializes a new Hashtable.
      Hashtable myHT = new Hashtable();
      myHT.Add( "one", "The" );
      myHT.Add( "two", "quick" );
      myHT.Add( "three", "brown" );
      myHT.Add( "four", "fox" );

      // Displays the Hashtable.
      Console.WriteLine( "The Hashtable contains the following:" );
      PrintKeysAndValues( myHT );
   }

   public static void PrintKeysAndValues( Hashtable myHT )  {
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      foreach ( DictionaryEntry de in myHT )
         Console.WriteLine( "\t{0}:\t{1}", de.Key, de.Value );
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The Hashtable contains the following:
        -KEY-   -VALUE-
        two:    quick
        three:  brown
        four:   fox
        one:    The
*/

using namespace System;
using namespace System::Collections;
void PrintKeysAndValues( Hashtable^ myHT );
int main()
{

   // Creates and initializes a new Hashtable.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( "one", "The" );
   myHT->Add( "two", "quick" );
   myHT->Add( "three", "brown" );
   myHT->Add( "four", "fox" );

   // Displays the Hashtable.
   Console::WriteLine( "The Hashtable contains the following:" );
   PrintKeysAndValues( myHT );
}

void PrintKeysAndValues( Hashtable^ myHT )
{
   Console::WriteLine( "\t-KEY-\t-VALUE-" );
   IEnumerator^ myEnum = myHT->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry de = *safe_cast<DictionaryEntry ^>(myEnum->Current);
      Console::WriteLine( "\t{0}:\t{1}", de.Key, de.Value );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The Hashtable contains the following:
         -KEY-   -VALUE-
         two:    quick
         three:  brown
         four:   fox
         one:    The
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
Remove
Item
IDictionary Add


Hashtable ..::.Clear 方法

Hashtable
.
.
::
.
Clear 方法
Hashtable 类

从 Hashtable 中移除所有元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Clear
public virtual void Clear()
public:
virtual void Clear()
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

异常 | 条件
NotSupportedException | Hashtable 是只读的。

Count 被设置为零，并且对来自该集合元素的其他对象的引用也被释放。容量保持不变。 Count 被设置为零，并且对来自该集合元素的其他对象的引用也被释放。容量保持不变。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

下面的示例说明如何清除 Hashtable 的值。

Imports System
Imports System.Collections

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Creates and initializes a new Hashtable.
        Dim myHT As New Hashtable()
        myHT.Add("one", "The")
        myHT.Add("two", "quick")
        myHT.Add("three", "brown")
        myHT.Add("four", "fox")
        myHT.Add("five", "jumped")

        ' Displays the count and values of the Hashtable.
        Console.WriteLine("Initially,")
        Console.WriteLine("   Count    : {0}", myHT.Count)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(myHT)

        ' Clears the Hashtable.
        myHT.Clear()

        ' Displays the count and values of the Hashtable.
        Console.WriteLine("After Clear,")
        Console.WriteLine("   Count    : {0}", myHT.Count)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(myHT)

    End Sub 'Main

    Public Shared Sub PrintKeysAndValues(myHT As Hashtable)
        Console.WriteLine(vbTab + "-KEY-" + vbTab + "-VALUE-")
        Dim de As DictionaryEntry
        For Each de In  myHT
            Console.WriteLine(vbTab + "{0}:" + vbTab + "{1}", de.Key, de.Value)
        Next de
        Console.WriteLine()
    End Sub 'PrintKeysAndValues

End Class 'SamplesHashtable

' This code produces the following output.
'
' Initially,
'    Count    : 5
'    Values:
'         -KEY-   -VALUE-
'         two:    quick
'         three:  brown
'         four:   fox
'         five:   jumped
'         one:    The
'
' After Clear,
'    Count    : 0
'    Values:
'         -KEY-   -VALUE-
'

 using System;
 using System.Collections;
 public class SamplesHashtable  {

    public static void Main()  {

       // Creates and initializes a new Hashtable.
       Hashtable myHT = new Hashtable();
       myHT.Add( "one", "The" );
       myHT.Add( "two", "quick" );
       myHT.Add( "three", "brown" );
       myHT.Add( "four", "fox" );
       myHT.Add( "five", "jumped" );

       // Displays the count and values of the Hashtable.
       Console.WriteLine( "Initially," );
       Console.WriteLine( "   Count    : {0}", myHT.Count );
       Console.WriteLine( "   Values:" );
       PrintKeysAndValues( myHT );

       // Clears the Hashtable.
       myHT.Clear();

       // Displays the count and values of the Hashtable.
       Console.WriteLine( "After Clear," );
       Console.WriteLine( "   Count    : {0}", myHT.Count );
       Console.WriteLine( "   Values:" );
       PrintKeysAndValues( myHT );
    }

    public static void PrintKeysAndValues( Hashtable myHT )  {
       Console.WriteLine( "\t-KEY-\t-VALUE-" );
       foreach ( DictionaryEntry de in myHT )
          Console.WriteLine( "\t{0}:\t{1}", de.Key, de.Value );
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 Initially,
    Count    : 5
    Values:
         -KEY-   -VALUE-
         two:    quick
         three:  brown
         four:   fox
         five:   jumped
         one:    The

 After Clear,
    Count    : 0
    Values:
         -KEY-   -VALUE-

 */

using namespace System;
using namespace System::Collections;
void PrintKeysAndValues( Hashtable^ myHT );
int main()
{

   // Creates and initializes a new Hashtable.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( "one", "The" );
   myHT->Add( "two", "quick" );
   myHT->Add( "three", "brown" );
   myHT->Add( "four", "fox" );
   myHT->Add( "five", "jumped" );

   // Displays the count and values of the Hashtable.
   Console::WriteLine( "Initially," );
   Console::WriteLine( "   Count    : {0}", myHT->Count );
   Console::WriteLine( "   Values:" );
   PrintKeysAndValues( myHT );

   // Clears the Hashtable.
   myHT->Clear();

   // Displays the count and values of the Hashtable.
   Console::WriteLine( "After Clear," );
   Console::WriteLine( "   Count    : {0}", myHT->Count );
   Console::WriteLine( "   Values:" );
   PrintKeysAndValues( myHT );
}

void PrintKeysAndValues( Hashtable^ myHT )
{
   Console::WriteLine( "\t-KEY-\t-VALUE-" );
   IEnumerator^ myEnum = myHT->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry de = *safe_cast<DictionaryEntry ^>(myEnum->Current);
      Console::WriteLine( "\t{0}:\t{1}", de.Key, de.Value );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Initially,
    Count    : 5
    Values:
         -KEY-   -VALUE-
         two:    quick
         three:  brown
         four:   fox
         five:   jumped
         one:    The

 After Clear,
    Count    : 0
    Values:
         -KEY-   -VALUE-

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
IDictionary Clear


Hashtable ..::.Clone 方法

Hashtable
.
.
::
.
Clone 方法
Hashtable 类

创建 Hashtable 的浅表副本。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Clone As Object
public virtual Object Clone()
public:
virtual Object^ Clone()
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
Hashtable 的浅表副本。

实现

集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。 集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。

与之相对，集合的深层副本将复制这些元素以及由它们直接或间接引用的所有内容。

Hashtable 复本与原始的 Hashtable 具有相同的计数、相同的容量、相同的 IHashCodeProvider 实现以及相同的 IComparer 实现。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
CopyTo


Hashtable ..::.Contains 方法

Hashtable
.
.
::
.
Contains 方法
Hashtable 类

确定 Hashtable 是否包含特定键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Contains ( _
    key As Object _
) As Boolean
public virtual bool Contains(
    Object key
)
public:
virtual bool Contains(
    Object^ key
)
abstract Contains :
        key:Object -> bool
override Contains :
        key:Object -> bool

参数

key
类型： System Object
要在 Hashtable 中定位的键。

返回值

类型： System Boolean
如果 Hashtable 包含具有指定键的元素，则为 true；否则为 false。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Contains 实现 IDictionary..::.Contains。其表现与 ContainsKey 完全一样。 Contains 实现 IDictionary..::.Contains。其表现与 ContainsKey 完全一样。

此方法是 O(1) 操作。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的示例说明如何确定 Hashtable 是否包含特定的元素。

Imports System
Imports System.Collections

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Creates and initializes a new Hashtable.
        Dim myHT As New Hashtable()
        myHT.Add(0, "zero")
        myHT.Add(1, "one")
        myHT.Add(2, "two")
        myHT.Add(3, "three")
        myHT.Add(4, "four")

        ' Displays the values of the Hashtable.
        Console.WriteLine("The Hashtable contains the following values:")
        PrintIndexAndKeysAndValues(myHT)

        ' Searches for a specific key.
        Dim myKey As Integer = 2
        Console.Write("The key ""{0}"" is ", myKey)
        If(myHT.ContainsKey(myKey))
           Console.WriteLine("in the Hashtable.")
        Else
           Console.WriteLine("NOT in the Hashtable.")
        End If

        myKey = 6
        Console.Write("The key ""{0}"" is ", myKey)
        If(myHT.ContainsKey(myKey))
           Console.WriteLine(" in the Hashtable.")
        Else
           Console.WriteLine(" NOT in the Hashtable.")
        End If

        ' Searches for a specific value.
        Dim myValue As String = "three"
        Console.Write("The value ""{0}"" is ", myValue)
        If(myHT.ContainsValue(myValue))
           Console.WriteLine(" in the Hashtable.")
        Else
           Console.WriteLine(" NOT in the Hashtable.")
        End If

        myValue = "nine"
        Console.Write("The value ""{0}"" is ", myValue)
        If(myHT.ContainsValue(myValue))
           Console.WriteLine(" in the Hashtable.")
        Else
           Console.WriteLine(" NOT in the Hashtable.")
        End If

    End Sub 'Main

    Public Shared Sub PrintIndexAndKeysAndValues(myHT As Hashtable)
        Dim i As Integer = 0
        Console.WriteLine(vbTab + "-INDEX-" + vbTab + "-KEY-" + vbTab + "-VALUE-")
        Dim de As DictionaryEntry
        For Each de In  myHT
            Console.WriteLine(vbTab + "[{0}]:" + vbTab + "{1}" + vbTab + "{2}", i, de.Key, de.Value)
            i = i + 1
        Next de
        Console.WriteLine()
    End Sub 'PrintIndexAndKeysAndValues

End Class 'SamplesHashtable

' This code produces the following output.
'
' The Hashtable contains the following values:
'         -INDEX- -KEY-   -VALUE-
'         [0]:    4       four
'         [1]:    3       three
'         [2]:    2       two
'         [3]:    1       one
'         [4]:    0       zero
'
' The key "2" is in the Hashtable.
' The key "6" is NOT in the Hashtable.
' The value "three" is in the Hashtable.
' The value "nine" is NOT in the Hashtable.

using System;
using System.Collections;
public class SamplesHashtable  {

   public static void Main()  {

      // Creates and initializes a new Hashtable.
      Hashtable myHT = new Hashtable();
      myHT.Add( 0, "zero" );
      myHT.Add( 1, "one" );
      myHT.Add( 2, "two" );
      myHT.Add( 3, "three" );
      myHT.Add( 4, "four" );

      // Displays the values of the Hashtable.
      Console.WriteLine( "The Hashtable contains the following values:" );
      PrintIndexAndKeysAndValues( myHT );

      // Searches for a specific key.
      int myKey = 2;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, myHT.ContainsKey( myKey ) ? "in the Hashtable" : "NOT in the Hashtable" );
      myKey = 6;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, myHT.ContainsKey( myKey ) ? "in the Hashtable" : "NOT in the Hashtable" );

      // Searches for a specific value.
      String myValue = "three";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, myHT.ContainsValue( myValue ) ? "in the Hashtable" : "NOT in the Hashtable" );
      myValue = "nine";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, myHT.ContainsValue( myValue ) ? "in the Hashtable" : "NOT in the Hashtable" );
   }

   public static void PrintIndexAndKeysAndValues( Hashtable myHT )  {
      int i = 0;
      Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
      foreach ( DictionaryEntry de in myHT )
         Console.WriteLine( "\t[{0}]:\t{1}\t{2}", i++, de.Key, de.Value );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The Hashtable contains the following values:
        -INDEX- -KEY-   -VALUE-
        [0]:    4       four
        [1]:    3       three
        [2]:    2       two
        [3]:    1       one
        [4]:    0       zero

The key "2" is in the Hashtable.
The key "6" is NOT in the Hashtable.
The value "three" is in the Hashtable.
The value "nine" is NOT in the Hashtable.

*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndKeysAndValues( Hashtable^ myHT );
int main()
{

   // Creates and initializes a new Hashtable.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( (int^)0, "zero" );
   myHT->Add( 1, "one" );
   myHT->Add( 2, "two" );
   myHT->Add( 3, "three" );
   myHT->Add( 4, "four" );

   // Displays the values of the Hashtable.
   Console::WriteLine( "The Hashtable contains the following values:" );
   PrintIndexAndKeysAndValues( myHT );

   // Searches for a specific key.
   int myKey = 2;
   Console::WriteLine( "The key \"{0}\" is {1}.", myKey, myHT->ContainsKey( myKey ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );
   myKey = 6;
   Console::WriteLine( "The key \"{0}\" is {1}.", myKey, myHT->ContainsKey( myKey ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );

   // Searches for a specific value.
   String^ myValue = "three";
   Console::WriteLine( "The value \"{0}\" is {1}.", myValue, myHT->ContainsValue( myValue ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );
   myValue = "nine";
   Console::WriteLine( "The value \"{0}\" is {1}.", myValue, myHT->ContainsValue( myValue ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );
}

void PrintIndexAndKeysAndValues( Hashtable^ myHT )
{
   int i = 0;
   Console::WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
   IEnumerator^ myEnum = myHT->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry de =  *safe_cast<DictionaryEntry ^>(myEnum->Current);
      Console::WriteLine( "\t[{0}]:\t{1}\t{2}", i++, de.Key, de.Value );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The Hashtable contains the following values:
         -INDEX- -KEY-   -VALUE-
         [0]:    4       four
         [1]:    3       three
         [2]:    2       two
         [3]:    1       one
         [4]:    0       zero

 The key "2" is in the Hashtable.
 The key "6" is NOT in the Hashtable.
 The value "three" is in the Hashtable.
 The value "nine" is NOT in the Hashtable.

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
ContainsKey
IDictionary


Hashtable ..::.ContainsKey 方法

Hashtable
.
.
::
.
ContainsKey 方法
Hashtable 类

确定 Hashtable 是否包含特定键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ContainsKey ( _
    key As Object _
) As Boolean
public virtual bool ContainsKey(
    Object key
)
public:
virtual bool ContainsKey(
    Object^ key
)
abstract ContainsKey :
        key:Object -> bool
override ContainsKey :
        key:Object -> bool

参数

key
类型： System Object
要在 Hashtable 中定位的键。

返回值

类型： System Boolean
如果 Hashtable 包含具有指定键的元素，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此方法的表现与 Contains 完全一样。

此方法是 O(1) 操作。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的示例说明如何确定 Hashtable 是否包含特定的元素。

Imports System
Imports System.Collections

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Creates and initializes a new Hashtable.
        Dim myHT As New Hashtable()
        myHT.Add(0, "zero")
        myHT.Add(1, "one")
        myHT.Add(2, "two")
        myHT.Add(3, "three")
        myHT.Add(4, "four")

        ' Displays the values of the Hashtable.
        Console.WriteLine("The Hashtable contains the following values:")
        PrintIndexAndKeysAndValues(myHT)

        ' Searches for a specific key.
        Dim myKey As Integer = 2
        Console.Write("The key ""{0}"" is ", myKey)
        If(myHT.ContainsKey(myKey))
           Console.WriteLine("in the Hashtable.")
        Else
           Console.WriteLine("NOT in the Hashtable.")
        End If

        myKey = 6
        Console.Write("The key ""{0}"" is ", myKey)
        If(myHT.ContainsKey(myKey))
           Console.WriteLine(" in the Hashtable.")
        Else
           Console.WriteLine(" NOT in the Hashtable.")
        End If

        ' Searches for a specific value.
        Dim myValue As String = "three"
        Console.Write("The value ""{0}"" is ", myValue)
        If(myHT.ContainsValue(myValue))
           Console.WriteLine(" in the Hashtable.")
        Else
           Console.WriteLine(" NOT in the Hashtable.")
        End If

        myValue = "nine"
        Console.Write("The value ""{0}"" is ", myValue)
        If(myHT.ContainsValue(myValue))
           Console.WriteLine(" in the Hashtable.")
        Else
           Console.WriteLine(" NOT in the Hashtable.")
        End If

    End Sub 'Main

    Public Shared Sub PrintIndexAndKeysAndValues(myHT As Hashtable)
        Dim i As Integer = 0
        Console.WriteLine(vbTab + "-INDEX-" + vbTab + "-KEY-" + vbTab + "-VALUE-")
        Dim de As DictionaryEntry
        For Each de In  myHT
            Console.WriteLine(vbTab + "[{0}]:" + vbTab + "{1}" + vbTab + "{2}", i, de.Key, de.Value)
            i = i + 1
        Next de
        Console.WriteLine()
    End Sub 'PrintIndexAndKeysAndValues

End Class 'SamplesHashtable

' This code produces the following output.
'
' The Hashtable contains the following values:
'         -INDEX- -KEY-   -VALUE-
'         [0]:    4       four
'         [1]:    3       three
'         [2]:    2       two
'         [3]:    1       one
'         [4]:    0       zero
'
' The key "2" is in the Hashtable.
' The key "6" is NOT in the Hashtable.
' The value "three" is in the Hashtable.
' The value "nine" is NOT in the Hashtable.

using System;
using System.Collections;
public class SamplesHashtable  {

   public static void Main()  {

      // Creates and initializes a new Hashtable.
      Hashtable myHT = new Hashtable();
      myHT.Add( 0, "zero" );
      myHT.Add( 1, "one" );
      myHT.Add( 2, "two" );
      myHT.Add( 3, "three" );
      myHT.Add( 4, "four" );

      // Displays the values of the Hashtable.
      Console.WriteLine( "The Hashtable contains the following values:" );
      PrintIndexAndKeysAndValues( myHT );

      // Searches for a specific key.
      int myKey = 2;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, myHT.ContainsKey( myKey ) ? "in the Hashtable" : "NOT in the Hashtable" );
      myKey = 6;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, myHT.ContainsKey( myKey ) ? "in the Hashtable" : "NOT in the Hashtable" );

      // Searches for a specific value.
      String myValue = "three";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, myHT.ContainsValue( myValue ) ? "in the Hashtable" : "NOT in the Hashtable" );
      myValue = "nine";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, myHT.ContainsValue( myValue ) ? "in the Hashtable" : "NOT in the Hashtable" );
   }

   public static void PrintIndexAndKeysAndValues( Hashtable myHT )  {
      int i = 0;
      Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
      foreach ( DictionaryEntry de in myHT )
         Console.WriteLine( "\t[{0}]:\t{1}\t{2}", i++, de.Key, de.Value );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The Hashtable contains the following values:
        -INDEX- -KEY-   -VALUE-
        [0]:    4       four
        [1]:    3       three
        [2]:    2       two
        [3]:    1       one
        [4]:    0       zero

The key "2" is in the Hashtable.
The key "6" is NOT in the Hashtable.
The value "three" is in the Hashtable.
The value "nine" is NOT in the Hashtable.

*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndKeysAndValues( Hashtable^ myHT );
int main()
{

   // Creates and initializes a new Hashtable.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( (int^)0, "zero" );
   myHT->Add( 1, "one" );
   myHT->Add( 2, "two" );
   myHT->Add( 3, "three" );
   myHT->Add( 4, "four" );

   // Displays the values of the Hashtable.
   Console::WriteLine( "The Hashtable contains the following values:" );
   PrintIndexAndKeysAndValues( myHT );

   // Searches for a specific key.
   int myKey = 2;
   Console::WriteLine( "The key \"{0}\" is {1}.", myKey, myHT->ContainsKey( myKey ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );
   myKey = 6;
   Console::WriteLine( "The key \"{0}\" is {1}.", myKey, myHT->ContainsKey( myKey ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );

   // Searches for a specific value.
   String^ myValue = "three";
   Console::WriteLine( "The value \"{0}\" is {1}.", myValue, myHT->ContainsValue( myValue ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );
   myValue = "nine";
   Console::WriteLine( "The value \"{0}\" is {1}.", myValue, myHT->ContainsValue( myValue ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );
}

void PrintIndexAndKeysAndValues( Hashtable^ myHT )
{
   int i = 0;
   Console::WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
   IEnumerator^ myEnum = myHT->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry de =  *safe_cast<DictionaryEntry ^>(myEnum->Current);
      Console::WriteLine( "\t[{0}]:\t{1}\t{2}", i++, de.Key, de.Value );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The Hashtable contains the following values:
         -INDEX- -KEY-   -VALUE-
         [0]:    4       four
         [1]:    3       three
         [2]:    2       two
         [3]:    1       one
         [4]:    0       zero

 The key "2" is in the Hashtable.
 The key "6" is NOT in the Hashtable.
 The value "three" is in the Hashtable.
 The value "nine" is NOT in the Hashtable.

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
Contains
ContainsValue


Hashtable ..::.ContainsValue 方法

Hashtable
.
.
::
.
ContainsValue 方法
Hashtable 类

确定 Hashtable 是否包含特定值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ContainsValue ( _
    value As Object _
) As Boolean
public virtual bool ContainsValue(
    Object value
)
public:
virtual bool ContainsValue(
    Object^ value
)
abstract ContainsValue :
        value:Object -> bool
override ContainsValue :
        value:Object -> bool

参数

value
类型： System Object
要在 Hashtable 中定位的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 Hashtable 中定位的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 Hashtable 包含带有指定的 value 的元素，则为 true；否则为 false。

使用 Object..::.Equals 方法将 Hashtable 的元素的值与指定的值相比较。

此方法执行线性搜索；因此，此方法的运算复杂度是 O(n)，其中 n 是 Count。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的示例说明如何确定 Hashtable 是否包含特定的元素。

Imports System
Imports System.Collections

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Creates and initializes a new Hashtable.
        Dim myHT As New Hashtable()
        myHT.Add(0, "zero")
        myHT.Add(1, "one")
        myHT.Add(2, "two")
        myHT.Add(3, "three")
        myHT.Add(4, "four")

        ' Displays the values of the Hashtable.
        Console.WriteLine("The Hashtable contains the following values:")
        PrintIndexAndKeysAndValues(myHT)

        ' Searches for a specific key.
        Dim myKey As Integer = 2
        Console.Write("The key ""{0}"" is ", myKey)
        If(myHT.ContainsKey(myKey))
           Console.WriteLine("in the Hashtable.")
        Else
           Console.WriteLine("NOT in the Hashtable.")
        End If

        myKey = 6
        Console.Write("The key ""{0}"" is ", myKey)
        If(myHT.ContainsKey(myKey))
           Console.WriteLine(" in the Hashtable.")
        Else
           Console.WriteLine(" NOT in the Hashtable.")
        End If

        ' Searches for a specific value.
        Dim myValue As String = "three"
        Console.Write("The value ""{0}"" is ", myValue)
        If(myHT.ContainsValue(myValue))
           Console.WriteLine(" in the Hashtable.")
        Else
           Console.WriteLine(" NOT in the Hashtable.")
        End If

        myValue = "nine"
        Console.Write("The value ""{0}"" is ", myValue)
        If(myHT.ContainsValue(myValue))
           Console.WriteLine(" in the Hashtable.")
        Else
           Console.WriteLine(" NOT in the Hashtable.")
        End If

    End Sub 'Main

    Public Shared Sub PrintIndexAndKeysAndValues(myHT As Hashtable)
        Dim i As Integer = 0
        Console.WriteLine(vbTab + "-INDEX-" + vbTab + "-KEY-" + vbTab + "-VALUE-")
        Dim de As DictionaryEntry
        For Each de In  myHT
            Console.WriteLine(vbTab + "[{0}]:" + vbTab + "{1}" + vbTab + "{2}", i, de.Key, de.Value)
            i = i + 1
        Next de
        Console.WriteLine()
    End Sub 'PrintIndexAndKeysAndValues

End Class 'SamplesHashtable

' This code produces the following output.
'
' The Hashtable contains the following values:
'         -INDEX- -KEY-   -VALUE-
'         [0]:    4       four
'         [1]:    3       three
'         [2]:    2       two
'         [3]:    1       one
'         [4]:    0       zero
'
' The key "2" is in the Hashtable.
' The key "6" is NOT in the Hashtable.
' The value "three" is in the Hashtable.
' The value "nine" is NOT in the Hashtable.

using System;
using System.Collections;
public class SamplesHashtable  {

   public static void Main()  {

      // Creates and initializes a new Hashtable.
      Hashtable myHT = new Hashtable();
      myHT.Add( 0, "zero" );
      myHT.Add( 1, "one" );
      myHT.Add( 2, "two" );
      myHT.Add( 3, "three" );
      myHT.Add( 4, "four" );

      // Displays the values of the Hashtable.
      Console.WriteLine( "The Hashtable contains the following values:" );
      PrintIndexAndKeysAndValues( myHT );

      // Searches for a specific key.
      int myKey = 2;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, myHT.ContainsKey( myKey ) ? "in the Hashtable" : "NOT in the Hashtable" );
      myKey = 6;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, myHT.ContainsKey( myKey ) ? "in the Hashtable" : "NOT in the Hashtable" );

      // Searches for a specific value.
      String myValue = "three";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, myHT.ContainsValue( myValue ) ? "in the Hashtable" : "NOT in the Hashtable" );
      myValue = "nine";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, myHT.ContainsValue( myValue ) ? "in the Hashtable" : "NOT in the Hashtable" );
   }

   public static void PrintIndexAndKeysAndValues( Hashtable myHT )  {
      int i = 0;
      Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
      foreach ( DictionaryEntry de in myHT )
         Console.WriteLine( "\t[{0}]:\t{1}\t{2}", i++, de.Key, de.Value );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The Hashtable contains the following values:
        -INDEX- -KEY-   -VALUE-
        [0]:    4       four
        [1]:    3       three
        [2]:    2       two
        [3]:    1       one
        [4]:    0       zero

The key "2" is in the Hashtable.
The key "6" is NOT in the Hashtable.
The value "three" is in the Hashtable.
The value "nine" is NOT in the Hashtable.

*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndKeysAndValues( Hashtable^ myHT );
int main()
{

   // Creates and initializes a new Hashtable.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( (int^)0, "zero" );
   myHT->Add( 1, "one" );
   myHT->Add( 2, "two" );
   myHT->Add( 3, "three" );
   myHT->Add( 4, "four" );

   // Displays the values of the Hashtable.
   Console::WriteLine( "The Hashtable contains the following values:" );
   PrintIndexAndKeysAndValues( myHT );

   // Searches for a specific key.
   int myKey = 2;
   Console::WriteLine( "The key \"{0}\" is {1}.", myKey, myHT->ContainsKey( myKey ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );
   myKey = 6;
   Console::WriteLine( "The key \"{0}\" is {1}.", myKey, myHT->ContainsKey( myKey ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );

   // Searches for a specific value.
   String^ myValue = "three";
   Console::WriteLine( "The value \"{0}\" is {1}.", myValue, myHT->ContainsValue( myValue ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );
   myValue = "nine";
   Console::WriteLine( "The value \"{0}\" is {1}.", myValue, myHT->ContainsValue( myValue ) ? (String^)"in the Hashtable" : "NOT in the Hashtable" );
}

void PrintIndexAndKeysAndValues( Hashtable^ myHT )
{
   int i = 0;
   Console::WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
   IEnumerator^ myEnum = myHT->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry de =  *safe_cast<DictionaryEntry ^>(myEnum->Current);
      Console::WriteLine( "\t[{0}]:\t{1}\t{2}", i++, de.Key, de.Value );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The Hashtable contains the following values:
         -INDEX- -KEY-   -VALUE-
         [0]:    4       four
         [1]:    3       three
         [2]:    2       two
         [3]:    1       one
         [4]:    0       zero

 The key "2" is in the Hashtable.
 The key "6" is NOT in the Hashtable.
 The value "three" is in the Hashtable.
 The value "nine" is NOT in the Hashtable.

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
ContainsKey
Object Equals


Hashtable ..::.CopyTo 方法

Hashtable
.
.
::
.
CopyTo 方法
Hashtable 类

将 Hashtable 元素复制到一维 Array 实例中的指定索引位置。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub CopyTo ( _
    array As Array, _
    arrayIndex As Integer _
)
public virtual void CopyTo(
    Array array,
    int arrayIndex
)
public:
virtual void CopyTo(
    Array^ array,
    int arrayIndex
)
abstract CopyTo :
        array:Array *
        arrayIndex:int -> unit
override CopyTo :
        array:Array *
        arrayIndex:int -> unit

参数

array
类型： System Array
一维 Array，它是从 Hashtable 复制的 DictionaryEntry 对象的目标位置。Array 必须具有从零开始的索引。 一维 Array，它是从 Hashtable 复制的 DictionaryEntry 对象的目标位置。Array 必须具有从零开始的索引。
arrayIndex
类型： System Int32
array 中从零开始的索引，将在此处开始复制。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | arrayIndex 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 Hashtable 中的元素数大于从 arrayIndex 到目标 array 结尾处之间的可用空间。
InvalidCastException | 无法自动将源 Hashtable 的类型强制转换为目标 array 的类型。

这些元素将复制到 Array，复制顺序与枚举数循环访问 Hashtable 的顺序一样。

若要只复制 Hashtable 中的键，请使用 Hashtable.Keys.CopyTo。

若要只复制 Hashtable 中的值，请使用 Hashtable.Values.CopyTo。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

下面的示例说明如何将 Hashtable 中键的列表或值的列表复制到一维 Array 中。

Imports System
Imports System.Collections

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Creates and initializes the source Hashtable.
        Dim mySourceHT As New Hashtable()
        mySourceHT.Add("A", "valueA")
        mySourceHT.Add("B", "valueB")

        ' Creates and initializes the one-dimensional target Array.
        Dim myTargetArray(14) As String
        myTargetArray(0) = "The"
        myTargetArray(1) = "quick"
        myTargetArray(2) = "brown"
        myTargetArray(3) = "fox"
        myTargetArray(4) = "jumped"
        myTargetArray(5) = "over"
        myTargetArray(6) = "the"
        myTargetArray(7) = "lazy"
        myTargetArray(8) = "dog"

        ' Displays the values of the target Array.
        Console.WriteLine("The target Array contains the following before:")
        PrintValues(myTargetArray, " "c)

        ' Copies the keys in the source Hashtable to the target Hashtable, starting at index 6.
        Console.WriteLine("After copying the keys, starting at index 6:")
        mySourceHT.Keys.CopyTo(myTargetArray, 6)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the values in the source Hashtable to the target Hashtable, starting at index 6.
        Console.WriteLine("After copying the values, starting at index 6:")
        mySourceHT.Values.CopyTo(myTargetArray, 6)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

    End Sub 'Main

    Public Shared Sub PrintValues(myArr() As String, mySeparator As Char)
        Dim i As Integer
        For i = 0 To myArr.Length - 1
            Console.Write("{0}{1}", mySeparator, myArr(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesHashtable

' This code produces the following output.
'
' The target Array contains the following before:
'  The quick brown fox jumped over the lazy dog
' After copying the keys, starting at index 6:
'  The quick brown fox jumped over B A dog
' After copying the values, starting at index 6:
'  The quick brown fox jumped over valueB valueA dog

using System;
using System.Collections;
public class SamplesHashtable  {

   public static void Main()  {

      // Creates and initializes the source Hashtable.
      Hashtable mySourceHT = new Hashtable();
      mySourceHT.Add( "A", "valueA" );
      mySourceHT.Add( "B", "valueB" );

      // Creates and initializes the one-dimensional target Array.
      String[] myTargetArray = new String[15];
      myTargetArray[0] = "The";
      myTargetArray[1] = "quick";
      myTargetArray[2] = "brown";
      myTargetArray[3] = "fox";
      myTargetArray[4] = "jumped";
      myTargetArray[5] = "over";
      myTargetArray[6] = "the";
      myTargetArray[7] = "lazy";
      myTargetArray[8] = "dog";

      // Displays the values of the target Array.
      Console.WriteLine( "The target Array contains the following before:" );
      PrintValues( myTargetArray, ' ' );

      // Copies the keys in the source Hashtable to the target Hashtable, starting at index 6.
      Console.WriteLine( "After copying the keys, starting at index 6:" );
      mySourceHT.Keys.CopyTo( myTargetArray, 6 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

      // Copies the values in the source Hashtable to the target Hashtable, starting at index 6.
      Console.WriteLine( "After copying the values, starting at index 6:" );
      mySourceHT.Values.CopyTo( myTargetArray, 6 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );
   }

   public static void PrintValues( String[] myArr, char mySeparator )  {
      for ( int i = 0; i < myArr.Length; i++ )
         Console.Write( "{0}{1}", mySeparator, myArr[i] );
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The target Array contains the following before:
 The quick brown fox jumped over the lazy dog
After copying the keys, starting at index 6:
 The quick brown fox jumped over B A dog
After copying the values, starting at index 6:
 The quick brown fox jumped over valueB valueA dog

*/

using namespace System;
using namespace System::Collections;
void PrintValues( array<String^>^myArr, char mySeparator );
int main()
{

   // Creates and initializes the source Hashtable.
   Hashtable^ mySourceHT = gcnew Hashtable;
   mySourceHT->Add( "A", "valueA" );
   mySourceHT->Add( "B", "valueB" );

   // Creates and initializes the one-dimensional target Array.
   array<String^>^myTargetArray = gcnew array<String^>(15);
   myTargetArray[ 0 ] = "The";
   myTargetArray[ 1 ] = "quick";
   myTargetArray[ 2 ] = "brown";
   myTargetArray[ 3 ] = "fox";
   myTargetArray[ 4 ] = "jumped";
   myTargetArray[ 5 ] = "over";
   myTargetArray[ 6 ] = "the";
   myTargetArray[ 7 ] = "lazy";
   myTargetArray[ 8 ] = "dog";

   // Displays the values of the target Array.
   Console::WriteLine( "The target Array contains the following before:" );
   PrintValues( myTargetArray, ' ' );

   // Copies the keys in the source Hashtable to the target Hashtable, starting at index 6.
   Console::WriteLine( "After copying the keys, starting at index 6:" );
   mySourceHT->Keys->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the values in the source Hashtable to the target Hashtable, starting at index 6.
   Console::WriteLine( "After copying the values, starting at index 6:" );
   mySourceHT->Values->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );
}

void PrintValues( array<String^>^myArr, char mySeparator )
{
   for ( int i = 0; i < myArr->Length; i++ )
      Console::Write( "{0}{1}", mySeparator, myArr[ i ] );
   Console::WriteLine();
}

/*
 This code produces the following output.

 The target Array contains the following before:
  The quick brown fox jumped over the lazy dog
 After copying the keys, starting at index 6:
  The quick brown fox jumped over B A dog
 After copying the values, starting at index 6:
  The quick brown fox jumped over valueB valueA dog

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
Array
DictionaryEntry
GetEnumerator


Hashtable ..::.GetEnumerator 方法

Hashtable
.
.
::
.
GetEnumerator 方法
Hashtable 类

返回循环访问 Hashtable 的 IDictionaryEnumerator。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumerator As IDictionaryEnumerator
public virtual IDictionaryEnumerator GetEnumerator()
public:
virtual IDictionaryEnumerator^ GetEnumerator()
abstract GetEnumerator : unit -> IDictionaryEnumerator
override GetEnumerator : unit -> IDictionaryEnumerator

返回值

类型： System.Collections IDictionaryEnumerator
用于 Hashtable 的 IDictionaryEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

因为序列化和反序列化 Hashtable 的枚举数会使元素重新排序，所以不调用 Reset 方法就不能继续枚举。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
IDictionaryEnumerator
IEnumerator


Hashtable ..::.GetHash 方法

Hashtable
.
.
::
.
GetHash 方法
Hashtable 类

返回指定键的哈希代码。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function GetHash ( _
    key As Object _
) As Integer
protected virtual int GetHash(
    Object key
)
protected:
virtual int GetHash(
    Object^ key
)
abstract GetHash :
        key:Object -> int
override GetHash :
        key:Object -> int

参数

key
类型： System Object
Object，将为其返回哈希代码。

返回值

类型： System Int32
key 的哈希代码。
异常 | 条件
NullReferenceException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果该哈希表是使用特定的 IHashCodeProvider 实现创建的，则此方法使用该哈希代码提供程序；否则它使用 key 的 Object..::.GetHashCode 实现。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
Object GetHashCode
Object
IHashCodeProvider


Hashtable ..::.GetObjectData 方法

Hashtable
.
.
::
.
GetObjectData 方法
Hashtable 类

实现 ISerializable 接口，并返回序列化 Hashtable 所需的数据。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
public virtual void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
)
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
一个 SerializationInfo 对象，它包含序列化 Hashtable 所需的信息。
context
类型： System.Runtime.Serialization StreamingContext
一个 StreamingContext 对象，它包含与 Hashtable 相关联的序列化流的源和目标。

实现

异常 | 条件
ArgumentNullException | info 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 已修改集合。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

  • SecurityCriticalAttribute

    需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。 需要完全信任直接调用方。此成员不能由部分受信任或透明的代码使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
ISerializable
SerializationInfo
StreamingContext
OnDeserialization


Hashtable ..::.IEnumerable ..::.GetEnumerator 方法

Hashtable
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
Hashtable 类

返回一个循环访问集合的枚举器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
可用于循环访问集合的 IEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
IEnumerator


Hashtable ..::.KeyEquals 方法

Hashtable
.
.
::
.
KeyEquals 方法
Hashtable 类

将特定 Object 与 Hashtable 中的特定键进行比较。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Overridable Function KeyEquals ( _
    item As Object, _
    key As Object _
) As Boolean
protected virtual bool KeyEquals(
    Object item,
    Object key
)
protected:
virtual bool KeyEquals(
    Object^ item,
    Object^ key
)
abstract KeyEquals :
        item:Object *
        key:Object -> bool
override KeyEquals :
        item:Object *
        key:Object -> bool

参数

item
类型： System Object
要与 key 进行比较的 Object。
key
类型： System Object
要与 item 进行比较的 Hashtable 中的键。

返回值

类型： System Boolean
如果 item 和 key 相等，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | item 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果该哈希表是使用特定 IComparer 实现创建的，则此方法使用该比较器，即 Compare(item, key)。否则，它使用 item.Equals(key)。 如果该哈希表是使用特定 IComparer 实现创建的，则此方法使用该比较器，即 Compare(item, key)。否则，它使用 item.Equals(key)。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
Object
Compare
Object Equals


Hashtable ..::.OnDeserialization 方法

Hashtable
.
.
::
.
OnDeserialization 方法
Hashtable 类

实现 ISerializable 接口，并在完成反序列化之后引发反序列化事件。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub OnDeserialization ( _
    sender As Object _
)
public virtual void OnDeserialization(
    Object sender
)
public:
virtual void OnDeserialization(
    Object^ sender
)
abstract OnDeserialization :
        sender:Object -> unit
override OnDeserialization :
        sender:Object -> unit

参数

sender
类型： System Object
反序列化事件源。

实现

异常 | 条件
SerializationException | 与当前 Hashtable 相关联的 System.Runtime.Serialization..::.SerializationInfo 对象无效。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

因为序列化和反序列化 Hashtable 的枚举数会使元素重新排序，所以不调用 Reset 方法就不能继续枚举。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
ISerializable
GetObjectData


Hashtable ..::.Remove 方法

Hashtable
.
.
::
.
Remove 方法
Hashtable 类

从 Hashtable 中移除带有指定键的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Remove ( _
    key As Object _
)
public virtual void Remove(
    Object key
)
public:
virtual void Remove(
    Object^ key
)
abstract Remove :
        key:Object -> unit
override Remove :
        key:Object -> unit

参数

key
类型： System Object
要移除的元素的键。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | Hashtable 是只读的。 - 或 - Hashtable 具有固定大小。

如果 Hashtable 不包含带有指定键的元素，则 Hashtable 保持不变。不引发异常。 如果 Hashtable 不包含带有指定键的元素，则 Hashtable 保持不变。不引发异常。

此方法是 O(1) 操作。

下面的示例说明如何移除 Hashtable 中的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Creates and initializes a new Hashtable.
        Dim myHT As New Hashtable()
        myHT.Add("1a", "The")
        myHT.Add("1b", "quick")
        myHT.Add("1c", "brown")
        myHT.Add("2a", "fox")
        myHT.Add("2b", "jumped")
        myHT.Add("2c", "over")
        myHT.Add("3a", "the")
        myHT.Add("3b", "lazy")
        myHT.Add("3c", "dog")

        ' Displays the Hashtable.
        Console.WriteLine("The Hashtable initially contains the following:")
        PrintKeysAndValues(myHT)

        ' Removes the element with the key "3b".
        myHT.Remove("3b")

        ' Displays the current state of the Hashtable.
        Console.WriteLine("After removing ""lazy"":")
        PrintKeysAndValues(myHT)
    End Sub

    Public Shared Sub PrintKeysAndValues(myHT As Hashtable)
        Dim de As DictionaryEntry
        For Each de In  myHT
            Console.WriteLine("    {0}:    {1}", de.Key, de.Value)
        Next de
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
'The Hashtable initially contains the following:
'    2c:    over
'    3a:    the
'    2b:    jumped
'    3b:    lazy
'    1b:    quick
'    3c:    dog
'    2a:    fox
'    1c:    brown
'    1a:    The
'
'After removing "lazy":
'    2c:    over
'    3a:    the
'    2b:    jumped
'    1b:    quick
'    3c:    dog
'    2a:    fox
'    1c:    brown
'    1a:    The

using System;
using System.Collections;
public class SamplesHashtable  {

   public static void Main()  {

      // Creates and initializes a new Hashtable.
      Hashtable myHT = new Hashtable();
      myHT.Add( "1a", "The" );
      myHT.Add( "1b", "quick" );
      myHT.Add( "1c", "brown" );
      myHT.Add( "2a", "fox" );
      myHT.Add( "2b", "jumped" );
      myHT.Add( "2c", "over" );
      myHT.Add( "3a", "the" );
      myHT.Add( "3b", "lazy" );
      myHT.Add( "3c", "dog" );

      // Displays the Hashtable.
      Console.WriteLine( "The Hashtable initially contains the following:" );
      PrintKeysAndValues( myHT );

      // Removes the element with the key "3b".
      myHT.Remove( "3b" );

      // Displays the current state of the Hashtable.
      Console.WriteLine( "After removing \"lazy\":" );
      PrintKeysAndValues( myHT );
   }

   public static void PrintKeysAndValues( Hashtable myHT )  {
      foreach ( DictionaryEntry de in myHT )
         Console.WriteLine( "    {0}:    {1}", de.Key, de.Value );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

The Hashtable initially contains the following:
    2c:    over
    3a:    the
    2b:    jumped
    3b:    lazy
    1b:    quick
    3c:    dog
    2a:    fox
    1c:    brown
    1a:    The

After removing "lazy":
    2c:    over
    3a:    the
    2b:    jumped
    1b:    quick
    3c:    dog
    2a:    fox
    1c:    brown
    1a:    The

*/

using namespace System;
using namespace System::Collections;
void PrintKeysAndValues( Hashtable^ myHT );
int main()
{

   // Creates and initializes a new Hashtable.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( "1a", "The" );
   myHT->Add( "1b", "quick" );
   myHT->Add( "1c", "brown" );
   myHT->Add( "2a", "fox" );
   myHT->Add( "2b", "jumped" );
   myHT->Add( "2c", "over" );
   myHT->Add( "3a", "the" );
   myHT->Add( "3b", "lazy" );
   myHT->Add( "3c", "dog" );

   // Displays the Hashtable.
   Console::WriteLine( "The Hashtable initially contains the following:" );
   PrintKeysAndValues( myHT );

   // Removes the element with the key "3b".
   myHT->Remove( "3b" );

   // Displays the current state of the Hashtable.
   Console::WriteLine( "After removing \"lazy\":" );
   PrintKeysAndValues( myHT );
}

void PrintKeysAndValues( Hashtable^ myHT )
{
   IEnumerator^ myEnum = myHT->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry de = *safe_cast<DictionaryEntry ^>(myEnum->Current);
      Console::WriteLine( "    {0}:    {1}", de.Key, de.Value );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The Hashtable initially contains the following:
     2c:    over
     3a:    the
     2b:    jumped
     3b:    lazy
     1b:    quick
     3c:    dog
     2a:    fox
     1c:    brown
     1a:    The

 After removing "lazy":
     2c:    over
     3a:    the
     2b:    jumped
     1b:    quick
     3c:    dog
     2a:    fox
     1c:    brown
     1a:    The

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
Add
IDictionary Remove


Hashtable ..::.Synchronized 方法

Hashtable
.
.
::
.
Synchronized 方法
Hashtable 类

返回 Hashtable 的同步（线程安全）包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True)> _
Public Shared Function Synchronized ( _
    table As Hashtable _
) As Hashtable
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)]
public static Hashtable Synchronized(
    Hashtable table
)
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true)]
public:
static Hashtable^ Synchronized(
    Hashtable^ table
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)>]
static member Synchronized :
        table:Hashtable -> Hashtable

参数

table
类型： System.Collections Hashtable
要同步的 Hashtable。

返回值

类型： System.Collections Hashtable
Hashtable 的同步（线程安全）包装。
异常 | 条件
ArgumentNullException | table 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Synchronized 方法对于多个读取器和编写器是线程安全的。此外，同步的包装可确保是一次只有一个编写器在写入。 Synchronized 方法对于多个读取器和编写器是线程安全的。此外，同步的包装可确保是一次只有一个编写器在写入。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例显示如何在整个枚举过程中使用 SyncRoot 锁定集合：

Dim myCollection As New Hashtable()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next
End SyncLock

Hashtable myCollection = new Hashtable();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Hashtable^ myCollection = gcnew Hashtable();
bool lockTaken = false;

try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

此方法是 O(1) 操作。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：Synchronization。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例演示如何同步 Hashtable、如何确定 Hashtable 是否同步以及如何使用同步的 Hashtable。

Imports System
Imports System.Collections

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Creates and initializes a new Hashtable.
        Dim myHT As New Hashtable()
        myHT.Add(0, "zero")
        myHT.Add(1, "one")
        myHT.Add(2, "two")
        myHT.Add(3, "three")
        myHT.Add(4, "four")

        ' Creates a synchronized wrapper around the Hashtable.
        Dim mySyncdHT As Hashtable = Hashtable.Synchronized(myHT)

        ' Displays the sychronization status of both Hashtables.
        Dim msg As String
        If myHT.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("myHT is {0}.", msg)
        If mySyncdHT.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySyncdHT is {0}.", msg)
    End Sub
End Class

' This code produces the following output.
'
' myHT is not synchronized.
' mySyncdHT is synchronized.

using System;
using System.Collections;
public class SamplesHashtable  {

   public static void Main()  {

      // Creates and initializes a new Hashtable.
      Hashtable myHT = new Hashtable();
      myHT.Add( 0, "zero" );
      myHT.Add( 1, "one" );
      myHT.Add( 2, "two" );
      myHT.Add( 3, "three" );
      myHT.Add( 4, "four" );

      // Creates a synchronized wrapper around the Hashtable.
      Hashtable mySyncdHT = Hashtable.Synchronized( myHT );

      // Displays the sychronization status of both Hashtables.
      Console.WriteLine( "myHT is {0}.", myHT.IsSynchronized ? "synchronized" : "not synchronized" );
      Console.WriteLine( "mySyncdHT is {0}.", mySyncdHT.IsSynchronized ? "synchronized" : "not synchronized" );
   }
}
/*
This code produces the following output.

myHT is not synchronized.
mySyncdHT is synchronized.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void main()
{

   // Creates and initializes a new Hashtable.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( (int^)0, "zero" );
   myHT->Add( 1, "one" );
   myHT->Add( 2, "two" );
   myHT->Add( 3, "three" );
   myHT->Add( 4, "four" );

   // Creates a synchronized wrapper around the Hashtable.
   Hashtable^ mySyncdHT = Hashtable::Synchronized( myHT );

   // Displays the sychronization status of both Hashtables.
   Console::WriteLine( "myHT is {0}.", myHT->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
   Console::WriteLine( "mySyncdHT is {0}.", mySyncdHT->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
}

/*
 This code produces the following output.

 myHT is not synchronized.
 mySyncdHT is synchronized.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
IsSynchronized
SyncRoot


Hashtable 属性

Hashtable 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Hashtable 类

Hashtable 类型公开以下成员。

名称 说明
页首

参考

Hashtable 类
System.Collections 命名空间


Hashtable ..::.comparer 属性

Hashtable
.
.
::
.
comparer 属性
Hashtable 类

注意：此 API 现在已过时。

获取或设置要用于 Hashtable 的 IComparer。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Please use KeyComparer properties.")> _
Protected Property comparer As IComparer
    Get
    Set
[ObsoleteAttribute("Please use KeyComparer properties.")]
protected IComparer comparer { get; set; }
[ObsoleteAttribute(L"Please use KeyComparer properties.")]
protected:
property IComparer^ comparer {
    IComparer^ get ();
    void set (IComparer^ value);
}
[<ObsoleteAttribute("Please use KeyComparer properties.")>]
member comparer : IComparer with get, set

属性值

类型： System.Collections IComparer
要用于 Hashtable 的 IComparer。
异常 | 条件
ArgumentException | 该属性被设置为某个值，但哈希表是使用 IEqualityComparer 创建的。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
IComparer


Hashtable ..::.Count 属性

Hashtable
.
.
::
.
Count 属性
Hashtable 类

获取包含在 Hashtable 中的键/值对的数目。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Count As Integer
    Get
public virtual int Count { get; }
public:
virtual property int Count {
    int get ();
}
abstract Count : int
override Count : int

属性值

类型： System Int32
包含在 Hashtable 中的键/值对的数目。

实现

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间


Hashtable ..::.EqualityComparer 属性

Hashtable
.
.
::
.
EqualityComparer 属性
Hashtable 类

获取要用于 Hashtable 的 IEqualityComparer。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected ReadOnly Property EqualityComparer As IEqualityComparer
    Get
protected IEqualityComparer EqualityComparer { get; }
protected:
property IEqualityComparer^ EqualityComparer {
    IEqualityComparer^ get ();
}
member EqualityComparer : IEqualityComparer

属性值

类型： System.Collections IEqualityComparer
要用于 Hashtable 的 IEqualityComparer。
异常 | 条件
ArgumentException | 该属性被设置为某个值，但哈希表是使用 IHashCodeProvider 和 IComparer 创建的。

IEqualityComparer 同时包含比较器和哈希代码提供程序。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 中用作键的那些对象。 IEqualityComparer 同时包含比较器和哈希代码提供程序。如果在 Hashtable 构造函数中使用了 IEqualityComparer，则在重写 Object..::.GetHashCode 和 Object..::.Equals 方法时不需要在 Hashtable 中用作键的那些对象。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
Comparer
IEqualityComparer


Hashtable ..::.hcp 属性

Hashtable
.
.
::
.
hcp 属性
Hashtable 类

注意：此 API 现在已过时。

获取或设置可分配哈希代码的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ObsoleteAttribute("Please use EqualityComparer property.")> _
Protected Property hcp As IHashCodeProvider
    Get
    Set
[ObsoleteAttribute("Please use EqualityComparer property.")]
protected IHashCodeProvider hcp { get; set; }
[ObsoleteAttribute(L"Please use EqualityComparer property.")]
protected:
property IHashCodeProvider^ hcp {
    IHashCodeProvider^ get ();
    void set (IHashCodeProvider^ value);
}
[<ObsoleteAttribute("Please use EqualityComparer property.")>]
member hcp : IHashCodeProvider with get, set

属性值

类型： System.Collections IHashCodeProvider
可分配哈希代码的对象。
异常 | 条件
ArgumentException | 该属性被设置为某个值，但哈希表是使用 IEqualityComparer 创建的。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
IHashCodeProvider


Hashtable ..::.IsFixedSize 属性

Hashtable
.
.
::
.
IsFixedSize 属性
Hashtable 类

获取一个值，该值指示 Hashtable 是否具有固定大小。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsFixedSize As Boolean
    Get
public virtual bool IsFixedSize { get; }
public:
virtual property bool IsFixedSize {
    bool get ();
}
abstract IsFixedSize : bool
override IsFixedSize : bool

属性值

类型： System Boolean
如果 Hashtable 具有固定大小，则为 true；否则为 false。默认值为 false。 如果 Hashtable 具有固定大小，则为 true；否则为 false。默认值为 false。

实现

具有固定大小的集合在创建之后不能再添加或移除元素，但是允许修改现有元素。

固定大小的集合只是一个具有用于防止添加和移除元素的包装的集合；因此，如果更改基础集合（包括添加和移除元素），则固定大小的集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间


Hashtable ..::.IsReadOnly 属性

Hashtable
.
.
::
.
IsReadOnly 属性
Hashtable 类

获取一个值，该值指示 Hashtable 是否为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsReadOnly As Boolean
    Get
public virtual bool IsReadOnly { get; }
public:
virtual property bool IsReadOnly {
    bool get ();
}
abstract IsReadOnly : bool
override IsReadOnly : bool

属性值

类型： System Boolean
如果 Hashtable 为只读，则为 true；否则为 false。默认值为 false。 如果 Hashtable 为只读，则为 true；否则为 false。默认值为 false。

实现

只读集合在创建后就不能再添加、移除或修改元素。

只读集合只是一个具有用于防止修改的包装的集合；因此，如果更改基础集合，则只读集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间


Hashtable ..::.IsSynchronized 属性

Hashtable
.
.
::
.
IsSynchronized 属性
Hashtable 类

获取一个值，该值指示是否同步对 Hashtable 的访问（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsSynchronized As Boolean
    Get
public virtual bool IsSynchronized { get; }
public:
virtual property bool IsSynchronized {
    bool get ();
}
abstract IsSynchronized : bool
override IsSynchronized : bool

属性值

类型： System Boolean
如果对 Hashtable 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。 如果对 Hashtable 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。

实现

Hashtable 可以同时支持一个编写器和多个阅读器。若要支持多个编写器，所有操作必须通过由 Synchronized 方法返回的包装完成。 Hashtable 可以同时支持一个编写器和多个阅读器。若要支持多个编写器，所有操作必须通过由 Synchronized 方法返回的包装完成。

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例显示如何在整个枚举过程中使用 SyncRoot 锁定集合：

Dim myCollection As New Hashtable()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next
End SyncLock

Hashtable myCollection = new Hashtable();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Hashtable^ myCollection = gcnew Hashtable();
bool lockTaken = false;

try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

下面的示例演示如何同步 Hashtable、如何确定 Hashtable 是否同步以及如何使用同步的 Hashtable。

Imports System
Imports System.Collections

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Creates and initializes a new Hashtable.
        Dim myHT As New Hashtable()
        myHT.Add(0, "zero")
        myHT.Add(1, "one")
        myHT.Add(2, "two")
        myHT.Add(3, "three")
        myHT.Add(4, "four")

        ' Creates a synchronized wrapper around the Hashtable.
        Dim mySyncdHT As Hashtable = Hashtable.Synchronized(myHT)

        ' Displays the sychronization status of both Hashtables.
        Dim msg As String
        If myHT.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("myHT is {0}.", msg)
        If mySyncdHT.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySyncdHT is {0}.", msg)
    End Sub
End Class

' This code produces the following output.
'
' myHT is not synchronized.
' mySyncdHT is synchronized.

using System;
using System.Collections;
public class SamplesHashtable  {

   public static void Main()  {

      // Creates and initializes a new Hashtable.
      Hashtable myHT = new Hashtable();
      myHT.Add( 0, "zero" );
      myHT.Add( 1, "one" );
      myHT.Add( 2, "two" );
      myHT.Add( 3, "three" );
      myHT.Add( 4, "four" );

      // Creates a synchronized wrapper around the Hashtable.
      Hashtable mySyncdHT = Hashtable.Synchronized( myHT );

      // Displays the sychronization status of both Hashtables.
      Console.WriteLine( "myHT is {0}.", myHT.IsSynchronized ? "synchronized" : "not synchronized" );
      Console.WriteLine( "mySyncdHT is {0}.", mySyncdHT.IsSynchronized ? "synchronized" : "not synchronized" );
   }
}
/*
This code produces the following output.

myHT is not synchronized.
mySyncdHT is synchronized.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void main()
{

   // Creates and initializes a new Hashtable.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( (int^)0, "zero" );
   myHT->Add( 1, "one" );
   myHT->Add( 2, "two" );
   myHT->Add( 3, "three" );
   myHT->Add( 4, "four" );

   // Creates a synchronized wrapper around the Hashtable.
   Hashtable^ mySyncdHT = Hashtable::Synchronized( myHT );

   // Displays the sychronization status of both Hashtables.
   Console::WriteLine( "myHT is {0}.", myHT->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
   Console::WriteLine( "mySyncdHT is {0}.", mySyncdHT->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
}

/*
 This code produces the following output.

 myHT is not synchronized.
 mySyncdHT is synchronized.
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
Synchronized
SyncRoot


Hashtable ..::.Item 属性

Hashtable
.
.
::
.
Item 属性
Hashtable 类

获取或设置与指定的键相关联的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Property Item ( _
    key As Object _
) As Object
    Get
    Set
public virtual Object this[
    Object key
] { get; set; }
public:
virtual property Object^ Item[Object^ key] {
    Object^ get (Object^ key);
    void set (Object^ key, Object^ value);
}
abstract Item : Object with get, set
override Item : Object with get, set

参数

key
类型： System Object
要获取或设置其值的键。

属性值

类型： System Object
与指定的键相关联的值。如果未找到指定的键，尝试获取它将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），尝试设置它将使用指定的键创建新元素。 与指定的键相关联的值。如果未找到指定的键，尝试获取它将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），尝试设置它将使用指定的键创建新元素。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 设置该属性，而且 Hashtable 为只读。 - 或 - 设置该属性，集合中不存在 key，而且 Hashtable 具有固定大小。

通过使用下面的语法，此属性提供访问集合中特定元素的能力：myCollection[key]。

还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 Hashtable 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 Hashtable 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 Hashtable 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 Hashtable 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 还可以使用 Item 属性来添加新元素，方法是设置某个键的值，该值在 Hashtable 中不存在，例如，myCollection["myNonexistentKey"] = myValue。但是，如果指定的键已经存在于 Hashtable 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。

键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。若要区分由于未找到指定键而返回的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 和由于指定键的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 而返回的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），请使用 Contains 方法或 ContainsKey 方法确定列表中是否存在该键。 键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。若要区分由于未找到指定键而返回的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 和由于指定键的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 而返回的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），请使用 Contains 方法或 ContainsKey 方法确定列表中是否存在该键。

检索此属性值的运算复杂度是 O(1)；设置此属性的运算复杂度也是 O(1)。

C# 语言使用 this 关键字来定义索引器而不是通过实现 Item 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。 C# 语言使用 this 关键字来定义索引器而不是通过实现 Item 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
Add


Hashtable ..::.Keys 属性

Hashtable
.
.
::
.
Keys 属性
Hashtable 类

获取包含 Hashtable 中的键的 ICollection。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Keys As ICollection
    Get
public virtual ICollection Keys { get; }
public:
virtual property ICollection^ Keys {
    ICollection^ get ();
}
abstract Keys : ICollection
override Keys : ICollection

属性值

类型： System.Collections ICollection
包含 Hashtable 中的键的 ICollection。

实现

未指定 ICollection 中键的顺序，但是它与由 Values 方法返回的 ICollection 中的相关联值的顺序相同。

返回的 ICollection 不是静态副本；相反，ICollection 反向引用原始 Hashtable 中的键。因此，对 Hashtable 的更改将继续反映到 ICollection 中。 返回的 ICollection 不是静态副本；相反，ICollection 反向引用原始 Hashtable 中的键。因此，对 Hashtable 的更改将继续反映到 ICollection 中。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
ICollection
Values


Hashtable ..::.SyncRoot 属性

Hashtable
.
.
::
.
SyncRoot 属性
Hashtable 类

获取可用于同步 Hashtable 访问的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property SyncRoot As Object
    Get
public virtual Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get ();
}
abstract SyncRoot : Object
override SyncRoot : Object

属性值

类型： System Object
可用于同步对 Hashtable 的访问的对象。

实现

若要创建 Hashtable 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Hashtable 同步版本。同步代码必须在 Hashtable 的 SyncRoot 上执行操作，而不是直接在 Hashtable 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Hashtable 对象。 若要创建 Hashtable 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Hashtable 同步版本。同步代码必须在 Hashtable 的 SyncRoot 上执行操作，而不是直接在 Hashtable 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Hashtable 对象。 若要创建 Hashtable 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Hashtable 同步版本。同步代码必须在 Hashtable 的 SyncRoot 上执行操作，而不是直接在 Hashtable 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Hashtable 对象。 若要创建 Hashtable 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Hashtable 同步版本。同步代码必须在 Hashtable 的 SyncRoot 上执行操作，而不是直接在 Hashtable 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Hashtable 对象。 若要创建 Hashtable 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Hashtable 同步版本。同步代码必须在 Hashtable 的 SyncRoot 上执行操作，而不是直接在 Hashtable 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Hashtable 对象。

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例显示如何在整个枚举过程中使用 SyncRoot 锁定集合：

Dim myCollection As New Hashtable()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next
End SyncLock

Hashtable myCollection = new Hashtable();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Hashtable^ myCollection = gcnew Hashtable();
bool lockTaken = false;

try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
IsSynchronized
Synchronized


Hashtable ..::.Values 属性

Hashtable
.
.
::
.
Values 属性
Hashtable 类

获取包含 Hashtable 中的值的 ICollection。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Values As ICollection
    Get
public virtual ICollection Values { get; }
public:
virtual property ICollection^ Values {
    ICollection^ get ();
}
abstract Values : ICollection
override Values : ICollection

属性值

类型： System.Collections ICollection
一个 ICollection，它包含 Hashtable 中的值。

实现

未指定 ICollection 中值的顺序，但它与由 Keys 方法返回的 ICollection 中的相关联键的顺序相同。

返回的 ICollection 不是静态副本；相反，ICollection 反向引用原始 Hashtable 中的值。因此，对 Hashtable 的更改将继续反映到 ICollection 中。 返回的 ICollection 不是静态副本；相反，ICollection 反向引用原始 Hashtable 中的值。因此，对 Hashtable 的更改将继续反映到 ICollection 中。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Hashtable 类
Hashtable 成员
System.Collections 命名空间
ICollection
Keys


ICollection 接口

ICollection 接口
成员

定义所有非泛型集合的大小、枚举器和同步方法。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface ICollection _
    Inherits IEnumerable
[ComVisibleAttribute(true)]
public interface ICollection : IEnumerable
[ComVisibleAttribute(true)]
public interface class ICollection : IEnumerable
[<ComVisibleAttribute(true)>]
type ICollection =
    interface
        interface IEnumerable
    end

ICollection 接口是 System.Collections 命名空间中类的基接口。

ICollection 接口扩展 IEnumerable；IDictionary 和 IList 则是扩展 ICollection 的更为专用的接口。IDictionary 实现是键/值对的集合，如 Hashtable 类。IList 实现是值的集合，其成员可通过索引访问，如 ArrayList 类。 ICollection 接口扩展 IEnumerable；IDictionary 和 IList 则是扩展 ICollection 的更为专用的接口。IDictionary 实现是键/值对的集合，如 Hashtable 类。IList 实现是值的集合，其成员可通过索引访问，如 ArrayList 类。 ICollection 接口扩展 IEnumerable；IDictionary 和 IList 则是扩展 ICollection 的更为专用的接口。IDictionary 实现是键/值对的集合，如 Hashtable 类。IList 实现是值的集合，其成员可通过索引访问，如 ArrayList 类。

某些集合（如 Queue 类和 Stack 类）限制对其元素的访问，它们直接实现 ICollection 接口。

如果 IDictionary 接口和 IList 接口都不能满足所需集合的要求，则从 ICollection 接口派生新集合类以提高灵活性。

有关此接口的泛型版本，请参见 System.Collections.Generic..::.ICollection<(Of <(T>)>)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ICollection 成员
System.Collections 命名空间
IDictionary
IList
System.Collections.Generic ICollection T


ICollection 成员

ICollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ICollection 接口

定义所有非泛型集合的大小、枚举器和同步方法。

ICollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ICollection 接口
System.Collections 命名空间


ICollection 方法

ICollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ICollection 接口

ICollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ICollection 接口
System.Collections 命名空间


ICollection ..::.CopyTo 方法

ICollection
.
.
::
.
CopyTo 方法
ICollection 接口

从特定的 Array 索引处开始，将 ICollection 的元素复制到一个 Array 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
void CopyTo(
    Array array,
    int index
)
void CopyTo(
    Array^ array,
    int index
)
abstract CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
作为从 ICollection 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 ICollection 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
index
类型： System Int32
array 中从零开始的索引，将在此处开始复制。
异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 ICollection 中的元素数大于从 index 到目标 array 结尾处之间的可用空间。 - 或 - 无法自动将源 ICollection 的类型强制转换为目标 array 的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ICollection 接口
ICollection 成员
System.Collections 命名空间


ICollection 属性

ICollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ICollection 接口

ICollection 类型公开以下成员。

名称 说明
页首

参考

ICollection 接口
System.Collections 命名空间


ICollection ..::.Count 属性

ICollection
.
.
::
.
Count 属性
ICollection 接口

获取 ICollection 中包含的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property Count As Integer
    Get
int Count { get; }
property int Count {
    int get ();
}
abstract Count : int

属性值

类型： System Int32
ICollection 中包含的元素数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ICollection 接口
ICollection 成员
System.Collections 命名空间


ICollection ..::.IsSynchronized 属性

ICollection
.
.
::
.
IsSynchronized 属性
ICollection 接口

获取一个值，该值指示是否同步对 ICollection 的访问（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property IsSynchronized As Boolean
    Get
bool IsSynchronized { get; }
property bool IsSynchronized {
    bool get ();
}
abstract IsSynchronized : bool

属性值

类型： System Boolean
如果对 ICollection 的访问是同步的（线程安全），则为 true；否则为 false。

SyncRoot 返回一个对象，该对象可用于同步对 ICollection 的访问。

System.Collections 命名空间中的大多数集合类也实现 Synchronized 方法，该方法在基础集合周围提供同步的包装。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 属性锁定集合。

Dim myCollection As ICollection = someCollection
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

ICollection^ myCollection = someCollection;
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ICollection 接口
ICollection 成员
System.Collections 命名空间
SyncRoot


ICollection ..::.SyncRoot 属性

ICollection
.
.
::
.
SyncRoot 属性
ICollection 接口

获取一个可用于同步对 ICollection 的访问的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property SyncRoot As Object
    Get
Object SyncRoot { get; }
property Object^ SyncRoot {
    Object^ get ();
}
abstract SyncRoot : Object

属性值

类型： System Object
可用于同步对 ICollection 的访问的对象。

对于其基础存储区不可供公共使用的集合，预期的实现是返回当前实例。请注意，对于包装了其他集合的集合，指向当前实例的指针可能还不够；这些集合应返回基础集合的 SyncRoot 属性。 对于其基础存储区不可供公共使用的集合，预期的实现是返回当前实例。请注意，对于包装了其他集合的集合，指向当前实例的指针可能还不够；这些集合应返回基础集合的 SyncRoot 属性。

System.Collections 命名空间中的大多数集合类还实现了 Synchronized 方法，该方法对基础集合提供同步的包装。不过，派生类可使用 SyncRoot 属性来提供自己同步版本的集合。同步代码必须对集合的 SyncRoot 属性执行操作，而不是直接对集合执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合实例的其他线程保持适当的同步。 System.Collections 命名空间中的大多数集合类还实现了 Synchronized 方法，该方法对基础集合提供同步的包装。不过，派生类可使用 SyncRoot 属性来提供自己同步版本的集合。同步代码必须对集合的 SyncRoot 属性执行操作，而不是直接对集合执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合实例的其他线程保持适当的同步。 System.Collections 命名空间中的大多数集合类还实现了 Synchronized 方法，该方法对基础集合提供同步的包装。不过，派生类可使用 SyncRoot 属性来提供自己同步版本的集合。同步代码必须对集合的 SyncRoot 属性执行操作，而不是直接对集合执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合实例的其他线程保持适当的同步。 System.Collections 命名空间中的大多数集合类还实现了 Synchronized 方法，该方法对基础集合提供同步的包装。不过，派生类可使用 SyncRoot 属性来提供自己同步版本的集合。同步代码必须对集合的 SyncRoot 属性执行操作，而不是直接对集合执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合实例的其他线程保持适当的同步。 System.Collections 命名空间中的大多数集合类还实现了 Synchronized 方法，该方法对基础集合提供同步的包装。不过，派生类可使用 SyncRoot 属性来提供自己同步版本的集合。同步代码必须对集合的 SyncRoot 属性执行操作，而不是直接对集合执行操作。这确保了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改集合实例的其他线程保持适当的同步。

如果集合没有 Synchronized 方法，则 SyncRoot 的预计用法如下所示：

Dim myCollection As ICollection = someCollection
SyncLock myCollection.SyncRoot
    ' Some operation on the collection, which is now thread safe.
End SyncLock

ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
    // Some operation on the collection, which is now thread safe.
}

ICollection^ myCollection = someCollection;
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    // Some operation on the collection, which is now thread safe.
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 属性锁定集合。

Dim myCollection As ICollection = someCollection
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

ICollection^ myCollection = someCollection;
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ICollection 接口
ICollection 成员
System.Collections 命名空间
IsSynchronized


IComparer 接口

IComparer 接口
成员

公开一种比较两个对象的方法。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IComparer
[ComVisibleAttribute(true)]
public interface IComparer
[ComVisibleAttribute(true)]
public interface class IComparer
[<ComVisibleAttribute(true)>]
type IComparer =  interface end

此接口与 Array..::.Sort 和 Array..::.BinarySearch 方法一起使用。它提供一种自定义集合排序顺序的方法。 此接口与 Array..::.Sort 和 Array..::.BinarySearch 方法一起使用。它提供一种自定义集合排序顺序的方法。

此接口的默认实现为 Comparer 类。有关此接口的泛型版本，请参见 System.Collections.Generic..::.IComparer<(Of <(T>)>)。 此接口的默认实现为 Comparer 类。有关此接口的泛型版本，请参见 System.Collections.Generic..::.IComparer<(Of <(T>)>)。

下面的代码示例演示如何使用 IComparer 接口对 ArrayList 对象进行排序。在此示例中，通过使用 CaseInsensitiveComparer 类将 ArrayList 中内容的顺序反转来实现 IComparer 接口。 下面的代码示例演示如何使用 IComparer 接口对 ArrayList 对象进行排序。在此示例中，通过使用 CaseInsensitiveComparer 类将 ArrayList 中内容的顺序反转来实现 IComparer 接口。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Public Function Compare( ByVal x As Object, ByVal y As Object) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new ArrayList.
      Dim myAL As New ArrayList()
      myAL.Add("The")
      myAL.Add("quick")
      myAL.Add("brown")
      myAL.Add("fox")
      myAL.Add("jumps")
      myAL.Add("over")
      myAL.Add("the")
      myAL.Add("lazy")
      myAL.Add("dog")

      ' Displays the values of the ArrayList.
      Console.WriteLine("The ArrayList initially contains the following values:")
      PrintIndexAndValues(myAL)

      ' Sorts the values of the ArrayList using the default comparer.
      myAL.Sort()
      Console.WriteLine("After sorting with the default comparer:")
      PrintIndexAndValues(myAL)

      ' Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      Dim myComparer = New myReverserClass()
      myAL.Sort(myComparer)
      Console.WriteLine("After sorting with the reverse case-insensitive comparer:")
      PrintIndexAndValues(myAL)

   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myList As IEnumerable)
      Dim i As Integer = 0
      Dim obj As [Object]
      For Each obj In  myList
         Console.WriteLine(vbTab + "[{0}]:" + vbTab + "{1}", i, obj)
         i = i + 1
      Next obj
      Console.WriteLine()
   End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

'This code produces the following output.
'The ArrayList initially contains the following values:
'        [0]:    The
'        [1]:    quick
'        [2]:    brown
'        [3]:    fox
'        [4]:    jumps
'        [5]:    over
'        [6]:    the
'        [7]:    lazy
'        [8]:    dog
'
'After sorting with the default comparer:
'        [0]:    brown
'        [1]:    dog
'        [2]:    fox
'        [3]:    jumps
'        [4]:    lazy
'        [5]:    over
'        [6]:    quick
'        [7]:    the
'        [8]:    The
'
'After sorting with the reverse case-insensitive comparer:
'        [0]:    the
'        [1]:    The
'        [2]:    quick
'        [3]:    over
'        [4]:    lazy
'        [5]:    jumps
'        [6]:    fox
'        [7]:    dog
'        [8]:    brown

using System;
using System.Collections;

public class SamplesArrayList  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the default comparer.
      myAL.Sort();
      Console.WriteLine( "After sorting with the default comparer:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      IComparer myComparer = new myReverserClass();
      myAL.Sort( myComparer );
      Console.WriteLine( "After sorting with the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myAL );

   }

   public static void PrintIndexAndValues( IEnumerable myList )  {
      int i = 0;
      foreach ( Object obj in myList )
         Console.WriteLine( "\t[{0}]:\t{1}", i++, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.
The ArrayList initially contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumps
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting with the default comparer:
        [0]:    brown
        [1]:    dog
        [2]:    fox
        [3]:    jumps
        [4]:    lazy
        [5]:    over
        [6]:    quick
        [7]:    the
        [8]:    The

After sorting with the reverse case-insensitive comparer:
        [0]:    the
        [1]:    The
        [2]:    quick
        [3]:    over
        [4]:    lazy
        [5]:    jumps
        [6]:    fox
        [7]:    dog
        [8]:    brown
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
ref class myReverserClass: public IComparer
{
private:

   // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }

};

int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following values:" );
   PrintIndexAndValues( myAL );

   // Sorts the values of the ArrayList using the default comparer.
   myAL->Sort();
   Console::WriteLine( "After sorting with the default comparer:" );
   PrintIndexAndValues( myAL );

   // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
   IComparer^ myComparer = gcnew myReverserClass;
   myAL->Sort( myComparer );
   Console::WriteLine( "After sorting with the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myAL );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "\t[{0}]:\t{1}", i++, obj );
   }

   Console::WriteLine();
}

/*
This code produces the following output.
The ArrayList initially contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumps
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting with the default comparer:
        [0]:    brown
        [1]:    dog
        [2]:    fox
        [3]:    jumps
        [4]:    lazy
        [5]:    over
        [6]:    quick
        [7]:    the
        [8]:    The

After sorting with the reverse case-insensitive comparer:
        [0]:    the
        [1]:    The
        [2]:    quick
        [3]:    over
        [4]:    lazy
        [5]:    jumps
        [6]:    fox
        [7]:    dog
        [8]:    brown
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IComparer 成员
System.Collections 命名空间
Comparer
System.Collections.Generic IComparer T
Thread CurrentCulture
System.Globalization CompareInfo
System.Globalization CultureInfo


IComparer 成员

IComparer 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IComparer 接口

公开一种比较两个对象的方法。

IComparer 类型公开以下成员。

名称 说明
页首

参考

IComparer 接口
System.Collections 命名空间


IComparer 方法

IComparer 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IComparer 接口

IComparer 类型公开以下成员。

名称 说明
页首

参考

IComparer 接口
System.Collections 命名空间


IComparer ..::.Compare 方法

IComparer
.
.
::
.
Compare 方法
IComparer 接口

比较两个对象并返回一个值，指示一个对象是小于、等于还是大于另一个对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function Compare ( _ x As Object, _ y As Object _ ) As Integer
int Compare( Object x, Object y )
int Compare( Object^ x, Object^ y )
abstract Compare : x:Object * y:Object -> int
参数
x
类型： System Object
要比较的第一个对象。
y
类型： System Object
要比较的第二个对象。
返回值
类型： System Int32
一个带符号整数，它指示
x
与
y
的相对值，如下表所示。
值
含义
小于零
x
小于
y
。
零
x
等于
y
。
大于零
x
大于
y
。
异常 | 条件
ArgumentException | x 和 y 都不实现 IComparable 接口。 - 或 - x 和 y 的类型不同，它们都无法处理与另一个进行的比较。

首选实现是使用这些参数之一的 CompareTo 方法。

当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。 当使用 IComparable 时，允许将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 与任何类型进行比较，而且不会生成异常。排序时，nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 被视为小于任何其他对象。

下面的代码示例演示如何使用 IComparer 接口对 ArrayList 对象进行排序。在此示例中，通过使用 CaseInsensitiveComparer 类将 ArrayList 中内容的顺序反转来实现 IComparer 接口。 下面的代码示例演示如何使用 IComparer 接口对 ArrayList 对象进行排序。在此示例中，通过使用 CaseInsensitiveComparer 类将 ArrayList 中内容的顺序反转来实现 IComparer 接口。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesArrayList

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Public Function Compare( ByVal x As Object, ByVal y As Object) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new ArrayList.
      Dim myAL As New ArrayList()
      myAL.Add("The")
      myAL.Add("quick")
      myAL.Add("brown")
      myAL.Add("fox")
      myAL.Add("jumps")
      myAL.Add("over")
      myAL.Add("the")
      myAL.Add("lazy")
      myAL.Add("dog")

      ' Displays the values of the ArrayList.
      Console.WriteLine("The ArrayList initially contains the following values:")
      PrintIndexAndValues(myAL)

      ' Sorts the values of the ArrayList using the default comparer.
      myAL.Sort()
      Console.WriteLine("After sorting with the default comparer:")
      PrintIndexAndValues(myAL)

      ' Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      Dim myComparer = New myReverserClass()
      myAL.Sort(myComparer)
      Console.WriteLine("After sorting with the reverse case-insensitive comparer:")
      PrintIndexAndValues(myAL)

   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myList As IEnumerable)
      Dim i As Integer = 0
      Dim obj As [Object]
      For Each obj In  myList
         Console.WriteLine(vbTab + "[{0}]:" + vbTab + "{1}", i, obj)
         i = i + 1
      Next obj
      Console.WriteLine()
   End Sub 'PrintIndexAndValues

End Class 'SamplesArrayList

'This code produces the following output.
'The ArrayList initially contains the following values:
'        [0]:    The
'        [1]:    quick
'        [2]:    brown
'        [3]:    fox
'        [4]:    jumps
'        [5]:    over
'        [6]:    the
'        [7]:    lazy
'        [8]:    dog
'
'After sorting with the default comparer:
'        [0]:    brown
'        [1]:    dog
'        [2]:    fox
'        [3]:    jumps
'        [4]:    lazy
'        [5]:    over
'        [6]:    quick
'        [7]:    the
'        [8]:    The
'
'After sorting with the reverse case-insensitive comparer:
'        [0]:    the
'        [1]:    The
'        [2]:    quick
'        [3]:    over
'        [4]:    lazy
'        [5]:    jumps
'        [6]:    fox
'        [7]:    dog
'        [8]:    brown

using System;
using System.Collections;

public class SamplesArrayList  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "The" );
      myAL.Add( "quick" );
      myAL.Add( "brown" );
      myAL.Add( "fox" );
      myAL.Add( "jumps" );
      myAL.Add( "over" );
      myAL.Add( "the" );
      myAL.Add( "lazy" );
      myAL.Add( "dog" );

      // Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the default comparer.
      myAL.Sort();
      Console.WriteLine( "After sorting with the default comparer:" );
      PrintIndexAndValues( myAL );

      // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      IComparer myComparer = new myReverserClass();
      myAL.Sort( myComparer );
      Console.WriteLine( "After sorting with the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myAL );

   }

   public static void PrintIndexAndValues( IEnumerable myList )  {
      int i = 0;
      foreach ( Object obj in myList )
         Console.WriteLine( "\t[{0}]:\t{1}", i++, obj );
      Console.WriteLine();
   }

}

/*
This code produces the following output.
The ArrayList initially contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumps
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting with the default comparer:
        [0]:    brown
        [1]:    dog
        [2]:    fox
        [3]:    jumps
        [4]:    lazy
        [5]:    over
        [6]:    quick
        [7]:    the
        [8]:    The

After sorting with the reverse case-insensitive comparer:
        [0]:    the
        [1]:    The
        [2]:    quick
        [3]:    over
        [4]:    lazy
        [5]:    jumps
        [6]:    fox
        [7]:    dog
        [8]:    brown
*/

using namespace System;
using namespace System::Collections;
void PrintIndexAndValues( IEnumerable^ myList );
ref class myReverserClass: public IComparer
{
private:

   // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
   virtual int Compare( Object^ x, Object^ y ) = IComparer::Compare
   {
      return ((gcnew CaseInsensitiveComparer)->Compare( y, x ));
   }

};

int main()
{

   // Creates and initializes a new ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "The" );
   myAL->Add( "quick" );
   myAL->Add( "brown" );
   myAL->Add( "fox" );
   myAL->Add( "jumps" );
   myAL->Add( "over" );
   myAL->Add( "the" );
   myAL->Add( "lazy" );
   myAL->Add( "dog" );

   // Displays the values of the ArrayList.
   Console::WriteLine( "The ArrayList initially contains the following values:" );
   PrintIndexAndValues( myAL );

   // Sorts the values of the ArrayList using the default comparer.
   myAL->Sort();
   Console::WriteLine( "After sorting with the default comparer:" );
   PrintIndexAndValues( myAL );

   // Sorts the values of the ArrayList using the reverse case-insensitive comparer.
   IComparer^ myComparer = gcnew myReverserClass;
   myAL->Sort( myComparer );
   Console::WriteLine( "After sorting with the reverse case-insensitive comparer:" );
   PrintIndexAndValues( myAL );
}

void PrintIndexAndValues( IEnumerable^ myList )
{
   int i = 0;
   IEnumerator^ myEnum = myList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::WriteLine( "\t[{0}]:\t{1}", i++, obj );
   }

   Console::WriteLine();
}

/*
This code produces the following output.
The ArrayList initially contains the following values:
        [0]:    The
        [1]:    quick
        [2]:    brown
        [3]:    fox
        [4]:    jumps
        [5]:    over
        [6]:    the
        [7]:    lazy
        [8]:    dog

After sorting with the default comparer:
        [0]:    brown
        [1]:    dog
        [2]:    fox
        [3]:    jumps
        [4]:    lazy
        [5]:    over
        [6]:    quick
        [7]:    the
        [8]:    The

After sorting with the reverse case-insensitive comparer:
        [0]:    the
        [1]:    The
        [2]:    quick
        [3]:    over
        [4]:    lazy
        [5]:    jumps
        [6]:    fox
        [7]:    dog
        [8]:    brown
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IComparer 接口
IComparer 成员
System.Collections 命名空间
IComparable
Thread CurrentCulture
System.Globalization CompareInfo
System.Globalization CultureInfo


IDictionary 接口

IDictionary 接口
成员

表示键/值对的非通用集合。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IDictionary _
    Inherits ICollection, IEnumerable
[ComVisibleAttribute(true)]
public interface IDictionary : ICollection,
    IEnumerable
[ComVisibleAttribute(true)]
public interface class IDictionary : ICollection,
    IEnumerable
[<ComVisibleAttribute(true)>]
type IDictionary =
    interface
        interface ICollection
        interface IEnumerable
    end

IDictionary 接口是键/值对的非通用集合的基接口。有关该接口的泛型版本的信息，请参见 System.Collections.Generic..::.IDictionary<(Of <(TKey, TValue>)>)。 IDictionary 接口是键/值对的非通用集合的基接口。有关该接口的泛型版本的信息，请参见 System.Collections.Generic..::.IDictionary<(Of <(TKey, TValue>)>)。

每个元素都是一个存储在 DictionaryEntry 对象中的键/值对。

每一对都必须有唯一的键。实现在是否允许键为 null 方面有所不同。此值可以为 null，并且不必是唯一的。IDictionary 接口允许对所包含的键和值进行枚举，但这并不意味着任何特定的排序顺序。 每一对都必须有唯一的键。实现在是否允许键为 null 方面有所不同。此值可以为 null，并且不必是唯一的。IDictionary 接口允许对所包含的键和值进行枚举，但这并不意味着任何特定的排序顺序。 每一对都必须有唯一的键。实现在是否允许键为 null 方面有所不同。此值可以为 null，并且不必是唯一的。IDictionary 接口允许对所包含的键和值进行枚举，但这并不意味着任何特定的排序顺序。 每一对都必须有唯一的键。实现在是否允许键为 null 方面有所不同。此值可以为 null，并且不必是唯一的。IDictionary 接口允许对所包含的键和值进行枚举，但这并不意味着任何特定的排序顺序。

IDictionary 实现有三种类别：只读、固定大小、可变大小。无法修改只读 IDictionary 对象。固定大小的 IDictionary 对象不允许添加或移除元素，但允许修改现有元素。可变大小的 IDictionary 对象允许添加、移除和修改元素。 IDictionary 实现有三种类别：只读、固定大小、可变大小。无法修改只读 IDictionary 对象。固定大小的 IDictionary 对象不允许添加或移除元素，但允许修改现有元素。可变大小的 IDictionary 对象允许添加、移除和修改元素。 IDictionary 实现有三种类别：只读、固定大小、可变大小。无法修改只读 IDictionary 对象。固定大小的 IDictionary 对象不允许添加或移除元素，但允许修改现有元素。可变大小的 IDictionary 对象允许添加、移除和修改元素。 IDictionary 实现有三种类别：只读、固定大小、可变大小。无法修改只读 IDictionary 对象。固定大小的 IDictionary 对象不允许添加或移除元素，但允许修改现有元素。可变大小的 IDictionary 对象允许添加、移除和修改元素。

C# 语言中的 foreach 语句（在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 IDictionary 对象的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 IDictionary 对象的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 IDictionary 对象的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual Basic 中为 For Each）需要集合中每个元素的类型。由于 IDictionary 对象的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如：

For Each de As DictionaryEntry In myDictionary
    '...
Next de

foreach (DictionaryEntry de in myDictionary)
{
    //...
}

for each (DictionaryEntry de in myDictionary)
{
    //...
}

foreach 语句是对枚举数的包装，它只允许从集合中读取，不允许写入集合。

对实现者的说明

实现类必须有一种方式来对键进行比较。

下面的代码示例演示如何定义实现 IDictionary 接口的简单字典类。

Imports System
Imports System.Collections

' This class implements a simple dictionary using an array of DictionaryEntry objects (key/value pairs).
Public Class SimpleDictionary
    Implements IDictionary

    ' The array of items
    Dim items() As DictionaryEntry
    Dim ItemsInUse As Integer = 0

    ' Construct the SimpleDictionary with the desired number of items.
    ' The number of items cannot change for the life time of this SimpleDictionary.
    Public Sub New(ByVal numItems As Integer)
        items = New DictionaryEntry(numItems - 1) {}
    End Sub

    ' IDictionary Members
    Public ReadOnly Property IsReadOnly() As Boolean Implements IDictionary.IsReadOnly
        Get
            Return False
        End Get
    End Property

    Public Function Contains(ByVal key As Object) As Boolean Implements IDictionary.Contains
        Dim index As Integer
        Return TryGetIndexOfKey(key, index)
    End Function

    Public ReadOnly Property IsFixedSize() As Boolean Implements IDictionary.IsFixedSize
        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal key As Object) Implements IDictionary.Remove
        If key = Nothing Then
            Throw New ArgumentNullException("key")
        End If
        ' Try to find the key in the DictionaryEntry array
        Dim index As Integer
        If TryGetIndexOfKey(key, index) Then

            ' If the key is found, slide all the items up.
            Array.Copy(items, index + 1, items, index, (ItemsInUse - index) - 1)
            ItemsInUse = ItemsInUse - 1
        Else

            ' If the key is not in the dictionary, just return.
        End If
    End Sub

    Public Sub Clear() Implements IDictionary.Clear
        ItemsInUse = 0
    End Sub

    Public Sub Add(ByVal key As Object, ByVal value As Object) Implements IDictionary.Add

        ' Add the new key/value pair even if this key already exists in the dictionary.
        If ItemsInUse = items.Length Then
            Throw New InvalidOperationException("The dictionary cannot hold any more items.")
        End If
        items(ItemsInUse) = New DictionaryEntry(key, value)
        ItemsInUse = ItemsInUse + 1
    End Sub

    Public ReadOnly Property Keys() As ICollection Implements IDictionary.Keys
        Get

            ' Return an array where each item is a key.
            ' Note: Declaring keyArray() to have a size of ItemsInUse - 1
            '       ensures that the array is properly sized, in VB.NET
            '       declaring an array of size N creates an array with
            '       0 through N elements, including N, as opposed to N - 1
            '       which is the default behavior in C# and C++.
            Dim keyArray() As Object = New Object(ItemsInUse - 1) {}
            Dim n As Integer
            For n = 0 To ItemsInUse - 1
                keyArray(n) = items(n).Key
            Next n

            Return keyArray
        End Get
    End Property

    Public ReadOnly Property Values() As ICollection Implements IDictionary.Values
        Get
            ' Return an array where each item is a value.
            Dim valueArray() As Object = New Object(ItemsInUse - 1) {}
            Dim n As Integer
            For n = 0 To ItemsInUse - 1
                valueArray(n) = items(n).Value
            Next n

            Return valueArray
        End Get
    End Property

    Public Property Item(ByVal key As Object) As Object Implements IDictionary.Item
        Get

            ' If this key is in the dictionary, return its value.
            Dim index As Integer
            If TryGetIndexOfKey(key, index) Then

                ' The key was found return its value.
                Return items(index).Value
            Else

                ' The key was not found return null.
                Return Nothing
            End If
        End Get

        Set(ByVal value As Object)
            ' If this key is in the dictionary, change its value.
            Dim index As Integer
            If TryGetIndexOfKey(key, index) Then

                ' The key was found change its value.
                items(index).Value = value
            Else

                ' This key is not in the dictionary add this key/value pair.
                Add(key, value)
            End If
        End Set
    End Property

    Private Function TryGetIndexOfKey(ByVal key As Object, ByRef index As Integer) As Boolean
        For index = 0 To ItemsInUse - 1
            ' If the key is found, return true (the index is also returned).
            If items(index).Key.Equals(key) Then
                Return True
            End If
        Next index

        ' Key not found, return false (index should be ignored by the caller).
        Return False
    End Function

    Private Class SimpleDictionaryEnumerator
        Implements IDictionaryEnumerator

        ' A copy of the SimpleDictionary object's key/value pairs.
        Dim items() As DictionaryEntry
        Dim index As Integer = -1

        Public Sub New(ByVal sd As SimpleDictionary)
            ' Make a copy of the dictionary entries currently in the SimpleDictionary object.
            items = New DictionaryEntry(sd.Count - 1) {}
            Array.Copy(sd.items, 0, items, 0, sd.Count)
        End Sub

        ' Return the current item.
        Public ReadOnly Property Current() As Object Implements IDictionaryEnumerator.Current
            Get
                ValidateIndex()
                Return items(index)
            End Get
        End Property

        ' Return the current dictionary entry.
        Public ReadOnly Property Entry() As DictionaryEntry Implements IDictionaryEnumerator.Entry
            Get
                Return Current
            End Get
        End Property

        ' Return the key of the current item.
        Public ReadOnly Property Key() As Object Implements IDictionaryEnumerator.Key
            Get
                ValidateIndex()
                Return items(index).Key
            End Get
        End Property

        ' Return the value of the current item.
        Public ReadOnly Property Value() As Object Implements IDictionaryEnumerator.Value
            Get
                ValidateIndex()
                Return items(index).Value
            End Get
        End Property

        ' Advance to the next item.
        Public Function MoveNext() As Boolean Implements IDictionaryEnumerator.MoveNext
            If index < items.Length - 1 Then
                index = index + 1
                Return True
            End If

            Return False
        End Function

        ' Validate the enumeration index and throw an exception if the index is out of range.
        Private Sub ValidateIndex()
            If index < 0 Or index >= items.Length Then
                Throw New InvalidOperationException("Enumerator is before or after the collection.")
            End If
        End Sub

        ' Reset the index to restart the enumeration.
        Public Sub Reset() Implements IDictionaryEnumerator.Reset
            index = -1
        End Sub

    End Class

    Public Function GetEnumerator() As IDictionaryEnumerator Implements IDictionary.GetEnumerator

        'Construct and return an enumerator.
        Return New SimpleDictionaryEnumerator(Me)
    End Function

    ' ICollection Members
    Public ReadOnly Property IsSynchronized() As Boolean Implements IDictionary.IsSynchronized
        Get
            Return False
        End Get
    End Property

    Public ReadOnly Property SyncRoot() As Object Implements IDictionary.SyncRoot
        Get
            Throw New NotImplementedException()
        End Get
    End Property

    Public ReadOnly Property Count() As Integer Implements IDictionary.Count
        Get
            Return ItemsInUse
        End Get
    End Property

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements IDictionary.CopyTo
        Throw New NotImplementedException()
    End Sub

    ' IEnumerable Members
    Public Function GetEnumerator1() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Construct and return an enumerator.
        Return Me.GetEnumerator()
    End Function
End Class

Public NotInheritable Class App
    Public Shared Sub Main()
        ' Create a dictionary that contains no more than three entries.
        Dim d As IDictionary = New SimpleDictionary(3)

        ' Add three people and their ages to the dictionary.
        d.Add("Jeff", 40)
        d.Add("Kristin", 34)
        d.Add("Aidan", 1)

        Console.WriteLine("Number of elements in dictionary = {0}", d.Count)

        Console.WriteLine("Does dictionary contain 'Jeff'? {0}", d.Contains("Jeff"))
        Console.WriteLine("Jeff's age is {0}", d("Jeff"))

        ' Display every entry's key and value.
        Dim de As DictionaryEntry
        For Each de In d
            Console.WriteLine("{0} is {1} years old.", de.Key, de.Value)
        Next

        ' Remove an entry that exists.
        d.Remove("Jeff")

        ' Remove an entry that does not exist, but do not throw an exception.
        d.Remove("Max")

        ' Show the names (keys) of the people in the dictionary.
        Dim s As String

        For Each s In d.Keys
            Console.WriteLine(s)
        Next

        ' Show the ages (values) of the people in the dictionary.
        Dim age As Integer
        For Each age In d.Values
            Console.WriteLine(age)
        Next

    End Sub
End Class

' This code produces the following output.
'
' Number of elements in dictionary = 3
' Does dictionary contain 'Jeff'? True
' Jeff's age is 40
' Jeff is 40 years old.
' Kristin is 34 years old.
' Aidan is 1 years old.
' Kristin
' Aidan
' 34
' 1

using System;
using System.Collections;

// This class implements a simple dictionary using an array of DictionaryEntry objects (key/value pairs).
public class SimpleDictionary : IDictionary
{
    // The array of items
    private DictionaryEntry[] items;
    private Int32 ItemsInUse = 0;

    // Construct the SimpleDictionary with the desired number of items.
    // The number of items cannot change for the life time of this SimpleDictionary.
    public SimpleDictionary(Int32 numItems)
    {
        items = new DictionaryEntry[numItems];
    }

    #region IDictionary Members
    public bool IsReadOnly { get { return false; } }
    public bool Contains(object key)
    {
       Int32 index;
       return TryGetIndexOfKey(key, out index);
    }
    public bool IsFixedSize { get { return false; } }
    public void Remove(object key)
    {
        if (key == null) throw new ArgumentNullException("key");
        // Try to find the key in the DictionaryEntry array
        Int32 index;
        if (TryGetIndexOfKey(key, out index))
        {
            // If the key is found, slide all the items up.
            Array.Copy(items, index + 1, items, index, ItemsInUse - index - 1);
            ItemsInUse--;
        }
        else
        {
            // If the key is not in the dictionary, just return.
        }
    }
    public void Clear() { ItemsInUse = 0; }
    public void Add(object key, object value)
    {
        // Add the new key/value pair even if this key already exists in the dictionary.
        if (ItemsInUse == items.Length)
            throw new InvalidOperationException("The dictionary cannot hold any more items.");
        items[ItemsInUse++] = new DictionaryEntry(key, value);
    }
    public ICollection Keys
    {
        get
        {
            // Return an array where each item is a key.
            Object[] keys = new Object[ItemsInUse];
            for (Int32 n = 0; n < ItemsInUse; n++)
                keys[n] = items[n].Key;
            return keys;
        }
    }
    public ICollection Values
    {
        get
        {
            // Return an array where each item is a value.
            Object[] values = new Object[ItemsInUse];
            for (Int32 n = 0; n < ItemsInUse; n++)
                values[n] = items[n].Value;
            return values;
        }
    }
    public object this[object key]
    {
        get
        {
            // If this key is in the dictionary, return its value.
            Int32 index;
            if (TryGetIndexOfKey(key, out index))
            {
                // The key was found; return its value.
                return items[index].Value;
            }
            else
            {
                // The key was not found; return null.
                return null;
            }
        }

        set
        {
            // If this key is in the dictionary, change its value.
            Int32 index;
            if (TryGetIndexOfKey(key, out index))
            {
                // The key was found; change its value.
                items[index].Value = value;
            }
            else
            {
                // This key is not in the dictionary; add this key/value pair.
                Add(key, value);
            }
        }
    }
    private Boolean TryGetIndexOfKey(Object key, out Int32 index)
    {
        for (index = 0; index < ItemsInUse; index++)
        {
            // If the key is found, return true (the index is also returned).
            if (items[index].Key.Equals(key)) return true;
        }

        // Key not found, return false (index should be ignored by the caller).
        return false;
    }
    private class SimpleDictionaryEnumerator : IDictionaryEnumerator
    {
        // A copy of the SimpleDictionary object's key/value pairs.
        DictionaryEntry[] items;
        Int32 index = -1;

        public SimpleDictionaryEnumerator(SimpleDictionary sd)
        {
            // Make a copy of the dictionary entries currently in the SimpleDictionary object.
            items = new DictionaryEntry[sd.Count];
            Array.Copy(sd.items, 0, items, 0, sd.Count);
        }

        // Return the current item.
        public Object Current { get { ValidateIndex(); return items[index]; } }

        // Return the current dictionary entry.
        public DictionaryEntry Entry
        {
            get { return (DictionaryEntry) Current; }
        }

        // Return the key of the current item.
        public Object Key { get { ValidateIndex();  return items[index].Key; } }

        // Return the value of the current item.
        public Object Value { get { ValidateIndex();  return items[index].Value; } }

        // Advance to the next item.
        public Boolean MoveNext()
        {
            if (index < items.Length - 1) { index++; return true; }
            return false;
        }

        // Validate the enumeration index and throw an exception if the index is out of range.
        private void ValidateIndex()
        {
            if (index < 0 || index >= items.Length)
            throw new InvalidOperationException("Enumerator is before or after the collection.");
        }

        // Reset the index to restart the enumeration.
        public void Reset()
        {
            index = -1;
        }
    }
    public IDictionaryEnumerator GetEnumerator()
    {
        // Construct and return an enumerator.
        return new SimpleDictionaryEnumerator(this);
    }
    #endregion

    #region ICollection Members
    public bool IsSynchronized { get { return false; } }
    public object SyncRoot { get { throw new NotImplementedException(); } }
    public int Count { get { return ItemsInUse; } }
    public void CopyTo(Array array, int index) { throw new NotImplementedException(); }
    #endregion

    #region IEnumerable Members
    IEnumerator IEnumerable.GetEnumerator()
    {
        // Construct and return an enumerator.
        return ((IDictionary)this).GetEnumerator();
    }
    #endregion
}

public sealed class App
{
    static void Main()
    {
        // Create a dictionary that contains no more than three entries.
        IDictionary d = new SimpleDictionary(3);

        // Add three people and their ages to the dictionary.
        d.Add("Jeff", 40);
        d.Add("Kristin", 34);
        d.Add("Aidan", 1);

        Console.WriteLine("Number of elements in dictionary = {0}", d.Count);

        Console.WriteLine("Does dictionary contain 'Jeff'? {0}", d.Contains("Jeff"));
        Console.WriteLine("Jeff's age is {0}", d["Jeff"]);

        // Display every entry's key and value.
        foreach (DictionaryEntry de in d)
        {
            Console.WriteLine("{0} is {1} years old.", de.Key, de.Value);
        }

        // Remove an entry that exists.
        d.Remove("Jeff");

        // Remove an entry that does not exist, but do not throw an exception.
        d.Remove("Max");

        // Show the names (keys) of the people in the dictionary.
        foreach (String s in d.Keys)
            Console.WriteLine(s);

        // Show the ages (values) of the people in the dictionary.
        foreach (Int32 age in d.Values)
            Console.WriteLine(age);
    }
}

// This code produces the following output.
//
// Number of elements in dictionary = 3
// Does dictionary contain 'Jeff'? True
// Jeff's age is 40
// Jeff is 40 years old.
// Kristin is 34 years old.
// Aidan is 1 years old.
// Kristin
// Aidan
// 34
// 1

using namespace System;
using namespace System::Collections;

// This class implements a simple dictionary using an array of
// DictionaryEntry objects (key/value pairs).
public ref class SimpleDictionary : public IDictionary
{
    // The array of items
private:
    array<DictionaryEntry^>^ items;
private:
    int itemsInUse;

    // Construct the SimpleDictionary with the desired number of
    // items. The number of items cannot change for the life time of
    // this SimpleDictionary.
public:
    SimpleDictionary(int size)
    {
        items = gcnew array<DictionaryEntry^>(size);
    }

    #pragma region IDictionary Members
public:
    property virtual bool IsReadOnly
    {
        bool get()
        {
            return false;
        }
    }
public:
    virtual bool Contains(Object^ key)
    {
        int index;
        return TryGetIndexOfKey(key, &index);
    }
public:
    virtual property bool IsFixedSize
    {
        bool get()
        {
            return false;
        }
    }
public:
    virtual void Remove(Object^ key)
    {
        if (key == nullptr)
        {
            throw gcnew ArgumentNullException("key");
        }
        // Try to find the key in the DictionaryEntry array
        int index;
        if (TryGetIndexOfKey(key, &index))
        {
            // If the key is found, slide all the items down.
            Array::Copy(items, index + 1, items, index, itemsInUse -
                index - 1);
            itemsInUse--;
        }
        else
        {
            // If the key is not in the dictionary, just return.
            return;
        }
    }
public:
    virtual void Clear()
    {
        itemsInUse = 0;
    }
public:
    virtual void Add(Object^ key, Object^ value)
    {
        // Add the new key/value pair even if this key already exists
        // in the dictionary.
        if (itemsInUse == items->Length)
        {
            throw gcnew InvalidOperationException
                ("The dictionary cannot hold any more items.");
        }
        items[itemsInUse++] = gcnew DictionaryEntry(key, value);
    }
public:
    virtual property ICollection^ Keys
    {
        ICollection^ get()
        {
            // Return an array where each item is a key.
            array<Object^>^ keys = gcnew array<Object^>(itemsInUse);
            for (int i = 0; i < itemsInUse; i++)
            {
                keys[i] = items[i]->Key;
            }
            return keys;
        }
    }
public:
    virtual property ICollection^ Values
    {
        ICollection^ get()
        {
            // Return an array where each item is a value.
            array<Object^>^ values = gcnew array<Object^>(itemsInUse);
            for (int i = 0; i < itemsInUse; i++)
            {
                values[i] = items[i]->Value;
            }
            return values;
        }
    }
public:
    virtual property Object^ default[Object^]
    {
        Object^ get(Object^ key)
        {
            // If this key is in the dictionary, return its value.
            int index;
            if (TryGetIndexOfKey(key, &index))
            {
                // The key was found; return its value.
                return items[index]->Value;
            }
            else
            {
                // The key was not found; return null.
                return nullptr;
            }
        }

        void set(Object^ key, Object^ value)
        {
            // If this key is in the dictionary, change its value.
            int index;
            if (TryGetIndexOfKey(key, &index))
            {
                // The key was found; change its value.
                items[index]->Value = value;
            }
            else
            {
                // This key is not in the dictionary; add this
                // key/value pair.
                Add(key, value);
            }
        }
    }
private:
    bool TryGetIndexOfKey(Object^ key, int* index)
    {
        for (*index = 0; *index < itemsInUse; *index++)
        {
            // If the key is found, return true (the index is also
            // returned).
            if (items[*index]->Key->Equals(key))
            {
                return true;
            }
        }

        // Key not found, return false (index should be ignored by
        // the caller).
        return false;
    }
private:
    ref class SimpleDictionaryEnumerator : public IDictionaryEnumerator
    {
        // A copy of the SimpleDictionary object's key/value pairs.
private:
        array<DictionaryEntry^>^ items;
private:
        int index;

public:
        SimpleDictionaryEnumerator(SimpleDictionary^ sd)
        {
            // Make a copy of the dictionary entries currently in the
            // SimpleDictionary object.
            items = gcnew array<DictionaryEntry^>(sd->Count);
            Array::Copy(sd->items, 0, items, 0, sd->Count);
            index = -1;
        }

        // Return the current item.
public:
        virtual property Object^ Current
        {
            Object^ get()
            {
                ValidateIndex();
                return items[index];
            }
        }

        // Return the current dictionary entry.
public:
        virtual property DictionaryEntry Entry
        {
            DictionaryEntry get()
            {
                return (DictionaryEntry) Current;
            }
        }

        // Return the key of the current item.
public:
        virtual property Object^ Key
        {
            Object^ get()
            {
                ValidateIndex();
                return items[index]->Key;
            }
        }

        // Return the value of the current item.
public:
        virtual property Object^ Value
        {
            Object^ get()
            {
                ValidateIndex();
                return items[index]->Value;
            }
        }

        // Advance to the next item.
public:
        virtual bool MoveNext()
        {
            if (index < items->Length - 1)
            {
                index++;
                return true;
            }
            return false;
        }

        // Validate the enumeration index and throw an exception if
        // the index is out of range.
private:
        void ValidateIndex()
        {
            if (index < 0 || index >= items->Length)
            {
                throw gcnew InvalidOperationException
                    ("Enumerator is before or after the collection.");
            }
        }

        // Reset the index to restart the enumeration.
public:
        virtual void Reset()
        {
            index = -1;
        }
    };
public:
    virtual IDictionaryEnumerator^ GetEnumerator()
    {
        // Construct and return an enumerator.
        return gcnew SimpleDictionaryEnumerator(this);
    }
    #pragma endregion

    #pragma region ICollection Members
public:
    virtual property bool IsSynchronized
    {
        bool get()
        {
            return false;
        }
    }

public:
    virtual property Object^ SyncRoot
    {
        Object^ get()
        {
            throw gcnew NotImplementedException();
        }
    }

public:
    virtual property int Count
    {
        int get()
        {
            return itemsInUse;
        }
    }

public:
    virtual void CopyTo(Array^ array, int index)
    {
        throw gcnew NotImplementedException();
    }
    #pragma endregion

    #pragma region IEnumerable Members

    virtual IEnumerator^ IEnumerable_GetEnumerator()
        = IEnumerable::GetEnumerator
    {
        // Construct and return an enumerator.
        return ((IDictionary^)this)->GetEnumerator();
    }
    #pragma endregion
};

int main()
{
    // Create a dictionary that contains no more than three
    // entries.
    IDictionary^ d = gcnew SimpleDictionary(3);

    // Add three people and their ages to the dictionary.
    d->Add("Jeff", 40);
    d->Add("Kristin", 34);
    d->Add("Aidan", 1);

    Console::WriteLine("Number of elements in dictionary = {0}",
        d->Count);

    Console::WriteLine("Does dictionary contain 'Jeff'? {0}",
        d->Contains("Jeff"));
    Console::WriteLine("Jeff's age is {0}", d["Jeff"]);

    // Display every entry's key and value.
    for each (DictionaryEntry^ de in d)
    {
        Console::WriteLine("{0} is {1} years old.", de->Key,
            de->Value);
    }

    // Remove an entry that exists.
    d->Remove("Jeff");

    // Remove an entry that does not exist, but do not throw an
    // exception.
    d->Remove("Max");

    // Show the names (keys) of the people in the dictionary.
    for each (String^ s in d->Keys)
    {
        Console::WriteLine(s);
    }

    // Show the ages (values) of the people in the dictionary.
    for each (int age in d->Values)
    {
        Console::WriteLine(age);
    }
}

// This code produces the following output.
//
// Number of elements in dictionary = 3
// Does dictionary contain 'Jeff'? True
// Jeff's age is 40
// Jeff is 40 years old.
// Kristin is 34 years old.
// Aidan is 1 years old.
// Kristin
// Aidan
// 34
// 1

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 成员
System.Collections 命名空间
Hashtable
ICollection


IDictionary 成员

IDictionary 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDictionary 接口

表示键/值对的非通用集合。

IDictionary 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

IDictionary 接口
System.Collections 命名空间


IDictionary 方法

IDictionary 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDictionary 接口

IDictionary 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDictionary 接口
System.Collections 命名空间


IDictionary ..::.Add 方法

IDictionary
.
.
::
.
Add 方法
IDictionary 接口

在 IDictionary 对象中添加一个带有所提供的键和值的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Sub Add ( _
    key As Object, _
    value As Object _
)
void Add(
    Object key,
    Object value
)
void Add(
    Object^ key,
    Object^ value
)
abstract Add :
        key:Object *
        value:Object -> unit

参数

key
类型： System Object
用作要添加的元素的键的 Object。
value
类型： System Object
用作要添加的元素的值的 Object。
异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | IDictionary 对象中已存在具有相同键的元素。
NotSupportedException | IDictionary 是只读的。 - 或 - IDictionary 具有固定大小。

通过设置字典中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue），还可以使用 Item 属性添加新元素。但是，如果字典中已存在指定的键，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 通过设置字典中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue），还可以使用 Item 属性添加新元素。但是，如果字典中已存在指定的键，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 通过设置字典中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue），还可以使用 Item 属性添加新元素。但是，如果字典中已存在指定的键，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。

实现在是否允许键为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 方面有所不同。

下面的代码示例演示如何实现 Add 方法。 此代码示例摘自一个为 IDictionary 类提供的更大示例。

Public Sub Add(ByVal key As Object, ByVal value As Object) Implements IDictionary.Add

    ' Add the new key/value pair even if this key already exists in the dictionary.
    If ItemsInUse = items.Length Then
        Throw New InvalidOperationException("The dictionary cannot hold any more items.")
    End If
    items(ItemsInUse) = New DictionaryEntry(key, value)
    ItemsInUse = ItemsInUse + 1
End Sub

public void Add(object key, object value)
{
    // Add the new key/value pair even if this key already exists in the dictionary.
    if (ItemsInUse == items.Length)
        throw new InvalidOperationException("The dictionary cannot hold any more items.");
    items[ItemsInUse++] = new DictionaryEntry(key, value);
}

public:
    virtual void Add(Object^ key, Object^ value)
    {
        // Add the new key/value pair even if this key already exists
        // in the dictionary.
        if (itemsInUse == items->Length)
        {
            throw gcnew InvalidOperationException
                ("The dictionary cannot hold any more items.");
        }
        items[itemsInUse++] = gcnew DictionaryEntry(key, value);
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间
Item


IDictionary ..::.Clear 方法

IDictionary
.
.
::
.
Clear 方法
IDictionary 接口

从 IDictionary 对象中移除所有元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Sub Clear
void Clear()
void Clear()
abstract Clear : unit -> unit

异常 | 条件
NotSupportedException | IDictionary 对象是只读的。

下面的代码示例演示如何实现 Clear 方法。 此代码示例摘自一个为 IDictionary 类提供的更大示例。

Public Sub Clear() Implements IDictionary.Clear
    ItemsInUse = 0
End Sub

public void Clear() { ItemsInUse = 0; }

public:
    virtual void Clear()
    {
        itemsInUse = 0;
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间


IDictionary ..::.Contains 方法

IDictionary
.
.
::
.
Contains 方法
IDictionary 接口

确定 IDictionary 对象是否包含具有指定键的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function Contains ( _
    key As Object _
) As Boolean
bool Contains(
    Object key
)
bool Contains(
    Object^ key
)
abstract Contains :
        key:Object -> bool

参数

key
类型： System Object
要在 IDictionary 对象中定位的键。

返回值

类型： System Boolean
如果 IDictionary 包含带有该键的元素，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现在是否允许键为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 方面有所不同。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例演示如何实现 Contains 方法。 此代码示例摘自一个为 IDictionary 类提供的更大示例。

Public Function Contains(ByVal key As Object) As Boolean Implements IDictionary.Contains
    Dim index As Integer
    Return TryGetIndexOfKey(key, index)
End Function

public bool Contains(object key)
{
   Int32 index;
   return TryGetIndexOfKey(key, out index);
}

public:
    virtual bool Contains(Object^ key)
    {
        int index;
        return TryGetIndexOfKey(key, &index);
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间


IDictionary ..::.GetEnumerator 方法

IDictionary
.
.
::
.
GetEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDictionary 接口

名称 说明
页首

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间


IDictionary ..::.GetEnumerator 方法

IDictionary
.
.
::
.
GetEnumerator 方法
IDictionary 接口

返回一个用于 IDictionary 对象的 IDictionaryEnumerator 对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function GetEnumerator As IDictionaryEnumerator
IDictionaryEnumerator GetEnumerator()
IDictionaryEnumerator^ GetEnumerator()
abstract GetEnumerator : unit -> IDictionaryEnumerator

返回值

类型： System.Collections IDictionaryEnumerator
一个用于 IDictionary 对象的 IDictionaryEnumerator 对象。

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，Current 属性为未定义。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，Current 属性为未定义。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，Current 属性为未定义。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，Current 属性为未定义。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
GetEnumerator 重载
System.Collections 命名空间
IDictionaryEnumerator
IEnumerator


IDictionary ..::.Remove 方法

IDictionary
.
.
::
.
Remove 方法
IDictionary 接口

从 IDictionary 对象中移除带有指定键的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Sub Remove ( _
    key As Object _
)
void Remove(
    Object key
)
void Remove(
    Object^ key
)
abstract Remove :
        key:Object -> unit

参数

key
类型： System Object
要移除的元素的键。
异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | IDictionary 对象是只读的。 - 或 - IDictionary 具有固定大小。

如果 IDictionary 对象不包含具有指定键的元素，则 IDictionary 保持不变。不引发异常。 如果 IDictionary 对象不包含具有指定键的元素，则 IDictionary 保持不变。不引发异常。

下面的代码示例演示如何实现 Remove 方法。 此代码示例摘自一个为 IDictionary 类提供的更大示例。

Public Sub Remove(ByVal key As Object) Implements IDictionary.Remove
    If key = Nothing Then
        Throw New ArgumentNullException("key")
    End If
    ' Try to find the key in the DictionaryEntry array
    Dim index As Integer
    If TryGetIndexOfKey(key, index) Then

        ' If the key is found, slide all the items up.
        Array.Copy(items, index + 1, items, index, (ItemsInUse - index) - 1)
        ItemsInUse = ItemsInUse - 1
    Else

        ' If the key is not in the dictionary, just return.
    End If
End Sub

public void Remove(object key)
{
    if (key == null) throw new ArgumentNullException("key");
    // Try to find the key in the DictionaryEntry array
    Int32 index;
    if (TryGetIndexOfKey(key, out index))
    {
        // If the key is found, slide all the items up.
        Array.Copy(items, index + 1, items, index, ItemsInUse - index - 1);
        ItemsInUse--;
    }
    else
    {
        // If the key is not in the dictionary, just return.
    }
}

public:
    virtual void Remove(Object^ key)
    {
        if (key == nullptr)
        {
            throw gcnew ArgumentNullException("key");
        }
        // Try to find the key in the DictionaryEntry array
        int index;
        if (TryGetIndexOfKey(key, &index))
        {
            // If the key is found, slide all the items down.
            Array::Copy(items, index + 1, items, index, itemsInUse -
                index - 1);
            itemsInUse--;
        }
        else
        {
            // If the key is not in the dictionary, just return.
            return;
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间


IDictionary 属性

IDictionary 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDictionary 接口

IDictionary 类型公开以下成员。

名称 说明
页首

参考

IDictionary 接口
System.Collections 命名空间


IDictionary ..::.IsFixedSize 属性

IDictionary
.
.
::
.
IsFixedSize 属性
IDictionary 接口

获取一个值，该值指示 IDictionary 对象是否具有固定大小。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property IsFixedSize As Boolean
    Get
bool IsFixedSize { get; }
property bool IsFixedSize {
    bool get ();
}
abstract IsFixedSize : bool

属性值

类型： System Boolean
如果 IDictionary 对象具有固定大小，则为 true；否则为 false。

大小固定的集合在创建之后不允许添加或移除元素，但允许修改现有元素。

固定大小的集合只是一个具有用于防止添加和移除元素的包装的集合；因此，如果更改基础集合（包括添加和移除元素），则固定大小的集合将反映那些更改。

下面的代码示例演示如何实现 IsFixedSize 属性。 此代码示例摘自一个为 IDictionary 类提供的更大示例。

Public ReadOnly Property IsFixedSize() As Boolean Implements IDictionary.IsFixedSize
    Get
        Return False
    End Get
End Property

public bool IsFixedSize { get { return false; } }

public:
    virtual property bool IsFixedSize
    {
        bool get()
        {
            return false;
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间


IDictionary ..::.IsReadOnly 属性

IDictionary
.
.
::
.
IsReadOnly 属性
IDictionary 接口

获取一个值，该值指示 IDictionary 对象是否为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property IsReadOnly As Boolean
    Get
bool IsReadOnly { get; }
property bool IsReadOnly {
    bool get ();
}
abstract IsReadOnly : bool

属性值

类型： System Boolean
如果 IDictionary 对象为只读，则为 true；否则为 false。

只读集合在创建后就不能再添加、移除或修改元素。

下面的代码示例演示如何实现 IsReadOnly 属性。 此代码示例摘自一个为 IDictionary 类提供的更大示例。

Public ReadOnly Property IsReadOnly() As Boolean Implements IDictionary.IsReadOnly
    Get
        Return False
    End Get
End Property

public bool IsReadOnly { get { return false; } }

public:
    property virtual bool IsReadOnly
    {
        bool get()
        {
            return false;
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间


IDictionary ..::.Item 属性

IDictionary
.
.
::
.
Item 属性
IDictionary 接口

获取或设置具有指定键的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Property Item ( _
    key As Object _
) As Object
    Get
    Set
Object this[
    Object key
] { get; set; }
property Object^ Item[Object^ key] {
    Object^ get (Object^ key);
    void set (Object^ key, Object^ value);
}
abstract Item : Object with get, set

参数

key
类型： System Object
要获取或设置的元素的键。

属性值

类型： System Object
带有指定键的元素。
异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 设置了该属性，并且 IDictionary 对象为只读。 - 或 - 设置该属性，集合中不存在 key，而且 IDictionary 具有固定大小。

通过使用下面的语法，此属性提供访问集合中特定元素的能力：myCollection[key]。

通过设置字典中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue），还可以使用 Item 属性添加新元素。但是，如果字典中已存在指定的键，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 通过设置字典中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue），还可以使用 Item 属性添加新元素。但是，如果字典中已存在指定的键，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 通过设置字典中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue），还可以使用 Item 属性添加新元素。但是，如果字典中已存在指定的键，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。

实现在是否允许键为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 方面有所不同。

C# 语言使用 thisthis（C# 参考） 关键字（而不是通过实现 Item 属性）来定义索引器。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。 C# 语言使用 thisthis（C# 参考） 关键字（而不是通过实现 Item 属性）来定义索引器。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。

下面的代码示例演示如何实现 Item 属性。 此代码示例摘自一个为 IDictionary 类提供的更大示例。

Public Property Item(ByVal key As Object) As Object Implements IDictionary.Item
    Get

        ' If this key is in the dictionary, return its value.
        Dim index As Integer
        If TryGetIndexOfKey(key, index) Then

            ' The key was found return its value.
            Return items(index).Value
        Else

            ' The key was not found return null.
            Return Nothing
        End If
    End Get

    Set(ByVal value As Object)
        ' If this key is in the dictionary, change its value.
        Dim index As Integer
        If TryGetIndexOfKey(key, index) Then

            ' The key was found change its value.
            items(index).Value = value
        Else

            ' This key is not in the dictionary add this key/value pair.
            Add(key, value)
        End If
    End Set
End Property

public object this[object key]
{
    get
    {
        // If this key is in the dictionary, return its value.
        Int32 index;
        if (TryGetIndexOfKey(key, out index))
        {
            // The key was found; return its value.
            return items[index].Value;
        }
        else
        {
            // The key was not found; return null.
            return null;
        }
    }

    set
    {
        // If this key is in the dictionary, change its value.
        Int32 index;
        if (TryGetIndexOfKey(key, out index))
        {
            // The key was found; change its value.
            items[index].Value = value;
        }
        else
        {
            // This key is not in the dictionary; add this key/value pair.
            Add(key, value);
        }
    }
}

public:
    virtual property Object^ default[Object^]
    {
        Object^ get(Object^ key)
        {
            // If this key is in the dictionary, return its value.
            int index;
            if (TryGetIndexOfKey(key, &index))
            {
                // The key was found; return its value.
                return items[index]->Value;
            }
            else
            {
                // The key was not found; return null.
                return nullptr;
            }
        }

        void set(Object^ key, Object^ value)
        {
            // If this key is in the dictionary, change its value.
            int index;
            if (TryGetIndexOfKey(key, &index))
            {
                // The key was found; change its value.
                items[index]->Value = value;
            }
            else
            {
                // This key is not in the dictionary; add this
                // key/value pair.
                Add(key, value);
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间
Add


IDictionary ..::.Keys 属性

IDictionary
.
.
::
.
Keys 属性
IDictionary 接口

获取 ICollection 对象，它包含 IDictionary 对象的键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property Keys As ICollection
    Get
ICollection Keys { get; }
property ICollection^ Keys {
    ICollection^ get ();
}
abstract Keys : ICollection

属性值

类型： System.Collections ICollection
ICollection 对象，它包含 IDictionary 对象的键。

未指定返回的 ICollection 对象中的键的顺序，但可以保证它与由 Values 属性返回的 ICollection 中的相应值具有相同的顺序。

下面的代码示例演示如何实现 Keys 属性。 此代码示例摘自一个为 IDictionary 类提供的更大示例。

Public ReadOnly Property Keys() As ICollection Implements IDictionary.Keys
    Get

        ' Return an array where each item is a key.
        ' Note: Declaring keyArray() to have a size of ItemsInUse - 1
        '       ensures that the array is properly sized, in VB.NET
        '       declaring an array of size N creates an array with
        '       0 through N elements, including N, as opposed to N - 1
        '       which is the default behavior in C# and C++.
        Dim keyArray() As Object = New Object(ItemsInUse - 1) {}
        Dim n As Integer
        For n = 0 To ItemsInUse - 1
            keyArray(n) = items(n).Key
        Next n

        Return keyArray
    End Get
End Property

public ICollection Keys
{
    get
    {
        // Return an array where each item is a key.
        Object[] keys = new Object[ItemsInUse];
        for (Int32 n = 0; n < ItemsInUse; n++)
            keys[n] = items[n].Key;
        return keys;
    }
}

public:
    virtual property ICollection^ Keys
    {
        ICollection^ get()
        {
            // Return an array where each item is a key.
            array<Object^>^ keys = gcnew array<Object^>(itemsInUse);
            for (int i = 0; i < itemsInUse; i++)
            {
                keys[i] = items[i]->Key;
            }
            return keys;
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间
ICollection


IDictionary ..::.Values 属性

IDictionary
.
.
::
.
Values 属性
IDictionary 接口

获取 ICollection 对象，它包含 IDictionary 对象中的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property Values As ICollection
    Get
ICollection Values { get; }
property ICollection^ Values {
    ICollection^ get ();
}
abstract Values : ICollection

属性值

类型： System.Collections ICollection
ICollection 对象，它包含 IDictionary 对象中的值。

未指定返回的 ICollection 对象中的值的顺序，但它与由 Keys 属性返回的 ICollection 中的相应键具有相同的顺序。

下面的代码示例演示如何实现 Values 属性。 此代码示例摘自一个为 IDictionary 类提供的更大示例。

Public ReadOnly Property Values() As ICollection Implements IDictionary.Values
    Get
        ' Return an array where each item is a value.
        Dim valueArray() As Object = New Object(ItemsInUse - 1) {}
        Dim n As Integer
        For n = 0 To ItemsInUse - 1
            valueArray(n) = items(n).Value
        Next n

        Return valueArray
    End Get
End Property

public ICollection Values
{
    get
    {
        // Return an array where each item is a value.
        Object[] values = new Object[ItemsInUse];
        for (Int32 n = 0; n < ItemsInUse; n++)
            values[n] = items[n].Value;
        return values;
    }
}

public:
    virtual property ICollection^ Values
    {
        ICollection^ get()
        {
            // Return an array where each item is a value.
            array<Object^>^ values = gcnew array<Object^>(itemsInUse);
            for (int i = 0; i < itemsInUse; i++)
            {
                values[i] = items[i]->Value;
            }
            return values;
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionary 接口
IDictionary 成员
System.Collections 命名空间
ICollection


IDictionaryEnumerator 接口

IDictionaryEnumerator 接口
成员

枚举非泛型字典的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IDictionaryEnumerator _
    Inherits IEnumerator
[ComVisibleAttribute(true)]
public interface IDictionaryEnumerator : IEnumerator
[ComVisibleAttribute(true)]
public interface class IDictionaryEnumerator : IEnumerator
[<ComVisibleAttribute(true)>]
type IDictionaryEnumerator =
    interface
        interface IEnumerator
    end

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 方法还将枚举数返回到此位置。在此位置，调用 Current 属性会引发异常。因此，在读取 Current 的值之前，必须先通过调用 MoveNext 方法将枚举数前移到集合中的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 方法还将枚举数返回到此位置。在此位置，调用 Current 属性会引发异常。因此，在读取 Current 的值之前，必须先通过调用 MoveNext 方法将枚举数前移到集合中的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 方法还将枚举数返回到此位置。在此位置，调用 Current 属性会引发异常。因此，在读取 Current 的值之前，必须先通过调用 MoveNext 方法将枚举数前移到集合中的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 方法还将枚举数返回到此位置。在此位置，调用 Current 属性会引发异常。因此，在读取 Current 的值之前，必须先通过调用 MoveNext 方法将枚举数前移到集合中的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

对实现者的说明

从 IEnumerator 继承的 Current 属性返回一个 Object，此返回值是一个已装箱的 DictionaryEntry，与 Entry 属性的返回值类似。

此代码示例演示如何定义实现 IDictionaryEnumerator 接口的字典枚举数。

Imports System
Imports System.Collections

' This class implements a simple dictionary using an array of DictionaryEntry objects (key/value pairs).
Public Class SimpleDictionary
    Implements IDictionary

    ' The array of items
    Dim items() As DictionaryEntry
    Dim ItemsInUse As Integer = 0

    ' Construct the SimpleDictionary with the desired number of items.
    ' The number of items cannot change for the life time of this SimpleDictionary.
    Public Sub New(ByVal numItems As Integer)
        items = New DictionaryEntry(numItems - 1) {}
    End Sub

    ' IDictionary Members
    Public ReadOnly Property IsReadOnly() As Boolean Implements IDictionary.IsReadOnly
        Get
            Return False
        End Get
    End Property

    Public Function Contains(ByVal key As Object) As Boolean Implements IDictionary.Contains
        Dim index As Integer
        Return TryGetIndexOfKey(key, index)
    End Function

    Public ReadOnly Property IsFixedSize() As Boolean Implements IDictionary.IsFixedSize
        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal key As Object) Implements IDictionary.Remove
        If key = Nothing Then
            Throw New ArgumentNullException("key")
        End If
        ' Try to find the key in the DictionaryEntry array
        Dim index As Integer
        If TryGetIndexOfKey(key, index) Then

            ' If the key is found, slide all the items up.
            Array.Copy(items, index + 1, items, index, (ItemsInUse - index) - 1)
            ItemsInUse = ItemsInUse - 1
        Else

            ' If the key is not in the dictionary, just return.
        End If
    End Sub

    Public Sub Clear() Implements IDictionary.Clear
        ItemsInUse = 0
    End Sub

    Public Sub Add(ByVal key As Object, ByVal value As Object) Implements IDictionary.Add

        ' Add the new key/value pair even if this key already exists in the dictionary.
        If ItemsInUse = items.Length Then
            Throw New InvalidOperationException("The dictionary cannot hold any more items.")
        End If
        items(ItemsInUse) = New DictionaryEntry(key, value)
        ItemsInUse = ItemsInUse + 1
    End Sub

    Public ReadOnly Property Keys() As ICollection Implements IDictionary.Keys
        Get

            ' Return an array where each item is a key.
            ' Note: Declaring keyArray() to have a size of ItemsInUse - 1
            '       ensures that the array is properly sized, in VB.NET
            '       declaring an array of size N creates an array with
            '       0 through N elements, including N, as opposed to N - 1
            '       which is the default behavior in C# and C++.
            Dim keyArray() As Object = New Object(ItemsInUse - 1) {}
            Dim n As Integer
            For n = 0 To ItemsInUse - 1
                keyArray(n) = items(n).Key
            Next n

            Return keyArray
        End Get
    End Property

    Public ReadOnly Property Values() As ICollection Implements IDictionary.Values
        Get
            ' Return an array where each item is a value.
            Dim valueArray() As Object = New Object(ItemsInUse - 1) {}
            Dim n As Integer
            For n = 0 To ItemsInUse - 1
                valueArray(n) = items(n).Value
            Next n

            Return valueArray
        End Get
    End Property

    Public Property Item(ByVal key As Object) As Object Implements IDictionary.Item
        Get

            ' If this key is in the dictionary, return its value.
            Dim index As Integer
            If TryGetIndexOfKey(key, index) Then

                ' The key was found return its value.
                Return items(index).Value
            Else

                ' The key was not found return null.
                Return Nothing
            End If
        End Get

        Set(ByVal value As Object)
            ' If this key is in the dictionary, change its value.
            Dim index As Integer
            If TryGetIndexOfKey(key, index) Then

                ' The key was found change its value.
                items(index).Value = value
            Else

                ' This key is not in the dictionary add this key/value pair.
                Add(key, value)
            End If
        End Set
    End Property

    Private Function TryGetIndexOfKey(ByVal key As Object, ByRef index As Integer) As Boolean
        For index = 0 To ItemsInUse - 1
            ' If the key is found, return true (the index is also returned).
            If items(index).Key.Equals(key) Then
                Return True
            End If
        Next index

        ' Key not found, return false (index should be ignored by the caller).
        Return False
    End Function

    Private Class SimpleDictionaryEnumerator
        Implements IDictionaryEnumerator

        ' A copy of the SimpleDictionary object's key/value pairs.
        Dim items() As DictionaryEntry
        Dim index As Integer = -1

        Public Sub New(ByVal sd As SimpleDictionary)
            ' Make a copy of the dictionary entries currently in the SimpleDictionary object.
            items = New DictionaryEntry(sd.Count - 1) {}
            Array.Copy(sd.items, 0, items, 0, sd.Count)
        End Sub

        ' Return the current item.
        Public ReadOnly Property Current() As Object Implements IDictionaryEnumerator.Current
            Get
                ValidateIndex()
                Return items(index)
            End Get
        End Property

        ' Return the current dictionary entry.
        Public ReadOnly Property Entry() As DictionaryEntry Implements IDictionaryEnumerator.Entry
            Get
                Return Current
            End Get
        End Property

        ' Return the key of the current item.
        Public ReadOnly Property Key() As Object Implements IDictionaryEnumerator.Key
            Get
                ValidateIndex()
                Return items(index).Key
            End Get
        End Property

        ' Return the value of the current item.
        Public ReadOnly Property Value() As Object Implements IDictionaryEnumerator.Value
            Get
                ValidateIndex()
                Return items(index).Value
            End Get
        End Property

        ' Advance to the next item.
        Public Function MoveNext() As Boolean Implements IDictionaryEnumerator.MoveNext
            If index < items.Length - 1 Then
                index = index + 1
                Return True
            End If

            Return False
        End Function

        ' Validate the enumeration index and throw an exception if the index is out of range.
        Private Sub ValidateIndex()
            If index < 0 Or index >= items.Length Then
                Throw New InvalidOperationException("Enumerator is before or after the collection.")
            End If
        End Sub

        ' Reset the index to restart the enumeration.
        Public Sub Reset() Implements IDictionaryEnumerator.Reset
            index = -1
        End Sub

    End Class

    Public Function GetEnumerator() As IDictionaryEnumerator Implements IDictionary.GetEnumerator

        'Construct and return an enumerator.
        Return New SimpleDictionaryEnumerator(Me)
    End Function

    ' ICollection Members
    Public ReadOnly Property IsSynchronized() As Boolean Implements IDictionary.IsSynchronized
        Get
            Return False
        End Get
    End Property

    Public ReadOnly Property SyncRoot() As Object Implements IDictionary.SyncRoot
        Get
            Throw New NotImplementedException()
        End Get
    End Property

    Public ReadOnly Property Count() As Integer Implements IDictionary.Count
        Get
            Return ItemsInUse
        End Get
    End Property

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements IDictionary.CopyTo
        Throw New NotImplementedException()
    End Sub

    ' IEnumerable Members
    Public Function GetEnumerator1() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Construct and return an enumerator.
        Return Me.GetEnumerator()
    End Function
End Class

Public NotInheritable Class App
    Public Shared Sub Main()
        ' Create a dictionary that contains no more than three entries.
        Dim d As IDictionary = New SimpleDictionary(3)

        ' Add three people and their ages to the dictionary.
        d.Add("Jeff", 40)
        d.Add("Kristin", 34)
        d.Add("Aidan", 1)

        Console.WriteLine("Number of elements in dictionary = {0}", d.Count)

        Console.WriteLine("Does dictionary contain 'Jeff'? {0}", d.Contains("Jeff"))
        Console.WriteLine("Jeff's age is {0}", d("Jeff"))

        ' Display every entry's key and value.
        Dim de As DictionaryEntry
        For Each de In d
            Console.WriteLine("{0} is {1} years old.", de.Key, de.Value)
        Next

        ' Remove an entry that exists.
        d.Remove("Jeff")

        ' Remove an entry that does not exist, but do not throw an exception.
        d.Remove("Max")

        ' Show the names (keys) of the people in the dictionary.
        Dim s As String

        For Each s In d.Keys
            Console.WriteLine(s)
        Next

        ' Show the ages (values) of the people in the dictionary.
        Dim age As Integer
        For Each age In d.Values
            Console.WriteLine(age)
        Next

    End Sub
End Class

' This code produces the following output.
'
' Number of elements in dictionary = 3
' Does dictionary contain 'Jeff'? True
' Jeff's age is 40
' Jeff is 40 years old.
' Kristin is 34 years old.
' Aidan is 1 years old.
' Kristin
' Aidan
' 34
' 1

using System;
using System.Collections;

// This class implements a simple dictionary using an array of DictionaryEntry objects (key/value pairs).
public class SimpleDictionary : IDictionary
{
    // The array of items
    private DictionaryEntry[] items;
    private Int32 ItemsInUse = 0;

    // Construct the SimpleDictionary with the desired number of items.
    // The number of items cannot change for the life time of this SimpleDictionary.
    public SimpleDictionary(Int32 numItems)
    {
        items = new DictionaryEntry[numItems];
    }

    #region IDictionary Members
    public bool IsReadOnly { get { return false; } }
    public bool Contains(object key)
    {
       Int32 index;
       return TryGetIndexOfKey(key, out index);
    }
    public bool IsFixedSize { get { return false; } }
    public void Remove(object key)
    {
        if (key == null) throw new ArgumentNullException("key");
        // Try to find the key in the DictionaryEntry array
        Int32 index;
        if (TryGetIndexOfKey(key, out index))
        {
            // If the key is found, slide all the items up.
            Array.Copy(items, index + 1, items, index, ItemsInUse - index - 1);
            ItemsInUse--;
        }
        else
        {
            // If the key is not in the dictionary, just return.
        }
    }
    public void Clear() { ItemsInUse = 0; }
    public void Add(object key, object value)
    {
        // Add the new key/value pair even if this key already exists in the dictionary.
        if (ItemsInUse == items.Length)
            throw new InvalidOperationException("The dictionary cannot hold any more items.");
        items[ItemsInUse++] = new DictionaryEntry(key, value);
    }
    public ICollection Keys
    {
        get
        {
            // Return an array where each item is a key.
            Object[] keys = new Object[ItemsInUse];
            for (Int32 n = 0; n < ItemsInUse; n++)
                keys[n] = items[n].Key;
            return keys;
        }
    }
    public ICollection Values
    {
        get
        {
            // Return an array where each item is a value.
            Object[] values = new Object[ItemsInUse];
            for (Int32 n = 0; n < ItemsInUse; n++)
                values[n] = items[n].Value;
            return values;
        }
    }
    public object this[object key]
    {
        get
        {
            // If this key is in the dictionary, return its value.
            Int32 index;
            if (TryGetIndexOfKey(key, out index))
            {
                // The key was found; return its value.
                return items[index].Value;
            }
            else
            {
                // The key was not found; return null.
                return null;
            }
        }

        set
        {
            // If this key is in the dictionary, change its value.
            Int32 index;
            if (TryGetIndexOfKey(key, out index))
            {
                // The key was found; change its value.
                items[index].Value = value;
            }
            else
            {
                // This key is not in the dictionary; add this key/value pair.
                Add(key, value);
            }
        }
    }
    private Boolean TryGetIndexOfKey(Object key, out Int32 index)
    {
        for (index = 0; index < ItemsInUse; index++)
        {
            // If the key is found, return true (the index is also returned).
            if (items[index].Key.Equals(key)) return true;
        }

        // Key not found, return false (index should be ignored by the caller).
        return false;
    }
    private class SimpleDictionaryEnumerator : IDictionaryEnumerator
    {
        // A copy of the SimpleDictionary object's key/value pairs.
        DictionaryEntry[] items;
        Int32 index = -1;

        public SimpleDictionaryEnumerator(SimpleDictionary sd)
        {
            // Make a copy of the dictionary entries currently in the SimpleDictionary object.
            items = new DictionaryEntry[sd.Count];
            Array.Copy(sd.items, 0, items, 0, sd.Count);
        }

        // Return the current item.
        public Object Current { get { ValidateIndex(); return items[index]; } }

        // Return the current dictionary entry.
        public DictionaryEntry Entry
        {
            get { return (DictionaryEntry) Current; }
        }

        // Return the key of the current item.
        public Object Key { get { ValidateIndex();  return items[index].Key; } }

        // Return the value of the current item.
        public Object Value { get { ValidateIndex();  return items[index].Value; } }

        // Advance to the next item.
        public Boolean MoveNext()
        {
            if (index < items.Length - 1) { index++; return true; }
            return false;
        }

        // Validate the enumeration index and throw an exception if the index is out of range.
        private void ValidateIndex()
        {
            if (index < 0 || index >= items.Length)
            throw new InvalidOperationException("Enumerator is before or after the collection.");
        }

        // Reset the index to restart the enumeration.
        public void Reset()
        {
            index = -1;
        }
    }
    public IDictionaryEnumerator GetEnumerator()
    {
        // Construct and return an enumerator.
        return new SimpleDictionaryEnumerator(this);
    }
    #endregion

    #region ICollection Members
    public bool IsSynchronized { get { return false; } }
    public object SyncRoot { get { throw new NotImplementedException(); } }
    public int Count { get { return ItemsInUse; } }
    public void CopyTo(Array array, int index) { throw new NotImplementedException(); }
    #endregion

    #region IEnumerable Members
    IEnumerator IEnumerable.GetEnumerator()
    {
        // Construct and return an enumerator.
        return ((IDictionary)this).GetEnumerator();
    }
    #endregion
}

public sealed class App
{
    static void Main()
    {
        // Create a dictionary that contains no more than three entries.
        IDictionary d = new SimpleDictionary(3);

        // Add three people and their ages to the dictionary.
        d.Add("Jeff", 40);
        d.Add("Kristin", 34);
        d.Add("Aidan", 1);

        Console.WriteLine("Number of elements in dictionary = {0}", d.Count);

        Console.WriteLine("Does dictionary contain 'Jeff'? {0}", d.Contains("Jeff"));
        Console.WriteLine("Jeff's age is {0}", d["Jeff"]);

        // Display every entry's key and value.
        foreach (DictionaryEntry de in d)
        {
            Console.WriteLine("{0} is {1} years old.", de.Key, de.Value);
        }

        // Remove an entry that exists.
        d.Remove("Jeff");

        // Remove an entry that does not exist, but do not throw an exception.
        d.Remove("Max");

        // Show the names (keys) of the people in the dictionary.
        foreach (String s in d.Keys)
            Console.WriteLine(s);

        // Show the ages (values) of the people in the dictionary.
        foreach (Int32 age in d.Values)
            Console.WriteLine(age);
    }
}

// This code produces the following output.
//
// Number of elements in dictionary = 3
// Does dictionary contain 'Jeff'? True
// Jeff's age is 40
// Jeff is 40 years old.
// Kristin is 34 years old.
// Aidan is 1 years old.
// Kristin
// Aidan
// 34
// 1

using namespace System;
using namespace System::Collections;

// This class implements a simple dictionary using an array of
// DictionaryEntry objects (key/value pairs).
public ref class SimpleDictionary : public IDictionary
{
    // The array of items
private:
    array<DictionaryEntry^>^ items;
private:
    int itemsInUse;

    // Construct the SimpleDictionary with the desired number of
    // items. The number of items cannot change for the life time of
    // this SimpleDictionary.
public:
    SimpleDictionary(int size)
    {
        items = gcnew array<DictionaryEntry^>(size);
    }

    #pragma region IDictionary Members
public:
    property virtual bool IsReadOnly
    {
        bool get()
        {
            return false;
        }
    }
public:
    virtual bool Contains(Object^ key)
    {
        int index;
        return TryGetIndexOfKey(key, &index);
    }
public:
    virtual property bool IsFixedSize
    {
        bool get()
        {
            return false;
        }
    }
public:
    virtual void Remove(Object^ key)
    {
        if (key == nullptr)
        {
            throw gcnew ArgumentNullException("key");
        }
        // Try to find the key in the DictionaryEntry array
        int index;
        if (TryGetIndexOfKey(key, &index))
        {
            // If the key is found, slide all the items down.
            Array::Copy(items, index + 1, items, index, itemsInUse -
                index - 1);
            itemsInUse--;
        }
        else
        {
            // If the key is not in the dictionary, just return.
            return;
        }
    }
public:
    virtual void Clear()
    {
        itemsInUse = 0;
    }
public:
    virtual void Add(Object^ key, Object^ value)
    {
        // Add the new key/value pair even if this key already exists
        // in the dictionary.
        if (itemsInUse == items->Length)
        {
            throw gcnew InvalidOperationException
                ("The dictionary cannot hold any more items.");
        }
        items[itemsInUse++] = gcnew DictionaryEntry(key, value);
    }
public:
    virtual property ICollection^ Keys
    {
        ICollection^ get()
        {
            // Return an array where each item is a key.
            array<Object^>^ keys = gcnew array<Object^>(itemsInUse);
            for (int i = 0; i < itemsInUse; i++)
            {
                keys[i] = items[i]->Key;
            }
            return keys;
        }
    }
public:
    virtual property ICollection^ Values
    {
        ICollection^ get()
        {
            // Return an array where each item is a value.
            array<Object^>^ values = gcnew array<Object^>(itemsInUse);
            for (int i = 0; i < itemsInUse; i++)
            {
                values[i] = items[i]->Value;
            }
            return values;
        }
    }
public:
    virtual property Object^ default[Object^]
    {
        Object^ get(Object^ key)
        {
            // If this key is in the dictionary, return its value.
            int index;
            if (TryGetIndexOfKey(key, &index))
            {
                // The key was found; return its value.
                return items[index]->Value;
            }
            else
            {
                // The key was not found; return null.
                return nullptr;
            }
        }

        void set(Object^ key, Object^ value)
        {
            // If this key is in the dictionary, change its value.
            int index;
            if (TryGetIndexOfKey(key, &index))
            {
                // The key was found; change its value.
                items[index]->Value = value;
            }
            else
            {
                // This key is not in the dictionary; add this
                // key/value pair.
                Add(key, value);
            }
        }
    }
private:
    bool TryGetIndexOfKey(Object^ key, int* index)
    {
        for (*index = 0; *index < itemsInUse; *index++)
        {
            // If the key is found, return true (the index is also
            // returned).
            if (items[*index]->Key->Equals(key))
            {
                return true;
            }
        }

        // Key not found, return false (index should be ignored by
        // the caller).
        return false;
    }
private:
    ref class SimpleDictionaryEnumerator : public IDictionaryEnumerator
    {
        // A copy of the SimpleDictionary object's key/value pairs.
private:
        array<DictionaryEntry^>^ items;
private:
        int index;

public:
        SimpleDictionaryEnumerator(SimpleDictionary^ sd)
        {
            // Make a copy of the dictionary entries currently in the
            // SimpleDictionary object.
            items = gcnew array<DictionaryEntry^>(sd->Count);
            Array::Copy(sd->items, 0, items, 0, sd->Count);
            index = -1;
        }

        // Return the current item.
public:
        virtual property Object^ Current
        {
            Object^ get()
            {
                ValidateIndex();
                return items[index];
            }
        }

        // Return the current dictionary entry.
public:
        virtual property DictionaryEntry Entry
        {
            DictionaryEntry get()
            {
                return (DictionaryEntry) Current;
            }
        }

        // Return the key of the current item.
public:
        virtual property Object^ Key
        {
            Object^ get()
            {
                ValidateIndex();
                return items[index]->Key;
            }
        }

        // Return the value of the current item.
public:
        virtual property Object^ Value
        {
            Object^ get()
            {
                ValidateIndex();
                return items[index]->Value;
            }
        }

        // Advance to the next item.
public:
        virtual bool MoveNext()
        {
            if (index < items->Length - 1)
            {
                index++;
                return true;
            }
            return false;
        }

        // Validate the enumeration index and throw an exception if
        // the index is out of range.
private:
        void ValidateIndex()
        {
            if (index < 0 || index >= items->Length)
            {
                throw gcnew InvalidOperationException
                    ("Enumerator is before or after the collection.");
            }
        }

        // Reset the index to restart the enumeration.
public:
        virtual void Reset()
        {
            index = -1;
        }
    };
public:
    virtual IDictionaryEnumerator^ GetEnumerator()
    {
        // Construct and return an enumerator.
        return gcnew SimpleDictionaryEnumerator(this);
    }
    #pragma endregion

    #pragma region ICollection Members
public:
    virtual property bool IsSynchronized
    {
        bool get()
        {
            return false;
        }
    }

public:
    virtual property Object^ SyncRoot
    {
        Object^ get()
        {
            throw gcnew NotImplementedException();
        }
    }

public:
    virtual property int Count
    {
        int get()
        {
            return itemsInUse;
        }
    }

public:
    virtual void CopyTo(Array^ array, int index)
    {
        throw gcnew NotImplementedException();
    }
    #pragma endregion

    #pragma region IEnumerable Members

    virtual IEnumerator^ IEnumerable_GetEnumerator()
        = IEnumerable::GetEnumerator
    {
        // Construct and return an enumerator.
        return ((IDictionary^)this)->GetEnumerator();
    }
    #pragma endregion
};

int main()
{
    // Create a dictionary that contains no more than three
    // entries.
    IDictionary^ d = gcnew SimpleDictionary(3);

    // Add three people and their ages to the dictionary.
    d->Add("Jeff", 40);
    d->Add("Kristin", 34);
    d->Add("Aidan", 1);

    Console::WriteLine("Number of elements in dictionary = {0}",
        d->Count);

    Console::WriteLine("Does dictionary contain 'Jeff'? {0}",
        d->Contains("Jeff"));
    Console::WriteLine("Jeff's age is {0}", d["Jeff"]);

    // Display every entry's key and value.
    for each (DictionaryEntry^ de in d)
    {
        Console::WriteLine("{0} is {1} years old.", de->Key,
            de->Value);
    }

    // Remove an entry that exists.
    d->Remove("Jeff");

    // Remove an entry that does not exist, but do not throw an
    // exception.
    d->Remove("Max");

    // Show the names (keys) of the people in the dictionary.
    for each (String^ s in d->Keys)
    {
        Console::WriteLine(s);
    }

    // Show the ages (values) of the people in the dictionary.
    for each (int age in d->Values)
    {
        Console::WriteLine(age);
    }
}

// This code produces the following output.
//
// Number of elements in dictionary = 3
// Does dictionary contain 'Jeff'? True
// Jeff's age is 40
// Jeff is 40 years old.
// Kristin is 34 years old.
// Aidan is 1 years old.
// Kristin
// Aidan
// 34
// 1

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionaryEnumerator 成员
System.Collections 命名空间
IDictionary
IEnumerator
System.Collections.Generic IEnumerator T


IDictionaryEnumerator 成员

IDictionaryEnumerator 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDictionaryEnumerator 接口

枚举非泛型字典的元素。

IDictionaryEnumerator 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDictionaryEnumerator 接口
System.Collections 命名空间


IDictionaryEnumerator 方法

IDictionaryEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDictionaryEnumerator 接口

IDictionaryEnumerator 类型公开以下成员。

名称 说明
页首

参考

IDictionaryEnumerator 接口
System.Collections 命名空间


IDictionaryEnumerator 属性

IDictionaryEnumerator 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDictionaryEnumerator 接口

IDictionaryEnumerator 类型公开以下成员。

名称 说明
页首

参考

IDictionaryEnumerator 接口
System.Collections 命名空间


IDictionaryEnumerator ..::.Entry 属性

IDictionaryEnumerator
.
.
::
.
Entry 属性
IDictionaryEnumerator 接口

同时获取当前字典项的键和值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property Entry As DictionaryEntry
    Get
DictionaryEntry Entry { get; }
property DictionaryEntry Entry {
    DictionaryEntry get ();
}
abstract Entry : DictionaryEntry

属性值

类型： System.Collections DictionaryEntry
同时包含当前字典项的键和值的 DictionaryEntry。
异常 | 条件
InvalidOperationException | 将 IDictionaryEnumerator 定位于字典的第一项之前或最后一项之后。

创建枚举数或调用 Reset 方法后，必须先通过调用 MoveNext 方法来使枚举数前进到集合的第一个元素，然后才能读取 Entry 属性的值；否则 Entry 是不确定的。

如果对 MoveNext 的最后一次调用返回 false（指示集合的末尾），则 Entry 也会引发异常。

Entry 不移动枚举数的位置，而且在调用 MoveNext 或 Reset 之前，对 Entry 的连续调用返回相同的对象。

对实现者的说明

从 IEnumerator 继承的 Current 属性返回一个 Object，此返回值是一个已装箱的 DictionaryEntry，与 Entry 属性的返回值类似。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionaryEnumerator 接口
IDictionaryEnumerator 成员
System.Collections 命名空间
Reset
MoveNext
Key
Value


IDictionaryEnumerator ..::.Key 属性

IDictionaryEnumerator
.
.
::
.
Key 属性
IDictionaryEnumerator 接口

获取当前字典项的键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property Key As Object
    Get
Object Key { get; }
property Object^ Key {
    Object^ get ();
}
abstract Key : Object

属性值

类型： System Object
当前枚举元素的键。
异常 | 条件
InvalidOperationException | 将 IDictionaryEnumerator 定位于字典的第一项之前或最后一项之后。

创建枚举数或调用 Reset 方法后，必须先通过调用 MoveNext 方法来使枚举数前进到集合的第一个元素，然后才能读取 Key 属性的值；否则 Key 是不确定的。

如果对 MoveNext 的最后一次调用返回 false（指示集合的末尾），则 Key 也会引发异常。

Key 不移动枚举数的位置，而且在调用 MoveNext 或 Reset 之前，对 Key 的连续调用返回相同的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionaryEnumerator 接口
IDictionaryEnumerator 成员
System.Collections 命名空间
Reset
MoveNext
Value
Entry


IDictionaryEnumerator ..::.Value 属性

IDictionaryEnumerator
.
.
::
.
Value 属性
IDictionaryEnumerator 接口

获取当前字典项的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property Value As Object
    Get
Object Value { get; }
property Object^ Value {
    Object^ get ();
}
abstract Value : Object

属性值

类型： System Object
当前枚举元素的值。
异常 | 条件
InvalidOperationException | 将 IDictionaryEnumerator 定位于字典的第一项之前或最后一项之后。

创建枚举数或调用 Reset 方法后，必须先通过调用 MoveNext 方法来使枚举数前进到集合的第一个元素，然后才能读取 Value 属性的值；否则 Value 是不确定的。

如果对 MoveNext 的最后一次调用返回 false（指示集合的末尾），则 Value 也会引发异常。

Value 不移动枚举数的位置，而且在调用 MoveNext 或 Reset 之前，对 Value 的连续调用返回相同的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDictionaryEnumerator 接口
IDictionaryEnumerator 成员
System.Collections 命名空间
Reset
MoveNext
Key
Entry


IEnumerable 接口

IEnumerable 接口
成员

公开枚举器，该枚举器支持在非泛型集合上进行简单迭代。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")> _
Public Interface IEnumerable
[ComVisibleAttribute(true)]
[GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerable
[ComVisibleAttribute(true)]
[GuidAttribute(L"496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface class IEnumerable
[<ComVisibleAttribute(true)>]
[<GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")>]
type IEnumerable =  interface end

有关此接口的泛形版本，请参见 System.Collections.Generic..::.IEnumerable<(Of <(T>)>)。

对实现者的说明

必须实现 IEnumerable 以支持 Microsoft Visual Basic 的 foreach 语义。允许枚举数的 COM 类也实现此接口。 必须实现 IEnumerable 以支持 Microsoft Visual Basic 的 foreach 语义。允许枚举数的 COM 类也实现此接口。

下面的代码示例演示如何实现自定义集合的 IEnumerable 和 IEnumerator 接口。在此示例中，没有显式调用这些接口的成员，但实现了它们，以便支持使用 foreach（在 Visual Basic 中为 For Each）循环访问该集合。 下面的代码示例演示如何实现自定义集合的 IEnumerable 和 IEnumerator 接口。在此示例中，没有显式调用这些接口的成员，但实现了它们，以便支持使用 foreach（在 Visual Basic 中为 For Each）循环访问该集合。

Imports System
Imports System.Collections

Public Class Person

    Public Sub New(ByVal fName As String, ByVal lName As String)
        Me.firstName = fName
        Me.lastName = lName
    End Sub

    Public firstName As String
    Public lastName As String
End Class

Public Class People
    Implements IEnumerable

    Private _people() As Person

    Public Sub New(ByVal pArray() As Person)
        _people = New Person(pArray.Length - 1) {}

        Dim i As Integer
        For i = 0 To pArray.Length - 1
            _people(i) = pArray(i)
        Next i
    End Sub

    Public Function GetEnumerator() As IEnumerator _
      Implements IEnumerable.GetEnumerator

        Return New PeopleEnum(_people)
    End Function

End Class

Public Class PeopleEnum
    Implements IEnumerator

    Public _people() As Person

    ' Enumerators are positioned before the first element
    ' until the first MoveNext() call.
    Dim position As Integer = -1

    Public Sub New(ByVal list() As Person)
        _people = list
    End Sub

    Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
        position = position + 1
        Return (position < _people.Length)
    End Function

    Public Sub Reset() Implements IEnumerator.Reset
        position = -1
    End Sub

    Public ReadOnly Property Current() As Object Implements IEnumerator.Current
        Get
            Try
                Return _people(position)
            Catch ex As IndexOutOfRangeException
                Throw New InvalidOperationException()
            End Try
        End Get
    End Property
End Class

Class App
    Shared Sub Main()
        Dim peopleArray() As Person = { _
            New Person("John", "Smith"), _
            New Person("Jim", "Johnson"), _
            New Person("Sue", "Rabon")}

        Dim peopleList As New People(peopleArray)
        Dim p As Person
        For Each p In peopleList
            Console.WriteLine(p.firstName + " " + p.lastName)
        Next

    End Sub
End Class

' This code produces output similar to the following:
'
' John Smith
' Jim Johnson
' Sue Rabon

using System;
using System.Collections;

public class Person
{
    public Person(string fName, string lName)
    {
        this.firstName = fName;
        this.lastName = lName;
    }

    public string firstName;
    public string lastName;
}

public class People : IEnumerable
{
    private Person[] _people;
    public People(Person[] pArray)
    {
        _people = new Person[pArray.Length];

        for (int i = 0; i < pArray.Length; i++)
        {
            _people[i] = pArray[i];
        }
    }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return new PeopleEnum(_people);
        }
}

public class PeopleEnum : IEnumerator
{
    public Person[] _people;

    // Enumerators are positioned before the first element
    // until the first MoveNext() call.
    int position = -1;

    public PeopleEnum(Person[] list)
    {
        _people = list;
    }

    public bool MoveNext()
    {
        position++;
        return (position < _people.Length);
    }

    public void Reset()
    {
        position = -1;
    }

    public object Current
    {
        get
        {
            try
            {
                return _people[position];
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
}

class App
{
    static void Main()
    {
        Person[] peopleArray = new Person[3]
        {
            new Person("John", "Smith"),
            new Person("Jim", "Johnson"),
            new Person("Sue", "Rabon"),
        };

        People peopleList = new People(peopleArray);
        foreach (Person p in peopleList)
            Console.WriteLine(p.firstName + " " + p.lastName);

    }
}

/* This code produces output similar to the following:
 *
 * John Smith
 * Jim Johnson
 * Sue Rabon
 *
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEnumerable 成员
System.Collections 命名空间
IEnumerator
System.Collections.Generic IEnumerable T


IEnumerable 成员

IEnumerable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IEnumerable 接口

公开枚举器，该枚举器支持在非泛型集合上进行简单迭代。

IEnumerable 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IEnumerable 接口
System.Collections 命名空间


IEnumerable 方法

IEnumerable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IEnumerable 接口

IEnumerable 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IEnumerable 接口
System.Collections 命名空间


IEnumerable ..::.GetEnumerator 方法

IEnumerable
.
.
::
.
GetEnumerator 方法
IEnumerable 接口

返回一个循环访问集合的枚举器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function GetEnumerator As IEnumerator
IEnumerator GetEnumerator()
IEnumerator^ GetEnumerator()
abstract GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
可用于循环访问集合的 IEnumerator 对象。

C# 语言的 foreach 语句（在 Visual Basic 中为 For Each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 For Each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 方法还将枚举数返回到此位置。在此位置上，Current 属性为未定义。因此，在读取 Current 的值之前，必须先通过调用 MoveNext 方法将枚举数前移到集合中的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 方法还将枚举数返回到此位置。在此位置上，Current 属性为未定义。因此，在读取 Current 的值之前，必须先通过调用 MoveNext 方法将枚举数前移到集合中的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 方法还将枚举数返回到此位置。在此位置上，Current 属性为未定义。因此，在读取 Current 的值之前，必须先通过调用 MoveNext 方法将枚举数前移到集合中的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 方法还将枚举数返回到此位置。在此位置上，Current 属性为未定义。因此，在读取 Current 的值之前，必须先通过调用 MoveNext 方法将枚举数前移到集合中的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最后一次调用返回 false，则 Current 为未定义。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最后一次调用返回 false，则 Current 为未定义。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最后一次调用返回 false，则 Current 为未定义。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最后一次调用返回 false，则 Current 为未定义。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

下面的代码示例演示如何实现自定义集合的 IEnumerable 接口。在此示例中，没有显式调用但实现了 GetEnumerator，以便支持使用 foreach（在 Visual Basic 中为 For Each）。此代码示例摘自 IEnumerable 接口的一个更大的示例。 下面的代码示例演示如何实现自定义集合的 IEnumerable 接口。在此示例中，没有显式调用但实现了 GetEnumerator，以便支持使用 foreach（在 Visual Basic 中为 For Each）。此代码示例摘自 IEnumerable 接口的一个更大的示例。 下面的代码示例演示如何实现自定义集合的 IEnumerable 接口。在此示例中，没有显式调用但实现了 GetEnumerator，以便支持使用 foreach（在 Visual Basic 中为 For Each）。此代码示例摘自 IEnumerable 接口的一个更大的示例。

Imports System
Imports System.Collections

Public Class Person

    Public Sub New(ByVal fName As String, ByVal lName As String)
        Me.firstName = fName
        Me.lastName = lName
    End Sub

    Public firstName As String
    Public lastName As String
End Class

Public Class People
    Implements IEnumerable

    Private _people() As Person

    Public Sub New(ByVal pArray() As Person)
        _people = New Person(pArray.Length - 1) {}

        Dim i As Integer
        For i = 0 To pArray.Length - 1
            _people(i) = pArray(i)
        Next i
    End Sub

    Public Function GetEnumerator() As IEnumerator _
      Implements IEnumerable.GetEnumerator

        Return New PeopleEnum(_people)
    End Function

End Class

Public Class PeopleEnum
    Implements IEnumerator

    Public _people() As Person

    ' Enumerators are positioned before the first element
    ' until the first MoveNext() call.
    Dim position As Integer = -1

    Public Sub New(ByVal list() As Person)
        _people = list
    End Sub

    Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
        position = position + 1
        Return (position < _people.Length)
    End Function

    Public Sub Reset() Implements IEnumerator.Reset
        position = -1
    End Sub

    Public ReadOnly Property Current() As Object Implements IEnumerator.Current
        Get
            Try
                Return _people(position)
            Catch ex As IndexOutOfRangeException
                Throw New InvalidOperationException()
            End Try
        End Get
    End Property
End Class

Class App
    Shared Sub Main()
        Dim peopleArray() As Person = { _
            New Person("John", "Smith"), _
            New Person("Jim", "Johnson"), _
            New Person("Sue", "Rabon")}

        Dim peopleList As New People(peopleArray)
        Dim p As Person
        For Each p In peopleList
            Console.WriteLine(p.firstName + " " + p.lastName)
        Next

    End Sub
End Class

' This code produces output similar to the following:
'
' John Smith
' Jim Johnson
' Sue Rabon

using System;
using System.Collections;

public class Person
{
    public Person(string fName, string lName)
    {
        this.firstName = fName;
        this.lastName = lName;
    }

    public string firstName;
    public string lastName;
}

public class People : IEnumerable
{
    private Person[] _people;
    public People(Person[] pArray)
    {
        _people = new Person[pArray.Length];

        for (int i = 0; i < pArray.Length; i++)
        {
            _people[i] = pArray[i];
        }
    }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return new PeopleEnum(_people);
        }
}

public class PeopleEnum : IEnumerator
{
    public Person[] _people;

    // Enumerators are positioned before the first element
    // until the first MoveNext() call.
    int position = -1;

    public PeopleEnum(Person[] list)
    {
        _people = list;
    }

    public bool MoveNext()
    {
        position++;
        return (position < _people.Length);
    }

    public void Reset()
    {
        position = -1;
    }

    public object Current
    {
        get
        {
            try
            {
                return _people[position];
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
}

class App
{
    static void Main()
    {
        Person[] peopleArray = new Person[3]
        {
            new Person("John", "Smith"),
            new Person("Jim", "Johnson"),
            new Person("Sue", "Rabon"),
        };

        People peopleList = new People(peopleArray);
        foreach (Person p in peopleList)
            Console.WriteLine(p.firstName + " " + p.lastName);

    }
}

/* This code produces output similar to the following:
 *
 * John Smith
 * Jim Johnson
 * Sue Rabon
 *
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEnumerable 接口
IEnumerable 成员
System.Collections 命名空间
IEnumerator


IEnumerator 接口

IEnumerator 接口
成员

支持对非泛型集合的简单迭代。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<GuidAttribute("496B0ABF-CDEE-11d3-88E8-00902754C43A")> _
<ComVisibleAttribute(True)> _
Public Interface IEnumerator
[GuidAttribute("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
[ComVisibleAttribute(true)]
public interface IEnumerator
[GuidAttribute(L"496B0ABF-CDEE-11d3-88E8-00902754C43A")]
[ComVisibleAttribute(true)]
public interface class IEnumerator
[<GuidAttribute("496B0ABF-CDEE-11d3-88E8-00902754C43A")>]
[<ComVisibleAttribute(true)>]
type IEnumerator =  interface end

IEnumerator 是所有非泛型枚举数的基接口。

有关此接口的泛形版本，请参见 IEnumerator<(Of <(T>)>)。

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数定位在集合中第一个元素前。Reset 方法还会将枚举数返回到此位置。在此位置，调用 Current 属性会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 方法将枚举数提前到集合的第一个元素。 最初，枚举数定位在集合中第一个元素前。Reset 方法还会将枚举数返回到此位置。在此位置，调用 Current 属性会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 方法将枚举数提前到集合的第一个元素。 最初，枚举数定位在集合中第一个元素前。Reset 方法还会将枚举数返回到此位置。在此位置，调用 Current 属性会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 方法将枚举数提前到集合的第一个元素。 最初，枚举数定位在集合中第一个元素前。Reset 方法还会将枚举数返回到此位置。在此位置，调用 Current 属性会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 方法将枚举数提前到集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置为下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置为下一个元素。

如果 MoveNext 越过集合的末尾，枚举数就会被放置在此集合中最后一个元素的后面，且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，枚举数就会被放置在此集合中最后一个元素的后面，且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，枚举数就会被放置在此集合中最后一个元素的后面，且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，枚举数就会被放置在此集合中最后一个元素的后面，且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改集合，那么即使枚举数已经无效，Current 也将返回它所设置成的元素。 只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改集合，那么即使枚举数已经无效，Current 也将返回它所设置成的元素。 只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改集合，那么即使枚举数已经无效，Current 也将返回它所设置成的元素。

枚举数没有对集合的独占访问权；因此，从头到尾对一个集合进行枚举在本质上不是一个线程安全的过程。即使一个集合已进行同步，其他线程仍可以修改该集合，这将导致枚举数引发异常。若要在枚举过程中保证线程安全，可以在整个枚举过程中锁定集合，或者捕捉由于其他线程进行的更改而引发的异常。 枚举数没有对集合的独占访问权；因此，从头到尾对一个集合进行枚举在本质上不是一个线程安全的过程。即使一个集合已进行同步，其他线程仍可以修改该集合，这将导致枚举数引发异常。若要在枚举过程中保证线程安全，可以在整个枚举过程中锁定集合，或者捕捉由于其他线程进行的更改而引发的异常。 枚举数没有对集合的独占访问权；因此，从头到尾对一个集合进行枚举在本质上不是一个线程安全的过程。即使一个集合已进行同步，其他线程仍可以修改该集合，这将导致枚举数引发异常。若要在枚举过程中保证线程安全，可以在整个枚举过程中锁定集合，或者捕捉由于其他线程进行的更改而引发的异常。

下面的代码示例演示如何实现自定义集合的 IEnumerable 和 IEnumerator 接口。在此示例中，没有显式调用这些接口的成员，但实现了它们，以便支持使用 foreach（在 Visual Basic 中为 for each）循环访问该集合。 下面的代码示例演示如何实现自定义集合的 IEnumerable 和 IEnumerator 接口。在此示例中，没有显式调用这些接口的成员，但实现了它们，以便支持使用 foreach（在 Visual Basic 中为 for each）循环访问该集合。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEnumerator 成员
System.Collections 命名空间
IEnumerable
ICollection
System.Collections.Generic IEnumerator T


IEnumerator 成员

IEnumerator 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IEnumerator 接口

支持对非泛型集合的简单迭代。

IEnumerator 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IEnumerator 接口
System.Collections 命名空间


IEnumerator 方法

IEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IEnumerator 接口

IEnumerator 类型公开以下成员。

名称 说明
页首

参考

IEnumerator 接口
System.Collections 命名空间


IEnumerator ..::.MoveNext 方法

IEnumerator
.
.
::
.
MoveNext 方法
IEnumerator 接口

将枚举数推进到集合的下一个元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function MoveNext As Boolean
bool MoveNext()
bool MoveNext()
abstract MoveNext : unit -> bool

返回值

类型： System Boolean
如果枚举数成功地推进到下一个元素，则为 true；如果枚举数越过集合的结尾，则为 false。
异常 | 条件
InvalidOperationException | 在创建了枚举数后集合被修改了。

在创建枚举数之后或在调用 Reset 方法后，枚举数放置在集合的第一个元素之前，首次调用 MoveNext 方法会将枚举数移到集合的第一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将被放置在此集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，在调用 Reset 之前，对 MoveNext 的后续调用也返回 false。 如果 MoveNext 越过集合的末尾，则枚举数将被放置在此集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，在调用 Reset 之前，对 MoveNext 的后续调用也返回 false。

只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。 只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。

下面的代码示例演示如何实现自定义集合的 IEnumerator 接口。在此示例中，没有显式调用但实现了 MoveNext，以便支持使用 foreach（在 Visual Basic 中为 for each）。此代码示例摘自 IEnumerator 接口的一个更大的示例。 下面的代码示例演示如何实现自定义集合的 IEnumerator 接口。在此示例中，没有显式调用但实现了 MoveNext，以便支持使用 foreach（在 Visual Basic 中为 for each）。此代码示例摘自 IEnumerator 接口的一个更大的示例。 下面的代码示例演示如何实现自定义集合的 IEnumerator 接口。在此示例中，没有显式调用但实现了 MoveNext，以便支持使用 foreach（在 Visual Basic 中为 for each）。此代码示例摘自 IEnumerator 接口的一个更大的示例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEnumerator 接口
IEnumerator 成员
System.Collections 命名空间
Current
Reset


IEnumerator ..::.Reset 方法

IEnumerator
.
.
::
.
Reset 方法
IEnumerator 接口

将枚举数设置为其初始位置，该位置位于集合中第一个元素之前。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Sub Reset
void Reset()
void Reset()
abstract Reset : unit -> unit

异常 | 条件
InvalidOperationException | 在创建了枚举数后集合被修改了。

只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次调用 MoveNext 或 Reset 方法会引发 InvalidOperationException。 只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次调用 MoveNext 或 Reset 方法会引发 InvalidOperationException。

Reset 方法是为 COM 互操作而提供的。没有必要将其实现；实施者仅引发 NotSupportedException。 Reset 方法是为 COM 互操作而提供的。没有必要将其实现；实施者仅引发 NotSupportedException。

对实现者的说明

对 Reset 的所有调用必须导致枚举数的同一状态。首选实现是将枚举数移动到集合的开始处（第一个元素之前）。如果在创建枚举数后对集合进行了修改，首选实现将使枚举数失效，这与 MoveNext 和 Current 一致。 对 Reset 的所有调用必须导致枚举数的同一状态。首选实现是将枚举数移动到集合的开始处（第一个元素之前）。如果在创建枚举数后对集合进行了修改，首选实现将使枚举数失效，这与 MoveNext 和 Current 一致。 对 Reset 的所有调用必须导致枚举数的同一状态。首选实现是将枚举数移动到集合的开始处（第一个元素之前）。如果在创建枚举数后对集合进行了修改，首选实现将使枚举数失效，这与 MoveNext 和 Current 一致。

下面的代码示例演示如何实现自定义集合的 IEnumerator 接口。在此示例中，没有显式调用但实现了 Reset，以便支持使用 foreach（在 Visual Basic 中为 for each）。此代码示例摘自 IEnumerator 接口的一个更大的示例。 下面的代码示例演示如何实现自定义集合的 IEnumerator 接口。在此示例中，没有显式调用但实现了 Reset，以便支持使用 foreach（在 Visual Basic 中为 for each）。此代码示例摘自 IEnumerator 接口的一个更大的示例。 下面的代码示例演示如何实现自定义集合的 IEnumerator 接口。在此示例中，没有显式调用但实现了 Reset，以便支持使用 foreach（在 Visual Basic 中为 for each）。此代码示例摘自 IEnumerator 接口的一个更大的示例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEnumerator 接口
IEnumerator 成员
System.Collections 命名空间
MoveNext
Current


IEnumerator 属性

IEnumerator 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IEnumerator 接口

IEnumerator 类型公开以下成员。

名称 说明
页首

参考

IEnumerator 接口
System.Collections 命名空间


IEnumerator ..::.Current 属性

IEnumerator
.
.
::
.
Current 属性
IEnumerator 接口

获取集合中的当前元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property Current As Object
    Get
Object Current { get; }
property Object^ Current {
    Object^ get ();
}
abstract Current : Object

属性值

类型： System Object
集合中的当前元素。
异常 | 条件
InvalidOperationException | 枚举数定位在该集合的第一个元素之前或最后一个元素之后。

创建枚举数或调用 Reset 方法后，必须先通过调用 MoveNext 方法将枚举数前移到集合的第一个元素，然后才能读取 Current 属性的值；否则 Current 是未定义的。

如果对 MoveNext 的上一次调用返回 false（它指示集合的结尾），则 Current 也会引发异常。

Current 不移动枚举数的位置，而且在调用 MoveNext 或 Reset 之前，对 Current 的连续调用返回相同的对象。

只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改集合，那么即使枚举数已经无效，Current 也将返回它所设置成的元素。 只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改集合，那么即使枚举数已经无效，Current 也将返回它所设置成的元素。 只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（如添加、修改或删除元素），则枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改集合，那么即使枚举数已经无效，Current 也将返回它所设置成的元素。

下面的代码示例演示如何实现自定义集合的 IEnumerator 接口。在此示例中，没有显式调用但实现了 Current，以便支持使用 foreach（在 Visual Basic 中为 for each）。此代码示例摘自 IEnumerator 接口的一个更大的示例。 下面的代码示例演示如何实现自定义集合的 IEnumerator 接口。在此示例中，没有显式调用但实现了 Current，以便支持使用 foreach（在 Visual Basic 中为 for each）。此代码示例摘自 IEnumerator 接口的一个更大的示例。 下面的代码示例演示如何实现自定义集合的 IEnumerator 接口。在此示例中，没有显式调用但实现了 Current，以便支持使用 foreach（在 Visual Basic 中为 for each）。此代码示例摘自 IEnumerator 接口的一个更大的示例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEnumerator 接口
IEnumerator 成员
System.Collections 命名空间
MoveNext
Reset


IEqualityComparer 接口

IEqualityComparer 接口
成员

定义方法以支持对象的相等比较。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IEqualityComparer
[ComVisibleAttribute(true)]
public interface IEqualityComparer
[ComVisibleAttribute(true)]
public interface class IEqualityComparer
[<ComVisibleAttribute(true)>]
type IEqualityComparer =  interface end

使用此接口，可以实现集合的自定义相等比较。即，您可以创建自己的相等定义，并指定此定义与接受 IEqualityComparer 接口的集合类型一起使用。在 .NET Framework 中，Hashtable、NameValueCollection 和 OrderedDictionary 集合类型的构造函数接受此接口。 使用此接口，可以实现集合的自定义相等比较。即，您可以创建自己的相等定义，并指定此定义与接受 IEqualityComparer 接口的集合类型一起使用。在 .NET Framework 中，Hashtable、NameValueCollection 和 OrderedDictionary 集合类型的构造函数接受此接口。 使用此接口，可以实现集合的自定义相等比较。即，您可以创建自己的相等定义，并指定此定义与接受 IEqualityComparer 接口的集合类型一起使用。在 .NET Framework 中，Hashtable、NameValueCollection 和 OrderedDictionary 集合类型的构造函数接受此接口。

此接口仅支持相等比较。IComparer 接口则允许自定义筛选和排序比较。 此接口仅支持相等比较。IComparer 接口则允许自定义筛选和排序比较。

有关此接口的泛型版本，请参见 System.Collections.Generic..::.IEqualityComparer<(Of <(T>)>)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEqualityComparer 成员
System.Collections 命名空间
Hashtable
NameValueCollection
OrderedDictionary
IComparer


IEqualityComparer 成员

IEqualityComparer 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IEqualityComparer 接口

定义方法以支持对象的相等比较。

IEqualityComparer 类型公开以下成员。

名称 说明
页首

参考

IEqualityComparer 接口
System.Collections 命名空间


IEqualityComparer 方法

IEqualityComparer 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IEqualityComparer 接口

IEqualityComparer 类型公开以下成员。

名称 说明
页首

参考

IEqualityComparer 接口
System.Collections 命名空间


IEqualityComparer ..::.Equals 方法

IEqualityComparer
.
.
::
.
Equals 方法
IEqualityComparer 接口

确定指定的对象是否相等。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function Equals ( _
    x As Object, _
    y As Object _
) As Boolean
bool Equals(
    Object x,
    Object y
)
bool Equals(
    Object^ x,
    Object^ y
)
abstract Equals :
        x:Object *
        y:Object -> bool

参数

x
类型： System Object
要比较的第一个对象。
y
类型： System Object
要比较的第二个对象。

返回值

类型： System Boolean
如果指定的对象相等，则为 true；否则为 false。
异常 | 条件
ArgumentException | x 和 y 属于不同类型，它们都无法处理与另一个进行的比较。

实现此方法可提供对象的自定义相等比较。

对实现者的说明

Equals 方法是自反的、对称的和可传递的。也就是说，如果此方法用于将某个对象与其自身比较，则它将返回 true；如果对 y 和 x 执行此方法返回 true，则对 x 和 y 这两个对象也返回 true；如果对 x 和 y 执行此方法返回 true，并且对 y 和 z 执行此方法也返回 true，则对 x 和 z 这两个对象也返回 true。 Equals 方法是自反的、对称的和可传递的。也就是说，如果此方法用于将某个对象与其自身比较，则它将返回 true；如果对 y 和 x 执行此方法返回 true，则对 x 和 y 这两个对象也返回 true；如果对 x 和 y 执行此方法返回 true，并且对 y 和 z 执行此方法也返回 true，则对 x 和 z 这两个对象也返回 true。

实现需要确保如果对两个对象 x 和 y 执行 Equals 方法返回 true，则对 x 和 y 分别执行 GetHashCode 方法所返回的值必须相等。

下面的代码示例演示如何实现一个区分大小写的 IEqualityComparer。此示例使用 CaseInsensitiveComparer..::.Compare 方法，根据提供的 CultureInfo 确定两个对象是否相等。 下面的代码示例演示如何实现一个区分大小写的 IEqualityComparer。此示例使用 CaseInsensitiveComparer..::.Compare 方法，根据提供的 CultureInfo 确定两个对象是否相等。

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

ref class myCultureComparer : IEqualityComparer
{
private:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    virtual int GetHashCode(Object^ obj)
    {
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEqualityComparer 接口
IEqualityComparer 成员
System.Collections 命名空间


IEqualityComparer ..::.GetHashCode 方法

IEqualityComparer
.
.
::
.
GetHashCode 方法
IEqualityComparer 接口

返回指定对象的哈希代码。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function GetHashCode ( _
    obj As Object _
) As Integer
int GetHashCode(
    Object obj
)
int GetHashCode(
    Object^ obj
)
abstract GetHashCode :
        obj:Object -> int

参数

obj
类型： System Object
Object，将为其返回哈希代码。

返回值

类型： System Int32
指定对象的哈希代码。
异常 | 条件
ArgumentNullException | obj 的类型为引用类型，obj 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现此方法可为对象提供自定义的哈希代码，对应于 Equals 方法提供的自定义相等比较。

对实现者的说明

实现需要确保如果对两个对象 x 和 y 执行 Equals 方法返回 true，则对 x 和 y 分别执行 GetHashCode 方法所返回的值必须相等。

下面的代码示例演示如何实现一个区分大小写的 IEqualityComparer。在此示例中，GetHashCode 方法返回由 Object 类型提供的哈希代码。 下面的代码示例演示如何实现一个区分大小写的 IEqualityComparer。在此示例中，GetHashCode 方法返回由 Object 类型提供的哈希代码。

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

ref class myCultureComparer : IEqualityComparer
{
private:
    CaseInsensitiveComparer^ myComparer;

public:
    myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer::DefaultInvariant;
    }

    myCultureComparer(CultureInfo^ myCulture)
    {
        myComparer = gcnew CaseInsensitiveComparer(myCulture);
    }

    virtual bool Equals(Object^ x, Object^ y)
    {
        if (myComparer->Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    virtual int GetHashCode(Object^ obj)
    {
        return obj->ToString()->ToLower()->GetHashCode();
    }
};

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IEqualityComparer 接口
IEqualityComparer 成员
System.Collections 命名空间
Object GetHashCode
System.Collections IHashCodeProvider


IHashCodeProvider 接口

IHashCodeProvider 接口
成员

注意：此 API 现在已过时。

使用自定义哈希函数为对象提供哈希代码。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
<ObsoleteAttribute("Please use IEqualityComparer instead.")> _
Public Interface IHashCodeProvider
[ComVisibleAttribute(true)]
[ObsoleteAttribute("Please use IEqualityComparer instead.")]
public interface IHashCodeProvider
[ComVisibleAttribute(true)]
[ObsoleteAttribute(L"Please use IEqualityComparer instead.")]
public interface class IHashCodeProvider
[<ComVisibleAttribute(true)>]
[<ObsoleteAttribute("Please use IEqualityComparer instead.")>]
type IHashCodeProvider =  interface end

IHashCodeProvider 接口和 Hashtable 类一起使用。被 Hashtable 对象用作键的对象必须重写 Object..::.GetHashCode 和 Object..::.Equals 方法。Object..::.GetHashCode 或键的 Object..::.GetHashCode 实现用作哈希代码提供程序。Object..::.Equals 或键的 Object..::.Equals 实现用作比较器。 IHashCodeProvider 接口和 Hashtable 类一起使用。被 Hashtable 对象用作键的对象必须重写 Object..::.GetHashCode 和 Object..::.Equals 方法。Object..::.GetHashCode 或键的 Object..::.GetHashCode 实现用作哈希代码提供程序。Object..::.Equals 或键的 Object..::.Equals 实现用作比较器。 IHashCodeProvider 接口和 Hashtable 类一起使用。被 Hashtable 对象用作键的对象必须重写 Object..::.GetHashCode 和 Object..::.Equals 方法。Object..::.GetHashCode 或键的 Object..::.GetHashCode 实现用作哈希代码提供程序。Object..::.Equals 或键的 Object..::.Equals 实现用作比较器。 IHashCodeProvider 接口和 Hashtable 类一起使用。被 Hashtable 对象用作键的对象必须重写 Object..::.GetHashCode 和 Object..::.Equals 方法。Object..::.GetHashCode 或键的 Object..::.GetHashCode 实现用作哈希代码提供程序。Object..::.Equals 或键的 Object..::.Equals 实现用作比较器。

但是，Hashtable 构造函数的某些重载接受 IHashCodeProvider 实现作为参数，或接受 IComparer 实现作为参数，或者接受两者。如果向该构造函数传递的是 IHashCodeProvider 实现，则该实现的 IHashCodeProvider..::.GetHashCode 方法将用作哈希代码提供程序。如果向该构造函数传递的是 IComparer 实现，则该实现的 IComparer..::.Compare 方法将用作比较器。 但是，Hashtable 构造函数的某些重载接受 IHashCodeProvider 实现作为参数，或接受 IComparer 实现作为参数，或者接受两者。如果向该构造函数传递的是 IHashCodeProvider 实现，则该实现的 IHashCodeProvider..::.GetHashCode 方法将用作哈希代码提供程序。如果向该构造函数传递的是 IComparer 实现，则该实现的 IComparer..::.Compare 方法将用作比较器。 但是，Hashtable 构造函数的某些重载接受 IHashCodeProvider 实现作为参数，或接受 IComparer 实现作为参数，或者接受两者。如果向该构造函数传递的是 IHashCodeProvider 实现，则该实现的 IHashCodeProvider..::.GetHashCode 方法将用作哈希代码提供程序。如果向该构造函数传递的是 IComparer 实现，则该实现的 IComparer..::.Compare 方法将用作比较器。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

IHashCodeProvider 成员
System.Collections 命名空间
Hashtable
IHashCodeProvider
IComparer
CaseInsensitiveHashCodeProvider
IEqualityComparer
System.Collections.Generic IEqualityComparer T


IHashCodeProvider 成员

IHashCodeProvider 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IHashCodeProvider 接口

使用自定义哈希函数为对象提供哈希代码。

IHashCodeProvider 类型公开以下成员。

名称 说明
页首

参考

IHashCodeProvider 接口
System.Collections 命名空间


IHashCodeProvider 方法

IHashCodeProvider 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IHashCodeProvider 接口

IHashCodeProvider 类型公开以下成员。

名称 说明
页首

参考

IHashCodeProvider 接口
System.Collections 命名空间


IHashCodeProvider ..::.GetHashCode 方法

IHashCodeProvider
.
.
::
.
GetHashCode 方法
IHashCodeProvider 接口

返回指定对象的哈希代码。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function GetHashCode ( _
    obj As Object _
) As Integer
int GetHashCode(
    Object obj
)
int GetHashCode(
    Object^ obj
)
abstract GetHashCode :
        obj:Object -> int

参数

obj
类型： System Object
Object，将为其返回哈希代码。

返回值

类型： System Int32
指定对象的哈希代码。
异常 | 条件
ArgumentNullException | obj 的类型为引用类型，obj 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

该方法的返回值决不能持久，有两个原因。首先，可能改变类的哈希函数以生成一个更好的分布，并使旧哈希函数中的所有值都无用。其次，该类的默认实现不保证不同的实例返回相同的值。 该方法的返回值决不能持久，有两个原因。首先，可能改变类的哈希函数以生成一个更好的分布，并使旧哈希函数中的所有值都无用。其次，该类的默认实现不保证不同的实例返回相同的值。 该方法的返回值决不能持久，有两个原因。首先，可能改变类的哈希函数以生成一个更好的分布，并使旧哈希函数中的所有值都无用。其次，该类的默认实现不保证不同的实例返回相同的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IHashCodeProvider 接口
IHashCodeProvider 成员
System.Collections 命名空间
Object GetHashCode


IList 接口

IList 接口
成员

表示可按照索引单独访问的对象的非泛型集合。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<ComVisibleAttribute(True)> _
Public Interface IList _
    Inherits ICollection, IEnumerable
[ComVisibleAttribute(true)]
public interface IList : ICollection, IEnumerable
[ComVisibleAttribute(true)]
public interface class IList : ICollection,
    IEnumerable
[<ComVisibleAttribute(true)>]
type IList =
    interface
        interface ICollection
        interface IEnumerable
    end

IList 泛型接口是 ICollection 接口的子代，并且是所有非泛型列表的基接口。IList 实现有三种类别：只读、固定大小、可变大小。无法修改只读 IList。固定大小的 IList 不允许添加或移除元素，但允许修改现有元素。可变大小的 IList 允许添加、移除和修改元素。 IList 泛型接口是 ICollection 接口的子代，并且是所有非泛型列表的基接口。IList 实现有三种类别：只读、固定大小、可变大小。无法修改只读 IList。固定大小的 IList 不允许添加或移除元素，但允许修改现有元素。可变大小的 IList 允许添加、移除和修改元素。 IList 泛型接口是 ICollection 接口的子代，并且是所有非泛型列表的基接口。IList 实现有三种类别：只读、固定大小、可变大小。无法修改只读 IList。固定大小的 IList 不允许添加或移除元素，但允许修改现有元素。可变大小的 IList 允许添加、移除和修改元素。 IList 泛型接口是 ICollection 接口的子代，并且是所有非泛型列表的基接口。IList 实现有三种类别：只读、固定大小、可变大小。无法修改只读 IList。固定大小的 IList 不允许添加或移除元素，但允许修改现有元素。可变大小的 IList 允许添加、移除和修改元素。 IList 泛型接口是 ICollection 接口的子代，并且是所有非泛型列表的基接口。IList 实现有三种类别：只读、固定大小、可变大小。无法修改只读 IList。固定大小的 IList 不允许添加或移除元素，但允许修改现有元素。可变大小的 IList 允许添加、移除和修改元素。

有关此接口的泛型版本，请参见 System.Collections.Generic..::.IList<(Of <(T>)>)。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。

Imports System
Imports System.Collections

Public Class Program

    Shared Sub Main()

        Dim myList As New SimpleList()

        ' Populate the List
        Console.WriteLine("Populate the List")
        myList.Add("one")
        myList.Add("two")
        myList.Add("three")
        myList.Add("four")
        myList.Add("five")
        myList.Add("six")
        myList.Add("seven")
        myList.Add("eight")
        myList.PrintContents()
        Console.WriteLine()

        ' Remove elements from the list
        Console.WriteLine("Remove elements from the list")
        myList.Remove("six")
        myList.Remove("eight")
        myList.PrintContents()
        Console.WriteLine()

        ' Add an element to the end of the list
        Console.WriteLine("Add an element to the end of the list")
        myList.Add("nine")
        myList.PrintContents()
        Console.WriteLine()

        ' Insert an element into the middle of the list
        Console.WriteLine("Insert an element into the middle of the list")
        myList.Insert(4, "number")
        myList.PrintContents()
        Console.WriteLine()

        ' Check for specific elements in the list
        Console.WriteLine("Check for specific elements in the list")
        Console.WriteLine("List contains 'three': {0}", myList.Contains("three"))
        Console.WriteLine("List contains 'ten': {0}", myList.Contains("ten"))

    End Sub
End Class ' class Program

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

' This code produces output similar to the following:
' Populate the List:
' List has a capacity of 8 and currently has 8 elements.
' List contents: one two three four five six seven eight
'
' Remove elements from the list:
' List has a capacity of 8 and currently has 6 elements.
' List contents: one two three four five seven
'
' Add an element to the end of the list:
' List has a capacity of 8 and currently has 7 elements.
' List contents: one two three four five seven nine
'
' Insert an element into the middle of the list:
' List has a capacity of 8 and currently has 8 elements.
' List contents: one two three four number five seven nine
'
' Check for specific elements in the list:
' List contains "three": True
' List contains "ten": False

using System;
using System.Collections;

class Program
{
    static void Main()
    {
        SimpleList test = new SimpleList();

        // Populate the List
        Console.WriteLine("Populate the List");
        test.Add("one");
        test.Add("two");
        test.Add("three");
        test.Add("four");
        test.Add("five");
        test.Add("six");
        test.Add("seven");
        test.Add("eight");
        test.PrintContents();
        Console.WriteLine();

        // Remove elements from the list
        Console.WriteLine("Remove elements from the list");
        test.Remove("six");
        test.Remove("eight");
        test.PrintContents();
        Console.WriteLine();

        // Add an element to the end of the list
        Console.WriteLine("Add an element to the end of the list");
        test.Add("nine");
        test.PrintContents();
        Console.WriteLine();

        // Insert an element into the middle of the list
        Console.WriteLine("Insert an element into the middle of the list");
        test.Insert(4, "number");
        test.PrintContents();
        Console.WriteLine();

        // Check for specific elements in the list
        Console.WriteLine("Check for specific elements in the list");
        Console.WriteLine("List contains \"three\": {0}", test.Contains("three"));
        Console.WriteLine("List contains \"ten\": {0}", test.Contains("ten"));
    }
} // class Program

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

// This code produces output similar to the following:
// Populate the List:
// List has a capacity of 8 and currently has 8 elements.
// List contents: one two three four five six seven eight
//
// Remove elements from the list:
// List has a capacity of 8 and currently has 6 elements.
// List contents: one two three four five seven
//
// Add an element to the end of the list:
// List has a capacity of 8 and currently has 7 elements.
// List contents: one two three four five seven nine
//
// Insert an element into the middle of the list:
// List has a capacity of 8 and currently has 8 elements.
// List contents: one two three four number five seven nine
//
// Check for specific elements in the list:
// List contains "three": True
// List contains "ten": False

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 成员
System.Collections 命名空间
ArrayList
ICollection
System.Collections.Generic IList T


IList 成员

IList 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IList 接口

表示可按照索引单独访问的对象的非泛型集合。

IList 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

IList 接口
System.Collections 命名空间


IList 方法

IList 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IList 接口

IList 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IList 接口
System.Collections 命名空间


IList ..::.Add 方法

IList
.
.
::
.
Add 方法
IList 接口

向 IList 中添加项。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function Add ( _
    value As Object _
) As Integer
int Add(
    Object value
)
int Add(
    Object^ value
)
abstract Add :
        value:Object -> int

参数

value
类型： System Object
要添加到 IList 的对象。

返回值

类型： System Int32
新元素所插入到的位置，或为 -1 以指示未将该项插入到集合中。
异常 | 条件
NotSupportedException | IList 是只读的。 - 或 - IList 具有固定大小。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IList ..::.Clear 方法

IList
.
.
::
.
Clear 方法
IList 接口

从 IList 中移除所有项。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Sub Clear
void Clear()
void Clear()
abstract Clear : unit -> unit

异常 | 条件
NotSupportedException | IList 是只读的。

此方法的各种实现在如何处理集合的 ICollection..::.Count 和容量方面可能存在差异。通常计数被设置为零，并且对来自该集合元素的其他对象的引用也被释放。容量可设置为零或默认值，也可以保持不变。
此方法的各种实现在如何处理集合的 ICollection..::.Count 和容量方面可能存在差异。通常计数被设置为零，并且对来自该集合元素的其他对象的引用也被释放。容量可设置为零或默认值，也可以保持不变。
此方法的各种实现在如何处理集合的 ICollection..::.Count 和容量方面可能存在差异。通常计数被设置为零，并且对来自该集合元素的其他对象的引用也被释放。容量可设置为零或默认值，也可以保持不变。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IList ..::.Contains 方法

IList
.
.
::
.
Contains 方法
IList 接口

确定 IList 是否包含特定值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function Contains ( _
    value As Object _
) As Boolean
bool Contains(
    Object value
)
bool Contains(
    Object^ value
)
abstract Contains :
        value:Object -> bool

参数

value
类型： System Object
要在 IList 中查找的对象。

返回值

类型： System Boolean
如果在 IList 中找到 Object，则为 true；否则为 false。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IList ..::.IndexOf 方法

IList
.
.
::
.
IndexOf 方法
IList 接口

确定 IList 中特定项的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function IndexOf ( _
    value As Object _
) As Integer
int IndexOf(
    Object value
)
int IndexOf(
    Object^ value
)
abstract IndexOf :
        value:Object -> int

参数

value
类型： System Object
要在 IList 中查找的对象。

返回值

类型： System Int32
如果在列表中找到 value，则为该项的索引；否则为 -1。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IList ..::.Insert 方法

IList
.
.
::
.
Insert 方法
IList 接口

在 IList 中的指定索引处插入项。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Sub Insert ( _
    index As Integer, _
    value As Object _
)
void Insert(
    int index,
    Object value
)
void Insert(
    int index,
    Object^ value
)
abstract Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
从零开始的索引，应在该位置插入 value。
value
类型： System Object
要插入到 IList 中的对象。
异常 | 条件
ArgumentOutOfRangeException | index 不是 IList 中的有效索引。
NotSupportedException | IList 是只读的。 - 或 - IList 具有固定大小。
NullReferenceException | value 在 IList 中是 null 引用。

如果 index 等于 IList 中的项数，则将 value 追加到结尾。

在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，插入点下面的元素将下移以容纳新的元素。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IList ..::.Remove 方法

IList
.
.
::
.
Remove 方法
IList 接口

从 IList 中移除特定对象的第一个匹配项。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Sub Remove ( _
    value As Object _
)
void Remove(
    Object value
)
void Remove(
    Object^ value
)
abstract Remove :
        value:Object -> unit

参数

value
类型： System Object
要从 IList 中移除的对象。
异常 | 条件
NotSupportedException | IList 是只读的。 - 或 - IList 具有固定大小。

在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。如果在 IList 中没有找到 value，则 IList 保持不变，并且不会引发任何异常。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。如果在 IList 中没有找到 value，则 IList 保持不变，并且不会引发任何异常。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。如果在 IList 中没有找到 value，则 IList 保持不变，并且不会引发任何异常。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。如果在 IList 中没有找到 value，则 IList 保持不变，并且不会引发任何异常。

对实现者的说明

如果表中不存在 value，则 Remove 方法不会执行任何操作。特别是，它不应引发异常。 如果表中不存在 value，则 Remove 方法不会执行任何操作。特别是，它不应引发异常。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IList ..::.RemoveAt 方法

IList
.
.
::
.
RemoveAt 方法
IList 接口

移除指定索引处的 IList 项。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Sub RemoveAt ( _
    index As Integer _
)
void RemoveAt(
    int index
)
void RemoveAt(
    int index
)
abstract RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
从零开始的索引（属于要移除的项）。
异常 | 条件
ArgumentOutOfRangeException | index 不是 IList 中的有效索引。
NotSupportedException | IList 是只读的。 - 或 - IList 具有固定大小。

在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IList 属性

IList 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IList 接口

IList 类型公开以下成员。

名称 说明
页首

参考

IList 接口
System.Collections 命名空间


IList ..::.IsFixedSize 属性

IList
.
.
::
.
IsFixedSize 属性
IList 接口

获取一个值，该值指示 IList 是否具有固定大小。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property IsFixedSize As Boolean
    Get
bool IsFixedSize { get; }
property bool IsFixedSize {
    bool get ();
}
abstract IsFixedSize : bool

属性值

类型： System Boolean
如果 IList 具有固定大小，则为 true；否则为 false。

具有固定大小的集合在创建之后不能再添加或移除元素，但是允许修改现有元素。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IList ..::.IsReadOnly 属性

IList
.
.
::
.
IsReadOnly 属性
IList 接口

获取一个值，该值指示 IList 是否为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
ReadOnly Property IsReadOnly As Boolean
    Get
bool IsReadOnly { get; }
property bool IsReadOnly {
    bool get ();
}
abstract IsReadOnly : bool

属性值

类型： System Boolean
如果 IList 为只读，则为 true；否则为 false。

只读集合在创建后就不能再添加、移除或修改元素。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IList ..::.Item 属性

IList
.
.
::
.
Item 属性
IList 接口

获取或设置指定索引处的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Property Item ( _
    index As Integer _
) As Object
    Get
    Set
Object this[
    int index
] { get; set; }
property Object^ Item[int index] {
    Object^ get (int index);
    void set (int index, Object^ value);
}
abstract Item : Object with get, set

参数

index
类型： System Int32
要获得或设置的元素从零开始的索引。

属性值

类型： System Object
指定索引处的元素。
异常 | 条件
ArgumentOutOfRangeException | index 不是 IList 中的有效索引。
NotSupportedException | 设置该属性，而且 IList 为只读。

可以使用下面的语法通过此属性访问集合中的特定元素：myCollection[index]。

C# 语言使用 this 关键字来定义索引器而不是通过实现 Item 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。 C# 语言使用 this 关键字来定义索引器而不是通过实现 Item 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。

下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。 下面的示例演示创建一个简单列表——固定大小列表的 IList 接口的实现。此代码摘自 IList 接口的一个更大示例。

Public Class SimpleList
    Implements IList

    Private _contents(8) As Object
    Private _count As Integer

    Public Sub New()

        _count = 0
    End Sub

    ' IList Members
    Public Function Add(ByVal value As Object) As Integer Implements IList.Add

        If (_count < _contents.Length - 1) Then

            _contents(_count) = value
            _count = _count + 1

            Return (_count - 1)

        Else

            Return -1
        End If
    End Function

    Public Sub Clear() Implements IList.Clear
        _count = 0
    End Sub

    Public Function Contains(ByVal value As Object) As Boolean Implements IList.Contains

        Dim inList As Boolean = False

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                inList = True
                Exit For

            End If

        Next i

        Return inList
    End Function

    Public Function IndexOf(ByVal value As Object) As Integer Implements IList.IndexOf

        Dim itemIndex As Integer = -1

        Dim i As Integer
        For i = 0 To Count

            If _contents(i) = value Then

                itemIndex = i
                Exit For

            End If

        Next i

        Return itemIndex
    End Function

    Public Sub Insert(ByVal index As Integer, ByVal value As Object) Implements IList.Insert

        If (_count + 1) <= (_contents.Length - 1) And (index < Count) And (index >= 0) Then

            _count = _count + 1

            Dim i As Integer
            For i = Count - 1 To index

                _contents(i) = _contents(i - 1)
            Next i

            _contents(index) = value
        End If
    End Sub

    Public ReadOnly Property IsFixedSize() As Boolean Implements IList.IsFixedSize
        Get
            Return True
        End Get
    End Property

    Public ReadOnly Property IsReadOnly() As Boolean Implements IList.IsReadOnly

        Get
            Return False
        End Get
    End Property

    Public Sub Remove(ByVal value As Object) Implements IList.Remove
        RemoveAt(IndexOf(value))
    End Sub

    Public Sub RemoveAt(ByVal index As Integer) Implements IList.RemoveAt

        If index >= 0 And index < Count Then

            Dim i As Integer
            For i = index To Count - 1

                _contents(i) = _contents(i + 1)
            Next i
            _count = _count - 1

        End If
    End Sub

    Public Property Item(ByVal index As Integer) As Object Implements IList.Item

        Get
            Return _contents(index)
        End Get

        Set(ByVal value As Object)
            _contents(index) = value
        End Set
    End Property

    ' ICollection Members

    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Dim j As Integer = index
        Dim i As Integer
        For i = 0 To Count
            array.SetValue(_contents(i), j)
            j = j + 1
        Next i
    End Sub

    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Return _count
        End Get
    End Property

    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            Return False
        End Get
    End Property

    ' Return the current instance since the underlying store is not
    ' publicly available.
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return Me
        End Get
    End Property

    ' IEnumerable Members
    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator

        ' Refer to the IEnumerator documentation for an example of
        ' implementing an enumerator.
        Throw New Exception("The method or operation is not implemented.")
    End Function

    Public Sub PrintContents()

        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length - 1, _count)
        Console.Write("List contents:")

        Dim i As Integer
        For i = 0 To Count

            Console.Write(" {0}", _contents(i))
        Next i

        Console.WriteLine()

    End Sub
End Class

class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;

    public SimpleList()
    {
        _count = 0;
    }

    // IList Members
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;

            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }

    public void Clear()
    {
        _count = 0;
    }

    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }

    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }

    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;

            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }

    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }

    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }

    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }

    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }

    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }

    // ICollection Members

    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }

    public int Count
    {
        get
        {
            return _count;
        }
    }

    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }

    // Return the current instance since the underlying store is not
    // publicly available.
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }

    // IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        // Refer to the IEnumerator documentation for an example of
        // implementing an enumerator.
        throw new Exception("The method or operation is not implemented.");
    }

    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IList 接口
IList 成员
System.Collections 命名空间


IStructuralComparable 接口

IStructuralComparable 接口
成员

支持集合对象的结构比较。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Interface IStructuralComparable
public interface IStructuralComparable
public interface class IStructuralComparable
type IStructuralComparable =  interface end

IStructuralComparable 接口能让您实现集合成员的自定义比较。也就是说，您可以精确定义在排序顺序中一个集合对象是在第二个集合对象之前、之后还是出现在相同位置。然后可以指定此定义与接受 IStructuralComparable 接口的集合类型一起使用。 IStructuralComparable 接口能让您实现集合成员的自定义比较。也就是说，您可以精确定义在排序顺序中一个集合对象是在第二个集合对象之前、之后还是出现在相同位置。然后可以指定此定义与接受 IStructuralComparable 接口的集合类型一起使用。 IStructuralComparable 接口能让您实现集合成员的自定义比较。也就是说，您可以精确定义在排序顺序中一个集合对象是在第二个集合对象之前、之后还是出现在相同位置。然后可以指定此定义与接受 IStructuralComparable 接口的集合类型一起使用。

该接口的单个成员 CompareTo 可确定当前集合对象的排序顺序是小于、等于还是大于另一个对象。当前实例中的成员或元素与第二个对象中的成员或元素的实际比较由 IComparer 接口实现执行，其中包含自定义比较的定义。 该接口的单个成员 CompareTo 可确定当前集合对象的排序顺序是小于、等于还是大于另一个对象。当前实例中的成员或元素与第二个对象中的成员或元素的实际比较由 IComparer 接口实现执行，其中包含自定义比较的定义。

说明 说明

IStructuralComparable 接口仅支持排序或顺序的结构比较。IStructuralEquatable 接口支持结构相等性的自定义比较。 IStructuralComparable 接口仅支持排序或顺序的结构比较。IStructuralEquatable 接口支持结构相等性的自定义比较。

.NET Framework 提供两个默认比较器。一个由 StructuralComparisons..::.StructuralComparer 属性返回；另一个由 Comparer<(Of <(T>)>)..::.Default 属性返回。 .NET Framework 提供两个默认比较器。一个由 StructuralComparisons..::.StructuralComparer 属性返回；另一个由 Comparer<(Of <(T>)>)..::.Default 属性返回。

通用元组类（Tuple<(Of <(T1>)>)、Tuple<(Of <(T1, T2>)>)、Tuple<(Of <(T1, T2, T3>)>) 等）和 Array 类提供了该 IStructuralComparable 接口的显式实现。通过将数组或元组的当前实例强制转换（在 C# 中）或转换（在 Visual Basic 中）为 IStructuralComparable 接口值，并将您的 IComparer 实现作为参数提供给 CompareTo 方法，您可以定义数组或集合的自定义排序顺序。但是，大多数情况下不会调用 CompareTo 方法。而是，通过排序方法（如 Sort(Array, IComparer)）调用 CompareTo 方法。在此情况下，您定义自己的 IComparer 实现并将其作为参数传递给排序方法或集合对象的构造函数。只要该集合进行排序，CompareTo 方法与您的自定义比较器即被调用。 通用元组类（Tuple<(Of <(T1>)>)、Tuple<(Of <(T1, T2>)>)、Tuple<(Of <(T1, T2, T3>)>) 等）和 Array 类提供了该 IStructuralComparable 接口的显式实现。通过将数组或元组的当前实例强制转换（在 C# 中）或转换（在 Visual Basic 中）为 IStructuralComparable 接口值，并将您的 IComparer 实现作为参数提供给 CompareTo 方法，您可以定义数组或集合的自定义排序顺序。但是，大多数情况下不会调用 CompareTo 方法。而是，通过排序方法（如 Sort(Array, IComparer)）调用 CompareTo 方法。在此情况下，您定义自己的 IComparer 实现并将其作为参数传递给排序方法或集合对象的构造函数。只要该集合进行排序，CompareTo 方法与您的自定义比较器即被调用。 通用元组类（Tuple<(Of <(T1>)>)、Tuple<(Of <(T1, T2>)>)、Tuple<(Of <(T1, T2, T3>)>) 等）和 Array 类提供了该 IStructuralComparable 接口的显式实现。通过将数组或元组的当前实例强制转换（在 C# 中）或转换（在 Visual Basic 中）为 IStructuralComparable 接口值，并将您的 IComparer 实现作为参数提供给 CompareTo 方法，您可以定义数组或集合的自定义排序顺序。但是，大多数情况下不会调用 CompareTo 方法。而是，通过排序方法（如 Sort(Array, IComparer)）调用 CompareTo 方法。在此情况下，您定义自己的 IComparer 实现并将其作为参数传递给排序方法或集合对象的构造函数。只要该集合进行排序，CompareTo 方法与您的自定义比较器即被调用。 通用元组类（Tuple<(Of <(T1>)>)、Tuple<(Of <(T1, T2>)>)、Tuple<(Of <(T1, T2, T3>)>) 等）和 Array 类提供了该 IStructuralComparable 接口的显式实现。通过将数组或元组的当前实例强制转换（在 C# 中）或转换（在 Visual Basic 中）为 IStructuralComparable 接口值，并将您的 IComparer 实现作为参数提供给 CompareTo 方法，您可以定义数组或集合的自定义排序顺序。但是，大多数情况下不会调用 CompareTo 方法。而是，通过排序方法（如 Sort(Array, IComparer)）调用 CompareTo 方法。在此情况下，您定义自己的 IComparer 实现并将其作为参数传递给排序方法或集合对象的构造函数。只要该集合进行排序，CompareTo 方法与您的自定义比较器即被调用。 通用元组类（Tuple<(Of <(T1>)>)、Tuple<(Of <(T1, T2>)>)、Tuple<(Of <(T1, T2, T3>)>) 等）和 Array 类提供了该 IStructuralComparable 接口的显式实现。通过将数组或元组的当前实例强制转换（在 C# 中）或转换（在 Visual Basic 中）为 IStructuralComparable 接口值，并将您的 IComparer 实现作为参数提供给 CompareTo 方法，您可以定义数组或集合的自定义排序顺序。但是，大多数情况下不会调用 CompareTo 方法。而是，通过排序方法（如 Sort(Array, IComparer)）调用 CompareTo 方法。在此情况下，您定义自己的 IComparer 实现并将其作为参数传递给排序方法或集合对象的构造函数。只要该集合进行排序，CompareTo 方法与您的自定义比较器即被调用。 通用元组类（Tuple<(Of <(T1>)>)、Tuple<(Of <(T1, T2>)>)、Tuple<(Of <(T1, T2, T3>)>) 等）和 Array 类提供了该 IStructuralComparable 接口的显式实现。通过将数组或元组的当前实例强制转换（在 C# 中）或转换（在 Visual Basic 中）为 IStructuralComparable 接口值，并将您的 IComparer 实现作为参数提供给 CompareTo 方法，您可以定义数组或集合的自定义排序顺序。但是，大多数情况下不会调用 CompareTo 方法。而是，通过排序方法（如 Sort(Array, IComparer)）调用 CompareTo 方法。在此情况下，您定义自己的 IComparer 实现并将其作为参数传递给排序方法或集合对象的构造函数。只要该集合进行排序，CompareTo 方法与您的自定义比较器即被调用。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的每 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的每 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的每 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的每 10 年间隔的人口。

PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对六元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个布尔值（该值指示是按升序还是降序对元组对象进行排序）。 PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对六元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个布尔值（该值指示是按升序还是降序对元组对象进行排序）。

然后，本示例显示未排序的数组元素，将它们按第三个组件（1970 年的人口数据）排序并显示，然后将它们按第六个组件（2000 年的人口数据）排序并显示。请注意，该示例不直接调用 CompareTo 方法。此方法由数组中的每个元组对象的 Sort(Array, IComparer) 方法隐式调用。 然后，本示例显示未排序的数组元素，将它们按第三个组件（1970 年的人口数据）排序并显示，然后将它们按第六个组件（2000 年的人口数据）排序并显示。请注意，该示例不直接调用 CompareTo 方法。此方法由数组中的每个元组对象的 Sort(Array, IComparer) 方法隐式调用。 然后，本示例显示未排序的数组元素，将它们按第三个组件（1970 年的人口数据）排序并显示，然后将它们按第六个组件（2000 年的人口数据）排序并显示。请注意，该示例不直接调用 CompareTo 方法。此方法由数组中的每个元组对象的 Sort(Array, IComparer) 方法隐式调用。

Imports System.Collections
Imports System.Collections.Generic

Public Class PopulationComparer(Of T1, T2, T3, T4, T5, T6) : Implements IComparer
   Private itemPosition As Integer
   Private multiplier As Integer = -1

   Public Sub New(component As Integer)
      Me.New(component, True)
   End Sub

   Public Sub New(component As Integer, descending As Boolean)
      If Not descending Then multiplier = 1

      If component <= 0 Or component > 6 Then
         Throw New ArgumentException("The component argument is out of range.")
      End If
      itemPosition = component
   End Sub

   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare

      Dim tX = TryCast(x, Tuple(Of T1, T2, T3, T4, T5, T6))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY = DirectCast(y, Tuple(Of T1, T2, T3, T4, T5, T6))
         Select Case itemPosition
            Case 1
               Return Comparer(Of T1).Default.Compare(tX.Item1, tY.Item1) * multiplier
            Case 2
               Return Comparer(Of T2).Default.Compare(tX.Item2, tY.Item2) * multiplier
            Case 3
               Return Comparer(Of T3).Default.Compare(tX.Item3, tY.Item3) * multiplier
            Case 4
               Return Comparer(Of T4).Default.Compare(tX.Item4, tY.Item4) * multiplier
            Case 5
               Return Comparer(Of T5).Default.Compare(tX.Item5, tY.Item5) * multiplier
            Case 6
               Return Comparer(Of T6).Default.Compare(tX.Item6, tY.Item6) * multiplier
            ' This should never happen.
            Case Else
               Return 0
         End Select
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      ' Create array of sextuple with population data for three U.S.
      ' cities, 1960-2000.
      Dim cities() =
          { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) }

      ' Display array in unsorted order.
      Console.WriteLine("In unsorted order:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer)(3))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 1970:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer)(6))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'    In unsorted order:
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
'
'    Sorted by population in 1970:
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'
'    Sorted by population in 2000:
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)

using System;
using System.Collections;
using System.Collections.Generic;

public class PopulationComparer<T1, T2, T3, T4, T5, T6> : IComparer
{
   private int itemPosition;
   private int multiplier = -1;

   public PopulationComparer(int component) : this(component, true)
   { }

   public PopulationComparer(int component, bool descending)
   {
      if (! descending) multiplier = 1;

      if (component <= 0 || component > 6)
         throw new ArgumentException("The component argument is out of range.");

      itemPosition = component;
   }

   public int Compare(object x, object y)
   {
      var tX = x as Tuple<T1, T2, T3, T4, T5, T6>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         var tY = y as Tuple<T1, T2, T3, T4, T5, T6>;
         switch (itemPosition)
         {
            case 1:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
            case 2:
               return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2) * multiplier;
            case 3:
               return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3) * multiplier;
            case 4:
               return Comparer<T4>.Default.Compare(tX.Item4, tY.Item4) * multiplier;
            case 5:
               return Comparer<T5>.Default.Compare(tX.Item5, tY.Item5) * multiplier;
            case 6:
               return Comparer<T6>.Default.Compare(tX.Item6, tY.Item6) * multiplier;
            default:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
         }
      }
   }
}

public class Example
{
   public static void Main()
   {
      // Create array of sextuple with population data for three U.S.
      // cities, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(3));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1970:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(6));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//
//    Sorted by population in 1970:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//
//    Sorted by population in 2000:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IStructuralComparable 成员
System.Collections 命名空间
IComparable
IStructuralEquatable
StructuralComparisons StructuralComparer


IStructuralComparable 成员

IStructuralComparable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IStructuralComparable 接口

支持集合对象的结构比较。

IStructuralComparable 类型公开以下成员。

名称 说明
页首

参考

IStructuralComparable 接口
System.Collections 命名空间


IStructuralComparable 方法

IStructuralComparable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IStructuralComparable 接口

IStructuralComparable 类型公开以下成员。

名称 说明
页首

参考

IStructuralComparable 接口
System.Collections 命名空间


IStructuralComparable ..::.CompareTo 方法

IStructuralComparable
.
.
::
.
CompareTo 方法
IStructuralComparable 接口

确定当前集合对象在排序顺序中的位置是位于另一个对象之前、之后还是与其位置相同。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function CompareTo ( _ other As Object, _ comparer As IComparer _ ) As Integer
int CompareTo( Object other, IComparer comparer )
int CompareTo( Object^ other, IComparer^ comparer )
abstract CompareTo : other:Object * comparer:IComparer -> int
参数
other
类型： System Object
要与当前实例进行比较的对象。
comparer
类型： System.Collections IComparer
一个将当前集合对象的成员与
other
的对应成员进行比较的对象。
返回值
类型： System Int32
一个指示当前集合对象与
other
的关系的整数，如下表所示。
返回值
说明
-1
当前实例位于
other
之前。
0
当前实例与
other
位于同一位置。
1
当前实例位于
other
之后。

CompareTo 方法支持自定义的结构比较，及数组和元组的对象的排序。CompareTo 方法调用 comparer 对象的 IComparer..::.Compare 方法，从第一个元素或组件开始比较各个数组元素或元组组件。当满足下列条件之一为真时，个人对 IComparer..::.Compare 的调用结束，且 CompareTo 方法返回一个值： CompareTo 方法支持自定义的结构比较，及数组和元组的对象的排序。CompareTo 方法调用 comparer 对象的 IComparer..::.Compare 方法，从第一个元素或组件开始比较各个数组元素或元组组件。当满足下列条件之一为真时，个人对 IComparer..::.Compare 的调用结束，且 CompareTo 方法返回一个值： CompareTo 方法支持自定义的结构比较，及数组和元组的对象的排序。CompareTo 方法调用 comparer 对象的 IComparer..::.Compare 方法，从第一个元素或组件开始比较各个数组元素或元组组件。当满足下列条件之一为真时，个人对 IComparer..::.Compare 的调用结束，且 CompareTo 方法返回一个值：

  • IComparer..::.Compare 方法返回 -1。

  • IComparer..::.Compare 方法返回 1。

  • 为集合对象中最后一个元素或组件调用 IComparer..::.Compare 方法。

下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的每 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的每 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的每 10 年间隔的人口。 下面的示例创建一个 Tuple<(Of <(T1, T2, T3, T4, T5, T6>)>) 对象数组，该数组包含美国三个州的人口资料。城市从 1960 到 2000 年的人口数据。该六元组的第一个组件为城市名。其余的五个组件表示 1960 年到 2000 年的每 10 年间隔的人口。

PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对六元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个 Boolean 值（该值指示是按升序还是降序对元组对象进行排序）。 PopulationComparer 类提供了 IComparer 实现，该实现允许其任意一个组件对六元数组进行排序。在 PopulationComparer 类的构造函数中向该类提供了两个值：用于定义排序顺序的组件的位置，和一个 Boolean 值（该值指示是按升序还是降序对元组对象进行排序）。

然后，本示例显示未排序的数组元素，将它们按第三个组件（1970 年的人口数据）排序并显示，然后将它们按第六个组件（2000 年的人口数据）排序并显示。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 实现。此方法由数组中的每个元组对象的 Sort(Array, IComparer) 方法隐式调用。 然后，本示例显示未排序的数组元素，将它们按第三个组件（1970 年的人口数据）排序并显示，然后将它们按第六个组件（2000 年的人口数据）排序并显示。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 实现。此方法由数组中的每个元组对象的 Sort(Array, IComparer) 方法隐式调用。 然后，本示例显示未排序的数组元素，将它们按第三个组件（1970 年的人口数据）排序并显示，然后将它们按第六个组件（2000 年的人口数据）排序并显示。请注意，该示例不直接调用 IStructuralComparable..::.CompareTo 实现。此方法由数组中的每个元组对象的 Sort(Array, IComparer) 方法隐式调用。

Imports System.Collections
Imports System.Collections.Generic

Public Class PopulationComparer(Of T1, T2, T3, T4, T5, T6) : Implements IComparer
   Private itemPosition As Integer
   Private multiplier As Integer = -1

   Public Sub New(component As Integer)
      Me.New(component, True)
   End Sub

   Public Sub New(component As Integer, descending As Boolean)
      If Not descending Then multiplier = 1

      If component <= 0 Or component > 6 Then
         Throw New ArgumentException("The component argument is out of range.")
      End If
      itemPosition = component
   End Sub

   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare

      Dim tX = TryCast(x, Tuple(Of T1, T2, T3, T4, T5, T6))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY = DirectCast(y, Tuple(Of T1, T2, T3, T4, T5, T6))
         Select Case itemPosition
            Case 1
               Return Comparer(Of T1).Default.Compare(tX.Item1, tY.Item1) * multiplier
            Case 2
               Return Comparer(Of T2).Default.Compare(tX.Item2, tY.Item2) * multiplier
            Case 3
               Return Comparer(Of T3).Default.Compare(tX.Item3, tY.Item3) * multiplier
            Case 4
               Return Comparer(Of T4).Default.Compare(tX.Item4, tY.Item4) * multiplier
            Case 5
               Return Comparer(Of T5).Default.Compare(tX.Item5, tY.Item5) * multiplier
            Case 6
               Return Comparer(Of T6).Default.Compare(tX.Item6, tY.Item6) * multiplier
            ' This should never happen.
            Case Else
               Return 0
         End Select
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      ' Create array of sextuple with population data for three U.S.
      ' cities, 1960-2000.
      Dim cities() =
          { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
            Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
            Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) }

      ' Display array in unsorted order.
      Console.WriteLine("In unsorted order:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer)(3))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 1970:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
      Console.WriteLine()

      Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer)(6))

      ' Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:")
      For Each city In cities
         Console.WriteLine(city.ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'    In unsorted order:
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
'
'    Sorted by population in 1970:
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'
'    Sorted by population in 2000:
'    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
'    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)

using System;
using System.Collections;
using System.Collections.Generic;

public class PopulationComparer<T1, T2, T3, T4, T5, T6> : IComparer
{
   private int itemPosition;
   private int multiplier = -1;

   public PopulationComparer(int component) : this(component, true)
   { }

   public PopulationComparer(int component, bool descending)
   {
      if (! descending) multiplier = 1;

      if (component <= 0 || component > 6)
         throw new ArgumentException("The component argument is out of range.");

      itemPosition = component;
   }

   public int Compare(object x, object y)
   {
      var tX = x as Tuple<T1, T2, T3, T4, T5, T6>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         var tY = y as Tuple<T1, T2, T3, T4, T5, T6>;
         switch (itemPosition)
         {
            case 1:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
            case 2:
               return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2) * multiplier;
            case 3:
               return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3) * multiplier;
            case 4:
               return Comparer<T4>.Default.Compare(tX.Item4, tY.Item4) * multiplier;
            case 5:
               return Comparer<T5>.Default.Compare(tX.Item5, tY.Item5) * multiplier;
            case 6:
               return Comparer<T6>.Default.Compare(tX.Item6, tY.Item6) * multiplier;
            default:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
         }
      }
   }
}

public class Example
{
   public static void Main()
   {
      // Create array of sextuple with population data for three U.S.
      // cities, 1960-2000.
      Tuple<string, int, int, int, int, int>[] cities =
           { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(3));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1970:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(6));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//
//    Sorted by population in 1970:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//
//    Sorted by population in 2000:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IStructuralComparable 接口
IStructuralComparable 成员
System.Collections 命名空间
IComparer


IStructuralEquatable 接口

IStructuralEquatable 接口
成员

定义方法以支持对象的结构相等性比较。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Interface IStructuralEquatable
public interface IStructuralEquatable
public interface class IStructuralEquatable
type IStructuralEquatable =  interface end

结构相等意味着两个对象由于具有相等的值而相等。它不同于表示两个对象引用相等的引用相等，因为它们引用同一个物理对象。IStructuralEquatable 接口能让您实现自定义比较，以便检查集合对象的结构相等性。也就是，您可以创建自己的结构相等性定义，并指定此定义与接受 IStructuralEquatable 接口的集合类型一起使用。该接口具有两个成员：用于通过使用指定的 IEqualityComparer 实现测试是否相等的 Equals，以及对相等的对象返回相同哈希代码的 GetHashCode。 结构相等意味着两个对象由于具有相等的值而相等。它不同于表示两个对象引用相等的引用相等，因为它们引用同一个物理对象。IStructuralEquatable 接口能让您实现自定义比较，以便检查集合对象的结构相等性。也就是，您可以创建自己的结构相等性定义，并指定此定义与接受 IStructuralEquatable 接口的集合类型一起使用。该接口具有两个成员：用于通过使用指定的 IEqualityComparer 实现测试是否相等的 Equals，以及对相等的对象返回相同哈希代码的 GetHashCode。 结构相等意味着两个对象由于具有相等的值而相等。它不同于表示两个对象引用相等的引用相等，因为它们引用同一个物理对象。IStructuralEquatable 接口能让您实现自定义比较，以便检查集合对象的结构相等性。也就是，您可以创建自己的结构相等性定义，并指定此定义与接受 IStructuralEquatable 接口的集合类型一起使用。该接口具有两个成员：用于通过使用指定的 IEqualityComparer 实现测试是否相等的 Equals，以及对相等的对象返回相同哈希代码的 GetHashCode。 结构相等意味着两个对象由于具有相等的值而相等。它不同于表示两个对象引用相等的引用相等，因为它们引用同一个物理对象。IStructuralEquatable 接口能让您实现自定义比较，以便检查集合对象的结构相等性。也就是，您可以创建自己的结构相等性定义，并指定此定义与接受 IStructuralEquatable 接口的集合类型一起使用。该接口具有两个成员：用于通过使用指定的 IEqualityComparer 实现测试是否相等的 Equals，以及对相等的对象返回相同哈希代码的 GetHashCode。 结构相等意味着两个对象由于具有相等的值而相等。它不同于表示两个对象引用相等的引用相等，因为它们引用同一个物理对象。IStructuralEquatable 接口能让您实现自定义比较，以便检查集合对象的结构相等性。也就是，您可以创建自己的结构相等性定义，并指定此定义与接受 IStructuralEquatable 接口的集合类型一起使用。该接口具有两个成员：用于通过使用指定的 IEqualityComparer 实现测试是否相等的 Equals，以及对相等的对象返回相同哈希代码的 GetHashCode。

说明 说明

IStructuralEquatable 接口仅支持结构相等性的自定义比较。IStructuralComparable 接口支持排序或顺序的自定义结构比较。 IStructuralEquatable 接口仅支持结构相等性的自定义比较。IStructuralComparable 接口支持排序或顺序的自定义结构比较。

.NET Framework 还提供了默认的相等比较器，它们通过 EqualityComparer<(Of <(T>)>)..::.Default 和 StructuralComparisons..::.StructuralEqualityComparer 属性返回。有关更多信息，请参见示例。 .NET Framework 还提供了默认的相等比较器，它们通过 EqualityComparer<(Of <(T>)>)..::.Default 和 StructuralComparisons..::.StructuralEqualityComparer 属性返回。有关更多信息，请参见示例。

通用元组类（Tuple<(Of <(T1>)>)、Tuple<(Of <(T1, T2>)>)、Tuple<(Of <(T1, T2, T3>)>) 等）和 Array 类提供了该 IStructuralEquatable 接口的显式实现。通过将数组或元组的当前实例强制转换（在 C# 中）或转换（在 Visual Basic 中）为 IStructuralEquatable 接口值，并将您的 IEqualityComparer 实现作为参数提供给 Equals 方法，您可以定义数组或集合的自定义相等比较。 通用元组类（Tuple<(Of <(T1>)>)、Tuple<(Of <(T1, T2>)>)、Tuple<(Of <(T1, T2, T3>)>) 等）和 Array 类提供了该 IStructuralEquatable 接口的显式实现。通过将数组或元组的当前实例强制转换（在 C# 中）或转换（在 Visual Basic 中）为 IStructuralEquatable 接口值，并将您的 IEqualityComparer 实现作为参数提供给 Equals 方法，您可以定义数组或集合的自定义相等比较。

默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。 默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。 默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。 默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。 默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。

Imports System.Collections
Imports System.Collections.Generic

Public Class NanComparer : Implements IEqualityComparer
   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
          Implements IEqualityComparer.Equals
      If TypeOf x Is Single Then
         Return CSng(x) = CSng(y)
      ElseIf TypeOf x Is Double Then
         Return CDbl(x) = CDbl(y)
      Else
         Return EqualityComparer(Of Object).Default.Equals(x, y)
      End If
   End Function

   Public Overloads Function GetHashCode(obj As Object) As Integer _
          Implements IEqualityComparer.GetHashCode
      Return EqualityComparer(Of Object).Default.GetHashCode(obj)
   End Function
End Class

using System;
using System.Collections;
using System.Collections.Generic;

public class NanComparer : IEqualityComparer
{
   public new bool Equals(object x, object y)
   {
      if (x is float)
         return (float) x == (float) y;
      else if (x is double)
         return (double) x == (double) y;
      else
         return EqualityComparer<object>.Default.Equals(x, y);
   }

   public int GetHashCode(object obj)
   {
      return EqualityComparer<object>.Default.GetHashCode(obj);
   }
}

下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。

Module Example
   Public Sub Main()
      Dim t1 = Tuple.Create(12.3, Double.NaN, 16.4)
      Dim t2 = Tuple.Create(12.3, Double.NaN, 16.4)

      ' Call default Equals method.
      Console.WriteLine(t1.Equals(t2))

      Dim equ As IStructuralEquatable = t1
      ' Call IStructuralEquatable.Equals using default comparer.
      Console.WriteLine(equ.Equals(t2, EqualityComparer(Of Object).Default))

      ' Call IStructuralEquatable.Equals using
      ' StructuralComparisons.StructuralEqualityComparer.
      Console.WriteLine(equ.Equals(t2,
                        StructuralComparisons.StructuralEqualityComparer))

      ' Call IStructuralEquatable.Equals using custom comparer.
      Console.WriteLine(equ.Equals(t2, New NanComparer))
   End Sub
End Module
' The example displays the following output:
'       True
'       True
'       True
'       False

public class Example
{
   public static void Main()
   {
      var t1 = Tuple.Create(12.3, Double.NaN, 16.4);
      var t2 = Tuple.Create(12.3, Double.NaN, 16.4);

      // Call default Equals method.
      Console.WriteLine(t1.Equals(t2));

      IStructuralEquatable equ = t1;
      // Call IStructuralEquatable.Equals using default comparer.
      Console.WriteLine(equ.Equals(t2, EqualityComparer<object>.Default));

      // Call IStructuralEquatable.Equals using
      // StructuralComparisons.StructuralEqualityComparer.
      Console.WriteLine(equ.Equals(t2,
                        StructuralComparisons.StructuralEqualityComparer));

      // Call IStructuralEquatable.Equals using custom comparer.
      Console.WriteLine(equ.Equals(t2, new NanComparer()));
   }
}
// The example displays the following output:
//       True
//       True
//       True
//       False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IStructuralEquatable 成员
System.Collections 命名空间
IEqualityComparer
IStructuralComparable
StructuralComparisons StructuralEqualityComparer


IStructuralEquatable 成员

IStructuralEquatable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IStructuralEquatable 接口

定义方法以支持对象的结构相等性比较。

IStructuralEquatable 类型公开以下成员。

名称 说明
页首

参考

IStructuralEquatable 接口
System.Collections 命名空间


IStructuralEquatable 方法

IStructuralEquatable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IStructuralEquatable 接口

IStructuralEquatable 类型公开以下成员。

名称 说明
页首

参考

IStructuralEquatable 接口
System.Collections 命名空间


IStructuralEquatable ..::.Equals 方法

IStructuralEquatable
.
.
::
.
Equals 方法
IStructuralEquatable 接口

确定某个对象与当前实例在结构上是否相等。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function Equals ( _
    other As Object, _
    comparer As IEqualityComparer _
) As Boolean
bool Equals(
    Object other,
    IEqualityComparer comparer
)
bool Equals(
    Object^ other,
    IEqualityComparer^ comparer
)
abstract Equals :
        other:Object *
        comparer:IEqualityComparer -> bool

参数

other
类型： System Object
要与当前实例进行比较的对象。
comparer
类型： System.Collections IEqualityComparer
一个可确定当前实例与 other 是否相等的对象。

返回值

类型： System Boolean
如果两个对象相等，则为 true；否则为 false。

Equals 方法支持数组和元组对象的自定义的结构比较。此方法反过来调用 comparer 对象的 IEqualityComparer..::.Equals 方法，从第一个元素或组件开始比较单独的数组元素或元组组件。当方法调用返回 false，或所有数组元素用户或元组元素比较完毕时，个人对 IEqualityComparer..::.Equals 的调用结束，且 IStructuralEquatable..::.Equals 返回一个值。 Equals 方法支持数组和元组对象的自定义的结构比较。此方法反过来调用 comparer 对象的 IEqualityComparer..::.Equals 方法，从第一个元素或组件开始比较单独的数组元素或元组组件。当方法调用返回 false，或所有数组元素用户或元组元素比较完毕时，个人对 IEqualityComparer..::.Equals 的调用结束，且 IStructuralEquatable..::.Equals 返回一个值。 Equals 方法支持数组和元组对象的自定义的结构比较。此方法反过来调用 comparer 对象的 IEqualityComparer..::.Equals 方法，从第一个元素或组件开始比较单独的数组元素或元组组件。当方法调用返回 false，或所有数组元素用户或元组元素比较完毕时，个人对 IEqualityComparer..::.Equals 的调用结束，且 IStructuralEquatable..::.Equals 返回一个值。

默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。 默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。 默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。 默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。 默认相等比较器 EqualityComparer<Object>.Default.Equals 将两个 NaN 值视为相等。但是，在某些种情况下，您可能希望 NaN 值的相等性比较返回 false，以指明这些值不能进行比较。下面的示例定义一个实现 IStructuralEquatable 接口的 NanComparer 类。它使用相等运算符比较两个 Double 或两个 Single 值。它将其他任何类型的值传递到默认相等比较器。

Imports System.Collections
Imports System.Collections.Generic

Public Class NanComparer : Implements IEqualityComparer
   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
          Implements IEqualityComparer.Equals
      If TypeOf x Is Single Then
         Return CSng(x) = CSng(y)
      ElseIf TypeOf x Is Double Then
         Return CDbl(x) = CDbl(y)
      Else
         Return EqualityComparer(Of Object).Default.Equals(x, y)
      End If
   End Function

   Public Overloads Function GetHashCode(obj As Object) As Integer _
          Implements IEqualityComparer.GetHashCode
      Return EqualityComparer(Of Object).Default.GetHashCode(obj)
   End Function
End Class

using System;
using System.Collections;
using System.Collections.Generic;

public class NanComparer : IEqualityComparer
{
   public new bool Equals(object x, object y)
   {
      if (x is float)
         return (float) x == (float) y;
      else if (x is double)
         return (double) x == (double) y;
      else
         return EqualityComparer<object>.Default.Equals(x, y);
   }

   public int GetHashCode(object obj)
   {
      return EqualityComparer<object>.Default.GetHashCode(obj);
   }
}

下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。 下面的示例创建两个相同的 3 元组对象，对象的成分包括 3 个 Double 值。第二个分量的值为 Double..::.NaN。然后，此示例会调用 Tuple<(Of <(T1, T2, T3>)>)..::.Equals 方法，并调用 IStructuralEquatable..::.Equals 方法三次。它在第一次时通过默认的由 EqualityComparer<(Of <(T>)>)..::.Default 属性返回的相等比较器。它第二次传递 StructuralComparisons..::.StructuralEqualityComparer 属性返回的默认相等比较器。它将第三次传递该自定义 NanComparer 对象。如示例的输出所示，前三个方法调用返回 true，而第四个调用返回 false。

Module Example
   Public Sub Main()
      Dim t1 = Tuple.Create(12.3, Double.NaN, 16.4)
      Dim t2 = Tuple.Create(12.3, Double.NaN, 16.4)

      ' Call default Equals method.
      Console.WriteLine(t1.Equals(t2))

      Dim equ As IStructuralEquatable = t1
      ' Call IStructuralEquatable.Equals using default comparer.
      Console.WriteLine(equ.Equals(t2, EqualityComparer(Of Object).Default))

      ' Call IStructuralEquatable.Equals using
      ' StructuralComparisons.StructuralEqualityComparer.
      Console.WriteLine(equ.Equals(t2,
                        StructuralComparisons.StructuralEqualityComparer))

      ' Call IStructuralEquatable.Equals using custom comparer.
      Console.WriteLine(equ.Equals(t2, New NanComparer))
   End Sub
End Module
' The example displays the following output:
'       True
'       True
'       True
'       False

public class Example
{
   public static void Main()
   {
      var t1 = Tuple.Create(12.3, Double.NaN, 16.4);
      var t2 = Tuple.Create(12.3, Double.NaN, 16.4);

      // Call default Equals method.
      Console.WriteLine(t1.Equals(t2));

      IStructuralEquatable equ = t1;
      // Call IStructuralEquatable.Equals using default comparer.
      Console.WriteLine(equ.Equals(t2, EqualityComparer<object>.Default));

      // Call IStructuralEquatable.Equals using
      // StructuralComparisons.StructuralEqualityComparer.
      Console.WriteLine(equ.Equals(t2,
                        StructuralComparisons.StructuralEqualityComparer));

      // Call IStructuralEquatable.Equals using custom comparer.
      Console.WriteLine(equ.Equals(t2, new NanComparer()));
   }
}
// The example displays the following output:
//       True
//       True
//       True
//       False

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IStructuralEquatable 接口
IStructuralEquatable 成员
System.Collections 命名空间
StructuralComparisons StructuralEqualityComparer


IStructuralEquatable ..::.GetHashCode 方法

IStructuralEquatable
.
.
::
.
GetHashCode 方法
IStructuralEquatable 接口

返回当前实例的哈希代码。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Function GetHashCode ( _
    comparer As IEqualityComparer _
) As Integer
int GetHashCode(
    IEqualityComparer comparer
)
int GetHashCode(
    IEqualityComparer^ comparer
)
abstract GetHashCode :
        comparer:IEqualityComparer -> int

参数

comparer
类型： System.Collections IEqualityComparer
一个计算当前对象的哈希代码的对象。

返回值

类型： System Int32
当前实例的哈希代码。

实现此方法可为集合对象返回自定义哈希代码，这些集合对象对应于 Equals 方法所提供的自定义结构相等性比较。

对实现者的说明

如果两个对象的 Equals 方法都返回 true，则这两个对象的 GetHashCode 方法返回的值也必须相等。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IStructuralEquatable 接口
IStructuralEquatable 成员
System.Collections 命名空间


Queue 类

Queue 类
成员

表示对象的先进先出集合。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class Queue _
    Implements ICollection, IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Queue : ICollection, IEnumerable,
    ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Queue : ICollection, IEnumerable,
    ICloneable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Queue =
    class
        interface ICollection
        interface IEnumerable
        interface ICloneable
    end

队列在按接收顺序存储消息方面非常有用，以便于进行顺序处理。此类将队列作为循环数组实现。存储在 Queue 中的对象在一端插入，从另一端移除。 队列在按接收顺序存储消息方面非常有用，以便于进行顺序处理。此类将队列作为循环数组实现。存储在 Queue 中的对象在一端插入，从另一端移除。 队列在按接收顺序存储消息方面非常有用，以便于进行顺序处理。此类将队列作为循环数组实现。存储在 Queue 中的对象在一端插入，从另一端移除。

Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。

等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。默认增长因子为 2.0。Queue 的容量将始终加 4，无论增长因子是多少。例如，当需要更大的容量时，增长因子为 1.0 的 Queue 的容量将始终增加四倍。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。默认增长因子为 2.0。Queue 的容量将始终加 4，无论增长因子是多少。例如，当需要更大的容量时，增长因子为 1.0 的 Queue 的容量将始终增加四倍。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。默认增长因子为 2.0。Queue 的容量将始终加 4，无论增长因子是多少。例如，当需要更大的容量时，增长因子为 1.0 的 Queue 的容量将始终增加四倍。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。默认增长因子为 2.0。Queue 的容量将始终加 4，无论增长因子是多少。例如，当需要更大的容量时，增长因子为 1.0 的 Queue 的容量将始终增加四倍。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。默认增长因子为 2.0。Queue 的容量将始终加 4，无论增长因子是多少。例如，当需要更大的容量时，增长因子为 1.0 的 Queue 的容量将始终增加四倍。

Queue 接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

有关此集合的泛型版本，请参见 System.Collections.Generic..::.Queue<(Of <(T>)>)。

下面的示例说明如何创建 Queue 并向其添加值，以及如何打印出其值。

Imports System
Imports System.Collections

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes a new Queue.
        Dim myQ As New Queue()
        myQ.Enqueue("Hello")
        myQ.Enqueue("World")
        myQ.Enqueue("!")

        ' Displays the properties and values of the Queue.
        Console.WriteLine("myQ")
        Console.WriteLine("    Count:    {0}", myQ.Count)
        Console.Write("    Values:")
        PrintValues(myQ)

    End Sub 'Main

    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("    {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesQueue

' This code produces the following output.
'
' myQ
'     Count:    3
'     Values:    Hello    World    !

 using System;
 using System.Collections;
 public class SamplesQueue  {

    public static void Main()  {

       // Creates and initializes a new Queue.
       Queue myQ = new Queue();
       myQ.Enqueue("Hello");
       myQ.Enqueue("World");
       myQ.Enqueue("!");

       // Displays the properties and values of the Queue.
       Console.WriteLine( "myQ" );
       Console.WriteLine( "\tCount:    {0}", myQ.Count );
       Console.Write( "\tValues:" );
       PrintValues( myQ );
    }

    public static void PrintValues( IEnumerable myCollection )  {
       foreach ( Object obj in myCollection )
          Console.Write( "    {0}", obj );
       Console.WriteLine();
    }
 }
 /*
 This code produces the following output.

 myQ
     Count:    3
     Values:    Hello    World    !
*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{

   // Creates and initializes a new Queue.
   Queue^ myQ = gcnew Queue;
   myQ->Enqueue( "Hello" );
   myQ->Enqueue( "World" );
   myQ->Enqueue( "!" );

   // Displays the properties and values of the Queue.
   Console::WriteLine( "myQ" );
   Console::WriteLine( "\tCount:    {0}", myQ->Count );
   Console::Write( "\tValues:" );
   PrintValues( myQ );
}

void PrintValues( IEnumerable^ myCollection )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "    {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 myQ
     Count:    3
     Values:    Hello    World    !
*/

System.Collections System.Collections..::.QueueQueue

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。

若要保证 Queue 的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 成员
System.Collections 命名空间
System.Collections.Generic Queue T


Queue 成员

Queue 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Queue 类

表示对象的先进先出集合。

Queue 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Queue 类
System.Collections 命名空间


Queue 构造函数

Queue 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Queue 类

初始化 Queue 类的新实例。

名称 说明
页首

参考

Queue 类
Queue 成员
System.Collections 命名空间


Queue 构造函数

Queue 构造函数
Queue 类

初始化 Queue 类的新实例，该实例为空，具有默认初始容量并使用默认增长因子。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public Queue()
public:
Queue()
new : unit -> Queue

Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。

等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。

此构造函数的运算复杂度是 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
Queue 重载
System.Collections 命名空间


Queue 构造函数 (ICollection)

Queue 构造函数 (ICollection)
Queue 类

初始化 Queue 类的新实例，该实例包含从指定集合复制的元素，具有与所复制的元素数相同的初始容量并使用默认增长因子。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    col As ICollection _
)
public Queue(
    ICollection col
)
public:
Queue(
    ICollection^ col
)
new :
        col:ICollection -> Queue

参数

col
类型： System.Collections ICollection
ICollection，从其中复制元素。
异常 | 条件
ArgumentNullException | col 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。

等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。

按照由 ICollection 的 IEnumerator 读取元素的顺序将这些元素复制到 Queue 中。

此构造函数的运算复杂度为 O(n)，其中 n 是 col 中元素的个数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
Queue 重载
System.Collections 命名空间
ICollection


Queue 构造函数 (Int32)

Queue 构造函数 (Int32)
Queue 类

初始化 Queue 类的新实例，该实例为空，具有指定的初始容量并使用默认增长因子。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    capacity As Integer _
)
public Queue(
    int capacity
)
public:
Queue(
    int capacity
)
new :
        capacity:int -> Queue

参数

capacity
类型： System Int32
Queue 可包含的初始元素数。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。

Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。

等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 Queue 中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
Queue 重载
System.Collections 命名空间


Queue 构造函数 (Int32, Single)

Queue 构造函数 (Int32, Single)
Queue 类

初始化 Queue 类的新实例，该实例为空，具有指定的初始容量并使用指定的增长因子。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    capacity As Integer, _
    growFactor As Single _
)
public Queue(
    int capacity,
    float growFactor
)
public:
Queue(
    int capacity,
    float growFactor
)
new :
        capacity:int *
        growFactor:float32 -> Queue

参数

capacity
类型： System Int32
Queue 可包含的初始元素数。
growFactor
类型： System Single
扩展 Queue 容量要使用的因子。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。 - 或 - growFactor 小于 1.0 或大于 10.0。

Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。

等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 Queue 中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
Queue 重载
System.Collections 命名空间


Queue 方法

Queue 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Queue 类

Queue 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Queue 类
System.Collections 命名空间


Queue ..::.Clear 方法

Queue
.
.
::
.
Clear 方法
Queue 类

从 Queue 中移除所有对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Clear
public virtual void Clear()
public:
virtual void Clear()
abstract Clear : unit -> unit
override Clear : unit -> unit

Count 被设置为零，并且对来自该集合元素的其他对象的引用也被释放。

容量保持不变。若要重置 Queue 的容量，请调用 TrimToSize。截去空 Queue 会将 Queue 的容量设置为默认容量。 容量保持不变。若要重置 Queue 的容量，请调用 TrimToSize。截去空 Queue 会将 Queue 的容量设置为默认容量。 容量保持不变。若要重置 Queue 的容量，请调用 TrimToSize。截去空 Queue 会将 Queue 的容量设置为默认容量。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

下面的示例说明如何清除 Queue 的值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes a new Queue.
        Dim myQ As New Queue()
        myQ.Enqueue("The")
        myQ.Enqueue("quick")
        myQ.Enqueue("brown")
        myQ.Enqueue("fox")
        myQ.Enqueue("jumped")

        ' Displays the count and values of the Queue.
        Console.WriteLine("Initially,")
        Console.WriteLine("   Count    : {0}", myQ.Count)
        Console.Write("   Values:")
        PrintValues(myQ)

        ' Clears the Queue.
        myQ.Clear()

        ' Displays the count and values of the Queue.
        Console.WriteLine("After Clear,")
        Console.WriteLine("   Count    : {0}", myQ.Count)
        Console.Write("   Values:")
        PrintValues(myQ)
    End Sub

    Public Shared Sub PrintValues(myQ As Queue)
        Dim myObj As [Object]
        For Each myObj In  myQ
            Console.Write("    {0}", myObj)
        Next myObj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesQueue

' This code produces the following output.
'
' Initially,
'    Count    : 5
'    Values:    The    quick    brown    fox    jumped
' After Clear,
'    Count    : 0
'    Values:

using System;
using System.Collections;
public class SamplesQueue  {

   public static void Main()  {

      // Creates and initializes a new Queue.
      Queue myQ = new Queue();
      myQ.Enqueue( "The" );
      myQ.Enqueue( "quick" );
      myQ.Enqueue( "brown" );
      myQ.Enqueue( "fox" );
      myQ.Enqueue( "jumped" );

      // Displays the count and values of the Queue.
      Console.WriteLine( "Initially," );
      Console.WriteLine( "   Count    : {0}", myQ.Count );
      Console.Write( "   Values:" );
      PrintValues( myQ );

      // Clears the Queue.
      myQ.Clear();

      // Displays the count and values of the Queue.
      Console.WriteLine( "After Clear," );
      Console.WriteLine( "   Count    : {0}", myQ.Count );
      Console.Write( "   Values:" );
      PrintValues( myQ );

   }

   public static void PrintValues( Queue myQ )  {
      foreach ( Object myObj in myQ )  {
         Console.Write( "    {0}", myObj );
      }
      Console.WriteLine();
   }

}
/*
This code produces the following output.

Initially,
   Count    : 5
   Values:    The    quick    brown    fox    jumped
After Clear,
   Count    : 0
   Values:

*/

using namespace System;
using namespace System::Collections;
void PrintValues( Queue^ myQ );
int main()
{

   // Creates and initializes a new Queue.
   Queue^ myQ = gcnew Queue;
   myQ->Enqueue( "The" );
   myQ->Enqueue( "quick" );
   myQ->Enqueue( "brown" );
   myQ->Enqueue( "fox" );
   myQ->Enqueue( "jumped" );

   // Displays the count and values of the Queue.
   Console::WriteLine( "Initially," );
   Console::WriteLine( "   Count    : {0}", myQ->Count );
   Console::Write( "   Values:" );
   PrintValues( myQ );

   // Clears the Queue.
   myQ->Clear();

   // Displays the count and values of the Queue.
   Console::WriteLine( "After Clear," );
   Console::WriteLine( "   Count    : {0}", myQ->Count );
   Console::Write( "   Values:" );
   PrintValues( myQ );
}

void PrintValues( Queue^ myQ )
{
   IEnumerator^ myEnum = myQ->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ myObj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "    {0}", myObj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Initially,
    Count    : 5
    Values:    The    quick    brown    fox    jumped
 After Clear,
    Count    : 0
    Values:

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间
TrimToSize


Queue ..::.Clone 方法

Queue
.
.
::
.
Clone 方法
Queue 类

创建 Queue 的浅表副本。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Clone As Object
public virtual Object Clone()
public:
virtual Object^ Clone()
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
Queue 的浅表副本。

实现

集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。 集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。

与之相对，集合的深层副本将复制这些元素以及由它们直接或间接引用的所有内容。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间


Queue ..::.Contains 方法

Queue
.
.
::
.
Contains 方法
Queue 类

确定某元素是否在 Queue 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Contains ( _
    obj As Object _
) As Boolean
public virtual bool Contains(
    Object obj
)
public:
virtual bool Contains(
    Object^ obj
)
abstract Contains :
        obj:Object -> bool
override Contains :
        obj:Object -> bool

参数

obj
类型： System Object
要在 Queue 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 Queue 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果在 Queue 中找到 obj，则为 true；否则为 false。

此方法通过调用 Object..::.Equals 确定相等性。

此方法执行线性搜索；因此，此方法的运算复杂度是 O(n)，其中 n 是 Count。

从 .NET Framework 2.0 开始，此方法对 obj 使用该集合对象的 Equals 和 CompareTo 方法来确定 item 是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 obj 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 obj 使用该集合对象的 Equals 和 CompareTo 方法来确定 item 是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 obj 参数的 Equals 和 CompareTo 方法来确定的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间

其他资源

执行不区分区域性的字符串操作


Queue ..::.CopyTo 方法

Queue
.
.
::
.
CopyTo 方法
Queue 类

从指定数组索引开始将 Queue 元素复制到现有一维 Array 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
public virtual void CopyTo(
    Array array,
    int index
)
public:
virtual void CopyTo(
    Array^ array,
    int index
)
abstract CopyTo :
        array:Array *
        index:int -> unit
override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
作为从 Queue 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 Queue 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
index
类型： System Int32
array 中从零开始的索引，将在此处开始复制。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 Queue 中的元素数大于从 index 到目标 array 结尾处之间的可用空间。
ArrayTypeMismatchException | 无法自动将源 Queue 的类型强制转换为目标 array 的类型。

这些元素将复制到 Array，复制顺序与枚举数循环访问 Queue 的顺序一样。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

下面的示例演示如何将 Queue 复制到一维数组中。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes the source Queue.
        Dim mySourceQ As New Queue()
        mySourceQ.Enqueue("three")
        mySourceQ.Enqueue("napping")
        mySourceQ.Enqueue("cats")
        mySourceQ.Enqueue("in")
        mySourceQ.Enqueue("the")
        mySourceQ.Enqueue("barn")

        ' Creates and initializes the one-dimensional target Array.
        Dim myTargetArray As Array = Array.CreateInstance(GetType(String), 15)
        myTargetArray.SetValue("The", 0)
        myTargetArray.SetValue("quick", 1)
        myTargetArray.SetValue("brown", 2)
        myTargetArray.SetValue("fox", 3)
        myTargetArray.SetValue("jumped", 4)
        myTargetArray.SetValue("over", 5)
        myTargetArray.SetValue("the", 6)
        myTargetArray.SetValue("lazy", 7)
        myTargetArray.SetValue("dog", 8)

        ' Displays the values of the target Array.
        Console.WriteLine("The target Array contains the " & _
           "following (before and after copying):")
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source Queue to the target Array, starting
        ' at index 6.
        mySourceQ.CopyTo(myTargetArray, 6)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source Queue to a new standard array.
        Dim myStandardArray As Object() = mySourceQ.ToArray()

        ' Displays the values of the new standard array.
        Console.WriteLine("The new standard array contains the following:")
        PrintValues(myStandardArray, " "c)

    End Sub

    Public Shared Sub PrintValues(myArr As Array, mySeparator As Char)
        Dim myObj As [Object]
        For Each myObj In  myArr
            Console.Write("{0}{1}", mySeparator, myObj)
        Next myObj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesQueue

' This code produces the following output.
'
' The target Array contains the following (before and after copying):
'  The quick brown fox jumped over the lazy dog
'  The quick brown fox jumped over three napping cats in the barn
' The new standard array contains the following:
'  three napping cats in the barn

using System;
using System.Collections;
public class SamplesQueue  {

   public static void Main()  {

      // Creates and initializes the source Queue.
      Queue mySourceQ = new Queue();
      mySourceQ.Enqueue( "three" );
      mySourceQ.Enqueue( "napping" );
      mySourceQ.Enqueue( "cats" );
      mySourceQ.Enqueue( "in" );
      mySourceQ.Enqueue( "the" );
      mySourceQ.Enqueue( "barn" );

      // Creates and initializes the one-dimensional target Array.
      Array myTargetArray=Array.CreateInstance( typeof(String), 15 );
      myTargetArray.SetValue( "The", 0 );
      myTargetArray.SetValue( "quick", 1 );
      myTargetArray.SetValue( "brown", 2 );
      myTargetArray.SetValue( "fox", 3 );
      myTargetArray.SetValue( "jumped", 4 );
      myTargetArray.SetValue( "over", 5 );
      myTargetArray.SetValue( "the", 6 );
      myTargetArray.SetValue( "lazy", 7 );
      myTargetArray.SetValue( "dog", 8 );

      // Displays the values of the target Array.
      Console.WriteLine( "The target Array contains the following (before and after copying):" );
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source Queue to the target Array, starting at index 6.
      mySourceQ.CopyTo( myTargetArray, 6 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source Queue to a new standard array.
      Object[] myStandardArray = mySourceQ.ToArray();

      // Displays the values of the new standard array.
      Console.WriteLine( "The new standard array contains the following:" );
      PrintValues( myStandardArray, ' ' );
   }

   public static void PrintValues( Array myArr, char mySeparator )  {
      foreach ( Object myObj in myArr )  {
         Console.Write( "{0}{1}", mySeparator, myObj );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The target Array contains the following (before and after copying):
 The quick brown fox jumped over the lazy dog
 The quick brown fox jumped over three napping cats in the barn
The new standard array contains the following:
 three napping cats in the barn

*/

using namespace System;
using namespace System::Collections;
void PrintValues( Array^ myArr, char mySeparator );
int main()
{
   // Creates and initializes the source Queue.
   Queue^ mySourceQ = gcnew Queue;
   mySourceQ->Enqueue( "three" );
   mySourceQ->Enqueue( "napping" );
   mySourceQ->Enqueue( "cats" );
   mySourceQ->Enqueue( "in" );
   mySourceQ->Enqueue( "the" );
   mySourceQ->Enqueue( "barn" );

   // Creates and initializes the one-dimensional target Array.
   Array^ myTargetArray = Array::CreateInstance( String::typeid, 15 );
   myTargetArray->SetValue( "The", 0 );
   myTargetArray->SetValue( "quick", 1 );
   myTargetArray->SetValue( "brown", 2 );
   myTargetArray->SetValue( "fox", 3 );
   myTargetArray->SetValue( "jumped", 4 );
   myTargetArray->SetValue( "over", 5 );
   myTargetArray->SetValue( "the", 6 );
   myTargetArray->SetValue( "lazy", 7 );
   myTargetArray->SetValue( "dog", 8 );

   // Displays the values of the target Array.
   Console::WriteLine( "The target Array contains the following (before and after copying):" );
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source Queue to the target Array, starting at index 6.
   mySourceQ->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source Queue to a new standard array.
   array<Object^>^myStandardArray = mySourceQ->ToArray();

   // Displays the values of the new standard array.
   Console::WriteLine( "The new standard array contains the following:" );
   PrintValues( myStandardArray, ' ' );
}

void PrintValues( Array^ myArr, char mySeparator )
{
   IEnumerator^ myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ myObj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, myObj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over three napping cats in the barn
 The new standard array contains the following:
  three napping cats in the barn

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间


Queue ..::.Dequeue 方法

Queue
.
.
::
.
Dequeue 方法
Queue 类

移除并返回位于 Queue 开始处的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Dequeue As Object
public virtual Object Dequeue()
public:
virtual Object^ Dequeue()
abstract Dequeue : unit -> Object
override Dequeue : unit -> Object

返回值

类型： System Object
从 Queue 的开头移除的对象。
异常 | 条件
InvalidOperationException | Queue 为空。

此方法类似于 Peek 方法，但 Peek 不修改 Queue。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 可以作为值添加到 Queue。若要区分 null 值和 Queue 结尾，请检查 Count 属性或捕捉 Queue 为空时引发的 InvalidOperationException。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 可以作为值添加到 Queue。若要区分 null 值和 Queue 结尾，请检查 Count 属性或捕捉 Queue 为空时引发的 InvalidOperationException。

此方法是 O(1) 操作。

下面的示例演示如何向 Queue 中添加元素，如何从 Queue 中移除元素或如何查看 Queue 开头的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes a new Queue.
        Dim myQ As New Queue()
        myQ.Enqueue("The")
        myQ.Enqueue("quick")
        myQ.Enqueue("brown")
        myQ.Enqueue("fox")

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)

        ' Removes an element from the Queue.
        Console.WriteLine("(Dequeue)    {0}", myQ.Dequeue())

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)

        ' Removes another element from the Queue.
        Console.WriteLine("(Dequeue)    {0}", myQ.Dequeue())

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)

        ' Views the first element in the Queue but does not remove it.
        Console.WriteLine("(Peek)       {0}", myQ.Peek())

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)
    End Sub 'Main

    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("    {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesQueue

' This code produces the following output.
'
' Queue values:    The    quick    brown    fox
' (Dequeue)    The
' Queue values:    quick    brown    fox
' (Dequeue)    quick
' Queue values:    brown    fox
' (Peek)       brown
' Queue values:    brown    fox

using System;
using System.Collections;
public class SamplesQueue  {

   public static void Main()  {

      // Creates and initializes a new Queue.
      Queue myQ = new Queue();
      myQ.Enqueue( "The" );
      myQ.Enqueue( "quick" );
      myQ.Enqueue( "brown" );
      myQ.Enqueue( "fox" );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );

      // Removes an element from the Queue.
      Console.WriteLine( "(Dequeue)\t{0}", myQ.Dequeue() );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );

      // Removes another element from the Queue.
      Console.WriteLine( "(Dequeue)\t{0}", myQ.Dequeue() );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );

      // Views the first element in the Queue but does not remove it.
      Console.WriteLine( "(Peek)   \t{0}", myQ.Peek() );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );
   }

   public static void PrintValues( IEnumerable myCollection )  {
      foreach ( Object obj in myCollection )
         Console.Write( "    {0}", obj );
      Console.WriteLine();
   }
}
/*
This code produces the following output.

Queue values:    The    quick    brown    fox
(Dequeue)       The
Queue values:    quick    brown    fox
(Dequeue)       quick
Queue values:    brown    fox
(Peek)          brown
Queue values:    brown    fox

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{

   // Creates and initializes a new Queue.
   Queue^ myQ = gcnew Queue;
   myQ->Enqueue( "The" );
   myQ->Enqueue( "quick" );
   myQ->Enqueue( "brown" );
   myQ->Enqueue( "fox" );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );

   // Removes an element from the Queue.
   Console::WriteLine( "(Dequeue)\t{0}", myQ->Dequeue() );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );

   // Removes another element from the Queue.
   Console::WriteLine( "(Dequeue)\t{0}", myQ->Dequeue() );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );

   // Views the first element in the Queue but does not remove it.
   Console::WriteLine( "(Peek)   \t{0}", myQ->Peek() );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );
}

void PrintValues( IEnumerable^ myCollection )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "    {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Queue values:    The    quick    brown    fox
 (Dequeue)       The
 Queue values:    quick    brown    fox
 (Dequeue)       quick
 Queue values:    brown    fox
 (Peek)          brown
 Queue values:    brown    fox

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间
Enqueue
Peek


Queue ..::.Enqueue 方法

Queue
.
.
::
.
Enqueue 方法
Queue 类

将对象添加到 Queue 的结尾处。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Enqueue ( _
    obj As Object _
)
public virtual void Enqueue(
    Object obj
)
public:
virtual void Enqueue(
    Object^ obj
)
abstract Enqueue :
        obj:Object -> unit
override Enqueue :
        obj:Object -> unit

参数

obj
类型： System Object
要添加到 Queue 的对象。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要添加到 Queue 的对象。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。 Queue 的容量是指 Queue 可以保存的元素数。随着向 Queue 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 来减少容量。

等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。 等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。

如果 Count 小于内部数组的容量，则此方法为 O(1) 操作。如果需要重新分配内部数组以容纳新元素，则此方法成为 O(n) 操作，其中 n 为 Count。 如果 Count 小于内部数组的容量，则此方法为 O(1) 操作。如果需要重新分配内部数组以容纳新元素，则此方法成为 O(n) 操作，其中 n 为 Count。

下面的示例演示如何向 Queue 中添加元素，如何从 Queue 中移除元素或如何查看 Queue 开头的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes a new Queue.
        Dim myQ As New Queue()
        myQ.Enqueue("The")
        myQ.Enqueue("quick")
        myQ.Enqueue("brown")
        myQ.Enqueue("fox")

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)

        ' Removes an element from the Queue.
        Console.WriteLine("(Dequeue)    {0}", myQ.Dequeue())

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)

        ' Removes another element from the Queue.
        Console.WriteLine("(Dequeue)    {0}", myQ.Dequeue())

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)

        ' Views the first element in the Queue but does not remove it.
        Console.WriteLine("(Peek)       {0}", myQ.Peek())

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)
    End Sub 'Main

    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("    {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesQueue

' This code produces the following output.
'
' Queue values:    The    quick    brown    fox
' (Dequeue)    The
' Queue values:    quick    brown    fox
' (Dequeue)    quick
' Queue values:    brown    fox
' (Peek)       brown
' Queue values:    brown    fox

using System;
using System.Collections;
public class SamplesQueue  {

   public static void Main()  {

      // Creates and initializes a new Queue.
      Queue myQ = new Queue();
      myQ.Enqueue( "The" );
      myQ.Enqueue( "quick" );
      myQ.Enqueue( "brown" );
      myQ.Enqueue( "fox" );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );

      // Removes an element from the Queue.
      Console.WriteLine( "(Dequeue)\t{0}", myQ.Dequeue() );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );

      // Removes another element from the Queue.
      Console.WriteLine( "(Dequeue)\t{0}", myQ.Dequeue() );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );

      // Views the first element in the Queue but does not remove it.
      Console.WriteLine( "(Peek)   \t{0}", myQ.Peek() );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );
   }

   public static void PrintValues( IEnumerable myCollection )  {
      foreach ( Object obj in myCollection )
         Console.Write( "    {0}", obj );
      Console.WriteLine();
   }
}
/*
This code produces the following output.

Queue values:    The    quick    brown    fox
(Dequeue)       The
Queue values:    quick    brown    fox
(Dequeue)       quick
Queue values:    brown    fox
(Peek)          brown
Queue values:    brown    fox

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{

   // Creates and initializes a new Queue.
   Queue^ myQ = gcnew Queue;
   myQ->Enqueue( "The" );
   myQ->Enqueue( "quick" );
   myQ->Enqueue( "brown" );
   myQ->Enqueue( "fox" );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );

   // Removes an element from the Queue.
   Console::WriteLine( "(Dequeue)\t{0}", myQ->Dequeue() );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );

   // Removes another element from the Queue.
   Console::WriteLine( "(Dequeue)\t{0}", myQ->Dequeue() );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );

   // Views the first element in the Queue but does not remove it.
   Console::WriteLine( "(Peek)   \t{0}", myQ->Peek() );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );
}

void PrintValues( IEnumerable^ myCollection )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "    {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Queue values:    The    quick    brown    fox
 (Dequeue)       The
 Queue values:    quick    brown    fox
 (Dequeue)       quick
 Queue values:    brown    fox
 (Peek)          brown
 Queue values:    brown    fox

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间
Dequeue
Peek


Queue ..::.GetEnumerator 方法

Queue
.
.
::
.
GetEnumerator 方法
Queue 类

返回循环访问 Queue 的枚举器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumerator As IEnumerator
public virtual IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator()
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
用于 Queue 的 IEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间
IEnumerator


Queue ..::.Peek 方法

Queue
.
.
::
.
Peek 方法
Queue 类

返回位于 Queue 开始处的对象但不将其移除。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Peek As Object
public virtual Object Peek()
public:
virtual Object^ Peek()
abstract Peek : unit -> Object
override Peek : unit -> Object

返回值

类型： System Object
位于 Queue 的开头的对象。
异常 | 条件
InvalidOperationException | Queue 为空。

此方法类似于 Dequeue 方法，但 Peek 不修改 Queue。

nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 可以作为值添加到 Queue。若要区分 null 值和 Queue 结尾，请检查 Count 属性或捕捉 Queue 为空时引发的 InvalidOperationException。 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 可以作为值添加到 Queue。若要区分 null 值和 Queue 结尾，请检查 Count 属性或捕捉 Queue 为空时引发的 InvalidOperationException。

此方法是 O(1) 操作。

下面的示例演示如何向 Queue 中添加元素，如何从 Queue 中移除元素或如何查看 Queue 开头的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes a new Queue.
        Dim myQ As New Queue()
        myQ.Enqueue("The")
        myQ.Enqueue("quick")
        myQ.Enqueue("brown")
        myQ.Enqueue("fox")

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)

        ' Removes an element from the Queue.
        Console.WriteLine("(Dequeue)    {0}", myQ.Dequeue())

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)

        ' Removes another element from the Queue.
        Console.WriteLine("(Dequeue)    {0}", myQ.Dequeue())

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)

        ' Views the first element in the Queue but does not remove it.
        Console.WriteLine("(Peek)       {0}", myQ.Peek())

        ' Displays the Queue.
        Console.Write("Queue values:")
        PrintValues(myQ)
    End Sub 'Main

    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("    {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesQueue

' This code produces the following output.
'
' Queue values:    The    quick    brown    fox
' (Dequeue)    The
' Queue values:    quick    brown    fox
' (Dequeue)    quick
' Queue values:    brown    fox
' (Peek)       brown
' Queue values:    brown    fox

using System;
using System.Collections;
public class SamplesQueue  {

   public static void Main()  {

      // Creates and initializes a new Queue.
      Queue myQ = new Queue();
      myQ.Enqueue( "The" );
      myQ.Enqueue( "quick" );
      myQ.Enqueue( "brown" );
      myQ.Enqueue( "fox" );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );

      // Removes an element from the Queue.
      Console.WriteLine( "(Dequeue)\t{0}", myQ.Dequeue() );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );

      // Removes another element from the Queue.
      Console.WriteLine( "(Dequeue)\t{0}", myQ.Dequeue() );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );

      // Views the first element in the Queue but does not remove it.
      Console.WriteLine( "(Peek)   \t{0}", myQ.Peek() );

      // Displays the Queue.
      Console.Write( "Queue values:" );
      PrintValues( myQ );
   }

   public static void PrintValues( IEnumerable myCollection )  {
      foreach ( Object obj in myCollection )
         Console.Write( "    {0}", obj );
      Console.WriteLine();
   }
}
/*
This code produces the following output.

Queue values:    The    quick    brown    fox
(Dequeue)       The
Queue values:    quick    brown    fox
(Dequeue)       quick
Queue values:    brown    fox
(Peek)          brown
Queue values:    brown    fox

*/

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{

   // Creates and initializes a new Queue.
   Queue^ myQ = gcnew Queue;
   myQ->Enqueue( "The" );
   myQ->Enqueue( "quick" );
   myQ->Enqueue( "brown" );
   myQ->Enqueue( "fox" );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );

   // Removes an element from the Queue.
   Console::WriteLine( "(Dequeue)\t{0}", myQ->Dequeue() );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );

   // Removes another element from the Queue.
   Console::WriteLine( "(Dequeue)\t{0}", myQ->Dequeue() );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );

   // Views the first element in the Queue but does not remove it.
   Console::WriteLine( "(Peek)   \t{0}", myQ->Peek() );

   // Displays the Queue.
   Console::Write( "Queue values:" );
   PrintValues( myQ );
}

void PrintValues( IEnumerable^ myCollection )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "    {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Queue values:    The    quick    brown    fox
 (Dequeue)       The
 Queue values:    quick    brown    fox
 (Dequeue)       quick
 Queue values:    brown    fox
 (Peek)          brown
 Queue values:    brown    fox

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间
Enqueue
Dequeue


Queue ..::.Synchronized 方法

Queue
.
.
::
.
Synchronized 方法
Queue 类

返回同步的（线程安全）Queue 包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True)> _
Public Shared Function Synchronized ( _
    queue As Queue _
) As Queue
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)]
public static Queue Synchronized(
    Queue queue
)
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true)]
public:
static Queue^ Synchronized(
    Queue^ queue
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)>]
static member Synchronized :
        queue:Queue -> Queue

参数

queue
类型： System.Collections Queue
要同步的 Queue。

返回值

类型： System.Collections Queue
同步的（线程安全）Queue 包装。
异常 | 条件
ArgumentNullException | queue 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要保证 Queue 的线程安全，必须通过此包装执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：Synchronization。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。此方法是 O(1) 操作。 下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。此方法是 O(1) 操作。

Dim myCollection As New Queue()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Queue^ myCollection = gcnew Queue();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

下面的示例说明如何同步 Queue、如何确定 Queue 是否同步以及如何使用同步的 Queue。

Imports System
Imports System.Collections

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes a new Queue.
        Dim myQ As New Queue()
        myQ.Enqueue("The")
        myQ.Enqueue("quick")
        myQ.Enqueue("brown")
        myQ.Enqueue("fox")

        ' Creates a synchronized wrapper around the Queue.
        Dim mySyncdQ As Queue = Queue.Synchronized(myQ)

        ' Displays the sychronization status of both Queues.
        Dim msg As String
        If myQ.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("myQ is {0}.", msg)
        If mySyncdQ.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySyncdQ is {0}.", msg)
    End Sub
End Class

' This code produces the following output.
'
' myQ is not synchronized.
' mySyncdQ is synchronized.

using System;
using System.Collections;
public class SamplesQueue  {

   public static void Main()  {

      // Creates and initializes a new Queue.
      Queue myQ = new Queue();
      myQ.Enqueue( "The" );
      myQ.Enqueue( "quick" );
      myQ.Enqueue( "brown" );
      myQ.Enqueue( "fox" );

      // Creates a synchronized wrapper around the Queue.
      Queue mySyncdQ = Queue.Synchronized( myQ );

      // Displays the sychronization status of both Queues.
      Console.WriteLine( "myQ is {0}.", myQ.IsSynchronized ? "synchronized" : "not synchronized" );
      Console.WriteLine( "mySyncdQ is {0}.", mySyncdQ.IsSynchronized ? "synchronized" : "not synchronized" );
   }
}
/*
This code produces the following output.

myQ is not synchronized.
mySyncdQ is synchronized.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new Queue.
   Queue^ myQ = gcnew Queue;
   myQ->Enqueue( "The" );
   myQ->Enqueue( "quick" );
   myQ->Enqueue( "brown" );
   myQ->Enqueue( "fox" );

   // Creates a synchronized wrapper around the Queue.
   Queue^ mySyncdQ = Queue::Synchronized( myQ );

   // Displays the sychronization status of both Queues.
   Console::WriteLine( "myQ is {0}.", myQ->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
   Console::WriteLine( "mySyncdQ is {0}.", mySyncdQ->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
}

/*
This code produces the following output.

myQ is not synchronized.
mySyncdQ is synchronized.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

Queue 类
Queue 成员
System.Collections 命名空间
IsSynchronized
SyncRoot


Queue ..::.ToArray 方法

Queue
.
.
::
.
ToArray 方法
Queue 类

将 Queue 元素复制到新数组。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ToArray As Object()
public virtual Object[] ToArray()
public:
virtual array<Object^>^ ToArray()
abstract ToArray : unit -> Object[]
override ToArray : unit -> Object[]

返回值

类型：
array<
System Object
>
[]
()
[]

一个新数组，其中包含从 Queue 复制的元素。

未修改 Queue。新数组中元素的顺序与从 Queue 的开始到其结尾的元素的顺序相同。 未修改 Queue。新数组中元素的顺序与从 Queue 的开始到其结尾的元素的顺序相同。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

下面的示例演示如何将 Queue 复制到一维数组中。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes the source Queue.
        Dim mySourceQ As New Queue()
        mySourceQ.Enqueue("three")
        mySourceQ.Enqueue("napping")
        mySourceQ.Enqueue("cats")
        mySourceQ.Enqueue("in")
        mySourceQ.Enqueue("the")
        mySourceQ.Enqueue("barn")

        ' Creates and initializes the one-dimensional target Array.
        Dim myTargetArray As Array = Array.CreateInstance(GetType(String), 15)
        myTargetArray.SetValue("The", 0)
        myTargetArray.SetValue("quick", 1)
        myTargetArray.SetValue("brown", 2)
        myTargetArray.SetValue("fox", 3)
        myTargetArray.SetValue("jumped", 4)
        myTargetArray.SetValue("over", 5)
        myTargetArray.SetValue("the", 6)
        myTargetArray.SetValue("lazy", 7)
        myTargetArray.SetValue("dog", 8)

        ' Displays the values of the target Array.
        Console.WriteLine("The target Array contains the " & _
           "following (before and after copying):")
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source Queue to the target Array, starting
        ' at index 6.
        mySourceQ.CopyTo(myTargetArray, 6)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source Queue to a new standard array.
        Dim myStandardArray As Object() = mySourceQ.ToArray()

        ' Displays the values of the new standard array.
        Console.WriteLine("The new standard array contains the following:")
        PrintValues(myStandardArray, " "c)

    End Sub

    Public Shared Sub PrintValues(myArr As Array, mySeparator As Char)
        Dim myObj As [Object]
        For Each myObj In  myArr
            Console.Write("{0}{1}", mySeparator, myObj)
        Next myObj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesQueue

' This code produces the following output.
'
' The target Array contains the following (before and after copying):
'  The quick brown fox jumped over the lazy dog
'  The quick brown fox jumped over three napping cats in the barn
' The new standard array contains the following:
'  three napping cats in the barn

using System;
using System.Collections;
public class SamplesQueue  {

   public static void Main()  {

      // Creates and initializes the source Queue.
      Queue mySourceQ = new Queue();
      mySourceQ.Enqueue( "three" );
      mySourceQ.Enqueue( "napping" );
      mySourceQ.Enqueue( "cats" );
      mySourceQ.Enqueue( "in" );
      mySourceQ.Enqueue( "the" );
      mySourceQ.Enqueue( "barn" );

      // Creates and initializes the one-dimensional target Array.
      Array myTargetArray=Array.CreateInstance( typeof(String), 15 );
      myTargetArray.SetValue( "The", 0 );
      myTargetArray.SetValue( "quick", 1 );
      myTargetArray.SetValue( "brown", 2 );
      myTargetArray.SetValue( "fox", 3 );
      myTargetArray.SetValue( "jumped", 4 );
      myTargetArray.SetValue( "over", 5 );
      myTargetArray.SetValue( "the", 6 );
      myTargetArray.SetValue( "lazy", 7 );
      myTargetArray.SetValue( "dog", 8 );

      // Displays the values of the target Array.
      Console.WriteLine( "The target Array contains the following (before and after copying):" );
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source Queue to the target Array, starting at index 6.
      mySourceQ.CopyTo( myTargetArray, 6 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source Queue to a new standard array.
      Object[] myStandardArray = mySourceQ.ToArray();

      // Displays the values of the new standard array.
      Console.WriteLine( "The new standard array contains the following:" );
      PrintValues( myStandardArray, ' ' );
   }

   public static void PrintValues( Array myArr, char mySeparator )  {
      foreach ( Object myObj in myArr )  {
         Console.Write( "{0}{1}", mySeparator, myObj );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The target Array contains the following (before and after copying):
 The quick brown fox jumped over the lazy dog
 The quick brown fox jumped over three napping cats in the barn
The new standard array contains the following:
 three napping cats in the barn

*/

using namespace System;
using namespace System::Collections;
void PrintValues( Array^ myArr, char mySeparator );
int main()
{
   // Creates and initializes the source Queue.
   Queue^ mySourceQ = gcnew Queue;
   mySourceQ->Enqueue( "three" );
   mySourceQ->Enqueue( "napping" );
   mySourceQ->Enqueue( "cats" );
   mySourceQ->Enqueue( "in" );
   mySourceQ->Enqueue( "the" );
   mySourceQ->Enqueue( "barn" );

   // Creates and initializes the one-dimensional target Array.
   Array^ myTargetArray = Array::CreateInstance( String::typeid, 15 );
   myTargetArray->SetValue( "The", 0 );
   myTargetArray->SetValue( "quick", 1 );
   myTargetArray->SetValue( "brown", 2 );
   myTargetArray->SetValue( "fox", 3 );
   myTargetArray->SetValue( "jumped", 4 );
   myTargetArray->SetValue( "over", 5 );
   myTargetArray->SetValue( "the", 6 );
   myTargetArray->SetValue( "lazy", 7 );
   myTargetArray->SetValue( "dog", 8 );

   // Displays the values of the target Array.
   Console::WriteLine( "The target Array contains the following (before and after copying):" );
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source Queue to the target Array, starting at index 6.
   mySourceQ->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source Queue to a new standard array.
   array<Object^>^myStandardArray = mySourceQ->ToArray();

   // Displays the values of the new standard array.
   Console::WriteLine( "The new standard array contains the following:" );
   PrintValues( myStandardArray, ' ' );
}

void PrintValues( Array^ myArr, char mySeparator )
{
   IEnumerator^ myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ myObj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, myObj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over three napping cats in the barn
 The new standard array contains the following:
  three napping cats in the barn

 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间


Queue ..::.TrimToSize 方法

Queue
.
.
::
.
TrimToSize 方法
Queue 类

将容量设置为 Queue 中元素的实际数目。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub TrimToSize
public virtual void TrimToSize()
public:
virtual void TrimToSize()
abstract TrimToSize : unit -> unit
override TrimToSize : unit -> unit
异常 | 条件
NotSupportedException | Queue 是只读的。

如果不向队列中添加新元素，则此方法可用于最小化队列的内存系统开销。

若要将 Queue 重置为它的初始状态，请在调用 TrimToSize 之前调用 Clear 方法。截去空 Queue 会将 Queue 的容量设置为默认容量。 若要将 Queue 重置为它的初始状态，请在调用 TrimToSize 之前调用 Clear 方法。截去空 Queue 会将 Queue 的容量设置为默认容量。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间
Clear
Count


Queue 属性

Queue 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Queue 类

Queue 类型公开以下成员。

名称 说明
页首

参考

Queue 类
System.Collections 命名空间


Queue ..::.Count 属性

Queue
.
.
::
.
Count 属性
Queue 类

获取 Queue 中包含的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Count As Integer
    Get
public virtual int Count { get; }
public:
virtual property int Count {
    int get ();
}
abstract Count : int
override Count : int

属性值

类型： System Int32
Queue 中包含的元素数。

实现

Queue 的容量是指 Queue 可存储的元素数。Count 是 Queue 中的实际元素数。 Queue 的容量是指 Queue 可存储的元素数。Count 是 Queue 中的实际元素数。

Queue 的容量始终大于或等于 Count。如果在添加元素时 Count 超过容量，则通过在复制旧元素和添加新元素之前重新分配内部数组来自动增大容量。新容量由当前容量和等比因子的乘积来确定，等比因子在构造 Queue 时确定。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。 Queue 的容量始终大于或等于 Count。如果在添加元素时 Count 超过容量，则通过在复制旧元素和添加新元素之前重新分配内部数组来自动增大容量。新容量由当前容量和等比因子的乘积来确定，等比因子在构造 Queue 时确定。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。 Queue 的容量始终大于或等于 Count。如果在添加元素时 Count 超过容量，则通过在复制旧元素和添加新元素之前重新分配内部数组来自动增大容量。新容量由当前容量和等比因子的乘积来确定，等比因子在构造 Queue 时确定。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。 Queue 的容量始终大于或等于 Count。如果在添加元素时 Count 超过容量，则通过在复制旧元素和添加新元素之前重新分配内部数组来自动增大容量。新容量由当前容量和等比因子的乘积来确定，等比因子在构造 Queue 时确定。Queue 的容量将始终增加一个最小值，无论增长因子是多少；1.0 的增长因子并不会阻止 Queue 增加大小。

可通过调用 TrimToSize 来减少容量。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间


Queue ..::.IsSynchronized 属性

Queue
.
.
::
.
IsSynchronized 属性
Queue 类

获取一个值，该值指示是否同步对 Queue 的访问（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsSynchronized As Boolean
    Get
public virtual bool IsSynchronized { get; }
public:
virtual property bool IsSynchronized {
    bool get ();
}
abstract IsSynchronized : bool
override IsSynchronized : bool

属性值

类型： System Boolean
如果对 Queue 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。 如果对 Queue 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。

实现

若要保证 Queue 的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。检索此属性的值的运算复杂度为 O(1)。 下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。检索此属性的值的运算复杂度为 O(1)。

Dim myCollection As New Queue()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Queue^ myCollection = gcnew Queue();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

下面的示例演示如何同步 Queue、如何确定 Queue 是否同步以及如何使用同步的 Queue。

Imports System
Imports System.Collections

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes a new Queue.
        Dim myQ As New Queue()
        myQ.Enqueue("The")
        myQ.Enqueue("quick")
        myQ.Enqueue("brown")
        myQ.Enqueue("fox")

        ' Creates a synchronized wrapper around the Queue.
        Dim mySyncdQ As Queue = Queue.Synchronized(myQ)

        ' Displays the sychronization status of both Queues.
        Dim msg As String
        If myQ.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("myQ is {0}.", msg)
        If mySyncdQ.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySyncdQ is {0}.", msg)
    End Sub
End Class

' This code produces the following output.
'
' myQ is not synchronized.
' mySyncdQ is synchronized.

using System;
using System.Collections;
public class SamplesQueue  {

   public static void Main()  {

      // Creates and initializes a new Queue.
      Queue myQ = new Queue();
      myQ.Enqueue( "The" );
      myQ.Enqueue( "quick" );
      myQ.Enqueue( "brown" );
      myQ.Enqueue( "fox" );

      // Creates a synchronized wrapper around the Queue.
      Queue mySyncdQ = Queue.Synchronized( myQ );

      // Displays the sychronization status of both Queues.
      Console.WriteLine( "myQ is {0}.", myQ.IsSynchronized ? "synchronized" : "not synchronized" );
      Console.WriteLine( "mySyncdQ is {0}.", mySyncdQ.IsSynchronized ? "synchronized" : "not synchronized" );
   }
}
/*
This code produces the following output.

myQ is not synchronized.
mySyncdQ is synchronized.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new Queue.
   Queue^ myQ = gcnew Queue;
   myQ->Enqueue( "The" );
   myQ->Enqueue( "quick" );
   myQ->Enqueue( "brown" );
   myQ->Enqueue( "fox" );

   // Creates a synchronized wrapper around the Queue.
   Queue^ mySyncdQ = Queue::Synchronized( myQ );

   // Displays the sychronization status of both Queues.
   Console::WriteLine( "myQ is {0}.", myQ->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
   Console::WriteLine( "mySyncdQ is {0}.", mySyncdQ->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
}

/*
This code produces the following output.

myQ is not synchronized.
mySyncdQ is synchronized.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间
SyncRoot
Synchronized


Queue ..::.SyncRoot 属性

Queue
.
.
::
.
SyncRoot 属性
Queue 类

获取可用于同步 Queue 访问的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property SyncRoot As Object
    Get
public virtual Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get ();
}
abstract SyncRoot : Object
override SyncRoot : Object

属性值

类型： System Object
可用于同步对 Queue 的访问的对象。

实现

若要创建 Queue 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Queue 同步版本。同步代码必须在 Queue 的 SyncRoot 上执行操作，而不是直接在 Queue 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Queue 对象。 若要创建 Queue 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Queue 同步版本。同步代码必须在 Queue 的 SyncRoot 上执行操作，而不是直接在 Queue 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Queue 对象。 若要创建 Queue 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Queue 同步版本。同步代码必须在 Queue 的 SyncRoot 上执行操作，而不是直接在 Queue 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Queue 对象。 若要创建 Queue 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Queue 同步版本。同步代码必须在 Queue 的 SyncRoot 上执行操作，而不是直接在 Queue 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Queue 对象。 若要创建 Queue 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Queue 同步版本。同步代码必须在 Queue 的 SyncRoot 上执行操作，而不是直接在 Queue 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Queue 对象。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。检索此属性的值的运算复杂度为 O(1)。 下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。检索此属性的值的运算复杂度为 O(1)。

Dim myCollection As New Queue()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Queue^ myCollection = gcnew Queue();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Queue 类
Queue 成员
System.Collections 命名空间
IsSynchronized
Synchronized


ReadOnlyCollectionBase 类

ReadOnlyCollectionBase 类
成员

为强类型非泛型只读集合提供 abstract 基类。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class ReadOnlyCollectionBase _
    Implements ICollection, IEnumerable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class ReadOnlyCollectionBase : ICollection,
    IEnumerable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class ReadOnlyCollectionBase abstract : ICollection,
    IEnumerable
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type ReadOnlyCollectionBase =
    class
        interface ICollection
        interface IEnumerable
    end

ReadOnlyCollectionBase 实例始终是只读的。有关此类的可修改版本，请参见 CollectionBase。 ReadOnlyCollectionBase 实例始终是只读的。有关此类的可修改版本，请参见 CollectionBase。

对实现者的说明

提供此基类旨在使实施者创建强类型只读自定义集合变得更容易。实现者最好扩展此基类，而不是创建自己的类。此基类的成员受保护并且只能通过派生类使用。 提供此基类旨在使实施者创建强类型只读自定义集合变得更容易。实现者最好扩展此基类，而不是创建自己的类。此基类的成员受保护并且只能通过派生类使用。 提供此基类旨在使实施者创建强类型只读自定义集合变得更容易。实现者最好扩展此基类，而不是创建自己的类。此基类的成员受保护并且只能通过派生类使用。

此类通过 InnerList 属性使基础集合可用；该属性只能被直接派生自 ReadOnlyCollectionBase 的类使用。该派生类必须确保自己的用户不能修改基础集合。 此类通过 InnerList 属性使基础集合可用；该属性只能被直接派生自 ReadOnlyCollectionBase 的类使用。该派生类必须确保自己的用户不能修改基础集合。

下面的代码示例实现 ReadOnlyCollectionBase 类。

Imports System
Imports System.Collections

Public Class ROCollection
    Inherits ReadOnlyCollectionBase

    Public Sub New(sourceList As IList)
        InnerList.AddRange(sourceList)
    End Sub 'New

    Default Public ReadOnly Property Item(index As Integer) As [Object]
        Get
            Return InnerList(index)
        End Get
    End Property

    Public Function IndexOf(value As [Object]) As Integer
        Return InnerList.IndexOf(value)
    End Function 'IndexOf

    Public Function Contains(value As [Object]) As Boolean
        Return InnerList.Contains(value)
    End Function 'Contains

End Class 'ROCollection

Public Class SamplesCollectionBase

    Public Shared Sub Main()

        ' Create an ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("red")
        myAL.Add("blue")
        myAL.Add("yellow")
        myAL.Add("green")
        myAL.Add("orange")
        myAL.Add("purple")

        ' Create a new ROCollection that contains the elements in myAL.
        Dim myCol As New ROCollection(myAL)

        ' Display the contents of the collection using For Each. This is the preferred method.
        Console.WriteLine("Contents of the collection (using For Each):")
        PrintValues1(myCol)

        ' Display the contents of the collection using the enumerator.
        Console.WriteLine("Contents of the collection (using enumerator):")
        PrintValues2(myCol)

        ' Display the contents of the collection using the Count property and the Item property.
        Console.WriteLine("Contents of the collection (using Count and Item):")
        PrintIndexAndValues(myCol)

        ' Search the collection with Contains and IndexOf.
        Console.WriteLine("Contains yellow: {0}", myCol.Contains("yellow"))
        Console.WriteLine("orange is at index {0}.", myCol.IndexOf("orange"))
        Console.WriteLine()

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As ROCollection)
        Dim i As Integer
        For i = 0 To myCol.Count - 1
            Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As ROCollection)
        Dim obj As [Object]
        For Each obj In  myCol
            Console.WriteLine("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As ROCollection)
        Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
        While myEnumerator.MoveNext()
            Console.WriteLine("   {0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   red
'   blue
'   yellow
'   green
'   orange
'   purple
'
'Contents of the collection (using enumerator):
'   red
'   blue
'   yellow
'   green
'   orange
'   purple
'
'Contents of the collection (using Count and Item):
'   [0]:   red
'   [1]:   blue
'   [2]:   yellow
'   [3]:   green
'   [4]:   orange
'   [5]:   purple
'
'Contains yellow: True
'orange is at index 4.

using System;
using System.Collections;

public class ROCollection : ReadOnlyCollectionBase  {

   public ROCollection( IList sourceList )  {
      InnerList.AddRange( sourceList );
   }

   public Object this[ int index ]  {
      get  {
         return( InnerList[index] );
      }
   }

   public int IndexOf( Object value )  {
      return( InnerList.IndexOf( value ) );
   }

   public bool Contains( Object value )  {
      return( InnerList.Contains( value ) );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create an ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "red" );
      myAL.Add( "blue" );
      myAL.Add( "yellow" );
      myAL.Add( "green" );
      myAL.Add( "orange" );
      myAL.Add( "purple" );

      // Create a new ROCollection that contains the elements in myAL.
      ROCollection myCol = new ROCollection( myAL );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myCol );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myCol );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myCol );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains yellow: {0}", myCol.Contains( "yellow" ) );
      Console.WriteLine( "orange is at index {0}.", myCol.IndexOf( "orange" ) );
      Console.WriteLine();

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( ROCollection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( ROCollection myCol )  {
      foreach ( Object obj in myCol )
         Console.WriteLine( "   {0}", obj );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( ROCollection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using enumerator):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using Count and Item):
   [0]:   red
   [1]:   blue
   [2]:   yellow
   [3]:   green
   [4]:   orange
   [5]:   purple

Contains yellow: True
orange is at index 4.

*/

using namespace System;
using namespace System::Collections;
public ref class ROCollection: public ReadOnlyCollectionBase
{
public:
   ROCollection( IList^ sourceList )
   {
      InnerList->AddRange( sourceList );
   }

   property Object^ Item [int]
   {
      Object^ get( int index )
      {
         return (InnerList[ index ]);
      }

   }
   int IndexOf( Object^ value )
   {
      return (InnerList->IndexOf( value ));
   }

   bool Contains( Object^ value )
   {
      return (InnerList->Contains( value ));
   }

};

void PrintIndexAndValues( ROCollection^ myCol );
void PrintValues2( ROCollection^ myCol );
int main()
{
   // Create an ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "red" );
   myAL->Add( "blue" );
   myAL->Add( "yellow" );
   myAL->Add( "green" );
   myAL->Add( "orange" );
   myAL->Add( "purple" );

   // Create a new ROCollection that contains the elements in myAL.
   ROCollection^ myCol = gcnew ROCollection( myAL );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myCol );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myCol );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains yellow: {0}", myCol->Contains( "yellow" ) );
   Console::WriteLine( "orange is at index {0}.", myCol->IndexOf( "orange" ) );
   Console::WriteLine();
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( ROCollection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( ROCollection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using Count and Item):
   [0]:   red
   [1]:   blue
   [2]:   yellow
   [3]:   green
   [4]:   orange
   [5]:   purple

Contains yellow: True
orange is at index 4.

*/

System.Collections System.Collections..::.ReadOnlyCollectionBaseReadOnlyCollectionBase

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。

此实现不为 ReadOnlyCollectionBase 提供同步（线程安全）包装，但派生类可使用 SyncRoot 属性创建它们自己的 ReadOnlyCollectionBase 同步版本。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ReadOnlyCollectionBase 成员
System.Collections 命名空间
System.Collections ArrayList
CollectionBase
System.Collections.Generic


ReadOnlyCollectionBase 成员

ReadOnlyCollectionBase 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ReadOnlyCollectionBase 类

为强类型非泛型只读集合提供 abstract 基类。

ReadOnlyCollectionBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ReadOnlyCollectionBase 类
System.Collections 命名空间


ReadOnlyCollectionBase 构造函数

ReadOnlyCollectionBase 构造函数
ReadOnlyCollectionBase 类

初始化 ReadOnlyCollectionBase 类的新实例。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected Sub New
protected ReadOnlyCollectionBase()
protected:
ReadOnlyCollectionBase()
new : unit -> ReadOnlyCollectionBase

此构造函数的运算复杂度是 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ReadOnlyCollectionBase 类
ReadOnlyCollectionBase 成员
System.Collections 命名空间


ReadOnlyCollectionBase 方法

ReadOnlyCollectionBase 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ReadOnlyCollectionBase 类

ReadOnlyCollectionBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ReadOnlyCollectionBase 类
System.Collections 命名空间


ReadOnlyCollectionBase ..::.GetEnumerator 方法

ReadOnlyCollectionBase
.
.
::
.
GetEnumerator 方法
ReadOnlyCollectionBase 类

返回循环访问 ReadOnlyCollectionBase 实例的枚举器。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumerator As IEnumerator
public virtual IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator()
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
用于 ReadOnlyCollectionBase 实例的 IEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

下面的代码示例实现 ReadOnlyCollectionBase 类。

Imports System
Imports System.Collections

Public Class ROCollection
    Inherits ReadOnlyCollectionBase

    Public Sub New(sourceList As IList)
        InnerList.AddRange(sourceList)
    End Sub 'New

    Default Public ReadOnly Property Item(index As Integer) As [Object]
        Get
            Return InnerList(index)
        End Get
    End Property

    Public Function IndexOf(value As [Object]) As Integer
        Return InnerList.IndexOf(value)
    End Function 'IndexOf

    Public Function Contains(value As [Object]) As Boolean
        Return InnerList.Contains(value)
    End Function 'Contains

End Class 'ROCollection

Public Class SamplesCollectionBase

    Public Shared Sub Main()

        ' Create an ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("red")
        myAL.Add("blue")
        myAL.Add("yellow")
        myAL.Add("green")
        myAL.Add("orange")
        myAL.Add("purple")

        ' Create a new ROCollection that contains the elements in myAL.
        Dim myCol As New ROCollection(myAL)

        ' Display the contents of the collection using For Each. This is the preferred method.
        Console.WriteLine("Contents of the collection (using For Each):")
        PrintValues1(myCol)

        ' Display the contents of the collection using the enumerator.
        Console.WriteLine("Contents of the collection (using enumerator):")
        PrintValues2(myCol)

        ' Display the contents of the collection using the Count property and the Item property.
        Console.WriteLine("Contents of the collection (using Count and Item):")
        PrintIndexAndValues(myCol)

        ' Search the collection with Contains and IndexOf.
        Console.WriteLine("Contains yellow: {0}", myCol.Contains("yellow"))
        Console.WriteLine("orange is at index {0}.", myCol.IndexOf("orange"))
        Console.WriteLine()

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As ROCollection)
        Dim i As Integer
        For i = 0 To myCol.Count - 1
            Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As ROCollection)
        Dim obj As [Object]
        For Each obj In  myCol
            Console.WriteLine("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As ROCollection)
        Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
        While myEnumerator.MoveNext()
            Console.WriteLine("   {0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   red
'   blue
'   yellow
'   green
'   orange
'   purple
'
'Contents of the collection (using enumerator):
'   red
'   blue
'   yellow
'   green
'   orange
'   purple
'
'Contents of the collection (using Count and Item):
'   [0]:   red
'   [1]:   blue
'   [2]:   yellow
'   [3]:   green
'   [4]:   orange
'   [5]:   purple
'
'Contains yellow: True
'orange is at index 4.

using System;
using System.Collections;

public class ROCollection : ReadOnlyCollectionBase  {

   public ROCollection( IList sourceList )  {
      InnerList.AddRange( sourceList );
   }

   public Object this[ int index ]  {
      get  {
         return( InnerList[index] );
      }
   }

   public int IndexOf( Object value )  {
      return( InnerList.IndexOf( value ) );
   }

   public bool Contains( Object value )  {
      return( InnerList.Contains( value ) );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create an ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "red" );
      myAL.Add( "blue" );
      myAL.Add( "yellow" );
      myAL.Add( "green" );
      myAL.Add( "orange" );
      myAL.Add( "purple" );

      // Create a new ROCollection that contains the elements in myAL.
      ROCollection myCol = new ROCollection( myAL );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myCol );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myCol );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myCol );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains yellow: {0}", myCol.Contains( "yellow" ) );
      Console.WriteLine( "orange is at index {0}.", myCol.IndexOf( "orange" ) );
      Console.WriteLine();

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( ROCollection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( ROCollection myCol )  {
      foreach ( Object obj in myCol )
         Console.WriteLine( "   {0}", obj );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( ROCollection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using enumerator):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using Count and Item):
   [0]:   red
   [1]:   blue
   [2]:   yellow
   [3]:   green
   [4]:   orange
   [5]:   purple

Contains yellow: True
orange is at index 4.

*/

using namespace System;
using namespace System::Collections;
public ref class ROCollection: public ReadOnlyCollectionBase
{
public:
   ROCollection( IList^ sourceList )
   {
      InnerList->AddRange( sourceList );
   }

   property Object^ Item [int]
   {
      Object^ get( int index )
      {
         return (InnerList[ index ]);
      }

   }
   int IndexOf( Object^ value )
   {
      return (InnerList->IndexOf( value ));
   }

   bool Contains( Object^ value )
   {
      return (InnerList->Contains( value ));
   }

};

void PrintIndexAndValues( ROCollection^ myCol );
void PrintValues2( ROCollection^ myCol );
int main()
{
   // Create an ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "red" );
   myAL->Add( "blue" );
   myAL->Add( "yellow" );
   myAL->Add( "green" );
   myAL->Add( "orange" );
   myAL->Add( "purple" );

   // Create a new ROCollection that contains the elements in myAL.
   ROCollection^ myCol = gcnew ROCollection( myAL );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myCol );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myCol );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains yellow: {0}", myCol->Contains( "yellow" ) );
   Console::WriteLine( "orange is at index {0}.", myCol->IndexOf( "orange" ) );
   Console::WriteLine();
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( ROCollection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( ROCollection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using Count and Item):
   [0]:   red
   [1]:   blue
   [2]:   yellow
   [3]:   green
   [4]:   orange
   [5]:   purple

Contains yellow: True
orange is at index 4.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ReadOnlyCollectionBase 类
ReadOnlyCollectionBase 成员
System.Collections 命名空间
System.Collections IEnumerator


ReadOnlyCollectionBase ..::.ICollection ..::.CopyTo 方法

ReadOnlyCollectionBase
.
.
::
.
ICollection
.
.
::
.
CopyTo 方法
ReadOnlyCollectionBase 类

从目标数组的指定索引处开始将整个 ReadOnlyCollectionBase 复制到兼容的一维 Array。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Sub CopyTo ( _
    array As Array, _
    index As Integer _
) Implements ICollection.CopyTo
void ICollection.CopyTo(
    Array array,
    int index
)
private:
virtual void CopyTo(
    Array^ array,
    int index
) sealed = ICollection::CopyTo
private abstract CopyTo :
        array:Array *
        index:int -> unit
private override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
作为从 ReadOnlyCollectionBase 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 ReadOnlyCollectionBase 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
index
类型： System Int32
array 中从零开始的索引，将在此处开始复制。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 ReadOnlyCollectionBase 中的元素数大于从 index 到目标 array 结尾处之间的可用空间。
InvalidCastException | 无法自动将源 ReadOnlyCollectionBase 的类型强制转换为目标 array 的类型。

指定的数组必须是兼容类型的数组。

此方法使用 Array..::.Copy 来复制元素。

此方法的运算复杂度是 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ReadOnlyCollectionBase 类
ReadOnlyCollectionBase 成员
System.Collections 命名空间


ReadOnlyCollectionBase 属性

ReadOnlyCollectionBase 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ReadOnlyCollectionBase 类

ReadOnlyCollectionBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ReadOnlyCollectionBase 类
System.Collections 命名空间


ReadOnlyCollectionBase ..::.Count 属性

ReadOnlyCollectionBase
.
.
::
.
Count 属性
ReadOnlyCollectionBase 类

获取包含在 ReadOnlyCollectionBase 实例中的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Count As Integer
    Get
public virtual int Count { get; }
public:
virtual property int Count {
    int get ();
}
abstract Count : int
override Count : int

属性值

类型： System Int32
包含在 ReadOnlyCollectionBase 实例中的元素数。
检索此属性的值的运算复杂度为 O(1)。

实现

下面的代码示例实现 ReadOnlyCollectionBase 类。

Imports System
Imports System.Collections

Public Class ROCollection
    Inherits ReadOnlyCollectionBase

    Public Sub New(sourceList As IList)
        InnerList.AddRange(sourceList)
    End Sub 'New

    Default Public ReadOnly Property Item(index As Integer) As [Object]
        Get
            Return InnerList(index)
        End Get
    End Property

    Public Function IndexOf(value As [Object]) As Integer
        Return InnerList.IndexOf(value)
    End Function 'IndexOf

    Public Function Contains(value As [Object]) As Boolean
        Return InnerList.Contains(value)
    End Function 'Contains

End Class 'ROCollection

Public Class SamplesCollectionBase

    Public Shared Sub Main()

        ' Create an ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("red")
        myAL.Add("blue")
        myAL.Add("yellow")
        myAL.Add("green")
        myAL.Add("orange")
        myAL.Add("purple")

        ' Create a new ROCollection that contains the elements in myAL.
        Dim myCol As New ROCollection(myAL)

        ' Display the contents of the collection using For Each. This is the preferred method.
        Console.WriteLine("Contents of the collection (using For Each):")
        PrintValues1(myCol)

        ' Display the contents of the collection using the enumerator.
        Console.WriteLine("Contents of the collection (using enumerator):")
        PrintValues2(myCol)

        ' Display the contents of the collection using the Count property and the Item property.
        Console.WriteLine("Contents of the collection (using Count and Item):")
        PrintIndexAndValues(myCol)

        ' Search the collection with Contains and IndexOf.
        Console.WriteLine("Contains yellow: {0}", myCol.Contains("yellow"))
        Console.WriteLine("orange is at index {0}.", myCol.IndexOf("orange"))
        Console.WriteLine()

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As ROCollection)
        Dim i As Integer
        For i = 0 To myCol.Count - 1
            Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As ROCollection)
        Dim obj As [Object]
        For Each obj In  myCol
            Console.WriteLine("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As ROCollection)
        Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
        While myEnumerator.MoveNext()
            Console.WriteLine("   {0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   red
'   blue
'   yellow
'   green
'   orange
'   purple
'
'Contents of the collection (using enumerator):
'   red
'   blue
'   yellow
'   green
'   orange
'   purple
'
'Contents of the collection (using Count and Item):
'   [0]:   red
'   [1]:   blue
'   [2]:   yellow
'   [3]:   green
'   [4]:   orange
'   [5]:   purple
'
'Contains yellow: True
'orange is at index 4.

using System;
using System.Collections;

public class ROCollection : ReadOnlyCollectionBase  {

   public ROCollection( IList sourceList )  {
      InnerList.AddRange( sourceList );
   }

   public Object this[ int index ]  {
      get  {
         return( InnerList[index] );
      }
   }

   public int IndexOf( Object value )  {
      return( InnerList.IndexOf( value ) );
   }

   public bool Contains( Object value )  {
      return( InnerList.Contains( value ) );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create an ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "red" );
      myAL.Add( "blue" );
      myAL.Add( "yellow" );
      myAL.Add( "green" );
      myAL.Add( "orange" );
      myAL.Add( "purple" );

      // Create a new ROCollection that contains the elements in myAL.
      ROCollection myCol = new ROCollection( myAL );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myCol );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myCol );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myCol );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains yellow: {0}", myCol.Contains( "yellow" ) );
      Console.WriteLine( "orange is at index {0}.", myCol.IndexOf( "orange" ) );
      Console.WriteLine();

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( ROCollection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( ROCollection myCol )  {
      foreach ( Object obj in myCol )
         Console.WriteLine( "   {0}", obj );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( ROCollection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using enumerator):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using Count and Item):
   [0]:   red
   [1]:   blue
   [2]:   yellow
   [3]:   green
   [4]:   orange
   [5]:   purple

Contains yellow: True
orange is at index 4.

*/

using namespace System;
using namespace System::Collections;
public ref class ROCollection: public ReadOnlyCollectionBase
{
public:
   ROCollection( IList^ sourceList )
   {
      InnerList->AddRange( sourceList );
   }

   property Object^ Item [int]
   {
      Object^ get( int index )
      {
         return (InnerList[ index ]);
      }

   }
   int IndexOf( Object^ value )
   {
      return (InnerList->IndexOf( value ));
   }

   bool Contains( Object^ value )
   {
      return (InnerList->Contains( value ));
   }

};

void PrintIndexAndValues( ROCollection^ myCol );
void PrintValues2( ROCollection^ myCol );
int main()
{
   // Create an ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "red" );
   myAL->Add( "blue" );
   myAL->Add( "yellow" );
   myAL->Add( "green" );
   myAL->Add( "orange" );
   myAL->Add( "purple" );

   // Create a new ROCollection that contains the elements in myAL.
   ROCollection^ myCol = gcnew ROCollection( myAL );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myCol );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myCol );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains yellow: {0}", myCol->Contains( "yellow" ) );
   Console::WriteLine( "orange is at index {0}.", myCol->IndexOf( "orange" ) );
   Console::WriteLine();
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( ROCollection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( ROCollection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using Count and Item):
   [0]:   red
   [1]:   blue
   [2]:   yellow
   [3]:   green
   [4]:   orange
   [5]:   purple

Contains yellow: True
orange is at index 4.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ReadOnlyCollectionBase 类
ReadOnlyCollectionBase 成员
System.Collections 命名空间


ReadOnlyCollectionBase ..::.ICollection ..::.IsSynchronized 属性

ReadOnlyCollectionBase
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
ReadOnlyCollectionBase 类

获取一个值，该值指示对 ReadOnlyCollectionBase 对象的访问是否同步（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
如果对 ReadOnlyCollectionBase 对象的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。 如果对 ReadOnlyCollectionBase 对象的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。

实现

ReadOnlyCollectionBase 对象不是同步的。派生类可以使用 SyncRoot 属性提供 ReadOnlyCollectionBase 类的同步版本。 ReadOnlyCollectionBase 对象不是同步的。派生类可以使用 SyncRoot 属性提供 ReadOnlyCollectionBase 类的同步版本。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 属性锁定集合。

' Get the ICollection interface from the ReadOnlyCollectionBase
' derived class.
Dim myCollection As ICollection = myReadOnlyCollection
SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

// Get the ICollection interface from the ReadOnlyCollectionBase
// derived class.
ICollection myCollection = myReadOnlyCollection;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

// Get the ICollection interface from the ReadOnlyCollectionBase
// derived class.
ICollection^ myCollection = myReadOnlyCollection;
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

ReadOnlyCollectionBase 类
ReadOnlyCollectionBase 成员
System.Collections 命名空间
SyncRoot


ReadOnlyCollectionBase ..::.ICollection ..::.SyncRoot 属性

ReadOnlyCollectionBase
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
ReadOnlyCollectionBase 类

获取一个对象，该对象可用于同步对 ReadOnlyCollectionBase 对象的访问。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
一个对象，该对象可用于同步对 ReadOnlyCollectionBase 对象的访问。

实现

派生类可以使用 SyncRoot 属性提供自己的 ReadOnlyCollectionBase 类同步版本。同步代码必须在 ReadOnlyCollectionBase 对象的 SyncRoot 属性上执行操作，而不是直接在 ReadOnlyCollectionBase 对象上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 ReadOnlyCollectionBase 对象。 派生类可以使用 SyncRoot 属性提供自己的 ReadOnlyCollectionBase 类同步版本。同步代码必须在 ReadOnlyCollectionBase 对象的 SyncRoot 属性上执行操作，而不是直接在 ReadOnlyCollectionBase 对象上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 ReadOnlyCollectionBase 对象。 派生类可以使用 SyncRoot 属性提供自己的 ReadOnlyCollectionBase 类同步版本。同步代码必须在 ReadOnlyCollectionBase 对象的 SyncRoot 属性上执行操作，而不是直接在 ReadOnlyCollectionBase 对象上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 ReadOnlyCollectionBase 对象。 派生类可以使用 SyncRoot 属性提供自己的 ReadOnlyCollectionBase 类同步版本。同步代码必须在 ReadOnlyCollectionBase 对象的 SyncRoot 属性上执行操作，而不是直接在 ReadOnlyCollectionBase 对象上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 ReadOnlyCollectionBase 对象。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 属性锁定集合。

' Get the ICollection interface from the ReadOnlyCollectionBase
' derived class.
Dim myCollection As ICollection = myReadOnlyCollection
SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

// Get the ICollection interface from the ReadOnlyCollectionBase
// derived class.
ICollection myCollection = myReadOnlyCollection;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

// Get the ICollection interface from the ReadOnlyCollectionBase
// derived class.
ICollection^ myCollection = myReadOnlyCollection;
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

ReadOnlyCollectionBase 类
ReadOnlyCollectionBase 成员
System.Collections 命名空间
IsSynchronized


ReadOnlyCollectionBase ..::.InnerList 属性

ReadOnlyCollectionBase
.
.
::
.
InnerList 属性
ReadOnlyCollectionBase 类

获取包含在 ReadOnlyCollectionBase 实例中的元素的列表。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Protected ReadOnly Property InnerList As ArrayList
    Get
protected ArrayList InnerList { get; }
protected:
property ArrayList^ InnerList {
    ArrayList^ get ();
}
member InnerList : ArrayList

属性值

类型： System.Collections ArrayList
表示 ReadOnlyCollectionBase 实例本身的 ArrayList。

检索此属性的值的运算复杂度为 O(1)。

对实现者的说明

此类通过 InnerList 属性使基础集合可用；该属性只能被直接派生自 ReadOnlyCollectionBase 的类使用。该派生类必须确保自己的用户不能修改基础集合。 此类通过 InnerList 属性使基础集合可用；该属性只能被直接派生自 ReadOnlyCollectionBase 的类使用。该派生类必须确保自己的用户不能修改基础集合。

下面的代码示例实现 ReadOnlyCollectionBase 类。

Imports System
Imports System.Collections

Public Class ROCollection
    Inherits ReadOnlyCollectionBase

    Public Sub New(sourceList As IList)
        InnerList.AddRange(sourceList)
    End Sub 'New

    Default Public ReadOnly Property Item(index As Integer) As [Object]
        Get
            Return InnerList(index)
        End Get
    End Property

    Public Function IndexOf(value As [Object]) As Integer
        Return InnerList.IndexOf(value)
    End Function 'IndexOf

    Public Function Contains(value As [Object]) As Boolean
        Return InnerList.Contains(value)
    End Function 'Contains

End Class 'ROCollection

Public Class SamplesCollectionBase

    Public Shared Sub Main()

        ' Create an ArrayList.
        Dim myAL As New ArrayList()
        myAL.Add("red")
        myAL.Add("blue")
        myAL.Add("yellow")
        myAL.Add("green")
        myAL.Add("orange")
        myAL.Add("purple")

        ' Create a new ROCollection that contains the elements in myAL.
        Dim myCol As New ROCollection(myAL)

        ' Display the contents of the collection using For Each. This is the preferred method.
        Console.WriteLine("Contents of the collection (using For Each):")
        PrintValues1(myCol)

        ' Display the contents of the collection using the enumerator.
        Console.WriteLine("Contents of the collection (using enumerator):")
        PrintValues2(myCol)

        ' Display the contents of the collection using the Count property and the Item property.
        Console.WriteLine("Contents of the collection (using Count and Item):")
        PrintIndexAndValues(myCol)

        ' Search the collection with Contains and IndexOf.
        Console.WriteLine("Contains yellow: {0}", myCol.Contains("yellow"))
        Console.WriteLine("orange is at index {0}.", myCol.IndexOf("orange"))
        Console.WriteLine()

    End Sub 'Main

    ' Uses the Count property and the Item property.
    Public Shared Sub PrintIndexAndValues(myCol As ROCollection)
        Dim i As Integer
        For i = 0 To myCol.Count - 1
            Console.WriteLine("   [{0}]:   {1}", i, myCol(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintIndexAndValues

    ' Uses the For Each statement which hides the complexity of the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues1(myCol As ROCollection)
        Dim obj As [Object]
        For Each obj In  myCol
            Console.WriteLine("   {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues1

    ' Uses the enumerator.
    ' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
    Public Shared Sub PrintValues2(myCol As ROCollection)
        Dim myEnumerator As System.Collections.IEnumerator = myCol.GetEnumerator()
        While myEnumerator.MoveNext()
            Console.WriteLine("   {0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub 'PrintValues2

End Class 'SamplesCollectionBase

'This code produces the following output.
'
'Contents of the collection (using For Each):
'   red
'   blue
'   yellow
'   green
'   orange
'   purple
'
'Contents of the collection (using enumerator):
'   red
'   blue
'   yellow
'   green
'   orange
'   purple
'
'Contents of the collection (using Count and Item):
'   [0]:   red
'   [1]:   blue
'   [2]:   yellow
'   [3]:   green
'   [4]:   orange
'   [5]:   purple
'
'Contains yellow: True
'orange is at index 4.

using System;
using System.Collections;

public class ROCollection : ReadOnlyCollectionBase  {

   public ROCollection( IList sourceList )  {
      InnerList.AddRange( sourceList );
   }

   public Object this[ int index ]  {
      get  {
         return( InnerList[index] );
      }
   }

   public int IndexOf( Object value )  {
      return( InnerList.IndexOf( value ) );
   }

   public bool Contains( Object value )  {
      return( InnerList.Contains( value ) );
   }

}

public class SamplesCollectionBase  {

   public static void Main()  {

      // Create an ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( "red" );
      myAL.Add( "blue" );
      myAL.Add( "yellow" );
      myAL.Add( "green" );
      myAL.Add( "orange" );
      myAL.Add( "purple" );

      // Create a new ROCollection that contains the elements in myAL.
      ROCollection myCol = new ROCollection( myAL );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myCol );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myCol );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myCol );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains yellow: {0}", myCol.Contains( "yellow" ) );
      Console.WriteLine( "orange is at index {0}.", myCol.IndexOf( "orange" ) );
      Console.WriteLine();

   }

   // Uses the Count property and the Item property.
   public static void PrintIndexAndValues( ROCollection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues1( ROCollection myCol )  {
      foreach ( Object obj in myCol )
         Console.WriteLine( "   {0}", obj );
      Console.WriteLine();
   }

   // Uses the enumerator.
   // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
   public static void PrintValues2( ROCollection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }

}

/*
This code produces the following output.

Contents of the collection (using foreach):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using enumerator):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using Count and Item):
   [0]:   red
   [1]:   blue
   [2]:   yellow
   [3]:   green
   [4]:   orange
   [5]:   purple

Contains yellow: True
orange is at index 4.

*/

using namespace System;
using namespace System::Collections;
public ref class ROCollection: public ReadOnlyCollectionBase
{
public:
   ROCollection( IList^ sourceList )
   {
      InnerList->AddRange( sourceList );
   }

   property Object^ Item [int]
   {
      Object^ get( int index )
      {
         return (InnerList[ index ]);
      }

   }
   int IndexOf( Object^ value )
   {
      return (InnerList->IndexOf( value ));
   }

   bool Contains( Object^ value )
   {
      return (InnerList->Contains( value ));
   }

};

void PrintIndexAndValues( ROCollection^ myCol );
void PrintValues2( ROCollection^ myCol );
int main()
{
   // Create an ArrayList.
   ArrayList^ myAL = gcnew ArrayList;
   myAL->Add( "red" );
   myAL->Add( "blue" );
   myAL->Add( "yellow" );
   myAL->Add( "green" );
   myAL->Add( "orange" );
   myAL->Add( "purple" );

   // Create a new ROCollection that contains the elements in myAL.
   ROCollection^ myCol = gcnew ROCollection( myAL );

   // Display the contents of the collection using the enumerator.
   Console::WriteLine( "Contents of the collection (using enumerator):" );
   PrintValues2( myCol );

   // Display the contents of the collection using the Count property and the Item property.
   Console::WriteLine( "Contents of the collection (using Count and Item):" );
   PrintIndexAndValues( myCol );

   // Search the collection with Contains and IndexOf.
   Console::WriteLine( "Contains yellow: {0}", myCol->Contains( "yellow" ) );
   Console::WriteLine( "orange is at index {0}.", myCol->IndexOf( "orange" ) );
   Console::WriteLine();
}

// Uses the Count property and the Item property.
void PrintIndexAndValues( ROCollection^ myCol )
{
   for ( int i = 0; i < myCol->Count; i++ )
      Console::WriteLine( "   [{0}]:   {1}", i, myCol->Item[ i ] );
   Console::WriteLine();
}

// Uses the enumerator.
void PrintValues2( ROCollection^ myCol )
{
   System::Collections::IEnumerator^ myEnumerator = myCol->GetEnumerator();
   while ( myEnumerator->MoveNext() )
      Console::WriteLine( "   {0}", myEnumerator->Current );

   Console::WriteLine();
}

/*
This code produces the following output.

Contents of the collection (using enumerator):
   red
   blue
   yellow
   green
   orange
   purple

Contents of the collection (using Count and Item):
   [0]:   red
   [1]:   blue
   [2]:   yellow
   [3]:   green
   [4]:   orange
   [5]:   purple

Contains yellow: True
orange is at index 4.

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ReadOnlyCollectionBase 类
ReadOnlyCollectionBase 成员
System.Collections 命名空间


SortedList 类

SortedList 类
成员

表示键/值对的集合，这些键值对按键排序并可按照键和索引访问。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class SortedList _
    Implements IDictionary, ICollection, IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class SortedList : IDictionary, ICollection,
    IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class SortedList : IDictionary,
    ICollection, IEnumerable, ICloneable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type SortedList =
    class
        interface IDictionary
        interface ICollection
        interface IEnumerable
        interface ICloneable
    end

有关此集合的泛型版本，请参见 System.Collections.Generic..::.SortedList<(Of <(TKey, TValue>)>)。

SortedList 元素可通过其键来访问 （如任意 IDictionary 实现中的元素），或通过其索引来访问（如任意 IList 实现中的元素）。

SortedList 对象在内部维护两个数组以存储列表的元素；即，一个数组用于键，另一个数组用于相关联的值。每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。 SortedList 对象在内部维护两个数组以存储列表的元素；即，一个数组用于键，另一个数组用于相关联的值。每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。 SortedList 对象在内部维护两个数组以存储列表的元素；即，一个数组用于键，另一个数组用于相关联的值。每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。

SortedList 对象的容量是 SortedList 可以保存的元素数。随着向 SortedList 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。 SortedList 对象的容量是 SortedList 可以保存的元素数。随着向 SortedList 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。 SortedList 对象的容量是 SortedList 可以保存的元素数。随着向 SortedList 中添加元素，容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。

SortedList 对象的元素将由键按照特定的 IComparer 实现（在创建 SortedList 时指定），或按照键本身提供的 IComparable 实现进行排序。不论在哪种情况下，SortedList 都不允许重复键。 SortedList 对象的元素将由键按照特定的 IComparer 实现（在创建 SortedList 时指定），或按照键本身提供的 IComparable 实现进行排序。不论在哪种情况下，SortedList 都不允许重复键。

索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。

由于要进行排序，所以在 SortedList 对象上操作比在 Hashtable 对象上操作要慢。但是，SortedList 允许通过相关联键或通过索引对值进行访问，可提供更大的灵活性。 由于要进行排序，所以在 SortedList 对象上操作比在 Hashtable 对象上操作要慢。但是，SortedList 允许通过相关联键或通过索引对值进行访问，可提供更大的灵活性。

使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。 使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。

C# 语言中的 foreach 语句（在 Visual Basic 中为 for each）需要集合中每个元素的类型。由于 SortedList 对象的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual Basic 中为 for each）需要集合中每个元素的类型。由于 SortedList 对象的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual Basic 中为 for each）需要集合中每个元素的类型。由于 SortedList 对象的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如： C# 语言中的 foreach 语句（在 Visual Basic 中为 for each）需要集合中每个元素的类型。由于 SortedList 对象的每个元素都是一个键/值对，因此元素类型既不是键的类型，也不是值的类型。而是 DictionaryEntry 类型。例如：

For Each de As DictionaryEntry In mySortedList
    '...
Next de

foreach (DictionaryEntry de in mySortedList)
{
    //...
}

for each (DictionaryEntry de in mySortedList)
{
    //...
}

foreach 语句是对枚举数的包装，它只允许从集合中读取，而不允许写入集合。

下面的代码示例演示如何创建并初始化 SortedList 对象，以及如何打印出其键和值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add("Third", "!")
        mySL.Add("Second", "World")
        mySL.Add("First", "Hello")

        ' Displays the properties and values of the SortedList.
        Console.WriteLine("mySL")
        Console.WriteLine("  Count:    {0}", mySL.Count)
        Console.WriteLine("  Capacity: {0}", mySL.Capacity)
        Console.WriteLine("  Keys and Values:")
        PrintKeysAndValues(mySL)
    End Sub

    Public Shared Sub PrintKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}:" & ControlChars.Tab & _
               "{1}", myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' mySL
'   Count:    3
'   Capacity: 16
'   Keys and Values:
'     -KEY-     -VALUE-
'     First:    Hello
'     Second:   World
'     Third:    !

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
       mySL.Add("Third", "!");
       mySL.Add("Second", "World");
       mySL.Add("First", "Hello");

      // Displays the properties and values of the SortedList.
      Console.WriteLine( "mySL" );
      Console.WriteLine( "  Count:    {0}", mySL.Count );
      Console.WriteLine( "  Capacity: {0}", mySL.Capacity );
      Console.WriteLine( "  Keys and Values:" );
      PrintKeysAndValues( mySL );
   }

   public static void PrintKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t{0}:\t{1}", myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

mySL
  Count:    3
  Capacity: 16
  Keys and Values:
    -KEY-    -VALUE-
    First:    Hello
    Second:    World
    Third:    !
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
public ref class SamplesSortedList
{
public:
   static void PrintKeysAndValues( SortedList^ myList )
   {
      Console::WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList->Count; i++ )
      {
         Console::WriteLine( "\t{0}:\t{1}", myList->GetKey( i ), myList->GetByIndex( i ) );

      }
      Console::WriteLine();
   }

};

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( "Third", "!" );
   mySL->Add( "Second", "World" );
   mySL->Add( "First", "Hello" );

   // Displays the properties and values of the SortedList.
   Console::WriteLine( "mySL" );
   Console::WriteLine( "  Count:    {0}", mySL->Count );
   Console::WriteLine( "  Capacity: {0}", mySL->Capacity );
   Console::WriteLine( "  Keys and Values:" );
   SamplesSortedList::PrintKeysAndValues( mySL );
}

/*
This code produces the following output.

mySL
Count:    3
Capacity: 16
Keys and Values:
-KEY-    -VALUE-
First:    Hello
Second:    World
Third:    !
*/

System.Collections System.Collections..::.SortedListSortedList

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。

只要不修改该集合，SortedList 对象就可以同时支持多个读取器。若要保证 SortedList 的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。 只要不修改该集合，SortedList 对象就可以同时支持多个读取器。若要保证 SortedList 的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 成员
System.Collections 命名空间
IComparable
IComparer
IDictionary
Hashtable
System.Collections.Generic SortedList TKey, TValue

其他资源

在集合中执行不区分区域性的字符串操作


SortedList 成员

SortedList 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SortedList 类

表示键/值对的集合，这些键值对按键排序并可按照键和索引访问。

SortedList 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SortedList 类
System.Collections 命名空间


SortedList 构造函数

SortedList 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SortedList 类

初始化 SortedList 类的新实例。

名称 说明
页首

参考

SortedList 类
SortedList 成员
System.Collections 命名空间


SortedList 构造函数

SortedList 构造函数
SortedList 类

初始化 SortedList 类的新实例，该实例为空、具有默认初始容量并根据 IComparable 接口（此接口由添加到 SortedList 对象中的每个键实现）进行排序。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public SortedList()
public:
SortedList()
new : unit -> SortedList

每个键均必须实现 IComparable 接口，才能与 SortedList 对象中其他所有键进行比较。根据添加到 SortedList 的每个键的 IComparable 实现对元素进行排序。 每个键均必须实现 IComparable 接口，才能与 SortedList 对象中其他所有键进行比较。根据添加到 SortedList 的每个键的 IComparable 实现对元素进行排序。

SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。 SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 SortedList 对象中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(1)。

下面的代码示例使用不同的 SortedList 构造函数创建集合，并演示这些集合行为之间的差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Create a SortedList using the default comparer.
        Dim mySL1 As New SortedList()
        Console.WriteLine("mySL1 (default):")
        mySL1.Add("FIRST", "Hello")
        mySL1.Add("SECOND", "World")
        mySL1.Add("THIRD", "!")
        Try
            mySL1.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL1)

        ' Create a SortedList using the specified case-insensitive comparer.
        Dim mySL2 As New SortedList(New CaseInsensitiveComparer())
        Console.WriteLine("mySL2 (case-insensitive comparer):")
        mySL2.Add("FIRST", "Hello")
        mySL2.Add("SECOND", "World")
        mySL2.Add("THIRD", "!")
        Try
            mySL2.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL2)

        ' Create a SortedList using the specified CaseInsensitiveComparer,
        ' which is based on the Turkish culture (tr-TR), where "I" is not
        ' the uppercase version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim mySL3 As New SortedList(New CaseInsensitiveComparer(myCul))
        Console.WriteLine("mySL3 (case-insensitive comparer, Turkish culture):")
        mySL3.Add("FIRST", "Hello")
        mySL3.Add("SECOND", "World")
        mySL3.Add("THIRD", "!")
        Try
            mySL3.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL3)

        ' Create a SortedList using the
        ' StringComparer.InvariantCultureIgnoreCase value.
        Dim mySL4 As New SortedList( _
            StringComparer.InvariantCultureIgnoreCase)

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):")
        mySL4.Add("FIRST", "Hello")
        mySL4.Add("SECOND", "World")
        mySL4.Add("THIRD", "!")
        Try
            mySL4.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL4)
    End Sub 'Main

    Public Shared Sub PrintKeysAndValues(ByVal myList As SortedList)
        Console.WriteLine("        -KEY-   -VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine("     {0,-6}: {1}", _
               myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintKeysAndValues

End Class 'SamplesSortedList

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'mySL1 (default):
'        -KEY-   -VALUE-
'        first : Ola!
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL2 (case-insensitive comparer):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL3 (case-insensitive comparer, Turkish culture):
'        -KEY-   -VALUE-
'        FIRST : Hello
'        first : Ola!
'        SECOND: World
'        THIRD : !
'
'mySL4 (InvariantCultureIgnoreCase):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !

using System;
using System.Collections;
using System.Globalization;

public class SamplesSortedList
{

    public static void Main()
    {

        // Create a SortedList using the default comparer.
        SortedList mySL1 = new SortedList();
        Console.WriteLine("mySL1 (default):");
        mySL1.Add("FIRST", "Hello");
        mySL1.Add("SECOND", "World");
        mySL1.Add("THIRD", "!");
        try
        {
            mySL1.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL1);

        // Create a SortedList using the specified case-insensitive comparer.
        SortedList mySL2 = new SortedList(new CaseInsensitiveComparer());
        Console.WriteLine("mySL2 (case-insensitive comparer):");
        mySL2.Add("FIRST", "Hello");
        mySL2.Add("SECOND", "World");
        mySL2.Add("THIRD", "!");
        try
        {
            mySL2.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL2);

        // Create a SortedList using the specified CaseInsensitiveComparer,
        // which is based on the Turkish culture (tr-TR), where "I" is not
        // the uppercase version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        SortedList mySL3 = new SortedList(new CaseInsensitiveComparer(myCul));
        Console.WriteLine(
            "mySL3 (case-insensitive comparer, Turkish culture):");

        mySL3.Add("FIRST", "Hello");
        mySL3.Add("SECOND", "World");
        mySL3.Add("THIRD", "!");
        try
        {
            mySL3.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL3);

        // Create a SortedList using the
        // StringComparer.InvariantCultureIgnoreCase value.
        SortedList mySL4 = new SortedList(
            StringComparer.InvariantCultureIgnoreCase);

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):");
        mySL4.Add("FIRST", "Hello");
        mySL4.Add("SECOND", "World");
        mySL4.Add("THIRD", "!");
        try
        {
            mySL4.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL4);

    }

    public static void PrintKeysAndValues(SortedList myList)
    {
        Console.WriteLine("        -KEY-   -VALUE-");
        for (int i = 0; i < myList.Count; i++)
        {
            Console.WriteLine("        {0,-6}: {1}",
                myList.GetKey(i), myList.GetByIndex(i));
        }
        Console.WriteLine();
    }
}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

// The following code example creates SortedList instances using different constructors
// and demonstrates the differences in the behavior of the SortedList instances.

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "        -KEY-   -VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "        {0,-6}: {1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Create a SortedList using the default comparer.
   SortedList^ mySL1 = gcnew SortedList;
   Console::WriteLine( "mySL1 (default):" );
   mySL1->Add( "FIRST", "Hello" );
   mySL1->Add( "SECOND", "World" );
   mySL1->Add( "THIRD", "!" );

   try   { mySL1->Add( "first", "Ola!" ); }
   catch ( ArgumentException^ e ) { Console::WriteLine( e ); }

   PrintKeysAndValues( mySL1 );

   // Create a SortedList using the specified case-insensitive comparer.
   SortedList^ mySL2 = gcnew SortedList( gcnew CaseInsensitiveComparer );
   Console::WriteLine( "mySL2 (case-insensitive comparer):" );
   mySL2->Add( "FIRST", "Hello" );
   mySL2->Add( "SECOND", "World" );
   mySL2->Add( "THIRD", "!" );

   try   { mySL2->Add( "first", "Ola!" ); }
   catch ( ArgumentException^ e ) { Console::WriteLine( e ); }

   PrintKeysAndValues( mySL2 );

   // Create a SortedList using the specified KeyComparer.
   // The KeyComparer uses a case-insensitive hash code provider and a case-insensitive comparer,
   // which are based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   SortedList^ mySL3 = gcnew SortedList( gcnew CaseInsensitiveComparer( myCul ) );
   Console::WriteLine( "mySL3 (case-insensitive comparer, Turkish culture):" );
   mySL3->Add( "FIRST", "Hello" );
   mySL3->Add( "SECOND", "World" );
   mySL3->Add( "THIRD", "!" );

   try   { mySL3->Add( "first", "Ola!" ); }
   catch ( ArgumentException^ e ) { Console::WriteLine( e ); }

   PrintKeysAndValues( mySL3 );

   // Create a SortedList using the ComparisonType.InvariantCultureIgnoreCase value.
   SortedList^ mySL4 = gcnew SortedList( StringComparer::InvariantCultureIgnoreCase );
   Console::WriteLine( "mySL4 (InvariantCultureIgnoreCase):" );
   mySL4->Add( "FIRST", "Hello" );
   mySL4->Add( "SECOND", "World" );
   mySL4->Add( "THIRD", "!" );

   try   { mySL4->Add( "first", "Ola!" ); }
   catch ( ArgumentException^ e ) { Console::WriteLine( e ); }

   PrintKeysAndValues( mySL4 );

    Console::WriteLine("\n\nHit ENTER to return");
    Console::ReadLine();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
SortedList 重载
System.Collections 命名空间
IComparable
Capacity

其他资源

在集合中执行不区分区域性的字符串操作


SortedList 构造函数 (IComparer)

SortedList 构造函数 (IComparer)
SortedList 类

初始化 SortedList 类的新实例，该实例为空、具有默认初始容量并根据指定的 IComparer 接口进行排序。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    comparer As IComparer _
)
public SortedList(
    IComparer comparer
)
public:
SortedList(
    IComparer^ comparer
)
new :
        comparer:IComparer -> SortedList

参数

comparer
类型： System.Collections IComparer
IComparer 实现，对键进行比较时使用。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用每一个键的 IComparable 实现。

根据指定的 IComparer 实现对元素进行排序。如果 comparer 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则会使用每个键的 IComparable 实现；因此，每个键必须实现 IComparable 接口，以便能够与 SortedList 对象中的其他所有键进行比较。 根据指定的 IComparer 实现对元素进行排序。如果 comparer 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则会使用每个键的 IComparable 实现；因此，每个键必须实现 IComparable 接口，以便能够与 SortedList 对象中的其他所有键进行比较。

SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。 SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 SortedList 对象中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(1)。

下面的代码示例使用不同的 SortedList 构造函数创建集合，并演示这些集合行为之间的差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Create a SortedList using the default comparer.
        Dim mySL1 As New SortedList()
        Console.WriteLine("mySL1 (default):")
        mySL1.Add("FIRST", "Hello")
        mySL1.Add("SECOND", "World")
        mySL1.Add("THIRD", "!")
        Try
            mySL1.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL1)

        ' Create a SortedList using the specified case-insensitive comparer.
        Dim mySL2 As New SortedList(New CaseInsensitiveComparer())
        Console.WriteLine("mySL2 (case-insensitive comparer):")
        mySL2.Add("FIRST", "Hello")
        mySL2.Add("SECOND", "World")
        mySL2.Add("THIRD", "!")
        Try
            mySL2.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL2)

        ' Create a SortedList using the specified CaseInsensitiveComparer,
        ' which is based on the Turkish culture (tr-TR), where "I" is not
        ' the uppercase version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim mySL3 As New SortedList(New CaseInsensitiveComparer(myCul))
        Console.WriteLine("mySL3 (case-insensitive comparer, Turkish culture):")
        mySL3.Add("FIRST", "Hello")
        mySL3.Add("SECOND", "World")
        mySL3.Add("THIRD", "!")
        Try
            mySL3.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL3)

        ' Create a SortedList using the
        ' StringComparer.InvariantCultureIgnoreCase value.
        Dim mySL4 As New SortedList( _
            StringComparer.InvariantCultureIgnoreCase)

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):")
        mySL4.Add("FIRST", "Hello")
        mySL4.Add("SECOND", "World")
        mySL4.Add("THIRD", "!")
        Try
            mySL4.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL4)
    End Sub 'Main

    Public Shared Sub PrintKeysAndValues(ByVal myList As SortedList)
        Console.WriteLine("        -KEY-   -VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine("     {0,-6}: {1}", _
               myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintKeysAndValues

End Class 'SamplesSortedList

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'mySL1 (default):
'        -KEY-   -VALUE-
'        first : Ola!
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL2 (case-insensitive comparer):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL3 (case-insensitive comparer, Turkish culture):
'        -KEY-   -VALUE-
'        FIRST : Hello
'        first : Ola!
'        SECOND: World
'        THIRD : !
'
'mySL4 (InvariantCultureIgnoreCase):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !

using System;
using System.Collections;
using System.Globalization;

public class SamplesSortedList
{

    public static void Main()
    {

        // Create a SortedList using the default comparer.
        SortedList mySL1 = new SortedList();
        Console.WriteLine("mySL1 (default):");
        mySL1.Add("FIRST", "Hello");
        mySL1.Add("SECOND", "World");
        mySL1.Add("THIRD", "!");
        try
        {
            mySL1.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL1);

        // Create a SortedList using the specified case-insensitive comparer.
        SortedList mySL2 = new SortedList(new CaseInsensitiveComparer());
        Console.WriteLine("mySL2 (case-insensitive comparer):");
        mySL2.Add("FIRST", "Hello");
        mySL2.Add("SECOND", "World");
        mySL2.Add("THIRD", "!");
        try
        {
            mySL2.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL2);

        // Create a SortedList using the specified CaseInsensitiveComparer,
        // which is based on the Turkish culture (tr-TR), where "I" is not
        // the uppercase version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        SortedList mySL3 = new SortedList(new CaseInsensitiveComparer(myCul));
        Console.WriteLine(
            "mySL3 (case-insensitive comparer, Turkish culture):");

        mySL3.Add("FIRST", "Hello");
        mySL3.Add("SECOND", "World");
        mySL3.Add("THIRD", "!");
        try
        {
            mySL3.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL3);

        // Create a SortedList using the
        // StringComparer.InvariantCultureIgnoreCase value.
        SortedList mySL4 = new SortedList(
            StringComparer.InvariantCultureIgnoreCase);

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):");
        mySL4.Add("FIRST", "Hello");
        mySL4.Add("SECOND", "World");
        mySL4.Add("THIRD", "!");
        try
        {
            mySL4.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL4);

    }

    public static void PrintKeysAndValues(SortedList myList)
    {
        Console.WriteLine("        -KEY-   -VALUE-");
        for (int i = 0; i < myList.Count; i++)
        {
            Console.WriteLine("        {0,-6}: {1}",
                myList.GetKey(i), myList.GetByIndex(i));
        }
        Console.WriteLine();
    }
}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

// The following code example creates SortedList instances using different constructors
// and demonstrates the differences in the behavior of the SortedList instances.

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "        -KEY-   -VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "        {0,-6}: {1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Create a SortedList using the default comparer.
   SortedList^ mySL1 = gcnew SortedList;
   Console::WriteLine( "mySL1 (default):" );
   mySL1->Add( "FIRST", "Hello" );
   mySL1->Add( "SECOND", "World" );
   mySL1->Add( "THIRD", "!" );

   try   { mySL1->Add( "first", "Ola!" ); }
   catch ( ArgumentException^ e ) { Console::WriteLine( e ); }

   PrintKeysAndValues( mySL1 );

   // Create a SortedList using the specified case-insensitive comparer.
   SortedList^ mySL2 = gcnew SortedList( gcnew CaseInsensitiveComparer );
   Console::WriteLine( "mySL2 (case-insensitive comparer):" );
   mySL2->Add( "FIRST", "Hello" );
   mySL2->Add( "SECOND", "World" );
   mySL2->Add( "THIRD", "!" );

   try   { mySL2->Add( "first", "Ola!" ); }
   catch ( ArgumentException^ e ) { Console::WriteLine( e ); }

   PrintKeysAndValues( mySL2 );

   // Create a SortedList using the specified KeyComparer.
   // The KeyComparer uses a case-insensitive hash code provider and a case-insensitive comparer,
   // which are based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   SortedList^ mySL3 = gcnew SortedList( gcnew CaseInsensitiveComparer( myCul ) );
   Console::WriteLine( "mySL3 (case-insensitive comparer, Turkish culture):" );
   mySL3->Add( "FIRST", "Hello" );
   mySL3->Add( "SECOND", "World" );
   mySL3->Add( "THIRD", "!" );

   try   { mySL3->Add( "first", "Ola!" ); }
   catch ( ArgumentException^ e ) { Console::WriteLine( e ); }

   PrintKeysAndValues( mySL3 );

   // Create a SortedList using the ComparisonType.InvariantCultureIgnoreCase value.
   SortedList^ mySL4 = gcnew SortedList( StringComparer::InvariantCultureIgnoreCase );
   Console::WriteLine( "mySL4 (InvariantCultureIgnoreCase):" );
   mySL4->Add( "FIRST", "Hello" );
   mySL4->Add( "SECOND", "World" );
   mySL4->Add( "THIRD", "!" );

   try   { mySL4->Add( "first", "Ola!" ); }
   catch ( ArgumentException^ e ) { Console::WriteLine( e ); }

   PrintKeysAndValues( mySL4 );

    Console::WriteLine("\n\nHit ENTER to return");
    Console::ReadLine();
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
SortedList 重载
System.Collections 命名空间
IComparer
IComparable
Capacity

其他资源

在集合中执行不区分区域性的字符串操作


SortedList 构造函数 (IDictionary)

SortedList 构造函数 (IDictionary)
SortedList 类

初始化 SortedList 类的新实例，该实例包含从指定字典复制的元素、具有与所复制的元素数相同的初始容量并根据由每个键实现的 IComparable 接口排序。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    d As IDictionary _
)
public SortedList(
    IDictionary d
)
public:
SortedList(
    IDictionary^ d
)
new :
        d:IDictionary -> SortedList

参数

d
类型： System.Collections IDictionary
要复制到新 SortedList 对象的 IDictionary 实现。
异常 | 条件
ArgumentNullException | d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | d 中的一个或多个元素未实现 IComparable 接口。

每个键均必须实现 IComparable 接口，才能与 SortedList 对象中其他所有键进行比较。根据添加到 SortedList 的每个键的 IComparable 实现对元素进行排序。 每个键均必须实现 IComparable 接口，才能与 SortedList 对象中其他所有键进行比较。根据添加到 SortedList 的每个键的 IComparable 实现对元素进行排序。

Hashtable 对象是可以传递到此构造函数的 IDictionary 实现的一个示例。新 SortedList 对象包含存储在 Hashtable 中的键和值的副本。 Hashtable 对象是可以传递到此构造函数的 IDictionary 实现的一个示例。新 SortedList 对象包含存储在 Hashtable 中的键和值的副本。

SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。 SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 SortedList 对象中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度为 O(n)，其中 n 是 d 中的元素数。

下面的代码示例使用不同的 SortedList 构造函数创建集合，并演示这些集合行为之间的差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Create the dictionary.
        Dim myHT As New Hashtable()
        myHT.Add("FIRST", "Hello")
        myHT.Add("SECOND", "World")
        myHT.Add("THIRD", "!")

        ' Create a SortedList using the default comparer.
        Dim mySL1 As New SortedList(myHT)
        Console.WriteLine("mySL1 (default):")
        Try
            mySL1.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL1)

        ' Create a SortedList using the specified case-insensitive comparer.
        Dim mySL2 As New SortedList(myHT, New CaseInsensitiveComparer())
        Console.WriteLine("mySL2 (case-insensitive comparer):")
        Try
            mySL2.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL2)

        ' Create a SortedList using the specified CaseInsensitiveComparer,
        ' which is based on the Turkish culture (tr-TR), where "I" is not
        ' the uppercase version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim mySL3 As New SortedList(myHT, New CaseInsensitiveComparer(myCul))
        Console.WriteLine("mySL3 (case-insensitive comparer, Turkish culture):")
        Try
            mySL3.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL3)

        ' Create a SortedList using the
        ' StringComparer.InvariantCultureIgnoreCase value.
        Dim mySL4 As New SortedList(myHT, StringComparer.InvariantCultureIgnoreCase)
        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):")
        Try
            mySL4.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL4)

    End Sub 'Main

    Public Shared Sub PrintKeysAndValues(ByVal myList As SortedList)
        Console.WriteLine("        -KEY-   -VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine("        {0,-6}: {1}", _
                myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintKeysAndValues

End Class 'SamplesSortedList

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'mySL1 (default):
'        -KEY-   -VALUE-
'        first : Ola!
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL2 (case-insensitive comparer):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL3 (case-insensitive comparer, Turkish culture):
'        -KEY-   -VALUE-
'        FIRST : Hello
'        first : Ola!
'        SECOND: World
'        THIRD : !
'
'mySL4 (InvariantCultureIgnoreCase):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !

using System;
using System.Collections;
using System.Globalization;

public class SamplesSortedList
{

    public static void Main()
    {

        // Create the dictionary.
        Hashtable myHT = new Hashtable();
        myHT.Add("FIRST", "Hello");
        myHT.Add("SECOND", "World");
        myHT.Add("THIRD", "!");

        // Create a SortedList using the default comparer.
        SortedList mySL1 = new SortedList(myHT);
        Console.WriteLine("mySL1 (default):");
        try
        {
            mySL1.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL1);

        // Create a SortedList using the specified case-insensitive comparer.
        SortedList mySL2 = new SortedList(myHT, new CaseInsensitiveComparer());
        Console.WriteLine("mySL2 (case-insensitive comparer):");
        try
        {
            mySL2.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL2);

        // Create a SortedList using the specified CaseInsensitiveComparer,
        // which is based on the Turkish culture (tr-TR), where "I" is not
        // the uppercase version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        SortedList mySL3 = new SortedList(myHT, new CaseInsensitiveComparer(myCul));
        Console.WriteLine("mySL3 (case-insensitive comparer, Turkish culture):");
        try
        {
            mySL3.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL3);

        // Create a SortedList using the
        // StringComparer.InvariantCultureIgnoreCase value.
        SortedList mySL4 = new SortedList(
            myHT, StringComparer.InvariantCultureIgnoreCase);

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):");
        try
        {
            mySL4.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL4);

    }

    public static void PrintKeysAndValues(SortedList myList)
    {
        Console.WriteLine("        -KEY-   -VALUE-");
        for (int i = 0; i < myList.Count; i++)
        {
            Console.WriteLine("        {0,-6}: {1}",
                myList.GetKey(i), myList.GetByIndex(i));
        }
        Console.WriteLine();
    }
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "        -KEY-   -VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "        {0,-6}: {1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Create the dictionary.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( "FIRST", "Hello" );
   myHT->Add( "SECOND", "World" );
   myHT->Add( "THIRD", "!" );

   // Create a SortedList using the default comparer.
   SortedList^ mySL1 = gcnew SortedList( myHT );
   Console::WriteLine( "mySL1 (default):" );
   try
   {
      mySL1->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL1 );

   // Create a SortedList using the specified case-insensitive comparer.
   SortedList^ mySL2 = gcnew SortedList( myHT,gcnew CaseInsensitiveComparer );
   Console::WriteLine( "mySL2 (case-insensitive comparer):" );
   try
   {
      mySL2->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL2 );

    // Create a SortedList using the specified CaseInsensitiveComparer,
    // which is based on the Turkish culture (tr-TR), where "I" is not
    // the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   SortedList^ mySL3 = gcnew SortedList( myHT, gcnew CaseInsensitiveComparer( myCul ) );
   Console::WriteLine( "mySL3 (case-insensitive comparer, Turkish culture):" );
   try
   {
      mySL3->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL3 );

   // Create a SortedList using the ComparisonType.InvariantCultureIgnoreCase value.
   SortedList^ mySL4 = gcnew SortedList( myHT, StringComparer::InvariantCultureIgnoreCase );
   Console::WriteLine( "mySL4 (InvariantCultureIgnoreCase):" );
   try
   {
      mySL4->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL4 );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
SortedList 重载
System.Collections 命名空间
IDictionary
IComparable
Hashtable
Capacity

其他资源

在集合中执行不区分区域性的字符串操作


SortedList 构造函数 (Int32)

SortedList 构造函数 (Int32)
SortedList 类

初始化 SortedList 类的新实例，该实例为空、具有指定的初始容量并且根据 IComparable 接口（此接口由添加到 SortedList 对象的每个键实现）进行排序。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    initialCapacity As Integer _
)
public SortedList(
    int initialCapacity
)
public:
SortedList(
    int initialCapacity
)
new :
        initialCapacity:int -> SortedList

参数

initialCapacity
类型： System Int32
SortedList 对象可包含的初始元素数。
异常 | 条件
ArgumentOutOfRangeException | initialCapacity 小于零。
OutOfMemoryException | 没有足够的可用内存来创建具有指定 initialCapacity 的 SortedList 对象。

每个键均必须实现 IComparable 接口，才能与 SortedList 对象中其他所有键进行比较。根据添加到 SortedList 的每个键的 IComparable 实现对元素进行排序。 每个键均必须实现 IComparable 接口，才能与 SortedList 对象中其他所有键进行比较。根据添加到 SortedList 的每个键的 IComparable 实现对元素进行排序。

SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。 SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 SortedList 对象中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度为 O(n)，其中 n 是 initialCapacity。

下面的代码示例使用不同的 SortedList 构造函数创建集合，并演示这些集合行为之间的差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Create a SortedList using the default comparer.
        Dim mySL1 As New SortedList( 3 )
        Console.WriteLine("mySL1 (default):")
        mySL1.Add("FIRST", "Hello")
        mySL1.Add("SECOND", "World")
        mySL1.Add("THIRD", "!")
        Try
            mySL1.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL1)

        ' Create a SortedList using the specified case-insensitive comparer.
        Dim mySL2 As New SortedList(New CaseInsensitiveComparer(), 3)
        Console.WriteLine("mySL2 (case-insensitive comparer):")
        mySL2.Add("FIRST", "Hello")
        mySL2.Add("SECOND", "World")
        mySL2.Add("THIRD", "!")
        Try
            mySL2.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL2)

        ' Create a SortedList using the specified CaseInsensitiveComparer,
        ' which is based on the Turkish culture (tr-TR), where "I" is not
        ' the uppercase version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim mySL3 As New SortedList(New CaseInsensitiveComparer(myCul), 3)
        Console.WriteLine("mySL3 (case-insensitive comparer, Turkish culture):")
        mySL3.Add("FIRST", "Hello")
        mySL3.Add("SECOND", "World")
        mySL3.Add("THIRD", "!")
        Try
            mySL3.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL3)

        ' Create a SortedList using the
        ' StringComparer.InvariantCultureIgnoreCase value.
        Dim mySL4 As New SortedList( _
            StringComparer.InvariantCultureIgnoreCase, 3)

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):")
        mySL4.Add("FIRST", "Hello")
        mySL4.Add("SECOND", "World")
        mySL4.Add("THIRD", "!")
        Try
            mySL4.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL4)
    End Sub 'Main

    Public Shared Sub PrintKeysAndValues(ByVal myList As SortedList)
        Console.WriteLine("        -KEY-   -VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine("     {0,-6}: {1}", _
               myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintKeysAndValues

End Class 'SamplesSortedList

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'mySL1 (default):
'        -KEY-   -VALUE-
'        first : Ola!
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL2 (case-insensitive comparer):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL3 (case-insensitive comparer, Turkish culture):
'        -KEY-   -VALUE-
'        FIRST : Hello
'        first : Ola!
'        SECOND: World
'        THIRD : !
'
'mySL4 (InvariantCultureIgnoreCase):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !

using System;
using System.Collections;
using System.Globalization;

public class SamplesSortedList
{

    public static void Main()
    {

        // Create a SortedList using the default comparer.
        SortedList mySL1 = new SortedList( 3 );
        Console.WriteLine("mySL1 (default):");
        mySL1.Add("FIRST", "Hello");
        mySL1.Add("SECOND", "World");
        mySL1.Add("THIRD", "!");
        try
        {
            mySL1.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL1);

        // Create a SortedList using the specified case-insensitive comparer.
        SortedList mySL2 = new SortedList(new CaseInsensitiveComparer(), 3);
        Console.WriteLine("mySL2 (case-insensitive comparer):");
        mySL2.Add("FIRST", "Hello");
        mySL2.Add("SECOND", "World");
        mySL2.Add("THIRD", "!");
        try
        {
            mySL2.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL2);

        // Create a SortedList using the specified CaseInsensitiveComparer,
        // which is based on the Turkish culture (tr-TR), where "I" is not
        // the uppercase version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        SortedList mySL3 =
            new SortedList(new CaseInsensitiveComparer(myCul), 3);

        Console.WriteLine(
            "mySL3 (case-insensitive comparer, Turkish culture):");

        mySL3.Add("FIRST", "Hello");
        mySL3.Add("SECOND", "World");
        mySL3.Add("THIRD", "!");
        try
        {
            mySL3.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL3);

        // Create a SortedList using the
        // StringComparer.InvariantCultureIgnoreCase value.
        SortedList mySL4 = new SortedList(
            StringComparer.InvariantCultureIgnoreCase, 3);

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):");
        mySL4.Add("FIRST", "Hello");
        mySL4.Add("SECOND", "World");
        mySL4.Add("THIRD", "!");
        try
        {
            mySL4.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL4);

    }

    public static void PrintKeysAndValues(SortedList myList)
    {
        Console.WriteLine("        -KEY-   -VALUE-");
        for (int i = 0; i < myList.Count; i++)
        {
            Console.WriteLine("        {0,-6}: {1}",
                myList.GetKey(i), myList.GetByIndex(i));
        }
        Console.WriteLine();
    }
}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

// The following code example creates SortedList instances using different constructors
// and demonstrates the differences in the behavior of the SortedList instances.

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "        Capacity is {0}.", myList->Capacity );
   Console::WriteLine( "        -KEY-   -VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "        {0,-6}: {1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Create a SortedList using the default comparer.
   SortedList^ mySL1 = gcnew SortedList( 3 );
   Console::WriteLine( "mySL1 (default):" );
   mySL1->Add( "FIRST", "Hello" );
   mySL1->Add( "SECOND", "World" );
   mySL1->Add( "THIRD", "!" );
   try
   {
      mySL1->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL1 );

   // Create a SortedList using the specified case-insensitive comparer.
   SortedList^ mySL2 = gcnew SortedList( gcnew CaseInsensitiveComparer,3 );
   Console::WriteLine( "mySL2 (case-insensitive comparer):" );
   mySL2->Add( "FIRST", "Hello" );
   mySL2->Add( "SECOND", "World" );
   mySL2->Add( "THIRD", "!" );
   try
   {
      mySL2->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL2 );

    // Create a SortedList using the specified CaseInsensitiveComparer,
    // which is based on the Turkish culture (tr-TR), where "I" is not
    // the uppercase version of "i".
    CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
    SortedList^ mySL3 = gcnew SortedList(gcnew CaseInsensitiveComparer(myCul), 3);

    Console::WriteLine("mySL3 (case-insensitive comparer, Turkish culture):");

    mySL3->Add("FIRST", "Hello");
    mySL3->Add("SECOND", "World");
    mySL3->Add("THIRD", "!");
    try
    {
        mySL3->Add("first", "Ola!");
    }
    catch (ArgumentException^ e)
    {
        Console::WriteLine(e);
    }
    PrintKeysAndValues(mySL3);

    // Create a SortedList using the
    // StringComparer.InvariantCultureIgnoreCase value.
   SortedList^ mySL4 = gcnew SortedList( StringComparer::InvariantCultureIgnoreCase, 3 );
   Console::WriteLine( "mySL4 (InvariantCultureIgnoreCase):" );
   mySL4->Add( "FIRST", "Hello" );
   mySL4->Add( "SECOND", "World" );
   mySL4->Add( "THIRD", "!" );
   try
   {
      mySL4->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL4 );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

mySL1 (default):
        Capacity is 6.
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        Capacity is 3.
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        Capacity is 6.
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        Capacity is 3.
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
SortedList 重载
System.Collections 命名空间
IComparable
Capacity

其他资源

在集合中执行不区分区域性的字符串操作


SortedList 构造函数 (IComparer, Int32)

SortedList 构造函数 (IComparer, Int32)
SortedList 类

初始化 SortedList 类的新实例，该实例为空、具有指定的初始容量并根据指定的 IComparer 接口排序。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    comparer As IComparer, _
    capacity As Integer _
)
public SortedList(
    IComparer comparer,
    int capacity
)
public:
SortedList(
    IComparer^ comparer,
    int capacity
)
new :
        comparer:IComparer *
        capacity:int -> SortedList

参数

comparer
类型： System.Collections IComparer
IComparer 实现，对键进行比较时使用。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用每一个键的 IComparable 实现。
capacity
类型： System Int32
SortedList 对象可包含的初始元素数。
异常 | 条件
ArgumentOutOfRangeException | capacity 小于零。
OutOfMemoryException | 没有足够的可用内存来创建具有指定 capacity 的 SortedList 对象。

根据指定的 IComparer 实现对元素进行排序。如果 comparer 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则会使用每个键的 IComparable 实现；因此，每个键必须实现 IComparable 接口，以便能够与 SortedList 对象中的其他所有键进行比较。 根据指定的 IComparer 实现对元素进行排序。如果 comparer 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则会使用每个键的 IComparable 实现；因此，每个键必须实现 IComparable 接口，以便能够与 SortedList 对象中的其他所有键进行比较。

SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。 SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 SortedList 对象中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(n)，其中 n 是 capacity。

下面的代码示例使用不同的 SortedList 构造函数创建集合，并演示这些集合行为之间的差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Create a SortedList using the default comparer.
        Dim mySL1 As New SortedList( 3 )
        Console.WriteLine("mySL1 (default):")
        mySL1.Add("FIRST", "Hello")
        mySL1.Add("SECOND", "World")
        mySL1.Add("THIRD", "!")
        Try
            mySL1.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL1)

        ' Create a SortedList using the specified case-insensitive comparer.
        Dim mySL2 As New SortedList(New CaseInsensitiveComparer(), 3)
        Console.WriteLine("mySL2 (case-insensitive comparer):")
        mySL2.Add("FIRST", "Hello")
        mySL2.Add("SECOND", "World")
        mySL2.Add("THIRD", "!")
        Try
            mySL2.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL2)

        ' Create a SortedList using the specified CaseInsensitiveComparer,
        ' which is based on the Turkish culture (tr-TR), where "I" is not
        ' the uppercase version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim mySL3 As New SortedList(New CaseInsensitiveComparer(myCul), 3)
        Console.WriteLine("mySL3 (case-insensitive comparer, Turkish culture):")
        mySL3.Add("FIRST", "Hello")
        mySL3.Add("SECOND", "World")
        mySL3.Add("THIRD", "!")
        Try
            mySL3.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL3)

        ' Create a SortedList using the
        ' StringComparer.InvariantCultureIgnoreCase value.
        Dim mySL4 As New SortedList( _
            StringComparer.InvariantCultureIgnoreCase, 3)

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):")
        mySL4.Add("FIRST", "Hello")
        mySL4.Add("SECOND", "World")
        mySL4.Add("THIRD", "!")
        Try
            mySL4.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL4)
    End Sub 'Main

    Public Shared Sub PrintKeysAndValues(ByVal myList As SortedList)
        Console.WriteLine("        -KEY-   -VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine("     {0,-6}: {1}", _
               myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintKeysAndValues

End Class 'SamplesSortedList

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'mySL1 (default):
'        -KEY-   -VALUE-
'        first : Ola!
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL2 (case-insensitive comparer):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL3 (case-insensitive comparer, Turkish culture):
'        -KEY-   -VALUE-
'        FIRST : Hello
'        first : Ola!
'        SECOND: World
'        THIRD : !
'
'mySL4 (InvariantCultureIgnoreCase):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !

using System;
using System.Collections;
using System.Globalization;

public class SamplesSortedList
{

    public static void Main()
    {

        // Create a SortedList using the default comparer.
        SortedList mySL1 = new SortedList( 3 );
        Console.WriteLine("mySL1 (default):");
        mySL1.Add("FIRST", "Hello");
        mySL1.Add("SECOND", "World");
        mySL1.Add("THIRD", "!");
        try
        {
            mySL1.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL1);

        // Create a SortedList using the specified case-insensitive comparer.
        SortedList mySL2 = new SortedList(new CaseInsensitiveComparer(), 3);
        Console.WriteLine("mySL2 (case-insensitive comparer):");
        mySL2.Add("FIRST", "Hello");
        mySL2.Add("SECOND", "World");
        mySL2.Add("THIRD", "!");
        try
        {
            mySL2.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL2);

        // Create a SortedList using the specified CaseInsensitiveComparer,
        // which is based on the Turkish culture (tr-TR), where "I" is not
        // the uppercase version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        SortedList mySL3 =
            new SortedList(new CaseInsensitiveComparer(myCul), 3);

        Console.WriteLine(
            "mySL3 (case-insensitive comparer, Turkish culture):");

        mySL3.Add("FIRST", "Hello");
        mySL3.Add("SECOND", "World");
        mySL3.Add("THIRD", "!");
        try
        {
            mySL3.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL3);

        // Create a SortedList using the
        // StringComparer.InvariantCultureIgnoreCase value.
        SortedList mySL4 = new SortedList(
            StringComparer.InvariantCultureIgnoreCase, 3);

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):");
        mySL4.Add("FIRST", "Hello");
        mySL4.Add("SECOND", "World");
        mySL4.Add("THIRD", "!");
        try
        {
            mySL4.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL4);

    }

    public static void PrintKeysAndValues(SortedList myList)
    {
        Console.WriteLine("        -KEY-   -VALUE-");
        for (int i = 0; i < myList.Count; i++)
        {
            Console.WriteLine("        {0,-6}: {1}",
                myList.GetKey(i), myList.GetByIndex(i));
        }
        Console.WriteLine();
    }
}

/*
This code produces the following output.
Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

// The following code example creates SortedList instances using different constructors
// and demonstrates the differences in the behavior of the SortedList instances.

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "        Capacity is {0}.", myList->Capacity );
   Console::WriteLine( "        -KEY-   -VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "        {0,-6}: {1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Create a SortedList using the default comparer.
   SortedList^ mySL1 = gcnew SortedList( 3 );
   Console::WriteLine( "mySL1 (default):" );
   mySL1->Add( "FIRST", "Hello" );
   mySL1->Add( "SECOND", "World" );
   mySL1->Add( "THIRD", "!" );
   try
   {
      mySL1->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL1 );

   // Create a SortedList using the specified case-insensitive comparer.
   SortedList^ mySL2 = gcnew SortedList( gcnew CaseInsensitiveComparer,3 );
   Console::WriteLine( "mySL2 (case-insensitive comparer):" );
   mySL2->Add( "FIRST", "Hello" );
   mySL2->Add( "SECOND", "World" );
   mySL2->Add( "THIRD", "!" );
   try
   {
      mySL2->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL2 );

    // Create a SortedList using the specified CaseInsensitiveComparer,
    // which is based on the Turkish culture (tr-TR), where "I" is not
    // the uppercase version of "i".
    CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
    SortedList^ mySL3 = gcnew SortedList(gcnew CaseInsensitiveComparer(myCul), 3);

    Console::WriteLine("mySL3 (case-insensitive comparer, Turkish culture):");

    mySL3->Add("FIRST", "Hello");
    mySL3->Add("SECOND", "World");
    mySL3->Add("THIRD", "!");
    try
    {
        mySL3->Add("first", "Ola!");
    }
    catch (ArgumentException^ e)
    {
        Console::WriteLine(e);
    }
    PrintKeysAndValues(mySL3);

    // Create a SortedList using the
    // StringComparer.InvariantCultureIgnoreCase value.
   SortedList^ mySL4 = gcnew SortedList( StringComparer::InvariantCultureIgnoreCase, 3 );
   Console::WriteLine( "mySL4 (InvariantCultureIgnoreCase):" );
   mySL4->Add( "FIRST", "Hello" );
   mySL4->Add( "SECOND", "World" );
   mySL4->Add( "THIRD", "!" );
   try
   {
      mySL4->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL4 );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

mySL1 (default):
        Capacity is 6.
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        Capacity is 3.
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        Capacity is 6.
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        Capacity is 3.
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
SortedList 重载
System.Collections 命名空间
IComparer
IComparable
Capacity

其他资源

在集合中执行不区分区域性的字符串操作


SortedList 构造函数 (IDictionary, IComparer)

SortedList 构造函数 (IDictionary, IComparer)
SortedList 类

初始化 SortedList 类的新实例，该实例包含从指定字典复制的元素、具有与所复制的元素数相同的初始容量并根据指定的 IComparer 接口排序。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    d As IDictionary, _
    comparer As IComparer _
)
public SortedList(
    IDictionary d,
    IComparer comparer
)
public:
SortedList(
    IDictionary^ d,
    IComparer^ comparer
)
new :
        d:IDictionary *
        comparer:IComparer -> SortedList

参数

d
类型： System.Collections IDictionary
要复制到新 SortedList 对象的 IDictionary 实现。
comparer
类型： System.Collections IComparer
IComparer 实现，对键进行比较时使用。
- 或 -
nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），使用每一个键的 IComparable 实现。
异常 | 条件
ArgumentNullException | d 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | comparer 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），d 中的一个或多个元素不实现 IComparable 接口。

根据指定的 IComparer 实现对元素进行排序。如果 comparer 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则会使用每个键的 IComparable 实现；因此，每个键必须实现 IComparable 接口，以便能够与 SortedList 对象中的其他所有键进行比较。 根据指定的 IComparer 实现对元素进行排序。如果 comparer 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则会使用每个键的 IComparable 实现；因此，每个键必须实现 IComparable 接口，以便能够与 SortedList 对象中的其他所有键进行比较。

Hashtable 对象是可以传递到此构造函数的 IDictionary 实现的一个示例。新 SortedList 对象包含存储在 Hashtable 中的键和值的副本。 Hashtable 对象是可以传递到此构造函数的 IDictionary 实现的一个示例。新 SortedList 对象包含存储在 Hashtable 中的键和值的副本。

SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。 SortedList 对象的容量是 SortedList 可以保存的元素的数量。当向 SortedList 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 SortedList 对象中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度为 O(n)，其中 n 是 d 中的元素数。

下面的代码示例使用不同的 SortedList 构造函数创建集合，并演示这些集合行为之间的差异。

Imports System
Imports System.Collections
Imports System.Globalization

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Create the dictionary.
        Dim myHT As New Hashtable()
        myHT.Add("FIRST", "Hello")
        myHT.Add("SECOND", "World")
        myHT.Add("THIRD", "!")

        ' Create a SortedList using the default comparer.
        Dim mySL1 As New SortedList(myHT)
        Console.WriteLine("mySL1 (default):")
        Try
            mySL1.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL1)

        ' Create a SortedList using the specified case-insensitive comparer.
        Dim mySL2 As New SortedList(myHT, New CaseInsensitiveComparer())
        Console.WriteLine("mySL2 (case-insensitive comparer):")
        Try
            mySL2.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL2)

        ' Create a SortedList using the specified CaseInsensitiveComparer,
        ' which is based on the Turkish culture (tr-TR), where "I" is not
        ' the uppercase version of "i".
        Dim myCul As New CultureInfo("tr-TR")
        Dim mySL3 As New SortedList(myHT, New CaseInsensitiveComparer(myCul))
        Console.WriteLine("mySL3 (case-insensitive comparer, Turkish culture):")
        Try
            mySL3.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL3)

        ' Create a SortedList using the
        ' StringComparer.InvariantCultureIgnoreCase value.
        Dim mySL4 As New SortedList(myHT, StringComparer.InvariantCultureIgnoreCase)
        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):")
        Try
            mySL4.Add("first", "Ola!")
        Catch e As ArgumentException
            Console.WriteLine(e)
        End Try
        PrintKeysAndValues(mySL4)

    End Sub 'Main

    Public Shared Sub PrintKeysAndValues(ByVal myList As SortedList)
        Console.WriteLine("        -KEY-   -VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine("        {0,-6}: {1}", _
                myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub 'PrintKeysAndValues

End Class 'SamplesSortedList

'This code produces the following output.  Results vary depending on the system's culture settings.
'
'mySL1 (default):
'        -KEY-   -VALUE-
'        first : Ola!
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL2 (case-insensitive comparer):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !
'
'mySL3 (case-insensitive comparer, Turkish culture):
'        -KEY-   -VALUE-
'        FIRST : Hello
'        first : Ola!
'        SECOND: World
'        THIRD : !
'
'mySL4 (InvariantCultureIgnoreCase):
'System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first''   at System.Collections.SortedList.Add(Object key, Object value)
'   at SamplesSortedList.Main()
'        -KEY-   -VALUE-
'        FIRST : Hello
'        SECOND: World
'        THIRD : !

using System;
using System.Collections;
using System.Globalization;

public class SamplesSortedList
{

    public static void Main()
    {

        // Create the dictionary.
        Hashtable myHT = new Hashtable();
        myHT.Add("FIRST", "Hello");
        myHT.Add("SECOND", "World");
        myHT.Add("THIRD", "!");

        // Create a SortedList using the default comparer.
        SortedList mySL1 = new SortedList(myHT);
        Console.WriteLine("mySL1 (default):");
        try
        {
            mySL1.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL1);

        // Create a SortedList using the specified case-insensitive comparer.
        SortedList mySL2 = new SortedList(myHT, new CaseInsensitiveComparer());
        Console.WriteLine("mySL2 (case-insensitive comparer):");
        try
        {
            mySL2.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL2);

        // Create a SortedList using the specified CaseInsensitiveComparer,
        // which is based on the Turkish culture (tr-TR), where "I" is not
        // the uppercase version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        SortedList mySL3 = new SortedList(myHT, new CaseInsensitiveComparer(myCul));
        Console.WriteLine("mySL3 (case-insensitive comparer, Turkish culture):");
        try
        {
            mySL3.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL3);

        // Create a SortedList using the
        // StringComparer.InvariantCultureIgnoreCase value.
        SortedList mySL4 = new SortedList(
            myHT, StringComparer.InvariantCultureIgnoreCase);

        Console.WriteLine("mySL4 (InvariantCultureIgnoreCase):");
        try
        {
            mySL4.Add("first", "Ola!");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e);
        }
        PrintKeysAndValues(mySL4);

    }

    public static void PrintKeysAndValues(SortedList myList)
    {
        Console.WriteLine("        -KEY-   -VALUE-");
        for (int i = 0; i < myList.Count; i++)
        {
            Console.WriteLine("        {0,-6}: {1}",
                myList.GetKey(i), myList.GetByIndex(i));
        }
        Console.WriteLine();
    }
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "        -KEY-   -VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "        {0,-6}: {1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Create the dictionary.
   Hashtable^ myHT = gcnew Hashtable;
   myHT->Add( "FIRST", "Hello" );
   myHT->Add( "SECOND", "World" );
   myHT->Add( "THIRD", "!" );

   // Create a SortedList using the default comparer.
   SortedList^ mySL1 = gcnew SortedList( myHT );
   Console::WriteLine( "mySL1 (default):" );
   try
   {
      mySL1->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL1 );

   // Create a SortedList using the specified case-insensitive comparer.
   SortedList^ mySL2 = gcnew SortedList( myHT,gcnew CaseInsensitiveComparer );
   Console::WriteLine( "mySL2 (case-insensitive comparer):" );
   try
   {
      mySL2->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL2 );

    // Create a SortedList using the specified CaseInsensitiveComparer,
    // which is based on the Turkish culture (tr-TR), where "I" is not
    // the uppercase version of "i".
   CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
   SortedList^ mySL3 = gcnew SortedList( myHT, gcnew CaseInsensitiveComparer( myCul ) );
   Console::WriteLine( "mySL3 (case-insensitive comparer, Turkish culture):" );
   try
   {
      mySL3->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL3 );

   // Create a SortedList using the ComparisonType.InvariantCultureIgnoreCase value.
   SortedList^ mySL4 = gcnew SortedList( myHT, StringComparer::InvariantCultureIgnoreCase );
   Console::WriteLine( "mySL4 (InvariantCultureIgnoreCase):" );
   try
   {
      mySL4->Add( "first", "Ola!" );
   }
   catch ( ArgumentException^ e )
   {
      Console::WriteLine( e );
   }

   PrintKeysAndValues( mySL4 );
}

/*
This code produces the following output.  Results vary depending on the system's culture settings.

mySL1 (default):
        -KEY-   -VALUE-
        first : Ola!
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL2 (case-insensitive comparer):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

mySL3 (case-insensitive comparer, Turkish culture):
        -KEY-   -VALUE-
        FIRST : Hello
        first : Ola!
        SECOND: World
        THIRD : !

mySL4 (InvariantCultureIgnoreCase):
System.ArgumentException: Item has already been added.  Key in dictionary: 'FIRST'  Key being added: 'first'
   at System.Collections.SortedList.Add(Object key, Object value)
   at SamplesSortedList.Main()
        -KEY-   -VALUE-
        FIRST : Hello
        SECOND: World
        THIRD : !

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
SortedList 重载
System.Collections 命名空间
IDictionary
IComparer
IComparable
Hashtable
Capacity

其他资源

在集合中执行不区分区域性的字符串操作


SortedList 方法

SortedList 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SortedList 类

SortedList 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SortedList 类
System.Collections 命名空间


SortedList ..::.Add 方法

SortedList
.
.
::
.
Add 方法
SortedList 类

将带有指定键和值的元素添加到 SortedList 对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Add ( _
    key As Object, _
    value As Object _
)
public virtual void Add(
    Object key,
    Object value
)
public:
virtual void Add(
    Object^ key,
    Object^ value
)
abstract Add :
        key:Object *
        value:Object -> unit
override Add :
        key:Object *
        value:Object -> unit

参数

key
类型： System Object
要添加的元素的键。
value
类型： System Object
要添加的元素的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要添加的元素的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 带有指定 key 的元素已经存在于 SortedList 对象中。 - 或 - SortedList 设置为使用 IComparable 接口，并且 key 不实现 IComparable 接口。
NotSupportedException | SortedList 是只读的。 - 或 - SortedList 具有固定大小。
OutOfMemoryException | 没有足够的可用内存来将元素添加到 SortedList。
InvalidOperationException | 比较器引发异常。

插入点是根据选择（创建 SortedList 对象时显式选择或默认选择）的比较器确定的。

如果 Count 已经等于 Capacity，则在添加新元素之前，会通过自动重新分配内部数组并将现有元素复制到新数组中，来增大 SortedList 对象的容量。

通过设置 SortedList 对象中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue），还可以使用 Item 属性添加新元素。但是，如果指定的键已经存在于 SortedList 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 通过设置 SortedList 对象中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue），还可以使用 Item 属性添加新元素。但是，如果指定的键已经存在于 SortedList 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 通过设置 SortedList 对象中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue），还可以使用 Item 属性添加新元素。但是，如果指定的键已经存在于 SortedList 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。

SortedList 对象的元素将由键按照特定的 IComparer 实现（在创建 SortedList 时指定），或按照键本身提供的 IComparable 实现进行排序。

键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。

对于未排序的数据，此方法的运算复杂度为 O(n)，其中 n 是 Count。如果在列表末尾添加了新元素，则此方法的运算复杂度为 O(log n)。如果插入操作导致大小调整，则运算复杂度为 O(n)。 对于未排序的数据，此方法的运算复杂度为 O(n)，其中 n 是 Count。如果在列表末尾添加了新元素，则此方法的运算复杂度为 O(log n)。如果插入操作导致大小调整，则运算复杂度为 O(n)。 对于未排序的数据，此方法的运算复杂度为 O(n)，其中 n 是 Count。如果在列表末尾添加了新元素，则此方法的运算复杂度为 O(log n)。如果插入操作导致大小调整，则运算复杂度为 O(n)。

下面的代码示例演示如何将元素添加到 SortedList 对象中。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add("one", "The")
        mySL.Add("two", "quick")
        mySL.Add("three", "brown")
        mySL.Add("four", "fox")

        ' Displays the SortedList.
        Console.WriteLine("The SortedList contains the following:")
        PrintKeysAndValues(mySL)
    End Sub

    Public Shared Sub PrintKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}:" & ControlChars.Tab & _
               "{1}", myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The SortedList contains the following:
'     -KEY-    -VALUE-
'     four:    fox
'     one:    The
'     three:    brown
'     two:    quick

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( "one", "The" );
      mySL.Add( "two", "quick" );
      mySL.Add( "three", "brown" );
      mySL.Add( "four", "fox" );

      // Displays the SortedList.
      Console.WriteLine( "The SortedList contains the following:" );
      PrintKeysAndValues( mySL );
   }

   public static void PrintKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t{0}:\t{1}", myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The SortedList contains the following:
    -KEY-    -VALUE-
    four:    fox
    one:    The
    three:    brown
    two:    quick
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine(  "\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine(  "\t{0}:\t{1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( "one", "The" );
   mySL->Add( "two", "quick" );
   mySL->Add( "three", "brown" );
   mySL->Add( "four", "fox" );

   // Displays the SortedList.
   Console::WriteLine(  "The SortedList contains the following:" );
   PrintKeysAndValues( mySL );
}

/*
This code produces the following output.

The SortedList contains the following:
        -KEY-   -VALUE-
        four:   fox
        one:    The
        three:  brown
        two:    quick
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
Item
IComparer
IComparable
Capacity


SortedList ..::.Clear 方法

SortedList
.
.
::
.
Clear 方法
SortedList 类

从 SortedList 对象中移除所有元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Clear
public virtual void Clear()
public:
virtual void Clear()
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

异常 | 条件
NotSupportedException | SortedList 对象是只读的。 - 或 - SortedList 具有固定大小。

Count 被设置为零，并且对该集合元素的其他对象的引用也被释放。

Capacity 保持不变。若要重置 SortedList 对象的容量，请调用 TrimToSize 或直接设置 Capacity 属性。调整空 SortedList 会将 SortedList 的容量设置为默认容量。 Capacity 保持不变。若要重置 SortedList 对象的容量，请调用 TrimToSize 或直接设置 Capacity 属性。调整空 SortedList 会将 SortedList 的容量设置为默认容量。 Capacity 保持不变。若要重置 SortedList 对象的容量，请调用 TrimToSize 或直接设置 Capacity 属性。调整空 SortedList 会将 SortedList 的容量设置为默认容量。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何裁减 SortedList 对象中未使用的部分以及如何清除 SortedList 的值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add("one", "The")
        mySL.Add("two", "quick")
        mySL.Add("three", "brown")
        mySL.Add("four", "fox")
        mySL.Add("five", "jumped")

        ' Displays the count, capacity and values of the SortedList.
        Console.WriteLine("Initially,")
        Console.WriteLine("   Count    : {0}", mySL.Count)
        Console.WriteLine("   Capacity : {0}", mySL.Capacity)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(mySL)

        ' Trims the SortedList.
        mySL.TrimToSize()

        ' Displays the count, capacity and values of the SortedList.
        Console.WriteLine("After TrimToSize,")
        Console.WriteLine("   Count    : {0}", mySL.Count)
        Console.WriteLine("   Capacity : {0}", mySL.Capacity)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(mySL)

        ' Clears the SortedList.
        mySL.Clear()

        ' Displays the count, capacity and values of the SortedList.
        Console.WriteLine("After Clear,")
        Console.WriteLine("   Count    : {0}", mySL.Count)
        Console.WriteLine("   Capacity : {0}", mySL.Capacity)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(mySL)

        ' Trims the SortedList again.
        mySL.TrimToSize()

        ' Displays the count, capacity and values of the SortedList.
        Console.WriteLine("After the second TrimToSize,")
        Console.WriteLine("   Count    : {0}", mySL.Count)
        Console.WriteLine("   Capacity : {0}", mySL.Capacity)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(mySL)
    End Sub

    Public Shared Sub PrintKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}:" & ControlChars.Tab & _
               "{1}", myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' Initially,
'    Count    : 5
'    Capacity : 16
'    Values:
'     -KEY-    -VALUE-
'     five:    jumped
'     four:    fox
'     one:    The
'     three:    brown
'     two:    quick
'
' After TrimToSize,
'    Count    : 5
'    Capacity : 5
'    Values:
'     -KEY-    -VALUE-
'     five:    jumped
'     four:    fox
'     one:    The
'     three:    brown
'     two:    quick
'
' After Clear,
'    Count    : 0
'    Capacity : 16
'    Values:
'     -KEY-    -VALUE-
'
'
' After the second TrimToSize,
'    Count    : 0
'    Capacity : 16
'    Values:
'     -KEY-    -VALUE-

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( "one", "The" );
      mySL.Add( "two", "quick" );
      mySL.Add( "three", "brown" );
      mySL.Add( "four", "fox" );
      mySL.Add( "five", "jumped" );

      // Displays the count, capacity and values of the SortedList.
      Console.WriteLine( "Initially," );
      Console.WriteLine( "   Count    : {0}", mySL.Count );
      Console.WriteLine( "   Capacity : {0}", mySL.Capacity );
      Console.WriteLine( "   Values:" );
      PrintKeysAndValues( mySL );

      // Trims the SortedList.
      mySL.TrimToSize();

      // Displays the count, capacity and values of the SortedList.
      Console.WriteLine( "After TrimToSize," );
      Console.WriteLine( "   Count    : {0}", mySL.Count );
      Console.WriteLine( "   Capacity : {0}", mySL.Capacity );
      Console.WriteLine( "   Values:" );
      PrintKeysAndValues( mySL );

      // Clears the SortedList.
      mySL.Clear();

      // Displays the count, capacity and values of the SortedList.
      Console.WriteLine( "After Clear," );
      Console.WriteLine( "   Count    : {0}", mySL.Count );
      Console.WriteLine( "   Capacity : {0}", mySL.Capacity );
      Console.WriteLine( "   Values:" );
      PrintKeysAndValues( mySL );

      // Trims the SortedList again.
      mySL.TrimToSize();

      // Displays the count, capacity and values of the SortedList.
      Console.WriteLine( "After the second TrimToSize," );
      Console.WriteLine( "   Count    : {0}", mySL.Count );
      Console.WriteLine( "   Capacity : {0}", mySL.Capacity );
      Console.WriteLine( "   Values:" );
      PrintKeysAndValues( mySL );
   }

   public static void PrintKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t{0}:\t{1}", myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

Initially,
   Count    : 5
   Capacity : 16
   Values:
    -KEY-    -VALUE-
    five:    jumped
    four:    fox
    one:    The
    three:    brown
    two:    quick

After TrimToSize,
   Count    : 5
   Capacity : 5
   Values:
    -KEY-    -VALUE-
    five:    jumped
    four:    fox
    one:    The
    three:    brown
    two:    quick

After Clear,
   Count    : 0
   Capacity : 16
   Values:
    -KEY-    -VALUE-

After the second TrimToSize,
   Count    : 0
   Capacity : 16
   Values:
    -KEY-    -VALUE-
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine(  "\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine(  "\t{0}:\t{1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( "one", "The" );
   mySL->Add( "two", "quick" );
   mySL->Add( "three", "brown" );
   mySL->Add( "four", "fox" );
   mySL->Add( "five", "jumped" );

   // Displays the count, capacity and values of the SortedList.
   Console::WriteLine(  "Initially," );
   Console::WriteLine(  "   Count    : {0}", mySL->Count );
   Console::WriteLine(  "   Capacity : {0}", mySL->Capacity );
   Console::WriteLine(  "   Values:" );
   PrintKeysAndValues( mySL );

   // Trims the SortedList.
   mySL->TrimToSize();

   // Displays the count, capacity and values of the SortedList.
   Console::WriteLine(  "After TrimToSize," );
   Console::WriteLine(  "   Count    : {0}", mySL->Count );
   Console::WriteLine(  "   Capacity : {0}", mySL->Capacity );
   Console::WriteLine(  "   Values:" );
   PrintKeysAndValues( mySL );

   // Clears the SortedList.
   mySL->Clear();

   // Displays the count, capacity and values of the SortedList.
   Console::WriteLine(  "After Clear," );
   Console::WriteLine(  "   Count    : {0}", mySL->Count );
   Console::WriteLine(  "   Capacity : {0}", mySL->Capacity );
   Console::WriteLine(  "   Values:" );
   PrintKeysAndValues( mySL );

   // Trims the SortedList again.
   mySL->TrimToSize();

   // Displays the count, capacity and values of the SortedList.
   Console::WriteLine(  "After the second TrimToSize," );
   Console::WriteLine(  "   Count    : {0}", mySL->Count );
   Console::WriteLine(  "   Capacity : {0}", mySL->Capacity );
   Console::WriteLine(  "   Values:" );
   PrintKeysAndValues( mySL );
}

/*
This code produces the following output.

Initially,
   Count    : 5
   Capacity : 16
   Values:
        -KEY-   -VALUE-
        five:   jumped
        four:   fox
        one:    The
        three:  brown
        two:    quick

After TrimToSize,
   Count    : 5
   Capacity : 5
   Values:
        -KEY-   -VALUE-
        five:   jumped
        four:   fox
        one:    The
        three:  brown
        two:    quick

After Clear,
   Count    : 0
   Capacity : 16
   Values:
        -KEY-   -VALUE-

After the second TrimToSize,
   Count    : 0
   Capacity : 16
   Values:
        -KEY-   -VALUE-

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
TrimToSize
Capacity
Count


SortedList ..::.Clone 方法

SortedList
.
.
::
.
Clone 方法
SortedList 类

创建 SortedList 对象的浅表副本。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Clone As Object
public virtual Object Clone()
public:
virtual Object^ Clone()
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
SortedList 对象的浅表副本。

实现

集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。 集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。

与之相对，集合的深层副本将复制这些元素以及由它们直接或间接引用的所有内容。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
CopyTo


SortedList ..::.Contains 方法

SortedList
.
.
::
.
Contains 方法
SortedList 类

确定 SortedList 对象是否包含特定键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Contains ( _
    key As Object _
) As Boolean
public virtual bool Contains(
    Object key
)
public:
virtual bool Contains(
    Object^ key
)
abstract Contains :
        key:Object -> bool
override Contains :
        key:Object -> bool

参数

key
类型： System Object
要在 SortedList 对象中定位的键。

返回值

类型： System Boolean
如果 SortedList 对象包含带有指定 key 的元素，则为 true；否则为 false。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 比较器引发异常。

SortedList 对象的元素将由键按照特定的 IComparer 实现（在创建 SortedList 时指定），或按照键本身提供的 IComparable 实现进行排序。

Contains 实现 IDictionary..::.Contains。其表现与 ContainsKey 完全一样。 Contains 实现 IDictionary..::.Contains。其表现与 ContainsKey 完全一样。

此方法使用二进制搜索算法；因此，此方法的运算复杂度为 O(log n)，其中 n 是 Count。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例演示如何确定 SortedList 对象是否包含特定的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(2, "two")
        mySL.Add(4, "four")
        mySL.Add(1, "one")
        mySL.Add(3, "three")
        mySL.Add(0, "zero")

        ' Displays the values of the SortedList.
        Console.WriteLine("The SortedList contains the following values:")
        PrintIndexAndKeysAndValues(mySL)

        ' Searches for a specific key.
        Dim myKey As Integer = 2
        Dim msg As String
        If mySL.ContainsKey(myKey) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The key ""{0}"" is {1}.", myKey, msg)
        myKey = 6
        If mySL.ContainsKey(myKey) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The key ""{0}"" is {1}.", myKey, msg)
        ' Searches for a specific value.
        Dim myValue As String = "three"
        If mySL.ContainsValue(myValue) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The value ""{0}"" is {1}.", myValue, msg)
        myValue = "nine"
        If mySL.ContainsValue(myValue) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The value ""{0}"" is {1}.", myValue, msg)
    End Sub

    Public Shared Sub PrintIndexAndKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-INDEX-" & ControlChars.Tab & _
           "-KEY-" & ControlChars.Tab & "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "[{0}]:" & ControlChars.Tab & _
               "{1}" & ControlChars.Tab & "{2}", i, myList.GetKey(i), _
               myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The SortedList contains the following values:
'     -INDEX-    -KEY-    -VALUE-
'     [0]:    0    zero
'     [1]:    1    one
'     [2]:    2    two
'     [3]:    3    three
'     [4]:    4    four
'
' The key "2" is in the SortedList.
' The key "6" is NOT in the SortedList.
' The value "three" is in the SortedList.
' The value "nine" is NOT in the SortedList.

using System;
using System.Collections;

public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 2, "two" );
      mySL.Add( 4, "four" );
      mySL.Add( 1, "one" );
      mySL.Add( 3, "three" );
      mySL.Add( 0, "zero" );

      // Displays the values of the SortedList.
      Console.WriteLine( "The SortedList contains the following values:" );
      PrintIndexAndKeysAndValues( mySL );

      // Searches for a specific key.
      int myKey = 2;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, mySL.ContainsKey( myKey ) ? "in the SortedList" : "NOT in the SortedList" );
      myKey = 6;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, mySL.ContainsKey( myKey ) ? "in the SortedList" : "NOT in the SortedList" );

      // Searches for a specific value.
      String myValue = "three";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, mySL.ContainsValue( myValue ) ? "in the SortedList" : "NOT in the SortedList" );
      myValue = "nine";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, mySL.ContainsValue( myValue ) ? "in the SortedList" : "NOT in the SortedList" );
   }

   public static void PrintIndexAndKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t[{0}]:\t{1}\t{2}", i, myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The SortedList contains the following values:
    -INDEX-    -KEY-    -VALUE-
    [0]:    0    zero
    [1]:    1    one
    [2]:    2    two
    [3]:    3    three
    [4]:    4    four

The key "2" is in the SortedList.
The key "6" is NOT in the SortedList.
The value "three" is in the SortedList.
The value "nine" is NOT in the SortedList.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintIndexAndKeysAndValues( SortedList^ myList )
{
   Console::WriteLine(  "\t-INDEX-\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine(  "\t[{0}]:\t{1}\t{2}", i, myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 2, "two" );
   mySL->Add( 4, "four" );
   mySL->Add( 1, "one" );
   mySL->Add( 3, "three" );
   mySL->Add( (int^)0, "zero" );

   // Displays the values of the SortedList.
   Console::WriteLine(  "The SortedList contains the following values:" );
   PrintIndexAndKeysAndValues( mySL );

   // Searches for a specific key.
   int myKey = 2;
   Console::WriteLine(  "The key \"{0}\" is {1}.", myKey, mySL->ContainsKey( myKey ) ? (String^)"in the SortedList" : "NOT in the SortedList" );
   myKey = 6;
   Console::WriteLine(  "The key \"{0}\" is {1}.", myKey, mySL->ContainsKey( myKey ) ? (String^)"in the SortedList" : "NOT in the SortedList" );

   // Searches for a specific value.
   String^ myValue = "three";
   Console::WriteLine(  "The value \"{0}\" is {1}.", myValue, mySL->ContainsValue( myValue ) ? (String^)"in the SortedList" : "NOT in the SortedList" );
   myValue =  "nine";
   Console::WriteLine(  "The value \"{0}\" is {1}.", myValue, mySL->ContainsValue( myValue ) ? (String^)"in the SortedList" : "NOT in the SortedList" );
}

/*
This code produces the following output.

The SortedList contains the following values:
        -INDEX- -KEY-   -VALUE-
        [0]:    0       zero
        [1]:    1       one
        [2]:    2       two
        [3]:    3       three
        [4]:    4       four

The key "2" is in the SortedList.
The key "6" is NOT in the SortedList.
The value "three" is in the SortedList.
The value "nine" is NOT in the SortedList.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
ContainsKey
IndexOfKey

其他资源

在集合中执行不区分区域性的字符串操作


SortedList ..::.ContainsKey 方法

SortedList
.
.
::
.
ContainsKey 方法
SortedList 类

确定 SortedList 对象是否包含特定键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ContainsKey ( _
    key As Object _
) As Boolean
public virtual bool ContainsKey(
    Object key
)
public:
virtual bool ContainsKey(
    Object^ key
)
abstract ContainsKey :
        key:Object -> bool
override ContainsKey :
        key:Object -> bool

参数

key
类型： System Object
要在 SortedList 对象中定位的键。

返回值

类型： System Boolean
如果 SortedList 对象包含带有指定 key 的元素，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 比较器引发异常。

SortedList 对象的元素将由键按照特定的 IComparer 实现（在创建 SortedList 时指定），或按照键本身提供的 IComparable 实现进行排序。

此方法的行为与 Contains 方法完全一样。

此方法使用二进制搜索算法；因此，此方法的运算复杂度为 O(log n)，其中 n 是 Count。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例演示如何确定 SortedList 对象是否包含特定的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(2, "two")
        mySL.Add(4, "four")
        mySL.Add(1, "one")
        mySL.Add(3, "three")
        mySL.Add(0, "zero")

        ' Displays the values of the SortedList.
        Console.WriteLine("The SortedList contains the following values:")
        PrintIndexAndKeysAndValues(mySL)

        ' Searches for a specific key.
        Dim myKey As Integer = 2
        Dim msg As String
        If mySL.ContainsKey(myKey) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The key ""{0}"" is {1}.", myKey, msg)
        myKey = 6
        If mySL.ContainsKey(myKey) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The key ""{0}"" is {1}.", myKey, msg)
        ' Searches for a specific value.
        Dim myValue As String = "three"
        If mySL.ContainsValue(myValue) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The value ""{0}"" is {1}.", myValue, msg)
        myValue = "nine"
        If mySL.ContainsValue(myValue) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The value ""{0}"" is {1}.", myValue, msg)
    End Sub

    Public Shared Sub PrintIndexAndKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-INDEX-" & ControlChars.Tab & _
           "-KEY-" & ControlChars.Tab & "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "[{0}]:" & ControlChars.Tab & _
               "{1}" & ControlChars.Tab & "{2}", i, myList.GetKey(i), _
               myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The SortedList contains the following values:
'     -INDEX-    -KEY-    -VALUE-
'     [0]:    0    zero
'     [1]:    1    one
'     [2]:    2    two
'     [3]:    3    three
'     [4]:    4    four
'
' The key "2" is in the SortedList.
' The key "6" is NOT in the SortedList.
' The value "three" is in the SortedList.
' The value "nine" is NOT in the SortedList.

using System;
using System.Collections;

public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 2, "two" );
      mySL.Add( 4, "four" );
      mySL.Add( 1, "one" );
      mySL.Add( 3, "three" );
      mySL.Add( 0, "zero" );

      // Displays the values of the SortedList.
      Console.WriteLine( "The SortedList contains the following values:" );
      PrintIndexAndKeysAndValues( mySL );

      // Searches for a specific key.
      int myKey = 2;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, mySL.ContainsKey( myKey ) ? "in the SortedList" : "NOT in the SortedList" );
      myKey = 6;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, mySL.ContainsKey( myKey ) ? "in the SortedList" : "NOT in the SortedList" );

      // Searches for a specific value.
      String myValue = "three";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, mySL.ContainsValue( myValue ) ? "in the SortedList" : "NOT in the SortedList" );
      myValue = "nine";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, mySL.ContainsValue( myValue ) ? "in the SortedList" : "NOT in the SortedList" );
   }

   public static void PrintIndexAndKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t[{0}]:\t{1}\t{2}", i, myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The SortedList contains the following values:
    -INDEX-    -KEY-    -VALUE-
    [0]:    0    zero
    [1]:    1    one
    [2]:    2    two
    [3]:    3    three
    [4]:    4    four

The key "2" is in the SortedList.
The key "6" is NOT in the SortedList.
The value "three" is in the SortedList.
The value "nine" is NOT in the SortedList.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintIndexAndKeysAndValues( SortedList^ myList )
{
   Console::WriteLine(  "\t-INDEX-\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine(  "\t[{0}]:\t{1}\t{2}", i, myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 2, "two" );
   mySL->Add( 4, "four" );
   mySL->Add( 1, "one" );
   mySL->Add( 3, "three" );
   mySL->Add( (int^)0, "zero" );

   // Displays the values of the SortedList.
   Console::WriteLine(  "The SortedList contains the following values:" );
   PrintIndexAndKeysAndValues( mySL );

   // Searches for a specific key.
   int myKey = 2;
   Console::WriteLine(  "The key \"{0}\" is {1}.", myKey, mySL->ContainsKey( myKey ) ? (String^)"in the SortedList" : "NOT in the SortedList" );
   myKey = 6;
   Console::WriteLine(  "The key \"{0}\" is {1}.", myKey, mySL->ContainsKey( myKey ) ? (String^)"in the SortedList" : "NOT in the SortedList" );

   // Searches for a specific value.
   String^ myValue = "three";
   Console::WriteLine(  "The value \"{0}\" is {1}.", myValue, mySL->ContainsValue( myValue ) ? (String^)"in the SortedList" : "NOT in the SortedList" );
   myValue =  "nine";
   Console::WriteLine(  "The value \"{0}\" is {1}.", myValue, mySL->ContainsValue( myValue ) ? (String^)"in the SortedList" : "NOT in the SortedList" );
}

/*
This code produces the following output.

The SortedList contains the following values:
        -INDEX- -KEY-   -VALUE-
        [0]:    0       zero
        [1]:    1       one
        [2]:    2       two
        [3]:    3       three
        [4]:    4       four

The key "2" is in the SortedList.
The key "6" is NOT in the SortedList.
The value "three" is in the SortedList.
The value "nine" is NOT in the SortedList.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
Contains
ContainsValue
IndexOfKey

其他资源

在集合中执行不区分区域性的字符串操作


SortedList ..::.ContainsValue 方法

SortedList
.
.
::
.
ContainsValue 方法
SortedList 类

确定 SortedList 对象是否包含特定值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ContainsValue ( _
    value As Object _
) As Boolean
public virtual bool ContainsValue(
    Object value
)
public:
virtual bool ContainsValue(
    Object^ value
)
abstract ContainsValue :
        value:Object -> bool
override ContainsValue :
        value:Object -> bool

参数

value
类型： System Object
要在 SortedList 对象中定位的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 SortedList 对象中定位的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果 SortedList 对象包含带有指定 value 的元素，则为 true；否则为 false。

使用 Equals 方法将 SortedList 对象的元素的值与指定的值相比较。

此方法执行线性搜索，因此平均执行时间与 Count 成比例。即，此方法的运算复杂度为 O(n)，其中 n 为 Count。 此方法执行线性搜索，因此平均执行时间与 Count 成比例。即，此方法的运算复杂度为 O(n)，其中 n 为 Count。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例演示如何确定 SortedList 对象是否包含特定的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(2, "two")
        mySL.Add(4, "four")
        mySL.Add(1, "one")
        mySL.Add(3, "three")
        mySL.Add(0, "zero")

        ' Displays the values of the SortedList.
        Console.WriteLine("The SortedList contains the following values:")
        PrintIndexAndKeysAndValues(mySL)

        ' Searches for a specific key.
        Dim myKey As Integer = 2
        Dim msg As String
        If mySL.ContainsKey(myKey) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The key ""{0}"" is {1}.", myKey, msg)
        myKey = 6
        If mySL.ContainsKey(myKey) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The key ""{0}"" is {1}.", myKey, msg)
        ' Searches for a specific value.
        Dim myValue As String = "three"
        If mySL.ContainsValue(myValue) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The value ""{0}"" is {1}.", myValue, msg)
        myValue = "nine"
        If mySL.ContainsValue(myValue) Then
            msg = "in the SortedList"
        Else
            msg = "NOT in the SortedList"
        End If
        Console.WriteLine("The value ""{0}"" is {1}.", myValue, msg)
    End Sub

    Public Shared Sub PrintIndexAndKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-INDEX-" & ControlChars.Tab & _
           "-KEY-" & ControlChars.Tab & "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "[{0}]:" & ControlChars.Tab & _
               "{1}" & ControlChars.Tab & "{2}", i, myList.GetKey(i), _
               myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The SortedList contains the following values:
'     -INDEX-    -KEY-    -VALUE-
'     [0]:    0    zero
'     [1]:    1    one
'     [2]:    2    two
'     [3]:    3    three
'     [4]:    4    four
'
' The key "2" is in the SortedList.
' The key "6" is NOT in the SortedList.
' The value "three" is in the SortedList.
' The value "nine" is NOT in the SortedList.

using System;
using System.Collections;

public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 2, "two" );
      mySL.Add( 4, "four" );
      mySL.Add( 1, "one" );
      mySL.Add( 3, "three" );
      mySL.Add( 0, "zero" );

      // Displays the values of the SortedList.
      Console.WriteLine( "The SortedList contains the following values:" );
      PrintIndexAndKeysAndValues( mySL );

      // Searches for a specific key.
      int myKey = 2;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, mySL.ContainsKey( myKey ) ? "in the SortedList" : "NOT in the SortedList" );
      myKey = 6;
      Console.WriteLine( "The key \"{0}\" is {1}.", myKey, mySL.ContainsKey( myKey ) ? "in the SortedList" : "NOT in the SortedList" );

      // Searches for a specific value.
      String myValue = "three";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, mySL.ContainsValue( myValue ) ? "in the SortedList" : "NOT in the SortedList" );
      myValue = "nine";
      Console.WriteLine( "The value \"{0}\" is {1}.", myValue, mySL.ContainsValue( myValue ) ? "in the SortedList" : "NOT in the SortedList" );
   }

   public static void PrintIndexAndKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t[{0}]:\t{1}\t{2}", i, myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The SortedList contains the following values:
    -INDEX-    -KEY-    -VALUE-
    [0]:    0    zero
    [1]:    1    one
    [2]:    2    two
    [3]:    3    three
    [4]:    4    four

The key "2" is in the SortedList.
The key "6" is NOT in the SortedList.
The value "three" is in the SortedList.
The value "nine" is NOT in the SortedList.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintIndexAndKeysAndValues( SortedList^ myList )
{
   Console::WriteLine(  "\t-INDEX-\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine(  "\t[{0}]:\t{1}\t{2}", i, myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 2, "two" );
   mySL->Add( 4, "four" );
   mySL->Add( 1, "one" );
   mySL->Add( 3, "three" );
   mySL->Add( (int^)0, "zero" );

   // Displays the values of the SortedList.
   Console::WriteLine(  "The SortedList contains the following values:" );
   PrintIndexAndKeysAndValues( mySL );

   // Searches for a specific key.
   int myKey = 2;
   Console::WriteLine(  "The key \"{0}\" is {1}.", myKey, mySL->ContainsKey( myKey ) ? (String^)"in the SortedList" : "NOT in the SortedList" );
   myKey = 6;
   Console::WriteLine(  "The key \"{0}\" is {1}.", myKey, mySL->ContainsKey( myKey ) ? (String^)"in the SortedList" : "NOT in the SortedList" );

   // Searches for a specific value.
   String^ myValue = "three";
   Console::WriteLine(  "The value \"{0}\" is {1}.", myValue, mySL->ContainsValue( myValue ) ? (String^)"in the SortedList" : "NOT in the SortedList" );
   myValue =  "nine";
   Console::WriteLine(  "The value \"{0}\" is {1}.", myValue, mySL->ContainsValue( myValue ) ? (String^)"in the SortedList" : "NOT in the SortedList" );
}

/*
This code produces the following output.

The SortedList contains the following values:
        -INDEX- -KEY-   -VALUE-
        [0]:    0       zero
        [1]:    1       one
        [2]:    2       two
        [3]:    3       three
        [4]:    4       four

The key "2" is in the SortedList.
The key "6" is NOT in the SortedList.
The value "three" is in the SortedList.
The value "nine" is NOT in the SortedList.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
ContainsKey
IndexOfValue

其他资源

在集合中执行不区分区域性的字符串操作


SortedList ..::.CopyTo 方法

SortedList
.
.
::
.
CopyTo 方法
SortedList 类

从指定数组索引开始将 SortedList 元素复制到一维 Array 对象中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub CopyTo ( _
    array As Array, _
    arrayIndex As Integer _
)
public virtual void CopyTo(
    Array array,
    int arrayIndex
)
public:
virtual void CopyTo(
    Array^ array,
    int arrayIndex
)
abstract CopyTo :
        array:Array *
        arrayIndex:int -> unit
override CopyTo :
        array:Array *
        arrayIndex:int -> unit

参数

array
类型： System Array
一维 Array 对象，它是从 SortedList 复制的 DictionaryEntry 对象的目标位置。Array 必须具有从零开始的索引。 一维 Array 对象，它是从 SortedList 复制的 DictionaryEntry 对象的目标位置。Array 必须具有从零开始的索引。
arrayIndex
类型： System Int32
array 中从零开始的索引，将在此处开始复制。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | arrayIndex 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 SortedList 对象中的元素数大于从 arrayIndex 到目标 array 结尾处之间的可用空间。
InvalidCastException | 无法自动将源 SortedList 的类型强制转换为目标 array 的类型。

按照枚举数循环访问 SortedList 对象的顺序，将键/值对复制到 Array 对象中。

若要只复制 SortedList 中的键，请使用 SortedList.Keys.CopyTo。

若要只复制 SortedList 中的值，请使用 SortedList.Values.CopyTo。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将 SortedList 对象中的值复制到一维 Array 对象中。

Imports System
Imports System.Collections

Public Class SamplesSortedList

   Public Shared Sub Main()

      ' Creates and initializes the source SortedList.
      Dim mySourceList As New SortedList()
      mySourceList.Add(2, "cats")
      mySourceList.Add(3, "in")
      mySourceList.Add(1, "napping")
      mySourceList.Add(4, "the")
      mySourceList.Add(0, "three")
      mySourceList.Add(5, "barn")

      ' Creates and initializes the one-dimensional target Array.
      Dim tempArray() As String = {"The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"}
      Dim myTargetArray(14) As DictionaryEntry
      Dim i As Integer = 0
      Dim s As String
      For Each s In  tempArray
         myTargetArray(i).Key = i
         myTargetArray(i).Value = s
         i += 1
      Next s

      ' Displays the values of the target Array.
      Console.WriteLine("The target Array contains the following (before and after copying):")
      PrintValues(myTargetArray, " "c)

      ' Copies the entire source SortedList to the target SortedList, starting at index 6.
      mySourceList.CopyTo(myTargetArray, 6)

      ' Displays the values of the target Array.
      PrintValues(myTargetArray, " "c)

   End Sub 'Main

   Public Shared Sub PrintValues(myArr() As DictionaryEntry, mySeparator As Char)
      Dim i As Integer
      For i = 0 To myArr.Length - 1
         Console.Write("{0}{1}", mySeparator, myArr(i).Value)
      Next i
      Console.WriteLine()
  End Sub 'PrintValues

End Class 'SamplesSortedList

'This code produces the following output.
'
'The target Array contains the following (before and after copying):
' The quick brown fox jumped over the lazy dog
' The quick brown fox jumped over three napping cats in the barn

 using System;
 using System.Collections;
 public class SamplesSortedList  {

    public static void Main()  {

       // Creates and initializes the source SortedList.
       SortedList mySourceList = new SortedList();
       mySourceList.Add( 2, "cats" );
       mySourceList.Add( 3, "in" );
       mySourceList.Add( 1, "napping" );
       mySourceList.Add( 4, "the" );
       mySourceList.Add( 0, "three" );
       mySourceList.Add( 5, "barn" );

       // Creates and initializes the one-dimensional target Array.
       String[] tempArray = new String[] { "The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog" };
       DictionaryEntry[] myTargetArray = new DictionaryEntry[15];
       int i = 0;
       foreach ( String s in tempArray )  {
          myTargetArray[i].Key = i;
          myTargetArray[i].Value = s;
          i++;
       }

       // Displays the values of the target Array.
       Console.WriteLine( "The target Array contains the following (before and after copying):" );
       PrintValues( myTargetArray, ' ' );

       // Copies the entire source SortedList to the target SortedList, starting at index 6.
       mySourceList.CopyTo( myTargetArray, 6 );

       // Displays the values of the target Array.
       PrintValues( myTargetArray, ' ' );
    }

    public static void PrintValues( DictionaryEntry[] myArr, char mySeparator )  {
       for ( int i = 0; i < myArr.Length; i++ )
          Console.Write( "{0}{1}", mySeparator, myArr[i].Value );
       Console.WriteLine();
    }

 }

/*
This code produces the following output.

The target Array contains the following (before and after copying):
 The quick brown fox jumped over the lazy dog
 The quick brown fox jumped over three napping cats in the barn

*/

using namespace System;
using namespace System::Collections;
void PrintValues( array<DictionaryEntry>^ myArr, Char mySeparator );
int main()
{

   // Creates and initializes the source SortedList.
   SortedList^ mySourceList = gcnew SortedList;
   mySourceList->Add( 2, "cats" );
   mySourceList->Add( 3, "in" );
   mySourceList->Add( 1, "napping" );
   mySourceList->Add( 4, "the" );
   mySourceList->Add( 0, "three" );
   mySourceList->Add( 5, "barn" );

   // Creates and initializes the one-dimensional target Array.
   array<String^>^tempArray = {"The","quick","brown","fox","jumped","over","the","lazy","dog"};
   array<DictionaryEntry>^myTargetArray = gcnew array<DictionaryEntry>(15);
   int i = 0;
   IEnumerator^ myEnum = tempArray->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      myTargetArray[ i ].Key = i;
      myTargetArray[ i ].Value = s;
      i++;
   }

   // Displays the values of the target Array.
   Console::WriteLine( "The target Array contains the following (before and after copying):" );
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source SortedList to the target SortedList, starting at index 6.
   mySourceList->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );
}

void PrintValues( array<DictionaryEntry>^ myArr, Char mySeparator )
{
   for ( int i = 0; i < myArr->Length; i++ )
      Console::Write( "{0}{1}", mySeparator, myArr[ i ].Value );
   Console::WriteLine();
}

/*
This code produces the following output.

The target Array contains the following (before and after copying):
 The quick brown fox jumped over the lazy dog
 The quick brown fox jumped over three napping cats in the barn

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
Array
DictionaryEntry
GetEnumerator


SortedList ..::.GetByIndex 方法

SortedList
.
.
::
.
GetByIndex 方法
SortedList 类

获取 SortedList 对象的指定索引处的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetByIndex ( _
    index As Integer _
) As Object
public virtual Object GetByIndex(
    int index
)
public:
virtual Object^ GetByIndex(
    int index
)
abstract GetByIndex :
        index:int -> Object
override GetByIndex :
        index:int -> Object

参数

index
类型： System Int32
要获取的值的从零开始的索引。

返回值

类型： System Object
位于 SortedList 对象的指定索引处的值。
异常 | 条件
ArgumentOutOfRangeException | index 不在 SortedList 对象的有效索引范围内。

索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。

此方法是 O(1) 操作。

下面的代码示例演示如何获取 SortedList 对象中的一个或所有键或值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(1.3, "fox")
        mySL.Add(1.4, "jumped")
        mySL.Add(1.5, "over")
        mySL.Add(1.2, "brown")
        mySL.Add(1.1, "quick")
        mySL.Add(1.0, "The")
        mySL.Add(1.6, "the")
        mySL.Add(1.8, "dog")
        mySL.Add(1.7, "lazy")

        ' Gets the key and the value based on the index.
        Dim myIndex As Integer = 3
        Console.WriteLine("The key   at index {0} is {1}.", myIndex, _
           mySL.GetKey(myIndex))
        Console.WriteLine("The value at index {0} is {1}.", myIndex, _
           mySL.GetByIndex(myIndex))

        ' Gets the list of keys and the list of values.
        Dim myKeyList As IList = mySL.GetKeyList()
        Dim myValueList As IList = mySL.GetValueList()

        ' Prints the keys in the first column and the values in the second column.
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To mySL.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}" & ControlChars.Tab & _
               "{1}", myKeyList(i), myValueList(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The key   at index 3 is 1.3.
' The value at index 3 is fox.
'     -KEY-    -VALUE-
'     1    The
'     1.1    quick
'     1.2    brown
'     1.3    fox
'     1.4    jumped
'     1.5    over
'     1.6    the
'     1.7    lazy
'     1.8    dog

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 1.3, "fox" );
      mySL.Add( 1.4, "jumped" );
      mySL.Add( 1.5, "over" );
      mySL.Add( 1.2, "brown" );
      mySL.Add( 1.1, "quick" );
      mySL.Add( 1.0, "The" );
      mySL.Add( 1.6, "the" );
      mySL.Add( 1.8, "dog" );
      mySL.Add( 1.7, "lazy" );

      // Gets the key and the value based on the index.
      int myIndex=3;
      Console.WriteLine( "The key   at index {0} is {1}.", myIndex, mySL.GetKey( myIndex ) );
      Console.WriteLine( "The value at index {0} is {1}.", myIndex, mySL.GetByIndex( myIndex ) );

      // Gets the list of keys and the list of values.
      IList myKeyList = mySL.GetKeyList();
      IList myValueList = mySL.GetValueList();

      // Prints the keys in the first column and the values in the second column.
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < mySL.Count; i++ )
         Console.WriteLine( "\t{0}\t{1}", myKeyList[i], myValueList[i] );
   }
}
/*
This code produces the following output.

The key   at index 3 is 1.3.
The value at index 3 is fox.
    -KEY-    -VALUE-
    1    The
    1.1    quick
    1.2    brown
    1.3    fox
    1.4    jumped
    1.5    over
    1.6    the
    1.7    lazy
    1.8    dog
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 1.3, "fox" );
   mySL->Add( 1.4, "jumped" );
   mySL->Add( 1.5, "over" );
   mySL->Add( 1.2, "brown" );
   mySL->Add( 1.1, "quick" );
   mySL->Add( 1.0, "The" );
   mySL->Add( 1.6, "the" );
   mySL->Add( 1.8, "dog" );
   mySL->Add( 1.7, "lazy" );

   // Gets the key and the value based on the index.
   int myIndex = 3;
   Console::WriteLine( "The key   at index {0} is {1}.", myIndex, mySL->GetKey( myIndex ) );
   Console::WriteLine( "The value at index {0} is {1}.", myIndex, mySL->GetByIndex( myIndex ) );

   // Gets the list of keys and the list of values.
   IList^ myKeyList = mySL->GetKeyList();
   IList^ myValueList = mySL->GetValueList();

   // Prints the keys in the first column and the values in the second column.
   Console::WriteLine( "\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < mySL->Count; i++ )
      Console::WriteLine( "\t{0}\t{1}", myKeyList[ i ], myValueList[ i ] );
}

/*
This code produces the following output.

The key   at index 3 is 1.3.
The value at index 3 is fox.
        -KEY-   -VALUE-
        1       The
        1.1     quick
        1.2     brown
        1.3     fox
        1.4     jumped
        1.5     over
        1.6     the
        1.7     lazy
        1.8     dog
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
IndexOfKey
IndexOfValue


SortedList ..::.GetEnumerator 方法

SortedList
.
.
::
.
GetEnumerator 方法
SortedList 类

返回一个循环访问 SortedList 对象的 IDictionaryEnumerator 对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumerator As IDictionaryEnumerator
public virtual IDictionaryEnumerator GetEnumerator()
public:
virtual IDictionaryEnumerator^ GetEnumerator()
abstract GetEnumerator : unit -> IDictionaryEnumerator
override GetEnumerator : unit -> IDictionaryEnumerator

返回值

类型： System.Collections IDictionaryEnumerator
一个用于 SortedList 对象的 IDictionaryEnumerator 对象。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
IDictionaryEnumerator
IEnumerator


SortedList ..::.GetKey 方法

SortedList
.
.
::
.
GetKey 方法
SortedList 类

获取 SortedList 对象的指定索引处的键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetKey ( _
    index As Integer _
) As Object
public virtual Object GetKey(
    int index
)
public:
virtual Object^ GetKey(
    int index
)
abstract GetKey :
        index:int -> Object
override GetKey :
        index:int -> Object

参数

index
类型： System Int32
要获取的键的从零开始的索引。

返回值

类型： System Object
SortedList 对象的指定索引处的键。
异常 | 条件
ArgumentOutOfRangeException | index 不在 SortedList 对象的有效索引范围内。

索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。

此方法是 O(1) 操作。

下面的代码示例演示如何获取 SortedList 对象中的一个或所有键或值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(1.3, "fox")
        mySL.Add(1.4, "jumped")
        mySL.Add(1.5, "over")
        mySL.Add(1.2, "brown")
        mySL.Add(1.1, "quick")
        mySL.Add(1.0, "The")
        mySL.Add(1.6, "the")
        mySL.Add(1.8, "dog")
        mySL.Add(1.7, "lazy")

        ' Gets the key and the value based on the index.
        Dim myIndex As Integer = 3
        Console.WriteLine("The key   at index {0} is {1}.", myIndex, _
           mySL.GetKey(myIndex))
        Console.WriteLine("The value at index {0} is {1}.", myIndex, _
           mySL.GetByIndex(myIndex))

        ' Gets the list of keys and the list of values.
        Dim myKeyList As IList = mySL.GetKeyList()
        Dim myValueList As IList = mySL.GetValueList()

        ' Prints the keys in the first column and the values in the second column.
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To mySL.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}" & ControlChars.Tab & _
               "{1}", myKeyList(i), myValueList(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The key   at index 3 is 1.3.
' The value at index 3 is fox.
'     -KEY-    -VALUE-
'     1    The
'     1.1    quick
'     1.2    brown
'     1.3    fox
'     1.4    jumped
'     1.5    over
'     1.6    the
'     1.7    lazy
'     1.8    dog

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 1.3, "fox" );
      mySL.Add( 1.4, "jumped" );
      mySL.Add( 1.5, "over" );
      mySL.Add( 1.2, "brown" );
      mySL.Add( 1.1, "quick" );
      mySL.Add( 1.0, "The" );
      mySL.Add( 1.6, "the" );
      mySL.Add( 1.8, "dog" );
      mySL.Add( 1.7, "lazy" );

      // Gets the key and the value based on the index.
      int myIndex=3;
      Console.WriteLine( "The key   at index {0} is {1}.", myIndex, mySL.GetKey( myIndex ) );
      Console.WriteLine( "The value at index {0} is {1}.", myIndex, mySL.GetByIndex( myIndex ) );

      // Gets the list of keys and the list of values.
      IList myKeyList = mySL.GetKeyList();
      IList myValueList = mySL.GetValueList();

      // Prints the keys in the first column and the values in the second column.
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < mySL.Count; i++ )
         Console.WriteLine( "\t{0}\t{1}", myKeyList[i], myValueList[i] );
   }
}
/*
This code produces the following output.

The key   at index 3 is 1.3.
The value at index 3 is fox.
    -KEY-    -VALUE-
    1    The
    1.1    quick
    1.2    brown
    1.3    fox
    1.4    jumped
    1.5    over
    1.6    the
    1.7    lazy
    1.8    dog
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 1.3, "fox" );
   mySL->Add( 1.4, "jumped" );
   mySL->Add( 1.5, "over" );
   mySL->Add( 1.2, "brown" );
   mySL->Add( 1.1, "quick" );
   mySL->Add( 1.0, "The" );
   mySL->Add( 1.6, "the" );
   mySL->Add( 1.8, "dog" );
   mySL->Add( 1.7, "lazy" );

   // Gets the key and the value based on the index.
   int myIndex = 3;
   Console::WriteLine( "The key   at index {0} is {1}.", myIndex, mySL->GetKey( myIndex ) );
   Console::WriteLine( "The value at index {0} is {1}.", myIndex, mySL->GetByIndex( myIndex ) );

   // Gets the list of keys and the list of values.
   IList^ myKeyList = mySL->GetKeyList();
   IList^ myValueList = mySL->GetValueList();

   // Prints the keys in the first column and the values in the second column.
   Console::WriteLine( "\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < mySL->Count; i++ )
      Console::WriteLine( "\t{0}\t{1}", myKeyList[ i ], myValueList[ i ] );
}

/*
This code produces the following output.

The key   at index 3 is 1.3.
The value at index 3 is fox.
        -KEY-   -VALUE-
        1       The
        1.1     quick
        1.2     brown
        1.3     fox
        1.4     jumped
        1.5     over
        1.6     the
        1.7     lazy
        1.8     dog
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间


SortedList ..::.GetKeyList 方法

SortedList
.
.
::
.
GetKeyList 方法
SortedList 类

获取 SortedList 对象中的键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetKeyList As IList
public virtual IList GetKeyList()
public:
virtual IList^ GetKeyList()
abstract GetKeyList : unit -> IList
override GetKeyList : unit -> IList

返回值

类型： System.Collections IList
包含 SortedList 对象中的键的 IList 对象。

返回的 IList 对象是 SortedList 对象的键的只读视图。对基础 SortedList 所作的修改会立即在 IList 中反映出来。 返回的 IList 对象是 SortedList 对象的键的只读视图。对基础 SortedList 所作的修改会立即在 IList 中反映出来。

返回的 IList 的元素按照 SortedList 的键的顺序进行排序。

此方法类似于 Keys 属性，但返回 IList 对象而不是 ICollection 对象。

此方法是 O(1) 操作。

下面的代码示例演示如何获取 SortedList 对象中的一个或所有键或值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(1.3, "fox")
        mySL.Add(1.4, "jumped")
        mySL.Add(1.5, "over")
        mySL.Add(1.2, "brown")
        mySL.Add(1.1, "quick")
        mySL.Add(1.0, "The")
        mySL.Add(1.6, "the")
        mySL.Add(1.8, "dog")
        mySL.Add(1.7, "lazy")

        ' Gets the key and the value based on the index.
        Dim myIndex As Integer = 3
        Console.WriteLine("The key   at index {0} is {1}.", myIndex, _
           mySL.GetKey(myIndex))
        Console.WriteLine("The value at index {0} is {1}.", myIndex, _
           mySL.GetByIndex(myIndex))

        ' Gets the list of keys and the list of values.
        Dim myKeyList As IList = mySL.GetKeyList()
        Dim myValueList As IList = mySL.GetValueList()

        ' Prints the keys in the first column and the values in the second column.
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To mySL.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}" & ControlChars.Tab & _
               "{1}", myKeyList(i), myValueList(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The key   at index 3 is 1.3.
' The value at index 3 is fox.
'     -KEY-    -VALUE-
'     1    The
'     1.1    quick
'     1.2    brown
'     1.3    fox
'     1.4    jumped
'     1.5    over
'     1.6    the
'     1.7    lazy
'     1.8    dog

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 1.3, "fox" );
      mySL.Add( 1.4, "jumped" );
      mySL.Add( 1.5, "over" );
      mySL.Add( 1.2, "brown" );
      mySL.Add( 1.1, "quick" );
      mySL.Add( 1.0, "The" );
      mySL.Add( 1.6, "the" );
      mySL.Add( 1.8, "dog" );
      mySL.Add( 1.7, "lazy" );

      // Gets the key and the value based on the index.
      int myIndex=3;
      Console.WriteLine( "The key   at index {0} is {1}.", myIndex, mySL.GetKey( myIndex ) );
      Console.WriteLine( "The value at index {0} is {1}.", myIndex, mySL.GetByIndex( myIndex ) );

      // Gets the list of keys and the list of values.
      IList myKeyList = mySL.GetKeyList();
      IList myValueList = mySL.GetValueList();

      // Prints the keys in the first column and the values in the second column.
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < mySL.Count; i++ )
         Console.WriteLine( "\t{0}\t{1}", myKeyList[i], myValueList[i] );
   }
}
/*
This code produces the following output.

The key   at index 3 is 1.3.
The value at index 3 is fox.
    -KEY-    -VALUE-
    1    The
    1.1    quick
    1.2    brown
    1.3    fox
    1.4    jumped
    1.5    over
    1.6    the
    1.7    lazy
    1.8    dog
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 1.3, "fox" );
   mySL->Add( 1.4, "jumped" );
   mySL->Add( 1.5, "over" );
   mySL->Add( 1.2, "brown" );
   mySL->Add( 1.1, "quick" );
   mySL->Add( 1.0, "The" );
   mySL->Add( 1.6, "the" );
   mySL->Add( 1.8, "dog" );
   mySL->Add( 1.7, "lazy" );

   // Gets the key and the value based on the index.
   int myIndex = 3;
   Console::WriteLine( "The key   at index {0} is {1}.", myIndex, mySL->GetKey( myIndex ) );
   Console::WriteLine( "The value at index {0} is {1}.", myIndex, mySL->GetByIndex( myIndex ) );

   // Gets the list of keys and the list of values.
   IList^ myKeyList = mySL->GetKeyList();
   IList^ myValueList = mySL->GetValueList();

   // Prints the keys in the first column and the values in the second column.
   Console::WriteLine( "\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < mySL->Count; i++ )
      Console::WriteLine( "\t{0}\t{1}", myKeyList[ i ], myValueList[ i ] );
}

/*
This code produces the following output.

The key   at index 3 is 1.3.
The value at index 3 is fox.
        -KEY-   -VALUE-
        1       The
        1.1     quick
        1.2     brown
        1.3     fox
        1.4     jumped
        1.5     over
        1.6     the
        1.7     lazy
        1.8     dog
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
IList
GetValueList
Keys


SortedList ..::.GetValueList 方法

SortedList
.
.
::
.
GetValueList 方法
SortedList 类

获取 SortedList 对象中的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetValueList As IList
public virtual IList GetValueList()
public:
virtual IList^ GetValueList()
abstract GetValueList : unit -> IList
override GetValueList : unit -> IList

返回值

类型： System.Collections IList
包含 SortedList 对象中的值的 IList 对象。

返回的 IList 对象是 SortedList 对象的值的只读视图。对基础 SortedList 所作的修改会立即在 IList 中反映出来。 返回的 IList 对象是 SortedList 对象的值的只读视图。对基础 SortedList 所作的修改会立即在 IList 中反映出来。

返回的 IList 的元素按照 SortedList 的值的顺序进行排序。

此方法类似于 Values 属性，但返回 IList 对象而不是 ICollection 对象。

此方法是 O(1) 操作。

下面的代码示例演示如何获取 SortedList 对象中的一个或所有键或值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(1.3, "fox")
        mySL.Add(1.4, "jumped")
        mySL.Add(1.5, "over")
        mySL.Add(1.2, "brown")
        mySL.Add(1.1, "quick")
        mySL.Add(1.0, "The")
        mySL.Add(1.6, "the")
        mySL.Add(1.8, "dog")
        mySL.Add(1.7, "lazy")

        ' Gets the key and the value based on the index.
        Dim myIndex As Integer = 3
        Console.WriteLine("The key   at index {0} is {1}.", myIndex, _
           mySL.GetKey(myIndex))
        Console.WriteLine("The value at index {0} is {1}.", myIndex, _
           mySL.GetByIndex(myIndex))

        ' Gets the list of keys and the list of values.
        Dim myKeyList As IList = mySL.GetKeyList()
        Dim myValueList As IList = mySL.GetValueList()

        ' Prints the keys in the first column and the values in the second column.
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To mySL.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}" & ControlChars.Tab & _
               "{1}", myKeyList(i), myValueList(i))
        Next i
    End Sub
End Class

' This code produces the following output.
'
' The key   at index 3 is 1.3.
' The value at index 3 is fox.
'     -KEY-    -VALUE-
'     1    The
'     1.1    quick
'     1.2    brown
'     1.3    fox
'     1.4    jumped
'     1.5    over
'     1.6    the
'     1.7    lazy
'     1.8    dog

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 1.3, "fox" );
      mySL.Add( 1.4, "jumped" );
      mySL.Add( 1.5, "over" );
      mySL.Add( 1.2, "brown" );
      mySL.Add( 1.1, "quick" );
      mySL.Add( 1.0, "The" );
      mySL.Add( 1.6, "the" );
      mySL.Add( 1.8, "dog" );
      mySL.Add( 1.7, "lazy" );

      // Gets the key and the value based on the index.
      int myIndex=3;
      Console.WriteLine( "The key   at index {0} is {1}.", myIndex, mySL.GetKey( myIndex ) );
      Console.WriteLine( "The value at index {0} is {1}.", myIndex, mySL.GetByIndex( myIndex ) );

      // Gets the list of keys and the list of values.
      IList myKeyList = mySL.GetKeyList();
      IList myValueList = mySL.GetValueList();

      // Prints the keys in the first column and the values in the second column.
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < mySL.Count; i++ )
         Console.WriteLine( "\t{0}\t{1}", myKeyList[i], myValueList[i] );
   }
}
/*
This code produces the following output.

The key   at index 3 is 1.3.
The value at index 3 is fox.
    -KEY-    -VALUE-
    1    The
    1.1    quick
    1.2    brown
    1.3    fox
    1.4    jumped
    1.5    over
    1.6    the
    1.7    lazy
    1.8    dog
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 1.3, "fox" );
   mySL->Add( 1.4, "jumped" );
   mySL->Add( 1.5, "over" );
   mySL->Add( 1.2, "brown" );
   mySL->Add( 1.1, "quick" );
   mySL->Add( 1.0, "The" );
   mySL->Add( 1.6, "the" );
   mySL->Add( 1.8, "dog" );
   mySL->Add( 1.7, "lazy" );

   // Gets the key and the value based on the index.
   int myIndex = 3;
   Console::WriteLine( "The key   at index {0} is {1}.", myIndex, mySL->GetKey( myIndex ) );
   Console::WriteLine( "The value at index {0} is {1}.", myIndex, mySL->GetByIndex( myIndex ) );

   // Gets the list of keys and the list of values.
   IList^ myKeyList = mySL->GetKeyList();
   IList^ myValueList = mySL->GetValueList();

   // Prints the keys in the first column and the values in the second column.
   Console::WriteLine( "\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < mySL->Count; i++ )
      Console::WriteLine( "\t{0}\t{1}", myKeyList[ i ], myValueList[ i ] );
}

/*
This code produces the following output.

The key   at index 3 is 1.3.
The value at index 3 is fox.
        -KEY-   -VALUE-
        1       The
        1.1     quick
        1.2     brown
        1.3     fox
        1.4     jumped
        1.5     over
        1.6     the
        1.7     lazy
        1.8     dog
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
IList
GetKeyList
Values


SortedList ..::.IEnumerable ..::.GetEnumerator 方法

SortedList
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
SortedList 类

返回循环访问 SortedList 的 IEnumerator。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
用于 SortedList 的 IEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回了 false，则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除元素），则该枚举数变为无效（这一变化是不可恢复的），并且下次调用 MoveNext 或 Reset 将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，则 Current 会返回已将它设置为的元素，即使该枚举数已失效。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
IDictionaryEnumerator
IEnumerator


SortedList ..::.IndexOfKey 方法

SortedList
.
.
::
.
IndexOfKey 方法
SortedList 类

返回 SortedList 对象中指定键的从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IndexOfKey ( _
    key As Object _
) As Integer
public virtual int IndexOfKey(
    Object key
)
public:
virtual int IndexOfKey(
    Object^ key
)
abstract IndexOfKey :
        key:Object -> int
override IndexOfKey :
        key:Object -> int

参数

key
类型： System Object
要在 SortedList 对象中定位的键。

返回值

类型： System Int32
如果在 SortedList 对象中找到 key，则为 key 参数的从零开始的索引；否则为 -1。
异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 比较器引发异常。

SortedList 对象的元素将由键按照特定的 IComparer 实现（在创建 SortedList 时指定），或按照键本身提供的 IComparable 实现进行排序。

索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 中添加或移除元素时，特定键/值对的索引可能会更改。

此方法使用二进制搜索算法；因此，此方法的运算复杂度为 O(log n)，其中 n 是 Count。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例演示如何确定 SortedList 对象中某个键或值的索引。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(1, "one")
        mySL.Add(3, "three")
        mySL.Add(2, "two")
        mySL.Add(4, "four")
        mySL.Add(0, "zero")

        ' Displays the values of the SortedList.
        Console.WriteLine("The SortedList contains the " & _
           "following values:")
        PrintIndexAndKeysAndValues(mySL)

        ' Searches for a specific key.
        Dim myKey As Integer = 2
        Console.WriteLine("The key ""{0}"" is at index {1}.", myKey, _
           mySL.IndexOfKey(myKey))

        ' Searches for a specific value.
        Dim myValue As String = "three"
        Console.WriteLine("The value ""{0}"" is at index {1}.", myValue, _
           mySL.IndexOfValue(myValue))
    End Sub

    Public Shared Sub PrintIndexAndKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-INDEX-" & ControlChars.Tab & _
           "-KEY-" & ControlChars.Tab & "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "[{0}]:" & ControlChars.Tab & _
               "{1}" & ControlChars.Tab & "{2}", i, myList.GetKey(i), _
               myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The SortedList contains the following values:
'     -INDEX-    -KEY-    -VALUE-
'     [0]:    0    zero
'     [1]:    1    one
'     [2]:    2    two
'     [3]:    3    three
'     [4]:    4    four
'
' The key "2" is at index 2.
' The value "three" is at index 3.

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 1, "one" );
      mySL.Add( 3, "three" );
      mySL.Add( 2, "two" );
      mySL.Add( 4, "four" );
      mySL.Add( 0, "zero" );

      // Displays the values of the SortedList.
      Console.WriteLine( "The SortedList contains the following values:" );
      PrintIndexAndKeysAndValues( mySL );

      // Searches for a specific key.
      int myKey = 2;
      Console.WriteLine( "The key \"{0}\" is at index {1}.", myKey, mySL.IndexOfKey( myKey ) );

      // Searches for a specific value.
      String myValue = "three";
      Console.WriteLine( "The value \"{0}\" is at index {1}.", myValue, mySL.IndexOfValue( myValue ) );
   }

   public static void PrintIndexAndKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t[{0}]:\t{1}\t{2}", i, myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The SortedList contains the following values:
    -INDEX-    -KEY-    -VALUE-
    [0]:    0    zero
    [1]:    1    one
    [2]:    2    two
    [3]:    3    three
    [4]:    4    four

The key "2" is at index 2.
The value "three" is at index 3.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintIndexAndKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "\t[{0}]:\t{1}\t{2}", i, myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 1, "one" );
   mySL->Add( 3, "three" );
   mySL->Add( 2, "two" );
   mySL->Add( 4, "four" );
   mySL->Add( 0, "zero" );

   // Displays the values of the SortedList.
   Console::WriteLine( "The SortedList contains the following values:" );
   PrintIndexAndKeysAndValues( mySL );

   // Searches for a specific key.
   int myKey = 2;
   Console::WriteLine( "The key \"{0}\" is at index {1}.", myKey, mySL->IndexOfKey( myKey ) );

   // Searches for a specific value.
   String^ myValue = "three";
   Console::WriteLine( "The value \"{0}\" is at index {1}.", myValue, mySL->IndexOfValue( myValue ) );
}

/*
This code produces the following output.

The SortedList contains the following values:
        -INDEX- -KEY-   -VALUE-
        [0]:    0       zero
        [1]:    1       one
        [2]:    2       two
        [3]:    3       three
        [4]:    4       four

The key "2" is at index 2.
The value "three" is at index 3.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
ContainsKey
IndexOfValue

其他资源

在集合中执行不区分区域性的字符串操作


SortedList ..::.IndexOfValue 方法

SortedList
.
.
::
.
IndexOfValue 方法
SortedList 类

返回指定的值在 SortedList 对象中第一个匹配项的从零开始的索引。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function IndexOfValue ( _
    value As Object _
) As Integer
public virtual int IndexOfValue(
    Object value
)
public:
virtual int IndexOfValue(
    Object^ value
)
abstract IndexOfValue :
        value:Object -> int
override IndexOfValue :
        value:Object -> int

参数

value
类型： System Object
要在 SortedList 对象中定位的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 SortedList 对象中定位的值。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Int32
如果在 SortedList 对象中找到 value，则为 value 参数的第一个匹配项的从零开始的索引；否则为 -1。

索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。

使用 Equals 方法将 SortedList 的元素的值与指定的值相比较。

此方法使用线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 是 Count。

从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 item 使用该集合对象的 Equals 和 CompareTo 方法来确定项是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 item 参数的 Equals 和 CompareTo 方法来确定的。

下面的代码示例演示如何确定 SortedList 对象中某个键或值的索引。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(1, "one")
        mySL.Add(3, "three")
        mySL.Add(2, "two")
        mySL.Add(4, "four")
        mySL.Add(0, "zero")

        ' Displays the values of the SortedList.
        Console.WriteLine("The SortedList contains the " & _
           "following values:")
        PrintIndexAndKeysAndValues(mySL)

        ' Searches for a specific key.
        Dim myKey As Integer = 2
        Console.WriteLine("The key ""{0}"" is at index {1}.", myKey, _
           mySL.IndexOfKey(myKey))

        ' Searches for a specific value.
        Dim myValue As String = "three"
        Console.WriteLine("The value ""{0}"" is at index {1}.", myValue, _
           mySL.IndexOfValue(myValue))
    End Sub

    Public Shared Sub PrintIndexAndKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-INDEX-" & ControlChars.Tab & _
           "-KEY-" & ControlChars.Tab & "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "[{0}]:" & ControlChars.Tab & _
               "{1}" & ControlChars.Tab & "{2}", i, myList.GetKey(i), _
               myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The SortedList contains the following values:
'     -INDEX-    -KEY-    -VALUE-
'     [0]:    0    zero
'     [1]:    1    one
'     [2]:    2    two
'     [3]:    3    three
'     [4]:    4    four
'
' The key "2" is at index 2.
' The value "three" is at index 3.

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 1, "one" );
      mySL.Add( 3, "three" );
      mySL.Add( 2, "two" );
      mySL.Add( 4, "four" );
      mySL.Add( 0, "zero" );

      // Displays the values of the SortedList.
      Console.WriteLine( "The SortedList contains the following values:" );
      PrintIndexAndKeysAndValues( mySL );

      // Searches for a specific key.
      int myKey = 2;
      Console.WriteLine( "The key \"{0}\" is at index {1}.", myKey, mySL.IndexOfKey( myKey ) );

      // Searches for a specific value.
      String myValue = "three";
      Console.WriteLine( "The value \"{0}\" is at index {1}.", myValue, mySL.IndexOfValue( myValue ) );
   }

   public static void PrintIndexAndKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t[{0}]:\t{1}\t{2}", i, myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The SortedList contains the following values:
    -INDEX-    -KEY-    -VALUE-
    [0]:    0    zero
    [1]:    1    one
    [2]:    2    two
    [3]:    3    three
    [4]:    4    four

The key "2" is at index 2.
The value "three" is at index 3.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintIndexAndKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "\t[{0}]:\t{1}\t{2}", i, myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 1, "one" );
   mySL->Add( 3, "three" );
   mySL->Add( 2, "two" );
   mySL->Add( 4, "four" );
   mySL->Add( 0, "zero" );

   // Displays the values of the SortedList.
   Console::WriteLine( "The SortedList contains the following values:" );
   PrintIndexAndKeysAndValues( mySL );

   // Searches for a specific key.
   int myKey = 2;
   Console::WriteLine( "The key \"{0}\" is at index {1}.", myKey, mySL->IndexOfKey( myKey ) );

   // Searches for a specific value.
   String^ myValue = "three";
   Console::WriteLine( "The value \"{0}\" is at index {1}.", myValue, mySL->IndexOfValue( myValue ) );
}

/*
This code produces the following output.

The SortedList contains the following values:
        -INDEX- -KEY-   -VALUE-
        [0]:    0       zero
        [1]:    1       one
        [2]:    2       two
        [3]:    3       three
        [4]:    4       four

The key "2" is at index 2.
The value "three" is at index 3.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
ContainsValue
IndexOfKey

其他资源

在集合中执行不区分区域性的字符串操作


SortedList ..::.Remove 方法

SortedList
.
.
::
.
Remove 方法
SortedList 类

从 SortedList 对象中移除带有指定键的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Remove ( _
    key As Object _
)
public virtual void Remove(
    Object key
)
public:
virtual void Remove(
    Object^ key
)
abstract Remove :
        key:Object -> unit
override Remove :
        key:Object -> unit

参数

key
类型： System Object
要移除的元素的键。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | SortedList 对象是只读的。 - 或 - SortedList 具有固定大小。

如果 SortedList 对象不包含具有指定键的元素，则 SortedList 保持不变。不引发异常。 如果 SortedList 对象不包含具有指定键的元素，则 SortedList 保持不变。不引发异常。

在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将元素从 SortedList 对象中移除。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add("3c", "dog")
        mySL.Add("2c", "over")
        mySL.Add("1c", "brown")
        mySL.Add("1a", "The")
        mySL.Add("1b", "quick")
        mySL.Add("3a", "the")
        mySL.Add("3b", "lazy")
        mySL.Add("2a", "fox")
        mySL.Add("2b", "jumped")

        ' Displays the SortedList.
        Console.WriteLine("The SortedList initially contains the following:")
        PrintKeysAndValues(mySL)

        ' Removes the element with the key "3b".
        mySL.Remove("3b")

        ' Displays the current state of the SortedList.
        Console.WriteLine("After removing ""lazy"":")
        PrintKeysAndValues(mySL)

        ' Removes the element at index 5.
        mySL.RemoveAt(5)

        ' Displays the current state of the SortedList.
        Console.WriteLine("After removing the element at index 5:")
        PrintKeysAndValues(mySL)
    End Sub

    Public Shared Sub PrintKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}:" & ControlChars.Tab & _
               "{1}", myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The SortedList initially contains the following:
'     -KEY-    -VALUE-
'     1a:    The
'     1b:    quick
'     1c:    brown
'     2a:    fox
'     2b:    jumped
'     2c:    over
'     3a:    the
'     3b:    lazy
'     3c:    dog
'
' After removing "lazy":
'     -KEY-    -VALUE-
'     1a:    The
'     1b:    quick
'     1c:    brown
'     2a:    fox
'     2b:    jumped
'     2c:    over
'     3a:    the
'     3c:    dog
'
' After removing the element at index 5:
'     -KEY-    -VALUE-
'     1a:    The
'     1b:    quick
'     1c:    brown
'     2a:    fox
'     2b:    jumped
'     3a:    the
'     3c:    dog

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( "3c", "dog" );
      mySL.Add( "2c", "over" );
      mySL.Add( "1c", "brown" );
      mySL.Add( "1a", "The" );
      mySL.Add( "1b", "quick" );
      mySL.Add( "3a", "the" );
      mySL.Add( "3b", "lazy" );
      mySL.Add( "2a", "fox" );
      mySL.Add( "2b", "jumped" );

      // Displays the SortedList.
      Console.WriteLine( "The SortedList initially contains the following:" );
      PrintKeysAndValues( mySL );

      // Removes the element with the key "3b".
      mySL.Remove( "3b" );

      // Displays the current state of the SortedList.
      Console.WriteLine( "After removing \"lazy\":" );
      PrintKeysAndValues( mySL );

      // Removes the element at index 5.
      mySL.RemoveAt( 5 );

      // Displays the current state of the SortedList.
      Console.WriteLine( "After removing the element at index 5:" );
      PrintKeysAndValues( mySL );
   }

   public static void PrintKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t{0}:\t{1}", myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The SortedList initially contains the following:
    -KEY-    -VALUE-
    1a:    The
    1b:    quick
    1c:    brown
    2a:    fox
    2b:    jumped
    2c:    over
    3a:    the
    3b:    lazy
    3c:    dog

After removing "lazy":
    -KEY-    -VALUE-
    1a:    The
    1b:    quick
    1c:    brown
    2a:    fox
    2b:    jumped
    2c:    over
    3a:    the
    3c:    dog

After removing the element at index 5:
    -KEY-    -VALUE-
    1a:    The
    1b:    quick
    1c:    brown
    2a:    fox
    2b:    jumped
    3a:    the
    3c:    dog
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "\t{0}:\t{1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( "3c", "dog" );
   mySL->Add( "2c", "over" );
   mySL->Add( "1c", "brown" );
   mySL->Add( "1a", "The" );
   mySL->Add( "1b", "quick" );
   mySL->Add( "3a", "the" );
   mySL->Add( "3b", "lazy" );
   mySL->Add( "2a", "fox" );
   mySL->Add( "2b", "jumped" );

   // Displays the SortedList.
   Console::WriteLine( "The SortedList initially contains the following:" );
   PrintKeysAndValues( mySL );

   // Removes the element with the key "3b".
   mySL->Remove( "3b" );

   // Displays the current state of the SortedList.
   Console::WriteLine( "After removing \"lazy\":" );
   PrintKeysAndValues( mySL );

   // Removes the element at index 5.
   mySL->RemoveAt( 5 );

   // Displays the current state of the SortedList.
   Console::WriteLine( "After removing the element at index 5:" );
   PrintKeysAndValues( mySL );
}

/*
This code produces the following output.

The SortedList initially contains the following:
        -KEY-   -VALUE-
        1a:     The
        1b:     quick
        1c:     brown
        2a:     fox
        2b:     jumped
        2c:     over
        3a:     the
        3b:     lazy
        3c:     dog

After removing "lazy":
        -KEY-   -VALUE-
        1a:     The
        1b:     quick
        1c:     brown
        2a:     fox
        2b:     jumped
        2c:     over
        3a:     the
        3c:     dog

After removing the element at index 5:
        -KEY-   -VALUE-
        1a:     The
        1b:     quick
        1c:     brown
        2a:     fox
        2b:     jumped
        3a:     the
        3c:     dog
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
RemoveAt

其他资源

在集合中执行不区分区域性的字符串操作


SortedList ..::.RemoveAt 方法

SortedList
.
.
::
.
RemoveAt 方法
SortedList 类

移除 SortedList 对象的指定索引处的元素。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub RemoveAt ( _
    index As Integer _
)
public virtual void RemoveAt(
    int index
)
public:
virtual void RemoveAt(
    int index
)
abstract RemoveAt :
        index:int -> unit
override RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的元素的从零开始的索引。
异常 | 条件
ArgumentOutOfRangeException | index 不在 SortedList 对象的有效索引范围内。
NotSupportedException | SortedList 是只读的。 - 或 - SortedList 具有固定大小。

索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。

在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。 在由连续的元素组成的集合（如列表）中，已移除元素下面的元素将上移以占据空出的位置。如果集合具有索引，则移动的元素的索引也将更新。此行为不适用于元素按概念划分为不同存储桶的集合，如哈希表。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何将元素从 SortedList 对象中移除。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add("3c", "dog")
        mySL.Add("2c", "over")
        mySL.Add("1c", "brown")
        mySL.Add("1a", "The")
        mySL.Add("1b", "quick")
        mySL.Add("3a", "the")
        mySL.Add("3b", "lazy")
        mySL.Add("2a", "fox")
        mySL.Add("2b", "jumped")

        ' Displays the SortedList.
        Console.WriteLine("The SortedList initially contains the following:")
        PrintKeysAndValues(mySL)

        ' Removes the element with the key "3b".
        mySL.Remove("3b")

        ' Displays the current state of the SortedList.
        Console.WriteLine("After removing ""lazy"":")
        PrintKeysAndValues(mySL)

        ' Removes the element at index 5.
        mySL.RemoveAt(5)

        ' Displays the current state of the SortedList.
        Console.WriteLine("After removing the element at index 5:")
        PrintKeysAndValues(mySL)
    End Sub

    Public Shared Sub PrintKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}:" & ControlChars.Tab & _
               "{1}", myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The SortedList initially contains the following:
'     -KEY-    -VALUE-
'     1a:    The
'     1b:    quick
'     1c:    brown
'     2a:    fox
'     2b:    jumped
'     2c:    over
'     3a:    the
'     3b:    lazy
'     3c:    dog
'
' After removing "lazy":
'     -KEY-    -VALUE-
'     1a:    The
'     1b:    quick
'     1c:    brown
'     2a:    fox
'     2b:    jumped
'     2c:    over
'     3a:    the
'     3c:    dog
'
' After removing the element at index 5:
'     -KEY-    -VALUE-
'     1a:    The
'     1b:    quick
'     1c:    brown
'     2a:    fox
'     2b:    jumped
'     3a:    the
'     3c:    dog

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( "3c", "dog" );
      mySL.Add( "2c", "over" );
      mySL.Add( "1c", "brown" );
      mySL.Add( "1a", "The" );
      mySL.Add( "1b", "quick" );
      mySL.Add( "3a", "the" );
      mySL.Add( "3b", "lazy" );
      mySL.Add( "2a", "fox" );
      mySL.Add( "2b", "jumped" );

      // Displays the SortedList.
      Console.WriteLine( "The SortedList initially contains the following:" );
      PrintKeysAndValues( mySL );

      // Removes the element with the key "3b".
      mySL.Remove( "3b" );

      // Displays the current state of the SortedList.
      Console.WriteLine( "After removing \"lazy\":" );
      PrintKeysAndValues( mySL );

      // Removes the element at index 5.
      mySL.RemoveAt( 5 );

      // Displays the current state of the SortedList.
      Console.WriteLine( "After removing the element at index 5:" );
      PrintKeysAndValues( mySL );
   }

   public static void PrintKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t{0}:\t{1}", myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The SortedList initially contains the following:
    -KEY-    -VALUE-
    1a:    The
    1b:    quick
    1c:    brown
    2a:    fox
    2b:    jumped
    2c:    over
    3a:    the
    3b:    lazy
    3c:    dog

After removing "lazy":
    -KEY-    -VALUE-
    1a:    The
    1b:    quick
    1c:    brown
    2a:    fox
    2b:    jumped
    2c:    over
    3a:    the
    3c:    dog

After removing the element at index 5:
    -KEY-    -VALUE-
    1a:    The
    1b:    quick
    1c:    brown
    2a:    fox
    2b:    jumped
    3a:    the
    3c:    dog
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "\t{0}:\t{1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( "3c", "dog" );
   mySL->Add( "2c", "over" );
   mySL->Add( "1c", "brown" );
   mySL->Add( "1a", "The" );
   mySL->Add( "1b", "quick" );
   mySL->Add( "3a", "the" );
   mySL->Add( "3b", "lazy" );
   mySL->Add( "2a", "fox" );
   mySL->Add( "2b", "jumped" );

   // Displays the SortedList.
   Console::WriteLine( "The SortedList initially contains the following:" );
   PrintKeysAndValues( mySL );

   // Removes the element with the key "3b".
   mySL->Remove( "3b" );

   // Displays the current state of the SortedList.
   Console::WriteLine( "After removing \"lazy\":" );
   PrintKeysAndValues( mySL );

   // Removes the element at index 5.
   mySL->RemoveAt( 5 );

   // Displays the current state of the SortedList.
   Console::WriteLine( "After removing the element at index 5:" );
   PrintKeysAndValues( mySL );
}

/*
This code produces the following output.

The SortedList initially contains the following:
        -KEY-   -VALUE-
        1a:     The
        1b:     quick
        1c:     brown
        2a:     fox
        2b:     jumped
        2c:     over
        3a:     the
        3b:     lazy
        3c:     dog

After removing "lazy":
        -KEY-   -VALUE-
        1a:     The
        1b:     quick
        1c:     brown
        2a:     fox
        2b:     jumped
        2c:     over
        3a:     the
        3c:     dog

After removing the element at index 5:
        -KEY-   -VALUE-
        1a:     The
        1b:     quick
        1c:     brown
        2a:     fox
        2b:     jumped
        3a:     the
        3c:     dog
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
Remove


SortedList ..::.SetByIndex 方法

SortedList
.
.
::
.
SetByIndex 方法
SortedList 类

替换 SortedList 对象中指定索引处的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub SetByIndex ( _
    index As Integer, _
    value As Object _
)
public virtual void SetByIndex(
    int index,
    Object value
)
public:
virtual void SetByIndex(
    int index,
    Object^ value
)
abstract SetByIndex :
        index:int *
        value:Object -> unit
override SetByIndex :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
从零开始的索引，在该位置保存 value。
value
类型： System Object
要保存到 SortedList 对象中的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要保存到 SortedList 对象中的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
异常 | 条件
ArgumentOutOfRangeException | index 不在 SortedList 对象的有效索引范围内。

索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。 索引顺序基于排序顺序。当添加元素时，元素将按正确的排序顺序插入 SortedList，同时索引会相应地进行调整。当移除元素时，索引也会相应地进行调整。因此，当在 SortedList 对象中添加或移除元素时，特定键/值对的索引可能会更改。

此方法是 O(1) 操作。

下面的代码示例演示如何替换 SortedList 对象中现有元素的值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(2, "two")
        mySL.Add(3, "three")
        mySL.Add(1, "one")
        mySL.Add(0, "zero")
        mySL.Add(4, "four")

        ' Displays the values of the SortedList.
        Console.WriteLine("The SortedList contains the following" & _
           "values:")
        PrintIndexAndKeysAndValues(mySL)

        ' Replaces the values at index 3 and index 4.
        mySL.SetByIndex(3, "III")
        mySL.SetByIndex(4, "IV")

        ' Displays the updated values of the SortedList.
        Console.WriteLine("After replacing the value at index 3 and index 4,")
        PrintIndexAndKeysAndValues(mySL)
    End Sub 'Main

    Public Shared Sub PrintIndexAndKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-INDEX-" & ControlChars.Tab & _
           "-KEY-" & ControlChars.Tab & "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "[{0}]:" & ControlChars.Tab & _
               "{1}" & ControlChars.Tab & "{2}", i, myList.GetKey(i), _
               myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' The SortedList contains the following values:
'     -INDEX-    -KEY-    -VALUE-
'     [0]:    0    zero
'     [1]:    1    one
'     [2]:    2    two
'     [3]:    3    three
'     [4]:    4    four
'
' After replacing the value at index 3 and index 4,
'     -INDEX-    -KEY-    -VALUE-
'     [0]:    0    zero
'     [1]:    1    one
'     [2]:    2    two
'     [3]:    3    III
'     [4]:    4    IV

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 2, "two" );
      mySL.Add( 3, "three" );
      mySL.Add( 1, "one" );
      mySL.Add( 0, "zero" );
      mySL.Add( 4, "four" );

      // Displays the values of the SortedList.
      Console.WriteLine( "The SortedList contains the following values:" );
      PrintIndexAndKeysAndValues( mySL );

      // Replaces the values at index 3 and index 4.
      mySL.SetByIndex( 3, "III" );
      mySL.SetByIndex( 4, "IV" );

      // Displays the updated values of the SortedList.
      Console.WriteLine( "After replacing the value at index 3 and index 4," );
      PrintIndexAndKeysAndValues( mySL );
   }

   public static void PrintIndexAndKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t[{0}]:\t{1}\t{2}", i, myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

The SortedList contains the following values:
    -INDEX-    -KEY-    -VALUE-
    [0]:    0    zero
    [1]:    1    one
    [2]:    2    two
    [3]:    3    three
    [4]:    4    four

After replacing the value at index 3 and index 4,
    -INDEX-    -KEY-    -VALUE-
    [0]:    0    zero
    [1]:    1    one
    [2]:    2    two
    [3]:    3    III
    [4]:    4    IV
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintIndexAndKeysAndValues( SortedList^ myList )
{
   Console::WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine( "\t[{0}]:\t{1}\t{2}", i, myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 2, "two" );
   mySL->Add( 3, "three" );
   mySL->Add( 1, "one" );
   mySL->Add( 0, "zero" );
   mySL->Add( 4, "four" );

   // Displays the values of the SortedList.
   Console::WriteLine( "The SortedList contains the following values:" );
   PrintIndexAndKeysAndValues( mySL );

   // Replaces the values at index 3 and index 4.
   mySL->SetByIndex( 3, "III" );
   mySL->SetByIndex( 4, "IV" );

   // Displays the updated values of the SortedList.
   Console::WriteLine( "After replacing the value at index 3 and index 4," );
   PrintIndexAndKeysAndValues( mySL );
}

/*
This code produces the following output.

The SortedList contains the following values:
        -INDEX- -KEY-   -VALUE-
        [0]:    0       zero
        [1]:    1       one
        [2]:    2       two
        [3]:    3       three
        [4]:    4       four

After replacing the value at index 3 and index 4,
        -INDEX- -KEY-   -VALUE-
        [0]:    0       zero
        [1]:    1       one
        [2]:    2       two
        [3]:    3       III
        [4]:    4       IV
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
IndexOfKey
IndexOfValue


SortedList ..::.Synchronized 方法

SortedList
.
.
::
.
Synchronized 方法
SortedList 类

返回 SortedList 对象的同步（线程安全）包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True)> _
Public Shared Function Synchronized ( _
    list As SortedList _
) As SortedList
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)]
public static SortedList Synchronized(
    SortedList list
)
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true)]
public:
static SortedList^ Synchronized(
    SortedList^ list
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)>]
static member Synchronized :
        list:SortedList -> SortedList

参数

list
类型： System.Collections SortedList
要同步的 SortedList 对象。

返回值

类型： System.Collections SortedList
SortedList 对象的同步（线程安全）包装。
异常 | 条件
ArgumentNullException | list 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要保证 SortedList 对象的线程安全，必须通过此包装执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：Synchronization。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 属性锁定集合。

Dim myCollection As New SortedList()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

SortedList myCollection = new SortedList();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

SortedList^ myCollection = gcnew SortedList();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

此方法是 O(1) 操作。

下面的代码示例演示如何同步 SortedList 对象、如何确定 SortedList 是否同步以及如何使用同步的 SortedList。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(2, "two")
        mySL.Add(3, "three")
        mySL.Add(1, "one")
        mySL.Add(0, "zero")
        mySL.Add(4, "four")

        ' Creates a synchronized wrapper around the SortedList.
        Dim mySyncdSL As SortedList = SortedList.Synchronized(mySL)

        ' Displays the sychronization status of both SortedLists.
        Dim msg As String
        If mySL.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySL is {0}.", msg)
        If mySyncdSL.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySyncdSL is {0}.", msg)
    End Sub
End Class

' This code produces the following output.
'
' mySL is not synchronized.
' mySyncdSL is synchronized.

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 2, "two" );
      mySL.Add( 3, "three" );
      mySL.Add( 1, "one" );
      mySL.Add( 0, "zero" );
      mySL.Add( 4, "four" );

      // Creates a synchronized wrapper around the SortedList.
      SortedList mySyncdSL = SortedList.Synchronized( mySL );

      // Displays the sychronization status of both SortedLists.
      Console.WriteLine( "mySL is {0}.", mySL.IsSynchronized ? "synchronized" : "not synchronized" );
      Console.WriteLine( "mySyncdSL is {0}.", mySyncdSL.IsSynchronized ? "synchronized" : "not synchronized" );
   }
}
/*
This code produces the following output.

mySL is not synchronized.
mySyncdSL is synchronized.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 2, "two" );
   mySL->Add( 3, "three" );
   mySL->Add( 1, "one" );
   mySL->Add( (int^)0, "zero" );
   mySL->Add( 4, "four" );

   // Creates a synchronized wrapper around the SortedList.
   SortedList^ mySyncdSL = SortedList::Synchronized( mySL );

   // Displays the sychronization status of both SortedLists.
   Console::WriteLine( "mySL is {0}.", mySL->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
   Console::WriteLine( "mySyncdSL is {0}.", mySyncdSL->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
}

/*
This code produces the following output.

mySL is not synchronized.
mySyncdSL is synchronized.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
IsSynchronized
SyncRoot


SortedList ..::.TrimToSize 方法

SortedList
.
.
::
.
TrimToSize 方法
SortedList 类

将容量设置为 SortedList 对象中元素的实际数目。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub TrimToSize
public virtual void TrimToSize()
public:
virtual void TrimToSize()
abstract TrimToSize : unit -> unit
override TrimToSize : unit -> unit
异常 | 条件
NotSupportedException | SortedList 对象是只读的。 - 或 - SortedList 具有固定大小。

如果不向集合中添加新元素，则此方法可用于最小化集合的内存开销。

若要将 SortedList 对象重置为它的初始状态，请在调用 TrimToSize 之前调用 Clear 方法。调整空 SortedList 会将 SortedList 的容量设置为默认容量。 若要将 SortedList 对象重置为它的初始状态，请在调用 TrimToSize 之前调用 Clear 方法。调整空 SortedList 会将 SortedList 的容量设置为默认容量。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的代码示例演示如何裁减 SortedList 对象中未使用的部分以及如何清除它的值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add("one", "The")
        mySL.Add("two", "quick")
        mySL.Add("three", "brown")
        mySL.Add("four", "fox")
        mySL.Add("five", "jumped")

        ' Displays the count, capacity and values of the SortedList.
        Console.WriteLine("Initially,")
        Console.WriteLine("   Count    : {0}", mySL.Count)
        Console.WriteLine("   Capacity : {0}", mySL.Capacity)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(mySL)

        ' Trims the SortedList.
        mySL.TrimToSize()

        ' Displays the count, capacity and values of the SortedList.
        Console.WriteLine("After TrimToSize,")
        Console.WriteLine("   Count    : {0}", mySL.Count)
        Console.WriteLine("   Capacity : {0}", mySL.Capacity)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(mySL)

        ' Clears the SortedList.
        mySL.Clear()

        ' Displays the count, capacity and values of the SortedList.
        Console.WriteLine("After Clear,")
        Console.WriteLine("   Count    : {0}", mySL.Count)
        Console.WriteLine("   Capacity : {0}", mySL.Capacity)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(mySL)

        ' Trims the SortedList again.
        mySL.TrimToSize()

        ' Displays the count, capacity and values of the SortedList.
        Console.WriteLine("After the second TrimToSize,")
        Console.WriteLine("   Count    : {0}", mySL.Count)
        Console.WriteLine("   Capacity : {0}", mySL.Capacity)
        Console.WriteLine("   Values:")
        PrintKeysAndValues(mySL)
    End Sub

    Public Shared Sub PrintKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}:" & ControlChars.Tab & _
               "{1}", myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
'
' Initially,
'    Count    : 5
'    Capacity : 16
'    Values:
'     -KEY-    -VALUE-
'     five:    jumped
'     four:    fox
'     one:    The
'     three:    brown
'     two:    quick
'
' After TrimToSize,
'    Count    : 5
'    Capacity : 5
'    Values:
'     -KEY-    -VALUE-
'     five:    jumped
'     four:    fox
'     one:    The
'     three:    brown
'     two:    quick
'
' After Clear,
'    Count    : 0
'    Capacity : 16
'    Values:
'     -KEY-    -VALUE-
'
'
' After the second TrimToSize,
'    Count    : 0
'    Capacity : 16
'    Values:
'     -KEY-    -VALUE-

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( "one", "The" );
      mySL.Add( "two", "quick" );
      mySL.Add( "three", "brown" );
      mySL.Add( "four", "fox" );
      mySL.Add( "five", "jumped" );

      // Displays the count, capacity and values of the SortedList.
      Console.WriteLine( "Initially," );
      Console.WriteLine( "   Count    : {0}", mySL.Count );
      Console.WriteLine( "   Capacity : {0}", mySL.Capacity );
      Console.WriteLine( "   Values:" );
      PrintKeysAndValues( mySL );

      // Trims the SortedList.
      mySL.TrimToSize();

      // Displays the count, capacity and values of the SortedList.
      Console.WriteLine( "After TrimToSize," );
      Console.WriteLine( "   Count    : {0}", mySL.Count );
      Console.WriteLine( "   Capacity : {0}", mySL.Capacity );
      Console.WriteLine( "   Values:" );
      PrintKeysAndValues( mySL );

      // Clears the SortedList.
      mySL.Clear();

      // Displays the count, capacity and values of the SortedList.
      Console.WriteLine( "After Clear," );
      Console.WriteLine( "   Count    : {0}", mySL.Count );
      Console.WriteLine( "   Capacity : {0}", mySL.Capacity );
      Console.WriteLine( "   Values:" );
      PrintKeysAndValues( mySL );

      // Trims the SortedList again.
      mySL.TrimToSize();

      // Displays the count, capacity and values of the SortedList.
      Console.WriteLine( "After the second TrimToSize," );
      Console.WriteLine( "   Count    : {0}", mySL.Count );
      Console.WriteLine( "   Capacity : {0}", mySL.Capacity );
      Console.WriteLine( "   Values:" );
      PrintKeysAndValues( mySL );
   }

   public static void PrintKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t{0}:\t{1}", myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

Initially,
   Count    : 5
   Capacity : 16
   Values:
    -KEY-    -VALUE-
    five:    jumped
    four:    fox
    one:    The
    three:    brown
    two:    quick

After TrimToSize,
   Count    : 5
   Capacity : 5
   Values:
    -KEY-    -VALUE-
    five:    jumped
    four:    fox
    one:    The
    three:    brown
    two:    quick

After Clear,
   Count    : 0
   Capacity : 16
   Values:
    -KEY-    -VALUE-

After the second TrimToSize,
   Count    : 0
   Capacity : 16
   Values:
    -KEY-    -VALUE-
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
void PrintKeysAndValues( SortedList^ myList )
{
   Console::WriteLine(  "\t-KEY-\t-VALUE-" );
   for ( int i = 0; i < myList->Count; i++ )
   {
      Console::WriteLine(  "\t{0}:\t{1}", myList->GetKey( i ), myList->GetByIndex( i ) );

   }
   Console::WriteLine();
}

int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( "one", "The" );
   mySL->Add( "two", "quick" );
   mySL->Add( "three", "brown" );
   mySL->Add( "four", "fox" );
   mySL->Add( "five", "jumped" );

   // Displays the count, capacity and values of the SortedList.
   Console::WriteLine(  "Initially," );
   Console::WriteLine(  "   Count    : {0}", mySL->Count );
   Console::WriteLine(  "   Capacity : {0}", mySL->Capacity );
   Console::WriteLine(  "   Values:" );
   PrintKeysAndValues( mySL );

   // Trims the SortedList.
   mySL->TrimToSize();

   // Displays the count, capacity and values of the SortedList.
   Console::WriteLine(  "After TrimToSize," );
   Console::WriteLine(  "   Count    : {0}", mySL->Count );
   Console::WriteLine(  "   Capacity : {0}", mySL->Capacity );
   Console::WriteLine(  "   Values:" );
   PrintKeysAndValues( mySL );

   // Clears the SortedList.
   mySL->Clear();

   // Displays the count, capacity and values of the SortedList.
   Console::WriteLine(  "After Clear," );
   Console::WriteLine(  "   Count    : {0}", mySL->Count );
   Console::WriteLine(  "   Capacity : {0}", mySL->Capacity );
   Console::WriteLine(  "   Values:" );
   PrintKeysAndValues( mySL );

   // Trims the SortedList again.
   mySL->TrimToSize();

   // Displays the count, capacity and values of the SortedList.
   Console::WriteLine(  "After the second TrimToSize," );
   Console::WriteLine(  "   Count    : {0}", mySL->Count );
   Console::WriteLine(  "   Capacity : {0}", mySL->Capacity );
   Console::WriteLine(  "   Values:" );
   PrintKeysAndValues( mySL );
}

/*
This code produces the following output.

Initially,
   Count    : 5
   Capacity : 16
   Values:
        -KEY-   -VALUE-
        five:   jumped
        four:   fox
        one:    The
        three:  brown
        two:    quick

After TrimToSize,
   Count    : 5
   Capacity : 5
   Values:
        -KEY-   -VALUE-
        five:   jumped
        four:   fox
        one:    The
        three:  brown
        two:    quick

After Clear,
   Count    : 0
   Capacity : 16
   Values:
        -KEY-   -VALUE-

After the second TrimToSize,
   Count    : 0
   Capacity : 16
   Values:
        -KEY-   -VALUE-

*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
Clear
Capacity
Count


SortedList 属性

SortedList 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SortedList 类

SortedList 类型公开以下成员。

名称 说明
页首

参考

SortedList 类
System.Collections 命名空间


SortedList ..::.Capacity 属性

SortedList
.
.
::
.
Capacity 属性
SortedList 类

获取或设置 SortedList 对象的容量。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Property Capacity As Integer
    Get
    Set
public virtual int Capacity { get; set; }
public:
virtual property int Capacity {
    int get ();
    void set (int value);
}
abstract Capacity : int with get, set
override Capacity : int with get, set

属性值

类型： System Int32
SortedList 对象可包含的元素数。
异常 | 条件
ArgumentOutOfRangeException | 分配的值小于 SortedList 对象中的当前元素数。
OutOfMemoryException | 系统中没有足够的可用内存。

Capacity 是 SortedList 对象可以存储的元素数。Count 是 SortedList 中的实际元素数。 Capacity 是 SortedList 对象可以存储的元素数。Count 是 SortedList 中的实际元素数。

Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来使容量自动增加。 Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来使容量自动增加。

可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。如果显式设置 Capacity 的值，内部数组也会重新分配以适应指定的容量。 可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。如果显式设置 Capacity 的值，内部数组也会重新分配以适应指定的容量。

检索此属性值的运算复杂度为 O(1)；设置此属性的运算复杂度为 O(n)，其中，n 是新容量。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
TrimToSize


SortedList ..::.Count 属性

SortedList
.
.
::
.
Count 属性
SortedList 类

获取 SortedList 对象中包含的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Count As Integer
    Get
public virtual int Count { get; }
public:
virtual property int Count {
    int get ();
}
abstract Count : int
override Count : int

属性值

类型： System Int32
SortedList 对象中包含的元素数。

实现

每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。

Capacity 是 SortedList 对象可以存储的元素数。Count 是 SortedList 中的实际元素数。 Capacity 是 SortedList 对象可以存储的元素数。Count 是 SortedList 中的实际元素数。

Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来使容量自动增加。 Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity，则通过在复制旧元素和添加新元素之前重新分配内部数组来使容量自动增加。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
Capacity


SortedList ..::.IsFixedSize 属性

SortedList
.
.
::
.
IsFixedSize 属性
SortedList 类

获取一个值，该值指示 SortedList 对象是否具有固定大小。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsFixedSize As Boolean
    Get
public virtual bool IsFixedSize { get; }
public:
virtual property bool IsFixedSize {
    bool get ();
}
abstract IsFixedSize : bool
override IsFixedSize : bool

属性值

类型： System Boolean
如果 SortedList 对象具有固定大小，则为 true；否则为 false。默认值为 false。 如果 SortedList 对象具有固定大小，则为 true；否则为 false。默认值为 false。

实现

大小固定的集合在创建之后不允许添加或移除元素，但允许修改现有元素。

固定大小的集合只是一个具有用于防止添加和移除元素的包装的集合；因此，如果更改基础集合（包括添加和移除元素），则固定大小的集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间


SortedList ..::.IsReadOnly 属性

SortedList
.
.
::
.
IsReadOnly 属性
SortedList 类

获取一个值，该值指示 SortedList 对象是否为只读。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsReadOnly As Boolean
    Get
public virtual bool IsReadOnly { get; }
public:
virtual property bool IsReadOnly {
    bool get ();
}
abstract IsReadOnly : bool
override IsReadOnly : bool

属性值

类型： System Boolean
如果 SortedList 对象为只读，则为 true；否则为 false。默认值为 false。 如果 SortedList 对象为只读，则为 true；否则为 false。默认值为 false。

实现

只读集合在创建后就不能再添加、移除或修改元素。

只读集合只是一个具有用于防止修改的包装的集合；因此，如果更改基础集合，则只读集合将反映那些更改。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间


SortedList ..::.IsSynchronized 属性

SortedList
.
.
::
.
IsSynchronized 属性
SortedList 类

获取一个值，该值指示对 SortedList 对象的访问是否同步（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsSynchronized As Boolean
    Get
public virtual bool IsSynchronized { get; }
public:
virtual property bool IsSynchronized {
    bool get ();
}
abstract IsSynchronized : bool
override IsSynchronized : bool

属性值

类型： System Boolean
如果对 SortedList 对象的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。 如果对 SortedList 对象的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。

实现

若要保证 SortedList 对象的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 属性锁定集合。

Dim myCollection As New SortedList()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

SortedList myCollection = new SortedList();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

SortedList^ myCollection = gcnew SortedList();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

下面的代码示例演示如何同步 SortedList 对象、如何确定 SortedList 是否同步以及如何使用同步的 SortedList。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList

    Public Shared Sub Main()

        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add(2, "two")
        mySL.Add(3, "three")
        mySL.Add(1, "one")
        mySL.Add(0, "zero")
        mySL.Add(4, "four")

        ' Creates a synchronized wrapper around the SortedList.
        Dim mySyncdSL As SortedList = SortedList.Synchronized(mySL)

        ' Displays the sychronization status of both SortedLists.
        Dim msg As String
        If mySL.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySL is {0}.", msg)
        If mySyncdSL.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySyncdSL is {0}.", msg)
    End Sub
End Class

' This code produces the following output.
'
' mySL is not synchronized.
' mySyncdSL is synchronized.

using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add( 2, "two" );
      mySL.Add( 3, "three" );
      mySL.Add( 1, "one" );
      mySL.Add( 0, "zero" );
      mySL.Add( 4, "four" );

      // Creates a synchronized wrapper around the SortedList.
      SortedList mySyncdSL = SortedList.Synchronized( mySL );

      // Displays the sychronization status of both SortedLists.
      Console.WriteLine( "mySL is {0}.", mySL.IsSynchronized ? "synchronized" : "not synchronized" );
      Console.WriteLine( "mySyncdSL is {0}.", mySyncdSL.IsSynchronized ? "synchronized" : "not synchronized" );
   }
}
/*
This code produces the following output.

mySL is not synchronized.
mySyncdSL is synchronized.
*/

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew SortedList;
   mySL->Add( 2, "two" );
   mySL->Add( 3, "three" );
   mySL->Add( 1, "one" );
   mySL->Add( (int^)0, "zero" );
   mySL->Add( 4, "four" );

   // Creates a synchronized wrapper around the SortedList.
   SortedList^ mySyncdSL = SortedList::Synchronized( mySL );

   // Displays the sychronization status of both SortedLists.
   Console::WriteLine( "mySL is {0}.", mySL->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
   Console::WriteLine( "mySyncdSL is {0}.", mySyncdSL->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
}

/*
This code produces the following output.

mySL is not synchronized.
mySyncdSL is synchronized.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
SyncRoot
Synchronized


SortedList ..::.Item 属性

SortedList
.
.
::
.
Item 属性
SortedList 类

获取并设置与 SortedList 对象中的特定键相关联的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Property Item ( _
    key As Object _
) As Object
    Get
    Set
public virtual Object this[
    Object key
] { get; set; }
public:
virtual property Object^ Item[Object^ key] {
    Object^ get (Object^ key);
    void set (Object^ key, Object^ value);
}
abstract Item : Object with get, set
override Item : Object with get, set

参数

key
类型： System Object
与要获取或设置的值相关联的键。

属性值

类型： System Object
如果找到 key，则为与 SortedList 对象中的 key 参数相关联的值；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 设置了该属性，并且 SortedList 对象为只读。 - 或 - 设置该属性，集合中不存在 key，而且 SortedList 具有固定大小。
OutOfMemoryException | 没有足够的可用内存来将元素添加到 SortedList。
InvalidOperationException | 比较器引发异常。

通过指定下面的语法：myCollection[key]，可以使用 Item 属性访问集合中的特定元素。

通过设置 SortedList 对象中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue)），还可以使用此属性添加新元素。但是，如果指定的键已经存在于 SortedList 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 通过设置 SortedList 对象中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue)），还可以使用此属性添加新元素。但是，如果指定的键已经存在于 SortedList 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。 通过设置 SortedList 对象中不存在的键值（例如，myCollection["myNonexistentKey"] = myValue)），还可以使用此属性添加新元素。但是，如果指定的键已经存在于 SortedList 中，则设置 Item 属性将覆盖旧值。相比之下，Add 方法不修改现有元素。

键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。若要区分由于未找到指定键而返回的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 和由于指定键的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 而返回的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），请使用 Contains 方法或 ContainsKey 方法确定列表中是否存在该键。 键不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但值可以。若要区分由于未找到指定键而返回的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 和由于指定键的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 而返回的 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），请使用 Contains 方法或 ContainsKey 方法确定列表中是否存在该键。

SortedList 的元素将按照特定的 IComparer 实现（在创建 SortedList 时指定）或按照键本身提供的 IComparable 实现并依据键来进行排序。

C# 语言使用 this 关键字来定义索引器而不是通过实现 Keys 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。 C# 语言使用 this 关键字来定义索引器而不是通过实现 Keys 属性。Visual Basic 将 Item 实现为默认属性，该属性提供相同的索引功能。

检索此属性的值的运算复杂度为 O(log n)，其中 n 为 Count。如果 SortedList 中已存在键，则设置此属性的运算复杂度为 O(log n)。如果键不存在于列表中，则对于未排序的数据，设置此属性的运算复杂度为 O(n)，如果在列表末尾添加了新元素，则设置此属性的运算复杂度为 O(log n)。如果插入操作导致大小调整，则运算复杂度为 O(n)。 检索此属性的值的运算复杂度为 O(log n)，其中 n 为 Count。如果 SortedList 中已存在键，则设置此属性的运算复杂度为 O(log n)。如果键不存在于列表中，则对于未排序的数据，设置此属性的运算复杂度为 O(n)，如果在列表末尾添加了新元素，则设置此属性的运算复杂度为 O(log n)。如果插入操作导致大小调整，则运算复杂度为 O(n)。 检索此属性的值的运算复杂度为 O(log n)，其中 n 为 Count。如果 SortedList 中已存在键，则设置此属性的运算复杂度为 O(log n)。如果键不存在于列表中，则对于未排序的数据，设置此属性的运算复杂度为 O(n)，如果在列表末尾添加了新元素，则设置此属性的运算复杂度为 O(log n)。如果插入操作导致大小调整，则运算复杂度为 O(n)。 检索此属性的值的运算复杂度为 O(log n)，其中 n 为 Count。如果 SortedList 中已存在键，则设置此属性的运算复杂度为 O(log n)。如果键不存在于列表中，则对于未排序的数据，设置此属性的运算复杂度为 O(n)，如果在列表末尾添加了新元素，则设置此属性的运算复杂度为 O(log n)。如果插入操作导致大小调整，则运算复杂度为 O(n)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
Add
Contains
ContainsKey

其他资源

在集合中执行不区分区域性的字符串操作


SortedList ..::.Keys 属性

SortedList
.
.
::
.
Keys 属性
SortedList 类

获取 SortedList 对象中的键。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Keys As ICollection
    Get
public virtual ICollection Keys { get; }
public:
virtual property ICollection^ Keys {
    ICollection^ get ();
}
abstract Keys : ICollection
override Keys : ICollection

属性值

类型： System.Collections ICollection
包含 SortedList 对象中的键的 ICollection 对象。

实现

ICollection 对象是 SortedList 对象的键的只读视图。对基础 SortedList 所作的修改会立即在 ICollection 中反映出来。 ICollection 对象是 SortedList 对象的键的只读视图。对基础 SortedList 所作的修改会立即在 ICollection 中反映出来。

ICollection 的元素按照与 SortedList 的键的相同顺序进行排序。

此属性类似于 GetKeyList 方法，但返回 ICollection 对象而不是 IList 对象。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
ICollection
Values
GetKeyList

其他资源

在集合中执行不区分区域性的字符串操作


SortedList ..::.SyncRoot 属性

SortedList
.
.
::
.
SyncRoot 属性
SortedList 类

获取一个对象，该对象可用于同步对 SortedList 对象的访问。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property SyncRoot As Object
    Get
public virtual Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get ();
}
abstract SyncRoot : Object
override SyncRoot : Object

属性值

类型： System Object
一个对象，该对象可用于同步对 SortedList 对象的访问。

实现

若要创建 SortedList 对象的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 SortedList 同步版本。同步代码必须在 SortedList 的 SyncRoot 上执行操作，而不是直接在 SortedList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 SortedList 对象。 若要创建 SortedList 对象的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 SortedList 同步版本。同步代码必须在 SortedList 的 SyncRoot 上执行操作，而不是直接在 SortedList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 SortedList 对象。 若要创建 SortedList 对象的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 SortedList 同步版本。同步代码必须在 SortedList 的 SyncRoot 上执行操作，而不是直接在 SortedList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 SortedList 对象。 若要创建 SortedList 对象的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 SortedList 同步版本。同步代码必须在 SortedList 的 SyncRoot 上执行操作，而不是直接在 SortedList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 SortedList 对象。 若要创建 SortedList 对象的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 SortedList 同步版本。同步代码必须在 SortedList 的 SyncRoot 上执行操作，而不是直接在 SortedList 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 SortedList 对象。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 属性锁定集合。

Dim myCollection As New SortedList()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next item
End SyncLock

SortedList myCollection = new SortedList();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

SortedList^ myCollection = gcnew SortedList();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
IsSynchronized
Synchronized


SortedList ..::.Values 属性

SortedList
.
.
::
.
Values 属性
SortedList 类

获取 SortedList 对象中的值。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Values As ICollection
    Get
public virtual ICollection Values { get; }
public:
virtual property ICollection^ Values {
    ICollection^ get ();
}
abstract Values : ICollection
override Values : ICollection

属性值

类型： System.Collections ICollection
ICollection 对象，它包含 SortedList 对象中的值。

实现

ICollection 对象是 SortedList 对象的值的只读视图。对基础 SortedList 所作的修改会立即在 ICollection 中反映出来。 ICollection 对象是 SortedList 对象的值的只读视图。对基础 SortedList 所作的修改会立即在 ICollection 中反映出来。

ICollection 的元素按照与 SortedList 的值的相同顺序进行排序。

此属性类似于 GetValueList 方法，但返回 ICollection 对象而不是 IList 对象。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SortedList 类
SortedList 成员
System.Collections 命名空间
ICollection
Keys
GetValueList

其他资源

在集合中执行不区分区域性的字符串操作


Stack 类

Stack 类
成员

表示对象的简单的后进先出非泛型集合。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class Stack _
    Implements ICollection, IEnumerable, ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Stack : ICollection, IEnumerable,
    ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Stack : ICollection, IEnumerable,
    ICloneable
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type Stack =
    class
        interface ICollection
        interface IEnumerable
        interface ICloneable
    end

有关此集合的泛型版本，请参见 System.Collections.Generic..::.Stack<(Of <(T>)>)。

将 Stack 实现为循环缓冲区。

Stack 的容量是 Stack 可以容纳的元素数。随着向 Stack 中添加元素，容量通过重新分配按需自动增加。 Stack 的容量是 Stack 可以容纳的元素数。随着向 Stack 中添加元素，容量通过重新分配按需自动增加。

如果 Count 小于堆栈的容量，则 Push 为 O(1) 操作。如果需要增加容量以容纳新元素，则 Push 成为 O(n) 操作，其中 n 为 Count。Pop 的运算复杂度为 O(1)。 如果 Count 小于堆栈的容量，则 Push 为 O(1) 操作。如果需要增加容量以容纳新元素，则 Push 成为 O(n) 操作，其中 n 为 Count。Pop 的运算复杂度为 O(1)。 如果 Count 小于堆栈的容量，则 Push 为 O(1) 操作。如果需要增加容量以容纳新元素，则 Push 成为 O(n) 操作，其中 n 为 Count。Pop 的运算复杂度为 O(1)。

Stack 接受 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 作为有效值并且允许重复的元素。

下面的示例说明如何创建 Stack 并向其添加值，以及如何打印出其值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesStack

    Public Shared Sub Main()

        ' Creates and initializes a new Stack.
        Dim myStack As New Stack()
        myStack.Push("Hello")
        myStack.Push("World")
        myStack.Push("!")

        ' Displays the properties and values of the Stack.
        Console.WriteLine("myStack")
        Console.WriteLine(ControlChars.Tab & "Count:    {0}", myStack.Count)
        Console.Write(ControlChars.Tab & "Values:")
        PrintValues(myStack)
    End Sub

    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("    {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' myStack
'     Count:     3
'     Values:    !    World    Hello

 using System;
 using System.Collections;
 public class SamplesStack  {

    public static void Main()  {

       // Creates and initializes a new Stack.
       Stack myStack = new Stack();
       myStack.Push("Hello");
       myStack.Push("World");
       myStack.Push("!");

       // Displays the properties and values of the Stack.
       Console.WriteLine( "myStack" );
       Console.WriteLine( "\tCount:    {0}", myStack.Count );
       Console.Write( "\tValues:" );
       PrintValues( myStack );
    }

    public static void PrintValues( IEnumerable myCollection )  {
       foreach ( Object obj in myCollection )
          Console.Write( "    {0}", obj );
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 myStack
     Count:    3
     Values:    !    World    Hello
 */

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{

   // Creates and initializes a new Stack.
   Stack^ myStack = gcnew Stack;
   myStack->Push( "Hello" );
   myStack->Push( "World" );
   myStack->Push( "!" );

   // Displays the properties and values of the Stack.
   Console::WriteLine( "myStack" );
   Console::WriteLine( "\tCount:    {0}", myStack->Count );
   Console::Write( "\tValues:" );
   PrintValues( myStack );
}

void PrintValues( IEnumerable^ myCollection )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "    {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 myStack
     Count:    3
     Values:    !    World    Hello
 */

System.Collections System.Collections..::.StackStack

此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。 此类型的公共静态（在 Visual Basic 中为 Shared）成员是线程安全的。但不能保证任何实例成员是线程安全的。

若要保证 Stack 的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 成员
System.Collections 命名空间
System.Collections.Generic Stack T


Stack 成员

Stack 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Stack 类

表示对象的简单的后进先出非泛型集合。

Stack 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Stack 类
System.Collections 命名空间


Stack 构造函数

Stack 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Stack 类

初始化 Stack 类的新实例。

名称 说明
页首

参考

Stack 类
Stack 成员
System.Collections 命名空间


Stack 构造函数

Stack 构造函数
Stack 类

初始化 Stack 类的新实例，该实例为空并且具有默认初始容量。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New
public Stack()
public:
Stack()
new : unit -> Stack

Stack 的容量是 Stack 可以容纳的元素数。向 Stack 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。 Stack 的容量是 Stack 可以容纳的元素数。向 Stack 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 Stack 中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度是 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
Stack 重载
System.Collections 命名空间


Stack 构造函数 (ICollection)

Stack 构造函数 (ICollection)
Stack 类

初始化 Stack 类的新实例，该实例包含从指定集合复制的元素并且具有与所复制的元素数相同的初始容量。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    col As ICollection _
)
public Stack(
    ICollection col
)
public:
Stack(
    ICollection^ col
)
new :
        col:ICollection -> Stack

参数

col
类型： System.Collections ICollection
ICollection，从其中复制元素。
异常 | 条件
ArgumentNullException | col 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Stack 的容量是 Stack 可以容纳的元素数。向 Stack 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。 Stack 的容量是 Stack 可以容纳的元素数。向 Stack 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 Stack 中添加元素时执行大量的大小调整操作。

按照由 ICollection 的 IEnumerator 读取元素的顺序将这些元素复制到 Stack 中。

此构造函数的运算复杂度为 O(n)，其中 n 是 col 中元素的个数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
Stack 重载
System.Collections 命名空间
ICollection
IEnumerator


Stack 构造函数 (Int32)

Stack 构造函数 (Int32)
Stack 类

初始化 Stack 类的新实例，该实例为空并且具有指定的初始容量或默认初始容量（这两个容量中的较大者）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Sub New ( _
    initialCapacity As Integer _
)
public Stack(
    int initialCapacity
)
public:
Stack(
    int initialCapacity
)
new :
        initialCapacity:int -> Stack

参数

initialCapacity
类型： System Int32
Stack 可包含的初始元素数。
异常 | 条件
ArgumentOutOfRangeException | initialCapacity 小于零。

Stack 的容量是 Stack 可以容纳的元素数。向 Stack 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。 Stack 的容量是 Stack 可以容纳的元素数。向 Stack 添加元素时，将通过重新分配内部数组，根据需要自动增大容量。

如果可以估计集合的大小，那么当指定初始容量后，将无需在向 Stack 中添加元素时执行大量的大小调整操作。

此构造函数的运算复杂度为 O(n)，其中 n 是 initialCapacity。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
Stack 重载
System.Collections 命名空间


Stack 方法

Stack 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Stack 类

Stack 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Stack 类
System.Collections 命名空间


Stack ..::.Clear 方法

Stack
.
.
::
.
Clear 方法
Stack 类

从 Stack 中移除所有对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Clear
public virtual void Clear()
public:
virtual void Clear()
abstract Clear : unit -> unit
override Clear : unit -> unit

Count 被设置为零，并且对来自该集合元素的其他对象的引用也被释放。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的示例说明如何清除 Stack 的值。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesStack

    Public Shared Sub Main()

        ' Creates and initializes a new Stack.
        Dim myStack As New Stack()
        myStack.Push("The")
        myStack.Push("quick")
        myStack.Push("brown")
        myStack.Push("fox")
        myStack.Push("jumped")

        ' Displays the count and values of the Stack.
        Console.WriteLine("Initially,")
        Console.WriteLine("   Count    : {0}", myStack.Count)
        Console.Write("   Values:")
        PrintValues(myStack)

        ' Clears the Stack.
        myStack.Clear()

        ' Displays the count and values of the Stack.
        Console.WriteLine("After Clear,")
        Console.WriteLine("   Count    : {0}", myStack.Count)
        Console.Write("   Values:")
        PrintValues(myStack)

    End Sub

    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("    {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class

' This code produces the following output.
'
' Initially,
'    Count    : 5
'    Values:    jumped    fox    brown    quick    The
' After Clear,
'    Count    : 0
'    Values:

 using System;
 using System.Collections;

 public class SamplesStack  {

    public static void Main()  {

       // Creates and initializes a new Stack.
       Stack myStack = new Stack();
       myStack.Push( "The" );
       myStack.Push( "quick" );
       myStack.Push( "brown" );
       myStack.Push( "fox" );
       myStack.Push( "jumped" );

       // Displays the count and values of the Stack.
       Console.WriteLine( "Initially," );
       Console.WriteLine( "   Count    : {0}", myStack.Count );
       Console.Write( "   Values:" );
       PrintValues( myStack );

       // Clears the Stack.
       myStack.Clear();

       // Displays the count and values of the Stack.
       Console.WriteLine( "After Clear," );
       Console.WriteLine( "   Count    : {0}", myStack.Count );
       Console.Write( "   Values:" );
       PrintValues( myStack );

    }

    public static void PrintValues( IEnumerable myCollection )  {
       foreach ( Object obj in myCollection )
          Console.Write( "    {0}", obj );
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 Initially,
    Count    : 5
    Values:    jumped    fox    brown    quick    The
 After Clear,
    Count    : 0
    Values:
 */

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{

   // Creates and initializes a new Stack.
   Stack^ myStack = gcnew Stack;
   myStack->Push( "The" );
   myStack->Push( "quick" );
   myStack->Push( "brown" );
   myStack->Push( "fox" );
   myStack->Push( "jumped" );

   // Displays the count and values of the Stack.
   Console::WriteLine( "Initially," );
   Console::WriteLine( "   Count    : {0}", myStack->Count );
   Console::Write( "   Values:" );
   PrintValues( myStack );

   // Clears the Stack.
   myStack->Clear();

   // Displays the count and values of the Stack.
   Console::WriteLine( "After Clear," );
   Console::WriteLine( "   Count    : {0}", myStack->Count );
   Console::Write( "   Values:" );
   PrintValues( myStack );
}

void PrintValues( IEnumerable^ myCollection )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "    {0}", obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Initially,
    Count    : 5
    Values:    jumped    fox    brown    quick    The
 After Clear,
    Count    : 0
    Values:
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间


Stack ..::.Clone 方法

Stack
.
.
::
.
Clone 方法
Stack 类

创建 Stack 的浅表副本。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Clone As Object
public virtual Object Clone()
public:
virtual Object^ Clone()
abstract Clone : unit -> Object
override Clone : unit -> Object

返回值

类型： System Object
Stack 的浅表副本。

实现

集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。 集合的浅表副本仅复制集合的元素（不论它们是引用类型还是值类型），但不复制引用所引用的对象。新集合中的引用与原始集合中的引用指向相同的对象。

与之相对，集合的深层副本将复制这些元素以及由它们直接或间接引用的所有内容。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间


Stack ..::.Contains 方法

Stack
.
.
::
.
Contains 方法
Stack 类

确定某元素是否在 Stack 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Contains ( _
    obj As Object _
) As Boolean
public virtual bool Contains(
    Object obj
)
public:
virtual bool Contains(
    Object^ obj
)
abstract Contains :
        obj:Object -> bool
override Contains :
        obj:Object -> bool

参数

obj
类型： System Object
要在 Stack 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要在 Stack 中查找的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
如果在 Stack 中找到 obj，则为 true；否则为 false。

此方法通过调用 Object..::.Equals 确定相等性。

此方法执行线性搜索；因此，此方法的运算复杂度为 O(n)，其中 n 是 Count。

从 .NET Framework 2.0 开始，此方法对 obj 使用该集合对象的 Equals 和 CompareTo 方法来确定 item 是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 obj 参数的 Equals 和 CompareTo 方法来确定的。 从 .NET Framework 2.0 开始，此方法对 obj 使用该集合对象的 Equals 和 CompareTo 方法来确定 item 是否存在。在 .NET Framework 的较早版本中，这是通过对集合中的对象使用 obj 参数的 Equals 和 CompareTo 方法来确定的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间

其他资源

执行不区分区域性的字符串操作


Stack ..::.CopyTo 方法

Stack
.
.
::
.
CopyTo 方法
Stack 类

从指定数组索引开始将 Stack 复制到现有一维 Array 中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
public virtual void CopyTo(
    Array array,
    int index
)
public:
virtual void CopyTo(
    Array^ array,
    int index
)
abstract CopyTo :
        array:Array *
        index:int -> unit
override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
作为从 Stack 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 Stack 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
index
类型： System Int32
array 中从零开始的索引，将在此处开始复制。

实现

异常 | 条件
ArgumentNullException | array 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | index 小于零。
ArgumentException | array 是多维数组。 - 或 - 源 Stack 中的元素数大于从 index 到目标 array 结尾处之间的可用空间。
InvalidCastException | 无法自动将源 Stack 的类型强制转换为目标 array 的类型。

按后进先出的顺序将元素复制到数组，类似于连续调用 Pop 所返回的元素的顺序。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的示例演示如何将 Stack 复制到一维数组中。

Imports System
Imports System.Collections

Public Class SamplesStack

    Public Shared Sub Main()

        ' Creates and initializes the source Stack.
        Dim mySourceQ As New Stack()
        mySourceQ.Push("barn")
        mySourceQ.Push("the")
        mySourceQ.Push("in")
        mySourceQ.Push("cats")
        mySourceQ.Push("napping")
        mySourceQ.Push("three")

        ' Creates and initializes the one-dimensional target Array.
        Dim myTargetArray As Array = Array.CreateInstance(GetType(String), 15)
        myTargetArray.SetValue("The", 0)
        myTargetArray.SetValue("quick", 1)
        myTargetArray.SetValue("brown", 2)
        myTargetArray.SetValue("fox", 3)
        myTargetArray.SetValue("jumped", 4)
        myTargetArray.SetValue("over", 5)
        myTargetArray.SetValue("the", 6)
        myTargetArray.SetValue("lazy", 7)
        myTargetArray.SetValue("dog", 8)

        ' Displays the values of the target Array.
        Console.WriteLine("The target Array contains the " & _
           "following (before and after copying):")
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source Stack to the target Array, starting
        ' at index 6.
        mySourceQ.CopyTo(myTargetArray, 6)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source Stack to a new standard array.
        Dim myStandardArray As Object() = mySourceQ.ToArray()

        ' Displays the values of the new standard array.
        Console.WriteLine("The new standard array contains the following:")
        PrintValues(myStandardArray, " "c)
    End Sub

    Overloads Public Shared Sub PrintValues(myArr As Array, _
       mySeparator As Char)

        Dim myObj As Object
        For Each myObj In  myArr
            Console.Write("{0}{1}", mySeparator, myObj)
        Next myObj
        Console.WriteLine()
    End Sub

End Class

' This code produces the following output.
'
' The target Array contains the following (before and after copying):
'  The quick brown fox jumped over the lazy dog
'  The quick brown fox jumped over three napping cats in the barn
' The new standard array contains the following:
'  three napping cats in the barn

 using System;
 using System.Collections;
 public class SamplesStack  {

    public static void Main()  {

       // Creates and initializes the source Stack.
       Stack mySourceQ = new Stack();
       mySourceQ.Push( "barn" );
       mySourceQ.Push( "the" );
       mySourceQ.Push( "in" );
       mySourceQ.Push( "cats" );
       mySourceQ.Push( "napping" );
       mySourceQ.Push( "three" );

       // Creates and initializes the one-dimensional target Array.
       Array myTargetArray=Array.CreateInstance( typeof(String), 15 );
       myTargetArray.SetValue( "The", 0 );
       myTargetArray.SetValue( "quick", 1 );
       myTargetArray.SetValue( "brown", 2 );
       myTargetArray.SetValue( "fox", 3 );
       myTargetArray.SetValue( "jumped", 4 );
       myTargetArray.SetValue( "over", 5 );
       myTargetArray.SetValue( "the", 6 );
       myTargetArray.SetValue( "lazy", 7 );
       myTargetArray.SetValue( "dog", 8 );

       // Displays the values of the target Array.
       Console.WriteLine( "The target Array contains the following (before and after copying):" );
       PrintValues( myTargetArray, ' ' );

       // Copies the entire source Stack to the target Array, starting at index 6.
       mySourceQ.CopyTo( myTargetArray, 6 );

       // Displays the values of the target Array.
       PrintValues( myTargetArray, ' ' );

       // Copies the entire source Stack to a new standard array.
       Object[] myStandardArray = mySourceQ.ToArray();

       // Displays the values of the new standard array.
       Console.WriteLine( "The new standard array contains the following:" );
       PrintValues( myStandardArray, ' ' );

    }

    public static void PrintValues( Array myArr, char mySeparator )  {
       foreach ( Object myObj in myArr )  {
          Console.Write( "{0}{1}", mySeparator, myObj );
       }
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over three napping cats in the barn
 The new standard array contains the following:
  three napping cats in the barn
 */

using namespace System;
using namespace System::Collections;
void PrintValues( Array^ myArr, char mySeparator );
int main()
{
   // Creates and initializes the source Stack.
   Stack^ mySourceQ = gcnew Stack;
   mySourceQ->Push( "barn" );
   mySourceQ->Push( "the" );
   mySourceQ->Push( "in" );
   mySourceQ->Push( "cats" );
   mySourceQ->Push( "napping" );
   mySourceQ->Push( "three" );

   // Creates and initializes the one-dimensional target Array.
   Array^ myTargetArray = Array::CreateInstance( String::typeid, 15 );
   myTargetArray->SetValue( "The", 0 );
   myTargetArray->SetValue( "quick", 1 );
   myTargetArray->SetValue( "brown", 2 );
   myTargetArray->SetValue( "fox", 3 );
   myTargetArray->SetValue( "jumped", 4 );
   myTargetArray->SetValue( "over", 5 );
   myTargetArray->SetValue( "the", 6 );
   myTargetArray->SetValue( "lazy", 7 );
   myTargetArray->SetValue( "dog", 8 );

   // Displays the values of the target Array.
   Console::WriteLine( "The target Array contains the following (before and after copying):" );
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source Stack to the target Array, starting at index 6.
   mySourceQ->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source Stack to a new standard array.
   array<Object^>^myStandardArray = mySourceQ->ToArray();

   // Displays the values of the new standard array.
   Console::WriteLine( "The new standard array contains the following:" );
   PrintValues( myStandardArray, ' ' );
}

void PrintValues( Array^ myArr, char mySeparator )
{
   IEnumerator^ myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ myObj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, myObj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over three napping cats in the barn
 The new standard array contains the following:
  three napping cats in the barn
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间
ToArray


Stack ..::.GetEnumerator 方法

Stack
.
.
::
.
GetEnumerator 方法
Stack 类

返回 Stack 的 IEnumerator。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function GetEnumerator As IEnumerator
public virtual IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator()
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
用于 Stack 的 IEnumerator。

实现

C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 for each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。 最初，枚举数被定位于集合中第一个元素的前面。Reset 还将枚举器返回到此位置。在此位置上，未定义 Current。因此，在读取 Current 的值之前，必须调用 MoveNext 来将枚举数前移至集合的第一个元素。

在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。 在调用 MoveNext 或 Reset 之前，Current 返回同一对象。MoveNext 将 Current 设置到下一个元素。

如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。 如果 MoveNext 越过集合的末尾，则枚举数将放置在集合中最后一个元素的后面，而且 MoveNext 返回 false。当枚举数位于此位置时，对 MoveNext 的后续调用也返回 false。如果对 MoveNext 的最近一次调用返回 false，则说明没有定义 Current。若要再次将 Current 设置为集合的第一个元素，可以调用 Reset，然后再调用 MoveNext。

只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。 只要该集合保持不变，枚举数也就保持有效。如果对该集合进行了更改（例如添加、修改或删除了元素），该枚举数将失效（这一变化是不可逆转的），且其行为将变为未定义。

该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。 该枚举数不具有独占访问集合的权限；因此，枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性，可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作，您必须实现自己的同步。

此方法是 O(1) 操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间
IEnumerator


Stack ..::.Peek 方法

Stack
.
.
::
.
Peek 方法
Stack 类

返回位于 Stack 顶部的对象但不将其移除。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Peek As Object
public virtual Object Peek()
public:
virtual Object^ Peek()
abstract Peek : unit -> Object
override Peek : unit -> Object

返回值

类型： System Object
位于 Stack 顶部的 Object。
异常 | 条件
InvalidOperationException | Stack 为空。

此方法类似于 Pop 方法，但 Peek 不修改 Stack。

如果需要，可以将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 推入到 Stack 上作为占位符。若要区分 null 值和堆栈结尾，请检查 Count 属性或捕捉 Stack 为空时引发的 InvalidOperationException。 如果需要，可以将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 推入到 Stack 上作为占位符。若要区分 null 值和堆栈结尾，请检查 Count 属性或捕捉 Stack 为空时引发的 InvalidOperationException。

此方法是 O(1) 操作。

下面的示例演示如何向 Stack 中添加元素、如何从 Stack 中移除元素以及如何查看 Stack 顶部的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesStack

    Public Shared Sub Main()

        ' Creates and initializes a new Stack.
        Dim myStack As New Stack()
        myStack.Push("The")
        myStack.Push("quick")
        myStack.Push("brown")
        myStack.Push("fox")

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

        ' Removes an element from the Stack.
        Console.WriteLine("(Pop)" & ControlChars.Tab & ControlChars.Tab & _
           "{0}", myStack.Pop())

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

        ' Removes another element from the Stack.
        Console.WriteLine("(Pop)" & ControlChars.Tab & ControlChars.Tab & _
           "{0}", myStack.Pop())

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

        ' Views the first element in the Stack but does not remove it.
        Console.WriteLine("(Peek)" & ControlChars.Tab & ControlChars.Tab & _
           "{0}", myStack.Peek())

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

    End Sub

    Public Shared Sub PrintValues(myCollection As IEnumerable, mySeparator As Char)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("{0}{1}", mySeparator, obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesStack

' This code produces the following output.
'
' Stack values:    fox    brown    quick    The
' (Pop)        fox
' Stack values:    brown    quick    The
' (Pop)        brown
' Stack values:    quick    The
' (Peek)        quick
' Stack values:    quick    The

 using System;
 using System.Collections;
 public class SamplesStack  {

    public static void Main()  {

       // Creates and initializes a new Stack.
       Stack myStack = new Stack();
       myStack.Push( "The" );
       myStack.Push( "quick" );
       myStack.Push( "brown" );
       myStack.Push( "fox" );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );

       // Removes an element from the Stack.
       Console.WriteLine( "(Pop)\t\t{0}", myStack.Pop() );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );

       // Removes another element from the Stack.
       Console.WriteLine( "(Pop)\t\t{0}", myStack.Pop() );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );

       // Views the first element in the Stack but does not remove it.
       Console.WriteLine( "(Peek)\t\t{0}", myStack.Peek() );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );
    }

    public static void PrintValues( IEnumerable myCollection, char mySeparator )  {
       foreach ( Object obj in myCollection )
          Console.Write( "{0}{1}", mySeparator, obj );
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 Stack values:    fox    brown    quick    The
 (Pop)        fox
 Stack values:    brown    quick    The
 (Pop)        brown
 Stack values:    quick    The
 (Peek)        quick
 Stack values:    quick    The
 */

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection, char mySeparator );
int main()
{

   // Creates and initializes a new Stack.
   Stack^ myStack = gcnew Stack;
   myStack->Push( "The" );
   myStack->Push( "quick" );
   myStack->Push( "brown" );
   myStack->Push( "fox" );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );

   // Removes an element from the Stack.
   Console::WriteLine( "(Pop)\t\t{0}", myStack->Pop() );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );

   // Removes another element from the Stack.
   Console::WriteLine( "(Pop)\t\t{0}", myStack->Pop() );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );

   // Views the first element in the Stack but does not remove it.
   Console::WriteLine( "(Peek)\t\t{0}", myStack->Peek() );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );
}

void PrintValues( IEnumerable^ myCollection, char mySeparator )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Stack values:    fox    brown    quick    The
 (Pop)        fox
 Stack values:    brown    quick    The
 (Pop)        brown
 Stack values:    quick    The
 (Peek)        quick
 Stack values:    quick    The
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间
Pop
Push


Stack ..::.Pop 方法

Stack
.
.
::
.
Pop 方法
Stack 类

移除并返回位于 Stack 顶部的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function Pop As Object
public virtual Object Pop()
public:
virtual Object^ Pop()
abstract Pop : unit -> Object
override Pop : unit -> Object

返回值

类型： System Object
从 Stack 的顶部移除的 Object。
异常 | 条件
InvalidOperationException | Stack 为空。

此方法类似于 Peek 方法，但 Peek 不修改 Stack。

如果需要，可以将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 推入到 Stack 上作为占位符。若要区分 null 值和堆栈结尾，请检查 Count 属性或捕捉 Stack 为空时引发的 InvalidOperationException。 如果需要，可以将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 推入到 Stack 上作为占位符。若要区分 null 值和堆栈结尾，请检查 Count 属性或捕捉 Stack 为空时引发的 InvalidOperationException。

将 Stack 实现为循环缓冲区。此方法是 O(1) 操作。 将 Stack 实现为循环缓冲区。此方法是 O(1) 操作。

下面的示例演示如何向 Stack 中添加元素、如何从 Stack 中移除元素以及如何查看 Stack 顶部的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesStack

    Public Shared Sub Main()

        ' Creates and initializes a new Stack.
        Dim myStack As New Stack()
        myStack.Push("The")
        myStack.Push("quick")
        myStack.Push("brown")
        myStack.Push("fox")

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

        ' Removes an element from the Stack.
        Console.WriteLine("(Pop)" & ControlChars.Tab & ControlChars.Tab & _
           "{0}", myStack.Pop())

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

        ' Removes another element from the Stack.
        Console.WriteLine("(Pop)" & ControlChars.Tab & ControlChars.Tab & _
           "{0}", myStack.Pop())

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

        ' Views the first element in the Stack but does not remove it.
        Console.WriteLine("(Peek)" & ControlChars.Tab & ControlChars.Tab & _
           "{0}", myStack.Peek())

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

    End Sub

    Public Shared Sub PrintValues(myCollection As IEnumerable, mySeparator As Char)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("{0}{1}", mySeparator, obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesStack

' This code produces the following output.
'
' Stack values:    fox    brown    quick    The
' (Pop)        fox
' Stack values:    brown    quick    The
' (Pop)        brown
' Stack values:    quick    The
' (Peek)        quick
' Stack values:    quick    The

 using System;
 using System.Collections;
 public class SamplesStack  {

    public static void Main()  {

       // Creates and initializes a new Stack.
       Stack myStack = new Stack();
       myStack.Push( "The" );
       myStack.Push( "quick" );
       myStack.Push( "brown" );
       myStack.Push( "fox" );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );

       // Removes an element from the Stack.
       Console.WriteLine( "(Pop)\t\t{0}", myStack.Pop() );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );

       // Removes another element from the Stack.
       Console.WriteLine( "(Pop)\t\t{0}", myStack.Pop() );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );

       // Views the first element in the Stack but does not remove it.
       Console.WriteLine( "(Peek)\t\t{0}", myStack.Peek() );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );
    }

    public static void PrintValues( IEnumerable myCollection, char mySeparator )  {
       foreach ( Object obj in myCollection )
          Console.Write( "{0}{1}", mySeparator, obj );
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 Stack values:    fox    brown    quick    The
 (Pop)        fox
 Stack values:    brown    quick    The
 (Pop)        brown
 Stack values:    quick    The
 (Peek)        quick
 Stack values:    quick    The
 */

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection, char mySeparator );
int main()
{

   // Creates and initializes a new Stack.
   Stack^ myStack = gcnew Stack;
   myStack->Push( "The" );
   myStack->Push( "quick" );
   myStack->Push( "brown" );
   myStack->Push( "fox" );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );

   // Removes an element from the Stack.
   Console::WriteLine( "(Pop)\t\t{0}", myStack->Pop() );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );

   // Removes another element from the Stack.
   Console::WriteLine( "(Pop)\t\t{0}", myStack->Pop() );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );

   // Views the first element in the Stack but does not remove it.
   Console::WriteLine( "(Peek)\t\t{0}", myStack->Peek() );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );
}

void PrintValues( IEnumerable^ myCollection, char mySeparator )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Stack values:    fox    brown    quick    The
 (Pop)        fox
 Stack values:    brown    quick    The
 (Pop)        brown
 Stack values:    quick    The
 (Peek)        quick
 Stack values:    quick    The
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间
Peek
Push


Stack ..::.Push 方法

Stack
.
.
::
.
Push 方法
Stack 类

将对象插入 Stack 的顶部。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Sub Push ( _
    obj As Object _
)
public virtual void Push(
    Object obj
)
public:
virtual void Push(
    Object^ obj
)
abstract Push :
        obj:Object -> unit
override Push :
        obj:Object -> unit

参数

obj
类型： System Object
要推入到 Stack 中的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 要推入到 Stack 中的 Object。该值可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

将 Stack 实现为循环缓冲区。

如果 Count 已经等于容量，则在添加新元素之前，会通过自动重新分配内部数组并将现有元素复制到新数组中，来增大 Stack 的容量。

如果需要，可以将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 推入到 Stack 上作为占位符。它占用堆栈中的一个槽，并且被当作任意对象一样处理。 如果需要，可以将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 推入到 Stack 上作为占位符。它占用堆栈中的一个槽，并且被当作任意对象一样处理。

如果 Count 小于堆栈的容量，则 Push 为 O(1) 操作。如果需要增加容量以容纳新元素，则 Push 成为 O(n) 操作，其中 n 为 Count。 如果 Count 小于堆栈的容量，则 Push 为 O(1) 操作。如果需要增加容量以容纳新元素，则 Push 成为 O(n) 操作，其中 n 为 Count。

下面的示例演示如何向 Stack 中添加元素、如何从 Stack 中移除元素以及如何查看 Stack 顶部的元素。

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesStack

    Public Shared Sub Main()

        ' Creates and initializes a new Stack.
        Dim myStack As New Stack()
        myStack.Push("The")
        myStack.Push("quick")
        myStack.Push("brown")
        myStack.Push("fox")

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

        ' Removes an element from the Stack.
        Console.WriteLine("(Pop)" & ControlChars.Tab & ControlChars.Tab & _
           "{0}", myStack.Pop())

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

        ' Removes another element from the Stack.
        Console.WriteLine("(Pop)" & ControlChars.Tab & ControlChars.Tab & _
           "{0}", myStack.Pop())

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

        ' Views the first element in the Stack but does not remove it.
        Console.WriteLine("(Peek)" & ControlChars.Tab & ControlChars.Tab & _
           "{0}", myStack.Peek())

        ' Displays the Stack.
        Console.Write("Stack values:")
        PrintValues(myStack, ControlChars.Tab)

    End Sub

    Public Shared Sub PrintValues(myCollection As IEnumerable, mySeparator As Char)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("{0}{1}", mySeparator, obj)
        Next obj
        Console.WriteLine()
    End Sub 'PrintValues

End Class 'SamplesStack

' This code produces the following output.
'
' Stack values:    fox    brown    quick    The
' (Pop)        fox
' Stack values:    brown    quick    The
' (Pop)        brown
' Stack values:    quick    The
' (Peek)        quick
' Stack values:    quick    The

 using System;
 using System.Collections;
 public class SamplesStack  {

    public static void Main()  {

       // Creates and initializes a new Stack.
       Stack myStack = new Stack();
       myStack.Push( "The" );
       myStack.Push( "quick" );
       myStack.Push( "brown" );
       myStack.Push( "fox" );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );

       // Removes an element from the Stack.
       Console.WriteLine( "(Pop)\t\t{0}", myStack.Pop() );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );

       // Removes another element from the Stack.
       Console.WriteLine( "(Pop)\t\t{0}", myStack.Pop() );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );

       // Views the first element in the Stack but does not remove it.
       Console.WriteLine( "(Peek)\t\t{0}", myStack.Peek() );

       // Displays the Stack.
       Console.Write( "Stack values:" );
       PrintValues( myStack, '\t' );
    }

    public static void PrintValues( IEnumerable myCollection, char mySeparator )  {
       foreach ( Object obj in myCollection )
          Console.Write( "{0}{1}", mySeparator, obj );
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 Stack values:    fox    brown    quick    The
 (Pop)        fox
 Stack values:    brown    quick    The
 (Pop)        brown
 Stack values:    quick    The
 (Peek)        quick
 Stack values:    quick    The
 */

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection, char mySeparator );
int main()
{

   // Creates and initializes a new Stack.
   Stack^ myStack = gcnew Stack;
   myStack->Push( "The" );
   myStack->Push( "quick" );
   myStack->Push( "brown" );
   myStack->Push( "fox" );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );

   // Removes an element from the Stack.
   Console::WriteLine( "(Pop)\t\t{0}", myStack->Pop() );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );

   // Removes another element from the Stack.
   Console::WriteLine( "(Pop)\t\t{0}", myStack->Pop() );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );

   // Views the first element in the Stack but does not remove it.
   Console::WriteLine( "(Peek)\t\t{0}", myStack->Peek() );

   // Displays the Stack.
   Console::Write( "Stack values:" );
   PrintValues( myStack, '\t' );
}

void PrintValues( IEnumerable^ myCollection, char mySeparator )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, obj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 Stack values:    fox    brown    quick    The
 (Pop)        fox
 Stack values:    brown    quick    The
 (Pop)        brown
 Stack values:    quick    The
 (Peek)        quick
 Stack values:    quick    The
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间
Peek
Pop


Stack ..::.Synchronized 方法

Stack
.
.
::
.
Synchronized 方法
Stack 类

返回 Stack 的同步（线程安全）包装。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True)> _
Public Shared Function Synchronized ( _
    stack As Stack _
) As Stack
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)]
public static Stack Synchronized(
    Stack stack
)
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true)]
public:
static Stack^ Synchronized(
    Stack^ stack
)
[<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true)>]
static member Synchronized :
        stack:Stack -> Stack

参数

stack
类型： System.Collections Stack
要同步的 Stack。

返回值

类型： System.Collections Stack
Stack 周围的同步包装。
异常 | 条件
ArgumentNullException | stack 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

若要保证 Stack 的线程安全，则必须通过此包装执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。

Dim myCollection As New Stack()

SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

Stack myCollection = new Stack();

lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Stack^ myCollection = gcnew Stack();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

此方法是 O(1) 操作。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：Synchronization。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

下面的示例演示如何同步 Stack、如何确定 Stack 是否同步以及如何使用同步的 Stack。

Imports System
Imports System.Collections

Public Class SamplesStack

    Public Shared Sub Main()

        ' Creates and initializes a new Stack.
        Dim myStack As New Stack()
        myStack.Push("The")
        myStack.Push("quick")
        myStack.Push("brown")
        myStack.Push("fox")

        ' Creates a synchronized wrapper around the Stack.
        Dim mySyncdStack As Stack = Stack.Synchronized(myStack)

        ' Displays the sychronization status of both Stacks.
        Dim msg As String
        If myStack.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("myStack is {0}.", msg)
        If mySyncdStack.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySyncdStack is {0}.", msg)
    End Sub
End Class

' This code produces the following output.
'
' myStack is not synchronized.
' mySyncdStack is synchronized.

using System;
 using System.Collections;
 public class SamplesStack  {

    public static void Main()  {

       // Creates and initializes a new Stack.
       Stack myStack = new Stack();
       myStack.Push( "The" );
       myStack.Push( "quick" );
       myStack.Push( "brown" );
       myStack.Push( "fox" );

       // Creates a synchronized wrapper around the Stack.
       Stack mySyncdStack = Stack.Synchronized( myStack );

       // Displays the sychronization status of both Stacks.
       Console.WriteLine( "myStack is {0}.",
          myStack.IsSynchronized ? "synchronized" : "not synchronized" );
       Console.WriteLine( "mySyncdStack is {0}.",
          mySyncdStack.IsSynchronized ? "synchronized" : "not synchronized" );
    }
 }
 /*
 This code produces the following output.

 myStack is not synchronized.
 mySyncdStack is synchronized.
 */

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new Stack.
   Stack^ myStack = gcnew Stack;
   myStack->Push( "The" );
   myStack->Push( "quick" );
   myStack->Push( "brown" );
   myStack->Push( "fox" );

   // Creates a synchronized wrapper around the Stack.
   Stack^ mySyncdStack = Stack::Synchronized( myStack );

   // Displays the sychronization status of both Stacks.
   Console::WriteLine( "myStack is {0}.", myStack->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
   Console::WriteLine( "mySyncdStack is {0}.", mySyncdStack->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
}

/*
This code produces the following output.

myStack is not synchronized.
mySyncdStack is synchronized.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间


Stack ..::.ToArray 方法

Stack
.
.
::
.
ToArray 方法
Stack 类

将 Stack 复制到新数组中。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable Function ToArray As Object()
public virtual Object[] ToArray()
public:
virtual array<Object^>^ ToArray()
abstract ToArray : unit -> Object[]
override ToArray : unit -> Object[]

返回值

类型：
array<
System Object
>
[]
()
[]

新数组，包含 Stack 的元素的副本。

按后进先出的顺序将元素复制到数组，类似于连续调用 Pop 所返回的元素的顺序。

此方法的运算复杂度为 O(n)，其中 n 是 Count。

下面的示例演示如何将 Stack 复制到一维数组中。

Imports System
Imports System.Collections

Public Class SamplesStack

    Public Shared Sub Main()

        ' Creates and initializes the source Stack.
        Dim mySourceQ As New Stack()
        mySourceQ.Push("barn")
        mySourceQ.Push("the")
        mySourceQ.Push("in")
        mySourceQ.Push("cats")
        mySourceQ.Push("napping")
        mySourceQ.Push("three")

        ' Creates and initializes the one-dimensional target Array.
        Dim myTargetArray As Array = Array.CreateInstance(GetType(String), 15)
        myTargetArray.SetValue("The", 0)
        myTargetArray.SetValue("quick", 1)
        myTargetArray.SetValue("brown", 2)
        myTargetArray.SetValue("fox", 3)
        myTargetArray.SetValue("jumped", 4)
        myTargetArray.SetValue("over", 5)
        myTargetArray.SetValue("the", 6)
        myTargetArray.SetValue("lazy", 7)
        myTargetArray.SetValue("dog", 8)

        ' Displays the values of the target Array.
        Console.WriteLine("The target Array contains the " & _
           "following (before and after copying):")
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source Stack to the target Array, starting
        ' at index 6.
        mySourceQ.CopyTo(myTargetArray, 6)

        ' Displays the values of the target Array.
        PrintValues(myTargetArray, " "c)

        ' Copies the entire source Stack to a new standard array.
        Dim myStandardArray As Object() = mySourceQ.ToArray()

        ' Displays the values of the new standard array.
        Console.WriteLine("The new standard array contains the following:")
        PrintValues(myStandardArray, " "c)
    End Sub

    Overloads Public Shared Sub PrintValues(myArr As Array, _
       mySeparator As Char)

        Dim myObj As Object
        For Each myObj In  myArr
            Console.Write("{0}{1}", mySeparator, myObj)
        Next myObj
        Console.WriteLine()
    End Sub

End Class

' This code produces the following output.
'
' The target Array contains the following (before and after copying):
'  The quick brown fox jumped over the lazy dog
'  The quick brown fox jumped over three napping cats in the barn
' The new standard array contains the following:
'  three napping cats in the barn

 using System;
 using System.Collections;
 public class SamplesStack  {

    public static void Main()  {

       // Creates and initializes the source Stack.
       Stack mySourceQ = new Stack();
       mySourceQ.Push( "barn" );
       mySourceQ.Push( "the" );
       mySourceQ.Push( "in" );
       mySourceQ.Push( "cats" );
       mySourceQ.Push( "napping" );
       mySourceQ.Push( "three" );

       // Creates and initializes the one-dimensional target Array.
       Array myTargetArray=Array.CreateInstance( typeof(String), 15 );
       myTargetArray.SetValue( "The", 0 );
       myTargetArray.SetValue( "quick", 1 );
       myTargetArray.SetValue( "brown", 2 );
       myTargetArray.SetValue( "fox", 3 );
       myTargetArray.SetValue( "jumped", 4 );
       myTargetArray.SetValue( "over", 5 );
       myTargetArray.SetValue( "the", 6 );
       myTargetArray.SetValue( "lazy", 7 );
       myTargetArray.SetValue( "dog", 8 );

       // Displays the values of the target Array.
       Console.WriteLine( "The target Array contains the following (before and after copying):" );
       PrintValues( myTargetArray, ' ' );

       // Copies the entire source Stack to the target Array, starting at index 6.
       mySourceQ.CopyTo( myTargetArray, 6 );

       // Displays the values of the target Array.
       PrintValues( myTargetArray, ' ' );

       // Copies the entire source Stack to a new standard array.
       Object[] myStandardArray = mySourceQ.ToArray();

       // Displays the values of the new standard array.
       Console.WriteLine( "The new standard array contains the following:" );
       PrintValues( myStandardArray, ' ' );

    }

    public static void PrintValues( Array myArr, char mySeparator )  {
       foreach ( Object myObj in myArr )  {
          Console.Write( "{0}{1}", mySeparator, myObj );
       }
       Console.WriteLine();
    }

 }

 /*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over three napping cats in the barn
 The new standard array contains the following:
  three napping cats in the barn
 */

using namespace System;
using namespace System::Collections;
void PrintValues( Array^ myArr, char mySeparator );
int main()
{
   // Creates and initializes the source Stack.
   Stack^ mySourceQ = gcnew Stack;
   mySourceQ->Push( "barn" );
   mySourceQ->Push( "the" );
   mySourceQ->Push( "in" );
   mySourceQ->Push( "cats" );
   mySourceQ->Push( "napping" );
   mySourceQ->Push( "three" );

   // Creates and initializes the one-dimensional target Array.
   Array^ myTargetArray = Array::CreateInstance( String::typeid, 15 );
   myTargetArray->SetValue( "The", 0 );
   myTargetArray->SetValue( "quick", 1 );
   myTargetArray->SetValue( "brown", 2 );
   myTargetArray->SetValue( "fox", 3 );
   myTargetArray->SetValue( "jumped", 4 );
   myTargetArray->SetValue( "over", 5 );
   myTargetArray->SetValue( "the", 6 );
   myTargetArray->SetValue( "lazy", 7 );
   myTargetArray->SetValue( "dog", 8 );

   // Displays the values of the target Array.
   Console::WriteLine( "The target Array contains the following (before and after copying):" );
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source Stack to the target Array, starting at index 6.
   mySourceQ->CopyTo( myTargetArray, 6 );

   // Displays the values of the target Array.
   PrintValues( myTargetArray, ' ' );

   // Copies the entire source Stack to a new standard array.
   array<Object^>^myStandardArray = mySourceQ->ToArray();

   // Displays the values of the new standard array.
   Console::WriteLine( "The new standard array contains the following:" );
   PrintValues( myStandardArray, ' ' );
}

void PrintValues( Array^ myArr, char mySeparator )
{
   IEnumerator^ myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ myObj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "{0}{1}", mySeparator, myObj );
   }

   Console::WriteLine();
}

/*
 This code produces the following output.

 The target Array contains the following (before and after copying):
  The quick brown fox jumped over the lazy dog
  The quick brown fox jumped over three napping cats in the barn
 The new standard array contains the following:
  three napping cats in the barn
 */

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间
CopyTo
Pop


Stack 属性

Stack 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Stack 类

Stack 类型公开以下成员。

名称 说明
页首

参考

Stack 类
System.Collections 命名空间


Stack ..::.Count 属性

Stack
.
.
::
.
Count 属性
Stack 类

获取 Stack 中包含的元素数。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property Count As Integer
    Get
public virtual int Count { get; }
public:
virtual property int Count {
    int get ();
}
abstract Count : int
override Count : int

属性值

类型： System Int32
Stack 中包含的元素数。

实现

容量是指 Stack 可存储的元素数。Count 是 Stack 中的实际元素数。 容量是指 Stack 可存储的元素数。Count 是 Stack 中的实际元素数。

容量始终大于或等于 Count。如果在添加元素时 Count 超过容量，则通过在复制旧元素和添加新元素之前重新分配内部数组来自动增大容量。 容量始终大于或等于 Count。如果在添加元素时 Count 超过容量，则通过在复制旧元素和添加新元素之前重新分配内部数组来自动增大容量。

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间


Stack ..::.IsSynchronized 属性

Stack
.
.
::
.
IsSynchronized 属性
Stack 类

获取一个值，该值指示是否同步对 Stack 的访问（线程安全）。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property IsSynchronized As Boolean
    Get
public virtual bool IsSynchronized { get; }
public:
virtual property bool IsSynchronized {
    bool get ();
}
abstract IsSynchronized : bool
override IsSynchronized : bool

属性值

类型： System Boolean
如果对 Stack 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。 如果对 Stack 的访问是同步的（线程安全），则为 true；否则为 false。默认值为 false。

实现

若要保证 Stack 的线程安全，则必须通过由 Synchronized 方法返回的包装来执行所有操作。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。

Dim myCollection As New Stack()

SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

Stack myCollection = new Stack();

lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Stack^ myCollection = gcnew Stack();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

下面的示例演示如何同步 Stack、如何确定 Stack 是否同步以及如何使用同步的 Stack。

Imports System
Imports System.Collections

Public Class SamplesStack

    Public Shared Sub Main()

        ' Creates and initializes a new Stack.
        Dim myStack As New Stack()
        myStack.Push("The")
        myStack.Push("quick")
        myStack.Push("brown")
        myStack.Push("fox")

        ' Creates a synchronized wrapper around the Stack.
        Dim mySyncdStack As Stack = Stack.Synchronized(myStack)

        ' Displays the sychronization status of both Stacks.
        Dim msg As String
        If myStack.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("myStack is {0}.", msg)
        If mySyncdStack.IsSynchronized Then
            msg = "synchronized"
        Else
            msg = "not synchronized"
        End If
        Console.WriteLine("mySyncdStack is {0}.", msg)
    End Sub
End Class

' This code produces the following output.
'
' myStack is not synchronized.
' mySyncdStack is synchronized.

using System;
 using System.Collections;
 public class SamplesStack  {

    public static void Main()  {

       // Creates and initializes a new Stack.
       Stack myStack = new Stack();
       myStack.Push( "The" );
       myStack.Push( "quick" );
       myStack.Push( "brown" );
       myStack.Push( "fox" );

       // Creates a synchronized wrapper around the Stack.
       Stack mySyncdStack = Stack.Synchronized( myStack );

       // Displays the sychronization status of both Stacks.
       Console.WriteLine( "myStack is {0}.",
          myStack.IsSynchronized ? "synchronized" : "not synchronized" );
       Console.WriteLine( "mySyncdStack is {0}.",
          mySyncdStack.IsSynchronized ? "synchronized" : "not synchronized" );
    }
 }
 /*
 This code produces the following output.

 myStack is not synchronized.
 mySyncdStack is synchronized.
 */

#using <system.dll>

using namespace System;
using namespace System::Collections;
int main()
{

   // Creates and initializes a new Stack.
   Stack^ myStack = gcnew Stack;
   myStack->Push( "The" );
   myStack->Push( "quick" );
   myStack->Push( "brown" );
   myStack->Push( "fox" );

   // Creates a synchronized wrapper around the Stack.
   Stack^ mySyncdStack = Stack::Synchronized( myStack );

   // Displays the sychronization status of both Stacks.
   Console::WriteLine( "myStack is {0}.", myStack->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
   Console::WriteLine( "mySyncdStack is {0}.", mySyncdStack->IsSynchronized ? (String^)"synchronized" : "not synchronized" );
}

/*
This code produces the following output.

myStack is not synchronized.
mySyncdStack is synchronized.
*/

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间


Stack ..::.SyncRoot 属性

Stack
.
.
::
.
SyncRoot 属性
Stack 类

获取可用于同步 Stack 访问的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Overridable ReadOnly Property SyncRoot As Object
    Get
public virtual Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get ();
}
abstract SyncRoot : Object
override SyncRoot : Object

属性值

类型： System Object
可用于同步对 Stack 的访问的 Object。

实现

若要创建 Stack 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Stack 同步版本。同步代码必须在 Stack 的 SyncRoot 上执行操作，而不是直接在 Stack 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Stack 对象。 若要创建 Stack 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Stack 同步版本。同步代码必须在 Stack 的 SyncRoot 上执行操作，而不是直接在 Stack 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Stack 对象。 若要创建 Stack 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Stack 同步版本。同步代码必须在 Stack 的 SyncRoot 上执行操作，而不是直接在 Stack 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Stack 对象。 若要创建 Stack 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Stack 同步版本。同步代码必须在 Stack 的 SyncRoot 上执行操作，而不是直接在 Stack 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Stack 对象。 若要创建 Stack 的同步版本，请使用 Synchronized 方法。但是，派生类可以使用 SyncRoot 属性来提供它们自己的 Stack 同步版本。同步代码必须在 Stack 的 SyncRoot 上执行操作，而不是直接在 Stack 上执行操作。这确保了从其他对象派生的集合的正确操作。特别是，它维护了与其他线程的正确同步，这些线程可能同时正在修改 Stack 对象。

枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。 枚举整个集合本质上不是一个线程安全的过程。即使集合已同步，其他线程仍可以修改集合，从而使枚举数引发异常。若要确保枚举过程中的线程安全性，可以在整个枚举期间锁定集合，或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何在整个枚举过程中使用 SyncRoot 锁定集合。

Dim myCollection As New Stack()

SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

Stack myCollection = new Stack();

lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Stack^ myCollection = gcnew Stack();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection);
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}

检索此属性的值的运算复杂度为 O(1)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Stack 类
Stack 成员
System.Collections 命名空间


StructuralComparisons 类

StructuralComparisons 类
成员

提供用于对两个集合对象执行结构比较的对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public NotInheritable Class StructuralComparisons
public static class StructuralComparisons
public ref class StructuralComparisons abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type StructuralComparisons =  class end

StructuralComparisons 类返回以下两个预定义的比较对象：

  • IComparer 实现，该实现可传递给诸如 Array..::.IStructuralComparable..::.CompareTo(Object, IComparer) 或 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo(Object, IComparer) 之类的方法来执行两个对象的结构比较。它旨在指明第一个对象在排序顺序中是在第二个对象之前、之后还是出现在相同位置。 IComparer 实现，该实现可传递给诸如 Array..::.IStructuralComparable..::.CompareTo(Object, IComparer) 或 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo(Object, IComparer) 之类的方法来执行两个对象的结构比较。它旨在指明第一个对象在排序顺序中是在第二个对象之前、之后还是出现在相同位置。

  • IEqualityComparer 实现，该实现可传递给诸如 Array..::.IStructuralEquatable..::.Equals(Object, IEqualityComparer) 或 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals(Object, IEqualityComparer) 之类的方法以执行结构相等性比较。

可使用该对象执行两个集合对象的架构比较或架构等效比较，例如数组或元组对象。在结构的比较中，两个对象的比较是根据它们的值进行的。对象可以根据某些条件排序，如果将两个对象视为相等，一定是因为它们具有相等的值，而不是因为它们引用同一个物理对象。 可使用该对象执行两个集合对象的架构比较或架构等效比较，例如数组或元组对象。在结构的比较中，两个对象的比较是根据它们的值进行的。对象可以根据某些条件排序，如果将两个对象视为相等，一定是因为它们具有相等的值，而不是因为它们引用同一个物理对象。 可使用该对象执行两个集合对象的架构比较或架构等效比较，例如数组或元组对象。在结构的比较中，两个对象的比较是根据它们的值进行的。对象可以根据某些条件排序，如果将两个对象视为相等，一定是因为它们具有相等的值，而不是因为它们引用同一个物理对象。

System.Collections System.Collections..::.StructuralComparisonsStructuralComparisons
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

StructuralComparisons 成员
System.Collections 命名空间


StructuralComparisons 成员

StructuralComparisons 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StructuralComparisons 类

提供用于对两个集合对象执行结构比较的对象。

StructuralComparisons 类型公开以下成员。

名称 说明
页首

参考

StructuralComparisons 类
System.Collections 命名空间


StructuralComparisons 属性

StructuralComparisons 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StructuralComparisons 类

StructuralComparisons 类型公开以下成员。

名称 说明
页首

参考

StructuralComparisons 类
System.Collections 命名空间


StructuralComparisons ..::.StructuralComparer 属性

StructuralComparisons
.
.
::
.
StructuralComparer 属性
StructuralComparisons 类

获取可执行两个对象的结构比较的预定义对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property StructuralComparer As IComparer
    Get
public static IComparer StructuralComparer { get; }
public:
static property IComparer^ StructuralComparer {
    IComparer^ get ();
}
static member StructuralComparer : IComparer

属性值

类型： System.Collections IComparer
一个用于执行两个集合对象的结构比较的预定义对象。

在将此属性返回的 IComparer 对象传递给集合对象的比较方法（如 Array..::.IStructuralComparable..::.CompareTo(Object, IComparer) 或 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo(Object, IComparer)）时，将为数组的每个成员或元组的每个元素调用其 Compare 方法。当 Compare 方法将集合对象的每一项与另一集合对象的相应项进行比较时，其实现的行为如下所示： 在将此属性返回的 IComparer 对象传递给集合对象的比较方法（如 Array..::.IStructuralComparable..::.CompareTo(Object, IComparer) 或 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralComparable..::.CompareTo(Object, IComparer)）时，将为数组的每个成员或元组的每个元素调用其 Compare 方法。当 Compare 方法将集合对象的每一项与另一集合对象的相应项进行比较时，其实现的行为如下所示：

  • 它认为两个为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的项相等，而且认为一个空项小于不为空的项。

  • 如果比较的第一个项目可以强制转换为 IStructuralComparable 对象（即，如果它是实现 IStructuralComparable 接口的集合对象），则它可以调用 CompareTo 方法。

  • 如果比较的第一个项目不能强制转换为 IStructuralComparable 对象（即，如果它不是实现 IStructuralComparable 接口的集合对象），则它调用 Comparer.Default.Compare 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

StructuralComparisons 类
StructuralComparisons 成员
System.Collections 命名空间
Comparer


StructuralComparisons ..::.StructuralEqualityComparer 属性

StructuralComparisons
.
.
::
.
StructuralEqualityComparer 属性
StructuralComparisons 类

获取一个可比较两个对象的结构是否相等的预定义对象。

命名空间： System.Collections
程序集： mscorlib（在 mscorlib.dll 中）
Public Shared ReadOnly Property StructuralEqualityComparer As IEqualityComparer
    Get
public static IEqualityComparer StructuralEqualityComparer { get; }
public:
static property IEqualityComparer^ StructuralEqualityComparer {
    IEqualityComparer^ get ();
}
static member StructuralEqualityComparer : IEqualityComparer

属性值

类型： System.Collections IEqualityComparer
一个用于比较两个集合对象的结构是否相等的预定义对象。

在将此属性返回的 IComparer 对象传递给集合对象的相等比较方法（如 Array..::.IStructuralEquatable..::.Equals(Object, IEqualityComparer) 或 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals(Object, IEqualityComparer)）时，将为数组的每个成员或元组的每个元素调用其 IEqualityComparer..::.Equals 方法。当 Equals 方法将集合对象的每一项与另一集合对象的相应项进行比较时，其实现的行为如下所示： 在将此属性返回的 IComparer 对象传递给集合对象的相等比较方法（如 Array..::.IStructuralEquatable..::.Equals(Object, IEqualityComparer) 或 Tuple<(Of <(T1, T2, T3>)>)..::.IStructuralEquatable..::.Equals(Object, IEqualityComparer)）时，将为数组的每个成员或元组的每个元素调用其 IEqualityComparer..::.Equals 方法。当 Equals 方法将集合对象的每一项与另一集合对象的相应项进行比较时，其实现的行为如下所示：

  • 如果两个项都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则将这两个项视为相等。

  • 如果一个项为 null，但另一个项不为 null，则将它们视为不相等。

  • 如果比较的第一个项目可以强制转换为 IStructuralEquatable 对象（即，如果它是实现 IStructuralEquatable 接口的集合对象），则它可以调用 IStructuralEquatable..::.Equals 方法。

  • 如果比较的第一个项目不能强制转换为 IStructuralEquatable 对象（即，如果它不是实现 IStructuralEquatable 接口的集合对象），则它调用该项目的 Equals 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

StructuralComparisons 类
StructuralComparisons 成员
System.Collections 命名空间
Comparer


System.Data 命名空间

System.Data 命名空间

The System.Data namespace provides access to classes that represent the ADO.NET architecture.ADO.NET lets you build components that efficiently manage data from multiple data sources. The System.Data namespace provides access to classes that represent the ADO.NET architecture.ADO.NET lets you build components that efficiently manage data from multiple data sources.

In a disconnected scenario such as the Internet, ADO.NET provides the tools to request, update, and reconcile data in multiple tier systems.The ADO.NET architecture is also implemented in client applications, such as Windows Forms, or HTML pages created by ASP.NET. In a disconnected scenario such as the Internet, ADO.NET provides the tools to request, update, and reconcile data in multiple tier systems.The ADO.NET architecture is also implemented in client applications, such as Windows Forms, or HTML pages created by ASP.NET.

The centerpiece of the ADO.NET architecture is the DataSet class.Each DataSet can contain multiple DataTable objects, with each DataTable containing data from a single data source, such as SQL Server. The centerpiece of the ADO.NET architecture is the DataSet class.Each DataSet can contain multiple DataTable objects, with each DataTable containing data from a single data source, such as SQL Server.

Each DataTable contains a DataColumnCollection--a collection of DataColumn objects--that determines the schema of each DataTable.The DataType property determines the type of data held by the DataColumn.The ReadOnly and AllowDBNull properties let you further guarantee data integrity.The Expression property lets you construct calculated columns. Each DataTable contains a DataColumnCollection--a collection of DataColumn objects--that determines the schema of each DataTable.The DataType property determines the type of data held by the DataColumn.The ReadOnly and AllowDBNull properties let you further guarantee data integrity.The Expression property lets you construct calculated columns. Each DataTable contains a DataColumnCollection--a collection of DataColumn objects--that determines the schema of each DataTable.The DataType property determines the type of data held by the DataColumn.The ReadOnly and AllowDBNull properties let you further guarantee data integrity.The Expression property lets you construct calculated columns. Each DataTable contains a DataColumnCollection--a collection of DataColumn objects--that determines the schema of each DataTable.The DataType property determines the type of data held by the DataColumn.The ReadOnly and AllowDBNull properties let you further guarantee data integrity.The Expression property lets you construct calculated columns.

If a DataTable participates in a parent/child relationship with another DataTable, the relationship is constructed by adding a DataRelation to the DataRelationCollection of a DataSet object.When such a relation is added, a UniqueConstraint and a ForeignKeyConstraint are both created automatically, depending on the parameter settings for the constructor.The UniqueConstraint guarantees that values that are contained in a column are unique.The ForeignKeyConstraint determines what action will happen to the child row or column when a primary key value is changed or deleted. If a DataTable participates in a parent/child relationship with another DataTable, the relationship is constructed by adding a DataRelation to the DataRelationCollection of a DataSet object.When such a relation is added, a UniqueConstraint and a ForeignKeyConstraint are both created automatically, depending on the parameter settings for the constructor.The UniqueConstraint guarantees that values that are contained in a column are unique.The ForeignKeyConstraint determines what action will happen to the child row or column when a primary key value is changed or deleted. If a DataTable participates in a parent/child relationship with another DataTable, the relationship is constructed by adding a DataRelation to the DataRelationCollection of a DataSet object.When such a relation is added, a UniqueConstraint and a ForeignKeyConstraint are both created automatically, depending on the parameter settings for the constructor.The UniqueConstraint guarantees that values that are contained in a column are unique.The ForeignKeyConstraint determines what action will happen to the child row or column when a primary key value is changed or deleted. If a DataTable participates in a parent/child relationship with another DataTable, the relationship is constructed by adding a DataRelation to the DataRelationCollection of a DataSet object.When such a relation is added, a UniqueConstraint and a ForeignKeyConstraint are both created automatically, depending on the parameter settings for the constructor.The UniqueConstraint guarantees that values that are contained in a column are unique.The ForeignKeyConstraint determines what action will happen to the child row or column when a primary key value is changed or deleted.

Using the System.Data.SqlClient namespace (the.NET Framework Data Provider for SQL Server), the System.Data.Odbc namespace (the.NET Framework Data Provider for ODBC), the System.Data.OleDb namespace (the.NET Framework Data Provider for OLE DB), or the System.Data.OracleClient namespace (the .NET Framework Data Provider for Oracle), you can access a data source to use together with a DataSet.Each.NET Framework data provider has a corresponding DataAdapter that you use as a bridge between a data source and a DataSet. Using the System.Data.SqlClient namespace (the.NET Framework Data Provider for SQL Server), the System.Data.Odbc namespace (the.NET Framework Data Provider for ODBC), the System.Data.OleDb namespace (the.NET Framework Data Provider for OLE DB), or the System.Data.OracleClient namespace (the .NET Framework Data Provider for Oracle), you can access a data source to use together with a DataSet.Each.NET Framework data provider has a corresponding DataAdapter that you use as a bridge between a data source and a DataSet.

 | 类 | 说明
公共类 | Constraint | 表示可在一个或多个 DataColumn 对象上强制的约束。
公共类 | ConstraintCollection | 表示 DataTable 的约束的集合。
公共类 | ConstraintException | 表示在尝试执行违反约束的操作时引发的异常。
公共类 | DataColumn | 表示 DataTable 中列的架构。
公共类 | DataColumnChangeEventArgs | 为 ColumnChanging 事件提供数据。
公共类 | DataColumnCollection | 表示 DataTable 的 DataColumn 对象的集合。
公共类 | DataException | 表示使用 ADO.NET 组件发生错误时引发的异常。
公共类 | DataRelation | 表示两个 DataTable 对象之间的父/子关系。
公共类 | DataRelationCollection | 表示此 DataSet 的 DataRelation 对象的集合。
公共类 | DataRow | 表示 DataTable 中的一行数据。
公共类 | DataRowBuilder | 基础结构。 DataRowBuilder 类型支持 .NET Framework 基础结构，并且不应直接从代码中使用。
公共类 | DataRowChangeEventArgs | 为 RowChanged、RowChanging、OnRowDeleting 和 OnRowDeleted 事件提供数据。
公共类 | DataRowCollection | 表示 DataTable 的行的集合。
公共类 | DataRowComparer | 返回 DataRowComparer<(Of <(TRow>)>) 类的单一实例。
公共类 | DataRowComparer TRow | 通过使用基于值的比较来比较两个 DataRow 对象是否等值。
公共类 | DataRowExtensions | 定义 DataRow 类的扩展方法。这是一个静态类。 定义 DataRow 类的扩展方法。这是一个静态类。
公共类 | DataRowView | 表示 DataRow 的自定义视图。
公共类 | DataSet | 表示数据在内存中的缓存。
公共类 | DataSetSchemaImporterExtension | 该成员支持 .NET Framework 结构，不应从代码直接使用。
公共类 | DataSysDescriptionAttribute | 已过时。 用说明来标记属性、事件或扩展程序。可视化设计器在引用成员时可显示该说明。 用说明来标记属性、事件或扩展程序。可视化设计器在引用成员时可显示该说明。
公共类 | DataTable | 表示内存中数据的一个表。
公共类 | DataTableClearEventArgs | 为 Clear 方法提供数据。
公共类 | DataTableCollection | 表示 DataSet 的表的集合。
公共类 | DataTableExtensions | 定义 DataTable 类的扩展方法。DataTableExtensions 是一个静态类。 定义 DataTable 类的扩展方法。DataTableExtensions 是一个静态类。
公共类 | DataTableNewRowEventArgs | 为 NewRow 方法提供数据。
公共类 | DataTableReader | DataTableReader 以一个或多个只读、只进结果集的形式获取一个或多个 DataTable 对象的内容。
公共类 | DataView | 表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。
公共类 | DataViewManager | 包含 DataSet 中每个 DataTable 的默认 DataViewSettingCollection。
公共类 | DataViewSetting | 表示从 DataViewManager 创建的 DataView 的 ApplyDefaultSort、DataViewManager、RowFilter、RowStateFilter、Sort 和 Table 的默认设置。
公共类 | DataViewSettingCollection | 包含 DataSet 中每个 DataTable 的 DataViewSetting 对象的只读集合。
公共类 | DBConcurrencyException | 在插入、更新或删除操作过程中当受影响的行数等于零时由 DataAdapter 引发的异常。
公共类 | DeletedRowInaccessibleException | 表示尝试在已删除的 DataRow 上执行操作时引发的异常。
公共类 | DuplicateNameException | 表示在 DataSet — 相关对象添加操作的过程中，遇到重复的数据库对象名称时引发的异常。
公共类 | EntityCommandCompilationException | 表示命令编译过程中发生的错误；当未能生成命令树时，表示命令文本。
公共类 | EntityCommandExecutionException | 表示当基础存储提供程序未能执行指定的命令时，所发生的错误。此异常通常包装一个提供程序特定的异常。 表示当基础存储提供程序未能执行指定的命令时，所发生的错误。此异常通常包装一个提供程序特定的异常。
公共类 | EntityException | 表示 EntityClient 命名空间中发生的与 Entity Framework 相关的错误。EntityException 是 EntityClient 类所引发的所有 Entity Framework 异常的基类。 表示 EntityClient 命名空间中发生的与 Entity Framework 相关的错误。EntityException 是 EntityClient 类所引发的所有 Entity Framework 异常的基类。
公共类 | EntityKey | 提供对作为实体类型实例的对象的持久引用。
公共类 | EntityKeyMember | 表示作为 EntityKey 的一部分的键名称和值对。
公共类 | EntitySqlException | 表示分析 Entity SQL 命令文本时出现的错误。违反语法或语义规则时会引发此异常。 表示分析 Entity SQL 命令文本时出现的错误。违反语法或语义规则时会引发此异常。
公共类 | EnumerableRowCollection | 表示从 LINQ to DataSet 查询返回的 DataRow 对象的集合。 此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。
公共类 | EnumerableRowCollection TRow | 表示从查询返回的 DataRow 对象的集合。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 表示从查询返回的 DataRow 对象的集合。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。
公共类 | EnumerableRowCollectionExtensions | 包含数据行集合类的扩展方法。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 包含数据行集合类的扩展方法。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。
公共类 | EvaluateException | 表示无法计算 DataColumn 的 Expression 属性时引发的异常。
公共类 | FillErrorEventArgs | 为 DbDataAdapter 的 FillError 事件提供数据。
公共类 | ForeignKeyConstraint | 表示删除或更新某个值或行时，对主键/外键关系中一组列强制进行的操作限制。
公共类 | InRowChangingEventException | 表示在 RowChanging 事件中调用 EndEdit 方法时引发的异常。
公共类 | InternalDataCollectionBase | 提供用于创建集合的基本功能。
公共类 | InvalidCommandTreeException | 一个可引发以指示命令目录树无效的异常。当前，在 Entity Framework 中的任何位置都不会引发此异常。 一个可引发以指示命令目录树无效的异常。当前，在 Entity Framework 中的任何位置都不会引发此异常。
公共类 | InvalidConstraintException | 表示在不正确地尝试创建或访问关系时引发的异常。
公共类 | InvalidExpressionException | 表示在尝试将包含无效 Expression 的 DataColumn 添加到 DataColumnCollection 中时引发的异常。
公共类 | MappingException | 映射相关服务请求失败时引发的异常。
公共类 | MergeFailedEventArgs | 在目标和源 DataRow 具有相同的主键值，且将 EnforceConstraints 属性设置为“真”时发生。
公共类 | MetadataException | 当元数据相关服务请求失败时引发的异常。
公共类 | MissingPrimaryKeyException | 表示在尝试访问没有主键的表中的行时引发的异常。
公共类 | NoNullAllowedException | 表示在尝试将空值插入 AllowDBNull 设置为 false 的列中时引发的异常。
公共类 | ObjectNotFoundException | 对象不存在时引发的异常。
公共类 | OperationAbortedException | 当用户中止正在执行的某操作时，将引发此异常。
公共类 | OptimisticConcurrencyException | 发生开放式并发冲突时引发的异常。
公共类 | OrderedEnumerableRowCollection TRow | 此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。表示从查询返回的经过排序的 DataRow 对象的集合。 此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。表示从查询返回的经过排序的 DataRow 对象的集合。
公共类 | PropertyCollection | 表示可以添加到 DataColumn、DataSet 或 DataTable 的属性的集合。
公共类 | ProviderIncompatibleException | 基础数据提供程序与 Entity Framework 不兼容时引发的异常。
公共类 | ReadOnlyException | 表示在尝试更改只读列的值时引发的异常。
公共类 | RowNotInTableException | 表示尝试在不位于 DataTable 中的 DataRow 上执行操作时引发的异常。
公共类 | StateChangeEventArgs | 为 .NET Framework 数据提供程序的状态更改事件提供数据。
公共类 | StatementCompletedEventArgs | 为 StatementCompleted 事件提供附加信息。
公共类 | StrongTypingException | 在用户访问 DBNull 值时，强类型 DataSet 引发的异常。
公共类 | SyntaxErrorException | 表示在 DataColumn 的 Expression 属性包含语法错误时引发的异常。
公共类 | TypedDataSetGenerator | 已过时。 用于创建强类型 DataSet。
公共类 | TypedDataSetGeneratorException | 在生成强类型 DataSet 时发生名称冲突的情况下引发的异常。
公共类 | TypedTableBase T | 此类型用作通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象的基类，不应从代码中直接使用。
公共类 | TypedTableBaseExtensions | 包含 TypedTableBase<(Of <(T>)>) 类的扩展方法。
公共类 | UniqueConstraint | 表示对一组列的限制，列中的所有值必须是唯一的。
公共类 | UpdateException | 对对象实例的修改无法保持到数据源时引发的异常。
公共类 | VersionNotFoundException | 表示在尝试返回已经删除的 DataRow 版本时引发的异常。
 | 接口 | 说明
公共接口 | IColumnMapping | 将数据源列与 DataSet 列关联起来，并由 DataColumnMapping 类实现，这是 .NET Framework 数据提供程序通常使用的方法。
公共接口 | IColumnMappingCollection | 包含一个 DataColumnMapping 对象的集合，并由 DataColumnMappingCollection 实现，这是由 .NET Framework 数据提供程序通常使用的方法。
公共接口 | IDataAdapter | 允许对象实现 DataAdapter，并且表示一组用于填充和更新 DataSet 及数据源的方法以及与映射操作有关的属性。
公共接口 | IDataParameter | 表示 Command 对象的参数,也可以表示该对象到 DataSet 列的映射；并且是由访问数据源的 .NET Framework 数据提供程序实现的。
公共接口 | IDataParameterCollection | 收集所有与 Command 对象有关的参数及其到 DataSet 列的映射，并由访问该数据源的 .NET Framework 数据提供程序实现。
公共接口 | IDataReader | 提供一种方法来读取一个或多个通过在数据源执行命令所获得的只进结果集流，这是由访问关系数据库的 .NET Framework 数据提供程序实现的。
公共接口 | IDataRecord | 使 DataReader 能访问每一行中的列值，由访问关系数据库的 .NET Framework 数据提供程序实现。
公共接口 | IDbCommand | 表示连接到数据源时执行的 SQL 语句，并且是由访问关系数据库的 .NET Framework 数据提供程序实现的。
公共接口 | IDbConnection | 表示到数据源的已打开连接，并且是由访问关系数据库的 .NET Framework 数据提供程序实现的。
公共接口 | IDbDataAdapter | 表示一组与命令有关的属性，用于填充 DataSet 和更新数据源，由访问关系数据库的 .NET Framework 数据提供程序实现。
公共接口 | IDbDataParameter | 由 Visual Basic .NET 数据设计器使用，用来向 Command 对象表示一个参数，以及向该对象的 DataSet 列映射表示参数（可选）。
公共接口 | IDbTransaction | 表示要在数据源上执行的事务，它由访问关系数据库的 .NET Framework 数据提供程序来实现。
公共接口 | IExtendedDataRecord | 提供对 DbDataReader 的 DbDataRecord 的每一行内列值的访问。
公共接口 | ITableMapping | 将源表与 DataSet 中的表关联，并由 DataTableMapping 类实现，该类由 .NET Framework 数据提供程序共同使用。
公共接口 | ITableMappingCollection | 包含 TableMapping 对象的集合，并由 DataTableMappingCollection（通常由 .NET Framework 数据提供程序使用）实现。
 | 委托 | 说明
公共委托 | DataColumnChangeEventHandler | 表示将处理 ColumnChanging 事件的方法。
公共委托 | DataRowChangeEventHandler | 表示将处理 DataTable 的 RowChanging、RowChanged、RowDeleting 和 RowDeleted 事件的方法。
公共委托 | DataTableClearEventHandler | 表示处理 Clear 方法的方法。
公共委托 | DataTableNewRowEventHandler | 表示处理 NewRow 方法的方法。
公共委托 | FillErrorEventHandler | 表示将处理 FillError 事件的方法。
公共委托 | MergeFailedEventHandler | 表示将处理 MergeFailed 事件的方法。
公共委托 | StateChangeEventHandler | 表示将处理 StateChange 事件的方法。
公共委托 | StatementCompletedEventHandler | StatementCompleted 事件的事件处理程序的委托类型。
 | 枚举 | 说明
公共枚举 | AcceptRejectRule | 确定在带有 ForeignKeyConstraint 的 DataTable 上调用 AcceptChanges 或 RejectChanges 方法时将发生的操作。
公共枚举 | CommandBehavior | 提供对查询结果和查询对数据库的影响的说明。
公共枚举 | CommandType | 指定如何解释命令字符串。
公共枚举 | ConflictOption | 指定将如何检测和解决对数据源的相互冲突的更改。
公共枚举 | ConnectionState | 描述与数据源的连接的当前状态。
公共枚举 | DataRowAction | 描述在 DataRow 上执行的操作。
公共枚举 | DataRowState | 获取 DataRow 对象的状态。
公共枚举 | DataRowVersion | 描述 DataRow 的版本。
公共枚举 | DataSetDateTime | 介绍 DataSet 中 DateTime 列的序列化格式。
公共枚举 | DataViewRowState | 描述 DataRow 中数据的版本。
公共枚举 | DbType | 指定 .NET Framework 数据提供程序的字段、属性或 Parameter 对象的数据类型。
公共枚举 | EntityState | 实体对象的状态。
公共枚举 | IsolationLevel | 指定连接的事务锁定行为。
公共枚举 | KeyRestrictionBehavior | 标识由 KeyRestrictions 属性标识的连接字符串参数的列表，这些参数或者是被允许的，或者是不被允许的。
公共枚举 | LoadOption | 当使用 Load 或 Load 方法时控制数据源中的值如何应用至现有行。
公共枚举 | MappingType | 指定如何映射 DataColumn。
公共枚举 | MissingMappingAction | 确定源表或源列中缺少映射时发生的操作。
公共枚举 | MissingSchemaAction | 指定在将数据添加到 DataSet 而缺少要求的 DataTable 或 DataColumn 时要采取的操作。
公共枚举 | ParameterDirection | 指定查询内的有关 DataSet 的参数的类型。
公共枚举 | PropertyAttributes | 已过时。 指定属性的特性。
公共枚举 | Rule | 指示在强制 ForeignKeyConstraint 时发生的操作。
公共枚举 | SchemaSerializationMode | 指示类型化 DataSet 的架构序列化模式。
公共枚举 | SchemaType | 指定在执行 FillSchema 操作时如何处理现有的架构映射。
公共枚举 | SerializationFormat | 确定 DataSet 的序列化格式。
公共枚举 | SqlDbType | 指定要用于 SqlParameter 中的字段和属性的 SQL Server 特定的数据类型。
公共枚举 | StatementType | 指定由 OleDbRowUpdatedEventArgs、OleDbRowUpdatingEventArgs、SqlRowUpdatedEventArgs 或 SqlRowUpdatingEventArgs 类使用的 SQL 查询的类型。
公共枚举 | UpdateRowSource | 指定如何将查询命令结果应用到正在更新的行。
公共枚举 | UpdateStatus | 指定在 Update 期间对当前行和其余行采取的操作。
公共枚举 | XmlReadMode | 指定如何将 XML 数据和关系架构读入 DataSet。
公共枚举 | XmlWriteMode | 指定如何从 DataSet 写入 XML 数据和关系架构。


AcceptRejectRule 枚举

AcceptRejectRule 枚举

确定在带有 ForeignKeyConstraint 的 DataTable 上调用 AcceptChanges 或 RejectChanges 方法时将发生的操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration AcceptRejectRule
public enum AcceptRejectRule
public enum class AcceptRejectRule
type AcceptRejectRule
 | 成员名称 | 说明
由 XNA Framework 提供支持 | None | 不发生任何操作（默认）。
由 XNA Framework 提供支持 | Cascade | 在关系中级联更改。

在调用 AcceptChanges 方法之前，对 DataTable 的更改不是最终的。当对父表中的行调用 AcceptChanges 或 RejectChanges 时，AcceptRejectRule 值确定是否将更改传播到子表中相应的行。 在调用 AcceptChanges 方法之前，对 DataTable 的更改不是最终的。当对父表中的行调用 AcceptChanges 或 RejectChanges 时，AcceptRejectRule 值确定是否将更改传播到子表中相应的行。

下面的示例创建 ForeignKeyConstraint，设置它的各种属性（包括 AcceptRejectRule），并将其添加到 DataTable 对象的 ConstraintCollection 中。

Private Sub CreateConstraint(dataSet As DataSet, _
   table1 As String, table2 As String, _
   column1 As String, column2 As String)

   ' Declare parent column and child column variables.
   Dim parentColumn As DataColumn
   Dim childColumn As DataColumn
   Dim foreignKeyConstraint As ForeignKeyConstraint

   ' Set parent and child column variables.
   parentColumn = dataSet.Tables(table1).Columns(column1)
   childColumn = dataSet.Tables(table2).Columns(column2)
   foreignKeyConstraint = New ForeignKeyConstraint _
      ("SupplierForeignKeyConstraint", parentColumn, childColumn)

   ' Set null values when a value is deleted.
   foreignKeyConstraint.DeleteRule = Rule.SetNull
   foreignKeyConstraint.UpdateRule = Rule.Cascade
   foreignKeyConstraint.AcceptRejectRule = AcceptRejectRule.None

   ' Add the constraint, and set EnforceConstraints to true.
   dataSet.Tables(table1).Constraints.Add(foreignKeyConstraint)
   dataSet.EnforceConstraints = True
End Sub

private void CreateConstraint(DataSet dataSet,
    string table1, string table2,string column1, string column2)
{
   // Declare parent column and child column variables.
   DataColumn parentColumn;
   DataColumn childColumn;
   ForeignKeyConstraint foreignKeyConstraint;

   // Set parent and child column variables.
   parentColumn = dataSet.Tables[table1].Columns[column1];
   childColumn = dataSet.Tables[table2].Columns[column2];
   foreignKeyConstraint = new ForeignKeyConstraint
      ("SupplierForeignKeyConstraint",  parentColumn, childColumn);

   // Set null values when a value is deleted.
   foreignKeyConstraint.DeleteRule = Rule.SetNull;
   foreignKeyConstraint.UpdateRule = Rule.Cascade;
   foreignKeyConstraint.AcceptRejectRule = AcceptRejectRule.None;

   // Add the constraint, and set EnforceConstraints to true.
   dataSet.Tables[table1].Constraints.Add(foreignKeyConstraint);
   dataSet.EnforceConstraints = true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间
DataTable
UniqueConstraint
ForeignKeyConstraint
AcceptRejectRule


CommandBehavior 枚举

CommandBehavior 枚举

提供对查询结果和查询对数据库的影响的说明。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<FlagsAttribute> _
Public Enumeration CommandBehavior
[FlagsAttribute]
public enum CommandBehavior
[FlagsAttribute]
public enum class CommandBehavior
[<FlagsAttribute>]
type CommandBehavior
成员名称 | 说明
由 XNA Framework 提供支持 | Default | 此查询可能返回多个结果集。执行查询可能会影响数据库的状态。Default 不设置 CommandBehavior 标志，因此调用 ExecuteReader(CommandBehavior.Default) 在功能上等效于调用 ExecuteReader()。 此查询可能返回多个结果集。执行查询可能会影响数据库的状态。Default 不设置 CommandBehavior 标志，因此调用 ExecuteReader(CommandBehavior.Default) 在功能上等效于调用 ExecuteReader()。 此查询可能返回多个结果集。执行查询可能会影响数据库的状态。Default 不设置 CommandBehavior 标志，因此调用 ExecuteReader(CommandBehavior.Default) 在功能上等效于调用 ExecuteReader()。
由 XNA Framework 提供支持 | SingleResult | 查询返回一个结果集。
由 XNA Framework 提供支持 | SchemaOnly | 查询仅返回列信息。当使用 SchemaOnly 时，用于 SQL Server 的 .NET Framework 数据提供程序将在要执行的语句前加上 SET FMTONLY ON。 查询仅返回列信息。当使用 SchemaOnly 时，用于 SQL Server 的 .NET Framework 数据提供程序将在要执行的语句前加上 SET FMTONLY ON。
由 XNA Framework 提供支持 KeyInfo 此查询返回列和主键信息。

当 KeyInfo 用于命令执行时，提供程序将为现有主键列和时间戳列的结果集附加额外的列。

当使用 KeyInfo 时，用于 SQL Server 的 .NET Framework 数据提供程序将在要执行的语句前加上 SET FMTONLY OFF 和 SET NO_BROWSETABLE ON。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 KeyInfo 时，用于 SQL Server 的 .NET Framework 数据提供程序将在要执行的语句前加上 SET FMTONLY OFF 和 SET NO_BROWSETABLE ON。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 KeyInfo 时，用于 SQL Server 的 .NET Framework 数据提供程序将在要执行的语句前加上 SET FMTONLY OFF 和 SET NO_BROWSETABLE ON。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。
由 XNA Framework 提供支持 | SingleRow | 查询应返回结果集中的单个行。执行查询可能会影响数据库的状态。一些 .NET Framework 数据提供程序可能（但不要求）使用此信息来优化命令的性能。用 OleDbCommand 对象的 ExecuteReader 方法指定 SingleRow 时，用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB IRow 接口（如果可用）执行绑定。否则，它使用 IRowset 接口。如果您的 SQL 语句应该只返回一行，则指定 SingleRow 还可以提高应用程序性能。在执行应返回多个结果集的查询时，可以指定 SingleRow。在这种情况下，同时指定了多结果集 SQL 查询和单行，返回的结果将仅包含第一个结果集的第一行。将不返回查询的其他结果集。 查询应返回结果集中的单个行。执行查询可能会影响数据库的状态。一些 .NET Framework 数据提供程序可能（但不要求）使用此信息来优化命令的性能。用 OleDbCommand 对象的 ExecuteReader 方法指定 SingleRow 时，用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB IRow 接口（如果可用）执行绑定。否则，它使用 IRowset 接口。如果您的 SQL 语句应该只返回一行，则指定 SingleRow 还可以提高应用程序性能。在执行应返回多个结果集的查询时，可以指定 SingleRow。在这种情况下，同时指定了多结果集 SQL 查询和单行，返回的结果将仅包含第一个结果集的第一行。将不返回查询的其他结果集。 查询应返回结果集中的单个行。执行查询可能会影响数据库的状态。一些 .NET Framework 数据提供程序可能（但不要求）使用此信息来优化命令的性能。用 OleDbCommand 对象的 ExecuteReader 方法指定 SingleRow 时，用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB IRow 接口（如果可用）执行绑定。否则，它使用 IRowset 接口。如果您的 SQL 语句应该只返回一行，则指定 SingleRow 还可以提高应用程序性能。在执行应返回多个结果集的查询时，可以指定 SingleRow。在这种情况下，同时指定了多结果集 SQL 查询和单行，返回的结果将仅包含第一个结果集的第一行。将不返回查询的其他结果集。 查询应返回结果集中的单个行。执行查询可能会影响数据库的状态。一些 .NET Framework 数据提供程序可能（但不要求）使用此信息来优化命令的性能。用 OleDbCommand 对象的 ExecuteReader 方法指定 SingleRow 时，用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB IRow 接口（如果可用）执行绑定。否则，它使用 IRowset 接口。如果您的 SQL 语句应该只返回一行，则指定 SingleRow 还可以提高应用程序性能。在执行应返回多个结果集的查询时，可以指定 SingleRow。在这种情况下，同时指定了多结果集 SQL 查询和单行，返回的结果将仅包含第一个结果集的第一行。将不返回查询的其他结果集。 查询应返回结果集中的单个行。执行查询可能会影响数据库的状态。一些 .NET Framework 数据提供程序可能（但不要求）使用此信息来优化命令的性能。用 OleDbCommand 对象的 ExecuteReader 方法指定 SingleRow 时，用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB IRow 接口（如果可用）执行绑定。否则，它使用 IRowset 接口。如果您的 SQL 语句应该只返回一行，则指定 SingleRow 还可以提高应用程序性能。在执行应返回多个结果集的查询时，可以指定 SingleRow。在这种情况下，同时指定了多结果集 SQL 查询和单行，返回的结果将仅包含第一个结果集的第一行。将不返回查询的其他结果集。 查询应返回结果集中的单个行。执行查询可能会影响数据库的状态。一些 .NET Framework 数据提供程序可能（但不要求）使用此信息来优化命令的性能。用 OleDbCommand 对象的 ExecuteReader 方法指定 SingleRow 时，用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB IRow 接口（如果可用）执行绑定。否则，它使用 IRowset 接口。如果您的 SQL 语句应该只返回一行，则指定 SingleRow 还可以提高应用程序性能。在执行应返回多个结果集的查询时，可以指定 SingleRow。在这种情况下，同时指定了多结果集 SQL 查询和单行，返回的结果将仅包含第一个结果集的第一行。将不返回查询的其他结果集。 查询应返回结果集中的单个行。执行查询可能会影响数据库的状态。一些 .NET Framework 数据提供程序可能（但不要求）使用此信息来优化命令的性能。用 OleDbCommand 对象的 ExecuteReader 方法指定 SingleRow 时，用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB IRow 接口（如果可用）执行绑定。否则，它使用 IRowset 接口。如果您的 SQL 语句应该只返回一行，则指定 SingleRow 还可以提高应用程序性能。在执行应返回多个结果集的查询时，可以指定 SingleRow。在这种情况下，同时指定了多结果集 SQL 查询和单行，返回的结果将仅包含第一个结果集的第一行。将不返回查询的其他结果集。 查询应返回结果集中的单个行。执行查询可能会影响数据库的状态。一些 .NET Framework 数据提供程序可能（但不要求）使用此信息来优化命令的性能。用 OleDbCommand 对象的 ExecuteReader 方法指定 SingleRow 时，用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB IRow 接口（如果可用）执行绑定。否则，它使用 IRowset 接口。如果您的 SQL 语句应该只返回一行，则指定 SingleRow 还可以提高应用程序性能。在执行应返回多个结果集的查询时，可以指定 SingleRow。在这种情况下，同时指定了多结果集 SQL 查询和单行，返回的结果将仅包含第一个结果集的第一行。将不返回查询的其他结果集。 查询应返回结果集中的单个行。执行查询可能会影响数据库的状态。一些 .NET Framework 数据提供程序可能（但不要求）使用此信息来优化命令的性能。用 OleDbCommand 对象的 ExecuteReader 方法指定 SingleRow 时，用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB IRow 接口（如果可用）执行绑定。否则，它使用 IRowset 接口。如果您的 SQL 语句应该只返回一行，则指定 SingleRow 还可以提高应用程序性能。在执行应返回多个结果集的查询时，可以指定 SingleRow。在这种情况下，同时指定了多结果集 SQL 查询和单行，返回的结果将仅包含第一个结果集的第一行。将不返回查询的其他结果集。
由 XNA Framework 提供支持 SequentialAccess 提供一种方法，以便 DataReader 处理包含带有大二进制值的列的行。SequentialAccess 不是加载整行，而是使 DataReader 将数据作为流来加载。然后可以使用 GetBytes 或 GetChars 方法来指定开始读取操作的字节位置以及正在返回的数据的有限的缓冲区大小。 提供一种方法，以便 DataReader 处理包含带有大二进制值的列的行。SequentialAccess 不是加载整行，而是使 DataReader 将数据作为流来加载。然后可以使用 GetBytes 或 GetChars 方法来指定开始读取操作的字节位置以及正在返回的数据的有限的缓冲区大小。 提供一种方法，以便 DataReader 处理包含带有大二进制值的列的行。SequentialAccess 不是加载整行，而是使 DataReader 将数据作为流来加载。然后可以使用 GetBytes 或 GetChars 方法来指定开始读取操作的字节位置以及正在返回的数据的有限的缓冲区大小。

当指定 SequentialAccess 时，尽管无需读取每个列，但是需要按照列的返回顺序读取它们。一旦已经读过返回的数据流中某个位置的内容，就不能再从 DataReader 中读取该位置或该位置之前的数据。当使用 OleDbDataReader 时，可重新读取当前列的值，直到读过它。当使用 SqlDataReader 时，一次只能读取一个列值。 当指定 SequentialAccess 时，尽管无需读取每个列，但是需要按照列的返回顺序读取它们。一旦已经读过返回的数据流中某个位置的内容，就不能再从 DataReader 中读取该位置或该位置之前的数据。当使用 OleDbDataReader 时，可重新读取当前列的值，直到读过它。当使用 SqlDataReader 时，一次只能读取一个列值。 当指定 SequentialAccess 时，尽管无需读取每个列，但是需要按照列的返回顺序读取它们。一旦已经读过返回的数据流中某个位置的内容，就不能再从 DataReader 中读取该位置或该位置之前的数据。当使用 OleDbDataReader 时，可重新读取当前列的值，直到读过它。当使用 SqlDataReader 时，一次只能读取一个列值。 当指定 SequentialAccess 时，尽管无需读取每个列，但是需要按照列的返回顺序读取它们。一旦已经读过返回的数据流中某个位置的内容，就不能再从 DataReader 中读取该位置或该位置之前的数据。当使用 OleDbDataReader 时，可重新读取当前列的值，直到读过它。当使用 SqlDataReader 时，一次只能读取一个列值。
由 XNA Framework 提供支持 | CloseConnection | 在执行该命令时，如果关闭关联的 DataReader 对象，则关联的 Connection 对象也将关闭。

IDbCommand 及从它派生的任何类的 ExecuteReader 方法都使用 CommandBehavior 值。

可以使用这些值的按位组合。

CommandBehavior 在用于定义 SqlNotificationRequest 或 SqlDependency 时将被忽略，因此不应该使用。在这两种情况下，请使用不需要 CommandBehavior 参数的构造函数。 CommandBehavior 在用于定义 SqlNotificationRequest 或 SqlDependency 时将被忽略，因此不应该使用。在这两种情况下，请使用不需要 CommandBehavior 参数的构造函数。

说明 说明

请使用 SequentialAccess 检索大值和二进制数据。否则，可能出现 OutOfMemoryException 并且连接将关闭。 请使用 SequentialAccess 检索大值和二进制数据。否则，可能出现 OutOfMemoryException 并且连接将关闭。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


CommandType 枚举

CommandType 枚举

指定如何解释命令字符串。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration CommandType
public enum CommandType
public enum class CommandType
type CommandType
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Text | SQL 文本命令。（默认。） SQL 文本命令。（默认。）
由 XNA Framework 提供支持 | StoredProcedure | 存储过程的名称。
由 XNA Framework 提供支持 | TableDirect | 表的名称。

当 CommandType 属性设置为 StoredProcedure 时，CommandText 属性应设置为要访问的存储过程的名称。如果指定的任何表包含任何特殊字符，那么用户可能需要使用转义符语法或包括限定字符。当调用 Command 对象的 Execute 方法之一时，将返回命名表的所有行和列。 当 CommandType 属性设置为 StoredProcedure 时，CommandText 属性应设置为要访问的存储过程的名称。如果指定的任何表包含任何特殊字符，那么用户可能需要使用转义符语法或包括限定字符。当调用 Command 对象的 Execute 方法之一时，将返回命名表的所有行和列。 当 CommandType 属性设置为 StoredProcedure 时，CommandText 属性应设置为要访问的存储过程的名称。如果指定的任何表包含任何特殊字符，那么用户可能需要使用转义符语法或包括限定字符。当调用 Command 对象的 Execute 方法之一时，将返回命名表的所有行和列。

CommandType 属性设置为 TableDirect 时，应将 CommandText 属性设置为要访问的表的名称。如果已命名的任何表包含任何特殊字符，那么用户可能需要使用转义符语法或包括限定字符。当您调用“执行”(Execute) 方法之一时，将返回命名表的所有行和列。 CommandType 属性设置为 TableDirect 时，应将 CommandText 属性设置为要访问的表的名称。如果已命名的任何表包含任何特殊字符，那么用户可能需要使用转义符语法或包括限定字符。当您调用“执行”(Execute) 方法之一时，将返回命名表的所有行和列。 CommandType 属性设置为 TableDirect 时，应将 CommandText 属性设置为要访问的表的名称。如果已命名的任何表包含任何特殊字符，那么用户可能需要使用转义符语法或包括限定字符。当您调用“执行”(Execute) 方法之一时，将返回命名表的所有行和列。

为了访问多个表，请使用逗号分隔的列表（没有空格或空白），其中包含要访问的多个表的名称。当 CommandText 属性命名多个表时，返回指定表的联接。 为了访问多个表，请使用逗号分隔的列表（没有空格或空白），其中包含要访问的多个表的名称。当 CommandText 属性命名多个表时，返回指定表的联接。

说明 说明

只有用于 OLE DB 的 .NET Framework 数据提供程序才支持 TableDirect。当 CommandType 设置为 TableDirect 时，不支持对多个表的访问。 只有用于 OLE DB 的 .NET Framework 数据提供程序才支持 TableDirect。当 CommandType 设置为 TableDirect 时，不支持对多个表的访问。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


ConflictOption 枚举

ConflictOption 枚举

指定将如何检测和解决对数据源的相互冲突的更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration ConflictOption
public enum ConflictOption
public enum class ConflictOption
type ConflictOption
 | 成员名称 | 说明
由 XNA Framework 提供支持 | CompareAllSearchableValues | 更新和删除语句将在 WHERE 子句中包含表中的所有可搜索列。这等效于指定 CompareAllValuesUpdate |CompareAllValuesDelete. 更新和删除语句将在 WHERE 子句中包含表中的所有可搜索列。这等效于指定 CompareAllValuesUpdate |CompareAllValuesDelete. | 更新和删除语句将在 WHERE 子句中包含表中的所有可搜索列。这等效于指定 CompareAllValuesUpdate |CompareAllValuesDelete.
由 XNA Framework 提供支持 | CompareRowVersion | 如果表中存在任何 Timestamp 列，则这些列在 WHERE 子句中用于所有生成的更新语句。这等效于指定 CompareRowVersionUpdate |CompareRowVersionDelete. 如果表中存在任何 Timestamp 列，则这些列在 WHERE 子句中用于所有生成的更新语句。这等效于指定 CompareRowVersionUpdate |CompareRowVersionDelete. | 如果表中存在任何 Timestamp 列，则这些列在 WHERE 子句中用于所有生成的更新语句。这等效于指定 CompareRowVersionUpdate |CompareRowVersionDelete.
由 XNA Framework 提供支持 | OverwriteChanges | 所有的更新和删除语句仅在 WHERE 子句中包含 PrimaryKey 列。如果未定义 PrimaryKey，则所有可搜索的列都包含在 WHERE 子句中。这等效于 OverwriteChangesUpdate |OverwriteChangesDelete. 所有的更新和删除语句仅在 WHERE 子句中包含 PrimaryKey 列。如果未定义 PrimaryKey，则所有可搜索的列都包含在 WHERE 子句中。这等效于 OverwriteChangesUpdate |OverwriteChangesDelete. 所有的更新和删除语句仅在 WHERE 子句中包含 PrimaryKey 列。如果未定义 PrimaryKey，则所有可搜索的列都包含在 WHERE 子句中。这等效于 OverwriteChangesUpdate |OverwriteChangesDelete. | 所有的更新和删除语句仅在 WHERE 子句中包含 PrimaryKey 列。如果未定义 PrimaryKey，则所有可搜索的列都包含在 WHERE 子句中。这等效于 OverwriteChangesUpdate |OverwriteChangesDelete.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


ConnectionState 枚举

ConnectionState 枚举

描述与数据源的连接的当前状态。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<FlagsAttribute> _
Public Enumeration ConnectionState
[FlagsAttribute]
public enum ConnectionState
[FlagsAttribute]
public enum class ConnectionState
[<FlagsAttribute>]
type ConnectionState
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Closed | 连接处于关闭状态。
由 XNA Framework 提供支持 | Open | 连接处于打开状态。
由 XNA Framework 提供支持 | Connecting | 连接对象正在与数据源连接。（该值是为此产品的未来版本保留的。） 连接对象正在与数据源连接。（该值是为此产品的未来版本保留的。）
由 XNA Framework 提供支持 | Executing | 连接对象正在执行命令。（该值是为此产品的未来版本保留的。） 连接对象正在执行命令。（该值是为此产品的未来版本保留的。）
由 XNA Framework 提供支持 | Fetching | 连接对象正在检索数据。（该值是为此产品的未来版本保留的。） 连接对象正在检索数据。（该值是为此产品的未来版本保留的。）
由 XNA Framework 提供支持 | Broken | 与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接，然后重新打开。（该值是为此产品的未来版本保留的。） 与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接，然后重新打开。（该值是为此产品的未来版本保留的。） 与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接，然后重新打开。（该值是为此产品的未来版本保留的。） 与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接，然后重新打开。（该值是为此产品的未来版本保留的。）

OleDbConnection 和 SqlConnection 对象的 State 属性使用 ConnectionState 值。

说明 说明

不应将此枚举中的值用作一组标志。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


Constraint 类

Constraint 类
成员

表示可在一个或多个 DataColumn 对象上强制的约束。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class Constraint
public abstract class Constraint
public ref class Constraint abstract
[<AbstractClassAttribute>]
type Constraint =  class end

约束是用于维护 DataTable 中的数据的完整性的规则。例如，当删除在一个或多个相关表中使用的值时，ForeignKeyConstraint 确定如何处理相关表中的值：同样删除、设置为空值、设置为默认值或者不执行任何操作。另一方面，UniqueConstraint 只是确保特定的表内的所有值都是唯一的。有关更多信息，请参见数据表约束 (ADO.NET)。 约束是用于维护 DataTable 中的数据的完整性的规则。例如，当删除在一个或多个相关表中使用的值时，ForeignKeyConstraint 确定如何处理相关表中的值：同样删除、设置为空值、设置为默认值或者不执行任何操作。另一方面，UniqueConstraint 只是确保特定的表内的所有值都是唯一的。有关更多信息，请参见数据表约束 (ADO.NET)。 约束是用于维护 DataTable 中的数据的完整性的规则。例如，当删除在一个或多个相关表中使用的值时，ForeignKeyConstraint 确定如何处理相关表中的值：同样删除、设置为空值、设置为默认值或者不执行任何操作。另一方面，UniqueConstraint 只是确保特定的表内的所有值都是唯一的。有关更多信息，请参见数据表约束 (ADO.NET)。 约束是用于维护 DataTable 中的数据的完整性的规则。例如，当删除在一个或多个相关表中使用的值时，ForeignKeyConstraint 确定如何处理相关表中的值：同样删除、设置为空值、设置为默认值或者不执行任何操作。另一方面，UniqueConstraint 只是确保特定的表内的所有值都是唯一的。有关更多信息，请参见数据表约束 (ADO.NET)。

不使用基本的 Constraint 构造函数。使用 UniqueConstraint 构造函数创建主键约束或唯一键约束，使用 ForeignKeyConstraint 构造函数创建外键约束。 不使用基本的 Constraint 构造函数。使用 UniqueConstraint 构造函数创建主键约束或唯一键约束，使用 ForeignKeyConstraint 构造函数创建外键约束。

下面的示例检查 DataTable 的约束集合，并确定每个约束是 UniqueConstraint 还是 ForeignKeyConstraint。然后显示约束的属性。 下面的示例检查 DataTable 的约束集合，并确定每个约束是 UniqueConstraint 还是 ForeignKeyConstraint。然后显示约束的属性。

Private Sub GetConstraints(dataTable As DataTable)
    Console.WriteLine()

    ' Print the table's name.
    Console.WriteLine("TableName: " & dataTable.TableName)

    ' Iterate through the collection and print
    ' each name and type value.
    Dim constraint As Constraint
    For Each constraint In  dataTable.Constraints
        Console.WriteLine("Constraint Name: " _
            & constraint.ConstraintName)
        Console.WriteLine("Type: " _
            & constraint.GetType().ToString())

        ' If the constraint is a UniqueConstraint,
        ' print its properties using a function below.
        If TypeOf constraint Is UniqueConstraint Then
            PrintUniqueConstraintProperties(constraint)
        End If

        ' If the constraint is a ForeignKeyConstraint,
        ' print its properties using a function below.
        If TypeOf constraint Is ForeignKeyConstraint Then
            PrintForeigKeyConstraintProperties(constraint)
        End If
    Next constraint
End Sub

Private Sub PrintUniqueConstraintProperties( _
    constraint As Constraint)

    Dim uniqueConstraint As UniqueConstraint
    uniqueConstraint = CType(constraint, UniqueConstraint)

    ' Get the Columns as an array.
    Dim columnArray() As DataColumn
    columnArray = uniqueConstraint.Columns

    ' Print each column's name.
    Dim i As Integer
    For i = 0 To columnArray.Length - 1
        Console.WriteLine("Column Name: " _
            & columnArray(i).ColumnName)
    Next i
End Sub

Private Sub PrintForeigKeyConstraintProperties( _
    constraint As Constraint)

    Dim fkConstraint As ForeignKeyConstraint
    fkConstraint = CType(constraint, ForeignKeyConstraint)

    ' Get the Columns as an array.
    Dim columnArray() As DataColumn
    columnArray = fkConstraint.Columns

    ' Print each column's name.
    Dim i As Integer
    For i = 0 To columnArray.Length - 1
        Console.WriteLine("Column Name: " _
            & columnArray(i).ColumnName)
    Next i
    Console.WriteLine()

    ' Get the related columns and print each columns name.
    columnArray = fkConstraint.RelatedColumns
    For i = 0 To columnArray.Length - 1
        Console.WriteLine("Related Column Name: " _
            & columnArray(i).ColumnName)
    Next i
    Console.WriteLine()
End Sub

private void GetConstraints(DataTable dataTable)
{
    Console.WriteLine();

    // Print the table's name.
    Console.WriteLine("TableName: " + dataTable.TableName);

    // Iterate through the collection and
    // print each name and type value.
    foreach(Constraint constraint in dataTable.Constraints )
    {
        Console.WriteLine("Constraint Name: "
            + constraint.ConstraintName);
        Console.WriteLine("Type: "
            + constraint.GetType().ToString());

        // If the constraint is a UniqueConstraint,
        // print its properties using a function below.
        if(constraint is UniqueConstraint)
        {
            PrintUniqueConstraintProperties(constraint);
        }
        // If the constraint is a ForeignKeyConstraint,
        // print its properties using a function below.
        if(constraint is ForeignKeyConstraint)
        {
            PrintForeigKeyConstraintProperties(constraint);
        }
    }
}

private void PrintUniqueConstraintProperties(
    Constraint constraint)
{
    UniqueConstraint uniqueConstraint;
    uniqueConstraint = (UniqueConstraint) constraint;

    // Get the Columns as an array.
    DataColumn[] columnArray;
    columnArray = uniqueConstraint.Columns;

    // Print each column's name.
    for(int i = 0;i<columnArray.Length ;i++)
    {
        Console.WriteLine("Column Name: "
            + columnArray[i].ColumnName);
    }
}

private void PrintForeigKeyConstraintProperties(
    Constraint constraint)
{
    ForeignKeyConstraint fkConstraint;
    fkConstraint = (ForeignKeyConstraint) constraint;

    // Get the Columns as an array.
    DataColumn[] columnArray;
    columnArray = fkConstraint.Columns;

    // Print each column's name.
    for(int i = 0;i<columnArray.Length ;i++)
    {
        Console.WriteLine("Column Name: "
            + columnArray[i].ColumnName);
    }
    Console.WriteLine();

    // Get the related columns and print each columns name.
    columnArray = fkConstraint.RelatedColumns ;
    for(int i = 0;i<columnArray.Length ;i++)
    {
        Console.WriteLine("Related Column Name: "
            + columnArray[i].ColumnName);
    }
    Console.WriteLine();
}

System.Data System.Data..::.ConstraintConstraint

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Constraint 成员
System.Data 命名空间
ConstraintCollection
Constraints
ForeignKeyConstraint
UniqueConstraint


Constraint 成员

Constraint 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Constraint 类

表示可在一个或多个 DataColumn 对象上强制的约束。

Constraint 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Constraint 类
System.Data 命名空间


Constraint 构造函数

Constraint 构造函数
Constraint 类

初始化 Constraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected Constraint()
protected:
Constraint()
new : unit -> Constraint

派生类构造函数调用此构造函数初始化该类型中的状态。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Constraint 类
Constraint 成员
System.Data 命名空间


Constraint 方法

Constraint 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Constraint 类

Constraint 类型公开以下成员。

名称 说明
页首

参考

Constraint 类
System.Data 命名空间


Constraint ..::.CheckStateForProperty 方法

Constraint
.
.
::
.
CheckStateForProperty 方法
Constraint 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

获取此约束所属的 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub CheckStateForProperty
protected void CheckStateForProperty()
protected:
void CheckStateForProperty()
member CheckStateForProperty : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Constraint 类
Constraint 成员
System.Data 命名空间


Constraint ..::.SetDataSet 方法

Constraint
.
.
::
.
SetDataSet 方法
Constraint 类

设置约束的 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Sub SetDataSet ( _
    dataSet As DataSet _
)
protected internal void SetDataSet(
    DataSet dataSet
)
protected public:
void SetDataSet(
    DataSet^ dataSet
)
member SetDataSet :
        dataSet:DataSet -> unit

参数

dataSet
类型： System.Data DataSet
此约束将属于的 DataSet。

下面的示例使用 SetDataSet 方法设置约束的 DataSet。

Dim uniqueConstraint As New UniqueConstraint( _
    DataSet1.Tables("Table1").Columns("Column1"))

UniqueConstraint uniqueConstraint = new UniqueConstraint(
    DataSet1.Tables["Table1"].Columns["Column1"]);

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Constraint 类
Constraint 成员
System.Data 命名空间


Constraint ..::.ToString 方法

Constraint
.
.
::
.
ToString 方法
Constraint 类

获取 ConstraintName（如果存在）作为字符串。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
ConstraintName 的字符串值。

下面的示例使用 ToString 方法返回 ConstraintName。

Private Sub PrintToString(constraint As Constraint)

    Console.WriteLine(constraint.ToString())

End Sub

private void PrintToString(Constraint constraint)
{
    Console.WriteLine(constraint.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Constraint 类
Constraint 成员
System.Data 命名空间


Constraint 属性

Constraint 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Constraint 类

Constraint 类型公开以下成员。

名称 说明
页首

参考

Constraint 类
System.Data 命名空间


Constraint ..::._DataSet 属性

Constraint
.
.
::
.
_DataSet 属性
Constraint 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

获取此约束所属的 DataSet。

此 API 不兼容 CLS。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<CLSCompliantAttribute(False)> _
Protected Overridable ReadOnly Property _DataSet As DataSet
    Get
[CLSCompliantAttribute(false)]
protected virtual DataSet _DataSet { get; }
[CLSCompliantAttribute(false)]
protected:
virtual property DataSet^ _DataSet {
    DataSet^ get ();
}
[<CLSCompliantAttribute(false)>]
abstract _DataSet : DataSet
[<CLSCompliantAttribute(false)>]
override _DataSet : DataSet

属性值

类型： System.Data DataSet
此约束所属的 DataSet。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Constraint 类
Constraint 成员
System.Data 命名空间


Constraint ..::.ConstraintName 属性

Constraint
.
.
::
.
ConstraintName 属性
Constraint 类

ConstraintCollection 中的约束的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property ConstraintName As String
    Get
    Set
public virtual string ConstraintName { get; set; }
public:
virtual property String^ ConstraintName {
    String^ get ();
    void set (String^ value);
}
abstract ConstraintName : string with get, set
override ConstraintName : string with get, set

属性值

类型： System String
Constraint 的名称。
异常 | 条件
ArgumentException | Constraint 名称是空值或空字符串。
DuplicateNameException | ConstraintCollection 已经包含同名称的 Constraint（比较不区分大小写。）

ConstraintCollection 由 DataTable 类的 Constraints 属性返回。

下面的示例循环访问 DataTable 的 ConstraintCollection，并打印每个 ConstraintName。

Private Sub PrintConstraintNames(myTable As DataTable)
    Dim cs As Constraint
    For Each cs In  myTable.Constraints
        Console.WriteLine(cs.ConstraintName)
    Next cs
End Sub

private void PrintConstraintNames(DataTable myTable){
   foreach(Constraint cs in myTable.Constraints){
      Console.WriteLine(cs.ConstraintName);
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Constraint 类
Constraint 成员
System.Data 命名空间


Constraint ..::.ExtendedProperties 属性

Constraint
.
.
::
.
ExtendedProperties 属性
Constraint 类

获取用户定义的约束属性的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property ExtendedProperties As PropertyCollection
    Get
[BrowsableAttribute(false)]
public PropertyCollection ExtendedProperties { get; }
[BrowsableAttribute(false)]
public:
property PropertyCollection^ ExtendedProperties {
    PropertyCollection^ get ();
}
[<BrowsableAttribute(false)>]
member ExtendedProperties : PropertyCollection

属性值

类型： System.Data PropertyCollection
自定义信息的 PropertyCollection。

扩展属性必须是 String 类型。当以 XML 的形式写 Constraint 时，不保持非 String 类型的属性。 扩展属性必须是 String 类型。当以 XML 的形式写 Constraint 时，不保持非 String 类型的属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Constraint 类
Constraint 成员
System.Data 命名空间


Constraint ..::.Table 属性

Constraint
.
.
::
.
Table 属性
Constraint 类

获取向其应用约束的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property Table As DataTable
    Get
public abstract DataTable Table { get; }
public:
virtual property DataTable^ Table {
    DataTable^ get () abstract;
}
abstract Table : DataTable

属性值

类型： System.Data DataTable
向其应用约束的 DataTable。

下面的示例返回 Constraint 的 DataTable。

Private Sub GetDataTable(constraint As UniqueConstraint)
    Dim table As DataTable = constraint.Table
    Console.WriteLine(table.TableName)
End Sub

private void GetDataTable(UniqueConstraint constraint){
   DataTable table = constraint.Table;
   Console.WriteLine(table.TableName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

Constraint 类
Constraint 成员
System.Data 命名空间


ConstraintCollection 类

ConstraintCollection 类
成员

表示 DataTable 的约束的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class ConstraintCollection _
    Inherits InternalDataCollectionBase
public sealed class ConstraintCollection : InternalDataCollectionBase
public ref class ConstraintCollection sealed : public InternalDataCollectionBase
[<SealedAttribute>]
type ConstraintCollection =
    class
        inherit InternalDataCollectionBase
    end

通过 DataTable..::.Constraints 属性访问 ConstraintCollection。

ConstraintCollection 可以包含 DataTable 的 UniqueConstraint 和 ForeignKeyConstraint 对象。UniqueConstraint 对象确保特定列中的数据总是唯一的，以保持数据完整性。ForeignKeyConstraint 确定在更新或删除 DataTable 中的数据时在相关表中将发生什么。例如，如果删除行，ForeignKeyConstraint 将确定是否也删除相关行（级联），或者执行其他某个操作过程。 ConstraintCollection 可以包含 DataTable 的 UniqueConstraint 和 ForeignKeyConstraint 对象。UniqueConstraint 对象确保特定列中的数据总是唯一的，以保持数据完整性。ForeignKeyConstraint 确定在更新或删除 DataTable 中的数据时在相关表中将发生什么。例如，如果删除行，ForeignKeyConstraint 将确定是否也删除相关行（级联），或者执行其他某个操作过程。 ConstraintCollection 可以包含 DataTable 的 UniqueConstraint 和 ForeignKeyConstraint 对象。UniqueConstraint 对象确保特定列中的数据总是唯一的，以保持数据完整性。ForeignKeyConstraint 确定在更新或删除 DataTable 中的数据时在相关表中将发生什么。例如，如果删除行，ForeignKeyConstraint 将确定是否也删除相关行（级联），或者执行其他某个操作过程。 ConstraintCollection 可以包含 DataTable 的 UniqueConstraint 和 ForeignKeyConstraint 对象。UniqueConstraint 对象确保特定列中的数据总是唯一的，以保持数据完整性。ForeignKeyConstraint 确定在更新或删除 DataTable 中的数据时在相关表中将发生什么。例如，如果删除行，ForeignKeyConstraint 将确定是否也删除相关行（级联），或者执行其他某个操作过程。

说明 说明

将用于在两个表之间创建关系的 DataRelation 添加到 DataSet 中时，将自动创建 ForeignKeyConstraint 和 UniqueConstraint。将 UniqueConstraint 应用到父级 DataTable 中的主键列，并将约束添加到该表的 ConstraintCollection。将 ForeignKeyConstraint 应用到主键列和外键列，并将约束添加到子表的 ConstraintCollection。 将用于在两个表之间创建关系的 DataRelation 添加到 DataSet 中时，将自动创建 ForeignKeyConstraint 和 UniqueConstraint。将 UniqueConstraint 应用到父级 DataTable 中的主键列，并将约束添加到该表的 ConstraintCollection。将 ForeignKeyConstraint 应用到主键列和外键列，并将约束添加到子表的 ConstraintCollection。 将用于在两个表之间创建关系的 DataRelation 添加到 DataSet 中时，将自动创建 ForeignKeyConstraint 和 UniqueConstraint。将 UniqueConstraint 应用到父级 DataTable 中的主键列，并将约束添加到该表的 ConstraintCollection。将 ForeignKeyConstraint 应用到主键列和外键列，并将约束添加到子表的 ConstraintCollection。

ConstraintCollection 使用标准的集合方法，如 Add、Clear 和 Remove。此外，可以使用 Contains 方法来查找集合中是否存在特定的约束。 ConstraintCollection 使用标准的集合方法，如 Add、Clear 和 Remove。此外，可以使用 Contains 方法来查找集合中是否存在特定的约束。

在将 DataColumn（其 Unique 属性设置为 true）添加到 DataTable 对象的 DataColumnCollection 中时，将创建 UniqueConstraint。

在将 DataRelation 添加到 DataSet 对象的 DataRelationCollection 时，将创建 ForeignKeyConstraint。

第一个示例创建一个 DataTable，并将 DataColumn（其 Unique 属性设置为 true）添加到 DataColumnCollection。第二个示例创建一个 DataSet，两个 DataTable 对象，四个列，一个 DataRelation。然后打印出约束的计数，以显示在将 DataRelation 添加到 DataSet 对象的 DataRelationCollection 时，将创建 ForeignKeyConstraint 和 UniqueConstraint。 第一个示例创建一个 DataTable，并将 DataColumn（其 Unique 属性设置为 true）添加到 DataColumnCollection。第二个示例创建一个 DataSet，两个 DataTable 对象，四个列，一个 DataRelation。然后打印出约束的计数，以显示在将 DataRelation 添加到 DataSet 对象的 DataRelationCollection 时，将创建 ForeignKeyConstraint 和 UniqueConstraint。 第一个示例创建一个 DataTable，并将 DataColumn（其 Unique 属性设置为 true）添加到 DataColumnCollection。第二个示例创建一个 DataSet，两个 DataTable 对象，四个列，一个 DataRelation。然后打印出约束的计数，以显示在将 DataRelation 添加到 DataSet 对象的 DataRelationCollection 时，将创建 ForeignKeyConstraint 和 UniqueConstraint。

Private Sub MakeTableWithUniqueConstraint()

    Dim table As New DataTable("table")
    Dim column As New DataColumn("UniqueColumn")
    column.Unique = True
    table.Columns.Add(column)

    ' Print count, name, and type.
    Console.WriteLine("Constraints.Count " _
       + table.Constraints.Count.ToString())
    Console.WriteLine(table.Constraints(0).ConstraintName)
    Console.WriteLine( _
        table.Constraints(0).GetType().ToString())

    ' Add a second unique column.
    column = New DataColumn("UniqueColumn2")
    column.Unique = True
    table.Columns.Add(column)

    ' Print info again.
    Console.WriteLine("Constraints.Count " _
       + table.Constraints.Count.ToString())
    Console.WriteLine(table.Constraints(1).ConstraintName)
    Console.WriteLine( _
        table.Constraints(1).GetType().ToString())
End Sub

Private Sub MakeTableWithForeignConstraint()

    ' Create a DataSet.
    Dim dataSet As New DataSet("dataSet")

    ' Make two tables.
    Dim customersTable As New DataTable("Customers")
    Dim ordersTable As New DataTable("Orders")

    ' Create four columns, two for each table.
    Dim name As New DataColumn("Name")
    Dim id As New DataColumn("ID")
    Dim orderId As New DataColumn("OrderID")
    Dim orderDate As New DataColumn("OrderDate")

    ' Add columns to tables.
    customersTable.Columns.Add(name)
    customersTable.Columns.Add(id)
    ordersTable.Columns.Add(orderId)
    ordersTable.Columns.Add(orderDate)

    ' Add tables to the DataSet.
    dataSet.Tables.Add(customersTable)
    dataSet.Tables.Add(ordersTable)

    ' Create a DataRelation for two of the columns.
    Dim myRelation As New DataRelation _
       ("CustomersOrders", id, orderId, True)
    dataSet.Relations.Add(myRelation)

    ' Print TableName, Constraints.Count,
    ' ConstraintName and Type.
    Dim t As DataTable
    For Each t In  dataSet.Tables
        Console.WriteLine(t.TableName)
        Console.WriteLine("Constraints.Count " _
           + t.Constraints.Count.ToString())
        Console.WriteLine("ParentRelations.Count " _
           + t.ParentRelations.Count.ToString())
        Console.WriteLine("ChildRelations.Count " _
           + t.ChildRelations.Count.ToString())
        Dim cstrnt As Constraint
        For Each cstrnt In  t.Constraints
            Console.WriteLine(cstrnt.ConstraintName)
            Console.WriteLine(cstrnt.GetType())
        Next cstrnt
    Next t
End Sub

private void MakeTableWithUniqueConstraint()
{
    DataTable table = new DataTable("table");
    DataColumn column = new DataColumn("UniqueColumn");
    column.Unique=true;
    table.Columns.Add(column);

    // Print count, name, and type.
    Console.WriteLine("Constraints.Count "
        + table.Constraints.Count);
    Console.WriteLine(table.Constraints[0].ConstraintName);
    Console.WriteLine(table.Constraints[0].GetType() );

    // Add a second unique column.
    column = new DataColumn("UniqueColumn2");
    column.Unique=true;
    table.Columns.Add(column);

    // Print info again.
    Console.WriteLine("Constraints.Count "
        + table.Constraints.Count);
    Console.WriteLine(table.Constraints[1].ConstraintName);
    Console.WriteLine(table.Constraints[1].GetType() );
}

private void MakeTableWithForeignConstraint()
{
    // Create a DataSet.
    DataSet dataSet = new DataSet("dataSet");

    // Make two tables.
    DataTable customersTable= new DataTable("Customers");
    DataTable ordersTable = new DataTable("Orders");

    // Create four columns, two for each table.
    DataColumn name = new DataColumn("Name");
    DataColumn id = new DataColumn("ID");
    DataColumn orderId = new DataColumn("OrderID");
    DataColumn cDate = new DataColumn("OrderDate");

    // Add columns to tables.
    customersTable.Columns.Add(name);
    customersTable.Columns.Add(id);
    ordersTable.Columns.Add(orderId);
    ordersTable.Columns.Add(cDate);

    // Add tables to the DataSet.
    dataSet.Tables.Add(customersTable);
    dataSet.Tables.Add(ordersTable);

    // Create a DataRelation for two of the columns.
    DataRelation myRelation = new
        DataRelation("CustomersOrders",id,orderId,true);
    dataSet.Relations.Add(myRelation);

    // Print TableName, Constraints.Count,
    // ConstraintName and Type.
    foreach(DataTable t in dataSet.Tables)
    {
        Console.WriteLine(t.TableName);
        Console.WriteLine("Constraints.Count "
            + t.Constraints.Count);
        Console.WriteLine("ParentRelations.Count "
            + t.ParentRelations.Count);
        Console.WriteLine("ChildRelations.Count "
            + t.ChildRelations.Count);
        foreach(Constraint cstrnt in t.Constraints)
        {
            Console.WriteLine(cstrnt.ConstraintName);
            Console.WriteLine(cstrnt.GetType());
        }
    }
}

System.Data System.Data..::.ConstraintCollectionConstraintCollection

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 成员
System.Data 命名空间
ForeignKeyConstraint
UniqueConstraint
DataRelation


ConstraintCollection 成员

ConstraintCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintCollection 类

表示 DataTable 的约束的集合。

ConstraintCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ConstraintCollection 类
System.Data 命名空间


ConstraintCollection 方法

ConstraintCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintCollection 类

ConstraintCollection 类型公开以下成员。

名称 说明
页首

参考

ConstraintCollection 类
System.Data 命名空间


ConstraintCollection ..::.Add 方法

ConstraintCollection
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintCollection 类

将 Constraint 对象添加到集合中。

名称 说明
页首

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间


ConstraintCollection ..::.Add 方法 (Constraint)

ConstraintCollection
.
.
::
.
Add 方法 (Constraint)
ConstraintCollection 类

将指定的 Constraint 对象添加到集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Add ( _
    constraint As Constraint _
)
public void Add(
    Constraint constraint
)
public:
void Add(
    Constraint^ constraint
)
member Add :
        constraint:Constraint -> unit

参数

constraint
类型： System.Data Constraint
要添加的 Constraint。
异常 | 条件
ArgumentNullException | constraint 参数为 null。
ArgumentException | 该约束已经属于此集合，或者属于另一个集合。
DuplicateNameException | 集合中已存在同名约束。（该比较不区分大小写。） 集合中已存在同名约束。（该比较不区分大小写。）

如果通过添加或移除约束成功更改集合，则会发生 CollectionChanged 事件。

下面的示例将 UniqueConstraint 添加到 DataTable 的 ConstraintCollection。

Private Sub AddConstraint(table As DataTable)
    Dim uniqueConstraint As UniqueConstraint
    ' Assuming a column named "UniqueColumn" exists, and
    ' its Unique property is true.
    uniqueConstraint = _
       New UniqueConstraint(table.Columns("UniqueColumn"))
    table.Constraints.Add(uniqueConstraint)
End Sub

private void AddConstraint(DataTable table)
{
    UniqueConstraint uniqueConstraint;
    // Assuming a column named "UniqueColumn" exists, and
    // its Unique property is true.
    uniqueConstraint = new UniqueConstraint(
        table.Columns["UniqueColumn"]);
    table.Constraints.Add(uniqueConstraint);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
Add 重载
System.Data 命名空间
UniqueConstraint
ForeignKeyConstraint


ConstraintCollection ..::.Add 方法 (String, DataColumn, Boolean)

ConstraintCollection
.
.
::
.
Add 方法 (String, DataColumn, Boolean)
ConstraintCollection 类

使用指定名称、DataColumn 和指示列是否为主键的值构造一个新的 UniqueConstraint，并将其添加到集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    name As String, _
    column As DataColumn, _
    primaryKey As Boolean _
) As Constraint
public Constraint Add(
    string name,
    DataColumn column,
    bool primaryKey
)
public:
Constraint^ Add(
    String^ name,
    DataColumn^ column,
    bool primaryKey
)
member Add :
        name:string *
        column:DataColumn *
        primaryKey:bool -> Constraint

参数

name
类型： System String
UniqueConstraint 的名称。
column
类型： System.Data DataColumn
向其应用约束的 DataColumn。
primaryKey
类型： System Boolean
指定列是否应为主键。如果为 true，则该列将为主键列。 指定列是否应为主键。如果为 true，则该列将为主键列。

返回值

类型： System.Data Constraint
新的 UniqueConstraint。
异常 | 条件
ArgumentException | 该约束已属于该集合。 - 或 - 该约束属于另一个集合。
DuplicateNameException | 集合中已存在具有指定名称的约束。（该比较不区分大小写。） 集合中已存在具有指定名称的约束。（该比较不区分大小写。）

如果成功地添加约束，则会发生 CollectionChanged 事件。

下面的示例使用 Add 方法来创建新的 UniqueConstraint，并将其添加到 ConstraintCollection。

Private Sub AddUniqueConstraint(table As DataTable)
    table.Constraints.Add("idConstraint", table.Columns("id"), True)
End Sub

private void AddUniqueConstraint(DataTable table){
   table.Constraints.Add("idConstraint", table.Columns["id"], true);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
Add 重载
System.Data 命名空间
UniqueConstraint


ConstraintCollection ..::.Add 方法 (String, DataColumn, DataColumn)

ConstraintCollection
.
.
::
.
Add 方法 (String, DataColumn, DataColumn)
ConstraintCollection 类

用指定名称、父列和子列来构造新的 ForeignKeyConstraint，并将此约束添加到集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    name As String, _
    primaryKeyColumn As DataColumn, _
    foreignKeyColumn As DataColumn _
) As Constraint
public Constraint Add(
    string name,
    DataColumn primaryKeyColumn,
    DataColumn foreignKeyColumn
)
public:
Constraint^ Add(
    String^ name,
    DataColumn^ primaryKeyColumn,
    DataColumn^ foreignKeyColumn
)
member Add :
        name:string *
        primaryKeyColumn:DataColumn *
        foreignKeyColumn:DataColumn -> Constraint

参数

name
类型： System String
ForeignKeyConstraint 的名称。
primaryKeyColumn
类型： System.Data DataColumn
主键或父级 DataColumn。
foreignKeyColumn
类型： System.Data DataColumn
外键或子级 DataColumn。

返回值

类型： System.Data Constraint
新的 ForeignKeyConstraint。

如果成功地添加约束，则会发生 CollectionChanged 事件。

下面的示例将新的 ForeignKeyConstraint 添加到 DataTable 的 ConstraintCollection。

Private Sub AddForeignConstraint(dataSet As DataSet)
    Try
        Dim parentColumn As DataColumn = _
            dataSet.Tables("Suppliers").Columns("SupplierID")
        Dim childColumn As DataColumn = _
            dataSet.Tables("Products").Columns("SupplierID")
        dataSet.Tables("Products").Constraints.Add _
            ("ProductsSuppliers", parentColumn, childColumn)

    Catch ex As Exception
        ' In case the constraint already exists,
        ' catch the collision here and respond.
        Console.WriteLine("Exception of type {0} occurred.", _
            ex.GetType().ToString())
    End Try
End Sub

private void AddForeignConstraint(DataSet dataSet)
{
    try
    {
        DataColumn parentColumn =
            dataSet.Tables["Suppliers"].Columns["SupplierID"];
        DataColumn childColumn =
            dataSet.Tables["Products"].Columns["SupplierID"];
        dataSet.Tables["Products"].Constraints.Add
            ("ProductsSuppliers", parentColumn, childColumn);
    }
    catch(Exception ex)
    {
        // In case the constraint already exists,
        // catch the collision here and respond.
        Console.WriteLine("Exception of type {0} occurred.",
            ex.GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
Add 重载
System.Data 命名空间


ConstraintCollection ..::.Add 方法 (String, array<DataColumn >[]()[], Boolean)

ConstraintCollection
.
.
::
.
Add 方法 (String,
array<
DataColumn
>
[]
()
[]
, Boolean)
ConstraintCollection 类

使用指定名称、DataColumn 对象的数组和指示列是否为主键的值构造一个新的 UniqueConstraint，并将其添加到集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    name As String, _
    columns As DataColumn(), _
    primaryKey As Boolean _
) As Constraint
public Constraint Add(
    string name,
    DataColumn[] columns,
    bool primaryKey
)
public:
Constraint^ Add(
    String^ name,
    array<DataColumn^>^ columns,
    bool primaryKey
)
member Add :
        name:string *
        columns:DataColumn[] *
        primaryKey:bool -> Constraint

参数

name
类型： System String
UniqueConstraint 的名称。
columns
类型：
array<
System.Data DataColumn
>
[]
()
[]

对其应用约束的 DataColumn 对象的数组。
primaryKey
类型： System Boolean
指定列是否应为主键。如果为 true，则该列将为主键列。 指定列是否应为主键。如果为 true，则该列将为主键列。

返回值

类型： System.Data Constraint
新的 UniqueConstraint。
异常 | 条件
ArgumentException | 该约束已属于该集合。 - 或 - 该约束属于另一个集合。
DuplicateNameException | 集合中已存在具有指定名称的约束。（该比较不区分大小写。） 集合中已存在具有指定名称的约束。（该比较不区分大小写。）

如果成功地添加约束，则会发生 CollectionChanged 事件。

下面的示例创建 DataColumn 对象的数组，这些对象用于在特定 DataTable 中创建新的 UniqueConstraint。

Private Sub AddUniqueConstraint(table As DataTable)
    Dim columns(1) As DataColumn
    columns(0) = table.Columns("ID")
    columns(1) = table.Columns("Name")
    table.Constraints.Add("idNameConstraint", columns, True)
End Sub

private void AddUniqueConstraint(DataTable table)
{
    DataColumn[] columns = new DataColumn[1];
    columns[0] = table.Columns["ID"];
    columns[1] = table.Columns["Name"];
    table.Constraints.Add("idNameConstraint", columns, true);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
Add 重载
System.Data 命名空间
UniqueConstraint


ConstraintCollection ..::.Add 方法 (String, array<DataColumn >[]()[], array<DataColumn >[]()[])

ConstraintCollection
.
.
::
.
Add 方法 (String,
array<
DataColumn
>
[]
()
[]
,
array<
DataColumn
>
[]
()
[]
)
ConstraintCollection 类

用指定的父列和子列的数组，构造新的 ForeignKeyConstraint，并将约束添加到集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    name As String, _
    primaryKeyColumns As DataColumn(), _
    foreignKeyColumns As DataColumn() _
) As Constraint
public Constraint Add(
    string name,
    DataColumn[] primaryKeyColumns,
    DataColumn[] foreignKeyColumns
)
public:
Constraint^ Add(
    String^ name,
    array<DataColumn^>^ primaryKeyColumns,
    array<DataColumn^>^ foreignKeyColumns
)
member Add :
        name:string *
        primaryKeyColumns:DataColumn[] *
        foreignKeyColumns:DataColumn[] -> Constraint

参数

name
类型： System String
ForeignKeyConstraint 的名称。
primaryKeyColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

作为主键列或父列的 DataColumn 对象的数组。
foreignKeyColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

作为外键列或子列的 DataColumn 对象的数组。

返回值

类型： System.Data Constraint
新的 ForeignKeyConstraint。

如果成功地添加约束，则会发生 CollectionChanged 事件。

下面的示例创建 DataColumn 对象的两个数组，然后在数据集中的两个表之间创建两个 ForeignKeyConstraint 关系。

Private Sub AddForeignConstraint( _
ByVal dataSet As DataSet, ByVal table As DataTable)
    Try
        Dim parentColumns(2) As DataColumn
        Dim childColumns(2) As DataColumn
        ' Get the tables from the DataSet.
        Dim customersTable As DataTable = _
            dataSet.Tables("Customers")
        Dim ordersTable As DataTable = _
            dataSet.Tables("Orders")

        ' Set Columns.
        parentColumns(0) = customersTable.Columns("id")
        parentColumns(1) = customersTable.Columns("Name")
        childColumns(0) = ordersTable.Columns("CustomerID")
        childColumns(1) = ordersTable.Columns("CustomerName")

        ' Create ForeignKeyConstraint
        table.Constraints.Add("CustOrdersConstraint", _
            parentColumns, childColumns)

    Catch ex As Exception
        ' In case the constraint already exists,
        ' catch the collision here and respond.
        Console.WriteLine("Exception of type {0} occurred.", _
            ex.GetType().ToString())
    End Try
End Sub

private void AddForeignConstraint(
    DataSet dataSet, DataTable table)
{
    try
    {
        DataColumn[] parentColumns = new DataColumn[2];
        DataColumn[] childColumns = new DataColumn[2];
        // Get the tables from the DataSet.
        DataTable customersTable = dataSet.Tables["Customers"];
        DataTable ordersTable = dataSet.Tables["Orders"];

        // Set Columns.
        parentColumns[0]=customersTable.Columns["id"];
        parentColumns[1]=customersTable.Columns["Name"];
        childColumns[0] = ordersTable.Columns["CustomerID"];
        childColumns[1] = ordersTable.Columns["CustomerName"];

        // Create ForeignKeyConstraint
        table.Constraints.Add("CustOrdersConstraint",
            parentColumns, childColumns);
    }
    catch(Exception ex)
    {
        // In case the constraint already exists,
        // catch the collision here and respond.
        Console.WriteLine("Exception of type {0} occurred.",
            ex.GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
Add 重载
System.Data 命名空间


ConstraintCollection ..::.AddRange 方法

ConstraintCollection
.
.
::
.
AddRange 方法
ConstraintCollection 类

将指定的 ConstraintCollection 数组的元素复制到集合末尾。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub AddRange ( _
    constraints As Constraint() _
)
public void AddRange(
    Constraint[] constraints
)
public:
void AddRange(
    array<Constraint^>^ constraints
)
member AddRange :
        constraints:Constraint[] -> unit

参数

constraints
类型：
array<
System.Data Constraint
>
[]
()
[]

要添加到集合中的 ConstraintCollection 对象的数组。

如果已经调用 BeginInit，则在调用 EndInit 之前，AddRange 将不会向集合中添加任何对象。当调用 EndInit 时，将使用在最近一次对 AddRange 的调用中指定的项填充集合。如果在 BeginInit / EndInit 序列中多次调用了 AddRange，则只添加在最近一次对 AddRange 的调用中指定的那些项。 如果已经调用 BeginInit，则在调用 EndInit 之前，AddRange 将不会向集合中添加任何对象。当调用 EndInit 时，将使用在最近一次对 AddRange 的调用中指定的项填充集合。如果在 BeginInit / EndInit 序列中多次调用了 AddRange，则只添加在最近一次对 AddRange 的调用中指定的那些项。 如果已经调用 BeginInit，则在调用 EndInit 之前，AddRange 将不会向集合中添加任何对象。当调用 EndInit 时，将使用在最近一次对 AddRange 的调用中指定的项填充集合。如果在 BeginInit / EndInit 序列中多次调用了 AddRange，则只添加在最近一次对 AddRange 的调用中指定的那些项。

下面的示例创建主键约束和外键约束，并将它们添加到 ConstraintCollection 中。

Public Shared Sub ConstraintAddRange(dataSet As DataSet)
    Try
        ' Reference the tables from the DataSet.
        Dim customersTable As DataTable = dataSet.Tables("Customers")
        Dim ordersTable As DataTable = dataSet.Tables("Orders")

        ' Create unique and foreign key constraints.
        Dim uniqueConstraint As UniqueConstraint = New _
            UniqueConstraint(customersTable.Columns("CustomerID"))
        Dim fkConstraint As ForeignKeyConstraint = New _
            ForeignKeyConstraint("CustOrdersConstraint", _
            customersTable.Columns("CustomerID"), _
            ordersTable.Columns("CustomerID"))

        ' Add the constraints.
        customersTable.Constraints.AddRange(New Constraint() _
            {uniqueConstraint, fkConstraint})

    Catch ex As Exception
        ' Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", _
        ex.GetType().ToString())
    End Try
End Sub

public static void ConstraintAddRange(DataSet dataSet)
{
    try
    {
        // Reference the tables from the DataSet.
        DataTable customersTable = dataSet.Tables["Customers"];
        DataTable ordersTable = dataSet.Tables["Orders"];

        // Create unique and foreign key constraints.
        UniqueConstraint uniqueConstraint = new
            UniqueConstraint(customersTable.Columns["CustomerID"]);
        ForeignKeyConstraint fkConstraint = new
            ForeignKeyConstraint("CustOrdersConstraint",
            customersTable.Columns["CustomerID"],
            ordersTable.Columns["CustomerID"]);

        // Add the constraints.
        customersTable.Constraints.AddRange(new Constraint[]
            {uniqueConstraint, fkConstraint});
    }
    catch(Exception ex)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            ex.GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间


ConstraintCollection ..::.CanRemove 方法

ConstraintCollection
.
.
::
.
CanRemove 方法
ConstraintCollection 类

指示是否可以移除 Constraint。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function CanRemove ( _
    constraint As Constraint _
) As Boolean
public bool CanRemove(
    Constraint constraint
)
public:
bool CanRemove(
    Constraint^ constraint
)
member CanRemove :
        constraint:Constraint -> bool

参数

constraint
类型： System.Data Constraint
要对其进行测试以查看是否可以从集合移除的 Constraint。

返回值

类型： System Boolean
如果可以从集合中移除 Constraint，则为 true；否则为 false。

将 DataRelation 添加到 DataSet 中时的默认行为是：将 ForeignKeyConstraint 添加到父表中，将 UniqueConstraint 添加到子表中。UniqueConstraint 应用到父表的主键列，ForeignKeyConstraint 应用到子表的外键列。由于在移除 ForeignKeyConstraint 之前尝试移除 UniqueConstraint 将引发异常，因此在调用 Remove 方法之前应始终使用 CanRemove 方法，以确保 UniqueConstraint 可被移除。 将 DataRelation 添加到 DataSet 中时的默认行为是：将 ForeignKeyConstraint 添加到父表中，将 UniqueConstraint 添加到子表中。UniqueConstraint 应用到父表的主键列，ForeignKeyConstraint 应用到子表的外键列。由于在移除 ForeignKeyConstraint 之前尝试移除 UniqueConstraint 将引发异常，因此在调用 Remove 方法之前应始终使用 CanRemove 方法，以确保 UniqueConstraint 可被移除。 将 DataRelation 添加到 DataSet 中时的默认行为是：将 ForeignKeyConstraint 添加到父表中，将 UniqueConstraint 添加到子表中。UniqueConstraint 应用到父表的主键列，ForeignKeyConstraint 应用到子表的外键列。由于在移除 ForeignKeyConstraint 之前尝试移除 UniqueConstraint 将引发异常，因此在调用 Remove 方法之前应始终使用 CanRemove 方法，以确保 UniqueConstraint 可被移除。

下面的示例在尝试移除 Constraint 之前使用 CanRemove 方法来确定是否可以将其移除。

Private Sub TryRemove(dataSet As DataSet)
    Try
        Dim customersTable As DataTable = dataSet.Tables("Customers")
        Dim constraint As Constraint = customersTable.Constraints(0)
        Console.WriteLine("Can remove? " & _
            customersTable.Constraints.CanRemove(constraint).ToString())

    Catch ex As Exception
        ' Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", _
            ex.GetType().ToString())
    End Try
End Sub

private void TryRemove(DataSet dataSet)
{
    try
    {
        DataTable customersTable = dataSet.Tables["Customers"];
        Constraint constraint = customersTable.Constraints[0];
        Console.WriteLine("Can remove? " +
            customersTable.Constraints.CanRemove(constraint));
    }
    catch(Exception ex)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            ex.GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间


ConstraintCollection ..::.Clear 方法

ConstraintCollection
.
.
::
.
Clear 方法
ConstraintCollection 类

清除所有 Constraint 对象的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Clear
public void Clear()
public:
void Clear()
member Clear : unit -> unit

如果此操作成功，则发生 CollectionChanged 事件。

下面的示例从 ConstraintCollection 中清除所有约束。

Public Shared Sub ClearConstraints(dataSet As DataSet)
   Dim table As DataTable
   For Each table In dataSet.Tables
     table.Constraints.Clear()
   Next
End Sub

public static void ClearConstraints(DataSet dataSet)
{
   foreach (DataTable table in dataSet.Tables)
     table.Constraints.Clear();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间


ConstraintCollection ..::.Contains 方法

ConstraintCollection
.
.
::
.
Contains 方法
ConstraintCollection 类

指示集合中是否存在按名称指定的 Constraint 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    name As String _
) As Boolean
public bool Contains(
    string name
)
public:
bool Contains(
    String^ name
)
member Contains :
        name:string -> bool

参数

name
类型： System String
约束的 ConstraintName。

返回值

类型： System Boolean
如果集合包含指定的约束，则为 true；否则为 false。

在尝试从集合中移除指定的 Constraint 之前使用 Contains 方法来确定它是否存在。还可以使用 CanRemove 方法来确定是否可以移除 Constraint。 在尝试从集合中移除指定的 Constraint 之前使用 Contains 方法来确定它是否存在。还可以使用 CanRemove 方法来确定是否可以移除 Constraint。

下面的示例在删除指定的 Constraint 之前先确定它是否存在于 ConstraintCollection 中。

 Public Shared Sub RemoveConstraint( _
    constraints As ConstraintCollection, constraint As Constraint)
    Try
        If constraints.Contains(constraint.ConstraintName) Then
            If constraints.CanRemove(constraint)
                constraints.Remove(constraint.ConstraintName)
            End If
        End If

    Catch e As Exception
        ' Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", _
            e.GetType().ToString())
    End Try
 End Sub

public static void RemoveConstraint(
    ConstraintCollection constraints, Constraint constraint)
{
    try
    {
        if(constraints.Contains(constraint.ConstraintName))
        {
            if(constraints.CanRemove(constraint))
            {
                constraints.Remove(constraint.ConstraintName);
            }
        }
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间
Remove


ConstraintCollection ..::.CopyTo 方法

ConstraintCollection
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintCollection 类

名称 说明
页首

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间


ConstraintCollection ..::.CopyTo 方法 ( array<Constraint >[]()[], Int32)

ConstraintCollection
.
.
::
.
CopyTo 方法 (
array<
Constraint
>
[]
()
[]
, Int32)
ConstraintCollection 类

从指定的索引处开始，将集合对象复制到一维 Array 实例中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As Constraint(), _
    index As Integer _
)
public void CopyTo(
    Constraint[] array,
    int index
)
public:
void CopyTo(
    array<Constraint^>^ array,
    int index
)
member CopyTo :
        array:Constraint[] *
        index:int -> unit

参数

array
类型：
array<
System.Data Constraint
>
[]
()
[]

一维 Array，为从集合所复制的值的目标位置。
index
类型： System Int32
插入操作开始处的数组索引。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
CopyTo 重载
System.Data 命名空间


ConstraintCollection ..::.IndexOf 方法

ConstraintCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintCollection 类

获取指定的 Constraint 的索引。

名称 说明
页首

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间


ConstraintCollection ..::.IndexOf 方法 (Constraint)

ConstraintCollection
.
.
::
.
IndexOf 方法 (Constraint)
ConstraintCollection 类

获取指定的 Constraint 的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    constraint As Constraint _
) As Integer
public int IndexOf(
    Constraint constraint
)
public:
int IndexOf(
    Constraint^ constraint
)
member IndexOf :
        constraint:Constraint -> int

参数

constraint
类型： System.Data Constraint
要搜索的 Constraint。

返回值

类型： System Int32
如果 Constraint 在集合中，则为其从零开始的索引；否则为 -1。

使用 IndexOf 方法返回一个索引，该索引将用于 Contains 或 Remove 方法。

下面的示例使用 IndexOf 方法返回 Constraint 的索引。在移除约束之前将索引传递给 Contains 方法，以确定集合中是否包含该约束。 下面的示例使用 IndexOf 方法返回 Constraint 的索引。在移除约束之前将索引传递给 Contains 方法，以确定集合中是否包含该约束。

Private Sub RemoveConstraint _
    (constraints As ConstraintCollection, constraint As Constraint)
    Try
        If constraints.Contains(constraint.ConstraintName) Then
            If constraints.CanRemove(constraint) Then
                constraints.RemoveAt _
                (constraints.IndexOf(constraint))
            End If
        End If

    Catch e As Exception
    ' Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", _
            e.GetType().ToString())
    End Try
End Sub

private void RemoveConstraint(
    ConstraintCollection constraints, Constraint constraint)
{
    try
    {
        if(constraints.Contains(constraint.ConstraintName))
        {
            if(constraints.CanRemove(constraint))
            {
                constraints.RemoveAt(constraints.IndexOf(constraint));
            }
        }
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
IndexOf 重载
System.Data 命名空间
Contains
Remove
CanRemove


ConstraintCollection ..::.IndexOf 方法 (String)

ConstraintCollection
.
.
::
.
IndexOf 方法 (String)
ConstraintCollection 类

获取按名称指定的 Constraint 的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    constraintName As String _
) As Integer
public int IndexOf(
    string constraintName
)
public:
int IndexOf(
    String^ constraintName
)
member IndexOf :
        constraintName:string -> int

参数

constraintName
类型： System String
Constraint 的名称。

返回值

类型： System Int32
如果 Constraint 在集合中，则为它的索引，否则为 -1。

使用 IndexOf 方法返回一个索引，该索引将用于 Contains 或 Remove 方法。

下面的示例使用 IndexOf 方法返回 Constraint 的索引。在移除约束之前将索引传递给 Contains 方法，以确定集合是否包含该约束。 下面的示例使用 IndexOf 方法返回 Constraint 的索引。在移除约束之前将索引传递给 Contains 方法，以确定集合是否包含该约束。

Private Sub RemoveConstraint _
    (constraints As ConstraintCollection, constraint As Constraint)

    Try
        If constraints.Contains(constraint.ConstraintName) Then
            If constraints.CanRemove(constraint) Then
                constraints.RemoveAt _
                (constraints.IndexOf(constraint.ConstraintName))
            End If
        End If

    Catch ex As Exception
    ' Process exception and return.
        Console.WriteLine(ex.Message)
    End Try
End Sub

private void RemoveConstraint(
    ConstraintCollection constraints, Constraint constraint)
{
    try
    {
        if(constraints.Contains(constraint.ConstraintName))
        {
            if(constraints.CanRemove(constraint))
            {
                constraints.RemoveAt(
                    constraints.IndexOf(constraint.ConstraintName));
            }
        }
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
IndexOf 重载
System.Data 命名空间
Contains
Remove
CanRemove


ConstraintCollection ..::.Remove 方法

ConstraintCollection
.
.
::
.
Remove 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintCollection 类

从 ConstraintCollection 中移除 Constraint。

名称 说明
页首

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间


ConstraintCollection ..::.Remove 方法 (Constraint)

ConstraintCollection
.
.
::
.
Remove 方法 (Constraint)
ConstraintCollection 类

从集合中移除指定的 Constraint。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    constraint As Constraint _
)
public void Remove(
    Constraint constraint
)
public:
void Remove(
    Constraint^ constraint
)
member Remove :
        constraint:Constraint -> unit

参数

constraint
类型： System.Data Constraint
要移除的 Constraint。
异常 | 条件
ArgumentNullException | constraint 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 约束不属于该集合。

在使用 Remove 方法之前，可以使用 Contains 方法来确定集合是否包含目标 Constraint，使用 CanRemove 方法来确定是否可以移除 Constraint。

如果成功移除约束，则会发生 CollectionChanged 事件。

Private Sub RemoveConstraint(table As DataTable, _
    constraint As Constraint)

    If table.Constraints.Contains(constraint.ConstraintName) Then
        If table.Constraints.CanRemove(constraint) Then
            table.Constraints.Remove(constraint)
        End If
    End If
End Sub

private void RemoveConstraint(DataTable table,
    Constraint constraint)
{
    if(table.Constraints.Contains(constraint.ConstraintName))
        if(table.Constraints.CanRemove(constraint))
            table.Constraints.Remove(constraint);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
Remove 重载
System.Data 命名空间
CanRemove
Contains
IndexOf


ConstraintCollection ..::.Remove 方法 (String)

ConstraintCollection
.
.
::
.
Remove 方法 (String)
ConstraintCollection 类

从集合中移除按名称指定的 Constraint 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    name As String _
)
public void Remove(
    string name
)
public:
void Remove(
    String^ name
)
member Remove :
        name:string -> unit

参数

name
类型： System String
要移除的 Constraint 的名称。

在使用 Remove 方法之前，可以使用 Contains 方法来确定集合是否包含目标 Constraint，使用 CanRemove 方法来确定是否可以移除 Constraint。

如果成功移除约束，则会发生 CollectionChanged 事件。

下面的示例首先用 Contains 方法测试 Constraint 是否存在，并用 CanRemove 方法测试是否可以移除，然后将其从 ConstraintCollection 中移除。

Private Sub RemoveConstraint _
    (constraints As ConstraintCollection, constraint As Constraint)

    If constraints.Contains(constraint.ConstraintName) Then
        If constraints.CanRemove(constraint) Then
            constraints.Remove(constraint.ConstraintName)
        End If
    End If
End Sub

private void RemoveConstraint(ConstraintCollection constraints,
    Constraint constraint)
{
    if(constraints.Contains(constraint.ConstraintName))
        if(constraints.CanRemove(constraint))
            constraints.Remove(constraint.ConstraintName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
Remove 重载
System.Data 命名空间
CanRemove
Contains
IndexOf


ConstraintCollection ..::.RemoveAt 方法

ConstraintCollection
.
.
::
.
RemoveAt 方法
ConstraintCollection 类

从集合中移除位于指定索引位置的 Constraint 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub RemoveAt ( _
    index As Integer _
)
public void RemoveAt(
    int index
)
public:
void RemoveAt(
    int index
)
member RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的 Constraint 的索引。
异常 | 条件
IndexOutOfRangeException | 集合在此索引位置没有约束。

IndexOf 方法返回特定 Constraint 的索引。

在使用 RemoveAt 方法之前，可以使用 Contains 方法来确定集合是否包含目标 Constraint，使用 CanRemove 方法来确定是否可以移除 Constraint。

如果成功移除约束，则会发生 CollectionChanged 事件。

下面的示例使用 IndexOf 方法和 RemoveAt 方法从 ConstraintCollection 中移除约束。

Private Sub RemoveConstraint _
    (constraints As ConstraintCollection, constraint As Constraint)

    Try
        If constraints.Contains(constraint.ConstraintName) Then
            If constraints.CanRemove(constraint) Then
                constraints.RemoveAt _
                    (constraints.IndexOf(constraint.ConstraintName))
            End If
        End If

    Catch e As Exception
        ' Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", _
            e.GetType().ToString())
    End Try
End Sub

private void RemoveConstraint(ConstraintCollection constraints,
    Constraint constraint)
{
    try
    {
        if(constraints.Contains(constraint.ConstraintName))
        {
            if(constraints.CanRemove(constraint))
            {
                constraints.RemoveAt(constraints.IndexOf(
                    constraint.ConstraintName));
            }
        }
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间
CanRemove
Contains
IndexOf


ConstraintCollection 属性

ConstraintCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintCollection 类

ConstraintCollection 类型公开以下成员。

名称 说明
页首

参考

ConstraintCollection 类
System.Data 命名空间


ConstraintCollection ..::.Item 属性

ConstraintCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintCollection 类

从集合中获取指定的 Constraint。

名称 说明
页首

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间


ConstraintCollection ..::.Item 属性 (Int32)

ConstraintCollection
.
.
::
.
Item 属性 (Int32)
ConstraintCollection 类

从集合中获取位于指定索引位置的 Constraint。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    index As Integer _
) As Constraint
    Get
public Constraint this[
    int index
] { get; }
public:
property Constraint^ Item[int index] {
    Constraint^ get (int index);
}
member Item : Constraint

参数

index
类型： System Int32
要返回的约束的索引。

属性值

类型： System.Data Constraint
指定索引处的 Constraint。
异常 | 条件
IndexOutOfRangeException | 索引值大于集合中项的数目。

使用 Contains 方法来测试特定约束是否存在。

下面的示例从 ConstraintCollection 获取每一个 Constraint。

Private Sub GetConstraint(table As DataTable)
    Dim i As Integer
    For i = 0 To table.Constraints.Count - 1
        Console.WriteLine(table.Constraints(i).ConstraintName)
        Console.WriteLine(table.Constraints(i).GetType())
    Next i
 End Sub

private void GetConstraint(DataTable table)
{
    for(int i = 0; i < table.Constraints.Count; i++)
    {
        Console.WriteLine(table.Constraints[i].ConstraintName);
        Console.WriteLine(table.Constraints[i].GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
Item 重载
System.Data 命名空间
Contains


ConstraintCollection ..::.Item 属性 (String)

ConstraintCollection
.
.
::
.
Item 属性 (String)
ConstraintCollection 类

从集合中获取具有指定名称的 Constraint。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    name As String _
) As Constraint
    Get
public Constraint this[
    string name
] { get; }
public:
property Constraint^ Item[String^ name] {
    Constraint^ get (String^ name);
}
member Item : Constraint

参数

name
类型： System String
要返回的约束的 ConstraintName。

属性值

类型： System.Data Constraint
具有指定名称的 Constraint；否则，如果 Constraint 不存在，则为空值。

使用 Contains 方法来测试特定约束是否存在。

下面的示例获取已命名的 Constraint。

Private Sub GetConstraint(table As DataTable)
    If table.Constraints.Contains("CustomersOrdersConstraint") Then
        Dim constraint As Constraint = _
            table.Constraints("CustomersOrdersConstraint")
    End If
End Sub

private void GetConstraint(DataTable table)
{
    if(table.Constraints.Contains("CustomersOrdersConstraint"))
    {
        Constraint constraint =
            table.Constraints["CustomersOrdersConstraint"];
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
Item 重载
System.Data 命名空间


ConstraintCollection 事件

ConstraintCollection 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintCollection 类

ConstraintCollection 类型公开以下成员。

名称 说明
页首

参考

ConstraintCollection 类
System.Data 命名空间


ConstraintCollection ..::.CollectionChanged 事件

ConstraintCollection
.
.
::
.
CollectionChanged 事件
ConstraintCollection 类

每当由于添加或移除 Constraint 对象而更改 ConstraintCollection 时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event CollectionChanged As CollectionChangeEventHandler
public event CollectionChangeEventHandler CollectionChanged
public:
 event CollectionChangeEventHandler^ CollectionChanged {
    void add (CollectionChangeEventHandler^ value);
    void remove (CollectionChangeEventHandler^ value);
}
member CollectionChanged : IEvent<CollectionChangeEventHandler,
    CollectionChangeEventArgs>

有关处理事件的更多信息，请参见使用事件。

下面的示例演示如何使用 CollectionChanged 事件。

Private Shared Sub ConstraintCollectionChanged()
    ' Demonstrate ConstraintCollection.CollectionChanged event.
    Try
        ' Create Customers table.
        Dim customersTable As DataTable = New DataTable("Customers")
        customersTable.Columns.Add("id", Type.GetType("System.Int32"))
        customersTable.Columns.Add("Name", Type.GetType("System.String"))
        AddHandler customersTable.Constraints.CollectionChanged, _
            New System.ComponentModel.CollectionChangeEventHandler( _
            AddressOf Collection_Changed)

        ' Create Orders table.
        Dim ordersTable As DataTable = New DataTable("Orders")
        ordersTable.Columns.Add("CustID", Type.GetType("System.Int32"))
        ordersTable.Columns.Add("CustName", Type.GetType("System.String"))
        AddHandler ordersTable.Constraints.CollectionChanged, _
            New System.ComponentModel.CollectionChangeEventHandler( _
            AddressOf Collection_Changed)

        ' Create unique constraint.
        Dim constraint As UniqueConstraint = New _
            UniqueConstraint(customersTable.Columns("id"))
        customersTable.Constraints.Add(constraint)

        ' Create unique constraint and specify as primary key.
        ordersTable.Constraints.Add( _
            "pKey", ordersTable.Columns("CustID"), True)

        ' Remove constraints.
        customersTable.Constraints.RemoveAt( 0)

        ' Results in an Exception. You can't remove
        ' a primary key constraint.
        ordersTable.Constraints.RemoveAt( 0)

    Catch ex As Exception
        ' Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", _
            ex.GetType().ToString())
    End Try
End Sub

Private Shared Sub Collection_Changed( sender As object, _
    ex As System.ComponentModel.CollectionChangeEventArgs)
    Console.WriteLine("List_Changed Event: '{0}'\t element={1}", _
        ex.Action, ex.Element)
End Sub

    private static void ConstraintCollectionChanged()
    {
        // Demonstrate ConstraintCollection.CollectionChanged event.
        try
        {
            // Create Customers table.
            DataTable customersTable = new DataTable("Customers");
            customersTable.Columns.Add("id", typeof(int));
            customersTable.Columns.Add("Name", typeof(string));
            customersTable.Constraints.CollectionChanged +=
                new System.ComponentModel.CollectionChangeEventHandler(
                Collection_Changed);

            // Create Orders table.
            DataTable ordersTable = new DataTable("Orders");
            ordersTable.Columns.Add("CustID", typeof(int));
            ordersTable.Columns.Add("CustName", typeof(string));
            ordersTable.Constraints.CollectionChanged +=
                new System.ComponentModel.CollectionChangeEventHandler(
                Collection_Changed);

            // Create unique constraint.
            UniqueConstraint constraint = new UniqueConstraint(
                customersTable.Columns["id"]);
            customersTable.Constraints.Add(constraint);

            // Create unique constraint and specify as primary key.
            ordersTable.Constraints.Add(
                "pKey", ordersTable.Columns["CustID"], true);

            // Remove constraints.
            customersTable.Constraints.RemoveAt(0);

            // Results in an Exception. You can't remove
            // a primary key constraint.
            ordersTable.Constraints.RemoveAt(0);
        }
        catch(Exception ex)
        {
            // Process exception and return.
            Console.WriteLine("Exception of type {0} occurred.",
                ex.GetType());
        }
    }

    private static void Collection_Changed(object sender,
        System.ComponentModel.CollectionChangeEventArgs ex)
    {
        Console.WriteLine("List_Changed Event: '{0}'\t element={1}",
            ex.Action, ex.Element);
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintCollection 类
ConstraintCollection 成员
System.Data 命名空间


ConstraintException 类

ConstraintException 类
成员

表示在尝试执行违反约束的操作时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class ConstraintException _
    Inherits DataException
[SerializableAttribute]
public class ConstraintException : DataException
[SerializableAttribute]
public ref class ConstraintException : public DataException
[<SerializableAttribute>]
type ConstraintException =
    class
        inherit DataException
    end

System.Data System.Data..::.ConstraintExceptionConstraintException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintException 成员
System.Data 命名空间


ConstraintException 成员

ConstraintException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintException 类

表示在尝试执行违反约束的操作时引发的异常。

ConstraintException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ConstraintException 类
System.Data 命名空间


ConstraintException 构造函数

ConstraintException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintException 类

初始化 ConstraintException 类的新实例。

名称 说明
页首

参考

ConstraintException 类
ConstraintException 成员
System.Data 命名空间


ConstraintException 构造函数

ConstraintException 构造函数
ConstraintException 类

初始化 ConstraintException 类的新实例。这是默认构造函数。 初始化 ConstraintException 类的新实例。这是默认构造函数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public ConstraintException()
public:
ConstraintException()
new : unit -> ConstraintException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintException 类
ConstraintException 成员
ConstraintException 重载
System.Data 命名空间


ConstraintException 构造函数 (String)

ConstraintException 构造函数 (String)
ConstraintException 类

使用指定的字符串初始化 ConstraintException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public ConstraintException(
    string s
)
public:
ConstraintException(
    String^ s
)
new :
        s:string -> ConstraintException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintException 类
ConstraintException 成员
ConstraintException 重载
System.Data 命名空间


ConstraintException 构造函数 (SerializationInfo, StreamingContext)

ConstraintException 构造函数 (SerializationInfo, StreamingContext)
ConstraintException 类

用指定的序列化和流上下文初始化 ConstraintException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ConstraintException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ConstraintException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ConstraintException

参数

info
类型： System.Runtime.Serialization SerializationInfo
将对象序列化或反序列化所必需的数据。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ConstraintException 类
ConstraintException 成员
ConstraintException 重载
System.Data 命名空间


ConstraintException 构造函数 (String, Exception)

ConstraintException 构造函数 (String, Exception)
ConstraintException 类

使用指定的字符串和内部异常初始化 ConstraintException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ConstraintException(
    string message,
    Exception innerException
)
public:
ConstraintException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ConstraintException

参数

message
类型： System String
当引发异常时显示的字符串。
innerException
类型： System Exception
获取导致当前异常的 Exception 实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ConstraintException 类
ConstraintException 成员
ConstraintException 重载
System.Data 命名空间


ConstraintException 方法

ConstraintException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintException 类

ConstraintException 类型公开以下成员。

名称 说明
页首

参考

ConstraintException 类
System.Data 命名空间


ConstraintException 属性

ConstraintException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintException 类

ConstraintException 类型公开以下成员。

名称 说明
页首

参考

ConstraintException 类
System.Data 命名空间


ConstraintException 事件

ConstraintException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ConstraintException 类

ConstraintException 类型公开以下成员。

名称 说明
页首

参考

ConstraintException 类
System.Data 命名空间


DataColumn 类

DataColumn 类
成员

表示 DataTable 中列的架构。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataColumn _
    Inherits MarshalByValueComponent
public class DataColumn : MarshalByValueComponent
public ref class DataColumn : public MarshalByValueComponent
type DataColumn =
    class
        inherit MarshalByValueComponent
    end

DataColumn 是用于创建 DataTable 的架构的基本构造块。通过向 DataColumnCollection 中添加一个或多个 DataColumn 对象来生成这个架构。有关更多信息，请参见向数据表中添加列 (ADO.NET)。 DataColumn 是用于创建 DataTable 的架构的基本构造块。通过向 DataColumnCollection 中添加一个或多个 DataColumn 对象来生成这个架构。有关更多信息，请参见向数据表中添加列 (ADO.NET)。 DataColumn 是用于创建 DataTable 的架构的基本构造块。通过向 DataColumnCollection 中添加一个或多个 DataColumn 对象来生成这个架构。有关更多信息，请参见向数据表中添加列 (ADO.NET)。

每个 DataColumn 都有 DataType 属性，该属性确定 DataColumn 所包含的数据的种类。例如，可以将数据类型限制为整数、字符串或小数。由于 DataTable 所包含的数据通常合并回其原始数据源，因此必须使其数据类型与数据源中的数据类型匹配。有关更多信息，请参见ADO.NET 中的数据类型映射。 每个 DataColumn 都有 DataType 属性，该属性确定 DataColumn 所包含的数据的种类。例如，可以将数据类型限制为整数、字符串或小数。由于 DataTable 所包含的数据通常合并回其原始数据源，因此必须使其数据类型与数据源中的数据类型匹配。有关更多信息，请参见ADO.NET 中的数据类型映射。 每个 DataColumn 都有 DataType 属性，该属性确定 DataColumn 所包含的数据的种类。例如，可以将数据类型限制为整数、字符串或小数。由于 DataTable 所包含的数据通常合并回其原始数据源，因此必须使其数据类型与数据源中的数据类型匹配。有关更多信息，请参见ADO.NET 中的数据类型映射。 每个 DataColumn 都有 DataType 属性，该属性确定 DataColumn 所包含的数据的种类。例如，可以将数据类型限制为整数、字符串或小数。由于 DataTable 所包含的数据通常合并回其原始数据源，因此必须使其数据类型与数据源中的数据类型匹配。有关更多信息，请参见ADO.NET 中的数据类型映射。

AllowDBNull、Unique 和 ReadOnly 等属性对数据的输入和更新施加限制，从而有助于确保数据完整性。还可以使用 AutoIncrement、AutoIncrementSeed 和 AutoIncrementStep 属性来控制数据自动生成。有关 AutoIncrement 列的更多信息，请参见 创建 AutoIncrement 列 (ADO.NET)。有关更多信息，请参见定义主键 (ADO.NET)。 AllowDBNull、Unique 和 ReadOnly 等属性对数据的输入和更新施加限制，从而有助于确保数据完整性。还可以使用 AutoIncrement、AutoIncrementSeed 和 AutoIncrementStep 属性来控制数据自动生成。有关 AutoIncrement 列的更多信息，请参见 创建 AutoIncrement 列 (ADO.NET)。有关更多信息，请参见定义主键 (ADO.NET)。 AllowDBNull、Unique 和 ReadOnly 等属性对数据的输入和更新施加限制，从而有助于确保数据完整性。还可以使用 AutoIncrement、AutoIncrementSeed 和 AutoIncrementStep 属性来控制数据自动生成。有关 AutoIncrement 列的更多信息，请参见 创建 AutoIncrement 列 (ADO.NET)。有关更多信息，请参见定义主键 (ADO.NET)。 AllowDBNull、Unique 和 ReadOnly 等属性对数据的输入和更新施加限制，从而有助于确保数据完整性。还可以使用 AutoIncrement、AutoIncrementSeed 和 AutoIncrementStep 属性来控制数据自动生成。有关 AutoIncrement 列的更多信息，请参见 创建 AutoIncrement 列 (ADO.NET)。有关更多信息，请参见定义主键 (ADO.NET)。

还可以通过创建一个 UniqueConstraint 并将其添加到 DataColumn 所属的 DataTable 的 ConstraintCollection 中，来确保 DataColumn 中的值是唯一的。有关更多信息，请参见数据表约束 (ADO.NET)。 还可以通过创建一个 UniqueConstraint 并将其添加到 DataColumn 所属的 DataTable 的 ConstraintCollection 中，来确保 DataColumn 中的值是唯一的。有关更多信息，请参见数据表约束 (ADO.NET)。

若要创建 DataColumn 对象之间的关系，请创建 DataRelation 对象并将其添加到 DataSet 的 DataRelationCollection。

可以使用 DataColumn 对象的 Expression 属性来计算列中的值或创建聚合列。有关更多信息，请参见创建表达式列 (ADO.NET)。 可以使用 DataColumn 对象的 Expression 属性来计算列中的值或创建聚合列。有关更多信息，请参见创建表达式列 (ADO.NET)。

下面的示例用几个 DataColumn 对象创建 DataTable。

Private Sub MakeTable()
    ' Create a DataTable.
    Dim table As DataTable = new DataTable("Product")

    ' Create a DataColumn and set various properties.
    Dim column As DataColumn = New DataColumn
    column.DataType = System.Type.GetType("System.Decimal")
    column.AllowDBNull = False
    column.Caption = "Price"
    column.ColumnName = "Price"
    column.DefaultValue = 25

    ' Add the column to the table.
    table.Columns.Add(column)

    ' Add 10 rows and set values.
    Dim row As DataRow
    Dim i As Integer
    For i = 0 to 9
        row = table.NewRow()
        row("Price") = i + 1

        ' Be sure to add the new row to
        ' the DataRowCollection.
        table.Rows.Add(row)
    Next i
End Sub

private void MakeTable()
{
    // Create a DataTable.
    DataTable table = new DataTable("Product");

    // Create a DataColumn and set various properties.
    DataColumn column = new DataColumn();
    column.DataType = System.Type.GetType("System.Decimal");
    column.AllowDBNull = false;
    column.Caption = "Price";
    column.ColumnName = "Price";
    column.DefaultValue = 25;

    // Add the column to the table.
    table.Columns.Add(column);

    // Add 10 rows and set values.
    DataRow row;
    for(int i = 0; i < 10; i++)
    {
        row = table.NewRow();
        row["Price"] = i + 1;

        // Be sure to add the new row to the
        // DataRowCollection.
        table.Rows.Add(row);
    }
}

System.Data System.Data..::.DataColumnDataColumn

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 成员
System.Data 命名空间
Add
DataColumnCollection
Constraints
ConstraintCollection
System.Windows.Forms DataGrid
DataRow
DataTable
DataSet
NewRow
DataRowCollection
UniqueConstraint

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn 成员

DataColumn 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumn 类

表示 DataTable 中列的架构。

DataColumn 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataColumn 类
System.Data 命名空间


DataColumn 构造函数

DataColumn 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumn 类

初始化 DataColumn 类的新实例。

名称 说明
页首

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间


DataColumn 构造函数

DataColumn 构造函数
DataColumn 类

将 DataColumn 类的新实例初始化为类型字符串。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataColumn()
public:
DataColumn()
new : unit -> DataColumn

刚创建时，DataColumn 对象没有默认的 ColumnName 或 Caption。将其添加至 DataColumnCollection 中时，如果尚未给 ColumnName 分配名称，将会生成一个默认名称（“Column1”、“Column2”等）。 刚创建时，DataColumn 对象没有默认的 ColumnName 或 Caption。将其添加至 DataColumnCollection 中时，如果尚未给 ColumnName 分配名称，将会生成一个默认名称（“Column1”、“Column2”等）。

下面的示例创建一个新的 DataColumn，设置它的各种属性，并将其添加到 DataTable 对象的 DataColumnCollection 中。

Private Sub AddDataColumn(ByVal table As DataTable)
    Dim column As DataColumn = New DataColumn()

    ' Set various properties.
    With column
       .ColumnName = "id"
       .DataType = System.Type.GetType("System.Int32")
       .AutoIncrement = True
       .AutoIncrementSeed = 1
       .AutoIncrementStep = 1
       .ReadOnly = True
     End With

    ' Add to Columns collection.
    table.Columns.Add(column)
End Sub

private void AddDataColumn(DataTable table)
{
    DataColumn column = new DataColumn();

    // Set various properties.
    column.ColumnName = "id";
    column.DataType = System.Type.GetType("System.Int32");
    column.AutoIncrement = true;
    column.AutoIncrementSeed = 1;
    column.AutoIncrementStep = 1;
    column.ReadOnly = true;

    // Add to Columns collection.
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
DataColumn 重载
System.Data 命名空间
ColumnName
Caption
DefaultValue
DataTable
DataType

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn 构造函数 (String)

DataColumn 构造函数 (String)
DataColumn 类

使用指定的列名称将 DataColumn 类的新实例初始化为类型字符串。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    columnName As String _
)
public DataColumn(
    string columnName
)
public:
DataColumn(
    String^ columnName
)
new :
        columnName:string -> DataColumn

参数

columnName
类型： System String
一个字符串，它表示要创建的列的名称。如果设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当添加到列集合中时，将指定一个默认名称。 一个字符串，它表示要创建的列的名称。如果设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当添加到列集合中时，将指定一个默认名称。

默认情况下，特定于列的名称会成为 Caption 属性值。

下面的示例用指定 ColumnName 创建新的 DataColumn。

Private Sub AddDataColumn(ByVal table As DataTable)
    Dim column As DataColumn
    column = New DataColumn("id")

    ' Set various properties.
    With column
       .DataType = System.Type.GetType("System.Int32")
       .AutoIncrement = True
       .AutoIncrementSeed = 1
       .AutoIncrementStep = 1
       .ReadOnly = True
     End With

    ' Add to Columns collection.
    table.Columns.Add(column)
End Sub

private void AddDataColumn(DataTable table)
{
    DataColumn column = new DataColumn("id");

    // Set various properties.
    column.DataType = System.Type.GetType("System.Int32");
    column.AutoIncrement = true;
    column.AutoIncrementSeed = 1;
    column.AutoIncrementStep = 1;
    column.ReadOnly = true;

    // Add to Columns collection.
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
DataColumn 重载
System.Data 命名空间
ColumnName
Caption
DefaultValue
DataTable
DataType

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn 构造函数 (String, Type)

DataColumn 构造函数 (String, Type)
DataColumn 类

使用指定列名称和数据类型初始化 DataColumn 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    columnName As String, _
    dataType As Type _
)
public DataColumn(
    string columnName,
    Type dataType
)
public:
DataColumn(
    String^ columnName,
    Type^ dataType
)
new :
        columnName:string *
        dataType:Type -> DataColumn

参数

columnName
类型： System String
一个字符串，它表示要创建的列的名称。如果设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当添加到列集合中时，将指定一个默认名称。 一个字符串，它表示要创建的列的名称。如果设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当添加到列集合中时，将指定一个默认名称。
dataType
类型： System Type
支持的 DataType。
异常 | 条件
ArgumentNullException | 未指定任何 dataType。

下面的示例用指定的 ColumnName 和 DataType 创建新的 DataColumn。

Private Sub AddDataColumn(ByVal table As DataTable)

   Dim typeInt32 As System.Type = _
      System.Type.GetType("System.Int32")
   Dim column As DataColumn = _
       New DataColumn("id", typeInt32)

   ' Set various properties.
   With column
      .AutoIncrement = True
      .AutoIncrementSeed = 1
      .AutoIncrementStep = 1
      .ReadOnly = True
    End With

   ' Add to Columns collection.
   table.Columns.Add(column)
End Sub

private void AddDataColumn(DataTable table)
{
    System.Type typeInt32 =
        System.Type.GetType("System.Int32");
    DataColumn column = new DataColumn("id", typeInt32);

    // Set various properties.
    column.AutoIncrement = true;
    column.AutoIncrementSeed = 1;
    column.AutoIncrementStep = 1;
    column.ReadOnly = true;

    // Add to Columns collection.
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
DataColumn 重载
System.Data 命名空间
DefaultValue
ColumnName
Caption
DataTable
DataType

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn 构造函数 (String, Type, String)

DataColumn 构造函数 (String, Type, String)
DataColumn 类

使用指定的名称、数据类型和表达式初始化 DataColumn 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    columnName As String, _
    dataType As Type, _
    expr As String _
)
public DataColumn(
    string columnName,
    Type dataType,
    string expr
)
public:
DataColumn(
    String^ columnName,
    Type^ dataType,
    String^ expr
)
new :
        columnName:string *
        dataType:Type *
        expr:string -> DataColumn

参数

columnName
类型： System String
一个字符串，它表示要创建的列的名称。如果设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当添加到列集合中时，将指定一个默认名称。 一个字符串，它表示要创建的列的名称。如果设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当添加到列集合中时，将指定一个默认名称。
dataType
类型： System Type
支持的 DataType。
expr
类型： System String
用于创建该列的表达式。有关更多信息，请参见 Expression 属性。 用于创建该列的表达式。有关更多信息，请参见 Expression 属性。
异常 | 条件
ArgumentNullException | 未指定任何 dataType。

下面的示例创建计算所得的列。

Private Sub AddDataColumn(ByVal table As DataTable)
    Dim column As DataColumn
    Dim decimalType As System.Type

    decimalType = System.Type.GetType("System.Decimal")
    column = New DataColumn("Tax", decimalType, "UnitPrice * .0862")

    ' Set various properties.
    With column
       .AutoIncrement = False
       .ReadOnly = True
    End With

    ' Add to Columns collection.
    table.Columns.Add(column)
 End Sub

private void AddDataColumn(DataTable table)
{
    System.Type decimalType;
    decimalType = System.Type.GetType("System.Decimal");

    // Create the column. The name is 'Tax,' with data type Decimal,and
    // an expression ('UnitPrice * .0862) to calculate the tax.
    DataColumn column = new DataColumn("Tax",
        decimalType, "UnitPrice * .0862");

    // Set various properties.
    column.AutoIncrement = false;
    column.ReadOnly = true;

    // Add to Columns collection.;
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
DataColumn 重载
System.Data 命名空间
DefaultValue
ColumnName
Caption
DataTable
DataType
Expression

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn 构造函数 (String, Type, String, MappingType)

DataColumn 构造函数 (String, Type, String, MappingType)
DataColumn 类

使用指定名称、数据类型、表达式和确定列是否为特性的值，初始化 DataColumn 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    columnName As String, _
    dataType As Type, _
    expr As String, _
    type As MappingType _
)
public DataColumn(
    string columnName,
    Type dataType,
    string expr,
    MappingType type
)
public:
DataColumn(
    String^ columnName,
    Type^ dataType,
    String^ expr,
    MappingType type
)
new :
        columnName:string *
        dataType:Type *
        expr:string *
        type:MappingType -> DataColumn

参数

columnName
类型： System String
一个字符串，它表示要创建的列的名称。如果设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当添加到列集合中时，将指定一个默认名称。 一个字符串，它表示要创建的列的名称。如果设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当添加到列集合中时，将指定一个默认名称。
dataType
类型： System Type
支持的 DataType。
expr
类型： System String
用于创建该列的表达式。有关更多信息，请参见 Expression 属性。 用于创建该列的表达式。有关更多信息，请参见 Expression 属性。
type
类型： System.Data MappingType
MappingType 值之一。
异常 | 条件
ArgumentNullException | 未指定任何 dataType。

type 参数设置 ColumnMapping 属性。该属性指定在将 DataSet 转换成 XML 文档时如何映射 DataColumn。例如，如果列名称为“fName”，它包含的值是“Bob”，且 type 设置为 MappingType.Attribute，那么 XML 元素就将是： type 参数设置 ColumnMapping 属性。该属性指定在将 DataSet 转换成 XML 文档时如何映射 DataColumn。例如，如果列名称为“fName”，它包含的值是“Bob”，且 type 设置为 MappingType.Attribute，那么 XML 元素就将是： type 参数设置 ColumnMapping 属性。该属性指定在将 DataSet 转换成 XML 文档时如何映射 DataColumn。例如，如果列名称为“fName”，它包含的值是“Bob”，且 type 设置为 MappingType.Attribute，那么 XML 元素就将是：

<Name fName = 'Bob'/>

有关如何将列映射到元素或特性的更多信息，请参见 ColumnMapping 属性。

下面的示例构造计算所得的列。

Private Sub CreateComputedColumn(ByVal table As DataTable)
    Dim column As DataColumn
    Dim decimalType As System.Type = _
        System.Type.GetType("System.Decimal")

    ' The expression multiplies the "Price" column value by the
    ' "Quantity" to create the "Total" column.
    Dim expression As String = "Price * Quantity"

    ' Create the column, setting the type to Attribute.
    column = New DataColumn("Total", decimalType, _
        expression, MappingType.Attribute)

    ' Set various properties.
    column.AutoIncrement = False
    column.ReadOnly = True

    ' Add the column to a DataTable object's DataColumnCollection.
    DataSet1.Tables("OrderDetails").Columns.Add(column)
End Sub

private void CreateComputedColumn(DataTable table)
{
    System.Type myDataType =
        System.Type.GetType("System.Decimal");

    // The expression multiplies the "Price" column value
    // by the "Quantity" to create the "Total" column.
    string expression = "Price * Quantity";

    // Create the column, setting the type to Attribute.
    DataColumn column = new DataColumn("Total", myDataType,
        expression, MappingType.Attribute);

    // Set various properties.
    column.AutoIncrement = false;
    column.ReadOnly = true;

    // Add the column to a DataTable object's to DataColumnCollection.
    DataSet1.Tables["OrderDetails"].Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
DataColumn 重载
System.Data 命名空间
ColumnName
ColumnMapping
Caption
DefaultValue
DataTable
DataType

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn 方法

DataColumn 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumn 类

DataColumn 类型公开以下成员。

名称 说明
页首

参考

DataColumn 类
System.Data 命名空间


DataColumn ..::.CheckNotAllowNull 方法

DataColumn
.
.
::
.
CheckNotAllowNull 方法
DataColumn 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Sub CheckNotAllowNull
protected internal void CheckNotAllowNull()
protected public:
void CheckNotAllowNull()
member CheckNotAllowNull : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间


DataColumn ..::.CheckUnique 方法

DataColumn
.
.
::
.
CheckUnique 方法
DataColumn 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub CheckUnique
protected void CheckUnique()
protected:
void CheckUnique()
member CheckUnique : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间


DataColumn ..::.Dispose 方法

DataColumn
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumn 类

释放由 MarshalByValueComponent 占用的资源。

名称 说明
页首

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间


DataColumn ..::.OnPropertyChanging 方法

DataColumn
.
.
::
.
OnPropertyChanging 方法
DataColumn 类

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnPropertyChanging ( _
    pcevent As PropertyChangedEventArgs _
)
protected virtual void OnPropertyChanging(
    PropertyChangedEventArgs pcevent
)
protected:
virtual void OnPropertyChanging(
    PropertyChangedEventArgs^ pcevent
)
abstract OnPropertyChanging :
        pcevent:PropertyChangedEventArgs -> unit
override OnPropertyChanging :
        pcevent:PropertyChangedEventArgs -> unit

参数

pcevent
类型： System.ComponentModel PropertyChangedEventArgs
参数引用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间


DataColumn ..::.RaisePropertyChanging 方法

DataColumn
.
.
::
.
RaisePropertyChanging 方法
DataColumn 类

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Sub RaisePropertyChanging ( _
    name As String _
)
protected internal void RaisePropertyChanging(
    string name
)
protected public:
void RaisePropertyChanging(
    String^ name
)
member RaisePropertyChanging :
        name:string -> unit

参数

name
类型： System String
参数引用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间


DataColumn ..::.SetOrdinal 方法

DataColumn
.
.
::
.
SetOrdinal 方法
DataColumn 类

将 DataColumn 的序号或位置更改为指定的序号或位置。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub SetOrdinal ( _
    ordinal As Integer _
)
public void SetOrdinal(
    int ordinal
)
public:
void SetOrdinal(
    int ordinal
)
member SetOrdinal :
        ordinal:int -> unit

参数

ordinal
类型： System Int32
指定的序号。

将 DataColumn 的序号或位置更改为指定的序号或位置。如果序号小于 0 或大于现有的列数 1（大于最后一列的序号），则将引发表示无效的 ArgumentException。 将 DataColumn 的序号或位置更改为指定的序号或位置。如果序号小于 0 或大于现有的列数 1（大于最后一列的序号），则将引发表示无效的 ArgumentException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.ToString 方法

DataColumn
.
.
::
.
ToString 方法
DataColumn 类

获取列的 Expression（如果存在的话）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
如果设置了属性；则为 Expression 的值；否则为 ColumnName 的属性。

下面的示例使用 ToString 属性返回 DataColumn 对象的集合中每一成员的默认字符串。

Private Sub PrintColumns(table As DataTable)
    ' Print the default string of each column in a collection.
    Dim column As DataColumn
    For Each column In table.Columns
       Console.WriteLine(column.ToString())
    Next
End Sub

private void PrintColumns(DataTable table)
{
    // Print the default string of each column in a collection.
    foreach(DataColumn column in table.Columns)
    {
        Console.WriteLine(column.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
Expression
ColumnName

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn 属性

DataColumn 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumn 类

DataColumn 类型公开以下成员。

名称 说明
页首

参考

DataColumn 类
System.Data 命名空间


DataColumn ..::.AllowDBNull 属性

DataColumn
.
.
::
.
AllowDBNull 属性
DataColumn 类

获取或设置一个值，该值指示对于属于该表的行，此列中是否允许空值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property AllowDBNull As Boolean
    Get
    Set
public bool AllowDBNull { get; set; }
public:
property bool AllowDBNull {
    bool get ();
    void set (bool value);
}
member AllowDBNull : bool with get, set

属性值

类型： System Boolean
如果允许空值，则为 true；否则为 false。默认为 true。 如果允许空值，则为 true；否则为 false。默认为 true。

下面的示例创建新 DataColumn 并将其 AllowDBNull 属性设置为 true。

Private Sub AddNullAllowedColumn()
    Dim column As DataColumn
    column = New DataColumn("classID", _
        System.Type.GetType("System.Int32"))
    column.AllowDBNull = True

    ' Add the column to a new DataTable.
    Dim table As DataTable
    table = New DataTable
    table.Columns.Add(column)
End Sub

private void AddNullAllowedColumn()
{
    DataColumn column;
    column = new DataColumn("classID",
        System.Type.GetType("System.Int32"));
    column.AllowDBNull = true;

    // Add the column to a new DataTable.
    DataTable table;
    table = new DataTable();
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
Unique

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.AutoIncrement 属性

DataColumn
.
.
::
.
AutoIncrement 属性
DataColumn 类

获取或设置一个值，该值指示对于添加到该表中的新行，列是否将列的值自动递增。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property AutoIncrement As Boolean
    Get
    Set
public bool AutoIncrement { get; set; }
public:
property bool AutoIncrement {
    bool get ();
    void set (bool value);
}
member AutoIncrement : bool with get, set

属性值

类型： System Boolean
如果列的值自动递增，则为 true；否则为 false。默认为 false。 如果列的值自动递增，则为 true；否则为 false。默认为 false。
异常 | 条件
ArgumentException | 该列是计算所得的列。

如果在设置此属性时此列的类型不是 Int16、Int32 或 Int64，则将 DataType 属性强迫为 Int32。如果这是计算所得的列，则将生成异常。将设置 Expression 属性。只有当此列被添加到列集合时，其行的值等于默认值的情况下，才使用递增的值。 如果在设置此属性时此列的类型不是 Int16、Int32 或 Int64，则将 DataType 属性强迫为 Int32。如果这是计算所得的列，则将生成异常。将设置 Expression 属性。只有当此列被添加到列集合时，其行的值等于默认值的情况下，才使用递增的值。 如果在设置此属性时此列的类型不是 Int16、Int32 或 Int64，则将 DataType 属性强迫为 Int32。如果这是计算所得的列，则将生成异常。将设置 Expression 属性。只有当此列被添加到列集合时，其行的值等于默认值的情况下，才使用递增的值。 如果在设置此属性时此列的类型不是 Int16、Int32 或 Int64，则将 DataType 属性强迫为 Int32。如果这是计算所得的列，则将生成异常。将设置 Expression 属性。只有当此列被添加到列集合时，其行的值等于默认值的情况下，才使用递增的值。

可以使用 DataRow 类的 ItemArray 属性并传入值的数组，来创建新行。对于其 AutoIncrement 设置为 true 的列，这是一个潜在的问题，因为其值是自动生成的。若要使用 ItemArray 属性，请将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 放入数组中的列的位置。有关更多信息，请参见 DataRow 类的 ItemArray 属性。 可以使用 DataRow 类的 ItemArray 属性并传入值的数组，来创建新行。对于其 AutoIncrement 设置为 true 的列，这是一个潜在的问题，因为其值是自动生成的。若要使用 ItemArray 属性，请将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 放入数组中的列的位置。有关更多信息，请参见 DataRow 类的 ItemArray 属性。 可以使用 DataRow 类的 ItemArray 属性并传入值的数组，来创建新行。对于其 AutoIncrement 设置为 true 的列，这是一个潜在的问题，因为其值是自动生成的。若要使用 ItemArray 属性，请将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 放入数组中的列的位置。有关更多信息，请参见 DataRow 类的 ItemArray 属性。 可以使用 DataRow 类的 ItemArray 属性并传入值的数组，来创建新行。对于其 AutoIncrement 设置为 true 的列，这是一个潜在的问题，因为其值是自动生成的。若要使用 ItemArray 属性，请将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 放入数组中的列的位置。有关更多信息，请参见 DataRow 类的 ItemArray 属性。

如果列的类型是 SqlInt16 或 SqlInt32，则 AutoIncrement 将不起作用。改为使用 Int16 或 Int32。 如果列的类型是 SqlInt16 或 SqlInt32，则 AutoIncrement 将不起作用。改为使用 Int16 或 Int32。

如果列的类型是 SqlInt64 或 SqlDecimal，则 AutoIncrement 只有部分能工作。改为使用 Int64 或 Decimal。 如果列的类型是 SqlInt64 或 SqlDecimal，则 AutoIncrement 只有部分能工作。改为使用 Int64 或 Decimal。

当 AutoIncrementStep 值被添加到当前值时，将取消溢出检查。

下面的示例设置 AutoIncrement、AutoIncrementSeed 和 AutoIncrementStep 属性。

Private Sub AddAutoIncrementColumn()
    Dim column As DataColumn = New DataColumn
    column.DataType = System.Type.GetType("System.Int32")
    With column
        .AutoIncrement = True
        .AutoIncrementSeed = 1000
        .AutoIncrementStep = 10
    End With

    ' Add the column to a new DataTable.
    Dim table As DataTable
    table = New DataTable
    table.Columns.Add(column)
End Sub

private void AddAutoIncrementColumn()
{
    DataColumn column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.AutoIncrement = true;
    column.AutoIncrementSeed = 1000;
    column.AutoIncrementStep = 10;

    // Add the column to a new DataTable.
    DataTable table = new DataTable("table");
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
AutoIncrementSeed
AutoIncrementStep
Expression
ItemArray
NewRow

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.AutoIncrementSeed 属性

DataColumn
.
.
::
.
AutoIncrementSeed 属性
DataColumn 类

获取或设置其 AutoIncrement 属性设置为 true 的列的起始值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property AutoIncrementSeed As Long
    Get
    Set
public long AutoIncrementSeed { get; set; }
public:
property long long AutoIncrementSeed {
    long long get ();
    void set (long long value);
}
member AutoIncrementSeed : int64 with get, set

属性值

类型： System Int64
AutoIncrement 功能的起始值。

下面的示例设置 AutoIncrement、AutoIncrementSeed 和 AutoIncrementStep 属性。

Private Sub AddAutoIncrementColumn()
    Dim column As DataColumn = New DataColumn
    column.DataType = System.Type.GetType("System.Int32")
    With column
        .AutoIncrement = True
        .AutoIncrementSeed = 1000
        .AutoIncrementStep = 10
    End With

    ' Add the column to a new DataTable.
    Dim table As DataTable
    table = New DataTable
    table.Columns.Add(column)
End Sub

private void AddAutoIncrementColumn()
{
    DataColumn column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.AutoIncrement = true;
    column.AutoIncrementSeed = 1000;
    column.AutoIncrementStep = 10;

    // Add the column to a new DataTable.
    DataTable table = new DataTable("table");
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
AutoIncrement
AutoIncrementStep
Expression
ItemArray

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.AutoIncrementStep 属性

DataColumn
.
.
::
.
AutoIncrementStep 属性
DataColumn 类

获取或设置其 AutoIncrement 属性设置为 true 的列使用的增量。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property AutoIncrementStep As Long
    Get
    Set
public long AutoIncrementStep { get; set; }
public:
property long long AutoIncrementStep {
    long long get ();
    void set (long long value);
}
member AutoIncrementStep : int64 with get, set

属性值

类型： System Int64
列的值自动递增的数值。默认值为 1。 列的值自动递增的数值。默认值为 1。
异常 | 条件
ArgumentException | 设置的值为零。

下面的示例设置 AutoIncrement、AutoIncrementSeed 和 AutoIncrementStep 属性。

Private Sub AddAutoIncrementColumn()
    Dim column As DataColumn = New DataColumn
    column.DataType = System.Type.GetType("System.Int32")
    With column
        .AutoIncrement = True
        .AutoIncrementSeed = 1000
        .AutoIncrementStep = 10
    End With

    ' Add the column to a new DataTable.
    Dim table As DataTable
    table = New DataTable
    table.Columns.Add(column)
End Sub

private void AddAutoIncrementColumn()
{
    DataColumn column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.AutoIncrement = true;
    column.AutoIncrementSeed = 1000;
    column.AutoIncrementStep = 10;

    // Add the column to a new DataTable.
    DataTable table = new DataTable("table");
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
AutoIncrement
AutoIncrementSeed
Expression
ItemArray

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.Caption 属性

DataColumn
.
.
::
.
Caption 属性
DataColumn 类

获取或设置列的标题。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Caption As String
    Get
    Set
public string Caption { get; set; }
public:
property String^ Caption {
    String^ get ();
    void set (String^ value);
}
member Caption : string with get, set

属性值

类型： System String
列的标题。如果没有设置，则返回 ColumnName 的值。 列的标题。如果没有设置，则返回 ColumnName 的值。

可使用 Caption 属性来显示 DataColumn 的描述性名称或友好名称。

下面的示例创建新的 DataTable。它然后向 DataColumnCollection 添加三个 DataColumn 对象并为每个 DataColumn 设置 Caption 属性。 下面的示例创建新的 DataTable。它然后向 DataColumnCollection 添加三个 DataColumn 对象并为每个 DataColumn 设置 Caption 属性。

Private Sub CreateDataTable()
    Dim table As DataTable
    Dim column As DataColumn

    table = new DataTable("Customers")

    'CustomerID column
    column = table.Columns.Add( _
        "CustomerID", System.Type.GetType("System.Int32"))
    column.Unique = True

    'CustomerName column
    column = table.Columns.Add( _
        "CustomerName", System.Type.GetType("System.String"))
    column.Caption = "Name"

    'CreditLimit
    column = table.Columns.Add( _
        "CreditLimit", System.Type.GetType("System.Double"))
    column.DefaultValue = 0
    column.Caption = "Limit"

    table.Rows.Add(new object() {1, "Jonathan", 23.44})
    table.Rows.Add(new object() {2, "Bill", 56.87})
End Sub

private void CreateDataTable()
{
   DataTable table;
   DataColumn column;

   table = new DataTable("Customers");

   //CustomerID column
   column = table.Columns.Add("CustomerID",
       System.Type.GetType("System.Int32"));
   column.Unique = true;

   //CustomerName column
   column = table.Columns.Add("CustomerName",
       System.Type.GetType("System.String"));
   column.Caption = "Name";

   //CreditLimit
   column = table.Columns.Add("CreditLimit",
       System.Type.GetType("System.Double"));
   column.DefaultValue = 0;
   column.Caption = "Limit";

   table.Rows.Add(new object[] {1, "Jonathan", 23.44});
   table.Rows.Add(new object[] {2, "Bill", 56.87});
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
ColumnName

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.ColumnMapping 属性

DataColumn
.
.
::
.
ColumnMapping 属性
DataColumn 类

获取或设置列的 MappingType。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property ColumnMapping As MappingType
    Get
    Set
public virtual MappingType ColumnMapping { get; set; }
public:
virtual property MappingType ColumnMapping {
    MappingType get ();
    void set (MappingType value);
}
abstract ColumnMapping : MappingType with get, set
override ColumnMapping : MappingType with get, set

属性值

类型： System.Data MappingType
MappingType 值之一。

ColumnMapping 属性确定，在使用 WriteXml 方法将 DataSet 作为 XML 文档保存时如何映射 DataColumn。

例如，如果 DataColumn 名为“customerID”，其 ColumnMapping 属性设置为 MappingType.Element，那么列值将产生下列 XML：

<Customers>
  <customerID>ALFKI</customerID>
 ......</Customers>
  <Orders>
  <OrderID>12345</OrderID>
  <customerID>ALFKI</customerID>
 ......</Orders>

但是，如果将同一列映射到 MappingType.Attribute，则将产生下列 XML：

<Customers customerID="ALFKI"........more attributes.....>
  <Order orderID="1234"....more attributes..../>
  <Order orderID="1234"....more attributes..../>
 ......More orders for this customer
  </Customers>

使用包含 type 参数的 DataColumn 构造函数来指定在将其 DataSet 转换为 XML 文档时如何映射 DataColumn。

ColumnMapping 属性与构造函数的参数 type 对应。

下面的示例设置新 DataColumn 的 ColumnMapping 类型属性。

Private Sub AddColumn(table As DataTable )
    ' Create a new column and set its properties.
    Dim column As DataColumn = New DataColumn("ID", _
        Type.GetType("System.Int32"), "", MappingType.Attribute)
    column.DataType = Type.GetType("System.String")
    column.ColumnMapping = MappingType.Element

    ' Add the column the table's columns collection.
    table.Columns.Add(column)
End Sub

private void AddColumn(DataTable table)
{
    // Create a new column and set its properties.
    DataColumn column = new DataColumn("column",
        typeof(int), "", MappingType.Attribute);
    column.DataType = Type.GetType("System.String");
    column.ColumnMapping = MappingType.Element;

    // Add the column the table's columns collection.
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.ColumnName 属性

DataColumn
.
.
::
.
ColumnName 属性
DataColumn 类

获取或设置 DataColumnCollection 中的列的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property ColumnName As String
    Get
    Set
public string ColumnName { get; set; }
public:
property String^ ColumnName {
    String^ get ();
    void set (String^ value);
}
member ColumnName : string with get, set

属性值

类型： System String
列的名称。
异常 | 条件
ArgumentException | 属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，且列属于一个集合。
DuplicateNameException | 集合中已经存在同名称的列。名称比较不区分大小写。 集合中已经存在同名称的列。名称比较不区分大小写。

在创建 DataColumn 时，它没有 ColumnName 值。不过，在将 DataColumn 添加到 DataTable 对象的 DataColumnCollection 中时，会给予它一个默认的名称（“Column1”、“Column2”等）。 在创建 DataColumn 时，它没有 ColumnName 值。不过，在将 DataColumn 添加到 DataTable 对象的 DataColumnCollection 中时，会给予它一个默认的名称（“Column1”、“Column2”等）。

默认情况下，Caption 值设置为 ColumnName 值。

下面的示例获取 DataSet 中的每个表中的每个列的 ColumnName。该示例还说明如何用新的 ColumnName 创建 DataColumn。 下面的示例获取 DataSet 中的每个表中的每个列的 ColumnName。该示例还说明如何用新的 ColumnName 创建 DataColumn。

Private Sub PrintColumnNames(dataSet As DataSet)
    Dim table As DataTable
    Dim column As DataColumn

    ' For each DataTable, print the ColumnName.
    For Each table in dataSet.Tables
        For Each column in table.Columns
        Console.WriteLine(column.ColumnName)
        Next
    Next
End Sub

Private Sub AddColumn(table As DataTable)
    Dim column As DataColumn
    column = New DataColumn()

    With column
        .ColumnName = "SupplierID"
        .DataType = System.Type.GetType("System.String")
        .Unique = True
        .AutoIncrement = False
        .Caption = "SupplierID"
        .ReadOnly = False
    End With

    ' Add the column to the table's columns collection.
    table.Columns.Add(column)
End Sub

private void PrintColumnNames(DataSet dataSet)
{
    // For each DataTable, print the ColumnName.
    foreach(DataTable table in dataSet.Tables)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(column.ColumnName);
        }
    }
}

private void AddColumn(DataTable table)
{
    DataColumn column;
    column = new DataColumn();
    column.ColumnName = "SupplierID";
    column.DataType = System.Type.GetType("System.String");
    column.Unique = true;
    column.AutoIncrement = false;
    column.Caption = "SupplierID";
    column.ReadOnly = false;

    // Add the column to the table's columns collection.
    table.Columns.Add(column);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
Caption

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.DataType 属性

DataColumn
.
.
::
.
DataType 属性
DataColumn 类

获取或设置存储在列中的数据的类型。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property DataType As Type
    Get
    Set
public Type DataType { get; set; }
public:
property Type^ DataType {
    Type^ get ();
    void set (Type^ value);
}
member DataType : Type with get, set

属性值

类型： System Type
一个 Type 对象，它表示列数据类型。
异常 | 条件
ArgumentException | 列已经存储了数据。 - 或 - AutoIncrement 是 true，但值被设置为 AutoIncrement 不支持的类型。

设置 DataType 值对于确保正确创建和更新数据源中的数据非常重要。

DataType 属性支持下列 .NET Framework 基数据类型：

  • Boolean

  • Byte

  • Char

  • DateTime

  • Decimal

  • Double

  • Int16

  • Int32

  • Int64

  • SByte

  • Single

  • String

  • TimeSpan

  • UInt16

  • UInt32

  • UInt64

以及下列数组类型：

  • Byte[]

在列开始存储数据之后若更改此属性，就会产生异常。

如果在设置 DataType 属性之前将 AutoIncrement 设置为 true，并且尝试将类型设置为整数类型之外的任何类型，则将生成异常。

说明 说明

Byte[] 数据类型与基 .NET Framework 数据类型不同，它是一种引用数据类型，所以这种数据类型的列在某些情况下需要特殊处理。如果 Byte[] 数据类型的列用作 PrimaryKey，或用作 DataView 的 Sort 键或 RowFilter 键，则对该列值的任何更改都必须包括将 Byte[] 列值赋给单独实例化的 Byte[] 对象。需要通过此赋值操作来触发对排序、筛选和主键操作所使用的内部索引的更新。下面的示例对此进行了阐释： Byte[] 数据类型与基 .NET Framework 数据类型不同，它是一种引用数据类型，所以这种数据类型的列在某些情况下需要特殊处理。如果 Byte[] 数据类型的列用作 PrimaryKey，或用作 DataView 的 Sort 键或 RowFilter 键，则对该列值的任何更改都必须包括将 Byte[] 列值赋给单独实例化的 Byte[] 对象。需要通过此赋值操作来触发对排序、筛选和主键操作所使用的内部索引的更新。下面的示例对此进行了阐释： Byte[] 数据类型与基 .NET Framework 数据类型不同，它是一种引用数据类型，所以这种数据类型的列在某些情况下需要特殊处理。如果 Byte[] 数据类型的列用作 PrimaryKey，或用作 DataView 的 Sort 键或 RowFilter 键，则对该列值的任何更改都必须包括将 Byte[] 列值赋给单独实例化的 Byte[] 对象。需要通过此赋值操作来触发对排序、筛选和主键操作所使用的内部索引的更新。下面的示例对此进行了阐释： Byte[] 数据类型与基 .NET Framework 数据类型不同，它是一种引用数据类型，所以这种数据类型的列在某些情况下需要特殊处理。如果 Byte[] 数据类型的列用作 PrimaryKey，或用作 DataView 的 Sort 键或 RowFilter 键，则对该列值的任何更改都必须包括将 Byte[] 列值赋给单独实例化的 Byte[] 对象。需要通过此赋值操作来触发对排序、筛选和主键操作所使用的内部索引的更新。下面的示例对此进行了阐释：

byte[] columnValue = (byte[])myDataTable.Rows[0][0];
byte[] newValue = (byte[])columnValue.Clone();
newValue[1] = 2;
myDataTable.Rows[0][0] = newValue;
说明 说明

尽管可以将列定义为基 .NET Framework 数据类型和 Byte[] 以外的数据类型，但这样的列将作为用户定义的类型进行处理，具有下列使用限制。（有关用户定义的类型的更多信息，请参见 Creating and Using User-Defined Types。） 尽管可以将列定义为基 .NET Framework 数据类型和 Byte[] 以外的数据类型，但这样的列将作为用户定义的类型进行处理，具有下列使用限制。（有关用户定义的类型的更多信息，请参见 Creating and Using User-Defined Types。）

  • 此列不能是 RowFilter 或 Select 表达式的一部分。

  • 如果将此列用作 PrimaryKey 或 Sort，或用于 DataView，则必须将此列作为不可变字段处理；将此列添加到表中后，不能更改其数据。

  • 只能将其 ColumnMapping 设置为 MappingType.Element。

  • 必须使用 SerializableAttribute 标记实现此列的数据类型的类，如有必要，该类必须实现 ISerializable 或 IXmlSerializable 接口。

  • 对更改跟踪的支持受到限制。若要利用 DataTable 类的更改跟踪机制，实现此列的数据类型的类必须实现 IChangeTracking 接口，或者通过对行调用 SetModified 或将该列的值对象分配给单独实例化的列值对象，来接管通知 DataRow 该列的值何时被修改的责任。 对更改跟踪的支持受到限制。若要利用 DataTable 类的更改跟踪机制，实现此列的数据类型的类必须实现 IChangeTracking 接口，或者通过对行调用 SetModified 或将该列的值对象分配给单独实例化的列值对象，来接管通知 DataRow 该列的值何时被修改的责任。

下面的示例将几种数据类型的列添加到 DataTable 中，然后向该表添加一行。

Public Function MakeDataTable() As DataTable

    Dim myTable As DataTable
    Dim myNewRow As DataRow
    ' Create a new DataTable.
    myTable = New DataTable("My Table")

    ' Create DataColumn objects of data types.
    Dim colString As DataColumn = New DataColumn("StringCol")
    colString.DataType = System.Type.GetType("System.String")
    myTable.Columns.Add(colString)

    Dim colInt32 As DataColumn = New DataColumn("Int32Col")
    colInt32.DataType = System.Type.GetType("System.Int32")
    myTable.Columns.Add(colInt32)

    Dim colBoolean As DataColumn = New DataColumn("BooleanCol")
    colBoolean.DataType = System.Type.GetType("System.Boolean")
    myTable.Columns.Add(colBoolean)

    Dim colTimeSpan As DataColumn = New DataColumn("TimeSpanCol")
    colTimeSpan.DataType = System.Type.GetType("System.TimeSpan")
    myTable.Columns.Add(colTimeSpan)

    Dim colDateTime As DataColumn = New DataColumn("DateTimeCol")
    colDateTime.DataType = System.Type.GetType("System.DateTime")
    myTable.Columns.Add(colDateTime)

    Dim colDecimal As DataColumn = New DataColumn("DecimalCol")
    colDecimal.DataType = System.Type.GetType("System.Decimal")
    myTable.Columns.Add(colDecimal)

    ' Populate one row with values.
    myNewRow = myTable.NewRow()

    myNewRow("StringCol") = "Item Name"
    myNewRow("Int32Col") = 2147483647
    myNewRow("BooleanCol") = True
    myNewRow("TimeSpanCol") = New TimeSpan(10,22,10,15,100)
    myNewRow("DateTimeCol") = System.DateTime.Today
    myNewRow("DecimalCol") = 64.0021
    myTable.Rows.Add(myNewRow)
    MakeDataTable = myTable
 End Function

public DataTable MakeDataTable(){

    DataTable myTable;
    DataRow myNewRow;
    // Create a new DataTable.
    myTable = new DataTable("My Table");

    // Create DataColumn objects of data types.
    DataColumn colString = new DataColumn("StringCol");
    colString.DataType = System.Type.GetType("System.String");
    myTable.Columns.Add(colString);

    DataColumn colInt32 = new DataColumn("Int32Col");
    colInt32.DataType = System.Type.GetType("System.Int32");
    myTable.Columns.Add(colInt32);

    DataColumn colBoolean = new DataColumn("BooleanCol");
    colBoolean.DataType = System.Type.GetType("System.Boolean");
    myTable.Columns.Add(colBoolean);

    DataColumn colTimeSpan = new DataColumn("TimeSpanCol");
    colTimeSpan.DataType = System.Type.GetType("System.TimeSpan");
    myTable.Columns.Add(colTimeSpan);

    DataColumn colDateTime = new DataColumn("DateTimeCol");
    colDateTime.DataType = System.Type.GetType("System.DateTime");
    myTable.Columns.Add(colDateTime);

    DataColumn colDecimal = new DataColumn("DecimalCol");
    colDecimal.DataType = System.Type.GetType("System.Decimal");
    myTable.Columns.Add(colDecimal);

    // Populate one row with values.
    myNewRow = myTable.NewRow();

    myNewRow["StringCol"] = "Item Name";
    myNewRow["Int32Col"] = 2147483647;
    myNewRow["BooleanCol"] = true;
    myNewRow["TimeSpanCol"] = new TimeSpan(10,22,10,15,100);
    myNewRow["DateTimeCol"] = System.DateTime.Today;
    myNewRow["DecimalCol"] = 64.0021;
    myTable.Rows.Add(myNewRow);
    return myTable;
 }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
Type
GetType

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.DateTimeMode 属性

DataColumn
.
.
::
.
DateTimeMode 属性
DataColumn 类

获取或设置列的 DateTimeMode。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property DateTimeMode As DataSetDateTime
    Get
    Set
public DataSetDateTime DateTimeMode { get; set; }
public:
property DataSetDateTime DateTimeMode {
    DataSetDateTime get ();
    void set (DataSetDateTime value);
}
member DateTimeMode : DataSetDateTime with get, set

属性值

类型： System.Data DataSetDateTime
所指定的列的 DataSetDateTime。

在将行添加到 DataColumn 中之后不能修改 DateTimeMode，除非从 Unspecified 修改为 UnspecifiedLocal 或从后者修改为前者。允许进行由 UnspecifiedLocal 到 Unspecified 以及相反的修改，因为这两个选项只在序列化过程中存在差别，不会影响存储。 在将行添加到 DataColumn 中之后不能修改 DateTimeMode，除非从 Unspecified 修改为 UnspecifiedLocal 或从后者修改为前者。允许进行由 UnspecifiedLocal 到 Unspecified 以及相反的修改，因为这两个选项只在序列化过程中存在差别，不会影响存储。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.DefaultValue 属性

DataColumn
.
.
::
.
DefaultValue 属性
DataColumn 类

在创建新行时获取或设置列的默认值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property DefaultValue As Object
    Get
    Set
public Object DefaultValue { get; set; }
public:
property Object^ DefaultValue {
    Object^ get ();
    void set (Object^ value);
}
member DefaultValue : Object with get, set

属性值

类型： System Object
适合于列的 DataType 的值。
异常 | 条件
InvalidCastException | 在添加行时，默认值不是列的数据类型的实例。

默认值是指在创建 DataRow 时自动分配给列的值（例如，创建 DataRow 时的日期和时间）。

在将 AutoIncrement 设置为“真”时，可以没有默认值。

通过使用 DataRow 类的 ItemArray 属性并向该方法传递值数组，可以创建新行。对于带有默认值的列，这是一个潜在的问题，因为其值是自动生成的。若要对这样的列使用 ItemArray 属性，请将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 放入数组中的列的位置。有关更多信息，请参见 ItemArray 属性。 通过使用 DataRow 类的 ItemArray 属性并向该方法传递值数组，可以创建新行。对于带有默认值的列，这是一个潜在的问题，因为其值是自动生成的。若要对这样的列使用 ItemArray 属性，请将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 放入数组中的列的位置。有关更多信息，请参见 ItemArray 属性。 通过使用 DataRow 类的 ItemArray 属性并向该方法传递值数组，可以创建新行。对于带有默认值的列，这是一个潜在的问题，因为其值是自动生成的。若要对这样的列使用 ItemArray 属性，请将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 放入数组中的列的位置。有关更多信息，请参见 ItemArray 属性。 通过使用 DataRow 类的 ItemArray 属性并向该方法传递值数组，可以创建新行。对于带有默认值的列，这是一个潜在的问题，因为其值是自动生成的。若要对这样的列使用 ItemArray 属性，请将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 放入数组中的列的位置。有关更多信息，请参见 ItemArray 属性。

下面的示例创建若干具有不同数据类型的 DataColumn 对象，并为每一列设置适当的默认值。

Private Sub CreateColumns()
    Dim column As DataColumn
    Dim table As New DataTable

    column = New DataColumn
    With column
       .DataType = System.Type.GetType("System.String")
       .DefaultValue = "Address"
       .Unique = False
    End With
    table.Columns.Add(column)

    column = New DataColumn
    With column
       .DataType = System.Type.GetType("System.Int32")
       .DefaultValue = 100
    End With
    table.Columns.Add(column)

    column = New DataColumn
    With column
       .DataType = System.Type.GetType("System.DateTime")
       .DefaultValue = "1/1/2001"
    End With
    table.Columns.Add(column)

    Dim row As DataRow
    ' Add one row. Since it has default values,
    ' no need to set values yet.
    row = table.NewRow

    table.Rows.Add(row)
 End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
DataType
ItemArray
AutoIncrement
UniqueConstraint

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.Expression 属性

DataColumn
.
.
::
.
Expression 属性
DataColumn 类

获取或设置表达式，用于筛选行、计算列中的值或创建聚合列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Expression As String
    Get
    Set
public string Expression { get; set; }
public:
property String^ Expression {
    String^ get ();
    void set (String^ value);
}
member Expression : string with get, set

属性值

类型： System String
用来计算列的值，或创建聚合列的表达式。表达式的返回类型由列的 DataType 来确定。 用来计算列的值，或创建聚合列的表达式。表达式的返回类型由列的 DataType 来确定。
异常 | 条件
ArgumentException | 将 AutoIncrement 或 Unique 属性设置为 true。
FormatException | 在使用 CONVERT 函数时，表达式的计算结果为一个字符串，但该字符串不包含可以转换成类型参数的表示形式。
InvalidCastException | 在使用 CONVERT 函数时，所请求的强制转换不可能完成。有关可能的强制转换的详细信息，请参见下面一节中的 Conversion 函数。 在使用 CONVERT 函数时，所请求的强制转换不可能完成。有关可能的强制转换的详细信息，请参见下面一节中的 Conversion 函数。
ArgumentOutOfRangeException | 在使用 SUBSTRING 函数时，起始参数超出范围。 - 或 - 在使用 SUBSTRING 函数时，长度参数超出范围。
Exception | 在使用 LEN 函数或 TRIM 函数时，表达式的计算结果不是字符串。这包括计算结果为 Char 的表达式。 在使用 LEN 函数或 TRIM 函数时，表达式的计算结果不是字符串。这包括计算结果为 Char 的表达式。

Expression 属性的一个用途是创建计算出的列。例如，若要计算税值，就要将单价乘以特定地区的税率。由于各地税率不同，不可能将单一税率放在一个列中；于是便用 Expression 属性来计算这个值，如下面这一部分中的 Visual Basic 代码所示： Expression 属性的一个用途是创建计算出的列。例如，若要计算税值，就要将单价乘以特定地区的税率。由于各地税率不同，不可能将单一税率放在一个列中；于是便用 Expression 属性来计算这个值，如下面这一部分中的 Visual Basic 代码所示： Expression 属性的一个用途是创建计算出的列。例如，若要计算税值，就要将单价乘以特定地区的税率。由于各地税率不同，不可能将单一税率放在一个列中；于是便用 Expression 属性来计算这个值，如下面这一部分中的 Visual Basic 代码所示：

DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"

第二个用途是创建聚合列。类似于计算出的值，聚合基于 DataTable 中的整个行集执行操作。一个简单的示例就是计算该集中返回的行数。这便是您将用来计算特定销售人员所完成的交易数的方法，如下面的 Visual Basic 代码所示： 第二个用途是创建聚合列。类似于计算出的值，聚合基于 DataTable 中的整个行集执行操作。一个简单的示例就是计算该集中返回的行数。这便是您将用来计算特定销售人员所完成的交易数的方法，如下面的 Visual Basic 代码所示： 第二个用途是创建聚合列。类似于计算出的值，聚合基于 DataTable 中的整个行集执行操作。一个简单的示例就是计算该集中返回的行数。这便是您将用来计算特定销售人员所完成的交易数的方法，如下面的 Visual Basic 代码所示： 第二个用途是创建聚合列。类似于计算出的值，聚合基于 DataTable 中的整个行集执行操作。一个简单的示例就是计算该集中返回的行数。这便是您将用来计算特定销售人员所完成的交易数的方法，如下面的 Visual Basic 代码所示：

 DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"

表达式语法

在创建表达式时，使用 ColumnName 属性来引用列。例如，如果一个列的 ColumnName 是“UnitPrice”，而另一个是“Quantity”，则表达式将是： 在创建表达式时，使用 ColumnName 属性来引用列。例如，如果一个列的 ColumnName 是“UnitPrice”，而另一个是“Quantity”，则表达式将是：

"UnitPrice * Quantity"

说明 说明

如果在表达式中使用了某个列，则该表达式就存在一个对该列的依赖项。重命名或移除依赖列时不会引发异常。当访问缺少了依赖项的表达式列时，将引发异常。 如果在表达式中使用了某个列，则该表达式就存在一个对该列的依赖项。重命名或移除依赖列时不会引发异常。当访问缺少了依赖项的表达式列时，将引发异常。 如果在表达式中使用了某个列，则该表达式就存在一个对该列的依赖项。重命名或移除依赖列时不会引发异常。当访问缺少了依赖项的表达式列时，将引发异常。

在为筛选器创建表达式时，用单引号将字符串括起来：

"LastName = 'Jones'"

如果列名称包含任何非字母数字字符、以数字开头或匹配（不分大小写）以下任意的保留字，则它需要特殊处理，如下面的段落中所述。

与

之间

子级

False

隶属

Is

Like

Not

Null

Or

父级

True

如果列名称满足上述条件之一，则它必须被包括在方括号中或在“`”（重音符）引号中。例如，若要在表达式中使用名为“Column#”的列，应写成“[Column#]”： 如果列名称满足上述条件之一，则它必须被包括在方括号中或在“`”（重音符）引号中。例如，若要在表达式中使用名为“Column#”的列，应写成“[Column#]”：

Total * [Column#]

或 "`列号`"：

Total * `Column#`

如果列名称括在方括号中，则必须通过在所有“]”和“\”字符（不是任何其他字符）前添加反斜杠（“\”）字符来跳过这些字符。如果列名称括在重音字符中，则它不能包含任何重音字符。例如，名为“Column[]\”的列应写成： 如果列名称括在方括号中，则必须通过在所有“]”和“\”字符（不是任何其他字符）前添加反斜杠（“\”）字符来跳过这些字符。如果列名称括在重音字符中，则它不能包含任何重音字符。例如，名为“Column[]\”的列应写成： 如果列名称括在方括号中，则必须通过在所有“]”和“\”字符（不是任何其他字符）前添加反斜杠（“\”）字符来跳过这些字符。如果列名称括在重音字符中，则它不能包含任何重音字符。例如，名为“Column[]\”的列应写成：

Total * [Column[\]\\]

或

Total * `Column[]\`

用户定义的值

用户定义的值可以用在将与列值进行比较的表达式内。应将字符串值括在单引号中（字符串值中的每个单引号字符必须由前将其添加与另一单引号字符转义）。日期值应用井号 (#) 或单引号 (') 括起来，具体取决于数据提供程序。对于数值，允许使用小数和科学记数法。例如： 用户定义的值可以用在将与列值进行比较的表达式内。应将字符串值括在单引号中（字符串值中的每个单引号字符必须由前将其添加与另一单引号字符转义）。日期值应用井号 (#) 或单引号 (') 括起来，具体取决于数据提供程序。对于数值，允许使用小数和科学记数法。例如： 用户定义的值可以用在将与列值进行比较的表达式内。应将字符串值括在单引号中（字符串值中的每个单引号字符必须由前将其添加与另一单引号字符转义）。日期值应用井号 (#) 或单引号 (') 括起来，具体取决于数据提供程序。对于数值，允许使用小数和科学记数法。例如： 用户定义的值可以用在将与列值进行比较的表达式内。应将字符串值括在单引号中（字符串值中的每个单引号字符必须由前将其添加与另一单引号字符转义）。日期值应用井号 (#) 或单引号 (') 括起来，具体取决于数据提供程序。对于数值，允许使用小数和科学记数法。例如： 用户定义的值可以用在将与列值进行比较的表达式内。应将字符串值括在单引号中（字符串值中的每个单引号字符必须由前将其添加与另一单引号字符转义）。日期值应用井号 (#) 或单引号 (') 括起来，具体取决于数据提供程序。对于数值，允许使用小数和科学记数法。例如：

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/82#"

对于包含枚举值的列，将值强制转换为整数数据类型。例如： 对于包含枚举值的列，将值强制转换为整数数据类型。例如：

"EnumColumn = 5"

正在分析文本表达式

所有文本表达式必须采用固定的区域设置来表示。当 DataSet 分析并转换文本表达式时，它始终使用固定区域性，而不是当前区域性。 所有文本表达式必须采用固定的区域设置来表示。当 DataSet 分析并转换文本表达式时，它始终使用固定区域性，而不是当前区域性。

值用单引号引起来时，字符串文字被标识。例如： 值用单引号引起来时，字符串文字被标识。例如：

'John'

Boolean 文本是 true 和 false；它们未在表达式中引用。

将 Integer 文本 [+-]?[0-9]+ 视为 System.Int32、System.Int64 或 System.Double。根据数量的大小，System.Double 可以丢失精度。例如，如果文本中的号码是 2147483650，DataSet 将首先尝试将数字解析为一个 Int32。因为数值太大，所有这不会成功。在这种情况下，DataSet 将把数字分析称一个 Int64，这种分析将会成功。如果文本是一个大于 Int64 最大值的数，则 DataSet 将使用 Double 分析文本。 将 Integer 文本 [+-]?[0-9]+ 视为 System.Int32、System.Int64 或 System.Double。根据数量的大小，System.Double 可以丢失精度。例如，如果文本中的号码是 2147483650，DataSet 将首先尝试将数字解析为一个 Int32。因为数值太大，所有这不会成功。在这种情况下，DataSet 将把数字分析称一个 Int64，这种分析将会成功。如果文本是一个大于 Int64 最大值的数，则 DataSet 将使用 Double 分析文本。 将 Integer 文本 [+-]?[0-9]+ 视为 System.Int32、System.Int64 或 System.Double。根据数量的大小，System.Double 可以丢失精度。例如，如果文本中的号码是 2147483650，DataSet 将首先尝试将数字解析为一个 Int32。因为数值太大，所有这不会成功。在这种情况下，DataSet 将把数字分析称一个 Int64，这种分析将会成功。如果文本是一个大于 Int64 最大值的数，则 DataSet 将使用 Double 分析文本。 将 Integer 文本 [+-]?[0-9]+ 视为 System.Int32、System.Int64 或 System.Double。根据数量的大小，System.Double 可以丢失精度。例如，如果文本中的号码是 2147483650，DataSet 将首先尝试将数字解析为一个 Int32。因为数值太大，所有这不会成功。在这种情况下，DataSet 将把数字分析称一个 Int64，这种分析将会成功。如果文本是一个大于 Int64 最大值的数，则 DataSet 将使用 Double 分析文本。 将 Integer 文本 [+-]?[0-9]+ 视为 System.Int32、System.Int64 或 System.Double。根据数量的大小，System.Double 可以丢失精度。例如，如果文本中的号码是 2147483650，DataSet 将首先尝试将数字解析为一个 Int32。因为数值太大，所有这不会成功。在这种情况下，DataSet 将把数字分析称一个 Int64，这种分析将会成功。如果文本是一个大于 Int64 最大值的数，则 DataSet 将使用 Double 分析文本。 将 Integer 文本 [+-]?[0-9]+ 视为 System.Int32、System.Int64 或 System.Double。根据数量的大小，System.Double 可以丢失精度。例如，如果文本中的号码是 2147483650，DataSet 将首先尝试将数字解析为一个 Int32。因为数值太大，所有这不会成功。在这种情况下，DataSet 将把数字分析称一个 Int64，这种分析将会成功。如果文本是一个大于 Int64 最大值的数，则 DataSet 将使用 Double 分析文本。

使用科学记数法的真实文本（如 4.42372E-30）使用 System.Double 进行分析。

不使用科学记数法但使用小数点的真实文本将被视为 System.Decimal。如果数量超过了 System.Decimal 支持的最大值或最小值，则它被分析为 System.Double。例如： 不使用科学记数法但使用小数点的真实文本将被视为 System.Decimal。如果数量超过了 System.Decimal 支持的最大值或最小值，则它被分析为 System.Double。例如： 不使用科学记数法但使用小数点的真实文本将被视为 System.Decimal。如果数量超过了 System.Decimal 支持的最大值或最小值，则它被分析为 System.Double。例如：

142526.144524 将转换为 Decimal。

345262.78036719560925667 将被视为 Double。

运算符

使用布尔值 AND、OR 和 NOT 运算符时允许串联。可以使用括号来组合子句和强制优先级。AND 运算符优先于其他运算符。例如： 使用布尔值 AND、OR 和 NOT 运算符时允许串联。可以使用括号来组合子句和强制优先级。AND 运算符优先于其他运算符。例如： 使用布尔值 AND、OR 和 NOT 运算符时允许串联。可以使用括号来组合子句和强制优先级。AND 运算符优先于其他运算符。例如： 使用布尔值 AND、OR 和 NOT 运算符时允许串联。可以使用括号来组合子句和强制优先级。AND 运算符优先于其他运算符。例如：

(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

在创建比较表达式时，允许使用下列运算符：

<

>

<=

>=

<>

=

IN

LIKE

在表达式中还支持下列算术运算符：

“+”（加）

-（减号）

*（乘号）

/（除号）

%（模数）

字符串运算符

若要连接字符串，请使用 + 字符。DataSet 类的 CaseSensitive 属性的值确定字符串比较是否区分大小写。但是，可以用 DataTable 类的 CaseSensitive 属性重写该值。 若要连接字符串，请使用 + 字符。DataSet 类的 CaseSensitive 属性的值确定字符串比较是否区分大小写。但是，可以用 DataTable 类的 CaseSensitive 属性重写该值。 若要连接字符串，请使用 + 字符。DataSet 类的 CaseSensitive 属性的值确定字符串比较是否区分大小写。但是，可以用 DataTable 类的 CaseSensitive 属性重写该值。

通配符

在 LIKE 比较中，* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %，那么这些字符应包含在中括号（[]）中。如果子句中有括号，则每个括号字符都应包括在括号中（例如 [[] 或 []]）。在模式的开头和结尾，或者在模式的结尾，或在模式的开头，都允许使用通配符。例如： 在 LIKE 比较中，* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %，那么这些字符应包含在中括号（[]）中。如果子句中有括号，则每个括号字符都应包括在括号中（例如 [[] 或 []]）。在模式的开头和结尾，或者在模式的结尾，或在模式的开头，都允许使用通配符。例如： 在 LIKE 比较中，* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %，那么这些字符应包含在中括号（[]）中。如果子句中有括号，则每个括号字符都应包括在括号中（例如 [[] 或 []]）。在模式的开头和结尾，或者在模式的结尾，或在模式的开头，都允许使用通配符。例如： 在 LIKE 比较中，* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %，那么这些字符应包含在中括号（[]）中。如果子句中有括号，则每个括号字符都应包括在括号中（例如 [[] 或 []]）。在模式的开头和结尾，或者在模式的结尾，或在模式的开头，都允许使用通配符。例如： 在 LIKE 比较中，* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %，那么这些字符应包含在中括号（[]）中。如果子句中有括号，则每个括号字符都应包括在括号中（例如 [[] 或 []]）。在模式的开头和结尾，或者在模式的结尾，或在模式的开头，都允许使用通配符。例如：

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

在字符串的中间不允许使用通配符。例如，不允许 'te*xt'。 在字符串的中间不允许使用通配符。例如，不允许 'te*xt'。

父/子关系引用

通过在列名称前面加 Parent，就可以在表达式中引用父表。例如，Parent.Price 引用父表的名为 Price 的列。 通过在列名称前面加 Parent，就可以在表达式中引用父表。例如，Parent.Price 引用父表的名为 Price 的列。

当子行具有多个父行时，请使用父 (RelationName).ColumnName。例如，Parent(RelationName).Price 通过关系引用父级表中名为 Price 的列。 当子行具有多个父行时，请使用父 (RelationName).ColumnName。例如，Parent(RelationName).Price 通过关系引用父级表中名为 Price 的列。

通过在列名称前面加一个 Child，就可以在表达式中引用子表中的列。但是，因为子关系可以返回多行，所以必须在聚合函数中包括对子列的引用。例如，Sum(Child.Price) 将返回子表中名为 Price 的列的总和。
通过在列名称前面加一个 Child，就可以在表达式中引用子表中的列。但是，因为子关系可以返回多行，所以必须在聚合函数中包括对子列的引用。例如，Sum(Child.Price) 将返回子表中名为 Price 的列的总和。
通过在列名称前面加一个 Child，就可以在表达式中引用子表中的列。但是，因为子关系可以返回多行，所以必须在聚合函数中包括对子列的引用。例如，Sum(Child.Price) 将返回子表中名为 Price 的列的总和。

如果某个表有多个子表，则语法是：Child(RelationName)。例如，如果某个表有两个子表，它们的名称分别为 Customers 和 Orders，并且 DataRelation 对象被命名为 Customers2Orders，则引用将为： 如果某个表有多个子表，则语法是：Child(RelationName)。例如，如果某个表有两个子表，它们的名称分别为 Customers 和 Orders，并且 DataRelation 对象被命名为 Customers2Orders，则引用将为：

Avg(Child(Customers2Orders).Quantity)

聚合

支持下列聚合类型：

Sum（求和）

Avg（平均）

Min（最小值）

Max（最大值）

Count（计数）

StDev（统计标准偏差）

Var（统计方差）。

聚合通常沿着关系执行。通过使用上面列出的函数之一和上面“父/子关系引用”中详述的子表列，来创建聚合表达式。例如： 聚合通常沿着关系执行。通过使用上面列出的函数之一和上面“父/子关系引用”中详述的子表列，来创建聚合表达式。例如： 聚合通常沿着关系执行。通过使用上面列出的函数之一和上面“父/子关系引用”中详述的子表列，来创建聚合表达式。例如：

Avg(Child.Price)

Avg(Child(Orders2Details).Price)

聚合也可以在单个表上执行。例如，若要为名为“Price”的列中的数字创建汇总，就用： 聚合也可以在单个表上执行。例如，若要为名为“Price”的列中的数字创建汇总，就用：

Sum(Price)

说明 说明

如果使用一个表来创建聚合，将没有组合功能。相反，所有行都在列中显示相同的值。 如果使用一个表来创建聚合，将没有组合功能。相反，所有行都在列中显示相同的值。

如果表没有行，聚合函数将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

数据类型总是可以通过检查列的 DataType 属性来确定。还可以使用 Convert 函数来转换数据类型，如下面这一部分所示。 数据类型总是可以通过检查列的 DataType 属性来确定。还可以使用 Convert 函数来转换数据类型，如下面这一部分所示。

函数

还支持下列函数：

CONVERT

说明 | 将特定表达式转换为指定的 .NET Framework 类型。
语法 | Convert(expression, type)
参数 | expression — 要转换的表达式。 type — 值将转换成的 .NET Framework 类型。

例如：myDataColumn.Expression="Convert(total, 'System.Int32')"

所有转换都是有效的，只有下列情况例外：Boolean 只能与 Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、String 和它本身相互转换。Char 只能被强制在 Int32、UInt32、String 和其本身之间。DateTime 只能被强制在 String 和其本身之间。TimeSpan 只能被强制在 String 和其本身之间。 所有转换都是有效的，只有下列情况例外：Boolean 只能与 Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、String 和它本身相互转换。Char 只能被强制在 Int32、UInt32、String 和其本身之间。DateTime 只能被强制在 String 和其本身之间。TimeSpan 只能被强制在 String 和其本身之间。 所有转换都是有效的，只有下列情况例外：Boolean 只能与 Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、String 和它本身相互转换。Char 只能被强制在 Int32、UInt32、String 和其本身之间。DateTime 只能被强制在 String 和其本身之间。TimeSpan 只能被强制在 String 和其本身之间。 所有转换都是有效的，只有下列情况例外：Boolean 只能与 Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、String 和它本身相互转换。Char 只能被强制在 Int32、UInt32、String 和其本身之间。DateTime 只能被强制在 String 和其本身之间。TimeSpan 只能被强制在 String 和其本身之间。

LEN

说明 | 获取字符串的长度
语法 | LEN(expression)
参数 | expression — 要计算的字符串。

例如：myDataColumn.Expression="Len(ItemName)"

ISNULL

说明 | 检查表达式并返回已检查的表达式或返回替换值。
语法 | ISNULL(expression, replacementvalue)
参数 | expression — 要检查的表达式。 replacementvalue — 如果表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回 replacementvalue。

例如：myDataColumn.Expression="IsNull(price, -1)"

IIF

说明 | 根据逻辑表达式的结果，获取两个值之一。
语法 | IIF(expr, truepart, falsepart)
参数 | expr — 要计算的表达式。 truepart — 表达式为真时返回的值。 falsepart — 表达式为假时返回的值。

例如：myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

TRIM

说明 | 移除所有前导的和后缀的空格字符，如 \r、\n、\t、' '
语法 | TRIM(expression)
参数 | expression — 要剪裁的表达式。

SUBSTRING

说明 | 获取从字符串中的指定点开始，具有指定长度的子字符串。
语法 | SUBSTRING(expression, start, length)
参数 | expression — 子字符串的源字符串。 start — 指定子字符串开始位置的整数。 length — 指定子字符串长度的整数。

例如：myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

说明 说明

可以向 Expression 属性分配一个空值或空字符串，来重置该属性。如果为表达式列设置了一个默认值，则在重置 Expression 属性之后，这个默认值就赋给所有以前填充过的行。 可以向 Expression 属性分配一个空值或空字符串，来重置该属性。如果为表达式列设置了一个默认值，则在重置 Expression 属性之后，这个默认值就赋给所有以前填充过的行。

下面的示例在 DataTable 中创建三个列。第二和第三列包含表达式；第二列使用可变税率计算税款，第三列将计算的结果添加到第一列的值。结果表显示在 DataGrid 控件中。 下面的示例在 DataTable 中创建三个列。第二和第三列包含表达式；第二列使用可变税率计算税款，第三列将计算的结果添加到第一列的值。结果表显示在 DataGrid 控件中。 下面的示例在 DataTable 中创建三个列。第二和第三列包含表达式；第二列使用可变税率计算税款，第三列将计算的结果添加到第一列的值。结果表显示在 DataGrid 控件中。

Private Sub CalcColumns()
     Dim rate As Single = .0862
     dim table as DataTable = New DataTable

     ' Create the first column.
     Dim priceColumn As DataColumn = New DataColumn
     With priceColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "price"
         .DefaultValue = 50
     End With

     ' Create the second, calculated, column.
     Dim taxColumn As DataColumn = New DataColumn
     With taxColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "tax"
         .Expression = "price * 0.0862"
     End With

    ' Create third column
     Dim totalColumn As DataColumn = New DataColumn
     With totalColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "total"
         .Expression = "price + tax"
     End With

     ' Add columns to DataTable
     With table.Columns
         .Add(priceColumn)
         .Add(taxColumn)
         .Add(totalColumn)
     End With

     Dim row As DataRow= table.NewRow
     table.Rows.Add(row)
     Dim view As New DataView
     view.Table = table
     DataGrid1.DataSource = view
 End Sub

private void CalcColumns()
{
    DataTable table = new DataTable ();

    // Create the first column.
    DataColumn priceColumn = new DataColumn();
    priceColumn.DataType = System.Type.GetType("System.Decimal");
    priceColumn.ColumnName = "price";
    priceColumn.DefaultValue = 50;

    // Create the second, calculated, column.
    DataColumn taxColumn = new DataColumn();
    taxColumn.DataType = System.Type.GetType("System.Decimal");
    taxColumn.ColumnName = "tax";
    taxColumn.Expression = "price * 0.0862";

    // Create third column.
    DataColumn totalColumn = new DataColumn();
    totalColumn.DataType = System.Type.GetType("System.Decimal");
    totalColumn.ColumnName = "total";
    totalColumn.Expression = "price + tax";

    // Add columns to DataTable.
    table.Columns.Add(priceColumn);
    table.Columns.Add(taxColumn);
    table.Columns.Add(totalColumn);

    DataRow row = table.NewRow();
    table.Rows.Add(row);
    DataView view = new DataView(table);
    dataGrid1.DataSource = view;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.ExtendedProperties 属性

DataColumn
.
.
::
.
ExtendedProperties 属性
DataColumn 类

获取与 DataColumn 相关的自定义用户信息的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property ExtendedProperties As PropertyCollection
    Get
[BrowsableAttribute(false)]
public PropertyCollection ExtendedProperties { get; }
[BrowsableAttribute(false)]
public:
property PropertyCollection^ ExtendedProperties {
    PropertyCollection^ get ();
}
[<BrowsableAttribute(false)>]
member ExtendedProperties : PropertyCollection

属性值

类型： System.Data PropertyCollection
自定义信息的 PropertyCollection。

ExtendedProperties 属性使您可以使用该对象存储自定义信息。例如，可以存储一个应刷新数据的时间。 ExtendedProperties 属性使您可以使用该对象存储自定义信息。例如，可以存储一个应刷新数据的时间。

扩展属性必须是 String 类型。当以 XML 的形式写 DataColumn 时，不保持非 String 类型的属性。 扩展属性必须是 String 类型。当以 XML 的形式写 DataColumn 时，不保持非 String 类型的属性。

下面的示例将自定义属性添加到由 ExtendedProperties 属性返回的 PropertyCollection 中。第二个示例检索该自定义属性。 下面的示例将自定义属性添加到由 ExtendedProperties 属性返回的 PropertyCollection 中。第二个示例检索该自定义属性。

 Private Sub SetProperty(column As DataColumn)
     column.ExtendedProperties.Add("TimeStamp", DateTime.Now)
 End Sub

 Private Sub GetProperty(column As DataColumn)
     Console.WriteLine(column.ExtendedProperties("TimeStamp").ToString())
End Sub

private void SetProperty(DataColumn column)
{
    column.ExtendedProperties.Add("TimeStamp", DateTime.Now);
}

private void GetProperty(DataColumn column)
{
    Console.WriteLine(column.ExtendedProperties["TimeStamp"].ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
PropertyCollection

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.MaxLength 属性

DataColumn
.
.
::
.
MaxLength 属性
DataColumn 类

获取或设置文本列的最大长度。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property MaxLength As Integer
    Get
    Set
public int MaxLength { get; set; }
public:
property int MaxLength {
    int get ();
    void set (int value);
}
member MaxLength : int with get, set

属性值

类型： System Int32
列的最大长度（以字符数表示）。如果列没有最大长度，该值为 -1（默认值）。 列的最大长度（以字符数表示）。如果列没有最大长度，该值为 -1（默认值）。

对于非文本列，则忽略 MaxLength 属性。如果将 MaxLength 分配至非字符串列，则会引发 ArgumentException 异常。 对于非文本列，则忽略 MaxLength 属性。如果将 MaxLength 分配至非字符串列，则会引发 ArgumentException 异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.Namespace 属性

DataColumn
.
.
::
.
Namespace 属性
DataColumn 类

获取或设置 DataColumn 的命名空间。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Namespace As String
    Get
    Set
public string Namespace { get; set; }
public:
property String^ Namespace {
    String^ get ();
    void set (String^ value);
}
member Namespace : string with get, set

属性值

类型： System String
DataColumn 的命名空间。
异常 | 条件
ArgumentException | 该命名空间已有数据。

在使用 ReadXml、WriteXml、ReadXmlSchema 或 WriteXmlSchema 方法读取 XML 文档和将 XML 文档写入 DataSet 中的 DataTable 时，使用 Namespace 属性。

当读入 DataSet 时，XML 文档的命名空间用于确定 XML 特性和元素的范围。例如，DataSet 包含从命名空间为“myCompany”的文档中读取的架构，并尝试从命名空间为“theirCompany”的文档中读取数据（用 ReadXml 方法）。将忽略不与现有架构对应的任何数据。 当读入 DataSet 时，XML 文档的命名空间用于确定 XML 特性和元素的范围。例如，DataSet 包含从命名空间为“myCompany”的文档中读取的架构，并尝试从命名空间为“theirCompany”的文档中读取数据（用 ReadXml 方法）。将忽略不与现有架构对应的任何数据。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.Ordinal 属性

DataColumn
.
.
::
.
Ordinal 属性
DataColumn 类

获取列在 DataColumnCollection 集合中的位置。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property Ordinal As Integer
    Get
[BrowsableAttribute(false)]
public int Ordinal { get; }
[BrowsableAttribute(false)]
public:
property int Ordinal {
    int get ();
}
[<BrowsableAttribute(false)>]
member Ordinal : int

属性值

类型： System Int32
列的位置。如果列不是集合的成员，获取 -1。 列的位置。如果列不是集合的成员，获取 -1。

下面的示例返回列名、列的序号和数据类型。

Private Sub PrintColumnDetails(ByVal column As DataColumn)
    ' Print the Ordinal, ColumnName, and
    ' DataType of the column.
    Console.WriteLine(column.Ordinal)
    Console.WriteLine(column.ColumnName)
    Console.WriteLine(column.DataType)
End Sub

private void PrintColumnDetails(DataColumn column)
{
    // Print the Ordinal, ColumnName, and
    // DataType of the column.
    Console.WriteLine(column.Ordinal);
    Console.WriteLine(column.ColumnName);
    Console.WriteLine(column.DataType);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.Prefix 属性

DataColumn
.
.
::
.
Prefix 属性
DataColumn 类

获取或设置一个 XML 前缀，该前缀是 DataTable 的命名空间的别名。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Prefix As String
    Get
    Set
public string Prefix { get; set; }
public:
property String^ Prefix {
    String^ get ();
    void set (String^ value);
}
member Prefix : string with get, set

属性值

类型： System String
DataTable 命名空间的 XML 前缀。

在整个 XML 文档中使用 Prefix 来标识属于 DataSet 对象的命名空间的元素（命名空间由 Namespace 属性设置）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.ReadOnly 属性

DataColumn
.
.
::
.
ReadOnly 属性
DataColumn 类

获取或设置一个值，该值指示一旦向表中添加了行，列是否还允许更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property ReadOnly As Boolean
    Get
    Set
public bool ReadOnly { get; set; }
public:
property bool ReadOnly {
    bool get ();
    void set (bool value);
}
member ReadOnly : bool with get, set

属性值

类型： System Boolean
如果列为只读，则为 true；否则为 false。默认为 false。 如果列为只读，则为 true；否则为 false。默认为 false。
异常 | 条件
ArgumentException | 对于计算所得的列，此属性设置为 false。

下面的示例创建 DataColumn 并将其 ReadOnly 属性设置为 true。

Private Sub AddColumn(ByVal table As DataTable)
    ' Add a DataColumn to the collection and set its properties.
    ' The constructor sets the ColumnName of the column.
    Dim column As DataColumn = table.Columns.Add("Total")
    column.DataType = System.Type.GetType("System.Decimal")
    column.ReadOnly = True
    column.Expression = "UnitPrice * Quantity"
    column.Unique = False
End Sub

private void AddColumn(DataTable table)
{
    // Add a DataColumn to the collection and set its properties.
    // The constructor sets the ColumnName of the column.
    DataColumn column = table.Columns.Add("Total");
    column.DataType = System.Type.GetType("System.Decimal");
    column.ReadOnly = true;
    column.Expression = "UnitPrice * Quantity";
    column.Unique = false;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
Unique
AutoIncrement

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.Table 属性

DataColumn
.
.
::
.
Table 属性
DataColumn 类

获取列所属的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property Table As DataTable
    Get
[BrowsableAttribute(false)]
public DataTable Table { get; }
[BrowsableAttribute(false)]
public:
property DataTable^ Table {
    DataTable^ get ();
}
[<BrowsableAttribute(false)>]
member Table : DataTable

属性值

类型： System.Data DataTable
DataColumn 所属的 DataTable。

下面的示例通过其 Table 属性返回 DataColumn 的父表。

Private Sub GetTable(ByVal column As DataColumn)
    ' Get the Table of the column.
    Dim table As DataTable = column.Table
    Console.WriteLine("columns", table.Columns.Count)
    Console.WriteLine("rows", table.Rows.Count)
End Sub

private void GetTable(DataColumn column)
{
    // Get the Table of the column.
    DataTable table = column.Table;
    Console.WriteLine("columns count: " + table.Columns.Count);
    Console.WriteLine("rows count: " + table.Rows.Count);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
DataTable

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn ..::.Unique 属性

DataColumn
.
.
::
.
Unique 属性
DataColumn 类

获取或设置一个值，该值指示列的每一行中的值是否必须是唯一的。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Unique As Boolean
    Get
    Set
public bool Unique { get; set; }
public:
property bool Unique {
    bool get ();
    void set (bool value);
}
member Unique : bool with get, set

属性值

类型： System Boolean
如果值必须是唯一的，则为 true；否则为 false。默认为 false。 如果值必须是唯一的，则为 true；否则为 false。默认为 false。
异常 | 条件
ArgumentException | 列是计算出的列。

一旦此属性从“false”更改为“true”，就将为此列创建唯一约束，以确保值是唯一的。

下面的示例创建新的 DataColumn，设置它的属性，并将其添加到表的列集合中。

Private Sub AddColumn(table As DataTable)
    ' Add a DataColumn to the collection and set its properties.
    ' The constructor sets the ColumnName of the column.
    Dim column As DataColumn = New DataColumn("Total")
    column.DataType = System.Type.GetType("System.Decimal")
    column.ReadOnly = True
    column.Expression = "UnitPrice * Quantity"
    column.Unique = False
End Sub

private void AddColumn(DataTable table)
{
    // Add a DataColumn to the collection and set its properties.
    // The constructor sets the ColumnName of the column.
    DataColumn column = new DataColumn("Total");
    column.DataType = System.Type.GetType("System.Decimal");
    column.ReadOnly = true;
    column.Expression = "UnitPrice * Quantity";
    column.Unique = false;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumn 类
DataColumn 成员
System.Data 命名空间
AllowDBNull
UniqueConstraint
Constraints

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataColumn 事件

DataColumn 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumn 类

DataColumn 类型公开以下成员。

名称 说明
页首

参考

DataColumn 类
System.Data 命名空间


DataColumnChangeEventArgs 类

DataColumnChangeEventArgs 类
成员

为 ColumnChanging 事件提供数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataColumnChangeEventArgs _
    Inherits EventArgs
public class DataColumnChangeEventArgs : EventArgs
public ref class DataColumnChangeEventArgs : public EventArgs
type DataColumnChangeEventArgs =
    class
        inherit EventArgs
    end

在对 DataTable 中的列的值进行更改时发生 ColumnChanging 事件。

System.Data System.Data..::.DataColumnChangeEventArgsDataColumnChangeEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnChangeEventArgs 成员
System.Data 命名空间
ColumnChanging
DataColumn
DataColumnChangeEventHandler
DataTable


DataColumnChangeEventArgs 成员

DataColumnChangeEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnChangeEventArgs 类

为 ColumnChanging 事件提供数据。

DataColumnChangeEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataColumnChangeEventArgs 类
System.Data 命名空间


DataColumnChangeEventArgs 构造函数

DataColumnChangeEventArgs 构造函数
DataColumnChangeEventArgs 类

初始化 DataColumnChangeEventArgs 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    row As DataRow, _
    column As DataColumn, _
    value As Object _
)
public DataColumnChangeEventArgs(
    DataRow row,
    DataColumn column,
    Object value
)
public:
DataColumnChangeEventArgs(
    DataRow^ row,
    DataColumn^ column,
    Object^ value
)
new :
        row:DataRow *
        column:DataColumn *
        value:Object -> DataColumnChangeEventArgs

参数

row
类型： System.Data DataRow
带有可变值的列的 DataRow。
column
类型： System.Data DataColumn
带有可变值的 DataColumn。
value
类型： System Object
新值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnChangeEventArgs 类
DataColumnChangeEventArgs 成员
System.Data 命名空间
ColumnChanging
DataColumn
DataColumnChangeEventHandler
DataTable


DataColumnChangeEventArgs 方法

DataColumnChangeEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnChangeEventArgs 类

DataColumnChangeEventArgs 类型公开以下成员。

名称 说明
页首

参考

DataColumnChangeEventArgs 类
System.Data 命名空间


DataColumnChangeEventArgs 属性

DataColumnChangeEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnChangeEventArgs 类

DataColumnChangeEventArgs 类型公开以下成员。

名称 说明
页首

参考

DataColumnChangeEventArgs 类
System.Data 命名空间


DataColumnChangeEventArgs ..::.Column 属性

DataColumnChangeEventArgs
.
.
::
.
Column 属性
DataColumnChangeEventArgs 类

获取带有可变值的 DataColumn。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Column As DataColumn
    Get
public DataColumn Column { get; }
public:
property DataColumn^ Column {
    DataColumn^ get ();
}
member Column : DataColumn

属性值

类型： System.Data DataColumn
带有可变值的 DataColumn。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnChangeEventArgs 类
DataColumnChangeEventArgs 成员
System.Data 命名空间
ColumnChanging
DataColumn
DataColumnChangeEventHandler
DataTable


DataColumnChangeEventArgs ..::.ProposedValue 属性

DataColumnChangeEventArgs
.
.
::
.
ProposedValue 属性
DataColumnChangeEventArgs 类

获取或设置为列建议的新值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property ProposedValue As Object
    Get
    Set
public Object ProposedValue { get; set; }
public:
property Object^ ProposedValue {
    Object^ get ();
    void set (Object^ value);
}
member ProposedValue : Object with get, set

属性值

类型： System Object
建议的值，类型为 Object。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnChangeEventArgs 类
DataColumnChangeEventArgs 成员
System.Data 命名空间
ColumnChanging
DataColumn
DataColumnChangeEventHandler
DataTable


DataColumnChangeEventArgs ..::.Row 属性

DataColumnChangeEventArgs
.
.
::
.
Row 属性
DataColumnChangeEventArgs 类

获取带有可变值的列的 DataRow。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Row As DataRow
    Get
public DataRow Row { get; }
public:
property DataRow^ Row {
    DataRow^ get ();
}
member Row : DataRow

属性值

类型： System.Data DataRow
带有可变值的列的 DataRow。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnChangeEventArgs 类
DataColumnChangeEventArgs 成员
System.Data 命名空间
RowChanging
DataRow
DataRowChangeEventHandler
DataTable


DataColumnChangeEventHandler 委托

DataColumnChangeEventHandler 委托

表示将处理 ColumnChanging 事件的方法。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Delegate Sub DataColumnChangeEventHandler ( _
    sender As Object, _
    e As DataColumnChangeEventArgs _
)
public delegate void DataColumnChangeEventHandler(
    Object sender,
    DataColumnChangeEventArgs e
)
public delegate void DataColumnChangeEventHandler(
    Object^ sender,
    DataColumnChangeEventArgs^ e
)
type DataColumnChangeEventHandler =
    delegate of
        sender:Object *
        e:DataColumnChangeEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.Data DataColumnChangeEventArgs
包含事件数据的 DataColumnChangeEventArgs。

当创建 DataColumnChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataColumnChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataColumnChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataColumnChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。

说明 说明

事件处理程序的声明必须与 DataColumnChangeEventHandler 委托声明具有相同的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间
DataColumn


DataColumnCollection 类

DataColumnCollection 类
成员

表示 DataTable 的 DataColumn 对象的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DataColumnCollection _
    Inherits InternalDataCollectionBase
public sealed class DataColumnCollection : InternalDataCollectionBase
public ref class DataColumnCollection sealed : public InternalDataCollectionBase
[<SealedAttribute>]
type DataColumnCollection =
    class
        inherit InternalDataCollectionBase
    end

DataColumnCollection 定义 DataTable 的架构，并确定每个 DataColumn 可以包含什么种类的数据。可以通过 DataTable 对象的 Columns 属性访问 DataColumnCollection。 DataColumnCollection 定义 DataTable 的架构，并确定每个 DataColumn 可以包含什么种类的数据。可以通过 DataTable 对象的 Columns 属性访问 DataColumnCollection。

DataColumnCollection 使用 Add 和 Remove 方法插入和删除 DataColumn 对象。使用 Count 属性确定集合中有多少 DataColumn 对象。使用 Contains 方法验证集合中是否存在指定索引或列名称。 DataColumnCollection 使用 Add 和 Remove 方法插入和删除 DataColumn 对象。使用 Count 属性确定集合中有多少 DataColumn 对象。使用 Contains 方法验证集合中是否存在指定索引或列名称。 DataColumnCollection 使用 Add 和 Remove 方法插入和删除 DataColumn 对象。使用 Count 属性确定集合中有多少 DataColumn 对象。使用 Contains 方法验证集合中是否存在指定索引或列名称。

下面的示例循环访问 DataColumn 对象的集合，并打印集合中每个列的各种属性。

Private Sub PrintDataTableColumnInfo(table As DataTable)

    ' Use a DataTable object's DataColumnCollection.
    Dim columns As DataColumnCollection = table.Columns

    ' Print the ColumnName and DataType for each column.
    Dim column As DataColumn
    For Each column in columns
       Console.WriteLine(column.ColumnName)
       Console.WriteLine(column.DataType.ToString)
    Next
End Sub

private void PrintDataTableColumnInfo(DataTable table)
{
    // Use a DataTable object's DataColumnCollection.
    DataColumnCollection columns = table.Columns;

    // Print the ColumnName and DataType for each column.
    foreach(DataColumn column in columns)
    {
        Console.WriteLine(column.ColumnName);
        Console.WriteLine(column.DataType);
    }
}

System.Data System.Data..::.DataColumnCollectionDataColumnCollection

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 成员
System.Data 命名空间
Columns
DataColumn
DataTable
DataRelation
DataRow
DataSet


DataColumnCollection 成员

DataColumnCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnCollection 类

表示 DataTable 的 DataColumn 对象的集合。

DataColumnCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataColumnCollection 类
System.Data 命名空间


DataColumnCollection 方法

DataColumnCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnCollection 类

DataColumnCollection 类型公开以下成员。

名称 说明
页首

参考

DataColumnCollection 类
System.Data 命名空间


DataColumnCollection ..::.Add 方法

DataColumnCollection
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnCollection 类

创建 DataColumn 对象并将其添加到 DataColumnCollection 中。

名称 说明
页首

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间


DataColumnCollection ..::.Add 方法

DataColumnCollection
.
.
::
.
Add 方法
DataColumnCollection 类

创建 DataColumn 对象并将其添加到 DataColumnCollection 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add As DataColumn
public DataColumn Add()
public:
DataColumn^ Add()
member Add : unit -> DataColumn

返回值

类型： System.Data DataColumn
新创建的 DataColumn。

为该列给定默认名称（“Column1”、“Column2”等）。

如果通过添加或移除列成功更改集合，则会发生 CollectionChanged 事件。

下面的示例创建一个新的 DataColumn 并将其添加到 DataTable 的 DataColumnCollection 中。

Private Sub AddColumn()
    ' Get the DataColumnCollection from a table in a DataSet.
    Dim columns As DataColumnCollection = _
        DataSet1.Tables("Prices").Columns
    Dim column As DataColumn = columns.Add()

    With column
       .DataType = System.Type.GetType("System.Decimal")
       .ColumnName = "Total"
       .Expression = "UnitPrice * Quantity"
       .ReadOnly = True
       .Unique = False
    End With
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
Add 重载
System.Data 命名空间
ColumnName
Contains
DataType
Expression


DataColumnCollection ..::.Add 方法 (DataColumn)

DataColumnCollection
.
.
::
.
Add 方法 (DataColumn)
DataColumnCollection 类

创建指定的 DataColumn 对象并将其添加到 DataColumnCollection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Add ( _
    column As DataColumn _
)
public void Add(
    DataColumn column
)
public:
void Add(
    DataColumn^ column
)
member Add :
        column:DataColumn -> unit

参数

column
类型： System.Data DataColumn
要添加的 DataColumn。
异常 | 条件
ArgumentNullException | column 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 该列已经属于此集合，或者属于另一个集合。
DuplicateNameException | 集合中已存在具有指定名称的列。（该比较不区分大小写。） 集合中已存在具有指定名称的列。（该比较不区分大小写。）
InvalidExpressionException | 该表达式无效。有关如何创建表达式的更多信息，请参见 Expression 属性。 该表达式无效。有关如何创建表达式的更多信息，请参见 Expression 属性。

如果通过添加或移除列成功更改集合，则会发生 CollectionChanged 事件。

下面的示例将 DataColumn 添加到 DataColumnCollection。

Private Sub AddDataColumn()
    ' Get the DataColumnCollection from a DataTable in a DataSet.
    Dim columns As DataColumnCollection = _
        DataSet1.Tables("Orders").Columns

    Dim column As DataColumn = New DataColumn
    With column
       .DataType = System.Type.GetType("System.Decimal")
       .ColumnName = "ItemPrice"
       .Caption = "Price"
       .ReadOnly = False
       .Unique = False
       .DefaultValue = 0
    End With
    columns.Add(column)
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
Add 重载
System.Data 命名空间
ColumnName
CollectionChanged
Contains
DataType
Expression


DataColumnCollection ..::.Add 方法 (String)

DataColumnCollection
.
.
::
.
Add 方法 (String)
DataColumnCollection 类

创建一个具有指定名称的 DataColumn 对象，并将其添加到 DataColumnCollection 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    columnName As String _
) As DataColumn
public DataColumn Add(
    string columnName
)
public:
DataColumn^ Add(
    String^ columnName
)
member Add :
        columnName:string -> DataColumn

参数

columnName
类型： System String
列的名称。

返回值

类型： System.Data DataColumn
新创建的 DataColumn。
异常 | 条件
DuplicateNameException | 集合中已存在具有指定名称的列。（该比较不区分大小写。） 集合中已存在具有指定名称的列。（该比较不区分大小写。）

默认情况下，新列的 DataType 是 string。

如果为名称传入了 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则为该列指定一个默认名称（“Column1”、“Column2”等）。

使用 Contains 方法确定集合中是否存在具有建议名称的列。

如果通过添加或移除列成功更改集合，则会发生 CollectionChanged 事件。

下面的示例创建一个新的 DataColumn 并将其添加到 DataTable 的 DataColumnCollection 中。

Private Sub AddColumn()
    ' Get the DataColumnCollection from a table in a DataSet.
    Dim columns As DataColumnCollection = _
        DataSet1.Tables("Prices").Columns
    Dim column As DataColumn = columns.Add("Total")

    With column
       .DataType = System.Type.GetType("System.Decimal")
       .ReadOnly = True
       .Expression = "UnitPrice * Quantity"
       .Unique = False
    End With
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
Add 重载
System.Data 命名空间
ColumnName
Contains
DataType
Expression


DataColumnCollection ..::.Add 方法 (String, Type)

DataColumnCollection
.
.
::
.
Add 方法 (String, Type)
DataColumnCollection 类

创建一个具有指定名称和类型的 DataColumn 对象，并将其添加到 DataColumnCollection 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    columnName As String, _
    type As Type _
) As DataColumn
public DataColumn Add(
    string columnName,
    Type type
)
public:
DataColumn^ Add(
    String^ columnName,
    Type^ type
)
member Add :
        columnName:string *
        type:Type -> DataColumn

参数

columnName
类型： System String
要在创建列时使用的 ColumnName。
type
类型： System Type
新列的 DataType。

返回值

类型： System.Data DataColumn
新创建的 DataColumn。
异常 | 条件
DuplicateNameException | 集合中已存在具有指定名称的列。（该比较不区分大小写。） 集合中已存在具有指定名称的列。（该比较不区分大小写。）
InvalidExpressionException | 该表达式无效。有关如何创建表达式的更多信息，请参见 Expression 属性。 该表达式无效。有关如何创建表达式的更多信息，请参见 Expression 属性。

如果为名称传入了 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则为该列指定一个默认名称（“Column1”、“Column2”等）。

使用 Contains 方法确定集合中是否存在具有建议名称的列。

如果通过添加或移除列成功更改集合，则会发生 CollectionChanged 事件。

下面的示例创建一个新的 DataColumn 并将其添加到 DataTable 的 DataColumnCollection 中。

Private Sub AddColumn()
    Dim columns As DataColumnCollection = _
        DataSet1.Tables("Orders").Columns

    ' Add a new column and return it.
    Dim column As DataColumn = columns.Add( _
        "Total", System.Type.GetType("System.Decimal"))
    column.ReadOnly = True
    column.Unique = False
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
Add 重载
System.Data 命名空间
ColumnName
DataType
Expression


DataColumnCollection ..::.Add 方法 (String, Type, String)

DataColumnCollection
.
.
::
.
Add 方法 (String, Type, String)
DataColumnCollection 类

创建一个具有指定名称、类型和表达式的 DataColumn 对象，并将其添加到 DataColumnCollection 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    columnName As String, _
    type As Type, _
    expression As String _
) As DataColumn
public DataColumn Add(
    string columnName,
    Type type,
    string expression
)
public:
DataColumn^ Add(
    String^ columnName,
    Type^ type,
    String^ expression
)
member Add :
        columnName:string *
        type:Type *
        expression:string -> DataColumn

参数

columnName
类型： System String
要在创建列时使用的名称。
type
类型： System Type
新列的 DataType。
expression
类型： System String
要分配给 Expression 属性的表达式。

返回值

类型： System.Data DataColumn
新创建的 DataColumn。
异常 | 条件
DuplicateNameException | 集合中已存在具有指定名称的列。（该比较不区分大小写。） 集合中已存在具有指定名称的列。（该比较不区分大小写。）
InvalidExpressionException | 该表达式无效。有关如何创建表达式的更多信息，请参见 Expression 属性。 该表达式无效。有关如何创建表达式的更多信息，请参见 Expression 属性。

如果为名称传入了 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则为该列指定一个默认名称（“Column1”、“Column2”等）。

使用 Contains 方法确定集合中是否存在具有建议名称的列。

如果通过添加或移除列成功更改集合，则会发生 CollectionChanged 事件。

下面的示例创建一个新的 DataColumn 并将其添加到 DataTable 的 DataColumnCollection 中。

Private Sub AddColumn()
    ' Get the DataColumnCollection of a table in a DataSet.
    Dim columns As DataColumnCollection = _
        DataSet1.Tables("Orders").Columns

    ' Add a new column and return it.
    Dim column As DataColumn = _
        columns.Add("Total", System.Type.GetType( _
        "System.Decimal"), "Price + Tax")
    column.ReadOnly = True
    column.Unique = False
 End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
Add 重载
System.Data 命名空间
ColumnName
Contains
DataType
Expression


DataColumnCollection ..::.AddRange 方法

DataColumnCollection
.
.
::
.
AddRange 方法
DataColumnCollection 类

将指定的 DataColumn 数组的元素复制到集合末尾。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub AddRange ( _
    columns As DataColumn() _
)
public void AddRange(
    DataColumn[] columns
)
public:
void AddRange(
    array<DataColumn^>^ columns
)
member AddRange :
        columns:DataColumn[] -> unit

参数

columns
类型：
array<
System.Data DataColumn
>
[]
()
[]

要添加到集合中的 DataColumn 对象的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间


DataColumnCollection ..::.CanRemove 方法

DataColumnCollection
.
.
::
.
CanRemove 方法
DataColumnCollection 类

检查是否可从集合中移除特定列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function CanRemove ( _
    column As DataColumn _
) As Boolean
public bool CanRemove(
    DataColumn column
)
public:
bool CanRemove(
    DataColumn^ column
)
member CanRemove :
        column:DataColumn -> bool

参数

column
类型： System.Data DataColumn
集合中的 DataColumn。

返回值

类型： System Boolean
如果可以移除该列，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | column 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 该列不属于此集合。 - 或 - 该列是关系的一部分。 - 或 - 另一个列的表达式取决于该列。

CanRemove 方法在返回 true 或 false 结果之前执行一些检查。检查的内容包括：列是否存在，是否属于表，或是否涉及约束或关系。 CanRemove 方法在返回 true 或 false 结果之前执行一些检查。检查的内容包括：列是否存在，是否属于表，或是否涉及约束或关系。

在尝试从集合中移除任何列之前，请使用 CanRemove 方法。在尝试移除特定列之前，还可以使用 Contains 方法确定该列是否存在。 在尝试从集合中移除任何列之前，请使用 CanRemove 方法。在尝试移除特定列之前，还可以使用 Contains 方法确定该列是否存在。

下面的示例首先使用 Contains 方法来确定集合中是否存在特定的列。如果找到该列，则 CanRemove 方法测试是否可以移除该列。如果可以，则用 Remove 方法移除该列。 下面的示例首先使用 Contains 方法来确定集合中是否存在特定的列。如果找到该列，则 CanRemove 方法测试是否可以移除该列。如果可以，则用 Remove 方法移除该列。 下面的示例首先使用 Contains 方法来确定集合中是否存在特定的列。如果找到该列，则 CanRemove 方法测试是否可以移除该列。如果可以，则用 Remove 方法移除该列。

Private Sub RemoveColumn( _
    columnName As String, table As DataTable)

    Dim columns As DataColumnCollection = table.Columns
    If columns.Contains(columnName) Then
        If columns.CanRemove(columns(columnName)) Then
           columns.Remove(columnName)
        End If
    End If
End Sub

private void RemoveColumn(string columnName, DataTable table)
{
    DataColumnCollection columns = table.Columns;
    if (columns.Contains(columnName))
        if (columns.CanRemove(columns[columnName]))
            columns.Remove(columnName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间
Contains
Remove


DataColumnCollection ..::.Clear 方法

DataColumnCollection
.
.
::
.
Clear 方法
DataColumnCollection 类

清除集合中的所有列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Clear
public void Clear()
public:
void Clear()
member Clear : unit -> unit

如果通过添加或移除列成功更改集合，则会发生 CollectionChanged 事件。

下面的示例清除列集合。

 Private Sub ClearColumnsCollection(table As DataTable)
     Dim columns As DataColumnCollection
     ' Get the DataColumnCollection from a
     ' DataTable in a DataSet.
     columns = table.Columns
     columns.Clear()
End Sub

private void ClearColumnsCollection(DataTable table)
{
    DataColumnCollection columns;
    // Get the DataColumnCollection from a
    // DataTable in a DataSet.
    columns = table.Columns;
    columns.Clear();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间


DataColumnCollection ..::.Contains 方法

DataColumnCollection
.
.
::
.
Contains 方法
DataColumnCollection 类

检查集合是否包含具有指定名称的列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    name As String _
) As Boolean
public bool Contains(
    string name
)
public:
bool Contains(
    String^ name
)
member Contains :
        name:string -> bool

参数

name
类型： System String
要查找的列的 ColumnName。

返回值

类型： System Boolean
如果存在此名称的列，则为 true；否则为 false。

在对列执行其他操作之前，请使用 Contains 方法确认该列是否存在。当两个或两个以上的列同名，但它们的命名空间不同时，此方法返回 false。如果在将列名只与一个列匹配时存在任何多义性，则该调用不会成功。 在对列执行其他操作之前，请使用 Contains 方法确认该列是否存在。当两个或两个以上的列同名，但它们的命名空间不同时，此方法返回 false。如果在将列名只与一个列匹配时存在任何多义性，则该调用不会成功。 在对列执行其他操作之前，请使用 Contains 方法确认该列是否存在。当两个或两个以上的列同名，但它们的命名空间不同时，此方法返回 false。如果在将列名只与一个列匹配时存在任何多义性，则该调用不会成功。

下面的示例使用 Contains 方法和 CanRemove 方法确定该列是否可以移除。如果可以，则将该列移除。 下面的示例使用 Contains 方法和 CanRemove 方法确定该列是否可以移除。如果可以，则将该列移除。

Private Sub RemoveColumn(columnName As String, table As DataTable)
    Dim columns As DataColumnCollection = table.Columns

    If columns.Contains(columnName) Then
        If columns.CanRemove(columns(columnName)) Then
            columns.Remove(columnName)
        End If
    End If
End Sub

private void RemoveColumn(string columnName, DataTable table)
{
    DataColumnCollection columns = table.Columns;

    if (columns.Contains(columnName))
        if (columns.CanRemove(columns[columnName]))
            columns.Remove(columnName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间
CanRemove
IndexOf


DataColumnCollection ..::.CopyTo 方法

DataColumnCollection
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnCollection 类

从指定的索引开始，将集合复制到数组。

名称 说明
页首

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间


DataColumnCollection ..::.CopyTo 方法 ( array<DataColumn >[]()[], Int32)

DataColumnCollection
.
.
::
.
CopyTo 方法 (
array<
DataColumn
>
[]
()
[]
, Int32)
DataColumnCollection 类

将整个集合复制到现有数组中，从该数组内的指定索引处开始复制。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As DataColumn(), _
    index As Integer _
)
public void CopyTo(
    DataColumn[] array,
    int index
)
public:
void CopyTo(
    array<DataColumn^>^ array,
    int index
)
member CopyTo :
        array:DataColumn[] *
        index:int -> unit

参数

array
类型：
array<
System.Data DataColumn
>
[]
()
[]

将集合复制到其中的 DataColumn 对象的数组。
index
类型： System Int32
从其开始的索引。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
CopyTo 重载
System.Data 命名空间


DataColumnCollection ..::.IndexOf 方法

DataColumnCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnCollection 类

搜索指定的 DataColumn，并返回集合中第一个匹配项的索引（从零开始）。

名称 说明
页首

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间


DataColumnCollection ..::.IndexOf 方法 (DataColumn)

DataColumnCollection
.
.
::
.
IndexOf 方法 (DataColumn)
DataColumnCollection 类

获取按名称指定的列的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    column As DataColumn _
) As Integer
public int IndexOf(
    DataColumn column
)
public:
int IndexOf(
    DataColumn^ column
)
member IndexOf :
        column:DataColumn -> int

参数

column
类型： System.Data DataColumn
要返回的列的名称。

返回值

类型： System Int32
如果找到由 column 指定的列的索引，则为这个索引；否则为 -1。

IndexOf 方法不区分大小写。

下面的示例使用 Contains 方法确定 DataColumnCollection 中是否存在指定的列。如果存在，IndexOf 方法返回该列的索引。 下面的示例使用 Contains 方法确定 DataColumnCollection 中是否存在指定的列。如果存在，IndexOf 方法返回该列的索引。

Private Sub GetIndex(ByVal table As DataTable)
    Dim iCol As Integer
    Dim columns As DataColumnCollection = table.Columns
    If columns.Contains("City") Then
       Console.WriteLine(columns.IndexOf("City"))
    End If
End Sub

private void GetIndex(DataTable table)
{
    DataColumnCollection columns = table.Columns;
    if(columns.Contains("City"))
    {
        Console.WriteLine(columns.IndexOf("City"));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
IndexOf 重载
System.Data 命名空间


DataColumnCollection ..::.IndexOf 方法 (String)

DataColumnCollection
.
.
::
.
IndexOf 方法 (String)
DataColumnCollection 类

获取具有特定名称的列的索引（名称不区分大小写）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    columnName As String _
) As Integer
public int IndexOf(
    string columnName
)
public:
int IndexOf(
    String^ columnName
)
member IndexOf :
        columnName:string -> int

参数

columnName
类型： System String
要查找的列的名称。

返回值

类型： System Int32
具有指定名称的列的从零开始的索引，或者如果集合中不存在该列，则为 -1。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
IndexOf 重载
System.Data 命名空间


DataColumnCollection ..::.Remove 方法

DataColumnCollection
.
.
::
.
Remove 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnCollection 类

从集合中移除 DataColumn 对象。

名称 说明
页首

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间


DataColumnCollection ..::.Remove 方法 (DataColumn)

DataColumnCollection
.
.
::
.
Remove 方法 (DataColumn)
DataColumnCollection 类

从集合中移除指定的 DataColumn 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    column As DataColumn _
)
public void Remove(
    DataColumn column
)
public:
void Remove(
    DataColumn^ column
)
member Remove :
        column:DataColumn -> unit

参数

column
类型： System.Data DataColumn
要移除的 DataColumn。
异常 | 条件
ArgumentNullException | column 参数为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 该列不属于此集合。 - 或 - 该列是关系的一部分。 - 或 - 另一个列的表达式取决于该列。

如果通过添加或移除列成功更改集合，则会发生 CollectionChanged 事件。

下面的示例使用 Contains 方法确定是否存在命名的列。如果存在，Item 属性返回该列。然后 CanRemove 方法检查该列是否可以移除；如果可以，Remove 方法就将它移除。 下面的示例使用 Contains 方法确定是否存在命名的列。如果存在，Item 属性返回该列。然后 CanRemove 方法检查该列是否可以移除；如果可以，Remove 方法就将它移除。 下面的示例使用 Contains 方法确定是否存在命名的列。如果存在，Item 属性返回该列。然后 CanRemove 方法检查该列是否可以移除；如果可以，Remove 方法就将它移除。

Private Sub TestAndRemove(ByVal colToRemove As DataColumn)
    ' Get the DataColumnCollection from a DataTable in a DataSet.
    Dim columns As DataColumnCollection = _
        DataSet1.Tables("Orders").Columns

    If columns.Contains(colToRemove.ColumnName) Then
       columns.Remove(colToRemove)
    End If
End Sub

private void TestAndRemove(DataColumn colToRemove)
{
    DataColumnCollection columns;
    // Get the DataColumnCollection from a DataTable in a DataSet.
    columns = DataSet1.Tables["Orders"].Columns;

    if(columns.Contains(colToRemove.ColumnName))
    {
        columns.Remove(colToRemove);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
Remove 重载
System.Data 命名空间
Contains
CanRemove
Item


DataColumnCollection ..::.Remove 方法 (String)

DataColumnCollection
.
.
::
.
Remove 方法 (String)
DataColumnCollection 类

从集合中移除具有指定名称的 DataColumn 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    name As String _
)
public void Remove(
    string name
)
public:
void Remove(
    String^ name
)
member Remove :
        name:string -> unit

参数

name
类型： System String
要移除的列的名称。
异常 | 条件
ArgumentException | 该集合中没有具有指定名称的列。

如果通过添加或移除列成功更改集合，则会发生 CollectionChanged 事件。

下面的示例首先使用 Contains 方法来确定集合中是否存在特定的列。如果找到该列，则 CanRemove 方法测试是否可以移除该列。如果可以，则用 Remove 方法移除该列。 下面的示例首先使用 Contains 方法来确定集合中是否存在特定的列。如果找到该列，则 CanRemove 方法测试是否可以移除该列。如果可以，则用 Remove 方法移除该列。 下面的示例首先使用 Contains 方法来确定集合中是否存在特定的列。如果找到该列，则 CanRemove 方法测试是否可以移除该列。如果可以，则用 Remove 方法移除该列。

Private Sub RemoveColumnByName(columnName As String)

    ' Get the DataColumnCollection from a DataTable in a DataSet.
    Dim columns As DataColumnCollection = _
        DataSet1.Tables("Orders").Columns

    If columns.Contains(columnName) Then
        If columns.CanRemove(columns(columnName)) Then
            columns.Remove(columnName)
        End If
    End If
 End Sub

private void RemoveColumnByName(string columnName)
{
    // Get the DataColumnCollection from a DataTable in a DataSet.
    DataColumnCollection columns =
        ds.Tables["Suppliers"].Columns;

    if(columns.Contains(columnName))
        if(columns.CanRemove(columns[columnName]))
            columns.Remove(columnName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
Remove 重载
System.Data 命名空间
Contains


DataColumnCollection ..::.RemoveAt 方法

DataColumnCollection
.
.
::
.
RemoveAt 方法
DataColumnCollection 类

从集合中移除指定索引位置的列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub RemoveAt ( _
    index As Integer _
)
public void RemoveAt(
    int index
)
public:
void RemoveAt(
    int index
)
member RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的列的索引。
异常 | 条件
ArgumentException | 该集合在指定的索引位置没有列。

如果通过添加或移除列成功更改集合，则会发生 CollectionChanged 事件。

下面的示例首先使用 Contains 方法来确定集合中是否存在特定的列。如果找到该列，则 CanRemove 方法测试是否可以移除该列。如果可以，则用 RemoveAt 方法移除该列。 下面的示例首先使用 Contains 方法来确定集合中是否存在特定的列。如果找到该列，则 CanRemove 方法测试是否可以移除该列。如果可以，则用 RemoveAt 方法移除该列。 下面的示例首先使用 Contains 方法来确定集合中是否存在特定的列。如果找到该列，则 CanRemove 方法测试是否可以移除该列。如果可以，则用 RemoveAt 方法移除该列。

Private Sub RemoveColumnAtIndex(thisIndex As Integer)
   ' Get the DataColumnCollection from a DataTable in a DataSet.
   Dim columns As DataColumnCollection = _
       DataSet1.Tables("Orders").Columns

   If columns.CanRemove(columns(thisIndex)) Then
      columns.RemoveAt(thisIndex)
   End If
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间
IndexOf
Contains
CanRemove


DataColumnCollection 属性

DataColumnCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnCollection 类

DataColumnCollection 类型公开以下成员。

名称 说明
页首

参考

DataColumnCollection 类
System.Data 命名空间


DataColumnCollection ..::.Item 属性

DataColumnCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnCollection 类

从集合中获取指定的 DataColumn。

名称 说明
页首

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间


DataColumnCollection ..::.Item 属性 (Int32)

DataColumnCollection
.
.
::
.
Item 属性 (Int32)
DataColumnCollection 类

从集合中获取位于指定索引位置的 DataColumn。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    index As Integer _
) As DataColumn
    Get
public DataColumn this[
    int index
] { get; }
public:
property DataColumn^ Item[int index] {
    DataColumn^ get (int index);
}
member Item : DataColumn

参数

index
类型： System Int32
要返回的列的从零开始的索引。

属性值

类型： System.Data DataColumn
指定索引处的 DataColumn。
异常 | 条件
IndexOutOfRangeException | 索引值大于集合中项的数目。

Contains 方法可用于测试某一列是否存在。可在尝试使用 Item 之前使用该方法。 Contains 方法可用于测试某一列是否存在。可在尝试使用 Item 之前使用该方法。

下面的示例使用 Item 属性输出按索引指定的 DataColumn 对象的 ColumnName 值。该示例使用 System.Windows.Forms.DataGrid 控件包含的 DataTable。 下面的示例使用 Item 属性输出按索引指定的 DataColumn 对象的 ColumnName 值。该示例使用 System.Windows.Forms.DataGrid 控件包含的 DataTable。

Private Sub PrintColumnNamesByIndex(table As DataTable)
    ' Get the DataColumnCollection from a DataTable in a DataSet.
    Dim columns As DataColumnCollection = table.Columns

    ' Print each column's name using the Index.
    Dim i As Integer
    For i = 0 To columns.Count - 1
        Console.WriteLine(columns(i))
    Next i
End Sub

private void PrintColumnNamesByIndex(DataTable table)
{
    // Get the DataColumnCollection from a DataTable in a DataSet.
    DataColumnCollection columns = table.Columns;

    // Print each column's name using the Index.
    for (int i = 0 ;i <columns.Count ;i++)
        Console.WriteLine(columns[i]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
Item 重载
System.Data 命名空间
ColumnName
Contains
DataColumn


DataColumnCollection ..::.Item 属性 (String)

DataColumnCollection
.
.
::
.
Item 属性 (String)
DataColumnCollection 类

从集合中获取具有指定名称的 DataColumn。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    name As String _
) As DataColumn
    Get
public DataColumn this[
    string name
] { get; }
public:
property DataColumn^ Item[String^ name] {
    DataColumn^ get (String^ name);
}
member Item : DataColumn

参数

name
类型： System String
要返回的列的 ColumnName。

属性值

类型： System.Data DataColumn
具有指定 ColumnName 的集合中的 DataColumn，否则，如果 DataColumn 不存在，则为空值。

在搜索列名称时，Item 按条件区分大小写。例如，如果一个 DataColumn 被命名为“mydatacolumn”，另一个被命名为“Mydatacolumn”，则用于搜索其中一个列的字符串被认为是区分大小写的。但是，如果“mydatacolumn”存在而“Mydatacolumn”不存在，则认为该搜索字符串不区分大小写。 在搜索列名称时，Item 按条件区分大小写。例如，如果一个 DataColumn 被命名为“mydatacolumn”，另一个被命名为“Mydatacolumn”，则用于搜索其中一个列的字符串被认为是区分大小写的。但是，如果“mydatacolumn”存在而“Mydatacolumn”不存在，则认为该搜索字符串不区分大小写。 在搜索列名称时，Item 按条件区分大小写。例如，如果一个 DataColumn 被命名为“mydatacolumn”，另一个被命名为“Mydatacolumn”，则用于搜索其中一个列的字符串被认为是区分大小写的。但是，如果“mydatacolumn”存在而“Mydatacolumn”不存在，则认为该搜索字符串不区分大小写。

下面的示例使用 Item 属性输出按索引指定的 DataColumn 对象的 DataType 值。

Private Sub PrintDataType(table As DataTable)
     ' Get the DataColumnCollection from a DataTable in a DataSet.
     Dim columns As DataColumnCollection = table.Columns

     ' Print the column's data type.
     Console.WriteLine(columns("id").DataType)
End Sub

private void PrintDataType(DataTable table)
{
    // Get the DataColumnCollection from a DataTable in a DataSet.
    DataColumnCollection columns = table.Columns;

    // Print the column's data type.
    Console.WriteLine(columns["id"].DataType);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
Item 重载
System.Data 命名空间
ColumnName
Contains
DataColumn


DataColumnCollection 事件

DataColumnCollection 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnCollection 类

DataColumnCollection 类型公开以下成员。

名称 说明
页首

参考

DataColumnCollection 类
System.Data 命名空间


DataColumnCollection ..::.CollectionChanged 事件

DataColumnCollection
.
.
::
.
CollectionChanged 事件
DataColumnCollection 类

在由于添加或删除列而使列集合发生变化时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event CollectionChanged As CollectionChangeEventHandler
public event CollectionChangeEventHandler CollectionChanged
public:
 event CollectionChangeEventHandler^ CollectionChanged {
    void add (CollectionChangeEventHandler^ value);
    void remove (CollectionChangeEventHandler^ value);
}
member CollectionChanged : IEvent<CollectionChangeEventHandler,
    CollectionChangeEventArgs>

使用 Contains 和 CanRemove 方法确定列是否存在以及是否可以移除。

下面的示例为 CollectionChanged 事件添加事件处理程序。

 Private Sub AddEventHandler(table As DataTable)
     Dim columns As DataColumnCollection = table.Columns
     AddHandler columns.CollectionChanged, _
        AddressOf ColumnsCollection_Changed
 End Sub

 Private Sub ColumnsCollection_Changed _
    (sender As Object, e As System.ComponentModel. _
    CollectionChangeEventArgs)

     Dim columns As DataColumnCollection = _
        CType(sender, DataColumnCollection)
     Console.WriteLine("ColumnsCollectionChanged: " _
        & columns.Count.ToString())
End Sub

private void AddEventHandler(DataTable table)
{
    DataColumnCollection columns = table.Columns;
    columns.CollectionChanged += new
        System.ComponentModel.CollectionChangeEventHandler(
        ColumnsCollection_Changed);
}

private void ColumnsCollection_Changed(object sender,
    System.ComponentModel.CollectionChangeEventArgs e)
{
    DataColumnCollection columns =
        (DataColumnCollection) sender;
    Console.WriteLine("ColumnsCollectionChanged: "
        + columns.Count);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnCollection 类
DataColumnCollection 成员
System.Data 命名空间


DataException 类

DataException 类
成员

表示使用 ADO.NET 组件发生错误时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class DataException _
    Inherits SystemException
[SerializableAttribute]
public class DataException : SystemException
[SerializableAttribute]
public ref class DataException : public SystemException
[<SerializableAttribute>]
type DataException =
    class
        inherit SystemException
    end

System.Data System.Data..::.DataExceptionDataException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataException 成员
System.Data 命名空间


DataException 成员

DataException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataException 类

表示使用 ADO.NET 组件发生错误时引发的异常。

DataException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataException 类
System.Data 命名空间


DataException 构造函数

DataException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataException 类

初始化 DataException 类的新实例。

名称 说明
页首

参考

DataException 类
DataException 成员
System.Data 命名空间


DataException 构造函数

DataException 构造函数
DataException 类

初始化 DataException 类的新实例。这是默认构造函数。 初始化 DataException 类的新实例。这是默认构造函数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataException()
public:
DataException()
new : unit -> DataException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataException 类
DataException 成员
DataException 重载
System.Data 命名空间


DataException 构造函数 (String)

DataException 构造函数 (String)
DataException 类

使用指定的字符串初始化 DataException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public DataException(
    string s
)
public:
DataException(
    String^ s
)
new :
        s:string -> DataException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataException 类
DataException 成员
DataException 重载
System.Data 命名空间
Exception


DataException 构造函数 (SerializationInfo, StreamingContext)

DataException 构造函数 (SerializationInfo, StreamingContext)
DataException 类

用指定的序列化信息和上下文初始化 DataException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected DataException(
    SerializationInfo info,
    StreamingContext context
)
protected:
DataException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> DataException

参数

info
类型： System.Runtime.Serialization SerializationInfo
将对象序列化或反序列化所必需的数据。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataException 类
DataException 成员
DataException 重载
System.Data 命名空间


DataException 构造函数 (String, Exception)

DataException 构造函数 (String, Exception)
DataException 类

使用指定的字符串和内部异常初始化 DataException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String, _
    innerException As Exception _
)
public DataException(
    string s,
    Exception innerException
)
public:
DataException(
    String^ s,
    Exception^ innerException
)
new :
        s:string *
        innerException:Exception -> DataException

参数

s
类型： System String
当引发异常时显示的字符串。
innerException
类型： System Exception
对内部异常的引用。

您可以创建对以前的异常进行捕捉的新异常。处理第二个异常的代码可以利用以前的异常（也叫做内部异常）中的附加信息来检查初始错误的原因。 您可以创建对以前的异常进行捕捉的新异常。处理第二个异常的代码可以利用以前的异常（也叫做内部异常）中的附加信息来检查初始错误的原因。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataException 类
DataException 成员
DataException 重载
System.Data 命名空间


DataException 方法

DataException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataException 类

DataException 类型公开以下成员。

名称 说明
页首

参考

DataException 类
System.Data 命名空间


DataException 属性

DataException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataException 类

DataException 类型公开以下成员。

名称 说明
页首

参考

DataException 类
System.Data 命名空间


DataException 事件

DataException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataException 类

DataException 类型公开以下成员。

名称 说明
页首

参考

DataException 类
System.Data 命名空间


DataRelation 类

DataRelation 类
成员

表示两个 DataTable 对象之间的父/子关系。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataRelation
public class DataRelation
public ref class DataRelation
type DataRelation =  class end

使用了 DataRelation 使两个 DataTable 对象通过 DataColumn 对象彼此相关。例如在“客户/订单”关系中，客户表是关系的父表，订单表是子表。此关系类似于主键/外键关系。有关更多信息，请参见导航 DataRelation (ADO.NET)。 使用了 DataRelation 使两个 DataTable 对象通过 DataColumn 对象彼此相关。例如在“客户/订单”关系中，客户表是关系的父表，订单表是子表。此关系类似于主键/外键关系。有关更多信息，请参见导航 DataRelation (ADO.NET)。 使用了 DataRelation 使两个 DataTable 对象通过 DataColumn 对象彼此相关。例如在“客户/订单”关系中，客户表是关系的父表，订单表是子表。此关系类似于主键/外键关系。有关更多信息，请参见导航 DataRelation (ADO.NET)。 使用了 DataRelation 使两个 DataTable 对象通过 DataColumn 对象彼此相关。例如在“客户/订单”关系中，客户表是关系的父表，订单表是子表。此关系类似于主键/外键关系。有关更多信息，请参见导航 DataRelation (ADO.NET)。

关系是在父表和子表中的匹配的列之间创建的。即，两个列的 DataType 值必须相同。 关系是在父表和子表中的匹配的列之间创建的。即，两个列的 DataType 值必须相同。

关系还可以将父级 DataRow 中的各种更改层叠到其子行。若要控制在子行中如何更改值，请将 ForeignKeyConstraint 添加到 DataTable 对象的 ConstraintCollection。ConstraintCollection 确定在删除或更新父表中的值时采取什么操作。 关系还可以将父级 DataRow 中的各种更改层叠到其子行。若要控制在子行中如何更改值，请将 ForeignKeyConstraint 添加到 DataTable 对象的 ConstraintCollection。ConstraintCollection 确定在删除或更新父表中的值时采取什么操作。 关系还可以将父级 DataRow 中的各种更改层叠到其子行。若要控制在子行中如何更改值，请将 ForeignKeyConstraint 添加到 DataTable 对象的 ConstraintCollection。ConstraintCollection 确定在删除或更新父表中的值时采取什么操作。

在创建 DataRelation 时，它首先验证是否可以建立关系。在将它添加到 DataRelationCollection 之后，通过禁止会使关系无效的任何更改来维持此关系。在创建 DataRelation 和将其添加到 DataRelationCollection 之间的这段时间，可以对父行或子行进行其他更改。如果这样会使关系不再有效，则会生成异常。 在创建 DataRelation 时，它首先验证是否可以建立关系。在将它添加到 DataRelationCollection 之后，通过禁止会使关系无效的任何更改来维持此关系。在创建 DataRelation 和将其添加到 DataRelationCollection 之间的这段时间，可以对父行或子行进行其他更改。如果这样会使关系不再有效，则会生成异常。 在创建 DataRelation 时，它首先验证是否可以建立关系。在将它添加到 DataRelationCollection 之后，通过禁止会使关系无效的任何更改来维持此关系。在创建 DataRelation 和将其添加到 DataRelationCollection 之间的这段时间，可以对父行或子行进行其他更改。如果这样会使关系不再有效，则会生成异常。 在创建 DataRelation 时，它首先验证是否可以建立关系。在将它添加到 DataRelationCollection 之后，通过禁止会使关系无效的任何更改来维持此关系。在创建 DataRelation 和将其添加到 DataRelationCollection 之间的这段时间，可以对父行或子行进行其他更改。如果这样会使关系不再有效，则会生成异常。

说明 说明

如果在两个表之间定义双向关系，则会发生数据损坏。双向关系由两个 DataRelation 对象组成，这两个对象使用交换了父子角色的相同列。保存 DataRelation 对象时不会引发异常；但是可能发生数据损坏。 如果在两个表之间定义双向关系，则会发生数据损坏。双向关系由两个 DataRelation 对象组成，这两个对象使用交换了父子角色的相同列。保存 DataRelation 对象时不会引发异常；但是可能发生数据损坏。 如果在两个表之间定义双向关系，则会发生数据损坏。双向关系由两个 DataRelation 对象组成，这两个对象使用交换了父子角色的相同列。保存 DataRelation 对象时不会引发异常；但是可能发生数据损坏。

DataRelation 对象包含在 DataRelationCollection 中，后者可以通过 DataSet 的 Relations 属性、DataTable 的 ChildRelations 和 ParentRelations 属性来访问。

下面的示例创建一个新的 DataRelation 并将其添加到 DataSet 的 DataRelationCollection 中。

Private Sub CreateRelation()
    ' Get the DataColumn objects from two DataTable objects
    ' in a DataSet. Code to get the DataSet not shown here.
    Dim parentColumn As DataColumn = _
        DataSet1.Tables("Customers").Columns("CustID")
    Dim childColumn As DataColumn = DataSet1.Tables( _
        "Orders").Columns("CustID")

    ' Create DataRelation.
    Dim relCustOrder As DataRelation
    relCustOrder = New DataRelation( _
        "CustomersOrders", parentColumn, childColumn)

    ' Add the relation to the DataSet.
    DataSet1.Relations.Add(relCustOrder)
End Sub

private void CreateRelation()
{
    // Get the DataColumn objects from two DataTable objects
    // in a DataSet. Code to get the DataSet not shown here.
    DataColumn parentColumn =
        DataSet1.Tables["Customers"].Columns["CustID"];
    DataColumn childColumn =
        DataSet1.Tables["Orders"].Columns["CustID"];
    // Create DataRelation.
    DataRelation relCustOrder;
    relCustOrder = new DataRelation("CustomersOrders",
        parentColumn, childColumn);
    // Add the relation to the DataSet.
    DataSet1.Relations.Add(relCustOrder);
}

System.Data System.Data..::.DataRelationDataRelation

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 成员
System.Data 命名空间
ChildRelations
DataColumn
DataSet
ForeignKeyConstraint
DataRelationCollection
UniqueConstraint
ParentRelations


DataRelation 成员

DataRelation 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelation 类

表示两个 DataTable 对象之间的父/子关系。

DataRelation 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataRelation 类
System.Data 命名空间


DataRelation 构造函数

DataRelation 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelation 类

初始化 DataRelation 类的新实例。

名称 说明
页首

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间


DataRelation 构造函数 (String, DataColumn, DataColumn)

DataRelation 构造函数 (String, DataColumn, DataColumn)
DataRelation 类

使用指定的 DataRelation 名称，父级和子级 DataColumn 对象，初始化 DataRelation 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    relationName As String, _
    parentColumn As DataColumn, _
    childColumn As DataColumn _
)
public DataRelation(
    string relationName,
    DataColumn parentColumn,
    DataColumn childColumn
)
public:
DataRelation(
    String^ relationName,
    DataColumn^ parentColumn,
    DataColumn^ childColumn
)
new :
        relationName:string *
        parentColumn:DataColumn *
        childColumn:DataColumn -> DataRelation

参数

relationName
类型： System String
DataRelation 的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。 DataRelation 的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。
parentColumn
类型： System.Data DataColumn
关系中的父级 DataColumn。
childColumn
类型： System.Data DataColumn
关系中的子级 DataColumn。
异常 | 条件
ArgumentNullException | 两个 DataColumn 对象中的一个或两个包含 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 列具有不同的数据类型 - 或 - 表不属于同一个 DataSet。

下面的示例创建一个新的 DataRelation 并将其添加到 DataSet 的 DataRelationCollection 中。

 Private Sub CreateRelation()
    ' Code to get the DataSet not shown here.
    ' Get the DataColumn objects from two DataTable
    ' objects in a DataSet.
    Dim parentCols() As DataColumn = New DataColumn() _
        {DataSet1.Tables("Customers").Columns("CustID"), _
        DataSet1.Tables("Customers").Columns("OrdID")}
    Dim childCols() As DataColumn = New DataColumn() _
        {DataSet1.Tables("Orders").Columns("CustID"), _
        DataSet1.Tables("Orders").Columns("OrdID")}

    ' Create DataRelation.
    Dim CustOrderRel As DataRelation = New DataRelation( _
        "CustomersOrders", parentCols, childCols)

    ' Add the relation to the DataSet.
    DataSet1.Relations.Add(CustOrderRel)
End Sub

private void CreateRelation()
{
    // Code to get the DataSet not shown here.
    // Get the DataColumn objects from two DataTable
    // objects in a DataSet.
    DataColumn[] parentCols = new DataColumn[]
        {DataSet1.Tables["Customers"].Columns["CustID"],
        DataSet1.Tables["Customers"].Columns["OrdID"]};
    DataColumn[] childCols= new DataColumn[]
        {DataSet1.Tables["Orders"].Columns["CustID"],
        DataSet1.Tables["Orders"].Columns["OrdID"]};

    // Create DataRelation.
    DataRelation CustOrderRel = new DataRelation(
        "CustomersOrders", parentCols, childCols);

    // Add the relation to the DataSet.
    DataSet1.Relations.Add(CustOrderRel);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
DataRelation 重载
System.Data 命名空间
DataColumn
RelationName


DataRelation 构造函数 (String, array<DataColumn >[]()[], array<DataColumn >[]()[])

DataRelation 构造函数 (String,
array<
DataColumn
>
[]
()
[]
,
array<
DataColumn
>
[]
()
[]
)
DataRelation 类

使用指定的 DataRelation 名称以及父级和子级 DataColumn 对象的匹配的数组，初始化 DataRelation 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    relationName As String, _
    parentColumns As DataColumn(), _
    childColumns As DataColumn() _
)
public DataRelation(
    string relationName,
    DataColumn[] parentColumns,
    DataColumn[] childColumns
)
public:
DataRelation(
    String^ relationName,
    array<DataColumn^>^ parentColumns,
    array<DataColumn^>^ childColumns
)
new :
        relationName:string *
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] -> DataRelation

参数

relationName
类型： System String
关系的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。 关系的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。
parentColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

父级 DataColumn 对象的数组。
childColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

子 DataColumn 对象的数组。
异常 | 条件
ArgumentNullException | 两个 DataColumn 对象中的一个或两个包含 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | DataColumn 对象具有不同的数据类型 - 或 - 两个数组中至少有一个不由同一个表中的不同列构成。 - 或 - 表不属于同一个 DataSet。

下面的示例创建一个新的 DataRelation 并将其添加到 DataSet 的 DataRelationCollection 中。

Private Sub CreateRelation()
    ' Code to get the DataSet not shown here.
    ' Get the DataColumn objects from two DataTable
    ' objects in a DataSet.
    Dim parentColumns() As DataColumn
    Dim childColumns() As DataColumn
    parentColumns(0) = DataSet1.Tables( _
        "Customers").Columns("CustID")
    parentColumns(1) = DataSet1.Tables( _
        "Customers").Columns("OrdID")

    childColumns(0) = DataSet1.Tables( _
        "Orders").Columns("CustID")
    childColumns(1) = DataSet1.Tables( _
        "Orders").Columns("OrdID")

    ' Create DataRelation.
    Dim CustOrderRel As DataRelation = New DataRelation( _
        "CustomersOrders", parentColumns, childColumns)

    ' Add the relation to the DataSet.
    DataSet1.Relations.Add(CustOrderRel)
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
DataRelation 重载
System.Data 命名空间
DataColumn
ForeignKeyConstraint
RelationName


DataRelation 构造函数 (String, DataColumn, DataColumn, Boolean)

DataRelation 构造函数 (String, DataColumn, DataColumn, Boolean)
DataRelation 类

使用指定名称、父级和子级 DataColumn 对象以及指示是否创建约束的值，初始化 DataRelation 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    relationName As String, _
    parentColumn As DataColumn, _
    childColumn As DataColumn, _
    createConstraints As Boolean _
)
public DataRelation(
    string relationName,
    DataColumn parentColumn,
    DataColumn childColumn,
    bool createConstraints
)
public:
DataRelation(
    String^ relationName,
    DataColumn^ parentColumn,
    DataColumn^ childColumn,
    bool createConstraints
)
new :
        relationName:string *
        parentColumn:DataColumn *
        childColumn:DataColumn *
        createConstraints:bool -> DataRelation

参数

relationName
类型： System String
关系的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。 关系的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。
parentColumn
类型： System.Data DataColumn
关系中的父级 DataColumn。
childColumn
类型： System.Data DataColumn
关系中的子级 DataColumn。
createConstraints
类型： System Boolean
一个指示是否创建约束的值。如果要创建约束，则为 true。否则为 false。 一个指示是否创建约束的值。如果要创建约束，则为 true。否则为 false。 一个指示是否创建约束的值。如果要创建约束，则为 true。否则为 false。
异常 | 条件
ArgumentNullException | 两个 DataColumn 对象中的一个或两个包含 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 列具有不同的数据类型 - 或 - 表不属于同一个 DataSet。

下面的示例创建一个新的 DataRelation 并将其添加到 DataSet 的 DataRelationCollection 中。

 Private Sub CreateRelation()
    ' Code to get the DataSet not shown here.
    ' Get the DataColumn objects from two DataTable
    ' objects in a DataSet.
    Dim parentColumn As DataColumn = DataSet1.Tables( _
        "Customers").Columns("CustID")
    Dim childColumn As DataColumn = _
        DataSet1.Tables("Orders").Columns("CustID")

    ' Create DataRelation.
    Dim bConstraints As Boolean = True
    Dim customerOrdersRelation As DataRelation = _
        New DataRelation("CustomersOrders", _
        parentColumn, childColumn, bConstraints)

    ' Add the relation to the DataSet.
    DataSet1.Relations.Add(customerOrdersRelation)
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
DataRelation 重载
System.Data 命名空间
DataColumn
ForeignKeyConstraint
RelationName


DataRelation 构造函数 (String, array<DataColumn >[]()[], array<DataColumn >[]()[], Boolean)

DataRelation 构造函数 (String,
array<
DataColumn
>
[]
()
[]
,
array<
DataColumn
>
[]
()
[]
, Boolean)
DataRelation 类

使用指定的名称、父级和子级 DataColumn 对象的匹配数组以及指示是否创建约束的值，初始化 DataRelation 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    relationName As String, _
    parentColumns As DataColumn(), _
    childColumns As DataColumn(), _
    createConstraints As Boolean _
)
public DataRelation(
    string relationName,
    DataColumn[] parentColumns,
    DataColumn[] childColumns,
    bool createConstraints
)
public:
DataRelation(
    String^ relationName,
    array<DataColumn^>^ parentColumns,
    array<DataColumn^>^ childColumns,
    bool createConstraints
)
new :
        relationName:string *
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] *
        createConstraints:bool -> DataRelation

参数

relationName
类型： System String
关系的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。 关系的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。
parentColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

父级 DataColumn 对象的数组。
childColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

子 DataColumn 对象的数组。
createConstraints
类型： System Boolean
一个指示是否创建约束的值。如果要创建约束，则为 true。否则为 false。 一个指示是否创建约束的值。如果要创建约束，则为 true。否则为 false。 一个指示是否创建约束的值。如果要创建约束，则为 true。否则为 false。
异常 | 条件
ArgumentNullException | 两个 DataColumn 对象中的一个或两个为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 列具有不同的数据类型 - 或 - 表不属于同一个 DataSet。

下面的示例创建一个新的 DataRelation 并将其添加到 DataSet 的 DataRelationCollection 中。

Private Sub CreateRelation()
    ' Code to get the DataSet not shown here.
    ' Get the DataColumn objects from two DataTable
    ' objects in a DataSet.
    Dim parentColumns() As DataColumn
    Dim childColumns() As DataColumn
    parentColumns(0) = DataSet1.Tables( _
        "Customers").Columns("CustID")
    parentColumns(1) = DataSet1.Tables( _
        "Customers").Columns("OrdID")

    childColumns(0) = DataSet1.Tables( _
        "Orders").Columns("CustID")
    childColumns(1) = DataSet1.Tables( _
        "Orders").Columns("OrdID")

    Dim bConstraints As Boolean = True
    ' Create DataRelation.
    Dim CustOrderRel As DataRelation = New DataRelation( _
        "CustomersOrders", parentColumns, childColumns,  _
        bConstraints)

    ' Add the relation to the DataSet.
    DataSet1.Relations.Add(CustOrderRel)
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
DataRelation 重载
System.Data 命名空间
DataColumn
ForeignKeyConstraint
RelationName


DataRelation 构造函数 (String, String, String, array<String >[]()[], array<String >[]()[], Boolean)

DataRelation 构造函数 (String, String, String,
array<
String
>
[]
()
[]
,
array<
String
>
[]
()
[]
, Boolean)
DataRelation 类

此构造函数在 Visual Studio 环境中提供设计时支持。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Sub New ( _
    relationName As String, _
    parentTableName As String, _
    childTableName As String, _
    parentColumnNames As String(), _
    childColumnNames As String(), _
    nested As Boolean _
)
[BrowsableAttribute(false)]
public DataRelation(
    string relationName,
    string parentTableName,
    string childTableName,
    string[] parentColumnNames,
    string[] childColumnNames,
    bool nested
)
[BrowsableAttribute(false)]
public:
DataRelation(
    String^ relationName,
    String^ parentTableName,
    String^ childTableName,
    array<String^>^ parentColumnNames,
    array<String^>^ childColumnNames,
    bool nested
)
[<BrowsableAttribute(false)>]
new :
        relationName:string *
        parentTableName:string *
        childTableName:string *
        parentColumnNames:string[] *
        childColumnNames:string[] *
        nested:bool -> DataRelation

参数

relationName
类型： System String
关系的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。 关系的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。
parentTableName
类型： System String
作为关系的父表的 DataTable 的名称。
childTableName
类型： System String
作为关系的子表的 DataTable 的名称。
parentColumnNames
类型：
array<
System String
>
[]
()
[]

关系的父级 DataTable 中的 DataColumn 对象名称的数组。
childColumnNames
类型：
array<
System String
>
[]
()
[]

关系的子级 DataTable 中的 DataColumn 对象名称的数组。
nested
类型： System Boolean
一个指示关系是否嵌套的值。

任何使用此构造函数创建的 DataRelation 对象必须使用 BeginInit 和 EndInit 块内部的 AddRange 方法添加到集合中。如果未在 BeginInit 和 EndInit 之间调用此构造函数，将发生 NullReferenceException。此外，在调用构造函数时，具有指定名称的表和列必须存在。 任何使用此构造函数创建的 DataRelation 对象必须使用 BeginInit 和 EndInit 块内部的 AddRange 方法添加到集合中。如果未在 BeginInit 和 EndInit 之间调用此构造函数，将发生 NullReferenceException。此外，在调用构造函数时，具有指定名称的表和列必须存在。 任何使用此构造函数创建的 DataRelation 对象必须使用 BeginInit 和 EndInit 块内部的 AddRange 方法添加到集合中。如果未在 BeginInit 和 EndInit 之间调用此构造函数，将发生 NullReferenceException。此外，在调用构造函数时，具有指定名称的表和列必须存在。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
DataRelation 重载
System.Data 命名空间


DataRelation 构造函数 (String, String, String, String, String, array<String >[]()[], array<String >[]()[], Boolean)

DataRelation 构造函数 (String, String, String, String, String,
array<
String
>
[]
()
[]
,
array<
String
>
[]
()
[]
, Boolean)
DataRelation 类

此构造函数在 Visual Studio 环境中提供设计时支持。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Sub New ( _
    relationName As String, _
    parentTableName As String, _
    parentTableNamespace As String, _
    childTableName As String, _
    childTableNamespace As String, _
    parentColumnNames As String(), _
    childColumnNames As String(), _
    nested As Boolean _
)
[BrowsableAttribute(false)]
public DataRelation(
    string relationName,
    string parentTableName,
    string parentTableNamespace,
    string childTableName,
    string childTableNamespace,
    string[] parentColumnNames,
    string[] childColumnNames,
    bool nested
)
[BrowsableAttribute(false)]
public:
DataRelation(
    String^ relationName,
    String^ parentTableName,
    String^ parentTableNamespace,
    String^ childTableName,
    String^ childTableNamespace,
    array<String^>^ parentColumnNames,
    array<String^>^ childColumnNames,
    bool nested
)
[<BrowsableAttribute(false)>]
new :
        relationName:string *
        parentTableName:string *
        parentTableNamespace:string *
        childTableName:string *
        childTableNamespace:string *
        parentColumnNames:string[] *
        childColumnNames:string[] *
        nested:bool -> DataRelation

参数

relationName
类型： System String
DataRelation 的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。 DataRelation 的名称。如果为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则当创建的对象添加到 DataRelationCollection 时，将指定一个默认名称。
parentTableName
类型： System String
作为关系的父表的 DataTable 的名称。
parentTableNamespace
类型： System String
父表命名空间的名称。
childTableName
类型： System String
作为关系的子表的 DataTable 的名称。
childTableNamespace
类型： System String
子表命名空间的名称。
parentColumnNames
类型：
array<
System String
>
[]
()
[]

关系的父级 DataTable 中的 DataColumn 对象名称的数组。
childColumnNames
类型：
array<
System String
>
[]
()
[]

关系的子级 DataTable 中的 DataColumn 对象名称的数组。
nested
类型： System Boolean
一个指示关系是否嵌套的值。

然后必须通过 AddRange 将使用此构造函数创建的任何 DataRelation 对象添加到集合中。当调用该方法时，必须存在具有指定名称的表和列，或者如果在调用此构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的表和列。 然后必须通过 AddRange 将使用此构造函数创建的任何 DataRelation 对象添加到集合中。当调用该方法时，必须存在具有指定名称的表和列，或者如果在调用此构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的表和列。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataRelation 类
DataRelation 成员
DataRelation 重载
System.Data 命名空间


DataRelation 方法

DataRelation 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelation 类

DataRelation 类型公开以下成员。

名称 说明
页首

参考

DataRelation 类
System.Data 命名空间


DataRelation ..::.CheckStateForProperty 方法

DataRelation
.
.
::
.
CheckStateForProperty 方法
DataRelation 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

此方法支持 .NET Framework 基础结构，不应通过代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub CheckStateForProperty
protected void CheckStateForProperty()
protected:
void CheckStateForProperty()
member CheckStateForProperty : unit -> unit

异常 | 条件
DataException | 父表和子表属于不同的 DataSet 对象。 - 或 - 一对或多对父级和子级 DataColumn 对象具有不匹配的数据类型。 - 或 - 父级和子级 DataColumn 对象相同。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间


DataRelation ..::.OnPropertyChanging 方法

DataRelation
.
.
::
.
OnPropertyChanging 方法
DataRelation 类

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Sub OnPropertyChanging ( _
    pcevent As PropertyChangedEventArgs _
)
protected internal void OnPropertyChanging(
    PropertyChangedEventArgs pcevent
)
protected public:
void OnPropertyChanging(
    PropertyChangedEventArgs^ pcevent
)
member OnPropertyChanging :
        pcevent:PropertyChangedEventArgs -> unit

参数

pcevent
类型： System.ComponentModel PropertyChangedEventArgs
参数引用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间


DataRelation ..::.RaisePropertyChanging 方法

DataRelation
.
.
::
.
RaisePropertyChanging 方法
DataRelation 类

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Sub RaisePropertyChanging ( _
    name As String _
)
protected internal void RaisePropertyChanging(
    string name
)
protected public:
void RaisePropertyChanging(
    String^ name
)
member RaisePropertyChanging :
        name:string -> unit

参数

name
类型： System String
参数引用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间


DataRelation ..::.ToString 方法

DataRelation
.
.
::
.
ToString 方法
DataRelation 类

获取 RelationName（如果存在的话）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
RelationName 属性的值。

下面的示例使用 ToString 属性返回 DataRelation 对象的名称。

Private Sub PrintName(relation As DataRelation)
    ' Print the name of the DataRelation.
      Console.WriteLine(relation.ToString())
End Sub

private void PrintName(DataRelation relation)
{
    // Print the name of the DataRelation.
    Console.WriteLine(relation.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间
Expression
ColumnName


DataRelation 属性

DataRelation 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelation 类

DataRelation 类型公开以下成员。

名称 说明
页首

参考

DataRelation 类
System.Data 命名空间


DataRelation ..::.ChildColumns 属性

DataRelation
.
.
::
.
ChildColumns 属性
DataRelation 类

获取此关系的子 DataColumn 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property ChildColumns As DataColumn()
    Get
public virtual DataColumn[] ChildColumns { get; }
public:
virtual property array<DataColumn^>^ ChildColumns {
    array<DataColumn^>^ get ();
}
abstract ChildColumns : DataColumn[]
override ChildColumns : DataColumn[]

属性值

类型：
array<
System.Data DataColumn
>
[]
()
[]

DataColumn 对象的数组。

下面的示例获取 DataRelation 的子级 DataColumn 对象。

Private Sub GetChildColumns()
    ' Get the DataRelation of a DataSet.
    Dim relation As DataRelation = _
        DataSet1.Relations("CustomerOrders")

    ' Get the child columns.
    Dim childArray() As DataColumn = relation.ChildColumns

    ' Print the ColumnName of each column.
    Dim i As Integer
    For i = 0 to childArray.GetUpperBound(0)
       Debug.Write(childArray(i).ColumnName)
    Next i
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间
DataColumn
ParentColumns


DataRelation ..::.ChildKeyConstraint 属性

DataRelation
.
.
::
.
ChildKeyConstraint 属性
DataRelation 类

获取关系的 ForeignKeyConstraint。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property ChildKeyConstraint As ForeignKeyConstraint
    Get
public virtual ForeignKeyConstraint ChildKeyConstraint { get; }
public:
virtual property ForeignKeyConstraint^ ChildKeyConstraint {
    ForeignKeyConstraint^ get ();
}
abstract ChildKeyConstraint : ForeignKeyConstraint
override ChildKeyConstraint : ForeignKeyConstraint

属性值

类型： System.Data ForeignKeyConstraint
ForeignKeyConstraint。

将关系添加到关系集合中时，如果此关系不存在关联的 ForeignKeyConstraint，则将自动创建一个，并由 ChildKeyConstraint 指向该约束。

下面的示例为与 DataRelation 关联的 ForeignKeyConstraint 设置 UpdateRule、DeleteRule 和 AcceptReject 规则。

Private Sub SetChildKeyConstraint(dataSet As DataSet)
   ' Set child and parent columns.
   Dim parentColumn As DataColumn = dataSet.Tables( _
       "Suppliers").Columns("SupplierID")
   Dim childColumn As DataColumn = dataSet.Tables( _
       "Products").Columns("SupplierID")
   Dim relation As DataRelation = New DataRelation( _
       "SuppliersConstraint", parentColumn, childColumn)
   dataSet.Relations.Add(relation)

   Dim foreignKey As ForeignKeyConstraint = _
       relation.ChildKeyConstraint
   foreignKey.DeleteRule = Rule.SetNull
   foreignKey.UpdateRule = Rule.Cascade
   foreignKey.AcceptRejectRule = AcceptRejectRule.Cascade
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间
AcceptRejectRule
ParentKeyConstraint
Rule


DataRelation ..::.ChildTable 属性

DataRelation
.
.
::
.
ChildTable 属性
DataRelation 类

获取此关系的子表。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property ChildTable As DataTable
    Get
public virtual DataTable ChildTable { get; }
public:
virtual property DataTable^ ChildTable {
    DataTable^ get ();
}
abstract ChildTable : DataTable
override ChildTable : DataTable

属性值

类型： System.Data DataTable
一个 DataTable，它是关系的子表。

下面的示例获取 DataRelation 的子级 DataTable。

Private Sub GetChildTable()
    ' Get a DataRelation of a DataSet.
    Dim relation As DataRelation = _
        DataSet1.Relations("CustomerOrders")

    ' Get the child DataTable of the relation.
    Dim table As DataTable = relation.ChildTable

    ' Print the name and number of rows of the child table.
    Console.Writeline("Name: {0} Rowcount: {1}", _
        table.TableName, table.Rows.Count.ToString())
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间
DataTable
ParentTable


DataRelation ..::.DataSet 属性

DataRelation
.
.
::
.
DataSet 属性
DataRelation 类

获取 DataRelation 所属的 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overridable ReadOnly Property DataSet As DataSet
    Get
[BrowsableAttribute(false)]
public virtual DataSet DataSet { get; }
[BrowsableAttribute(false)]
public:
virtual property DataSet^ DataSet {
    DataSet^ get ();
}
[<BrowsableAttribute(false)>]
abstract DataSet : DataSet
[<BrowsableAttribute(false)>]
override DataSet : DataSet

属性值

类型： System.Data DataSet
DataRelation 所属的 DataSet。

通过 DataSet 对象的 Relations 属性访问与 DataSet 关联的 DataRelationCollection。

下面的示例获取 DataRelation 的 DataSet。

Private Sub GetRelDataSet(relation As DataRelation)
    ' Get the DataSet of the passed in DataRelation.
    Dim dataSet As DataSet = relation.DataSet

    ' Print the table names of each table in the DataSet.
    Dim table As DataTable
    For Each table In dataSet.Tables
        Console.WriteLine(table.TableName.ToString())
    Next
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间
DataSet
Relations
DataRelationCollection


DataRelation ..::.ExtendedProperties 属性

DataRelation
.
.
::
.
ExtendedProperties 属性
DataRelation 类

获取存储自定义属性的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property ExtendedProperties As PropertyCollection
    Get
[BrowsableAttribute(false)]
public PropertyCollection ExtendedProperties { get; }
[BrowsableAttribute(false)]
public:
property PropertyCollection^ ExtendedProperties {
    PropertyCollection^ get ();
}
[<BrowsableAttribute(false)>]
member ExtendedProperties : PropertyCollection

属性值

类型： System.Data PropertyCollection
一个包含自定义属性的 PropertyCollection。

扩展属性必须是 String 类型。当以 XML 的形式写 DataRelation 时，不保持非 String 类型的属性。 扩展属性必须是 String 类型。当以 XML 的形式写 DataRelation 时，不保持非 String 类型的属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间


DataRelation ..::.Nested 属性

DataRelation
.
.
::
.
Nested 属性
DataRelation 类

获取或设置一个指示 DataRelation 对象是否嵌套的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property Nested As Boolean
    Get
    Set
public virtual bool Nested { get; set; }
public:
virtual property bool Nested {
    bool get ();
    void set (bool value);
}
abstract Nested : bool with get, set
override Nested : bool with get, set

属性值

类型： System Boolean
如果 DataRelation 对象嵌套，则为 true；否则为 false。

可以使用 DataRelation 对象定义层次结构关系，如以 XML 形式指定的关系。有关更多信息，请参见嵌套 DataRelation (ADO.NET)。 可以使用 DataRelation 对象定义层次结构关系，如以 XML 形式指定的关系。有关更多信息，请参见嵌套 DataRelation (ADO.NET)。

说明 说明

如果关系中子表的 TableName 与关系中父表中列的 ColumnName 相匹配，则 Nested 属性必须为假。.NET Framework 1.0 版没有此要求。 如果关系中子表的 TableName 与关系中父表中列的 ColumnName 相匹配，则 Nested 属性必须为假。.NET Framework 1.0 版没有此要求。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间


DataRelation ..::.ParentColumns 属性

DataRelation
.
.
::
.
ParentColumns 属性
DataRelation 类

获取作为此 DataRelation 的父列的 DataColumn 对象的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property ParentColumns As DataColumn()
    Get
public virtual DataColumn[] ParentColumns { get; }
public:
virtual property array<DataColumn^>^ ParentColumns {
    array<DataColumn^>^ get ();
}
abstract ParentColumns : DataColumn[]
override ParentColumns : DataColumn[]

属性值

类型：
array<
System.Data DataColumn
>
[]
()
[]

作为此 DataRelation 的父列 DataColumn 对象的数组。

下面的示例获取作为该关系的父列的 DataColumn 对象的数组。

Private Sub GetChildCols()
    ' Get the DataRelation of a DataSet.
    Dim relation As DataRelation = _
        DataSet1.Relations("CustomerOrders")

    ' Get the parent columns.
    Dim parentColumns() As DataColumn = relation.ParentColumns

    ' Print the ColumnName of each column.
    Dim i As Integer
    For i = 0 to parentColumns.GetUpperBound(0)
       Console.Writeline(parentColumns(i).ColumnName.ToString())
    Next i
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间
DataColumn
ChildColumns


DataRelation ..::.ParentKeyConstraint 属性

DataRelation
.
.
::
.
ParentKeyConstraint 属性
DataRelation 类

获取 UniqueConstraint，它确保 DataRelation 的父列中的值是唯一的。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property ParentKeyConstraint As UniqueConstraint
    Get
public virtual UniqueConstraint ParentKeyConstraint { get; }
public:
virtual property UniqueConstraint^ ParentKeyConstraint {
    UniqueConstraint^ get ();
}
abstract ParentKeyConstraint : UniqueConstraint
override ParentKeyConstraint : UniqueConstraint

属性值

类型： System.Data UniqueConstraint
一个 UniqueConstraint，它确保父列中的值是唯一的。

下面的示例获取 DataRelation 对象的 ParentKeyConstraint。

Private Sub GetParentKeyConstraint()
    ' Get a DataRelation from a DataSet.
    Dim relation As DataRelation = _
        DataSet1.Relations("CustomerOrders")

    ' Get the relations parent key constraint.
    Dim constraint As UniqueConstraint = _
        relation.ParentKeyConstraint

    ' Get the constraint's DataColumns
    Dim constraintColumns() As DataColumn
    constraintColumns = constraint.Columns

    ' Print the column names.
    Dim i As Integer
    For i = 0 to constraintColumns.GetUpperBound(0)
       Console.WriteLine(constraintColumns(i).ColumnName.ToString())
    Next i
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间
ChildKeyConstraint
UniqueConstraint


DataRelation ..::.ParentTable 属性

DataRelation
.
.
::
.
ParentTable 属性
DataRelation 类

获取此 DataRelation 的父级 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property ParentTable As DataTable
    Get
public virtual DataTable ParentTable { get; }
public:
virtual property DataTable^ ParentTable {
    DataTable^ get ();
}
abstract ParentTable : DataTable
override ParentTable : DataTable

属性值

类型： System.Data DataTable
一个 DataTable，它是此关系的父表。

下面的示例获取 DataRelation 的父级 DataTable。

Private Sub GetParentTable()
    ' Get a DataRelation of a DataSet.
    Dim relation As DataRelation = _
        DataSet1.Relations("CustomerOrders")

    ' Get the parent DataTable of the relation.
    Dim table As DataTable = relation.ParentTable

    ' Print the name and number of rows of the parent table.
    Console.WriteLine(table.TableName.ToString())
    Console.WriteLine(table.Rows.Count.ToString())
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间
DataTable
ChildTable


DataRelation ..::.RelationName 属性

DataRelation
.
.
::
.
RelationName 属性
DataRelation 类

获取或设置用于从 DataRelationCollection 中检索 DataRelation 的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property RelationName As String
    Get
    Set
public virtual string RelationName { get; set; }
public:
virtual property String^ RelationName {
    String^ get ();
    void set (String^ value);
}
abstract RelationName : string with get, set
override RelationName : string with get, set

属性值

类型： System String
DataRelation 的名称。
异常 | 条件
ArgumentException | 将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("") 传入作为 DataRelation 的 DataColumn。
DuplicateNameException | DataRelation 属于一个集合，该集合已经包含具有相同名称的 DataRelation。

使用 RelationName 属性从 DataRelationCollection 中检索 DataRelation。

下面的示例使用 RelationName 属性从 DataRelationCollection 中检索 DataRelation。

Private Sub GetRelation()
    ' Get the collection of a DataSet.
    Dim collection As DataRelationCollection = _
        DataSet1.Relations

    ' Add a relation named CustomerOrders.
    Dim myRel As DataRelation = _
        collection("CustomerOrders")

    ' Print the RelationName.
    Console.WriteLine(myRel.RelationName.ToString())
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelation 类
DataRelation 成员
System.Data 命名空间
DataSet
DataRelationCollection
Item


DataRelationCollection 类

DataRelationCollection 类
成员

表示此 DataSet 的 DataRelation 对象的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DataRelationCollection _
    Inherits InternalDataCollectionBase
public abstract class DataRelationCollection : InternalDataCollectionBase
public ref class DataRelationCollection abstract : public InternalDataCollectionBase
[<AbstractClassAttribute>]
type DataRelationCollection =
    class
        inherit InternalDataCollectionBase
    end

DataRelationCollection 对象允许在相关的父级/子级 DataTable 对象之间导航。

可以通过如下方式创建 DataRelationCollection 对象：将它定义为 DataSet 或 DataTable 的属性，而不是直接通过使用构造函数。（使用 DataSet 的 Relations 属性，或 DataTable 的 ParentRelations 属性。） 可以通过如下方式创建 DataRelationCollection 对象：将它定义为 DataSet 或 DataTable 的属性，而不是直接通过使用构造函数。（使用 DataSet 的 Relations 属性，或 DataTable 的 ParentRelations 属性。）

若要访问该集合，请使用 DataSet 对象的 Relations 属性。

一旦该集合存在，就可以使用 Add、Clear 和 Remove 等方法管理它包含的对象。

System.Data System.Data..::.DataRelationCollectionDataRelationCollection

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection 成员

DataRelationCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelationCollection 类

表示此 DataSet 的 DataRelation 对象的集合。

DataRelationCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataRelationCollection 类
System.Data 命名空间


DataRelationCollection 构造函数

DataRelationCollection 构造函数
DataRelationCollection 类

初始化 DataRelationCollection 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DataRelationCollection()
protected:
DataRelationCollection()
new : unit -> DataRelationCollection

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection 方法

DataRelationCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelationCollection 类

DataRelationCollection 类型公开以下成员。

名称 说明
页首

参考

DataRelationCollection 类
System.Data 命名空间


DataRelationCollection ..::.Add 方法

DataRelationCollection
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelationCollection 类

向 DataRelationCollection 添加 DataRelation。

名称 说明
页首

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Add 方法 (DataRelation)

DataRelationCollection
.
.
::
.
Add 方法 (DataRelation)
DataRelationCollection 类

向 DataRelationCollection 添加 DataRelation。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Add ( _
    relation As DataRelation _
)
public void Add(
    DataRelation relation
)
public:
void Add(
    DataRelation^ relation
)
member Add :
        relation:DataRelation -> unit

参数

relation
类型： System.Data DataRelation
要添加到集合中的 DataRelation。
异常 | 条件
ArgumentNullException | relation 参数为空值。
ArgumentException | 该关系已经属于此集合，或者它属于另一个集合。
DuplicateNameException | 集合中已经存在具有指定名称的关系。（该比较不区分大小写。） 集合中已经存在具有指定名称的关系。（该比较不区分大小写。）
InvalidConstraintException | 该关系在创建后进入了无效的状态。

如果将关系成功地添加到集合，则发生 CollectionChanged 事件。

在将 DataRelation 对象添加到集合时，如果 ForeignKeyConstraint 和 UniqueConstraint 对象尚不存在，则默认情况下会创建它们。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Add 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Add 方法 (DataColumn, DataColumn)

DataRelationCollection
.
.
::
.
Add 方法 (DataColumn, DataColumn)
DataRelationCollection 类

用指定的父列和子列创建 DataRelation，并将其添加到集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Add ( _
    parentColumn As DataColumn, _
    childColumn As DataColumn _
) As DataRelation
public virtual DataRelation Add(
    DataColumn parentColumn,
    DataColumn childColumn
)
public:
virtual DataRelation^ Add(
    DataColumn^ parentColumn,
    DataColumn^ childColumn
)
abstract Add :
        parentColumn:DataColumn *
        childColumn:DataColumn -> DataRelation
override Add :
        parentColumn:DataColumn *
        childColumn:DataColumn -> DataRelation

参数

parentColumn
类型： System.Data DataColumn
该关系的父列。
childColumn
类型： System.Data DataColumn
该关系的子列。

返回值

类型： System.Data DataRelation
创建的关系。

在将 DataRelation 对象添加到集合时，如果 ForeignKeyConstraint 和 UniqueConstraint 对象尚不存在，则默认情况下会创建它们。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Add 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Add 方法 ( array<DataColumn >[]()[], array<DataColumn >[]()[])

DataRelationCollection
.
.
::
.
Add 方法 (
array<
DataColumn
>
[]
()
[]
,
array<
DataColumn
>
[]
()
[]
)
DataRelationCollection 类

用指定的父列和子列创建 DataRelation，并将其添加到集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Add ( _
    parentColumns As DataColumn(), _
    childColumns As DataColumn() _
) As DataRelation
public virtual DataRelation Add(
    DataColumn[] parentColumns,
    DataColumn[] childColumns
)
public:
virtual DataRelation^ Add(
    array<DataColumn^>^ parentColumns,
    array<DataColumn^>^ childColumns
)
abstract Add :
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] -> DataRelation
override Add :
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] -> DataRelation

参数

parentColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

该关系的父列。
childColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

该关系的子列。

返回值

类型： System.Data DataRelation
创建的关系。
异常 | 条件
ArgumentNullException | relation 参数为空值。
ArgumentException | 该关系已经属于此集合，或者它属于另一个集合。
DuplicateNameException | 集合中已存在同名关系。（该比较不区分大小写。） 集合中已存在同名关系。（该比较不区分大小写。）
InvalidConstraintException | 该关系在创建后进入了无效的状态。

在将 DataRelation 对象添加到集合时，如果 ForeignKeyConstraint 和 UniqueConstraint 对象尚不存在，则默认情况下会创建它们。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Add 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Add 方法 (String, DataColumn, DataColumn)

DataRelationCollection
.
.
::
.
Add 方法 (String, DataColumn, DataColumn)
DataRelationCollection 类

用指定名称以及父列和子列创建 DataRelation，并将其添加到集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Add ( _
    name As String, _
    parentColumn As DataColumn, _
    childColumn As DataColumn _
) As DataRelation
public virtual DataRelation Add(
    string name,
    DataColumn parentColumn,
    DataColumn childColumn
)
public:
virtual DataRelation^ Add(
    String^ name,
    DataColumn^ parentColumn,
    DataColumn^ childColumn
)
abstract Add :
        name:string *
        parentColumn:DataColumn *
        childColumn:DataColumn -> DataRelation
override Add :
        name:string *
        parentColumn:DataColumn *
        childColumn:DataColumn -> DataRelation

参数

name
类型： System String
关系的名称。
parentColumn
类型： System.Data DataColumn
该关系的父列。
childColumn
类型： System.Data DataColumn
该关系的子列。

返回值

类型： System.Data DataRelation
创建的关系。

在将 DataRelation 对象添加到集合时，如果 ForeignKeyConstraint 和 UniqueConstraint 对象尚不存在，则默认情况下会创建它们。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Add 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Add 方法 (String, array<DataColumn >[]()[], array<DataColumn >[]()[])

DataRelationCollection
.
.
::
.
Add 方法 (String,
array<
DataColumn
>
[]
()
[]
,
array<
DataColumn
>
[]
()
[]
)
DataRelationCollection 类

使用父列和子列数组创建一个具有指定名称的 DataRelation，并将其添加到集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Add ( _
    name As String, _
    parentColumns As DataColumn(), _
    childColumns As DataColumn() _
) As DataRelation
public virtual DataRelation Add(
    string name,
    DataColumn[] parentColumns,
    DataColumn[] childColumns
)
public:
virtual DataRelation^ Add(
    String^ name,
    array<DataColumn^>^ parentColumns,
    array<DataColumn^>^ childColumns
)
abstract Add :
        name:string *
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] -> DataRelation
override Add :
        name:string *
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] -> DataRelation

参数

name
类型： System String
要创建的 DataRelation 的名称。
parentColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

父级 DataColumn 对象的数组。
childColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

子 DataColumn 对象的数组。

返回值

类型： System.Data DataRelation
创建的 DataRelation。
异常 | 条件
ArgumentNullException | 该关系名称为空值。
ArgumentException | 该关系已经属于此集合，或者它属于另一个集合。
DuplicateNameException | 集合中已存在同名关系。（该比较不区分大小写。） 集合中已存在同名关系。（该比较不区分大小写。）
InvalidConstraintException | 该关系在创建后进入了无效的状态。

如果将关系成功地添加到集合，则发生 CollectionChanged 事件。

在将 DataRelation 对象添加到集合时，如果 ForeignKeyConstraint 和 UniqueConstraint 对象尚不存在，则默认情况下会创建它们。

Private Sub AddRelation()
    Dim table As New DataTable()
    Dim column1 As DataColumn = table.Columns.Add("Column1")
    Dim column2 As DataColumn = table.Columns.Add("Column2")
    table.ChildRelations.Add("New Relation", column1, column2)
End Sub

private void AddRelation()
{
    DataTable table = new DataTable();
    DataColumn column1 = table.Columns.Add("Column1");
    DataColumn column2 = table.Columns.Add("Column2");
    table.ChildRelations.Add("New Relation", column1, column2);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Add 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Add 方法 (String, DataColumn, DataColumn, Boolean)

DataRelationCollection
.
.
::
.
Add 方法 (String, DataColumn, DataColumn, Boolean)
DataRelationCollection 类

用指定的名称、父列和子列，以及根据 createConstraints 参数的值而定的可选约束创建 DataRelation，并将其添加到集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Add ( _
    name As String, _
    parentColumn As DataColumn, _
    childColumn As DataColumn, _
    createConstraints As Boolean _
) As DataRelation
public virtual DataRelation Add(
    string name,
    DataColumn parentColumn,
    DataColumn childColumn,
    bool createConstraints
)
public:
virtual DataRelation^ Add(
    String^ name,
    DataColumn^ parentColumn,
    DataColumn^ childColumn,
    bool createConstraints
)
abstract Add :
        name:string *
        parentColumn:DataColumn *
        childColumn:DataColumn *
        createConstraints:bool -> DataRelation
override Add :
        name:string *
        parentColumn:DataColumn *
        childColumn:DataColumn *
        createConstraints:bool -> DataRelation

参数

name
类型： System String
关系的名称。
parentColumn
类型： System.Data DataColumn
该关系的父列。
childColumn
类型： System.Data DataColumn
该关系的子列。
createConstraints
类型： System Boolean
如果创建约束，则为 true；否则为 false。（默认值为 true）。 如果创建约束，则为 true；否则为 false。（默认值为 true）。

返回值

类型： System.Data DataRelation
创建的关系。

在将 DataRelation 对象添加到集合时，如果 ForeignKeyConstraint 和 UniqueConstraint 对象尚不存在，则默认情况下会创建它们。若要防止进行默认创建，可以将 createConstraints 设置为 false。 在将 DataRelation 对象添加到集合时，如果 ForeignKeyConstraint 和 UniqueConstraint 对象尚不存在，则默认情况下会创建它们。若要防止进行默认创建，可以将 createConstraints 设置为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Add 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Add 方法 (String, array<DataColumn >[]()[], array<DataColumn >[]()[], Boolean)

DataRelationCollection
.
.
::
.
Add 方法 (String,
array<
DataColumn
>
[]
()
[]
,
array<
DataColumn
>
[]
()
[]
, Boolean)
DataRelationCollection 类

用指定的名称、父列和子列的数组以及指定是否创建约束的值，创建 DataRelation，并将其添加到集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Add ( _
    name As String, _
    parentColumns As DataColumn(), _
    childColumns As DataColumn(), _
    createConstraints As Boolean _
) As DataRelation
public virtual DataRelation Add(
    string name,
    DataColumn[] parentColumns,
    DataColumn[] childColumns,
    bool createConstraints
)
public:
virtual DataRelation^ Add(
    String^ name,
    array<DataColumn^>^ parentColumns,
    array<DataColumn^>^ childColumns,
    bool createConstraints
)
abstract Add :
        name:string *
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] *
        createConstraints:bool -> DataRelation
override Add :
        name:string *
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] *
        createConstraints:bool -> DataRelation

参数

name
类型： System String
要创建的 DataRelation 的名称。
parentColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

父级 DataColumn 对象的数组。
childColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

子 DataColumn 对象的数组。
createConstraints
类型： System Boolean
若要创建约束，则为 true；否则为 false。

返回值

类型： System.Data DataRelation
创建的关系。
异常 | 条件
ArgumentNullException | 该关系名称为空值。
ArgumentException | 该关系已经属于此集合，或者它属于另一个集合。
DuplicateNameException | 集合中已存在同名关系。（该比较不区分大小写。） 集合中已存在同名关系。（该比较不区分大小写。）
InvalidConstraintException | 该关系在创建后进入了无效的状态。

在将 DataRelation 对象添加到集合时，如果 ForeignKeyConstraint 和 UniqueConstraint 对象尚不存在，则默认情况下会创建它们。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Add 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.AddCore 方法

DataRelationCollection
.
.
::
.
AddCore 方法
DataRelationCollection 类

对表执行验证。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub AddCore ( _
    relation As DataRelation _
)
protected virtual void AddCore(
    DataRelation relation
)
protected:
virtual void AddCore(
    DataRelation^ relation
)
abstract AddCore :
        relation:DataRelation -> unit
override AddCore :
        relation:DataRelation -> unit

参数

relation
类型： System.Data DataRelation
要检查的关系。
异常 | 条件
ArgumentNullException | 关系为空。
ArgumentException | 该关系已经属于此集合，或者它属于另一个集合。
DuplicateNameException | 集合中已存在同名关系。（该比较不区分大小写。） 集合中已存在同名关系。（该比较不区分大小写。）

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.AddRange 方法

DataRelationCollection
.
.
::
.
AddRange 方法
DataRelationCollection 类

将指定的 DataRelation 数组的元素复制到集合末尾。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub AddRange ( _
    relations As DataRelation() _
)
public virtual void AddRange(
    DataRelation[] relations
)
public:
virtual void AddRange(
    array<DataRelation^>^ relations
)
abstract AddRange :
        relations:DataRelation[] -> unit
override AddRange :
        relations:DataRelation[] -> unit

参数

relations
类型：
array<
System.Data DataRelation
>
[]
()
[]

要添加到集合中的 DataRelation 对象的数组。

如果已经调用 BeginInit，则在调用 EndInit 之前，AddRange 将不会向集合添加任何对象。当调用 EndInit 时，将使用在最近一次对 AddRange 的调用中指定的项填充集合。如果在 BeginInit / EndInit 序列中多次调用了 AddRange，则只添加在最近一次对 AddRange 的调用中指定的那些项。 如果已经调用 BeginInit，则在调用 EndInit 之前，AddRange 将不会向集合添加任何对象。当调用 EndInit 时，将使用在最近一次对 AddRange 的调用中指定的项填充集合。如果在 BeginInit / EndInit 序列中多次调用了 AddRange，则只添加在最近一次对 AddRange 的调用中指定的那些项。 如果已经调用 BeginInit，则在调用 EndInit 之前，AddRange 将不会向集合添加任何对象。当调用 EndInit 时，将使用在最近一次对 AddRange 的调用中指定的项填充集合。如果在 BeginInit / EndInit 序列中多次调用了 AddRange，则只添加在最近一次对 AddRange 的调用中指定的那些项。

Public Shared Sub AddRelations(dataSet As DataSet)
    Dim customerOrders As DataRelation = _
        New DataRelation("CustomerOrders", _
        dataSet.Tables("Customers").Columns("customerId"), _
        dataSet.Tables("Orders").Columns("customerId"))
    Dim orderDetails As DataRelation = _
        New DataRelation("OrderDetail", _
        dataSet.Tables("Orders").Columns("orderId"), _
        dataSet.Tables("OrderDetails").Columns("orderId"))

    dataSet.Relations.AddRange(New DataRelation() _
        {customerOrders, orderDetails})

    ' Display names of all relations.
    Dim relation As DataRelation
    For Each relation In dataSet.Relations
      Console.WriteLine(relation.RelationName.ToString())
    Next
End Sub

public static void AddRelations(DataSet dataSet)
{
    DataRelation customerOrders =
        new DataRelation("CustomerOrders",
        dataSet.Tables["Customers"].Columns["customerId"],
        dataSet.Tables["Orders"].Columns["customerId"]);

    DataRelation orderDetails =
        new DataRelation("OrderDetail",
        dataSet.Tables["Orders"].Columns["orderId"],
        dataSet.Tables["OrderDetails"].Columns["orderId"]);

    dataSet.Relations.AddRange(new DataRelation[]
        {customerOrders, orderDetails});

    // Display names of all relations.
    foreach (DataRelation relation in dataSet.Relations)
        Console.WriteLine(relation.RelationName.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.CanRemove 方法

DataRelationCollection
.
.
::
.
CanRemove 方法
DataRelationCollection 类

验证是否可以将指定的 DataRelation 从集合中移除。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function CanRemove ( _
    relation As DataRelation _
) As Boolean
public virtual bool CanRemove(
    DataRelation relation
)
public:
virtual bool CanRemove(
    DataRelation^ relation
)
abstract CanRemove :
        relation:DataRelation -> bool
override CanRemove :
        relation:DataRelation -> bool

参数

relation
类型： System.Data DataRelation
要对其执行检查的关系。

返回值

类型： System Boolean
如果可以移除 DataRelation，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Clear 方法

DataRelationCollection
.
.
::
.
Clear 方法
DataRelationCollection 类

清除集合的所有关系。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub Clear
public virtual void Clear()
public:
virtual void Clear()
abstract Clear : unit -> unit
override Clear : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Contains 方法

DataRelationCollection
.
.
::
.
Contains 方法
DataRelationCollection 类

验证集合中是否存在具有特定名称（不区分大小写）的 DataRelation。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Contains ( _
    name As String _
) As Boolean
public virtual bool Contains(
    string name
)
public:
virtual bool Contains(
    String^ name
)
abstract Contains :
        name:string -> bool
override Contains :
        name:string -> bool

参数

name
类型： System String
要查找的关系的名称。

返回值

类型： System Boolean
如果存在具有指定名称的关系，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.CopyTo 方法

DataRelationCollection
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelationCollection 类

复制 DataRelation 对象的集合。

名称 说明
页首

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.CopyTo 方法 ( array<DataRelation >[]()[], Int32)

DataRelationCollection
.
.
::
.
CopyTo 方法 (
array<
DataRelation
>
[]
()
[]
, Int32)
DataRelationCollection 类

从指定的索引开始复制 DataRelation 对象的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As DataRelation(), _
    index As Integer _
)
public void CopyTo(
    DataRelation[] array,
    int index
)
public:
void CopyTo(
    array<DataRelation^>^ array,
    int index
)
member CopyTo :
        array:DataRelation[] *
        index:int -> unit

参数

array
类型：
array<
System.Data DataRelation
>
[]
()
[]

该集合要复制到的 DataRelation 对象的数组。
index
类型： System Int32
从其开始的索引。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
CopyTo 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.GetDataSet 方法

DataRelationCollection
.
.
::
.
GetDataSet 方法
DataRelationCollection 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

此方法支持 .NET Framework 基础结构，不应通过代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function GetDataSet As DataSet
protected abstract DataSet GetDataSet()
protected:
virtual DataSet^ GetDataSet() abstract
abstract GetDataSet : unit -> DataSet

返回值

类型： System.Data DataSet
引用的数据集。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间


DataRelationCollection ..::.IndexOf 方法

DataRelationCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelationCollection 类

获取指定数据关系的索引。

名称 说明
页首

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.IndexOf 方法 (DataRelation)

DataRelationCollection
.
.
::
.
IndexOf 方法 (DataRelation)
DataRelationCollection 类

获取指定 DataRelation 对象的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function IndexOf ( _
    relation As DataRelation _
) As Integer
public virtual int IndexOf(
    DataRelation relation
)
public:
virtual int IndexOf(
    DataRelation^ relation
)
abstract IndexOf :
        relation:DataRelation -> int
override IndexOf :
        relation:DataRelation -> int

参数

relation
类型： System.Data DataRelation
要搜索的关系。

返回值

类型： System Int32
该关系的从 0 开始的索引；或者如果在该集合中找不到该关系，则为 -1。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
IndexOf 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.IndexOf 方法 (String)

DataRelationCollection
.
.
::
.
IndexOf 方法 (String)
DataRelationCollection 类

获取按名称指定的 DataRelation 的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function IndexOf ( _
    relationName As String _
) As Integer
public virtual int IndexOf(
    string relationName
)
public:
virtual int IndexOf(
    String^ relationName
)
abstract IndexOf :
        relationName:string -> int
override IndexOf :
        relationName:string -> int

参数

relationName
类型： System String
要查找的关系的名称。

返回值

类型： System Int32
具有指定名称的关系的从零开始的索引；或者如果集合中不存在该关系，则为 -1。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
IndexOf 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.OnCollectionChanged 方法

DataRelationCollection
.
.
::
.
OnCollectionChanged 方法
DataRelationCollection 类

引发 CollectionChanged 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnCollectionChanged ( _
    ccevent As CollectionChangeEventArgs _
)
protected virtual void OnCollectionChanged(
    CollectionChangeEventArgs ccevent
)
protected:
virtual void OnCollectionChanged(
    CollectionChangeEventArgs^ ccevent
)
abstract OnCollectionChanged :
        ccevent:CollectionChangeEventArgs -> unit
override OnCollectionChanged :
        ccevent:CollectionChangeEventArgs -> unit

参数

ccevent
类型： System.ComponentModel CollectionChangeEventArgs
包含事件数据的 CollectionChangeEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

当在继承类中重写 OnCollectionChanged 时，请确保调用基类的 OnCollectionChanged 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.OnCollectionChanging 方法

DataRelationCollection
.
.
::
.
OnCollectionChanging 方法
DataRelationCollection 类

引发 CollectionChanged 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnCollectionChanging ( _
    ccevent As CollectionChangeEventArgs _
)
protected virtual void OnCollectionChanging(
    CollectionChangeEventArgs ccevent
)
protected:
virtual void OnCollectionChanging(
    CollectionChangeEventArgs^ ccevent
)
abstract OnCollectionChanging :
        ccevent:CollectionChangeEventArgs -> unit
override OnCollectionChanging :
        ccevent:CollectionChangeEventArgs -> unit

参数

ccevent
类型： System.ComponentModel CollectionChangeEventArgs
包含事件数据的 CollectionChangeEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

当在继承类中重写 OnCollectionChanging 时，请确保调用基类的 OnCollectionChanging 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Remove 方法

DataRelationCollection
.
.
::
.
Remove 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelationCollection 类

从集合中移除指定的关系。

名称 说明
页首

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Remove 方法 (DataRelation)

DataRelationCollection
.
.
::
.
Remove 方法 (DataRelation)
DataRelationCollection 类

从集合中移除指定的关系。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    relation As DataRelation _
)
public void Remove(
    DataRelation relation
)
public:
void Remove(
    DataRelation^ relation
)
member Remove :
        relation:DataRelation -> unit

参数

relation
类型： System.Data DataRelation
要移除的关系。
异常 | 条件
ArgumentNullException | 关系为空值。
ArgumentException | 关系不属于该集合。

如果移除操作成功，则将激发 CollectionChanged 事件。请注意，移除该关系并不移除任何关联的约束对象。 如果移除操作成功，则将激发 CollectionChanged 事件。请注意，移除该关系并不移除任何关联的约束对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Remove 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Remove 方法 (String)

DataRelationCollection
.
.
::
.
Remove 方法 (String)
DataRelationCollection 类

从集合中移除具有指定名称的关系。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    name As String _
)
public void Remove(
    string name
)
public:
void Remove(
    String^ name
)
member Remove :
        name:string -> unit

参数

name
类型： System String
要移除的关系的名称。
异常 | 条件
IndexOutOfRangeException | 该集合中没有具有指定名称的关系。

如果移除操作成功，则将激发 CollectionChanged 事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Remove 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.RemoveAt 方法

DataRelationCollection
.
.
::
.
RemoveAt 方法
DataRelationCollection 类

从集合中移除指定索引位置的关系。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub RemoveAt ( _
    index As Integer _
)
public void RemoveAt(
    int index
)
public:
void RemoveAt(
    int index
)
member RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的关系的索引。
异常 | 条件
ArgumentException | 该集合在指定的索引位置没有关系。

如果移除操作成功，则将激发 CollectionChanged 事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.RemoveCore 方法

DataRelationCollection
.
.
::
.
RemoveCore 方法
DataRelationCollection 类

对指定 DataRelation 对象执行验证。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub RemoveCore ( _
    relation As DataRelation _
)
protected virtual void RemoveCore(
    DataRelation relation
)
protected:
virtual void RemoveCore(
    DataRelation^ relation
)
abstract RemoveCore :
        relation:DataRelation -> unit
override RemoveCore :
        relation:DataRelation -> unit

参数

relation
类型： System.Data DataRelation
要验证的 DataRelation 对象。
异常 | 条件
ArgumentNullException | 该集合在指定的索引位置没有关系。
ArgumentException | 指定的关系不属于此集合，或者它属于另一个集合。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection 属性

DataRelationCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelationCollection 类

DataRelationCollection 类型公开以下成员。

名称 说明
页首

参考

DataRelationCollection 类
System.Data 命名空间


DataRelationCollection ..::.Item 属性

DataRelationCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelationCollection 类

从集合中获取指定的 DataRelation。

名称 说明
页首

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Item 属性 (Int32)

DataRelationCollection
.
.
::
.
Item 属性 (Int32)
DataRelationCollection 类

获取位于指定索引位置的 DataRelation 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property Item ( _
    index As Integer _
) As DataRelation
    Get
public abstract DataRelation this[
    int index
] { get; }
public:
virtual property DataRelation^ Item[int index] {
    DataRelation^ get (int index) abstract;
}
abstract Item : DataRelation

参数

index
类型： System Int32
要查找的从零开始的索引。

属性值

类型： System.Data DataRelation
DataRelation，或者如果指定的 DataRelation 不存在，则为空值。
异常 | 条件
IndexOutOfRangeException | 索引值大于集合中项的数目。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Item 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection ..::.Item 属性 (String)

DataRelationCollection
.
.
::
.
Item 属性 (String)
DataRelationCollection 类

获取按名称指定的 DataRelation 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property Item ( _
    name As String _
) As DataRelation
    Get
public abstract DataRelation this[
    string name
] { get; }
public:
virtual property DataRelation^ Item[String^ name] {
    DataRelation^ get (String^ name) abstract;
}
abstract Item : DataRelation

参数

name
类型： System String
要查找的关系的名称。

属性值

类型： System.Data DataRelation
命名的 DataRelation，或者如果指定的 DataRelation 不存在，则为空值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
Item 重载
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRelationCollection 事件

DataRelationCollection 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRelationCollection 类

DataRelationCollection 类型公开以下成员。

名称 说明
页首

参考

DataRelationCollection 类
System.Data 命名空间


DataRelationCollection ..::.CollectionChanged 事件

DataRelationCollection
.
.
::
.
CollectionChanged 事件
DataRelationCollection 类

在集合更改后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event CollectionChanged As CollectionChangeEventHandler
public event CollectionChangeEventHandler CollectionChanged
public:
 event CollectionChangeEventHandler^ CollectionChanged {
    void add (CollectionChangeEventHandler^ value);
    void remove (CollectionChangeEventHandler^ value);
}
member CollectionChanged : IEvent<CollectionChangeEventHandler,
    CollectionChangeEventArgs>

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRelationCollection 类
DataRelationCollection 成员
System.Data 命名空间

其他资源

添加 DataRelation (ADO.NET)
导航 DataRelation (ADO.NET)


DataRow 类

DataRow 类
成员

表示 DataTable 中的一行数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataRow
public class DataRow
public ref class DataRow
type DataRow =  class end

DataRow 和 DataColumn 对象是 DataTable 的主要组件。使用 DataRow 对象及其属性和方法检索、评估、插入、删除和更新 DataTable 中的值。DataRowCollection 表示 DataTable 中的实际 DataRow 对象，DataColumnCollection 中包含用于描述 DataTable 的架构的 DataColumn 对象。使用重载的 Item 属性返回或设置 DataColumn 的值。 DataRow 和 DataColumn 对象是 DataTable 的主要组件。使用 DataRow 对象及其属性和方法检索、评估、插入、删除和更新 DataTable 中的值。DataRowCollection 表示 DataTable 中的实际 DataRow 对象，DataColumnCollection 中包含用于描述 DataTable 的架构的 DataColumn 对象。使用重载的 Item 属性返回或设置 DataColumn 的值。 DataRow 和 DataColumn 对象是 DataTable 的主要组件。使用 DataRow 对象及其属性和方法检索、评估、插入、删除和更新 DataTable 中的值。DataRowCollection 表示 DataTable 中的实际 DataRow 对象，DataColumnCollection 中包含用于描述 DataTable 的架构的 DataColumn 对象。使用重载的 Item 属性返回或设置 DataColumn 的值。 DataRow 和 DataColumn 对象是 DataTable 的主要组件。使用 DataRow 对象及其属性和方法检索、评估、插入、删除和更新 DataTable 中的值。DataRowCollection 表示 DataTable 中的实际 DataRow 对象，DataColumnCollection 中包含用于描述 DataTable 的架构的 DataColumn 对象。使用重载的 Item 属性返回或设置 DataColumn 的值。

使用 HasVersion 和 IsNull 属性确定特定行值的状态，使用 RowState 属性确定行相对于它的父级 DataTable 的状态。

若要创建新的 DataRow，请使用 DataTable 对象的 NewRow 方法。创建新的 DataRow 之后，请使用 Add 方法将新的 DataRow 添加到 DataRowCollection 中。最后，调用 DataTable 对象的 AcceptChanges 方法以确认是否已添加。有关将数据添加到 DataTable 中的更多信息，请参见 向数据表中添加数据。 若要创建新的 DataRow，请使用 DataTable 对象的 NewRow 方法。创建新的 DataRow 之后，请使用 Add 方法将新的 DataRow 添加到 DataRowCollection 中。最后，调用 DataTable 对象的 AcceptChanges 方法以确认是否已添加。有关将数据添加到 DataTable 中的更多信息，请参见 向数据表中添加数据。 若要创建新的 DataRow，请使用 DataTable 对象的 NewRow 方法。创建新的 DataRow 之后，请使用 Add 方法将新的 DataRow 添加到 DataRowCollection 中。最后，调用 DataTable 对象的 AcceptChanges 方法以确认是否已添加。有关将数据添加到 DataTable 中的更多信息，请参见 向数据表中添加数据。 若要创建新的 DataRow，请使用 DataTable 对象的 NewRow 方法。创建新的 DataRow 之后，请使用 Add 方法将新的 DataRow 添加到 DataRowCollection 中。最后，调用 DataTable 对象的 AcceptChanges 方法以确认是否已添加。有关将数据添加到 DataTable 中的更多信息，请参见 向数据表中添加数据。

您可通过调用 DataRowCollection 的 Remove 方法或调用 DataRow 对象的 Delete 方法，从 DataRowCollection 中删除 DataRow。Remove 方法将行从集合中移除。与此相反，Delete 标记要移除的 DataRow。在调用 AcceptChanges 方法时发生实际移除。通过调用 Delete，您可在实际删除行之前以编程方式检查哪些行被标记为移除。有关更多信息，请参见 DataRow 删除。 您可通过调用 DataRowCollection 的 Remove 方法或调用 DataRow 对象的 Delete 方法，从 DataRowCollection 中删除 DataRow。Remove 方法将行从集合中移除。与此相反，Delete 标记要移除的 DataRow。在调用 AcceptChanges 方法时发生实际移除。通过调用 Delete，您可在实际删除行之前以编程方式检查哪些行被标记为移除。有关更多信息，请参见 DataRow 删除。 您可通过调用 DataRowCollection 的 Remove 方法或调用 DataRow 对象的 Delete 方法，从 DataRowCollection 中删除 DataRow。Remove 方法将行从集合中移除。与此相反，Delete 标记要移除的 DataRow。在调用 AcceptChanges 方法时发生实际移除。通过调用 Delete，您可在实际删除行之前以编程方式检查哪些行被标记为移除。有关更多信息，请参见 DataRow 删除。 您可通过调用 DataRowCollection 的 Remove 方法或调用 DataRow 对象的 Delete 方法，从 DataRowCollection 中删除 DataRow。Remove 方法将行从集合中移除。与此相反，Delete 标记要移除的 DataRow。在调用 AcceptChanges 方法时发生实际移除。通过调用 Delete，您可在实际删除行之前以编程方式检查哪些行被标记为移除。有关更多信息，请参见 DataRow 删除。 您可通过调用 DataRowCollection 的 Remove 方法或调用 DataRow 对象的 Delete 方法，从 DataRowCollection 中删除 DataRow。Remove 方法将行从集合中移除。与此相反，Delete 标记要移除的 DataRow。在调用 AcceptChanges 方法时发生实际移除。通过调用 Delete，您可在实际删除行之前以编程方式检查哪些行被标记为移除。有关更多信息，请参见 DataRow 删除。 您可通过调用 DataRowCollection 的 Remove 方法或调用 DataRow 对象的 Delete 方法，从 DataRowCollection 中删除 DataRow。Remove 方法将行从集合中移除。与此相反，Delete 标记要移除的 DataRow。在调用 AcceptChanges 方法时发生实际移除。通过调用 Delete，您可在实际删除行之前以编程方式检查哪些行被标记为移除。有关更多信息，请参见 DataRow 删除。

下面的示例通过调用 DataTable 对象的 NewRow 方法创建新的 DataRow。

Private Sub CreateNewDataRow()
    ' Use the MakeTable function below to create a new table.
    Dim table As DataTable
    table = MakeNamesTable()

    ' Once a table has been created, use the
    ' NewRow to create a DataRow.
    Dim row As DataRow
    row = table.NewRow()

    ' Then add the new row to the collection.
    row("fName") = "John"
    row("lName") = "Smith"
    table.Rows.Add(row)

    Dim column As DataColumn
    For Each column in table.Columns
       Console.WriteLine(column.ColumnName)
    Next
    DataGrid1.DataSource=table
 End Sub

 Private Function MakeNamesTable() As DataTable
    ' Create a new DataTable titled 'Names.'
    Dim namesTable As DataTable = new DataTable("Names")

    ' Add three column objects to the table.
    Dim idColumn As DataColumn = new  DataColumn()
    idColumn.DataType = System.Type.GetType("System.Int32")
    idColumn.ColumnName = "id"
    idColumn.AutoIncrement = True
    namesTable.Columns.Add(idColumn)

    Dim fNameColumn As DataColumn = New DataColumn()
    fNameColumn.DataType = System.Type.GetType("System.String")
    fNameColumn.ColumnName = "Fname"
    fNameColumn.DefaultValue = "Fname"
    namesTable.Columns.Add(fNameColumn)

    Dim lNameColumn As DataColumn = new DataColumn()
    lNameColumn.DataType = System.Type.GetType("System.String")
    lNameColumn.ColumnName = "LName"
    namesTable.Columns.Add(lNameColumn)

    ' Create an array for DataColumn objects.
    Dim keys(0) As DataColumn
    keys(0) = idColumn
    namesTable.PrimaryKey = keys

    ' Return the new DataTable.
    MakeNamesTable = namesTable
 End Function

private void CreateNewDataRow()
{
    // Use the MakeTable function below to create a new table.
    DataTable table;
    table = MakeNamesTable();

    // Once a table has been created, use the
    // NewRow to create a DataRow.
    DataRow row;
    row = table.NewRow();

    // Then add the new row to the collection.
    row["fName"] = "John";
    row["lName"] = "Smith";
    table.Rows.Add(row);

    foreach(DataColumn column in table.Columns)
        Console.WriteLine(column.ColumnName);
    dataGrid1.DataSource=table;
}

private DataTable MakeNamesTable()
{
    // Create a new DataTable titled 'Names.'
    DataTable namesTable = new DataTable("Names");

    // Add three column objects to the table.
    DataColumn idColumn = new  DataColumn();
    idColumn.DataType = System.Type.GetType("System.Int32");
    idColumn.ColumnName = "id";
    idColumn.AutoIncrement = true;
    namesTable.Columns.Add(idColumn);

    DataColumn fNameColumn = new DataColumn();
    fNameColumn.DataType = System.Type.GetType("System.String");
    fNameColumn.ColumnName = "Fname";
    fNameColumn.DefaultValue = "Fname";
    namesTable.Columns.Add(fNameColumn);

    DataColumn lNameColumn = new DataColumn();
    lNameColumn.DataType = System.Type.GetType("System.String");
    lNameColumn.ColumnName = "LName";
    namesTable.Columns.Add(lNameColumn);

    // Create an array for DataColumn objects.
    DataColumn [] keys = new DataColumn [1];
    keys[0] = idColumn;
    namesTable.PrimaryKey = keys;

    // Return the new DataTable.
    return namesTable;
}

System.Data System.Data..::.DataRowDataRow

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 成员
System.Data 命名空间
AcceptChanges
Add
DataColumnCollection
DataColumn
DataRowView
DataTable
HasVersion
IsNull
Item
NewRow
DataRowCollection

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataRow 成员

DataRow 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

表示 DataTable 中的一行数据。

DataRow 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataRow 类
System.Data 命名空间


DataRow 构造函数

DataRow 构造函数
DataRow 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

初始化 DataRow 的新实例。从生成器中构造行。仅供内部使用。 初始化 DataRow 的新实例。从生成器中构造行。仅供内部使用。 初始化 DataRow 的新实例。从生成器中构造行。仅供内部使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Sub New ( _
    builder As DataRowBuilder _
)
protected internal DataRow(
    DataRowBuilder builder
)
protected public:
DataRow(
    DataRowBuilder^ builder
)
new :
        builder:DataRowBuilder -> DataRow

参数

builder
类型： System.Data DataRowBuilder
生成器

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow 方法

DataRow 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

DataRow 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataRow 类
System.Data 命名空间


DataRow ..::.AcceptChanges 方法

DataRow
.
.
::
.
AcceptChanges 方法
DataRow 类

提交自上次调用 AcceptChanges 以来对该行进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub AcceptChanges
public void AcceptChanges()
public:
void AcceptChanges()
member AcceptChanges : unit -> unit

异常 | 条件
RowNotInTableException | 此行不属于该表。

在调用 AcceptChanges 时，EndEdit 方法被隐式调用，以便终止任何编辑。如果行的 RowState 原来是“Added”或“Modified”，则 RowState 将变成“Unchanged”。如果 RowState 是“删除”，则该行将被移除。 在调用 AcceptChanges 时，EndEdit 方法被隐式调用，以便终止任何编辑。如果行的 RowState 原来是“Added”或“Modified”，则 RowState 将变成“Unchanged”。如果 RowState 是“删除”，则该行将被移除。 在调用 AcceptChanges 时，EndEdit 方法被隐式调用，以便终止任何编辑。如果行的 RowState 原来是“Added”或“Modified”，则 RowState 将变成“Unchanged”。如果 RowState 是“删除”，则该行将被移除。

有关更多信息，请参见 BeginEdit 方法。

DataTable 类还具有 AcceptChanges 方法，此方法会影响整个表中所做的更改。有关如何接受和拒绝对单一数据行的更改的更多信息及其演示代码示例，请参见 AcceptChanges 和 RejectChanges。 DataTable 类还具有 AcceptChanges 方法，此方法会影响整个表中所做的更改。有关如何接受和拒绝对单一数据行的更改的更多信息及其演示代码示例，请参见 AcceptChanges 和 RejectChanges。

下面的示例首先创建有一个列的新 DataTable，然后创建单个 DataRow。当创建、添加、修改和删除 DataRow 时，将输出其 RowState。 下面的示例首先创建有一个列的新 DataTable，然后创建单个 DataRow。当创建、添加、修改和删除 DataRow 时，将输出其 RowState。

Private Sub DemonstrateAcceptChanges()
    ' Run a function to create a DataTable with one column.
    Dim table As DataTable = MakeTable()
    Dim row As DataRow

    ' Create a new DataRow.
    row = table.NewRow()
    ' Detached row.
    Console.WriteLine("New Row " & row.RowState)

    table.Rows.Add(row)
    ' New row.
    Console.WriteLine("AddRow " & row.RowState)

    table.AcceptChanges()
    ' Unchanged row.
    Console.WriteLine("AcceptChanges " & row.RowState)

    row("FirstName") = "Scott"
    ' Modified row.
    Console.WriteLine("Modified " & row.RowState)

    row.Delete()
    ' Deleted row.
    Console.WriteLine("Deleted " & row.RowState)
 End Sub

 Private Function MakeTable()As DataTable
    ' Make a simple table with one column.
    Dim table As DataTable = New DataTable("table")
    Dim fnameColumn As DataColumn = New DataColumn( _
        "FirstName", Type.GetType("System.String"))
    table.Columns.Add(fnameColumn)
    MakeTable = table
 End Function

private void DemonstrateAcceptChanges()
{
    //Run a function to create a DataTable with one column.
    DataTable table = MakeTable();
    DataRow row;

    // Create a new DataRow.
    row = table.NewRow();
    // Detached row.
    Console.WriteLine("New Row " + row.RowState);

    table.Rows.Add(row);
    // New row.
    Console.WriteLine("AddRow " + row.RowState);

    table.AcceptChanges();
    // Unchanged row.
    Console.WriteLine("AcceptChanges " + row.RowState);

    row["FirstName"] = "Scott";
    // Modified row.
    Console.WriteLine("Modified " + row.RowState);

    row.Delete();
    // Deleted row.
    Console.WriteLine("Deleted " + row.RowState);
}

private DataTable MakeTable()
{
    // Make a simple table with one column.
    DataTable table = new DataTable("table");
    DataColumn fnameColumn = new DataColumn(
        "FirstName", Type.GetType("System.String"));
    table.Columns.Add(fnameColumn);
    return table;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
AcceptChanges
BeginEdit
CancelEdit
DataViewRowState
DataTable
EndEdit
HasVersion
Item
RowState

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataRow ..::.BeginEdit 方法

DataRow
.
.
::
.
BeginEdit 方法
DataRow 类

对 DataRow 对象开始编辑操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub BeginEdit
public void BeginEdit()
public:
void BeginEdit()
member BeginEdit : unit -> unit

异常 | 条件
InRowChangingEventException | 在 RowChanging 事件中已调用该方法。
DeletedRowInaccessibleException | 对已删除的行调用该方法。

使用 BeginEdit 方法将 DataRow 置于编辑模式。在此模式下，将事件临时挂起，以便允许用户在不触发验证规则的情况下对多行进行更改。例如，如果需要确保总数列的值等于某行中借贷列的值，则可以将每一行都置入编辑模式，以便在用户尝试提交值之前挂起对行值的验证。 使用 BeginEdit 方法将 DataRow 置于编辑模式。在此模式下，将事件临时挂起，以便允许用户在不触发验证规则的情况下对多行进行更改。例如，如果需要确保总数列的值等于某行中借贷列的值，则可以将每一行都置入编辑模式，以便在用户尝试提交值之前挂起对行值的验证。 使用 BeginEdit 方法将 DataRow 置于编辑模式。在此模式下，将事件临时挂起，以便允许用户在不触发验证规则的情况下对多行进行更改。例如，如果需要确保总数列的值等于某行中借贷列的值，则可以将每一行都置入编辑模式，以便在用户尝试提交值之前挂起对行值的验证。

BeginEdit 方法在用户更改数据绑定控件的值时被隐式调用；EndEdit 方法在您调用 DataTable 对象的 AcceptChanges 方法时被隐式调用。当处于该编辑模式时，DataRow 存储原始值和新建议值的表示形式。因此，只要尚未调用 EndEdit 方法，就可以通过传递 Item 属性的 version 参数的 DataRowVersion.Original 或 DataRowVersion.Proposed 来检索原始版本或建议版本。此时，还可通过调用 CancelEdit 方法取消任何编辑。 BeginEdit 方法在用户更改数据绑定控件的值时被隐式调用；EndEdit 方法在您调用 DataTable 对象的 AcceptChanges 方法时被隐式调用。当处于该编辑模式时，DataRow 存储原始值和新建议值的表示形式。因此，只要尚未调用 EndEdit 方法，就可以通过传递 Item 属性的 version 参数的 DataRowVersion.Original 或 DataRowVersion.Proposed 来检索原始版本或建议版本。此时，还可通过调用 CancelEdit 方法取消任何编辑。 BeginEdit 方法在用户更改数据绑定控件的值时被隐式调用；EndEdit 方法在您调用 DataTable 对象的 AcceptChanges 方法时被隐式调用。当处于该编辑模式时，DataRow 存储原始值和新建议值的表示形式。因此，只要尚未调用 EndEdit 方法，就可以通过传递 Item 属性的 version 参数的 DataRowVersion.Original 或 DataRowVersion.Proposed 来检索原始版本或建议版本。此时，还可通过调用 CancelEdit 方法取消任何编辑。 BeginEdit 方法在用户更改数据绑定控件的值时被隐式调用；EndEdit 方法在您调用 DataTable 对象的 AcceptChanges 方法时被隐式调用。当处于该编辑模式时，DataRow 存储原始值和新建议值的表示形式。因此，只要尚未调用 EndEdit 方法，就可以通过传递 Item 属性的 version 参数的 DataRowVersion.Original 或 DataRowVersion.Proposed 来检索原始版本或建议版本。此时，还可通过调用 CancelEdit 方法取消任何编辑。

若要查看行中是否包含原始值或建议值，请调用 HasVersion 方法。

说明 说明

BeginEdit 方法临时挂起 RowChanging 事件，但 delete 操作不会这样。

该示例创建一个简单的 DataTable，该表有一个 DataColumn、五个 DataRow 对象和一个 UniqueConstraint。还添加了 RowChanged 事件处理程序以监视行的值何时发生更改。在针对现有行调用 BeginEdit 之后，约束和事件被临时禁用，原始值和建议值将打印出来。BeginEdit 被再次调用，以便为两行设置相同的值。当调用 EndEdit 时，将针对相同的值实施 UniqueConstraint。 该示例创建一个简单的 DataTable，该表有一个 DataColumn、五个 DataRow 对象和一个 UniqueConstraint。还添加了 RowChanged 事件处理程序以监视行的值何时发生更改。在针对现有行调用 BeginEdit 之后，约束和事件被临时禁用，原始值和建议值将打印出来。BeginEdit 被再次调用，以便为两行设置相同的值。当调用 EndEdit 时，将针对相同的值实施 UniqueConstraint。 该示例创建一个简单的 DataTable，该表有一个 DataColumn、五个 DataRow 对象和一个 UniqueConstraint。还添加了 RowChanged 事件处理程序以监视行的值何时发生更改。在针对现有行调用 BeginEdit 之后，约束和事件被临时禁用，原始值和建议值将打印出来。BeginEdit 被再次调用，以便为两行设置相同的值。当调用 EndEdit 时，将针对相同的值实施 UniqueConstraint。 该示例创建一个简单的 DataTable，该表有一个 DataColumn、五个 DataRow 对象和一个 UniqueConstraint。还添加了 RowChanged 事件处理程序以监视行的值何时发生更改。在针对现有行调用 BeginEdit 之后，约束和事件被临时禁用，原始值和建议值将打印出来。BeginEdit 被再次调用，以便为两行设置相同的值。当调用 EndEdit 时，将针对相同的值实施 UniqueConstraint。 该示例创建一个简单的 DataTable，该表有一个 DataColumn、五个 DataRow 对象和一个 UniqueConstraint。还添加了 RowChanged 事件处理程序以监视行的值何时发生更改。在针对现有行调用 BeginEdit 之后，约束和事件被临时禁用，原始值和建议值将打印出来。BeginEdit 被再次调用，以便为两行设置相同的值。当调用 EndEdit 时，将针对相同的值实施 UniqueConstraint。

 Private Sub DemonstrateRowBeginEdit()
     Dim table As New DataTable("table1")
     Dim column As New DataColumn("col1", Type.GetType("System.Int32"))
     AddHandler table.RowChanged, AddressOf Row_Changed
     table.Columns.Add(column)

     ' Add a UniqueConstraint to the table.
     table.Constraints.Add(New UniqueConstraint(column))

     ' Add five rows.
     Dim newRow As DataRow

     Dim i As Integer
     For i = 0 To 4
         ' RowChanged event will occur for every addition.
         newRow = table.NewRow()
         newRow(0) = i
         table.Rows.Add(newRow)
     Next i

     ' AcceptChanges.
     table.AcceptChanges()

     ' Invoke BeginEdit on each.
     Console.WriteLine(ControlChars.Cr _
        & " Begin Edit and print original and proposed values " _
        & ControlChars.Cr)
     Dim row As DataRow
     For Each row In  table.Rows
         row.BeginEdit()
         row(0) = CInt(row(0)) & 10
         Console.Write(ControlChars.Tab & " Original " & ControlChars.Tab _
            & row(0, DataRowVersion.Original).ToString())
         Console.Write(ControlChars.Tab & " Proposed " & ControlChars.Tab _
            & row(0, DataRowVersion.Proposed).ToString() & ControlChars.Cr)
     Next row
     Console.WriteLine(ControlChars.Cr)

     ' Accept changes
     table.AcceptChanges()

     ' Change two rows to identical values after invoking BeginEdit.
     table.Rows(0).BeginEdit()
     table.Rows(1).BeginEdit()
     table.Rows(0)(0) = 100
     table.Rows(1)(0) = 100
     Try
         ' Now invoke EndEdit. This will cause the UniqueConstraint
         ' to be enforced.
         table.Rows(0).EndEdit()
         table.Rows(1).EndEdit()
     Catch e As Exception
     ' Process exception and return.
         Console.WriteLine("Exception of type {0} occurred.", _
            e.GetType().ToString())
     End Try
 End Sub

 Private Sub Row_Changed _
 (sender As Object, e As System.Data.DataRowChangeEventArgs)
     Dim table As DataTable = CType(sender, DataTable)
     Console.WriteLine("RowChanged " & e.Action.ToString() _
        & ControlChars.Tab & e.Row.ItemArray(0).ToString())
 End Sub

private void DemonstrateRowBeginEdit()
{
    DataTable table = new DataTable("table1");
    DataColumn column = new
        DataColumn("col1",Type.GetType("System.Int32"));
    table.RowChanged+=new
        DataRowChangeEventHandler(Row_Changed);
    table.Columns.Add(column);

    // Add a UniqueConstraint to the table.
    table.Constraints.Add(new UniqueConstraint(column));

    // Add five rows.
    DataRow newRow;

    for(int i = 0;i<5; i++)
    {
        // RowChanged event will occur for every addition.
        newRow= table.NewRow();
        newRow[0]= i;
        table.Rows.Add(newRow);
    }
    // AcceptChanges.
    table.AcceptChanges();

    // Invoke BeginEdit on each.
    Console.WriteLine(
        "\n Begin Edit and print original and proposed values \n");
    foreach(DataRow row in table.Rows)
    {

        row.BeginEdit();
        row[0]=(int) row[0]+10;
        Console.Write("\table Original \table" +
            row[0, DataRowVersion.Original]);
        Console.Write("\table Proposed \table" +
            row[0,DataRowVersion.Proposed] + "\n");
    }
    Console.WriteLine("\n");
    // Accept changes
    table.AcceptChanges();
    // Change two rows to identical values after invoking BeginEdit.
    table.Rows[0].BeginEdit();
    table.Rows[1].BeginEdit();
    table.Rows[0][0]= 100;
    table.Rows[1][0]=100;
    try
    {
        /* Now invoke EndEdit. This will cause the UniqueConstraint
           to be enforced.*/
        table.Rows[0].EndEdit();
        table.Rows[1].EndEdit();
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}

private void Row_Changed(object sender,
    System.Data.DataRowChangeEventArgs e)
{
    DataTable table = (DataTable)  sender;
    Console.WriteLine("RowChanged " + e.Action.ToString()
        + "\table" + e.Row.ItemArray[0]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
AcceptChanges
CancelEdit
EndEdit
HasVersion
Item
RowState

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataRow ..::.CancelEdit 方法

DataRow
.
.
::
.
CancelEdit 方法
DataRow 类

取消对该行的当前编辑。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CancelEdit
public void CancelEdit()
public:
void CancelEdit()
member CancelEdit : unit -> unit

异常 | 条件
InRowChangingEventException | 在 RowChanging 事件中已调用该方法。

有关更多信息，请参见 BeginEdit 方法。

下面的示例编辑 DataGrid 控件的最后一行中一列的值。此示例使用 BeginEdit 和 EndEdit 方法编辑列值并将更改提交到行。 下面的示例编辑 DataGrid 控件的最后一行中一列的值。此示例使用 BeginEdit 和 EndEdit 方法编辑列值并将更改提交到行。

 Private Sub AcceptOrReject(ByVal row As DataRow)
    ' Use a function to validate the row's values.
    ' If the function returns true, end the edit;
    ' otherwise cancel it.
    If ValidateRow(row) Then
       row.EndEdit()
    Else
       row.CancelEdit()
    End If
End Sub

Private Function ValidateRow(ByVal row As DataRow) As Boolean
    Dim isValid As Boolean
    ' Insert code to validate the row values.
    ' Set the isValid variable.
    ValidateRow = isValid
End Function

private void AcceptOrReject(DataRow row)
{
    // Use a function to validate the row's values.
    // If the function returns true, end the edit;
    // otherwise cancel it.
    if(ValidateRow(row))
        row.EndEdit();
    else
        row.CancelEdit();
}

private bool ValidateRow(DataRow thisRow)
{
    bool isValid = true;
    // Insert code to validate the row values.
    // Set the isValid variable.
    return isValid;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
AcceptChanges
BeginEdit
DataViewRowState
EndEdit
HasVersion
Item
RowState

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataRow ..::.ClearErrors 方法

DataRow
.
.
::
.
ClearErrors 方法
DataRow 类

清除行的错误。这包括 RowError 和用 SetColumnError 设置的错误。 清除行的错误。这包括 RowError 和用 SetColumnError 设置的错误。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ClearErrors
public void ClearErrors()
public:
void ClearErrors()
member ClearErrors : unit -> unit

使用 SetColumnError 和 GetColumnError 设置和返回单个列的错误。

设置 RowError 属性以设置应用于整行的错误。

若要确定列集合是否存在错误，请使用 HasErrors 方法。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。 若要确定列集合是否存在错误，请使用 HasErrors 方法。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。

下面的示例使用 HasErrors 来查找错误。如果该行有错误，则 GetColumnsInError 方法返回包含错误的列的数组，这些错误之后可以消除。然后，调用 ClearErrors 方法来清除所有错误。 下面的示例使用 HasErrors 来查找错误。如果该行有错误，则 GetColumnsInError 方法返回包含错误的列的数组，这些错误之后可以消除。然后，调用 ClearErrors 方法来清除所有错误。 下面的示例使用 HasErrors 来查找错误。如果该行有错误，则 GetColumnsInError 方法返回包含错误的列的数组，这些错误之后可以消除。然后，调用 ClearErrors 方法来清除所有错误。

Private Sub GetAllErrs(ByVal row As DataRow)
    ' Declare an array variable for DataColumn objects.
    Dim colArr() As DataColumn

    ' If the Row has errors, check use GetColumnsInError.
    Dim i As Integer
    If row.HasErrors Then
       ' Get the array of columns in error.
       colArr = row.GetColumnsInError()
       For i = 0 to colArr.GetUpperBound(0)
          ' Insert code to fix errors on each column.
          Console.WriteLine(colArr(i).ColumnName)
       Next i

    ' Clear errors after reconciling.
    row.ClearErrors()
    End If
 End Sub

private void GetAllErrs(DataRow row)
{
    // Declare an array variable for DataColumn objects.
    DataColumn[] colArr;
    // If the Row has errors, check use GetColumnsInError.
    if(row.HasErrors)
    {
        // Get the array of columns in error.
        colArr = row.GetColumnsInError();
        for(int i = 0; i < colArr.Length; i++)
        {
            // Insert code to fix errors on each column.
            Console.WriteLine(colArr[i].ColumnName);
        }
        // Clear errors after reconciling.
        row.ClearErrors();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
DataColumnCollection
GetColumnError
GetColumnsInError
HasErrors
SetColumnError
RowError

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataRow ..::.Delete 方法

DataRow
.
.
::
.
Delete 方法
DataRow 类

删除 DataRow。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Delete
public void Delete()
public:
void Delete()
member Delete : unit -> unit

异常 | 条件
DeletedRowInaccessibleException | DataRow 已被删除。

如果该行的 RowState 为 Added，则在调用 AcceptChanges 时，RowState 将变为 Detached，并且将从表中移除该行。

在对现有的 DataRow 使用 Delete 方法后，RowState 将变为 Deleted。在调用 AcceptChanges 之前，它一直保持为 Deleted。此时，将从表中移除 DataRow。 在对现有的 DataRow 使用 Delete 方法后，RowState 将变为 Deleted。在调用 AcceptChanges 之前，它一直保持为 Deleted。此时，将从表中移除 DataRow。 在对现有的 DataRow 使用 Delete 方法后，RowState 将变为 Deleted。在调用 AcceptChanges 之前，它一直保持为 Deleted。此时，将从表中移除 DataRow。

可通过调用 RejectChanges 取消删除行。

说明 说明

BeginEdit 方法临时挂起 RowChanging 事件，但删除操作不会这样。

下面的示例创建一个简单的 DataTable，该表有两列、十行。在用 Delete 方法删除几个 DataRow 项之后，通过调用 RejectChanges 取消删除其中的一行。 下面的示例创建一个简单的 DataTable，该表有两列、十行。在用 Delete 方法删除几个 DataRow 项之后，通过调用 RejectChanges 取消删除其中的一行。

 Private Sub DemonstrateDeleteRow()
     ' Create a simple DataTable with two columns and ten rows.
     Dim table As New DataTable("table")
     Dim idColumn As New DataColumn("id", Type.GetType("System.Int32"))
     idColumn.AutoIncrement = True
     Dim itemColumn As New DataColumn("item", Type.GetType("System.String"))
     table.Columns.Add(idColumn)
     table.Columns.Add(itemColumn)

     ' Add ten rows.
     Dim newRow As DataRow

     Dim i As Integer
     For i = 0 To 9
         newRow = table.NewRow()
         newRow("item") = "Item " & i.ToString()
         table.Rows.Add(newRow)
     Next i
     table.AcceptChanges()

     Dim itemColumns As DataRowCollection = table.Rows
     itemColumns(0).Delete()
     itemColumns(2).Delete()
     itemColumns(3).Delete()
     itemColumns(5).Delete()
     Console.WriteLine(itemColumns(3).RowState.ToString())

     ' Reject changes on one deletion.
     itemColumns(3).RejectChanges()

     ' Change the value of the column so it stands out.
     itemColumns(3)("item") = "Deleted, Undeleted, Edited"

     ' Accept changes on others.
     table.AcceptChanges()

     ' Print the remaining row values.
     Dim row As DataRow
     For Each row In  table.Rows
         Console.WriteLine(row(0).ToString() & ControlChars.Tab _
            & row(1).ToString())
     Next row
End Sub

private void DemonstrateDeleteRow()
{
    // Create a simple DataTable with two columns and ten rows.
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("item",
        Type.GetType("System.String"));
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // Add ten rows.
    DataRow newRow;

    for(int i = 0; i <10; i++)
    {
        newRow = table.NewRow();
        newRow["item"] = "Item " + i;
        table.Rows.Add(newRow);
    }
    table.AcceptChanges();

    DataRowCollection itemColumns = table.Rows;
    itemColumns[0].Delete();
    itemColumns[2].Delete();
    itemColumns[3].Delete();
    itemColumns[5].Delete();
    Console.WriteLine(itemColumns[3].RowState.ToString());

    // Reject changes on one deletion.
    itemColumns[3].RejectChanges();

    // Change the value of the column so it stands out.
    itemColumns[3]["item"] = "Deleted, Undeleted, Edited";

    // Accept changes on others.
    table.AcceptChanges();

    // Print the remaining row values.
    foreach(DataRow row in table.Rows)
    {
        Console.WriteLine(row[0] + "\table" + row[1]);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
DataRowState
DataViewRowState
RowState

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataRow ..::.EndEdit 方法

DataRow
.
.
::
.
EndEdit 方法
DataRow 类

终止发生在该行的编辑。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub EndEdit
public void EndEdit()
public:
void EndEdit()
member EndEdit : unit -> unit

异常 | 条件
InRowChangingEventException | 在 RowChanging 事件中已调用该方法。
ConstraintException | 该编辑破坏了约束。
ReadOnlyException | 此行属于该表，该编辑尝试更改只读列的值。
NoNullAllowedException | 该编辑尝试将 null 值放在 AllowDBNull 为假的列中。

设置该属性时，如果 RowChanging 事件中发生异常，则会生成异常。

下面的示例在验证函数返回 true 时使用 EndEdit 方法结束对 DataRow 值的编辑。

 Private Sub AcceptOrReject(ByVal row As DataRow)
    ' Use a function to validate the row's values.
    ' If the function returns true, end the edit;
    ' otherwise cancel it.
    If ValidateRow(row) Then
       row.EndEdit()
    Else
       row.CancelEdit()
    End If
End Sub

Private Function ValidateRow(ByVal row As DataRow) As Boolean
    Dim isValid As Boolean
    ' Insert code to validate the row values.
    ' Set the isValid variable.
    ValidateRow = isValid
End Function

private void AcceptOrReject(DataRow row)
{
    // Use a function to validate the row's values.
    // If the function returns true, end the edit;
    // otherwise cancel it.
    if(ValidateRow(row))
        row.EndEdit();
    else
        row.CancelEdit();
}

private bool ValidateRow(DataRow thisRow)
{
    bool isValid = true;
    // Insert code to validate the row values.
    // Set the isValid variable.
    return isValid;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
AcceptChanges
AllowDBNull
BeginEdit
CancelEdit
HasVersion
Item
RowState

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataRow ..::.GetChildRows 方法

DataRow
.
.
::
.
GetChildRows 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

获取 DataRow 的子行。

名称 说明
页首

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow ..::.GetChildRows 方法 (DataRelation)

DataRow
.
.
::
.
GetChildRows 方法 (DataRelation)
DataRow 类

使用指定的 DataRelation 获取此 DataRow 的子行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetChildRows ( _
    relation As DataRelation _
) As DataRow()
public DataRow[] GetChildRows(
    DataRelation relation
)
public:
array<DataRow^>^ GetChildRows(
    DataRelation^ relation
)
member GetChildRows :
        relation:DataRelation -> DataRow[]

参数

relation
类型： System.Data DataRelation
要使用的 DataRelation。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组，或长度为零的数组。
异常 | 条件
ArgumentException | 关系和行不属于同一个表。
ArgumentNullException | relation 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RowNotInTableException | 此行不属于该表。
VersionNotFoundException | 该行不具有此版本的数据。

DataTable 还包含 DataRelation 对象的集合，该集合是由 ChildRelations 属性返回的。

下面的示例使用 GetChildRows 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。 下面的示例使用 GetChildRows 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。

Private Sub GetChildRowsFromDataRelation(table As DataTable)
    Dim relation As DataRelation
    Dim arrRows() As DataRow
    Dim row As DataRow
    Dim i As Integer
    Dim column As DataColumn

    For Each relation In table.ChildRelations
      For Each row In table.Rows
          arrRows = row.GetChildRows(relation)
          ' Print values of rows.
          For i = 0 To arrRows.GetUpperBound(0)
             For Each column in table.Columns
                Console.WriteLine(arrRows(i)(column))
             Next column
          Next i
       Next row
    Next relation
 End Sub

private void GetChildRowsFromDataRelation(DataTable table)
{
    DataRow[] arrRows;
    foreach(DataRelation relation in table.ChildRelations)
    {
        foreach(DataRow row in table.Rows)
        {
            arrRows = row.GetChildRows(relation);
            // Print values of rows.
            for(int i = 0; i < arrRows.Length; i++)
            {
                foreach(DataColumn column in table.Columns)
                {
                    Console.WriteLine(arrRows[i][column]);
                }
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetChildRows 重载
System.Data 命名空间
ChildRelations
DataRelation
GetParentRows
Relations

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataRow ..::.GetChildRows 方法 (String)

DataRow
.
.
::
.
GetChildRows 方法 (String)
DataRow 类

使用 DataRelation 的指定 RelationName 获取 DataRow 的子行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetChildRows ( _
    relationName As String _
) As DataRow()
public DataRow[] GetChildRows(
    string relationName
)
public:
array<DataRow^>^ GetChildRows(
    String^ relationName
)
member GetChildRows :
        relationName:string -> DataRow[]

参数

relationName
类型： System String
要使用的 DataRelation 的 RelationName。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组，或长度为零的数组。
异常 | 条件
ArgumentException | 关系和行不属于同一个表。
RowNotInTableException | 此行不属于该表。

DataTable 还包含 DataRelation 对象的集合，该集合是由 ChildRelations 属性返回的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetChildRows 重载
System.Data 命名空间


DataRow ..::.GetChildRows 方法 (DataRelation, DataRowVersion)

DataRow
.
.
::
.
GetChildRows 方法 (DataRelation, DataRowVersion)
DataRow 类

使用指定的 DataRelation 和 DataRowVersion 获取 DataRow 的子行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetChildRows ( _
    relation As DataRelation, _
    version As DataRowVersion _
) As DataRow()
public DataRow[] GetChildRows(
    DataRelation relation,
    DataRowVersion version
)
public:
array<DataRow^>^ GetChildRows(
    DataRelation^ relation,
    DataRowVersion version
)
member GetChildRows :
        relation:DataRelation *
        version:DataRowVersion -> DataRow[]

参数

relation
类型： System.Data DataRelation
要使用的 DataRelation。
version
类型： System.Data DataRowVersion
DataRowVersion 值之一，它指定要获取的数据的版本。可能值为 Default、Original、Current 和 Proposed。 DataRowVersion 值之一，它指定要获取的数据的版本。可能值为 Default、Original、Current 和 Proposed。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组。
异常 | 条件
ArgumentException | 关系和行不属于同一个表。
ArgumentNullException | relation 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RowNotInTableException | 此行不属于该表。
VersionNotFoundException | 该行没有所请求的 DataRowVersion。

DataTable 还包含 DataRelation 对象的集合，该集合是由 ChildRelations 属性返回的。

使用 HasVersion 属性来确定是否存在您需要的 DataRowVersion。

如果指定 Default，则使用的版本取决于调用 GetChildRows 的行的 RowState。如果调用 GetChildRows 的行的 RowState 为 Modified、New 或 Unchanged，则使用该行的 Current 版本来获取其当前版本中具有匹配值的相关子行。如果调用 GetChildRows 的行的 RowState 为 Deleted，则使用该行的 Original 版本来获取其原始版本中具有匹配值的相关子行。 如果指定 Default，则使用的版本取决于调用 GetChildRows 的行的 RowState。如果调用 GetChildRows 的行的 RowState 为 Modified、New 或 Unchanged，则使用该行的 Current 版本来获取其当前版本中具有匹配值的相关子行。如果调用 GetChildRows 的行的 RowState 为 Deleted，则使用该行的 Original 版本来获取其原始版本中具有匹配值的相关子行。 如果指定 Default，则使用的版本取决于调用 GetChildRows 的行的 RowState。如果调用 GetChildRows 的行的 RowState 为 Modified、New 或 Unchanged，则使用该行的 Current 版本来获取其当前版本中具有匹配值的相关子行。如果调用 GetChildRows 的行的 RowState 为 Deleted，则使用该行的 Original 版本来获取其原始版本中具有匹配值的相关子行。

下面的示例使用 GetChildRows 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后打印该行中具有指定版本的每一列的值。 下面的示例使用 GetChildRows 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后打印该行中具有指定版本的每一列的值。

Private Sub GetChildRowsFromDataRelation(table As DataTable)
    Dim relation As DataRelation
    Dim arrRows() As DataRow
    Dim row As DataRow
    Dim i As Integer
    Dim column As DataColumn

    For Each relation In table.ChildRelations
      For Each row In table.Rows
          arrRows = row.GetChildRows(relation, _
                DataRowVersion.Proposed)
          ' Print values of rows.
          For i = 0 To arrRows.GetUpperBound(0)
             For Each column in table.Columns
                Console.WriteLine(arrRows(i)(column))
             Next column
          Next i
       Next row
    Next relation
End Sub

private void GetChildRowsFromDataRelation(DataTable table )
{
    DataRow[] arrRows;
    foreach(DataRelation relation in table.ChildRelations)
    {
        foreach(DataRow row in table.Rows)
        {
            arrRows = row.GetChildRows(relation,
                DataRowVersion.Proposed);
            // Print values of rows.
            for(int i = 0; i < arrRows.Length; i++)
            {
                foreach(DataColumn column in table.Columns)
                {
                    Console.WriteLine(arrRows[i][column]);
                }
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetChildRows 重载
System.Data 命名空间
ChildRelations
DataRelation
DataRowVersion
GetParentRow
GetParentRows
Relations

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataRow ..::.GetChildRows 方法 (String, DataRowVersion)

DataRow
.
.
::
.
GetChildRows 方法 (String, DataRowVersion)
DataRow 类

使用 DataRelation 的指定 RelationName 和 DataRowVersion 获取 DataRow 的子行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetChildRows ( _
    relationName As String, _
    version As DataRowVersion _
) As DataRow()
public DataRow[] GetChildRows(
    string relationName,
    DataRowVersion version
)
public:
array<DataRow^>^ GetChildRows(
    String^ relationName,
    DataRowVersion version
)
member GetChildRows :
        relationName:string *
        version:DataRowVersion -> DataRow[]

参数

relationName
类型： System String
要使用的 DataRelation 的 RelationName。
version
类型： System.Data DataRowVersion
DataRowVersion 值之一，它指定要获取的数据的版本。可能值为 Default、Original、Current 和 Proposed。 DataRowVersion 值之一，它指定要获取的数据的版本。可能值为 Default、Original、Current 和 Proposed。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组，或长度为零的数组。
异常 | 条件
ArgumentException | 关系和行不属于同一个表。
ArgumentNullException | relation 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RowNotInTableException | 此行不属于该表。
VersionNotFoundException | 该行没有所请求的 DataRowVersion。

DataTable 还包含 DataRelation 对象的集合，该集合是由 ChildRelations 属性返回的。

使用 HasVersion 属性来确定是否存在您需要的 DataRowVersion。

如果指定 Default，则使用的版本取决于调用 GetChildRows 的行的 RowState。如果调用 GetChildRows 的行的 RowState 为 Modified、New 或 Unchanged，则使用该行的 Current 版本来获取其当前版本中具有匹配值的相关子行。如果调用 GetChildRows 的行的 RowState 为 Deleted，则使用该行的 Original 版本来获取其原始版本中具有匹配值的相关子行。 如果指定 Default，则使用的版本取决于调用 GetChildRows 的行的 RowState。如果调用 GetChildRows 的行的 RowState 为 Modified、New 或 Unchanged，则使用该行的 Current 版本来获取其当前版本中具有匹配值的相关子行。如果调用 GetChildRows 的行的 RowState 为 Deleted，则使用该行的 Original 版本来获取其原始版本中具有匹配值的相关子行。 如果指定 Default，则使用的版本取决于调用 GetChildRows 的行的 RowState。如果调用 GetChildRows 的行的 RowState 为 Modified、New 或 Unchanged，则使用该行的 Current 版本来获取其当前版本中具有匹配值的相关子行。如果调用 GetChildRows 的行的 RowState 为 Deleted，则使用该行的 Original 版本来获取其原始版本中具有匹配值的相关子行。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetChildRows 重载
System.Data 命名空间


DataRow ..::.GetColumnError 方法

DataRow
.
.
::
.
GetColumnError 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

获取列的错误说明。

名称 说明
页首

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow ..::.GetColumnError 方法 (DataColumn)

DataRow
.
.
::
.
GetColumnError 方法 (DataColumn)
DataRow 类

获取指定的 DataColumn 的错误说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetColumnError ( _
    column As DataColumn _
) As String
public string GetColumnError(
    DataColumn column
)
public:
String^ GetColumnError(
    DataColumn^ column
)
member GetColumnError :
        column:DataColumn -> string

参数

column
类型： System.Data DataColumn
DataColumn。

返回值

类型： System String
错误说明的文本。

使用 SetColumnError 方法设置列错误。

若要确定列集合是否存在错误，请使用 HasErrors 方法。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。或者，DataTable 的 GetErrors 方法返回所有包含错误的行。 若要确定列集合是否存在错误，请使用 HasErrors 方法。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。或者，DataTable 的 GetErrors 方法返回所有包含错误的行。 若要确定列集合是否存在错误，请使用 HasErrors 方法。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。或者，DataTable 的 GetErrors 方法返回所有包含错误的行。

若要清除列集合的所有错误，请使用 ClearErrors 方法。

下面的示例为指定的 DataRow 设置错误说明。

Private Sub SetColError(ByVal row As DataRow, _
    byVal columnIndex As Integer)
    Dim errorString As String = "Replace this text."

    ' Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString)
End Sub

Private Sub PrintColError( _
    ByVal row As DataRow, byVal columnIndex As Integer)

    ' Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex))
End Sub

private void SetColError(DataRow row, int columnIndex)
{
    string errorString = "Replace this text.";

    // Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString);
}

private void PrintColError(DataRow row, int columnIndex)
{
    // Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetColumnError 重载
System.Data 命名空间
ClearErrors
DataColumnCollection
Contains
DataColumn
GetColumnsInError
GetErrors
HasErrors
RowError
SetColumnError


DataRow ..::.GetColumnError 方法 (Int32)

DataRow
.
.
::
.
GetColumnError 方法 (Int32)
DataRow 类

获取由索引指定的列的错误说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetColumnError ( _
    columnIndex As Integer _
) As String
public string GetColumnError(
    int columnIndex
)
public:
String^ GetColumnError(
    int columnIndex
)
member GetColumnError :
        columnIndex:int -> string

参数

columnIndex
类型： System Int32
列的从零开始的索引。

返回值

类型： System String
错误说明的文本。
异常 | 条件
IndexOutOfRangeException | columnIndex 参数超出范围。

使用 SetColumnError 方法设置列错误。

若要确定列集合是否存在错误，请使用 HasErrors 方法。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。 若要确定列集合是否存在错误，请使用 HasErrors 方法。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。

若要清除列集合的所有错误，请使用 ClearErrors 方法。

下面的示例为指定的 DataRow 设置错误说明。

Private Sub SetColError(ByVal row As DataRow, _
    byVal columnIndex As Integer)
    Dim errorString As String = "Replace this text."

    ' Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString)
End Sub

Private Sub PrintColError( _
    ByVal row As DataRow, byVal columnIndex As Integer)

    ' Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex))
End Sub

private void SetColError(DataRow row, int columnIndex)
{
    string errorString = "Replace this text.";

    // Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString);
}

private void PrintColError(DataRow row, int columnIndex)
{
    // Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetColumnError 重载
System.Data 命名空间
ClearErrors
DataColumnCollection
Contains
DataColumn
GetColumnsInError
HasErrors
RowError
SetColumnError


DataRow ..::.GetColumnError 方法 (String)

DataRow
.
.
::
.
GetColumnError 方法 (String)
DataRow 类

获取由名称指定的列的错误说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetColumnError ( _
    columnName As String _
) As String
public string GetColumnError(
    string columnName
)
public:
String^ GetColumnError(
    String^ columnName
)
member GetColumnError :
        columnName:string -> string

参数

columnName
类型： System String
列的名称。

返回值

类型： System String
错误说明的文本。

使用 SetColumnError 方法设置列错误。

若要确定列集合是否存在错误，请使用 HasErrors 方法。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。 若要确定列集合是否存在错误，请使用 HasErrors 方法。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。

若要清除列集合的所有错误，请使用 ClearErrors 方法。

下面的示例为指定的 DataRow 设置错误说明。

Private Sub SetColError(ByVal row As DataRow, _
    byVal columnIndex As Integer)
    Dim errorString As String = "Replace this text."

    ' Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString)
End Sub

Private Sub PrintColError( _
    ByVal row As DataRow, byVal columnIndex As Integer)

    ' Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex))
End Sub

private void SetColError(DataRow row, int columnIndex)
{
    string errorString = "Replace this text.";

    // Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString);
}

private void PrintColError(DataRow row, int columnIndex)
{
    // Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetColumnError 重载
System.Data 命名空间
ClearErrors
DataColumnCollection
Contains
DataColumn
GetColumnsInError
HasErrors
RowError
SetColumnError


DataRow ..::.GetColumnsInError 方法

DataRow
.
.
::
.
GetColumnsInError 方法
DataRow 类

获取包含错误的列的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetColumnsInError As DataColumn()
public DataColumn[] GetColumnsInError()
public:
array<DataColumn^>^ GetColumnsInError()
member GetColumnsInError : unit -> DataColumn[]

返回值

类型：
array<
System.Data DataColumn
>
[]
()
[]

包含错误的 DataColumn 对象的数组。

GetColumnsInError 允许您通过只返回那些包含错误的列，来减少必须处理错误的 DataColumn 对象的数量。可用 SetColumnError 方法针对单个列设置错误。若要进一步减少要处理的数量，请在调用 GetColumnsInError 之前检查 DataRow 类的 HasErrors 属性，以确定 DataRow 中是否包含错误。 GetColumnsInError 允许您通过只返回那些包含错误的列，来减少必须处理错误的 DataColumn 对象的数量。可用 SetColumnError 方法针对单个列设置错误。若要进一步减少要处理的数量，请在调用 GetColumnsInError 之前检查 DataRow 类的 HasErrors 属性，以确定 DataRow 中是否包含错误。 GetColumnsInError 允许您通过只返回那些包含错误的列，来减少必须处理错误的 DataColumn 对象的数量。可用 SetColumnError 方法针对单个列设置错误。若要进一步减少要处理的数量，请在调用 GetColumnsInError 之前检查 DataRow 类的 HasErrors 属性，以确定 DataRow 中是否包含错误。

使用 ClearErrors 方法清除行中的所有错误。其中包括 RowError。 使用 ClearErrors 方法清除行中的所有错误。其中包括 RowError。

下面的示例使用 HasErrors 来查找错误。如果该行有错误，则 GetColumnsInError 方法返回包含错误的列的数组，这些错误之后可以消除。然后，调用 ClearErrors 方法来清除所有错误。 下面的示例使用 HasErrors 来查找错误。如果该行有错误，则 GetColumnsInError 方法返回包含错误的列的数组，这些错误之后可以消除。然后，调用 ClearErrors 方法来清除所有错误。 下面的示例使用 HasErrors 来查找错误。如果该行有错误，则 GetColumnsInError 方法返回包含错误的列的数组，这些错误之后可以消除。然后，调用 ClearErrors 方法来清除所有错误。

Private Sub GetAllErrs(ByVal row As DataRow)
    ' Declare an array variable for DataColumn objects.
    Dim colArr() As DataColumn

    ' If the Row has errors, check use GetColumnsInError.
    Dim i As Integer
    If row.HasErrors Then
       ' Get the array of columns in error.
       colArr = row.GetColumnsInError()
       For i = 0 to colArr.GetUpperBound(0)
          ' Insert code to fix errors on each column.
          Console.WriteLine(colArr(i).ColumnName)
       Next i

    ' Clear errors after reconciling.
    row.ClearErrors()
    End If
 End Sub

private void GetAllErrs(DataRow row)
{
    // Declare an array variable for DataColumn objects.
    DataColumn[] colArr;
    // If the Row has errors, check use GetColumnsInError.
    if(row.HasErrors)
    {
        // Get the array of columns in error.
        colArr = row.GetColumnsInError();
        for(int i = 0; i < colArr.Length; i++)
        {
            // Insert code to fix errors on each column.
            Console.WriteLine(colArr[i].ColumnName);
        }
        // Clear errors after reconciling.
        row.ClearErrors();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
ClearErrors
GetColumnError
GetErrors
HasErrors
RowError
SetColumnError


DataRow ..::.GetParentRow 方法

DataRow
.
.
::
.
GetParentRow 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

获取 DataRow 的父行。

名称 说明
页首

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow ..::.GetParentRow 方法 (DataRelation)

DataRow
.
.
::
.
GetParentRow 方法 (DataRelation)
DataRow 类

使用指定的 DataRelation 获取 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetParentRow ( _
    relation As DataRelation _
) As DataRow
public DataRow GetParentRow(
    DataRelation relation
)
public:
DataRow^ GetParentRow(
    DataRelation^ relation
)
member GetParentRow :
        relation:DataRelation -> DataRow

参数

relation
类型： System.Data DataRelation
要使用的 DataRelation。

返回值

类型： System.Data DataRow
当前行的父级 DataRow。
异常 | 条件
ArgumentNullException | relation 不属于 DataTable。 该行为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 此行不属于 DataRelation 对象的子表。
RowNotInTableException | 此行不属于表。

在 DataSet 中，数据集的所有父级 DataRelation 对象的集合由 GetParentRows 方法返回。

DataTable 还包含 DataRelation 对象的集合，它由 ParentRelations 属性返回。

下面的示例使用 GetParentRow 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。 下面的示例使用 GetParentRow 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。

Private Sub GetParentRowForTable _
   (thisTable As DataTable, relation As DataRelation)
    If thisTable Is Nothing Then
        Return
    End If
    ' For each row in the table, print column 1
    ' of the parent DataRow.
    Dim parentRow As DataRow
    Dim row As DataRow
    For Each row In  thisTable.Rows
        parentRow = row.GetParentRow(relation)
        Console.Write(ControlChars.Tab & " child row: " _
           & row(1).ToString())
        Console.Write(ControlChars.Tab & " parent row: " _
           & parentRow(1).ToString() & ControlChars.Cr)
    Next row
End Sub

Private Sub CallGetParentRowForTable()
    ' An example of calling the function.
    Dim thisTable As DataTable = DataSet1.Tables("Products")
    Dim relation As DataRelation = thisTable.ParentRelations(0)
    GetParentRowForTable(thisTable, relation)
End Sub

private void GetParentRowForTable(DataTable thisTable,
    DataRelation relation)
{
    if(thisTable ==null){return;}
    // For each row in the table, print column 1
    // of the parent DataRow.
    DataRow parentRow;
    foreach(DataRow row in thisTable.Rows)
    {
        parentRow = row.GetParentRow(relation);
        Console.Write("\table child row: " + row[1]);
        Console.Write("\table parent row: " + parentRow[1]+ "\n");
    }
}

private void CallGetParentRowForTable()
{
    // An example of calling the function.
    DataTable thisTable = DataSet1.Tables["Products"];
    DataRelation relation = thisTable.ParentRelations[0];
    GetParentRowForTable(thisTable, relation);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetParentRow 重载
System.Data 命名空间
ChildRelations
DataRelation
GetChildRows
GetParentRow
Relations


DataRow ..::.GetParentRow 方法 (String)

DataRow
.
.
::
.
GetParentRow 方法 (String)
DataRow 类

使用 DataRelation 的指定 RelationName 获取 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetParentRow ( _
    relationName As String _
) As DataRow
public DataRow GetParentRow(
    string relationName
)
public:
DataRow^ GetParentRow(
    String^ relationName
)
member GetParentRow :
        relationName:string -> DataRow

参数

relationName
类型： System String
DataRelation 的 RelationName。

返回值

类型： System.Data DataRow
当前行的父级 DataRow。
异常 | 条件
ArgumentException | 关系和行不属于同一个表。
RowNotInTableException | 此行不属于该表。

在 DataSet 中，数据集的所有父级 DataRelation 对象的集合由 GetParentRows 方法返回。

DataTable 还包含 DataRelation 对象的集合，它由 ParentRelations 属性返回。

下面的示例使用 GetParentRow 输出 DataTable 中每个 DataRow 的每个父行的值。

Private Sub GetParentRowForTable( _
    thisTable As DataTable, relation As String)
     If thisTable Is Nothing Then
         Return
     End If

     ' For each row in the table, print column 1
     ' of the parent DataRow.
     Dim parentRow As DataRow
     Dim row As DataRow
     For Each row In  thisTable.Rows
         parentRow = row.GetParentRow(relation)
         Console.Write(ControlChars.Tab + " child row: " _
            + row(1).ToString())
         Console.Write(ControlChars.Tab + " parent row: " _
            + parentRow(1).ToString() + ControlChars.Cr)
     Next row
End Sub

Private Sub CallGetParentRowForTable()
     ' An example of calling the function.
     Dim thisTable As DataTable = DataSet1.Tables("Products")
     Dim relation As DataRelation = thisTable.ParentRelations(0)
     GetParentRowForTable(thisTable, relation.RelationName)
End Sub

private void GetParentRowForTable(
    DataTable thisTable, string relation)
{
    if(thisTable ==null){return;}
    // For each row in the table, print column 1
    // of the parent DataRow.
    DataRow parentRow;
    foreach(DataRow row in thisTable.Rows)
    {
        parentRow = row.GetParentRow(relation);
        Console.Write("\table child row: " + row[1]);
        Console.Write("\table parent row: " + parentRow[1]+ "\n");
    }
}

private void CallGetParentRowForTable()
{
    // An example of calling the function.
    DataTable thisTable = DataSet1.Tables["Products"];
    DataRelation relation = thisTable.ParentRelations[0];
    GetParentRowForTable(thisTable, relation.RelationName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetParentRow 重载
System.Data 命名空间


DataRow ..::.GetParentRow 方法 (DataRelation, DataRowVersion)

DataRow
.
.
::
.
GetParentRow 方法 (DataRelation, DataRowVersion)
DataRow 类

使用指定的 DataRelation 和 DataRowVersion 获取 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetParentRow ( _
    relation As DataRelation, _
    version As DataRowVersion _
) As DataRow
public DataRow GetParentRow(
    DataRelation relation,
    DataRowVersion version
)
public:
DataRow^ GetParentRow(
    DataRelation^ relation,
    DataRowVersion version
)
member GetParentRow :
        relation:DataRelation *
        version:DataRowVersion -> DataRow

参数

relation
类型： System.Data DataRelation
要使用的 DataRelation。
version
类型： System.Data DataRowVersion
DataRowVersion 值之一，它指定要获取的数据的版本。

返回值

类型： System.Data DataRow
当前行的父级 DataRow。
异常 | 条件
ArgumentNullException | 该行为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 relation 不属于此表的父关系。
InvalidConstraintException | 此关系的子表不是该行所属的表。
RowNotInTableException | 此行不属于表。
VersionNotFoundException | 该行不具有此版本的数据。

在 DataSet 中，数据集的所有父级 DataRelation 对象的集合由 GetParentRows 方法返回。

DataTable 还包含 DataRelation 对象的集合，它由 ParentRelations 属性返回。

使用 HasVersion 属性来确定是否存在您需要的 DataRowVersion。

下面的示例使用 GetParentRow 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。 下面的示例使用 GetParentRow 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。

Private Sub GetParentRowForTable _
    (thisTable As DataTable, relation As DataRelation, _
    version As DataRowVersion)
    If thisTable Is Nothing Then
        Return
    End If

    ' For each row in the table, print column 1
    ' of the parent DataRow.
    Dim parentRow As DataRow
    Dim row As DataRow
    For Each row In  thisTable.Rows
        parentRow = row.GetParentRow(relation, version)
        Console.Write(ControlChars.Tab & " child row: " & _
            row(1).ToString())
        Console.Write(ControlChars.Tab & " parent row: " _
            & parentRow(1).ToString() & ControlChars.Cr)
    Next row
End Sub

Private Sub CallGetParentRowForTable()
    ' An example of calling the function.
    Dim thisTable As DataTable = DataSet1.Tables("Products")
    Dim relation As DataRelation = thisTable.ParentRelations(0)

    ' Print only original versions of parent rows.
    GetParentRowForTable(thisTable, relation, _
        DataRowVersion.Original)
End Sub

private void GetParentRowForTable(DataTable thisTable,
    DataRelation relation,
    DataRowVersion version)
{
    if(thisTable ==null){return;}
    // For each row in the table, print column 1 of the
    // parent DataRow.
    DataRow parentRow;
    foreach(DataRow row in thisTable.Rows)
    {
        parentRow = row.GetParentRow(relation, version);
        Console.Write("\table child row: " + row[1]);
        Console.Write("\table parent row: " + parentRow[1]+ "\n");
    }
}

private void CallGetParentRowForTable()
{
    // An example of calling the function.
    DataTable thisTable = DataSet1.Tables["Products"];
    DataRelation relation = thisTable.ParentRelations[0];
    // Print only original versions of parent rows.
    GetParentRowForTable(thisTable, relation,
        DataRowVersion.Original);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetParentRow 重载
System.Data 命名空间
ChildRelations
DataRelation
DataRowVersion
GetChildRows
GetParentRow
Relations


DataRow ..::.GetParentRow 方法 (String, DataRowVersion)

DataRow
.
.
::
.
GetParentRow 方法 (String, DataRowVersion)
DataRow 类

使用 DataRelation 的指定 RelationName 和 DataRowVersion 获取 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetParentRow ( _
    relationName As String, _
    version As DataRowVersion _
) As DataRow
public DataRow GetParentRow(
    string relationName,
    DataRowVersion version
)
public:
DataRow^ GetParentRow(
    String^ relationName,
    DataRowVersion version
)
member GetParentRow :
        relationName:string *
        version:DataRowVersion -> DataRow

参数

relationName
类型： System String
DataRelation 的 RelationName。
version
类型： System.Data DataRowVersion
DataRowVersion 值之一。

返回值

类型： System.Data DataRow
当前行的父级 DataRow。
异常 | 条件
ArgumentException | 关系和行不属于同一个表。
ArgumentNullException | relation 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RowNotInTableException | 此行不属于该表。
VersionNotFoundException | 该行没有所请求的 DataRowVersion。

在 DataSet 中，数据集的所有父级 DataRelation 对象的集合由 GetParentRows 方法返回。

DataTable 还包含 DataRelation 对象的集合，它由 ParentRelations 属性返回。

使用 HasVersion 属性来确定是否存在您需要的 DataRowVersion。

下面的示例使用 GetParentRow 输出 DataTable 中每个 DataRow 的每个父行的值。

Private Sub GetParentRowForTable _
    (thisTable As DataTable, relation As String, _
    version As DataRowVersion)
     If thisTable Is Nothing Then
         Return
     End If
     ' For each row in the table, print column 1
     ' of the parent DataRow.
     Dim parentRow As DataRow
     Dim row As DataRow
     For Each row In  thisTable.Rows
         parentRow = row.GetParentRow(relation, version)
         Console.Write(ControlChars.Tab & " child row: " _
            & row(1).ToString())
         Console.Write(ControlChars.Tab & " parent row: " _
            & parentRow(1).ToString() & ControlChars.Cr)
     Next row
End Sub

Private Sub CallGetParentRowForTable()
     ' An example of calling the function.
     Dim thisTable As DataTable = DataSet1.Tables("Products")
     Dim relation As DataRelation = thisTable.ParentRelations(0)
     ' Print only original versions of parent rows.
     GetParentRowForTable(thisTable, relation.RelationName, _
        DataRowVersion.Original)
End Sub

private void GetParentRowForTable(DataTable thisTable,
    string relation, DataRowVersion version)
{
    if(thisTable ==null){return;}
    // For each row in the table, print column 1
    // of the parent DataRow.
    DataRow parentRow;
    foreach(DataRow row in thisTable.Rows)
    {
        parentRow = row.GetParentRow(relation, version);
        Console.Write("\t child row: " + row[1]);
        Console.Write("\t parent row: " + parentRow[1]+ "\n");
    }
}

private void CallGetParentRowForTable()
{
    // An example of calling the function.
    DataTable thisTable = DataSet1.Tables["Products"];
    DataRelation relation = thisTable.ParentRelations[0];

    // Print only original versions of parent rows.
    GetParentRowForTable(thisTable, relation.RelationName,
        DataRowVersion.Original);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetParentRow 重载
System.Data 命名空间


DataRow ..::.GetParentRows 方法

DataRow
.
.
::
.
GetParentRows 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

获取 DataRow 的父行。

名称 说明
页首

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow ..::.GetParentRows 方法 (DataRelation)

DataRow
.
.
::
.
GetParentRows 方法 (DataRelation)
DataRow 类

使用指定的 DataRelation 获取 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetParentRows ( _
    relation As DataRelation _
) As DataRow()
public DataRow[] GetParentRows(
    DataRelation relation
)
public:
array<DataRow^>^ GetParentRows(
    DataRelation^ relation
)
member GetParentRows :
        relation:DataRelation -> DataRow[]

参数

relation
类型： System.Data DataRelation
要使用的 DataRelation。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组，或长度为零的数组。
异常 | 条件
ArgumentException | DataRelation 不属于此行的 DataSet。
ArgumentNullException | 该行为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 此关系的子表不是该行所属的表。
RowNotInTableException | 该行不属于 DataTable。

在 DataSet 中，数据集的所有父级 DataRelation 对象的集合由 GetParentRows 方法返回。

DataTable 还包含 DataRelation 对象的集合，它由 ParentRelations 属性返回。

下面的示例使用 GetParentRows 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。 下面的示例使用 GetParentRows 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。

Private Sub GetChildRowsFromDataRelation(table As DataTable)
    Dim relation As DataRelation
    Dim arrRows() As DataRow
    Dim row As DataRow
    Dim i As Integer
    Dim column As DataColumn

    For Each relation In table.ParentRelations
      For Each row In table.Rows
          arrRows = row.GetParentRows(relation)
          ' Print values of rows.
          For i = 0 To arrRows.GetUpperBound(0)
             For Each column in table.Columns
                Console.WriteLine(arrRows(i)(column.ColumnName))
             Next column
          Next i
       Next row
    Next relation
 End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetParentRows 重载
System.Data 命名空间
ChildRelations
DataRelation
GetChildRows
GetParentRow
Relations


DataRow ..::.GetParentRows 方法 (String)

DataRow
.
.
::
.
GetParentRows 方法 (String)
DataRow 类

使用 DataRelation 的指定 RelationName 获取 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetParentRows ( _
    relationName As String _
) As DataRow()
public DataRow[] GetParentRows(
    string relationName
)
public:
array<DataRow^>^ GetParentRows(
    String^ relationName
)
member GetParentRows :
        relationName:string -> DataRow[]

参数

relationName
类型： System String
DataRelation 的 RelationName。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组，或长度为零的数组。
异常 | 条件
ArgumentException | 关系和行不属于同一个表。
RowNotInTableException | 此行不属于该表。

在 DataSet 中，数据集的所有父级 DataRelation 对象的集合由 GetParentRows 方法返回。

DataTable 还包含 DataRelation 对象的集合，它由 ParentRelations 属性返回。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetParentRows 重载
System.Data 命名空间


DataRow ..::.GetParentRows 方法 (DataRelation, DataRowVersion)

DataRow
.
.
::
.
GetParentRows 方法 (DataRelation, DataRowVersion)
DataRow 类

使用指定的 DataRelation 和 DataRowVersion 获取 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetParentRows ( _
    relation As DataRelation, _
    version As DataRowVersion _
) As DataRow()
public DataRow[] GetParentRows(
    DataRelation relation,
    DataRowVersion version
)
public:
array<DataRow^>^ GetParentRows(
    DataRelation^ relation,
    DataRowVersion version
)
member GetParentRows :
        relation:DataRelation *
        version:DataRowVersion -> DataRow[]

参数

relation
类型： System.Data DataRelation
要使用的 DataRelation。
version
类型： System.Data DataRowVersion
DataRowVersion 值之一，它指定要获取的数据的版本。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组，或长度为零的数组。
异常 | 条件
ArgumentException | DataRelation 不属于此行的 DataSet。
ArgumentNullException | 该行为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 此关系的子表不是该行所属的表。
RowNotInTableException | 该行不属于 DataTable。
VersionNotFoundException | 该行没有所请求的 DataRowVersion。

在 DataSet 中，数据集的所有父级 DataRelation 对象的集合由 GetParentRows 方法返回。

DataTable 还包含 DataRelation 对象的集合，它由 ParentRelations 属性返回。

使用 HasVersion 属性来确定是否存在您需要的 DataRowVersion。

下面的示例使用 GetParentRows 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。 下面的示例使用 GetParentRows 为 DataTable 中的每个子级 DataRelation 返回子级 DataRow 对象。然后输出该行中每列的值。

Private Sub GetChildRowsFromDataRelation(table As DataTable, ver As DataRowVersion)
    Dim relation As DataRelation
    Dim arrRows() As DataRow
    Dim row As DataRow
    Dim i As Integer
    Dim column As DataColumn

    For Each relation In table.ParentRelations
      For Each row In table.Rows
          arrRows = row.GetParentRows(relation, ver)
          ' Print values of rows.
          For i = 0 To arrRows.GetUpperBound(0)
             For Each column in table.Columns
                Console.WriteLine(arrRows(i)(column.ColumnName))
             Next column
          Next i
       Next row
    Next relation
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetParentRows 重载
System.Data 命名空间
ChildRelations
DataRelation
GetChildRows
GetParentRow
Relations


DataRow ..::.GetParentRows 方法 (String, DataRowVersion)

DataRow
.
.
::
.
GetParentRows 方法 (String, DataRowVersion)
DataRow 类

使用 DataRelation 的指定 RelationName 和 DataRowVersion 获取 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetParentRows ( _
    relationName As String, _
    version As DataRowVersion _
) As DataRow()
public DataRow[] GetParentRows(
    string relationName,
    DataRowVersion version
)
public:
array<DataRow^>^ GetParentRows(
    String^ relationName,
    DataRowVersion version
)
member GetParentRows :
        relationName:string *
        version:DataRowVersion -> DataRow[]

参数

relationName
类型： System String
version
类型： System.Data DataRowVersion
DataRowVersion 值之一，它指定要获取的数据的版本。可能值为 Default、Original、Current 和 Proposed。 DataRowVersion 值之一，它指定要获取的数据的版本。可能值为 Default、Original、Current 和 Proposed。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组，或长度为零的数组。
异常 | 条件
ArgumentException | 关系和行不属于同一个表。
ArgumentNullException | relation 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
RowNotInTableException | 此行不属于该表。
VersionNotFoundException | 该行没有所请求的 DataRowVersion。

在 DataSet 中，数据集的所有父级 DataRelation 对象的集合由 GetParentRows 方法返回。

DataTable 还包含 DataRelation 对象的集合，它由 ParentRelations 属性返回。

使用 HasVersion 属性来确定是否存在您需要的 DataRowVersion。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
GetParentRows 重载
System.Data 命名空间


DataRow ..::.HasVersion 方法

DataRow
.
.
::
.
HasVersion 方法
DataRow 类

获取一个值，该值指示指定的版本是否存在。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function HasVersion ( _
    version As DataRowVersion _
) As Boolean
public bool HasVersion(
    DataRowVersion version
)
public:
bool HasVersion(
    DataRowVersion version
)
member HasVersion :
        version:DataRowVersion -> bool

参数

version
类型： System.Data DataRowVersion
DataRowVersion 值之一，它指定行版本。

返回值

类型： System Boolean
如果版本存在，则为 true；否则为 false。

有关更多信息，请参见 BeginEdit 方法。

下面的示例使用 HasVersion 方法确定列的当前值和建议值是否相同。如果相同，则取消编辑。否则，调用 AcceptChanges 方法以终止编辑。 下面的示例使用 HasVersion 方法确定列的当前值和建议值是否相同。如果相同，则取消编辑。否则，调用 AcceptChanges 方法以终止编辑。 下面的示例使用 HasVersion 方法确定列的当前值和建议值是否相同。如果相同，则取消编辑。否则，调用 AcceptChanges 方法以终止编辑。

Private Sub CheckVersionBeforeAccept()
    ' Assuming the DataGrid is bound to a DataTable.
    Dim table As DataTable = CType(DataGrid1.DataSource, DataTable)
    Dim row As DataRow = table.Rows(DataGrid1.CurrentCell.RowNumber)
    row.BeginEdit
    row(1) = Edit1.Text
    If row.HasVersion(datarowversion.Proposed) Then
       If row(1, DataRowVersion.Current) Is _
            row(1, DataRowversion.Proposed) Then
          Console.WriteLine("The original and the proposed are the same")
          row.CancelEdit
          Exit Sub
       Else
          row.AcceptChanges
       End If
    Else
       Console.WriteLine("No new values proposed")
    End If
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
AcceptChanges
BeginEdit
CancelEdit
Item
GetChildRows
GetParentRows
EndEdit
RowState


DataRow ..::.IsNull 方法

DataRow
.
.
::
.
IsNull 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

获取一个值，该值指示指定的列是否包含 null 值。

名称 说明
页首

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow ..::.IsNull 方法 (DataColumn)

DataRow
.
.
::
.
IsNull 方法 (DataColumn)
DataRow 类

获取一个值，该值指示指定的 DataColumn 是否包含 null 值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IsNull ( _
    column As DataColumn _
) As Boolean
public bool IsNull(
    DataColumn column
)
public:
bool IsNull(
    DataColumn^ column
)
member IsNull :
        column:DataColumn -> bool

参数

column
类型： System.Data DataColumn
DataColumn。

返回值

类型： System Boolean
如果列包含 null 值，则为 true；否则为 false。

下面的示例打印 DataSet 的每个表中每一行的每一列。如果该行被设置为 null 值，则不打印该值。 下面的示例打印 DataSet 的每个表中每一行的每一列。如果该行被设置为 null 值，则不打印该值。

Private Sub PrintRows(dataSet As DataSet)
    Dim table As DataTable
    Dim column As DataColumn
    Dim row As DataRow
    For Each table In dataSet.Tables
       For Each row In table.Rows
          For Each column In table.Columns
             If Not row.IsNull(column) Then
                Console.WriteLine(row(column).ToString())
             End If
          Next column
       Next row
     Next table
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
IsNull 重载
System.Data 命名空间


DataRow ..::.IsNull 方法 (Int32)

DataRow
.
.
::
.
IsNull 方法 (Int32)
DataRow 类

获取一个值，该值指示位于指定索引处的列是否包含 null 值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IsNull ( _
    columnIndex As Integer _
) As Boolean
public bool IsNull(
    int columnIndex
)
public:
bool IsNull(
    int columnIndex
)
member IsNull :
        columnIndex:int -> bool

参数

columnIndex
类型： System Int32
列的从零开始的索引。

返回值

类型： System Boolean
如果列包含 null 值，则为 true；否则为 false。

下面的示例将列的值更改为 null 值，然后使用 IsNull 方法来确定该值是否为 null。

Private Sub IsValNull()
    ' Assuming the DataGrid is bound to a DataTable.
    Dim table As DataTable = CType(DataGrid1.DataSource, DataTable)
    Dim row As DataRow = table.Rows(datagrid1.CurrentCell.RowNumber)
    row.BeginEdit
    row(1) = System.DBNull.Value
    row.EndEdit
    row.AcceptChanges
    Console.WriteLine(row.IsNull(1))
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
IsNull 重载
System.Data 命名空间


DataRow ..::.IsNull 方法 (String)

DataRow
.
.
::
.
IsNull 方法 (String)
DataRow 类

获取一个值，该值指示指定的列是否包含 null 值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IsNull ( _
    columnName As String _
) As Boolean
public bool IsNull(
    string columnName
)
public:
bool IsNull(
    String^ columnName
)
member IsNull :
        columnName:string -> bool

参数

columnName
类型： System String
列的名称。

返回值

类型： System Boolean
如果列包含 null 值，则为 true；否则为 false。

下面的示例将列的值更改为 null 值，然后使用 IsNull 方法来确定该值是否为 null。

 Private Sub IsValNull()
    ' Assuming the DataGrid is bound to a DataTable.
    Dim table As DataTable = CType(DataGrid1.DataSource, DataTable)
    Dim row As DataRow = table.Rows(datagrid1.CurrentCell.RowNumber)
    row.BeginEdit
    row("FirstName") = System.DBNull.Value
    row.EndEdit
    row.AcceptChanges
    Console.WriteLine(row.IsNull("FirstName"))
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
IsNull 重载
System.Data 命名空间


DataRow ..::.IsNull 方法 (DataColumn, DataRowVersion)

DataRow
.
.
::
.
IsNull 方法 (DataColumn, DataRowVersion)
DataRow 类

获取一个值，该值指示指定的 DataColumn 和 DataRowVersion 是否包含 null 值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IsNull ( _
    column As DataColumn, _
    version As DataRowVersion _
) As Boolean
public bool IsNull(
    DataColumn column,
    DataRowVersion version
)
public:
bool IsNull(
    DataColumn^ column,
    DataRowVersion version
)
member IsNull :
        column:DataColumn *
        version:DataRowVersion -> bool

参数

column
类型： System.Data DataColumn
DataColumn。
version
类型： System.Data DataRowVersion
DataRowVersion 值之一，它指定行版本。可能值为 Default、Original、Current 和 Proposed。 DataRowVersion 值之一，它指定行版本。可能值为 Default、Original、Current 和 Proposed。

返回值

类型： System Boolean
如果列包含 null 值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
IsNull 重载
System.Data 命名空间


DataRow ..::.RejectChanges 方法

DataRow
.
.
::
.
RejectChanges 方法
DataRow 类

拒绝自上次调用 AcceptChanges 以来对该行进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub RejectChanges
public void RejectChanges()
public:
void RejectChanges()
member RejectChanges : unit -> unit

异常 | 条件
RowNotInTableException | 此行不属于该表。

当调用 RejectChanges 方法时，会隐式调用 CancelEdit 方法以取消任何编辑。如果 RowState 为已删除或已修改，则该行恢复为其以前的值，RowState 变成未更改。如果 RowState 为已添加，则该行将被移除。 当调用 RejectChanges 方法时，会隐式调用 CancelEdit 方法以取消任何编辑。如果 RowState 为已删除或已修改，则该行恢复为其以前的值，RowState 变成未更改。如果 RowState 为已添加，则该行将被移除。 当调用 RejectChanges 方法时，会隐式调用 CancelEdit 方法以取消任何编辑。如果 RowState 为已删除或已修改，则该行恢复为其以前的值，RowState 变成未更改。如果 RowState 为已添加，则该行将被移除。

下面的示例创建一个 2 列 10 行的简单 DataTable。在用 Delete 方法删除几个 DataRow 项之后，通过调用 RejectChanges 撤消对其中一行的删除。 下面的示例创建一个 2 列 10 行的简单 DataTable。在用 Delete 方法删除几个 DataRow 项之后，通过调用 RejectChanges 撤消对其中一行的删除。

 Private Sub DemonstrateDeleteRow()
     ' Create a simple DataTable with two columns and ten rows.
     Dim table As New DataTable("table")
     Dim idColumn As New DataColumn("id", Type.GetType("System.Int32"))
     idColumn.AutoIncrement = True
     Dim itemColumn As New DataColumn("item", Type.GetType("System.String"))
     table.Columns.Add(idColumn)
     table.Columns.Add(itemColumn)

     ' Add ten rows.
     Dim newRow As DataRow

     Dim i As Integer
     For i = 0 To 9
         newRow = table.NewRow()
         newRow("item") = "Item " & i.ToString()
         table.Rows.Add(newRow)
     Next i
     table.AcceptChanges()

     Dim itemColumns As DataRowCollection = table.Rows
     itemColumns(0).Delete()
     itemColumns(2).Delete()
     itemColumns(3).Delete()
     itemColumns(5).Delete()
     Console.WriteLine(itemColumns(3).RowState.ToString())

     ' Reject changes on one deletion.
     itemColumns(3).RejectChanges()

     ' Change the value of the column so it stands out.
     itemColumns(3)("item") = "Deleted, Undeleted, Edited"

     ' Accept changes on others.
     table.AcceptChanges()

     ' Print the remaining row values.
     Dim row As DataRow
     For Each row In  table.Rows
         Console.WriteLine(row(0).ToString() & ControlChars.Tab _
            & row(1).ToString())
     Next row
End Sub

private void DemonstrateDeleteRow()
{
    // Create a simple DataTable with two columns and ten rows.
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("item",
        Type.GetType("System.String"));
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // Add ten rows.
    DataRow newRow;

    for(int i = 0; i <10; i++)
    {
        newRow = table.NewRow();
        newRow["item"] = "Item " + i;
        table.Rows.Add(newRow);
    }
    table.AcceptChanges();

    DataRowCollection itemColumns = table.Rows;
    itemColumns[0].Delete();
    itemColumns[2].Delete();
    itemColumns[3].Delete();
    itemColumns[5].Delete();
    Console.WriteLine(itemColumns[3].RowState.ToString());

    // Reject changes on one deletion.
    itemColumns[3].RejectChanges();

    // Change the value of the column so it stands out.
    itemColumns[3]["item"] = "Deleted, Undeleted, Edited";

    // Accept changes on others.
    table.AcceptChanges();

    // Print the remaining row values.
    foreach(DataRow row in table.Rows)
    {
        Console.WriteLine(row[0] + "\table" + row[1]);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
AcceptChanges
IsNull


DataRow ..::.SetAdded 方法

DataRow
.
.
::
.
SetAdded 方法
DataRow 类

将 DataRow 的 Rowstate()()() 更改为 Added。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub SetAdded
public void SetAdded()
public:
void SetAdded()
member SetAdded : unit -> unit

将 DataRow 的 Rowstate()()() 更改为 Added。如果当前行未处于 Unchanged 或 Added 状态，则将引发 InvalidOperationException 并显示一条消息，指示只能对 RowState 为 Unchanged 的 DataRow 实例调用 SetAdded。 将 DataRow 的 Rowstate()()() 更改为 Added。如果当前行未处于 Unchanged 或 Added 状态，则将引发 InvalidOperationException 并显示一条消息，指示只能对 RowState 为 Unchanged 的 DataRow 实例调用 SetAdded。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
SetModified
RowState


DataRow ..::.SetColumnError 方法

DataRow
.
.
::
.
SetColumnError 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

为列设置错误说明。

名称 说明
页首

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow ..::.SetColumnError 方法 (DataColumn, String)

DataRow
.
.
::
.
SetColumnError 方法 (DataColumn, String)
DataRow 类

为指定为 DataColumn 的列设置错误说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub SetColumnError ( _
    column As DataColumn, _
    error As String _
)
public void SetColumnError(
    DataColumn column,
    string error
)
public:
void SetColumnError(
    DataColumn^ column,
    String^ error
)
member SetColumnError :
        column:DataColumn *
        error:string -> unit

参数

column
类型： System.Data DataColumn
要为其设置错误说明的 DataColumn。
error
类型： System String
错误说明。

若要检查错误说明，请使用 GetColumnError 方法。

若要确定列集合是否存在错误，请使用 HasErrors 属性。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。 若要确定列集合是否存在错误，请使用 HasErrors 属性。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。

如果传入 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串作为 error 参数，则 DataRow 的行为与没有设置错误时类似，并且 HasErrors 属性将返回 false。

若要设置有关整行的自定义错误说明，请使用 RowError 属性。

若要确定列集合是否存在错误，请使用 HasErrors 方法。

若要清除列集合的所有错误，请使用 ClearErrors 方法。

下面的示例为指定的 DataRow 设置错误说明。

Private Sub SetColError(ByVal row As DataRow, _
    byVal columnIndex As Integer)
    Dim errorString As String = "Replace this text."

    ' Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString)
End Sub

Private Sub PrintColError( _
    ByVal row As DataRow, byVal columnIndex As Integer)

    ' Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex))
End Sub

private void SetColError(DataRow row, int columnIndex)
{
    string errorString = "Replace this text.";

    // Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString);
}

private void PrintColError(DataRow row, int columnIndex)
{
    // Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
SetColumnError 重载
System.Data 命名空间
ClearErrors
DataColumnCollection
Contains
DataColumn
GetColumnsInError
HasErrors
RowError


DataRow ..::.SetColumnError 方法 (Int32, String)

DataRow
.
.
::
.
SetColumnError 方法 (Int32, String)
DataRow 类

为由索引指定的列设置错误说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub SetColumnError ( _
    columnIndex As Integer, _
    error As String _
)
public void SetColumnError(
    int columnIndex,
    string error
)
public:
void SetColumnError(
    int columnIndex,
    String^ error
)
member SetColumnError :
        columnIndex:int *
        error:string -> unit

参数

columnIndex
类型： System Int32
列的从零开始的索引。
error
类型： System String
错误说明。
异常 | 条件
IndexOutOfRangeException | columnIndex 参数超出范围。

该方法用于为指定的列设置自定义的错误说明。您可以使用 ErrorProvider 控件来显示该错误的文本。 该方法用于为指定的列设置自定义的错误说明。您可以使用 ErrorProvider 控件来显示该错误的文本。

若要检查错误说明，请使用 GetColumnError 方法。

若要确定列集合是否存在错误，请使用 HasErrors 属性。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。 若要确定列集合是否存在错误，请使用 HasErrors 属性。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。

如果传入 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串作为 error 参数，则 DataRow 的行为与没有设置错误时类似，并且 HasErrors 属性将返回 false。

若要设置有关整行的自定义错误说明，请使用 RowError 属性。

若要清除列集合的所有错误，请使用 ClearErrors 方法。

若要设置应用于整行的错误文本，请设置 RowError 属性。

下面的示例为指定的 DataRow 设置错误说明。

Private Sub SetColError(ByVal row As DataRow, _
    byVal columnIndex As Integer)
    Dim errorString As String = "Replace this text."

    ' Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString)
End Sub

Private Sub PrintColError( _
    ByVal row As DataRow, byVal columnIndex As Integer)

    ' Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex))
End Sub

private void SetColError(DataRow row, int columnIndex)
{
    string errorString = "Replace this text.";

    // Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString);
}

private void PrintColError(DataRow row, int columnIndex)
{
    // Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
SetColumnError 重载
System.Data 命名空间
ClearErrors
DataColumnCollection
Contains
DataColumn
GetColumnsInError
HasErrors
RowError


DataRow ..::.SetColumnError 方法 (String, String)

DataRow
.
.
::
.
SetColumnError 方法 (String, String)
DataRow 类

为由名称指定的列设置错误说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub SetColumnError ( _
    columnName As String, _
    error As String _
)
public void SetColumnError(
    string columnName,
    string error
)
public:
void SetColumnError(
    String^ columnName,
    String^ error
)
member SetColumnError :
        columnName:string *
        error:string -> unit

参数

columnName
类型： System String
列的名称。
error
类型： System String
错误说明。

用 DataColumn 类的 ColumnName 属性设置列的名称。

若要检查错误说明，请使用 GetColumnError 方法。

若要确定列集合是否存在错误，请使用 HasErrors 属性。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。 若要确定列集合是否存在错误，请使用 HasErrors 属性。因此，可以使用 GetColumnsInError 方法来检索所有包含错误的列。

如果传入 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串作为 error 参数，则 DataRow 的行为与没有设置错误时类似，并且 HasErrors 属性将返回 false。

若要设置有关整行的自定义错误说明，请使用 RowError 属性。

若要确定列集合是否存在错误，请使用 HasErrors 方法。

若要清除列集合的所有错误，请使用 ClearErrors 方法。

下面的示例为指定的 DataRow 设置错误说明。

Private Sub SetColError(ByVal row As DataRow, _
    byVal columnIndex As Integer)
    Dim errorString As String = "Replace this text."

    ' Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString)
End Sub

Private Sub PrintColError( _
    ByVal row As DataRow, byVal columnIndex As Integer)

    ' Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex))
End Sub

private void SetColError(DataRow row, int columnIndex)
{
    string errorString = "Replace this text.";

    // Set the error for the specified column of the row.
    row.SetColumnError(columnIndex, errorString);
}

private void PrintColError(DataRow row, int columnIndex)
{
    // Print the error of a specified column.
    Console.WriteLine(row.GetColumnError(columnIndex));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
SetColumnError 重载
System.Data 命名空间
ClearErrors
DataColumnCollection
Contains
DataColumn
GetColumnsInError
HasErrors
RowError


DataRow ..::.SetModified 方法

DataRow
.
.
::
.
SetModified 方法
DataRow 类

将 DataRow 的 Rowstate()()() 更改为 Modified。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub SetModified
public void SetModified()
public:
void SetModified()
member SetModified : unit -> unit

将 DataRow 的 Rowstate()()() 更改为 Modified。如果当前行未处于 Unchanged 或 Added 状态，则将引发 InvalidOperationException 并显示一条消息，指示只能对 RowState 为 Unchanged 的 DataRow 实例调用 SetModified。 将 DataRow 的 Rowstate()()() 更改为 Modified。如果当前行未处于 Unchanged 或 Added 状态，则将引发 InvalidOperationException 并显示一条消息，指示只能对 RowState 为 Unchanged 的 DataRow 实例调用 SetModified。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
SetAdded
RowState


DataRow ..::.SetNull 方法

DataRow
.
.
::
.
SetNull 方法
DataRow 类

将指定的 DataColumn 的值设置为 null 值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub SetNull ( _
    column As DataColumn _
)
protected void SetNull(
    DataColumn column
)
protected:
void SetNull(
    DataColumn^ column
)
member SetNull :
        column:DataColumn -> unit

参数

column
类型： System.Data DataColumn
DataColumn。

使用 IsNull 方法确定列中是否包含 null 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow ..::.SetParentRow 方法

DataRow
.
.
::
.
SetParentRow 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

设置 DataRow 的父行。

名称 说明
页首

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow ..::.SetParentRow 方法 (DataRow)

DataRow
.
.
::
.
SetParentRow 方法 (DataRow)
DataRow 类

用新指定的父级 DataRow 设置 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub SetParentRow ( _
    parentRow As DataRow _
)
public void SetParentRow(
    DataRow parentRow
)
public:
void SetParentRow(
    DataRow^ parentRow
)
member SetParentRow :
        parentRow:DataRow -> unit

参数

parentRow
类型： System.Data DataRow
新的父级 DataRow。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
SetParentRow 重载
System.Data 命名空间


DataRow ..::.SetParentRow 方法 (DataRow, DataRelation)

DataRow
.
.
::
.
SetParentRow 方法 (DataRow, DataRelation)
DataRow 类

用新指定的父级 DataRow 和 DataRelation 设置 DataRow 的父行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub SetParentRow ( _
    parentRow As DataRow, _
    relation As DataRelation _
)
public void SetParentRow(
    DataRow parentRow,
    DataRelation relation
)
public:
void SetParentRow(
    DataRow^ parentRow,
    DataRelation^ relation
)
member SetParentRow :
        parentRow:DataRow *
        relation:DataRelation -> unit

参数

parentRow
类型： System.Data DataRow
新的父级 DataRow。
relation
类型： System.Data DataRelation
要使用的 DataRelation 关系。
异常 | 条件
RowNotInTableException | 其中一行不属于某个表
ArgumentNullException | 其中一行是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 该关系不属于 DataSet 对象的 DataRelationCollection。
InvalidConstraintException | 该关系的子级 DataTable 不是此行所属的表。

下面的示例设置特定子行的父行。

Private Sub SetParent()
    ' Get a ParentRow and a ChildRow from a DataSet.
    Dim childRow As DataRow = _
        DataSet1.Tables("Orders").Rows(1)
    Dim parentRow As DataRow = _
        DataSet1.Tables("Customers").Rows(20)

    ' Set the parent row of a DataRelation.
    childRow.SetParentRow(parentRow, _
        DataSet1.Relations("CustomerOrders"))
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
SetParentRow 重载
System.Data 命名空间


DataRow 属性

DataRow 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

DataRow 类型公开以下成员。

名称 说明
页首

参考

DataRow 类
System.Data 命名空间


DataRow ..::.HasErrors 属性

DataRow
.
.
::
.
HasErrors 属性
DataRow 类

获取一个值，该值指示某行是否包含错误。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property HasErrors As Boolean
    Get
public bool HasErrors { get; }
public:
property bool HasErrors {
    bool get ();
}
member HasErrors : bool

属性值

类型： System Boolean
如果该行包含错误，则为 true；否则，为 false。

如果该行中的任何 DataColumn 对象包含错误，或者 DataRow 的 RowError 属性是空字符串，则 HasErrors 返回 true。

在验证数据时，您可在行的任何列中设置错误。当这样的列显示在 System.Windows.Forms..::.DataGrid 控件中时，它会带上一个红色感叹号标记，以便向用户说明该列中包含错误。 在验证数据时，您可在行的任何列中设置错误。当这样的列显示在 System.Windows.Forms..::.DataGrid 控件中时，它会带上一个红色感叹号标记，以便向用户说明该列中包含错误。

使用 SetColumnError 在任何列上设置错误。

使用 GetColumnError 和 GetColumnsInError 方法返回包含错误的列。

ClearErrors 方法清除行中的所有错误。

下面的示例使用 HasErrors 来查找错误。如果该行有错误，则 GetColumnsInError 方法返回包含错误的列的数组，这些错误之后可以消除。然后，调用 ClearErrors 方法来清除所有错误。 下面的示例使用 HasErrors 来查找错误。如果该行有错误，则 GetColumnsInError 方法返回包含错误的列的数组，这些错误之后可以消除。然后，调用 ClearErrors 方法来清除所有错误。 下面的示例使用 HasErrors 来查找错误。如果该行有错误，则 GetColumnsInError 方法返回包含错误的列的数组，这些错误之后可以消除。然后，调用 ClearErrors 方法来清除所有错误。

Private Sub GetAllErrs(ByVal row As DataRow)
    ' Declare an array variable for DataColumn objects.
    Dim colArr() As DataColumn

    ' If the Row has errors, check use GetColumnsInError.
    Dim i As Integer
    If row.HasErrors Then
       ' Get the array of columns in error.
       colArr = row.GetColumnsInError()
       For i = 0 to colArr.Length - 1
          ' Insert code to fix errors on each column.
          Console.WriteLine(colArr(i).ColumnName)
       Next i

    ' Clear errors after reconciling.
    row.ClearErrors()
    End If
End Sub

private void GetAllErrs(DataRow row)
{
    // Declare an array variable for DataColumn objects.
    DataColumn[] colArr;
    // If the Row has errors, check use GetColumnsInError.
    if(row.HasErrors)
    {
        // Get the array of columns in error.
        colArr = row.GetColumnsInError();
        for(int i = 0; i < colArr.Length; i++)
        {
            // Insert code to fix errors on each column.
            Console.WriteLine(colArr[i].ColumnName);
        }
        // Clear errors after reconciling.
        row.ClearErrors();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
ClearErrors
DataColumnCollection
GetColumnError
GetColumnsInError
SetColumnError


DataRow ..::.Item 属性

DataRow
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRow 类

获取或设置存储在指定列中的数据。

名称 说明
页首

参考

DataRow 类
DataRow 成员
System.Data 命名空间


DataRow ..::.Item 属性 (DataColumn)

DataRow
.
.
::
.
Item 属性 (DataColumn)
DataRow 类

获取或设置存储在指定的 DataColumn 中的数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Item ( _
    column As DataColumn _
) As Object
    Get
    Set
public Object this[
    DataColumn column
] { get; set; }
public:
property Object^ Item[DataColumn^ column] {
    Object^ get (DataColumn^ column);
    void set (DataColumn^ column, Object^ value);
}
member Item : Object with get, set

参数

column
类型： System.Data DataColumn
一个包含数据的 DataColumn。

属性值

类型： System Object
Object，包含该数据。
异常 | 条件
ArgumentException | 该列不属于此表。
ArgumentNullException | column 为 null。
DeletedRowInaccessibleException | 尝试对已删除的行设置值。
InvalidCastException | 值与列的数据类型不匹配。

设置该属性时，如果 ColumnChanging 事件中发生异常，则会生成异常。

如果这是即时编辑，请参见 EndEdit 以获得有关可能生成的异常的信息。

下面的示例演示如何使用 Item 属性来获取和设置特定列索引的值。第一个示例获取用户在 DataGrid 控件中单击的任意行中第一列的值。第二个示例设置作为参数传递到方法的值。 下面的示例演示如何使用 Item 属性来获取和设置特定列索引的值。第一个示例获取用户在 DataGrid 控件中单击的任意行中第一列的值。第二个示例设置作为参数传递到方法的值。 下面的示例演示如何使用 Item 属性来获取和设置特定列索引的值。第一个示例获取用户在 DataGrid 控件中单击的任意行中第一列的值。第二个示例设置作为参数传递到方法的值。

Private Sub DataGrid1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs)

    Dim dataGridTable As DataTable = _
        CType(DataGrid1.DataSource, DataTable)
    ' Set the current row using the RowNumber
    ' property of the CurrentCell.
    Dim currentRow As DataRow = _
        dataGridTable.Rows(DataGrid1.CurrentCell.RowNumber)
    Dim column As DataColumn = dataGridTable.Columns(1)

    ' Get the value of the column 1 in the DataTable.
    label1.Text = currentRow(column).ToString()
End Sub

Private Sub SetDataRowValue( _
    ByVal grid As DataGrid, ByVal newVal As Object)

    ' Set the value of a column in the last row of a DataGrid.
    Dim table As DataTable = CType(grid.DataSource, DataTable)
    Dim row As DataRow = table.Rows(table.Rows.Count - 1)
    Dim column As DataColumn = table.Columns("FirstName")
    row(column)= newVal
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
Item 重载
System.Data 命名空间


DataRow ..::.Item 属性 (Int32)

DataRow
.
.
::
.
Item 属性 (Int32)
DataRow 类

获取或设置存储在由索引指定的列中的数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Item ( _
    columnIndex As Integer _
) As Object
    Get
    Set
public Object this[
    int columnIndex
] { get; set; }
public:
property Object^ Item[int columnIndex] {
    Object^ get (int columnIndex);
    void set (int columnIndex, Object^ value);
}
member Item : Object with get, set

参数

columnIndex
类型： System Int32
列的从零开始的索引。

属性值

类型： System Object
Object，包含该数据。
异常 | 条件
DeletedRowInaccessibleException | 当尝试对已删除的行设置值时发生。
IndexOutOfRangeException | columnIndex 参数超出范围。
InvalidCastException | 当设置值且新值的 Type 与 DataType 不匹配时发生。

设置该属性时，如果 ColumnChanging 事件中发生异常，则会生成异常。

如果这是编辑，请参见 EndEdit 以获得有关可能生成的异常的信息。

下面的示例演示如何使用 Item 属性来获取和设置特定列索引的值。第一个示例获取用户在 DataGrid 控件中单击的任意行中第一列的值。 下面的示例演示如何使用 Item 属性来获取和设置特定列索引的值。第一个示例获取用户在 DataGrid 控件中单击的任意行中第一列的值。

Private Sub DataGrid1_Click _
    (ByVal sender As System.Object, ByVal e As System.EventArgs)

    ' Get the DataTable the grid is bound to.
    Dim thisGrid As DataGrid = CType(sender, DataGrid)
    Dim table As DataTable = CType(thisGrid.DataSource, DataTable)
    Dim currentRow As DataRow = _
        table.Rows(thisGrid.CurrentCell.RowNumber)

    ' Get the value of the column 1 in the DataTable.
    Console.WriteLine(currentRow(1))
    ' You can also use the name of the column:
    ' Console.WriteLine(currentRow("FirstName"))
    End Sub

    Private Sub SetDataRowValue( _
        ByVal grid As DataGrid, ByVal newValue As Object)

    ' Set the value of the last column in the last row of a DataGrid.
    Dim table As DataTable
    table = CType(grid.DataSource, DataTable)
    Dim row As DataRow
    row = table.Rows(table.Rows.Count-1)
    row(table.Columns.Count-1) = newValue
End Sub

private void DataGrid1_Click(object sender,
    System.EventArgs e)
{
    // Get the DataTable the grid is bound to.
    DataGrid thisGrid = (DataGrid) sender;
    DataTable table = (DataTable) thisGrid.DataSource;
    DataRow currentRow =
        table.Rows[thisGrid.CurrentCell.RowNumber];

    // Get the value of the column 1 in the DataTable.
    Console.WriteLine(currentRow[1]);
    // You can also use the name of the column:
    // Console.WriteLine(currentRow["FirstName"])
}

private void SetDataRowValue(DataGrid grid, object newValue)
{
    // Set the value of the last column in the last row of a DataGrid.
    DataTable table;
    table = (DataTable) grid.DataSource;
    DataRow row;

    // Get last row
    row = (DataRow)table.Rows[table.Rows.Count-1];

    // Set value of last column
    row[table.Columns.Count-1] = newValue;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
Item 重载
System.Data 命名空间


DataRow ..::.Item 属性 (String)

DataRow
.
.
::
.
Item 属性 (String)
DataRow 类

获取或设置存储在由名称指定的列中的数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Item ( _
    columnName As String _
) As Object
    Get
    Set
public Object this[
    string columnName
] { get; set; }
public:
property Object^ Item[String^ columnName] {
    Object^ get (String^ columnName);
    void set (String^ columnName, Object^ value);
}
member Item : Object with get, set

参数

columnName
类型： System String
列的名称。

属性值

类型： System Object
Object，包含该数据。
异常 | 条件
ArgumentException | 无法找到由 columnName 指定的列。
DeletedRowInaccessibleException | 当尝试对已删除的行设置值时发生。
InvalidCastException | 当您设置值并且该值的 Type 与 DataType 不匹配时发生。

设置该属性时，如果 ColumnChanging 事件中发生异常，则会生成异常。

如果这是即时编辑，请参见 EndEdit 以获得有关可能生成的异常的信息。

下面的示例演示如何使用 Item 属性来获取和设置特定列索引的值。第一个示例获取用户在 DataGrid 控件中单击的任意行中第一列的值。第二个示例设置作为参数传递到方法的值。 下面的示例演示如何使用 Item 属性来获取和设置特定列索引的值。第一个示例获取用户在 DataGrid 控件中单击的任意行中第一列的值。第二个示例设置作为参数传递到方法的值。 下面的示例演示如何使用 Item 属性来获取和设置特定列索引的值。第一个示例获取用户在 DataGrid 控件中单击的任意行中第一列的值。第二个示例设置作为参数传递到方法的值。

Private Sub DataGrid1_Click( _
    sender As Object, e As System.EventArgs)

    ' Get the DataTable the grid is bound to.
    Dim thisGrid As DataGrid = CType(sender, DataGrid)
    Dim table As DataTable = _
        CType(thisGrid.DataSource, DataTable)
    Dim currentRow As DataRow = _
        table.Rows(thisGrid.CurrentCell.RowNumber)

    ' Get the value of the column 1 in the DataTable.
    Console.WriteLine(currentRow("FirstName"))
    ' You can also use the index:
    ' Console.WriteLine(currentRow(1).ToString())
End Sub

Private Sub SetDataRowValue( _
    grid As DataGrid, newValue As Object)
    ' Set the value of the first column in
    ' the last row of a DataGrid.
    Dim table As DataTable = _
        CType(grid.DataSource, DataTable)
    Dim row As DataRow
    row = table.Rows((table.Rows.Count - 1))
    row("FirstName") = newValue
End Sub

private void DataGrid1_Click(
    object sender, System.EventArgs e)
{
    // Get the DataTable the grid is bound to.
    DataGrid thisGrid = (DataGrid) sender;
    DataTable table = (DataTable) thisGrid.DataSource;
    DataRow currentRow =
        table.Rows[thisGrid.CurrentCell.RowNumber];

    // Get the value of the column 1 in the DataTable.
    Console.WriteLine(currentRow["FirstName"]);
    // You can also use the index:
    // Console.WriteLine(currentRow[1]);
}

private void SetDataRowValue(
    DataGrid grid, object newValue)
{
    // Set the value of the first column in
    // the last row of a DataGrid.
    DataTable table = (DataTable) grid.DataSource;
    DataRow row = table.Rows[table.Rows.Count-1];
    row["FirstName"] = newValue;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
Item 重载
System.Data 命名空间


DataRow ..::.Item 属性 (DataColumn, DataRowVersion)

DataRow
.
.
::
.
Item 属性 (DataColumn, DataRowVersion)
DataRow 类

获取存储在指定的 DataColumn 中的数据的指定版本。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    column As DataColumn, _
    version As DataRowVersion _
) As Object
    Get
public Object this[
    DataColumn column,
    DataRowVersion version
] { get; }
public:
property Object^ Item[DataColumn^ column, DataRowVersion version] {
    Object^ get (DataColumn^ column, DataRowVersion version);
}
member Item : Object

参数

column
类型： System.Data DataColumn
DataColumn，包含有关该列的信息。
version
类型： System.Data DataRowVersion
DataRowVersion 值之一，用于指定您需要的行版本。可能值为 Default、Original、Current 和 Proposed。 DataRowVersion 值之一，用于指定您需要的行版本。可能值为 Default、Original、Current 和 Proposed。

属性值

类型： System Object
Object，包含该数据。
异常 | 条件
ArgumentException | 该列不属于此表。
ArgumentNullException | column 参数包含 null 值。
VersionNotFoundException | 该行不具有此版本的数据。

version 不应与 RowState 属性混淆。version 参数描述该列包含的数据相对于列的初始值的状态。 version 不应与 RowState 属性混淆。version 参数描述该列包含的数据相对于列的初始值的状态。

设置该属性时，如果 ColumnChanging 事件中发生异常，则会生成异常。

如果这是即时编辑，请参见 EndEdit 以获得有关可能生成的异常的信息。

下面的示例获取 DataGrid 控件中被单击单元格的当前值。

Private Sub DataGrid1_Click _
    (ByVal sender As System.Object, ByVal e As System.EventArgs)

    Dim dataGridTable As DataTable = _
        CType(DataGrid1.DataSource, DataTable)

    ' Set the current row using the RowNumber
    ' property of the CurrentCell.
    Dim currentRow As DataRow = dataGridTable.Rows( _
        DataGrid1.CurrentRowIndex)
    Dim column As DataColumn = dataGridTable.Columns(1)

    ' Get the value of the column 1 in the DataTable.
    label1.Text = currentRow(column, _
        DataRowVersion.Current).ToString()
End Sub

private void DataGrid1_Click(object sender,
    System.EventArgs e)
{
    DataTable dataGridTable =
        (DataTable)DataGrid1.DataSource;

    // Set the current row using the RowNumber
    // property of the CurrentCell.
    DataRow currentRow = dataGridTable.Rows[DataGrid1.CurrentCell.RowNumber];
    DataColumn column = dataGridTable.Columns[1];

    // Get the value of the column 1 in the DataTable.
    Console.WriteLine(currentRow[column, DataRowVersion.Current]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
Item 重载
System.Data 命名空间
DataRowVersion


DataRow ..::.Item 属性 (Int32, DataRowVersion)

DataRow
.
.
::
.
Item 属性 (Int32, DataRowVersion)
DataRow 类

获取存储在由索引和要检索的数据的版本指定的列中的数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    columnIndex As Integer, _
    version As DataRowVersion _
) As Object
    Get
public Object this[
    int columnIndex,
    DataRowVersion version
] { get; }
public:
property Object^ Item[int columnIndex, DataRowVersion version] {
    Object^ get (int columnIndex, DataRowVersion version);
}
member Item : Object

参数

columnIndex
类型： System Int32
列的从零开始的索引。
version
类型： System.Data DataRowVersion
DataRowVersion 值之一，用于指定您需要的行版本。可能值为 Default、Original、Current 和 Proposed。 DataRowVersion 值之一，用于指定您需要的行版本。可能值为 Default、Original、Current 和 Proposed。

属性值

类型： System Object
Object，包含该数据。
异常 | 条件
IndexOutOfRangeException | columnIndex 参数超出范围。
InvalidCastException | 值与列的数据类型不匹配。
VersionNotFoundException | 该行不具有此版本的数据。
DeletedRowInaccessibleException | 尝试对已删除的行设置值。

只能在调用 BeginEdit 方法之后创建或更新行；同样，必须调用 EndEdit 方法才能提交编辑。在调用 EndEdit 方法之后调用 AcceptChanges 方法之前，将存储原始值和新建议值的内部表示形式。因此，在调用 AcceptChanges 之前，您可使用 version 参数指定所需列值的版本：DataRowVersion.Original 或 DataRowVersion.Proposed。但是，只要一调用 AcceptChanges 方法，列版本便会还原为 DataRowVersion.Original。如果是新行，还可传递该参数的 DataRowVersion.Default 以检索列的默认值。在传递 DataRowVersion.Current 时，不管其版本如何，该属性都将返回当前值。 只能在调用 BeginEdit 方法之后创建或更新行；同样，必须调用 EndEdit 方法才能提交编辑。在调用 EndEdit 方法之后调用 AcceptChanges 方法之前，将存储原始值和新建议值的内部表示形式。因此，在调用 AcceptChanges 之前，您可使用 version 参数指定所需列值的版本：DataRowVersion.Original 或 DataRowVersion.Proposed。但是，只要一调用 AcceptChanges 方法，列版本便会还原为 DataRowVersion.Original。如果是新行，还可传递该参数的 DataRowVersion.Default 以检索列的默认值。在传递 DataRowVersion.Current 时，不管其版本如何，该属性都将返回当前值。 只能在调用 BeginEdit 方法之后创建或更新行；同样，必须调用 EndEdit 方法才能提交编辑。在调用 EndEdit 方法之后调用 AcceptChanges 方法之前，将存储原始值和新建议值的内部表示形式。因此，在调用 AcceptChanges 之前，您可使用 version 参数指定所需列值的版本：DataRowVersion.Original 或 DataRowVersion.Proposed。但是，只要一调用 AcceptChanges 方法，列版本便会还原为 DataRowVersion.Original。如果是新行，还可传递该参数的 DataRowVersion.Default 以检索列的默认值。在传递 DataRowVersion.Current 时，不管其版本如何，该属性都将返回当前值。 只能在调用 BeginEdit 方法之后创建或更新行；同样，必须调用 EndEdit 方法才能提交编辑。在调用 EndEdit 方法之后调用 AcceptChanges 方法之前，将存储原始值和新建议值的内部表示形式。因此，在调用 AcceptChanges 之前，您可使用 version 参数指定所需列值的版本：DataRowVersion.Original 或 DataRowVersion.Proposed。但是，只要一调用 AcceptChanges 方法，列版本便会还原为 DataRowVersion.Original。如果是新行，还可传递该参数的 DataRowVersion.Default 以检索列的默认值。在传递 DataRowVersion.Current 时，不管其版本如何，该属性都将返回当前值。 只能在调用 BeginEdit 方法之后创建或更新行；同样，必须调用 EndEdit 方法才能提交编辑。在调用 EndEdit 方法之后调用 AcceptChanges 方法之前，将存储原始值和新建议值的内部表示形式。因此，在调用 AcceptChanges 之前，您可使用 version 参数指定所需列值的版本：DataRowVersion.Original 或 DataRowVersion.Proposed。但是，只要一调用 AcceptChanges 方法，列版本便会还原为 DataRowVersion.Original。如果是新行，还可传递该参数的 DataRowVersion.Default 以检索列的默认值。在传递 DataRowVersion.Current 时，不管其版本如何，该属性都将返回当前值。 只能在调用 BeginEdit 方法之后创建或更新行；同样，必须调用 EndEdit 方法才能提交编辑。在调用 EndEdit 方法之后调用 AcceptChanges 方法之前，将存储原始值和新建议值的内部表示形式。因此，在调用 AcceptChanges 之前，您可使用 version 参数指定所需列值的版本：DataRowVersion.Original 或 DataRowVersion.Proposed。但是，只要一调用 AcceptChanges 方法，列版本便会还原为 DataRowVersion.Original。如果是新行，还可传递该参数的 DataRowVersion.Default 以检索列的默认值。在传递 DataRowVersion.Current 时，不管其版本如何，该属性都将返回当前值。

说明 说明

BeginEdit 方法在您更改数据绑定控件的值或将 DataRow 对象添加到 DataRowCollection 中时被隐式调用，EndEdit 方法在调用以下方法时被隐式调用：DataRow 对象的 AcceptChanges 方法、DataTable 对象的 AcceptChanges 方法，或 CancelEdit 方法。

与之相反，DataRowVersion 枚举的 Current 在调用 EndEdit 方法之后返回该数据的版本。

version 参数不应与 RowState 属性混淆。version 参数描述该列包含的数据相对于列的初始值的状态。RowState 属性描述整行相对于其父级 DataTable 的状态。 version 参数不应与 RowState 属性混淆。version 参数描述该列包含的数据相对于列的初始值的状态。RowState 属性描述整行相对于其父级 DataTable 的状态。 version 参数不应与 RowState 属性混淆。version 参数描述该列包含的数据相对于列的初始值的状态。RowState 属性描述整行相对于其父级 DataTable 的状态。

设置该属性时，如果 ColumnChanging 事件中发生异常，则会生成异常。

如果这是即时编辑，请参见 EndEdit 以获得有关可能生成的异常的信息。

下面的示例通过 DataRow 对象的 Item 属性获取列的当前值。

Private Sub DataGrid1_Click _
    (ByVal sender As System.Object, ByVal e As System.EventArgs)

    ' Set the current row using the RowNumber property of the CurrentCell.
    Dim currentRow As DataRow = CType(DataGrid1.DataSource, DataTable). _
       Rows(DataGrid1.CurrentCell.RowNumber)

    ' Get the value of the column 1 in the DataTable.
    label1.Text = currentRow(1, DataRowVersion.Current).ToString()
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
Item 重载
System.Data 命名空间


DataRow ..::.Item 属性 (String, DataRowVersion)

DataRow
.
.
::
.
Item 属性 (String, DataRowVersion)
DataRow 类

获取存储在已命名列中的数据的指定版本。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    columnName As String, _
    version As DataRowVersion _
) As Object
    Get
public Object this[
    string columnName,
    DataRowVersion version
] { get; }
public:
property Object^ Item[String^ columnName, DataRowVersion version] {
    Object^ get (String^ columnName, DataRowVersion version);
}
member Item : Object

参数

columnName
类型： System String
列的名称。
version
类型： System.Data DataRowVersion
DataRowVersion 值之一，用于指定您需要的行版本。可能值为 Default、Original、Current 和 Proposed。 DataRowVersion 值之一，用于指定您需要的行版本。可能值为 Default、Original、Current 和 Proposed。

属性值

类型： System Object
Object，包含该数据。
异常 | 条件
ArgumentException | 无法找到由 columnName 指定的列。
InvalidCastException | 值与列的数据类型不匹配。
VersionNotFoundException | 该行不具有此版本的数据。
DeletedRowInaccessibleException | 该行已被删除。

version 不应与 RowState 属性混淆。version 参数描述该列包含的数据相对于列的初始值的状态。RowState 属性描述整行相对于其父级 DataTable 的状态。 version 不应与 RowState 属性混淆。version 参数描述该列包含的数据相对于列的初始值的状态。RowState 属性描述整行相对于其父级 DataTable 的状态。 version 不应与 RowState 属性混淆。version 参数描述该列包含的数据相对于列的初始值的状态。RowState 属性描述整行相对于其父级 DataTable 的状态。

设置该属性时，如果 ColumnChanging 事件中发生异常，则会生成异常。

如果这是即时编辑，请参见 EndEdit 以获得有关可能生成的异常的信息。

下面的示例获取位于 DataGrid 控件的被单击单元格中的数据的当前版本。

Private Sub DataGrid1_Click _
    (ByVal sender As System.Object, ByVal e As System.EventArgs)

    ' Set the current row using the RowNumber property
    ' of the CurrentCell.
    Dim currentRow As DataRow = _
        CType(DataGrid1.DataSource, DataTable). _
        Rows(DataGrid1.CurrentCell.RowNumber)

    ' Print the current value of the column named "FirstName."
    Console.WriteLine(currentRow("FirstName", _
        DataRowVersion.Current).ToString())
End Sub

private void DataGrid1_Click(object sender, System.EventArgs e)
{
    // Set the current row using the RowNumber
    // property of the CurrentCell.
    DataRow currentRow =
        ((DataTable)(DataGrid1.DataSource)).
        Rows[DataGrid1.CurrentCell.RowNumber];

    // Print the current value of the column named "FirstName."
    Console.WriteLine(currentRow["FirstName",
        DataRowVersion.Current]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
Item 重载
System.Data 命名空间
DataRowVersion


DataRow ..::.ItemArray 属性

DataRow
.
.
::
.
ItemArray 属性
DataRow 类

通过一个数组来获取或设置此行的所有值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property ItemArray As Object()
    Get
    Set
public Object[] ItemArray { get; set; }
public:
property array<Object^>^ ItemArray {
    array<Object^>^ get ();
    void set (array<Object^>^ value);
}
member ItemArray : Object[] with get, set

属性值

类型：
array<
System Object
>
[]
()
[]

Object 类型数组。
异常 | 条件
ArgumentException | 数组大于表中的列数。
InvalidCastException | 数组中的值与其相应的 DataColumn 中的 DataType 不匹配。
ConstraintException | 编辑破坏了约束。
ReadOnlyException | 编辑尝试更改只读列的值。
NoNullAllowedException | 编辑尝试将 Null 值放在 DataColumn 对象的 AllowDBNull 为 false 的列中。
DeletedRowInaccessibleException | 该行已被删除。

可以使用此属性通过数组设置或获取此行的值。如果使用此属性来设置值，则使用的数组必须与列集合具有相同的大小和排序方式。将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 传入 ItemArray 表示未指定任何值。 可以使用此属性通过数组设置或获取此行的值。如果使用此属性来设置值，则使用的数组必须与列集合具有相同的大小和排序方式。将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 传入 ItemArray 表示未指定任何值。 可以使用此属性通过数组设置或获取此行的值。如果使用此属性来设置值，则使用的数组必须与列集合具有相同的大小和排序方式。将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 传入 ItemArray 表示未指定任何值。

用户可以在 ColumnChanging 事件或 RowChanging 事件中生成异常。

下面的示例显示如何使用 ItemArray 属性获取或设置值。

Private Sub CreateRowsWithItemArray()
    ' Make a DataTable using the function below.
    Dim dt As DataTable = MakeTableWithAutoIncrement()
    Dim relation As DataRow

    ' Declare the array variable.
    Dim rowArray(1) As Object

    ' Create 10 new rows and add to DataRowCollection.
    Dim i As Integer
    For i = 0 to 9
       rowArray(0) = DBNull.Value
       rowArray(1)= "item " & i.ToString()
       relation = dt.NewRow()
       relation.ItemArray = rowArray
       dt.Rows.Add(relation)
    Next
    PrintTable(dt)
End Sub

Private Function MakeTableWithAutoIncrement() As DataTable
    ' Make a table with one AutoIncrement column.
    Dim table As DataTable = New DataTable("table")
    Dim idColumn As DataColumn = New DataColumn("id", _
        Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True
    idColumn.AutoIncrementSeed = 10
    table.Columns.Add (idColumn)

    Dim firstNameColumn As DataColumn = New DataColumn( _
        "Item", Type.GetType("System.String"))
    table.Columns.Add(firstNameColumn)
    MakeTableWithAutoIncrement = table
End Function

Private Sub PrintTable(table As DataTable)
    Dim row As DataRow
    Dim column As DataColumn
    For Each row in table.Rows
       For Each column in table.Columns
          Console.WriteLine(row(column))
       Next
    Next
End Sub

private void CreateRowsWithItemArray()
{
    // Make a DataTable using the function below.
    DataTable dt = MakeTableWithAutoIncrement();
    DataRow relation;
    // Declare the array variable.
    object [] rowArray = new object[2];
    // Create 10 new rows and add to DataRowCollection.
    for(int i = 0; i <10; i++)
    {
        rowArray[0]=null;
        rowArray[1]= "item " + i;
        relation = dt.NewRow();
        relation.ItemArray = rowArray;
        dt.Rows.Add(relation);
    }
    PrintTable(dt);
}

private DataTable MakeTableWithAutoIncrement()
{
    // Make a table with one AutoIncrement column.
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement = true;
    idColumn.AutoIncrementSeed = 10;
    table.Columns.Add(idColumn);

    DataColumn firstNameColumn = new DataColumn("Item",
        Type.GetType("System.String"));
    table.Columns.Add(firstNameColumn);
    return table;
}

private void PrintTable(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
AcceptChanges
AutoIncrement
DataColumn


DataRow ..::.RowError 属性

DataRow
.
.
::
.
RowError 属性
DataRow 类

获取或设置行的自定义错误说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property RowError As String
    Get
    Set
public string RowError { get; set; }
public:
property String^ RowError {
    String^ get ();
    void set (String^ value);
}
member RowError : string with get, set

属性值

类型： System String
描述错误的文本。

使用 HasErrors 属性首先确定 DataRow 中是否包含错误。

下面的示例为显示在 DataGrid 控件中的表的十行设置错误文本。

Private Sub SetRowErrors(ByVal table As DataTable)
    ' Set error text for ten rows.
    Dim i As Integer
    For i = 0 to 10
        ' Insert column 1 value into each error.
        table.Rows(i).RowError = "ERROR: " & _
            table.Rows(i)(1).ToString()
    Next
    ' Get the DataSet for the table, and test it for errors.
    Dim dataSet As DataSet = table.DataSet
    TestForErrors(dataSet)
End Sub

Private Sub TestForErrors(ByVal dataSet As DataSet)
    ' Test for errors. If DataSet has errors,
    ' test each table.
    If dataSet.HasErrors
        Dim tempDataTable As DataTable
        For Each tempDataTable in dataSet.Tables
            ' If the table has errors, then print them.
            If(tempDataTable.HasErrors) Then
                PrintRowErrs(tempDataTable)
            End If
        Next
        ' Refresh the DataGrid to see the error-marked rows.
        DataGrid1.Refresh()
    End If
End Sub

Private Sub PrintRowErrs(ByVal table As DataTable)
    Dim row As DataRow
    For Each row in table.Rows
       If(row.HasErrors) Then
          Console.WriteLine(row.RowError)
       End If
    Next
End Sub

private void SetRowErrors(DataTable table)
{
    // Set error text for ten rows.
    for(int i = 0; i < 10; i++)
    {
        // Insert column 1 value into each error.
        table.Rows[i].RowError = "ERROR: "
            + table.Rows[i][1];
    }
    // Get the DataSet for the table, and test it for errors.
    DataSet dataSet = table.DataSet;
    TestForErrors(dataSet);
}

private void TestForErrors(DataSet dataSet)
{
    // Test for errors. If DataSet has errors, test each table.
    if(dataSet.HasErrors)
    {
        foreach(DataTable tempDataTable in dataSet.Tables)
        {
            // If the table has errors, then print them.
            if(tempDataTable.HasErrors)
                PrintRowErrs(tempDataTable);
        }
        // Refresh the DataGrid to see the error-marked rows.
        dataGrid1.Refresh();
    }
}

private void PrintRowErrs(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        if(row.HasErrors)
        {
            Console.WriteLine(row.RowError);
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
SetColumnError
HasErrors


DataRow ..::.RowState 属性

DataRow
.
.
::
.
RowState 属性
DataRow 类

获取与该行和 DataRowCollection 的关系相关的当前状态。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property RowState As DataRowState
    Get
public DataRowState RowState { get; }
public:
property DataRowState RowState {
    DataRowState get ();
}
member RowState : DataRowState

属性值

类型： System.Data DataRowState
DataRowState 值之一。

RowState 的值取决于两个因素：已对该行执行的操作的类型，以及是否已对 DataRow 调用了 AcceptChanges。

下面的示例首先创建有一个列的新 DataTable，然后创建单个 DataRow。当创建、添加、修改和删除 DataRow 时，将输出其 RowState。 下面的示例首先创建有一个列的新 DataTable，然后创建单个 DataRow。当创建、添加、修改和删除 DataRow 时，将输出其 RowState。

Private Sub DemonstrateRowState()
    ' Run a function to create a DataTable with one column.
    Dim table As DataTable = MakeTable()
    Dim row As DataRow

    ' Create a new DataRow.
    row = table.NewRow()
    ' Detached row.
    Console.WriteLine("New Row " & row.RowState)

    table.Rows.Add(row)
    ' New row.
    Console.WriteLine("AddRow " & row.RowState)

    table.AcceptChanges()
    ' Unchanged row.
    Console.WriteLine("AcceptChanges " & row.RowState)

    row("FirstName") = "Scott"
    ' Modified row.
    Console.WriteLine("Modified " & row.RowState)

    row.Delete()
    ' Deleted row.
    Console.WriteLine("Deleted " & row.RowState)
 End Sub

 Private Function MakeTable() As DataTable
    ' Make a simple table with one column.
    Dim table As DataTable = New DataTable("table")
    Dim dcFirstName As DataColumn = New DataColumn( _
        "FirstName", Type.GetType("System.String"))
    table.Columns.Add(dcFirstName)
    MakeTable = table
 End Function

private void DemonstrateRowState()
{
    // Run a function to create a DataTable with one column.
    DataTable table = MakeTable();
    DataRow row;

    // Create a new DataRow.
    row = table.NewRow();
    // Detached row.
    Console.WriteLine("New Row " + row.RowState);

    table.Rows.Add(row);
    // New row.
    Console.WriteLine("AddRow " + row.RowState);

    table.AcceptChanges();
    // Unchanged row.
    Console.WriteLine("AcceptChanges " + row.RowState);

    row["FirstName"] = "Scott";
    // Modified row.
    Console.WriteLine("Modified " + row.RowState);

    row.Delete();
    // Deleted row.
    Console.WriteLine("Deleted " + row.RowState);
}

private DataTable MakeTable()
{
    // Make a simple table with one column.
    DataTable table = new DataTable("table");
    DataColumn dcFirstName = new DataColumn(
        "FirstName", Type.GetType("System.String"));
    table.Columns.Add(dcFirstName);
    return table;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
AcceptChanges
BeginEdit
Add
CancelEdit
DataTable
DataRowView
Delete
EndEdit
NewRow
SetAdded
SetModified


DataRow ..::.Table 属性

DataRow
.
.
::
.
Table 属性
DataRow 类

获取该行拥有其架构的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Table As DataTable
    Get
public DataTable Table { get; }
public:
property DataTable^ Table {
    DataTable^ get ();
}
member Table : DataTable

属性值

类型： System.Data DataTable
该行所属的 DataTable。

DataRow 不必属于任何表的行集。当已创建 DataRow 但尚未添加到 DataRowCollection 中时，将发生此行为。如果 RowState 属性返回 DataRowState.Detached，则该行不在任何集合中。 DataRow 不必属于任何表的行集。当已创建 DataRow 但尚未添加到 DataRowCollection 中时，将发生此行为。如果 RowState 属性返回 DataRowState.Detached，则该行不在任何集合中。 DataRow 不必属于任何表的行集。当已创建 DataRow 但尚未添加到 DataRowCollection 中时，将发生此行为。如果 RowState 属性返回 DataRowState.Detached，则该行不在任何集合中。

下面的示例使用 Table 属性返回对 DataTable 的列集合的引用。

Private Sub GetTable(ByVal row As DataRow)
   ' Get the DataTable of a DataRow
   Dim table As DataTable = row.Table

   ' Print the DataType of each column in the table.
   Dim column As DataColumn
   For Each column in table.Columns
      Console.WriteLine(column.DataType)
   Next
End Sub

private void GetTable(DataRow row)
{
    // Get the DataTable of a DataRow
    DataTable table = row.Table;

    // Print the DataType of each column in the table.
    foreach(DataColumn column in table.Columns)
    {
        Console.WriteLine(column.DataType);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRow 类
DataRow 成员
System.Data 命名空间
DataColumnCollection
DataTable


DataRowAction 枚举

DataRowAction 枚举

描述在 DataRow 上执行的操作。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<FlagsAttribute> _
Public Enumeration DataRowAction
[FlagsAttribute]
public enum DataRowAction
[FlagsAttribute]
public enum class DataRowAction
[<FlagsAttribute>]
type DataRowAction
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Nothing | 此行尚未更改。
由 XNA Framework 提供支持 | Delete | 此行已从该表中删除。
由 XNA Framework 提供支持 | Change | 此行已更改。
由 XNA Framework 提供支持 | Rollback | 对此行最近进行的更改已回滚。
由 XNA Framework 提供支持 | Commit | 对此行进行的更改已被提交。
由 XNA Framework 提供支持 | Add | 此行已添加到该表中。
由 XNA Framework 提供支持 | ChangeOriginal | 该行的原始版本已更改。
由 XNA Framework 提供支持 | ChangeCurrentAndOriginal | 该行的原始和当前版本都已更改。

DataRowAction 作为 DataRowChangeEventArgs 的一部分返回，指示为引发该事件而针对行执行的操作。

使用此枚举的成员确定已在 DataRow 上发生的、针对它所属的 DataTable 的操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间
DataRow
DataTable


DataRowBuilder 类

DataRowBuilder 类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

DataRowBuilder 类型支持 .NET Framework 基础结构，并且不应直接从代码中使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DataRowBuilder
public sealed class DataRowBuilder
public ref class DataRowBuilder sealed
[<SealedAttribute>]
type DataRowBuilder =  class end

System.Data System.Data..::.DataRowBuilderDataRowBuilder
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowBuilder 成员
System.Data 命名空间


DataRowBuilder 成员

DataRowBuilder 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowBuilder 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

DataRowBuilder 类型支持 .NET Framework 基础结构，并且不应直接从代码中使用。

DataRowBuilder 类型公开以下成员。

名称 说明
页首

参考

DataRowBuilder 类
System.Data 命名空间


DataRowBuilder 方法

DataRowBuilder 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowBuilder 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

DataRowBuilder 类型公开以下成员。

名称 说明
页首

参考

DataRowBuilder 类
System.Data 命名空间


DataRowChangeEventArgs 类

DataRowChangeEventArgs 类
成员

为 RowChanged、RowChanging、OnRowDeleting 和 OnRowDeleted 事件提供数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataRowChangeEventArgs _
    Inherits EventArgs
public class DataRowChangeEventArgs : EventArgs
public ref class DataRowChangeEventArgs : public EventArgs
type DataRowChangeEventArgs =
    class
        inherit EventArgs
    end

RowChanged、RowChanging、OnRowDeleted 和 OnRowDeleting 事件在针对 DataRow 执行操作时发生。

下面的示例添加 DataRowChangeEventHandler 和过程，以便在行被更改时处理事件。

Private dataTable As DataTable

Private Sub [AddHandler]()
   dataTable = CType(DataGrid1.DataSource, DataTable)
   AddHandler dataTable.RowChanged, AddressOf Me.dataTable_Changed
End Sub

Private Sub dataTable_Changed _
(ByVal sender As System.Object, ByVal e As System.Data.DataRowChangeEventArgs)
   Console.WriteLine("Row Changed", e.Action, e.Row.Item(DataGrid1.CurrentCell.ColumnNumber))
End Sub

System.Data System.Data..::.DataRowChangeEventArgsDataRowChangeEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowChangeEventArgs 成员
System.Data 命名空间
OnRowChanged
OnRowChanging
OnRowDeleting
DataRow
DataRowAction
DataRowChangeEventHandler
OnRowDeleted
DataTable


DataRowChangeEventArgs 成员

DataRowChangeEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowChangeEventArgs 类

为 RowChanged、RowChanging、OnRowDeleting 和 OnRowDeleted 事件提供数据。

DataRowChangeEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataRowChangeEventArgs 类
System.Data 命名空间


DataRowChangeEventArgs 构造函数

DataRowChangeEventArgs 构造函数
DataRowChangeEventArgs 类

初始化 DataRowChangeEventArgs 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    row As DataRow, _
    action As DataRowAction _
)
public DataRowChangeEventArgs(
    DataRow row,
    DataRowAction action
)
public:
DataRowChangeEventArgs(
    DataRow^ row,
    DataRowAction action
)
new :
        row:DataRow *
        action:DataRowAction -> DataRowChangeEventArgs

参数

row
类型： System.Data DataRow
正针对其发生操作的 DataRow。
action
类型： System.Data DataRowAction
DataRowAction 值之一。

下面的示例添加 DataRowChangeEventHandler 和过程，以便在行被更改时处理事件。

Private dataTable As DataTable

Private Sub [AddHandler]()
   dataTable = CType(DataGrid1.DataSource, DataTable)
   AddHandler dataTable.RowChanged, AddressOf Me.dataTable_Changed
End Sub

Private Sub dataTable_Changed _
(ByVal sender As System.Object, ByVal e As System.Data.DataRowChangeEventArgs)
   Console.WriteLine("Row Changed", e.Action, e.Row.Item(DataGrid1.CurrentCell.ColumnNumber))
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowChangeEventArgs 类
DataRowChangeEventArgs 成员
System.Data 命名空间
OnRowChanged
OnRowChanging
OnRowDeleting
DataRow
DataRowAction
DataRowChangeEventHandler
OnRowDeleted
DataTable


DataRowChangeEventArgs 方法

DataRowChangeEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowChangeEventArgs 类

DataRowChangeEventArgs 类型公开以下成员。

名称 说明
页首

参考

DataRowChangeEventArgs 类
System.Data 命名空间


DataRowChangeEventArgs 属性

DataRowChangeEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowChangeEventArgs 类

DataRowChangeEventArgs 类型公开以下成员。

名称 说明
页首

参考

DataRowChangeEventArgs 类
System.Data 命名空间


DataRowChangeEventArgs ..::.Action 属性

DataRowChangeEventArgs
.
.
::
.
Action 属性
DataRowChangeEventArgs 类

获取已针对 DataRow 发生的操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Action As DataRowAction
    Get
public DataRowAction Action { get; }
public:
property DataRowAction Action {
    DataRowAction get ();
}
member Action : DataRowAction

属性值

类型： System.Data DataRowAction
DataRowAction 值之一。

下面的示例添加 DataRowChangeEventHandler 和过程，以便在行被更改时处理事件。

Private dataTable As DataTable

Private Sub [AddHandler]()
   dataTable = CType(DataGrid1.DataSource, DataTable)
   AddHandler dataTable.RowChanged, AddressOf Me.dataTable_Changed
End Sub

Private Sub dataTable_Changed _
(ByVal sender As System.Object, ByVal e As System.Data.DataRowChangeEventArgs)
   Console.WriteLine("Row Changed", e.Action, e.Row.Item(DataGrid1.CurrentCell.ColumnNumber))
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowChangeEventArgs 类
DataRowChangeEventArgs 成员
System.Data 命名空间
OnRowChanged
OnRowChanging
OnRowDeleting
DataRow
DataRowAction
DataRowChangeEventHandler
OnRowDeleted
DataTable


DataRowChangeEventArgs ..::.Row 属性

DataRowChangeEventArgs
.
.
::
.
Row 属性
DataRowChangeEventArgs 类

获取已针对其发生操作的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Row As DataRow
    Get
public DataRow Row { get; }
public:
property DataRow^ Row {
    DataRow^ get ();
}
member Row : DataRow

属性值

类型： System.Data DataRow
已针对其发生操作的 DataRow。

下面的示例添加 DataRowChangeEventHandler 和过程，以便在行被更改时处理事件。

Private dataTable As DataTable

Private Sub [AddHandler]()
   dataTable = CType(DataGrid1.DataSource, DataTable)
   AddHandler dataTable.RowChanged, AddressOf Me.dataTable_Changed
End Sub

Private Sub dataTable_Changed _
(ByVal sender As System.Object, ByVal e As System.Data.DataRowChangeEventArgs)
   Console.WriteLine("Row Changed", e.Action, e.Row.Item(DataGrid1.CurrentCell.ColumnNumber))
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowChangeEventArgs 类
DataRowChangeEventArgs 成员
System.Data 命名空间
OnRowChanged
OnRowChanging
OnRowDeleting
DataRow
DataRowAction
DataRowChangeEventHandler
OnRowDeleted
DataTable


DataRowChangeEventHandler 委托

DataRowChangeEventHandler 委托

表示将处理 DataTable 的 RowChanging、RowChanged、RowDeleting 和 RowDeleted 事件的方法。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Delegate Sub DataRowChangeEventHandler ( _
    sender As Object, _
    e As DataRowChangeEventArgs _
)
public delegate void DataRowChangeEventHandler(
    Object sender,
    DataRowChangeEventArgs e
)
public delegate void DataRowChangeEventHandler(
    Object^ sender,
    DataRowChangeEventArgs^ e
)
type DataRowChangeEventHandler =
    delegate of
        sender:Object *
        e:DataRowChangeEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.Data DataRowChangeEventArgs
包含事件数据的 DataRowChangeEventArgs。

当创建 DataRowChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataRowChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataRowChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataRowChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。

下面的示例添加 DataRowChangeEventHandler 和过程，以便在行被更改时处理事件。该过程打印已更改行的操作和值。 下面的示例添加 DataRowChangeEventHandler 和过程，以便在行被更改时处理事件。该过程打印已更改行的操作和值。

Private dataTable As DataTable

Private Sub [AddHandler]()
    dataTable = New DataTable("dataTable")
    AddHandler dataTable.RowChanged, AddressOf dataTable_Changed
End Sub

Private Sub dataTable_Changed _
   (sender As Object, e As System.Data.DataRowChangeEventArgs)

    Console.WriteLine("Row Changed", e.Action, _
       e.Row(dataGrid1.CurrentCell.ColumnNumber))
End Sub

private DataTable dataTable;

private void AddHandler(){
   dataTable = new DataTable("dataTable");
   dataTable.RowChanged +=
      new System.Data.DataRowChangeEventHandler(dataTable_Changed);
}

private void dataTable_Changed(object sender,
System.Data.DataRowChangeEventArgs e)
{
   Console.WriteLine("Row Changed", e.Action,
      e.Row[dataGrid1.CurrentCell.ColumnNumber]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间
DataRow
DataTable
DataRowChangeEventArgs


DataRowCollection 类

DataRowCollection 类
成员

表示 DataTable 的行的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DataRowCollection _
    Inherits InternalDataCollectionBase
public sealed class DataRowCollection : InternalDataCollectionBase
public ref class DataRowCollection sealed : public InternalDataCollectionBase
[<SealedAttribute>]
type DataRowCollection =
    class
        inherit InternalDataCollectionBase
    end

DataRowCollection 是 DataTable 的主要组件。当 DataColumnCollection 定义表的架构时，DataRowCollection 中包含表的实际数据，在该表中，DataRowCollection 中的每个 DataRow 表示单行。 DataRowCollection 是 DataTable 的主要组件。当 DataColumnCollection 定义表的架构时，DataRowCollection 中包含表的实际数据，在该表中，DataRowCollection 中的每个 DataRow 表示单行。

您可通过调用 Add 和 Remove 方法，从 DataRowCollection 中插入和删除 DataRow 对象。您还可通过调用 Find 方法搜索在主键列中包含特定值的 DataRow 对象，也可通过调用 Contains 方法在基于字符的数据中搜索单个单词或词组。 您可通过调用 Add 和 Remove 方法，从 DataRowCollection 中插入和删除 DataRow 对象。您还可通过调用 Find 方法搜索在主键列中包含特定值的 DataRow 对象，也可通过调用 Contains 方法在基于字符的数据中搜索单个单词或词组。

本节中的第一个示例打印 DataRowCollection 中每一行的第 1 列的值。第二个示例向 DataRowCollection 中添加用 NewRow 方法创建的新行。 本节中的第一个示例打印 DataRowCollection 中每一行的第 1 列的值。第二个示例向 DataRowCollection 中添加用 NewRow 方法创建的新行。

Private Sub ShowRows(Byval table As DataTable)
    ' Print the number of rows in the collection.
    Console.WriteLine(table.Rows.Count)

    Dim row  As DataRow
    ' Print the value of columns 1 in each row
    For Each row In table.Rows
        Console.WriteLine(row(1))
    Next
End Sub

Private Sub AddRow(ByVal table As DataTable)
    ' Instantiate a new row using the NewRow method.
    Dim newRow As DataRow = table.NewRow()
    ' Insert code to fill the row with values.

    ' Add the row to the DataRowCollection.
    table.Rows.Add(newRow)
End Sub

private void ShowRows(DataTable table)
{
    // Print the number of rows in the collection.
    Console.WriteLine(table.Rows.Count);
    // Print the value of columns 1 in each row
    foreach(DataRow row in table.Rows)
    {
        Console.WriteLine(row[1]);
    }
}

private void AddRow(DataTable table)
{
    DataRowCollection rowCollection = table.Rows;
    // Instantiate a new row using the NewRow method.

    DataRow newRow = table.NewRow();
    // Insert code to fill the row with values.

    // Add the row to the DataRowCollection.
    table.Rows.Add(newRow);
}

System.Data System.Data..::.DataRowCollectionDataRowCollection

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 成员
System.Data 命名空间
DataRow
DataTable
NewRow


DataRowCollection 成员

DataRowCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowCollection 类

表示 DataTable 的行的集合。

DataRowCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataRowCollection 类
System.Data 命名空间


DataRowCollection 方法

DataRowCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowCollection 类

DataRowCollection 类型公开以下成员。

名称 说明
页首

参考

DataRowCollection 类
System.Data 命名空间


DataRowCollection ..::.Add 方法

DataRowCollection
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowCollection 类

向 DataRowCollection 添加 DataRow。

名称 说明
页首

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间


DataRowCollection ..::.Add 方法 (DataRow)

DataRowCollection
.
.
::
.
Add 方法 (DataRow)
DataRowCollection 类

将指定的 DataRow 添加到 DataRowCollection 对象中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Add ( _
    row As DataRow _
)
public void Add(
    DataRow row
)
public:
void Add(
    DataRow^ row
)
member Add :
        row:DataRow -> unit

参数

row
类型： System.Data DataRow
要添加的 DataRow。
异常 | 条件
ArgumentNullException | 该行为 null。
ArgumentException | 此行要么属于另一个表，要么已经属于此表。
ConstraintException | 添加将使约束无效。
NoNullAllowedException | 添加尝试将空值置于 AllowDBNull 为假的 DataColumn 中

若要创建新的 DataRow，必须使用 DataTable 类的 NewRow 方法。当您使用 NewRow 方法时，新的 DataRow 对象通过父级 DataTable 的架构返回。当您创建了 DataRow 对象并为它的每个列设置值之后，使用 Add 方法将该对象添加到集合中。 若要创建新的 DataRow，必须使用 DataTable 类的 NewRow 方法。当您使用 NewRow 方法时，新的 DataRow 对象通过父级 DataTable 的架构返回。当您创建了 DataRow 对象并为它的每个列设置值之后，使用 Add 方法将该对象添加到集合中。 若要创建新的 DataRow，必须使用 DataTable 类的 NewRow 方法。当您使用 NewRow 方法时，新的 DataRow 对象通过父级 DataTable 的架构返回。当您创建了 DataRow 对象并为它的每个列设置值之后，使用 Add 方法将该对象添加到集合中。

如果用户在 RowChanging 事件中生成异常，则生成异常。如果发生异常，则不向表中添加行。 如果用户在 RowChanging 事件中生成异常，则生成异常。如果发生异常，则不向表中添加行。

下面的示例使用 Add 方法将新的 DataRow 添加到 DataRowCollection 对象中。

Private Sub ShowRows(Byval table As DataTable)
    ' Print the number of rows in the collection.
    Console.WriteLine(table.Rows.Count)

    Dim row  As DataRow
    ' Print the value of columns 1 in each row
    For Each row In table.Rows
        Console.WriteLine(row(1))
    Next
End Sub

Private Sub AddRow(ByVal table As DataTable)
    ' Instantiate a new row using the NewRow method.
    Dim newRow As DataRow = table.NewRow()
    ' Insert code to fill the row with values.

    ' Add the row to the DataRowCollection.
    table.Rows.Add(newRow)
End Sub

private void ShowRows(DataTable table)
{
    // Print the number of rows in the collection.
    Console.WriteLine(table.Rows.Count);
    // Print the value of columns 1 in each row
    foreach(DataRow row in table.Rows)
    {
        Console.WriteLine(row[1]);
    }
}

private void AddRow(DataTable table)
{
    DataRowCollection rowCollection = table.Rows;
    // Instantiate a new row using the NewRow method.

    DataRow newRow = table.NewRow();
    // Insert code to fill the row with values.

    // Add the row to the DataRowCollection.
    table.Rows.Add(newRow);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
Add 重载
System.Data 命名空间
Clear
DataTable
DataRow
NewRow
Remove


DataRowCollection ..::.Add 方法 ( array<Object >[]()[])

DataRowCollection
.
.
::
.
Add 方法 (
array<
Object
>
[]
()
[]
)
DataRowCollection 类

创建使用指定值的行，并将其添加到 DataRowCollection 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    ParamArray values As Object() _
) As DataRow
public DataRow Add(
    params Object[] values
)
public:
DataRow^ Add(
    ... array<Object^>^ values
)
member Add :
        values:Object[] -> DataRow

参数

values
类型：
array<
System Object
>
[]
()
[]

用于创建新行的值的数组。

返回值

类型： System.Data DataRow
无。
异常 | 条件
ArgumentException | 数组大于表中的列数。
InvalidCastException | 值与其各自的列类型不匹配。
ConstraintException | 添加行将使约束无效。
NoNullAllowedException | 尝试将空值放到 AllowDBNull 为 false 的列中。

如果 DataColumn 对象的 AutoIncrement 设置为 True，则应传递 Null 以获取该列的默认值。

如果在 ColumnChanging 或 RowChanging 事件过程中生成异常，则也可发生异常。如果发生异常，则不向表中添加行。 如果在 ColumnChanging 或 RowChanging 事件过程中生成异常，则也可发生异常。如果发生异常，则不向表中添加行。

下面的示例使用 Add 方法创建新的 DataRow 对象并将其添加到 DataRowCollection 中。

Private Sub AddRow(ByVal table As DataTable)
    ' Create an array with three elements.
    Dim rowVals(2) As Object
    Dim rowCollection As DataRowCollection = table.Rows
    rowVals(0) = "hello"
    rowVals(1) = "world"
    rowVals(2) = "two"

    ' Add and return the new row.
    Dim row As DataRow = rowCollection.Add(rowVals)
End Sub

private void AddRow(DataTable table)
{
    // Create an array with three elements.
    object[] rowVals = new object[3];
    DataRowCollection rowCollection = table.Rows;
    rowVals[0] = "hello";
    rowVals[1] = "world";
    rowVals[2] = "two";

    // Add and return the new row.
    DataRow row = rowCollection.Add(rowVals);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
Add 重载
System.Data 命名空间
Clear
DataTable
DataRow
NewRow
Remove


DataRowCollection ..::.Clear 方法

DataRowCollection
.
.
::
.
Clear 方法
DataRowCollection 类

清除所有行的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Clear
public void Clear()
public:
void Clear()
member Clear : unit -> unit

异常 | 条件
InvalidConstraintException | 针对 DataRowCollection 实施 ForeignKeyConstraint。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间
Add
Remove


DataRowCollection ..::.Contains 方法

DataRowCollection
.
.
::
.
Contains 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowCollection 类

获取一个值，该值表明集合中任何行的主键列是否包含指定值。

名称 说明
页首

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间


DataRowCollection ..::.Contains 方法 (Object)

DataRowCollection
.
.
::
.
Contains 方法 (Object)
DataRowCollection 类

获取一个值，该值指示集合中任何行的主键中是否包含指定的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    key As Object _
) As Boolean
public bool Contains(
    Object key
)
public:
bool Contains(
    Object^ key
)
member Contains :
        key:Object -> bool

参数

key
类型： System Object
要测试的主键的值。

返回值

类型： System Boolean
如果集合中包含具有指定主键值的 DataRow，则为 true；否则为 false。
异常 | 条件
MissingPrimaryKeyException | 该表没有主键。

若要使用 Contains 方法，DataRowCollection 对象所属的 DataTable 对象必须至少有一列被指定为主键列。有关如何创建主键列的更多信息，请参见 PrimaryKey 属性。 若要使用 Contains 方法，DataRowCollection 对象所属的 DataTable 对象必须至少有一列被指定为主键列。有关如何创建主键列的更多信息，请参见 PrimaryKey 属性。

一旦确定了行中包含指定值之后，即可使用 Find 方法返回具有该值的特定 DataRow 对象。

下面的 Visual Basic 示例使用 Contains 方法确定 DataRowCollection 对象是否包含特定值。

 Private Sub ColContains()
    Dim table As DataTable = CType(DataGrid1.DataSource, DataTable)
    Dim rowCollection As DataRowCollection = table.Rows
    If rowCollection.Contains(Edit1.Text) Then
       Label1.Text = "At least one row contains " & Edit1.Text
    Else
       Label1.Text = "No row contains the value in its primary key field"
    End If
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
Contains 重载
System.Data 命名空间
PrimaryKey
Find


DataRowCollection ..::.Contains 方法 ( array<Object >[]()[])

DataRowCollection
.
.
::
.
Contains 方法 (
array<
Object
>
[]
()
[]
)
DataRowCollection 类

获取一个值，该值指示集合中任何行的主键列中是否包含在对象数组中指定的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    keys As Object() _
) As Boolean
public bool Contains(
    Object[] keys
)
public:
bool Contains(
    array<Object^>^ keys
)
member Contains :
        keys:Object[] -> bool

参数

keys
类型：
array<
System Object
>
[]
()
[]

要测试的主键值的数组。

返回值

类型： System Boolean
如果 DataRowCollection 中包含具有指定键值的 DataRow，则为 true；否则为 false。
异常 | 条件
MissingPrimaryKeyException | 该表没有主键。

若要配合使用 Contains 方法和值的数组，则 DataRowCollection 对象所属的 DataTable 对象必须具有指定为主键的列的数组。有关如何创建主键列数组的更多信息，请参见 PrimaryKey 属性。数组元素的数量必须与 DataTable 中主键列的数量相对应。 若要配合使用 Contains 方法和值的数组，则 DataRowCollection 对象所属的 DataTable 对象必须具有指定为主键的列的数组。有关如何创建主键列数组的更多信息，请参见 PrimaryKey 属性。数组元素的数量必须与 DataTable 中主键列的数量相对应。 若要配合使用 Contains 方法和值的数组，则 DataRowCollection 对象所属的 DataTable 对象必须具有指定为主键的列的数组。有关如何创建主键列数组的更多信息，请参见 PrimaryKey 属性。数组元素的数量必须与 DataTable 中主键列的数量相对应。

一旦确定了行中包含指定值之后，即可使用 Find 方法返回具有该值的特定 DataRow 对象。

下面的 Visual Basic 示例使用 Contains 方法在 DataRowCollection 对象中查找特定行。该示例创建值的数组（为表中的每个主键都创建一个元素），然后将该数组传递给该方法以返回 true 或 false。 下面的 Visual Basic 示例使用 Contains 方法在 DataRowCollection 对象中查找特定行。该示例创建值的数组（为表中的每个主键都创建一个元素），然后将该数组传递给该方法以返回 true 或 false。

Private Sub ContainsArray()
   ' This example assumes that the DataTable object contains two
   ' DataColumn objects designated as primary keys.
   ' The table has two primary key columns.
   Dim arrKeyVals(1) As Object
   Dim table As DataTable = CType(DataGrid1.DataSource, DataTable)
   Dim rowCollection As DataRowCollection = table.Rows
   arrKeyVals(0) = "Hello"
   arrKeyVals(1) = "World"
   label1.Text = rowCollection.Contains(arrKeyVals).ToString()
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
Contains 重载
System.Data 命名空间
PrimaryKey
Find


DataRowCollection ..::.CopyTo 方法

DataRowCollection
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowCollection 类

将该集合中的所有 DataRow 对象复制到起始位置为给定目标数组索引的给定数组中。

名称 说明
页首

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间


DataRowCollection ..::.CopyTo 方法 (Array, Int32)

DataRowCollection
.
.
::
.
CopyTo 方法 (Array, Int32)
DataRowCollection 类

将该集合中的所有 DataRow 对象复制到起始位置为给定目标数组索引的给定数组中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Sub CopyTo ( _
    ar As Array, _
    index As Integer _
)
public override void CopyTo(
    Array ar,
    int index
)
public:
virtual void CopyTo(
    Array^ ar,
    int index
) override
abstract CopyTo :
        ar:Array *
        index:int -> unit
override CopyTo :
        ar:Array *
        index:int -> unit

参数

ar
类型： System Array
一维数组，它是从 DataRowCollection 中复制的元素的目标。该数组必须具有从零开始的索引。 一维数组，它是从 DataRowCollection 中复制的元素的目标。该数组必须具有从零开始的索引。
index
类型： System Int32
复制开始时所在的数组中的从零开始的索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
CopyTo 重载
System.Data 命名空间


DataRowCollection ..::.CopyTo 方法 ( array<DataRow >[]()[], Int32)

DataRowCollection
.
.
::
.
CopyTo 方法 (
array<
DataRow
>
[]
()
[]
, Int32)
DataRowCollection 类

将该集合中的所有 DataRow 对象复制到起始位置为给定目标数组索引的给定数组中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As DataRow(), _
    index As Integer _
)
public void CopyTo(
    DataRow[] array,
    int index
)
public:
void CopyTo(
    array<DataRow^>^ array,
    int index
)
member CopyTo :
        array:DataRow[] *
        index:int -> unit

参数

array
类型：
array<
System.Data DataRow
>
[]
()
[]

一维数组，它是从 DataRowCollection 中复制的元素的目标。该数组必须具有从零开始的索引。 一维数组，它是从 DataRowCollection 中复制的元素的目标。该数组必须具有从零开始的索引。
index
类型： System Int32
复制开始时所在的数组中的从零开始的索引。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
CopyTo 重载
System.Data 命名空间


DataRowCollection ..::.Find 方法

DataRowCollection
.
.
::
.
Find 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowCollection 类

获取指定的 DataRow。

名称 说明
页首

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间


DataRowCollection ..::.Find 方法 (Object)

DataRowCollection
.
.
::
.
Find 方法 (Object)
DataRowCollection 类

获取由主键值指定的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Find ( _
    key As Object _
) As DataRow
public DataRow Find(
    Object key
)
public:
DataRow^ Find(
    Object^ key
)
member Find :
        key:Object -> DataRow

参数

key
类型： System Object
要查找的 DataRow 的主键值。

返回值

类型： System.Data DataRow
包含指定的主键值的 DataRow；否则为空值（如果 DataRowCollection 中不存在主键值）。
异常 | 条件
MissingPrimaryKeyException | 该表没有主键。

若要使用 Find 方法，DataRowCollection 对象所属的 DataTable 对象必须至少有一列被指定为主键列。有关如何创建主键列的更多信息，请参见 PrimaryKey 属性。 若要使用 Find 方法，DataRowCollection 对象所属的 DataTable 对象必须至少有一列被指定为主键列。有关如何创建主键列的更多信息，请参见 PrimaryKey 属性。

下面的示例使用 Find 方法在 DataRow 对象的集合中查找主键值“2”。该方法返回特定的 DataRow 对象，允许您根据需要更改它的值。 下面的示例使用 Find 方法在 DataRow 对象的集合中查找主键值“2”。该方法返回特定的 DataRow 对象，允许您根据需要更改它的值。

 Private Sub FindInPrimaryKeyColumn(ByVal table As DataTable, _
    ByVal pkValue As Long)
    ' Find the number pkValue in the primary key
    ' column of the table.
    Dim foundRow As DataRow = table.Rows.Find(pkValue)

    ' Print the value of column 1 of the found row.
    If Not (foundRow Is Nothing) Then
        Console.WriteLine(foundRow(1).ToString())
    End If
End Sub

private void FindInPrimaryKeyColumn(DataTable table,
    long pkValue)
{
    // Find the number pkValue in the primary key
    // column of the table.
    DataRow foundRow = table.Rows.Find(pkValue);

    // Print the value of column 1 of the found row.
    if(foundRow != null)
        Console.WriteLine(foundRow[1]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
Find 重载
System.Data 命名空间
DataTable
PrimaryKey
Contains


DataRowCollection ..::.Find 方法 ( array<Object >[]()[])

DataRowCollection
.
.
::
.
Find 方法 (
array<
Object
>
[]
()
[]
)
DataRowCollection 类

获取包含指定的主键值的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Find ( _
    keys As Object() _
) As DataRow
public DataRow Find(
    Object[] keys
)
public:
DataRow^ Find(
    array<Object^>^ keys
)
member Find :
        keys:Object[] -> DataRow

参数

keys
类型：
array<
System Object
>
[]
()
[]

要查找的主键值的数组。数组的类型为 Object。 要查找的主键值的数组。数组的类型为 Object。

返回值

类型： System.Data DataRow
包含指定的主键值的 DataRow 对象；如果 DataRowCollection 中不存在主键值，则为 Null 值。
异常 | 条件
IndexOutOfRangeException | 任何行都不与该索引值相对应。
MissingPrimaryKeyException | 该表没有主键。

若要使用 Find 方法，DataRowCollection 对象所属的 DataTable 对象必须至少有一列被指定为主键列。当两行或更多行具有相同的主键值时，则返回找到的第一行。当 EnforceConstraints 设置为 false 时会发生这种情况。有关如何创建 PrimaryKey 列或 DataColumn 对象的数组（当表有多个主键时）的更多信息，请参见 PrimaryKey 属性。 若要使用 Find 方法，DataRowCollection 对象所属的 DataTable 对象必须至少有一列被指定为主键列。当两行或更多行具有相同的主键值时，则返回找到的第一行。当 EnforceConstraints 设置为 false 时会发生这种情况。有关如何创建 PrimaryKey 列或 DataColumn 对象的数组（当表有多个主键时）的更多信息，请参见 PrimaryKey 属性。 若要使用 Find 方法，DataRowCollection 对象所属的 DataTable 对象必须至少有一列被指定为主键列。当两行或更多行具有相同的主键值时，则返回找到的第一行。当 EnforceConstraints 设置为 false 时会发生这种情况。有关如何创建 PrimaryKey 列或 DataColumn 对象的数组（当表有多个主键时）的更多信息，请参见 PrimaryKey 属性。 若要使用 Find 方法，DataRowCollection 对象所属的 DataTable 对象必须至少有一列被指定为主键列。当两行或更多行具有相同的主键值时，则返回找到的第一行。当 EnforceConstraints 设置为 false 时会发生这种情况。有关如何创建 PrimaryKey 列或 DataColumn 对象的数组（当表有多个主键时）的更多信息，请参见 PrimaryKey 属性。

下面的示例使用数组的值在 DataRow 对象的集合中查找特定行。该方法假定 DataTable 具有三个主键列。在创建值的数组后，该代码使用 Find 方法和该数组获取所需的特定对象。 下面的示例使用数组的值在 DataRow 对象的集合中查找特定行。该方法假定 DataTable 具有三个主键列。在创建值的数组后，该代码使用 Find 方法和该数组获取所需的特定对象。 下面的示例使用数组的值在 DataRow 对象的集合中查找特定行。该方法假定 DataTable 具有三个主键列。在创建值的数组后，该代码使用 Find 方法和该数组获取所需的特定对象。

 Private Sub FindInMultiPKey(ByVal table As DataTable)
    ' Create an array for the key values to find.
    Dim findTheseVals(2) As Object

    ' Set the values of the keys to find.
    findTheseVals(0) = "John"
    findTheseVals(1) = "Smith"
    findTheseVals(2) = "5 Main St."

    Dim foundRow As DataRow = table.Rows.Find(findTheseVals)
    ' Display column 1 of the found row.
    If Not (foundRow Is Nothing) Then
        Console.WriteLine(foundRow(1).ToString())
    End If
End Sub

private void FindInMultiPKey(DataTable table)
{
    // Create an array for the key values to find.
    object[]findTheseVals = new object[3];

    // Set the values of the keys to find.
    findTheseVals[0] = "John";
    findTheseVals[1] = "Smith";
    findTheseVals[2] = "5 Main St.";

    DataRow foundRow = table.Rows.Find(findTheseVals);
    // Display column 1 of the found row.
    if(foundRow != null)
        Console.WriteLine(foundRow[1]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
Find 重载
System.Data 命名空间
DataTable
PrimaryKey
Contains


DataRowCollection ..::.GetEnumerator 方法

DataRowCollection
.
.
::
.
GetEnumerator 方法
DataRowCollection 类

获取该集合的 IEnumerator。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetEnumerator As IEnumerator
public override IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() override
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
该集合的 IEnumerator。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间


DataRowCollection ..::.IndexOf 方法

DataRowCollection
.
.
::
.
IndexOf 方法
DataRowCollection 类

获取指定 DataRow 对象的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    row As DataRow _
) As Integer
public int IndexOf(
    DataRow row
)
public:
int IndexOf(
    DataRow^ row
)
member IndexOf :
        row:DataRow -> int

参数

row
类型： System.Data DataRow
要搜索的 DataRow。

返回值

类型： System Int32
该行从零开始的索引；如果在集合中未找到该行，则为 -1。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间


DataRowCollection ..::.InsertAt 方法

DataRowCollection
.
.
::
.
InsertAt 方法
DataRowCollection 类

将新行插入到集合中的指定位置。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub InsertAt ( _
    row As DataRow, _
    pos As Integer _
)
public void InsertAt(
    DataRow row,
    int pos
)
public:
void InsertAt(
    DataRow^ row,
    int pos
)
member InsertAt :
        row:DataRow *
        pos:int -> unit

参数

row
类型： System.Data DataRow
要添加的 DataRow。
pos
类型： System Int32
集合中要添加 DataRow 的位置。

由 InsertAt 指定的位置只按照 DataRowCollection 中行的顺序反映。如果在 DataRow 数组中返回了多行，则插入的行可能不会返回到 InsertAt 指定的位置。例如，Rows 属性在指定的插入位置返回该行。Select 和 GetChildRows 可能不是。当您将 DataRowCollection 的内容写成 XML（例如，WriteXml）时，行按照由 DataRowCollection 指定的顺序写入。 由 InsertAt 指定的位置只按照 DataRowCollection 中行的顺序反映。如果在 DataRow 数组中返回了多行，则插入的行可能不会返回到 InsertAt 指定的位置。例如，Rows 属性在指定的插入位置返回该行。Select 和 GetChildRows 可能不是。当您将 DataRowCollection 的内容写成 XML（例如，WriteXml）时，行按照由 DataRowCollection 指定的顺序写入。 由 InsertAt 指定的位置只按照 DataRowCollection 中行的顺序反映。如果在 DataRow 数组中返回了多行，则插入的行可能不会返回到 InsertAt 指定的位置。例如，Rows 属性在指定的插入位置返回该行。Select 和 GetChildRows 可能不是。当您将 DataRowCollection 的内容写成 XML（例如，WriteXml）时，行按照由 DataRowCollection 指定的顺序写入。 由 InsertAt 指定的位置只按照 DataRowCollection 中行的顺序反映。如果在 DataRow 数组中返回了多行，则插入的行可能不会返回到 InsertAt 指定的位置。例如，Rows 属性在指定的插入位置返回该行。Select 和 GetChildRows 可能不是。当您将 DataRowCollection 的内容写成 XML（例如，WriteXml）时，行按照由 DataRowCollection 指定的顺序写入。 由 InsertAt 指定的位置只按照 DataRowCollection 中行的顺序反映。如果在 DataRow 数组中返回了多行，则插入的行可能不会返回到 InsertAt 指定的位置。例如，Rows 属性在指定的插入位置返回该行。Select 和 GetChildRows 可能不是。当您将 DataRowCollection 的内容写成 XML（例如，WriteXml）时，行按照由 DataRowCollection 指定的顺序写入。

如果为 pos 参数指定的值大于集合中的行数，则新行将添加到末尾。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间


DataRowCollection ..::.Remove 方法

DataRowCollection
.
.
::
.
Remove 方法
DataRowCollection 类

从集合中移除指定的 DataRow。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    row As DataRow _
)
public void Remove(
    DataRow row
)
public:
void Remove(
    DataRow^ row
)
member Remove :
        row:DataRow -> unit

参数

row
类型： System.Data DataRow
要移除的 DataRow。

当移除行时，该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 Remove 等同于先调用 Delete 再调用 AcceptChanges。 当移除行时，该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 Remove 等同于先调用 Delete 再调用 AcceptChanges。 当移除行时，该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 Remove 等同于先调用 Delete 再调用 AcceptChanges。

还可使用 Clear 方法一次移除集合中的所有成员。

下面的示例使用 Remove 方法删除在 DataRowCollection 对象中找到的行。该示例首先使用 Contains 方法确定行集合中是否包含某一行。如果包含，则使用 Find 方法查找特定行，然后使用 Remove 方法移除该行。 下面的示例使用 Remove 方法删除在 DataRowCollection 对象中找到的行。该示例首先使用 Contains 方法确定行集合中是否包含某一行。如果包含，则使用 Find 方法查找特定行，然后使用 Remove 方法移除该行。 下面的示例使用 Remove 方法删除在 DataRowCollection 对象中找到的行。该示例首先使用 Contains 方法确定行集合中是否包含某一行。如果包含，则使用 Find 方法查找特定行，然后使用 Remove 方法移除该行。

Private Sub RemoveFoundRow(ByVal table As DataTable)
    Dim rowCollection As DataRowCollection = table.Rows

    ' Test to see if the collection contains the value.
    If rowCollection.Contains(TextBox1.Text) Then
        Dim foundRow As DataRow = rowCollection.Find(TextBox1.Text)
        rowCollection.Remove(foundRow)
        Console.WriteLine("Row Deleted")
    Else
        Console.WriteLine("No such row found.")
    End If
 End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间
Add
Clear
Contains
Find


DataRowCollection ..::.RemoveAt 方法

DataRowCollection
.
.
::
.
RemoveAt 方法
DataRowCollection 类

从集合中移除指定索引处的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub RemoveAt ( _
    index As Integer _
)
public void RemoveAt(
    int index
)
public:
void RemoveAt(
    int index
)
member RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的行的索引。

当移除行时，该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 RemoveAt 等同于先调用 Delete 再调用 AcceptChanges。 当移除行时，该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 RemoveAt 等同于先调用 Delete 再调用 AcceptChanges。 当移除行时，该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 RemoveAt 等同于先调用 Delete 再调用 AcceptChanges。

可使用 Clear 方法一次移除集合中的所有成员。

下面的示例通过调用 RemoveAt 方法移除 DataRowCollection 中的最后一行。

 Private Sub RemoveRowByIndex()
    Dim table As DataTable = CType(DataGrid1.DataSource, DataTable)
    Dim rowCollection As DataRowCollection = table.Rows
    If rowCollection.Count = 0 Then
        Exit Sub
    End If
    rowCollection.RemoveAt(rowCollection.Count - 1)
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间
Clear
Add


DataRowCollection 属性

DataRowCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowCollection 类

DataRowCollection 类型公开以下成员。

名称 说明
页首

参考

DataRowCollection 类
System.Data 命名空间


DataRowCollection ..::.Count 属性

DataRowCollection
.
.
::
.
Count 属性
DataRowCollection 类

获取该集合中 DataRow 对象的总数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property Count As Integer
    Get
public override int Count { get; }
public:
virtual property int Count {
    int get () override;
}
abstract Count : int
override Count : int

属性值

类型： System Int32
该集合中的 DataRow 对象的总数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间


DataRowCollection ..::.Item 属性

DataRowCollection
.
.
::
.
Item 属性
DataRowCollection 类

获取指定索引处的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    index As Integer _
) As DataRow
    Get
public DataRow this[
    int index
] { get; }
public:
property DataRow^ Item[int index] {
    DataRow^ get (int index);
}
member Item : DataRow

参数

index
类型： System Int32
要返回的行的从零开始的索引。

属性值

类型： System.Data DataRow
指定的 DataRow。
异常 | 条件
IndexOutOfRangeException | 索引值大于集合中项的数目。

使用 Contains 方法确定特定值是否存在于行的键列中。

下面的示例打印 DataRowCollection 中每一行的第一列的值。

Private Sub PrintRows(table As DataTable)
     ' Print the first column for every row using the index.
     Dim i As Integer
     For i = 0 To table.Rows.Count - 1
         Console.WriteLine(table.Rows(i)(0))
     Next i
End Sub

private void PrintRows(DataTable table)
{
    // Print the CompanyName column for every row using the index.
    for(int i = 0; i < table.Rows.Count; i++)
    {
        Console.WriteLine(table.Rows[i]["CompanyName"]);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowCollection 类
DataRowCollection 成员
System.Data 命名空间
Contains


DataRowComparer 类

DataRowComparer 类
成员

返回 DataRowComparer<(Of <(TRow>)>) 类的单一实例。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public NotInheritable Class DataRowComparer
public static class DataRowComparer
public ref class DataRowComparer abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type DataRowComparer =  class end

DataRowComparer<(Of <(TRow>)>) 类用于比较 DataRow 对象的值，而不比较对象引用。

此类无法直接实例化。而必须使用 Default 属性返回 DataRowComparer<(Of <(TRow>)>) 类的单一实例。 此类无法直接实例化。而必须使用 Default 属性返回 DataRowComparer<(Of <(TRow>)>) 类的单一实例。

此类是无状态的。

System.Data System.Data..::.DataRowComparerDataRowComparer
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowComparer 成员
System.Data 命名空间

其他资源

比较 DataRow (LINQ to DataSet)
LINQ to DataSet 示例


DataRowComparer 成员

DataRowComparer 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowComparer 类

返回 DataRowComparer<(Of <(TRow>)>) 类的单一实例。

DataRowComparer 类型公开以下成员。

名称 说明
页首

参考

DataRowComparer 类
System.Data 命名空间


DataRowComparer 属性

DataRowComparer 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowComparer 类

DataRowComparer 类型公开以下成员。

名称 说明
页首

参考

DataRowComparer 类
System.Data 命名空间


DataRowComparer ..::.Default 属性

DataRowComparer
.
.
::
.
Default 属性
DataRowComparer 类

获取 DataRowComparer<(Of <(TRow>)>) 的单一实例。此属性为只读。 获取 DataRowComparer<(Of <(TRow>)>) 的单一实例。此属性为只读。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public Shared ReadOnly Property Default As DataRowComparer(Of DataRow)
    Get
public static DataRowComparer<DataRow> Default { get; }
public:
static property DataRowComparer<DataRow^>^ Default {
    DataRowComparer<DataRow^>^ get ();
}
static member Default : DataRowComparer<DataRow>

属性值

类型： System.Data DataRowComparer
<
(Of
<
(
DataRow
>
)
>
)

DataRowComparer<(Of <(TRow>)>) 的一个实例。

此属性为只读。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowComparer 类
DataRowComparer 成员
System.Data 命名空间

其他资源

比较 DataRow (LINQ to DataSet)
LINQ to DataSet 示例


DataRowComparer <(Of <(TRow >)>) 类

DataRowComparer
<
(Of
<
(
TRow
>
)
>
)
类
成员

通过使用基于值的比较来比较两个 DataRow 对象是否等值。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public NotInheritable Class DataRowComparer(Of TRow As DataRow) _
    Implements IEqualityComparer(Of TRow)
public sealed class DataRowComparer<TRow> : IEqualityComparer<TRow>
where TRow : DataRow

generic<typename TRow>
where TRow : DataRow
public ref class DataRowComparer sealed : IEqualityComparer<TRow>
[<SealedAttribute>]
type DataRowComparer<'TRow when 'TRow : DataRow> =
    class
        interface IEqualityComparer<'TRow>
    end

类型参数

TRow

要进行比较的对象的类型，通常为 DataRow。

该类实现 IEqualityComparer<(Of <(T>)>) 接口，并使用基于值的语义来比较 DataRow 对象。由于某些基于集的操作（如 Distinct、Union、Intersect 和 Except）的默认实现是使用基于引用的语义来比较 DataRow 对象引用，而非比较 DataRow 对象值，所以该类是必须的。Default 类用于比较 DataRow 对象的值，而不比较对象引用。 该类实现 IEqualityComparer<(Of <(T>)>) 接口，并使用基于值的语义来比较 DataRow 对象。由于某些基于集的操作（如 Distinct、Union、Intersect 和 Except）的默认实现是使用基于引用的语义来比较 DataRow 对象引用，而非比较 DataRow 对象值，所以该类是必须的。Default 类用于比较 DataRow 对象的值，而不比较对象引用。 该类实现 IEqualityComparer<(Of <(T>)>) 接口，并使用基于值的语义来比较 DataRow 对象。由于某些基于集的操作（如 Distinct、Union、Intersect 和 Except）的默认实现是使用基于引用的语义来比较 DataRow 对象引用，而非比较 DataRow 对象值，所以该类是必须的。Default 类用于比较 DataRow 对象的值，而不比较对象引用。

此类无法直接实例化。而必须使用 Default 属性返回 Default 类的单一实例。 此类无法直接实例化。而必须使用 Default 属性返回 Default 类的单一实例。

此类是无状态的。

此类是密封的，不能从该类派生。

System.Data
System.Data..::.DataRowComparer<(Of <(TRow>)>)DataRowComparer
System.Data..::.DataRowComparer<(Of <(TRow>)>)TRow
System.Data..::.DataRowComparer<(Of <(TRow>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowComparer TRow 成员
System.Data 命名空间

其他资源

比较 DataRow (LINQ to DataSet)
LINQ to DataSet 示例


DataRowComparer <(Of <(TRow >)>) 成员

DataRowComparer
<
(Of
<
(
TRow
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowComparer

通过使用基于值的比较来比较两个 DataRow 对象是否等值。

DataRowComparer TRow 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataRowComparer TRow 类
System.Data 命名空间


DataRowComparer <(Of <(TRow >)>) 方法

DataRowComparer
<
(Of
<
(
TRow
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowComparer

DataRowComparer TRow 类型公开以下成员。

名称 说明
页首

参考

DataRowComparer TRow 类
System.Data 命名空间


DataRowComparer <(Of <(TRow >)>) ..::.Equals 方法

DataRowComparer
<
(Of
<
(
TRow
>
)
>
)
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowComparer

通过使用基于值的逐列比较来比较两个 DataRow 对象。

名称 说明
页首

参考

DataRowComparer TRow 类
DataRowComparer TRow 成员
System.Data 命名空间


DataRowComparer <(Of <(TRow >)>) ..::.Equals 方法 (TRow, TRow)

DataRowComparer
<
(Of
<
(
TRow
>
)
>
)
.
.
::
.
Equals 方法 (TRow, TRow)
DataRowComparer

通过使用基于值的逐列比较来比较两个 DataRow 对象。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public Function Equals ( _
    leftRow As TRow, _
    rightRow As TRow _
) As Boolean
public bool Equals(
    TRow leftRow,
    TRow rightRow
)
public:
virtual bool Equals(
    TRow leftRow,
    TRow rightRow
) sealed
abstract Equals :
        leftRow:'TRow *
        rightRow:'TRow -> bool
override Equals :
        leftRow:'TRow *
        rightRow:'TRow -> bool

参数

leftRow
类型： TRow
要比较的第一个 DataRow 对象。
rightRow
类型： TRow
要比较的第二个 DataRow 对象。

返回值

类型： System Boolean
如果两个 DataRow 对象具有相等的列值有序集，则为 true；否则为 false。

实现

异常 | 条件
ArgumentNullException | 两个源 DataRow 对象之一或全部为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

不检查这两个 DataRow 对象的架构。如果两个 DataRow 对象的列值有序集完全相同，则认为这两个对象相等。 不检查这两个 DataRow 对象的架构。如果两个 DataRow 对象的列值有序集完全相同，则认为这两个对象相等。

仅检查 DataRow 对象的当前值。不检查 DataRow 对象的状态。 仅检查 DataRow 对象的当前值。不检查 DataRow 对象的状态。

Equals()()() 方法是 Equals 方法的基于值的比较实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowComparer TRow 类
DataRowComparer TRow 成员
Equals 重载
System.Data 命名空间

其他资源

比较 DataRow (LINQ to DataSet)
LINQ to DataSet 示例


DataRowComparer <(Of <(TRow >)>) ..::.GetHashCode 方法

DataRowComparer
<
(Of
<
(
TRow
>
)
>
)
.
.
::
.
GetHashCode 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowComparer

返回指定对象的哈希代码。

名称 说明
页首

参考

DataRowComparer TRow 类
DataRowComparer TRow 成员
System.Data 命名空间


DataRowComparer <(Of <(TRow >)>) ..::.GetHashCode 方法 (TRow)

DataRowComparer
<
(Of
<
(
TRow
>
)
>
)
.
.
::
.
GetHashCode 方法 (TRow)
DataRowComparer

返回指定 DataRow 对象的哈希代码。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public Function GetHashCode ( _
    row As TRow _
) As Integer
public int GetHashCode(
    TRow row
)
public:
virtual int GetHashCode(
    TRow row
) sealed
abstract GetHashCode :
        row:'TRow -> int
override GetHashCode :
        row:'TRow -> int

参数

row
类型： TRow
要从中计算哈希代码的 DataRow。

返回值

类型： System Int32
表示该行的哈希代码的 Int32 值。

实现

异常 | 条件
ArgumentException | 源 DataRow 对象不属于 DataTable。
ArgumentNullException | 源 DataRow 对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

GetHashCode 方法是 GetHashCode 方法的基于值的比较实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowComparer TRow 类
DataRowComparer TRow 成员
GetHashCode 重载
System.Data 命名空间

其他资源

比较 DataRow (LINQ to DataSet)
LINQ to DataSet 示例


DataRowComparer <(Of <(TRow >)>) 属性

DataRowComparer
<
(Of
<
(
TRow
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowComparer

DataRowComparer TRow 类型公开以下成员。

名称 说明
页首

参考

DataRowComparer TRow 类
System.Data 命名空间


DataRowComparer <(Of <(TRow >)>) ..::.Default 属性

DataRowComparer
<
(Of
<
(
TRow
>
)
>
)
.
.
::
.
Default 属性
DataRowComparer

获取 DataRowComparer<(Of <(TRow>)>) 的单一实例。此属性为只读。 获取 DataRowComparer<(Of <(TRow>)>) 的单一实例。此属性为只读。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public Shared ReadOnly Property Default As DataRowComparer(Of TRow)
    Get
public static DataRowComparer<TRow> Default { get; }
public:
static property DataRowComparer<TRow>^ Default {
    DataRowComparer<TRow>^ get ();
}
static member Default : DataRowComparer<'TRow>

属性值

类型： System.Data DataRowComparer
<
(Of
<
(
TRow
>
)
>
)

DataRowComparer<(Of <(TRow>)>) 的一个实例。

此属性为只读。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowComparer TRow 类
DataRowComparer TRow 成员
System.Data 命名空间

其他资源

比较 DataRow (LINQ to DataSet)
LINQ to DataSet 示例


DataRowExtensions 类

DataRowExtensions 类
成员

定义 DataRow 类的扩展方法。这是一个静态类。 定义 DataRow 类的扩展方法。这是一个静态类。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public NotInheritable Class DataRowExtensions
public static class DataRowExtensions
[ExtensionAttribute]
public ref class DataRowExtensions abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type DataRowExtensions =  class end

DataSet API 已用 DataRow 类的两个新方法（Field 和 SetField）进行了扩展。您可以使用上述方法基于 DataTable 对象形成 语言集成查询 (LINQ) 表达式和方法查询。 当访问 语言集成查询 (LINQ) 表达式和方法查询中的列值时，建议使用上述方法。有关更多信息，请参见泛型 Field 和 SetField 方法 (LINQ to DataSet)。 DataSet API 已用 DataRow 类的两个新方法（Field 和 SetField）进行了扩展。您可以使用上述方法基于 DataTable 对象形成 语言集成查询 (LINQ) 表达式和方法查询。 当访问 语言集成查询 (LINQ) 表达式和方法查询中的列值时，建议使用上述方法。有关更多信息，请参见泛型 Field 和 SetField 方法 (LINQ to DataSet)。 DataSet API 已用 DataRow 类的两个新方法（Field 和 SetField）进行了扩展。您可以使用上述方法基于 DataTable 对象形成 语言集成查询 (LINQ) 表达式和方法查询。 当访问 语言集成查询 (LINQ) 表达式和方法查询中的列值时，建议使用上述方法。有关更多信息，请参见泛型 Field 和 SetField 方法 (LINQ to DataSet)。

System.Data System.Data..::.DataRowExtensionsDataRowExtensions
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 成员
System.Data 命名空间


DataRowExtensions 成员

DataRowExtensions 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowExtensions 类

定义 DataRow 类的扩展方法。这是一个静态类。 定义 DataRow 类的扩展方法。这是一个静态类。

名称 说明
页首

参考

DataRowExtensions 类
System.Data 命名空间


DataRowExtensions 方法

DataRowExtensions 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowExtensions 类
名称 说明
页首

参考

DataRowExtensions 类
System.Data 命名空间


DataRowExtensions ..::.Field 方法

DataRowExtensions
.
.
::
.
Field 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowExtensions 类

提供对 DataRow 中的每个列值的强类型访问。

名称 说明
页首

参考

DataRowExtensions 类
DataRowExtensions 成员
System.Data 命名空间


DataRowExtensions ..::.Field <(Of <(T >)>) 方法 (DataRow, DataColumn)

DataRowExtensions
.
.
::
.
Field
<
(Of
<
(
T
>
)
>
)
方法 (DataRow, DataColumn)
DataRowExtensions 类

提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。 提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Field(Of T) ( _
    row As DataRow, _
    column As DataColumn _
) As T
public static T Field<T>(
    this DataRow row,
    DataColumn column
)

[ExtensionAttribute]
public:
generic<typename T>
static T Field(
    DataRow^ row,
    DataColumn^ column
)
static member Field :
        row:DataRow *
        column:DataColumn -> 'T

类型参数

T

指定列的返回类型的泛型形参。

参数

row
类型： System.Data DataRow
DataRow 输入，作为扩展方法的 this 实例。
column
类型： System.Data DataColumn
输入 DataColumn 对象，指定要返回其值的列。

返回值

类型：T
由 column 指定的 DataColumn 的值，类型为 T。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
InvalidCastException | 基础列的值类型未能强制转换为泛型参数 T 指定的类型。
IndexOutOfRangeException | column 指定的列不会出现在包含 DataRow 的 DataTable 中。
NullReferenceException | 将 null 值赋给了不可以为 null 的类型。

DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。

如果指定 DataColumn 的值为 Value，并且 T 为引用类型或可以为 null 的类型，返回类型将为 null。Field 方法将不会返回 Value。 如果指定 DataColumn 的值为 Value，并且 T 为引用类型或可以为 null 的类型，返回类型将为 null。Field 方法将不会返回 Value。

Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 类
DataRowExtensions 成员
Field 重载
System.Data 命名空间


DataRowExtensions ..::.Field <(Of <(T >)>) 方法 (DataRow, Int32)

DataRowExtensions
.
.
::
.
Field
<
(Of
<
(
T
>
)
>
)
方法 (DataRow, Int32)
DataRowExtensions 类

提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。 提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Field(Of T) ( _
    row As DataRow, _
    columnIndex As Integer _
) As T
public static T Field<T>(
    this DataRow row,
    int columnIndex
)

[ExtensionAttribute]
public:
generic<typename T>
static T Field(
    DataRow^ row,
    int columnIndex
)
static member Field :
        row:DataRow *
        columnIndex:int -> 'T

类型参数

T

指定列的返回类型的泛型形参。

参数

row
类型： System.Data DataRow
DataRow 输入，作为扩展方法的 this 实例。
columnIndex
类型： System Int32
列索引。

返回值

类型：T
由 columnIndex 指定的 DataColumn 的值，类型为 T。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
InvalidCastException | 基础列的值类型未能强制转换为泛型参数 T 指定的类型。
IndexOutOfRangeException | ordinal 指定的列不存在于包含 DataRow 的 DataTable 中。
NullReferenceException | 将 null 值赋给了不可以为 null 的类型。

DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。

如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。 如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。

Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 类
DataRowExtensions 成员
Field 重载
System.Data 命名空间


DataRowExtensions ..::.Field <(Of <(T >)>) 方法 (DataRow, String)

DataRowExtensions
.
.
::
.
Field
<
(Of
<
(
T
>
)
>
)
方法 (DataRow, String)
DataRowExtensions 类

提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。 提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Field(Of T) ( _
    row As DataRow, _
    columnName As String _
) As T
public static T Field<T>(
    this DataRow row,
    string columnName
)

[ExtensionAttribute]
public:
generic<typename T>
static T Field(
    DataRow^ row,
    String^ columnName
)
static member Field :
        row:DataRow *
        columnName:string -> 'T

类型参数

T

指定列的返回类型的泛型形参。

参数

row
类型： System.Data DataRow
DataRow 输入，作为扩展方法的 this 实例。
columnName
类型： System String
要返回其值的列的名称。

返回值

类型：T
由 columnName 指定的 DataColumn 的值，类型为 T。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
InvalidCastException | 基础列的值类型未能强制转换为泛型参数 T 指定的类型。
IndexOutOfRangeException | columnName 指定的列不会出现在包含 DataRow 的 DataTable 中。
NullReferenceException | 将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值赋给了不可以为 null 的类型。

DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。

如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。 如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。

Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 类
DataRowExtensions 成员
Field 重载
System.Data 命名空间


DataRowExtensions ..::.Field <(Of <(T >)>) 方法 (DataRow, DataColumn, DataRowVersion)

DataRowExtensions
.
.
::
.
Field
<
(Of
<
(
T
>
)
>
)
方法 (DataRow, DataColumn, DataRowVersion)
DataRowExtensions 类

提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。 提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Field(Of T) ( _
    row As DataRow, _
    column As DataColumn, _
    version As DataRowVersion _
) As T
public static T Field<T>(
    this DataRow row,
    DataColumn column,
    DataRowVersion version
)

[ExtensionAttribute]
public:
generic<typename T>
static T Field(
    DataRow^ row,
    DataColumn^ column,
    DataRowVersion version
)
static member Field :
        row:DataRow *
        column:DataColumn *
        version:DataRowVersion -> 'T

类型参数

T

指定列的返回类型的泛型形参。

参数

row
类型： System.Data DataRow
DataRow 输入，作为扩展方法的 this 实例。
column
类型： System.Data DataColumn
输入 DataColumn 对象，指定要返回其值的列。
version
类型： System.Data DataRowVersion
DataRowVersion 枚举，指定要返回的列值的版本，如 Current 或 Original 版本。

返回值

类型：T
由 column 和 version 指定的 DataColumn 的值，类型为 T。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
InvalidCastException | 基础列的值类型未能强制转换为泛型参数 T 指定的类型。
IndexOutOfRangeException | column 指定的列不存在于包含 DataRow 的 DataTable 中。
NullReferenceException | 将 null 值赋给了不可以为 null 的类型。

DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。

如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。 如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。

Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 类
DataRowExtensions 成员
Field 重载
System.Data 命名空间


DataRowExtensions ..::.Field <(Of <(T >)>) 方法 (DataRow, Int32, DataRowVersion)

DataRowExtensions
.
.
::
.
Field
<
(Of
<
(
T
>
)
>
)
方法 (DataRow, Int32, DataRowVersion)
DataRowExtensions 类

提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。 提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Field(Of T) ( _
    row As DataRow, _
    columnIndex As Integer, _
    version As DataRowVersion _
) As T
public static T Field<T>(
    this DataRow row,
    int columnIndex,
    DataRowVersion version
)

[ExtensionAttribute]
public:
generic<typename T>
static T Field(
    DataRow^ row,
    int columnIndex,
    DataRowVersion version
)
static member Field :
        row:DataRow *
        columnIndex:int *
        version:DataRowVersion -> 'T

类型参数

T

指定列的返回类型的泛型形参。

参数

row
类型： System.Data DataRow
DataRow 输入，作为扩展方法的 this 实例。
columnIndex
类型： System Int32
要返回其值的列的从零开始的序号。
version
类型： System.Data DataRowVersion
DataRowVersion 枚举，指定要返回的列值的版本，如 Current 或 Original 版本。

返回值

类型：T
由 ordinal 和 version 指定的 DataColumn 的值，类型为 T。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
InvalidCastException | 基础列的值类型未能强制转换为泛型参数 T 指定的类型。
IndexOutOfRangeException | ordinal 指定的列不存在于包含 DataRow 的 DataTable 中。
NullReferenceException | 将 null 值赋给了不可以为 null 的类型。

DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。

如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。 如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。

Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 类
DataRowExtensions 成员
Field 重载
System.Data 命名空间


DataRowExtensions ..::.Field <(Of <(T >)>) 方法 (DataRow, String, DataRowVersion)

DataRowExtensions
.
.
::
.
Field
<
(Of
<
(
T
>
)
>
)
方法 (DataRow, String, DataRowVersion)
DataRowExtensions 类

提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。 提供对指定行中的每个列值的强类型访问。Field 方法还支持可以为 null 的类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Field(Of T) ( _
    row As DataRow, _
    columnName As String, _
    version As DataRowVersion _
) As T
public static T Field<T>(
    this DataRow row,
    string columnName,
    DataRowVersion version
)

[ExtensionAttribute]
public:
generic<typename T>
static T Field(
    DataRow^ row,
    String^ columnName,
    DataRowVersion version
)
static member Field :
        row:DataRow *
        columnName:string *
        version:DataRowVersion -> 'T

类型参数

T

指定列的返回类型的泛型形参。

参数

row
类型： System.Data DataRow
DataRow 输入，作为扩展方法的 this 实例。
columnName
类型： System String
要返回其值的列的名称。
version
类型： System.Data DataRowVersion
DataRowVersion 枚举，指定要返回的列值的版本，如 Current 或 Original 版本。

返回值

类型：T
由 columnName 和 version 指定的 DataColumn 的值，类型为 T。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
InvalidCastException | 基础列的值类型未能强制转换为泛型参数 T 指定的类型。
IndexOutOfRangeException | columnName 指定的列不存在于包含 DataRow 的 DataTable 中。
NullReferenceException | 将 null 值赋给了不可以为 null 的类型。

DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。 DataSet 类用 DBNull 类的 Value 实例表示 null 值。访问了值为 null 的列的 语言集成查询 (LINQ) 表达式会在运行时生成 InvalidCastException。另外，DataSet 不支持可以为 null 的类型。Field 方法对访问可以为 null 的类型的列提供支持。如果 DataSet 中的基础值为 Value，则返回的可以为 null 的类型将为 null 值。

如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。 如果指定 DataColumn 的值为 null，并且 T 为引用类型或可以为 null 的类型，则返回类型将为 null。Field 方法将不会返回 Value。

Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。 Field 方法不执行类型转换。如果要求类型转换，则应首先使用 Field 方法来获取列值。然后，应将列值转换为其他类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 类
DataRowExtensions 成员
Field 重载
System.Data 命名空间


DataRowExtensions ..::.SetField 方法

DataRowExtensions
.
.
::
.
SetField 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowExtensions 类

为 DataRow 中的指定列设置一个新值。

名称 说明
页首

参考

DataRowExtensions 类
DataRowExtensions 成员
System.Data 命名空间


DataRowExtensions ..::.SetField <(Of <(T >)>) 方法 (DataRow, DataColumn, T)

DataRowExtensions
.
.
::
.
SetField
<
(Of
<
(
T
>
)
>
)
方法 (DataRow, DataColumn, T)
DataRowExtensions 类

为 DataRow 中的指定列设置一个新值。SetField 方法还支持可以为 null 的类型。 为 DataRow 中的指定列设置一个新值。SetField 方法还支持可以为 null 的类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Sub SetField(Of T) ( _
    row As DataRow, _
    column As DataColumn, _
    value As T _
)
public static void SetField<T>(
    this DataRow row,
    DataColumn column,
    T value
)

[ExtensionAttribute]
public:
generic<typename T>
static void SetField(
    DataRow^ row,
    DataColumn^ column,
    T value
)
static member SetField :
        row:DataRow *
        column:DataColumn *
        value:'T -> unit

类型参数

T

指定列的值类型的泛型形参。

参数

row
类型： System.Data DataRow
DataRow 输入，作为扩展方法的 this 实例。
column
类型： System.Data DataColumn
输入 DataColumn 指定要检索的行值。
value
类型：T
指定列的新行值，类型为 T。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
ArgumentException | 无法找到由 column 指定的列。
ArgumentNullException | column 为 null。
DeletedRowInaccessibleException | 尝试对已删除的行设置值时发生。
InvalidCastException | 基础列的值类型未能强制转换为泛型参数 T 指定的类型。

如果 value 为 null，则 SetField 方法会将该 null 值转换为基础 DataColumn 中 Value。

SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。 SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。 SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。 SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。

可以从基础 DataRow 对象通过 SetField 方法向上传递异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 类
DataRowExtensions 成员
SetField 重载
System.Data 命名空间


DataRowExtensions ..::.SetField <(Of <(T >)>) 方法 (DataRow, Int32, T)

DataRowExtensions
.
.
::
.
SetField
<
(Of
<
(
T
>
)
>
)
方法 (DataRow, Int32, T)
DataRowExtensions 类

为在其上调用此方法的 DataRow 中的指定列设置一个新值。SetField 方法还支持可以为 null 的类型。 为在其上调用此方法的 DataRow 中的指定列设置一个新值。SetField 方法还支持可以为 null 的类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Sub SetField(Of T) ( _
    row As DataRow, _
    columnIndex As Integer, _
    value As T _
)
public static void SetField<T>(
    this DataRow row,
    int columnIndex,
    T value
)

[ExtensionAttribute]
public:
generic<typename T>
static void SetField(
    DataRow^ row,
    int columnIndex,
    T value
)
static member SetField :
        row:DataRow *
        columnIndex:int *
        value:'T -> unit

类型参数

T

指定列的值类型的泛型形参。

参数

row
类型： System.Data DataRow
DataRow 输入，作为扩展方法的 this 实例。
columnIndex
类型： System Int32
要设置其值的列的从零开始的序号。
value
类型：T
指定列的新行值，类型为 T。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
DeletedRowInaccessibleException | 尝试对已删除的行设置值时发生。
IndexOutOfRangeException | ordinal 参数超出范围。
InvalidCastException | 基础列的值类型无法强制转换为泛型参数 T 指定的类型。

如果 value 为 null，则 SetField 方法会将该 null 值转换为基础 DataColumn 中 Value。

SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。 SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。 SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。 SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。

可以从基础 DataRow 对象通过 SetField 方法向上传递异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 类
DataRowExtensions 成员
SetField 重载
System.Data 命名空间


DataRowExtensions ..::.SetField <(Of <(T >)>) 方法 (DataRow, String, T)

DataRowExtensions
.
.
::
.
SetField
<
(Of
<
(
T
>
)
>
)
方法 (DataRow, String, T)
DataRowExtensions 类

为 DataRow 中的指定列设置一个新值。SetField 方法还支持可以为 null 的类型。 为 DataRow 中的指定列设置一个新值。SetField 方法还支持可以为 null 的类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Sub SetField(Of T) ( _
    row As DataRow, _
    columnName As String, _
    value As T _
)
public static void SetField<T>(
    this DataRow row,
    string columnName,
    T value
)

[ExtensionAttribute]
public:
generic<typename T>
static void SetField(
    DataRow^ row,
    String^ columnName,
    T value
)
static member SetField :
        row:DataRow *
        columnName:string *
        value:'T -> unit

类型参数

T

指定列的值类型的泛型形参。

参数

row
类型： System.Data DataRow
DataRow 输入，作为扩展方法的 this 实例。
columnName
类型： System String
要设置其值的列的名称。
value
类型：T
指定列的新行值，类型为 T。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
ArgumentException | 无法找到由 columnName 指定的列。
DeletedRowInaccessibleException | 尝试对已删除的行设置值时发生。
InvalidCastException | 基础列的值类型未能强制转换为泛型参数 T 指定的类型。

如果 value 为 null，则 SetField 方法会将该 null 值转换为基础 DataColumn 中 Value。

SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。 SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。 SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。 SetField 方法不执行任何类型转换。不过，这并不表示类型转换不会发生。SetField 方法会公开 DataRow 类的 ADO.NET 2.0 行为。类型转换可以由 DataRow 对象来执行，然后将转换后的值保存到该行。

可以从基础 DataRow 对象通过 SetField 方法向上传递异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataRowExtensions 类
DataRowExtensions 成员
SetField 重载
System.Data 命名空间


DataRowState 枚举

DataRowState 枚举

获取 DataRow 对象的状态。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<FlagsAttribute> _
Public Enumeration DataRowState
[FlagsAttribute]
public enum DataRowState
[FlagsAttribute]
public enum class DataRowState
[<FlagsAttribute>]
type DataRowState
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Detached | 该行已被创建，但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态：创建之后添加到集合中之前；或从集合中移除之后。 该行已被创建，但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态：创建之后添加到集合中之前；或从集合中移除之后。
由 XNA Framework 提供支持 | Unchanged | 该行自上次调用 AcceptChanges 以来尚未更改。
由 XNA Framework 提供支持 | Added | 该行已添加到 DataRowCollection 中，AcceptChanges 尚未调用。
由 XNA Framework 提供支持 | Deleted | 该行已通过 DataRow 的 Delete 方法被删除。
由 XNA Framework 提供支持 | Modified | 该行已被修改，AcceptChanges 尚未调用。

DataRowState 枚举由 DataRow 类的 RowState 属性返回。

下面的示例首先创建有一个列的新 DataTable，然后创建一个 DataRow。当创建、添加、修改和删除 DataRow 时，将输出其 RowState。 下面的示例首先创建有一个列的新 DataTable，然后创建一个 DataRow。当创建、添加、修改和删除 DataRow 时，将输出其 RowState。

Private Sub DemonstrateRowState()
    'Run a function to create a DataTable with one column.
    Dim dataTable As DataTable = MakeTable()
    Dim dataRow As DataRow

    ' Create a new DataRow.
    dataRow = dataTable.NewRow()
    ' Detached row.
    Console.WriteLine(String.Format("New Row {0}", dataRow.RowState))

    dataTable.Rows.Add(dataRow)
    ' New row.
    Console.WriteLine(String.Format("AddRow {0}", dataRow.RowState))

    dataTable.AcceptChanges()
    ' Unchanged row.
    Console.WriteLine(String.Format("AcceptChanges {0}", dataRow.RowState))

    dataRow("FirstName") = "Scott"
    ' Modified row.
    Console.WriteLine(String.Format("Modified {0}", dataRow.RowState))

    dataRow.Delete()
    ' Deleted row.
    Console.WriteLine(String.Format("Deleted {0}", dataRow.RowState))
End Sub

Private Function MakeTable() As DataTable
    ' Make a simple table with one column.
    Dim dt As New DataTable("dataTable")
    Dim firstName As New DataColumn("FirstName", _
       Type.GetType("System.String"))
    dt.Columns.Add(firstName)
    Return dt
End Function

private void DemonstrateRowState() {
   //Run a function to create a DataTable with one column.
   DataTable myTable = MakeTable();
   DataRow myRow;

   // Create a new DataRow.
   myRow = myTable.NewRow();
   // Detached row.
   Console.WriteLine("New Row " + myRow.RowState);

   myTable.Rows.Add(myRow);
   // New row.
   Console.WriteLine("AddRow " + myRow.RowState);

   myTable.AcceptChanges();
   // Unchanged row.
   Console.WriteLine("AcceptChanges " + myRow.RowState);

   myRow["FirstName"] = "Scott";
   // Modified row.
   Console.WriteLine("Modified " + myRow.RowState);

   myRow.Delete();
   // Deleted row.
   Console.WriteLine("Deleted " + myRow.RowState);
}

private DataTable MakeTable(){
   // Make a simple table with one column.
   DataTable dt = new DataTable("myTable");
   DataColumn dcFirstName = new DataColumn("FirstName", Type.GetType("System.String"));
   dt.Columns.Add(dcFirstName);
   return dt;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间
DataRow
Delete
NewRow
DataRowCollection


DataRowVersion 枚举

DataRowVersion 枚举

描述 DataRow 的版本。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration DataRowVersion
public enum DataRowVersion
public enum class DataRowVersion
type DataRowVersion
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Original | 该行中包含其原始值。
由 XNA Framework 提供支持 | Current | 该行中包含当前值。
由 XNA Framework 提供支持 | Proposed | 该行中包含建议值。
由 XNA Framework 提供支持 | Default | DataRowState 的默认版本。对于 Added、Modified 或 Current 的 DataRowState 值，默认版本是 Deleted。对于 Detached 的 DataRowState 值，该版本是 Proposed。 DataRowState 的默认版本。对于 Added、Modified 或 Current 的 DataRowState 值，默认版本是 Deleted。对于 Detached 的 DataRowState 值，该版本是 Proposed。 DataRowState 的默认版本。对于 Added、Modified 或 Current 的 DataRowState 值，默认版本是 Deleted。对于 Detached 的 DataRowState 值，该版本是 Proposed。

当使用 Item 或 DataRow 对象的 GetChildRows 检索在 DataRow 中找到的值时，使用 DataRowVersion 值。

DataRowVersion 向您通知存在 DataRow 的哪个版本。版本在以下情况下发生更改： DataRowVersion 向您通知存在 DataRow 的哪个版本。版本在以下情况下发生更改：

  • 在调用 DataRow 对象的 BeginEdit 方法之后，如果更改该值，则 Current 和 Proposed 值变得可用。

  • 在调用 DataRow 对象的 CancelEdit 方法之后，Proposed 值将被删除。

  • 在调用 DataRow 对象的 EndEdit 方法之后，Proposed 值变成 Current 值。

  • 在调用 DataRow 对象的 AcceptChanges 方法之后，Original 值变得与 Current 值相同。

  • 在调用 DataTable 对象的 AcceptChanges 方法之后，Original 值变得与 Current 值相同。

  • 在调用 DataRow 对象的 RejectChanges 之后，Proposed 值将被丢弃，版本变成 Current。

下面的示例在调用 AcceptChanges 方法之前检查 DataRow 的 DataRowVersion。

Private Sub CheckVersionBeforeAccept()
    'Run a function to create a DataTable with one column.
    Dim dataTable As DataTable = MakeTable()

    Dim dataRow As DataRow = dataTable.NewRow()
    dataRow("FirstName") = "Marcy"
    dataTable.Rows.Add(dataRow)

    dataRow.BeginEdit()
    ' Edit data but keep the same value.
    dataRow(0) = "Marcy"
    ' Uncomment the following line to add a new value.
    ' dataRow(0) = "Richard"
    Console.WriteLine(String.Format("FirstName {0}", dataRow(0)))

    ' Compare the proposed version with the current.
    If dataRow.HasVersion(DataRowVersion.Proposed) Then
        If dataRow(0, DataRowVersion.Current) Is dataRow(0, DataRowVersion.Proposed) Then
            Console.WriteLine("The original and the proposed are the same.")
            dataRow.CancelEdit()
        Else
            dataRow.AcceptChanges()
            Console.WriteLine("The original and the proposed are different.")
        End If
    End If
End Sub

Private Function MakeTable() As DataTable
    ' Make a simple table with one column.
    Dim dt As New DataTable("dataTable")
    Dim firstName As New DataColumn("FirstName", _
       Type.GetType("System.String"))
    dt.Columns.Add(firstName)
    Return dt
End Function

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间
AcceptChanges
BeginEdit
EndEdit
Item
RejectChanges


DataRowView 类

DataRowView 类
成员

表示 DataRow 的自定义视图。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataRowView _
    Implements ICustomTypeDescriptor, IEditableObject, IDataErrorInfo, INotifyPropertyChanged
public class DataRowView : ICustomTypeDescriptor,
    IEditableObject, IDataErrorInfo, INotifyPropertyChanged
public ref class DataRowView : ICustomTypeDescriptor,
    IEditableObject, IDataErrorInfo, INotifyPropertyChanged
type DataRowView =
    class
        interface ICustomTypeDescriptor
        interface IEditableObject
        interface IDataErrorInfo
        interface INotifyPropertyChanged
    end

每当显示数据时（如在 DataGrid 控件中），仅可以显示每行的一个版本。所显示的行是 DataRowView。 每当显示数据时（如在 DataGrid 控件中），仅可以显示每行的一个版本。所显示的行是 DataRowView。

DataRowView 可以具有以下四个不同的版本状态之一：Default、Original、Current 和 Proposed。

在针对 DataRow 调用 BeginEdit 之后，任何已编辑的值变成 Proposed 值。在调用 CancelEdit 或 EndEdit 之前，行有一个 Original 和一个 Proposed 版本。如果调用了 CancelEdit，建议的版本将被丢弃，值将恢复为 Original。如果调用了 EndEdit，DataRowView 将不再具有 Proposed 版本；相反，建议的值将变为当前值。默认值只在那些列具有已定义的默认值的行上可用。 在针对 DataRow 调用 BeginEdit 之后，任何已编辑的值变成 Proposed 值。在调用 CancelEdit 或 EndEdit 之前，行有一个 Original 和一个 Proposed 版本。如果调用了 CancelEdit，建议的版本将被丢弃，值将恢复为 Original。如果调用了 EndEdit，DataRowView 将不再具有 Proposed 版本；相反，建议的值将变为当前值。默认值只在那些列具有已定义的默认值的行上可用。 在针对 DataRow 调用 BeginEdit 之后，任何已编辑的值变成 Proposed 值。在调用 CancelEdit 或 EndEdit 之前，行有一个 Original 和一个 Proposed 版本。如果调用了 CancelEdit，建议的版本将被丢弃，值将恢复为 Original。如果调用了 EndEdit，DataRowView 将不再具有 Proposed 版本；相反，建议的值将变为当前值。默认值只在那些列具有已定义的默认值的行上可用。 在针对 DataRow 调用 BeginEdit 之后，任何已编辑的值变成 Proposed 值。在调用 CancelEdit 或 EndEdit 之前，行有一个 Original 和一个 Proposed 版本。如果调用了 CancelEdit，建议的版本将被丢弃，值将恢复为 Original。如果调用了 EndEdit，DataRowView 将不再具有 Proposed 版本；相反，建议的值将变为当前值。默认值只在那些列具有已定义的默认值的行上可用。 在针对 DataRow 调用 BeginEdit 之后，任何已编辑的值变成 Proposed 值。在调用 CancelEdit 或 EndEdit 之前，行有一个 Original 和一个 Proposed 版本。如果调用了 CancelEdit，建议的版本将被丢弃，值将恢复为 Original。如果调用了 EndEdit，DataRowView 将不再具有 Proposed 版本；相反，建议的值将变为当前值。默认值只在那些列具有已定义的默认值的行上可用。

下面的示例使用 RowVersion 属性确定 DataRowView 中行的状态。

Private Sub DemonstrateRowVersion()
    Dim i As Integer
    ' Create a DataTable with one column.
    Dim table As New DataTable("Table")
    Dim column As New DataColumn("Column")
    table.Columns.Add(column)

    ' Add ten rows.
    Dim row As DataRow
    For i = 0 To 9
        row = table.NewRow()
        row("Column") = "item " + i.ToString()
        table.Rows.Add(row)
    Next i
    table.AcceptChanges()

    ' Create a DataView with the table.
    Dim view As New DataView(table)

    ' Change one row's value:
    table.Rows(1)("Column") = "Hello"

    ' Add one row:
    row = table.NewRow()
    row("Column") = "World"
    table.Rows.Add(row)

    ' Set the RowStateFilter to display only added and modified rows.
    view.RowStateFilter = _
       DataViewRowState.Added Or DataViewRowState.ModifiedCurrent

    ' Print those rows. Output includes "Hello" and "World".
    PrintView(view, "ModifiedCurrent and Added")

    ' Set filter to display only originals of modified rows.
    view.RowStateFilter = DataViewRowState.ModifiedOriginal
    PrintView(view, "ModifiedOriginal")

    ' Delete three rows.
    table.Rows(1).Delete()
    table.Rows(2).Delete()
    table.Rows(3).Delete()

    ' Set the RowStateFilter to display only deleted rows.
    view.RowStateFilter = DataViewRowState.Deleted
    PrintView(view, "Deleted")

    ' Set filter to display only current rows.
    view.RowStateFilter = DataViewRowState.CurrentRows
    PrintView(view, "Current")

    ' Set filter to display only unchanged rows.
    view.RowStateFilter = DataViewRowState.Unchanged
    PrintView(view, "Unchanged")

    ' Set filter to display only original rows.
    ' Current values of unmodified rows are also returned.
    view.RowStateFilter = DataViewRowState.OriginalRows
    PrintView(view, "OriginalRows")
End Sub

Private Sub PrintView(ByVal view As DataView, ByVal label As String)
    Console.WriteLine(ControlChars.Cr + label)
    Dim i As Integer
    For i = 0 To view.Count - 1
        Console.WriteLine(view(i)("Column"))
        Console.WriteLine("DataRowView.RowVersion: {0}", _
            view(i).RowVersion)
    Next i
End Sub

private static void DemonstrateRowVersion()
{
    // Create a DataTable with one column.
    DataTable table = new DataTable("Table");
    DataColumn column = new DataColumn("Column");
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i < 10; i++)
    {
        row = table.NewRow();
        row["Column"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    // Create a DataView with the table.
    DataView view = new DataView(table);

    // Change one row's value:
    table.Rows[1]["Column"] = "Hello";

    // Add one row:
    row = table.NewRow();
    row["Column"] = "World";
    table.Rows.Add(row);

    // Set the RowStateFilter to display only added
    // and modified rows.
    view.RowStateFilter = DataViewRowState.Added |
        DataViewRowState.ModifiedCurrent;

    // Print those rows. Output includes "Hello" and "World".
    PrintView(view, "ModifiedCurrent and Added");

    // Set filter to display only originals of modified rows.
    view.RowStateFilter = DataViewRowState.ModifiedOriginal;
    PrintView(view, "ModifiedOriginal");

    // Delete three rows.
    table.Rows[1].Delete();
    table.Rows[2].Delete();
    table.Rows[3].Delete();

    // Set the RowStateFilter to display only deleted rows.
    view.RowStateFilter = DataViewRowState.Deleted;
    PrintView(view, "Deleted");

    // Set filter to display only current rows.
    view.RowStateFilter = DataViewRowState.CurrentRows;
    PrintView(view, "Current");

    // Set filter to display only unchanged rows.
    view.RowStateFilter = DataViewRowState.Unchanged;
    PrintView(view, "Unchanged");

    // Set filter to display only original rows.
    // Current values of unmodified rows are also returned.
    view.RowStateFilter = DataViewRowState.OriginalRows;
    PrintView(view, "OriginalRows");
}

private static void PrintView(DataView view, string label)
{
    Console.WriteLine("\n" + label);
    for (int i = 0; i < view.Count; i++)
    {
        Console.WriteLine(view[i]["Column"]);
        Console.WriteLine("DataViewRow.RowVersion: {0}",
            view[i].RowVersion);
    }
}

System.Data System.Data..::.DataRowViewDataRowView

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 成员
System.Data 命名空间
DataRow


DataRowView 成员

DataRowView 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowView 类

表示 DataRow 的自定义视图。

DataRowView 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataRowView 类
System.Data 命名空间


DataRowView 方法

DataRowView 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowView 类

DataRowView 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataRowView 类
System.Data 命名空间


DataRowView ..::.BeginEdit 方法

DataRowView
.
.
::
.
BeginEdit 方法
DataRowView 类

开始编辑过程。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub BeginEdit
public void BeginEdit()
public:
virtual void BeginEdit() sealed
abstract BeginEdit : unit -> unit
override BeginEdit : unit -> unit

实现

BeginEdit 方法与 DataRow 的 DataRow..::.BeginEdit 方法相同。在调用 BeginEdit 之后，对 DataRowView 进行的任何更改可通过调用 CancelEdit 回滚。在允许用户更改行值之前，调用 BeginEdit 方法。在值发生更改之后，通过将 RowVersion 设置为 DataRowVersion.Proposed 检索新值。利用业务规则检查这些值，并根据需要通过调用 CancelEdit 回滚这些更改，或调用 EndEdit 接受这些更改。 BeginEdit 方法与 DataRow 的 DataRow..::.BeginEdit 方法相同。在调用 BeginEdit 之后，对 DataRowView 进行的任何更改可通过调用 CancelEdit 回滚。在允许用户更改行值之前，调用 BeginEdit 方法。在值发生更改之后，通过将 RowVersion 设置为 DataRowVersion.Proposed 检索新值。利用业务规则检查这些值，并根据需要通过调用 CancelEdit 回滚这些更改，或调用 EndEdit 接受这些更改。 BeginEdit 方法与 DataRow 的 DataRow..::.BeginEdit 方法相同。在调用 BeginEdit 之后，对 DataRowView 进行的任何更改可通过调用 CancelEdit 回滚。在允许用户更改行值之前，调用 BeginEdit 方法。在值发生更改之后，通过将 RowVersion 设置为 DataRowVersion.Proposed 检索新值。利用业务规则检查这些值，并根据需要通过调用 CancelEdit 回滚这些更改，或调用 EndEdit 接受这些更改。 BeginEdit 方法与 DataRow 的 DataRow..::.BeginEdit 方法相同。在调用 BeginEdit 之后，对 DataRowView 进行的任何更改可通过调用 CancelEdit 回滚。在允许用户更改行值之前，调用 BeginEdit 方法。在值发生更改之后，通过将 RowVersion 设置为 DataRowVersion.Proposed 检索新值。利用业务规则检查这些值，并根据需要通过调用 CancelEdit 回滚这些更改，或调用 EndEdit 接受这些更改。 BeginEdit 方法与 DataRow 的 DataRow..::.BeginEdit 方法相同。在调用 BeginEdit 之后，对 DataRowView 进行的任何更改可通过调用 CancelEdit 回滚。在允许用户更改行值之前，调用 BeginEdit 方法。在值发生更改之后，通过将 RowVersion 设置为 DataRowVersion.Proposed 检索新值。利用业务规则检查这些值，并根据需要通过调用 CancelEdit 回滚这些更改，或调用 EndEdit 接受这些更改。

下面的示例在 DataRowView 中编辑行。在此前调用 BeginEdit，此后则调用 EndEdit。 下面的示例在 DataRowView 中编辑行。在此前调用 BeginEdit，此后则调用 EndEdit。

Private Sub EditDataRowView(rowView As DataRowView, _
    columnToEdit As String)
    rowView.BeginEdit()
    rowView(columnToEdit) = textBox1.Text

    ' Validate the input with a function.
    If ValidateCompanyName(rowView(columnToEdit)) Then
        rowView.EndEdit()
    Else
        rowView.CancelEdit()
    End If
End Sub

Private Function ValidateCompanyName( _
    valuetoCheck As Object) As Boolean
    ' Insert code to validate the value.
    Return True
End Function

private void EditDataRowView(DataRowView rowView,
    string columnToEdit)
{
    rowView.BeginEdit();
    rowView[columnToEdit] = textBox1.Text;

    // Validate the input with a function.
    if (ValidateCompanyName(rowView[columnToEdit]))
        rowView.EndEdit();
    else
        rowView.CancelEdit();
}

private bool ValidateCompanyName(object valuetoCheck)
{
    // Insert code to validate the value.
    return true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间
AcceptChanges
AllowDelete
AllowEdit
AllowNew
CancelEdit
DataRow
EndEdit


DataRowView ..::.CancelEdit 方法

DataRowView
.
.
::
.
CancelEdit 方法
DataRowView 类

取消编辑过程。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CancelEdit
public void CancelEdit()
public:
virtual void CancelEdit() sealed
abstract CancelEdit : unit -> unit
override CancelEdit : unit -> unit

实现

在调用 CancelEdit 之后，对行进行的所有更改都回滚。还可通过针对父级 DataTable 调用 RejectChanges 回滚更改。 在调用 CancelEdit 之后，对行进行的所有更改都回滚。还可通过针对父级 DataTable 调用 RejectChanges 回滚更改。

下面的示例在 DataView 中编辑行。如果验证失败，则调用 CancelEdit 方法以取消更改。 下面的示例在 DataView 中编辑行。如果验证失败，则调用 CancelEdit 方法以取消更改。

Private Sub EditDataRowView(rowView As DataRowView, _
    columnToEdit As String)
    rowView.BeginEdit()
    rowView(columnToEdit) = textBox1.Text

    ' Validate the input with a function.
    If ValidateCompanyName(rowView(columnToEdit)) Then
        rowView.EndEdit()
    Else
        rowView.CancelEdit()
    End If
End Sub

Private Function ValidateCompanyName( _
    valuetoCheck As Object) As Boolean
    ' Insert code to validate the value.
    Return True
End Function

private void EditDataRowView(DataRowView rowView,
    string columnToEdit)
{
    rowView.BeginEdit();
    rowView[columnToEdit] = textBox1.Text;

    // Validate the input with a function.
    if (ValidateCompanyName(rowView[columnToEdit]))
        rowView.EndEdit();
    else
        rowView.CancelEdit();
}

private bool ValidateCompanyName(object valuetoCheck)
{
    // Insert code to validate the value.
    return true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间
AcceptChanges
AllowDelete
AllowEdit
AllowNew
BeginEdit
DataRow
EndEdit
RowVersion


DataRowView ..::.CreateChildView 方法

DataRowView
.
.
::
.
CreateChildView 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowView 类

返回子级 DataTable 的 DataView。

名称 说明
页首

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.CreateChildView 方法 (DataRelation)

DataRowView
.
.
::
.
CreateChildView 方法 (DataRelation)
DataRowView 类

返回具有指定的 DataRelation 的子级 DataTable 的 DataView。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function CreateChildView ( _
    relation As DataRelation _
) As DataView
public DataView CreateChildView(
    DataRelation relation
)
public:
DataView^ CreateChildView(
    DataRelation^ relation
)
member CreateChildView :
        relation:DataRelation -> DataView

参数

relation
类型： System.Data DataRelation
DataRelation 对象。

返回值

类型： System.Data DataView
子级 DataTable 的 DataView。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
CreateChildView 重载
System.Data 命名空间


DataRowView ..::.CreateChildView 方法 (String)

DataRowView
.
.
::
.
CreateChildView 方法 (String)
DataRowView 类

返回具有指定的 DataRelation 名称的子级 DataTable 的 DataView。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function CreateChildView ( _
    relationName As String _
) As DataView
public DataView CreateChildView(
    string relationName
)
public:
DataView^ CreateChildView(
    String^ relationName
)
member CreateChildView :
        relationName:string -> DataView

参数

relationName
类型： System String
一个包含 DataRelation 名称的字符串。

返回值

类型： System.Data DataView
子级 DataTable 的 DataView。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
CreateChildView 重载
System.Data 命名空间


DataRowView ..::.Delete 方法

DataRowView
.
.
::
.
Delete 方法
DataRowView 类

删除行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Delete
public void Delete()
public:
void Delete()
member Delete : unit -> unit

在针对行所属的 DataTable 调用 AcceptChanges 之前，该行不会被永久删除。

说明 说明

如果从基础表中删除 DataRow，则 DataRowView 可能会无效。当 DataRowView 无效时，则访问与 DataRowView 关联的值的操作（如 Delete）会引发异常。 如果从基础表中删除 DataRow，则 DataRowView 可能会无效。当 DataRowView 无效时，则访问与 DataRowView 关联的值的操作（如 Delete）会引发异常。

下面的示例针对行使用 Delete 方法。

Private Sub DeleteRow()
     Dim row As DataRowView
     Dim view As DataView = CType(dataGrid1.DataSource, DataView)
     row = view(dataGrid1.CurrentCell.RowNumber)
     row.Delete()
End Sub

private void DeleteRow()
{
    DataRowView row;
    DataView view = (DataView) dataGrid1.DataSource;
    row = view[dataGrid1.CurrentCell.RowNumber];
    row.Delete();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间
BeginEdit


DataRowView ..::.EndEdit 方法

DataRowView
.
.
::
.
EndEdit 方法
DataRowView 类

结束编辑过程。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub EndEdit
public void EndEdit()
public:
virtual void EndEdit() sealed
abstract EndEdit : unit -> unit
override EndEdit : unit -> unit

实现

下面的示例在 DataView 中编辑行。在此前调用 BeginEdit，此后则调用 EndEdit。 下面的示例在 DataView 中编辑行。在此前调用 BeginEdit，此后则调用 EndEdit。

Private Sub EditRow(view As DataView)
    view.AllowEdit = True
    view(0).BeginEdit
    view(0)("FirstName") = "Mary"
    view(0)("LastName") = "Jones"
    view(0).EndEdit
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间
AcceptChanges
AllowDelete
AllowEdit
AllowNew
CancelEdit
DataRow
BeginEdit


DataRowView ..::.Equals 方法

DataRowView
.
.
::
.
Equals 方法
DataRowView 类

获取一个值，该值指示当前的 DataRowView 是否与指定对象相同。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function Equals ( _
    other As Object _
) As Boolean
public override bool Equals(
    Object other
)
public:
virtual bool Equals(
    Object^ other
) override
abstract Equals :
        other:Object -> bool
override Equals :
        other:Object -> bool

参数

other
类型： System Object
要比较的 Object。

返回值

类型： System Boolean
如果 object 是 DataRowView 且它返回与当前 DataRowView 相同的行，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.GetEvents 方法

DataRowView
.
.
::
.
GetEvents 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetEvents。

名称 说明
页首

此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetEvents 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetEvents 方法
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetEvents。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEvents As EventDescriptorCollection
    Implements ICustomTypeDescriptor.GetEvents
EventDescriptorCollection ICustomTypeDescriptor.GetEvents()
private:
virtual EventDescriptorCollection^ GetEvents() sealed = ICustomTypeDescriptor::GetEvents
private abstract GetEvents : unit -> EventDescriptorCollection
private override GetEvents : unit -> EventDescriptorCollection

返回值

类型： System.ComponentModel EventDescriptorCollection

实现

此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
GetEvents 重载
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetEvents 方法 ( array<Attribute >[]()[])

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetEvents 方法 (
array<
Attribute
>
[]
()
[]
)
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetEvents。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEvents ( _
    attributes As Attribute() _
) As EventDescriptorCollection Implements ICustomTypeDescriptor.GetEvents
EventDescriptorCollection ICustomTypeDescriptor.GetEvents(
    Attribute[] attributes
)
private:
virtual EventDescriptorCollection^ GetEvents(
    array<Attribute^>^ attributes
) sealed = ICustomTypeDescriptor::GetEvents
private abstract GetEvents :
        attributes:Attribute[] -> EventDescriptorCollection
private override GetEvents :
        attributes:Attribute[] -> EventDescriptorCollection

参数

attributes
类型：
array<
System Attribute
>
[]
()
[]

返回值

类型： System.ComponentModel EventDescriptorCollection

实现

此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
GetEvents 重载
System.Data 命名空间


DataRowView ..::.GetHashCode 方法

DataRowView
.
.
::
.
GetHashCode 方法
DataRowView 类

返回 DataRow 对象的哈希代码。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
如果此实例的值不为零，则为 32 位有符号整数哈希代码 1，它表示布尔值 true；否则为整数 0，它表示布尔值 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.GetProperties 方法

DataRowView
.
.
::
.
GetProperties 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetProperties。

名称 说明
页首

此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetProperties 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetProperties 方法
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetProperties。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetProperties As PropertyDescriptorCollection
    Implements ICustomTypeDescriptor.GetProperties
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()
private:
virtual PropertyDescriptorCollection^ GetProperties() sealed = ICustomTypeDescriptor::GetProperties
private abstract GetProperties : unit -> PropertyDescriptorCollection
private override GetProperties : unit -> PropertyDescriptorCollection

返回值

类型： System.ComponentModel PropertyDescriptorCollection

实现

此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
GetProperties 重载
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetProperties 方法 ( array<Attribute >[]()[])

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetProperties 方法 (
array<
Attribute
>
[]
()
[]
)
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetProperties。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetProperties ( _
    attributes As Attribute() _
) As PropertyDescriptorCollection Implements ICustomTypeDescriptor.GetProperties
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(
    Attribute[] attributes
)
private:
virtual PropertyDescriptorCollection^ GetProperties(
    array<Attribute^>^ attributes
) sealed = ICustomTypeDescriptor::GetProperties
private abstract GetProperties :
        attributes:Attribute[] -> PropertyDescriptorCollection
private override GetProperties :
        attributes:Attribute[] -> PropertyDescriptorCollection

参数

attributes
类型：
array<
System Attribute
>
[]
()
[]

返回值

类型： System.ComponentModel PropertyDescriptorCollection

实现

此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
GetProperties 重载
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetAttributes 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetAttributes 方法
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetAttributes。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetAttributes As AttributeCollection
    Implements ICustomTypeDescriptor.GetAttributes
AttributeCollection ICustomTypeDescriptor.GetAttributes()
private:
virtual AttributeCollection^ GetAttributes() sealed = ICustomTypeDescriptor::GetAttributes
private abstract GetAttributes : unit -> AttributeCollection
private override GetAttributes : unit -> AttributeCollection

返回值

类型： System.ComponentModel AttributeCollection
有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetAttributes。

实现

此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetClassName 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetClassName 方法
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetClassName。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetClassName As String
    Implements ICustomTypeDescriptor.GetClassName
string ICustomTypeDescriptor.GetClassName()
private:
virtual String^ GetClassName() sealed = ICustomTypeDescriptor::GetClassName
private abstract GetClassName : unit -> string
private override GetClassName : unit -> string

返回值

类型： System String
有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetClassName。

实现

此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetComponentName 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetComponentName 方法
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetComponentName。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetComponentName As String
    Implements ICustomTypeDescriptor.GetComponentName
string ICustomTypeDescriptor.GetComponentName()
private:
virtual String^ GetComponentName() sealed = ICustomTypeDescriptor::GetComponentName
private abstract GetComponentName : unit -> string
private override GetComponentName : unit -> string

返回值

类型： System String
有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetComponentName。

实现

此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetConverter 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetConverter 方法
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetConverter。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetConverter As TypeConverter
    Implements ICustomTypeDescriptor.GetConverter
TypeConverter ICustomTypeDescriptor.GetConverter()
private:
virtual TypeConverter^ GetConverter() sealed = ICustomTypeDescriptor::GetConverter
private abstract GetConverter : unit -> TypeConverter
private override GetConverter : unit -> TypeConverter

返回值

类型： System.ComponentModel TypeConverter
有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetConverter。

实现

此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetDefaultEvent 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetDefaultEvent 方法
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetDefaultEvent。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetDefaultEvent As EventDescriptor
    Implements ICustomTypeDescriptor.GetDefaultEvent
EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
private:
virtual EventDescriptor^ GetDefaultEvent() sealed = ICustomTypeDescriptor::GetDefaultEvent
private abstract GetDefaultEvent : unit -> EventDescriptor
private override GetDefaultEvent : unit -> EventDescriptor

返回值

类型： System.ComponentModel EventDescriptor
有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetDefaultEvent。

实现

此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetDefaultProperty 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetDefaultProperty 方法
DataRowView 类

有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetDefaultProperty。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetDefaultProperty As PropertyDescriptor
    Implements ICustomTypeDescriptor.GetDefaultProperty
PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
private:
virtual PropertyDescriptor^ GetDefaultProperty() sealed = ICustomTypeDescriptor::GetDefaultProperty
private abstract GetDefaultProperty : unit -> PropertyDescriptor
private override GetDefaultProperty : unit -> PropertyDescriptor

返回值

类型： System.ComponentModel PropertyDescriptor
有关此成员的说明，请参见 ICustomTypeDescriptor..::.GetDefaultProperty。

实现

此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetEditor 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetEditor 方法
DataRowView 类

返回此组件实例的指定类型的编辑器。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEditor ( _
    editorBaseType As Type _
) As Object Implements ICustomTypeDescriptor.GetEditor
Object ICustomTypeDescriptor.GetEditor(
    Type editorBaseType
)
private:
virtual Object^ GetEditor(
    Type^ editorBaseType
) sealed = ICustomTypeDescriptor::GetEditor
private abstract GetEditor :
        editorBaseType:Type -> Object
private override GetEditor :
        editorBaseType:Type -> Object

参数

editorBaseType
类型： System Type
表示该对象的编辑器的 Type。

返回值

类型： System Object
表示该对象编辑器的指定类型的 Object；如果无法找到编辑器，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.ICustomTypeDescriptor ..::.GetPropertyOwner 方法

DataRowView
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetPropertyOwner 方法
DataRowView 类

返回包含指定的属性描述符所描述的属性的对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetPropertyOwner ( _
    pd As PropertyDescriptor _
) As Object Implements ICustomTypeDescriptor.GetPropertyOwner
Object ICustomTypeDescriptor.GetPropertyOwner(
    PropertyDescriptor pd
)
private:
virtual Object^ GetPropertyOwner(
    PropertyDescriptor^ pd
) sealed = ICustomTypeDescriptor::GetPropertyOwner
private abstract GetPropertyOwner :
        pd:PropertyDescriptor -> Object
private override GetPropertyOwner :
        pd:PropertyDescriptor -> Object

参数

pd
类型： System.ComponentModel PropertyDescriptor
表示要查找其所有者的属性的 PropertyDescriptor。

返回值

类型： System Object
表示指定属性所有者的 Object。

实现

此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView 属性

DataRowView 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowView 类

DataRowView 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataRowView 类
System.Data 命名空间


DataRowView ..::.DataView 属性

DataRowView
.
.
::
.
DataView 属性
DataRowView 类

获取该行所属的 DataView。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property DataView As DataView
    Get
public DataView DataView { get; }
public:
property DataView^ DataView {
    DataView^ get ();
}
member DataView : DataView

属性值

类型： System.Data DataView
该行所属的 DataView。

下面的示例返回指定的 DataRowView 的 DataView。

Private Function ReturnDataView( _
    rowView As DataRowView) As DataView
    Return rowView.DataView
End Function

private DataView ReturnDataView(DataRowView rowView)
{
    return rowView.DataView;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.IDataErrorInfo ..::.Error 属性

DataRowView
.
.
::
.
IDataErrorInfo
.
.
::
.
Error 属性
DataRowView 类

有关此成员的说明，请参见 IDataErrorInfo..::.Error。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property Error As String
    Implements IDataErrorInfo.Error
    Get
string IDataErrorInfo.Error { get; }
private:
virtual property String^ Error {
    String^ get () sealed = IDataErrorInfo::Error::get;
}
private abstract Error : string
private override Error : string

属性值

类型： System String
有关此成员的说明，请参见 IDataErrorInfo..::.Error。

实现

此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 IDataErrorInfo 接口时使用。 此成员是显式接口成员的实现。它只能在 DataRowView 实例被强制转换为 IDataErrorInfo 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.IDataErrorInfo ..::.Item 属性

DataRowView
.
.
::
.
IDataErrorInfo
.
.
::
.
Item 属性
DataRowView 类

获取具有给定名称的属性的错误信息。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property Item ( _
    colName As String _
) As String Implements IDataErrorInfo.Item
    Get
string IDataErrorInfo.this[
    string colName
] { get; }
private:
virtual property String^ Item[String^ colName] {
    String^ get (String^ colName) sealed = IDataErrorInfo::Item::get;
}
private abstract Item : string
private override Item : string

参数

colName
类型： System String
要获取其错误信息的属性的名称。

属性值

类型： System String
该属性的错误信息。默认值为空字符串 ("")。 该属性的错误信息。默认值为空字符串 ("")。

实现

此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 IDataErrorInfo 接口时使用。 此成员是显式的接口成员实现。它只能在 DataRowView 实例被强制转换为 IDataErrorInfo 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.IsEdit 属性

DataRowView
.
.
::
.
IsEdit 属性
DataRowView 类

指示行是否处于编辑模式。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property IsEdit As Boolean
    Get
public bool IsEdit { get; }
public:
property bool IsEdit {
    bool get ();
}
member IsEdit : bool

属性值

类型： System Boolean
如果行处于编辑模式，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间
BeginEdit


DataRowView ..::.IsNew 属性

DataRowView
.
.
::
.
IsNew 属性
DataRowView 类

指示 DataRowView 是否为新。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property IsNew As Boolean
    Get
public bool IsNew { get; }
public:
property bool IsNew {
    bool get ();
}
member IsNew : bool

属性值

类型： System Boolean
如果是新行，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.Item 属性

DataRowView
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowView 类

获取或设置指定列中的值。

名称 说明
页首

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataRowView ..::.Item 属性 (Int32)

DataRowView
.
.
::
.
Item 属性 (Int32)
DataRowView 类

获取或设置指定列中的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Item ( _
    ndx As Integer _
) As Object
    Get
    Set
public Object this[
    int ndx
] { get; set; }
public:
property Object^ Item[int ndx] {
    Object^ get (int ndx);
    void set (int ndx, Object^ value);
}
member Item : Object with get, set

参数

ndx
类型： System Int32
指定的列。

属性值

类型： System Object
列的值。

下面的示例显示 DataView 中每个 DataRowView 的每个项目中的值。

Private Shared Sub WriteViewRows(view As DataView)
   Dim colCount As Integer = view.Table.Columns.Count

   ' Iterate through the rows of the DataView.
   Dim rowView As DataRowView
   Dim i As Integer

   For Each rowView In view
     ' Display the value in each item of the DataRowView
     For i = 0 To colCount
        Console.Write(rowView(i) & vbTab)
     Next
     Console.WriteLine()
   Next
End Sub

private static void WriteViewRows(DataView view)
{
    int colCount = view.Table.Columns.Count;

    // Iterate through the rows of the DataView.
    foreach (DataRowView rowView in view)
    {
        // Display the value in each item of the DataRowView
        for (int i = 0; i < colCount; i++)
            Console.Write(rowView[i] + "\table");
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
Item 重载
System.Data 命名空间


DataRowView ..::.Item 属性 (String)

DataRowView
.
.
::
.
Item 属性 (String)
DataRowView 类

获取或设置指定列中的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Item ( _
    property As String _
) As Object
    Get
    Set
public Object this[
    string property
] { get; set; }
public:
property Object^ Item[String^ property] {
    Object^ get (String^ property);
    void set (String^ property, Object^ value);
}
member Item : Object with get, set

参数

property
类型： System String
包含指定列的字符串。

属性值

类型： System Object
列的值。

下面的示例将文本追加到 DataView 的每个修改行中某一列的值。

Private Sub SetDataRowView()
     Dim view As DataView = CType(dataGrid1.DataSource, DataView)

     ' Set the filter to display only those rows that were modified.
     view.RowStateFilter = DataViewRowState.ModifiedCurrent

     ' Change the value of the CompanyName column for each modified row.
     Dim rowView As DataRowView
     For Each rowView In  view
         rowView.Item("CompanyName") = _
         rowView.Item("CompanyName").ToString() & " new value"
     Next rowView
End Sub

private void SetDataRowView()
{
    DataView view = (DataView) dataGrid1.DataSource;

    // Set the filter to display only those rows that were modified.
    view.RowStateFilter=DataViewRowState.ModifiedCurrent;

    // Change the value of the CompanyName column for each modified row.
    foreach(DataRowView rowView in view)
    {
        rowView["CompanyName"] += " new value";
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
Item 重载
System.Data 命名空间


DataRowView ..::.Row 属性

DataRowView
.
.
::
.
Row 属性
DataRowView 类

获取正被查看的 DataRow。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Row As DataRow
    Get
public DataRow Row { get; }
public:
property DataRow^ Row {
    DataRow^ get ();
}
member Row : DataRow

属性值

类型： System.Data DataRow
正被 DataRowView 查看的 DataRow。

下面的示例使用 Row 属性打印 DataView 的每个修改行中第三列的值。

Private Sub ShowColumn3()
    Dim view As DataView = CType(dataGrid1.DataSource, DataView)

    ' Set the filter to display only those rows that were modified.
    view.RowStateFilter = DataViewRowState.ModifiedCurrent

    ' Change the value of the CompanyName column for each modified row.
    Dim rowView As DataRowView
    For Each rowView In  view
        Console.WriteLine(rowView.Row(2))
    Next rowView
End Sub

private void ShowColumn3()
{
    DataView view = (DataView) dataGrid1.DataSource;

    // Set the filter to display only those rows that were modified.
    view.RowStateFilter=DataViewRowState.ModifiedCurrent;

    // Change the value of the CompanyName column for each modified row.
    foreach(DataRowView rowView in view)
    {
        Console.WriteLine(rowView.Row[2]);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间
DataRowView
DataRow


DataRowView ..::.RowVersion 属性

DataRowView
.
.
::
.
RowVersion 属性
DataRowView 类

获取 DataRow 的当前版本说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property RowVersion As DataRowVersion
    Get
public DataRowVersion RowVersion { get; }
public:
property DataRowVersion RowVersion {
    DataRowVersion get ();
}
member RowVersion : DataRowVersion

属性值

类型： System.Data DataRowVersion
DataRowVersion 值之一。RowVersion 属性的可能值有：Default、Original、Current 和 Proposed。 DataRowVersion 值之一。RowVersion 属性的可能值有：Default、Original、Current 和 Proposed。

RowStateFilter 属性同时指定 DataRowState 和 DataRowVersion 设置。有关更多信息，请参见 DataRowState、DataRowVersion 和 DataViewRowState。 RowStateFilter 属性同时指定 DataRowState 和 DataRowVersion 设置。有关更多信息，请参见 DataRowState、DataRowVersion 和 DataViewRowState。

下面的示例使用 RowVersion 属性来显示 DataRowVersion。

Private Sub DemonstrateRowVersion()
    Dim i As Integer
    ' Create a DataTable with one column.
    Dim table As New DataTable("Table")
    Dim column As New DataColumn("Column")
    table.Columns.Add(column)

    ' Add ten rows.
    Dim row As DataRow
    For i = 0 To 9
        row = table.NewRow()
        row("Column") = "item " + i.ToString()
        table.Rows.Add(row)
    Next i
    table.AcceptChanges()

    ' Create a DataView with the table.
    Dim view As New DataView(table)

    ' Change one row's value:
    table.Rows(1)("Column") = "Hello"

    ' Add one row:
    row = table.NewRow()
    row("Column") = "World"
    table.Rows.Add(row)

    ' Set the RowStateFilter to display only added and modified rows.
    view.RowStateFilter = _
       DataViewRowState.Added Or DataViewRowState.ModifiedCurrent

    ' Print those rows. Output includes "Hello" and "World".
    PrintView(view, "ModifiedCurrent and Added")

    ' Set filter to display only originals of modified rows.
    view.RowStateFilter = DataViewRowState.ModifiedOriginal
    PrintView(view, "ModifiedOriginal")

    ' Delete three rows.
    table.Rows(1).Delete()
    table.Rows(2).Delete()
    table.Rows(3).Delete()

    ' Set the RowStateFilter to display only deleted rows.
    view.RowStateFilter = DataViewRowState.Deleted
    PrintView(view, "Deleted")

    ' Set filter to display only current rows.
    view.RowStateFilter = DataViewRowState.CurrentRows
    PrintView(view, "Current")

    ' Set filter to display only unchanged rows.
    view.RowStateFilter = DataViewRowState.Unchanged
    PrintView(view, "Unchanged")

    ' Set filter to display only original rows.
    ' Current values of unmodified rows are also returned.
    view.RowStateFilter = DataViewRowState.OriginalRows
    PrintView(view, "OriginalRows")
End Sub

Private Sub PrintView(ByVal view As DataView, ByVal label As String)
    Console.WriteLine(ControlChars.Cr + label)
    Dim i As Integer
    For i = 0 To view.Count - 1
        Console.WriteLine(view(i)("Column"))
        Console.WriteLine("DataRowView.RowVersion: {0}", _
            view(i).RowVersion)
    Next i
End Sub

private static void DemonstrateRowVersion()
{
    // Create a DataTable with one column.
    DataTable table = new DataTable("Table");
    DataColumn column = new DataColumn("Column");
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i < 10; i++)
    {
        row = table.NewRow();
        row["Column"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    // Create a DataView with the table.
    DataView view = new DataView(table);

    // Change one row's value:
    table.Rows[1]["Column"] = "Hello";

    // Add one row:
    row = table.NewRow();
    row["Column"] = "World";
    table.Rows.Add(row);

    // Set the RowStateFilter to display only added
    // and modified rows.
    view.RowStateFilter = DataViewRowState.Added |
        DataViewRowState.ModifiedCurrent;

    // Print those rows. Output includes "Hello" and "World".
    PrintView(view, "ModifiedCurrent and Added");

    // Set filter to display only originals of modified rows.
    view.RowStateFilter = DataViewRowState.ModifiedOriginal;
    PrintView(view, "ModifiedOriginal");

    // Delete three rows.
    table.Rows[1].Delete();
    table.Rows[2].Delete();
    table.Rows[3].Delete();

    // Set the RowStateFilter to display only deleted rows.
    view.RowStateFilter = DataViewRowState.Deleted;
    PrintView(view, "Deleted");

    // Set filter to display only current rows.
    view.RowStateFilter = DataViewRowState.CurrentRows;
    PrintView(view, "Current");

    // Set filter to display only unchanged rows.
    view.RowStateFilter = DataViewRowState.Unchanged;
    PrintView(view, "Unchanged");

    // Set filter to display only original rows.
    // Current values of unmodified rows are also returned.
    view.RowStateFilter = DataViewRowState.OriginalRows;
    PrintView(view, "OriginalRows");
}

private static void PrintView(DataView view, string label)
{
    Console.WriteLine("\n" + label);
    for (int i = 0; i < view.Count; i++)
    {
        Console.WriteLine(view[i]["Column"]);
        Console.WriteLine("DataViewRow.RowVersion: {0}",
            view[i].RowVersion);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间
AcceptChanges
BeginEdit
DataRowVersion
EndEdit


DataRowView 事件

DataRowView 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRowView 类

DataRowView 类型公开以下成员。

名称 说明
页首

参考

DataRowView 类
System.Data 命名空间


DataRowView ..::.PropertyChanged 事件

DataRowView
.
.
::
.
PropertyChanged 事件
DataRowView 类

当 DataRowView 属性发生更改时引发的事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event PropertyChanged As PropertyChangedEventHandler
public event PropertyChangedEventHandler PropertyChanged
public:
virtual  event PropertyChangedEventHandler^ PropertyChanged {
    void add (PropertyChangedEventHandler^ value);
    void remove (PropertyChangedEventHandler^ value);
}
abstract PropertyChanged : IEvent<PropertyChangedEventHandler,
    PropertyChangedEventArgs>
override PropertyChanged : IEvent<PropertyChangedEventHandler,
    PropertyChangedEventArgs>

实现

此事件在与 DataRowView 相关联的列值发生更改时激发。这种更改不会导致 DataRowView 的相关联索引位置被更改。 此事件在与 DataRowView 相关联的列值发生更改时激发。这种更改不会导致 DataRowView 的相关联索引位置被更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataRowView 类
DataRowView 成员
System.Data 命名空间


DataSet 类

DataSet 类
成员

表示数据在内存中的缓存。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class DataSet _
    Inherits MarshalByValueComponent _
    Implements IListSource, IXmlSerializable, ISupportInitializeNotification, ISupportInitialize,  _
    ISerializable
[SerializableAttribute]
public class DataSet : MarshalByValueComponent, IListSource,
    IXmlSerializable, ISupportInitializeNotification, ISupportInitialize, ISerializable
[SerializableAttribute]
public ref class DataSet : public MarshalByValueComponent,
    IListSource, IXmlSerializable, ISupportInitializeNotification, ISupportInitialize, ISerializable
[<SerializableAttribute>]
type DataSet =
    class
        inherit MarshalByValueComponent
        interface IListSource
        interface IXmlSerializable
        interface ISupportInitializeNotification
        interface ISupportInitialize
        interface ISerializable
    end

DataSet 是 ADO.NET 结构的主要组件，它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成，您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint 和 ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。有关使用 DataSet 对象的详细信息，请参见 DataSet、DataTable 和 DataView (ADO.NET)。 DataSet 是 ADO.NET 结构的主要组件，它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成，您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint 和 ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。有关使用 DataSet 对象的详细信息，请参见 DataSet、DataTable 和 DataView (ADO.NET)。 DataSet 是 ADO.NET 结构的主要组件，它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成，您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint 和 ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。有关使用 DataSet 对象的详细信息，请参见 DataSet、DataTable 和 DataView (ADO.NET)。 DataSet 是 ADO.NET 结构的主要组件，它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成，您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint 和 ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。有关使用 DataSet 对象的详细信息，请参见 DataSet、DataTable 和 DataView (ADO.NET)。

尽管 DataTable 对象中包含数据，但是 DataRelationCollection 允许您遍览表的层次结构。这些表包含在通过 Tables 属性访问的 DataTableCollection 中。当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。 尽管 DataTable 对象中包含数据，但是 DataRelationCollection 允许您遍览表的层次结构。这些表包含在通过 Tables 属性访问的 DataTableCollection 中。当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。 尽管 DataTable 对象中包含数据，但是 DataRelationCollection 允许您遍览表的层次结构。这些表包含在通过 Tables 属性访问的 DataTableCollection 中。当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。 尽管 DataTable 对象中包含数据，但是 DataRelationCollection 允许您遍览表的层次结构。这些表包含在通过 Tables 属性访问的 DataTableCollection 中。当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。 尽管 DataTable 对象中包含数据，但是 DataRelationCollection 允许您遍览表的层次结构。这些表包含在通过 Tables 属性访问的 DataTableCollection 中。当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。 尽管 DataTable 对象中包含数据，但是 DataRelationCollection 允许您遍览表的层次结构。这些表包含在通过 Tables 属性访问的 DataTableCollection 中。当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。

DataSet 可将数据和架构作为 XML 文档进行读写。数据和架构可通过 HTTP 传输，并在支持 XML 的任何平台上被任何应用程序使用。可使用 WriteXmlSchema 方法将架构保存为 XML 架构，并且可以使用 WriteXml 方法保存架构和数据。若要读取既包含架构也包含数据的 XML 文档，请使用 ReadXml 方法。 DataSet 可将数据和架构作为 XML 文档进行读写。数据和架构可通过 HTTP 传输，并在支持 XML 的任何平台上被任何应用程序使用。可使用 WriteXmlSchema 方法将架构保存为 XML 架构，并且可以使用 WriteXml 方法保存架构和数据。若要读取既包含架构也包含数据的 XML 文档，请使用 ReadXml 方法。 DataSet 可将数据和架构作为 XML 文档进行读写。数据和架构可通过 HTTP 传输，并在支持 XML 的任何平台上被任何应用程序使用。可使用 WriteXmlSchema 方法将架构保存为 XML 架构，并且可以使用 WriteXml 方法保存架构和数据。若要读取既包含架构也包含数据的 XML 文档，请使用 ReadXml 方法。 DataSet 可将数据和架构作为 XML 文档进行读写。数据和架构可通过 HTTP 传输，并在支持 XML 的任何平台上被任何应用程序使用。可使用 WriteXmlSchema 方法将架构保存为 XML 架构，并且可以使用 WriteXml 方法保存架构和数据。若要读取既包含架构也包含数据的 XML 文档，请使用 ReadXml 方法。

在典型的多层实现中，用于创建和刷新 DataSet 并依次更新原始数据的步骤包括：

  1. 通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。

  2. 通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。

  3. 调用 GetChanges 方法以创建只反映对数据进行的更改的第二个 DataSet。

  4. 调用 DataAdapter 的 Update 方法，并将第二个 DataSet 作为参数传递。

  5. 调用 Merge 方法将第二个 DataSet 中的更改合并到第一个中。

  6. 针对 DataSet 调用 AcceptChanges。或者，调用 RejectChanges 以取消更改。 针对 DataSet 调用 AcceptChanges。或者，调用 RejectChanges 以取消更改。

说明 说明

DataSet 和 DataTable 对象从 MarshalByValueComponent 继承而来，并支持用于远程处理的 ISerializable 接口。这些是仅有的可以远程处理的 ADO.NET 对象。 DataSet 和 DataTable 对象从 MarshalByValueComponent 继承而来，并支持用于远程处理的 ISerializable 接口。这些是仅有的可以远程处理的 ADO.NET 对象。
说明 说明

继承自 DataSet 的类不是由垃圾回收器完成的，原因是在 DataSet 中已取消终结器。派生类可以在其构造函数中调用 ReRegisterForFinalize 方法以允许垃圾回收器完成该类。 继承自 DataSet 的类不是由垃圾回收器完成的，原因是在 DataSet 中已取消终结器。派生类可以在其构造函数中调用 ReRegisterForFinalize 方法以允许垃圾回收器完成该类。

下面的示例由几种方法组成，这些方法互相结合，从 Northwind 数据库中创建并填充 DataSet。

Option Explicit On
Option Strict On

Imports System.Data
Imports system.Data.SqlClient

Public Class NorthwindDataSet

    Public Shared Sub Main()
        Dim connectionString As String = _
            GetConnectionString()
        ConnectToData(connectionString)
    End Sub

    Private Shared Sub ConnectToData( _
        ByVal connectionString As String)

        ' Create a SqlConnection to the Northwind database.
        Using connection As SqlConnection = New SqlConnection( _
           connectionString)

            ' Create a SqlDataAdapter for the Suppliers table.
            Dim suppliersAdapter As SqlDataAdapter = _
               New SqlDataAdapter()

            ' A table mapping names the DataTable.
            suppliersAdapter.TableMappings.Add("Table", "Suppliers")

            ' Open the connection.
            connection.Open()
            Console.WriteLine("The SqlConnection is open.")

            ' Create a SqlCommand to retrieve Suppliers data.
            Dim suppliersCommand As SqlCommand = New SqlCommand( _
               "SELECT SupplierID, CompanyName FROM dbo.Suppliers;", _
               connection)
            suppliersCommand.CommandType = CommandType.Text

            ' Set the SqlDataAdapter's SelectCommand.
            suppliersAdapter.SelectCommand = suppliersCommand

            ' Fill the DataSet.
            Dim dataSet As DataSet = New DataSet("Suppliers")
            suppliersAdapter.Fill(dataSet)

            ' Create a second SqlDataAdapter and SqlCommand to get
            ' the Products table, a child table of Suppliers.
            Dim productsAdapter As SqlDataAdapter = _
                New SqlDataAdapter()
            productsAdapter.TableMappings.Add("Table", "Products")

            Dim productsCommand As SqlCommand = New SqlCommand( _
               "SELECT ProductID, SupplierID FROM dbo.Products;", _
               connection)
            productsAdapter.SelectCommand = productsCommand

            ' Fill the DataSet.
            productsAdapter.Fill(dataSet)

            ' Close the connection.
            connection.Close()
            Console.WriteLine("The SqlConnection is closed.")

            ' Create a DataRelation to link the two tables
            ' based on the SupplierID.
            Dim parentColumn As DataColumn = _
               dataSet.Tables("Suppliers").Columns("SupplierID")
            Dim childColumn As DataColumn = _
               dataSet.Tables("Products").Columns("SupplierID")
            Dim relation As DataRelation = New _
               System.Data.DataRelation("SuppliersProducts", _
               parentColumn, childColumn)
            dataSet.Relations.Add(relation)

            Console.WriteLine( _
               "The {0} DataRelation has been created.", _
               relation.RelationName)
        End Using

    End Sub

    Private Shared Function GetConnectionString() As String
        ' To avoid storing the connection string in your code,
        ' you can retrieve it from a configuration file.
        Return "Data Source=(local);Initial Catalog=Northwind;" _
           & "Integrated Security=SSPI;"
    End Function
End Class

using System;
using System.Data;
using System.Data.SqlClient;

namespace Microsoft.AdoNet.DataSetDemo
{
    class NorthwindDataSet
    {
        static void Main()
        {
            string connectionString = GetConnectionString();
            ConnectToData(connectionString);
        }

        private static void ConnectToData(string connectionString)
        {
            //Create a SqlConnection to the Northwind database.
            using (SqlConnection connection =
                       new SqlConnection(connectionString))
            {
                //Create a SqlDataAdapter for the Suppliers table.
                SqlDataAdapter adapter = new SqlDataAdapter();

                // A table mapping names the DataTable.
                adapter.TableMappings.Add("Table", "Suppliers");

                // Open the connection.
                connection.Open();
                Console.WriteLine("The SqlConnection is open.");

                // Create a SqlCommand to retrieve Suppliers data.
                SqlCommand command = new SqlCommand(
                    "SELECT SupplierID, CompanyName FROM dbo.Suppliers;",
                    connection);
                command.CommandType = CommandType.Text;

                // Set the SqlDataAdapter's SelectCommand.
                adapter.SelectCommand = command;

                // Fill the DataSet.
                DataSet dataSet = new DataSet("Suppliers");
                adapter.Fill(dataSet);

                // Create a second Adapter and Command to get
                // the Products table, a child table of Suppliers.
                SqlDataAdapter productsAdapter = new SqlDataAdapter();
                productsAdapter.TableMappings.Add("Table", "Products");

                SqlCommand productsCommand = new SqlCommand(
                    "SELECT ProductID, SupplierID FROM dbo.Products;",
                    connection);
                productsAdapter.SelectCommand = productsCommand;

                // Fill the DataSet.
                productsAdapter.Fill(dataSet);

                // Close the connection.
                connection.Close();
                Console.WriteLine("The SqlConnection is closed.");

                // Create a DataRelation to link the two tables
                // based on the SupplierID.
                DataColumn parentColumn =
                    dataSet.Tables["Suppliers"].Columns["SupplierID"];
                DataColumn childColumn =
                    dataSet.Tables["Products"].Columns["SupplierID"];
                DataRelation relation =
                    new System.Data.DataRelation("SuppliersProducts",
                    parentColumn, childColumn);
                dataSet.Relations.Add(relation);
                Console.WriteLine(
                    "The {0} DataRelation has been created.",
                    relation.RelationName);
            }
        }

        static private string GetConnectionString()
        {
            // To avoid storing the connection string in your code,
            // you can retrieve it from a configuration file.
            return "Data Source=(local);Initial Catalog=Northwind;"
                + "Integrated Security=SSPI";
        }
    }
}

System.Data System.Data..::.DataSetDataSet

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet 成员

DataSet 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

表示数据在内存中的缓存。

DataSet 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataSet 类
System.Data 命名空间


DataSet 构造函数

DataSet 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

初始化 DataSet 类的新实例。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet 构造函数

DataSet 构造函数
DataSet 类

初始化 DataSet 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataSet()
public:
DataSet()
new : unit -> DataSet

DataSet 构造函数的此实现不使用任何参数，它为新实例创建默认名称“NewDataSet”。

需要 DataSet 的名称以确保 DataSet 的 XML 表示形式始终有用于文档元素的名称，而文档元素在架构定义中是最高级别的元素。

下面的示例创建新的 DataSet，并向其中添加两个 DataTable 对象。

Private Sub CreateDataSet()
    Dim dataSet As DataSet = New DataSet

    ' Create two DataTable objects using a function.
    Dim table1 As DataTable = MakeTable("idTable1", "thing1")
    Dim table2 As DataTable = MakeTable("idTable2", "thing2")
    dataSet.Tables.Add(table1)
    dataSet.Tables.Add(table2)
    Console.WriteLine(dataSet.Tables.Count)
End Sub

Private Function MakeTable(c1Name As String, _
    c2Name As String) As DataTable
    Dim table As New DataTable

    ' Add two DataColumns
    Dim column As DataColumn = New DataColumn( _
        c1Name, System.Type.GetType("System.Integer"))
    table.Columns.Add(column)
    column = New DataColumn(c2Name, _
        System.Type.GetType("System.String"))
    MakeTable = table
End Function

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
DataSet 重载
System.Data 命名空间
DataTableCollection

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet 构造函数 (String)

DataSet 构造函数 (String)
DataSet 类

用给定名称初始化 DataSet 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    dataSetName As String _
)
public DataSet(
    string dataSetName
)
public:
DataSet(
    String^ dataSetName
)
new :
        dataSetName:string -> DataSet

参数

dataSetName
类型： System String
DataSet 的名称。

需要 DataSet 的名称以确保 DataSet 的 XML 表示形式始终有用于文档元素的名称，而文档元素在架构定义中是最高级别的元素。

下面的示例创建要向其添加两个 DataTable 对象的新 DataSet。

Private Sub CreateDataSet()
    Dim  dataSet As DataSet = New DataSet("aNewDataSet")

    ' Create two DataTable objects using a function.
    Dim table1 As DataTable = MakeTable("idTable1", "thing1")
    Dim table2 As DataTable = MakeTable("idTable2", "thing2")

    dataSet.Tables.Add(table1)
    dataSet.Tables.Add(table2)
    Console.WriteLine(dataSet.DataSetName, dataSet.Tables.Count)
End Sub

Private Function MakeTable(c1Name As String, c2Name As String) _
    As DataTable
    Dim table As New DataTable

    ' Add two DataColumns
    Dim column As DataColumn = New DataColumn( _
        c1Name, System.Type.GetType("System.Integer"))
    table.Columns.Add(column)
    column = New DataColumn(c2Name, _
        System.Type.GetType("System.String"))
    table.Columns.Add(column)
    MakeTable = table
End Function

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
DataSet 重载
System.Data 命名空间
DataSetName
DataTableCollection

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet 构造函数 (SerializationInfo, StreamingContext)

DataSet 构造函数 (SerializationInfo, StreamingContext)
DataSet 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

初始化具有给定序列化信息和上下文的 DataSet 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected DataSet(
    SerializationInfo info,
    StreamingContext context
)
protected:
DataSet(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> DataSet

参数

info
类型： System.Runtime.Serialization SerializationInfo
将对象序列化或反序列化所需的数据。
context
类型： System.Runtime.Serialization StreamingContext
给定序列化流的源和目的地。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
DataSet 重载
System.Data 命名空间


DataSet 构造函数 (SerializationInfo, StreamingContext, Boolean)

DataSet 构造函数 (SerializationInfo, StreamingContext, Boolean)
DataSet 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

初始化 DataSet 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext, _
    ConstructSchema As Boolean _
)
protected DataSet(
    SerializationInfo info,
    StreamingContext context,
    bool ConstructSchema
)
protected:
DataSet(
    SerializationInfo^ info,
    StreamingContext context,
    bool ConstructSchema
)
new :
        info:SerializationInfo *
        context:StreamingContext *
        ConstructSchema:bool -> DataSet

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext 对象。
ConstructSchema
类型： System Boolean
布尔值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
DataSet 重载
System.Data 命名空间


DataSet 方法

DataSet 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

DataSet 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataSet 类
System.Data 命名空间


DataSet ..::.AcceptChanges 方法

DataSet
.
.
::
.
AcceptChanges 方法
DataSet 类

提交自加载此 DataSet 或上次调用 AcceptChanges 以来对其进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub AcceptChanges
public void AcceptChanges()
public:
void AcceptChanges()
member AcceptChanges : unit -> unit

DataRow 和 DataTable 类都具有 AcceptChanges 方法。在 DataTable 级别调用 AcceptChanges，会为要调用的每个 DataRow 导致 AcceptChanges 方法。同样，对 DataSet 调用 AcceptChanges 会导致对 DataSet 中的每个表调用 AcceptChanges。照这样，您可在多个级别上调用该方法。调用 DataSet 的 AcceptChanges 将使您只需调用一次，即可对所有次级对象（例如表和行）调用该方法。 DataRow 和 DataTable 类都具有 AcceptChanges 方法。在 DataTable 级别调用 AcceptChanges，会为要调用的每个 DataRow 导致 AcceptChanges 方法。同样，对 DataSet 调用 AcceptChanges 会导致对 DataSet 中的每个表调用 AcceptChanges。照这样，您可在多个级别上调用该方法。调用 DataSet 的 AcceptChanges 将使您只需调用一次，即可对所有次级对象（例如表和行）调用该方法。 DataRow 和 DataTable 类都具有 AcceptChanges 方法。在 DataTable 级别调用 AcceptChanges，会为要调用的每个 DataRow 导致 AcceptChanges 方法。同样，对 DataSet 调用 AcceptChanges 会导致对 DataSet 中的每个表调用 AcceptChanges。照这样，您可在多个级别上调用该方法。调用 DataSet 的 AcceptChanges 将使您只需调用一次，即可对所有次级对象（例如表和行）调用该方法。 DataRow 和 DataTable 类都具有 AcceptChanges 方法。在 DataTable 级别调用 AcceptChanges，会为要调用的每个 DataRow 导致 AcceptChanges 方法。同样，对 DataSet 调用 AcceptChanges 会导致对 DataSet 中的每个表调用 AcceptChanges。照这样，您可在多个级别上调用该方法。调用 DataSet 的 AcceptChanges 将使您只需调用一次，即可对所有次级对象（例如表和行）调用该方法。 DataRow 和 DataTable 类都具有 AcceptChanges 方法。在 DataTable 级别调用 AcceptChanges，会为要调用的每个 DataRow 导致 AcceptChanges 方法。同样，对 DataSet 调用 AcceptChanges 会导致对 DataSet 中的每个表调用 AcceptChanges。照这样，您可在多个级别上调用该方法。调用 DataSet 的 AcceptChanges 将使您只需调用一次，即可对所有次级对象（例如表和行）调用该方法。

当对 DataSet 调用 AcceptChanges 时，任何仍处于编辑模式的 DataRow 对象都将成功结束其编辑。每个 DataRow 的 RowState 属性也都更改；Added 和 Modified 行变为 Unchanged，Deleted 行被移除。 当对 DataSet 调用 AcceptChanges 时，任何仍处于编辑模式的 DataRow 对象都将成功结束其编辑。每个 DataRow 的 RowState 属性也都更改；Added 和 Modified 行变为 Unchanged，Deleted 行被移除。

如果 DataSet 包含 ForeignKeyConstraint 对象，则调用 AcceptChanges 方法还将导致强制实施 AcceptRejectRule。

说明 说明

AcceptChanges 和 RejectChanges 仅适用于与 DataRow 相关的更改，即 Add、Remove、Delete 和 Modify。它们不适用于架构和结构方面的更改。 AcceptChanges 和 RejectChanges 仅适用于与 DataRow 相关的更改，即 Add、Remove、Delete 和 Modify。它们不适用于架构和结构方面的更改。

下面的示例将 DataRow 添加到 DataSet 的 DataTable 中。然后针对 DataSet 调用 AcceptChanges 方法，该数据集将级联到它包含的所有 DataTable 对象。 下面的示例将 DataRow 添加到 DataSet 的 DataTable 中。然后针对 DataSet 调用 AcceptChanges 方法，该数据集将级联到它包含的所有 DataTable 对象。

Private Sub AcceptChanges()
   Dim myDataSet As DataSet
   myDataSet = new DataSet()

   ' Not shown: methods to fill the DataSet with data.
   Dim t As DataTable

   t = myDataSet.Tables("Suppliers")

   ' Add a DataRow to a table.
   Dim myRow As DataRow
   myRow = t.NewRow()
   myRow("CompanyID") = "NWTRADECO"
   myRow("CompanyName") = "NortWest Trade Company"

   ' Add the row.
   t.Rows.Add( myRow )

   ' Calling AcceptChanges on the DataSet causes AcceptChanges to be
   ' called on all subordinate objects.
   myDataSet.AcceptChanges()
End Sub

private void AcceptChanges()
{
   DataSet myDataSet;
   myDataSet = new DataSet();

   // Not shown: methods to fill the DataSet with data.
   DataTable t;
   t = myDataSet.Tables["Suppliers"];

   // Add a DataRow to a table.
   DataRow myRow;
   myRow = t.NewRow();
   myRow["CompanyID"] = "NWTRADECO";
   myRow["CompanyName"] = "NortWest Trade Company";

   // Add the row.
   t.Rows.Add( myRow );

   // Calling AcceptChanges on the DataSet causes AcceptChanges to be
   // called on all subordinate objects.
   myDataSet.AcceptChanges();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.BeginInit 方法

DataSet
.
.
::
.
BeginInit 方法
DataSet 类

开始初始化在窗体上使用或由另一个组件使用的 DataSet。初始化发生在运行时。 开始初始化在窗体上使用或由另一个组件使用的 DataSet。初始化发生在运行时。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub BeginInit
public void BeginInit()
public:
virtual void BeginInit() sealed
abstract BeginInit : unit -> unit
override BeginInit : unit -> unit

实现

Visual Studio .NET 设计环境使用该方法来启动在窗体上使用或由另一个组件使用的组件的初始化。EndInit 方法结束该初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来启动在窗体上使用或由另一个组件使用的组件的初始化。EndInit 方法结束该初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来启动在窗体上使用或由另一个组件使用的组件的初始化。EndInit 方法结束该初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Clear 方法

DataSet
.
.
::
.
Clear 方法
DataSet 类

通过移除所有表中的所有行来清除任何数据的 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Clear
public void Clear()
public:
void Clear()
member Clear : unit -> unit

如果 DataSet 绑定到 XmlDataDocument，则调用 DataSet..::.Clear 或 DataTable..::.Clear 将引发 NotSupportedException。为避免这种情况，请遍历每个表，逐个移除每一行。 如果 DataSet 绑定到 XmlDataDocument，则调用 DataSet..::.Clear 或 DataTable..::.Clear 将引发 NotSupportedException。为避免这种情况，请遍历每个表，逐个移除每一行。

下面的示例清除所有表中所有行的 DataSet。

Private Sub ClearDataSet(ByVal dataSet As DataSet)
    ' To test, print the number rows in each table.
    Dim table As DataTable
    For Each table In dataSet.Tables
        Console.WriteLine(table.TableName & "Rows.Count = " _
            & table.Rows.Count.ToString())
    Next

    ' Clear all rows of each table.
    dataSet.Clear()

    ' Print the number of rows again.
    For Each table In dataSet.Tables
        Console.WriteLine(table.TableName & "Rows.Count = " _
            & table.Rows.Count.ToString())
    Next
End Sub

private void ClearDataSet(DataSet dataSet)
{
    // To test, print the number rows in each table.
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine(table.TableName + "Rows.Count = "
            + table.Rows.Count.ToString());
    }
    // Clear all rows of each table.
    dataSet.Clear();

    // Print the number of rows again.
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine(table.TableName + "Rows.Count = "
            + table.Rows.Count.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Clone 方法

DataSet
.
.
::
.
Clone 方法
DataSet 类

复制 DataSet 的结构，包括所有 DataTable 架构、关系和约束。不要复制任何数据。 复制 DataSet 的结构，包括所有 DataTable 架构、关系和约束。不要复制任何数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Clone As DataSet
public virtual DataSet Clone()
public:
virtual DataSet^ Clone()
abstract Clone : unit -> DataSet
override Clone : unit -> DataSet

返回值

类型： System.Data DataSet
新 DataSet，其架构与当前 DataSet 的架构相同，但是不包含任何数据。
说明 说明

如果已创建这些类的子类，则复本也将属于相同的子类。

下面的示例创建 DataSet 对象架构的复本。

Private Sub GetClone(ByVal dataSet As DataSet)
   ' Get a clone of the original DataSet.
   Dim cloneSet As DataSet = dataSet.Clone()

   ' Insert code to work with clone of the DataSet.
End Sub

private void GetClone(DataSet dataSet)
{
    // Get a clone of the original DataSet.
    DataSet cloneSet = dataSet.Clone();

    // Insert code to work with clone of the DataSet.
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间
Copy

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Copy 方法

DataSet
.
.
::
.
Copy 方法
DataSet 类

复制该 DataSet 的结构和数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Copy As DataSet
public DataSet Copy()
public: DataSet^ Copy()
member Copy : unit -> DataSet
返回值
类型： System.Data DataSet
新的
DataSet
，具有与该
DataSet
相同的结构（表架构、关系和约束）和数据。
说明
如果已创建这些类的子类，则副本也将属于相同的子类。

下面的示例使用 Copy 方法创建初始 DataSet 的副本。

Private Sub CopyDataSet(ByVal dataSet As DataSet )
    ' Create an object variable for the copy.
    Dim copyDataSet As DataSet = dataSet.Copy()

    ' Insert code to work with the copy.
End Sub

private void CopyDataSet(DataSet dataSet)
{
    // Create an object variable for the copy.
    DataSet copyDataSet;
    copyDataSet = dataSet.Copy();

    // Insert code to work with the copy.
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间
Clone

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.CreateDataReader 方法

DataSet
.
.
::
.
CreateDataReader 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

为每个 DataTable 返回带有一个结果集的 DataTableReader，顺序与 Tables 集合中表的显示顺序相同。

名称 说明
页首

为确保返回的 DataTableReader 中结果集的顺序，如果 DataSet 中的 DataTable 为空，则在返回的 DataTableReader 中，它由一个空结果集表示。

此示例（一个控制台应用程序）创建三个 DataTable 实例并将每个实例分别添加到 DataSet 中。该示例调用 CreateDataReader 方法并显示返回的 DataTableReader 的内容。请注意，DataTableReader 中结果集的顺序由作为参数传递的 DataTable 实例的顺序控制。 此示例（一个控制台应用程序）创建三个 DataTable 实例并将每个实例分别添加到 DataSet 中。该示例调用 CreateDataReader 方法并显示返回的 DataTableReader 的内容。请注意，DataTableReader 中结果集的顺序由作为参数传递的 DataTable 实例的顺序控制。 此示例（一个控制台应用程序）创建三个 DataTable 实例并将每个实例分别添加到 DataSet 中。该示例调用 CreateDataReader 方法并显示返回的 DataTableReader 的内容。请注意，DataTableReader 中结果集的顺序由作为参数传递的 DataTable 实例的顺序控制。

说明 说明

此示例演示如何使用 CreateDataReader 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。 此示例演示如何使用 CreateDataReader 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。

Private emptyTable As DataTable
Private customerTable As DataTable
Private productTable As DataTable

Sub Main()
  Dim dataSet As New DataSet
  ' Add some DataTables to the DataSet, including
  ' an empty DataTable:

  emptyTable = New DataTable()
  productTable = GetProducts()
  customerTable = GetCustomers()

  dataSet.Tables.Add(customerTable)
  dataSet.Tables.Add(emptyTable)
  dataSet.Tables.Add(productTable)
  TestCreateDataReader(dataSet)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub TestCreateDataReader(ByVal dataSet As DataSet)
  ' Given a DataSet, retrieve a DataTableReader
  ' allowing access to all the DataSet's data.
  ' Even though the dataset contains three DataTables,
  ' this code will only display the contents of two of them,
  ' because the code has limited the results to the
  ' DataTables stored in the tables array. Because this
  ' parameter is declared using the ParamArray keyword,
  ' you could also include a list of DataTable instances
  ' individually, as opposed to supplying an array of
  ' DataTables, as in this example:
  Using reader As DataTableReader = _
      dataSet.CreateDataReader(productTable, emptyTable)
    Do
      If Not reader.HasRows Then
        Console.WriteLine("Empty DataTableReader")
      Else
        PrintColumns(reader)
      End If
      Console.WriteLine("========================")
    Loop While reader.NextResult()
  End Using
End Sub

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetProducts() As DataTable
  ' Create sample Products table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Wireless Network Card"})
  table.Rows.Add(New Object() {2, "Hard Drive"})
  table.Rows.Add(New Object() {3, "Monitor"})
  table.Rows.Add(New Object() {4, "CPU"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintColumns( _
   ByVal reader As DataTableReader)

  ' Loop through all the rows in the DataTableReader.
  Do While reader.Read()
    For i As Integer = 0 To reader.FieldCount - 1
      Console.Write(reader(i).ToString() & " ")
    Next
    Console.WriteLine()
  Loop
End Sub

static DataTable customerTable;
static DataTable productTable;
static DataTable emptyTable;

static void Main()
{
    DataSet dataSet = new DataSet();

    // Add some DataTables to the DataSet, including
    // an empty DataTable:
    emptyTable = new DataTable();
    productTable = GetProducts();
    customerTable = GetCustomers();

    dataSet.Tables.Add(customerTable);
    dataSet.Tables.Add(emptyTable);
    dataSet.Tables.Add(productTable);
    TestCreateDataReader(dataSet);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void TestCreateDataReader(DataSet dataSet)
{
    // Given a DataSet, retrieve a DataTableReader
    // allowing access to all the DataSet's data.
    // Even though the dataset contains three DataTables,
    // this code will only display the contents of two of them,
    // because the code has limited the results to the
    // DataTables stored in the tables array. Because this
    // parameter is declared using the ParamArray keyword,
    // you could also include a list of DataTable instances
    // individually, as opposed to supplying an array of
    // DataTables, as in this example:
    using (DataTableReader reader =
        dataSet.CreateDataReader(productTable, emptyTable))
    {
        do
        {
            if (!reader.HasRows)
            {
                Console.WriteLine("Empty DataTableReader");
            }
            else
            {
                PrintColumns(reader);
            }
            Console.WriteLine("========================");
        } while (reader.NextResult());
    }
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetProducts()
{
    // Create sample Products table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Wireless Network Card" });
    table.Rows.Add(new object[] { 2, "Hard Drive" });
    table.Rows.Add(new object[] { 3, "Monitor" });
    table.Rows.Add(new object[] { 4, "CPU" });
    table.AcceptChanges();
    return table;
}

private static void PrintColumns(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write(reader[i] + " ");
        }
        Console.WriteLine();
    }
}

该示例在控制台窗口中显示以下代码：

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.CreateDataReader 方法

DataSet
.
.
::
.
CreateDataReader 方法
DataSet 类

为每个 DataTable 返回带有一个结果集的 DataTableReader，顺序与 Tables 集合中表的显示顺序相同。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function CreateDataReader As DataTableReader
public DataTableReader CreateDataReader()
public:
DataTableReader^ CreateDataReader()
member CreateDataReader : unit -> DataTableReader

返回值

类型： System.Data DataTableReader
包含一个或多个结果集的 DataTableReader，与源 DataSet 中包含的 DataTable 实例相对应。

为确保返回的 DataTableReader 中结果集的顺序，如果 DataSet 中的 DataTable 为空，则在返回的 DataTableReader 中，它由一个空结果集表示。

下面的示例创建三个 DataTable 实例，并将每个实例添加到一个 DataSet 中。该示例然后将填充的 DataSet 传递给调用 CreateDataReader 方法的过程，并开始循环访问 DataTableReader 中包含的所有结果集。该示例在控制台窗口中显示结果。 下面的示例创建三个 DataTable 实例，并将每个实例添加到一个 DataSet 中。该示例然后将填充的 DataSet 传递给调用 CreateDataReader 方法的过程，并开始循环访问 DataTableReader 中包含的所有结果集。该示例在控制台窗口中显示结果。 下面的示例创建三个 DataTable 实例，并将每个实例添加到一个 DataSet 中。该示例然后将填充的 DataSet 传递给调用 CreateDataReader 方法的过程，并开始循环访问 DataTableReader 中包含的所有结果集。该示例在控制台窗口中显示结果。

Sub Main()
  Dim dataSet As New DataSet
  ' Add some DataTables to the DataSet, including
  ' an empty DataTable:
  dataSet.Tables.Add(GetCustomers())
  dataSet.Tables.Add(New DataTable())
  dataSet.Tables.Add(GetProducts())
  TestCreateDataReader(dataSet)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub TestCreateDataReader(ByVal dataSet As DataSet)
  ' Given a DataSet, retrieve a DataTableReader
  ' allowing access to all the DataSet's data:
  Using reader As DataTableReader = dataSet.CreateDataReader()
    Do
      If Not reader.HasRows Then
        Console.WriteLine("Empty DataTableReader")
      Else
        PrintColumns(reader)
      End If
      Console.WriteLine("========================")
    Loop While reader.NextResult()
  End Using
End Sub

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  Return table
End Function

Private Function GetProducts() As DataTable
  ' Create sample Products table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Wireless Network Card"})
  table.Rows.Add(New Object() {2, "Hard Drive"})
  table.Rows.Add(New Object() {3, "Monitor"})
  table.Rows.Add(New Object() {4, "CPU"})
  Return table
End Function

Private Sub PrintColumns( _
   ByVal reader As DataTableReader)

  ' Loop through all the rows in the DataTableReader.
  Do While reader.Read()
    For i As Integer = 0 To reader.FieldCount - 1
      Console.Write(reader(i).ToString() & " ")
    Next
    Console.WriteLine()
  Loop
End Sub

static void Main()
{
    DataSet dataSet = new DataSet();
    // Add some DataTables to the DataSet, including
    // an empty DataTable:
    dataSet.Tables.Add(GetCustomers());
    dataSet.Tables.Add(new DataTable());
    dataSet.Tables.Add(GetProducts());
    TestCreateDataReader(dataSet);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void TestCreateDataReader(DataSet dataSet)
{
    // Given a DataSet, retrieve a DataTableReader
    // allowing access to all the DataSet's data:
    using (DataTableReader reader = dataSet.CreateDataReader())
    {
        do
        {
            if (!reader.HasRows)
            {
                Console.WriteLine("Empty DataTableReader");
            }
            else
            {
                PrintColumns(reader);
            }
            Console.WriteLine("========================");
        } while (reader.NextResult());
    }
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    return table;
}

private static DataTable GetProducts()
{
    // Create sample Products table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Wireless Network Card" });
    table.Rows.Add(new object[] { 2, "Hard Drive" });
    table.Rows.Add(new object[] { 3, "Monitor" });
    table.Rows.Add(new object[] { 4, "CPU" });
    return table;
}

private static void PrintColumns(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write(reader[i] + " ");
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
CreateDataReader 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.CreateDataReader 方法 ( array<DataTable >[]()[])

DataSet
.
.
::
.
CreateDataReader 方法 (
array<
DataTable
>
[]
()
[]
)
DataSet 类

为每个 DataTable 返回带有一个结果集的 DataTableReader。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function CreateDataReader ( _
    ParamArray dataTables As DataTable() _
) As DataTableReader
public DataTableReader CreateDataReader(
    params DataTable[] dataTables
)
public:
DataTableReader^ CreateDataReader(
    ... array<DataTable^>^ dataTables
)
member CreateDataReader :
        dataTables:DataTable[] -> DataTableReader

参数

dataTables
类型：
array<
System.Data DataTable
>
[]
()
[]

一个 DataTable 数组，它提供要在 DataTableReader 中返回的结果集的顺序。

返回值

类型： System.Data DataTableReader
包含一个或多个结果集的 DataTableReader，与源 DataSet 中包含的 DataTable 实例相对应。返回的结果集按 dataTables 参数所指定的顺序排列。 包含一个或多个结果集的 DataTableReader，与源 DataSet 中包含的 DataTable 实例相对应。返回的结果集按 dataTables 参数所指定的顺序排列。

为确保返回的 DataTableReader 中的结果集的顺序，如果 DataSet 中的 DataTable 为空，在返回的 DataTableReader 中，它由一个空结果集表示。因为该重载版本允许您以参数形式提供 DataTable 实例列表，所以可以指定结果集在返回的 DataTableReader 中的显示顺序。 为确保返回的 DataTableReader 中的结果集的顺序，如果 DataSet 中的 DataTable 为空，在返回的 DataTableReader 中，它由一个空结果集表示。因为该重载版本允许您以参数形式提供 DataTable 实例列表，所以可以指定结果集在返回的 DataTableReader 中的显示顺序。

此示例（一个控制台应用程序）创建三个 DataTable 实例并将每个实例分别添加到 DataSet 中。该示例调用 CreateDataReader 方法并显示返回的 DataTableReader 的内容。请注意，DataTableReader 中结果集的顺序由作为参数传递的 DataTable 实例的顺序控制。该示例在控制台窗口中显示结果。 此示例（一个控制台应用程序）创建三个 DataTable 实例并将每个实例分别添加到 DataSet 中。该示例调用 CreateDataReader 方法并显示返回的 DataTableReader 的内容。请注意，DataTableReader 中结果集的顺序由作为参数传递的 DataTable 实例的顺序控制。该示例在控制台窗口中显示结果。 此示例（一个控制台应用程序）创建三个 DataTable 实例并将每个实例分别添加到 DataSet 中。该示例调用 CreateDataReader 方法并显示返回的 DataTableReader 的内容。请注意，DataTableReader 中结果集的顺序由作为参数传递的 DataTable 实例的顺序控制。该示例在控制台窗口中显示结果。 此示例（一个控制台应用程序）创建三个 DataTable 实例并将每个实例分别添加到 DataSet 中。该示例调用 CreateDataReader 方法并显示返回的 DataTableReader 的内容。请注意，DataTableReader 中结果集的顺序由作为参数传递的 DataTable 实例的顺序控制。该示例在控制台窗口中显示结果。

Private emptyTable As DataTable
Private customerTable As DataTable
Private productTable As DataTable

Sub Main()
  Dim dataSet As New DataSet
  ' Add some DataTables to the DataSet, including
  ' an empty DataTable:

  emptyTable = New DataTable()
  productTable = GetProducts()
  customerTable = GetCustomers()

  dataSet.Tables.Add(customerTable)
  dataSet.Tables.Add(emptyTable)
  dataSet.Tables.Add(productTable)
  TestCreateDataReader(dataSet)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub TestCreateDataReader(ByVal dataSet As DataSet)
  ' Given a DataSet, retrieve a DataTableReader
  ' allowing access to all the DataSet's data.
  ' Even though the dataset contains three DataTables,
  ' this code will only display the contents of two of them,
  ' because the code has limited the results to the
  ' DataTables stored in the tables array. Because this
  ' parameter is declared using the ParamArray keyword,
  ' you could also include a list of DataTable instances
  ' individually, as opposed to supplying an array of
  ' DataTables, as in this example:
  Using reader As DataTableReader = _
    dataSet.CreateDataReader(productTable, emptyTable)
    Do
      If Not reader.HasRows Then
        Console.WriteLine("Empty DataTableReader")
      Else
        PrintColumns(reader)
      End If
      Console.WriteLine("========================")
    Loop While reader.NextResult()
  End Using
End Sub

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  Return table
End Function

Private Function GetProducts() As DataTable
  ' Create sample Products table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Wireless Network Card"})
  table.Rows.Add(New Object() {2, "Hard Drive"})
  table.Rows.Add(New Object() {3, "Monitor"})
  table.Rows.Add(New Object() {4, "CPU"})
  Return table
End Function

Private Sub PrintColumns( _
   ByVal reader As DataTableReader)

  ' Loop through all the rows in the DataTableReader.
  Do While reader.Read()
    For i As Integer = 0 To reader.FieldCount - 1
      Console.Write(reader(i).ToString() & " ")
    Next
    Console.WriteLine()
  Loop
End Sub

static DataTable customerTable;
static DataTable productTable;
static DataTable emptyTable;

static void Main()
{
    DataSet dataSet = new DataSet();

    // Add some DataTables to the DataSet, including
    // an empty DataTable:
    emptyTable = new DataTable();
    productTable = GetProducts();
    customerTable = GetCustomers();

    dataSet.Tables.Add(customerTable);
    dataSet.Tables.Add(emptyTable);
    dataSet.Tables.Add(productTable);
    TestCreateDataReader(dataSet);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void TestCreateDataReader(DataSet dataSet)
{
    // Given a DataSet, retrieve a DataTableReader
    // allowing access to all the DataSet's data.
    // Even though the dataset contains three DataTables,
    // this code will only display the contents of two of them,
    // because the code has limited the results to the
    // DataTables stored in the tables array. Because this
    // parameter is declared using the ParamArray keyword,
    // you could also include a list of DataTable instances
    // individually, as opposed to supplying an array of
    // DataTables, as in this example:
    using (DataTableReader reader =
       dataSet.CreateDataReader(productTable, emptyTable))
    {
        do
        {
            if (!reader.HasRows)
            {
                Console.WriteLine("Empty DataTableReader");
            }
            else
            {
                PrintColumns(reader);
            }
            Console.WriteLine("========================");
        } while (reader.NextResult());
    }
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    return table;
}

private static DataTable GetProducts()
{
    // Create sample Products table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Wireless Network Card" });
    table.Rows.Add(new object[] { 2, "Hard Drive" });
    table.Rows.Add(new object[] { 3, "Monitor" });
    table.Rows.Add(new object[] { 4, "CPU" });
    return table;
}

private static void PrintColumns(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write(reader[i] + " ");
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
CreateDataReader 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.DetermineSchemaSerializationMode 方法

DataSet
.
.
::
.
DetermineSchemaSerializationMode 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

确定 DataSet 的 SchemaSerializationMode。

名称 说明
页首

在对类型化 DataSet 进行反序列化时可以调用此方法来确定它的 SchemaSerializationMode。

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.DetermineSchemaSerializationMode 方法 (XmlReader)

DataSet
.
.
::
.
DetermineSchemaSerializationMode 方法 (XmlReader)
DataSet 类

确定 DataSet 的 SchemaSerializationMode。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Function DetermineSchemaSerializationMode ( _
    reader As XmlReader _
) As SchemaSerializationMode
protected SchemaSerializationMode DetermineSchemaSerializationMode(
    XmlReader reader
)
protected:
SchemaSerializationMode DetermineSchemaSerializationMode(
    XmlReader^ reader
)
member DetermineSchemaSerializationMode :
        reader:XmlReader -> SchemaSerializationMode

参数

reader
类型： System.Xml XmlReader
在对 DataSet 进行反序列化期间传递的 XmlReader 实例。

返回值

类型： System.Data SchemaSerializationMode
一个 SchemaSerializationMode 枚举，指示是否已从负载中忽略架构信息。

在对类型化 DataSet 进行反序列化时可以调用此方法来确定它的 SchemaSerializationMode。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
DetermineSchemaSerializationMode 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.DetermineSchemaSerializationMode 方法 (SerializationInfo, StreamingContext)

DataSet
.
.
::
.
DetermineSchemaSerializationMode 方法 (SerializationInfo, StreamingContext)
DataSet 类

确定 DataSet 的 SchemaSerializationMode。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Function DetermineSchemaSerializationMode ( _
    info As SerializationInfo, _
    context As StreamingContext _
) As SchemaSerializationMode
protected SchemaSerializationMode DetermineSchemaSerializationMode(
    SerializationInfo info,
    StreamingContext context
)
protected:
SchemaSerializationMode DetermineSchemaSerializationMode(
    SerializationInfo^ info,
    StreamingContext context
)
member DetermineSchemaSerializationMode :
        info:SerializationInfo *
        context:StreamingContext -> SchemaSerializationMode

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，在远程处理方案中进行反序列化期间将使用它调用 DataSet 的受保护构造函数 DataSet。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，在远程处理方案中进行反序列化期间将使用它调用 DataSet 的受保护构造函数 DataSet。

返回值

类型： System.Data SchemaSerializationMode
一个 SchemaSerializationMode 枚举，指示是否已从负载中忽略架构信息。

在对类型化 DataSet 进行反序列化时可以调用此方法来确定它的 SchemaSerializationMode。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
DetermineSchemaSerializationMode 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Dispose 方法

DataSet
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

释放由 MarshalByValueComponent 占用的资源。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.EndInit 方法

DataSet
.
.
::
.
EndInit 方法
DataSet 类

结束在窗体上使用或由另一个组件使用的 DataSet 的初始化。初始化发生在运行时。 结束在窗体上使用或由另一个组件使用的 DataSet 的初始化。初始化发生在运行时。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub EndInit
public void EndInit()
public:
virtual void EndInit() sealed
abstract EndInit : unit -> unit
override EndInit : unit -> unit

实现

Visual Studio .NET 设计环境使用该方法来结束在窗体上使用或由另一个组件使用的组件的初始化。BeginInit 方法开始此初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来结束在窗体上使用或由另一个组件使用的组件的初始化。BeginInit 方法开始此初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来结束在窗体上使用或由另一个组件使用的组件的初始化。BeginInit 方法开始此初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.GetChanges 方法

DataSet
.
.
::
.
GetChanges 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

获取 DataSet 的副本，该副本包含自上次加载以来或自调用 AcceptChanges 以来对该数据集进行的所有更改。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.GetChanges 方法

DataSet
.
.
::
.
GetChanges 方法
DataSet 类

获取 DataSet 的副本，该副本包含自加载以来或自上次调用 AcceptChanges 以来对该数据集进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetChanges As DataSet
public DataSet GetChanges()
public:
DataSet^ GetChanges()
member GetChanges : unit -> DataSet

返回值

类型： System.Data DataSet
此 DataSet 中更改的副本，可以对该副本执行操作，然后可以使用 Merge 将其合并回去。如果未找到更改的行，则该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 此 DataSet 中更改的副本，可以对该副本执行操作，然后可以使用 Merge 将其合并回去。如果未找到更改的行，则该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

创建一个新的 DataSet，其中包含原始 DataSet 中具有挂起更改的所有行的副本。如果未更改的行包含与更改的行中的外键对应的主键，则关系约束可能导致其他未更改的行也被添加到新的 DataSet 中。如果原始 DataSet 中没有具有挂起更改的行，则该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 创建一个新的 DataSet，其中包含原始 DataSet 中具有挂起更改的所有行的副本。如果未更改的行包含与更改的行中的外键对应的主键，则关系约束可能导致其他未更改的行也被添加到新的 DataSet 中。如果原始 DataSet 中没有具有挂起更改的行，则该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 创建一个新的 DataSet，其中包含原始 DataSet 中具有挂起更改的所有行的副本。如果未更改的行包含与更改的行中的外键对应的主键，则关系约束可能导致其他未更改的行也被添加到新的 DataSet 中。如果原始 DataSet 中没有具有挂起更改的行，则该方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。

Private Sub DemonstrateMerge()
    ' Create a DataSet with one table, two columns,
    ' and three rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")
    Dim idColumn As New DataColumn("id", _
        Type.GetType("System.Int32"), "")
    idColumn.AutoIncrement = True
    Dim itemColumn As New DataColumn("Item", _
        Type.GetType("System.Int32"), "")

    ' Create DataColumn array to set primary key.
    Dim keyColumn(1) As DataColumn
    Dim row As DataRow

    ' Create variable for temporary DataSet.
    Dim changesDataSet As DataSet

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf Row_Changed
    dataSet.Tables.Add(table)
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)

    ' Set primary key column.
    keyColumn(0) = idColumn
    table.PrimaryKey = keyColumn

    ' Add ten rows.
    Dim i As Integer
    For i = 0 To 9
        row = table.NewRow()
        row("Item") = i
        table.Rows.Add(row)
    Next i

    ' Accept changes.
    dataSet.AcceptChanges()
    PrintValues(dataSet, "Original values")

    ' Change row values.
    table.Rows(0)("Item") = 50
    table.Rows(1)("Item") = 111

    ' Add one row.
    row = table.NewRow()
    row("Item") = 74
    table.Rows.Add(row)

    ' Insert code for error checking. Set one row in error.
    table.Rows(1).RowError = "over 100"
    PrintValues(dataSet, "Modified and New Values")

    ' If the table has changes or errors, create a subset DataSet.
    If dataSet.HasChanges(DataRowState.Modified Or DataRowState.Added) _
        And dataSet.HasErrors Then
        ' Use GetChanges to extract subset.
        changesDataSet = dataSet.GetChanges( _
            DataRowState.Modified Or DataRowState.Added)
        PrintValues(changesDataSet, "Subset values")

        ' Insert code to reconcile errors. In this case, reject changes.
        Dim changesTable As DataTable
        For Each changesTable In  changesDataSet.Tables
            If changesTable.HasErrors Then
                Dim changesRow As DataRow
                For Each changesRow In  changesTable.Rows
                    'Console.WriteLine(changesRow["Item"]);
                    If CInt(changesRow("Item", _
                        DataRowVersion.Current)) > 100 Then
                        changesRow.RejectChanges()
                        changesRow.ClearErrors()
                    End If
                Next changesRow
            End If
        Next changesTable

        ' Add a column to the changesDataSet.
        changesDataSet.Tables("Items").Columns.Add( _
            New DataColumn("newColumn"))
        PrintValues(changesDataSet, "Reconciled subset values")

        ' Merge changes back to first DataSet.
        dataSet.Merge(changesDataSet, False, _
            System.Data.MissingSchemaAction.Add)
    End If
    PrintValues(dataSet, "Merged Values")
End Sub

 Private Sub Row_Changed(sender As Object, e As DataRowChangeEventArgs)
     Console.WriteLine("Row Changed " + e.Action.ToString() _
        + ControlChars.Tab + e.Row.ItemArray(0).ToString())
 End Sub

Private Sub PrintValues(dataSet As DataSet, label As String)
     Console.WriteLine(label + ControlChars.Cr)
     Dim table As DataTable
     For Each table In  dataSet.Tables
         Console.WriteLine("TableName: " + table.TableName)
         Dim row As DataRow
         For Each row In  table.Rows
             Dim column As DataColumn
             For Each column In  table.Columns
                 Console.Write(ControlChars.Tab & " " _
                    & row(column).ToString())
             Next column
             Console.WriteLine()
         Next row
     Next table
End Sub

private void DemonstrateMerge()
{
    // Create a DataSet with one table, two columns,
    // and three rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"),"");
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("Item",
        Type.GetType("System.Int32"),"");

    // DataColumn array to set primary key.
    DataColumn[] keyColumn= new DataColumn[1];
    DataRow row;

    // Create variable for temporary DataSet.
    DataSet changesDataSet;

    // Add RowChanged event handler for the table.
    table.RowChanged+=new DataRowChangeEventHandler(
        Row_Changed);
    dataSet.Tables.Add(table);
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // Set primary key column.
    keyColumn[0]= idColumn;
    table.PrimaryKey=keyColumn;
    // Add ten rows.
    for(int i = 0; i <10;i++)
    {
        row=table.NewRow();
        row["Item"]= i;
        table.Rows.Add(row);
    }
    // Accept changes.
    dataSet.AcceptChanges();
    PrintValues(dataSet, "Original values");

    // Change row values.
    table.Rows[0]["Item"]= 50;
    table.Rows[1]["Item"]= 111;

    // Add one row.
    row=table.NewRow();
    row["Item"]=74;
    table.Rows.Add(row);

    // Insert code for error checking. Set one row in error.
    table.Rows[1].RowError= "over 100";
    PrintValues(dataSet, "Modified and New Values");

    // If the table has changes or errors,
    // create a subset DataSet.
    if(dataSet.HasChanges(DataRowState.Modified |
        DataRowState.Added)&& dataSet.HasErrors)
    {
        // Use GetChanges to extract subset.
        changesDataSet = dataSet.GetChanges(
            DataRowState.Modified|DataRowState.Added);
        PrintValues(changesDataSet, "Subset values");

        // Insert code to reconcile errors. In this case, reject changes.
        foreach(DataTable changesTable in changesDataSet.Tables)
        {
            if (changesTable.HasErrors)
            {
                foreach(DataRow changesRow in changesTable.Rows)
                {
                    //Console.WriteLine(changesRow["Item"]);
                    if((int)changesRow["Item",DataRowVersion.Current ]> 100)
                    {
                        changesRow.RejectChanges();
                        changesRow.ClearErrors();
                    }
                }
            }
        }
        // Add a column to the changesDataSet.
        changesDataSet.Tables["Items"].Columns.Add(
            new DataColumn("newColumn"));
        PrintValues(changesDataSet, "Reconciled subset values");
        // Merge changes back to first DataSet.
        dataSet.Merge(changesDataSet, false,
            System.Data.MissingSchemaAction.Add);
    }
    PrintValues(dataSet, "Merged Values");
}

private void Row_Changed(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString()
        + "\table" + e.Row.ItemArray[0]);
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine(label + "\n");
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
GetChanges 重载
System.Data 命名空间
HasChanges

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.GetChanges 方法 (DataRowState)

DataSet
.
.
::
.
GetChanges 方法 (DataRowState)
DataSet 类

获取由 DataRowState 筛选的 DataSet 的副本，该副本包含上次加载以来或调用 AcceptChanges 以来对该数据集进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetChanges ( _
    rowStates As DataRowState _
) As DataSet
public DataSet GetChanges(
    DataRowState rowStates
)
public:
DataSet^ GetChanges(
    DataRowState rowStates
)
member GetChanges :
        rowStates:DataRowState -> DataSet

参数

rowStates
类型： System.Data DataRowState
DataRowState 值之一。

返回值

类型： System.Data DataSet
此 DataSet 的筛选副本，可以对该副本执行操作，然后使用 Merge 将其合并回数据集。如果未找到所需 DataRowState 的行，则该方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 此 DataSet 的筛选副本，可以对该副本执行操作，然后使用 Merge 将其合并回数据集。如果未找到所需 DataRowState 的行，则该方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

GetChanges 方法用于生成另一个 DataSet 对象，该对象只包含对初始对象进行的更改。使用 rowStates 参数指定新对象应该包括的更改的类型。 GetChanges 方法用于生成另一个 DataSet 对象，该对象只包含对初始对象进行的更改。使用 rowStates 参数指定新对象应该包括的更改的类型。

此返回副本用于合并回初始 DataSet。关系约束可能会使标记为 Unchanged 的父行也包括在其中。如果未找到所需 DataRowState 的行，则 GetChanges 方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 此返回副本用于合并回初始 DataSet。关系约束可能会使标记为 Unchanged 的父行也包括在其中。如果未找到所需 DataRowState 的行，则 GetChanges 方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 此返回副本用于合并回初始 DataSet。关系约束可能会使标记为 Unchanged 的父行也包括在其中。如果未找到所需 DataRowState 的行，则 GetChanges 方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下面的示例使用 GetChanges 方法创建另一个 DataSet 对象，该对象之后用于更新数据源。

Private Sub UpdateDataSet(ByVal dataSet As DataSet)
   ' Check for changes with the HasChanges method first.
   If Not dataSet.HasChanges(DataRowState.Modified) Then
       Exit Sub
   End If

   ' Create temporary DataSet variable and
   ' GetChanges for modified rows only.
   Dim tempDataSet As DataSet = _
       dataSet.GetChanges(DataRowState.Modified)

   ' Check the DataSet for errors.
   If tempDataSet.HasErrors Then
      ' Insert code to resolve errors.
   End If

   ' After fixing errors, update the data source with
   ' the DataAdapter used to create the DataSet.
   adapter.Update(tempDataSet)
End Sub

private void UpdateDataSet(DataSet dataSet)
{
    // Check for changes with the HasChanges method first.
    if(!dataSet.HasChanges(DataRowState.Modified)) return;

    // Create temporary DataSet variable and
    // GetChanges for modified rows only.
    DataSet tempDataSet =
        dataSet.GetChanges(DataRowState.Modified);

    // Check the DataSet for errors.
    if(tempDataSet.HasErrors)
    {
        // Insert code to resolve errors.
    }
    // After fixing errors, update the data source with
    // the DataAdapter used to create the DataSet.
    adapter.Update(tempDataSet);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
GetChanges 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.GetDataSetSchema 方法

DataSet
.
.
::
.
GetDataSetSchema 方法
DataSet 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

获取数据集的 XmlSchemaSet 的副本。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GetDataSetSchema ( _
    schemaSet As XmlSchemaSet _
) As XmlSchemaComplexType
public static XmlSchemaComplexType GetDataSetSchema(
    XmlSchemaSet schemaSet
)
public:
static XmlSchemaComplexType^ GetDataSetSchema(
    XmlSchemaSet^ schemaSet
)
static member GetDataSetSchema :
        schemaSet:XmlSchemaSet -> XmlSchemaComplexType

参数

schemaSet
类型： System.Xml.Schema XmlSchemaSet
指定的架构集。

返回值

类型： System.Xml.Schema XmlSchemaComplexType
XmlSchemaSet 的副本。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.GetObjectData 方法

DataSet
.
.
::
.
GetObjectData 方法
DataSet 类

用序列化 DataSet 所需的数据填充序列化信息对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags := SecurityPermissionFlag.SerializationFormatter)> _
Public Overridable Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public virtual void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
[SecurityPermissionAttribute(SecurityAction::LinkDemand, Flags = SecurityPermissionFlag::SerializationFormatter)]
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
)
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)>]
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)>]
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
一个 SerializationInfo，它保留与 DataSet 相关联的序列化数据。
context
类型： System.Runtime.Serialization StreamingContext
一个 StreamingContext，它包含与 DataSet 关联的序列化流的源和目标。

实现

异常 | 条件
ArgumentNullException | info 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.GetSchemaSerializable 方法

DataSet
.
.
::
.
GetSchemaSerializable 方法
DataSet 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

返回一个可序列化的 XMLSchema 实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function GetSchemaSerializable As XmlSchema
protected virtual XmlSchema GetSchemaSerializable()
protected:
virtual XmlSchema^ GetSchemaSerializable()
abstract GetSchemaSerializable : unit -> XmlSchema
override GetSchemaSerializable : unit -> XmlSchema

返回值

类型： System.Xml.Schema XmlSchema
XMLSchema 实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.GetSerializationData 方法

DataSet
.
.
::
.
GetSerializationData 方法
DataSet 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

从二进制或 XML 流反序列化表数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub GetSerializationData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected void GetSerializationData(
    SerializationInfo info,
    StreamingContext context
)
protected:
void GetSerializationData(
    SerializationInfo^ info,
    StreamingContext context
)
member GetSerializationData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo 实例。
context
类型： System.Runtime.Serialization StreamingContext
流上下文。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.GetXml 方法

DataSet
.
.
::
.
GetXml 方法
DataSet 类

返回存储在 DataSet 中的数据的 XML 表示形式。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetXml As String
public string GetXml()
public:
String^ GetXml()
member GetXml : unit -> string

返回值

类型： System String
表示存储在 DataSet 中的数据的字符串。

调用此方法与调用 WriteXml 并将 XmlWriteMode 设置为 IgnoreSchema 相同。

GetXml 以字符串的形式返回 XML，因此，与将 XML 写入文件的 WriteXml 相比，它需要更多的系统开销。

如果使用架构推理生成 DataSet 并使用 XML 或 Web 服务对它进行序列化，则列的排序方式可能会改变。

下面的示例创建 DataSet 和 DataTable，添加示例数据，然后显示 XML 格式的数据。

Private Shared Sub DemonstrateGetXml()
    ' Create a DataSet with one table
    ' containing two columns and 10 rows.
    Dim dataSet As DataSet = New DataSet("dataSet")
    Dim table As DataTable = dataSet.Tables.Add("Items")
    table.Columns.Add("id", Type.GetType("System.Int32"))
    table.Columns.Add("Item", Type.GetType("System.String"))

    ' Add ten rows.
    Dim row As DataRow
    Dim i As Integer
    For i = 0 To 9
        row = table.NewRow()
        row("id") = i
        row("Item")= "Item" & i
        table.Rows.Add(row)
    Next

    ' Display the DataSet contents as XML.
    Console.WriteLine( dataSet.GetXml() )
End Sub

private static void DemonstrateGetXml()
{
    // Create a DataSet with one table containing
    // two columns and 10 rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = dataSet.Tables.Add("Items");
    table.Columns.Add("id", typeof(int));
    table.Columns.Add("Item", typeof(string));

    // Add ten rows.
    DataRow row;
    for(int i = 0; i <10;i++)
    {
        row = table.NewRow();
        row["id"]= i;
        row["Item"]= "Item" + i;
        table.Rows.Add(row);
    }

    // Display the DataSet contents as XML.
    Console.WriteLine( dataSet.GetXml() );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.GetXmlSchema 方法

DataSet
.
.
::
.
GetXmlSchema 方法
DataSet 类

返回存储在 DataSet 中的数据的 XML 表示形式的 XML 架构。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetXmlSchema As String
public string GetXmlSchema()
public:
String^ GetXmlSchema()
member GetXmlSchema : unit -> string

返回值

类型： System String
字符串，它是存储在 DataSet 中的数据的 XML 表示形式的 XML 架构。

除了只写主要架构以外，调用此方法与调用 WriteXmlSchema 相同。

GetXmlSchema 以字符串的形式返回 XML，因此，与将 XML 写入文件的 WriteXmlSchema 相比，它需要更多的系统开销。

如果使用架构推理生成 DataSet 并使用 XML 或 Web 服务对它进行序列化，则列的排序方式可能会改变。

下面的示例创建 DataSet 和 DataTable，然后显示 XML 格式的架构。

Private Shared Sub DemonstrateGetXml()
    ' Create a DataSet with one table
    ' containing two columns and 10 rows.
    Dim dataSet As DataSet = New DataSet("dataSet")
    Dim table As DataTable = dataSet.Tables.Add("Items")
    table.Columns.Add("id", Type.GetType("System.Int32"))
    table.Columns.Add("Item", Type.GetType("System.String"))

    ' Add ten rows.
    Dim row As DataRow
    Dim i As Integer
    For i = 0 To 9
        row = table.NewRow()
        row("id") = i
        row("Item")= "Item" & i
        table.Rows.Add(row)
    Next

    ' Display the DataSet contents as XML.
    Console.WriteLine( dataSet.GetXml() )
End Sub

private static void DemonstrateGetXml()
{
    // Create a DataSet with one table containing
    // two columns and 10 rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = dataSet.Tables.Add("Items");
    table.Columns.Add("id", typeof(int));
    table.Columns.Add("Item", typeof(string));

    // Add ten rows.
    DataRow row;
    for(int i = 0; i <10;i++)
    {
        row = table.NewRow();
        row["id"]= i;
        row["Item"]= "Item" + i;
        table.Rows.Add(row);
    }

    // Display the DataSet contents as XML.
    Console.WriteLine( dataSet.GetXml() );
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.HasChanges 方法

DataSet
.
.
::
.
HasChanges 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

获取一个值，该值指示 DataSet 是否有更改，包括新增行、已删除的行或已修改的行。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.HasChanges 方法

DataSet
.
.
::
.
HasChanges 方法
DataSet 类

获取一个值，该值指示 DataSet 是否有更改，包括新增行、已删除的行或已修改的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function HasChanges As Boolean
public bool HasChanges()
public:
bool HasChanges()
member HasChanges : unit -> bool

返回值

类型： System Boolean
如果 DataSet 有更改，则为 true；否则为 false。

下面的示例使用 GetChanges 方法创建另一个 DataSet 对象，该对象之后用于更新数据源。

Private Sub UpdateDataSet(ByVal dataSet As DataSet)
    ' Check for changes with the HasChanges method first.
    If Not dataSet.HasChanges() Then
        Exit Sub
    End If

    ' Create temporary DataSet variable.
    ' GetChanges for modified rows only.
    Dim tempDataSet As DataSet = _
        dataSet.GetChanges(DataRowState.Modified)

    ' Check the DataSet for errors.
    If tempDataSet.HasErrors Then
       ' Insert code to resolve errors.
    End If

    ' After fixing errors, update the data source with
    ' the DataAdapter used to create the DataSet.
    myOleDbDataAdapter.Update(tempDataSet)
End Sub

private void UpdateDataSet(DataSet dataSet)
{
    // Check for changes with the HasChanges method first.
    if(!dataSet.HasChanges()) return;

    // Create temporary DataSet variable.
    DataSet tempDataSet;

    // GetChanges for modified rows only.
    tempDataSet = dataSet.GetChanges(DataRowState.Modified);

    // Check the DataSet for errors.
    if(tempDataSet.HasErrors)
    {
        // Insert code to resolve errors.
    }
    // After fixing errors, update the data source with
    // the DataAdapter used to create the DataSet.
    myOleDbDataAdapter.Update(tempDataSet);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
HasChanges 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.HasChanges 方法 (DataRowState)

DataSet
.
.
::
.
HasChanges 方法 (DataRowState)
DataSet 类

获取一个值，该值指示 DataSet 是否有 DataRowState 被筛选的更改，包括新增行、已删除的行或已修改的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function HasChanges ( _
    rowStates As DataRowState _
) As Boolean
public bool HasChanges(
    DataRowState rowStates
)
public:
bool HasChanges(
    DataRowState rowStates
)
member HasChanges :
        rowStates:DataRowState -> bool

参数

rowStates
类型： System.Data DataRowState
DataRowState 值之一。

返回值

类型： System Boolean
如果 DataSet 有更改，则为 true；否则为 false。

在调用 GetChanges 方法之前，检查 DataSet 的 HasChanges 属性。

下面的示例使用 GetChanges 方法创建另一个 DataSet 对象，该对象之后用于更新数据源。

Private Sub UpdateDataSet(ByVal dataSet As DataSet)
   ' Check for changes with the HasChanges method first.
   If Not dataSet.HasChanges(DataRowState.Modified) Then
       Exit Sub
   End If

   ' Create temporary DataSet variable and
   ' GetChanges for modified rows only.
   Dim tempDataSet As DataSet = _
       dataSet.GetChanges(DataRowState.Modified)

   ' Check the DataSet for errors.
   If tempDataSet.HasErrors Then
      ' Insert code to resolve errors.
   End If

   ' After fixing errors, update the data source with
   ' the DataAdapter used to create the DataSet.
   adapter.Update(tempDataSet)
End Sub

private void UpdateDataSet(DataSet dataSet)
{
    // Check for changes with the HasChanges method first.
    if(!dataSet.HasChanges(DataRowState.Modified)) return;

    // Create temporary DataSet variable and
    // GetChanges for modified rows only.
    DataSet tempDataSet =
        dataSet.GetChanges(DataRowState.Modified);

    // Check the DataSet for errors.
    if(tempDataSet.HasErrors)
    {
        // Insert code to resolve errors.
    }
    // After fixing errors, update the data source with
    // the DataAdapter used to create the DataSet.
    adapter.Update(tempDataSet);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
HasChanges 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.IListSource ..::.GetList 方法

DataSet
.
.
::
.
IListSource
.
.
::
.
GetList 方法
DataSet 类

有关此成员的说明，请参见 IListSource..::.GetList。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetList As IList
    Implements IListSource.GetList
IList IListSource.GetList()
private:
virtual IList^ GetList() sealed = IListSource::GetList
private abstract GetList : unit -> IList
private override GetList : unit -> IList

返回值

类型： System.Collections IList
有关此成员的说明，请参见 IListSource..::.GetList。

实现

此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IListSource 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.InferXmlSchema 方法

DataSet
.
.
::
.
InferXmlSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

将 XML 架构应用于 DataSet。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.InferXmlSchema 方法 (Stream, array<String >[]()[])

DataSet
.
.
::
.
InferXmlSchema 方法 (Stream,
array<
String
>
[]
()
[]
)
DataSet 类

将指定 Stream 中的 XML 架构应用于 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub InferXmlSchema ( _
    stream As Stream, _
    nsArray As String() _
)
public void InferXmlSchema(
    Stream stream,
    string[] nsArray
)
public:
void InferXmlSchema(
    Stream^ stream,
    array<String^>^ nsArray
)
member InferXmlSchema :
        stream:Stream *
        nsArray:string[] -> unit

参数

stream
类型： System.IO Stream
将从其中读取该架构的 Stream。
nsArray
类型：
array<
System String
>
[]
()
[]

要从架构推理中排除的命名空间统一资源标识符 (URI) 字符串的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
InferXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.InferXmlSchema 方法 (String, array<String >[]()[])

DataSet
.
.
::
.
InferXmlSchema 方法 (String,
array<
String
>
[]
()
[]
)
DataSet 类

将指定文件中的 XML 架构应用于 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub InferXmlSchema ( _
    fileName As String, _
    nsArray As String() _
)
public void InferXmlSchema(
    string fileName,
    string[] nsArray
)
public:
void InferXmlSchema(
    String^ fileName,
    array<String^>^ nsArray
)
member InferXmlSchema :
        fileName:string *
        nsArray:string[] -> unit

参数

fileName
类型： System String
从中读取架构的文件的名称（包括路径）。
nsArray
类型：
array<
System String
>
[]
()
[]

要从架构推理中排除的命名空间统一资源标识符 (URI) 字符串的数组。
异常 | 条件
SecurityException | FileIOPermission 未设置为 Read。
  • FileIOPermission

    用于读取和写入文件。关联的枚举：FileIOPermissionAccess。 用于读取和写入文件。关联的枚举：FileIOPermissionAccess。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
InferXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.InferXmlSchema 方法 (TextReader, array<String >[]()[])

DataSet
.
.
::
.
InferXmlSchema 方法 (TextReader,
array<
String
>
[]
()
[]
)
DataSet 类

将指定 TextReader 中的 XML 架构应用于 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub InferXmlSchema ( _
    reader As TextReader, _
    nsArray As String() _
)
public void InferXmlSchema(
    TextReader reader,
    string[] nsArray
)
public:
void InferXmlSchema(
    TextReader^ reader,
    array<String^>^ nsArray
)
member InferXmlSchema :
        reader:TextReader *
        nsArray:string[] -> unit

参数

reader
类型： System.IO TextReader
将从其中读取该架构的 TextReader。
nsArray
类型：
array<
System String
>
[]
()
[]

要从架构推理中排除的命名空间统一资源标识符 (URI) 字符串的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
InferXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.InferXmlSchema 方法 (XmlReader, array<String >[]()[])

DataSet
.
.
::
.
InferXmlSchema 方法 (XmlReader,
array<
String
>
[]
()
[]
)
DataSet 类

将指定 XmlReader 中的 XML 架构应用于 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub InferXmlSchema ( _
    reader As XmlReader, _
    nsArray As String() _
)
public void InferXmlSchema(
    XmlReader reader,
    string[] nsArray
)
public:
void InferXmlSchema(
    XmlReader^ reader,
    array<String^>^ nsArray
)
member InferXmlSchema :
        reader:XmlReader *
        nsArray:string[] -> unit

参数

reader
类型： System.Xml XmlReader
将从其中读取该架构的 XMLReader。
nsArray
类型：
array<
System String
>
[]
()
[]

要从架构推理中排除的命名空间统一资源标识符 (URI) 字符串的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
InferXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.InitializeDerivedDataSet 方法

DataSet
.
.
::
.
InitializeDerivedDataSet 方法
DataSet 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

从二进制或 XML 流反序列化数据集的所有表数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub InitializeDerivedDataSet
protected virtual void InitializeDerivedDataSet()
protected:
virtual void InitializeDerivedDataSet()
abstract InitializeDerivedDataSet : unit -> unit
override InitializeDerivedDataSet : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.IsBinarySerialized 方法

DataSet
.
.
::
.
IsBinarySerialized 方法
DataSet 类

检查 DataSet 的序列化表示形式的格式。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Function IsBinarySerialized ( _
    info As SerializationInfo, _
    context As StreamingContext _
) As Boolean
protected bool IsBinarySerialized(
    SerializationInfo info,
    StreamingContext context
)
protected:
bool IsBinarySerialized(
    SerializationInfo^ info,
    StreamingContext context
)
member IsBinarySerialized :
        info:SerializationInfo *
        context:StreamingContext -> bool

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext 对象。

返回值

类型： System Boolean
如果指定的 SerializationInfo 表示以二进制格式序列化的 DataSet，则为 true；否则为 false。

该成员支持 .NET Framework 结构，不应从代码直接使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.IXmlSerializable ..::.GetSchema 方法

DataSet
.
.
::
.
IXmlSerializable
.
.
::
.
GetSchema 方法
DataSet 类

有关此成员的说明，请参见 IXmlSerializable..::.GetSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetSchema As XmlSchema
    Implements IXmlSerializable.GetSchema
XmlSchema IXmlSerializable.GetSchema()
private:
virtual XmlSchema^ GetSchema() sealed = IXmlSerializable::GetSchema
private abstract GetSchema : unit -> XmlSchema
private override GetSchema : unit -> XmlSchema

返回值

类型： System.Xml.Schema XmlSchema
有关此成员的说明，请参见 IXmlSerializable..::.GetSchema。

实现

此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。 此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.IXmlSerializable ..::.ReadXml 方法

DataSet
.
.
::
.
IXmlSerializable
.
.
::
.
ReadXml 方法
DataSet 类

有关此成员的说明，请参见 IXmlSerializable..::.ReadXml。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub ReadXml ( _
    reader As XmlReader _
) Implements IXmlSerializable.ReadXml
void IXmlSerializable.ReadXml(
    XmlReader reader
)
private:
virtual void ReadXml(
    XmlReader^ reader
) sealed = IXmlSerializable::ReadXml
private abstract ReadXml :
        reader:XmlReader -> unit
private override ReadXml :
        reader:XmlReader -> unit

参数

reader
类型： System.Xml XmlReader
一个 XmlReader。

实现

此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。 此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.IXmlSerializable ..::.WriteXml 方法

DataSet
.
.
::
.
IXmlSerializable
.
.
::
.
WriteXml 方法
DataSet 类

有关此成员的说明，请参见 IXmlSerializable..::.WriteXml。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub WriteXml ( _
    writer As XmlWriter _
) Implements IXmlSerializable.WriteXml
void IXmlSerializable.WriteXml(
    XmlWriter writer
)
private:
virtual void WriteXml(
    XmlWriter^ writer
) sealed = IXmlSerializable::WriteXml
private abstract WriteXml :
        writer:XmlWriter -> unit
private override WriteXml :
        writer:XmlWriter -> unit

参数

writer
类型： System.Xml XmlWriter
一个 XmlWriter。

实现

此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。 此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.Load 方法

DataSet
.
.
::
.
Load 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

通过所提供的 IDataReader，用某个数据源的值填充 DataSet。

名称 说明
页首

Load 方法提供了一种使用从 IDataReader 实例中检索的数据来填充单个 DataTable 的技术。此方法提供相同的功能，但是允许您将多个结果集从 IDataReader 加载到 DataSet 中的多个表中。 Load 方法提供了一种使用从 IDataReader 实例中检索的数据来填充单个 DataTable 的技术。此方法提供相同的功能，但是允许您将多个结果集从 IDataReader 加载到 DataSet 中的多个表中。

如果 DataSet 已经包含行，则从数据源传入的数据将与现有的行合并。

在几种常见方案中可以使用 Load 方法，这些方案都围绕着从指定的数据源获取数据并将其添加到当前的数据容器（在本例中为 DataSet）。这些方案描述了 DataSet 的标准用法，介绍了它的更新和合并行为。 在几种常见方案中可以使用 Load 方法，这些方案都围绕着从指定的数据源获取数据并将其添加到当前的数据容器（在本例中为 DataSet）。这些方案描述了 DataSet 的标准用法，介绍了它的更新和合并行为。

DataSet与单个主数据源同步，或使用单个主数据源进行更新。DataSet 跟踪更改，以实现与主数据源的同步。此外，DataSet 可以接受来自一个或多个辅助数据源的增量数据。DataSet 不负责跟踪更改以实现与辅助数据源的同步。 DataSet与单个主数据源同步，或使用单个主数据源进行更新。DataSet 跟踪更改，以实现与主数据源的同步。此外，DataSet 可以接受来自一个或多个辅助数据源的增量数据。DataSet 不负责跟踪更改以实现与辅助数据源的同步。 DataSet与单个主数据源同步，或使用单个主数据源进行更新。DataSet 跟踪更改，以实现与主数据源的同步。此外，DataSet 可以接受来自一个或多个辅助数据源的增量数据。DataSet 不负责跟踪更改以实现与辅助数据源的同步。 DataSet与单个主数据源同步，或使用单个主数据源进行更新。DataSet 跟踪更改，以实现与主数据源的同步。此外，DataSet 可以接受来自一个或多个辅助数据源的增量数据。DataSet 不负责跟踪更改以实现与辅助数据源的同步。

在给定这两个假想的数据源的情况下，用户很可能要求下列行为之一：

  • 初始化主数据源中的 DataSet。在此方案中，用户希望使用主数据源中的值初始化空 DataSet。修改一个或多个 DataTable 的内容。此后，用户希望将更改传播回主数据源。 初始化主数据源中的 DataSet。在此方案中，用户希望使用主数据源中的值初始化空 DataSet。修改一个或多个 DataTable 的内容。此后，用户希望将更改传播回主数据源。 初始化主数据源中的 DataSet。在此方案中，用户希望使用主数据源中的值初始化空 DataSet。修改一个或多个 DataTable 的内容。此后，用户希望将更改传播回主数据源。 初始化主数据源中的 DataSet。在此方案中，用户希望使用主数据源中的值初始化空 DataSet。修改一个或多个 DataTable 的内容。此后，用户希望将更改传播回主数据源。

  • 保留更改并从主数据源重新同步。在此方案中，用户希望接受在上一个方案中填充的 DataSet，并执行与主数据源的增量同步，以保留在 DataSet 中所做的修改。 保留更改并从主数据源重新同步。在此方案中，用户希望接受在上一个方案中填充的 DataSet，并执行与主数据源的增量同步，以保留在 DataSet 中所做的修改。

  • 来自辅助数据源的增量数据流。在该方案中，用户希望合并来自一个或多个辅助数据源的更改，并将这些更改传播回主数据源。 来自辅助数据源的增量数据流。在该方案中，用户希望合并来自一个或多个辅助数据源的更改，并将这些更改传播回主数据源。

Load 方法使所有这些方案成为可能。该方法使您能够指定加载选项参数，表明 DataTable 中的现有行如何与正在加载的行组合。下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。 Load 方法使所有这些方案成为可能。该方法使您能够指定加载选项参数，表明 DataTable 中的现有行如何与正在加载的行组合。下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。 Load 方法使所有这些方案成为可能。该方法使您能够指定加载选项参数，表明 DataTable 中的现有行如何与正在加载的行组合。下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。 Load 方法使所有这些方案成为可能。该方法使您能够指定加载选项参数，表明 DataTable 中的现有行如何与正在加载的行组合。下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。

加载选项 | 说明
PreserveChanges（默认值） | 使用传入行的值更新行的原始版本。
OverwriteChanges | 使用传入行的值更新行的当前版本和原始版本。
Upsert | 使用传入行的值更新行的当前版本。

通常，PreserveChanges 和 OverwriteChanges 选项用于这样的方案：用户需要将 DataSet 及其更改与主数据源同步。Upsert 选项可帮助聚合来自一个或多个辅助数据源的更改。 通常，PreserveChanges 和 OverwriteChanges 选项用于这样的方案：用户需要将 DataSet 及其更改与主数据源同步。Upsert 选项可帮助聚合来自一个或多个辅助数据源的更改。

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Load 方法 (IDataReader, LoadOption, array<DataTable >[]()[])

DataSet
.
.
::
.
Load 方法 (IDataReader, LoadOption,
array<
DataTable
>
[]
()
[]
)
DataSet 类

使用提供的 IDataReader 以数据源的值填充 DataSet，同时使用 DataTable 实例的数组提供架构和命名空间信息。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Load ( _
    reader As IDataReader, _
    loadOption As LoadOption, _
    ParamArray tables As DataTable() _
)
public void Load(
    IDataReader reader,
    LoadOption loadOption,
    params DataTable[] tables
)
public:
void Load(
    IDataReader^ reader,
    LoadOption loadOption,
    ... array<DataTable^>^ tables
)
member Load :
        reader:IDataReader *
        loadOption:LoadOption *
        tables:DataTable[] -> unit

参数

reader
类型： System.Data IDataReader
提供一个或多个结果集的 IDataReader。
loadOption
类型： System.Data LoadOption
一个来自 LoadOption 枚举的值，该值指示 DataSet 中的 DataTable 实例内已有的行如何与共享同一主键的传入行进行组合。
tables
类型：
array<
System.Data DataTable
>
[]
()
[]

DataTable 实例数组，Load 方法将从该数组中检索名称和命名空间信息。其中每个表都必须是此 DataSet 所包含的 DataTableCollection 的成员。 DataTable 实例数组，Load 方法将从该数组中检索名称和命名空间信息。其中每个表都必须是此 DataSet 所包含的 DataTableCollection 的成员。

Load 方法提供了一种使用从 IDataReader 实例中检索的数据来填充单个 DataTable 的技术。此方法提供相同的功能，但是允许您将多个结果集从 IDataReader 加载到 DataSet 中的多个表中。 Load 方法提供了一种使用从 IDataReader 实例中检索的数据来填充单个 DataTable 的技术。此方法提供相同的功能，但是允许您将多个结果集从 IDataReader 加载到 DataSet 中的多个表中。

说明 说明

如果传入的 reader 中有任何源数据列为计算列，加载操作将失败并返回 InvalidOperationException。

使用 loadOption 参数，可以指定希望导入的数据如何与现有的数据交互，该参数可以是 LoadOption 枚举中的任何值。有关使用该参数的更多信息，请参见 DataTableLoad 方法的文档。 使用 loadOption 参数，可以指定希望导入的数据如何与现有的数据交互，该参数可以是 LoadOption 枚举中的任何值。有关使用该参数的更多信息，请参见 DataTableLoad 方法的文档。

使用 tables 参数可以指定 DataTable 实例数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load方法用来自源数据读取器的单个结果集中的数据填充所提供的每个 DataTable 实例。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。 使用 tables 参数可以指定 DataTable 实例数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load方法用来自源数据读取器的单个结果集中的数据填充所提供的每个 DataTable 实例。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。 使用 tables 参数可以指定 DataTable 实例数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load方法用来自源数据读取器的单个结果集中的数据填充所提供的每个 DataTable 实例。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。

此方法的名称解析方案与后跟 DbDataAdapter 类的 Fill 方法的方案相同。

下面的示例创建一个新的 DataSet，将两个 DataTable 实例添加到 DataSet 中，然后通过使用 Load 方法从包含两个结果集的 DataTableReader 中检索数据来填充 DataSet。最后，该示例在控制台窗口中显示表的内容。 下面的示例创建一个新的 DataSet，将两个 DataTable 实例添加到 DataSet 中，然后通过使用 Load 方法从包含两个结果集的 DataTableReader 中检索数据来填充 DataSet。最后，该示例在控制台窗口中显示表的内容。

Sub Main()
    Dim dataSet As New DataSet

    Dim customerTable As New DataTable
    Dim productTable As New DataTable

    ' This information is cosmetic, only.
    customerTable.TableName = "Customers"
    productTable.TableName = "Products"

    ' Add the tables to the DataSet:
    dataSet.Tables.Add(customerTable)
    dataSet.Tables.Add(productTable)

    ' Load the data into the existing DataSet.
    Dim reader As DataTableReader = GetReader()
    dataSet.Load(reader, LoadOption.OverwriteChanges, _
        customerTable, productTable)

    ' Print out the contents of each table:
    For Each table As DataTable In dataSet.Tables
        PrintColumns(table)
    Next

    Console.WriteLine("Press any key to continue.")
    Console.ReadKey()
End Sub

Private Function GetCustomers() As DataTable
    ' Create sample Customers table.
    Dim table As New DataTable
    table.TableName = "Customers"

    ' Create two columns, ID and Name.
    Dim idColumn As DataColumn = table.Columns.Add("ID", _
        GetType(Integer))
    table.Columns.Add("Name", GetType(String))

    ' Set the ID column as the primary key column.
    table.PrimaryKey = New DataColumn() {idColumn}

    table.Rows.Add(New Object() {0, "Mary"})
    table.Rows.Add(New Object() {1, "Andy"})
    table.Rows.Add(New Object() {2, "Peter"})
    table.AcceptChanges()
    Return table
End Function

Private Function GetProducts() As DataTable
    ' Create sample Products table, in order
    ' to demonstrate the behavior of the DataTableReader.
    Dim table As New DataTable
    table.TableName = "Products"

    ' Create two columns, ID and Name.
    Dim idColumn As DataColumn = table.Columns.Add("ID", _
        GetType(Integer))
    table.Columns.Add("Name", GetType(String))

    ' Set the ID column as the primary key column.
    table.PrimaryKey = New DataColumn() {idColumn}

    table.Rows.Add(New Object() {0, "Wireless Network Card"})
    table.Rows.Add(New Object() {1, "Hard Drive"})
    table.Rows.Add(New Object() {2, "Monitor"})
    table.Rows.Add(New Object() {3, "CPU"})
    Return table
End Function

Private Function GetReader() As DataTableReader
    ' Return a DataTableReader containing multiple
    ' result sets, just for the sake of this demo.
    Dim dataSet As New DataSet
    dataSet.Tables.Add(GetCustomers())
    dataSet.Tables.Add(GetProducts())
    Return dataSet.CreateDataReader()
End Function

Private Sub PrintColumns( _
   ByVal table As DataTable)

    Console.WriteLine()
    Console.WriteLine(table.TableName)
    Console.WriteLine("=========================")
    ' Loop through all the rows in the table.
    For Each row As DataRow In table.Rows
        For Each col As DataColumn In table.Columns
            Console.Write(row(col).ToString() & " ")
        Next
        Console.WriteLine()
    Next
End Sub

static void Main()
{
    DataSet dataSet = new DataSet();

    DataTable customerTable = new DataTable();
    DataTable productTable = new DataTable();

    // This information is cosmetic, only.
    customerTable.TableName = "Customers";
    productTable.TableName = "Products";

    // Add the tables to the DataSet:
    dataSet.Tables.Add(customerTable);
    dataSet.Tables.Add(productTable);

    // Load the data into the existing DataSet.
    DataTableReader reader = GetReader();
    dataSet.Load(reader, LoadOption.OverwriteChanges,
        customerTable, productTable);

    // Print out the contents of each table:
    foreach (DataTable table in dataSet.Tables)
    {
        PrintColumns(table);
    }

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();
    table.TableName = "Customers";

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "Mary" });
    table.Rows.Add(new object[] { 1, "Andy" });
    table.Rows.Add(new object[] { 2, "Peter" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetProducts()
{
    // Create sample Products table.
    DataTable table = new DataTable();
    table.TableName = "Products";

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "Wireless Network Card" });
    table.Rows.Add(new object[] { 1, "Hard Drive" });
    table.Rows.Add(new object[] { 2, "Monitor" });
    table.Rows.Add(new object[] { 3, "CPU" });
    table.AcceptChanges();
    return table;
}

private static void PrintColumns(DataTable table)
{
    Console.WriteLine();
    Console.WriteLine(table.TableName);
    Console.WriteLine("=========================");
    // Loop through all the rows in the table:
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTableReader GetReader()
{
    // Return a DataTableReader containing multiple
    // result sets, just for the sake of this demo.
    DataSet dataSet = new DataSet();
    dataSet.Tables.Add(GetCustomers());
    dataSet.Tables.Add(GetProducts());
    return dataSet.CreateDataReader();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Load 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Load 方法 (IDataReader, LoadOption, array<String >[]()[])

DataSet
.
.
::
.
Load 方法 (IDataReader, LoadOption,
array<
String
>
[]
()
[]
)
DataSet 类

使用所提供的 IDataReader，并使用字符串数组为 DataSet 中的表提供名称，从而用来自数据源的值填充 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Load ( _
    reader As IDataReader, _
    loadOption As LoadOption, _
    ParamArray tables As String() _
)
public void Load(
    IDataReader reader,
    LoadOption loadOption,
    params string[] tables
)
public:
void Load(
    IDataReader^ reader,
    LoadOption loadOption,
    ... array<String^>^ tables
)
member Load :
        reader:IDataReader *
        loadOption:LoadOption *
        tables:string[] -> unit

参数

reader
类型： System.Data IDataReader
提供一个或多个结果集的 IDataReader。
loadOption
类型： System.Data LoadOption
来自 LoadOption 枚举的值，它表明 DataSet 内 DataTable 实例中的现有行如何与共享相同主键的传入行组合。
tables
类型：
array<
System String
>
[]
()
[]

字符串数组，Load 方法将从该数组中检索表名称信息。

Load 方法提供了一种使用从 IDataReader 实例中检索的数据来填充单个 DataTable 的技术。此方法提供相同的功能，但是允许您将多个结果集从 IDataReader 加载到 DataSet 中的多个表中。 Load 方法提供了一种使用从 IDataReader 实例中检索的数据来填充单个 DataTable 的技术。此方法提供相同的功能，但是允许您将多个结果集从 IDataReader 加载到 DataSet 中的多个表中。

说明 说明

如果传入的 reader 中有任何源数据列为计算列，加载操作将失败并返回 InvalidOperationException。

使用 loadOption 参数，可以指定希望导入的数据如何与现有的数据交互，该参数可以是 LoadOption 枚举中的任何值。有关使用该参数的更多信息，请参见 Load 方法的文档。 使用 loadOption 参数，可以指定希望导入的数据如何与现有的数据交互，该参数可以是 LoadOption 枚举中的任何值。有关使用该参数的更多信息，请参见 Load 方法的文档。

使用 tables 参数可以指定表名称的数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load 方法尝试在 DataSet 中按顺序查找与表名称数组中的名称匹配的表。如果找到匹配表，则该表将与当前结果集的内容一起加载。如果找不到匹配表，则将使用表名称数组中提供的名称创建一个表，然后根据结果集推断新表的架构。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。 使用 tables 参数可以指定表名称的数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load 方法尝试在 DataSet 中按顺序查找与表名称数组中的名称匹配的表。如果找到匹配表，则该表将与当前结果集的内容一起加载。如果找不到匹配表，则将使用表名称数组中提供的名称创建一个表，然后根据结果集推断新表的架构。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。 使用 tables 参数可以指定表名称的数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load 方法尝试在 DataSet 中按顺序查找与表名称数组中的名称匹配的表。如果找到匹配表，则该表将与当前结果集的内容一起加载。如果找不到匹配表，则将使用表名称数组中提供的名称创建一个表，然后根据结果集推断新表的架构。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。 使用 tables 参数可以指定表名称的数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load 方法尝试在 DataSet 中按顺序查找与表名称数组中的名称匹配的表。如果找到匹配表，则该表将与当前结果集的内容一起加载。如果找不到匹配表，则将使用表名称数组中提供的名称创建一个表，然后根据结果集推断新表的架构。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。 使用 tables 参数可以指定表名称的数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load 方法尝试在 DataSet 中按顺序查找与表名称数组中的名称匹配的表。如果找到匹配表，则该表将与当前结果集的内容一起加载。如果找不到匹配表，则将使用表名称数组中提供的名称创建一个表，然后根据结果集推断新表的架构。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。

与 DataSet 关联的默认命名空间（如果有的话）与每个新创建的 DataTable 关联。此方法的名称解析方案与后跟 DbDataAdapter 类的 Fill 方法的方案相同。 与 DataSet 关联的默认命名空间（如果有的话）与每个新创建的 DataTable 关联。此方法的名称解析方案与后跟 DbDataAdapter 类的 Fill 方法的方案相同。

下面的控制台应用程序示例先创建表，然后使用 Load 方法从读取器向 DataSet 中加载数据。然后示例将表添加到 DataSet 并尝试用 DataTableReader 中的数据填充这些表。在此示例中，因为传递到 Load 方法的参数表明不存在的表名，所以 Load 方法创建一个新表以匹配作为参数传递的名称。数据一旦加载完毕，该示例就会在控制台窗口中显示其所有表的内容。 下面的控制台应用程序示例先创建表，然后使用 Load 方法从读取器向 DataSet 中加载数据。然后示例将表添加到 DataSet 并尝试用 DataTableReader 中的数据填充这些表。在此示例中，因为传递到 Load 方法的参数表明不存在的表名，所以 Load 方法创建一个新表以匹配作为参数传递的名称。数据一旦加载完毕，该示例就会在控制台窗口中显示其所有表的内容。 下面的控制台应用程序示例先创建表，然后使用 Load 方法从读取器向 DataSet 中加载数据。然后示例将表添加到 DataSet 并尝试用 DataTableReader 中的数据填充这些表。在此示例中，因为传递到 Load 方法的参数表明不存在的表名，所以 Load 方法创建一个新表以匹配作为参数传递的名称。数据一旦加载完毕，该示例就会在控制台窗口中显示其所有表的内容。 下面的控制台应用程序示例先创建表，然后使用 Load 方法从读取器向 DataSet 中加载数据。然后示例将表添加到 DataSet 并尝试用 DataTableReader 中的数据填充这些表。在此示例中，因为传递到 Load 方法的参数表明不存在的表名，所以 Load 方法创建一个新表以匹配作为参数传递的名称。数据一旦加载完毕，该示例就会在控制台窗口中显示其所有表的内容。

Sub Main()
  Dim dataSet As New DataSet
  Dim table As DataTable

  Dim reader As DataTableReader = GetReader()

  ' The tables listed as parameters for the Load method
  ' should be in the same order as the tables within the IDataReader.
  dataSet.Load(reader, LoadOption.Upsert, "Customers", "Products")
  For Each table In dataSet.Tables
    PrintColumns(table)
  Next

  ' Now try the example with the DataSet
  ' already filled with data:
  dataSet = New DataSet
  dataSet.Tables.Add(GetCustomers())
  dataSet.Tables.Add(GetProducts())

  ' Retrieve a data reader containing changed data:
  reader = GetReader()

  ' Load the data into the existing DataSet. Retrieve the order of the
  ' the data in the reader from the
  ' list of table names in the parameters. If you specify
  ' a new table name here, the Load method will create
  ' a corresponding new table.
  dataSet.Load(reader, LoadOption.Upsert, "NewCustomers", "Products")
  For Each table In dataSet.Tables
    PrintColumns(table)
  Next

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Function GetCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable
  table.TableName = "Customers"

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "Mary"})
  table.Rows.Add(New Object() {1, "Andy"})
  table.Rows.Add(New Object() {2, "Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetProducts() As DataTable
  ' Create sample Products table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable
  table.TableName = "Products"

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "Wireless Network Card"})
  table.Rows.Add(New Object() {1, "Hard Drive"})
  table.Rows.Add(New Object() {2, "Monitor"})
  table.Rows.Add(New Object() {3, "CPU"})
  Return table
End Function

Private Function GetReader() As DataTableReader
  ' Return a DataTableReader containing multiple
  ' result sets, just for the sake of this demo.
  Dim dataSet As New DataSet
  dataSet.Tables.Add(GetCustomers())
  dataSet.Tables.Add(GetProducts())
  Return dataSet.CreateDataReader()
End Function

Private Sub PrintColumns( _
   ByVal table As DataTable)

  Console.WriteLine()
  Console.WriteLine(table.TableName)
  Console.WriteLine("=========================")
  ' Loop through all the rows in the table.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

static void Main()
{
    DataSet dataSet = new DataSet();

    DataTableReader reader = GetReader();

    // The tables listed as parameters for the Load method
    // should be in the same order as the tables within the IDataReader.
    dataSet.Load(reader, LoadOption.Upsert, "Customers", "Products");
    foreach (DataTable table in dataSet.Tables)
    {
        PrintColumns(table);
    }

    // Now try the example with the DataSet
    // already filled with data:
    dataSet = new DataSet();
    dataSet.Tables.Add(GetCustomers());
    dataSet.Tables.Add(GetProducts());

    // Retrieve a data reader containing changed data:
    reader = GetReader();

    // Load the data into the existing DataSet. Retrieve the order of the
    // the data in the reader from the
    // list of table names in the parameters. If you specify
    // a new table name here, the Load method will create
    // a corresponding new table.
    dataSet.Load(reader, LoadOption.Upsert,
        "NewCustomers", "Products");
    foreach (DataTable table in dataSet.Tables)
    {
        PrintColumns(table);
    }

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();
    table.TableName = "Customers";

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "Mary" });
    table.Rows.Add(new object[] { 1, "Andy" });
    table.Rows.Add(new object[] { 2, "Peter" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetProducts()
{
    // Create sample Products table.
    DataTable table = new DataTable();
    table.TableName = "Products";

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "Wireless Network Card" });
    table.Rows.Add(new object[] { 1, "Hard Drive" });
    table.Rows.Add(new object[] { 2, "Monitor" });
    table.Rows.Add(new object[] { 3, "CPU" });
    table.AcceptChanges();
    return table;
}

private static void PrintColumns(DataTable table)
{
    Console.WriteLine();
    Console.WriteLine(table.TableName);
    Console.WriteLine("=========================");
    // Loop through all the rows in the table:
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTableReader GetReader()
{
    // Return a DataTableReader containing multiple
    // result sets, just for the sake of this demo.
    DataSet dataSet = new DataSet();
    dataSet.Tables.Add(GetCustomers());
    dataSet.Tables.Add(GetProducts());
    return dataSet.CreateDataReader();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Load 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Load 方法 (IDataReader, LoadOption, FillErrorEventHandler, array<DataTable >[]()[])

DataSet
.
.
::
.
Load 方法 (IDataReader, LoadOption, FillErrorEventHandler,
array<
DataTable
>
[]
()
[]
)
DataSet 类

使用提供的 IDataReader 以数据源的值填充 DataSet，同时使用 DataTable 实例的数组提供架构和命名空间信息。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub Load ( _
    reader As IDataReader, _
    loadOption As LoadOption, _
    errorHandler As FillErrorEventHandler, _
    ParamArray tables As DataTable() _
)
public virtual void Load(
    IDataReader reader,
    LoadOption loadOption,
    FillErrorEventHandler errorHandler,
    params DataTable[] tables
)
public:
virtual void Load(
    IDataReader^ reader,
    LoadOption loadOption,
    FillErrorEventHandler^ errorHandler,
    ... array<DataTable^>^ tables
)
abstract Load :
        reader:IDataReader *
        loadOption:LoadOption *
        errorHandler:FillErrorEventHandler *
        tables:DataTable[] -> unit
override Load :
        reader:IDataReader *
        loadOption:LoadOption *
        errorHandler:FillErrorEventHandler *
        tables:DataTable[] -> unit

参数

reader
类型： System.Data IDataReader
提供一个或多个结果集的 IDataReader。
loadOption
类型： System.Data LoadOption
一个来自 LoadOption 枚举的值，该值指示 DataSet 中的 DataTable 实例内已有的行如何与共享同一主键的传入行进行组合。
errorHandler
类型： System.Data FillErrorEventHandler
在加载数据时出现错误的情况下要调用的 FillErrorEventHandler 委托。
tables
类型：
array<
System.Data DataTable
>
[]
()
[]

DataTable 实例的数组，Load 方法从该数组中检索名称和命名空间信息。

Load 方法提供了一种使用从 IDataReader 实例中检索的数据来填充单个 DataTable 的技术。此方法提供相同的功能，但是允许您将多个结果集从 IDataReader 加载到 DataSet 中的多个表中。 Load 方法提供了一种使用从 IDataReader 实例中检索的数据来填充单个 DataTable 的技术。此方法提供相同的功能，但是允许您将多个结果集从 IDataReader 加载到 DataSet 中的多个表中。

说明 说明

如果传入的 reader 中有任何源数据列为计算列，加载操作将失败并返回 InvalidOperationException。

使用 loadOption 参数，可以指定希望导入的数据如何与现有的数据交互，该参数可以是 LoadOption 枚举中的任何值。有关使用该参数的更多信息，请参见 DataTableLoad 方法的文档。 使用 loadOption 参数，可以指定希望导入的数据如何与现有的数据交互，该参数可以是 LoadOption 枚举中的任何值。有关使用该参数的更多信息，请参见 DataTableLoad 方法的文档。

errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将此属性设置为 true 表明已经处理错误并且希望继续处理；将此属性设置为 false 表明您希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。 errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将此属性设置为 true 表明已经处理错误并且希望继续处理；将此属性设置为 false 表明您希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。 errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将此属性设置为 true 表明已经处理错误并且希望继续处理；将此属性设置为 false 表明您希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。 errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将此属性设置为 true 表明已经处理错误并且希望继续处理；将此属性设置为 false 表明您希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。 errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将此属性设置为 true 表明已经处理错误并且希望继续处理；将此属性设置为 false 表明您希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。

使用 tables 参数可以指定 DataTable 实例数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load方法用来自源数据读取器的单个结果集中的数据填充所提供的每个 DataTable 实例。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。 使用 tables 参数可以指定 DataTable 实例数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load方法用来自源数据读取器的单个结果集中的数据填充所提供的每个 DataTable 实例。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。 使用 tables 参数可以指定 DataTable 实例数组，以指示与从读取器中加载的每个结果集对应的表的顺序。Load方法用来自源数据读取器的单个结果集中的数据填充所提供的每个 DataTable 实例。在每个结果集之后，Load 方法会移到读取器中的下一个结果集处，直到不再有结果集。

此方法的名称解析方案与后跟 DbDataAdapter 类的 Fill 方法的方案相同。

下面的示例向 DataSet 中添加一个表，然后尝试使用 Load 方法从包含不兼容架构的 DataTableReader 中加载数据。此示例没有捕获错误，而是使用 FillErrorEventHandler 委托来调查和处理错误。输出显示在控制台窗口中。 下面的示例向 DataSet 中添加一个表，然后尝试使用 Load 方法从包含不兼容架构的 DataTableReader 中加载数据。此示例没有捕获错误，而是使用 FillErrorEventHandler 委托来调查和处理错误。输出显示在控制台窗口中。 下面的示例向 DataSet 中添加一个表，然后尝试使用 Load 方法从包含不兼容架构的 DataTableReader 中加载数据。此示例没有捕获错误，而是使用 FillErrorEventHandler 委托来调查和处理错误。输出显示在控制台窗口中。

Sub Main()
  Dim dataSet As New DataSet
  Dim table As New DataTable()

  ' Attempt to load data from a data reader in which
  ' the schema is incompatible with the current schema.
  ' If you use exception handling, you won't get the chance
  ' to examine each row, and each individual table,
  ' as the Load method progresses.
  ' By taking advantage of the FillErrorEventHandler delegate,
  ' you can interact with the Load process as an error occurs,
  ' attempting to fix the problem, or simply continuing or quitting
  ' the Load process.:
  dataSet = New DataSet()
  table = GetIntegerTable()
  dataSet.Tables.Add(table)
  Dim reader As New DataTableReader(GetStringTable())
  dataSet.Load(reader, LoadOption.OverwriteChanges, _
      AddressOf FillErrorHandler, table)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub FillErrorHandler(ByVal sender As Object, _
  ByVal e As FillErrorEventArgs)
  ' You can use the e.Errors value to determine exactly what
  ' went wrong.
  If e.Errors.GetType Is GetType(System.FormatException) Then
    Console.WriteLine("Error when attempting to update the value: {0}", _
      e.Values(0))
  End If

  ' Setting e.Continue to True tells the Load
  ' method to continue trying. Setting it to False
  ' indicates that an error has occurred, and the
  ' Load method raises the exception that got
  ' you here.
  e.Continue = True
End Sub

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {4})
  table.Rows.Add(New Object() {5})
  table.TableName = "IntegerTable"
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

static void Main()
{
    // Attempt to load data from a data reader in which
    // the schema is incompatible with the current schema.
    // If you use exception handling, you won't get the chance
    // to examine each row, and each individual table,
    // as the Load method progresses.
    // By taking advantage of the FillErrorEventHandler delegate,
    // you can interact with the Load process as an error occurs,
    // attempting to fix the problem, or simply continuing or quitting
    // the Load process.:
    DataSet dataSet = new DataSet();
    DataTable table = GetIntegerTable();
    dataSet.Tables.Add(table);
    DataTableReader reader = new DataTableReader(GetStringTable());
    dataSet.Load(reader, LoadOption.OverwriteChanges,
        FillErrorHandler, table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 4 });
    table.Rows.Add(new object[] { 5 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.AcceptChanges();
    return table;
}

static void FillErrorHandler(object sender, FillErrorEventArgs e)
{
    // You can use the e.Errors value to determine exactly what
    // went wrong.
    if (e.Errors.GetType() == typeof(System.FormatException))
    {
        Console.WriteLine("Error when attempting to update the value: {0}",
            e.Values[0]);
    }

    // Setting e.Continue to True tells the Load
    // method to continue trying. Setting it to False
    // indicates that an error has occurred, and the
    // Load method raises the exception that got
    // you here.
    e.Continue = true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Load 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Merge 方法

DataSet
.
.
::
.
Merge 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

将指定的 DataSet、DataTable 或 DataRow 对象的数组合并到当前的 DataSet 或 DataTable 中。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Merge 方法 ( array<DataRow >[]()[])

DataSet
.
.
::
.
Merge 方法 (
array<
DataRow
>
[]
()
[]
)
DataSet 类

将 DataRow 对象数组合并到当前的 DataSet 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    rows As DataRow() _
)
public void Merge(
    DataRow[] rows
)
public:
void Merge(
    array<DataRow^>^ rows
)
member Merge :
        rows:DataRow[] -> unit

参数

rows
类型：
array<
System.Data DataRow
>
[]
()
[]

要合并到 DataSet 中的 DataRow 对象数组。

Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataSet。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。

当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。

合并架构之后合并数据。

当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行将匹配与新源行具有相同主键值的新目标行。 当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行将匹配与新源行具有相同主键值的新目标行。

合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Merge 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Merge 方法 (DataSet)

DataSet
.
.
::
.
Merge 方法 (DataSet)
DataSet 类

将指定的 DataSet 及其架构合并到当前 DataSet 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    dataSet As DataSet _
)
public void Merge(
    DataSet dataSet
)
public:
void Merge(
    DataSet^ dataSet
)
member Merge :
        dataSet:DataSet -> unit

参数

dataSet
类型： System.Data DataSet
其数据和架构将被合并的 DataSet。
异常 | 条件
ConstraintException | 无法启用一个或多个约束。
ArgumentNullException | dataSet 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataSet。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。

当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。

合并架构之后合并数据。

当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。 当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。

合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。

下面的示例针对 DataSet 使用 GetChanges、Update 和 Merge 方法。

 Private Sub DemonstrateMerge()
     ' Create a DataSet with one table, two columns, and three rows.
     Dim dataSet As New DataSet("dataSet")
     Dim table As New DataTable("Items")
     Dim idColumn As New DataColumn("id", Type.GetType("System.Int32"))
     idColumn.AutoIncrement = True
     Dim itemColumn As New DataColumn("Item", Type.GetType("System.Int32"))

     ' DataColumn array to set primary key.
     Dim keyColumn(1) As DataColumn
     Dim row As DataRow

     ' Create variable for temporary DataSet.
     Dim changeDataSet As DataSet

     ' Add columns to table, and table to DataSet.
     table.Columns.Add(idColumn)
     table.Columns.Add(itemColumn)
     dataSet.Tables.Add(table)

     ' Set primary key column.
     keyColumn(0) = idColumn
     table.PrimaryKey = keyColumn

     ' Add ten rows.
     Dim i As Integer
     For i = 0 To 9
         row = table.NewRow()
         row("Item") = i
         table.Rows.Add(row)
     Next i

     ' Accept changes.
     dataSet.AcceptChanges()
     PrintValues(dataSet, "Original values")

     ' Change two row values.
     table.Rows(0)("Item") = 50
     table.Rows(1)("Item") = 111

     ' Add one row.
     row = table.NewRow()
     row("Item") = 74
     table.Rows.Add(row)

     ' Insert code for error checking. Set one row in error.
     table.Rows(1).RowError = "over 100"
     PrintValues(dataSet, "Modified and New Values")

     ' If the table has changes or errors, create a subset DataSet.
     If dataSet.HasChanges(DataRowState.Modified Or DataRowState.Added) _
        And dataSet.HasErrors Then

         ' Use GetChanges to extract subset.
         changeDataSet = dataSet.GetChanges(DataRowState.Modified _
            Or DataRowState.Added)
         PrintValues(changeDataSet, "Subset values")

         ' Insert code to reconcile errors. In this case, reject changes.
         Dim changeTable As DataTable
         For Each changeTable In  changeDataSet.Tables
             If changeTable.HasErrors Then
                 Dim changeRow As DataRow
                 For Each changeRow In  changeTable.Rows
                     'Console.WriteLine(changeRow["Item"]);
                     If CInt(changeRow("Item", _
                        DataRowVersion.Current)) > 100 Then
                         changeRow.RejectChanges()
                         changeRow.ClearErrors()
                     End If
                 Next changeRow
             End If
         Next changeTable
         PrintValues(changeDataSet, "Reconciled subset values")

         ' Merge changes back to first DataSet.
         dataSet.Merge(changeDataSet)
         PrintValues(dataSet, "Merged Values")
     End If
 End Sub

Private Sub PrintValues(dataSet As DataSet, label As String)
     Console.WriteLine(ControlChars.Cr & label)
     Dim table As DataTable
     For Each table In  dataSet.Tables
         Console.WriteLine("TableName: " & table.TableName)
         Dim row As DataRow
         For Each row In  table.Rows
             Dim column As DataColumn
             For Each column In  table.Columns
                 Console.Write(ControlChars.Tab & " " _
                    & row(column).ToString())
             Next column
             Console.WriteLine()
         Next row
     Next table
End Sub

private void DemonstrateMerge()
{
    // Create a DataSet with one table, two columns, and three rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("Item",
        Type.GetType("System.Int32"));

    // DataColumn array to set primary key.
    DataColumn[] keyColumn= new DataColumn[1];
    DataRow row;

    // Create variable for temporary DataSet.
    DataSet changeDataSet;

    // Add columns to table, and table to DataSet.
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    dataSet.Tables.Add(table);

    // Set primary key column.
    keyColumn[0]= idColumn;
    table.PrimaryKey=keyColumn;

    // Add ten rows.
    for(int i = 0; i <10;i++)
    {
        row=table.NewRow();
        row["Item"]= i;
        table.Rows.Add(row);
    }

    // Accept changes.
    dataSet.AcceptChanges();
    PrintValues(dataSet, "Original values");

    // Change two row values.
    table.Rows[0]["Item"]= 50;
    table.Rows[1]["Item"]= 111;

    // Add one row.
    row=table.NewRow();
    row["Item"]=74;
    table.Rows.Add(row);

    // Insert code for error checking. Set one row in error.
    table.Rows[1].RowError= "over 100";
    PrintValues(dataSet, "Modified and New Values");
    // If the table has changes or errors, create a subset DataSet.
    if(dataSet.HasChanges(DataRowState.Modified |
        DataRowState.Added)& dataSet.HasErrors)
    {
        // Use GetChanges to extract subset.
        changeDataSet = dataSet.GetChanges(
            DataRowState.Modified|DataRowState.Added);
        PrintValues(changeDataSet, "Subset values");
        // Insert code to reconcile errors. In this case reject changes.
        foreach(DataTable changeTable in changeDataSet.Tables)
        {
            if (changeTable.HasErrors)
            {
                foreach(DataRow changeRow in changeTable.Rows)
                {
                    //Console.WriteLine(changeRow["Item"]);
                    if((int)changeRow["Item",
                        DataRowVersion.Current ]> 100)
                    {
                        changeRow.RejectChanges();
                        changeRow.ClearErrors();
                    }
                }
            }
        }
        PrintValues(changeDataSet, "Reconciled subset values");
        // Merge changes back to first DataSet.
        dataSet.Merge(changeDataSet);
        PrintValues(dataSet, "Merged Values");
    }
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Merge 重载
System.Data 命名空间
ForeignKeyConstraint
GetChanges
UniqueConstraint

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Merge 方法 (DataTable)

DataSet
.
.
::
.
Merge 方法 (DataTable)
DataSet 类

将指定的 DataTable 及其架构合并到当前 DataSet 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    table As DataTable _
)
public void Merge(
    DataTable table
)
public:
void Merge(
    DataTable^ table
)
member Merge :
        table:DataTable -> unit

参数

table
类型： System.Data DataTable
其数据和架构将被合并的 DataTable。
异常 | 条件
ArgumentNullException | dataSet 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataSet。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。

当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。

合并架构之后合并数据。

当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。 当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。

合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。

下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。创建与第一个表相同的第二个 DataTable。向第二个表中添加两行，然后将该表合并到 DataSet 中。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。创建与第一个表相同的第二个 DataTable。向第二个表中添加两行，然后将该表合并到 DataSet 中。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。创建与第一个表相同的第二个 DataTable。向第二个表中添加两行，然后将该表合并到 DataSet 中。

Private Sub DemonstrateMergeTable()
    ' Create a DataSet with one table, two columns,
    ' and ten rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")

    ' Add tables to the DataSet
    dataSet.Tables.Add(table)

    ' Add columns
    Dim c1 As New DataColumn("id", Type.GetType("System.Int32"), "")
    Dim c2 As New DataColumn("Item", Type.GetType("System.Int32"), "")
    table.Columns.Add(c1)
    table.Columns.Add(c2)

    ' DataColumn array to set primary key.
    Dim keyCol(1) As DataColumn

    ' Set primary key column.
    keyCol(0) = c1
    table.PrimaryKey = keyCol

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf Row_Changed

    ' Add ten rows.
    Dim i As Integer
    Dim row As DataRow

    For i = 0 To 9
        row = table.NewRow()
        row("id") = i
        row("Item") = i
        table.Rows.Add(row)
    Next i

    ' Accept changes.
    dataSet.AcceptChanges()
    PrintValues(dataSet, "Original values")

    ' Create a second DataTable identical to the first.
    Dim t2 As DataTable
    t2 = table.Clone()

    ' Add three rows. Note that the id column can't be the
    ' same as existing rows in the DataSet table.
    Dim newRow As DataRow
    newRow = t2.NewRow()
    newRow("id") = 14
    newRow("Item") = 774
    t2.Rows.Add(newRow)

    newRow = t2.NewRow()
    newRow("id") = 12
    newRow("Item") = 555
    t2.Rows.Add(newRow)

    newRow = t2.NewRow()
    newRow("id") = 13
    newRow("Item") = 665
    t2.Rows.Add(newRow)

    ' Merge the table into the DataSet.
    Console.WriteLine("Merging")
    dataSet.Merge(t2)
    PrintValues(dataSet, "Merged With Table")
 End Sub

 Private Sub Row_Changed( _
    sender As Object, e As DataRowChangeEventArgs)
     Console.WriteLine("Row Changed " & e.Action.ToString() _
        & ControlChars.Tab & e.Row.ItemArray(0).ToString())
 End Sub 'Row_Changed

 Private Sub PrintValues(dataSet As DataSet, label As String)
     Console.WriteLine(ControlChars.Cr & label)
     Dim table As DataTable
     Dim row As DataRow
     Dim column As DataColumn
     For Each table In  dataSet.Tables
         Console.WriteLine("TableName: " & table.TableName)
         For Each row In  table.Rows
             For Each column In  table.Columns
                 Console.Write(ControlChars.Tab & " " _
                    & row(column).ToString())
             Next column
             Console.WriteLine()
         Next row
     Next table
 End Sub

private void DemonstrateMergeTable()
{
    // Create a DataSet with one table, two columns, and ten rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");

    // Add table to the DataSet
    dataSet.Tables.Add(table);

    // Add columns
    DataColumn c1 = new DataColumn("id",
        Type.GetType("System.Int32"),"");
    DataColumn c2 = new DataColumn("Item",
        Type.GetType("System.Int32"),"");
    table.Columns.Add(c1);
    table.Columns.Add(c2);

    // DataColumn array to set primary key.
    DataColumn[] keyCol= new DataColumn[1];

    // Set primary key column.
    keyCol[0]= c1;
    table.PrimaryKey=keyCol;

    // Add a RowChanged event handler for the table.
    table.RowChanged += new
        DataRowChangeEventHandler(Row_Changed);

    // Add ten rows.
    for(int i = 0; i <10;i++)
    {
        DataRow row=table.NewRow();
        row["id"] = i;
        row["Item"]= i;
        table.Rows.Add(row);
    }
    // Accept changes.
    dataSet.AcceptChanges();

    PrintValues(dataSet, "Original values");

    // Create a second DataTable identical to the first.
    DataTable t2 = table.Clone();

    // Add three rows. Note that the id column can'te be the
    // same as existing rows in the DataSet table.
    DataRow newRow;
    newRow = t2.NewRow();
    newRow["id"] = 14;
    newRow["item"] = 774;

    //Note the alternative method for adding rows.
    t2.Rows.Add(new Object[] { 12, 555 });
    t2.Rows.Add(new Object[] { 13, 665 });

    // Merge the table into the DataSet
    Console.WriteLine("Merging");
    dataSet.Merge(t2);
    PrintValues(dataSet, "Merged With table.");

}

private void Row_Changed(object sender,
    DataRowChangeEventArgs e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString()
        + "\table" + e.Row.ItemArray[0]);
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Merge 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Merge 方法 (DataSet, Boolean)

DataSet
.
.
::
.
Merge 方法 (DataSet, Boolean)
DataSet 类

将指定的 DataSet 及其架构合并到当前 DataSet 中，在此过程中，将根据给定的参数保留或放弃在此 DataSet 中进行的任何更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    dataSet As DataSet, _
    preserveChanges As Boolean _
)
public void Merge(
    DataSet dataSet,
    bool preserveChanges
)
public:
void Merge(
    DataSet^ dataSet,
    bool preserveChanges
)
member Merge :
        dataSet:DataSet *
        preserveChanges:bool -> unit

参数

dataSet
类型： System.Data DataSet
其数据和架构将被合并的 DataSet。
preserveChanges
类型： System Boolean
要保留当前 DataSet 中的更改，则为 true；否则为 false。

Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataSet。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。

当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。

合并架构之后合并数据。

当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。 当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。

合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。

下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。在添加十个行之后，更改了两个值并添加了一个行。使用 GetChanges 方法创建已更改数据的子集。在调节错误之后，子集中的数据合并到原始的 DataSet 中。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。在添加十个行之后，更改了两个值并添加了一个行。使用 GetChanges 方法创建已更改数据的子集。在调节错误之后，子集中的数据合并到原始的 DataSet 中。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。在添加十个行之后，更改了两个值并添加了一个行。使用 GetChanges 方法创建已更改数据的子集。在调节错误之后，子集中的数据合并到原始的 DataSet 中。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。在添加十个行之后，更改了两个值并添加了一个行。使用 GetChanges 方法创建已更改数据的子集。在调节错误之后，子集中的数据合并到原始的 DataSet 中。

Private Sub DemonstrateMerge()
    ' Create a DataSet with one table, two columns,
    ' and three rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")
    Dim idColumn As New DataColumn("id", _
        Type.GetType("System.Int32"), "")
    idColumn.AutoIncrement = True
    Dim itemColumn As New DataColumn("Item", _
        Type.GetType("System.Int32"), "")

    ' Create DataColumn array to set primary key.
    Dim keyColumn(1) As DataColumn
    Dim row As DataRow

    ' Create variable for temporary DataSet.
    Dim changesDataSet As DataSet

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf Row_Changed
    dataSet.Tables.Add(table)
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)

    ' Set primary key column.
    keyColumn(0) = idColumn
    table.PrimaryKey = keyColumn

    ' Add ten rows.
    Dim i As Integer
    For i = 0 To 9
        row = table.NewRow()
        row("Item") = i
        table.Rows.Add(row)
    Next i

    ' Accept changes.
    dataSet.AcceptChanges()
    PrintValues(dataSet, "Original values")

    ' Change row values.
    table.Rows(0)("Item") = 50
    table.Rows(1)("Item") = 111

    ' Add one row.
    row = table.NewRow()
    row("Item") = 74
    table.Rows.Add(row)

    ' Insert code for error checking. Set one row in error.
    table.Rows(1).RowError = "over 100"
    PrintValues(dataSet, "Modified and New Values")

    ' If the table has changes or errors, create a subset DataSet.
    If dataSet.HasChanges(DataRowState.Modified Or DataRowState.Added) _
        And dataSet.HasErrors Then
        ' Use GetChanges to extract subset.
        changesDataSet = dataSet.GetChanges( _
            DataRowState.Modified Or DataRowState.Added)
        PrintValues(changesDataSet, "Subset values")

        ' Insert code to reconcile errors. In this case, reject changes.
        Dim changesTable As DataTable
        For Each changesTable In  changesDataSet.Tables
            If changesTable.HasErrors Then
                Dim changesRow As DataRow
                For Each changesRow In  changesTable.Rows
                    'Console.WriteLine(changesRow["Item"]);
                    If CInt(changesRow("Item", _
                        DataRowVersion.Current)) > 100 Then
                        changesRow.RejectChanges()
                        changesRow.ClearErrors()
                    End If
                Next changesRow
            End If
        Next changesTable

        ' Add a column to the changesDataSet.
        changesDataSet.Tables("Items").Columns.Add( _
            New DataColumn("newColumn"))
        PrintValues(changesDataSet, "Reconciled subset values")

        ' Merge changes back to first DataSet.
        dataSet.Merge(changesDataSet, False, _
            System.Data.MissingSchemaAction.Add)
    End If
    PrintValues(dataSet, "Merged Values")
End Sub

 Private Sub Row_Changed(sender As Object, e As DataRowChangeEventArgs)
     Console.WriteLine("Row Changed " + e.Action.ToString() _
        + ControlChars.Tab + e.Row.ItemArray(0).ToString())
 End Sub

Private Sub PrintValues(dataSet As DataSet, label As String)
     Console.WriteLine(label + ControlChars.Cr)
     Dim table As DataTable
     For Each table In  dataSet.Tables
         Console.WriteLine("TableName: " + table.TableName)
         Dim row As DataRow
         For Each row In  table.Rows
             Dim column As DataColumn
             For Each column In  table.Columns
                 Console.Write(ControlChars.Tab & " " _
                    & row(column).ToString())
             Next column
             Console.WriteLine()
         Next row
     Next table
End Sub

private void DemonstrateMerge()
{
    // Create a DataSet with one table, two columns,
    // and three rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"),"");
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("Item",
        Type.GetType("System.Int32"),"");

    // DataColumn array to set primary key.
    DataColumn[] keyColumn= new DataColumn[1];
    DataRow row;

    // Create variable for temporary DataSet.
    DataSet changesDataSet;

    // Add RowChanged event handler for the table.
    table.RowChanged+=new DataRowChangeEventHandler(
        Row_Changed);
    dataSet.Tables.Add(table);
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // Set primary key column.
    keyColumn[0]= idColumn;
    table.PrimaryKey=keyColumn;
    // Add ten rows.
    for(int i = 0; i <10;i++)
    {
        row=table.NewRow();
        row["Item"]= i;
        table.Rows.Add(row);
    }
    // Accept changes.
    dataSet.AcceptChanges();
    PrintValues(dataSet, "Original values");

    // Change row values.
    table.Rows[0]["Item"]= 50;
    table.Rows[1]["Item"]= 111;

    // Add one row.
    row=table.NewRow();
    row["Item"]=74;
    table.Rows.Add(row);

    // Insert code for error checking. Set one row in error.
    table.Rows[1].RowError= "over 100";
    PrintValues(dataSet, "Modified and New Values");

    // If the table has changes or errors,
    // create a subset DataSet.
    if(dataSet.HasChanges(DataRowState.Modified |
        DataRowState.Added)&& dataSet.HasErrors)
    {
        // Use GetChanges to extract subset.
        changesDataSet = dataSet.GetChanges(
            DataRowState.Modified|DataRowState.Added);
        PrintValues(changesDataSet, "Subset values");

        // Insert code to reconcile errors. In this case, reject changes.
        foreach(DataTable changesTable in changesDataSet.Tables)
        {
            if (changesTable.HasErrors)
            {
                foreach(DataRow changesRow in changesTable.Rows)
                {
                    //Console.WriteLine(changesRow["Item"]);
                    if((int)changesRow["Item",DataRowVersion.Current ]> 100)
                    {
                        changesRow.RejectChanges();
                        changesRow.ClearErrors();
                    }
                }
            }
        }
        // Add a column to the changesDataSet.
        changesDataSet.Tables["Items"].Columns.Add(
            new DataColumn("newColumn"));
        PrintValues(changesDataSet, "Reconciled subset values");
        // Merge changes back to first DataSet.
        dataSet.Merge(changesDataSet, false,
            System.Data.MissingSchemaAction.Add);
    }
    PrintValues(dataSet, "Merged Values");
}

private void Row_Changed(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString()
        + "\table" + e.Row.ItemArray[0]);
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine(label + "\n");
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Merge 重载
System.Data 命名空间
ForeignKeyConstraint
UniqueConstraint

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Merge 方法 ( array<DataRow >[]()[], Boolean, MissingSchemaAction)

DataSet
.
.
::
.
Merge 方法 (
array<
DataRow
>
[]
()
[]
, Boolean, MissingSchemaAction)
DataSet 类

将 DataRow 对象数组合并到当前的 DataSet 中，在此过程中，将根据给定的参数保留或放弃在 DataSet 中进行的更改并处理不兼容的架构。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    rows As DataRow(), _
    preserveChanges As Boolean, _
    missingSchemaAction As MissingSchemaAction _
)
public void Merge(
    DataRow[] rows,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
public:
void Merge(
    array<DataRow^>^ rows,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
member Merge :
        rows:DataRow[] *
        preserveChanges:bool *
        missingSchemaAction:MissingSchemaAction -> unit

参数

rows
类型：
array<
System.Data DataRow
>
[]
()
[]

要合并到 DataSet 中的 DataRow 对象数组。
preserveChanges
类型： System Boolean
要保留 DataSet 中的更改，则为 true；否则为 false。
missingSchemaAction
类型： System.Data MissingSchemaAction
MissingSchemaAction 值之一。

Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataSet。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。

为了便于解释 Merge 方法，我们使用“目标”(target) 表示当前的 DataSet，使用“源”(source) 表示第二个（参数）DataSet。如此命名目标 DataSet 是因为它是操作（合并）针对的对象。第二个 DataSet 被称为“源”是因为它包含的信息不更改，而是被合并到当前的 DataSet 中。 为了便于解释 Merge 方法，我们使用“目标”(target) 表示当前的 DataSet，使用“源”(source) 表示第二个（参数）DataSet。如此命名目标 DataSet 是因为它是操作（合并）针对的对象。第二个 DataSet 被称为“源”是因为它包含的信息不更改，而是被合并到当前的 DataSet 中。 为了便于解释 Merge 方法，我们使用“目标”(target) 表示当前的 DataSet，使用“源”(source) 表示第二个（参数）DataSet。如此命名目标 DataSet 是因为它是操作（合并）针对的对象。第二个 DataSet 被称为“源”是因为它包含的信息不更改，而是被合并到当前的 DataSet 中。

当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。

合并架构之后合并数据。

当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。 当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。

合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Merge 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Merge 方法 (DataSet, Boolean, MissingSchemaAction)

DataSet
.
.
::
.
Merge 方法 (DataSet, Boolean, MissingSchemaAction)
DataSet 类

将指定的 DataSet 及其架构与当前的 DataSet 合并，在此过程中，将根据给定的参数保留或放弃在当前 DataSet 中的更改并处理不兼容的架构。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    dataSet As DataSet, _
    preserveChanges As Boolean, _
    missingSchemaAction As MissingSchemaAction _
)
public void Merge(
    DataSet dataSet,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
public:
void Merge(
    DataSet^ dataSet,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
member Merge :
        dataSet:DataSet *
        preserveChanges:bool *
        missingSchemaAction:MissingSchemaAction -> unit

参数

dataSet
类型： System.Data DataSet
其数据和架构将被合并的 DataSet。
preserveChanges
类型： System Boolean
要保留当前 DataSet 中的更改，则为 true；否则为 false。
missingSchemaAction
类型： System.Data MissingSchemaAction
MissingSchemaAction 值之一。
异常 | 条件
ArgumentNullException | dataSet 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataSet。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。

为了便于解释 Merge 方法，我们使用“目标”(target) 表示当前的 DataSet，使用“源”(source) 表示第二个（参数）DataSet。如此命名目标 DataSet 是因为它是操作（合并）针对的对象。第二个 DataSet 被称为“源”是因为它包含的信息不更改，而是被合并到当前的 DataSet 中。 为了便于解释 Merge 方法，我们使用“目标”(target) 表示当前的 DataSet，使用“源”(source) 表示第二个（参数）DataSet。如此命名目标 DataSet 是因为它是操作（合并）针对的对象。第二个 DataSet 被称为“源”是因为它包含的信息不更改，而是被合并到当前的 DataSet 中。 为了便于解释 Merge 方法，我们使用“目标”(target) 表示当前的 DataSet，使用“源”(source) 表示第二个（参数）DataSet。如此命名目标 DataSet 是因为它是操作（合并）针对的对象。第二个 DataSet 被称为“源”是因为它包含的信息不更改，而是被合并到当前的 DataSet 中。

当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。

合并架构之后合并数据。

当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。 当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。

合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。

下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。更改了两个值，添加了一行。使用 GetChanges 方法创建已更改数据的子集。消除错误之后，子集中增加一个新列，从而更改了架构。当在 missingSchemaAction 设置为 MissingSchemaAction.Add 的情况下调用 Merge 方法时，将向初始 DataSet 对象的架构中添加新列。

Private Sub DemonstrateMergeMissingSchema()
    ' Create a DataSet with one table, two columns,
    ' and three rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")
    Dim idColumn As New DataColumn("id", _
        Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True
    Dim itemColumn As New DataColumn("Item", _
        Type.GetType("System.Int32"))

    ' DataColumn array to set primary key.
    Dim keyColumn(1) As DataColumn
    Dim row As DataRow

    ' Create variable for temporary DataSet.
    Dim changeDataSet As DataSet

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf Row_Changed
    dataSet.Tables.Add(table)
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)

    ' Set primary key column.
    keyColumn(0) = idColumn
    table.PrimaryKey = keyColumn

    ' Add ten rows.
    Dim i As Integer
    For i = 0 To 9
        row = table.NewRow()
        row("Item") = i
        table.Rows.Add(row)
    Next i

    ' Accept changes.
    dataSet.AcceptChanges()
    PrintValues(dataSet, "Original values")

    ' Change row values.
    table.Rows(0)("Item") = 50
    table.Rows(1)("Item") = 111

    ' Add one row.
    row = table.NewRow()
    row("Item") = 74
    table.Rows.Add(row)

    ' Insert code for error checking. Set one row in error.
    table.Rows(1).RowError = "over 100"
    PrintValues(dataSet, "Modified and New Values")
    ' If the table has changes or errors,
    ' create a subset DataSet.
    If dataSet.HasChanges(DataRowState.Modified Or DataRowState.Added) _
        And dataSet.HasErrors Then
        ' Use GetChanges to extract subset.
        changeDataSet = dataSet.GetChanges(DataRowState.Modified _
            Or DataRowState.Added)
        PrintValues(changeDataSet, "Subset values")
        ' Insert code to reconcile errors. In this case, reject changes.
        Dim changeTable As DataTable
        For Each changeTable In  changeDataSet.Tables
            If changeTable.HasErrors Then
                Dim changeRow As DataRow
                For Each changeRow In  changeTable.Rows
                    If CInt(changeRow("Item", _
                        DataRowVersion.Current)) > 100 Then
                        changeRow.RejectChanges()
                        changeRow.ClearErrors()
                    End If
                Next changeRow
            End If
        Next changeTable

        ' Add a column to the changeDataSet to change the schema.
        changeDataSet.Tables("Items").Columns.Add( _
            New DataColumn("newColumn"))
        PrintValues(changeDataSet, "Reconciled subset values")

        ' Add values to the rows for each column.
        Dim rowItem As DataRow
        For Each rowItem In  changeDataSet.Tables("Items").Rows
            rowItem("newColumn") = "my new schema value"
        Next rowItem

        ' Merge changes back to first DataSet.
        dataSet.Merge(changeDataSet, False, _
            System.Data.MissingSchemaAction.Add)
    End If
    PrintValues(dataSet, "Merged Values")
End Sub

Private Sub Row_Changed(sender As Object, _
    e As DataRowChangeEventArgs)
     Console.WriteLine("Row Changed " & e.Action.ToString() _
        & ControlChars.Tab & e.Row.ItemArray(0).ToString())
End Sub

Private Sub PrintValues(dataSet As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)
        Dim row As DataRow
        For Each row In  table.Rows
            Dim column As DataColumn
            For Each column In  table.Columns
                Console.Write(ControlChars.Tab & " " _
                    & row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
End Sub

private void DemonstrateMergeMissingSchema()
{
    // Create a DataSet with one table, two columns,
    // and three rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("Item",
        Type.GetType("System.Int32"));
    // DataColumn array to set primary key.

    DataColumn[] keyColumn= new DataColumn[1];
    DataRow row;
    // Create variable for temporary DataSet.
    DataSet changeDataSet;

    // Add RowChanged event handler for the table.
    table.RowChanged+= new DataRowChangeEventHandler(
        Row_Changed);
    dataSet.Tables.Add(table);
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // Set primary key column.
    keyColumn[0]= idColumn;
    table.PrimaryKey=keyColumn;

    // Add ten rows.
    for(int i = 0; i <10;i++)
    {
        row=table.NewRow();
        row["Item"]= i;
        table.Rows.Add(row);
    }

    // Accept changes.
    dataSet.AcceptChanges();
    PrintValues(dataSet, "Original values");

    // Change row values.
    table.Rows[0]["Item"]= 50;
    table.Rows[1]["Item"]= 111;

    // Add one row.
    row=table.NewRow();
    row["Item"]=74;
    table.Rows.Add(row);

    // Insert code for error checking. Set one row in error.
    table.Rows[1].RowError= "over 100";
    PrintValues(dataSet, "Modified and New Values");
    // If the table has changes or errors, create a subset DataSet.
    if(dataSet.HasChanges(DataRowState.Modified |
        DataRowState.Added)& dataSet.HasErrors)
    {
        // Use GetChanges to extract subset.
        changeDataSet = dataSet.GetChanges(
            DataRowState.Modified|DataRowState.Added);
        PrintValues(changeDataSet, "Subset values");

        // Insert code to reconcile errors. Reject the changes.
        foreach(DataTable changeTable in changeDataSet.Tables)
        {
            if (changeTable.HasErrors)
            {
                foreach(DataRow changeRow in changeTable.Rows)
                {
                    //Console.WriteLine(changeRow["Item"]);
                    if((int)changeRow["Item",
                        DataRowVersion.Current ]> 100)
                    {
                        changeRow.RejectChanges();
                        changeRow.ClearErrors();
                    }
                }
            }
        }
        // Add a column to the changeDataSet to change the schema.
        changeDataSet.Tables["Items"].Columns.Add(
            new DataColumn("newColumn"));
        PrintValues(changeDataSet, "Reconciled subset values");

        // Add values to the rows for each column.
        foreach(DataRow rowItem in changeDataSet.Tables["Items"].Rows)
        {
            rowItem["newColumn"] = "my new schema value";
        }
        // Merge changes back to first DataSet.
        dataSet.Merge(changeDataSet, false,
            System.Data.MissingSchemaAction.Add);
    }
    PrintValues(dataSet, "Merged Values");
}

private void Row_Changed(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString()
        + "\table" + e.Row.ItemArray[0]);
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Merge 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Merge 方法 (DataTable, Boolean, MissingSchemaAction)

DataSet
.
.
::
.
Merge 方法 (DataTable, Boolean, MissingSchemaAction)
DataSet 类

将指定的 DataTable 及其架构合并到当前的 DataSet 中，在此过程中，将根据给定的参数保留或放弃在 DataSet 中进行的更改并处理不兼容的架构。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    table As DataTable, _
    preserveChanges As Boolean, _
    missingSchemaAction As MissingSchemaAction _
)
public void Merge(
    DataTable table,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
public:
void Merge(
    DataTable^ table,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
member Merge :
        table:DataTable *
        preserveChanges:bool *
        missingSchemaAction:MissingSchemaAction -> unit

参数

table
类型： System.Data DataTable
数据和架构将被合并的 DataTable。
preserveChanges
类型： System Boolean
MissingSchemaAction 值之一。
missingSchemaAction
类型： System.Data MissingSchemaAction
要保留 DataSet 中的更改，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | dataSet 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。 Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataSet。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对它进行验证，然后将它发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataSet 的子集。该子集通常较小，因此可以更有效率地传递回中间层组件。然后，中间层组件通过存储过程使用更改来更新初始数据源。然后，中间层可以发送回一个新的 DataSet，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。

当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。 当调用 Merge 方法时，由于架构可能已更改，因此对两个 DataSet 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataSet 包含已添加的架构和数据。

合并架构之后合并数据。

当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。 当将新的源 DataSet 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行匹配那些与新源行具有相同主键值的新目标行。

合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。 合并过程中将禁用约束。如果在合并结束时无法启用任何约束，则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下，EnforceConstraints 属性将设置为 false，并且所有无效行都会标记为出错。在尝试将 EnforceConstraints 属性重置为 true 之前，必须消除这些错误。

下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。创建了与第一个表几乎相同的第二个 DataTable，两者的区别在于向第二个表中添加了新的 DataColumn。向第二个表中添加两个行，然后将该表合并到 DataSet（preserveChanges 参数设置为 false，missingSchemaAction 参数设置为 MissingSchemaAction.Add）中。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。创建了与第一个表几乎相同的第二个 DataTable，两者的区别在于向第二个表中添加了新的 DataColumn。向第二个表中添加两个行，然后将该表合并到 DataSet（preserveChanges 参数设置为 false，missingSchemaAction 参数设置为 MissingSchemaAction.Add）中。 下面的示例创建一个简单的 DataSet，该数据集包含一个表、两个列和十个行。创建了与第一个表几乎相同的第二个 DataTable，两者的区别在于向第二个表中添加了新的 DataColumn。向第二个表中添加两个行，然后将该表合并到 DataSet（preserveChanges 参数设置为 false，missingSchemaAction 参数设置为 MissingSchemaAction.Add）中。

Private Sub DemonstrateMergeTableAddSchema()
    ' Create a DataSet with one table, two columns,
    'and ten rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")

    ' Add tables to the DataSet
    dataSet.Tables.Add(table)

    ' Create and add two columns to the DataTable
    Dim idColumn As New DataColumn("id", _
        Type.GetType("System.Int32"), "")
    idColumn.AutoIncrement = True
    Dim itemColumn As New DataColumn("Item", _
        Type.GetType("System.Int32"), "")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)

    ' DataColumn array to set primary key.
    Dim keyCol(1) As DataColumn

    ' Set primary key column.
    keyCol(0) = idColumn
    table.PrimaryKey = keyCol

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf Row_Changed

    ' Add ten rows.
    Dim i As Integer
    Dim row As DataRow

    For i = 0 To 9
        row = table.NewRow()
        row("Item") = i
        table.Rows.Add(row)
    Next i

    ' Accept changes.
    dataSet.AcceptChanges()
    PrintValues(dataSet, "Original values")

    ' Create a second DataTable identical to the first
    ' with one extra column using the Clone method.
    Dim cloneTable As New DataTable
    cloneTable = table.Clone()

    ' Add column.
    cloneTable.Columns.Add("extra", _
        Type.GetType("System.String"))

    ' Add two rows. Note that the id column can't be the
    ' same as existing rows in the DataSet table.
    Dim newRow As DataRow
    newRow = cloneTable.NewRow()
    newRow("id") = 12
    newRow("Item") = 555
    newRow("extra") = "extra Column 1"
    cloneTable.Rows.Add(newRow)

    newRow = cloneTable.NewRow()
    newRow("id") = 13
    newRow("Item") = 665
    newRow("extra") = "extra Column 2"
    cloneTable.Rows.Add(newRow)

    ' Merge the table into the DataSet.
    Console.WriteLine("Merging")
    dataSet.Merge(cloneTable, False, MissingSchemaAction.Add)
    PrintValues(dataSet, "Merged With Table, Schema Added")
End Sub

Private Sub Row_Changed(sender As Object, _
    e As DataRowChangeEventArgs)
    Console.WriteLine("Row Changed " & e.Action.ToString() _
        & ControlChars.Tab & e.Row.ItemArray(0).ToString())
End Sub

Private Sub PrintValues(dataSet As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    Dim row As DataRow
    Dim column As DataColumn
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)
        For Each row In  table.Rows
            For Each column In  table.Columns
                Console.Write(ControlChars.Tab & " " _
                    & row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
 End Sub

private void DemonstrateMergeTableAddSchema()
{
    // Create a DataSet with one table, two columns, and ten rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");

    // Add table to the DataSet
    dataSet.Tables.Add(table);

    // Create and add two columns to the DataTable
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"),"");
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("Item",
        Type.GetType("System.Int32"),"");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // Set the primary key to the first column.
    table.PrimaryKey = new DataColumn[1]{ idColumn };

    // Add RowChanged event handler for the table.
    table.RowChanged+= new DataRowChangeEventHandler(Row_Changed);

    // Add ten rows.
    for(int i = 0; i <10;i++)
    {
        DataRow row=table.NewRow();
        row["Item"]= i;
        table.Rows.Add(row);
    }

    // Accept changes.
    dataSet.AcceptChanges();
    PrintValues(dataSet, "Original values");

    // Create a second DataTable identical to the first, with
    // one extra column using the Clone method.
    DataTable cloneTable = table.Clone();
    cloneTable.Columns.Add("extra", typeof(string));

    // Add two rows. Note that the id column can'table be the
    // same as existing rows in the DataSet table.
    DataRow newRow;
    newRow=cloneTable.NewRow();
    newRow["id"]= 12;
    newRow["Item"]=555;
    newRow["extra"]= "extra Column 1";
    cloneTable.Rows.Add(newRow);

    newRow=cloneTable.NewRow();
    newRow["id"]= 13;
    newRow["Item"]=665;
    newRow["extra"]= "extra Column 2";
    cloneTable.Rows.Add(newRow);

    // Merge the table into the DataSet.
    Console.WriteLine("Merging");
    dataSet.Merge(cloneTable,false,MissingSchemaAction.Add);
    PrintValues(dataSet, "Merged With Table, Schema Added");
}

private void Row_Changed(object sender,
    DataRowChangeEventArgs e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString()
        + "\table" + e.Row.ItemArray[0]);
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
Merge 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.OnPropertyChanging 方法

DataSet
.
.
::
.
OnPropertyChanging 方法
DataSet 类

引发 OnPropertyChanging 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnPropertyChanging ( _
    pcevent As PropertyChangedEventArgs _
)
protected virtual void OnPropertyChanging(
    PropertyChangedEventArgs pcevent
)
protected:
virtual void OnPropertyChanging(
    PropertyChangedEventArgs^ pcevent
)
abstract OnPropertyChanging :
        pcevent:PropertyChangedEventArgs -> unit
override OnPropertyChanging :
        pcevent:PropertyChangedEventArgs -> unit

参数

pcevent
类型： System.ComponentModel PropertyChangedEventArgs
包含事件数据的 PropertyChangedEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnPropertyChanging 时，确保调用基类的 OnPropertyChanging 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.OnRemoveRelation 方法

DataSet
.
.
::
.
OnRemoveRelation 方法
DataSet 类

当从 DataTable 中移除 DataRelation 对象时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnRemoveRelation ( _
    relation As DataRelation _
)
protected virtual void OnRemoveRelation(
    DataRelation relation
)
protected:
virtual void OnRemoveRelation(
    DataRelation^ relation
)
abstract OnRemoveRelation :
        relation:DataRelation -> unit
override OnRemoveRelation :
        relation:DataRelation -> unit

参数

relation
类型： System.Data DataRelation
正在被移除的 DataRelation。

此方法应当由子类重写以限制表被移除。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.OnRemoveTable 方法

DataSet
.
.
::
.
OnRemoveTable 方法
DataSet 类

当从 DataSet 中移除 DataTable 时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Overridable Sub OnRemoveTable ( _
    table As DataTable _
)
protected internal virtual void OnRemoveTable(
    DataTable table
)
protected public:
virtual void OnRemoveTable(
    DataTable^ table
)
abstract OnRemoveTable :
        table:DataTable -> unit
override OnRemoveTable :
        table:DataTable -> unit

参数

table
类型： System.Data DataTable
正在被移除的 DataTable。

此方法可被子类重写以限制表被移除。

下面的示例显示当 OnRemoveTable 方法被重写时从 DataSet 派生的类。

Public Shared Sub DemonstrateOnRemoveTable()
    Dim dataSet As DerivedDataSet = CreateDataSet()
    If dataSet.Tables.Count > 0 Then dataSet.Tables.RemoveAt(0)
End Sub

Public Class DerivedDataSet
    Inherits DataSet
    Protected Overrides Sub OnRemoveTable(table As DataTable)
        Console.WriteLine( _
            "The '{0}' DataTable has been removed from the DataSet", _
            table.TableName)
    End Sub
End Class

Public Shared Function CreateDataSet() As DerivedDataSet
    ' Create a DataSet with one table containing two columns.
    Dim derived As DerivedDataSet = New DerivedDataSet()

    ' Add table to DataSet.
    Dim table As DataTable = derived.Tables.Add("Items")

    ' Add two columns.
    Dim column As DataColumn = table.Columns.Add("id", _
        Type.GetType("System.Int32"))
    column.AutoIncrement = True
    table.Columns.Add("item", Type.GetType("System.Int32"))

    ' Set primary key.
    table.PrimaryKey = New DataColumn() {table.Columns("id")}

    return derived
End Function

public static void DemonstrateOnRemoveTable()
{
    DerivedDataSet dataSet = CreateDataSet();
    if(dataSet.Tables.Count > 0)
        dataSet.Tables.RemoveAt(0);
}

public class DerivedDataSet: DataSet
{
    protected override void OnRemoveTable(DataTable table)
    {
        Console.WriteLine(
            "The '{0}' DataTable has been removed from the DataSet",
            table.TableName);
    }
}

public static DerivedDataSet CreateDataSet()
{
    // Create a DataSet with one table containing two columns.
    DerivedDataSet derived = new DerivedDataSet();

    // Add table to DataSet.
    DataTable table = derived.Tables.Add("Items");

    // Add two columns.
    DataColumn column = table.Columns.Add("id", typeof(int));
    column.AutoIncrement = true;
    table.Columns.Add("item", typeof(int));

    // Set primary key.
    table.PrimaryKey = new DataColumn[] {table.Columns["id"]};

    return derived;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.RaisePropertyChanging 方法

DataSet
.
.
::
.
RaisePropertyChanging 方法
DataSet 类

发送指定的 DataSet 属性将要更改的通知。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Sub RaisePropertyChanging ( _
    name As String _
)
protected internal void RaisePropertyChanging(
    string name
)
protected public:
void RaisePropertyChanging(
    String^ name
)
member RaisePropertyChanging :
        name:string -> unit

参数

name
类型： System String
将要更改的属性的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXml 方法

DataSet
.
.
::
.
ReadXml 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

将 XML 架构和数据读入 DataSet。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXml 方法 (Stream)

DataSet
.
.
::
.
ReadXml 方法 (Stream)
DataSet 类

使用指定的 System.IO..::.Stream 将 XML 架构和数据读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    stream As Stream _
) As XmlReadMode
public XmlReadMode ReadXml(
    Stream stream
)
public:
XmlReadMode ReadXml(
    Stream^ stream
)
member ReadXml :
        stream:Stream -> XmlReadMode

参数

stream
类型： System.IO Stream
从 Stream 派生的对象。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

如果 DataSet 的 XML 架构包含 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。 如果 DataSet 的 XML 架构包含 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。

 <xsd:schema id="MyDataSet"
    elementFormDefault="qualified"
    targetNamespace="http://www.tempuri.org/MyDataSet.xsd"
    xmlns="http://www.tempuri.org/MyDataSet.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 </xsd:schema>
说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。

Private Sub DemonstrateReadWriteXMLDocumentWithFileStream()
    ' Create a DataSet with one table and two columns.
    Dim originalDataSet As New DataSet("dataSet")
    Dim table As New DataTable("table")
    Dim idColumn As New DataColumn("id", _
       Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True

    Dim itemColumn As New DataColumn("item")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)
    originalDataSet.Tables.Add(table)

    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("item") = "item " & i.ToString()
        table.Rows.Add(newRow)
    Next i
    originalDataSet.AcceptChanges()

    ' Print out values of each table in the DataSet
    ' using the function defined below.
    PrintValues(originalDataSet, "Original DataSet")

    ' Write the schema and data to XML file with FileStream.
    Dim xmlFilename As String = "XmlDocument.xml"
    Dim streamWrite As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Create)

    ' Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite)

    ' Close the FileStream.
    streamWrite.Close()

    ' Dispose of the original DataSet.
    originalDataSet.Dispose()
    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")

    ' Read the XML document back in.
    ' Create new FileStream to read schema with.
    Dim streamRead As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Open)

    newDataSet.ReadXml(streamRead)
    ' Print out values of each table in the DataSet
    ' using the function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub

Private Sub PrintValues(dataSet As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    Dim row As DataRow
    Dim column As DataColumn
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)
        For Each row In  table.Rows
            For Each column In  table.Columns
                Console.Write(ControlChars.Tab & " " & _
                   row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
End Sub

private void DemonstrateReadWriteXMLDocumentWithFileStream()
{
    // Create a DataSet with one table and two columns.
    DataSet originalDataSet = new DataSet("dataSet");
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement= true;

    DataColumn itemColumn = new DataColumn("item");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    originalDataSet.Tables.Add(table);
    // Add ten rows.

    DataRow newRow;
    for(int i = 0; i < 10; i++)
    {
        newRow = table.NewRow();
        newRow["item"]= "item " + i;
        table.Rows.Add(newRow);
    }
    originalDataSet.AcceptChanges();

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(originalDataSet, "Original DataSet");

    // Write the schema and data to XML file with FileStream.
    string xmlFilename = "XmlDocument.xml";
    System.IO.FileStream streamWrite = new System.IO.FileStream
        (xmlFilename, System.IO.FileMode.Create);

    // Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite);

    // Close the FileStream.
    streamWrite.Close();

    // Dispose of the original DataSet.
    originalDataSet.Dispose();
    // Create a new DataSet.
    DataSet newDataSet = new DataSet("New DataSet");

    // Read the XML document back in.
    // Create new FileStream to read schema with.
    System.IO.FileStream streamRead = new System.IO.FileStream
        (xmlFilename,System.IO.FileMode.Open);
    newDataSet.ReadXml(streamRead);

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXml 重载
System.Data 命名空间
ReadXmlSchema
WriteXml
WriteXmlSchema

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXml 方法 (String)

DataSet
.
.
::
.
ReadXml 方法 (String)
DataSet 类

使用指定的文件将 XML 架构和数据读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    fileName As String _
) As XmlReadMode
public XmlReadMode ReadXml(
    string fileName
)
public:
XmlReadMode ReadXml(
    String^ fileName
)
member ReadXml :
        fileName:string -> XmlReadMode

参数

fileName
类型： System String
作为读取源的文件名（包括路径）。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。
异常 | 条件
SecurityException | FileIOPermission 未设置为 Read。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

如果 DataSet 的 XML 架构包含一个 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。 如果 DataSet 的 XML 架构包含一个 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。

 <xsd:schema id="MyDataSet"
    elementFormDefault="qualified"
    targetNamespace="http://www.tempuri.org/MyDataSet.xsd"
    xmlns="http://www.tempuri.org/MyDataSet.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 </xsd:schema>
说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。

Private Sub DemonstrateReadWriteXMLDocumentWithStreamReader()
    ' Create a DataSet with one table and two columns.
    Dim OriginalDataSet As New DataSet("dataSet")
    OriginalDataSet.Namespace = "NetFrameWork"
    Dim table As New DataTable("table")
    Dim idColumn As New DataColumn("id", _
        Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True

    Dim itemColumn As New DataColumn("item")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)
    OriginalDataSet.Tables.Add(table)

    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("item") = "item " & i.ToString()
        table.Rows.Add(newRow)
    Next i
    OriginalDataSet.AcceptChanges()

    ' Print out values of each table in the DataSet
    ' using the function defined below.
    PrintValues(OriginalDataSet, "Original DataSet")

    ' Write the schema and data to an XML file.
    Dim xmlFilename As String = "XmlDocument.xml"

    ' Use WriteXml to write the document.
    OriginalDataSet.WriteXml(xmlFilename)

    ' Dispose of the original DataSet.
    OriginalDataSet.Dispose()

    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")

    ' Read the XML document into the DataSet.
    newDataSet.ReadXml(xmlFilename)

    ' Print out values of each table in the DataSet
    ' using the function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub

Private Sub PrintValues(dataSet As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)
        Dim row As DataRow
        For Each row In  table.Rows
            Dim column As DataColumn
            For Each column In  table.Columns
                Console.Write(ControlChars.Tab & " " & _
                    row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
End Sub

private void DemonstrateReadWriteXMLDocumentWithStreamReader()
{
    // Create a DataSet with one table and two columns.
    DataSet OriginalDataSet = new DataSet("dataSet");
    OriginalDataSet.Namespace= "NetFrameWork";
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement= true;

    DataColumn itemColumn = new DataColumn("item");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    OriginalDataSet.Tables.Add(table);

    // Add ten rows.
    DataRow newRow;
    for(int i = 0; i < 10; i++)
    {
        newRow = table.NewRow();
        newRow["item"]= "item " + i;
        table.Rows.Add(newRow);
    }
    OriginalDataSet.AcceptChanges();

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(OriginalDataSet, "Original DataSet");

    // Write the schema and data to an XML file.
    string xmlFilename = "XmlDocument.xml";

    // Use WriteXml to write the document.
    OriginalDataSet.WriteXml(xmlFilename);

    // Dispose of the original DataSet.
    OriginalDataSet.Dispose();

    // Create a new DataSet.
    DataSet newDataSet = new DataSet("New DataSet");

    // Read the XML document into the DataSet.
    newDataSet.ReadXml(xmlFilename);

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}
  • FileIOPermission

    用于读取和写入文件。关联的枚举：FileIOPermissionAccess 用于读取和写入文件。关联的枚举：FileIOPermissionAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXml 方法 (TextReader)

DataSet
.
.
::
.
ReadXml 方法 (TextReader)
DataSet 类

使用指定的 System.IO..::.TextReader 将 XML 架构和数据读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    reader As TextReader _
) As XmlReadMode
public XmlReadMode ReadXml(
    TextReader reader
)
public:
XmlReadMode ReadXml(
    TextReader^ reader
)
member ReadXml :
        reader:TextReader -> XmlReadMode

参数

reader
类型： System.IO TextReader
从中读取架构和数据的 TextReader。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

如果 DataSet 的 XML 架构包含 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。 如果 DataSet 的 XML 架构包含 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。

 <xsd:schema id="MyDataSet"
    elementFormDefault="qualified"
    targetNamespace="http://www.tempuri.org/MyDataSet.xsd"
    xmlns="http://www.tempuri.org/MyDataSet.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 </xsd:schema>

从 TextReader 类继承的类包括 StreamReader 和 StringReader 类。

说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。

Private Sub DemonstrateReadWriteXMLDocumentWithFileStream()
    ' Create a DataSet with one table and two columns.
    Dim originalDataSet As New DataSet("dataSet")
    Dim table As New DataTable("table")
    Dim idColumn As New DataColumn("id", _
       Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True

    Dim itemColumn As New DataColumn("item")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)
    originalDataSet.Tables.Add(table)

    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("item") = "item " & i.ToString()
        table.Rows.Add(newRow)
    Next i
    originalDataSet.AcceptChanges()

    ' Print out values of each table in the DataSet
    ' using the function defined below.
    PrintValues(originalDataSet, "Original DataSet")

    ' Write the schema and data to XML file with FileStream.
    Dim xmlFilename As String = "XmlDocument.xml"
    Dim streamWrite As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Create)

    ' Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite)

    ' Close the FileStream.
    streamWrite.Close()

    ' Dispose of the original DataSet.
    originalDataSet.Dispose()
    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")

    ' Read the XML document back in.
    ' Create new FileStream to read schema with.
    Dim streamRead As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Open)

    newDataSet.ReadXml(streamRead)
    ' Print out values of each table in the DataSet
    ' using the function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub

Private Sub PrintValues(dataSet As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    Dim row As DataRow
    Dim column As DataColumn
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)
        For Each row In  table.Rows
            For Each column In  table.Columns
                Console.Write(ControlChars.Tab & " " & _
                   row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
End Sub

private void DemonstrateReadWriteXMLDocumentWithFileStream()
{
    // Create a DataSet with one table and two columns.
    DataSet originalDataSet = new DataSet("dataSet");
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement= true;

    DataColumn itemColumn = new DataColumn("item");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    originalDataSet.Tables.Add(table);
    // Add ten rows.

    DataRow newRow;
    for(int i = 0; i < 10; i++)
    {
        newRow = table.NewRow();
        newRow["item"]= "item " + i;
        table.Rows.Add(newRow);
    }
    originalDataSet.AcceptChanges();

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(originalDataSet, "Original DataSet");

    // Write the schema and data to XML file with FileStream.
    string xmlFilename = "XmlDocument.xml";
    System.IO.FileStream streamWrite = new System.IO.FileStream
        (xmlFilename, System.IO.FileMode.Create);

    // Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite);

    // Close the FileStream.
    streamWrite.Close();

    // Dispose of the original DataSet.
    originalDataSet.Dispose();
    // Create a new DataSet.
    DataSet newDataSet = new DataSet("New DataSet");

    // Read the XML document back in.
    // Create new FileStream to read schema with.
    System.IO.FileStream streamRead = new System.IO.FileStream
        (xmlFilename,System.IO.FileMode.Open);
    newDataSet.ReadXml(streamRead);

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXml 方法 (XmlReader)

DataSet
.
.
::
.
ReadXml 方法 (XmlReader)
DataSet 类

使用指定的 System.Xml..::.XmlReader 将 XML 架构和数据读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    reader As XmlReader _
) As XmlReadMode
public XmlReadMode ReadXml(
    XmlReader reader
)
public:
XmlReadMode ReadXml(
    XmlReader^ reader
)
member ReadXml :
        reader:XmlReader -> XmlReadMode

参数

reader
类型： System.Xml XmlReader
从中读取的 XmlReader。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

如果 DataSet 的 XML 架构包含一个 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。 如果 DataSet 的 XML 架构包含一个 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。

 <xsd:schema id="MyDataSet"
    elementFormDefault="qualified"
    targetNamespace="http://www.tempuri.org/MyDataSet.xsd"
    xmlns="http://www.tempuri.org/MyDataSet.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 </xsd:schema>

System.Xml..::.XmlTextReader 从 XmlReader 继承。

说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。

Private Sub DemonstrateReadWriteXMLDocumentWithXMLReader()
    ' Create a DataSet with one table and two columns.
    Dim OriginalDataSet As New DataSet("dataSet")
    OriginalDataSet.Namespace = "NetFrameWork"
    Dim table As New DataTable("table")
    Dim idColumn As New DataColumn("id", _
        Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True

    Dim itemColumn As New DataColumn("item")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)
    OriginalDataSet.Tables.Add(table)

    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("item") = "item " & i.ToString()
        table.Rows.Add(newRow)
    Next i
    OriginalDataSet.AcceptChanges()

    ' Print out values of each table in the DataSet
    ' using the function defined below.
    PrintValues(OriginalDataSet, "Original DataSet")

    ' Write the XML schema and data to file with FileStream.
    Dim xmlFilename As String = "XmlDocument.xml"

    ' Create FileStream
    Dim fsWriteXml As New System.IO.FileStream _
        (xmlFilename, System.IO.FileMode.Create)

    ' Create an XmlTextWriter to write the file.
    Dim xmlWriter As New System.Xml.XmlTextWriter _
        (fsWriteXml, System.Text.Encoding.Unicode)

    ' Use WriteXml to write the document.
    OriginalDataSet.WriteXml(xmlWriter)

    ' Close the FileStream.
    fsWriteXml.Close()

    ' Dispose of the original DataSet.
    OriginalDataSet.Dispose()

    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")

    ' Read the XML document back in.
    ' Create new FileStream to read schema with.
    Dim fsReadXml As New System.IO.FileStream _
        (xmlFilename, System.IO.FileMode.Open)

    ' Create an XmlTextReader to read the file.
    Dim xmlReader As New System.Xml.XmlTextReader(fsReadXml)

    ' Read the XML document into the DataSet.
    newDataSet.ReadXml(xmlReader)

    ' Close the XmlTextReader
    xmlReader.Close()

    ' Print out values of each table in the DataSet using the
    ' function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub

 Private Sub PrintValues(dataSet As DataSet, label As String)
     Console.WriteLine(ControlChars.Cr & label)
     Dim table As DataTable
     Dim row As DataRow
     Dim column As DataColumn
     For Each table In  dataSet.Tables
         Console.WriteLine("TableName: " & table.TableName)
         For Each row In  table.Rows
             For Each column In  table.Columns
                 Console.Write(ControlChars.Tab & " " & _
                    row(column).ToString())
             Next column
             Console.WriteLine()
         Next row
     Next table
  End Sub

private void DemonstrateReadWriteXMLDocumentWithXMLReader()
{
    // Create a DataSet with one table and two columns.
    DataSet OriginalDataSet = new DataSet("dataSet");
    OriginalDataSet.Namespace= "NetFrameWork";
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement= true;

    DataColumn itemColumn = new DataColumn("item");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    OriginalDataSet.Tables.Add(table);

    // Add ten rows.
    DataRow newRow;
    for(int i = 0; i < 10; i++)
    {
        newRow = table.NewRow();
        newRow["item"]= "item " + i;
        table.Rows.Add(newRow);
    }
    OriginalDataSet.AcceptChanges();

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(OriginalDataSet, "Original DataSet");

    // Write the XML schema and data to file with FileStream.
    string xmlFilename = "XmlDocument.xml";

    // Create FileStream
    System.IO.FileStream fsWriteXml =
        new System.IO.FileStream
        (xmlFilename, System.IO.FileMode.Create);

    // Create an XmlTextWriter to write the file.
    System.Xml.XmlTextWriter xmlWriter =
        new System.Xml.XmlTextWriter
        (fsWriteXml, System.Text.Encoding.Unicode);

    // Use WriteXml to write the document.
    OriginalDataSet.WriteXml(xmlWriter);

    // Close the FileStream.
    fsWriteXml.Close();

    // Dispose of the original DataSet.
    OriginalDataSet.Dispose();

    // Create a new DataSet.
    DataSet newDataSet = new DataSet("New DataSet");

    // Read the XML document back in.
    // Create new FileStream to read schema with.
    System.IO.FileStream fsReadXml =
        new System.IO.FileStream
        (xmlFilename, System.IO.FileMode.Open);

    // Create an XmlTextReader to read the file.
    System.Xml.XmlTextReader xmlReader =
        new System.Xml.XmlTextReader(fsReadXml);

    // Read the XML document into the DataSet.
    newDataSet.ReadXml(xmlReader);

    // Close the XmlTextReader
    xmlReader.Close();

    // Print out values of each table in the DataSet
    // fusing the unction defined below.
    PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXml 方法 (Stream, XmlReadMode)

DataSet
.
.
::
.
ReadXml 方法 (Stream, XmlReadMode)
DataSet 类

使用指定的 System.IO..::.Stream 和 XmlReadMode 将 XML 架构和数据读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    stream As Stream, _
    mode As XmlReadMode _
) As XmlReadMode
public XmlReadMode ReadXml(
    Stream stream,
    XmlReadMode mode
)
public:
XmlReadMode ReadXml(
    Stream^ stream,
    XmlReadMode mode
)
member ReadXml :
        stream:Stream *
        mode:XmlReadMode -> XmlReadMode

参数

stream
类型： System.IO Stream
从中读取的 Stream。
mode
类型： System.Data XmlReadMode
XmlReadMode 值之一。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

对于 WriteXml 和 WriteXmlSchema 方法也分别这样操作。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 对于 WriteXml 和 WriteXmlSchema 方法也分别这样操作。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 对于 WriteXml 和 WriteXmlSchema 方法也分别这样操作。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

当使用 ReadXml 并将 XmlReadMode 设置为 Diffgram 时，diffgram 的生成和处理方式可能会导致目标 DataSet 和原始 DataSet 的内容不相同。有关 diffgram 的更多信息，请参见 DiffGram (ADO.NET)。 当使用 ReadXml 并将 XmlReadMode 设置为 Diffgram 时，diffgram 的生成和处理方式可能会导致目标 DataSet 和原始 DataSet 的内容不相同。有关 diffgram 的更多信息，请参见 DiffGram (ADO.NET)。
说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

如果 DataSet 的 XML 架构包含 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。 如果 DataSet 的 XML 架构包含 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。

 <xsd:schema id="MyDataSet"
    elementFormDefault="qualified"
    targetNamespace="http://www.tempuri.org/MyDataSet.xsd"
    xmlns="http://www.tempuri.org/MyDataSet.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 </xsd:schema>
说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXml 方法 (String, XmlReadMode)

DataSet
.
.
::
.
ReadXml 方法 (String, XmlReadMode)
DataSet 类

使用指定的文件和 XmlReadMode 将 XML 架构和数据读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    fileName As String, _
    mode As XmlReadMode _
) As XmlReadMode
public XmlReadMode ReadXml(
    string fileName,
    XmlReadMode mode
)
public:
XmlReadMode ReadXml(
    String^ fileName,
    XmlReadMode mode
)
member ReadXml :
        fileName:string *
        mode:XmlReadMode -> XmlReadMode

参数

fileName
类型： System String
作为读取源的文件名（包括路径）。
mode
类型： System.Data XmlReadMode
XmlReadMode 值之一。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。
异常 | 条件
SecurityException | FileIOPermission 未设置为 Read。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

如果 DataSet 的 XML 架构包含一个 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。 如果 DataSet 的 XML 架构包含一个 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。

 <xsd:schema id="MyDataSet"
    elementFormDefault="qualified"
    targetNamespace="http://www.tempuri.org/MyDataSet.xsd"
    xmlns="http://www.tempuri.org/MyDataSet.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 </xsd:schema>
说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。
  • FileIOPermission

    用于读取和写入文件。关联的枚举：FileIOPermissionAccess 用于读取和写入文件。关联的枚举：FileIOPermissionAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXml 方法 (TextReader, XmlReadMode)

DataSet
.
.
::
.
ReadXml 方法 (TextReader, XmlReadMode)
DataSet 类

使用指定的 System.IO..::.TextReader 和 XmlReadMode 将 XML 架构和数据读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    reader As TextReader, _
    mode As XmlReadMode _
) As XmlReadMode
public XmlReadMode ReadXml(
    TextReader reader,
    XmlReadMode mode
)
public:
XmlReadMode ReadXml(
    TextReader^ reader,
    XmlReadMode mode
)
member ReadXml :
        reader:TextReader *
        mode:XmlReadMode -> XmlReadMode

参数

reader
类型： System.IO TextReader
从中读取的 TextReader。
mode
类型： System.Data XmlReadMode
XmlReadMode 值之一。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

如果 DataSet 的 XML 架构包含 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。 如果 DataSet 的 XML 架构包含 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。

 <xsd:schema id="MyDataSet"
    elementFormDefault="qualified"
    targetNamespace="http://www.tempuri.org/MyDataSet.xsd"
    xmlns="http://www.tempuri.org/MyDataSet.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 </xsd:schema>
说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXml 方法 (XmlReader, XmlReadMode)

DataSet
.
.
::
.
ReadXml 方法 (XmlReader, XmlReadMode)
DataSet 类

使用指定的 System.Xml..::.XmlReader 和 XmlReadMode 将 XML 架构和数据读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    reader As XmlReader, _
    mode As XmlReadMode _
) As XmlReadMode
public XmlReadMode ReadXml(
    XmlReader reader,
    XmlReadMode mode
)
public:
XmlReadMode ReadXml(
    XmlReader^ reader,
    XmlReadMode mode
)
member ReadXml :
        reader:XmlReader *
        mode:XmlReadMode -> XmlReadMode

参数

reader
类型： System.Xml XmlReader
从中读取的 XmlReader。
mode
类型： System.Data XmlReadMode
XmlReadMode 值之一。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读数据和架构，请使用包括 mode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataSet 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

如果 DataSet 的 XML 架构包含一个 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。 如果 DataSet 的 XML 架构包含一个 targetNamespace，则可能无法读取数据，并且在调用 ReadXml 以加载 XML 中包含具有无限定命名空间的元素的 DataSet 时，可能会发生异常。若要读取非限定元素，请按下例的演示，在 XML 架构中将 elementFormDefault 设置为“qualified”。

 <xsd:schema id="MyDataSet"
    elementFormDefault="qualified"
    targetNamespace="http://www.tempuri.org/MyDataSet.xsd"
    xmlns="http://www.tempuri.org/MyDataSet.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 </xsd:schema>
说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试通过指定 XmlReadMode.ReadSchema 将该架构读入具有 ReadXml 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXmlSchema 方法

DataSet
.
.
::
.
ReadXmlSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

将 XML 架构读入 DataSet。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXmlSchema 方法 (Stream)

DataSet
.
.
::
.
ReadXmlSchema 方法 (Stream)
DataSet 类

从指定的 Stream 中将 XML 架构读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ReadXmlSchema ( _
    stream As Stream _
)
public void ReadXmlSchema(
    Stream stream
)
public:
void ReadXmlSchema(
    Stream^ stream
)
member ReadXmlSchema :
        stream:Stream -> unit

参数

stream
类型： System.IO Stream
从中读取的 Stream。

使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

使用 XSD 标准编写 XML 架构。

说明 说明

如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。 如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。

通常在调用用于填充 DataSet 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

从 Stream 类派生的类包括 BufferedStream、FileStream、MemoryStream 和 NetworkStream。

说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试将该架构读入具有 ReadXmlSchema 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试将该架构读入具有 ReadXmlSchema 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

下面的示例创建要用其读取 XML 架构的 FileStream 对象，并用该对象调用 ReadXmlSchema 方法。

Private Sub ReadSchemaFromFileStream(thisDataSet As DataSet)
    ' Set the file path and name. Modify this for your purposes.
    Dim filename As String = "Schema.xml"

    ' Create the FileStream object with the file name,
    ' and set to open the file
    Dim stream As New System.IO.FileStream _
        (filename, System.IO.FileMode.Open)

    ' Read the schema into the DataSet.
    thisDataSet.ReadXmlSchema(stream)

    ' Close the FileStream.
    stream.Close()
End Sub

private void ReadSchemaFromFileStream(DataSet thisDataSet)
{
    // Set the file path and name.
    // Modify this for your purposes.
    string filename="Schema.xml";

    // Create the FileStream object with the file name,
    // and set to open the file.
    System.IO.FileStream stream =
        new System.IO.FileStream(filename,System.IO.FileMode.Open);

    // Read the schema into the DataSet.
    thisDataSet.ReadXmlSchema(stream);

    // Close the FileStream.
    stream.Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXmlSchema 方法 (String)

DataSet
.
.
::
.
ReadXmlSchema 方法 (String)
DataSet 类

从指定的文件中将 XML 架构读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ReadXmlSchema ( _
    fileName As String _
)
public void ReadXmlSchema(
    string fileName
)
public:
void ReadXmlSchema(
    String^ fileName
)
member ReadXmlSchema :
        fileName:string -> unit

参数

fileName
类型： System String
从中读取的文件的名称（包括路径）。
异常 | 条件
SecurityException | FileIOPermission 未设置为 Read。

使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

使用 XSD 标准编写 XML 架构。

说明 说明

如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。 如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。

通常在调用用于填充 DataSet 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试将该架构读入具有 ReadXmlSchema 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试将该架构读入具有 ReadXmlSchema 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

Private Sub ReadSchemaFromFile()
    ' Create the DataSet to read the schema into.
    Dim thisDataSet As New DataSet()

    ' Set the file path and name. Modify this for your purposes.
    Dim filename As String = "Schema.xml"

    ' Invoke the ReadXmlSchema method with the file name.
    thisDataSet.ReadXmlSchema(filename)
End Sub

private void ReadSchemaFromFile(){
   // Create the DataSet to read the schema into.
   DataSet thisDataSet = new DataSet();

   // Set the file path and name. Modify this for your purposes.
   string filename="Schema.xml";

   // Invoke the ReadXmlSchema method with the file name.
   thisDataSet.ReadXmlSchema(filename);
}
  • FileIOPermission

    用于读取和写入文件。关联的枚举：FileIOPermissionAccess 用于读取和写入文件。关联的枚举：FileIOPermissionAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXmlSchema 方法 (TextReader)

DataSet
.
.
::
.
ReadXmlSchema 方法 (TextReader)
DataSet 类

从指定的 TextReader 中将 XML 架构读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ReadXmlSchema ( _
    reader As TextReader _
)
public void ReadXmlSchema(
    TextReader reader
)
public:
void ReadXmlSchema(
    TextReader^ reader
)
member ReadXmlSchema :
        reader:TextReader -> unit

参数

reader
类型： System.IO TextReader
从中读取的 TextReader。

使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

使用 XSD 标准编写 XML 架构。

说明 说明

如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。 如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。

通常在调用用于填充 DataSet 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

从 TextReader 类继承的类包括 StreamReader 和 StringReader 类。

说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试将该架构读入具有 ReadXmlSchema 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试将该架构读入具有 ReadXmlSchema 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

下面的示例创建要用其读取架构的 StreamReader 对象，并用该对象调用 ReadXmlSchema 方法。

Private Sub ReadSchemaFromStreamReader()
    ' Create the DataSet to read the schema into.
    Dim thisDataSet As New DataSet()

    ' Set the file path and name. Modify this for your purposes.
    Dim filename As String = "Schema.xml"

    ' Create a StreamReader object with the file path and name.
    Dim readStream As New System.IO.StreamReader(filename)

    ' Invoke the ReadXmlSchema method with the StreamReader object.
    thisDataSet.ReadXmlSchema(readStream)

    ' Close the StreamReader
    readStream.Close()
End Sub

private void ReadSchemaFromStreamReader()
{
    // Create the DataSet to read the schema into.
    DataSet thisDataSet = new DataSet();

    // Set the file path and name. Modify this for your purposes.
    string filename="Schema.xml";

    // Create a StreamReader object with the file path and name.
    System.IO.StreamReader readStream =
        new System.IO.StreamReader(filename);

    // Invoke the ReadXmlSchema method with the StreamReader object.
    thisDataSet.ReadXmlSchema(readStream);

    // Close the StreamReader
    readStream.Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXmlSchema 方法 (XmlReader)

DataSet
.
.
::
.
ReadXmlSchema 方法 (XmlReader)
DataSet 类

从指定的 XmlReader 中将 XML 架构读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ReadXmlSchema ( _
    reader As XmlReader _
)
public void ReadXmlSchema(
    XmlReader reader
)
public:
void ReadXmlSchema(
    XmlReader^ reader
)
member ReadXmlSchema :
        reader:XmlReader -> unit

参数

reader
类型： System.Xml XmlReader
从中读取的 XmlReader。

使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。 使用 ReadXmlSchema 方法为 DataSet 创建架构。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

说明 说明

如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。 如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。

通常在调用用于填充 DataSet 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

System.Xml..::.XmlReader 类是抽象类。从 XmlReader 继承的类是 System.Xml..::.XmlTextReader 类。 System.Xml..::.XmlReader 类是抽象类。从 XmlReader 继承的类是 System.Xml..::.XmlTextReader 类。

说明 说明

如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试将该架构读入具有 ReadXmlSchema 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。 如果 DataSet 的架构包含同一命名空间中同名但类型不同的元素，则当您尝试将该架构读入具有 ReadXmlSchema 的 DataSet 时，将发生异常。如果使用的是 .NET Framework 1.0 版，则不会发生此异常。

下面的示例创建新的 DataSet 和 System.IO..::.FileStream 对象。用文件路径和文件名创建的 FileStream 对象用于创建作为参数传递给 ReadXmlSchema 方法的 System.Xml..::.XmlTextReader。 下面的示例创建新的 DataSet 和 System.IO..::.FileStream 对象。用文件路径和文件名创建的 FileStream 对象用于创建作为参数传递给 ReadXmlSchema 方法的 System.Xml..::.XmlTextReader。

Private Sub ReadSchemaFromXmlTextReader()
    ' Create the DataSet to read the schema into.
    Dim thisDataSet As New DataSet()

    ' Set the file path and name. Modify this for your purposes.
    Dim filename As String = "Schema.xml"

    ' Create a FileStream object with the file path and name.
    Dim stream As New System.IO.FileStream _
       (filename, System.IO.FileMode.Open)

    ' Create a new XmlTextReader object with the FileStream.
    Dim xmlReader As New System.Xml.XmlTextReader(stream)

    ' Read the schema into the DataSet and close the reader.
    thisDataSet.ReadXmlSchema(xmlReader)
    xmlReader.Close()
End Sub

private void ReadSchemaFromXmlTextReader()
{
    // Create the DataSet to read the schema into.
    DataSet thisDataSet = new DataSet();

    // Set the file path and name. Modify this for your purposes.
    string filename="Schema.xml";

    // Create a FileStream object with the file path and name.
    System.IO.FileStream stream = new System.IO.FileStream
        (filename,System.IO.FileMode.Open);

    // Create a new XmlTextReader object with the FileStream.
    System.Xml.XmlTextReader xmlReader=
        new System.Xml.XmlTextReader(stream);

    // Read the schema into the DataSet and close the reader.
    thisDataSet.ReadXmlSchema(xmlReader);
    xmlReader.Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
ReadXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ReadXmlSerializable 方法

DataSet
.
.
::
.
ReadXmlSerializable 方法
DataSet 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

忽略特性并返回一个空的数据集。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub ReadXmlSerializable ( _
    reader As XmlReader _
)
protected virtual void ReadXmlSerializable(
    XmlReader reader
)
protected:
virtual void ReadXmlSerializable(
    XmlReader^ reader
)
abstract ReadXmlSerializable :
        reader:XmlReader -> unit
override ReadXmlSerializable :
        reader:XmlReader -> unit

参数

reader
类型： System.Xml XmlReader
指定的 XML 读取器。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.RejectChanges 方法

DataSet
.
.
::
.
RejectChanges 方法
DataSet 类

回滚自创建 DataSet 以来或上次调用 DataSet..::.AcceptChanges 以来对其进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub RejectChanges
public virtual void RejectChanges()
public:
virtual void RejectChanges()
abstract RejectChanges : unit -> unit
override RejectChanges : unit -> unit

调用 DataSet..::.RejectChanges 以针对由 DataSet 包含的所有 DataTable 对象调用 DataTable..::.RejectChanges 方法。

由 DataSet 包含的每个 DataRow 对象都可通过调用 DataRow..::.BeginEdit 方法设置为编辑模式。在调用 DataRow..::.EndEdit 方法之后，可通过针对 DataRow 对象所属的 DataTable 调用 DataTable..::.RejectChanges 来拒绝更改。 由 DataSet 包含的每个 DataRow 对象都可通过调用 DataRow..::.BeginEdit 方法设置为编辑模式。在调用 DataRow..::.EndEdit 方法之后，可通过针对 DataRow 对象所属的 DataTable 调用 DataTable..::.RejectChanges 来拒绝更改。

DataTable..::.RejectChanges 方法被调用时，仍处于编辑模式的任何行将取消其编辑。新行被移除。已修改的和已删除的行返回到其原始状态 (DataRowState.Unchanged)。
DataTable..::.RejectChanges 方法被调用时，仍处于编辑模式的任何行将取消其编辑。新行被移除。已修改的和已删除的行返回到其原始状态 (DataRowState.Unchanged)。
DataTable..::.RejectChanges 方法被调用时，仍处于编辑模式的任何行将取消其编辑。新行被移除。已修改的和已删除的行返回到其原始状态 (DataRowState.Unchanged)。

AcceptChanges 和 RejectChanges 仅适用于与 DataRow 相关的更改，即 Add、Remove、Delete 和 Modify。它们不适用于架构和结构方面的更改。 AcceptChanges 和 RejectChanges 仅适用于与 DataRow 相关的更改，即 Add、Remove、Delete 和 Modify。它们不适用于架构和结构方面的更改。

下面的示例显示从 DataSet 类派生的一个类。RejectChanges 事件是从函数内部调用的。 下面的示例显示从 DataSet 类派生的一个类。RejectChanges 事件是从函数内部调用的。

Private Sub RejectChangesInDataSet()
    ' Instantiate the derived DataSet.
    Dim derivedData As DerivedDataSet
    derivedData = New DerivedDataSet()

   ' Insert code to change values.

   ' Invoke the RejectChanges method in the derived class.
   derivedData.RejectDataSetChanges()
End Sub

Public Class DerivedDataSet
    Inherits System.Data.DataSet

    Public Sub RejectDataSetChanges()
        ' Invoke the RejectChanges method.
        Me.RejectChanges()
    End Sub
 End Class

private void RejectChangesInDataSet()
{
    // Instantiate the derived DataSet.
    DerivedDataSet derivedData = new DerivedDataSet();

    // Insert code to change values.

    // Invoke the RejectChanges method in the derived class.
    derivedData.RejectDataSetChanges();
}

public  class DerivedDataSet:System.Data.DataSet
{
    public void RejectDataSetChanges()
    {
        // Invoke the RejectChanges method.
        this.RejectChanges();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Reset 方法

DataSet
.
.
::
.
Reset 方法
DataSet 类

将 DataSet 重置为其初始状态。子类应重写 Reset，以便将 DataSet 还原到其原始状态。 将 DataSet 重置为其初始状态。子类应重写 Reset，以便将 DataSet 还原到其原始状态。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub Reset
public virtual void Reset()
public:
virtual void Reset()
abstract Reset : unit -> unit
override Reset : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ShouldSerializeRelations 方法

DataSet
.
.
::
.
ShouldSerializeRelations 方法
DataSet 类

获取一个值，该值指示是否应该保持 Relations 属性。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function ShouldSerializeRelations As Boolean
protected virtual bool ShouldSerializeRelations()
protected:
virtual bool ShouldSerializeRelations()
abstract ShouldSerializeRelations : unit -> bool
override ShouldSerializeRelations : unit -> bool

返回值

类型： System Boolean
如果已将属性值更改为其默认值之外的值，则为 true；否则为 false。

通常在为 DataSet 创建设计器或创建自己的、包含 DataSet 的控件时使用该方法。

下面的示例演示从 DataSet 类派生的一个类。Reset 和 ShouldSerializeRelations 方法从派生类中的函数内调用。 下面的示例演示从 DataSet 类派生的一个类。Reset 和 ShouldSerializeRelations 方法从派生类中的函数内调用。

Public Class DerivedDataSet
    Inherits System.Data.DataSet

    Public Sub ResetDataSetRelations()
        ' Check the ShouldSerializeRelations methods
        ' before invoking Reset.
        If Not Me.ShouldSerializeRelations() Then
            Me.Reset()
        End If
    End Sub
End Class

public  class DerivedDataSet:System.Data.DataSet
{
    public void ResetDataSetRelations()
    {
        // Check the ShouldSerializeRelations methods
        // before invoking Reset.
        if(!this.ShouldSerializeRelations())
        {
            this.Reset();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ShouldSerializeTables 方法

DataSet
.
.
::
.
ShouldSerializeTables 方法
DataSet 类

获取一个值，该值指示是否应该保持 Tables 属性。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function ShouldSerializeTables As Boolean
protected virtual bool ShouldSerializeTables()
protected:
virtual bool ShouldSerializeTables()
abstract ShouldSerializeTables : unit -> bool
override ShouldSerializeTables : unit -> bool

返回值

类型： System Boolean
如果已将属性值更改为其默认值之外的值，则为 true；否则为 false。

通常仅在为 DataSet 创建设计器或创建自己的、包含 DataSet 的控件时，才使用该方法。

下面的示例显示从 DataSet 类派生的一个类。ShouldSerializeTables 方法从派生类中的函数中调用。 下面的示例显示从 DataSet 类派生的一个类。ShouldSerializeTables 方法从派生类中的函数中调用。

Public Class DerivedDataSet
    Inherits System.Data.DataSet

    Public Sub ResetDataSetRelations()
        ' Check the ShouldPersistTable method
        ' before invoking Reset.
        If Not Me.ShouldSerializeTables() Then
            Me.Reset()
        End If
    End Sub
End Class

public  class DerivedDataSet:System.Data.DataSet
{
    public void ResetDataSetRelations()
    {
        // Check the ShouldPersistTable method
        // before invoking Reset.
        if(!this.ShouldSerializeTables())
        {
            this.Reset();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXml 方法

DataSet
.
.
::
.
WriteXml 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

从 DataSet 写 XML 数据，还可以选择写架构。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXml 方法 (Stream)

DataSet
.
.
::
.
WriteXml 方法 (Stream)
DataSet 类

使用指定的 System.IO..::.Stream 为 DataSet 写当前数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    stream As Stream _
)
public void WriteXml(
    Stream stream
)
public:
void WriteXml(
    Stream^ stream
)
member WriteXml :
        stream:Stream -> unit

参数

stream
类型： System.IO Stream
用于写入文件的 Stream 对象。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 mode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 mode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

下面的示例创建一个 System.IO..::.FileStream 对象。然后，此对象和 WriteXml 方法一起用于写 XML 文档。 下面的示例创建一个 System.IO..::.FileStream 对象。然后，此对象和 WriteXml 方法一起用于写 XML 文档。

Private Sub WriteXmlToFile(thisDataSet As DataSet)
     If thisDataSet Is Nothing Then
         Return
     End If

    ' Create a file name to write to.
     Dim filename As String = "XmlDoc.xml"

     ' Create the FileStream to write with.
     Dim stream As New System.IO.FileStream _
        (filename, System.IO.FileMode.Create)

     ' Write to the file with the WriteXml method.
     thisDataSet.WriteXml(stream)
End Sub

private void WriteXmlToFile(DataSet thisDataSet)
{
    if (thisDataSet == null) { return; }

    // Create a file name to write to.
    string filename = "XmlDoc.xml";

    // Create the FileStream to write with.
    System.IO.FileStream stream = new System.IO.FileStream
        (filename, System.IO.FileMode.Create);

    // Write to the file with the WriteXml method.
    thisDataSet.WriteXml(stream);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXml 方法 (String)

DataSet
.
.
::
.
WriteXml 方法 (String)
DataSet 类

将 DataSet 的当前数据写入指定的文件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    fileName As String _
)
public void WriteXml(
    string fileName
)
public:
void WriteXml(
    String^ fileName
)
member WriteXml :
        fileName:string -> unit

参数

fileName
类型： System String
要向其写入的文件的名称（包括路径）。
异常 | 条件
SecurityException | FileIOPermission 未设置为 Write。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 mode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 mode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。
  • FileIOPermission

    用于读取和写入文件。关联的枚举：FileIOPermissionAccess 用于读取和写入文件。关联的枚举：FileIOPermissionAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXml 方法 (TextWriter)

DataSet
.
.
::
.
WriteXml 方法 (TextWriter)
DataSet 类

使用指定的 TextWriter 写入 DataSet 的当前数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As TextWriter _
)
public void WriteXml(
    TextWriter writer
)
public:
void WriteXml(
    TextWriter^ writer
)
member WriteXml :
        writer:TextWriter -> unit

参数

writer
类型： System.IO TextWriter
用其进行写操作的 TextWriter 对象。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 mode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 mode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXml 方法 (XmlWriter)

DataSet
.
.
::
.
WriteXml 方法 (XmlWriter)
DataSet 类

将 DataSet 的当前数据写入指定的 XmlWriter。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As XmlWriter _
)
public void WriteXml(
    XmlWriter writer
)
public:
void WriteXml(
    XmlWriter^ writer
)
member WriteXml :
        writer:XmlWriter -> unit

参数

writer
类型： System.Xml XmlWriter
用其进行写操作的 XmlWriter。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 mode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 mode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXml 方法 (Stream, XmlWriteMode)

DataSet
.
.
::
.
WriteXml 方法 (Stream, XmlWriteMode)
DataSet 类

使用指定的 System.IO..::.Stream 和 XmlWriteMode 为 DataSet 写当前数据，还可以选择写架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。 使用指定的 System.IO..::.Stream 和 XmlWriteMode 为 DataSet 写当前数据，还可以选择写架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    stream As Stream, _
    mode As XmlWriteMode _
)
public void WriteXml(
    Stream stream,
    XmlWriteMode mode
)
public:
void WriteXml(
    Stream^ stream,
    XmlWriteMode mode
)
member WriteXml :
        stream:Stream *
        mode:XmlWriteMode -> unit

参数

stream
类型： System.IO Stream
用于写入文件的 Stream 对象。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要写入数据和架构，请将 mode 参数设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要写入数据和架构，请将 mode 参数设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXml 方法 (String, XmlWriteMode)

DataSet
.
.
::
.
WriteXml 方法 (String, XmlWriteMode)
DataSet 类

使用指定的 XmlWriteMode 将 DataSet 的当前数据写入指定的文件，还可以选择将架构写入指定的文件。若要写架构，请将 mode 参数的值设置为 WriteSchema。 使用指定的 XmlWriteMode 将 DataSet 的当前数据写入指定的文件，还可以选择将架构写入指定的文件。若要写架构，请将 mode 参数的值设置为 WriteSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    fileName As String, _
    mode As XmlWriteMode _
)
public void WriteXml(
    string fileName,
    XmlWriteMode mode
)
public:
void WriteXml(
    String^ fileName,
    XmlWriteMode mode
)
member WriteXml :
        fileName:string *
        mode:XmlWriteMode -> unit

参数

fileName
类型： System String
要向其写入的文件的名称（包括路径）。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。
异常 | 条件
SecurityException | FileIOPermission 未设置为 Write。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要写入数据和架构，请将 mode 参数设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要写入数据和架构，请将 mode 参数设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

下面的示例使用 WriteXml 方法写 XML 文档。

Private Sub WriteXmlToFile(thisDataSet As DataSet)
    If thisDataSet Is Nothing Then
        Return
    End If

    ' Create a file name to write to.
    Dim filename As String = "XmlDoc.xml"

    ' Write to the file with the WriteXml method.
    thisDataSet.WriteXml(filename)
End Sub

private void WriteXmlToFile(DataSet thisDataSet)
{
    if (thisDataSet == null) { return; }

    // Create a file name to write to.
    string filename = "XmlDoc.xml";

    // Write to the file with the WriteXml method.
    thisDataSet.WriteXml(filename);
}
  • FileIOPermission

    用于读取和写入文件。关联的枚举：FileIOPermissionAccess 用于读取和写入文件。关联的枚举：FileIOPermissionAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXml 方法 (TextWriter, XmlWriteMode)

DataSet
.
.
::
.
WriteXml 方法 (TextWriter, XmlWriteMode)
DataSet 类

使用指定的 TextWriter 和 XmlWriteMode 写入 DataSet 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。 使用指定的 TextWriter 和 XmlWriteMode 写入 DataSet 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As TextWriter, _
    mode As XmlWriteMode _
)
public void WriteXml(
    TextWriter writer,
    XmlWriteMode mode
)
public:
void WriteXml(
    TextWriter^ writer,
    XmlWriteMode mode
)
member WriteXml :
        writer:TextWriter *
        mode:XmlWriteMode -> unit

参数

writer
类型： System.IO TextWriter
System.IO..::.TextWriter 对象用于写文档。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要写入数据和架构，请将 mode 参数设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要写入数据和架构，请将 mode 参数设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。 下面的示例首先创建一个简单的 DataSet，该数据集包含一个 DataTable，两个列和十个行。通过调用 WriteXml 方法将 DataSet 架构和数据写入磁盘。创建另一个 DataSet，使用 ReadXml 方法为其填充架构和数据。

Private Sub DemonstrateReadWriteXMLDocumentWithFileStream()
    ' Create a DataSet with one table and two columns.
    Dim originalDataSet As New DataSet("dataSet")
    Dim table As New DataTable("table")
    Dim idColumn As New DataColumn("id", _
       Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True

    Dim itemColumn As New DataColumn("item")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)
    originalDataSet.Tables.Add(table)

    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("item") = "item " & i.ToString()
        table.Rows.Add(newRow)
    Next i
    originalDataSet.AcceptChanges()

    ' Print out values of each table in the DataSet
    ' using the function defined below.
    PrintValues(originalDataSet, "Original DataSet")

    ' Write the schema and data to XML file with FileStream.
    Dim xmlFilename As String = "XmlDocument.xml"
    Dim streamWrite As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Create)

    ' Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite)

    ' Close the FileStream.
    streamWrite.Close()

    ' Dispose of the original DataSet.
    originalDataSet.Dispose()
    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")

    ' Read the XML document back in.
    ' Create new FileStream to read schema with.
    Dim streamRead As New System.IO.FileStream _
       (xmlFilename, System.IO.FileMode.Open)

    newDataSet.ReadXml(streamRead)
    ' Print out values of each table in the DataSet
    ' using the function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub

Private Sub PrintValues(dataSet As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    Dim row As DataRow
    Dim column As DataColumn
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)
        For Each row In  table.Rows
            For Each column In  table.Columns
                Console.Write(ControlChars.Tab & " " & _
                   row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
End Sub

private void DemonstrateReadWriteXMLDocumentWithFileStream()
{
    // Create a DataSet with one table and two columns.
    DataSet originalDataSet = new DataSet("dataSet");
    DataTable table = new DataTable("table");
    DataColumn idColumn = new DataColumn("id",
        Type.GetType("System.Int32"));
    idColumn.AutoIncrement= true;

    DataColumn itemColumn = new DataColumn("item");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);
    originalDataSet.Tables.Add(table);
    // Add ten rows.

    DataRow newRow;
    for(int i = 0; i < 10; i++)
    {
        newRow = table.NewRow();
        newRow["item"]= "item " + i;
        table.Rows.Add(newRow);
    }
    originalDataSet.AcceptChanges();

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(originalDataSet, "Original DataSet");

    // Write the schema and data to XML file with FileStream.
    string xmlFilename = "XmlDocument.xml";
    System.IO.FileStream streamWrite = new System.IO.FileStream
        (xmlFilename, System.IO.FileMode.Create);

    // Use WriteXml to write the XML document.
    originalDataSet.WriteXml(streamWrite);

    // Close the FileStream.
    streamWrite.Close();

    // Dispose of the original DataSet.
    originalDataSet.Dispose();
    // Create a new DataSet.
    DataSet newDataSet = new DataSet("New DataSet");

    // Read the XML document back in.
    // Create new FileStream to read schema with.
    System.IO.FileStream streamRead = new System.IO.FileStream
        (xmlFilename,System.IO.FileMode.Open);
    newDataSet.ReadXml(streamRead);

    // Print out values of each table in the DataSet
    // using the function defined below.
    PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet dataSet, string label)
{
    Console.WriteLine("\n" + label);
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine("TableName: " + table.TableName);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table " + row[column] );
            }
            Console.WriteLine();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXml 方法 (XmlWriter, XmlWriteMode)

DataSet
.
.
::
.
WriteXml 方法 (XmlWriter, XmlWriteMode)
DataSet 类

使用指定的 XmlWriter 和 XmlWriteMode 写入 DataSet 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。 使用指定的 XmlWriter 和 XmlWriteMode 写入 DataSet 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As XmlWriter, _
    mode As XmlWriteMode _
)
public void WriteXml(
    XmlWriter writer,
    XmlWriteMode mode
)
public:
void WriteXml(
    XmlWriter^ writer,
    XmlWriteMode mode
)
member WriteXml :
        writer:XmlWriter *
        mode:XmlWriteMode -> unit

参数

writer
类型： System.Xml XmlWriter
用其进行写操作的 XmlWriter。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要写入数据和架构，请将 mode 参数设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataSet 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要写入数据和架构，请将 mode 参数设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataSet，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

下面的示例创建 System.IO..::.FileStream 对象，该对象用于创建新的 System.Xml..::.XmlTextWriter。XmlTextWriter 对象和 WriteXml 方法一起用于写 XML 文档。 下面的示例创建 System.IO..::.FileStream 对象，该对象用于创建新的 System.Xml..::.XmlTextWriter。XmlTextWriter 对象和 WriteXml 方法一起用于写 XML 文档。

Private Sub WriteXmlToFile(thisDataSet As DataSet)
    If thisDataSet Is Nothing Then
        Return
    End If

    ' Create a file name to write to.
    Dim filename As String = "XmlDoc.xml"

    ' Create the FileStream to write with.
    Dim stream As New System.IO.FileStream _
       (filename, System.IO.FileMode.Create)

    ' Create an XmlTextWriter with the fileStream.
    Dim xmlWriter As New System.Xml.XmlTextWriter _
       (stream, System.Text.Encoding.Unicode)

    ' Write to the file with the WriteXml method.
    thisDataSet.WriteXml(xmlWriter)
    xmlWriter.Close()
End Sub

private void WriteXmlToFile(DataSet thisDataSet)
{
    if (thisDataSet == null) { return; }

    // Create a file name to write to.
    string filename = "XmlDoc.xml";

    // Create the FileStream to write with.
    System.IO.FileStream stream = new System.IO.FileStream
        (filename, System.IO.FileMode.Create);

    // Create an XmlTextWriter with the fileStream.
    System.Xml.XmlTextWriter xmlWriter =
        new System.Xml.XmlTextWriter(stream,
        System.Text.Encoding.Unicode);

    // Write to the file with the WriteXml method.
    thisDataSet.WriteXml(xmlWriter);
    xmlWriter.Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXmlSchema 方法

DataSet
.
.
::
.
WriteXmlSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

写 XML 架构形式的 DataSet 结构。

名称 说明
页首

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXmlSchema 方法 (Stream)

DataSet
.
.
::
.
WriteXmlSchema 方法 (Stream)
DataSet 类

将 DataSet 结构作为一个 XML 架构写入指定的 System.IO..::.Stream 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    stream As Stream _
)
public void WriteXmlSchema(
    Stream stream
)
public:
void WriteXmlSchema(
    Stream^ stream
)
member WriteXmlSchema :
        stream:Stream -> unit

参数

stream
类型： System.IO Stream
用于写入文件的 Stream 对象。

使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

从 Stream 类派生的类包括 BufferedStream、FileStream、MemoryStream 和 NetworkStream。

下面的示例创建新的 FileStream 对象，该对象传递到 WriteXmlSchema 方法以便将架构写入磁盘。

Private Sub WriteSchemaWithFileStream(thisDataSet As DataSet)
    ' Set the file path and name. Modify this for your purposes.
    Dim filename As String = "Schema.xml"

    ' Create the FileStream object with the file name.
    ' Use FileMode.Create.
    Dim stream As New System.IO.FileStream _
        (filename, System.IO.FileMode.Create)

    ' Write the schema to the file.
    thisDataSet.WriteXmlSchema(stream)

    ' Close the FileStream.
    stream.Close()
End Sub

private void WriteSchemaWithFileStream(DataSet thisDataSet)
{
    // Set the file path and name. Modify this for your purposes.
    string filename="Schema.xml";

    // Create the FileStream object with the file name.
    // Use FileMode.Create.
    System.IO.FileStream stream =
        new System.IO.FileStream(filename,System.IO.FileMode.Create);

    // Write the schema to the file.
    thisDataSet.WriteXmlSchema(stream);

    // Close the FileStream.
    stream.Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXmlSchema 方法 (String)

DataSet
.
.
::
.
WriteXmlSchema 方法 (String)
DataSet 类

将 XML 架构形式的 DataSet 结构写入文件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    fileName As String _
)
public void WriteXmlSchema(
    string fileName
)
public:
void WriteXmlSchema(
    String^ fileName
)
member WriteXmlSchema :
        fileName:string -> unit

参数

fileName
类型： System String
要向其写入的文件的名称（包括路径）。
异常 | 条件
SecurityException | FileIOPermission 未设置为 Write。

使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

Private Sub WriteSchemaToFile(thisDataSet As DataSet)
    ' Set the file path and name. Modify this for your purposes.
    Dim filename As String = "Schema.xml"

    ' Write the schema to the file.
    thisDataSet.WriteXmlSchema(filename)
End Sub

private void WriteSchemaToFile(DataSet thisDataSet)
{
    // Set the file path and name. Modify this for your purposes.
    string filename="Schema.xml";

    // Write the schema to the file.
    thisDataSet.WriteXmlSchema(filename);
}
  • FileIOPermission

    用于读取和写入文件。关联的枚举：FileIOPermissionAccess 用于读取和写入文件。关联的枚举：FileIOPermissionAccess

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXmlSchema 方法 (TextWriter)

DataSet
.
.
::
.
WriteXmlSchema 方法 (TextWriter)
DataSet 类

将 DataSet 结构作为一个 XML 架构写入指定的 TextWriter 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    writer As TextWriter _
)
public void WriteXmlSchema(
    TextWriter writer
)
public:
void WriteXmlSchema(
    TextWriter^ writer
)
member WriteXmlSchema :
        writer:TextWriter -> unit

参数

writer
类型： System.IO TextWriter
用其进行写操作的 TextWriter 对象。

使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

从 System.IO..::.TextWriter 类派生的类包括 System.Web..::.HttpWriter、IndentedTextWriter、System.Web.UI..::.HtmlTextWriter、System.IO..::.StreamWriter 和 System.IO..::.StringWriter。

下面的示例创建 System.Text..::.StringBuilder 对象，该对象用于创建新的 System.IO..::.StringWriter。StringWriter 传递给 WriteXmlSchema 方法，结果字符串将打印到控制台窗口。 下面的示例创建 System.Text..::.StringBuilder 对象，该对象用于创建新的 System.IO..::.StringWriter。StringWriter 传递给 WriteXmlSchema 方法，结果字符串将打印到控制台窗口。

Private Sub WriteSchemaWithStringWriter(thisDataSet As DataSet)
    ' Create a new StringBuilder object.
    Dim builder As New System.Text.StringBuilder()

    ' Create the StringWriter object with the StringBuilder object.
    Dim writer As New System.IO.StringWriter(builder)

    ' Write the schema into the StringWriter.
    thisDataSet.WriteXmlSchema(writer)

    ' Print the string to the console window.
    Console.WriteLine(writer.ToString())
End Sub

private void WriteSchemaWithStringWriter(DataSet thisDataSet)
{
    // Create a new StringBuilder object.
    System.Text.StringBuilder builder = new System.Text.StringBuilder();

    // Create the StringWriter object with the StringBuilder object.
    System.IO.StringWriter writer = new System.IO.StringWriter(builder);

    // Write the schema into the StringWriter.
    thisDataSet.WriteXmlSchema(writer);

    // Print the string to the console window.
    Console.WriteLine(writer.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXmlSchema 方法 (XmlWriter)

DataSet
.
.
::
.
WriteXmlSchema 方法 (XmlWriter)
DataSet 类

将 XML 架构形式的 DataSet 结构写入 XmlWriter 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    writer As XmlWriter _
)
public void WriteXmlSchema(
    XmlWriter writer
)
public:
void WriteXmlSchema(
    XmlWriter^ writer
)
member WriteXmlSchema :
        writer:XmlWriter -> unit

参数

writer
类型： System.Xml XmlWriter
要写入的 XmlWriter。

使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。 使用 WriteXmlSchema 方法将 DataSet 的架构写入 XML 文档。架构包括表、关系和约束定义。若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

从 System.Xml..::.XmlWriter 类继承的一个类是 System.Xml..::.XmlTextWriter 类。

下面的示例用指定路径创建新的 System.IO..::.FileStream 对象。FileStream 对象用于创建 XMLTextWriter 对象。然后调用 WriteXmlSchema 方法和 XmlTextWriter 对象以便将架构写入磁盘。 下面的示例用指定路径创建新的 System.IO..::.FileStream 对象。FileStream 对象用于创建 XMLTextWriter 对象。然后调用 WriteXmlSchema 方法和 XmlTextWriter 对象以便将架构写入磁盘。 下面的示例用指定路径创建新的 System.IO..::.FileStream 对象。FileStream 对象用于创建 XMLTextWriter 对象。然后调用 WriteXmlSchema 方法和 XmlTextWriter 对象以便将架构写入磁盘。

Private Sub WriteSchemaWithXmlTextWriter(thisDataSet As DataSet)
    ' Set the file path and name. Modify this for your purposes.
    Dim filename As String = "SchemaDoc.xml"

    ' Create a FileStream object with the file path and name.
    Dim stream As New System.IO.FileStream _
       (filename, System.IO.FileMode.Create)

    ' Create a new XmlTextWriter object with the FileStream.
    Dim writer As New System.Xml.XmlTextWriter _
       (stream, System.Text.Encoding.Unicode)

    ' Write the schema into the DataSet and close the reader.
    thisDataSet.WriteXmlSchema(writer)
    writer.Close()
End Sub

private void WriteSchemaWithXmlTextWriter(DataSet thisDataSet)
{
    // Set the file path and name. Modify this for your purposes.
    string filename="SchemaDoc.xml";

    // Create a FileStream object with the file path and name.
    System.IO.FileStream stream = new System.IO.FileStream
        (filename,System.IO.FileMode.Create);

    // Create a new XmlTextWriter object with the FileStream.
    System.Xml.XmlTextWriter writer =
        new System.Xml.XmlTextWriter(stream,
        System.Text.Encoding.Unicode);

    // Write the schema into the DataSet and close the reader.
    thisDataSet.WriteXmlSchema(writer );
    writer.Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.WriteXmlSchema 方法 (Stream, Converter <(Of <(Type, String >)>))

DataSet
.
.
::
.
WriteXmlSchema 方法 (Stream, Converter
<
(Of
<
(
Type, String
>
)
>
)
)
DataSet 类

将 DataSet 结构作为一个 XML 架构写入指定的 System.IO..::.Stream 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    stream As Stream, _
    multipleTargetConverter As Converter(Of Type, String) _
)
public void WriteXmlSchema(
    Stream stream,
    Converter<Type, string> multipleTargetConverter
)
public:
void WriteXmlSchema(
    Stream^ stream,
    Converter<Type^, String^>^ multipleTargetConverter
)
member WriteXmlSchema :
        stream:Stream *
        multipleTargetConverter:Converter<Type, string> -> unit

参数

stream
类型： System.IO Stream
要写入到的 System.IO..::.Stream 对象。
multipleTargetConverter
类型： System Converter
<
(Of
<
(
Type, String
>
)
>
)

用于将 Type 转换为字符串的委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
WriteXmlSchema 重载
System.Data 命名空间


DataSet ..::.WriteXmlSchema 方法 (String, Converter <(Of <(Type, String >)>))

DataSet
.
.
::
.
WriteXmlSchema 方法 (String, Converter
<
(Of
<
(
Type, String
>
)
>
)
)
DataSet 类

将 XML 架构形式的 DataSet 结构写入文件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    fileName As String, _
    multipleTargetConverter As Converter(Of Type, String) _
)
public void WriteXmlSchema(
    string fileName,
    Converter<Type, string> multipleTargetConverter
)
public:
void WriteXmlSchema(
    String^ fileName,
    Converter<Type^, String^>^ multipleTargetConverter
)
member WriteXmlSchema :
        fileName:string *
        multipleTargetConverter:Converter<Type, string> -> unit

参数

fileName
类型： System String
要写入的文件的名称。
multipleTargetConverter
类型： System Converter
<
(Of
<
(
Type, String
>
)
>
)

用于将 Type 转换为字符串的委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
WriteXmlSchema 重载
System.Data 命名空间


DataSet ..::.WriteXmlSchema 方法 (TextWriter, Converter <(Of <(Type, String >)>))

DataSet
.
.
::
.
WriteXmlSchema 方法 (TextWriter, Converter
<
(Of
<
(
Type, String
>
)
>
)
)
DataSet 类

将 DataSet 结构作为一个 XML 架构写入指定的 TextWriter。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    writer As TextWriter, _
    multipleTargetConverter As Converter(Of Type, String) _
)
public void WriteXmlSchema(
    TextWriter writer,
    Converter<Type, string> multipleTargetConverter
)
public:
void WriteXmlSchema(
    TextWriter^ writer,
    Converter<Type^, String^>^ multipleTargetConverter
)
member WriteXmlSchema :
        writer:TextWriter *
        multipleTargetConverter:Converter<Type, string> -> unit

参数

writer
类型： System.IO TextWriter
要写入到的 TextWriter 对象。
multipleTargetConverter
类型： System Converter
<
(Of
<
(
Type, String
>
)
>
)

用于将 Type 转换为字符串的委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
WriteXmlSchema 重载
System.Data 命名空间


DataSet ..::.WriteXmlSchema 方法 (XmlWriter, Converter <(Of <(Type, String >)>))

DataSet
.
.
::
.
WriteXmlSchema 方法 (XmlWriter, Converter
<
(Of
<
(
Type, String
>
)
>
)
)
DataSet 类

将 DataSet 结构作为一个 XML 架构写入指定的 XmlWriter。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    writer As XmlWriter, _
    multipleTargetConverter As Converter(Of Type, String) _
)
public void WriteXmlSchema(
    XmlWriter writer,
    Converter<Type, string> multipleTargetConverter
)
public:
void WriteXmlSchema(
    XmlWriter^ writer,
    Converter<Type^, String^>^ multipleTargetConverter
)
member WriteXmlSchema :
        writer:XmlWriter *
        multipleTargetConverter:Converter<Type, string> -> unit

参数

writer
类型： System.Xml XmlWriter
要写入到的 XmlWriter 对象。
multipleTargetConverter
类型： System Converter
<
(Of
<
(
Type, String
>
)
>
)

用于将 Type 转换为字符串的委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
WriteXmlSchema 重载
System.Data 命名空间


DataSet 属性

DataSet 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

DataSet 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataSet 类
System.Data 命名空间


DataSet ..::.CaseSensitive 属性

DataSet
.
.
::
.
CaseSensitive 属性
DataSet 类

获取或设置一个值，该值指示 DataTable 对象中的字符串比较是否区分大小写。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property CaseSensitive As Boolean
    Get
    Set
public bool CaseSensitive { get; set; }
public:
property bool CaseSensitive {
    bool get ();
    void set (bool value);
}
member CaseSensitive : bool with get, set

属性值

类型： System Boolean
如果字符串比较区分大小写，则为 true；否则为 false。默认为 false。 如果字符串比较区分大小写，则为 true；否则为 false。默认为 false。

CaseSensitive 属性影响在使用 Select 方法时，如何对 DataSet 中包含的每个 DataTable 对象执行排序、搜索和筛选操作。

在默认情况下，为 DataSet 设置 CaseSensitive 属性时还将每个相关的 DataTable 的 CaseSensitive 属性设置为同一个值。

下面的示例切换 CaseSensitive 属性。

DataSet1.CaseSensitive = DataSet1.CaseSensitive Xor True

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.DataSetName 属性

DataSet
.
.
::
.
DataSetName 属性
DataSet 类

获取或设置当前 DataSet 的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property DataSetName As String
    Get
    Set
public string DataSetName { get; set; }
public:
property String^ DataSetName {
    String^ get ();
    void set (String^ value);
}
member DataSetName : string with get, set

属性值

类型： System String
DataSet 的名称。

下面的示例创建一个具有给定 DataSetName 的新 DataSet。

Private Sub CreateDataSet()
    Dim dataSet As DataSet
    dataSet = New DataSet("SuppliersProducts")
    Console.WriteLine(dataSet.DataSetName)
End Sub

private void CreateDataSet()
{
    DataSet dataSet = new DataSet("SuppliersProducts");
    Console.WriteLine(dataSet.DataSetName);

    // Add a DataTable.
    dataSet.Tables.Add(new DataTable("Suppliers"));

    // Add a DataColumn to the DataTable.
    dataSet.Tables["Suppliers"].Columns.Add
        (new DataColumn("CompanyName",
        System.Type.GetType("System.String")));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.DefaultViewManager 属性

DataSet
.
.
::
.
DefaultViewManager 属性
DataSet 类

获取 DataSet 所包含的数据的自定义视图，以允许使用自定义的 DataViewManager 进行筛选、搜索和导航。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property DefaultViewManager As DataViewManager
    Get
[BrowsableAttribute(false)]
public DataViewManager DefaultViewManager { get; }
[BrowsableAttribute(false)]
public:
property DataViewManager^ DefaultViewManager {
    DataViewManager^ get ();
}
[<BrowsableAttribute(false)>]
member DefaultViewManager : DataViewManager

属性值

类型： System.Data DataViewManager
DataViewManager。

由 DefaultViewManager 属性返回的 DataViewManager 允许您为 DataSet 中的每个 DataTable 创建自定义设置。

当从 DataTable 获取 DataView 时，将根据 DefaultViewManager 属性中的设置配置排序顺序、筛选和 DataViewRowState。

下面的示例获取 DataSet 的默认 DataViewManager，并将 DataTable 添加到 DataTableCollection 中。

Private Sub GetDefaultDataViewManager()
    ' Get a DataSet object's DefaultViewManager.
     Dim view As DataViewManager = DataSet1.DefaultViewManager

    ' Add a DataTable to the DataTableCollection.
    Dim table As DataTable
    table = New DataTable("TableName")
    view.DataSet.Tables.Add(table)
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.EnforceConstraints 属性

DataSet
.
.
::
.
EnforceConstraints 属性
DataSet 类

获取或设置一个值，该值指示在尝试执行任何更新操作时是否遵循约束规则。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property EnforceConstraints As Boolean
    Get
    Set
public bool EnforceConstraints { get; set; }
public:
property bool EnforceConstraints {
    bool get ();
    void set (bool value);
}
member EnforceConstraints : bool with get, set

属性值

类型： System Boolean
如果实施规则，则为 true；否则为 false。默认为 true。 如果实施规则，则为 true；否则为 false。默认为 true。
异常 | 条件
ConstraintException | 无法实施一个或多个约束。

约束在 DataTable 级别（Constraints 属性）设置。有关创建约束的更多信息，请参见 数据表约束 (ADO.NET)。 约束在 DataTable 级别（Constraints 属性）设置。有关创建约束的更多信息，请参见 数据表约束 (ADO.NET)。

下面的示例创建一个 DataSet，该数据集包含一个表、一个列、五个行和一个 UniqueConstraint。EnforceConstraints 属性被设置为 false，每一行的值都设置为同一个值。如果 EnforceConstraints 属性被重置为 true，则生成 ConstraintException。 下面的示例创建一个 DataSet，该数据集包含一个表、一个列、五个行和一个 UniqueConstraint。EnforceConstraints 属性被设置为 false，每一行的值都设置为同一个值。如果 EnforceConstraints 属性被重置为 true，则生成 ConstraintException。 下面的示例创建一个 DataSet，该数据集包含一个表、一个列、五个行和一个 UniqueConstraint。EnforceConstraints 属性被设置为 false，每一行的值都设置为同一个值。如果 EnforceConstraints 属性被重置为 true，则生成 ConstraintException。

Private Sub DemonstrateEnforceConstraints()
    ' Create a DataSet with one table, one column and
    ' a UniqueConstraint.
    Dim dataSet As DataSet = New DataSet("dataSet")
    Dim table As DataTable = New DataTable("table")
    Dim column As DataColumn = New DataColumn("col1")
    column.Unique = True
    table.Columns.Add(column)
    dataSet.Tables.Add(table)
    Console.WriteLine("constraints.count: " _
        & table.Constraints.Count)

    ' add five rows.
    Dim row As DataRow
    Dim i As Integer
    For i = 0 To 4
       row = table.NewRow()
       row("col1") = i
       table.Rows.Add(row)
    Next
    table.AcceptChanges()

    dataSet.EnforceConstraints = False
    ' Change the values of all rows to 1.
    Dim thisRow As DataRow
    For Each thisRow In table.rows
       thisRow("col1") = 1
    Next

    Try
        dataSet.EnforceConstraints = True
    Catch e As System.Data.ConstraintException
        ' Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", _
            e.GetType().ToString())
    End Try
End Sub

private void DemonstrateEnforceConstraints()
{
    // Create a DataSet with one table, one column and
    // a UniqueConstraint.
    DataSet dataSet= new DataSet("dataSet");
    DataTable table = new DataTable("table");
    DataColumn column = new DataColumn("col1");

    // A UniqueConstraint is added when the Unique
    // property is true.
    column.Unique=true;
    table.Columns.Add(column);
    dataSet.Tables.Add(table);
    Console.WriteLine("constraints.count: " +
        table.Constraints.Count);

    // add five rows.
    DataRow row ;
    for(int i=0;i<5;i++)
    {
        row = table.NewRow();
        row["col1"] = i;
        table.Rows.Add(row);
    }
    table.AcceptChanges();

    dataSet.EnforceConstraints=false;
    // Change the values of all rows to 1.
    foreach(DataRow thisRow in table.Rows)
    {
        thisRow["col1"]=1;
        //Console.WriteLine("\table" + thisRow[0]);
    }
    try
    {
        dataSet.EnforceConstraints=true;
    }
    catch(System.Data.ConstraintException e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.ExtendedProperties 属性

DataSet
.
.
::
.
ExtendedProperties 属性
DataSet 类

获取与 DataSet 相关的自定义用户信息的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property ExtendedProperties As PropertyCollection
    Get
[BrowsableAttribute(false)]
public PropertyCollection ExtendedProperties { get; }
[BrowsableAttribute(false)]
public:
property PropertyCollection^ ExtendedProperties {
    PropertyCollection^ get ();
}
[<BrowsableAttribute(false)>]
member ExtendedProperties : PropertyCollection

属性值

类型： System.Data PropertyCollection
包含所有自定义用户信息的 PropertyCollection。

ExtendedProperties 属性允许您使用 DataSet 存储自定义信息。例如，您可能要存储数据应被刷新的时间。 ExtendedProperties 属性允许您使用 DataSet 存储自定义信息。例如，您可能要存储数据应被刷新的时间。

如果您希望在以 XML 形式写入 DataSet 时保持扩展属性，则扩展属性必须采用 String 类型。

下面的示例将自定义属性添加到由 ExtendedProperties 属性返回的 PropertyCollection 中。第二个示例检索该自定义属性。 下面的示例将自定义属性添加到由 ExtendedProperties 属性返回的 PropertyCollection 中。第二个示例检索该自定义属性。

 Private Sub SetProperty(column As DataColumn)
     column.ExtendedProperties.Add("TimeStamp", DateTime.Now)
 End Sub

 Private Sub GetProperty(column As DataColumn)
     Console.WriteLine(column.ExtendedProperties("TimeStamp").ToString())
End Sub

private void SetProperty(DataColumn column)
{
    column.ExtendedProperties.Add("TimeStamp", DateTime.Now);
}

private void GetProperty(DataColumn column)
{
    Console.WriteLine(column.ExtendedProperties["TimeStamp"].ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.HasErrors 属性

DataSet
.
.
::
.
HasErrors 属性
DataSet 类

获取一个值，指示在此 DataSet 中的任何 DataTable 对象中是否存在错误。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property HasErrors As Boolean
    Get
[BrowsableAttribute(false)]
public bool HasErrors { get; }
[BrowsableAttribute(false)]
public:
property bool HasErrors {
    bool get ();
}
[<BrowsableAttribute(false)>]
member HasErrors : bool

属性值

类型： System Boolean
如果任何表中包含错误，则为 true，否则为 false。

DataSet 中的每个 DataTable 还具有 HasErrors 属性。先使用 DataSet 的 HasErrors 属性以确定任何表中是否有错误，然后再检查单个 DataTable 对象。如果 DataTable 中有错误，GetErrors 方法将返回包含错误的 DataRow 对象的数组。 DataSet 中的每个 DataTable 还具有 HasErrors 属性。先使用 DataSet 的 HasErrors 属性以确定任何表中是否有错误，然后再检查单个 DataTable 对象。如果 DataTable 中有错误，GetErrors 方法将返回包含错误的 DataRow 对象的数组。 DataSet 中的每个 DataTable 还具有 HasErrors 属性。先使用 DataSet 的 HasErrors 属性以确定任何表中是否有错误，然后再检查单个 DataTable 对象。如果 DataTable 中有错误，GetErrors 方法将返回包含错误的 DataRow 对象的数组。

下面的示例使用 HasErrors 属性确定 DataSet 对象中是否包含错误。如果有错误，则打印每个 DataTable 中每个 DataRow 的错误。 下面的示例使用 HasErrors 属性确定 DataSet 对象中是否包含错误。如果有错误，则打印每个 DataTable 中每个 DataRow 的错误。

Private Sub CheckForErrors()
    If Not DataSet1.HasErrors Then
        DataSet1.Merge(DataSet2)
    Else
       PrintRowErrs(DataSet1)
    End If
End Sub

Private Sub PrintRowErrs(ByVal dataSet As DataSet)
    Dim row As DataRow
    Dim table As DataTable
    For Each table In  dataSet.Tables
       For Each row In table.Rows
          If row.HasErrors Then
             Console.WriteLine(row.RowError)
          End If
       Next
    Next
End Sub

private void CheckForErrors()
{
    if(!DataSet1.HasErrors)
    {
        DataSet1.Merge(DataSet2);
    }
    else
    {
        PrintRowErrs(DataSet1);
    }
}

private void PrintRowErrs(DataSet dataSet)
{
    foreach(DataTable table in dataSet.Tables)
    {
        foreach(DataRow row in table.Rows)
        {
            if(row.HasErrors)
            {
                Console.WriteLine(row.RowError);
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.IListSource ..::.ContainsListCollection 属性

DataSet
.
.
::
.
IListSource
.
.
::
.
ContainsListCollection 属性
DataSet 类

有关此成员的说明，请参见 IListSource..::.ContainsListCollection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property ContainsListCollection As Boolean
    Implements IListSource.ContainsListCollection
    Get
bool IListSource.ContainsListCollection { get; }
private:
virtual property bool ContainsListCollection {
    bool get () sealed = IListSource::ContainsListCollection::get;
}
private abstract ContainsListCollection : bool
private override ContainsListCollection : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IListSource..::.ContainsListCollection。

实现

此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IListSource 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间


DataSet ..::.IsInitialized 属性

DataSet
.
.
::
.
IsInitialized 属性
DataSet 类

获取一个值，该值表明是否初始化 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property IsInitialized As Boolean
    Get
[BrowsableAttribute(false)]
public bool IsInitialized { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsInitialized {
    bool get () sealed;
}
[<BrowsableAttribute(false)>]
abstract IsInitialized : bool
[<BrowsableAttribute(false)>]
override IsInitialized : bool

属性值

类型： System Boolean
true 表明组件已完成初始化；否则为 false。

实现

当构造 DataSet 时，由 Visual Studio 等返回状态。BeginInit 方法将它设置为 false，而 EndInit 方法将它设置为 true。 当构造 DataSet 时，由 Visual Studio 等返回状态。BeginInit 方法将它设置为 false，而 EndInit 方法将它设置为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Locale 属性

DataSet
.
.
::
.
Locale 属性
DataSet 类

获取或设置用于比较表中字符串的区域设置信息。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Locale As CultureInfo
    Get
    Set
public CultureInfo Locale { get; set; }
public:
property CultureInfo^ Locale {
    CultureInfo^ get ();
    void set (CultureInfo^ value);
}
member Locale : CultureInfo with get, set

属性值

类型： System.Globalization CultureInfo
一个 CultureInfo，它包含有关用户计算机区域设置的数据。默认为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 一个 CultureInfo，它包含有关用户计算机区域设置的数据。默认为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Locale 属性指定用于排序的区域设置。

在默认情况下，为 DataSet 设置 Locale 时还将该 DataSet 中的每个 DataTable 对象的 Locale 设置为同一个值。

说明 说明

在包含表达式的列中，使用 InvariantCulture。忽略 CurrentCulture。 在包含表达式的列中，使用 InvariantCulture。忽略 CurrentCulture。

下面的示例获取 DataSet 的 CultureInfo，并打印 DisplayName 和 EnglishName 属性。

Private Sub GetCultureInfo()
   Dim culture As System.Globalization.CultureInfo
   culture = DataSet1.Locale
   Console.WriteLine(culture.DisplayName, culture.EnglishName)
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Namespace 属性

DataSet
.
.
::
.
Namespace 属性
DataSet 类

获取或设置 DataSet 的命名空间。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Namespace As String
    Get
    Set
public string Namespace { get; set; }
public:
property String^ Namespace {
    String^ get ();
    void set (String^ value);
}
member Namespace : string with get, set

属性值

类型： System String
DataSet 的命名空间。
异常 | 条件
ArgumentException | 该命名空间已有数据。

在使用 ReadXml、WriteXml、ReadXmlSchema 或 WriteXmlSchema 方法将 XML 文档读写到 DataSet 中时，使用 Namespace 属性。

当读入 DataSet 时，XML 文档的命名空间用于确定 XML 特性和元素的范围。例如，如果 DataSet 包含从一个命名空间为“myCompany”的文档中读取的架构，并尝试只从具有其他命名空间的文档中读取数据，则忽略与现有架构不对应的数据。 当读入 DataSet 时，XML 文档的命名空间用于确定 XML 特性和元素的范围。例如，如果 DataSet 包含从一个命名空间为“myCompany”的文档中读取的架构，并尝试只从具有其他命名空间的文档中读取数据，则忽略与现有架构不对应的数据。

下面的示例在调用 ReadXml 方法之前设置 Prefix。

Private Sub ReadData(thisDataSet As DataSet)
    thisDataSet.Namespace = "CorporationA"
    thisDataSet.Prefix = "DivisionA"

    ' Read schema and data.
    Dim fileName As String = "CorporationA_Schema.xml"
    thisDataSet.ReadXmlSchema(fileName)
    fileName = "DivisionA_Report.xml"
    thisDataSet.ReadXml(fileName)
End Sub

private void ReadData(DataSet thisDataSet)
{
    thisDataSet.Namespace = "CorporationA";
    thisDataSet.Prefix = "DivisionA";

    // Read schema and data.
    string fileName = "CorporationA_Schema.xml";
    thisDataSet.ReadXmlSchema(fileName);
    fileName = "DivisionA_Report.xml";
    thisDataSet.ReadXml(fileName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Prefix 属性

DataSet
.
.
::
.
Prefix 属性
DataSet 类

获取或设置一个 XML 前缀，该前缀是 DataSet 的命名空间的别名。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Prefix As String
    Get
    Set
public string Prefix { get; set; }
public:
property String^ Prefix {
    String^ get ();
    void set (String^ value);
}
member Prefix : string with get, set

属性值

类型： System String
DataSet 命名空间的 XML 前缀。

Prefix 属性用于整个 XML 文档，目的是标识属于 DataSet 对象的命名空间（按 Namespace 属性的设置）的元素。

下面的示例在调用 ReadXml 方法之前设置 Prefix。

Private Sub ReadData(thisDataSet As DataSet)
    thisDataSet.Namespace = "CorporationA"
    thisDataSet.Prefix = "DivisionA"

    ' Read schema and data.
    Dim fileName As String = "CorporationA_Schema.xml"
    thisDataSet.ReadXmlSchema(fileName)
    fileName = "DivisionA_Report.xml"
    thisDataSet.ReadXml(fileName)
End Sub

private void ReadData(DataSet thisDataSet)
{
    thisDataSet.Namespace = "CorporationA";
    thisDataSet.Prefix = "DivisionA";

    // Read schema and data.
    string fileName = "CorporationA_Schema.xml";
    thisDataSet.ReadXmlSchema(fileName);
    fileName = "DivisionA_Report.xml";
    thisDataSet.ReadXml(fileName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Relations 属性

DataSet
.
.
::
.
Relations 属性
DataSet 类

获取用于将表链接起来并允许从父表浏览到子表的关系的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Relations As DataRelationCollection
    Get
public DataRelationCollection Relations { get; }
public:
property DataRelationCollection^ Relations {
    DataRelationCollection^ get ();
}
member Relations : DataRelationCollection

属性值

类型： System.Data DataRelationCollection
包含一个 DataRelation 对象集合的 DataRelationCollection。如果 DataRelation 对象不存在，将返回空集合。 包含一个 DataRelation 对象集合的 DataRelationCollection。如果 DataRelation 对象不存在，将返回空集合。

下面的示例通过 Relations 属性打印所有子表的列名。

Private Sub PrintChildRelationRows()
   ' Declare variable to hold the row values.
   Dim rowValues As String
   Dim dataSet As DataSet

   ' Get the DataSet of a DataGrid that is displaying data
   ' of at least two tables.
   Dim table As DataTable = CType(DataGrid1.DataSource, DataTable)

   ' Navigate using the Relations.
   Dim relation As DataRelation
   Dim row As DataRow
   Dim column As DataColumn

   ' Print the names of each column in each table.
   For Each relation In dataSet.Relations
      For Each column in relation.ChildTable.Columns
          rowValues &= column.ColumnName & " "
      Next
    Next

    ' Display results.
    Console.WriteLine(rowValues)
   End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.RemotingFormat 属性

DataSet
.
.
::
.
RemotingFormat 属性
DataSet 类

为远程处理期间使用的 DataSet 获取或设置 SerializationFormat。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property RemotingFormat As SerializationFormat
    Get
    Set
public SerializationFormat RemotingFormat { get; set; }
public:
property SerializationFormat RemotingFormat {
    SerializationFormat get ();
    void set (SerializationFormat value);
}
member RemotingFormat : SerializationFormat with get, set

属性值

类型： System.Data SerializationFormat
一个 SerializationFormat 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.SchemaSerializationMode 属性

DataSet
.
.
::
.
SchemaSerializationMode 属性
DataSet 类

获取或设置 DataSet 的 SchemaSerializationMode。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overridable Property SchemaSerializationMode As SchemaSerializationMode
    Get
    Set
[BrowsableAttribute(false)]
public virtual SchemaSerializationMode SchemaSerializationMode { get; set; }
[BrowsableAttribute(false)]
public:
virtual property SchemaSerializationMode SchemaSerializationMode {
    SchemaSerializationMode get ();
    void set (SchemaSerializationMode value);
}
[<BrowsableAttribute(false)>]
abstract SchemaSerializationMode : SchemaSerializationMode with get, set
[<BrowsableAttribute(false)>]
override SchemaSerializationMode : SchemaSerializationMode with get, set

属性值

类型： System.Data SchemaSerializationMode
获取或设置 DataSet 的 SchemaSerializationMode。

在 Web 服务和远程处理方案中，默认情况下，DataSet 会对其架构和实例数据进行序列化。将类型化 DataSet 的 SchemaSerializationMode 属性设置为 ExcludeSchema 会导致将架构信息从序列化负载中排除。 在 Web 服务和远程处理方案中，默认情况下，DataSet 会对其架构和实例数据进行序列化。将类型化 DataSet 的 SchemaSerializationMode 属性设置为 ExcludeSchema 会导致将架构信息从序列化负载中排除。

仅为类型化 DataSet 提供 ExcludeSchema 支持。对于非类型化 DataSet，此属性只能设置为 IncludeSchema。 仅为类型化 DataSet 提供 ExcludeSchema 支持。对于非类型化 DataSet，此属性只能设置为 IncludeSchema。

仅当基础的类型化 DataTables、DataRelations 和 Constraints 未被修改时，才应使用 ExcludeSchema。如果已进行修改，则应使用 IncludeSchema 对整个架构信息进行序列化。 仅当基础的类型化 DataTables、DataRelations 和 Constraints 未被修改时，才应使用 ExcludeSchema。如果已进行修改，则应使用 IncludeSchema 对整个架构信息进行序列化。

.NET Framework 2.0 版或更高版本中支持 ExcludeSchema。

设置 ExcludeSchema 时，将只对 DataSet 中的顶级运行时属性进行序列化。此外，仅当这些属性碰巧与默认值不同时才对其进行序列化。Tables、Relations 或 Constraints 均不会序列化。已序列化的运行时属性包括 DataSetName、Namespace、Prefix、Locale、EnforceConstraints 和 CaseSensitive。对这些属性进行序列化是为了确保能保持整个运行时数据的完整性。 设置 ExcludeSchema 时，将只对 DataSet 中的顶级运行时属性进行序列化。此外，仅当这些属性碰巧与默认值不同时才对其进行序列化。Tables、Relations 或 Constraints 均不会序列化。已序列化的运行时属性包括 DataSetName、Namespace、Prefix、Locale、EnforceConstraints 和 CaseSensitive。对这些属性进行序列化是为了确保能保持整个运行时数据的完整性。 设置 ExcludeSchema 时，将只对 DataSet 中的顶级运行时属性进行序列化。此外，仅当这些属性碰巧与默认值不同时才对其进行序列化。Tables、Relations 或 Constraints 均不会序列化。已序列化的运行时属性包括 DataSetName、Namespace、Prefix、Locale、EnforceConstraints 和 CaseSensitive。对这些属性进行序列化是为了确保能保持整个运行时数据的完整性。 设置 ExcludeSchema 时，将只对 DataSet 中的顶级运行时属性进行序列化。此外，仅当这些属性碰巧与默认值不同时才对其进行序列化。Tables、Relations 或 Constraints 均不会序列化。已序列化的运行时属性包括 DataSetName、Namespace、Prefix、Locale、EnforceConstraints 和 CaseSensitive。对这些属性进行序列化是为了确保能保持整个运行时数据的完整性。 设置 ExcludeSchema 时，将只对 DataSet 中的顶级运行时属性进行序列化。此外，仅当这些属性碰巧与默认值不同时才对其进行序列化。Tables、Relations 或 Constraints 均不会序列化。已序列化的运行时属性包括 DataSetName、Namespace、Prefix、Locale、EnforceConstraints 和 CaseSensitive。对这些属性进行序列化是为了确保能保持整个运行时数据的完整性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Site 属性

DataSet
.
.
::
.
Site 属性
DataSet 类

获取或设置 DataSet 的 System.ComponentModel..::.ISite。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overrides Property Site As ISite
    Get
    Set
[BrowsableAttribute(false)]
public override ISite Site { get; set; }
[BrowsableAttribute(false)]
public:
virtual property ISite^ Site {
    ISite^ get () override;
    void set (ISite^ value) override;
}
[<BrowsableAttribute(false)>]
abstract Site : ISite with get, set
[<BrowsableAttribute(false)>]
override Site : ISite with get, set

属性值

类型： System.ComponentModel ISite
用于 DataSet 的 ISite。

实现

站点将 Component 绑定到 Container 并启用它们之间的通讯，同时为该容器提供了一种管理其组件的方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.Tables 属性

DataSet
.
.
::
.
Tables 属性
DataSet 类

获取包含在 DataSet 中的表的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Tables As DataTableCollection
    Get
public DataTableCollection Tables { get; }
public:
property DataTableCollection^ Tables {
    DataTableCollection^ get ();
}
member Tables : DataTableCollection

属性值

类型： System.Data DataTableCollection
此 DataSet 包含的 DataTableCollection。如果 DataTable 对象不存在，将返回空集合。 此 DataSet 包含的 DataTableCollection。如果 DataTable 对象不存在，将返回空集合。

若要向集合中添加表，请使用 DataTableCollection 的 Add 方法。若要移除表，请使用 Remove 方法。 若要向集合中添加表，请使用 DataTableCollection 的 Add 方法。若要移除表，请使用 Remove 方法。

下面的示例返回 DataSet 对象的 DataTableCollection，并打印每个表中的列和行。

Private Sub PrintRows(ByVal dataSet As DataSet)
   Dim table As DataTable
   Dim row As DataRow
   Dim column As DataColumn
   ' For each table in the DataSet, print the row values.
   For Each table in dataSet.Tables
      For Each row In table.Rows
         For Each column in table.Columns
            Console.WriteLine(row(column))
         Next column
      Next row
   Next table
End Sub

private void PrintRows(DataSet dataSet)
{
    // For each table in the DataSet, print the row values.
    foreach(DataTable table in dataSet.Tables)
    {
        foreach(DataRow row in table.Rows)
        {
            foreach (DataColumn column in table.Columns)
            {
                Console.WriteLine(row[column]);
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet 事件

DataSet 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSet 类

DataSet 类型公开以下成员。

名称 说明
页首

参考

DataSet 类
System.Data 命名空间


DataSet ..::.Initialized 事件

DataSet
.
.
::
.
Initialized 事件
DataSet 类

在初始化 DataSet 后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event Initialized As EventHandler
public event EventHandler Initialized
public:
virtual  event EventHandler^ Initialized {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
abstract Initialized : IEvent<EventHandler,
    EventArgs>
override Initialized : IEvent<EventHandler,
    EventArgs>

实现

有关更多信息，请参见IsInitialized。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSet ..::.MergeFailed 事件

DataSet
.
.
::
.
MergeFailed 事件
DataSet 类

当目标和源 DataRow 的主键值相同且 EnforceConstraints 设置为真时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event MergeFailed As MergeFailedEventHandler
public event MergeFailedEventHandler MergeFailed
public:
 event MergeFailedEventHandler^ MergeFailed {
    void add (MergeFailedEventHandler^ value);
    void remove (MergeFailedEventHandler^ value);
}
member MergeFailed : IEvent<MergeFailedEventHandler,
    MergeFailedEventArgs>

有关处理事件的更多信息，请参见使用事件。

下面的示例说明 MergeFailed 事件的用法。

Private Shared Sub DemonstrateMergeFailedEvent()
    ' Create a DataSet with one table containing two columns.
    Dim dataSet AS DataSet = New DataSet("dataSet")
    Dim table As DataTable = New DataTable("Items")

    ' Add table to the DataSet.
    dataSet.Tables.Add(table)

    ' Add two columns to the DataTable.
    table.Columns.Add("id", Type.GetType("System.Int32"))
    table.Columns.Add("item", Type.GetType("System.Int32"))

    ' Set the primary key to the first column.
    table.PrimaryKey = new DataColumn() { table.Columns("id") }

    ' Add MergeFailed event handler for the table.
    AddHandler dataSet.MergeFailed, _
        New MergeFailedEventHandler(AddressOf Merge_Failed)

    ' Create a second DataTable identical to the first,
    Dim t2 As DataTable = table.Clone()

    ' Set the primary key of the new table to the second column.
    ' This will cause the MergeFailed event to be raised when the
    ' table is merged into the DataSet.
    t2.PrimaryKey = New DataColumn() { t2.Columns("item") }

    ' Merge table into the DataSet.
    Console.WriteLine("Merging...")
    dataSet.Merge(t2, false, MissingSchemaAction.Add)
End Sub

Private Shared Sub Merge_Failed(sender As object, _
    e As MergeFailedEventArgs)
    Console.WriteLine("Merge_Failed Event: '{0}'", e.Conflict)
End Sub

    private static void DemonstrateMergeFailedEvent()
    {
        // Create a DataSet with one table containing two columns.
        DataSet dataSet = new DataSet("dataSet");
        DataTable table = new DataTable("Items");

        // Add table to the DataSet.
        dataSet.Tables.Add(table);

        // Add two columns to the DataTable.
        table.Columns.Add("id", typeof(int));
        table.Columns.Add("item", typeof(int));

        // Set the primary key to the first column.
        table.PrimaryKey = new DataColumn[] { table.Columns["id"] };

        // Add MergeFailed event handler for the table.
        dataSet.MergeFailed += new MergeFailedEventHandler(Merge_Failed);

        // Create a second DataTable identical to the first,
        DataTable t2 = table.Clone();

        // Set the primary key of the new table to the second column.
        // This will cause the MergeFailed event to be raised when the
        // table is merged into the DataSet.
        t2.PrimaryKey = new DataColumn[] { t2.Columns["item"] };

        // Merge the table into the DataSet.
        Console.WriteLine("Merging...");
        dataSet.Merge(t2, false, MissingSchemaAction.Add);
    }

    private static void Merge_Failed(object sender, MergeFailedEventArgs e)
    {
        Console.WriteLine("Merge_Failed Event: '{0}'", e.Conflict);
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataSet 类
DataSet 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataSetDateTime 枚举

DataSetDateTime 枚举

介绍 DataSet 中 DateTime 列的序列化格式。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration DataSetDateTime
public enum DataSetDateTime
public enum class DataSetDateTime
type DataSetDateTime
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Local | DateTime 始终存储为 Local 格式。如果将 Utc 或 Unspecified 分配给此模式的列，则首先要将其转换为 Local 格式。通常以 Local 格式在此模式中执行序列化。在序列化期间将产生偏移量。 DateTime 始终存储为 Local 格式。如果将 Utc 或 Unspecified 分配给此模式的列，则首先要将其转换为 Local 格式。通常以 Local 格式在此模式中执行序列化。在序列化期间将产生偏移量。 DateTime 始终存储为 Local 格式。如果将 Utc 或 Unspecified 分配给此模式的列，则首先要将其转换为 Local 格式。通常以 Local 格式在此模式中执行序列化。在序列化期间将产生偏移量。 DateTime 始终存储为 Local 格式。如果将 Utc 或 Unspecified 分配给此模式的列，则首先要将其转换为 Local 格式。通常以 Local 格式在此模式中执行序列化。在序列化期间将产生偏移量。
由 XNA Framework 提供支持 | Unspecified | DateTime 始终存储为 Unspecified 格式。如果将 Local 或 Utc 分配给此模式的列，则首先要将其转换为 Unspecified 格式。在此模式中的序列化不会产生偏移量。 DateTime 始终存储为 Unspecified 格式。如果将 Local 或 Utc 分配给此模式的列，则首先要将其转换为 Unspecified 格式。在此模式中的序列化不会产生偏移量。 DateTime 始终存储为 Unspecified 格式。如果将 Local 或 Utc 分配给此模式的列，则首先要将其转换为 Unspecified 格式。在此模式中的序列化不会产生偏移量。
由 XNA Framework 提供支持 | UnspecifiedLocal | DateTime 存储为 Unspecified 格式。如果将 Local 或 Utc 分配给此模式的列，则首先要将其转换为 Unspecified 格式。在此模式中的序列化将产生偏移量。此为默认行为，可向后兼容。应将此选项在存储区中视为 Unspecified 格式，而在序列化期间应用类似于 Local 的偏移量。 DateTime 存储为 Unspecified 格式。如果将 Local 或 Utc 分配给此模式的列，则首先要将其转换为 Unspecified 格式。在此模式中的序列化将产生偏移量。此为默认行为，可向后兼容。应将此选项在存储区中视为 Unspecified 格式，而在序列化期间应用类似于 Local 的偏移量。 DateTime 存储为 Unspecified 格式。如果将 Local 或 Utc 分配给此模式的列，则首先要将其转换为 Unspecified 格式。在此模式中的序列化将产生偏移量。此为默认行为，可向后兼容。应将此选项在存储区中视为 Unspecified 格式，而在序列化期间应用类似于 Local 的偏移量。 DateTime 存储为 Unspecified 格式。如果将 Local 或 Utc 分配给此模式的列，则首先要将其转换为 Unspecified 格式。在此模式中的序列化将产生偏移量。此为默认行为，可向后兼容。应将此选项在存储区中视为 Unspecified 格式，而在序列化期间应用类似于 Local 的偏移量。 DateTime 存储为 Unspecified 格式。如果将 Local 或 Utc 分配给此模式的列，则首先要将其转换为 Unspecified 格式。在此模式中的序列化将产生偏移量。此为默认行为，可向后兼容。应将此选项在存储区中视为 Unspecified 格式，而在序列化期间应用类似于 Local 的偏移量。
由 XNA Framework 提供支持 | Utc | DateTime 存储为协调通用时间 (UTC) 格式。如果将 Local 或 Unspecified 分配给此模式的列，则首先要将其转换为 Utc 格式。通常以 Utc 格式在此模式中执行序列化。序列化时不会产生偏移量。 DateTime 存储为协调通用时间 (UTC) 格式。如果将 Local 或 Unspecified 分配给此模式的列，则首先要将其转换为 Utc 格式。通常以 Utc 格式在此模式中执行序列化。序列化时不会产生偏移量。 DateTime 存储为协调通用时间 (UTC) 格式。如果将 Local 或 Unspecified 分配给此模式的列，则首先要将其转换为 Utc 格式。通常以 Utc 格式在此模式中执行序列化。序列化时不会产生偏移量。 DateTime 存储为协调通用时间 (UTC) 格式。如果将 Local 或 Unspecified 分配给此模式的列，则首先要将其转换为 Utc 格式。通常以 Utc 格式在此模式中执行序列化。序列化时不会产生偏移量。

不能在非 DateTime 列上设置 DataSetDateTime。允许在非 DateTime 列上设置默认值为 UnspecifiedLocal 的 DateTimeMode 属性。将列数据类型从 DateTime 修改为任何其他类型会将 DateTimeMode 重置为默认值 UnspecifiedLocal。 不能在非 DateTime 列上设置 DataSetDateTime。允许在非 DateTime 列上设置默认值为 UnspecifiedLocal 的 DateTimeMode 属性。将列数据类型从 DateTime 修改为任何其他类型会将 DateTimeMode 重置为默认值 UnspecifiedLocal。 不能在非 DateTime 列上设置 DataSetDateTime。允许在非 DateTime 列上设置默认值为 UnspecifiedLocal 的 DateTimeMode 属性。将列数据类型从 DateTime 修改为任何其他类型会将 DateTimeMode 重置为默认值 UnspecifiedLocal。

可在具有匹配 DateTimeMode 属性的 DateTime 列之间执行合并、关系和 ForeignKeyConstraints 架构检查。否则应认为这些列在架构上不匹配。在 Unspecified 和 UnspecifiedLocal 之间例外。允许一个为 Unspecified 另一个为 UnspecifiedLocalDateTimeMode 的两个 DateTime 列之间具有关系或 ForeignKeyConstraint。 可在具有匹配 DateTimeMode 属性的 DateTime 列之间执行合并、关系和 ForeignKeyConstraints 架构检查。否则应认为这些列在架构上不匹配。在 Unspecified 和 UnspecifiedLocal 之间例外。允许一个为 Unspecified 另一个为 UnspecifiedLocalDateTimeMode 的两个 DateTime 列之间具有关系或 ForeignKeyConstraint。 可在具有匹配 DateTimeMode 属性的 DateTime 列之间执行合并、关系和 ForeignKeyConstraints 架构检查。否则应认为这些列在架构上不匹配。在 Unspecified 和 UnspecifiedLocal 之间例外。允许一个为 Unspecified 另一个为 UnspecifiedLocalDateTimeMode 的两个 DateTime 列之间具有关系或 ForeignKeyConstraint。 可在具有匹配 DateTimeMode 属性的 DateTime 列之间执行合并、关系和 ForeignKeyConstraints 架构检查。否则应认为这些列在架构上不匹配。在 Unspecified 和 UnspecifiedLocal 之间例外。允许一个为 Unspecified 另一个为 UnspecifiedLocalDateTimeMode 的两个 DateTime 列之间具有关系或 ForeignKeyConstraint。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


DataSetSchemaImporterExtension 类

DataSetSchemaImporterExtension 类
成员

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataSetSchemaImporterExtension _
    Inherits SchemaImporterExtension
public class DataSetSchemaImporterExtension : SchemaImporterExtension
public ref class DataSetSchemaImporterExtension : public SchemaImporterExtension
type DataSetSchemaImporterExtension =
    class
        inherit SchemaImporterExtension
    end

System.Data System.Data..::.DataSetSchemaImporterExtensionDataSetSchemaImporterExtension
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSetSchemaImporterExtension 成员
System.Data 命名空间


DataSetSchemaImporterExtension 成员

DataSetSchemaImporterExtension 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSetSchemaImporterExtension 类

该成员支持 .NET Framework 结构，不应从代码直接使用。

DataSetSchemaImporterExtension 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataSetSchemaImporterExtension 类
System.Data 命名空间


DataSetSchemaImporterExtension 构造函数

DataSetSchemaImporterExtension 构造函数
DataSetSchemaImporterExtension 类

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataSetSchemaImporterExtension()
public:
DataSetSchemaImporterExtension()
new : unit -> DataSetSchemaImporterExtension

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSetSchemaImporterExtension 类
DataSetSchemaImporterExtension 成员
System.Data 命名空间


DataSetSchemaImporterExtension 方法

DataSetSchemaImporterExtension 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSetSchemaImporterExtension 类

DataSetSchemaImporterExtension 类型公开以下成员。

名称 说明
页首

参考

DataSetSchemaImporterExtension 类
System.Data 命名空间


DataSetSchemaImporterExtension ..::.ImportSchemaType 方法

DataSetSchemaImporterExtension
.
.
::
.
ImportSchemaType 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSetSchemaImporterExtension 类

该成员支持 .NET Framework 结构，不应从代码直接使用。

名称 说明
页首

参考

DataSetSchemaImporterExtension 类
DataSetSchemaImporterExtension 成员
System.Data 命名空间


DataSetSchemaImporterExtension ..::.ImportSchemaType 方法 (XmlSchemaType, XmlSchemaObject, XmlSchemas, XmlSchemaImporter, CodeCompileUnit, CodeNamespace, CodeGenerationOptions, CodeDomProvider)

DataSetSchemaImporterExtension
.
.
::
.
ImportSchemaType 方法 (XmlSchemaType, XmlSchemaObject, XmlSchemas, XmlSchemaImporter, CodeCompileUnit, CodeNamespace, CodeGenerationOptions, CodeDomProvider)
DataSetSchemaImporterExtension 类

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ImportSchemaType ( _
    type As XmlSchemaType, _
    context As XmlSchemaObject, _
    schemas As XmlSchemas, _
    importer As XmlSchemaImporter, _
    compileUnit As CodeCompileUnit, _
    mainNamespace As CodeNamespace, _
    options As CodeGenerationOptions, _
    codeProvider As CodeDomProvider _
) As String
public override string ImportSchemaType(
    XmlSchemaType type,
    XmlSchemaObject context,
    XmlSchemas schemas,
    XmlSchemaImporter importer,
    CodeCompileUnit compileUnit,
    CodeNamespace mainNamespace,
    CodeGenerationOptions options,
    CodeDomProvider codeProvider
)
public:
virtual String^ ImportSchemaType(
    XmlSchemaType^ type,
    XmlSchemaObject^ context,
    XmlSchemas^ schemas,
    XmlSchemaImporter^ importer,
    CodeCompileUnit^ compileUnit,
    CodeNamespace^ mainNamespace,
    CodeGenerationOptions options,
    CodeDomProvider^ codeProvider
) override
abstract ImportSchemaType :
        type:XmlSchemaType *
        context:XmlSchemaObject *
        schemas:XmlSchemas *
        importer:XmlSchemaImporter *
        compileUnit:CodeCompileUnit *
        mainNamespace:CodeNamespace *
        options:CodeGenerationOptions *
        codeProvider:CodeDomProvider -> string
override ImportSchemaType :
        type:XmlSchemaType *
        context:XmlSchemaObject *
        schemas:XmlSchemas *
        importer:XmlSchemaImporter *
        compileUnit:CodeCompileUnit *
        mainNamespace:CodeNamespace *
        options:CodeGenerationOptions *
        codeProvider:CodeDomProvider -> string

参数

type
类型： System.Xml.Schema XmlSchemaType
type
context
类型： System.Xml.Schema XmlSchemaObject
context
schemas
类型： System.Xml.Serialization XmlSchemas
schemas
importer
类型： System.Xml.Serialization XmlSchemaImporter
importer
compileUnit
类型： System.CodeDom CodeCompileUnit
compileUnit
mainNamespace
类型： System.CodeDom CodeNamespace
mainNamespace
options
类型： System.Xml.Serialization CodeGenerationOptions
options
codeProvider
类型： System.CodeDom.Compiler CodeDomProvider
codeProvider

返回值

类型： System String
该成员支持 .NET Framework 结构，不应从代码直接使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSetSchemaImporterExtension 类
DataSetSchemaImporterExtension 成员
ImportSchemaType 重载
System.Data 命名空间


DataSetSchemaImporterExtension ..::.ImportSchemaType 方法 (String, String, XmlSchemaObject, XmlSchemas, XmlSchemaImporter, CodeCompileUnit, CodeNamespace, CodeGenerationOptions, CodeDomProvider)

DataSetSchemaImporterExtension
.
.
::
.
ImportSchemaType 方法 (String, String, XmlSchemaObject, XmlSchemas, XmlSchemaImporter, CodeCompileUnit, CodeNamespace, CodeGenerationOptions, CodeDomProvider)
DataSetSchemaImporterExtension 类

该成员支持 .NET Framework 结构，不应从代码直接使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ImportSchemaType ( _
    name As String, _
    schemaNamespace As String, _
    context As XmlSchemaObject, _
    schemas As XmlSchemas, _
    importer As XmlSchemaImporter, _
    compileUnit As CodeCompileUnit, _
    mainNamespace As CodeNamespace, _
    options As CodeGenerationOptions, _
    codeProvider As CodeDomProvider _
) As String
public override string ImportSchemaType(
    string name,
    string schemaNamespace,
    XmlSchemaObject context,
    XmlSchemas schemas,
    XmlSchemaImporter importer,
    CodeCompileUnit compileUnit,
    CodeNamespace mainNamespace,
    CodeGenerationOptions options,
    CodeDomProvider codeProvider
)
public:
virtual String^ ImportSchemaType(
    String^ name,
    String^ schemaNamespace,
    XmlSchemaObject^ context,
    XmlSchemas^ schemas,
    XmlSchemaImporter^ importer,
    CodeCompileUnit^ compileUnit,
    CodeNamespace^ mainNamespace,
    CodeGenerationOptions options,
    CodeDomProvider^ codeProvider
) override
abstract ImportSchemaType :
        name:string *
        schemaNamespace:string *
        context:XmlSchemaObject *
        schemas:XmlSchemas *
        importer:XmlSchemaImporter *
        compileUnit:CodeCompileUnit *
        mainNamespace:CodeNamespace *
        options:CodeGenerationOptions *
        codeProvider:CodeDomProvider -> string
override ImportSchemaType :
        name:string *
        schemaNamespace:string *
        context:XmlSchemaObject *
        schemas:XmlSchemas *
        importer:XmlSchemaImporter *
        compileUnit:CodeCompileUnit *
        mainNamespace:CodeNamespace *
        options:CodeGenerationOptions *
        codeProvider:CodeDomProvider -> string

参数

name
类型： System String
name
schemaNamespace
类型： System String
schemaNamespace
context
类型： System.Xml.Schema XmlSchemaObject
context
schemas
类型： System.Xml.Serialization XmlSchemas
schemas
importer
类型： System.Xml.Serialization XmlSchemaImporter
importer
compileUnit
类型： System.CodeDom CodeCompileUnit
compileUnit
mainNamespace
类型： System.CodeDom CodeNamespace
mainNamespace
options
类型： System.Xml.Serialization CodeGenerationOptions
options
codeProvider
类型： System.CodeDom.Compiler CodeDomProvider
codeProvider

返回值

类型： System String
该成员支持 .NET Framework 结构，不应从代码直接使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSetSchemaImporterExtension 类
DataSetSchemaImporterExtension 成员
ImportSchemaType 重载
System.Data 命名空间


DataSysDescriptionAttribute 类

DataSysDescriptionAttribute 类
成员

注意：此 API 现在已过时。

用说明来标记属性、事件或扩展程序。可视化设计器在引用成员时可显示该说明。 用说明来标记属性、事件或扩展程序。可视化设计器在引用成员时可显示该说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<AttributeUsageAttribute(AttributeTargets.All)> _
<ObsoleteAttribute("DataSysDescriptionAttribute has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202",  _
    False)> _
Public Class DataSysDescriptionAttribute _
    Inherits DescriptionAttribute
[AttributeUsageAttribute(AttributeTargets.All)]
[ObsoleteAttribute("DataSysDescriptionAttribute has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202",
    false)]
public class DataSysDescriptionAttribute : DescriptionAttribute
[AttributeUsageAttribute(AttributeTargets::All)]
[ObsoleteAttribute(L"DataSysDescriptionAttribute has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202",
    false)]
public ref class DataSysDescriptionAttribute : public DescriptionAttribute
[<AttributeUsageAttribute(AttributeTargets.All)>]
[<ObsoleteAttribute("DataSysDescriptionAttribute has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202",
    false)>]
type DataSysDescriptionAttribute =
    class
        inherit DescriptionAttribute
    end

System.Data System.Data..::.DataSysDescriptionAttributeDataSysDescriptionAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

DataSysDescriptionAttribute 成员
System.Data 命名空间
Attribute
PropertyDescriptor
EventDescriptor


DataSysDescriptionAttribute 成员

DataSysDescriptionAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSysDescriptionAttribute 类

用说明来标记属性、事件或扩展程序。可视化设计器在引用成员时可显示该说明。 用说明来标记属性、事件或扩展程序。可视化设计器在引用成员时可显示该说明。

DataSysDescriptionAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataSysDescriptionAttribute 类
System.Data 命名空间


DataSysDescriptionAttribute 构造函数

DataSysDescriptionAttribute 构造函数
DataSysDescriptionAttribute 类

注意：此 API 现在已过时。

使用指定的说明字符串初始化 DataSysDescriptionAttribute 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<ObsoleteAttribute("DataSysDescriptionAttribute has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202",  _
    False)> _
Public Sub New ( _
    description As String _
)
[ObsoleteAttribute("DataSysDescriptionAttribute has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202",
    false)]
public DataSysDescriptionAttribute(
    string description
)
[ObsoleteAttribute(L"DataSysDescriptionAttribute has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202",
    false)]
public:
DataSysDescriptionAttribute(
    String^ description
)
[<ObsoleteAttribute("DataSysDescriptionAttribute has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202",
    false)>]
new :
        description:string -> DataSysDescriptionAttribute

参数

description
类型： System String
说明字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

DataSysDescriptionAttribute 类
DataSysDescriptionAttribute 成员
System.Data 命名空间


DataSysDescriptionAttribute 方法

DataSysDescriptionAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSysDescriptionAttribute 类

DataSysDescriptionAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataSysDescriptionAttribute 类
System.Data 命名空间


DataSysDescriptionAttribute 属性

DataSysDescriptionAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataSysDescriptionAttribute 类

DataSysDescriptionAttribute 类型公开以下成员。

名称 说明
页首

参考

DataSysDescriptionAttribute 类
System.Data 命名空间


DataSysDescriptionAttribute ..::.Description 属性

DataSysDescriptionAttribute
.
.
::
.
Description 属性
DataSysDescriptionAttribute 类

获取说明的文本。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property Description As String
    Get
public override string Description { get; }
public:
virtual property String^ Description {
    String^ get () override;
}
abstract Description : string
override Description : string

属性值

类型： System String
说明字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataSysDescriptionAttribute 类
DataSysDescriptionAttribute 成员
System.Data 命名空间


DataTable 类

DataTable 类
成员

表示内存中数据的一个表。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class DataTable _
    Inherits MarshalByValueComponent _
    Implements IListSource, ISupportInitializeNotification, ISupportInitialize, ISerializable,  _
    IXmlSerializable
[SerializableAttribute]
public class DataTable : MarshalByValueComponent, IListSource,
    ISupportInitializeNotification, ISupportInitialize, ISerializable, IXmlSerializable
[SerializableAttribute]
public ref class DataTable : public MarshalByValueComponent,
    IListSource, ISupportInitializeNotification, ISupportInitialize, ISerializable, IXmlSerializable
[<SerializableAttribute>]
type DataTable =
    class
        inherit MarshalByValueComponent
        interface IListSource
        interface ISupportInitializeNotification
        interface ISupportInitialize
        interface ISerializable
        interface IXmlSerializable
    end

DataTable 是 ADO.NET 库中的核心对象。其他使用 DataTable 的对象包括 DataSet 和 DataView。 DataTable 是 ADO.NET 库中的核心对象。其他使用 DataTable 的对象包括 DataSet 和 DataView。

当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。一个 DataSet 可以包含两个 DataTable 对象，它们具有相同的 TableName 属性值和不同的 Namespace 属性值。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。 当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。一个 DataSet 可以包含两个 DataTable 对象，它们具有相同的 TableName 属性值和不同的 Namespace 属性值。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。 当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。一个 DataSet 可以包含两个 DataTable 对象，它们具有相同的 TableName 属性值和不同的 Namespace 属性值。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。 当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。一个 DataSet 可以包含两个 DataTable 对象，它们具有相同的 TableName 属性值和不同的 Namespace 属性值。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。 当访问 DataTable 对象时，请注意它们是按条件区分大小写的。例如，如果一个 DataTable 被命名为“mydatatable”，另一个被命名为“Mydatatable”，则用于搜索其中一个表的字符串被认为是区分大小写的。但是，如果“mydatatable”存在而“Mydatatable”不存在，则认为该搜索字符串不区分大小写。一个 DataSet 可以包含两个 DataTable 对象，它们具有相同的 TableName 属性值和不同的 Namespace 属性值。有关使用 DataTable 对象的更多信息，请参见创建数据表 (ADO.NET)。

如果正在以编程方式创建 DataTable，则必须先通过将 DataColumn 对象添加到 DataColumnCollection（通过 Columns 属性访问）中来定义其架构。有关添加 DataColumn 对象的更多信息，请参见向数据表中添加列 (ADO.NET)。 如果正在以编程方式创建 DataTable，则必须先通过将 DataColumn 对象添加到 DataColumnCollection（通过 Columns 属性访问）中来定义其架构。有关添加 DataColumn 对象的更多信息，请参见向数据表中添加列 (ADO.NET)。

若要向 DataTable 中添加行，必须先使用 NewRow 方法返回新的 DataRow 对象。NewRow 方法返回具有 DataTable 的架构的行，就像由该表的 DataColumnCollection 定义的那样。DataTable 可存储的最大行数是 16,777,216。有关更多信息，请参见向数据表中添加数据。 若要向 DataTable 中添加行，必须先使用 NewRow 方法返回新的 DataRow 对象。NewRow 方法返回具有 DataTable 的架构的行，就像由该表的 DataColumnCollection 定义的那样。DataTable 可存储的最大行数是 16,777,216。有关更多信息，请参见向数据表中添加数据。 若要向 DataTable 中添加行，必须先使用 NewRow 方法返回新的 DataRow 对象。NewRow 方法返回具有 DataTable 的架构的行，就像由该表的 DataColumnCollection 定义的那样。DataTable 可存储的最大行数是 16,777,216。有关更多信息，请参见向数据表中添加数据。 若要向 DataTable 中添加行，必须先使用 NewRow 方法返回新的 DataRow 对象。NewRow 方法返回具有 DataTable 的架构的行，就像由该表的 DataColumnCollection 定义的那样。DataTable 可存储的最大行数是 16,777,216。有关更多信息，请参见向数据表中添加数据。

DataTable 也包含可用于确保数据完整性的 Constraint 对象的集合。有关更多信息，请参见数据表约束 (ADO.NET)。 DataTable 也包含可用于确保数据完整性的 Constraint 对象的集合。有关更多信息，请参见数据表约束 (ADO.NET)。

有许多 DataTable 事件可用于确定对表进行更改的时间。这些方法包括 RowChanged、RowChanging、RowDeleting 和 RowDeleted。有关可与 DataTable 一起使用的事件的更多信息，请参见处理 DataTable 事件 (ADO.NET)。 有许多 DataTable 事件可用于确定对表进行更改的时间。这些方法包括 RowChanged、RowChanging、RowDeleting 和 RowDeleted。有关可与 DataTable 一起使用的事件的更多信息，请参见处理 DataTable 事件 (ADO.NET)。 有许多 DataTable 事件可用于确定对表进行更改的时间。这些方法包括 RowChanged、RowChanging、RowDeleting 和 RowDeleted。有关可与 DataTable 一起使用的事件的更多信息，请参见处理 DataTable 事件 (ADO.NET)。

当创建 DataTable 的实例时，某些读/写属性将被设置为初始值。有关这些值的列表，请参见 DataTable..::.DataTable 构造函数主题。 当创建 DataTable 的实例时，某些读/写属性将被设置为初始值。有关这些值的列表，请参见 DataTable..::.DataTable 构造函数主题。

说明 说明

DataSet 和 DataTable 对象从 MarshalByValueComponent 继承，并支持用于 .NET Framework 远程处理的 ISerializable 接口。它们是唯一可用于 .NET Framework 远程处理的 ADO.NET 对象。 DataSet 和 DataTable 对象从 MarshalByValueComponent 继承，并支持用于 .NET Framework 远程处理的 ISerializable 接口。它们是唯一可用于 .NET Framework 远程处理的 ADO.NET 对象。

下面的示例创建两个 DataTable 对象和一个 DataRelation 对象，并将这些新对象添加到 DataSet 中。这些表随后会显示在 DataGridView 控件中。 下面的示例创建两个 DataTable 对象和一个 DataRelation 对象，并将这些新对象添加到 DataSet 中。这些表随后会显示在 DataGridView 控件中。

' Put the next line into the Declarations section.
private dataSet As DataSet

Private Sub MakeDataTables()
    ' Run all of the functions.
    MakeParentTable()
    MakeChildTable()
    MakeDataRelation()
    BindToDataGrid()
End Sub

Private Sub MakeParentTable()
    ' Create a new DataTable.
    Dim table As DataTable = new DataTable("ParentTable")

    ' Declare variables for DataColumn and DataRow objects.
    Dim column As DataColumn
    Dim row As DataRow

    ' Create new DataColumn, set DataType, ColumnName
    ' and add to DataTable.
    column = New DataColumn()
    column.DataType = System.Type.GetType("System.Int32")
    column.ColumnName = "id"
    column.ReadOnly = True
    column.Unique = True

    ' Add the Column to the DataColumnCollection.
    table.Columns.Add(column)

    ' Create second column.
    column = New DataColumn()
    column.DataType = System.Type.GetType("System.String")
    column.ColumnName = "ParentItem"
    column.AutoIncrement = False
    column.Caption = "ParentItem"
    column.ReadOnly = False
    column.Unique = False

    ' Add the column to the table.
    table.Columns.Add(column)

    ' Make the ID column the primary key column.
    Dim PrimaryKeyColumns(0) As DataColumn
    PrimaryKeyColumns(0)= table.Columns("id")
    table.PrimaryKey = PrimaryKeyColumns

    ' Instantiate the DataSet variable.
    dataSet = New DataSet()

    ' Add the new DataTable to the DataSet.
    dataSet.Tables.Add(table)

    ' Create three new DataRow objects and add
    ' them to the DataTable
    Dim i As Integer
    For i = 0 to 2
       row = table.NewRow()
       row("id") = i
       row("ParentItem") = "ParentItem " + i.ToString()
       table.Rows.Add(row)
    Next i
End Sub

Private Sub MakeChildTable()
    ' Create a new DataTable.
    Dim table As DataTable = New DataTable("childTable")
    Dim column As DataColumn
    Dim row As DataRow

    ' Create first column and add to the DataTable.
    column = New DataColumn()
    column.DataType= System.Type.GetType("System.Int32")
    column.ColumnName = "ChildID"
    column.AutoIncrement = True
    column.Caption = "ID"
    column.ReadOnly = True
    column.Unique = True

    ' Add the column to the DataColumnCollection.
    table.Columns.Add(column)

    ' Create second column.
    column = New DataColumn()
    column.DataType= System.Type.GetType("System.String")
    column.ColumnName = "ChildItem"
    column.AutoIncrement = False
    column.Caption = "ChildItem"
    column.ReadOnly = False
    column.Unique = False
    table.Columns.Add(column)

    ' Create third column.
    column = New DataColumn()
    column.DataType= System.Type.GetType("System.Int32")
    column.ColumnName = "ParentID"
    column.AutoIncrement = False
    column.Caption = "ParentID"
    column.ReadOnly = False
    column.Unique = False
    table.Columns.Add(column)

    dataSet.Tables.Add(table)

    ' Create three sets of DataRow objects, five rows each,
    ' and add to DataTable.
    Dim i As Integer
    For i = 0 to 4
       row = table.NewRow()
       row("childID") = i
       row("ChildItem") = "Item " + i.ToString()
       row("ParentID") = 0
       table.Rows.Add(row)
    Next i
    For i = 0 to 4
       row = table.NewRow()
       row("childID") = i + 5
       row("ChildItem") = "Item " + i.ToString()
       row("ParentID") = 1
       table.Rows.Add(row)
    Next i
    For i = 0 to 4
       row = table.NewRow()
       row("childID") = i + 10
       row("ChildItem") = "Item " + i.ToString()
       row("ParentID") = 2
       table.Rows.Add(row)
    Next i
End Sub

Private Sub MakeDataRelation()
    ' DataRelation requires two DataColumn
    ' (parent and child) and a name.
    Dim parentColumn As DataColumn = _
        dataSet.Tables("ParentTable").Columns("id")
    Dim childColumn As DataColumn = _
        dataSet.Tables("ChildTable").Columns("ParentID")
    Dim relation As DataRelation = new _
        DataRelation("parent2Child", parentColumn, childColumn)
    dataSet.Tables("ChildTable").ParentRelations.Add(relation)
End Sub

Private Sub BindToDataGrid()
    ' Instruct the DataGrid to bind to the DataSet, with the
    ' ParentTable as the topmost DataTable.
    DataGrid1.SetDataBinding(dataSet,"ParentTable")
End Sub

// Put the next line into the Declarations section.
private System.Data.DataSet dataSet;

private void MakeDataTables()
{
    // Run all of the functions.
    MakeParentTable();
    MakeChildTable();
    MakeDataRelation();
    BindToDataGrid();
}

private void MakeParentTable()
{
    // Create a new DataTable.
    System.Data.DataTable table = new DataTable("ParentTable");
    // Declare variables for DataColumn and DataRow objects.
    DataColumn column;
    DataRow row;

    // Create new DataColumn, set DataType,
    // ColumnName and add to DataTable.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.ColumnName = "id";
    column.ReadOnly = true;
    column.Unique = true;
    // Add the Column to the DataColumnCollection.
    table.Columns.Add(column);

    // Create second column.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "ParentItem";
    column.AutoIncrement = false;
    column.Caption = "ParentItem";
    column.ReadOnly = false;
    column.Unique = false;
    // Add the column to the table.
    table.Columns.Add(column);

    // Make the ID column the primary key column.
    DataColumn[] PrimaryKeyColumns = new DataColumn[1];
    PrimaryKeyColumns[0] = table.Columns["id"];
    table.PrimaryKey = PrimaryKeyColumns;

    // Instantiate the DataSet variable.
    dataSet = new DataSet();
    // Add the new DataTable to the DataSet.
    dataSet.Tables.Add(table);

    // Create three new DataRow objects and add
    // them to the DataTable
    for (int i = 0; i<= 2; i++)
    {
        row = table.NewRow();
        row["id"] = i;
        row["ParentItem"] = "ParentItem " + i;
        table.Rows.Add(row);
    }
}

private void MakeChildTable()
{
    // Create a new DataTable.
    DataTable table = new DataTable("childTable");
    DataColumn column;
    DataRow row;

    // Create first column and add to the DataTable.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.Int32");
    column.ColumnName = "ChildID";
    column.AutoIncrement = true;
    column.Caption = "ID";
    column.ReadOnly = true;
    column.Unique = true;

    // Add the column to the DataColumnCollection.
    table.Columns.Add(column);

    // Create second column.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.String");
    column.ColumnName = "ChildItem";
    column.AutoIncrement = false;
    column.Caption = "ChildItem";
    column.ReadOnly = false;
    column.Unique = false;
    table.Columns.Add(column);

    // Create third column.
    column = new DataColumn();
    column.DataType= System.Type.GetType("System.Int32");
    column.ColumnName = "ParentID";
    column.AutoIncrement = false;
    column.Caption = "ParentID";
    column.ReadOnly = false;
    column.Unique = false;
    table.Columns.Add(column);

    dataSet.Tables.Add(table);

    // Create three sets of DataRow objects,
    // five rows each, and add to DataTable.
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 0 ;
        table.Rows.Add(row);
    }
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i + 5;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 1 ;
        table.Rows.Add(row);
    }
    for(int i = 0; i <= 4; i ++)
    {
        row = table.NewRow();
        row["childID"] = i + 10;
        row["ChildItem"] = "Item " + i;
        row["ParentID"] = 2 ;
        table.Rows.Add(row);
    }
}

private void MakeDataRelation()
{
    // DataRelation requires two DataColumn
    // (parent and child) and a name.
    DataColumn parentColumn =
        dataSet.Tables["ParentTable"].Columns["id"];
    DataColumn childColumn =
        dataSet.Tables["ChildTable"].Columns["ParentID"];
    DataRelation relation = new
        DataRelation("parent2Child", parentColumn, childColumn);
    dataSet.Tables["ChildTable"].ParentRelations.Add(relation);
}

private void BindToDataGrid()
{
    // Instruct the DataGrid to bind to the DataSet, with the
    // ParentTable as the topmost DataTable.
    dataGrid1.SetDataBinding(dataSet,"ParentTable");
}

System.Data System.Data..::.DataTableDataTable

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable 成员

DataTable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

表示内存中数据的一个表。

DataTable 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataTable 类
System.Data 命名空间


DataTable 构造函数

DataTable 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

初始化 DataTable 类的新实例。

名称 说明
页首

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable 构造函数

DataTable 构造函数
DataTable 类

不带参数初始化 DataTable 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataTable()
public:
DataTable()
new : unit -> DataTable

构造函数为 DataTable 对象的所有属性设置初始值。下表显示这些属性及其默认值。当创建 DataTable 的实例时，以下读/写属性将被设置为初始值。 构造函数为 DataTable 对象的所有属性设置初始值。下表显示这些属性及其默认值。当创建 DataTable 的实例时，以下读/写属性将被设置为初始值。 构造函数为 DataTable 对象的所有属性设置初始值。下表显示这些属性及其默认值。当创建 DataTable 的实例时，以下读/写属性将被设置为初始值。

Property | 默认值
CaseSensitive | 如果它属于一个，则与父级 DataSet 相同。否则为 false。 如果它属于一个，则与父级 DataSet 相同。否则为 false。
DisplayExpression | 空字符串 ("")
区域设置 | 与父级 DataSet 对象的 CultureInfo（由 Locale 属性返回）相同；如果不存在任何父对象，则默认为当前系统的 CultureInfo。
MinimumCapacity | 50 行。

通过单独调用属性，可以更改这些属性值中的任何一个。

下面的示例创建具有 DataColumn 和 DataRow 的新 DataTable，并在 DataGridView 控件中显示它。

Private Sub MakeDataTableAndDisplay()
   ' Create new DataTable.
   Dim table As New DataTable

   ' Declare DataColumn and DataRow variables.
   Dim column As DataColumn
   Dim row As DataRow

   ' Create new DataColumn, set DataType, ColumnName
   ' and add to DataTable.
   column = New DataColumn
   column.DataType = System.Type.GetType("System.Int32")
   column.ColumnName = "id"
   table.Columns.Add(column)

   ' Create second column.
   column = New DataColumn
   column.DataType = Type.GetType("System.String")
   column.ColumnName = "item"
   table.Columns.Add(column)

   ' Create new DataRow objects and add to DataTable.
   Dim i As Integer
   For i = 0 To 10
      row = table.NewRow
      row("id") = i
      row("item") = "item " & i
      table.Rows.Add(row)
   Next i

   ' Set to DataGrid.DataSource property to the table.
   DataGrid1.DataSource = table
End Sub

private void MakeDataTableAndDisplay()
{
    // Create new DataTable.
    DataTable table = new DataTable();

    // Declare DataColumn and DataRow variables.
    DataColumn column;
    DataRow row;

    // Create new DataColumn, set DataType, ColumnName
    // and add to DataTable.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.ColumnName = "id";
    table.Columns.Add(column);

    // Create second column.
    column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "item";
    table.Columns.Add(column);

    // Create new DataRow objects and add to DataTable.
    for(int i = 0; i < 10; i++)
    {
        row = table.NewRow();
        row["id"] = i;
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }
    // Set to DataGrid.DataSource property to the table.
    dataGrid1.DataSource = table;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
DataTable 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable 构造函数 (String)

DataTable 构造函数 (String)
DataTable 类

用指定的表名初始化 DataTable 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    tableName As String _
)
public DataTable(
    string tableName
)
public:
DataTable(
    String^ tableName
)
new :
        tableName:string -> DataTable

参数

tableName
类型： System String
赋予表的名称。如果 tableName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串，则在添加到 DataTableCollection 中时指定默认名称。 赋予表的名称。如果 tableName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串，则在添加到 DataTableCollection 中时指定默认名称。

下面的示例创建一个 DataTable，并将其显示在 DataGridView 控件中。

Private Sub MakeDataTableAndDisplay()
   ' Create new DataTable.
   Dim table As DataTable = New DataTable("table")

   ' Declare DataColumn and DataRow variables.
   Dim column As DataColumn
   Dim row As DataRow

   ' Create new DataColumn, set DataType,
   ' ColumnName and add to DataTable.
   column = New DataColumn
   column.DataType = System.Type.GetType("System.Int32")
   column.ColumnName = "id"
   table.Columns.Add(column)

   ' Create second column.
   column = New DataColumn
   column.DataType = Type.GetType("System.String")
   column.ColumnName = "item"
   table.Columns.Add(column)

   ' Create new DataRow objects and add to DataTable.
   Dim i As Integer
   For i = 0 To 10
      row = table.NewRow
      row("id") = i
      row("item") = "item " & i
      table.Rows.Add(row)
   Next i

   ' Set to DataGrid.DataSource property to the table.
   DataGrid1.DataSource = table
End Sub

private void MakeDataTableAndDisplay()
{
    // Create new DataTable.
    DataTable table = new DataTable("table");

    // Declare DataColumn and DataRow variables.
    DataColumn column;
    DataRow row;

    // Create new DataColumn, set DataType,
    // ColumnName and add to DataTable.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.ColumnName = "id";
    table.Columns.Add(column);

    // Create second column.
    column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "item";
    table.Columns.Add(column);

    // Create new DataRow objects and add to DataTable.
    for(int i = 0; i < 10; i++)
    {
        row = table.NewRow();
        row["id"] = i;
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }
    // Set to DataGrid.DataSource property to the table.
    dataGrid1.DataSource = table;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
DataTable 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable 构造函数 (SerializationInfo, StreamingContext)

DataTable 构造函数 (SerializationInfo, StreamingContext)
DataTable 类

使用 SerializationInfo 和 StreamingContext 初始化 DataTable 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected DataTable(
    SerializationInfo info,
    StreamingContext context
)
protected:
DataTable(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> DataTable

参数

info
类型： System.Runtime.Serialization SerializationInfo
将对象序列化或反序列化所需的数据。
context
类型： System.Runtime.Serialization StreamingContext
给定序列化流的源和目的地。

ISerializable 需要实现该 DataTable 构造函数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataTable 类
DataTable 成员
DataTable 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable 构造函数 (String, String)

DataTable 构造函数 (String, String)
DataTable 类

用指定的表名和命名空间初始化 DataTable 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    tableName As String, _
    tableNamespace As String _
)
public DataTable(
    string tableName,
    string tableNamespace
)
public:
DataTable(
    String^ tableName,
    String^ tableNamespace
)
new :
        tableName:string *
        tableNamespace:string -> DataTable

参数

tableName
类型： System String
赋予表的名称。如果 tableName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串，则在添加到 DataTableCollection 中时指定默认名称。 赋予表的名称。如果 tableName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串，则在添加到 DataTableCollection 中时指定默认名称。
tableNamespace
类型： System String
存储在 DataTable 中的数据的 XML 表示形式的命名空间。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
DataTable 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable 字段

DataTable 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

DataTable 类型公开以下成员。

名称 说明
页首

参考

DataTable 类
System.Data 命名空间


DataTable ..::.fInitInProgress 字段

DataTable
.
.
::
.
fInitInProgress 字段
DataTable 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

检查是否正在进行初始化。初始化发生在运行时。 检查是否正在进行初始化。初始化发生在运行时。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend fInitInProgress As Boolean
protected internal bool fInitInProgress
protected public:
bool fInitInProgress
val mutable fInitInProgress: bool

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable 方法

DataTable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

DataTable 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataTable 类
System.Data 命名空间


DataTable ..::.AcceptChanges 方法

DataTable
.
.
::
.
AcceptChanges 方法
DataTable 类

提交自上次调用 AcceptChanges 以来对该表进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub AcceptChanges
public void AcceptChanges()
public:
void AcceptChanges()
member AcceptChanges : unit -> unit

调用 AcceptChanges 时，任何仍处于编辑模式的 DataRow 对象将成功结束其编辑。DataRowState 也发生更改：所有 Added 和 Modified 行都变为 Unchanged，Deleted 行则被移除。 调用 AcceptChanges 时，任何仍处于编辑模式的 DataRow 对象将成功结束其编辑。DataRowState 也发生更改：所有 Added 和 Modified 行都变为 Unchanged，Deleted 行则被移除。

在您尝试使用 DbDataAdapter..::.Update 方法更新 DataSet 之后，通常会对 DataTable 调用 AcceptChanges 方法。

下面的示例测试每个表中是否有错误。如果表中的错误可以协调（通过将其传递给未定义的函数），则调用 AcceptChanges；否则调用 RejectChanges。 下面的示例测试每个表中是否有错误。如果表中的错误可以协调（通过将其传递给未定义的函数），则调用 AcceptChanges；否则调用 RejectChanges。

Private Sub AcceptOrReject(table As DataTable)
    ' If there are errors, try to reconcile.
        If (table.HasErrors) Then
            If (Reconcile(table)) Then
                ' Fixed all errors.
                table.AcceptChanges()
            Else
                ' Couldn'table fix all errors.
                table.RejectChanges()
            End If
        Else
            ' If no errors, AcceptChanges.
            table.AcceptChanges()
        End If
 End Sub

Private Function Reconcile(thisTable As DataTable) As Boolean
    Dim row As DataRow
    For Each row in thisTable.Rows
       'Insert code to try to reconcile error.

       ' If there are still errors return immediately
       ' since the caller rejects all changes upon error.
       If row.HasErrors Then
           Reconcile = False
           Exit Function
       End If
    Next row
    Reconcile = True
 End Function

private void AcceptOrReject(DataTable table)
{
    // If there are errors, try to reconcile.
    if(table.HasErrors)
    {
        if(Reconcile(table))
        {
            // Fixed all errors.
            table.AcceptChanges();
        }
        else
        {
            // Couldn'table fix all errors.
            table.RejectChanges();
        }
    }
    else
        // If no errors, AcceptChanges.
        table.AcceptChanges();
}

private bool Reconcile(DataTable thisTable)
{
    foreach(DataRow row in thisTable.Rows)
    {
        //Insert code to try to reconcile error.

        // If there are still errors return immediately
        // since the caller rejects all changes upon error.
        if(row.HasErrors)
            return false;
    }
    return true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.BeginInit 方法

DataTable
.
.
::
.
BeginInit 方法
DataTable 类

开始初始化在窗体上使用或由另一个组件使用的 DataTable。初始化发生在运行时。 开始初始化在窗体上使用或由另一个组件使用的 DataTable。初始化发生在运行时。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub BeginInit
public virtual void BeginInit()
public:
virtual void BeginInit()
abstract BeginInit : unit -> unit
override BeginInit : unit -> unit

实现

Visual Studio .NET 设计环境使用该方法来启动在窗体上使用或由另一个组件使用的组件的初始化。EndInit 方法结束该初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来启动在窗体上使用或由另一个组件使用的组件的初始化。EndInit 方法结束该初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来启动在窗体上使用或由另一个组件使用的组件的初始化。EndInit 方法结束该初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.BeginLoadData 方法

DataTable
.
.
::
.
BeginLoadData 方法
DataTable 类

在加载数据时关闭通知、索引维护和约束。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub BeginLoadData
public void BeginLoadData()
public:
void BeginLoadData()
member BeginLoadData : unit -> unit

将 BeginLoadData 与 LoadDataRow 和 EndLoadData 一起使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.Clear 方法

DataTable
.
.
::
.
Clear 方法
DataTable 类

清除所有数据的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Clear
public void Clear()
public:
void Clear()
member Clear : unit -> unit

所有表中的所有行都被移除。如果表中有任何将使子行孤立的强制子关系，则生成异常。 所有表中的所有行都被移除。如果表中有任何将使子行孤立的强制子关系，则生成异常。

如果 DataSet 绑定到 XmlDataDocument，则调用 DataSet..::.Clear 或 DataTable..::.Clear 将引发 NotSupportedException。为避免这种情况，请遍历每个表，逐个移除每一行。使用 NewRow 创建新行时，必须先对这些行进行处理，然后再调用 Clear。 如果 DataSet 绑定到 XmlDataDocument，则调用 DataSet..::.Clear 或 DataTable..::.Clear 将引发 NotSupportedException。为避免这种情况，请遍历每个表，逐个移除每一行。使用 NewRow 创建新行时，必须先对这些行进行处理，然后再调用 Clear。 如果 DataSet 绑定到 XmlDataDocument，则调用 DataSet..::.Clear 或 DataTable..::.Clear 将引发 NotSupportedException。为避免这种情况，请遍历每个表，逐个移除每一行。使用 NewRow 创建新行时，必须先对这些行进行处理，然后再调用 Clear。

下面的示例清除所有数据的表。

 Private Sub ClearTable(table As DataTable)
     Try
         table.Clear()
     Catch e As DataException
     ' Process exception and return.
          Console.WriteLine("Exception of type {0} occurred.", _
            e.GetType().ToString())
     End Try
 End Sub

private void ClearTable(DataTable table)
{
    try
    {
        table.Clear();
    }
    catch (DataException e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.Clone 方法

DataTable
.
.
::
.
Clone 方法
DataTable 类

克隆 DataTable 的结构，包括所有 DataTable 架构和约束。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Clone As DataTable
public virtual DataTable Clone()
public:
virtual DataTable^ Clone()
abstract Clone : unit -> DataTable
override Clone : unit -> DataTable

返回值

类型： System.Data DataTable
新的 DataTable，与当前的 DataTable 具有相同的架构。

如果这些类已经过派生，则副本也具有相同的派生类。

Copy 和 Clone 方法创建的新 DataTable 都与原始 DataTable 具有相同的结构。Copy 方法创建的新 DataTable 与原始表具有相同的 DataRows 集，但 Clone 方法创建的新 DataTable 不包含任何 DataRows。 Copy 和 Clone 方法创建的新 DataTable 都与原始 DataTable 具有相同的结构。Copy 方法创建的新 DataTable 与原始表具有相同的 DataRows 集，但 Clone 方法创建的新 DataTable 不包含任何 DataRows。

下面的示例创建 DataTable 对象架构的复本。

Private Sub GetClone(ByVal table As DataTable)
    ' Get a clone of the original DataTable.
    Dim cloneTable As DataTable
    cloneTable = table.Clone()

    ' Insert code to work with clone of the DataTable.
 End Sub

private void GetClone(DataTable table){
    // Get a clone of the original DataTable.
    DataTable cloneTable;
    cloneTable = table.Clone();

    // Insert code to work with clone of the DataTable.
 }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
Copy

其他资源

DataTable (ADO.NET)


DataTable ..::.Compute 方法

DataTable
.
.
::
.
Compute 方法
DataTable 类

计算用来传递筛选条件的当前行上的给定表达式。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Compute ( _
    expression As String, _
    filter As String _
) As Object
public Object Compute(
    string expression,
    string filter
)
public:
Object^ Compute(
    String^ expression,
    String^ filter
)
member Compute :
        expression:string *
        filter:string -> Object

参数

expression
类型： System String
要计算的表达式。
filter
类型： System String
要限制在表达式中进行计算的行的筛选器。

返回值

类型： System Object
Object，设置为计算结果。

expression 参数需要聚合函数。例如，以下是合法表达式： expression 参数需要聚合函数。例如，以下是合法表达式：

Count(Quantity)

但是以下表达式不合法：

Sum (Quantity * UnitPrice)

如果必须针对两列或多列执行操作，则应该创建 DataColumn，并将它的 Expression 属性设置为适当的表达式，然后针对结果列使用聚合表达式。在这种情况下，假定有一个名为“total”的 DataColumn，并且 Expression 属性设置为： 如果必须针对两列或多列执行操作，则应该创建 DataColumn，并将它的 Expression 属性设置为适当的表达式，然后针对结果列使用聚合表达式。在这种情况下，假定有一个名为“total”的 DataColumn，并且 Expression 属性设置为：

"Quantity * UnitPrice"

Compute 方法的表达式参数将为：

Sum(total)

第二个参数 filter 确定在表达式中使用哪些行。例如，如果该表包含名为“colDate”的日期列，则可用以下表达式限制这些行： 第二个参数 filter 确定在表达式中使用哪些行。例如，如果该表包含名为“colDate”的日期列，则可用以下表达式限制这些行：

colDate > 1/1/99 AND colDate < 17/1/99

有关为这两个参数创建表达式的规则，请参见 DataColumn..::.Expression 属性。

下面的示例针对标识号为五的销售人员，对名为“Total”的列的值求和。

Private Sub ComputeBySalesSalesID(ByVal dataSet As DataSet)
    ' Presumes a DataTable named "Orders" that has a column named "Total."
    Dim table As DataTable
    table = dataSet.Tables("Orders")

    ' Declare an object variable.
    Dim sumObject As Object
    sumObject = table.Compute("Sum(Total)", "EmpID = 5")
 End Sub

private void ComputeBySalesSalesID(DataSet dataSet)
{
    // Presumes a DataTable named "Orders" that has a column named "Total."
    DataTable table;
    table = dataSet.Tables["Orders"];

    // Declare an object variable.
    object sumObject;
    sumObject = table.Compute("Sum(Total)", "EmpID = 5");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.Copy 方法

DataTable
.
.
::
.
Copy 方法
DataTable 类

复制该 DataTable 的结构和数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Copy As DataTable
public DataTable Copy()
public:
DataTable^ Copy()
member Copy : unit -> DataTable

返回值

类型： System.Data DataTable
新的 DataTable，它具有与该 DataTable 相同的结构（表架构和约束）和数据。
如果这些类已经过派生，则副本也具有相同的派生类。
Copy 和 Clone 方法创建的新 DataTable 都与原始 DataTable 具有相同的结构。Copy 方法创建的新 DataTable 与原始表具有相同的 DataRows 集，但 Clone 方法创建的新 DataTable 不包含任何 DataRows。 Copy 和 Clone 方法创建的新 DataTable 都与原始 DataTable 具有相同的结构。Copy 方法创建的新 DataTable 与原始表具有相同的 DataRows 集，但 Clone 方法创建的新 DataTable 不包含任何 DataRows。

下面的示例使用 Copy 方法创建初始 DataTable 的副本。如果命名空间名称从父 DataTable 或 DataSet 继承，则不保留此命名空间名称。 下面的示例使用 Copy 方法创建初始 DataTable 的副本。如果命名空间名称从父 DataTable 或 DataSet 继承，则不保留此命名空间名称。

Private Sub CopyDataTable(ByVal table As DataTable )
    ' Create an object variable for the copy.
    Dim copyDataTable As DataTable
    copyDataTable = table.Copy()

    ' Insert code to work with the copy.
 End Sub

private void CopyDataTable(DataTable table){
    // Create an object variable for the copy.
    DataTable copyDataTable;
    copyDataTable = table.Copy();

    // Insert code to work with the copy.
 }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
Clone

其他资源

DataTable (ADO.NET)


DataTable ..::.CreateDataReader 方法

DataTable
.
.
::
.
CreateDataReader 方法
DataTable 类

返回与此 DataTable 中的数据相对应的 DataTableReader。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function CreateDataReader As DataTableReader
public DataTableReader CreateDataReader()
public:
DataTableReader^ CreateDataReader()
member CreateDataReader : unit -> DataTableReader

返回值

类型： System.Data DataTableReader
包含一个结果集的 DataTableReader，该结果集与源 DataTable 实例对应。

下面的控制台应用程序创建一个 DataTable 实例。然后，该示例将填充的 DataTable 传递给调用 CreateDataReader 方法的过程，此方法用于循环访问 DataTableReader 中包含的结果。 下面的控制台应用程序创建一个 DataTable 实例。然后，该示例将填充的 DataTable 传递给调用 CreateDataReader 方法的过程，此方法用于循环访问 DataTableReader 中包含的结果。

Private Sub TestCreateDataReader(ByVal dt As DataTable)
  ' Given a DataTable, retrieve a DataTableReader
  ' allowing access to all the tables's data:
  Using reader As DataTableReader = dt.CreateDataReader()
    Do
      If Not reader.HasRows Then
        Console.WriteLine("Empty DataTableReader")
      Else
        PrintColumns(reader)
      End If
      Console.WriteLine("========================")
    Loop While reader.NextResult()
  End Using
End Sub

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

   ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  Return table
End Function

Private Sub PrintColumns( _
   ByVal reader As DataTableReader)

  ' Loop through all the rows in the DataTableReader.
  Do While reader.Read()
    For i As Integer = 0 To reader.FieldCount - 1
      Console.Write(reader(i).ToString() & " ")
    Next
    Console.WriteLine()
  Loop
End Sub

private static void TestCreateDataReader(DataTable dt)
{
    // Given a DataTable, retrieve a DataTableReader
    // allowing access to all the tables' data:
    using (DataTableReader reader = dt.CreateDataReader())
    {
        do
        {
            if (!reader.HasRows)
            {
                Console.WriteLine("Empty DataTableReader");
            }
            else
            {
                PrintColumns(reader);
            }
            Console.WriteLine("========================");
        } while (reader.NextResult());
    }
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    return table;
}

private static void PrintColumns(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write(reader[i] + " ");
        }
        Console.WriteLine();
    }
}

该示例在控制台窗口中显示以下输出：

1 Mary

2 Andy

3 Peter

4 Russ

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
DataSet CreateDataReader

其他资源

DataTable (ADO.NET)


DataTable ..::.CreateInstance 方法

DataTable
.
.
::
.
CreateInstance 方法
DataTable 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

创建 DataTable 的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function CreateInstance As DataTable
protected virtual DataTable CreateInstance()
protected:
virtual DataTable^ CreateInstance()
abstract CreateInstance : unit -> DataTable
override CreateInstance : unit -> DataTable

返回值

类型： System.Data DataTable
新表达式。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.Dispose 方法

DataTable
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

释放由 MarshalByValueComponent 占用的资源。

名称 说明
页首

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.EndInit 方法

DataTable
.
.
::
.
EndInit 方法
DataTable 类

结束在窗体上使用或由另一个组件使用的 DataTable 的初始化。初始化发生在运行时。 结束在窗体上使用或由另一个组件使用的 DataTable 的初始化。初始化发生在运行时。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub EndInit
public virtual void EndInit()
public:
virtual void EndInit()
abstract EndInit : unit -> unit
override EndInit : unit -> unit

实现

Visual Studio .NET 设计环境使用该方法来结束在窗体上使用或由另一个组件使用的组件的初始化。BeginInit 方法开始此初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来结束在窗体上使用或由另一个组件使用的组件的初始化。BeginInit 方法开始此初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来结束在窗体上使用或由另一个组件使用的组件的初始化。BeginInit 方法开始此初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.EndLoadData 方法

DataTable
.
.
::
.
EndLoadData 方法
DataTable 类

在加载数据后打开通知、索引维护和约束。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub EndLoadData
public void EndLoadData()
public:
void EndLoadData()
member EndLoadData : unit -> unit

将 EndLoadData 与 LoadDataRow 和 BeginLoadData 一起使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.GetChanges 方法

DataTable
.
.
::
.
GetChanges 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

获取 DataTable 的副本，该副本包含自上次加载以来或自调用 AcceptChanges 以来对该数据集进行的所有更改。

名称 说明
页首

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.GetChanges 方法

DataTable
.
.
::
.
GetChanges 方法
DataTable 类

获取 DataTable 的副本，该副本包含自加载以来或自上次调用 AcceptChanges 以来对该数据集进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetChanges As DataTable
public DataTable GetChanges()
public:
DataTable^ GetChanges()
member GetChanges : unit -> DataTable

返回值

类型： System.Data DataTable
此 DataTable 中的更改的副本，如果未发现更改，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

创建一个新的 DataSet，其中包含了原始 DataSet 中具有挂起更改的所有行的副本。如果未更改的行包含与更改的行中的外键对应的主键，则关系约束可能导致其他未更改的行也被添加到新的 DataSet 中。如果原始 DataSet 中不存在具有挂起更改的行，此方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。 创建一个新的 DataSet，其中包含了原始 DataSet 中具有挂起更改的所有行的副本。如果未更改的行包含与更改的行中的外键对应的主键，则关系约束可能导致其他未更改的行也被添加到新的 DataSet 中。如果原始 DataSet 中不存在具有挂起更改的行，此方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。 创建一个新的 DataSet，其中包含了原始 DataSet 中具有挂起更改的所有行的副本。如果未更改的行包含与更改的行中的外键对应的主键，则关系约束可能导致其他未更改的行也被添加到新的 DataSet 中。如果原始 DataSet 中不存在具有挂起更改的行，此方法将返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。

Private Sub UpdateDataTable(table As DataTable, _
    myDataAdapter As OleDbDataAdapter)

    Dim xDataTable As DataTable = table.GetChanges()

    ' Check the DataTable for errors.
    If xDataTable.HasErrors Then
        ' Insert code to resolve errors.
    End If

    ' After fixing errors, update the database with the DataAdapter
    myDataAdapter.Update(xDataTable)
End Sub

private void UpdateDataTable(DataTable table,
    OleDbDataAdapter myDataAdapter)
{
    DataTable xDataTable = table.GetChanges();

    // Check the DataTable for errors.
    if (xDataTable.HasErrors)
    {
        // Insert code to resolve errors.
    }

    // After fixing errors, update the database with the DataAdapter
    myDataAdapter.Update(xDataTable);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
GetChanges 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.GetChanges 方法 (DataRowState)

DataTable
.
.
::
.
GetChanges 方法 (DataRowState)
DataTable 类

获取由 DataRowState 筛选的 DataTable 的副本，该副本包含上次加载以来或调用 AcceptChanges 以来对该数据集进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetChanges ( _
    rowStates As DataRowState _
) As DataTable
public DataTable GetChanges(
    DataRowState rowStates
)
public:
DataTable^ GetChanges(
    DataRowState rowStates
)
member GetChanges :
        rowStates:DataRowState -> DataTable

参数

rowStates
类型： System.Data DataRowState
DataRowState 值之一。

返回值

类型： System.Data DataTable
DataTable 的筛选副本，可以对该副本执行操作，之后可以使用 Merge 将其合并回 DataTable。如果未找到所需 DataRowState 的行，则该方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 DataTable 的筛选副本，可以对该副本执行操作，之后可以使用 Merge 将其合并回 DataTable。如果未找到所需 DataRowState 的行，则该方法返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

GetChanges 方法用于生成另一个 DataTable 对象，该对象只包含对初始对象进行的更改。使用 rowStates 参数指定新对象应该包括的更改的类型。 GetChanges 方法用于生成另一个 DataTable 对象，该对象只包含对初始对象进行的更改。使用 rowStates 参数指定新对象应该包括的更改的类型。

关系约束可能导致包括未更改的父行。

Private Sub ProcessDeletes(table As DataTable, _
    adapter As OleDbDataAdapter)

   Dim changeTable As DataTable = table.GetChanges(DataRowState.Deleted)

   ' Check the DataTable for errors.
   If table.HasErrors Then
      ' Insert code to resolve errors.
   End If

   ' After fixing errors, update the database with the DataAdapter
   adapter.Update(changeTable)
End Sub

private void ProcessDeletes(DataTable table,
    OleDbDataAdapter adapter)
{
    DataTable changeTable = table.GetChanges(DataRowState.Deleted);

    // Check the DataTable for errors.
    if (changeTable.HasErrors)
    {
        // Insert code to resolve errors.
    }

    // After fixing errors, update the database with the DataAdapter
    adapter.Update(changeTable);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
GetChanges 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.GetDataTableSchema 方法

DataTable
.
.
::
.
GetDataTableSchema 方法
DataTable 类

该方法返回一个包含 Web 服务描述语言 (WSDL) 的 XmlSchemaSet 实例，该语言描述了用作 Web 服务的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GetDataTableSchema ( _
    schemaSet As XmlSchemaSet _
) As XmlSchemaComplexType
public static XmlSchemaComplexType GetDataTableSchema(
    XmlSchemaSet schemaSet
)
public:
static XmlSchemaComplexType^ GetDataTableSchema(
    XmlSchemaSet^ schemaSet
)
static member GetDataTableSchema :
        schemaSet:XmlSchemaSet -> XmlSchemaComplexType

参数

schemaSet
类型： System.Xml.Schema XmlSchemaSet
一个 XmlSchemaSet 实例。

返回值

类型： System.Xml.Schema XmlSchemaComplexType
XmlSchemaSet 实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.GetErrors 方法

DataTable
.
.
::
.
GetErrors 方法
DataTable 类

获取包含错误的 DataRow 对象的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetErrors As DataRow()
public DataRow[] GetErrors()
public:
array<DataRow^>^ GetErrors()
member GetErrors : unit -> DataRow[]

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

包含错误的 DataRow 对象的数组。

在调用 DataSet 类的 GetChanges 方法之后调用 GetErrors。同样，一定要在解决了所有错误并且重新提交了 DataSet 以进行更新后，再对 DataTable 调用 AcceptChanges。 在调用 DataSet 类的 GetChanges 方法之后调用 GetErrors。同样，一定要在解决了所有错误并且重新提交了 DataSet 以进行更新后，再对 DataTable 调用 AcceptChanges。

下面的示例使用 GetErrors 方法返回包含错误的 DataRow 对象的数组。

Private Sub PrintAllErrs(ByVal dataSet As DataSet)
    Dim rowsInError() As DataRow
    Dim table As DataTable
    Dim i As Integer
    Dim column As DataColumn
    For Each table In dataSet.Tables
       ' Test if the table has errors. If not, skip it.
       If table.HasErrors Then
          ' Get an array of all rows with errors.
          rowsInError = table.GetErrors()
          ' Print the error of each column in each row.
          For i = 0 To rowsInError.GetUpperBound(0)
             For Each column In table.Columns
                Console.WriteLine(column.ColumnName, _
                rowsInError(i).GetColumnError(column))
             Next
             ' Clear the row errors
          rowsInError(i).ClearErrors
          Next i
       End If
    Next
End Sub

private void PrintAllErrs(DataSet dataSet)
{
    DataRow[] rowsInError;

    foreach(DataTable table in dataSet.Tables)
    {
        // Test if the table has errors. If not, skip it.
        if(table.HasErrors)
        {
            // Get an array of all rows with errors.
            rowsInError = table.GetErrors();
            // Print the error of each column in each row.
            for(int i = 0; i < rowsInError.Length; i++)
            {
                foreach(DataColumn column in table.Columns)
                {
                    Console.WriteLine(column.ColumnName + " " +
                        rowsInError[i].GetColumnError(column));
                }
                // Clear the row errors
                rowsInError[i].ClearErrors();
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
HasErrors
RowError
SetColumnError

其他资源

DataTable (ADO.NET)


DataTable ..::.GetObjectData 方法

DataTable
.
.
::
.
GetObjectData 方法
DataTable 类

用序列化 DataTable 所需的数据填充序列化信息对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags := SecurityPermissionFlag.SerializationFormatter)> _
Public Overridable Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public virtual void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
[SecurityPermissionAttribute(SecurityAction::LinkDemand, Flags = SecurityPermissionFlag::SerializationFormatter)]
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
)
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)>]
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)>]
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
一个 SerializationInfo 对象，它包含与 DataTable 关联的序列化数据。
context
类型： System.Runtime.Serialization StreamingContext
一个 StreamingContext 对象，它包含与 DataTable 关联的序列化流的源和目标。

实现

异常 | 条件
ArgumentNullException | info 参数是空引用（Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.GetRowType 方法

DataTable
.
.
::
.
GetRowType 方法
DataTable 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

获取行类型。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function GetRowType As Type
protected virtual Type GetRowType()
protected:
virtual Type^ GetRowType()
abstract GetRowType : unit -> Type
override GetRowType : unit -> Type

返回值

类型： System Type
返回 DataRow 的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.GetSchema 方法

DataTable
.
.
::
.
GetSchema 方法
DataTable 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

有关此成员的说明，请参见 IXmlSerializable..::.GetSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function GetSchema As XmlSchema
protected virtual XmlSchema GetSchema()
protected:
virtual XmlSchema^ GetSchema()
abstract GetSchema : unit -> XmlSchema
override GetSchema : unit -> XmlSchema

返回值

类型： System.Xml.Schema XmlSchema
XmlSchema，描述由 WriteXml 方法产生并由 ReadXml 方法使用的对象的 XML 表示形式。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.IListSource ..::.GetList 方法

DataTable
.
.
::
.
IListSource
.
.
::
.
GetList 方法
DataTable 类

有关此成员的说明，请参见 IListSource..::.GetList。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetList As IList
    Implements IListSource.GetList
IList IListSource.GetList()
private:
virtual IList^ GetList() sealed = IListSource::GetList
private abstract GetList : unit -> IList
private override GetList : unit -> IList

返回值

类型： System.Collections IList
对象中可以绑定到数据源的 IList。

实现

此成员是显式的接口成员实现。只能在 DataTable 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 DataTable 实例强制转换为 IListSource 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.ImportRow 方法

DataTable
.
.
::
.
ImportRow 方法
DataTable 类

将 DataRow 复制到 DataTable 中，保留任何属性设置以及初始值和当前值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ImportRow ( _
    row As DataRow _
)
public void ImportRow(
    DataRow row
)
public:
void ImportRow(
    DataRow^ row
)
member ImportRow :
        row:DataRow -> unit

参数

row
类型： System.Data DataRow
要导入的 DataRow。

调用 NewRow 时，将使用现有的表架构向表中添加一行，并为该行填充默认值，同时将 DataRowState 设置为 Added。调用 ImportRow 将保留现有的 DataRowState 以及该行中的其他值。如果作为参数传递的 DataRow 处于分离状态，则忽略它，并且不引发异常。 调用 NewRow 时，将使用现有的表架构向表中添加一行，并为该行填充默认值，同时将 DataRowState 设置为 Added。调用 ImportRow 将保留现有的 DataRowState 以及该行中的其他值。如果作为参数传递的 DataRow 处于分离状态，则忽略它，并且不引发异常。 调用 NewRow 时，将使用现有的表架构向表中添加一行，并为该行填充默认值，同时将 DataRowState 设置为 Added。调用 ImportRow 将保留现有的 DataRowState 以及该行中的其他值。如果作为参数传递的 DataRow 处于分离状态，则忽略它，并且不引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
在 DataTable 中处理数据


DataTable ..::.IXmlSerializable ..::.GetSchema 方法

DataTable
.
.
::
.
IXmlSerializable
.
.
::
.
GetSchema 方法
DataTable 类

有关此成员的说明，请参见 IXmlSerializable..::.GetSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetSchema As XmlSchema
    Implements IXmlSerializable.GetSchema
XmlSchema IXmlSerializable.GetSchema()
private:
virtual XmlSchema^ GetSchema() sealed = IXmlSerializable::GetSchema
private abstract GetSchema : unit -> XmlSchema
private override GetSchema : unit -> XmlSchema

返回值

类型： System.Xml.Schema XmlSchema
XmlSchema，描述由 WriteXml 方法产生并由 ReadXml 方法使用的对象的 XML 表示形式。

实现

此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。 此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.IXmlSerializable ..::.ReadXml 方法

DataTable
.
.
::
.
IXmlSerializable
.
.
::
.
ReadXml 方法
DataTable 类

有关此成员的说明，请参见 IXmlSerializable..::.ReadXml。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub ReadXml ( _
    reader As XmlReader _
) Implements IXmlSerializable.ReadXml
void IXmlSerializable.ReadXml(
    XmlReader reader
)
private:
virtual void ReadXml(
    XmlReader^ reader
) sealed = IXmlSerializable::ReadXml
private abstract ReadXml :
        reader:XmlReader -> unit
private override ReadXml :
        reader:XmlReader -> unit

参数

reader
类型： System.Xml XmlReader
一个 XmlReader。

实现

此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。 此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.IXmlSerializable ..::.WriteXml 方法

DataTable
.
.
::
.
IXmlSerializable
.
.
::
.
WriteXml 方法
DataTable 类

有关此成员的说明，请参见 IXmlSerializable..::.WriteXml。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub WriteXml ( _
    writer As XmlWriter _
) Implements IXmlSerializable.WriteXml
void IXmlSerializable.WriteXml(
    XmlWriter writer
)
private:
virtual void WriteXml(
    XmlWriter^ writer
) sealed = IXmlSerializable::WriteXml
private abstract WriteXml :
        writer:XmlWriter -> unit
private override WriteXml :
        writer:XmlWriter -> unit

参数

writer
类型： System.Xml XmlWriter
一个 XmlWriter。

实现

此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。 此成员是显式的接口成员实现。只能在 DataSet 实例强制转换为 IXmlSerializable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.Load 方法

DataTable
.
.
::
.
Load 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

通过所提供的 IDataReader，用某个数据源的值填充 DataTable。如果 DataTable 已经包含行，则从数据源传入的数据将与现有的行合并。 通过所提供的 IDataReader，用某个数据源的值填充 DataTable。如果 DataTable 已经包含行，则从数据源传入的数据将与现有的行合并。

名称 说明
页首

在几种常见方案中可以使用 Load 方法，这些方案都围绕着从指定的数据源获取数据并将其添加到当前的数据容器（在本例中为 DataTable）。这些方案描述了 DataTable 的标准用法，介绍了它的更新和合并行为。 在几种常见方案中可以使用 Load 方法，这些方案都围绕着从指定的数据源获取数据并将其添加到当前的数据容器（在本例中为 DataTable）。这些方案描述了 DataTable 的标准用法，介绍了它的更新和合并行为。

DataTable 与单个主数据源同步，或使用单个主数据源进行更新。DataTable 跟踪更改，以实现与主数据源的同步。此外，DataTable 可以接受来自一个或多个辅助数据源的增量数据。DataTable 不负责跟踪更改以实现与辅助数据源的同步。 DataTable 与单个主数据源同步，或使用单个主数据源进行更新。DataTable 跟踪更改，以实现与主数据源的同步。此外，DataTable 可以接受来自一个或多个辅助数据源的增量数据。DataTable 不负责跟踪更改以实现与辅助数据源的同步。 DataTable 与单个主数据源同步，或使用单个主数据源进行更新。DataTable 跟踪更改，以实现与主数据源的同步。此外，DataTable 可以接受来自一个或多个辅助数据源的增量数据。DataTable 不负责跟踪更改以实现与辅助数据源的同步。 DataTable 与单个主数据源同步，或使用单个主数据源进行更新。DataTable 跟踪更改，以实现与主数据源的同步。此外，DataTable 可以接受来自一个或多个辅助数据源的增量数据。DataTable 不负责跟踪更改以实现与辅助数据源的同步。

在给定这两个假想的数据源的情况下，用户很可能要求下列行为之一：

  • 初始化主数据源中的 DataTable。在此方案中，用户希望使用主数据源中的值初始化空 DataTable。此后，用户希望将更改传播回主数据源。 初始化主数据源中的 DataTable。在此方案中，用户希望使用主数据源中的值初始化空 DataTable。此后，用户希望将更改传播回主数据源。 初始化主数据源中的 DataTable。在此方案中，用户希望使用主数据源中的值初始化空 DataTable。此后，用户希望将更改传播回主数据源。

  • 保留更改并从主数据源重新同步。在此方案中，用户要用前一个方案中填充的 DataTable 并执行与主数据源的递增同步，同时保留在 DataTable 中所做的修改。 保留更改并从主数据源重新同步。在此方案中，用户要用前一个方案中填充的 DataTable 并执行与主数据源的递增同步，同时保留在 DataTable 中所做的修改。

  • 来自辅助数据源的增量数据流。在该方案中，用户希望合并来自一个或多个辅助数据源的更改，并将这些更改传播回主数据源。 来自辅助数据源的增量数据流。在该方案中，用户希望合并来自一个或多个辅助数据源的更改，并将这些更改传播回主数据源。

Load 方法使所有这些方案成为可能。此方法的所有重载（一个除外）都允许指定加载选项参数，以指示 DataTable 中的行如何与正在加载的行合并。（不允许指定此行为的重载使用默认加载选项。）下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。 Load 方法使所有这些方案成为可能。此方法的所有重载（一个除外）都允许指定加载选项参数，以指示 DataTable 中的行如何与正在加载的行合并。（不允许指定此行为的重载使用默认加载选项。）下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。 Load 方法使所有这些方案成为可能。此方法的所有重载（一个除外）都允许指定加载选项参数，以指示 DataTable 中的行如何与正在加载的行合并。（不允许指定此行为的重载使用默认加载选项。）下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。 Load 方法使所有这些方案成为可能。此方法的所有重载（一个除外）都允许指定加载选项参数，以指示 DataTable 中的行如何与正在加载的行合并。（不允许指定此行为的重载使用默认加载选项。）下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。

加载选项 | 说明
PreserveChanges（默认值） | 使用传入行的值更新行的原始版本。
OverwriteChanges | 使用传入行的值更新行的当前版本和原始版本。
Upsert | 使用传入行的值更新行的当前版本。

通常，PreserveChanges 和 OverwriteChanges 选项用于这样的方案：用户需要将 DataSet 及其更改与主数据源同步。Upsert 选项可帮助聚合来自一个或多个辅助数据源的更改。 通常，PreserveChanges 和 OverwriteChanges 选项用于这样的方案：用户需要将 DataSet 及其更改与主数据源同步。Upsert 选项可帮助聚合来自一个或多个辅助数据源的更改。

下面的示例演示了调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。此示例随后着重于数据问题，包括处理各个加载选项。 下面的示例演示了调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。此示例随后着重于数据问题，包括处理各个加载选项。 下面的示例演示了调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。此示例随后着重于数据问题，包括处理各个加载选项。

说明 说明

此示例演示如何使用 Load 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。 此示例演示如何使用 Load 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。

Sub Main()
  Dim table As New DataTable()

  ' This example examines a number of scenarios involving the
  ' DataTable.Load method.
  Console.WriteLine("Load a DataTable and infer its schema:")

  ' Retrieve a data reader, based on the Customers data. In
  ' an application, this data might be coming from a middle-tier
  ' business object:
  Dim reader As New DataTableReader(GetCustomers())

  ' The table has no schema. The Load method will infer the
  ' schema from the IDataReader:
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Load a DataTable from an incompatible IDataReader:")

  ' Create a table with a single integer column. Attempt
  ' to load data from a reader with a schema that is
  ' incompatible. Note the exception, determined
  ' by the particular incompatibility:
  table = GetIntegerTable()
  reader = New DataTableReader(GetStringTable())
  Try
    table.Load(reader)
  Catch ex As Exception
    Console.WriteLine(ex.GetType.Name & ":" & ex.Message())
  End Try

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has extra columns:")

  ' Note that loading a reader with extra columns adds
  ' the columns to the existing table, if possible:
  table = GetIntegerTable()
  reader = New DataTableReader(GetCustomers())
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has missing columns:")

  ' Note that loading a reader with missing columns causes
  ' the columns to be filled with null data, if possible:
  table = GetCustomers()
  reader = New DataTableReader(GetIntegerTable())
  table.Load(reader)
  PrintColumns(table)

  ' Demonstrate the various possibilites when loading data into
  ' a DataTable that already contains data.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Demonstrate data considerations:")
  Console.WriteLine("Current value, Original value, (RowState)")
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Original table:")

  table = SetupModifiedRows()
  DisplayRowState(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Data in IDataReader to be loaded:")
  DisplayRowState(GetChangedCustomers())

  PerformDemo(LoadOption.OverwriteChanges)
  PerformDemo(LoadOption.PreserveChanges)
  PerformDemo(LoadOption.Upsert)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub DisplayRowState(ByVal table As DataTable)
  For i As Integer = 0 To table.Rows.Count - 1
    Dim current As Object = "--"
    Dim original As Object = "--"
    Dim rowState As DataRowState = table.Rows(i).RowState

    ' Attempt to retrieve the current value, which doesn't exist
    ' for deleted rows:
    If rowState <> DataRowState.Deleted Then
      current = table.Rows(i)("Name", DataRowVersion.Current)
    End If

    ' Attempt to retrieve the original value, which doesn't exist
    ' for added rows:
    If rowState <> DataRowState.Added Then
      original = table.Rows(i)("Name", DataRowVersion.Original)
    End If
    Console.WriteLine("{0}: {1}, {2} ({3})", i, current, original, rowState)
  Next
End Sub

Private Function GetChangedCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "XXX"})
  table.Rows.Add(New Object() {1, "XXX"})
  table.Rows.Add(New Object() {2, "XXX"})
  table.Rows.Add(New Object() {3, "XXX"})
  table.Rows.Add(New Object() {4, "XXX"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "Mary"})
  table.Rows.Add(New Object() {1, "Andy"})
  table.Rows.Add(New Object() {2, "Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {4})
  table.Rows.Add(New Object() {5})
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PerformDemo(ByVal optionForLoad As LoadOption)

  ' Load data into a DataTable, retrieve a DataTableReader containing
  ' different data, and call the Load method. Depending on the
  ' LoadOption value passed as a parameter, this procedure displays
  ' different results in the DataTable.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("table.Load(reader, {0})", optionForLoad)
  Console.WriteLine(" ============================= ")

  Dim table As DataTable = SetupModifiedRows()
  Dim reader As New DataTableReader(GetChangedCustomers())
  AddHandler table.RowChanging, New _
      DataRowChangeEventHandler(AddressOf HandleRowChanging)

  table.Load(reader, optionForLoad)
  Console.WriteLine()
  DisplayRowState(table)
End Sub

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

Private Function SetupModifiedRows() As DataTable
  ' Fill a DataTable with customer info, and
  ' then modify, delete, and add rows.

  Dim table As DataTable = GetCustomers()
  ' Row 0 is unmodified.
  ' Row 1 is modified.
  ' Row 2 is deleted.
  ' Row 3 is added.
  table.Rows(1)("Name") = "Sydney"
  table.Rows(2).Delete()
  Dim row As DataRow = table.NewRow
  row("ID") = 3
  row("Name") = "Melony"
  table.Rows.Add(row)

  ' Note that the code doesn't call
  ' table.AcceptChanges()
  Return table
End Function

Private Sub HandleRowChanging(ByVal sender As Object, _
  ByVal e As System.Data.DataRowChangeEventArgs)
  Console.WriteLine( _
      "RowChanging event: ID = {0}, action = {1}", e.Row("ID"), _
      e.Action)
End Sub

static void Main()
{
    // This example examines a number of scenarios involving the
    // DataTable.Load method.
    Console.WriteLine("Load a DataTable and infer its schema:");

    // The table has no schema. The Load method will infer the
    // schema from the IDataReader:
    DataTable table = new DataTable();

    // Retrieve a data reader, based on the Customers data. In
    // an application, this data might be coming from a middle-tier
    // business object:
    DataTableReader reader = new DataTableReader(GetCustomers());

    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Load a DataTable from an incompatible IDataReader:");

    // Create a table with a single integer column. Attempt
    // to load data from a reader with a schema that is
    // incompatible. Note the exception, determined
    // by the particular incompatibility:
    table = GetIntegerTable();
    reader = new DataTableReader(GetStringTable());
    try
    {
        table.Load(reader);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.GetType().Name + ":" + ex.Message);
    }

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has extra columns:");

    // Note that loading a reader with extra columns adds
    // the columns to the existing table, if possible:
    table = GetIntegerTable();
    reader = new DataTableReader(GetCustomers());
    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has missing columns:");

    // Note that loading a reader with missing columns causes
    // the columns to be filled with null data, if possible:
    table = GetCustomers();
    reader = new DataTableReader(GetIntegerTable());
    table.Load(reader);
    PrintColumns(table);

    // Demonstrate the various possibilites when loading data into
    // a DataTable that already contains data.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Demonstrate data considerations:");
    Console.WriteLine("Current value, Original value, (RowState)");
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Original table:");

    table = SetupModifiedRows();
    DisplayRowState(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Data in IDataReader to be loaded:");
    DisplayRowState(GetChangedCustomers());

    PerformDemo(LoadOption.OverwriteChanges);
    PerformDemo(LoadOption.PreserveChanges);
    PerformDemo(LoadOption.Upsert);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void DisplayRowState(DataTable table)
{
    for (int i = 0; i <= table.Rows.Count - 1; i++)
    {
        object current = "--";
        object original = "--";
        DataRowState rowState = table.Rows[i].RowState;

        // Attempt to retrieve the current value, which doesn't exist
        // for deleted rows:
        if (rowState != DataRowState.Deleted)
        {
            current = table.Rows[i]["Name", DataRowVersion.Current];
        }

        // Attempt to retrieve the original value, which doesn't exist
        // for added rows:
        if (rowState != DataRowState.Added)
        {
            original = table.Rows[i]["Name", DataRowVersion.Original];
        }
        Console.WriteLine("{0}: {1}, {2} ({3})", i, current,
            original, rowState);
    }
}

private static DataTable GetChangedCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "XXX" });
    table.Rows.Add(new object[] { 1, "XXX" });
    table.Rows.Add(new object[] { 2, "XXX" });
    table.Rows.Add(new object[] { 3, "XXX" });
    table.Rows.Add(new object[] { 4, "XXX" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "Mary" });
    table.Rows.Add(new object[] { 1, "Andy" });
    table.Rows.Add(new object[] { 2, "Peter" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 4 });
    table.Rows.Add(new object[] { 5 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.AcceptChanges();
    return table;
}

private static void PerformDemo(LoadOption optionForLoad)
{

    // Load data into a DataTable, retrieve a DataTableReader containing
    // different data, and call the Load method. Depending on the
    // LoadOption value passed as a parameter, this procedure displays
    // different results in the DataTable.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("table.Load(reader, {0})", optionForLoad);
    Console.WriteLine(" ============================= ");

    DataTable table = SetupModifiedRows();
    DataTableReader reader = new DataTableReader(GetChangedCustomers());
    table.RowChanging +=new DataRowChangeEventHandler(HandleRowChanging);

    table.Load(reader, optionForLoad);
    Console.WriteLine();
    DisplayRowState(table);
}

private static void PrintColumns(DataTable table)
{
    // Loop through all the rows in the DataTableReader
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTable SetupModifiedRows()
{
    // Fill a DataTable with customer info, and
    // then modify, delete, and add rows.

    DataTable table = GetCustomers();
    // Row 0 is unmodified.
    // Row 1 is modified.
    // Row 2 is deleted.
    // Row 3 is added.
    table.Rows[1]["Name"] = "Sydney";
    table.Rows[2].Delete();
    DataRow row = table.NewRow();
    row["ID"] = 3;
    row["Name"] = "Melony";
    table.Rows.Add(row);

    // Note that the code doesn't call
    // table.AcceptChanges()
    return table;
}

static void HandleRowChanging(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine(
        "RowChanging event: ID = {0}, action = {1}", e.Row["ID"],
        e.Action);
}

参考

DataTable 类
DataTable 成员
System.Data 命名空间
Load

其他资源

DataTable (ADO.NET)


DataTable ..::.Load 方法 (IDataReader)

DataTable
.
.
::
.
Load 方法 (IDataReader)
DataTable 类

通过所提供的 IDataReader，用某个数据源的值填充 DataTable。如果 DataTable 已经包含行，则从数据源传入的数据将与现有的行合并。 通过所提供的 IDataReader，用某个数据源的值填充 DataTable。如果 DataTable 已经包含行，则从数据源传入的数据将与现有的行合并。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Load ( _
    reader As IDataReader _
)
public void Load(
    IDataReader reader
)
public:
void Load(
    IDataReader^ reader
)
member Load :
        reader:IDataReader -> unit

参数

reader
类型： System.Data IDataReader
提供结果集的 IDataReader。

Load 方法使用加载的 IDataReader 中的第一个结果集，并在成功完成后，将读取器的位置设置到下一个结果集（如果有）。转换数据时，Load 方法使用与 DbDataAdapter..::.Fill 方法的转换规则相同的规则。 Load 方法使用加载的 IDataReader 中的第一个结果集，并在成功完成后，将读取器的位置设置到下一个结果集（如果有）。转换数据时，Load 方法使用与 DbDataAdapter..::.Fill 方法的转换规则相同的规则。

从 IDataReader 实例加载数据时，Load 方法必须考虑下面三个具体问题：架构、数据和事件操作。处理架构时，Load 方法可能会遇到如下表所述的情况。对于所有导入的结果集，都会发生相应的架构操作，即使结果集不包含任何数据也是如此。 从 IDataReader 实例加载数据时，Load 方法必须考虑下面三个具体问题：架构、数据和事件操作。处理架构时，Load 方法可能会遇到如下表所述的情况。对于所有导入的结果集，都会发生相应的架构操作，即使结果集不包含任何数据也是如此。 从 IDataReader 实例加载数据时，Load 方法必须考虑下面三个具体问题：架构、数据和事件操作。处理架构时，Load 方法可能会遇到如下表所述的情况。对于所有导入的结果集，都会发生相应的架构操作，即使结果集不包含任何数据也是如此。

条件 | 行为
DataTable 没有架构。 | Load 方法根据来自导入的 IDataReader 的结果集推断架构。
DataTable 具有一个架构，但该架构与加载的架构不兼容。 | Load 方法引发一个异常，该异常对应于当尝试将数据加载到不兼容的架构中时发生的特定错误。
架构兼容，但加载的结果集架构包含 DataTable 中不存在的列。 | Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。 Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。 Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。 Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。
架构兼容，但加载的结果集架构包含的列数少于 DataTable 中包含的列数。 | 如果某个缺少的列定义了默认值，或者此列的数据类型可为 null，则可以使用 Load 方法添加行，并用默认值或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值来替代此缺少的列。如果不能使用默认值或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值，则 Load 方法将引发异常。如果没有提供特定的默认值，则 Load 方法将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值用作暗含的默认值。 如果某个缺少的列定义了默认值，或者此列的数据类型可为 null，则可以使用 Load 方法添加行，并用默认值或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值来替代此缺少的列。如果不能使用默认值或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值，则 Load 方法将引发异常。如果没有提供特定的默认值，则 Load 方法将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值用作暗含的默认值。 如果某个缺少的列定义了默认值，或者此列的数据类型可为 null，则可以使用 Load 方法添加行，并用默认值或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值来替代此缺少的列。如果不能使用默认值或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值，则 Load 方法将引发异常。如果没有提供特定的默认值，则 Load 方法将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值用作暗含的默认值。

考虑 Load 方法在数据操作方面的行为之前，请注意：DataTable 中的每一行都同时维护每一列的当前值和原始值。这些值可能相同，也有可能不同。如果自填充 DataTable 之后行中的数据发生更改，则会出现后一种情况。有关更多信息，请参见行状态与行版本。 考虑 Load 方法在数据操作方面的行为之前，请注意：DataTable 中的每一行都同时维护每一列的当前值和原始值。这些值可能相同，也有可能不同。如果自填充 DataTable 之后行中的数据发生更改，则会出现后一种情况。有关更多信息，请参见行状态与行版本。 考虑 Load 方法在数据操作方面的行为之前，请注意：DataTable 中的每一行都同时维护每一列的当前值和原始值。这些值可能相同，也有可能不同。如果自填充 DataTable 之后行中的数据发生更改，则会出现后一种情况。有关更多信息，请参见行状态与行版本。

Load 方法的此版本尝试保留每行中的当前值，使原始值保持不变。（如果要更精细地控制传入数据的行为，请参见 DataTable..::.Load。）如果现有的行和传入的行包含对应的主键值，将使用其当前行状态值来处理行，否则将该行视为新行。 Load 方法的此版本尝试保留每行中的当前值，使原始值保持不变。（如果要更精细地控制传入数据的行为，请参见 DataTable..::.Load。）如果现有的行和传入的行包含对应的主键值，将使用其当前行状态值来处理行，否则将该行视为新行。

就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值取决于执行加载操作之前的行状态。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值取决于执行加载操作之前的行状态。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值取决于执行加载操作之前的行状态。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值取决于执行加载操作之前的行状态。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值取决于执行加载操作之前的行状态。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。

下表显示了 Load 方法的行为。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。在这种情况下，该方法不允许指示加载选项，而使用默认值 PreserveChanges。 下表显示了 Load 方法的行为。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。在这种情况下，该方法不允许指示加载选项，而使用默认值 PreserveChanges。 下表显示了 Load 方法的行为。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。在这种情况下，该方法不允许指示加载选项，而使用默认值 PreserveChanges。 下表显示了 Load 方法的行为。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。在这种情况下，该方法不允许指示加载选项，而使用默认值 PreserveChanges。

现有 DataRowState | 调用 Load 方法并执行事件操作后的值
Added（已添加） | 当前值 = <现有值> 原始值 = <传入值> 状态 = <已修改> 行操作 = 更改原始值
修改后的 | 当前值 = <现有值> 原始值 = <传入值> 状态 = <已修改> 行操作 = 更改原始值
Deleted | 当前值 = <不可用> 原始值 = <传入值> 状态 = <已删除> 行操作 = 更改原始值
Unchanged | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值
（不存在） | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值

可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。 可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。 可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。 可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。

若要确定用于比较当前行与传入行的主键字段版本，则 Load 方法使用行中主键值的原始版本（如果存在）。否则，Load 方法使用主键字段的当前版本。 若要确定用于比较当前行与传入行的主键字段版本，则 Load 方法使用行中主键值的原始版本（如果存在）。否则，Load 方法使用主键字段的当前版本。

下面的示例演示调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。然后，该示例调用 Load 方法，显示加载操作前后的数据。 下面的示例演示调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。然后，该示例调用 Load 方法，显示加载操作前后的数据。 下面的示例演示调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。然后，该示例调用 Load 方法，显示加载操作前后的数据。

Sub Main()
  ' This example examines a number of scenarios involving the
  ' DataTable.Load method.
  Console.WriteLine("Load a DataTable and infer its schema:")

  ' The table has no schema. The Load method will infer the
  ' schema from the IDataReader:
  Dim table As New DataTable()

  ' Retrieve a data reader, based on the Customers data. In
  ' an application, this data might be coming from a middle-tier
  ' business object:
  Dim reader As New DataTableReader(GetCustomers())

  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable from an incompatible IDataReader:")

  ' Create a table with a single integer column. Attempt
  ' to load data from a reader with a schema that is
  ' incompatible. Note the exception, determined
  ' by the particular incompatibility:
  table = GetIntegerTable()
  reader = New DataTableReader(GetStringTable())
  Try
    table.Load(reader)
  Catch ex As Exception
    Console.WriteLine(ex.GetType.Name & ":" & ex.Message())
  End Try

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has extra columns:")

  ' Note that loading a reader with extra columns adds
  ' the columns to the existing table, if possible:
  table = GetIntegerTable()
  reader = New DataTableReader(GetCustomers())
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
      Console.WriteLine( _
          "Load a DataTable with an IDataReader that has missing columns:")

  ' Note that loading a reader with missing columns causes
  ' the columns to be filled with null data, if possible:
  table = GetCustomers()
  reader = New DataTableReader(GetIntegerTable())
  table.Load(reader)
  PrintColumns(table)

  ' Demonstrate the various possibilites when loading data into
  ' a DataTable that already contains data.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Demonstrate data considerations:")
  Console.WriteLine("Current value, Original value, (RowState)")
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Original table:")

  table = SetupModifiedRows()
  DisplayRowState(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Data in IDataReader to be loaded:")
  DisplayRowState(GetChangedCustomers())

  ' Load data into a DataTable, retrieve a DataTableReader
  ' containing different data, and call the Load method.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("table.Load(reader)")
  Console.WriteLine(" ============================= ")

  table = SetupModifiedRows()
  reader = New DataTableReader(GetChangedCustomers())
  table.Load(reader)
  DisplayRowState(table)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub DisplayRowState(ByVal table As DataTable)
  For i As Integer = 0 To table.Rows.Count - 1
    Dim current As Object = "--"
    Dim original As Object = "--"
    Dim rowState As DataRowState = table.Rows(i).RowState

    ' Attempt to retrieve the current value, which doesn't exist
    ' for deleted rows:
    If rowState <> DataRowState.Deleted Then
      current = table.Rows(i)("Name", DataRowVersion.Current)
    End If

    ' Attempt to retrieve the original value, which doesn't exist
    ' for added rows:
    If rowState <> DataRowState.Added Then
      original = table.Rows(i)("Name", DataRowVersion.Original)
    End If
    Console.WriteLine("{0}: {1}, {2} ({3})", i, _
      current, original, rowState)
  Next
End Sub

Private Function GetChangedCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "XXX"})
  table.Rows.Add(New Object() {2, "XXX"})
  table.Rows.Add(New Object() {3, "XXX"})
  table.Rows.Add(New Object() {4, "XXX"})
  table.Rows.Add(New Object() {5, "XXX"})
  table.Rows.Add(New Object() {6, "XXX"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {5})
  table.Rows.Add(New Object() {6})
  table.Rows.Add(New Object() {7})
  table.Rows.Add(New Object() {8})
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.Rows.Add(New Object() {"Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

Private Function SetupModifiedRows() As DataTable
  ' Fill a DataTable with customer info, and
  ' then modify, delete, and add rows.

  Dim table As DataTable = GetCustomers()
  ' Row 0 is unmodified.
  ' Row 1 is modified.
  ' Row 2 is deleted.
  ' Row 5 is added.
  table.Rows(1)("Name") = "Sydney"
  table.Rows(2).Delete()
  Dim row As DataRow = table.NewRow
  row("ID") = 5
  row("Name") = "Melony"
  table.Rows.Add(row)

  ' Note that the code doesn't call
  ' table.AcceptChanges()
  Return table
End Function

static void Main()
{
    // This example examines a number of scenarios involving the
    // DataTable.Load method.
    Console.WriteLine("Load a DataTable and infer its schema:");

    // The table has no schema. The Load method will infer the
    // schema from the IDataReader:
    DataTable table = new DataTable();

    // Retrieve a data reader, based on the Customers data. In
    // an application, this data might be coming from a middle-tier
    // business object:
    DataTableReader reader = new DataTableReader(GetCustomers());

    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable from an incompatible IDataReader:");

    // Create a table with a single integer column. Attempt
    // to load data from a reader with a schema that is
    // incompatible. Note the exception, determined
    // by the particular incompatibility:
    table = GetIntegerTable();
    reader = new DataTableReader(GetStringTable());
    try
    {
        table.Load(reader);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.GetType().Name + ":" + ex.Message);
    }

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has extra columns:");

    // Note that loading a reader with extra columns adds
    // the columns to the existing table, if possible:
    table = GetIntegerTable();
    reader = new DataTableReader(GetCustomers());
    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has missing columns:");

    // Note that loading a reader with missing columns causes
    // the columns to be filled with null data, if possible:
    table = GetCustomers();
    reader = new DataTableReader(GetIntegerTable());
    table.Load(reader);
    PrintColumns(table);

    // Demonstrate the various possibilites when loading data
    // into a DataTable that already contains data.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Demonstrate data considerations:");
    Console.WriteLine("Current value, Original value, (RowState)");
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Original table:");

    table = SetupModifiedRows();
    DisplayRowState(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Data in IDataReader to be loaded:");
    DisplayRowState(GetChangedCustomers());

    // Load data into a DataTable, retrieve a DataTableReader
    // containing different data, and call the Load method.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("table.Load(reader)");
    Console.WriteLine(" ============================= ");

    table = SetupModifiedRows();
    reader = new DataTableReader(GetChangedCustomers());
    table.Load(reader);
    DisplayRowState(table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void DisplayRowState(DataTable table)
{
    for (int i = 0; i <= table.Rows.Count - 1; i++)
    {
        object current = "--";
        object original = "--";
        DataRowState rowState = table.Rows[i].RowState;

        // Attempt to retrieve the current value, which doesn't exist
        // for deleted rows:
        if (rowState != DataRowState.Deleted)
        {
            current = table.Rows[i]["Name", DataRowVersion.Current];
        }

        // Attempt to retrieve the original value, which doesn't exist
        // for added rows:
        if (rowState != DataRowState.Added)
        {
            original = table.Rows[i]["Name", DataRowVersion.Original];
        }
        Console.WriteLine("{0}: {1}, {2} ({3})", i,
            current, original, rowState);
    }
}

private static DataTable GetChangedCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "XXX" });
    table.Rows.Add(new object[] { 2, "XXX" });
    table.Rows.Add(new object[] { 3, "XXX" });
    table.Rows.Add(new object[] { 4, "XXX" });
    table.Rows.Add(new object[] { 5, "XXX" });
    table.Rows.Add(new object[] { 6, "XXX" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 5 });
    table.Rows.Add(new object[] { 6 });
    table.Rows.Add(new object[] { 7 });
    table.Rows.Add(new object[] { 8 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.Rows.Add(new object[] { "Russ" });
    table.AcceptChanges();
    return table;
}

private static void PrintColumns(DataTable table)
{
    // Loop through all the rows in the DataTableReader
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTable SetupModifiedRows()
{
    // Fill a DataTable with customer info, and
    // then modify, delete, and add rows.

    DataTable table = GetCustomers();
    // Row 0 is unmodified.
    // Row 1 is modified.
    // Row 2 is deleted.
    // Row 5 is added.
    table.Rows[1]["Name"] = "Sydney";
    table.Rows[2].Delete();
    DataRow row = table.NewRow();
    row["ID"] = 5;
    row["Name"] = "Melony";
    table.Rows.Add(row);

    // Note that the code doesn't call
    // table.AcceptChanges()
    return table;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Load 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.Load 方法 (IDataReader, LoadOption)

DataTable
.
.
::
.
Load 方法 (IDataReader, LoadOption)
DataTable 类

通过所提供的 IDataReader，用某个数据源的值填充 DataTable。如果 DataTable 已包含行，则从数据源传入的数据将根据 loadOption 参数的值与现有的行合并。 通过所提供的 IDataReader，用某个数据源的值填充 DataTable。如果 DataTable 已包含行，则从数据源传入的数据将根据 loadOption 参数的值与现有的行合并。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Load ( _
    reader As IDataReader, _
    loadOption As LoadOption _
)
public void Load(
    IDataReader reader,
    LoadOption loadOption
)
public:
void Load(
    IDataReader^ reader,
    LoadOption loadOption
)
member Load :
        reader:IDataReader *
        loadOption:LoadOption -> unit

参数

reader
类型： System.Data IDataReader
提供一个或多个结果集的 IDataReader。
loadOption
类型： System.Data LoadOption
LoadOption 枚举的值，该值指示已存在于 DataTable 中的行如何与共享同一主键的传入行合并。

Load 方法使用加载的 IDataReader 中的第一个结果集，并在成功完成后，将读取器的位置设置为下一个结果集（如果有的话）。转换数据时，Load 方法使用与 Fill 方法的转换规则相同的规则。 Load 方法使用加载的 IDataReader 中的第一个结果集，并在成功完成后，将读取器的位置设置为下一个结果集（如果有的话）。转换数据时，Load 方法使用与 Fill 方法的转换规则相同的规则。

从 IDataReader 实例加载数据时，Load 方法必须考虑下面三个具体问题：架构、数据和事件操作。处理架构时，Load 方法可能会遇到如下表所述的情况。对于所有导入的结果集，都会发生相应的架构操作，即使结果集不包含任何数据也是如此。 从 IDataReader 实例加载数据时，Load 方法必须考虑下面三个具体问题：架构、数据和事件操作。处理架构时，Load 方法可能会遇到如下表所述的情况。对于所有导入的结果集，都会发生相应的架构操作，即使结果集不包含任何数据也是如此。 从 IDataReader 实例加载数据时，Load 方法必须考虑下面三个具体问题：架构、数据和事件操作。处理架构时，Load 方法可能会遇到如下表所述的情况。对于所有导入的结果集，都会发生相应的架构操作，即使结果集不包含任何数据也是如此。

条件 | 行为
DataTable 没有架构。 | Load 方法根据来自导入的 IDataReader 的结果集推断架构。
DataTable 具有一个架构，但该架构与加载的架构不兼容。 | Load 方法引发一个异常，该异常对应于当尝试将数据加载到不兼容的架构中时发生的特定错误。
架构兼容，但加载的结果集架构包含 DataTable 中不存在的列。 | Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。 Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。 Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。 Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。
架构兼容，但加载的结果集架构包含的列数少于 DataTable 中包含的列数。 | 如果某个缺少的列定义了默认值，或者列的数据类型可为 null 值，则 Load 方法将允许添加行，并用默认值或 null 值来替代缺少的列。如果不能使用默认值或 null 值，则 Load 方法将引发异常。如果没有提供特定的默认值，则 Load 方法将 null 值用作暗含的默认值。 如果某个缺少的列定义了默认值，或者列的数据类型可为 null 值，则 Load 方法将允许添加行，并用默认值或 null 值来替代缺少的列。如果不能使用默认值或 null 值，则 Load 方法将引发异常。如果没有提供特定的默认值，则 Load 方法将 null 值用作暗含的默认值。 如果某个缺少的列定义了默认值，或者列的数据类型可为 null 值，则 Load 方法将允许添加行，并用默认值或 null 值来替代缺少的列。如果不能使用默认值或 null 值，则 Load 方法将引发异常。如果没有提供特定的默认值，则 Load 方法将 null 值用作暗含的默认值。

考虑 Load 方法在数据操作方面的行为之前，请注意：DataTable 中的每一行都同时维护每一列的当前值和原始值。这些值可能相同，也有可能不同。如果自填充 DataTable 之后行中的数据发生更改，则会出现后一种情况。有关更多信息，请参见行状态与行版本。 考虑 Load 方法在数据操作方面的行为之前，请注意：DataTable 中的每一行都同时维护每一列的当前值和原始值。这些值可能相同，也有可能不同。如果自填充 DataTable 之后行中的数据发生更改，则会出现后一种情况。有关更多信息，请参见行状态与行版本。 考虑 Load 方法在数据操作方面的行为之前，请注意：DataTable 中的每一行都同时维护每一列的当前值和原始值。这些值可能相同，也有可能不同。如果自填充 DataTable 之后行中的数据发生更改，则会出现后一种情况。有关更多信息，请参见行状态与行版本。

在此方法调用中，指定的 LoadOption 参数影响对传入数据的处理。Load 方法应如何处理与现有行具有相同主键的加载行呢？它应修改当前值、原始值，还是两者都修改？这些问题以及其他更多问题都由 loadOption 参数控制。 在此方法调用中，指定的 LoadOption 参数影响对传入数据的处理。Load 方法应如何处理与现有行具有相同主键的加载行呢？它应修改当前值、原始值，还是两者都修改？这些问题以及其他更多问题都由 loadOption 参数控制。 在此方法调用中，指定的 LoadOption 参数影响对传入数据的处理。Load 方法应如何处理与现有行具有相同主键的加载行呢？它应修改当前值、原始值，还是两者都修改？这些问题以及其他更多问题都由 loadOption 参数控制。 在此方法调用中，指定的 LoadOption 参数影响对传入数据的处理。Load 方法应如何处理与现有行具有相同主键的加载行呢？它应修改当前值、原始值，还是两者都修改？这些问题以及其他更多问题都由 loadOption 参数控制。

如果现有的行和传入的行包含对应的主键值，将使用其当前行状态值来处理行，否则将该行视为新行。

就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。

下表显示对每个 LoadOption 值调用 Load 方法时该方法的行为，以及这些值如何与正在加载的行的状态进行交互。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。 下表显示对每个 LoadOption 值调用 Load 方法时该方法的行为，以及这些值如何与正在加载的行的状态进行交互。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。 下表显示对每个 LoadOption 值调用 Load 方法时该方法的行为，以及这些值如何与正在加载的行的状态进行交互。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。

现有 DataRowState | Upsert | OverwriteChanges | PreserveChanges（默认行为）
Added（已添加） | 当前值 = <传入值> 原始值 = -<不可用> 状态 = <已添加> 行操作 = 更改 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <现有值> 原始值 = <传入值> 状态 = <已修改> 行操作 = 更改原始值
修改后的 | 当前值 = <传入值> 原始值 = <现有值> 状态 = <已修改> 行操作 = 更改 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <现有值> 原始值 = <传入值> 状态 = <已修改> 行操作 = 更改原始值
Deleted | （加载不影响删除的行） 当前值 = --- 原始值 = <现有值> 状态 = <已删除> （添加具有以下特性的新行） 当前值 = <传入值> 原始值 = <不可用> 状态 = <已添加> 行操作 = 添加 | 撤消删除和 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <不可用> 原始值 = <传入值> 状态 = <已删除> 行操作 = 更改原始值
Unchanged | 当前值 = <传入值> 原始值 = <现有值> 若新值与现有值相同，则 状态 = <未更改> 行操作 = 无 Else 状态 = <已修改> 行操作 = 更改 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值
（不存在） | 当前值 = <传入值> 原始值 = <不可用> 状态 = <已添加> 行操作 = 添加 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值

可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。 可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。 可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。 可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。

如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。 如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。 如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。 如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。 如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。

加载选项 | 用于主键比较的 DataRow 版本
OverwriteChanges | 当原始版本存在时，为原始版本，否则为当前版本
PreserveChanges | 当原始版本存在时，为原始版本，否则为当前版本
Upsert | 当当前版本存在时，为当前版本，否则为原始版本

下面的示例演示调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。此示例随后着重于数据问题，包括处理各个加载选项。 下面的示例演示调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。此示例随后着重于数据问题，包括处理各个加载选项。 下面的示例演示调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。此示例随后着重于数据问题，包括处理各个加载选项。

Sub Main()
  Dim table As New DataTable()

  ' This example examines a number of scenarios involving the
  '  DataTable.Load method.
  Console.WriteLine("Load a DataTable and infer its schema:")

  ' Retrieve a data reader, based on the Customers data. In
  ' an application, this data might be coming from a middle-tier
  ' business object:
  Dim reader As New DataTableReader(GetCustomers())

  ' The table has no schema. The Load method will infer the
  ' schema from the IDataReader:
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable from an incompatible IDataReader:")

  ' Create a table with a single integer column. Attempt
  ' to load data from a reader with a schema that is
  ' incompatible. Note the exception, determined
  ' by the particular incompatibility:
  table = GetIntegerTable()
  reader = New DataTableReader(GetStringTable())
  Try
    table.Load(reader)
  Catch ex As Exception
    Console.WriteLine(ex.GetType.Name & ":" & ex.Message())
  End Try

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has extra columns:")

  ' Note that loading a reader with extra columns adds
  ' the columns to the existing table, if possible:
  table = GetIntegerTable()
  reader = New DataTableReader(GetCustomers())
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has missing columns:")

  ' Note that loading a reader with missing columns causes
  ' the columns to be filled with null data, if possible:
  table = GetCustomers()
  reader = New DataTableReader(GetIntegerTable())
  table.Load(reader)
  PrintColumns(table)

  ' Demonstrate the various possibilites when loading data into
  ' a DataTable that already contains data.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Demonstrate data considerations:")
  Console.WriteLine("Current value, Original value, (RowState)")
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Original table:")

  table = SetupModifiedRows()
  DisplayRowState(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Data in IDataReader to be loaded:")
  DisplayRowState(GetChangedCustomers())

  PerformDemo(LoadOption.OverwriteChanges)
  PerformDemo(LoadOption.PreserveChanges)
  PerformDemo(LoadOption.Upsert)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub DisplayRowState(ByVal table As DataTable)
  For i As Integer = 0 To table.Rows.Count - 1
    Dim current As Object = "--"
    Dim original As Object = "--"
    Dim rowState As DataRowState = table.Rows(i).RowState

    ' Attempt to retrieve the current value, which doesn't exist
    ' for deleted rows:
    If rowState <> DataRowState.Deleted Then
      current = table.Rows(i)("Name", DataRowVersion.Current)
    End If

    ' Attempt to retrieve the original value, which doesn't exist
    ' for added rows:
    If rowState <> DataRowState.Added Then
      original = table.Rows(i)("Name", DataRowVersion.Original)
    End If
    Console.WriteLine("{0}: {1}, {2} ({3})", i, _
      current, original, rowState)
  Next
End Sub

Private Function GetChangedCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "XXX"})
  table.Rows.Add(New Object() {1, "XXX"})
  table.Rows.Add(New Object() {2, "XXX"})
  table.Rows.Add(New Object() {3, "XXX"})
  table.Rows.Add(New Object() {4, "XXX"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "Mary"})
  table.Rows.Add(New Object() {1, "Andy"})
  table.Rows.Add(New Object() {2, "Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {4})
  table.Rows.Add(New Object() {5})
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PerformDemo(ByVal optionForLoad As LoadOption)

  ' Load data into a DataTable, retrieve a DataTableReader containing
  ' different data, and call the Load method. Depending on the
  ' LoadOption value passed as a parameter, this procedure displays
  ' different results in the DataTable.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("table.Load(reader, {0})", optionForLoad)
  Console.WriteLine(" ============================= ")

  Dim table As DataTable = SetupModifiedRows()
  Dim reader As New DataTableReader(GetChangedCustomers())
  AddHandler table.RowChanging, New _
      DataRowChangeEventHandler(AddressOf HandleRowChanging)

  table.Load(reader, optionForLoad)
  Console.WriteLine()
  DisplayRowState(table)
End Sub

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

Private Function SetupModifiedRows() As DataTable
  ' Fill a DataTable with customer info, and
  ' then modify, delete, and add rows.

  Dim table As DataTable = GetCustomers()
  ' Row 0 is unmodified.
  ' Row 1 is modified.
  ' Row 2 is deleted.
  ' Row 3 is added.
  table.Rows(1)("Name") = "Sydney"
  table.Rows(2).Delete()
  Dim row As DataRow = table.NewRow
  row("ID") = 3
  row("Name") = "Melony"
  table.Rows.Add(row)

  ' Note that the code doesn't call
  ' table.AcceptChanges()
  Return table
End Function

Private Sub HandleRowChanging(ByVal sender As Object, _
      ByVal e As System.Data.DataRowChangeEventArgs)
  Console.WriteLine( _
      "RowChanging event: ID = {0}, action = {1}", e.Row("ID"), e.Action)
End Sub

static void Main()
{
    // This example examines a number of scenarios involving the
    // DataTable.Load method.
    Console.WriteLine("Load a DataTable and infer its schema:");

    // The table has no schema. The Load method will infer the
    // schema from the IDataReader:
    DataTable table = new DataTable();

    // Retrieve a data reader, based on the Customers data. In
    // an application, this data might be coming from a middle-tier
    // business object:
    DataTableReader reader = new DataTableReader(GetCustomers());

    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable from an incompatible IDataReader:");

    // Create a table with a single integer column. Attempt
    // to load data from a reader with a schema that is
    // incompatible. Note the exception, determined
    // by the particular incompatibility:
    table = GetIntegerTable();
    reader = new DataTableReader(GetStringTable());
    try
    {
        table.Load(reader);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.GetType().Name + ":" + ex.Message);
    }

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has extra columns:");

    // Note that loading a reader with extra columns adds
    // the columns to the existing table, if possible:
    table = GetIntegerTable();
    reader = new DataTableReader(GetCustomers());
    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has missing columns:");

    // Note that loading a reader with missing columns causes
    // the columns to be filled with null data, if possible:
    table = GetCustomers();
    reader = new DataTableReader(GetIntegerTable());
    table.Load(reader);
    PrintColumns(table);

    // Demonstrate the various possibilites when loading data into
    // a DataTable that already contains data.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Demonstrate data considerations:");
    Console.WriteLine("Current value, Original value, (RowState)");
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Original table:");

    table = SetupModifiedRows();
    DisplayRowState(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Data in IDataReader to be loaded:");
    DisplayRowState(GetChangedCustomers());

    PerformDemo(LoadOption.OverwriteChanges);
    PerformDemo(LoadOption.PreserveChanges);
    PerformDemo(LoadOption.Upsert);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void DisplayRowState(DataTable table)
{
    for (int i = 0; i <= table.Rows.Count - 1; i++)
    {
        object current = "--";
        object original = "--";
        DataRowState rowState = table.Rows[i].RowState;

        // Attempt to retrieve the current value, which doesn't exist
        // for deleted rows:
        if (rowState != DataRowState.Deleted)
        {
            current = table.Rows[i]["Name", DataRowVersion.Current];
        }

        // Attempt to retrieve the original value, which doesn't exist
        // for added rows:
        if (rowState != DataRowState.Added)
        {
            original = table.Rows[i]["Name", DataRowVersion.Original];
        }
        Console.WriteLine("{0}: {1}, {2} ({3})", i,
            current, original, rowState);
    }
}

private static DataTable GetChangedCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "XXX" });
    table.Rows.Add(new object[] { 1, "XXX" });
    table.Rows.Add(new object[] { 2, "XXX" });
    table.Rows.Add(new object[] { 3, "XXX" });
    table.Rows.Add(new object[] { 4, "XXX" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "Mary" });
    table.Rows.Add(new object[] { 1, "Andy" });
    table.Rows.Add(new object[] { 2, "Peter" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 4 });
    table.Rows.Add(new object[] { 5 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.AcceptChanges();
    return table;
}

private static void PerformDemo(LoadOption optionForLoad)
{

    // Load data into a DataTable, retrieve a DataTableReader containing
    // different data, and call the Load method. Depending on the
    // LoadOption value passed as a parameter, this procedure displays
    // different results in the DataTable.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("table.Load(reader, {0})", optionForLoad);
    Console.WriteLine(" ============================= ");

    DataTable table = SetupModifiedRows();
    DataTableReader reader = new DataTableReader(GetChangedCustomers());
    table.RowChanging +=new DataRowChangeEventHandler(HandleRowChanging);

    table.Load(reader, optionForLoad);
    Console.WriteLine();
    DisplayRowState(table);
}

private static void PrintColumns(DataTable table)
{
    // Loop through all the rows in the DataTableReader
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTable SetupModifiedRows()
{
    // Fill a DataTable with customer info, and
    // then modify, delete, and add rows.

    DataTable table = GetCustomers();
    // Row 0 is unmodified.
    // Row 1 is modified.
    // Row 2 is deleted.
    // Row 3 is added.
    table.Rows[1]["Name"] = "Sydney";
    table.Rows[2].Delete();
    DataRow row = table.NewRow();
    row["ID"] = 3;
    row["Name"] = "Melony";
    table.Rows.Add(row);

    // Note that the code doesn't call
    // table.AcceptChanges()
    return table;
}

static void HandleRowChanging(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine(
        "RowChanging event: ID = {0}, action = {1}", e.Row["ID"], e.Action);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Load 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.Load 方法 (IDataReader, LoadOption, FillErrorEventHandler)

DataTable
.
.
::
.
Load 方法 (IDataReader, LoadOption, FillErrorEventHandler)
DataTable 类

通过所提供的使用错误处理委托的 IDataReader 用某个数据源中的值填充 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub Load ( _
    reader As IDataReader, _
    loadOption As LoadOption, _
    errorHandler As FillErrorEventHandler _
)
public virtual void Load(
    IDataReader reader,
    LoadOption loadOption,
    FillErrorEventHandler errorHandler
)
public:
virtual void Load(
    IDataReader^ reader,
    LoadOption loadOption,
    FillErrorEventHandler^ errorHandler
)
abstract Load :
        reader:IDataReader *
        loadOption:LoadOption *
        errorHandler:FillErrorEventHandler -> unit
override Load :
        reader:IDataReader *
        loadOption:LoadOption *
        errorHandler:FillErrorEventHandler -> unit

参数

reader
类型： System.Data IDataReader
提供结果集的 IDataReader。
loadOption
类型： System.Data LoadOption
LoadOption 枚举的值，该值指示已存在于 DataTable 中的行如何与共享同一主键的传入行合并。
errorHandler
类型： System.Data FillErrorEventHandler
在加载数据时出现错误的情况下要调用的 FillErrorEventHandler 委托。

Load 方法使用加载的 IDataReader 中的第一个结果集，并在成功完成后，将读取器的位置设置为下一个结果集（如果有的话）。转换数据时，Load 方法使用与 DbDataAdapter..::.Fill 方法的转换规则相同的规则。 Load 方法使用加载的 IDataReader 中的第一个结果集，并在成功完成后，将读取器的位置设置为下一个结果集（如果有的话）。转换数据时，Load 方法使用与 DbDataAdapter..::.Fill 方法的转换规则相同的规则。

从 IDataReader 实例加载数据时，Load 方法必须考虑下面三个具体问题：架构、数据和事件操作。处理架构时，Load 方法可能会遇到如下表所述的情况。对于所有导入的结果集，都会发生相应的架构操作，即使结果集不包含任何数据也是如此。 从 IDataReader 实例加载数据时，Load 方法必须考虑下面三个具体问题：架构、数据和事件操作。处理架构时，Load 方法可能会遇到如下表所述的情况。对于所有导入的结果集，都会发生相应的架构操作，即使结果集不包含任何数据也是如此。 从 IDataReader 实例加载数据时，Load 方法必须考虑下面三个具体问题：架构、数据和事件操作。处理架构时，Load 方法可能会遇到如下表所述的情况。对于所有导入的结果集，都会发生相应的架构操作，即使结果集不包含任何数据也是如此。

条件 | 行为
DataTable 没有架构。 | Load 方法根据来自导入的 IDataReader 的结果集推断架构。
DataTable 具有一个架构，但该架构与加载的架构不兼容。 | Load 方法引发一个异常，该异常对应于当尝试将数据加载到不兼容的架构中时发生的特定错误。
架构兼容，但加载的结果集架构包含 DataTable 中不存在的列。 | Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。 Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。 Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。 Load 方法向 DataTable 的架构添加额外的列。如果 DataTable 中的对应列与加载的结果集在值上不兼容，此方法将引发一个异常。该方法还为所有添加的列从结果集中检索约束信息。仅在当前的 DataTable 在加载操作开始时不包含任何列的情况下，才使用此约束信息（主键约束除外）。
架构兼容，但加载的结果集架构包含的列数少于 DataTable 中包含的列数。 | 如果某个缺少的列定义了默认值，或者列的数据类型可为 null 值，则 Load 方法将允许添加行，并用默认值或 null 值来替代缺少的列。如果不能使用默认值或 null 值，则 Load 方法将引发异常。如果没有提供特定的默认值，则 Load 方法将 null 值用作暗含的默认值。 如果某个缺少的列定义了默认值，或者列的数据类型可为 null 值，则 Load 方法将允许添加行，并用默认值或 null 值来替代缺少的列。如果不能使用默认值或 null 值，则 Load 方法将引发异常。如果没有提供特定的默认值，则 Load 方法将 null 值用作暗含的默认值。 如果某个缺少的列定义了默认值，或者列的数据类型可为 null 值，则 Load 方法将允许添加行，并用默认值或 null 值来替代缺少的列。如果不能使用默认值或 null 值，则 Load 方法将引发异常。如果没有提供特定的默认值，则 Load 方法将 null 值用作暗含的默认值。

考虑 Load 方法在数据操作方面的行为之前，请注意：DataTable 中的每一行都同时维护每一列的当前值和原始值。这些值可能相同，也有可能不同。如果自填充 DataTable 之后行中的数据发生更改，则会出现后一种情况。有关更多信息，请参见行状态与行版本。 考虑 Load 方法在数据操作方面的行为之前，请注意：DataTable 中的每一行都同时维护每一列的当前值和原始值。这些值可能相同，也有可能不同。如果自填充 DataTable 之后行中的数据发生更改，则会出现后一种情况。有关更多信息，请参见行状态与行版本。 考虑 Load 方法在数据操作方面的行为之前，请注意：DataTable 中的每一行都同时维护每一列的当前值和原始值。这些值可能相同，也有可能不同。如果自填充 DataTable 之后行中的数据发生更改，则会出现后一种情况。有关更多信息，请参见行状态与行版本。

在此方法调用中，指定的 LoadOption 参数影响对传入数据的处理。Load 方法应如何处理与现有行具有相同主键的加载行呢？它应修改当前值、原始值，还是两者都修改？这些问题以及其他更多问题都由 loadOption 参数控制。 在此方法调用中，指定的 LoadOption 参数影响对传入数据的处理。Load 方法应如何处理与现有行具有相同主键的加载行呢？它应修改当前值、原始值，还是两者都修改？这些问题以及其他更多问题都由 loadOption 参数控制。 在此方法调用中，指定的 LoadOption 参数影响对传入数据的处理。Load 方法应如何处理与现有行具有相同主键的加载行呢？它应修改当前值、原始值，还是两者都修改？这些问题以及其他更多问题都由 loadOption 参数控制。 在此方法调用中，指定的 LoadOption 参数影响对传入数据的处理。Load 方法应如何处理与现有行具有相同主键的加载行呢？它应修改当前值、原始值，还是两者都修改？这些问题以及其他更多问题都由 loadOption 参数控制。

如果现有的行和传入的行包含对应的主键值，将使用其当前行状态值来处理行，否则将该行视为新行。

就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。 就事件操作而言，RowChanging 事件在每一行更改之前发生，RowChanged 事件在每一行更改之后发生。在每一种情况下，传递到事件处理程序的 DataRowChangeEventArgs 实例的 Action 属性都包含与事件关联的特定操作的有关信息。该操作值会根据加载操作之前的行状态相应地变化。在每一种情况下，两个事件都会发生，并且每个事件的操作相同。操作可能应用于每一行的当前版本和/或原始版本，具体取决于当前的行状态。

下表显示对每个 LoadOption 值调用 Load 方法时该方法的行为，以及这些值如何与正在加载的行的状态进行交互。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。 下表显示对每个 LoadOption 值调用 Load 方法时该方法的行为，以及这些值如何与正在加载的行的状态进行交互。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。 下表显示对每个 LoadOption 值调用 Load 方法时该方法的行为，以及这些值如何与正在加载的行的状态进行交互。最后一行（标记为“Not present”）描述了与任何现有行都不匹配的传入行的行为。该表中的每个单元格描述了一行中某个字段的当前值和原始值，以及在 Load 方法完成之后值的 DataRowState。

现有 DataRowState | Upsert | OverwriteChanges | PreserveChanges（默认行为）
Added（已添加） | 当前值 = <传入值> 原始值 = -<不可用> 状态 = <已添加> 行操作 = 更改 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <现有值> 原始值 = <传入值> 状态 = <已修改> 行操作 = 更改原始值
修改后的 | 当前值 = <传入值> 原始值 = <现有值> 状态 = <已修改> 行操作 = 更改 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <现有值> 原始值 = <传入值> 状态 = <已修改> 行操作 = 更改原始值
Deleted | （加载不影响删除的行） 当前值 = --- 原始值 = <现有值> 状态 = <已删除> （添加具有以下特性的新行） 当前值 = <传入值> 原始值 = <不可用> 状态 = <已添加> 行操作 = 添加 | 撤消删除和 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <不可用> 原始值 = <传入值> 状态 = <已删除> 行操作 = 更改原始值
Unchanged | 当前值 = <传入值> 原始值 = <现有值> 若新值与现有值相同，则 状态 = <未更改> 行操作 = 无 Else 状态 = <已修改> 行操作 = 更改 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值
（不存在） | 当前值 = <传入值> 原始值 = <不可用> 状态 = <已添加> 行操作 = 添加 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值 | 当前值 = <传入值> 原始值 = <传入值> 状态 = <未更改> 行操作 = 更改当前值和原始值

可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。 可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。 可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。 可以通过使用诸如 ReadOnly 和 AutoIncrement 的属性来约束 DataColumn 中的值。Load 方法处理此类列的方式与列属性所定义的行为一致。DataColumn 上的只读约束仅适用于内存中发生的更改。如果需要，Load 方法会覆盖只读列值。

如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。 如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。 如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。 如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。 如果调用 Load 方法时指定了 OverwriteChanges 或 PreserveChanges 选项，则假定数据从 DataTable 的主数据源传入，且 DataTable 将跟踪更改并能够将更改传播回数据源。如果选择 Upsert 选项，则假定数据从一个辅助数据源传入，如中间层组件提供的数据，用户可能更改过此数据。此情况下，假定目的是在 DataTable 中聚合一个或多个数据源的数据，然后可能会将数据传播回主数据源。LoadOption 参数用于确定主键比较所使用的行的特定版本。下表提供了详细信息。

加载选项 | 用于主键比较的 DataRow 版本
OverwriteChanges | 当原始版本存在时，为原始版本，否则为当前版本
PreserveChanges | 当原始版本存在时，为原始版本，否则为当前版本
Upsert | 当当前版本存在时，为当前版本，否则为原始版本

errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将该属性设置为 true 以指示已处理错误并希望继续处理。将此属性设置为 false，则指示希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。 errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将该属性设置为 true 以指示已处理错误并希望继续处理。将此属性设置为 false，则指示希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。 errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将该属性设置为 true 以指示已处理错误并希望继续处理。将此属性设置为 false，则指示希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。 errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将该属性设置为 true 以指示已处理错误并希望继续处理。将此属性设置为 false，则指示希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。 errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将该属性设置为 true 以指示已处理错误并希望继续处理。将此属性设置为 false，则指示希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。 errorHandler 参数是一个 FillErrorEventHandler 委托，该委托引用在加载数据时出现错误的情况下调用的过程。传递给该过程的 FillErrorEventArgs 参数提供了一些属性，通过这些属性可以检索有关出现的错误、当前的数据行以及正在填充的 DataTable 的信息。使用此委托机制（而不使用更为简单的 try/catch 块）可以确定错误、处理情况，如果愿意，还可继续执行。FillErrorEventArgs 参数提供 Continue 属性：将该属性设置为 true 以指示已处理错误并希望继续处理。将此属性设置为 false，则指示希望暂停处理。请注意，将此属性设置为 false 会导致触发问题的代码引发异常。

Sub Main()
  Dim table As New DataTable()

  ' Attempt to load data from a data reader in which
  ' the schema is incompatible with the current schema.
  ' If you use exception handling, you won't get the chance
  ' to examine each row, and each individual table,
  ' as the Load method progresses.
  ' By taking advantage of the FillErrorEventHandler delegate,
  ' you can interact with the Load process as an error occurs,
  ' attempting to fix the problem, or simply continuing or quitting
  ' the Load process:
  table = GetIntegerTable()
  Dim reader As New DataTableReader(GetStringTable())
  table.Load(reader, LoadOption.OverwriteChanges, _
      AddressOf FillErrorHandler)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub FillErrorHandler(ByVal sender As Object, _
  ByVal e As FillErrorEventArgs)
  ' You can use the e.Errors value to determine exactly what
  ' went wrong.
  If e.Errors.GetType Is GetType(System.FormatException) Then
    Console.WriteLine("Error when attempting to update the value: {0}", _
      e.Values(0))
  End If

  ' Setting e.Continue to True tells the Load
  ' method to continue trying. Setting it to False
  ' indicates that an error has occurred, and the
  ' Load method raises the exception that got
  ' you here.
  e.Continue = True
End Sub

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {4})
  table.Rows.Add(New Object() {5})
  table.TableName = "IntegerTable"
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

static void Main()
{
    // Attempt to load data from a data reader in which
    // the schema is incompatible with the current schema.
    // If you use exception handling, you won't get the chance
    // to examine each row, and each individual table,
    // as the Load method progresses.
    // By taking advantage of the FillErrorEventHandler delegate,
    // you can interact with the Load process as an error occurs,
    // attempting to fix the problem, or simply continuing or quitting
    // the Load process:
    DataTable table = GetIntegerTable();
    DataTableReader reader = new DataTableReader(GetStringTable());
    table.Load(reader, LoadOption.OverwriteChanges, FillErrorHandler);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 4 });
    table.Rows.Add(new object[] { 5 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.AcceptChanges();
    return table;
}

static void FillErrorHandler(object sender, FillErrorEventArgs e)
{
    // You can use the e.Errors value to determine exactly what
    // went wrong.
    if (e.Errors.GetType() == typeof(System.FormatException))
    {
        Console.WriteLine("Error when attempting to update the value: {0}",
            e.Values[0]);
    }

    // Setting e.Continue to True tells the Load
    // method to continue trying. Setting it to False
    // indicates that an error has occurred, and the
    // Load method raises the exception that got
    // you here.
    e.Continue = true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Load 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.LoadDataRow 方法

DataTable
.
.
::
.
LoadDataRow 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

查找和更新特定行。如果找不到任何匹配行，则使用给定值创建新行。 查找和更新特定行。如果找不到任何匹配行，则使用给定值创建新行。

名称 说明
页首

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.LoadDataRow 方法 ( array<Object >[]()[], Boolean)

DataTable
.
.
::
.
LoadDataRow 方法 (
array<
Object
>
[]
()
[]
, Boolean)
DataTable 类

查找和更新特定行。如果找不到任何匹配行，则使用给定值创建新行。 查找和更新特定行。如果找不到任何匹配行，则使用给定值创建新行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function LoadDataRow ( _
    values As Object(), _
    fAcceptChanges As Boolean _
) As DataRow
public DataRow LoadDataRow(
    Object[] values,
    bool fAcceptChanges
)
public:
DataRow^ LoadDataRow(
    array<Object^>^ values,
    bool fAcceptChanges
)
member LoadDataRow :
        values:Object[] *
        fAcceptChanges:bool -> DataRow

参数

values
类型：
array<
System Object
>
[]
()
[]

用于创建新行的值的数组。
fAcceptChanges
类型： System Boolean
如果接受更改，则为 true；否则为 false。

返回值

类型： System.Data DataRow
新的 DataRow。
异常 | 条件
ArgumentException | 数组大于表中的列数。
InvalidCastException | 值与其各自的列类型不匹配。
ConstraintException | 添加行将使约束无效。
NoNullAllowedException | 尝试将 null 值放到 AllowDBNull 为假的列中。

LoadDataRow 方法提取值的数组，并在主键列中查找匹配值。

如果某一列具有默认值，则在数组中传递 null 值，以便为该列设置默认值。同样，如果列的 AutoIncrement 属性设置为 true，则在数组中传递 null 值，以便为行设置自动生成的值。 如果某一列具有默认值，则在数组中传递 null 值，以便为该列设置默认值。同样，如果列的 AutoIncrement 属性设置为 true，则在数组中传递 null 值，以便为行设置自动生成的值。

如果 fAcceptChanges 参数为 true 或未指定，则添加新数据，然后调用 AcceptChanges 以接受 DataTable 中的所有更改；如果该参数为 false，则将新添加的行标记为插入，并将现有行的更改标记为修改。

在 ColumnChanging 或 RowChanging 事件过程中还可能出现异常。如果发生异常，则不向表中添加行。 在 ColumnChanging 或 RowChanging 事件过程中还可能出现异常。如果发生异常，则不向表中添加行。

将 LoadDataRow 与 BeginLoadData 和 EndLoadData 一起使用。

下面的示例使用 LoadDataRow 方法尝试查找行。如果找不到这样的行，这些值将用于创建新行。 下面的示例使用 LoadDataRow 方法尝试查找行。如果找不到这样的行，这些值将用于创建新行。

Private Sub MyAddUpdate(ByVal table As DataTable)
    ' Create an array for the values.
    Dim newRow(2) As Object

   ' Set the values of the array.
    newRow(0) = "Hello"
    newRow(1) = "World"
    newRow(2) = "two"
    Dim row As DataRow
    table.BeginLoadData()

    ' Add the new row to the rows collection.
    row = table.LoadDataRow(newRow, True)
    table.EndLoadData()
End Sub

private void MyAddUpdate(DataTable table)
{
    // Create an array for the values.
    object[] newRow = new object[3];

    // Set the values of the array.
    newRow[0] = "Hello";
    newRow[1] = "World";
    newRow[2] = "two";
    DataRow row;
    table.BeginLoadData();

    // Add the new row to the rows collection.
    row = table.LoadDataRow(newRow, true);
    table.EndLoadData();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
LoadDataRow 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.LoadDataRow 方法 ( array<Object >[]()[], LoadOption)

DataTable
.
.
::
.
LoadDataRow 方法 (
array<
Object
>
[]
()
[]
, LoadOption)
DataTable 类

查找和更新特定行。如果找不到任何匹配行，则使用给定值创建新行。 查找和更新特定行。如果找不到任何匹配行，则使用给定值创建新行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function LoadDataRow ( _
    values As Object(), _
    loadOption As LoadOption _
) As DataRow
public DataRow LoadDataRow(
    Object[] values,
    LoadOption loadOption
)
public:
DataRow^ LoadDataRow(
    array<Object^>^ values,
    LoadOption loadOption
)
member LoadDataRow :
        values:Object[] *
        loadOption:LoadOption -> DataRow

参数

values
类型：
array<
System Object
>
[]
()
[]

用于创建新行的值的数组。
loadOption
类型： System.Data LoadOption
用于确定如何将数组值应用到现有行中的对应值。

返回值

类型： System.Data DataRow
新的 DataRow。

LoadDataRow 方法提取值的数组，并在主键列中查找匹配值。

如果某一列具有默认值，则在数组中传递 null 值，以便为该列设置默认值。同样，如果列的 AutoIncrement 属性设置为 true，则在数组中传递 null 值，以便为行设置自动生成的值。 如果某一列具有默认值，则在数组中传递 null 值，以便为该列设置默认值。同样，如果列的 AutoIncrement 属性设置为 true，则在数组中传递 null 值，以便为行设置自动生成的值。

loadOption 参数的值用于确定如何将数组中的值应用到现有行。例如，如果 loadOption 设置为 OverwriteChanges，则每列的 Original 和 Current 值将被传入行中的值替换，且 RowState 属性将设置为 Unchanged。 loadOption 参数的值用于确定如何将数组中的值应用到现有行。例如，如果 loadOption 设置为 OverwriteChanges，则每列的 Original 和 Current 值将被传入行中的值替换，且 RowState 属性将设置为 Unchanged。

在 ColumnChanging 或 RowChanging 事件过程中还可能出现异常。如果发生异常，则不向表中添加行。 在 ColumnChanging 或 RowChanging 事件过程中还可能出现异常。如果发生异常，则不向表中添加行。

将 LoadDataRow 与 BeginLoadData 和 EndLoadData 一起使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
LoadDataRow 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.Merge 方法

DataTable
.
.
::
.
Merge 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

将指定的 DataTable 与当前的 DataTable 合并。

名称 说明
页首

Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。

合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。

下面的控制台应用程序演示了 Merge 方法的 missingSchemaAction 参数的行为。该示例创建同一个表的两个版本，并修改第二个版本的架构。代码随后尝试将第二个表合并到第一个表中。 下面的控制台应用程序演示了 Merge 方法的 missingSchemaAction 参数的行为。该示例创建同一个表的两个版本，并修改第二个版本的架构。代码随后尝试将第二个表合并到第一个表中。 下面的控制台应用程序演示了 Merge 方法的 missingSchemaAction 参数的行为。该示例创建同一个表的两个版本，并修改第二个版本的架构。代码随后尝试将第二个表合并到第一个表中。

说明 说明

此示例演示如何使用 Merge 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。 此示例演示如何使用 Merge 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。

Private Sub DemonstrateMergeTable()
  Dim table1 As New DataTable("Items")

  ' Add columns
  Dim idColumn As New DataColumn("id", GetType(System.Int32))
  Dim itemColumn As New DataColumn("item", GetType(System.Int32))
  table1.Columns.Add(idColumn)
  table1.Columns.Add(itemColumn)

  ' Set the primary key column.
  table1.PrimaryKey = New DataColumn() {idColumn}

  ' Add RowChanged event handler for the table.
  AddHandler table1.RowChanged, AddressOf Row_Changed

  ' Add some rows.
  Dim row As DataRow
  For i As Integer = 0 To 3
    row = table1.NewRow()
    row("id") = i
    row("item") = i
    table1.Rows.Add(row)
  Next i

  ' Accept changes.
  table1.AcceptChanges()
  PrintValues(table1, "Original values")

  ' Create a second DataTable identical to the first.
  Dim table2 As DataTable = table1.Clone()

  ' Add column to the second column, so that the
  ' schemas no longer match.
  table2.Columns.Add("newColumn", GetType(System.String))

  ' Add three rows. Note that the id column can't be the
  ' same as existing rows in the original table.
  row = table2.NewRow()
  row("id") = 14
  row("item") = 774
  row("newColumn") = "new column 1"
  table2.Rows.Add(row)

  row = table2.NewRow()
  row("id") = 12
  row("item") = 555
  row("newColumn") = "new column 2"
  table2.Rows.Add(row)

  row = table2.NewRow()
  row("id") = 13
  row("item") = 665
  row("newColumn") = "new column 3"
  table2.Rows.Add(row)

  ' Merge table2 into the table1.
  Console.WriteLine("Merging")
  table1.Merge(table2, False, MissingSchemaAction.Add)
  PrintValues(table1, "Merged With table1, Schema added")
End Sub

Private Sub Row_Changed(ByVal sender As Object, _
      ByVal e As DataRowChangeEventArgs)
  Console.WriteLine("Row changed {0}{1}{2}", _
    e.Action, ControlChars.Tab, e.Row.ItemArray(0))
End Sub

Private Sub PrintValues(ByVal table As DataTable, _
      ByVal label As String)
  ' Display the values in the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(ControlChars.Tab + " " + row(col).ToString())
    Next col
    Console.WriteLine()
  Next row
End Sub

private static void DemonstrateMergeTable()
{
    DataTable table1 = new DataTable("Items");

    // Add columns
    DataColumn idColumn = new DataColumn("id", typeof(System.Int32));
    DataColumn itemColumn = new DataColumn("item", typeof(System.Int32));
    table1.Columns.Add(idColumn);
    table1.Columns.Add(itemColumn);

    // Set the primary key column.
    table1.PrimaryKey = new DataColumn[] { idColumn };

    // Add RowChanged event handler for the table.
    table1.RowChanged += new
        System.Data.DataRowChangeEventHandler(Row_Changed);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table1.NewRow();
        row["id"] = i;
        row["item"] = i;
        table1.Rows.Add(row);
    }

    // Accept changes.
    table1.AcceptChanges();
    PrintValues(table1, "Original values");

    // Create a second DataTable identical to the first.
    DataTable table2 = table1.Clone();

    // Add column to the second column, so that the
    // schemas no longer match.
    table2.Columns.Add("newColumn", typeof(System.String));

    // Add three rows. Note that the id column can't be the
    // same as existing rows in the original table.
    row = table2.NewRow();
    row["id"] = 14;
    row["item"] = 774;
    row["newColumn"] = "new column 1";
    table2.Rows.Add(row);

    row = table2.NewRow();
    row["id"] = 12;
    row["item"] = 555;
    row["newColumn"] = "new column 2";
    table2.Rows.Add(row);

    row = table2.NewRow();
    row["id"] = 13;
    row["item"] = 665;
    row["newColumn"] = "new column 3";
    table2.Rows.Add(row);

    // Merge table2 into the table1.
    Console.WriteLine("Merging");
    table1.Merge(table2, false, MissingSchemaAction.Add);
    PrintValues(table1, "Merged With table1, schema added");

}

private static void Row_Changed(object sender,
    DataRowChangeEventArgs e)
{
    Console.WriteLine("Row changed {0}\t{1}", e.Action,
        e.Row.ItemArray[0]);
}

private static void PrintValues(DataTable table, string label)
{
    // Display the values in the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn col in table.Columns)
        {
            Console.Write("\t " + row[col].ToString());
        }
        Console.WriteLine();
    }
}

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.Merge 方法 (DataTable)

DataTable
.
.
::
.
Merge 方法 (DataTable)
DataTable 类

将指定的 DataTable 与当前的 DataTable 合并。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    table As DataTable _
)
public void Merge(
    DataTable table
)
public:
void Merge(
    DataTable^ table
)
member Merge :
        table:DataTable -> unit

参数

table
类型： System.Data DataTable
要与当前的 DataTable 进行合并的 DataTable。

Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。

合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataTable。

执行合并时，默认情况下在合并操作期间将保留在合并前对现有数据所做的更改。开发人员可以修改此行为，方法是调用此方法的其他两项重载之一，并将 preserveChanges 参数的值指定为 false。 执行合并时，默认情况下在合并操作期间将保留在合并前对现有数据所做的更改。开发人员可以修改此行为，方法是调用此方法的其他两项重载之一，并将 preserveChanges 参数的值指定为 false。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataRow 对象，产生原始 DataTable 的子集。此子集通常较小，因此可以更有效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataRow 对象，产生原始 DataTable 的子集。此子集通常较小，因此可以更有效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataRow 对象，产生原始 DataTable 的子集。此子集通常较小，因此可以更有效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataRow 对象，产生原始 DataTable 的子集。此子集通常较小，因此可以更有效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataRow 对象，产生原始 DataTable 的子集。此子集通常较小，因此可以更有效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataRow 对象，产生原始 DataTable 的子集。此子集通常较小，因此可以更有效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataRow 对象，产生原始 DataTable 的子集。此子集通常较小，因此可以更有效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataRow 对象，产生原始 DataTable 的子集。此子集通常较小，因此可以更有效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。

当将新的源 DataTable 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行相匹配。DataRowState 值为 Added 的源行将匹配与新源行具有相同主键值的新目标行。 当将新的源 DataTable 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行相匹配。DataRowState 值为 Added 的源行将匹配与新源行具有相同主键值的新目标行。

下面的控制台应用程序创建一个简单的 DataTable 并将数据添加到该表中。该示例随后创建该表的一个副本，并向该副本添加行。最后，该示例调用 Merge 方法将第二个表中的数据与第一个表中的数据合并。 下面的控制台应用程序创建一个简单的 DataTable 并将数据添加到该表中。该示例随后创建该表的一个副本，并向该副本添加行。最后，该示例调用 Merge 方法将第二个表中的数据与第一个表中的数据合并。 下面的控制台应用程序创建一个简单的 DataTable 并将数据添加到该表中。该示例随后创建该表的一个副本，并向该副本添加行。最后，该示例调用 Merge 方法将第二个表中的数据与第一个表中的数据合并。

Private Sub DemonstrateMergeTable()
  Dim table1 As New DataTable("Items")

  ' Add columns
  Dim column1 As New DataColumn("id", GetType(System.Int32))
  Dim column2 As New DataColumn("item", GetType(System.Int32))
  table1.Columns.Add(column1)
  table1.Columns.Add(column2)

  ' Set the primary key column.
  table1.PrimaryKey = New DataColumn() {column1}

  ' Add RowChanged event handler for the table.
  AddHandler table1.RowChanged, AddressOf Row_Changed

  ' Add some rows.
  Dim row As DataRow
  For i As Integer = 0 To 3
    row = table1.NewRow()
    row("id") = i
    row("item") = i
    table1.Rows.Add(row)
  Next i

  ' Accept changes.
  table1.AcceptChanges()
  PrintValues(table1, "Original values")

  ' Create a second DataTable identical to the first.
  Dim table2 As DataTable = table1.Clone()

  ' Add three rows. Note that the id column can't be the
  ' same as existing rows in the original table.
  row = table2.NewRow()
  row("id") = 14
  row("item") = 774
  table2.Rows.Add(row)

  row = table2.NewRow()
  row("id") = 12
  row("item") = 555
  table2.Rows.Add(row)

  row = table2.NewRow()
  row("id") = 13
  row("item") = 665
  table2.Rows.Add(row)

  ' Merge table2 into the table1.
  Console.WriteLine("Merging")
  table1.Merge(table2)
  PrintValues(table1, "Merged With table1")

End Sub

Private Sub Row_Changed(ByVal sender As Object, _
  ByVal e As DataRowChangeEventArgs)
  Console.WriteLine("Row changed {0}{1}{2}", _
    e.Action, ControlChars.Tab, e.Row.ItemArray(0))
End Sub

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)
  ' Display the values in the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(ControlChars.Tab + " " + row(col).ToString())
    Next col
    Console.WriteLine()
  Next row
End Sub

private static void DemonstrateMergeTable()
{
    DataTable table1 = new DataTable("Items");

    // Add columns
    DataColumn column1 = new DataColumn("id", typeof(System.Int32));
    DataColumn column2 = new DataColumn("item", typeof(System.Int32));
    table1.Columns.Add(column1);
    table1.Columns.Add(column2);

    // Set the primary key column.
    table1.PrimaryKey = new DataColumn[] { column1 };

    // Add RowChanged event handler for the table.
    table1.RowChanged +=
        new System.Data.DataRowChangeEventHandler(Row_Changed);

    // Add some rows.
    DataRow row;
    for (int i = 0; i <= 3; i++)
    {
        row = table1.NewRow();
        row["id"] = i;
        row["item"] = i;
        table1.Rows.Add(row);
    }

    // Accept changes.
    table1.AcceptChanges();
    PrintValues(table1, "Original values");

    // Create a second DataTable identical to the first.
    DataTable table2 = table1.Clone();

    // Add three rows. Note that the id column can't be the
    // same as existing rows in the original table.
    row = table2.NewRow();
    row["id"] = 14;
    row["item"] = 774;
    table2.Rows.Add(row);

    row = table2.NewRow();
    row["id"] = 12;
    row["item"] = 555;
    table2.Rows.Add(row);

    row = table2.NewRow();
    row["id"] = 13;
    row["item"] = 665;
    table2.Rows.Add(row);

    // Merge table2 into the table1.
    Console.WriteLine("Merging");
    table1.Merge(table2);
    PrintValues(table1, "Merged With table1");

}

private static void Row_Changed(object sender,
    DataRowChangeEventArgs e)
{
    Console.WriteLine("Row changed {0}\t{1}",
        e.Action, e.Row.ItemArray[0]);
}

private static void PrintValues(DataTable table, string label)
{
    // Display the values in the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn col in table.Columns)
        {
            Console.Write("\t " + row[col].ToString());
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Merge 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.Merge 方法 (DataTable, Boolean)

DataTable
.
.
::
.
Merge 方法 (DataTable, Boolean)
DataTable 类

将指定的 DataTable 与当前的 DataTable 合并，指示是否在当前的 DataTable 中保留更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    table As DataTable, _
    preserveChanges As Boolean _
)
public void Merge(
    DataTable table,
    bool preserveChanges
)
public:
void Merge(
    DataTable^ table,
    bool preserveChanges
)
member Merge :
        table:DataTable *
        preserveChanges:bool -> unit

参数

table
类型： System.Data DataTable
要与当前的 DataTable 进行合并的 DataTable。
preserveChanges
类型： System Boolean
如果保留当前 DataTable 中的更改，则为 true；否则为 false。

Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。

合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataTable。

除非开发人员将 preserveChanges 参数指定为 false，否则在执行合并时，合并操作中将保留合并前对现有数据所做的更改。如果 preserveChanges 参数设置为 true，则传入值不覆盖现有行的 Current 行版本中的现有值。如果 preserveChanges 参数设置为 false，则传入值将覆盖现有行的 Current 行版本中的现有值。有关行版本的更多信息，请参见 行状态与行版本。 除非开发人员将 preserveChanges 参数指定为 false，否则在执行合并时，合并操作中将保留合并前对现有数据所做的更改。如果 preserveChanges 参数设置为 true，则传入值不覆盖现有行的 Current 行版本中的现有值。如果 preserveChanges 参数设置为 false，则传入值将覆盖现有行的 Current 行版本中的现有值。有关行版本的更多信息，请参见 行状态与行版本。 除非开发人员将 preserveChanges 参数指定为 false，否则在执行合并时，合并操作中将保留合并前对现有数据所做的更改。如果 preserveChanges 参数设置为 true，则传入值不覆盖现有行的 Current 行版本中的现有值。如果 preserveChanges 参数设置为 false，则传入值将覆盖现有行的 Current 行版本中的现有值。有关行版本的更多信息，请参见 行状态与行版本。 除非开发人员将 preserveChanges 参数指定为 false，否则在执行合并时，合并操作中将保留合并前对现有数据所做的更改。如果 preserveChanges 参数设置为 true，则传入值不覆盖现有行的 Current 行版本中的现有值。如果 preserveChanges 参数设置为 false，则传入值将覆盖现有行的 Current 行版本中的现有值。有关行版本的更多信息，请参见 行状态与行版本。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。

当将新的源 DataTable 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行将匹配与新源行具有相同主键值的新目标行。 当将新的源 DataTable 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行将匹配与新源行具有相同主键值的新目标行。

下面的控制台应用程序创建一个包含行的 DataTable，修改这些行中的某些数据，并尝试合并来自不同 DataTable 中的数据。该示例演示 preserveChanges 参数的不同行为。 下面的控制台应用程序创建一个包含行的 DataTable，修改这些行中的某些数据，并尝试合并来自不同 DataTable 中的数据。该示例演示 preserveChanges 参数的不同行为。

Private Sub DemonstrateMergeTable()
  ' Demonstrate merging, within and without
  ' preserving changes.

  ' In this example, take these actions:
  ' 1. Create a DataTable (table1) and fill the table with data.
  ' 2. Create a copy of table1, and modify its data (modifiedTable).
  ' 3. Modify data in table1.
  ' 4. Make a copy of table1 (table1Copy).
  ' 5. Merge the data from modifiedTable into table1 and table1Copy,
  '    showing the difference between setting the preserveChanges
  '    parameter to true and false.

  ' Create a new DataTable.
  Dim table1 As New DataTable("Items")

  ' Add two columns to the table:
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table1.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table1.Columns.Add(column)

  ' Set primary key column.
  table1.PrimaryKey = New DataColumn() {table1.Columns(0)}

  ' Add some rows.
  Dim row As DataRow
  For i As Integer = 0 To 3
    row = table1.NewRow()
    row("item") = "Item " & i
    table1.Rows.Add(row)
  Next i

  ' Accept changes.
  table1.AcceptChanges()
  PrintValues(table1, "Original values")

  ' Using the same schema as the original table,
  ' modify the data for later merge.
  Dim modifiedTable As DataTable = table1.Copy()
  For Each row In modifiedTable.Rows
    row("item") = row("item").ToString() & " modified"
  Next
  modifiedTable.AcceptChanges()

  ' Change row values, and add a new row:
  table1.Rows(0)("item") = "New Item 0"
  table1.Rows(1)("item") = "New Item 1"

  row = table1.NewRow()
  row("id") = 4
  row("item") = "Item 4"
  table1.Rows.Add(row)

  ' Get a copy of the modified data:
  Dim table1Copy As DataTable = table1.Copy()
  PrintValues(table1, "Modified and New Values")
  PrintValues(modifiedTable, "Data to be merged into table1")

  ' Merge new data into the modified data.
  table1.Merge(modifiedTable, True)
  PrintValues(table1, "Merged data (preserve changes)")

  table1Copy.Merge(modifiedTable, False)
  PrintValues(modifiedTable, "Merged data (don't preserve changes)")

End Sub

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)

  ' Display the values in the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column, _
          DataRowVersion.Current))
    Next column
    Console.WriteLine()
  Next row
End Sub

private static void DemonstrateMergeTable()
{
    // Demonstrate merging, within and without
    // preserving changes.

    // In this example, take these actions:
    // 1. Create a DataTable (table1) and fill the table with data.
    // 2. Create a copy of table1, and modify its data (modifiedTable).
    // 3. Modify data in table1.
    // 4. Make a copy of table1 (table1Copy).
    // 5. Merge the data from modifiedTable into table1 and table1Copy,
    //    showing the difference between setting the preserveChanges
    //    parameter to true and false.

    // Create a new DataTable.
    DataTable table1 = new DataTable("Items");

    // Add two columns to the table:
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table1.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table1.Columns.Add(column);

    // Set primary key column.
    table1.PrimaryKey = new DataColumn[] { table1.Columns[0] };

    // Add some rows.
    DataRow row;
    for (int i = 0; i <= 3; i++)
    {
        row = table1.NewRow();
        row["item"] = "Item " + i;
        table1.Rows.Add(row);
    }

    // Accept changes.
    table1.AcceptChanges();
    PrintValues(table1, "Original values");

    // Using the same schema as the original table,
    // modify the data for later merge.
    DataTable modifiedTable = table1.Copy();
    foreach (DataRow rowModified in modifiedTable.Rows)
    {
        rowModified["item"] = rowModified["item"].ToString()
            + " modified";
    }
    modifiedTable.AcceptChanges();

    // Change row values, and add a new row:
    table1.Rows[0]["item"] = "new Item 0";
    table1.Rows[1]["item"] = "new Item 1";

    row = table1.NewRow();
    row["id"] = 4;
    row["item"] = "Item 4";
    table1.Rows.Add(row);

    // Get a copy of the modified data:
    DataTable table1Copy = table1.Copy();
    PrintValues(table1, "Modified and new Values");
    PrintValues(modifiedTable, "Data to be merged into table1");

    // Merge new data into the modified data.
    table1.Merge(modifiedTable, true);
    PrintValues(table1, "Merged data (preserve changes)");

    table1Copy.Merge(modifiedTable, false);
    PrintValues(modifiedTable, "Merged data (don't preserve changes)");
}

private static void PrintValues(DataTable table, string label)
{
    // Display the values in the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("\t{0}", row[column, DataRowVersion.Current]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Merge 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.Merge 方法 (DataTable, Boolean, MissingSchemaAction)

DataTable
.
.
::
.
Merge 方法 (DataTable, Boolean, MissingSchemaAction)
DataTable 类

将指定的 DataTable 与当前的 DataTable 合并，指示是否在当前的 DataTable 中保留更改以及如何处理缺失的架构。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Merge ( _
    table As DataTable, _
    preserveChanges As Boolean, _
    missingSchemaAction As MissingSchemaAction _
)
public void Merge(
    DataTable table,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
public:
void Merge(
    DataTable^ table,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
member Merge :
        table:DataTable *
        preserveChanges:bool *
        missingSchemaAction:MissingSchemaAction -> unit

参数

table
类型： System.Data DataTable
要与当前的 DataTable 进行合并的 DataTable。
preserveChanges
类型： System Boolean
如果保留当前 DataTable 中的更改，则为 true；否则为 false。
missingSchemaAction
类型： System.Data MissingSchemaAction
MissingSchemaAction 值之一。

Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。

合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。

通常在一系列过程的末尾调用 Merge 方法，这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataTable。

除非开发人员将 preserveChanges 参数指定为 false，否则在执行合并时，合并操作中将保留合并前对现有数据所做的更改。如果 preserveChanges 参数设置为 true，则传入值不覆盖现有行的 Current 行版本中的现有值。如果 preserveChanges 参数设置为 false，则传入值将覆盖现有行的 Current 行版本中的现有值。有关行版本的更多信息，请参见 行状态与行版本。 除非开发人员将 preserveChanges 参数指定为 false，否则在执行合并时，合并操作中将保留合并前对现有数据所做的更改。如果 preserveChanges 参数设置为 true，则传入值不覆盖现有行的 Current 行版本中的现有值。如果 preserveChanges 参数设置为 false，则传入值将覆盖现有行的 Current 行版本中的现有值。有关行版本的更多信息，请参见 行状态与行版本。 除非开发人员将 preserveChanges 参数指定为 false，否则在执行合并时，合并操作中将保留合并前对现有数据所做的更改。如果 preserveChanges 参数设置为 true，则传入值不覆盖现有行的 Current 行版本中的现有值。如果 preserveChanges 参数设置为 false，则传入值将覆盖现有行的 Current 行版本中的现有值。有关行版本的更多信息，请参见 行状态与行版本。 除非开发人员将 preserveChanges 参数指定为 false，否则在执行合并时，合并操作中将保留合并前对现有数据所做的更改。如果 preserveChanges 参数设置为 true，则传入值不覆盖现有行的 Current 行版本中的现有值。如果 preserveChanges 参数设置为 false，则传入值将覆盖现有行的 Current 行版本中的现有值。有关行版本的更多信息，请参见 行状态与行版本。

在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。 在客户端应用程序中，通常有这样一个按钮，用户可以单击它来收集已更改的数据并对其进行验证，然后将其发送回中间层组件。在这种情况下，将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataTable。第二个 DataTable 对象只包含已更改的 DataTable 和 DataRow 对象，结果产生初始 DataTable 的子集。该子集通常较小，因此可以更高效地传递回中间层组件。然后，中间层组件将通过存储过程，用更改更新原始数据源。然后，中间层可以发送回一个新的 DataTable，其中包含数据源中的初始数据和最新数据（通过再次运行初始查询）；或者它可以发送回包含从数据源对其进行的所有更改的子集。（例如，如果数据源自动创建唯一主键值，则可以将这些值传播回客户端应用程序。）在哪一种情况下都可以使用 Merge()()() 方法将返回的 DataTable 合并回客户端应用程序的初始 DataTable。

当调用 Merge()()() 方法时，由于架构可能已更改，因此对两个 DataTable 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataTable 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataTable 将包含已添加的架构和数据。 当调用 Merge()()() 方法时，由于架构可能已更改，因此对两个 DataTable 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataTable 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataTable 将包含已添加的架构和数据。 当调用 Merge()()() 方法时，由于架构可能已更改，因此对两个 DataTable 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataTable 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataTable 将包含已添加的架构和数据。 当调用 Merge()()() 方法时，由于架构可能已更改，因此对两个 DataTable 对象的架构进行比较。例如，在企业对企业的情况下，可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataTable 包含目标中缺少的架构元素（已添加的 DataColumn 对象），则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下，合并的 DataTable 将包含已添加的架构和数据。

合并架构之后合并数据。

当将新的源 DataTable 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行将匹配与新源行具有相同主键值的新目标行。 当将新的源 DataTable 合并到目标中时，DataRowState 值为 Unchanged、Modified 或 Deleted 的任何源行都会与具有相同主键值的目标行进行匹配。DataRowState 值为 Added 的源行将匹配与新源行具有相同主键值的新目标行。

下面的控制台应用程序演示了 Merge 方法的 missingSchemaAction 参数的行为。该示例创建同一个表的两个版本，并修改第二个版本的架构。代码随后尝试将第二个表合并到第一个表中。 下面的控制台应用程序演示了 Merge 方法的 missingSchemaAction 参数的行为。该示例创建同一个表的两个版本，并修改第二个版本的架构。代码随后尝试将第二个表合并到第一个表中。 下面的控制台应用程序演示了 Merge 方法的 missingSchemaAction 参数的行为。该示例创建同一个表的两个版本，并修改第二个版本的架构。代码随后尝试将第二个表合并到第一个表中。

Private Sub DemonstrateMergeTable()
  Dim itemsTable As New DataTable("Items")

  ' Add columns
  Dim idColumn As New DataColumn("id", GetType(System.Int32))
  Dim itemColumn As New DataColumn("item", GetType(System.Int32))
  itemsTable.Columns.Add(idColumn)
  itemsTable.Columns.Add(itemColumn)

  ' Set the primary key column.
  itemsTable.PrimaryKey = New DataColumn() {idColumn}

  ' Add RowChanged event handler for the table.
  AddHandler itemsTable.RowChanged, AddressOf Row_Changed

  ' Add some rows.
  Dim row As DataRow
  For i As Integer = 0 To 3
    row = itemsTable.NewRow()
    row("id") = i
    row("item") = i
    itemsTable.Rows.Add(row)
  Next i

  ' Accept changes.
  itemsTable.AcceptChanges()
  PrintValues(itemsTable, "Original values")

  ' Create a second DataTable identical to the first.
  Dim itemsClone As DataTable = itemsTable.Clone()

  ' Add column to the second column, so that the
  ' schemas no longer match.
  itemsClone.Columns.Add("newColumn", GetType(System.String))

  ' Add three rows. Note that the id column can't be the
  ' same as existing rows in the original table.
  row = itemsClone.NewRow()
  row("id") = 14
  row("item") = 774
  row("newColumn") = "new column 1"
  itemsClone.Rows.Add(row)

  row = itemsClone.NewRow()
  row("id") = 12
  row("item") = 555
  row("newColumn") = "new column 2"
  itemsClone.Rows.Add(row)

  row = itemsClone.NewRow()
  row("id") = 13
  row("item") = 665
  row("newColumn") = "new column 3"
  itemsClone.Rows.Add(row)

  ' Merge itemsClone into the itemsTable.
  Console.WriteLine("Merging")
  itemsTable.Merge(itemsClone, False, MissingSchemaAction.Add)
  PrintValues(itemsTable, "Merged With itemsTable, Schema added")
End Sub

Private Sub Row_Changed(ByVal sender As Object, _
  ByVal e As DataRowChangeEventArgs)
  Console.WriteLine("Row changed {0}{1}{2}", _
    e.Action, ControlChars.Tab, e.Row.ItemArray(0))
End Sub

Private Sub PrintValues(ByVal table As DataTable, ByVal label As String)
  ' Display the values in the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(ControlChars.Tab + " " + row(col).ToString())
    Next col
    Console.WriteLine()
  Next row
End Sub

private static void DemonstrateMergeTable()
{
    DataTable itemsTable = new DataTable("Items");

    // Add columns
    DataColumn idColumn = new DataColumn("id", typeof(System.Int32));
    DataColumn itemColumn = new DataColumn("item", typeof(System.Int32));
    itemsTable.Columns.Add(idColumn);
    itemsTable.Columns.Add(itemColumn);

    // Set the primary key column.
    itemsTable.PrimaryKey = new DataColumn[] { idColumn };

    // Add RowChanged event handler for the table.
    itemsTable.RowChanged +=
        new System.Data.DataRowChangeEventHandler(Row_Changed);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = itemsTable.NewRow();
        row["id"] = i;
        row["item"] = i;
        itemsTable.Rows.Add(row);
    }

    // Accept changes.
    itemsTable.AcceptChanges();
    PrintValues(itemsTable, "Original values");

    // Create a second DataTable identical to the first.
    DataTable itemsClone = itemsTable.Clone();

    // Add column to the second column, so that the
    // schemas no longer match.
    itemsClone.Columns.Add("newColumn", typeof(System.String));

    // Add three rows. Note that the id column can't be the
    // same as existing rows in the original table.
    row = itemsClone.NewRow();
    row["id"] = 14;
    row["item"] = 774;
    row["newColumn"] = "new column 1";
    itemsClone.Rows.Add(row);

    row = itemsClone.NewRow();
    row["id"] = 12;
    row["item"] = 555;
    row["newColumn"] = "new column 2";
    itemsClone.Rows.Add(row);

    row = itemsClone.NewRow();
    row["id"] = 13;
    row["item"] = 665;
    row["newColumn"] = "new column 3";
    itemsClone.Rows.Add(row);

    // Merge itemsClone into the itemsTable.
    Console.WriteLine("Merging");
    itemsTable.Merge(itemsClone, false, MissingSchemaAction.Add);
    PrintValues(itemsTable, "Merged With itemsTable, schema added");
}

private static void Row_Changed(object sender,
    DataRowChangeEventArgs e)
{
    Console.WriteLine("Row changed {0}\t{1}",
        e.Action, e.Row.ItemArray[0]);
}

private static void PrintValues(DataTable table, string label)
{
    // Display the values in the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn col in table.Columns)
        {
            Console.Write("\t " + row[col].ToString());
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Merge 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.NewRow 方法

DataTable
.
.
::
.
NewRow 方法
DataTable 类

创建与该表具有相同架构的新 DataRow。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function NewRow As DataRow
public DataRow NewRow()
public:
DataRow^ NewRow()
member NewRow : unit -> DataRow

返回值

类型： System.Data DataRow
DataRow，其架构与 DataTable 的架构相同。

必须使用 NewRow 方法才能创建与 DataTable 具有相同架构的新 DataRow 对象。在创建 DataRow 之后，可以通过 DataTable 对象的 Rows 属性将其添加到 DataRowCollection 中。使用 NewRow 创建新行时，必须先对这些行进行处理，然后再调用 Clear。 必须使用 NewRow 方法才能创建与 DataTable 具有相同架构的新 DataRow 对象。在创建 DataRow 之后，可以通过 DataTable 对象的 Rows 属性将其添加到 DataRowCollection 中。使用 NewRow 创建新行时，必须先对这些行进行处理，然后再调用 Clear。 必须使用 NewRow 方法才能创建与 DataTable 具有相同架构的新 DataRow 对象。在创建 DataRow 之后，可以通过 DataTable 对象的 Rows 属性将其添加到 DataRowCollection 中。使用 NewRow 创建新行时，必须先对这些行进行处理，然后再调用 Clear。

下面的示例创建一个 DataTable、添加两个用于确定表的架构的 DataColumn 对象、使用 NewRow 方法创建几个新的 DataRow 对象。然后使用 Add 方法将这些 DataRow 对象添加到 DataRowCollection 中。 下面的示例创建一个 DataTable、添加两个用于确定表的架构的 DataColumn 对象、使用 NewRow 方法创建几个新的 DataRow 对象。然后使用 Add 方法将这些 DataRow 对象添加到 DataRowCollection 中。

Private Sub MakeDataTableAndDisplay()
    ' Create new DataTable and DataSource objects.
    Dim table As DataTable = New DataTable()

    ' Declare DataColumn and DataRow variables.
    Dim column As DataColumn
    Dim row As DataRow
    Dim view As DataView

    ' Create new DataColumn, set DataType, ColumnName and add to DataTable.
    column = New DataColumn()
    column.DataType = System.Type.GetType("System.Int32")
    column.ColumnName = "id"
    table.Columns.Add(column)

    ' Create second column.
    column = New DataColumn()
    column.DataType = Type.GetType("System.String")
    column.ColumnName = "item"
    table.Columns.Add(column)

    ' Create new DataRow objects and add to DataTable.
    Dim i As Integer
    For i = 0 to 9
       row = table.NewRow()
       row("id") = i
       row("item") = "item " & i
       table.Rows.Add(row)
    Next
    ' Create a DataView using the DataTable.
    view = New DataView(table)

    ' Set a DataGrid control's DataSource to the DataView.
    DataGrid1.DataSource = view
End Sub

private void MakeDataTableAndDisplay()
{
    // Create new DataTable and DataSource objects.
    DataTable table = new DataTable();

    // Declare DataColumn and DataRow variables.
    DataColumn column;
    DataRow row;
    DataView view;

    // Create new DataColumn, set DataType, ColumnName and add to DataTable.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.ColumnName = "id";
    table.Columns.Add(column);

    // Create second column.
    column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "item";
    table.Columns.Add(column);

    // Create new DataRow objects and add to DataTable.
    for(int i = 0; i < 10; i++)
    {
        row = table.NewRow();
        row["id"] = i;
        row["item"] = "item " + i.ToString();
        table.Rows.Add(row);
    }

    // Create a DataView using the DataTable.
    view = new DataView(table);

    // Set a DataGrid control's DataSource to the DataView.
    dataGrid1.DataSource = view;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.NewRowArray 方法

DataTable
.
.
::
.
NewRowArray 方法
DataTable 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

返回 DataRow 的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Function NewRowArray ( _
    size As Integer _
) As DataRow()
protected internal DataRow[] NewRowArray(
    int size
)
protected public:
array<DataRow^>^ NewRowArray(
    int size
)
member NewRowArray :
        size:int -> DataRow[]

参数

size
类型： System Int32
描述数组大小的 Int32 值。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

新数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.NewRowFromBuilder 方法

DataTable
.
.
::
.
NewRowFromBuilder 方法
DataTable 类

从现有的行创建新行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function NewRowFromBuilder ( _
    builder As DataRowBuilder _
) As DataRow
protected virtual DataRow NewRowFromBuilder(
    DataRowBuilder builder
)
protected:
virtual DataRow^ NewRowFromBuilder(
    DataRowBuilder^ builder
)
abstract NewRowFromBuilder :
        builder:DataRowBuilder -> DataRow
override NewRowFromBuilder :
        builder:DataRowBuilder -> DataRow

参数

builder
类型： System.Data DataRowBuilder
一个 DataRowBuilder 对象。

返回值

类型： System.Data DataRow
DataRow 派生类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.OnColumnChanged 方法

DataTable
.
.
::
.
OnColumnChanged 方法
DataTable 类

引发 ColumnChanged 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Overridable Sub OnColumnChanged ( _
    e As DataColumnChangeEventArgs _
)
protected internal virtual void OnColumnChanged(
    DataColumnChangeEventArgs e
)
protected public:
virtual void OnColumnChanged(
    DataColumnChangeEventArgs^ e
)
abstract OnColumnChanged :
        e:DataColumnChangeEventArgs -> unit
override OnColumnChanged :
        e:DataColumnChangeEventArgs -> unit

参数

e
类型： System.Data DataColumnChangeEventArgs
包含事件数据的 DataColumnChangeEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnColumnChanged 时，确保调用基类的 OnColumnChanged 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnColumnChanging 方法

DataTable
.
.
::
.
OnColumnChanging 方法
DataTable 类

引发 ColumnChanging 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Overridable Sub OnColumnChanging ( _
    e As DataColumnChangeEventArgs _
)
protected internal virtual void OnColumnChanging(
    DataColumnChangeEventArgs e
)
protected public:
virtual void OnColumnChanging(
    DataColumnChangeEventArgs^ e
)
abstract OnColumnChanging :
        e:DataColumnChangeEventArgs -> unit
override OnColumnChanging :
        e:DataColumnChangeEventArgs -> unit

参数

e
类型： System.Data DataColumnChangeEventArgs
包含事件数据的 DataColumnChangeEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnColumnChanging 时，确保调用基类的 OnColumnChanging 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnPropertyChanging 方法

DataTable
.
.
::
.
OnPropertyChanging 方法
DataTable 类

引发 PropertyChanged 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnPropertyChanging ( _
    pcevent As PropertyChangedEventArgs _
)
protected virtual void OnPropertyChanging(
    PropertyChangedEventArgs pcevent
)
protected:
virtual void OnPropertyChanging(
    PropertyChangedEventArgs^ pcevent
)
abstract OnPropertyChanging :
        pcevent:PropertyChangedEventArgs -> unit
override OnPropertyChanging :
        pcevent:PropertyChangedEventArgs -> unit

参数

pcevent
类型： System.ComponentModel PropertyChangedEventArgs
包含事件数据的 PropertyChangedEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnPropertyChanging 时，确保调用基类的 OnPropertyChanging 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnRemoveColumn 方法

DataTable
.
.
::
.
OnRemoveColumn 方法
DataTable 类

通知 DataTable：DataColumn 正在被移除。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnRemoveColumn ( _
    column As DataColumn _
)
protected virtual void OnRemoveColumn(
    DataColumn column
)
protected:
virtual void OnRemoveColumn(
    DataColumn^ column
)
abstract OnRemoveColumn :
        column:DataColumn -> unit
override OnRemoveColumn :
        column:DataColumn -> unit

参数

column
类型： System.Data DataColumn
正在被移除的 DataColumn。

引发事件时会通过委托调用事件处理程序。有关更多信息，请参见引发事件。 引发事件时会通过委托调用事件处理程序。有关更多信息，请参见引发事件。

对继承者的说明

重写派生类中的 OnRemoveColumn 时，确保调用基类的 OnRemoveColumn 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnRowChanged 方法

DataTable
.
.
::
.
OnRowChanged 方法
DataTable 类

引发 RowChanged 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnRowChanged ( _
    e As DataRowChangeEventArgs _
)
protected virtual void OnRowChanged(
    DataRowChangeEventArgs e
)
protected:
virtual void OnRowChanged(
    DataRowChangeEventArgs^ e
)
abstract OnRowChanged :
        e:DataRowChangeEventArgs -> unit
override OnRowChanged :
        e:DataRowChangeEventArgs -> unit

参数

e
类型： System.Data DataRowChangeEventArgs
包含事件数据的 DataRowChangeEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnRowChanged 时，确保调用基类的 OnRowChanged 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnRowChanging 方法

DataTable
.
.
::
.
OnRowChanging 方法
DataTable 类

引发 RowChanging 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnRowChanging ( _
    e As DataRowChangeEventArgs _
)
protected virtual void OnRowChanging(
    DataRowChangeEventArgs e
)
protected:
virtual void OnRowChanging(
    DataRowChangeEventArgs^ e
)
abstract OnRowChanging :
        e:DataRowChangeEventArgs -> unit
override OnRowChanging :
        e:DataRowChangeEventArgs -> unit

参数

e
类型： System.Data DataRowChangeEventArgs
包含事件数据的 DataRowChangeEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnRowChanging 时，确保调用基类的 OnRowChanging 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnRowDeleted 方法

DataTable
.
.
::
.
OnRowDeleted 方法
DataTable 类

引发 RowDeleted 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnRowDeleted ( _
    e As DataRowChangeEventArgs _
)
protected virtual void OnRowDeleted(
    DataRowChangeEventArgs e
)
protected:
virtual void OnRowDeleted(
    DataRowChangeEventArgs^ e
)
abstract OnRowDeleted :
        e:DataRowChangeEventArgs -> unit
override OnRowDeleted :
        e:DataRowChangeEventArgs -> unit

参数

e
类型： System.Data DataRowChangeEventArgs
包含事件数据的 DataRowChangeEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnRowDeleted 时，确保调用基类的 OnRowDeleted 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnRowDeleting 方法

DataTable
.
.
::
.
OnRowDeleting 方法
DataTable 类

引发 RowDeleting 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnRowDeleting ( _
    e As DataRowChangeEventArgs _
)
protected virtual void OnRowDeleting(
    DataRowChangeEventArgs e
)
protected:
virtual void OnRowDeleting(
    DataRowChangeEventArgs^ e
)
abstract OnRowDeleting :
        e:DataRowChangeEventArgs -> unit
override OnRowDeleting :
        e:DataRowChangeEventArgs -> unit

参数

e
类型： System.Data DataRowChangeEventArgs
包含事件数据的 DataRowChangeEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnRowDeleting 时，确保调用基类的 OnRowDeleting 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnTableCleared 方法

DataTable
.
.
::
.
OnTableCleared 方法
DataTable 类

引发 TableCleared 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnTableCleared ( _
    e As DataTableClearEventArgs _
)
protected virtual void OnTableCleared(
    DataTableClearEventArgs e
)
protected:
virtual void OnTableCleared(
    DataTableClearEventArgs^ e
)
abstract OnTableCleared :
        e:DataTableClearEventArgs -> unit
override OnTableCleared :
        e:DataTableClearEventArgs -> unit

参数

e
类型： System.Data DataTableClearEventArgs
包含事件数据的 DataTableClearEventArgs。

引发 TableCleared 事件，该事件在成功清除所有行后，但在 Clear 方法将控制返回给调用方之前立即激发。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnTableClearing 方法

DataTable
.
.
::
.
OnTableClearing 方法
DataTable 类

引发 TableClearing 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnTableClearing ( _
    e As DataTableClearEventArgs _
)
protected virtual void OnTableClearing(
    DataTableClearEventArgs e
)
protected:
virtual void OnTableClearing(
    DataTableClearEventArgs^ e
)
abstract OnTableClearing :
        e:DataTableClearEventArgs -> unit
override OnTableClearing :
        e:DataTableClearEventArgs -> unit

参数

e
类型： System.Data DataTableClearEventArgs
包含事件数据的 DataTableClearEventArgs。

引发 TableClearing 事件，该事件在开始处理 Clear 操作前激发。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.OnTableNewRow 方法

DataTable
.
.
::
.
OnTableNewRow 方法
DataTable 类

引发 TableNewRow 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnTableNewRow ( _
    e As DataTableNewRowEventArgs _
)
protected virtual void OnTableNewRow(
    DataTableNewRowEventArgs e
)
protected:
virtual void OnTableNewRow(
    DataTableNewRowEventArgs^ e
)
abstract OnTableNewRow :
        e:DataTableNewRowEventArgs -> unit
override OnTableNewRow :
        e:DataTableNewRowEventArgs -> unit

参数

e
类型： System.Data DataTableNewRowEventArgs
包含事件数据的 DataTableNewRowEventArgs。

引发 TableNewRow 事件，该事件在使用 NewRow 创建新 DataRow 后激发。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.ReadXml 方法

DataTable
.
.
::
.
ReadXml 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

将 XML 架构和数据读入 DataTable。

名称 说明
页首

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataTable 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读取数据和架构，请使用包括 XmlReadMode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataTable 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读取数据和架构，请使用包括 XmlReadMode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

参考

DataTable 类
DataTable 成员
System.Data 命名空间
ReadXml

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXml 方法 (Stream)

DataTable
.
.
::
.
ReadXml 方法 (Stream)
DataTable 类

使用指定的 Stream 将 XML 架构和数据读入 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    stream As Stream _
) As XmlReadMode
public XmlReadMode ReadXml(
    Stream stream
)
public:
XmlReadMode ReadXml(
    Stream^ stream
)
member ReadXml :
        stream:Stream -> XmlReadMode

参数

stream
类型： System.IO Stream
从 Stream 派生的对象。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

当前的 DataTable 及其子代中将加载所提供的 Stream 中的数据。该方法的行为与 DataSet..::.ReadXml 方法的行为基本相同，不同之处在于该方法仅加载当前表及其子代的数据。 当前的 DataTable 及其子代中将加载所提供的 Stream 中的数据。该方法的行为与 DataSet..::.ReadXml 方法的行为基本相同，不同之处在于该方法仅加载当前表及其子代的数据。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataTable 的方式，而 ReadXmlSchema 方法仅读架构。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

下面的示例创建一个包含两列、十行的 DataTable。该示例通过调用 WriteXml 方法，将 DataTable 架构和数据写入内存流。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用架构和数据填充此表。 下面的示例创建一个包含两列、十行的 DataTable。该示例通过调用 WriteXml 方法，将 DataTable 架构和数据写入内存流。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用架构和数据填充此表。 下面的示例创建一个包含两列、十行的 DataTable。该示例通过调用 WriteXml 方法，将 DataTable 架构和数据写入内存流。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用架构和数据填充此表。

Private Sub DemonstrateReadWriteXMLDocumentWithStream()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintValues(table, "Original table")

  ' Write the schema and data to XML in a memory stream.
  Dim xmlStream As New System.IO.MemoryStream()
  table.WriteXml(xmlStream, XmlWriteMode.WriteSchema)

  ' Rewind the memory stream.
  xmlStream.Position = 0

  Dim newTable As New DataTable
  newTable.ReadXml(xmlStream)

  ' Print out values in the table.
  PrintValues(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) As DataTable
  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintValues(ByVal table As DataTable, ByVal label As String)
  ' Display the contents of the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column))
    Next column
    Console.WriteLine()
  Next row
End Sub

private static void DemonstrateReadWriteXMLDocumentWithStream()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintValues(table, "Original table");

    // Write the schema and data to XML in a memory stream.
    System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
    table.WriteXml(xmlStream, XmlWriteMode.WriteSchema);

    // Rewind the memory stream.
    xmlStream.Position = 0;

    DataTable newTable = new DataTable();
    newTable.ReadXml(xmlStream);

    // Print out values in the table.
    PrintValues(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintValues(DataTable table, string label)
{
    // Display the contents of the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("\t{0}", row[column]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXml 方法 (String)

DataTable
.
.
::
.
ReadXml 方法 (String)
DataTable 类

将指定文件中的 XML 架构和数据读入 DataTable 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    fileName As String _
) As XmlReadMode
public XmlReadMode ReadXml(
    string fileName
)
public:
XmlReadMode ReadXml(
    String^ fileName
)
member ReadXml :
        fileName:string -> XmlReadMode

参数

fileName
类型： System String
从中读取数据的文件的名称。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

当前的 DataTable 及其子代中将加载所提供的 String 中已命名文件中的数据。该方法的行为与 DataSet..::.ReadXml 方法的行为基本相同，不同之处在于该方法仅加载当前表及其子代的数据。 当前的 DataTable 及其子代中将加载所提供的 String 中已命名文件中的数据。该方法的行为与 DataSet..::.ReadXml 方法的行为基本相同，不同之处在于该方法仅加载当前表及其子代的数据。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataTable 的方式，而 ReadXmlSchema 方法仅读架构。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

下面的示例创建一个包含两列、十行的 DataTable。该示例将 DataTable 架构和数据写入磁盘中。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用架构和数据填充此表。 下面的示例创建一个包含两列、十行的 DataTable。该示例将 DataTable 架构和数据写入磁盘中。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用架构和数据填充此表。 下面的示例创建一个包含两列、十行的 DataTable。该示例将 DataTable 架构和数据写入磁盘中。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用架构和数据填充此表。

Private Sub DemonstrateReadWriteXMLDocumentWithString()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintValues(table, "Original table")

  ' Write the schema and data to XML in a file.
  Dim fileName As String = "C:\TestData.xml"
  table.WriteXml(fileName, XmlWriteMode.WriteSchema)

  Dim newTable As New DataTable
  newTable.ReadXml(fileName)

  ' Print out values in the table.
  PrintValues(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
  As DataTable

  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column))
    Next column
    Console.WriteLine()
  Next row
End Sub

private static void DemonstrateReadWriteXMLDocumentWithString()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintValues(table, "Original table");

    string fileName = "C:\\TestData.xml";
    table.WriteXml(fileName, XmlWriteMode.WriteSchema);

    DataTable newTable = new DataTable();
    newTable.ReadXml(fileName);

    // Print out values in the table.
    PrintValues(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintValues(DataTable table, string label)
{
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("\t{0}", row[column]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXml 方法 (TextReader)

DataTable
.
.
::
.
ReadXml 方法 (TextReader)
DataTable 类

使用指定的 TextReader 将 XML 架构和数据读入 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    reader As TextReader _
) As XmlReadMode
public XmlReadMode ReadXml(
    TextReader reader
)
public:
XmlReadMode ReadXml(
    TextReader^ reader
)
member ReadXml :
        reader:TextReader -> XmlReadMode

参数

reader
类型： System.IO TextReader
将用于读取数据的 TextReader。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

当前的 DataTable 及其子代中将加载所提供的 TextReader 中的数据。该方法的行为与 DataSet..::.ReadXml 方法的行为基本相同，不同之处在于该方法仅加载当前表及其子代的数据。 当前的 DataTable 及其子代中将加载所提供的 TextReader 中的数据。该方法的行为与 DataSet..::.ReadXml 方法的行为基本相同，不同之处在于该方法仅加载当前表及其子代的数据。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataTable 的方式，而 ReadXmlSchema 方法仅读架构。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

下面的示例创建一个包含两列、十行的 DataTable。该示例通过调用 WriteXml 方法，将 DataTable 架构和数据写入内存流。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用架构和数据填充此表。 下面的示例创建一个包含两列、十行的 DataTable。该示例通过调用 WriteXml 方法，将 DataTable 架构和数据写入内存流。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用架构和数据填充此表。 下面的示例创建一个包含两列、十行的 DataTable。该示例通过调用 WriteXml 方法，将 DataTable 架构和数据写入内存流。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用架构和数据填充此表。

Private Sub DemonstrateReadWriteXMLDocumentWithReader()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintValues(table, "Original table")

  ' Write the schema and data to XML in a memory stream.
  Dim xmlStream As New System.IO.MemoryStream()
  table.WriteXml(xmlStream, XmlWriteMode.WriteSchema)

  ' Rewind the memory stream.
  xmlStream.Position = 0

  Dim reader As New System.IO.StreamReader(xmlStream)
  Dim newTable As New DataTable
  newTable.ReadXml(reader)

  ' Print out values in the table.
  PrintValues(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
  As DataTable
  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column))
    Next column
    Console.WriteLine()
  Next row
End Sub

private static void DemonstrateReadWriteXMLDocumentWithReader()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintValues(table, "Original table");

    // Write the schema and data to XML in a memory stream.
    System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
    table.WriteXml(xmlStream, XmlWriteMode.WriteSchema);

    // Rewind the memory stream.
    xmlStream.Position = 0;

    System.IO.StreamReader reader =
        new System.IO.StreamReader(xmlStream);
    DataTable newTable = new DataTable();
    newTable.ReadXml(reader);

    // Print out values in the table.
    PrintValues(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintValues(DataTable table, string label)
{
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("\t{0}", row[column]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXml 方法 (XmlReader)

DataTable
.
.
::
.
ReadXml 方法 (XmlReader)
DataTable 类

使用指定的 XmlReader 将 XML 架构和数据读入 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ReadXml ( _
    reader As XmlReader _
) As XmlReadMode
public XmlReadMode ReadXml(
    XmlReader reader
)
public:
XmlReadMode ReadXml(
    XmlReader^ reader
)
member ReadXml :
        reader:XmlReader -> XmlReadMode

参数

reader
类型： System.Xml XmlReader
将用于读取数据的 XmlReader。

返回值

类型： System.Data XmlReadMode
用于读取数据的 XmlReadMode。

当前的 DataTable 及其子代中将加载所提供的 XmlReader 中已命名文件中的数据。该方法的行为与 ReadXml 方法的行为基本相同，不同之处在于该方法仅加载当前表及其子代的数据。 当前的 DataTable 及其子代中将加载所提供的 XmlReader 中已命名文件中的数据。该方法的行为与 ReadXml 方法的行为基本相同，不同之处在于该方法仅加载当前表及其子代的数据。

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataTable 的方式，而 ReadXmlSchema 方法仅读架构。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。 如果指定内联架构，则该内联架构用于在加载数据之前扩展现有的关系结构。如果存在任何冲突（例如，用不同的数据类型定义了同一个表中的同一列），将引发异常。

如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。 如果未指定内联架构，则在必要时按照 XML 文档的结构通过推理扩展关系结构。如果不能通过推理扩展架构以公开所有数据，则将引发异常。

说明 说明

当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。 当合法 XML 字符（如“_”）在序列化 XML 中转义时，DataSet 不会将 XML 元素与其对应的 DataColumn 或 DataTable 相关联。DataSet 本身仅转义 XML 元素名称中的非法 XML 字符，因此只能使用相同的元素。转义 XML 元素名称中的合法字符时，该元素在处理的同时将被忽略。

下面的示例创建一个包含两列、十行的 DataTable。该示例将 DataTable 架构和数据写入 XmlReader 中。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用 XmlReader 实例中的架构和数据填充此表。 下面的示例创建一个包含两列、十行的 DataTable。该示例将 DataTable 架构和数据写入 XmlReader 中。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用 XmlReader 实例中的架构和数据填充此表。 下面的示例创建一个包含两列、十行的 DataTable。该示例将 DataTable 架构和数据写入 XmlReader 中。该示例创建第二个 DataTable，并调用 ReadXml 方法来使用 XmlReader 实例中的架构和数据填充此表。

Private Sub DemonstrateReadWriteXMLDocumentWithReader()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintValues(table, "Original table")

  ' Write the schema and data to XML in a memory stream.
  Dim xmlStream As New System.IO.MemoryStream()
  table.WriteXml(xmlStream, XmlWriteMode.WriteSchema)

  ' Rewind the memory stream.
  xmlStream.Position = 0

  Dim reader As New System.Xml.XmlTextReader(xmlStream)
  Dim newTable As New DataTable
  newTable.ReadXml(reader)

  ' Print out values in the table.
  PrintValues(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
  As DataTable
  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column))
    Next column
    Console.WriteLine()
  Next row
End Sub

private static void DemonstrateReadWriteXMLDocumentWithReader()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintValues(table, "Original table");

    // Write the schema and data to XML in a memory stream.
    System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
    table.WriteXml(xmlStream, XmlWriteMode.WriteSchema);

    // Rewind the memory stream.
    xmlStream.Position = 0;

    System.Xml.XmlTextReader reader =
        new System.Xml.XmlTextReader(xmlStream);
    DataTable newTable = new DataTable();
    newTable.ReadXml(reader);

    // Print out values in the table.
    PrintValues(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintValues(DataTable table, string label)
{
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("\t{0}", row[column]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
ReadXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXmlSchema 方法

DataTable
.
.
::
.
ReadXmlSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

将 XML 架构读入 DataTable。

名称 说明
页首

使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。 使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。

若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

按照 XSD 标准解释 XML 架构。

通常在调用用于填充 DataTable 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

参考

DataTable 类
DataTable 成员
System.Data 命名空间
ReadXmlSchema

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXmlSchema 方法 (Stream)

DataTable
.
.
::
.
ReadXmlSchema 方法 (Stream)
DataTable 类

使用指定流将 XML 架构读入 DataTable 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ReadXmlSchema ( _
    stream As Stream _
)
public void ReadXmlSchema(
    Stream stream
)
public:
void ReadXmlSchema(
    Stream^ stream
)
member ReadXmlSchema :
        stream:Stream -> unit

参数

stream
类型： System.IO Stream
用于读取该架构的流。

使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。 使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。

若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

按照 XSD 标准解释 XML 架构。

如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。 如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。

通常在调用用于填充 DataTable 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

若要使用 XML 架构创建嵌套关系，请使用隐式嵌套元素。也可以将嵌套关系配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。 若要使用 XML 架构创建嵌套关系，请使用隐式嵌套元素。也可以将嵌套关系配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。 若要使用 XML 架构创建嵌套关系，请使用隐式嵌套元素。也可以将嵌套关系配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。

下面的控制台应用程序创建一个新的 DataTable，并将该表的架构写入 MemoryStream。然后，该示例创建一个新的 DataTable，并从已保存的 XML 架构中读取该表的架构。 下面的控制台应用程序创建一个新的 DataTable，并将该表的架构写入 MemoryStream。然后，该示例创建一个新的 DataTable，并从已保存的 XML 架构中读取该表的架构。

Private Sub DemonstrateReadWriteXMLSchemaWithStream()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintSchema(table, "Original table")

  ' Write the schema to XML in a memory stream.
  Dim xmlStream As New System.IO.MemoryStream()
  table.WriteXmlSchema(xmlStream)

  ' Rewind the memory stream.
  xmlStream.Position = 0

  Dim newTable As New DataTable
  newTable.ReadXmlSchema(xmlStream)

  ' Print out values in the table.
  PrintSchema(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
  As DataTable

  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintSchema(ByVal table As DataTable, _
  ByVal label As String)

  ' Display the schema of the supplied DataTable:
  Console.WriteLine(label)
  For Each column As DataColumn In table.Columns
    Console.WriteLine("{0}{1}: {2}", ControlChars.Tab, _
      column.ColumnName, column.DataType.Name)
  Next column
End Sub

private static void DemonstrateReadWriteXMLSchemaWithStream()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintSchema(table, "Original table");

    // Write the schema to XML in a memory stream.
    System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
    table.WriteXmlSchema(xmlStream);

    // Rewind the memory stream.
    xmlStream.Position = 0;

    DataTable newTable = new DataTable();
    newTable.ReadXmlSchema(xmlStream);

    // Print out values in the table.
    PrintSchema(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintSchema(DataTable table, string label)
{
    // Display the schema of the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataColumn column in table.Columns)
    {
        Console.WriteLine("\t{0}: {1}", column.ColumnName,
            column.DataType.Name);
    }
    Console.WriteLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
ReadXmlSchema 重载
System.Data 命名空间
DataSet ReadXmlSchema

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXmlSchema 方法 (String)

DataTable
.
.
::
.
ReadXmlSchema 方法 (String)
DataTable 类

将指定文件中的 XML 架构读入 DataTable 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ReadXmlSchema ( _
    fileName As String _
)
public void ReadXmlSchema(
    string fileName
)
public:
void ReadXmlSchema(
    String^ fileName
)
member ReadXmlSchema :
        fileName:string -> unit

参数

fileName
类型： System String
从中读取架构信息的文件的名称。

使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。 使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。

若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

按照 XSD 标准解释 XML 架构。

如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。 如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。

通常在调用用于填充 DataTable 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

若要使用 XML 架构创建嵌套关系，请使用隐式嵌套元素。也可以将嵌套关系重新配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。 若要使用 XML 架构创建嵌套关系，请使用隐式嵌套元素。也可以将嵌套关系重新配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。 若要使用 XML 架构创建嵌套关系，请使用隐式嵌套元素。也可以将嵌套关系重新配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。

下面的控制台应用程序创建一个新的 DataTable，并将该表的架构写入文件中。然后，该示例创建一个新的 DataTable，并使用该文件作为其源，从已保存的 XML 架构中读取该表的架构。 下面的控制台应用程序创建一个新的 DataTable，并将该表的架构写入文件中。然后，该示例创建一个新的 DataTable，并使用该文件作为其源，从已保存的 XML 架构中读取该表的架构。

Private Sub DemonstrateReadWriteXMLSchemaWithFile()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintSchema(table, "Original table")

  Dim xmlFile As String = "SchemaDemo.xml"

  ' Write the schema to XML.
  table.WriteXmlSchema(xmlFile)

  Dim newTable As New DataTable
  newTable.ReadXmlSchema(xmlFile)

  ' Print out values in the table.
  PrintSchema(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
      As DataTable
  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintSchema(ByVal table As DataTable, _
      ByVal label As String)
  ' Display the schema of the supplied DataTable:
  Console.WriteLine(label)
  For Each column As DataColumn In table.Columns
    Console.WriteLine("{0}{1}: {2}", ControlChars.Tab, _
      column.ColumnName, column.DataType.Name)
  Next column
End Sub

private static void DemonstrateReadWriteXMLSchemaWithFile()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintSchema(table, "Original table");

    // Write the schema to XML in a file.
    string xmlFile = "C:\\SchemaDemo.xml";
    table.WriteXmlSchema(xmlFile);

    DataTable newTable = new DataTable();
    newTable.ReadXmlSchema(xmlFile);

    // Print out values in the table.
    PrintSchema(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintSchema(DataTable table, string label)
{
    // Display the schema of the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataColumn column in table.Columns)
    {
        Console.WriteLine("\t{0}: {1}", column.ColumnName,
            column.DataType.Name);
    }
    Console.WriteLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
ReadXmlSchema 重载
System.Data 命名空间
DataSet ReadXmlSchema

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXmlSchema 方法 (TextReader)

DataTable
.
.
::
.
ReadXmlSchema 方法 (TextReader)
DataTable 类

使用指定的 TextReader 将 XML 架构读入 DataTable 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ReadXmlSchema ( _
    reader As TextReader _
)
public void ReadXmlSchema(
    TextReader reader
)
public:
void ReadXmlSchema(
    TextReader^ reader
)
member ReadXmlSchema :
        reader:TextReader -> unit

参数

reader
类型： System.IO TextReader
用于读取架构信息的 TextReader。

使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。 使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。

若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

按照 XSD 标准解释 XML 架构。

如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。 如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。

通常在调用用于填充 DataTable 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

若要使用 XML 架构创建嵌套关系，请使用隐式嵌套元素。也可以将嵌套关系重新配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。 若要使用 XML 架构创建嵌套关系，请使用隐式嵌套元素。也可以将嵌套关系重新配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。 若要使用 XML 架构创建嵌套关系，请使用隐式嵌套元素。也可以将嵌套关系重新配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。

下面的控制台应用程序创建一个新的 DataTable，并将该表的架构写入 MemoryStream。然后，该示例创建一个新的 DataTable，并使用 StreamReader（从 TextReader 中继承）作为其源，从已保存的 XML 架构中读取该表的架构。 下面的控制台应用程序创建一个新的 DataTable，并将该表的架构写入 MemoryStream。然后，该示例创建一个新的 DataTable，并使用 StreamReader（从 TextReader 中继承）作为其源，从已保存的 XML 架构中读取该表的架构。

Private Sub DemonstrateReadWriteXMLSchemaWithReader()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintSchema(table, "Original table")

  ' Write the schema to XML in a memory stream.
  Dim xmlStream As New System.IO.MemoryStream()
  table.WriteXmlSchema(xmlStream)

  ' Rewind the memory stream.
  xmlStream.Position = 0

  Dim newTable As New DataTable
  Dim reader As New System.IO.StreamReader(xmlStream)
  newTable.ReadXmlSchema(reader)

  ' Print out values in the table.
  PrintSchema(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
  As DataTable

  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintSchema(ByVal table As DataTable, _
  ByVal label As String)

  ' Display the schema of the supplied DataTable:
  Console.WriteLine(label)
  For Each column As DataColumn In table.Columns
    Console.WriteLine("{0}{1}: {2}", ControlChars.Tab, _
      column.ColumnName, column.DataType.Name)
  Next column
End Sub

private static void DemonstrateReadWriteXMLSchemaWithReader()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintSchema(table, "Original table");

    // Write the schema to XML in a memory stream.
    System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
    table.WriteXmlSchema(xmlStream);

    // Rewind the memory stream.
    xmlStream.Position = 0;

    DataTable newTable = new DataTable();
    System.IO.StreamReader reader =
        new System.IO.StreamReader(xmlStream);
    newTable.ReadXmlSchema(reader);

    // Print out values in the table.
    PrintSchema(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintSchema(DataTable table, string label)
{
    // Display the schema of the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataColumn column in table.Columns)
    {
        Console.WriteLine("\t{0}: {1}",
            column.ColumnName, column.DataType.Name);
    }
    Console.WriteLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
ReadXmlSchema 重载
System.Data 命名空间
DataSet ReadXmlSchema

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXmlSchema 方法 (XmlReader)

DataTable
.
.
::
.
ReadXmlSchema 方法 (XmlReader)
DataTable 类

使用指定的 XmlReader 将 XML 架构读入 DataTable 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub ReadXmlSchema ( _
    reader As XmlReader _
)
public void ReadXmlSchema(
    XmlReader reader
)
public:
void ReadXmlSchema(
    XmlReader^ reader
)
member ReadXmlSchema :
        reader:XmlReader -> unit

参数

reader
类型： System.Xml XmlReader
用于读取架构信息的 XmlReader。

使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。 使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。

若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

按照 XSD 标准解释 XML 架构。

如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。 如果 msdata:DataType 和 xs:type 类型不匹配，则会发生数据损坏。不会引发任何异常。

通常在调用用于填充 DataTable 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

说明 说明

使用 XML 架构创建嵌套关系的方法就是隐式嵌套元素。另外，也可以将嵌套关系重新配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。 使用 XML 架构创建嵌套关系的方法就是隐式嵌套元素。另外，也可以将嵌套关系重新配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。 使用 XML 架构创建嵌套关系的方法就是隐式嵌套元素。另外，也可以将嵌套关系重新配置为使用显式列名。若要在嵌套关系中包括相应的 DataTable，必须隐式嵌套元素。

下面的控制台应用程序创建一个新的 DataTable，并将该表的架构写入 MemoryStream。然后，该示例创建一个新的 DataTable，并使用 XmlTextReader（从 XmlReader 中继承）作为其源，从已保存的 XML 架构中读取该表的架构。 下面的控制台应用程序创建一个新的 DataTable，并将该表的架构写入 MemoryStream。然后，该示例创建一个新的 DataTable，并使用 XmlTextReader（从 XmlReader 中继承）作为其源，从已保存的 XML 架构中读取该表的架构。

Private Sub DemonstrateReadWriteXMLSchemaWithReader()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintSchema(table, "Original table")

  ' Write the schema to XML in a memory stream.
  Dim xmlStream As New System.IO.MemoryStream()
  table.WriteXmlSchema(xmlStream)

  ' Rewind the memory stream.
  xmlStream.Position = 0

  Dim newTable As New DataTable
  Dim reader As New System.Xml.XmlTextReader(xmlStream)
  newTable.ReadXmlSchema(reader)

  ' Print out values in the table.
  PrintSchema(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
      As DataTable
  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintSchema(ByVal table As DataTable, _
      ByVal label As String)
  ' Display the schema of the supplied DataTable:
  Console.WriteLine(label)
  For Each column As DataColumn In table.Columns
    Console.WriteLine("{0}{1}: {2}", ControlChars.Tab, _
      column.ColumnName, column.DataType.Name)
  Next column
End Sub

private static void DemonstrateReadWriteXMLSchemaWithReader()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintSchema(table, "Original table");

    // Write the schema to XML in a memory stream.
    System.IO.MemoryStream xmlStream =
        new System.IO.MemoryStream();
    table.WriteXmlSchema(xmlStream);

    // Rewind the memory stream.
    xmlStream.Position = 0;

    DataTable newTable = new DataTable();
    System.Xml.XmlTextReader reader =
        new System.Xml.XmlTextReader(xmlStream);
    newTable.ReadXmlSchema(reader);

    // Print out values in the table.
    PrintSchema(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintSchema(DataTable table, string label)
{
    // Display the schema of the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataColumn column in table.Columns)
    {
        Console.WriteLine("\t{0}: {1}", column.ColumnName,
            column.DataType.Name);
    }
    Console.WriteLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
ReadXmlSchema 重载
System.Data 命名空间
DataSet ReadXmlSchema

其他资源

DataTable (ADO.NET)


DataTable ..::.ReadXmlSerializable 方法

DataTable
.
.
::
.
ReadXmlSerializable 方法
DataTable 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

从 XML 流中读取。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub ReadXmlSerializable ( _
    reader As XmlReader _
)
protected virtual void ReadXmlSerializable(
    XmlReader reader
)
protected:
virtual void ReadXmlSerializable(
    XmlReader^ reader
)
abstract ReadXmlSerializable :
        reader:XmlReader -> unit
override ReadXmlSerializable :
        reader:XmlReader -> unit

参数

reader
类型： System.Xml XmlReader
一个 XmlReader 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.RejectChanges 方法

DataTable
.
.
::
.
RejectChanges 方法
DataTable 类

回滚自该表加载以来或上次调用 AcceptChanges 以来对该表进行的所有更改。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub RejectChanges
public void RejectChanges()
public:
void RejectChanges()
member RejectChanges : unit -> unit

调用 RejectChanges 时，任何仍处于编辑模式的 DataRow 对象将取消其编辑。新行被移除。DataRowState 设置为 Modified 或 Deleted 的行返回到其初始状态。 调用 RejectChanges 时，任何仍处于编辑模式的 DataRow 对象将取消其编辑。新行被移除。DataRowState 设置为 Modified 或 Deleted 的行返回到其初始状态。 调用 RejectChanges 时，任何仍处于编辑模式的 DataRow 对象将取消其编辑。新行被移除。DataRowState 设置为 Modified 或 Deleted 的行返回到其初始状态。

下面的示例对 DataTable 进行几次更改，但是通过调用 RejectChanges 方法拒绝这些更改。

Private Sub ShowRejectChanges(table As DataTable)
    ' Print the values of row 1, in the column named "CompanyName."
    Console.WriteLine(table.Rows(1)("CompanyName"))

    ' Make Changes to the column named "CompanyName."
    table.Rows(1)("CompanyName") = "Taro"

    ' Reject the changes.
    table.RejectChanges()

    ' Print the original values:
    Console.WriteLine(table.Rows(1)("CompanyName"))
End Sub

private void ShowRejectChanges(DataTable table)
{
    // Print the values of row 1, in the column named "CompanyName."
    Console.WriteLine(table.Rows[1]["CompanyName"]);

    // Make Changes to the column named "CompanyName."
    table.Rows[1]["CompanyName"] = "Taro";

    // Reject the changes.
    table.RejectChanges();

    // Print the original values:
    Console.WriteLine(table.Rows[1]["CompanyName"]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.Reset 方法

DataTable
.
.
::
.
Reset 方法
DataTable 类

将 DataTable 重置为其初始状态。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub Reset
public virtual void Reset()
public:
virtual void Reset()
abstract Reset : unit -> unit
override Reset : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.Select 方法

DataTable
.
.
::
.
Select 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

获取 DataRow 对象的数组。

名称 说明
页首

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.Select 方法

DataTable
.
.
::
.
Select 方法
DataTable 类

获取所有 DataRow 对象的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Select As DataRow()
public DataRow[] Select()
public:
array<DataRow^>^ Select()
member Select : unit -> DataRow[]

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组。

该方法按照主键顺序返回当前行（如果没有主键，则按照添加顺序）。

下面的示例通过 Select 方法返回 DataRow 对象的数组。

Private Sub GetRows()
    ' Get the DataTable of a DataSet.
    Dim table As DataTable = DataSet1.Tables("Suppliers")
    Dim rows() As DataRow = table.Select()

    Dim i As Integer
    ' Print the value one column of each DataRow.
    For i = 0 to rows.GetUpperBound(0)
       Console.WriteLine(rows(i)("CompanyName"))
    Next i
End Sub

private void GetRows()
{
    // Get the DataTable of a DataSet.
    DataTable table = DataSet1.Tables["Suppliers"];
    DataRow[] rows = table.Select();

    // Print the value one column of each DataRow.
    for(int i = 0; i < rows.Length ; i++)
    {
        Console.WriteLine(rows[i]["CompanyName"]);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Select 重载
System.Data 命名空间
CaseSensitive

其他资源

DataTable (ADO.NET)


DataTable ..::.Select 方法 (String)

DataTable
.
.
::
.
Select 方法 (String)
DataTable 类

按照主键顺序（如果没有主键，则按照添加顺序）获取与筛选条件相匹配的所有 DataRow 对象的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Select ( _
    filterExpression As String _
) As DataRow()
public DataRow[] Select(
    string filterExpression
)
public:
array<DataRow^>^ Select(
    String^ filterExpression
)
member Select :
        filterExpression:string -> DataRow[]

参数

filterExpression
类型： System String
要用来筛选行的条件。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组。

若要创建 filterExpression 参数，请使用与应用于 DataColumn 类的 Expression 用来创建筛选器的属性值相同的规则。

下面的示例使用筛选表达式来返回 DataRow 对象的数组。

Private Sub GetRowsByFilter()

    Dim table As DataTable = DataSet1.Tables("Orders")

    ' Presuming the DataTable has a column named Date.
    Dim expression As String
    expression = "Date > #1/1/00#"
    Dim foundRows() As DataRow

    ' Use the Select method to find all rows matching the filter.
    foundRows = table.Select(expression)

    Dim i As Integer
    ' Print column 0 of each returned row.
    For i = 0 to foundRows.GetUpperBound(0)
       Console.WriteLine(foundRows(i)(0))
    Next i
End Sub

private void GetRowsByFilter()
{
    DataTable table = DataSet1.Tables["Orders"];
    // Presuming the DataTable has a column named Date.
    string expression;
    expression = "Date > #1/1/00#";
    DataRow[] foundRows;

    // Use the Select method to find all rows matching the filter.
    foundRows = table.Select(expression);

    // Print column 0 of each returned row.
    for(int i = 0; i < foundRows.Length; i ++)
    {
        Console.WriteLine(foundRows[i][0]);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Select 重载
System.Data 命名空间
CaseSensitive

其他资源

DataTable (ADO.NET)


DataTable ..::.Select 方法 (String, String)

DataTable
.
.
::
.
Select 方法 (String, String)
DataTable 类

获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Select ( _
    filterExpression As String, _
    sort As String _
) As DataRow()
public DataRow[] Select(
    string filterExpression,
    string sort
)
public:
array<DataRow^>^ Select(
    String^ filterExpression,
    String^ sort
)
member Select :
        filterExpression:string *
        sort:string -> DataRow[]

参数

filterExpression
类型： System String
要用来筛选行的条件。
sort
类型： System String
一个字符串，它指定列和排序方向。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

与筛选表达式相匹配的 DataRow 对象的数组。

若要形成 filterExpression 参数，请使用与创建 DataColumn 类的 Expression 属性值相同的规则。Sort 参数也使用与创建类的 Expression 字符串相同的规则。 若要形成 filterExpression 参数，请使用与创建 DataColumn 类的 Expression 属性值相同的规则。Sort 参数也使用与创建类的 Expression 字符串相同的规则。

下面的示例使用筛选表达式来返回 DataRow 对象的数组。

Private Sub GetRowsByFilter()
    Dim table As DataTable = DataSet1.Tables(0)

    ' Presuming the DataTable has a column named Date.
    Dim expression As String = "Date > 1/1/00"

    ' Sort descending by column named CompanyName.
    Dim sortOrder As String = "CompanyName DESC"
    Dim foundRows() As DataRow

    ' Use the Select method to find all rows matching the filter.
    foundRows = table.Select(expression, sortOrder)

    Dim i As Integer
    ' Print column 0 of each returned row.
    For i = 0 to foundRows.GetUpperBound(0)
       Console.WriteLine(foundRows(i)(0))
    Next i
End Sub

   private void GetRowsByFilter()
   {
       DataTable table = DataSet1.Tables["Orders"];

       // Presuming the DataTable has a column named Date.
       string expression = "Date > '1/1/00'";

       // Sort descending by column named CompanyName.
       string sortOrder = "CompanyName DESC";
       DataRow[] foundRows;

       // Use the Select method to find all rows matching the filter.
       foundRows = table.Select(expression, sortOrder);

       // Print column 0 of each returned row.
       for(int i = 0; i < foundRows.Length; i ++)
       {
           Console.WriteLine(foundRows[i][0]);
       }
   }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Select 重载
System.Data 命名空间
CaseSensitive

其他资源

DataTable (ADO.NET)


DataTable ..::.Select 方法 (String, String, DataViewRowState)

DataTable
.
.
::
.
Select 方法 (String, String, DataViewRowState)
DataTable 类

获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Select ( _
    filterExpression As String, _
    sort As String, _
    recordStates As DataViewRowState _
) As DataRow()
public DataRow[] Select(
    string filterExpression,
    string sort,
    DataViewRowState recordStates
)
public:
array<DataRow^>^ Select(
    String^ filterExpression,
    String^ sort,
    DataViewRowState recordStates
)
member Select :
        filterExpression:string *
        sort:string *
        recordStates:DataViewRowState -> DataRow[]

参数

filterExpression
类型： System String
要用来筛选行的条件。
sort
类型： System String
一个字符串，它指定列和排序方向。
recordStates
类型： System.Data DataViewRowState
DataViewRowState 值之一。

返回值

类型：
array<
System.Data DataRow
>
[]
()
[]

DataRow 对象的数组。

若要形成 filterExpression 参数，请使用与创建 DataColumn 类的 Expression 属性值相同的规则。Sort 参数也使用与创建类的 Expression 字符串相同的规则。 若要形成 filterExpression 参数，请使用与创建 DataColumn 类的 Expression 属性值相同的规则。Sort 参数也使用与创建类的 Expression 字符串相同的规则。

下面的示例使用筛选表达式和记录状态来返回 DataRow 对象的数组。

Private Sub GetRowsByFilter()

    Dim customerTable As DataTable = New DataTable("Customers")

    ' Add columns
    customerTable.Columns.Add("id", GetType(Integer))
    customerTable.Columns.Add("name", GetType(String))

    ' Set PrimaryKey
    customerTable.Columns("id").Unique = True
    customerTable.PrimaryKey = New DataColumn() _
        {customerTable.Columns("id")}

    ' add ten rows
    Dim id As Integer
    For id = 1 To 10
        customerTable.Rows.Add( _
        New Object() {id, String.Format("customer{0}", id)})
    Next id
    customerTable.AcceptChanges()

    ' add another ten rows
    For id = 11 To 20
        customerTable.Rows.Add( _
        New Object() {id, String.Format("customer{0}", id)})
    Next id

    Dim expression As String
    Dim sortOrder As String

    expression = "id > 5"
    ' Sort descending by CompanyName column.
    sortOrder = "name DESC"

    ' Use the Select method to find all rows matching the filter.
    Dim foundRows As DataRow() = _
        customerTable.Select(expression, sortOrder, _
        DataViewRowState.Added)

    PrintRows(foundRows, "filtered rows")

    foundRows = customerTable.Select()
    PrintRows(foundRows, "all rows")
End Sub

Private Sub PrintRows(ByVal rows() As DataRow, ByVal label As String)
    Console.WriteLine("\n{0}", label)
    If rows.Length <= 0 Then
        Console.WriteLine("no rows found")
        Exit Sub
    End If

    Dim row As DataRow
    Dim column As DataColumn
    For Each row In rows
        For Each column In row.Table.Columns
            Console.Write("\table {0}", row(column))
        Next column
        Console.WriteLine()
    Next row
End Sub

    private static void GetRowsByFilter()
    {
        DataTable customerTable = new DataTable("Customers");
        // Add columns
        customerTable.Columns.Add("id", typeof(int));
        customerTable.Columns.Add("name", typeof(string));

        // Set PrimaryKey
        customerTable.Columns[ "id" ].Unique = true;
        customerTable.PrimaryKey = new DataColumn[]
            { customerTable.Columns["id"] };

        // Add ten rows
        for(int id=1; id<=10; id++)
        {
            customerTable.Rows.Add(
                new object[] { id, string.Format("customer{0}", id) });
        }
        customerTable.AcceptChanges();

        // Add another ten rows
        for(int id=11; id<=20; id++)
        {
            customerTable.Rows.Add(
                new object[] { id, string.Format("customer{0}", id) });
        }

        string expression;
        string sortOrder;

        expression = "id > 5";
        // Sort descending by column named CompanyName.
        sortOrder = "name DESC";
        // Use the Select method to find all rows matching the filter.
        DataRow[] foundRows =
            customerTable.Select(expression, sortOrder,
            DataViewRowState.Added);

        PrintRows(foundRows, "filtered rows");

        foundRows = customerTable.Select();
        PrintRows(foundRows, "all rows");
    }

    private static void PrintRows(DataRow[] rows, string label)
    {
        Console.WriteLine("\n{0}", label);
        if(rows.Length <= 0)
        {
            Console.WriteLine("no rows found");
            return;
        }
        foreach(DataRow row in rows)
        {
            foreach(DataColumn column in row.Table.Columns)
            {
                Console.Write("\table {0}", row[column]);
            }
            Console.WriteLine();
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
Select 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.ToString 方法

DataTable
.
.
::
.
ToString 方法
DataTable 类

获取 TableName 和 DisplayExpression（如果有一个用作连接字符串）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
一个由 TableName 和 DisplayExpression 值组成的字符串。

获取 DataTable 的 TableName 和 DisplayExpression。

下面的示例使用 ToString 方法返回 TableName 和 DisplayExpression。

Private Sub PrintToString(dataSet As DataSet)
    Dim table As DataTable
    For Each table In dataSet.Tables
       Console.WriteLine(table.ToString())
    Next
End Sub

private void PrintToString(DataSet dataSet)
{
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine(table.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法

DataTable
.
.
::
.
WriteXml 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

将 DataTable 的当前内容以 XML 格式写入。

名称 说明
页首

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXml 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。 下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXml 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。

说明 说明

此示例演示如何使用 WriteXml 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。 此示例演示如何使用 WriteXml 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。

Sub Main()
  Dim ds As New DataSet
  Dim customerTable As DataTable = GetCustomers()
  Dim orderTable As DataTable = GetOrders()

  ds.Tables.Add(customerTable)
  ds.Tables.Add(orderTable)
  ds.Relations.Add("CustomerOrder", _
   New DataColumn() {customerTable.Columns(0)}, _
   New DataColumn() {orderTable.Columns(1)}, True)

  Dim writer As New System.IO.StringWriter
  customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, False)
  PrintOutput(writer, "Customer table, without hierarchy")

  writer = New System.IO.StringWriter
  customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, True)
  PrintOutput(writer, "Customer table, with hierarchy")

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Function GetOrders() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create three columns, OrderID, CustomerID, and OrderDate.
  table.Columns.Add(New DataColumn("OrderID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("CustomerID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("OrderDate", GetType(System.DateTime)))

  ' Set the OrderID column as the primary key column.
  table.PrimaryKey = New DataColumn() {table.Columns(0)}

  table.Rows.Add(New Object() {1, 1, #12/2/2003#})
  table.Rows.Add(New Object() {2, 1, #1/3/2004#})
  table.Rows.Add(New Object() {3, 2, #11/13/2004#})
  table.Rows.Add(New Object() {4, 3, #5/16/2004#})
  table.Rows.Add(New Object() {5, 3, #5/22/2004#})
  table.Rows.Add(New Object() {6, 4, #6/15/2004#})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(System.Int32))
  table.Columns.Add("Name", GetType(System.String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintOutput( _
   ByVal writer As System.IO.TextWriter, ByVal caption As String)

  Console.WriteLine("==============================")
  Console.WriteLine(caption)
  Console.WriteLine("==============================")
  Console.WriteLine(writer.ToString())
End Sub

static void Main()
{
    DataSet ds = new DataSet();
    DataTable customerTable = GetCustomers();
    DataTable orderTable = GetOrders();

    ds.Tables.Add(customerTable);
    ds.Tables.Add(orderTable);
    ds.Relations.Add("CustomerOrder",
        new DataColumn[] { customerTable.Columns[0] },
        new DataColumn[] { orderTable.Columns[1] }, true);

    System.IO.StringWriter writer = new System.IO.StringWriter();
    customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, false);
    PrintOutput(writer, "Customer table, without hierarchy");

    writer = new System.IO.StringWriter();
    customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, true);
    PrintOutput(writer, "Customer table, with hierarchy");

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(System.Int32));
    table.Columns.Add("Name", typeof(System.String));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetOrders()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create three columns; OrderID, CustomerID, and OrderDate.
    table.Columns.Add(new DataColumn("OrderID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("CustomerID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("OrderDate", typeof(System.DateTime)));

    // Set the OrderID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { table.Columns[0] };

    table.Rows.Add(new object[] { 1, 1, "12/2/2003" });
    table.Rows.Add(new object[] { 2, 1, "1/3/2004" });
    table.Rows.Add(new object[] { 3, 2, "11/13/2004" });
    table.Rows.Add(new object[] { 4, 3, "5/16/2004" });
    table.Rows.Add(new object[] { 5, 3, "5/22/2004" });
    table.Rows.Add(new object[] { 6, 4, "6/15/2004" });
    table.AcceptChanges();
    return table;
}

private static void PrintOutput(System.IO.TextWriter writer, string caption)
{
    Console.WriteLine("==============================");
    Console.WriteLine(caption);
    Console.WriteLine("==============================");
    Console.WriteLine(writer.ToString());
}

该示例在控制台窗口中显示以下输出：

==============================
Customer table, without hierarchy
==============================
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema
" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="ID" type="xs:int" />
                <xs:element name="Name" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
      <xs:unique name="Constraint1" msdata:PrimaryKey="true">
        <xs:selector xpath=".//Table1" />
        <xs:field xpath="ID" />
      </xs:unique>
    </xs:element>
  </xs:schema>
  <Table1>
    <ID>1</ID>
    <Name>Mary</Name>
  </Table1>
  <Table1>
    <ID>2</ID>
    <Name>Andy</Name>
  </Table1>
  <Table1>
    <ID>3</ID>
    <Name>Peter</Name>
  </Table1>
  <Table1>
    <ID>4</ID>
    <Name>Russ</Name>
  </Table1>
</NewDataSet>
==============================
Customer table, with hierarchy
==============================
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema
" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="ID" type="xs:int" />
                <xs:element name="Name" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="Table2">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="OrderID" type="xs:int" />
                <xs:element name="CustomerID" type="xs:int" minOccurs="0" />
                <xs:element name="OrderDate" type="xs:dateTime" minOccurs="0" />

              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
      <xs:unique name="Constraint1" msdata:PrimaryKey="true">
        <xs:selector xpath=".//Table1" />
        <xs:field xpath="ID" />
      </xs:unique>
      <xs:unique name="Table2_Constraint1" msdata:ConstraintName="Constraint1" m
sdata:PrimaryKey="true">
        <xs:selector xpath=".//Table2" />
        <xs:field xpath="OrderID" />
      </xs:unique>
      <xs:keyref name="CustomerOrder" refer="Constraint1">
        <xs:selector xpath=".//Table2" />
        <xs:field xpath="CustomerID" />
      </xs:keyref>
    </xs:element>
  </xs:schema>
  <Table1>
    <ID>1</ID>
    <Name>Mary</Name>
  </Table1>
  <Table1>
    <ID>2</ID>
    <Name>Andy</Name>
  </Table1>
  <Table1>
    <ID>3</ID>
    <Name>Peter</Name>
  </Table1>
  <Table1>
    <ID>4</ID>
    <Name>Russ</Name>
  </Table1>
  <Table2>
    <OrderID>1</OrderID>
    <CustomerID>1</CustomerID>
    <OrderDate>2003-12-02T00:00:00.0000000-08:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>2</OrderID>
    <CustomerID>1</CustomerID>
    <OrderDate>2004-01-03T00:00:00.0000000-08:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>3</OrderID>
    <CustomerID>2</CustomerID>
    <OrderDate>2004-11-13T00:00:00.0000000-08:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>4</OrderID>
    <CustomerID>3</CustomerID>
    <OrderDate>2004-05-16T00:00:00.0000000-07:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>5</OrderID>
    <CustomerID>3</CustomerID>
    <OrderDate>2004-05-22T00:00:00.0000000-07:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>6</OrderID>
    <CustomerID>4</CustomerID>
    <OrderDate>2004-06-15T00:00:00.0000000-07:00</OrderDate>
  </Table2>
</NewDataSet>

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (Stream)

DataTable
.
.
::
.
WriteXml 方法 (Stream)
DataTable 类

使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    stream As Stream _
)
public void WriteXml(
    Stream stream
)
public:
void WriteXml(
    Stream^ stream
)
member WriteXml :
        stream:Stream -> unit

参数

stream
类型： System.IO Stream
数据将写入的流。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (String)

DataTable
.
.
::
.
WriteXml 方法 (String)
DataTable 类

使用指定的文件以 XML 格式写入 DataTable 的当前内容。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    fileName As String _
)
public void WriteXml(
    string fileName
)
public:
void WriteXml(
    String^ fileName
)
member WriteXml :
        fileName:string -> unit

参数

fileName
类型： System String
要向其写入 XML 数据的文件。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (TextWriter)

DataTable
.
.
::
.
WriteXml 方法 (TextWriter)
DataTable 类

使用指定的 TextWriter 以 XML 格式写入 DataTable 的当前内容。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As TextWriter _
)
public void WriteXml(
    TextWriter writer
)
public:
void WriteXml(
    TextWriter^ writer
)
member WriteXml :
        writer:TextWriter -> unit

参数

writer
类型： System.IO TextWriter
用于写入内容的 TextWriter。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (XmlWriter)

DataTable
.
.
::
.
WriteXml 方法 (XmlWriter)
DataTable 类

使用指定的 XmlWriter 以 XML 格式写入 DataTable 的当前内容。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As XmlWriter _
)
public void WriteXml(
    XmlWriter writer
)
public:
void WriteXml(
    XmlWriter^ writer
)
member WriteXml :
        writer:XmlWriter -> unit

参数

writer
类型： System.Xml XmlWriter
用来写入内容的 XmlWriter。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (Stream, Boolean)

DataTable
.
.
::
.
WriteXml 方法 (Stream, Boolean)
DataTable 类

使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    stream As Stream, _
    writeHierarchy As Boolean _
)
public void WriteXml(
    Stream stream,
    bool writeHierarchy
)
public:
void WriteXml(
    Stream^ stream,
    bool writeHierarchy
)
member WriteXml :
        stream:Stream *
        writeHierarchy:bool -> unit

参数

stream
类型： System.IO Stream
数据将写入的流。
writeHierarchy
类型： System Boolean
如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。 如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。 通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (Stream, XmlWriteMode)

DataTable
.
.
::
.
WriteXml 方法 (Stream, XmlWriteMode)
DataTable 类

使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件，还可以选择将架构写入指定的文件。若要写架构，请将 mode 参数的值设置为 WriteSchema。 使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件，还可以选择将架构写入指定的文件。若要写架构，请将 mode 参数的值设置为 WriteSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    stream As Stream, _
    mode As XmlWriteMode _
)
public void WriteXml(
    Stream stream,
    XmlWriteMode mode
)
public:
void WriteXml(
    Stream^ stream,
    XmlWriteMode mode
)
member WriteXml :
        stream:Stream *
        mode:XmlWriteMode -> unit

参数

stream
类型： System.IO Stream
数据将写入的流。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (String, Boolean)

DataTable
.
.
::
.
WriteXml 方法 (String, Boolean)
DataTable 类

使用指定的文件以 XML 格式写入 DataTable 的当前内容。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的文件以 XML 格式写入 DataTable 的当前内容。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    fileName As String, _
    writeHierarchy As Boolean _
)
public void WriteXml(
    string fileName,
    bool writeHierarchy
)
public:
void WriteXml(
    String^ fileName,
    bool writeHierarchy
)
member WriteXml :
        fileName:string *
        writeHierarchy:bool -> unit

参数

fileName
类型： System String
要向其写入 XML 数据的文件。
writeHierarchy
类型： System Boolean
如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。 如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。 通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (String, XmlWriteMode)

DataTable
.
.
::
.
WriteXml 方法 (String, XmlWriteMode)
DataTable 类

使用指定的文件和 XmlWriteMode，写入 DataTable 的当前数据（还可以选择写入架构）。若要写架构，请将 mode 参数的值设置为 WriteSchema。 使用指定的文件和 XmlWriteMode，写入 DataTable 的当前数据（还可以选择写入架构）。若要写架构，请将 mode 参数的值设置为 WriteSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    fileName As String, _
    mode As XmlWriteMode _
)
public void WriteXml(
    string fileName,
    XmlWriteMode mode
)
public:
void WriteXml(
    String^ fileName,
    XmlWriteMode mode
)
member WriteXml :
        fileName:string *
        mode:XmlWriteMode -> unit

参数

fileName
类型： System String
将向其写入数据的文件的名称。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (TextWriter, Boolean)

DataTable
.
.
::
.
WriteXml 方法 (TextWriter, Boolean)
DataTable 类

使用指定的 TextWriter 以 XML 格式写入 DataTable 的当前内容。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的 TextWriter 以 XML 格式写入 DataTable 的当前内容。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As TextWriter, _
    writeHierarchy As Boolean _
)
public void WriteXml(
    TextWriter writer,
    bool writeHierarchy
)
public:
void WriteXml(
    TextWriter^ writer,
    bool writeHierarchy
)
member WriteXml :
        writer:TextWriter *
        writeHierarchy:bool -> unit

参数

writer
类型： System.IO TextWriter
用于写内容的 TextWriter。
writeHierarchy
类型： System Boolean
如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。 如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。 通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXml 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为 true 时发生的行为。 下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXml 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为 true 时发生的行为。

Sub Main()
  Dim ds As New DataSet
  Dim customerTable As DataTable = GetCustomers()
  Dim orderTable As DataTable = GetOrders()

  ds.Tables.Add(customerTable)
  ds.Tables.Add(orderTable)
  ds.Relations.Add("CustomerOrder", _
   New DataColumn() {customerTable.Columns(0)}, _
   New DataColumn() {orderTable.Columns(1)}, True)

  Dim writer As New System.IO.StringWriter
  customerTable.WriteXml(writer, True)
  PrintOutput(writer, "Customer table, with hierarchy")

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Function GetOrders() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create three columns, OrderID, CustomerID, and OrderDate.
  table.Columns.Add(New DataColumn("OrderID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("CustomerID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("OrderDate", GetType(System.DateTime)))

  ' Set the OrderID column as the primary key column.
  table.PrimaryKey = New DataColumn() {table.Columns(0)}

  table.Rows.Add(New Object() {1, 1, #12/2/2003#})
  table.Rows.Add(New Object() {2, 1, #1/3/2004#})
  table.Rows.Add(New Object() {3, 2, #11/13/2004#})
  table.Rows.Add(New Object() {4, 3, #5/16/2004#})
  table.Rows.Add(New Object() {5, 3, #5/22/2004#})
  table.Rows.Add(New Object() {6, 4, #6/15/2004#})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(System.Int32))
  table.Columns.Add("Name", GetType(System.String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintOutput( _
   ByVal stream As System.IO.TextWriter, ByVal caption As String)

  Console.WriteLine("==============================")
  Console.WriteLine(caption)
  Console.WriteLine("==============================")
  Console.WriteLine(stream.ToString())
End Sub

static void Main()
{
    DataSet ds = new DataSet();
    DataTable customerTable = GetCustomers();
    DataTable orderTable = GetOrders();

    ds.Tables.Add(customerTable);
    ds.Tables.Add(orderTable);
    ds.Relations.Add("CustomerOrder",
        new DataColumn[] { customerTable.Columns[0] },
        new DataColumn[] { orderTable.Columns[1] }, true);

    System.IO.StringWriter writer = new System.IO.StringWriter();
    customerTable.WriteXml(writer, true);
    PrintOutput(writer, "Customer table, with hierarchy");

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(System.Int32));
    table.Columns.Add("Name", typeof(System.String));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetOrders()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create three columns; OrderID, CustomerID, and OrderDate.
    table.Columns.Add(new DataColumn("OrderID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("CustomerID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("OrderDate", typeof(System.DateTime)));

    // Set the OrderID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { table.Columns[0] };

    table.Rows.Add(new object[] { 1, 1, "12/2/2003" });
    table.Rows.Add(new object[] { 2, 1, "1/3/2004" });
    table.Rows.Add(new object[] { 3, 2, "11/13/2004" });
    table.Rows.Add(new object[] { 4, 3, "5/16/2004" });
    table.Rows.Add(new object[] { 5, 3, "5/22/2004" });
    table.Rows.Add(new object[] { 6, 4, "6/15/2004" });
    table.AcceptChanges();
    return table;
}

private static void PrintOutput(System.IO.TextWriter stream,
    string caption)
{
    Console.WriteLine("==============================");
    Console.WriteLine(caption);
    Console.WriteLine("==============================");
    Console.WriteLine(stream.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (TextWriter, XmlWriteMode)

DataTable
.
.
::
.
WriteXml 方法 (TextWriter, XmlWriteMode)
DataTable 类

使用指定的 TextWriter 和 XmlWriteMode 为 DataTable 写当前数据，还可以选择写架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。 使用指定的 TextWriter 和 XmlWriteMode 为 DataTable 写当前数据，还可以选择写架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As TextWriter, _
    mode As XmlWriteMode _
)
public void WriteXml(
    TextWriter writer,
    XmlWriteMode mode
)
public:
void WriteXml(
    TextWriter^ writer,
    XmlWriteMode mode
)
member WriteXml :
        writer:TextWriter *
        mode:XmlWriteMode -> unit

参数

writer
类型： System.IO TextWriter
TextWriter，用于编写文档。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (XmlWriter, Boolean)

DataTable
.
.
::
.
WriteXml 方法 (XmlWriter, Boolean)
DataTable 类

使用指定的 XmlWriter 以 XML 格式写入 DataTable 的当前内容。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As XmlWriter, _
    writeHierarchy As Boolean _
)
public void WriteXml(
    XmlWriter writer,
    bool writeHierarchy
)
public:
void WriteXml(
    XmlWriter^ writer,
    bool writeHierarchy
)
member WriteXml :
        writer:XmlWriter *
        writeHierarchy:bool -> unit

参数

writer
类型： System.Xml XmlWriter
用来写入内容的 XmlWriter。
writeHierarchy
类型： System Boolean
如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。 如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用此方法并将 writeHierarchy 参数设置为 true。 通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用此方法并将 writeHierarchy 参数设置为 true。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (XmlWriter, XmlWriteMode)

DataTable
.
.
::
.
WriteXml 方法 (XmlWriter, XmlWriteMode)
DataTable 类

使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。 使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As XmlWriter, _
    mode As XmlWriteMode _
)
public void WriteXml(
    XmlWriter writer,
    XmlWriteMode mode
)
public:
void WriteXml(
    XmlWriter^ writer,
    XmlWriteMode mode
)
member WriteXml :
        writer:XmlWriter *
        mode:XmlWriteMode -> unit

参数

writer
类型： System.Xml XmlWriter
XmlWriter，用于编写文档。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (Stream, XmlWriteMode, Boolean)

DataTable
.
.
::
.
WriteXml 方法 (Stream, XmlWriteMode, Boolean)
DataTable 类

使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件，还可以选择将架构写入指定的文件。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件，还可以选择将架构写入指定的文件。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件，还可以选择将架构写入指定的文件。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    stream As Stream, _
    mode As XmlWriteMode, _
    writeHierarchy As Boolean _
)
public void WriteXml(
    Stream stream,
    XmlWriteMode mode,
    bool writeHierarchy
)
public:
void WriteXml(
    Stream^ stream,
    XmlWriteMode mode,
    bool writeHierarchy
)
member WriteXml :
        stream:Stream *
        mode:XmlWriteMode *
        writeHierarchy:bool -> unit

参数

stream
类型： System.IO Stream
数据将写入的流。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。
writeHierarchy
类型： System Boolean
如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。 如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

通常，WriteXml 方法只保存当前表的数据。WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 通常，WriteXml 方法只保存当前表的数据。WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 通常，WriteXml 方法只保存当前表的数据。WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。 通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (String, XmlWriteMode, Boolean)

DataTable
.
.
::
.
WriteXml 方法 (String, XmlWriteMode, Boolean)
DataTable 类

使用指定的文件和 XmlWriteMode，写入 DataTable 的当前数据（还可以选择写入架构）。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的文件和 XmlWriteMode，写入 DataTable 的当前数据（还可以选择写入架构）。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的文件和 XmlWriteMode，写入 DataTable 的当前数据（还可以选择写入架构）。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    fileName As String, _
    mode As XmlWriteMode, _
    writeHierarchy As Boolean _
)
public void WriteXml(
    string fileName,
    XmlWriteMode mode,
    bool writeHierarchy
)
public:
void WriteXml(
    String^ fileName,
    XmlWriteMode mode,
    bool writeHierarchy
)
member WriteXml :
        fileName:string *
        mode:XmlWriteMode *
        writeHierarchy:bool -> unit

参数

fileName
类型： System String
将向其写入数据的文件的名称。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。
writeHierarchy
类型： System Boolean
如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。 如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

通常，WriteXml 方法只保存当前表的数据。如果要保存当前表的数据及所有架构，WriteXml 方法提供一种仅写数据或将 DataTable 中的数据和架构写入 XML 文档中的方式，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 通常，WriteXml 方法只保存当前表的数据。如果要保存当前表的数据及所有架构，WriteXml 方法提供一种仅写数据或将 DataTable 中的数据和架构写入 XML 文档中的方式，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 通常，WriteXml 方法只保存当前表的数据。如果要保存当前表的数据及所有架构，WriteXml 方法提供一种仅写数据或将 DataTable 中的数据和架构写入 XML 文档中的方式，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

通常，WriteXml 方法只对当前表写入数据。若要写当前表及所有子代和相关表的数据，请将 writeHierarchy 参数设置为 true 再调用该方法。 通常，WriteXml 方法只对当前表写入数据。若要写当前表及所有子代和相关表的数据，请将 writeHierarchy 参数设置为 true 再调用该方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (TextWriter, XmlWriteMode, Boolean)

DataTable
.
.
::
.
WriteXml 方法 (TextWriter, XmlWriteMode, Boolean)
DataTable 类

使用指定的 TextWriter 和 XmlWriteMode 写入 DataTable 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的 TextWriter 和 XmlWriteMode 写入 DataTable 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的 TextWriter 和 XmlWriteMode 写入 DataTable 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As TextWriter, _
    mode As XmlWriteMode, _
    writeHierarchy As Boolean _
)
public void WriteXml(
    TextWriter writer,
    XmlWriteMode mode,
    bool writeHierarchy
)
public:
void WriteXml(
    TextWriter^ writer,
    XmlWriteMode mode,
    bool writeHierarchy
)
member WriteXml :
        writer:TextWriter *
        mode:XmlWriteMode *
        writeHierarchy:bool -> unit

参数

writer
类型： System.IO TextWriter
TextWriter，用于编写文档。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。
writeHierarchy
类型： System Boolean
如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。 如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

通常，WriteXml 方法只保存当前表的数据。WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 通常，WriteXml 方法只保存当前表的数据。WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。 通常，WriteXml 方法只保存当前表的数据。WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将其值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。 通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用 writeHierarchy 参数设置为 true 的方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet 中，创建使这两个表相关的 DataRelation，然后使用 WriteXml 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。 下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet 中，创建使这两个表相关的 DataRelation，然后使用 WriteXml 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。

Sub Main()
  Dim ds As New DataSet
  Dim customerTable As DataTable = GetCustomers()
  Dim orderTable As DataTable = GetOrders()

  ds.Tables.Add(customerTable)
  ds.Tables.Add(orderTable)
  ds.Relations.Add("CustomerOrder", _
   New DataColumn() {customerTable.Columns(0)}, _
   New DataColumn() {orderTable.Columns(1)}, True)

  Dim writer As New System.IO.StringWriter
  customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, False)
  PrintOutput(writer, "Customer table, without hierarchy")

  writer = New System.IO.StringWriter
  customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, True)
  PrintOutput(writer, "Customer table, with hierarchy")

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Function GetOrders() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create three columns, OrderID, CustomerID, and OrderDate.
  table.Columns.Add(New DataColumn("OrderID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("CustomerID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("OrderDate", GetType(System.DateTime)))

  ' Set the OrderID column as the primary key column.
  table.PrimaryKey = New DataColumn() {table.Columns(0)}

  table.Rows.Add(New Object() {1, 1, #12/2/2003#})
  table.Rows.Add(New Object() {2, 1, #1/3/2004#})
  table.Rows.Add(New Object() {3, 2, #11/13/2004#})
  table.Rows.Add(New Object() {4, 3, #5/16/2004#})
  table.Rows.Add(New Object() {5, 3, #5/22/2004#})
  table.Rows.Add(New Object() {6, 4, #6/15/2004#})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(System.Int32))
  table.Columns.Add("Name", GetType(System.String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintOutput( _
   ByVal writer As System.IO.TextWriter, ByVal caption As String)

  Console.WriteLine("==============================")
  Console.WriteLine(caption)
  Console.WriteLine("==============================")
  Console.WriteLine(writer.ToString())
End Sub

static void Main()
{
    DataSet ds = new DataSet();
    DataTable customerTable = GetCustomers();
    DataTable orderTable = GetOrders();

    ds.Tables.Add(customerTable);
    ds.Tables.Add(orderTable);
    ds.Relations.Add("CustomerOrder",
        new DataColumn[] { customerTable.Columns[0] },
        new DataColumn[] { orderTable.Columns[1] }, true);

    System.IO.StringWriter writer = new System.IO.StringWriter();
    customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, false);
    PrintOutput(writer, "Customer table, without hierarchy");

    writer = new System.IO.StringWriter();
    customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, true);
    PrintOutput(writer, "Customer table, with hierarchy");

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(System.Int32));
    table.Columns.Add("Name", typeof(System.String));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetOrders()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create three columns; OrderID, CustomerID, and OrderDate.
    table.Columns.Add(new DataColumn("OrderID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("CustomerID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("OrderDate", typeof(System.DateTime)));

    // Set the OrderID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { table.Columns[0] };

    table.Rows.Add(new object[] { 1, 1, "12/2/2003" });
    table.Rows.Add(new object[] { 2, 1, "1/3/2004" });
    table.Rows.Add(new object[] { 3, 2, "11/13/2004" });
    table.Rows.Add(new object[] { 4, 3, "5/16/2004" });
    table.Rows.Add(new object[] { 5, 3, "5/22/2004" });
    table.Rows.Add(new object[] { 6, 4, "6/15/2004" });
    table.AcceptChanges();
    return table;
}

private static void PrintOutput(System.IO.TextWriter writer,
    string caption)
{
    Console.WriteLine("==============================");
    Console.WriteLine(caption);
    Console.WriteLine("==============================");
    Console.WriteLine(writer.ToString());
}

该示例在控制台窗口中显示以下输出：

==============================
Customer table, without hierarchy
==============================
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema
" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="ID" type="xs:int" />
                <xs:element name="Name" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
      <xs:unique name="Constraint1" msdata:PrimaryKey="true">
        <xs:selector xpath=".//Table1" />
        <xs:field xpath="ID" />
      </xs:unique>
    </xs:element>
  </xs:schema>
  <Table1>
    <ID>1</ID>
    <Name>Mary</Name>
  </Table1>
  <Table1>
    <ID>2</ID>
    <Name>Andy</Name>
  </Table1>
  <Table1>
    <ID>3</ID>
    <Name>Peter</Name>
  </Table1>
  <Table1>
    <ID>4</ID>
    <Name>Russ</Name>
  </Table1>
</NewDataSet>
==============================
Customer table, with hierarchy
==============================
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema
" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="ID" type="xs:int" />
                <xs:element name="Name" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="Table2">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="OrderID" type="xs:int" />
                <xs:element name="CustomerID" type="xs:int" minOccurs="0" />
                <xs:element name="OrderDate" type="xs:dateTime" minOccurs="0" />

              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
      <xs:unique name="Constraint1" msdata:PrimaryKey="true">
        <xs:selector xpath=".//Table1" />
        <xs:field xpath="ID" />
      </xs:unique>
      <xs:unique name="Table2_Constraint1" msdata:ConstraintName="Constraint1" m
sdata:PrimaryKey="true">
        <xs:selector xpath=".//Table2" />
        <xs:field xpath="OrderID" />
      </xs:unique>
      <xs:keyref name="CustomerOrder" refer="Constraint1">
        <xs:selector xpath=".//Table2" />
        <xs:field xpath="CustomerID" />
      </xs:keyref>
    </xs:element>
  </xs:schema>
  <Table1>
    <ID>1</ID>
    <Name>Mary</Name>
  </Table1>
  <Table1>
    <ID>2</ID>
    <Name>Andy</Name>
  </Table1>
  <Table1>
    <ID>3</ID>
    <Name>Peter</Name>
  </Table1>
  <Table1>
    <ID>4</ID>
    <Name>Russ</Name>
  </Table1>
  <Table2>
    <OrderID>1</OrderID>
    <CustomerID>1</CustomerID>
    <OrderDate>2003-12-02T00:00:00.0000000-08:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>2</OrderID>
    <CustomerID>1</CustomerID>
    <OrderDate>2004-01-03T00:00:00.0000000-08:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>3</OrderID>
    <CustomerID>2</CustomerID>
    <OrderDate>2004-11-13T00:00:00.0000000-08:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>4</OrderID>
    <CustomerID>3</CustomerID>
    <OrderDate>2004-05-16T00:00:00.0000000-07:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>5</OrderID>
    <CustomerID>3</CustomerID>
    <OrderDate>2004-05-22T00:00:00.0000000-07:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>6</OrderID>
    <CustomerID>4</CustomerID>
    <OrderDate>2004-06-15T00:00:00.0000000-07:00</OrderDate>
  </Table2>
</NewDataSet>

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXml 方法 (XmlWriter, XmlWriteMode, Boolean)

DataTable
.
.
::
.
WriteXml 方法 (XmlWriter, XmlWriteMode, Boolean)
DataTable 类

使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。 使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据，还可以选择写入架构。若要写架构，请将 mode 参数的值设置为 WriteSchema。若要保存该表及其所有子代的数据，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXml ( _
    writer As XmlWriter, _
    mode As XmlWriteMode, _
    writeHierarchy As Boolean _
)
public void WriteXml(
    XmlWriter writer,
    XmlWriteMode mode,
    bool writeHierarchy
)
public:
void WriteXml(
    XmlWriter^ writer,
    XmlWriteMode mode,
    bool writeHierarchy
)
member WriteXml :
        writer:XmlWriter *
        mode:XmlWriteMode *
        writeHierarchy:bool -> unit

参数

writer
类型： System.Xml XmlWriter
XmlWriter，用于编写文档。
mode
类型： System.Data XmlWriteMode
XmlWriteMode 值之一。
writeHierarchy
类型： System Boolean
如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。 如果为 true，则写入当前表及其所有子代的内容。如果为 false（默认值），则只写入当前表的数据。

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用此方法并将 writeHierarchy 参数设置为 true。 通常，WriteXml 方法只对当前表写入数据。若要写入当前表及其所有子代和相关表的数据，请调用此方法并将 writeHierarchy 参数设置为 true。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXml 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXmlSchema 方法

DataTable
.
.
::
.
WriteXmlSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

将 DataTable 的当前数据结构以 XML 架构形式写入。

名称 说明
页首

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXmlSchema 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。 下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXmlSchema 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。

说明 说明

该示例演示如何使用 WriteXmlSchema 的一个重载版本。有关其他可用的示例，请参见各个重载主题。

Sub Main()
  Dim ds As New DataSet
  Dim customerTable As DataTable = GetCustomers()
  Dim orderTable As DataTable = GetOrders()

  ds.Tables.Add(customerTable)
  ds.Tables.Add(orderTable)
  ds.Relations.Add("CustomerOrder", _
   New DataColumn() {customerTable.Columns(0)}, _
   New DataColumn() {orderTable.Columns(1)}, True)

  Dim writer As New System.IO.StringWriter
  customerTable.WriteXmlSchema(writer, False)
  PrintOutput(writer, "Customer table, without hierarchy")

  writer = New System.IO.StringWriter
  customerTable.WriteXmlSchema(writer, True)
  PrintOutput(writer, "Customer table, with hierarchy")

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Function GetOrders() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create three columns, OrderID, CustomerID, and OrderDate.
  table.Columns.Add(New DataColumn("OrderID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("CustomerID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("OrderDate", GetType(System.DateTime)))

  ' Set the OrderID column as the primary key column.
  table.PrimaryKey = New DataColumn() {table.Columns(0)}

  table.Rows.Add(New Object() {1, 1, #12/2/2003#})
  table.Rows.Add(New Object() {2, 1, #1/3/2004#})
  table.Rows.Add(New Object() {3, 2, #11/13/2004#})
  table.Rows.Add(New Object() {4, 3, #5/16/2004#})
  table.Rows.Add(New Object() {5, 3, #5/22/2004#})
  table.Rows.Add(New Object() {6, 4, #6/15/2004#})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(System.Int32))
  table.Columns.Add("Name", GetType(System.String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintOutput( _
   ByVal writer As System.IO.TextWriter, ByVal caption As String)

  Console.WriteLine("==============================")
  Console.WriteLine(caption)
  Console.WriteLine("==============================")
  Console.WriteLine(writer.ToString())
End Sub

static void Main()
{
    DataSet ds = new DataSet();
    DataTable customerTable = GetCustomers();
    DataTable orderTable = GetOrders();

    ds.Tables.Add(customerTable);
    ds.Tables.Add(orderTable);
    ds.Relations.Add("CustomerOrder",
        new DataColumn[] { customerTable.Columns[0] },
        new DataColumn[] { orderTable.Columns[1] }, true);

    System.IO.StringWriter writer = new System.IO.StringWriter();
    customerTable.WriteXmlSchema(writer, false);
    PrintOutput(writer, "Customer table, without hierarchy");

    writer = new System.IO.StringWriter();
    customerTable.WriteXmlSchema(writer, true);
    PrintOutput(writer, "Customer table, with hierarchy");

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(System.Int32));
    table.Columns.Add("Name", typeof(System.String));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetOrders()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create three columns; OrderID, CustomerID, and OrderDate.
    table.Columns.Add(new DataColumn("OrderID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("CustomerID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("OrderDate", typeof(System.DateTime)));

    // Set the OrderID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { table.Columns[0] };

    table.Rows.Add(new object[] { 1, 1, "12/2/2003" });
    table.Rows.Add(new object[] { 2, 1, "1/3/2004" });
    table.Rows.Add(new object[] { 3, 2, "11/13/2004" });
    table.Rows.Add(new object[] { 4, 3, "5/16/2004" });
    table.Rows.Add(new object[] { 5, 3, "5/22/2004" });
    table.Rows.Add(new object[] { 6, 4, "6/15/2004" });
    table.AcceptChanges();
    return table;
}

private static void PrintOutput(System.IO.TextWriter writer,
    string caption)
{
    Console.WriteLine("==============================");
    Console.WriteLine(caption);
    Console.WriteLine("==============================");
    Console.WriteLine(writer.ToString());
}

该示例在控制台窗口中显示以下输出：

==============================
Customer table, without hierarchy
==============================
<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Ta
ble1">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Table1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ID" type="xs:int" />
              <xs:element name="Name" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//Table1" />
      <xs:field xpath="ID" />
    </xs:unique>
  </xs:element>
</xs:schema>
==============================
Customer table, with hierarchy
==============================
<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Table1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ID" type="xs:int" />
              <xs:element name="Name" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Table2">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="OrderID" type="xs:int" />
              <xs:element name="CustomerID" type="xs:int" minOccurs="0" />
              <xs:element name="OrderDate" type="xs:dateTime" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//Table1" />
      <xs:field xpath="ID" />
    </xs:unique>
    <xs:unique name="Table2_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//Table2" />
      <xs:field xpath="OrderID" />
    </xs:unique>
    <xs:keyref name="CustomerOrder" refer="Constraint1">
      <xs:selector xpath=".//Table2" />
      <xs:field xpath="CustomerID" />
    </xs:keyref>
  </xs:element>
</xs:schema>

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXmlSchema 方法 (Stream)

DataTable
.
.
::
.
WriteXmlSchema 方法 (Stream)
DataTable 类

将 DataTable 的当前数据结构以 XML 架构形式写入指定的流。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    stream As Stream _
)
public void WriteXmlSchema(
    Stream stream
)
public:
void WriteXmlSchema(
    Stream^ stream
)
member WriteXmlSchema :
        stream:Stream -> unit

参数

stream
类型： System.IO Stream
XML 架构将写入的流。

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXmlSchema 方法 (String)

DataTable
.
.
::
.
WriteXmlSchema 方法 (String)
DataTable 类

将 DataTable 的当前数据结构以 XML 架构形式写入指定的文件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    fileName As String _
)
public void WriteXmlSchema(
    string fileName
)
public:
void WriteXmlSchema(
    String^ fileName
)
member WriteXmlSchema :
        fileName:string -> unit

参数

fileName
类型： System String
要使用的文件的名称。

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXmlSchema 方法 (TextWriter)

DataTable
.
.
::
.
WriteXmlSchema 方法 (TextWriter)
DataTable 类

使用指定的 TextWriter 将 DataTable 的当前数据结构编写为 XML 架构。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    writer As TextWriter _
)
public void WriteXmlSchema(
    TextWriter writer
)
public:
void WriteXmlSchema(
    TextWriter^ writer
)
member WriteXmlSchema :
        writer:TextWriter -> unit

参数

writer
类型： System.IO TextWriter
用其进行写操作的 TextWriter。

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXmlSchema 方法 (XmlWriter)

DataTable
.
.
::
.
WriteXmlSchema 方法 (XmlWriter)
DataTable 类

使用指定的 XmlWriter 将 DataTable 的当前数据结构以 XML 架构形式写入。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    writer As XmlWriter _
)
public void WriteXmlSchema(
    XmlWriter writer
)
public:
void WriteXmlSchema(
    XmlWriter^ writer
)
member WriteXmlSchema :
        writer:XmlWriter -> unit

参数

writer
类型： System.Xml XmlWriter
要使用的 XmlWriter。

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXmlSchema 方法 (Stream, Boolean)

DataTable
.
.
::
.
WriteXmlSchema 方法 (Stream, Boolean)
DataTable 类

将 DataTable 的当前数据结构以 XML 架构形式写入指定的流。若要保存该表及其所有子代的架构，请将 writeHierarchy 参数设置为 true。 将 DataTable 的当前数据结构以 XML 架构形式写入指定的流。若要保存该表及其所有子代的架构，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    stream As Stream, _
    writeHierarchy As Boolean _
)
public void WriteXmlSchema(
    Stream stream,
    bool writeHierarchy
)
public:
void WriteXmlSchema(
    Stream^ stream,
    bool writeHierarchy
)
member WriteXmlSchema :
        stream:Stream *
        writeHierarchy:bool -> unit

参数

stream
类型： System.IO Stream
XML 架构将写入的流。
writeHierarchy
类型： System Boolean
如果为 true，将写入当前表及其所有子代的架构。如果为 false（默认值），将只写入当前表的架构。 如果为 true，将写入当前表及其所有子代的架构。如果为 false（默认值），将只写入当前表的架构。

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

通常，WriteXmlSchema 方法只写入当前表的架构。若要写入当前表及其所有子代和相关表的架构，请调用 writeHierarchy 参数设置为 true 的方法。 通常，WriteXmlSchema 方法只写入当前表的架构。若要写入当前表及其所有子代和相关表的架构，请调用 writeHierarchy 参数设置为 true 的方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXmlSchema 方法 (String, Boolean)

DataTable
.
.
::
.
WriteXmlSchema 方法 (String, Boolean)
DataTable 类

将 DataTable 的当前数据结构以 XML 架构形式写入指定的文件。若要保存该表及其所有子代的架构，请将 writeHierarchy 参数设置为 true。 将 DataTable 的当前数据结构以 XML 架构形式写入指定的文件。若要保存该表及其所有子代的架构，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    fileName As String, _
    writeHierarchy As Boolean _
)
public void WriteXmlSchema(
    string fileName,
    bool writeHierarchy
)
public:
void WriteXmlSchema(
    String^ fileName,
    bool writeHierarchy
)
member WriteXmlSchema :
        fileName:string *
        writeHierarchy:bool -> unit

参数

fileName
类型： System String
要使用的文件的名称。
writeHierarchy
类型： System Boolean
如果为 true，将写入当前表及其所有子代的架构。如果为 false（默认值），将只写入当前表的架构。 如果为 true，将写入当前表及其所有子代的架构。如果为 false（默认值），将只写入当前表的架构。

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

通常，WriteXmlSchema 方法只写入当前表的架构。若要写入当前表及其所有子代和相关表的架构，请调用 writeHierarchy 参数设置为 true 的方法。 通常，WriteXmlSchema 方法只写入当前表的架构。若要写入当前表及其所有子代和相关表的架构，请调用 writeHierarchy 参数设置为 true 的方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXmlSchema 方法 (TextWriter, Boolean)

DataTable
.
.
::
.
WriteXmlSchema 方法 (TextWriter, Boolean)
DataTable 类

使用指定的 TextWriter 将 DataTable 的当前数据结构编写为 XML 架构。若要保存该表及其所有子代的架构，请将 writeHierarchy 参数设置为 true。 使用指定的 TextWriter 将 DataTable 的当前数据结构编写为 XML 架构。若要保存该表及其所有子代的架构，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    writer As TextWriter, _
    writeHierarchy As Boolean _
)
public void WriteXmlSchema(
    TextWriter writer,
    bool writeHierarchy
)
public:
void WriteXmlSchema(
    TextWriter^ writer,
    bool writeHierarchy
)
member WriteXmlSchema :
        writer:TextWriter *
        writeHierarchy:bool -> unit

参数

writer
类型： System.IO TextWriter
用其进行写操作的 TextWriter。
writeHierarchy
类型： System Boolean
如果为 true，将写入当前表及其所有子代的架构。如果为 false（默认值），将只写入当前表的架构。 如果为 true，将写入当前表及其所有子代的架构。如果为 false（默认值），将只写入当前表的架构。

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

通常，WriteXmlSchema 方法只写入当前表的架构。若要写入当前表及其所有子代和相关表的架构，请调用 writeHierarchy 参数设置为 true 的方法。 通常，WriteXmlSchema 方法只写入当前表的架构。若要写入当前表及其所有子代和相关表的架构，请调用 writeHierarchy 参数设置为 true 的方法。

下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXmlSchema 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。 下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXmlSchema 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。

Sub Main()
  Dim ds As New DataSet
  Dim customerTable As DataTable = GetCustomers()
  Dim orderTable As DataTable = GetOrders()

  ds.Tables.Add(customerTable)
  ds.Tables.Add(orderTable)
  ds.Relations.Add("CustomerOrder", _
   New DataColumn() {customerTable.Columns(0)}, _
   New DataColumn() {orderTable.Columns(1)}, True)

  Dim writer As New System.IO.StringWriter
  customerTable.WriteXmlSchema(writer, False)
  PrintOutput(writer, "Customer table, without hierarchy")

  writer = New System.IO.StringWriter
  customerTable.WriteXmlSchema(writer, True)
  PrintOutput(writer, "Customer table, with hierarchy")

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Function GetOrders() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create three columns, OrderID, CustomerID, and OrderDate.
  table.Columns.Add(New DataColumn("OrderID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("CustomerID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("OrderDate", GetType(System.DateTime)))

  ' Set the OrderID column as the primary key column.
  table.PrimaryKey = New DataColumn() {table.Columns(0)}

  table.Rows.Add(New Object() {1, 1, #12/2/2003#})
  table.Rows.Add(New Object() {2, 1, #1/3/2004#})
  table.Rows.Add(New Object() {3, 2, #11/13/2004#})
  table.Rows.Add(New Object() {4, 3, #5/16/2004#})
  table.Rows.Add(New Object() {5, 3, #5/22/2004#})
  table.Rows.Add(New Object() {6, 4, #6/15/2004#})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(System.Int32))
  table.Columns.Add("Name", GetType(System.String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintOutput( _
   ByVal writer As System.IO.TextWriter, ByVal caption As String)

  Console.WriteLine("==============================")
  Console.WriteLine(caption)
  Console.WriteLine("==============================")
  Console.WriteLine(writer.ToString())
End Sub

static void Main()
{
    DataSet ds = new DataSet();
    DataTable customerTable = GetCustomers();
    DataTable orderTable = GetOrders();

    ds.Tables.Add(customerTable);
    ds.Tables.Add(orderTable);
    ds.Relations.Add("CustomerOrder",
        new DataColumn[] { customerTable.Columns[0] },
        new DataColumn[] { orderTable.Columns[1] }, true);

    System.IO.StringWriter writer = new System.IO.StringWriter();
    customerTable.WriteXmlSchema(writer, false);
    PrintOutput(writer, "Customer table, without hierarchy");

    writer = new System.IO.StringWriter();
    customerTable.WriteXmlSchema(writer, true);
    PrintOutput(writer, "Customer table, with hierarchy");

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(System.Int32));
    table.Columns.Add("Name", typeof(System.String));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetOrders()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create three columns; OrderID, CustomerID, and OrderDate.
    table.Columns.Add(new DataColumn("OrderID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("CustomerID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("OrderDate", typeof(System.DateTime)));

    // Set the OrderID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { table.Columns[0] };

    table.Rows.Add(new object[] { 1, 1, "12/2/2003" });
    table.Rows.Add(new object[] { 2, 1, "1/3/2004" });
    table.Rows.Add(new object[] { 3, 2, "11/13/2004" });
    table.Rows.Add(new object[] { 4, 3, "5/16/2004" });
    table.Rows.Add(new object[] { 5, 3, "5/22/2004" });
    table.Rows.Add(new object[] { 6, 4, "6/15/2004" });
    table.AcceptChanges();
    return table;
}

private static void PrintOutput(System.IO.TextWriter writer, string caption)
{
    Console.WriteLine("==============================");
    Console.WriteLine(caption);
    Console.WriteLine("==============================");
    Console.WriteLine(writer.ToString());
}

该示例在控制台窗口中显示以下输出：

==============================
Customer table, without hierarchy
==============================
<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Ta
ble1">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Table1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ID" type="xs:int" />
              <xs:element name="Name" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//Table1" />
      <xs:field xpath="ID" />
    </xs:unique>
  </xs:element>
</xs:schema>
==============================
Customer table, with hierarchy
==============================
<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Table1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ID" type="xs:int" />
              <xs:element name="Name" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Table2">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="OrderID" type="xs:int" />
              <xs:element name="CustomerID" type="xs:int" minOccurs="0" />
              <xs:element name="OrderDate" type="xs:dateTime" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//Table1" />
      <xs:field xpath="ID" />
    </xs:unique>
    <xs:unique name="Table2_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//Table2" />
      <xs:field xpath="OrderID" />
    </xs:unique>
    <xs:keyref name="CustomerOrder" refer="Constraint1">
      <xs:selector xpath=".//Table2" />
      <xs:field xpath="CustomerID" />
    </xs:keyref>
  </xs:element>
</xs:schema>

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.WriteXmlSchema 方法 (XmlWriter, Boolean)

DataTable
.
.
::
.
WriteXmlSchema 方法 (XmlWriter, Boolean)
DataTable 类

使用指定的 XmlWriter 将 DataTable 的当前数据结构以 XML 架构形式写入。若要保存该表及其所有子代的架构，请将 writeHierarchy 参数设置为 true。 使用指定的 XmlWriter 将 DataTable 的当前数据结构以 XML 架构形式写入。若要保存该表及其所有子代的架构，请将 writeHierarchy 参数设置为 true。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub WriteXmlSchema ( _
    writer As XmlWriter, _
    writeHierarchy As Boolean _
)
public void WriteXmlSchema(
    XmlWriter writer,
    bool writeHierarchy
)
public:
void WriteXmlSchema(
    XmlWriter^ writer,
    bool writeHierarchy
)
member WriteXmlSchema :
        writer:XmlWriter *
        writeHierarchy:bool -> unit

参数

writer
类型： System.Xml XmlWriter
XmlWriter，用于编写文档。
writeHierarchy
类型： System Boolean
如果为 true，将写入当前表及其所有子代的架构。如果为 false（默认值），将只写入当前表的架构。 如果为 true，将写入当前表及其所有子代的架构。如果为 false（默认值），将只写入当前表的架构。

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

通常，WriteXmlSchema 方法只写入当前表的架构。若要写入当前表及其所有子代和相关表的架构，请调用 writeHierarchy 参数设置为 true 的方法。 通常，WriteXmlSchema 方法只写入当前表的架构。若要写入当前表及其所有子代和相关表的架构，请调用 writeHierarchy 参数设置为 true 的方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
WriteXmlSchema 重载
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable 属性

DataTable 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

DataTable 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataTable 类
System.Data 命名空间


DataTable ..::.CaseSensitive 属性

DataTable
.
.
::
.
CaseSensitive 属性
DataTable 类

指示表中的字符串比较是否区分大小写。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property CaseSensitive As Boolean
    Get
    Set
public bool CaseSensitive { get; set; }
public:
property bool CaseSensitive {
    bool get ();
    void set (bool value);
}
member CaseSensitive : bool with get, set

属性值

类型： System Boolean
如果比较区分大小写，则为 true；否则为 false。默认值被设置为父级 DataSet 对象的 CaseSensitive 属性；当 DataTable 的创建独立于 DataSet 时设置为 false。 如果比较区分大小写，则为 true；否则为 false。默认值被设置为父级 DataSet 对象的 CaseSensitive 属性；当 DataTable 的创建独立于 DataSet 时设置为 false。

CaseSensitive 属性影响在排序、搜索和筛选时的字符串比较。

下面的示例针对 DataTable 调用两次 Select 方法。CaseSensitive 属性第一次设置为 false，第二次设置为 true。 下面的示例针对 DataTable 调用两次 Select 方法。CaseSensitive 属性第一次设置为 false，第二次设置为 true。

Private Sub ToggleCaseSensitive()
    Dim t As DataTable
    Dim foundRows() As DataRow

    t = CreateDataSet().Tables(0)

    t.CaseSensitive = False
    foundRows = t.Select("item = 'abc'")

    ' Print out DataRow values. Row 0 contains the value we're looking for.
    PrintRowValues(foundRows, "CaseSensitive = False")

    t.CaseSensitive = True
    foundRows = t.Select("item = 'abc'")

    PrintRowValues(foundRows, "CaseSensitive = True")
End Sub

Public Function CreateDataSet() As DataSet
    ' Create a DataSet with one table, two columns
    Dim ds As New DataSet
    Dim t As New DataTable("Items")

    ' Add table to DataSet
    ds.Tables.Add(t)

    ' Add two columns
    Dim c As DataColumn

    ' First column
    c = t.Columns.Add("id", Type.GetType("System.Int32"))
    c.AutoIncrement = True

    ' Second column
    t.Columns.Add("item", Type.GetType("System.String"))

    ' Set primary key
    t.PrimaryKey = New DataColumn() {t.Columns("id")}

    For i As Integer = 0 To 9
        t.Rows.Add(New Object() {i, i.ToString()})
    Next
    t.Rows.Add(New Object() {11, "abc"})
    t.Rows.Add(New Object() {15, "ABC"})

    CreateDataSet = ds
End Function

Private Sub PrintRowValues(ByRef rows As DataRow(), ByVal label As String)
    Console.WriteLine()
    Console.WriteLine(label)
    If rows.Length <= 0 Then
        Console.WriteLine("no rows found")
        Return
    End If

    For Each r As DataRow In rows
        For Each c As DataColumn In r.Table.Columns
            Console.Write(vbTab & " {0}", r(c))
        Next
        Console.WriteLine()
    Next
End Sub

private static void ToggleCaseSensitive()
{
    DataTable t;
    DataRow[] foundRows;

    t = CreateDataSet().Tables[0];

    t.CaseSensitive = false;
    foundRows = t.Select("item = 'abc'");

    // Print out DataRow values.
    PrintRowValues(foundRows, "CaseSensitive = False");

    t.CaseSensitive = true;
    foundRows = t.Select("item = 'abc'");

    PrintRowValues(foundRows, "CaseSensitive = True");
}

public static DataSet CreateDataSet()
{
    // Create a DataSet with one table, two columns
    DataSet ds = new DataSet();
    DataTable t = new DataTable("Items");

    // Add table to dataset
    ds.Tables.Add(t);

    // Add two columns
    DataColumn c;

    // First column
    c = t.Columns.Add("id", typeof(int));
    c.AutoIncrement = true;

    // Second column
    t.Columns.Add("item", typeof(string));

    // Set primary key
    t.PrimaryKey = new DataColumn[] { t.Columns["id"] };

    // Add twelve rows
    for (int i = 0; i < 10; i++)
    {
        t.Rows.Add(new object[] { i, i.ToString() });
    }
    t.Rows.Add(new object[] { 11, "abc" });
    t.Rows.Add(new object[] { 15, "ABC" });

    return ds;
}

private static void PrintRowValues(DataRow[] rows, string label)
{
    Console.WriteLine();
    Console.WriteLine(label);
    if (rows.Length <= 0)
    {
        Console.WriteLine("no rows found");
        return;
    }
    foreach (DataRow r in rows)
    {
        foreach (DataColumn c in r.Table.Columns)
        {
            Console.Write("\t {0}", r[c]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
Select

其他资源

DataTable (ADO.NET)


DataTable ..::.ChildRelations 属性

DataTable
.
.
::
.
ChildRelations 属性
DataTable 类

获取此 DataTable 的子关系的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property ChildRelations As DataRelationCollection
    Get
[BrowsableAttribute(false)]
public DataRelationCollection ChildRelations { get; }
[BrowsableAttribute(false)]
public:
property DataRelationCollection^ ChildRelations {
    DataRelationCollection^ get ();
}
[<BrowsableAttribute(false)>]
member ChildRelations : DataRelationCollection

属性值

类型： System.Data DataRelationCollection
一个 DataRelationCollection，包含该表的子关系。如果 DataRelation 对象不存在，将返回空集合。 一个 DataRelationCollection，包含该表的子关系。如果 DataRelation 对象不存在，将返回空集合。

DataRelation 定义两个表之间的关系。通常，两个表通过包含相同数据的单个字段链接起来。例如，包含地址数据的表可以拥有包含代表国家/地区的代码的单个字段。包含国家/地区数据的第二个表将拥有包含识别国家/地区的代码的单个字段，正是将此代码插入到第一个表的相应字段中。于是，DataRelation 至少包含以下四项信息：(1) 第一个表的名称；(2) 第一个表的列名；(3) 第二个表的名称；(4) 第二个表的列名。 DataRelation 定义两个表之间的关系。通常，两个表通过包含相同数据的单个字段链接起来。例如，包含地址数据的表可以拥有包含代表国家/地区的代码的单个字段。包含国家/地区数据的第二个表将拥有包含识别国家/地区的代码的单个字段，正是将此代码插入到第一个表的相应字段中。于是，DataRelation 至少包含以下四项信息：(1) 第一个表的名称；(2) 第一个表的列名；(3) 第二个表的名称；(4) 第二个表的列名。 DataRelation 定义两个表之间的关系。通常，两个表通过包含相同数据的单个字段链接起来。例如，包含地址数据的表可以拥有包含代表国家/地区的代码的单个字段。包含国家/地区数据的第二个表将拥有包含识别国家/地区的代码的单个字段，正是将此代码插入到第一个表的相应字段中。于是，DataRelation 至少包含以下四项信息：(1) 第一个表的名称；(2) 第一个表的列名；(3) 第二个表的名称；(4) 第二个表的列名。 DataRelation 定义两个表之间的关系。通常，两个表通过包含相同数据的单个字段链接起来。例如，包含地址数据的表可以拥有包含代表国家/地区的代码的单个字段。包含国家/地区数据的第二个表将拥有包含识别国家/地区的代码的单个字段，正是将此代码插入到第一个表的相应字段中。于是，DataRelation 至少包含以下四项信息：(1) 第一个表的名称；(2) 第一个表的列名；(3) 第二个表的名称；(4) 第二个表的列名。 DataRelation 定义两个表之间的关系。通常，两个表通过包含相同数据的单个字段链接起来。例如，包含地址数据的表可以拥有包含代表国家/地区的代码的单个字段。包含国家/地区数据的第二个表将拥有包含识别国家/地区的代码的单个字段，正是将此代码插入到第一个表的相应字段中。于是，DataRelation 至少包含以下四项信息：(1) 第一个表的名称；(2) 第一个表的列名；(3) 第二个表的名称；(4) 第二个表的列名。

下面的示例使用 ChildRelations 属性返回 DataTable 中的每个子级 DataRelation。然后将每个关系用作 DataRow 的 GetChildRows 方法中的参数，以返回行的数组。然后输出该行中每列的值。 下面的示例使用 ChildRelations 属性返回 DataTable 中的每个子级 DataRelation。然后将每个关系用作 DataRow 的 GetChildRows 方法中的参数，以返回行的数组。然后输出该行中每列的值。 下面的示例使用 ChildRelations 属性返回 DataTable 中的每个子级 DataRelation。然后将每个关系用作 DataRow 的 GetChildRows 方法中的参数，以返回行的数组。然后输出该行中每列的值。

Public Sub GetChildRowsFromDataRelation()
    ' For each row in the table, get the child rows using the
    ' ChildRelations. For each item in the array, print the value
    ' of each column.
    Dim table As DataTable = CreateDataSet().Tables("Customers")

    Dim childRows() As DataRow
    Dim relation as DataRelation
    Dim row as DataRow
    For Each  relation In table.ChildRelations
        For Each row In table.Rows
            PrintRowValues(new DataRow() {row}, "Parent Row")
            childRows = row.GetChildRows(relation)
            ' Print values of rows.
            PrintRowValues(childRows, "child rows")
        Next row
    Next relation
End Sub

Public Function CreateDataSet() As DataSet
    ' create a DataSet with one table, two columns
    Dim dataSet As DataSet
    dataSet = new DataSet()

    ' create Customer table
    Dim table As DataTable
    table = new DataTable("Customers")

    dataSet.Tables.Add(table)
    table.Columns.Add("customerId", _
        GetType(Integer)).AutoIncrement = true
    table.Columns.Add("name", GetType(String))
    table.PrimaryKey = new DataColumn() _
        { table.Columns("customerId") }

    ' create Orders table
    table = new DataTable("Orders")
    dataSet.Tables.Add(table)
    table.Columns.Add("orderId", GetType(Integer)).AutoIncrement = true
    table.Columns.Add("customerId", GetType(Integer))
    table.Columns.Add("amount", GetType(Double))
    table.PrimaryKey = new DataColumn() { table.Columns("orderId") }

    ' create relation
    dataSet.Relations.Add(dataSet.Tables("Customers").Columns("customerId"), _
        dataSet.Tables("Orders").Columns("customerId"))

    ' populate the tables
    Dim orderId As Integer = 1
    Dim customerId As Integer
    Dim i As Integer
    For customerId = 1 To 10
        ' add customer record
        dataSet.Tables("Customers").Rows.Add( _
            new object() { customerId, _
            string.Format("customer{0}", customerId) })

        ' add 5 order records for each customer

        For i = 1 To 5
            dataSet.Tables("Orders").Rows.Add( _
                new object() { orderId, customerId, orderId * 10 })

        orderId = orderId+1
    Next
    Next

    CreateDataSet = dataSet
End Function

private sub PrintRowValues(rows() As DataRow, label As String)
    Console.WriteLine("\n{0}", label)
    If rows.Length <= 0
        Console.WriteLine("no rows found")
        Exit Sub
    End If

    Dim row As DataRow
    Dim column As DataColumn

    For Each row In rows
        For Each column In row.Table.Columns
            Console.Write("\table {0}", row(column))
        Next column
        Console.WriteLine()
    Next row
End Sub

    private static void GetChildRowsFromDataRelation()
    {
        /* For each row in the table, get the child rows using the
        ChildRelations. For each item in the array, print the value
        of each column. */
        DataTable table = CreateDataSet().Tables["Customers"];
        DataRow[] childRows;
        foreach(DataRelation relation in table.ChildRelations)
        {
            foreach(DataRow row in table.Rows)
            {
                PrintRowValues(new DataRow[] {row}, "Parent Row");
                childRows = row.GetChildRows(relation);
                // Print values of rows.
                PrintRowValues(childRows, "child rows");
            }
        }
    }

    public static DataSet CreateDataSet()
    {
        // create a DataSet with one table, two columns
        DataSet dataSet = new DataSet();

        // create Customer table
        DataTable table = new DataTable("Customers");
        dataSet.Tables.Add(table);
        table.Columns.Add("customerId", typeof(int)).AutoIncrement = true;
        table.Columns.Add("name", typeof(string));
        table.PrimaryKey = new DataColumn[] { table.Columns["customerId"] };

        // create Orders table
        table = new DataTable("Orders");
        dataSet.Tables.Add(table);
        table.Columns.Add("orderId", typeof(int)).AutoIncrement = true;
        table.Columns.Add("customerId", typeof(int));
        table.Columns.Add("amount", typeof(double));
        table.PrimaryKey = new DataColumn[] { table.Columns["orderId"] };

        // create relation
        dataSet.Relations.Add(dataSet.Tables["Customers"].Columns["customerId"],
            dataSet.Tables["Orders"].Columns["customerId"]);

        // populate the tables
        int orderId = 1;
        for(int customerId=1; customerId<=10; customerId++)
        {
            // add customer record
            dataSet.Tables["Customers"].Rows.Add(
                new object[] { customerId,
                string.Format("customer{0}", customerId) });

            // add 5 order records for each customer
            for(int i=1; i<=5; i++)
            {
                dataSet.Tables["Orders"].Rows.Add(
                    new object[] { orderId++, customerId, orderId * 10 });
            }
        }

        return dataSet;
    }

    private static void PrintRowValues(DataRow[] rows, string label)
    {
        Console.WriteLine("\n{0}", label);
        if(rows.Length <= 0)
        {
            Console.WriteLine("no rows found");
            return;
        }
        foreach(DataRow row in rows)
        {
            foreach(DataColumn column in row.Table.Columns)
            {
                Console.Write("\table {0}", row[column]);
            }
            Console.WriteLine();
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
ParentRelations
GetParentRows
GetChildRows

其他资源

DataTable (ADO.NET)


DataTable ..::.Columns 属性

DataTable
.
.
::
.
Columns 属性
DataTable 类

获取属于该表的列的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Columns As DataColumnCollection
    Get
public DataColumnCollection Columns { get; }
public:
property DataColumnCollection^ Columns {
    DataColumnCollection^ get ();
}
member Columns : DataColumnCollection

属性值

类型： System.Data DataColumnCollection
一个 DataColumnCollection，包含该表的 DataColumn 对象的集合。如果 DataColumn 对象不存在，将返回空集合。 一个 DataColumnCollection，包含该表的 DataColumn 对象的集合。如果 DataColumn 对象不存在，将返回空集合。

DataColumnCollection 通过定义每一列的数据类型来确定表的架构。

下面的示例使用 Columns 属性打印表中每一行的每个值。

Private Sub PrintValues(ByVal table As DataTable)
    Dim row As DataRow
    Dim column As DataColumn
    For Each row in table.Rows
       For Each column In table.Columns
          Console.WriteLine(row(column))
       Next
    Next
End Sub

private void PrintValues(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.Constraints 属性

DataTable
.
.
::
.
Constraints 属性
DataTable 类

获取由该表维护的约束的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Constraints As ConstraintCollection
    Get
public ConstraintCollection Constraints { get; }
public:
property ConstraintCollection^ Constraints {
    ConstraintCollection^ get ();
}
member Constraints : ConstraintCollection

属性值

类型： System.Data ConstraintCollection
一个 ConstraintCollection，包含该表的 Constraint 对象的集合。如果 Constraint 对象不存在，将返回空集合。 一个 ConstraintCollection，包含该表的 Constraint 对象的集合。如果 Constraint 对象不存在，将返回空集合。

ForeignKeyConstraint 限制删除或更新一列（或多列）中的值时所执行的操作。这种约束旨在用于主键列。在两个表的父/子关系中，从父表删除一个值可能会以下列方式之一影响子行。 ForeignKeyConstraint 限制删除或更新一列（或多列）中的值时所执行的操作。这种约束旨在用于主键列。在两个表的父/子关系中，从父表删除一个值可能会以下列方式之一影响子行。 ForeignKeyConstraint 限制删除或更新一列（或多列）中的值时所执行的操作。这种约束旨在用于主键列。在两个表的父/子关系中，从父表删除一个值可能会以下列方式之一影响子行。

  • 可能会同时删除子行（级联操作）。

  • 可能会将子列中的值设置为 null 值。

  • 可能会将子列中的值设置为默认值。

  • 可能生成异常。

UniqueConstraint 在尝试将主键中的值设置为非唯一值时激活。

下面的示例将 ForeignKeyConstraint 添加到约束的集合中。

Private Sub CreateConstraint(dataSet As DataSet, _
    table1 As String, table2 As String, _
    column1 As String, column2 As String)

    Dim idKeyRestraint As ForeignKeyConstraint = _
        New ForeignKeyConstraint _
        (dataSet.Tables(table1).Columns(column1), _
        dataSet.Tables(table2).Columns(column2))

    ' Set null values when a value is deleted.
    idKeyRestraint.DeleteRule = Rule.SetNull
    idKeyRestraint.UpdateRule = Rule.Cascade

    ' Set AcceptRejectRule to cascade changes.
    idKeyRestraint.AcceptRejectRule = AcceptRejectRule.Cascade

    dataSet.Tables(table1).Constraints.Add(idKeyRestraint)
    dataSet.EnforceConstraints = True
End Sub

private void CreateConstraint(DataSet dataSet,
    string table1, string table2, string column1, string column2)
{
    ForeignKeyConstraint idKeyRestraint = new
        ForeignKeyConstraint(dataSet.Tables[table1].Columns[column1],
        dataSet.Tables[table2].Columns[column2]);

    // Set null values when a value is deleted.
    idKeyRestraint.DeleteRule = Rule.SetNull;
    idKeyRestraint.UpdateRule = Rule.Cascade;

    // Set AcceptRejectRule to cascade changes.
    idKeyRestraint.AcceptRejectRule = AcceptRejectRule.Cascade;

    dataSet.Tables[table1].Constraints.Add(idKeyRestraint);
    dataSet.EnforceConstraints = true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.DataSet 属性

DataTable
.
.
::
.
DataSet 属性
DataTable 类

获取此表所属的 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property DataSet As DataSet
    Get
[BrowsableAttribute(false)]
public DataSet DataSet { get; }
[BrowsableAttribute(false)]
public:
property DataSet^ DataSet {
    DataSet^ get ();
}
[<BrowsableAttribute(false)>]
member DataSet : DataSet

属性值

类型： System.Data DataSet
此表所属的 DataSet。

如果控件的数据与 DataTable 绑定且该表属于 DataSet，则可通过该属性获取 DataSet。

下面的示例通过 DataSet 属性返回给定表的父级 DataSet。

Private Function GetDataSetFromTable() As DataSet
    Dim table As DataTable

    ' Check to see if the DataGrid's DataSource property
    ' is a DataTable.
    If TypeOf dataGrid1.DataSource Is DataTable Then
        table = CType(DataGrid1.DataSource, DataTable)
        GetDataSetFromTable = table.DataSet
    Else
        return Nothing
    End If
End Function

private DataSet GetDataSetFromTable()
{
    DataTable table;

    // Check to see if the DataGrid's DataSource
    // is a DataTable.
    if( dataGrid1.DataSource is DataTable)
    {
        table = (DataTable) dataGrid1.DataSource;
        // Return the DataTable's DataSet
        return table.DataSet;
    }
    else
    {
        return null;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.DefaultView 属性

DataTable
.
.
::
.
DefaultView 属性
DataTable 类

获取可能包括筛选视图或游标位置的表的自定义视图。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property DefaultView As DataView
    Get
[BrowsableAttribute(false)]
public DataView DefaultView { get; }
[BrowsableAttribute(false)]
public:
property DataView^ DefaultView {
    DataView^ get ();
}
[<BrowsableAttribute(false)>]
member DefaultView : DataView

属性值

类型： System.Data DataView
与 DataTable 关联的 DataView。

DefaultView 属性返回可用于排序、筛选和搜索 DataTable 的 DataView。

下面的示例通过 DefaultView 属性设置 DataTable 对象的 DataView 的属性。该示例还演示了 DataGridView 控件如何绑定到一个名为“Suppliers”、含有一个名为“CompanyName”的列的 DataTable。 下面的示例通过 DefaultView 属性设置 DataTable 对象的 DataView 的属性。该示例还演示了 DataGridView 控件如何绑定到一个名为“Suppliers”、含有一个名为“CompanyName”的列的 DataTable。

Private Sub BindDataGrid()
   Dim table As New DataTable

   ' Insert code to populate a DataTable with data.

   ' Bind DataGrid to DataTable
   DataGrid1.DataSource = table
End Sub

Private Sub ChangeRowFilter()
   Dim gridTable As DataTable = _
       CType(dataGrid1.DataSource, DataTable)

   ' Set the RowFilter to display a company names
   ' that begin with A through I.
   gridTable.DefaultView.RowFilter = "CompanyName < 'I'"
End Sub

private void BindDataGrid()
{
    DataTable table = new DataTable();

    // Insert code to populate a DataTable with data.

    // Bind grid to DataTable.
    dataGrid1.DataSource = table;
}

private void ChangeRowFilter()
{
    DataTable gridTable = (DataTable) dataGrid1.DataSource;

    // Set the RowFilter to display a company names that
    // begin with A through I..
    gridTable.DefaultView.RowFilter = "CompanyName < 'I'";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.DisplayExpression 属性

DataTable
.
.
::
.
DisplayExpression 属性
DataTable 类

获取或设置一个表达式，该表达式返回的值用于表示用户界面中的此表。DisplayExpression 属性用于在用户界面中显示此表的名称。 获取或设置一个表达式，该表达式返回的值用于表示用户界面中的此表。DisplayExpression 属性用于在用户界面中显示此表的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property DisplayExpression As String
    Get
    Set
public string DisplayExpression { get; set; }
public:
property String^ DisplayExpression {
    String^ get ();
    void set (String^ value);
}
member DisplayExpression : string with get, set

属性值

类型： System String
显示字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
Expression

其他资源

DataTable (ADO.NET)


DataTable ..::.ExtendedProperties 属性

DataTable
.
.
::
.
ExtendedProperties 属性
DataTable 类

获取自定义用户信息的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property ExtendedProperties As PropertyCollection
    Get
[BrowsableAttribute(false)]
public PropertyCollection ExtendedProperties { get; }
[BrowsableAttribute(false)]
public:
property PropertyCollection^ ExtendedProperties {
    PropertyCollection^ get ();
}
[<BrowsableAttribute(false)>]
member ExtendedProperties : PropertyCollection

属性值

类型： System.Data PropertyCollection
包含自定义用户信息的 PropertyCollection。

使用 ExtendedProperties 将自定义信息添加到 DataTable 中。用 Add 方法添加信息。用 Item 方法检索信息。 使用 ExtendedProperties 将自定义信息添加到 DataTable 中。用 Add 方法添加信息。用 Item 方法检索信息。 使用 ExtendedProperties 将自定义信息添加到 DataTable 中。用 Add 方法添加信息。用 Item 方法检索信息。

扩展属性必须是 String 类型。当以 XML 的形式写 DataTable 时，不保持非 String 类型的属性。 扩展属性必须是 String 类型。当以 XML 的形式写 DataTable 时，不保持非 String 类型的属性。

下面的示例通过 ExtendedProperties 属性将时间戳值添加到 DataTable 中。

Private Sub GetAndSetExtendedProperties(ByVal myTable As DataTable)
   ' Add an item to the collection.
   myTable.ExtendedProperties.Add("TimeStamp", DateTime.Now)
   ' Print the item.
   Console.WriteLine(myTable.ExtendedProperties.Item("TimeStamp"))
End Sub

private void GetAndSetExtendedProperties(DataTable myTable){
   // Add an item to the collection.
   myTable.ExtendedProperties.Add("TimeStamp", DateTime.Now);
   // Print the item.
   Console.WriteLine(myTable.ExtendedProperties["TimeStamp"]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.HasErrors 属性

DataTable
.
.
::
.
HasErrors 属性
DataTable 类

获取一个值，该值指示该表所属的 DataSet 的任何表的任何行中是否有错误。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property HasErrors As Boolean
    Get
[BrowsableAttribute(false)]
public bool HasErrors { get; }
[BrowsableAttribute(false)]
public:
property bool HasErrors {
    bool get ();
}
[<BrowsableAttribute(false)>]
member HasErrors : bool

属性值

类型： System Boolean
如果有错误，则为 true；否则为 false。

在用户处理 DataTable 中包含的数据集时，如果更改导致某些验证失败，则可标记有错误的每个更改。可使用 RowError 属性标记带有错误信息的整个 DataRow。还可使用 SetColumnError 方法在该行的每一列上设置错误。 在用户处理 DataTable 中包含的数据集时，如果更改导致某些验证失败，则可标记有错误的每个更改。可使用 RowError 属性标记带有错误信息的整个 DataRow。还可使用 SetColumnError 方法在该行的每一列上设置错误。 在用户处理 DataTable 中包含的数据集时，如果更改导致某些验证失败，则可标记有错误的每个更改。可使用 RowError 属性标记带有错误信息的整个 DataRow。还可使用 SetColumnError 方法在该行的每一列上设置错误。

在用 DataSet 更新数据源之前，建议您首先针对目标 DataSet 调用 GetChanges 方法。该方法将产生 DataSet，该数据集只包含对原始数据集进行的更改。在将 DataSet 发送到数据源以进行更新之前，请检查每个表的 HasErrors 属性，以了解这些行或这些行中的列是否已附加了任何错误。 在用 DataSet 更新数据源之前，建议您首先针对目标 DataSet 调用 GetChanges 方法。该方法将产生 DataSet，该数据集只包含对原始数据集进行的更改。在将 DataSet 发送到数据源以进行更新之前，请检查每个表的 HasErrors 属性，以了解这些行或这些行中的列是否已附加了任何错误。 在用 DataSet 更新数据源之前，建议您首先针对目标 DataSet 调用 GetChanges 方法。该方法将产生 DataSet，该数据集只包含对原始数据集进行的更改。在将 DataSet 发送到数据源以进行更新之前，请检查每个表的 HasErrors 属性，以了解这些行或这些行中的列是否已附加了任何错误。

在协调每个错误之后，用 DataRow 的 ClearErrors 方法清除这些错误。

下面的示例使用 HasErrors 属性检查表是否包含错误。

Private Sub CheckForErrors(dataSet As DataSet)
    ' Invoke GetChanges on the DataSet to create a reduced set.
    Dim thisDataSet As DataSet = dataSet.GetChanges()

    ' Check each table's HasErrors property.
    Dim table As DataTable
    For Each table In thisDataSet.Tables
        ' If HasErrors is true, reconcile errors.
        If table.HasErrors Then
            ' Insert code to reconcile errors.
        End If
    Next table
End Sub

private void CheckForErrors(DataSet dataSet)
{
    // Invoke GetChanges on the DataSet to create a reduced set.
    DataSet thisDataSet = dataSet.GetChanges();

    // Check each table's HasErrors property.
    foreach(DataTable table in thisDataSet.Tables)
    {
        // If HasErrors is true, reconcile errors.
        if(table.HasErrors)
        {
            // Insert code to reconcile errors.
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
GetErrors

其他资源

DataTable (ADO.NET)


DataTable ..::.IListSource ..::.ContainsListCollection 属性

DataTable
.
.
::
.
IListSource
.
.
::
.
ContainsListCollection 属性
DataTable 类

有关此成员的说明，请参见 IListSource..::.ContainsListCollection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property ContainsListCollection As Boolean
    Implements IListSource.ContainsListCollection
    Get
bool IListSource.ContainsListCollection { get; }
private:
virtual property bool ContainsListCollection {
    bool get () sealed = IListSource::ContainsListCollection::get;
}
private abstract ContainsListCollection : bool
private override ContainsListCollection : bool

属性值

类型： System Boolean
如果集合是 IList 对象集合，则为 true；否则，为 false。

实现

此成员是显式的接口成员实现。只能在 DataTable 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 DataTable 实例强制转换为 IListSource 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间


DataTable ..::.IsInitialized 属性

DataTable
.
.
::
.
IsInitialized 属性
DataTable 类

获取一个值，该值指示是否已初始化 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property IsInitialized As Boolean
    Get
[BrowsableAttribute(false)]
public bool IsInitialized { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsInitialized {
    bool get () sealed;
}
[<BrowsableAttribute(false)>]
abstract IsInitialized : bool
[<BrowsableAttribute(false)>]
override IsInitialized : bool

属性值

类型： System Boolean
如果组件已完成初始化，则为 true；否则为 false。

实现

构造 DataTable（例如通过 Visual Studio）时返回其状态。BeginInit 方法将它设置为 false，而 EndInit 方法将它设置为 true。 构造 DataTable（例如通过 Visual Studio）时返回其状态。BeginInit 方法将它设置为 false，而 EndInit 方法将它设置为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.Locale 属性

DataTable
.
.
::
.
Locale 属性
DataTable 类

获取或设置用于比较表中字符串的区域设置信息。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Locale As CultureInfo
    Get
    Set
public CultureInfo Locale { get; set; }
public:
property CultureInfo^ Locale {
    CultureInfo^ get ();
    void set (CultureInfo^ value);
}
member Locale : CultureInfo with get, set

属性值

类型： System.Globalization CultureInfo
一个 CultureInfo，它包含有关用户计算机区域设置的数据。默认为 DataTable 所属的 DataSet 对象的 CultureInfo（由 Locale 属性返回）；如果该表不属于 DataSet，则默认为当前系统的 CultureInfo。 一个 CultureInfo，它包含有关用户计算机区域设置的数据。默认为 DataTable 所属的 DataSet 对象的 CultureInfo（由 Locale 属性返回）；如果该表不属于 DataSet，则默认为当前系统的 CultureInfo。

CultureInfo 表示特定区域性或社区的软件首选项。

用于字符串比较时，CultureInfo 影响排序、比较和筛选。

说明 说明

在包含表达式的列中，使用 InvariantCulture。忽略 CurrentCulture。 在包含表达式的列中，使用 InvariantCulture。忽略 CurrentCulture。

下面的示例通过 Locale 设置 CultureInfo，并打印 ISO 语言名称。

Private Sub ChangeCultureInfo(table As DataTable)
   ' Print the LCID  of the present CultureInfo.
   Console.WriteLine(table.Locale.LCID)

   ' Create a new CultureInfo for the United Kingdom.
   Dim myCultureInfo As CultureInfo = New CultureInfo("en-gb")
   table.Locale = myCultureInfo

   ' Print the new LCID.
   Console.WriteLine(table.Locale.LCID)
End Sub

private void ChangeCultureInfo(DataTable table)
{
    // Print the LCID  of the present CultureInfo.
    Console.WriteLine(table.Locale.LCID);

    // Create a new CultureInfo for the United Kingdom.
    CultureInfo myCultureInfo = new CultureInfo("en-gb");
    table.Locale = myCultureInfo;

    // Print the new LCID.
    Console.WriteLine(table.Locale.LCID);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
CultureInfo

其他资源

DataTable (ADO.NET)


DataTable ..::.MinimumCapacity 属性

DataTable
.
.
::
.
MinimumCapacity 属性
DataTable 类

获取或设置该表最初的起始大小。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property MinimumCapacity As Integer
    Get
    Set
public int MinimumCapacity { get; set; }
public:
property int MinimumCapacity {
    int get ();
    void set (int value);
}
member MinimumCapacity : int with get, set

属性值

类型： System Int32
该表中行的最初起始大小。默认值为 50。 该表中行的最初起始大小。默认值为 50。

MinimumCapacity 允许系统在获取数据之前创建相应的资源集合。在性能非常关键的情况下，设置该属性可优化性能。 MinimumCapacity 允许系统在获取数据之前创建相应的资源集合。在性能非常关键的情况下，设置该属性可优化性能。

下面的示例设置 DataTable 的 MinimumCapacity。

Private Sub SetMinimumCapacity(ByVal table As DataTable)
   ' Change the MinimumCapacity.
   table.MinimumCapacity = 100
End Sub

private void SetMinimumCapacity(DataTable table)
{
    // Change the MinimumCapacity.
    table.MinimumCapacity = 100;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.Namespace 属性

DataTable
.
.
::
.
Namespace 属性
DataTable 类

获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Namespace As String
    Get
    Set
public string Namespace { get; set; }
public:
property String^ Namespace {
    String^ get ();
    void set (String^ value);
}
member Namespace : string with get, set

属性值

类型： System String
DataTable 的命名空间。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.ParentRelations 属性

DataTable
.
.
::
.
ParentRelations 属性
DataTable 类

获取该 DataTable 的父关系的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property ParentRelations As DataRelationCollection
    Get
[BrowsableAttribute(false)]
public DataRelationCollection ParentRelations { get; }
[BrowsableAttribute(false)]
public:
property DataRelationCollection^ ParentRelations {
    DataRelationCollection^ get ();
}
[<BrowsableAttribute(false)>]
member ParentRelations : DataRelationCollection

属性值

类型： System.Data DataRelationCollection
一个 DataRelationCollection，包含该表的父关系。如果 DataRelation 对象不存在，将返回空集合。 一个 DataRelationCollection，包含该表的父关系。如果 DataRelation 对象不存在，将返回空集合。

下面的示例使用 ParentRelations 属性返回 DataTable 中的每个父级 DataRelation。然后将每个关系用作 DataRow 的 GetParentRows 方法中的参数，以返回行的数组。然后输出该行中每列的值。 下面的示例使用 ParentRelations 属性返回 DataTable 中的每个父级 DataRelation。然后将每个关系用作 DataRow 的 GetParentRows 方法中的参数，以返回行的数组。然后输出该行中每列的值。 下面的示例使用 ParentRelations 属性返回 DataTable 中的每个父级 DataRelation。然后将每个关系用作 DataRow 的 GetParentRows 方法中的参数，以返回行的数组。然后输出该行中每列的值。

Private Sub GetChildRowsFromDataRelation(table As DataTable)
    Dim rowArray() As DataRow
    Dim relation As DataRelation, row As DataRow
    Dim column As DataColumn, i As Integer
    For Each relation In  table.ParentRelations
        For Each row In  table.Rows
            rowArray = row.GetParentRows(relation)
            ' Print values of rows.
            For i = 0 To rowArray.Length - 1
                For Each column In  table.Columns
                    Console.WriteLine(rowArray(i)(column))
                Next column
            Next i
        Next row
    Next relation
End Sub

private void GetChildRowsFromDataRelation(DataTable table)
{
    DataRow[] rowArray;
    foreach(DataRelation relation in table.ParentRelations)
    {
        foreach(DataRow row in table.Rows)
        {
            rowArray = row.GetParentRows(relation);
            // Print values of rows.
            for(int i = 0; i < rowArray.Length; i++)
            {
                foreach(DataColumn column in table.Columns)
                {
                    Console.WriteLine(rowArray[i][column]);
                }
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
ChildRelations
DataRelation
DataSet
Relations

其他资源

DataTable (ADO.NET)


DataTable ..::.Prefix 属性

DataTable
.
.
::
.
Prefix 属性
DataTable 类

获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Prefix As String
    Get
    Set
public string Prefix { get; set; }
public:
property String^ Prefix {
    String^ get ();
    void set (String^ value);
}
member Prefix : string with get, set

属性值

类型： System String
DataTable 的前缀。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.PrimaryKey 属性

DataTable
.
.
::
.
PrimaryKey 属性
DataTable 类

获取或设置充当数据表主键的列的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property PrimaryKey As DataColumn()
    Get
    Set
public DataColumn[] PrimaryKey { get; set; }
public:
property array<DataColumn^>^ PrimaryKey {
    array<DataColumn^>^ get ();
    void set (array<DataColumn^>^ value);
}
member PrimaryKey : DataColumn[] with get, set

属性值

类型：
array<
System.Data DataColumn
>
[]
()
[]

DataColumn 对象的数组。
异常 | 条件
DataException | 该键是外键。

为了识别表中的记录，表的主键必须唯一。表的主键还可以由两列或多列组成。这在单列无法包含足够的唯一值时发生。例如，两列主键可由“FirstName”和“LastName”列组成。因为主键可由多列组成，所以 PrimaryKey 属性由 DataColumn 对象的数组组成。 为了识别表中的记录，表的主键必须唯一。表的主键还可以由两列或多列组成。这在单列无法包含足够的唯一值时发生。例如，两列主键可由“FirstName”和“LastName”列组成。因为主键可由多列组成，所以 PrimaryKey 属性由 DataColumn 对象的数组组成。 为了识别表中的记录，表的主键必须唯一。表的主键还可以由两列或多列组成。这在单列无法包含足够的唯一值时发生。例如，两列主键可由“FirstName”和“LastName”列组成。因为主键可由多列组成，所以 PrimaryKey 属性由 DataColumn 对象的数组组成。 为了识别表中的记录，表的主键必须唯一。表的主键还可以由两列或多列组成。这在单列无法包含足够的唯一值时发生。例如，两列主键可由“FirstName”和“LastName”列组成。因为主键可由多列组成，所以 PrimaryKey 属性由 DataColumn 对象的数组组成。 为了识别表中的记录，表的主键必须唯一。表的主键还可以由两列或多列组成。这在单列无法包含足够的唯一值时发生。例如，两列主键可由“FirstName”和“LastName”列组成。因为主键可由多列组成，所以 PrimaryKey 属性由 DataColumn 对象的数组组成。

第一个示例显示如何返回在 DataGrid 中显示的 DataTable 的主键列。第二个示例演示如何为 DataTable 设置主键列。 第一个示例显示如何返回在 DataGrid 中显示的 DataTable 的主键列。第二个示例演示如何为 DataTable 设置主键列。

Private Sub GetPrimaryKeys(table As DataTable)
   ' Create the array for the columns.
   Dim columns() As DataColumn
   columns = table.PrimaryKey

   ' Get the number of elements in the array.
   Console.WriteLine("Column Count: " & columns.Length.ToString())
   Dim i As Integer
   For i = 0 To columns.GetUpperBound(0)
      Console.WriteLine(columns(i).ColumnName & columns(i).DataType.ToString())
   Next i
End Sub

Private Sub SetPrimaryKeys()
   ' Create a new DataTable and set two DataColumn objects as primary keys.
   Dim table As DataTable = new DataTable()
   Dim keys(1) As DataColumn
   Dim column  As DataColumn

   ' Create column 1.
   column = New DataColumn()
   column.DataType = System.Type.GetType("System.String")
   column.ColumnName= "FirstName"

   ' Add the column to the DataTable.Columns collection.
   table.Columns.Add(column)
   ' Add the column to the array.
   keys(0) = column

   ' Create column 2 and add it to the array.
   column = New DataColumn()
   column.DataType = System.Type.GetType("System.String")
   column.ColumnName = "LastName"
   table.Columns.Add(column)

   ' Add the column to the array.
   keys(1) = column

   ' Set the PrimaryKeys property to the array.
   table.PrimaryKey = keys
End Sub

private void GetPrimaryKeys(DataTable table)
{
    // Create the array for the columns.
    DataColumn[] columns;
    columns = table.PrimaryKey;

    // Get the number of elements in the array.
    Console.WriteLine("Column Count: " + columns.Length);
    for(int i = 0; i < columns.Length; i++)
    {
        Console.WriteLine(columns[i].ColumnName + columns[i].DataType);
    }
}

private void SetPrimaryKeys()
{
    // Create a new DataTable and set two DataColumn objects as primary keys.
    DataTable table = new DataTable();
    DataColumn[] keys = new DataColumn[1];
    DataColumn column;

    // Create column 1.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName= "FirstName";

    // Add the column to the DataTable.Columns collection.
    table.Columns.Add(column);

    // Add the column to the array.
    keys[0] = column;

    // Create column 2 and add it to the array.
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.ColumnName = "LastName";
    table.Columns.Add(column);

    // Add the column to the array.
    keys[1] = column;

    // Set the PrimaryKeys property to the array.
    table.PrimaryKey = keys;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
DataColumn
PrimaryKey
DataColumnCollection

其他资源

DataTable (ADO.NET)


DataTable ..::.RemotingFormat 属性

DataTable
.
.
::
.
RemotingFormat 属性
DataTable 类

获取或设置序列化格式。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property RemotingFormat As SerializationFormat
    Get
    Set
public SerializationFormat RemotingFormat { get; set; }
public:
property SerializationFormat RemotingFormat {
    SerializationFormat get ();
    void set (SerializationFormat value);
}
member RemotingFormat : SerializationFormat with get, set

属性值

类型： System.Data SerializationFormat
指定 Binary 或 Xml 序列化的 SerializationFormat 枚举。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.Rows 属性

DataTable
.
.
::
.
Rows 属性
DataTable 类

获取属于该表的行的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property Rows As DataRowCollection
    Get
[BrowsableAttribute(false)]
public DataRowCollection Rows { get; }
[BrowsableAttribute(false)]
public:
property DataRowCollection^ Rows {
    DataRowCollection^ get ();
}
[<BrowsableAttribute(false)>]
member Rows : DataRowCollection

属性值

类型： System.Data DataRowCollection
包含 DataRow 对象的 DataRowCollection；否则为 null 值（如果不存在任何 DataRow 对象）。

若要创建新的 DataRow，必须使用 NewRow 方法返回新对象。这样的对象将按照架构自动配置，该架构是通过 DataColumn 对象的集合为 DataTable 定义的。在创建新行并为该行中每个列设置值之后，使用 Add 方法将该行添加到 DataRowCollection 中。 若要创建新的 DataRow，必须使用 NewRow 方法返回新对象。这样的对象将按照架构自动配置，该架构是通过 DataColumn 对象的集合为 DataTable 定义的。在创建新行并为该行中每个列设置值之后，使用 Add 方法将该行添加到 DataRowCollection 中。 若要创建新的 DataRow，必须使用 NewRow 方法返回新对象。这样的对象将按照架构自动配置，该架构是通过 DataColumn 对象的集合为 DataTable 定义的。在创建新行并为该行中每个列设置值之后，使用 Add 方法将该行添加到 DataRowCollection 中。

集合中的每个 DataRow 表示表中的一行数据。若要提交对行中某一列的值的更改，必须调用 AcceptChanges 方法。 集合中的每个 DataRow 表示表中的一行数据。若要提交对行中某一列的值的更改，必须调用 AcceptChanges 方法。

下面显示两个返回和设置行的示例。第一个示例使用 Rows 属性，并为每一行打印每一列的值。第二个示例使用 DataTable 对象的 NewRow 方法创建具有 DataTable 的架构的新 DataRow 对象。在设置行值之后，通过 Add 方法将该行添加到 DataRowCollection 中。 下面显示两个返回和设置行的示例。第一个示例使用 Rows 属性，并为每一行打印每一列的值。第二个示例使用 DataTable 对象的 NewRow 方法创建具有 DataTable 的架构的新 DataRow 对象。在设置行值之后，通过 Add 方法将该行添加到 DataRowCollection 中。 下面显示两个返回和设置行的示例。第一个示例使用 Rows 属性，并为每一行打印每一列的值。第二个示例使用 DataTable 对象的 NewRow 方法创建具有 DataTable 的架构的新 DataRow 对象。在设置行值之后，通过 Add 方法将该行添加到 DataRowCollection 中。 下面显示两个返回和设置行的示例。第一个示例使用 Rows 属性，并为每一行打印每一列的值。第二个示例使用 DataTable 对象的 NewRow 方法创建具有 DataTable 的架构的新 DataRow 对象。在设置行值之后，通过 Add 方法将该行添加到 DataRowCollection 中。

Private Sub PrintRows(dataSet As DataSet)
     ' For each table in the DataSet, print the values of each row.
     Dim thisTable As DataTable
     For Each thisTable In  dataSet.Tables
         ' For each row, print the values of each column.
         Dim row As DataRow
         For Each row In  thisTable.Rows
             Dim column As DataColumn
             For Each column In  thisTable.Columns
                 Console.WriteLine(row(column))
             Next column
         Next row
     Next thisTable
End Sub

Private Sub AddARow(dataSet As DataSet)
    Dim table As DataTable = dataSet.Tables("Suppliers")
    ' Use the NewRow method to create a DataRow
    'with the table's schema.
    Dim newRow As DataRow = table.NewRow()

    ' Set values in the columns:
    newRow("CompanyID") = "NewCompanyID"
    newRow("CompanyName") = "NewCompanyName"

    ' Add the row to the rows collection.
    table.Rows.Add(newRow)
End Sub

private void PrintRows(DataSet dataSet)
{
    // For each table in the DataSet, print the values of each row.
    foreach(DataTable thisTable in dataSet.Tables)
    {
        // For each row, print the values of each column.
        foreach(DataRow row in thisTable.Rows)
        {
            foreach(DataColumn column in thisTable.Columns)
            {
                Console.WriteLine(row[column]);
            }
        }
    }
}

private void AddARow(DataSet dataSet)
{
    DataTable table;
    table = dataSet.Tables["Suppliers"];
    // Use the NewRow method to create a DataRow with
    // the table's schema.
    DataRow newRow = table.NewRow();

    // Set values in the columns:
    newRow["CompanyID"] = "NewCompanyID";
    newRow["CompanyName"] = "NewCompanyName";

    // Add the row to the rows collection.
    table.Rows.Add(newRow);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
AcceptChanges
DataRow
DataRowCollection
NewRow

其他资源

DataTable (ADO.NET)


DataTable ..::.Site 属性

DataTable
.
.
::
.
Site 属性
DataTable 类

获取或设置 DataTable 的 System.ComponentModel..::.ISite。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overrides Property Site As ISite
    Get
    Set
[BrowsableAttribute(false)]
public override ISite Site { get; set; }
[BrowsableAttribute(false)]
public:
virtual property ISite^ Site {
    ISite^ get () override;
    void set (ISite^ value) override;
}
[<BrowsableAttribute(false)>]
abstract Site : ISite with get, set
[<BrowsableAttribute(false)>]
override Site : ISite with get, set

属性值

类型： System.ComponentModel ISite
用于 DataTable 的 ISite。

实现

站点将 Component 绑定到 Container 并启用它们之间的通讯，同时为该容器提供了一种管理其组件的方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.TableName 属性

DataTable
.
.
::
.
TableName 属性
DataTable 类

获取或设置 DataTable 的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property TableName As String
    Get
    Set
public string TableName { get; set; }
public:
property String^ TableName {
    String^ get ();
    void set (String^ value);
}
member TableName : string with get, set

属性值

类型： System String
DataTable 的名称。
异常 | 条件
ArgumentException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("") 被传入，此表属于一个集合。
DuplicateNameException | 该表属于一个集合，该集合已经包含同名的表。（比较区分大小写）。 该表属于一个集合，该集合已经包含同名的表。（比较区分大小写）。

TableName 用于从父级 DataSet 对象的 DataTableCollection（由 Tables 属性返回）返回此表。

下面的示例打印 DataTable 对象的集合中每个表的 TableName。

Private Sub GetTableNames(dataSet As DataSet)
     ' Print each table's TableName.
     Dim table As DataTable
     For Each table In dataSet.Tables
         Console.WriteLine(table.TableName)
     Next table
End Sub

private void GetTableNames(DataSet dataSet)
{
    // Print each table's TableName.
    foreach(DataTable table in dataSet.Tables)
    {
        Console.WriteLine(table.TableName);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间
DataSet
Tables

其他资源

DataTable (ADO.NET)


DataTable 事件

DataTable 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTable 类

DataTable 类型公开以下成员。

名称 说明
页首

参考

DataTable 类
System.Data 命名空间


DataTable ..::.ColumnChanged 事件

DataTable
.
.
::
.
ColumnChanged 事件
DataTable 类

在 DataRow 中指定的 DataColumn 的值被更改后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event ColumnChanged As DataColumnChangeEventHandler
public event DataColumnChangeEventHandler ColumnChanged
public:
 event DataColumnChangeEventHandler^ ColumnChanged {
    void add (DataColumnChangeEventHandler^ value);
    void remove (DataColumnChangeEventHandler^ value);
}
member ColumnChanged : IEvent<DataColumnChangeEventHandler,
    DataColumnChangeEventArgs>

有关更多信息，请参见处理 DataTable 事件 (ADO.NET)。

Private Shared Sub DataTableColumnChanged()
    Dim custTable As DataTable = New DataTable("Customers")
    ' add columns
    custTable.Columns.Add("id", Type.GetType("System.Int32"))
    custTable.Columns.Add("name", Type.GetType("System.String"))
    custTable.Columns.Add("address", Type.GetType("System.String"))

    ' set PrimaryKey
    custTable.Columns("id").Unique = true
    custTable.PrimaryKey = New DataColumn() { custTable.Columns("id") }

    ' add a ColumnChanged event handler for the table.
    AddHandler custTable.ColumnChanged, _
        New DataColumnChangeEventHandler(AddressOf Column_Changed )

    ' add ten rows
    Dim id As Integer
    For id = 1 To 10
        custTable.Rows.Add( _
            New Object() { id, string.Format("customer{0}", id), _
                string.Format("address{0}", id) })
    Next

    custTable.AcceptChanges()

    ' change the name column in all the rows
    Dim row As DataRow
    For Each row In custTable.Rows
        row("name") = string.Format("vip{0}", row("id"))
    Next

End Sub

Private Shared Sub Column_Changed(sender As Object, _
    e As DataColumnChangeEventArgs)
    Console.WriteLine("Column_Changed Event: name={0}; Column={1}; original name={2}", _
        e.Row("name"), e.Column.ColumnName, e.Row("name", DataRowVersion.Original))
End Sub

    private static void DataTableColumnChanged()
    {
        DataTable custTable = new DataTable("Customers");
        // add columns
        custTable.Columns.Add("id", typeof(int));
        custTable.Columns.Add("name", typeof(string));
        custTable.Columns.Add("address", typeof(string));

        // set PrimaryKey
        custTable.Columns["id"].Unique = true;
        custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };

        // add a ColumnChanged event handler for the table.
        custTable.ColumnChanged += new
            DataColumnChangeEventHandler(Column_Changed );

        // add ten rows
        for(int id=1; id<=10; id++)
        {
            custTable.Rows.Add(
                new object[] { id, string.Format("customer{0}", id),
                string.Format("address{0}", id) });
        }

        custTable.AcceptChanges();

        // change the name column in all the rows
        foreach(DataRow row in custTable.Rows )
        {
            row["name"] = string.Format("vip{0}", row["id"]);
        }

    }

    private static void Column_Changed(object sender, DataColumnChangeEventArgs e )
    {
        Console.WriteLine("Column_Changed Event: name={0}; Column={1}; original name={2}",
            e.Row["name"], e.Column.ColumnName, e.Row["name", DataRowVersion.Original]);
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.ColumnChanging 事件

DataTable
.
.
::
.
ColumnChanging 事件
DataTable 类

在 DataRow 中指定的 DataColumn 的值发生更改时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event ColumnChanging As DataColumnChangeEventHandler
public event DataColumnChangeEventHandler ColumnChanging
public:
 event DataColumnChangeEventHandler^ ColumnChanging {
    void add (DataColumnChangeEventHandler^ value);
    void remove (DataColumnChangeEventHandler^ value);
}
member ColumnChanging : IEvent<DataColumnChangeEventHandler,
    DataColumnChangeEventArgs>

有关更多信息，请参见处理 DataTable 事件 (ADO.NET)。

Private Shared Sub DataTableColumnChanging()
    Dim custTable As DataTable = New DataTable("Customers")
    ' add columns
    custTable.Columns.Add("id", Type.GetType("System.Int32"))
    custTable.Columns.Add("name", Type.GetType("System.String"))
    custTable.Columns.Add("address", Type.GetType("System.String"))

    ' set PrimaryKey
    custTable.Columns("id").Unique = true
    custTable.PrimaryKey = New DataColumn() { custTable.Columns("id") }

    ' add a ColumnChanging event handler for the table.
    AddHandler custTable.ColumnChanging, New _
        DataColumnChangeEventHandler(AddressOf Column_Changing )

    ' add ten rows
    Dim id As Integer
    For id = 1 To 10
        custTable.Rows.Add( _
            New Object() { id, string.Format("customer{0}", id), _
                string.Format("address{0}", id) })
    Next

    custTable.AcceptChanges()

    ' change the name column in all the rows
    Dim row As DataRow
    For Each row In custTable.Rows
        row("name") = string.Format("vip{0}", row("id"))
    Next

End Sub

Private Shared Sub Column_Changing(sender As Object, _
    e As DataColumnChangeEventArgs)
    Console.WriteLine( _
        "Column_Changing Event: name={0}; Column={1}; proposed name={2}", _
        e.Row("name"), e.Column.ColumnName, e.ProposedValue)
End Sub

    private static void DataTableColumnChanging()
    {
        DataTable custTable = new DataTable("Customers");
        // add columns
        custTable.Columns.Add("id", typeof(int));
        custTable.Columns.Add("name", typeof(string));
        custTable.Columns.Add("address", typeof(string));

        // set PrimaryKey
        custTable.Columns[ "id" ].Unique = true;
        custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };

        // add a ColumnChanging event handler for the table.
        custTable.ColumnChanging += new
            DataColumnChangeEventHandler(Column_Changing );

        // add ten rows
        for(int id=1; id<=10; id++)
        {
            custTable.Rows.Add(
                new object[] { id, string.Format(
                "customer{0}", id), string.Format("address{0}", id) });
        }

        custTable.AcceptChanges();

        // change the name column in all the rows
        foreach(DataRow row in custTable.Rows )
        {
            row["name"] = string.Format("vip{0}", row["id"]);
        }

    }

    private static void Column_Changing(object sender,
        DataColumnChangeEventArgs e )
    {
        Console.WriteLine(
            "Column_Changing Event: name={0}; Column={1}; proposed name={2}",
            e.Row["name"], e.Column.ColumnName, e.ProposedValue );
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.Initialized 事件

DataTable
.
.
::
.
Initialized 事件
DataTable 类

初始化 DataTable 后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event Initialized As EventHandler
public event EventHandler Initialized
public:
virtual  event EventHandler^ Initialized {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
abstract Initialized : IEvent<EventHandler,
    EventArgs>
override Initialized : IEvent<EventHandler,
    EventArgs>

实现

有关更多信息，请参见IsInitialized。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.RowChanged 事件

DataTable
.
.
::
.
RowChanged 事件
DataTable 类

在成功更改 DataRow 之后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event RowChanged As DataRowChangeEventHandler
public event DataRowChangeEventHandler RowChanged
public:
 event DataRowChangeEventHandler^ RowChanged {
    void add (DataRowChangeEventHandler^ value);
    void remove (DataRowChangeEventHandler^ value);
}
member RowChanged : IEvent<DataRowChangeEventHandler,
    DataRowChangeEventArgs>

有关更多信息，请参见处理 DataTable 事件 (ADO.NET)。

 Private Sub DataTableRowChanged()
     Dim custTable As DataTable = New DataTable("Customers")
     ' add columns
     custTable.Columns.Add("id", Type.GetType("System.Int32"))
     custTable.Columns.Add("name", Type.GetType("System.String"))
     custTable.Columns.Add("address", Type.GetType("System.String"))

     ' set PrimaryKey
     custTable.Columns("id").Unique = True
     custTable.PrimaryKey = New DataColumn() {custTable.Columns("id")}

     ' add a RowChanged event handler for the table.
     AddHandler custTable.RowChanged, _
            New DataRowChangeEventHandler(AddressOf Row_Changed)

     ' add ten rows
     Dim id As Integer
     For id = 1 To 10
         custTable.Rows.Add( _
New Object() {id, String.Format("customer{0}", id), _
         String.Format("address{0}", id)})
     Next

     custTable.AcceptChanges()

     ' change the name column in all the rows
     Dim row As DataRow
     For Each row In custTable.Rows
         row("name") = String.Format("vip{0}", row("id"))
     Next

 End Sub

 Private Sub Row_Changed(ByVal sender As Object, _
 ByVal e As DataRowChangeEventArgs)
     Console.WriteLine("Row_Changed Event: name={0}; action={1}", _
      e.Row("name"), e.Action)
 End Sub

    private static void DataTableRowChanged()
    {
        DataTable custTable = new DataTable("Customers");
        // add columns
        custTable.Columns.Add("id", typeof(int));
        custTable.Columns.Add("name", typeof(string));
        custTable.Columns.Add("address", typeof(string));

        // set PrimaryKey
        custTable.Columns[ "id" ].Unique = true;
        custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };

        // add a RowChanged event handler for the table.
        custTable.RowChanged += new DataRowChangeEventHandler(Row_Changed);

        // add ten rows
        for(int id=1; id<=10; id++)
        {
            custTable.Rows.Add(
                new object[] { id, string.Format("customer{0}", id),
                string.Format("address{0}", id) });
        }

        custTable.AcceptChanges();

        // change the name column in all the rows
        foreach(DataRow row in custTable.Rows)
        {
            row["name"] = string.Format("vip{0}", row["id"]);
        }

    }

    private static void Row_Changed(object sender, DataRowChangeEventArgs e)
    {
        Console.WriteLine("Row_Changed Event: name={0}; action={1}",
            e.Row["name"], e.Action);
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.RowChanging 事件

DataTable
.
.
::
.
RowChanging 事件
DataTable 类

在 DataRow 正在更改时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event RowChanging As DataRowChangeEventHandler
public event DataRowChangeEventHandler RowChanging
public:
 event DataRowChangeEventHandler^ RowChanging {
    void add (DataRowChangeEventHandler^ value);
    void remove (DataRowChangeEventHandler^ value);
}
member RowChanging : IEvent<DataRowChangeEventHandler,
    DataRowChangeEventArgs>

有关更多信息，请参见处理 DataTable 事件 (ADO.NET)。

 Private Sub DataTableRowChanging()
     Dim custTable As DataTable = New DataTable("Customers")
     ' add columns
     custTable.Columns.Add("id", Type.GetType("System.Int32"))
     custTable.Columns.Add("name", Type.GetType("System.String"))
     custTable.Columns.Add("address", Type.GetType("System.String"))

     ' set PrimaryKey
     custTable.Columns("id").Unique = True
     custTable.PrimaryKey = New DataColumn() {custTable.Columns("id")}

     ' add a RowChanging event handler for the table.
     AddHandler custTable.RowChanging, _
            New DataRowChangeEventHandler(AddressOf Row_Changing)

     ' add ten rows
     Dim id As Integer
     For id = 1 To 10
         custTable.Rows.Add( _
New Object() {id, String.Format("customer{0}", id), _
         String.Format("address{0}", id)})
     Next

     custTable.AcceptChanges()

     ' change the name column in all the rows
     Dim row As DataRow
     For Each row In custTable.Rows
         row("name") = String.Format("vip{0}", row("id"))
     Next

 End Sub

 Private Sub Row_Changing(ByVal sender As Object, _
 ByVal e As DataRowChangeEventArgs)
     Console.WriteLine("Row_Changing Event: name={0}; action={1}", _
      e.Row("name"), e.Action)
 End Sub

private static void DataTableRowChanging()
{
    DataTable custTable = new DataTable("Customers");
    // add columns
    custTable.Columns.Add("id", typeof(int));
    custTable.Columns.Add("name", typeof(string));
    custTable.Columns.Add("address", typeof(string));

    // set PrimaryKey
    custTable.Columns[ "id" ].Unique = true;
    custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };

    // add a RowChanging event handler for the table.
    custTable.RowChanging += new DataRowChangeEventHandler(Row_Changing);

    // add ten rows
    for(int id=1; id<=10; id++)
    {
        custTable.Rows.Add(
            new object[] { id, string.Format("customer{0}", id),
            string.Format("address{0}", id) });
    }

    custTable.AcceptChanges();

    // change the name column in all the rows
    foreach(DataRow row in custTable.Rows)
    {
        row["name"] = string.Format("vip{0}", row["id"]);
    }

}

private static void Row_Changing(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine("Row_Changing Event: name={0}; action={1}",
        e.Row["name"], e.Action);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.RowDeleted 事件

DataTable
.
.
::
.
RowDeleted 事件
DataTable 类

在表中的行已被删除后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event RowDeleted As DataRowChangeEventHandler
public event DataRowChangeEventHandler RowDeleted
public:
 event DataRowChangeEventHandler^ RowDeleted {
    void add (DataRowChangeEventHandler^ value);
    void remove (DataRowChangeEventHandler^ value);
}
member RowDeleted : IEvent<DataRowChangeEventHandler,
    DataRowChangeEventArgs>

有关更多信息，请参见处理 DataTable 事件 (ADO.NET)。

Private Sub DataTableRowDeleted()
    Dim customerTable As DataTable = New DataTable("Customers")
    ' add columns
    customerTable.Columns.Add("id", Type.GetType("System.Int32"))
    customerTable.Columns.Add("name", Type.GetType("System.String"))
    customerTable.Columns.Add("address", Type.GetType("System.String"))

    ' set PrimaryKey
    customerTable.Columns("id").Unique = True
    customerTable.PrimaryKey = New DataColumn() {customerTable.Columns("id")}

    ' add a RowDeleted event handler for the table.
    AddHandler customerTable.RowDeleted, New _
           DataRowChangeEventHandler(AddressOf Row_Deleted)

    ' add ten rows
    Dim id As Integer
    For id = 1 To 10
        customerTable.Rows.Add( _
            New Object() {id, String.Format("customer{0}", id), _
        String.Format("address{0}", id)})
    Next

    customerTable.AcceptChanges()

    ' Delete all the rows
    Dim row As DataRow
    For Each row In customerTable.Rows
        row.Delete()
    Next
End Sub

Private Sub Row_Deleted(ByVal sender As Object, _
ByVal e As DataRowChangeEventArgs)
    Console.WriteLine("Row_Deleted Event: name={0}; action={1}", _
     e.Row("name", DataRowVersion.Original), e.Action)
End Sub

    private static void DataTableRowDeleted()
    {
        DataTable customerTable = new DataTable("Customers");
        // add columns
        customerTable.Columns.Add("id", typeof(int));
        customerTable.Columns.Add("name", typeof(string));
        customerTable.Columns.Add("address", typeof(string));

        // set PrimaryKey
        customerTable.Columns[ "id" ].Unique = true;
        customerTable.PrimaryKey = new DataColumn[] { customerTable.Columns["id"] };

        // add a RowDeleted event handler for the table.
        customerTable.RowDeleted += new DataRowChangeEventHandler(Row_Deleted);

        // add ten rows
        for(int id=1; id<=10; id++)
        {
            customerTable.Rows.Add(
                new object[] { id, string.Format("customer{0}", id),
                string.Format("address{0}", id) });
        }

        customerTable.AcceptChanges();

        // Delete all the rows
        foreach(DataRow row in customerTable.Rows)
            row.Delete();
    }

    private static void Row_Deleted(object sender, DataRowChangeEventArgs e)
    {
        Console.WriteLine("Row_Deleted Event: name={0}; action={1}",
            e.Row["name", DataRowVersion.Original], e.Action);
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.RowDeleting 事件

DataTable
.
.
::
.
RowDeleting 事件
DataTable 类

在表中的行要被删除之前发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event RowDeleting As DataRowChangeEventHandler
public event DataRowChangeEventHandler RowDeleting
public:
 event DataRowChangeEventHandler^ RowDeleting {
    void add (DataRowChangeEventHandler^ value);
    void remove (DataRowChangeEventHandler^ value);
}
member RowDeleting : IEvent<DataRowChangeEventHandler,
    DataRowChangeEventArgs>

有关更多信息，请参见处理 DataTable 事件 (ADO.NET)。

Private Shared Sub DataTableRowDeleting()
    Dim customerTable As DataTable = New DataTable("Customers")
    ' add columns
    customerTable.Columns.Add( "id", Type.GetType("System.Int32"))
    customerTable.Columns.Add( "name", Type.GetType("System.String"))
    customerTable.Columns.Add( "address", Type.GetType("System.String"))

    ' set PrimaryKey
    customerTable.Columns( "id").Unique = true
    customerTable.PrimaryKey = New DataColumn() { customerTable.Columns("id") }

    ' add a RowDeleting event handler for the table.
    AddHandler customerTable.RowDeleting, New _
        DataRowChangeEventHandler( AddressOf Row_Deleting )

    ' add ten rows
    Dim id As Integer
    For id = 1 To 10
        customerTable.Rows.Add( _
            New Object() { id, string.Format("customer{0}", id), _
            string.Format("address{0}", id) })
    Next

    customerTable.AcceptChanges()

    ' Delete all the rows
    Dim row As DataRow
    For Each row In customerTable.Rows
        row.Delete()
    Next
End Sub

Private Shared Sub Row_Deleting(sender As Object, _
    e As DataRowChangeEventArgs)
    Console.WriteLine( "Row_Deleting Event: name={0}; action={1}", _
        e.Row("name"), e.Action)
End Sub

    private static void DataTableRowDeleting()
    {
        DataTable customerTable = new DataTable("Customers");
        // add columns
        customerTable.Columns.Add( "id", typeof(int));
        customerTable.Columns.Add( "name", typeof(string));
        customerTable.Columns.Add( "address", typeof(string));

        // set PrimaryKey
        customerTable.Columns[ "id" ].Unique = true;
        customerTable.PrimaryKey = new DataColumn[]
            { customerTable.Columns["id"] };

        // add a RowDeleting event handler for the table.
        customerTable.RowDeleting += new DataRowChangeEventHandler( Row_Deleting );

        // add ten rows
        for( int id=1; id<=10; id++)
        {
            customerTable.Rows.Add(
                new object[] { id, string.Format("customer{0}", id),
                string.Format("address{0}", id) });
        }

        customerTable.AcceptChanges();

        // Delete all the rows
        foreach( DataRow row in customerTable.Rows )
            row.Delete();
    }

    private static void Row_Deleting( object sender,
        DataRowChangeEventArgs e )
    {
        Console.WriteLine( "Row_Deleting Event: name={0}; action={1}",
            e.Row["name"], e.Action );
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


DataTable ..::.TableCleared 事件

DataTable
.
.
::
.
TableCleared 事件
DataTable 类

清除 DataTable 后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event TableCleared As DataTableClearEventHandler
public event DataTableClearEventHandler TableCleared
public:
 event DataTableClearEventHandler^ TableCleared {
    void add (DataTableClearEventHandler^ value);
    void remove (DataTableClearEventHandler^ value);
}
member TableCleared : IEvent<DataTableClearEventHandler,
    DataTableClearEventArgs>

在成功清除所有行后，但在 Clear 方法将控制返回给调用方之前立即激发 TableCleared 事件。如果清除操作中出现任何异常，则不激发 TableCleared 事件。 在成功清除所有行后，但在 Clear 方法将控制返回给调用方之前立即激发 TableCleared 事件。如果清除操作中出现任何异常，则不激发 TableCleared 事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.TableClearing 事件

DataTable
.
.
::
.
TableClearing 事件
DataTable 类

清除 DataTable 后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event TableClearing As DataTableClearEventHandler
public event DataTableClearEventHandler TableClearing
public:
 event DataTableClearEventHandler^ TableClearing {
    void add (DataTableClearEventHandler^ value);
    void remove (DataTableClearEventHandler^ value);
}
member TableClearing : IEvent<DataTableClearEventHandler,
    DataTableClearEventArgs>

在开始处理 Clear 操作前激发 TableClearing 事件。即使表不包含行，在调用 Clear 方法后也始终会激发该事件。 在开始处理 Clear 操作前激发 TableClearing 事件。即使表不包含行，在调用 Clear 方法后也始终会激发该事件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTable ..::.TableNewRow 事件

DataTable
.
.
::
.
TableNewRow 事件
DataTable 类

插入新 DataRow 时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event TableNewRow As DataTableNewRowEventHandler
public event DataTableNewRowEventHandler TableNewRow
public:
 event DataTableNewRowEventHandler^ TableNewRow {
    void add (DataTableNewRowEventHandler^ value);
    void remove (DataTableNewRowEventHandler^ value);
}
member TableNewRow : IEvent<DataTableNewRowEventHandler,
    DataTableNewRowEventArgs>

使用 NewRow 创建 DataRow 后激发。在调用的 NewRow 方法返回前激发该事件。新 DataRow 实例被分离，它尚未添加到集合中。 使用 NewRow 创建 DataRow 后激发。在调用的 NewRow 方法返回前激发该事件。新 DataRow 实例被分离，它尚未添加到集合中。 使用 NewRow 创建 DataRow 后激发。在调用的 NewRow 方法返回前激发该事件。新 DataRow 实例被分离，它尚未添加到集合中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTable 类
DataTable 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


DataTableClearEventArgs 类

DataTableClearEventArgs 类
成员

为 Clear 方法提供数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DataTableClearEventArgs _
    Inherits EventArgs
public sealed class DataTableClearEventArgs : EventArgs
public ref class DataTableClearEventArgs sealed : public EventArgs
[<SealedAttribute>]
type DataTableClearEventArgs =
    class
        inherit EventArgs
    end

System.Data System.Data..::.DataTableClearEventArgsDataTableClearEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableClearEventArgs 成员
System.Data 命名空间


DataTableClearEventArgs 成员

DataTableClearEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableClearEventArgs 类

为 Clear 方法提供数据。

DataTableClearEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataTableClearEventArgs 类
System.Data 命名空间


DataTableClearEventArgs 构造函数

DataTableClearEventArgs 构造函数
DataTableClearEventArgs 类

初始化 DataTableClearEventArgs 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    dataTable As DataTable _
)
public DataTableClearEventArgs(
    DataTable dataTable
)
public:
DataTableClearEventArgs(
    DataTable^ dataTable
)
new :
        dataTable:DataTable -> DataTableClearEventArgs

参数

dataTable
类型： System.Data DataTable
DataTable，它的行正在被清除。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableClearEventArgs 类
DataTableClearEventArgs 成员
System.Data 命名空间


DataTableClearEventArgs 方法

DataTableClearEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableClearEventArgs 类

DataTableClearEventArgs 类型公开以下成员。

名称 说明
页首

参考

DataTableClearEventArgs 类
System.Data 命名空间


DataTableClearEventArgs 属性

DataTableClearEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableClearEventArgs 类

DataTableClearEventArgs 类型公开以下成员。

名称 说明
页首

参考

DataTableClearEventArgs 类
System.Data 命名空间


DataTableClearEventArgs ..::.Table 属性

DataTableClearEventArgs
.
.
::
.
Table 属性
DataTableClearEventArgs 类

获取正在清除其中的行的表。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Table As DataTable
    Get
public DataTable Table { get; }
public:
property DataTable^ Table {
    DataTable^ get ();
}
member Table : DataTable

属性值

类型： System.Data DataTable
DataTable，它的行正在被清除。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableClearEventArgs 类
DataTableClearEventArgs 成员
System.Data 命名空间


DataTableClearEventArgs ..::.TableName 属性

DataTableClearEventArgs
.
.
::
.
TableName 属性
DataTableClearEventArgs 类

获取正在清除其中的行的表的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property TableName As String
    Get
public string TableName { get; }
public:
property String^ TableName {
    String^ get ();
}
member TableName : string

属性值

类型： System String
一个 String，指示表的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableClearEventArgs 类
DataTableClearEventArgs 成员
System.Data 命名空间


DataTableClearEventArgs ..::.TableNamespace 属性

DataTableClearEventArgs
.
.
::
.
TableNamespace 属性
DataTableClearEventArgs 类

获取其中的行正在被清除的表的命名空间。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property TableNamespace As String
    Get
public string TableNamespace { get; }
public:
property String^ TableNamespace {
    String^ get ();
}
member TableNamespace : string

属性值

类型： System String
一个 String，指示命名空间名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableClearEventArgs 类
DataTableClearEventArgs 成员
System.Data 命名空间


DataTableClearEventHandler 委托

DataTableClearEventHandler 委托

表示处理 Clear 方法的方法。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Delegate Sub DataTableClearEventHandler ( _
    sender As Object, _
    e As DataTableClearEventArgs _
)
public delegate void DataTableClearEventHandler(
    Object sender,
    DataTableClearEventArgs e
)
public delegate void DataTableClearEventHandler(
    Object^ sender,
    DataTableClearEventArgs^ e
)
type DataTableClearEventHandler =
    delegate of
        sender:Object *
        e:DataTableClearEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.Data DataTableClearEventArgs
包含事件数据的 DataTableClearEventArgs。

当创建 DataTableClearEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件发生时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataTableClearEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件发生时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataTableClearEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件发生时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataTableClearEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件发生时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


DataTableCollection 类

DataTableCollection 类
成员

表示 DataSet 的表的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<ListBindableAttribute(False)> _
Public NotInheritable Class DataTableCollection _
    Inherits InternalDataCollectionBase
[ListBindableAttribute(false)]
public sealed class DataTableCollection : InternalDataCollectionBase
[ListBindableAttribute(false)]
public ref class DataTableCollection sealed : public InternalDataCollectionBase
[<SealedAttribute>]
[<ListBindableAttribute(false)>]
type DataTableCollection =
    class
        inherit InternalDataCollectionBase
    end

DataTableCollection 包含特定 DataSet 的所有 DataTable 对象。若要访问 DataSet 的 DataTableCollection，请使用 Tables 属性。 DataTableCollection 包含特定 DataSet 的所有 DataTable 对象。若要访问 DataSet 的 DataTableCollection，请使用 Tables 属性。

DataTableCollection 使用诸如 Add、Clear 和 Remove 之类的方法管理集合中的项目。

使用 Contains 方法确定特定表（通过索引或名称指定）是否在集合中。

若要从一个表浏览到另一个表，请使用 DataTable 的 ChildRelations 或 ParentRelations 属性来访问它的 DataRelation 对象的集合。还可使用 Relations 属性浏览特定 DataSet 集合中 DataTables 的父/子关系。 若要从一个表浏览到另一个表，请使用 DataTable 的 ChildRelations 或 ParentRelations 属性来访问它的 DataRelation 对象的集合。还可使用 Relations 属性浏览特定 DataSet 集合中 DataTables 的父/子关系。

此示例中的第一个过程检索 DataSet 的 DataTableCollection，并打印每个表的每一行中每一列的值。第二个过程创建一个包含两列的新 DataTable，并将其添加到 DataTableCollection 中。 此示例中的第一个过程检索 DataSet 的 DataTableCollection，并打印每个表的每一行中每一列的值。第二个过程创建一个包含两列的新 DataTable，并将其添加到 DataTableCollection 中。

Private Sub GetTables(dataSet As DataSet)
   ' Get Each DataTable in the DataTableCollection and
   ' print each row value.
   Dim table As DataTable
   Dim row As DataRow
   Dim column As DataColumn
   For Each table In dataSet.Tables
      For Each row In table.Rows
         For Each column in table.Columns
            If Not (row(column) Is Nothing) Then
               Console.WriteLine(row(column))
            End If
         Next
      Next
   Next
End Sub

Private Sub CreateTable(dataSet As DataSet)
   Dim newTable As DataTable = new DataTable("table")
   newTable.Columns.Add("ID", Type.GetType("System.Int32"))
   newTable.Columns.Add("Name", Type.GetType("System.String"))
   dataSet.Tables.Add(newTable)
End Sub

private void GetTables(DataSet dataSet)
{
    // Get Each DataTable in the DataTableCollection and
    // print each row value.
    foreach (DataTable table in dataSet.Tables)
        foreach (DataRow row in table.Rows)
            foreach (DataColumn column in table.Columns)
                if (row[column] != null)
                    Console.WriteLine(row[column]);
}

private void CreateTable(DataSet dataSet)
{
    DataTable newTable = new DataTable("table");
    newTable.Columns.Add("ID", typeof(int));
    newTable.Columns.Add("Name", typeof(string));
    dataSet.Tables.Add(newTable);
}

System.Data System.Data..::.DataTableCollectionDataTableCollection

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 成员
System.Data 命名空间
DataColumn
DataRow
DataTable
DataSet


DataTableCollection 成员

DataTableCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

表示 DataSet 的表的集合。

DataTableCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataTableCollection 类
System.Data 命名空间


DataTableCollection 方法

DataTableCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

DataTableCollection 类型公开以下成员。

名称 说明
页首

参考

DataTableCollection 类
System.Data 命名空间


DataTableCollection ..::.Add 方法

DataTableCollection
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

将 DataTable 对象添加到集合中。

名称 说明
页首

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableCollection ..::.Add 方法

DataTableCollection
.
.
::
.
Add 方法
DataTableCollection 类

使用默认名称创建一个新的 DataTable 对象，并将其添加到集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add As DataTable
public DataTable Add()
public:
DataTable^ Add()
member Add : unit -> DataTable

返回值

类型： System.Data DataTable
新创建的 DataTable。

因为未指定任何名称，所以用与其添加顺序相对应的默认名称创建 DataTable。默认名称是“Table1”。 因为未指定任何名称，所以用与其添加顺序相对应的默认名称创建 DataTable。默认名称是“Table1”。

CollectionChanged 事件在表成功添加到集合中时发生。

下面的示例使用不带参数的 Add 方法将三个新的 DataTable 对象添加到 DataTableCollection 中。

Private Sub AddTables()
   Dim table As DataTable

   ' Presuming a DataGrid is displaying more than one table, get its DataSet.
   Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)
   Dim i As Integer
   For i = 0 to 2
      thisDataSet.Tables.Add()
   Next i

   Console.WriteLine(thisDataSet.Tables.Count.ToString() & " tables")
   For Each table In thisDataSet.Tables
      Console.WriteLine(table.TableName)
   Next
End Sub

private void AddTables()
{
    // Presuming a DataGrid is displaying more than one table,
    // get its DataSet.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;

    for (int i = 0; i < 3; i++)
        thisDataSet.Tables.Add();
    Console.WriteLine(thisDataSet.Tables.Count.ToString()
        + " tables");
    foreach (DataTable table in thisDataSet.Tables)
        Console.WriteLine(table.TableName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Add 重载
System.Data 命名空间
DataTable
Remove
Clear


DataTableCollection ..::.Add 方法 (DataTable)

DataTableCollection
.
.
::
.
Add 方法 (DataTable)
DataTableCollection 类

将指定的 DataTable 添加到集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Add ( _
    table As DataTable _
)
public void Add(
    DataTable table
)
public:
void Add(
    DataTable^ table
)
member Add :
        table:DataTable -> unit

参数

table
类型： System.Data DataTable
要添加的 DataTable 对象。
异常 | 条件
ArgumentNullException | 为该表指定的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 该表已经属于此集合，或者属于另一个集合。
DuplicateNameException | 集合中的某个表具有相同的名称。该比较不区分大小写。 集合中的某个表具有相同的名称。该比较不区分大小写。

CollectionChanged 事件在表成功添加到集合中时发生。

下面的示例创建一个 DataTable 并将其添加到 DataSet 的 DataTableCollection 中。

private void AddDataTable()
{
    // Get the DataTableCollection of a DataGrid
    // control's DataSet.
    DataTableCollection tables =
        ((DataSet)DataGrid1.DataSource).Tables;

    // Create a new DataTable.
    DataTable table = new DataTable();

    // Code to add columns and rows not shown here.

    // Add the table to the DataTableCollection.
    tables.Add(table);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Add 重载
System.Data 命名空间
DataTable
Remove
Clear


DataTableCollection ..::.Add 方法 (String)

DataTableCollection
.
.
::
.
Add 方法 (String)
DataTableCollection 类

使用指定名称创建一个 DataTable 对象，并将其添加到集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    name As String _
) As DataTable
public DataTable Add(
    string name
)
public:
DataTable^ Add(
    String^ name
)
member Add :
        name:string -> DataTable

参数

name
类型： System String
要赋予已创建的 DataTable 的名称。

返回值

类型： System.Data DataTable
新创建的 DataTable。
异常 | 条件
DuplicateNameException | 集合中的某个表具有相同的名称。（该比较不区分大小写。） 集合中的某个表具有相同的名称。（该比较不区分大小写。）

如果传入的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则赋予新创建的 DataTable 默认名称。此名称基于表的添加顺序（“Table1”、“Table2”等）。 如果传入的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则赋予新创建的 DataTable 默认名称。此名称基于表的添加顺序（“Table1”、“Table2”等）。

CollectionChanged 事件在表成功添加到集合中时发生。

下面的示例将具有给定名称的 DataTable 添加到 DataTableCollection 中。

Private Sub AddTable()
    ' Presuming a DataGrid is displaying more than one table,
    ' get its DataSet.
    Dim thisDataSet As DataSet = _
        CType(DataGrid1.DataSource, DataSet)

    ' Use the Add method to add a new table with a given name.
    Dim table As DataTable = thisDataSet.Tables.Add("NewTable")

    ' Code to add columns and rows not shown here.

    Console.WriteLine(table.TableName)
    Console.WriteLine(thisDataSet.Tables.Count.ToString())
End Sub

private void AddTable()
{
    // Presuming a DataGrid is displaying more than one table,
    // get its DataSet.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;

    // Use the Add method to add a new table with a given name.
    DataTable table = thisDataSet.Tables.Add("NewTable");

    // Code to add columns and rows not shown here.

    Console.WriteLine(table.TableName);
    Console.WriteLine(thisDataSet.Tables.Count.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Add 重载
System.Data 命名空间
DataTable
Remove
Clear


DataTableCollection ..::.Add 方法 (String, String)

DataTableCollection
.
.
::
.
Add 方法 (String, String)
DataTableCollection 类

使用指定名称创建一个 DataTable 对象，并将其添加到集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    name As String, _
    tableNamespace As String _
) As DataTable
public DataTable Add(
    string name,
    string tableNamespace
)
public:
DataTable^ Add(
    String^ name,
    String^ tableNamespace
)
member Add :
        name:string *
        tableNamespace:string -> DataTable

参数

name
类型： System String
要赋予已创建的 DataTable 的名称。
tableNamespace
类型： System String
要为已创建的 DataTable 提供的命名空间。

返回值

类型： System.Data DataTable
新创建的 DataTable。
异常 | 条件
DuplicateNameException | 集合中的某个表具有相同的名称。（该比较不区分大小写。） 集合中的某个表具有相同的名称。（该比较不区分大小写。）

如果传入的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则赋予新创建的 DataTable 默认名称。此名称基于表的添加顺序（“Table1”、“Table2”等）。 如果传入的是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串 ("")，则赋予新创建的 DataTable 默认名称。此名称基于表的添加顺序（“Table1”、“Table2”等）。

CollectionChanged 事件在表成功添加到集合中时发生。

下面的示例将具有给定名称的 DataTable 添加到 DataTableCollection 中。

Private Sub AddTable()
    ' Presuming a DataGrid is displaying more than one table,
    ' get its DataSet.
    Dim thisDataSet As DataSet = _
        CType(DataGrid1.DataSource, DataSet)

    ' Use the Add method to add a new table with a given name.
    Dim table As DataTable = thisDataSet.Tables.Add("NewTable")

    ' Code to add columns and rows not shown here.

    Console.WriteLine(table.TableName)
    Console.WriteLine(thisDataSet.Tables.Count.ToString())
End Sub

private void AddTable()
{
    // Presuming a DataGrid is displaying more than one table,
    // get its DataSet.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;

    // Use the Add method to add a new table with a given name.
    DataTable table = thisDataSet.Tables.Add("NewTable");

    // Code to add columns and rows not shown here.

    Console.WriteLine(table.TableName);
    Console.WriteLine(thisDataSet.Tables.Count.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Add 重载
System.Data 命名空间
DataTable
Remove
Clear


DataTableCollection ..::.AddRange 方法

DataTableCollection
.
.
::
.
AddRange 方法
DataTableCollection 类

将指定的 DataTable 数组的元素复制到集合末尾。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub AddRange ( _
    tables As DataTable() _
)
public void AddRange(
    DataTable[] tables
)
public:
void AddRange(
    array<DataTable^>^ tables
)
member AddRange :
        tables:DataTable[] -> unit

参数

tables
类型：
array<
System.Data DataTable
>
[]
()
[]

要添加到集合中的 DataTable 对象的数组。

下面的示例创建两个 DataTable 对象，并将它们添加到 DataSet 的 DataTableCollection 中。

Public Sub DataTableCollectionAddRange()
    ' create a DataSet with two tables
    Dim dataSet As DataSet = New DataSet()

    ' create Customer table
    Dim customersTable As DataTable = New DataTable("Customers")
    customersTable.Columns.Add("customerId", _
           Type.GetType("System.Int32")).AutoIncrement = True
    customersTable.Columns.Add("name", Type.GetType("System.String"))
    customersTable.PrimaryKey = New DataColumn() _
           {customersTable.Columns("customerId")}

    ' create Orders table
    Dim ordersTable As DataTable = New DataTable("Orders")
    ordersTable.Columns.Add("orderId", _
           Type.GetType("System.Int32")).AutoIncrement = True
    ordersTable.Columns.Add("customerId", _
           Type.GetType("System.Int32"))
    ordersTable.Columns.Add("amount", _
           Type.GetType("System.Double"))
    ordersTable.PrimaryKey = New DataColumn() _
           {ordersTable.Columns("orderId")}

    dataSet.Tables.AddRange(New DataTable() {customersTable, ordersTable})

    ' print the tables and their columns
    Dim table As DataTable
    Dim column As DataColumn
    For Each table In dataSet.Tables
        Console.WriteLine(table.TableName)
        For Each column In table.Columns
            Console.Write("{0}" & vbTab, column.ColumnName)
        Next
        Console.WriteLine()
    Next
End Sub

public static void DataTableCollectionAddRange()
{
    // create a DataSet with two tables
    DataSet dataSet = new DataSet();

    // create Customer table
    DataTable customersTable = new DataTable("Customers");
    customersTable.Columns.Add("customerId",
        typeof(int)).AutoIncrement = true;
    customersTable.Columns.Add("name",
        typeof(string));
    customersTable.PrimaryKey = new DataColumn[] { customersTable.Columns["customerId"] };

    // create Orders table
    DataTable ordersTable = new DataTable("Orders");
    ordersTable.Columns.Add("orderId",
        typeof(int)).AutoIncrement = true;
    ordersTable.Columns.Add("customerId",
        typeof(int));
    ordersTable.Columns.Add("amount",
        typeof(double));
    ordersTable.PrimaryKey = new DataColumn[] { ordersTable.Columns["orderId"] };

    dataSet.Tables.AddRange(new DataTable[] { customersTable, ordersTable });

    // print the tables and their columns
    foreach (DataTable table in dataSet.Tables)
    {
        Console.WriteLine(table.TableName);
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("{0}\table", column.ColumnName);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableCollection ..::.CanRemove 方法

DataTableCollection
.
.
::
.
CanRemove 方法
DataTableCollection 类

验证是否可以将指定的 DataTable 对象从集合中移除。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function CanRemove ( _
    table As DataTable _
) As Boolean
public bool CanRemove(
    DataTable table
)
public:
bool CanRemove(
    DataTable^ table
)
member CanRemove :
        table:DataTable -> bool

参数

table
类型： System.Data DataTable
集合中要对其执行检查的 DataTable。

返回值

类型： System Boolean
如果该表可被移除，则为 true；否则为 false。

下面的示例使用 CanRemove 测试每个表是否可从 DataSet 中移除。如果这样，则调用 Remove 方法移除该表。 下面的示例使用 CanRemove 测试每个表是否可从 DataSet 中移除。如果这样，则调用 Remove 方法移除该表。

Private Sub RemoveTables()
    ' Presuming a DataGrid is displaying more than one table,
    ' get its DataSet.
    Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)
    Do While thisDataSet.Tables.Count > 0
       Dim table As DataTable = thisDataSet.Tables(0)
       If thisDataSet.Tables.CanRemove(table) Then
          thisDataSet.Tables.Remove(table)
       End If
    Loop
End Sub

private void RemoveTables()
{
    DataTable table;

    // presuming a DataGrid is displaying more than one table, get its DataSet.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;
    while (thisDataSet.Tables.Count > 0)
    {
        table = thisDataSet.Tables[0];
        if (thisDataSet.Tables.CanRemove(table))
            thisDataSet.Tables.Remove(table);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间
Item
IndexOf
Remove


DataTableCollection ..::.Clear 方法

DataTableCollection
.
.
::
.
Clear 方法
DataTableCollection 类

清除所有 DataTable 对象的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Clear
public void Clear()
public:
void Clear()
member Clear : unit -> unit

若要从集合中移除特定的 DataTable，请使用 Remove 方法。

下面的示例获取 DataSet 的 DataTableCollection，然后清除所有表的集合。

Private Sub ClearTables()
   ' Get the DataSet of a DataGrid control.
   Dim dataSet As DataSet = CType(DataGrid1.DataSource, DataSet)
   Dim tables As DataTableCollection = dataSet.Tables

   ' Clear the collection.
   tables.Clear
End Sub

private void ClearTables()
{
    // Get the DataSet of a DataGrid control.
    DataSet dataSet = (DataSet)DataGrid1.DataSource;
    DataTableCollection tables = dataSet.Tables;

    // Clear the collection.
    tables.Clear();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableCollection ..::.Contains 方法

DataTableCollection
.
.
::
.
Contains 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

获取一个值，该值指示集合中是否存在具有指定名称的 DataTable 对象。

名称 说明
页首

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableCollection ..::.Contains 方法 (String)

DataTableCollection
.
.
::
.
Contains 方法 (String)
DataTableCollection 类

获取一个值，该值指示集合中是否存在具有指定名称的 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    name As String _
) As Boolean
public bool Contains(
    string name
)
public:
bool Contains(
    String^ name
)
member Contains :
        name:string -> bool

参数

name
类型： System String
要查找的 DataTable 的名称。

返回值

类型： System Boolean
如果存在指定的表，则为 true；否则为 false。

通过使用 TableName 属性来指定 DataTable 对象的名称。如果使用 Add 方法（不传递任何参数）将 DataTable 添加到集合中，则根据该表的添加顺序赋予表一个默认名称（“Table1”、“Table2”等）。 通过使用 TableName 属性来指定 DataTable 对象的名称。如果使用 Add 方法（不传递任何参数）将 DataTable 添加到集合中，则根据该表的添加顺序赋予表一个默认名称（“Table1”、“Table2”等）。

若要获取 DataTable 的索引，请使用 IndexOf 方法。

说明 说明

当两个或两个以上的表同名，但是命名空间不同时，返回 false。如果在将表名只匹配到一个表时存在任何二义性，则该调用不会成功。 当两个或两个以上的表同名，但是命名空间不同时，返回 false。如果在将表名只匹配到一个表时存在任何二义性，则该调用不会成功。

下面的示例测试 DataTableCollection 中是否存在名为“Suppliers”的表。

Private Sub TestForTableName()
   ' Get the DataSet of a DataGrid.
   Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)

   ' Get the DataTableCollection through the Tables property.
   Dim tablesCol As DataTableCollection = thisDataSet.Tables

   ' Check if the named table exists.
   If tablesCol.Contains("Suppliers") Then
      Console.WriteLine("Table named Suppliers exists")
   End If
End Sub

private void TestForTableName()
{
    // Get the DataSet of a DataGrid.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;

    // Get the DataTableCollection through the Tables property.
    DataTableCollection tablesCol = thisDataSet.Tables;

    // Check if the named table exists.
    if (tablesCol.Contains("Suppliers"))
        Console.WriteLine("Table named Suppliers exists");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Contains 重载
System.Data 命名空间
Item
IndexOf
Remove
CanRemove


DataTableCollection ..::.Contains 方法 (String, String)

DataTableCollection
.
.
::
.
Contains 方法 (String, String)
DataTableCollection 类

获取一个值，该值指示集合中是否存在具有指定名称和表命名空间的 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    name As String, _
    tableNamespace As String _
) As Boolean
public bool Contains(
    string name,
    string tableNamespace
)
public:
bool Contains(
    String^ name,
    String^ tableNamespace
)
member Contains :
        name:string *
        tableNamespace:string -> bool

参数

name
类型： System String
要查找的 DataTable 的名称。
tableNamespace
类型： System String
作为查找范围的 DataTable 命名空间的名称。

返回值

类型： System Boolean
如果存在指定的表，则为 true；否则为 false。

通过使用 TableName 属性来指定 DataTable 对象的名称。如果使用 Add 方法（不传递任何参数）将 DataTable 添加到集合中，则根据该表的添加顺序赋予表一个默认名称（“Table1”、“Table2”等）。 通过使用 TableName 属性来指定 DataTable 对象的名称。如果使用 Add 方法（不传递任何参数）将 DataTable 添加到集合中，则根据该表的添加顺序赋予表一个默认名称（“Table1”、“Table2”等）。

说明 说明

当两个或两个以上的表同名，但是命名空间不同时，返回 false。如果在将表名只匹配到一个表时存在任何二义性，则该调用不会成功。 当两个或两个以上的表同名，但是命名空间不同时，返回 false。如果在将表名只匹配到一个表时存在任何二义性，则该调用不会成功。

若要获取 DataTable 的索引，请使用 IndexOf 方法。

下面的示例测试 DataTableCollection 中是否存在名为“Suppliers”的表。

Private Sub TestForTableName()
   ' Get the DataSet of a DataGrid.
   Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)

   ' Get the DataTableCollection through the Tables property.
   Dim tablesCol As DataTableCollection = thisDataSet.Tables

   ' Check if the named table exists.
   If tablesCol.Contains("Suppliers") Then
      Console.WriteLine("Table named Suppliers exists")
   End If
End Sub

private void TestForTableName()
{
    // Get the DataSet of a DataGrid.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;

    // Get the DataTableCollection through the Tables property.
    DataTableCollection tablesCol = thisDataSet.Tables;

    // Check if the named table exists.
    if (tablesCol.Contains("Suppliers"))
        Console.WriteLine("Table named Suppliers exists");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Contains 重载
System.Data 命名空间
Item
IndexOf
Remove
CanRemove


DataTableCollection ..::.CopyTo 方法

DataTableCollection
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

将当前 DataTableCollection 的所有元素复制到一维 Array，从指定目标数组索引处开始。

名称 说明
页首

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableCollection ..::.CopyTo 方法 ( array<DataTable >[]()[], Int32)

DataTableCollection
.
.
::
.
CopyTo 方法 (
array<
DataTable
>
[]
()
[]
, Int32)
DataTableCollection 类

将当前 DataTableCollection 的所有元素复制到一维 Array，从指定目标数组索引处开始。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As DataTable(), _
    index As Integer _
)
public void CopyTo(
    DataTable[] array,
    int index
)
public:
void CopyTo(
    array<DataTable^>^ array,
    int index
)
member CopyTo :
        array:DataTable[] *
        index:int -> unit

参数

array
类型：
array<
System.Data DataTable
>
[]
()
[]

要将当前 DataTableCollection 对象的元素复制到其中的一维 Array。
index
类型： System Int32
开始复制到其中的目标 Array 索引。

此方法可由派生类重写。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
CopyTo 重载
System.Data 命名空间


DataTableCollection ..::.IndexOf 方法

DataTableCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

获取指定 DataTable 对象的集合中的索引。

名称 说明
页首

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableCollection ..::.IndexOf 方法 (DataTable)

DataTableCollection
.
.
::
.
IndexOf 方法 (DataTable)
DataTableCollection 类

获取指定 DataTable 对象的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    table As DataTable _
) As Integer
public int IndexOf(
    DataTable table
)
public:
int IndexOf(
    DataTable^ table
)
member IndexOf :
        table:DataTable -> int

参数

table
类型： System.Data DataTable
要搜索的 DataTable。

返回值

类型： System Int32
表从零开始的索引，如果在集合中未找到该表，则为 -1。

使用 IndexOf 方法确定给定表的准确索引。

在调用 IndexOf 之前，可通过使用 Contains 方法测试表（由索引或名称指定）是否存在。

下面的示例返回 DataTableCollection 中每个表的索引。

Private Sub GetIndexes()
    ' Get the DataSet of a DataGrid.
    Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)

    ' Get the DataTableCollection through the Tables property.
    Dim tables As DataTableCollection = thisDataSet.Tables
    Dim table As DataTable

    ' Get the index of each table in the collection.
    For Each table In tables
       System.Diagnostics.Debug.WriteLine(tables.IndexOf(table))
    Next
End Sub

private void GetIndexes()
{
    // Get the DataSet of a DataGrid.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;

    // Get the DataTableCollection through the Tables property.
    DataTableCollection tables = thisDataSet.Tables;

    // Get the index of each table in the collection.
    foreach (DataTable table in tables)
        System.Diagnostics.Debug.WriteLine(tables.IndexOf(table));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
IndexOf 重载
System.Data 命名空间
IndexOf
TableName
Remove


DataTableCollection ..::.IndexOf 方法 (String)

DataTableCollection
.
.
::
.
IndexOf 方法 (String)
DataTableCollection 类

获取具有指定名称的 DataTable 对象的集合中的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _ tableName As String _ ) As Integer
public int IndexOf( string tableName )
public: int IndexOf( String^ tableName )
member IndexOf : tableName:string -> int
参数
tableName
类型： System String
要查找的
DataTable
对象的名称。
返回值
类型： System Int32
具有指定名称的
DataTable
的从零开始的索引；或者如果集合中不存在该表，则为 –1。
说明
当两个或两个以上的表同名，但是命名空间不同时，返回 -1。
如果在将表名只匹配到一个表时存在任何二义性，则该调用不会成功。
当两个或两个以上的表同名，但是命名空间不同时，返回 -1。
如果在将表名只匹配到一个表时存在任何二义性，则该调用不会成功。

通过使用 TableName 属性来指定 DataTable 对象的名称。

下面的示例返回 DataTableCollection 中命名表的索引。

Private Sub GetIndexes()
   ' Get the DataSet of a DataGrid.
   Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)

   ' Get the DataTableCollection through the Tables property.
   Dim tables As DataTableCollection = thisDataSet.Tables

   ' Get the index of the table named "Authors", if it exists.
   If tables.Contains("Authors") Then
      System.Diagnostics.Debug.WriteLine(tables.IndexOf("Authors"))
   End If
End Sub

private void GetIndexes()
{
    // Get the DataSet of a DataGrid.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;

    // Get the DataTableCollection through the Tables property.
    DataTableCollection tables = thisDataSet.Tables;

    // Get the index of the table named "Authors", if it exists.
    if (tables.Contains("Authors"))
        System.Diagnostics.Debug.WriteLine(tables.IndexOf("Authors"));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
IndexOf 重载
System.Data 命名空间
IndexOf
TableName
Remove


DataTableCollection ..::.IndexOf 方法 (String, String)

DataTableCollection
.
.
::
.
IndexOf 方法 (String, String)
DataTableCollection 类

获取指定 DataTable 对象的集合中的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    tableName As String, _
    tableNamespace As String _
) As Integer
public int IndexOf(
    string tableName,
    string tableNamespace
)
public:
int IndexOf(
    String^ tableName,
    String^ tableNamespace
)
member IndexOf :
        tableName:string *
        tableNamespace:string -> int

参数

tableName
类型： System String
要查找的 DataTable 对象的名称。
tableNamespace
类型： System String
作为查找范围的 DataTable 命名空间的名称。

返回值

类型： System Int32
具有指定名称的 DataTable 的从零开始的索引；或者如果集合中不存在该表，则为 -1。

通过使用 TableName 属性来指定 DataTable 对象的名称。

下面的示例返回 DataTableCollection 中命名表的索引。

Private Sub GetIndexes()
   ' Get the DataSet of a DataGrid.
   Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)

   ' Get the DataTableCollection through the Tables property.
   Dim tables As DataTableCollection = thisDataSet.Tables

   ' Get the index of the table named "Authors", if it exists.
   If tables.Contains("Authors") Then
      System.Diagnostics.Debug.WriteLine(tables.IndexOf("Authors"))
   End If
End Sub

private void GetIndexes()
{
    // Get the DataSet of a DataGrid.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;

    // Get the DataTableCollection through the Tables property.
    DataTableCollection tables = thisDataSet.Tables;

    // Get the index of the table named "Authors", if it exists.
    if (tables.Contains("Authors"))
        System.Diagnostics.Debug.WriteLine(tables.IndexOf("Authors"));
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
IndexOf 重载
System.Data 命名空间
IndexOf
TableName
Remove


DataTableCollection ..::.Remove 方法

DataTableCollection
.
.
::
.
Remove 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

从集合中移除指定的 DataTable 对象。

名称 说明
页首

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableCollection ..::.Remove 方法 (DataTable)

DataTableCollection
.
.
::
.
Remove 方法 (DataTable)
DataTableCollection 类

从集合中移除指定的 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    table As DataTable _
)
public void Remove(
    DataTable table
)
public:
void Remove(
    DataTable^ table
)
member Remove :
        table:DataTable -> unit

参数

table
类型： System.Data DataTable
要移除的 DataTable。
异常 | 条件
ArgumentNullException | 为该表指定的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 该表不属于此集合。 - 或 - 该表是关系的一部分。

当成功移除表时，将发生 CollectionChanged 事件。

若要确定给定表是否存在以及是否可以在调用 Remove 之前被移除，请使用 Contains 和 CanRemove 方法。

下面的示例使用 CanRemove 方法测试是否可从 DataSet 中移除每个表。如果这样，则调用 Remove 方法移除该表。 下面的示例使用 CanRemove 方法测试是否可从 DataSet 中移除每个表。如果这样，则调用 Remove 方法移除该表。

    Public Sub Main
    DataTableCollectionCanRemove
    End Sub

    Public Sub DataTableCollectionCanRemove()
        ' create a DataSet with two tables
        Dim dataSet As DataSet = New DataSet()

        ' create Customer table
        Dim customersTable As DataTable = New DataTable("Customers")
        customersTable.Columns.Add("customerId", _
            System.Type.GetType("System.Integer")).AutoIncrement = True
        customersTable.Columns.Add("name", _
            System.Type.GetType("System.String"))
        customersTable.PrimaryKey = New DataColumn() _
            {customersTable.Columns("customerId")}

        ' create Orders table
        Dim ordersTable As DataTable = New DataTable("Orders")
        ordersTable.Columns.Add("orderId", _
            System.Type.GetType("System.Integer")).AutoIncrement = True
        ordersTable.Columns.Add("customerId", _
            System.Type.GetType("System.Integer"))
        ordersTable.Columns.Add("amount", _
            System.Type.GetType("System.Double"))
        ordersTable.PrimaryKey = New DataColumn() _
            {ordersTable.Columns("orderId")}

        dataSet.Tables.AddRange(New DataTable() {customersTable, ordersTable})

        ' remove all tables
        ' check if table can be removed and then
        ' remove it, cannot use a foreach when
        ' removing items from a collection
        Do While (dataSet.Tables.Count > 0)
            Dim table As DataTable = dataSet.Tables(0)
            If (dataSet.Tables.CanRemove(table)) Then
                dataSet.Tables.Remove(table)
            End If
        Loop

    Console.WriteLine("dataSet has {0} tables", dataSet.Tables.Count)
    End Sub

public static void DataTableCollectionCanRemove()
{
    // create a DataSet with two tables
    DataSet dataSet = new DataSet();

    // create Customer table
    DataTable customersTable = new DataTable("Customers");
    customersTable.Columns.Add("customerId",
        typeof(int) ).AutoIncrement = true;
    customersTable.Columns.Add("name",
        typeof(string));
    customersTable.PrimaryKey = new DataColumn[]
        { customersTable.Columns["customerId"] };

    // create Orders table
    DataTable ordersTable = new DataTable("Orders");
    ordersTable.Columns.Add("orderId",
        typeof(int) ).AutoIncrement = true;
    ordersTable.Columns.Add("customerId",
        typeof(int) );
    ordersTable.Columns.Add("amount",
        typeof(double));
    ordersTable.PrimaryKey = new DataColumn[]
        { ordersTable.Columns["orderId"] };

    dataSet.Tables.AddRange(new DataTable[]
        {customersTable, ordersTable });

    // remove all tables
    // check if table can be removed and then
    // remove it, cannot use a foreach when
    // removing items from a collection
    while(dataSet.Tables.Count > 0)
    {
        DataTable table = dataSet.Tables[0];
        if(dataSet.Tables.CanRemove(table))
        {
            dataSet.Tables.Remove(table);
        }
    }

    Console.WriteLine("dataSet has {0} tables",
        dataSet.Tables.Count);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Remove 重载
System.Data 命名空间
IndexOf
Contains


DataTableCollection ..::.Remove 方法 (String)

DataTableCollection
.
.
::
.
Remove 方法 (String)
DataTableCollection 类

从集合中删除具有指定名称的 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    name As String _
)
public void Remove(
    string name
)
public:
void Remove(
    String^ name
)
member Remove :
        name:string -> unit

参数

name
类型： System String
要移除的 DataTable 对象的名称。
异常 | 条件
ArgumentException | 该集合不包含具有指定名称的表。

当成功移除表时，将发生 CollectionChanged 事件。

若要确定给定表是否存在以及是否可以在调用 Remove 之前被移除，请使用 Contains 和 CanRemove 方法。

下面的示例使用 Contains 和 CanRemove 方法测试命名表是否存在以及是否可被移除。如果这样，则调用 Remove 方法移除该表。 下面的示例使用 Contains 和 CanRemove 方法测试命名表是否存在以及是否可被移除。如果这样，则调用 Remove 方法移除该表。

Private Sub RemoveTables()
   ' Set the name of the table to test for and remove.
   Dim name As String = "Suppliers"

   ' Presuming a DataGrid is displaying more than one table, get its DataSet.
   Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)
   Dim tablesCol As DataTableCollection = thisDataSet.Tables
   If tablesCol.Contains(name) _
   And tablesCol.CanRemove(tablesCol(name)) Then
      tablesCol.Remove(name)
   End If
End Sub

private void RemoveTables()
{
    // Set the name of the table to test for and remove.
    string name = "Suppliers";

    // Presuming a DataGrid is displaying more than one table, get its DataSet.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;
    DataTableCollection tablesCol = thisDataSet.Tables;
    if (tablesCol.Contains(name) && tablesCol.CanRemove(tablesCol[name]))
        tablesCol.Remove(name);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Remove 重载
System.Data 命名空间
IndexOf
Contains


DataTableCollection ..::.Remove 方法 (String, String)

DataTableCollection
.
.
::
.
Remove 方法 (String, String)
DataTableCollection 类

从集合中删除具有指定名称的 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    name As String, _
    tableNamespace As String _
)
public void Remove(
    string name,
    string tableNamespace
)
public:
void Remove(
    String^ name,
    String^ tableNamespace
)
member Remove :
        name:string *
        tableNamespace:string -> unit

参数

name
类型： System String
要移除的 DataTable 对象的名称。
tableNamespace
类型： System String
作为查找范围的 DataTable 命名空间的名称。
异常 | 条件
ArgumentException | 该集合不包含具有指定名称的表。

当成功移除表时，将发生 CollectionChanged 事件。

若要确定给定表是否存在以及是否可以在调用 Remove 之前被移除，请使用 Contains 和 CanRemove 方法。

下面的示例使用 Contains 和 CanRemove 方法测试命名表是否存在以及是否可被移除。如果这样，则调用 Remove 方法移除该表。 下面的示例使用 Contains 和 CanRemove 方法测试命名表是否存在以及是否可被移除。如果这样，则调用 Remove 方法移除该表。

Private Sub RemoveTables()
   ' Set the name of the table to test for and remove.
   Dim name As String = "Suppliers"

   ' Presuming a DataGrid is displaying more than one table, get its DataSet.
   Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)
   Dim tablesCol As DataTableCollection = thisDataSet.Tables
   If tablesCol.Contains(name) _
   And tablesCol.CanRemove(tablesCol(name)) Then
      tablesCol.Remove(name)
   End If
End Sub

private void RemoveTables()
{
    // Set the name of the table to test for and remove.
    string name = "Suppliers";

    // Presuming a DataGrid is displaying more than one table, get its DataSet.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;
    DataTableCollection tablesCol = thisDataSet.Tables;
    if (tablesCol.Contains(name) && tablesCol.CanRemove(tablesCol[name]))
        tablesCol.Remove(name);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Remove 重载
System.Data 命名空间
IndexOf
Contains


DataTableCollection ..::.RemoveAt 方法

DataTableCollection
.
.
::
.
RemoveAt 方法
DataTableCollection 类

从集合中移除位于指定索引位置的 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub RemoveAt ( _
    index As Integer _
)
public void RemoveAt(
    int index
)
public:
void RemoveAt(
    int index
)
member RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的 DataTable 的索引。
异常 | 条件
ArgumentException | 该集合在指定的索引位置没有表。

当成功移除表时，将发生 CollectionChanged 事件。

下面的示例使用 Contains 和 CanRemove 方法测试表是否存在索引 10。如果这样，则调用 RemoveAt 方法移除该表。 下面的示例使用 Contains 和 CanRemove 方法测试表是否存在索引 10。如果这样，则调用 RemoveAt 方法移除该表。

Public Sub DataTableCollectionRemoveAt()
    ' Create a DataSet with two tables and then
    ' remove the tables from the collection using RemoveAt.
    Dim dataSet As DataSet = New DataSet()

    ' Create Customer table.
    Dim customerTable As DataTable = New DataTable("Customers")
    customerTable.Columns.Add("customerId", _
        GetType(Integer)).AutoIncrement = True
    customerTable.Columns.Add("name", GetType(String))
    customerTable.PrimaryKey = New DataColumn() _
        {customerTable.Columns("customerId")}

    ' Create Orders table.
    Dim ordersTable As DataTable = New DataTable("Orders")
    ordersTable.Columns.Add("orderId", _
        GetType(Integer)).AutoIncrement = True
    ordersTable.Columns.Add("customerId", GetType(Integer))
    ordersTable.Columns.Add("amount", GetType(Double))
    ordersTable.PrimaryKey = New DataColumn() _
        {ordersTable.Columns("orderId")}

    dataSet.Tables.AddRange(New DataTable() _
        {customerTable, ordersTable})

    ' Remove all tables.
    ' First check to see if the table can be removed,
    ' then remove it.
    '
    ' You cannot use a foreach when removing items
    ' from a collection.
    Do While (dataSet.Tables.Count > 0)
        Dim table As DataTable = dataSet.Tables(0)
        If (dataSet.Tables.CanRemove(table)) Then
            dataSet.Tables.RemoveAt(0)
        End If
        Console.WriteLine("dataSet has {0} tables", _
            dataSet.Tables.Count)
    Loop
End Sub

public static void DataTableCollectionRemoveAt()
{
    // Create a DataSet with two tables and then
    // remove the tables from the collection using RemoveAt.
    DataSet dataSet = new DataSet();

    // Create Customer table.
    DataTable customerTable = new DataTable("Customers");
    customerTable.Columns.Add("customerId",
        typeof(int)).AutoIncrement = true;
    customerTable.Columns.Add("name", typeof(string));
    customerTable.PrimaryKey = new DataColumn[] { customerTable.Columns["customerId"] };

    // Create Orders table.
    DataTable ordersTable = new DataTable("Orders");
    ordersTable.Columns.Add("orderId",
        typeof(int)).AutoIncrement = true;
    ordersTable.Columns.Add("customerId", typeof(int));
    ordersTable.Columns.Add("amount", typeof(double));
    ordersTable.PrimaryKey = new DataColumn[] { ordersTable.Columns["orderId"] };

    dataSet.Tables.AddRange(new DataTable[] { customerTable, ordersTable });

    // Remove all tables.
    // First check to see if the table can be removed,
    // then remove it.
    //
    // You cannot use a foreach when removing items
    // from a collection.
    while (dataSet.Tables.Count > 0)
    {
        DataTable table = dataSet.Tables[0];
        if (dataSet.Tables.CanRemove(table))
            dataSet.Tables.RemoveAt(0);
        Console.WriteLine("dataSet has {0} tables",
            dataSet.Tables.Count);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间
IndexOf
Contains


DataTableCollection 属性

DataTableCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

DataTableCollection 类型公开以下成员。

名称 说明
页首

参考

DataTableCollection 类
System.Data 命名空间


DataTableCollection ..::.Item 属性

DataTableCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

从集合中获取指定的 DataTable 对象。

名称 说明
页首

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableCollection ..::.Item 属性 (Int32)

DataTableCollection
.
.
::
.
Item 属性 (Int32)
DataTableCollection 类

获取位于指定索引位置的 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    index As Integer _
) As DataTable
    Get
public DataTable this[
    int index
] { get; }
public:
property DataTable^ Item[int index] {
    DataTable^ get (int index);
}
member Item : DataTable

参数

index
类型： System Int32
要查找的 DataTable 的从零开始的索引。

属性值

类型： System.Data DataTable
DataTable。
异常 | 条件
IndexOutOfRangeException | 索引值大于集合中项的数目。

使用 Contains 方法确定具有特定索引的表是否存在。

如果拥有表的名称，但没有其索引，请使用 IndexOf 方法返回该索引。

下面的示例按照其索引检索 DataTable。

Private Sub GetDataTableByIndex()
    ' Presuming a DataGrid is displaying more than one table, get its DataSet.
    Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)

    ' Get the DataTableCollection.
    Dim tablesCollection As DataTableCollection = thisDataSet.Tables

    ' Iterate through the collection to get each table name.
    Dim i As Integer
    For i = 0 To tablesCollection.Count - 1
       Console.WriteLine(tablesCollection(i).TableName)
    Next
End Sub

private void GetDataTableByIndex()
{
   // presuming a DataGrid is displaying more than one table, get its DataSet.
   DataSet thisDataSet = (DataSet)DataGrid1.DataSource;
   // Get the DataTableCollection.
   DataTableCollection tablesCollection = thisDataSet.Tables;
   // Iterate through the collection to get each table name.
   for (int i = 0; i < tablesCollection.Count; i++)
      Console.WriteLine(tablesCollection[i].TableName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Item 重载
System.Data 命名空间
Contains
IndexOf
DataTable


DataTableCollection ..::.Item 属性 (String)

DataTableCollection
.
.
::
.
Item 属性 (String)
DataTableCollection 类

获取具有指定名称的 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    name As String _
) As DataTable
    Get
public DataTable this[
    string name
] { get; }
public:
property DataTable^ Item[String^ name] {
    DataTable^ get (String^ name);
}
member Item : DataTable

参数

name
类型： System String
要查找的 DataTable 的名称。

属性值

类型： System.Data DataTable
具有指定名称的 DataTable；否则，如果 DataTable 不存在，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

如果存在与搜索字符串的大小写相匹配的 DataTable 名称，则返回它。否则，执行不区分大小写的搜索，如果找到与此搜索相匹配的 DataTable 名称，则返回它。 如果存在与搜索字符串的大小写相匹配的 DataTable 名称，则返回它。否则，执行不区分大小写的搜索，如果找到与此搜索相匹配的 DataTable 名称，则返回它。

使用 Contains 方法确定具有特定名称或索引的表是否存在。

下面的示例按照名称从 DataTableCollection 检索单个表。

Private Sub GetTableByName()
    ' Presuming a DataGrid is displaying more than one table,
    ' get its DataSet.
    Dim thisDataSet As DataSet = CType(DataGrid1.DataSource, DataSet)

    ' Get the DataTableCollection.
    Dim tablesCollection As DataTableCollection = thisDataSet.Tables

    ' Get a specific table by name.
    Dim table As DataTable = tablesCollection("Suppliers")
    Console.WriteLine(table.TableName)
End Sub

private void GetTableByName()
{
    // Presuming a DataGrid is displaying more than one table, get its DataSet.
    DataSet thisDataSet = (DataSet)DataGrid1.DataSource;

    // Get the DataTableCollection.
    DataTableCollection tablesCollection = thisDataSet.Tables;

    // Get a specific table by name.
    DataTable table = tablesCollection["Suppliers"];
    Console.WriteLine(table.TableName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Item 重载
System.Data 命名空间


DataTableCollection ..::.Item 属性 (String, String)

DataTableCollection
.
.
::
.
Item 属性 (String, String)
DataTableCollection 类

获取指定命名空间中具有指定名称的 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    name As String, _
    tableNamespace As String _
) As DataTable
    Get
public DataTable this[
    string name,
    string tableNamespace
] { get; }
public:
property DataTable^ Item[String^ name, String^ tableNamespace] {
    DataTable^ get (String^ name, String^ tableNamespace);
}
member Item : DataTable

参数

name
类型： System String
要查找的 DataTable 的名称。
tableNamespace
类型： System String
作为查找范围的 DataTable 命名空间的名称。

属性值

类型： System.Data DataTable
具有指定名称的 DataTable；否则，如果 DataTable 不存在，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
Item 重载
System.Data 命名空间


DataTableCollection 事件

DataTableCollection 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableCollection 类

DataTableCollection 类型公开以下成员。

名称 说明
页首

参考

DataTableCollection 类
System.Data 命名空间


DataTableCollection ..::.CollectionChanged 事件

DataTableCollection
.
.
::
.
CollectionChanged 事件
DataTableCollection 类

由于添加或移除 DataTable 对象而更改 DataTableCollection 之后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event CollectionChanged As CollectionChangeEventHandler
public event CollectionChangeEventHandler CollectionChanged
public:
 event CollectionChangeEventHandler^ CollectionChanged {
    void add (CollectionChangeEventHandler^ value);
    void remove (CollectionChangeEventHandler^ value);
}
member CollectionChanged : IEvent<CollectionChangeEventHandler,
    CollectionChangeEventArgs>

有关处理事件的更多信息，请参见 使用事件。

下面的示例演示如何使用 CollectionChanged 事件。

Public Sub TableCollectionCollectionChanged()
    ' create a DataSet with two tables
    Dim dataSet As DataSet = New DataSet()

    AddHandler dataSet.Tables.CollectionChanging, _
        AddressOf Collection_Changed

    ' create Customer table
    Dim custTable As DataTable = New DataTable("Customers")
    custTable.Columns.Add("customerId", _
        System.Type.GetType("System.Integer")).AutoIncrement = True
    custTable.Columns.Add("name", System.Type.GetType("System.String"))
    custTable.PrimaryKey = New DataColumn() {custTable.Columns("customerId")}

    ' create Orders table
    Dim orderTable As DataTable = New DataTable("Orders")
    orderTable.Columns.Add("orderId", _
        System.Type.GetType("System.Integer")).AutoIncrement = True
    orderTable.Columns.Add("customerId", System.Type.GetType("System.Integer"))
    orderTable.Columns.Add("amount", System.Type.GetType("System.Double"))
    orderTable.PrimaryKey = New DataColumn() {orderTable.Columns("orderId")}

    dataSet.Tables.AddRange(New DataTable() {custTable, orderTable})

    ' Now remove all tables.
    ' First check to see if the table can be removed,
    ' then remove it from the collection.
    '
    ' You cannot use a For Each loop when
    ' removing items from a collection.
    Do While (dataSet.Tables.Count > 0)
        Dim table As DataTable = dataSet.Tables(0)
        If (dataSet.Tables.CanRemove(table)) Then
            dataSet.Tables.RemoveAt(0)
        End If
    Loop

    Console.WriteLine("dataSet has {0} tables", dataSet.Tables.Count)
End Sub

Private Sub Collection_Changed(ByVal sender As Object, _
    ByVal e As System.ComponentModel.CollectionChangeEventArgs)
    Console.WriteLine("Collection_Changed Event: '{0}'\table element={1}", _
        e.Action.ToString(), e.Element.ToString())
End Sub

public static void TableCollectionCollectionChanged()
{
    // create a DataSet with two tables
    DataSet dataSet = new DataSet();

    dataSet.Tables.CollectionChanged +=
        new System.ComponentModel.CollectionChangeEventHandler(
        Collection_Changed);

    // create Customer table
    DataTable custTable = new DataTable("Customers");
    custTable.Columns.Add("customerId",
        typeof(int)).AutoIncrement = true;
    custTable.Columns.Add("name",
        typeof(string));
    custTable.PrimaryKey = new DataColumn[] { custTable.Columns["customerId"] };

    // create Orders table
    DataTable orderTable = new DataTable("Orders");
    orderTable.Columns.Add("orderId",
        typeof(int)).AutoIncrement = true;
    orderTable.Columns.Add("customerId", typeof(int));
    orderTable.Columns.Add("amount", typeof(double));
    orderTable.PrimaryKey = new DataColumn[] { orderTable.Columns["orderId"] };

    dataSet.Tables.AddRange(new DataTable[] { custTable, orderTable });

    // remove all tables
    // check if table can be removed and then
    // remove it, cannot use a foreach when
    // removing items from a collection
    // equivalent to dataSet.Tables.Clear()
    while (dataSet.Tables.Count > 0)
    {
        DataTable table = dataSet.Tables[0];
        if (dataSet.Tables.CanRemove(table))
        {
            dataSet.Tables.RemoveAt(0);
        }
    }

    Console.WriteLine("dataSet has {0} tables",
        dataSet.Tables.Count);
}

private static void Collection_Changed(object sender,
    System.ComponentModel.CollectionChangeEventArgs e)
{
    Console.WriteLine("Collection_Changed Event: '{0}'\table element={1}",
        e.Action.ToString(), e.Element.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableCollection ..::.CollectionChanging 事件

DataTableCollection
.
.
::
.
CollectionChanging 事件
DataTableCollection 类

由于添加或移除 DataTable 对象而更改 DataTableCollection 时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event CollectionChanging As CollectionChangeEventHandler
public event CollectionChangeEventHandler CollectionChanging
public:
 event CollectionChangeEventHandler^ CollectionChanging {
    void add (CollectionChangeEventHandler^ value);
    void remove (CollectionChangeEventHandler^ value);
}
member CollectionChanging : IEvent<CollectionChangeEventHandler,
    CollectionChangeEventArgs>

有关处理事件的更多信息，请参见 使用事件。

下面的示例演示如何使用 CollectionChanging 事件。

Public Sub TableCollectionCollectionChanging()
    ' Create a DataSet with two tables
    Dim dataSet As DataSet = New DataSet()

    AddHandler dataSet.Tables.CollectionChanging, _
        AddressOf Collection_Changing

    ' Create Customer table
    Dim customersTable As DataTable = New DataTable("Customers")
    customersTable.Columns.Add("customerId", _
        System.Type.GetType("System.Integer")).AutoIncrement = True
    customersTable.Columns.Add("name", _
        System.Type.GetType("System.String"))
    customersTable.PrimaryKey = New DataColumn() _
        {customersTable.Columns("customerId")}

    ' Create Orders table
    Dim ordersTable As DataTable = New DataTable("Orders")
    ordersTable.Columns.Add("orderId", _
        System.Type.GetType("System.Integer")).AutoIncrement = True
    ordersTable.Columns.Add("customerId", _
        System.Type.GetType("System.Integer"))
    ordersTable.Columns.Add("amount", System.Type.GetType("System.Double"))
    ordersTable.PrimaryKey = New DataColumn() {ordersTable.Columns("orderId")}

    ' Add the tables to the DataTableCollection
    dataSet.Tables.AddRange(New DataTable() {customersTable, ordersTable})

    ' Remove all tables
    ' First check to see if the table can be removed and
    ' then remove it.
    '
    ' You cannot use a For Each loop to remove items
    ' from a collection.
    Do While (dataSet.Tables.Count > 0)
        Dim table As DataTable
        table = dataSet.Tables(0)
        If (dataSet.Tables.CanRemove(table)) Then
            dataSet.Tables.RemoveAt(0)
        End If
    Loop

    Console.WriteLine("dataSet has {0} tables", dataSet.Tables.Count)
End Sub

Private Sub Collection_Changing(ByVal sender As Object, _
    ByVal e As System.ComponentModel.CollectionChangeEventArgs)
    ' Implementing this event allows you to abort a change
    ' to the collection by raising an exception which you can
    ' catch.
    Console.WriteLine( _
        "Collection_Changing Event: '{0}'\table element={1}", _
        e.Action.ToString(), e.Element.ToString())
End Sub

public static void TableCollectionCollectionChanging()
{
    // Create a DataSet with two tables
    DataSet dataSet = new DataSet();

    // Assign the event-handler function for the
    // CollectionChangeEvent.
    dataSet.Tables.CollectionChanging +=
        new System.ComponentModel.CollectionChangeEventHandler(
        Collection_Changing);

    // create Customer table
    DataTable customersTable = new DataTable("Customers");
    customersTable.Columns.Add("customerId",
        typeof(int)).AutoIncrement = true;
    customersTable.Columns.Add("name",
        typeof(string));
    customersTable.PrimaryKey = new DataColumn[] { customersTable.Columns["customerId"] };

    // create Orders table
    DataTable ordersTable = new DataTable("Orders");
    ordersTable.Columns.Add("orderId",
        typeof(int)).AutoIncrement = true;
    ordersTable.Columns.Add("customerId",
        typeof(int));
    ordersTable.Columns.Add("amount",
        typeof(double));
    ordersTable.PrimaryKey = new DataColumn[] { ordersTable.Columns["orderId"] };

    dataSet.Tables.AddRange(new DataTable[] { customersTable, ordersTable });

    // Check to see if each table can be removed and then
    // remove it.
    while (dataSet.Tables.Count > 0)
    {
        DataTable table = dataSet.Tables[0];
        if (dataSet.Tables.CanRemove(table))
        {
            dataSet.Tables.RemoveAt(0);
        }
    }

    Console.WriteLine("dataSet has {0} tables",
        dataSet.Tables.Count);
}

private static void Collection_Changing(object sender,
    System.ComponentModel.CollectionChangeEventArgs e)
{
    // Implementing this event allows you to abort a change
    // to the collection by raising an exception which you can
    // catch.

    Console.WriteLine("Collection_Changing Event: '{0}'\table element={1}",
        e.Action.ToString(), e.Element.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableCollection 类
DataTableCollection 成员
System.Data 命名空间


DataTableExtensions 类

DataTableExtensions 类
成员

定义 DataTable 类的扩展方法。DataTableExtensions 是一个静态类。 定义 DataTable 类的扩展方法。DataTableExtensions 是一个静态类。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public NotInheritable Class DataTableExtensions
public static class DataTableExtensions
[ExtensionAttribute]
public ref class DataTableExtensions abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type DataTableExtensions =  class end

System.Data System.Data..::.DataTableExtensionsDataTableExtensions
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataTableExtensions 成员
System.Data 命名空间


DataTableExtensions 成员

DataTableExtensions 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableExtensions 类

定义 DataTable 类的扩展方法。DataTableExtensions 是一个静态类。 定义 DataTable 类的扩展方法。DataTableExtensions 是一个静态类。

DataTableExtensions 类型公开以下成员。

名称 说明
页首

参考

DataTableExtensions 类
System.Data 命名空间


DataTableExtensions 方法

DataTableExtensions 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableExtensions 类

DataTableExtensions 类型公开以下成员。

名称 说明
页首

参考

DataTableExtensions 类
System.Data 命名空间


DataTableExtensions ..::.AsDataView 方法

DataTableExtensions
.
.
::
.
AsDataView 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableExtensions 类

创建并返回支持 LINQ 的 DataView 对象。

名称 说明
页首

参考

DataTableExtensions 类
DataTableExtensions 成员
System.Data 命名空间


DataTableExtensions ..::.AsDataView 方法 (DataTable)

DataTableExtensions
.
.
::
.
AsDataView 方法 (DataTable)
DataTableExtensions 类

创建并返回支持 LINQ 的 DataView 对象。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function AsDataView ( _
    table As DataTable _
) As DataView
public static DataView AsDataView(
    this DataTable table
)
[ExtensionAttribute]
public:
static DataView^ AsDataView(
    DataTable^ table
)
static member AsDataView :
        table:DataTable -> DataView

参数

table
类型： System.Data DataTable
从中创建支持 LINQ 的 DataView 的源 DataTable。

返回值

类型： System.Data DataView
支持 LINQ 的 DataView 对象。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

DataView 为 LINQ to DataSet 启用数据绑定方案，可以从类型化或未类型化的 DataTable 创建，提供该表格的默认视图。 在从 DataTable 创建 DataView 之后，可以在其上设置排序。 然后在提供了简单数据绑定模型的情况下，DataView 将绑定到 UI 控件，如 DataGrid 或 DataGridView。

有关更多信息和示例，请参见创建 DataView 对象 (LINQ to DataSet)。

下面的示例从 SalesOrderDetail 表创建 DataView 并将它设置为 BindingSource 对象的数据源，此对象可充当 DataGridView 控件的代理：

Dim orders As DataTable = dataSet.Tables("SalesOrderDetail")

Dim view As DataView = orders.AsDataView()
bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()

DataTable orders = dataSet.Tables["SalesOrderDetail"];

DataView view = orders.AsDataView();
bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataTableExtensions 类
DataTableExtensions 成员
AsDataView 重载
System.Data 命名空间


DataTableExtensions ..::.AsDataView <(Of <(T >)>) 方法 (EnumerableRowCollection <(Of <(T >)>))

DataTableExtensions
.
.
::
.
AsDataView
<
(Of
<
(
T
>
)
>
)
方法 (EnumerableRowCollection
<
(Of
<
(
T
>
)
>
)
)
DataTableExtensions 类

创建并返回一个支持 LINQ 的 DataView 对象，该对象表示 LINQ to DataSet 查询。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function AsDataView(Of T As DataRow) ( _
    source As EnumerableRowCollection(Of T) _
) As DataView
public static DataView AsDataView<T>(
    this EnumerableRowCollection<T> source
)
where T : DataRow

[ExtensionAttribute]
public:
generic<typename T>
where T : DataRow
static DataView^ AsDataView(
    EnumerableRowCollection<T>^ source
)
static member AsDataView :
        source:EnumerableRowCollection<'T> -> DataView  when 'T : DataRow

类型参数

T

源序列中的对象的类型，通常为 DataRow。

参数

source
类型： System.Data EnumerableRowCollection
<
(Of
<
(
T
>
)
>
)

从中创建支持 LINQ 的 DataView 的源 LINQ to DataSet 查询。

返回值

类型： System.Data DataView
支持 LINQ 的 DataView 对象。

使用说明

在 Visual Basic 和 C# 中，可以在 T 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

DataView 可为 LINQ to DataSet 启用数据绑定方案，并可从 LINQ to DataSet 查询创建。DataView 表示查询本身，并不是查询上面的视图。 新创建的 DataView 可从创建它的查询中推断筛选和排序信息。然后在提供了简单数据绑定模型的情况下，DataView 将绑定到 UI 控件，如 DataGrid 或 DataGridView。 DataView 可为 LINQ to DataSet 启用数据绑定方案，并可从 LINQ to DataSet 查询创建。DataView 表示查询本身，并不是查询上面的视图。 新创建的 DataView 可从创建它的查询中推断筛选和排序信息。然后在提供了简单数据绑定模型的情况下，DataView 将绑定到 UI 控件，如 DataGrid 或 DataGridView。 DataView 可为 LINQ to DataSet 启用数据绑定方案，并可从 LINQ to DataSet 查询创建。DataView 表示查询本身，并不是查询上面的视图。 新创建的 DataView 可从创建它的查询中推断筛选和排序信息。然后在提供了简单数据绑定模型的情况下，DataView 将绑定到 UI 控件，如 DataGrid 或 DataGridView。

输入参数 source 的参数 T 只能为 DataRow 类型或从 DataRow 派生的类型。

只有用于创建 DataView 的查询支持下面的查询运算符：

  • Cast TResult

  • OrderBy

  • OrderByDescending

  • Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))

  • ThenBy

  • ThenByDescending

  • Where TRow

有关更多信息和示例，请参见创建 DataView 对象 (LINQ to DataSet)。

下面的示例创建按应付款总额排序的在线订单的 DataView：

Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")

Dim query = _
    From order In orders.AsEnumerable() _
    Where order.Field(Of Boolean)("OnlineOrderFlag") = True _
    Order By order.Field(Of Decimal)("TotalDue") _
    Select order

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view

DataTable orders = dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<bool>("OnlineOrderFlag") == true
    orderby order.Field<decimal>("TotalDue")
    select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataTableExtensions 类
DataTableExtensions 成员
AsDataView 重载
System.Data 命名空间


DataTableExtensions ..::.AsEnumerable 方法

DataTableExtensions
.
.
::
.
AsEnumerable 方法
DataTableExtensions 类

返回一个 IEnumerable<(Of <(T>)>) 对象，其泛型参数 T 为 DataRow。此对象可用在 LINQ 表达式或方法查询中。 返回一个 IEnumerable<(Of <(T>)>) 对象，其泛型参数 T 为 DataRow。此对象可用在 LINQ 表达式或方法查询中。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function AsEnumerable ( _
    source As DataTable _
) As EnumerableRowCollection(Of DataRow)
public static EnumerableRowCollection<DataRow> AsEnumerable(
    this DataTable source
)
[ExtensionAttribute]
public:
static EnumerableRowCollection<DataRow^>^ AsEnumerable(
    DataTable^ source
)
static member AsEnumerable :
        source:DataTable -> EnumerableRowCollection<DataRow>

参数

source
类型： System.Data DataTable
可枚举的源 DataTable。

返回值

类型： System.Data EnumerableRowCollection
<
(Of
<
(
DataRow
>
)
>
)

一个 IEnumerable<(Of <(T>)>) 对象，其泛型参数 T 为 DataRow。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
ArgumentNullException | 源 DataTable 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

语言集成查询 (LINQ) 查询适用于实现 IEnumerable<(Of <(T>)>) 接口或 IQueryable 接口的数据源。DataTable 类不实现任何一个接口，因此您必须调用 AsEnumerable 方法，将 DataTable 用作 LINQ 查询 From 子句中的来源。 通过返回 IEnumerable<(Of <(T>)>) 对象，还可以获得特定于域的自定义运算符，如 CopyToDataTable。 语言集成查询 (LINQ) 查询适用于实现 IEnumerable<(Of <(T>)>) 接口或 IQueryable 接口的数据源。DataTable 类不实现任何一个接口，因此您必须调用 AsEnumerable 方法，将 DataTable 用作 LINQ 查询 From 子句中的来源。 通过返回 IEnumerable<(Of <(T>)>) 对象，还可以获得特定于域的自定义运算符，如 CopyToDataTable。

AsEnumerable 方法返回的可枚举对象永久绑定到产生它的 DataTable。多次调用 AsEnumerable 方法将返回多个独立的可查询对象，这些对象全部绑定到源 DataTable。 AsEnumerable 方法返回的可枚举对象永久绑定到产生它的 DataTable。多次调用 AsEnumerable 方法将返回多个独立的可查询对象，这些对象全部绑定到源 DataTable。

在下面的示例中，DisplayProducts 方法接收一个数据表，其中包含名为 ProductName一个 DataColumn，提取 ProductName 值，然后输出值。

Imports System.Console
Module Module1
   Public Sub DisplayProducts(ByVal table As DataTable)
      Dim productNames = From products In table.AsEnumerable() Select products("ProductName")
      WriteLine("Product Names: ")
      For Each productName In productNames
         WriteLine(productName)
       Next
   End Sub

   Sub Main()
      Dim table As DataTable = New DataTable()
      table.Columns.Add("ID")
      table.Columns.Add("ProductName")

      table.Rows.Add("1", "Chai")
      table.Rows.Add("2", "Queso Cabrales")
      table.Rows.Add("3", "Tofu")

      DisplayProducts(table)
   End Sub
End Module

using System;
using System.Data;

class Program {
   public void DisplayProducts(DataTable table) {
      var productNames = from products in table.AsEnumerable() select products.Field<string>("ProductName");
      Console.WriteLine("Product Names: ");
      foreach (string productName in productNames) {
         Console.WriteLine(productName);
      }
   }

   static void Main(string[] args) {
      DataTable table = new DataTable();
      table.Columns.Add("ID");
      table.Columns.Add("ProductName");

      table.Rows.Add("1", "Chai");
      table.Rows.Add("2", "Queso Cabrales");
      table.Rows.Add("3", "Tofu");

      Program inst = new Program();
      inst.DisplayProducts(table);
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataTableExtensions 类
DataTableExtensions 成员
System.Data 命名空间


DataTableExtensions ..::.CopyToDataTable 方法

DataTableExtensions
.
.
::
.
CopyToDataTable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableExtensions 类

在给定输入 IEnumerable<(Of <(T>)>) 对象的情况下，返回包含 DataRow 对象副本的 DataTable。

名称 说明
页首

参考

DataTableExtensions 类
DataTableExtensions 成员
System.Data 命名空间


DataTableExtensions ..::.CopyToDataTable <(Of <(T >)>) 方法 (IEnumerable <(Of <(T >)>))

DataTableExtensions
.
.
::
.
CopyToDataTable
<
(Of
<
(
T
>
)
>
)
方法 (IEnumerable
<
(Of
<
(
T
>
)
>
)
)
DataTableExtensions 类

在给定其泛型参数 T 为 DataRow 的输入 IEnumerable<(Of <(T>)>) 对象的情况下，返回包含 DataRow 对象副本的 DataTable。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function CopyToDataTable(Of T As DataRow) ( _
    source As IEnumerable(Of T) _
) As DataTable
public static DataTable CopyToDataTable<T>(
    this IEnumerable<T> source
)
where T : DataRow

[ExtensionAttribute]
public:
generic<typename T>
where T : DataRow
static DataTable^ CopyToDataTable(
    IEnumerable<T>^ source
)
static member CopyToDataTable :
        source:IEnumerable<'T> -> DataTable  when 'T : DataRow

类型参数

T

源序列中的对象的类型，通常为 DataRow。

参数

source
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
T
>
)
>
)

源 IEnumerable<(Of <(T>)>) 序列。

返回值

类型： System.Data DataTable
一个 DataTable，其中包含作为 DataRow 对象的类型的输入序列。

使用说明

在 Visual Basic 和 C# 中，可以在 T 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
ArgumentNullException | 源 IEnumerable<(Of <(T>)>) 序列为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），因此无法创建新表。
InvalidOperationException | 源序列中的 DataRow 的状态为 Deleted。 源序列不包含任何 DataRow 对象。 源序列中的 DataRow 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

输入参数 source 的参数 T 只能为 DataRow 类型或从 DataRow 派生的类型。

输入序列可以是任何 IEnumerable<(Of <(T>)>) 源，不仅仅是查询或对 DataTable 进行的查询。请注意，如果源序列是查询，则调用此运算符会强制立即执行。枚举源序列还可能会引发异常。 输入序列可以是任何 IEnumerable<(Of <(T>)>) 源，不仅仅是查询或对 DataTable 进行的查询。请注意，如果源序列是查询，则调用此运算符会强制立即执行。枚举源序列还可能会引发异常。 输入序列可以是任何 IEnumerable<(Of <(T>)>) 源，不仅仅是查询或对 DataTable 进行的查询。请注意，如果源序列是查询，则调用此运算符会强制立即执行。枚举源序列还可能会引发异常。

目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。

当在源 DataRow 中找到 null 引用或值为 null 的可以为 null 的类型时，此方法会将目标 DataTable 中的值替换为 Value 的值。

此方法返回的已生成表具有默认表名。如果要命名 DataTable、将它附加到 DataSet 或执行任何其他 DataTable 特定操作，则必须在创建并返回表后执行此操作。 此方法返回的已生成表具有默认表名。如果要命名 DataTable、将它附加到 DataSet 或执行任何其他 DataTable 特定操作，则必须在创建并返回表后执行此操作。

有关更多信息，请参见通过查询创建数据表 (LINQ to DataSet)。

下面的示例查询 SalesOrderHeader 表中 2001 年 8 月 8 日以后的订单，并根据该查询使用 CopyToDataTable 方法创建 DataTable。然后 DataTable 会绑定到 BindingSource，后者可充当 DataGridView 的代理。 下面的示例查询 SalesOrderHeader 表中 2001 年 8 月 8 日以后的订单，并根据该查询使用 CopyToDataTable 方法创建 DataTable。然后 DataTable 会绑定到 BindingSource，后者可充当 DataGridView 的代理。

' Bind the System.Windows.Forms.DataGridView object
' to the System.Windows.Forms.BindingSource object.
dataGridView.DataSource = bindingSource

' Fill the DataSet.
Dim ds As New DataSet()
ds.Locale = CultureInfo.InvariantCulture
' See the FillDataSet method in the Loading Data Into a DataSet topic.
FillDataSet(ds)

Dim orders As DataTable = ds.Tables("SalesOrderHeader")

' Query the SalesOrderHeader table for orders placed
'  after August 8, 2001.
Dim query = _
    From order In orders.AsEnumerable() _
    Where order.Field(Of DateTime)("OrderDate") > New DateTime(2001, 8, 1) _
    Select order

' Create a table from the query.
Dim boundTable As DataTable = query.CopyToDataTable()

' Bind the table to a System.Windows.Forms.BindingSource object,
' which acts as a proxy for a System.Windows.Forms.DataGridView object.
bindingSource.DataSource = boundTable

// Bind the System.Windows.Forms.DataGridView object
// to the System.Windows.Forms.BindingSource object.
dataGridView.DataSource = bindingSource;

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable orders = ds.Tables["SalesOrderHeader"];

// Query the SalesOrderHeader table for orders placed
// after August 8, 2001.
IEnumerable<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)
    select order;

// Create a table from the query.
DataTable boundTable = query.CopyToDataTable<DataRow>();

// Bind the table to a System.Windows.Forms.BindingSource object,
// which acts as a proxy for a System.Windows.Forms.DataGridView object.
bindingSource.DataSource = boundTable;

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataTableExtensions 类
DataTableExtensions 成员
CopyToDataTable 重载
System.Data 命名空间


DataTableExtensions ..::.CopyToDataTable <(Of <(T >)>) 方法 (IEnumerable <(Of <(T >)>), DataTable, LoadOption)

DataTableExtensions
.
.
::
.
CopyToDataTable
<
(Of
<
(
T
>
)
>
)
方法 (IEnumerable
<
(Of
<
(
T
>
)
>
)
, DataTable, LoadOption)
DataTableExtensions 类

在给定其泛型参数 T 为 DataRow 的输入 IEnumerable<(Of <(T>)>) 对象的情况下，将 DataRow 对象复制到指定的 DataTable。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Sub CopyToDataTable(Of T As DataRow) ( _
    source As IEnumerable(Of T), _
    table As DataTable, _
    options As LoadOption _
)
public static void CopyToDataTable<T>(
    this IEnumerable<T> source,
    DataTable table,
    LoadOption options
)
where T : DataRow

[ExtensionAttribute]
public:
generic<typename T>
where T : DataRow
static void CopyToDataTable(
    IEnumerable<T>^ source,
    DataTable^ table,
    LoadOption options
)
static member CopyToDataTable :
        source:IEnumerable<'T> *
        table:DataTable *
        options:LoadOption -> unit  when 'T : DataRow

类型参数

T

源序列中的对象的类型，通常为 DataRow。

参数

source
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
T
>
)
>
)

源 IEnumerable<(Of <(T>)>) 序列。
table
类型： System.Data DataTable
目标 DataTable。
options
类型： System.Data LoadOption
LoadOption 枚举，用于指定 DataTable 加载选项。

使用说明

在 Visual Basic 和 C# 中，可以在 T 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
ArgumentException | 复制的 DataRow 对象不符合目标 DataTable 的架构。
ArgumentNullException | 源 IEnumerable<(Of <(T>)>) 序列为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者目标 DataTable 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 源序列中的 DataRow 的状态为 Deleted。 源序列不包含任何 DataRow 对象。 源序列中的 DataRow 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

输入参数 source 的参数 T 只能为 DataRow 类型或从 DataRow 派生的类型。

输入序列可以是任何 IEnumerable<(Of <(T>)>) 源，不仅仅是对 DataTable 进行的查询。请注意，如果源序列是查询，则调用此运算符会强制立即执行。枚举源序列还可能会引发异常。 输入序列可以是任何 IEnumerable<(Of <(T>)>) 源，不仅仅是对 DataTable 进行的查询。请注意，如果源序列是查询，则调用此运算符会强制立即执行。枚举源序列还可能会引发异常。 输入序列可以是任何 IEnumerable<(Of <(T>)>) 源，不仅仅是对 DataTable 进行的查询。请注意，如果源序列是查询，则调用此运算符会强制立即执行。枚举源序列还可能会引发异常。

目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。

当在源 DataRow 中找到 null 引用或值为 null 的可以为 null 的类型时，此方法会将目标 DataTable 中的值替换为 Value 的值。

此方法返回的已生成表具有默认表名。如果要命名 DataTable、将它附加到 DataSet 或执行任何其他 DataTable 特定操作，则必须在创建并返回表后执行此操作。 此方法返回的已生成表具有默认表名。如果要命名 DataTable、将它附加到 DataSet 或执行任何其他 DataTable 特定操作，则必须在创建并返回表后执行此操作。

有关更多信息，请参见通过查询创建数据表 (LINQ to DataSet)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataTableExtensions 类
DataTableExtensions 成员
CopyToDataTable 重载
System.Data 命名空间


DataTableExtensions ..::.CopyToDataTable <(Of <(T >)>) 方法 (IEnumerable <(Of <(T >)>), DataTable, LoadOption, FillErrorEventHandler)

DataTableExtensions
.
.
::
.
CopyToDataTable
<
(Of
<
(
T
>
)
>
)
方法 (IEnumerable
<
(Of
<
(
T
>
)
>
)
, DataTable, LoadOption, FillErrorEventHandler)
DataTableExtensions 类

在给定其泛型参数 T 为 DataRow 的输入 IEnumerable<(Of <(T>)>) 对象的情况下，将 DataRow 对象复制到指定的 DataTable。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Sub CopyToDataTable(Of T As DataRow) ( _
    source As IEnumerable(Of T), _
    table As DataTable, _
    options As LoadOption, _
    errorHandler As FillErrorEventHandler _
)
public static void CopyToDataTable<T>(
    this IEnumerable<T> source,
    DataTable table,
    LoadOption options,
    FillErrorEventHandler errorHandler
)
where T : DataRow

[ExtensionAttribute]
public:
generic<typename T>
where T : DataRow
static void CopyToDataTable(
    IEnumerable<T>^ source,
    DataTable^ table,
    LoadOption options,
    FillErrorEventHandler^ errorHandler
)
static member CopyToDataTable :
        source:IEnumerable<'T> *
        table:DataTable *
        options:LoadOption *
        errorHandler:FillErrorEventHandler -> unit  when 'T : DataRow

类型参数

T

源序列中的对象的类型，通常为 DataRow。

参数

source
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
T
>
)
>
)

源 IEnumerable<(Of <(T>)>) 序列。
table
类型： System.Data DataTable
目标 DataTable。
options
类型： System.Data LoadOption
LoadOption 枚举，用于指定 DataTable 加载选项。
errorHandler
类型： System.Data FillErrorEventHandler
FillErrorEventHandler 委托，表示将处理错误的方法。

使用说明

在 Visual Basic 和 C# 中，可以在 T 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
ArgumentException | 复制的 DataRow 对象不符合目标 DataTable 的架构。
ArgumentNullException | 源 IEnumerable<(Of <(T>)>) 序列为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或者目标 DataTable 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 源序列中的 DataRow 的状态为 Deleted。 - 或 - 源序列不包含任何 DataRow 对象。 - 或 - 源序列中的 DataRow 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

输入参数 source 的参数 T 只能为 DataRow 类型或从 DataRow 派生的类型。

输入序列可以是任何 IEnumerable<(Of <(T>)>) 源，不仅仅是对 DataTable 进行的查询。请注意，如果源序列是查询，则调用此运算符会强制立即执行。枚举源序列还可能会引发异常。 输入序列可以是任何 IEnumerable<(Of <(T>)>) 源，不仅仅是对 DataTable 进行的查询。请注意，如果源序列是查询，则调用此运算符会强制立即执行。枚举源序列还可能会引发异常。 输入序列可以是任何 IEnumerable<(Of <(T>)>) 源，不仅仅是对 DataTable 进行的查询。请注意，如果源序列是查询，则调用此运算符会强制立即执行。枚举源序列还可能会引发异常。

目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。 目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据提取自 DataRow 元数据，表值提取自 DataRow 的列值。对于类型化 DataTable，不保留类型。传输数据和架构，但所产生的输出表行不会是类型化 DataRow 类型。在从源 DataRow 复制到返回的 DataTable 时，不会保留 RowState 和 RowError 属性。

当在源 DataRow 中找到 null 引用或值为 null 的可以为 null 的类型时，此方法会将目标 DataTable 中的值替换为 Value 的值。

此方法返回的已生成表具有默认表名。如果要命名 DataTable、将它附加到 DataSet 或执行任何其他 DataTable 特定操作，则必须在创建并返回表后执行此操作。 此方法返回的已生成表具有默认表名。如果要命名 DataTable、将它附加到 DataSet 或执行任何其他 DataTable 特定操作，则必须在创建并返回表后执行此操作。

如果在将数据行复制到目标表时引发了异常（如约束异常），则会调用 errorHandler 委托。会向 errorHandler 委托传递具有以下值的 FillErrorEventArgs： 如果在将数据行复制到目标表时引发了异常（如约束异常），则会调用 errorHandler 委托。会向 errorHandler 委托传递具有以下值的 FillErrorEventArgs：

  • Values 属性设置为源数据的副本。

  • DataTable 属性设置为目标 DataTable。

  • Errors 属性设置为捕获的异常。

在委托调用返回后读取 Continue 属性。如果 Continue 属性为 true，则继续枚举源序列并将其加载到数据表中。如果 Continue 属性为 false，则从 CopyToDataTable 方法引发原始异常。 在委托调用返回后读取 Continue 属性。如果 Continue 属性为 true，则继续枚举源序列并将其加载到数据表中。如果 Continue 属性为 false，则从 CopyToDataTable 方法引发原始异常。 在委托调用返回后读取 Continue 属性。如果 Continue 属性为 true，则继续枚举源序列并将其加载到数据表中。如果 Continue 属性为 false，则从 CopyToDataTable 方法引发原始异常。

有关更多信息，请参见通过查询创建数据表 (LINQ to DataSet)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

DataTableExtensions 类
DataTableExtensions 成员
CopyToDataTable 重载
System.Data 命名空间


DataTableNewRowEventArgs 类

DataTableNewRowEventArgs 类
成员

为 NewRow 方法提供数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DataTableNewRowEventArgs _
    Inherits EventArgs
public sealed class DataTableNewRowEventArgs : EventArgs
public ref class DataTableNewRowEventArgs sealed : public EventArgs
[<SealedAttribute>]
type DataTableNewRowEventArgs =
    class
        inherit EventArgs
    end

System.Data System.Data..::.DataTableNewRowEventArgsDataTableNewRowEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableNewRowEventArgs 成员
System.Data 命名空间


DataTableNewRowEventArgs 成员

DataTableNewRowEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableNewRowEventArgs 类

为 NewRow 方法提供数据。

DataTableNewRowEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataTableNewRowEventArgs 类
System.Data 命名空间


DataTableNewRowEventArgs 构造函数

DataTableNewRowEventArgs 构造函数
DataTableNewRowEventArgs 类

初始化 DataTableNewRowEventArgs 的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    dataRow As DataRow _
)
public DataTableNewRowEventArgs(
    DataRow dataRow
)
public:
DataTableNewRowEventArgs(
    DataRow^ dataRow
)
new :
        dataRow:DataRow -> DataTableNewRowEventArgs

参数

dataRow
类型： System.Data DataRow
正被添加的 DataRow。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableNewRowEventArgs 类
DataTableNewRowEventArgs 成员
System.Data 命名空间


DataTableNewRowEventArgs 方法

DataTableNewRowEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableNewRowEventArgs 类

DataTableNewRowEventArgs 类型公开以下成员。

名称 说明
页首

参考

DataTableNewRowEventArgs 类
System.Data 命名空间


DataTableNewRowEventArgs 属性

DataTableNewRowEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableNewRowEventArgs 类

DataTableNewRowEventArgs 类型公开以下成员。

名称 说明
页首

参考

DataTableNewRowEventArgs 类
System.Data 命名空间


DataTableNewRowEventArgs ..::.Row 属性

DataTableNewRowEventArgs
.
.
::
.
Row 属性
DataTableNewRowEventArgs 类

获取正被添加的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Row As DataRow
    Get
public DataRow Row { get; }
public:
property DataRow^ Row {
    DataRow^ get ();
}
member Row : DataRow

属性值

类型： System.Data DataRow
正被添加的 DataRow。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableNewRowEventArgs 类
DataTableNewRowEventArgs 成员
System.Data 命名空间


DataTableNewRowEventHandler 委托

DataTableNewRowEventHandler 委托

表示处理 NewRow 方法的方法。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Delegate Sub DataTableNewRowEventHandler ( _
    sender As Object, _
    e As DataTableNewRowEventArgs _
)
public delegate void DataTableNewRowEventHandler(
    Object sender,
    DataTableNewRowEventArgs e
)
public delegate void DataTableNewRowEventHandler(
    Object^ sender,
    DataTableNewRowEventArgs^ e
)
type DataTableNewRowEventHandler =
    delegate of
        sender:Object *
        e:DataTableNewRowEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.Data DataTableNewRowEventArgs
包含事件数据的 DataTableNewRowEventArgs。

当创建 DataTableNewRowEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件发生时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataTableNewRowEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件发生时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataTableNewRowEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件发生时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。 当创建 DataTableNewRowEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。每当事件发生时就调用事件处理程序，直到移除该委托。有关委托的更多信息，请参见 事件和委托。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


DataTableReader 类

DataTableReader 类
成员

DataTableReader 以一个或多个只读、只进结果集的形式获取一个或多个 DataTable 对象的内容。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DataTableReader _
    Inherits DbDataReader
public sealed class DataTableReader : DbDataReader
public ref class DataTableReader sealed : public DbDataReader
[<SealedAttribute>]
type DataTableReader =
    class
        inherit DbDataReader
    end

除了 DataTableReader 能循环访问 DataTable 中的行之外，DataTableReader 与任何其他数据读取器（如 SqlDataReader）的工作方式非常类似。也就是说，它能循环访问缓存中的行。DataTableReader 活动时，可对缓存数据进行修改，并且读取器自动保持其位置。 除了 DataTableReader 能循环访问 DataTable 中的行之外，DataTableReader 与任何其他数据读取器（如 SqlDataReader）的工作方式非常类似。也就是说，它能循环访问缓存中的行。DataTableReader 活动时，可对缓存数据进行修改，并且读取器自动保持其位置。 除了 DataTableReader 能循环访问 DataTable 中的行之外，DataTableReader 与任何其他数据读取器（如 SqlDataReader）的工作方式非常类似。也就是说，它能循环访问缓存中的行。DataTableReader 活动时，可对缓存数据进行修改，并且读取器自动保持其位置。

从 DataTable 创建 DataTableReader 时，得到的 DataTableReader 对象包含一个结果集，其中的数据除标记为已删除的任何行之外与从中创建它的 DataTable 的数据相同。列出现的顺序与在原始 DataTable 中的顺序相同。返回结果的结构在架构和数据方面与原始的 DataTable 相同。如果 DataSet 包含不止一个表，则通过调用 DataSet 对象的 GetDataReader()()() 方法创建的 DataTableReader 将包含多个结果集。结果的顺序与 DataSet 对象的 DataTableCollection 中的 DataTable 对象的顺序相同。 从 DataTable 创建 DataTableReader 时，得到的 DataTableReader 对象包含一个结果集，其中的数据除标记为已删除的任何行之外与从中创建它的 DataTable 的数据相同。列出现的顺序与在原始 DataTable 中的顺序相同。返回结果的结构在架构和数据方面与原始的 DataTable 相同。如果 DataSet 包含不止一个表，则通过调用 DataSet 对象的 GetDataReader()()() 方法创建的 DataTableReader 将包含多个结果集。结果的顺序与 DataSet 对象的 DataTableCollection 中的 DataTable 对象的顺序相同。 从 DataTable 创建 DataTableReader 时，得到的 DataTableReader 对象包含一个结果集，其中的数据除标记为已删除的任何行之外与从中创建它的 DataTable 的数据相同。列出现的顺序与在原始 DataTable 中的顺序相同。返回结果的结构在架构和数据方面与原始的 DataTable 相同。如果 DataSet 包含不止一个表，则通过调用 DataSet 对象的 GetDataReader()()() 方法创建的 DataTableReader 将包含多个结果集。结果的顺序与 DataSet 对象的 DataTableCollection 中的 DataTable 对象的顺序相同。 从 DataTable 创建 DataTableReader 时，得到的 DataTableReader 对象包含一个结果集，其中的数据除标记为已删除的任何行之外与从中创建它的 DataTable 的数据相同。列出现的顺序与在原始 DataTable 中的顺序相同。返回结果的结构在架构和数据方面与原始的 DataTable 相同。如果 DataSet 包含不止一个表，则通过调用 DataSet 对象的 GetDataReader()()() 方法创建的 DataTableReader 将包含多个结果集。结果的顺序与 DataSet 对象的 DataTableCollection 中的 DataTable 对象的顺序相同。 从 DataTable 创建 DataTableReader 时，得到的 DataTableReader 对象包含一个结果集，其中的数据除标记为已删除的任何行之外与从中创建它的 DataTable 的数据相同。列出现的顺序与在原始 DataTable 中的顺序相同。返回结果的结构在架构和数据方面与原始的 DataTable 相同。如果 DataSet 包含不止一个表，则通过调用 DataSet 对象的 GetDataReader()()() 方法创建的 DataTableReader 将包含多个结果集。结果的顺序与 DataSet 对象的 DataTableCollection 中的 DataTable 对象的顺序相同。

返回的结果集仅包含每个 DataRow 的当前版本；跳过标记为删除的行。

DataTableReader 提供了一个稳定的迭代器；即，如果在迭代期间修改了基础集合的大小，DataTableReader 的内容也不会失效。例如，如果在迭代期间删除或移除了 Rows 集合中的一个或多个行，则将适当保持 DataTableReader 中的当前位置，并且不会使迭代器失效。 DataTableReader 提供了一个稳定的迭代器；即，如果在迭代期间修改了基础集合的大小，DataTableReader 的内容也不会失效。例如，如果在迭代期间删除或移除了 Rows 集合中的一个或多个行，则将适当保持 DataTableReader 中的当前位置，并且不会使迭代器失效。

System.Data System.Data..::.DataTableReaderDataTableReader
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 成员
System.Data 命名空间


DataTableReader 成员

DataTableReader 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableReader 类

DataTableReader 以一个或多个只读、只进结果集的形式获取一个或多个 DataTable 对象的内容。

DataTableReader 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataTableReader 类
System.Data 命名空间


DataTableReader 构造函数

DataTableReader 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableReader 类

初始化 DataTableReader 类的新实例。

名称 说明
页首

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader 构造函数 (DataTable)

DataTableReader 构造函数 (DataTable)
DataTableReader 类

通过使用提供的 DataTable 中的数据初始化 DataTableReader 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    dataTable As DataTable _
)
public DataTableReader(
    DataTable dataTable
)
public:
DataTableReader(
    DataTable^ dataTable
)
new :
        dataTable:DataTable -> DataTableReader

参数

dataTable
类型： System.Data DataTable
新的 DataTableReader 从中获取其结果集的 DataTable。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
DataTableReader 重载
System.Data 命名空间


DataTableReader 构造函数 ( array<DataTable >[]()[])

DataTableReader 构造函数 (
array<
DataTable
>
[]
()
[]
)
DataTableReader 类

使用提供的 DataTable 对象的数组初始化 DataTableReader 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    dataTables As DataTable() _
)
public DataTableReader(
    DataTable[] dataTables
)
public:
DataTableReader(
    array<DataTable^>^ dataTables
)
new :
        dataTables:DataTable[] -> DataTableReader

参数

dataTables
类型：
array<
System.Data DataTable
>
[]
()
[]

为新的 DataTableReader 对象提供结果的 DataTable 对象数组。

如果必须根据特定 Dataset 中的所有表或它们的子集创建一个 DataTableReader，可以调用 DataSet 的 GetDataReader()()() 方法。如果要根据一组不相关的 DataTable 实例创建一个新的 DataTableReader 实例，可使用此构造函数。如果 DataTables 在其源 DataSet 中的顺序不能满足您的要求，则可以利用此构造函数在 DataTableReader 中重新安排其顺序。 如果必须根据特定 Dataset 中的所有表或它们的子集创建一个 DataTableReader，可以调用 DataSet 的 GetDataReader()()() 方法。如果要根据一组不相关的 DataTable 实例创建一个新的 DataTableReader 实例，可使用此构造函数。如果 DataTables 在其源 DataSet 中的顺序不能满足您的要求，则可以利用此构造函数在 DataTableReader 中重新安排其顺序。 如果必须根据特定 Dataset 中的所有表或它们的子集创建一个 DataTableReader，可以调用 DataSet 的 GetDataReader()()() 方法。如果要根据一组不相关的 DataTable 实例创建一个新的 DataTableReader 实例，可使用此构造函数。如果 DataTables 在其源 DataSet 中的顺序不能满足您的要求，则可以利用此构造函数在 DataTableReader 中重新安排其顺序。

在下面的示例中，TestConstructor 方法创建两个 DataTable 实例。为了演示 DataTableReader 类的这个构造函数，此示例创建一个新的 DataTableReader，它以包含两个 DataTables 的数组为基础，并执行简单的操作，将前几列中的内容打印到控制台窗口。若要测试此应用程序，请创建一个新的控制台应用程序，并将代码示例粘贴到新建的文件。 在下面的示例中，TestConstructor 方法创建两个 DataTable 实例。为了演示 DataTableReader 类的这个构造函数，此示例创建一个新的 DataTableReader，它以包含两个 DataTables 的数组为基础，并执行简单的操作，将前几列中的内容打印到控制台窗口。若要测试此应用程序，请创建一个新的控制台应用程序，并将代码示例粘贴到新建的文件。 在下面的示例中，TestConstructor 方法创建两个 DataTable 实例。为了演示 DataTableReader 类的这个构造函数，此示例创建一个新的 DataTableReader，它以包含两个 DataTables 的数组为基础，并执行简单的操作，将前几列中的内容打印到控制台窗口。若要测试此应用程序，请创建一个新的控制台应用程序，并将代码示例粘贴到新建的文件。

Private Sub TestConstructor()
   ' Create two data adapters, one for each of the two
   ' DataTables to be filled.
   Dim customerDataTable As DataTable = GetCustomers()
   Dim productDataTable As DataTable = GetProducts()

   ' Create the new DataTableReader.
   Using reader As New DataTableReader( _
      New DataTable() {customerDataTable, productDataTable})

      ' Print the contents of each of the result sets.
      Do
         PrintColumns(reader)
      Loop While reader.NextResult()
   End Using

   Console.WriteLine("Press Enter to finish.")
   Console.ReadLine()

End Sub

Private Function GetCustomers() As DataTable
   ' Create sample Customers table, in order
   ' to demonstrate the behavior of the DataTableReader.
   Dim table As New DataTable

   ' Create two columns, ID and Name.
   Dim idColumn As DataColumn = table.Columns.Add("ID", _
     GetType(Integer))
   table.Columns.Add("Name", GetType(String))

   ' Set the ID column as the primary key column.
   table.PrimaryKey = New DataColumn() {idColumn}

   table.Rows.Add(New Object() {1, "Mary"})
   table.Rows.Add(New Object() {2, "Andy"})
   table.Rows.Add(New Object() {3, "Peter"})
   table.Rows.Add(New Object() {4, "Russ"})
   Return table
End Function

Private Function GetProducts() As DataTable
   ' Create sample Products table, in order
   ' to demonstrate the behavior of the DataTableReader.
   Dim table As New DataTable

   ' Create two columns, ID and Name.
   Dim idColumn As DataColumn = table.Columns.Add("ID", _
     GetType(Integer))
   table.Columns.Add("Name", GetType(String))

   ' Set the ID column as the primary key column.
   table.PrimaryKey = New DataColumn() {idColumn}

   table.Rows.Add(New Object() {1, "Wireless Network Card"})
   table.Rows.Add(New Object() {2, "Hard Drive"})
   table.Rows.Add(New Object() {3, "Monitor"})
   table.Rows.Add(New Object() {4, "CPU"})
   Return table
End Function

Private Sub PrintColumns( _
   ByVal reader As DataTableReader)

   ' Loop through all the rows in the DataTableReader.
   Do While reader.Read()
      For i As Integer = 0 To reader.FieldCount - 1
         Console.Write(reader(i).ToString() & " ")
      Next
      Console.WriteLine()
   Loop
End Sub

private static void TestConstructor()
{
    // Create two data adapters, one for each of the two
    // DataTables to be filled.
    DataTable customerDataTable = GetCustomers();
    DataTable productDataTable = GetProducts();

    // Create the new DataTableReader.
    using (DataTableReader reader = new DataTableReader(
               new DataTable[] { customerDataTable, productDataTable }))
    {
        // Print the contents of each of the result sets.
        do
        {
            PrintColumns(reader);
        } while (reader.NextResult());
    }

    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string ));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    return table;
}

private static DataTable GetProducts()
{
    // Create sample Products table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string ));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Wireless Network Card" });
    table.Rows.Add(new object[] { 2, "Hard Drive" });
    table.Rows.Add(new object[] { 3, "Monitor" });
    table.Rows.Add(new object[] { 4, "CPU" });
    return table;
}

private static void PrintColumns(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write(reader[i] + " ");
        }
        Console.WriteLine();
    }
}

控制台窗口显示下列结果：

1 Mary
2 Andy
3 Peter
4 Russ
1 Wireless Network Card
2 Hard Drive
3 Monitor
4 CPU

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
DataTableReader 重载
System.Data 命名空间


DataTableReader 方法

DataTableReader 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableReader 类

DataTableReader 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataTableReader 类
System.Data 命名空间


DataTableReader ..::.Close 方法

DataTableReader
.
.
::
.
Close 方法
DataTableReader 类

关闭当前的 DataTableReader。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Sub Close
public override void Close()
public:
virtual void Close() override
abstract Close : unit -> unit
override Close : unit -> unit

实现

对关闭的 DataTableReader 对象调用 Close() 不会引发错误。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.Dispose 方法

DataTableReader
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableReader 类

释放 DbDataReader 使用的资源并调用 Close。

名称 说明
页首

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetBoolean 方法

DataTableReader
.
.
::
.
GetBoolean 方法
DataTableReader 类

获取指定列的 Boolean 形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetBoolean ( _
    ordinal As Integer _
) As Boolean
public override bool GetBoolean(
    int ordinal
)
public:
virtual bool GetBoolean(
    int ordinal
) override
abstract GetBoolean :
        ordinal:int -> bool
override GetBoolean :
        ordinal:int -> bool

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Boolean
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含 Boolean。

未执行任何转换；因此检索的数据必须已经是布尔型或可强制转换为布尔型，否则会生成异常。

在调用此方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则该示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则该示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则该示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetBoolean(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetBoolean(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetByte 方法

DataTableReader
.
.
::
.
GetByte 方法
DataTableReader 类

获取指定列的字节形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetByte ( _
    ordinal As Integer _
) As Byte
public override byte GetByte(
    int ordinal
)
public:
virtual unsigned char GetByte(
    int ordinal
) override
abstract GetByte :
        ordinal:int -> byte
override GetByte :
        ordinal:int -> byte

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Byte
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含字节。

未执行任何转换；因此检索的数据必须已经是字节或可强制转换为字节。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetByte(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetByte(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetBytes 方法

DataTableReader
.
.
::
.
GetBytes 方法
DataTableReader 类

将从指定列偏移量开始的字节流作为从指定缓冲区偏移量开始的数组读入缓冲区中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetBytes ( _
    ordinal As Integer, _
    dataIndex As Long, _
    buffer As Byte(), _
    bufferIndex As Integer, _
    length As Integer _
) As Long
public override long GetBytes(
    int ordinal,
    long dataIndex,
    byte[] buffer,
    int bufferIndex,
    int length
)
public:
virtual long long GetBytes(
    int ordinal,
    long long dataIndex,
    array<unsigned char>^ buffer,
    int bufferIndex,
    int length
) override
abstract GetBytes :
        ordinal:int *
        dataIndex:int64 *
        buffer:byte[] *
        bufferIndex:int *
        length:int -> int64
override GetBytes :
        ordinal:int *
        dataIndex:int64 *
        buffer:byte[] *
        bufferIndex:int *
        length:int -> int64

参数

ordinal
类型： System Int32
从零开始的列序号。
dataIndex
类型： System Int64
字段中的索引，从该索引位置开始读取操作。
buffer
类型：
array<
System Byte
>
[]
()
[]

要将字节流读入的缓冲区。
bufferIndex
类型： System Int32
缓冲区中的索引，从该索引位置开始放置数据。
length
类型： System Int32
要复制到缓冲区中的最大长度。

返回值

类型： System Int64
读取的实际字节数。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含字节数组。

GetBytes 返回字段中的可用字节数。在大多数情况下，这是字段的准确长度。但是，如果 GetBytes 已用于从字段中获取字节，则所返回的数字可能会小于该字段的真实长度。例如，如果 DataTableReader 正将一个大型数据结构读入缓冲区中，则可能出现这种情况。 GetBytes 返回字段中的可用字节数。在大多数情况下，这是字段的准确长度。但是，如果 GetBytes 已用于从字段中获取字节，则所返回的数字可能会小于该字段的真实长度。例如，如果 DataTableReader 正将一个大型数据结构读入缓冲区中，则可能出现这种情况。 GetBytes 返回字段中的可用字节数。在大多数情况下，这是字段的准确长度。但是，如果 GetBytes 已用于从字段中获取字节，则所返回的数字可能会小于该字段的真实长度。例如，如果 DataTableReader 正将一个大型数据结构读入缓冲区中，则可能出现这种情况。 GetBytes 返回字段中的可用字节数。在大多数情况下，这是字段的准确长度。但是，如果 GetBytes 已用于从字段中获取字节，则所返回的数字可能会小于该字段的真实长度。例如，如果 DataTableReader 正将一个大型数据结构读入缓冲区中，则可能出现这种情况。

如果传递为 null （Visual Basic 中为 Nothing）的缓冲区，则 GetBytes 以字节为单位返回整个字段的长度，而不是基于缓冲区偏移量参数的剩余大小。

未执行任何转换；因此检索的数据必须已经是字节数组或可强制转换为字节数组。

下面的示例根据 AdventureWorks 示例数据库中的数据创建一个 DataTableReader，并将检索的每个图像保存到 C:\ 文件夹中的单独文件中。为了测试此应用程序，请创建一个新的控制台应用程序，引用 System.Drawing.dll 程序集，然后将代码示例粘贴到新创建的文件中。 下面的示例根据 AdventureWorks 示例数据库中的数据创建一个 DataTableReader，并将检索的每个图像保存到 C:\ 文件夹中的单独文件中。为了测试此应用程序，请创建一个新的控制台应用程序，引用 System.Drawing.dll 程序集，然后将代码示例粘贴到新创建的文件中。

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Drawing
Imports System.IO
Imports System.Drawing.Imaging

Module Module1
   Sub Main()
      TestGetBytes()
   End Sub
   Private Sub TestGetBytes()
         ' Set up the data adapter, using information from
      ' the AdventureWorks sample database.
      Dim photoAdapter As SqlDataAdapter = _
         SetupDataAdapter("SELECT ThumbnailPhotoFileName, " & _
         "ThumbNailPhoto FROM Production.ProductPhoto")

      ' Fill the DataTable.
      Dim photoDataTable As New DataTable
      photoAdapter.Fill(photoDataTable)

      ' Create the DataTableReader.
      Using reader As DataTableReader = New DataTableReader(photoDataTable)

         Dim buffer() As Byte
         Dim productName As String
         While reader.Read()
            Try
               ' Get the name of the file.
               productName = reader.GetString(0)

               ' Get the length of the field. Pass Nothing
               ' in the buffer parameter to retrieve the length
               ' of the data field. Ensure that the field isn't
               ' null before continuing.
               If reader.IsDBNull(1) Then
                  Console.WriteLine( _
                     productName & " is unavailable.")
               Else
                  ' Retrieve the length of the necessary byte array.
                  Dim len As Long = reader.GetBytes(1, 0, Nothing, 0, 0)
                  ' Create a buffer to hold the bytes, and then
                  ' read the bytes from the DataTableReader.
                  ReDim buffer(CInt(len))
                  reader.GetBytes(1, 0, buffer, 0, CInt(len))

                  ' Create a new Bitmap object, passing the array
                  ' of bytes to the constructor of a MemoryStream.
                  Using productImage As New Bitmap(New MemoryStream(buffer))
                     Dim fileName As String = "C:\" & productName
                     ' Save in gif format.
                     productImage.Save( _
                      fileName, ImageFormat.Gif)
                     Console.WriteLine("Successfully created " & _
                        fileName)
                  End Using
               End If
            Catch ex As Exception
               Console.WriteLine(productName & ": " & _
                  ex.Message)
            End Try
         End While
      End Using
      Console.WriteLine("Press Enter to finish.")
      Console.ReadLine()
   End Sub

   Private Function SetupDataAdapter( _
      ByVal sqlString As String) As SqlDataAdapter
      ' Assuming all the default settings, create a SqlDataAdapter
      ' working with the AdventureWorks sample database that's
      ' available with SQL Server.
      Dim connectionString As String = _
         "Data Source=(local);" & _
         "Initial Catalog=AdventureWorks;" & _
         "Integrated Security=true"
      Return New SqlDataAdapter(sqlString, connectionString)
   End Function
End Module

using System;
using System.Data.SqlClient;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

class Class1
{
    [STAThread]
    static void Main(string[] args)
    {
        TestGetBytes();
    }

    static private void TestGetBytes()
    {
        // Set up the data adapter, using information from
        // the AdventureWorks sample database.
        SqlDataAdapter photoAdapter = SetupDataAdapter(
            "SELECT ThumbnailPhotoFileName, ThumbNailPhoto " +
            "FROM Production.ProductPhoto");
        // Fill the DataTable.
        DataTable photoDataTable = new DataTable();
        photoAdapter.Fill(photoDataTable);

        using (DataTableReader reader = new DataTableReader(photoDataTable))
        {
            while (reader.Read())
            {
                String productName = null;
                try
                {
                    // Get the name of the file.
                    productName = reader.GetString(0);
                    // Get the length of the field. Pass null
                    // in the buffer parameter to retrieve the length
                    // of the data field. Ensure that the field isn't
                    // null before continuing.
                    if (reader.IsDBNull(1))
                    {
                        Console.WriteLine(productName + " is unavailable.");
                    }
                    else
                    {
                        long len = reader.GetBytes(1, 0, null, 0, 0);
                        // Create a buffer to hold the bytes, and then
                        // read the bytes from the DataTableReader.
                        Byte[] buffer = new Byte[len];
                        reader.GetBytes(1, 0, buffer, 0, (int)len);
                        // Create a new Bitmap object, passing the array
                        // of bytes to the constructor of a MemoryStream.
                        using (Bitmap productImage = new
                                   Bitmap(new MemoryStream(buffer)))
                        {
                            String fileName = "C:\\" + productName;
                            // Save in gif format.
                            productImage.Save(fileName, ImageFormat.Gif);
                            Console.WriteLine("Successfully created " + fileName);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(productName + ": " + ex.Message);
                }
            }
        }
        Console.WriteLine("Press Enter to finish.");
        Console.ReadLine();
    }

    static private SqlDataAdapter SetupDataAdapter(String sqlString)
    {
        // Assuming all the default settings, create a SqlDataAdapter
        // working with the AdventureWorks sample database that's
        // available with SQL Server.
        String connectionString =
            "Data Source=(local);Initial Catalog=AdventureWorks;" +
            "Integrated Security=true";
        return new SqlDataAdapter(sqlString, connectionString);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间
GetChars


DataTableReader ..::.GetChar 方法

DataTableReader
.
.
::
.
GetChar 方法
DataTableReader 类

获取指定列的字符形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetChar ( _
    ordinal As Integer _
) As Char
public override char GetChar(
    int ordinal
)
public:
virtual wchar_t GetChar(
    int ordinal
) override
abstract GetChar :
        ordinal:int -> char
override GetChar :
        ordinal:int -> char

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Char
列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的字段不包含字符。

未执行任何转换；因此检索的数据必须已经是字符或可强制转换为字符。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetChar(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

    private static void PrintColumn(DataTableReader reader)
    {
        // Loop through all the rows in the DataTableReader
        while (reader.Read())
        {
            if (reader.IsDBNull(2))
            {
                Console.Write("<NULL>");
            }
            else
            {
                try
                {
                    Console.Write(reader.GetChar(2));
                }
                catch (InvalidCastException)
                {
                    Console.Write("Invalid data type.");
                }
            }
            Console.WriteLine();
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetChars 方法

DataTableReader
.
.
::
.
GetChars 方法
DataTableReader 类

以字符数组的形式返回指定列的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetChars ( _
    ordinal As Integer, _
    dataIndex As Long, _
    buffer As Char(), _
    bufferIndex As Integer, _
    length As Integer _
) As Long
public override long GetChars(
    int ordinal,
    long dataIndex,
    char[] buffer,
    int bufferIndex,
    int length
)
public:
virtual long long GetChars(
    int ordinal,
    long long dataIndex,
    array<wchar_t>^ buffer,
    int bufferIndex,
    int length
) override
abstract GetChars :
        ordinal:int *
        dataIndex:int64 *
        buffer:char[] *
        bufferIndex:int *
        length:int -> int64
override GetChars :
        ordinal:int *
        dataIndex:int64 *
        buffer:char[] *
        bufferIndex:int *
        length:int -> int64

参数

ordinal
类型： System Int32
从零开始的列序号。
dataIndex
类型： System Int64
字段中的索引，从该索引位置开始读取操作。
buffer
类型：
array<
System Char
>
[]
()
[]

要将字节流读入的缓冲区。
bufferIndex
类型： System Int32
缓冲区中的索引，从该索引位置开始放置数据。
length
类型： System Int32
要复制到缓冲区中的最大长度。

返回值

类型： System Int64
读取的实际字符数。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含字符数组。

GetChars 返回字段中可用字符的数目。在大多数情况下，这是字段的准确长度。但是，如果 GetChars 已用于从字段中获取字符，则返回的数字可能会小于字段的真实长度。 GetChars 返回字段中可用字符的数目。在大多数情况下，这是字段的准确长度。但是，如果 GetChars 已用于从字段中获取字符，则返回的数字可能会小于字段的真实长度。 GetChars 返回字段中可用字符的数目。在大多数情况下，这是字段的准确长度。但是，如果 GetChars 已用于从字段中获取字符，则返回的数字可能会小于字段的真实长度。

读取的实际字符数可以小于请求的长度，如果已到达字段的结尾。如果传递的缓冲区为 Null（在 Visual Basic 中为 Nothing），则 GetChars 以字符为单位返回整个字段的长度，而不是根据缓冲区偏移量参数得出的剩余大小。 读取的实际字符数可以小于请求的长度，如果已到达字段的结尾。如果传递的缓冲区为 Null（在 Visual Basic 中为 Nothing），则 GetChars 以字符为单位返回整个字段的长度，而不是根据缓冲区偏移量参数得出的剩余大小。

未执行任何转换；因此要检索的数据必须已经是字符数组或可强制转换为字符数组。

下面的示例说明 GetChars 方法。应向 TestGetChars 方法传递由以下两列数据填充的 DataTableReader：第一列中为文件名，第二列中为字符数组。此外，TestGetChars 允许您指定缓冲区大小，当其从 DataTableReader 中的字符数组中读取数据时使用该缓冲区。TestGetChars 创建对应于 DataTableReader 中每一行数据的文件，使用 DataTableReader 的第一列中的所提供的数据作为文件名。 下面的示例说明 GetChars 方法。应向 TestGetChars 方法传递由以下两列数据填充的 DataTableReader：第一列中为文件名，第二列中为字符数组。此外，TestGetChars 允许您指定缓冲区大小，当其从 DataTableReader 中的字符数组中读取数据时使用该缓冲区。TestGetChars 创建对应于 DataTableReader 中每一行数据的文件，使用 DataTableReader 的第一列中的所提供的数据作为文件名。 下面的示例说明 GetChars 方法。应向 TestGetChars 方法传递由以下两列数据填充的 DataTableReader：第一列中为文件名，第二列中为字符数组。此外，TestGetChars 允许您指定缓冲区大小，当其从 DataTableReader 中的字符数组中读取数据时使用该缓冲区。TestGetChars 创建对应于 DataTableReader 中每一行数据的文件，使用 DataTableReader 的第一列中的所提供的数据作为文件名。 下面的示例说明 GetChars 方法。应向 TestGetChars 方法传递由以下两列数据填充的 DataTableReader：第一列中为文件名，第二列中为字符数组。此外，TestGetChars 允许您指定缓冲区大小，当其从 DataTableReader 中的字符数组中读取数据时使用该缓冲区。TestGetChars 创建对应于 DataTableReader 中每一行数据的文件，使用 DataTableReader 的第一列中的所提供的数据作为文件名。

此过程演示如何使用 GetChars 方法读取 DataTable 中作为字符数组存储的数据。任何其他类型的数据都会导致 GetChars 方法引发 InvalidCastException。 此过程演示如何使用 GetChars 方法读取 DataTable 中作为字符数组存储的数据。任何其他类型的数据都会导致 GetChars 方法引发 InvalidCastException。

Imports System
Imports System.Data
Imports System.IO

Module Module1

   Private Sub TestGetChars( _
      ByVal reader As DataTableReader, ByVal bufferSize As Integer)

      ' The filename is in column 0, and the contents are in column 1.
      Const FILENAME_COLUMN As Integer = 0
      Const DATA_COLUMN As Integer = 1

      Dim buffer() As Char
      Dim offset As Integer
      Dim charsRead As Integer
      Dim fileName As String
      Dim currentBufferSize As Integer

      While reader.Read
         ' Reinitialize the buffer size and the buffer itself.
         currentBufferSize = bufferSize
         ReDim buffer(bufferSize - 1)

         ' For each row, write the data to the specified file.

         ' First, verify that the FileName column isn't null.
         If Not reader.IsDBNull(FILENAME_COLUMN) Then
            ' Get the file name, and create a file with
            ' the supplied name.
            fileName = reader.GetString(FILENAME_COLUMN)

            ' Start at the beginning.
            offset = 0

            Using outputStream As New StreamWriter(fileName, False)
               Try

                  ' Loop through all the characters in the input field,
                  ' incrementing the offset for the next time. If this
                  ' pass through the loop reads characters, write them to
                  ' the output stream.
                  Do
                     charsRead = Cint(reader.GetChars(DATA_COLUMN, offset, _
                        buffer, 0, bufferSize))
                     If charsRead > 0 Then
                        outputStream.Write(buffer, 0, charsRead)
                        offset += charsRead
                     End If
                  Loop While charsRead > 0
               Catch ex As Exception
                  Console.WriteLine(fileName & ": " & ex.Message)
               End Try
            End Using
         End If
      End While
      Console.WriteLine("Press Enter key to finish.")
      Console.ReadLine()
   End Sub

   Sub Main()
      Dim table As New DataTable
      table.Columns.Add("FileName", GetType(System.String))
      table.Columns.Add("Data", GetType(System.Char()))
      table.Rows.Add("File1.txt", "0123456789ABCDEF".ToCharArray)
      table.Rows.Add("File2.txt", "0123456789ABCDEF".ToCharArray)

      Dim reader As New DataTableReader(table)
      TestGetChars(reader, 7)
   End Sub
End Module

using System;
using System.Data;
using System.IO;

class Class1
{
    static void Main()
    {
        DataTable table = new DataTable();
        table.Columns.Add("FileName", typeof(string));
        table.Columns.Add("Data", typeof(char[]));
        table.Rows.Add(new object[] { "File1.txt", "0123456789ABCDEF".ToCharArray() });
        table.Rows.Add(new object[] { "File2.txt", "0123456789ABCDEF".ToCharArray() });

        DataTableReader reader = new DataTableReader(table);
        TestGetChars(reader, 7);
    }

    private static void TestGetChars(DataTableReader reader, int bufferSize)
    {
        // The filename is in column 0, and the contents are in column 1.
        const int FILENAME_COLUMN = 0;
        const int DATA_COLUMN = 1;

        char[] buffer;
        long offset;
        int charsRead = 0;
        string fileName;
        int currentBufferSize = 0;

        while (reader.Read())
        {
            // Reinitialize the buffer size and the buffer itself.
            currentBufferSize = bufferSize;
            buffer = new char[bufferSize];
            // For each row, write the data to the specified file.
            // First, verify that the FileName column isn't null.
            if (!reader.IsDBNull(FILENAME_COLUMN))
            {
                // Get the file name, and create a file with
                // the supplied name.
                fileName = reader.GetString(FILENAME_COLUMN);
                // Start at the beginning.
                offset = 0;

                using (StreamWriter outputStream =
                           new StreamWriter(fileName, false))
                {
                    try
                    {
                        // Loop through all the characters in the input field,
                        // incrementing the offset for the next time. If this
                        // pass through the loop reads characters, write them to
                        // the output stream.
                        do
                        {
                            charsRead = (int)reader.GetChars(DATA_COLUMN, offset,
                                buffer, 0, bufferSize);
                            if (charsRead > 0)
                            {
                                outputStream.Write(buffer, 0, charsRead);
                                offset += charsRead;
                            }
                        } while (charsRead > 0);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(fileName + ": " + ex.Message);
                    }
                }
            }
        }
        Console.WriteLine("Press Enter key to finish.");
        Console.ReadLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetDataTypeName 方法

DataTableReader
.
.
::
.
GetDataTypeName 方法
DataTableReader 类

获取一个表示指定列的数据类型的字符串。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetDataTypeName ( _
    ordinal As Integer _
) As String
public override string GetDataTypeName(
    int ordinal
)
public:
virtual String^ GetDataTypeName(
    int ordinal
) override
abstract GetDataTypeName :
        ordinal:int -> string
override GetDataTypeName :
        ordinal:int -> string

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System String
一个表示列的数据类型的字符串。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

GetDataTypeName 方法始终返回基础 DataColumn 的类型，而不是特定于提供程序的类型。

下面的控制台应用程序显示简单 DataTable 中的字段及其类型名称的列表：

Private Sub TestGetTypeName()
   Dim table As DataTable = GetCustomers()
   Using reader As New DataTableReader(table)
      For i As Integer = 0 To reader.FieldCount - 1
         Console.WriteLine("{0}: {1}", _
            reader.GetName(i), reader.GetDataTypeName(i))
      Next
   End Using

   Console.WriteLine("Press Enter to finish.")
   Console.ReadLine()
End Sub

Private Function GetCustomers() As DataTable
   ' Create sample Customers table, in order
   ' to demonstrate the behavior of the DataTableReader.
   Dim table As New DataTable

   ' Create two columns, ID and Name.
   Dim idColumn As DataColumn = table.Columns.Add("ID", _
     GetType(Integer))
   table.Columns.Add("Name", GetType(String))

   ' Set the ID column as the primary key column.
   table.PrimaryKey = New DataColumn() {idColumn}

   table.Rows.Add(New Object() {1, "Mary"})
   table.Rows.Add(New Object() {2, "Andy"})
   table.Rows.Add(New Object() {3, "Peter"})
   table.Rows.Add(New Object() {4, "Russ"})
   Return table
End Function

private static void TestGetTypeName()
{
    DataTable table = GetCustomers();
    using (DataTableReader reader = new DataTableReader(table))
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.WriteLine("{0}: {1}", reader.GetName(i),
                reader.GetDataTypeName(i));
        }
    }
    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();
    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string ));
    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    return table;
}

控制台窗口显示下列结果：

ID: Int32
Name: String

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetDateTime 方法

DataTableReader
.
.
::
.
GetDateTime 方法
DataTableReader 类

获取指定列的 DateTime 对象形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetDateTime ( _
    ordinal As Integer _
) As DateTime
public override DateTime GetDateTime(
    int ordinal
)
public:
virtual DateTime GetDateTime(
    int ordinal
) override
abstract GetDateTime :
        ordinal:int -> DateTime
override GetDateTime :
        ordinal:int -> DateTime

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System DateTime
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含 DateTime 值。

不执行任何转换，因此检索的数据必须已经是 DateTime 或可强制转换为 DataTime。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetDateTime(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetDateTime(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetDecimal 方法

DataTableReader
.
.
::
.
GetDecimal 方法
DataTableReader 类

获取指定列的 Decimal 形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetDecimal ( _
    ordinal As Integer _
) As Decimal
public override decimal GetDecimal(
    int ordinal
)
public:
virtual Decimal GetDecimal(
    int ordinal
) override
abstract GetDecimal :
        ordinal:int -> decimal
override GetDecimal :
        ordinal:int -> decimal

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Decimal
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含 Decimal 值。

未执行任何转换，因此检索的数据必须已经是 Decimal 或可强制转换为 Decimal。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetDecimal(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetDecimal(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetDouble 方法

DataTableReader
.
.
::
.
GetDouble 方法
DataTableReader 类

获取双精度浮点数形式的列值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetDouble ( _
    ordinal As Integer _
) As Double
public override double GetDouble(
    int ordinal
)
public:
virtual double GetDouble(
    int ordinal
) override
abstract GetDouble :
        ordinal:int -> float
override GetDouble :
        ordinal:int -> float

参数

ordinal
类型： System Int32
列的从零开始的序号。

返回值

类型： System Double
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含双精度浮点数。

未执行任何转换，因此检索的数据必须已经是双精度浮点数或可强制转换为双精度浮点数。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetBoolean(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetBoolean(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetEnumerator 方法

DataTableReader
.
.
::
.
GetEnumerator 方法
DataTableReader 类

返回一个可用于循环访问项集合的枚举数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetEnumerator As IEnumerator
public override IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() override
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个 IEnumerator 对象，它代表项集合。

实现

异常 | 条件
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

枚举数只允许读取 DataTableReader 中的数据。枚举数无法用于修改基础集合。 枚举数只允许读取 DataTableReader 中的数据。枚举数无法用于修改基础集合。

首先，枚举数定位在集合中的第一个元素前面。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 将枚举数提前到集合的第一个元素。 首先，枚举数定位在集合中的第一个元素前面。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 将枚举数提前到集合的第一个元素。 首先，枚举数定位在集合中的第一个元素前面。在此位置，调用 Current 会引发异常。因此，在读取 Current 的值之前，必须调用 MoveNext 将枚举数提前到集合的第一个元素。

Current 返回了 DbDataRecord，在调用 MoveNext 或 Reset 之前，它会返回同一对象。MoveNext 将 Current 设置到下一个元素。 Current 返回了 DbDataRecord，在调用 MoveNext 或 Reset 之前，它会返回同一对象。MoveNext 将 Current 设置到下一个元素。

传递到集合的末尾之后，枚举数定位在集合中最后一个元素的后面，调用 MoveNext 将返回 false。如果最后一次调用 MoveNext 返回 false，则调用 Current 会引发异常。此外，由于 DataTableReader 提供对其数据的只进访问，因此调用 IEnumerator 的 Reset 方法将引发 NotSupportedException。 传递到集合的末尾之后，枚举数定位在集合中最后一个元素的后面，调用 MoveNext 将返回 false。如果最后一次调用 MoveNext 返回 false，则调用 Current 会引发异常。此外，由于 DataTableReader 提供对其数据的只进访问，因此调用 IEnumerator 的 Reset 方法将引发 NotSupportedException。 传递到集合的末尾之后，枚举数定位在集合中最后一个元素的后面，调用 MoveNext 将返回 false。如果最后一次调用 MoveNext 返回 false，则调用 Current 会引发异常。此外，由于 DataTableReader 提供对其数据的只进访问，因此调用 IEnumerator 的 Reset 方法将引发 NotSupportedException。

DataTableReader 提供一个稳定的枚举数。也就是说，即使基础数据中发生行删除或添加，调用 GetEnumerator 返回的枚举数仍然有效。 DataTableReader 提供一个稳定的枚举数。也就是说，即使基础数据中发生行删除或添加，调用 GetEnumerator 返回的枚举数仍然有效。

下面的示例说明 GetEnumerator 方法的用法。包括在枚举数为活动的情况下从基础 DataTable 中删除行时枚举数的行为。 下面的示例说明 GetEnumerator 方法的用法。包括在枚举数为活动的情况下从基础 DataTable 中删除行时枚举数的行为。

Sub Main()
   Try
      Dim userTable As New DataTable("peopleTable")
      userTable.Columns.Add("Id", GetType(Integer))
      userTable.Columns.Add("Name", GetType(String))

      ' Note that even if you create the DataTableReader
      ' before adding the rows, the enumerator can still
      ' visit all the rows.
      Dim reader As DataTableReader = userTable.CreateDataReader()
      userTable.Rows.Add(1, "Peter")
      userTable.Rows.Add(2, "Mary")
      userTable.Rows.Add(3, "Andy")
      userTable.Rows.Add(4, "Russ")

      Dim enumerator As IEnumerator = reader.GetEnumerator()
      ' Keep track of whether the row to be deleted
      ' has actually been deleted yet. This allows
      ' this sample to demonstrate that the enumerator
      ' is able to survive row deletion.
      Dim isRowDeleted As Boolean = False
      While (enumerator.MoveNext())

         Dim dataRecord As DbDataRecord = CType(enumerator.Current, _
             DbDataRecord)

         ' While the enumerator is active, delete a row.
         ' This doesn't affect the behavior of the enumerator.
         If Not isRowDeleted Then
            isRowDeleted = True
            userTable.Rows(2).Delete()
         End If
         Console.WriteLine(dataRecord.GetString(1))
      End While
   Catch ex As Exception

      Console.WriteLine(ex)
   End Try
   Console.ReadLine()
End Sub

public static void Main()
{
    try
    {
        DataTable userTable = new DataTable("peopleTable");

        userTable.Columns.Add("Id", typeof(int));
        userTable.Columns.Add("Name", typeof(string));

        // Note that even if you create the DataTableReader
        // before adding the rows, the enumerator can still
        // visit all the rows.
        DataTableReader reader = userTable.CreateDataReader();
        userTable.Rows.Add(new object[] { 1, "Peter" });
        userTable.Rows.Add(new object[] { 2, "Mary" });
        userTable.Rows.Add(new object[] { 3, "Andy" });
        userTable.Rows.Add(new object[] { 4, "Russ" });

        IEnumerator enumerator = reader.GetEnumerator();
        // Keep track of whether the row to be deleted
        // has actually been deleted yet. This allows
        // this sample to demonstrate that the enumerator
        // is able to survive row deletion.
        bool isRowDeleted = false;
        while (enumerator.MoveNext())
        {
            DbDataRecord dataRecord = (DbDataRecord)enumerator.Current;

            // While the enumerator is active, delete a row.
            // This doesn't affect the behavior of the enumerator.
            if (!isRowDeleted)
            {
                isRowDeleted = true;
                userTable.Rows[2].Delete();
            }
            Console.WriteLine(dataRecord.GetString(1));
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
    Console.ReadLine();
}

该过程在“控制台”窗口中显示以下文本：

Peter
Mary
Russ

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetFieldType 方法

DataTableReader
.
.
::
.
GetFieldType 方法
DataTableReader 类

获取是对象的数据类型的 Type。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetFieldType ( _
    ordinal As Integer _
) As Type
public override Type GetFieldType(
    int ordinal
)
public:
virtual Type^ GetFieldType(
    int ordinal
) override
abstract GetFieldType :
        ordinal:int -> Type
override GetFieldType :
        ordinal:int -> Type

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Type
Type，它是对象的数据类型。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

调用下面的过程，传入 DataTableReader 实例，以便在“控制台”窗口中显示所有字段和每个类型全名的列表。

Private Sub TestGetFieldType(ByVal reader As DataTableReader)
   For i As Integer = 0 To reader.FieldCount - 1
      Console.WriteLine(reader.GetName(i) & ":" & _
         reader.GetFieldType(i).FullName)
   Next
   Console.WriteLine("Press Enter to finish.")
   Console.ReadLine()
End Sub

private void TestGetFieldType(DataTableReader reader)
{
    for (int i = 0; i < reader.FieldCount; i++)
    {
        Console.WriteLine(reader.GetName(i) + ":" +
            reader.GetFieldType(i).FullName);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetFloat 方法

DataTableReader
.
.
::
.
GetFloat 方法
DataTableReader 类

获取指定列的单精度浮点数形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetFloat ( _
    ordinal As Integer _
) As Single
public override float GetFloat(
    int ordinal
)
public:
virtual float GetFloat(
    int ordinal
) override
abstract GetFloat :
        ordinal:int -> float32
override GetFloat :
        ordinal:int -> float32

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Single
列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含单精度浮点数。

未执行任何转换，因此检索的数据必须已经是单精度浮点数或者可强制转换为单精度浮点数。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetFloat(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetFloat(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetGuid 方法

DataTableReader
.
.
::
.
GetGuid 方法
DataTableReader 类

获取指定列的全局唯一标识符 (GUID) 形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetGuid ( _
    ordinal As Integer _
) As Guid
public override Guid GetGuid(
    int ordinal
)
public:
virtual Guid GetGuid(
    int ordinal
) override
abstract GetGuid :
        ordinal:int -> Guid
override GetGuid :
        ordinal:int -> Guid

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Guid
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含 GUID。

未执行任何转换，因此检索的数据必须已经是 Guid 或可强制转换为 Guid。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetGuid(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetGuid(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetInt16 方法

DataTableReader
.
.
::
.
GetInt16 方法
DataTableReader 类

获取指定列的 16 位有符号整数形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetInt16 ( _
    ordinal As Integer _
) As Short
public override short GetInt16(
    int ordinal
)
public:
virtual short GetInt16(
    int ordinal
) override
abstract GetInt16 :
        ordinal:int -> int16
override GetInt16 :
        ordinal:int -> int16

参数

ordinal
类型： System Int32
从零开始的列序号

返回值

类型： System Int16
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含 16 位有符号整数。

未执行任何转换，因此检索的数据必须已经是 Int16 或可强制转换为 Int16。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetInt16(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetInt16(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetInt32 方法

DataTableReader
.
.
::
.
GetInt32 方法
DataTableReader 类

获取指定列的 32 位有符号整数形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetInt32 ( _
    ordinal As Integer _
) As Integer
public override int GetInt32(
    int ordinal
)
public:
virtual int GetInt32(
    int ordinal
) override
abstract GetInt32 :
        ordinal:int -> int
override GetInt32 :
        ordinal:int -> int

参数

ordinal
类型： System Int32
从零开始的列序号

返回值

类型： System Int32
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含 32 位有符号整数值。

未执行任何转换，因此检索的数据必须已经是 Int32 或可强制转换为 Int32。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetInt32(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetInt32(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetInt64 方法

DataTableReader
.
.
::
.
GetInt64 方法
DataTableReader 类

获取指定列的 64 位有符号整数形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetInt64 ( _
    ordinal As Integer _
) As Long
public override long GetInt64(
    int ordinal
)
public:
virtual long long GetInt64(
    int ordinal
) override
abstract GetInt64 :
        ordinal:int -> int64
override GetInt64 :
        ordinal:int -> int64

参数

ordinal
类型： System Int32
从零开始的列序号

返回值

类型： System Int64
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含 64 位有符号整数值。

未执行任何转换，因此检索的数据必须已经是 Int64 或可强制转换为 Int64。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetInt64(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetInt64(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetName 方法

DataTableReader
.
.
::
.
GetName 方法
DataTableReader 类

获取指定列的 String 形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetName ( _
    ordinal As Integer _
) As String
public override string GetName(
    int ordinal
)
public:
virtual String^ GetName(
    int ordinal
) override
abstract GetName :
        ordinal:int -> string
override GetName :
        ordinal:int -> string

参数

ordinal
类型： System Int32
从零开始的列序号

返回值

类型： System String
指定列的名称。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

GetName 和 GetOrdinal 方法提供反向功能。即，对 GetName 调用的返回值调用 GetOrdinal 应返回传递给 GetName 的原始参数；以相反顺序调用该过程也是如此。 GetName 和 GetOrdinal 方法提供反向功能。即，对 GetName 调用的返回值调用 GetOrdinal 应返回传递给 GetName 的原始参数；以相反顺序调用该过程也是如此。

下面的简单示例包括向“控制台”窗口列出指定的 DataTableReader 中的所有列名称和列序号位置的过程。

Private Sub DisplayColumnNames(ByVal reader As DataTableReader)
   ' Given a DataTableReader, display column names.
   For i As Integer = 0 To reader.FieldCount - 1
      Console.WriteLine("{0}: {1}", i, reader.GetName(i))
   Next
End Sub

private static void DisplayColumnNames(DataTableReader reader)
{
    // Given a DataTableReader, display column names.
    for (int i = 0; i < reader.FieldCount; i++)
    {
        Console.WriteLine("{0}: {1}", i, reader.GetName(i));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetOrdinal 方法

DataTableReader
.
.
::
.
GetOrdinal 方法
DataTableReader 类

在给定列名称的情况下获取列序号。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetOrdinal ( _
    name As String _
) As Integer
public override int GetOrdinal(
    string name
)
public:
virtual int GetOrdinal(
    String^ name
) override
abstract GetOrdinal :
        name:string -> int
override GetOrdinal :
        name:string -> int

参数

name
类型： System String
列的名称。

返回值

类型： System Int32
从零开始的列序号。

实现

异常 | 条件
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
ArgumentException | 指定的名称不是有效的列名称。

由于必须向 DataTableReader 类提供的大部分方法提供列编号，因此可以在给定列名称的情况下使用 GetOrdinal 方法检索列编号。

GetOrdinal 首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。如果未找到列编号，将引发 IndexOutOfRangeException。 GetOrdinal 首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。如果未找到列编号，将引发 IndexOutOfRangeException。 GetOrdinal 首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。如果未找到列编号，将引发 IndexOutOfRangeException。

GetOrdinal 不区分假名宽度。

由于基于序号的查找比命名查找更为有效，因此在循环中调用 GetOrdinal 的效率较低。为了节省时间，可以调用一次 GetOrdinal，然后将结果分配给整数变量以便在循环中使用。 由于基于序号的查找比命名查找更为有效，因此在循环中调用 GetOrdinal 的效率较低。为了节省时间，可以调用一次 GetOrdinal，然后将结果分配给整数变量以便在循环中使用。

如果仅有一个由用户提供的列名称，并且必须从该列中检索信息，则可以使用如下过程提取所需信息。在此示例中，该过程接受一个列名称，然后为 DataTableReader 中的当前行返回该列中包含的数据： 如果仅有一个由用户提供的列名称，并且必须从该列中检索信息，则可以使用如下过程提取所需信息。在此示例中，该过程接受一个列名称，然后为 DataTableReader 中的当前行返回该列中包含的数据：

Private Function GetValueByName( _
   ByVal reader As DataTableReader, _
   ByVal columnName As String) As Object

   ' Consider when to use a procedure like this one carefully:
   ' If you're going to retrieve information from a column
   ' in a loop, it would be better to retrieve the column
   ' ordinal once, store the value, and use the methods
   ' of the DataTableReader class directly.
   Dim columnValue As Object

   Try
      Dim columnOrdinal As Integer = reader.GetOrdinal(columnName)
      columnValue = reader.GetValue(columnOrdinal)
   Catch ex As ArgumentException
      ' Throw all other errors back out to the caller.
      columnValue = Nothing
   End Try
   Return columnValue
End Function

    private static object GetValueByName(
        DataTableReader reader, string columnName)
    {
        // Consider when to use a procedure like this one carefully:
        // if you're going to retrieve information from a column
        // in a loop, it would be better to retrieve the column
        // ordinal once, store the value, and use the methods
        // of the DataTableReader class directly.
        object columnValue;

        try
        {
            int columnOrdinal = reader.GetOrdinal(columnName);
            columnValue = reader.GetValue(columnOrdinal);
        }
        catch (ArgumentException ex)
        {
            // Throw all other errors back out to the caller.
            columnValue = null;
        }
        return columnValue;
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetProviderSpecificFieldType 方法

DataTableReader
.
.
::
.
GetProviderSpecificFieldType 方法
DataTableReader 类

获取指定列特定于提供程序的格式的类型。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetProviderSpecificFieldType ( _
    ordinal As Integer _
) As Type
public override Type GetProviderSpecificFieldType(
    int ordinal
)
public:
virtual Type^ GetProviderSpecificFieldType(
    int ordinal
) override
abstract GetProviderSpecificFieldType :
        ordinal:int -> Type
override GetProviderSpecificFieldType :
        ordinal:int -> Type

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Type
Type，它是对象的数据类型。
异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

由于 DataTableReader 始终返回基础 DataColumn 中存储的类型，因此调用 GetProviderSpecificFieldType 方法返回的值始终返回与 DataTable 中存储的类型相同的类型。使用 DataTableReader 类时，调用 GetProviderSpecificFieldType 方法返回的类型与调用 GetType 方法返回的类型相同。 由于 DataTableReader 始终返回基础 DataColumn 中存储的类型，因此调用 GetProviderSpecificFieldType 方法返回的值始终返回与 DataTable 中存储的类型相同的类型。使用 DataTableReader 类时，调用 GetProviderSpecificFieldType 方法返回的类型与调用 GetType 方法返回的类型相同。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间
GetFieldType


DataTableReader ..::.GetProviderSpecificValue 方法

DataTableReader
.
.
::
.
GetProviderSpecificValue 方法
DataTableReader 类

获取指定列特定于提供程序的格式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetProviderSpecificValue ( _
    ordinal As Integer _
) As Object
public override Object GetProviderSpecificValue(
    int ordinal
)
public:
virtual Object^ GetProviderSpecificValue(
    int ordinal
) override
abstract GetProviderSpecificValue :
        ordinal:int -> Object
override GetProviderSpecificValue :
        ordinal:int -> Object

参数

ordinal
类型： System Int32
值被检索的列的从零开始的编号。

返回值

类型： System Object
指定列特定于提供程序的格式的值。
异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭 DataTableReader 中的列。

由于 DataTableReader 始终返回基础 DataColumn 中存储的类型，因此调用 GetProviderSpecificValue 方法返回的值始终返回与 DataTable 中存储的数据具有相同类型的数据。使用 DataTableReader 类时，调用 GetProviderSpecificValue 方法返回的值和类型与调用 GetValue 方法返回的值和类型相同。 由于 DataTableReader 始终返回基础 DataColumn 中存储的类型，因此调用 GetProviderSpecificValue 方法返回的值始终返回与 DataTable 中存储的数据具有相同类型的数据。使用 DataTableReader 类时，调用 GetProviderSpecificValue 方法返回的值和类型与调用 GetValue 方法返回的值和类型相同。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间
GetValue


DataTableReader ..::.GetProviderSpecificValues 方法

DataTableReader
.
.
::
.
GetProviderSpecificValues 方法
DataTableReader 类

使用 DataTableReader 中所有列的特定于提供程序的类型信息填充提供的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetProviderSpecificValues ( _
    values As Object() _
) As Integer
public override int GetProviderSpecificValues(
    Object[] values
)
public:
virtual int GetProviderSpecificValues(
    array<Object^>^ values
) override
abstract GetProviderSpecificValues :
        values:Object[] -> int
override GetProviderSpecificValues :
        values:Object[] -> int

参数

values
类型：
array<
System Object
>
[]
()
[]

要使用 DataTableReader 中列的类型信息填充的对象数组。

返回值

类型： System Int32
复制到数组中的列值数。
异常 | 条件
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

由于 DataTableReader 始终返回基础 DataColumn 中存储的数据类型，因此调用 GetProviderSpecificValues 方法返回的值通常与 DataTable 中存储的数据具有相同类型。使用 DataTableReader 类时，调用 GetProviderSpecificValues 方法返回的值和类型与调用 GetValues 方法返回的值和类型相同。 由于 DataTableReader 始终返回基础 DataColumn 中存储的数据类型，因此调用 GetProviderSpecificValues 方法返回的值通常与 DataTable 中存储的数据具有相同类型。使用 DataTableReader 类时，调用 GetProviderSpecificValues 方法返回的值和类型与调用 GetValues 方法返回的值和类型相同。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间
GetValues


DataTableReader ..::.GetSchemaTable 方法

DataTableReader
.
.
::
.
GetSchemaTable 方法
DataTableReader 类

返回一个 DataTable，它描述 DataTableReader 的列元数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetSchemaTable As DataTable
public override DataTable GetSchemaTable()
public:
virtual DataTable^ GetSchemaTable() override
abstract GetSchemaTable : unit -> DataTable
override GetSchemaTable : unit -> DataTable

返回值

类型： System.Data DataTable
一个描述列元数据的 DataTable。

实现

异常 | 条件
InvalidOperationException | DataTableReader 是关闭的。

GetSchemaTable 方法按以下顺序返回有关每个列的元数据：

DataReader 列

说明

ColumnName

列名称就是 DataTable 中显示的名称。

ColumnOrdinal

列序号

ColumnSize

如果 DataColumn 的 ColumnSize（或 MaxLength）属性无法确定或无关，则为 -1；否则为 0 或包含 MaxLength 值的正整数。

NumericPrecision

如果列类型是数值类型，则它是列的最大精度。如果列类型不是数值数据类型，则它为空值。 如果列类型是数值类型，则它是列的最大精度。如果列类型不是数值数据类型，则它为空值。

NumericScale

如果列的数据类型具有小数位数部分，则返回小数点右侧的数字位数。否则将返回空值。 如果列的数据类型具有小数位数部分，则返回小数点右侧的数字位数。否则将返回空值。

DataType

列的基础类型。

ProviderType

列的数据类型的指示符。如果不同行的列的数据类型不同，则此值为 Object。该列不能包含空值。 列的数据类型的指示符。如果不同行的列的数据类型不同，则此值为 Object。该列不能包含空值。 列的数据类型的指示符。如果不同行的列的数据类型不同，则此值为 Object。该列不能包含空值。

IsLong

如果列的数据类型为 String 并且其 MaxLength 属性为 -1，则为true。否则为 false。 如果列的数据类型为 String 并且其 MaxLength 属性为 -1，则为true。否则为 false。

AllowDBNull

如果列的 AllowDbNull 约束设置为 true，则为 true；否则为 false。

IsReadOnly

如果不能修改该列，则为 true；否则为 false。

IsRowVersion

对每个列皆为 false。

IsUnique

true：DataTable 中的任何两行不能在此列中具有相同值。如果此列本身表示一个键，或如果有一个仅应用于此列的 UNIQUE 类型的约束，则 IsUnique 一定为真。false：在 DataTable 中该列可以包含重复值。该列的默认值为 false。 true：DataTable 中的任何两行不能在此列中具有相同值。如果此列本身表示一个键，或如果有一个仅应用于此列的 UNIQUE 类型的约束，则 IsUnique 一定为真。false：在 DataTable 中该列可以包含重复值。该列的默认值为 false。 true：DataTable 中的任何两行不能在此列中具有相同值。如果此列本身表示一个键，或如果有一个仅应用于此列的 UNIQUE 类型的约束，则 IsUnique 一定为真。false：在 DataTable 中该列可以包含重复值。该列的默认值为 false。 true：DataTable 中的任何两行不能在此列中具有相同值。如果此列本身表示一个键，或如果有一个仅应用于此列的 UNIQUE 类型的约束，则 IsUnique 一定为真。false：在 DataTable 中该列可以包含重复值。该列的默认值为 false。

IsKey

true：该列是合起来可唯一地标识 DataTable 中的行的列集中的一列。IsKey 设置为 true 的列集必须唯一地标识 DataTable 中的行。不要求此列集是最小列集。此列集可以从 DataTable 主键、唯一约束或唯一索引生成。false：唯一地标识该行时不需要此列。如果该列参与单一或复合主键，则此值为 true。否则，其值为 false。 true：该列是合起来可唯一地标识 DataTable 中的行的列集中的一列。IsKey 设置为 true 的列集必须唯一地标识 DataTable 中的行。不要求此列集是最小列集。此列集可以从 DataTable 主键、唯一约束或唯一索引生成。false：唯一地标识该行时不需要此列。如果该列参与单一或复合主键，则此值为 true。否则，其值为 false。 true：该列是合起来可唯一地标识 DataTable 中的行的列集中的一列。IsKey 设置为 true 的列集必须唯一地标识 DataTable 中的行。不要求此列集是最小列集。此列集可以从 DataTable 主键、唯一约束或唯一索引生成。false：唯一地标识该行时不需要此列。如果该列参与单一或复合主键，则此值为 true。否则，其值为 false。 true：该列是合起来可唯一地标识 DataTable 中的行的列集中的一列。IsKey 设置为 true 的列集必须唯一地标识 DataTable 中的行。不要求此列集是最小列集。此列集可以从 DataTable 主键、唯一约束或唯一索引生成。false：唯一地标识该行时不需要此列。如果该列参与单一或复合主键，则此值为 true。否则，其值为 false。 true：该列是合起来可唯一地标识 DataTable 中的行的列集中的一列。IsKey 设置为 true 的列集必须唯一地标识 DataTable 中的行。不要求此列集是最小列集。此列集可以从 DataTable 主键、唯一约束或唯一索引生成。false：唯一地标识该行时不需要此列。如果该列参与单一或复合主键，则此值为 true。否则，其值为 false。 true：该列是合起来可唯一地标识 DataTable 中的行的列集中的一列。IsKey 设置为 true 的列集必须唯一地标识 DataTable 中的行。不要求此列集是最小列集。此列集可以从 DataTable 主键、唯一约束或唯一索引生成。false：唯一地标识该行时不需要此列。如果该列参与单一或复合主键，则此值为 true。否则，其值为 false。 true：该列是合起来可唯一地标识 DataTable 中的行的列集中的一列。IsKey 设置为 true 的列集必须唯一地标识 DataTable 中的行。不要求此列集是最小列集。此列集可以从 DataTable 主键、唯一约束或唯一索引生成。false：唯一地标识该行时不需要此列。如果该列参与单一或复合主键，则此值为 true。否则，其值为 false。

IsAutoIncrement

true：该列以固定的增量向新行赋值。false：该列不以固定的增量向新行赋值。该列的默认值为 false。 true：该列以固定的增量向新行赋值。false：该列不以固定的增量向新行赋值。该列的默认值为 false。 true：该列以固定的增量向新行赋值。false：该列不以固定的增量向新行赋值。该列的默认值为 false。

BaseCatalogName

包含列的数据存储区中的目录的名称。如果不能确定基目录名称，则为 Null。此列的默认值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 包含列的数据存储区中的目录的名称。如果不能确定基目录名称，则为 Null。此列的默认值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 包含列的数据存储区中的目录的名称。如果不能确定基目录名称，则为 Null。此列的默认值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

BaseSchemaName

此值始终为 Null。

BaseTableName

DataTable 的名称。

BaseColumnName

DataTable 中的列的名称。

AutoIncrementSeed

DataTable 的 AutoIncrementSeed 属性的值。

AutoIncrementStep

DataTable 的 AutoIncrementStep 属性的值。

DefaultValue

DataColumn 的 DefaultValue 属性的值。

表达式

如果当前列为一个表达式列，并且表达式中使用的所有列都属于包含该表达式列的同一 T:System.Data.DataTable，则为表达式字符串；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

ColumnMapping

与 DataColumn 关联的 MappingType 值。类型可以是 Attribute、Element、Hidden 或 SimpleContent 之一。默认值为 Element。 与 DataColumn 关联的 MappingType 值。类型可以是 Attribute、Element、Hidden 或 SimpleContent 之一。默认值为 Element。 与 DataColumn 关联的 MappingType 值。类型可以是 Attribute、Element、Hidden 或 SimpleContent 之一。默认值为 Element。

BaseTableNamespace

DataTable 的 Namespace 属性的值。

BaseColumnNamespace

DataColumn 的 Namespace 属性的值。

下面的控制台应用程序示例检索有关指定列的架构信息。向 DisplaySchemaTableInfo 过程传递一个 DataTableReader 和一个表示 DataTableReader 中的列序号位置的整数，该过程将向控制台窗口输出架构信息。 下面的控制台应用程序示例检索有关指定列的架构信息。向 DisplaySchemaTableInfo 过程传递一个 DataTableReader 和一个表示 DataTableReader 中的列序号位置的整数，该过程将向控制台窗口输出架构信息。

Private Sub TestGetSchemaTable()
   ' Set up the data adapter, using information from
   ' the AdventureWorks sample database.
   ' Modify the SQL expression to retrieve
   ' data from a different table.
   Dim adapter As SqlDataAdapter = _
      SetupDataAdapter("SELECT * FROM Sales.Customer")

   ' Fill the DataTable, retrieving all the schema information.
   adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
   Dim table As New DataTable
   adapter.Fill(table)

   ' Create the DataTableReader, and close it when done.
   Using reader As New DataTableReader(table)
      ' Modify the column number to display information
      ' about a column other than column 0.
      DisplaySchemaTableInfo(reader, 0)
   End Using

   Console.WriteLine()
   Console.WriteLine("Press Enter to finish.")
   Console.ReadLine()
End Sub

Private Sub DisplaySchemaTableInfo( _
   ByVal reader As DataTableReader, ByVal ordinal As Integer)

   ' Given a DataTableReader, display schema
   ' information about a particular column.
   Try
      Dim schemaTable As DataTable = reader.GetSchemaTable()
      Dim row As DataRow = schemaTable.Rows(ordinal)
      For Each col As DataColumn In schemaTable.Columns
         Console.WriteLine("{0}: {1}", _
            col.ColumnName, row(col.Ordinal))
      Next
   Catch ex As IndexOutOfRangeException
      Console.WriteLine("{0} is an invalid column number.", _
         ordinal)
   End Try
End Sub

Private Function SetupDataAdapter( _
   ByVal sqlString As String) As SqlDataAdapter
   ' Assuming all the default settings, create a SqlDataAdapter
   ' working with the AdventureWorks sample database that's
   ' available with SQL Server.
   Dim connectionString As String = _
      "Data Source=(local);" & _
      "Initial Catalog=AdventureWorks;" & _
      "Integrated Security=true"
   Return New SqlDataAdapter(sqlString, connectionString)
End Function

private static void TestGetSchemaTable()
{
    // Set up the data adapter, using information from
    // the AdventureWorks sample database.
    // Modify the SQL expression to retrieve
    // data from a different table.
    SqlDataAdapter adapter =
        SetupDataAdapter("SELECT * FROM Sales.Customer");

    // Fill the DataTable, retrieving all the schema information.
    adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    DataTable table = new DataTable();
    adapter.Fill(table);

    // Create the DataTableReader, and close it when done.
    using (DataTableReader reader = new DataTableReader(table))
    {
        // Modify the column number to display information
        // about a column other than column 0.
        DisplaySchemaTableInfo(reader, 0);
    }

    Console.WriteLine();
    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();
}

private static void DisplaySchemaTableInfo(
        DataTableReader reader, int ordinal)
{
    // Given a DataTableReader, display schema
    // information about a particular column.
    try
    {
        DataTable schemaTable = reader.GetSchemaTable();
        DataRow row = schemaTable.Rows[ordinal];
        foreach (DataColumn col in schemaTable.Columns)
        {
            Console.WriteLine("{0}: {1}",
                col.ColumnName, row[col.Ordinal]);
        }
    }
    catch (IndexOutOfRangeException ex)
    {
        Console.WriteLine("{0} is an invalid column number.",
            ordinal);
    }
}

private static SqlDataAdapter SetupDataAdapter(String sqlString)
{
    // Assuming all the default settings, create a
    // SqlDataAdapter working with the AdventureWorks
    // sample database that's available with
    // SQL Server.
    String connectionString =
        "Data source=(local);initial catalog=AdventureWorks;" +
        "Integrated Security=True";
    return new SqlDataAdapter(sqlString, connectionString);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetString 方法

DataTableReader
.
.
::
.
GetString 方法
DataTableReader 类

获取指定列的字符串形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetString ( _
    ordinal As Integer _
) As String
public override string GetString(
    int ordinal
)
public:
virtual String^ GetString(
    int ordinal
) override
abstract GetString :
        ordinal:int -> string
override GetString :
        ordinal:int -> string

参数

ordinal
类型： System Int32
从零开始的列序号

返回值

类型： System String
指定列的值。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。
InvalidCastException | 指定的列不包含字符串。

在调用该方法之前，调用 IsDBNull 以查看是否存在空值。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则该示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则该示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则该示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetString(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetString(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetValue 方法

DataTableReader
.
.
::
.
GetValue 方法
DataTableReader 类

获取以本机格式表示的指定列的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetValue ( _
    ordinal As Integer _
) As Object
public override Object GetValue(
    int ordinal
)
public:
virtual Object^ GetValue(
    int ordinal
) override
abstract GetValue :
        ordinal:int -> Object
override GetValue :
        ordinal:int -> Object

参数

ordinal
类型： System Int32
从零开始的列序号

返回值

类型： System Object
指定列的值。此方法为空列返回 DBNull。 指定列的值。此方法为空列返回 DBNull。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

尽管可以在调用此方法之前调用 IsDBNull 来查看是否有空值，但这样做并没有必要。

下面的示例对 DataTableReader 中当前行中的所有列进行循环访问，同时显示每列的内容和列名称。通常，如果目的是要使用由 DataTableReader 检索的行中的所有列，则可以考虑改用 GetValues 方法，该方法效率更高。 下面的示例对 DataTableReader 中当前行中的所有列进行循环访问，同时显示每列的内容和列名称。通常，如果目的是要使用由 DataTableReader 检索的行中的所有列，则可以考虑改用 GetValues 方法，该方法效率更高。

Private Sub GetAllValues(ByVal reader As DataTableReader)

   ' Given a DataTableReader, retrieve the value of
   ' each column, and display the name, value, and type.
   ' Make sure you've called reader.Read at least once before
   ' calling this procedure.
   ' Loop through all the columns.
   Dim value As Object
   For i As Integer = 0 To reader.FieldCount - 1
      If reader.IsDBNull(i) Then
         value = "<NULL>"
      Else
         value = reader.GetValue(i)
      End If
      Console.WriteLine("{0}: {1} ({2})", reader.GetName(i), _
         value, reader.GetFieldType(i).Name)
   Next
End Sub

private static void GetAllValues(DataTableReader reader)
{
    // Given a DataTableReader, retrieve the value of
    // each column, and display the name, value, and type.
    // Make sure you have called reader.Read at least once before
    // calling this procedure.

    // Loop through all the columns.
    object value = null;
    for (int i = 0; i < reader.FieldCount; i++)
    {
        if (reader.IsDBNull(i))
        {
            value = "<NULL>";
        }
        else
        {
            value = reader.GetValue(i);
        }
        Console.WriteLine("{0}: {1} ({2})", reader.GetName(i),
            value, reader.GetFieldType(i).Name);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.GetValues 方法

DataTableReader
.
.
::
.
GetValues 方法
DataTableReader 类

使用当前行的列值来填充对象数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetValues ( _
    values As Object() _
) As Integer
public override int GetValues(
    Object[] values
)
public:
virtual int GetValues(
    array<Object^>^ values
) override
abstract GetValues :
        values:Object[] -> int
override GetValues :
        values:Object[] -> int

参数

values
类型：
array<
System Object
>
[]
()
[]

要将 DataTableReader 中的列值复制到的 Object 数组。

返回值

类型： System Int32
复制到数组中的列值数。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

对于大多数应用程序，此方法提供了一种高效的方法，它检索所有列，而不是分别检索每一列。如果目的是要检索 DataTableReader 中行的所有列值，则 GetValues 方法会提供最高效的解决方案。 对于大多数应用程序，此方法提供了一种高效的方法，它检索所有列，而不是分别检索每一列。如果目的是要检索 DataTableReader 中行的所有列值，则 GetValues 方法会提供最高效的解决方案。

可以传递一个包含列数少于结果行中包含列数的 Object 数组。只有 Object 数组可包含的数据量才会复制到数组中。还可以传递长度超过结果行中所包含列数的 Object 数组，在方法调用后附加数组元素保持不变。 可以传递一个包含列数少于结果行中包含列数的 Object 数组。只有 Object 数组可包含的数据量才会复制到数组中。还可以传递长度超过结果行中所包含列数的 Object 数组，在方法调用后附加数组元素保持不变。 可以传递一个包含列数少于结果行中包含列数的 Object 数组。只有 Object 数组可包含的数据量才会复制到数组中。还可以传递长度超过结果行中所包含列数的 Object 数组，在方法调用后附加数组元素保持不变。

对于空列，此方法将 DBNull 放入输出数组中。

下面的示例演示如何使用大小正确的数组读取所提供的 DataTableReader 中的当前行的所有值。此外，该示例还演示如何使用大小固定（可以小于或大于可用的列数）的数组。 下面的示例演示如何使用大小正确的数组读取所提供的 DataTableReader 中的当前行的所有值。此外，该示例还演示如何使用大小固定（可以小于或大于可用的列数）的数组。

Private Sub TestGetValues(ByVal reader As DataTableReader)

    ' Given a DataTableReader, use the GetValues
    ' method to retrieve a full row of data.

    ' Test the GetValues method, passing in an array large
    ' enough for all the columns.
    Dim values(reader.FieldCount - 1) As Object
    Dim fieldCount As Integer = reader.GetValues(values)
    Console.WriteLine("reader.GetValues retrieved {0} columns.", _
         fieldCount)
    For i As Integer = 0 To fieldCount - 1
        Console.WriteLine(values(i))
    Next

    Console.WriteLine()

    ' Now repeat, using an array that may contain a different
    ' number of columns than the original data. This should work correctly,
    ' whether the size of the array is larger or smaller than
    ' the number of columns.

    ' Attempt to retrieve three columns of data.
    ReDim values(2)
    fieldCount = reader.GetValues(values)
    Console.WriteLine("reader.GetValues retrieved {0} columns.", _
         fieldCount)
    For i As Integer = 0 To fieldCount - 1
        Console.WriteLine(values(i))
    Next
End Sub

private static void TestGetValues(DataTableReader reader)
{
    // Given a DataTableReader, use the GetValues
    // method to retrieve a full row of data.
    // Test the GetValues method, passing in an array large
    // enough for all the columns.
    Object[] values = new Object[reader.FieldCount];
    int fieldCount = reader.GetValues(values);

    Console.WriteLine("reader.GetValues retrieved {0} columns.",
        fieldCount);
    for (int i = 0; i < fieldCount; i++)
        Console.WriteLine(values[i]);

    Console.WriteLine();

    // Now repeat, using an array that may contain a different
    // number of columns than the original data. This should work correctly,
    // whether the size of the array is larger or smaller than
    // the number of columns.

    // Attempt to retrieve three columns of data.
    values = new Object[3];
    fieldCount = reader.GetValues(values);
    Console.WriteLine("reader.GetValues retrieved {0} columns.",
        fieldCount);
    for (int i = 0; i < fieldCount; i++)
        Console.WriteLine(values[i]);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.IsDBNull 方法

DataTableReader
.
.
::
.
IsDBNull 方法
DataTableReader 类

获取一个值，该值指示列中是否包含不存在的或缺少的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function IsDBNull ( _
    ordinal As Integer _
) As Boolean
public override bool IsDBNull(
    int ordinal
)
public:
virtual bool IsDBNull(
    int ordinal
) override
abstract IsDBNull :
        ordinal:int -> bool
override IsDBNull :
        ordinal:int -> bool

参数

ordinal
类型： System Int32
从零开始的列序号

返回值

类型： System Boolean
如果指定的列值与 DBNull 等效，则为 true；否则为 false。

实现

异常 | 条件
ArgumentOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

在调用类型化 get 方法（例如，GetByte、GetChar 等）之前调用此方法来查看是否存在空列值，以避免引发错误。

下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则该示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则该示例会为每一行显示一条错误信息。 下面的示例显示传入的 DataTableReader 中编号为 2 的列的内容。如果某个特定行中的列值为空值，代码将显示文本 <NULL>。如果列中数据的类型不正确，则该示例会为每一行显示一条错误信息。

Private Sub PrintColumn(ByVal reader As DataTableReader)
   ' Loop through all the rows in the DataTableReader
   While reader.Read()
      If reader.IsDBNull(2) Then
         Console.Write("<NULL>")
      Else
         Try
            Console.Write(reader.GetString(2))
         Catch ex As InvalidCastException
            Console.Write("Invalid data type.")
         End Try
      End If
      Console.WriteLine()
   End While
End Sub

private static void PrintColumn(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        if (reader.IsDBNull(2))
        {
            Console.Write("<NULL>");
        }
        else
        {
            try
            {
                Console.Write(reader.GetString(2));
            }
            catch (InvalidCastException)
            {
                Console.Write("Invalid data type.");
            }
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.MemberwiseClone 方法

DataTableReader
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableReader 类

名称 说明
页首

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.NextResult 方法

DataTableReader
.
.
::
.
NextResult 方法
DataTableReader 类

使 DataTableReader 前进到下一个结果集（如果有）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function NextResult As Boolean
public override bool NextResult()
public:
virtual bool NextResult() override
abstract NextResult : unit -> bool
override NextResult : unit -> bool

返回值

类型： System Boolean
如果有另一个结果集，则为 true；否则为 false。

实现

异常 | 条件
InvalidOperationException | 尝试在已关闭的 DataTableReader 中进行定位。

用于处理多个结果，可通过在包含两个或两个以上表的 DataSet 或包含两个或两个以上 DataTable 实例的数组上创建一个 DataTableReader 来生成这些结果。

新的 DataTableReader 定位在第一个结果上。

在下面的示例中，TestConstructor 方法创建两个 DataTable 实例。为了演示 DataTableReader 类的这个构造函数，此示例创建一个新的 DataTableReader，它以包含两个 DataTables 的数组为基础，并执行简单的操作，将前几列中的内容打印到控制台窗口。若要测试此应用程序，请创建一个新的控制台应用程序，并将代码示例粘贴到新建的文件。 在下面的示例中，TestConstructor 方法创建两个 DataTable 实例。为了演示 DataTableReader 类的这个构造函数，此示例创建一个新的 DataTableReader，它以包含两个 DataTables 的数组为基础，并执行简单的操作，将前几列中的内容打印到控制台窗口。若要测试此应用程序，请创建一个新的控制台应用程序，并将代码示例粘贴到新建的文件。 在下面的示例中，TestConstructor 方法创建两个 DataTable 实例。为了演示 DataTableReader 类的这个构造函数，此示例创建一个新的 DataTableReader，它以包含两个 DataTables 的数组为基础，并执行简单的操作，将前几列中的内容打印到控制台窗口。若要测试此应用程序，请创建一个新的控制台应用程序，并将代码示例粘贴到新建的文件。

Private Sub TestConstructor()
   ' Create two data adapters, one for each of the two
   ' DataTables to be filled.
   Dim customerDataTable As DataTable = GetCustomers()
   Dim productDataTable As DataTable = GetProducts()

   ' Create the new DataTableReader.
   Using reader As New DataTableReader( _
      New DataTable() {customerDataTable, productDataTable})

      ' Print the contents of each of the result sets.
      Do
         PrintColumns(reader)
      Loop While reader.NextResult()
   End Using

   Console.WriteLine("Press Enter to finish.")
   Console.ReadLine()

End Sub

Private Function GetCustomers() As DataTable
   ' Create sample Customers table, in order
   ' to demonstrate the behavior of the DataTableReader.
   Dim table As New DataTable

   ' Create two columns, ID and Name.
   Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
   table.Columns.Add("Name", GetType(String))

   ' Set the ID column as the primary key column.
   table.PrimaryKey = New DataColumn() {idColumn}

   table.Rows.Add(New Object() {1, "Mary"})
   table.Rows.Add(New Object() {2, "Andy"})
   table.Rows.Add(New Object() {3, "Peter"})
   table.Rows.Add(New Object() {4, "Russ"})
   Return table
End Function

Private Function GetProducts() As DataTable
   ' Create sample Products table, in order
   ' to demonstrate the behavior of the DataTableReader.
   Dim table As New DataTable

   ' Create two columns, ID and Name.
   Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
   table.Columns.Add("Name", GetType(String))

   ' Set the ID column as the primary key column.
   table.PrimaryKey = New DataColumn() {idColumn}

   table.Rows.Add(New Object() {1, "Wireless Network Card"})
   table.Rows.Add(New Object() {2, "Hard Drive"})
   table.Rows.Add(New Object() {3, "Monitor"})
   table.Rows.Add(New Object() {4, "CPU"})
   Return table
End Function

Private Sub PrintColumns( _
   ByVal reader As DataTableReader)

   ' Loop through all the rows in the DataTableReader.
   Do While reader.Read()
      For i As Integer = 0 To reader.FieldCount - 1
         Console.Write(reader(i).ToString() & " ")
      Next
      Console.WriteLine()
   Loop
End Sub

private static void TestConstructor()
{
    // Create two data adapters, one for each of the two
    // DataTables to be filled.
    DataTable customerDataTable = GetCustomers();
    DataTable productDataTable = GetProducts();

    // Create the new DataTableReader.
    using (DataTableReader reader = new DataTableReader(
               new DataTable[] { customerDataTable, productDataTable }))
    {
        // Print the contents of each of the result sets.
        do
        {
            PrintColumns(reader);
        } while (reader.NextResult());
    }

    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string ));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    return table;
}

private static DataTable GetProducts()
{
    // Create sample Products table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string ));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Wireless Network Card" });
    table.Rows.Add(new object[] { 2, "Hard Drive" });
    table.Rows.Add(new object[] { 3, "Monitor" });
    table.Rows.Add(new object[] { 4, "CPU" });
    return table;
}

private static void PrintColumns(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write(reader[i] + " ");
        }
        Console.WriteLine();
    }
}

控制台窗口显示下列结果：

1 Mary
2 Andy
3 Peter
4 Russ
1 Wireless Network Card
2 Hard Drive
3 Monitor
4 CPU

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.Read 方法

DataTableReader
.
.
::
.
Read 方法
DataTableReader 类

使 DataTableReader 前进到下一条记录。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function Read As Boolean
public override bool Read()
public:
virtual bool Read() override
abstract Read : unit -> bool
override Read : unit -> bool

返回值

类型： System Boolean
如果有要读取的另一行，则为 true；否则为 false。

实现

异常 | 条件
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

DataTableReader 的默认位置在第一条记录前面。因此，必须调用 Read 来开始访问任何数据。 DataTableReader 的默认位置在第一条记录前面。因此，必须调用 Read 来开始访问任何数据。

PrintColumns 过程依次通过 DataTableReader 中的所有行，同时在“控制台”窗口中显示每列的内容。

Private Sub PrintColumns( _
   ByVal reader As DataTableReader)

   ' Loop through all the rows in the DataTableReader.
   While reader.Read()
       For i As Integer = 0 To reader.FieldCount - 1
         Console.Write("{0} ", reader(i))
      Next
      Console.WriteLine()
   End While
End Sub

private static void PrintColumns(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write("{0} ", reader[i]);
        }
        Console.WriteLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader 属性

DataTableReader 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableReader 类

DataTableReader 类型公开以下成员。

名称 说明
页首

参考

DataTableReader 类
System.Data 命名空间


DataTableReader ..::.Depth 属性

DataTableReader
.
.
::
.
Depth 属性
DataTableReader 类

DataTableReader 的当前行的嵌套深度。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property Depth As Integer
    Get
public override int Depth { get; }
public:
virtual property int Depth {
    int get () override;
}
abstract Depth : int
override Depth : int

属性值

类型： System Int32
当前行的嵌套深度；始终为零。

实现

DataTableReader 不支持嵌套。Depth 属性总是返回零。 DataTableReader 不支持嵌套。Depth 属性总是返回零。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.FieldCount 属性

DataTableReader
.
.
::
.
FieldCount 属性
DataTableReader 类

返回当前行中的列数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property FieldCount As Integer
    Get
public override int FieldCount { get; }
public:
virtual property int FieldCount {
    int get () override;
}
abstract FieldCount : int
override FieldCount : int

属性值

类型： System Int32
如果未定位在有效的结果集中，则为 0；否则为当前行中的列数。

实现

异常 | 条件
InvalidOperationException | 尝试在关闭的 DataTableReader 中检索字段计数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.HasRows 属性

DataTableReader
.
.
::
.
HasRows 属性
DataTableReader 类

获取一个值，该值指示 DataTableReader 是否包含一行或多行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property HasRows As Boolean
    Get
public override bool HasRows { get; }
public:
virtual property bool HasRows {
    bool get () override;
}
abstract HasRows : bool
override HasRows : bool

属性值

类型： System Boolean
如果 DataTableReader 包含一行或多行，则为 true；否则为 false。
异常 | 条件
InvalidOperationException | 尝试检索有关已关闭的 DataTableReader 的信息。

HasRows 属性返回有关当前结果集的信息。如果 DataTableReader 包含多个结果集，则可以在调用 NextResult 方法后立刻对 HasRows 属性的值进行检查，以确定新的结果集是否包含行。 HasRows 属性返回有关当前结果集的信息。如果 DataTableReader 包含多个结果集，则可以在调用 NextResult 方法后立刻对 HasRows 属性的值进行检查，以确定新的结果集是否包含行。

如果当前结果集中没有行，则可以使用 HasRows 属性，以避免要求调用 DataTableReader 的 Read 方法。

下面的示例用数据填充两个 DataTable 实例。第一个 DataTable 包含一行，第二个不包含任何行。然后该示例创建一个包含两个 DataTable 对象的 DataTableReader，调用 PrintData 方法显示每个对象的内容，并在调用 PrintData 之前检查每个对象 HasRows 属性的值。 下面的示例用数据填充两个 DataTable 实例。第一个 DataTable 包含一行，第二个不包含任何行。然后该示例创建一个包含两个 DataTable 对象的 DataTableReader，调用 PrintData 方法显示每个对象的内容，并在调用 PrintData 之前检查每个对象 HasRows 属性的值。 下面的示例用数据填充两个 DataTable 实例。第一个 DataTable 包含一行，第二个不包含任何行。然后该示例创建一个包含两个 DataTable 对象的 DataTableReader，调用 PrintData 方法显示每个对象的内容，并在调用 PrintData 之前检查每个对象 HasRows 属性的值。

Private Sub TestHasRows()
   'Retrieve one row from the Store table:
   Dim customerTable As DataTable = GetCustomers()
   Dim productsTable As DataTable = GetProducts()

   Using reader As New DataTableReader( _
      New DataTable() {customerTable, productsTable})

      Do
         If reader.HasRows Then
            PrintData(reader)
         End If
      Loop While reader.NextResult()
   End Using

   Console.WriteLine("Press Enter to finish.")
   Console.ReadLine()
End Sub

Private Sub PrintData( _
   ByVal reader As DataTableReader)

   ' Loop through all the rows in the DataTableReader.
   Do While reader.Read()
      For i As Integer = 0 To reader.FieldCount - 1
         Console.Write("{0} ", reader(i))
      Next
      Console.WriteLine()
   Loop
End Sub
Private Function GetCustomers() As DataTable
   ' Create sample Customers table, in order
   ' to demonstrate the behavior of the DataTableReader.
   Dim table As New DataTable

   ' Create two columns, ID and Name.
   Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
   table.Columns.Add("Name", GetType(String))

   ' Set the ID column as the primary key column.
   table.PrimaryKey = New DataColumn() {idColumn}

   table.Rows.Add(New Object() {1, "Mary"})
   Return table
End Function

Private Function GetProducts() As DataTable
   ' Create sample Products table, in order
   ' to demonstrate the behavior of the DataTableReader.
   Dim table As New DataTable

   ' Create two columns, ID and Name.
   Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
   table.Columns.Add("Name", GetType(String))

   ' Set the ID column as the primary key column.
   table.PrimaryKey = New DataColumn() {idColumn}

   Return table
End Function

private static void TestHasRows()
{
    DataTable customerTable = GetCustomers();
    DataTable productTable = GetProducts();

    using (DataTableReader reader = new DataTableReader(
               new DataTable[] { customerTable, productTable }))
    {
        do
        {
            if (reader.HasRows)
            {
                PrintData(reader);
            }
        } while (reader.NextResult());
    }

    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();
}

private static void PrintData(DataTableReader reader)
{
    // Loop through all the rows in the DataTableReader
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write(reader[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();
    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string ));
    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    return table;
}

private static DataTable GetProducts()
{
    // Create sample Products table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string ));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };
    return table;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间
NextResult
Read


DataTableReader ..::.IsClosed 属性

DataTableReader
.
.
::
.
IsClosed 属性
DataTableReader 类

获取一个值，该值指示 DataTableReader 是否已关闭。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property IsClosed As Boolean
    Get
public override bool IsClosed { get; }
public:
virtual property bool IsClosed {
    bool get () override;
}
abstract IsClosed : bool
override IsClosed : bool

属性值

类型： System Boolean
如果 DataTableReader 已关闭，则返回 true；否则返回 false。

实现

在关闭 DataTableReader 之后仍可访问的方法只有 Close 方法，而可访问的属性只有 IsClosed 和 RecordsAffected 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.Item 属性

DataTableReader
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableReader 类

获取以本机格式表示的指定列的值。

名称 说明
页首

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataTableReader ..::.Item 属性 (Int32)

DataTableReader
.
.
::
.
Item 属性 (Int32)
DataTableReader 类

在给定列序号的情况下，获取指定列的以本机格式表示的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property Item ( _
    ordinal As Integer _
) As Object
    Get
public override Object this[
    int ordinal
] { get; }
public:
virtual property Object^ Item[int ordinal] {
    Object^ get (int ordinal) override;
}
abstract Item : Object
override Item : Object

参数

ordinal
类型： System Int32
从零开始的列序号。

属性值

类型： System Object
指定列的以本机格式表示的值。

实现

异常 | 条件
IndexOutOfRangeException | 传递的索引超出了 0 到 FieldCount -1 的范围。

Item 的此重载的行为与 GetValue 方法相同。

下面的示例显示所提供的 DataTableReader 的所有行中所有列的内容。此代码使用 Item 方法（Microsoft C# 中为索引器）来检索各列中包含的值。 下面的示例显示所提供的 DataTableReader 的所有行中所有列的内容。此代码使用 Item 方法（Microsoft C# 中为索引器）来检索各列中包含的值。

Private Sub DisplayItems(ByVal reader As DataTableReader)
   Dim rowNumber As Integer
   While reader.Read()
      Console.WriteLine("Row " & rowNumber)
      For i As Integer = 0 To reader.FieldCount - 1
         Console.WriteLine("{0}: {1}", reader.GetName(i), reader.Item(i))
      Next
      rowNumber += 1
   End While
End Sub

private static void DisplayItems(DataTableReader reader)
{
    int rowNumber = 0;
    while (reader.Read())
    {
        Console.WriteLine("Row " + rowNumber);
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.WriteLine("{0}: {1}", reader.GetName(i), reader[i]);
        }
        rowNumber++;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
Item 重载
System.Data 命名空间
GetValue


DataTableReader ..::.Item 属性 (String)

DataTableReader
.
.
::
.
Item 属性 (String)
DataTableReader 类

在给定列名称的情况下，获取指定列的以本机格式表示的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property Item ( _
    name As String _
) As Object
    Get
public override Object this[
    string name
] { get; }
public:
virtual property Object^ Item[String^ name] {
    Object^ get (String^ name) override;
}
abstract Item : Object
override Item : Object

参数

name
类型： System String
列的名称。

属性值

类型： System Object
指定列的以本机格式表示的值。

实现

异常 | 条件
ArgumentException | 指定的名称不是有效的列名称。
DeletedRowInaccessibleException | 尝试从已删除的行中检索数据。
InvalidOperationException | 尝试读取或访问已关闭的 DataTableReader 中的列。

首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。 首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。

此方法不区分假名宽度。

Item()()() 的此重载版本对应于先调用 GetOrdinal()()() 方法，随后再调用 GetValue 方法。

如果给定 DataTableReader 和一个列名称，GetValueByName 过程就会返回指定列的值。在调用此过程之前，必须创建一个新的 DataTableReader 实例，并至少调用其 Read 方法一次，以将行指针定位在某个数据行上。 如果给定 DataTableReader 和一个列名称，GetValueByName 过程就会返回指定列的值。在调用此过程之前，必须创建一个新的 DataTableReader 实例，并至少调用其 Read 方法一次，以将行指针定位在某个数据行上。

Private Function GetValueByName( _
   ByVal reader As DataTableReader, _
   ByVal columnName As String) As Object

   ' Consider when to use a procedure like this one carefully:
   ' If you're going to retrieve information from a column
   ' in a loop, it would be better to retrieve the column
   ' ordinal once, store the value, and use the methods
   ' of the DataTableReader class directly.
   ' Use Item(columnName) sparingly.
   Dim columnValue As Object

   Try
      columnValue = reader.Item(columnName)
   Catch ex As ArgumentException
      ' Throw all other errors back out to the caller.
      columnValue = Nothing
   End Try
   Return columnValue
End Function

    private static object GetValueByName(
        DataTableReader reader, string columnName)
    {
        // Consider when to use a procedure like this one carefully:
        // if  you're going to retrieve information from a column
        // in a loop, it would be better to retrieve the column
        // ordinal once, store the value, and use the methods
        // of the DataTableReader class directly.
        // Use this string-based indexer sparingly.
        object columnValue = null;

        try
        {
            columnValue = reader[columnName];
        }
        catch (ArgumentException ex)
        {
            // Throw all other errors back out to the caller.
            columnValue = null;
        }
        return columnValue;
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
Item 重载
System.Data 命名空间


DataTableReader ..::.RecordsAffected 属性

DataTableReader
.
.
::
.
RecordsAffected 属性
DataTableReader 类

通过执行 SQL 语句获取插入、更改或删除的行数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property RecordsAffected As Integer
    Get
public override int RecordsAffected { get; }
public:
virtual property int RecordsAffected {
    int get () override;
}
abstract RecordsAffected : int
override RecordsAffected : int

属性值

类型： System Int32
DataTableReader 不支持此属性，并且始终返回 0。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableReader 类
DataTableReader 成员
System.Data 命名空间


DataView 类

DataView 类
成员

表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataView _
    Inherits MarshalByValueComponent _
    Implements IBindingListView, IBindingList, IList, ICollection,  _
    IEnumerable, ITypedList, ISupportInitializeNotification, ISupportInitialize
public class DataView : MarshalByValueComponent, IBindingListView,
    IBindingList, IList, ICollection, IEnumerable, ITypedList,
    ISupportInitializeNotification, ISupportInitialize
public ref class DataView : public MarshalByValueComponent,
    IBindingListView, IBindingList, IList, ICollection, IEnumerable,
    ITypedList, ISupportInitializeNotification, ISupportInitialize
type DataView =
    class
        inherit MarshalByValueComponent
        interface IBindingListView
        interface IBindingList
        interface IList
        interface ICollection
        interface IEnumerable
        interface ITypedList
        interface ISupportInitializeNotification
        interface ISupportInitialize
    end

DataView 的一个主要功能是允许在 Windows 窗体和 Web 窗体上进行数据绑定。

另外，可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。例如，一个控件可能绑定到显示表中所有行的 DataView，而另一个控件可能配置为只显示已从 DataTable 删除的行。DataTable 也具有 DefaultView 属性。它返回表的默认 DataView。例如，如果希望在表上创建自定义视图，请在 DefaultView 返回的 DataView 上设置 RowFilter。 另外，可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。例如，一个控件可能绑定到显示表中所有行的 DataView，而另一个控件可能配置为只显示已从 DataTable 删除的行。DataTable 也具有 DefaultView 属性。它返回表的默认 DataView。例如，如果希望在表上创建自定义视图，请在 DefaultView 返回的 DataView 上设置 RowFilter。 另外，可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。例如，一个控件可能绑定到显示表中所有行的 DataView，而另一个控件可能配置为只显示已从 DataTable 删除的行。DataTable 也具有 DefaultView 属性。它返回表的默认 DataView。例如，如果希望在表上创建自定义视图，请在 DefaultView 返回的 DataView 上设置 RowFilter。 另外，可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。例如，一个控件可能绑定到显示表中所有行的 DataView，而另一个控件可能配置为只显示已从 DataTable 删除的行。DataTable 也具有 DefaultView 属性。它返回表的默认 DataView。例如，如果希望在表上创建自定义视图，请在 DefaultView 返回的 DataView 上设置 RowFilter。 另外，可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。例如，一个控件可能绑定到显示表中所有行的 DataView，而另一个控件可能配置为只显示已从 DataTable 删除的行。DataTable 也具有 DefaultView 属性。它返回表的默认 DataView。例如，如果希望在表上创建自定义视图，请在 DefaultView 返回的 DataView 上设置 RowFilter。 另外，可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。例如，一个控件可能绑定到显示表中所有行的 DataView，而另一个控件可能配置为只显示已从 DataTable 删除的行。DataTable 也具有 DefaultView 属性。它返回表的默认 DataView。例如，如果希望在表上创建自定义视图，请在 DefaultView 返回的 DataView 上设置 RowFilter。

若要创建数据的筛选和排序视图，请设置 RowFilter 和 Sort 属性。然后，使用 Item 属性返回单个 DataRowView。 若要创建数据的筛选和排序视图，请设置 RowFilter 和 Sort 属性。然后，使用 Item 属性返回单个 DataRowView。

还可使用 AddNew 和 Delete 方法从行的集合中进行添加和删除。在使用这些方法时，可设置 RowStateFilter 属性以便指定只有已被删除的行或新行才可由 DataView 显示。 还可使用 AddNew 和 Delete 方法从行的集合中进行添加和删除。在使用这些方法时，可设置 RowStateFilter 属性以便指定只有已被删除的行或新行才可由 DataView 显示。

说明 说明

如果不显式指定 DataView 的排序条件，将按 DataView 的相应 DataRow 在 DataTable.RowsDataRowCollection 中的索引来对 DataView 中的 DataRowView 对象进行排序。

LINQ to DataSet 允许开发人员使用 LINQ 来创建对 DataSet 的复杂且功能强大的查询。0LINQ to DataSet 查询返回 DataRow 对象的枚举，但在绑定方案中不易使用。DataView 可从 LINQ to DataSet 查询中创建，并具有该查询的筛选和排序的特征。LINQ to DataSet 扩展 DataView 的功能，方法是通过提供基于 LINQ 表达式的筛选和排序（可以执行比基于字符串的筛选和排序更复杂、功能更强大的筛选和排序操作）。有关更多信息，请参见数据绑定和 LINQ to DataSet。 LINQ to DataSet 允许开发人员使用 LINQ 来创建对 DataSet 的复杂且功能强大的查询。0LINQ to DataSet 查询返回 DataRow 对象的枚举，但在绑定方案中不易使用。DataView 可从 LINQ to DataSet 查询中创建，并具有该查询的筛选和排序的特征。LINQ to DataSet 扩展 DataView 的功能，方法是通过提供基于 LINQ 表达式的筛选和排序（可以执行比基于字符串的筛选和排序更复杂、功能更强大的筛选和排序操作）。有关更多信息，请参见数据绑定和 LINQ to DataSet。 LINQ to DataSet 允许开发人员使用 LINQ 来创建对 DataSet 的复杂且功能强大的查询。0LINQ to DataSet 查询返回 DataRow 对象的枚举，但在绑定方案中不易使用。DataView 可从 LINQ to DataSet 查询中创建，并具有该查询的筛选和排序的特征。LINQ to DataSet 扩展 DataView 的功能，方法是通过提供基于 LINQ 表达式的筛选和排序（可以执行比基于字符串的筛选和排序更复杂、功能更强大的筛选和排序操作）。有关更多信息，请参见数据绑定和 LINQ to DataSet。 LINQ to DataSet 允许开发人员使用 LINQ 来创建对 DataSet 的复杂且功能强大的查询。0LINQ to DataSet 查询返回 DataRow 对象的枚举，但在绑定方案中不易使用。DataView 可从 LINQ to DataSet 查询中创建，并具有该查询的筛选和排序的特征。LINQ to DataSet 扩展 DataView 的功能，方法是通过提供基于 LINQ 表达式的筛选和排序（可以执行比基于字符串的筛选和排序更复杂、功能更强大的筛选和排序操作）。有关更多信息，请参见数据绑定和 LINQ to DataSet。 LINQ to DataSet 允许开发人员使用 LINQ 来创建对 DataSet 的复杂且功能强大的查询。0LINQ to DataSet 查询返回 DataRow 对象的枚举，但在绑定方案中不易使用。DataView 可从 LINQ to DataSet 查询中创建，并具有该查询的筛选和排序的特征。LINQ to DataSet 扩展 DataView 的功能，方法是通过提供基于 LINQ 表达式的筛选和排序（可以执行比基于字符串的筛选和排序更复杂、功能更强大的筛选和排序操作）。有关更多信息，请参见数据绑定和 LINQ to DataSet。

下面的示例创建一个具有一个列和五个行的 DataTable。创建两个 DataView 对象，并针对每个对象设置 RowStateFilter 以显示表数据的不同视图。然后打印这些值。 下面的示例创建一个具有一个列和五个行的 DataTable。创建两个 DataView 对象，并针对每个对象设置 RowStateFilter 以显示表数据的不同视图。然后打印这些值。 下面的示例创建一个具有一个列和五个行的 DataTable。创建两个 DataView 对象，并针对每个对象设置 RowStateFilter 以显示表数据的不同视图。然后打印这些值。

Private Sub DemonstrateDataView()
    ' Create one DataTable with one column.
    Dim table As DataTable = New DataTable("table")
    Dim colItem As DataColumn = New DataColumn("item", _
        Type.GetType("System.String"))
    table.Columns.Add(colItem)

    ' Add five items.
    Dim NewRow As DataRow
    Dim i As Integer
    For i = 0 To 4

    NewRow = table.NewRow()
    NewRow("item") = "Item " & i
    table.Rows.Add(NewRow)
    Next
    table.AcceptChanges()

    ' Create two DataView objects with the same table.
    Dim firstView As DataView = New DataView(table)
    Dim secondView As DataView = New DataView(table)

    ' Change the values in the table.
    table.Rows(0)("item") = "cat"
    table.Rows(1)("item") = "dog"

    ' Print current table values.
    PrintTableOrView(table, "Current Values in Table")

    ' Set first DataView to show only modified versions of original rows.
    firstView.RowStateFilter = DataViewRowState.ModifiedOriginal

    ' Print values.
    PrintTableOrView(firstView, "First DataView: ModifiedOriginal")

    ' Add one New row to the second view.
    Dim rowView As DataRowView
    rowView = secondView.AddNew()
    rowView("item") = "fish"
    ' Set second DataView to show modified versions of
    ' current rows, or New rows.
    secondView.RowStateFilter = DataViewRowState.ModifiedCurrent _
        Or DataViewRowState.Added
    ' Print modified and Added rows.
    PrintTableOrView(secondView, _
        "Second DataView: ModifiedCurrent or Added")
End Sub

Overloads Private Sub PrintTableOrView( _
    ByVal view As DataView, ByVal label As String)
    Console.WriteLine(label)
    Dim i As Integer
    For i = 0 To view.count - 1

    Console.WriteLine(view(i)("item"))
    Next
    Console.WriteLine()
End Sub

Overloads Private Sub PrintTableOrView( _
    ByVal table As DataTable, ByVal label As String)
    Console.WriteLine(label)
    Dim i As Integer
    For i = 0 To table.Rows.Count - 1
    Console.WriteLine(table.Rows(i)("item"))
    Next
    Console.WriteLine()
End Sub

private void DemonstrateDataView()
{
    // Create one DataTable with one column.
    DataTable table = new DataTable("table");
    DataColumn colItem = new DataColumn("item",
        Type.GetType("System.String"));
    table.Columns.Add(colItem);

    // Add five items.
    DataRow NewRow;
    for(int i = 0; i <5; i++)
    {
        NewRow = table.NewRow();
        NewRow["item"] = "Item " + i;
        table.Rows.Add(NewRow);
    }
    // Change the values in the table.
    table.Rows[0]["item"]="cat";
    table.Rows[1]["item"] = "dog";
    table.AcceptChanges();

    // Create two DataView objects with the same table.
    DataView firstView = new DataView(table);
    DataView secondView = new DataView(table);

    // Print current table values.
    PrintTableOrView(table,"Current Values in Table");

    // Set first DataView to show only modified
    // versions of original rows.
    firstView.RowStateFilter=DataViewRowState.ModifiedOriginal;

    // Print values.
    PrintTableOrView(firstView,"First DataView: ModifiedOriginal");

    // Add one New row to the second view.
    DataRowView rowView;
    rowView=secondView.AddNew();
    rowView["item"] = "fish";

    // Set second DataView to show modified versions of
    // current rows, or New rows.
    secondView.RowStateFilter=DataViewRowState.ModifiedCurrent
        | DataViewRowState.Added;
    // Print modified and Added rows.
    PrintTableOrView(secondView,
        "Second DataView: ModifiedCurrent | Added");
}

private void PrintTableOrView(DataTable table, string label)
{
    // This function prints values in the table or DataView.
    Console.WriteLine("\n" + label);
    for(int i = 0; i<table.Rows.Count;i++)
    {
        Console.WriteLine("\table" + table.Rows[i]["item"]);
    }
    Console.WriteLine();
}

private void PrintTableOrView(DataView view, string label)
{

    // This overload prints values in the table or DataView.
    Console.WriteLine("\n" + label);
    for(int i = 0; i<view.Count;i++)
    {
        Console.WriteLine("\table" + view[i]["item"]);
    }
    Console.WriteLine();
}

下面的示例根据 LINQ to DataSet 查询创建按应付款总额排序的在线订单的 DataView：

Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")

Dim query = _
    From order In orders.AsEnumerable() _
    Where order.Field(Of Boolean)("OnlineOrderFlag") = True _
    Order By order.Field(Of Decimal)("TotalDue") _
    Select order

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view

DataTable orders = dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<bool>("OnlineOrderFlag") == true
    orderby order.Field<decimal>("TotalDue")
    select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

System.Data System.Data..::.DataViewDataView

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 成员
System.Data 命名空间
DataSet
DataTable
DataViewManager
AsDataView

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView 成员

DataView 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。

DataView 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataView 类
System.Data 命名空间


DataView 构造函数

DataView 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

初始化 DataView 类的新实例。

名称 说明
页首

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView 构造函数

DataView 构造函数
DataView 类

初始化 DataView 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataView()
public:
DataView()
new : unit -> DataView

下面的示例创建新的 DataView。

Private Sub MakeDataView()
    Dim view As DataView = New DataView

    view.Table = DataSet1.Tables("Suppliers")
    view.AllowDelete = True
    view.AllowEdit = True
    view.AllowNew = True
    view.RowFilter = "City = 'Berlin'"
    view.RowStateFilter = DataViewRowState.ModifiedCurrent
    view.Sort = "CompanyName DESC"

    ' Simple-bind to a TextBox control
    Text1.DataBindings.Add("Text", view, "CompanyName")
End Sub

private void MakeDataView()
{
    DataView view = new DataView();

    view.Table = DataSet1.Tables["Suppliers"];
    view.AllowDelete = true;
    view.AllowEdit = true;
    view.AllowNew = true;
    view.RowFilter = "City = 'Berlin'";
    view.RowStateFilter = DataViewRowState.ModifiedCurrent;
    view.Sort = "CompanyName DESC";

    // Simple-bind to a TextBox control
    Text1.DataBindings.Add("Text", view, "CompanyName");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
DataView 重载
System.Data 命名空间
DataTable
DataViewManager

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView 构造函数 (DataTable)

DataView 构造函数 (DataTable)
DataView 类

用指定的 DataTable 初始化 DataView 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    table As DataTable _
)
public DataView(
    DataTable table
)
public:
DataView(
    DataTable^ table
)
new :
        table:DataTable -> DataView

参数

table
类型： System.Data DataTable
要添加到 DataView 的 DataTable。

下面的示例创建一个具有指定 DataTable 的新 DataView。

Private Sub MakeDataView()
    Dim view As DataView
    view = New DataView(DataSet1.Tables("Suppliers"))

    ' Bind a ComboBox control to the DataView.
    Combo1.DataSource = view
    Combo1.DisplayMember = "Suppliers.CompanyName"
End Sub

private void MakeDataView()
{
    DataView view = new DataView(DataSet1.Tables["Suppliers"]);

    // Bind a ComboBox control to the DataView.
    Combo1.DataSource = view;
    Combo1.DisplayMember = "Suppliers.CompanyName";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
DataView 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView 构造函数 (DataTable, String, String, DataViewRowState)

DataView 构造函数 (DataTable, String, String, DataViewRowState)
DataView 类

用指定的 DataTable、RowFilter、Sort 和 DataViewRowState 初始化 DataView 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    table As DataTable, _
    RowFilter As String, _
    Sort As String, _
    RowState As DataViewRowState _
)
public DataView(
    DataTable table,
    string RowFilter,
    string Sort,
    DataViewRowState RowState
)
public:
DataView(
    DataTable^ table,
    String^ RowFilter,
    String^ Sort,
    DataViewRowState RowState
)
new :
        table:DataTable *
        RowFilter:string *
        Sort:string *
        RowState:DataViewRowState -> DataView

参数

table
类型： System.Data DataTable
要添加到 DataView 的 DataTable。
RowFilter
类型： System String
要应用于 DataView 的 RowFilter。
Sort
类型： System String
要应用于 DataView 的 Sort。
RowState
类型： System.Data DataViewRowState
要应用于 DataView 的 DataViewRowState。

下面的示例创建一个具有指定 DataTable 的新 DataView。

Private Sub MakeDataView(ByVal dataSet As DataSet)
    Dim view As New DataView(dataSet.Tables("Suppliers"), _
        "Country = 'UK'", "CompanyName", _
        DataViewRowState.CurrentRows)
    view.AllowEdit = True
    view.AllowNew = True
    view.AllowDelete = True
End Sub

private void MakeDataView(DataSet dataSet)
{
    DataView view = new DataView(dataSet.Tables["Suppliers"],
        "Country = 'UK'", "CompanyName",
        DataViewRowState.CurrentRows);
    view.AllowEdit = true;
    view.AllowNew = true;
    view.AllowDelete = true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
DataView 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView 方法

DataView 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

DataView 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataView 类
System.Data 命名空间


DataView ..::.AddNew 方法

DataView
.
.
::
.
AddNew 方法
DataView 类

将新行添加到 DataView 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function AddNew As DataRowView
public virtual DataRowView AddNew()
public:
virtual DataRowView^ AddNew()
abstract AddNew : unit -> DataRowView
override AddNew : unit -> DataRowView

返回值

类型： System.Data DataRowView
DataRowView。

下面的示例使用 AddNew 方法返回已添加到 DataTable 中的新 DataRowView。

Private Sub AddNewDataRowView(view As DataView)
    Dim rowView As DataRowView = view.AddNew

    ' Change values in the DataRow.
    rowView("ColumnName") = "New value"
    rowView.EndEdit
End Sub

private void AddNewDataRowView(DataView view)
{
    DataRowView rowView = view.AddNew();

    // Change values in the DataRow.
    rowView["ColumnName"] = "New value";
    rowView.EndEdit();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
AllowNew
DataRowView

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.BeginInit 方法

DataView
.
.
::
.
BeginInit 方法
DataView 类

开始初始化在窗体上使用的或由另一个组件使用的 DataView。此初始化在运行时发生。 开始初始化在窗体上使用的或由另一个组件使用的 DataView。此初始化在运行时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub BeginInit
public void BeginInit()
public:
virtual void BeginInit() sealed
abstract BeginInit : unit -> unit
override BeginInit : unit -> unit

实现

Visual Studio .NET 设计环境使用该方法来启动在窗体上使用或由另一个组件使用的组件的初始化。EndInit 方法结束该初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来启动在窗体上使用或由另一个组件使用的组件的初始化。EndInit 方法结束该初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来启动在窗体上使用或由另一个组件使用的组件的初始化。EndInit 方法结束该初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Close 方法

DataView
.
.
::
.
Close 方法
DataView 类

关闭 DataView。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub Close
protected void Close()
protected:
void Close()
member Close : unit -> unit

该方法允许您手动关闭派生类中的 DataView。使用相应的 Open 方法打开 DataView。 该方法允许您手动关闭派生类中的 DataView。使用相应的 Open 方法打开 DataView。

该属性仅供内部使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
Open

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.ColumnCollectionChanged 方法

DataView
.
.
::
.
ColumnCollectionChanged 方法
DataView 类

在成功更改 DataColumnCollection 之后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub ColumnCollectionChanged ( _
    sender As Object, _
    e As CollectionChangeEventArgs _
)
protected virtual void ColumnCollectionChanged(
    Object sender,
    CollectionChangeEventArgs e
)
protected:
virtual void ColumnCollectionChanged(
    Object^ sender,
    CollectionChangeEventArgs^ e
)
abstract ColumnCollectionChanged :
        sender:Object *
        e:CollectionChangeEventArgs -> unit
override ColumnCollectionChanged :
        sender:Object *
        e:CollectionChangeEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.ComponentModel CollectionChangeEventArgs
包含事件数据的 ListChangedEventArgs。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.CopyTo 方法

DataView
.
.
::
.
CopyTo 方法
DataView 类

将项目复制到数组中。只适用于 Web 窗体的界面。 将项目复制到数组中。只适用于 Web 窗体的界面。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
public void CopyTo(
    Array array,
    int index
)
public:
virtual void CopyTo(
    Array^ array,
    int index
) sealed
abstract CopyTo :
        array:Array *
        index:int -> unit
override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
要复制到当中的数组。
index
类型： System Int32
起始索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Delete 方法

DataView
.
.
::
.
Delete 方法
DataView 类

删除指定索引位置的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub Delete ( _
    index As Integer _
)
public void Delete(
    int index
)
public:
void Delete(
    int index
)
member Delete :
        index:int -> unit

参数

index
类型： System Int32
要删除行的索引。

在删除 DataRow 之后，它的状态更改为 DataViewRowState.Deleted。可通过针对 DataTable 调用 RejectChanges 来回滚该删除。 在删除 DataRow 之后，它的状态更改为 DataViewRowState.Deleted。可通过针对 DataTable 调用 RejectChanges 来回滚该删除。

下面的示例使用 Delete 方法删除行。

Private Sub DeleteRow(view As DataView, val As String)
    ' Find the given value in the DataView and delete the row.
    Dim i As Integer = view.Find(val)

    If i = -1 Then
        ' The value wasn'table found
        Console.WriteLine("Value not found in primary key column")
        Exit Sub
    Else
        view.Delete(i)
    End If
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
DataViewRowState
Find

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Dispose 方法

DataView
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

释放 DataView 对象所使用的资源（内存除外）。

名称 说明
页首

DataView 与基础 DataTable 之间的属性更改通知将在调用此方法后停止。应针对所有的 DataView 对象调用 Dispose。 DataView 与基础 DataTable 之间的属性更改通知将在调用此方法后停止。应针对所有的 DataView 对象调用 Dispose。

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Dispose 方法 (Boolean)

DataView
.
.
::
.
Dispose 方法 (Boolean)
DataView 类

释放 DataView 对象所使用的资源（内存除外）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overrides Sub Dispose ( _
    disposing As Boolean _
)
protected override void Dispose(
    bool disposing
)
protected:
virtual void Dispose(
    bool disposing
) override
abstract Dispose :
        disposing:bool -> unit
override Dispose :
        disposing:bool -> unit

参数

disposing
类型： System Boolean
如果为 true，则释放托管资源和非托管资源；如果为 false，则仅释放非托管资源。

DataView 与基础 DataTable 之间的属性更改通知将在调用此方法后停止。应针对所有的 DataView 对象调用 Dispose。 DataView 与基础 DataTable 之间的属性更改通知将在调用此方法后停止。应针对所有的 DataView 对象调用 Dispose。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
Dispose 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.EndInit 方法

DataView
.
.
::
.
EndInit 方法
DataView 类

结束在窗体上使用或由另一个组件使用的 DataView 的初始化。此初始化在运行时发生。 结束在窗体上使用或由另一个组件使用的 DataView 的初始化。此初始化在运行时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub EndInit
public void EndInit()
public:
virtual void EndInit() sealed
abstract EndInit : unit -> unit
override EndInit : unit -> unit

实现

Visual Studio .NET 设计环境使用该方法来结束在窗体上使用或由另一个组件使用的组件的初始化。BeginInit 方法开始此初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来结束在窗体上使用或由另一个组件使用的组件的初始化。BeginInit 方法开始此初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。 Visual Studio .NET 设计环境使用该方法来结束在窗体上使用或由另一个组件使用的组件的初始化。BeginInit 方法开始此初始化。使用 BeginInit 和 EndInit 方法防止在尚未完全初始化控件时使用控件。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Equals 方法

DataView
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

确定指定的对象是否被视为相等。

名称 说明
页首

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Equals 方法 (DataView)

DataView
.
.
::
.
Equals 方法 (DataView)
DataView 类

确定指定的 DataView 实例是否被视为相等。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Equals ( _
    view As DataView _
) As Boolean
public virtual bool Equals(
    DataView view
)
public:
virtual bool Equals(
    DataView^ view
)
abstract Equals :
        view:DataView -> bool
override Equals :
        view:DataView -> bool

参数

view
类型： System.Data DataView
要比较的 DataView。

返回值

类型： System Boolean
如果两个 DataView 实例相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
Equals 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Find 方法

DataView
.
.
::
.
Find 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

按指定的排序关键字值在 DataView 中查找行。

名称 说明
页首

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.Find 方法 (Object)

DataView
.
.
::
.
Find 方法 (Object)
DataView 类

按指定的排序关键字值在 DataView 中查找行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Find ( _
    key As Object _
) As Integer
public int Find(
    Object key
)
public:
int Find(
    Object^ key
)
member Find :
        key:Object -> int

参数

key
类型： System Object
要搜索的对象。

返回值

类型： System Int32
包含指定排序关键字值的 DataView 中的行的索引；否则为 -1（如果不存在排序关键字值）。

下面的 Visual Basic 示例使用 Find 方法返回在排序关键字列中包含所需值的行的索引。

Private Sub FindValueInDataView(table As DataTable)
    Dim view As DataView = New DataView(table)
    view.Sort = "CustomerID"

    ' Find the customer named "DUMON" in the primary key column
    Dim i As Integer = view.Find("DUMON")
    Console.WriteLine(view(i))
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
Find 重载
System.Data 命名空间
Delete

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Find 方法 ( array<Object >[]()[])

DataView
.
.
::
.
Find 方法 (
array<
Object
>
[]
()
[]
)
DataView 类

按指定的排序关键字值在 DataView 中查找行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function Find ( _
    key As Object() _
) As Integer
public int Find(
    Object[] key
)
public:
int Find(
    array<Object^>^ key
)
member Find :
        key:Object[] -> int

参数

key
类型：
array<
System Object
>
[]
()
[]

值的数组，类型为 Object。

返回值

类型： System Int32
DataView 中与指定的排序关键字值匹配的第一行位置的索引；否则，如果不存在匹配的排序关键字值，则为 -1。

下面的 Visual Basic 示例使用 Find 方法返回在其排序关键字列中包含指定值的行的索引。

Private Sub FindValueInDataView(table As DataTable)
    Dim view As DataView = New DataView(table)
    view.Sort = "Customers"

    ' Find the customer named "John Smith".
    Dim vals(1) As Object
    vals(0)= "John"
    vals(1) = "Smith"
    Dim i As Integer = view.Find(vals)
    Console.WriteLine(view(i))
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
Find 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.FindRows 方法

DataView
.
.
::
.
FindRows 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

返回 DataRowView 对象的数组，这些对象的列与指定的排序关键字值匹配。

名称 说明
页首

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.FindRows 方法 (Object)

DataView
.
.
::
.
FindRows 方法 (Object)
DataView 类

返回 DataRowView 对象的数组，这些对象的列与指定的排序关键字值匹配。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function FindRows ( _
    key As Object _
) As DataRowView()
public DataRowView[] FindRows(
    Object key
)
public:
array<DataRowView^>^ FindRows(
    Object^ key
)
member FindRows :
        key:Object -> DataRowView[]

参数

key
类型： System Object
要搜索的列值，类型为 Object。

返回值

类型：
array<
System.Data DataRowView
>
[]
()
[]

DataRowView 对象的数组，这些对象的列与指定的排序关键字值匹配；或者，如果任何行都不包含指定的排序关键字值，则为空 DataRowView 数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
FindRows 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)
查找行 (ADO.NET)


DataView ..::.FindRows 方法 ( array<Object >[]()[])

DataView
.
.
::
.
FindRows 方法 (
array<
Object
>
[]
()
[]
)
DataView 类

返回 DataRowView 对象的数组，这些对象的列与指定的排序关键字值匹配。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function FindRows ( _
    key As Object() _
) As DataRowView()
public DataRowView[] FindRows(
    Object[] key
)
public:
array<DataRowView^>^ FindRows(
    array<Object^>^ key
)
member FindRows :
        key:Object[] -> DataRowView[]

参数

key
类型：
array<
System Object
>
[]
()
[]

要搜索的列值的数组，类型为 Object。

返回值

类型：
array<
System.Data DataRowView
>
[]
()
[]

DataRowView 对象的数组，这些对象的列与指定的排序关键字值匹配；或者，如果任何行都不包含指定的排序关键字值，则为空 DataRowView 数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
FindRows 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)
查找行 (ADO.NET)


DataView ..::.GetEnumerator 方法

DataView
.
.
::
.
GetEnumerator 方法
DataView 类

获取此 DataView 的枚举数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetEnumerator As IEnumerator
public IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
用于在列表中浏览的 IEnumerator。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.IBindingList ..::.AddIndex 方法

DataView
.
.
::
.
IBindingList
.
.
::
.
AddIndex 方法
DataView 类

有关此成员的说明，请参见 IBindingList..::.AddIndex。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub AddIndex ( _
    property As PropertyDescriptor _
) Implements IBindingList.AddIndex
void IBindingList.AddIndex(
    PropertyDescriptor property
)
private:
virtual void AddIndex(
    PropertyDescriptor^ property
) sealed = IBindingList::AddIndex
private abstract AddIndex :
        property:PropertyDescriptor -> unit
private override AddIndex :
        property:PropertyDescriptor -> unit

参数

property
类型： System.ComponentModel PropertyDescriptor
一个 [System.ComponentModel.PropertyDescriptor] 对象。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.AddNew 方法

DataView
.
.
::
.
IBindingList
.
.
::
.
AddNew 方法
DataView 类

有关此成员的说明，请参见 IBindingList..::.AddNew。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function AddNew As Object Implements IBindingList.AddNew
Object IBindingList.AddNew()
private:
virtual Object^ AddNew() sealed = IBindingList::AddNew
private abstract AddNew : unit -> Object
private override AddNew : unit -> Object

返回值

类型： System Object
添加到列表的项。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.ApplySort 方法

DataView
.
.
::
.
IBindingList
.
.
::
.
ApplySort 方法
DataView 类

有关此成员的说明，请参见 IBindingList..::.ApplySort。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub ApplySort ( _
    property As PropertyDescriptor, _
    direction As ListSortDirection _
) Implements IBindingList.ApplySort
void IBindingList.ApplySort(
    PropertyDescriptor property,
    ListSortDirection direction
)
private:
virtual void ApplySort(
    PropertyDescriptor^ property,
    ListSortDirection direction
) sealed = IBindingList::ApplySort
private abstract ApplySort :
        property:PropertyDescriptor *
        direction:ListSortDirection -> unit
private override ApplySort :
        property:PropertyDescriptor *
        direction:ListSortDirection -> unit

参数

property
类型： System.ComponentModel PropertyDescriptor
一个 [System.ComponentModel.PropertyDescriptor] 对象。
direction
类型： System.ComponentModel ListSortDirection
一个 [System.ComponentModel.ListSortDirection] 对象。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.Find 方法

DataView
.
.
::
.
IBindingList
.
.
::
.
Find 方法
DataView 类

有关此成员的说明，请参见 IBindingList..::.Find。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function Find ( _
    property As PropertyDescriptor, _
    key As Object _
) As Integer Implements IBindingList.Find
int IBindingList.Find(
    PropertyDescriptor property,
    Object key
)
private:
virtual int Find(
    PropertyDescriptor^ property,
    Object^ key
) sealed = IBindingList::Find
private abstract Find :
        property:PropertyDescriptor *
        key:Object -> int
private override Find :
        property:PropertyDescriptor *
        key:Object -> int

参数

property
类型： System.ComponentModel PropertyDescriptor
一个 [System.ComponentModel.PropertyDescriptor] 对象。
key
类型： System Object
一个 [System.Object] 值。

返回值

类型： System Int32
有关此成员的说明，请参见 IBindingList..::.Find。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.RemoveIndex 方法

DataView
.
.
::
.
IBindingList
.
.
::
.
RemoveIndex 方法
DataView 类

有关此成员的说明，请参见 IBindingList..::.RemoveIndex。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub RemoveIndex ( _
    property As PropertyDescriptor _
) Implements IBindingList.RemoveIndex
void IBindingList.RemoveIndex(
    PropertyDescriptor property
)
private:
virtual void RemoveIndex(
    PropertyDescriptor^ property
) sealed = IBindingList::RemoveIndex
private abstract RemoveIndex :
        property:PropertyDescriptor -> unit
private override RemoveIndex :
        property:PropertyDescriptor -> unit

参数

property
类型： System.ComponentModel PropertyDescriptor
一个 [System.ComponentModel.PropertyDescriptor] 对象。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.RemoveSort 方法

DataView
.
.
::
.
IBindingList
.
.
::
.
RemoveSort 方法
DataView 类

有关此成员的说明，请参见 IBindingList..::.RemoveSort。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub RemoveSort Implements IBindingList.RemoveSort
void IBindingList.RemoveSort()
private:
virtual void RemoveSort() sealed = IBindingList::RemoveSort
private abstract RemoveSort : unit -> unit
private override RemoveSort : unit -> unit

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingListView ..::.ApplySort 方法

DataView
.
.
::
.
IBindingListView
.
.
::
.
ApplySort 方法
DataView 类

有关此成员的说明，请参见 IBindingListView..::.ApplySort。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub ApplySort ( _
    sorts As ListSortDescriptionCollection _
) Implements IBindingListView.ApplySort
void IBindingListView.ApplySort(
    ListSortDescriptionCollection sorts
)
private:
virtual void ApplySort(
    ListSortDescriptionCollection^ sorts
) sealed = IBindingListView::ApplySort
private abstract ApplySort :
        sorts:ListSortDescriptionCollection -> unit
private override ApplySort :
        sorts:ListSortDescriptionCollection -> unit

参数

sorts
类型： System.ComponentModel ListSortDescriptionCollection
一个 [System.ComponentModel.ListSortDescriptionCollection] 对象。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingListView ..::.RemoveFilter 方法

DataView
.
.
::
.
IBindingListView
.
.
::
.
RemoveFilter 方法
DataView 类

有关此成员的说明，请参见 IBindingListView..::.RemoveFilter。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub RemoveFilter Implements IBindingListView.RemoveFilter
void IBindingListView.RemoveFilter()
private:
virtual void RemoveFilter() sealed = IBindingListView::RemoveFilter
private abstract RemoveFilter : unit -> unit
private override RemoveFilter : unit -> unit

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.Add 方法

DataView
.
.
::
.
IList
.
.
::
.
Add 方法
DataView 类

有关此成员的说明，请参见 IList..::.Add。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function Add ( _
    value As Object _
) As Integer Implements IList.Add
int IList.Add(
    Object value
)
private:
virtual int Add(
    Object^ value
) sealed = IList::Add
private abstract Add :
        value:Object -> int
private override Add :
        value:Object -> int

参数

value
类型： System Object
一个 [System.Object] 值。

返回值

类型： System Int32
有关此成员的说明，请参见 IList..::.Add。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.Clear 方法

DataView
.
.
::
.
IList
.
.
::
.
Clear 方法
DataView 类

有关此成员的说明，请参见 IList..::.Clear。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub Clear Implements IList.Clear
void IList.Clear()
private:
virtual void Clear() sealed = IList::Clear
private abstract Clear : unit -> unit
private override Clear : unit -> unit

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.Contains 方法

DataView
.
.
::
.
IList
.
.
::
.
Contains 方法
DataView 类

有关此成员的说明，请参见 IList..::.Contains。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function Contains ( _
    value As Object _
) As Boolean Implements IList.Contains
bool IList.Contains(
    Object value
)
private:
virtual bool Contains(
    Object^ value
) sealed = IList::Contains
private abstract Contains :
        value:Object -> bool
private override Contains :
        value:Object -> bool

参数

value
类型： System Object
一个 [System.Object] 值。

返回值

类型： System Boolean
有关此成员的说明，请参见 IList..::.Contains。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.IndexOf 方法

DataView
.
.
::
.
IList
.
.
::
.
IndexOf 方法
DataView 类

有关此成员的说明，请参见 IList..::.IndexOf。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function IndexOf ( _
    value As Object _
) As Integer Implements IList.IndexOf
int IList.IndexOf(
    Object value
)
private:
virtual int IndexOf(
    Object^ value
) sealed = IList::IndexOf
private abstract IndexOf :
        value:Object -> int
private override IndexOf :
        value:Object -> int

参数

value
类型： System Object
一个 [System.Object] 值。

返回值

类型： System Int32
有关此成员的说明，请参见 IList..::.IndexOf。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.Insert 方法

DataView
.
.
::
.
IList
.
.
::
.
Insert 方法
DataView 类

有关此成员的说明，请参见 IList..::.Insert。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub Insert ( _
    index As Integer, _
    value As Object _
) Implements IList.Insert
void IList.Insert(
    int index,
    Object value
)
private:
virtual void Insert(
    int index,
    Object^ value
) sealed = IList::Insert
private abstract Insert :
        index:int *
        value:Object -> unit
private override Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
一个 [System.Int32] 值。
value
类型： System Object
要插入的 [System.Object] 值。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.Remove 方法

DataView
.
.
::
.
IList
.
.
::
.
Remove 方法
DataView 类

有关此成员的说明，请参见 IList..::.Remove。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub Remove ( _
    value As Object _
) Implements IList.Remove
void IList.Remove(
    Object value
)
private:
virtual void Remove(
    Object^ value
) sealed = IList::Remove
private abstract Remove :
        value:Object -> unit
private override Remove :
        value:Object -> unit

参数

value
类型： System Object
一个 [System.Object] 值。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.RemoveAt 方法

DataView
.
.
::
.
IList
.
.
::
.
RemoveAt 方法
DataView 类

有关此成员的说明，请参见 IList..::.RemoveAt。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub RemoveAt ( _
    index As Integer _
) Implements IList.RemoveAt
void IList.RemoveAt(
    int index
)
private:
virtual void RemoveAt(
    int index
) sealed = IList::RemoveAt
private abstract RemoveAt :
        index:int -> unit
private override RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
一个 [System.Int32] 值。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IndexListChanged 方法

DataView
.
.
::
.
IndexListChanged 方法
DataView 类

在成功更改 DataView 之后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub IndexListChanged ( _
    sender As Object, _
    e As ListChangedEventArgs _
)
protected virtual void IndexListChanged(
    Object sender,
    ListChangedEventArgs e
)
protected:
virtual void IndexListChanged(
    Object^ sender,
    ListChangedEventArgs^ e
)
abstract IndexListChanged :
        sender:Object *
        e:ListChangedEventArgs -> unit
override IndexListChanged :
        sender:Object *
        e:ListChangedEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.ComponentModel ListChangedEventArgs
包含事件数据的 ListChangedEventArgs。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.ITypedList ..::.GetItemProperties 方法

DataView
.
.
::
.
ITypedList
.
.
::
.
GetItemProperties 方法
DataView 类

有关此成员的说明，请参见 ITypedList..::.GetItemProperties。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetItemProperties ( _
    listAccessors As PropertyDescriptor() _
) As PropertyDescriptorCollection Implements ITypedList.GetItemProperties
PropertyDescriptorCollection ITypedList.GetItemProperties(
    PropertyDescriptor[] listAccessors
)
private:
virtual PropertyDescriptorCollection^ GetItemProperties(
    array<PropertyDescriptor^>^ listAccessors
) sealed = ITypedList::GetItemProperties
private abstract GetItemProperties :
        listAccessors:PropertyDescriptor[] -> PropertyDescriptorCollection
private override GetItemProperties :
        listAccessors:PropertyDescriptor[] -> PropertyDescriptorCollection

参数

listAccessors
类型：
array<
System.ComponentModel PropertyDescriptor
>
[]
()
[]

返回值

类型： System.ComponentModel PropertyDescriptorCollection

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 ITypedList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 ITypedList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.ITypedList ..::.GetListName 方法

DataView
.
.
::
.
ITypedList
.
.
::
.
GetListName 方法
DataView 类

有关此成员的说明，请参见 ITypedList..::.GetListName。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetListName ( _
    listAccessors As PropertyDescriptor() _
) As String Implements ITypedList.GetListName
string ITypedList.GetListName(
    PropertyDescriptor[] listAccessors
)
private:
virtual String^ GetListName(
    array<PropertyDescriptor^>^ listAccessors
) sealed = ITypedList::GetListName
private abstract GetListName :
        listAccessors:PropertyDescriptor[] -> string
private override GetListName :
        listAccessors:PropertyDescriptor[] -> string

参数

listAccessors
类型：
array<
System.ComponentModel PropertyDescriptor
>
[]
()
[]

一个 [System.ComponentModel.PropertyDescriptor] 对象数组。

返回值

类型： System String
有关此成员的说明，请参见 ITypedList..::.GetListName。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 ITypedList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 ITypedList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.OnListChanged 方法

DataView
.
.
::
.
OnListChanged 方法
DataView 类

引发 ListChanged 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnListChanged ( _
    e As ListChangedEventArgs _
)
protected virtual void OnListChanged(
    ListChangedEventArgs e
)
protected:
virtual void OnListChanged(
    ListChangedEventArgs^ e
)
abstract OnListChanged :
        e:ListChangedEventArgs -> unit
override OnListChanged :
        e:ListChangedEventArgs -> unit

参数

e
类型： System.ComponentModel ListChangedEventArgs
包含事件数据的 ListChangedEventArgs。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Open 方法

DataView
.
.
::
.
Open 方法
DataView 类

打开一个 DataView。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub Open
protected void Open()
protected:
void Open()
member Open : unit -> unit

该方法允许您手动打开派生类中的 DataView。使用相应的 Close 方法关闭 DataView。 该方法允许您手动打开派生类中的 DataView。使用相应的 Close 方法关闭 DataView。

该属性仅供内部使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Reset 方法

DataView
.
.
::
.
Reset 方法
DataView 类

保留供内部使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub Reset
protected void Reset()
protected:
void Reset()
member Reset : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.ToTable 方法

DataView
.
.
::
.
ToTable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

根据现有 DataView 中的行，创建并返回一个新的 DataTable。

名称 说明
页首

返回的 DataTable 保持来自源 DataTable 的以下属性的值：Namespace、Prefix、CultureInfo()()() 和 CaseSensitive。所得到的 DataTable 中的每一列均包含基础 DataTable 中所有相应属性的相同副本。 返回的 DataTable 保持来自源 DataTable 的以下属性的值：Namespace、Prefix、CultureInfo()()() 和 CaseSensitive。所得到的 DataTable 中的每一列均包含基础 DataTable 中所有相应属性的相同副本。

返回的 DataTable 中的 DataRow 实例将包含与 CLR 语义一致的值。也就是说，对于用户定义的类型以外的所有数据类型，相应列值都是通过值进行复制的。对于用户定义的数据类型，列值是通过引用复制的。 返回的 DataTable 中的 DataRow 实例将包含与 CLR 语义一致的值。也就是说，对于用户定义的类型以外的所有数据类型，相应列值都是通过值进行复制的。对于用户定义的数据类型，列值是通过引用复制的。 返回的 DataTable 中的 DataRow 实例将包含与 CLR 语义一致的值。也就是说，对于用户定义的类型以外的所有数据类型，相应列值都是通过值进行复制的。对于用户定义的数据类型，列值是通过引用复制的。

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.ToTable 方法

DataView
.
.
::
.
ToTable 方法
DataView 类

根据现有 DataView 中的行，创建并返回一个新的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ToTable As DataTable
public DataTable ToTable()
public:
DataTable^ ToTable()
member ToTable : unit -> DataTable

返回值

类型： System.Data DataTable
一个新的 DataTable 实例，其中包含所请求的行和列。

由于此方法不允许指定输出 DataTable 的名称，因此其名称与源 DataTable 相同。由于此方法不允许指定可用列的子集，因此输出表与输入表包含相同的列。 由于此方法不允许指定输出 DataTable 的名称，因此其名称与源 DataTable 相同。由于此方法不允许指定可用列的子集，因此输出表与输入表包含相同的列。

下面的控制台应用程序示例创建一个 DataTable，用数据填充 DataTable，并根据原始数据创建一个筛选视图，最后创建一个包含筛选出的行的 DataTable。

Private Sub DemonstrateDataView()
    ' Create a DataTable with three columns.
    Dim table As DataTable = New DataTable("NewTable")
    Console.WriteLine("Original table name: " & table.TableName)
    Dim column As DataColumn = New DataColumn("ID", GetType(System.Int32))
    table.Columns.Add(column)

    column = New DataColumn("Category", GetType(System.String))
    table.Columns.Add(column)

    column = New DataColumn("Product", GetType(System.String))
    table.Columns.Add(column)

    column = New DataColumn("QuantityInStock", GetType(System.Int32))
    table.Columns.Add(column)

    ' Add some items.
    Dim row As DataRow = table.NewRow()
    row.ItemArray = New Object() {1, "Fruit", "Apple", 14}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {2, "Fruit", "Orange", 27}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {3, "Bread", "Muffin", 23}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {4, "Fish", "Salmon", 12}
    table.Rows.Add(row)

    ' Mark all rows as "accepted". Not required
    ' for this particular example.
    table.AcceptChanges()

    ' Print current table values.
    PrintTableOrView(table, "Current Values in Table")

    Dim view As DataView = New DataView(table)
    view.RowFilter = "QuantityInStock > 15"
    PrintTableOrView(view, "Current Values in View")

    Dim newTable As DataTable = view.ToTable()
    PrintTableOrView(newTable, "Table created from filtered DataView")
    Console.WriteLine("New table name: " & newTable.TableName)

    Console.WriteLine("Press any key to continue.")
    Console.ReadKey()
End Sub

Private Sub PrintTableOrView(ByVal dv As DataView, ByVal label As String)
    Dim sw As System.IO.StringWriter
    Dim output As String
    Dim table As DataTable = dv.Table

    Console.WriteLine(label)

    ' Loop through each row in the view.
    For Each rowView As DataRowView In dv
        sw = New System.IO.StringWriter

        ' Loop through each column.
        For Each col As DataColumn In table.Columns
            ' Output the value of each column's data.
            sw.Write(rowView(col.ColumnName).ToString() & ", ")
        Next
        output = sw.ToString
        ' Trim off the trailing ", ", so the output looks correct.
        If output.Length > 2 Then
            output = output.Substring(0, output.Length - 2)
        End If
        ' Display the row in the console window.
        Console.WriteLine(output)
    Next
    Console.WriteLine()
End Sub

Private Sub PrintTableOrView(ByVal table As DataTable, ByVal label As String)
    Dim sw As System.IO.StringWriter
    Dim output As String

    Console.WriteLine(label)

    ' Loop through each row in the table.
    For Each row As DataRow In table.Rows
        sw = New System.IO.StringWriter
        ' Loop through each column.
        For Each col As DataColumn In table.Columns
            ' Output the value of each column's data.
            sw.Write(row(col).ToString() & ", ")
        Next
        output = sw.ToString
        ' Trim off the trailing ", ", so the output looks correct.
        If output.Length > 2 Then
            output = output.Substring(0, output.Length - 2)
        End If
        ' Display the row in the console window.
        Console.WriteLine(output)
    Next
    Console.WriteLine()
End Sub

private static void DemonstrateDataView()
{
    // Create a DataTable with three columns.
    DataTable table = new DataTable("NewTable");
    Console.WriteLine("Original table name: " + table.TableName);
    DataColumn column = new DataColumn("ID", typeof(System.Int32));
    table.Columns.Add(column);

    column = new DataColumn("Category", typeof(System.String));
    table.Columns.Add(column);

    column = new DataColumn("Product", typeof(System.String));
    table.Columns.Add(column);

    column = new DataColumn("QuantityInStock", typeof(System.Int32));
    table.Columns.Add(column);

    // Add some items.
    DataRow row = table.NewRow();
    row.ItemArray = new object[] { 1, "Fruit", "Apple", 14 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 2, "Fruit", "Orange", 27 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 3, "Bread", "Muffin", 23 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 4, "Fish", "Salmon", 12 };
    table.Rows.Add(row);

    // Mark all rows as "accepted". Not really required
    // for this particular example.
    table.AcceptChanges();

    // Print current table values.
    PrintTableOrView(table, "Current Values in Table");

    DataView view = new DataView(table);
    view.RowFilter = "QuantityInStock > 15";
    PrintTableOrView(view, "Current Values in View");

    DataTable newTable = view.ToTable();
    PrintTableOrView(newTable, "Table created from filtered DataView");
    Console.WriteLine("New table name: " + newTable.TableName);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void PrintTableOrView(DataView dv, string label)
{
    System.IO.StringWriter sw;
    string output;
    DataTable table = dv.Table;

    Console.WriteLine(label);

    // Loop through each row in the view.
    foreach (DataRowView rowView in dv)
    {
        sw = new System.IO.StringWriter();

        // Loop through each column.
        foreach (DataColumn col in table.Columns)
        {
            // Output the value of each column's data.
            sw.Write(rowView[col.ColumnName].ToString() + ", ");
        }
        output = sw.ToString();
        // Trim off the trailing ", ", so the output looks correct.
        if (output.Length > 2)
        {
            output = output.Substring(0, output.Length - 2);
        }
        // Display the row in the console window.
        Console.WriteLine(output);
    }
    Console.WriteLine();
}

private static void PrintTableOrView(DataTable table, string label)
{
    System.IO.StringWriter sw;
    string output;

    Console.WriteLine(label);

    // Loop through each row in the table.
    foreach (DataRow row in table.Rows)
    {
        sw = new System.IO.StringWriter();
        // Loop through each column.
        foreach (DataColumn col in table.Columns)
        {
            // Output the value of each column's data.
            sw.Write(row[col].ToString() + ", ");
        }
        output = sw.ToString();
        // Trim off the trailing ", ", so the output looks correct.
        if (output.Length > 2)
        {
            output = output.Substring(0, output.Length - 2);
        }
        // Display the row in the console window.
        Console.WriteLine(output);
    } //
    Console.WriteLine();
}

该示例在控制台窗口中显示以下文本：

Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12

Current Values in View
2, Fruit, Orange, 27
3, Bread, Muffin, 23

Table created from filtered DataView
2, Fruit, Orange, 27
3, Bread, Muffin, 23

New table name: NewTable

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
ToTable 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.ToTable 方法 (String)

DataView
.
.
::
.
ToTable 方法 (String)
DataView 类

根据现有 DataView 中的行，创建并返回一个新的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ToTable ( _
    tableName As String _
) As DataTable
public DataTable ToTable(
    string tableName
)
public:
DataTable^ ToTable(
    String^ tableName
)
member ToTable :
        tableName:string -> DataTable

参数

tableName
类型： System String
返回的 DataTable 的名称。

返回值

类型： System.Data DataTable
一个新的 DataTable 实例，其中包含所请求的行和列。

由于此方法不允许指定可用列的子集，因此输出表与输入表包含相同的列。

下面的控制台应用程序示例创建一个 DataTable，用数据填充 DataTable，并根据原始数据创建一个筛选视图，最后用一个新名称创建包含筛选出的行的 DataTable。

Private Sub DemonstrateDataView()
    ' Create a DataTable with three columns.
    Dim table As DataTable = New DataTable("NewTable")
    Console.WriteLine("Original table name: " & table.TableName)
    Dim column As DataColumn = New DataColumn("ID", GetType(System.Int32))
    table.Columns.Add(column)

    column = New DataColumn("Category", GetType(System.String))
    table.Columns.Add(column)

    column = New DataColumn("Product", GetType(System.String))
    table.Columns.Add(column)

    column = New DataColumn("QuantityInStock", GetType(System.Int32))
    table.Columns.Add(column)

    ' Add some items.
    Dim row As DataRow = table.NewRow()
    row.ItemArray = New Object() {1, "Fruit", "Apple", 14}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {2, "Fruit", "Orange", 27}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {3, "Bread", "Muffin", 23}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {4, "Fish", "Salmon", 12}
    table.Rows.Add(row)

    ' Mark all rows as "accepted". Not required
    ' for this particular example.
    table.AcceptChanges()

    ' Print current table values.
    PrintTableOrView(table, "Current Values in Table")

    Dim view As DataView = New DataView(table)
    view.RowFilter = "QuantityInStock > 15"
    PrintTableOrView(view, "Current Values in View")

    Dim newTable As DataTable = view.ToTable("FilteredTable")
    PrintTableOrView(newTable, "Table created from filtered DataView")
    Console.WriteLine("New table name: " & newTable.TableName)

    Console.WriteLine("Press any key to continue.")
    Console.ReadKey()
End Sub

Private Sub PrintTableOrView(ByVal dv As DataView, ByVal label As String)
    Dim sw As System.IO.StringWriter
    Dim output As String
    Dim table As DataTable = dv.Table

    Console.WriteLine(label)

    ' Loop through each row in the view.
    For Each rowView As DataRowView In dv
        sw = New System.IO.StringWriter

        ' Loop through each column.
        For Each col As DataColumn In table.Columns
            ' Output the value of each column's data.
            sw.Write(rowView(col.ColumnName).ToString() & ", ")
        Next
        output = sw.ToString
        ' Trim off the trailing ", ", so the output looks correct.
        If output.Length > 2 Then
            output = output.Substring(0, output.Length - 2)
        End If
        ' Display the row in the console window.
        Console.WriteLine(output)
    Next
    Console.WriteLine()
End Sub

Private Sub PrintTableOrView(ByVal table As DataTable, ByVal label As String)
    Dim sw As System.IO.StringWriter
    Dim output As String

    Console.WriteLine(label)

    ' Loop through each row in the table.
    For Each row As DataRow In table.Rows
        sw = New System.IO.StringWriter
        ' Loop through each column.
        For Each col As DataColumn In table.Columns
            ' Output the value of each column's data.
            sw.Write(row(col).ToString() & ", ")
        Next
        output = sw.ToString
        ' Trim off the trailing ", ", so the output looks correct.
        If output.Length > 2 Then
            output = output.Substring(0, output.Length - 2)
        End If
        ' Display the row in the console window.
        Console.WriteLine(output)
    Next
    Console.WriteLine()
End Sub

private static void DemonstrateDataView()
{
    // Create a DataTable with three columns.
    DataTable table = new DataTable("NewTable");
    Console.WriteLine("Original table name: " + table.TableName);
    DataColumn column = new DataColumn("ID", typeof(System.Int32));
    table.Columns.Add(column);

    column = new DataColumn("Category", typeof(System.String));
    table.Columns.Add(column);

    column = new DataColumn("Product", typeof(System.String));
    table.Columns.Add(column);

    column = new DataColumn("QuantityInStock", typeof(System.Int32));
    table.Columns.Add(column);

    // Add some items.
    DataRow row = table.NewRow();
    row.ItemArray = new object[] { 1, "Fruit", "Apple", 14 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 2, "Fruit", "Orange", 27 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 3, "Bread", "Muffin", 23 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 4, "Fish", "Salmon", 12 };
    table.Rows.Add(row);

    // Mark all rows as "accepted". Not really required
    // for this particular example.
    table.AcceptChanges();

    // Print current table values.
    PrintTableOrView(table, "Current Values in Table");

    DataView view = new DataView(table);
    view.RowFilter = "QuantityInStock > 15";
    PrintTableOrView(view, "Current Values in View");

    DataTable newTable = view.ToTable("FilteredTable");
    PrintTableOrView(newTable, "Table created from filtered DataView");
    Console.WriteLine("New table name: " + newTable.TableName);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void PrintTableOrView(DataView dv, string label)
{
    System.IO.StringWriter sw;
    string output;
    DataTable table = dv.Table;

    Console.WriteLine(label);

    // Loop through each row in the view.
    foreach (DataRowView rowView in dv)
    {
        sw = new System.IO.StringWriter();

        // Loop through each column.
        foreach (DataColumn col in table.Columns)
        {
            // Output the value of each column's data.
            sw.Write(rowView[col.ColumnName].ToString() + ", ");
        }
        output = sw.ToString();
        // Trim off the trailing ", ", so the output looks correct.
        if (output.Length > 2)
        {
            output = output.Substring(0, output.Length - 2);
        }
        // Display the row in the console window.
        Console.WriteLine(output);
    }
    Console.WriteLine();
}

private static void PrintTableOrView(DataTable table, string label)
{
    System.IO.StringWriter sw;
    string output;

    Console.WriteLine(label);

    // Loop through each row in the table.
    foreach (DataRow row in table.Rows)
    {
        sw = new System.IO.StringWriter();
        // Loop through each column.
        foreach (DataColumn col in table.Columns)
        {
            // Output the value of each column's data.
            sw.Write(row[col].ToString() + ", ");
        }
        output = sw.ToString();
        // Trim off the trailing ", ", so the output looks correct.
        if (output.Length > 2)
        {
            output = output.Substring(0, output.Length - 2);
        }
        // Display the row in the console window.
        Console.WriteLine(output);
    } //
    Console.WriteLine();
}

该示例在控制台窗口中显示以下文本：

Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12

Current Values in View
2, Fruit, Orange, 27
3, Bread, Muffin, 23

Table created from filtered DataView
2, Fruit, Orange, 27
3, Bread, Muffin, 23

New table name: FilteredTable

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
ToTable 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.ToTable 方法 (Boolean, array<String >[]()[])

DataView
.
.
::
.
ToTable 方法 (Boolean,
array<
String
>
[]
()
[]
)
DataView 类

根据现有 DataView 中的行，创建并返回一个新的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ToTable ( _
    distinct As Boolean, _
    ParamArray columnNames As String() _
) As DataTable
public DataTable ToTable(
    bool distinct,
    params string[] columnNames
)
public:
DataTable^ ToTable(
    bool distinct,
    ... array<String^>^ columnNames
)
member ToTable :
        distinct:bool *
        columnNames:string[] -> DataTable

参数

distinct
类型： System Boolean
如果为 true，则返回的 DataTable 将包含所有列都具有不同值的行。默认值为 false。 如果为 true，则返回的 DataTable 将包含所有列都具有不同值的行。默认值为 false。
columnNames
类型：
array<
System String
>
[]
()
[]

一个字符串数组，包含要包括在返回的 DataTable 中的列名的列表。DataTable 包含指定的列，其顺序与这些列在该数组中的顺序相同。 一个字符串数组，包含要包括在返回的 DataTable 中的列名的列表。DataTable 包含指定的列，其顺序与这些列在该数组中的顺序相同。

返回值

类型： System.Data DataTable
一个新的 DataTable 实例，其中包含所请求的行和列。

由于此方法不允许指定输出 DataTable 的名称，因此其名称与源 DataTable 的名称相同。

下面的控制台应用程序示例创建一个 DataTable，用数据填充 DataTable，对 DataView 进行排序，最后创建一个仅包含两个列的 DataTable，这两个列仅限于所有值都唯一的行。

Private Sub DemonstrateDataView()
    ' Create a DataTable with three columns.
    Dim table As DataTable = New DataTable("NewTable")
    Console.WriteLine("Original table name: " & table.TableName)
    Dim column As DataColumn = New DataColumn("ID", GetType(System.Int32))
    table.Columns.Add(column)

    column = New DataColumn("Category", GetType(System.String))
    table.Columns.Add(column)

    column = New DataColumn("Product", GetType(System.String))
    table.Columns.Add(column)

    column = New DataColumn("QuantityInStock", GetType(System.Int32))
    table.Columns.Add(column)

    ' Add some items.
    Dim row As DataRow = table.NewRow()
    row.ItemArray = New Object() {1, "Fruit", "Apple", 14}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {2, "Fruit", "Orange", 27}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {3, "Bread", "Muffin", 23}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {4, "Fish", "Salmon", 12}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {5, "Fish", "Salmon", 15}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {6, "Bread", "Croissant", 23}
    table.Rows.Add(row)

    ' Mark all rows as "accepted". Not required
    ' for this particular example.
    table.AcceptChanges()

    ' Print current table values.
    PrintTableOrView(table, "Current Values in Table")

    Dim view As DataView = New DataView(table)
    view.Sort = "Category"
    PrintTableOrView(view, "Current Values in View")

    Dim newTable As DataTable = view.ToTable( _
        True, "Category", "QuantityInStock")
    PrintTableOrView(newTable, "Table created from sorted DataView")
    Console.WriteLine("New table name: " & newTable.TableName)

    Console.WriteLine("Press any key to continue.")
    Console.ReadKey()
End Sub

Private Sub PrintTableOrView(ByVal dv As DataView, ByVal label As String)
    Dim sw As System.IO.StringWriter
    Dim output As String
    Dim table As DataTable = dv.Table

    Console.WriteLine(label)

    ' Loop through each row in the view.
    For Each rowView As DataRowView In dv
        sw = New System.IO.StringWriter

        ' Loop through each column.
        For Each col As DataColumn In table.Columns
            ' Output the value of each column's data.
            sw.Write(rowView(col.ColumnName).ToString() & ", ")
        Next
        output = sw.ToString
        ' Trim off the trailing ", ", so the output looks correct.
        If output.Length > 2 Then
            output = output.Substring(0, output.Length - 2)
        End If
        ' Display the row in the console window.
        Console.WriteLine(output)
    Next
    Console.WriteLine()
End Sub

Private Sub PrintTableOrView(ByVal table As DataTable, ByVal label As String)
    Dim sw As System.IO.StringWriter
    Dim output As String

    Console.WriteLine(label)

    ' Loop through each row in the table.
    For Each row As DataRow In table.Rows
        sw = New System.IO.StringWriter
        ' Loop through each column.
        For Each col As DataColumn In table.Columns
            ' Output the value of each column's data.
            sw.Write(row(col).ToString() & ", ")
        Next
        output = sw.ToString
        ' Trim off the trailing ", ", so the output looks correct.
        If output.Length > 2 Then
            output = output.Substring(0, output.Length - 2)
        End If
        ' Display the row in the console window.
        Console.WriteLine(output)
    Next
    Console.WriteLine()
End Sub

private static void DemonstrateDataView()
{
    // Create a DataTable with three columns.
    DataTable table = new DataTable("NewTable");
    Console.WriteLine("Original table name: " + table.TableName);
    DataColumn column = new DataColumn("ID", typeof(System.Int32));
    table.Columns.Add(column);

    column = new DataColumn("Category", typeof(System.String));
    table.Columns.Add(column);

    column = new DataColumn("Product", typeof(System.String));
    table.Columns.Add(column);

    column = new DataColumn("QuantityInStock", typeof(System.Int32));
    table.Columns.Add(column);

    // Add some items.
    DataRow row = table.NewRow();
    row.ItemArray = new object[] { 1, "Fruit", "Apple", 14 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 2, "Fruit", "Orange", 27 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 3, "Bread", "Muffin", 23 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 4, "Fish", "Salmon", 12 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 5, "Fish", "Salmon", 15 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 6, "Bread", "Croissant", 23};
    table.Rows.Add(row);

    // Mark all rows as "accepted". Not required
    // for this particular example.
    table.AcceptChanges();

    // Print current table values.
    PrintTableOrView(table, "Current Values in Table");

    DataView view = new DataView(table);
    view.Sort = "Category";
    PrintTableOrView(view, "Current Values in View");

    DataTable newTable = view.ToTable(true, "Category", "QuantityInStock");
    PrintTableOrView(newTable, "Table created from sorted DataView");
    Console.WriteLine("New table name: " + newTable.TableName);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void PrintTableOrView(DataView dv, string label)
{
    System.IO.StringWriter sw;
    string output;
    DataTable table = dv.Table;

    Console.WriteLine(label);

    // Loop through each row in the view.
    foreach (DataRowView rowView in dv)
    {
        sw = new System.IO.StringWriter();

        // Loop through each column.
        foreach (DataColumn col in table.Columns)
        {
            // Output the value of each column's data.
            sw.Write(rowView[col.ColumnName].ToString() + ", ");
        }
        output = sw.ToString();
        // Trim off the trailing ", ", so the output looks correct.
        if (output.Length > 2)
        {
            output = output.Substring(0, output.Length - 2);
        }
        // Display the row in the console window.
        Console.WriteLine(output);
    }
    Console.WriteLine();
}

private static void PrintTableOrView(DataTable table, string label)
{
    System.IO.StringWriter sw;
    string output;

    Console.WriteLine(label);

    // Loop through each row in the table.
    foreach (DataRow row in table.Rows)
    {
        sw = new System.IO.StringWriter();
        // Loop through each column.
        foreach (DataColumn col in table.Columns)
        {
            // Output the value of each column's data.
            sw.Write(row[col].ToString() + ", ");
        }
        output = sw.ToString();
        // Trim off the trailing ", ", so the output looks correct.
        if (output.Length > 2)
        {
            output = output.Substring(0, output.Length - 2);
        }
        // Display the row in the console window.
        Console.WriteLine(output);
    } //
    Console.WriteLine();
}

该示例在控制台窗口中显示以下输出：

Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
6, Bread, Croissant, 23

Current Values in View
3, Bread, Muffin, 23
6, Bread, Croissant, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
1, Fruit, Apple, 14
2, Fruit, Orange, 27

Table created from sorted DataView
Bread, 23
Fish, 12
Fish, 15
Fruit, 14
Fruit, 27

New table name: NewTable

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
ToTable 重载
System.Data 命名空间


DataView ..::.ToTable 方法 (String, Boolean, array<String >[]()[])

DataView
.
.
::
.
ToTable 方法 (String, Boolean,
array<
String
>
[]
()
[]
)
DataView 类

根据现有 DataView 中的行，创建并返回一个新的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function ToTable ( _
    tableName As String, _
    distinct As Boolean, _
    ParamArray columnNames As String() _
) As DataTable
public DataTable ToTable(
    string tableName,
    bool distinct,
    params string[] columnNames
)
public:
DataTable^ ToTable(
    String^ tableName,
    bool distinct,
    ... array<String^>^ columnNames
)
member ToTable :
        tableName:string *
        distinct:bool *
        columnNames:string[] -> DataTable

参数

tableName
类型： System String
返回的 DataTable 的名称。
distinct
类型： System Boolean
如果为 true，则返回的 DataTable 将包含所有列都具有不同值的行。默认值为 false。 如果为 true，则返回的 DataTable 将包含所有列都具有不同值的行。默认值为 false。
columnNames
类型：
array<
System String
>
[]
()
[]

一个字符串数组，包含要包括在返回的 DataTable 中的列名的列表。DataTable 包含指定的列，其顺序与这些列在该数组中的顺序相同。 一个字符串数组，包含要包括在返回的 DataTable 中的列名的列表。DataTable 包含指定的列，其顺序与这些列在该数组中的顺序相同。

返回值

类型： System.Data DataTable
一个新的 DataTable 实例，其中包含所请求的行和列。

如果必须检索可用列的子集中的不同的值，请使用 ToTable 方法的此重载版本，为返回的 DataTable 指定一个新名称。如果不需要不同的行或列的子集，请参见 ToTable。 如果必须检索可用列的子集中的不同的值，请使用 ToTable 方法的此重载版本，为返回的 DataTable 指定一个新名称。如果不需要不同的行或列的子集，请参见 ToTable。

下面的控制台应用程序示例创建一个 DataTable，用数据填充 DataTable，对 DataView 进行排序，最后使用新的名称创建一个仅包含两个列的 DataTable，这两个列仅限于所有值都唯一的行。

Private Sub DemonstrateDataView()
    ' Create a DataTable with three columns.
    Dim table As DataTable = New DataTable("NewTable")
    Console.WriteLine("Original table name: " & table.TableName)
    Dim column As DataColumn = New DataColumn("ID", GetType(System.Int32))
    table.Columns.Add(column)

    column = New DataColumn("Category", GetType(System.String))
    table.Columns.Add(column)

    column = New DataColumn("Product", GetType(System.String))
    table.Columns.Add(column)

    column = New DataColumn("QuantityInStock", GetType(System.Int32))
    table.Columns.Add(column)

    ' Add some items.
    Dim row As DataRow = table.NewRow()
    row.ItemArray = New Object() {1, "Fruit", "Apple", 14}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {2, "Fruit", "Orange", 27}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {3, "Bread", "Muffin", 23}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {4, "Fish", "Salmon", 12}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {5, "Fish", "Salmon", 15}
    table.Rows.Add(row)

    row = table.NewRow()
    row.ItemArray = New Object() {6, "Bread", "Croissant", 23}
    table.Rows.Add(row)

    ' Mark all rows as "accepted". Not required
    ' for this particular example.
    table.AcceptChanges()

    ' Print current table values.
    PrintTableOrView(table, "Current Values in Table")

    Dim view As DataView = New DataView(table)
    view.Sort = "Category"
    PrintTableOrView(view, "Current Values in View")

    Dim newTable As DataTable = view.ToTable("UniqueData", _
        True, "Category", "QuantityInStock")
    PrintTableOrView(newTable, "Table created from sorted DataView")
    Console.WriteLine("New table name: " & newTable.TableName)

    Console.WriteLine("Press any key to continue.")
    Console.ReadKey()
End Sub

Private Sub PrintTableOrView(ByVal dv As DataView, ByVal label As String)
    Dim sw As System.IO.StringWriter
    Dim output As String
    Dim table As DataTable = dv.Table

    Console.WriteLine(label)

    ' Loop through each row in the view.
    For Each rowView As DataRowView In dv
        sw = New System.IO.StringWriter

        ' Loop through each column.
        For Each col As DataColumn In table.Columns
            ' Output the value of each column's data.
            sw.Write(rowView(col.ColumnName).ToString() & ", ")
        Next
        output = sw.ToString
        ' Trim off the trailing ", ", so the output looks correct.
        If output.Length > 2 Then
            output = output.Substring(0, output.Length - 2)
        End If
        ' Display the row in the console window.
        Console.WriteLine(output)
    Next
    Console.WriteLine()
End Sub

Private Sub PrintTableOrView(ByVal table As DataTable, ByVal label As String)
    Dim sw As System.IO.StringWriter
    Dim output As String

    Console.WriteLine(label)

    ' Loop through each row in the table.
    For Each row As DataRow In table.Rows
        sw = New System.IO.StringWriter
        ' Loop through each column.
        For Each col As DataColumn In table.Columns
            ' Output the value of each column's data.
            sw.Write(row(col).ToString() & ", ")
        Next
        output = sw.ToString
        ' Trim off the trailing ", ", so the output looks correct.
        If output.Length > 2 Then
            output = output.Substring(0, output.Length - 2)
        End If
        ' Display the row in the console window.
        Console.WriteLine(output)
    Next
    Console.WriteLine()
End Sub

private static void DemonstrateDataView()
{
    // Create a DataTable with three columns.
    DataTable table = new DataTable("NewTable");
    Console.WriteLine("Original table name: " + table.TableName);
    DataColumn column = new DataColumn("ID", typeof(System.Int32));
    table.Columns.Add(column);

    column = new DataColumn("Category", typeof(System.String));
    table.Columns.Add(column);

    column = new DataColumn("Product", typeof(System.String));
    table.Columns.Add(column);

    column = new DataColumn("QuantityInStock", typeof(System.Int32));
    table.Columns.Add(column);

    // Add some items.
    DataRow row = table.NewRow();
    row.ItemArray = new object[] { 1, "Fruit", "Apple", 14 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 2, "Fruit", "Orange", 27 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 3, "Bread", "Muffin", 23 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 4, "Fish", "Salmon", 12 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 5, "Fish", "Salmon", 15 };
    table.Rows.Add(row);

    row = table.NewRow();
    row.ItemArray = new object[] { 6, "Bread", "Croissant", 23};
    table.Rows.Add(row);

    // Mark all rows as "accepted". Not required
    // for this particular example.
    table.AcceptChanges();

    // Print current table values.
    PrintTableOrView(table, "Current Values in Table");

    DataView view = new DataView(table);
    view.Sort = "Category";
    PrintTableOrView(view, "Current Values in View");

    DataTable newTable = view.ToTable("UniqueData", true,
        "Category", "QuantityInStock");
    PrintTableOrView(newTable, "Table created from sorted DataView");
    Console.WriteLine("New table name: " + newTable.TableName);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void PrintTableOrView(DataView dv, string label)
{
    System.IO.StringWriter sw;
    string output;
    DataTable table = dv.Table;

    Console.WriteLine(label);

    // Loop through each row in the view.
    foreach (DataRowView rowView in dv)
    {
        sw = new System.IO.StringWriter();

        // Loop through each column.
        foreach (DataColumn col in table.Columns)
        {
            // Output the value of each column's data.
            sw.Write(rowView[col.ColumnName].ToString() + ", ");
        }
        output = sw.ToString();
        // Trim off the trailing ", ", so the output looks correct.
        if (output.Length > 2)
        {
            output = output.Substring(0, output.Length - 2);
        }
        // Display the row in the console window.
        Console.WriteLine(output);
    }
    Console.WriteLine();
}

private static void PrintTableOrView(DataTable table, string label)
{
    System.IO.StringWriter sw;
    string output;

    Console.WriteLine(label);

    // Loop through each row in the table.
    foreach (DataRow row in table.Rows)
    {
        sw = new System.IO.StringWriter();
        // Loop through each column.
        foreach (DataColumn col in table.Columns)
        {
            // Output the value of each column's data.
            sw.Write(row[col].ToString() + ", ");
        }
        output = sw.ToString();
        // Trim off the trailing ", ", so the output looks correct.
        if (output.Length > 2)
        {
            output = output.Substring(0, output.Length - 2);
        }
        // Display the row in the console window.
        Console.WriteLine(output);
    } //
    Console.WriteLine();
}

该示例在控制台窗口中显示以下输出：

Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
6, Bread, Croissant, 23

Current Values in View
3, Bread, Muffin, 23
6, Bread, Croissant, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
1, Fruit, Apple, 14
2, Fruit, Orange, 27

Table created from sorted DataView
Bread, 23
Fish, 12
Fish, 15
Fruit, 14
Fruit, 27

New table name: UniqueData

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
ToTable 重载
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.UpdateIndex 方法

DataView
.
.
::
.
UpdateIndex 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

保留供内部使用。

名称 说明
页首

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.UpdateIndex 方法

DataView
.
.
::
.
UpdateIndex 方法
DataView 类

保留供内部使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub UpdateIndex
protected void UpdateIndex()
protected:
void UpdateIndex()
member UpdateIndex : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
UpdateIndex 重载
System.Data 命名空间


DataView ..::.UpdateIndex 方法 (Boolean)

DataView
.
.
::
.
UpdateIndex 方法 (Boolean)
DataView 类

保留供内部使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub UpdateIndex ( _
    force As Boolean _
)
protected virtual void UpdateIndex(
    bool force
)
protected:
virtual void UpdateIndex(
    bool force
)
abstract UpdateIndex :
        force:bool -> unit
override UpdateIndex :
        force:bool -> unit

参数

force
类型： System Boolean
保留供内部使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
UpdateIndex 重载
System.Data 命名空间


DataView 属性

DataView 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

DataView 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataView 类
System.Data 命名空间


DataView ..::.AllowDelete 属性

DataView
.
.
::
.
AllowDelete 属性
DataView 类

设置或获取一个值，该值指示是否允许删除。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property AllowDelete As Boolean
    Get
    Set
public bool AllowDelete { get; set; }
public:
property bool AllowDelete {
    bool get ();
    void set (bool value);
}
member AllowDelete : bool with get, set

属性值

类型： System Boolean
如果允许删除，则为 true；否则为 false。

下面的示例先检查 AllowDelete 属性，然后从 DataView 中删除 DataRow。

Private Sub CheckAllowDelete(rowToDelete As DataRow)
    Dim view As DataView = New DataView(DataSet1.Tables("Suppliers"))
    If view.AllowDelete Then
    rowToDelete.Delete()
    End If
End Sub

private void CheckAllowDelete(DataRow rowToDelete)
{
    DataView view = new DataView(DataSet1.Tables["Suppliers"]);
    if (view.AllowDelete)
        rowToDelete.Delete();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.AllowEdit 属性

DataView
.
.
::
.
AllowEdit 属性
DataView 类

获取或设置一个值，该值指示是否允许编辑。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property AllowEdit As Boolean
    Get
    Set
public bool AllowEdit { get; set; }
public:
property bool AllowEdit {
    bool get ();
    void set (bool value);
}
member AllowEdit : bool with get, set

属性值

类型： System Boolean
如果允许编辑，则为 true；否则为 false。

下面的示例先调用 AllowEdit 方法，然后在 DataView 中编辑行。

Private Sub EditRow(view As DataView)
    view.AllowEdit = True
    view(0).BeginEdit
    view(0)("FirstName") = "Mary"
    view(0)("LastName") = "Jones"
    view(0).EndEdit
End Sub

private void EditRow(DataView view)
{
    view.AllowEdit = true;
    view[0].BeginEdit();
    view[0]["FirstName"] = "Mary";
    view[0]["LastName"] = "Jones";
    view[0].EndEdit();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
AllowDelete
AllowNew
BeginEdit

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.AllowNew 属性

DataView
.
.
::
.
AllowNew 属性
DataView 类

获取或设置一个值，该值指示是否可以使用 AddNew 方法添加新行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property AllowNew As Boolean
    Get
    Set
public bool AllowNew { get; set; }
public:
property bool AllowNew {
    bool get ();
    void set (bool value);
}
member AllowNew : bool with get, set

属性值

类型： System Boolean
如果可添加新行，则为 true；否则为 false。

下面的示例先将 AllowNew 属性设置为真，然后使用 AddNew 方法添加新行。

Private Sub AddNew()
    Dim table As DataTable = New DataTable

    ' Not shown: code to populate DataTable.

    Dim view As DataView = New DataView(table)
    view.AllowNew = True
    Dim rowView As DataRowView
    rowView = view.AddNew
    rowView("ProductName") = "New Product Name"
End Sub

private void AddNew()
{
    DataTable table = new DataTable();

    // Not shown: code to populate DataTable.

    DataView view = new DataView(table);
    view.AllowNew = true;
    DataRowView rowView = view.AddNew();
    rowView["ProductName"] = "New Product Name";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
AddNew
DataRowView

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.ApplyDefaultSort 属性

DataView
.
.
::
.
ApplyDefaultSort 属性
DataView 类

获取或设置一个值，该值指示是否使用默认排序。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property ApplyDefaultSort As Boolean
    Get
    Set
public bool ApplyDefaultSort { get; set; }
public:
property bool ApplyDefaultSort {
    bool get ();
    void set (bool value);
}
member ApplyDefaultSort : bool with get, set

属性值

类型： System Boolean
如果使用默认排序，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Count 属性

DataView
.
.
::
.
Count 属性
DataView 类

在应用 RowFilter 和 RowStateFilter 之后，获取 DataView 中记录的数量。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property Count As Integer
    Get
[BrowsableAttribute(false)]
public int Count { get; }
[BrowsableAttribute(false)]
public:
virtual property int Count {
    int get () sealed;
}
[<BrowsableAttribute(false)>]
abstract Count : int
[<BrowsableAttribute(false)>]
override Count : int

属性值

类型： System Int32
DataView 中记录的数量。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.DataViewManager 属性

DataView
.
.
::
.
DataViewManager 属性
DataView 类

获取与此视图关联的 DataViewManager。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property DataViewManager As DataViewManager
    Get
[BrowsableAttribute(false)]
public DataViewManager DataViewManager { get; }
[BrowsableAttribute(false)]
public:
property DataViewManager^ DataViewManager {
    DataViewManager^ get ();
}
[<BrowsableAttribute(false)>]
member DataViewManager : DataViewManager

属性值

类型： System.Data DataViewManager
DataViewManager，已用它创建了此视图。如果这是 DataTable 的默认 DataView，则 DataViewManager 属性返回 DataSet 的默认 DataViewManager。否则，如果 DataView 的创建没有使用 DataViewManager，则该属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 DataViewManager，已用它创建了此视图。如果这是 DataTable 的默认 DataView，则 DataViewManager 属性返回 DataSet 的默认 DataViewManager。否则，如果 DataView 的创建没有使用 DataViewManager，则该属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 DataViewManager，已用它创建了此视图。如果这是 DataTable 的默认 DataView，则 DataViewManager 属性返回 DataSet 的默认 DataViewManager。否则，如果 DataView 的创建没有使用 DataViewManager，则该属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.IBindingList ..::.AllowEdit 属性

DataView
.
.
::
.
IBindingList
.
.
::
.
AllowEdit 属性
DataView 类

有关此成员的说明，请参见 IBindingList..::.AllowEdit。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property AllowEdit As Boolean
    Implements IBindingList.AllowEdit
    Get
bool IBindingList.AllowEdit { get; }
private:
virtual property bool AllowEdit {
    bool get () sealed = IBindingList::AllowEdit::get;
}
private abstract AllowEdit : bool
private override AllowEdit : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.AllowEdit。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.AllowNew 属性

DataView
.
.
::
.
IBindingList
.
.
::
.
AllowNew 属性
DataView 类

有关此成员的说明，请参见 IBindingList..::.AllowNew。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property AllowNew As Boolean
    Implements IBindingList.AllowNew
    Get
bool IBindingList.AllowNew { get; }
private:
virtual property bool AllowNew {
    bool get () sealed = IBindingList::AllowNew::get;
}
private abstract AllowNew : bool
private override AllowNew : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.AllowNew。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.AllowRemove 属性

DataView
.
.
::
.
IBindingList
.
.
::
.
AllowRemove 属性
DataView 类

有关此成员的说明，请参见 IBindingList..::.AllowRemove。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property AllowRemove As Boolean
    Implements IBindingList.AllowRemove
    Get
bool IBindingList.AllowRemove { get; }
private:
virtual property bool AllowRemove {
    bool get () sealed = IBindingList::AllowRemove::get;
}
private abstract AllowRemove : bool
private override AllowRemove : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.AllowRemove。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.IsSorted 属性

DataView
.
.
::
.
IBindingList
.
.
::
.
IsSorted 属性
DataView 类

有关此成员的说明，请参见 IBindingList..::.IsSorted。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsSorted As Boolean
    Implements IBindingList.IsSorted
    Get
bool IBindingList.IsSorted { get; }
private:
virtual property bool IsSorted {
    bool get () sealed = IBindingList::IsSorted::get;
}
private abstract IsSorted : bool
private override IsSorted : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.IsSorted。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.SortDirection 属性

DataView
.
.
::
.
IBindingList
.
.
::
.
SortDirection 属性
DataView 类

有关此成员的说明，请参见 IBindingList..::.SortDirection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SortDirection As ListSortDirection
    Implements IBindingList.SortDirection
    Get
ListSortDirection IBindingList.SortDirection { get; }
private:
virtual property ListSortDirection SortDirection {
    ListSortDirection get () sealed = IBindingList::SortDirection::get;
}
private abstract SortDirection : ListSortDirection
private override SortDirection : ListSortDirection

属性值

类型： System.ComponentModel ListSortDirection
有关此成员的说明，请参见 IBindingList..::.SortDirection。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.SortProperty 属性

DataView
.
.
::
.
IBindingList
.
.
::
.
SortProperty 属性
DataView 类

有关此成员的说明，请参见 IBindingList..::.SortProperty。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SortProperty As PropertyDescriptor
    Implements IBindingList.SortProperty
    Get
PropertyDescriptor IBindingList.SortProperty { get; }
private:
virtual property PropertyDescriptor^ SortProperty {
    PropertyDescriptor^ get () sealed = IBindingList::SortProperty::get;
}
private abstract SortProperty : PropertyDescriptor
private override SortProperty : PropertyDescriptor

属性值

类型： System.ComponentModel PropertyDescriptor
有关此成员的说明，请参见 IBindingList..::.SortProperty。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.SupportsChangeNotification 属性

DataView
.
.
::
.
IBindingList
.
.
::
.
SupportsChangeNotification 属性
DataView 类

有关此成员的说明，请参见 IBindingList..::.SupportsChangeNotification。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SupportsChangeNotification As Boolean
    Implements IBindingList.SupportsChangeNotification
    Get
bool IBindingList.SupportsChangeNotification { get; }
private:
virtual property bool SupportsChangeNotification {
    bool get () sealed = IBindingList::SupportsChangeNotification::get;
}
private abstract SupportsChangeNotification : bool
private override SupportsChangeNotification : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.SupportsChangeNotification。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.SupportsSearching 属性

DataView
.
.
::
.
IBindingList
.
.
::
.
SupportsSearching 属性
DataView 类

有关此成员的说明，请参见 IBindingList..::.SupportsSearching。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SupportsSearching As Boolean
    Implements IBindingList.SupportsSearching
    Get
bool IBindingList.SupportsSearching { get; }
private:
virtual property bool SupportsSearching {
    bool get () sealed = IBindingList::SupportsSearching::get;
}
private abstract SupportsSearching : bool
private override SupportsSearching : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.SupportsSearching。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingList ..::.SupportsSorting 属性

DataView
.
.
::
.
IBindingList
.
.
::
.
SupportsSorting 属性
DataView 类

有关此成员的说明，请参见 IBindingList..::.SupportsSorting。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SupportsSorting As Boolean
    Implements IBindingList.SupportsSorting
    Get
bool IBindingList.SupportsSorting { get; }
private:
virtual property bool SupportsSorting {
    bool get () sealed = IBindingList::SupportsSorting::get;
}
private abstract SupportsSorting : bool
private override SupportsSorting : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.SupportsSorting。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingListView ..::.Filter 属性

DataView
.
.
::
.
IBindingListView
.
.
::
.
Filter 属性
DataView 类

有关此成员的说明，请参见 IBindingListView..::.Filter。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Property Filter As String Implements IBindingListView.Filter
    Get
    Set
string IBindingListView.Filter { get; set; }
private:
virtual property String^ Filter {
    String^ get () sealed = IBindingListView::Filter::get;
    void set (String^ value) sealed = IBindingListView::Filter::set;
}
private abstract Filter : string with get, set
private override Filter : string with get, set

属性值

类型： System String
有关此成员的说明，请参见 IBindingListView..::.Filter。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingListView ..::.SortDescriptions 属性

DataView
.
.
::
.
IBindingListView
.
.
::
.
SortDescriptions 属性
DataView 类

有关此成员的说明，请参见 IBindingListView..::.SortDescriptions。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SortDescriptions As ListSortDescriptionCollection
    Implements IBindingListView.SortDescriptions
    Get
ListSortDescriptionCollection IBindingListView.SortDescriptions { get; }
private:
virtual property ListSortDescriptionCollection^ SortDescriptions {
    ListSortDescriptionCollection^ get () sealed = IBindingListView::SortDescriptions::get;
}
private abstract SortDescriptions : ListSortDescriptionCollection
private override SortDescriptions : ListSortDescriptionCollection

属性值

类型： System.ComponentModel ListSortDescriptionCollection
有关此成员的说明，请参见 IBindingListView..::.SortDescriptions。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingListView ..::.SupportsAdvancedSorting 属性

DataView
.
.
::
.
IBindingListView
.
.
::
.
SupportsAdvancedSorting 属性
DataView 类

有关此成员的说明，请参见 IBindingListView..::.SupportsAdvancedSorting。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SupportsAdvancedSorting As Boolean
    Implements IBindingListView.SupportsAdvancedSorting
    Get
bool IBindingListView.SupportsAdvancedSorting { get; }
private:
virtual property bool SupportsAdvancedSorting {
    bool get () sealed = IBindingListView::SupportsAdvancedSorting::get;
}
private abstract SupportsAdvancedSorting : bool
private override SupportsAdvancedSorting : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingListView..::.SupportsAdvancedSorting。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IBindingListView ..::.SupportsFiltering 属性

DataView
.
.
::
.
IBindingListView
.
.
::
.
SupportsFiltering 属性
DataView 类

有关此成员的说明，请参见 IBindingListView..::.SupportsFiltering。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SupportsFiltering As Boolean
    Implements IBindingListView.SupportsFiltering
    Get
bool IBindingListView.SupportsFiltering { get; }
private:
virtual property bool SupportsFiltering {
    bool get () sealed = IBindingListView::SupportsFiltering::get;
}
private abstract SupportsFiltering : bool
private override SupportsFiltering : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingListView..::.SupportsFiltering。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IBindingListView 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.ICollection ..::.IsSynchronized 属性

DataView
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
DataView 类

有关此成员的说明，请参见 ICollection..::.IsSynchronized。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 ICollection..::.IsSynchronized。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 ICollection 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 ICollection 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.ICollection ..::.SyncRoot 属性

DataView
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
DataView 类

有关此成员的说明，请参见 ICollection..::.SyncRoot。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
有关此成员的说明，请参见 ICollection..::.SyncRoot。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 ICollection 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 ICollection 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.IsFixedSize 属性

DataView
.
.
::
.
IList
.
.
::
.
IsFixedSize 属性
DataView 类

有关此成员的说明，请参见 IList..::.IsFixedSize。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsFixedSize As Boolean
    Implements IList.IsFixedSize
    Get
bool IList.IsFixedSize { get; }
private:
virtual property bool IsFixedSize {
    bool get () sealed = IList::IsFixedSize::get;
}
private abstract IsFixedSize : bool
private override IsFixedSize : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IList..::.IsFixedSize。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.IsReadOnly 属性

DataView
.
.
::
.
IList
.
.
::
.
IsReadOnly 属性
DataView 类

有关此成员的说明，请参见 IList..::.IsReadOnly。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements IList.IsReadOnly
    Get
bool IList.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = IList::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IList..::.IsReadOnly。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IList ..::.Item 属性

DataView
.
.
::
.
IList
.
.
::
.
Item 属性
DataView 类

有关此成员的说明，请参见 IList..::.Item。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Property Item ( _
    recordIndex As Integer _
) As Object Implements IList.Item
    Get
    Set
Object IList.this[
    int recordIndex
] { get; set; }
private:
virtual property Object^ Item[int recordIndex] {
    Object^ get (int recordIndex) sealed = IList::Item::get;
    void set (int recordIndex, Object^ value) sealed = IList::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

recordIndex
类型： System Int32
一个 [System.Int32] 值。

属性值

类型： System Object
有关此成员的说明，请参见 IList..::.Item。

实现

此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。 此成员是显式的接口成员实现。只能在 DataView 实例强制转换为 IList 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间


DataView ..::.IsInitialized 属性

DataView
.
.
::
.
IsInitialized 属性
DataView 类

获取一个值，该值指示组件是否已初始化。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property IsInitialized As Boolean
    Get
[BrowsableAttribute(false)]
public bool IsInitialized { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsInitialized {
    bool get () sealed;
}
[<BrowsableAttribute(false)>]
abstract IsInitialized : bool
[<BrowsableAttribute(false)>]
override IsInitialized : bool

属性值

类型： System Boolean
如果为 true，说明组件已完成初始化；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.IsOpen 属性

DataView
.
.
::
.
IsOpen 属性
DataView 类

获取一个值，该值指示数据源当前是否已打开并在 DataTable 上映射数据视图。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Protected ReadOnly Property IsOpen As Boolean
    Get
[BrowsableAttribute(false)]
protected bool IsOpen { get; }
[BrowsableAttribute(false)]
protected:
property bool IsOpen {
    bool get ();
}
[<BrowsableAttribute(false)>]
member IsOpen : bool

属性值

类型： System Boolean
如果数据源已打开，则为 true；否则为 false。

DataView 是 DataTable 上的“视图”，这是由于它提供数据的自定义排序和筛选。可查询 IsOpen 属性以确定是否已使用 Open 方法打开了 DataView。 DataView 是 DataTable 上的“视图”，这是由于它提供数据的自定义排序和筛选。可查询 IsOpen 属性以确定是否已使用 Open 方法打开了 DataView。

该属性仅供内部使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
Open

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Item 属性

DataView
.
.
::
.
Item 属性
DataView 类

从指定的表获取一行数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Item ( _
    recordIndex As Integer _
) As DataRowView
    Get
public DataRowView this[
    int recordIndex
] { get; }
public:
property DataRowView^ Item[int recordIndex] {
    DataRowView^ get (int recordIndex);
}
member Item : DataRowView

参数

recordIndex
类型： System Int32
DataTable 中的记录的索引。

属性值

类型： System.Data DataRowView
所需的行的 DataRowView。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.RowFilter 属性

DataView
.
.
::
.
RowFilter 属性
DataView 类

获取或设置用于筛选在 DataView 中查看哪些行的表达式。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property RowFilter As String
    Get
    Set
public virtual string RowFilter { get; set; }
public:
virtual property String^ RowFilter {
    String^ get ();
    void set (String^ value);
}
abstract RowFilter : string with get, set
override RowFilter : string with get, set

属性值

类型： System String
用于指定行的筛选方式的字符串。有关更多信息，请参见“备注”部分。 用于指定行的筛选方式的字符串。有关更多信息，请参见“备注”部分。

若要形成 RowFilter 值，请指定列的名称，后跟一个运算符和一个要筛选的值。该值必须用引号括起来。例如： 若要形成 RowFilter 值，请指定列的名称，后跟一个运算符和一个要筛选的值。该值必须用引号括起来。例如： 若要形成 RowFilter 值，请指定列的名称，后跟一个运算符和一个要筛选的值。该值必须用引号括起来。例如：

"LastName = 'Smith'"

有关更多信息，请参见 DataColumn 类的 Expression 属性。

若要只返回那些具有 null 值的列，请使用以下表达式：

"Isnull(Col1,'Null Column') = 'Null Column'"

下面的示例创建 DataView 并设置它的 RowFilter 属性。

Private Sub MakeDataView()
    Dim view As DataView = New DataView
    With view
        .Table = DataSet1.Tables("Suppliers")
        .AllowDelete = True
        .AllowEdit = True
        .AllowNew = True
        .RowFilter = "City = 'Berlin'"
        .RowStateFilter = DataViewRowState.ModifiedCurrent
        .Sort = "CompanyName DESC"
    End With

    ' Simple-bind to a TextBox control
    Text1.DataBindings.Add("Text", view, "CompanyName")
End Sub

private void MakeDataView()
{
    DataView view = new DataView();

    view.Table = DataSet1.Tables["Suppliers"];
    view.AllowDelete = true;
    view.AllowEdit = true;
    view.AllowNew = true;
    view.RowFilter = "City = 'Berlin'";
    view.RowStateFilter = DataViewRowState.ModifiedCurrent;
    view.Sort = "CompanyName DESC";

    // Simple-bind to a TextBox control
    Text1.DataBindings.Add("Text", view, "CompanyName");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
Expression
Sort

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.RowStateFilter 属性

DataView
.
.
::
.
RowStateFilter 属性
DataView 类

获取或设置用于 DataView 中的行状态筛选器。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property RowStateFilter As DataViewRowState
    Get
    Set
public DataViewRowState RowStateFilter { get; set; }
public:
property DataViewRowState RowStateFilter {
    DataViewRowState get ();
    void set (DataViewRowState value);
}
member RowStateFilter : DataViewRowState with get, set

属性值

类型： System.Data DataViewRowState
DataViewRowState 值之一。

只有已通过 Delete 方法删除的行的 RowStateFilter 值才会设置为 Deleted。同样，那些通过 AddNew 方法添加的行将同样把该属性设置为 Added。 只有已通过 Delete 方法删除的行的 RowStateFilter 值才会设置为 Deleted。同样，那些通过 AddNew 方法添加的行将同样把该属性设置为 Added。

说明 说明

使用 DataRowCollection 类的 Remove 方法并不意味着行将被标记为 Deleted。请改为使用 Delete 方法，以确保可在 DataView 中查看这样的行。 使用 DataRowCollection 类的 Remove 方法并不意味着行将被标记为 Deleted。请改为使用 Delete 方法，以确保可在 DataView 中查看这样的行。

如果将 RowStateFilter 设置为 ModifiedCurrent 或 CurrentRows，新行也将是可见的。

如果将 RowStateFilter 设置为 ModifiedOriginal 和 OriginalRows，已删除的行也将是可见的。

下面的示例创建具有单个列的 DataTable，然后更改数据并设置 DataView 的 RowStateFilter，以便根据 DataViewRowState 显示不同的行集。

Private Sub DemonstrateRowState()
    Dim i As Integer

    ' Create a DataTable with one column.
    Dim dataTable As New DataTable("dataTable")
    Dim dataColumn As New DataColumn("dataColumn")
    dataTable.Columns.Add(dataColumn)

    ' Add ten rows.
    Dim dataRow As DataRow
    For i = 0 To 9
        dataRow = dataTable.NewRow()
        dataRow("dataColumn") = "item " + i.ToString()
        dataTable.Rows.Add(dataRow)
    Next i
    dataTable.AcceptChanges()

    ' Create a DataView with the table.
    Dim dataView As New DataView(dataTable)

    ' Change one row's value:
    dataTable.Rows(1)("dataColumn") = "Hello"

    ' Add one row:
    dataRow = dataTable.NewRow()
    dataRow("dataColumn") = "World"
    dataTable.Rows.Add(dataRow)

    ' Set the RowStateFilter to display only Added and modified rows.
    dataView.RowStateFilter = _
    DataViewRowState.Added Or DataViewRowState.ModifiedCurrent

    ' Print those rows. Output = "Hello" "World";
    PrintView(dataView, "ModifiedCurrent and Added")

    ' Set filter to display on originals of modified rows.
    dataView.RowStateFilter = DataViewRowState.ModifiedOriginal
    PrintView(dataView, "ModifiedOriginal")

    ' Delete three rows.
    dataTable.Rows(1).Delete()
    dataTable.Rows(2).Delete()
    dataTable.Rows(3).Delete()

    ' Set the RowStateFilter to display only Added and modified rows.
    dataView.RowStateFilter = DataViewRowState.Deleted
    PrintView(dataView, "Deleted")

    'Set filter to display only current.
    dataView.RowStateFilter = DataViewRowState.CurrentRows
    PrintView(dataView, "Current")

    ' Set filter to display only unchanged rows.
    dataView.RowStateFilter = DataViewRowState.Unchanged
    PrintView(dataView, "Unchanged")

    ' Set filter to display only original rows.
    dataView.RowStateFilter = DataViewRowState.OriginalRows
    PrintView(dataView, "OriginalRows")
End Sub

Private Sub PrintView(ByVal dataView As DataView, ByVal label As String)
    Console.WriteLine(ControlChars.Cr + label)
    Dim i As Integer
    For i = 0 To dataView.Count - 1
        Console.WriteLine(dataView(i)("dataColumn"))
    Next i
End Sub

static private void DemonstrateRowState()
{
    // Create a DataTable with one column.
    DataTable dataTable = new DataTable("dataTable");
    DataColumn dataColumn = new DataColumn("dataColumn");
    dataTable.Columns.Add(dataColumn);

    // Add ten rows.
    DataRow dataRow;
    for (int i = 0; i < 10; i++)
    {
        dataRow = dataTable.NewRow();
        dataRow["dataColumn"] = "item " + i;
        dataTable.Rows.Add(dataRow);
    }
    dataTable.AcceptChanges();

    // Create a DataView with the table.
    DataView dataView = new DataView(dataTable);

    // Change one row's value:
    dataTable.Rows[1]["dataColumn"] = "Hello";

    // Add one row:
    dataRow = dataTable.NewRow();
    dataRow["dataColumn"] = "World";
    dataTable.Rows.Add(dataRow);

    // Set the RowStateFilter to display only added and modified rows.
    dataView.RowStateFilter = DataViewRowState.Added
        | DataViewRowState.ModifiedCurrent;

    // Print those rows. Output = "Hello" "World";
    PrintView(dataView, "ModifiedCurrent and Added");

    // Set filter to display on originals of modified rows.
    dataView.RowStateFilter = DataViewRowState.ModifiedOriginal;
    PrintView(dataView, "ModifiedOriginal");

    // Delete three rows.
    dataTable.Rows[1].Delete();
    dataTable.Rows[2].Delete();
    dataTable.Rows[3].Delete();

    // Set the RowStateFilter to display only Added and modified rows.
    dataView.RowStateFilter = DataViewRowState.Deleted;
    PrintView(dataView, "Deleted");

    //Set filter to display only current.
    dataView.RowStateFilter = DataViewRowState.CurrentRows;
    PrintView(dataView, "Current");

    // Set filter to display only unchanged rows.
    dataView.RowStateFilter = DataViewRowState.Unchanged;
    PrintView(dataView, "Unchanged");

    // Set filter to display only original rows.
    dataView.RowStateFilter = DataViewRowState.OriginalRows;
    PrintView(dataView, "OriginalRows");
}

static private void PrintView(DataView dataView, string label)
{
    Console.WriteLine("\n" + label);
    for (int i = 0; i < dataView.Count; i++)
    {
        Console.WriteLine(dataView[i]["dataColumn"]);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
DataViewRowState
AddNew
Delete

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Sort 属性

DataView
.
.
::
.
Sort 属性
DataView 类

获取或设置 DataView 的一个或多个排序列以及排序顺序。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Sort As String
    Get
    Set
public string Sort { get; set; }
public:
property String^ Sort {
    String^ get ();
    void set (String^ value);
}
member Sort : string with get, set

属性值

类型： System String
一个字符串，它包含列名，后跟“ASC”（升序）或“DESC”（降序）。在默认情况下列按升序排序。多个列可用逗号隔开。 一个字符串，它包含列名，后跟“ASC”（升序）或“DESC”（降序）。在默认情况下列按升序排序。多个列可用逗号隔开。 一个字符串，它包含列名，后跟“ASC”（升序）或“DESC”（降序）。在默认情况下列按升序排序。多个列可用逗号隔开。

如果不显式指定 DataView 的排序条件，将按它的相应 DataRow 在 DataTable.RowsDataRowCollection 中的索引来对 DataView 中的 DataRowView 对象进行排序。

有关更多信息，请参见DataView (ADO.NET)。

下面的示例指示 DataView 按照两列对表进行排序。

Private Sub SortByTwoColumns()
    ' Get the DefaultViewManager of a DataTable.
    Dim view As DataView = DataTable1.DefaultView

    ' By default, the first column sorted ascending.
    view.Sort = "State, ZipCode DESC"
End Sub

private void SortByTwoColumns()
{
    // Get the DefaultViewManager of a DataTable.
    DataView view = DataTable1.DefaultView;

    // By default, the first column sorted ascending.
    view.Sort = "State, ZipCode DESC";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
RowFilter
Expression

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.Table 属性

DataView
.
.
::
.
Table 属性
DataView 类

获取或设置源 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Table As DataTable
    Get
    Set
public DataTable Table { get; set; }
public:
property DataTable^ Table {
    DataTable^ get ();
    void set (DataTable^ value);
}
member Table : DataTable with get, set

属性值

类型： System.Data DataTable
DataTable，为此视图提供数据。

DataTable 也有一个 DefaultView 属性，该属性返回表的默认 DataView。例如，如果希望在表上创建自定义视图，请在 DefaultView 返回的 DataView 上设置 RowFilter。 DataTable 也有一个 DefaultView 属性，该属性返回表的默认 DataView。例如，如果希望在表上创建自定义视图，请在 DefaultView 返回的 DataView 上设置 RowFilter。

如果当前值为 null，则只能设置 Table 属性。

下面的示例获取当前 DataView 的 DataTable。

Private Sub DemonstrateDataViewTable()
    Dim table As DataTable = New DataTable()

    ' add columns
    Dim column As DataColumn = table.Columns.Add("ProductID", GetType(Integer))
    column.AutoIncrement = True
    column = table.Columns.Add("ProductName", GetType(String))

    ' populate DataTable.
    Dim id As Integer
    For id = 1 To 5
        table.Rows.Add(New Object() {id, String.Format("product{0}", id)})
    Next id

    Dim view As DataView = New DataView(table)

    PrintTable(view.Table, "DataTable")
End Sub

Private Sub PrintTable(ByVal table As DataTable, ByVal label As String)
    ' This function prints values in the table or DataView.
    Console.WriteLine("\n" + label)
    Dim row As DataRow
    Dim column As DataColumn
    For Each row In table.Rows
        For Each column In table.Columns
            Console.Write("\table{0}", row(column))
        Next column
    Next row
    Console.WriteLine()
End Sub

    private static void DemonstrateDataViewTable()
    {
        DataTable table = new DataTable();

        // add columns
        DataColumn column = table.Columns.Add("ProductID",
            typeof(int)	);
        column.AutoIncrement = true;
        column = table.Columns.Add("ProductName",
            typeof(string));

        // populate DataTable.
        for(int id=1; id<=5; id++)
        {
            table.Rows.Add(
                new object[]{ id, string.Format("product{0}", id) });
        }

        DataView view = new DataView(table);

        PrintTable(view.Table, "DataTable");
    }

    private static void PrintTable(DataTable table, string label)
    {
        // This function prints values in the table or DataView.
        Console.WriteLine("\n" + label);
        foreach(DataRow row in table.Rows)
        {
            foreach(DataColumn column in table.Columns)
            {
                Console.Write("\table{0}", row[column]);
            }
            Console.WriteLine();
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间
DataTable

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView 事件

DataView 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataView 类

DataView 类型公开以下成员。

名称 说明
页首

参考

DataView 类
System.Data 命名空间


DataView ..::.Initialized 事件

DataView
.
.
::
.
Initialized 事件
DataView 类

当 DataView 的初始化完成时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event Initialized As EventHandler
public event EventHandler Initialized
public:
virtual  event EventHandler^ Initialized {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
abstract Initialized : IEvent<EventHandler,
    EventArgs>
override Initialized : IEvent<EventHandler,
    EventArgs>

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataView ..::.ListChanged 事件

DataView
.
.
::
.
ListChanged 事件
DataView 类

在 DataView 管理的列表发生更改时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event ListChanged As ListChangedEventHandler
public event ListChangedEventHandler ListChanged
public:
virtual  event ListChangedEventHandler^ ListChanged {
    void add (ListChangedEventHandler^ value);
    void remove (ListChangedEventHandler^ value);
}
abstract ListChanged : IEvent<ListChangedEventHandler,
    ListChangedEventArgs>
override ListChanged : IEvent<ListChangedEventHandler,
    ListChangedEventArgs>

实现

下面的示例为 DataView 的 ListChanged 事件添加事件处理程序。

Public Sub CreateDataView(table As DataTable)
    Dim view As DataView = New DataView(table, "", _
        "ContactName", DataViewRowState.CurrentRows)

    AddHandler view.ListChanged, _
        New System.ComponentModel.ListChangedEventHandler( _
        AddressOf OnListChanged)
End Sub

Private Sub OnListChanged(sender as Object, _
    args As System.ComponentModel.ListChangedEventArgs)

    Console.WriteLine("ListChanged:")
    Console.WriteLine(vbTab & "    Type = " & args.ListChangedType)
    Console.WriteLine(vbTab & "OldIndex = " & args.OldIndex)
    Console.WriteLine(vbTab & "NewIndex = " & args.NewIndex)
End Sub

public void CreateDataView(DataTable table)
{
    DataView view = new DataView(table, "",
        "ContactName", DataViewRowState.CurrentRows);

    view.ListChanged  += new
        System.ComponentModel.ListChangedEventHandler(
        OnListChanged);
}

private void OnListChanged(object sender,
    System.ComponentModel.ListChangedEventArgs args)
{
    Console.WriteLine("ListChanged:");
    Console.WriteLine("\table    Type = " + args.ListChangedType);
    Console.WriteLine("\tOldIndex = " + args.OldIndex);
    Console.WriteLine("\tNewIndex = " + args.NewIndex);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataView 类
DataView 成员
System.Data 命名空间

其他资源

DataSet、DataTable 和 DataView (ADO.NET)


DataViewManager 类

DataViewManager 类
成员

包含 DataSet 中每个 DataTable 的默认 DataViewSettingCollection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataViewManager _
    Inherits MarshalByValueComponent _
    Implements IBindingList, IList, ICollection, IEnumerable,  _
    ITypedList
public class DataViewManager : MarshalByValueComponent,
    IBindingList, IList, ICollection, IEnumerable, ITypedList
public ref class DataViewManager : public MarshalByValueComponent,
    IBindingList, IList, ICollection, IEnumerable, ITypedList
type DataViewManager =
    class
        inherit MarshalByValueComponent
        interface IBindingList
        interface IList
        interface ICollection
        interface IEnumerable
        interface ITypedList
    end

System.Data System.Data..::.DataViewManagerDataViewManager

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager 成员

DataViewManager 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewManager 类

包含 DataSet 中每个 DataTable 的默认 DataViewSettingCollection。

DataViewManager 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataViewManager 类
System.Data 命名空间


DataViewManager 构造函数

DataViewManager 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewManager 类

初始化 DataViewManager 类的新实例。

名称 说明
页首

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager 构造函数

DataViewManager 构造函数
DataViewManager 类

初始化 DataViewManager 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataViewManager()
public:
DataViewManager()
new : unit -> DataViewManager

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
DataViewManager 重载
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager 构造函数 (DataSet)

DataViewManager 构造函数 (DataSet)
DataViewManager 类

为指定的 DataSet 初始化 DataViewManager 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    dataSet As DataSet _
)
public DataViewManager(
    DataSet dataSet
)
public:
DataViewManager(
    DataSet^ dataSet
)
new :
        dataSet:DataSet -> DataViewManager

参数

dataSet
类型： System.Data DataSet
要使用的 DataSet 的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
DataViewManager 重载
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager 方法

DataViewManager 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewManager 类

DataViewManager 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataViewManager 类
System.Data 命名空间


DataViewManager ..::.CreateDataView 方法

DataViewManager
.
.
::
.
CreateDataView 方法
DataViewManager 类

为指定的 DataTable 创建一个 DataView。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function CreateDataView ( _
    table As DataTable _
) As DataView
public DataView CreateDataView(
    DataTable table
)
public:
DataView^ CreateDataView(
    DataTable^ table
)
member CreateDataView :
        table:DataTable -> DataView

参数

table
类型： System.Data DataTable
要用在 DataView 中的 DataTable 的名称。

返回值

类型： System.Data DataView
一个 DataView 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager ..::.Dispose 方法

DataViewManager
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewManager 类

释放由 MarshalByValueComponent 占用的资源。

名称 说明
页首

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.AddIndex 方法

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
AddIndex 方法
DataViewManager 类

将 PropertyDescriptor 添加到用于搜索的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub AddIndex ( _
    property As PropertyDescriptor _
) Implements IBindingList.AddIndex
void IBindingList.AddIndex(
    PropertyDescriptor property
)
private:
virtual void AddIndex(
    PropertyDescriptor^ property
) sealed = IBindingList::AddIndex
private abstract AddIndex :
        property:PropertyDescriptor -> unit
private override AddIndex :
        property:PropertyDescriptor -> unit

参数

property
类型： System.ComponentModel PropertyDescriptor
要添加到用于搜索的索引的 PropertyDescriptor。

实现

此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.AddNew 方法

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
AddNew 方法
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.AddNew。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function AddNew As Object Implements IBindingList.AddNew
Object IBindingList.AddNew()
private:
virtual Object^ AddNew() sealed = IBindingList::AddNew
private abstract AddNew : unit -> Object
private override AddNew : unit -> Object

返回值

类型： System Object
有关此成员的说明，请参见 IBindingList..::.AddNew。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.ApplySort 方法

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
ApplySort 方法
DataViewManager 类

根据 PropertyDescriptor 和 ListSortDirection 对列表进行排序。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub ApplySort ( _
    property As PropertyDescriptor, _
    direction As ListSortDirection _
) Implements IBindingList.ApplySort
void IBindingList.ApplySort(
    PropertyDescriptor property,
    ListSortDirection direction
)
private:
virtual void ApplySort(
    PropertyDescriptor^ property,
    ListSortDirection direction
) sealed = IBindingList::ApplySort
private abstract ApplySort :
        property:PropertyDescriptor *
        direction:ListSortDirection -> unit
private override ApplySort :
        property:PropertyDescriptor *
        direction:ListSortDirection -> unit

参数

property
类型： System.ComponentModel PropertyDescriptor
以其为根据进行排序的 PropertyDescriptor。
direction
类型： System.ComponentModel ListSortDirection
ListSortDirection 值之一。

实现

此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.Find 方法

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
Find 方法
DataViewManager 类

返回具有给定 PropertyDescriptor 的行的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function Find ( _
    property As PropertyDescriptor, _
    key As Object _
) As Integer Implements IBindingList.Find
int IBindingList.Find(
    PropertyDescriptor property,
    Object key
)
private:
virtual int Find(
    PropertyDescriptor^ property,
    Object^ key
) sealed = IBindingList::Find
private abstract Find :
        property:PropertyDescriptor *
        key:Object -> int
private override Find :
        property:PropertyDescriptor *
        key:Object -> int

参数

property
类型： System.ComponentModel PropertyDescriptor
要对其进行搜索的 PropertyDescriptor。
key
类型： System Object
要搜索的“属性”参数的值。

返回值

类型： System Int32
具有给定 PropertyDescriptor 的行的索引。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.RemoveIndex 方法

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
RemoveIndex 方法
DataViewManager 类

从用于搜索的索引中移除 PropertyDescriptor。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub RemoveIndex ( _
    property As PropertyDescriptor _
) Implements IBindingList.RemoveIndex
void IBindingList.RemoveIndex(
    PropertyDescriptor property
)
private:
virtual void RemoveIndex(
    PropertyDescriptor^ property
) sealed = IBindingList::RemoveIndex
private abstract RemoveIndex :
        property:PropertyDescriptor -> unit
private override RemoveIndex :
        property:PropertyDescriptor -> unit

参数

property
类型： System.ComponentModel PropertyDescriptor
要从用于搜索的索引中移除的 PropertyDescriptor。

实现

此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.RemoveSort 方法

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
RemoveSort 方法
DataViewManager 类

使用 ApplySort 移除任何已应用的排序。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub RemoveSort Implements IBindingList.RemoveSort
void IBindingList.RemoveSort()
private:
virtual void RemoveSort() sealed = IBindingList::RemoveSort
private abstract RemoveSort : unit -> unit
private override RemoveSort : unit -> unit

实现

此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.ICollection ..::.CopyTo 方法

DataViewManager
.
.
::
.
ICollection
.
.
::
.
CopyTo 方法
DataViewManager 类

从特定的 Array 索引处开始，将 ICollection 的元素复制到一个 Array 中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub CopyTo ( _
    array As Array, _
    index As Integer _
) Implements ICollection.CopyTo
void ICollection.CopyTo(
    Array array,
    int index
)
private:
virtual void CopyTo(
    Array^ array,
    int index
) sealed = ICollection::CopyTo
private abstract CopyTo :
        array:Array *
        index:int -> unit
private override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
作为从 ICollection 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 ICollection 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
index
类型： System Int32
array 中从零开始的索引，从此处开始复制。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 ICollection 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IEnumerable ..::.GetEnumerator 方法

DataViewManager
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
DataViewManager 类

有关此成员的说明，请参见 IEnumerable..::.GetEnumerator。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
有关此成员的说明，请参见 IEnumerable..::.GetEnumerator。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IEnumerable 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IEnumerable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.Add 方法

DataViewManager
.
.
::
.
IList
.
.
::
.
Add 方法
DataViewManager 类

向 IList 中添加项。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function Add ( _
    value As Object _
) As Integer Implements IList.Add
int IList.Add(
    Object value
)
private:
virtual int Add(
    Object^ value
) sealed = IList::Add
private abstract Add :
        value:Object -> int
private override Add :
        value:Object -> int

参数

value
类型： System Object
要添加到 IList 中的 Object。

返回值

类型： System Int32
新元素的插入位置。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.Clear 方法

DataViewManager
.
.
::
.
IList
.
.
::
.
Clear 方法
DataViewManager 类

有关此成员的说明，请参见 IList..::.Clear。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub Clear Implements IList.Clear
void IList.Clear()
private:
virtual void Clear() sealed = IList::Clear
private abstract Clear : unit -> unit
private override Clear : unit -> unit

实现

此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.Contains 方法

DataViewManager
.
.
::
.
IList
.
.
::
.
Contains 方法
DataViewManager 类

确定 IList 是否包含特定值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function Contains ( _
    value As Object _
) As Boolean Implements IList.Contains
bool IList.Contains(
    Object value
)
private:
virtual bool Contains(
    Object^ value
) sealed = IList::Contains
private abstract Contains :
        value:Object -> bool
private override Contains :
        value:Object -> bool

参数

value
类型： System Object
要在 IList 中查找的 Object。

返回值

类型： System Boolean
如果在 IList 中找到 Object，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.IndexOf 方法

DataViewManager
.
.
::
.
IList
.
.
::
.
IndexOf 方法
DataViewManager 类

确定 IList 中特定项的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function IndexOf ( _
    value As Object _
) As Integer Implements IList.IndexOf
int IList.IndexOf(
    Object value
)
private:
virtual int IndexOf(
    Object^ value
) sealed = IList::IndexOf
private abstract IndexOf :
        value:Object -> int
private override IndexOf :
        value:Object -> int

参数

value
类型： System Object
要在 IList 中查找的 Object。

返回值

类型： System Int32
如果在列表中找到该项，则为 value 的索引；否则为 -1。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.Insert 方法

DataViewManager
.
.
::
.
IList
.
.
::
.
Insert 方法
DataViewManager 类

在 IList 中的指定索引处插入项。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub Insert ( _
    index As Integer, _
    value As Object _
) Implements IList.Insert
void IList.Insert(
    int index,
    Object value
)
private:
virtual void Insert(
    int index,
    Object^ value
) sealed = IList::Insert
private abstract Insert :
        index:int *
        value:Object -> unit
private override Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
应插入 value 的位置的索引，该索引从零开始。
value
类型： System Object
要插入 IList 中的 Object。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.Remove 方法

DataViewManager
.
.
::
.
IList
.
.
::
.
Remove 方法
DataViewManager 类

从 IList 中移除特定对象的第一个匹配项。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub Remove ( _
    value As Object _
) Implements IList.Remove
void IList.Remove(
    Object value
)
private:
virtual void Remove(
    Object^ value
) sealed = IList::Remove
private abstract Remove :
        value:Object -> unit
private override Remove :
        value:Object -> unit

参数

value
类型： System Object
要从 IList 移除的 Object。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.RemoveAt 方法

DataViewManager
.
.
::
.
IList
.
.
::
.
RemoveAt 方法
DataViewManager 类

移除指定索引处的 IList 项。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Sub RemoveAt ( _
    index As Integer _
) Implements IList.RemoveAt
void IList.RemoveAt(
    int index
)
private:
virtual void RemoveAt(
    int index
) sealed = IList::RemoveAt
private abstract RemoveAt :
        index:int -> unit
private override RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的项的索引（从零开始）。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.ITypedList ..::.GetItemProperties 方法

DataViewManager
.
.
::
.
ITypedList
.
.
::
.
GetItemProperties 方法
DataViewManager 类

有关此成员的说明，请参见 ITypedList..::.GetItemProperties。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetItemProperties ( _
    listAccessors As PropertyDescriptor() _
) As PropertyDescriptorCollection Implements ITypedList.GetItemProperties
PropertyDescriptorCollection ITypedList.GetItemProperties(
    PropertyDescriptor[] listAccessors
)
private:
virtual PropertyDescriptorCollection^ GetItemProperties(
    array<PropertyDescriptor^>^ listAccessors
) sealed = ITypedList::GetItemProperties
private abstract GetItemProperties :
        listAccessors:PropertyDescriptor[] -> PropertyDescriptorCollection
private override GetItemProperties :
        listAccessors:PropertyDescriptor[] -> PropertyDescriptorCollection

参数

listAccessors
类型：
array<
System.ComponentModel PropertyDescriptor
>
[]
()
[]

返回值

类型： System.ComponentModel PropertyDescriptorCollection

实现

此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 ITypedList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 ITypedList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.ITypedList ..::.GetListName 方法

DataViewManager
.
.
::
.
ITypedList
.
.
::
.
GetListName 方法
DataViewManager 类

返回列表的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Function GetListName ( _
    listAccessors As PropertyDescriptor() _
) As String Implements ITypedList.GetListName
string ITypedList.GetListName(
    PropertyDescriptor[] listAccessors
)
private:
virtual String^ GetListName(
    array<PropertyDescriptor^>^ listAccessors
) sealed = ITypedList::GetListName
private abstract GetListName :
        listAccessors:PropertyDescriptor[] -> string
private override GetListName :
        listAccessors:PropertyDescriptor[] -> string

参数

listAccessors
类型：
array<
System.ComponentModel PropertyDescriptor
>
[]
()
[]

为其返回列表名称的 PropertyDescriptor 对象的数组。它可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 为其返回列表名称的 PropertyDescriptor 对象的数组。它可以为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

返回值

类型： System String
列表的名称。

实现

此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 ITypedList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataViewManager 实例被强制转换为 ITypedList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.OnListChanged 方法

DataViewManager
.
.
::
.
OnListChanged 方法
DataViewManager 类

引发 ListChanged 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnListChanged ( _
    e As ListChangedEventArgs _
)
protected virtual void OnListChanged(
    ListChangedEventArgs e
)
protected:
virtual void OnListChanged(
    ListChangedEventArgs^ e
)
abstract OnListChanged :
        e:ListChangedEventArgs -> unit
override OnListChanged :
        e:ListChangedEventArgs -> unit

参数

e
类型： System.ComponentModel ListChangedEventArgs
包含事件数据的 ListChangedEventArgs。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager ..::.RelationCollectionChanged 方法

DataViewManager
.
.
::
.
RelationCollectionChanged 方法
DataViewManager 类

在从 DataRelationCollection 添加或移除 DataRelation 时引发 CollectionChanged 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub RelationCollectionChanged ( _
    sender As Object, _
    e As CollectionChangeEventArgs _
)
protected virtual void RelationCollectionChanged(
    Object sender,
    CollectionChangeEventArgs e
)
protected:
virtual void RelationCollectionChanged(
    Object^ sender,
    CollectionChangeEventArgs^ e
)
abstract RelationCollectionChanged :
        sender:Object *
        e:CollectionChangeEventArgs -> unit
override RelationCollectionChanged :
        sender:Object *
        e:CollectionChangeEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.ComponentModel CollectionChangeEventArgs
包含事件数据的 CollectionChangeEventArgs。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager ..::.TableCollectionChanged 方法

DataViewManager
.
.
::
.
TableCollectionChanged 方法
DataViewManager 类

在从 DataTableCollection 添加或移除 DataTable 时引发 CollectionChanged 事件。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub TableCollectionChanged ( _
    sender As Object, _
    e As CollectionChangeEventArgs _
)
protected virtual void TableCollectionChanged(
    Object sender,
    CollectionChangeEventArgs e
)
protected:
virtual void TableCollectionChanged(
    Object^ sender,
    CollectionChangeEventArgs^ e
)
abstract TableCollectionChanged :
        sender:Object *
        e:CollectionChangeEventArgs -> unit
override TableCollectionChanged :
        sender:Object *
        e:CollectionChangeEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.ComponentModel CollectionChangeEventArgs
包含事件数据的 CollectionChangeEventArgs。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager 属性

DataViewManager 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewManager 类

DataViewManager 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataViewManager 类
System.Data 命名空间


DataViewManager ..::.DataSet 属性

DataViewManager
.
.
::
.
DataSet 属性
DataViewManager 类

获取或设置要与 DataViewManager 一起使用的 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property DataSet As DataSet
    Get
    Set
public DataSet DataSet { get; set; }
public:
property DataSet^ DataSet {
    DataSet^ get ();
    void set (DataSet^ value);
}
member DataSet : DataSet with get, set

属性值

类型： System.Data DataSet
要使用的 DataSet。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager ..::.DataViewSettingCollectionString 属性

DataViewManager
.
.
::
.
DataViewSettingCollectionString 属性
DataViewManager 类

获取或设置一个用于代码持久性的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property DataViewSettingCollectionString As String
    Get
    Set
public string DataViewSettingCollectionString { get; set; }
public:
property String^ DataViewSettingCollectionString {
    String^ get ();
    void set (String^ value);
}
member DataViewSettingCollectionString : string with get, set

属性值

类型： System String
一个用于代码持久性的值。

用户不应直接调用 DataViewSettingCollectionString。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager ..::.DataViewSettings 属性

DataViewManager
.
.
::
.
DataViewSettings 属性
DataViewManager 类

获取 DataSet 中每个 DataTable 的 DataViewSettingCollection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property DataViewSettings As DataViewSettingCollection
    Get
public DataViewSettingCollection DataViewSettings { get; }
public:
property DataViewSettingCollection^ DataViewSettings {
    DataViewSettingCollection^ get ();
}
member DataViewSettings : DataViewSettingCollection

属性值

类型： System.Data DataViewSettingCollection
每个 DataTable 的 DataViewSettingCollection。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewManager ..::.IBindingList ..::.AllowEdit 属性

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
AllowEdit 属性
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.AllowEdit。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property AllowEdit As Boolean
    Implements IBindingList.AllowEdit
    Get
bool IBindingList.AllowEdit { get; }
private:
virtual property bool AllowEdit {
    bool get () sealed = IBindingList::AllowEdit::get;
}
private abstract AllowEdit : bool
private override AllowEdit : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.AllowEdit。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.AllowNew 属性

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
AllowNew 属性
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.AllowNew。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property AllowNew As Boolean
    Implements IBindingList.AllowNew
    Get
bool IBindingList.AllowNew { get; }
private:
virtual property bool AllowNew {
    bool get () sealed = IBindingList::AllowNew::get;
}
private abstract AllowNew : bool
private override AllowNew : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.AllowNew。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.AllowRemove 属性

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
AllowRemove 属性
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.AllowRemove。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property AllowRemove As Boolean
    Implements IBindingList.AllowRemove
    Get
bool IBindingList.AllowRemove { get; }
private:
virtual property bool AllowRemove {
    bool get () sealed = IBindingList::AllowRemove::get;
}
private abstract AllowRemove : bool
private override AllowRemove : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.AllowRemove。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.IsSorted 属性

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
IsSorted 属性
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.IsSorted。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsSorted As Boolean
    Implements IBindingList.IsSorted
    Get
bool IBindingList.IsSorted { get; }
private:
virtual property bool IsSorted {
    bool get () sealed = IBindingList::IsSorted::get;
}
private abstract IsSorted : bool
private override IsSorted : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.IsSorted。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.SortDirection 属性

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
SortDirection 属性
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.SortDirection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SortDirection As ListSortDirection
    Implements IBindingList.SortDirection
    Get
ListSortDirection IBindingList.SortDirection { get; }
private:
virtual property ListSortDirection SortDirection {
    ListSortDirection get () sealed = IBindingList::SortDirection::get;
}
private abstract SortDirection : ListSortDirection
private override SortDirection : ListSortDirection

属性值

类型： System.ComponentModel ListSortDirection
有关此成员的说明，请参见 IBindingList..::.SortDirection。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.SortProperty 属性

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
SortProperty 属性
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.SortProperty。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SortProperty As PropertyDescriptor
    Implements IBindingList.SortProperty
    Get
PropertyDescriptor IBindingList.SortProperty { get; }
private:
virtual property PropertyDescriptor^ SortProperty {
    PropertyDescriptor^ get () sealed = IBindingList::SortProperty::get;
}
private abstract SortProperty : PropertyDescriptor
private override SortProperty : PropertyDescriptor

属性值

类型： System.ComponentModel PropertyDescriptor
有关此成员的说明，请参见 IBindingList..::.SortProperty。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.SupportsChangeNotification 属性

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
SupportsChangeNotification 属性
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.SupportsChangeNotification。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SupportsChangeNotification As Boolean
    Implements IBindingList.SupportsChangeNotification
    Get
bool IBindingList.SupportsChangeNotification { get; }
private:
virtual property bool SupportsChangeNotification {
    bool get () sealed = IBindingList::SupportsChangeNotification::get;
}
private abstract SupportsChangeNotification : bool
private override SupportsChangeNotification : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.SupportsChangeNotification。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.SupportsSearching 属性

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
SupportsSearching 属性
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.SupportsSearching。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SupportsSearching As Boolean
    Implements IBindingList.SupportsSearching
    Get
bool IBindingList.SupportsSearching { get; }
private:
virtual property bool SupportsSearching {
    bool get () sealed = IBindingList::SupportsSearching::get;
}
private abstract SupportsSearching : bool
private override SupportsSearching : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.SupportsSearching。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IBindingList ..::.SupportsSorting 属性

DataViewManager
.
.
::
.
IBindingList
.
.
::
.
SupportsSorting 属性
DataViewManager 类

有关此成员的说明，请参见 IBindingList..::.SupportsSorting。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SupportsSorting As Boolean
    Implements IBindingList.SupportsSorting
    Get
bool IBindingList.SupportsSorting { get; }
private:
virtual property bool SupportsSorting {
    bool get () sealed = IBindingList::SupportsSorting::get;
}
private abstract SupportsSorting : bool
private override SupportsSorting : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IBindingList..::.SupportsSorting。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IBindingList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.ICollection ..::.Count 属性

DataViewManager
.
.
::
.
ICollection
.
.
::
.
Count 属性
DataViewManager 类

有关此成员的说明，请参见 ICollection..::.Count。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property Count As Integer
    Implements ICollection.Count
    Get
int ICollection.Count { get; }
private:
virtual property int Count {
    int get () sealed = ICollection::Count::get;
}
private abstract Count : int
private override Count : int

属性值

类型： System Int32
有关此成员的说明，请参见 ICollection..::.Count。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被转换为 ICollection 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.ICollection ..::.IsSynchronized 属性

DataViewManager
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
DataViewManager 类

有关此成员的说明，请参见 ICollection..::.IsSynchronized。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
如果对 ICollection 的访问是同步的（线程安全），则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被转换为 ICollection 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.ICollection ..::.SyncRoot 属性

DataViewManager
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
DataViewManager 类

有关此成员的说明，请参见 ICollection..::.SyncRoot。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
可用于同步对 ICollection 的访问的对象。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被转换为 ICollection 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.IsFixedSize 属性

DataViewManager
.
.
::
.
IList
.
.
::
.
IsFixedSize 属性
DataViewManager 类

有关此成员的说明，请参见 IList..::.IsFixedSize。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsFixedSize As Boolean
    Implements IList.IsFixedSize
    Get
bool IList.IsFixedSize { get; }
private:
virtual property bool IsFixedSize {
    bool get () sealed = IList::IsFixedSize::get;
}
private abstract IsFixedSize : bool
private override IsFixedSize : bool

属性值

类型： System Boolean
如果 IList 具有固定大小，则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.IsReadOnly 属性

DataViewManager
.
.
::
.
IList
.
.
::
.
IsReadOnly 属性
DataViewManager 类

有关此成员的说明，请参见 IList..::.IsReadOnly。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements IList.IsReadOnly
    Get
bool IList.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = IList::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
有关此成员的说明，请参见 IList..::.IsReadOnly。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager ..::.IList ..::.Item 属性

DataViewManager
.
.
::
.
IList
.
.
::
.
Item 属性
DataViewManager 类

获取或设置指定索引处的元素。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Private Property Item ( _
    index As Integer _
) As Object Implements IList.Item
    Get
    Set
Object IList.this[
    int index
] { get; set; }
private:
virtual property Object^ Item[int index] {
    Object^ get (int index) sealed = IList::Item::get;
    void set (int index, Object^ value) sealed = IList::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

index
类型： System Int32
要获得或设置的元素从零开始的索引。

属性值

类型： System Object
指定索引处的元素。

实现

此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。 此成员是显式接口成员的实现。它只能在 DataViewManager 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间


DataViewManager 事件

DataViewManager 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewManager 类

DataViewManager 类型公开以下成员。

名称 说明
页首

参考

DataViewManager 类
System.Data 命名空间


DataViewManager ..::.ListChanged 事件

DataViewManager
.
.
::
.
ListChanged 事件
DataViewManager 类

给 DataView 添加或从中删除行之后发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Event ListChanged As ListChangedEventHandler
public event ListChangedEventHandler ListChanged
public:
virtual  event ListChangedEventHandler^ ListChanged {
    void add (ListChangedEventHandler^ value);
    void remove (ListChangedEventHandler^ value);
}
abstract ListChanged : IEvent<ListChangedEventHandler,
    ListChangedEventArgs>
override ListChanged : IEvent<ListChangedEventHandler,
    ListChangedEventArgs>

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewManager 类
DataViewManager 成员
System.Data 命名空间

其他资源

管理 DataView (ADO.NET)


DataViewRowState 枚举

DataViewRowState 枚举

描述 DataRow 中数据的版本。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<FlagsAttribute> _
Public Enumeration DataViewRowState
[FlagsAttribute]
public enum DataViewRowState
[FlagsAttribute]
public enum class DataViewRowState
[<FlagsAttribute>]
type DataViewRowState
 | 成员名称 | 说明
由 XNA Framework 提供支持 | None | 无。
由 XNA Framework 提供支持 | Unchanged | 未更改的行。
由 XNA Framework 提供支持 | Added | 一个新行。
由 XNA Framework 提供支持 | Deleted | 已删除的行。
由 XNA Framework 提供支持 | ModifiedCurrent | 已修改的原始数据的当前版本（请参见 ModifiedOriginal）。
由 XNA Framework 提供支持 | ModifiedOriginal | 已修改的数据的原始版本。（尽管此数据已被修改，它仍作为 ModifiedCurrent 可用）。 已修改的数据的原始版本。（尽管此数据已被修改，它仍作为 ModifiedCurrent 可用）。
由 XNA Framework 提供支持 | OriginalRows | 包括未更改行和已删除行的原始行。
由 XNA Framework 提供支持 | CurrentRows | 包括未更改行、新行和已修改行的当前行。

DataViewRowState 值要么用于从 DataRow 检索数据的特定版本，要么用于确定存在哪些版本。

设置 DataView 的 RowStateFilter 属性，以便指定要查看的数据的一个或多个版本。

可结合使用布尔运算符“Or”和这些值获取多个版本。

DataTable 使用 Select 方法中的 DataViewRowState。

在下面的示例中，创建一个具有单列的 DataTable。更改该数据并设置 DataView 的 RowStateFilter，以便根据 DataViewRowState 显示不同的行集。 在下面的示例中，创建一个具有单列的 DataTable。更改该数据并设置 DataView 的 RowStateFilter，以便根据 DataViewRowState 显示不同的行集。

Private Sub DemonstrateRowState()
    Dim i As Integer

    ' Create a DataTable with one column.
    Dim dataTable As New DataTable("dataTable")
    Dim dataColumn As New DataColumn("dataColumn")
    dataTable.Columns.Add(dataColumn)

    ' Add ten rows.
    Dim dataRow As DataRow
    For i = 0 To 9
        dataRow = dataTable.NewRow()
        dataRow("dataColumn") = "item " + i.ToString()
        dataTable.Rows.Add(dataRow)
    Next i
    dataTable.AcceptChanges()

    ' Create a DataView with the table.
    Dim dataView As New DataView(dataTable)

    ' Change one row's value:
    dataTable.Rows(1)("dataColumn") = "Hello"

    ' Add one row:
    dataRow = dataTable.NewRow()
    dataRow("dataColumn") = "World"
    dataTable.Rows.Add(dataRow)

    ' Set the RowStateFilter to display only Added and modified rows.
    dataView.RowStateFilter = _
    DataViewRowState.Added Or DataViewRowState.ModifiedCurrent

    ' Print those rows. Output = "Hello" "World";
    PrintView(dataView, "ModifiedCurrent and Added")

    ' Set filter to display on originals of modified rows.
    dataView.RowStateFilter = DataViewRowState.ModifiedOriginal
    PrintView(dataView, "ModifiedOriginal")

    ' Delete three rows.
    dataTable.Rows(1).Delete()
    dataTable.Rows(2).Delete()
    dataTable.Rows(3).Delete()

    ' Set the RowStateFilter to display only Added and modified rows.
    dataView.RowStateFilter = DataViewRowState.Deleted
    PrintView(dataView, "Deleted")

    'Set filter to display only current.
    dataView.RowStateFilter = DataViewRowState.CurrentRows
    PrintView(dataView, "Current")

    ' Set filter to display only unchanged rows.
    dataView.RowStateFilter = DataViewRowState.Unchanged
    PrintView(dataView, "Unchanged")

    ' Set filter to display only original rows.
    dataView.RowStateFilter = DataViewRowState.OriginalRows
    PrintView(dataView, "OriginalRows")
End Sub

Private Sub PrintView(ByVal dataView As DataView, ByVal label As String)
    Console.WriteLine(ControlChars.Cr + label)
    Dim i As Integer
    For i = 0 To dataView.Count - 1
        Console.WriteLine(dataView(i)("dataColumn"))
    Next i
End Sub

static private void DemonstrateRowState()
{
    // Create a DataTable with one column.
    DataTable dataTable = new DataTable("dataTable");
    DataColumn dataColumn = new DataColumn("dataColumn");
    dataTable.Columns.Add(dataColumn);

    // Add ten rows.
    DataRow dataRow;
    for (int i = 0; i < 10; i++)
    {
        dataRow = dataTable.NewRow();
        dataRow["dataColumn"] = "item " + i;
        dataTable.Rows.Add(dataRow);
    }
    dataTable.AcceptChanges();

    // Create a DataView with the table.
    DataView dataView = new DataView(dataTable);

    // Change one row's value:
    dataTable.Rows[1]["dataColumn"] = "Hello";

    // Add one row:
    dataRow = dataTable.NewRow();
    dataRow["dataColumn"] = "World";
    dataTable.Rows.Add(dataRow);

    // Set the RowStateFilter to display only added and modified rows.
    dataView.RowStateFilter = DataViewRowState.Added
        | DataViewRowState.ModifiedCurrent;

    // Print those rows. Output = "Hello" "World";
    PrintView(dataView, "ModifiedCurrent and Added");

    // Set filter to display on originals of modified rows.
    dataView.RowStateFilter = DataViewRowState.ModifiedOriginal;
    PrintView(dataView, "ModifiedOriginal");

    // Delete three rows.
    dataTable.Rows[1].Delete();
    dataTable.Rows[2].Delete();
    dataTable.Rows[3].Delete();

    // Set the RowStateFilter to display only Added and modified rows.
    dataView.RowStateFilter = DataViewRowState.Deleted;
    PrintView(dataView, "Deleted");

    //Set filter to display only current.
    dataView.RowStateFilter = DataViewRowState.CurrentRows;
    PrintView(dataView, "Current");

    // Set filter to display only unchanged rows.
    dataView.RowStateFilter = DataViewRowState.Unchanged;
    PrintView(dataView, "Unchanged");

    // Set filter to display only original rows.
    dataView.RowStateFilter = DataViewRowState.OriginalRows;
    PrintView(dataView, "OriginalRows");
}

static private void PrintView(DataView dataView, string label)
{
    Console.WriteLine("\n" + label);
    for (int i = 0; i < dataView.Count; i++)
    {
        Console.WriteLine(dataView[i]["dataColumn"]);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间
DataRow
DataView
DataView
Select


DataViewSetting 类

DataViewSetting 类
成员

表示从 DataViewManager 创建的 DataView 的 ApplyDefaultSort、DataViewManager、RowFilter、RowStateFilter、Sort 和 Table 的默认设置。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<TypeConverterAttribute(GetType(ExpandableObjectConverter))> _
Public Class DataViewSetting
[TypeConverterAttribute(typeof(ExpandableObjectConverter))]
public class DataViewSetting
[TypeConverterAttribute(typeof(ExpandableObjectConverter))]
public ref class DataViewSetting
[<TypeConverterAttribute(typeof(ExpandableObjectConverter))>]
type DataViewSetting =  class end

System.Data System.Data..::.DataViewSettingDataViewSetting

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSetting 成员
System.Data 命名空间


DataViewSetting 成员

DataViewSetting 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewSetting 类

表示从 DataViewManager 创建的 DataView 的 ApplyDefaultSort、DataViewManager、RowFilter、RowStateFilter、Sort 和 Table 的默认设置。

DataViewSetting 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataViewSetting 类
System.Data 命名空间


DataViewSetting 方法

DataViewSetting 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewSetting 类

DataViewSetting 类型公开以下成员。

名称 说明
页首

参考

DataViewSetting 类
System.Data 命名空间


DataViewSetting 属性

DataViewSetting 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewSetting 类

DataViewSetting 类型公开以下成员。

名称 说明
页首

参考

DataViewSetting 类
System.Data 命名空间


DataViewSetting ..::.ApplyDefaultSort 属性

DataViewSetting
.
.
::
.
ApplyDefaultSort 属性
DataViewSetting 类

获取或设置一个值，该值指示是否使用默认排序。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property ApplyDefaultSort As Boolean
    Get
    Set
public bool ApplyDefaultSort { get; set; }
public:
property bool ApplyDefaultSort {
    bool get ();
    void set (bool value);
}
member ApplyDefaultSort : bool with get, set

属性值

类型： System Boolean
如果使用默认排序方式，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSetting 类
DataViewSetting 成员
System.Data 命名空间


DataViewSetting ..::.DataViewManager 属性

DataViewSetting
.
.
::
.
DataViewManager 属性
DataViewSetting 类

获取包含此 DataViewSetting 的 DataViewManager。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property DataViewManager As DataViewManager
    Get
[BrowsableAttribute(false)]
public DataViewManager DataViewManager { get; }
[BrowsableAttribute(false)]
public:
property DataViewManager^ DataViewManager {
    DataViewManager^ get ();
}
[<BrowsableAttribute(false)>]
member DataViewManager : DataViewManager

属性值

类型： System.Data DataViewManager
一个 DataViewManager 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSetting 类
DataViewSetting 成员
System.Data 命名空间


DataViewSetting ..::.RowFilter 属性

DataViewSetting
.
.
::
.
RowFilter 属性
DataViewSetting 类

获取或设置应用于 DataView 中的筛选器。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property RowFilter As String
    Get
    Set
public string RowFilter { get; set; }
public:
property String^ RowFilter {
    String^ get ();
    void set (String^ value);
}
member RowFilter : string with get, set

属性值

类型： System String
包含要应用的筛选器的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSetting 类
DataViewSetting 成员
System.Data 命名空间


DataViewSetting ..::.RowStateFilter 属性

DataViewSetting
.
.
::
.
RowStateFilter 属性
DataViewSetting 类

获取或设置一个值，该值指示在 DataView 中是显示 Current、Deleted、Modified Current、ModifiedOriginal、New、Original、Unchanged 还是不显示任何行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property RowStateFilter As DataViewRowState
    Get
    Set
public DataViewRowState RowStateFilter { get; set; }
public:
property DataViewRowState RowStateFilter {
    DataViewRowState get ();
    void set (DataViewRowState value);
}
member RowStateFilter : DataViewRowState with get, set

属性值

类型： System.Data DataViewRowState
一个指示要显示哪些行的值。

RowStateFilter 的默认值是 DataViewRowState.CurrentRows。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSetting 类
DataViewSetting 成员
System.Data 命名空间


DataViewSetting ..::.Sort 属性

DataViewSetting
.
.
::
.
Sort 属性
DataViewSetting 类

获取或设置一个值，该值指示要应用于 DataView 中的排序。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Sort As String
    Get
    Set
public string Sort { get; set; }
public:
property String^ Sort {
    String^ get ();
    void set (String^ value);
}
member Sort : string with get, set

属性值

类型： System String
要应用于 DataView 中的排序。

Sort 有两个默认值，具体使用哪一个取决于 RowFilter 属性的值。如果 RowFilter 为 Null 或为空（即未显式指定其值），将按 DataRow 在 Rows 集合中的位置或序号对 DataView 中的 DataRowView 进行排序。如果 Sort 的默认值为空字符串，将按 DataRow 在 Rows 集合中的位置或序号对 DataView 中的 DataRowView 进行排序。 Sort 有两个默认值，具体使用哪一个取决于 RowFilter 属性的值。如果 RowFilter 为 Null 或为空（即未显式指定其值），将按 DataRow 在 Rows 集合中的位置或序号对 DataView 中的 DataRowView 进行排序。如果 Sort 的默认值为空字符串，将按 DataRow 在 Rows 集合中的位置或序号对 DataView 中的 DataRowView 进行排序。 Sort 有两个默认值，具体使用哪一个取决于 RowFilter 属性的值。如果 RowFilter 为 Null 或为空（即未显式指定其值），将按 DataRow 在 Rows 集合中的位置或序号对 DataView 中的 DataRowView 进行排序。如果 Sort 的默认值为空字符串，将按 DataRow 在 Rows 集合中的位置或序号对 DataView 中的 DataRowView 进行排序。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSetting 类
DataViewSetting 成员
System.Data 命名空间


DataViewSetting ..::.Table 属性

DataViewSetting
.
.
::
.
Table 属性
DataViewSetting 类

获取要应用 DataViewSetting 属性的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property Table As DataTable
    Get
[BrowsableAttribute(false)]
public DataTable Table { get; }
[BrowsableAttribute(false)]
public:
property DataTable^ Table {
    DataTable^ get ();
}
[<BrowsableAttribute(false)>]
member Table : DataTable

属性值

类型： System.Data DataTable
一个 DataTable 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSetting 类
DataViewSetting 成员
System.Data 命名空间


DataViewSettingCollection 类

DataViewSettingCollection 类
成员

包含 DataSet 中每个 DataTable 的 DataViewSetting 对象的只读集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class DataViewSettingCollection _
    Implements ICollection, IEnumerable
public class DataViewSettingCollection : ICollection,
    IEnumerable
public ref class DataViewSettingCollection : ICollection,
    IEnumerable
type DataViewSettingCollection =
    class
        interface ICollection
        interface IEnumerable
    end

用户不能在该集合中添加或移除 DataViewSetting，但是可以更改与特定 DataTable 相对应的 DataViewSetting 的属性。如果在数据集中添加或移除 DataTable，则将在该集合中添加或移除相应的 DataViewSetting。 用户不能在该集合中添加或移除 DataViewSetting，但是可以更改与特定 DataTable 相对应的 DataViewSetting 的属性。如果在数据集中添加或移除 DataTable，则将在该集合中添加或移除相应的 DataViewSetting。

System.Data System.Data..::.DataViewSettingCollectionDataViewSettingCollection

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 成员
System.Data 命名空间


DataViewSettingCollection 成员

DataViewSettingCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewSettingCollection 类

包含 DataSet 中每个 DataTable 的 DataViewSetting 对象的只读集合。

DataViewSettingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataViewSettingCollection 类
System.Data 命名空间


DataViewSettingCollection 方法

DataViewSettingCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewSettingCollection 类

DataViewSettingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataViewSettingCollection 类
System.Data 命名空间


DataViewSettingCollection ..::.CopyTo 方法

DataViewSettingCollection
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewSettingCollection 类

从指定的索引处开始，将集合对象复制到一维 Array 实例中。

名称 说明
页首

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
System.Data 命名空间


DataViewSettingCollection ..::.CopyTo 方法 (Array, Int32)

DataViewSettingCollection
.
.
::
.
CopyTo 方法 (Array, Int32)
DataViewSettingCollection 类

从指定的索引处开始，将集合对象复制到一维 Array 实例中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    ar As Array, _
    index As Integer _
)
public void CopyTo(
    Array ar,
    int index
)
public:
virtual void CopyTo(
    Array^ ar,
    int index
) sealed
abstract CopyTo :
        ar:Array *
        index:int -> unit
override CopyTo :
        ar:Array *
        index:int -> unit

参数

ar
类型： System Array
一维 Array，为从集合所复制的值的目标位置。
index
类型： System Int32
插入操作开始处的数组索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
CopyTo 重载
System.Data 命名空间


DataViewSettingCollection ..::.CopyTo 方法 ( array<DataViewSetting >[]()[], Int32)

DataViewSettingCollection
.
.
::
.
CopyTo 方法 (
array<
DataViewSetting
>
[]
()
[]
, Int32)
DataViewSettingCollection 类

从指定的索引处开始，将集合对象复制到一维 Array 实例中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    ar As DataViewSetting(), _
    index As Integer _
)
public void CopyTo(
    DataViewSetting[] ar,
    int index
)
public:
void CopyTo(
    array<DataViewSetting^>^ ar,
    int index
)
member CopyTo :
        ar:DataViewSetting[] *
        index:int -> unit

参数

ar
类型：
array<
System.Data DataViewSetting
>
[]
()
[]

一维 Array，为从集合所复制的值的目标位置。
index
类型： System Int32
插入操作开始处的数组索引。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
CopyTo 重载
System.Data 命名空间


DataViewSettingCollection ..::.GetEnumerator 方法

DataViewSettingCollection
.
.
::
.
GetEnumerator 方法
DataViewSettingCollection 类

获取集合的 IEnumerator。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Function GetEnumerator As IEnumerator
public IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个 IEnumerator 对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
System.Data 命名空间


DataViewSettingCollection 属性

DataViewSettingCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewSettingCollection 类

DataViewSettingCollection 类型公开以下成员。

名称 说明
页首

参考

DataViewSettingCollection 类
System.Data 命名空间


DataViewSettingCollection ..::.Count 属性

DataViewSettingCollection
.
.
::
.
Count 属性
DataViewSettingCollection 类

获取 DataViewSettingCollection 中的 DataViewSetting 对象数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overridable ReadOnly Property Count As Integer
    Get
[BrowsableAttribute(false)]
public virtual int Count { get; }
[BrowsableAttribute(false)]
public:
virtual property int Count {
    int get ();
}
[<BrowsableAttribute(false)>]
abstract Count : int
[<BrowsableAttribute(false)>]
override Count : int

属性值

类型： System Int32
集合中的 DataViewSetting 对象数。

实现

DataViewSetting 对象的数量与 DataSet 中 DataTable 对象的数量相同。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
System.Data 命名空间


DataViewSettingCollection ..::.IsReadOnly 属性

DataViewSettingCollection
.
.
::
.
IsReadOnly 属性
DataViewSettingCollection 类

获取一个值，该值指示 DataViewSettingCollection 是否为只读。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property IsReadOnly As Boolean
    Get
[BrowsableAttribute(false)]
public bool IsReadOnly { get; }
[BrowsableAttribute(false)]
public:
property bool IsReadOnly {
    bool get ();
}
[<BrowsableAttribute(false)>]
member IsReadOnly : bool

属性值

类型： System Boolean
返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
System.Data 命名空间


DataViewSettingCollection ..::.IsSynchronized 属性

DataViewSettingCollection
.
.
::
.
IsSynchronized 属性
DataViewSettingCollection 类

获取一个值，该值指示是否同步对 DataViewSettingCollection 的访问（线程安全）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property IsSynchronized As Boolean
    Get
[BrowsableAttribute(false)]
public bool IsSynchronized { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsSynchronized {
    bool get () sealed;
}
[<BrowsableAttribute(false)>]
abstract IsSynchronized : bool
[<BrowsableAttribute(false)>]
override IsSynchronized : bool

属性值

类型： System Boolean
如果不被派生类重写，该属性总是为 false。

实现

此属性实现 ICollection 接口。

派生类可以使用 SyncRoot 属性提供 DataViewSettingCollection 的同步版本。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
System.Data 命名空间


DataViewSettingCollection ..::.Item 属性

DataViewSettingCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataViewSettingCollection 类

获取集合中指定 DataTable 的 DataViewSetting。

名称 说明
页首

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
System.Data 命名空间


DataViewSettingCollection ..::.Item 属性 (DataTable)

DataViewSettingCollection
.
.
::
.
Item 属性 (DataTable)
DataViewSettingCollection 类

获取集合中指定 DataTable 的 DataViewSetting 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property Item ( _
    table As DataTable _
) As DataViewSetting
    Get
    Set
public virtual DataViewSetting this[
    DataTable table
] { get; set; }
public:
virtual property DataViewSetting^ Item[DataTable^ table] {
    DataViewSetting^ get (DataTable^ table);
    void set (DataTable^ table, DataViewSetting^ value);
}
abstract Item : DataViewSetting with get, set
override Item : DataViewSetting with get, set

参数

table
类型： System.Data DataTable
要查找的 DataTable。

属性值

类型： System.Data DataViewSetting
DataViewSetting。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
Item 重载
System.Data 命名空间


DataViewSettingCollection ..::.Item 属性 (Int32)

DataViewSettingCollection
.
.
::
.
Item 属性 (Int32)
DataViewSettingCollection 类

获取 DataTable 的 DataViewSetting 对象（由其索引指定）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property Item ( _
    index As Integer _
) As DataViewSetting
    Get
    Set
public virtual DataViewSetting this[
    int index
] { get; set; }
public:
virtual property DataViewSetting^ Item[int index] {
    DataViewSetting^ get (int index);
    void set (int index, DataViewSetting^ value);
}
abstract Item : DataViewSetting with get, set
override Item : DataViewSetting with get, set

参数

index
类型： System Int32
要查找的 DataTable 的从零开始的索引。

属性值

类型： System.Data DataViewSetting
DataViewSetting。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
Item 重载
System.Data 命名空间


DataViewSettingCollection ..::.Item 属性 (String)

DataViewSettingCollection
.
.
::
.
Item 属性 (String)
DataViewSettingCollection 类

获取 DataTable 的 DataViewSetting（由其名称指定）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property Item ( _
    tableName As String _
) As DataViewSetting
    Get
public virtual DataViewSetting this[
    string tableName
] { get; }
public:
virtual property DataViewSetting^ Item[String^ tableName] {
    DataViewSetting^ get (String^ tableName);
}
abstract Item : DataViewSetting
override Item : DataViewSetting

参数

tableName
类型： System String
要查找的 DataTable 的名称。

属性值

类型： System.Data DataViewSetting
DataViewSetting。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
Item 重载
System.Data 命名空间


DataViewSettingCollection ..::.SyncRoot 属性

DataViewSettingCollection
.
.
::
.
SyncRoot 属性
DataViewSettingCollection 类

获取可用于同步 DataViewSettingCollection 访问的对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property SyncRoot As Object
    Get
[BrowsableAttribute(false)]
public Object SyncRoot { get; }
[BrowsableAttribute(false)]
public:
virtual property Object^ SyncRoot {
    Object^ get () sealed;
}
[<BrowsableAttribute(false)>]
abstract SyncRoot : Object
[<BrowsableAttribute(false)>]
override SyncRoot : Object

属性值

类型： System Object
可用于同步对 DataViewSettingCollection 的访问的对象。

实现

派生类可以使用 SyncRoot 属性提供 DataViewSettingCollection 的同步版本。

程序代码必须总是在 DataViewSettingCollection 的 SyncRoot 上执行同步操作，而不直接在 DataViewSettingCollection 上执行。这保证了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改 DataViewSettingCollection 的其他线程保持正确的同步。 程序代码必须总是在 DataViewSettingCollection 的 SyncRoot 上执行同步操作，而不直接在 DataViewSettingCollection 上执行。这保证了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改 DataViewSettingCollection 的其他线程保持正确的同步。 程序代码必须总是在 DataViewSettingCollection 的 SyncRoot 上执行同步操作，而不直接在 DataViewSettingCollection 上执行。这保证了从其他对象派生的集合的正确操作。具体来说，它与可能同时修改 DataViewSettingCollection 的其他线程保持正确的同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataViewSettingCollection 类
DataViewSettingCollection 成员
System.Data 命名空间


DBConcurrencyException 类

DBConcurrencyException 类
成员

在插入、更新或删除操作过程中当受影响的行数等于零时由 DataAdapter 引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public NotInheritable Class DBConcurrencyException _
    Inherits SystemException
[SerializableAttribute]
public sealed class DBConcurrencyException : SystemException
[SerializableAttribute]
public ref class DBConcurrencyException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
type DBConcurrencyException =
    class
        inherit SystemException
    end

DataAdapter 检查每次执行的插入、更新或删除操作所影响的行数；如果行数等于零，则引发此异常。此异常通常由并发冲突引起。 DataAdapter 检查每次执行的插入、更新或删除操作所影响的行数；如果行数等于零，则引发此异常。此异常通常由并发冲突引起。

System.Data System.Data..::.DBConcurrencyExceptionDBConcurrencyException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBConcurrencyException 成员
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException 成员

DBConcurrencyException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBConcurrencyException 类

在插入、更新或删除操作过程中当受影响的行数等于零时由 DataAdapter 引发的异常。

DBConcurrencyException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DBConcurrencyException 类
System.Data 命名空间


DBConcurrencyException 构造函数

DBConcurrencyException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBConcurrencyException 类

初始化 DBConcurrencyException 类的新实例。

名称 说明
页首

参考

DBConcurrencyException 类
DBConcurrencyException 成员
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException 构造函数

DBConcurrencyException 构造函数
DBConcurrencyException 类

初始化 DBConcurrencyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DBConcurrencyException()
public:
DBConcurrencyException()
new : unit -> DBConcurrencyException

默认构造函数将所有字段初始化为其默认值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBConcurrencyException 类
DBConcurrencyException 成员
DBConcurrencyException 重载
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException 构造函数 (String)

DBConcurrencyException 构造函数 (String)
DBConcurrencyException 类

初始化 DBConcurrencyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String _
)
public DBConcurrencyException(
    string message
)
public:
DBConcurrencyException(
    String^ message
)
new :
        message:string -> DBConcurrencyException

参数

message
类型： System String
文本字符串，它描述有关异常的详细信息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBConcurrencyException 类
DBConcurrencyException 成员
DBConcurrencyException 重载
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException 构造函数 (String, Exception)

DBConcurrencyException 构造函数 (String, Exception)
DBConcurrencyException 类

初始化 DBConcurrencyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception _
)
public DBConcurrencyException(
    string message,
    Exception inner
)
public:
DBConcurrencyException(
    String^ message,
    Exception^ inner
)
new :
        message:string *
        inner:Exception -> DBConcurrencyException

参数

message
类型： System String
文本字符串，它描述有关异常的详细信息。
inner
类型： System Exception
对内部异常的引用。

您可以创建对以前的异常进行捕捉的新异常。处理第二个异常的代码可以利用以前的异常（也叫做内部异常）中的附加信息来检查初始错误的原因。 您可以创建对以前的异常进行捕捉的新异常。处理第二个异常的代码可以利用以前的异常（也叫做内部异常）中的附加信息来检查初始错误的原因。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBConcurrencyException 类
DBConcurrencyException 成员
DBConcurrencyException 重载
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException 构造函数 (String, Exception, array<DataRow >[]()[])

DBConcurrencyException 构造函数 (String, Exception,
array<
DataRow
>
[]
()
[]
)
DBConcurrencyException 类

初始化 DBConcurrencyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    inner As Exception, _
    dataRows As DataRow() _
)
public DBConcurrencyException(
    string message,
    Exception inner,
    DataRow[] dataRows
)
public:
DBConcurrencyException(
    String^ message,
    Exception^ inner,
    array<DataRow^>^ dataRows
)
new :
        message:string *
        inner:Exception *
        dataRows:DataRow[] -> DBConcurrencyException

参数

message
类型： System String
说明发生此异常的原因的错误信息。
inner
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。
dataRows
类型：
array<
System.Data DataRow
>
[]
()
[]

一个数组，其中包含因更新失败而导致生成此异常的 DataRow 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBConcurrencyException 类
DBConcurrencyException 成员
DBConcurrencyException 重载
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException 方法

DBConcurrencyException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBConcurrencyException 类

DBConcurrencyException 类型公开以下成员。

名称 说明
页首

参考

DBConcurrencyException 类
System.Data 命名空间


DBConcurrencyException ..::.CopyToRows 方法

DBConcurrencyException
.
.
::
.
CopyToRows 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBConcurrencyException 类

将因更新失败而导致生成此异常的 DataRow 对象复制到指定的数组。

名称 说明
页首

参考

DBConcurrencyException 类
DBConcurrencyException 成员
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException ..::.CopyToRows 方法 ( array<DataRow >[]()[])

DBConcurrencyException
.
.
::
.
CopyToRows 方法 (
array<
DataRow
>
[]
()
[]
)
DBConcurrencyException 类

将因更新失败而导致生成此异常的 DataRow 对象复制到指定的 DataRow 对象数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyToRows ( _
    array As DataRow() _
)
public void CopyToRows(
    DataRow[] array
)
public:
void CopyToRows(
    array<DataRow^>^ array
)
member CopyToRows :
        array:DataRow[] -> unit

参数

array
类型：
array<
System.Data DataRow
>
[]
()
[]

要向其中复制 DataRow 对象的一维的 DataRow 对象数组。

在 DataAdapter 的 ContinueUpdateOnError 属性设置为 true 的情况下执行批量更新时，如果所有行更新失败，将引发此异常。在这种情况下，此 DBConcurrencyException 将包含所有更新失败的行的 DataRow 对象，而不只是 Row 中的一个 DataRow 对象，并且可通过调用 CopyToRows 来检索受影响的 DataRow 对象。 在 DataAdapter 的 ContinueUpdateOnError 属性设置为 true 的情况下执行批量更新时，如果所有行更新失败，将引发此异常。在这种情况下，此 DBConcurrencyException 将包含所有更新失败的行的 DataRow 对象，而不只是 Row 中的一个 DataRow 对象，并且可通过调用 CopyToRows 来检索受影响的 DataRow 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBConcurrencyException 类
DBConcurrencyException 成员
CopyToRows 重载
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)
Performing Batch Updates with a DataAdapter


DBConcurrencyException ..::.CopyToRows 方法 ( array<DataRow >[]()[], Int32)

DBConcurrencyException
.
.
::
.
CopyToRows 方法 (
array<
DataRow
>
[]
()
[]
, Int32)
DBConcurrencyException 类

将因更新失败而导致生成此异常的 DataRow 对象复制到指定的 DataRow 对象数组（从指定的目标数组索引开始）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyToRows ( _
    array As DataRow(), _
    arrayIndex As Integer _
)
public void CopyToRows(
    DataRow[] array,
    int arrayIndex
)
public:
void CopyToRows(
    array<DataRow^>^ array,
    int arrayIndex
)
member CopyToRows :
        array:DataRow[] *
        arrayIndex:int -> unit

参数

array
类型：
array<
System.Data DataRow
>
[]
()
[]

要向其中复制 DataRow 对象的一维的 DataRow 对象数组。
arrayIndex
类型： System Int32
从其所在位置开始复制对象的目标数组索引。

在 DataAdapter 的 ContinueUpdateOnError 属性设置为 true 的情况下执行批量更新时，如果所有行更新失败，将引发此异常。在这种情况下，此 DBConcurrencyException 将包含所有更新失败的行的 DataRow 对象，而不只是 Row 中的一个 DataRow 对象，并且可通过调用 CopyToRows 来检索受影响的 DataRow 对象。 在 DataAdapter 的 ContinueUpdateOnError 属性设置为 true 的情况下执行批量更新时，如果所有行更新失败，将引发此异常。在这种情况下，此 DBConcurrencyException 将包含所有更新失败的行的 DataRow 对象，而不只是 Row 中的一个 DataRow 对象，并且可通过调用 CopyToRows 来检索受影响的 DataRow 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBConcurrencyException 类
DBConcurrencyException 成员
CopyToRows 重载
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)
Performing Batch Updates with a DataAdapter


DBConcurrencyException ..::.GetObjectData 方法

DBConcurrencyException
.
.
::
.
GetObjectData 方法
DBConcurrencyException 类

使用序列化 DBConcurrencyException 所需的数据填充指定的序列化信息对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags := SecurityPermissionFlag.SerializationFormatter)> _
Public Overrides Sub GetObjectData ( _
    si As SerializationInfo, _
    context As StreamingContext _
)
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public override void GetObjectData(
    SerializationInfo si,
    StreamingContext context
)
[SecurityPermissionAttribute(SecurityAction::LinkDemand, Flags = SecurityPermissionFlag::SerializationFormatter)]
public:
virtual void GetObjectData(
    SerializationInfo^ si,
    StreamingContext context
) override
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)>]
abstract GetObjectData :
        si:SerializationInfo *
        context:StreamingContext -> unit
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)>]
override GetObjectData :
        si:SerializationInfo *
        context:StreamingContext -> unit

参数

si
类型： System.Runtime.Serialization SerializationInfo
一个 SerializationInfo，它保留与 DBConcurrencyException 相关联的序列化数据。
context
类型： System.Runtime.Serialization StreamingContext
一个 StreamingContext，它包含与 DBConcurrencyException 相关联的序列化流的源和目标。

实现

异常 | 条件
ArgumentNullException | info 参数是空引用（Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBConcurrencyException 类
DBConcurrencyException 成员
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException 属性

DBConcurrencyException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBConcurrencyException 类

DBConcurrencyException 类型公开以下成员。

名称 说明
页首

参考

DBConcurrencyException 类
System.Data 命名空间


DBConcurrencyException ..::.Row 属性

DBConcurrencyException
.
.
::
.
Row 属性
DBConcurrencyException 类

获取或设置生成 DBConcurrencyException 的 DataRow 的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Row As DataRow
    Get
    Set
public DataRow Row { get; set; }
public:
property DataRow^ Row {
    DataRow^ get ();
    void set (DataRow^ value);
}
member Row : DataRow with get, set

属性值

类型： System.Data DataRow
DataRow 的值。

使用 Row 检索生成 DBConcurrencyException 的 DataRow 行的值。设置 DataRow 的值没有影响。 使用 Row 检索生成 DBConcurrencyException 的 DataRow 行的值。设置 DataRow 的值没有影响。

在 DataAdapter 的 ContinueUpdateOnError 属性设置为 true 的情况下执行批量更新时，如果所有行更新失败，将引发此异常。在这种情况下，此 DBConcurrencyException 将包含所有更新失败的行的 DataRow 对象，而不只是 Row 中的一个 DataRow 对象，并且可通过调用 CopyToRows 来检索受影响的 DataRow 对象。 在 DataAdapter 的 ContinueUpdateOnError 属性设置为 true 的情况下执行批量更新时，如果所有行更新失败，将引发此异常。在这种情况下，此 DBConcurrencyException 将包含所有更新失败的行的 DataRow 对象，而不只是 Row 中的一个 DataRow 对象，并且可通过调用 CopyToRows 来检索受影响的 DataRow 对象。

对于 DataRow 对象不存在序列化支持。因此，如果序列化 DBConcurrencyException 对象，则该对象的序列化版本中 Row 属性的值设置为空值。 对于 DataRow 对象不存在序列化支持。因此，如果序列化 DBConcurrencyException 对象，则该对象的序列化版本中 Row 属性的值设置为空值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBConcurrencyException 类
DBConcurrencyException 成员
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException ..::.RowCount 属性

DBConcurrencyException
.
.
::
.
RowCount 属性
DBConcurrencyException 类

获取更新失败（因而生成此异常）的行数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property RowCount As Integer
    Get
public int RowCount { get; }
public:
property int RowCount {
    int get ();
}
member RowCount : int

属性值

类型： System Int32
一个整数，其中包含表示更新失败的行数的计数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DBConcurrencyException 类
DBConcurrencyException 成员
System.Data 命名空间

其他资源

DataAdapter 和 DataReader (ADO.NET)


DBConcurrencyException 事件

DBConcurrencyException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBConcurrencyException 类

DBConcurrencyException 类型公开以下成员。

名称 说明
页首

参考

DBConcurrencyException 类
System.Data 命名空间


DbType 枚举

DbType 枚举

指定 .NET Framework 数据提供程序的字段、属性或 Parameter 对象的数据类型。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration DbType
public enum DbType
public enum class DbType
type DbType
 | 成员名称 | 说明
由 XNA Framework 提供支持 | AnsiString | 非 Unicode 字符的可变长度流，范围在 1 到 8,000 个字符之间。
由 XNA Framework 提供支持 | Binary | 二进制数据的可变长度流，范围在 1 到 8,000 个字节之间。
由 XNA Framework 提供支持 | Byte | 一个 8 位无符号整数，范围在 0 到 255 之间。
由 XNA Framework 提供支持 | Boolean | 简单类型，表示 true 或 false 的布尔值。
由 XNA Framework 提供支持 | Currency | 货币值，范围在 -2 63（即 -922,337,203,685,477.5808）到 2 63 -1（即 +922,337,203,685,477.5807）之间，精度为千分之十个货币单位。
由 XNA Framework 提供支持 | Date | 表示日期值的类型。
由 XNA Framework 提供支持 | DateTime | 表示一个日期和时间值的类型。
由 XNA Framework 提供支持 | Decimal | 简单类型，表示从 1.0 x 10 -28 到大约 7.9 x 10 28 且有效位数为 28 到 29 位的值。
由 XNA Framework 提供支持 | Double | 浮点型，表示从大约 5.0 x 10 -324 到 1.7 x 10 308 且精度为 15 到 16 位的值。
由 XNA Framework 提供支持 | Guid | 全局唯一标识符（或 GUID）。
由 XNA Framework 提供支持 | Int16 | 整型，表示值介于 -32768 到 32767 之间的有符号 16 位整数。
由 XNA Framework 提供支持 | Int32 | 整型，表示值介于 -2147483648 到 2147483647 之间的有符号 32 位整数。
由 XNA Framework 提供支持 | Int64 | 整型，表示值介于 -9223372036854775808 到 9223372036854775807 之间的有符号 64 位整数。
由 XNA Framework 提供支持 | Object | 常规类型，表示任何没有由其他 DbType 值显式表示的引用或值类型。
由 XNA Framework 提供支持 | SByte | 整型，表示值介于 -128 到 127 之间的有符号 8 位整数。
由 XNA Framework 提供支持 | Single | 浮点型，表示从大约 1.5 x 10 -45 到 3.4 x 10 38 且精度为 7 位的值。
由 XNA Framework 提供支持 | String | 表示 Unicode 字符串的类型。
由 XNA Framework 提供支持 | Time | 一个表示 SQL Server DateTime 值的类型。如果要使用 SQL Server time 值，请使用 Time。 一个表示 SQL Server DateTime 值的类型。如果要使用 SQL Server time 值，请使用 Time。
由 XNA Framework 提供支持 | UInt16 | 整型，表示值介于 0 到 65535 之间的无符号 16 位整数。
由 XNA Framework 提供支持 | UInt32 | 整型，表示值介于 0 到 4294967295 之间的无符号 32 位整数。
由 XNA Framework 提供支持 | UInt64 | 整型，表示值介于 0 到 18446744073709551615 之间的无符号 64 位整数。
由 XNA Framework 提供支持 | VarNumeric | 变长数值。
由 XNA Framework 提供支持 | AnsiStringFixedLength | 非 Unicode 字符的固定长度流。
由 XNA Framework 提供支持 | StringFixedLength | Unicode 字符的定长串。
由 XNA Framework 提供支持 | Xml | XML 文档或片段的分析表示。
由 XNA Framework 提供支持 | DateTime2 | 日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。 日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。 日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。
由 XNA Framework 提供支持 | DateTimeOffset | 显示时区的日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。时区值范围从 -14:00 到 +14:00。 显示时区的日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。时区值范围从 -14:00 到 +14:00。 显示时区的日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。时区值范围从 -14:00 到 +14:00。 显示时区的日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。时区值范围从 -14:00 到 +14:00。

该参数类型是 .NET Framework 数据提供程序专用的。在将 Parameter 的值传递到数据源之前，指定类型就会将该值转换为数据提供程序“类型”。如果未指定类型，ADO.NET 就会从 Parameter 对象的 Value 属性推断出 Parameter 的数据提供程序“类型”。 该参数类型是 .NET Framework 数据提供程序专用的。在将 Parameter 的值传递到数据源之前，指定类型就会将该值转换为数据提供程序“类型”。如果未指定类型，ADO.NET 就会从 Parameter 对象的 Value 属性推断出 Parameter 的数据提供程序“类型”。 该参数类型是 .NET Framework 数据提供程序专用的。在将 Parameter 的值传递到数据源之前，指定类型就会将该值转换为数据提供程序“类型”。如果未指定类型，ADO.NET 就会从 Parameter 对象的 Value 属性推断出 Parameter 的数据提供程序“类型”。

也可以通过设置 Parameter 对象的 DbType 属性，泛泛地指定 Parameter 的类型。

如果字节数组大于 8,000 字节，ADO.NET 将无法正确推断类型。当处理多于 8,000 个字节的字节数组时，请显式指定 DbType。 如果字节数组大于 8,000 字节，ADO.NET 将无法正确推断类型。当处理多于 8,000 个字节的字节数组时，请显式指定 DbType。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间

其他资源

配置参数和参数数据类型 (ADO.NET)
ADO.NET 中的数据类型映射


DeletedRowInaccessibleException 类

DeletedRowInaccessibleException 类
成员

表示尝试在已删除的 DataRow 上执行操作时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class DeletedRowInaccessibleException _
    Inherits DataException
[SerializableAttribute]
public class DeletedRowInaccessibleException : DataException
[SerializableAttribute]
public ref class DeletedRowInaccessibleException : public DataException
[<SerializableAttribute>]
type DeletedRowInaccessibleException =
    class
        inherit DataException
    end

若要删除 DataRow，请使用 DataRow 类的 Delete 方法。删除了某一行后，任何修改该行的尝试都将生成 DeletedRowInaccessibleException。 若要删除 DataRow，请使用 DataRow 类的 Delete 方法。删除了某一行后，任何修改该行的尝试都将生成 DeletedRowInaccessibleException。

当使用以下属性或方法之一尝试获取或设置已删除的 DataRow 的值时，会引发 DeletedRowInaccessibleException：

  • Item 属性

  • ItemArray 属性

  • BeginEdit 方法

使用 DataRow 类的 RowState 确定行是否已被删除。如果已被删除，则可以使用 Original()()() 方法检索该行，因为已删除的行没有可用于 Current()()() 状态的值。 使用 DataRow 类的 RowState 确定行是否已被删除。如果已被删除，则可以使用 Original()()() 方法检索该行，因为已删除的行没有可用于 Current()()() 状态的值。

System.Data System.Data..::.DeletedRowInaccessibleExceptionDeletedRowInaccessibleException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DeletedRowInaccessibleException 成员
System.Data 命名空间
BeginEdit
DataRow
DataRowState
Delete
Item
ItemArray
RowState


DeletedRowInaccessibleException 成员

DeletedRowInaccessibleException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DeletedRowInaccessibleException 类

表示尝试在已删除的 DataRow 上执行操作时引发的异常。

DeletedRowInaccessibleException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DeletedRowInaccessibleException 类
System.Data 命名空间


DeletedRowInaccessibleException 构造函数

DeletedRowInaccessibleException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DeletedRowInaccessibleException 类

初始化 DeletedRowInaccessibleException 类的新实例。

名称 说明
页首

参考

DeletedRowInaccessibleException 类
DeletedRowInaccessibleException 成员
System.Data 命名空间


DeletedRowInaccessibleException 构造函数

DeletedRowInaccessibleException 构造函数
DeletedRowInaccessibleException 类

初始化 DeletedRowInaccessibleException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DeletedRowInaccessibleException()
public:
DeletedRowInaccessibleException()
new : unit -> DeletedRowInaccessibleException

使用 DataRow 类的 RowState 确定行是否已被删除。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DeletedRowInaccessibleException 类
DeletedRowInaccessibleException 成员
DeletedRowInaccessibleException 重载
System.Data 命名空间
BeginEdit
DataRow
DataRowState
Item
ItemArray
RowState


DeletedRowInaccessibleException 构造函数 (String)

DeletedRowInaccessibleException 构造函数 (String)
DeletedRowInaccessibleException 类

使用指定的字符串初始化 DeletedRowInaccessibleException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public DeletedRowInaccessibleException(
    string s
)
public:
DeletedRowInaccessibleException(
    String^ s
)
new :
        s:string -> DeletedRowInaccessibleException

参数

s
类型： System String
当引发异常时显示的字符串。

使用 DataRow 类的 RowState 确定行是否已被删除。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DeletedRowInaccessibleException 类
DeletedRowInaccessibleException 成员
DeletedRowInaccessibleException 重载
System.Data 命名空间
BeginEdit
DataRow
DataRowState
Item
ItemArray
RowState


DeletedRowInaccessibleException 构造函数 (SerializationInfo, StreamingContext)

DeletedRowInaccessibleException 构造函数 (SerializationInfo, StreamingContext)
DeletedRowInaccessibleException 类

以序列化信息初始化 DeletedRowInaccessibleException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected DeletedRowInaccessibleException(
    SerializationInfo info,
    StreamingContext context
)
protected:
DeletedRowInaccessibleException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> DeletedRowInaccessibleException

参数

info
类型： System.Runtime.Serialization SerializationInfo
序列化或反序列化某个对象所需的数据。。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DeletedRowInaccessibleException 类
DeletedRowInaccessibleException 成员
DeletedRowInaccessibleException 重载
System.Data 命名空间
StreamingContext
SerializationInfo


DeletedRowInaccessibleException 构造函数 (String, Exception)

DeletedRowInaccessibleException 构造函数 (String, Exception)
DeletedRowInaccessibleException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 DeletedRowInaccessibleException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public DeletedRowInaccessibleException(
    string message,
    Exception innerException
)
public:
DeletedRowInaccessibleException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> DeletedRowInaccessibleException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

使用 DataRow 类的 RowState 确定行是否已被删除。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DeletedRowInaccessibleException 类
DeletedRowInaccessibleException 成员
DeletedRowInaccessibleException 重载
System.Data 命名空间


DeletedRowInaccessibleException 方法

DeletedRowInaccessibleException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DeletedRowInaccessibleException 类

DeletedRowInaccessibleException 类型公开以下成员。

名称 说明
页首

参考

DeletedRowInaccessibleException 类
System.Data 命名空间


DeletedRowInaccessibleException 属性

DeletedRowInaccessibleException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DeletedRowInaccessibleException 类

DeletedRowInaccessibleException 类型公开以下成员。

名称 说明
页首

参考

DeletedRowInaccessibleException 类
System.Data 命名空间


DeletedRowInaccessibleException 事件

DeletedRowInaccessibleException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DeletedRowInaccessibleException 类

DeletedRowInaccessibleException 类型公开以下成员。

名称 说明
页首

参考

DeletedRowInaccessibleException 类
System.Data 命名空间


DuplicateNameException 类

DuplicateNameException 类
成员

表示在 DataSet — 相关对象添加操作的过程中，遇到重复的数据库对象名称时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class DuplicateNameException _
    Inherits DataException
[SerializableAttribute]
public class DuplicateNameException : DataException
[SerializableAttribute]
public ref class DuplicateNameException : public DataException
[<SerializableAttribute>]
type DuplicateNameException =
    class
        inherit DataException
    end

可能遇到的重复数据库对象名称的示例有表、列、关系或约束。

System.Data System.Data..::.DuplicateNameExceptionDuplicateNameException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DuplicateNameException 成员
System.Data 命名空间


DuplicateNameException 成员

DuplicateNameException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateNameException 类

表示在 DataSet — 相关对象添加操作的过程中，遇到重复的数据库对象名称时引发的异常。

DuplicateNameException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DuplicateNameException 类
System.Data 命名空间


DuplicateNameException 构造函数

DuplicateNameException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateNameException 类

初始化 DuplicateNameException 类的新实例。

名称 说明
页首

参考

DuplicateNameException 类
DuplicateNameException 成员
System.Data 命名空间


DuplicateNameException 构造函数

DuplicateNameException 构造函数
DuplicateNameException 类

初始化 DuplicateNameException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DuplicateNameException()
public:
DuplicateNameException()
new : unit -> DuplicateNameException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DuplicateNameException 类
DuplicateNameException 成员
DuplicateNameException 重载
System.Data 命名空间


DuplicateNameException 构造函数 (String)

DuplicateNameException 构造函数 (String)
DuplicateNameException 类

使用指定的字符串初始化 DuplicateNameException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public DuplicateNameException(
    string s
)
public:
DuplicateNameException(
    String^ s
)
new :
        s:string -> DuplicateNameException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DuplicateNameException 类
DuplicateNameException 成员
DuplicateNameException 重载
System.Data 命名空间


DuplicateNameException 构造函数 (SerializationInfo, StreamingContext)

DuplicateNameException 构造函数 (SerializationInfo, StreamingContext)
DuplicateNameException 类

以序列化信息初始化 DuplicateNameException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected DuplicateNameException(
    SerializationInfo info,
    StreamingContext context
)
protected:
DuplicateNameException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> DuplicateNameException

参数

info
类型： System.Runtime.Serialization SerializationInfo
序列化或反序列化某个对象所需的数据。。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateNameException 类
DuplicateNameException 成员
DuplicateNameException 重载
System.Data 命名空间
StreamingContext
SerializationInfo


DuplicateNameException 构造函数 (String, Exception)

DuplicateNameException 构造函数 (String, Exception)
DuplicateNameException 类

使用指定的字符串和异常初始化 DuplicateNameException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public DuplicateNameException(
    string message,
    Exception innerException
)
public:
DuplicateNameException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> DuplicateNameException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DuplicateNameException 类
DuplicateNameException 成员
DuplicateNameException 重载
System.Data 命名空间


DuplicateNameException 方法

DuplicateNameException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateNameException 类

DuplicateNameException 类型公开以下成员。

名称 说明
页首

参考

DuplicateNameException 类
System.Data 命名空间


DuplicateNameException 属性

DuplicateNameException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateNameException 类

DuplicateNameException 类型公开以下成员。

名称 说明
页首

参考

DuplicateNameException 类
System.Data 命名空间


DuplicateNameException 事件

DuplicateNameException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateNameException 类

DuplicateNameException 类型公开以下成员。

名称 说明
页首

参考

DuplicateNameException 类
System.Data 命名空间


EntityCommandCompilationException 类

EntityCommandCompilationException 类
成员

表示命令编译过程中发生的错误；当未能生成命令树时，表示命令文本。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class EntityCommandCompilationException _
    Inherits EntityException
[SerializableAttribute]
public sealed class EntityCommandCompilationException : EntityException
[SerializableAttribute]
public ref class EntityCommandCompilationException sealed : public EntityException
[<SealedAttribute>]
[<SerializableAttribute>]
type EntityCommandCompilationException =
    class
        inherit EntityException
    end

有关如何处理代码异常的更多信息，请参见 Exception。

System.Data System.Data..::.EntityCommandCompilationExceptionEntityCommandCompilationException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCommandCompilationException 成员
System.Data 命名空间


EntityCommandCompilationException 成员

EntityCommandCompilationException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandCompilationException 类

表示命令编译过程中发生的错误；当未能生成命令树时，表示命令文本。

EntityCommandCompilationException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntityCommandCompilationException 类
System.Data 命名空间


EntityCommandCompilationException 构造函数

EntityCommandCompilationException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandCompilationException 类

初始化 EntityCommandCompilationException 的新实例。

名称 说明
页首

有关如何处理代码异常的更多信息，请参见 Exception。

参考

EntityCommandCompilationException 类
EntityCommandCompilationException 成员
System.Data 命名空间


EntityCommandCompilationException 构造函数

EntityCommandCompilationException 构造函数
EntityCommandCompilationException 类

初始化 EntityCommandCompilationException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EntityCommandCompilationException()
public:
EntityCommandCompilationException()
new : unit -> EntityCommandCompilationException

有关如何处理异常代码的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCommandCompilationException 类
EntityCommandCompilationException 成员
EntityCommandCompilationException 重载
System.Data 命名空间


EntityCommandCompilationException 构造函数 (String)

EntityCommandCompilationException 构造函数 (String)
EntityCommandCompilationException 类

初始化 EntityCommandCompilationException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public EntityCommandCompilationException(
    string message
)
public:
EntityCommandCompilationException(
    String^ message
)
new :
        message:string -> EntityCommandCompilationException

参数

message
类型： System String
描述错误的消息。

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCommandCompilationException 类
EntityCommandCompilationException 成员
EntityCommandCompilationException 重载
System.Data 命名空间


EntityCommandCompilationException 构造函数 (String, Exception)

EntityCommandCompilationException 构造函数 (String, Exception)
EntityCommandCompilationException 类

初始化 EntityCommandCompilationException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public EntityCommandCompilationException(
    string message,
    Exception innerException
)
public:
EntityCommandCompilationException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> EntityCommandCompilationException

参数

message
类型： System String
用于解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常，或者，如果未指定任何内部异常，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 引用（在 Visual Basic 中为 Nothing）。

有关如何处理异常代码的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCommandCompilationException 类
EntityCommandCompilationException 成员
EntityCommandCompilationException 重载
System.Data 命名空间


EntityCommandCompilationException 方法

EntityCommandCompilationException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandCompilationException 类

EntityCommandCompilationException 类型公开以下成员。

名称 说明
页首

参考

EntityCommandCompilationException 类
System.Data 命名空间


EntityCommandCompilationException 属性

EntityCommandCompilationException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandCompilationException 类

EntityCommandCompilationException 类型公开以下成员。

名称 说明
页首

参考

EntityCommandCompilationException 类
System.Data 命名空间


EntityCommandCompilationException 事件

EntityCommandCompilationException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandCompilationException 类

EntityCommandCompilationException 类型公开以下成员。

名称 说明
页首

参考

EntityCommandCompilationException 类
System.Data 命名空间


EntityCommandExecutionException 类

EntityCommandExecutionException 类
成员

表示当基础存储提供程序未能执行指定的命令时，所发生的错误。此异常通常包装一个提供程序特定的异常。 表示当基础存储提供程序未能执行指定的命令时，所发生的错误。此异常通常包装一个提供程序特定的异常。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class EntityCommandExecutionException _
    Inherits EntityException
[SerializableAttribute]
public sealed class EntityCommandExecutionException : EntityException
[SerializableAttribute]
public ref class EntityCommandExecutionException sealed : public EntityException
[<SealedAttribute>]
[<SerializableAttribute>]
type EntityCommandExecutionException =
    class
        inherit EntityException
    end

有关如何处理代码异常的更多信息，请参见 Exception。

System.Data System.Data..::.EntityCommandExecutionExceptionEntityCommandExecutionException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCommandExecutionException 成员
System.Data 命名空间


EntityCommandExecutionException 成员

EntityCommandExecutionException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandExecutionException 类

表示当基础存储提供程序未能执行指定的命令时，所发生的错误。此异常通常包装一个提供程序特定的异常。 表示当基础存储提供程序未能执行指定的命令时，所发生的错误。此异常通常包装一个提供程序特定的异常。

EntityCommandExecutionException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntityCommandExecutionException 类
System.Data 命名空间


EntityCommandExecutionException 构造函数

EntityCommandExecutionException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandExecutionException 类

初始化 EntityCommandExecutionException 的新实例。

名称 说明
页首

有关如何处理代码异常的更多信息，请参见 Exception。

参考

EntityCommandExecutionException 类
EntityCommandExecutionException 成员
System.Data 命名空间


EntityCommandExecutionException 构造函数

EntityCommandExecutionException 构造函数
EntityCommandExecutionException 类

初始化 EntityCommandExecutionException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EntityCommandExecutionException()
public:
EntityCommandExecutionException()
new : unit -> EntityCommandExecutionException

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCommandExecutionException 类
EntityCommandExecutionException 成员
EntityCommandExecutionException 重载
System.Data 命名空间


EntityCommandExecutionException 构造函数 (String)

EntityCommandExecutionException 构造函数 (String)
EntityCommandExecutionException 类

初始化 EntityCommandExecutionException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public EntityCommandExecutionException(
    string message
)
public:
EntityCommandExecutionException(
    String^ message
)
new :
        message:string -> EntityCommandExecutionException

参数

message
类型： System String
描述错误的消息。

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCommandExecutionException 类
EntityCommandExecutionException 成员
EntityCommandExecutionException 重载
System.Data 命名空间


EntityCommandExecutionException 构造函数 (String, Exception)

EntityCommandExecutionException 构造函数 (String, Exception)
EntityCommandExecutionException 类

初始化 EntityCommandExecutionException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public EntityCommandExecutionException(
    string message,
    Exception innerException
)
public:
EntityCommandExecutionException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> EntityCommandExecutionException

参数

message
类型： System String
用于解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常，或者，如果未指定任何内部异常，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 引用（在 Visual Basic 中为 Nothing）。

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCommandExecutionException 类
EntityCommandExecutionException 成员
EntityCommandExecutionException 重载
System.Data 命名空间


EntityCommandExecutionException 方法

EntityCommandExecutionException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandExecutionException 类

EntityCommandExecutionException 类型公开以下成员。

名称 说明
页首

参考

EntityCommandExecutionException 类
System.Data 命名空间


EntityCommandExecutionException 属性

EntityCommandExecutionException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandExecutionException 类

EntityCommandExecutionException 类型公开以下成员。

名称 说明
页首

参考

EntityCommandExecutionException 类
System.Data 命名空间


EntityCommandExecutionException 事件

EntityCommandExecutionException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCommandExecutionException 类

EntityCommandExecutionException 类型公开以下成员。

名称 说明
页首

参考

EntityCommandExecutionException 类
System.Data 命名空间


EntityException 类

EntityException 类
成员

表示 EntityClient 命名空间中发生的与 Entity Framework 相关的错误。EntityException 是 EntityClient 类所引发的所有 Entity Framework 异常的基类。 表示 EntityClient 命名空间中发生的与 Entity Framework 相关的错误。EntityException 是 EntityClient 类所引发的所有 Entity Framework 异常的基类。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public Class EntityException _
    Inherits DataException
[SerializableAttribute]
public class EntityException : DataException
[SerializableAttribute]
public ref class EntityException : public DataException
[<SerializableAttribute>]
type EntityException =
    class
        inherit DataException
    end

有关如何处理代码异常的更多信息，请参见 Exception。

System.Data System.Data..::.EntityExceptionEntityException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityException 成员
System.Data 命名空间


EntityException 成员

EntityException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityException 类

表示 EntityClient 命名空间中发生的与 Entity Framework 相关的错误。EntityException 是 EntityClient 类所引发的所有 Entity Framework 异常的基类。 表示 EntityClient 命名空间中发生的与 Entity Framework 相关的错误。EntityException 是 EntityClient 类所引发的所有 Entity Framework 异常的基类。

EntityException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntityException 类
System.Data 命名空间


EntityException 构造函数

EntityException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityException 类

初始化 EntityException 类的新实例。

名称 说明
页首

有关如何处理代码异常的更多信息，请参见 Exception。

参考

EntityException 类
EntityException 成员
System.Data 命名空间


EntityException 构造函数

EntityException 构造函数
EntityException 类

初始化 EntityException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EntityException()
public:
EntityException()
new : unit -> EntityException

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityException 类
EntityException 成员
EntityException 重载
System.Data 命名空间


EntityException 构造函数 (String)

EntityException 构造函数 (String)
EntityException 类

初始化 EntityException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public EntityException(
    string message
)
public:
EntityException(
    String^ message
)
new :
        message:string -> EntityException

参数

message
类型： System String
描述错误的消息。

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityException 类
EntityException 成员
EntityException 重载
System.Data 命名空间


EntityException 构造函数 (SerializationInfo, StreamingContext)

EntityException 构造函数 (SerializationInfo, StreamingContext)
EntityException 类

初始化 EntityException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected EntityException(
    SerializationInfo info,
    StreamingContext context
)
protected:
EntityException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> EntityException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它包含有关所引发异常的序列化对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityException 类
EntityException 成员
EntityException 重载
System.Data 命名空间


EntityException 构造函数 (String, Exception)

EntityException 构造函数 (String, Exception)
EntityException 类

初始化 EntityException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public EntityException(
    string message,
    Exception innerException
)
public:
EntityException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> EntityException

参数

message
类型： System String
用于解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常，或者，如果未指定任何内部异常，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 引用（在 Visual Basic 中为 Nothing）。

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityException 类
EntityException 成员
EntityException 重载
System.Data 命名空间


EntityException 方法

EntityException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityException 类

EntityException 类型公开以下成员。

名称 说明
页首

参考

EntityException 类
System.Data 命名空间


EntityException 属性

EntityException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityException 类

EntityException 类型公开以下成员。

名称 说明
页首

参考

EntityException 类
System.Data 命名空间


EntityException 事件

EntityException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityException 类

EntityException 类型公开以下成员。

名称 说明
页首

参考

EntityException 类
System.Data 命名空间


EntityKey 类

EntityKey 类
成员

提供对作为实体类型实例的对象的持久引用。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
<DataContractAttribute(IsReference := True)> _
Public NotInheritable Class EntityKey _
    Implements IEquatable(Of EntityKey)
[SerializableAttribute]
[DataContractAttribute(IsReference = true)]
public sealed class EntityKey : IEquatable<EntityKey>
[SerializableAttribute]
[DataContractAttribute(IsReference = true)]
public ref class EntityKey sealed : IEquatable<EntityKey^>
[<SealedAttribute>]
[<SerializableAttribute>]
[<DataContractAttribute(IsReference = true)>]
type EntityKey =
    class
        interface IEquatable<EntityKey>
    end

EntityKey 对象是不可变的，也就是说，这些对象在构造之后不可以修改。

有关更多信息，请参见Working with Entity Keys (Entity Framework)。

这些示例基于 Adventure Works Sales Model。这些示例演示如何创建和使用 EntityKey。 这些示例基于 Adventure Works Sales Model。这些示例演示如何创建和使用 EntityKey。

Using context As New AdventureWorksEntities()
    Try
        Dim entity As Object = Nothing
        Dim entityKeyValues As IEnumerable(Of KeyValuePair(Of String, Object)) = _
            New KeyValuePair(Of String, Object)() {New KeyValuePair(Of String, Object)("SalesOrderID", 43680)}

        ' Create the key for a specific SalesOrderHeader object.
        Dim key As New EntityKey("AdventureWorksEntities.SalesOrderHeaders", entityKeyValues)

        ' Get the object from the context or the persisted store by its key.
        If context.TryGetObjectByKey(key, entity) Then
            Console.WriteLine("The requested " & entity.GetType().FullName & " object was found")
        Else
            Console.WriteLine("An object with this key could not be found.")
        End If
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        Object entity = null;
        IEnumerable<KeyValuePair<string, object>> entityKeyValues =
            new KeyValuePair<string, object>[] {
                new KeyValuePair<string, object>("SalesOrderID", 43680) };

        // Create the  key for a specific SalesOrderHeader object.
        EntityKey key = new EntityKey("AdventureWorksEntities.SalesOrderHeaders", entityKeyValues);

        // Get the object from the context or the persisted store by its key.
        if (context.TryGetObjectByKey(key, out entity))
        {
            Console.WriteLine("The requested " + entity.GetType().FullName +
                " object was found");
        }
        else
        {
            Console.WriteLine("An object with this key " +
                "could not be found.");
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Using context As New AdventureWorksEntities()
    Try
        ' Create the key that represents the order.
        Dim orderKey As New EntityKey("AdventureWorksEntities.SalesOrderHeaders", "SalesOrderID", orderId)

        ' Create the stand-in SalesOrderHeader object
        ' based on the specified SalesOrderID.
        Dim order As New SalesOrderHeader()
        order.EntityKey = orderKey

        ' Assign the ID to the SalesOrderID property to matche the key.
        order.SalesOrderID = CInt(orderKey.EntityKeyValues(0).Value)

        ' Attach the stand-in SalesOrderHeader object.
        context.SalesOrderHeaders.Attach(order)

        ' Create a new SalesOrderDetail object.
        ' You can use the static CreateObjectName method (the Entity Framework
        ' adds this method to the generated entity types) instead of the new operator:
        ' SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        ' Guid.NewGuid(), DateTime.Today));
        Dim detail = New SalesOrderDetail With
        {
            .SalesOrderID = 0,
            .SalesOrderDetailID = 0,
            .OrderQty = 2,
            .ProductID = 750,
            .SpecialOfferID = 1,
            .UnitPrice = CDec(2171.2942),
            .UnitPriceDiscount = 0,
            .LineTotal = 0,
            .rowguid = Guid.NewGuid(),
            .ModifiedDate = DateTime.Now
        }

        order.SalesOrderDetails.Add(detail)

        context.SaveChanges()
    Catch generatedExceptionName As InvalidOperationException
        Console.WriteLine("Ensure that the key value matches the value of the object's ID property.")
    Catch generatedExceptionName As UpdateException
        Console.WriteLine("An error has occured. Ensure that an object with the '{0}' key value exists.", orderId)
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Create the key that represents the order.
        EntityKey orderKey =
            new EntityKey("AdventureWorksEntities.SalesOrderHeaders",
                "SalesOrderID", orderId);

        // Create the stand-in SalesOrderHeader object
        // based on the specified SalesOrderID.
        SalesOrderHeader order = new SalesOrderHeader();
        order.EntityKey = orderKey;

        // Assign the ID to the SalesOrderID property to matche the key.
        order.SalesOrderID = (int)orderKey.EntityKeyValues[0].Value;

        // Attach the stand-in SalesOrderHeader object.
        context.SalesOrderHeaders.Attach(order);

        // Create a new SalesOrderDetail object.
        // You can use the static CreateObjectName method (the Entity Framework
        // adds this method to the generated entity types) instead of the new operator:
        // SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        //                                         Guid.NewGuid(), DateTime.Today));
        SalesOrderDetail detail = new SalesOrderDetail
        {
            SalesOrderID = orderId,
            SalesOrderDetailID = 0,
            OrderQty = 2,
            ProductID = 750,
            SpecialOfferID = 1,
            UnitPrice = (decimal)2171.2942,
            UnitPriceDiscount = 0,
            LineTotal = 0,
            rowguid = Guid.NewGuid(),
            ModifiedDate = DateTime.Now
        };

        order.SalesOrderDetails.Add(detail);

        context.SaveChanges();
    }
    catch (InvalidOperationException)
    {
        Console.WriteLine("Ensure that the key value matches the value of the object's ID property.");
    }
    catch (UpdateException)
    {
        Console.WriteLine("An error has occured. Ensure that an object with the '{0}' key value exists.",
        orderId);
    }
}

System.Data System.Data..::.EntityKeyEntityKey
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey 成员

EntityKey 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKey 类

提供对作为实体类型实例的对象的持久引用。

EntityKey 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntityKey 类
System.Data 命名空间


EntityKey 构造函数

EntityKey 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKey 类

初始化 EntityKey 类的新实例。

名称 说明
页首

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey 构造函数

EntityKey 构造函数
EntityKey 类

初始化 EntityKey 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EntityKey()
public:
EntityKey()
new : unit -> EntityKey

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
EntityKey 重载
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey 构造函数 (String, IEnumerable <(Of <(KeyValuePair <(Of <(String, Object >)>) >)>))

EntityKey 构造函数 (String, IEnumerable
<
(Of
<
(
KeyValuePair
<
(Of
<
(
String, Object
>
)
>
)
>
)
>
)
)
EntityKey 类

使用实体集名称和泛型 KeyValuePair 集合初始化 EntityKey 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    qualifiedEntitySetName As String, _
    entityKeyValues As IEnumerable(Of KeyValuePair(Of String, Object)) _
)
public EntityKey(
    string qualifiedEntitySetName,
    IEnumerable<KeyValuePair<string, Object>> entityKeyValues
)
public:
EntityKey(
    String^ qualifiedEntitySetName,
    IEnumerable<KeyValuePair<String^, Object^>>^ entityKeyValues
)
new :
        qualifiedEntitySetName:string *
        entityKeyValues:IEnumerable<KeyValuePair<string, Object>> -> EntityKey

参数

qualifiedEntitySetName
类型： System String
一个 String，它是由实体容器名称限定的实体集名称。
entityKeyValues
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
KeyValuePair
<
(Of
<
(
String, Object
>
)
>
)
>
)
>
)

一个泛型 KeyValuePair 集合。
每个键/值对都具有一个属性名称作为键，该属性的值作为值。对属于 EntityKey 的一部分的每个属性都应该有一个键/值对。键/值对的顺序并不重要，但是应包括每个键属性。属性名称是不受实体类型名称或架构名称限定的简单名称。 每个键/值对都具有一个属性名称作为键，该属性的值作为值。对属于 EntityKey 的一部分的每个属性都应该有一个键/值对。键/值对的顺序并不重要，但是应包括每个键属性。属性名称是不受实体类型名称或架构名称限定的简单名称。 每个键/值对都具有一个属性名称作为键，该属性的值作为值。对属于 EntityKey 的一部分的每个属性都应该有一个键/值对。键/值对的顺序并不重要，但是应包括每个键属性。属性名称是不受实体类型名称或架构名称限定的简单名称。 每个键/值对都具有一个属性名称作为键，该属性的值作为值。对属于 EntityKey 的一部分的每个属性都应该有一个键/值对。键/值对的顺序并不重要，但是应包括每个键属性。属性名称是不受实体类型名称或架构名称限定的简单名称。

此示例基于 Adventure Works Sales Model。该示例演示如何创建和使用 EntityKey。 此示例基于 Adventure Works Sales Model。该示例演示如何创建和使用 EntityKey。

Using context As New AdventureWorksEntities()
    Try
        ' Create the key that represents the order.
        Dim orderKey As New EntityKey("AdventureWorksEntities.SalesOrderHeaders", "SalesOrderID", orderId)

        ' Create the stand-in SalesOrderHeader object
        ' based on the specified SalesOrderID.
        Dim order As New SalesOrderHeader()
        order.EntityKey = orderKey

        ' Assign the ID to the SalesOrderID property to matche the key.
        order.SalesOrderID = CInt(orderKey.EntityKeyValues(0).Value)

        ' Attach the stand-in SalesOrderHeader object.
        context.SalesOrderHeaders.Attach(order)

        ' Create a new SalesOrderDetail object.
        ' You can use the static CreateObjectName method (the Entity Framework
        ' adds this method to the generated entity types) instead of the new operator:
        ' SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        ' Guid.NewGuid(), DateTime.Today));
        Dim detail = New SalesOrderDetail With
        {
            .SalesOrderID = 0,
            .SalesOrderDetailID = 0,
            .OrderQty = 2,
            .ProductID = 750,
            .SpecialOfferID = 1,
            .UnitPrice = CDec(2171.2942),
            .UnitPriceDiscount = 0,
            .LineTotal = 0,
            .rowguid = Guid.NewGuid(),
            .ModifiedDate = DateTime.Now
        }

        order.SalesOrderDetails.Add(detail)

        context.SaveChanges()
    Catch generatedExceptionName As InvalidOperationException
        Console.WriteLine("Ensure that the key value matches the value of the object's ID property.")
    Catch generatedExceptionName As UpdateException
        Console.WriteLine("An error has occured. Ensure that an object with the '{0}' key value exists.", orderId)
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Create the key that represents the order.
        EntityKey orderKey =
            new EntityKey("AdventureWorksEntities.SalesOrderHeaders",
                "SalesOrderID", orderId);

        // Create the stand-in SalesOrderHeader object
        // based on the specified SalesOrderID.
        SalesOrderHeader order = new SalesOrderHeader();
        order.EntityKey = orderKey;

        // Assign the ID to the SalesOrderID property to matche the key.
        order.SalesOrderID = (int)orderKey.EntityKeyValues[0].Value;

        // Attach the stand-in SalesOrderHeader object.
        context.SalesOrderHeaders.Attach(order);

        // Create a new SalesOrderDetail object.
        // You can use the static CreateObjectName method (the Entity Framework
        // adds this method to the generated entity types) instead of the new operator:
        // SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        //                                         Guid.NewGuid(), DateTime.Today));
        SalesOrderDetail detail = new SalesOrderDetail
        {
            SalesOrderID = orderId,
            SalesOrderDetailID = 0,
            OrderQty = 2,
            ProductID = 750,
            SpecialOfferID = 1,
            UnitPrice = (decimal)2171.2942,
            UnitPriceDiscount = 0,
            LineTotal = 0,
            rowguid = Guid.NewGuid(),
            ModifiedDate = DateTime.Now
        };

        order.SalesOrderDetails.Add(detail);

        context.SaveChanges();
    }
    catch (InvalidOperationException)
    {
        Console.WriteLine("Ensure that the key value matches the value of the object's ID property.");
    }
    catch (UpdateException)
    {
        Console.WriteLine("An error has occured. Ensure that an object with the '{0}' key value exists.",
        orderId);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
EntityKey 重载
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey 构造函数 (String, IEnumerable <(Of <(EntityKeyMember >)>))

EntityKey 构造函数 (String, IEnumerable
<
(Of
<
(
EntityKeyMember
>
)
>
)
)
EntityKey 类

使用实体集名称和 EntityKeyMember 对象的 IEnumerable<(Of <(T>)>) 集合初始化 EntityKey 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    qualifiedEntitySetName As String, _
    entityKeyValues As IEnumerable(Of EntityKeyMember) _
)
public EntityKey(
    string qualifiedEntitySetName,
    IEnumerable<EntityKeyMember> entityKeyValues
)
public:
EntityKey(
    String^ qualifiedEntitySetName,
    IEnumerable<EntityKeyMember^>^ entityKeyValues
)
new :
        qualifiedEntitySetName:string *
        entityKeyValues:IEnumerable<EntityKeyMember> -> EntityKey

参数

qualifiedEntitySetName
类型： System String
一个 String，它是由实体容器名称限定的实体集名称。
entityKeyValues
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
EntityKeyMember
>
)
>
)

用来初始化键的 EntityKeyMember 对象的 IEnumerable<(Of <(T>)>) 集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
EntityKey 重载
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey 构造函数 (String, String, Object)

EntityKey 构造函数 (String, String, Object)
EntityKey 类

使用实体集名称和特定实体键对初始化 EntityKey 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    qualifiedEntitySetName As String, _
    keyName As String, _
    keyValue As Object _
)
public EntityKey(
    string qualifiedEntitySetName,
    string keyName,
    Object keyValue
)
public:
EntityKey(
    String^ qualifiedEntitySetName,
    String^ keyName,
    Object^ keyValue
)
new :
        qualifiedEntitySetName:string *
        keyName:string *
        keyValue:Object -> EntityKey

参数

qualifiedEntitySetName
类型： System String
一个 String，它是由实体容器名称限定的实体集名称。
keyName
类型： System String
表示键名称的 String。
keyValue
类型： System Object
表示键值的 Object。

此示例基于 Adventure Works Sales Model。该示例演示如何创建和使用 EntityKey。 此示例基于 Adventure Works Sales Model。该示例演示如何创建和使用 EntityKey。

Using context As New AdventureWorksEntities()
    Try
        ' Create the key that represents the order.
        Dim orderKey As New EntityKey("AdventureWorksEntities.SalesOrderHeaders", "SalesOrderID", orderId)

        ' Create the stand-in SalesOrderHeader object
        ' based on the specified SalesOrderID.
        Dim order As New SalesOrderHeader()
        order.EntityKey = orderKey

        ' Assign the ID to the SalesOrderID property to matche the key.
        order.SalesOrderID = CInt(orderKey.EntityKeyValues(0).Value)

        ' Attach the stand-in SalesOrderHeader object.
        context.SalesOrderHeaders.Attach(order)

        ' Create a new SalesOrderDetail object.
        ' You can use the static CreateObjectName method (the Entity Framework
        ' adds this method to the generated entity types) instead of the new operator:
        ' SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        ' Guid.NewGuid(), DateTime.Today));
        Dim detail = New SalesOrderDetail With
        {
            .SalesOrderID = 0,
            .SalesOrderDetailID = 0,
            .OrderQty = 2,
            .ProductID = 750,
            .SpecialOfferID = 1,
            .UnitPrice = CDec(2171.2942),
            .UnitPriceDiscount = 0,
            .LineTotal = 0,
            .rowguid = Guid.NewGuid(),
            .ModifiedDate = DateTime.Now
        }

        order.SalesOrderDetails.Add(detail)

        context.SaveChanges()
    Catch generatedExceptionName As InvalidOperationException
        Console.WriteLine("Ensure that the key value matches the value of the object's ID property.")
    Catch generatedExceptionName As UpdateException
        Console.WriteLine("An error has occured. Ensure that an object with the '{0}' key value exists.", orderId)
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Create the key that represents the order.
        EntityKey orderKey =
            new EntityKey("AdventureWorksEntities.SalesOrderHeaders",
                "SalesOrderID", orderId);

        // Create the stand-in SalesOrderHeader object
        // based on the specified SalesOrderID.
        SalesOrderHeader order = new SalesOrderHeader();
        order.EntityKey = orderKey;

        // Assign the ID to the SalesOrderID property to matche the key.
        order.SalesOrderID = (int)orderKey.EntityKeyValues[0].Value;

        // Attach the stand-in SalesOrderHeader object.
        context.SalesOrderHeaders.Attach(order);

        // Create a new SalesOrderDetail object.
        // You can use the static CreateObjectName method (the Entity Framework
        // adds this method to the generated entity types) instead of the new operator:
        // SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        //                                         Guid.NewGuid(), DateTime.Today));
        SalesOrderDetail detail = new SalesOrderDetail
        {
            SalesOrderID = orderId,
            SalesOrderDetailID = 0,
            OrderQty = 2,
            ProductID = 750,
            SpecialOfferID = 1,
            UnitPrice = (decimal)2171.2942,
            UnitPriceDiscount = 0,
            LineTotal = 0,
            rowguid = Guid.NewGuid(),
            ModifiedDate = DateTime.Now
        };

        order.SalesOrderDetails.Add(detail);

        context.SaveChanges();
    }
    catch (InvalidOperationException)
    {
        Console.WriteLine("Ensure that the key value matches the value of the object's ID property.");
    }
    catch (UpdateException)
    {
        Console.WriteLine("An error has occured. Ensure that an object with the '{0}' key value exists.",
        orderId);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
EntityKey 重载
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey 字段

EntityKey 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKey 类

EntityKey 类型公开以下成员。

名称 说明
页首

参考

EntityKey 类
System.Data 命名空间


EntityKey ..::.EntityNotValidKey 字段

EntityKey
.
.
::
.
EntityNotValidKey 字段
EntityKey 类

一个简单的 EntityKey，标识由失败的 TREAT 运算产生的实体。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared ReadOnly EntityNotValidKey As EntityKey
public static readonly EntityKey EntityNotValidKey
public:
static initonly EntityKey^ EntityNotValidKey
static val EntityNotValidKey: EntityKey

有多种方式可以产生无效实体。最常见的情况是当 Entity SQL 查询使用 TREAT 运算符将一个多态类型的实例解释为特定类型，而该实例不匹配时。（TREAT 类似于 C# as 运算符）。在这种情况下，查询返回无效的实体，所返回实体的实体键设置为 EntityNotValidKey。 有多种方式可以产生无效实体。最常见的情况是当 Entity SQL 查询使用 TREAT 运算符将一个多态类型的实例解释为特定类型，而该实例不匹配时。（TREAT 类似于 C# as 运算符）。在这种情况下，查询返回无效的实体，所返回实体的实体键设置为 EntityNotValidKey。 有多种方式可以产生无效实体。最常见的情况是当 Entity SQL 查询使用 TREAT 运算符将一个多态类型的实例解释为特定类型，而该实例不匹配时。（TREAT 类似于 C# as 运算符）。在这种情况下，查询返回无效的实体，所返回实体的实体键设置为 EntityNotValidKey。 有多种方式可以产生无效实体。最常见的情况是当 Entity SQL 查询使用 TREAT 运算符将一个多态类型的实例解释为特定类型，而该实例不匹配时。（TREAT 类似于 C# as 运算符）。在这种情况下，查询返回无效的实体，所返回实体的实体键设置为 EntityNotValidKey。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.NoEntitySetKey 字段

EntityKey
.
.
::
.
NoEntitySetKey 字段
EntityKey 类

一个单一实例 EntityKey，由它标识只读实体。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared ReadOnly NoEntitySetKey As EntityKey
public static readonly EntityKey NoEntitySetKey
public:
static initonly EntityKey^ NoEntitySetKey
static val NoEntitySetKey: EntityKey

只读实体标识除了与实际实体集不关联，在其他任何情况下都有效的实体。如果 Entity SQL 查询构造并返回在查询文本中所指定的实体实例（而不是从数据库表中检索的实体），则该查询的结果中可能出现只读实体。不具有实体集的实体在与某个实体集关联之前不能持久保存到数据库中。因此，对象具体化程序对待这种实体就如同指定了 NoTracking 合并选项，而不考虑所指定的实际合并选项。将创建一个实体对象，但不解析其标识，也不会在具体化过程中将其添加到状态管理器。 只读实体标识除了与实际实体集不关联，在其他任何情况下都有效的实体。如果 Entity SQL 查询构造并返回在查询文本中所指定的实体实例（而不是从数据库表中检索的实体），则该查询的结果中可能出现只读实体。不具有实体集的实体在与某个实体集关联之前不能持久保存到数据库中。因此，对象具体化程序对待这种实体就如同指定了 NoTracking 合并选项，而不考虑所指定的实际合并选项。将创建一个实体对象，但不解析其标识，也不会在具体化过程中将其添加到状态管理器。 只读实体标识除了与实际实体集不关联，在其他任何情况下都有效的实体。如果 Entity SQL 查询构造并返回在查询文本中所指定的实体实例（而不是从数据库表中检索的实体），则该查询的结果中可能出现只读实体。不具有实体集的实体在与某个实体集关联之前不能持久保存到数据库中。因此，对象具体化程序对待这种实体就如同指定了 NoTracking 合并选项，而不考虑所指定的实际合并选项。将创建一个实体对象，但不解析其标识，也不会在具体化过程中将其添加到状态管理器。 只读实体标识除了与实际实体集不关联，在其他任何情况下都有效的实体。如果 Entity SQL 查询构造并返回在查询文本中所指定的实体实例（而不是从数据库表中检索的实体），则该查询的结果中可能出现只读实体。不具有实体集的实体在与某个实体集关联之前不能持久保存到数据库中。因此，对象具体化程序对待这种实体就如同指定了 NoTracking 合并选项，而不考虑所指定的实际合并选项。将创建一个实体对象，但不解析其标识，也不会在具体化过程中将其添加到状态管理器。 只读实体标识除了与实际实体集不关联，在其他任何情况下都有效的实体。如果 Entity SQL 查询构造并返回在查询文本中所指定的实体实例（而不是从数据库表中检索的实体），则该查询的结果中可能出现只读实体。不具有实体集的实体在与某个实体集关联之前不能持久保存到数据库中。因此，对象具体化程序对待这种实体就如同指定了 NoTracking 合并选项，而不考虑所指定的实际合并选项。将创建一个实体对象，但不解析其标识，也不会在具体化过程中将其添加到状态管理器。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey 方法

EntityKey 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKey 类

EntityKey 类型公开以下成员。

名称 说明
页首

参考

EntityKey 类
System.Data 命名空间


EntityKey ..::.Equals 方法

EntityKey
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKey 类

返回一个值，该值指示此实例是否与指定的对象相等。

名称 说明
页首

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.Equals 方法 (EntityKey)

EntityKey
.
.
::
.
Equals 方法 (EntityKey)
EntityKey 类

返回一个值，该值指示此实例是否与指定的 EntityKey 相等。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Equals ( _
    other As EntityKey _
) As Boolean
public bool Equals(
    EntityKey other
)
public:
virtual bool Equals(
    EntityKey^ other
) sealed
abstract Equals :
        other:EntityKey -> bool
override Equals :
        other:EntityKey -> bool

参数

other
类型： System.Data EntityKey
要与此实例进行比较的 EntityKey 对象。

返回值

类型： System Boolean
如果此实例与 other 具有相等的值，则为 true；否则为 false。

实现

临时键与永久键具有不同的比较语义：

  • 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。

  • 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的实体集相同并且键值相等，则这两个实例相等。 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的实体集相同并且键值相等，则这两个实例相等。

此外，临时键没有 EntitySet 或键值，但永久键有。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
Equals 重载
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.Equals 方法 (Object)

EntityKey
.
.
::
.
Equals 方法 (Object)
EntityKey 类

返回一个值，该值指示此实例是否与指定的对象相等。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与该实例进行比较的 Object。

返回值

类型： System Boolean
如果此实例与 obj 具有相等的值，则为 true；否则为 false。

临时键与永久键具有不同的比较语义：

  • 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。

  • 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的 EntitySet 对象相同并且键值相等，则这两个实例相等。 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的 EntitySet 对象相同并且键值相等，则这两个实例相等。

此外，临时键没有 EntitySet 或键值，但永久键有。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
Equals 重载
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.GetEntitySet 方法

EntityKey
.
.
::
.
GetEntitySet 方法
EntityKey 类

从给定的元数据工作区获取此实体键的实体集。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetEntitySet ( _
    metadataWorkspace As MetadataWorkspace _
) As EntitySet
public EntitySet GetEntitySet(
    MetadataWorkspace metadataWorkspace
)
public:
EntitySet^ GetEntitySet(
    MetadataWorkspace^ metadataWorkspace
)
member GetEntitySet :
        metadataWorkspace:MetadataWorkspace -> EntitySet

参数

metadataWorkspace
类型： System.Data.Metadata.Edm MetadataWorkspace
包含实体的元数据工作区。

返回值

类型： System.Data.Metadata.Edm EntitySet
实体键的 EntitySet。
异常 | 条件
ArgumentException | 未能在指定的元数据工作区找到实体集。

实体集是根据键的实体容器名称和实体集名称访问的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.GetHashCode 方法

EntityKey
.
.
::
.
GetHashCode 方法
EntityKey 类

用作当前 EntityKey 对象的哈希函数。GetHashCode 适用于哈希算法和诸如哈希表之类的数据结构。 用作当前 EntityKey 对象的哈希函数。GetHashCode 适用于哈希算法和诸如哈希表之类的数据结构。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
当前 EntityKey 的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.OnDeserialized 方法

EntityKey
.
.
::
.
OnDeserialized 方法
EntityKey 类

用于反序列化 EntityKey 的帮助器方法。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<BrowsableAttribute(False)> _
<OnDeserializedAttribute> _
Public Sub OnDeserialized ( _
    context As StreamingContext _
)
[BrowsableAttribute(false)]
[OnDeserializedAttribute]
public void OnDeserialized(
    StreamingContext context
)
[BrowsableAttribute(false)]
[OnDeserializedAttribute]
public:
void OnDeserialized(
    StreamingContext context
)
[<BrowsableAttribute(false)>]
[<OnDeserializedAttribute>]
member OnDeserialized :
        context:StreamingContext -> unit

参数

context
类型： System.Runtime.Serialization StreamingContext
描述给定的序列化流的源和目标，并提供一个由调用方定义的附加上下文。

在反序列化 EntityKey 时，OnDeserialized 由对象服务使用。有关更多信息，请参见Serializing Objects (Entity Framework)。 在反序列化 EntityKey 时，OnDeserialized 由对象服务使用。有关更多信息，请参见Serializing Objects (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.OnDeserializing 方法

EntityKey
.
.
::
.
OnDeserializing 方法
EntityKey 类

用于反序列化 EntityKey 的帮助器方法。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<BrowsableAttribute(False)> _
<OnDeserializingAttribute> _
Public Sub OnDeserializing ( _
    context As StreamingContext _
)
[BrowsableAttribute(false)]
[OnDeserializingAttribute]
public void OnDeserializing(
    StreamingContext context
)
[BrowsableAttribute(false)]
[OnDeserializingAttribute]
public:
void OnDeserializing(
    StreamingContext context
)
[<BrowsableAttribute(false)>]
[<OnDeserializingAttribute>]
member OnDeserializing :
        context:StreamingContext -> unit

参数

context
类型： System.Runtime.Serialization StreamingContext
描述给定的序列化流的源和目标，并提供一个由调用方定义的附加上下文。

在反序列化 EntityKey 时，OnDeserializing 由对象服务使用。有关更多信息，请参见Serializing Objects (Entity Framework)。 在反序列化 EntityKey 时，OnDeserializing 由对象服务使用。有关更多信息，请参见Serializing Objects (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey 运算符

EntityKey 运算符
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKey 类

EntityKey 类型公开以下成员。

名称 说明
页首

参考

EntityKey 类
System.Data 命名空间


EntityKey ..::.Equality 运算符

EntityKey
.
.
::
.
Equality 运算符
EntityKey 类

比较两个 EntityKey 对象。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Operator = ( _
    key1 As EntityKey, _
    key2 As EntityKey _
) As Boolean
public static bool operator ==(
    EntityKey key1,
    EntityKey key2
)
public:
static bool operator ==(
    EntityKey^ key1,
    EntityKey^ key2
)
static let inline (=)
        key1:EntityKey *
        key2:EntityKey  : bool

参数

key1
类型： System.Data EntityKey
要比较的 EntityKey。
key2
类型： System.Data EntityKey
要比较的 EntityKey。

返回值

类型： System Boolean
如果 key1 与 key2 值相等，则为 true；否则为 false。

临时键与永久键具有不同的比较语义：

  • 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。

  • 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的实体集相同并且键值相等，则这两个实例相等。 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的实体集相同并且键值相等，则这两个实例相等。

此外，临时键没有 EntitySet 或键值，但永久键有。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.Inequality 运算符

EntityKey
.
.
::
.
Inequality 运算符
EntityKey 类

比较两个 EntityKey 对象。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Operator <> ( _
    key1 As EntityKey, _
    key2 As EntityKey _
) As Boolean
public static bool operator !=(
    EntityKey key1,
    EntityKey key2
)
public:
static bool operator !=(
    EntityKey^ key1,
    EntityKey^ key2
)
static let inline (<>)
        key1:EntityKey *
        key2:EntityKey  : bool

参数

key1
类型： System.Data EntityKey
要比较的 EntityKey。
key2
类型： System.Data EntityKey
要比较的 EntityKey。

返回值

类型： System Boolean
如果 key1 与 key2 值不相等，则为 true；否则为 false。

临时键与永久键具有不同的比较语义：

  • 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。

  • 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的实体集相同并且键值相等，则这两个实例相等。 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的实体集相同并且键值相等，则这两个实例相等。

此外，临时键没有 EntitySet 或键值，但常规键有。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey 属性

EntityKey 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKey 类

EntityKey 类型公开以下成员。

名称 说明
页首

参考

EntityKey 类
System.Data 命名空间


EntityKey ..::.EntityContainerName 属性

EntityKey
.
.
::
.
EntityContainerName 属性
EntityKey 类

获取或设置实体容器的名称。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<DataMemberAttribute> _
Public Property EntityContainerName As String
    Get
    Set
[DataMemberAttribute]
public string EntityContainerName { get; set; }
[DataMemberAttribute]
public:
property String^ EntityContainerName {
    String^ get ();
    void set (String^ value);
}
[<DataMemberAttribute>]
member EntityContainerName : string with get, set

属性值

类型： System String
一个 String 值，表示 EntityKey 所属实体的实体容器的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.EntityKeyValues 属性

EntityKey
.
.
::
.
EntityKeyValues 属性
EntityKey 类

获取或设置与此 EntityKey 关联的键值。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<DataMemberAttribute> _
Public Property EntityKeyValues As EntityKeyMember()
    Get
    Set
[DataMemberAttribute]
public EntityKeyMember[] EntityKeyValues { get; set; }
[DataMemberAttribute]
public:
property array<EntityKeyMember^>^ EntityKeyValues {
    array<EntityKeyMember^>^ get ();
    void set (array<EntityKeyMember^>^ value);
}
[<DataMemberAttribute>]
member EntityKeyValues : EntityKeyMember[] with get, set

属性值

类型：
array<
System.Data EntityKeyMember
>
[]
()
[]

此 EntityKey 的键值的一个 ReadOnlyCollection<(Of <(T>)>)。

EntityKey 类包含一些值的副本，为此类型实体指定的逻辑键就是由这些值构成的。

在 KeyValuePair<(Of <(TKey, TValue>)>) 中，ReadOnlyCollection<(Of <(T>)>) 的成员都具有一个属性名称和一个值，其中键是属性名称，值是对象的该属性的实际值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.EntitySetName 属性

EntityKey
.
.
::
.
EntitySetName 属性
EntityKey 类

获取或设置实体集的名称。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<DataMemberAttribute> _
Public Property EntitySetName As String
    Get
    Set
[DataMemberAttribute]
public string EntitySetName { get; set; }
[DataMemberAttribute]
public:
property String^ EntitySetName {
    String^ get ();
    void set (String^ value);
}
[<DataMemberAttribute>]
member EntitySetName : string with get, set

属性值

类型： System String
一个 String 值，表示 EntityKey 所属实体的实体集的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKey ..::.IsTemporary 属性

EntityKey
.
.
::
.
IsTemporary 属性
EntityKey 类

获取一个值，该值指示 EntityKey 是否是临时的。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property IsTemporary As Boolean
    Get
public bool IsTemporary { get; }
public:
property bool IsTemporary {
    bool get ();
}
member IsTemporary : bool

属性值

类型： System Boolean
如果 EntityKey 是临时的，则为 true；否则为 false。

创建新实例时，Entity Framework 将定义临时键，并将 IsTemporary 属性设置为 true。调用 SaveChanges 方法时，Entity Framework 将分配一个永久键，并将 IsTemporary 属性设置为 false。 创建新实例时，Entity Framework 将定义临时键，并将 IsTemporary 属性设置为 true。调用 SaveChanges 方法时，Entity Framework 将分配一个永久键，并将 IsTemporary 属性设置为 false。

说明 说明

临时键是由框架自动构造的，用户不能直接构造。

临时键与永久键具有不同的比较语义：

  • 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。 临时键使用引用相等性。也就是说，对同一临时 EntityKey 实例的两个引用是相等的，但其他 EntityKey 实例则不相等。

  • 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的实体集相同并且键值相等，则这两个实例相等。 永久键基于所包含的键属性的值和 EntitySet 来确定相等性。也就是说，对于两个独立的 EntityKey 实例，如果它们的实体集相同并且键值相等，则这两个实例相等。

此外，临时键没有 EntitySet 或键值，但永久键有。

如果调用实体的 ObjectStateEntry 的 AcceptChanges 方法，并且实体事务从 Added 状态变为 Unchanged 状态，Entity Framework 会为实体自动计算新的永久键，并同步所有临时键引用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKey 类
EntityKey 成员
System.Data 命名空间

其他资源

Working with Entity Keys (Entity Framework)
How to: Create an EntityKey (Entity Framework)


EntityKeyMember 类

EntityKeyMember 类
成员

表示作为 EntityKey 的一部分的键名称和值对。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
<DataContractAttribute> _
Public Class EntityKeyMember
[SerializableAttribute]
[DataContractAttribute]
public class EntityKeyMember
[SerializableAttribute]
[DataContractAttribute]
public ref class EntityKeyMember
[<SerializableAttribute>]
[<DataContractAttribute>]
type EntityKeyMember =  class end

System.Data System.Data..::.EntityKeyMemberEntityKeyMember
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKeyMember 成员
System.Data 命名空间


EntityKeyMember 成员

EntityKeyMember 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKeyMember 类

表示作为 EntityKey 的一部分的键名称和值对。

EntityKeyMember 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntityKeyMember 类
System.Data 命名空间


EntityKeyMember 构造函数

EntityKeyMember 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKeyMember 类

初始化 EntityKeyMember 类的新实例。

名称 说明
页首

参考

EntityKeyMember 类
EntityKeyMember 成员
System.Data 命名空间


EntityKeyMember 构造函数

EntityKeyMember 构造函数
EntityKeyMember 类

初始化 EntityKeyMember 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EntityKeyMember()
public:
EntityKeyMember()
new : unit -> EntityKeyMember

此构造函数在实体键序列化过程中使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKeyMember 类
EntityKeyMember 成员
EntityKeyMember 重载
System.Data 命名空间


EntityKeyMember 构造函数 (String, Object)

EntityKeyMember 构造函数 (String, Object)
EntityKeyMember 类

使用指定实体键对初始化 EntityKeyMember 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    keyName As String, _
    keyValue As Object _
)
public EntityKeyMember(
    string keyName,
    Object keyValue
)
public:
EntityKeyMember(
    String^ keyName,
    Object^ keyValue
)
new :
        keyName:string *
        keyValue:Object -> EntityKeyMember

参数

keyName
类型： System String
表示键名称的 String。
keyValue
类型： System Object
表示键值的 Object。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKeyMember 类
EntityKeyMember 成员
EntityKeyMember 重载
System.Data 命名空间


EntityKeyMember 方法

EntityKeyMember 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKeyMember 类

EntityKeyMember 类型公开以下成员。

名称 说明
页首

参考

EntityKeyMember 类
System.Data 命名空间


EntityKeyMember ..::.ToString 方法

EntityKeyMember
.
.
::
.
ToString 方法
EntityKeyMember 类

返回实体键的字符串表示形式。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
一个 String。

ToString 方法返回一个采用“[键名称, 键值]”格式的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKeyMember 类
EntityKeyMember 成员
System.Data 命名空间


EntityKeyMember 属性

EntityKeyMember 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityKeyMember 类

EntityKeyMember 类型公开以下成员。

名称 说明
页首

参考

EntityKeyMember 类
System.Data 命名空间


EntityKeyMember ..::.Key 属性

EntityKeyMember
.
.
::
.
Key 属性
EntityKeyMember 类

实体键的名称。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<DataMemberAttribute> _
Public Property Key As String
    Get
    Set
[DataMemberAttribute]
public string Key { get; set; }
[DataMemberAttribute]
public:
property String^ Key {
    String^ get ();
    void set (String^ value);
}
[<DataMemberAttribute>]
member Key : string with get, set

属性值

类型： System String
表示键名称的 String。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKeyMember 类
EntityKeyMember 成员
System.Data 命名空间


EntityKeyMember ..::.Value 属性

EntityKeyMember
.
.
::
.
Value 属性
EntityKeyMember 类

实体键的值。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<DataMemberAttribute> _
Public Property Value As Object
    Get
    Set
[DataMemberAttribute]
public Object Value { get; set; }
[DataMemberAttribute]
public:
property Object^ Value {
    Object^ get ();
    void set (Object^ value);
}
[<DataMemberAttribute>]
member Value : Object with get, set

属性值

类型： System Object
表示键值的 Object。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityKeyMember 类
EntityKeyMember 成员
System.Data 命名空间


EntitySqlException 类

EntitySqlException 类
成员

表示分析 Entity SQL 命令文本时出现的错误。违反语法或语义规则时会引发此异常。 表示分析 Entity SQL 命令文本时出现的错误。违反语法或语义规则时会引发此异常。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class EntitySqlException _
    Inherits EntityException
[SerializableAttribute]
public sealed class EntitySqlException : EntityException
[SerializableAttribute]
public ref class EntitySqlException sealed : public EntityException
[<SealedAttribute>]
[<SerializableAttribute>]
type EntitySqlException =
    class
        inherit EntityException
    end

有关如何处理代码异常的更多信息，请参见 Exception。

System.Data System.Data..::.EntitySqlExceptionEntitySqlException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 成员
System.Data 命名空间


EntitySqlException 成员

EntitySqlException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySqlException 类

表示分析 Entity SQL 命令文本时出现的错误。违反语法或语义规则时会引发此异常。 表示分析 Entity SQL 命令文本时出现的错误。违反语法或语义规则时会引发此异常。

EntitySqlException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntitySqlException 类
System.Data 命名空间


EntitySqlException 构造函数

EntitySqlException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySqlException 类

初始化 EntitySqlException 的新实例。

名称 说明
页首

有关如何处理代码异常的更多信息，请参见 Exception。

参考

EntitySqlException 类
EntitySqlException 成员
System.Data 命名空间


EntitySqlException 构造函数

EntitySqlException 构造函数
EntitySqlException 类

初始化 EntitySqlException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EntitySqlException()
public:
EntitySqlException()
new : unit -> EntitySqlException

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 类
EntitySqlException 成员
EntitySqlException 重载
System.Data 命名空间


EntitySqlException 构造函数 (String)

EntitySqlException 构造函数 (String)
EntitySqlException 类

使用专用的错误消息初始化 EntitySqlException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public EntitySqlException(
    string message
)
public:
EntitySqlException(
    String^ message
)
new :
        message:string -> EntitySqlException

参数

message
类型： System String
描述错误的消息。

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 类
EntitySqlException 成员
EntitySqlException 重载
System.Data 命名空间


EntitySqlException 构造函数 (String, Exception)

EntitySqlException 构造函数 (String, Exception)
EntitySqlException 类

初始化 EntitySqlException 类的新实例，该类使用指定的错误消息和对导致此异常的内部异常的引用。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public EntitySqlException(
    string message,
    Exception innerException
)
public:
EntitySqlException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> EntitySqlException

参数

message
类型： System String
用于解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常，或者，如果未指定任何内部异常，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 引用（在 Visual Basic 中为 Nothing）。

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 类
EntitySqlException 成员
EntitySqlException 重载
System.Data 命名空间


EntitySqlException 方法

EntitySqlException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySqlException 类

EntitySqlException 类型公开以下成员。

名称 说明
页首

参考

EntitySqlException 类
System.Data 命名空间


EntitySqlException ..::.GetObjectData 方法

EntitySqlException
.
.
::
.
GetObjectData 方法
EntitySqlException 类

使用有关异常的信息设置 SerializationInfo。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter := True)> _
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
[SecurityPermissionAttribute(SecurityAction::Demand, SerializationFormatter = true)]
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
[<SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)>]
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
[<SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)>]
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它包含有关所引发异常的序列化对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

实现

异常 | 条件
ArgumentNullException | info 参数是一个 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 引用（在 Visual Basic 中为 Nothing）。

GetObjectData 用针对于序列化的异常对象数据来设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常。 GetObjectData 用针对于序列化的异常对象数据来设置 SerializationInfo。反序列化期间，从通过流传输的 SerializationInfo 重建异常。

有关如何处理代码异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 类
EntitySqlException 成员
System.Data 命名空间


EntitySqlException 属性

EntitySqlException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySqlException 类

EntitySqlException 类型公开以下成员。

名称 说明
页首

参考

EntitySqlException 类
System.Data 命名空间


EntitySqlException ..::.Column 属性

EntitySqlException
.
.
::
.
Column 属性
EntitySqlException 类

获取发生错误的大致列号。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Column As Integer
    Get
public int Column { get; }
public:
property int Column {
    int get ();
}
member Column : int

属性值

类型： System Int32
一个整数，描述发生错误的列号。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 类
EntitySqlException 成员
System.Data 命名空间


EntitySqlException ..::.ErrorContext 属性

EntitySqlException
.
.
::
.
ErrorContext 属性
EntitySqlException 类

获取发生错误的大致上下文（如果有）。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ErrorContext As String
    Get
public string ErrorContext { get; }
public:
property String^ ErrorContext {
    String^ get ();
}
member ErrorContext : string

属性值

类型： System String
一个字符串，描述发生错误的大致上下文（如果有）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 类
EntitySqlException 成员
System.Data 命名空间


EntitySqlException ..::.ErrorDescription 属性

EntitySqlException
.
.
::
.
ErrorDescription 属性
EntitySqlException 类

获取错误说明。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ErrorDescription As String
    Get
public string ErrorDescription { get; }
public:
property String^ ErrorDescription {
    String^ get ();
}
member ErrorDescription : string

属性值

类型： System String
描述错误的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 类
EntitySqlException 成员
System.Data 命名空间


EntitySqlException ..::.Line 属性

EntitySqlException
.
.
::
.
Line 属性
EntitySqlException 类

获取发生错误的大致行号。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Line As Integer
    Get
public int Line { get; }
public:
property int Line {
    int get ();
}
member Line : int

属性值

类型： System Int32
一个整数，描述发生错误的行号。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 类
EntitySqlException 成员
System.Data 命名空间


EntitySqlException ..::.Message 属性

EntitySqlException
.
.
::
.
Message 属性
EntitySqlException 类

获取完整错误消息。根据可用情况，消息包含错误描述、上下文、行号和列号。 获取完整错误消息。根据可用情况，消息包含错误描述、上下文、行号和列号。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides ReadOnly Property Message As String
    Get
public override string Message { get; }
public:
virtual property String^ Message {
    String^ get () override;
}
abstract Message : string
override Message : string

属性值

类型： System String
描述完整错误消息的字符串。根据可用情况，消息包含错误描述、上下文、行号和列号。 描述完整错误消息的字符串。根据可用情况，消息包含错误描述、上下文、行号和列号。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySqlException 类
EntitySqlException 成员
System.Data 命名空间


EntitySqlException 事件

EntitySqlException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySqlException 类

EntitySqlException 类型公开以下成员。

名称 说明
页首

参考

EntitySqlException 类
System.Data 命名空间


EntityState 枚举

EntityState 枚举

实体对象的状态。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<FlagsAttribute> _
Public Enumeration EntityState
[FlagsAttribute]
public enum EntityState
[FlagsAttribute]
public enum class EntityState
[<FlagsAttribute>]
type EntityState
成员名称 | 说明
Detached | 对象存在，但没有被跟踪。在创建实体之后、但将其添加到对象上下文之前，该实体处于此状态。通过调用 Detach 方法从上下文中移除实体后，或者使用 NoTrackingMergeOption 加载实体后，该实体也会处于此状态。没有 ObjectStateEntry 实例与状态为 Detached 的对象关联。 对象存在，但没有被跟踪。在创建实体之后、但将其添加到对象上下文之前，该实体处于此状态。通过调用 Detach 方法从上下文中移除实体后，或者使用 NoTrackingMergeOption 加载实体后，该实体也会处于此状态。没有 ObjectStateEntry 实例与状态为 Detached 的对象关联。 对象存在，但没有被跟踪。在创建实体之后、但将其添加到对象上下文之前，该实体处于此状态。通过调用 Detach 方法从上下文中移除实体后，或者使用 NoTrackingMergeOption 加载实体后，该实体也会处于此状态。没有 ObjectStateEntry 实例与状态为 Detached 的对象关联。 对象存在，但没有被跟踪。在创建实体之后、但将其添加到对象上下文之前，该实体处于此状态。通过调用 Detach 方法从上下文中移除实体后，或者使用 NoTrackingMergeOption 加载实体后，该实体也会处于此状态。没有 ObjectStateEntry 实例与状态为 Detached 的对象关联。
Unchanged | 自对象附加到上下文中后，或自上次调用 SaveChanges 方法后，此对象尚未经过修改。
Added | 对象为新对象，并且已添加到对象上下文，但尚未调用 SaveChanges 方法。在保存更改后，对象状态将更改为 Unchanged。状态为 Added 的对象在 ObjectStateEntry 中没有原始值。 对象为新对象，并且已添加到对象上下文，但尚未调用 SaveChanges 方法。在保存更改后，对象状态将更改为 Unchanged。状态为 Added 的对象在 ObjectStateEntry 中没有原始值。 对象为新对象，并且已添加到对象上下文，但尚未调用 SaveChanges 方法。在保存更改后，对象状态将更改为 Unchanged。状态为 Added 的对象在 ObjectStateEntry 中没有原始值。
Deleted | 对象已从对象上下文中删除。在保存更改后，对象状态将更改为 Detached。 对象已从对象上下文中删除。在保存更改后，对象状态将更改为 Detached。
Modified | 对象上的一个标量属性已更改，但尚未调用 SaveChanges 方法。在不带更改跟踪代理的 POCO 实体中，调用 DetectChanges 方法时，已修改属性的状态将更改为 Modified。在保存更改后，对象状态将更改为 Unchanged。 对象上的一个标量属性已更改，但尚未调用 SaveChanges 方法。在不带更改跟踪代理的 POCO 实体中，调用 DetectChanges 方法时，已修改属性的状态将更改为 Modified。在保存更改后，对象状态将更改为 Unchanged。 对象上的一个标量属性已更改，但尚未调用 SaveChanges 方法。在不带更改跟踪代理的 POCO 实体中，调用 DetectChanges 方法时，已修改属性的状态将更改为 Modified。在保存更改后，对象状态将更改为 Unchanged。

对象上下文必须知道对象状态才能将更改保存回数据源。ObjectStateEntry 对象存储 EntityState 信息。ObjectContext 的 SaveChanges 方法根据每个对象的 EntityState 处理附加到上下文的实体和更新数据源。有关更多信息，请参见Adding, Modifying, and Deleting Objects。 对象上下文必须知道对象状态才能将更改保存回数据源。ObjectStateEntry 对象存储 EntityState 信息。ObjectContext 的 SaveChanges 方法根据每个对象的 EntityState 处理附加到上下文的实体和更新数据源。有关更多信息，请参见Adding, Modifying, and Deleting Objects。 对象上下文必须知道对象状态才能将更改保存回数据源。ObjectStateEntry 对象存储 EntityState 信息。ObjectContext 的 SaveChanges 方法根据每个对象的 EntityState 处理附加到上下文的实体和更新数据源。有关更多信息，请参见Adding, Modifying, and Deleting Objects。 对象上下文必须知道对象状态才能将更改保存回数据源。ObjectStateEntry 对象存储 EntityState 信息。ObjectContext 的 SaveChanges 方法根据每个对象的 EntityState 处理附加到上下文的实体和更新数据源。有关更多信息，请参见Adding, Modifying, and Deleting Objects。

对象上下文中的对象状态由 ObjectStateManager 管理。若要查找对象的状态，请调用以下 ObjectStateManager 方法之一：TryGetObjectStateEntry、GetObjectStateEntry 或 GetObjectStateEntries。ObjectStateEntry 的 State 属性定义该对象的状态。 对象上下文中的对象状态由 ObjectStateManager 管理。若要查找对象的状态，请调用以下 ObjectStateManager 方法之一：TryGetObjectStateEntry、GetObjectStateEntry 或 GetObjectStateEntries。ObjectStateEntry 的 State 属性定义该对象的状态。 对象上下文中的对象状态由 ObjectStateManager 管理。若要查找对象的状态，请调用以下 ObjectStateManager 方法之一：TryGetObjectStateEntry、GetObjectStateEntry 或 GetObjectStateEntries。ObjectStateEntry 的 State 属性定义该对象的状态。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data 命名空间
ObjectContext


EnumerableRowCollection 类

EnumerableRowCollection 类
成员

表示从 LINQ to DataSet 查询返回的 DataRow 对象的集合。 此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public MustInherit Class EnumerableRowCollection _
    Implements IEnumerable
public abstract class EnumerableRowCollection : IEnumerable
public ref class EnumerableRowCollection abstract : IEnumerable
[<AbstractClassAttribute>]
type EnumerableRowCollection =
    class
        interface IEnumerable
    end

EnumerableRowCollection 提供了入口点，以便可以在扩展方法中截获强制转换运算。派生泛型类 EnumerableRowCollection<(Of <(TRow>)>) 实际上由 .NET Framework 用于包含查询结果。 EnumerableRowCollection 提供了入口点，以便可以在扩展方法中截获强制转换运算。派生泛型类 EnumerableRowCollection<(Of <(TRow>)>) 实际上由 .NET Framework 用于包含查询结果。

此类无法实例化。

System.Data System.Data..::.EnumerableRowCollectionEnumerableRowCollection

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollection 成员
System.Data 命名空间
DataRow
DataView
EnumerableRowCollection TRow

其他资源

LINQ to DataSet


EnumerableRowCollection 成员

EnumerableRowCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollection 类

表示从 LINQ to DataSet 查询返回的 DataRow 对象的集合。 此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

EnumerableRowCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EnumerableRowCollection 类
System.Data 命名空间


EnumerableRowCollection 方法

EnumerableRowCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollection 类

EnumerableRowCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EnumerableRowCollection 类
System.Data 命名空间


EnumerableRowCollection ..::.IEnumerable ..::.GetEnumerator 方法

EnumerableRowCollection
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
EnumerableRowCollection 类

返回 DataRow 对象集合的枚举器。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 返回 DataRow 对象集合的枚举器。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个可用于遍历 DataRow 对象的集合的 IEnumerator。

实现

默认实现始终返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollection 类
EnumerableRowCollection 成员
System.Data 命名空间
EnumerableRowCollection


EnumerableRowCollection <(Of <(TRow >)>) 类

EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
类
成员

表示从查询返回的 DataRow 对象的集合。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 表示从查询返回的 DataRow 对象的集合。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public Class EnumerableRowCollection(Of TRow) _
    Inherits EnumerableRowCollection _
    Implements IEnumerable(Of TRow), IEnumerable
public class EnumerableRowCollection<TRow> : EnumerableRowCollection,
    IEnumerable<TRow>, IEnumerable

generic<typename TRow>
public ref class EnumerableRowCollection : public EnumerableRowCollection,
    IEnumerable<TRow>, IEnumerable
type EnumerableRowCollection<'TRow> =
    class
        inherit EnumerableRowCollection
        interface IEnumerable<'TRow>
        interface IEnumerable
    end

类型参数

TRow

源序列中的对象的类型，通常为 DataRow。

EnumerableRowCollection<(Of <(TRow>)>) 用于包含 LINQ to DataSet 查询的结果。

无法直接实例化 EnumerableRowCollection<(Of <(TRow>)>)，因为没有此类的公共构造函数。

System.Data
System.Data..::.EnumerableRowCollection<(Of <(TRow>)>)EnumerableRowCollection
System.Data..::.EnumerableRowCollection<(Of <(TRow>)>)TRow
System.Data..::.EnumerableRowCollection<(Of <(TRow>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollection TRow 成员
System.Data 命名空间
DataRow
DataView
EnumerableRowCollection

其他资源

LINQ to DataSet


EnumerableRowCollection <(Of <(TRow >)>) 成员

EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollection

表示从查询返回的 DataRow 对象的集合。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 表示从查询返回的 DataRow 对象的集合。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

EnumerableRowCollection TRow 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EnumerableRowCollection TRow 类
System.Data 命名空间


EnumerableRowCollection <(Of <(TRow >)>) 方法

EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollection

EnumerableRowCollection TRow 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EnumerableRowCollection TRow 类
System.Data 命名空间


EnumerableRowCollection <(Of <(TRow >)>) ..::.GetEnumerator 方法

EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
.
.
::
.
GetEnumerator 方法
EnumerableRowCollection

返回包含的行对象集合的枚举数。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 返回包含的行对象集合的枚举数。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public Function GetEnumerator As IEnumerator(Of TRow)
public IEnumerator<TRow> GetEnumerator()
public:
virtual IEnumerator<TRow>^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator<'TRow>
override GetEnumerator : unit -> IEnumerator<'TRow>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
TRow
>
)
>
)

一个强类型 IEnumerator<(Of <(T>)>)，可用于遍历 TRow 对象的集合。

实现

当用于 LINQ to DataSet 查询时，Trow 将为 DataRow 类型。

不能重写此方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollection TRow 类
EnumerableRowCollection TRow 成员
System.Data 命名空间
Enumerable


EnumerableRowCollection <(Of <(TRow >)>) ..::.IEnumerable ..::.GetEnumerator 方法

EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
EnumerableRowCollection

返回 DataRow 对象集合的枚举数。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 返回 DataRow 对象集合的枚举数。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个可用于遍历 DataRow 对象的集合的 IEnumerator。

实现

此方法调用 GetEnumerator 方法。

不能重写此方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollection TRow 类
EnumerableRowCollection TRow 成员
System.Data 命名空间
GetEnumerator


EnumerableRowCollectionExtensions 类

EnumerableRowCollectionExtensions 类
成员

包含数据行集合类的扩展方法。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 包含数据行集合类的扩展方法。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public NotInheritable Class EnumerableRowCollectionExtensions
public static class EnumerableRowCollectionExtensions
[ExtensionAttribute]
public ref class EnumerableRowCollectionExtensions abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type EnumerableRowCollectionExtensions =  class end

EnumerableRowCollectionExtensions 类包含为 EnumerableRowCollection<(Of <(TRow>)>) 和 OrderedEnumerableRowCollection<(Of <(TRow>)>) 类定义 Cast<(Of <(TResult>)>) 方法和标准查询操作的静态扩展方法。

无法继承和实例化该类。

System.Data System.Data..::.EnumerableRowCollectionExtensionsEnumerableRowCollectionExtensions
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 成员
System.Data 命名空间
EnumerableRowCollection TRow
OrderedEnumerableRowCollection TRow

其他资源

Standard Query Operators Overview


EnumerableRowCollectionExtensions 成员

EnumerableRowCollectionExtensions 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollectionExtensions 类

包含数据行集合类的扩展方法。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 包含数据行集合类的扩展方法。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

EnumerableRowCollectionExtensions 类型公开以下成员。

名称 说明
页首

参考

EnumerableRowCollectionExtensions 类
System.Data 命名空间


EnumerableRowCollectionExtensions 方法

EnumerableRowCollectionExtensions 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollectionExtensions 类

EnumerableRowCollectionExtensions 类型公开以下成员。

名称 说明
页首

参考

EnumerableRowCollectionExtensions 类
System.Data 命名空间


EnumerableRowCollectionExtensions ..::.Cast <(Of <(TResult >)>) 方法

EnumerableRowCollectionExtensions
.
.
::
.
Cast
<
(Of
<
(
TResult
>
)
>
)
方法
EnumerableRowCollectionExtensions 类

将 EnumerableRowCollection 的元素转换为指定类型。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 将 EnumerableRowCollection 的元素转换为指定类型。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Cast(Of TResult) ( _
    source As EnumerableRowCollection _
) As EnumerableRowCollection(Of TResult)
public static EnumerableRowCollection<TResult> Cast<TResult>(
    this EnumerableRowCollection source
)

[ExtensionAttribute]
public:
generic<typename TResult>
static EnumerableRowCollection<TResult>^ Cast(
    EnumerableRowCollection^ source
)
static member Cast :
        source:EnumerableRowCollection -> EnumerableRowCollection<'TResult>

类型参数

TResult

源中的元素要转换成的类型。

参数

source
类型： System.Data EnumerableRowCollection
包含要转换的元素的 EnumerableRowCollection。

返回值

类型： System.Data EnumerableRowCollection
<
(Of
<
(
TResult
>
)
>
)

一个 EnumerableRowCollection，其中包含已转换为指定类型的源序列的各个元素。

使用说明

在 Visual Basic 和 C# 中，可以在 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。
异常 | 条件
ArgumentNullException | source 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidCastException | 序列中的元素不能强制转换为 TResult 类型。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
System.Data 命名空间
EnumerableRowCollection
Cast TResult


EnumerableRowCollectionExtensions ..::.OrderBy 方法

EnumerableRowCollectionExtensions
.
.
::
.
OrderBy 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollectionExtensions 类

按升序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 按升序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

名称 说明
页首

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
System.Data 命名空间


EnumerableRowCollectionExtensions ..::.OrderBy <(Of <(TRow, TKey >)>) 方法 (EnumerableRowCollection <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>))

EnumerableRowCollectionExtensions
.
.
::
.
OrderBy
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
)
EnumerableRowCollectionExtensions 类

按指定键升序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 按指定键升序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function OrderBy(Of TRow, TKey) ( _
    source As EnumerableRowCollection(Of TRow), _
    keySelector As Func(Of TRow, TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> OrderBy<TRow, TKey>(
    this EnumerableRowCollection<TRow> source,
    Func<TRow, TKey> keySelector
)

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
static OrderedEnumerableRowCollection<TRow>^ OrderBy(
    EnumerableRowCollection<TRow>^ source,
    Func<TRow, TKey>^ keySelector
)
static member OrderBy :
        source:EnumerableRowCollection<'TRow> *
        keySelector:Func<'TRow, 'TKey> -> OrderedEnumerableRowCollection<'TRow>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

包含要排序的 DataRow 元素的 EnumerableRowCollection。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

按指定键排序其元素的 OrderedEnumerableRowCollection<(Of <(TRow>)>)。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
OrderBy 重载
System.Data 命名空间
Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))
ThenBy
OrderBy


EnumerableRowCollectionExtensions ..::.OrderBy <(Of <(TRow, TKey >)>) 方法 (EnumerableRowCollection <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>), IComparer <(Of <(TKey >)>))

EnumerableRowCollectionExtensions
.
.
::
.
OrderBy
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
, IComparer
<
(Of
<
(
TKey
>
)
>
)
)
EnumerableRowCollectionExtensions 类

按指定键和比较器升序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 按指定键和比较器升序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function OrderBy(Of TRow, TKey) ( _
    source As EnumerableRowCollection(Of TRow), _
    keySelector As Func(Of TRow, TKey), _
    comparer As IComparer(Of TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> OrderBy<TRow, TKey>(
    this EnumerableRowCollection<TRow> source,
    Func<TRow, TKey> keySelector,
    IComparer<TKey> comparer
)

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
static OrderedEnumerableRowCollection<TRow>^ OrderBy(
    EnumerableRowCollection<TRow>^ source,
    Func<TRow, TKey>^ keySelector,
    IComparer<TKey>^ comparer
)
static member OrderBy :
        source:EnumerableRowCollection<'TRow> *
        keySelector:Func<'TRow, 'TKey> *
        comparer:IComparer<'TKey> -> OrderedEnumerableRowCollection<'TRow>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

包含要排序的 DataRow 元素的 EnumerableRowCollection。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
TKey
>
)
>
)

一个用于比较键的 IComparer<(Of <(T>)>)。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

按指定键和比较器排序其元素的 OrderedEnumerableRowCollection<(Of <(TRow>)>)。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
OrderBy 重载
System.Data 命名空间
Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))
ThenBy
OrderBy


EnumerableRowCollectionExtensions ..::.OrderByDescending 方法

EnumerableRowCollectionExtensions
.
.
::
.
OrderByDescending 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollectionExtensions 类

按降序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 按降序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

名称 说明
页首

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
System.Data 命名空间


EnumerableRowCollectionExtensions ..::.OrderByDescending <(Of <(TRow, TKey >)>) 方法 (EnumerableRowCollection <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>))

EnumerableRowCollectionExtensions
.
.
::
.
OrderByDescending
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
)
EnumerableRowCollectionExtensions 类

按指定键降序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 按指定键降序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function OrderByDescending(Of TRow, TKey) ( _
    source As EnumerableRowCollection(Of TRow), _
    keySelector As Func(Of TRow, TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> OrderByDescending<TRow, TKey>(
    this EnumerableRowCollection<TRow> source,
    Func<TRow, TKey> keySelector
)

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
static OrderedEnumerableRowCollection<TRow>^ OrderByDescending(
    EnumerableRowCollection<TRow>^ source,
    Func<TRow, TKey>^ keySelector
)
static member OrderByDescending :
        source:EnumerableRowCollection<'TRow> *
        keySelector:Func<'TRow, 'TKey> -> OrderedEnumerableRowCollection<'TRow>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

包含要排序的 DataRow 元素的 EnumerableRowCollection。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

按指定键排序其元素的 OrderedEnumerableRowCollection<(Of <(TRow>)>)。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
OrderByDescending 重载
System.Data 命名空间
Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))
ThenByDescending
OrderByDescending


EnumerableRowCollectionExtensions ..::.OrderByDescending <(Of <(TRow, TKey >)>) 方法 (EnumerableRowCollection <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>), IComparer <(Of <(TKey >)>))

EnumerableRowCollectionExtensions
.
.
::
.
OrderByDescending
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
, IComparer
<
(Of
<
(
TKey
>
)
>
)
)
EnumerableRowCollectionExtensions 类

按指定键和比较器降序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 按指定键和比较器降序排序 EnumerableRowCollection 的行。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function OrderByDescending(Of TRow, TKey) ( _
    source As EnumerableRowCollection(Of TRow), _
    keySelector As Func(Of TRow, TKey), _
    comparer As IComparer(Of TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> OrderByDescending<TRow, TKey>(
    this EnumerableRowCollection<TRow> source,
    Func<TRow, TKey> keySelector,
    IComparer<TKey> comparer
)

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
static OrderedEnumerableRowCollection<TRow>^ OrderByDescending(
    EnumerableRowCollection<TRow>^ source,
    Func<TRow, TKey>^ keySelector,
    IComparer<TKey>^ comparer
)
static member OrderByDescending :
        source:EnumerableRowCollection<'TRow> *
        keySelector:Func<'TRow, 'TKey> *
        comparer:IComparer<'TKey> -> OrderedEnumerableRowCollection<'TRow>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

包含要排序的 DataRow 元素的 EnumerableRowCollection。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
TKey
>
)
>
)

一个用于比较键的 IComparer<(Of <(T>)>)。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

按指定键和比较器排序其元素的 OrderedEnumerableRowCollection<(Of <(TRow>)>)。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
OrderByDescending 重载
System.Data 命名空间
Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))
ThenByDescending
OrderByDescending


EnumerableRowCollectionExtensions ..::.Select <(Of <(TRow, S >)>) 方法

EnumerableRowCollectionExtensions
.
.
::
.
Select
<
(Of
<
(
TRow, S
>
)
>
)
方法
EnumerableRowCollectionExtensions 类

将 EnumerableRowCollection<(Of <(TRow>)>) 中的每个元素投影到新窗体。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 将 EnumerableRowCollection<(Of <(TRow>)>) 中的每个元素投影到新窗体。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Select(Of TRow, S) ( _
    source As EnumerableRowCollection(Of TRow), _
    selector As Func(Of TRow, S) _
) As EnumerableRowCollection(Of S)
public static EnumerableRowCollection<S> Select<TRow, S>(
    this EnumerableRowCollection<TRow> source,
    Func<TRow, S> selector
)

[ExtensionAttribute]
public:
generic<typename TRow, typename S>
static EnumerableRowCollection<S>^ Select(
    EnumerableRowCollection<TRow>^ source,
    Func<TRow, S>^ selector
)
static member Select :
        source:EnumerableRowCollection<'TRow> *
        selector:Func<'TRow, 'S> -> EnumerableRowCollection<'S>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

S

TRow 将转换成的类型。

参数

source
类型： System.Data EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

一个 EnumerableRowCollection<(Of <(TRow>)>)，其中包含要对其调用转换函数的 DataRow 元素。
selector
类型： System Func
<
(Of
<
(
TRow, S
>
)
>
)

应用于每个元素的转换函数。

返回值

类型： System.Data EnumerableRowCollection
<
(Of
<
(
S
>
)
>
)

一个 EnumerableRowCollection<(Of <(TRow>)>)，其元素为对 source 的每个元素调用转换函数的结果。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

此投影方法需要转换函数 selector，以为源序列 source 中的每个值生成一个值。如果 selector 返回的值本身为一个集合，则由使用方手动遍历子序列。 此投影方法需要转换函数 selector，以为源序列 source 中的每个值生成一个值。如果 selector 返回的值本身为一个集合，则由使用方手动遍历子序列。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
System.Data 命名空间


EnumerableRowCollectionExtensions ..::.ThenBy 方法

EnumerableRowCollectionExtensions
.
.
::
.
ThenBy 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollectionExtensions 类

按升序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 按升序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

名称 说明
页首

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
System.Data 命名空间


EnumerableRowCollectionExtensions ..::.ThenBy <(Of <(TRow, TKey >)>) 方法 (OrderedEnumerableRowCollection <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>))

EnumerableRowCollectionExtensions
.
.
::
.
ThenBy
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
)
EnumerableRowCollectionExtensions 类

根据指定键按升序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 根据指定键按升序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function ThenBy(Of TRow, TKey) ( _
    source As OrderedEnumerableRowCollection(Of TRow), _
    keySelector As Func(Of TRow, TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> ThenBy<TRow, TKey>(
    this OrderedEnumerableRowCollection<TRow> source,
    Func<TRow, TKey> keySelector
)

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
static OrderedEnumerableRowCollection<TRow>^ ThenBy(
    OrderedEnumerableRowCollection<TRow>^ source,
    Func<TRow, TKey>^ keySelector
)
static member ThenBy :
        source:OrderedEnumerableRowCollection<'TRow> *
        keySelector:Func<'TRow, 'TKey> -> OrderedEnumerableRowCollection<'TRow>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

包含要排序的 DataRow 元素的 EnumerableRowCollection。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

按指定键排序其元素的 OrderedEnumerableRowCollection<(Of <(TRow>)>)。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

使用 ThenBy 操作需要一个使用 OrderBy 的现有主排序操作。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
ThenBy 重载
System.Data 命名空间
Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))
OrderBy
ThenBy


EnumerableRowCollectionExtensions ..::.ThenBy <(Of <(TRow, TKey >)>) 方法 (OrderedEnumerableRowCollection <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>), IComparer <(Of <(TKey >)>))

EnumerableRowCollectionExtensions
.
.
::
.
ThenBy
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
, IComparer
<
(Of
<
(
TKey
>
)
>
)
)
EnumerableRowCollectionExtensions 类

根据指定键和比较器按升序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 根据指定键和比较器按升序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function ThenBy(Of TRow, TKey) ( _
    source As OrderedEnumerableRowCollection(Of TRow), _
    keySelector As Func(Of TRow, TKey), _
    comparer As IComparer(Of TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> ThenBy<TRow, TKey>(
    this OrderedEnumerableRowCollection<TRow> source,
    Func<TRow, TKey> keySelector,
    IComparer<TKey> comparer
)

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
static OrderedEnumerableRowCollection<TRow>^ ThenBy(
    OrderedEnumerableRowCollection<TRow>^ source,
    Func<TRow, TKey>^ keySelector,
    IComparer<TKey>^ comparer
)
static member ThenBy :
        source:OrderedEnumerableRowCollection<'TRow> *
        keySelector:Func<'TRow, 'TKey> *
        comparer:IComparer<'TKey> -> OrderedEnumerableRowCollection<'TRow>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

包含要排序的 DataRow 元素的 EnumerableRowCollection。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
TKey
>
)
>
)

一个用于比较键的 IComparer<(Of <(T>)>)。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

按指定键和比较器排序其元素的 OrderedEnumerableRowCollection<(Of <(TRow>)>)。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

使用 ThenBy 操作需要一个使用 OrderBy 的现有主排序操作。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
ThenBy 重载
System.Data 命名空间
Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))
OrderBy
ThenBy


EnumerableRowCollectionExtensions ..::.ThenByDescending 方法

EnumerableRowCollectionExtensions
.
.
::
.
ThenByDescending 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EnumerableRowCollectionExtensions 类

按降序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 按降序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

名称 说明
页首

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
System.Data 命名空间


EnumerableRowCollectionExtensions ..::.ThenByDescending <(Of <(TRow, TKey >)>) 方法 (OrderedEnumerableRowCollection <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>))

EnumerableRowCollectionExtensions
.
.
::
.
ThenByDescending
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
)
EnumerableRowCollectionExtensions 类

根据指定键按降序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 根据指定键按降序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function ThenByDescending(Of TRow, TKey) ( _
    source As OrderedEnumerableRowCollection(Of TRow), _
    keySelector As Func(Of TRow, TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> ThenByDescending<TRow, TKey>(
    this OrderedEnumerableRowCollection<TRow> source,
    Func<TRow, TKey> keySelector
)

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
static OrderedEnumerableRowCollection<TRow>^ ThenByDescending(
    OrderedEnumerableRowCollection<TRow>^ source,
    Func<TRow, TKey>^ keySelector
)
static member ThenByDescending :
        source:OrderedEnumerableRowCollection<'TRow> *
        keySelector:Func<'TRow, 'TKey> -> OrderedEnumerableRowCollection<'TRow>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

包含要排序的 DataRow 元素的 EnumerableRowCollection。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

按指定键排序其元素的 OrderedEnumerableRowCollection<(Of <(TRow>)>)。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

使用 ThenByDescending 操作需要一个使用 OrderBy 的现有主排序操作。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
ThenByDescending 重载
System.Data 命名空间
Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))
OrderByDescending
ThenByDescending


EnumerableRowCollectionExtensions ..::.ThenByDescending <(Of <(TRow, TKey >)>) 方法 (OrderedEnumerableRowCollection <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>), IComparer <(Of <(TKey >)>))

EnumerableRowCollectionExtensions
.
.
::
.
ThenByDescending
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
, IComparer
<
(Of
<
(
TKey
>
)
>
)
)
EnumerableRowCollectionExtensions 类

根据指定键和比较器按降序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 根据指定键和比较器按降序对 EnumerableRowCollection 的行进行次要排序。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function ThenByDescending(Of TRow, TKey) ( _
    source As OrderedEnumerableRowCollection(Of TRow), _
    keySelector As Func(Of TRow, TKey), _
    comparer As IComparer(Of TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> ThenByDescending<TRow, TKey>(
    this OrderedEnumerableRowCollection<TRow> source,
    Func<TRow, TKey> keySelector,
    IComparer<TKey> comparer
)

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
static OrderedEnumerableRowCollection<TRow>^ ThenByDescending(
    OrderedEnumerableRowCollection<TRow>^ source,
    Func<TRow, TKey>^ keySelector,
    IComparer<TKey>^ comparer
)
static member ThenByDescending :
        source:OrderedEnumerableRowCollection<'TRow> *
        keySelector:Func<'TRow, 'TKey> *
        comparer:IComparer<'TKey> -> OrderedEnumerableRowCollection<'TRow>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

包含要排序的 DataRow 元素的 EnumerableRowCollection。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
TKey
>
)
>
)

一个用于比较键的 IComparer<(Of <(T>)>)。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

按指定键和比较器排序其元素的 OrderedEnumerableRowCollection<(Of <(TRow>)>)。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

使用 ThenByDescending 操作需要一个使用 OrderBy 的现有主排序操作。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
ThenByDescending 重载
System.Data 命名空间
Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))
OrderByDescending
ThenByDescending


EnumerableRowCollectionExtensions ..::.Where <(Of <(TRow >)>) 方法

EnumerableRowCollectionExtensions
.
.
::
.
Where
<
(Of
<
(
TRow
>
)
>
)
方法
EnumerableRowCollectionExtensions 类

按指定谓词筛选行序列。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。 按指定谓词筛选行序列。此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Where(Of TRow) ( _
    source As EnumerableRowCollection(Of TRow), _
    predicate As Func(Of TRow, Boolean) _
) As EnumerableRowCollection(Of TRow)
public static EnumerableRowCollection<TRow> Where<TRow>(
    this EnumerableRowCollection<TRow> source,
    Func<TRow, bool> predicate
)

[ExtensionAttribute]
public:
generic<typename TRow>
static EnumerableRowCollection<TRow>^ Where(
    EnumerableRowCollection<TRow>^ source,
    Func<TRow, bool>^ predicate
)
static member Where :
        source:EnumerableRowCollection<'TRow> *
        predicate:Func<'TRow, bool> -> EnumerableRowCollection<'TRow>

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

参数

source
类型： System.Data EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

包含要筛选的 DataRow 元素的 EnumerableRowCollection。
predicate
类型： System Func
<
(Of
<
(
TRow, Boolean
>
)
>
)

用于测试每个元素是否满足条件的函数。

返回值

类型： System.Data EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

一个 OrderedEnumerableRowCollection<(Of <(TRow>)>)，其中包含输入序列中满足该条件的行。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。 此方法通过使用延迟执行实现。即时返回值为一个对象，该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach（或 Visual Basic 中的 For Each）来枚举该对象时，才执行此方法表示的查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

EnumerableRowCollectionExtensions 类
EnumerableRowCollectionExtensions 成员
System.Data 命名空间
Select``2(EnumerableRowCollection Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)), Expression Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))Func Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>))UMP, UMP Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)) Select``2(EnumerableRowCollection<(Of <(UMP>)>), Expression<(Of <(Func<(Of <(UMP, UMP>)>)>)>)))
Where


EvaluateException 类

EvaluateException 类
成员

表示无法计算 DataColumn 的 Expression 属性时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class EvaluateException _
    Inherits InvalidExpressionException
[SerializableAttribute]
public class EvaluateException : InvalidExpressionException
[SerializableAttribute]
public ref class EvaluateException : public InvalidExpressionException
[<SerializableAttribute>]
type EvaluateException =
    class
        inherit InvalidExpressionException
    end

System.Data System.Data..::.EvaluateExceptionEvaluateException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EvaluateException 成员
System.Data 命名空间


EvaluateException 成员

EvaluateException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EvaluateException 类

表示无法计算 DataColumn 的 Expression 属性时引发的异常。

EvaluateException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EvaluateException 类
System.Data 命名空间


EvaluateException 构造函数

EvaluateException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EvaluateException 类

初始化 EvaluateException 类的一个新实例。

名称 说明
页首

参考

EvaluateException 类
EvaluateException 成员
System.Data 命名空间


EvaluateException 构造函数

EvaluateException 构造函数
EvaluateException 类

初始化 EvaluateException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public EvaluateException()
public:
EvaluateException()
new : unit -> EvaluateException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EvaluateException 类
EvaluateException 成员
EvaluateException 重载
System.Data 命名空间


EvaluateException 构造函数 (String)

EvaluateException 构造函数 (String)
EvaluateException 类

使用指定的字符串初始化 EvaluateException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public EvaluateException(
    string s
)
public:
EvaluateException(
    String^ s
)
new :
        s:string -> EvaluateException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EvaluateException 类
EvaluateException 成员
EvaluateException 重载
System.Data 命名空间


EvaluateException 构造函数 (SerializationInfo, StreamingContext)

EvaluateException 构造函数 (SerializationInfo, StreamingContext)
EvaluateException 类

使用 SerializationInfo 和 StreamingContext 初始化 EvaluateException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected EvaluateException(
    SerializationInfo info,
    StreamingContext context
)
protected:
EvaluateException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> EvaluateException

参数

info
类型： System.Runtime.Serialization SerializationInfo
将对象序列化或反序列化所需的数据。
context
类型： System.Runtime.Serialization StreamingContext
特定序列化流的源和目标。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

EvaluateException 类
EvaluateException 成员
EvaluateException 重载
System.Data 命名空间


EvaluateException 构造函数 (String, Exception)

EvaluateException 构造函数 (String, Exception)
EvaluateException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 EvaluateException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public EvaluateException(
    string message,
    Exception innerException
)
public:
EvaluateException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> EvaluateException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

EvaluateException 类
EvaluateException 成员
EvaluateException 重载
System.Data 命名空间


EvaluateException 方法

EvaluateException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EvaluateException 类

EvaluateException 类型公开以下成员。

名称 说明
页首

参考

EvaluateException 类
System.Data 命名空间


EvaluateException 属性

EvaluateException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EvaluateException 类

EvaluateException 类型公开以下成员。

名称 说明
页首

参考

EvaluateException 类
System.Data 命名空间


EvaluateException 事件

EvaluateException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EvaluateException 类

EvaluateException 类型公开以下成员。

名称 说明
页首

参考

EvaluateException 类
System.Data 命名空间


FillErrorEventArgs 类

FillErrorEventArgs 类
成员

为 DbDataAdapter 的 FillError 事件提供数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class FillErrorEventArgs _
    Inherits EventArgs
public class FillErrorEventArgs : EventArgs
public ref class FillErrorEventArgs : public EventArgs
type FillErrorEventArgs =
    class
        inherit EventArgs
    end

此数据由 DbDataAdapter 的 OnFillError()()() 方法使用。

System.Data System.Data..::.FillErrorEventArgsFillErrorEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FillErrorEventArgs 成员
System.Data 命名空间


FillErrorEventArgs 成员

FillErrorEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FillErrorEventArgs 类

为 DbDataAdapter 的 FillError 事件提供数据。

FillErrorEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

FillErrorEventArgs 类
System.Data 命名空间


FillErrorEventArgs 构造函数

FillErrorEventArgs 构造函数
FillErrorEventArgs 类

初始化 FillErrorEventArgs 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    dataTable As DataTable, _
    values As Object() _
)
public FillErrorEventArgs(
    DataTable dataTable,
    Object[] values
)
public:
FillErrorEventArgs(
    DataTable^ dataTable,
    array<Object^>^ values
)
new :
        dataTable:DataTable *
        values:Object[] -> FillErrorEventArgs

参数

dataTable
类型： System.Data DataTable
正在更新的 DataTable。
values
类型：
array<
System Object
>
[]
()
[]

正在更新的行的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FillErrorEventArgs 类
FillErrorEventArgs 成员
System.Data 命名空间


FillErrorEventArgs 方法

FillErrorEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FillErrorEventArgs 类

FillErrorEventArgs 类型公开以下成员。

名称 说明
页首

参考

FillErrorEventArgs 类
System.Data 命名空间


FillErrorEventArgs 属性

FillErrorEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FillErrorEventArgs 类

FillErrorEventArgs 类型公开以下成员。

名称 说明
页首

参考

FillErrorEventArgs 类
System.Data 命名空间


FillErrorEventArgs ..::.Continue 属性

FillErrorEventArgs
.
.
::
.
Continue 属性
FillErrorEventArgs 类

获取或设置一个值，指示是否继续执行填充操作而不考虑该错误。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Continue As Boolean
    Get
    Set
public bool Continue { get; set; }
public:
property bool Continue {
    bool get ();
    void set (bool value);
}
member Continue : bool with get, set

属性值

类型： System Boolean
如果应该继续执行填充操作，则 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FillErrorEventArgs 类
FillErrorEventArgs 成员
System.Data 命名空间


FillErrorEventArgs ..::.DataTable 属性

FillErrorEventArgs
.
.
::
.
DataTable 属性
FillErrorEventArgs 类

当发生错误时，获取正在更新的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property DataTable As DataTable
    Get
public DataTable DataTable { get; }
public:
property DataTable^ DataTable {
    DataTable^ get ();
}
member DataTable : DataTable

属性值

类型： System.Data DataTable
正在更新的 DataTable。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FillErrorEventArgs 类
FillErrorEventArgs 成员
System.Data 命名空间


FillErrorEventArgs ..::.Errors 属性

FillErrorEventArgs
.
.
::
.
Errors 属性
FillErrorEventArgs 类

获取正在处理的错误。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Property Errors As Exception
    Get
    Set
public Exception Errors { get; set; }
public:
property Exception^ Errors {
    Exception^ get ();
    void set (Exception^ value);
}
member Errors : Exception with get, set

属性值

类型： System Exception
正在处理的错误。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FillErrorEventArgs 类
FillErrorEventArgs 成员
System.Data 命名空间


FillErrorEventArgs ..::.Values 属性

FillErrorEventArgs
.
.
::
.
Values 属性
FillErrorEventArgs 类

当发生错误时，获取正在更新的行的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Values As Object()
    Get
public Object[] Values { get; }
public:
property array<Object^>^ Values {
    array<Object^>^ get ();
}
member Values : Object[]

属性值

类型：
array<
System Object
>
[]
()
[]

正在更新的行的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

FillErrorEventArgs 类
FillErrorEventArgs 成员
System.Data 命名空间


FillErrorEventHandler 委托

FillErrorEventHandler 委托

表示将处理 FillError 事件的方法。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Delegate Sub FillErrorEventHandler ( _
    sender As Object, _
    e As FillErrorEventArgs _
)
public delegate void FillErrorEventHandler(
    Object sender,
    FillErrorEventArgs e
)
public delegate void FillErrorEventHandler(
    Object^ sender,
    FillErrorEventArgs^ e
)
type FillErrorEventHandler =
    delegate of
        sender:Object *
        e:FillErrorEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.Data FillErrorEventArgs
包含事件数据的 FillErrorEventArgs。

当创建 FillErrorEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 FillErrorEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 FillErrorEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 FillErrorEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


ForeignKeyConstraint 类

ForeignKeyConstraint 类
成员

表示删除或更新某个值或行时，对主键/外键关系中一组列强制进行的操作限制。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class ForeignKeyConstraint _
    Inherits Constraint
public class ForeignKeyConstraint : Constraint
public ref class ForeignKeyConstraint : public Constraint
type ForeignKeyConstraint =
    class
        inherit Constraint
    end

ForeignKeyConstraint 限制在删除或更新一列（或多列）的值时所执行的操作。这种约束旨在用于主键列。在两个表的父/子关系中，从父表删除一个值可能会以下列方式之一影响子行。 ForeignKeyConstraint 限制在删除或更新一列（或多列）的值时所执行的操作。这种约束旨在用于主键列。在两个表的父/子关系中，从父表删除一个值可能会以下列方式之一影响子行。 ForeignKeyConstraint 限制在删除或更新一列（或多列）的值时所执行的操作。这种约束旨在用于主键列。在两个表的父/子关系中，从父表删除一个值可能会以下列方式之一影响子行。

  • 可能会同时删除子行（级联操作）。

  • 可能会将子列中的值设置为 null 值。

  • 可能会将子列中的值设置为默认值。

  • 可能生成异常。

ForeignKeyConstraint 对象包含在 DataTable 的 ConstraintCollection 中，可以通过 Constraints 属性来访问。

除非将 EnforceConstraints 属性设置为 true，否则不会强制约束。

每当调用 DataTable 对象的 AcceptChanges 方法时，就会强制 AcceptRejectRule。

下面的示例创建 ForeignKeyConstraint，设置它的某些属性，并将其添加到 DataTable 对象的 ConstraintCollection。

' The next line goes into the Declarations section of the module:
' SuppliersProducts is a class derived from DataSet.
Private suppliersProducts As SuppliersProducts

Private Sub CreateConstraint()
    ' Declare parent column and child column variables.
    Dim parentColumn As DataColumn
    Dim childColumn As DataColumn
    Dim fkeyConstraint As ForeignKeyConstraint

    ' Set parent and child column variables.
    parentColumn = suppliersProducts.Tables("Suppliers").Columns("SupplierID")
    childColumn = suppliersProducts.Tables("Products").Columns("SupplierID")
    fkeyConstraint = New ForeignKeyConstraint( _
        "SupplierFKConstraint", parentColumn, childColumn)

    ' Set null values when a value is deleted.
    fkeyConstraint.DeleteRule = Rule.SetNull
    fkeyConstraint.UpdateRule = Rule.Cascade
    fkeyConstraint.AcceptRejectRule = AcceptRejectRule.Cascade

    ' Add the constraint, and set EnforceConstraints to true.
    suppliersProducts.Tables("Products").Constraints.Add(fkeyConstraint)
    suppliersProducts.EnforceConstraints = True
End Sub

System.Data System.Data..::.ForeignKeyConstraintForeignKeyConstraint

该类型对于多线程读操作是安全的。您必须使任何写操作同步。 该类型对于多线程读操作是安全的。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 成员
System.Data 命名空间
AcceptRejectRule
DataTable
ConstraintCollection
Rule


ForeignKeyConstraint 成员

ForeignKeyConstraint 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ForeignKeyConstraint 类

表示删除或更新某个值或行时，对主键/外键关系中一组列强制进行的操作限制。

ForeignKeyConstraint 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ForeignKeyConstraint 类
System.Data 命名空间


ForeignKeyConstraint 构造函数

ForeignKeyConstraint 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ForeignKeyConstraint 类

初始化 ForeignKeyConstraint 类的新实例。

名称 说明
页首

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间


ForeignKeyConstraint 构造函数 (DataColumn, DataColumn)

ForeignKeyConstraint 构造函数 (DataColumn, DataColumn)
ForeignKeyConstraint 类

使用指定的父级和子级 DataColumn 对象初始化 ForeignKeyConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    parentColumn As DataColumn, _
    childColumn As DataColumn _
)
public ForeignKeyConstraint(
    DataColumn parentColumn,
    DataColumn childColumn
)
public:
ForeignKeyConstraint(
    DataColumn^ parentColumn,
    DataColumn^ childColumn
)
new :
        parentColumn:DataColumn *
        childColumn:DataColumn -> ForeignKeyConstraint

参数

parentColumn
类型： System.Data DataColumn
约束中的父级 DataColumn。
childColumn
类型： System.Data DataColumn
约束中的子级 DataColumn。
异常 | 条件
ArgumentNullException | 其中一列是或两列都是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 列具有不同的数据类型。 - 或 - 表不属于同一 DataSet。

下面的示例创建新 ForeignKeyConstraint，设置它的某些属性，并将其添加到 DataTable 对象的 ConstraintCollection 中。

' The next line goes into the Declarations section.
' SuppliersProducts is a class derived from DataSet.
Private suppliersProducts As SuppliersProducts

Private Sub CreateConstraint()
   ' Declare parent column and child column variables.
   Dim parentColumn As DataColumn
   Dim childColumn As DataColumn
   Dim fkConstraint As ForeignKeyConstraint

   ' Set parent and child column variables.
   parentColumn = _
       suppliersProducts.Tables("Suppliers").Columns("SupplierID")
   childColumn = _
       suppliersProducts.Tables("Products").Columns("SupplieriD")
   fkConstraint = New ForeignKeyConstraint(parentColumn, childColumn)

   ' Set various properties of the constraint.
   With fkConstraint
      .ConstraintName = "suppierFKConstraint"
      .DeleteRule = Rule.SetNull
      .UpdateRule = Rule.Cascade
      .AcceptRejectRule = AcceptRejectRule.Cascade
   End With

   ' Add the constraint, and set EnforceConstraints to true.
   suppliersProducts.Tables("Products").Constraints.Add(fkConstraint)
   suppliersProducts.EnforceConstraints = True
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
ForeignKeyConstraint 重载
System.Data 命名空间


ForeignKeyConstraint 构造函数 ( array<DataColumn >[]()[], array<DataColumn >[]()[])

ForeignKeyConstraint 构造函数 (
array<
DataColumn
>
[]
()
[]
,
array<
DataColumn
>
[]
()
[]
)
ForeignKeyConstraint 类

使用指定的父级和子级 DataColumn 对象的数组，初始化 ForeignKeyConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    parentColumns As DataColumn(), _
    childColumns As DataColumn() _
)
public ForeignKeyConstraint(
    DataColumn[] parentColumns,
    DataColumn[] childColumns
)
public:
ForeignKeyConstraint(
    array<DataColumn^>^ parentColumns,
    array<DataColumn^>^ childColumns
)
new :
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] -> ForeignKeyConstraint

参数

parentColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

约束中的父级 DataColumn 的数组。
childColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

约束中的子级 DataColumn 的数组。
异常 | 条件
ArgumentNullException | 其中一列是或两列都是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 列具有不同的数据类型。 - 或 - 表不属于同一 DataSet。

下面的示例创建新 ForeignKeyConstraint，设置它的某些属性，并将其添加到 DataTable 对象的 ConstraintCollection 中。

' The next line goes into the Declarations section.
' SuppliersProducts is a class derived from DataSet.
Private suppliersProducts As SuppliersProducts

Private Sub CreateConstraint()
   ' Declare parent column and child column variables.
   Dim parentColumns(1) As DataColumn
   Dim childColumns(1) As DataColumn
   Dim fkConstraint As ForeignKeyConstraint

   ' Set parent and child column variables.
   parentColumns(0) = _
       suppliersProducts.Tables("OrderDetails").Columns("OrderID")
   parentColumns(1) = _
       suppliersProducts.Tables("OrderDetails").Columns("ProductID")
   childColumns(0) = _
       suppliersProducts.Tables("Sales").Columns("OrderID")
   childColumns(1) = _
       suppliersProducts.Tables("Sales").Columns("ProductID")
   fkConstraint = _
       New ForeignKeyConstraint(parentColumns, childColumns)

   ' Set various properties of the constraint.
   With fkConstraint
      .ConstraintName = "ProductSalesOrders"
      .DeleteRule = Rule.SetDefault
      .UpdateRule = Rule.Cascade
      .AcceptRejectRule = AcceptRejectRule.Cascade
   End With

   ' Add the constraint, and set EnforceConstraints to true.
   suppliersProducts.Tables( _
       "OrderDetails").Constraints.Add(fkConstraint)
   suppliersProducts.EnforceConstraints = True
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
ForeignKeyConstraint 重载
System.Data 命名空间


ForeignKeyConstraint 构造函数 (String, DataColumn, DataColumn)

ForeignKeyConstraint 构造函数 (String, DataColumn, DataColumn)
ForeignKeyConstraint 类

使用指定的名称、父级和子级 DataColumn 对象初始化 ForeignKeyConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    constraintName As String, _
    parentColumn As DataColumn, _
    childColumn As DataColumn _
)
public ForeignKeyConstraint(
    string constraintName,
    DataColumn parentColumn,
    DataColumn childColumn
)
public:
ForeignKeyConstraint(
    String^ constraintName,
    DataColumn^ parentColumn,
    DataColumn^ childColumn
)
new :
        constraintName:string *
        parentColumn:DataColumn *
        childColumn:DataColumn -> ForeignKeyConstraint

参数

constraintName
类型： System String
约束的名称。
parentColumn
类型： System.Data DataColumn
约束中的父级 DataColumn。
childColumn
类型： System.Data DataColumn
约束中的子级 DataColumn。
异常 | 条件
ArgumentNullException | 其中一列是或两列都是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 列具有不同的数据类型。 - 或 - 表不属于同一 DataSet。

下面的示例创建新 ForeignKeyConstraint，设置它的某些属性，并将其添加到 DataTable 对象的 ConstraintCollection 中。

' The next line goes into the Declarations section of the module:
   ' SuppliersProducts is a class derived from DataSet.
   Private suppliersProducts As SuppliersProducts

Private Sub CreateConstraint()
   ' Declare parent column and child column variables.
   Dim parentColumn As DataColumn
   Dim childColumn As DataColumn
   Dim fkeyConstraint As ForeignKeyConstraint

   ' Set parent and child column variables.
   parentColumn = _
       suppliersProducts.Tables("Suppliers").Columns("SupplierID")
   childColumn = _
       suppliersProducts.Tables("Products").Columns("SupplierID")
   fkeyConstraint = New ForeignKeyConstraint( _
       "SupplierFKConstraint", parentColumn, childColumn)

   ' Set various properties of the constraint.
   With fkeyConstraint
      .DeleteRule = Rule.SetNull
      .UpdateRule = Rule.Cascade
      .AcceptRejectRule = AcceptRejectRule.Cascade
   End With

   ' Add the constraint, and set EnforceConstraints to true.
   suppliersProducts.Tables("Products").Constraints.Add(fkeyConstraint)
   suppliersProducts.EnforceConstraints = True
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
ForeignKeyConstraint 重载
System.Data 命名空间


ForeignKeyConstraint 构造函数 (String, array<DataColumn >[]()[], array<DataColumn >[]()[])

ForeignKeyConstraint 构造函数 (String,
array<
DataColumn
>
[]
()
[]
,
array<
DataColumn
>
[]
()
[]
)
ForeignKeyConstraint 类

使用指定的名称、父级和子级 DataColumn 对象的数组初始化 ForeignKeyConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    constraintName As String, _
    parentColumns As DataColumn(), _
    childColumns As DataColumn() _
)
public ForeignKeyConstraint(
    string constraintName,
    DataColumn[] parentColumns,
    DataColumn[] childColumns
)
public:
ForeignKeyConstraint(
    String^ constraintName,
    array<DataColumn^>^ parentColumns,
    array<DataColumn^>^ childColumns
)
new :
        constraintName:string *
        parentColumns:DataColumn[] *
        childColumns:DataColumn[] -> ForeignKeyConstraint

参数

constraintName
类型： System String
ForeignKeyConstraint 的名称。当添加到约束集合中时，如果是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则给出默认名称。 ForeignKeyConstraint 的名称。当添加到约束集合中时，如果是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串，则给出默认名称。
parentColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

约束中的父级 DataColumn 的数组。
childColumns
类型：
array<
System.Data DataColumn
>
[]
()
[]

约束中的子级 DataColumn 的数组。
异常 | 条件
ArgumentNullException | 其中一列是或两列都是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 列具有不同的数据类型。 - 或 - 表不属于同一 DataSet。

下面的示例创建新 ForeignKeyConstraint，设置它的某些属性，并将其添加到 DataTable 对象的 ConstraintCollection 中。

Private Sub CreateConstraint(ByVal suppliersProducts As DataSet)
    ' Declare parent column and child column variables.
    Dim parentColumns(1) As DataColumn
    Dim childColumns(1) As DataColumn
    Dim fkConstraint As ForeignKeyConstraint

    ' Set parent and child column variables.
    parentColumns(0) = _
        suppliersProducts.Tables("OrderDetails").Columns("OrderID")
    parentColumns(1) = _
        suppliersProducts.Tables("OrderDetails").Columns("ProductID")
    childColumns(0) = _
        suppliersProducts.Tables("Sales").Columns("OrderID")
    childColumns(1) = _
        suppliersProducts.Tables("Sales").Columns("ProductID")
    fkConstraint = New ForeignKeyConstraint( _
        "ProductSalesOrders", parentColumns, childColumns)

    ' Set various properties of the constraint.
    With fkConstraint
        .DeleteRule = Rule.SetDefault
        .UpdateRule = Rule.Cascade
        .AcceptRejectRule = AcceptRejectRule.Cascade
    End With

    ' Add the constraint, and set EnforceConstraints to true.
    suppliersProducts.Tables("OrderDetails").Constraints.Add( _
        fkConstraint)
    suppliersProducts.EnforceConstraints = True
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
ForeignKeyConstraint 重载
System.Data 命名空间


ForeignKeyConstraint 构造函数 (String, String, array<String >[]()[], array<String >[]()[], AcceptRejectRule, Rule, Rule)

ForeignKeyConstraint 构造函数 (String, String,
array<
String
>
[]
()
[]
,
array<
String
>
[]
()
[]
, AcceptRejectRule, Rule, Rule)
ForeignKeyConstraint 类

此构造函数在 Visual Studio 环境中提供设计时支持。因此，使用此构造函数创建的 ForeignKeyConstraint 对象必须通过 AddRange 添加到集合中。当调用该方法时，必须存在具有指定名称的表和列，或者如果在调用该构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的表和列。 此构造函数在 Visual Studio 环境中提供设计时支持。因此，使用此构造函数创建的 ForeignKeyConstraint 对象必须通过 AddRange 添加到集合中。当调用该方法时，必须存在具有指定名称的表和列，或者如果在调用该构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的表和列。 此构造函数在 Visual Studio 环境中提供设计时支持。因此，使用此构造函数创建的 ForeignKeyConstraint 对象必须通过 AddRange 添加到集合中。当调用该方法时，必须存在具有指定名称的表和列，或者如果在调用该构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的表和列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Sub New ( _
    constraintName As String, _
    parentTableName As String, _
    parentColumnNames As String(), _
    childColumnNames As String(), _
    acceptRejectRule As AcceptRejectRule, _
    deleteRule As Rule, _
    updateRule As Rule _
)
[BrowsableAttribute(false)]
public ForeignKeyConstraint(
    string constraintName,
    string parentTableName,
    string[] parentColumnNames,
    string[] childColumnNames,
    AcceptRejectRule acceptRejectRule,
    Rule deleteRule,
    Rule updateRule
)
[BrowsableAttribute(false)]
public:
ForeignKeyConstraint(
    String^ constraintName,
    String^ parentTableName,
    array<String^>^ parentColumnNames,
    array<String^>^ childColumnNames,
    AcceptRejectRule acceptRejectRule,
    Rule deleteRule,
    Rule updateRule
)
[<BrowsableAttribute(false)>]
new :
        constraintName:string *
        parentTableName:string *
        parentColumnNames:string[] *
        childColumnNames:string[] *
        acceptRejectRule:AcceptRejectRule *
        deleteRule:Rule *
        updateRule:Rule -> ForeignKeyConstraint

参数

constraintName
类型： System String
约束的名称。
parentTableName
类型： System String
在约束中包含父级 DataColumn 对象的父级 DataTable 的名称。
parentColumnNames
类型：
array<
System String
>
[]
()
[]

约束中父级 DataColumn 对象名称的数组。
childColumnNames
类型：
array<
System String
>
[]
()
[]

约束中子级 DataColumn 对象名称的数组。
acceptRejectRule
类型： System.Data AcceptRejectRule
AcceptRejectRule 值之一。可能的值包括 None、Cascade 和 Default。 AcceptRejectRule 值之一。可能的值包括 None、Cascade 和 Default。
deleteRule
类型： System.Data Rule
当删除某行时要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。 当删除某行时要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。 当删除某行时要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。
updateRule
类型： System.Data Rule
当某一行被更新时，要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。 当某一行被更新时，要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。 当某一行被更新时，要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。
异常 | 条件
ArgumentNullException | 其中一列是或两列都是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 列具有不同的数据类型。 - 或 - 表不属于同一 DataSet。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
ForeignKeyConstraint 重载
System.Data 命名空间


ForeignKeyConstraint 构造函数 (String, String, String, array<String >[]()[], array<String >[]()[], AcceptRejectRule, Rule, Rule)

ForeignKeyConstraint 构造函数 (String, String, String,
array<
String
>
[]
()
[]
,
array<
String
>
[]
()
[]
, AcceptRejectRule, Rule, Rule)
ForeignKeyConstraint 类

此构造函数在 Visual Studio 环境中提供设计时支持。因此，使用此构造函数创建的 ForeignKeyConstraint 对象必须通过 AddRange 添加到集合中。当调用该方法时，必须存在具有指定名称的表和列，或者如果在调用该构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的表和列。 此构造函数在 Visual Studio 环境中提供设计时支持。因此，使用此构造函数创建的 ForeignKeyConstraint 对象必须通过 AddRange 添加到集合中。当调用该方法时，必须存在具有指定名称的表和列，或者如果在调用该构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的表和列。 此构造函数在 Visual Studio 环境中提供设计时支持。因此，使用此构造函数创建的 ForeignKeyConstraint 对象必须通过 AddRange 添加到集合中。当调用该方法时，必须存在具有指定名称的表和列，或者如果在调用该构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的表和列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Sub New ( _
    constraintName As String, _
    parentTableName As String, _
    parentTableNamespace As String, _
    parentColumnNames As String(), _
    childColumnNames As String(), _
    acceptRejectRule As AcceptRejectRule, _
    deleteRule As Rule, _
    updateRule As Rule _
)
[BrowsableAttribute(false)]
public ForeignKeyConstraint(
    string constraintName,
    string parentTableName,
    string parentTableNamespace,
    string[] parentColumnNames,
    string[] childColumnNames,
    AcceptRejectRule acceptRejectRule,
    Rule deleteRule,
    Rule updateRule
)
[BrowsableAttribute(false)]
public:
ForeignKeyConstraint(
    String^ constraintName,
    String^ parentTableName,
    String^ parentTableNamespace,
    array<String^>^ parentColumnNames,
    array<String^>^ childColumnNames,
    AcceptRejectRule acceptRejectRule,
    Rule deleteRule,
    Rule updateRule
)
[<BrowsableAttribute(false)>]
new :
        constraintName:string *
        parentTableName:string *
        parentTableNamespace:string *
        parentColumnNames:string[] *
        childColumnNames:string[] *
        acceptRejectRule:AcceptRejectRule *
        deleteRule:Rule *
        updateRule:Rule -> ForeignKeyConstraint

参数

constraintName
类型： System String
约束的名称。
parentTableName
类型： System String
在约束中包含父级 DataColumn 对象的父级 DataTable 的名称。
parentTableNamespace
类型： System String
Namespace 的名称。
parentColumnNames
类型：
array<
System String
>
[]
()
[]

约束中父级 DataColumn 对象名称的数组。
childColumnNames
类型：
array<
System String
>
[]
()
[]

约束中子级 DataColumn 对象名称的数组。
acceptRejectRule
类型： System.Data AcceptRejectRule
AcceptRejectRule 值之一。可能的值包括 None、Cascade 和 Default。 AcceptRejectRule 值之一。可能的值包括 None、Cascade 和 Default。
deleteRule
类型： System.Data Rule
当删除某行时要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。 当删除某行时要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。 当删除某行时要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。
updateRule
类型： System.Data Rule
当某一行被更新时，要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。 当某一行被更新时，要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。 当某一行被更新时，要使用 Rule 值之一。默认为 Cascade。可能的值包括：None、Cascade、SetNull、SetDefault 和 Default。
异常 | 条件
ArgumentNullException | 其中一列是或两列都是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidConstraintException | 列具有不同的数据类型。 - 或 - 表不属于同一 DataSet。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
ForeignKeyConstraint 重载
System.Data 命名空间


ForeignKeyConstraint 方法

ForeignKeyConstraint 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ForeignKeyConstraint 类

ForeignKeyConstraint 类型公开以下成员。

名称 说明
页首

参考

ForeignKeyConstraint 类
System.Data 命名空间


ForeignKeyConstraint ..::.Equals 方法

ForeignKeyConstraint
.
.
::
.
Equals 方法
ForeignKeyConstraint 类

获取一个值，该值指示当前的 ForeignKeyConstraint 是否与指定对象相同。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function Equals ( _
    key As Object _
) As Boolean
public override bool Equals(
    Object key
)
public:
virtual bool Equals(
    Object^ key
) override
abstract Equals :
        key:Object -> bool
override Equals :
        key:Object -> bool

参数

key
类型： System Object
此 ForeignKeyConstraint 将与之比较的对象。如果两个 ForeignKeyConstraint 约束相同的列，则它们相等。 此 ForeignKeyConstraint 将与之比较的对象。如果两个 ForeignKeyConstraint 约束相同的列，则它们相等。

返回值

类型： System Boolean
如果对象相同，则为 true；否则为 false。

下面的示例创建了一个新 ForeignKeyConstraint，并在将它添加到 ConstraintCollection 之前，使用 Equals 方法，对照其他集合成员进行检查。

Private Sub CreateConstraint(dataSet As DataSet)
    ' Create the ForignKeyConstraint with two DataColumn objects.
    Dim parentCol As DataColumn = _
       dataSet.Tables("Customers").Columns("id")
    Dim childCol As DataColumn = _
       dataSet.Tables("Orders").Columns("OrderID")
    Dim fkeyConstraint As _
       New ForeignKeyConstraint("fkConstraint", parentCol, childCol)

    ' Test against existing members using the Equals method.
    Dim testConstraint As ForeignKeyConstraint
    For Each testConstraint In  dataSet.Tables("Orders").Constraints
        If fkeyConstraint.Equals(testConstraint) Then
            Console.WriteLine("Identical ForeignKeyConstraint!")
            ' Insert code to delete the duplicate object,
            ' or stop the procedure.
        End If
    Next testConstraint
End Sub

private void CreateConstraint(DataSet dataSet)
{
   // Create the ForignKeyConstraint with two DataColumn objects.
   DataColumn parentCol = dataSet.Tables["Customers"].Columns["id"];
   DataColumn childCol = dataSet.Tables["Orders"].Columns["OrderID"];
   ForeignKeyConstraint fkeyConstraint =
      new ForeignKeyConstraint("fkConstraint", parentCol, childCol);

   // Test against existing members using the Equals method.
   foreach(ForeignKeyConstraint testConstraint in
       dataSet.Tables["Orders"].Constraints)
   {
      if(fkeyConstraint.Equals(testConstraint)){
         Console.WriteLine("Identical ForeignKeyConstraint!");
          // Insert code to delete the duplicate object,
          // or stop the procedure.
      }
   }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间


ForeignKeyConstraint ..::.GetHashCode 方法

ForeignKeyConstraint
.
.
::
.
GetHashCode 方法
ForeignKeyConstraint 类

获取 ForeignKeyConstraint 对象的此实例的哈希代码。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间


ForeignKeyConstraint 属性

ForeignKeyConstraint 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ForeignKeyConstraint 类

ForeignKeyConstraint 类型公开以下成员。

名称 说明
页首

参考

ForeignKeyConstraint 类
System.Data 命名空间


ForeignKeyConstraint ..::.AcceptRejectRule 属性

ForeignKeyConstraint
.
.
::
.
AcceptRejectRule 属性
ForeignKeyConstraint 类

指示调用 AcceptChanges 时，通过该约束应发生的操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property AcceptRejectRule As AcceptRejectRule
    Get
    Set
public virtual AcceptRejectRule AcceptRejectRule { get; set; }
public:
virtual property AcceptRejectRule AcceptRejectRule {
    AcceptRejectRule get ();
    void set (AcceptRejectRule value);
}
abstract AcceptRejectRule : AcceptRejectRule with get, set
override AcceptRejectRule : AcceptRejectRule with get, set

属性值

类型： System.Data AcceptRejectRule
AcceptRejectRule 值之一。可能的值包括 None 和 Cascade。默认为 None。 AcceptRejectRule 值之一。可能的值包括 None 和 Cascade。默认为 None。 AcceptRejectRule 值之一。可能的值包括 None 和 Cascade。默认为 None。

直到调用了 AcceptChanges 方法后，对 DataRow 或 DataTable 的更改才是最终的。此时，AcceptRejectRule 决定了对任何已更改或删除的值采取的操作过程。 直到调用了 AcceptChanges 方法后，对 DataRow 或 DataTable 的更改才是最终的。此时，AcceptRejectRule 决定了对任何已更改或删除的值采取的操作过程。

下面的示例创建了 ForeignKeyConstraint，设置其 AcceptRejectRule 以及将约束添加到 DataTable 对象的 ConstraintCollection。

' The next line goes into the Declarations section of the module:
' SuppliersProducts is a class derived from DataSet.
Private suppliersProducts As SuppliersProducts

Private Sub CreateConstraint()
   ' Declare parent column and child column variables.
   Dim parentColumn As DataColumn
   Dim childColumn As DataColumn
   Dim fkConstraint As ForeignKeyConstraint

   ' Set parent and child column variables.
   parentColumn = suppliersProducts.Tables("Suppliers").Columns("SupplierID")
   childColumn = suppliersProducts.Tables("Products").Columns("SupplieriD")
   fkConstraint = New ForeignKeyConstraint( _
       "SuppierFKConstraint", parentColumn, childColumn)

   ' Set null values when a value is deleted.
   fkConstraint.DeleteRule = Rule.SetNull
   fkConstraint.UpdateRule = Rule.Cascade
   fkConstraint.AcceptRejectRule = AcceptRejectRule.Cascade

   ' Add the constraint, and set EnforceConstraints to true.
   suppliersProducts.Tables("Suppliers").Constraints.Add(fkConstraint)
   suppliersProducts.EnforceConstraints = True
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间
AcceptRejectRule


ForeignKeyConstraint ..::.Columns 属性

ForeignKeyConstraint
.
.
::
.
Columns 属性
ForeignKeyConstraint 类

获取该约束的子列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property Columns As DataColumn()
    Get
public virtual DataColumn[] Columns { get; }
public:
virtual property array<DataColumn^>^ Columns {
    array<DataColumn^>^ get ();
}
abstract Columns : DataColumn[]
override Columns : DataColumn[]

属性值

类型：
array<
System.Data DataColumn
>
[]
()
[]

作为约束子列的 DataColumn 对象的数组。

下面的示例通过 Columns 属性返回 DataColumn 对象的数组。

Private Sub GetColumns()
   Dim dataColumns() As DataColumn
   Dim relation As DataRelation
   Dim i As Integer
   ' Get the DataRelation from a DataSet.
   For Each relation In DataSet1.Relations
      If relation.GetType.ToString = _
        "System.Data.ForeignKeyConstraint" Then
        dataColumns = relation.ParentColumns
           For i = 0 To dataColumns.GetUpperBound(0)
              Console.WriteLine(dataColumns(i).ColumnName)
           Next i
      End If
   Next
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间
Table
DataTable
RelatedTable
RelatedColumns


ForeignKeyConstraint ..::.DeleteRule 属性

ForeignKeyConstraint
.
.
::
.
DeleteRule 属性
ForeignKeyConstraint 类

获取或设置当删除某一行时通过该约束发生的操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property DeleteRule As Rule
    Get
    Set
public virtual Rule DeleteRule { get; set; }
public:
virtual property Rule DeleteRule {
    Rule get ();
    void set (Rule value);
}
abstract DeleteRule : Rule with get, set
override DeleteRule : Rule with get, set

属性值

类型： System.Data Rule
Rule 值之一。默认为 Cascade。 Rule 值之一。默认为 Cascade。

当从某父表删除某一行时，DeleteRule 决定了该子表（或若干子表）中的列所发生的变化。如果将规则设置为 Cascade，就会删除子行。 当从某父表删除某一行时，DeleteRule 决定了该子表（或若干子表）中的列所发生的变化。如果将规则设置为 Cascade，就会删除子行。

如果设置为 SetNull，就会将 DBnull 置于受影响的行的相应列中。列中可以允许或不允许使用空值，视数据源而定。例如，SQLServer 允许在主键列中找到多个空值，即使这些值不是唯一的。但是，在 DataTable 中，如果将 DataColumn 对象的 Unique 属性设置为 true，则在主键列中不允许使用多个空值。 如果设置为 SetNull，就会将 DBnull 置于受影响的行的相应列中。列中可以允许或不允许使用空值，视数据源而定。例如，SQLServer 允许在主键列中找到多个空值，即使这些值不是唯一的。但是，在 DataTable 中，如果将 DataColumn 对象的 Unique 属性设置为 true，则在主键列中不允许使用多个空值。 如果设置为 SetNull，就会将 DBnull 置于受影响的行的相应列中。列中可以允许或不允许使用空值，视数据源而定。例如，SQLServer 允许在主键列中找到多个空值，即使这些值不是唯一的。但是，在 DataTable 中，如果将 DataColumn 对象的 Unique 属性设置为 true，则在主键列中不允许使用多个空值。 如果设置为 SetNull，就会将 DBnull 置于受影响的行的相应列中。列中可以允许或不允许使用空值，视数据源而定。例如，SQLServer 允许在主键列中找到多个空值，即使这些值不是唯一的。但是，在 DataTable 中，如果将 DataColumn 对象的 Unique 属性设置为 true，则在主键列中不允许使用多个空值。

如果设置为 SetDefault，则给列分配默认值。

下面的示例创建 ForeignKeyConstraint，设置它的各种属性，并将其添加到 DataTable 对象的 ConstraintCollection 中。

' The next line goes into the Declarations section of the module:
' SuppliersProducts is a class derived from DataSet.
Private suppliersProducts As SuppliersProducts

Private Sub CreateConstraint()
   ' Declare parent column and child column variables.
   Dim parentColumn As DataColumn
   Dim childColumn As DataColumn
   Dim fkConstraint As ForeignKeyConstraint

   ' Set parent and child column variables.
   parentColumn = suppliersProducts.Tables("Suppliers").Columns("SupplierID")
   childColumn = suppliersProducts.Tables("Products").Columns("SupplieriD")
   fkConstraint = New ForeignKeyConstraint( _
       "SuppierFKConstraint", parentColumn, childColumn)

   ' Set null values when a value is deleted.
   fkConstraint.DeleteRule = Rule.SetNull
   fkConstraint.UpdateRule = Rule.Cascade
   fkConstraint.AcceptRejectRule = AcceptRejectRule.Cascade

   ' Add the constraint, and set EnforceConstraints to true.
   suppliersProducts.Tables("Suppliers").Constraints.Add(fkConstraint)
   suppliersProducts.EnforceConstraints = True
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间


ForeignKeyConstraint ..::.RelatedColumns 属性

ForeignKeyConstraint
.
.
::
.
RelatedColumns 属性
ForeignKeyConstraint 类

该约束的父列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property RelatedColumns As DataColumn()
    Get
public virtual DataColumn[] RelatedColumns { get; }
public:
virtual property array<DataColumn^>^ RelatedColumns {
    array<DataColumn^>^ get ();
}
abstract RelatedColumns : DataColumn[]
override RelatedColumns : DataColumn[]

属性值

类型：
array<
System.Data DataColumn
>
[]
()
[]

作为约束父列的 DataColumn 对象的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间
Columns
DataColumn
DataTable
Table
RelatedTable


ForeignKeyConstraint ..::.RelatedTable 属性

ForeignKeyConstraint
.
.
::
.
RelatedTable 属性
ForeignKeyConstraint 类

获取该约束的父表。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property RelatedTable As DataTable
    Get
public virtual DataTable RelatedTable { get; }
public:
virtual property DataTable^ RelatedTable {
    DataTable^ get ();
}
abstract RelatedTable : DataTable
override RelatedTable : DataTable

属性值

类型： System.Data DataTable
该约束的父级 DataTable。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间
Columns
DataTable
Table
RelatedColumns


ForeignKeyConstraint ..::.Table 属性

ForeignKeyConstraint
.
.
::
.
Table 属性
ForeignKeyConstraint 类

获取该约束的子表。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property Table As DataTable
    Get
public override DataTable Table { get; }
public:
virtual property DataTable^ Table {
    DataTable^ get () override;
}
abstract Table : DataTable
override Table : DataTable

属性值

类型： System.Data DataTable
作为该约束中子表的 DataTable。
Private Sub GetRelatedTables()
   Dim relation As DataRelation
   Dim dataTable As DataTable

   ' Get the DataRelation from a DataSet.
   For Each relation In DataSet1.Relations
      If relation.GetType.ToString = _
       "System.Data.ForeignKeyConstraint" Then
         dataTable = relation.ParentTable
         Console.WriteLine(dataTable.TableName, _
           dataTable.Columns.Count, dataTable.Rows.Count)
      End If
   Next
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间
Columns
DataTable
RelatedTable
RelatedColumns


ForeignKeyConstraint ..::.UpdateRule 属性

ForeignKeyConstraint
.
.
::
.
UpdateRule 属性
ForeignKeyConstraint 类

获取或设置当更新某一行时通过该约束发生的操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property UpdateRule As Rule
    Get
    Set
public virtual Rule UpdateRule { get; set; }
public:
virtual property Rule UpdateRule {
    Rule get ();
    void set (Rule value);
}
abstract UpdateRule : Rule with get, set
override UpdateRule : Rule with get, set

属性值

类型： System.Data Rule
Rule 值之一。默认为 Cascade。 Rule 值之一。默认为 Cascade。

下面的示例创建 ForeignKeyConstraint，设置它的各种属性，并将其添加到 DataTable 对象的 ConstraintCollection 中。

' The next line goes into the Declarations section of the module:
' SuppliersProducts is a class derived from DataSet.
Private suppliersProducts As SuppliersProducts

Private Sub CreateConstraint()
   ' Declare parent column and child column variables.
   Dim parentColumn As DataColumn
   Dim childColumn As DataColumn
   Dim fkConstraint As ForeignKeyConstraint

   ' Set parent and child column variables.
   parentColumn = suppliersProducts.Tables("Suppliers").Columns("SupplierID")
   childColumn = suppliersProducts.Tables("Products").Columns("SupplieriD")
   fkConstraint = New ForeignKeyConstraint( _
       "SuppierFKConstraint", parentColumn, childColumn)

   ' Set null values when a value is deleted.
   fkConstraint.DeleteRule = Rule.SetNull
   fkConstraint.UpdateRule = Rule.Cascade
   fkConstraint.AcceptRejectRule = AcceptRejectRule.Cascade

   ' Add the constraint, and set EnforceConstraints to true.
   suppliersProducts.Tables("Suppliers").Constraints.Add(fkConstraint)
   suppliersProducts.EnforceConstraints = True
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ForeignKeyConstraint 类
ForeignKeyConstraint 成员
System.Data 命名空间
AcceptRejectRule
Rule


IColumnMapping 接口

IColumnMapping 接口
成员

将数据源列与 DataSet 列关联起来，并由 DataColumnMapping 类实现，这是 .NET Framework 数据提供程序通常使用的方法。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IColumnMapping
public interface IColumnMapping
public interface class IColumnMapping
type IColumnMapping =  interface end

IColumnMapping 接口允许继承类实现 Column Mapping 类，即将数据源列与 DataSet 列关联起来。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。 IColumnMapping 接口允许继承类实现 Column Mapping 类，即将数据源列与 DataSet 列关联起来。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。

应用程序不直接创建 IColumnMapping 接口的实例，而是创建继承 IColumnMapping 的类的实例。

继承 IColumnMapping 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IColumnMapping 接口定义 DataSetColumn 属性。然后，DataColumnMapping 类继承此属性，还定义 GetDataColumnBySchemaAction 方法。 继承 IColumnMapping 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IColumnMapping 接口定义 DataSetColumn 属性。然后，DataColumnMapping 类继承此属性，还定义 GetDataColumnBySchemaAction 方法。 继承 IColumnMapping 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IColumnMapping 接口定义 DataSetColumn 属性。然后，DataColumnMapping 类继承此属性，还定义 GetDataColumnBySchemaAction 方法。

对实现者的说明

在从 IColumnMapping 接口继承时，应实现下列构造函数：

项 | 说明
ColumnMapping() | 初始化 ColumnMapping 类的新实例。
ColumnMapping(string sourceColumn, string dataSetColumn) | 使用具有指定源列名称和 DataSet 列名的源初始化 ColumnMapping 类的新实例。

下面的示例创建派生类 DataColumnMapping 的实例，并将其添加到 DataColumnMappingCollection 集合中。然后，它通知用户已将映射添加到集合中，并显示该映射的父级。 下面的示例创建派生类 DataColumnMapping 的实例，并将其添加到 DataColumnMappingCollection 集合中。然后，它通知用户已将映射添加到集合中，并显示该映射的父级。

Public Sub AddDataColumnMapping()
    ' ...
    ' create columnMappings
    ' ...
    Dim mapping As New DataColumnMapping( _
       "Description", "DataDescription")
    columnMappings.Add(CType(mapping, Object))
    Console.WriteLine("Column {0} added to column mapping collection {1}.", _
       mapping.ToString(), columnMappings.ToString())
End Sub

public void AddDataColumnMapping() {
   // ...
   // create columnMappings
   // ...
   DataColumnMapping mapping =
      new DataColumnMapping("Description","DataDescription");
   columnMappings.Add((Object) mapping);
   Console.WriteLine("Column {0} added to column mapping collection {1}.",
       mapping.ToString(), columnMappings.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMapping 成员
System.Data 命名空间


IColumnMapping 成员

IColumnMapping 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMapping 接口

将数据源列与 DataSet 列关联起来，并由 DataColumnMapping 类实现，这是 .NET Framework 数据提供程序通常使用的方法。

IColumnMapping 类型公开以下成员。

名称 说明
页首

参考

IColumnMapping 接口
System.Data 命名空间


IColumnMapping 属性

IColumnMapping 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMapping 接口

IColumnMapping 类型公开以下成员。

名称 说明
页首

参考

IColumnMapping 接口
System.Data 命名空间


IColumnMapping ..::.DataSetColumn 属性

IColumnMapping
.
.
::
.
DataSetColumn 属性
IColumnMapping 接口

获取或设置 DataSet 中要映射到的列的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property DataSetColumn As String
    Get
    Set
string DataSetColumn { get; set; }
property String^ DataSetColumn {
    String^ get ();
    void set (String^ value);
}
abstract DataSetColumn : string with get, set

属性值

类型： System String
DataSet 中要映射到的列的名称。该名称不区分大小写。 DataSet 中要映射到的列的名称。该名称不区分大小写。

下面的示例创建派生类 DataColumnMapping 的实例，并设置其属性。

Public Sub CreateDataColumnMapping()
    Dim mapping As New DataColumnMapping()
    mapping.SourceColumn = "Description"
    mapping.DataSetColumn = "DataDescription"
End Sub

public void CreateDataColumnMapping()
{
    DataColumnMapping mapping = new DataColumnMapping();
    mapping.SourceColumn = "Description";
    mapping.DataSetColumn = "DataDescription";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMapping 接口
IColumnMapping 成员
System.Data 命名空间


IColumnMapping ..::.SourceColumn 属性

IColumnMapping
.
.
::
.
SourceColumn 属性
IColumnMapping 接口

获取或设置数据源中从其映射的列的名称。该名称区分大小写。 获取或设置数据源中从其映射的列的名称。该名称区分大小写。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property SourceColumn As String
    Get
    Set
string SourceColumn { get; set; }
property String^ SourceColumn {
    String^ get ();
    void set (String^ value);
}
abstract SourceColumn : string with get, set

属性值

类型： System String
数据源中列的区分大小写的名称。

下面的示例创建派生类 DataColumnMapping 的实例，并设置其属性。

Public Sub CreateDataColumnMapping()
    Dim mapping As New DataColumnMapping()
    mapping.SourceColumn = "Description"
    mapping.DataSetColumn = "DataDescription"
End Sub

public void CreateDataColumnMapping()
{
    DataColumnMapping mapping = new DataColumnMapping();
    mapping.SourceColumn = "Description";
    mapping.DataSetColumn = "DataDescription";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMapping 接口
IColumnMapping 成员
System.Data 命名空间


IColumnMappingCollection 接口

IColumnMappingCollection 接口
成员

包含一个 DataColumnMapping 对象的集合，并由 DataColumnMappingCollection 实现，这是由 .NET Framework 数据提供程序通常使用的方法。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IColumnMappingCollection _
    Inherits IList, ICollection, IEnumerable
public interface IColumnMappingCollection : IList,
    ICollection, IEnumerable
public interface class IColumnMappingCollection : IList,
    ICollection, IEnumerable
type IColumnMappingCollection =
    interface
        interface IList
        interface ICollection
        interface IEnumerable
    end

IColumnMappingCollection 接口允许继承类实现 ColumnMapping 集合。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。 IColumnMappingCollection 接口允许继承类实现 ColumnMapping 集合。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。

应用程序不直接创建 IColumnMappingCollection 接口的实例，而是创建继承 IColumnMappingCollection 的类的实例。

继承 IColumnMappingCollection 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IColumnMappingCollection 接口定义 RemoveAt 方法。然后，DataTableMappingCollection 类继承此方法，并定义 RemoveAt 的两个其他重载。 继承 IColumnMappingCollection 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IColumnMappingCollection 接口定义 RemoveAt 方法。然后，DataTableMappingCollection 类继承此方法，并定义 RemoveAt 的两个其他重载。 继承 IColumnMappingCollection 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IColumnMappingCollection 接口定义 RemoveAt 方法。然后，DataTableMappingCollection 类继承此方法，并定义 RemoveAt 的两个其他重载。

对实现者的说明

在从 IColumnMappingCollection 接口继承时，应实现下列构造函数：

项 | 说明
ColumnMappingCollection() | 创建空的 ColumnMappingCollection 类。

下面的示例使用派生类 DataTableMapping 的实例，将多个 DataColumnMapping 对象 Add 到其 ColumnMappings 集合中，然后显示那些映射的源表的列表。此示例假定已经创建了 DataTableMapping。 下面的示例使用派生类 DataTableMapping 的实例，将多个 DataColumnMapping 对象 Add 到其 ColumnMappings 集合中，然后显示那些映射的源表的列表。此示例假定已经创建了 DataTableMapping。

Public Sub ShowColumnMappings()
    ' ...
    ' create tableMapping
    ' ...
    tableMapping.ColumnMappings.Add( _
       "Category Name", "DataCategory")
    tableMapping.ColumnMappings.Add( _
       "Description", "DataDescription")
    tableMapping.ColumnMappings.Add( _
       "Picture", "DataPicture")
    Console.WriteLine("Column Mappings:")
    Dim i As Integer
    For i = 0 To tableMapping.ColumnMappings.Count - 1
        Console.WriteLine("  {0} {1}", i, _
           tableMapping.ColumnMappings(i).ToString())
    Next i
End Sub

public void ShowColumnMappings()
{
    // ...
    // create tableMapping
    // ...
    tableMapping.ColumnMappings.Add("Category Name","DataCategory");
    tableMapping.ColumnMappings.Add("Description","DataDescription");
    tableMapping.ColumnMappings.Add("Picture","DataPicture");
    Console.WriteLine("Column Mappings");
    for(int i=0;i < tableMapping.ColumnMappings.Count;i++)
    {
        Console.WriteLine("  {0} {1}", i,
            tableMapping.ColumnMappings[i].ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMappingCollection 成员
System.Data 命名空间


IColumnMappingCollection 成员

IColumnMappingCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMappingCollection 接口

包含一个 DataColumnMapping 对象的集合，并由 DataColumnMappingCollection 实现，这是由 .NET Framework 数据提供程序通常使用的方法。

IColumnMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

IColumnMappingCollection 接口
System.Data 命名空间


IColumnMappingCollection 方法

IColumnMappingCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMappingCollection 接口

IColumnMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IColumnMappingCollection 接口
System.Data 命名空间


IColumnMappingCollection ..::.Add 方法

IColumnMappingCollection
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMappingCollection 接口

名称 说明
页首

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
System.Data 命名空间


IColumnMappingCollection ..::.Add 方法 (String, String)

IColumnMappingCollection
.
.
::
.
Add 方法 (String, String)
IColumnMappingCollection 接口

使用源列和 DataSet 列名，将 ColumnMapping 对象添加到 ColumnMapping 集合中。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function Add ( _
    sourceColumnName As String, _
    dataSetColumnName As String _
) As IColumnMapping
IColumnMapping Add(
    string sourceColumnName,
    string dataSetColumnName
)
IColumnMapping^ Add(
    String^ sourceColumnName,
    String^ dataSetColumnName
)
abstract Add :
        sourceColumnName:string *
        dataSetColumnName:string -> IColumnMapping

参数

sourceColumnName
类型： System String
源列的区分大小写的名称。
dataSetColumnName
类型： System String
DataSet 列的名称。

返回值

类型： System.Data IColumnMapping
已添加到集合中的 ColumnMapping 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
Add 重载
System.Data 命名空间


IColumnMappingCollection ..::.Contains 方法

IColumnMappingCollection
.
.
::
.
Contains 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMappingCollection 接口

名称 说明
页首

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
System.Data 命名空间


IColumnMappingCollection ..::.Contains 方法 (String)

IColumnMappingCollection
.
.
::
.
Contains 方法 (String)
IColumnMappingCollection 接口

获取一个值，该值指示 DataColumnMappingCollection 是否包含具有指定源列名称的 DataColumnMapping 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function Contains ( _
    sourceColumnName As String _
) As Boolean
bool Contains(
    string sourceColumnName
)
bool Contains(
    String^ sourceColumnName
)
abstract Contains :
        sourceColumnName:string -> bool

参数

sourceColumnName
类型： System String
源列的区分大小写的名称。

返回值

类型： System Boolean
如果具有指定源列名称的 DataColumnMapping 对象存在，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
Contains 重载
System.Data 命名空间


IColumnMappingCollection ..::.GetByDataSetColumn 方法

IColumnMappingCollection
.
.
::
.
GetByDataSetColumn 方法
IColumnMappingCollection 接口

获取具有指定 DataSet 列名的 ColumnMapping 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetByDataSetColumn ( _
    dataSetColumnName As String _
) As IColumnMapping
IColumnMapping GetByDataSetColumn(
    string dataSetColumnName
)
IColumnMapping^ GetByDataSetColumn(
    String^ dataSetColumnName
)
abstract GetByDataSetColumn :
        dataSetColumnName:string -> IColumnMapping

参数

dataSetColumnName
类型： System String
集合中 DataSet 列的名称。

返回值

类型： System.Data IColumnMapping
具有指定 DataSet 列名的 ColumnMapping 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
System.Data 命名空间


IColumnMappingCollection ..::.IndexOf 方法

IColumnMappingCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMappingCollection 接口

名称 说明
页首

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
System.Data 命名空间


IColumnMappingCollection ..::.IndexOf 方法 (String)

IColumnMappingCollection
.
.
::
.
IndexOf 方法 (String)
IColumnMappingCollection 接口

获取具有指定源列名称的 DataColumnMapping 对象的位置。该名称区分大小写。 获取具有指定源列名称的 DataColumnMapping 对象的位置。该名称区分大小写。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function IndexOf ( _
    sourceColumnName As String _
) As Integer
int IndexOf(
    string sourceColumnName
)
int IndexOf(
    String^ sourceColumnName
)
abstract IndexOf :
        sourceColumnName:string -> int

参数

sourceColumnName
类型： System String
源列的区分大小写的名称。

返回值

类型： System Int32
具有指定源列名称的 DataColumnMapping 对象的从零开始的位置。

下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的派生类 DataColumnMapping 的实例。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的派生类 DataColumnMapping 的实例。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的派生类 DataColumnMapping 的实例。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的派生类 DataColumnMapping 的实例。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。

Public Sub FindDataColumnMapping()
    ' ...
    ' create columnMappings
    ' ...
    If Not columnMappings.Contains("Description") Then
        Console.WriteLine("Error: no such table in collection.")
    Else
       Console.WriteLine("Name: {0}", _
           columnMappings("Description").ToString())
       Console.WriteLine("Index: {0}", _
           columnMappings.IndexOf("Description").ToString())
    End If
End Sub

public void FindDataColumnMapping()
{
    // ...
    // create columnMappings
    // ...
    if (!columnMappings.Contains("Description"))
        Console.WriteLine("Error: no such table in collection.");
    else
    {
        Console.WriteLine("Name {0}",
            columnMappings["Description"].ToString());
        Console.WriteLine("Index: {0}",
            columnMappings.IndexOf("Description").ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
IndexOf 重载
System.Data 命名空间


IColumnMappingCollection ..::.RemoveAt 方法

IColumnMappingCollection
.
.
::
.
RemoveAt 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMappingCollection 接口

名称 说明
页首

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
System.Data 命名空间


IColumnMappingCollection ..::.RemoveAt 方法 (String)

IColumnMappingCollection
.
.
::
.
RemoveAt 方法 (String)
IColumnMappingCollection 接口

从集合中移除带有指定的 SourceColumn 名称的 IColumnMapping 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub RemoveAt ( _
    sourceColumnName As String _
)
void RemoveAt(
    string sourceColumnName
)
void RemoveAt(
    String^ sourceColumnName
)
abstract RemoveAt :
        sourceColumnName:string -> unit

参数

sourceColumnName
类型： System String
区分大小写的 SourceColumn 名称。
异常 | 条件
IndexOutOfRangeException | 带有指定的 SourceColumn 名称的 DataColumnMapping 对象不存在

下面的示例在 DataColumnMappingCollection 集合中搜索具有给定 SourceColumn 名称的派生类 DataColumnMapping 的实例。如果 DataColumnMapping 存在，则移除该映射。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定 SourceColumn 名称的派生类 DataColumnMapping 的实例。如果 DataColumnMapping 存在，则移除该映射。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定 SourceColumn 名称的派生类 DataColumnMapping 的实例。如果 DataColumnMapping 存在，则移除该映射。此示例假定已经创建了 DataColumnMappingCollection 集合。

Public Sub RemoveDataColumnMapping()
    ' ...
    ' create columnMappings
    ' ...
    If columnMappings.Contains("Picture") Then
        columnMappings.RemoveAt("Picture")
    End If
End Sub

public void RemoveDataColumnMapping()
{
    // ...
    // create columnMappings
    // ...
    if (columnMappings.Contains("Picture"))
        columnMappings.RemoveAt("Picture");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
RemoveAt 重载
System.Data 命名空间


IColumnMappingCollection 属性

IColumnMappingCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMappingCollection 接口

IColumnMappingCollection 类型公开以下成员。

名称 说明
页首

参考

IColumnMappingCollection 接口
System.Data 命名空间


IColumnMappingCollection ..::.Item 属性

IColumnMappingCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IColumnMappingCollection 接口

名称 说明
页首

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
System.Data 命名空间


IColumnMappingCollection ..::.Item 属性 (String)

IColumnMappingCollection
.
.
::
.
Item 属性 (String)
IColumnMappingCollection 接口

获取或设置具有指定 SourceColumn 名称的 IColumnMapping 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Item ( _
    index As String _
) As Object
    Get
    Set
Object this[
    string index
] { get; set; }
property Object^ Item[String^ index] {
    Object^ get (String^ index);
    void set (String^ index, Object^ value);
}
abstract Item : Object with get, set

参数

index
类型： System String
要查找的 IColumnMapping 对象的 SourceColumn 名称。

属性值

类型： System Object
具有指定 SourceColumn 名称的 IColumnMapping 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IColumnMappingCollection 接口
IColumnMappingCollection 成员
Item 重载
System.Data 命名空间


IDataAdapter 接口

IDataAdapter 接口
成员

允许对象实现 DataAdapter，并且表示一组用于填充和更新 DataSet 及数据源的方法以及与映射操作有关的属性。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDataAdapter
public interface IDataAdapter
public interface class IDataAdapter
type IDataAdapter =  interface end

IDataAdapter 接口允许继承类实现 DataAdapter 类，该类表示数据源与 DataSet 之间的桥接器。有关 DataAdapter 类的更多信息，请参见从 DataAdapter 填充数据集 (ADO.NET)。 IDataAdapter 接口允许继承类实现 DataAdapter 类，该类表示数据源与 DataSet 之间的桥接器。有关 DataAdapter 类的更多信息，请参见从 DataAdapter 填充数据集 (ADO.NET)。

应用程序不直接创建 IDbDataAdapter 接口的实例，而是实现继承 IDbDataAdapter 的类的实例。

继承 IDataAdapter 的类必须实现继承的成员，且通常会定义其他成员来添加特定于提供程序的功能。例如，IDataAdapter 接口定义了将 DataSet 作为参数的 Fill 方法。然后，OleDbDataAdapter 类继承 Fill 方法，并且还定义了 Fill 方法的其他两个重载，该方法将 ADO 记录集对象作为参数。 继承 IDataAdapter 的类必须实现继承的成员，且通常会定义其他成员来添加特定于提供程序的功能。例如，IDataAdapter 接口定义了将 DataSet 作为参数的 Fill 方法。然后，OleDbDataAdapter 类继承 Fill 方法，并且还定义了 Fill 方法的其他两个重载，该方法将 ADO 记录集对象作为参数。 继承 IDataAdapter 的类必须实现继承的成员，且通常会定义其他成员来添加特定于提供程序的功能。例如，IDataAdapter 接口定义了将 DataSet 作为参数的 Fill 方法。然后，OleDbDataAdapter 类继承 Fill 方法，并且还定义了 Fill 方法的其他两个重载，该方法将 ADO 记录集对象作为参数。

对实现者的说明

为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv DataAdapter 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlDataAdapter 类的前缀。 为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv DataAdapter 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlDataAdapter 类的前缀。

在从 IDataAdapter 接口继承时，应实现下列构造函数：

项 | 说明
PrvDataAdapter() | 初始化 PrvDataAdapter 类的新实例。
PrvDataAdapter(PrvCommand selectCommand) | 使用指定的 SQL SELECT 语句初始化 PrvDataAdapter 类的新实例。
PrvDataAdapter(string selectCommandText, string selectConnectionString) | 使用 SQL SELECT 语句和连接字符串初始化 PrvDataAdapter 类的新实例。
PrvDataAdapter(string selectCommandText, PrvConnection selectConnection) | 使用 SQL SELECT 语句和 PrvConnection 对象初始化 PrvDataAdapter 类的新实例。

下面的示例使用派生类 SqlCommand、SqlDataAdapter 和 SqlConnection 来从数据库中选择记录。然后返回已填充的 DataSet。为此，向该方法传递了一个已初始化的 DataSet、一个连接字符串和一个查询字符串，后者是一个 Transact-SQL SELECT 语句。 下面的示例使用派生类 SqlCommand、SqlDataAdapter 和 SqlConnection 来从数据库中选择记录。然后返回已填充的 DataSet。为此，向该方法传递了一个已初始化的 DataSet、一个连接字符串和一个查询字符串，后者是一个 Transact-SQL SELECT 语句。 下面的示例使用派生类 SqlCommand、SqlDataAdapter 和 SqlConnection 来从数据库中选择记录。然后返回已填充的 DataSet。为此，向该方法传递了一个已初始化的 DataSet、一个连接字符串和一个查询字符串，后者是一个 Transact-SQL SELECT 语句。

Public Function SelectRows( _
    ByVal dataSet As DataSet, ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New SqlConnection(connectionString)
        Dim adapter As New SqlDataAdapter()
        adapter.SelectCommand = New SqlCommand( _
            queryString, connection)
        adapter.Fill(dataSet)
        Return dataSet
    End Using
End Function

private static DataSet SelectRows(DataSet dataset,
    string connectionString,string queryString)
{
    using (SqlConnection connection =
        new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(
            queryString, connection);
        adapter.Fill(dataset);
        return dataset;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataAdapter 成员
System.Data 命名空间


IDataAdapter 成员

IDataAdapter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataAdapter 接口

允许对象实现 DataAdapter，并且表示一组用于填充和更新 DataSet 及数据源的方法以及与映射操作有关的属性。

IDataAdapter 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDataAdapter 接口
System.Data 命名空间


IDataAdapter 方法

IDataAdapter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataAdapter 接口

IDataAdapter 类型公开以下成员。

名称 说明
页首

参考

IDataAdapter 接口
System.Data 命名空间


IDataAdapter ..::.Fill 方法

IDataAdapter
.
.
::
.
Fill 方法
IDataAdapter 接口

添加或更新 DataSet 中的行以匹配使用 DataSet 名称的数据源中的行，并创建一个名为“Table”的 DataTable。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function Fill ( _
    dataSet As DataSet _
) As Integer
int Fill(
    DataSet dataSet
)
int Fill(
    DataSet^ dataSet
)
abstract Fill :
        dataSet:DataSet -> int

参数

dataSet
类型： System.Data DataSet
要用记录和架构（如果必要）填充的 DataSet。

返回值

类型： System Int32
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

Fill 使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。

如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。

如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。

当用于填充 DataSet 的 SELECT 语句（例如批处理 SQL 语句）返回多个结果时，如果其中一个结果包含错误，则将跳过所有后面的结果并且不会将其添加到 DataSet 中。

您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，.NET Framework 数据提供程序的 Fill 和 FillSchema 的实现只在架构信息中检索第一项结果。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataAdapter 接口
IDataAdapter 成员
System.Data 命名空间
FillSchema


IDataAdapter ..::.FillSchema 方法

IDataAdapter
.
.
::
.
FillSchema 方法
IDataAdapter 接口

将名为“Table”的 DataTable 添加到指定的 DataSet 中，并根据指定的 SchemaType 配置架构以匹配数据源中的架构。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function FillSchema ( _
    dataSet As DataSet, _
    schemaType As SchemaType _
) As DataTable()
DataTable[] FillSchema(
    DataSet dataSet,
    SchemaType schemaType
)
array<DataTable^>^ FillSchema(
    DataSet^ dataSet,
    SchemaType schemaType
)
abstract FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType -> DataTable[]

参数

dataSet
类型： System.Data DataSet
要用数据源中的架构填充的 DataSet。
schemaType
类型： System.Data SchemaType
SchemaType 值之一。

返回值

类型：
array<
System.Data DataTable
>
[]
()
[]

DataTable 对象的数组，这些对象包含从数据源返回的架构信息。

FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。

FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性： FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性：

  • AllowDBNull

  • AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。 AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。

  • MaxLength

  • ReadOnly

  • Unique

FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性：

  • 如果 SelectCommand 返回一个或多个主键列，则它们被用作 DataTable 的主键列。

  • 如果未返回任何主键列，但返回了唯一列，则当所有唯一列都不可以为 null 时，会将唯一列用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。 如果未返回任何主键列，但返回了唯一列，则当所有唯一列都不可以为 null 时，会将唯一列用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。

  • 如果既返回了主键列又返回了唯一列，则主键列用作 DataTable 的主键列。

请注意，将按照上述规则将主键和唯一约束添加到 ConstraintCollection 中，但不添加其他约束类型。

如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。

如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，将按“Column1”、“Column2”这样的模式在 DataSet 中放置这些列。向 DataSet 中添加多个结果集时，每个结果集均位于单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。在应用程序中使用列名和表名时应小心，确保不要与这些命名模式发生冲突。

FillSchema 没有返回任何行。使用 Fill 方法将行添加到 DataTable 中。 FillSchema 没有返回任何行。使用 Fill 方法将行添加到 DataTable 中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataAdapter 接口
IDataAdapter 成员
System.Data 命名空间
Fill


IDataAdapter ..::.GetFillParameters 方法

IDataAdapter
.
.
::
.
GetFillParameters 方法
IDataAdapter 接口

获取当执行 SQL SELECT 语句时由用户设置的参数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetFillParameters As IDataParameter()
IDataParameter[] GetFillParameters()
array<IDataParameter^>^ GetFillParameters()
abstract GetFillParameters : unit -> IDataParameter[]

返回值

类型：
array<
System.Data IDataParameter
>
[]
()
[]

IDataParameter 对象的数组，这些对象包含由用户设置的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataAdapter 接口
IDataAdapter 成员
System.Data 命名空间


IDataAdapter ..::.Update 方法

IDataAdapter
.
.
::
.
Update 方法
IDataAdapter 接口

从名为“Table”的 DataTable 为指定的 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function Update ( _
    dataSet As DataSet _
) As Integer
int Update(
    DataSet dataSet
)
int Update(
    DataSet^ dataSet
)
abstract Update :
        dataSet:DataSet -> int

参数

dataSet
类型： System.Data DataSet
用于更新数据源的 DataSet。

返回值

类型： System Int32
DataSet 中成功更新的行数。
异常 | 条件
DBConcurrencyException | 尝试执行 INSERT、UPDATE 或 DELETE 语句，但没有记录受到影响。

当应用程序调用 Update 方法时，IDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行一个 DELETE 语句。 当应用程序调用 Update 方法时，IDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行一个 DELETE 语句。

应注意，没有按批处理过程执行这些语句；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，没有按批处理过程执行这些语句；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，没有按批处理过程执行这些语句；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。

如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成其他任何未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成其他任何未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成其他任何未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成其他任何未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成其他任何未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。

Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 会使用 UpdatedRowSource 属性的值更新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 会使用 UpdatedRowSource 属性的值更新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 会使用 UpdatedRowSource 属性的值更新该行。忽略返回的任何其他行。

在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。 在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。

当使用 Update 时，执行的顺序如下：

  1. 将 DataRow 中的值移至参数值。

  2. 引发 OnRowUpdating 事件。

  3. 执行命令。

  4. 如果该命令设置为 FirstReturnedRecord，则会将返回的第一个结果放置在 DataRow 中。

  5. 如果存在输出参数，它们将被放在 DataRow 中。

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges。

与 IDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。参数通过 .NET 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性映射到当前行。SourceColumn 引用 DataTable 列，IDataAdapter 引用该列来获取当前行的参数值。 与 IDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。参数通过 .NET 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性映射到当前行。SourceColumn 引用 DataTable 列，IDataAdapter 引用该列来获取当前行的参数值。 与 IDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。参数通过 .NET 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性映射到当前行。SourceColumn 引用 DataTable 列，IDataAdapter 引用该列来获取当前行的参数值。

SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。 SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。

枚举值 | 采取的操作
MissingMappingAction.Passthrough | 如果不存在任何映射，则使用 DataSet 中的源列名和表名。
MissingMappingAction.Ignore | 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于错误所致。 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于错误所致。
MissingMappingAction.Error | 生成 SystemException。

SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。 SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。

.NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。 .NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。

说明 说明

如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。

下面的示例使用派生类 OleDbDataAdapter 来对数据源进行 Update。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet。 下面的示例使用派生类 OleDbDataAdapter 来对数据源进行 Update。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet。

Public Function CreateCommandAndUpdate( _
    ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Dim dataSet As DataSet = New DataSet

    Using connection As New OleDbConnection(connectionString)
        connection.Open()
        Dim adapter As New OleDbDataAdapter()

        adapter.SelectCommand = New OleDbCommand( _
            queryString, connection)

        Dim builder As OleDbCommandBuilder = _
            New OleDbCommandBuilder(adapter)

        adapter.Fill(dataSet)

        ' Code to modify the data in the DataSet here.

        ' Without the OleDbCommandBuilder this line would fail.
        builder.GetUpdateCommand()
        adapter.Update(dataSet)
    End Using
    Return dataSet
End Function

static private DataSet CreateCommandAndUpdate(
    string connectionString,
    string queryString)
{
    DataSet dataSet = new DataSet();

    using (OleDbConnection connection =
               new OleDbConnection(connectionString))
    {
        connection.Open();
        OleDbDataAdapter adapter =
            new OleDbDataAdapter();
        adapter.SelectCommand =
            new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder =
            new OleDbCommandBuilder(adapter);

        adapter.Fill(dataSet);

        // Code to modify data in the DataSet here.

        // Without the OleDbCommandBuilder, this line would fail.
        adapter.UpdateCommand = builder.GetUpdateCommand();
        adapter.Update(dataSet);
    }
    return dataSet;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataAdapter 接口
IDataAdapter 成员
System.Data 命名空间


IDataAdapter 属性

IDataAdapter 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataAdapter 接口

IDataAdapter 类型公开以下成员。

名称 说明
页首

参考

IDataAdapter 接口
System.Data 命名空间


IDataAdapter ..::.MissingMappingAction 属性

IDataAdapter
.
.
::
.
MissingMappingAction 属性
IDataAdapter 接口

指示或指定是否将未映射的源表或列与其源名一起传递以便筛选或引发错误。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property MissingMappingAction As MissingMappingAction
    Get
    Set
MissingMappingAction MissingMappingAction { get; set; }
property MissingMappingAction MissingMappingAction {
    MissingMappingAction get ();
    void set (MissingMappingAction value);
}
abstract MissingMappingAction : MissingMappingAction with get, set

属性值

类型： System.Data MissingMappingAction
MissingMappingAction 值之一。默认为 Passthrough。 MissingMappingAction 值之一。默认为 Passthrough。
异常 | 条件
ArgumentException | 设置的值不是 MissingMappingAction 值之一。

TableMappings 属性提供返回记录和 DataSet 之间的主映射。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataAdapter 接口
IDataAdapter 成员
System.Data 命名空间
MissingSchemaAction


IDataAdapter ..::.MissingSchemaAction 属性

IDataAdapter
.
.
::
.
MissingSchemaAction 属性
IDataAdapter 接口

指示或指定是否将丢失的源表、列及其关系添加到数据集架构中，是否忽略它们或者它们是否会引发错误。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property MissingSchemaAction As MissingSchemaAction
    Get
    Set
MissingSchemaAction MissingSchemaAction { get; set; }
property MissingSchemaAction MissingSchemaAction {
    MissingSchemaAction get ();
    void set (MissingSchemaAction value);
}
abstract MissingSchemaAction : MissingSchemaAction with get, set

属性值

类型： System.Data MissingSchemaAction
MissingSchemaAction 值之一。默认为 Add。 MissingSchemaAction 值之一。默认为 Add。
异常 | 条件
ArgumentException | 设置的值不是 MissingSchemaAction 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataAdapter 接口
IDataAdapter 成员
System.Data 命名空间
MissingMappingAction


IDataAdapter ..::.TableMappings 属性

IDataAdapter
.
.
::
.
TableMappings 属性
IDataAdapter 接口

指示如何将源表映射到数据集表。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property TableMappings As ITableMappingCollection
    Get
ITableMappingCollection TableMappings { get; }
property ITableMappingCollection^ TableMappings {
    ITableMappingCollection^ get ();
}
abstract TableMappings : ITableMappingCollection

属性值

类型： System.Data ITableMappingCollection
一个集合，它提供返回记录和 DataSet 之间的主映射。默认值是一个空集合。 一个集合，它提供返回记录和 DataSet 之间的主映射。默认值是一个空集合。

IDataAdapter 仅将映射用于名为“Table”的源表。所有返回数据的 SELECT、INSERT、DELETE 和 UPDATE 语句必须使用一致的列命名完成此操作。记录中返回的列名必须是唯一的，否则具有相同名称的列就会覆盖以前的数据。在 Update 上，只有映射到名为“Table”的源表上的表调节其更改。 IDataAdapter 仅将映射用于名为“Table”的源表。所有返回数据的 SELECT、INSERT、DELETE 和 UPDATE 语句必须使用一致的列命名完成此操作。记录中返回的列名必须是唯一的，否则具有相同名称的列就会覆盖以前的数据。在 Update 上，只有映射到名为“Table”的源表上的表调节其更改。 IDataAdapter 仅将映射用于名为“Table”的源表。所有返回数据的 SELECT、INSERT、DELETE 和 UPDATE 语句必须使用一致的列命名完成此操作。记录中返回的列名必须是唯一的，否则具有相同名称的列就会覆盖以前的数据。在 Update 上，只有映射到名为“Table”的源表上的表调节其更改。 IDataAdapter 仅将映射用于名为“Table”的源表。所有返回数据的 SELECT、INSERT、DELETE 和 UPDATE 语句必须使用一致的列命名完成此操作。记录中返回的列名必须是唯一的，否则具有相同名称的列就会覆盖以前的数据。在 Update 上，只有映射到名为“Table”的源表上的表调节其更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataAdapter 接口
IDataAdapter 成员
System.Data 命名空间


IDataParameter 接口

IDataParameter 接口
成员

表示 Command 对象的参数,也可以表示该对象到 DataSet 列的映射；并且是由访问数据源的 .NET Framework 数据提供程序实现的。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDataParameter
public interface IDataParameter
public interface class IDataParameter
type IDataParameter =  interface end

IDataParameter 接口允许继承类实现 Parameter 类，表示 Command 对象的参数。有关 Parameter 类的更多信息，请参见配置参数和参数数据类型 (ADO.NET)。 IDataParameter 接口允许继承类实现 Parameter 类，表示 Command 对象的参数。有关 Parameter 类的更多信息，请参见配置参数和参数数据类型 (ADO.NET)。

应用程序不直接创建 IDataParameter 接口的实例，而是创建继承 IDataParameter 的类的实例。

继承 IDataParameter 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDataParameter 接口定义 DbType 属性。然后，OleDbParameter 类继承此属性，还定义 OleDbType 属性。 继承 IDataParameter 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDataParameter 接口定义 DbType 属性。然后，OleDbParameter 类继承此属性，还定义 OleDbType 属性。 继承 IDataParameter 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDataParameter 接口定义 DbType 属性。然后，OleDbParameter 类继承此属性，还定义 OleDbType 属性。

对实现者的说明

为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv Parameter 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlCommand 类的前缀。 为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv Parameter 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlCommand 类的前缀。

在从 IDataParameter 接口继承时，应实现下列构造函数：

项 | 说明
PrvParameter() | 初始化 Parameter 类的新实例。
PrvParameter(string name, PrvDbType dataType) | 使用参数名和数据类型初始化 Parameter 类的新实例。
PrvParameter(string name, object value) | 使用参数名和作为 Parameter 值的对象初始化 Parameter 类的新实例。
PrvParameter(string name, PrvDbType dataType, int size) | 使用参数名、数据类型和宽度初始化 Parameter 类的新实例。
PrvParameter(string name, PrvDbType dataType, int size, string srcColumn) | 使用参数名、数据类型、宽度和源列名称初始化 DbParameter 类的新实例。
PrvParameter(string parameterName, PrvDbType dbType, int size, ParameterDirection direction, Boolean isNullable, Byte precision, Byte scale, string srcColumn, DataRowVersion srcVersion, object value) | 使用参数名称、数据类型、宽度、源列名称、参数方向、数值精度和其他属性初始化 OleDbParameter 类的新实例。

下面的示例通过 SqlDataAdapter 内的 SqlParameterCollection 集合，创建派生类 SqlParameter 的多个实例。这些参数用于从数据源中选择数据并将数据放在 DataSet 中。此示例假定已经用适当的架构、命令和连接创建了 DataSet 和 SqlDataAdapter。 下面的示例通过 SqlDataAdapter 内的 SqlParameterCollection 集合，创建派生类 SqlParameter 的多个实例。这些参数用于从数据源中选择数据并将数据放在 DataSet 中。此示例假定已经用适当的架构、命令和连接创建了 DataSet 和 SqlDataAdapter。 下面的示例通过 SqlDataAdapter 内的 SqlParameterCollection 集合，创建派生类 SqlParameter 的多个实例。这些参数用于从数据源中选择数据并将数据放在 DataSet 中。此示例假定已经用适当的架构、命令和连接创建了 DataSet 和 SqlDataAdapter。

Public Sub AddSqlParameters()
    ' ...
    ' create categoriesDataSet and categoriesAdapter
    ' ...
    categoriesAdapter.SelectCommand.Parameters.Add( _
        "@CategoryName", SqlDbType.VarChar, 80).Value = "toasters"
    categoriesAdapter.SelectCommand.Parameters.Add( _
        "@SerialNum", SqlDbType.Int).Value = 239

    categoriesAdapter.Fill(categoriesDataSet)
End Sub

public void AddSqlParameters()
{
// ...
// create categoriesDataSet and categoriesAdapter
// ...

  categoriesAdapter.SelectCommand.Parameters.Add(
    "@CategoryName", SqlDbType.VarChar, 80).Value = "toasters";
  categoriesAdapter.SelectCommand.Parameters.Add(
    "@SerialNum", SqlDbType.Int).Value = 239;
  categoriesAdapter.Fill(categoriesDataSet);

}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameter 成员
System.Data 命名空间


IDataParameter 成员

IDataParameter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataParameter 接口

表示 Command 对象的参数,也可以表示该对象到 DataSet 列的映射；并且是由访问数据源的 .NET Framework 数据提供程序实现的。

IDataParameter 类型公开以下成员。

名称 说明
页首

参考

IDataParameter 接口
System.Data 命名空间


IDataParameter 属性

IDataParameter 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataParameter 接口

IDataParameter 类型公开以下成员。

名称 说明
页首

参考

IDataParameter 接口
System.Data 命名空间


IDataParameter ..::.DbType 属性

IDataParameter
.
.
::
.
DbType 属性
IDataParameter 接口

获取或设置参数的 DbType。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property DbType As DbType
    Get
    Set
DbType DbType { get; set; }
property DbType DbType {
    DbType get ();
    void set (DbType value);
}
abstract DbType : DbType with get, set

属性值

类型： System.Data DbType
DbType 值之一。默认为 String。 DbType 值之一。默认为 String。
异常 | 条件
ArgumentOutOfRangeException | 该属性未设置为有效的 DbType。

PrvDbType（其中 Prv 表示提供程序特定的前缀）和 DbType 是链接的。因此，设置 DbType 会将 PrvDbType 更改为支持的 PrvDbType。 PrvDbType（其中 Prv 表示提供程序特定的前缀）和 DbType 是链接的。因此，设置 DbType 会将 PrvDbType 更改为支持的 PrvDbType。

有关支持的数据类型的列表，请参见相应的 .NET Framework 数据提供程序 PrvDbType 成员。有关更多信息，请参见 DataAdapter 参数 (ADO.NET)。 有关支持的数据类型的列表，请参见相应的 .NET Framework 数据提供程序 PrvDbType 成员。有关更多信息，请参见 DataAdapter 参数 (ADO.NET)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameter 接口
IDataParameter 成员
System.Data 命名空间


IDataParameter ..::.Direction 属性

IDataParameter
.
.
::
.
Direction 属性
IDataParameter 接口

获取或设置一个值，该值指示参数是只可输入、只可输出、双向还是存储过程返回值参数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Direction As ParameterDirection
    Get
    Set
ParameterDirection Direction { get; set; }
property ParameterDirection Direction {
    ParameterDirection get ();
    void set (ParameterDirection value);
}
abstract Direction : ParameterDirection with get, set

属性值

类型： System.Data ParameterDirection
ParameterDirection 值之一。默认为 Input。 ParameterDirection 值之一。默认为 Input。
异常 | 条件
ArgumentException | 该属性未设置为有效的 ParameterDirection 值之一。

如果 ParameterDirection 是输出，而执行的关联 SqlCommand 不返回值，则 IDataParameter 包含 null 值。

当读取最后一个结果集的最后一行后，将更新 Output、InputOut 和 ReturnValue 参数。

下面的示例创建实现类 SqlParameter 的实例，并设置它的某些属性。

Public Sub CreateSqlParameter()
    Dim parameter As New SqlParameter( _
        "@Description", SqlDbType.VarChar)
    parameter.Direction = ParameterDirection.Output
End Sub

public void CreateSqlParameter()
{
    SqlParameter parameter = new SqlParameter(
        "@Description", SqlDbType.VarChar);
    parameter.Direction = ParameterDirection.Output;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameter 接口
IDataParameter 成员
System.Data 命名空间


IDataParameter ..::.IsNullable 属性

IDataParameter
.
.
::
.
IsNullable 属性
IDataParameter 接口

获取一个值，该值指示参数是否接受 null 值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property IsNullable As Boolean
    Get
bool IsNullable { get; }
property bool IsNullable {
    bool get ();
}
abstract IsNullable : bool

属性值

类型： System Boolean
如果接受 null 值，则为 true；否则为 false。默认为 false。 如果接受 null 值，则为 true；否则为 false。默认为 false。

使用 DBNull 类来进行处理 null 值。

下面的示例创建实现类 SqlParameter 的实例，并设置它的某些属性。

Private Sub AddSqlParameter(ByVal command As SqlCommand, _
    ByVal paramValue As String)

    Dim parameter As New SqlParameter( _
        "@Description", SqlDbType.NVarChar, 16)
    parameter.Value = paramValue
    parameter.IsNullable = True
    command.Parameters.Add(parameter)
End Sub

private static void AddSqlParameter(SqlCommand command,
    string paramValue)
{
    SqlParameter parameter = new SqlParameter(
        "@Description", SqlDbType.VarChar);
    parameter.Value = paramValue;
    parameter.IsNullable = true;
    command.Parameters.Add(parameter);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameter 接口
IDataParameter 成员
System.Data 命名空间


IDataParameter ..::.ParameterName 属性

IDataParameter
.
.
::
.
ParameterName 属性
IDataParameter 接口

获取或设置 IDataParameter 的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property ParameterName As String
    Get
    Set
string ParameterName { get; set; }
property String^ ParameterName {
    String^ get ();
    void set (String^ value);
}
abstract ParameterName : string with get, set

属性值

类型： System String
IDataParameter 的名称。默认为空字符串。 IDataParameter 的名称。默认为空字符串。

ParameterName 以“@参数名”格式来指定。在执行依赖于参数的命令之前，必须设置 ParameterName。 ParameterName 以“@参数名”格式来指定。在执行依赖于参数的命令之前，必须设置 ParameterName。

下面的示例创建实现类 SqlParameter 的实例，并设置它的某些属性。

Private Sub AddSqlParameter(ByVal command As SqlCommand)

    Dim parameter As New SqlParameter()
    With parameter
        .ParameterName = "@Description"
        .IsNullable = True
        .DbType = DbType.String
        .Direction = ParameterDirection.Output
    End With

    command.Parameters.Add(parameter)
End Sub

private static void AddSqlParameter(SqlCommand command)
{
    SqlParameter parameter = new SqlParameter();
    parameter.ParameterName = "@Description";
    parameter.IsNullable = true;
    parameter.DbType = DbType.String;
    parameter.Direction = ParameterDirection.Output;

    command.Parameters.Add(parameter);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameter 接口
IDataParameter 成员
System.Data 命名空间


IDataParameter ..::.SourceColumn 属性

IDataParameter
.
.
::
.
SourceColumn 属性
IDataParameter 接口

获取或设置源列的名称，该源列映射到 DataSet 并用于加载或返回 Value。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property SourceColumn As String
    Get
    Set
string SourceColumn { get; set; }
property String^ SourceColumn {
    String^ get ();
    void set (String^ value);
}
abstract SourceColumn : string with get, set

属性值

类型： System String
映射到 DataSet 的源列的名称。默认为空字符串。 映射到 DataSet 的源列的名称。默认为空字符串。

根据 Direction 属性的值，IDataParameter 的值与 DataTable 之间的链接可能是双向的。

下面的示例创建实现类 SqlParameter 的实例，并设置它的某些属性。

Public Sub CreateSqlParameter()
    Dim parameter As New SqlParameter( _
        "@Description", SqlDbType.VarChar)
    parameter.IsNullable = True
    parameter.Direction = ParameterDirection.Output
    parameter.SourceColumn = "Description"
End Sub

public void CreateSqlParameter()
{
    SqlParameter parameter = new SqlParameter(
        "@Description", SqlDbType.VarChar);
    parameter.IsNullable = true;
    parameter.Direction = ParameterDirection.Output;
    parameter.SourceColumn = "Description";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameter 接口
IDataParameter 成员
System.Data 命名空间


IDataParameter ..::.SourceVersion 属性

IDataParameter
.
.
::
.
SourceVersion 属性
IDataParameter 接口

获取或设置在加载 Value 时使用的 DataRowVersion。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property SourceVersion As DataRowVersion
    Get
    Set
DataRowVersion SourceVersion { get; set; }
property DataRowVersion SourceVersion {
    DataRowVersion get ();
    void set (DataRowVersion value);
}
abstract SourceVersion : DataRowVersion with get, set

属性值

类型： System.Data DataRowVersion
DataRowVersion 值之一。默认为 Current。 DataRowVersion 值之一。默认为 Current。
异常 | 条件
ArgumentException | 该属性未设置为 DataRowVersion 值之一。

在 Update 过程中，UpdateCommand 使用此属性来确定参数值使用的是原始值还是当前值。它允许更新主键。InsertCommand 和 DeleteCommand 忽略此属性。该属性设置为 Item 属性使用的 DataRow 的版本，或设置为 DataRow 对象的 GetChildRows 方法的版本。 在 Update 过程中，UpdateCommand 使用此属性来确定参数值使用的是原始值还是当前值。它允许更新主键。InsertCommand 和 DeleteCommand 忽略此属性。该属性设置为 Item 属性使用的 DataRow 的版本，或设置为 DataRow 对象的 GetChildRows 方法的版本。 在 Update 过程中，UpdateCommand 使用此属性来确定参数值使用的是原始值还是当前值。它允许更新主键。InsertCommand 和 DeleteCommand 忽略此属性。该属性设置为 Item 属性使用的 DataRow 的版本，或设置为 DataRow 对象的 GetChildRows 方法的版本。 在 Update 过程中，UpdateCommand 使用此属性来确定参数值使用的是原始值还是当前值。它允许更新主键。InsertCommand 和 DeleteCommand 忽略此属性。该属性设置为 Item 属性使用的 DataRow 的版本，或设置为 DataRow 对象的 GetChildRows 方法的版本。

下面的示例创建实现类 SqlParameter 的实例，并设置它的某些属性。

Public Sub CreateSqlParameter()
    Dim parameter As New SqlParameter( _
        "@Description", SqlDbType.VarChar)
    parameter.IsNullable = True
    parameter.SourceColumn = "Description"
    parameter.SourceVersion = DataRowVersion.Current
    parameter.Direction = ParameterDirection.Output
End Sub

public void CreateSqlParameter()
{
    SqlParameter parameter = new SqlParameter(
        "@Description", SqlDbType.VarChar);
    parameter.IsNullable = true;
    parameter.SourceColumn = "Description";
    parameter.SourceVersion = DataRowVersion.Current;
    parameter.Direction = ParameterDirection.Output;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameter 接口
IDataParameter 成员
System.Data 命名空间


IDataParameter ..::.Value 属性

IDataParameter
.
.
::
.
Value 属性
IDataParameter 接口

获取或设置该参数的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Value As Object
    Get
    Set
Object Value { get; set; }
property Object^ Value {
    Object^ get ();
    void set (Object^ value);
}
abstract Value : Object with get, set

属性值

类型： System Object
一个 Object，它是该参数的值。默认值为 null。 一个 Object，它是该参数的值。默认值为 null。

对于输入参数，该值绑定到向服务器发送的 IDbCommand。对于输出参数和返回值参数，将在 IDataReader 关闭后 IDbCommand 完成时设置该值。 对于输入参数，该值绑定到向服务器发送的 IDbCommand。对于输出参数和返回值参数，将在 IDataReader 关闭后 IDbCommand 完成时设置该值。

在向服务器发送 null 参数值时，用户必须指定 DBNull，而不是 null。系统中的 null 值是没有值的空对象。DBNull 用于表示 null 值。 在向服务器发送 null 参数值时，用户必须指定 DBNull，而不是 null。系统中的 null 值是没有值的空对象。DBNull 用于表示 null 值。 在向服务器发送 null 参数值时，用户必须指定 DBNull，而不是 null。系统中的 null 值是没有值的空对象。DBNull 用于表示 null 值。

如果应用程序指定数据库类型，那么当提供程序将数据发送到服务器时，绑定值将转换为该类型。提供程序尝试转换支持 IConvertible 接口的任何类型的值。如果指定的类型与该值不兼容，则可能导致转换错误。 如果应用程序指定数据库类型，那么当提供程序将数据发送到服务器时，绑定值将转换为该类型。提供程序尝试转换支持 IConvertible 接口的任何类型的值。如果指定的类型与该值不兼容，则可能导致转换错误。 如果应用程序指定数据库类型，那么当提供程序将数据发送到服务器时，绑定值将转换为该类型。提供程序尝试转换支持 IConvertible 接口的任何类型的值。如果指定的类型与该值不兼容，则可能导致转换错误。

Value 属性被 Update 覆盖。

下面的示例创建实现类 SqlParameter 的实例，并设置它的某些属性。

Public Sub CreateSqlParameter()
    Dim parameter As New SqlParameter( _
        "@Description", SqlDbType.VarChar)
    parameter.Value = "garden hose"
    parameter.Size = 11
End Sub

public void CreateSqlParameter()
{
    SqlParameter parameter = new SqlParameter(
        "@Description", SqlDbType.VarChar);
    parameter.Value = "garden hose";
    parameter.Size = 11;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameter 接口
IDataParameter 成员
System.Data 命名空间


IDataParameterCollection 接口

IDataParameterCollection 接口
成员

收集所有与 Command 对象有关的参数及其到 DataSet 列的映射，并由访问该数据源的 .NET Framework 数据提供程序实现。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDataParameterCollection _
    Inherits IList, ICollection, IEnumerable
public interface IDataParameterCollection : IList,
    ICollection, IEnumerable
public interface class IDataParameterCollection : IList,
    ICollection, IEnumerable
type IDataParameterCollection =
    interface
        interface IList
        interface ICollection
        interface IEnumerable
    end

IDataParameterCollection 接口允许继承类实现 Parameter 集合。有关 Parameter 类的更多信息，请参见 配置参数和参数数据类型 (ADO.NET)。 IDataParameterCollection 接口允许继承类实现 Parameter 集合。有关 Parameter 类的更多信息，请参见 配置参数和参数数据类型 (ADO.NET)。

应用程序不直接创建 IDataParameterCollection 接口的实例，而是创建继承 IDataParameterCollection 的类的实例。

继承 IDataParameterCollection 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDataParameterCollection 接口定义 RemoveAt 方法的一个实现。然后，OleDbParameterCollection 类继承此方法，并定义 RemoveAt 的两个其他重载。 继承 IDataParameterCollection 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDataParameterCollection 接口定义 RemoveAt 方法的一个实现。然后，OleDbParameterCollection 类继承此方法，并定义 RemoveAt 的两个其他重载。 继承 IDataParameterCollection 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDataParameterCollection 接口定义 RemoveAt 方法的一个实现。然后，OleDbParameterCollection 类继承此方法，并定义 RemoveAt 的两个其他重载。

对实现者的说明

在从 IDataParameterCollection 接口继承时，应实现下面的构造函数。

项 | 说明
PrvParameterCollection() | 创建空的 PrvParameterCollection 类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameterCollection 成员
System.Data 命名空间


IDataParameterCollection 成员

IDataParameterCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataParameterCollection 接口

收集所有与 Command 对象有关的参数及其到 DataSet 列的映射，并由访问该数据源的 .NET Framework 数据提供程序实现。

IDataParameterCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

IDataParameterCollection 接口
System.Data 命名空间


IDataParameterCollection 方法

IDataParameterCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataParameterCollection 接口

IDataParameterCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDataParameterCollection 接口
System.Data 命名空间


IDataParameterCollection ..::.Contains 方法

IDataParameterCollection
.
.
::
.
Contains 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataParameterCollection 接口

名称 说明
页首

参考

IDataParameterCollection 接口
IDataParameterCollection 成员
System.Data 命名空间


IDataParameterCollection ..::.Contains 方法 (String)

IDataParameterCollection
.
.
::
.
Contains 方法 (String)
IDataParameterCollection 接口

获取一个值，该值指示集合中是否存在具有指定名称的参数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function Contains ( _
    parameterName As String _
) As Boolean
bool Contains(
    string parameterName
)
bool Contains(
    String^ parameterName
)
abstract Contains :
        parameterName:string -> bool

参数

parameterName
类型： System String
参数名。

返回值

类型： System Boolean
如果集合包含该参数，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameterCollection 接口
IDataParameterCollection 成员
Contains 重载
System.Data 命名空间


IDataParameterCollection ..::.IndexOf 方法

IDataParameterCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataParameterCollection 接口

名称 说明
页首

参考

IDataParameterCollection 接口
IDataParameterCollection 成员
System.Data 命名空间


IDataParameterCollection ..::.IndexOf 方法 (String)

IDataParameterCollection
.
.
::
.
IndexOf 方法 (String)
IDataParameterCollection 接口

获取 IDataParameter 在集合中的位置。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function IndexOf ( _
    parameterName As String _
) As Integer
int IndexOf(
    string parameterName
)
int IndexOf(
    String^ parameterName
)
abstract IndexOf :
        parameterName:string -> int

参数

parameterName
类型： System String
参数名。

返回值

类型： System Int32
IDataParameter 在集合中从零开始的位置。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameterCollection 接口
IDataParameterCollection 成员
IndexOf 重载
System.Data 命名空间


IDataParameterCollection ..::.RemoveAt 方法

IDataParameterCollection
.
.
::
.
RemoveAt 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataParameterCollection 接口

名称 说明
页首

参考

IDataParameterCollection 接口
IDataParameterCollection 成员
System.Data 命名空间


IDataParameterCollection ..::.RemoveAt 方法 (String)

IDataParameterCollection
.
.
::
.
RemoveAt 方法 (String)
IDataParameterCollection 接口

从集合中移除 IDataParameter。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub RemoveAt ( _
    parameterName As String _
)
void RemoveAt(
    string parameterName
)
void RemoveAt(
    String^ parameterName
)
abstract RemoveAt :
        parameterName:string -> unit

参数

parameterName
类型： System String
参数名。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameterCollection 接口
IDataParameterCollection 成员
RemoveAt 重载
System.Data 命名空间


IDataParameterCollection 属性

IDataParameterCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataParameterCollection 接口

IDataParameterCollection 类型公开以下成员。

名称 说明
页首

参考

IDataParameterCollection 接口
System.Data 命名空间


IDataParameterCollection ..::.Item 属性

IDataParameterCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataParameterCollection 接口

名称 说明
页首

参考

IDataParameterCollection 接口
IDataParameterCollection 成员
System.Data 命名空间


IDataParameterCollection ..::.Item 属性 (String)

IDataParameterCollection
.
.
::
.
Item 属性 (String)
IDataParameterCollection 接口

获取或设置指定索引处的参数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Item ( _
    parameterName As String _
) As Object
    Get
    Set
Object this[
    string parameterName
] { get; set; }
property Object^ Item[String^ parameterName] {
    Object^ get (String^ parameterName);
    void set (String^ parameterName, Object^ value);
}
abstract Item : Object with get, set

参数

parameterName
类型： System String
要检索的参数的名称。

属性值

类型： System Object
指定索引处的 Object。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataParameterCollection 接口
IDataParameterCollection 成员
Item 重载
System.Data 命名空间


IDataReader 接口

IDataReader 接口
成员

提供一种方法来读取一个或多个通过在数据源执行命令所获得的只进结果集流，这是由访问关系数据库的 .NET Framework 数据提供程序实现的。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDataReader _
    Inherits IDisposable, IDataRecord
public interface IDataReader : IDisposable,
    IDataRecord
public interface class IDataReader : IDisposable,
    IDataRecord
type IDataReader =
    interface
        interface IDisposable
        interface IDataRecord
    end

使用 IDataReader 和 IDataRecord 接口可以通过继承类实现 DataReader 类，该类提供一种读取结果集的一个或多个只进流的方法。有关 DataReader 类的更多信息，请参见使用 DataReader 检索数据 (ADO.NET)。 使用 IDataReader 和 IDataRecord 接口可以通过继承类实现 DataReader 类，该类提供一种读取结果集的一个或多个只进流的方法。有关 DataReader 类的更多信息，请参见使用 DataReader 检索数据 (ADO.NET)。

应用程序不直接创建 IDataReader 接口的实例，而是创建继承 IDataReader 的类的实例。

继承 IDataReader 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。

实现 IDataReader 的类的用户可以看到在读取数据的过程中其他进程或线程对结果集所做的更改。但是，精确的行为既取决于提供程序又取决于执行时间。 实现 IDataReader 的类的用户可以看到在读取数据的过程中其他进程或线程对结果集所做的更改。但是，精确的行为既取决于提供程序又取决于执行时间。

对实现者的说明

为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv Command 窗体中的继承类，其中 Prv 是为特定 .NET Framework 数据提供程序命名空间中的所有类分配的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlDataAdapter 类的前缀。 为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv Command 窗体中的继承类，其中 Prv 是为特定 .NET Framework 数据提供程序命名空间中的所有类分配的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlDataAdapter 类的前缀。

用户并不直接创建 DataReader 类的实例，而是通过使用 Command 对象的 ExecuteReader 方法获取 DataReader 实例。因此，您应该将 DataReader 构造函数标记为内部构造函数。 用户并不直接创建 DataReader 类的实例，而是通过使用 Command 对象的 ExecuteReader 方法获取 DataReader 实例。因此，您应该将 DataReader 构造函数标记为内部构造函数。 用户并不直接创建 DataReader 类的实例，而是通过使用 Command 对象的 ExecuteReader 方法获取 DataReader 实例。因此，您应该将 DataReader 构造函数标记为内部构造函数。

下面的示例创建派生类 SqlConnection、SqlCommand 和 SqlDataReader 的实例。该示例读取全部数据，并将这些数据写到控制台。最后，该示例先关闭 SqlDataReader，然后关闭 SqlConnection。 下面的示例创建派生类 SqlConnection、SqlCommand 和 SqlDataReader 的实例。该示例读取全部数据，并将这些数据写到控制台。最后，该示例先关闭 SqlDataReader，然后关闭 SqlConnection。 下面的示例创建派生类 SqlConnection、SqlCommand 和 SqlDataReader 的实例。该示例读取全部数据，并将这些数据写到控制台。最后，该示例先关闭 SqlDataReader，然后关闭 SqlConnection。

Private Sub ReadOrderData(ByVal connectionString As String)
    Dim queryString As String = _
        "SELECT OrderID, CustomerID FROM dbo.Orders;"

    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)
        connection.Open()

        Dim reader As SqlDataReader = command.ExecuteReader()

        ' Call Read before accessing data.
        While reader.Read()
            Console.WriteLine(String.Format("{0}, {1}", _
                reader(0), reader(1)))
        End While

        ' Call Close when done reading.
        reader.Close()
    End Using
End Sub

private static void ReadOrderData(string connectionString)
{
    string queryString =
        "SELECT OrderID, CustomerID FROM dbo.Orders;";

    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        SqlCommand command =
            new SqlCommand(queryString, connection);
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        // Call Read before accessing data.
        while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}, {1}",
                reader[0], reader[1]));
        }

        // Call Close when done reading.
        reader.Close();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataReader 成员
System.Data 命名空间


IDataReader 成员

IDataReader 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataReader 接口

提供一种方法来读取一个或多个通过在数据源执行命令所获得的只进结果集流，这是由访问关系数据库的 .NET Framework 数据提供程序实现的。

IDataReader 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDataReader 接口
System.Data 命名空间


IDataReader 方法

IDataReader 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataReader 接口

IDataReader 类型公开以下成员。

名称 说明
页首

参考

IDataReader 接口
System.Data 命名空间


IDataReader ..::.Close 方法

IDataReader
.
.
::
.
Close 方法
IDataReader 接口

关闭 IDataReader 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub Close
void Close()
void Close()
abstract Close : unit -> unit

当使用 IDataReader 将关联的 IDbConnection 用于任何其他用途时，必须显式调用 Close 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataReader 接口
IDataReader 成员
System.Data 命名空间


IDataReader ..::.GetSchemaTable 方法

IDataReader
.
.
::
.
GetSchemaTable 方法
IDataReader 接口

返回一个 DataTable，它描述 IDataReader 的列元数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetSchemaTable As DataTable
DataTable GetSchemaTable()
DataTable^ GetSchemaTable()
abstract GetSchemaTable : unit -> DataTable

返回值

类型： System.Data DataTable
一个描述列元数据的 DataTable。
异常 | 条件
InvalidOperationException | IDataReader 是关闭的。

用于 OLE DB 的 .NET Framework 数据提供程序的 GetSchemaTable 方法的实现映射到 OLE DB IColumnsRowset::GetColumnsRowset 方法，而其他 .NET Framework 数据提供程序的实现不使用 OLE DB 提供程序层。GetSchemaTable 返回有关表中每一列的元数据的顺序以及返回的 DataReader 列会因您使用的数据提供程序而不同。下表列出了实现 GetSchemaTable 的数据提供程序和成员。 用于 OLE DB 的 .NET Framework 数据提供程序的 GetSchemaTable 方法的实现映射到 OLE DB IColumnsRowset::GetColumnsRowset 方法，而其他 .NET Framework 数据提供程序的实现不使用 OLE DB 提供程序层。GetSchemaTable 返回有关表中每一列的元数据的顺序以及返回的 DataReader 列会因您使用的数据提供程序而不同。下表列出了实现 GetSchemaTable 的数据提供程序和成员。 用于 OLE DB 的 .NET Framework 数据提供程序的 GetSchemaTable 方法的实现映射到 OLE DB IColumnsRowset::GetColumnsRowset 方法，而其他 .NET Framework 数据提供程序的实现不使用 OLE DB 提供程序层。GetSchemaTable 返回有关表中每一列的元数据的顺序以及返回的 DataReader 列会因您使用的数据提供程序而不同。下表列出了实现 GetSchemaTable 的数据提供程序和成员。

数据提供程序 | 成员
用于 ODBC 的 .NET 数据提供程序 | OdbcDataReader..::.GetSchemaTable.
用于 OLE DB 的 .NET 数据提供程序 | OleDbDataReader..::.GetSchemaTable.
用于 Oracle 的 .NET 数据提供程序 | OracleDataReader..::.GetSchemaTable.
用于 SQL Server 的 .NET 数据提供程序 | SqlDataReader..::.GetSchemaTable.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataReader 接口
IDataReader 成员
System.Data 命名空间


IDataReader ..::.NextResult 方法

IDataReader
.
.
::
.
NextResult 方法
IDataReader 接口

当读取批处理 SQL 语句的结果时，使数据读取器前进到下一个结果。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function NextResult As Boolean
bool NextResult()
bool NextResult()
abstract NextResult : unit -> bool

返回值

类型： System Boolean
如果存在多个行，则为 true；否则为 false。

用于处理多个结果，这些结果可通过执行批处理 SQL 语句获得。

默认情况下，数据读取器定位在第一项结果上。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataReader 接口
IDataReader 成员
System.Data 命名空间


IDataReader ..::.Read 方法

IDataReader
.
.
::
.
Read 方法
IDataReader 接口

使 IDataReader 前进到下一条记录。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function Read As Boolean
bool Read()
bool Read()
abstract Read : unit -> bool

返回值

类型： System Boolean
如果存在多个行，则为 true；否则为 false。

IDataReader 的默认位置在第一条记录前面。因此，必须调用 Read 来开始访问任何数据。 IDataReader 的默认位置在第一条记录前面。因此，必须调用 Read 来开始访问任何数据。

当数据读取器正在使用时，关联的连接就会忙于给 IDataReader 提供服务。在调用了 Close 之后，情况才会发生改变。 当数据读取器正在使用时，关联的连接就会忙于给 IDataReader 提供服务。在调用了 Close 之后，情况才会发生改变。

下面的示例创建了三个派生类 OleDbConnection、OleDbCommand 和 OleDbDataReader 的实例。该示例读取全部数据，并将这些数据写到控制台。最后，该示例先关闭 OleDbDataReader，然后关闭 OleDbConnection。 下面的示例创建了三个派生类 OleDbConnection、OleDbCommand 和 OleDbDataReader 的实例。该示例读取全部数据，并将这些数据写到控制台。最后，该示例先关闭 OleDbDataReader，然后关闭 OleDbConnection。 下面的示例创建了三个派生类 OleDbConnection、OleDbCommand 和 OleDbDataReader 的实例。该示例读取全部数据，并将这些数据写到控制台。最后，该示例先关闭 OleDbDataReader，然后关闭 OleDbConnection。

Public Sub ReadData(ByVal connectionString As String)
    Dim queryString As String = _
        "SELECT OrderID, CustomerID FROM Orders"

    Using connection As New OracleConnection(connectionString)
        Dim command As New OracleCommand(queryString, connection)
        connection.Open()

        Dim reader As OracleDataReader
        reader = command.ExecuteReader()

        ' Always call Read before accessing data.
        While reader.Read()
            Console.WriteLine(reader.GetInt32(0) & ", " & reader.GetString(1))
        End While

        ' Always call Close when done reading.
        reader.Close()
    End Using
End Sub

private static void ReadData(string connectionString)
{
    string queryString = "SELECT OrderID, CustomerID FROM Orders";
    using (OracleConnection connection = new OracleConnection(connectionString))
    {
        OracleCommand command = new OracleCommand(queryString, connection);
        connection.Open();
        OracleDataReader reader;
        reader = command.ExecuteReader();

        // Always call Read before accessing data.
        while (reader.Read())
        {
            Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetString(1));
        }

        // Always call Close when done reading.
        reader.Close();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataReader 接口
IDataReader 成员
System.Data 命名空间


IDataReader 属性

IDataReader 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataReader 接口

IDataReader 类型公开以下成员。

名称 说明
页首

参考

IDataReader 接口
System.Data 命名空间


IDataReader ..::.Depth 属性

IDataReader
.
.
::
.
Depth 属性
IDataReader 接口

获取一个值，该值指示当前行的嵌套深度。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property Depth As Integer
    Get
int Depth { get; }
property int Depth {
    int get ();
}
abstract Depth : int

属性值

类型： System Int32
嵌套级别。

最外层表的深度为零。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataReader 接口
IDataReader 成员
System.Data 命名空间


IDataReader ..::.IsClosed 属性

IDataReader
.
.
::
.
IsClosed 属性
IDataReader 接口

获取一个值，该值指示数据读取器是否已关闭。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property IsClosed As Boolean
    Get
bool IsClosed { get; }
property bool IsClosed {
    bool get ();
}
abstract IsClosed : bool

属性值

类型： System Boolean
如果数据读取器已关闭，则为 true；否则为 false。

当 IDataReader 关闭后，只能调用 IsClosed 和 RecordsAffected 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataReader 接口
IDataReader 成员
System.Data 命名空间


IDataReader ..::.Item 属性

IDataReader
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataReader 接口

获取指定的列。

名称 说明
页首

参考

IDataReader 接口
IDataReader 成员
System.Data 命名空间


IDataReader ..::.RecordsAffected 属性

IDataReader
.
.
::
.
RecordsAffected 属性
IDataReader 接口

通过执行 SQL 语句获取更改、插入或删除的行数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property RecordsAffected As Integer
    Get
int RecordsAffected { get; }
property int RecordsAffected {
    int get ();
}
abstract RecordsAffected : int

属性值

类型： System Int32
已更改、插入或删除的行数；如果没有任何行受到影响或语句失败，则为 0；-1 表示 SELECT 语句。

直到读取了所有行并关闭 IDataReader 时，才会设置 RecordsAffected 属性。

当 IDataReader 关闭后，只能调用 IsClosed 和 RecordsAffected 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataReader 接口
IDataReader 成员
System.Data 命名空间


IDataRecord 接口

IDataRecord 接口
成员

使 DataReader 能访问每一行中的列值，由访问关系数据库的 .NET Framework 数据提供程序实现。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDataRecord
public interface IDataRecord
public interface class IDataRecord
type IDataRecord =  interface end

IDataReader 和 IDataRecord 接口可使继承类实现 DataReader 类。这样就提供了读取一个或多个结果集只进流的方法。有关 DataReader 类的更多信息，请参见使用 DataReader 检索数据 (ADO.NET)。 IDataReader 和 IDataRecord 接口可使继承类实现 DataReader 类。这样就提供了读取一个或多个结果集只进流的方法。有关 DataReader 类的更多信息，请参见使用 DataReader 检索数据 (ADO.NET)。 IDataReader 和 IDataRecord 接口可使继承类实现 DataReader 类。这样就提供了读取一个或多个结果集只进流的方法。有关 DataReader 类的更多信息，请参见使用 DataReader 检索数据 (ADO.NET)。

应用程序不直接创建 IDataRecord 接口的实例，而是创建继承 IDataRecord 的类的实例。通常，这是通过使用 Command 对象的 ExecuteReader 方法获取 DataReader 来实现的。 应用程序不直接创建 IDataRecord 接口的实例，而是创建继承 IDataRecord 的类的实例。通常，这是通过使用 Command 对象的 ExecuteReader 方法获取 DataReader 来实现的。

继承 IDataRecord 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。

要求实现 DataReader 的提供程序公开公共语言运行时 (CLR) 类型中的数据。为某些不包括在 CLR 中的类型定义了类型强制。这些值可以作为符合 CLR 类型的替换类型访问。作为一个示例，下表列出了建议的从 OLE DB 数据类型到 CLR 类型的映射，并且在括号内列出了替换类型。 要求实现 DataReader 的提供程序公开公共语言运行时 (CLR) 类型中的数据。为某些不包括在 CLR 中的类型定义了类型强制。这些值可以作为符合 CLR 类型的替换类型访问。作为一个示例，下表列出了建议的从 OLE DB 数据类型到 CLR 类型的映射，并且在括号内列出了替换类型。 要求实现 DataReader 的提供程序公开公共语言运行时 (CLR) 类型中的数据。为某些不包括在 CLR 中的类型定义了类型强制。这些值可以作为符合 CLR 类型的替换类型访问。作为一个示例，下表列出了建议的从 OLE DB 数据类型到 CLR 类型的映射，并且在括号内列出了替换类型。 要求实现 DataReader 的提供程序公开公共语言运行时 (CLR) 类型中的数据。为某些不包括在 CLR 中的类型定义了类型强制。这些值可以作为符合 CLR 类型的替换类型访问。作为一个示例，下表列出了建议的从 OLE DB 数据类型到 CLR 类型的映射，并且在括号内列出了替换类型。

OLE DB 类型 | CLR 类型
DBTYPE_BOOL | Int16
DBTYPE_BSTR | string
DBTYPE_BYTES | byte[]
DBTYPE_CY | 十进制
DBTYPE_DATE | DateTime
DBTYPE_DBDATE | DateTime
DBTYPE_DBTIME | DateTime
DBTYPE_DBTIMESTAMP | DateTime
DBTYPE_DECIMAL | 十进制
DBTYPE_EMPTY | null
DBTYPE_ERROR | ExternalException
DBTYPE_FILETIME | DateTime
DBTYPE_GUID | Guid
DBTYPE_HCHAPTER | 不受支持
DBTYPE_I1 | SByte
DBTYPE_I2 | Int16
DBTYPE_I4 | Int32
DBTYPE_I8 | Int64
DBTYPE_IDISPATCH | object
DBTYPE_IUNKNOWN | object
DBTYPE_NULL | DBNull.Value
DBTYPE_NUMERIC | 十进制
DBTYPE_PROPVARIANT | object
DBTYPE_R4 | Single
DBTYPE_R8 | Double
DBTYPE_STR | string
DBTYPE_UDT | 不受支持
DBTYPE_UI1 | byte (Int16)
DBTYPE_UI2 | UInt16 (Int32)
DBTYPE_UI4 | UInt32 (Int64)
DBTYPE_UI8 | UInt64 (Decimal)
DBTYPE_VARIANT | object
DBTYPE_VARNUMERIC | 不受支持
DBTYPE_WSTR | string

下面的示例创建派生类 SqlConnection、SqlCommand 和 SqlDataReader 的实例。该示例读取全部数据，并将这些数据写到控制台。最后，该示例先关闭 SqlDataReader，然后关闭 SqlConnection。 下面的示例创建派生类 SqlConnection、SqlCommand 和 SqlDataReader 的实例。该示例读取全部数据，并将这些数据写到控制台。最后，该示例先关闭 SqlDataReader，然后关闭 SqlConnection。 下面的示例创建派生类 SqlConnection、SqlCommand 和 SqlDataReader 的实例。该示例读取全部数据，并将这些数据写到控制台。最后，该示例先关闭 SqlDataReader，然后关闭 SqlConnection。

Private Sub ReadOrderData(ByVal connectionString As String)
    Dim queryString As String = _
        "SELECT OrderID, CustomerID FROM dbo.Orders;"

    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)
        connection.Open()

        Dim reader As SqlDataReader = command.ExecuteReader()

        ' Call Read before accessing data.
        While reader.Read()
            Console.WriteLine(String.Format("{0}, {1}", _
                reader(0), reader(1)))
        End While

        ' Call Close when done reading.
        reader.Close()
    End Using
End Sub

private static void ReadOrderData(string connectionString)
{
    string queryString =
        "SELECT OrderID, CustomerID FROM dbo.Orders;";

    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        SqlCommand command =
            new SqlCommand(queryString, connection);
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        // Call Read before accessing data.
        while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}, {1}",
                reader[0], reader[1]));
        }

        // Call Close when done reading.
        reader.Close();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 成员
System.Data 命名空间


IDataRecord 成员

IDataRecord 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataRecord 接口

使 DataReader 能访问每一行中的列值，由访问关系数据库的 .NET Framework 数据提供程序实现。

IDataRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDataRecord 接口
System.Data 命名空间


IDataRecord 方法

IDataRecord 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataRecord 接口

IDataRecord 类型公开以下成员。

名称 说明
页首

参考

IDataRecord 接口
System.Data 命名空间


IDataRecord ..::.GetBoolean 方法

IDataRecord
.
.
::
.
GetBoolean 方法
IDataRecord 接口

获取指定列的布尔值形式的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetBoolean ( _
    i As Integer _
) As Boolean
bool GetBoolean(
    int i
)
bool GetBoolean(
    int i
)
abstract GetBoolean :
        i:int -> bool

参数

i
类型： System Int32
从零开始的列序号。

返回值

类型： System Boolean
列的值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

不执行任何转换。因此，检索的数据必须已经为布尔型；否则将生成异常。 不执行任何转换。因此，检索的数据必须已经为布尔型；否则将生成异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetByte 方法

IDataRecord
.
.
::
.
GetByte 方法
IDataRecord 接口

获取指定列的 8 位无符号整数值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetByte ( _
    i As Integer _
) As Byte
byte GetByte(
    int i
)
unsigned char GetByte(
    int i
)
abstract GetByte :
        i:int -> byte

参数

i
类型： System Int32
从零开始的列序号。

返回值

类型： System Byte
指定列的 8 位无符号整数值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetBytes 方法

IDataRecord
.
.
::
.
GetBytes 方法
IDataRecord 接口

从指定的列偏移量将字节流作为数组从给定的缓冲区偏移量开始读入缓冲区。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetBytes ( _
    i As Integer, _
    fieldOffset As Long, _
    buffer As Byte(), _
    bufferoffset As Integer, _
    length As Integer _
) As Long
long GetBytes(
    int i,
    long fieldOffset,
    byte[] buffer,
    int bufferoffset,
    int length
)
long long GetBytes(
    int i,
    long long fieldOffset,
    array<unsigned char>^ buffer,
    int bufferoffset,
    int length
)
abstract GetBytes :
        i:int *
        fieldOffset:int64 *
        buffer:byte[] *
        bufferoffset:int *
        length:int -> int64

参数

i
类型： System Int32
从零开始的列序号。
fieldOffset
类型： System Int64
字段中的索引，从该索引位置开始读取操作。
buffer
类型：
array<
System Byte
>
[]
()
[]

要将字节流读入的缓冲区。
bufferoffset
类型： System Int32
开始读取操作的 buffer 索引。
length
类型： System Int32
要读取的字节数。

返回值

类型： System Int64
读取的实际字节数。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

GetBytes 返回字段中的可用字节数。通常情况下，这是字段的准确长度。但是，如果 GetBytes 已用于从字段中获取字节，则所返回的数字可能会小于该字段的真实长度。 GetBytes 返回字段中的可用字节数。通常情况下，这是字段的准确长度。但是，如果 GetBytes 已用于从字段中获取字节，则所返回的数字可能会小于该字段的真实长度。 GetBytes 返回字段中的可用字节数。通常情况下，这是字段的准确长度。但是，如果 GetBytes 已用于从字段中获取字节，则所返回的数字可能会小于该字段的真实长度。

如果传递为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的缓冲区，则 GetBytes 以字节为单位返回行的长度。

不执行任何转换，因此所检索的数据必须已经是字节数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetChar 方法

IDataRecord
.
.
::
.
GetChar 方法
IDataRecord 接口

获取指定列的字符值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetChar ( _
    i As Integer _
) As Char
char GetChar(
    int i
)
wchar_t GetChar(
    int i
)
abstract GetChar :
        i:int -> char

参数

i
类型： System Int32
从零开始的列序号。

返回值

类型： System Char
指定列的字符值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetChars 方法

IDataRecord
.
.
::
.
GetChars 方法
IDataRecord 接口

从指定的列偏移量将字符流作为数组从给定的缓冲区偏移量开始读入缓冲区。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetChars ( _
    i As Integer, _
    fieldoffset As Long, _
    buffer As Char(), _
    bufferoffset As Integer, _
    length As Integer _
) As Long
long GetChars(
    int i,
    long fieldoffset,
    char[] buffer,
    int bufferoffset,
    int length
)
long long GetChars(
    int i,
    long long fieldoffset,
    array<wchar_t>^ buffer,
    int bufferoffset,
    int length
)
abstract GetChars :
        i:int *
        fieldoffset:int64 *
        buffer:char[] *
        bufferoffset:int *
        length:int -> int64

参数

i
类型： System Int32
从零开始的列序号。
fieldoffset
类型： System Int64
行中的索引，从该索引位置开始读取操作。
buffer
类型：
array<
System Char
>
[]
()
[]

要将字节流读入的缓冲区。
bufferoffset
类型： System Int32
开始读取操作的 buffer 索引。
length
类型： System Int32
要读取的字节数。

返回值

类型： System Int64
读取的实际字符数。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

GetChars 返回字段中可用字符的数目。通常情况下，这是字段的准确长度。但是，如果 GetChars 已用于从字段中获取字符，则返回的数字可能会小于字段的真实长度。 GetChars 返回字段中可用字符的数目。通常情况下，这是字段的准确长度。但是，如果 GetChars 已用于从字段中获取字符，则返回的数字可能会小于字段的真实长度。 GetChars 返回字段中可用字符的数目。通常情况下，这是字段的准确长度。但是，如果 GetChars 已用于从字段中获取字符，则返回的数字可能会小于字段的真实长度。

如果传递为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 的缓冲区，则 GetChars 以字符为单位返回字段的长度。

不执行任何转换，因此所检索的数据必须已经是字符数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetData 方法

IDataRecord
.
.
::
.
GetData 方法
IDataRecord 接口

返回指定的列序号的 IDataReader。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetData ( _
    i As Integer _
) As IDataReader
IDataReader GetData(
    int i
)
IDataReader^ GetData(
    int i
)
abstract GetData :
        i:int -> IDataReader

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System.Data IDataReader
一个 IDataReader。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetDataTypeName 方法

IDataRecord
.
.
::
.
GetDataTypeName 方法
IDataRecord 接口

获取指定字段的数据类型信息。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetDataTypeName ( _
    i As Integer _
) As String
string GetDataTypeName(
    int i
)
String^ GetDataTypeName(
    int i
)
abstract GetDataTypeName :
        i:int -> string

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System String
指定字段的数据类型信息。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

数据类型信息可能与 GetFieldType 返回的类型信息不同，尤其是当基础数据类型与该语言支持的运行时类型并非一对一映射时。（例如，DataTypeName 可能是“integer”，而 Type.Name 则可能是“Int32”。） 数据类型信息可能与 GetFieldType 返回的类型信息不同，尤其是当基础数据类型与该语言支持的运行时类型并非一对一映射时。（例如，DataTypeName 可能是“integer”，而 Type.Name 则可能是“Int32”。）

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetDateTime 方法

IDataRecord
.
.
::
.
GetDateTime 方法
IDataRecord 接口

获取指定字段的日期和时间数据值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetDateTime ( _
    i As Integer _
) As DateTime
DateTime GetDateTime(
    int i
)
DateTime GetDateTime(
    int i
)
abstract GetDateTime :
        i:int -> DateTime

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System DateTime
指定字段的日期和时间数据值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetDecimal 方法

IDataRecord
.
.
::
.
GetDecimal 方法
IDataRecord 接口

获取指定字段的固定位置的数值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetDecimal ( _
    i As Integer _
) As Decimal
decimal GetDecimal(
    int i
)
Decimal GetDecimal(
    int i
)
abstract GetDecimal :
        i:int -> decimal

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Decimal
指定字段的固定位置的数值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetDouble 方法

IDataRecord
.
.
::
.
GetDouble 方法
IDataRecord 接口

获取指定字段的双精度浮点数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetDouble ( _
    i As Integer _
) As Double
double GetDouble(
    int i
)
double GetDouble(
    int i
)
abstract GetDouble :
        i:int -> float

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Double
指定字段的双精度浮点数。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetFieldType 方法

IDataRecord
.
.
::
.
GetFieldType 方法
IDataRecord 接口

获取与从 GetValue 返回的 Object 类型对应的 Type 信息。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetFieldType ( _
    i As Integer _
) As Type
Type GetFieldType(
    int i
)
Type^ GetFieldType(
    int i
)
abstract GetFieldType :
        i:int -> Type

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Type
与从 GetValue 返回的 Object 类型对应的 Type 信息。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

通过指示要调用的强类型访问器，此信息可用于提高性能。（例如，使用 GetInt32 比使用 GetValue 快大约十倍。） 通过指示要调用的强类型访问器，此信息可用于提高性能。（例如，使用 GetInt32 比使用 GetValue 快大约十倍。）

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetFloat 方法

IDataRecord
.
.
::
.
GetFloat 方法
IDataRecord 接口

获取指定字段的单精度浮点数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetFloat ( _
    i As Integer _
) As Single
float GetFloat(
    int i
)
float GetFloat(
    int i
)
abstract GetFloat :
        i:int -> float32

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Single
指定字段的单精度浮点数。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetGuid 方法

IDataRecord
.
.
::
.
GetGuid 方法
IDataRecord 接口

返回指定字段的 GUID 值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetGuid ( _
    i As Integer _
) As Guid
Guid GetGuid(
    int i
)
Guid GetGuid(
    int i
)
abstract GetGuid :
        i:int -> Guid

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Guid
指定字段的 GUID 值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetInt16 方法

IDataRecord
.
.
::
.
GetInt16 方法
IDataRecord 接口

获取指定字段的 16 位有符号整数值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetInt16 ( _
    i As Integer _
) As Short
short GetInt16(
    int i
)
short GetInt16(
    int i
)
abstract GetInt16 :
        i:int -> int16

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Int16
指定字段的 16 位有符号整数值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetInt32 方法

IDataRecord
.
.
::
.
GetInt32 方法
IDataRecord 接口

获取指定字段的 32 位有符号整数值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetInt32 ( _
    i As Integer _
) As Integer
int GetInt32(
    int i
)
int GetInt32(
    int i
)
abstract GetInt32 :
        i:int -> int

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Int32
指定字段的 32 位有符号整数值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetInt64 方法

IDataRecord
.
.
::
.
GetInt64 方法
IDataRecord 接口

获取指定字段的 64 位有符号整数值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetInt64 ( _
    i As Integer _
) As Long
long GetInt64(
    int i
)
long long GetInt64(
    int i
)
abstract GetInt64 :
        i:int -> int64

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Int64
指定字段的 64 位有符号整数值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetName 方法

IDataRecord
.
.
::
.
GetName 方法
IDataRecord 接口

获取要查找的字段的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetName ( _
    i As Integer _
) As String
string GetName(
    int i
)
String^ GetName(
    int i
)
abstract GetName :
        i:int -> string

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System String
字段名称或空字符串 ("")（如果没有返回值）。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetOrdinal 方法

IDataRecord
.
.
::
.
GetOrdinal 方法
IDataRecord 接口

返回命名字段的索引。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetOrdinal ( _
    name As String _
) As Integer
int GetOrdinal(
    string name
)
int GetOrdinal(
    String^ name
)
abstract GetOrdinal :
        name:string -> int

参数

name
类型： System String
要查找的字段的名称。

返回值

类型： System Int32
命名字段的索引。

GetOrdinal 首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。 GetOrdinal 不区分假名宽度。如果未找到指定字段的索引，则引发 IndexOutOfRangeException。 GetOrdinal 首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。 GetOrdinal 不区分假名宽度。如果未找到指定字段的索引，则引发 IndexOutOfRangeException。 GetOrdinal 首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。 GetOrdinal 不区分假名宽度。如果未找到指定字段的索引，则引发 IndexOutOfRangeException。

由于基于序号的查找比命名查找更为有效，因此在循环中调用 GetOrdinal 的效率较低。为了节省时间，可以调用一次 GetOrdinal，然后将结果分配给整数变量以便在循环中使用。 由于基于序号的查找比命名查找更为有效，因此在循环中调用 GetOrdinal 的效率较低。为了节省时间，可以调用一次 GetOrdinal，然后将结果分配给整数变量以便在循环中使用。

下面的示例说明如何使用继承的 GetOrdinal 方法。

Public Sub ReadData(ByVal connectionString As String)
    Dim queryString As String = "SELECT DISTINCT CustomerID FROM Orders"

    Using connection As New OdbcConnection(connectionString)
        Dim command As New OdbcCommand(queryString, connection)

        connection.Open()

        Dim reader As OdbcDataReader = command.ExecuteReader()

        Dim customerID As Integer = reader.GetOrdinal("CustomerID")

        While reader.Read()
            Console.WriteLine("CustomerID={0}", reader.GetString(customerID))
        End While

        ' Call Close when done reading.
        reader.Close()
    End Using
End Sub

public static void ReadData(string connectionString)
{
    string queryString = "SELECT DISTINCT CustomerID FROM Orders";

    using (OdbcConnection connection = new OdbcConnection(connectionString))
    {
        OdbcCommand command = new OdbcCommand(queryString, connection);

        connection.Open();
        OdbcDataReader reader = command.ExecuteReader();

        int customerID = reader.GetOrdinal("CustomerID");

        while (reader.Read())
        {
            Console.WriteLine("CustomerID={0}", reader.GetString(customerID));
        }

        // Call Close when done reading.
        reader.Close();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetString 方法

IDataRecord
.
.
::
.
GetString 方法
IDataRecord 接口

获取指定字段的字符串值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetString ( _
    i As Integer _
) As String
string GetString(
    int i
)
String^ GetString(
    int i
)
abstract GetString :
        i:int -> string

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System String
指定字段的字符串值。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetValue 方法

IDataRecord
.
.
::
.
GetValue 方法
IDataRecord 接口

返回指定字段的值。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetValue ( _
    i As Integer _
) As Object
Object GetValue(
    int i
)
Object^ GetValue(
    int i
)
abstract GetValue :
        i:int -> Object

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Object
返回时将包含字段值的 Object。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.GetValues 方法

IDataRecord
.
.
::
.
GetValues 方法
IDataRecord 接口

使用当前记录的列值来填充对象数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetValues ( _
    values As Object() _
) As Integer
int GetValues(
    Object[] values
)
int GetValues(
    array<Object^>^ values
)
abstract GetValues :
        values:Object[] -> int

参数

values
类型：
array<
System Object
>
[]
()
[]

要将特性字段复制到其中的 Object 的数组。

返回值

类型： System Int32
数组中 Object 的实例的数目。

对于大多数应用程序，GetValues 方法提供了一种高效的方法，它检索所有列，而不是分别检索每一列。

可以传递一个包含列数少于结果行中包含列数的 Object 数组。只有 Object 数组包含的数据量才会复制到数组中。还可以传递长度大于结果行中所包含列数的 Object 数组。 可以传递一个包含列数少于结果行中包含列数的 Object 数组。只有 Object 数组包含的数据量才会复制到数组中。还可以传递长度大于结果行中所包含列数的 Object 数组。 可以传递一个包含列数少于结果行中包含列数的 Object 数组。只有 Object 数组包含的数据量才会复制到数组中。还可以传递长度大于结果行中所包含列数的 Object 数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.IsDBNull 方法

IDataRecord
.
.
::
.
IsDBNull 方法
IDataRecord 接口

返回是否将指定字段设置为空。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function IsDBNull ( _
    i As Integer _
) As Boolean
bool IsDBNull(
    int i
)
bool IsDBNull(
    int i
)
abstract IsDBNull :
        i:int -> bool

参数

i
类型： System Int32
要查找的字段的索引。

返回值

类型： System Boolean
如果指定的字段设置为 Null，则为 true；否则为 false。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

在调用类型化 get 方法（例如，GetByte、GetChar 等）之前调用此方法来查看是否存在空列值，以避免引发错误。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord 属性

IDataRecord 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataRecord 接口

IDataRecord 类型公开以下成员。

名称 说明
页首

参考

IDataRecord 接口
System.Data 命名空间


IDataRecord ..::.FieldCount 属性

IDataRecord
.
.
::
.
FieldCount 属性
IDataRecord 接口

获取当前行中的列数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property FieldCount As Integer
    Get
int FieldCount { get; }
property int FieldCount {
    int get ();
}
abstract FieldCount : int

属性值

类型： System Int32
如果未放在有效的记录集中，则为 0；如果放在了有效的记录集中，则为当前记录的列数。默认值为 -1。 如果未放在有效的记录集中，则为 0；如果放在了有效的记录集中，则为当前记录的列数。默认值为 -1。

在执行没有返回行的查询（例如，使用 ExecuteNonQuery 方法）后，FieldCount 返回 -1。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.Item 属性

IDataRecord
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDataRecord 接口

获取指定的列。

名称 说明
页首

参考

IDataRecord 接口
IDataRecord 成员
System.Data 命名空间


IDataRecord ..::.Item 属性 (Int32)

IDataRecord
.
.
::
.
Item 属性 (Int32)
IDataRecord 接口

获取位于指定索引处的列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property Item ( _
    i As Integer _
) As Object
    Get
Object this[
    int i
] { get; }
property Object^ Item[int i] {
    Object^ get (int i);
}
abstract Item : Object

参数

i
类型： System Int32
要获取的列的从零开始的索引。

属性值

类型： System Object
作为 Object 位于指定索引处的列。
异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
Item 重载
System.Data 命名空间


IDataRecord ..::.Item 属性 (String)

IDataRecord
.
.
::
.
Item 属性 (String)
IDataRecord 接口

获取具有指定名称的列。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property Item ( _
    name As String _
) As Object
    Get
Object this[
    string name
] { get; }
property Object^ Item[String^ name] {
    Object^ get (String^ name);
}
abstract Item : Object

参数

name
类型： System String
要查找的列的名称。

属性值

类型： System Object
名称指定为 Object 的列。
异常 | 条件
IndexOutOfRangeException | 未找到具有指定名称的列。

首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。 首先执行区分大小写的查找。如果失败，则进行另一次不区分大小写的搜索。

此方法不区分假名宽度。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDataRecord 接口
IDataRecord 成员
Item 重载
System.Data 命名空间


IDbCommand 接口

IDbCommand 接口
成员

表示连接到数据源时执行的 SQL 语句，并且是由访问关系数据库的 .NET Framework 数据提供程序实现的。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDbCommand _
    Inherits IDisposable
public interface IDbCommand : IDisposable
public interface class IDbCommand : IDisposable
type IDbCommand =
    interface
        interface IDisposable
    end

IDbCommand 接口允许继承类实现 Command 类，该类表示在数据源处执行的 SQL 语句。有关 Command 类的更多信息，请参见执行命令 (ADO.NET)。 IDbCommand 接口允许继承类实现 Command 类，该类表示在数据源处执行的 SQL 语句。有关 Command 类的更多信息，请参见执行命令 (ADO.NET)。

应用程序不直接创建 IDbCommand 接口的实例，而是创建继承 IDbCommand 的类的实例。

继承 IDbCommand 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IDbCommand 接口定义 ExecuteNonQuery 方法。然后，SqlCommand 类继承此方法，还定义 ExecuteXmlReader 方法。 继承 IDbCommand 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IDbCommand 接口定义 ExecuteNonQuery 方法。然后，SqlCommand 类继承此方法，还定义 ExecuteXmlReader 方法。 继承 IDbCommand 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IDbCommand 接口定义 ExecuteNonQuery 方法。然后，SqlCommand 类继承此方法，还定义 ExecuteXmlReader 方法。

对实现者的说明

为提高 .NET Framework 数据提供程序之间的一致性，请命名 PrvClassname 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlCommand 类的前缀。 为提高 .NET Framework 数据提供程序之间的一致性，请命名 PrvClassname 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlCommand 类的前缀。

在从 IDbCommand 接口继承时，应实现下列构造函数：

项 | 说明
PrvCommand() | 初始化 PrvCommand 类的新实例。
PrvCommand(string cmdText) | 使用查询文本初始化 PrvCommand 类的新实例。
PrvCommand(string cmdText, PrvConnection connection) | 使用查询文本和 PrvConnection 初始化 PrvCommand 类的新实例。
PrvCommand(string cmdText, PrvConnection connection, PrvTransaction transaction) | 使用查询文本、PrvConnection 和 PrvTransaction 初始化 PrvCommand 类的新实例。

下面的示例创建派生类 SqlConnection、SqlCommand 和 SqlDataReader 的实例。该示例读取所有数据，并将其写到控制台。最后，该示例先关闭 SqlDataReader，然后关闭 SqlConnection。 下面的示例创建派生类 SqlConnection、SqlCommand 和 SqlDataReader 的实例。该示例读取所有数据，并将其写到控制台。最后，该示例先关闭 SqlDataReader，然后关闭 SqlConnection。 下面的示例创建派生类 SqlConnection、SqlCommand 和 SqlDataReader 的实例。该示例读取所有数据，并将其写到控制台。最后，该示例先关闭 SqlDataReader，然后关闭 SqlConnection。

Public Sub ReadOrderData(ByVal connectionString As String)
    Dim queryString As String = _
        "SELECT OrderID, CustomerID FROM dbo.Orders;"
    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)
        connection.Open()
        Dim reader As SqlDataReader = command.ExecuteReader()
        Try
            While reader.Read()
                Console.WriteLine(String.Format("{0}, {1}", _
                    reader(0), reader(1)))
            End While
        Finally
            ' Always call Close when done reading.
            reader.Close()
        End Try
    End Using
End Sub

private static void ReadOrderData(string connectionString)
{
    string queryString =
        "SELECT OrderID, CustomerID FROM dbo.Orders;";
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(
            queryString, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
        }
        finally
        {
            // Always call Close when done reading.
            reader.Close();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 成员
System.Data 命名空间
DbDataAdapter
IDbConnection
OleDbCommand
SqlCommand


IDbCommand 成员

IDbCommand 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbCommand 接口

表示连接到数据源时执行的 SQL 语句，并且是由访问关系数据库的 .NET Framework 数据提供程序实现的。

IDbCommand 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDbCommand 接口
System.Data 命名空间


IDbCommand 方法

IDbCommand 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbCommand 接口

IDbCommand 类型公开以下成员。

名称 说明
页首

参考

IDbCommand 接口
System.Data 命名空间


IDbCommand ..::.Cancel 方法

IDbCommand
.
.
::
.
Cancel 方法
IDbCommand 接口

尝试取消 IDbCommand 的执行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub Cancel
void Cancel()
void Cancel()
abstract Cancel : unit -> unit

如果没有要取消的内容，则什么也不会发生。但是，如果有命令正在执行，而取消尝试失败，则不会生成异常。 如果没有要取消的内容，则什么也不会发生。但是，如果有命令正在执行，而取消尝试失败，则不会生成异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbCommand ..::.CreateParameter 方法

IDbCommand
.
.
::
.
CreateParameter 方法
IDbCommand 接口

创建 IDbDataParameter 对象的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function CreateParameter As IDbDataParameter
IDbDataParameter CreateParameter()
IDbDataParameter^ CreateParameter()
abstract CreateParameter : unit -> IDbDataParameter

返回值

类型： System.Data IDbDataParameter
IDbDataParameter 对象。

当从 IDbCommand 继承时，.NET Framework 数据提供程序实现 CreateParameter 的强类型版本。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbCommand ..::.ExecuteNonQuery 方法

IDbCommand
.
.
::
.
ExecuteNonQuery 方法
IDbCommand 接口

针对 .NET Framework 数据提供程序的 Connection 对象执行 SQL 语句，并返回受影响的行数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function ExecuteNonQuery As Integer
int ExecuteNonQuery()
int ExecuteNonQuery()
abstract ExecuteNonQuery : unit -> int

返回值

类型： System Int32
受影响的行数。
异常 | 条件
InvalidOperationException | 连接不存在。 - 或 - 连接未打开。

您可以使用 ExecuteNonQuery 来执行目录操作（例如查询数据库的结构或创建诸如表等的数据库对象），或通过执行 UPDATE、INSERT 或 DELETE 语句，在不使用 DataSet 的情况下更改数据库中的数据。

虽然 ExecuteNonQuery 不返回任何行，但映射到参数的任何输出参数或返回值都会用数据进行填充。

对于 UPDATE、INSERT 和 DELETE 语句，返回值为该命令所影响的行数。对于其他所有类型的语句，返回值为 -1。 对于 UPDATE、INSERT 和 DELETE 语句，返回值为该命令所影响的行数。对于其他所有类型的语句，返回值为 -1。

下面的示例创建派生类 OleDbCommand 的实例，然后执行它。为此，需要向该方法传递两个字符串：一个是 SQL Select 语句，另一个是用于连接到数据源的字符串。 下面的示例创建派生类 OleDbCommand 的实例，然后执行它。为此，需要向该方法传递两个字符串：一个是 SQL Select 语句，另一个是用于连接到数据源的字符串。

Private Sub CreateOleDbCommand( _
    ByVal queryString As String, ByVal connectionString As String)
    Using connection As New OleDbConnection(connectionString)
        connection.Open()
        Dim command As New OleDbCommand(queryString, connection)
        command.ExecuteNonQuery()
    End Using
End Sub

static private void CreateOleDbCommand(
    string queryString, string connectionString)
{
    using (OleDbConnection connection = new
               OleDbConnection(connectionString))
    {
        connection.Open();
        OleDbCommand command = new
            OleDbCommand(queryString, connection);
        command.ExecuteNonQuery();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbCommand ..::.ExecuteReader 方法

IDbCommand
.
.
::
.
ExecuteReader 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbCommand 接口

针对 Connection 执行 CommandText，并生成 IDataReader。

名称 说明
页首

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbCommand ..::.ExecuteReader 方法

IDbCommand
.
.
::
.
ExecuteReader 方法
IDbCommand 接口

针对 Connection 执行 CommandText，并生成 IDataReader。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function ExecuteReader As IDataReader
IDataReader ExecuteReader()
IDataReader^ ExecuteReader()
abstract ExecuteReader : unit -> IDataReader

返回值

类型： System.Data IDataReader
一个 IDataReader 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
ExecuteReader 重载
System.Data 命名空间


IDbCommand ..::.ExecuteReader 方法 (CommandBehavior)

IDbCommand
.
.
::
.
ExecuteReader 方法 (CommandBehavior)
IDbCommand 接口

针对 Connection 执行 CommandText，并使用 CommandBehavior 值之一生成 IDataReader。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function ExecuteReader ( _
    behavior As CommandBehavior _
) As IDataReader
IDataReader ExecuteReader(
    CommandBehavior behavior
)
IDataReader^ ExecuteReader(
    CommandBehavior behavior
)
abstract ExecuteReader :
        behavior:CommandBehavior -> IDataReader

参数

behavior
类型： System.Data CommandBehavior
CommandBehavior 值之一。

返回值

类型： System.Data IDataReader
一个 IDataReader 对象。

调用方必须调用 Connection 属性的 Open 方法。

当 CommandType 属性设置为 StoredProcedure 时，CommandText 属性应设置为存储过程的名称。当调用 ExecuteReader 时，该命令将执行此存储过程。 当 CommandType 属性设置为 StoredProcedure 时，CommandText 属性应设置为存储过程的名称。当调用 ExecuteReader 时，该命令将执行此存储过程。

说明 说明

请使用 SequentialAccess 检索大值和二进制数据。否则，可能出现 OutOfMemoryException 并且连接将关闭。 请使用 SequentialAccess 检索大值和二进制数据。否则，可能出现 OutOfMemoryException 并且连接将关闭。

当 IDataReader 处于使用中时，关联的 IDbConnection 正忙于为 IDataReader 服务。当处于此状态时，除了关闭 IDbConnection 外，不能对其执行其他任何操作。除非调用 DataReader 的 Close 方法，否则会一直处于此状态。如果创建了 DataReader 并将 CommandBehavior 设置为 CloseConnection，则关闭 DataReader 会自动关闭此连接。 当 IDataReader 处于使用中时，关联的 IDbConnection 正忙于为 IDataReader 服务。当处于此状态时，除了关闭 IDbConnection 外，不能对其执行其他任何操作。除非调用 DataReader 的 Close 方法，否则会一直处于此状态。如果创建了 DataReader 并将 CommandBehavior 设置为 CloseConnection，则关闭 DataReader 会自动关闭此连接。 当 IDataReader 处于使用中时，关联的 IDbConnection 正忙于为 IDataReader 服务。当处于此状态时，除了关闭 IDbConnection 外，不能对其执行其他任何操作。除非调用 DataReader 的 Close 方法，否则会一直处于此状态。如果创建了 DataReader 并将 CommandBehavior 设置为 CloseConnection，则关闭 DataReader 会自动关闭此连接。 当 IDataReader 处于使用中时，关联的 IDbConnection 正忙于为 IDataReader 服务。当处于此状态时，除了关闭 IDbConnection 外，不能对其执行其他任何操作。除非调用 DataReader 的 Close 方法，否则会一直处于此状态。如果创建了 DataReader 并将 CommandBehavior 设置为 CloseConnection，则关闭 DataReader 会自动关闭此连接。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
ExecuteReader 重载
System.Data 命名空间


IDbCommand ..::.ExecuteScalar 方法

IDbCommand
.
.
::
.
ExecuteScalar 方法
IDbCommand 接口

执行查询，并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行。 执行查询，并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function ExecuteScalar As Object
Object ExecuteScalar()
Object^ ExecuteScalar()
abstract ExecuteScalar : unit -> Object

返回值

类型： System Object
结果集中第一行的第一列。

使用 ExecuteScalar 方法从数据库中检索单个值（例如一个聚合值）。与使用 ExecuteReader 方法，然后使用 IDataReader 返回的数据执行生成单个值所需的操作相比，此操作需要的代码较少。 使用 ExecuteScalar 方法从数据库中检索单个值（例如一个聚合值）。与使用 ExecuteReader 方法，然后使用 IDataReader 返回的数据执行生成单个值所需的操作相比，此操作需要的代码较少。

典型的 ExecuteScalar 查询可以采用类似于下面的 C# 示例的格式：

 CommandText = "select count(*) as NumberOfRegions from region";
 Int32 count = (int) ExecuteScalar();

如果找不到结果集中第一行的第一列；则返回 null 引用（在 Visual Basic 中为 Nothing）。如果数据库中的该值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），此查询将返回 DBNull.Value。 如果找不到结果集中第一行的第一列；则返回 null 引用（在 Visual Basic 中为 Nothing）。如果数据库中的该值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），此查询将返回 DBNull.Value。

下面的示例创建派生类 SqlCommand 的实例，然后使用 ExecuteScalar 执行它。为该示例传递两个字符串：一个是返回聚合结果的 Transact-SQL 语句，另一个用于连接到数据源。 下面的示例创建派生类 SqlCommand 的实例，然后使用 ExecuteScalar 执行它。为该示例传递两个字符串：一个是返回聚合结果的 Transact-SQL 语句，另一个用于连接到数据源。

Public Sub CreateSqlCommand( _
    queryString As String, connection As SqlConnection)

    Dim command As New SqlCommand(queryString, connection)
    command.Connection.Open()
    command.ExecuteScalar()
    connection.Close()
End Sub

public void CreateSqlCommand(
    string queryString, SqlConnection connection)
{
    SqlCommand command = new
        SqlCommand(queryString, connection);
    command.Connection.Open();
    command.ExecuteScalar();
    connection.Close();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbCommand ..::.Prepare 方法

IDbCommand
.
.
::
.
Prepare 方法
IDbCommand 接口

在数据源上创建该命令的准备好的（或已编译的）版本。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub Prepare
void Prepare()
void Prepare()
abstract Prepare : unit -> unit

异常 | 条件
InvalidOperationException | 未设置 Connection。 - 或 - Connection 不为 Open。

如果 CommandType 属性设置为 TableDirect，则 Prepare 不会执行任何操作。如果 CommandType 设置为 StoredProcedure，则对 Prepare 的调用应该会成功（虽然它可能导致无操作 (no-op)）。在 SQL Server 2000 和 SQL Server 2005 中，服务器会自动缓存计划以在需要时重复使用；因此，无需在客户端应用程序中直接调用此方法。 如果 CommandType 属性设置为 TableDirect，则 Prepare 不会执行任何操作。如果 CommandType 设置为 StoredProcedure，则对 Prepare 的调用应该会成功（虽然它可能导致无操作 (no-op)）。在 SQL Server 2000 和 SQL Server 2005 中，服务器会自动缓存计划以在需要时重复使用；因此，无需在客户端应用程序中直接调用此方法。 如果 CommandType 属性设置为 TableDirect，则 Prepare 不会执行任何操作。如果 CommandType 设置为 StoredProcedure，则对 Prepare 的调用应该会成功（虽然它可能导致无操作 (no-op)）。在 SQL Server 2000 和 SQL Server 2005 中，服务器会自动缓存计划以在需要时重复使用；因此，无需在客户端应用程序中直接调用此方法。

下面的示例创建派生类 OleDbCommand 的实例，并打开该连接。然后，该示例通过传递如下两个字符串在数据源上准备存储过程：一个是 SQL Select 语句，另一个是用于连接到数据源的字符串。 下面的示例创建派生类 OleDbCommand 的实例，并打开该连接。然后，该示例通过传递如下两个字符串在数据源上准备存储过程：一个是 SQL Select 语句，另一个是用于连接到数据源的字符串。

Public Sub OleDbCommandPrepare(ByVal connectionString As String)

    Using connection As OleDbConnection = New _
        OleDbConnection(connectionString)
        connection.Open()

        ' Create the Command.
        Dim command As OleDbCommand = New OleDbCommand()

        ' Set the Connection, CommandText and Parameters.
        command.Connection = connection
        command.CommandText = _
          "INSERT INTO dbo.Region (RegionID, RegionDescription) VALUES (?, ?);"
        command.Parameters.Add("RegionID", OleDbType.Integer, 4)
        command.Parameters.Add("RegionDescription", OleDbType.VarWChar, 50)
        command.Parameters(0).Value = 20
        command.Parameters(1).Value = "First Region"

        ' Call  Prepare and ExecuteNonQuery.
        command.Prepare()
        command.ExecuteNonQuery()

        ' Change parameter values and call ExecuteNonQuery.
        command.Parameters(0).Value = 21
        command.Parameters(1).Value = "Second Region"
        command.ExecuteNonQuery()
    End Using
End Sub

private static void OleDbCommandPrepare(string connectionString)
{
    using (OleDbConnection connection = new
               OleDbConnection(connectionString))
    {
        connection.Open();

        // Create the Command.
        OleDbCommand command = new OleDbCommand();

        // Set the Connection, CommandText and Parameters.
        command.Connection = connection;
        command.CommandText =
            "INSERT INTO dbo.Region (RegionID, RegionDescription) VALUES (?, ?)";
        command.Parameters.Add("RegionID", OleDbType.Integer, 4);
        command.Parameters.Add("RegionDescription", OleDbType.VarWChar, 50);
        command.Parameters[0].Value = 20;
        command.Parameters[1].Value = "First Region";

        // Call  Prepare and ExecuteNonQuery.
        command.Prepare();
        command.ExecuteNonQuery();

        // Change parameter values and call ExecuteNonQuery.
        command.Parameters[0].Value = 21;
        command.Parameters[1].Value = "SecondRegion";
        command.ExecuteNonQuery();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbCommand 属性

IDbCommand 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbCommand 接口

IDbCommand 类型公开以下成员。

名称 说明
页首

参考

IDbCommand 接口
System.Data 命名空间


IDbCommand ..::.CommandText 属性

IDbCommand
.
.
::
.
CommandText 属性
IDbCommand 接口

获取或设置针对数据源运行的文本命令。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property CommandText As String
    Get
    Set
string CommandText { get; set; }
property String^ CommandText {
    String^ get ();
    void set (String^ value);
}
abstract CommandText : string with get, set

属性值

类型： System String
要执行的文本命令。默认值为空字符串 ("")。 要执行的文本命令。默认值为空字符串 ("")。

当 CommandType 属性设置为 StoredProcedure 时，将 CommandText 属性设置为存储过程的名称。如果存储过程名称包含任何特殊字符，则可能会要求用户使用转义符语法。当调用“执行”(Execute) 方法之一时，该命令将调用此存储过程。 当 CommandType 属性设置为 StoredProcedure 时，将 CommandText 属性设置为存储过程的名称。如果存储过程名称包含任何特殊字符，则可能会要求用户使用转义符语法。当调用“执行”(Execute) 方法之一时，该命令将调用此存储过程。 当 CommandType 属性设置为 StoredProcedure 时，将 CommandText 属性设置为存储过程的名称。如果存储过程名称包含任何特殊字符，则可能会要求用户使用转义符语法。当调用“执行”(Execute) 方法之一时，该命令将调用此存储过程。

下面的示例创建派生类 OleDbCommand 的实例，并设置它的某些属性。

Public Sub CreateOleDbCommand()
    Dim command As New OleDbCommand()
    command.CommandText = "SELECT * FROM Categories ORDER BY CategoryID;"
    command.CommandType = CommandType.Text
End Sub

public void CreateOleDbCommand()
{
   OleDbCommand command = new OleDbCommand();
   command.CommandText = "SELECT * FROM Categories ORDER BY CategoryID;";
   command.CommandType = CommandType.Text;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间
CommandType
UpdatedRowSource


IDbCommand ..::.CommandTimeout 属性

IDbCommand
.
.
::
.
CommandTimeout 属性
IDbCommand 接口

获取或设置在终止执行命令的尝试并生成错误之前的等待时间。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property CommandTimeout As Integer
    Get
    Set
int CommandTimeout { get; set; }
property int CommandTimeout {
    int get ();
    void set (int value);
}
abstract CommandTimeout : int with get, set

属性值

类型： System Int32
等待命令执行的时间（以秒为单位）。默认值为 30 秒。 等待命令执行的时间（以秒为单位）。默认值为 30 秒。
异常 | 条件
ArgumentException | 所分配的属性值小于 0。

下面的示例创建派生类 SqlCommand 的实例，并设置它的某些属性。

Public Sub CreateSqlCommand()
    Dim command As New SqlCommand()
    command.CommandTimeout = 15
    command.CommandType = CommandType.Text
End Sub

public void CreateSqlCommand()
{
   SqlCommand command = new SqlCommand();
   command.CommandTimeout = 15;
   command.CommandType = CommandType.Text;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间
CommandText
Connection
CommandType


IDbCommand ..::.CommandType 属性

IDbCommand
.
.
::
.
CommandType 属性
IDbCommand 接口

指示或指定如何解释 CommandText 属性。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property CommandType As CommandType
    Get
    Set
CommandType CommandType { get; set; }
property CommandType CommandType {
    CommandType get ();
    void set (CommandType value);
}
abstract CommandType : CommandType with get, set

属性值

类型： System.Data CommandType
CommandType 值之一。默认为 Text。 CommandType 值之一。默认为 Text。

当将 CommandType 属性设置为 StoredProcedure 时，应将 CommandText 属性设置为存储过程的名称。当调用 Execute 方法之一时，该命令将执行此存储过程。 当将 CommandType 属性设置为 StoredProcedure 时，应将 CommandText 属性设置为存储过程的名称。当调用 Execute 方法之一时，该命令将执行此存储过程。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbCommand ..::.Connection 属性

IDbCommand
.
.
::
.
Connection 属性
IDbCommand 接口

获取或设置 IDbCommand 的此实例使用的 IDbConnection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Connection As IDbConnection
    Get
    Set
IDbConnection Connection { get; set; }
property IDbConnection^ Connection {
    IDbConnection^ get ();
    void set (IDbConnection^ value);
}
abstract Connection : IDbConnection with get, set

属性值

类型： System.Data IDbConnection
与数据源的连接。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbCommand ..::.Parameters 属性

IDbCommand
.
.
::
.
Parameters 属性
IDbCommand 接口

获取 IDataParameterCollection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property Parameters As IDataParameterCollection
    Get
IDataParameterCollection Parameters { get; }
property IDataParameterCollection^ Parameters {
    IDataParameterCollection^ get ();
}
abstract Parameters : IDataParameterCollection

属性值

类型： System.Data IDataParameterCollection
SQL 语句或存储过程的参数。

下面的示例创建派生类 SqlCommand 的实例，并设置其参数。在此例中，应用程序传递一个 SqlConnection、一个查询字符串（Transact-SQL SELECT 语句）以及一个 SqlParameter 对象数组。 下面的示例创建派生类 SqlCommand 的实例，并设置其参数。在此例中，应用程序传递一个 SqlConnection、一个查询字符串（Transact-SQL SELECT 语句）以及一个 SqlParameter 对象数组。

Public Sub CreateSqlCommand(ByVal connection As SqlConnection, _
ByVal queryString As String, ByVal params() As SqlParameter)

    Dim command As New SqlCommand(queryString, connection)
    command.CommandText = _
       "SELECT CustomerID, CompanyName FROM Customers " _
       & "WHERE Country = @Country AND City = @City"
    command.UpdatedRowSource = UpdateRowSource.Both
    command.Parameters.Add(params)

    Dim j As Integer
    For j = 0 To command.Parameters.Count - 1
        command.Parameters.Add(params(j))
    Next j

    Dim message As String = ""
    Dim i As Integer
    For i = 0 To command.Parameters.Count - 1
        message += command.Parameters(i).ToString() & ControlChars.Cr
    Next i

    Console.WriteLine(message)
End Sub

public void CreateSqlCommand(SqlConnection myConnection,
    string queryString, SqlParameter[] paramArray)
{
    SqlCommand command = new SqlCommand(queryString, myConnection);
    command.CommandText =
        "SELECT CustomerID, CompanyName FROM Customers "
        + "WHERE Country = @Country AND City = @City";
    command.Parameters.Add(paramArray);

    for (int j=0; j<paramArray.Length; j++)
    {
        command.Parameters.Add(paramArray[j]) ;
    }

    string message = "";
    for (int i = 0; i < command.Parameters.Count; i++)
    {
        message += command.Parameters[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间
IDataParameter


IDbCommand ..::.Transaction 属性

IDbCommand
.
.
::
.
Transaction 属性
IDbCommand 接口

获取或设置在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Transaction As IDbTransaction
    Get
    Set
IDbTransaction Transaction { get; set; }
property IDbTransaction^ Transaction {
    IDbTransaction^ get ();
    void set (IDbTransaction^ value);
}
abstract Transaction : IDbTransaction with get, set

属性值

类型： System.Data IDbTransaction
执行 .NET Framework 数据提供程序的 Command 对象。默认值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 执行 .NET Framework 数据提供程序的 Command 对象。默认值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbCommand ..::.UpdatedRowSource 属性

IDbCommand
.
.
::
.
UpdatedRowSource 属性
IDbCommand 接口

获取或设置命令结果在由 DbDataAdapter 的 Update 方法使用时如何应用于 DataRow。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property UpdatedRowSource As UpdateRowSource
    Get
    Set
UpdateRowSource UpdatedRowSource { get; set; }
property UpdateRowSource UpdatedRowSource {
    UpdateRowSource get ();
    void set (UpdateRowSource value);
}
abstract UpdatedRowSource : UpdateRowSource with get, set

属性值

类型： System.Data UpdateRowSource
UpdateRowSource 值之一。如果该命令不是自动生成的，则默认值为 Both。否则，默认值为 None。 UpdateRowSource 值之一。如果该命令不是自动生成的，则默认值为 Both。否则，默认值为 None。 UpdateRowSource 值之一。如果该命令不是自动生成的，则默认值为 Both。否则，默认值为 None。
异常 | 条件
ArgumentException | 输入的值不是 UpdateRowSource 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbCommand 接口
IDbCommand 成员
System.Data 命名空间


IDbConnection 接口

IDbConnection 接口
成员

表示到数据源的已打开连接，并且是由访问关系数据库的 .NET Framework 数据提供程序实现的。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDbConnection _
    Inherits IDisposable
public interface IDbConnection : IDisposable
public interface class IDbConnection : IDisposable
type IDbConnection =
    interface
        interface IDisposable
    end

IDbConnection 接口允许继承类实现 Connection 类，该类表示与数据源之间的唯一会话（例如，到服务器的一个网络连接）。有关 Connection 类的更多信息，请参见连接到数据源 (ADO.NET)。 IDbConnection 接口允许继承类实现 Connection 类，该类表示与数据源之间的唯一会话（例如，到服务器的一个网络连接）。有关 Connection 类的更多信息，请参见连接到数据源 (ADO.NET)。

应用程序不直接创建 IDbConnection 接口的实例，而是创建继承 IDbConnection 的类的实例。

继承 IDbConnection 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IDbConnection 接口定义 ConnectionTimeout 属性。然后，SqlConnection 类继承此属性，还定义 PacketSize 属性。 继承 IDbConnection 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IDbConnection 接口定义 ConnectionTimeout 属性。然后，SqlConnection 类继承此属性，还定义 PacketSize 属性。 继承 IDbConnection 的类必须实现所有继承成员，且通常定义更多的成员，以添加提供程序特定的功能。例如，IDbConnection 接口定义 ConnectionTimeout 属性。然后，SqlConnection 类继承此属性，还定义 PacketSize 属性。

对实现者的说明

为提高 .NET Framework 数据提供程序之间的一致性，请命名 PrvClassname 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlConnection 类的前缀。 为提高 .NET Framework 数据提供程序之间的一致性，请命名 PrvClassname 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlConnection 类的前缀。

在从 IDbConnection 接口继承时，应实现下列构造函数：

项 | 说明
PrvConnection() | 初始化 PrvConnection 类的新实例。
PrvConnection(string connectionString) | 当给定包含连接字符串的字符串时，初始化 PrvConnection 类的新实例。

下面的示例创建派生类 SqlCommand 和 SqlConnection 的实例。SqlConnection 打开，并设置为 SqlCommand 的 Connection。然后，该示例调用 ExecuteNonQuery 并关闭该连接。为了完成此任务，将为 ExecuteNonQuery 传递一个连接字符串和一个查询字符串，后者是一个 Transact-SQL INSERT 语句。 下面的示例创建派生类 SqlCommand 和 SqlConnection 的实例。SqlConnection 打开，并设置为 SqlCommand 的 Connection。然后，该示例调用 ExecuteNonQuery 并关闭该连接。为了完成此任务，将为 ExecuteNonQuery 传递一个连接字符串和一个查询字符串，后者是一个 Transact-SQL INSERT 语句。 下面的示例创建派生类 SqlCommand 和 SqlConnection 的实例。SqlConnection 打开，并设置为 SqlCommand 的 Connection。然后，该示例调用 ExecuteNonQuery 并关闭该连接。为了完成此任务，将为 ExecuteNonQuery 传递一个连接字符串和一个查询字符串，后者是一个 Transact-SQL INSERT 语句。 下面的示例创建派生类 SqlCommand 和 SqlConnection 的实例。SqlConnection 打开，并设置为 SqlCommand 的 Connection。然后，该示例调用 ExecuteNonQuery 并关闭该连接。为了完成此任务，将为 ExecuteNonQuery 传递一个连接字符串和一个查询字符串，后者是一个 Transact-SQL INSERT 语句。

Private Sub OpenSqlConnection()
    Dim connectionString As String = GetConnectionString()
    Using connection As New SqlConnection(connectionString)
        connection.Open()
        Console.WriteLine("ServerVersion: {0}", connection.ServerVersion)
        Console.WriteLine("State: {0}", connection.State)
    End Using
End Sub

Private Function GetConnectionString() As String
    ' To avoid storing the connection string in your code,
    ' you can retrieve it from a configuration file, using the
    ' System.Configuration.ConfigurationSettings.AppSettings property
    Return "Data Source=(local);Database=AdventureWorks;" _
      & "Integrated Security=SSPI;"
End Function

private static void OpenSqlConnection()
{
    string connectionString = GetConnectionString();
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
        Console.WriteLine("State: {0}", connection.State);
    }
}

static private string GetConnectionString()
{
    // To avoid storing the connection string in your code,
    // you can retrieve it from a configuration file, using the
    // System.Configuration.ConfigurationSettings.AppSettings property
    return "Data Source=(local);Initial Catalog=AdventureWorks;"
        + "Integrated Security=SSPI;";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 成员
System.Data 命名空间


IDbConnection 成员

IDbConnection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbConnection 接口

表示到数据源的已打开连接，并且是由访问关系数据库的 .NET Framework 数据提供程序实现的。

IDbConnection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDbConnection 接口
System.Data 命名空间


IDbConnection 方法

IDbConnection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbConnection 接口

IDbConnection 类型公开以下成员。

名称 说明
页首

参考

IDbConnection 接口
System.Data 命名空间


IDbConnection ..::.BeginTransaction 方法

IDbConnection
.
.
::
.
BeginTransaction 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbConnection 接口

开始数据库事务。

名称 说明
页首

参考

IDbConnection 接口
IDbConnection 成员
System.Data 命名空间


IDbConnection ..::.BeginTransaction 方法

IDbConnection
.
.
::
.
BeginTransaction 方法
IDbConnection 接口

开始数据库事务。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function BeginTransaction As IDbTransaction
IDbTransaction BeginTransaction()
IDbTransaction^ BeginTransaction()
abstract BeginTransaction : unit -> IDbTransaction

返回值

类型： System.Data IDbTransaction
表示新事务的对象。

一旦事务完成，就必须使用 Commit 或 Rollback 方法显式地提交或回滚该事务。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
BeginTransaction 重载
System.Data 命名空间


IDbConnection ..::.BeginTransaction 方法 (IsolationLevel)

IDbConnection
.
.
::
.
BeginTransaction 方法 (IsolationLevel)
IDbConnection 接口

以指定的 IsolationLevel 值开始一个数据库事务。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function BeginTransaction ( _
    il As IsolationLevel _
) As IDbTransaction
IDbTransaction BeginTransaction(
    IsolationLevel il
)
IDbTransaction^ BeginTransaction(
    IsolationLevel il
)
abstract BeginTransaction :
        il:IsolationLevel -> IDbTransaction

参数

il
类型： System.Data IsolationLevel
IsolationLevel 值之一。

返回值

类型： System.Data IDbTransaction
表示新事务的对象。

一旦事务完成，就必须使用 Commit 或 Rollback 方法显式地提交或回滚该事务。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
BeginTransaction 重载
System.Data 命名空间


IDbConnection ..::.ChangeDatabase 方法

IDbConnection
.
.
::
.
ChangeDatabase 方法
IDbConnection 接口

为打开的 Connection 对象更改当前数据库。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub ChangeDatabase ( _
    databaseName As String _
)
void ChangeDatabase(
    string databaseName
)
void ChangeDatabase(
    String^ databaseName
)
abstract ChangeDatabase :
        databaseName:string -> unit

参数

databaseName
类型： System String
要代替当前数据库进行使用的数据库的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
System.Data 命名空间


IDbConnection ..::.Close 方法

IDbConnection
.
.
::
.
Close 方法
IDbConnection 接口

关闭与数据库的连接。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub Close
void Close()
void Close()
abstract Close : unit -> unit

Close 方法回滚任何挂起的事务。然后，它将连接释放到连接池，或者在连接池被禁用的情况下关闭连接。 Close 方法回滚任何挂起的事务。然后，它将连接释放到连接池，或者在连接池被禁用的情况下关闭连接。

应用程序可以多次调用 Close 而不会产生异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
System.Data 命名空间
Open


IDbConnection ..::.CreateCommand 方法

IDbConnection
.
.
::
.
CreateCommand 方法
IDbConnection 接口

创建并返回一个与该连接相关联的 Command 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function CreateCommand As IDbCommand
IDbCommand CreateCommand()
IDbCommand^ CreateCommand()
abstract CreateCommand : unit -> IDbCommand

返回值

类型： System.Data IDbCommand
一个与该连接相关联的 Command 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
System.Data 命名空间


IDbConnection ..::.Open 方法

IDbConnection
.
.
::
.
Open 方法
IDbConnection 接口

打开一个数据库连接，其设置由提供程序特定的 Connection 对象的 ConnectionString 属性指定。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub Open
void Open()
void Open()
abstract Open : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
System.Data 命名空间


IDbConnection 属性

IDbConnection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbConnection 接口

IDbConnection 类型公开以下成员。

名称 说明
页首

参考

IDbConnection 接口
System.Data 命名空间


IDbConnection ..::.ConnectionString 属性

IDbConnection
.
.
::
.
ConnectionString 属性
IDbConnection 接口

获取或设置用于打开数据库的字符串。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property ConnectionString As String
    Get
    Set
string ConnectionString { get; set; }
property String^ ConnectionString {
    String^ get ();
    void set (String^ value);
}
abstract ConnectionString : string with get, set

属性值

类型： System String
包含连接设置的字符串。

只有在连接关闭时才能设置 ConnectionString 属性。

下面的示例创建派生类 OleDbConnection 的实例，设置其 ConnectionString，并显示其 State。

Public Sub CreateOleDbConnection()
    Dim connection As New OleDbConnection()
    connection.ConnectionString = _
       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb"
    Console.WriteLine("Connection State: " & connection.State.ToString())
End Sub

public void CreateOleDbConnection(){
   OleDbConnection connection = new OleDbConnection();
   connection.ConnectionString =
       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb";
   Console.WriteLine("Connection State: " + connection.State.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
System.Data 命名空间


IDbConnection ..::.ConnectionTimeout 属性

IDbConnection
.
.
::
.
ConnectionTimeout 属性
IDbConnection 接口

获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property ConnectionTimeout As Integer
    Get
int ConnectionTimeout { get; }
property int ConnectionTimeout {
    int get ();
}
abstract ConnectionTimeout : int

属性值

类型： System Int32
等待连接打开的时间（以秒为单位）。默认值为 15 秒。 等待连接打开的时间（以秒为单位）。默认值为 15 秒。

值 0 指示对等待时间没有限制，而不是指示没有等待时间，由于值 0 会导致连接尝试无限地等待，所以应该避免在 ConnectionString 中使用该值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
System.Data 命名空间


IDbConnection ..::.Database 属性

IDbConnection
.
.
::
.
Database 属性
IDbConnection 接口

获取当前数据库或连接打开后要使用的数据库的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property Database As String
    Get
string Database { get; }
property String^ Database {
    String^ get ();
}
abstract Database : string

属性值

类型： System String
当前数据库的名称或在连接打开后要使用的数据库的名称。默认值为空字符串。 当前数据库的名称或在连接打开后要使用的数据库的名称。默认值为空字符串。

通过使用 ChangeDatabase 方法，或者通过使用 Execute 方法之一来传递一个 SQL 语句，就能够动态地更新 Database 属性。（最初，数据库是用连接字符串设置的。）如果使用 SQL 语句或 ChangeDatabase 方法更改了当前数据库，就会发送一条信息性消息，然后该属性被更新。 通过使用 ChangeDatabase 方法，或者通过使用 Execute 方法之一来传递一个 SQL 语句，就能够动态地更新 Database 属性。（最初，数据库是用连接字符串设置的。）如果使用 SQL 语句或 ChangeDatabase 方法更改了当前数据库，就会发送一条信息性消息，然后该属性被更新。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
System.Data 命名空间
ChangeDatabase
ConnectionString
ConnectionTimeout


IDbConnection ..::.State 属性

IDbConnection
.
.
::
.
State 属性
IDbConnection 接口

获取连接的当前状态。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property State As ConnectionState
    Get
ConnectionState State { get; }
property ConnectionState State {
    ConnectionState get ();
}
abstract State : ConnectionState

属性值

类型： System.Data ConnectionState
ConnectionState 值之一。

允许的状态更改包括：

  • 使用 Connection 对象的 Open 方法从 Closed 更改为 Open。

  • 使用 Connection 对象的 Close 方法或 Dispose 方法从 Open 更改为 Closed。

下面的示例创建派生类 OleDbConnection 的实例，设置其 ConnectionString，并显示其 State。

Public Sub CreateOleDbConnection()
    Dim connection As New OleDbConnection()
    connection.ConnectionString = _
       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb"
    Console.WriteLine("Connection State: " & connection.State.ToString())
End Sub

public void CreateOleDbConnection(){
   OleDbConnection connection = new OleDbConnection();
   connection.ConnectionString =
       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb";
   Console.WriteLine("Connection State: " + connection.State.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbConnection 接口
IDbConnection 成员
System.Data 命名空间


IDbDataAdapter 接口

IDbDataAdapter 接口
成员

表示一组与命令有关的属性，用于填充 DataSet 和更新数据源，由访问关系数据库的 .NET Framework 数据提供程序实现。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDbDataAdapter _
    Inherits IDataAdapter
public interface IDbDataAdapter : IDataAdapter
public interface class IDbDataAdapter : IDataAdapter
type IDbDataAdapter =
    interface
        interface IDataAdapter
    end

IDbDataAdapter 接口是从 IDataAdapter 接口继承的，并且允许对象创建用于关系数据库的 DataAdapter。IDbDataAdapter 接口和（可选的）实用工具类 DbDataAdapter 允许继承类实现 DataAdapter 类，该类表现为数据源和 DataSet 之间的桥接器。有关 DataAdapter 类的更多信息，请参见 从 DataAdapter 填充数据集 (ADO.NET)。有关实现 .NET Framework 数据提供程序的更多信息，请参见 [<topic://cpconimplementingnetdataprovider>]。 IDbDataAdapter 接口是从 IDataAdapter 接口继承的，并且允许对象创建用于关系数据库的 DataAdapter。IDbDataAdapter 接口和（可选的）实用工具类 DbDataAdapter 允许继承类实现 DataAdapter 类，该类表现为数据源和 DataSet 之间的桥接器。有关 DataAdapter 类的更多信息，请参见 从 DataAdapter 填充数据集 (ADO.NET)。有关实现 .NET Framework 数据提供程序的更多信息，请参见 [<topic://cpconimplementingnetdataprovider>]。 IDbDataAdapter 接口是从 IDataAdapter 接口继承的，并且允许对象创建用于关系数据库的 DataAdapter。IDbDataAdapter 接口和（可选的）实用工具类 DbDataAdapter 允许继承类实现 DataAdapter 类，该类表现为数据源和 DataSet 之间的桥接器。有关 DataAdapter 类的更多信息，请参见 从 DataAdapter 填充数据集 (ADO.NET)。有关实现 .NET Framework 数据提供程序的更多信息，请参见 [<topic://cpconimplementingnetdataprovider>]。 IDbDataAdapter 接口是从 IDataAdapter 接口继承的，并且允许对象创建用于关系数据库的 DataAdapter。IDbDataAdapter 接口和（可选的）实用工具类 DbDataAdapter 允许继承类实现 DataAdapter 类，该类表现为数据源和 DataSet 之间的桥接器。有关 DataAdapter 类的更多信息，请参见 从 DataAdapter 填充数据集 (ADO.NET)。有关实现 .NET Framework 数据提供程序的更多信息，请参见 [<topic://cpconimplementingnetdataprovider>]。

应用程序不直接创建 IDbDataAdapter 接口的实例，而是创建继承 IDbDataAdapter 和 DbDataAdapter 的类的实例。

继承 IDbDataAdapter 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDbDataAdapter 接口定义 SelectCommand 属性，而 DbDataAdapter 接口定义将 DataTable 取作参数的 Fill 方法。接着，OleDbDataAdapter 类又继承 SelectCommand 属性和 Fill 方法，并且也定义 Fill 方法的两个附加重载，这两个重载将 ADO Recordset 对象取作参数。 继承 IDbDataAdapter 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDbDataAdapter 接口定义 SelectCommand 属性，而 DbDataAdapter 接口定义将 DataTable 取作参数的 Fill 方法。接着，OleDbDataAdapter 类又继承 SelectCommand 属性和 Fill 方法，并且也定义 Fill 方法的两个附加重载，这两个重载将 ADO Recordset 对象取作参数。 继承 IDbDataAdapter 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDbDataAdapter 接口定义 SelectCommand 属性，而 DbDataAdapter 接口定义将 DataTable 取作参数的 Fill 方法。接着，OleDbDataAdapter 类又继承 SelectCommand 属性和 Fill 方法，并且也定义 Fill 方法的两个附加重载，这两个重载将 ADO Recordset 对象取作参数。

对实现者的说明

为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv DataAdapter 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlDataAdapter 类的前缀。 为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv DataAdapter 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlDataAdapter 类的前缀。

在从 IDbDataAdapter 接口继承时，应实现下列构造函数：

项 | 说明
PrvDataAdapter() | 初始化 PrvDataAdapter 类的新实例。
PrvDataAdapter(PrvCommand selectCommand) | 使用指定的 SQL SELECT 语句初始化 PrvDataAdapter 类的新实例。
PrvDataAdapter(string selectCommandText, string selectConnectionString) | 使用 SQL SELECT 语句和连接字符串初始化 PrvDataAdapter 类的新实例。
PrvDataAdapter(string selectCommandText, PrvConnection selectConnection) | 使用 SQL SELECT 语句和 PrvConnection 对象初始化 PrvDataAdapter 类的新实例。

下面的示例使用派生类 SqlCommand、SqlDataAdapter 和 SqlConnection 从数据源中选择记录。然后返回已填充的 DataSet。为完成此任务，向该方法传递一个已初始化的 DataSet、一个连接字符串和一个查询字符串，后者是一个 Transact-SQL SELECT 语句。 下面的示例使用派生类 SqlCommand、SqlDataAdapter 和 SqlConnection 从数据源中选择记录。然后返回已填充的 DataSet。为完成此任务，向该方法传递一个已初始化的 DataSet、一个连接字符串和一个查询字符串，后者是一个 Transact-SQL SELECT 语句。 下面的示例使用派生类 SqlCommand、SqlDataAdapter 和 SqlConnection 从数据源中选择记录。然后返回已填充的 DataSet。为完成此任务，向该方法传递一个已初始化的 DataSet、一个连接字符串和一个查询字符串，后者是一个 Transact-SQL SELECT 语句。

Public Function SelectRows( _
    ByVal dataSet As DataSet, ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New SqlConnection(connectionString)
        Dim adapter As New SqlDataAdapter()
        adapter.SelectCommand = New SqlCommand( _
            queryString, connection)
        adapter.Fill(dataSet)
        Return dataSet
    End Using
End Function

private static DataSet SelectRows(DataSet dataset,
    string connectionString,string queryString)
{
    using (SqlConnection connection =
        new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(
            queryString, connection);
        adapter.Fill(dataset);
        return dataset;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbDataAdapter 成员
System.Data 命名空间


IDbDataAdapter 成员

IDbDataAdapter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbDataAdapter 接口

表示一组与命令有关的属性，用于填充 DataSet 和更新数据源，由访问关系数据库的 .NET Framework 数据提供程序实现。

IDbDataAdapter 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDbDataAdapter 接口
System.Data 命名空间


IDbDataAdapter 方法

IDbDataAdapter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbDataAdapter 接口

IDbDataAdapter 类型公开以下成员。

名称 说明
页首

参考

IDbDataAdapter 接口
System.Data 命名空间


IDbDataAdapter 属性

IDbDataAdapter 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbDataAdapter 接口

IDbDataAdapter 类型公开以下成员。

名称 说明
页首

参考

IDbDataAdapter 接口
System.Data 命名空间


IDbDataAdapter ..::.DeleteCommand 属性

IDbDataAdapter
.
.
::
.
DeleteCommand 属性
IDbDataAdapter 接口

获取或设置用于从数据集中删除记录的 SQL 语句。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property DeleteCommand As IDbCommand
    Get
    Set
IDbCommand DeleteCommand { get; set; }
property IDbCommand^ DeleteCommand {
    IDbCommand^ get ();
    void set (IDbCommand^ value);
}
abstract DeleteCommand : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
Update 过程中使用的 IDbCommand，它针对数据集中已删除的行删除数据源中的记录。

在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 DeleteCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 DeleteCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 DeleteCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 DeleteCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。

在将 DeleteCommand 分配给以前创建的 IDbCommand 时，不克隆 IDbCommand。DeleteCommand 维护对以前创建的 IDbCommand 对象的引用。 在将 DeleteCommand 分配给以前创建的 IDbCommand 时，不克隆 IDbCommand。DeleteCommand 维护对以前创建的 IDbCommand 对象的引用。

下面的示例创建继承的 OleDbDataAdapter 类的实例，并设置 SelectCommand 和 DeleteCommand 属性。假定已经创建了一个 OleDbConnection 对象。 下面的示例创建继承的 OleDbDataAdapter 类的实例，并设置 SelectCommand 和 DeleteCommand 属性。假定已经创建了一个 OleDbConnection 对象。

Public Shared Function CreateCustomerAdapter( _
    connection As OleDbConnection) As OleDbDataAdapter

    Dim dataAdapter As OleDbDataAdapter = New OleDbDataAdapter()
    Dim command As OleDbCommand
    Dim parameter As OleDbParameter

    ' Create the SelectCommand.
    command = New OleDbCommand("SELECT CustomerID FROM Customers " & _
        "WHERE Country = ? AND City = ?", connection)

    command.Parameters.Add("Country", OleDbType.VarChar, 15)
    command.Parameters.Add("City", OleDbType.VarChar, 15)

    dataAdapter.SelectCommand = command

    ' Create the DeleteCommand.
    command = New OleDbCommand( _
        "DELETE * FROM Customers WHERE CustomerID = ?", _
        connection)

    parameter = command.Parameters.Add( _
        "CustomerID", OleDbType.Char, 5, "CustomerID")
    parameter.SourceVersion = DataRowVersion.Original

    dataAdapter.DeleteCommand = command

    Return dataAdapter
End Function

public static OleDbDataAdapter CreateCustomerAdapter(
    OleDbConnection connection)
{
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
    OleDbCommand command;
    OleDbParameter parameter;

    // Create the SelectCommand.
    command = new OleDbCommand("SELECT CustomerID FROM Customers " +
        "WHERE Country = ? AND City = ?", connection);

    command.Parameters.Add("Country", OleDbType.VarChar, 15);
    command.Parameters.Add("City", OleDbType.VarChar, 15);

    dataAdapter.SelectCommand = command;

    // Create the DeleteCommand.
    command = new OleDbCommand(
        "DELETE * FROM Customers WHERE CustomerID = ?",
        connection);

    parameter = command.Parameters.Add(
        "CustomerID", OleDbType.Char, 5, "CustomerID");
    parameter.SourceVersion = DataRowVersion.Original;

    dataAdapter.DeleteCommand = command;

    return dataAdapter;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbDataAdapter 接口
IDbDataAdapter 成员
System.Data 命名空间


IDbDataAdapter ..::.InsertCommand 属性

IDbDataAdapter
.
.
::
.
InsertCommand 属性
IDbDataAdapter 接口

获取或设置用于将新记录插入到数据源中的 SQL 语句。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property InsertCommand As IDbCommand
    Get
    Set
IDbCommand InsertCommand { get; set; }
property IDbCommand^ InsertCommand {
    IDbCommand^ get ();
    void set (IDbCommand^ value);
}
abstract InsertCommand : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
在 Update 过程中使用的 IDbCommand，它针对数据集中的新行将记录插入到数据源。

在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 InsertCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 InsertCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 InsertCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 InsertCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。

在将 InsertCommand 分配给以前创建的 IDbCommand 时，不克隆 IDbCommand。InsertCommand 维护对以前创建的 IDbCommand 对象的引用。 在将 InsertCommand 分配给以前创建的 IDbCommand 时，不克隆 IDbCommand。InsertCommand 维护对以前创建的 IDbCommand 对象的引用。

说明 说明

如果执行此命令后返回行，这些行可能会添加到 DataSet 中，具体取决于如何设置 IDbCommand 对象的 UpdatedRowSource 属性。

下面的示例创建继承的 OleDbDataAdapter 类的实例，并设置 SelectCommand 和 InsertCommand 属性。假定已经创建了一个 OleDbConnection 对象。 下面的示例创建继承的 OleDbDataAdapter 类的实例，并设置 SelectCommand 和 InsertCommand 属性。假定已经创建了一个 OleDbConnection 对象。

Public Shared Function CreateCustomerAdapter( _
    connection As OleDbConnection) As OleDbDataAdapter

    Dim adapter As OleDbDataAdapter = New OleDbDataAdapter()
    Dim command As OleDbCommand

    ' Create the SelectCommand.
    command = New OleDbCommand("SELECT CustomerID FROM Customers " & _
        "WHERE Country = ? AND City = ?", connection)

    command.Parameters.Add("Country", OleDbType.VarChar, 15)
    command.Parameters.Add("City", OleDbType.VarChar, 15)

    adapter.SelectCommand = command

    ' Create the InsertCommand.
    command = New OleDbCommand( _
        "INSERT INTO Customers (CustomerID, CompanyName) " & _
        "VALUES (?, ?)", connection)

    command.Parameters.Add( _
        "CustomerID", OleDbType.Char, 5, "CustomerID")
    command.Parameters.Add( _
        "CompanyName", OleDbType.VarChar, 40, "CompanyName")

    adapter.InsertCommand = command
    Return adapter
End Function

public static OleDbDataAdapter CreateCustomerAdapter(
    OleDbConnection connection)
{
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    OleDbCommand command;

    // Create the SelectCommand.
    command = new OleDbCommand("SELECT CustomerID FROM Customers " +
        "WHERE Country = ? AND City = ?", connection);

    command.Parameters.Add("Country", OleDbType.VarChar, 15);
    command.Parameters.Add("City", OleDbType.VarChar, 15);

    adapter.SelectCommand = command;

    // Create the InsertCommand.
    command = new OleDbCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (?, ?)", connection);

    command.Parameters.Add(
        "CustomerID", OleDbType.Char, 5, "CustomerID");
    command.Parameters.Add(
        "CompanyName", OleDbType.VarChar, 40, "CompanyName");

    adapter.InsertCommand = command;
    return adapter;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbDataAdapter 接口
IDbDataAdapter 成员
System.Data 命名空间


IDbDataAdapter ..::.SelectCommand 属性

IDbDataAdapter
.
.
::
.
SelectCommand 属性
IDbDataAdapter 接口

获取或设置用于在数据源中选择记录的 SQL 语句。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property SelectCommand As IDbCommand
    Get
    Set
IDbCommand SelectCommand { get; set; }
property IDbCommand^ SelectCommand {
    IDbCommand^ get ();
    void set (IDbCommand^ value);
}
abstract SelectCommand : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
在 Update 过程中使用的 IDbCommand，它从数据源中选择记录以便放入数据集中。

在将 SelectCommand 分配给以前创建的 IDbCommand 时，不克隆 IDbCommand。SelectCommand 维护对以前创建的 IDbCommand 对象的引用。 在将 SelectCommand 分配给以前创建的 IDbCommand 时，不克隆 IDbCommand。SelectCommand 维护对以前创建的 IDbCommand 对象的引用。

如果 SelectCommand 不返回任何行，则没有任何表添加到 DataSet 中，并且不会引发任何异常。

下面的示例创建继承的 OleDbDataAdapter 类的实例，并设置 SelectCommand 和 InsertCommand 属性。假定已经创建了一个 OleDbConnection 对象。 下面的示例创建继承的 OleDbDataAdapter 类的实例，并设置 SelectCommand 和 InsertCommand 属性。假定已经创建了一个 OleDbConnection 对象。

Public Shared Function CreateCustomerAdapter( _
    connection As OleDbConnection) As OleDbDataAdapter

    Dim adapter As OleDbDataAdapter = New OleDbDataAdapter()
    Dim command As OleDbCommand

    ' Create the SelectCommand.
    command = New OleDbCommand("SELECT * FROM Customers " & _
        "WHERE Country = ? AND City = ?", connection)

    command.Parameters.Add("Country", OleDbType.VarChar, 15)
    command.Parameters.Add("City", OleDbType.VarChar, 15)

    adapter.SelectCommand = command

    ' Create the InsertCommand.
    command = New OleDbCommand( _
        "INSERT INTO Customers (CustomerID, CompanyName) " & _
        "VALUES (?, ?)", connection)

    command.Parameters.Add( _
        "CustomerID", OleDbType.Char, 5, "CustomerID")
    command.Parameters.Add( _
        "CompanyName", OleDbType.VarChar, 40, "CompanyName")

    adapter.InsertCommand = command
    Return adapter
End Function

public static OleDbDataAdapter CreateCustomerAdapter(
    OleDbConnection connection)
{
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    OleDbCommand command;

    // Create the SelectCommand.
    command = new OleDbCommand("SELECT * FROM Customers " +
        "WHERE Country = ? AND City = ?", connection);

    command.Parameters.Add("Country", OleDbType.VarChar, 15);
    command.Parameters.Add("City", OleDbType.VarChar, 15);

    adapter.SelectCommand = command;

    // Create the InsertCommand.
    command = new OleDbCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (?, ?)", connection);

    command.Parameters.Add(
        "CustomerID", OleDbType.Char, 5, "CustomerID");
    command.Parameters.Add(
        "CompanyName", OleDbType.VarChar, 40, "CompanyName");

    adapter.InsertCommand = command;
    return adapter;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbDataAdapter 接口
IDbDataAdapter 成员
System.Data 命名空间


IDbDataAdapter ..::.UpdateCommand 属性

IDbDataAdapter
.
.
::
.
UpdateCommand 属性
IDbDataAdapter 接口

获取或设置用于更新数据源中的记录的 SQL 语句。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property UpdateCommand As IDbCommand
    Get
    Set
IDbCommand UpdateCommand { get; set; }
property IDbCommand^ UpdateCommand {
    IDbCommand^ get ();
    void set (IDbCommand^ value);
}
abstract UpdateCommand : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
在 Update 过程中使用的 IDbCommand，它针对数据集中已修改的行更新数据源中的记录。

在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 UpdateCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 UpdateCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 UpdateCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 在 Update 过程中，如果未设置此属性，且 DataSet 中存在主键信息，那么当设置 .NET Framework 数据提供程序的 SelectCommand 属性时，可以自动生成 UpdateCommand。然后，未设置的任何其他命令都由 CommandBuilder 生成。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。

在将 UpdateCommand 分配给以前创建的 IDbCommand 时，不克隆 IDbCommand。UpdateCommand 维护对以前创建的 IDbCommand 对象的引用。 在将 UpdateCommand 分配给以前创建的 IDbCommand 时，不克隆 IDbCommand。UpdateCommand 维护对以前创建的 IDbCommand 对象的引用。

说明 说明

如果执行此命令后返回行，就会将这些行添加到 DataSet 中。

下面的示例创建继承的 OleDbDataAdapter 类的实例，并设置 SelectCommand 和 UpdateCommand 属性。假定已经创建了一个 OleDbConnection 对象。 下面的示例创建继承的 OleDbDataAdapter 类的实例，并设置 SelectCommand 和 UpdateCommand 属性。假定已经创建了一个 OleDbConnection 对象。

Private Function CreateCustomerAdapter( _
    ByVal connection As OleDbConnection) As OleDbDataAdapter

    Dim dataAdapter As OleDbDataAdapter = New OleDbDataAdapter()
    Dim command As OleDbCommand
    Dim parameter As OleDbParameter

    ' Create the SelectCommand.
    command = New OleDbCommand("SELECT * FROM dbo.Customers " & _
        "WHERE Country = ? AND City = ?", connection)

    command.Parameters.Add("Country", OleDbType.VarChar, 15)
    command.Parameters.Add("City", OleDbType.VarChar, 15)

    dataAdapter.SelectCommand = command

    ' Create the UpdateCommand.
    command = New OleDbCommand("UPDATE dbo.Customers " & _
        "SET CustomerID = ?, CompanyName = ? " & _
        "WHERE CustomerID = ?", connection)

    command.Parameters.Add( _
        "CustomerID", OleDbType.Char, 5, "CustomerID")
    command.Parameters.Add( _
        "CompanyName", OleDbType.VarChar, 40, "CompanyName")

    parameter = command.Parameters.Add( _
        "oldCustomerID", OleDbType.Char, 5, "CustomerID")
    parameter.SourceVersion = DataRowVersion.Original

    dataAdapter.UpdateCommand = command

    Return dataAdapter
End Function

private static OleDbDataAdapter CreateCustomerAdapter(
    OleDbConnection connection)
{
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
    OleDbCommand command;
    OleDbParameter parameter;

    // Create the SelectCommand.
    command = new OleDbCommand("SELECT * FROM dbo.Customers " +
        "WHERE Country = ? AND City = ?", connection);

    command.Parameters.Add("Country", OleDbType.VarChar, 15);
    command.Parameters.Add("City", OleDbType.VarChar, 15);

    dataAdapter.SelectCommand = command;

    // Create the UpdateCommand.
    command = new OleDbCommand(
        "UPDATE dbo.Customers SET CustomerID = ?, CompanyName = ? " +
        "WHERE CustomerID = ?", connection);

    command.Parameters.Add(
        "CustomerID", OleDbType.Char, 5, "CustomerID");
    command.Parameters.Add(
        "CompanyName", OleDbType.VarChar, 40, "CompanyName");

    parameter = command.Parameters.Add(
        "oldCustomerID", OleDbType.Char, 5, "CustomerID");
    parameter.SourceVersion = DataRowVersion.Original;

    dataAdapter.UpdateCommand = command;

    return dataAdapter;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbDataAdapter 接口
IDbDataAdapter 成员
System.Data 命名空间


IDbDataParameter 接口

IDbDataParameter 接口
成员

由 Visual Basic .NET 数据设计器使用，用来向 Command 对象表示一个参数，以及向该对象的 DataSet 列映射表示参数（可选）。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDbDataParameter _
    Inherits IDataParameter
public interface IDbDataParameter : IDataParameter
public interface class IDbDataParameter : IDataParameter
type IDbDataParameter =
    interface
        interface IDataParameter
    end

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbDataParameter 成员
System.Data 命名空间


IDbDataParameter 成员

IDbDataParameter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbDataParameter 接口

由 Visual Basic .NET 数据设计器使用，用来向 Command 对象表示一个参数，以及向该对象的 DataSet 列映射表示参数（可选）。

IDbDataParameter 类型公开以下成员。

名称 说明
页首

参考

IDbDataParameter 接口
System.Data 命名空间


IDbDataParameter 属性

IDbDataParameter 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbDataParameter 接口

IDbDataParameter 类型公开以下成员。

名称 说明
页首

参考

IDbDataParameter 接口
System.Data 命名空间


IDbDataParameter ..::.Precision 属性

IDbDataParameter
.
.
::
.
Precision 属性
IDbDataParameter 接口

指示数值参数的精度。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Precision As Byte
    Get
    Set
byte Precision { get; set; }
property unsigned char Precision {
    unsigned char get ();
    void set (unsigned char value);
}
abstract Precision : byte with get, set

属性值

类型： System Byte
用于表示数据提供程序 Parameter 对象的 Value 属性的数字的最大位数。默认值为 0，它表示由数据提供程序设置 Value 的精度。 用于表示数据提供程序 Parameter 对象的 Value 属性的数字的最大位数。默认值为 0，它表示由数据提供程序设置 Value 的精度。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbDataParameter 接口
IDbDataParameter 成员
System.Data 命名空间


IDbDataParameter ..::.Scale 属性

IDbDataParameter
.
.
::
.
Scale 属性
IDbDataParameter 接口

指示数值参数的小数位数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Scale As Byte
    Get
    Set
byte Scale { get; set; }
property unsigned char Scale {
    unsigned char get ();
    void set (unsigned char value);
}
abstract Scale : byte with get, set

属性值

类型： System Byte
要将 Value 解析为的小数位数。默认值为 0。 要将 Value 解析为的小数位数。默认值为 0。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbDataParameter 接口
IDbDataParameter 成员
System.Data 命名空间


IDbDataParameter ..::.Size 属性

IDbDataParameter
.
.
::
.
Size 属性
IDbDataParameter 接口

参数的大小。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Size As Integer
    Get
    Set
int Size { get; set; }
property int Size {
    int get ();
    void set (int value);
}
abstract Size : int with get, set

属性值

类型： System Int32
列中数据的最大大小（以字节为单位）。从参数值推断默认值。 列中数据的最大大小（以字节为单位）。从参数值推断默认值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbDataParameter 接口
IDbDataParameter 成员
System.Data 命名空间


IDbTransaction 接口

IDbTransaction 接口
成员

表示要在数据源上执行的事务，它由访问关系数据库的 .NET Framework 数据提供程序来实现。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface IDbTransaction _
    Inherits IDisposable
public interface IDbTransaction : IDisposable
public interface class IDbTransaction : IDisposable
type IDbTransaction =
    interface
        interface IDisposable
    end

IDbTransaction 接口允许继承类实现 Transaction 类，Transaction 类表示要在数据源上执行的事务。有关 Transaction 类的更多信息，请参见事务和并发 (ADO.NET)。 IDbTransaction 接口允许继承类实现 Transaction 类，Transaction 类表示要在数据源上执行的事务。有关 Transaction 类的更多信息，请参见事务和并发 (ADO.NET)。

应用程序不直接创建 IDbTransaction 接口的实例，而是创建继承 IDbTransaction 的类的实例。

继承 IDbTransaction 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDbTransaction 接口定义 Commit 方法。然后，OleDbTransaction 类继承此属性，还定义 Begin 方法。 继承 IDbTransaction 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDbTransaction 接口定义 Commit 方法。然后，OleDbTransaction 类继承此属性，还定义 Begin 方法。 继承 IDbTransaction 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，IDbTransaction 接口定义 Commit 方法。然后，OleDbTransaction 类继承此属性，还定义 Begin 方法。

对实现者的说明

为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv Transaction 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlTransaction 类的前缀。 为提高 .NET Framework 数据提供程序之间的一致性，请命名 Prv Transaction 窗体中的继承类，其中 Prv 是给予特定 .NET Framework 数据提供程序命名空间中的所有类的统一前缀。例如，Sql 是 System.Data.SqlClient 命名空间中 SqlTransaction 类的前缀。

下面的示例创建派生类 SqlConnection 和 SqlTransaction 的实例。此示例还演示如何使用 BeginTransaction、Commit 和 Rollback 等方法。 下面的示例创建派生类 SqlConnection 和 SqlTransaction 的实例。此示例还演示如何使用 BeginTransaction、Commit 和 Rollback 等方法。

Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()
        Dim transaction As SqlTransaction

        ' Start a local transaction
        transaction = connection.BeginTransaction("SampleTransaction")

        ' Must assign both transaction object and connection
        ' to Command object for a pending local transaction.
        command.Connection = connection
        command.Transaction = transaction

        Try
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            command.ExecuteNonQuery()
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"

            command.ExecuteNonQuery()

            ' Attempt to commit the transaction.
            transaction.Commit()
            Console.WriteLine("Both records are written to database.")

        Catch ex As Exception
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
            Console.WriteLine("  Message: {0}", ex.Message)

            ' Attempt to roll back the transaction.
            Try
                transaction.Rollback()

            Catch ex2 As Exception
                ' This catch block will handle any errors that may have occurred
                ' on the server that would cause the rollback to fail, such as
                ' a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
                Console.WriteLine("  Message: {0}", ex2.Message)
            End Try
        End Try
    End Using
End Sub

private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;

        // Start a local transaction.
        transaction = connection.BeginTransaction("SampleTransaction");

        // Must assign both transaction object and connection
        // to Command object for a pending local transaction
        command.Connection = connection;
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();

            // Attempt to commit the transaction.
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
            Console.WriteLine("  Message: {0}", ex.Message);

            // Attempt to roll back the transaction.
            try
            {
                transaction.Rollback();
            }
            catch (Exception ex2)
            {
                // This catch block will handle any errors that may have occurred
                // on the server that would cause the rollback to fail, such as
                // a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                Console.WriteLine("  Message: {0}", ex2.Message);
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbTransaction 成员
System.Data 命名空间


IDbTransaction 成员

IDbTransaction 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbTransaction 接口

表示要在数据源上执行的事务，它由访问关系数据库的 .NET Framework 数据提供程序来实现。

IDbTransaction 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IDbTransaction 接口
System.Data 命名空间


IDbTransaction 方法

IDbTransaction 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbTransaction 接口

IDbTransaction 类型公开以下成员。

名称 说明
页首

参考

IDbTransaction 接口
System.Data 命名空间


IDbTransaction ..::.Commit 方法

IDbTransaction
.
.
::
.
Commit 方法
IDbTransaction 接口

提交数据库事务。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub Commit
void Commit()
void Commit()
abstract Commit : unit -> unit

异常 | 条件
Exception | 尝试提交事务时出错。
InvalidOperationException | 事务已提交或回滚。 - 或 - 连接已断开。

下面的示例创建派生类 SqlConnection 和 SqlTransaction 的实例。此示例还演示如何使用 Commit、BeginTransaction 和 Rollback 等方法。 下面的示例创建派生类 SqlConnection 和 SqlTransaction 的实例。此示例还演示如何使用 Commit、BeginTransaction 和 Rollback 等方法。

Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()
        Dim transaction As SqlTransaction

        ' Start a local transaction
        transaction = connection.BeginTransaction("SampleTransaction")

        ' Must assign both transaction object and connection
        ' to Command object for a pending local transaction.
        command.Connection = connection
        command.Transaction = transaction

        Try
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            command.ExecuteNonQuery()
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"

            command.ExecuteNonQuery()

            ' Attempt to commit the transaction.
            transaction.Commit()
            Console.WriteLine("Both records are written to database.")

        Catch ex As Exception
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
            Console.WriteLine("  Message: {0}", ex.Message)

            ' Attempt to roll back the transaction.
            Try
                transaction.Rollback()

            Catch ex2 As Exception
                ' This catch block will handle any errors that may have occurred
                ' on the server that would cause the rollback to fail, such as
                ' a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
                Console.WriteLine("  Message: {0}", ex2.Message)
            End Try
        End Try
    End Using
End Sub

private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;

        // Start a local transaction.
        transaction = connection.BeginTransaction("SampleTransaction");

        // Must assign both transaction object and connection
        // to Command object for a pending local transaction
        command.Connection = connection;
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();

            // Attempt to commit the transaction.
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
            Console.WriteLine("  Message: {0}", ex.Message);

            // Attempt to roll back the transaction.
            try
            {
                transaction.Rollback();
            }
            catch (Exception ex2)
            {
                // This catch block will handle any errors that may have occurred
                // on the server that would cause the rollback to fail, such as
                // a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                Console.WriteLine("  Message: {0}", ex2.Message);
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbTransaction 接口
IDbTransaction 成员
System.Data 命名空间
BeginTransaction
Save
Rollback


IDbTransaction ..::.Rollback 方法

IDbTransaction
.
.
::
.
Rollback 方法
IDbTransaction 接口

从挂起状态回滚事务。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub Rollback
void Rollback()
void Rollback()
abstract Rollback : unit -> unit

异常 | 条件
Exception | 尝试提交事务时出错。
InvalidOperationException | 事务已提交或回滚。 - 或 - 连接已断开。

只能从挂起状态（在调用 BeginTransaction 之后，但在调用 Commit 之前）回滚事务。

对继承者的说明

重写派生类中的 Rollback 时，确保调用基类的 Rollback 方法。

下面的示例创建派生类 SqlConnection 和 SqlTransaction 的实例。此示例还演示如何使用 BeginTransaction、Commit 和 Rollback 等方法。 下面的示例创建派生类 SqlConnection 和 SqlTransaction 的实例。此示例还演示如何使用 BeginTransaction、Commit 和 Rollback 等方法。

Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()
        Dim transaction As SqlTransaction

        ' Start a local transaction
        transaction = connection.BeginTransaction("SampleTransaction")

        ' Must assign both transaction object and connection
        ' to Command object for a pending local transaction.
        command.Connection = connection
        command.Transaction = transaction

        Try
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            command.ExecuteNonQuery()
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"

            command.ExecuteNonQuery()

            ' Attempt to commit the transaction.
            transaction.Commit()
            Console.WriteLine("Both records are written to database.")

        Catch ex As Exception
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
            Console.WriteLine("  Message: {0}", ex.Message)

            ' Attempt to roll back the transaction.
            Try
                transaction.Rollback()

            Catch ex2 As Exception
                ' This catch block will handle any errors that may have occurred
                ' on the server that would cause the rollback to fail, such as
                ' a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
                Console.WriteLine("  Message: {0}", ex2.Message)
            End Try
        End Try
    End Using
End Sub

private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;

        // Start a local transaction.
        transaction = connection.BeginTransaction("SampleTransaction");

        // Must assign both transaction object and connection
        // to Command object for a pending local transaction
        command.Connection = connection;
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();

            // Attempt to commit the transaction.
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
            Console.WriteLine("  Message: {0}", ex.Message);

            // Attempt to roll back the transaction.
            try
            {
                transaction.Rollback();
            }
            catch (Exception ex2)
            {
                // This catch block will handle any errors that may have occurred
                // on the server that would cause the rollback to fail, such as
                // a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                Console.WriteLine("  Message: {0}", ex2.Message);
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbTransaction 接口
IDbTransaction 成员
System.Data 命名空间
Commit
BeginTransaction


IDbTransaction 属性

IDbTransaction 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IDbTransaction 接口

IDbTransaction 类型公开以下成员。

名称 说明
页首

参考

IDbTransaction 接口
System.Data 命名空间


IDbTransaction ..::.Connection 属性

IDbTransaction
.
.
::
.
Connection 属性
IDbTransaction 接口

指定要与事务关联的 Connection 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property Connection As IDbConnection
    Get
IDbConnection Connection { get; }
property IDbConnection^ Connection {
    IDbConnection^ get ();
}
abstract Connection : IDbConnection

属性值

类型： System.Data IDbConnection
要与事务关联的 Connection 对象。

一个应用程序可以有多个数据库连接，每个连接都有零或多个事务。此属性使您能够确定要与特定事务关联的连接对象。 一个应用程序可以有多个数据库连接，每个连接都有零或多个事务。此属性使您能够确定要与特定事务关联的连接对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbTransaction 接口
IDbTransaction 成员
System.Data 命名空间


IDbTransaction ..::.IsolationLevel 属性

IDbTransaction
.
.
::
.
IsolationLevel 属性
IDbTransaction 接口

指定该事务的 IsolationLevel。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property IsolationLevel As IsolationLevel
    Get
IsolationLevel IsolationLevel { get; }
property IsolationLevel IsolationLevel {
    IsolationLevel get ();
}
abstract IsolationLevel : IsolationLevel

属性值

类型： System.Data IsolationLevel
该事务的 IsolationLevel。默认为 ReadCommitted。 该事务的 IsolationLevel。默认为 ReadCommitted。

不支持并行事务。因此，IsolationLevel 应用于整个事务。 不支持并行事务。因此，IsolationLevel 应用于整个事务。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

IDbTransaction 接口
IDbTransaction 成员
System.Data 命名空间


IExtendedDataRecord 接口

IExtendedDataRecord 接口
成员

提供对 DbDataReader 的 DbDataRecord 的每一行内列值的访问。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Interface IExtendedDataRecord _
    Inherits IDataRecord
public interface IExtendedDataRecord : IDataRecord
public interface class IExtendedDataRecord : IDataRecord
type IExtendedDataRecord =
    interface
        interface IDataRecord
    end

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

IExtendedDataRecord 成员
System.Data 命名空间


IExtendedDataRecord 成员

IExtendedDataRecord 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IExtendedDataRecord 接口

提供对 DbDataReader 的 DbDataRecord 的每一行内列值的访问。

IExtendedDataRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IExtendedDataRecord 接口
System.Data 命名空间


IExtendedDataRecord 方法

IExtendedDataRecord 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IExtendedDataRecord 接口

IExtendedDataRecord 类型公开以下成员。

名称 说明
页首

参考

IExtendedDataRecord 接口
System.Data 命名空间


IExtendedDataRecord ..::.GetDataReader 方法

IExtendedDataRecord
.
.
::
.
GetDataReader 方法
IExtendedDataRecord 接口

以 DbDataReader 对象的形式返回嵌套的读取器。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Function GetDataReader ( _
    i As Integer _
) As DbDataReader
DbDataReader GetDataReader(
    int i
)
DbDataReader^ GetDataReader(
    int i
)
abstract GetDataReader :
        i:int -> DbDataReader

参数

i
类型： System Int32
列的序号。

返回值

类型： System.Data.Common DbDataReader
采用 DbDataReader 对象形式的嵌套读取器。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

IExtendedDataRecord 接口
IExtendedDataRecord 成员
System.Data 命名空间


IExtendedDataRecord ..::.GetDataRecord 方法

IExtendedDataRecord
.
.
::
.
GetDataRecord 方法
IExtendedDataRecord 接口

使用指定的索引获取一个 DbDataRecord 对象。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Function GetDataRecord ( _
    i As Integer _
) As DbDataRecord
DbDataRecord GetDataRecord(
    int i
)
DbDataRecord^ GetDataRecord(
    int i
)
abstract GetDataRecord :
        i:int -> DbDataRecord

参数

i
类型： System Int32
行的索引。

返回值

类型： System.Data.Common DbDataRecord
一个 DbDataRecord 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

IExtendedDataRecord 接口
IExtendedDataRecord 成员
System.Data 命名空间


IExtendedDataRecord 属性

IExtendedDataRecord 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IExtendedDataRecord 接口

IExtendedDataRecord 类型公开以下成员。

名称 说明
页首

参考

IExtendedDataRecord 接口
System.Data 命名空间


IExtendedDataRecord ..::.DataRecordInfo 属性

IExtendedDataRecord
.
.
::
.
DataRecordInfo 属性
IExtendedDataRecord 接口

获取此 IExtendedDataRecord 的 DataRecordInfo。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
ReadOnly Property DataRecordInfo As DataRecordInfo
    Get
DataRecordInfo DataRecordInfo { get; }
property DataRecordInfo^ DataRecordInfo {
    DataRecordInfo^ get ();
}
abstract DataRecordInfo : DataRecordInfo

属性值

类型： System.Data.Common DataRecordInfo
一个 DataRecordInfo 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

IExtendedDataRecord 接口
IExtendedDataRecord 成员
System.Data 命名空间


IExtendedDataRecord ..::.Item 属性

IExtendedDataRecord
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IExtendedDataRecord 接口

获取指定的列。

名称 说明
页首

参考

IExtendedDataRecord 接口
IExtendedDataRecord 成员
System.Data 命名空间


InRowChangingEventException 类

InRowChangingEventException 类
成员

表示在 RowChanging 事件中调用 EndEdit 方法时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class InRowChangingEventException _
    Inherits DataException
[SerializableAttribute]
public class InRowChangingEventException : DataException
[SerializableAttribute]
public ref class InRowChangingEventException : public DataException
[<SerializableAttribute>]
type InRowChangingEventException =
    class
        inherit DataException
    end

System.Data System.Data..::.InRowChangingEventExceptionInRowChangingEventException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InRowChangingEventException 成员
System.Data 命名空间


InRowChangingEventException 成员

InRowChangingEventException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InRowChangingEventException 类

表示在 RowChanging 事件中调用 EndEdit 方法时引发的异常。

InRowChangingEventException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InRowChangingEventException 类
System.Data 命名空间


InRowChangingEventException 构造函数

InRowChangingEventException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InRowChangingEventException 类

初始化 InRowChangingEventException 类的一个新实例。

名称 说明
页首

参考

InRowChangingEventException 类
InRowChangingEventException 成员
System.Data 命名空间


InRowChangingEventException 构造函数

InRowChangingEventException 构造函数
InRowChangingEventException 类

初始化 InRowChangingEventException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public InRowChangingEventException()
public:
InRowChangingEventException()
new : unit -> InRowChangingEventException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InRowChangingEventException 类
InRowChangingEventException 成员
InRowChangingEventException 重载
System.Data 命名空间


InRowChangingEventException 构造函数 (String)

InRowChangingEventException 构造函数 (String)
InRowChangingEventException 类

使用指定的字符串初始化 InRowChangingEventException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public InRowChangingEventException(
    string s
)
public:
InRowChangingEventException(
    String^ s
)
new :
        s:string -> InRowChangingEventException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InRowChangingEventException 类
InRowChangingEventException 成员
InRowChangingEventException 重载
System.Data 命名空间


InRowChangingEventException 构造函数 (SerializationInfo, StreamingContext)

InRowChangingEventException 构造函数 (SerializationInfo, StreamingContext)
InRowChangingEventException 类

以序列化信息初始化 InRowChangingEventException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected InRowChangingEventException(
    SerializationInfo info,
    StreamingContext context
)
protected:
InRowChangingEventException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> InRowChangingEventException

参数

info
类型： System.Runtime.Serialization SerializationInfo
序列化或反序列化某个对象所需的数据。。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

InRowChangingEventException 类
InRowChangingEventException 成员
InRowChangingEventException 重载
System.Data 命名空间
StreamingContext
SerializationInfo


InRowChangingEventException 构造函数 (String, Exception)

InRowChangingEventException 构造函数 (String, Exception)
InRowChangingEventException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 InRowChangingEventException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public InRowChangingEventException(
    string message,
    Exception innerException
)
public:
InRowChangingEventException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> InRowChangingEventException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InRowChangingEventException 类
InRowChangingEventException 成员
InRowChangingEventException 重载
System.Data 命名空间


InRowChangingEventException 方法

InRowChangingEventException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InRowChangingEventException 类

InRowChangingEventException 类型公开以下成员。

名称 说明
页首

参考

InRowChangingEventException 类
System.Data 命名空间


InRowChangingEventException 属性

InRowChangingEventException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InRowChangingEventException 类

InRowChangingEventException 类型公开以下成员。

名称 说明
页首

参考

InRowChangingEventException 类
System.Data 命名空间


InRowChangingEventException 事件

InRowChangingEventException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InRowChangingEventException 类

InRowChangingEventException 类型公开以下成员。

名称 说明
页首

参考

InRowChangingEventException 类
System.Data 命名空间


InternalDataCollectionBase 类

InternalDataCollectionBase 类
成员

提供用于创建集合的基本功能。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class InternalDataCollectionBase _
    Implements ICollection, IEnumerable
public class InternalDataCollectionBase : ICollection,
    IEnumerable
public ref class InternalDataCollectionBase : ICollection,
    IEnumerable
type InternalDataCollectionBase =
    class
        interface ICollection
        interface IEnumerable
    end

BaseCollection 类及其成员不用作独立组件，而是用作供其他集合类派生标准功能的类。

System.Data System.Data..::.InternalDataCollectionBaseInternalDataCollectionBase

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InternalDataCollectionBase 成员
System.Data 命名空间


InternalDataCollectionBase 成员

InternalDataCollectionBase 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InternalDataCollectionBase 类

提供用于创建集合的基本功能。

InternalDataCollectionBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InternalDataCollectionBase 类
System.Data 命名空间


InternalDataCollectionBase 构造函数

InternalDataCollectionBase 构造函数
InternalDataCollectionBase 类

初始化 InternalDataCollectionBase 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public InternalDataCollectionBase()
public:
InternalDataCollectionBase()
new : unit -> InternalDataCollectionBase

BaseCollection 类及其成员不用作独立组件，而是用作供其他集合类派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InternalDataCollectionBase 类
InternalDataCollectionBase 成员
System.Data 命名空间


InternalDataCollectionBase 方法

InternalDataCollectionBase 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InternalDataCollectionBase 类

InternalDataCollectionBase 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

InternalDataCollectionBase 类
System.Data 命名空间


InternalDataCollectionBase ..::.CopyTo 方法

InternalDataCollectionBase
.
.
::
.
CopyTo 方法
InternalDataCollectionBase 类

将当前 InternalDataCollectionBase 的所有元素复制到一维 Array，在指定 InternalDataCollectionBase 索引处开始。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub CopyTo ( _
    ar As Array, _
    index As Integer _
)
public virtual void CopyTo(
    Array ar,
    int index
)
public:
virtual void CopyTo(
    Array^ ar,
    int index
)
abstract CopyTo :
        ar:Array *
        index:int -> unit
override CopyTo :
        ar:Array *
        index:int -> unit

参数

ar
类型： System Array
要将当前 InternalDataCollectionBase 对象的元素复制到其中的一维 Array。
index
类型： System Int32
开始复制到其中的目标 Array 索引。

实现

此方法可由派生类重写。

BaseCollection 类及其成员不用作独立组件，而是用作供其他集合类派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InternalDataCollectionBase 类
InternalDataCollectionBase 成员
System.Data 命名空间


InternalDataCollectionBase ..::.GetEnumerator 方法

InternalDataCollectionBase
.
.
::
.
GetEnumerator 方法
InternalDataCollectionBase 类

获取集合的 IEnumerator。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function GetEnumerator As IEnumerator
public virtual IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator()
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
集合的 IEnumerator。

实现

BaseCollection 类及其成员不用作独立组件，而是用作供其他集合类派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InternalDataCollectionBase 类
InternalDataCollectionBase 成员
System.Data 命名空间


InternalDataCollectionBase 属性

InternalDataCollectionBase 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InternalDataCollectionBase 类

InternalDataCollectionBase 类型公开以下成员。

名称 说明
页首

参考

InternalDataCollectionBase 类
System.Data 命名空间


InternalDataCollectionBase ..::.Count 属性

InternalDataCollectionBase
.
.
::
.
Count 属性
InternalDataCollectionBase 类

获取集合中的元素的总数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overridable ReadOnly Property Count As Integer
    Get
[BrowsableAttribute(false)]
public virtual int Count { get; }
[BrowsableAttribute(false)]
public:
virtual property int Count {
    int get ();
}
[<BrowsableAttribute(false)>]
abstract Count : int
[<BrowsableAttribute(false)>]
override Count : int

属性值

类型： System Int32
集合中的元素的总数。

实现

BaseCollection 类及其成员不用作独立组件，而是用作供其他集合类派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InternalDataCollectionBase 类
InternalDataCollectionBase 成员
System.Data 命名空间


InternalDataCollectionBase ..::.IsReadOnly 属性

InternalDataCollectionBase
.
.
::
.
IsReadOnly 属性
InternalDataCollectionBase 类

获取一个值，该值指示 InternalDataCollectionBase 是否为只读。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property IsReadOnly As Boolean
    Get
[BrowsableAttribute(false)]
public bool IsReadOnly { get; }
[BrowsableAttribute(false)]
public:
property bool IsReadOnly {
    bool get ();
}
[<BrowsableAttribute(false)>]
member IsReadOnly : bool

属性值

类型： System Boolean
如果该集合为只读，则为 true；否则为 false。默认为 false。 如果该集合为只读，则为 true；否则为 false。默认为 false。

BaseCollection 类及其成员不用作独立组件，而是用作供其他集合类派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InternalDataCollectionBase 类
InternalDataCollectionBase 成员
System.Data 命名空间


InternalDataCollectionBase ..::.IsSynchronized 属性

InternalDataCollectionBase
.
.
::
.
IsSynchronized 属性
InternalDataCollectionBase 类

获取一个值，该值指示 InternalDataCollectionBase 是否是同步的。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property IsSynchronized As Boolean
    Get
[BrowsableAttribute(false)]
public bool IsSynchronized { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsSynchronized {
    bool get () sealed;
}
[<BrowsableAttribute(false)>]
abstract IsSynchronized : bool
[<BrowsableAttribute(false)>]
override IsSynchronized : bool

属性值

类型： System Boolean
如果集合是同步的，则为 true；否则为 false。默认为 false。 如果集合是同步的，则为 true；否则为 false。默认为 false。

实现

BaseCollection 类及其成员不用作独立组件，而是用作供其他集合类派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InternalDataCollectionBase 类
InternalDataCollectionBase 成员
System.Data 命名空间


InternalDataCollectionBase ..::.List 属性

InternalDataCollectionBase
.
.
::
.
List 属性
InternalDataCollectionBase 类

作为列表获取集合的项。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable ReadOnly Property List As ArrayList
    Get
protected virtual ArrayList List { get; }
protected:
virtual property ArrayList^ List {
    ArrayList^ get ();
}
abstract List : ArrayList
override List : ArrayList

属性值

类型： System.Collections ArrayList
包含集合的 ArrayList。

BaseCollection 类及其成员不用作独立组件，而是用作供其他集合类派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InternalDataCollectionBase 类
InternalDataCollectionBase 成员
System.Data 命名空间


InternalDataCollectionBase ..::.SyncRoot 属性

InternalDataCollectionBase
.
.
::
.
SyncRoot 属性
InternalDataCollectionBase 类

获取可用于同步集合的对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property SyncRoot As Object
    Get
[BrowsableAttribute(false)]
public Object SyncRoot { get; }
[BrowsableAttribute(false)]
public:
virtual property Object^ SyncRoot {
    Object^ get () sealed;
}
[<BrowsableAttribute(false)>]
abstract SyncRoot : Object
[<BrowsableAttribute(false)>]
override SyncRoot : Object

属性值

类型： System Object
用于同步集合的 object。

实现

BaseCollection 类及其成员不用作独立组件，而是用作供其他集合类派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InternalDataCollectionBase 类
InternalDataCollectionBase 成员
System.Data 命名空间


InvalidCommandTreeException 类

InvalidCommandTreeException 类
成员

一个可引发以指示命令目录树无效的异常。当前，在 Entity Framework 中的任何位置都不会引发此异常。 一个可引发以指示命令目录树无效的异常。当前，在 Entity Framework 中的任何位置都不会引发此异常。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class InvalidCommandTreeException _
    Inherits DataException
[SerializableAttribute]
public sealed class InvalidCommandTreeException : DataException
[SerializableAttribute]
public ref class InvalidCommandTreeException sealed : public DataException
[<SealedAttribute>]
[<SerializableAttribute>]
type InvalidCommandTreeException =
    class
        inherit DataException
    end

System.Data System.Data..::.InvalidCommandTreeExceptionInvalidCommandTreeException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

InvalidCommandTreeException 成员
System.Data 命名空间


InvalidCommandTreeException 成员

InvalidCommandTreeException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCommandTreeException 类

一个可引发以指示命令目录树无效的异常。当前，在 Entity Framework 中的任何位置都不会引发此异常。 一个可引发以指示命令目录树无效的异常。当前，在 Entity Framework 中的任何位置都不会引发此异常。

InvalidCommandTreeException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InvalidCommandTreeException 类
System.Data 命名空间


InvalidCommandTreeException 构造函数

InvalidCommandTreeException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCommandTreeException 类

初始化 InvalidCommandTreeException 类的新实例。

名称 说明
页首

参考

InvalidCommandTreeException 类
InvalidCommandTreeException 成员
System.Data 命名空间


InvalidCommandTreeException 构造函数

InvalidCommandTreeException 构造函数
InvalidCommandTreeException 类

使用默认消息初始化 InvalidCommandTreeException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public InvalidCommandTreeException()
public:
InvalidCommandTreeException()
new : unit -> InvalidCommandTreeException

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

InvalidCommandTreeException 类
InvalidCommandTreeException 成员
InvalidCommandTreeException 重载
System.Data 命名空间


InvalidCommandTreeException 构造函数 (String)

InvalidCommandTreeException 构造函数 (String)
InvalidCommandTreeException 类

用指定消息初始化 InvalidCommandTreeException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public InvalidCommandTreeException(
    string message
)
public:
InvalidCommandTreeException(
    String^ message
)
new :
        message:string -> InvalidCommandTreeException

参数

message
类型： System String
异常消息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

InvalidCommandTreeException 类
InvalidCommandTreeException 成员
InvalidCommandTreeException 重载
System.Data 命名空间


InvalidCommandTreeException 构造函数 (String, Exception)

InvalidCommandTreeException 构造函数 (String, Exception)
InvalidCommandTreeException 类

使用指定的消息和内部异常初始化 InvalidCommandTreeException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public InvalidCommandTreeException(
    string message,
    Exception innerException
)
public:
InvalidCommandTreeException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> InvalidCommandTreeException

参数

message
类型： System String
异常消息。
innerException
类型： System Exception
导致此 InvalidCommandTreeException 的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

InvalidCommandTreeException 类
InvalidCommandTreeException 成员
InvalidCommandTreeException 重载
System.Data 命名空间


InvalidCommandTreeException 方法

InvalidCommandTreeException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCommandTreeException 类

InvalidCommandTreeException 类型公开以下成员。

名称 说明
页首

参考

InvalidCommandTreeException 类
System.Data 命名空间


InvalidCommandTreeException 属性

InvalidCommandTreeException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCommandTreeException 类

InvalidCommandTreeException 类型公开以下成员。

名称 说明
页首

参考

InvalidCommandTreeException 类
System.Data 命名空间


InvalidCommandTreeException 事件

InvalidCommandTreeException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidCommandTreeException 类

InvalidCommandTreeException 类型公开以下成员。

名称 说明
页首

参考

InvalidCommandTreeException 类
System.Data 命名空间


InvalidConstraintException 类

InvalidConstraintException 类
成员

表示在不正确地尝试创建或访问关系时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class InvalidConstraintException _
    Inherits DataException
[SerializableAttribute]
public class InvalidConstraintException : DataException
[SerializableAttribute]
public ref class InvalidConstraintException : public DataException
[<SerializableAttribute>]
type InvalidConstraintException =
    class
        inherit DataException
    end

如果在尝试创建或访问关系时不正确地调用以下方法，则会引发 InvalidConstraintException。

  • DataRelationCollection Add

  • DataRowCollection Clear

  • DataRow GetParentRow

如果调用 Add，且如果无法基于参数中提供的值创建关系，则可能会引发 InvalidConstraintException。如果调用 Clear，且如果在 DataRowCollection 上强制 ForeignKeyConstraint，则可能会引发 InvalidConstraintException。如果调用 GetParentRow，且如果各列具有不同的数据类型或者各个表不属于同一 DataSet，则可能会引发 InvalidConstraintException。 如果调用 Add，且如果无法基于参数中提供的值创建关系，则可能会引发 InvalidConstraintException。如果调用 Clear，且如果在 DataRowCollection 上强制 ForeignKeyConstraint，则可能会引发 InvalidConstraintException。如果调用 GetParentRow，且如果各列具有不同的数据类型或者各个表不属于同一 DataSet，则可能会引发 InvalidConstraintException。 如果调用 Add，且如果无法基于参数中提供的值创建关系，则可能会引发 InvalidConstraintException。如果调用 Clear，且如果在 DataRowCollection 上强制 ForeignKeyConstraint，则可能会引发 InvalidConstraintException。如果调用 GetParentRow，且如果各列具有不同的数据类型或者各个表不属于同一 DataSet，则可能会引发 InvalidConstraintException。

System.Data System.Data..::.InvalidConstraintExceptionInvalidConstraintException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidConstraintException 成员
System.Data 命名空间


InvalidConstraintException 成员

InvalidConstraintException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidConstraintException 类

表示在不正确地尝试创建或访问关系时引发的异常。

InvalidConstraintException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InvalidConstraintException 类
System.Data 命名空间


InvalidConstraintException 构造函数

InvalidConstraintException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidConstraintException 类

初始化 InvalidConstraintException 类的一个新实例。

名称 说明
页首

参考

InvalidConstraintException 类
InvalidConstraintException 成员
System.Data 命名空间


InvalidConstraintException 构造函数

InvalidConstraintException 构造函数
InvalidConstraintException 类

初始化 InvalidConstraintException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public InvalidConstraintException()
public:
InvalidConstraintException()
new : unit -> InvalidConstraintException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidConstraintException 类
InvalidConstraintException 成员
InvalidConstraintException 重载
System.Data 命名空间


InvalidConstraintException 构造函数 (String)

InvalidConstraintException 构造函数 (String)
InvalidConstraintException 类

使用指定的字符串初始化 InvalidConstraintException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public InvalidConstraintException(
    string s
)
public:
InvalidConstraintException(
    String^ s
)
new :
        s:string -> InvalidConstraintException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidConstraintException 类
InvalidConstraintException 成员
InvalidConstraintException 重载
System.Data 命名空间


InvalidConstraintException 构造函数 (SerializationInfo, StreamingContext)

InvalidConstraintException 构造函数 (SerializationInfo, StreamingContext)
InvalidConstraintException 类

以序列化信息初始化 InvalidConstraintException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected InvalidConstraintException(
    SerializationInfo info,
    StreamingContext context
)
protected:
InvalidConstraintException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> InvalidConstraintException

参数

info
类型： System.Runtime.Serialization SerializationInfo
序列化或反序列化某个对象所需的数据。。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

InvalidConstraintException 类
InvalidConstraintException 成员
InvalidConstraintException 重载
System.Data 命名空间
StreamingContext
SerializationInfo


InvalidConstraintException 构造函数 (String, Exception)

InvalidConstraintException 构造函数 (String, Exception)
InvalidConstraintException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 InvalidConstraintException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public InvalidConstraintException(
    string message,
    Exception innerException
)
public:
InvalidConstraintException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> InvalidConstraintException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidConstraintException 类
InvalidConstraintException 成员
InvalidConstraintException 重载
System.Data 命名空间


InvalidConstraintException 方法

InvalidConstraintException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidConstraintException 类

InvalidConstraintException 类型公开以下成员。

名称 说明
页首

参考

InvalidConstraintException 类
System.Data 命名空间


InvalidConstraintException 属性

InvalidConstraintException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidConstraintException 类

InvalidConstraintException 类型公开以下成员。

名称 说明
页首

参考

InvalidConstraintException 类
System.Data 命名空间


InvalidConstraintException 事件

InvalidConstraintException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidConstraintException 类

InvalidConstraintException 类型公开以下成员。

名称 说明
页首

参考

InvalidConstraintException 类
System.Data 命名空间


InvalidExpressionException 类

InvalidExpressionException 类
成员

表示在尝试将包含无效 Expression 的 DataColumn 添加到 DataColumnCollection 中时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class InvalidExpressionException _
    Inherits DataException
[SerializableAttribute]
public class InvalidExpressionException : DataException
[SerializableAttribute]
public ref class InvalidExpressionException : public DataException
[<SerializableAttribute>]
type InvalidExpressionException =
    class
        inherit DataException
    end

Expression 属性用于计算列的值，或创建聚合列。

System.Data System.Data..::.InvalidExpressionExceptionInvalidExpressionException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidExpressionException 成员
System.Data 命名空间


InvalidExpressionException 成员

InvalidExpressionException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidExpressionException 类

表示在尝试将包含无效 Expression 的 DataColumn 添加到 DataColumnCollection 中时引发的异常。

InvalidExpressionException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InvalidExpressionException 类
System.Data 命名空间


InvalidExpressionException 构造函数

InvalidExpressionException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidExpressionException 类

初始化 InvalidExpressionException 类的一个新实例。

名称 说明
页首

参考

InvalidExpressionException 类
InvalidExpressionException 成员
System.Data 命名空间


InvalidExpressionException 构造函数

InvalidExpressionException 构造函数
InvalidExpressionException 类

初始化 InvalidExpressionException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public InvalidExpressionException()
public:
InvalidExpressionException()
new : unit -> InvalidExpressionException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidExpressionException 类
InvalidExpressionException 成员
InvalidExpressionException 重载
System.Data 命名空间


InvalidExpressionException 构造函数 (String)

InvalidExpressionException 构造函数 (String)
InvalidExpressionException 类

使用指定的字符串初始化 InvalidExpressionException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public InvalidExpressionException(
    string s
)
public:
InvalidExpressionException(
    String^ s
)
new :
        s:string -> InvalidExpressionException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidExpressionException 类
InvalidExpressionException 成员
InvalidExpressionException 重载
System.Data 命名空间


InvalidExpressionException 构造函数 (SerializationInfo, StreamingContext)

InvalidExpressionException 构造函数 (SerializationInfo, StreamingContext)
InvalidExpressionException 类

使用 SerializationInfo 和 StreamingContext 初始化 InvalidExpressionException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected InvalidExpressionException(
    SerializationInfo info,
    StreamingContext context
)
protected:
InvalidExpressionException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> InvalidExpressionException

参数

info
类型： System.Runtime.Serialization SerializationInfo
将对象序列化或反序列化所需的数据。
context
类型： System.Runtime.Serialization StreamingContext
给定序列化流的源和目的地。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

InvalidExpressionException 类
InvalidExpressionException 成员
InvalidExpressionException 重载
System.Data 命名空间


InvalidExpressionException 构造函数 (String, Exception)

InvalidExpressionException 构造函数 (String, Exception)
InvalidExpressionException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 InvalidExpressionException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public InvalidExpressionException(
    string message,
    Exception innerException
)
public:
InvalidExpressionException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> InvalidExpressionException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

InvalidExpressionException 类
InvalidExpressionException 成员
InvalidExpressionException 重载
System.Data 命名空间


InvalidExpressionException 方法

InvalidExpressionException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidExpressionException 类

InvalidExpressionException 类型公开以下成员。

名称 说明
页首

参考

InvalidExpressionException 类
System.Data 命名空间


InvalidExpressionException 属性

InvalidExpressionException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidExpressionException 类

InvalidExpressionException 类型公开以下成员。

名称 说明
页首

参考

InvalidExpressionException 类
System.Data 命名空间


InvalidExpressionException 事件

InvalidExpressionException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InvalidExpressionException 类

InvalidExpressionException 类型公开以下成员。

名称 说明
页首

参考

InvalidExpressionException 类
System.Data 命名空间


IsolationLevel 枚举

IsolationLevel 枚举

指定连接的事务锁定行为。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration IsolationLevel
public enum IsolationLevel
public enum class IsolationLevel
type IsolationLevel
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Unspecified | 正在使用与指定隔离级别不同的隔离级别，但是无法确定该级别。 当使用 OdbcTransaction 时，如果不设置 IsolationLevel 或将 IsolationLevel 设置为 Unspecified，则事务将根据由所使用的驱动程序所决定的隔离级别来执行。
由 XNA Framework 提供支持 | Chaos | 无法覆盖隔离级别更高的事务中的挂起的更改。
由 XNA Framework 提供支持 | ReadUncommitted | 可以进行脏读，意思是说，不发布共享锁，也不接受独占锁。
由 XNA Framework 提供支持 | ReadCommitted | 在正在读取数据时保持共享锁，以避免脏读，但是在事务结束之前可以更改数据，从而导致不可重复的读取或幻像数据。
由 XNA Framework 提供支持 | RepeatableRead | 在查询中使用的所有数据上放置锁，以防止其他用户更新这些数据。防止不可重复的读取，但是仍可以有幻像行。 在查询中使用的所有数据上放置锁，以防止其他用户更新这些数据。防止不可重复的读取，但是仍可以有幻像行。
由 XNA Framework 提供支持 | Serializable | 在 DataSet 上放置范围锁，以防止在事务完成之前由其他用户更新行或向数据集中插入行。
由 XNA Framework 提供支持 | Snapshot | 通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。表示您无法从一个事务中看到在其他事务中进行的更改，即便重新查询也是如此。 通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。表示您无法从一个事务中看到在其他事务中进行的更改，即便重新查询也是如此。

在执行事务时，.NET Framework 数据提供程序使用 IsolationLevel 值。

在显式更改之前，IsolationLevel 保持有效，但是可以随时对它进行更改。新值在执行时使用，而不是在分析时使用。如果在事务期间更改，服务器的预期行为是，对其余所有语句应用新的锁定级别。 在显式更改之前，IsolationLevel 保持有效，但是可以随时对它进行更改。新值在执行时使用，而不是在分析时使用。如果在事务期间更改，服务器的预期行为是，对其余所有语句应用新的锁定级别。 在显式更改之前，IsolationLevel 保持有效，但是可以随时对它进行更改。新值在执行时使用，而不是在分析时使用。如果在事务期间更改，服务器的预期行为是，对其余所有语句应用新的锁定级别。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


ITableMapping 接口

ITableMapping 接口
成员

将源表与 DataSet 中的表关联，并由 DataTableMapping 类实现，该类由 .NET Framework 数据提供程序共同使用。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface ITableMapping
public interface ITableMapping
public interface class ITableMapping
type ITableMapping =  interface end

ITableMapping 接口允许继承类实现 TableMapping 类，TableMapping 类将数据源列与 DataSet 列关联。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。 ITableMapping 接口允许继承类实现 TableMapping 类，TableMapping 类将数据源列与 DataSet 列关联。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。

应用程序不直接创建 ITableMapping 接口的实例，而是创建继承 ITableMapping 的类的实例。

继承 ITableMapping 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，ITableMapping 接口定义 DataSetTable 属性。然后，DataTableMapping 类继承此属性，还定义 GetDataTableBySchemaAction 方法。 继承 ITableMapping 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，ITableMapping 接口定义 DataSetTable 属性。然后，DataTableMapping 类继承此属性，还定义 GetDataTableBySchemaAction 方法。 继承 ITableMapping 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，ITableMapping 接口定义 DataSetTable 属性。然后，DataTableMapping 类继承此属性，还定义 GetDataTableBySchemaAction 方法。

对实现者的说明

在从 ITableMapping 接口继承时，应实现下列构造函数：

项 | 说明
DataTableMapping() | 初始化 TableMapping 类的新实例。
TableMapping(string sourceTable, string dataSetTable) | 在给定源表名称和 DataTable 名称的情况下，用源初始化 TableMapping 类的新实例。
TableMapping(string sourceTable, string dataSetTable, DataColumnMapping[] columnMappings) | 在给定源表名称、DataTable 名称和 ColumnMapping 对象的数组的情况下，初始化 TableMapping 类的新实例。

下面的示例创建派生类 DataTableMapping 的实例，并将其添加到 DataTableMappingCollection 集合中。然后，它通知用户，映射已添加到集合中，并显示其父映射。 下面的示例创建派生类 DataTableMapping 的实例，并将其添加到 DataTableMappingCollection 集合中。然后，它通知用户，映射已添加到集合中，并显示其父映射。

Public Sub AddDataTableMapping()
    ' ...
    ' create tableMappings
    ' ...
    Dim mapping As New DataTableMapping( _
       "Categories", "DataCategories")
    tableMappings.Add(CType(mapping, Object))
    Console.WriteLine( _
       "Table {0} added to {1} table mapping collection.", _
       mapping.ToString(), tableMappings.ToString())
End Sub

public void AddDataTableMapping()
{
    // ...
    // create tableMappings
    // ...
    DataTableMapping mapping =
        new DataTableMapping("Categories","DataCategories");
    tableMappings.Add((Object) mapping);
    Console.WriteLine("Table {0} added to {1} table mapping collection.",
        mapping.ToString(), tableMappings.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMapping 成员
System.Data 命名空间
ITableMappingCollection


ITableMapping 成员

ITableMapping 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMapping 接口

将源表与 DataSet 中的表关联，并由 DataTableMapping 类实现，该类由 .NET Framework 数据提供程序共同使用。

ITableMapping 类型公开以下成员。

名称 说明
页首

参考

ITableMapping 接口
System.Data 命名空间


ITableMapping 属性

ITableMapping 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMapping 接口

ITableMapping 类型公开以下成员。

名称 说明
页首

参考

ITableMapping 接口
System.Data 命名空间


ITableMapping ..::.ColumnMappings 属性

ITableMapping
.
.
::
.
ColumnMappings 属性
ITableMapping 接口

获取 DataTable 的派生 DataColumnMappingCollection。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
ReadOnly Property ColumnMappings As IColumnMappingCollection
    Get
IColumnMappingCollection ColumnMappings { get; }
property IColumnMappingCollection^ ColumnMappings {
    IColumnMappingCollection^ get ();
}
abstract ColumnMappings : IColumnMappingCollection

属性值

类型： System.Data IColumnMappingCollection
DataColumnMappingCollection。

下面的示例创建派生类 DataTableMapping 的实例，设置它的一些属性，并将它的 ColumnMappings 复制到数组。此示例假定已经创建了 DataColumnMappingCollection。 下面的示例创建派生类 DataTableMapping 的实例，设置它的一些属性，并将它的 ColumnMappings 复制到数组。此示例假定已经创建了 DataColumnMappingCollection。

Public Sub CreateDataTableMapping()
    ' ...
    ' create mappings
    ' ...
    Dim columns() As DataColumnMapping
    ' Copy mappings to array
    mappings.CopyTo(columns, 0)
    Dim mapping As New DataTableMapping _
       ("Categories", "DataCategories", columns)
End Sub

public void CreateDataTableMapping()
{
    // ...
    // create mappings
    // ...
    DataColumnMapping[] columns = {};
    // Copy mappings to array
    mappings.CopyTo(columns, 0);
    DataTableMapping mapping =
        new DataTableMapping("Categories", "DataCategories", columns);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMapping 接口
ITableMapping 成员
System.Data 命名空间


ITableMapping ..::.DataSetTable 属性

ITableMapping
.
.
::
.
DataSetTable 属性
ITableMapping 接口

获取或设置 DataSet 内的表的不区分大小写的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property DataSetTable As String
    Get
    Set
string DataSetTable { get; set; }
property String^ DataSetTable {
    String^ get ();
    void set (String^ value);
}
abstract DataSetTable : string with get, set

属性值

类型： System String
DataSet 内的表的不区分大小写的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMapping 接口
ITableMapping 成员
System.Data 命名空间


ITableMapping ..::.SourceTable 属性

ITableMapping
.
.
::
.
SourceTable 属性
ITableMapping 接口

获取或设置源表的区分大小写的名称。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property SourceTable As String
    Get
    Set
string SourceTable { get; set; }
property String^ SourceTable {
    String^ get ();
    void set (String^ value);
}
abstract SourceTable : string with get, set

属性值

类型： System String
源表的区分大小写的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMapping 接口
ITableMapping 成员
System.Data 命名空间


ITableMappingCollection 接口

ITableMappingCollection 接口
成员

包含 TableMapping 对象的集合，并由 DataTableMappingCollection（通常由 .NET Framework 数据提供程序使用）实现。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Interface ITableMappingCollection _
    Inherits IList, ICollection, IEnumerable
public interface ITableMappingCollection : IList,
    ICollection, IEnumerable
public interface class ITableMappingCollection : IList,
    ICollection, IEnumerable
type ITableMappingCollection =
    interface
        interface IList
        interface ICollection
        interface IEnumerable
    end

ITableMappingCollection 接口允许继承类实现 TableMapping 集合。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。 ITableMappingCollection 接口允许继承类实现 TableMapping 集合。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。

应用程序不直接创建 ITableMappingCollection 接口的实例，而是创建继承 ITableMappingCollection 的类的实例。

继承 ITableMappingCollection 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，ITableMappingCollection 接口定义 RemoveAt 方法的一个实现。然后，DataTableMappingCollection 类继承此方法，并定义 RemoveAt 的两个其他重载。 继承 ITableMappingCollection 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，ITableMappingCollection 接口定义 RemoveAt 方法的一个实现。然后，DataTableMappingCollection 类继承此方法，并定义 RemoveAt 的两个其他重载。 继承 ITableMappingCollection 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，ITableMappingCollection 接口定义 RemoveAt 方法的一个实现。然后，DataTableMappingCollection 类继承此方法，并定义 RemoveAt 的两个其他重载。

对实现者的说明

在从 ITableMappingCollection 接口继承时，应实现下列构造函数：

项 | 说明
PrvTableMappingCollection() | 创建空 PrvTableMappingCollection 类。

下面的示例创建派生类 DataTableMapping 的实例，并将其添加到 DataTableMappingCollection 集合中。然后，它通知用户已将映射添加到集合。 下面的示例创建派生类 DataTableMapping 的实例，并将其添加到 DataTableMappingCollection 集合中。然后，它通知用户已将映射添加到集合。

Public Sub AddDataTableMapping()
    ' ...
    ' create tableMappings
    ' ...
    Dim mapping As New DataTableMapping( _
       "Categories", "DataCategories")
    tableMappings.Add(CType(mapping, Object))
    Console.WriteLine( _
       "Table {0} added to {1} table mapping collection.", _
       mapping.ToString(), tableMappings.ToString())
End Sub

public void AddDataTableMapping()
{
    // ...
    // create tableMappings
    // ...
    DataTableMapping mapping =
        new DataTableMapping("Categories","DataCategories");
    tableMappings.Add((Object) mapping);
    Console.WriteLine("Table {0} added to {1} table mapping collection.",
        mapping.ToString(), tableMappings.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMappingCollection 成员
System.Data 命名空间


ITableMappingCollection 成员

ITableMappingCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMappingCollection 接口

包含 TableMapping 对象的集合，并由 DataTableMappingCollection（通常由 .NET Framework 数据提供程序使用）实现。

ITableMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ITableMappingCollection 接口
System.Data 命名空间


ITableMappingCollection 方法

ITableMappingCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMappingCollection 接口

ITableMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ITableMappingCollection 接口
System.Data 命名空间


ITableMappingCollection ..::.Add 方法

ITableMappingCollection
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMappingCollection 接口

名称 说明
页首

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
System.Data 命名空间


ITableMappingCollection ..::.Add 方法 (String, String)

ITableMappingCollection
.
.
::
.
Add 方法 (String, String)
ITableMappingCollection 接口

向集合添加表映射。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function Add ( _
    sourceTableName As String, _
    dataSetTableName As String _
) As ITableMapping
ITableMapping Add(
    string sourceTableName,
    string dataSetTableName
)
ITableMapping^ Add(
    String^ sourceTableName,
    String^ dataSetTableName
)
abstract Add :
        sourceTableName:string *
        dataSetTableName:string -> ITableMapping

参数

sourceTableName
类型： System String
源表的区分大小写的名称。
dataSetTableName
类型： System String
DataSet 表的名称。

返回值

类型： System.Data ITableMapping
对新映射的 ITableMapping 对象的引用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
Add 重载
System.Data 命名空间


ITableMappingCollection ..::.Contains 方法

ITableMappingCollection
.
.
::
.
Contains 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMappingCollection 接口

名称 说明
页首

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
System.Data 命名空间


ITableMappingCollection ..::.Contains 方法 (String)

ITableMappingCollection
.
.
::
.
Contains 方法 (String)
ITableMappingCollection 接口

获取一个值，该值指示集合是否包含具有指定源表名称的表映射。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function Contains ( _
    sourceTableName As String _
) As Boolean
bool Contains(
    string sourceTableName
)
bool Contains(
    String^ sourceTableName
)
abstract Contains :
        sourceTableName:string -> bool

参数

sourceTableName
类型： System String
源表的区分大小写的名称。

返回值

类型： System Boolean
如果存在具有指定源表名称的表映射，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
Contains 重载
System.Data 命名空间


ITableMappingCollection ..::.GetByDataSetTable 方法

ITableMappingCollection
.
.
::
.
GetByDataSetTable 方法
ITableMappingCollection 接口

获取具有指定的 DataSet 表名称的 TableMapping 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function GetByDataSetTable ( _
    dataSetTableName As String _
) As ITableMapping
ITableMapping GetByDataSetTable(
    string dataSetTableName
)
ITableMapping^ GetByDataSetTable(
    String^ dataSetTableName
)
abstract GetByDataSetTable :
        dataSetTableName:string -> ITableMapping

参数

dataSetTableName
类型： System String
集合内的 DataSet 表的名称。

返回值

类型： System.Data ITableMapping
具有指定的 DataSet 表名称的 TableMapping 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
System.Data 命名空间


ITableMappingCollection ..::.IndexOf 方法

ITableMappingCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMappingCollection 接口

名称 说明
页首

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
System.Data 命名空间


ITableMappingCollection ..::.IndexOf 方法 (String)

ITableMappingCollection
.
.
::
.
IndexOf 方法 (String)
ITableMappingCollection 接口

获取 ITableMapping 对象在集合内的位置。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Function IndexOf ( _
    sourceTableName As String _
) As Integer
int IndexOf(
    string sourceTableName
)
int IndexOf(
    String^ sourceTableName
)
abstract IndexOf :
        sourceTableName:string -> int

参数

sourceTableName
类型： System String
源表的区分大小写的名称。

返回值

类型： System Int32
ITableMapping 在集合内从零开始的位置。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
IndexOf 重载
System.Data 命名空间


ITableMappingCollection ..::.RemoveAt 方法

ITableMappingCollection
.
.
::
.
RemoveAt 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMappingCollection 接口

名称 说明
页首

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
System.Data 命名空间


ITableMappingCollection ..::.RemoveAt 方法 (String)

ITableMappingCollection
.
.
::
.
RemoveAt 方法 (String)
ITableMappingCollection 接口

从集合中移除带有指定的 SourceTable 名称的 ITableMapping 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Sub RemoveAt ( _
    sourceTableName As String _
)
void RemoveAt(
    string sourceTableName
)
void RemoveAt(
    String^ sourceTableName
)
abstract RemoveAt :
        sourceTableName:string -> unit

参数

sourceTableName
类型： System String
SourceTable 的区分大小写的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
RemoveAt 重载
System.Data 命名空间


ITableMappingCollection 属性

ITableMappingCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMappingCollection 接口

ITableMappingCollection 类型公开以下成员。

名称 说明
页首

参考

ITableMappingCollection 接口
System.Data 命名空间


ITableMappingCollection ..::.Item 属性

ITableMappingCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITableMappingCollection 接口

名称 说明
页首

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
System.Data 命名空间


ITableMappingCollection ..::.Item 属性 (String)

ITableMappingCollection
.
.
::
.
Item 属性 (String)
ITableMappingCollection 接口

获取或设置具有指定的 SourceTable 名称的 ITableMapping 的实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Property Item ( _
    index As String _
) As Object
    Get
    Set
Object this[
    string index
] { get; set; }
property Object^ Item[String^ index] {
    Object^ get (String^ index);
    void set (String^ index, Object^ value);
}
abstract Item : Object with get, set

参数

index
类型： System String
ITableMapping 的 SourceTable 名称。

属性值

类型： System Object
具有指定的 SourceTable 名称的 ITableMapping 的实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ITableMappingCollection 接口
ITableMappingCollection 成员
Item 重载
System.Data 命名空间


KeyRestrictionBehavior 枚举

KeyRestrictionBehavior 枚举

标识由 KeyRestrictions 属性标识的连接字符串参数的列表，这些参数或者是被允许的，或者是不被允许的。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Enumeration KeyRestrictionBehavior
[SerializableAttribute]
public enum KeyRestrictionBehavior
[SerializableAttribute]
public enum class KeyRestrictionBehavior
[<SerializableAttribute>]
type KeyRestrictionBehavior
成员名称 | 说明
AllowOnly | 默认值。标识被允许的仅有的其他连接字符串参数。 默认值。标识被允许的仅有的其他连接字符串参数。
PreventUsage | 标识不被允许的其他连接字符串参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data 命名空间


LoadOption 枚举

LoadOption 枚举

当使用 Load 或 Load 方法时控制数据源中的值如何应用至现有行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration LoadOption
public enum LoadOption
public enum class LoadOption
type LoadOption
 | 成员名称 | 说明
由 XNA Framework 提供支持 | OverwriteChanges | 传入此行的值将同时写入每列数据的当前值和原始值版本。 说明 说明 .NET Framework 2.0 版支持此成员。
由 XNA Framework 提供支持 | PreserveChanges | 传入此行的值将写入每列数据的原始值版本。每列数据的当前版本不变化。默认值为 [This]。 传入此行的值将写入每列数据的原始值版本。每列数据的当前版本不变化。默认值为 [This]。 传入此行的值将写入每列数据的原始值版本。每列数据的当前版本不变化。默认值为 [This]。 说明 说明 .NET Framework 2.0 版支持此成员。
由 XNA Framework 提供支持 | Upsert | 传入此行的值将写入每列数据的当前版本。每列数据的原始版本不变化。 传入此行的值将写入每列数据的当前版本。每列数据的原始版本不变化。 说明 说明 .NET Framework 2.0 版支持此成员。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


MappingException 类

MappingException 类
成员

映射相关服务请求失败时引发的异常。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class MappingException _
    Inherits EntityException
[SerializableAttribute]
public sealed class MappingException : EntityException
[SerializableAttribute]
public ref class MappingException sealed : public EntityException
[<SealedAttribute>]
[<SerializableAttribute>]
type MappingException =
    class
        inherit EntityException
    end

有关如何在代码中处理异常的更多信息，请参见 Exception。

System.Data System.Data..::.MappingExceptionMappingException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

MappingException 成员
System.Data 命名空间


MappingException 成员

MappingException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MappingException 类

映射相关服务请求失败时引发的异常。

MappingException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MappingException 类
System.Data 命名空间


MappingException 构造函数

MappingException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MappingException 类

初始化 MappingException 的新实例。

名称 说明
页首

有关如何在代码中处理异常的更多信息，请参见 Exception。

参考

MappingException 类
MappingException 成员
System.Data 命名空间


MappingException 构造函数

MappingException 构造函数
MappingException 类

初始化 MappingException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public MappingException()
public:
MappingException()
new : unit -> MappingException

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

MappingException 类
MappingException 成员
MappingException 重载
System.Data 命名空间


MappingException 构造函数 (String)

MappingException 构造函数 (String)
MappingException 类

使用专用的错误消息初始化 MappingException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public MappingException(
    string message
)
public:
MappingException(
    String^ message
)
new :
        message:string -> MappingException

参数

message
类型： System String
描述错误的消息。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

MappingException 类
MappingException 成员
MappingException 重载
System.Data 命名空间


MappingException 构造函数 (String, Exception)

MappingException 构造函数 (String, Exception)
MappingException 类

使用指定的错误消息和对内部异常的引用初始化 MappingException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public MappingException(
    string message,
    Exception innerException
)
public:
MappingException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> MappingException

参数

message
类型： System String
描述错误的消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个 null 引用（在 Visual Basic 中为 Nothing）。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

MappingException 类
MappingException 成员
MappingException 重载
System.Data 命名空间


MappingException 方法

MappingException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MappingException 类

MappingException 类型公开以下成员。

名称 说明
页首

参考

MappingException 类
System.Data 命名空间


MappingException 属性

MappingException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MappingException 类

MappingException 类型公开以下成员。

名称 说明
页首

参考

MappingException 类
System.Data 命名空间


MappingException 事件

MappingException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MappingException 类

MappingException 类型公开以下成员。

名称 说明
页首

参考

MappingException 类
System.Data 命名空间


MappingType 枚举

MappingType 枚举

指定如何映射 DataColumn。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Enumeration MappingType
[SerializableAttribute]
public enum MappingType
[SerializableAttribute]
public enum class MappingType
[<SerializableAttribute>]
type MappingType
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Element | 将列映射到 XML 元素。
由 XNA Framework 提供支持 | Attribute | 将列映射到 XML 特性。
由 XNA Framework 提供支持 | SimpleContent | 将列映射到 XmlText 节点。
由 XNA Framework 提供支持 | Hidden | 将列映射到内部结构。

在获取或设置 DataColumn 的 ColumnMapping 属性时，使用 MappingType 枚举。在 DataSet 上调用 WriteXml 方法以将数据和架构作为 XML 文档写出时，该属性确定如何写列的值。 在获取或设置 DataColumn 的 ColumnMapping 属性时，使用 MappingType 枚举。在 DataSet 上调用 WriteXml 方法以将数据和架构作为 XML 文档写出时，该属性确定如何写列的值。

下面的示例返回表中的每个列的 ColumnMapping 属性值。

Private Sub GetColumnMapping(ByVal dataTable As DataTable)
    Dim dataColumn As DataColumn
    For Each dataColumn In dataTable.Columns
        Console.WriteLine(dataColumn.ColumnMapping.ToString())
    Next dataColumn
End Sub

static private void GetColumnMapping(DataTable dataTable)
{
    foreach (DataColumn dataColumn in dataTable.Columns)
    {
        Console.WriteLine(dataColumn.ColumnMapping.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


MergeFailedEventArgs 类

MergeFailedEventArgs 类
成员

在目标和源 DataRow 具有相同的主键值，且将 EnforceConstraints 属性设置为“真”时发生。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class MergeFailedEventArgs _
    Inherits EventArgs
public class MergeFailedEventArgs : EventArgs
public ref class MergeFailedEventArgs : public EventArgs
type MergeFailedEventArgs =
    class
        inherit EventArgs
    end

System.Data System.Data..::.MergeFailedEventArgsMergeFailedEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MergeFailedEventArgs 成员
System.Data 命名空间


MergeFailedEventArgs 成员

MergeFailedEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MergeFailedEventArgs 类

在目标和源 DataRow 具有相同的主键值，且将 EnforceConstraints 属性设置为“真”时发生。

MergeFailedEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MergeFailedEventArgs 类
System.Data 命名空间


MergeFailedEventArgs 构造函数

MergeFailedEventArgs 构造函数
MergeFailedEventArgs 类

使用 DataTable 和合并冲突说明来初始化 MergeFailedEventArgs 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    table As DataTable, _
    conflict As String _
)
public MergeFailedEventArgs(
    DataTable table,
    string conflict
)
public:
MergeFailedEventArgs(
    DataTable^ table,
    String^ conflict
)
new :
        table:DataTable *
        conflict:string -> MergeFailedEventArgs

参数

table
类型： System.Data DataTable
DataTable 对象。
conflict
类型： System String
合并冲突的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MergeFailedEventArgs 类
MergeFailedEventArgs 成员
System.Data 命名空间


MergeFailedEventArgs 方法

MergeFailedEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MergeFailedEventArgs 类

MergeFailedEventArgs 类型公开以下成员。

名称 说明
页首

参考

MergeFailedEventArgs 类
System.Data 命名空间


MergeFailedEventArgs 属性

MergeFailedEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MergeFailedEventArgs 类

MergeFailedEventArgs 类型公开以下成员。

名称 说明
页首

参考

MergeFailedEventArgs 类
System.Data 命名空间


MergeFailedEventArgs ..::.Conflict 属性

MergeFailedEventArgs
.
.
::
.
Conflict 属性
MergeFailedEventArgs 类

返回合并冲突的说明。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Conflict As String
    Get
public string Conflict { get; }
public:
property String^ Conflict {
    String^ get ();
}
member Conflict : string

属性值

类型： System String
合并冲突的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MergeFailedEventArgs 类
MergeFailedEventArgs 成员
System.Data 命名空间


MergeFailedEventArgs ..::.Table 属性

MergeFailedEventArgs
.
.
::
.
Table 属性
MergeFailedEventArgs 类

返回 DataTable 对象。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Table As DataTable
    Get
public DataTable Table { get; }
public:
property DataTable^ Table {
    DataTable^ get ();
}
member Table : DataTable

属性值

类型： System.Data DataTable
DataTable 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MergeFailedEventArgs 类
MergeFailedEventArgs 成员
System.Data 命名空间


MergeFailedEventHandler 委托

MergeFailedEventHandler 委托

表示将处理 MergeFailed 事件的方法。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Delegate Sub MergeFailedEventHandler ( _
    sender As Object, _
    e As MergeFailedEventArgs _
)
public delegate void MergeFailedEventHandler(
    Object sender,
    MergeFailedEventArgs e
)
public delegate void MergeFailedEventHandler(
    Object^ sender,
    MergeFailedEventArgs^ e
)
type MergeFailedEventHandler =
    delegate of
        sender:Object *
        e:MergeFailedEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.Data MergeFailedEventArgs
事件的相关数据。

创建 MergeFailedEventHandler 委托时，需要标识将处理该事件的方法。要将事件与事件处理程序相关联，请为事件添加一个委托实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 创建 MergeFailedEventHandler 委托时，需要标识将处理该事件的方法。要将事件与事件处理程序相关联，请为事件添加一个委托实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 创建 MergeFailedEventHandler 委托时，需要标识将处理该事件的方法。要将事件与事件处理程序相关联，请为事件添加一个委托实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 创建 MergeFailedEventHandler 委托时，需要标识将处理该事件的方法。要将事件与事件处理程序相关联，请为事件添加一个委托实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


MetadataException 类

MetadataException 类
成员

当元数据相关服务请求失败时引发的异常。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class MetadataException _
    Inherits EntityException
[SerializableAttribute]
public sealed class MetadataException : EntityException
[SerializableAttribute]
public ref class MetadataException sealed : public EntityException
[<SealedAttribute>]
[<SerializableAttribute>]
type MetadataException =
    class
        inherit EntityException
    end

System.Data System.Data..::.MetadataExceptionMetadataException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

MetadataException 成员
System.Data 命名空间


MetadataException 成员

MetadataException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetadataException 类

当元数据相关服务请求失败时引发的异常。

MetadataException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetadataException 类
System.Data 命名空间


MetadataException 构造函数

MetadataException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetadataException 类

初始化 MetadataException 类的新实例。

名称 说明
页首

参考

MetadataException 类
MetadataException 成员
System.Data 命名空间


MetadataException 构造函数

MetadataException 构造函数
MetadataException 类

使用默认消息初始化 MetadataException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public MetadataException()
public:
MetadataException()
new : unit -> MetadataException

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

MetadataException 类
MetadataException 成员
MetadataException 重载
System.Data 命名空间


MetadataException 构造函数 (String)

MetadataException 构造函数 (String)
MetadataException 类

用指定消息初始化 MetadataException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public MetadataException(
    string message
)
public:
MetadataException(
    String^ message
)
new :
        message:string -> MetadataException

参数

message
类型： System String
异常消息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

MetadataException 类
MetadataException 成员
MetadataException 重载
System.Data 命名空间


MetadataException 构造函数 (String, Exception)

MetadataException 构造函数 (String, Exception)
MetadataException 类

使用指定的消息和内部异常初始化 MetadataException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public MetadataException(
    string message,
    Exception innerException
)
public:
MetadataException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> MetadataException

参数

message
类型： System String
异常消息。
innerException
类型： System Exception
导致此 MetadataException 的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

MetadataException 类
MetadataException 成员
MetadataException 重载
System.Data 命名空间


MetadataException 方法

MetadataException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetadataException 类

MetadataException 类型公开以下成员。

名称 说明
页首

参考

MetadataException 类
System.Data 命名空间


MetadataException ..::.GetObjectData 方法

MetadataException
.
.
::
.
GetObjectData 方法
MetadataException 类

使用有关异常的信息设置 SerializationInfo。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter := True)> _
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
[SecurityPermissionAttribute(SecurityAction::Demand, SerializationFormatter = true)]
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
[<SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)>]
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
[<SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)>]
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它包含有关所引发异常的序列化对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

MetadataException 类
MetadataException 成员
System.Data 命名空间


MetadataException 属性

MetadataException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetadataException 类

MetadataException 类型公开以下成员。

名称 说明
页首

参考

MetadataException 类
System.Data 命名空间


MetadataException 事件

MetadataException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetadataException 类

MetadataException 类型公开以下成员。

名称 说明
页首

参考

MetadataException 类
System.Data 命名空间


MissingMappingAction 枚举

MissingMappingAction 枚举

确定源表或源列中缺少映射时发生的操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration MissingMappingAction
public enum MissingMappingAction
public enum class MissingMappingAction
type MissingMappingAction
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Passthrough | 创建源列或源表，并使用其原始名称将其添加到 DataSet。
由 XNA Framework 提供支持 | Ignore | 忽略没有映射的列或表。返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 忽略没有映射的列或表。返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
由 XNA Framework 提供支持 | Error | 如果缺少指定的列映射，则生成 InvalidOperationException。

将 MissingMappingAction 值用作 GetColumnMappingBySchemaAction 方法和 GetTableMappingBySchemaAction 方法中的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


MissingPrimaryKeyException 类

MissingPrimaryKeyException 类
成员

表示在尝试访问没有主键的表中的行时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class MissingPrimaryKeyException _
    Inherits DataException
[SerializableAttribute]
public class MissingPrimaryKeyException : DataException
[SerializableAttribute]
public ref class MissingPrimaryKeyException : public DataException
[<SerializableAttribute>]
type MissingPrimaryKeyException =
    class
        inherit DataException
    end

在调用以下方法访问没有主键的表中的行时引发 MissingPrimaryKeyException。

  • DataRowCollection Contains

  • DataRowCollection Find

System.Data System.Data..::.MissingPrimaryKeyExceptionMissingPrimaryKeyException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingPrimaryKeyException 成员
System.Data 命名空间


MissingPrimaryKeyException 成员

MissingPrimaryKeyException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingPrimaryKeyException 类

表示在尝试访问没有主键的表中的行时引发的异常。

MissingPrimaryKeyException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MissingPrimaryKeyException 类
System.Data 命名空间


MissingPrimaryKeyException 构造函数

MissingPrimaryKeyException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingPrimaryKeyException 类

初始化 MissingPrimaryKeyException 类的一个新实例。

名称 说明
页首

参考

MissingPrimaryKeyException 类
MissingPrimaryKeyException 成员
System.Data 命名空间


MissingPrimaryKeyException 构造函数

MissingPrimaryKeyException 构造函数
MissingPrimaryKeyException 类

初始化 MissingPrimaryKeyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public MissingPrimaryKeyException()
public:
MissingPrimaryKeyException()
new : unit -> MissingPrimaryKeyException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingPrimaryKeyException 类
MissingPrimaryKeyException 成员
MissingPrimaryKeyException 重载
System.Data 命名空间


MissingPrimaryKeyException 构造函数 (String)

MissingPrimaryKeyException 构造函数 (String)
MissingPrimaryKeyException 类

使用指定的字符串初始化 MissingPrimaryKeyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public MissingPrimaryKeyException(
    string s
)
public:
MissingPrimaryKeyException(
    String^ s
)
new :
        s:string -> MissingPrimaryKeyException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingPrimaryKeyException 类
MissingPrimaryKeyException 成员
MissingPrimaryKeyException 重载
System.Data 命名空间


MissingPrimaryKeyException 构造函数 (SerializationInfo, StreamingContext)

MissingPrimaryKeyException 构造函数 (SerializationInfo, StreamingContext)
MissingPrimaryKeyException 类

以序列化信息初始化 MissingPrimaryKeyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected MissingPrimaryKeyException(
    SerializationInfo info,
    StreamingContext context
)
protected:
MissingPrimaryKeyException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> MissingPrimaryKeyException

参数

info
类型： System.Runtime.Serialization SerializationInfo
序列化或反序列化某个对象所需的数据。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

MissingPrimaryKeyException 类
MissingPrimaryKeyException 成员
MissingPrimaryKeyException 重载
System.Data 命名空间
StreamingContext
SerializationInfo


MissingPrimaryKeyException 构造函数 (String, Exception)

MissingPrimaryKeyException 构造函数 (String, Exception)
MissingPrimaryKeyException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 MissingPrimaryKeyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public MissingPrimaryKeyException(
    string message,
    Exception innerException
)
public:
MissingPrimaryKeyException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> MissingPrimaryKeyException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

MissingPrimaryKeyException 类
MissingPrimaryKeyException 成员
MissingPrimaryKeyException 重载
System.Data 命名空间


MissingPrimaryKeyException 方法

MissingPrimaryKeyException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingPrimaryKeyException 类

MissingPrimaryKeyException 类型公开以下成员。

名称 说明
页首

参考

MissingPrimaryKeyException 类
System.Data 命名空间


MissingPrimaryKeyException 属性

MissingPrimaryKeyException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingPrimaryKeyException 类

MissingPrimaryKeyException 类型公开以下成员。

名称 说明
页首

参考

MissingPrimaryKeyException 类
System.Data 命名空间


MissingPrimaryKeyException 事件

MissingPrimaryKeyException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MissingPrimaryKeyException 类

MissingPrimaryKeyException 类型公开以下成员。

名称 说明
页首

参考

MissingPrimaryKeyException 类
System.Data 命名空间


MissingSchemaAction 枚举

MissingSchemaAction 枚举

指定在将数据添加到 DataSet 而缺少要求的 DataTable 或 DataColumn 时要采取的操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration MissingSchemaAction
public enum MissingSchemaAction
public enum class MissingSchemaAction
type MissingSchemaAction
成员名称 | 说明
由 XNA Framework 提供支持 | Add | 添加必需的列以完成架构。
由 XNA Framework 提供支持 | Ignore | 忽略额外列。
由 XNA Framework 提供支持 | Error | 如果缺少指定的列映射，则生成 InvalidOperationException。
由 XNA Framework 提供支持 | AddWithKey | 添加必需的列和主键信息以完成架构。有关如何将主键信息添加到 DataTable 的更多信息，请参见 FillSchema。为与用于 OLE DB 的 .NET Framework 数据提供程序一起正确运行，AddWithKey 要求本机 OLE DB 提供程序通过设置 DBPROP_UNIQUEROWS 属性获得必需的主键信息，然后通过检查 IColumnsRowset 中的 DBCOLUMN_KEYCOLUMN 确定哪些列是主键列。作为一种备选方法，用户可以在每个 DataTable 上显式设置主键约束。这将确保对与现有记录匹配的传入记录进行更新，而不是追加。当使用 AddWithKey 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 添加必需的列和主键信息以完成架构。有关如何将主键信息添加到 DataTable 的更多信息，请参见 FillSchema。为与用于 OLE DB 的 .NET Framework 数据提供程序一起正确运行，AddWithKey 要求本机 OLE DB 提供程序通过设置 DBPROP_UNIQUEROWS 属性获得必需的主键信息，然后通过检查 IColumnsRowset 中的 DBCOLUMN_KEYCOLUMN 确定哪些列是主键列。作为一种备选方法，用户可以在每个 DataTable 上显式设置主键约束。这将确保对与现有记录匹配的传入记录进行更新，而不是追加。当使用 AddWithKey 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 添加必需的列和主键信息以完成架构。有关如何将主键信息添加到 DataTable 的更多信息，请参见 FillSchema。为与用于 OLE DB 的 .NET Framework 数据提供程序一起正确运行，AddWithKey 要求本机 OLE DB 提供程序通过设置 DBPROP_UNIQUEROWS 属性获得必需的主键信息，然后通过检查 IColumnsRowset 中的 DBCOLUMN_KEYCOLUMN 确定哪些列是主键列。作为一种备选方法，用户可以在每个 DataTable 上显式设置主键约束。这将确保对与现有记录匹配的传入记录进行更新，而不是追加。当使用 AddWithKey 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 添加必需的列和主键信息以完成架构。有关如何将主键信息添加到 DataTable 的更多信息，请参见 FillSchema。为与用于 OLE DB 的 .NET Framework 数据提供程序一起正确运行，AddWithKey 要求本机 OLE DB 提供程序通过设置 DBPROP_UNIQUEROWS 属性获得必需的主键信息，然后通过检查 IColumnsRowset 中的 DBCOLUMN_KEYCOLUMN 确定哪些列是主键列。作为一种备选方法，用户可以在每个 DataTable 上显式设置主键约束。这将确保对与现有记录匹配的传入记录进行更新，而不是追加。当使用 AddWithKey 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 添加必需的列和主键信息以完成架构。有关如何将主键信息添加到 DataTable 的更多信息，请参见 FillSchema。为与用于 OLE DB 的 .NET Framework 数据提供程序一起正确运行，AddWithKey 要求本机 OLE DB 提供程序通过设置 DBPROP_UNIQUEROWS 属性获得必需的主键信息，然后通过检查 IColumnsRowset 中的 DBCOLUMN_KEYCOLUMN 确定哪些列是主键列。作为一种备选方法，用户可以在每个 DataTable 上显式设置主键约束。这将确保对与现有记录匹配的传入记录进行更新，而不是追加。当使用 AddWithKey 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 添加必需的列和主键信息以完成架构。有关如何将主键信息添加到 DataTable 的更多信息，请参见 FillSchema。为与用于 OLE DB 的 .NET Framework 数据提供程序一起正确运行，AddWithKey 要求本机 OLE DB 提供程序通过设置 DBPROP_UNIQUEROWS 属性获得必需的主键信息，然后通过检查 IColumnsRowset 中的 DBCOLUMN_KEYCOLUMN 确定哪些列是主键列。作为一种备选方法，用户可以在每个 DataTable 上显式设置主键约束。这将确保对与现有记录匹配的传入记录进行更新，而不是追加。当使用 AddWithKey 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 添加必需的列和主键信息以完成架构。有关如何将主键信息添加到 DataTable 的更多信息，请参见 FillSchema。为与用于 OLE DB 的 .NET Framework 数据提供程序一起正确运行，AddWithKey 要求本机 OLE DB 提供程序通过设置 DBPROP_UNIQUEROWS 属性获得必需的主键信息，然后通过检查 IColumnsRowset 中的 DBCOLUMN_KEYCOLUMN 确定哪些列是主键列。作为一种备选方法，用户可以在每个 DataTable 上显式设置主键约束。这将确保对与现有记录匹配的传入记录进行更新，而不是追加。当使用 AddWithKey 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。

每当采取可能会更改 DataSet 的架构的操作时使用 MissingSchemaAction 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间
Merge


NoNullAllowedException 类

NoNullAllowedException 类
成员

表示在尝试将空值插入 AllowDBNull 设置为 false 的列中时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class NoNullAllowedException _
    Inherits DataException
[SerializableAttribute]
public class NoNullAllowedException : DataException
[SerializableAttribute]
public ref class NoNullAllowedException : public DataException
[<SerializableAttribute>]
type NoNullAllowedException =
    class
        inherit DataException
    end

在调用以下方法或属性并尝试将空值插入 AllowDBNull 设置为 false 的列中时，会引发 NoNullAllowedException。

  • DataRowCollection Add

  • DataRow EndEdit

  • DataRow ItemArray

  • DataTable LoadDataRow

System.Data System.Data..::.NoNullAllowedExceptionNoNullAllowedException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NoNullAllowedException 成员
System.Data 命名空间


NoNullAllowedException 成员

NoNullAllowedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NoNullAllowedException 类

表示在尝试将空值插入 AllowDBNull 设置为 false 的列中时引发的异常。

NoNullAllowedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

NoNullAllowedException 类
System.Data 命名空间


NoNullAllowedException 构造函数

NoNullAllowedException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NoNullAllowedException 类

初始化 NoNullAllowedException 类的新实例。

名称 说明
页首

参考

NoNullAllowedException 类
NoNullAllowedException 成员
System.Data 命名空间


NoNullAllowedException 构造函数

NoNullAllowedException 构造函数
NoNullAllowedException 类

初始化 NoNullAllowedException 类的一个新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public NoNullAllowedException()
public:
NoNullAllowedException()
new : unit -> NoNullAllowedException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NoNullAllowedException 类
NoNullAllowedException 成员
NoNullAllowedException 重载
System.Data 命名空间


NoNullAllowedException 构造函数 (String)

NoNullAllowedException 构造函数 (String)
NoNullAllowedException 类

使用指定的字符串初始化 NoNullAllowedException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public NoNullAllowedException(
    string s
)
public:
NoNullAllowedException(
    String^ s
)
new :
        s:string -> NoNullAllowedException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NoNullAllowedException 类
NoNullAllowedException 成员
NoNullAllowedException 重载
System.Data 命名空间


NoNullAllowedException 构造函数 (SerializationInfo, StreamingContext)

NoNullAllowedException 构造函数 (SerializationInfo, StreamingContext)
NoNullAllowedException 类

以序列化信息初始化 NoNullAllowedException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected NoNullAllowedException(
    SerializationInfo info,
    StreamingContext context
)
protected:
NoNullAllowedException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> NoNullAllowedException

参数

info
类型： System.Runtime.Serialization SerializationInfo
序列化或反序列化某个对象所需的数据。。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

NoNullAllowedException 类
NoNullAllowedException 成员
NoNullAllowedException 重载
System.Data 命名空间
StreamingContext
SerializationInfo


NoNullAllowedException 构造函数 (String, Exception)

NoNullAllowedException 构造函数 (String, Exception)
NoNullAllowedException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 NoNullAllowedException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public NoNullAllowedException(
    string message,
    Exception innerException
)
public:
NoNullAllowedException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> NoNullAllowedException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

NoNullAllowedException 类
NoNullAllowedException 成员
NoNullAllowedException 重载
System.Data 命名空间


NoNullAllowedException 方法

NoNullAllowedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NoNullAllowedException 类

NoNullAllowedException 类型公开以下成员。

名称 说明
页首

参考

NoNullAllowedException 类
System.Data 命名空间


NoNullAllowedException 属性

NoNullAllowedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NoNullAllowedException 类

NoNullAllowedException 类型公开以下成员。

名称 说明
页首

参考

NoNullAllowedException 类
System.Data 命名空间


NoNullAllowedException 事件

NoNullAllowedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
NoNullAllowedException 类

NoNullAllowedException 类型公开以下成员。

名称 说明
页首

参考

NoNullAllowedException 类
System.Data 命名空间


ObjectNotFoundException 类

ObjectNotFoundException 类
成员

对象不存在时引发的异常。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class ObjectNotFoundException _
    Inherits DataException
[SerializableAttribute]
public sealed class ObjectNotFoundException : DataException
[SerializableAttribute]
public ref class ObjectNotFoundException sealed : public DataException
[<SealedAttribute>]
[<SerializableAttribute>]
type ObjectNotFoundException =
    class
        inherit DataException
    end

有关如何在代码中处理异常的更多信息，请参见 Exception。

System.Data System.Data..::.ObjectNotFoundExceptionObjectNotFoundException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectNotFoundException 成员
System.Data 命名空间


ObjectNotFoundException 成员

ObjectNotFoundException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectNotFoundException 类

对象不存在时引发的异常。

ObjectNotFoundException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectNotFoundException 类
System.Data 命名空间


ObjectNotFoundException 构造函数

ObjectNotFoundException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectNotFoundException 类

初始化 ObjectNotFoundException 的新实例。

名称 说明
页首

有关如何在代码中处理异常的更多信息，请参见 Exception。

参考

ObjectNotFoundException 类
ObjectNotFoundException 成员
System.Data 命名空间


ObjectNotFoundException 构造函数

ObjectNotFoundException 构造函数
ObjectNotFoundException 类

初始化 ObjectNotFoundException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public ObjectNotFoundException()
public:
ObjectNotFoundException()
new : unit -> ObjectNotFoundException

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectNotFoundException 类
ObjectNotFoundException 成员
ObjectNotFoundException 重载
System.Data 命名空间


ObjectNotFoundException 构造函数 (String)

ObjectNotFoundException 构造函数 (String)
ObjectNotFoundException 类

使用专用的错误消息初始化 ObjectNotFoundException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public ObjectNotFoundException(
    string message
)
public:
ObjectNotFoundException(
    String^ message
)
new :
        message:string -> ObjectNotFoundException

参数

message
类型： System String
描述错误的消息。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectNotFoundException 类
ObjectNotFoundException 成员
ObjectNotFoundException 重载
System.Data 命名空间


ObjectNotFoundException 构造函数 (String, Exception)

ObjectNotFoundException 构造函数 (String, Exception)
ObjectNotFoundException 类

使用指定的错误消息和对内部异常的引用初始化 ObjectNotFoundException 类的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ObjectNotFoundException(
    string message,
    Exception innerException
)
public:
ObjectNotFoundException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ObjectNotFoundException

参数

message
类型： System String
描述错误的消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个 null 引用（在 Visual Basic 中为 Nothing）。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectNotFoundException 类
ObjectNotFoundException 成员
ObjectNotFoundException 重载
System.Data 命名空间


ObjectNotFoundException 方法

ObjectNotFoundException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectNotFoundException 类

ObjectNotFoundException 类型公开以下成员。

名称 说明
页首

参考

ObjectNotFoundException 类
System.Data 命名空间


ObjectNotFoundException 属性

ObjectNotFoundException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectNotFoundException 类

ObjectNotFoundException 类型公开以下成员。

名称 说明
页首

参考

ObjectNotFoundException 类
System.Data 命名空间


ObjectNotFoundException 事件

ObjectNotFoundException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectNotFoundException 类

ObjectNotFoundException 类型公开以下成员。

名称 说明
页首

参考

ObjectNotFoundException 类
System.Data 命名空间


OperationAbortedException 类

OperationAbortedException 类
成员

当用户中止正在执行的某操作时，将引发此异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public NotInheritable Class OperationAbortedException _
    Inherits SystemException
[SerializableAttribute]
public sealed class OperationAbortedException : SystemException
[SerializableAttribute]
public ref class OperationAbortedException sealed : public SystemException
[<SealedAttribute>]
[<SerializableAttribute>]
type OperationAbortedException =
    class
        inherit SystemException
    end

此异常指示某操作已被 API 的使用者中止。例如，如果 SqlRowsCopied 事件的事件处理程序将传递给该处理程序的 SqlRowsCopiedEventArgs 对象中的 Abort 属性设置为 true，WriteToServer()()() 方法将停止向服务器发送行，并引发一个 OperationAbortedException。 此异常指示某操作已被 API 的使用者中止。例如，如果 SqlRowsCopied 事件的事件处理程序将传递给该处理程序的 SqlRowsCopiedEventArgs 对象中的 Abort 属性设置为 true，WriteToServer()()() 方法将停止向服务器发送行，并引发一个 OperationAbortedException。

System.Data System.Data..::.OperationAbortedExceptionOperationAbortedException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

OperationAbortedException 成员
System.Data 命名空间


OperationAbortedException 成员

OperationAbortedException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperationAbortedException 类

当用户中止正在执行的某操作时，将引发此异常。

OperationAbortedException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OperationAbortedException 类
System.Data 命名空间


OperationAbortedException 方法

OperationAbortedException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperationAbortedException 类

OperationAbortedException 类型公开以下成员。

名称 说明
页首

参考

OperationAbortedException 类
System.Data 命名空间


OperationAbortedException 属性

OperationAbortedException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperationAbortedException 类

OperationAbortedException 类型公开以下成员。

名称 说明
页首

参考

OperationAbortedException 类
System.Data 命名空间


OperationAbortedException 事件

OperationAbortedException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OperationAbortedException 类

OperationAbortedException 类型公开以下成员。

名称 说明
页首

参考

OperationAbortedException 类
System.Data 命名空间


OptimisticConcurrencyException 类

OptimisticConcurrencyException 类
成员

发生开放式并发冲突时引发的异常。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class OptimisticConcurrencyException _
    Inherits UpdateException
[SerializableAttribute]
public sealed class OptimisticConcurrencyException : UpdateException
[SerializableAttribute]
public ref class OptimisticConcurrencyException sealed : public UpdateException
[<SealedAttribute>]
[<SerializableAttribute>]
type OptimisticConcurrencyException =
    class
        inherit UpdateException
    end

有关如何在代码中处理异常的更多信息，请参见 Exception。

System.Data System.Data..::.OptimisticConcurrencyExceptionOptimisticConcurrencyException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

OptimisticConcurrencyException 成员
System.Data 命名空间


OptimisticConcurrencyException 成员

OptimisticConcurrencyException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OptimisticConcurrencyException 类

发生开放式并发冲突时引发的异常。

OptimisticConcurrencyException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OptimisticConcurrencyException 类
System.Data 命名空间


OptimisticConcurrencyException 构造函数

OptimisticConcurrencyException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OptimisticConcurrencyException 类

初始化 OptimisticConcurrencyException 的新实例。

名称 说明
页首

有关如何在代码中处理异常的更多信息，请参见 Exception。

参考

OptimisticConcurrencyException 类
OptimisticConcurrencyException 成员
System.Data 命名空间


OptimisticConcurrencyException 构造函数

OptimisticConcurrencyException 构造函数
OptimisticConcurrencyException 类

初始化 OptimisticConcurrencyException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public OptimisticConcurrencyException()
public:
OptimisticConcurrencyException()
new : unit -> OptimisticConcurrencyException

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

OptimisticConcurrencyException 类
OptimisticConcurrencyException 成员
OptimisticConcurrencyException 重载
System.Data 命名空间


OptimisticConcurrencyException 构造函数 (String)

OptimisticConcurrencyException 构造函数 (String)
OptimisticConcurrencyException 类

使用专用的错误消息初始化 OptimisticConcurrencyException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public OptimisticConcurrencyException(
    string message
)
public:
OptimisticConcurrencyException(
    String^ message
)
new :
        message:string -> OptimisticConcurrencyException

参数

message
类型： System String
描述错误的消息。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

OptimisticConcurrencyException 类
OptimisticConcurrencyException 成员
OptimisticConcurrencyException 重载
System.Data 命名空间


OptimisticConcurrencyException 构造函数 (String, Exception)

OptimisticConcurrencyException 构造函数 (String, Exception)
OptimisticConcurrencyException 类

使用指定的错误消息和对内部异常的引用初始化 OptimisticConcurrencyException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public OptimisticConcurrencyException(
    string message,
    Exception innerException
)
public:
OptimisticConcurrencyException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> OptimisticConcurrencyException

参数

message
类型： System String
描述错误的消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个 null 引用（在 Visual Basic 中为 Nothing）。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

OptimisticConcurrencyException 类
OptimisticConcurrencyException 成员
OptimisticConcurrencyException 重载
System.Data 命名空间


OptimisticConcurrencyException 构造函数 (String, Exception, IEnumerable <(Of <(ObjectStateEntry >)>))

OptimisticConcurrencyException 构造函数 (String, Exception, IEnumerable
<
(Of
<
(
ObjectStateEntry
>
)
>
)
)
OptimisticConcurrencyException 类

使用指定的错误消息、对内部异常的引用以及 ObjectStateEntry 对象的可枚举集合初始化 OptimisticConcurrencyException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception, _
    stateEntries As IEnumerable(Of ObjectStateEntry) _
)
public OptimisticConcurrencyException(
    string message,
    Exception innerException,
    IEnumerable<ObjectStateEntry> stateEntries
)
public:
OptimisticConcurrencyException(
    String^ message,
    Exception^ innerException,
    IEnumerable<ObjectStateEntry^>^ stateEntries
)
new :
        message:string *
        innerException:Exception *
        stateEntries:IEnumerable<ObjectStateEntry> -> OptimisticConcurrencyException

参数

message
类型： System String
描述错误的消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个 null 引用（在 Visual Basic 中为 Nothing）。
stateEntries
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
ObjectStateEntry
>
)
>
)

ObjectStateEntry 对象的可枚举集合。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

OptimisticConcurrencyException 类
OptimisticConcurrencyException 成员
OptimisticConcurrencyException 重载
System.Data 命名空间


OptimisticConcurrencyException 方法

OptimisticConcurrencyException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OptimisticConcurrencyException 类

OptimisticConcurrencyException 类型公开以下成员。

名称 说明
页首

参考

OptimisticConcurrencyException 类
System.Data 命名空间


OptimisticConcurrencyException 属性

OptimisticConcurrencyException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OptimisticConcurrencyException 类

OptimisticConcurrencyException 类型公开以下成员。

名称 说明
页首

参考

OptimisticConcurrencyException 类
System.Data 命名空间


OptimisticConcurrencyException 事件

OptimisticConcurrencyException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OptimisticConcurrencyException 类

OptimisticConcurrencyException 类型公开以下成员。

名称 说明
页首

参考

OptimisticConcurrencyException 类
System.Data 命名空间


OrderedEnumerableRowCollection <(Of <(TRow >)>) 类

OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
类
成员

此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。表示从查询返回的经过排序的 DataRow 对象的集合。 此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。表示从查询返回的经过排序的 DataRow 对象的集合。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public NotInheritable Class OrderedEnumerableRowCollection(Of TRow) _
    Inherits EnumerableRowCollection(Of TRow)
public sealed class OrderedEnumerableRowCollection<TRow> : EnumerableRowCollection<TRow>

generic<typename TRow>
public ref class OrderedEnumerableRowCollection sealed : public EnumerableRowCollection<TRow>
[<SealedAttribute>]
type OrderedEnumerableRowCollection<'TRow> =
    class
        inherit EnumerableRowCollection<'TRow>
    end

类型参数

TRow

源序列中的对象的类型，通常为 DataRow。

OrderedEnumerableRowCollection<(Of <(TRow>)>) 用于包含返回经过排序的行的 LINQ to DataSet 查询的结果。此 EnumerableRowCollection<(Of <(TRow>)>) 维护起始查询的调用 LINQ 运算符的状态，并且此状态用于为后面的 DataView 构造谓词和排序表达式。 OrderedEnumerableRowCollection<(Of <(TRow>)>) 用于包含返回经过排序的行的 LINQ to DataSet 查询的结果。此 EnumerableRowCollection<(Of <(TRow>)>) 维护起始查询的调用 LINQ 运算符的状态，并且此状态用于为后面的 DataView 构造谓词和排序表达式。

无法直接实例化 OrderedEnumerableRowCollection<(Of <(TRow>)>)，因为没有此类的公共构造函数。

TRow
System.Data
System.Data..::.OrderedEnumerableRowCollection<(Of <(TRow>)>)OrderedEnumerableRowCollection
System.Data..::.OrderedEnumerableRowCollection<(Of <(TRow>)>)TRow
System.Data..::.OrderedEnumerableRowCollection<(Of <(TRow>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

OrderedEnumerableRowCollection TRow 成员
System.Data 命名空间
DataRow
EnumerableRowCollection

其他资源

LINQ to DataSet


OrderedEnumerableRowCollection <(Of <(TRow >)>) 成员

OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OrderedEnumerableRowCollection

此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。表示从查询返回的经过排序的 DataRow 对象的集合。 此 API 支持 .NET Framework 基础结构，但不应在代码中直接使用。表示从查询返回的经过排序的 DataRow 对象的集合。

OrderedEnumerableRowCollection TRow 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OrderedEnumerableRowCollection TRow 类
System.Data 命名空间


OrderedEnumerableRowCollection <(Of <(TRow >)>) 方法

OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OrderedEnumerableRowCollection

OrderedEnumerableRowCollection TRow 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OrderedEnumerableRowCollection TRow 类
System.Data 命名空间


ParameterDirection 枚举

ParameterDirection 枚举

指定查询内的有关 DataSet 的参数的类型。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration ParameterDirection
public enum ParameterDirection
public enum class ParameterDirection
type ParameterDirection
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Input | 参数是输入参数。
由 XNA Framework 提供支持 | Output | 参数是输出参数。
由 XNA Framework 提供支持 | InputOutput | 参数既能输入，也能输出。
由 XNA Framework 提供支持 | ReturnValue | 参数表示诸如存储过程、内置函数或用户定义函数之类的操作的返回值。

OleDbParameter 和 SqlParameter 参数方向属性使用 ParameterDirection 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


PropertyAttributes 枚举

PropertyAttributes 枚举

注意：此 API 现在已过时。

指定属性的特性。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<ObsoleteAttribute("PropertyAttributes has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202")> _
<FlagsAttribute> _
Public Enumeration PropertyAttributes
[ObsoleteAttribute("PropertyAttributes has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202")]
[FlagsAttribute]
public enum PropertyAttributes
[ObsoleteAttribute(L"PropertyAttributes has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202")]
[FlagsAttribute]
public enum class PropertyAttributes
[<ObsoleteAttribute("PropertyAttributes has been deprecated.  http://go.microsoft.com/fwlink/?linkid=14202")>]
[<FlagsAttribute>]
type PropertyAttributes
 | 成员名称 | 说明
由 XNA Framework 提供支持 | NotSupported | 提供程序不支持该属性。
由 XNA Framework 提供支持 | Required | 在初始化数据源之前，用户必须为此属性指定值。
由 XNA Framework 提供支持 | Optional | 在初始化数据源之前，用户不必为此属性指定值。
由 XNA Framework 提供支持 | Read | 用户可以读取该属性。
由 XNA Framework 提供支持 | Write | 用户可以写入该属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

System.Data 命名空间


PropertyCollection 类

PropertyCollection 类
成员

表示可以添加到 DataColumn、DataSet 或 DataTable 的属性的集合。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class PropertyCollection _
    Inherits Hashtable
[SerializableAttribute]
public class PropertyCollection : Hashtable
[SerializableAttribute]
public ref class PropertyCollection : public Hashtable
[<SerializableAttribute>]
type PropertyCollection =
    class
        inherit Hashtable
    end

可以通过 DataColumn、DataSet 或 DataTable 类的 ExtendedProperties 属性访问 PropertyCollection。

通过 PropertyCollection 将自定义属性添加到 DataColumn、DataSet 或 DataTable 对象。例如，您可能需要存储对象的创建时间，以便以后与另一个对象比较。 通过 PropertyCollection 将自定义属性添加到 DataColumn、DataSet 或 DataTable 对象。例如，您可能需要存储对象的创建时间，以便以后与另一个对象比较。

下面的示例为 DataTable 创建时间戳值并将其添加到 PropertyCollection 中。

Private Sub AddTimeStamp()
    'Create a new DataTable.
    Dim table As New DataTable("NewTable")

    'Get its PropertyCollection.
    Dim properties As PropertyCollection = table.ExtendedProperties

    'Add a timestamp value to the PropertyCollection.
    properties.Add("TimeStamp", DateTime.Now)

    'Print the timestamp.
    Console.WriteLine(properties("TimeStamp"))
End Sub

private void AddTimeStamp()
{
    //Create a new DataTable.
    DataTable table = new DataTable("NewTable");

    //Get its PropertyCollection.
    PropertyCollection properties = table.ExtendedProperties;

    //Add a timestamp value to the PropertyCollection.
    properties.Add("TimeStamp", DateTime.Now);

    // Print the timestamp.
    Console.WriteLine(properties["TimeStamp"]);
}

System.Data System.Data..::.PropertyCollectionPropertyCollection
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

PropertyCollection 成员
System.Data 命名空间
DataColumn
DataSet
DataTable
DataColumn ExtendedProperties
DataSet ExtendedProperties
DataTable ExtendedProperties


PropertyCollection 成员

PropertyCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PropertyCollection 类

表示可以添加到 DataColumn、DataSet 或 DataTable 的属性的集合。

PropertyCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

PropertyCollection 类
System.Data 命名空间


PropertyCollection 构造函数

PropertyCollection 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PropertyCollection 类

初始化 PropertyCollection 类的新实例。

名称 说明
页首

参考

PropertyCollection 类
PropertyCollection 成员
System.Data 命名空间


PropertyCollection 构造函数

PropertyCollection 构造函数
PropertyCollection 类

初始化 PropertyCollection 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public PropertyCollection()
public:
PropertyCollection()
new : unit -> PropertyCollection

将所有字段初始化为其默认值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

PropertyCollection 类
PropertyCollection 成员
PropertyCollection 重载
System.Data 命名空间


PropertyCollection 构造函数 (SerializationInfo, StreamingContext)

PropertyCollection 构造函数 (SerializationInfo, StreamingContext)
PropertyCollection 类

初始化 PropertyCollection 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected PropertyCollection(
    SerializationInfo info,
    StreamingContext context
)
protected:
PropertyCollection(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> PropertyCollection

参数

info
类型： System.Runtime.Serialization SerializationInfo
将对象序列化或反序列化所需的数据。
context
类型： System.Runtime.Serialization StreamingContext
给定序列化流的源和目的地。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

PropertyCollection 类
PropertyCollection 成员
PropertyCollection 重载
System.Data 命名空间


PropertyCollection 方法

PropertyCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PropertyCollection 类

PropertyCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

PropertyCollection 类
System.Data 命名空间


PropertyCollection 属性

PropertyCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
PropertyCollection 类

PropertyCollection 类型公开以下成员。

名称 说明
页首

参考

PropertyCollection 类
System.Data 命名空间


ProviderIncompatibleException 类

ProviderIncompatibleException 类
成员

基础数据提供程序与 Entity Framework 不兼容时引发的异常。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class ProviderIncompatibleException _
    Inherits EntityException
[SerializableAttribute]
public sealed class ProviderIncompatibleException : EntityException
[SerializableAttribute]
public ref class ProviderIncompatibleException sealed : public EntityException
[<SealedAttribute>]
[<SerializableAttribute>]
type ProviderIncompatibleException =
    class
        inherit EntityException
    end

有关如何在代码中处理异常的更多信息，请参见 Exception。

System.Data System.Data..::.ProviderIncompatibleExceptionProviderIncompatibleException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ProviderIncompatibleException 成员
System.Data 命名空间


ProviderIncompatibleException 成员

ProviderIncompatibleException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProviderIncompatibleException 类

基础数据提供程序与 Entity Framework 不兼容时引发的异常。

ProviderIncompatibleException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ProviderIncompatibleException 类
System.Data 命名空间


ProviderIncompatibleException 构造函数

ProviderIncompatibleException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProviderIncompatibleException 类

初始化 ProviderIncompatibleException 的新实例。

名称 说明
页首

有关如何在代码中处理异常的更多信息，请参见 Exception。

参考

ProviderIncompatibleException 类
ProviderIncompatibleException 成员
System.Data 命名空间


ProviderIncompatibleException 构造函数

ProviderIncompatibleException 构造函数
ProviderIncompatibleException 类

初始化 ProviderIncompatibleException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public ProviderIncompatibleException()
public:
ProviderIncompatibleException()
new : unit -> ProviderIncompatibleException

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ProviderIncompatibleException 类
ProviderIncompatibleException 成员
ProviderIncompatibleException 重载
System.Data 命名空间


ProviderIncompatibleException 构造函数 (String)

ProviderIncompatibleException 构造函数 (String)
ProviderIncompatibleException 类

使用专用的错误消息初始化 ProviderIncompatibleException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public ProviderIncompatibleException(
    string message
)
public:
ProviderIncompatibleException(
    String^ message
)
new :
        message:string -> ProviderIncompatibleException

参数

message
类型： System String
描述错误的消息。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ProviderIncompatibleException 类
ProviderIncompatibleException 成员
ProviderIncompatibleException 重载
System.Data 命名空间


ProviderIncompatibleException 构造函数 (String, Exception)

ProviderIncompatibleException 构造函数 (String, Exception)
ProviderIncompatibleException 类

使用指定的错误消息初始化 ProviderIncompatibleException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ProviderIncompatibleException(
    string message,
    Exception innerException
)
public:
ProviderIncompatibleException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ProviderIncompatibleException

参数

message
类型： System String
描述错误的消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个 null 引用（在 Visual Basic 中为 Nothing）。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ProviderIncompatibleException 类
ProviderIncompatibleException 成员
ProviderIncompatibleException 重载
System.Data 命名空间


ProviderIncompatibleException 方法

ProviderIncompatibleException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProviderIncompatibleException 类

ProviderIncompatibleException 类型公开以下成员。

名称 说明
页首

参考

ProviderIncompatibleException 类
System.Data 命名空间


ProviderIncompatibleException 属性

ProviderIncompatibleException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProviderIncompatibleException 类

ProviderIncompatibleException 类型公开以下成员。

名称 说明
页首

参考

ProviderIncompatibleException 类
System.Data 命名空间


ProviderIncompatibleException 事件

ProviderIncompatibleException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProviderIncompatibleException 类

ProviderIncompatibleException 类型公开以下成员。

名称 说明
页首

参考

ProviderIncompatibleException 类
System.Data 命名空间


ReadOnlyException 类

ReadOnlyException 类
成员

表示在尝试更改只读列的值时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class ReadOnlyException _
    Inherits DataException
[SerializableAttribute]
public class ReadOnlyException : DataException
[SerializableAttribute]
public ref class ReadOnlyException : public DataException
[<SerializableAttribute>]
type ReadOnlyException =
    class
        inherit DataException
    end

如果在尝试更改只读列的值时调用以下方法或属性，将引发 ReadOnlyException。

  • DataRow EndEdit

  • DataRow ItemArray

System.Data System.Data..::.ReadOnlyExceptionReadOnlyException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ReadOnlyException 成员
System.Data 命名空间


ReadOnlyException 成员

ReadOnlyException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ReadOnlyException 类

表示在尝试更改只读列的值时引发的异常。

ReadOnlyException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ReadOnlyException 类
System.Data 命名空间


ReadOnlyException 构造函数

ReadOnlyException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ReadOnlyException 类

初始化 ReadOnlyException 类的新实例。

名称 说明
页首

参考

ReadOnlyException 类
ReadOnlyException 成员
System.Data 命名空间


ReadOnlyException 构造函数

ReadOnlyException 构造函数
ReadOnlyException 类

初始化 ReadOnlyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public ReadOnlyException()
public:
ReadOnlyException()
new : unit -> ReadOnlyException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ReadOnlyException 类
ReadOnlyException 成员
ReadOnlyException 重载
System.Data 命名空间


ReadOnlyException 构造函数 (String)

ReadOnlyException 构造函数 (String)
ReadOnlyException 类

使用指定的字符串初始化 ReadOnlyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public ReadOnlyException(
    string s
)
public:
ReadOnlyException(
    String^ s
)
new :
        s:string -> ReadOnlyException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ReadOnlyException 类
ReadOnlyException 成员
ReadOnlyException 重载
System.Data 命名空间


ReadOnlyException 构造函数 (SerializationInfo, StreamingContext)

ReadOnlyException 构造函数 (SerializationInfo, StreamingContext)
ReadOnlyException 类

以序列化信息初始化 ReadOnlyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected ReadOnlyException(
    SerializationInfo info,
    StreamingContext context
)
protected:
ReadOnlyException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> ReadOnlyException

参数

info
类型： System.Runtime.Serialization SerializationInfo
序列化或反序列化某个对象所需的数据。。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

ReadOnlyException 类
ReadOnlyException 成员
ReadOnlyException 重载
System.Data 命名空间
StreamingContext
SerializationInfo


ReadOnlyException 构造函数 (String, Exception)

ReadOnlyException 构造函数 (String, Exception)
ReadOnlyException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 ReadOnlyException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ReadOnlyException(
    string message,
    Exception innerException
)
public:
ReadOnlyException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ReadOnlyException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

ReadOnlyException 类
ReadOnlyException 成员
ReadOnlyException 重载
System.Data 命名空间


ReadOnlyException 方法

ReadOnlyException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ReadOnlyException 类

ReadOnlyException 类型公开以下成员。

名称 说明
页首

参考

ReadOnlyException 类
System.Data 命名空间


ReadOnlyException 属性

ReadOnlyException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ReadOnlyException 类

ReadOnlyException 类型公开以下成员。

名称 说明
页首

参考

ReadOnlyException 类
System.Data 命名空间


ReadOnlyException 事件

ReadOnlyException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ReadOnlyException 类

ReadOnlyException 类型公开以下成员。

名称 说明
页首

参考

ReadOnlyException 类
System.Data 命名空间


RowNotInTableException 类

RowNotInTableException 类
成员

表示尝试在不位于 DataTable 中的 DataRow 上执行操作时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class RowNotInTableException _
    Inherits DataException
[SerializableAttribute]
public class RowNotInTableException : DataException
[SerializableAttribute]
public ref class RowNotInTableException : public DataException
[<SerializableAttribute>]
type RowNotInTableException =
    class
        inherit DataException
    end

在已经用 Delete 或 DataRowCollection..::.Remove 方法删除的行上调用以下方法时，引发 RowNotInTableException。

  • DataRow AcceptChanges

  • DataRow GetChildRows

  • DataRow GetParentRow

  • DataRow GetParentRows

  • DataRow RejectChanges

  • DataRow SetParentRow

下面的示例创建一个具有 1 个 DataColumn 对象和 10 个 DataRow 对象的 DataTable。删除一行后，将调用 AcceptChanges 方法，进而导致引发 RowNotInTableException。 下面的示例创建一个具有 1 个 DataColumn 对象和 10 个 DataRow 对象的 DataTable。删除一行后，将调用 AcceptChanges 方法，进而导致引发 RowNotInTableException。

Private Sub DemonstrateRowNotInTableException()
    ' Create a DataTable with one column and ten rows.
    Dim table As New DataTable("NewTable")
    Dim column As New DataColumn("NewColumn")
    table.Columns.Add(column)

    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("NewColumn") = i
        table.Rows.Add(newRow)
    Next i

    Try
        ' Remove a row and invoke AcceptChanges.
        Dim removedRow As DataRow = table.Rows(9)
        removedRow.Delete()
        removedRow.AcceptChanges()

    Catch rowException As System.Data.RowNotInTableException
        Console.WriteLine("Row not in table")
    End Try
End Sub

private void DemonstrateRowNotInTableException()
{
    // Create a DataTable with one column and ten rows.
    DataTable table = new DataTable("NewTable");
    DataColumn column = new DataColumn("NewColumn");
    table.Columns.Add(column);

    DataRow newRow;
    for(int i = 0;i <10;i++)
    {
        newRow = table.NewRow();
        newRow["NewColumn"] = i;
        table.Rows.Add(newRow);
    }
    try
    {
        // Remove a row and invoke AcceptChanges.
        DataRow removedRow = table.Rows[9];
        removedRow.Delete();
        removedRow.AcceptChanges();

    }
    catch(System.Data.RowNotInTableException rowException)
    {
        Console.WriteLine("Row not in table");
    }
}

System.Data System.Data..::.RowNotInTableExceptionRowNotInTableException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowNotInTableException 成员
System.Data 命名空间


RowNotInTableException 成员

RowNotInTableException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowNotInTableException 类

表示尝试在不位于 DataTable 中的 DataRow 上执行操作时引发的异常。

RowNotInTableException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

RowNotInTableException 类
System.Data 命名空间


RowNotInTableException 构造函数

RowNotInTableException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowNotInTableException 类

在不使用参数的情况下初始化 RowNotInTableException 类的新实例。

名称 说明
页首

参考

RowNotInTableException 类
RowNotInTableException 成员
System.Data 命名空间


RowNotInTableException 构造函数

RowNotInTableException 构造函数
RowNotInTableException 类

初始化 RowNotInTableException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public RowNotInTableException()
public:
RowNotInTableException()
new : unit -> RowNotInTableException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowNotInTableException 类
RowNotInTableException 成员
RowNotInTableException 重载
System.Data 命名空间


RowNotInTableException 构造函数 (String)

RowNotInTableException 构造函数 (String)
RowNotInTableException 类

使用指定的字符串初始化 RowNotInTableException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public RowNotInTableException(
    string s
)
public:
RowNotInTableException(
    String^ s
)
new :
        s:string -> RowNotInTableException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowNotInTableException 类
RowNotInTableException 成员
RowNotInTableException 重载
System.Data 命名空间


RowNotInTableException 构造函数 (SerializationInfo, StreamingContext)

RowNotInTableException 构造函数 (SerializationInfo, StreamingContext)
RowNotInTableException 类

以序列化信息初始化 RowNotInTableException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected RowNotInTableException(
    SerializationInfo info,
    StreamingContext context
)
protected:
RowNotInTableException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> RowNotInTableException

参数

info
类型： System.Runtime.Serialization SerializationInfo
序列化或反序列化某个对象所需的数据。。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

RowNotInTableException 类
RowNotInTableException 成员
RowNotInTableException 重载
System.Data 命名空间
StreamingContext
SerializationInfo


RowNotInTableException 构造函数 (String, Exception)

RowNotInTableException 构造函数 (String, Exception)
RowNotInTableException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 RowNotInTableException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public RowNotInTableException(
    string message,
    Exception innerException
)
public:
RowNotInTableException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> RowNotInTableException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowNotInTableException 类
RowNotInTableException 成员
RowNotInTableException 重载
System.Data 命名空间


RowNotInTableException 方法

RowNotInTableException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowNotInTableException 类

RowNotInTableException 类型公开以下成员。

名称 说明
页首

参考

RowNotInTableException 类
System.Data 命名空间


RowNotInTableException 属性

RowNotInTableException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowNotInTableException 类

RowNotInTableException 类型公开以下成员。

名称 说明
页首

参考

RowNotInTableException 类
System.Data 命名空间


RowNotInTableException 事件

RowNotInTableException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowNotInTableException 类

RowNotInTableException 类型公开以下成员。

名称 说明
页首

参考

RowNotInTableException 类
System.Data 命名空间


Rule 枚举

Rule 枚举

指示在强制 ForeignKeyConstraint 时发生的操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration Rule
public enum Rule
public enum class Rule
type Rule
 | 成员名称 | 说明
由 XNA Framework 提供支持 | None | 不对相关的行采取任何操作。
由 XNA Framework 提供支持 | Cascade | 删除或更新相关的行。这是默认选项。 删除或更新相关的行。这是默认选项。
由 XNA Framework 提供支持 | SetNull | 将相关的行中的值设置为 DBNull。
由 XNA Framework 提供支持 | SetDefault | 将相关的行中的值设置为 DefaultValue 属性中包含的值。

将 Rule 值设置为在 DataTable 对象的 ConstraintCollection 中的找到的 ForeignKeyConstraint 对象的 UpdateRule 和 DeleteRule 属性。

Rule 值确定在删除或更新列中的值时发生的操作。在这两种操作中，删除值更关键，在设置规则时要特别小心。 Rule 值确定在删除或更新列中的值时发生的操作。在这两种操作中，删除值更关键，在设置规则时要特别小心。

在删除值的情况下，Cascade 指定同时删除包含该值的所有行。SetNull 指定将所有子列中的值设置为 null 值。SetDefault 指定必须将所有子列设置为列的默认值。None 指定不发生任何操作，但是生成异常。 在删除值的情况下，Cascade 指定同时删除包含该值的所有行。SetNull 指定将所有子列中的值设置为 null 值。SetDefault 指定必须将所有子列设置为列的默认值。None 指定不发生任何操作，但是生成异常。 在删除值的情况下，Cascade 指定同时删除包含该值的所有行。SetNull 指定将所有子列中的值设置为 null 值。SetDefault 指定必须将所有子列设置为列的默认值。None 指定不发生任何操作，但是生成异常。 在删除值的情况下，Cascade 指定同时删除包含该值的所有行。SetNull 指定将所有子列中的值设置为 null 值。SetDefault 指定必须将所有子列设置为列的默认值。None 指定不发生任何操作，但是生成异常。

在更新值的情况下，Cascade 指定所有子列都同样以新值更新。SetNull 指定必须将所有子列设置为 null 值。SetDefault 指定必须将所有子列值设置为默认值。None 指定不采取任何操作，但是生成异常。 在更新值的情况下，Cascade 指定所有子列都同样以新值更新。SetNull 指定必须将所有子列设置为 null 值。SetDefault 指定必须将所有子列值设置为默认值。None 指定不采取任何操作，但是生成异常。 在更新值的情况下，Cascade 指定所有子列都同样以新值更新。SetNull 指定必须将所有子列设置为 null 值。SetDefault 指定必须将所有子列值设置为默认值。None 指定不采取任何操作，但是生成异常。 在更新值的情况下，Cascade 指定所有子列都同样以新值更新。SetNull 指定必须将所有子列设置为 null 值。SetDefault 指定必须将所有子列值设置为默认值。None 指定不采取任何操作，但是生成异常。

除非 EnforceConstraints 属性是 true，否则不在 DataSet 上强制约束。

在调用 AcceptChanges 方法时，AcceptRejectRule 进一步确定发生什么操作。

' The next line goes into the Declarations section of the module:
' SuppliersProducts is a class derived from DataSet.
Private suppliersProducts As SuppliersProducts

Private Sub CreateConstraint()
    ' Declare parent column and child column variables.
    Dim parentColumn As DataColumn
    Dim childColumn As DataColumn
    Dim fkeyConstraint As ForeignKeyConstraint

    ' Set parent and child column variables.
    parentColumn = suppliersProducts.Tables("Suppliers").Columns("SupplierID")
    childColumn = suppliersProducts.Tables("Products").Columns("SupplierID")
    fkeyConstraint = New ForeignKeyConstraint( _
        "SupplierFKConstraint", parentColumn, childColumn)

    ' Set null values when a value is deleted.
    fkeyConstraint.DeleteRule = Rule.SetNull
    fkeyConstraint.UpdateRule = Rule.Cascade
    fkeyConstraint.AcceptRejectRule = AcceptRejectRule.Cascade

    ' Add the constraint, and set EnforceConstraints to true.
    suppliersProducts.Tables("Products").Constraints.Add(fkeyConstraint)
    suppliersProducts.EnforceConstraints = True
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间
Constraints
ForeignKeyConstraint


SchemaSerializationMode 枚举

SchemaSerializationMode 枚举

指示类型化 DataSet 的架构序列化模式。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration SchemaSerializationMode
public enum SchemaSerializationMode
public enum class SchemaSerializationMode
type SchemaSerializationMode
 | 成员名称 | 说明
由 XNA Framework 提供支持 | IncludeSchema | 包括类型化 DataSet 的架构序列化。默认值。 包括类型化 DataSet 的架构序列化。默认值。
由 XNA Framework 提供支持 | ExcludeSchema | 跳过类型化 DataSet 的架构序列化。

将类型化 DataSet 的 SchemaSerializationMode 属性设置为 ExcludeSchema 可以提供忽略序列化负载中的架构信息的选项。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


SchemaType 枚举

SchemaType 枚举

指定在执行 FillSchema 操作时如何处理现有的架构映射。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration SchemaType
public enum SchemaType
public enum class SchemaType
type SchemaType
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Source | 忽略 DataAdapter 上的任何表映射。使用传入架构配置 DataSet，而不应用任何转换。 忽略 DataAdapter 上的任何表映射。使用传入架构配置 DataSet，而不应用任何转换。
由 XNA Framework 提供支持 | Mapped | 将任何现有的表映射应用到传入架构。用转换的架构配置 DataSet。 将任何现有的表映射应用到传入架构。用转换的架构配置 DataSet。

通常应将 SchemaType 设置为 Mapped，因为这样将使用任何已建立的表和列映射。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


SerializationFormat 枚举

SerializationFormat 枚举

确定 DataSet 的序列化格式。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration SerializationFormat
public enum SerializationFormat
public enum class SerializationFormat
type SerializationFormat
成员名称 | 说明
Xml | 作为 XML 内容序列化。默认值。 作为 XML 内容序列化。默认值。
Binary | 作为二进制内容序列化。仅可在 ADO.NET 2.0 中使用。 作为二进制内容序列化。仅可在 ADO.NET 2.0 中使用。

Microsoft ADO.NET 2.0 引入了将 Dataset 序列化为二进制内容的功能。Microsoft .NET Framework 的早期版本不支持二进制序列化。 Microsoft ADO.NET 2.0 引入了将 Dataset 序列化为二进制内容的功能。Microsoft .NET Framework 的早期版本不支持二进制序列化。

默认格式为 Xml。这种功能是向后兼容的，可以与所有版本的 .NET Framework 一起使用。 默认格式为 Xml。这种功能是向后兼容的，可以与所有版本的 .NET Framework 一起使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data 命名空间


SqlDbType 枚举

SqlDbType 枚举

指定要用于 SqlParameter 中的字段和属性的 SQL Server 特定的数据类型。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration SqlDbType
public enum SqlDbType
public enum class SqlDbType
type SqlDbType
 | 成员名称 | 说明
由 XNA Framework 提供支持 | BigInt | Int64.64 位带符号整数。 Int64.64 位带符号整数。
由 XNA Framework 提供支持 | Binary | Byte 类型的 Array。二进制数据的固定长度流，范围在 1 到 8,000 个字节之间。 Byte 类型的 Array。二进制数据的固定长度流，范围在 1 到 8,000 个字节之间。
由 XNA Framework 提供支持 | Bit | Boolean.无符号数值，可以是 0、1 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 Boolean.无符号数值，可以是 0、1 或 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
由 XNA Framework 提供支持 | Char | String.非 Unicode 字符的固定长度流，范围在 1 到 8,000 个字符之间。 String.非 Unicode 字符的固定长度流，范围在 1 到 8,000 个字符之间。
由 XNA Framework 提供支持 | DateTime | DateTime.日期和时间数据，值范围从 1753 年 1 月 1 日到 9999 年 12 月 31 日，精度为 3.33 毫秒。 DateTime.日期和时间数据，值范围从 1753 年 1 月 1 日到 9999 年 12 月 31 日，精度为 3.33 毫秒。
由 XNA Framework 提供支持 | Decimal | Decimal.固定精度和小数位数数值，在 -10 38 -1 和 10 38 -1 之间。 Decimal.固定精度和小数位数数值，在 -10 38 -1 和 10 38 -1 之间。
由 XNA Framework 提供支持 | Float | Double.-1.79E +308 到 1.79E +308 范围内的浮点数。 Double.-1.79E +308 到 1.79E +308 范围内的浮点数。
由 XNA Framework 提供支持 | Image | Byte 类型的 Array。二进制数据的可变长度流，范围在 0 到 2 31 -1（即 2,147,483,647）字节之间。 Byte 类型的 Array。二进制数据的可变长度流，范围在 0 到 2 31 -1（即 2,147,483,647）字节之间。
由 XNA Framework 提供支持 | Int | Int32.32 位带符号整数。 Int32.32 位带符号整数。
由 XNA Framework 提供支持 | Money | Decimal.货币值，范围在 -2 63（即 -922,337,203,685,477.5808）到 2 63 -1（即 +922,337,203,685,477.5807）之间，精度为千分之十个货币单位。 Decimal.货币值，范围在 -2 63（即 -922,337,203,685,477.5808）到 2 63 -1（即 +922,337,203,685,477.5807）之间，精度为千分之十个货币单位。
由 XNA Framework 提供支持 | NChar | String.Unicode 字符的固定长度流，范围在 1 到 4,000 个字符之间。 String.Unicode 字符的固定长度流，范围在 1 到 4,000 个字符之间。
由 XNA Framework 提供支持 | NText | String.Unicode 数据的可变长度流，最大长度为 2 30 - 1（即 1,073,741,823）个字符。 String.Unicode 数据的可变长度流，最大长度为 2 30 - 1（即 1,073,741,823）个字符。
由 XNA Framework 提供支持 | NVarChar | String.Unicode 字符的可变长度流，范围在 1 到 4,000 个字符之间。如果字符串大于 4,000 个字符，隐式转换会失败。在使用比 4,000 个字符更长的字符串时，请显式设置对象。 String.Unicode 字符的可变长度流，范围在 1 到 4,000 个字符之间。如果字符串大于 4,000 个字符，隐式转换会失败。在使用比 4,000 个字符更长的字符串时，请显式设置对象。 String.Unicode 字符的可变长度流，范围在 1 到 4,000 个字符之间。如果字符串大于 4,000 个字符，隐式转换会失败。在使用比 4,000 个字符更长的字符串时，请显式设置对象。 String.Unicode 字符的可变长度流，范围在 1 到 4,000 个字符之间。如果字符串大于 4,000 个字符，隐式转换会失败。在使用比 4,000 个字符更长的字符串时，请显式设置对象。
由 XNA Framework 提供支持 | Real | Single.-3.40E +38 到 3.40E +38 范围内的浮点数。 Single.-3.40E +38 到 3.40E +38 范围内的浮点数。
由 XNA Framework 提供支持 | UniqueIdentifier | Guid.全局唯一标识符（或 GUID）。 Guid.全局唯一标识符（或 GUID）。
由 XNA Framework 提供支持 | SmallDateTime | DateTime.日期和时间数据，值范围从 1900 年 1 月 1 日到 2079 年 6 月 6 日，精度为 1 分钟。 DateTime.日期和时间数据，值范围从 1900 年 1 月 1 日到 2079 年 6 月 6 日，精度为 1 分钟。
由 XNA Framework 提供支持 | SmallInt | Int16.16 位的带符号整数。 Int16.16 位的带符号整数。
由 XNA Framework 提供支持 | SmallMoney | Decimal.货币值，范围在 -214,748.3648 到 +214,748.3647 之间，精度为千分之十个货币单位。 Decimal.货币值，范围在 -214,748.3648 到 +214,748.3647 之间，精度为千分之十个货币单位。
由 XNA Framework 提供支持 | Text | String.非 Unicode 数据的可变长度流，最大长度为 2 31 -1（即 2,147,483,647）个字符。 String.非 Unicode 数据的可变长度流，最大长度为 2 31 -1（即 2,147,483,647）个字符。
由 XNA Framework 提供支持 | Timestamp | Byte 类型的 Array。自动生成的二进制数字，它们保证在数据库中是唯一的。timestamp 通常用作为表行添加版本戳的机制。存储大小为 8 字节。 Byte 类型的 Array。自动生成的二进制数字，它们保证在数据库中是唯一的。timestamp 通常用作为表行添加版本戳的机制。存储大小为 8 字节。 Byte 类型的 Array。自动生成的二进制数字，它们保证在数据库中是唯一的。timestamp 通常用作为表行添加版本戳的机制。存储大小为 8 字节。 Byte 类型的 Array。自动生成的二进制数字，它们保证在数据库中是唯一的。timestamp 通常用作为表行添加版本戳的机制。存储大小为 8 字节。
由 XNA Framework 提供支持 | TinyInt | Byte.8 位无符号整数。 Byte.8 位无符号整数。
由 XNA Framework 提供支持 | VarBinary | Byte 类型的 Array。二进制数据的可变长度流，范围在 1 到 8,000 个字节之间。如果字节数组大于 8,000 个字节，隐式转换会失败。在使用比 8,000 个字节大的字节数组时，请显式设置对象。 Byte 类型的 Array。二进制数据的可变长度流，范围在 1 到 8,000 个字节之间。如果字节数组大于 8,000 个字节，隐式转换会失败。在使用比 8,000 个字节大的字节数组时，请显式设置对象。 Byte 类型的 Array。二进制数据的可变长度流，范围在 1 到 8,000 个字节之间。如果字节数组大于 8,000 个字节，隐式转换会失败。在使用比 8,000 个字节大的字节数组时，请显式设置对象。 Byte 类型的 Array。二进制数据的可变长度流，范围在 1 到 8,000 个字节之间。如果字节数组大于 8,000 个字节，隐式转换会失败。在使用比 8,000 个字节大的字节数组时，请显式设置对象。
由 XNA Framework 提供支持 | VarChar | String.非 Unicode 字符的可变长度流，范围在 1 到 8,000 个字符之间。 String.非 Unicode 字符的可变长度流，范围在 1 到 8,000 个字符之间。
由 XNA Framework 提供支持 | Variant | Object.特殊数据类型，可以包含数值、字符串、二进制或日期数据，以及 SQL Server 值 Empty 和 Null，后两个值在未声明其他类型的情况下采用。 Object.特殊数据类型，可以包含数值、字符串、二进制或日期数据，以及 SQL Server 值 Empty 和 Null，后两个值在未声明其他类型的情况下采用。
由 XNA Framework 提供支持 | Xml | XML 值。使用 GetValue 方法或 Value 属性获取字符串形式的 XML，或通过调用 CreateReader 方法获取 XmlReader 形式的 XML。 XML 值。使用 GetValue 方法或 Value 属性获取字符串形式的 XML，或通过调用 CreateReader 方法获取 XmlReader 形式的 XML。
由 XNA Framework 提供支持 | Udt | SQL Server 2005 用户定义的类型 (UDT)。
由 XNA Framework 提供支持 | Structured | 指定表值参数中包含的构造数据的特殊数据类型。
由 XNA Framework 提供支持 | Date | 日期数据，值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。
由 XNA Framework 提供支持 | Time | 基于 24 小时制的时间数据。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。对应于 SQL Server time 值。 基于 24 小时制的时间数据。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。对应于 SQL Server time 值。 基于 24 小时制的时间数据。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。对应于 SQL Server time 值。
由 XNA Framework 提供支持 | DateTime2 | 日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。 日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。 日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。
由 XNA Framework 提供支持 | DateTimeOffset | 显示时区的日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。时区值范围从 -14:00 到 +14:00。 显示时区的日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。时区值范围从 -14:00 到 +14:00。 显示时区的日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。时区值范围从 -14:00 到 +14:00。 显示时区的日期和时间数据。日期值范围从公元 1 年 1 月 1 日到公元 9999 年 12 月 31 日。时间值范围从 00:00:00 到 23:59:59.9999999，精度为 100 毫微秒。时区值范围从 -14:00 到 +14:00。

在设置命令参数时，会链接 SqlDbType 和 DbType。因此，设置 DbType 会将 SqlDbType 更改为支持 SqlDbType。 在设置命令参数时，会链接 SqlDbType 和 DbType。因此，设置 DbType 会将 SqlDbType 更改为支持 SqlDbType。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间

其他资源

配置参数和参数数据类型 (ADO.NET)
ADO.NET 中的数据类型映射
SQL Server 数据类型和 ADO.NET


StateChangeEventArgs 类

StateChangeEventArgs 类
成员

为 .NET Framework 数据提供程序的状态更改事件提供数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class StateChangeEventArgs _
    Inherits EventArgs
public sealed class StateChangeEventArgs : EventArgs
public ref class StateChangeEventArgs sealed : public EventArgs
[<SealedAttribute>]
type StateChangeEventArgs =
    class
        inherit EventArgs
    end

该数据由 OleDbConnection 的 StateChange 属性和 SqlConnection 的 StateChange 属性使用。

下面的示例说明如何在 SqlConnection 类内使用 StateChange 事件。

    ' Handler for the OnStateChange event.
    Private Sub OnStateChange(ByVal sender As Object, _
        ByVal e As StateChangeEventArgs)
        PrintEventArgs(e)
    End Sub

    Sub Main()
        FillDataSet()
    End Sub

    Private Sub FillDataSet()
        Dim connectionString As String = GetConnectionString()
        Dim queryString As String = _
            "SELECT ProductID, UnitPrice from dbo.Products;"

        ' Create a DataAdapter.
        Using dataAdapter As New SqlDataAdapter( _
            queryString, connectionString)

            ' Add the handlers.
            AddHandler dataAdapter.SelectCommand.Connection.StateChange, _
                AddressOf OnStateChange

            ' Create a DataSet.
            Dim dataSet As New DataSet()

            ' Fill the DataSet, which fires several StateChange events.
            dataAdapter.Fill(dataSet, 0, 5, "Table")
        End Using
    End Sub

    Private Sub PrintEventArgs(ByVal args As StateChangeEventArgs)
        Console.WriteLine("StateChangeEventArgs")
        Console.WriteLine("  OriginalState= {0} CurrentState= {1}", _
            args.OriginalState, args.CurrentState)
    End Sub

    Private Function GetConnectionString() As String
        ' To avoid storing the connection string in your code,
        ' you can retrieve it from a configuration file.
        Return "Data Source=(local);Initial Catalog=Northwind;" _
           & "Integrated Security=true;"
    End Function

// Handler for OnStateChange event.
protected static void OnStateChange(object sender,
    StateChangeEventArgs e)
{
    PrintEventArgs(e);
}

static void Main()
{
    FillDataSet();
}

static private void FillDataSet()
{
    string connectionString = GetConnectionString();
    string queryString =
        "SELECT ProductID, UnitPrice from dbo.Products;";

    // Create a DataAdapter.
    using (SqlDataAdapter dataAdapter =
               new SqlDataAdapter(queryString, connectionString))
    {

        // Add the handlers.
        dataAdapter.SelectCommand.Connection.StateChange
            += new StateChangeEventHandler(OnStateChange);

        // Create a DataSet.
        DataSet dataSet = new DataSet();

        // Fill the DataSet, which fires several StateChange events.
        dataAdapter.Fill(dataSet, 0, 5, "Table");
    }
}

protected static void PrintEventArgs(StateChangeEventArgs args)
{
    Console.WriteLine("StateChangeEventArgs");
    Console.WriteLine("  OriginalState= {0} CurrentState= {1}",
        args.OriginalState, args.CurrentState);
}

static private string GetConnectionString()
{
    // To avoid storing the connection string in your code,
    // you can retrieve it from a configuration file.
    return "Data Source=(local);Initial Catalog=Northwind;"
        + "Integrated Security=true";
}

System.Data System.Data..::.StateChangeEventArgsStateChangeEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StateChangeEventArgs 成员
System.Data 命名空间


StateChangeEventArgs 成员

StateChangeEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StateChangeEventArgs 类

为 .NET Framework 数据提供程序的状态更改事件提供数据。

StateChangeEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

StateChangeEventArgs 类
System.Data 命名空间


StateChangeEventArgs 构造函数

StateChangeEventArgs 构造函数
StateChangeEventArgs 类

在给定对象的原始状态和当前状态的情况下，初始化 StateChangeEventArgs 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    originalState As ConnectionState, _
    currentState As ConnectionState _
)
public StateChangeEventArgs(
    ConnectionState originalState,
    ConnectionState currentState
)
public:
StateChangeEventArgs(
    ConnectionState originalState,
    ConnectionState currentState
)
new :
        originalState:ConnectionState *
        currentState:ConnectionState -> StateChangeEventArgs

参数

originalState
类型： System.Data ConnectionState
ConnectionState 值之一。
currentState
类型： System.Data ConnectionState
ConnectionState 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StateChangeEventArgs 类
StateChangeEventArgs 成员
System.Data 命名空间


StateChangeEventArgs 方法

StateChangeEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StateChangeEventArgs 类

StateChangeEventArgs 类型公开以下成员。

名称 说明
页首

参考

StateChangeEventArgs 类
System.Data 命名空间


StateChangeEventArgs 属性

StateChangeEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StateChangeEventArgs 类

StateChangeEventArgs 类型公开以下成员。

名称 说明
页首

参考

StateChangeEventArgs 类
System.Data 命名空间


StateChangeEventArgs ..::.CurrentState 属性

StateChangeEventArgs
.
.
::
.
CurrentState 属性
StateChangeEventArgs 类

获取连接的新状态。在激发该事件时，连接对象将处于新状态。 获取连接的新状态。在激发该事件时，连接对象将处于新状态。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property CurrentState As ConnectionState
    Get
public ConnectionState CurrentState { get; }
public:
property ConnectionState CurrentState {
    ConnectionState get ();
}
member CurrentState : ConnectionState

属性值

类型： System.Data ConnectionState
ConnectionState 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StateChangeEventArgs 类
StateChangeEventArgs 成员
System.Data 命名空间


StateChangeEventArgs ..::.OriginalState 属性

StateChangeEventArgs
.
.
::
.
OriginalState 属性
StateChangeEventArgs 类

获取连接的原始状态。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property OriginalState As ConnectionState
    Get
public ConnectionState OriginalState { get; }
public:
property ConnectionState OriginalState {
    ConnectionState get ();
}
member OriginalState : ConnectionState

属性值

类型： System.Data ConnectionState
ConnectionState 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StateChangeEventArgs 类
StateChangeEventArgs 成员
System.Data 命名空间


StateChangeEventHandler 委托

StateChangeEventHandler 委托

表示将处理 StateChange 事件的方法。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Delegate Sub StateChangeEventHandler ( _
    sender As Object, _
    e As StateChangeEventArgs _
)
public delegate void StateChangeEventHandler(
    Object sender,
    StateChangeEventArgs e
)
public delegate void StateChangeEventHandler(
    Object^ sender,
    StateChangeEventArgs^ e
)
type StateChangeEventHandler =
    delegate of
        sender:Object *
        e:StateChangeEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.Data StateChangeEventArgs
包含事件数据的 StateChangeEventArgs。

当创建 StateChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见事件和委托。 当创建 StateChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见事件和委托。 当创建 StateChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见事件和委托。 当创建 StateChangeEventHandler 委托时，将标识处理事件的方法。若要使该事件与事件处理程序相关联，请将该委托的一个实例添加到事件中。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见事件和委托。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


StatementCompletedEventArgs 类

StatementCompletedEventArgs 类
成员

为 StatementCompleted 事件提供附加信息。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class StatementCompletedEventArgs _
    Inherits EventArgs
public sealed class StatementCompletedEventArgs : EventArgs
public ref class StatementCompletedEventArgs sealed : public EventArgs
[<SealedAttribute>]
type StatementCompletedEventArgs =
    class
        inherit EventArgs
    end

System.Data System.Data..::.StatementCompletedEventArgsStatementCompletedEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

StatementCompletedEventArgs 成员
System.Data 命名空间


StatementCompletedEventArgs 成员

StatementCompletedEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StatementCompletedEventArgs 类

为 StatementCompleted 事件提供附加信息。

StatementCompletedEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

StatementCompletedEventArgs 类
System.Data 命名空间


StatementCompletedEventArgs 构造函数

StatementCompletedEventArgs 构造函数
StatementCompletedEventArgs 类

创建 StatementCompletedEventArgs 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    recordCount As Integer _
)
public StatementCompletedEventArgs(
    int recordCount
)
public:
StatementCompletedEventArgs(
    int recordCount
)
new :
        recordCount:int -> StatementCompletedEventArgs

参数

recordCount
类型： System Int32
指示受导致 StatementCompleted 事件发生的语句影响的行数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

StatementCompletedEventArgs 类
StatementCompletedEventArgs 成员
System.Data 命名空间


StatementCompletedEventArgs 方法

StatementCompletedEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StatementCompletedEventArgs 类

StatementCompletedEventArgs 类型公开以下成员。

名称 说明
页首

参考

StatementCompletedEventArgs 类
System.Data 命名空间


StatementCompletedEventArgs 属性

StatementCompletedEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StatementCompletedEventArgs 类

StatementCompletedEventArgs 类型公开以下成员。

名称 说明
页首

参考

StatementCompletedEventArgs 类
System.Data 命名空间


StatementCompletedEventArgs ..::.RecordCount 属性

StatementCompletedEventArgs
.
.
::
.
RecordCount 属性
StatementCompletedEventArgs 类

指示受导致 StatementCompleted 事件发生的语句影响的行数。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property RecordCount As Integer
    Get
public int RecordCount { get; }
public:
property int RecordCount {
    int get ();
}
member RecordCount : int

属性值

类型： System Int32
受影响的行数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

StatementCompletedEventArgs 类
StatementCompletedEventArgs 成员
System.Data 命名空间


StatementCompletedEventHandler 委托

StatementCompletedEventHandler 委托

StatementCompleted 事件的事件处理程序的委托类型。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Delegate Sub StatementCompletedEventHandler ( _
    sender As Object, _
    e As StatementCompletedEventArgs _
)
public delegate void StatementCompletedEventHandler(
    Object sender,
    StatementCompletedEventArgs e
)
public delegate void StatementCompletedEventHandler(
    Object^ sender,
    StatementCompletedEventArgs^ e
)
type StatementCompletedEventHandler =
    delegate of
        sender:Object *
        e:StatementCompletedEventArgs -> unit

参数

sender
类型： System Object
事件源。
e
类型： System.Data StatementCompletedEventArgs
事件的相关数据。

当创建 StatementCompletedEventHandler 委托时，将标识处理事件的方法。要将事件与事件处理程序相关联，请为事件添加一个委托实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 StatementCompletedEventHandler 委托时，将标识处理事件的方法。要将事件与事件处理程序相关联，请为事件添加一个委托实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 StatementCompletedEventHandler 委托时，将标识处理事件的方法。要将事件与事件处理程序相关联，请为事件添加一个委托实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。 当创建 StatementCompletedEventHandler 委托时，将标识处理事件的方法。要将事件与事件处理程序相关联，请为事件添加一个委托实例。除非移除了该委托，否则每当发生该事件时就调用事件处理程序。有关事件处理程序委托的更多信息，请参见 事件和委托。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data 命名空间


StatementType 枚举

StatementType 枚举

指定由 OleDbRowUpdatedEventArgs、OleDbRowUpdatingEventArgs、SqlRowUpdatedEventArgs 或 SqlRowUpdatingEventArgs 类使用的 SQL 查询的类型。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration StatementType
public enum StatementType
public enum class StatementType
type StatementType
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Select | SQL 查询，它是 SELECT 语句。
由 XNA Framework 提供支持 | Insert | SQL 查询，它是 INSERT 语句。
由 XNA Framework 提供支持 | Update | SQL 查询，它是 UPDATE 语句。
由 XNA Framework 提供支持 | Delete | SQL 查询，它是 DELETE 语句。
由 XNA Framework 提供支持 | Batch | SQL 查询，它是批处理语句。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


StrongTypingException 类

StrongTypingException 类
成员

在用户访问 DBNull 值时，强类型 DataSet 引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class StrongTypingException _
    Inherits DataException
[SerializableAttribute]
public class StrongTypingException : DataException
[SerializableAttribute]
public ref class StrongTypingException : public DataException
[<SerializableAttribute>]
type StrongTypingException =
    class
        inherit DataException
    end

StrongTypingException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

System.Data System.Data..::.StrongTypingExceptionStrongTypingException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StrongTypingException 成员
System.Data 命名空间


StrongTypingException 成员

StrongTypingException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StrongTypingException 类

在用户访问 DBNull 值时，强类型 DataSet 引发的异常。

StrongTypingException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

StrongTypingException 类
System.Data 命名空间


StrongTypingException 构造函数

StrongTypingException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StrongTypingException 类

初始化 StrongTypingException 类的新实例。

名称 说明
页首

参考

StrongTypingException 类
StrongTypingException 成员
System.Data 命名空间


StrongTypingException 构造函数

StrongTypingException 构造函数
StrongTypingException 类

初始化 StrongTypingException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public StrongTypingException()
public:
StrongTypingException()
new : unit -> StrongTypingException

StrongTypingException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StrongTypingException 类
StrongTypingException 成员
StrongTypingException 重载
System.Data 命名空间


StrongTypingException 构造函数 (String)

StrongTypingException 构造函数 (String)
StrongTypingException 类

使用指定的字符串初始化 StrongTypingException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String _
)
public StrongTypingException(
    string message
)
public:
StrongTypingException(
    String^ message
)
new :
        message:string -> StrongTypingException

参数

message
类型： System String
当引发异常时显示的字符串。

StrongTypingException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StrongTypingException 类
StrongTypingException 成员
StrongTypingException 重载
System.Data 命名空间


StrongTypingException 构造函数 (SerializationInfo, StreamingContext)

StrongTypingException 构造函数 (SerializationInfo, StreamingContext)
StrongTypingException 类

使用指定的序列化信息和流上下文初始化 StrongTypingException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected StrongTypingException(
    SerializationInfo info,
    StreamingContext context
)
protected:
StrongTypingException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> StrongTypingException

参数

info
类型： System.Runtime.Serialization SerializationInfo
一个 SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
一个 StreamingContext 结构。

StrongTypingException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

StrongTypingException 类
StrongTypingException 成员
StrongTypingException 重载
System.Data 命名空间


StrongTypingException 构造函数 (String, Exception)

StrongTypingException 构造函数 (String, Exception)
StrongTypingException 类

使用指定的字符串和内部异常初始化 StrongTypingException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String, _
    innerException As Exception _
)
public StrongTypingException(
    string s,
    Exception innerException
)
public:
StrongTypingException(
    String^ s,
    Exception^ innerException
)
new :
        s:string *
        innerException:Exception -> StrongTypingException

参数

s
类型： System String
当引发异常时显示的字符串。
innerException
类型： System Exception
对内部异常的引用。

StrongTypingException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

StrongTypingException 类
StrongTypingException 成员
StrongTypingException 重载
System.Data 命名空间


StrongTypingException 方法

StrongTypingException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StrongTypingException 类

StrongTypingException 类型公开以下成员。

名称 说明
页首

参考

StrongTypingException 类
System.Data 命名空间


StrongTypingException 属性

StrongTypingException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StrongTypingException 类

StrongTypingException 类型公开以下成员。

名称 说明
页首

参考

StrongTypingException 类
System.Data 命名空间


StrongTypingException 事件

StrongTypingException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
StrongTypingException 类

StrongTypingException 类型公开以下成员。

名称 说明
页首

参考

StrongTypingException 类
System.Data 命名空间


SyntaxErrorException 类

SyntaxErrorException 类
成员

表示在 DataColumn 的 Expression 属性包含语法错误时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class SyntaxErrorException _
    Inherits InvalidExpressionException
[SerializableAttribute]
public class SyntaxErrorException : InvalidExpressionException
[SerializableAttribute]
public ref class SyntaxErrorException : public InvalidExpressionException
[<SerializableAttribute>]
type SyntaxErrorException =
    class
        inherit InvalidExpressionException
    end

System.Data System.Data..::.SyntaxErrorExceptionSyntaxErrorException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SyntaxErrorException 成员
System.Data 命名空间


SyntaxErrorException 成员

SyntaxErrorException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SyntaxErrorException 类

表示在 DataColumn 的 Expression 属性包含语法错误时引发的异常。

SyntaxErrorException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

SyntaxErrorException 类
System.Data 命名空间


SyntaxErrorException 构造函数

SyntaxErrorException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SyntaxErrorException 类

初始化 SyntaxErrorException 类的新实例。

名称 说明
页首

参考

SyntaxErrorException 类
SyntaxErrorException 成员
System.Data 命名空间


SyntaxErrorException 构造函数

SyntaxErrorException 构造函数
SyntaxErrorException 类

初始化 SyntaxErrorException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public SyntaxErrorException()
public:
SyntaxErrorException()
new : unit -> SyntaxErrorException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SyntaxErrorException 类
SyntaxErrorException 成员
SyntaxErrorException 重载
System.Data 命名空间


SyntaxErrorException 构造函数 (String)

SyntaxErrorException 构造函数 (String)
SyntaxErrorException 类

使用指定的字符串初始化 SyntaxErrorException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public SyntaxErrorException(
    string s
)
public:
SyntaxErrorException(
    String^ s
)
new :
        s:string -> SyntaxErrorException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SyntaxErrorException 类
SyntaxErrorException 成员
SyntaxErrorException 重载
System.Data 命名空间


SyntaxErrorException 构造函数 (SerializationInfo, StreamingContext)

SyntaxErrorException 构造函数 (SerializationInfo, StreamingContext)
SyntaxErrorException 类

使用 SerializationInfo 和 StreamingContext 初始化 SyntaxErrorException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected SyntaxErrorException(
    SerializationInfo info,
    StreamingContext context
)
protected:
SyntaxErrorException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> SyntaxErrorException

参数

info
类型： System.Runtime.Serialization SerializationInfo
将对象序列化或反序列化所需的数据。
context
类型： System.Runtime.Serialization StreamingContext
特定序列化流的源和目标。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

SyntaxErrorException 类
SyntaxErrorException 成员
SyntaxErrorException 重载
System.Data 命名空间


SyntaxErrorException 构造函数 (String, Exception)

SyntaxErrorException 构造函数 (String, Exception)
SyntaxErrorException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 SyntaxErrorException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public SyntaxErrorException(
    string message,
    Exception innerException
)
public:
SyntaxErrorException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> SyntaxErrorException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SyntaxErrorException 类
SyntaxErrorException 成员
SyntaxErrorException 重载
System.Data 命名空间


SyntaxErrorException 方法

SyntaxErrorException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SyntaxErrorException 类

SyntaxErrorException 类型公开以下成员。

名称 说明
页首

参考

SyntaxErrorException 类
System.Data 命名空间


SyntaxErrorException 属性

SyntaxErrorException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SyntaxErrorException 类

SyntaxErrorException 类型公开以下成员。

名称 说明
页首

参考

SyntaxErrorException 类
System.Data 命名空间


SyntaxErrorException 事件

SyntaxErrorException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SyntaxErrorException 类

SyntaxErrorException 类型公开以下成员。

名称 说明
页首

参考

SyntaxErrorException 类
System.Data 命名空间


TypedDataSetGenerator 类

TypedDataSetGenerator 类
成员

注意：此 API 现在已过时。

用于创建强类型 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<ObsoleteAttribute("TypedDataSetGenerator class will be removed in a future release. Please use System.Data.Design.TypedDataSetGenerator in System.Design.dll.")> _
<HostProtectionAttribute(SecurityAction.LinkDemand, SharedState := True, Synchronization := True)> _
Public Class TypedDataSetGenerator
[ObsoleteAttribute("TypedDataSetGenerator class will be removed in a future release. Please use System.Data.Design.TypedDataSetGenerator in System.Design.dll.")]
[HostProtectionAttribute(SecurityAction.LinkDemand, SharedState = true, Synchronization = true)]
public class TypedDataSetGenerator
[ObsoleteAttribute(L"TypedDataSetGenerator class will be removed in a future release. Please use System.Data.Design.TypedDataSetGenerator in System.Design.dll.")]
[HostProtectionAttribute(SecurityAction::LinkDemand, SharedState = true, Synchronization = true)]
public ref class TypedDataSetGenerator
[<ObsoleteAttribute("TypedDataSetGenerator class will be removed in a future release. Please use System.Data.Design.TypedDataSetGenerator in System.Design.dll.")>]
[<HostProtectionAttribute(SecurityAction.LinkDemand, SharedState = true, Synchronization = true)>]
type TypedDataSetGenerator =  class end

TypedDataSetGenerator 类不用作独立组件，而是用作其他类从中派生标准功能的类。

说明 说明

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值：SharedState | Synchronization。The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser).有关更多信息，请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

System.Data System.Data..::.TypedDataSetGeneratorTypedDataSetGenerator
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

TypedDataSetGenerator 成员
System.Data 命名空间


TypedDataSetGenerator 成员

TypedDataSetGenerator 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedDataSetGenerator 类

用于创建强类型 DataSet。

TypedDataSetGenerator 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

TypedDataSetGenerator 类
System.Data 命名空间


TypedDataSetGenerator 构造函数

TypedDataSetGenerator 构造函数
TypedDataSetGenerator 类

初始化 TypedDataSetGenerator 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public TypedDataSetGenerator()
public:
TypedDataSetGenerator()
new : unit -> TypedDataSetGenerator

TypedDataSetGenerator 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGenerator 类
TypedDataSetGenerator 成员
System.Data 命名空间


TypedDataSetGenerator 方法

TypedDataSetGenerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedDataSetGenerator 类

TypedDataSetGenerator 类型公开以下成员。

名称 说明
页首

参考

TypedDataSetGenerator 类
System.Data 命名空间


TypedDataSetGenerator ..::.Generate 方法

TypedDataSetGenerator
.
.
::
.
Generate 方法
TypedDataSetGenerator 类

生成强类型 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Shared Sub Generate ( _
    dataSet As DataSet, _
    codeNamespace As CodeNamespace, _
    codeGen As ICodeGenerator _
)
public static void Generate(
    DataSet dataSet,
    CodeNamespace codeNamespace,
    ICodeGenerator codeGen
)
public:
static void Generate(
    DataSet^ dataSet,
    CodeNamespace^ codeNamespace,
    ICodeGenerator^ codeGen
)
static member Generate :
        dataSet:DataSet *
        codeNamespace:CodeNamespace *
        codeGen:ICodeGenerator -> unit

参数

dataSet
类型： System.Data DataSet
源 DataSet，它为类型化 DataSet 指定元数据。
codeNamespace
类型： System.CodeDom CodeNamespace
为类型化 DataSet 提供目标命名空间的命名空间。
codeGen
类型： System.CodeDom.Compiler ICodeGenerator
用于创建类型化 DataSet 的生成器。

TypedDataSetGenerator 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGenerator 类
TypedDataSetGenerator 成员
System.Data 命名空间


TypedDataSetGenerator ..::.GenerateIdName 方法

TypedDataSetGenerator
.
.
::
.
GenerateIdName 方法
TypedDataSetGenerator 类

转换有效类型化 DataSet 名称中的字符串。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GenerateIdName ( _
    name As String, _
    codeGen As ICodeGenerator _
) As String
public static string GenerateIdName(
    string name,
    ICodeGenerator codeGen
)
public:
static String^ GenerateIdName(
    String^ name,
    ICodeGenerator^ codeGen
)
static member GenerateIdName :
        name:string *
        codeGen:ICodeGenerator -> string

参数

name
类型： System String
要转换为有效类型化 DataSet 名称的源名称。
codeGen
类型： System.CodeDom.Compiler ICodeGenerator
用于执行转换的生成器。

返回值

类型： System String
一个字符串，它是转换后的名称。

TypedDataSetGenerator 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGenerator 类
TypedDataSetGenerator 成员
System.Data 命名空间


TypedDataSetGeneratorException 类

TypedDataSetGeneratorException 类
成员

在生成强类型 DataSet 时发生名称冲突的情况下引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class TypedDataSetGeneratorException _
    Inherits DataException
[SerializableAttribute]
public class TypedDataSetGeneratorException : DataException
[SerializableAttribute]
public ref class TypedDataSetGeneratorException : public DataException
[<SerializableAttribute>]
type TypedDataSetGeneratorException =
    class
        inherit DataException
    end

TypedDataSetGeneratorException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

System.Data System.Data..::.TypedDataSetGeneratorExceptionTypedDataSetGeneratorException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGeneratorException 成员
System.Data 命名空间


TypedDataSetGeneratorException 成员

TypedDataSetGeneratorException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedDataSetGeneratorException 类

在生成强类型 DataSet 时发生名称冲突的情况下引发的异常。

TypedDataSetGeneratorException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TypedDataSetGeneratorException 类
System.Data 命名空间


TypedDataSetGeneratorException 构造函数

TypedDataSetGeneratorException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedDataSetGeneratorException 类

初始化 TypedDataSetGeneratorException 类的新实例。

名称 说明
页首

参考

TypedDataSetGeneratorException 类
TypedDataSetGeneratorException 成员
System.Data 命名空间


TypedDataSetGeneratorException 构造函数

TypedDataSetGeneratorException 构造函数
TypedDataSetGeneratorException 类

初始化 TypedDataSetGeneratorException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public TypedDataSetGeneratorException()
public:
TypedDataSetGeneratorException()
new : unit -> TypedDataSetGeneratorException

TypedDataSetGeneratorException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGeneratorException 类
TypedDataSetGeneratorException 成员
TypedDataSetGeneratorException 重载
System.Data 命名空间


TypedDataSetGeneratorException 构造函数 (ArrayList)

TypedDataSetGeneratorException 构造函数 (ArrayList)
TypedDataSetGeneratorException 类

初始化 TypedDataSetGeneratorException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    list As ArrayList _
)
public TypedDataSetGeneratorException(
    ArrayList list
)
public:
TypedDataSetGeneratorException(
    ArrayList^ list
)
new :
        list:ArrayList -> TypedDataSetGeneratorException

参数

list
类型： System.Collections ArrayList
ArrayList 对象，包含动态的异常列表。

TypedDataSetGeneratorException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGeneratorException 类
TypedDataSetGeneratorException 成员
TypedDataSetGeneratorException 重载
System.Data 命名空间


TypedDataSetGeneratorException 构造函数 (String)

TypedDataSetGeneratorException 构造函数 (String)
TypedDataSetGeneratorException 类

使用指定的字符串初始化 TypedDataSetGeneratorException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String _
)
public TypedDataSetGeneratorException(
    string message
)
public:
TypedDataSetGeneratorException(
    String^ message
)
new :
        message:string -> TypedDataSetGeneratorException

参数

message
类型： System String
当引发异常时显示的字符串。

TypedDataSetGeneratorException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGeneratorException 类
TypedDataSetGeneratorException 成员
TypedDataSetGeneratorException 重载
System.Data 命名空间


TypedDataSetGeneratorException 构造函数 (SerializationInfo, StreamingContext)

TypedDataSetGeneratorException 构造函数 (SerializationInfo, StreamingContext)
TypedDataSetGeneratorException 类

使用指定的序列化信息和流上下文初始化 TypedDataSetGeneratorException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected TypedDataSetGeneratorException(
    SerializationInfo info,
    StreamingContext context
)
protected:
TypedDataSetGeneratorException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> TypedDataSetGeneratorException

参数

info
类型： System.Runtime.Serialization SerializationInfo
一个 SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
一个 StreamingContext 结构。

TypedDataSetGeneratorException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGeneratorException 类
TypedDataSetGeneratorException 成员
TypedDataSetGeneratorException 重载
System.Data 命名空间


TypedDataSetGeneratorException 构造函数 (String, Exception)

TypedDataSetGeneratorException 构造函数 (String, Exception)
TypedDataSetGeneratorException 类

使用指定的字符串和内部异常初始化 TypedDataSetGeneratorException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public TypedDataSetGeneratorException(
    string message,
    Exception innerException
)
public:
TypedDataSetGeneratorException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> TypedDataSetGeneratorException

参数

message
类型： System String
当引发异常时显示的字符串。
innerException
类型： System Exception
对内部异常的引用。

TypedDataSetGeneratorException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGeneratorException 类
TypedDataSetGeneratorException 成员
TypedDataSetGeneratorException 重载
System.Data 命名空间


TypedDataSetGeneratorException 方法

TypedDataSetGeneratorException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedDataSetGeneratorException 类

TypedDataSetGeneratorException 类型公开以下成员。

名称 说明
页首

参考

TypedDataSetGeneratorException 类
System.Data 命名空间


TypedDataSetGeneratorException ..::.GetObjectData 方法

TypedDataSetGeneratorException
.
.
::
.
GetObjectData 方法
TypedDataSetGeneratorException 类

实现 ISerializable 接口并返回序列化 TypedDataSetGeneratorException 对象所需的数据。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags := SecurityPermissionFlag.SerializationFormatter)> _
Public Overrides Sub GetObjectData ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public override void GetObjectData(
    SerializationInfo info,
    StreamingContext context
)
[SecurityPermissionAttribute(SecurityAction::LinkDemand, Flags = SecurityPermissionFlag::SerializationFormatter)]
public:
virtual void GetObjectData(
    SerializationInfo^ info,
    StreamingContext context
) override
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)>]
abstract GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit
[<SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)>]
override GetObjectData :
        info:SerializationInfo *
        context:StreamingContext -> unit

参数

info
类型： System.Runtime.Serialization SerializationInfo
一个 SerializationInfo 对象。
context
类型： System.Runtime.Serialization StreamingContext
一个 StreamingContext 结构。

实现

TypedDataSetGeneratorException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGeneratorException 类
TypedDataSetGeneratorException 成员
System.Data 命名空间


TypedDataSetGeneratorException 属性

TypedDataSetGeneratorException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedDataSetGeneratorException 类

TypedDataSetGeneratorException 类型公开以下成员。

名称 说明
页首

参考

TypedDataSetGeneratorException 类
System.Data 命名空间


TypedDataSetGeneratorException ..::.ErrorList 属性

TypedDataSetGeneratorException
.
.
::
.
ErrorList 属性
TypedDataSetGeneratorException 类

获取生成的错误的动态列表。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property ErrorList As ArrayList
    Get
public ArrayList ErrorList { get; }
public:
property ArrayList^ ErrorList {
    ArrayList^ get ();
}
member ErrorList : ArrayList

属性值

类型： System.Collections ArrayList
ArrayList 对象。

TypedDataSetGeneratorException 类不用作独立组件，而是用作其他类从中派生标准功能的类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

TypedDataSetGeneratorException 类
TypedDataSetGeneratorException 成员
System.Data 命名空间


TypedDataSetGeneratorException 事件

TypedDataSetGeneratorException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedDataSetGeneratorException 类

TypedDataSetGeneratorException 类型公开以下成员。

名称 说明
页首

参考

TypedDataSetGeneratorException 类
System.Data 命名空间


TypedTableBase <(Of <(T >)>) 类

TypedTableBase
<
(Of
<
(
T
>
)
>
)
类
成员

此类型用作通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象的基类，不应从代码中直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<SerializableAttribute> _
Public MustInherit Class TypedTableBase(Of T As DataRow) _
    Inherits DataTable _
    Implements IEnumerable(Of T), IEnumerable
[SerializableAttribute]
public abstract class TypedTableBase<T> : DataTable,
    IEnumerable<T>, IEnumerable
where T : DataRow

[SerializableAttribute]
generic<typename T>
where T : DataRow
public ref class TypedTableBase abstract : public DataTable,
    IEnumerable<T>, IEnumerable
[<AbstractClassAttribute>]
[<SerializableAttribute>]
type TypedTableBase<'T when 'T : DataRow> =
    class
        inherit DataTable
        interface IEnumerable<'T>
        interface IEnumerable
    end

类型参数

T

由表表示的源序列中的对象的类型，通常为 DataRow。

System.Data
System.Data..::.TypedTableBase<(Of <(T>)>)TypedTableBase
System.Data..::.TypedTableBase<(Of <(T>)>)T
System.Data..::.TypedTableBase<(Of <(T>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBase T 成员
System.Data 命名空间

其他资源

查询类型化数据集
生成强类型数据集 (ADO.NET)


TypedTableBase <(Of <(T >)>) 成员

TypedTableBase
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

此类型用作通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象的基类，不应从代码中直接使用。

TypedTableBase T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TypedTableBase T 类
System.Data 命名空间


TypedTableBase <(Of <(T >)>) 构造函数

TypedTableBase
<
(Of
<
(
T
>
)
>
)
构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

初始化新的 [T:System.Data.TypedTableBase'1]。

名称 说明
页首

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间


TypedTableBase <(Of <(T >)>) 构造函数

TypedTableBase
<
(Of
<
(
T
>
)
>
)
构造函数
TypedTableBase

初始化新的 [T:System.Data.TypedTableBase'1]。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。不应直接从代码中使用此类型。 初始化新的 [T:System.Data.TypedTableBase'1]。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。不应直接从代码中使用此类型。 初始化新的 [T:System.Data.TypedTableBase'1]。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。不应直接从代码中使用此类型。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Protected Sub New
protected TypedTableBase()
protected:
TypedTableBase()
new : unit -> TypedTableBase

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBase T 类
TypedTableBase T 成员
TypedTableBase T 重载
System.Data 命名空间


TypedTableBase <(Of <(T >)>) 构造函数 (SerializationInfo, StreamingContext)

TypedTableBase
<
(Of
<
(
T
>
)
>
)
构造函数 (SerializationInfo, StreamingContext)
TypedTableBase

初始化新的 [T:System.Data.TypedTableBase'1]。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。此方法不应从代码直接使用。 初始化新的 [T:System.Data.TypedTableBase'1]。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。此方法不应从代码直接使用。 初始化新的 [T:System.Data.TypedTableBase'1]。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。此方法不应从代码直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected TypedTableBase(
    SerializationInfo info,
    StreamingContext context
)
protected:
TypedTableBase(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> TypedTableBase

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，包含用于构造对象的数据。
context
类型： System.Runtime.Serialization StreamingContext
要进行反序列化的对象的流上下文。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBase T 类
TypedTableBase T 成员
TypedTableBase T 重载
System.Data 命名空间


TypedTableBase <(Of <(T >)>) 字段

TypedTableBase
<
(Of
<
(
T
>
)
>
)
字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

TypedTableBase T 类型公开以下成员。

名称 说明
页首

参考

TypedTableBase T 类
System.Data 命名空间


TypedTableBase <(Of <(T >)>) 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

TypedTableBase T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TypedTableBase T 类
System.Data 命名空间


TypedTableBase <(Of <(T >)>) ..::.Cast <(Of <(TResult >)>) 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Cast
<
(Of
<
(
TResult
>
)
>
)
方法
TypedTableBase

将 [T:System.Data.TypedTableBase'1] 的元素转换为指定的类型。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成类型化 DataTable 对象。此方法不应从代码直接使用。 将 [T:System.Data.TypedTableBase'1] 的元素转换为指定的类型。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成类型化 DataTable 对象。此方法不应从代码直接使用。 将 [T:System.Data.TypedTableBase'1] 的元素转换为指定的类型。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成类型化 DataTable 对象。此方法不应从代码直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public Function Cast(Of TResult) As EnumerableRowCollection(Of TResult)
public EnumerableRowCollection<TResult> Cast<TResult>()

public:
generic<typename TResult>
EnumerableRowCollection<TResult>^ Cast()
member Cast : unit -> EnumerableRowCollection<'TResult>

类型参数

TResult

返回值

类型： System.Data EnumerableRowCollection
<
(Of
<
(
TResult
>
)
>
)

一个 EnumerableRowCollection，包含已转换为指定类型的源序列的每个元素。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间


TypedTableBase <(Of <(T >)>) ..::.Dispose 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

释放由 MarshalByValueComponent 占用的资源。

名称 说明
页首

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间


TypedTableBase <(Of <(T >)>) ..::.GetChanges 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetChanges 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

获取 DataTable 的副本，该副本包含自上次加载以来或自调用 AcceptChanges 以来对该数据集进行的所有更改。

名称 说明
页首

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)
处理 DataTable 事件 (ADO.NET)


TypedTableBase <(Of <(T >)>) ..::.GetEnumerator 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetEnumerator 方法
TypedTableBase

返回类型化 DataRow 的枚举数。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。此方法不应从代码直接使用。 返回类型化 DataRow 的枚举数。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。此方法不应从代码直接使用。 返回类型化 DataRow 的枚举数。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。此方法不应从代码直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Public Function GetEnumerator As IEnumerator(Of T)
public IEnumerator<T> GetEnumerator()
public:
virtual IEnumerator<T>^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator<'T>
override GetEnumerator : unit -> IEnumerator<'T>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
T
>
)
>
)

实现 IEnumerator<(Of <(T>)>) 接口的对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间


TypedTableBase <(Of <(T >)>) ..::.IEnumerable ..::.GetEnumerator 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
TypedTableBase

返回类型化 DataRow 的枚举数。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。此方法不应从代码直接使用。 返回类型化 DataRow 的枚举数。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。此方法不应从代码直接使用。 返回类型化 DataRow 的枚举数。此方法支持通过 Visual Studio 和 XSD.exe .NET Framework 工具生成的类型化 DataTable 对象。此方法不应从代码直接使用。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
实现 IEnumerator<(Of <(T>)>) 接口的对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间


TypedTableBase <(Of <(T >)>) ..::.Load 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Load 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

通过所提供的 IDataReader，用某个数据源的值填充 DataTable。如果 DataTable 已经包含行，则从数据源传入的数据将与现有的行合并。 通过所提供的 IDataReader，用某个数据源的值填充 DataTable。如果 DataTable 已经包含行，则从数据源传入的数据将与现有的行合并。

名称 说明
页首

在几种常见方案中可以使用 Load 方法，这些方案都围绕着从指定的数据源获取数据并将其添加到当前的数据容器（在本例中为 DataTable）。这些方案描述了 DataTable 的标准用法，介绍了它的更新和合并行为。 在几种常见方案中可以使用 Load 方法，这些方案都围绕着从指定的数据源获取数据并将其添加到当前的数据容器（在本例中为 DataTable）。这些方案描述了 DataTable 的标准用法，介绍了它的更新和合并行为。

DataTable 与单个主数据源同步，或使用单个主数据源进行更新。DataTable 跟踪更改，以实现与主数据源的同步。此外，DataTable 可以接受来自一个或多个辅助数据源的增量数据。DataTable 不负责跟踪更改以实现与辅助数据源的同步。 DataTable 与单个主数据源同步，或使用单个主数据源进行更新。DataTable 跟踪更改，以实现与主数据源的同步。此外，DataTable 可以接受来自一个或多个辅助数据源的增量数据。DataTable 不负责跟踪更改以实现与辅助数据源的同步。 DataTable 与单个主数据源同步，或使用单个主数据源进行更新。DataTable 跟踪更改，以实现与主数据源的同步。此外，DataTable 可以接受来自一个或多个辅助数据源的增量数据。DataTable 不负责跟踪更改以实现与辅助数据源的同步。 DataTable 与单个主数据源同步，或使用单个主数据源进行更新。DataTable 跟踪更改，以实现与主数据源的同步。此外，DataTable 可以接受来自一个或多个辅助数据源的增量数据。DataTable 不负责跟踪更改以实现与辅助数据源的同步。

在给定这两个假想的数据源的情况下，用户很可能要求下列行为之一：

  • 初始化主数据源中的 DataTable。在此方案中，用户希望使用主数据源中的值初始化空 DataTable。此后，用户希望将更改传播回主数据源。 初始化主数据源中的 DataTable。在此方案中，用户希望使用主数据源中的值初始化空 DataTable。此后，用户希望将更改传播回主数据源。 初始化主数据源中的 DataTable。在此方案中，用户希望使用主数据源中的值初始化空 DataTable。此后，用户希望将更改传播回主数据源。

  • 保留更改并从主数据源重新同步。在此方案中，用户要用前一个方案中填充的 DataTable 并执行与主数据源的递增同步，同时保留在 DataTable 中所做的修改。 保留更改并从主数据源重新同步。在此方案中，用户要用前一个方案中填充的 DataTable 并执行与主数据源的递增同步，同时保留在 DataTable 中所做的修改。

  • 来自辅助数据源的增量数据流。在该方案中，用户希望合并来自一个或多个辅助数据源的更改，并将这些更改传播回主数据源。 来自辅助数据源的增量数据流。在该方案中，用户希望合并来自一个或多个辅助数据源的更改，并将这些更改传播回主数据源。

Load 方法使所有这些方案成为可能。此方法的所有重载（一个除外）都允许指定加载选项参数，以指示 DataTable 中的行如何与正在加载的行合并。（不允许指定此行为的重载使用默认加载选项。）下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。 Load 方法使所有这些方案成为可能。此方法的所有重载（一个除外）都允许指定加载选项参数，以指示 DataTable 中的行如何与正在加载的行合并。（不允许指定此行为的重载使用默认加载选项。）下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。 Load 方法使所有这些方案成为可能。此方法的所有重载（一个除外）都允许指定加载选项参数，以指示 DataTable 中的行如何与正在加载的行合并。（不允许指定此行为的重载使用默认加载选项。）下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。 Load 方法使所有这些方案成为可能。此方法的所有重载（一个除外）都允许指定加载选项参数，以指示 DataTable 中的行如何与正在加载的行合并。（不允许指定此行为的重载使用默认加载选项。）下表描述了 LoadOption 枚举提供的三个加载选项。在每一种情况下，说明部分指示了当传入数据中某一行的主键与某个现有行的主键匹配时发生的行为。

加载选项 | 说明
PreserveChanges（默认值） | 使用传入行的值更新行的原始版本。
OverwriteChanges | 使用传入行的值更新行的当前版本和原始版本。
Upsert | 使用传入行的值更新行的当前版本。

通常，PreserveChanges 和 OverwriteChanges 选项用于这样的方案：用户需要将 DataSet 及其更改与主数据源同步。Upsert 选项可帮助聚合来自一个或多个辅助数据源的更改。 通常，PreserveChanges 和 OverwriteChanges 选项用于这样的方案：用户需要将 DataSet 及其更改与主数据源同步。Upsert 选项可帮助聚合来自一个或多个辅助数据源的更改。

下面的示例演示了调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。此示例随后着重于数据问题，包括处理各个加载选项。 下面的示例演示了调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。此示例随后着重于数据问题，包括处理各个加载选项。 下面的示例演示了调用 Load 方法涉及到的几个问题。首先，该示例着重于架构问题，包括从加载的 IDataReader 推断架构，然后处理不兼容的架构以及包含缺失列或其他列的架构。此示例随后着重于数据问题，包括处理各个加载选项。

说明 说明

此示例演示如何使用 Load 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。 此示例演示如何使用 Load 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。

Sub Main()
  Dim table As New DataTable()

  ' This example examines a number of scenarios involving the
  ' DataTable.Load method.
  Console.WriteLine("Load a DataTable and infer its schema:")

  ' Retrieve a data reader, based on the Customers data. In
  ' an application, this data might be coming from a middle-tier
  ' business object:
  Dim reader As New DataTableReader(GetCustomers())

  ' The table has no schema. The Load method will infer the
  ' schema from the IDataReader:
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Load a DataTable from an incompatible IDataReader:")

  ' Create a table with a single integer column. Attempt
  ' to load data from a reader with a schema that is
  ' incompatible. Note the exception, determined
  ' by the particular incompatibility:
  table = GetIntegerTable()
  reader = New DataTableReader(GetStringTable())
  Try
    table.Load(reader)
  Catch ex As Exception
    Console.WriteLine(ex.GetType.Name & ":" & ex.Message())
  End Try

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has extra columns:")

  ' Note that loading a reader with extra columns adds
  ' the columns to the existing table, if possible:
  table = GetIntegerTable()
  reader = New DataTableReader(GetCustomers())
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has missing columns:")

  ' Note that loading a reader with missing columns causes
  ' the columns to be filled with null data, if possible:
  table = GetCustomers()
  reader = New DataTableReader(GetIntegerTable())
  table.Load(reader)
  PrintColumns(table)

  ' Demonstrate the various possibilites when loading data into
  ' a DataTable that already contains data.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Demonstrate data considerations:")
  Console.WriteLine("Current value, Original value, (RowState)")
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Original table:")

  table = SetupModifiedRows()
  DisplayRowState(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Data in IDataReader to be loaded:")
  DisplayRowState(GetChangedCustomers())

  PerformDemo(LoadOption.OverwriteChanges)
  PerformDemo(LoadOption.PreserveChanges)
  PerformDemo(LoadOption.Upsert)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub DisplayRowState(ByVal table As DataTable)
  For i As Integer = 0 To table.Rows.Count - 1
    Dim current As Object = "--"
    Dim original As Object = "--"
    Dim rowState As DataRowState = table.Rows(i).RowState

    ' Attempt to retrieve the current value, which doesn't exist
    ' for deleted rows:
    If rowState <> DataRowState.Deleted Then
      current = table.Rows(i)("Name", DataRowVersion.Current)
    End If

    ' Attempt to retrieve the original value, which doesn't exist
    ' for added rows:
    If rowState <> DataRowState.Added Then
      original = table.Rows(i)("Name", DataRowVersion.Original)
    End If
    Console.WriteLine("{0}: {1}, {2} ({3})", i, current, original, rowState)
  Next
End Sub

Private Function GetChangedCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "XXX"})
  table.Rows.Add(New Object() {1, "XXX"})
  table.Rows.Add(New Object() {2, "XXX"})
  table.Rows.Add(New Object() {3, "XXX"})
  table.Rows.Add(New Object() {4, "XXX"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "Mary"})
  table.Rows.Add(New Object() {1, "Andy"})
  table.Rows.Add(New Object() {2, "Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {4})
  table.Rows.Add(New Object() {5})
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PerformDemo(ByVal optionForLoad As LoadOption)

  ' Load data into a DataTable, retrieve a DataTableReader containing
  ' different data, and call the Load method. Depending on the
  ' LoadOption value passed as a parameter, this procedure displays
  ' different results in the DataTable.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("table.Load(reader, {0})", optionForLoad)
  Console.WriteLine(" ============================= ")

  Dim table As DataTable = SetupModifiedRows()
  Dim reader As New DataTableReader(GetChangedCustomers())
  AddHandler table.RowChanging, New _
      DataRowChangeEventHandler(AddressOf HandleRowChanging)

  table.Load(reader, optionForLoad)
  Console.WriteLine()
  DisplayRowState(table)
End Sub

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

Private Function SetupModifiedRows() As DataTable
  ' Fill a DataTable with customer info, and
  ' then modify, delete, and add rows.

  Dim table As DataTable = GetCustomers()
  ' Row 0 is unmodified.
  ' Row 1 is modified.
  ' Row 2 is deleted.
  ' Row 3 is added.
  table.Rows(1)("Name") = "Sydney"
  table.Rows(2).Delete()
  Dim row As DataRow = table.NewRow
  row("ID") = 3
  row("Name") = "Melony"
  table.Rows.Add(row)

  ' Note that the code doesn't call
  ' table.AcceptChanges()
  Return table
End Function

Private Sub HandleRowChanging(ByVal sender As Object, _
  ByVal e As System.Data.DataRowChangeEventArgs)
  Console.WriteLine( _
      "RowChanging event: ID = {0}, action = {1}", e.Row("ID"), _
      e.Action)
End Sub

static void Main()
{
    // This example examines a number of scenarios involving the
    // DataTable.Load method.
    Console.WriteLine("Load a DataTable and infer its schema:");

    // The table has no schema. The Load method will infer the
    // schema from the IDataReader:
    DataTable table = new DataTable();

    // Retrieve a data reader, based on the Customers data. In
    // an application, this data might be coming from a middle-tier
    // business object:
    DataTableReader reader = new DataTableReader(GetCustomers());

    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Load a DataTable from an incompatible IDataReader:");

    // Create a table with a single integer column. Attempt
    // to load data from a reader with a schema that is
    // incompatible. Note the exception, determined
    // by the particular incompatibility:
    table = GetIntegerTable();
    reader = new DataTableReader(GetStringTable());
    try
    {
        table.Load(reader);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.GetType().Name + ":" + ex.Message);
    }

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has extra columns:");

    // Note that loading a reader with extra columns adds
    // the columns to the existing table, if possible:
    table = GetIntegerTable();
    reader = new DataTableReader(GetCustomers());
    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has missing columns:");

    // Note that loading a reader with missing columns causes
    // the columns to be filled with null data, if possible:
    table = GetCustomers();
    reader = new DataTableReader(GetIntegerTable());
    table.Load(reader);
    PrintColumns(table);

    // Demonstrate the various possibilites when loading data into
    // a DataTable that already contains data.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Demonstrate data considerations:");
    Console.WriteLine("Current value, Original value, (RowState)");
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Original table:");

    table = SetupModifiedRows();
    DisplayRowState(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Data in IDataReader to be loaded:");
    DisplayRowState(GetChangedCustomers());

    PerformDemo(LoadOption.OverwriteChanges);
    PerformDemo(LoadOption.PreserveChanges);
    PerformDemo(LoadOption.Upsert);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void DisplayRowState(DataTable table)
{
    for (int i = 0; i <= table.Rows.Count - 1; i++)
    {
        object current = "--";
        object original = "--";
        DataRowState rowState = table.Rows[i].RowState;

        // Attempt to retrieve the current value, which doesn't exist
        // for deleted rows:
        if (rowState != DataRowState.Deleted)
        {
            current = table.Rows[i]["Name", DataRowVersion.Current];
        }

        // Attempt to retrieve the original value, which doesn't exist
        // for added rows:
        if (rowState != DataRowState.Added)
        {
            original = table.Rows[i]["Name", DataRowVersion.Original];
        }
        Console.WriteLine("{0}: {1}, {2} ({3})", i, current,
            original, rowState);
    }
}

private static DataTable GetChangedCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "XXX" });
    table.Rows.Add(new object[] { 1, "XXX" });
    table.Rows.Add(new object[] { 2, "XXX" });
    table.Rows.Add(new object[] { 3, "XXX" });
    table.Rows.Add(new object[] { 4, "XXX" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "Mary" });
    table.Rows.Add(new object[] { 1, "Andy" });
    table.Rows.Add(new object[] { 2, "Peter" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 4 });
    table.Rows.Add(new object[] { 5 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.AcceptChanges();
    return table;
}

private static void PerformDemo(LoadOption optionForLoad)
{

    // Load data into a DataTable, retrieve a DataTableReader containing
    // different data, and call the Load method. Depending on the
    // LoadOption value passed as a parameter, this procedure displays
    // different results in the DataTable.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("table.Load(reader, {0})", optionForLoad);
    Console.WriteLine(" ============================= ");

    DataTable table = SetupModifiedRows();
    DataTableReader reader = new DataTableReader(GetChangedCustomers());
    table.RowChanging +=new DataRowChangeEventHandler(HandleRowChanging);

    table.Load(reader, optionForLoad);
    Console.WriteLine();
    DisplayRowState(table);
}

private static void PrintColumns(DataTable table)
{
    // Loop through all the rows in the DataTableReader
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTable SetupModifiedRows()
{
    // Fill a DataTable with customer info, and
    // then modify, delete, and add rows.

    DataTable table = GetCustomers();
    // Row 0 is unmodified.
    // Row 1 is modified.
    // Row 2 is deleted.
    // Row 3 is added.
    table.Rows[1]["Name"] = "Sydney";
    table.Rows[2].Delete();
    DataRow row = table.NewRow();
    row["ID"] = 3;
    row["Name"] = "Melony";
    table.Rows.Add(row);

    // Note that the code doesn't call
    // table.AcceptChanges()
    return table;
}

static void HandleRowChanging(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine(
        "RowChanging event: ID = {0}, action = {1}", e.Row["ID"],
        e.Action);
}

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间
Load

其他资源

DataTable (ADO.NET)


TypedTableBase <(Of <(T >)>) ..::.LoadDataRow 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
LoadDataRow 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

查找和更新特定行。如果找不到任何匹配行，则使用给定值创建新行。 查找和更新特定行。如果找不到任何匹配行，则使用给定值创建新行。

名称 说明
页首

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


TypedTableBase <(Of <(T >)>) ..::.Merge 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Merge 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

将指定的 DataTable 与当前的 DataTable 合并。

名称 说明
页首

Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。

合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表，则需要分别合并每个子表。

下面的控制台应用程序演示了 Merge 方法的 missingSchemaAction 参数的行为。该示例创建同一个表的两个版本，并修改第二个版本的架构。代码随后尝试将第二个表合并到第一个表中。 下面的控制台应用程序演示了 Merge 方法的 missingSchemaAction 参数的行为。该示例创建同一个表的两个版本，并修改第二个版本的架构。代码随后尝试将第二个表合并到第一个表中。 下面的控制台应用程序演示了 Merge 方法的 missingSchemaAction 参数的行为。该示例创建同一个表的两个版本，并修改第二个版本的架构。代码随后尝试将第二个表合并到第一个表中。

说明 说明

此示例演示如何使用 Merge 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。 此示例演示如何使用 Merge 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。

Private Sub DemonstrateMergeTable()
  Dim table1 As New DataTable("Items")

  ' Add columns
  Dim idColumn As New DataColumn("id", GetType(System.Int32))
  Dim itemColumn As New DataColumn("item", GetType(System.Int32))
  table1.Columns.Add(idColumn)
  table1.Columns.Add(itemColumn)

  ' Set the primary key column.
  table1.PrimaryKey = New DataColumn() {idColumn}

  ' Add RowChanged event handler for the table.
  AddHandler table1.RowChanged, AddressOf Row_Changed

  ' Add some rows.
  Dim row As DataRow
  For i As Integer = 0 To 3
    row = table1.NewRow()
    row("id") = i
    row("item") = i
    table1.Rows.Add(row)
  Next i

  ' Accept changes.
  table1.AcceptChanges()
  PrintValues(table1, "Original values")

  ' Create a second DataTable identical to the first.
  Dim table2 As DataTable = table1.Clone()

  ' Add column to the second column, so that the
  ' schemas no longer match.
  table2.Columns.Add("newColumn", GetType(System.String))

  ' Add three rows. Note that the id column can't be the
  ' same as existing rows in the original table.
  row = table2.NewRow()
  row("id") = 14
  row("item") = 774
  row("newColumn") = "new column 1"
  table2.Rows.Add(row)

  row = table2.NewRow()
  row("id") = 12
  row("item") = 555
  row("newColumn") = "new column 2"
  table2.Rows.Add(row)

  row = table2.NewRow()
  row("id") = 13
  row("item") = 665
  row("newColumn") = "new column 3"
  table2.Rows.Add(row)

  ' Merge table2 into the table1.
  Console.WriteLine("Merging")
  table1.Merge(table2, False, MissingSchemaAction.Add)
  PrintValues(table1, "Merged With table1, Schema added")
End Sub

Private Sub Row_Changed(ByVal sender As Object, _
      ByVal e As DataRowChangeEventArgs)
  Console.WriteLine("Row changed {0}{1}{2}", _
    e.Action, ControlChars.Tab, e.Row.ItemArray(0))
End Sub

Private Sub PrintValues(ByVal table As DataTable, _
      ByVal label As String)
  ' Display the values in the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(ControlChars.Tab + " " + row(col).ToString())
    Next col
    Console.WriteLine()
  Next row
End Sub

private static void DemonstrateMergeTable()
{
    DataTable table1 = new DataTable("Items");

    // Add columns
    DataColumn idColumn = new DataColumn("id", typeof(System.Int32));
    DataColumn itemColumn = new DataColumn("item", typeof(System.Int32));
    table1.Columns.Add(idColumn);
    table1.Columns.Add(itemColumn);

    // Set the primary key column.
    table1.PrimaryKey = new DataColumn[] { idColumn };

    // Add RowChanged event handler for the table.
    table1.RowChanged += new
        System.Data.DataRowChangeEventHandler(Row_Changed);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table1.NewRow();
        row["id"] = i;
        row["item"] = i;
        table1.Rows.Add(row);
    }

    // Accept changes.
    table1.AcceptChanges();
    PrintValues(table1, "Original values");

    // Create a second DataTable identical to the first.
    DataTable table2 = table1.Clone();

    // Add column to the second column, so that the
    // schemas no longer match.
    table2.Columns.Add("newColumn", typeof(System.String));

    // Add three rows. Note that the id column can't be the
    // same as existing rows in the original table.
    row = table2.NewRow();
    row["id"] = 14;
    row["item"] = 774;
    row["newColumn"] = "new column 1";
    table2.Rows.Add(row);

    row = table2.NewRow();
    row["id"] = 12;
    row["item"] = 555;
    row["newColumn"] = "new column 2";
    table2.Rows.Add(row);

    row = table2.NewRow();
    row["id"] = 13;
    row["item"] = 665;
    row["newColumn"] = "new column 3";
    table2.Rows.Add(row);

    // Merge table2 into the table1.
    Console.WriteLine("Merging");
    table1.Merge(table2, false, MissingSchemaAction.Add);
    PrintValues(table1, "Merged With table1, schema added");

}

private static void Row_Changed(object sender,
    DataRowChangeEventArgs e)
{
    Console.WriteLine("Row changed {0}\t{1}", e.Action,
        e.Row.ItemArray[0]);
}

private static void PrintValues(DataTable table, string label)
{
    // Display the values in the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn col in table.Columns)
        {
            Console.Write("\t " + row[col].ToString());
        }
        Console.WriteLine();
    }
}

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


TypedTableBase <(Of <(T >)>) ..::.ReadXml 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
ReadXml 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

将 XML 架构和数据读入 DataTable。

名称 说明
页首

ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataTable 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读取数据和架构，请使用包括 XmlReadMode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。 ReadXml 方法提供了只将数据或同时将数据和架构从 XML 文档读入 DataTable 的方式，而 ReadXmlSchema 方法仅读架构。若要同时读取数据和架构，请使用包括 XmlReadMode 参数的 ReadXML 重载之一，并将其值设置为 ReadSchema。

请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。 请注意，对于 WriteXml 和 WriteXmlSchema 方法也是如此。若要写入来自 DataTable 的 XML 数据或架构和数据两者，使用 WriteXml 方法。若要只写入架构，请使用 WriteXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间
ReadXml

其他资源

DataTable (ADO.NET)


TypedTableBase <(Of <(T >)>) ..::.ReadXmlSchema 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
ReadXmlSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

将 XML 架构读入 DataTable。

名称 说明
页首

使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。 使用 ReadXmlSchema 方法为 DataTable 创建架构。架构包括表、关系和约束定义。

若要将架构写入 XML 文档，请使用 WriteXmlSchema 方法。

按照 XSD 标准解释 XML 架构。

通常在调用用于填充 DataTable 的 ReadXml 方法之前调用 ReadXmlSchema 方法。

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间
ReadXmlSchema

其他资源

DataTable (ADO.NET)


TypedTableBase <(Of <(T >)>) ..::.Select 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Select 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

获取 DataRow 对象的数组。

名称 说明
页首

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


TypedTableBase <(Of <(T >)>) ..::.WriteXml 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
WriteXml 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

将 DataTable 的当前内容以 XML 格式写入。

名称 说明
页首

WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。 WriteXml 方法提供了只将数据或同时将数据和架构从 DataTable 写入 XML 文档的方法，而 WriteXmlSchema 方法仅写架构。若要同时写入数据和架构，请使用包括 XmlWriteMode 参数的重载之一，并将它的值设置为 WriteSchema。

请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。 请注意，对于 ReadXml 和 ReadXmlSchema 方法也是如此。若要将 XML 数据或同时将架构和数据读入 DataTable，请使用 ReadXml 方法。若要只读取架构，请使用 ReadXmlSchema 方法。

说明 说明

如果正在读取或写入的 DataRow 中的列类型实现了 IDynamicMetaObjectProvider，而没有实现 IXmlSerializable，将引发 InvalidOperationException。

下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXml 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。 下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXml 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。

说明 说明

此示例演示如何使用 WriteXml 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。 此示例演示如何使用 WriteXml 的一个重载版本。有关其他可用示例的信息，请参见各个重载主题。

Sub Main()
  Dim ds As New DataSet
  Dim customerTable As DataTable = GetCustomers()
  Dim orderTable As DataTable = GetOrders()

  ds.Tables.Add(customerTable)
  ds.Tables.Add(orderTable)
  ds.Relations.Add("CustomerOrder", _
   New DataColumn() {customerTable.Columns(0)}, _
   New DataColumn() {orderTable.Columns(1)}, True)

  Dim writer As New System.IO.StringWriter
  customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, False)
  PrintOutput(writer, "Customer table, without hierarchy")

  writer = New System.IO.StringWriter
  customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, True)
  PrintOutput(writer, "Customer table, with hierarchy")

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Function GetOrders() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create three columns, OrderID, CustomerID, and OrderDate.
  table.Columns.Add(New DataColumn("OrderID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("CustomerID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("OrderDate", GetType(System.DateTime)))

  ' Set the OrderID column as the primary key column.
  table.PrimaryKey = New DataColumn() {table.Columns(0)}

  table.Rows.Add(New Object() {1, 1, #12/2/2003#})
  table.Rows.Add(New Object() {2, 1, #1/3/2004#})
  table.Rows.Add(New Object() {3, 2, #11/13/2004#})
  table.Rows.Add(New Object() {4, 3, #5/16/2004#})
  table.Rows.Add(New Object() {5, 3, #5/22/2004#})
  table.Rows.Add(New Object() {6, 4, #6/15/2004#})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(System.Int32))
  table.Columns.Add("Name", GetType(System.String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintOutput( _
   ByVal writer As System.IO.TextWriter, ByVal caption As String)

  Console.WriteLine("==============================")
  Console.WriteLine(caption)
  Console.WriteLine("==============================")
  Console.WriteLine(writer.ToString())
End Sub

static void Main()
{
    DataSet ds = new DataSet();
    DataTable customerTable = GetCustomers();
    DataTable orderTable = GetOrders();

    ds.Tables.Add(customerTable);
    ds.Tables.Add(orderTable);
    ds.Relations.Add("CustomerOrder",
        new DataColumn[] { customerTable.Columns[0] },
        new DataColumn[] { orderTable.Columns[1] }, true);

    System.IO.StringWriter writer = new System.IO.StringWriter();
    customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, false);
    PrintOutput(writer, "Customer table, without hierarchy");

    writer = new System.IO.StringWriter();
    customerTable.WriteXml(writer, XmlWriteMode.WriteSchema, true);
    PrintOutput(writer, "Customer table, with hierarchy");

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(System.Int32));
    table.Columns.Add("Name", typeof(System.String));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetOrders()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create three columns; OrderID, CustomerID, and OrderDate.
    table.Columns.Add(new DataColumn("OrderID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("CustomerID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("OrderDate", typeof(System.DateTime)));

    // Set the OrderID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { table.Columns[0] };

    table.Rows.Add(new object[] { 1, 1, "12/2/2003" });
    table.Rows.Add(new object[] { 2, 1, "1/3/2004" });
    table.Rows.Add(new object[] { 3, 2, "11/13/2004" });
    table.Rows.Add(new object[] { 4, 3, "5/16/2004" });
    table.Rows.Add(new object[] { 5, 3, "5/22/2004" });
    table.Rows.Add(new object[] { 6, 4, "6/15/2004" });
    table.AcceptChanges();
    return table;
}

private static void PrintOutput(System.IO.TextWriter writer, string caption)
{
    Console.WriteLine("==============================");
    Console.WriteLine(caption);
    Console.WriteLine("==============================");
    Console.WriteLine(writer.ToString());
}

该示例在控制台窗口中显示以下输出：

==============================
Customer table, without hierarchy
==============================
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema
" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="ID" type="xs:int" />
                <xs:element name="Name" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
      <xs:unique name="Constraint1" msdata:PrimaryKey="true">
        <xs:selector xpath=".//Table1" />
        <xs:field xpath="ID" />
      </xs:unique>
    </xs:element>
  </xs:schema>
  <Table1>
    <ID>1</ID>
    <Name>Mary</Name>
  </Table1>
  <Table1>
    <ID>2</ID>
    <Name>Andy</Name>
  </Table1>
  <Table1>
    <ID>3</ID>
    <Name>Peter</Name>
  </Table1>
  <Table1>
    <ID>4</ID>
    <Name>Russ</Name>
  </Table1>
</NewDataSet>
==============================
Customer table, with hierarchy
==============================
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema
" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="ID" type="xs:int" />
                <xs:element name="Name" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="Table2">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="OrderID" type="xs:int" />
                <xs:element name="CustomerID" type="xs:int" minOccurs="0" />
                <xs:element name="OrderDate" type="xs:dateTime" minOccurs="0" />

              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
      <xs:unique name="Constraint1" msdata:PrimaryKey="true">
        <xs:selector xpath=".//Table1" />
        <xs:field xpath="ID" />
      </xs:unique>
      <xs:unique name="Table2_Constraint1" msdata:ConstraintName="Constraint1" m
sdata:PrimaryKey="true">
        <xs:selector xpath=".//Table2" />
        <xs:field xpath="OrderID" />
      </xs:unique>
      <xs:keyref name="CustomerOrder" refer="Constraint1">
        <xs:selector xpath=".//Table2" />
        <xs:field xpath="CustomerID" />
      </xs:keyref>
    </xs:element>
  </xs:schema>
  <Table1>
    <ID>1</ID>
    <Name>Mary</Name>
  </Table1>
  <Table1>
    <ID>2</ID>
    <Name>Andy</Name>
  </Table1>
  <Table1>
    <ID>3</ID>
    <Name>Peter</Name>
  </Table1>
  <Table1>
    <ID>4</ID>
    <Name>Russ</Name>
  </Table1>
  <Table2>
    <OrderID>1</OrderID>
    <CustomerID>1</CustomerID>
    <OrderDate>2003-12-02T00:00:00.0000000-08:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>2</OrderID>
    <CustomerID>1</CustomerID>
    <OrderDate>2004-01-03T00:00:00.0000000-08:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>3</OrderID>
    <CustomerID>2</CustomerID>
    <OrderDate>2004-11-13T00:00:00.0000000-08:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>4</OrderID>
    <CustomerID>3</CustomerID>
    <OrderDate>2004-05-16T00:00:00.0000000-07:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>5</OrderID>
    <CustomerID>3</CustomerID>
    <OrderDate>2004-05-22T00:00:00.0000000-07:00</OrderDate>
  </Table2>
  <Table2>
    <OrderID>6</OrderID>
    <CustomerID>4</CustomerID>
    <OrderDate>2004-06-15T00:00:00.0000000-07:00</OrderDate>
  </Table2>
</NewDataSet>

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


TypedTableBase <(Of <(T >)>) ..::.WriteXmlSchema 方法

TypedTableBase
<
(Of
<
(
T
>
)
>
)
.
.
::
.
WriteXmlSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

将 DataTable 的当前数据结构以 XML 架构形式写入。

名称 说明
页首

使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。 使用 WriteXmlSchema 方法将 DataTable 的架构写入 XML 文档。架构包括表、关系和约束定义。

使用 XSD 标准编写 XML 架构。

若要将数据写入 XML 文档，请使用 WriteXml 方法。

下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXmlSchema 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。 下面的控制台应用程序创建两个 DataTable 实例，将每个实例分别添加到 DataSet，创建使这两个表相关的 DataRelation，然后使用 WriteXmlSchema 方法将父表中包含的数据写入 TextWriter 中。该示例演示将 writeHierarchy 参数设置为它的每个值时所发生的行为。

说明 说明

该示例演示如何使用 WriteXmlSchema 的一个重载版本。有关其他可用的示例，请参见各个重载主题。

Sub Main()
  Dim ds As New DataSet
  Dim customerTable As DataTable = GetCustomers()
  Dim orderTable As DataTable = GetOrders()

  ds.Tables.Add(customerTable)
  ds.Tables.Add(orderTable)
  ds.Relations.Add("CustomerOrder", _
   New DataColumn() {customerTable.Columns(0)}, _
   New DataColumn() {orderTable.Columns(1)}, True)

  Dim writer As New System.IO.StringWriter
  customerTable.WriteXmlSchema(writer, False)
  PrintOutput(writer, "Customer table, without hierarchy")

  writer = New System.IO.StringWriter
  customerTable.WriteXmlSchema(writer, True)
  PrintOutput(writer, "Customer table, with hierarchy")

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Function GetOrders() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create three columns, OrderID, CustomerID, and OrderDate.
  table.Columns.Add(New DataColumn("OrderID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("CustomerID", GetType(System.Int32)))
  table.Columns.Add(New DataColumn("OrderDate", GetType(System.DateTime)))

  ' Set the OrderID column as the primary key column.
  table.PrimaryKey = New DataColumn() {table.Columns(0)}

  table.Rows.Add(New Object() {1, 1, #12/2/2003#})
  table.Rows.Add(New Object() {2, 1, #1/3/2004#})
  table.Rows.Add(New Object() {3, 2, #11/13/2004#})
  table.Rows.Add(New Object() {4, 3, #5/16/2004#})
  table.Rows.Add(New Object() {5, 3, #5/22/2004#})
  table.Rows.Add(New Object() {6, 4, #6/15/2004#})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table, in order
  ' to demonstrate the behavior of the DataTableReader.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(System.Int32))
  table.Columns.Add("Name", GetType(System.String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintOutput( _
   ByVal writer As System.IO.TextWriter, ByVal caption As String)

  Console.WriteLine("==============================")
  Console.WriteLine(caption)
  Console.WriteLine("==============================")
  Console.WriteLine(writer.ToString())
End Sub

static void Main()
{
    DataSet ds = new DataSet();
    DataTable customerTable = GetCustomers();
    DataTable orderTable = GetOrders();

    ds.Tables.Add(customerTable);
    ds.Tables.Add(orderTable);
    ds.Relations.Add("CustomerOrder",
        new DataColumn[] { customerTable.Columns[0] },
        new DataColumn[] { orderTable.Columns[1] }, true);

    System.IO.StringWriter writer = new System.IO.StringWriter();
    customerTable.WriteXmlSchema(writer, false);
    PrintOutput(writer, "Customer table, without hierarchy");

    writer = new System.IO.StringWriter();
    customerTable.WriteXmlSchema(writer, true);
    PrintOutput(writer, "Customer table, with hierarchy");

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(System.Int32));
    table.Columns.Add("Name", typeof(System.String));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetOrders()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create three columns; OrderID, CustomerID, and OrderDate.
    table.Columns.Add(new DataColumn("OrderID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("CustomerID", typeof(System.Int32)));
    table.Columns.Add(new DataColumn("OrderDate", typeof(System.DateTime)));

    // Set the OrderID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { table.Columns[0] };

    table.Rows.Add(new object[] { 1, 1, "12/2/2003" });
    table.Rows.Add(new object[] { 2, 1, "1/3/2004" });
    table.Rows.Add(new object[] { 3, 2, "11/13/2004" });
    table.Rows.Add(new object[] { 4, 3, "5/16/2004" });
    table.Rows.Add(new object[] { 5, 3, "5/22/2004" });
    table.Rows.Add(new object[] { 6, 4, "6/15/2004" });
    table.AcceptChanges();
    return table;
}

private static void PrintOutput(System.IO.TextWriter writer,
    string caption)
{
    Console.WriteLine("==============================");
    Console.WriteLine(caption);
    Console.WriteLine("==============================");
    Console.WriteLine(writer.ToString());
}

该示例在控制台窗口中显示以下输出：

==============================
Customer table, without hierarchy
==============================
<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Ta
ble1">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Table1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ID" type="xs:int" />
              <xs:element name="Name" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//Table1" />
      <xs:field xpath="ID" />
    </xs:unique>
  </xs:element>
</xs:schema>
==============================
Customer table, with hierarchy
==============================
<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Table1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ID" type="xs:int" />
              <xs:element name="Name" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Table2">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="OrderID" type="xs:int" />
              <xs:element name="CustomerID" type="xs:int" minOccurs="0" />
              <xs:element name="OrderDate" type="xs:dateTime" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//Table1" />
      <xs:field xpath="ID" />
    </xs:unique>
    <xs:unique name="Table2_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//Table2" />
      <xs:field xpath="OrderID" />
    </xs:unique>
    <xs:keyref name="CustomerOrder" refer="Constraint1">
      <xs:selector xpath=".//Table2" />
      <xs:field xpath="CustomerID" />
    </xs:keyref>
  </xs:element>
</xs:schema>

参考

TypedTableBase T 类
TypedTableBase T 成员
System.Data 命名空间

其他资源

DataTable (ADO.NET)


TypedTableBase <(Of <(T >)>) 属性

TypedTableBase
<
(Of
<
(
T
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

TypedTableBase T 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

TypedTableBase T 类
System.Data 命名空间


TypedTableBase <(Of <(T >)>) 事件

TypedTableBase
<
(Of
<
(
T
>
)
>
)
事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBase

TypedTableBase T 类型公开以下成员。

名称 说明
页首

参考

TypedTableBase T 类
System.Data 命名空间


TypedTableBaseExtensions 类

TypedTableBaseExtensions 类
成员

包含 TypedTableBase<(Of <(T>)>) 类的扩展方法。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public NotInheritable Class TypedTableBaseExtensions
public static class TypedTableBaseExtensions
[ExtensionAttribute]
public ref class TypedTableBaseExtensions abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type TypedTableBaseExtensions =  class end

此类包含为类型化数据集定义 AsEnumerable<(Of <(TRow>)>) 方法和标准查询操作的静态扩展方法。

此类无法实例化。

System.Data System.Data..::.TypedTableBaseExtensionsTypedTableBaseExtensions
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBaseExtensions 成员
System.Data 命名空间

其他资源

Standard Query Operators Overview
查询类型化数据集


TypedTableBaseExtensions 成员

TypedTableBaseExtensions 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBaseExtensions 类

包含 TypedTableBase<(Of <(T>)>) 类的扩展方法。

TypedTableBaseExtensions 类型公开以下成员。

名称 说明
页首

参考

TypedTableBaseExtensions 类
System.Data 命名空间


TypedTableBaseExtensions 方法

TypedTableBaseExtensions 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBaseExtensions 类

TypedTableBaseExtensions 类型公开以下成员。

名称 说明
页首

参考

TypedTableBaseExtensions 类
System.Data 命名空间


TypedTableBaseExtensions ..::.AsEnumerable <(Of <(TRow >)>) 方法

TypedTableBaseExtensions
.
.
::
.
AsEnumerable
<
(Of
<
(
TRow
>
)
>
)
方法
TypedTableBaseExtensions 类

枚举 TypedTableBase<(Of <(T>)>) 的数据行元素并返回一个 EnumerableRowCollection<(Of <(TRow>)>) 对象，其中泛型参数 T 为 DataRow。此对象可用在 LINQ 表达式或方法查询中。 枚举 TypedTableBase<(Of <(T>)>) 的数据行元素并返回一个 EnumerableRowCollection<(Of <(TRow>)>) 对象，其中泛型参数 T 为 DataRow。此对象可用在 LINQ 表达式或方法查询中。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function AsEnumerable(Of TRow As DataRow) ( _
    source As TypedTableBase(Of TRow) _
) As EnumerableRowCollection(Of TRow)
public static EnumerableRowCollection<TRow> AsEnumerable<TRow>(
    this TypedTableBase<TRow> source
)
where TRow : DataRow

[ExtensionAttribute]
public:
generic<typename TRow>
where TRow : DataRow
static EnumerableRowCollection<TRow>^ AsEnumerable(
    TypedTableBase<TRow>^ source
)
static member AsEnumerable :
        source:TypedTableBase<'TRow> -> EnumerableRowCollection<'TRow>  when 'TRow : DataRow

类型参数

TRow

源中的元素要转换成的类型。

参数

source
类型： System.Data TypedTableBase
<
(Of
<
(
TRow
>
)
>
)

可枚举的源 TypedTableBase<(Of <(T>)>)。

返回值

类型： System.Data EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

一个 EnumerableRowCollection<(Of <(TRow>)>) 对象，其泛型参数 T 为 DataRow。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBaseExtensions 类
TypedTableBaseExtensions 成员
System.Data 命名空间


TypedTableBaseExtensions ..::.OrderBy 方法

TypedTableBaseExtensions
.
.
::
.
OrderBy 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBaseExtensions 类

按升序排序 TypedTableBase<(Of <(T>)>) 的行。

名称 说明
页首

参考

TypedTableBaseExtensions 类
TypedTableBaseExtensions 成员
System.Data 命名空间


TypedTableBaseExtensions ..::.OrderBy <(Of <(TRow, TKey >)>) 方法 (TypedTableBase <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>))

TypedTableBaseExtensions
.
.
::
.
OrderBy
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (TypedTableBase
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
)
TypedTableBaseExtensions 类

按指定键升序排序 TypedTableBase<(Of <(T>)>) 的行。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function OrderBy(Of TRow As DataRow, TKey) ( _
    source As TypedTableBase(Of TRow), _
    keySelector As Func(Of TRow, TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> OrderBy<TRow, TKey>(
    this TypedTableBase<TRow> source,
    Func<TRow, TKey> keySelector
)
where TRow : DataRow

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
where TRow : DataRow
static OrderedEnumerableRowCollection<TRow>^ OrderBy(
    TypedTableBase<TRow>^ source,
    Func<TRow, TKey>^ keySelector
)
static member OrderBy :
        source:TypedTableBase<'TRow> *
        keySelector:Func<'TRow, 'TKey> -> OrderedEnumerableRowCollection<'TRow>  when 'TRow : DataRow

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data TypedTableBase
<
(Of
<
(
TRow
>
)
>
)

一个 TypedTableBase<(Of <(T>)>)，其中包含要排序的 DataRow 元素。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

一个 OrderedEnumerableRowCollection<(Of <(TRow>)>)，其元素按指定键排序。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBaseExtensions 类
TypedTableBaseExtensions 成员
OrderBy 重载
System.Data 命名空间


TypedTableBaseExtensions ..::.OrderBy <(Of <(TRow, TKey >)>) 方法 (TypedTableBase <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>), IComparer <(Of <(TKey >)>))

TypedTableBaseExtensions
.
.
::
.
OrderBy
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (TypedTableBase
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
, IComparer
<
(Of
<
(
TKey
>
)
>
)
)
TypedTableBaseExtensions 类

按指定键和比较器升序排序 TypedTableBase<(Of <(T>)>) 的行。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function OrderBy(Of TRow As DataRow, TKey) ( _
    source As TypedTableBase(Of TRow), _
    keySelector As Func(Of TRow, TKey), _
    comparer As IComparer(Of TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> OrderBy<TRow, TKey>(
    this TypedTableBase<TRow> source,
    Func<TRow, TKey> keySelector,
    IComparer<TKey> comparer
)
where TRow : DataRow

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
where TRow : DataRow
static OrderedEnumerableRowCollection<TRow>^ OrderBy(
    TypedTableBase<TRow>^ source,
    Func<TRow, TKey>^ keySelector,
    IComparer<TKey>^ comparer
)
static member OrderBy :
        source:TypedTableBase<'TRow> *
        keySelector:Func<'TRow, 'TKey> *
        comparer:IComparer<'TKey> -> OrderedEnumerableRowCollection<'TRow>  when 'TRow : DataRow

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data TypedTableBase
<
(Of
<
(
TRow
>
)
>
)

一个 TypedTableBase<(Of <(T>)>)，其中包含要排序的 DataRow 元素。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
TKey
>
)
>
)

一个用于比较键的 IComparer<(Of <(T>)>)。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

一个 OrderedEnumerableRowCollection<(Of <(TRow>)>)，其元素按指定键和比较器排序。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBaseExtensions 类
TypedTableBaseExtensions 成员
OrderBy 重载
System.Data 命名空间


TypedTableBaseExtensions ..::.OrderByDescending 方法

TypedTableBaseExtensions
.
.
::
.
OrderByDescending 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TypedTableBaseExtensions 类

按降序排序 TypedTableBase<(Of <(T>)>) 的行。

名称 说明
页首

参考

TypedTableBaseExtensions 类
TypedTableBaseExtensions 成员
System.Data 命名空间


TypedTableBaseExtensions ..::.OrderByDescending <(Of <(TRow, TKey >)>) 方法 (TypedTableBase <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>))

TypedTableBaseExtensions
.
.
::
.
OrderByDescending
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (TypedTableBase
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
)
TypedTableBaseExtensions 类

按指定键降序排序 TypedTableBase<(Of <(T>)>) 的行。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function OrderByDescending(Of TRow As DataRow, TKey) ( _
    source As TypedTableBase(Of TRow), _
    keySelector As Func(Of TRow, TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> OrderByDescending<TRow, TKey>(
    this TypedTableBase<TRow> source,
    Func<TRow, TKey> keySelector
)
where TRow : DataRow

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
where TRow : DataRow
static OrderedEnumerableRowCollection<TRow>^ OrderByDescending(
    TypedTableBase<TRow>^ source,
    Func<TRow, TKey>^ keySelector
)
static member OrderByDescending :
        source:TypedTableBase<'TRow> *
        keySelector:Func<'TRow, 'TKey> -> OrderedEnumerableRowCollection<'TRow>  when 'TRow : DataRow

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data TypedTableBase
<
(Of
<
(
TRow
>
)
>
)

一个 TypedTableBase<(Of <(T>)>)，其中包含要排序的 DataRow 元素。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

一个 OrderedEnumerableRowCollection<(Of <(TRow>)>)，其元素按指定键排序。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBaseExtensions 类
TypedTableBaseExtensions 成员
OrderByDescending 重载
System.Data 命名空间


TypedTableBaseExtensions ..::.OrderByDescending <(Of <(TRow, TKey >)>) 方法 (TypedTableBase <(Of <(TRow >)>), Func <(Of <(TRow, TKey >)>), IComparer <(Of <(TKey >)>))

TypedTableBaseExtensions
.
.
::
.
OrderByDescending
<
(Of
<
(
TRow, TKey
>
)
>
)
方法 (TypedTableBase
<
(Of
<
(
TRow
>
)
>
)
, Func
<
(Of
<
(
TRow, TKey
>
)
>
)
, IComparer
<
(Of
<
(
TKey
>
)
>
)
)
TypedTableBaseExtensions 类

按指定键和比较器降序排序 TypedTableBase<(Of <(T>)>) 的行。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function OrderByDescending(Of TRow As DataRow, TKey) ( _
    source As TypedTableBase(Of TRow), _
    keySelector As Func(Of TRow, TKey), _
    comparer As IComparer(Of TKey) _
) As OrderedEnumerableRowCollection(Of TRow)
public static OrderedEnumerableRowCollection<TRow> OrderByDescending<TRow, TKey>(
    this TypedTableBase<TRow> source,
    Func<TRow, TKey> keySelector,
    IComparer<TKey> comparer
)
where TRow : DataRow

[ExtensionAttribute]
public:
generic<typename TRow, typename TKey>
where TRow : DataRow
static OrderedEnumerableRowCollection<TRow>^ OrderByDescending(
    TypedTableBase<TRow>^ source,
    Func<TRow, TKey>^ keySelector,
    IComparer<TKey>^ comparer
)
static member OrderByDescending :
        source:TypedTableBase<'TRow> *
        keySelector:Func<'TRow, 'TKey> *
        comparer:IComparer<'TKey> -> OrderedEnumerableRowCollection<'TRow>  when 'TRow : DataRow

类型参数

TRow

source 中行元素的类型，通常为 DataRow。

TKey

keySelector 返回的键的类型。

参数

source
类型： System.Data TypedTableBase
<
(Of
<
(
TRow
>
)
>
)

一个 TypedTableBase<(Of <(T>)>)，其中包含要排序的 DataRow 元素。
keySelector
类型： System Func
<
(Of
<
(
TRow, TKey
>
)
>
)

用于从元素中提取键的函数。
comparer
类型： System.Collections.Generic IComparer
<
(Of
<
(
TKey
>
)
>
)

一个用于比较键的 IComparer<(Of <(T>)>)。

返回值

类型： System.Data OrderedEnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

一个 OrderedEnumerableRowCollection<(Of <(TRow>)>)，其元素按指定键和比较器排序。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBaseExtensions 类
TypedTableBaseExtensions 成员
OrderByDescending 重载
System.Data 命名空间


TypedTableBaseExtensions ..::.Select <(Of <(TRow, S >)>) 方法

TypedTableBaseExtensions
.
.
::
.
Select
<
(Of
<
(
TRow, S
>
)
>
)
方法
TypedTableBaseExtensions 类

将 TypedTableBase<(Of <(T>)>) 中的每个元素投影到新窗体。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Select(Of TRow As DataRow, S) ( _
    source As TypedTableBase(Of TRow), _
    selector As Func(Of TRow, S) _
) As EnumerableRowCollection(Of S)
public static EnumerableRowCollection<S> Select<TRow, S>(
    this TypedTableBase<TRow> source,
    Func<TRow, S> selector
)
where TRow : DataRow

[ExtensionAttribute]
public:
generic<typename TRow, typename S>
where TRow : DataRow
static EnumerableRowCollection<S>^ Select(
    TypedTableBase<TRow>^ source,
    Func<TRow, S>^ selector
)
static member Select :
        source:TypedTableBase<'TRow> *
        selector:Func<'TRow, 'S> -> EnumerableRowCollection<'S>  when 'TRow : DataRow

类型参数

TRow

source 中行元素的类型 DataRow。

S

参数

source
类型： System.Data TypedTableBase
<
(Of
<
(
TRow
>
)
>
)

一个 TypedTableBase<(Of <(T>)>)，其中包含要对其调用转换函数的 DataRow 元素。
selector
类型： System Func
<
(Of
<
(
TRow, S
>
)
>
)

要应用于每个元素的转换函数。

返回值

类型： System.Data EnumerableRowCollection
<
(Of
<
(
S
>
)
>
)

一个 EnumerableRowCollection<(Of <(TRow>)>)，其元素是对 source 的每个元素调用转换函数的结果。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

此投影方法需要转换函数 selector，以便为源序列 source 中的每个值生成一个值。如果 selector 返回的值本身为一个集合，则使用方必须手动遍历子序列。 此投影方法需要转换函数 selector，以便为源序列 source 中的每个值生成一个值。如果 selector 返回的值本身为一个集合，则使用方必须手动遍历子序列。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBaseExtensions 类
TypedTableBaseExtensions 成员
System.Data 命名空间


TypedTableBaseExtensions ..::.Where <(Of <(TRow >)>) 方法

TypedTableBaseExtensions
.
.
::
.
Where
<
(Of
<
(
TRow
>
)
>
)
方法
TypedTableBaseExtensions 类

按指定谓词筛选行序列。

命名空间： System.Data
程序集： System.Data.DataSetExtensions（在 System.Data.DataSetExtensions.dll 中）
<ExtensionAttribute> _
Public Shared Function Where(Of TRow As DataRow) ( _
    source As TypedTableBase(Of TRow), _
    predicate As Func(Of TRow, Boolean) _
) As EnumerableRowCollection(Of TRow)
public static EnumerableRowCollection<TRow> Where<TRow>(
    this TypedTableBase<TRow> source,
    Func<TRow, bool> predicate
)
where TRow : DataRow

[ExtensionAttribute]
public:
generic<typename TRow>
where TRow : DataRow
static EnumerableRowCollection<TRow>^ Where(
    TypedTableBase<TRow>^ source,
    Func<TRow, bool>^ predicate
)
static member Where :
        source:TypedTableBase<'TRow> *
        predicate:Func<'TRow, bool> -> EnumerableRowCollection<'TRow>  when 'TRow : DataRow

类型参数

TRow

source 中行元素的类型 DataRow。

参数

source
类型： System.Data TypedTableBase
<
(Of
<
(
TRow
>
)
>
)

一个 TypedTableBase<(Of <(T>)>)，其中包含要筛选的 DataRow 元素。
predicate
类型： System Func
<
(Of
<
(
TRow, Boolean
>
)
>
)

用于测试每个元素是否满足条件的函数。

返回值

类型： System.Data EnumerableRowCollection
<
(Of
<
(
TRow
>
)
>
)

一个 OrderedEnumerableRowCollection<(Of <(TRow>)>)，其中包含输入序列中满足该条件的行。

使用说明

在 Visual Basic 和 C# 中，可以在 TRow 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见 或 。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4、3.5 SP1

参考

TypedTableBaseExtensions 类
TypedTableBaseExtensions 成员
System.Data 命名空间


UniqueConstraint 类

UniqueConstraint 类
成员

表示对一组列的限制，列中的所有值必须是唯一的。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Class UniqueConstraint _
    Inherits Constraint
public class UniqueConstraint : Constraint
public ref class UniqueConstraint : public Constraint
type UniqueConstraint =
    class
        inherit Constraint
    end

对一个列（或多个列）强制 UniqueConstraint，以确保主键值是唯一的。

除非将 EnforceConstraints 属性设置为 true，否则不会强制约束。

在将 DataSet 与第二个 DataSet 合并时，在所有合并完成之前，不强制约束。

下面的示例将 UniqueConstraint 添加到 DataSet，并将 EnforceConstraints 属性设置为 true。

Public Sub CreateDataTable()
    Dim dataTable As DataTable = New DataTable
    dataTable.Columns.Add("CustomerID", Type.GetType("System.String"))
    dataTable.Columns.Add("CompanyName", Type.GetType("System.String"))

    Dim uniqueConstraint As UniqueConstraint = _
      New UniqueConstraint("CustConstraint", _
      New DataColumn() {dataTable.Columns("CustomerID"), _
      dataTable.Columns("CompanyName")})

    dataTable.Constraints.Add(uniqueConstraint)
End Sub

System.Data System.Data..::.UniqueConstraintUniqueConstraint

此类型适合于多线程读取操作。您必须使任何写操作同步。 此类型适合于多线程读取操作。您必须使任何写操作同步。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 成员
System.Data 命名空间
Add
Constraint
Constraints
ConstraintCollection
DataRelation
ForeignKeyConstraint

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 成员

UniqueConstraint 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UniqueConstraint 类

表示对一组列的限制，列中的所有值必须是唯一的。

UniqueConstraint 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UniqueConstraint 类
System.Data 命名空间


UniqueConstraint 构造函数

UniqueConstraint 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UniqueConstraint 类

初始化 UniqueConstraint 类的一个新实例。

名称 说明
页首

参考

UniqueConstraint 类
UniqueConstraint 成员
System.Data 命名空间


UniqueConstraint 构造函数 (DataColumn)

UniqueConstraint 构造函数 (DataColumn)
UniqueConstraint 类

用指定的 DataColumn 初始化 UniqueConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    column As DataColumn _
)
public UniqueConstraint(
    DataColumn column
)
public:
UniqueConstraint(
    DataColumn^ column
)
new :
        column:DataColumn -> UniqueConstraint

参数

column
类型： System.Data DataColumn
要约束的 DataColumn。

下面的示例创建新 UniqueConstraint，并将其分配到 DataRelation 的 ParentKeyConstraint 属性。

Private Sub CreateUniqueConstraint(ByVal dataSetSuppliers As DataSet)
    Dim uniqueConstraint As UniqueConstraint

    ' Get the DataColumn of a table in a DataSet.
    Dim dataColumn As DataColumn
    dataColumn = dataSetSuppliers.Tables("Suppliers").Columns("SupplierID")

    ' Create the constraint.
    uniqueConstraint = New UniqueConstraint("supplierIdConstraint", dataColumn)

    ' Add the constraint to the ConstraintCollection of the DataTable.
    dataSetSuppliers.Tables("Suppliers").Constraints.Add(uniqueConstraint)
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
UniqueConstraint 重载
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 构造函数 ( array<DataColumn >[]()[])

UniqueConstraint 构造函数 (
array<
DataColumn
>
[]
()
[]
)
UniqueConstraint 类

用给定的 DataColumn 对象的数组初始化 UniqueConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    columns As DataColumn() _
)
public UniqueConstraint(
    DataColumn[] columns
)
public:
UniqueConstraint(
    array<DataColumn^>^ columns
)
new :
        columns:DataColumn[] -> UniqueConstraint

参数

columns
类型：
array<
System.Data DataColumn
>
[]
()
[]

要约束的 DataColumn 对象的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
UniqueConstraint 重载
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 构造函数 (DataColumn, Boolean)

UniqueConstraint 构造函数 (DataColumn, Boolean)
UniqueConstraint 类

用要约束的 DataColumn 和指定约束是否为主键的值，初始化 UniqueConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    column As DataColumn, _
    isPrimaryKey As Boolean _
)
public UniqueConstraint(
    DataColumn column,
    bool isPrimaryKey
)
public:
UniqueConstraint(
    DataColumn^ column,
    bool isPrimaryKey
)
new :
        column:DataColumn *
        isPrimaryKey:bool -> UniqueConstraint

参数

column
类型： System.Data DataColumn
要约束的 DataColumn。
isPrimaryKey
类型： System Boolean
若要指示约束是主键，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
UniqueConstraint 重载
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 构造函数 ( array<DataColumn >[]()[], Boolean)

UniqueConstraint 构造函数 (
array<
DataColumn
>
[]
()
[]
, Boolean)
UniqueConstraint 类

用要约束的 DataColumn 对象的数组和指定约束是否为主键的值，初始化 UniqueConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    columns As DataColumn(), _
    isPrimaryKey As Boolean _
)
public UniqueConstraint(
    DataColumn[] columns,
    bool isPrimaryKey
)
public:
UniqueConstraint(
    array<DataColumn^>^ columns,
    bool isPrimaryKey
)
new :
        columns:DataColumn[] *
        isPrimaryKey:bool -> UniqueConstraint

参数

columns
类型：
array<
System.Data DataColumn
>
[]
()
[]

要约束的 DataColumn 对象的数组。
isPrimaryKey
类型： System Boolean
若要指示约束是主键，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
UniqueConstraint 重载
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 构造函数 (String, DataColumn)

UniqueConstraint 构造函数 (String, DataColumn)
UniqueConstraint 类

使用指定的名称和 DataColumn 初始化 UniqueConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    name As String, _
    column As DataColumn _
)
public UniqueConstraint(
    string name,
    DataColumn column
)
public:
UniqueConstraint(
    String^ name,
    DataColumn^ column
)
new :
        name:string *
        column:DataColumn -> UniqueConstraint

参数

name
类型： System String
约束的名称。
column
类型： System.Data DataColumn
要约束的 DataColumn。

下面的示例创建新 UniqueConstraint，并将其分配到 DataRelation 的 ParentKeyConstraint 属性。

Private Sub CreateUniqueConstraint(ByVal dataSetSuppliers As DataSet)
    Dim uniqueConstraint As UniqueConstraint

    ' Get the DataColumn of a table in a DataSet.
    Dim dataColumn As DataColumn
    dataColumn = dataSetSuppliers.Tables("Suppliers").Columns("SupplierID")

    ' Create the constraint.
    uniqueConstraint = New UniqueConstraint("supplierIdConstraint", dataColumn)

    ' Add the constraint to the ConstraintCollection of the DataTable.
    dataSetSuppliers.Tables("Suppliers").Constraints.Add(uniqueConstraint)
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
UniqueConstraint 重载
System.Data 命名空间
DataRelation
ParentKeyConstraint

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 构造函数 (String, array<DataColumn >[]()[])

UniqueConstraint 构造函数 (String,
array<
DataColumn
>
[]
()
[]
)
UniqueConstraint 类

用指定的名称和 DataColumn 对象的数组初始化 UniqueConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    name As String, _
    columns As DataColumn() _
)
public UniqueConstraint(
    string name,
    DataColumn[] columns
)
public:
UniqueConstraint(
    String^ name,
    array<DataColumn^>^ columns
)
new :
        name:string *
        columns:DataColumn[] -> UniqueConstraint

参数

name
类型： System String
约束的名称。
columns
类型：
array<
System.Data DataColumn
>
[]
()
[]

要约束的 DataColumn 对象的数组。

下面的示例用两个列创建 DataTable，并将新 UniqueConstraint 添加到 ConstraintCollection。

Private Sub MakeTableWithUniqueConstraint()
    ' Create a DataTable with 2 DataColumns.
    Dim dataTable As New DataTable("dataTable")
    Dim idColumn As New DataColumn( _
        "ID", System.Type.GetType("System.Int32"))
    Dim nameColumn As New DataColumn( _
        "Name", System.Type.GetType("System.String"))
    dataTable.Columns.Add(idColumn)
    dataTable.Columns.Add(nameColumn)

    ' Run procedure to create a constraint.
    AddUniqueConstraint(dataTable)

    ' Add one row to the table.
    Dim dataRow As DataRow
    dataRow = dataTable.NewRow()
    dataRow("ID") = 1
    dataRow("Name") = "John"
    dataTable.Rows.Add(dataRow)

    ' Display the constraint name.
    Console.WriteLine(dataTable.Constraints(0).ConstraintName)

    ' Try to add an identical row,
    ' which throws an exception.
    Try
        dataRow = dataTable.NewRow()
        dataRow("ID") = 1
        dataRow("Name") = "John"
        dataTable.Rows.Add(dataRow)
    Catch ex As Exception
        Console.WriteLine("Exception Type: {0}", ex.GetType())
        Console.WriteLine("Exception Message: {0}", ex.Message)
    End Try
End Sub

Private Sub AddUniqueConstraint(ByVal dataTable As DataTable)
    ' Create the DataColumn array.
    Dim dataColumns(1) As DataColumn
    dataColumns(0) = dataTable.Columns("ID")
    dataColumns(1) = dataTable.Columns("Name")

    ' Create the constraint on both columns.
    Dim uniqueConstraint As UniqueConstraint = _
        New UniqueConstraint("idNameConstraint", dataColumns)
    dataTable.Constraints.Add(uniqueConstraint)
End Sub

static private void MakeTableWithUniqueConstraint()
{
    // Create a DataTable with 2 DataColumns.
    DataTable dataTable = new DataTable("dataTable");
    DataColumn idColumn = new DataColumn(
        "id", System.Type.GetType("System.Int32"));
    DataColumn nameColumn = new DataColumn(
        "Name", System.Type.GetType("System.String"));
    dataTable.Columns.Add(idColumn);
    dataTable.Columns.Add(nameColumn);

    // Run procedure to create a constraint.
    AddUniqueConstraint(dataTable);

    // Add one row to the table.
    DataRow dataRow;
    dataRow = dataTable.NewRow();
    dataRow["id"] = 1;
    dataRow["Name"] = "John";
    dataTable.Rows.Add(dataRow);

    // Display the constraint name.
    Console.WriteLine(
        dataTable.Constraints[0].ConstraintName);

    // Try to add an identical row,
    // which throws an exception.
    try
    {
        dataRow = dataTable.NewRow();
        dataRow["id"] = 1;
        dataRow["Name"] = "John";
        dataTable.Rows.Add(dataRow);
    }
    catch (Exception ex)
    {
        Console.WriteLine(
            "Exception Type: {0}", ex.GetType());
        Console.WriteLine(
            "Exception Message: {0}", ex.Message);
    }
}
static private void AddUniqueConstraint(
    DataTable dataTable)
{
    // Create the DataColumn array.
    DataColumn[] dataColumns = new DataColumn[2];
    dataColumns[0] = dataTable.Columns["id"];
    dataColumns[1] = dataTable.Columns["Name"];

    // Create the constraint on both columns.
    UniqueConstraint uniqueConstraint =
        new UniqueConstraint("idNameConstraint", dataColumns);
    dataTable.Constraints.Add(uniqueConstraint);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
UniqueConstraint 重载
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 构造函数 (String, DataColumn, Boolean)

UniqueConstraint 构造函数 (String, DataColumn, Boolean)
UniqueConstraint 类

用指定名称、要约束的 DataColumn 和指定约束是否为主键的值，初始化 UniqueConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    name As String, _
    column As DataColumn, _
    isPrimaryKey As Boolean _
)
public UniqueConstraint(
    string name,
    DataColumn column,
    bool isPrimaryKey
)
public:
UniqueConstraint(
    String^ name,
    DataColumn^ column,
    bool isPrimaryKey
)
new :
        name:string *
        column:DataColumn *
        isPrimaryKey:bool -> UniqueConstraint

参数

name
类型： System String
约束的名称。
column
类型： System.Data DataColumn
要约束的 DataColumn。
isPrimaryKey
类型： System Boolean
若要指示约束是主键，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
UniqueConstraint 重载
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 构造函数 (String, array<DataColumn >[]()[], Boolean)

UniqueConstraint 构造函数 (String,
array<
DataColumn
>
[]
()
[]
, Boolean)
UniqueConstraint 类

用指定名称、要约束的 DataColumn 对象的数组和指定约束是否为主键的值，初始化 UniqueConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    name As String, _
    columns As DataColumn(), _
    isPrimaryKey As Boolean _
)
public UniqueConstraint(
    string name,
    DataColumn[] columns,
    bool isPrimaryKey
)
public:
UniqueConstraint(
    String^ name,
    array<DataColumn^>^ columns,
    bool isPrimaryKey
)
new :
        name:string *
        columns:DataColumn[] *
        isPrimaryKey:bool -> UniqueConstraint

参数

name
类型： System String
约束的名称。
columns
类型：
array<
System.Data DataColumn
>
[]
()
[]

要约束的 DataColumn 对象的数组。
isPrimaryKey
类型： System Boolean
若要指示约束是主键，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
UniqueConstraint 重载
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 构造函数 (String, array<String >[]()[], Boolean)

UniqueConstraint 构造函数 (String,
array<
String
>
[]
()
[]
, Boolean)
UniqueConstraint 类

用指定名称、要约束的 DataColumn 对象的数组和指定约束是否为主键的值，初始化 UniqueConstraint 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Sub New ( _
    name As String, _
    columnNames As String(), _
    isPrimaryKey As Boolean _
)
[BrowsableAttribute(false)]
public UniqueConstraint(
    string name,
    string[] columnNames,
    bool isPrimaryKey
)
[BrowsableAttribute(false)]
public:
UniqueConstraint(
    String^ name,
    array<String^>^ columnNames,
    bool isPrimaryKey
)
[<BrowsableAttribute(false)>]
new :
        name:string *
        columnNames:string[] *
        isPrimaryKey:bool -> UniqueConstraint

参数

name
类型： System String
约束的名称。
columnNames
类型：
array<
System String
>
[]
()
[]

要约束的 DataColumn 对象的数组。
isPrimaryKey
类型： System Boolean
若要指示约束是主键，则为 true；否则为 false。

此构造函数在 Visual Studio .NET 环境中提供设计时支持。因此，使用此构造函数创建的 UniqueConstraint 对象必须通过 AddRange 添加到集合中。当调用该方法时，必须存在具有指定名称的列，或者如果在调用该构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的列。 此构造函数在 Visual Studio .NET 环境中提供设计时支持。因此，使用此构造函数创建的 UniqueConstraint 对象必须通过 AddRange 添加到集合中。当调用该方法时，必须存在具有指定名称的列，或者如果在调用该构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的列。 此构造函数在 Visual Studio .NET 环境中提供设计时支持。因此，使用此构造函数创建的 UniqueConstraint 对象必须通过 AddRange 添加到集合中。当调用该方法时，必须存在具有指定名称的列，或者如果在调用该构造函数之前已经调用了 BeginInit，则在调用 EndInit 时，必须存在具有指定名称的列。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
UniqueConstraint 重载
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint 方法

UniqueConstraint 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UniqueConstraint 类

UniqueConstraint 类型公开以下成员。

名称 说明
页首

参考

UniqueConstraint 类
System.Data 命名空间


UniqueConstraint ..::.Equals 方法

UniqueConstraint
.
.
::
.
Equals 方法
UniqueConstraint 类

将此约束与第二个约束比较以确定两个约束是否相同。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function Equals ( _
    key2 As Object _
) As Boolean
public override bool Equals(
    Object key2
)
public:
virtual bool Equals(
    Object^ key2
) override
abstract Equals :
        key2:Object -> bool
override Equals :
        key2:Object -> bool

参数

key2
类型： System Object
此 UniqueConstraint 将与之比较的对象。

返回值

类型： System Boolean
如果约束相等，则为 true；否则为 false。

如果两个约束对同一组列进行约束，那么它们就相等。

下面的示例比较两个 UiqueConstraint 对象。

Private Sub CompareConstraints()
    Dim constraintCustomerOrders As UniqueConstraint
    Dim constraintOrderDetails As UniqueConstraint
    Dim relationCustomerOrders As DataRelation
    Dim relationOrderDetails As DataRelation

    ' Get a DataRelation from a DataSet.
    relationCustomerOrders = DataSet1.Relations("CustomerOrders")

    '  Get a constraint.
    constraintCustomerOrders = relationCustomerOrders.ParentKeyConstraint

    ' Get a second relation and constraint.
    relationOrderDetails = DataSet1.Relations("OrderDetails")
    constraintOrderDetails = relationOrderDetails.ParentKeyConstraint

    ' Compare the two.
    Console.WriteLine( _
        constraintCustomerOrders.Equals(constraintOrderDetails).ToString())
 End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
System.Data 命名空间
ParentKeyConstraint

其他资源

数据表约束 (ADO.NET)


UniqueConstraint ..::.GetHashCode 方法

UniqueConstraint
.
.
::
.
GetHashCode 方法
UniqueConstraint 类

获取 UniqueConstraint 对象的此实例的哈希代码。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
32 位有符号整数哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
System.Data 命名空间


UniqueConstraint 属性

UniqueConstraint 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UniqueConstraint 类

UniqueConstraint 类型公开以下成员。

名称 说明
页首

参考

UniqueConstraint 类
System.Data 命名空间


UniqueConstraint ..::.Columns 属性

UniqueConstraint
.
.
::
.
Columns 属性
UniqueConstraint 类

获取此约束影响的列的数组。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property Columns As DataColumn()
    Get
public virtual DataColumn[] Columns { get; }
public:
virtual property array<DataColumn^>^ Columns {
    array<DataColumn^>^ get ();
}
abstract Columns : DataColumn[]
override Columns : DataColumn[]

属性值

类型：
array<
System.Data DataColumn
>
[]
()
[]

DataColumn 对象的数组。

下面的示例返回 UniqueConstraint 约束的 DataColumn 对象。

Private Sub GetColsFromConstraint()
    Dim dataColumns() As DataColumn

    ' Get a named relation from a DataSet.
    Dim dataRelation As DataRelation
    dataRelation = DataSet1.Relations("CustomerOrders")

    ' Get the ParentKeyConstraint
    Dim uniqueConstraint As UniqueConstraint
    uniqueConstraint= dataRelation.ParentKeyConstraint

    ' Get the DataColumn objects being constrained.
    dataColumns = uniqueConstraint.Columns

    ' Print the column name of each column.
    Dim i As Integer
    For i = 0 to dataColumns.GetUpperBound(0)
       Console.Write(dataColumns(i).ColumnName)
    Next i
 End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint ..::.IsPrimaryKey 属性

UniqueConstraint
.
.
::
.
IsPrimaryKey 属性
UniqueConstraint 类

获取一个值，该值指示约束是否在主键上。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property IsPrimaryKey As Boolean
    Get
public bool IsPrimaryKey { get; }
public:
property bool IsPrimaryKey {
    bool get ();
}
member IsPrimaryKey : bool

属性值

类型： System Boolean
如果约束在主键上，则为 true；否则为 false。

表通常包括一个主键，该主键确保每个行都是唯一的。在一些表中，主键可能由多个列组成。例如，包含名称的表的主键可能由名和姓组成。若要创建具有多个列的主键，请将 Columns 属性设置为 DataColumn 对象的数组。 表通常包括一个主键，该主键确保每个行都是唯一的。在一些表中，主键可能由多个列组成。例如，包含名称的表的主键可能由名和姓组成。若要创建具有多个列的主键，请将 Columns 属性设置为 DataColumn 对象的数组。 表通常包括一个主键，该主键确保每个行都是唯一的。在一些表中，主键可能由多个列组成。例如，包含名称的表的主键可能由名和姓组成。若要创建具有多个列的主键，请将 Columns 属性设置为 DataColumn 对象的数组。 表通常包括一个主键，该主键确保每个行都是唯一的。在一些表中，主键可能由多个列组成。例如，包含名称的表的主键可能由名和姓组成。若要创建具有多个列的主键，请将 Columns 属性设置为 DataColumn 对象的数组。

下面的示例检查 IsPrimaryKey 属性。

Private Sub GetPrimaryKey()
    Dim dataRelation As DataRelation
    Dim uniqueConstraint As UniqueConstraint

    ' Get a DataRelation from a DataSet.
    dataRelation = DataSet1.Relations("CustomerOrders")

    ' Get the ParentKeyConstraint.
    uniqueConstraint = dataRelation.ParentKeyConstraint

    ' Test if the IsPrimaryKey is true.
    If uniqueConstraint.IsPrimaryKey Then
       Console.WriteLine("IsPrimaryKey=True")
    Else
       Console.WriteLine("IsPrimaryKey=False")
    End If
 End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
System.Data 命名空间

其他资源

数据表约束 (ADO.NET)


UniqueConstraint ..::.Table 属性

UniqueConstraint
.
.
::
.
Table 属性
UniqueConstraint 类

获取此约束所属的表。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Overrides ReadOnly Property Table As DataTable
    Get
public override DataTable Table { get; }
public:
virtual property DataTable^ Table {
    DataTable^ get () override;
}
abstract Table : DataTable
override Table : DataTable

属性值

类型： System.Data DataTable
此约束所属的 DataTable。

下面的示例返回 UniqueConstraint 对象的 DataTable。

Private Sub GetTableFromConstraint()
    Dim dataTable As DataTable
    Dim uniqueConstraint As UniqueConstraint

    ' Get a UniqueConstraint.
    uniqueConstraint = _
        CType(DataSet1.Tables("Suppliers").Constraints(0), _
        UniqueConstraint)

    ' Get the DataTable.
    dataTable = uniqueConstraint.Table
End Sub

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

UniqueConstraint 类
UniqueConstraint 成员
System.Data 命名空间
ParentKeyConstraint

其他资源

数据表约束 (ADO.NET)


UpdateException 类

UpdateException 类
成员

对对象实例的修改无法保持到数据源时引发的异常。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public Class UpdateException _
    Inherits DataException
[SerializableAttribute]
public class UpdateException : DataException
[SerializableAttribute]
public ref class UpdateException : public DataException
[<SerializableAttribute>]
type UpdateException =
    class
        inherit DataException
    end

有关如何处理代码中的异常的更多信息，请参见 Exception。

System.Data System.Data..::.UpdateExceptionUpdateException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

UpdateException 成员
System.Data 命名空间


UpdateException 成员

UpdateException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UpdateException 类

对对象实例的修改无法保持到数据源时引发的异常。

UpdateException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

UpdateException 类
System.Data 命名空间


UpdateException 构造函数

UpdateException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UpdateException 类

初始化 UpdateException 的新实例。

名称 说明
页首

有关如何在代码中处理异常的更多信息，请参见 Exception。

参考

UpdateException 类
UpdateException 成员
System.Data 命名空间


UpdateException 构造函数

UpdateException 构造函数
UpdateException 类

初始化 UpdateException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public UpdateException()
public:
UpdateException()
new : unit -> UpdateException

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

UpdateException 类
UpdateException 成员
UpdateException 重载
System.Data 命名空间


UpdateException 构造函数 (String)

UpdateException 构造函数 (String)
UpdateException 类

使用专用的错误消息初始化 UpdateException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String _
)
public UpdateException(
    string message
)
public:
UpdateException(
    String^ message
)
new :
        message:string -> UpdateException

参数

message
类型： System String
描述错误的消息。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

UpdateException 类
UpdateException 成员
UpdateException 重载
System.Data 命名空间


UpdateException 构造函数 (SerializationInfo, StreamingContext)

UpdateException 构造函数 (SerializationInfo, StreamingContext)
UpdateException 类

使用序列化数据初始化 UpdateException 的新实例。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected UpdateException(
    SerializationInfo info,
    StreamingContext context
)
protected:
UpdateException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> UpdateException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它包含有关所引发异常的序列化对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

UpdateException 类
UpdateException 成员
UpdateException 重载
System.Data 命名空间


UpdateException 构造函数 (String, Exception)

UpdateException 构造函数 (String, Exception)
UpdateException 类

初始化 UpdateException 类的新实例，该类使用指定的错误消息和对导致此异常的内部异常的引用。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public UpdateException(
    string message,
    Exception innerException
)
public:
UpdateException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> UpdateException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个 null 引用（在 Visual Basic 中为 Nothing）。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

UpdateException 类
UpdateException 成员
UpdateException 重载
System.Data 命名空间


UpdateException 构造函数 (String, Exception, IEnumerable <(Of <(ObjectStateEntry >)>))

UpdateException 构造函数 (String, Exception, IEnumerable
<
(Of
<
(
ObjectStateEntry
>
)
>
)
)
UpdateException 类

初始化 UpdateException 类的新实例，该类使用指定的错误消息、对内部异常的引用以及 ObjectStateEntry 对象的可枚举集合。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception, _
    stateEntries As IEnumerable(Of ObjectStateEntry) _
)
public UpdateException(
    string message,
    Exception innerException,
    IEnumerable<ObjectStateEntry> stateEntries
)
public:
UpdateException(
    String^ message,
    Exception^ innerException,
    IEnumerable<ObjectStateEntry^>^ stateEntries
)
new :
        message:string *
        innerException:Exception *
        stateEntries:IEnumerable<ObjectStateEntry> -> UpdateException

参数

message
类型： System String
解释异常原因的错误信息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个 null 引用（在 Visual Basic 中为 Nothing）。
stateEntries
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
ObjectStateEntry
>
)
>
)

ObjectStateEntry 对象的集合。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

UpdateException 类
UpdateException 成员
UpdateException 重载
System.Data 命名空间


UpdateException 方法

UpdateException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UpdateException 类

UpdateException 类型公开以下成员。

名称 说明
页首

参考

UpdateException 类
System.Data 命名空间


UpdateException 属性

UpdateException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UpdateException 类

UpdateException 类型公开以下成员。

名称 说明
页首

参考

UpdateException 类
System.Data 命名空间


UpdateException ..::.StateEntries 属性

UpdateException
.
.
::
.
StateEntries 属性
UpdateException 类

获取此 UpdateException 的 ObjectStateEntry 对象。

命名空间： System.Data
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property StateEntries As ReadOnlyCollection(Of ObjectStateEntry)
    Get
public ReadOnlyCollection<ObjectStateEntry> StateEntries { get; }
public:
property ReadOnlyCollection<ObjectStateEntry^>^ StateEntries {
    ReadOnlyCollection<ObjectStateEntry^>^ get ();
}
member StateEntries : ReadOnlyCollection<ObjectStateEntry>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
ObjectStateEntry
>
)
>
)

ObjectStateEntry 对象的集合，由单个实体和 0 个或 0 个以上的关系组成，或者由 0 个实体和 1 或多个关系组成。

有关如何在代码中处理异常的更多信息，请参见 Exception。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

UpdateException 类
UpdateException 成员
System.Data 命名空间


UpdateException 事件

UpdateException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
UpdateException 类

UpdateException 类型公开以下成员。

名称 说明
页首

参考

UpdateException 类
System.Data 命名空间


UpdateRowSource 枚举

UpdateRowSource 枚举

指定如何将查询命令结果应用到正在更新的行。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration UpdateRowSource
public enum UpdateRowSource
public enum class UpdateRowSource
type UpdateRowSource
 | 成员名称 | 说明
由 XNA Framework 提供支持 | None | 忽略任何返回的参数或行。
由 XNA Framework 提供支持 | OutputParameters | 将输出参数映射到 DataSet 中的已更改的行。
由 XNA Framework 提供支持 | FirstReturnedRecord | 将第一个返回行中的数据映射到 DataSet 中的已更改的行。
由 XNA Framework 提供支持 | Both | 将输出参数和第一个返回行都映射到 DataSet 中的已更改的行。

UpdateRowSource 值由 IDbCommand 和从它派生的任何类的 UpdatedRowSource 属性使用。

有关更多信息属性，请参见 DataAdapter 参数 (ADO.NET)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


UpdateStatus 枚举

UpdateStatus 枚举

指定在 Update 期间对当前行和其余行采取的操作。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration UpdateStatus
public enum UpdateStatus
public enum class UpdateStatus
type UpdateStatus
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Continue | DataAdapter 应该继续处理行。
由 XNA Framework 提供支持 | ErrorsOccurred | 事件处理程序报告：应将更新作为错误对待。
由 XNA Framework 提供支持 | SkipCurrentRow | 将不更新当前行。
由 XNA Framework 提供支持 | SkipAllRemainingRows | 将不更新当前行和所有其余行。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


VersionNotFoundException 类

VersionNotFoundException 类
成员

表示在尝试返回已经删除的 DataRow 版本时引发的异常。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public Class VersionNotFoundException _
    Inherits DataException
[SerializableAttribute]
public class VersionNotFoundException : DataException
[SerializableAttribute]
public ref class VersionNotFoundException : public DataException
[<SerializableAttribute>]
type VersionNotFoundException =
    class
        inherit DataException
    end

下面的示例用一个 DataColumn 和十个 DataRow 对象创建 DataTable。在删除 DataRow 之后，若尝试返回已移除的行的当前版本，将导致引发 VersionNotFoundException 异常。 下面的示例用一个 DataColumn 和十个 DataRow 对象创建 DataTable。在删除 DataRow 之后，若尝试返回已移除的行的当前版本，将导致引发 VersionNotFoundException 异常。

Private Sub DemonstrateVersionNotFoundException()
    ' Create a DataTable with one column.
    Dim table As New DataTable("NewTable")
    Dim column As New DataColumn("NewColumn")
    table.Columns.Add(column)
    Dim newRow As DataRow

    Dim i As Integer
    For i = 0 To 9
        newRow = table.NewRow()
        newRow("NewColumn") = i
        table.Rows.Add(newRow)
    Next i
    table.AcceptChanges()

    Try
        Console.WriteLine("Trying...")
        Dim removedRow As DataRow = table.Rows(9)
        removedRow.Delete()
        removedRow.AcceptChanges()

        ' Try to get the Current row version.
        Console.WriteLine(removedRow(0, DataRowVersion.Current))

    Catch e As System.Data.VersionNotFoundException
        Console.WriteLine("Current version of row not found.")
    End Try
End Sub

private void DemonstrateVersionNotFoundException()
{
    // Create a DataTable with one column.
    DataTable table = new DataTable("NewTable");
    DataColumn column = new DataColumn("NewColumn");
    table.Columns.Add(column);
    DataRow newRow;

    for(int i = 0;i <10;i++)
    {
        newRow = table.NewRow();
        newRow["NewColumn"] = i;
        table.Rows.Add(newRow);
    }
    table.AcceptChanges();

    try
    {
        Console.WriteLine("Trying...");
        DataRow removedRow = table.Rows[9];
        removedRow.Delete();
        removedRow.AcceptChanges();
        // Try to get the Current row version.
        Console.WriteLine(removedRow[0,DataRowVersion.Current]);

    }
    catch(System.Data.VersionNotFoundException)
    {
        Console.WriteLine("Current version of row not found.");
    }
}

System.Data System.Data..::.VersionNotFoundExceptionVersionNotFoundException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

VersionNotFoundException 成员
System.Data 命名空间


VersionNotFoundException 成员

VersionNotFoundException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
VersionNotFoundException 类

表示在尝试返回已经删除的 DataRow 版本时引发的异常。

VersionNotFoundException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

VersionNotFoundException 类
System.Data 命名空间


VersionNotFoundException 构造函数

VersionNotFoundException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
VersionNotFoundException 类

初始化 VersionNotFoundException 类的新实例。

名称 说明
页首

参考

VersionNotFoundException 类
VersionNotFoundException 成员
System.Data 命名空间


VersionNotFoundException 构造函数

VersionNotFoundException 构造函数
VersionNotFoundException 类

初始化 VersionNotFoundException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public VersionNotFoundException()
public:
VersionNotFoundException()
new : unit -> VersionNotFoundException

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

VersionNotFoundException 类
VersionNotFoundException 成员
VersionNotFoundException 重载
System.Data 命名空间


VersionNotFoundException 构造函数 (String)

VersionNotFoundException 构造函数 (String)
VersionNotFoundException 类

使用指定的字符串初始化 VersionNotFoundException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    s As String _
)
public VersionNotFoundException(
    string s
)
public:
VersionNotFoundException(
    String^ s
)
new :
        s:string -> VersionNotFoundException

参数

s
类型： System String
当引发异常时显示的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

VersionNotFoundException 类
VersionNotFoundException 成员
VersionNotFoundException 重载
System.Data 命名空间


VersionNotFoundException 构造函数 (SerializationInfo, StreamingContext)

VersionNotFoundException 构造函数 (SerializationInfo, StreamingContext)
VersionNotFoundException 类

以序列化信息初始化 VersionNotFoundException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected VersionNotFoundException(
    SerializationInfo info,
    StreamingContext context
)
protected:
VersionNotFoundException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> VersionNotFoundException

参数

info
类型： System.Runtime.Serialization SerializationInfo
序列化或反序列化某个对象所需的数据。。
context
类型： System.Runtime.Serialization StreamingContext
指定序列化流的源和目的地的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

VersionNotFoundException 类
VersionNotFoundException 成员
VersionNotFoundException 重载
System.Data 命名空间
StreamingContext
SerializationInfo


VersionNotFoundException 构造函数 (String, Exception)

VersionNotFoundException 构造函数 (String, Exception)
VersionNotFoundException 类

使用指定错误信息和对作为此异常原因的内部异常的引用来初始化 VersionNotFoundException 类的新实例。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public VersionNotFoundException(
    string message,
    Exception innerException
)
public:
VersionNotFoundException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> VersionNotFoundException

参数

message
类型： System String
解释异常原因的错误消息。
innerException
类型： System Exception
导致当前异常的异常；如果未指定内部异常，则是一个空引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

VersionNotFoundException 类
VersionNotFoundException 成员
VersionNotFoundException 重载
System.Data 命名空间


VersionNotFoundException 方法

VersionNotFoundException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
VersionNotFoundException 类

VersionNotFoundException 类型公开以下成员。

名称 说明
页首

参考

VersionNotFoundException 类
System.Data 命名空间


VersionNotFoundException 属性

VersionNotFoundException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
VersionNotFoundException 类

VersionNotFoundException 类型公开以下成员。

名称 说明
页首

参考

VersionNotFoundException 类
System.Data 命名空间


VersionNotFoundException 事件

VersionNotFoundException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
VersionNotFoundException 类

VersionNotFoundException 类型公开以下成员。

名称 说明
页首

参考

VersionNotFoundException 类
System.Data 命名空间


XmlReadMode 枚举

XmlReadMode 枚举

指定如何将 XML 数据和关系架构读入 DataSet。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration XmlReadMode
public enum XmlReadMode
public enum class XmlReadMode
type XmlReadMode
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Auto | 默认值。 执行下列操作中的最合适的操作： 如果数据是 DiffGram，则将 XmlReadMode 设置为 DiffGram。 - 或 - 如果数据集已经有架构，或者文档包含内联架构，则将 XmlReadMode 设置为 ReadSchema。 - 或 - 如果数据集还没有架构且文档也不包含内联架构，则将 XmlReadMode 设置为 InferSchema。
由 XNA Framework 提供支持 | ReadSchema | 读取任何内联架构并加载数据。如果 DataSet 已经包含架构，则可以将新表添加到架构中，但是如果内联架构中的任何表在 DataSet 中已经存在，则会引发异常。 读取任何内联架构并加载数据。如果 DataSet 已经包含架构，则可以将新表添加到架构中，但是如果内联架构中的任何表在 DataSet 中已经存在，则会引发异常。
由 XNA Framework 提供支持 | IgnoreSchema | 忽略任何内联架构并将数据读入现有的 DataSet 架构。如果任何数据与现有的架构不匹配，就会将这些数据丢弃（包括为 DataSet 定义的不同命名空间中的数据）。如果数据是 DiffGram，IgnoreSchema 与 DiffGram 具有相同的功能。 忽略任何内联架构并将数据读入现有的 DataSet 架构。如果任何数据与现有的架构不匹配，就会将这些数据丢弃（包括为 DataSet 定义的不同命名空间中的数据）。如果数据是 DiffGram，IgnoreSchema 与 DiffGram 具有相同的功能。 忽略任何内联架构并将数据读入现有的 DataSet 架构。如果任何数据与现有的架构不匹配，就会将这些数据丢弃（包括为 DataSet 定义的不同命名空间中的数据）。如果数据是 DiffGram，IgnoreSchema 与 DiffGram 具有相同的功能。
由 XNA Framework 提供支持 | InferSchema | 忽略任何内联架构，从数据推断出架构并加载数据。如果 DataSet 已经包含架构，就通过添加新表或者向现有的表添加列，来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间，或者如果推断的列中有一些与现有的列冲突，则会引发异常。 忽略任何内联架构，从数据推断出架构并加载数据。如果 DataSet 已经包含架构，就通过添加新表或者向现有的表添加列，来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间，或者如果推断的列中有一些与现有的列冲突，则会引发异常。 忽略任何内联架构，从数据推断出架构并加载数据。如果 DataSet 已经包含架构，就通过添加新表或者向现有的表添加列，来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间，或者如果推断的列中有一些与现有的列冲突，则会引发异常。
由 XNA Framework 提供支持 | DiffGram | 读取 DiffGram，将 DiffGram 中的更改应用到 DataSet。语义与 Merge 操作的语义相同。与 Merge 操作一样，保留 RowState 值。向 ReadXml 的 DiffGram 输入只能使用 WriteXml 中的 DiffGram 输出来获得。 读取 DiffGram，将 DiffGram 中的更改应用到 DataSet。语义与 Merge 操作的语义相同。与 Merge 操作一样，保留 RowState 值。向 ReadXml 的 DiffGram 输入只能使用 WriteXml 中的 DiffGram 输出来获得。 读取 DiffGram，将 DiffGram 中的更改应用到 DataSet。语义与 Merge 操作的语义相同。与 Merge 操作一样，保留 RowState 值。向 ReadXml 的 DiffGram 输入只能使用 WriteXml 中的 DiffGram 输出来获得。 读取 DiffGram，将 DiffGram 中的更改应用到 DataSet。语义与 Merge 操作的语义相同。与 Merge 操作一样，保留 RowState 值。向 ReadXml 的 DiffGram 输入只能使用 WriteXml 中的 DiffGram 输出来获得。 目标 DataSet 必须与在它上面作为 DiffGram 调用 WriteXml 的 DataSet 有相同的架构。否则，DiffGram 合并操作就会失败，并引发异常。 目标 DataSet 必须与在它上面作为 DiffGram 调用 WriteXml 的 DataSet 有相同的架构。否则，DiffGram 合并操作就会失败，并引发异常。
由 XNA Framework 提供支持 | Fragment | 针对 SQL Server 的实例读取 XML 片段（例如，通过执行 FOR XML 查询生成的 XML 片段）。当 XmlReadMode 设置为 Fragment 时，默认命名空间作为内联架构来读取。 针对 SQL Server 的实例读取 XML 片段（例如，通过执行 FOR XML 查询生成的 XML 片段）。当 XmlReadMode 设置为 Fragment 时，默认命名空间作为内联架构来读取。
由 XNA Framework 提供支持 | InferTypedSchema | 忽略任何内联架构，从数据推断出强类型架构并加载数据。如果无法从数据推断出类型，则会将其解释为字符串数据。如果 DataSet 已经包含架构，就通过添加新表或者通过向现有的表中添加列来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间，或者如果推断的列中有一些与现有的列冲突，则会引发异常。 忽略任何内联架构，从数据推断出强类型架构并加载数据。如果无法从数据推断出类型，则会将其解释为字符串数据。如果 DataSet 已经包含架构，就通过添加新表或者通过向现有的表中添加列来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间，或者如果推断的列中有一些与现有的列冲突，则会引发异常。 忽略任何内联架构，从数据推断出强类型架构并加载数据。如果无法从数据推断出类型，则会将其解释为字符串数据。如果 DataSet 已经包含架构，就通过添加新表或者通过向现有的表中添加列来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间，或者如果推断的列中有一些与现有的列冲突，则会引发异常。 忽略任何内联架构，从数据推断出强类型架构并加载数据。如果无法从数据推断出类型，则会将其解释为字符串数据。如果 DataSet 已经包含架构，就通过添加新表或者通过向现有的表中添加列来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间，或者如果推断的列中有一些与现有的列冲突，则会引发异常。

在设置 ReadXml 方法的 ReadMode 参数时，请使用此枚举的成员。

说明 说明

Auto 模式可能比将 XmlReadMode 设置为显式选项稍慢。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


XmlWriteMode 枚举

XmlWriteMode 枚举

指定如何从 DataSet 写入 XML 数据和关系架构。

命名空间： System.Data
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration XmlWriteMode
public enum XmlWriteMode
public enum class XmlWriteMode
type XmlWriteMode
 | 成员名称 | 说明
由 XNA Framework 提供支持 | WriteSchema | 以 XML 数据形式写入 DataSet 的当前内容，以关系结构作为内联 XSD 架构。如果 DataSet 只有架构而无数据，那么只写入内联架构。如果 DataSet 没有当前架构，则不写入任何内容。 以 XML 数据形式写入 DataSet 的当前内容，以关系结构作为内联 XSD 架构。如果 DataSet 只有架构而无数据，那么只写入内联架构。如果 DataSet 没有当前架构，则不写入任何内容。 以 XML 数据形式写入 DataSet 的当前内容，以关系结构作为内联 XSD 架构。如果 DataSet 只有架构而无数据，那么只写入内联架构。如果 DataSet 没有当前架构，则不写入任何内容。
由 XNA Framework 提供支持 | IgnoreSchema | 以 XML 数据形式写入 DataSet 的当前内容，不带 XSD 架构。如果无数据加载到 DataSet 中，则不写入任何内容。 以 XML 数据形式写入 DataSet 的当前内容，不带 XSD 架构。如果无数据加载到 DataSet 中，则不写入任何内容。
由 XNA Framework 提供支持 | DiffGram | 作为 DiffGram 写入整个 DataSet，包括原始值和当前值。若要生成只包含已更改的值的 DiffGram，请调用 GetChanges，然后在返回的 DataSet 上作为 DiffGram 调用 WriteXml。 作为 DiffGram 写入整个 DataSet，包括原始值和当前值。若要生成只包含已更改的值的 DiffGram，请调用 GetChanges，然后在返回的 DataSet 上作为 DiffGram 调用 WriteXml。

在设置 WriteXml 方法的 WriteMode 参数时，请使用此枚举的成员。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data 命名空间


System.Data.Common 命名空间

System.Data.Common 命名空间

System.Data.Common 命名空间包含由各种 .NET Framework 数据提供程序共享的类。

.NET Framework 数据提供程序描述用于在托管空间中访问数据源（如数据库）的类的集合。支持的提供程序包括用于 ODBC 的 .NET Framework 数据提供程序、用于 OLEDB 的 .NET Framework 数据提供程序、用于 Oracle 的 .NET Framework 数据提供程序以及用于 SQL Server 的 .NET Framework 数据提供程序。System.Data.Common 中的类旨在给开发人员提供一种方法以编写将作用于所有 .NET Framework 数据提供程序的 ADO.NET 代码。 .NET Framework 数据提供程序描述用于在托管空间中访问数据源（如数据库）的类的集合。支持的提供程序包括用于 ODBC 的 .NET Framework 数据提供程序、用于 OLEDB 的 .NET Framework 数据提供程序、用于 Oracle 的 .NET Framework 数据提供程序以及用于 SQL Server 的 .NET Framework 数据提供程序。System.Data.Common 中的类旨在给开发人员提供一种方法以编写将作用于所有 .NET Framework 数据提供程序的 ADO.NET 代码。 .NET Framework 数据提供程序描述用于在托管空间中访问数据源（如数据库）的类的集合。支持的提供程序包括用于 ODBC 的 .NET Framework 数据提供程序、用于 OLEDB 的 .NET Framework 数据提供程序、用于 Oracle 的 .NET Framework 数据提供程序以及用于 SQL Server 的 .NET Framework 数据提供程序。System.Data.Common 中的类旨在给开发人员提供一种方法以编写将作用于所有 .NET Framework 数据提供程序的 ADO.NET 代码。

有关在使用 .NET Framework 编程时如何使用该命名空间的概念性信息，请参见 Writing Provider Independent Code with ADO.NET。

 | 类 | 说明
公共类 | DataAdapter | 表示一组 SQL 命令和一个数据库连接，它们用于填充 DataSet 和更新数据源。
公共类 | DataColumnMapping | 包含从 DataAdapter 继承的对象的一般列映射。无法继承此类。 包含从 DataAdapter 继承的对象的一般列映射。无法继承此类。
公共类 | DataColumnMappingCollection | 包含 DataColumnMapping 对象的集合。
公共类 | DataRecordInfo | 提供对 DbDataRecord 的结构类型相关信息以及列信息的访问。
公共类 | DataTableMapping | 包含源表和 DataTable 之间的映射关系的说明。当填充 DataSet 时，DataAdapter 就会使用该类。 包含源表和 DataTable 之间的映射关系的说明。当填充 DataSet 时，DataAdapter 就会使用该类。
公共类 | DataTableMappingCollection | DataTableMapping 对象的集合。无法继承此类。 DataTableMapping 对象的集合。无法继承此类。
公共类 | DbCommand | 表示要对数据源执行的 SQL 语句或存储过程。为表示命令的、数据库特有的类提供一个基类。 表示要对数据源执行的 SQL 语句或存储过程。为表示命令的、数据库特有的类提供一个基类。
公共类 | DbCommandBuilder | 自动生成用于协调 DataSet 的更改与关联数据库的单表命令。这是一个只能被继承的抽象类。 自动生成用于协调 DataSet 的更改与关联数据库的单表命令。这是一个只能被继承的抽象类。
公共类 | DbCommandDefinition | 定义一个可缓存的命令计划。
公共类 | DbConnection | 表示到数据库的连接。
公共类 | DbConnectionStringBuilder | 为强类型连接字符串生成器提供基类。
公共类 | DbDataAdapter | 帮助实现 IDbDataAdapter 接口。DbDataAdapter 的继承者实现一组函数以提供强类型，但是继承了完全实现 DataAdapter 所需的大部分功能。 帮助实现 IDbDataAdapter 接口。DbDataAdapter 的继承者实现一组函数以提供强类型，但是继承了完全实现 DataAdapter 所需的大部分功能。
公共类 | DBDataPermission | 启用一个 .NET Framework 数据提供程序，以帮助确保用户具有足够的安全级别来访问数据。
公共类 | DBDataPermissionAttribute | 将某安全操作与自定义安全特性相关联。
公共类 | DbDataReader | 从数据源读取行的一个只进流。
公共类 | DbDataRecord | 实现 IDataRecord 和 ICustomTypeDescriptor，并为 DbEnumerator 提供数据绑定支持。
公共类 | DbDataSourceEnumerator | 提供了一种枚举本地网络内的所有可用数据库服务器实例的机制。
公共类 | DbEnumerator | 公开 GetEnumerator 方法，该方法支持 .NET Framework 数据提供程序对集合进行简单的迭代。
公共类 | DbException | 代表数据源引发的所有异常的基类。
公共类 | DbMetaDataCollectionNames | 提供已知的 MetaDataCollections 的常量列表：DataSourceInformation、DataTypes、MetaDataCollections、ReservedWords 和 Restrictions。
公共类 | DbMetaDataColumnNames | 提供静态值，这些值用于包含在 DataTable 中的 MetaDataCollection 对象中的列名称。DataTable 由 GetSchema 方法创建。 提供静态值，这些值用于包含在 DataTable 中的 MetaDataCollection 对象中的列名称。DataTable 由 GetSchema 方法创建。
公共类 | DbParameter | 表示 DbCommand 的参数，还可表示该参数到一个 DataSet 列的映射。
公共类 | DbParameterCollection | 与 DbCommand 相关的参数集合的基类。
公共类 | DbProviderConfigurationHandler | 基础结构。 任何提供程序都可使用此类以支持特定于提供程序的配置部分。
公共类 | DbProviderFactories | 表示一组静态方法，这些方法用于创建 DbProviderFactory 类的一个或多个实例。
公共类 | DbProviderFactoriesConfigurationHandler | 基础结构。 此类型支持 .NET Framework 基础结构，不应从代码直接使用。
公共类 | DbProviderFactory | 表示一组方法，这些方法用于创建提供程序对数据源类的实现的实例。
公共类 | DbProviderManifest | 表示所有 CLR 类型的元数据接口。
公共类 | DbProviderServices | 表示一组方法，这些方法用于创建正确的命令定义对象以及访问提供程序清单信息。
公共类 | DbProviderSpecificTypePropertyAttribute | 标识在设置提供程序特定的类型时，使用强类型参数类中的哪个提供程序特定的属性。
公共类 | DbTransaction | 事务的基类。
公共类 | DbXmlEnabledProviderManifest | 表示基于 XML 定义实现 DbProviderManifest 的基类。您可以使用 DbXmlEnabledProviderManifest 类在运行时获取特定于提供程序的信息。 表示基于 XML 定义实现 DbProviderManifest 的基类。您可以使用 DbXmlEnabledProviderManifest 类在运行时获取特定于提供程序的信息。
公共类 | EntityRecordInfo | 提供对实体元数据的访问。
公共类 | RowUpdatedEventArgs | 为 .NET Framework 数据提供程序的 RowUpdated 事件提供数据。
公共类 | RowUpdatingEventArgs | 为 .NET Framework 数据提供程序的 RowUpdating 事件提供数据。
公共类 | SchemaTableColumn | 描述数据库表的架构的列元数据。
公共类 | SchemaTableOptionalColumn | 描述数据库表的架构的可选列元数据。
 | 结构 | 说明
公共结构 | FieldMetadata | 提供对 DataRecordInfo 对象的字段元数据的访问。
 | 枚举 | 说明
公共枚举 | CatalogLocation | 指示目录名称在文本命令的限定表名中的位置。
公共枚举 | GroupByBehavior | 指定 GROUP BY 子句中的列与 SELECT 语句的选择列表中的非聚集列之间的关系。
公共枚举 | IdentifierCase | 指定在搜索系统目录时，数据源如何处理标识符。
公共枚举 | SupportedJoinOperators | 指定数据源支持何种类型的 Transact-SQL 联接语句。


CatalogLocation 枚举

CatalogLocation 枚举

指示目录名称在文本命令的限定表名中的位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration CatalogLocation
public enum CatalogLocation
public enum class CatalogLocation
type CatalogLocation
 | 成员名称 | 说明
由 XNA Framework 提供支持 | Start | 指示目录名称的位置位于文本命令的完全限定表名中的架构部分之前。 此字段的值和 End 字段的值是互相排斥的。
由 XNA Framework 提供支持 | End | 指示目录名称的位置位于文本命令的完全限定表名中的架构部分之后。 此字段的值和 Start 字段的值是互相排斥的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

System.Data.Common 命名空间


DataAdapter 类

DataAdapter 类
成员

表示一组 SQL 命令和一个数据库连接，它们用于填充 DataSet 和更新数据源。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Class DataAdapter _
    Inherits Component _
    Implements IDataAdapter
public class DataAdapter : Component,
    IDataAdapter
public ref class DataAdapter : public Component,
    IDataAdapter
type DataAdapter =
    class
        inherit Component
        interface IDataAdapter
    end

DataAdapter 用作 DataSet 和数据源之间的桥接器以便检索和保存数据。DataAdapter 通过映射 Fill（这更改了 DataSet 中的数据以便与数据源中的数据相匹配）和 Update（这更改了数据源中的数据以便与 DataSet 中的数据相匹配）来提供这一桥接器。 DataAdapter 用作 DataSet 和数据源之间的桥接器以便检索和保存数据。DataAdapter 通过映射 Fill（这更改了 DataSet 中的数据以便与数据源中的数据相匹配）和 Update（这更改了数据源中的数据以便与 DataSet 中的数据相匹配）来提供这一桥接器。

如果所连接的是 SQL Server 数据库，则可以通过将 SqlDataAdapter 与关联的 SqlCommand 和 SqlConnection 对象一起使用，从而提高总体性能。对于支持 OLE DB 的数据源，请使用 DataAdapter 及其关联的 OleDbCommand 和 OleDbConnection 对象。对于支持 ODBC 的数据源，请使用 DataAdapter 及其关联的 OdbcCommand 和 OdbcConnection 对象。对于 Oracle 数据库，请使用 DataAdapter 及其关联的 OracleCommand 和 OracleConnection 对象。 如果所连接的是 SQL Server 数据库，则可以通过将 SqlDataAdapter 与关联的 SqlCommand 和 SqlConnection 对象一起使用，从而提高总体性能。对于支持 OLE DB 的数据源，请使用 DataAdapter 及其关联的 OleDbCommand 和 OleDbConnection 对象。对于支持 ODBC 的数据源，请使用 DataAdapter 及其关联的 OdbcCommand 和 OdbcConnection 对象。对于 Oracle 数据库，请使用 DataAdapter 及其关联的 OracleCommand 和 OracleConnection 对象。 如果所连接的是 SQL Server 数据库，则可以通过将 SqlDataAdapter 与关联的 SqlCommand 和 SqlConnection 对象一起使用，从而提高总体性能。对于支持 OLE DB 的数据源，请使用 DataAdapter 及其关联的 OleDbCommand 和 OleDbConnection 对象。对于支持 ODBC 的数据源，请使用 DataAdapter 及其关联的 OdbcCommand 和 OdbcConnection 对象。对于 Oracle 数据库，请使用 DataAdapter 及其关联的 OracleCommand 和 OracleConnection 对象。 如果所连接的是 SQL Server 数据库，则可以通过将 SqlDataAdapter 与关联的 SqlCommand 和 SqlConnection 对象一起使用，从而提高总体性能。对于支持 OLE DB 的数据源，请使用 DataAdapter 及其关联的 OleDbCommand 和 OleDbConnection 对象。对于支持 ODBC 的数据源，请使用 DataAdapter 及其关联的 OdbcCommand 和 OdbcConnection 对象。对于 Oracle 数据库，请使用 DataAdapter 及其关联的 OracleCommand 和 OracleConnection 对象。

当创建 DataAdapter 的实例时，读/写属性将被设置为初始值。有关这些值的列表，请参见 DataAdapter 构造函数。 当创建 DataAdapter 的实例时，读/写属性将被设置为初始值。有关这些值的列表，请参见 DataAdapter 构造函数。

System.Data.Common System.Data.Common..::.DataAdapterDataAdapter

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 成员
System.Data.Common 命名空间


DataAdapter 成员

DataAdapter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAdapter 类

表示一组 SQL 命令和一个数据库连接，它们用于填充 DataSet 和更新数据源。

DataAdapter 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataAdapter 类
System.Data.Common 命名空间


DataAdapter 构造函数

DataAdapter 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAdapter 类

初始化 DataAdapter 类的新实例。

名称 说明
页首

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter 构造函数

DataAdapter 构造函数
DataAdapter 类

初始化 DataAdapter 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DataAdapter()
protected:
DataAdapter()
new : unit -> DataAdapter

当创建 DataAdapter 的实例时，下面的读/写属性将设置为以下初始值。

属性 | 初始值
MissingMappingAction | MissingMappingAction.Passthrough
MissingSchemaAction | MissingSchemaAction.Add
TableMappings | TableMappings 对象的数组。

可以通过单独调用属性来更改任何这些属性的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
DataAdapter 重载
System.Data.Common 命名空间


DataAdapter 构造函数 (DataAdapter)

DataAdapter 构造函数 (DataAdapter)
DataAdapter 类

从同一类型的现有对象中初始化 DataAdapter 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    from As DataAdapter _
)
protected DataAdapter(
    DataAdapter from
)
protected:
DataAdapter(
    DataAdapter^ from
)
new :
        from:DataAdapter -> DataAdapter

参数

from
类型： System.Data.Common DataAdapter
用于创建新 DataAdapter 的 DataAdapter 对象。

根据设计，DataAdapter 构造函数的重载供 .NET Framework 数据提供程序在克隆实现中使用类似构造函数时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
DataAdapter 重载
System.Data.Common 命名空间


DataAdapter 方法

DataAdapter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAdapter 类

DataAdapter 类型公开以下成员。

名称 说明
页首

参考

DataAdapter 类
System.Data.Common 命名空间


DataAdapter ..::.CloneInternals 方法

DataAdapter
.
.
::
.
CloneInternals 方法
DataAdapter 类

注意：此 API 现在已过时。

创建此 DataAdapter 实例的一个副本。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<ObsoleteAttribute("CloneInternals() has been deprecated.  Use the DataAdapter(DataAdapter from) constructor.  http://go.microsoft.com/fwlink/?linkid=14202")> _
<PermissionSetAttribute(SecurityAction.Demand, Name := "FullTrust")> _
Protected Overridable Function CloneInternals As DataAdapter
[ObsoleteAttribute("CloneInternals() has been deprecated.  Use the DataAdapter(DataAdapter from) constructor.  http://go.microsoft.com/fwlink/?linkid=14202")]
[PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]
protected virtual DataAdapter CloneInternals()
[ObsoleteAttribute(L"CloneInternals() has been deprecated.  Use the DataAdapter(DataAdapter from) constructor.  http://go.microsoft.com/fwlink/?linkid=14202")]
[PermissionSetAttribute(SecurityAction::Demand, Name = L"FullTrust")]
protected:
virtual DataAdapter^ CloneInternals()
[<ObsoleteAttribute("CloneInternals() has been deprecated.  Use the DataAdapter(DataAdapter from) constructor.  http://go.microsoft.com/fwlink/?linkid=14202")>]
[<PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")>]
abstract CloneInternals : unit -> DataAdapter
[<ObsoleteAttribute("CloneInternals() has been deprecated.  Use the DataAdapter(DataAdapter from) constructor.  http://go.microsoft.com/fwlink/?linkid=14202")>]
[<PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")>]
override CloneInternals : unit -> DataAdapter

返回值

类型： System.Data.Common DataAdapter
DataAdapter 的克隆实例。

此方法已被否决。应当使用 DataAdapter 构造函数，而不是此方法。 此方法已被否决。应当使用 DataAdapter 构造函数，而不是此方法。

全部命令：TableMappings、MissingSchemaAction 和 MissingMappingAction 均被克隆。但是，仅共享而不复制这些命令的连接。因此，克隆的 DataAdapter 可以像原始对象一样用于同一连接。 全部命令：TableMappings、MissingSchemaAction 和 MissingMappingAction 均被克隆。但是，仅共享而不复制这些命令的连接。因此，克隆的 DataAdapter 可以像原始对象一样用于同一连接。 全部命令：TableMappings、MissingSchemaAction 和 MissingMappingAction 均被克隆。但是，仅共享而不复制这些命令的连接。因此，克隆的 DataAdapter 可以像原始对象一样用于同一连接。

对继承者的说明

重写派生类中的 CloneInternals 时，确保调用基类的 CloneInternals 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.0
在 4 中过时（编译器警告）
在 3.5 中过时（编译器警告）
在 3.5 SP1 中过时（编译器警告）
在 3.0 中过时（编译器警告）
在 3.0 SP1 中过时（编译器警告）
在 3.0 SP2 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 2.0 SP1 中过时（编译器警告）
在 2.0 SP2 中过时（编译器警告）
在 1.1 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

XNA Framework

在 3.0 中过时（编译器警告）
在 2.0 中过时（编译器警告）
在 1.0 中过时（编译器警告）

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.CreateTableMappings 方法

DataAdapter
.
.
::
.
CreateTableMappings 方法
DataAdapter 类

创建一个新的 DataTableMappingCollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function CreateTableMappings As DataTableMappingCollection
protected virtual DataTableMappingCollection CreateTableMappings()
protected:
virtual DataTableMappingCollection^ CreateTableMappings()
abstract CreateTableMappings : unit -> DataTableMappingCollection
override CreateTableMappings : unit -> DataTableMappingCollection

返回值

类型： System.Data.Common DataTableMappingCollection
新的 DataTableMappingCollection。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.Dispose 方法

DataAdapter
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAdapter 类

名称 说明
页首

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.Dispose 方法 (Boolean)

DataAdapter
.
.
::
.
Dispose 方法 (Boolean)
DataAdapter 类

释放由 DataAdapter 占用的非托管资源，还可以另外再释放托管资源。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overrides Sub Dispose ( _
    disposing As Boolean _
)
protected override void Dispose(
    bool disposing
)
protected:
virtual void Dispose(
    bool disposing
) override
abstract Dispose :
        disposing:bool -> unit
override Dispose :
        disposing:bool -> unit

参数

disposing
类型： System Boolean
为 true 则释放托管资源和非托管资源；为 false 则仅释放非托管资源。

此方法由公共的 Dispose 方法和 Finalize 方法调用。Dispose 调用受保护的 Dispose(Boolean) 方法，将 disposing 参数设置为 true。Finalize 调用 disposing 设置为 false 的 Dispose。 此方法由公共的 Dispose 方法和 Finalize 方法调用。Dispose 调用受保护的 Dispose(Boolean) 方法，将 disposing 参数设置为 true。Finalize 调用 disposing 设置为 false 的 Dispose。 此方法由公共的 Dispose 方法和 Finalize 方法调用。Dispose 调用受保护的 Dispose(Boolean) 方法，将 disposing 参数设置为 true。Finalize 调用 disposing 设置为 false 的 Dispose。

disposing 参数为 true 时，此方法释放此 DataAdapter 引用的所有托管对象占用的所有资源。此方法调用每个被引用对象的 Dispose 方法。 disposing 参数为 true 时，此方法释放此 DataAdapter 引用的所有托管对象占用的所有资源。此方法调用每个被引用对象的 Dispose 方法。

对继承者的说明

Dispose 可由其他对象多次调用。重写 Dispose(Boolean) 时，请注意不要引用在以前调用 Dispose 时已释放的对象。有关如何实现 Dispose(Boolean) 的更多信息，请参见实现 Dispose 方法。 Dispose 可由其他对象多次调用。重写 Dispose(Boolean) 时，请注意不要引用在以前调用 Dispose 时已释放的对象。有关如何实现 Dispose(Boolean) 的更多信息，请参见实现 Dispose 方法。 Dispose 可由其他对象多次调用。重写 Dispose(Boolean) 时，请注意不要引用在以前调用 Dispose 时已释放的对象。有关如何实现 Dispose(Boolean) 的更多信息，请参见实现 Dispose 方法。

有关 Dispose 和 Finalize 的更多信息，请参见清理非托管资源和重写 Finalize 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
Dispose 重载
System.Data.Common 命名空间


DataAdapter ..::.Fill 方法

DataAdapter
.
.
::
.
Fill 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAdapter 类

在 DataSet 中添加或刷新行以与数据源中的行匹配。

名称 说明
页首

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.Fill 方法 (DataSet)

DataAdapter
.
.
::
.
Fill 方法 (DataSet)
DataAdapter 类

在 DataSet 中添加或刷新行以与数据源中的行匹配。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Fill ( _
    dataSet As DataSet _
) As Integer
public virtual int Fill(
    DataSet dataSet
)
public:
virtual int Fill(
    DataSet^ dataSet
)
abstract Fill :
        dataSet:DataSet -> int
override Fill :
        dataSet:DataSet -> int

参数

dataSet
类型： System.Data DataSet
要用记录和架构（如果必要）填充的 DataSet。

返回值

类型： System Int32
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

实现

Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。

如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见 定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见 定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见 定义主键 (ADO.NET)。

如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

当用于填充 DataSet 的 SELECT 语句（例如批处理 SQL 语句）返回多项结果时，如果其中一项结果包含错误，则将跳过所有后面的结果并且不将其添加到 DataSet 中。

您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
Fill 重载
System.Data.Common 命名空间
FillSchema


DataAdapter ..::.Fill 方法 (DataTable, IDataReader)

DataAdapter
.
.
::
.
Fill 方法 (DataTable, IDataReader)
DataAdapter 类

在 DataTable 中添加或刷新行以与使用 DataTable 名称和指定的 IDataReader 的数据源中的行匹配。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function Fill ( _
    dataTable As DataTable, _
    dataReader As IDataReader _
) As Integer
protected virtual int Fill(
    DataTable dataTable,
    IDataReader dataReader
)
protected:
virtual int Fill(
    DataTable^ dataTable,
    IDataReader^ dataReader
)
abstract Fill :
        dataTable:DataTable *
        dataReader:IDataReader -> int
override Fill :
        dataTable:DataTable *
        dataReader:IDataReader -> int

参数

dataTable
类型： System.Data DataTable
一个要用记录填充的 DataTable。
dataReader
类型： System.Data IDataReader
IDataReader 的一个实例。

返回值

类型： System Int32
已在 DataTable 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataTable 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

有关其他信息，请参见 System.Data.Common.DataAdapter.Fill(System.Data.DataSet) 备注。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
Fill 重载
System.Data.Common 命名空间


DataAdapter ..::.Fill 方法 ( array<DataTable >[]()[], IDataReader, Int32, Int32)

DataAdapter
.
.
::
.
Fill 方法 (
array<
DataTable
>
[]
()
[]
, IDataReader, Int32, Int32)
DataAdapter 类

在 DataTable 对象集合的指定范围中添加或刷新行以与数据源中的行匹配。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function Fill ( _
    dataTables As DataTable(), _
    dataReader As IDataReader, _
    startRecord As Integer, _
    maxRecords As Integer _
) As Integer
protected virtual int Fill(
    DataTable[] dataTables,
    IDataReader dataReader,
    int startRecord,
    int maxRecords
)
protected:
virtual int Fill(
    array<DataTable^>^ dataTables,
    IDataReader^ dataReader,
    int startRecord,
    int maxRecords
)
abstract Fill :
        dataTables:DataTable[] *
        dataReader:IDataReader *
        startRecord:int *
        maxRecords:int -> int
override Fill :
        dataTables:DataTable[] *
        dataReader:IDataReader *
        startRecord:int *
        maxRecords:int -> int

参数

dataTables
类型：
array<
System.Data DataTable
>
[]
()
[]

要用记录填充的 DataTable 对象的集合。
dataReader
类型： System.Data IDataReader
IDataReader 的一个实例。
startRecord
类型： System Int32
指示起始记录的位置的整数。
maxRecords
类型： System Int32
指示最大记录数的整数。

返回值

类型： System Int32
已在 DataTable 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataTable 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

有关其他信息，请参见 System.Data.Common.DataAdapter.Fill(System.Data.DataSet) 备注。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
Fill 重载
System.Data.Common 命名空间


DataAdapter ..::.Fill 方法 (DataSet, String, IDataReader, Int32, Int32)

DataAdapter
.
.
::
.
Fill 方法 (DataSet, String, IDataReader, Int32, Int32)
DataAdapter 类

在 DataSet 的指定范围中添加或刷新行以匹配使用 DataSet 和 DataTable 名称的数据源中的行。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function Fill ( _
    dataSet As DataSet, _
    srcTable As String, _
    dataReader As IDataReader, _
    startRecord As Integer, _
    maxRecords As Integer _
) As Integer
protected virtual int Fill(
    DataSet dataSet,
    string srcTable,
    IDataReader dataReader,
    int startRecord,
    int maxRecords
)
protected:
virtual int Fill(
    DataSet^ dataSet,
    String^ srcTable,
    IDataReader^ dataReader,
    int startRecord,
    int maxRecords
)
abstract Fill :
        dataSet:DataSet *
        srcTable:string *
        dataReader:IDataReader *
        startRecord:int *
        maxRecords:int -> int
override Fill :
        dataSet:DataSet *
        srcTable:string *
        dataReader:IDataReader *
        startRecord:int *
        maxRecords:int -> int

参数

dataSet
类型： System.Data DataSet
一个要用记录填充的 DataSet。
srcTable
类型： System String
一个字符串，指示源表的名称。
dataReader
类型： System.Data IDataReader
IDataReader 的一个实例。
startRecord
类型： System Int32
指示起始记录的位置的整数。
maxRecords
类型： System Int32
指示最大记录数的整数。

返回值

类型： System Int32
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

有关其他信息，请参见 System.Data.Common.DataAdapter.Fill(System.Data.DataSet) 备注。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
Fill 重载
System.Data.Common 命名空间


DataAdapter ..::.FillSchema 方法

DataAdapter
.
.
::
.
FillSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAdapter 类

向指定的 DataSet 添加一个 DataTable。

名称 说明
页首

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.FillSchema 方法 (DataSet, SchemaType)

DataAdapter
.
.
::
.
FillSchema 方法 (DataSet, SchemaType)
DataAdapter 类

将 DataTable 添加到指定的 DataSet 中，并根据指定的 SchemaType 配置架构以匹配数据源中的架构。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function FillSchema ( _
    dataSet As DataSet, _
    schemaType As SchemaType _
) As DataTable()
public virtual DataTable[] FillSchema(
    DataSet dataSet,
    SchemaType schemaType
)
public:
virtual array<DataTable^>^ FillSchema(
    DataSet^ dataSet,
    SchemaType schemaType
)
abstract FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType -> DataTable[]
override FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType -> DataTable[]

参数

dataSet
类型： System.Data DataSet
要用数据源中的架构填充的 DataSet。
schemaType
类型： System.Data SchemaType
SchemaType 值之一。

返回值

类型：
array<
System.Data DataTable
>
[]
()
[]

包含从数据源返回的架构信息的 DataTable 对象。

实现

FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。

FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性： FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性：

  • AllowDBNull

  • AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。 AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。

  • MaxLength

  • ReadOnly

  • Unique

FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性：

  • 如果 SelectCommand 返回一个或多个主键列，则它们被用作 DataTable 的主键列。

  • 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。

  • 如果既返回了主键列又返回了唯一列，则主键列用作 DataTable 的主键列。

说明 说明

基础数据存储区可能允许 DataColumn 中不支持的列特性，从而导致某些列特性无法正确转换。例如，SQL Server 2005 允许具有 tinyint 数据类型的标识列，而 DataColumn 只允许对 Int16、Int32 和 Int64 数据类型设置 AutoIncrement 属性。FillSchema 将忽略 DataColumn 无法精确镜像数据源的情况，不出现提示并且不会引发异常。 基础数据存储区可能允许 DataColumn 中不支持的列特性，从而导致某些列特性无法正确转换。例如，SQL Server 2005 允许具有 tinyint 数据类型的标识列，而 DataColumn 只允许对 Int16、Int32 和 Int64 数据类型设置 AutoIncrement 属性。FillSchema 将忽略 DataColumn 无法精确镜像数据源的情况，不出现提示并且不会引发异常。 基础数据存储区可能允许 DataColumn 中不支持的列特性，从而导致某些列特性无法正确转换。例如，SQL Server 2005 允许具有 tinyint 数据类型的标识列，而 DataColumn 只允许对 Int16、Int32 和 Int64 数据类型设置 AutoIncrement 属性。FillSchema 将忽略 DataColumn 无法精确镜像数据源的情况，不出现提示并且不会引发异常。

请注意，主键和唯一约束按照上述规则添加到 ConstraintCollection 中，但不添加其他约束类型。

如果对 SQL Server 表的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请在 SELECT 语句中使用指定主键索引名称的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请在 SELECT 语句中使用指定主键索引名称的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请在 SELECT 语句中使用指定主键索引名称的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。

如果 DataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

FillSchema 不返回任何行。使用 Fill 方法将行添加到 DataTable 中。 FillSchema 不返回任何行。使用 Fill 方法将行添加到 DataTable 中。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
FillSchema 重载
System.Data.Common 命名空间
Fill


DataAdapter ..::.FillSchema 方法 (DataTable, SchemaType, IDataReader)

DataAdapter
.
.
::
.
FillSchema 方法 (DataTable, SchemaType, IDataReader)
DataAdapter 类

向指定的 DataSet 添加一个 DataTable。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function FillSchema ( _
    dataTable As DataTable, _
    schemaType As SchemaType, _
    dataReader As IDataReader _
) As DataTable
protected virtual DataTable FillSchema(
    DataTable dataTable,
    SchemaType schemaType,
    IDataReader dataReader
)
protected:
virtual DataTable^ FillSchema(
    DataTable^ dataTable,
    SchemaType schemaType,
    IDataReader^ dataReader
)
abstract FillSchema :
        dataTable:DataTable *
        schemaType:SchemaType *
        dataReader:IDataReader -> DataTable
override FillSchema :
        dataTable:DataTable *
        schemaType:SchemaType *
        dataReader:IDataReader -> DataTable

参数

dataTable
类型： System.Data DataTable
要从 IDataReader 填充的 DataTable。
schemaType
类型： System.Data SchemaType
SchemaType 值之一。
dataReader
类型： System.Data IDataReader
填充 DataTable 时要用作数据源的 IDataReader。

返回值

类型： System.Data DataTable
包含从数据源返回的架构信息的 DataTable 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
FillSchema 重载
System.Data.Common 命名空间


DataAdapter ..::.FillSchema 方法 (DataSet, SchemaType, String, IDataReader)

DataAdapter
.
.
::
.
FillSchema 方法 (DataSet, SchemaType, String, IDataReader)
DataAdapter 类

向指定的 DataSet 添加一个 DataTable。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function FillSchema ( _
    dataSet As DataSet, _
    schemaType As SchemaType, _
    srcTable As String, _
    dataReader As IDataReader _
) As DataTable()
protected virtual DataTable[] FillSchema(
    DataSet dataSet,
    SchemaType schemaType,
    string srcTable,
    IDataReader dataReader
)
protected:
virtual array<DataTable^>^ FillSchema(
    DataSet^ dataSet,
    SchemaType schemaType,
    String^ srcTable,
    IDataReader^ dataReader
)
abstract FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType *
        srcTable:string *
        dataReader:IDataReader -> DataTable[]
override FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType *
        srcTable:string *
        dataReader:IDataReader -> DataTable[]

参数

dataSet
类型： System.Data DataSet
要从 IDataReader 填充的 DataTable。
schemaType
类型： System.Data SchemaType
SchemaType 值之一。
srcTable
类型： System String
用于表映射的源表的名称。
dataReader
类型： System.Data IDataReader
填充 DataTable 时要用作数据源的 IDataReader。

返回值

类型：
array<
System.Data DataTable
>
[]
()
[]

对添加到 DataSet 中的 DataTable 对象集合的引用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
FillSchema 重载
System.Data.Common 命名空间


DataAdapter ..::.GetFillParameters 方法

DataAdapter
.
.
::
.
GetFillParameters 方法
DataAdapter 类

获取当执行 SQL SELECT 语句时由用户设置的参数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function GetFillParameters As IDataParameter()
public virtual IDataParameter[] GetFillParameters()
public:
virtual array<IDataParameter^>^ GetFillParameters()
abstract GetFillParameters : unit -> IDataParameter[]
override GetFillParameters : unit -> IDataParameter[]

返回值

类型：
array<
System.Data IDataParameter
>
[]
()
[]

IDataParameter 对象的数组，这些对象包含由用户设置的参数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.HasTableMappings 方法

DataAdapter
.
.
::
.
HasTableMappings 方法
DataAdapter 类

指示是否已创建了一个 DataTableMappingCollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Function HasTableMappings As Boolean
protected bool HasTableMappings()
protected:
bool HasTableMappings()
member HasTableMappings : unit -> bool

返回值

类型： System Boolean
如果已创建 DataTableMappingCollection，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.MemberwiseClone 方法

DataAdapter
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAdapter 类

名称 说明
页首

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.OnFillError 方法

DataAdapter
.
.
::
.
OnFillError 方法
DataAdapter 类

当 Fill 过程中出现错误时调用。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnFillError ( _
    value As FillErrorEventArgs _
)
protected virtual void OnFillError(
    FillErrorEventArgs value
)
protected:
virtual void OnFillError(
    FillErrorEventArgs^ value
)
abstract OnFillError :
        value:FillErrorEventArgs -> unit
override OnFillError :
        value:FillErrorEventArgs -> unit

参数

value
类型： System.Data FillErrorEventArgs
一个 FillErrorEventArgs 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.ResetFillLoadOption 方法

DataAdapter
.
.
::
.
ResetFillLoadOption 方法
DataAdapter 类

将 FillLoadOption 重置为默认状态，并使 DataAdapter..::.Fill 接受 AcceptChangesDuringFill。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub ResetFillLoadOption
public void ResetFillLoadOption()
public:
void ResetFillLoadOption()
member ResetFillLoadOption : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.ShouldSerializeAcceptChangesDuringFill 方法

DataAdapter
.
.
::
.
ShouldSerializeAcceptChangesDuringFill 方法
DataAdapter 类

确定是否应保持 AcceptChangesDuringFill 属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function ShouldSerializeAcceptChangesDuringFill As Boolean
public virtual bool ShouldSerializeAcceptChangesDuringFill()
public:
virtual bool ShouldSerializeAcceptChangesDuringFill()
abstract ShouldSerializeAcceptChangesDuringFill : unit -> bool
override ShouldSerializeAcceptChangesDuringFill : unit -> bool

返回值

类型： System Boolean
如果保持 AcceptChangesDuringFill 属性，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.ShouldSerializeFillLoadOption 方法

DataAdapter
.
.
::
.
ShouldSerializeFillLoadOption 方法
DataAdapter 类

确定是否应保持 FillLoadOption 属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function ShouldSerializeFillLoadOption As Boolean
public virtual bool ShouldSerializeFillLoadOption()
public:
virtual bool ShouldSerializeFillLoadOption()
abstract ShouldSerializeFillLoadOption : unit -> bool
override ShouldSerializeFillLoadOption : unit -> bool

返回值

类型： System Boolean
如果保持 FillLoadOption 属性，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.ShouldSerializeTableMappings 方法

DataAdapter
.
.
::
.
ShouldSerializeTableMappings 方法
DataAdapter 类

确定一个或多个 DataTableMapping 对象是否存在，并且它们是否应该是持久的。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function ShouldSerializeTableMappings As Boolean
protected virtual bool ShouldSerializeTableMappings()
protected:
virtual bool ShouldSerializeTableMappings()
abstract ShouldSerializeTableMappings : unit -> bool
override ShouldSerializeTableMappings : unit -> bool

返回值

类型： System Boolean
如果存在一个或多个 DataTableMapping 对象，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.Update 方法

DataAdapter
.
.
::
.
Update 方法
DataAdapter 类

从名为“Table”的 DataTable 为指定的 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Update ( _
    dataSet As DataSet _
) As Integer
public virtual int Update(
    DataSet dataSet
)
public:
virtual int Update(
    DataSet^ dataSet
)
abstract Update :
        dataSet:DataSet -> int
override Update :
        dataSet:DataSet -> int

参数

dataSet
类型： System.Data DataSet
用于更新数据源的 DataSet。

返回值

类型： System Int32
DataSet 中成功更新的行数。

实现

异常 | 条件
InvalidOperationException | 源表无效。
DBConcurrencyException | 尝试执行 INSERT、UPDATE 或 DELETE 语句，但没有记录受到影响。

更新是逐行进行的。对于每个已插入、修改和删除的行，Update 方法会确定已对其执行的更改的类型（插入、更新或删除）。根据更改类型，执行 Insert、Update 或 Delete 命令模板将已修改的行传播给数据源。当应用程序调用 Update 方法时，DataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。 更新是逐行进行的。对于每个已插入、修改和删除的行，Update 方法会确定已对其执行的更改的类型（插入、更新或删除）。根据更改类型，执行 Insert、Update 或 Delete 命令模板将已修改的行传播给数据源。当应用程序调用 Update 方法时，DataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。 更新是逐行进行的。对于每个已插入、修改和删除的行，Update 方法会确定已对其执行的更改的类型（插入、更新或删除）。根据更改类型，执行 Insert、Update 或 Delete 命令模板将已修改的行传播给数据源。当应用程序调用 Update 方法时，DataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。 更新是逐行进行的。对于每个已插入、修改和删除的行，Update 方法会确定已对其执行的更改的类型（插入、更新或删除）。根据更改类型，执行 Insert、Update 或 Delete 命令模板将已修改的行传播给数据源。当应用程序调用 Update 方法时，DataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。 更新是逐行进行的。对于每个已插入、修改和删除的行，Update 方法会确定已对其执行的更改的类型（插入、更新或删除）。根据更改类型，执行 Insert、Update 或 Delete 命令模板将已修改的行传播给数据源。当应用程序调用 Update 方法时，DataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。

应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见 使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见 使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见 使用 DataAdapter 更新数据源 (ADO.NET)。

如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见 使用 CommandBuilder 生成命令 (ADO.NET)。

Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。

在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。 在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。

当使用 Update 时，执行的顺序如下：

  1. 将 DataRow 中的值移至参数值。

  2. 引发 OnRowUpdating 事件。

  3. 执行命令。

  4. 如果该命令设置为 FirstReturnedRecord，返回的第一项结果将放置在 DataRow 中。

  5. 如果存在输出参数，它们将被放在 DataRow 中。

  6. 引发 OnRowUpdated 事件。

  7. 调用 AcceptChanges。

与 DataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DataAdapter 引用，为当前行获取参数值。 与 DataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DataAdapter 引用，为当前行获取参数值。 与 DataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DataAdapter 引用，为当前行获取参数值。

SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。 SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。

枚举值 | 采取的操作
MissingMappingAction.Passthrough | 如果不存在任何映射，则使用 DataSet 中的源列名和表名。
MissingMappingAction.Ignore | 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。
MissingMappingAction.Error | 生成 SystemException。

SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。 SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。

.NET 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。 .NET 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。

调用 AcceptChanges 方法或 AcceptChanges 方法会提交 DataSet 或 DataTable 中的所有更改。如果在调用 Update 方法之前调用了这两个方法中的任何一个，则在调用 Update 方法时不会提交任何更改，除非在调用 AcceptChanges 或 AcceptChanges 之后又进行过更改。 调用 AcceptChanges 方法或 AcceptChanges 方法会提交 DataSet 或 DataTable 中的所有更改。如果在调用 Update 方法之前调用了这两个方法中的任何一个，则在调用 Update 方法时不会提交任何更改，除非在调用 AcceptChanges 或 AcceptChanges 之后又进行过更改。

说明 说明

如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。

对于使用 Update 传播给数据源的每一列，应向 InsertCommand、UpdateCommand 或 DeleteCommand 添加一个参数。该参数的 SourceColumn 属性将被设置为列的名称。此设置指示该参数值并非手动设置，而是获取自当前处理的行中的特定列。 对于使用 Update 传播给数据源的每一列，应向 InsertCommand、UpdateCommand 或 DeleteCommand 添加一个参数。该参数的 SourceColumn 属性将被设置为列的名称。此设置指示该参数值并非手动设置，而是获取自当前处理的行中的特定列。 对于使用 Update 传播给数据源的每一列，应向 InsertCommand、UpdateCommand 或 DeleteCommand 添加一个参数。该参数的 SourceColumn 属性将被设置为列的名称。此设置指示该参数值并非手动设置，而是获取自当前处理的行中的特定列。

下面的示例使用派生类 OleDbDataAdapter 来对数据源进行 Update。

Public Function CreateCommandAndUpdate( _
    ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Dim dataSet As DataSet = New DataSet

    Using connection As New OleDbConnection(connectionString)
        connection.Open()
        Dim adapter As New OleDbDataAdapter()

        adapter.SelectCommand = New OleDbCommand( _
            queryString, connection)

        Dim builder As OleDbCommandBuilder = _
            New OleDbCommandBuilder(adapter)

        adapter.Fill(dataSet)

        ' Code to modify the data in the DataSet here.

        ' Without the OleDbCommandBuilder this line would fail.
        builder.GetUpdateCommand()
        adapter.Update(dataSet)
    End Using
    Return dataSet
End Function

static private DataSet CreateCommandAndUpdate(
    string connectionString,
    string queryString)
{
    DataSet dataSet = new DataSet();

    using (OleDbConnection connection =
               new OleDbConnection(connectionString))
    {
        connection.Open();
        OleDbDataAdapter adapter =
            new OleDbDataAdapter();
        adapter.SelectCommand =
            new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder =
            new OleDbCommandBuilder(adapter);

        adapter.Fill(dataSet);

        // Code to modify data in the DataSet here.

        // Without the OleDbCommandBuilder, this line would fail.
        adapter.UpdateCommand = builder.GetUpdateCommand();
        adapter.Update(dataSet);
    }
    return dataSet;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter 属性

DataAdapter 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAdapter 类

DataAdapter 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataAdapter 类
System.Data.Common 命名空间


DataAdapter ..::.AcceptChangesDuringFill 属性

DataAdapter
.
.
::
.
AcceptChangesDuringFill 属性
DataAdapter 类

获取或设置一个值，该值指示在任何 Fill 操作过程中，在将 AcceptChanges 添加到 DataTable 之后是否在 DataRow 上调用它。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property AcceptChangesDuringFill As Boolean
    Get
    Set
public bool AcceptChangesDuringFill { get; set; }
public:
property bool AcceptChangesDuringFill {
    bool get ();
    void set (bool value);
}
member AcceptChangesDuringFill : bool with get, set

属性值

类型： System Boolean
如果在 DataRow 上调用 AcceptChanges，则为 true；否则为 false。默认值为 true。 如果在 DataRow 上调用 AcceptChanges，则为 true；否则为 false。默认值为 true。

如果为 false，则不调用 AcceptChanges，并将新添加的行作为插入的行处理。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.AcceptChangesDuringUpdate 属性

DataAdapter
.
.
::
.
AcceptChangesDuringUpdate 属性
DataAdapter 类

获取或设置在 Update 期间是否调用 AcceptChanges。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property AcceptChangesDuringUpdate As Boolean
    Get
    Set
public bool AcceptChangesDuringUpdate { get; set; }
public:
property bool AcceptChangesDuringUpdate {
    bool get ();
    void set (bool value);
}
member AcceptChangesDuringUpdate : bool with get, set

属性值

类型： System Boolean
如果在 Update 期间调用 AcceptChanges，则为 true；否则为 false。默认值为 true。 如果在 Update 期间调用 AcceptChanges，则为 true；否则为 false。默认值为 true。

调用 DataAdapter 的 Update 方法期间，数据库可以将数据作为输出参数或结果集返回的第一条记录发送回 ADO.NET 应用程序。ADO.NET 可以检索这些值，并对正在更新的 DataRow 中的对应列进行更新。默认情况下，ADO.NET 在更新后调用 DataRow 的 AcceptChanges 方法。但是，如果想要将更新的行合并回另一 DataTable，则可能要保留主键列的原始值。例如，对应于数据库中自动递增列（如标识列）的主键列可以包含由数据库分配的与 DataRow 中所分配的原始值不匹配的新值。默认情况下，更新后将隐式调用 AcceptChanges，行中的原始值（可能已成为 ADO.NET 分配的 AutoIncrement 值）将丢失。通过将 AcceptChangesDuringUpdate 属性设置为 false（即保留原始值），可以阻止 ADO.NET 在对某一行执行更新后调用 AcceptChanges，从而保留了 DataRow 中的原始值。 调用 DataAdapter 的 Update 方法期间，数据库可以将数据作为输出参数或结果集返回的第一条记录发送回 ADO.NET 应用程序。ADO.NET 可以检索这些值，并对正在更新的 DataRow 中的对应列进行更新。默认情况下，ADO.NET 在更新后调用 DataRow 的 AcceptChanges 方法。但是，如果想要将更新的行合并回另一 DataTable，则可能要保留主键列的原始值。例如，对应于数据库中自动递增列（如标识列）的主键列可以包含由数据库分配的与 DataRow 中所分配的原始值不匹配的新值。默认情况下，更新后将隐式调用 AcceptChanges，行中的原始值（可能已成为 ADO.NET 分配的 AutoIncrement 值）将丢失。通过将 AcceptChangesDuringUpdate 属性设置为 false（即保留原始值），可以阻止 ADO.NET 在对某一行执行更新后调用 AcceptChanges，从而保留了 DataRow 中的原始值。 调用 DataAdapter 的 Update 方法期间，数据库可以将数据作为输出参数或结果集返回的第一条记录发送回 ADO.NET 应用程序。ADO.NET 可以检索这些值，并对正在更新的 DataRow 中的对应列进行更新。默认情况下，ADO.NET 在更新后调用 DataRow 的 AcceptChanges 方法。但是，如果想要将更新的行合并回另一 DataTable，则可能要保留主键列的原始值。例如，对应于数据库中自动递增列（如标识列）的主键列可以包含由数据库分配的与 DataRow 中所分配的原始值不匹配的新值。默认情况下，更新后将隐式调用 AcceptChanges，行中的原始值（可能已成为 ADO.NET 分配的 AutoIncrement 值）将丢失。通过将 AcceptChangesDuringUpdate 属性设置为 false（即保留原始值），可以阻止 ADO.NET 在对某一行执行更新后调用 AcceptChanges，从而保留了 DataRow 中的原始值。 调用 DataAdapter 的 Update 方法期间，数据库可以将数据作为输出参数或结果集返回的第一条记录发送回 ADO.NET 应用程序。ADO.NET 可以检索这些值，并对正在更新的 DataRow 中的对应列进行更新。默认情况下，ADO.NET 在更新后调用 DataRow 的 AcceptChanges 方法。但是，如果想要将更新的行合并回另一 DataTable，则可能要保留主键列的原始值。例如，对应于数据库中自动递增列（如标识列）的主键列可以包含由数据库分配的与 DataRow 中所分配的原始值不匹配的新值。默认情况下，更新后将隐式调用 AcceptChanges，行中的原始值（可能已成为 ADO.NET 分配的 AutoIncrement 值）将丢失。通过将 AcceptChangesDuringUpdate 属性设置为 false（即保留原始值），可以阻止 ADO.NET 在对某一行执行更新后调用 AcceptChanges，从而保留了 DataRow 中的原始值。 调用 DataAdapter 的 Update 方法期间，数据库可以将数据作为输出参数或结果集返回的第一条记录发送回 ADO.NET 应用程序。ADO.NET 可以检索这些值，并对正在更新的 DataRow 中的对应列进行更新。默认情况下，ADO.NET 在更新后调用 DataRow 的 AcceptChanges 方法。但是，如果想要将更新的行合并回另一 DataTable，则可能要保留主键列的原始值。例如，对应于数据库中自动递增列（如标识列）的主键列可以包含由数据库分配的与 DataRow 中所分配的原始值不匹配的新值。默认情况下，更新后将隐式调用 AcceptChanges，行中的原始值（可能已成为 ADO.NET 分配的 AutoIncrement 值）将丢失。通过将 AcceptChangesDuringUpdate 属性设置为 false（即保留原始值），可以阻止 ADO.NET 在对某一行执行更新后调用 AcceptChanges，从而保留了 DataRow 中的原始值。 调用 DataAdapter 的 Update 方法期间，数据库可以将数据作为输出参数或结果集返回的第一条记录发送回 ADO.NET 应用程序。ADO.NET 可以检索这些值，并对正在更新的 DataRow 中的对应列进行更新。默认情况下，ADO.NET 在更新后调用 DataRow 的 AcceptChanges 方法。但是，如果想要将更新的行合并回另一 DataTable，则可能要保留主键列的原始值。例如，对应于数据库中自动递增列（如标识列）的主键列可以包含由数据库分配的与 DataRow 中所分配的原始值不匹配的新值。默认情况下，更新后将隐式调用 AcceptChanges，行中的原始值（可能已成为 ADO.NET 分配的 AutoIncrement 值）将丢失。通过将 AcceptChangesDuringUpdate 属性设置为 false（即保留原始值），可以阻止 ADO.NET 在对某一行执行更新后调用 AcceptChanges，从而保留了 DataRow 中的原始值。 调用 DataAdapter 的 Update 方法期间，数据库可以将数据作为输出参数或结果集返回的第一条记录发送回 ADO.NET 应用程序。ADO.NET 可以检索这些值，并对正在更新的 DataRow 中的对应列进行更新。默认情况下，ADO.NET 在更新后调用 DataRow 的 AcceptChanges 方法。但是，如果想要将更新的行合并回另一 DataTable，则可能要保留主键列的原始值。例如，对应于数据库中自动递增列（如标识列）的主键列可以包含由数据库分配的与 DataRow 中所分配的原始值不匹配的新值。默认情况下，更新后将隐式调用 AcceptChanges，行中的原始值（可能已成为 ADO.NET 分配的 AutoIncrement 值）将丢失。通过将 AcceptChangesDuringUpdate 属性设置为 false（即保留原始值），可以阻止 ADO.NET 在对某一行执行更新后调用 AcceptChanges，从而保留了 DataRow 中的原始值。

说明 说明

将 AcceptChangesDuringUpdate 属性设置为 false 适用于所有数据修改操作，而不仅仅是插入。如果要在同一次更新中编辑或删除行，并希望仅对插入操作取消调用 AcceptChanges，则使用 DataAdapter 的 RowUpdated 事件的事件处理程序，而不是将 AccceptChangesDuringUpdate 设置为 false。在事件处理程序中，可以检查 StatementType 以确定数据修改操作是否为插入，如果为 true，则将 RowUpdatedEventArgs 的 Status 属性设置为 SkipCurrentRow。有关更多信息和示例，请参见 检索标识或 Autonumber 值 (ADO.NET)。 将 AcceptChangesDuringUpdate 属性设置为 false 适用于所有数据修改操作，而不仅仅是插入。如果要在同一次更新中编辑或删除行，并希望仅对插入操作取消调用 AcceptChanges，则使用 DataAdapter 的 RowUpdated 事件的事件处理程序，而不是将 AccceptChangesDuringUpdate 设置为 false。在事件处理程序中，可以检查 StatementType 以确定数据修改操作是否为插入，如果为 true，则将 RowUpdatedEventArgs 的 Status 属性设置为 SkipCurrentRow。有关更多信息和示例，请参见 检索标识或 Autonumber 值 (ADO.NET)。 将 AcceptChangesDuringUpdate 属性设置为 false 适用于所有数据修改操作，而不仅仅是插入。如果要在同一次更新中编辑或删除行，并希望仅对插入操作取消调用 AcceptChanges，则使用 DataAdapter 的 RowUpdated 事件的事件处理程序，而不是将 AccceptChangesDuringUpdate 设置为 false。在事件处理程序中，可以检查 StatementType 以确定数据修改操作是否为插入，如果为 true，则将 RowUpdatedEventArgs 的 Status 属性设置为 SkipCurrentRow。有关更多信息和示例，请参见 检索标识或 Autonumber 值 (ADO.NET)。 将 AcceptChangesDuringUpdate 属性设置为 false 适用于所有数据修改操作，而不仅仅是插入。如果要在同一次更新中编辑或删除行，并希望仅对插入操作取消调用 AcceptChanges，则使用 DataAdapter 的 RowUpdated 事件的事件处理程序，而不是将 AccceptChangesDuringUpdate 设置为 false。在事件处理程序中，可以检查 StatementType 以确定数据修改操作是否为插入，如果为 true，则将 RowUpdatedEventArgs 的 Status 属性设置为 SkipCurrentRow。有关更多信息和示例，请参见 检索标识或 Autonumber 值 (ADO.NET)。

此示例演示从 DataTable 中提取已更改的行，以及使用 SqlDataAdapter 更新数据源和检索新的标识列值。通过将 SqlDataAdapter 的 AcceptChangesDuringUpdate 属性设置为 false 以保留自动递增的原始值，然后可以将新数据合并到原始 DataTable 中，即使新标识值与 DataTable 中自动递增的原始值不匹配也可这样操作。 此示例演示从 DataTable 中提取已更改的行，以及使用 SqlDataAdapter 更新数据源和检索新的标识列值。通过将 SqlDataAdapter 的 AcceptChangesDuringUpdate 属性设置为 false 以保留自动递增的原始值，然后可以将新数据合并到原始 DataTable 中，即使新标识值与 DataTable 中自动递增的原始值不匹配也可这样操作。

Private Sub MergeIdentityColumns(ByVal connectionString As String)

    Using connection As SqlConnection = New SqlConnection( _
       connectionString)

        ' Create the DataAdapter
        Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
          "SELECT ShipperID, CompanyName FROM dbo.Shippers", connection)

        ' Add the InsertCommand to retrieve new identity value.
        adapter.InsertCommand = New SqlCommand( _
            "INSERT INTO dbo.Shippers (CompanyName) " & _
            "VALUES (@CompanyName); " & _
            "SELECT ShipperID, CompanyName FROM dbo.Shippers " & _
            "WHERE ShipperID = SCOPE_IDENTITY();", _
            connection)

        ' Set AcceptChangesDuringUpdate to false.
        adapter.AcceptChangesDuringUpdate = False

        ' Add the parameter for the inserted value.
        adapter.InsertCommand.Parameters.Add( _
           New SqlParameter("@CompanyName", SqlDbType.NVarChar, 40, _
           "CompanyName"))
        adapter.InsertCommand.UpdatedRowSource = _
           UpdateRowSource.FirstReturnedRecord

        ' MissingSchemaAction adds any missing schema to
        ' the DataTable, including auto increment columns
        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey

        ' Fill a DataTable.
        Dim shipper As New DataTable
        adapter.Fill(shipper)

        ' Add a new shipper row.
        Dim newRow As DataRow = shipper.NewRow()
        newRow("CompanyName") = "New Shipper"
        shipper.Rows.Add(newRow)

        ' Add changed rows to a new DataTable. This
        ' DataTable will be used to update the data source.
        Dim dataChanges As DataTable = shipper.GetChanges()

        ' Update the data source with the modified records.
        adapter.Update(dataChanges)

        Console.WriteLine("Rows before merge.")
        Dim rowBefore As DataRow
        For Each rowBefore In shipper.Rows
            Console.WriteLine("{0}: {1}", rowBefore(0), rowBefore(1))
        Next

        ' Merge the two DataTables to get new values.
        shipper.Merge(dataChanges)

        ' Commit the changes.
        shipper.AcceptChanges()

        Console.WriteLine("Rows after merge.")
        Dim rowAfter As DataRow
        For Each rowAfter In shipper.Rows
            Console.WriteLine("{0}: {1}", rowAfter(0), rowAfter(1))
        Next
    End Using
End Sub

private static void MergeIdentityColumns(string connectionString)
{
    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        // Create the DataAdapter
        SqlDataAdapter adapter =
            new SqlDataAdapter(
            "SELECT ShipperID, CompanyName FROM dbo.Shippers",
            connection);

        //Add the InsertCommand to retrieve new identity value.
        adapter.InsertCommand = new SqlCommand(
            "INSERT INTO dbo.Shippers (CompanyName) " +
            "VALUES (@CompanyName); " +
            "SELECT ShipperID, CompanyName FROM dbo.Shippers " +
            "WHERE ShipperID = SCOPE_IDENTITY();", connection);

        // Set AcceptChangesDuringUpdate to false
        adapter.AcceptChangesDuringUpdate = false;

        // Add the parameter for the inserted value.
        adapter.InsertCommand.Parameters.Add(
           new SqlParameter("@CompanyName", SqlDbType.NVarChar, 40,
           "CompanyName"));
        adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.Both;

        // MissingSchemaAction adds any missing schema to
        // the DataTable, including auto increment columns
        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

        // Fill a DataTable.
        DataTable shipper = new DataTable();
        adapter.Fill(shipper);

        // Add a new shipper row.
        DataRow newRow = shipper.NewRow();
        newRow["CompanyName"] = "New Shipper";
        shipper.Rows.Add(newRow);

        // Add changed rows to a new DataTable. This
        // DataTable will be used to update the data source.
        DataTable dataChanges = shipper.GetChanges();

        adapter.Update(dataChanges);
        connection.Close();

        Console.WriteLine("Rows after merge.");
        foreach (DataRow rowBefore in shipper.Rows)
        {
            {
                Console.WriteLine("{0}: {1}", rowBefore[0], rowBefore[1]);
            }
        }

        // Merge the two DataTables to get new values.
        shipper.Merge(dataChanges);

        // Commit the changes.
        shipper.AcceptChanges();

        Console.WriteLine("Rows after merge.");
        foreach (DataRow rowAfter in shipper.Rows)
        {
            {
                Console.WriteLine("{0}: {1}", rowAfter[0], rowAfter[1]);
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间

其他资源

使用 DataAdapter 更新数据源 (ADO.NET)
合并数据集内容 (ADO.NET)
检索标识或 Autonumber 值 (ADO.NET)


DataAdapter ..::.ContinueUpdateOnError 属性

DataAdapter
.
.
::
.
ContinueUpdateOnError 属性
DataAdapter 类

获取或设置一个值，该值指定在行更新过程中遇到错误时是否生成异常。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property ContinueUpdateOnError As Boolean
    Get
    Set
public bool ContinueUpdateOnError { get; set; }
public:
property bool ContinueUpdateOnError {
    bool get ();
    void set (bool value);
}
member ContinueUpdateOnError : bool with get, set

属性值

类型： System Boolean
如果要继续更新而不生成异常，则为 true，否则为 false。默认值为 false。 如果要继续更新而不生成异常，则为 true，否则为 false。默认值为 false。

如果将 ContinueUpdateOnError 设置为 true，则在更新行过程中遇到错误时不引发异常。跳过该行的更新，并将错误信息置于出错行的 RowError 属性中。DataAdapter 继续更新后面的行。 如果将 ContinueUpdateOnError 设置为 true，则在更新行过程中遇到错误时不引发异常。跳过该行的更新，并将错误信息置于出错行的 RowError 属性中。DataAdapter 继续更新后面的行。 如果将 ContinueUpdateOnError 设置为 true，则在更新行过程中遇到错误时不引发异常。跳过该行的更新，并将错误信息置于出错行的 RowError 属性中。DataAdapter 继续更新后面的行。

如果将 ContinueUpdateOnError 设置为 false，在更新行的过程中遇到错误时就会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.FillLoadOption 属性

DataAdapter
.
.
::
.
FillLoadOption 属性
DataAdapter 类

获取或设置 LoadOption，后者确定适配器如何从 DbDataReader 中填充 DataTable。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property FillLoadOption As LoadOption
    Get
    Set
public LoadOption FillLoadOption { get; set; }
public:
property LoadOption FillLoadOption {
    LoadOption get ();
    void set (LoadOption value);
}
member FillLoadOption : LoadOption with get, set

属性值

类型： System.Data LoadOption
LoadOption 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间
LoadOption


DataAdapter ..::.IDataAdapter ..::.TableMappings 属性

DataAdapter
.
.
::
.
IDataAdapter
.
.
::
.
TableMappings 属性
DataAdapter 类

指示如何将源表映射到数据集表。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property TableMappings As ITableMappingCollection
    Implements IDataAdapter.TableMappings
    Get
ITableMappingCollection IDataAdapter.TableMappings { get; }
private:
virtual property ITableMappingCollection^ TableMappings {
    ITableMappingCollection^ get () sealed = IDataAdapter::TableMappings::get;
}
private abstract TableMappings : ITableMappingCollection
private override TableMappings : ITableMappingCollection

属性值

类型： System.Data ITableMappingCollection
一个集合，它提供返回记录和 DataSet 之间的主映射。默认值是一个空集合。 一个集合，它提供返回记录和 DataSet 之间的主映射。默认值是一个空集合。

实现

此成员是显式的接口成员实现。它只能在 DataAdapter 实例被强制转换为 IDataAdapter 接口时使用。 此成员是显式的接口成员实现。它只能在 DataAdapter 实例被强制转换为 IDataAdapter 接口时使用。

有关更多信息，请参见TableMappings。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.MissingMappingAction 属性

DataAdapter
.
.
::
.
MissingMappingAction 属性
DataAdapter 类

确定传入数据没有匹配的表或列时需要执行的操作。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property MissingMappingAction As MissingMappingAction
    Get
    Set
public MissingMappingAction MissingMappingAction { get; set; }
public:
virtual property MissingMappingAction MissingMappingAction {
    MissingMappingAction get () sealed;
    void set (MissingMappingAction value) sealed;
}
abstract MissingMappingAction : MissingMappingAction with get, set
override MissingMappingAction : MissingMappingAction with get, set

属性值

类型： System.Data MissingMappingAction
MissingMappingAction 值之一。默认值为 Passthrough。 MissingMappingAction 值之一。默认值为 Passthrough。

实现

异常 | 条件
ArgumentException | 设置的值不是 MissingMappingAction 值之一。

TableMappings 属性提供返回记录和 DataSet 之间的主映射。

下面的示例创建一个派生类 OleDbDataAdapter 并设置它的一些属性。

' Assumes a valid connection string to an Access database.
Private Sub CreateOleDbDataAdapter(ByVal connectionString As String)
    Dim adapter As New OleDbDataAdapter()
    adapter.SelectCommand = _
       New OleDbCommand("SELECT * FROM Categories ORDER BY CategoryID")
    adapter.SelectCommand.Connection = New OleDbConnection _
       (connectionString)
    adapter.MissingMappingAction = MissingMappingAction.Error
    adapter.MissingSchemaAction = MissingSchemaAction.Error
End Sub

// Assumes a valid connection string to an Access database.
static void CreateOleDbAdapter(string connectionString)
{
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    adapter.SelectCommand =
        new OleDbCommand("SELECT * FROM Categories ORDER BY CategoryID");
    adapter.SelectCommand.Connection =
        new OleDbConnection(connectionString);
    adapter.MissingMappingAction = MissingMappingAction.Error;
    adapter.MissingSchemaAction = MissingSchemaAction.Error;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间
MissingSchemaAction


DataAdapter ..::.MissingSchemaAction 属性

DataAdapter
.
.
::
.
MissingSchemaAction 属性
DataAdapter 类

确定现有 DataSet 架构与传入数据不匹配时需要执行的操作。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property MissingSchemaAction As MissingSchemaAction
    Get
    Set
public MissingSchemaAction MissingSchemaAction { get; set; }
public:
virtual property MissingSchemaAction MissingSchemaAction {
    MissingSchemaAction get () sealed;
    void set (MissingSchemaAction value) sealed;
}
abstract MissingSchemaAction : MissingSchemaAction with get, set
override MissingSchemaAction : MissingSchemaAction with get, set

属性值

类型： System.Data MissingSchemaAction
MissingSchemaAction 值之一。默认值为 Add。 MissingSchemaAction 值之一。默认值为 Add。

实现

异常 | 条件
ArgumentException | 设置的值不是 MissingSchemaAction 值之一。

下面的示例创建一个派生类 OleDbDataAdapter 并设置它的一些属性。

' Assumes a valid connection string to an Access database.
Private Sub CreateOleDbDataAdapter(ByVal connectionString As String)
    Dim adapter As New OleDbDataAdapter()
    adapter.SelectCommand = _
       New OleDbCommand("SELECT * FROM Categories ORDER BY CategoryID")
    adapter.SelectCommand.Connection = New OleDbConnection _
       (connectionString)
    adapter.MissingMappingAction = MissingMappingAction.Error
    adapter.MissingSchemaAction = MissingSchemaAction.Error
End Sub

// Assumes a valid connection string to an Access database.
static void CreateOleDbAdapter(string connectionString)
{
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    adapter.SelectCommand =
        new OleDbCommand("SELECT * FROM Categories ORDER BY CategoryID");
    adapter.SelectCommand.Connection =
        new OleDbConnection(connectionString);
    adapter.MissingMappingAction = MissingMappingAction.Error;
    adapter.MissingSchemaAction = MissingSchemaAction.Error;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间
MissingMappingAction


DataAdapter ..::.ReturnProviderSpecificTypes 属性

DataAdapter
.
.
::
.
ReturnProviderSpecificTypes 属性
DataAdapter 类

获取或设置 Fill 方法是应当返回提供程序特定的值，还是返回公用的符合 CLS 的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property ReturnProviderSpecificTypes As Boolean
    Get
    Set
public virtual bool ReturnProviderSpecificTypes { get; set; }
public:
virtual property bool ReturnProviderSpecificTypes {
    bool get ();
    void set (bool value);
}
abstract ReturnProviderSpecificTypes : bool with get, set
override ReturnProviderSpecificTypes : bool with get, set

属性值

类型： System Boolean
如果 Fill 方法应返回特定于提供程序的值，则为 true；否则如果返回常用的符合 CLS 的值，则为 false。

默认值为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter ..::.TableMappings 属性

DataAdapter
.
.
::
.
TableMappings 属性
DataAdapter 类

获取一个集合，它提供源表和 DataTable 之间的主映射。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property TableMappings As DataTableMappingCollection
    Get
public DataTableMappingCollection TableMappings { get; }
public:
property DataTableMappingCollection^ TableMappings {
    DataTableMappingCollection^ get ();
}
member TableMappings : DataTableMappingCollection

属性值

类型： System.Data.Common DataTableMappingCollection
一个集合，它提供返回记录和 DataSet 之间的主映射。默认值是一个空集合。 一个集合，它提供返回记录和 DataSet 之间的主映射。默认值是一个空集合。

当协调更改时，DataAdapter 使用 DataTableMappingCollection 集合将数据源使用的列名与 DataSet 使用的列名关联起来。

下面的示例使用派生类 OleDbDataAdapter 将 DataTableMapping 对象添加到其 TableMappings 集合，并显示那些已映射源表的列表。此示例假定已经创建了 OleDbDataAdapter。 下面的示例使用派生类 OleDbDataAdapter 将 DataTableMapping 对象添加到其 TableMappings 集合，并显示那些已映射源表的列表。此示例假定已经创建了 OleDbDataAdapter。

Public Sub ShowTableMappings()
    ' ...
    ' create myDataAdapter
    ' ...
    myDataAdapter.TableMappings.Add("Categories", "DataCategories")
    myDataAdapter.TableMappings.Add("Orders", "DataOrders")
    myDataAdapter.TableMappings.Add("Products", "DataProducts")
    Dim myMessage As String = "Table Mappings:" + ControlChars.Cr
    Dim i As Integer
    For i = 0 To myDataAdapter.TableMappings.Count - 1
        myMessage += i.ToString() + " " _
           + myDataAdapter.TableMappings(i).ToString() + ControlChars.Cr
    Next i
    MessageBox.Show(myMessage)
End Sub

public void ShowTableMappings() {
   // ...
   // create myDataAdapter
   // ...
   myDataAdapter.TableMappings.Add("Categories","DataCategories");
   myDataAdapter.TableMappings.Add("Orders","DataOrders");
   myDataAdapter.TableMappings.Add("Products","DataProducts");
   string myMessage = "Table Mappings:\n";
   for(int i=0;i < myDataAdapter.TableMappings.Count;i++) {
      myMessage += i.ToString() + " "
         + myDataAdapter.TableMappings[i].ToString() + "\n";
   }
   MessageBox.Show(myMessage);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataAdapter 事件

DataAdapter 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAdapter 类

DataAdapter 类型公开以下成员。

名称 说明
页首

参考

DataAdapter 类
System.Data.Common 命名空间


DataAdapter ..::.FillError 事件

DataAdapter
.
.
::
.
FillError 事件
DataAdapter 类

在填充操作过程中出现错误时返回。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Event FillError As FillErrorEventHandler
public event FillErrorEventHandler FillError
public:
 event FillErrorEventHandler^ FillError {
    void add (FillErrorEventHandler^ value);
    void remove (FillErrorEventHandler^ value);
}
member FillError : IEvent<FillErrorEventHandler,
    FillErrorEventArgs>

FillError 事件允许用户确定出现错误后是否应继续执行填充操作。可能发生 FillError 事件的示例有： FillError 事件允许用户确定出现错误后是否应继续执行填充操作。可能发生 FillError 事件的示例有：

  • 在不丢失精度的情况下，正在添加到 DataSet 的数据无法转换为公共语言运行时类型。

  • 添加的行中包含违反约束的数据，该约束必须实施于 DataSet 中的 DataColumn。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataAdapter 类
DataAdapter 成员
System.Data.Common 命名空间


DataColumnMapping 类

DataColumnMapping 类
成员

包含从 DataAdapter 继承的对象的一般列映射。无法继承此类。 包含从 DataAdapter 继承的对象的一般列映射。无法继承此类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DataColumnMapping _
    Inherits MarshalByRefObject _
    Implements IColumnMapping, ICloneable
public sealed class DataColumnMapping : MarshalByRefObject,
    IColumnMapping, ICloneable
public ref class DataColumnMapping sealed : public MarshalByRefObject,
    IColumnMapping, ICloneable
[<SealedAttribute>]
type DataColumnMapping =
    class
        inherit MarshalByRefObject
        interface IColumnMapping
        interface ICloneable
    end

DataColumnMapping 允许在 DataTable 和数据源中使用不同的列名。当 DataSet 或数据源中的表更新时，DataAdapter 使用该映射匹配列。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。 DataColumnMapping 允许在 DataTable 和数据源中使用不同的列名。当 DataSet 或数据源中的表更新时，DataAdapter 使用该映射匹配列。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。 DataColumnMapping 允许在 DataTable 和数据源中使用不同的列名。当 DataSet 或数据源中的表更新时，DataAdapter 使用该映射匹配列。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。

下面的示例创建一个 DataColumnMapping 对象并将其添加到 DataColumnMappingCollection 中。然后，它通知用户已将映射添加到集合中，并显示该映射的父级。 下面的示例创建一个 DataColumnMapping 对象并将其添加到 DataColumnMappingCollection 中。然后，它通知用户已将映射添加到集合中，并显示该映射的父级。

Public Sub AddDataColumnMapping()
    ' ...
    ' create columnMappings
    ' ...
    Dim mapping As New DataColumnMapping( _
       "Description", "DataDescription")
    columnMappings.Add(CType(mapping, Object))
    Console.WriteLine("Column {0} added to column mapping collection {1}.", _
       mapping.ToString(), columnMappings.ToString())
End Sub

public void AddDataColumnMapping() {
   // ...
   // create columnMappings
   // ...
   DataColumnMapping mapping =
      new DataColumnMapping("Description","DataDescription");
   columnMappings.Add((Object) mapping);
   Console.WriteLine("Column {0} added to column mapping collection {1}.",
       mapping.ToString(), columnMappings.ToString());
}

System.Data.Common System.Data.Common..::.DataColumnMappingDataColumnMapping
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMapping 成员
System.Data.Common 命名空间


DataColumnMapping 成员

DataColumnMapping 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMapping 类

包含从 DataAdapter 继承的对象的一般列映射。无法继承此类。 包含从 DataAdapter 继承的对象的一般列映射。无法继承此类。

DataColumnMapping 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataColumnMapping 类
System.Data.Common 命名空间


DataColumnMapping 构造函数

DataColumnMapping 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMapping 类

初始化 DataColumnMapping 类的新实例。

名称 说明
页首

参考

DataColumnMapping 类
DataColumnMapping 成员
System.Data.Common 命名空间


DataColumnMapping 构造函数

DataColumnMapping 构造函数
DataColumnMapping 类

初始化 DataColumnMapping 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataColumnMapping()
public:
DataColumnMapping()
new : unit -> DataColumnMapping

下面的示例创建一个 DataColumnMapping 对象，设置其属性，然后克隆它。

Public Sub CreateDataColumnMapping()
    Dim mapping As New DataColumnMapping()
    mapping.SourceColumn = "Description"
    mapping.DataSetColumn = "DataDescription"
End Sub

public void CreateDataColumnMapping()
{
    DataColumnMapping mapping = new DataColumnMapping();
    mapping.SourceColumn = "Description";
    mapping.DataSetColumn = "DataDescription";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMapping 类
DataColumnMapping 成员
DataColumnMapping 重载
System.Data.Common 命名空间


DataColumnMapping 构造函数 (String, String)

DataColumnMapping 构造函数 (String, String)
DataColumnMapping 类

使用指定的源列名称和要映射到的 DataSet 列名初始化 DataColumnMapping 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    sourceColumn As String, _
    dataSetColumn As String _
)
public DataColumnMapping(
    string sourceColumn,
    string dataSetColumn
)
public:
DataColumnMapping(
    String^ sourceColumn,
    String^ dataSetColumn
)
new :
        sourceColumn:string *
        dataSetColumn:string -> DataColumnMapping

参数

sourceColumn
类型： System String
数据源中区分大小写的列名。
dataSetColumn
类型： System String
DataSet 中要映射到的列名（该名称不区分大小写）。

下面的示例创建一个 DataColumnMapping 对象，设置其属性，然后克隆它。

Public Sub CreateDataColumnMapping()
    Dim mapping As New DataColumnMapping( _
       "Description", "DataDescription")
End Sub

public void CreateDataColumnMapping()
{
    DataColumnMapping mapping =
        new DataColumnMapping("Description","DataDescription");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMapping 类
DataColumnMapping 成员
DataColumnMapping 重载
System.Data.Common 命名空间


DataColumnMapping 方法

DataColumnMapping 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMapping 类

DataColumnMapping 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataColumnMapping 类
System.Data.Common 命名空间


DataColumnMapping ..::.GetDataColumnBySchemaAction 方法

DataColumnMapping
.
.
::
.
GetDataColumnBySchemaAction 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMapping 类

从给定的 DataTable 中获取 DataColumn。

名称 说明
页首

参考

DataColumnMapping 类
DataColumnMapping 成员
System.Data.Common 命名空间


DataColumnMapping ..::.GetDataColumnBySchemaAction 方法 (DataTable, Type, MissingSchemaAction)

DataColumnMapping
.
.
::
.
GetDataColumnBySchemaAction 方法 (DataTable, Type, MissingSchemaAction)
DataColumnMapping 类

使用 MissingSchemaAction 和 DataSetColumn 属性从给定的 DataTable 获取 DataColumn。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetDataColumnBySchemaAction ( _
    dataTable As DataTable, _
    dataType As Type, _
    schemaAction As MissingSchemaAction _
) As DataColumn
public DataColumn GetDataColumnBySchemaAction(
    DataTable dataTable,
    Type dataType,
    MissingSchemaAction schemaAction
)
public:
DataColumn^ GetDataColumnBySchemaAction(
    DataTable^ dataTable,
    Type^ dataType,
    MissingSchemaAction schemaAction
)
member GetDataColumnBySchemaAction :
        dataTable:DataTable *
        dataType:Type *
        schemaAction:MissingSchemaAction -> DataColumn

参数

dataTable
类型： System.Data DataTable
从中获取列的 DataTable。
dataType
类型： System Type
数据列的 Type。
schemaAction
类型： System.Data MissingSchemaAction
MissingSchemaAction 值之一。

返回值

类型： System.Data DataColumn
DataColumn。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMapping 类
DataColumnMapping 成员
GetDataColumnBySchemaAction 重载
System.Data.Common 命名空间


DataColumnMapping ..::.GetDataColumnBySchemaAction 方法 (String, String, DataTable, Type, MissingSchemaAction)

DataColumnMapping
.
.
::
.
GetDataColumnBySchemaAction 方法 (String, String, DataTable, Type, MissingSchemaAction)
DataColumnMapping 类

GetDataColumnBySchemaAction 的静态版本，可以在不实例化 DataColumnMapping 对象的情况下调用。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GetDataColumnBySchemaAction ( _
    sourceColumn As String, _
    dataSetColumn As String, _
    dataTable As DataTable, _
    dataType As Type, _
    schemaAction As MissingSchemaAction _
) As DataColumn
public static DataColumn GetDataColumnBySchemaAction(
    string sourceColumn,
    string dataSetColumn,
    DataTable dataTable,
    Type dataType,
    MissingSchemaAction schemaAction
)
public:
static DataColumn^ GetDataColumnBySchemaAction(
    String^ sourceColumn,
    String^ dataSetColumn,
    DataTable^ dataTable,
    Type^ dataType,
    MissingSchemaAction schemaAction
)
static member GetDataColumnBySchemaAction :
        sourceColumn:string *
        dataSetColumn:string *
        dataTable:DataTable *
        dataType:Type *
        schemaAction:MissingSchemaAction -> DataColumn

参数

sourceColumn
类型： System String
数据源中区分大小写的列名。
dataSetColumn
类型： System String
DataSet 中要映射到的列名（该名称不区分大小写）。
dataTable
类型： System.Data DataTable
DataTable 的一个实例。
dataType
类型： System Type
正被映射的列的数据类型。
schemaAction
类型： System.Data MissingSchemaAction
确定现有 DataSet 架构与传入数据不匹配时需要执行的操作。

返回值

类型： System.Data DataColumn
一个 DataColumn 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMapping 类
DataColumnMapping 成员
GetDataColumnBySchemaAction 重载
System.Data.Common 命名空间


DataColumnMapping ..::.ICloneable ..::.Clone 方法

DataColumnMapping
.
.
::
.
ICloneable
.
.
::
.
Clone 方法
DataColumnMapping 类

创建作为当前实例副本的新对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function Clone As Object Implements ICloneable.Clone
Object ICloneable.Clone()
private:
virtual Object^ Clone() sealed = ICloneable::Clone
private abstract Clone : unit -> Object
private override Clone : unit -> Object

返回值

类型： System Object
当前对象的副本。

实现

此成员是显式的接口成员实现。它只能在 SqlCommand 实例被强制转换为 ICloneable 接口时使用。 此成员是显式的接口成员实现。它只能在 SqlCommand 实例被强制转换为 ICloneable 接口时使用。

有关更多信息，请参见 Clone。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMapping 类
DataColumnMapping 成员
System.Data.Common 命名空间


DataColumnMapping ..::.MemberwiseClone 方法

DataColumnMapping
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMapping 类

名称 说明
页首

参考

DataColumnMapping 类
DataColumnMapping 成员
System.Data.Common 命名空间


DataColumnMapping ..::.ToString 方法

DataColumnMapping
.
.
::
.
ToString 方法
DataColumnMapping 类

将当前的 SourceColumn 名称转换为字符串。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前的 SourceColumn 名称作为字符串。

下面的示例创建一个 DataColumnMapping 对象并将其添加到 DataColumnMappingCollection 集合中。然后，它通知用户已将映射添加到集合中，并显示该映射的父级。 下面的示例创建一个 DataColumnMapping 对象并将其添加到 DataColumnMappingCollection 集合中。然后，它通知用户已将映射添加到集合中，并显示该映射的父级。

Public Sub AddDataColumnMapping()
    ' ...
    ' create columnMappings
    ' ...
    Dim mapping As New DataColumnMapping( _
       "Description", "DataDescription")
    columnMappings.Add(CType(mapping, Object))
    Console.WriteLine("Column {0} added to column mapping collection {1}.", _
       mapping.ToString(), columnMappings.ToString())
End Sub

public void AddDataColumnMapping() {
   // ...
   // create columnMappings
   // ...
   DataColumnMapping mapping =
      new DataColumnMapping("Description","DataDescription");
   columnMappings.Add((Object) mapping);
   Console.WriteLine("Column {0} added to column mapping collection {1}.",
       mapping.ToString(), columnMappings.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMapping 类
DataColumnMapping 成员
System.Data.Common 命名空间


DataColumnMapping 属性

DataColumnMapping 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMapping 类

DataColumnMapping 类型公开以下成员。

名称 说明
页首

参考

DataColumnMapping 类
System.Data.Common 命名空间


DataColumnMapping ..::.DataSetColumn 属性

DataColumnMapping
.
.
::
.
DataSetColumn 属性
DataColumnMapping 类

获取或设置 DataSet 中要映射到的列的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property DataSetColumn As String
    Get
    Set
public string DataSetColumn { get; set; }
public:
virtual property String^ DataSetColumn {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract DataSetColumn : string with get, set
override DataSetColumn : string with get, set

属性值

类型： System String
DataSet 中要映射到的列的名称。该名称不区分大小写。 DataSet 中要映射到的列的名称。该名称不区分大小写。

实现

下面的示例创建一个 DataColumnMapping 对象并设置其属性。

Public Sub CreateDataColumnMapping()
    Dim mapping As New DataColumnMapping()
    mapping.SourceColumn = "Description"
    mapping.DataSetColumn = "DataDescription"
End Sub

public void CreateDataColumnMapping()
{
    DataColumnMapping mapping = new DataColumnMapping();
    mapping.SourceColumn = "Description";
    mapping.DataSetColumn = "DataDescription";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMapping 类
DataColumnMapping 成员
System.Data.Common 命名空间


DataColumnMapping ..::.SourceColumn 属性

DataColumnMapping
.
.
::
.
SourceColumn 属性
DataColumnMapping 类

获取或设置数据源中从其映射的列的名称。该名称区分大小写。 获取或设置数据源中从其映射的列的名称。该名称区分大小写。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property SourceColumn As String
    Get
    Set
public string SourceColumn { get; set; }
public:
virtual property String^ SourceColumn {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract SourceColumn : string with get, set
override SourceColumn : string with get, set

属性值

类型： System String
数据源中列的区分大小写的名称。

实现

下面的示例创建一个 DataColumnMapping 对象并设置其属性。

Public Sub CreateDataColumnMapping()
    Dim mapping As New DataColumnMapping()
    mapping.SourceColumn = "Description"
    mapping.DataSetColumn = "DataDescription"
End Sub

public void CreateDataColumnMapping()
{
    DataColumnMapping mapping = new DataColumnMapping();
    mapping.SourceColumn = "Description";
    mapping.DataSetColumn = "DataDescription";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMapping 类
DataColumnMapping 成员
System.Data.Common 命名空间


DataColumnMappingCollection 类

DataColumnMappingCollection 类
成员

包含 DataColumnMapping 对象的集合。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DataColumnMappingCollection _
    Inherits MarshalByRefObject _
    Implements IColumnMappingCollection, IList, ICollection, IEnumerable
public sealed class DataColumnMappingCollection : MarshalByRefObject,
    IColumnMappingCollection, IList, ICollection, IEnumerable
public ref class DataColumnMappingCollection sealed : public MarshalByRefObject,
    IColumnMappingCollection, IList, ICollection, IEnumerable
[<SealedAttribute>]
type DataColumnMappingCollection =
    class
        inherit MarshalByRefObject
        interface IColumnMappingCollection
        interface IList
        interface ICollection
        interface IEnumerable
    end

下面的示例使用 DataTableMapping 将多个 DataColumnMapping 对象 Add（添加）到其 ColumnMappings 集合中，然后显示那些已映射源列的列表。此示例假定已经创建了 DataTableMapping。 下面的示例使用 DataTableMapping 将多个 DataColumnMapping 对象 Add（添加）到其 ColumnMappings 集合中，然后显示那些已映射源列的列表。此示例假定已经创建了 DataTableMapping。

Public Sub ShowColumnMappings()
    ' ...
    ' create tableMapping
    ' ...
    tableMapping.ColumnMappings.Add( _
       "Category Name", "DataCategory")
    tableMapping.ColumnMappings.Add( _
       "Description", "DataDescription")
    tableMapping.ColumnMappings.Add( _
       "Picture", "DataPicture")
    Console.WriteLine("Column Mappings:")
    Dim i As Integer
    For i = 0 To tableMapping.ColumnMappings.Count - 1
        Console.WriteLine("  {0} {1}", i, _
           tableMapping.ColumnMappings(i).ToString())
    Next i
End Sub

public void ShowColumnMappings()
{
    // ...
    // create tableMapping
    // ...
    tableMapping.ColumnMappings.Add("Category Name","DataCategory");
    tableMapping.ColumnMappings.Add("Description","DataDescription");
    tableMapping.ColumnMappings.Add("Picture","DataPicture");
    Console.WriteLine("Column Mappings");
    for(int i=0;i < tableMapping.ColumnMappings.Count;i++)
    {
        Console.WriteLine("  {0} {1}", i,
            tableMapping.ColumnMappings[i].ToString());
    }
}

System.Data.Common System.Data.Common..::.DataColumnMappingCollectionDataColumnMappingCollection
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection 成员

DataColumnMappingCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

包含 DataColumnMapping 对象的集合。

DataColumnMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataColumnMappingCollection 类
System.Data.Common 命名空间


DataColumnMappingCollection 构造函数

DataColumnMappingCollection 构造函数
DataColumnMappingCollection 类

创建一个空的 DataColumnMappingCollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataColumnMappingCollection()
public:
DataColumnMappingCollection()
new : unit -> DataColumnMappingCollection

下面的示例创建一个 DataColumnMappingCollection 集合，将 DataColumnMapping 对象添加到该集合，并显示已映射源列的列表。

Public Sub CreateColumnMappings()
    Dim mappings As New DataColumnMappingCollection()
    mappings.Add("Category Name", "DataCategory")
    mappings.Add("Description", "DataDescription")
    mappings.Add("Picture", "DataPicture")
    Dim myMessage As String = "ColumnMappings:" + ControlChars.Cr
    Dim i As Integer
    For i = 0 To mappings.Count - 1
        myMessage += i.ToString() + " " + mappings(i).ToString() _
           + ControlChars.Cr
    Next i
    Console.WriteLine(myMessage)
End Sub

public void CreateColumnMappings()
{
    DataColumnMappingCollection mappings =
        new DataColumnMappingCollection();
    mappings.Add("Category Name","DataCategory");
    mappings.Add("Description","DataDescription");
    mappings.Add("Picture","DataPicture");
    string myMessage = "ColumnMappings:\n";
    for(int i=0;i < mappings.Count;i++)
    {
        myMessage += i.ToString() + " "
            + mappings[i].ToString() + "\n";
    }
    Console.WriteLine(myMessage);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection 方法

DataColumnMappingCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

DataColumnMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataColumnMappingCollection 类
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Add 方法

DataColumnMappingCollection
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

将 DataColumnMapping 对象添加到集合中。

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Add 方法 (Object)

DataColumnMappingCollection
.
.
::
.
Add 方法 (Object)
DataColumnMappingCollection 类

将 DataColumnMapping 对象添加到集合中。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    value As Object _
) As Integer
public int Add(
    Object value
)
public:
virtual int Add(
    Object^ value
) sealed
abstract Add :
        value:Object -> int
override Add :
        value:Object -> int

参数

value
类型： System Object
要添加到集合中的 DataColumnMapping 对象。

返回值

类型： System Int32
已添加到集合中的 DataColumnMapping 对象的索引。

实现

异常 | 条件
InvalidCastException | 传入的对象不是 DataColumnMapping 对象。

下面的示例在集合中搜索 DataColumnMapping 对象。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping 对象。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping 对象。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping 对象。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。

Public Sub ChangedMyMind()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains(CType(mapping, Object)) Then
        mappings.Remove(CType(mapping, Object))
    Else
        mappings.Add(CType(mapping, Object))
        Console.WriteLine("Index of new mapping: " + _
           mappings.IndexOf(CType(mapping, Object)).ToString())
    End If
End Sub

public void ChangedMyMind()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains((Object) mapping))
        mappings.Remove((Object) mapping);
    else
    {
        mappings.Add((Object) mapping);
        Console.WriteLine("Index of new mapping: "
            + mappings.IndexOf((Object) mapping));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Add 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Add 方法 (String, String)

DataColumnMappingCollection
.
.
::
.
Add 方法 (String, String)
DataColumnMappingCollection 类

当给定源列名称和 DataSet 列名时，将 DataColumnMapping 对象添加到集合中。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    sourceColumn As String, _
    dataSetColumn As String _
) As DataColumnMapping
public DataColumnMapping Add(
    string sourceColumn,
    string dataSetColumn
)
public:
DataColumnMapping^ Add(
    String^ sourceColumn,
    String^ dataSetColumn
)
member Add :
        sourceColumn:string *
        dataSetColumn:string -> DataColumnMapping

参数

sourceColumn
类型： System String
要映射到的源列的区分大小写的名称。
dataSetColumn
类型： System String
要映射到的 DataSet 列的名称（该名称不区分大小写）。

返回值

类型： System.Data.Common DataColumnMapping
已添加到集合中的 DataColumnMapping 对象。

下面的示例创建一个 DataColumnMappingCollection 集合，将 DataColumnMapping 对象添加到该集合，并显示已映射源列的列表。

Public Sub CreateColumnMappings()
    Dim mappings As New DataColumnMappingCollection()
    mappings.Add("Category Name", "DataCategory")
    mappings.Add("Description", "DataDescription")
    mappings.Add("Picture", "DataPicture")
    Dim myMessage As String = "ColumnMappings:" + ControlChars.Cr
    Dim i As Integer
    For i = 0 To mappings.Count - 1
        myMessage += i.ToString() + " " + mappings(i).ToString() _
           + ControlChars.Cr
    Next i
    Console.WriteLine(myMessage)
End Sub

public void CreateColumnMappings()
{
    DataColumnMappingCollection mappings =
        new DataColumnMappingCollection();
    mappings.Add("Category Name","DataCategory");
    mappings.Add("Description","DataDescription");
    mappings.Add("Picture","DataPicture");
    string myMessage = "ColumnMappings:\n";
    for(int i=0;i < mappings.Count;i++)
    {
        myMessage += i.ToString() + " "
            + mappings[i].ToString() + "\n";
    }
    Console.WriteLine(myMessage);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Add 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.AddRange 方法

DataColumnMappingCollection
.
.
::
.
AddRange 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

向集合的末尾添加值数组。

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.AddRange 方法 (Array)

DataColumnMappingCollection
.
.
::
.
AddRange 方法 (Array)
DataColumnMappingCollection 类

将指定 Array 的元素复制到集合末尾。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub AddRange ( _
    values As Array _
)
public void AddRange(
    Array values
)
public:
void AddRange(
    Array^ values
)
member AddRange :
        values:Array -> unit

参数

values
类型： System Array
要添加到集合中的 Array。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
AddRange 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.AddRange 方法 ( array<DataColumnMapping >[]()[])

DataColumnMappingCollection
.
.
::
.
AddRange 方法 (
array<
DataColumnMapping
>
[]
()
[]
)
DataColumnMappingCollection 类

将指定的 DataColumnMapping 数组的元素复制到集合末尾。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub AddRange ( _
    values As DataColumnMapping() _
)
public void AddRange(
    DataColumnMapping[] values
)
public:
void AddRange(
    array<DataColumnMapping^>^ values
)
member AddRange :
        values:DataColumnMapping[] -> unit

参数

values
类型：
array<
System.Data.Common DataColumnMapping
>
[]
()
[]

要添加到集合中的 DataColumnMapping 对象的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
AddRange 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Clear 方法

DataColumnMappingCollection
.
.
::
.
Clear 方法
DataColumnMappingCollection 类

从集合中移除所有 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Clear
public void Clear()
public:
virtual void Clear() sealed
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

下面的示例将集合导出到 DataColumnMapping 对象的数组。它然后清除该集合，并且在参数不再持续时返回 true。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例将集合导出到 DataColumnMapping 对象的数组。它然后清除该集合，并且在参数不再持续时返回 true。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例将集合导出到 DataColumnMapping 对象的数组。它然后清除该集合，并且在参数不再持续时返回 true。此示例假定已经创建了 DataColumnMappingCollection 集合。

Public Function PushIntoArray() As Boolean
    ' ...
    ' create mappings
    ' ...
    Dim columns As DataColumnMapping()
    mappings.CopyTo(columns, 0)
    mappings.Clear()
    PushIntoArray = True
End Function

public bool PushIntoArray()
{
    // ...
    // create mappings
    // ...
    DataColumnMapping[] columns = new DataColumnMapping[0];
    mappings.CopyTo(columns, 0);
    mappings.Clear();
    return true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Contains 方法

DataColumnMappingCollection
.
.
::
.
Contains 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

获取一个值，该值指示集合中是否存在 DataColumnMapping 对象。

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Contains 方法 (Object)

DataColumnMappingCollection
.
.
::
.
Contains 方法 (Object)
DataColumnMappingCollection 类

获取一个值，该值指示集合中是否存在具有给定 Object 的 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    value As Object _
) As Boolean
public bool Contains(
    Object value
)
public:
virtual bool Contains(
    Object^ value
) sealed
abstract Contains :
        value:Object -> bool
override Contains :
        value:Object -> bool

参数

value
类型： System Object
一个 Object，它是 DataColumnMapping。

返回值

类型： System Boolean
如果集合包含指定的 DataColumnMapping 对象，则为 true；否则为 false。

实现

异常 | 条件
InvalidCastException | 传入的对象不是 DataColumnMapping 对象。

下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。

Public Sub ChangedMyMind()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains(CType(mapping, Object)) Then
        mappings.Remove(CType(mapping, Object))
    Else
        mappings.Add(CType(mapping, Object))
        Console.WriteLine("Index of new mapping: " & _
           mappings.IndexOf(CType(mapping, Object)).ToString())
    End If
End Sub

public void ChangedMyMind()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains((Object) mapping))
        mappings.Remove((Object) mapping);
    else
    {
        mappings.Add((Object) mapping);
        Console.WriteLine("Index of new mapping: " +
            mappings.IndexOf((Object) mapping));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Contains 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Contains 方法 (String)

DataColumnMappingCollection
.
.
::
.
Contains 方法 (String)
DataColumnMappingCollection 类

获取一个值，该值指示集合中是否存在具有给定源列名称的 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    value As String _
) As Boolean
public bool Contains(
    string value
)
public:
virtual bool Contains(
    String^ value
) sealed
abstract Contains :
        value:string -> bool
override Contains :
        value:string -> bool

参数

value
类型： System String
DataColumnMapping 对象的区分大小写的源列名称。

返回值

类型： System Boolean
如果集合包含具有指定源列名称的 DataColumnMapping 对象，则为 true；否则为 false。

实现

下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。

Public Sub FindDataColumnMapping()
    ' ...
    ' create columnMappings
    ' ...
    If Not columnMappings.Contains("Description") Then
        Console.WriteLine("Error: no such table in collection.")
    Else
       Console.WriteLine("Name: {0}", _
           columnMappings("Description").ToString())
       Console.WriteLine("Index: {0}", _
           columnMappings.IndexOf("Description").ToString())
    End If
End Sub

public void FindDataColumnMapping()
{
    // ...
    // create columnMappings
    // ...
    if (!columnMappings.Contains("Description"))
        Console.WriteLine("Error: no such table in collection.");
    else
    {
        Console.WriteLine("Name {0}",
            columnMappings["Description"].ToString());
        Console.WriteLine("Index: {0}",
            columnMappings.IndexOf("Description").ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Contains 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.CopyTo 方法

DataColumnMappingCollection
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

将集合的元素复制到一个数组。

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.CopyTo 方法 (Array, Int32)

DataColumnMappingCollection
.
.
::
.
CopyTo 方法 (Array, Int32)
DataColumnMappingCollection 类

将 DataColumnMappingCollection 的元素复制到指定的数组。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
public void CopyTo(
    Array array,
    int index
)
public:
virtual void CopyTo(
    Array^ array,
    int index
) sealed
abstract CopyTo :
        array:Array *
        index:int -> unit
override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
要将 DataColumnMappingCollection 元素复制到其中的 Array。
index
类型： System Int32
数组的起始索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
CopyTo 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.CopyTo 方法 ( array<DataColumnMapping >[]()[], Int32)

DataColumnMappingCollection
.
.
::
.
CopyTo 方法 (
array<
DataColumnMapping
>
[]
()
[]
, Int32)
DataColumnMappingCollection 类

将 DataColumnMappingCollection 的元素复制到指定的 DataColumnMapping 数组。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As DataColumnMapping(), _
    index As Integer _
)
public void CopyTo(
    DataColumnMapping[] array,
    int index
)
public:
void CopyTo(
    array<DataColumnMapping^>^ array,
    int index
)
member CopyTo :
        array:DataColumnMapping[] *
        index:int -> unit

参数

array
类型：
array<
System.Data.Common DataColumnMapping
>
[]
()
[]

DataColumnMappingCollection 元素要复制到的 DataColumnMapping 数组。
index
类型： System Int32
array 中从零开始的索引，在此处开始复制。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
CopyTo 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.GetByDataSetColumn 方法

DataColumnMappingCollection
.
.
::
.
GetByDataSetColumn 方法
DataColumnMappingCollection 类

获取具有指定 DataSet 列名的 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetByDataSetColumn ( _
    value As String _
) As DataColumnMapping
public DataColumnMapping GetByDataSetColumn(
    string value
)
public:
DataColumnMapping^ GetByDataSetColumn(
    String^ value
)
member GetByDataSetColumn :
        value:string -> DataColumnMapping

参数

value
类型： System String
要查找的 DataSet 列的名称（该名称不区分大小写）。

返回值

类型： System.Data.Common DataColumnMapping
具有指定 DataSet 列名的 DataColumnMapping 对象。

下面的示例在集合中搜索 DataColumnMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。

Public Sub FindDataColumnMapping()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.IndexOfDataSetColumn("datadescription") <> - 1 Then
        mapping = mappings.GetByDataSetColumn("datadescription")
    End If
End Sub

public void FindDataColumnMapping()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.IndexOfDataSetColumn("datadescription") != -1)
        mapping = mappings.GetByDataSetColumn("datadescription");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.GetColumnMappingBySchemaAction 方法

DataColumnMappingCollection
.
.
::
.
GetColumnMappingBySchemaAction 方法
DataColumnMappingCollection 类

给指定的 DataColumnMappingCollection、源列名称和 MissingMappingAction 获取一个 DataColumnMapping。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GetColumnMappingBySchemaAction ( _
    columnMappings As DataColumnMappingCollection, _
    sourceColumn As String, _
    mappingAction As MissingMappingAction _
) As DataColumnMapping
public static DataColumnMapping GetColumnMappingBySchemaAction(
    DataColumnMappingCollection columnMappings,
    string sourceColumn,
    MissingMappingAction mappingAction
)
public:
static DataColumnMapping^ GetColumnMappingBySchemaAction(
    DataColumnMappingCollection^ columnMappings,
    String^ sourceColumn,
    MissingMappingAction mappingAction
)
static member GetColumnMappingBySchemaAction :
        columnMappings:DataColumnMappingCollection *
        sourceColumn:string *
        mappingAction:MissingMappingAction -> DataColumnMapping

参数

columnMappings
类型： System.Data.Common DataColumnMappingCollection
DataColumnMappingCollection。
sourceColumn
类型： System String
要查找的区分大小写的源列名称。
mappingAction
类型： System.Data MissingMappingAction
MissingMappingAction 值之一。

返回值

类型： System.Data.Common DataColumnMapping
一个 DataColumnMapping 对象。
异常 | 条件
InvalidOperationException | mappingAction 参数设置为 Error，并且未指定任何映射。

如果集合中存在 DataColumnMapping，则将其返回。

对于给定的 MissingMappingAction，如果集合中不存在 DataColumnMapping，则发生以下操作：

MissingMappingAction | 采取的操作
Passthrough | 创建一个 DataColumnMapping，它所具有的指定的源列名称为，既有源列名称又有 DataSet 列名。此 DataColumnMapping 不添加到集合中。 创建一个 DataColumnMapping，它所具有的指定的源列名称为，既有源列名称又有 DataSet 列名。此 DataColumnMapping 不添加到集合中。
Error | 如果缺少指定的列映射，则生成 InvalidOperationException。
Ignore | 获取一个 null 值。

下面的示例在集合中搜索具有给定源列名称的 DataColumnMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索具有给定源列名称的 DataColumnMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索具有给定源列名称的 DataColumnMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。

Public Sub FindDataColumnMapping()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains("Description") Then
        mapping = _
           DataColumnMappingCollection.GetColumnMappingBySchemaAction _
           (mappings, "Description", MissingMappingAction.Ignore)
    End If
End Sub

public void FindDataColumnMapping()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains("Description"))
        mapping = DataColumnMappingCollection.GetColumnMappingBySchemaAction
            (mappings, "Description", MissingMappingAction.Ignore);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.GetDataColumn 方法

DataColumnMappingCollection
.
.
::
.
GetDataColumn 方法
DataColumnMappingCollection 类

一个静态方法，它返回未实例化的 DataColumnMappingCollection 对象的 DataColumn 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GetDataColumn ( _
    columnMappings As DataColumnMappingCollection, _
    sourceColumn As String, _
    dataType As Type, _
    dataTable As DataTable, _
    mappingAction As MissingMappingAction, _
    schemaAction As MissingSchemaAction _
) As DataColumn
public static DataColumn GetDataColumn(
    DataColumnMappingCollection columnMappings,
    string sourceColumn,
    Type dataType,
    DataTable dataTable,
    MissingMappingAction mappingAction,
    MissingSchemaAction schemaAction
)
public:
static DataColumn^ GetDataColumn(
    DataColumnMappingCollection^ columnMappings,
    String^ sourceColumn,
    Type^ dataType,
    DataTable^ dataTable,
    MissingMappingAction mappingAction,
    MissingSchemaAction schemaAction
)
static member GetDataColumn :
        columnMappings:DataColumnMappingCollection *
        sourceColumn:string *
        dataType:Type *
        dataTable:DataTable *
        mappingAction:MissingMappingAction *
        schemaAction:MissingSchemaAction -> DataColumn

参数

columnMappings
类型： System.Data.Common DataColumnMappingCollection
DataColumnMappingCollection。
sourceColumn
类型： System String
数据源中区分大小写的列名。
dataType
类型： System Type
正被映射的列的数据类型。
dataTable
类型： System.Data DataTable
DataTable 的一个实例。
mappingAction
类型： System.Data MissingMappingAction
MissingMappingAction 值之一。
schemaAction
类型： System.Data MissingSchemaAction
确定现有 DataSet 架构与传入数据不匹配时需要执行的操作。

返回值

类型： System.Data DataColumn
一个 DataColumn 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间
GetDataColumn


DataColumnMappingCollection ..::.GetEnumerator 方法

DataColumnMappingCollection
.
.
::
.
GetEnumerator 方法
DataColumnMappingCollection 类

获取可循环访问集合的枚举数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetEnumerator As IEnumerator
public IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
可用于循环访问集合的 IEnumerator。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IColumnMappingCollection ..::.Add 方法

DataColumnMappingCollection
.
.
::
.
IColumnMappingCollection
.
.
::
.
Add 方法
DataColumnMappingCollection 类

使用源列名和 DataSet 列名将 DataColumnMapping 对象添加到 DataColumnMappingCollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function Add ( _
    sourceColumnName As String, _
    dataSetColumnName As String _
) As IColumnMapping Implements IColumnMappingCollection.Add
IColumnMapping IColumnMappingCollection.Add(
    string sourceColumnName,
    string dataSetColumnName
)
private:
virtual IColumnMapping^ Add(
    String^ sourceColumnName,
    String^ dataSetColumnName
) sealed = IColumnMappingCollection::Add
private abstract Add :
        sourceColumnName:string *
        dataSetColumnName:string -> IColumnMapping
private override Add :
        sourceColumnName:string *
        dataSetColumnName:string -> IColumnMapping

参数

sourceColumnName
类型： System String
源列的区分大小写的名称。
dataSetColumnName
类型： System String
DataSet 列的名称。

返回值

类型： System.Data IColumnMapping
已添加到集合中的 ColumnMapping 对象。

实现

此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IColumnMappingCollection 接口时使用。 此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IColumnMappingCollection 接口时使用。

有关更多信息，请参见Add。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IColumnMappingCollection ..::.GetByDataSetColumn 方法

DataColumnMappingCollection
.
.
::
.
IColumnMappingCollection
.
.
::
.
GetByDataSetColumn 方法
DataColumnMappingCollection 类

获取具有指定的 DataSet 列名的 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetByDataSetColumn ( _
    dataSetColumnName As String _
) As IColumnMapping Implements IColumnMappingCollection.GetByDataSetColumn
IColumnMapping IColumnMappingCollection.GetByDataSetColumn(
    string dataSetColumnName
)
private:
virtual IColumnMapping^ GetByDataSetColumn(
    String^ dataSetColumnName
) sealed = IColumnMappingCollection::GetByDataSetColumn
private abstract GetByDataSetColumn :
        dataSetColumnName:string -> IColumnMapping
private override GetByDataSetColumn :
        dataSetColumnName:string -> IColumnMapping

参数

dataSetColumnName
类型： System String
要查找的 DataSet 列的名称（该名称不区分大小写）。

返回值

类型： System.Data IColumnMapping
具有指定的 DataSet 列名的 DataColumnMapping 对象。

实现

此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IColumnMappingCollection 接口时使用。 此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IColumnMappingCollection 接口时使用。

有关更多信息，请参见GetByDataSetColumn。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IndexOf 方法

DataColumnMappingCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

获取指定的 DataColumnMapping 在集合中的位置。

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IndexOf 方法 (Object)

DataColumnMappingCollection
.
.
::
.
IndexOf 方法 (Object)
DataColumnMappingCollection 类

获取指定的 Object（它是 DataColumnMapping）在集合中的位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    value As Object _
) As Integer
public int IndexOf(
    Object value
)
public:
virtual int IndexOf(
    Object^ value
) sealed
abstract IndexOf :
        value:Object -> int
override IndexOf :
        value:Object -> int

参数

value
类型： System Object
一个 Object，它是要查找的 DataColumnMapping。

返回值

类型： System Int32
指定的 Object（它是 DataColumnMapping）在集合中从零开始的位置。

实现

下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。

Public Sub ChangedMyMind()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains(CType(mapping, Object)) Then
        mappings.Remove(CType(mapping, Object))
    Else
        mappings.Add(CType(mapping, Object))
        Console.WriteLine("Index of new mapping: " & _
           mappings.IndexOf(CType(mapping, Object)).ToString())
    End If
End Sub

public void ChangedMyMind()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains((Object) mapping))
        mappings.Remove((Object) mapping);
    else
    {
        mappings.Add((Object) mapping);
        Console.WriteLine("Index of new mapping: " +
            mappings.IndexOf((Object) mapping));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
IndexOf 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IndexOf 方法 (String)

DataColumnMappingCollection
.
.
::
.
IndexOf 方法 (String)
DataColumnMappingCollection 类

获取具有指定源列名称的 DataColumnMapping 的位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    sourceColumn As String _
) As Integer
public int IndexOf(
    string sourceColumn
)
public:
virtual int IndexOf(
    String^ sourceColumn
) sealed
abstract IndexOf :
        sourceColumn:string -> int
override IndexOf :
        sourceColumn:string -> int

参数

sourceColumn
类型： System String
源列的区分大小写的名称。

返回值

类型： System Int32
具有指定的区分大小写的源列名称的 DataColumnMapping 从零开始的位置。

实现

下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。

Public Sub FindDataColumnMapping()
    ' ...
    ' create columnMappings
    ' ...
    If Not columnMappings.Contains("Description") Then
        Console.WriteLine("Error: no such table in collection.")
    Else
       Console.WriteLine("Name: {0}", _
           columnMappings("Description").ToString())
       Console.WriteLine("Index: {0}", _
           columnMappings.IndexOf("Description").ToString())
    End If
End Sub

public void FindDataColumnMapping()
{
    // ...
    // create columnMappings
    // ...
    if (!columnMappings.Contains("Description"))
        Console.WriteLine("Error: no such table in collection.");
    else
    {
        Console.WriteLine("Name {0}",
            columnMappings["Description"].ToString());
        Console.WriteLine("Index: {0}",
            columnMappings.IndexOf("Description").ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
IndexOf 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IndexOfDataSetColumn 方法

DataColumnMappingCollection
.
.
::
.
IndexOfDataSetColumn 方法
DataColumnMappingCollection 类

获取具有给定 DataSet 列名的指定 DataColumnMapping 的位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOfDataSetColumn ( _
    dataSetColumn As String _
) As Integer
public int IndexOfDataSetColumn(
    string dataSetColumn
)
public:
int IndexOfDataSetColumn(
    String^ dataSetColumn
)
member IndexOfDataSetColumn :
        dataSetColumn:string -> int

参数

dataSetColumn
类型： System String
要查找的数据集列的名称（该名称不区分大小写）。

返回值

类型： System Int32
具有给定 DataSet 列名的指定 DataColumnMapping 的从零开始的位置；或者如果在集合中不存在 DataColumnMapping 对象，则为 -1。

下面的示例在集合中搜索 DataColumnMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。

Public Sub FindDataColumnMapping()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.IndexOfDataSetColumn("datadescription") <> - 1 Then
        mapping = mappings.GetByDataSetColumn("datadescription")
    End If
End Sub

public void FindDataColumnMapping()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.IndexOfDataSetColumn("datadescription") != -1)
        mapping = mappings.GetByDataSetColumn("datadescription");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Insert 方法

DataColumnMappingCollection
.
.
::
.
Insert 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

将一个对象插入 DataColumnMappingCollection 中的指定索引处。

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Insert 方法 (Int32, DataColumnMapping)

DataColumnMappingCollection
.
.
::
.
Insert 方法 (Int32, DataColumnMapping)
DataColumnMappingCollection 类

将 DataColumnMapping 对象插入 DataColumnMappingCollection 中的指定索引位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Insert ( _
    index As Integer, _
    value As DataColumnMapping _
)
public void Insert(
    int index,
    DataColumnMapping value
)
public:
void Insert(
    int index,
    DataColumnMapping^ value
)
member Insert :
        index:int *
        value:DataColumnMapping -> unit

参数

index
类型： System Int32
要插入的 DataColumnMapping 对象的从零开始的索引。
value
类型： System.Data.Common DataColumnMapping
DataColumnMapping 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Insert 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Insert 方法 (Int32, Object)

DataColumnMappingCollection
.
.
::
.
Insert 方法 (Int32, Object)
DataColumnMappingCollection 类

将 DataColumnMapping 对象插入 DataColumnMappingCollection 中的指定索引位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Insert ( _
    index As Integer, _
    value As Object _
)
public void Insert(
    int index,
    Object value
)
public:
virtual void Insert(
    int index,
    Object^ value
) sealed
abstract Insert :
        index:int *
        value:Object -> unit
override Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
要插入的 DataColumnMapping 对象的从零开始的索引。
value
类型： System Object
DataColumnMapping 对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Insert 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.MemberwiseClone 方法

DataColumnMappingCollection
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Remove 方法

DataColumnMappingCollection
.
.
::
.
Remove 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

从集合中移除指定的对象。

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Remove 方法 (DataColumnMapping)

DataColumnMappingCollection
.
.
::
.
Remove 方法 (DataColumnMapping)
DataColumnMappingCollection 类

从集合中移除指定的 DataColumnMapping。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    value As DataColumnMapping _
)
public void Remove(
    DataColumnMapping value
)
public:
void Remove(
    DataColumnMapping^ value
)
member Remove :
        value:DataColumnMapping -> unit

参数

value
类型： System.Data.Common DataColumnMapping
要移除的 DataColumnMapping。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Remove 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Remove 方法 (Object)

DataColumnMappingCollection
.
.
::
.
Remove 方法 (Object)
DataColumnMappingCollection 类

从集合中移除 Object，它是一个 DataColumnMapping。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    value As Object _
)
public void Remove(
    Object value
)
public:
virtual void Remove(
    Object^ value
) sealed
abstract Remove :
        value:Object -> unit
override Remove :
        value:Object -> unit

参数

value
类型： System Object
Object，它是要移除的 DataColumnMapping。

实现

异常 | 条件
InvalidCastException | 指定的对象不是一个 DataColumnMapping 对象。
ArgumentException | 指定的对象不在集合中。

下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。 下面的示例在集合中搜索 DataColumnMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataColumnMappingCollection 集合和 DataColumnMapping 对象。

Public Sub ChangedMyMind()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains(CType(mapping, Object)) Then
        mappings.Remove(CType(mapping, Object))
    Else
        mappings.Add(CType(mapping, Object))
        Console.WriteLine("Index of new mapping: " + _
           mappings.IndexOf(CType(mapping, Object)).ToString())
    End If
End Sub

public void ChangedMyMind()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains((Object) mapping))
        mappings.Remove((Object) mapping);
    else
    {
        mappings.Add((Object) mapping);
        Console.WriteLine("Index of new mapping: "
            + mappings.IndexOf((Object) mapping));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Remove 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.RemoveAt 方法

DataColumnMappingCollection
.
.
::
.
RemoveAt 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

从集合中移除指定的 DataColumnMapping 对象。

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.RemoveAt 方法 (Int32)

DataColumnMappingCollection
.
.
::
.
RemoveAt 方法 (Int32)
DataColumnMappingCollection 类

从集合中移除具有指定索引的 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub RemoveAt ( _
    index As Integer _
)
public void RemoveAt(
    int index
)
public:
virtual void RemoveAt(
    int index
) sealed
abstract RemoveAt :
        index:int -> unit
override RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的 DataColumnMapping 对象的从零开始的索引。

实现

异常 | 条件
IndexOutOfRangeException | 没有具有指定索引的 DataColumnMapping 对象。

下面的示例在 DataColumnMappingCollection 集合中搜索具有给定索引的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则移除该映射。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定索引的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则移除该映射。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定索引的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则移除该映射。此示例假定已经创建了 DataColumnMappingCollection 集合。

Public Sub RemoveDataColumnMapping()
    ' ...
    ' create mappings
    ' ...
    If mappings.Contains(7) Then
        mappings.RemoveAt(7)
    End If
End Sub

public void RemoveDataColumnMapping()
{
    // ...
    // create mappings
    // ...
    if (mappings.Contains(7))
        mappings.RemoveAt(7);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
RemoveAt 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.RemoveAt 方法 (String)

DataColumnMappingCollection
.
.
::
.
RemoveAt 方法 (String)
DataColumnMappingCollection 类

从集合中移除具有指定源列名称的 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub RemoveAt ( _
    sourceColumn As String _
)
public void RemoveAt(
    string sourceColumn
)
public:
virtual void RemoveAt(
    String^ sourceColumn
) sealed
abstract RemoveAt :
        sourceColumn:string -> unit
override RemoveAt :
        sourceColumn:string -> unit

参数

sourceColumn
类型： System String
区分大小写的源列名称。

实现

异常 | 条件
IndexOutOfRangeException | 没有具有指定源列名称的 DataColumnMapping 对象。

下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则移除该映射。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则移除该映射。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则移除该映射。此示例假定已经创建了 DataColumnMappingCollection 集合。

Public Sub RemoveDataColumnMapping()
    ' ...
    ' create columnMappings
    ' ...
    If columnMappings.Contains("Picture") Then
        columnMappings.RemoveAt("Picture")
    End If
End Sub

public void RemoveDataColumnMapping()
{
    // ...
    // create columnMappings
    // ...
    if (columnMappings.Contains("Picture"))
        columnMappings.RemoveAt("Picture");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
RemoveAt 重载
System.Data.Common 命名空间


DataColumnMappingCollection 属性

DataColumnMappingCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

DataColumnMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataColumnMappingCollection 类
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Count 属性

DataColumnMappingCollection
.
.
::
.
Count 属性
DataColumnMappingCollection 类

获取集合中的 DataColumnMapping 对象数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property Count As Integer
    Get
[BrowsableAttribute(false)]
public int Count { get; }
[BrowsableAttribute(false)]
public:
virtual property int Count {
    int get () sealed;
}
[<BrowsableAttribute(false)>]
abstract Count : int
[<BrowsableAttribute(false)>]
override Count : int

属性值

类型： System Int32
集合中的项数。

实现

下面的示例创建一个 DataColumnMappingCollection 集合，将 DataColumnMapping 对象添加到该集合，并显示已映射源列的列表。

Public Sub CreateColumnMappings()
    Dim mappings As New DataColumnMappingCollection()
    mappings.Add("Category Name", "DataCategory")
    mappings.Add("Description", "DataDescription")
    mappings.Add("Picture", "DataPicture")
    Dim message As String = "ColumnMappings:" + ControlChars.Cr
    Dim i As Integer
    For i = 0 To mappings.Count - 1
        message += i.ToString() + " " + mappings(i).ToString() _
           + ControlChars.Cr
    Next i
    Console.WriteLine(message)
End Sub

public void CreateColumnMappings()
{
    DataColumnMappingCollection mappings =
        new DataColumnMappingCollection();
    mappings.Add("Category Name","DataCategory");
    mappings.Add("Description","DataDescription");
    mappings.Add("Picture","DataPicture");
    string message = "ColumnMappings:\n";
    for(int i=0;i < mappings.Count;i++)
    {
        message += i.ToString() + " "
            + mappings[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.ICollection ..::.IsSynchronized 属性

DataColumnMappingCollection
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
DataColumnMappingCollection 类

获取一个值，该值指示是否同步对 ICollection 的访问（线程安全）。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
如果对 ICollection 的访问是同步的（线程安全），则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 DataColumnMappingCollection 实例被强制转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DataColumnMappingCollection 实例被强制转换为 ICollection 接口时使用。

有关更多信息，请参见IsSynchronized。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.ICollection ..::.SyncRoot 属性

DataColumnMappingCollection
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
DataColumnMappingCollection 类

获取一个对象，可用于同步对 ICollection 的访问。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
可用于同步对 ICollection 的访问的对象。

实现

此成员是显式接口成员的实现。它只能在 DataColumnMappingCollection 实例被强制转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DataColumnMappingCollection 实例被强制转换为 ICollection 接口时使用。

有关更多信息，请参见SyncRoot。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IColumnMappingCollection ..::.Item 属性

DataColumnMappingCollection
.
.
::
.
IColumnMappingCollection
.
.
::
.
Item 属性
DataColumnMappingCollection 类

获取或设置具有指定 SourceColumn 名称的 IColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Item ( _
    index As String _
) As Object Implements IColumnMappingCollection.Item
    Get
    Set
Object IColumnMappingCollection.this[
    string index
] { get; set; }
private:
virtual property Object^ Item[String^ index] {
    Object^ get (String^ index) sealed = IColumnMappingCollection::Item::get;
    void set (String^ index, Object^ value) sealed = IColumnMappingCollection::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

index
类型： System String
元素的索引。

属性值

类型： System Object
具有指定 SourceColumn 名称的 IColumnMapping 对象。

实现

此成员是显式接口成员的实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IColumnMappingCollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IColumnMappingCollection 接口时使用。

有关更多信息，请参见Item。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IList ..::.IsFixedSize 属性

DataColumnMappingCollection
.
.
::
.
IList
.
.
::
.
IsFixedSize 属性
DataColumnMappingCollection 类

获取一个值，该值指示 IList 是否具有固定的大小。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsFixedSize As Boolean
    Implements IList.IsFixedSize
    Get
bool IList.IsFixedSize { get; }
private:
virtual property bool IsFixedSize {
    bool get () sealed = IList::IsFixedSize::get;
}
private abstract IsFixedSize : bool
private override IsFixedSize : bool

属性值

类型： System Boolean
如果 IList 具有固定大小，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IList 接口时使用。

有关更多信息，请参见IsFixedSize。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IList ..::.IsReadOnly 属性

DataColumnMappingCollection
.
.
::
.
IList
.
.
::
.
IsReadOnly 属性
DataColumnMappingCollection 类

获取一个值，该值指示 IList 是否为只读。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements IList.IsReadOnly
    Get
bool IList.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = IList::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
如果 IList 为只读，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IList 接口时使用。

有关更多信息，请参见 IsReadOnly。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.IList ..::.Item 属性

DataColumnMappingCollection
.
.
::
.
IList
.
.
::
.
Item 属性
DataColumnMappingCollection 类

获取或设置指定索引处的元素。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Item ( _
    index As Integer _
) As Object Implements IList.Item
    Get
    Set
Object IList.this[
    int index
] { get; set; }
private:
virtual property Object^ Item[int index] {
    Object^ get (int index) sealed = IList::Item::get;
    void set (int index, Object^ value) sealed = IList::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

index
类型： System Int32
要获得或设置的元素从零开始的索引。

属性值

类型： System Object
指定索引处的元素。

实现

有关更多信息，请参见Item。

此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataColumnMappingCollection 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Item 属性

DataColumnMappingCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataColumnMappingCollection 类

获取或设置指定的 DataColumnMapping 对象。

名称 说明
页首

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Item 属性 (Int32)

DataColumnMappingCollection
.
.
::
.
Item 属性 (Int32)
DataColumnMappingCollection 类

获取或设置指定索引处的 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property Item ( _
    index As Integer _
) As DataColumnMapping
    Get
    Set
[BrowsableAttribute(false)]
public DataColumnMapping this[
    int index
] { get; set; }
[BrowsableAttribute(false)]
public:
property DataColumnMapping^ Item[int index] {
    DataColumnMapping^ get (int index);
    void set (int index, DataColumnMapping^ value);
}
[<BrowsableAttribute(false)>]
member Item : DataColumnMapping with get, set

参数

index
类型： System Int32
要查找的 DataColumnMapping 对象的从零开始的索引。

属性值

类型： System.Data.Common DataColumnMapping
位于指定索引处的 DataColumnMapping 对象。

下面的示例创建一个 DataColumnMappingCollection 集合，将 DataColumnMapping 对象添加到该集合，并显示已映射源列的列表。

Public Sub CreateColumnMappings()
    Dim mappings As New DataColumnMappingCollection()
    mappings.Add("Category Name", "DataCategory")
    mappings.Add("Description", "DataDescription")
    mappings.Add("Picture", "DataPicture")
    Dim message As String = "ColumnMappings:" + ControlChars.Cr
    Dim i As Integer
    For i = 0 To mappings.Count - 1
        message += i.ToString() + " " + mappings(i).ToString() _
           + ControlChars.Cr
    Next i
    Console.WriteLine(message)
End Sub

public void CreateColumnMappings()
{
    DataColumnMappingCollection mappings =
        new DataColumnMappingCollection();
    mappings.Add("Category Name","DataCategory");
    mappings.Add("Description","DataDescription");
    mappings.Add("Picture","DataPicture");
    string message = "ColumnMappings:\n";
    for(int i=0;i < mappings.Count;i++)
    {
        message += i.ToString() + " "
            + mappings[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Item 重载
System.Data.Common 命名空间


DataColumnMappingCollection ..::.Item 属性 (String)

DataColumnMappingCollection
.
.
::
.
Item 属性 (String)
DataColumnMappingCollection 类

获取或设置具有指定源列名称的 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property Item ( _
    sourceColumn As String _
) As DataColumnMapping
    Get
    Set
[BrowsableAttribute(false)]
public DataColumnMapping this[
    string sourceColumn
] { get; set; }
[BrowsableAttribute(false)]
public:
property DataColumnMapping^ Item[String^ sourceColumn] {
    DataColumnMapping^ get (String^ sourceColumn);
    void set (String^ sourceColumn, DataColumnMapping^ value);
}
[<BrowsableAttribute(false)>]
member Item : DataColumnMapping with get, set

参数

sourceColumn
类型： System String
源列的区分大小写的名称。

属性值

类型： System.Data.Common DataColumnMapping
具有指定源列名称的 DataColumnMapping 对象。

下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。 下面的示例在 DataColumnMappingCollection 集合中搜索具有给定源列名称的 DataColumnMapping 对象。如果 DataColumnMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataColumnMappingCollection 集合。

Public Sub FindDataColumnMapping()
    ' ...
    ' create columnMappings
    ' ...
    If Not columnMappings.Contains("Description") Then
        Console.WriteLine("Error: no such table in collection.")
    Else
       Console.WriteLine("Name: {0}", _
           columnMappings("Description").ToString())
       Console.WriteLine("Index: {0}", _
           columnMappings.IndexOf("Description").ToString())
    End If
End Sub

public void FindDataColumnMapping()
{
    // ...
    // create columnMappings
    // ...
    if (!columnMappings.Contains("Description"))
        Console.WriteLine("Error: no such table in collection.");
    else
    {
        Console.WriteLine("Name {0}",
            columnMappings["Description"].ToString());
        Console.WriteLine("Index: {0}",
            columnMappings.IndexOf("Description").ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataColumnMappingCollection 类
DataColumnMappingCollection 成员
Item 重载
System.Data.Common 命名空间


DataRecordInfo 类

DataRecordInfo 类
成员

提供对 DbDataRecord 的结构类型相关信息以及列信息的访问。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Class DataRecordInfo
public class DataRecordInfo
public ref class DataRecordInfo
type DataRecordInfo =  class end

System.Data.Common System.Data.Common..::.DataRecordInfoDataRecordInfo

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DataRecordInfo 成员
System.Data.Common 命名空间


DataRecordInfo 成员

DataRecordInfo 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRecordInfo 类

提供对 DbDataRecord 的结构类型相关信息以及列信息的访问。

DataRecordInfo 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataRecordInfo 类
System.Data.Common 命名空间


DataRecordInfo 构造函数

DataRecordInfo 构造函数
DataRecordInfo 类

使用数据字段的可枚举集合初始化一个特定类型的新 DbDataRecord 对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    metadata As TypeUsage, _
    memberInfo As IEnumerable(Of EdmMember) _
)
public DataRecordInfo(
    TypeUsage metadata,
    IEnumerable<EdmMember> memberInfo
)
public:
DataRecordInfo(
    TypeUsage^ metadata,
    IEnumerable<EdmMember^>^ memberInfo
)
new :
        metadata:TypeUsage *
        memberInfo:IEnumerable<EdmMember> -> DataRecordInfo

参数

metadata
类型： System.Data.Metadata.Edm TypeUsage
此对象表示的类型的元数据，由 TypeUsage 提供。
memberInfo
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
EdmMember
>
)
>
)

表示列信息的 EdmMember 对象的可枚举集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DataRecordInfo 类
DataRecordInfo 成员
System.Data.Common 命名空间


DataRecordInfo 方法

DataRecordInfo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRecordInfo 类

DataRecordInfo 类型公开以下成员。

名称 说明
页首

参考

DataRecordInfo 类
System.Data.Common 命名空间


DataRecordInfo 属性

DataRecordInfo 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataRecordInfo 类

DataRecordInfo 类型公开以下成员。

名称 说明
页首

参考

DataRecordInfo 类
System.Data.Common 命名空间


DataRecordInfo ..::.FieldMetadata 属性

DataRecordInfo
.
.
::
.
FieldMetadata 属性
DataRecordInfo 类

获取此 DataRecordInfo 对象的 FieldMetadata。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property FieldMetadata As ReadOnlyCollection(Of FieldMetadata)
    Get
public ReadOnlyCollection<FieldMetadata> FieldMetadata { get; }
public:
property ReadOnlyCollection<FieldMetadata>^ FieldMetadata {
    ReadOnlyCollection<FieldMetadata>^ get ();
}
member FieldMetadata : ReadOnlyCollection<FieldMetadata>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
FieldMetadata
>
)
>
)

一个 FieldMetadata 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DataRecordInfo 类
DataRecordInfo 成员
System.Data.Common 命名空间


DataRecordInfo ..::.RecordType 属性

DataRecordInfo
.
.
::
.
RecordType 属性
DataRecordInfo 类

获取此对象的类型信息作为 TypeUsage 对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property RecordType As TypeUsage
    Get
public TypeUsage RecordType { get; }
public:
property TypeUsage^ RecordType {
    TypeUsage^ get ();
}
member RecordType : TypeUsage

属性值

类型： System.Data.Metadata.Edm TypeUsage
一个 TypeUsage 值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DataRecordInfo 类
DataRecordInfo 成员
System.Data.Common 命名空间


DataTableMapping 类

DataTableMapping 类
成员

包含源表和 DataTable 之间的映射关系的说明。当填充 DataSet 时，DataAdapter 就会使用该类。 包含源表和 DataTable 之间的映射关系的说明。当填充 DataSet 时，DataAdapter 就会使用该类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DataTableMapping _
    Inherits MarshalByRefObject _
    Implements ITableMapping, ICloneable
public sealed class DataTableMapping : MarshalByRefObject,
    ITableMapping, ICloneable
public ref class DataTableMapping sealed : public MarshalByRefObject,
    ITableMapping, ICloneable
[<SealedAttribute>]
type DataTableMapping =
    class
        inherit MarshalByRefObject
        interface ITableMapping
        interface ICloneable
    end

DataTableMapping 提供数据源查询返回的数据与 DataTable 之间的主映射。可以将 DataTableMapping 名称传递到 DataAdapter 的 Fill 方法，以取代 DataTable 名称。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。 DataTableMapping 提供数据源查询返回的数据与 DataTable 之间的主映射。可以将 DataTableMapping 名称传递到 DataAdapter 的 Fill 方法，以取代 DataTable 名称。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。 DataTableMapping 提供数据源查询返回的数据与 DataTable 之间的主映射。可以将 DataTableMapping 名称传递到 DataAdapter 的 Fill 方法，以取代 DataTable 名称。有关更多信息，请参见 DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)。

下面的示例创建一个 DataTableMapping 对象并将其添加到 DataTableMappingCollection 中。然后，它通知用户，映射已添加到集合中，并显示其父映射。 下面的示例创建一个 DataTableMapping 对象并将其添加到 DataTableMappingCollection 中。然后，它通知用户，映射已添加到集合中，并显示其父映射。

Public Sub AddDataTableMapping()
    ' ...
    ' create tableMappings
    ' ...
    Dim mapping As New DataTableMapping( _
       "Categories", "DataCategories")
    tableMappings.Add(CType(mapping, Object))
    Console.WriteLine( _
       "Table {0} added to {1} table mapping collection.", _
       mapping.ToString(), tableMappings.ToString())
End Sub

public void AddDataTableMapping()
{
    // ...
    // create tableMappings
    // ...
    DataTableMapping mapping =
        new DataTableMapping("Categories","DataCategories");
    tableMappings.Add((Object) mapping);
    Console.WriteLine("Table {0} added to {1} table mapping collection.",
        mapping.ToString(), tableMappings.ToString());
}

System.Data.Common System.Data.Common..::.DataTableMappingDataTableMapping
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping 成员

DataTableMapping 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMapping 类

包含源表和 DataTable 之间的映射关系的说明。当填充 DataSet 时，DataAdapter 就会使用该类。 包含源表和 DataTable 之间的映射关系的说明。当填充 DataSet 时，DataAdapter 就会使用该类。

DataTableMapping 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataTableMapping 类
System.Data.Common 命名空间


DataTableMapping 构造函数

DataTableMapping 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMapping 类

初始化 DataTableMapping 类的新实例。

名称 说明
页首

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping 构造函数

DataTableMapping 构造函数
DataTableMapping 类

初始化 DataTableMapping 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataTableMapping()
public:
DataTableMapping()
new : unit -> DataTableMapping

下面的示例创建一个 DataTableMapping 对象。

Public Sub CreateDataTableMapping()
    Dim mapping As New DataTableMapping()
    mapping.SourceTable = "Categories"
    mapping.DataSetTable = "DataCategories"
End Sub

public void CreateDataTableMapping()
{
    DataTableMapping mapping = new DataTableMapping();
    mapping.SourceTable = "Categories";
    mapping.DataSetTable = "DataCategories";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
DataTableMapping 重载
System.Data.Common 命名空间


DataTableMapping 构造函数 (String, String)

DataTableMapping 构造函数 (String, String)
DataTableMapping 类

当给定源表名称和 DataTable 名称时，用源初始化 DataTableMapping 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    sourceTable As String, _
    dataSetTable As String _
)
public DataTableMapping(
    string sourceTable,
    string dataSetTable
)
public:
DataTableMapping(
    String^ sourceTable,
    String^ dataSetTable
)
new :
        sourceTable:string *
        dataSetTable:string -> DataTableMapping

参数

sourceTable
类型： System String
数据源中区分大小写的源表名称。
dataSetTable
类型： System String
DataSet 中要映射到的表的名称。

下面的示例创建一个 DataTableMapping 对象并设置它的一些属性。

Public Sub CreateDataTableMapping()
    Dim mapping As New DataTableMapping("Categories", "DataCategories")
End Sub

public void CreateDataTableMapping()
{
    DataTableMapping mapping =
        new DataTableMapping("Categories","DataCategories");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
DataTableMapping 重载
System.Data.Common 命名空间


DataTableMapping 构造函数 (String, String, array<DataColumnMapping >[]()[])

DataTableMapping 构造函数 (String, String,
array<
DataColumnMapping
>
[]
()
[]
)
DataTableMapping 类

当给定源表名称、DataTable 名称以及 DataColumnMapping 对象的数组时，初始化 DataTableMapping 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    sourceTable As String, _
    dataSetTable As String, _
    columnMappings As DataColumnMapping() _
)
public DataTableMapping(
    string sourceTable,
    string dataSetTable,
    DataColumnMapping[] columnMappings
)
public:
DataTableMapping(
    String^ sourceTable,
    String^ dataSetTable,
    array<DataColumnMapping^>^ columnMappings
)
new :
        sourceTable:string *
        dataSetTable:string *
        columnMappings:DataColumnMapping[] -> DataTableMapping

参数

sourceTable
类型： System String
数据源中区分大小写的源表名称。
dataSetTable
类型： System String
DataSet 中要映射到的表的名称。
columnMappings
类型：
array<
System.Data.Common DataColumnMapping
>
[]
()
[]

DataColumnMapping 对象的数组。

下面的示例创建一个 DataTableMapping 对象，设置它的一些属性，并将它的 ColumnMappings 复制到一个数组。此示例假定已经创建了 DataColumnMappingCollection。 下面的示例创建一个 DataTableMapping 对象，设置它的一些属性，并将它的 ColumnMappings 复制到一个数组。此示例假定已经创建了 DataColumnMappingCollection。

Public Sub CreateDataTableMapping()
    ' ...
    ' create mappings
    ' ...
    Dim columns1() As DataColumnMapping
    mappings.CopyTo(columns1, 0)
    Dim mapping As New DataTableMapping _
       ("Categories", "DataCategories", columns1)

    Dim columns2() As DataColumnMapping
    mapping.ColumnMappings.CopyTo(columns2, 0)
End Sub

public void CreateDataTableMapping()
{
    // ...
    // create mappings
    // ...

    DataColumnMapping[] columns1 = {};
    mappings.CopyTo(columns1, 0);
    DataTableMapping mapping =
        new DataTableMapping("Categories", "DataCategories", columns1);

    DataColumnMapping[] columns2 = {};
    mapping.ColumnMappings.CopyTo(columns2, 0);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
DataTableMapping 重载
System.Data.Common 命名空间


DataTableMapping 方法

DataTableMapping 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMapping 类

DataTableMapping 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataTableMapping 类
System.Data.Common 命名空间


DataTableMapping ..::.GetColumnMappingBySchemaAction 方法

DataTableMapping
.
.
::
.
GetColumnMappingBySchemaAction 方法
DataTableMapping 类

使用指定的 MissingMappingAction 值和 DataColumn 名称从指定的 DataTable 中获取 DataColumn。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetColumnMappingBySchemaAction ( _
    sourceColumn As String, _
    mappingAction As MissingMappingAction _
) As DataColumnMapping
public DataColumnMapping GetColumnMappingBySchemaAction(
    string sourceColumn,
    MissingMappingAction mappingAction
)
public:
DataColumnMapping^ GetColumnMappingBySchemaAction(
    String^ sourceColumn,
    MissingMappingAction mappingAction
)
member GetColumnMappingBySchemaAction :
        sourceColumn:string *
        mappingAction:MissingMappingAction -> DataColumnMapping

参数

sourceColumn
类型： System String
DataColumn 的名称。
mappingAction
类型： System.Data MissingMappingAction
MissingMappingAction 值之一。

返回值

类型： System.Data.Common DataColumnMapping
DataColumn。
异常 | 条件
InvalidOperationException | mappingAction 参数设置为 Error，并且未指定任何映射。

如果 DataColumnMapping 存在，则将其返回。

如果 DataColumnMapping 不存在，则对于给定的 MissingMappingAction 执行下列操作：

MissingMappingAction | 采取的操作
Passthrough | 创建一个 DataColumnMapping，它所具有的指定的源列名称为，既有源列名称又有 DataSet 列名。此 DataColumnMapping 不添加到集合中。 创建一个 DataColumnMapping，它所具有的指定的源列名称为，既有源列名称又有 DataSet 列名。此 DataColumnMapping 不添加到集合中。
Error | 如果缺少指定的列映射，则生成 InvalidOperationException。
Ignore | 获取一个 null 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping ..::.GetDataColumn 方法

DataTableMapping
.
.
::
.
GetDataColumn 方法
DataTableMapping 类

返回给定列名称的 DataColumn 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetDataColumn ( _
    sourceColumn As String, _
    dataType As Type, _
    dataTable As DataTable, _
    mappingAction As MissingMappingAction, _
    schemaAction As MissingSchemaAction _
) As DataColumn
public DataColumn GetDataColumn(
    string sourceColumn,
    Type dataType,
    DataTable dataTable,
    MissingMappingAction mappingAction,
    MissingSchemaAction schemaAction
)
public:
DataColumn^ GetDataColumn(
    String^ sourceColumn,
    Type^ dataType,
    DataTable^ dataTable,
    MissingMappingAction mappingAction,
    MissingSchemaAction schemaAction
)
member GetDataColumn :
        sourceColumn:string *
        dataType:Type *
        dataTable:DataTable *
        mappingAction:MissingMappingAction *
        schemaAction:MissingSchemaAction -> DataColumn

参数

sourceColumn
类型： System String
DataColumn 的名称。
dataType
类型： System Type
sourceColumn 的数据类型。
dataTable
类型： System.Data DataTable
DataSet 中要映射到的表的名称。
mappingAction
类型： System.Data MissingMappingAction
MissingMappingAction 值之一。
schemaAction
类型： System.Data MissingSchemaAction
MissingSchemaAction 值之一。

返回值

类型： System.Data DataColumn
一个 DataColumn 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping ..::.GetDataTableBySchemaAction 方法

DataTableMapping
.
.
::
.
GetDataTableBySchemaAction 方法
DataTableMapping 类

使用指定的 MissingSchemaAction 值获取指定 DataSet 的当前 DataTable。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetDataTableBySchemaAction ( _
    dataSet As DataSet, _
    schemaAction As MissingSchemaAction _
) As DataTable
public DataTable GetDataTableBySchemaAction(
    DataSet dataSet,
    MissingSchemaAction schemaAction
)
public:
DataTable^ GetDataTableBySchemaAction(
    DataSet^ dataSet,
    MissingSchemaAction schemaAction
)
member GetDataTableBySchemaAction :
        dataSet:DataSet *
        schemaAction:MissingSchemaAction -> DataTable

参数

dataSet
类型： System.Data DataSet
要从其中获取 DataTable 的 DataSet。
schemaAction
类型： System.Data MissingSchemaAction
MissingSchemaAction 值之一。

返回值

类型： System.Data DataTable
DataTable。

如果 DataTable 不存在，则采取指定的 MissingSchemaAction。

下面的示例获取给定 DataSet 的 DataTable。如果没有 DataSet 的当前表，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。此示例假定已创建了 DataSet 和 DataTableMappingCollection 集合。 下面的示例获取给定 DataSet 的 DataTable。如果没有 DataSet 的当前表，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。此示例假定已创建了 DataSet 和 DataTableMappingCollection 集合。 下面的示例获取给定 DataSet 的 DataTable。如果没有 DataSet 的当前表，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。此示例假定已创建了 DataSet 和 DataTableMappingCollection 集合。

Public Sub CreateDataTable()
    ' ...
    ' create dataSet and mapping
    ' ...
    Dim table As DataTable = mapping.GetDataTableBySchemaAction _
       (dataSet, MissingSchemaAction.Ignore)
End Sub

public void CreateDataTable()
{
    // ...
    // create dataSet and mapping
    // ...
    DataTable table = mapping.GetDataTableBySchemaAction
        (dataSet, MissingSchemaAction.Ignore);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping ..::.ICloneable ..::.Clone 方法

DataTableMapping
.
.
::
.
ICloneable
.
.
::
.
Clone 方法
DataTableMapping 类

创建作为当前实例副本的新对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function Clone As Object Implements ICloneable.Clone
Object ICloneable.Clone()
private:
virtual Object^ Clone() sealed = ICloneable::Clone
private abstract Clone : unit -> Object
private override Clone : unit -> Object

返回值

类型： System Object
作为当前实例的副本的新对象。

实现

此成员是显式的接口成员实现。它只能在 DataTableMapping 实例被强制转换为 ICloneable 接口时使用。 此成员是显式的接口成员实现。它只能在 DataTableMapping 实例被强制转换为 ICloneable 接口时使用。

有关更多信息，请参见 Clone。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping ..::.MemberwiseClone 方法

DataTableMapping
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMapping 类

名称 说明
页首

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping ..::.ToString 方法

DataTableMapping
.
.
::
.
ToString 方法
DataTableMapping 类

将当前的 SourceTable 名称转换为字符串。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前的 SourceTable 名称作为字符串。

下面的示例创建一个 DataTableMapping 对象并将其添加到 DataTableMappingCollection 集合中。然后，它通知用户已将映射添加到集合，并显示其父映射。 下面的示例创建一个 DataTableMapping 对象并将其添加到 DataTableMappingCollection 集合中。然后，它通知用户已将映射添加到集合，并显示其父映射。

Public Sub AddDataTableMapping()
    ' ...
    ' create mappings
    ' ...
    Dim mapping As New DataTableMapping("Categories", "DataCategories")
    mappings.Add(CType(mapping, Object))
    Console.WriteLine("Table " & mapping.ToString() & " added to " _
       & "table mapping collection " & mappings.ToString())
End Sub

public void AddDataTableMapping()
{
    // ...
    // create mappings
    // ...
    DataTableMapping mapping =
        new DataTableMapping("Categories","DataCategories");
    mappings.Add((Object) mapping);
    Console.WriteLine("Table " + mapping.ToString() + " added to " +
        "table mapping collection " + mappings.ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping 属性

DataTableMapping 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMapping 类

DataTableMapping 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataTableMapping 类
System.Data.Common 命名空间


DataTableMapping ..::.ColumnMappings 属性

DataTableMapping
.
.
::
.
ColumnMappings 属性
DataTableMapping 类

获取 DataTable 的 DataColumnMappingCollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property ColumnMappings As DataColumnMappingCollection
    Get
public DataColumnMappingCollection ColumnMappings { get; }
public:
property DataColumnMappingCollection^ ColumnMappings {
    DataColumnMappingCollection^ get ();
}
member ColumnMappings : DataColumnMappingCollection

属性值

类型： System.Data.Common DataColumnMappingCollection
DataColumnMappingCollection。

下面的示例创建一个 DataTableMapping 对象，设置它的一些属性，并将它的 ColumnMappings 复制到一个数组。此示例假定已经创建了 DataColumnMappingCollection。 下面的示例创建一个 DataTableMapping 对象，设置它的一些属性，并将它的 ColumnMappings 复制到一个数组。此示例假定已经创建了 DataColumnMappingCollection。

Public Sub CreateDataTableMapping()
    ' ...
    ' create mappings
    ' ...
    Dim columns() As DataColumnMapping
    ' Copy mappings to array
    mappings.CopyTo(columns, 0)
    Dim mapping As New DataTableMapping _
       ("Categories", "DataCategories", columns)
End Sub

public void CreateDataTableMapping()
{
    // ...
    // create mappings
    // ...
    DataColumnMapping[] columns = {};
    // Copy mappings to array
    mappings.CopyTo(columns, 0);
    DataTableMapping mapping =
        new DataTableMapping("Categories", "DataCategories", columns);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping ..::.DataSetTable 属性

DataTableMapping
.
.
::
.
DataSetTable 属性
DataTableMapping 类

获取或设置 DataSet 中的表名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property DataSetTable As String
    Get
    Set
public string DataSetTable { get; set; }
public:
virtual property String^ DataSetTable {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract DataSetTable : string with get, set
override DataSetTable : string with get, set

属性值

类型： System String
DataSet 中的表名称。

实现

下面的示例创建一个 DataTableMapping 对象并设置它的一些属性。

Public Sub CreateDataTableMapping()
    Dim mapping As New DataTableMapping()
    mapping.SourceTable = "Categories"
    mapping.DataSetTable = "DataCategories"
End Sub

public void CreateDataTableMapping()
{
    DataTableMapping mapping = new DataTableMapping();
    mapping.SourceTable = "Categories";
    mapping.DataSetTable = "DataCategories";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping ..::.ITableMapping ..::.ColumnMappings 属性

DataTableMapping
.
.
::
.
ITableMapping
.
.
::
.
ColumnMappings 属性
DataTableMapping 类

获取 DataTable 的派生 DataColumnMappingCollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property ColumnMappings As IColumnMappingCollection
    Implements ITableMapping.ColumnMappings
    Get
IColumnMappingCollection ITableMapping.ColumnMappings { get; }
private:
virtual property IColumnMappingCollection^ ColumnMappings {
    IColumnMappingCollection^ get () sealed = ITableMapping::ColumnMappings::get;
}
private abstract ColumnMappings : IColumnMappingCollection
private override ColumnMappings : IColumnMappingCollection

属性值

类型： System.Data IColumnMappingCollection
一个 DataColumnMappingCollection。

实现

此成员是显式的接口成员实现。它只能在 DataTableMapping 实例被强制转换为 ITableMapping 接口时使用。 此成员是显式的接口成员实现。它只能在 DataTableMapping 实例被强制转换为 ITableMapping 接口时使用。

有关更多信息，请参见 ITableMapping..::.ColumnMappings。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMapping ..::.SourceTable 属性

DataTableMapping
.
.
::
.
SourceTable 属性
DataTableMapping 类

获取或设置数据源中区分大小写的源表名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property SourceTable As String
    Get
    Set
public string SourceTable { get; set; }
public:
virtual property String^ SourceTable {
    String^ get () sealed;
    void set (String^ value) sealed;
}
abstract SourceTable : string with get, set
override SourceTable : string with get, set

属性值

类型： System String
数据源中区分大小写的源表名称。

实现

下面的示例创建一个 DataTableMapping 对象并设置它的一些属性。

Public Sub CreateDataTableMapping()
    Dim mapping As New DataTableMapping()
    mapping.SourceTable = "Categories"
    mapping.DataSetTable = "DataCategories"
End Sub

public void CreateDataTableMapping()
{
    DataTableMapping mapping = new DataTableMapping();
    mapping.SourceTable = "Categories";
    mapping.DataSetTable = "DataCategories";
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMapping 类
DataTableMapping 成员
System.Data.Common 命名空间


DataTableMappingCollection 类

DataTableMappingCollection 类
成员

DataTableMapping 对象的集合。无法继承此类。 DataTableMapping 对象的集合。无法继承此类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<ListBindableAttribute(False)> _
Public NotInheritable Class DataTableMappingCollection _
    Inherits MarshalByRefObject _
    Implements ITableMappingCollection, IList, ICollection, IEnumerable
[ListBindableAttribute(false)]
public sealed class DataTableMappingCollection : MarshalByRefObject,
    ITableMappingCollection, IList, ICollection, IEnumerable
[ListBindableAttribute(false)]
public ref class DataTableMappingCollection sealed : public MarshalByRefObject,
    ITableMappingCollection, IList, ICollection, IEnumerable
[<SealedAttribute>]
[<ListBindableAttribute(false)>]
type DataTableMappingCollection =
    class
        inherit MarshalByRefObject
        interface ITableMappingCollection
        interface IList
        interface ICollection
        interface IEnumerable
    end

下面的示例使用 OleDbDataAdapter 将 DataTableMapping 对象 Add 添加到其 TableMappings 集合，然后显示那些已映射的源表的列表。此示例假定已经创建了 OleDbDataAdapter。 下面的示例使用 OleDbDataAdapter 将 DataTableMapping 对象 Add 添加到其 TableMappings 集合，然后显示那些已映射的源表的列表。此示例假定已经创建了 OleDbDataAdapter。

Public Sub ShowTableMappings()
    ' ...
    ' create adapter
    ' ...
    adapter.TableMappings.Add("Categories", "DataCategories")
    adapter.TableMappings.Add("Orders", "DataOrders")
    adapter.TableMappings.Add("Products", "DataProducts")
    Dim message As String = "Table Mappings:" & ControlChars.Cr
    Dim i As Integer
    For i = 0 To adapter.TableMappings.Count - 1
        message &= i.ToString() & " " _
           & adapter.TableMappings(i).ToString() & ControlChars.Cr
    Next i
    Console.WriteLine(message)
End Sub

public void ShowTableMappings()
{
    // ...
    // create adapter
    // ...
    adapter.TableMappings.Add("Categories","DataCategories");
    adapter.TableMappings.Add("Orders","DataOrders");
    adapter.TableMappings.Add("Products","DataProducts");
    string message = "Table Mappings:\n";
    for(int i=0;i < adapter.TableMappings.Count;i++)
    {
        message += i.ToString() + " "
            + adapter.TableMappings[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}

System.Data.Common System.Data.Common..::.DataTableMappingCollectionDataTableMappingCollection
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection 成员

DataTableMappingCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

DataTableMapping 对象的集合。无法继承此类。 DataTableMapping 对象的集合。无法继承此类。

DataTableMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataTableMappingCollection 类
System.Data.Common 命名空间


DataTableMappingCollection 构造函数

DataTableMappingCollection 构造函数
DataTableMappingCollection 类

初始化 DataTableMappingCollection 类的新实例。此新实例是空的，即它尚未包含任何 DataTableMapping 对象。 初始化 DataTableMappingCollection 类的新实例。此新实例是空的，即它尚未包含任何 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DataTableMappingCollection()
public:
DataTableMappingCollection()
new : unit -> DataTableMappingCollection

下面的示例创建一个 DataTableMappingCollection，将 DataTableMapping 对象添加到该集合中，并显示一个已映射的源表的列表。

Public Sub CreateTableMappings()
    Dim mappings As New DataTableMappingCollection()
    mappings.Add("Categories", "DataCategories")
    mappings.Add("Orders", "DataOrders")
    mappings.Add("Products", "DataProducts")
    Dim message As String = "TableMappings:" & ControlChars.Cr
    Dim i As Integer
    For i = 0 To mappings.Count - 1
        message &= i.ToString() & " " + mappings(i).ToString() _
           & ControlChars.Cr
    Next i
    Console.WriteLine(message)
End Sub

public void CreateTableMappings()
{
    DataTableMappingCollection mappings =
        new DataTableMappingCollection();
    mappings.Add("Categories","DataCategories");
    mappings.Add("Orders","DataOrders");
    mappings.Add("Products","DataProducts");
    string message = "TableMappings:\n";
    for(int i=0;i < mappings.Count;i++)
    {
        message += i.ToString() + " "
            + mappings[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection 方法

DataTableMappingCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

DataTableMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataTableMappingCollection 类
System.Data.Common 命名空间


DataTableMappingCollection ..::.Add 方法

DataTableMappingCollection
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

将 DataTableMapping 对象添加到集合中。

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.Add 方法 (Object)

DataTableMappingCollection
.
.
::
.
Add 方法 (Object)
DataTableMappingCollection 类

添加一个 Object，它是集合的表映射。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    value As Object _
) As Integer
public int Add(
    Object value
)
public:
virtual int Add(
    Object^ value
) sealed
abstract Add :
        value:Object -> int
override Add :
        value:Object -> int

参数

value
类型： System Object
要添加到集合中的 DataTableMapping 对象。

返回值

类型： System Int32
添加到集合中的 DataTableMapping 对象的索引。

实现

异常 | 条件
InvalidCastException | 传入的对象不是 DataTableMapping 对象。

下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。

Public Sub ChangedMyMind()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains(CType(mapping, Object)) Then
        mappings.Remove(CType(mapping, Object))
    Else
        mappings.Add(CType(mapping, Object))
        Console.WriteLine("Index of new mapping: " _
           + mappings.IndexOf(CType(mapping, Object)).ToString())
    End If
End Sub

public void ChangedMyMind()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains((Object) mapping))
        mappings.Remove((Object) mapping);
    else
    {
        mappings.Add((Object) mapping);
        Console.WriteLine("Index of new mapping: "
            + mappings.IndexOf((Object) mapping));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Add 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.Add 方法 (String, String)

DataTableMappingCollection
.
.
::
.
Add 方法 (String, String)
DataTableMappingCollection 类

当给定源表名称和 DataSet 表名称时，将 DataTableMapping 对象添加到集合中。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Add ( _
    sourceTable As String, _
    dataSetTable As String _
) As DataTableMapping
public DataTableMapping Add(
    string sourceTable,
    string dataSetTable
)
public:
DataTableMapping^ Add(
    String^ sourceTable,
    String^ dataSetTable
)
member Add :
        sourceTable:string *
        dataSetTable:string -> DataTableMapping

参数

sourceTable
类型： System String
要从中映射的源表的区分大小写的名称。
dataSetTable
类型： System String
要映射到的 DataSet 表的名称（该名称不区分大小写）。

返回值

类型： System.Data.Common DataTableMapping
已添加到集合中的 DataTableMapping 对象。

下面的示例创建一个 DataTableMappingCollection，将 DataTableMapping 对象添加到该集合中，并显示一个已映射的源表的列表。

Public Sub CreateTableMappings()
    Dim mappings As New DataTableMappingCollection()
    mappings.Add("Categories", "DataCategories")
    mappings.Add("Orders", "DataOrders")
    mappings.Add("Products", "DataProducts")
    Dim message As String = "TableMappings:" & ControlChars.Cr
    Dim i As Integer
    For i = 0 To mappings.Count - 1
        message &= i.ToString() & " " + mappings(i).ToString() _
           & ControlChars.Cr
    Next i
    Console.WriteLine(message)
End Sub

public void CreateTableMappings()
{
    DataTableMappingCollection mappings =
        new DataTableMappingCollection();
    mappings.Add("Categories","DataCategories");
    mappings.Add("Orders","DataOrders");
    mappings.Add("Products","DataProducts");
    string message = "TableMappings:\n";
    for(int i=0;i < mappings.Count;i++)
    {
        message += i.ToString() + " "
            + mappings[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Add 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.AddRange 方法

DataTableMappingCollection
.
.
::
.
AddRange 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

将给定数组的元素复制到该集合的末尾。

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.AddRange 方法 (Array)

DataTableMappingCollection
.
.
::
.
AddRange 方法 (Array)
DataTableMappingCollection 类

将指定 Array 的元素复制到集合末尾。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub AddRange ( _
    values As Array _
)
public void AddRange(
    Array values
)
public:
void AddRange(
    Array^ values
)
member AddRange :
        values:Array -> unit

参数

values
类型： System Array
要添加到集合的值的 Array。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
AddRange 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.AddRange 方法 ( array<DataTableMapping >[]()[])

DataTableMappingCollection
.
.
::
.
AddRange 方法 (
array<
DataTableMapping
>
[]
()
[]
)
DataTableMappingCollection 类

将指定的 DataTableMapping 数组的元素复制到集合末尾。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub AddRange ( _
    values As DataTableMapping() _
)
public void AddRange(
    DataTableMapping[] values
)
public:
void AddRange(
    array<DataTableMapping^>^ values
)
member AddRange :
        values:DataTableMapping[] -> unit

参数

values
类型：
array<
System.Data.Common DataTableMapping
>
[]
()
[]

要添加到集合中的 DataTableMapping 对象的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
AddRange 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.Clear 方法

DataTableMappingCollection
.
.
::
.
Clear 方法
DataTableMappingCollection 类

从集合中移除所有 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Clear
public void Clear()
public:
virtual void Clear() sealed
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

下面的示例使用 CopyTo 方法将集合导出到 DataTableMapping 对象的数组。它然后清除该集合，并且在参数不再持续时返回 true。此示例假定已经创建了 DataTableMappingCollection。 下面的示例使用 CopyTo 方法将集合导出到 DataTableMapping 对象的数组。它然后清除该集合，并且在参数不再持续时返回 true。此示例假定已经创建了 DataTableMappingCollection。 下面的示例使用 CopyTo 方法将集合导出到 DataTableMapping 对象的数组。它然后清除该集合，并且在参数不再持续时返回 true。此示例假定已经创建了 DataTableMappingCollection。

Public Sub PushIntoArray()
    ' ...
    ' create DataTableMappingCollection collection mappings
    ' ...
    Dim tables() As DataTableMapping
    mappings.CopyTo(tables, 0)
    mappings.Clear()
End Sub

public void PushIntoArray()
{
    // ...
    // create DataTableMappingCollection collection mappings
    // ...
    DataTableMapping[] tables = {};
    mappings.CopyTo(tables, 0);
    mappings.Clear();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.Contains 方法

DataTableMappingCollection
.
.
::
.
Contains 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

获取一个值，该值指示集合中是否存在特定的 DataTableMapping 对象。

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.Contains 方法 (Object)

DataTableMappingCollection
.
.
::
.
Contains 方法 (Object)
DataTableMappingCollection 类

获取一个值，该值指示集合中是否存在给定的 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    value As Object _
) As Boolean
public bool Contains(
    Object value
)
public:
virtual bool Contains(
    Object^ value
) sealed
abstract Contains :
        value:Object -> bool
override Contains :
        value:Object -> bool

参数

value
类型： System Object
一个 Object，它是 DataTableMapping。

返回值

类型： System Boolean
如果此集合包含指定的 DataTableMapping，则为 true；否则为 false。

实现

下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。

Public Sub ChangedMyMind()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains(CType(mapping, Object)) Then
        mappings.Remove(CType(mapping, Object))
    Else
        mappings.Add(CType(mapping, Object))
        Console.WriteLine("Index of new mapping: " _
           & mappings.IndexOf(CType(mapping, Object)).ToString())
    End If
End Sub

public void ChangedMyMind()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains((Object) mapping))
        mappings.Remove((Object) mapping);
    else
    {
        mappings.Add((Object) mapping);
        Console.WriteLine("Index of new mapping: "
            + mappings.IndexOf((Object) mapping));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Contains 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.Contains 方法 (String)

DataTableMappingCollection
.
.
::
.
Contains 方法 (String)
DataTableMappingCollection 类

获取一个值，该值指示集合中是否存在具有指定源表名称的 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Contains ( _
    value As String _
) As Boolean
public bool Contains(
    string value
)
public:
virtual bool Contains(
    String^ value
) sealed
abstract Contains :
        value:string -> bool
override Contains :
        value:string -> bool

参数

value
类型： System String
包含 DataTableMapping 对象的区分大小写的源表名称。

返回值

类型： System Boolean
如果该集合包含具有此源表名称的 DataTableMapping 对象，则为 true；否则为 false。

实现

下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。

Public Sub FindDataTableMapping()
    ' ...
    ' create mappings
    ' ...
    If Not mappings.Contains("Categories") Then
        Console.WriteLine("Error: no such table in collection")
    Else
        Console.WriteLine("Name: " & mappings("Categories").ToString() _
           & ControlChars.Cr + "Index: " _
           & mappings.IndexOf("Categories").ToString())
    End If
End Sub

public void FindDataTableMapping()
{
    // ...
    // create mappings
    // ...
    if (!mappings.Contains("Categories"))
        Console.WriteLine("Error: no such table in collection");
    else
        Console.WriteLine
            ("Name: " + mappings["Categories"].ToString() + "\n"
            + "Index: " + mappings.IndexOf("Categories").ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Contains 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.CopyTo 方法

DataTableMappingCollection
.
.
::
.
CopyTo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

将给定集合的元素复制到指定的数组。

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.CopyTo 方法 (Array, Int32)

DataTableMappingCollection
.
.
::
.
CopyTo 方法 (Array, Int32)
DataTableMappingCollection 类

将 DataTableMappingCollection 的元素复制到指定的数组。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
public void CopyTo(
    Array array,
    int index
)
public:
virtual void CopyTo(
    Array^ array,
    int index
) sealed
abstract CopyTo :
        array:Array *
        index:int -> unit
override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
要将 DataTableMappingCollection 元素复制到其中的 Array。
index
类型： System Int32
数组的起始索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
CopyTo 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.CopyTo 方法 ( array<DataTableMapping >[]()[], Int32)

DataTableMappingCollection
.
.
::
.
CopyTo 方法 (
array<
DataTableMapping
>
[]
()
[]
, Int32)
DataTableMappingCollection 类

将 DataTableMapping 的元素复制到指定的数组。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyTo ( _
    array As DataTableMapping(), _
    index As Integer _
)
public void CopyTo(
    DataTableMapping[] array,
    int index
)
public:
void CopyTo(
    array<DataTableMapping^>^ array,
    int index
)
member CopyTo :
        array:DataTableMapping[] *
        index:int -> unit

参数

array
类型：
array<
System.Data.Common DataTableMapping
>
[]
()
[]

要将 DataTableMappingCollection 元素复制到的 DataTableMapping。
index
类型： System Int32
数组的起始索引。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
CopyTo 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.GetByDataSetTable 方法

DataTableMappingCollection
.
.
::
.
GetByDataSetTable 方法
DataTableMappingCollection 类

获取具有指定 DataSet 表名称的 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetByDataSetTable ( _
    dataSetTable As String _
) As DataTableMapping
public DataTableMapping GetByDataSetTable(
    string dataSetTable
)
public:
DataTableMapping^ GetByDataSetTable(
    String^ dataSetTable
)
member GetByDataSetTable :
        dataSetTable:string -> DataTableMapping

参数

dataSetTable
类型： System String
要查找的 DataSet 表的名称（该名称不区分大小写）。

返回值

类型： System.Data.Common DataTableMapping
具有指定的 DataSet 表名称的 DataTableMapping 对象。

下面的示例在集合中搜索 DataTableMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。

Public Sub FindDataTableMapping()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.IndexOfDataSetTable("datacategories") <> - 1 Then
        mapping = mappings.GetByDataSetTable("datacategories")
    End If
End Sub

public void FindDataTableMapping()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.IndexOfDataSetTable("datacategories") != -1)
        mapping = mappings.GetByDataSetTable("datacategories");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.GetEnumerator 方法

DataTableMappingCollection
.
.
::
.
GetEnumerator 方法
DataTableMappingCollection 类

获取可循环访问集合的枚举数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetEnumerator As IEnumerator
public IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator
override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
可用于循环访问集合的 IEnumerator。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.GetTableMappingBySchemaAction 方法

DataTableMappingCollection
.
.
::
.
GetTableMappingBySchemaAction 方法
DataTableMappingCollection 类

使用给定的 MissingMappingAction，获取具有指定源表名称和 DataSet 表名称的 DataColumnMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GetTableMappingBySchemaAction ( _
    tableMappings As DataTableMappingCollection, _
    sourceTable As String, _
    dataSetTable As String, _
    mappingAction As MissingMappingAction _
) As DataTableMapping
public static DataTableMapping GetTableMappingBySchemaAction(
    DataTableMappingCollection tableMappings,
    string sourceTable,
    string dataSetTable,
    MissingMappingAction mappingAction
)
public:
static DataTableMapping^ GetTableMappingBySchemaAction(
    DataTableMappingCollection^ tableMappings,
    String^ sourceTable,
    String^ dataSetTable,
    MissingMappingAction mappingAction
)
static member GetTableMappingBySchemaAction :
        tableMappings:DataTableMappingCollection *
        sourceTable:string *
        dataSetTable:string *
        mappingAction:MissingMappingAction -> DataTableMapping

参数

tableMappings
类型： System.Data.Common DataTableMappingCollection
要搜索的 DataTableMappingCollection 集合。
sourceTable
类型： System String
已映射的源表的区分大小写的名称。
dataSetTable
类型： System String
已映射的 DataSet 表的名称（该名称不区分大小写）。
mappingAction
类型： System.Data MissingMappingAction
MissingMappingAction 值之一。

返回值

类型： System.Data.Common DataTableMapping
一个 DataTableMapping 对象。
异常 | 条件
InvalidOperationException | mappingAction 参数设置为 Error，并且未指定任何映射。

如果集合中存在 DataTableMapping，则将其返回。

对于给定的 MissingMappingAction，如果集合中不存在 DataTableMapping，则发生以下操作：

MissingMappingAction | 采取的操作
Passthrough | 创建一个 DataTableMapping 对象，并将给定的 sourceTable 作为源表名称，而将 dataSetTable 作为 DataSet 表名称。创建的 DataTableMapping 对象不添加到集合中。 创建一个 DataTableMapping 对象，并将给定的 sourceTable 作为源表名称，而将 dataSetTable 作为 DataSet 表名称。创建的 DataTableMapping 对象不添加到集合中。
Error | 生成异常。忽略 dataSetTable 参数。 生成异常。忽略 dataSetTable 参数。
Ignore | 获取 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。忽略 dataSetTable 参数。 获取 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。忽略 dataSetTable 参数。

下面的示例在集合中搜索具有给定源表名称的 DataTableMapping 对象。如果该对象存在，则将其返回。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索具有给定源表名称的 DataTableMapping 对象。如果该对象存在，则将其返回。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索具有给定源表名称的 DataTableMapping 对象。如果该对象存在，则将其返回。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。

Public Sub FindDataTableMapping()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains("Categories") Then
        mapping = _
           DataTableMappingCollection.GetTableMappingBySchemaAction _
           (mappings, "Categories", "", MissingMappingAction.Ignore)
    End If
End Sub

public void FindDataTableMapping()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains("Categories"))
    {
        mapping = DataTableMappingCollection.GetTableMappingBySchemaAction
            (mappings, "Categories", "", MissingMappingAction.Ignore);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.IndexOf 方法

DataTableMappingCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

获取指定的 DataTableMapping 对象在集合中的位置。

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.IndexOf 方法 (Object)

DataTableMappingCollection
.
.
::
.
IndexOf 方法 (Object)
DataTableMappingCollection 类

获取指定的 DataTableMapping 对象在集合中的位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    value As Object _
) As Integer
public int IndexOf(
    Object value
)
public:
virtual int IndexOf(
    Object^ value
) sealed
abstract IndexOf :
        value:Object -> int
override IndexOf :
        value:Object -> int

参数

value
类型： System Object
一个 Object，它是要查找的 DataTableMapping 对象。

返回值

类型： System Int32
指定的 DataTableMapping 对象在集合中从零开始的位置。

实现

下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。

Public Sub ChangedMyMind()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains(CType(mapping, Object)) Then
        mappings.Remove(CType(mapping, Object))
    Else
        mappings.Add(CType(mapping, Object))
        Console.WriteLine("Index of new mapping: " _
           & mappings.IndexOf(CType(mapping, Object)).ToString())
    End If
End Sub

public void ChangedMyMind()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains((Object) mapping))
        mappings.Remove((Object) mapping);
    else
    {
        mappings.Add((Object) mapping);
        Console.WriteLine("Index of new mapping: "
            + mappings.IndexOf((Object) mapping));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
IndexOf 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.IndexOf 方法 (String)

DataTableMappingCollection
.
.
::
.
IndexOf 方法 (String)
DataTableMappingCollection 类

获取具有指定源表名称的 DataTableMapping 对象的位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOf ( _
    sourceTable As String _
) As Integer
public int IndexOf(
    string sourceTable
)
public:
virtual int IndexOf(
    String^ sourceTable
) sealed
abstract IndexOf :
        sourceTable:string -> int
override IndexOf :
        sourceTable:string -> int

参数

sourceTable
类型： System String
源表的区分大小写的名称。

返回值

类型： System Int32
具有指定源表名称的 DataTableMapping 对象的从零开始的位置。

实现

下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。

Public Sub FindDataTableMapping()
    ' ...
    ' create mappings
    ' ...
    If Not mappings.Contains("Categories") Then
        Console.WriteLine("Error: no such table in collection")
    Else
        Console.WriteLine("Name: " & mappings("Categories").ToString() _
           & ControlChars.Cr + "Index: " _
           & mappings.IndexOf("Categories").ToString())
    End If
End Sub

public void FindDataTableMapping()
{
    // ...
    // create mappings
    // ...
    if (!mappings.Contains("Categories"))
        Console.WriteLine("Error: no such table in collection");
    else
        Console.WriteLine
            ("Name: " + mappings["Categories"].ToString() + "\n"
            + "Index: " + mappings.IndexOf("Categories").ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
IndexOf 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.IndexOfDataSetTable 方法

DataTableMappingCollection
.
.
::
.
IndexOfDataSetTable 方法
DataTableMappingCollection 类

获取具有指定 DataSet 表名称的 DataTableMapping 对象的位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function IndexOfDataSetTable ( _
    dataSetTable As String _
) As Integer
public int IndexOfDataSetTable(
    string dataSetTable
)
public:
int IndexOfDataSetTable(
    String^ dataSetTable
)
member IndexOfDataSetTable :
        dataSetTable:string -> int

参数

dataSetTable
类型： System String
要查找的 DataSet 表的名称（该名称不区分大小写）。

返回值

类型： System Int32
具有给定 DataSet 表名称的 DataTableMapping 对象的从零开始的位置；或者，如果集合中不存在 DataTableMapping 对象，则为 -1。

下面的示例在集合中搜索 DataTableMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果该对象存在，则将其返回。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。

Public Sub FindDataTableMapping()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.IndexOfDataSetTable("datacategories") <> - 1 Then
        mapping = mappings.GetByDataSetTable("datacategories")
    End If
End Sub

public void FindDataTableMapping()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.IndexOfDataSetTable("datacategories") != -1)
        mapping = mappings.GetByDataSetTable("datacategories");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.Insert 方法

DataTableMappingCollection
.
.
::
.
Insert 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

将一个对象插入 DataTableMappingCollection 中的指定索引处。

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.Insert 方法 (Int32, DataTableMapping)

DataTableMappingCollection
.
.
::
.
Insert 方法 (Int32, DataTableMapping)
DataTableMappingCollection 类

将 DataTableMapping 对象插入 DataTableMappingCollection 中的指定索引处。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Insert ( _
    index As Integer, _
    value As DataTableMapping _
)
public void Insert(
    int index,
    DataTableMapping value
)
public:
void Insert(
    int index,
    DataTableMapping^ value
)
member Insert :
        index:int *
        value:DataTableMapping -> unit

参数

index
类型： System Int32
要插入的 DataTableMapping 对象的从零开始的索引。
value
类型： System.Data.Common DataTableMapping
要插入的 DataTableMapping 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Insert 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.Insert 方法 (Int32, Object)

DataTableMappingCollection
.
.
::
.
Insert 方法 (Int32, Object)
DataTableMappingCollection 类

将 DataTableMapping 对象插入 DataTableMappingCollection 中的指定索引处。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Insert ( _
    index As Integer, _
    value As Object _
)
public void Insert(
    int index,
    Object value
)
public:
virtual void Insert(
    int index,
    Object^ value
) sealed
abstract Insert :
        index:int *
        value:Object -> unit
override Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
要插入的 DataTableMapping 对象的从零开始的索引。
value
类型： System Object
要插入的 DataTableMapping 对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Insert 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.ITableMappingCollection ..::.Add 方法

DataTableMappingCollection
.
.
::
.
ITableMappingCollection
.
.
::
.
Add 方法
DataTableMappingCollection 类

向集合添加表映射。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function Add ( _
    sourceTableName As String, _
    dataSetTableName As String _
) As ITableMapping Implements ITableMappingCollection.Add
ITableMapping ITableMappingCollection.Add(
    string sourceTableName,
    string dataSetTableName
)
private:
virtual ITableMapping^ Add(
    String^ sourceTableName,
    String^ dataSetTableName
) sealed = ITableMappingCollection::Add
private abstract Add :
        sourceTableName:string *
        dataSetTableName:string -> ITableMapping
private override Add :
        sourceTableName:string *
        dataSetTableName:string -> ITableMapping

参数

sourceTableName
类型： System String
源表的区分大小写的名称。
dataSetTableName
类型： System String
DataSet 表的名称。

返回值

类型： System.Data ITableMapping
对新映射的 ITableMapping 对象的引用。

实现

此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 ITableMappingCollection 接口时使用。 此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 ITableMappingCollection 接口时使用。

有关更多信息，请参见 Add。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.ITableMappingCollection ..::.GetByDataSetTable 方法

DataTableMappingCollection
.
.
::
.
ITableMappingCollection
.
.
::
.
GetByDataSetTable 方法
DataTableMappingCollection 类

获取具有指定的 DataSet 表名称的 TableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetByDataSetTable ( _
    dataSetTableName As String _
) As ITableMapping Implements ITableMappingCollection.GetByDataSetTable
ITableMapping ITableMappingCollection.GetByDataSetTable(
    string dataSetTableName
)
private:
virtual ITableMapping^ GetByDataSetTable(
    String^ dataSetTableName
) sealed = ITableMappingCollection::GetByDataSetTable
private abstract GetByDataSetTable :
        dataSetTableName:string -> ITableMapping
private override GetByDataSetTable :
        dataSetTableName:string -> ITableMapping

参数

dataSetTableName
类型： System String
集合内的 DataSet 表的名称。

返回值

类型： System.Data ITableMapping
具有指定的 DataSet 表名称的 TableMapping 对象。

实现

此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 ITableMappingCollection 接口时使用。 此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 ITableMappingCollection 接口时使用。

有关更多信息，请参见 ITableMappingCollection..::.GetByDataSetTable。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.MemberwiseClone 方法

DataTableMappingCollection
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.Remove 方法

DataTableMappingCollection
.
.
::
.
Remove 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

从集合中移除指定的对象。

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.Remove 方法 (DataTableMapping)

DataTableMappingCollection
.
.
::
.
Remove 方法 (DataTableMapping)
DataTableMappingCollection 类

从集合中移除指定的 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    value As DataTableMapping _
)
public void Remove(
    DataTableMapping value
)
public:
void Remove(
    DataTableMapping^ value
)
member Remove :
        value:DataTableMapping -> unit

参数

value
类型： System.Data.Common DataTableMapping
要移除的 DataTableMapping 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Remove 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.Remove 方法 (Object)

DataTableMappingCollection
.
.
::
.
Remove 方法 (Object)
DataTableMappingCollection 类

从集合中移除指定的 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Remove ( _
    value As Object _
)
public void Remove(
    Object value
)
public:
virtual void Remove(
    Object^ value
) sealed
abstract Remove :
        value:Object -> unit
override Remove :
        value:Object -> unit

参数

value
类型： System Object
要移除的 DataTableMapping 对象。

实现

异常 | 条件
InvalidCastException | 指定的对象不是一个 DataTableMapping 对象。
ArgumentException | 指定的对象不在集合中。

下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。 下面的示例在集合中搜索 DataTableMapping。如果集合中存在该映射，则将其移除。如果集合中不存在该映射，则将其添加到集合中并显示其索引。此示例假定已经创建了 DataTableMappingCollection 集合和 DataTableMapping 对象。

Public Sub ChangedMyMind()
    ' ...
    ' create mappings and mapping
    ' ...
    If mappings.Contains(CType(mapping, Object)) Then
        mappings.Remove(CType(mapping, Object))
    Else
        mappings.Add(CType(mapping, Object))
        Console.WriteLine("Index of new mapping: " _
           + mappings.IndexOf(CType(mapping, Object)).ToString())
    End If
End Sub

public void ChangedMyMind()
{
    // ...
    // create mappings and mapping
    // ...
    if (mappings.Contains((Object) mapping))
        mappings.Remove((Object) mapping);
    else
    {
        mappings.Add((Object) mapping);
        Console.WriteLine("Index of new mapping: "
            + mappings.IndexOf((Object) mapping));
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Remove 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.RemoveAt 方法

DataTableMappingCollection
.
.
::
.
RemoveAt 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

从集合中移除指定的 DataTableMapping 对象。

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.RemoveAt 方法 (Int32)

DataTableMappingCollection
.
.
::
.
RemoveAt 方法 (Int32)
DataTableMappingCollection 类

从集合中移除位于指定索引位置的 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub RemoveAt ( _
    index As Integer _
)
public void RemoveAt(
    int index
)
public:
virtual void RemoveAt(
    int index
) sealed
abstract RemoveAt :
        index:int -> unit
override RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的 DataTableMapping 对象的从零开始的索引。

实现

异常 | 条件
IndexOutOfRangeException | 具有指定索引的 DataTableMapping 对象不存在。

下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则移除该映射。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则移除该映射。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则移除该映射。此示例假定已经创建了 DataTableMappingCollection 集合。

Public Sub RemoveDataTableMapping()
    ' ...
    ' create mappings
    ' ...
    If mappings.Contains(7) Then
        mappings.RemoveAt(7)
    End If
End Sub

public void RemoveDataTableMapping()
{
    // ...
    // create mappings
    // ...
    if (mappings.Contains(7))
        mappings.RemoveAt(7);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
RemoveAt 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.RemoveAt 方法 (String)

DataTableMappingCollection
.
.
::
.
RemoveAt 方法 (String)
DataTableMappingCollection 类

从集合中移除具有指定源表名称的 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub RemoveAt ( _
    sourceTable As String _
)
public void RemoveAt(
    string sourceTable
)
public:
virtual void RemoveAt(
    String^ sourceTable
) sealed
abstract RemoveAt :
        sourceTable:string -> unit
override RemoveAt :
        sourceTable:string -> unit

参数

sourceTable
类型： System String
要查找的区分大小写的源表名称。

实现

异常 | 条件
IndexOutOfRangeException | 具有指定源表名称的 DataTableMapping 对象不存在。

下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则移除该映射。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则移除该映射。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则移除该映射。此示例假定已经创建了 DataTableMappingCollection 集合。

Public Sub RemoveDataTableMapping()
    ' ...
    ' create mappings
    ' ...
    If mappings.Contains("Categories") Then
        mappings.RemoveAt("Categories")
    End If
End Sub

public void RemoveDataTableMapping()
{
    // ...
    // create mappings
    // ...
    if (mappings.Contains("Categories"))
        mappings.RemoveAt("Categories");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
RemoveAt 重载
System.Data.Common 命名空间


DataTableMappingCollection 属性

DataTableMappingCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

DataTableMappingCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataTableMappingCollection 类
System.Data.Common 命名空间


DataTableMappingCollection ..::.Count 属性

DataTableMappingCollection
.
.
::
.
Count 属性
DataTableMappingCollection 类

获取集合中的 DataTableMapping 对象数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property Count As Integer
    Get
[BrowsableAttribute(false)]
public int Count { get; }
[BrowsableAttribute(false)]
public:
virtual property int Count {
    int get () sealed;
}
[<BrowsableAttribute(false)>]
abstract Count : int
[<BrowsableAttribute(false)>]
override Count : int

属性值

类型： System Int32
集合中的 DataTableMapping 对象数。

实现

下面的示例创建一个 DataTableMappingCollection，将 DataTableMapping 对象添加到该集合中，并显示一个已映射的源表的列表。

Public Sub CreateTableMappings()
    Dim mappings As New DataTableMappingCollection()
    mappings.Add("Categories", "DataCategories")
    mappings.Add("Orders", "DataOrders")
    mappings.Add("Products", "DataProducts")
    Dim message As String = "TableMappings:" + ControlChars.Cr
    Dim i As Integer
    For i = 0 To mappings.Count - 1
        message &= i.ToString() & " " & mappings(i).ToString() _
           & ControlChars.Cr
    Next i
    Console.WriteLine(message)
End Sub

public void CreateTableMappings()
{
    DataTableMappingCollection mappings =
        new DataTableMappingCollection();
    mappings.Add("Categories","DataCategories");
    mappings.Add("Orders","DataOrders");
    mappings.Add("Products","DataProducts");
    string message = "TableMappings:\n";
    for(int i=0;i < mappings.Count;i++)
    {
        message += i.ToString() + " "
            + mappings[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.ICollection ..::.IsSynchronized 属性

DataTableMappingCollection
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
DataTableMappingCollection 类

获取一个值，该值指示是否同步对 ICollection 的访问（线程安全）。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
如果对 ICollection 的访问是同步的（线程安全），则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 DataTableMappingCollection 实例被强制转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DataTableMappingCollection 实例被强制转换为 ICollection 接口时使用。

有关更多信息，请参见 IsSynchronized。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.ICollection ..::.SyncRoot 属性

DataTableMappingCollection
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
DataTableMappingCollection 类

获取一个对象，可用于同步对 ICollection 的访问。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
可用于同步对 ICollection 的访问的对象。

实现

此成员是显式接口成员的实现。它只能在 DataTableMappingCollection 实例被强制转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DataTableMappingCollection 实例被强制转换为 ICollection 接口时使用。

有关更多信息，请参见 IsSynchronized。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.IList ..::.IsFixedSize 属性

DataTableMappingCollection
.
.
::
.
IList
.
.
::
.
IsFixedSize 属性
DataTableMappingCollection 类

获取一个值，该值指示 IList 是否具有固定大小。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsFixedSize As Boolean
    Implements IList.IsFixedSize
    Get
bool IList.IsFixedSize { get; }
private:
virtual property bool IsFixedSize {
    bool get () sealed = IList::IsFixedSize::get;
}
private abstract IsFixedSize : bool
private override IsFixedSize : bool

属性值

类型： System Boolean
如果 IList 具有固定大小，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 IList 接口时使用。

有关更多信息，请参见 IsFixedSize。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.IList ..::.IsReadOnly 属性

DataTableMappingCollection
.
.
::
.
IList
.
.
::
.
IsReadOnly 属性
DataTableMappingCollection 类

获取一个值，该值指示 IList 是否为只读。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements IList.IsReadOnly
    Get
bool IList.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = IList::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
如果 IList 为只读，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 IList 接口时使用。

有关更多信息，请参见 IsReadOnly。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.IList ..::.Item 属性

DataTableMappingCollection
.
.
::
.
IList
.
.
::
.
Item 属性
DataTableMappingCollection 类

获取或设置集合中指定索引处的项。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Item ( _
    index As Integer _
) As Object Implements IList.Item
    Get
    Set
Object IList.this[
    int index
] { get; set; }
private:
virtual property Object^ Item[int index] {
    Object^ get (int index) sealed = IList::Item::get;
    void set (int index, Object^ value) sealed = IList::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

index
类型： System Int32
要获取或设置的项的从零开始的索引。

属性值

类型： System Object
指定索引处的元素。

实现

此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 IList 接口时使用。

有关更多信息，请参见 Item(Int32)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.ITableMappingCollection ..::.Item 属性

DataTableMappingCollection
.
.
::
.
ITableMappingCollection
.
.
::
.
Item 属性
DataTableMappingCollection 类

获取或设置具有指定的 SourceTable 名称的 ITableMapping 的实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Item ( _
    index As String _
) As Object Implements ITableMappingCollection.Item
    Get
    Set
Object ITableMappingCollection.this[
    string index
] { get; set; }
private:
virtual property Object^ Item[String^ index] {
    Object^ get (String^ index) sealed = ITableMappingCollection::Item::get;
    void set (String^ index, Object^ value) sealed = ITableMappingCollection::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

index
类型： System String
ITableMapping 的 SourceTable 名称。

属性值

类型： System Object
具有指定的 SourceTable 名称的 ITableMapping 的实例。

实现

此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 ITableMappingCollection 接口时使用。 此成员是显式的接口成员实现。它只能在 DataTableMappingCollection 实例被强制转换为 ITableMappingCollection 接口时使用。

有关更多信息，请参见 Item。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.Item 属性

DataTableMappingCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataTableMappingCollection 类

获取或设置指定的 DataTableMapping 对象。

名称 说明
页首

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
System.Data.Common 命名空间


DataTableMappingCollection ..::.Item 属性 (Int32)

DataTableMappingCollection
.
.
::
.
Item 属性 (Int32)
DataTableMappingCollection 类

获取或设置指定索引处的 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property Item ( _
    index As Integer _
) As DataTableMapping
    Get
    Set
[BrowsableAttribute(false)]
public DataTableMapping this[
    int index
] { get; set; }
[BrowsableAttribute(false)]
public:
property DataTableMapping^ Item[int index] {
    DataTableMapping^ get (int index);
    void set (int index, DataTableMapping^ value);
}
[<BrowsableAttribute(false)>]
member Item : DataTableMapping with get, set

参数

index
类型： System Int32
要返回的 DataTableMapping 对象的从零开始的索引。

属性值

类型： System.Data.Common DataTableMapping
位于指定索引处的 DataTableMapping 对象。

下面的示例创建一个 DataTableMappingCollection 集合，将 DataTableMapping 对象添加到该集合中，并显示一个已映射的源表的列表。

Public Sub CreateTableMappings()
    Dim mappings As New DataTableMappingCollection()
    mappings.Add("Categories", "DataCategories")
    mappings.Add("Orders", "DataOrders")
    mappings.Add("Products", "DataProducts")
    Dim message As String = "TableMappings:" + ControlChars.Cr
    Dim i As Integer
    For i = 0 To mappings.Count - 1
        message &= i.ToString() & " " & mappings(i).ToString() _
           & ControlChars.Cr
    Next i
    Console.WriteLine(message)
End Sub

public void CreateTableMappings()
{
    DataTableMappingCollection mappings =
        new DataTableMappingCollection();
    mappings.Add("Categories","DataCategories");
    mappings.Add("Orders","DataOrders");
    mappings.Add("Products","DataProducts");
    string message = "TableMappings:\n";
    for(int i=0;i < mappings.Count;i++)
    {
        message += i.ToString() + " "
            + mappings[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Item 重载
System.Data.Common 命名空间


DataTableMappingCollection ..::.Item 属性 (String)

DataTableMappingCollection
.
.
::
.
Item 属性 (String)
DataTableMappingCollection 类

获取或设置具有指定源表名称的 DataTableMapping 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property Item ( _
    sourceTable As String _
) As DataTableMapping
    Get
    Set
[BrowsableAttribute(false)]
public DataTableMapping this[
    string sourceTable
] { get; set; }
[BrowsableAttribute(false)]
public:
property DataTableMapping^ Item[String^ sourceTable] {
    DataTableMapping^ get (String^ sourceTable);
    void set (String^ sourceTable, DataTableMapping^ value);
}
[<BrowsableAttribute(false)>]
member Item : DataTableMapping with get, set

参数

sourceTable
类型： System String
源表的区分大小写的名称。

属性值

类型： System.Data.Common DataTableMapping
具有指定源表名称的 DataTableMapping 对象。

下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。 下面的示例在 DataTableMappingCollection 集合中搜索具有给定源表名称的 DataTableMapping 对象。如果 DataTableMapping 存在，则该示例显示该映射的名称和索引。如果映射不存在，则该示例显示一个错误。此示例假定已经创建了 DataTableMappingCollection 集合。

Public Sub FindDataTableMapping()
    ' ...
    ' create mappings
    ' ...
    If Not mappings.Contains("Categories") Then
        Console.WriteLine("Error: no such table in collection")
    Else
        Console.WriteLine("Name: " & mappings("Categories").ToString() _
           & ControlChars.Cr + "Index: " _
           & mappings.IndexOf("Categories").ToString())
    End If
End Sub

public void FindDataTableMapping()
{
    // ...
    // create mappings
    // ...
    if (!mappings.Contains("Categories"))
        Console.WriteLine("Error: no such table in collection");
    else
        Console.WriteLine
            ("Name: " + mappings["Categories"].ToString() + "\n"
            + "Index: " + mappings.IndexOf("Categories").ToString());
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DataTableMappingCollection 类
DataTableMappingCollection 成员
Item 重载
System.Data.Common 命名空间


DbCommand 类

DbCommand 类
成员

表示要对数据源执行的 SQL 语句或存储过程。为表示命令的、数据库特有的类提供一个基类。 表示要对数据源执行的 SQL 语句或存储过程。为表示命令的、数据库特有的类提供一个基类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbCommand _
    Inherits Component _
    Implements IDbCommand, IDisposable
public abstract class DbCommand : Component,
    IDbCommand, IDisposable
public ref class DbCommand abstract : public Component,
    IDbCommand, IDisposable
[<AbstractClassAttribute>]
type DbCommand =
    class
        inherit Component
        interface IDbCommand
        interface IDisposable
    end

System.Data.Common System.Data.Common..::.DbCommandDbCommand

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 成员
System.Data.Common 命名空间


DbCommand 成员

DbCommand 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommand 类

表示要对数据源执行的 SQL 语句或存储过程。为表示命令的、数据库特有的类提供一个基类。 表示要对数据源执行的 SQL 语句或存储过程。为表示命令的、数据库特有的类提供一个基类。

DbCommand 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbCommand 类
System.Data.Common 命名空间


DbCommand 构造函数

DbCommand 构造函数
DbCommand 类

构造 DbCommand 对象的实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbCommand()
protected:
DbCommand()
new : unit -> DbCommand

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand 方法

DbCommand 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommand 类

DbCommand 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbCommand 类
System.Data.Common 命名空间


DbCommand ..::.Cancel 方法

DbCommand
.
.
::
.
Cancel 方法
DbCommand 类

尝试取消 DbCommand 的执行。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Cancel
public abstract void Cancel()
public:
virtual void Cancel() abstract
abstract Cancel : unit -> unit

实现

如果没有要取消的内容，则什么也不会发生。但是，如果有命令正在执行，而取消尝试失败，则不会生成异常。 如果没有要取消的内容，则什么也不会发生。但是，如果有命令正在执行，而取消尝试失败，则不会生成异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.CreateDbParameter 方法

DbCommand
.
.
::
.
CreateDbParameter 方法
DbCommand 类

创建 DbParameter 对象的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function CreateDbParameter As DbParameter
protected abstract DbParameter CreateDbParameter()
protected:
virtual DbParameter^ CreateDbParameter() abstract
abstract CreateDbParameter : unit -> DbParameter

返回值

类型： System.Data.Common DbParameter
一个 DbParameter 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.CreateParameter 方法

DbCommand
.
.
::
.
CreateParameter 方法
DbCommand 类

创建 DbParameter 对象的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function CreateParameter As DbParameter
public DbParameter CreateParameter()
public:
DbParameter^ CreateParameter()
member CreateParameter : unit -> DbParameter

返回值

类型： System.Data.Common DbParameter
一个 DbParameter 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.Dispose 方法

DbCommand
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommand 类

释放由 Component 占用的资源。

名称 说明
页首

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.ExecuteDbDataReader 方法

DbCommand
.
.
::
.
ExecuteDbDataReader 方法
DbCommand 类

对连接执行命令文本。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function ExecuteDbDataReader ( _
    behavior As CommandBehavior _
) As DbDataReader
protected abstract DbDataReader ExecuteDbDataReader(
    CommandBehavior behavior
)
protected:
virtual DbDataReader^ ExecuteDbDataReader(
    CommandBehavior behavior
) abstract
abstract ExecuteDbDataReader :
        behavior:CommandBehavior -> DbDataReader

参数

behavior
类型： System.Data CommandBehavior
CommandBehavior 的一个实例。

返回值

类型： System.Data.Common DbDataReader
DbDataReader。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.ExecuteNonQuery 方法

DbCommand
.
.
::
.
ExecuteNonQuery 方法
DbCommand 类

对连接对象执行 SQL 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function ExecuteNonQuery As Integer
public abstract int ExecuteNonQuery()
public:
virtual int ExecuteNonQuery() abstract
abstract ExecuteNonQuery : unit -> int

返回值

类型： System Int32
受影响的行数。

实现

可以使用 ExecuteNonQuery 执行编录操作（例如查询数据库的结构或创建诸如表等的数据库对象），或通过执行 UPDATE、INSERT 或 DELETE 语句更改数据库中的数据。

虽然 ExecuteNonQuery 不返回任何行，但是映射到参数的任何输出参数或返回值都会用数据进行填充。

对于 UPDATE、INSERT 和 DELETE 语句，返回值为该命令所影响的行数。对于其他所有类型的语句，返回值为 -1。 对于 UPDATE、INSERT 和 DELETE 语句，返回值为该命令所影响的行数。对于其他所有类型的语句，返回值为 -1。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.ExecuteReader 方法

DbCommand
.
.
::
.
ExecuteReader 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommand 类

针对 Connection 执行 CommandText，并返回 DbDataReader。

名称 说明
页首

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.ExecuteReader 方法

DbCommand
.
.
::
.
ExecuteReader 方法
DbCommand 类

针对 Connection 执行 CommandText，并返回 DbDataReader。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function ExecuteReader As DbDataReader
public DbDataReader ExecuteReader()
public:
DbDataReader^ ExecuteReader()
member ExecuteReader : unit -> DbDataReader

返回值

类型： System.Data.Common DbDataReader
一个 DbDataReader 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
ExecuteReader 重载
System.Data.Common 命名空间


DbCommand ..::.ExecuteReader 方法 (CommandBehavior)

DbCommand
.
.
::
.
ExecuteReader 方法 (CommandBehavior)
DbCommand 类

针对 Connection 执行 CommandText，并使用 CommandBehavior 值之一返回 DbDataReader。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function ExecuteReader ( _
    behavior As CommandBehavior _
) As DbDataReader
public DbDataReader ExecuteReader(
    CommandBehavior behavior
)
public:
DbDataReader^ ExecuteReader(
    CommandBehavior behavior
)
member ExecuteReader :
        behavior:CommandBehavior -> DbDataReader

参数

behavior
类型： System.Data CommandBehavior
CommandBehavior 值之一。

返回值

类型： System.Data.Common DbDataReader
一个 DbDataReader 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
ExecuteReader 重载
System.Data.Common 命名空间


DbCommand ..::.ExecuteReader 方法

DbCommand
.
.
::
.
ExecuteReader 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommand 类

名称 说明
页首

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.IDbCommand ..::.ExecuteReader 方法

DbCommand
.
.
::
.
IDbCommand
.
.
::
.
ExecuteReader 方法
DbCommand 类

针对 Connection 执行 CommandText，并生成 IDataReader。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function ExecuteReader As IDataReader
    Implements IDbCommand.ExecuteReader
IDataReader IDbCommand.ExecuteReader()
private:
virtual IDataReader^ ExecuteReader() sealed = IDbCommand::ExecuteReader
private abstract ExecuteReader : unit -> IDataReader
private override ExecuteReader : unit -> IDataReader

返回值

类型： System.Data IDataReader
一个 IDataReader 对象。

实现

此成员是显式的接口成员实现。它只能在 DbCommand 实例被强制转换为 IDbCommand 接口时使用。 此成员是显式的接口成员实现。它只能在 DbCommand 实例被强制转换为 IDbCommand 接口时使用。

有关更多信息，请参见 ExecuteReader。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
ExecuteReader 重载
System.Data.Common 命名空间


DbCommand ..::.IDbCommand ..::.ExecuteReader 方法 (CommandBehavior)

DbCommand
.
.
::
.
IDbCommand
.
.
::
.
ExecuteReader 方法 (CommandBehavior)
DbCommand 类

针对 Connection 执行 CommandText，并使用 CommandBehavior 值之一生成 IDataReader。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function ExecuteReader ( _
    behavior As CommandBehavior _
) As IDataReader Implements IDbCommand.ExecuteReader
IDataReader IDbCommand.ExecuteReader(
    CommandBehavior behavior
)
private:
virtual IDataReader^ ExecuteReader(
    CommandBehavior behavior
) sealed = IDbCommand::ExecuteReader
private abstract ExecuteReader :
        behavior:CommandBehavior -> IDataReader
private override ExecuteReader :
        behavior:CommandBehavior -> IDataReader

参数

behavior
类型： System.Data CommandBehavior
CommandBehavior 值之一。

返回值

类型： System.Data IDataReader
一个 IDataReader 对象。

实现

此成员是显式的接口成员实现。它只能在 DbCommand 实例被强制转换为 IDbCommand 接口时使用。 此成员是显式的接口成员实现。它只能在 DbCommand 实例被强制转换为 IDbCommand 接口时使用。

有关更多信息，请参见 ExecuteReader。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
ExecuteReader 重载
System.Data.Common 命名空间


DbCommand ..::.ExecuteScalar 方法

DbCommand
.
.
::
.
ExecuteScalar 方法
DbCommand 类

执行查询，并返回查询所返回的结果集中第一行的第一列。所有其他的列和行将被忽略。 执行查询，并返回查询所返回的结果集中第一行的第一列。所有其他的列和行将被忽略。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function ExecuteScalar As Object
public abstract Object ExecuteScalar()
public:
virtual Object^ ExecuteScalar() abstract
abstract ExecuteScalar : unit -> Object

返回值

类型： System Object
结果集中第一行的第一列。

实现

使用 ExecuteScalar 方法从数据库中检索单个值（例如一个聚合值）。与使用 ExecuteReader 方法然后使用 DbDataReader 返回的数据执行生成单个值所需的操作相比，此操作需要的代码较少。 使用 ExecuteScalar 方法从数据库中检索单个值（例如一个聚合值）。与使用 ExecuteReader 方法然后使用 DbDataReader 返回的数据执行生成单个值所需的操作相比，此操作需要的代码较少。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.IDbCommand ..::.CreateParameter 方法

DbCommand
.
.
::
.
IDbCommand
.
.
::
.
CreateParameter 方法
DbCommand 类

创建 IDbDataParameter 对象的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function CreateParameter As IDbDataParameter
    Implements IDbCommand.CreateParameter
IDbDataParameter IDbCommand.CreateParameter()
private:
virtual IDbDataParameter^ CreateParameter() sealed = IDbCommand::CreateParameter
private abstract CreateParameter : unit -> IDbDataParameter
private override CreateParameter : unit -> IDbDataParameter

返回值

类型： System.Data IDbDataParameter
一个 IDbDataParameter 对象。

实现

此成员是显式的接口成员实现。它只能在 DbCommand 实例被强制转换为 IDbCommand 接口时使用。 此成员是显式的接口成员实现。它只能在 DbCommand 实例被强制转换为 IDbCommand 接口时使用。

有关更多信息，请参见 CreateParameter。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.MemberwiseClone 方法

DbCommand
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommand 类

名称 说明
页首

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.Prepare 方法

DbCommand
.
.
::
.
Prepare 方法
DbCommand 类

在数据源上创建该命令的准备好的（或已编译的）版本。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Prepare
public abstract void Prepare()
public:
virtual void Prepare() abstract
abstract Prepare : unit -> unit

实现

如果 CommandType 属性设置为 TableDirect，则 Prepare 不会执行任何操作。如果 CommandType 设置为 StoredProcedure，则对 Prepare 的调用应该会成功（虽然它可能导致无操作 (no-op)）。 如果 CommandType 属性设置为 TableDirect，则 Prepare 不会执行任何操作。如果 CommandType 设置为 StoredProcedure，则对 Prepare 的调用应该会成功（虽然它可能导致无操作 (no-op)）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand 属性

DbCommand 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommand 类

DbCommand 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbCommand 类
System.Data.Common 命名空间


DbCommand ..::.CommandText 属性

DbCommand
.
.
::
.
CommandText 属性
DbCommand 类

获取或设置针对数据源运行的文本命令。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property CommandText As String
    Get
    Set
public abstract string CommandText { get; set; }
public:
virtual property String^ CommandText {
    String^ get () abstract;
    void set (String^ value) abstract;
}
abstract CommandText : string with get, set

属性值

类型： System String
要执行的文本命令。默认值为空字符串 ("")。 要执行的文本命令。默认值为空字符串 ("")。

实现

当将 CommandType 设置为 StoredProcedure 时，应将 CommandText 属性设置为存储过程的名称。当调用 Execute 方法之一时，该命令将执行此存储过程。 当将 CommandType 设置为 StoredProcedure 时，应将 CommandText 属性设置为存储过程的名称。当调用 Execute 方法之一时，该命令将执行此存储过程。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.CommandTimeout 属性

DbCommand
.
.
::
.
CommandTimeout 属性
DbCommand 类

获取或设置在终止执行命令的尝试并生成错误之前的等待时间。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property CommandTimeout As Integer
    Get
    Set
public abstract int CommandTimeout { get; set; }
public:
virtual property int CommandTimeout {
    int get () abstract;
    void set (int value) abstract;
}
abstract CommandTimeout : int with get, set

属性值

类型： System Int32
等待命令执行的时间（以秒为单位）。

实现

如果分配的 CommandTimeout 属性值小于 0，将生成一个 ArgumentException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.CommandType 属性

DbCommand
.
.
::
.
CommandType 属性
DbCommand 类

指示或指定如何解释 CommandText 属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property CommandType As CommandType
    Get
    Set
public abstract CommandType CommandType { get; set; }
public:
virtual property CommandType CommandType {
    CommandType get () abstract;
    void set (CommandType value) abstract;
}
abstract CommandType : CommandType with get, set

属性值

类型： System.Data CommandType
CommandType 值之一。默认值为 Text。 CommandType 值之一。默认值为 Text。

实现

当将 CommandType 设置为 StoredProcedure 时，应将 CommandText 属性设置为存储过程的名称。当调用 Execute 方法之一时，该命令将执行此存储过程。 当将 CommandType 设置为 StoredProcedure 时，应将 CommandText 属性设置为存储过程的名称。当调用 Execute 方法之一时，该命令将执行此存储过程。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.Connection 属性

DbCommand
.
.
::
.
Connection 属性
DbCommand 类

获取或设置此 DbCommand 使用的 DbConnection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property Connection As DbConnection
    Get
    Set
[BrowsableAttribute(false)]
public DbConnection Connection { get; set; }
[BrowsableAttribute(false)]
public:
property DbConnection^ Connection {
    DbConnection^ get ();
    void set (DbConnection^ value);
}
[<BrowsableAttribute(false)>]
member Connection : DbConnection with get, set

属性值

类型： System.Data.Common DbConnection
与数据源的连接。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.DbConnection 属性

DbCommand
.
.
::
.
DbConnection 属性
DbCommand 类

获取或设置此 DbCommand 使用的 DbConnection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Property DbConnection As DbConnection
    Get
    Set
protected abstract DbConnection DbConnection { get; set; }
protected:
virtual property DbConnection^ DbConnection {
    DbConnection^ get () abstract;
    void set (DbConnection^ value) abstract;
}
abstract DbConnection : DbConnection with get, set

属性值

类型： System.Data.Common DbConnection
与数据源的连接。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.DbParameterCollection 属性

DbCommand
.
.
::
.
DbParameterCollection 属性
DbCommand 类

获取 DbParameter 对象的集合。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride ReadOnly Property DbParameterCollection As DbParameterCollection
    Get
protected abstract DbParameterCollection DbParameterCollection { get; }
protected:
virtual property DbParameterCollection^ DbParameterCollection {
    DbParameterCollection^ get () abstract;
}
abstract DbParameterCollection : DbParameterCollection

属性值

类型： System.Data.Common DbParameterCollection
SQL 语句或存储过程的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.DbTransaction 属性

DbCommand
.
.
::
.
DbTransaction 属性
DbCommand 类

获取或设置将在其中执行此 DbCommand 对象的 DbTransaction。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Property DbTransaction As DbTransaction
    Get
    Set
protected abstract DbTransaction DbTransaction { get; set; }
protected:
virtual property DbTransaction^ DbTransaction {
    DbTransaction^ get () abstract;
    void set (DbTransaction^ value) abstract;
}
abstract DbTransaction : DbTransaction with get, set

属性值

类型： System.Data.Common DbTransaction
要在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。默认值为 null 引用（在 Visual Basic 中为 Nothing）。 要在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。默认值为 null 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.DesignTimeVisible 属性

DbCommand
.
.
::
.
DesignTimeVisible 属性
DbCommand 类

获取或设置一个值，该值指示此命令对象在自定义界面控件中是否可见。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride Property DesignTimeVisible As Boolean
    Get
    Set
[BrowsableAttribute(false)]
public abstract bool DesignTimeVisible { get; set; }
[BrowsableAttribute(false)]
public:
virtual property bool DesignTimeVisible {
    bool get () abstract;
    void set (bool value) abstract;
}
[<BrowsableAttribute(false)>]
abstract DesignTimeVisible : bool with get, set

属性值

类型： System Boolean
如果此命令对象在控件中可见，则为 true，否则为 false。默认值为 true。 如果此命令对象在控件中可见，则为 true，否则为 false。默认值为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.IDbCommand ..::.Connection 属性

DbCommand
.
.
::
.
IDbCommand
.
.
::
.
Connection 属性
DbCommand 类

获取或设置 IDbCommand 的此实例使用的 IDbConnection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Connection As IDbConnection
    Implements IDbCommand.Connection
    Get
    Set
IDbConnection IDbCommand.Connection { get; set; }
private:
virtual property IDbConnection^ Connection {
    IDbConnection^ get () sealed = IDbCommand::Connection::get;
    void set (IDbConnection^ value) sealed = IDbCommand::Connection::set;
}
private abstract Connection : IDbConnection with get, set
private override Connection : IDbConnection with get, set

属性值

类型： System.Data IDbConnection
与数据源的连接。

实现

有关更多信息，请参见Connection()()()。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.IDbCommand ..::.Parameters 属性

DbCommand
.
.
::
.
IDbCommand
.
.
::
.
Parameters 属性
DbCommand 类

获取 IDataParameterCollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property Parameters As IDataParameterCollection
    Implements IDbCommand.Parameters
    Get
IDataParameterCollection IDbCommand.Parameters { get; }
private:
virtual property IDataParameterCollection^ Parameters {
    IDataParameterCollection^ get () sealed = IDbCommand::Parameters::get;
}
private abstract Parameters : IDataParameterCollection
private override Parameters : IDataParameterCollection

属性值

类型： System.Data IDataParameterCollection
SQL 语句或存储过程的参数。

实现

此成员是显式的接口成员实现。它只能在 DbCommand 实例被强制转换为 IDbCommand 接口时使用。 此成员是显式的接口成员实现。它只能在 DbCommand 实例被强制转换为 IDbCommand 接口时使用。

有关更多信息，请参见 Parameters()()()。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.IDbCommand ..::.Transaction 属性

DbCommand
.
.
::
.
IDbCommand
.
.
::
.
Transaction 属性
DbCommand 类

获取或设置将在其中执行此 DbCommand 对象的 DbTransaction。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Transaction As IDbTransaction
    Implements IDbCommand.Transaction
    Get
    Set
IDbTransaction IDbCommand.Transaction { get; set; }
private:
virtual property IDbTransaction^ Transaction {
    IDbTransaction^ get () sealed = IDbCommand::Transaction::get;
    void set (IDbTransaction^ value) sealed = IDbCommand::Transaction::set;
}
private abstract Transaction : IDbTransaction with get, set
private override Transaction : IDbTransaction with get, set

属性值

类型： System.Data IDbTransaction
要在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。默认值为 null 引用（在 Visual Basic 中为 Nothing）。 要在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。默认值为 null 引用（在 Visual Basic 中为 Nothing）。

实现

有关更多信息，请参见Ttransaction()()()。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.Parameters 属性

DbCommand
.
.
::
.
Parameters 属性
DbCommand 类

获取 DbParameter 对象的集合。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property Parameters As DbParameterCollection
    Get
[BrowsableAttribute(false)]
public DbParameterCollection Parameters { get; }
[BrowsableAttribute(false)]
public:
property DbParameterCollection^ Parameters {
    DbParameterCollection^ get ();
}
[<BrowsableAttribute(false)>]
member Parameters : DbParameterCollection

属性值

类型： System.Data.Common DbParameterCollection
SQL 语句或存储过程的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.Transaction 属性

DbCommand
.
.
::
.
Transaction 属性
DbCommand 类

获取或设置将在其中执行此 DbCommand 对象的 DbTransaction。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property Transaction As DbTransaction
    Get
    Set
[BrowsableAttribute(false)]
public DbTransaction Transaction { get; set; }
[BrowsableAttribute(false)]
public:
property DbTransaction^ Transaction {
    DbTransaction^ get ();
    void set (DbTransaction^ value);
}
[<BrowsableAttribute(false)>]
member Transaction : DbTransaction with get, set

属性值

类型： System.Data.Common DbTransaction
要在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。默认值为 null 引用（在 Visual Basic 中为 Nothing）。 要在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。默认值为 null 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand ..::.UpdatedRowSource 属性

DbCommand
.
.
::
.
UpdatedRowSource 属性
DbCommand 类

获取或设置命令结果在由 DbDataAdapter 的 Update 方法使用时如何应用于 DataRow。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property UpdatedRowSource As UpdateRowSource
    Get
    Set
public abstract UpdateRowSource UpdatedRowSource { get; set; }
public:
virtual property UpdateRowSource UpdatedRowSource {
    UpdateRowSource get () abstract;
    void set (UpdateRowSource value) abstract;
}
abstract UpdatedRowSource : UpdateRowSource with get, set

属性值

类型： System.Data UpdateRowSource
UpdateRowSource 值之一。如果该命令不是自动生成的，则默认值为 Both。否则，默认值为 None。 UpdateRowSource 值之一。如果该命令不是自动生成的，则默认值为 Both。否则，默认值为 None。 UpdateRowSource 值之一。如果该命令不是自动生成的，则默认值为 Both。否则，默认值为 None。

实现

如果输入的值不是 UpdateRowSource 值之一，将引发 ArgumentException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommand 类
DbCommand 成员
System.Data.Common 命名空间


DbCommand 事件

DbCommand 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommand 类

DbCommand 类型公开以下成员。

名称 说明
页首

参考

DbCommand 类
System.Data.Common 命名空间


DbCommandBuilder 类

DbCommandBuilder 类
成员

自动生成用于协调 DataSet 的更改与关联数据库的单表命令。这是一个只能被继承的抽象类。 自动生成用于协调 DataSet 的更改与关联数据库的单表命令。这是一个只能被继承的抽象类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbCommandBuilder _
    Inherits Component
public abstract class DbCommandBuilder : Component
public ref class DbCommandBuilder abstract : public Component
[<AbstractClassAttribute>]
type DbCommandBuilder =
    class
        inherit Component
    end

提供 DbCommandBuilder 类是为了方便提供程序编写者创建自己的命令生成器。通过继承此类，开发人员可在自己的代码中实现提供程序特定的行为。 提供 DbCommandBuilder 类是为了方便提供程序编写者创建自己的命令生成器。通过继承此类，开发人员可在自己的代码中实现提供程序特定的行为。

DbDataAdapter 不会自动生成为了使对 DataSet 所作的更改和相关联的数据源协调起来所必须的 SQL 语句。但是，如果设置了 DbDataAdapter 的 SelectCommand 属性，就可以创建 DbCommandBuilder 对象来自动生成 SQL 语句进行单表更新。然后，DbCommandBuilder 将生成其他任何未设置的 SQL 语句。 DbDataAdapter 不会自动生成为了使对 DataSet 所作的更改和相关联的数据源协调起来所必须的 SQL 语句。但是，如果设置了 DbDataAdapter 的 SelectCommand 属性，就可以创建 DbCommandBuilder 对象来自动生成 SQL 语句进行单表更新。然后，DbCommandBuilder 将生成其他任何未设置的 SQL 语句。 DbDataAdapter 不会自动生成为了使对 DataSet 所作的更改和相关联的数据源协调起来所必须的 SQL 语句。但是，如果设置了 DbDataAdapter 的 SelectCommand 属性，就可以创建 DbCommandBuilder 对象来自动生成 SQL 语句进行单表更新。然后，DbCommandBuilder 将生成其他任何未设置的 SQL 语句。

每当设置了 DataAdapter 属性，DbCommandBuilder 就将其本身注册为 RowUpdating 事件的侦听器。一次只能将一个 DbDataAdapter 与一个 DbCommandBuilder 对象（或相反）互相关联。 每当设置了 DataAdapter 属性，DbCommandBuilder 就将其本身注册为 RowUpdating 事件的侦听器。一次只能将一个 DbDataAdapter 与一个 DbCommandBuilder 对象（或相反）互相关联。

为了生成 INSERT、UPDATE 或 DELETE 语句，DbCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。如果在检索元数据后（例如在第一次更新后）更改 SelectCommand，则应调用 RefreshSchema 方法来更新元数据。 为了生成 INSERT、UPDATE 或 DELETE 语句，DbCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。如果在检索元数据后（例如在第一次更新后）更改 SelectCommand，则应调用 RefreshSchema 方法来更新元数据。

SelectCommand 还必须至少返回一个主键列或唯一的列。如果什么都没有返回，就会产生 InvalidOperationException 异常，不生成命令。 SelectCommand 还必须至少返回一个主键列或唯一的列。如果什么都没有返回，就会产生 InvalidOperationException 异常，不生成命令。

DbCommandBuilder 还使用由 SelectCommand 引用的 Connection、CommandTimeout 和 Transaction 属性。如果修改了任何这些属性或者替换了 SelectCommand 本身，用户则应调用 RefreshSchema。否则，InsertCommand、UpdateCommand 和 DeleteCommand 属性都保留它们以前的值。 DbCommandBuilder 还使用由 SelectCommand 引用的 Connection、CommandTimeout 和 Transaction 属性。如果修改了任何这些属性或者替换了 SelectCommand 本身，用户则应调用 RefreshSchema。否则，InsertCommand、UpdateCommand 和 DeleteCommand 属性都保留它们以前的值。 DbCommandBuilder 还使用由 SelectCommand 引用的 Connection、CommandTimeout 和 Transaction 属性。如果修改了任何这些属性或者替换了 SelectCommand 本身，用户则应调用 RefreshSchema。否则，InsertCommand、UpdateCommand 和 DeleteCommand 属性都保留它们以前的值。

如果调用 Dispose，则会解除 DbCommandBuilder 与 DbDataAdapter 的关联，并且不再使用生成的命令。

System.Data.Common System.Data.Common..::.DbCommandBuilderDbCommandBuilder

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder 成员

DbCommandBuilder 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

自动生成用于协调 DataSet 的更改与关联数据库的单表命令。这是一个只能被继承的抽象类。 自动生成用于协调 DataSet 的更改与关联数据库的单表命令。这是一个只能被继承的抽象类。

DbCommandBuilder 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbCommandBuilder 类
System.Data.Common 命名空间


DbCommandBuilder 构造函数

DbCommandBuilder 构造函数
DbCommandBuilder 类

初始化从 DbCommandBuilder 类继承的类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbCommandBuilder()
protected:
DbCommandBuilder()
new : unit -> DbCommandBuilder

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder 方法

DbCommandBuilder 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

DbCommandBuilder 类型公开以下成员。

名称 说明
页首

参考

DbCommandBuilder 类
System.Data.Common 命名空间


DbCommandBuilder ..::.ApplyParameterInfo 方法

DbCommandBuilder
.
.
::
.
ApplyParameterInfo 方法
DbCommandBuilder 类

允许 DbCommandBuilder 类的提供程序实现处理附加参数属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Sub ApplyParameterInfo ( _
    parameter As DbParameter, _
    row As DataRow, _
    statementType As StatementType, _
    whereClause As Boolean _
)
protected abstract void ApplyParameterInfo(
    DbParameter parameter,
    DataRow row,
    StatementType statementType,
    bool whereClause
)
protected:
virtual void ApplyParameterInfo(
    DbParameter^ parameter,
    DataRow^ row,
    StatementType statementType,
    bool whereClause
) abstract
abstract ApplyParameterInfo :
        parameter:DbParameter *
        row:DataRow *
        statementType:StatementType *
        whereClause:bool -> unit

参数

parameter
类型： System.Data.Common DbParameter
要将附加修改应用到的 DbParameter。
row
类型： System.Data DataRow
来自由 GetSchemaTable 提供的架构表的 DataRow。
statementType
类型： System.Data StatementType
生成的命令的类型；INSERT、UPDATE 或 DELETE。
whereClause
类型： System Boolean
如果参数是 update 或 delete WHERE 子句的一部分，则为 true；如果是 insert 或 update 值的一部分，则为 false。

此方法允许 DbCommandBuilder 类的实现处理特定于提供程序的参数属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.Dispose 方法

DbCommandBuilder
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

名称 说明
页首

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间


DbCommandBuilder ..::.Dispose 方法 (Boolean)

DbCommandBuilder
.
.
::
.
Dispose 方法 (Boolean)
DbCommandBuilder 类

释放由 DbCommandBuilder 占用的非托管资源，还可以另外再释放托管资源。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overrides Sub Dispose ( _
    disposing As Boolean _
)
protected override void Dispose(
    bool disposing
)
protected:
virtual void Dispose(
    bool disposing
) override
abstract Dispose :
        disposing:bool -> unit
override Dispose :
        disposing:bool -> unit

参数

disposing
类型： System Boolean
为 true 则释放托管资源和非托管资源；为 false 则仅释放非托管资源。

此方法由公共的 Dispose 方法和 Finalize 方法调用。Dispose 调用受保护的Dispose方法，并将配置参数设置为true。Finalize 调用 disposing 设置为 false 的 Dispose。 此方法由公共的 Dispose 方法和 Finalize 方法调用。Dispose 调用受保护的Dispose方法，并将配置参数设置为true。Finalize 调用 disposing 设置为 false 的 Dispose。 此方法由公共的 Dispose 方法和 Finalize 方法调用。Dispose 调用受保护的Dispose方法，并将配置参数设置为true。Finalize 调用 disposing 设置为 false 的 Dispose。

当 disposing 参数为 true 时，此方法释放该 DbCommandBuilder 引用的、由任何托管对象持有的全部资源。此方法调用每个被引用对象的 Dispose 方法。 当 disposing 参数为 true 时，此方法释放该 DbCommandBuilder 引用的、由任何托管对象持有的全部资源。此方法调用每个被引用对象的 Dispose 方法。

对继承者的说明

Dispose 可由其他对象多次调用。重写 Dispose 时，注意不要引用在以前对 Dispose 的调用中已经释放的对象。有关如何实现 Dispose 的更多信息，请参见 实现 Dispose 方法。 Dispose 可由其他对象多次调用。重写 Dispose 时，注意不要引用在以前对 Dispose 的调用中已经释放的对象。有关如何实现 Dispose 的更多信息，请参见 实现 Dispose 方法。 Dispose 可由其他对象多次调用。重写 Dispose 时，注意不要引用在以前对 Dispose 的调用中已经释放的对象。有关如何实现 Dispose 的更多信息，请参见 实现 Dispose 方法。

有关 Dispose 和 Finalize 的更多信息，请参见清理非托管资源和重写 Finalize 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
Dispose 重载
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetDeleteCommand 方法

DbCommandBuilder
.
.
::
.
GetDeleteCommand 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

获取在数据源中执行删除操作所需的自动生成的 DbCommand 对象。

名称 说明
页首

应用程序可以使用 GetDeleteCommand 方法来获取信息或解答疑难，原因是该方法返回要执行的 DbCommand 对象。

也可以将 GetDeleteCommand 用作已修改的命令的基础。例如，您可能调用 GetDeleteCommand 并修改关联的命令文本，然后在 DbDataAdapter 上显式设置该文本。 也可以将 GetDeleteCommand 用作已修改的命令的基础。例如，您可能调用 GetDeleteCommand 并修改关联的命令文本，然后在 DbDataAdapter 上显式设置该文本。

当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetDeleteCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetDeleteCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetDeleteCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetDeleteCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetDeleteCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetDeleteCommand 时，将首次生成 SQL 语句。

生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。如果 GetDeleteCommand 的重载版本允许通过提供布尔值来指定此行为，则可以通过传入 True 来使 DbCommandBuilder 改为根据列名生成参数。 生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。如果 GetDeleteCommand 的重载版本允许通过提供布尔值来指定此行为，则可以通过传入 True 来使 DbCommandBuilder 改为根据列名生成参数。

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetDeleteCommand 方法

DbCommandBuilder
.
.
::
.
GetDeleteCommand 方法
DbCommandBuilder 类

获取在数据源中执行删除操作所需的自动生成的 DbCommand 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetDeleteCommand As DbCommand
public DbCommand GetDeleteCommand()
public:
DbCommand^ GetDeleteCommand()
member GetDeleteCommand : unit -> DbCommand

返回值

类型： System.Data.Common DbCommand
自动生成的、执行删除操作所需的 DbCommand 对象。

应用程序可以使用 GetDeleteCommand 方法来获取信息或解答疑难，原因是该方法返回要执行的 DbCommand 对象。

也可以将 GetDeleteCommand 用作已修改的命令的基础。例如，您可能调用 GetDeleteCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。 也可以将 GetDeleteCommand 用作已修改的命令的基础。例如，您可能调用 GetDeleteCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。

当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetDeleteCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetDeleteCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetDeleteCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetDeleteCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetDeleteCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetDeleteCommand 时，将首次生成 SQL 语句。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
GetDeleteCommand 重载
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetDeleteCommand 方法 (Boolean)

DbCommandBuilder
.
.
::
.
GetDeleteCommand 方法 (Boolean)
DbCommandBuilder 类

获取对数据源执行删除操作所必需的自动生成的 DbCommand 对象，可选择使用列作为参数名。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetDeleteCommand ( _
    useColumnsForParameterNames As Boolean _
) As DbCommand
public DbCommand GetDeleteCommand(
    bool useColumnsForParameterNames
)
public:
DbCommand^ GetDeleteCommand(
    bool useColumnsForParameterNames
)
member GetDeleteCommand :
        useColumnsForParameterNames:bool -> DbCommand

参数

useColumnsForParameterNames
类型： System Boolean
如果为 true，则生成与列名匹配的参数名（如果可能）。如果为 false，则生成 @p1、@p2，依此类推。 如果为 true，则生成与列名匹配的参数名（如果可能）。如果为 false，则生成 @p1、@p2，依此类推。

返回值

类型： System.Data.Common DbCommand
自动生成的、执行删除操作所需的 DbCommand 对象。

应用程序可以使用 GetDeleteCommand 方法来获取信息或解答疑难，原因是该方法返回要执行的 DbCommand 对象。

也可以将 GetDeleteCommand 用作已修改的命令的基础。例如，您可能调用 GetDeleteCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。 也可以将 GetDeleteCommand 用作已修改的命令的基础。例如，您可能调用 GetDeleteCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。

当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetDeleteCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetDeleteCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetDeleteCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetDeleteCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetDeleteCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetDeleteCommand 时，将首次生成 SQL 语句。

生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。对 useColumnsForParameterNames 参数传递 true 允许您强制 DbCommandBuilder 改为根据列名生成参数。仅当满足下列条件时，此操作才会成功： 生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。对 useColumnsForParameterNames 参数传递 true 允许您强制 DbCommandBuilder 改为根据列名生成参数。仅当满足下列条件时，此操作才会成功： 生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。对 useColumnsForParameterNames 参数传递 true 允许您强制 DbCommandBuilder 改为根据列名生成参数。仅当满足下列条件时，此操作才会成功：

  • 已经指定了 ParameterNameMaxLength，并且其长度大于或等于生成的参数名。

  • 生成的参数名符合 ParameterNamePattern 正则表达式所指定的条件。

  • 指定了 ParameterMarkerFormat。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
GetDeleteCommand 重载
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetInsertCommand 方法

DbCommandBuilder
.
.
::
.
GetInsertCommand 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

获取在数据源中执行插入操作所需的自动生成的 DbCommand 对象。

名称 说明
页首

应用程序可以使用 GetInsertCommand 方法来获取信息或解答疑难，原因是该方法返回要执行的 DbCommand 对象的文本。

也可以将 GetInsertCommand 用作已修改的命令的基础。例如，您可能调用 GetInsertCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该命令文本。 也可以将 GetInsertCommand 用作已修改的命令的基础。例如，您可能调用 GetInsertCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该命令文本。

当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetInsertCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetInsertCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetInsertCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetInsertCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetInsertCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetInsertCommand 时，将首次生成 SQL 语句。

生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。如果 GetInsertCommand 的重载版本允许指定此行为，则可以使 DbCommandBuilder 改为根据列名生成参数。 生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。如果 GetInsertCommand 的重载版本允许指定此行为，则可以使 DbCommandBuilder 改为根据列名生成参数。

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetInsertCommand 方法

DbCommandBuilder
.
.
::
.
GetInsertCommand 方法
DbCommandBuilder 类

获取在数据源中执行插入操作所需的自动生成的 DbCommand 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetInsertCommand As DbCommand
public DbCommand GetInsertCommand()
public:
DbCommand^ GetInsertCommand()
member GetInsertCommand : unit -> DbCommand

返回值

类型： System.Data.Common DbCommand
自动生成的、执行插入操作所需的 DbCommand 对象。

应用程序可以使用 GetInsertCommand 方法来获取信息或解答疑难，原因是该方法返回要执行的 DbCommand 对象的文本。

也可以将 GetInsertCommand 用作已修改的命令的基础。例如，您可能调用 GetInsertCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。 也可以将 GetInsertCommand 用作已修改的命令的基础。例如，您可能调用 GetInsertCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。

当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetInsertCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetInsertCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetInsertCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetInsertCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetInsertCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetInsertCommand 时，将首次生成 SQL 语句。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
GetInsertCommand 重载
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetInsertCommand 方法 (Boolean)

DbCommandBuilder
.
.
::
.
GetInsertCommand 方法 (Boolean)
DbCommandBuilder 类

获取对数据源执行插入操作所必需的自动生成的 DbCommand 对象，可选择使用列作为参数名。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetInsertCommand ( _
    useColumnsForParameterNames As Boolean _
) As DbCommand
public DbCommand GetInsertCommand(
    bool useColumnsForParameterNames
)
public:
DbCommand^ GetInsertCommand(
    bool useColumnsForParameterNames
)
member GetInsertCommand :
        useColumnsForParameterNames:bool -> DbCommand

参数

useColumnsForParameterNames
类型： System Boolean
如果为 true，则生成与列名匹配的参数名（如果可能）。如果为 false，则生成 @p1、@p2，依此类推。 如果为 true，则生成与列名匹配的参数名（如果可能）。如果为 false，则生成 @p1、@p2，依此类推。

返回值

类型： System.Data.Common DbCommand
自动生成的、执行插入操作所需的 DbCommand 对象。

应用程序可以使用 GetInsertCommand 方法来获取信息或解答疑难，原因是该方法返回要执行的 DbCommand 对象的文本。

也可以将 GetInsertCommand 用作已修改的命令的基础。例如，您可能调用 GetInsertCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。 也可以将 GetInsertCommand 用作已修改的命令的基础。例如，您可能调用 GetInsertCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。

当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetInsertCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetInsertCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetInsertCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetInsertCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetInsertCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetInsertCommand 时，将首次生成 SQL 语句。

生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。对 useColumnsForParameterNames 参数传递 true 允许您强制 DbCommandBuilder 改为根据列名生成参数。仅当满足下列条件时，根据列名生成参数的操作才会成功： 生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。对 useColumnsForParameterNames 参数传递 true 允许您强制 DbCommandBuilder 改为根据列名生成参数。仅当满足下列条件时，根据列名生成参数的操作才会成功： 生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。对 useColumnsForParameterNames 参数传递 true 允许您强制 DbCommandBuilder 改为根据列名生成参数。仅当满足下列条件时，根据列名生成参数的操作才会成功：

  • 已经指定了 ParameterNameMaxLength，并且其长度大于或等于生成的参数名。

  • 生成的参数名符合 ParameterNamePattern 正则表达式所指定的条件。

  • 指定了 ParameterMarkerFormat。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
GetInsertCommand 重载
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetParameterName 方法

DbCommandBuilder
.
.
::
.
GetParameterName 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

返回指定参数的名称。

名称 说明
页首

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间


DbCommandBuilder ..::.GetParameterName 方法 (Int32)

DbCommandBuilder
.
.
::
.
GetParameterName 方法 (Int32)
DbCommandBuilder 类

以 @p# 格式返回指定参数的名称。在生成自定义命令生成器时使用。 以 @p# 格式返回指定参数的名称。在生成自定义命令生成器时使用。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function GetParameterName ( _
    parameterOrdinal As Integer _
) As String
protected abstract string GetParameterName(
    int parameterOrdinal
)
protected:
virtual String^ GetParameterName(
    int parameterOrdinal
) abstract
abstract GetParameterName :
        parameterOrdinal:int -> string

参数

parameterOrdinal
类型： System Int32
作为参数名的一部分而包含的数字。

返回值

类型： System String
参数名，其中包含作为参数名的一部分而附加的指定数字。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
GetParameterName 重载
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetParameterName 方法 (String)

DbCommandBuilder
.
.
::
.
GetParameterName 方法 (String)
DbCommandBuilder 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

给定部分参数名，返回完整参数名。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function GetParameterName ( _
    parameterName As String _
) As String
protected abstract string GetParameterName(
    string parameterName
)
protected:
virtual String^ GetParameterName(
    String^ parameterName
) abstract
abstract GetParameterName :
        parameterName:string -> string

参数

parameterName
类型： System String
参数的部分名称。

返回值

类型： System String
对应于所请求的部分参数名的完整参数名。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
GetParameterName 重载
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetParameterPlaceholder 方法

DbCommandBuilder
.
.
::
.
GetParameterPlaceholder 方法
DbCommandBuilder 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

返回该参数在关联的 SQL 语句中的占位符。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function GetParameterPlaceholder ( _
    parameterOrdinal As Integer _
) As String
protected abstract string GetParameterPlaceholder(
    int parameterOrdinal
)
protected:
virtual String^ GetParameterPlaceholder(
    int parameterOrdinal
) abstract
abstract GetParameterPlaceholder :
        parameterOrdinal:int -> string

参数

parameterOrdinal
类型： System Int32
作为参数名的一部分而包含的数字。

返回值

类型： System String
附加了指定数字的参数名。

此方法专供提供程序编写者生成自定义命令生成器。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetSchemaTable 方法

DbCommandBuilder
.
.
::
.
GetSchemaTable 方法
DbCommandBuilder 类

返回 DbCommandBuilder 的架构表。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function GetSchemaTable ( _
    sourceCommand As DbCommand _
) As DataTable
protected virtual DataTable GetSchemaTable(
    DbCommand sourceCommand
)
protected:
virtual DataTable^ GetSchemaTable(
    DbCommand^ sourceCommand
)
abstract GetSchemaTable :
        sourceCommand:DbCommand -> DataTable
override GetSchemaTable :
        sourceCommand:DbCommand -> DataTable

参数

sourceCommand
类型： System.Data.Common DbCommand
要为其检索对应架构表的 DbCommand。

返回值

类型： System.Data DataTable
表示特定 DbCommand 的架构的 DataTable。

此方法专供提供程序编写者生成自定义命令生成器。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetUpdateCommand 方法

DbCommandBuilder
.
.
::
.
GetUpdateCommand 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

获取在数据源中执行更新操作所需的自动生成的 DbCommand 对象。

名称 说明
页首

应用程序可以使用 GetUpdateCommand 方法来获取信息或解答疑难，原因是该方法返回要执行的 DbCommand 对象。

也可以将 GetUpdateCommand 用作已修改的命令的基础。例如，您可能调用 GetUpdateCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。 也可以将 GetUpdateCommand 用作已修改的命令的基础。例如，您可能调用 GetUpdateCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。

当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetUpdateCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetUpdateCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetUpdateCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetUpdateCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetUpdateCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetUpdateCommand 时，将首次生成 SQL 语句。

生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。如果 GetUpdateCommand 的重载版本允许指定此行为，则可以使 DbCommandBuilder 改为根据列名生成参数。 生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。如果 GetUpdateCommand 的重载版本允许指定此行为，则可以使 DbCommandBuilder 改为根据列名生成参数。

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetUpdateCommand 方法

DbCommandBuilder
.
.
::
.
GetUpdateCommand 方法
DbCommandBuilder 类

获取在数据源中执行更新操作所需的自动生成的 DbCommand 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetUpdateCommand As DbCommand
public DbCommand GetUpdateCommand()
public:
DbCommand^ GetUpdateCommand()
member GetUpdateCommand : unit -> DbCommand

返回值

类型： System.Data.Common DbCommand
自动生成的、执行更新所需的 DbCommand 对象。

应用程序可以使用 GetUpdateCommand 方法来获取信息或解答疑难，原因是该方法返回要执行的 DbCommand 对象。

也可以将 GetUpdateCommand 用作已修改的命令的基础。例如，您可能调用 GetUpdateCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。 也可以将 GetUpdateCommand 用作已修改的命令的基础。例如，您可能调用 GetUpdateCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该文本。

当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetUpdateCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetUpdateCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetUpdateCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetUpdateCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetUpdateCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetUpdateCommand 时，将首次生成 SQL 语句。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
GetUpdateCommand 重载
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.GetUpdateCommand 方法 (Boolean)

DbCommandBuilder
.
.
::
.
GetUpdateCommand 方法 (Boolean)
DbCommandBuilder 类

获取对数据源执行更新操作所必需的自动生成的 DbCommand 对象，可选择使用列作为参数名。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetUpdateCommand ( _
    useColumnsForParameterNames As Boolean _
) As DbCommand
public DbCommand GetUpdateCommand(
    bool useColumnsForParameterNames
)
public:
DbCommand^ GetUpdateCommand(
    bool useColumnsForParameterNames
)
member GetUpdateCommand :
        useColumnsForParameterNames:bool -> DbCommand

参数

useColumnsForParameterNames
类型： System Boolean
如果为 true，则生成与列名匹配的参数名（如果可能）。如果为 false，则生成 @p1、@p2，依此类推。 如果为 true，则生成与列名匹配的参数名（如果可能）。如果为 false，则生成 @p1、@p2，依此类推。

返回值

类型： System.Data.Common DbCommand
自动生成的、执行更新所需的 DbCommand 对象。

应用程序可以使用 GetUpdateCommand 方法来获取信息或解答疑难，原因是该方法返回要执行的 DbCommand 对象。

也可以将 GetUpdateCommand 用作已修改的命令的基础。例如，您可能调用 GetUpdateCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该命令文本。 也可以将 GetUpdateCommand 用作已修改的命令的基础。例如，您可能调用 GetUpdateCommand 并修改命令文本，然后在 DbDataAdapter 上显式设置该命令文本。

当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetUpdateCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetUpdateCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetUpdateCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetUpdateCommand 时，将首次生成 SQL 语句。 当首次生成 SQL 语句后，如果应用程序以任何方式更改该语句，则必须显式调用 RefreshSchema。否则，GetUpdateCommand 仍将使用上一个语句中的信息，而上一个语句可能是不正确的。当应用程序调用 Update 或 GetUpdateCommand 时，将首次生成 SQL 语句。

生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。对 useColumnsForParameterNames 参数传递 true 允许您强制 DbCommandBuilder 改为根据列名生成参数。仅当满足下列条件时，根据列名生成参数的操作才会成功： 生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。对 useColumnsForParameterNames 参数传递 true 允许您强制 DbCommandBuilder 改为根据列名生成参数。仅当满足下列条件时，根据列名生成参数的操作才会成功： 生成参数名时，默认的行为是对各个参数使用 @p1、@p2，依此类推。对 useColumnsForParameterNames 参数传递 true 允许您强制 DbCommandBuilder 改为根据列名生成参数。仅当满足下列条件时，根据列名生成参数的操作才会成功：

  • 已经指定了 ParameterNameMaxLength，并且其长度大于或等于生成的参数名。

  • 生成的参数名符合 ParameterNamePattern 正则表达式所指定的条件。

  • 指定了 ParameterMarkerFormat。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
GetUpdateCommand 重载
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.InitializeCommand 方法

DbCommandBuilder
.
.
::
.
InitializeCommand 方法
DbCommandBuilder 类

重置 DbCommand 上的 CommandTimeout、Transaction、CommandType 和 UpdateRowSource 属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function InitializeCommand ( _
    command As DbCommand _
) As DbCommand
protected virtual DbCommand InitializeCommand(
    DbCommand command
)
protected:
virtual DbCommand^ InitializeCommand(
    DbCommand^ command
)
abstract InitializeCommand :
        command:DbCommand -> DbCommand
override InitializeCommand :
        command:DbCommand -> DbCommand

参数

command
类型： System.Data.Common DbCommand
由命令生成器用于对应的 insert、update 或 delete 命令的 DbCommand。

返回值

类型： System.Data.Common DbCommand
用于每个 insert、update 或 delete 操作的 DbCommand 实例。传入一个 null 值将允许 InitializeCommand 方法根据与 DbCommandBuilder 关联的 Select 命令创建 DbCommand 对象。 用于每个 insert、update 或 delete 操作的 DbCommand 实例。传入一个 null 值将允许 InitializeCommand 方法根据与 DbCommandBuilder 关联的 Select 命令创建 DbCommand 对象。

此方法专供提供程序编写者生成自定义命令生成器。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.MemberwiseClone 方法

DbCommandBuilder
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

名称 说明
页首

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间


DbCommandBuilder ..::.QuoteIdentifier 方法

DbCommandBuilder
.
.
::
.
QuoteIdentifier 方法
DbCommandBuilder 类

以正确的目录大小写给定一个不带引号的标识符，返回该标识符的带引号的正确形式，包括正确转义该标识符中嵌入的任何引号。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function QuoteIdentifier ( _
    unquotedIdentifier As String _
) As String
public virtual string QuoteIdentifier(
    string unquotedIdentifier
)
public:
virtual String^ QuoteIdentifier(
    String^ unquotedIdentifier
)
abstract QuoteIdentifier :
        unquotedIdentifier:string -> string
override QuoteIdentifier :
        unquotedIdentifier:string -> string

参数

unquotedIdentifier
类型： System String
不带引号的原始标识符。

返回值

类型： System String
该标识符的带引号的版本。该标识符中嵌入的引号已正确转义。 该标识符的带引号的版本。该标识符中嵌入的引号已正确转义。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.RefreshSchema 方法

DbCommandBuilder
.
.
::
.
RefreshSchema 方法
DbCommandBuilder 类

清除与此 DbCommandBuilder 关联的命令。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub RefreshSchema
public virtual void RefreshSchema()
public:
virtual void RefreshSchema()
abstract RefreshSchema : unit -> unit
override RefreshSchema : unit -> unit

调用 RefreshSchema 方法将有效地移除所有 DbCommand 对象（由 SelectCommand、

UpdateCommand,

DeleteCommand 和

InsertCommand 属性引用）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.RowUpdatingHandler 方法

DbCommandBuilder
.
.
::
.
RowUpdatingHandler 方法
DbCommandBuilder 类

添加 RowUpdating 事件的事件处理程序。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub RowUpdatingHandler ( _
    rowUpdatingEvent As RowUpdatingEventArgs _
)
protected void RowUpdatingHandler(
    RowUpdatingEventArgs rowUpdatingEvent
)
protected:
void RowUpdatingHandler(
    RowUpdatingEventArgs^ rowUpdatingEvent
)
member RowUpdatingHandler :
        rowUpdatingEvent:RowUpdatingEventArgs -> unit

参数

rowUpdatingEvent
类型： System.Data.Common RowUpdatingEventArgs
包含关于该事件的信息的 RowUpdatingEventArgs 实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.SetRowUpdatingHandler 方法

DbCommandBuilder
.
.
::
.
SetRowUpdatingHandler 方法
DbCommandBuilder 类

注册 DbCommandBuilder 以处理 DbDataAdapter 的 RowUpdating 事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Sub SetRowUpdatingHandler ( _
    adapter As DbDataAdapter _
)
protected abstract void SetRowUpdatingHandler(
    DbDataAdapter adapter
)
protected:
virtual void SetRowUpdatingHandler(
    DbDataAdapter^ adapter
) abstract
abstract SetRowUpdatingHandler :
        adapter:DbDataAdapter -> unit

参数

adapter
类型： System.Data.Common DbDataAdapter
要用于更新的 DbDataAdapter。

此方法专供提供程序编写者生成自定义命令生成器。当一个新的 DbDataAdapter 添加到 DbCommandBuilder 中时，它将为 DbDataAdapter 的 RowUpdating 事件而注册。如果以相同的 DbDataAdapter 再次调用此方法，则 DbCommandBuilder 将为该 DbDataAdapter 的 RowUpdating 事件而取消注册。 此方法专供提供程序编写者生成自定义命令生成器。当一个新的 DbDataAdapter 添加到 DbCommandBuilder 中时，它将为 DbDataAdapter 的 RowUpdating 事件而注册。如果以相同的 DbDataAdapter 再次调用此方法，则 DbCommandBuilder 将为该 DbDataAdapter 的 RowUpdating 事件而取消注册。 此方法专供提供程序编写者生成自定义命令生成器。当一个新的 DbDataAdapter 添加到 DbCommandBuilder 中时，它将为 DbDataAdapter 的 RowUpdating 事件而注册。如果以相同的 DbDataAdapter 再次调用此方法，则 DbCommandBuilder 将为该 DbDataAdapter 的 RowUpdating 事件而取消注册。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.UnquoteIdentifier 方法

DbCommandBuilder
.
.
::
.
UnquoteIdentifier 方法
DbCommandBuilder 类

给定一个带引号的标识符，返回该标识符的不带引号的正确形式，包括正确地取消转义该标识符中嵌入的任何引号。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function UnquoteIdentifier ( _
    quotedIdentifier As String _
) As String
public virtual string UnquoteIdentifier(
    string quotedIdentifier
)
public:
virtual String^ UnquoteIdentifier(
    String^ quotedIdentifier
)
abstract UnquoteIdentifier :
        quotedIdentifier:string -> string
override UnquoteIdentifier :
        quotedIdentifier:string -> string

参数

quotedIdentifier
类型： System String
其嵌入引号将被移除的标识符。

返回值

类型： System String
不带引号的标识符，其中嵌入的引号已正确进行取消转义。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder 属性

DbCommandBuilder 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

DbCommandBuilder 类型公开以下成员。

名称 说明
页首

参考

DbCommandBuilder 类
System.Data.Common 命名空间


DbCommandBuilder ..::.CatalogLocation 属性

DbCommandBuilder
.
.
::
.
CatalogLocation 属性
DbCommandBuilder 类

对于 DbCommandBuilder 类的实例，设置或获取 CatalogLocation。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property CatalogLocation As CatalogLocation
    Get
    Set
public virtual CatalogLocation CatalogLocation { get; set; }
public:
virtual property CatalogLocation CatalogLocation {
    CatalogLocation get ();
    void set (CatalogLocation value);
}
abstract CatalogLocation : CatalogLocation with get, set
override CatalogLocation : CatalogLocation with get, set

属性值

类型： System.Data.Common CatalogLocation
一个 CatalogLocation 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.CatalogSeparator 属性

DbCommandBuilder
.
.
::
.
CatalogSeparator 属性
DbCommandBuilder 类

设置或获取一个字符串，该字符串用作 DbCommandBuilder 类的实例的目录分隔符。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property CatalogSeparator As String
    Get
    Set
public virtual string CatalogSeparator { get; set; }
public:
virtual property String^ CatalogSeparator {
    String^ get ();
    void set (String^ value);
}
abstract CatalogSeparator : string with get, set
override CatalogSeparator : string with get, set

属性值

类型： System String
一个字符串，指示用于 DbCommandBuilder 类的实例的目录分隔符。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.ConflictOption 属性

DbCommandBuilder
.
.
::
.
ConflictOption 属性
DbCommandBuilder 类

指定哪个 ConflictOption 将由 DbCommandBuilder 使用。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property ConflictOption As ConflictOption
    Get
    Set
public virtual ConflictOption ConflictOption { get; set; }
public:
virtual property ConflictOption ConflictOption {
    ConflictOption get ();
    void set (ConflictOption value);
}
abstract ConflictOption : ConflictOption with get, set
override ConflictOption : ConflictOption with get, set

属性值

类型： System.Data ConflictOption
返回描述此 DbCommandBuilder 行为的 ConflictOption 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.DataAdapter 属性

DbCommandBuilder
.
.
::
.
DataAdapter 属性
DbCommandBuilder 类

获取或设置自动为其生成 Transact-SQL 语句的一个 DbDataAdapter 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property DataAdapter As DbDataAdapter
    Get
    Set
[BrowsableAttribute(false)]
public DbDataAdapter DataAdapter { get; set; }
[BrowsableAttribute(false)]
public:
property DbDataAdapter^ DataAdapter {
    DbDataAdapter^ get ();
    void set (DbDataAdapter^ value);
}
[<BrowsableAttribute(false)>]
member DataAdapter : DbDataAdapter with get, set

属性值

类型： System.Data.Common DbDataAdapter
一个 DbDataAdapter 对象。

DbCommandBuilder 将自身注册为 RowUpdating 事件的侦听器，这些事件由此属性中指定的 DbDataAdapter 生成。

当创建 DbCommandBuilder 的新实例时，将释放与此 DbDataAdapter 关联的任何现有 DbCommandBuilder。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.QuotePrefix 属性

DbCommandBuilder
.
.
::
.
QuotePrefix 属性
DbCommandBuilder 类

获取或设置指定其名称包含空格或保留标记等字符的数据库对象（例如，表或列）时使用的开始字符。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property QuotePrefix As String
    Get
    Set
public virtual string QuotePrefix { get; set; }
public:
virtual property String^ QuotePrefix {
    String^ get ();
    void set (String^ value);
}
abstract QuotePrefix : string with get, set
override QuotePrefix : string with get, set

属性值

类型： System String
要使用的起始字符。默认值为空字符串。 要使用的起始字符。默认值为空字符串。
异常 | 条件
InvalidOperationException | 当生成 Insert、Update 或 Delete 命令后，不能更改此属性。

某些数据源可能有可包含空格、逗号和分号等字符的对象。若要提供此功能，请使用 QuotePrefix 和 QuoteSuffix 属性来指定诸如左尖括号和右尖括号等分隔符，以封装对象名称。 某些数据源可能有可包含空格、逗号和分号等字符的对象。若要提供此功能，请使用 QuotePrefix 和 QuoteSuffix 属性来指定诸如左尖括号和右尖括号等分隔符，以封装对象名称。

说明 说明

虽然在生成插入、更新或删除命令后不能更改 QuotePrefix 或 QuoteSuffix 属性，但可以在调用 DbDataAdapter 的 Update 方法后更改它们的设置。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.QuoteSuffix 属性

DbCommandBuilder
.
.
::
.
QuoteSuffix 属性
DbCommandBuilder 类

获取或设置一个或多个结束字符，供指定其名称中包含空格或保留标记等字符的数据库对象（例如，表或列）时使用。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property QuoteSuffix As String
    Get
    Set
public virtual string QuoteSuffix { get; set; }
public:
virtual property String^ QuoteSuffix {
    String^ get ();
    void set (String^ value);
}
abstract QuoteSuffix : string with get, set
override QuoteSuffix : string with get, set

属性值

类型： System String
要使用的结束字符。默认值为空字符串。 要使用的结束字符。默认值为空字符串。

某些数据源可能有可包含空格、逗号和分号等字符的对象。若要提供此功能，请使用 QuotePrefix 和 QuoteSuffix 属性来指定诸如左尖括号和右尖括号等分隔符，以封装对象名称。 某些数据源可能有可包含空格、逗号和分号等字符的对象。若要提供此功能，请使用 QuotePrefix 和 QuoteSuffix 属性来指定诸如左尖括号和右尖括号等分隔符，以封装对象名称。

说明 说明

虽然在生成插入、更新或删除命令后不能更改 QuotePrefix 或 QuoteSuffix 属性，但可以在调用 DbDataAdapter 的 Update 方法后更改它们的设置。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.SchemaSeparator 属性

DbCommandBuilder
.
.
::
.
SchemaSeparator 属性
DbCommandBuilder 类

获取或设置要用作架构标识符和任何其他标识符之间的分隔符的字符。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property SchemaSeparator As String
    Get
    Set
public virtual string SchemaSeparator { get; set; }
public:
virtual property String^ SchemaSeparator {
    String^ get ();
    void set (String^ value);
}
abstract SchemaSeparator : string with get, set
override SchemaSeparator : string with get, set

属性值

类型： System String
要用作架构分隔符的字符。

通常，数据库服务器使用某个字符将架构名与标识符分隔开来，通过这个方法指示标识符的架构。例如，SQL Server 使用冒号创建完整的标识符，如 Person:CustomerName，其中“Person”是架构名，而“CustomerName”是标识符。设置此属性可使开发人员修改此行为。 通常，数据库服务器使用某个字符将架构名与标识符分隔开来，通过这个方法指示标识符的架构。例如，SQL Server 使用冒号创建完整的标识符，如 Person:CustomerName，其中“Person”是架构名，而“CustomerName”是标识符。设置此属性可使开发人员修改此行为。 通常，数据库服务器使用某个字符将架构名与标识符分隔开来，通过这个方法指示标识符的架构。例如，SQL Server 使用冒号创建完整的标识符，如 Person:CustomerName，其中“Person”是架构名，而“CustomerName”是标识符。设置此属性可使开发人员修改此行为。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder ..::.SetAllValues 属性

DbCommandBuilder
.
.
::
.
SetAllValues 属性
DbCommandBuilder 类

指定 update 语句中是包含所有列值还是仅包含更改的列值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property SetAllValues As Boolean
    Get
    Set
public bool SetAllValues { get; set; }
public:
property bool SetAllValues {
    bool get ();
    void set (bool value);
}
member SetAllValues : bool with get, set

属性值

类型： System Boolean
如果 DbCommandBuilder 生成的 UPDATE 语句包含所有列，则为 true；如果它仅包含更改的列，则为 false。

DbCommandBuilder 生成的 UPDATE 语句可包含有关所有列的更新信息，它也可以仅包含那些值被更改的列的信息。将 SetAllValues 属性设置为 true 可使生成的 UPDATE 语句包含所有列，无论其值是否被更改过。 DbCommandBuilder 生成的 UPDATE 语句可包含有关所有列的更新信息，它也可以仅包含那些值被更改的列的信息。将 SetAllValues 属性设置为 true 可使生成的 UPDATE 语句包含所有列，无论其值是否被更改过。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbCommandBuilder 类
DbCommandBuilder 成员
System.Data.Common 命名空间

其他资源

使用 CommandBuilder 生成命令 (ADO.NET)


DbCommandBuilder 事件

DbCommandBuilder 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandBuilder 类

DbCommandBuilder 类型公开以下成员。

名称 说明
页首

参考

DbCommandBuilder 类
System.Data.Common 命名空间


DbCommandDefinition 类

DbCommandDefinition 类
成员

定义一个可缓存的命令计划。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Class DbCommandDefinition
public class DbCommandDefinition
public ref class DbCommandDefinition
type DbCommandDefinition =  class end

DbCommandDefinition 类由 Entity Framework 使用，其目的并非用作独立的组件。

System.Data.Common System.Data.Common..::.DbCommandDefinitionDbCommandDefinition
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCommandDefinition 成员
System.Data.Common 命名空间


DbCommandDefinition 成员

DbCommandDefinition 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandDefinition 类

定义一个可缓存的命令计划。

DbCommandDefinition 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbCommandDefinition 类
System.Data.Common 命名空间


DbCommandDefinition 构造函数

DbCommandDefinition 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandDefinition 类

初始化新的 DbCommandDefinition。

名称 说明
页首

参考

DbCommandDefinition 类
DbCommandDefinition 成员
System.Data.Common 命名空间


DbCommandDefinition 构造函数

DbCommandDefinition 构造函数
DbCommandDefinition 类

初始化新的 DbCommandDefinition。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New
protected DbCommandDefinition()
protected:
DbCommandDefinition()
new : unit -> DbCommandDefinition

默认构造函数由派生自 DbCommandDefinition 的类使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCommandDefinition 类
DbCommandDefinition 成员
DbCommandDefinition 重载
System.Data.Common 命名空间


DbCommandDefinition 构造函数 (DbCommand)

DbCommandDefinition 构造函数 (DbCommand)
DbCommandDefinition 类

使用提供的 DbCommand 初始化新的 DbCommandDefinition。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New ( _
    prototype As DbCommand _
)
protected DbCommandDefinition(
    DbCommand prototype
)
protected:
DbCommandDefinition(
    DbCommand^ prototype
)
new :
        prototype:DbCommand -> DbCommandDefinition

参数

prototype
类型： System.Data.Common DbCommand
提供的 DbCommand。

提供的 DbCommand 必须实现 ICloneable，否则将引发 ProviderIncompatibleException。

此构造函数由派生自 DbCommandDefinition 的类使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCommandDefinition 类
DbCommandDefinition 成员
DbCommandDefinition 重载
System.Data.Common 命名空间


DbCommandDefinition 方法

DbCommandDefinition 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandDefinition 类

DbCommandDefinition 类型公开以下成员。

名称 说明
页首

参考

DbCommandDefinition 类
System.Data.Common 命名空间


DbCommandDefinition ..::.CreateCommand 方法

DbCommandDefinition
.
.
::
.
CreateCommand 方法
DbCommandDefinition 类

创建并返回一个可执行的 DbCommand 对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overridable Function CreateCommand As DbCommand
public virtual DbCommand CreateCommand()
public:
virtual DbCommand^ CreateCommand()
abstract CreateCommand : unit -> DbCommand
override CreateCommand : unit -> DbCommand

返回值

类型： System.Data.Common DbCommand
一个 DbCommand。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCommandDefinition 类
DbCommandDefinition 成员
System.Data.Common 命名空间


DbConnection 类

DbConnection 类
成员

表示到数据库的连接。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbConnection _
    Inherits Component _
    Implements IDbConnection, IDisposable
public abstract class DbConnection : Component,
    IDbConnection, IDisposable
public ref class DbConnection abstract : public Component,
    IDbConnection, IDisposable
[<AbstractClassAttribute>]
type DbConnection =
    class
        inherit Component
        interface IDbConnection
        interface IDisposable
    end

对继承者的说明

从 DbConnection 继承时，必须重写下列成员：Close、BeginDbTransaction、ChangeDatabase、CreateDbCommand、Open 和 StateChange。还必须提供下列属性：ConnectionString、Database、DataSource、ServerVersion 和 State。 从 DbConnection 继承时，必须重写下列成员：Close、BeginDbTransaction、ChangeDatabase、CreateDbCommand、Open 和 StateChange。还必须提供下列属性：ConnectionString、Database、DataSource、ServerVersion 和 State。

System.Data.Common System.Data.Common..::.DbConnectionDbConnection

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbConnection 成员

DbConnection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnection 类

表示到数据库的连接。

DbConnection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbConnection 类
System.Data.Common 命名空间


DbConnection 构造函数

DbConnection 构造函数
DbConnection 类

初始化 DbConnection 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbConnection()
protected:
DbConnection()
new : unit -> DbConnection

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbConnection 方法

DbConnection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnection 类

DbConnection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbConnection 类
System.Data.Common 命名空间


DbConnection ..::.BeginDbTransaction 方法

DbConnection
.
.
::
.
BeginDbTransaction 方法
DbConnection 类

开始数据库事务。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function BeginDbTransaction ( _
    isolationLevel As IsolationLevel _
) As DbTransaction
protected abstract DbTransaction BeginDbTransaction(
    IsolationLevel isolationLevel
)
protected:
virtual DbTransaction^ BeginDbTransaction(
    IsolationLevel isolationLevel
) abstract
abstract BeginDbTransaction :
        isolationLevel:IsolationLevel -> DbTransaction

参数

isolationLevel
类型： System.Data IsolationLevel
指定事务的隔离级别。

返回值

类型： System.Data.Common DbTransaction
表示新事务的对象。

如果要创建自己的连接类型，则重写此方法以实现开始事务所必需的代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.BeginTransaction 方法

DbConnection
.
.
::
.
BeginTransaction 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnection 类

开始数据库事务。

名称 说明
页首

如果未指定隔离级别，将使用特定连接类型的默认隔离级别。

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbConnection ..::.BeginTransaction 方法

DbConnection
.
.
::
.
BeginTransaction 方法
DbConnection 类

开始数据库事务。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function BeginTransaction As DbTransaction
public DbTransaction BeginTransaction()
public:
DbTransaction^ BeginTransaction()
member BeginTransaction : unit -> DbTransaction

返回值

类型： System.Data.Common DbTransaction
表示新事务的对象。

如果未指定隔离级别，将使用特定连接类型的默认隔离级别。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
BeginTransaction 重载
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbConnection ..::.BeginTransaction 方法 (IsolationLevel)

DbConnection
.
.
::
.
BeginTransaction 方法 (IsolationLevel)
DbConnection 类

以指定的隔离级别启动数据库事务。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function BeginTransaction ( _
    isolationLevel As IsolationLevel _
) As DbTransaction
public DbTransaction BeginTransaction(
    IsolationLevel isolationLevel
)
public:
DbTransaction^ BeginTransaction(
    IsolationLevel isolationLevel
)
member BeginTransaction :
        isolationLevel:IsolationLevel -> DbTransaction

参数

isolationLevel
类型： System.Data IsolationLevel
指定事务的隔离级别。

返回值

类型： System.Data.Common DbTransaction
表示新事务的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
BeginTransaction 重载
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbConnection ..::.BeginTransaction 方法

DbConnection
.
.
::
.
BeginTransaction 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnection 类

名称 说明
页首

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.IDbConnection ..::.BeginTransaction 方法

DbConnection
.
.
::
.
IDbConnection
.
.
::
.
BeginTransaction 方法
DbConnection 类

开始数据库事务。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function BeginTransaction As IDbTransaction
    Implements IDbConnection.BeginTransaction
IDbTransaction IDbConnection.BeginTransaction()
private:
virtual IDbTransaction^ BeginTransaction() sealed = IDbConnection::BeginTransaction
private abstract BeginTransaction : unit -> IDbTransaction
private override BeginTransaction : unit -> IDbTransaction

返回值

类型： System.Data IDbTransaction
一个表示新事务的对象。

实现

此成员是显式的接口成员实现。它只能在 DbConnection 实例被强制转换为 IDbConnection 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnection 实例被强制转换为 IDbConnection 接口时使用。

有关更多信息，请参见BeginTransaction。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
BeginTransaction 重载
System.Data.Common 命名空间


DbConnection ..::.IDbConnection ..::.BeginTransaction 方法 (IsolationLevel)

DbConnection
.
.
::
.
IDbConnection
.
.
::
.
BeginTransaction 方法 (IsolationLevel)
DbConnection 类

以指定的 IsolationLevel 值开始一个数据库事务。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function BeginTransaction ( _
    isolationLevel As IsolationLevel _
) As IDbTransaction Implements IDbConnection.BeginTransaction
IDbTransaction IDbConnection.BeginTransaction(
    IsolationLevel isolationLevel
)
private:
virtual IDbTransaction^ BeginTransaction(
    IsolationLevel isolationLevel
) sealed = IDbConnection::BeginTransaction
private abstract BeginTransaction :
        isolationLevel:IsolationLevel -> IDbTransaction
private override BeginTransaction :
        isolationLevel:IsolationLevel -> IDbTransaction

参数

isolationLevel
类型： System.Data IsolationLevel
IsolationLevel 值之一。

返回值

类型： System.Data IDbTransaction
一个表示新事务的对象。

实现

有关更多信息，请参见BeginTransaction。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
BeginTransaction 重载
System.Data.Common 命名空间


DbConnection ..::.ChangeDatabase 方法

DbConnection
.
.
::
.
ChangeDatabase 方法
DbConnection 类

为打开的连接更改当前数据库。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub ChangeDatabase ( _
    databaseName As String _
)
public abstract void ChangeDatabase(
    string databaseName
)
public:
virtual void ChangeDatabase(
    String^ databaseName
) abstract
abstract ChangeDatabase :
        databaseName:string -> unit

参数

databaseName
类型： System String
为要使用的连接指定数据库名称。

实现

在 databaseName 参数中提供的值必须是当前实例的有效数据库名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.Close 方法

DbConnection
.
.
::
.
Close 方法
DbConnection 类

关闭与数据库的连接。这是关闭任何打开连接的首选方法。 关闭与数据库的连接。这是关闭任何打开连接的首选方法。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Close
public abstract void Close()
public:
virtual void Close() abstract
abstract Close : unit -> unit

实现

异常 | 条件
DbException | 在打开连接时出现连接级别的错误。

Close 方法回滚任何挂起的事务。然后，它将连接释放到连接池，或者在连接池被禁用的情况下关闭连接。 Close 方法回滚任何挂起的事务。然后，它将连接释放到连接池，或者在连接池被禁用的情况下关闭连接。

应用程序可以多次调用 Close。不会生成任何异常。 应用程序可以多次调用 Close。不会生成任何异常。

如果 DbConnection 超出范围，则不会将其关闭。因此，必须通过调用功能上等效的 Close 或 Dispose 显式关闭该连接。如果将连接池值 Pooling 设置为 true 或 yes，则也会释放物理连接。 如果 DbConnection 超出范围，则不会将其关闭。因此，必须通过调用功能上等效的 Close 或 Dispose 显式关闭该连接。如果将连接池值 Pooling 设置为 true 或 yes，则也会释放物理连接。 如果 DbConnection 超出范围，则不会将其关闭。因此，必须通过调用功能上等效的 Close 或 Dispose 显式关闭该连接。如果将连接池值 Pooling 设置为 true 或 yes，则也会释放物理连接。

警告说明 警告

不要对 Connection、DataReader 或类的 Finalize 方法中的任何其他托管对象调用 Close 或 Dispose。在终结器中，应该仅释放类直接拥有的非托管资源。如果您的类不拥有任何非托管资源，则不要在类定义中包括 Finalize 方法。有关更多信息，请参见垃圾回收。 不要对 Connection、DataReader 或类的 Finalize 方法中的任何其他托管对象调用 Close 或 Dispose。在终结器中，应该仅释放类直接拥有的非托管资源。如果您的类不拥有任何非托管资源，则不要在类定义中包括 Finalize 方法。有关更多信息，请参见垃圾回收。 不要对 Connection、DataReader 或类的 Finalize 方法中的任何其他托管对象调用 Close 或 Dispose。在终结器中，应该仅释放类直接拥有的非托管资源。如果您的类不拥有任何非托管资源，则不要在类定义中包括 Finalize 方法。有关更多信息，请参见垃圾回收。 不要对 Connection、DataReader 或类的 Finalize 方法中的任何其他托管对象调用 Close 或 Dispose。在终结器中，应该仅释放类直接拥有的非托管资源。如果您的类不拥有任何非托管资源，则不要在类定义中包括 Finalize 方法。有关更多信息，请参见垃圾回收。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间
Open

其他资源

连接池 (ADO.NET)


DbConnection ..::.CreateCommand 方法

DbConnection
.
.
::
.
CreateCommand 方法
DbConnection 类

创建并返回与当前连接关联的 DbCommand 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function CreateCommand As DbCommand
public DbCommand CreateCommand()
public:
DbCommand^ CreateCommand()
member CreateCommand : unit -> DbCommand

返回值

类型： System.Data.Common DbCommand
一个 DbCommand 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间

其他资源

命令和参数 (ADO.NET)


DbConnection ..::.CreateDbCommand 方法

DbConnection
.
.
::
.
CreateDbCommand 方法
DbConnection 类

创建并返回与当前连接关联的 DbCommand 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function CreateDbCommand As DbCommand
protected abstract DbCommand CreateDbCommand()
protected:
virtual DbCommand^ CreateDbCommand() abstract
abstract CreateDbCommand : unit -> DbCommand

返回值

类型： System.Data.Common DbCommand
一个 DbCommand 对象。

如果要实现自己的连接，则重写此方法以实现创建和返回 DbCommand 对象所必需的代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间

其他资源

命令和参数 (ADO.NET)


DbConnection ..::.Dispose 方法

DbConnection
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnection 类

释放由 Component 占用的资源。

名称 说明
页首

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.EnlistTransaction 方法

DbConnection
.
.
::
.
EnlistTransaction 方法
DbConnection 类

在指定事务中登记。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub EnlistTransaction ( _
    transaction As Transaction _
)
public virtual void EnlistTransaction(
    Transaction transaction
)
public:
virtual void EnlistTransaction(
    Transaction^ transaction
)
abstract EnlistTransaction :
        transaction:Transaction -> unit
override EnlistTransaction :
        transaction:Transaction -> unit

参数

transaction
类型： System.Transactions Transaction
对用于登记的现有 Transaction 的引用。

ADO.NET 2.0 中的新增功能支持使用 EnlistTransaction 方法在分布式事务中登记。因为它在 Transaction 实例中登记连接，所以 EnlistTransaction 可利用 System.Transactions 命名空间中的可用功能来管理分布式事务。一旦连接被显式登记在事务中，则在第一个事务完成前，无法取消该登记或将它登记在另一个事务中。 ADO.NET 2.0 中的新增功能支持使用 EnlistTransaction 方法在分布式事务中登记。因为它在 Transaction 实例中登记连接，所以 EnlistTransaction 可利用 System.Transactions 命名空间中的可用功能来管理分布式事务。一旦连接被显式登记在事务中，则在第一个事务完成前，无法取消该登记或将它登记在另一个事务中。 ADO.NET 2.0 中的新增功能支持使用 EnlistTransaction 方法在分布式事务中登记。因为它在 Transaction 实例中登记连接，所以 EnlistTransaction 可利用 System.Transactions 命名空间中的可用功能来管理分布式事务。一旦连接被显式登记在事务中，则在第一个事务完成前，无法取消该登记或将它登记在另一个事务中。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbConnection ..::.GetSchema 方法

DbConnection
.
.
::
.
GetSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnection 类

返回此 DbConnection 的数据源的架构信息。

名称 说明
页首

如果连接与事务关联，则执行 GetSchema 调用可能导致某些提供程序引发异常。

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbConnection ..::.GetSchema 方法

DbConnection
.
.
::
.
GetSchema 方法
DbConnection 类

返回此 DbConnection 的数据源的架构信息。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function GetSchema As DataTable
public virtual DataTable GetSchema()
public:
virtual DataTable^ GetSchema()
abstract GetSchema : unit -> DataTable
override GetSchema : unit -> DataTable

返回值

类型： System.Data DataTable
包含架构信息的 DataTable。

如果连接与事务关联，则执行 GetSchema 调用可能导致某些提供程序引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
GetSchema 重载
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbConnection ..::.GetSchema 方法 (String)

DbConnection
.
.
::
.
GetSchema 方法 (String)
DbConnection 类

使用表示架构名称的指定字符串返回此 DbConnection 的数据源的架构信息。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function GetSchema ( _
    collectionName As String _
) As DataTable
public virtual DataTable GetSchema(
    string collectionName
)
public:
virtual DataTable^ GetSchema(
    String^ collectionName
)
abstract GetSchema :
        collectionName:string -> DataTable
override GetSchema :
        collectionName:string -> DataTable

参数

collectionName
类型： System String
指定要返回的架构的名称。

返回值

类型： System.Data DataTable
包含架构信息的 DataTable。
异常 | 条件
ArgumentException | collectionName 被指定为空。

如果连接与事务关联，则执行 GetSchema 调用可能导致某些提供程序引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
GetSchema 重载
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbConnection ..::.GetSchema 方法 (String, array<String >[]()[])

DbConnection
.
.
::
.
GetSchema 方法 (String,
array<
String
>
[]
()
[]
)
DbConnection 类

使用表示架构名称的指定字符串以及表示限制值的指定字符串数组返回此 DbConnection 的数据源的架构信息。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function GetSchema ( _
    collectionName As String, _
    restrictionValues As String() _
) As DataTable
public virtual DataTable GetSchema(
    string collectionName,
    string[] restrictionValues
)
public:
virtual DataTable^ GetSchema(
    String^ collectionName,
    array<String^>^ restrictionValues
)
abstract GetSchema :
        collectionName:string *
        restrictionValues:string[] -> DataTable
override GetSchema :
        collectionName:string *
        restrictionValues:string[] -> DataTable

参数

collectionName
类型： System String
指定要返回的架构的名称。
restrictionValues
类型：
array<
System String
>
[]
()
[]

为请求的架构指定一组限制值。

返回值

类型： System.Data DataTable
包含架构信息的 DataTable。
异常 | 条件
ArgumentException | collectionName 被指定为空。

restrictionValues 参数可以提供深度为 n 的值，这些值由特定集合的限制集合指定。为了在给定限制上设置值，并且不设置其他限制的值，您需要将前置限制设置为 null，然后为您想指定值的限制设置相应的值。 restrictionValues 参数可以提供深度为 n 的值，这些值由特定集合的限制集合指定。为了在给定限制上设置值，并且不设置其他限制的值，您需要将前置限制设置为 null，然后为您想指定值的限制设置相应的值。

例如，对于“Tables”集合，如果“Tables”集合有三个限制（数据库、所有者和表名称），而且您希望仅返回与所有者“Carl”关联的表，则必须至少传入以下值：null,“Carl”。如果没有传入限制值，则使用该限制的默认值。这与传入 null 的映射相同，但与传入一个空字符串作为参数值不同。在这种情况下，空字符串 ("") 被认为是指定参数的值。 例如，对于“Tables”集合，如果“Tables”集合有三个限制（数据库、所有者和表名称），而且您希望仅返回与所有者“Carl”关联的表，则必须至少传入以下值：null,“Carl”。如果没有传入限制值，则使用该限制的默认值。这与传入 null 的映射相同，但与传入一个空字符串作为参数值不同。在这种情况下，空字符串 ("") 被认为是指定参数的值。 例如，对于“Tables”集合，如果“Tables”集合有三个限制（数据库、所有者和表名称），而且您希望仅返回与所有者“Carl”关联的表，则必须至少传入以下值：null,“Carl”。如果没有传入限制值，则使用该限制的默认值。这与传入 null 的映射相同，但与传入一个空字符串作为参数值不同。在这种情况下，空字符串 ("") 被认为是指定参数的值。 例如，对于“Tables”集合，如果“Tables”集合有三个限制（数据库、所有者和表名称），而且您希望仅返回与所有者“Carl”关联的表，则必须至少传入以下值：null,“Carl”。如果没有传入限制值，则使用该限制的默认值。这与传入 null 的映射相同，但与传入一个空字符串作为参数值不同。在这种情况下，空字符串 ("") 被认为是指定参数的值。 例如，对于“Tables”集合，如果“Tables”集合有三个限制（数据库、所有者和表名称），而且您希望仅返回与所有者“Carl”关联的表，则必须至少传入以下值：null,“Carl”。如果没有传入限制值，则使用该限制的默认值。这与传入 null 的映射相同，但与传入一个空字符串作为参数值不同。在这种情况下，空字符串 ("") 被认为是指定参数的值。

如果连接与事务关联，则执行 GetSchema 调用可能导致某些提供程序引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
GetSchema 重载
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbConnection ..::.IDbConnection ..::.CreateCommand 方法

DbConnection
.
.
::
.
IDbConnection
.
.
::
.
CreateCommand 方法
DbConnection 类

创建并返回与当前连接关联的 DbCommand 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function CreateCommand As IDbCommand
    Implements IDbConnection.CreateCommand
IDbCommand IDbConnection.CreateCommand()
private:
virtual IDbCommand^ CreateCommand() sealed = IDbConnection::CreateCommand
private abstract CreateCommand : unit -> IDbCommand
private override CreateCommand : unit -> IDbCommand

返回值

类型： System.Data IDbCommand
与连接关联的 DbCommand 对象。

实现

有关更多信息，请参见命令和参数 (ADO.NET)和CreateCommand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.MemberwiseClone 方法

DbConnection
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnection 类

名称 说明
页首

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.OnStateChange 方法

DbConnection
.
.
::
.
OnStateChange 方法
DbConnection 类

引发 StateChange 事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnStateChange ( _
    stateChange As StateChangeEventArgs _
)
protected virtual void OnStateChange(
    StateChangeEventArgs stateChange
)
protected:
virtual void OnStateChange(
    StateChangeEventArgs^ stateChange
)
abstract OnStateChange :
        stateChange:StateChangeEventArgs -> unit
override OnStateChange :
        stateChange:StateChangeEventArgs -> unit

参数

stateChange
类型： System.Data StateChangeEventArgs
包含事件数据的 StateChangeEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnStateChange 时，确保调用基类的 OnStateChange 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.Open 方法

DbConnection
.
.
::
.
Open 方法
DbConnection 类

使用 ConnectionString 所指定的设置打开数据库连接。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Open
public abstract void Open()
public:
virtual void Open() abstract
abstract Open : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection 属性

DbConnection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnection 类

DbConnection 类型公开以下成员。

名称 说明
页首

参考

DbConnection 类
System.Data.Common 命名空间


DbConnection ..::.ConnectionString 属性

DbConnection
.
.
::
.
ConnectionString 属性
DbConnection 类

获取或设置用于打开连接的字符串。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<SettingsBindableAttribute(True)> _
Public MustOverride Property ConnectionString As String
    Get
    Set
[SettingsBindableAttribute(true)]
public abstract string ConnectionString { get; set; }
[SettingsBindableAttribute(true)]
public:
virtual property String^ ConnectionString {
    String^ get () abstract;
    void set (String^ value) abstract;
}
[<SettingsBindableAttribute(true)>]
abstract ConnectionString : string with get, set

属性值

类型： System String
用来建立初始连接的连接字符串。该连接字符串的确切内容取决于此连接的特定数据源。默认值为空字符串。 用来建立初始连接的连接字符串。该连接字符串的确切内容取决于此连接的特定数据源。默认值为空字符串。 用来建立初始连接的连接字符串。该连接字符串的确切内容取决于此连接的特定数据源。默认值为空字符串。

实现

该连接字符串的确切内容取决于此连接的特定数据源。若要确定哪些设置有效，请参见有关您正在使用的特定类型的连接的文档。 该连接字符串的确切内容取决于此连接的特定数据源。若要确定哪些设置有效，请参见有关您正在使用的特定类型的连接的文档。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnection ..::.ConnectionTimeout 属性

DbConnection
.
.
::
.
ConnectionTimeout 属性
DbConnection 类

获取在建立连接时终止尝试并生成错误之前所等待的时间。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property ConnectionTimeout As Integer
    Get
public virtual int ConnectionTimeout { get; }
public:
virtual property int ConnectionTimeout {
    int get ();
}
abstract ConnectionTimeout : int
override ConnectionTimeout : int

属性值

类型： System Int32
等待连接打开的时间（以秒为单位）。默认值是由您正在使用的连接的特定类型确定的。 等待连接打开的时间（以秒为单位）。默认值是由您正在使用的连接的特定类型确定的。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.Database 属性

DbConnection
.
.
::
.
Database 属性
DbConnection 类

在连接打开之后获取当前数据库的名称，或者在连接打开之前获取连接字符串中指定的数据库名。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property Database As String
    Get
public abstract string Database { get; }
public:
virtual property String^ Database {
    String^ get () abstract;
}
abstract Database : string

属性值

类型： System String
当前数据库的名称或连接打开后要使用的数据库的名称。默认值为空字符串。 当前数据库的名称或连接打开后要使用的数据库的名称。默认值为空字符串。

实现

如果当前数据库发生更改，连接通常会动态更新此属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.DataSource 属性

DbConnection
.
.
::
.
DataSource 属性
DbConnection 类

获取要连接的数据库服务器的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property DataSource As String
    Get
public abstract string DataSource { get; }
public:
virtual property String^ DataSource {
    String^ get () abstract;
}
abstract DataSource : string

属性值

类型： System String
要连接的数据库服务器的名称。默认值为空字符串。 要连接的数据库服务器的名称。默认值为空字符串。

如果与数据库的连接已关闭，则 DataSource 返回 DataSource 关键字的 ConnectionString 中包含的所有内容。如果连接打开且 ConnectionString 数据源关键字的值以“|datadirectory|”开头，则该属性只返回 DataSource 关键字的 ConnectionString 中包含的所有内容。如果与数据库的连接打开，则该属性返回本机提供程序对 DBPROP_INIT_DATASOURCE 的返回值；如果该返回值为空，则返回本机提供程序的 DBPROP_DATASOURCENAME。 如果与数据库的连接已关闭，则 DataSource 返回 DataSource 关键字的 ConnectionString 中包含的所有内容。如果连接打开且 ConnectionString 数据源关键字的值以“|datadirectory|”开头，则该属性只返回 DataSource 关键字的 ConnectionString 中包含的所有内容。如果与数据库的连接打开，则该属性返回本机提供程序对 DBPROP_INIT_DATASOURCE 的返回值；如果该返回值为空，则返回本机提供程序的 DBPROP_DATASOURCENAME。 如果与数据库的连接已关闭，则 DataSource 返回 DataSource 关键字的 ConnectionString 中包含的所有内容。如果连接打开且 ConnectionString 数据源关键字的值以“|datadirectory|”开头，则该属性只返回 DataSource 关键字的 ConnectionString 中包含的所有内容。如果与数据库的连接打开，则该属性返回本机提供程序对 DBPROP_INIT_DATASOURCE 的返回值；如果该返回值为空，则返回本机提供程序的 DBPROP_DATASOURCENAME。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnection ..::.DbProviderFactory 属性

DbConnection
.
.
::
.
DbProviderFactory 属性
DbConnection 类

获取此 DbConnection 的 DbProviderFactory。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable ReadOnly Property DbProviderFactory As DbProviderFactory
    Get
protected virtual DbProviderFactory DbProviderFactory { get; }
protected:
virtual property DbProviderFactory^ DbProviderFactory {
    DbProviderFactory^ get ();
}
abstract DbProviderFactory : DbProviderFactory
override DbProviderFactory : DbProviderFactory

属性值

类型： System.Data.Common DbProviderFactory
一个 DbProviderFactory。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.ServerVersion 属性

DbConnection
.
.
::
.
ServerVersion 属性
DbConnection 类

获取表示对象所连接到的服务器的版本的字符串。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride ReadOnly Property ServerVersion As String
    Get
[BrowsableAttribute(false)]
public abstract string ServerVersion { get; }
[BrowsableAttribute(false)]
public:
virtual property String^ ServerVersion {
    String^ get () abstract;
}
[<BrowsableAttribute(false)>]
abstract ServerVersion : string

属性值

类型： System String
数据库的版本。返回的字符串的格式取决于您正在使用的连接的特定类型。 数据库的版本。返回的字符串的格式取决于您正在使用的连接的特定类型。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection ..::.State 属性

DbConnection
.
.
::
.
State 属性
DbConnection 类

获取描述连接状态的字符串。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride ReadOnly Property State As ConnectionState
    Get
[BrowsableAttribute(false)]
public abstract ConnectionState State { get; }
[BrowsableAttribute(false)]
public:
virtual property ConnectionState State {
    ConnectionState get () abstract;
}
[<BrowsableAttribute(false)>]
abstract State : ConnectionState

属性值

类型： System.Data ConnectionState
连接的状态。返回的字符串的格式取决于您正在使用的连接的特定类型。 连接的状态。返回的字符串的格式取决于您正在使用的连接的特定类型。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnection 事件

DbConnection 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnection 类

DbConnection 类型公开以下成员。

名称 说明
页首

参考

DbConnection 类
System.Data.Common 命名空间


DbConnection ..::.StateChange 事件

DbConnection
.
.
::
.
StateChange 事件
DbConnection 类

当事件状态更改时发生。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Event StateChange As StateChangeEventHandler
public virtual event StateChangeEventHandler StateChange
public:
virtual  event StateChangeEventHandler^ StateChange {
    void add (StateChangeEventHandler^ value);
    void remove (StateChangeEventHandler^ value);
}
abstract StateChange : IEvent<StateChangeEventHandler,
    StateChangeEventArgs>
override StateChange : IEvent<StateChangeEventHandler,
    StateChangeEventArgs>

当事件状态从关闭变为打开或从打开变为关闭时，StateChange 事件发生。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbConnection 类
DbConnection 成员
System.Data.Common 命名空间


DbConnectionStringBuilder 类

DbConnectionStringBuilder 类
成员

为强类型连接字符串生成器提供基类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Class DbConnectionStringBuilder _
    Implements IDictionary, ICollection, IEnumerable, ICustomTypeDescriptor
public class DbConnectionStringBuilder : IDictionary,
    ICollection, IEnumerable, ICustomTypeDescriptor
public ref class DbConnectionStringBuilder : IDictionary,
    ICollection, IEnumerable, ICustomTypeDescriptor
type DbConnectionStringBuilder =
    class
        interface IDictionary
        interface ICollection
        interface IEnumerable
        interface ICustomTypeDescriptor
    end

DbConnectionStringBuilder 类提供派生强类型连接字符串生成器（SqlConnectionStringBuilder 和 OleDbConnectionStringBuilder 等）的基类。连接字符串生成器使开发人员可以通过编程方式创建语法正确的连接字符串，并分析和重新生成现有的连接字符串。 DbConnectionStringBuilder 类提供派生强类型连接字符串生成器（SqlConnectionStringBuilder 和 OleDbConnectionStringBuilder 等）的基类。连接字符串生成器使开发人员可以通过编程方式创建语法正确的连接字符串，并分析和重新生成现有的连接字符串。

DbConnectionStringBuilder 是以数据库不可知的方式定义的。由于增加了 System.Data.Common 命名空间，开发人员需要一个可对其编程的基类，以便生成可用于任意数据库的连接字符串。因此，DbConnectionStringBuilder 类允许用户分配任意键/值对并将生成的连接字符串传递给强类型提供程序。作为 .NET Framework 的一部分包含的所有数据提供程序都提供一个强类型类，该类从 DbConnectionStringBuilder: SqlConnectionStringBuilder、OracleConnectionStringBuilder、OdbcConnectionStringBuilder 和 OleDbConnectionStringBuilder 继承。 DbConnectionStringBuilder 是以数据库不可知的方式定义的。由于增加了 System.Data.Common 命名空间，开发人员需要一个可对其编程的基类，以便生成可用于任意数据库的连接字符串。因此，DbConnectionStringBuilder 类允许用户分配任意键/值对并将生成的连接字符串传递给强类型提供程序。作为 .NET Framework 的一部分包含的所有数据提供程序都提供一个强类型类，该类从 DbConnectionStringBuilder: SqlConnectionStringBuilder、OracleConnectionStringBuilder、OdbcConnectionStringBuilder 和 OleDbConnectionStringBuilder 继承。 DbConnectionStringBuilder 是以数据库不可知的方式定义的。由于增加了 System.Data.Common 命名空间，开发人员需要一个可对其编程的基类，以便生成可用于任意数据库的连接字符串。因此，DbConnectionStringBuilder 类允许用户分配任意键/值对并将生成的连接字符串传递给强类型提供程序。作为 .NET Framework 的一部分包含的所有数据提供程序都提供一个强类型类，该类从 DbConnectionStringBuilder: SqlConnectionStringBuilder、OracleConnectionStringBuilder、OdbcConnectionStringBuilder 和 OleDbConnectionStringBuilder 继承。 DbConnectionStringBuilder 是以数据库不可知的方式定义的。由于增加了 System.Data.Common 命名空间，开发人员需要一个可对其编程的基类，以便生成可用于任意数据库的连接字符串。因此，DbConnectionStringBuilder 类允许用户分配任意键/值对并将生成的连接字符串传递给强类型提供程序。作为 .NET Framework 的一部分包含的所有数据提供程序都提供一个强类型类，该类从 DbConnectionStringBuilder: SqlConnectionStringBuilder、OracleConnectionStringBuilder、OdbcConnectionStringBuilder 和 OleDbConnectionStringBuilder 继承。

开发人员可以为任意提供程序生成、分配和编辑连接字符串。对于支持特定键/值对的提供程序，连接字符串生成器提供了与已知对相对应的强类型属性。为了支持需要能够支持未知值的提供程序，开发人员还可以提供任意键/值对。 开发人员可以为任意提供程序生成、分配和编辑连接字符串。对于支持特定键/值对的提供程序，连接字符串生成器提供了与已知对相对应的强类型属性。为了支持需要能够支持未知值的提供程序，开发人员还可以提供任意键/值对。 开发人员可以为任意提供程序生成、分配和编辑连接字符串。对于支持特定键/值对的提供程序，连接字符串生成器提供了与已知对相对应的强类型属性。为了支持需要能够支持未知值的提供程序，开发人员还可以提供任意键/值对。

DbConnectionStringBuilder 类实现 ICustomTypeDescriptor 接口。这意味着该类在设计时使用 Visual Studio 设计器。当开发人员使用该设计器在 Visual Studio 内生成强类型数据集和强类型连接时，强类型连接字符串生成器类将显示与其类型关联的属性，并且还具有可为已知键映射常用值的转换器。 DbConnectionStringBuilder 类实现 ICustomTypeDescriptor 接口。这意味着该类在设计时使用 Visual Studio 设计器。当开发人员使用该设计器在 Visual Studio 内生成强类型数据集和强类型连接时，强类型连接字符串生成器类将显示与其类型关联的属性，并且还具有可为已知键映射常用值的转换器。 DbConnectionStringBuilder 类实现 ICustomTypeDescriptor 接口。这意味着该类在设计时使用 Visual Studio 设计器。当开发人员使用该设计器在 Visual Studio 内生成强类型数据集和强类型连接时，强类型连接字符串生成器类将显示与其类型关联的属性，并且还具有可为已知键映射常用值的转换器。

如果开发人员需要在应用程序中创建连接字符串，他们可以使用 DbConnectionStringBuilder 类或该类的一个强类型派生类来生成连接字符串并对其进行修改。DbConnectionStringBuilder 类还可以简化应用程序配置文件中存储的连接字符串的管理。 如果开发人员需要在应用程序中创建连接字符串，他们可以使用 DbConnectionStringBuilder 类或该类的一个强类型派生类来生成连接字符串并对其进行修改。DbConnectionStringBuilder 类还可以简化应用程序配置文件中存储的连接字符串的管理。

开发人员可以使用强类型连接字符串生成器类或 DbConnectionStringBuilder 类来创建连接字符串。DbConnectionStringBuilder 不对有效的键/值对执行检查。因此，使用此类可能会创建无效的连接字符串。SqlConnectionStringBuilder 只支持 SQL Server 所支持的键/值对；尝试添加无效对将引发异常。 开发人员可以使用强类型连接字符串生成器类或 DbConnectionStringBuilder 类来创建连接字符串。DbConnectionStringBuilder 不对有效的键/值对执行检查。因此，使用此类可能会创建无效的连接字符串。SqlConnectionStringBuilder 只支持 SQL Server 所支持的键/值对；尝试添加无效对将引发异常。 开发人员可以使用强类型连接字符串生成器类或 DbConnectionStringBuilder 类来创建连接字符串。DbConnectionStringBuilder 不对有效的键/值对执行检查。因此，使用此类可能会创建无效的连接字符串。SqlConnectionStringBuilder 只支持 SQL Server 所支持的键/值对；尝试添加无效对将引发异常。 开发人员可以使用强类型连接字符串生成器类或 DbConnectionStringBuilder 类来创建连接字符串。DbConnectionStringBuilder 不对有效的键/值对执行检查。因此，使用此类可能会创建无效的连接字符串。SqlConnectionStringBuilder 只支持 SQL Server 所支持的键/值对；尝试添加无效对将引发异常。

Add 方法和 Item 属性都处理插入恶意项的尝试。例如，下面的代码正确转义了嵌套的键/值对： Add 方法和 Item 属性都处理插入恶意项的尝试。例如，下面的代码正确转义了嵌套的键/值对：

[Visual Basic]

Dim builder As New System.Data.Common.DbConnectionStringBuilder
builder("Data Source") = "(local)"
builder("integrated sSecurity") = True
builder("Initial Catalog") = "AdventureWorks;NewValue=Bad"

[C#]

System.Data.Common.DbConnectionStringBuilder builder =
    new System.Data.Common.DbConnectionStringBuilder();
builder["Data Source"] = "(local)";
builder["integrated Security"] = true;
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad";

结果为下面的连接字符串，它以一种安全的方式处理无效值：

data source=(local);integrated security=True;
initial catalog="AdventureWorks;NewValue=Bad"

下面的控制台应用程序生成两个连接字符串，一个用于 Microsoft Jet 数据库，另一个用于 Microsoft SQL Server 2005 数据库。在每种情况下，代码都使用泛型 DbConnectionStringBuilder 类创建连接字符串，然后将 DbConnectionStringBuilder 实例的 ConnectionString 属性传递给强类型连接类的构造函数。这不是必需的；代码还可以创建各个强类型连接字符串生成器实例。该示例还对一个现有的连接字符串进行分析，并演示操作该连接字符串的内容的各种方法。 下面的控制台应用程序生成两个连接字符串，一个用于 Microsoft Jet 数据库，另一个用于 Microsoft SQL Server 2005 数据库。在每种情况下，代码都使用泛型 DbConnectionStringBuilder 类创建连接字符串，然后将 DbConnectionStringBuilder 实例的 ConnectionString 属性传递给强类型连接类的构造函数。这不是必需的；代码还可以创建各个强类型连接字符串生成器实例。该示例还对一个现有的连接字符串进行分析，并演示操作该连接字符串的内容的各种方法。 下面的控制台应用程序生成两个连接字符串，一个用于 Microsoft Jet 数据库，另一个用于 Microsoft SQL Server 2005 数据库。在每种情况下，代码都使用泛型 DbConnectionStringBuilder 类创建连接字符串，然后将 DbConnectionStringBuilder 实例的 ConnectionString 属性传递给强类型连接类的构造函数。这不是必需的；代码还可以创建各个强类型连接字符串生成器实例。该示例还对一个现有的连接字符串进行分析，并演示操作该连接字符串的内容的各种方法。 下面的控制台应用程序生成两个连接字符串，一个用于 Microsoft Jet 数据库，另一个用于 Microsoft SQL Server 2005 数据库。在每种情况下，代码都使用泛型 DbConnectionStringBuilder 类创建连接字符串，然后将 DbConnectionStringBuilder 实例的 ConnectionString 属性传递给强类型连接类的构造函数。这不是必需的；代码还可以创建各个强类型连接字符串生成器实例。该示例还对一个现有的连接字符串进行分析，并演示操作该连接字符串的内容的各种方法。

Sub Main()
    Dim builder As New DbConnectionStringBuilder()
    builder.ConnectionString = "Data Source=c:\MyData\MyDb.mdb"
    builder.Add("Provider", "Microsoft.Jet.Oledb.4.0")
    builder.Add("Jet OLEDB:Database Password", "*******")
    builder.Add("Jet OLEDB:System Database", _
        "c:\MyData\Workgroup.mdb")

    ' Set up row-level locking.
    builder.Add("Jet OLEDB:Database Locking Mode", 1)

    ' Note that the DbConnectionStringBuilder class
    ' is database agnostic, and it's possible to
    ' build any type of connection string using
    ' this class.
    ' Notice that the ConnectionString property may have been
    ' formatted by the DbConnectionStringBuilder class.

    Dim oledbConnect As New _
        OleDbConnection(builder.ConnectionString)
    Console.WriteLine(oledbConnect.ConnectionString)

    ' Use the same DbConnectionStringBuilder to create
    ' a SqlConnection object.
    builder.Clear()
    builder.Add("integrated security", True)
    builder.Add("Initial Catalog", "AdventureWorks")
    builder.Add("Data Source", "(local)")

    Dim sqlConnect As New SqlConnection(builder.ConnectionString)
    Console.WriteLine(sqlConnect.ConnectionString)

    ' Pass the DbConnectionStringBuilder an existing
    ' connection string, and you can retrieve and
    ' modify any of the elements.
    builder.ConnectionString = _
        "server=(local);user id=*******;" & _
        "password=*******;initial catalog=AdventureWorks"
    builder.Item("Server") = "."
    builder.Remove("User ID")

    ' Note that calling Remove on a nonexistent item doesn't
    ' throw an exception.
    builder.Remove("BadItem")

    ' The Item property is the default for the class,
    ' and setting the Item property adds the value if
    ' necessary.
    builder("Integrated Security") = True
    builder.Remove("password")
    builder.Item("User ID") = "Hello"
    Console.WriteLine(builder.ConnectionString)

    Console.WriteLine("Press Enter to finish.")
    Console.ReadLine()
End Sub

static void Main()
{
    DbConnectionStringBuilder builder =
        new DbConnectionStringBuilder();
    builder.ConnectionString = @"Data Source=c:\MyData\MyDb.mdb";
    builder.Add("Provider", "Microsoft.Jet.Oledb.4.0");
    builder.Add("Jet OLEDB:Database Password", "*******");
    builder.Add("Jet OLEDB:System Database",
        @"c:\MyData\Workgroup.mdb");
    // Set up row-level locking.
    builder.Add("Jet OLEDB:Database Locking Mode", 1);

    // The DbConnectionStringBuilder class
    // is database agnostic, so it's possible to
    // build any type of connection string using
    // this class.

    // The ConnectionString property may have been
    // formatted by the DbConnectionStringBuilder class.
    OleDbConnection oledbConnect = new
        OleDbConnection(builder.ConnectionString);
    Console.WriteLine(oledbConnect.ConnectionString);

    // Use the same DbConnectionStringBuilder to create
    // a SqlConnection object.
    builder.Clear();
    builder.Add("integrated security", true);
    builder.Add("Initial Catalog", "AdventureWorks");
    builder.Add("Data Source", "(local)");

    SqlConnection sqlConnect = new
        SqlConnection(builder.ConnectionString);
    Console.WriteLine(sqlConnect.ConnectionString);

    // Pass the DbConnectionStringBuilder an existing
    // connection string, and you can retrieve and
    // modify any of the elements.
    builder.ConnectionString = "server=(local);user id=*******;" +
        "password=*******;initial catalog=AdventureWorks";
    builder["Server"] = ".";
    builder.Remove("User ID");

    // Note that calling Remove on a nonexistent item doesn't
    // throw an exception.
    builder.Remove("BadItem");

    // Setting the indexer adds the value if
    // necessary.
    builder["Integrated Security"] = true;
    builder.Remove("password");
    builder["User ID"] = "Hello";
    Console.WriteLine(builder.ConnectionString);

    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();
}

System.Data.Common System.Data.Common..::.DbConnectionStringBuilderDbConnectionStringBuilder

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder 成员

DbConnectionStringBuilder 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnectionStringBuilder 类

为强类型连接字符串生成器提供基类。

DbConnectionStringBuilder 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbConnectionStringBuilder 类
System.Data.Common 命名空间


DbConnectionStringBuilder 构造函数

DbConnectionStringBuilder 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnectionStringBuilder 类

初始化 DbConnectionStringBuilder 类的一个新实例。

名称 说明
页首

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder 构造函数

DbConnectionStringBuilder 构造函数
DbConnectionStringBuilder 类

初始化 DbConnectionStringBuilder 类的一个新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DbConnectionStringBuilder()
public:
DbConnectionStringBuilder()
new : unit -> DbConnectionStringBuilder

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
DbConnectionStringBuilder 重载
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder 构造函数 (Boolean)

DbConnectionStringBuilder 构造函数 (Boolean)
DbConnectionStringBuilder 类

初始化 DbConnectionStringBuilder 类的新实例，可以选择使用 ODBC 规则来引用值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    useOdbcRules As Boolean _
)
public DbConnectionStringBuilder(
    bool useOdbcRules
)
public:
DbConnectionStringBuilder(
    bool useOdbcRules
)
new :
        useOdbcRules:bool -> DbConnectionStringBuilder

参数

useOdbcRules
类型： System Boolean
true 指示使用 {} 分隔字段，false 指示使用引号。

如果 useOdbcRules 为 true，则此 DbConnectionStringBuilder 使用 ODBC 规则将值引起来（使用大括号 ({}) 将值括起来）。如果 useOdbcRules 为 false，则此 DbConnectionStringBuilder 使用引号 ("") 分隔值。 如果 useOdbcRules 为 true，则此 DbConnectionStringBuilder 使用 ODBC 规则将值引起来（使用大括号 ({}) 将值括起来）。如果 useOdbcRules 为 false，则此 DbConnectionStringBuilder 使用引号 ("") 分隔值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
DbConnectionStringBuilder 重载
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder 方法

DbConnectionStringBuilder 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnectionStringBuilder 类

DbConnectionStringBuilder 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbConnectionStringBuilder 类
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.Add 方法

DbConnectionStringBuilder
.
.
::
.
Add 方法
DbConnectionStringBuilder 类

将带有指定键和值的项添加到 DbConnectionStringBuilder 中。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Add ( _
    keyword As String, _
    value As Object _
)
public void Add(
    string keyword,
    Object value
)
public:
void Add(
    String^ keyword,
    Object^ value
)
member Add :
        keyword:string *
        value:Object -> unit

参数

keyword
类型： System String
要添加到 DbConnectionStringBuilder 中的键。
value
类型： System Object
指定键的值。
异常 | 条件
ArgumentNullException | keyword 为空引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | DbConnectionStringBuilder 为只读。 - 或 - DbConnectionStringBuilder 具有固定大小。

通过设置字典中不存在的键的值，Item 属性也可用于添加新元素。例如：myCollection["myNonexistentKey"] = myValue。 通过设置字典中不存在的键的值，Item 属性也可用于添加新元素。例如：myCollection["myNonexistentKey"] = myValue。

通过传递空（在 Visual Basic 中为 Nothing）键调用 Add 方法将引发 ArgumentNullException。但是，通过传递空值调用 Add 方法将移除键/值对。 通过传递空（在 Visual Basic 中为 Nothing）键调用 Add 方法将引发 ArgumentNullException。但是，通过传递空值调用 Add 方法将移除键/值对。

下面的示例创建一个新的 DbConnectionStringBuilder 并添加项。该代码还演示如何使用 Add 方法覆盖现有项，还包含一个 ArgumentNullException 被注释掉的块（不注释将引发异常）。 下面的示例创建一个新的 DbConnectionStringBuilder 并添加项。该代码还演示如何使用 Add 方法覆盖现有项，还包含一个 ArgumentNullException 被注释掉的块（不注释将引发异常）。

说明 说明

此示例包含一个密码，用以演示 DbConnectionStringBuilder 如何使用连接字符串。在您的应用程序中，建议您使用 Windows 身份验证。如果必须使用密码，请不要在应用程序中包含硬编码的密码。 此示例包含一个密码，用以演示 DbConnectionStringBuilder 如何使用连接字符串。在您的应用程序中，建议您使用 Windows 身份验证。如果必须使用密码，请不要在应用程序中包含硬编码的密码。 此示例包含一个密码，用以演示 DbConnectionStringBuilder 如何使用连接字符串。在您的应用程序中，建议您使用 Windows 身份验证。如果必须使用密码，请不要在应用程序中包含硬编码的密码。

Sub Main()
    Try
        Dim builder As New DbConnectionStringBuilder
        builder.Add("Data Source", "ServerName")
        builder.Add("Initial Catalog", "TheDatabase")
        builder.Add("User ID", "UserName")
        builder.Add("Password", "*******")
        builder.Add("Command Logging", False)

        ' Overwrite the existing "User ID" value.
        builder.Add("User ID", "NewUserName")

        ' The following code would trigger
        ' an ArgumentNullException.
        ' builder.Add(Nothing, "Some Value")

        Console.WriteLine(builder.ConnectionString)

    Catch ex As ArgumentNullException
        Console.WriteLine("Null key values are not allowed.")
    End Try

    Console.WriteLine("Press Enter to continue.")
    Console.ReadLine()
End Sub

static void Main()
{
    try
    {
        DbConnectionStringBuilder builder =
            new DbConnectionStringBuilder();
        builder.Add("Data Source", "ServerName");
        builder.Add("Initial Catalog", "TheDatabase");
        builder.Add("User ID", "UserName");
        builder.Add("Password", "*******");
        builder.Add("Command Logging", false);

        // Overwrite the existing "User ID" value.
        builder.Add("User ID", "NewUserName");

        // The following code would trigger
        // an ArgumentNullException:
        // builder.Add(null, "Some Value");

        Console.WriteLine(builder.ConnectionString);
    }
    catch (ArgumentNullException)
    {
        Console.WriteLine("Null key values are not allowed.");
    }

    Console.WriteLine("Press Enter to continue.");
    Console.ReadLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.AppendKeyValuePair 方法

DbConnectionStringBuilder
.
.
::
.
AppendKeyValuePair 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnectionStringBuilder 类

提供了一种有效而安全的方法，用于将项和值追加到某个现有的 StringBuilder 对象。

名称 说明
页首

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.AppendKeyValuePair 方法 (StringBuilder, String, String)

DbConnectionStringBuilder
.
.
::
.
AppendKeyValuePair 方法 (StringBuilder, String, String)
DbConnectionStringBuilder 类

提供了一种有效而安全的方法，用于将项和值追加到某个现有的 StringBuilder 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared Sub AppendKeyValuePair ( _
    builder As StringBuilder, _
    keyword As String, _
    value As String _
)
public static void AppendKeyValuePair(
    StringBuilder builder,
    string keyword,
    string value
)
public:
static void AppendKeyValuePair(
    StringBuilder^ builder,
    String^ keyword,
    String^ value
)
static member AppendKeyValuePair :
        builder:StringBuilder *
        keyword:string *
        value:string -> unit

参数

builder
类型： System.Text StringBuilder
要向其中添加键/值对的 StringBuilder。
keyword
类型： System String
要添加的键。
value
类型： System String
提供的键的值。

此方法允许使用 StringBuilder 的开发人员来创建键/值对的集合，以便在添加键/值对时能够利用 DbConnectionStringBuilder 类中包括的功能，而不必创建和维护 DbConnectionStringBuilder 实例，以免带来额外的系统开销。AppendKeyValuePair 方法正确设置键和值的格式，并将新字符串添加到提供的 StringBuilder 中。 此方法允许使用 StringBuilder 的开发人员来创建键/值对的集合，以便在添加键/值对时能够利用 DbConnectionStringBuilder 类中包括的功能，而不必创建和维护 DbConnectionStringBuilder 实例，以免带来额外的系统开销。AppendKeyValuePair 方法正确设置键和值的格式，并将新字符串添加到提供的 StringBuilder 中。

如果某一进程已创建了连接字符串，但现在某个应用程序必须对该连接字符串进行简单修改，则使用 StringBuilder 对象仅添加键/值对可能更加有效。开发人员可以不创建新的 DbConnectionStringBuilder，而是调用 AppendKeyValuePair 方法，传入一个包含提供的连接字符串的 StringBuilder。下面的过程演示此技术的简单示例。 如果某一进程已创建了连接字符串，但现在某个应用程序必须对该连接字符串进行简单修改，则使用 StringBuilder 对象仅添加键/值对可能更加有效。开发人员可以不创建新的 DbConnectionStringBuilder，而是调用 AppendKeyValuePair 方法，传入一个包含提供的连接字符串的 StringBuilder。下面的过程演示此技术的简单示例。 如果某一进程已创建了连接字符串，但现在某个应用程序必须对该连接字符串进行简单修改，则使用 StringBuilder 对象仅添加键/值对可能更加有效。开发人员可以不创建新的 DbConnectionStringBuilder，而是调用 AppendKeyValuePair 方法，传入一个包含提供的连接字符串的 StringBuilder。下面的过程演示此技术的简单示例。

Public Function AddPooling(ByVal connectionString As String) As String
    Dim builder As New StringBuilder(connectionString)
    DbConnectionStringBuilder.AppendKeyValuePair(builder, "Pooling", "True")
    Return builder.ToString()
End Function

public string AddPooling(string connectionString)
{
    StringBuilder builder = new StringBuilder(connectionString);
    DbConnectionStringBuilder.AppendKeyValuePair(builder, "Pooling", "true");
    return builder.ToString();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
AppendKeyValuePair 重载
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.AppendKeyValuePair 方法 (StringBuilder, String, String, Boolean)

DbConnectionStringBuilder
.
.
::
.
AppendKeyValuePair 方法 (StringBuilder, String, String, Boolean)
DbConnectionStringBuilder 类

提供了一种有效而安全的方法，用于将项和值追加到某个现有的 StringBuilder 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared Sub AppendKeyValuePair ( _
    builder As StringBuilder, _
    keyword As String, _
    value As String, _
    useOdbcRules As Boolean _
)
public static void AppendKeyValuePair(
    StringBuilder builder,
    string keyword,
    string value,
    bool useOdbcRules
)
public:
static void AppendKeyValuePair(
    StringBuilder^ builder,
    String^ keyword,
    String^ value,
    bool useOdbcRules
)
static member AppendKeyValuePair :
        builder:StringBuilder *
        keyword:string *
        value:string *
        useOdbcRules:bool -> unit

参数

builder
类型： System.Text StringBuilder
要向其中添加键/值对的 StringBuilder。
keyword
类型： System String
要添加的键。
value
类型： System String
提供的键的值。
useOdbcRules
类型： System Boolean
true 指示使用 {} 分隔字段，false 指示使用引号。

此方法允许使用 StringBuilder 的开发人员来创建键/值对的集合，以便在添加键/值对时能够利用 DbConnectionStringBuilder 类中包括的功能，而不必创建和维护 DbConnectionStringBuilder 实例，以免带来额外的系统开销。AppendKeyValuePair 方法正确设置键和值的格式，并将新字符串添加到提供的 StringBuilder 中。 此方法允许使用 StringBuilder 的开发人员来创建键/值对的集合，以便在添加键/值对时能够利用 DbConnectionStringBuilder 类中包括的功能，而不必创建和维护 DbConnectionStringBuilder 实例，以免带来额外的系统开销。AppendKeyValuePair 方法正确设置键和值的格式，并将新字符串添加到提供的 StringBuilder 中。

尽管大部分数据源都允许使用引号来分隔字段，但 ODBC 不允许这种做法。对于 ODBC 连接字符串，必须使用大括号 ({})。为了让 DbConnectionStringBuilder 使用 ODBC 规则来分隔字段，请将 useOdbcRules 参数设置为 true。 尽管大部分数据源都允许使用引号来分隔字段，但 ODBC 不允许这种做法。对于 ODBC 连接字符串，必须使用大括号 ({})。为了让 DbConnectionStringBuilder 使用 ODBC 规则来分隔字段，请将 useOdbcRules 参数设置为 true。

如果某进程已创建连接字符串，但现在应用程序必须对该连接字符串进行简单修改，则只使用 StringBuilder 对象添加键/值对可能更有效。开发人员可以不创建新的 DbConnectionStringBuilder，而是调用 AppendKeyValuePair 方法，传入一个包含提供的连接字符串的 StringBuilder。下面的过程演示此技术的简单示例，并使用 ODBC 规则来引用值。 如果某进程已创建连接字符串，但现在应用程序必须对该连接字符串进行简单修改，则只使用 StringBuilder 对象添加键/值对可能更有效。开发人员可以不创建新的 DbConnectionStringBuilder，而是调用 AppendKeyValuePair 方法，传入一个包含提供的连接字符串的 StringBuilder。下面的过程演示此技术的简单示例，并使用 ODBC 规则来引用值。 如果某进程已创建连接字符串，但现在应用程序必须对该连接字符串进行简单修改，则只使用 StringBuilder 对象添加键/值对可能更有效。开发人员可以不创建新的 DbConnectionStringBuilder，而是调用 AppendKeyValuePair 方法，传入一个包含提供的连接字符串的 StringBuilder。下面的过程演示此技术的简单示例，并使用 ODBC 规则来引用值。

Public Function AddPooling(ByVal connectionString As String) As String
    Dim builder As New StringBuilder(connectionString)
    DbConnectionStringBuilder.AppendKeyValuePair(builder, "Pooling", "True")
    Return builder.ToString()
End Function

public string AddPooling(string connectionString)
{
    StringBuilder builder = new StringBuilder(connectionString);
    DbConnectionStringBuilder.AppendKeyValuePair(builder, "Pooling", "true");
    return builder.ToString();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
AppendKeyValuePair 重载
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.Clear 方法

DbConnectionStringBuilder
.
.
::
.
Clear 方法
DbConnectionStringBuilder 类

清除 DbConnectionStringBuilder 实例的内容。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub Clear
public virtual void Clear()
public:
virtual void Clear()
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

异常 | 条件
NotSupportedException | DbConnectionStringBuilder 为只读。

Clear 方法从 DbConnectionStringBuilder 中移除所有的键/值对，并重置所有的对应属性。这包括将 Count 属性设置为 0 以及将 ConnectionString 属性设置为空字符串。 Clear 方法从 DbConnectionStringBuilder 中移除所有的键/值对，并重置所有的对应属性。这包括将 Count 属性设置为 0 以及将 ConnectionString 属性设置为空字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.ClearPropertyDescriptors 方法

DbConnectionStringBuilder
.
.
::
.
ClearPropertyDescriptors 方法
DbConnectionStringBuilder 类

清除关联的 DbConnectionStringBuilder 上的 PropertyDescriptor 对象的集合。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Sub ClearPropertyDescriptors
protected internal void ClearPropertyDescriptors()
protected public:
void ClearPropertyDescriptors()
member ClearPropertyDescriptors : unit -> unit

设计器用此方法清除 DbConnectionStringBuilder 上的所有关联属性说明符。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ContainsKey 方法

DbConnectionStringBuilder
.
.
::
.
ContainsKey 方法
DbConnectionStringBuilder 类

确定 DbConnectionStringBuilder 是否包含特定键。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function ContainsKey ( _
    keyword As String _
) As Boolean
public virtual bool ContainsKey(
    string keyword
)
public:
virtual bool ContainsKey(
    String^ keyword
)
abstract ContainsKey :
        keyword:string -> bool
override ContainsKey :
        keyword:string -> bool

参数

keyword
类型： System String
要在 DbConnectionStringBuilder 中定位的键。

返回值

类型： System Boolean
如果 DbConnectionStringBuilder 包含具有指定键的项，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | keyword 为 null 引用（在 Visual Basic 中为 Nothing）。
Sub Main()
    ' The following code example searches for an element in a
    ' DbConnectionStringBuilder.
    Dim builder As New DbConnectionStringBuilder
    builder.Add("Provider", "Provider=Microsoft.Jet.OLEDB.4.0")
    builder.Add("Data Source", "C:\ThisExcelWorkbook.xls")
    builder.Add("Extended Properties", "Excel 8.0;HDR=Yes;IMEX=1")

    ' Displays the values in the DbConnectionStringBuilder.
    Console.WriteLine("Contents of the DbConnectionStringBuilder:")
    Console.WriteLine(builder.ConnectionString)

    ' Searches for a key.
    If builder.ContainsKey("Data Source") Then
        Console.WriteLine("The collection contains the key ""Data Source"".")
    Else
        Console.WriteLine("The collection does not contain the key ""Data Source"".")
    End If
    Console.ReadLine()
End Sub

static void Main()
{
    DbConnectionStringBuilder builder = new DbConnectionStringBuilder();
    builder.Add("Provider", "Provider=Microsoft.Jet.OLEDB.4.0");
    builder.Add("Data Source", "C:\\ThisExcelWorkbook.xls");
    builder.Add("Extended Properties", "Excel 8.0;HDR=Yes;IMEX=1");

    // Displays the values in the DbConnectionStringBuilder.
    Console.WriteLine("Contents of the DbConnectionStringBuilder:");
    Console.WriteLine(builder.ConnectionString);

    // Searches for a key.
    if (builder.ContainsKey("Data Source"))
    {
        Console.WriteLine("The collection contains the key \"Data Source\".");
    }
    else
    {
        Console.WriteLine("The collection does not contain the key \"Data Source\".");
    }
    Console.ReadLine();
}

这段代码产生以下输出：

Contents of the DbConnectionStringBuilder:
provider="Provider=Microsoft.Jet.OLEDB.4.0";data
source=C:\MyExcel.xls;extended
properties="Excel 8.0;HDR=Yes;IMEX=1"
The collection contains the key "Data Source".

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.EquivalentTo 方法

DbConnectionStringBuilder
.
.
::
.
EquivalentTo 方法
DbConnectionStringBuilder 类

将此 DbConnectionStringBuilder 对象中的连接信息与提供的对象中的连接信息进行比较。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function EquivalentTo ( _
    connectionStringBuilder As DbConnectionStringBuilder _
) As Boolean
public virtual bool EquivalentTo(
    DbConnectionStringBuilder connectionStringBuilder
)
public:
virtual bool EquivalentTo(
    DbConnectionStringBuilder^ connectionStringBuilder
)
abstract EquivalentTo :
        connectionStringBuilder:DbConnectionStringBuilder -> bool
override EquivalentTo :
        connectionStringBuilder:DbConnectionStringBuilder -> bool

参数

connectionStringBuilder
类型： System.Data.Common DbConnectionStringBuilder
要与此 DbConnectionStringBuilder 对象进行比较的 DbConnectionStringBuilder。

返回值

类型： System Boolean
如果两个 DbConnectionStringBuilder 对象中的连接信息生成等效的连接字符串，则为 true；否则为 false。

键名的比较不区分大小写；值比较区分大小写。

如果键/值对相等，则无论其顺序如何，EquivalentTo 方法都返回 true。由于连接字符串中的顺序并不重要，因此两个连接字符串的连接行为等效。但是，不同的顺序可能会影响基于这些连接字符串的连接的连接池行为。 如果键/值对相等，则无论其顺序如何，EquivalentTo 方法都返回 true。由于连接字符串中的顺序并不重要，因此两个连接字符串的连接行为等效。但是，不同的顺序可能会影响基于这些连接字符串的连接的连接池行为。 如果键/值对相等，则无论其顺序如何，EquivalentTo 方法都返回 true。由于连接字符串中的顺序并不重要，因此两个连接字符串的连接行为等效。但是，不同的顺序可能会影响基于这些连接字符串的连接的连接池行为。

Sub Main()
    Dim builder1 As New DbConnectionStringBuilder
    builder1.ConnectionString = _
        "Value1=SomeValue;Value2=20;Value3=30;Value4=40"
    Console.WriteLine("builder1 = " & builder1.ConnectionString)

    Dim builder2 As New DbConnectionStringBuilder
    builder2.ConnectionString = _
        "value2=20;value3=30;VALUE4=40;Value1=SomeValue"
    Console.WriteLine("builder2 = " & builder2.ConnectionString)

    Dim builder3 As New DbConnectionStringBuilder
    builder3.ConnectionString = _
        "value2=20;value3=30;VALUE4=40;Value1=SOMEVALUE"
    Console.WriteLine("builder3 = " & builder3.ConnectionString)

    ' builder1 and builder2 contain the same
    ' keys and values, in different order, and the
    ' keys are not consistently cased. They are equivalent.
    Console.WriteLine("builder1.EquivalentTo(builder2) = " & _
        builder1.EquivalentTo(builder2).ToString())

    ' builder2 and builder3 contain the same key/value pairs in the
    ' the same order, but the value casing is different, so they're
    ' not equivalent.
    Console.WriteLine("builder2.EquivalentTo(builder3) = " & _
        builder2.EquivalentTo(builder3).ToString())

    Console.WriteLine("Press Enter to continue.")
    Console.ReadLine()
End Sub

static void Main()
{
    DbConnectionStringBuilder builder1 =
        new DbConnectionStringBuilder();
    builder1.ConnectionString =
        "Value1=SomeValue;Value2=20;Value3=30;Value4=40";
    Console.WriteLine("builder1 = " + builder1.ConnectionString);

    DbConnectionStringBuilder builder2 =
        new DbConnectionStringBuilder();
    builder2.ConnectionString =
        "value2=20;value3=30;VALUE4=40;Value1=SomeValue";
    Console.WriteLine("builder2 = " + builder2.ConnectionString);

    DbConnectionStringBuilder builder3 =
        new DbConnectionStringBuilder();
    builder3.ConnectionString =
        "value2=20;value3=30;VALUE4=40;Value1=SOMEVALUE";
    Console.WriteLine("builder3 = " + builder3.ConnectionString);

    // builder1 and builder2 contain the same
    // keys and values, in different order, and the
    // keys are not consistently cased. They are equivalent.
    Console.WriteLine("builder1.EquivalentTo(builder2) = " +
        builder1.EquivalentTo(builder2).ToString());

    // builder2 and builder3 contain the same key/value pairs in the
    // the same order, but the value casing is different, so they're
    // not equivalent.
    Console.WriteLine("builder2.EquivalentTo(builder3) = " +
        builder2.EquivalentTo(builder3).ToString());

    Console.WriteLine("Press Enter to continue.");
    Console.ReadLine();
}

此示例显示以下输出：

builder1 = value1=SomeValue;value2=20;value3=30;value4=40
builder2 = value2=20;value3=30;value4=40;value1=SomeValue
builder3 = value2=20;value3=30;value4=40;value1=SOMEVALUE
builder1.EquivalentTo(builder2) = True
builder2.EquivalentTo(builder3) = False

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.GetEvents 方法

DbConnectionStringBuilder
.
.
::
.
GetEvents 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnectionStringBuilder 类

名称 说明
页首

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetEvents 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetEvents 方法
DbConnectionStringBuilder 类

返回此组件实例的事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEvents As EventDescriptorCollection
    Implements ICustomTypeDescriptor.GetEvents
EventDescriptorCollection ICustomTypeDescriptor.GetEvents()
private:
virtual EventDescriptorCollection^ GetEvents() sealed = ICustomTypeDescriptor::GetEvents
private abstract GetEvents : unit -> EventDescriptorCollection
private override GetEvents : unit -> EventDescriptorCollection

返回值

类型： System.ComponentModel EventDescriptorCollection
表示此组件实例的事件的 EventDescriptorCollection。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关更多信息，请参见 GetEvents。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
GetEvents 重载
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetEvents 方法 ( array<Attribute >[]()[])

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetEvents 方法 (
array<
Attribute
>
[]
()
[]
)
DbConnectionStringBuilder 类

将指定的特性数组用作筛选器来返回此组件实例的事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEvents ( _
    attributes As Attribute() _
) As EventDescriptorCollection Implements ICustomTypeDescriptor.GetEvents
EventDescriptorCollection ICustomTypeDescriptor.GetEvents(
    Attribute[] attributes
)
private:
virtual EventDescriptorCollection^ GetEvents(
    array<Attribute^>^ attributes
) sealed = ICustomTypeDescriptor::GetEvents
private abstract GetEvents :
        attributes:Attribute[] -> EventDescriptorCollection
private override GetEvents :
        attributes:Attribute[] -> EventDescriptorCollection

参数

attributes
类型：
array<
System Attribute
>
[]
()
[]

用作筛选器的 Attribute 类型数组。

返回值

类型： System.ComponentModel EventDescriptorCollection
表示此组件实例的已筛选事件的 EventDescriptorCollection。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关更多信息，请参见 GetEvents。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
GetEvents 重载
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.GetProperties 方法

DbConnectionStringBuilder
.
.
::
.
GetProperties 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnectionStringBuilder 类

名称 说明
页首

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetProperties 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetProperties 方法
DbConnectionStringBuilder 类

返回此组件实例的属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetProperties As PropertyDescriptorCollection
    Implements ICustomTypeDescriptor.GetProperties
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()
private:
virtual PropertyDescriptorCollection^ GetProperties() sealed = ICustomTypeDescriptor::GetProperties
private abstract GetProperties : unit -> PropertyDescriptorCollection
private override GetProperties : unit -> PropertyDescriptorCollection

返回值

类型： System.ComponentModel PropertyDescriptorCollection
表示此组件实例的属性的 PropertyDescriptorCollection。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关更多信息，请参见 GetProperties。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
GetProperties 重载
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetProperties 方法 ( array<Attribute >[]()[])

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetProperties 方法 (
array<
Attribute
>
[]
()
[]
)
DbConnectionStringBuilder 类

返回将特性数组用作筛选器的此组件实例的属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetProperties ( _
    attributes As Attribute() _
) As PropertyDescriptorCollection Implements ICustomTypeDescriptor.GetProperties
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(
    Attribute[] attributes
)
private:
virtual PropertyDescriptorCollection^ GetProperties(
    array<Attribute^>^ attributes
) sealed = ICustomTypeDescriptor::GetProperties
private abstract GetProperties :
        attributes:Attribute[] -> PropertyDescriptorCollection
private override GetProperties :
        attributes:Attribute[] -> PropertyDescriptorCollection

参数

attributes
类型：
array<
System Attribute
>
[]
()
[]

用作筛选器的 Attribute 类型数组。

返回值

类型： System.ComponentModel PropertyDescriptorCollection
表示此组件实例的已筛选属性的 PropertyDescriptorCollection。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关更多信息，请参见 GetProperties。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
GetProperties 重载
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.GetProperties 方法

DbConnectionStringBuilder
.
.
::
.
GetProperties 方法
DbConnectionStringBuilder 类

用有关此 DbConnectionStringBuilder 的所有属性的信息填充提供的 Hashtable。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub GetProperties ( _
    propertyDescriptors As Hashtable _
)
protected virtual void GetProperties(
    Hashtable propertyDescriptors
)
protected:
virtual void GetProperties(
    Hashtable^ propertyDescriptors
)
abstract GetProperties :
        propertyDescriptors:Hashtable -> unit
override GetProperties :
        propertyDescriptors:Hashtable -> unit

参数

propertyDescriptors
类型： System.Collections Hashtable
要用关于此 DbConnectionStringBuilder 的信息填充的 Hashtable。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.ICollection ..::.CopyTo 方法

DbConnectionStringBuilder
.
.
::
.
ICollection
.
.
::
.
CopyTo 方法
DbConnectionStringBuilder 类

从特定的 Array 索引处开始，将 ICollection 的元素复制到一个 Array 中。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Sub CopyTo ( _
    array As Array, _
    index As Integer _
) Implements ICollection.CopyTo
void ICollection.CopyTo(
    Array array,
    int index
)
private:
virtual void CopyTo(
    Array^ array,
    int index
) sealed = ICollection::CopyTo
private abstract CopyTo :
        array:Array *
        index:int -> unit
private override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
作为从 ICollection 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。 作为从 ICollection 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。
index
类型： System Int32
array 中从零开始的索引，从此处开始复制。

实现

此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICollection 接口时使用。

有关此成员的说明，请参见 CopyTo。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetAttributes 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetAttributes 方法
DbConnectionStringBuilder 类

返回此组件实例的自定义特性的集合。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetAttributes As AttributeCollection
    Implements ICustomTypeDescriptor.GetAttributes
AttributeCollection ICustomTypeDescriptor.GetAttributes()
private:
virtual AttributeCollection^ GetAttributes() sealed = ICustomTypeDescriptor::GetAttributes
private abstract GetAttributes : unit -> AttributeCollection
private override GetAttributes : unit -> AttributeCollection

返回值

类型： System.ComponentModel AttributeCollection
包含此对象的特性的 AttributeCollection。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关此成员的说明，请参见 GetAttributes。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetClassName 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetClassName 方法
DbConnectionStringBuilder 类

返回此组件实例的类名。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetClassName As String
    Implements ICustomTypeDescriptor.GetClassName
string ICustomTypeDescriptor.GetClassName()
private:
virtual String^ GetClassName() sealed = ICustomTypeDescriptor::GetClassName
private abstract GetClassName : unit -> string
private override GetClassName : unit -> string

返回值

类型： System String
该对象的类名；如果此类没有名称，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关此成员的说明，请参见 GetClassName。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetComponentName 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetComponentName 方法
DbConnectionStringBuilder 类

返回此组件实例的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetComponentName As String
    Implements ICustomTypeDescriptor.GetComponentName
string ICustomTypeDescriptor.GetComponentName()
private:
virtual String^ GetComponentName() sealed = ICustomTypeDescriptor::GetComponentName
private abstract GetComponentName : unit -> string
private override GetComponentName : unit -> string

返回值

类型： System String
该对象的名称；如果该对象没有名称，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关更多信息，请参见 GetComponentName。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetConverter 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetConverter 方法
DbConnectionStringBuilder 类

返回此组件实例的类型转换器。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetConverter As TypeConverter
    Implements ICustomTypeDescriptor.GetConverter
TypeConverter ICustomTypeDescriptor.GetConverter()
private:
virtual TypeConverter^ GetConverter() sealed = ICustomTypeDescriptor::GetConverter
private abstract GetConverter : unit -> TypeConverter
private override GetConverter : unit -> TypeConverter

返回值

类型： System.ComponentModel TypeConverter
表示该对象的转换器的 TypeConverter；如果此对象没有任何 TypeConverter，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关此成员的说明，请参见 GetConverter。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetDefaultEvent 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetDefaultEvent 方法
DbConnectionStringBuilder 类

返回此组件实例的默认事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetDefaultEvent As EventDescriptor
    Implements ICustomTypeDescriptor.GetDefaultEvent
EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
private:
virtual EventDescriptor^ GetDefaultEvent() sealed = ICustomTypeDescriptor::GetDefaultEvent
private abstract GetDefaultEvent : unit -> EventDescriptor
private override GetDefaultEvent : unit -> EventDescriptor

返回值

类型： System.ComponentModel EventDescriptor
表示该对象的默认事件的 EventDescriptor；如果该对象没有事件，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关此成员的说明，请参见 GetDefaultEvent。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetDefaultProperty 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetDefaultProperty 方法
DbConnectionStringBuilder 类

返回此组件实例的默认属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetDefaultProperty As PropertyDescriptor
    Implements ICustomTypeDescriptor.GetDefaultProperty
PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
private:
virtual PropertyDescriptor^ GetDefaultProperty() sealed = ICustomTypeDescriptor::GetDefaultProperty
private abstract GetDefaultProperty : unit -> PropertyDescriptor
private override GetDefaultProperty : unit -> PropertyDescriptor

返回值

类型： System.ComponentModel PropertyDescriptor
表示该对象的默认属性的 PropertyDescriptor；如果此对象没有属性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关此成员的说明，请参见 GetDefaultProperty。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetEditor 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetEditor 方法
DbConnectionStringBuilder 类

返回此组件实例的指定类型的编辑器。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEditor ( _
    editorBaseType As Type _
) As Object Implements ICustomTypeDescriptor.GetEditor
Object ICustomTypeDescriptor.GetEditor(
    Type editorBaseType
)
private:
virtual Object^ GetEditor(
    Type^ editorBaseType
) sealed = ICustomTypeDescriptor::GetEditor
private abstract GetEditor :
        editorBaseType:Type -> Object
private override GetEditor :
        editorBaseType:Type -> Object

参数

editorBaseType
类型： System Type
表示该对象的编辑器的 Type。

返回值

类型： System Object
表示该对象编辑器的指定类型的 Object；如果无法找到编辑器，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关更多信息，请参见 GetEditor。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICustomTypeDescriptor ..::.GetPropertyOwner 方法

DbConnectionStringBuilder
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetPropertyOwner 方法
DbConnectionStringBuilder 类

返回包含指定的属性描述符所描述的属性的对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetPropertyOwner ( _
    pd As PropertyDescriptor _
) As Object Implements ICustomTypeDescriptor.GetPropertyOwner
Object ICustomTypeDescriptor.GetPropertyOwner(
    PropertyDescriptor pd
)
private:
virtual Object^ GetPropertyOwner(
    PropertyDescriptor^ pd
) sealed = ICustomTypeDescriptor::GetPropertyOwner
private abstract GetPropertyOwner :
        pd:PropertyDescriptor -> Object
private override GetPropertyOwner :
        pd:PropertyDescriptor -> Object

参数

pd
类型： System.ComponentModel PropertyDescriptor
表示要查找其所有者的属性的 PropertyDescriptor。

返回值

类型： System Object
表示指定属性所有者的 Object。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICustomTypeDescriptor 接口时使用。

有关更多信息，请参见 GetPropertyOwner。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.IDictionary ..::.Add 方法

DbConnectionStringBuilder
.
.
::
.
IDictionary
.
.
::
.
Add 方法
DbConnectionStringBuilder 类

在 IDictionary 对象中添加一个带有所提供的键和值的元素。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Sub Add ( _
    keyword As Object, _
    value As Object _
) Implements IDictionary.Add
void IDictionary.Add(
    Object keyword,
    Object value
)
private:
virtual void Add(
    Object^ keyword,
    Object^ value
) sealed = IDictionary::Add
private abstract Add :
        keyword:Object *
        value:Object -> unit
private override Add :
        keyword:Object *
        value:Object -> unit

参数

keyword
类型： System Object
用作要添加的元素的键的 Object。
value
类型： System Object
用作要添加的元素的值的 Object。

实现

此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。 此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。

有关此成员的说明，请参见 Add。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.IDictionary ..::.Contains 方法

DbConnectionStringBuilder
.
.
::
.
IDictionary
.
.
::
.
Contains 方法
DbConnectionStringBuilder 类

确定 IDictionary 对象是否包含具有指定键的元素。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function Contains ( _
    keyword As Object _
) As Boolean Implements IDictionary.Contains
bool IDictionary.Contains(
    Object keyword
)
private:
virtual bool Contains(
    Object^ keyword
) sealed = IDictionary::Contains
private abstract Contains :
        keyword:Object -> bool
private override Contains :
        keyword:Object -> bool

参数

keyword
类型： System Object
要在 IDictionary 对象中查找的键。

返回值

类型： System Boolean
如果 IDictionary 包含带有该键的元素，则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。 此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。

有关更多信息，请参见 Contains。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.IDictionary ..::.GetEnumerator 方法

DbConnectionStringBuilder
.
.
::
.
IDictionary
.
.
::
.
GetEnumerator 方法
DbConnectionStringBuilder 类

返回一个用于 IDictionary 对象的 IDictionaryEnumerator 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEnumerator As IDictionaryEnumerator
    Implements IDictionary.GetEnumerator
IDictionaryEnumerator IDictionary.GetEnumerator()
private:
virtual IDictionaryEnumerator^ GetEnumerator() sealed = IDictionary::GetEnumerator
private abstract GetEnumerator : unit -> IDictionaryEnumerator
private override GetEnumerator : unit -> IDictionaryEnumerator

返回值

类型： System.Collections IDictionaryEnumerator
一个用于 IDictionary 对象的 IDictionaryEnumerator 对象。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。

有关此成员的说明，请参见 GetEnumerator。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.IDictionary ..::.Remove 方法

DbConnectionStringBuilder
.
.
::
.
IDictionary
.
.
::
.
Remove 方法
DbConnectionStringBuilder 类

从 IDictionary 对象中移除带有指定键的元素。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Sub Remove ( _
    keyword As Object _
) Implements IDictionary.Remove
void IDictionary.Remove(
    Object keyword
)
private:
virtual void Remove(
    Object^ keyword
) sealed = IDictionary::Remove
private abstract Remove :
        keyword:Object -> unit
private override Remove :
        keyword:Object -> unit

参数

keyword
类型： System Object
要移除的元素的键。

实现

此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。 此成员是显式的接口成员实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。

有关此成员的说明，请参见 Remove。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.IEnumerable ..::.GetEnumerator 方法

DbConnectionStringBuilder
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
DbConnectionStringBuilder 类

返回一个循环访问集合的枚举数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
可用于循环访问集合的 IEnumerator 对象。

实现

此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IEnumerable 接口时使用。 此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IEnumerable 接口时使用。

有关此成员的说明，请参见 GetEnumerator。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.Remove 方法

DbConnectionStringBuilder
.
.
::
.
Remove 方法
DbConnectionStringBuilder 类

移除 DbConnectionStringBuilder 实例中具有指定键的项。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Remove ( _
    keyword As String _
) As Boolean
public virtual bool Remove(
    string keyword
)
public:
virtual bool Remove(
    String^ keyword
)
abstract Remove :
        keyword:string -> bool
override Remove :
        keyword:string -> bool

参数

keyword
类型： System String
要从此 DbConnectionStringBuilder 中的连接字符串移除的键/值对中的键。

返回值

类型： System Boolean
如果该键存在于连接字符串中并被移除，则为 true；如果该键不存在，则为 false。
异常 | 条件
ArgumentNullException | keyword 为 null（在 Visual Basic 中为 Nothing）
NotSupportedException | DbConnectionStringBuilder 为只读，或 DbConnectionStringBuilder 具有固定大小。

由于 Remove 方法返回指示其成功状态的值，所以无需在尝试从 DbConnectionStringBuilder 实例中移除键/值对之前查找该键。

Sub Main()
    Dim builder As New DbConnectionStringBuilder
    builder.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Demo.mdb;" & _
        "Jet OLEDB:System Database=system.mdw;"

    ' Try to remove an existing item.
    TryRemove(builder, "Provider")

    ' Try to remove a nonexistent item.
    TryRemove(builder, "User ID")

    ' Try to remove an existing item,
    ' demonstrating that the search isn't
    ' case sensitive.
    TryRemove(builder, "DATA SOURCE")
    Console.ReadLine()
End Sub

Sub TryRemove(ByVal builder As DbConnectionStringBuilder, _
    ByVal itemToRemove As String)

    If builder.Remove(itemToRemove) Then
        Console.WriteLine("Removed '{0}'", itemToRemove)
    Else
        Console.WriteLine("Unable to remove '{0}'", itemToRemove)
    End If
    Console.WriteLine(builder.ConnectionString)
End Sub

static void Main()
{
    DbConnectionStringBuilder builder = new
        DbConnectionStringBuilder();
    builder.ConnectionString =
        @"Provider=Microsoft.Jet.OLEDB.4.0;Data
            Source=C:\Demo.mdb;" +
        "Jet OLEDB:System Database=system.mdw;";

    // Try to remove an existing item.
    TryRemove(builder, "Provider");

    // Try to remove a nonexistent item.
    TryRemove(builder, "User ID");

    // Try to remove an existing item,
    // demonstrating that the search isn't
    // case sensitive.
    TryRemove(builder, "DATA SOURCE");
    Console.ReadLine();
}

static void TryRemove(DbConnectionStringBuilder builder, string itemToRemove)
{
    if (builder.Remove(itemToRemove))
    {
        Console.WriteLine(@"Removed '{0}'", itemToRemove);
    }
    else
    {
        Console.WriteLine(@"Unable to remove '{0}'", itemToRemove);
    }
    Console.WriteLine(builder.ConnectionString);
}

此示例显示以下输出：

Removed 'Provider'
data source=C:\Demo.mdb;jet oledb:system database=system.mdw
Unable to remove 'User ID'
data source=C:\Demo.mdb;jet oledb:system database=system.mdw
Removed 'DATA SOURCE'
jet oledb:system database=system.mdw

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.ShouldSerialize 方法

DbConnectionStringBuilder
.
.
::
.
ShouldSerialize 方法
DbConnectionStringBuilder 类

指示此 DbConnectionStringBuilder 实例中是否存在指定键。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function ShouldSerialize ( _
    keyword As String _
) As Boolean
public virtual bool ShouldSerialize(
    string keyword
)
public:
virtual bool ShouldSerialize(
    String^ keyword
)
abstract ShouldSerialize :
        keyword:string -> bool
override ShouldSerialize :
        keyword:string -> bool

参数

keyword
类型： System String
要在 DbConnectionStringBuilder 中定位的键。

返回值

类型： System Boolean
如果 DbConnectionStringBuilder 包含具有指定键的项，则为 true；否则为 false。

此方法与 ContainsKey 方法的行为一致。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.ToString 方法

DbConnectionStringBuilder
.
.
::
.
ToString 方法
DbConnectionStringBuilder 类

返回与此 DbConnectionStringBuilder 关联的连接字符串。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
当前的 ConnectionString 属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.TryGetValue 方法

DbConnectionStringBuilder
.
.
::
.
TryGetValue 方法
DbConnectionStringBuilder 类

从此 DbConnectionStringBuilder 中检索与所提供的键对应的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function TryGetValue ( _
    keyword As String, _
    <OutAttribute> ByRef value As Object _
) As Boolean
public virtual bool TryGetValue(
    string keyword,
    out Object value
)
public:
virtual bool TryGetValue(
    String^ keyword,
    [OutAttribute] Object^% value
)
abstract TryGetValue :
        keyword:string *
        value:Object byref -> bool
override TryGetValue :
        keyword:string *
        value:Object byref -> bool

参数

keyword
类型： System String
要检索的项的键。
value
类型： System Object %
与 key 对应的值。

返回值

类型： System Boolean
如果在连接字符串中找到 keyword，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | keyword 包含一个空值（在 Visual Basic 中为 Nothing）。

TryGetValue 方法使开发人员可以安全地从 DbConnectionStringBuilder 检索值，而无需先调用 ContainsKey 方法。由于在调用 TryGetValue 时，若传递不存在的键，它不会引发异常，因此不必在检索键值之前查找该键是否存在。使用不存在键调用 TryGetValue 将在 value 参数中放置一个空值（在 Visual Basic 中为 Nothing）。 TryGetValue 方法使开发人员可以安全地从 DbConnectionStringBuilder 检索值，而无需先调用 ContainsKey 方法。由于在调用 TryGetValue 时，若传递不存在的键，它不会引发异常，因此不必在检索键值之前查找该键是否存在。使用不存在键调用 TryGetValue 将在 value 参数中放置一个空值（在 Visual Basic 中为 Nothing）。 TryGetValue 方法使开发人员可以安全地从 DbConnectionStringBuilder 检索值，而无需先调用 ContainsKey 方法。由于在调用 TryGetValue 时，若传递不存在的键，它不会引发异常，因此不必在检索键值之前查找该键是否存在。使用不存在键调用 TryGetValue 将在 value 参数中放置一个空值（在 Visual Basic 中为 Nothing）。

下面的示例调用 TryGetValue 方法，演示了几种可能的结果。

Sub Main()
    Dim builder As New DbConnectionStringBuilder
    builder.ConnectionString = _
        "Provider=sqloledb;Data Source=192.168.168.1,1433;" & _
        "Network Library=DBMSSOCN;Initial Catalog=pubs;" & _
        "Integrated Security=SSPI;"

    ' Call TryGetValue method for multiple
    ' key names.
    DisplayValue(builder, "Provider")
    DisplayValue(builder, "DATA SOURCE")
    DisplayValue(builder, "InvalidKey")
    DisplayValue(builder, Nothing)

    Console.ReadLine()
End Sub

Private Sub DisplayValue( _
 ByVal builder As DbConnectionStringBuilder, ByVal key As String)
    Dim value As Object

    ' Although TryGetValue handles missing keys,
    ' it doesn't handle passing in a null (Nothing in Visual Basic)
    ' key. This example traps for that particular error, but
    ' bubbles any other unknown exceptions back out to the
    ' caller.
    Try
        If builder.TryGetValue(key, value) Then
            Console.WriteLine("{0}={1}", key, value)
        Else
            Console.WriteLine("Unable to retrieve value for '{0}'", key)
        End If
    Catch ex As ArgumentNullException
        Console.WriteLine("Unable to retrieve value for null key.")
    End Try
End Sub

static void Main()
{
    DbConnectionStringBuilder builder = new DbConnectionStringBuilder();
    builder.ConnectionString =
        "Provider=sqloledb;Data Source=192.168.168.1,1433;" +
        "Network Library=DBMSSOCN;Initial Catalog=pubs;" +
        "Integrated Security=SSPI;";

    // Call TryGetValue method for multiple
    // key names.
    DisplayValue(builder, "Provider");
    DisplayValue(builder, "DATA SOURCE");
    DisplayValue(builder, "InvalidKey");
    DisplayValue(builder, null);

    Console.ReadLine();
}

private static void DisplayValue(
    DbConnectionStringBuilder builder, string key)
{
    object value = null;

    // Although TryGetValue handles missing keys,
    // it doesn't handle passing in a null
    // key. This example traps for that particular error, but
    // bubbles any other unknown exceptions back out to the
    // caller.
    try
    {
        if (builder.TryGetValue(key, out value))
        {
            Console.WriteLine("{0}={1}", key, value);
        }
        else
        {
            Console.WriteLine(@"Unable to retrieve value for '{0}'", key);
        }
    }
    catch (ArgumentNullException)
    {
        Console.WriteLine("Unable to retrieve value for null key.");
    }
}

此示例显示以下结果：

Provider=sqloledb
DATA SOURCE=192.168.168.1,1433
Unable to retrieve value for //InvalidKey//
Unable to retrieve value for null key.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder 属性

DbConnectionStringBuilder 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConnectionStringBuilder 类

DbConnectionStringBuilder 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbConnectionStringBuilder 类
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.BrowsableConnectionString 属性

DbConnectionStringBuilder
.
.
::
.
BrowsableConnectionString 属性
DbConnectionStringBuilder 类

获取或设置一个值，该值指示 ConnectionString 属性在 Visual Studio 设计器中是否可见。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property BrowsableConnectionString As Boolean
    Get
    Set
[BrowsableAttribute(false)]
public bool BrowsableConnectionString { get; set; }
[BrowsableAttribute(false)]
public:
property bool BrowsableConnectionString {
    bool get ();
    void set (bool value);
}
[<BrowsableAttribute(false)>]
member BrowsableConnectionString : bool with get, set

属性值

类型： System Boolean
如果连接字符串在设计器中可见，则为 true；否则为 false。默认值为 true。 如果连接字符串在设计器中可见，则为 true；否则为 false。默认值为 true。

在创建使用 DbConnectionStringBuilder 类的设计器时，开发人员必须能够控制连接字符串在设计器的属性网格中的可见性。开发人员可通过将 BrowsableConnectionString 属性设置为 false 来指示该属性应为不可见。 在创建使用 DbConnectionStringBuilder 类的设计器时，开发人员必须能够控制连接字符串在设计器的属性网格中的可见性。开发人员可通过将 BrowsableConnectionString 属性设置为 false 来指示该属性应为不可见。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.ConnectionString 属性

DbConnectionStringBuilder
.
.
::
.
ConnectionString 属性
DbConnectionStringBuilder 类

获取或设置与 DbConnectionStringBuilder 关联的连接字符串。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property ConnectionString As String
    Get
    Set
public string ConnectionString { get; set; }
public:
property String^ ConnectionString {
    String^ get ();
    void set (String^ value);
}
member ConnectionString : string with get, set

属性值

类型： System String
当前的连接字符串，它由 DbConnectionStringBuilder 中所包含的键/值对创建。默认值为空字符串。 当前的连接字符串，它由 DbConnectionStringBuilder 中所包含的键/值对创建。默认值为空字符串。
异常 | 条件
ArgumentException | 提供的字符串参数无效。

此属性返回分号分隔的键/值对的列表，这些键/值对存储在 DbConnectionStringBuilder 维护的集合中。每个对都包含用等号分隔的键和值。下面的示例阐释了一个典型的连接字符串。 此属性返回分号分隔的键/值对的列表，这些键/值对存储在 DbConnectionStringBuilder 维护的集合中。每个对都包含用等号分隔的键和值。下面的示例阐释了一个典型的连接字符串。 此属性返回分号分隔的键/值对的列表，这些键/值对存储在 DbConnectionStringBuilder 维护的集合中。每个对都包含用等号分隔的键和值。下面的示例阐释了一个典型的连接字符串。

"Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=AdventureWorks;Data Source=(local)"

数据提供程序可能希望每个连接字符串属性具有特定的键和值。这些值分别记录。DbConnectionStringBuilder 类不验证与其连接字符串关联的键/值对，而从该类继承的类却进行验证。 数据提供程序可能希望每个连接字符串属性具有特定的键和值。这些值分别记录。DbConnectionStringBuilder 类不验证与其连接字符串关联的键/值对，而从该类继承的类却进行验证。 数据提供程序可能希望每个连接字符串属性具有特定的键和值。这些值分别记录。DbConnectionStringBuilder 类不验证与其连接字符串关联的键/值对，而从该类继承的类却进行验证。

DbConnectionStringBuilder 类的 ConnectionString 属性通常用作这样一种机制，该机制用来创建和分析键/值对（以等号分隔）的分号分隔的列表。它不提供特定于连接字符串的验证或其他支持。如果向 DbConnectionStringBuilder 集合中添加项，ConnectionString 属性将反映所做的更改。如果为 ConnectionString 属性赋值，DbConnectionStringBuilder 将尝试使用分号和等号分隔符对该值进行分析。 DbConnectionStringBuilder 类的 ConnectionString 属性通常用作这样一种机制，该机制用来创建和分析键/值对（以等号分隔）的分号分隔的列表。它不提供特定于连接字符串的验证或其他支持。如果向 DbConnectionStringBuilder 集合中添加项，ConnectionString 属性将反映所做的更改。如果为 ConnectionString 属性赋值，DbConnectionStringBuilder 将尝试使用分号和等号分隔符对该值进行分析。 DbConnectionStringBuilder 类的 ConnectionString 属性通常用作这样一种机制，该机制用来创建和分析键/值对（以等号分隔）的分号分隔的列表。它不提供特定于连接字符串的验证或其他支持。如果向 DbConnectionStringBuilder 集合中添加项，ConnectionString 属性将反映所做的更改。如果为 ConnectionString 属性赋值，DbConnectionStringBuilder 将尝试使用分号和等号分隔符对该值进行分析。 DbConnectionStringBuilder 类的 ConnectionString 属性通常用作这样一种机制，该机制用来创建和分析键/值对（以等号分隔）的分号分隔的列表。它不提供特定于连接字符串的验证或其他支持。如果向 DbConnectionStringBuilder 集合中添加项，ConnectionString 属性将反映所做的更改。如果为 ConnectionString 属性赋值，DbConnectionStringBuilder 将尝试使用分号和等号分隔符对该值进行分析。

下面的示例演示 ConnectionString 属性可能具有的行为。该示例可实现如下功能： 下面的示例演示 ConnectionString 属性可能具有的行为。该示例可实现如下功能：

  • 通过一次向空 DbConnectionStringBuilder 中添加一个键/值对来创建连接字符串。

  • 将一个完整的连接字符串分配给 DbConnectionStringBuilder 实例的 ConnectionString 属性，并修改字符串内的单个键/值对。

  • 将任意一组键/值对分配给 ConnectionString 属性（即最不像连接字符串的字符串），并修改其中一个值。

  • 将一个无效的连接字符串分配给 ConnectionString 属性，并阐释引发的异常。

说明 说明

此示例包含一个密码，用以演示 DbConnectionStringBuilder 如何使用连接字符串。在您的应用程序中，建议您使用 Windows 身份验证。如果必须使用密码，请不要在应用程序中包含硬编码的密码。 此示例包含一个密码，用以演示 DbConnectionStringBuilder 如何使用连接字符串。在您的应用程序中，建议您使用 Windows 身份验证。如果必须使用密码，请不要在应用程序中包含硬编码的密码。 此示例包含一个密码，用以演示 DbConnectionStringBuilder 如何使用连接字符串。在您的应用程序中，建议您使用 Windows 身份验证。如果必须使用密码，请不要在应用程序中包含硬编码的密码。

Sub Main()
    ' Create a new DbConnctionStringBuilder, and add items
    ' to the internal collection of key/value pairs.
    Dim builder As New DbConnectionStringBuilder()
    builder.Add("Data Source", "c:\MyData\MyDb.mdb")
    builder.Add("Provider", "Microsoft.Jet.Oledb.4.0")
    builder.Add("Jet OLEDB:Database Password", "*******")
    builder.Add("Jet OLEDB:System Database", _
        "c:\MyData\Workgroup.mdb")
    ' Set up row-level locking.
    builder.Add("Jet OLEDB:Database Locking Mode", 1)

    ' Display the contents of the connection string, which
    ' will now contain all the key/value pairs delimited with
    ' semicolons.
    Console.WriteLine(builder.ConnectionString)
    Console.WriteLine()

    ' Clear the DbConnectionStringBuilder, and assign a complete
    ' connection string to it, to demonstrate how
    ' the class parses connection strings.
    builder.Clear()
    builder.ConnectionString = _
        "Data Source=(local);Initial Catalog=AdventureWorks;" & _
        "Integrated Security=SSPI"

    ' The DbConnectionStringBuilder class has parsed the contents,
    ' so you can work with any individual key/value pair.
    builder("Data Source") = "."
    Console.WriteLine(builder.ConnectionString)
    Console.WriteLine()

    ' Because the DbConnectionStringBuilder class doesn't
    ' validate its key/value pairs, you can use this class
    ' to store any semicolon-delimited list. The following
    ' snippet places an arbitrary string into the ConnectionString
    ' property, changes one of the values, and then displays the
    ' resulting string.
    builder.Clear()
    builder.ConnectionString = _
        "Value1=10;Value2=20;Value3=30;Value4=40"
    builder("Value2") = 25
    Console.WriteLine(builder.ConnectionString)
    Console.WriteLine()

    builder.Clear()
    Try
        ' Assigning an invalid connection string
        ' throws an ArgumentException.
        builder.ConnectionString = "xxx"

    Catch ex As ArgumentException
        Console.WriteLine("Invalid connection string.")
    End Try

    Console.WriteLine()
    Console.WriteLine("Press Enter to finish.")
    Console.ReadLine()
End Sub

static void Main()
{
    // Create a new DbConnctionStringBuilder, and add items
    // to the internal collection of key/value pairs.
    DbConnectionStringBuilder builder = new
        DbConnectionStringBuilder();
    builder.Add("Data Source", @"c:\MyData\MyDb.mdb");
    builder.Add("Provider", "Microsoft.Jet.Oledb.4.0");
    builder.Add("Jet OLEDB:Database Password", "********");
    builder.Add("Jet OLEDB:System Database",
        @"c:\MyData\Workgroup.mdb");

    // Set up row-level locking.
    builder.Add("Jet OLEDB:Database Locking Mode", 1);
    // Display the contents of the connection string, which
    // will now contain all the key/value pairs delimited with
    // semicolons.
    Console.WriteLine(builder.ConnectionString);
    Console.WriteLine();
    // Clear the DbConnectionStringBuilder, and assign a complete
    // connection string to it, to demonstrate how
    // the class parses connection strings.
    builder.Clear();
    builder.ConnectionString =
        "Data Source=(local);Initial Catalog=AdventureWorks;"
        + "Integrated Security=SSPI";
    // The DbConnectionStringBuilder class has parsed the contents,
    // so you can work with any individual key/value pair.
    builder["Data Source"] = ".";
    Console.WriteLine(builder.ConnectionString);
    Console.WriteLine();
    // Because the DbConnectionStringBuilder class doesn't
    // validate its key/value pairs, you can use this class
    // to store any semicolon-delimited list. The following
    // snippet places an arbitrary string into the ConnectionString
    // property, changes one of the values, and then displays the
    // resulting string.
    builder.Clear();
    builder.ConnectionString =
        "Value1=10;Value2=20;Value3=30;Value4=40";
    builder["Value2"] = 25;
    Console.WriteLine(builder.ConnectionString);
    Console.WriteLine();

    builder.Clear();
    try
    {
        // Assigning an invalid connection string
        // throws an ArgumentException.
        builder.ConnectionString = "xxx";
    }
    catch (ArgumentException)
    {
        Console.WriteLine("Invalid connection string.");
    }

    Console.WriteLine();
    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.Count 属性

DbConnectionStringBuilder
.
.
::
.
Count 属性
DbConnectionStringBuilder 类

获取 ConnectionString 属性中当前包含的键的数目。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overridable ReadOnly Property Count As Integer
    Get
[BrowsableAttribute(false)]
public virtual int Count { get; }
[BrowsableAttribute(false)]
public:
virtual property int Count {
    int get ();
}
[<BrowsableAttribute(false)>]
abstract Count : int
[<BrowsableAttribute(false)>]
override Count : int

属性值

类型： System Int32
DbConnectionStringBuilder 实例所维护的连接字符串内包含的键的数目。

实现

下面的示例演示 Count 属性在您修改 ConnectionString 属性的内容前后的状态。

Sub Main()
    Dim builder As New DbConnectionStringBuilder
    builder.ConnectionString = _
        "Data Source=(local);Initial Catalog=AdventureWorks;" & _
        "Integrated Security=SSPI"

    ' This should display "3" in the console window.
    Console.WriteLine(builder.Count)

    builder.Add("Connection Timeout", 25)

    ' This should display the new connection string and
    ' the number of items (4) in the console window.
    Console.WriteLine(builder.ConnectionString)
    Console.WriteLine(builder.Count)

    Console.WriteLine()
    Console.WriteLine("Press Enter to finish.")
    Console.ReadLine()
End Sub

static void Main()
{
    DbConnectionStringBuilder builder = new DbConnectionStringBuilder();
    builder.ConnectionString =
        "Data Source=(local);Initial Catalog=AdventureWorks;" +
        "Integrated Security=SSPI";

    // This should display "3" in the console window.
    Console.WriteLine("Original count: " + builder.Count);

    builder.Add("Connection Timeout", 25);

    // This should display the new connection string and
    // the number of items (4) in the console window.
    Console.WriteLine(builder.ConnectionString);
    Console.WriteLine("New count: " + builder.Count);

    Console.WriteLine();
    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.ICollection ..::.IsSynchronized 属性

DbConnectionStringBuilder
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
DbConnectionStringBuilder 类

获取一个值，该值指示是否同步对 ICollection 的访问（线程安全）。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
如果对 ICollection 的访问是同步的（线程安全），则为 true；否则为 false。

实现

此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICollection 接口时使用。

有关更多信息，请参见 IsSynchronized。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.ICollection ..::.SyncRoot 属性

DbConnectionStringBuilder
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
DbConnectionStringBuilder 类

获取一个对象，可用于同步对 ICollection 的访问。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
可用于同步对 ICollection 的访问的对象。

实现

此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 ICollection 接口时使用。

有关更多信息，请参见 SyncRoot。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.IDictionary ..::.Item 属性

DbConnectionStringBuilder
.
.
::
.
IDictionary
.
.
::
.
Item 属性
DbConnectionStringBuilder 类

获取或设置具有指定键的元素。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Item ( _
    keyword As Object _
) As Object Implements IDictionary.Item
    Get
    Set
Object IDictionary.this[
    Object keyword
] { get; set; }
private:
virtual property Object^ Item[Object^ keyword] {
    Object^ get (Object^ keyword) sealed = IDictionary::Item::get;
    void set (Object^ keyword, Object^ value) sealed = IDictionary::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

keyword
类型： System Object
要获取或设置的元素的键。

属性值

类型： System Object
带有指定键的元素。

实现

此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。 此成员是显式接口成员的实现。它只能在 DbConnectionStringBuilder 实例被强制转换为 IDictionary 接口时使用。

有关更多信息，请参见 Item(Object)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间


DbConnectionStringBuilder ..::.IsFixedSize 属性

DbConnectionStringBuilder
.
.
::
.
IsFixedSize 属性
DbConnectionStringBuilder 类

获取一个值，该值指示 DbConnectionStringBuilder 是否具有固定大小。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overridable ReadOnly Property IsFixedSize As Boolean
    Get
[BrowsableAttribute(false)]
public virtual bool IsFixedSize { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsFixedSize {
    bool get ();
}
[<BrowsableAttribute(false)>]
abstract IsFixedSize : bool
[<BrowsableAttribute(false)>]
override IsFixedSize : bool

属性值

类型： System Boolean
如果 DbConnectionStringBuilder 具有固定大小，则为 true；否则为 false。

实现

固定大小的集合不允许在创建了集合后添加或移除元素，但它允许修改现有元素。

固定大小的集合只是一个具有用于防止添加和移除元素的包装的集合；因此，如果更改基础集合（包括添加或移除元素），则固定大小的集合将反映这些更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.IsReadOnly 属性

DbConnectionStringBuilder
.
.
::
.
IsReadOnly 属性
DbConnectionStringBuilder 类

获取一个值，该值指示 DbConnectionStringBuilder 是否为只读。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public ReadOnly Property IsReadOnly As Boolean
    Get
[BrowsableAttribute(false)]
public bool IsReadOnly { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsReadOnly {
    bool get () sealed;
}
[<BrowsableAttribute(false)>]
abstract IsReadOnly : bool
[<BrowsableAttribute(false)>]
override IsReadOnly : bool

属性值

类型： System Boolean
如果 DbConnectionStringBuilder 为只读，则为 true；否则为 false。默认值为 false。 如果 DbConnectionStringBuilder 为只读，则为 true；否则为 false。默认值为 false。

实现

只读集合不允许在创建了集合后添加、移除或修改元素。

只读集合只是一个具有用于防止修改集合的包装的集合；因此，如果更改基础集合，则只读集合将反映这些更改。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.Item 属性

DbConnectionStringBuilder
.
.
::
.
Item 属性
DbConnectionStringBuilder 类

获取或设置与指定的键相关联的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overridable Property Item ( _
    keyword As String _
) As Object
    Get
    Set
[BrowsableAttribute(false)]
public virtual Object this[
    string keyword
] { get; set; }
[BrowsableAttribute(false)]
public:
virtual property Object^ Item[String^ keyword] {
    Object^ get (String^ keyword);
    void set (String^ keyword, Object^ value);
}
[<BrowsableAttribute(false)>]
abstract Item : Object with get, set
[<BrowsableAttribute(false)>]
override Item : Object with get, set

参数

keyword
类型： System String
要获取或设置的项的键。

属性值

类型： System Object
与指定的键相关联的值。如果未找到指定的键，尝试获取它将返回空引用（在 Visual Basic 中为 Nothing），尝试设置它将使用指定的键创建新元素。 与指定的键相关联的值。如果未找到指定的键，尝试获取它将返回空引用（在 Visual Basic 中为 Nothing），尝试设置它将使用指定的键创建新元素。
传递空（在 Visual Basic 中为 Nothing）键将引发 ArgumentNullException。赋予空值将移除键/值对。 传递空（在 Visual Basic 中为 Nothing）键将引发 ArgumentNullException。赋予空值将移除键/值对。
异常 | 条件
ArgumentNullException | keyword 为空引用（在 Visual Basic 中为 Nothing）。
NotSupportedException | 设置该属性，而且 DbConnectionStringBuilder 为只读。 - 或 - 设置该属性，集合中不存在 keyword，而且 DbConnectionStringBuilder 具有固定大小。

设置此属性时，如果字典中已存在指定的键，则替换该值；否则创建新元素。

下面的控制台应用程序创建一个新的 DbConnectionStringBuilder，并使用 Item 属性向其连接字符串中添加键/值对。

Module Module1

    Sub Main()
        Dim builder As New DbConnectionStringBuilder
        builder.Item("Data Source") = "(local)"

        ' Item is the default property, so
        ' you need not include it in the reference.
        builder("integrated security") = True
        builder.Item("Initial Catalog") = "AdventureWorks"

        ' Overwrite the existing value for the data source value,
        ' because it already exists within the collection.
        builder.Item("Data Source") = "."

        Console.WriteLine(builder.ConnectionString)
        Console.WriteLine()
        Console.WriteLine("Press Enter to continue.")
        Console.ReadLine()
    End Sub

static void Main()
{
    DbConnectionStringBuilder builder = new
        DbConnectionStringBuilder();
    builder["Data Source"] = "(local)";

    // Note that Item is the indexer, so
    // you do not include it in the reference.
    builder["integrated security"] = true;
    builder["Initial Catalog"] = "AdventureWorks";

    // Overwrite the existing value for the Data Source key,
    // because it already exists within the collection.
    builder["Data Source"] = ".";

    Console.WriteLine(builder.ConnectionString);
    Console.WriteLine();
    Console.WriteLine("Press Enter to continue.");
    Console.ReadLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.Keys 属性

DbConnectionStringBuilder
.
.
::
.
Keys 属性
DbConnectionStringBuilder 类

获取包含 DbConnectionStringBuilder 中的键的 ICollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overridable ReadOnly Property Keys As ICollection
    Get
[BrowsableAttribute(false)]
public virtual ICollection Keys { get; }
[BrowsableAttribute(false)]
public:
virtual property ICollection^ Keys {
    ICollection^ get ();
}
[<BrowsableAttribute(false)>]
abstract Keys : ICollection
[<BrowsableAttribute(false)>]
override Keys : ICollection

属性值

类型： System.Collections ICollection
一个 ICollection，它包含 DbConnectionStringBuilder 中的键。

实现

未指定 ICollection 中值的顺序，但它与 Values 属性返回的 ICollection 中的关联值的顺序相同。

返回的 ICollection 不是静态副本；相反，ICollection 反向引用原始 DbConnectionStringBuilder 中的键。因此，对 DbConnectionStringBuilder 所做的更改将在 ICollection 中得到反映。 返回的 ICollection 不是静态副本；相反，ICollection 反向引用原始 DbConnectionStringBuilder 中的键。因此，对 DbConnectionStringBuilder 所做的更改将在 ICollection 中得到反映。

下面的控制台应用程序示例创建一个新的 DbConnectionStringBuilder，并添加了一些键。该代码循环访问 Keys 属性所返回的 ICollection 并显示键/值对，然后添加一个新键。因为 Keys 属性返回动态 ICollection，所以第二个循环显示包括最新项在内的所有键/值对。 下面的控制台应用程序示例创建一个新的 DbConnectionStringBuilder，并添加了一些键。该代码循环访问 Keys 属性所返回的 ICollection 并显示键/值对，然后添加一个新键。因为 Keys 属性返回动态 ICollection，所以第二个循环显示包括最新项在内的所有键/值对。 下面的控制台应用程序示例创建一个新的 DbConnectionStringBuilder，并添加了一些键。该代码循环访问 Keys 属性所返回的 ICollection 并显示键/值对，然后添加一个新键。因为 Keys 属性返回动态 ICollection，所以第二个循环显示包括最新项在内的所有键/值对。

Sub Main()
    Dim builder As New DbConnectionStringBuilder
    builder("Data Source") = "(local)"
    builder("integrated security") = True
    builder("Initial Catalog") = "AdventureWorks;NewValue=Bad"

    ' Obtain reference to the collection of keys.
    Dim keys As ICollection = builder.Keys

    Console.WriteLine("Keys before adding TimeOut:")
    For Each key As String In keys
        Console.WriteLine("{0}={1}", key, builder(key))
    Next

    ' Add a new item to the collection.
    builder("Timeout") = 300

    Console.WriteLine()
    Console.WriteLine("Keys after adding TimeOut:")

    ' Because the Keys property is dynamically updated,
    ' the following loop includes the Timeout key.
    For Each key As String In keys
        Console.WriteLine("{0}={1}", key, builder(key))
    Next

    Console.WriteLine()
    Console.WriteLine("Press Enter to continue.")
    Console.ReadLine()
End Sub

static void Main()
{
    DbConnectionStringBuilder builder = new
        DbConnectionStringBuilder();
    builder["Data Source"] = "(local)";
    builder["Integrated Security"] = true;
    builder["Initial Catalog"] = "AdventureWorks";

    // Obtain reference to the collection of keys.
    ICollection keys = builder.Keys;

    Console.WriteLine("Keys before adding TimeOut:");
    foreach (string key in keys)
        Console.WriteLine("{0}={1}", key, builder[key]);

    // Add a new item to the collection.
    builder["Timeout"] = 300;

    Console.WriteLine();
    Console.WriteLine("Keys after adding TimeOut:");

    // Because the Keys property is dynamically updated,
    // the following loop includes the Timeout key.
    foreach (string key in keys)
        Console.WriteLine("{0}={1}", key, builder[key]);
    Console.WriteLine();
    Console.WriteLine("Press Enter to continue.");
    Console.ReadLine();
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbConnectionStringBuilder ..::.Values 属性

DbConnectionStringBuilder
.
.
::
.
Values 属性
DbConnectionStringBuilder 类

获取包含 DbConnectionStringBuilder 中的值的 ICollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Overridable ReadOnly Property Values As ICollection
    Get
[BrowsableAttribute(false)]
public virtual ICollection Values { get; }
[BrowsableAttribute(false)]
public:
virtual property ICollection^ Values {
    ICollection^ get ();
}
[<BrowsableAttribute(false)>]
abstract Values : ICollection
[<BrowsableAttribute(false)>]
override Values : ICollection

属性值

类型： System.Collections ICollection
一个 ICollection，它包含 DbConnectionStringBuilder 中的值。

实现

未指定 ICollection 中值的顺序，但它与由 Keys 方法返回的 ICollection 中的相关联键的顺序相同。

返回的 ICollection 不是静态副本；相反，ICollection 反向引用原始 DbConnectionStringBuilder 中的值。因此，对 DbConnectionStringBuilder 所做的更改将在 ICollection 中得到反映。 返回的 ICollection 不是静态副本；相反，ICollection 反向引用原始 DbConnectionStringBuilder 中的值。因此，对 DbConnectionStringBuilder 所做的更改将在 ICollection 中得到反映。

说明 说明

此示例包含一个密码，用以演示 DbConnectionStringBuilder 如何使用连接字符串。在您的应用程序中，建议您使用 Windows 身份验证。如果您必须使用密码，请不要在应用程序中包含硬编码密码。 此示例包含一个密码，用以演示 DbConnectionStringBuilder 如何使用连接字符串。在您的应用程序中，建议您使用 Windows 身份验证。如果您必须使用密码，请不要在应用程序中包含硬编码密码。 此示例包含一个密码，用以演示 DbConnectionStringBuilder 如何使用连接字符串。在您的应用程序中，建议您使用 Windows 身份验证。如果您必须使用密码，请不要在应用程序中包含硬编码密码。

Sub Main()
    Dim builder As New DbConnectionStringBuilder
    builder.ConnectionString = _
     "Provider=MSDataShape.1;Persist Security Info=False;" & _
     "Data Provider=MSDAORA;Data Source=orac;" & _
     "user id=username;password=*******"

    For Each value As String In builder.Values
        Console.WriteLine(value)
    Next
End Sub

static void Main()
{
    DbConnectionStringBuilder builder = new DbConnectionStringBuilder();
    builder.ConnectionString =
        "Provider=MSDataShape.1;Persist Security Info=false;" +
        "Data Provider=MSDAORA;Data Source=orac;" +
        "user id=username;password=*******";

    foreach (string value in builder.Values)
        Console.WriteLine(value);
}

显示以下输出：

MSDataShape.1
false
MSDAORA
orac
username
*******

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbConnectionStringBuilder 类
DbConnectionStringBuilder 成员
System.Data.Common 命名空间

其他资源

连接字符串 (ADO.NET)


DbDataAdapter 类

DbDataAdapter 类
成员

帮助实现 IDbDataAdapter 接口。DbDataAdapter 的继承者实现一组函数以提供强类型，但是继承了完全实现 DataAdapter 所需的大部分功能。 帮助实现 IDbDataAdapter 接口。DbDataAdapter 的继承者实现一组函数以提供强类型，但是继承了完全实现 DataAdapter 所需的大部分功能。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbDataAdapter _
    Inherits DataAdapter _
    Implements IDbDataAdapter, IDataAdapter, ICloneable
public abstract class DbDataAdapter : DataAdapter,
    IDbDataAdapter, IDataAdapter, ICloneable
public ref class DbDataAdapter abstract : public DataAdapter,
    IDbDataAdapter, IDataAdapter, ICloneable
[<AbstractClassAttribute>]
type DbDataAdapter =
    class
        inherit DataAdapter
        interface IDbDataAdapter
        interface IDataAdapter
        interface ICloneable
    end

DbDataAdapter 类从 DataAdapter 类继承，并帮助类实现专用于关系数据库 DataAdapter。

应用程序不直接创建 DbDataAdapter 接口的实例，而是创建继承 IDbDataAdapter 和 DbDataAdapter 的类的实例。

继承 DbDataAdapter 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，DbDataAdapter 类定义 SelectCommand 属性，而 DbDataAdapter 接口定义 Fill 方法的 8 个重载。反之，OleDbDataAdapter 类继承 Fill 方法，还定义 Fill 的两个其他重载，这些重载将 ADO 记录集对象作为参数。 继承 DbDataAdapter 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，DbDataAdapter 类定义 SelectCommand 属性，而 DbDataAdapter 接口定义 Fill 方法的 8 个重载。反之，OleDbDataAdapter 类继承 Fill 方法，还定义 Fill 的两个其他重载，这些重载将 ADO 记录集对象作为参数。 继承 DbDataAdapter 的类必须实现继承的成员，并通常会定义附加成员来添加提供程序特定的功能。例如，DbDataAdapter 类定义 SelectCommand 属性，而 DbDataAdapter 接口定义 Fill 方法的 8 个重载。反之，OleDbDataAdapter 类继承 Fill 方法，还定义 Fill 的两个其他重载，这些重载将 ADO 记录集对象作为参数。

对继承者的说明

当从 DbDataAdapter 类继承时，建议实现以下构造函数：

项 | 说明
PrvDataAdapter() | 初始化 PrvDataAdapter 类的新实例。
PrvDataAdapter(PrvCommand selectCommand) | 使用指定的 SQL SELECT 语句初始化 PrvDataAdapter 类的新实例。
PrvDataAdapter(string selectCommandText, string selectConnectionString) | 使用 SQL SELECT 语句和连接字符串初始化 PrvDataAdapter 类的新实例。
PrvDataAdapter(string selectCommandText, PrvConnection selectConnection) | 使用 SQL SELECT 语句和 PrvConnection 对象初始化 PrvDataAdapter 类的新实例。

为提高 .NET Framework 数据提供程序之间的一致性，应按照 PrvDataAdapter 的形式命名继承类，其中 Prv 是为特定的 .NET Framework 数据提供程序命名空间中的所有类给定的统一前缀。例如，“Sql”是 System.Data.SqlClient 命名空间中 SqlDataAdapter 类的前缀。 为提高 .NET Framework 数据提供程序之间的一致性，应按照 PrvDataAdapter 的形式命名继承类，其中 Prv 是为特定的 .NET Framework 数据提供程序命名空间中的所有类给定的统一前缀。例如，“Sql”是 System.Data.SqlClient 命名空间中 SqlDataAdapter 类的前缀。

System.Data.Common System.Data.Common..::.DbDataAdapterDbDataAdapter

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter 成员

DbDataAdapter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

帮助实现 IDbDataAdapter 接口。DbDataAdapter 的继承者实现一组函数以提供强类型，但是继承了完全实现 DataAdapter 所需的大部分功能。 帮助实现 IDbDataAdapter 接口。DbDataAdapter 的继承者实现一组函数以提供强类型，但是继承了完全实现 DataAdapter 所需的大部分功能。

DbDataAdapter 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbDataAdapter 类
System.Data.Common 命名空间


DbDataAdapter 构造函数

DbDataAdapter 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

初始化 DataAdapter 类的新实例。

名称 说明
页首

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter 构造函数

DbDataAdapter 构造函数
DbDataAdapter 类

初始化 DataAdapter 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbDataAdapter()
protected:
DbDataAdapter()
new : unit -> DbDataAdapter

当创建 DbDataAdapter 的实例时，下面的读/写属性将设置为以下初始值。

属性 | 初始值
SelectCommand | 一个新的 IDbCommand。
InsertCommand | 一个新的 IDbCommand。
DeleteCommand | 一个新的 IDbCommand。
UpdateCommand | 一个新的 IDbCommand。
MissingMappingAction | MissingMappingAction.Passthrough
MissingSchemaAction | MissingSchemaAction.Add

可以通过单独调用属性来更改任何这些属性的值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
DbDataAdapter 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter 构造函数 (DbDataAdapter)

DbDataAdapter 构造函数 (DbDataAdapter)
DbDataAdapter 类

从同一类型的现有对象中初始化 DataAdapter 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    adapter As DbDataAdapter _
)
protected DbDataAdapter(
    DbDataAdapter adapter
)
protected:
DbDataAdapter(
    DbDataAdapter^ adapter
)
new :
        adapter:DbDataAdapter -> DbDataAdapter

参数

adapter
类型： System.Data.Common DbDataAdapter
用于创建新 DataAdapter 的 DataAdapter 对象。

根据设计，DbDataAdapter 构造函数的重载供 .NET Framework 数据提供程序在克隆实现中使用类似构造函数时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
DbDataAdapter 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter 字段

DbDataAdapter 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

DbDataAdapter 类型公开以下成员。

名称 说明
页首

参考

DbDataAdapter 类
System.Data.Common 命名空间


DbDataAdapter ..::.DefaultSourceTableName 字段

DbDataAdapter
.
.
::
.
DefaultSourceTableName 字段
DbDataAdapter 类

DataAdapter 对象用于表映射的默认名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Const DefaultSourceTableName As String
public const string DefaultSourceTableName
public:
literal String^ DefaultSourceTableName
static val mutable DefaultSourceTableName: string

“Table”是 DataAdapter 对象用于表映射的默认名称。

当应用程序添加表映射时，DefaultSourceTableName 与 Fill 一起使用，但它没有指定 DataTable 名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter 方法

DbDataAdapter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

DbDataAdapter 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbDataAdapter 类
System.Data.Common 命名空间


DbDataAdapter ..::.AddToBatch 方法

DbDataAdapter
.
.
::
.
AddToBatch 方法
DbDataAdapter 类

向当前批处理添加 IDbCommand。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function AddToBatch ( _
    command As IDbCommand _
) As Integer
protected virtual int AddToBatch(
    IDbCommand command
)
protected:
virtual int AddToBatch(
    IDbCommand^ command
)
abstract AddToBatch :
        command:IDbCommand -> int
override AddToBatch :
        command:IDbCommand -> int

参数

command
类型： System.Data IDbCommand
要添加到批处理的 IDbCommand。

返回值

类型： System Int32
添加 IDbCommand 之前批处理中的命令数。
异常 | 条件
NotSupportedException | 该适配器不支持批处理。

在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。 在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。

对实现者的说明

此方法是受保护的，供 .NET Framework 数据提供程序使用。

如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法以允许用户将命令添加到批处理。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.ClearBatch 方法

DbDataAdapter
.
.
::
.
ClearBatch 方法
DbDataAdapter 类

从批处理中移除所有 IDbCommand 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub ClearBatch
protected virtual void ClearBatch()
protected:
virtual void ClearBatch()
abstract ClearBatch : unit -> unit
override ClearBatch : unit -> unit
异常 | 条件
NotSupportedException | 该适配器不支持批处理。

在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。 在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。

对实现者的说明

此方法是受保护的，供 .NET Framework 数据提供程序使用。

如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法以允许用户从批处理中移除所有命令。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.CreateRowUpdatedEvent 方法

DbDataAdapter
.
.
::
.
CreateRowUpdatedEvent 方法
DbDataAdapter 类

初始化 RowUpdatedEventArgs 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function CreateRowUpdatedEvent ( _
    dataRow As DataRow, _
    command As IDbCommand, _
    statementType As StatementType, _
    tableMapping As DataTableMapping _
) As RowUpdatedEventArgs
protected virtual RowUpdatedEventArgs CreateRowUpdatedEvent(
    DataRow dataRow,
    IDbCommand command,
    StatementType statementType,
    DataTableMapping tableMapping
)
protected:
virtual RowUpdatedEventArgs^ CreateRowUpdatedEvent(
    DataRow^ dataRow,
    IDbCommand^ command,
    StatementType statementType,
    DataTableMapping^ tableMapping
)
abstract CreateRowUpdatedEvent :
        dataRow:DataRow *
        command:IDbCommand *
        statementType:StatementType *
        tableMapping:DataTableMapping -> RowUpdatedEventArgs
override CreateRowUpdatedEvent :
        dataRow:DataRow *
        command:IDbCommand *
        statementType:StatementType *
        tableMapping:DataTableMapping -> RowUpdatedEventArgs

参数

dataRow
类型： System.Data DataRow
用于更新数据源的 DataRow。
command
类型： System.Data IDbCommand
在 Update 过程中执行的 IDbCommand。
statementType
类型： System.Data StatementType
该命令是 UPDATE、INSERT、DELETE 语句还是 SELECT 语句。
tableMapping
类型： System.Data.Common DataTableMapping
一个 DataTableMapping 对象。

返回值

类型： System.Data.Common RowUpdatedEventArgs
RowUpdatedEventArgs 类的新实例。

对继承者的说明

重写派生类中的 CreateRowUpdatedEvent 时，确保调用基类的 CreateRowUpdatedEvent 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.CreateRowUpdatingEvent 方法

DbDataAdapter
.
.
::
.
CreateRowUpdatingEvent 方法
DbDataAdapter 类

初始化 RowUpdatingEventArgs 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function CreateRowUpdatingEvent ( _
    dataRow As DataRow, _
    command As IDbCommand, _
    statementType As StatementType, _
    tableMapping As DataTableMapping _
) As RowUpdatingEventArgs
protected virtual RowUpdatingEventArgs CreateRowUpdatingEvent(
    DataRow dataRow,
    IDbCommand command,
    StatementType statementType,
    DataTableMapping tableMapping
)
protected:
virtual RowUpdatingEventArgs^ CreateRowUpdatingEvent(
    DataRow^ dataRow,
    IDbCommand^ command,
    StatementType statementType,
    DataTableMapping^ tableMapping
)
abstract CreateRowUpdatingEvent :
        dataRow:DataRow *
        command:IDbCommand *
        statementType:StatementType *
        tableMapping:DataTableMapping -> RowUpdatingEventArgs
override CreateRowUpdatingEvent :
        dataRow:DataRow *
        command:IDbCommand *
        statementType:StatementType *
        tableMapping:DataTableMapping -> RowUpdatingEventArgs

参数

dataRow
类型： System.Data DataRow
更新数据源的 DataRow。
command
类型： System.Data IDbCommand
要在 Update 过程中执行的 IDbCommand。
statementType
类型： System.Data StatementType
该命令是 UPDATE、INSERT、DELETE 语句还是 SELECT 语句。
tableMapping
类型： System.Data.Common DataTableMapping
一个 DataTableMapping 对象。

返回值

类型： System.Data.Common RowUpdatingEventArgs
RowUpdatingEventArgs 类的新实例。

对继承者的说明

重写派生类中的 CreateRowUpdatingEvent 时，确保调用基类的 CreateRowUpdatingEvent 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Dispose 方法

DbDataAdapter
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

名称 说明
页首

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.Dispose 方法 (Boolean)

DbDataAdapter
.
.
::
.
Dispose 方法 (Boolean)
DbDataAdapter 类

释放由 DbDataAdapter 占用的非托管资源，还可以另外再释放托管资源。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overrides Sub Dispose ( _
    disposing As Boolean _
)
protected override void Dispose(
    bool disposing
)
protected:
virtual void Dispose(
    bool disposing
) override
abstract Dispose :
        disposing:bool -> unit
override Dispose :
        disposing:bool -> unit

参数

disposing
类型： System Boolean
为 true，则释放托管资源和非托管资源；为 false，则仅释放非托管资源。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Dispose 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.ExecuteBatch 方法

DbDataAdapter
.
.
::
.
ExecuteBatch 方法
DbDataAdapter 类

执行当前批处理。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function ExecuteBatch As Integer
protected virtual int ExecuteBatch()
protected:
virtual int ExecuteBatch()
abstract ExecuteBatch : unit -> int
override ExecuteBatch : unit -> int

返回值

类型： System Int32
从批处理中的最后一个命令返回的值。

在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。 在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。

对实现者的说明

此方法是受保护的，供 .NET Framework 数据提供程序使用。

如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法以允许用户执行批处理。此方法的实现将适配器中的命令组合为一个批处理，然后执行该批处理并返回该批处理的返回值。 如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法以允许用户执行批处理。此方法的实现将适配器中的命令组合为一个批处理，然后执行该批处理并返回该批处理的返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Fill 方法

DbDataAdapter
.
.
::
.
Fill 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

填充 DataSet 或 DataTable。

名称 说明
页首

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.Fill 方法 (DataSet)

DbDataAdapter
.
.
::
.
Fill 方法 (DataSet)
DbDataAdapter 类

在 DataSet 中添加或刷新行。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function Fill ( _
    dataSet As DataSet _
) As Integer
public override int Fill(
    DataSet dataSet
)
public:
virtual int Fill(
    DataSet^ dataSet
) override
abstract Fill :
        dataSet:DataSet -> int
override Fill :
        dataSet:DataSet -> int

参数

dataSet
类型： System.Data DataSet
要用记录和架构（如有必要）填充的 DataSet。

返回值

类型： System Int32
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

实现

Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

如果在填充数据表时遇到错误或异常，则错误发生之前添加的行将保留在数据表中。操作的剩余部分被中止。 如果在填充数据表时遇到错误或异常，则错误发生之前添加的行将保留在数据表中。操作的剩余部分被中止。

如果命令不返回任何行，则不向 DataSet 中添加表，并且不引发异常。

如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。 如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。

当指定的查询返回多项结果时，每个返回查询的行的结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，这样由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个返回查询的行的结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，这样由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个返回查询的行的结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，这样由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个返回查询的行的结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，这样由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

当用于填充 DataSet 的 SELECT 语句（例如批处理 SQL 语句）返回多项结果时，如果其中一项结果包含错误，则将跳过所有后面的结果并且不将它们添加到 DataSet 中。

当使用后面的 Fill 调用来刷新 DataSet 的内容时，必须满足以下两个条件：

  1. 该 SQL 语句应该与最初用来填充 DataSet 的语句匹配。

  2. 必须存在键列信息。

如果主键信息存在，则协调任何重复的行，并且这些重复行将只在与 DataSet 对应的 DataTable 中出现一次。可以通过 FillSchema（通过指定 DataTable 的 PrimaryKey 属性），或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。 如果主键信息存在，则协调任何重复的行，并且这些重复行将只在与 DataSet 对应的 DataTable 中出现一次。可以通过 FillSchema（通过指定 DataTable 的 PrimaryKey 属性），或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。

如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Fill 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Fill 方法 (DataTable)

DbDataAdapter
.
.
::
.
Fill 方法 (DataTable)
DbDataAdapter 类

在 DataSet 的指定范围中添加或刷新行，以与使用 DataTable 名称的数据源中的行匹配。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Fill ( _
    dataTable As DataTable _
) As Integer
public int Fill(
    DataTable dataTable
)
public:
int Fill(
    DataTable^ dataTable
)
member Fill :
        dataTable:DataTable -> int

参数

dataTable
类型： System.Data DataTable
用于表映射的 DataTable 的名称。

返回值

类型： System Int32
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。
异常 | 条件
InvalidOperationException | 源表无效。

Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。

如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。

采用 DataTable 作为参数的 Fill 的重载仅获取第一个结果。使用以 DataSet 作为参数的 Fill 重载将获取多个结果。 采用 DataTable 作为参数的 Fill 的重载仅获取第一个结果。使用以 DataSet 作为参数的 Fill 重载将获取多个结果。

Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 dataset.Tables.Add("AAA");
 adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".

如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
    adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.

您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。

如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，.NET Framework 数据提供程序的 Fill 和 FillSchema 的实现只在架构信息中检索第一项结果。

对实现者的说明

Fill 方法的此重载是受保护的，供 .NET Framework 数据提供程序使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Fill 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Fill 方法 (DataSet, String)

DbDataAdapter
.
.
::
.
Fill 方法 (DataSet, String)
DbDataAdapter 类

在 DataSet 中添加或刷新行以匹配使用 DataSet 和 DataTable 名称的数据源中的行。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Fill ( _
    dataSet As DataSet, _
    srcTable As String _
) As Integer
public int Fill(
    DataSet dataSet,
    string srcTable
)
public:
int Fill(
    DataSet^ dataSet,
    String^ srcTable
)
member Fill :
        dataSet:DataSet *
        srcTable:string -> int

参数

dataSet
类型： System.Data DataSet
要用记录和架构（如有必要）填充的 DataSet。
srcTable
类型： System String
用于表映射的源表的名称。

返回值

类型： System Int32
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。
异常 | 条件
SystemException | 源表无效。

Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

如果命令不返回任何行，则不向 DataSet 中添加表，并且不引发异常。

如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。 如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。

当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，那么由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，那么由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，那么由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，那么由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 dataset.Tables.Add("AAA");
 adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".

如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。

 DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.

如果在填充数据表时遇到错误或异常，则错误发生之前添加的行将保留在数据表中。操作的剩余部分被中止。 如果在填充数据表时遇到错误或异常，则错误发生之前添加的行将保留在数据表中。操作的剩余部分被中止。

当用于填充 DataSet 的 SELECT 语句（例如批处理 SQL 语句）返回多项结果时，请注意以下事项：

  • 如果其中一项结果包含错误，则将跳过所有后面的结果而不将其添加到 DataSet 中。

当使用后面的 Fill 调用来刷新 DataSet 的内容时，必须满足以下两个条件：

  1. 该 SQL 语句应该与最初用来填充 DataSet 的语句匹配。

  2. 必须存在键列信息。如果主键信息存在，则协调任何重复的行，并且这些重复行将只在与 DataSet 对应的 DataTable 中出现一次。可以通过 FillSchema（通过指定 DataTable 的 PrimaryKey 属性），或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。 必须存在键列信息。如果主键信息存在，则协调任何重复的行，并且这些重复行将只在与 DataSet 对应的 DataTable 中出现一次。可以通过 FillSchema（通过指定 DataTable 的 PrimaryKey 属性），或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。 必须存在键列信息。如果主键信息存在，则协调任何重复的行，并且这些重复行将只在与 DataSet 对应的 DataTable 中出现一次。可以通过 FillSchema（通过指定 DataTable 的 PrimaryKey 属性），或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。

如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

对继承者的说明

重写派生类中的 Fill 时，确保调用基类的 Fill 方法。

下面的示例使用派生类 OleDbDataAdapter，利用 categories 表中的行来填充 DataSet。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet。 下面的示例使用派生类 OleDbDataAdapter，利用 categories 表中的行来填充 DataSet。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet。

Public Sub GetRecords()
    ' ...
    ' create dataSet and adapter
    ' ...
    adapter.Fill(dataSet, "Categories")
End Sub

public void GetRecords()
{
    // ...
    // create dataSet and adapter
    // ...
    adapter.Fill(dataSet, "Categories");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Fill 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Fill 方法 (DataTable, IDbCommand, CommandBehavior)

DbDataAdapter
.
.
::
.
Fill 方法 (DataTable, IDbCommand, CommandBehavior)
DbDataAdapter 类

在 DataTable 中添加或刷新行，以与使用指定的 DataTable、IDbCommand 和 CommandBehavior 的数据源中的行匹配。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function Fill ( _
    dataTable As DataTable, _
    command As IDbCommand, _
    behavior As CommandBehavior _
) As Integer
protected virtual int Fill(
    DataTable dataTable,
    IDbCommand command,
    CommandBehavior behavior
)
protected:
virtual int Fill(
    DataTable^ dataTable,
    IDbCommand^ command,
    CommandBehavior behavior
)
abstract Fill :
        dataTable:DataTable *
        command:IDbCommand *
        behavior:CommandBehavior -> int
override Fill :
        dataTable:DataTable *
        command:IDbCommand *
        behavior:CommandBehavior -> int

参数

dataTable
类型： System.Data DataTable
要用记录和架构（如有必要）填充的 DataTable。
command
类型： System.Data IDbCommand
用于从数据源中检索行的 SQL SELECT 语句。
behavior
类型： System.Data CommandBehavior
CommandBehavior 值之一。

返回值

类型： System Int32
已在 DataTable 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataTable 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

然后，Fill 操作将行添加到 DataSet 中的指定目标 DataTable 对象，如果 DataTable 对象不存在，则创建该对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的指定目标 DataTable 对象，如果 DataTable 对象不存在，则创建该对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的指定目标 DataTable 对象，如果 DataTable 对象不存在，则创建该对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。

如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。 如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。

采用 DataTable 作为参数的 Fill 的重载仅获取第一个结果。使用以 DataSet 作为参数的 Fill 重载将获取多个结果。 采用 DataTable 作为参数的 Fill 的重载仅获取第一个结果。使用以 DataSet 作为参数的 Fill 重载将获取多个结果。

您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。

如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

对实现者的说明

Fill 方法的此重载是受保护的，供 .NET Framework 数据提供程序使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Fill 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Fill 方法 (Int32, Int32, array<DataTable >[]()[])

DbDataAdapter
.
.
::
.
Fill 方法 (Int32, Int32,
array<
DataTable
>
[]
()
[]
)
DbDataAdapter 类

在 DataTable 中添加或刷新行，以与从指定的记录开始一直检索到指定的最大数目的记录的数据源中的行匹配。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Fill ( _
    startRecord As Integer, _
    maxRecords As Integer, _
    ParamArray dataTables As DataTable() _
) As Integer
public int Fill(
    int startRecord,
    int maxRecords,
    params DataTable[] dataTables
)
public:
int Fill(
    int startRecord,
    int maxRecords,
    ... array<DataTable^>^ dataTables
)
member Fill :
        startRecord:int *
        maxRecords:int *
        dataTables:DataTable[] -> int

参数

startRecord
类型： System Int32
从其开始的从零开始的记录号。
maxRecords
类型： System Int32
要检索的最大记录数。
dataTables
类型：
array<
System.Data DataTable
>
[]
()
[]

要从数据源填充的 DataTable 对象。

返回值

类型： System Int32
已在 DataTable 中成功添加或刷新的行数。此值不包括受不返回行的语句影响的行。 已在 DataTable 中成功添加或刷新的行数。此值不包括受不返回行的语句影响的行。

Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则需要将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则需要将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则需要将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则需要将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。

如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。

如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果数据适配器在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

当用于填充 DataSet 的 SELECT 语句（例如批处理 SQL 语句）返回多项结果时，如果其中一项结果包含错误，则将跳过所有后面的结果并且不将其添加到 DataSet 中。

您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Fill 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Fill 方法 (DataSet, Int32, Int32, String)

DbDataAdapter
.
.
::
.
Fill 方法 (DataSet, Int32, Int32, String)
DbDataAdapter 类

在 DataSet 的指定范围中添加或刷新行以匹配使用 DataSet 和 DataTable 名称的数据源中的行。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Fill ( _
    dataSet As DataSet, _
    startRecord As Integer, _
    maxRecords As Integer, _
    srcTable As String _
) As Integer
public int Fill(
    DataSet dataSet,
    int startRecord,
    int maxRecords,
    string srcTable
)
public:
int Fill(
    DataSet^ dataSet,
    int startRecord,
    int maxRecords,
    String^ srcTable
)
member Fill :
        dataSet:DataSet *
        startRecord:int *
        maxRecords:int *
        srcTable:string -> int

参数

dataSet
类型： System.Data DataSet
要用记录和架构（如有必要）填充的 DataSet。
startRecord
类型： System Int32
从其开始的从零开始的记录号。
maxRecords
类型： System Int32
要检索的最大记录数。
srcTable
类型： System String
用于表映射的源表的名称。

返回值

类型： System Int32
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。
异常 | 条件
SystemException | DataSet 无效。
InvalidOperationException | 源表无效。 - 或 - 连接无效。
InvalidCastException | 未能找到连接。
ArgumentException | startRecord 参数小于 0。 - 或 - maxRecords 参数小于 0。

maxRecords 0 值获取在起始记录后面找到的所有记录。如果 maxRecords 大于剩余行的数目，则仅返回剩余的行并且不引发任何错误。 maxRecords 0 值获取在起始记录后面找到的所有记录。如果 maxRecords 大于剩余行的数目，则仅返回剩余的行并且不引发任何错误。

如果对应的 Select 命令是一个返回多项结果的语句，则 Fill 只将 maxRecords 应用到第一个结果。

Fill 方法使用 SELECT 语句从数据源中检索数据。与 SELECT 语句关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 SELECT 语句关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 SELECT 语句关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 SELECT 语句关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

如果命令不返回任何行，则不向 DataSet 中添加表，但不引发异常。

如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。 如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。

当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，这样由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，这样由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，这样由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，这样由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
dataset.Tables.Add("AAA");
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".

如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.

如果在填充数据表时遇到错误或异常，则错误发生之前添加的行将保留在数据表中。操作的剩余部分被中止。 如果在填充数据表时遇到错误或异常，则错误发生之前添加的行将保留在数据表中。操作的剩余部分被中止。

当用于填充 DataSet 的 SELECT 语句（例如批处理 SQL 语句）返回多项结果时，请注意以下事项：

  • 当处理批处理 SQL 语句的多项结果时，maxRecords 仅应用于第一个结果。对于包含分章结果的行同样适用（仅限用于 OLE DB 的 .NET Framework 数据提供程序）。顶级结果受 maxRecords 限制，但将添加所有子行。 当处理批处理 SQL 语句的多项结果时，maxRecords 仅应用于第一个结果。对于包含分章结果的行同样适用（仅限用于 OLE DB 的 .NET Framework 数据提供程序）。顶级结果受 maxRecords 限制，但将添加所有子行。 当处理批处理 SQL 语句的多项结果时，maxRecords 仅应用于第一个结果。对于包含分章结果的行同样适用（仅限用于 OLE DB 的 .NET Framework 数据提供程序）。顶级结果受 maxRecords 限制，但将添加所有子行。

  • 如果其中一项结果包含错误，则将跳过所有后面的结果而不将其添加到 DataSet 中。

当使用后面的 Fill 调用来刷新 DataSet 的内容时，必须满足以下两个条件：

  1. 该 SQL 语句应该与最初用来填充 DataSet 的语句匹配。

  2. 必须存在键列信息。

如果主键信息存在，则协调任何重复的行，并且这些行在与 DataSet 对应的 DataTable 中只出现一次。可以通过 FillSchema（通过指定 DataTable 的 PrimaryKey 属性），或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。 如果主键信息存在，则协调任何重复的行，并且这些行在与 DataSet 对应的 DataTable 中只出现一次。可以通过 FillSchema（通过指定 DataTable 的 PrimaryKey 属性），或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。

如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。
说明 说明

DataSet 包含的记录数将不会多于由 maxRecords 指示的记录数。但仍然从服务器返回该查询所生成的整个结果集。 DataSet 包含的记录数将不会多于由 maxRecords 指示的记录数。但仍然从服务器返回该查询所生成的整个结果集。

对继承者的说明

重写派生类中的 Fill 时，确保调用基类的 Fill 方法。

下面的示例使用派生类 OleDbDataAdapter，利用 Categories 表中从第 10 行开始的 15 行数据来填充 DataSet。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet。 下面的示例使用派生类 OleDbDataAdapter，利用 Categories 表中从第 10 行开始的 15 行数据来填充 DataSet。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet。

Public Sub GetRecords()
    ' ...
    ' create dataSet and adapter
    ' ...
    adapter.Fill(dataSet, 9, 15, "Categories")
End Sub

public void GetRecords()
{
    // ...
    // create dataSet and adapter
    // ...
    adapter.Fill(dataSet,9,15,"Categories");
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Fill 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Fill 方法 ( array<DataTable >[]()[], Int32, Int32, IDbCommand, CommandBehavior)

DbDataAdapter
.
.
::
.
Fill 方法 (
array<
DataTable
>
[]
()
[]
, Int32, Int32, IDbCommand, CommandBehavior)
DbDataAdapter 类

在 DataSet 的指定范围中添加或刷新行以匹配使用 DataSet 和 DataTable 名称的数据源中的行。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function Fill ( _
    dataTables As DataTable(), _
    startRecord As Integer, _
    maxRecords As Integer, _
    command As IDbCommand, _
    behavior As CommandBehavior _
) As Integer
protected virtual int Fill(
    DataTable[] dataTables,
    int startRecord,
    int maxRecords,
    IDbCommand command,
    CommandBehavior behavior
)
protected:
virtual int Fill(
    array<DataTable^>^ dataTables,
    int startRecord,
    int maxRecords,
    IDbCommand^ command,
    CommandBehavior behavior
)
abstract Fill :
        dataTables:DataTable[] *
        startRecord:int *
        maxRecords:int *
        command:IDbCommand *
        behavior:CommandBehavior -> int
override Fill :
        dataTables:DataTable[] *
        startRecord:int *
        maxRecords:int *
        command:IDbCommand *
        behavior:CommandBehavior -> int

参数

dataTables
类型：
array<
System.Data DataTable
>
[]
()
[]

要从数据源填充的 DataTable 对象。
startRecord
类型： System Int32
从其开始的从零开始的记录号。
maxRecords
类型： System Int32
要检索的最大记录数。
command
类型： System.Data IDbCommand
执行以填充 DataTable 对象的 IDbCommand。
behavior
类型： System.Data CommandBehavior
CommandBehavior 值之一。

返回值

类型： System Int32
已在数据表中添加或刷新的行数。
异常 | 条件
SystemException | DataSet 无效。
InvalidOperationException | 源表无效。 - 或 - 连接无效。
InvalidCastException | 未能找到连接。
ArgumentException | startRecord 参数小于 0。 - 或 - maxRecords 参数小于 0。

maxRecords 0 值获取在起始记录后面找到的所有记录。如果 maxRecords 大于剩余行的数目，则仅返回剩余的行并且不引发任何错误。 maxRecords 0 值获取在起始记录后面找到的所有记录。如果 maxRecords 大于剩余行的数目，则仅返回剩余的行并且不引发任何错误。

Fill 方法使用 SELECT 语句从数据源中检索数据。与 SELECT 语句关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 SELECT 语句关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 SELECT 语句关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用 SELECT 语句从数据源中检索数据。与 SELECT 语句关联的 IDbConnection 对象必须有效，但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

如果命令不返回任何行，则不向 DataSet 中添加表，但不引发异常。

如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。 如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。

当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，那么由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，那么由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，那么由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 当指定的查询返回多项结果时，每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。如果某个查询不返回行，则不会为该查询创建表，因此，如果您先处理一个插入查询，然后再处理一个选择查询，那么由于为选择查询创建的表是第一个表，所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 dataset.Tables.Add("AAA");
 adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".

如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。

 DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.

如果在填充数据表时遇到错误或异常，则错误发生之前添加的行将保留在数据表中。操作的剩余部分被中止。 如果在填充数据表时遇到错误或异常，则错误发生之前添加的行将保留在数据表中。操作的剩余部分被中止。

当用于填充 DataTable 对象的 SELECT 语句（例如批处理 SQL 语句）返回多项结果时，请注意以下事项：

  • 当处理批处理 SQL 语句的多项结果时，maxRecords 仅应用于第一个结果。对于包含分章结果的行同样适用（仅限用于 OLE DB 的 .NET Framework 数据提供程序）。顶级结果受 maxRecords 限制，但将添加所有子行。 当处理批处理 SQL 语句的多项结果时，maxRecords 仅应用于第一个结果。对于包含分章结果的行同样适用（仅限用于 OLE DB 的 .NET Framework 数据提供程序）。顶级结果受 maxRecords 限制，但将添加所有子行。 当处理批处理 SQL 语句的多项结果时，maxRecords 仅应用于第一个结果。对于包含分章结果的行同样适用（仅限用于 OLE DB 的 .NET Framework 数据提供程序）。顶级结果受 maxRecords 限制，但将添加所有子行。

  • 如果其中一个结果包含错误，则所有后续的结果都将被跳过。

说明 说明

DataSet 包含的记录数将不会多于由 maxRecords 指示的记录数。但仍然从服务器返回该查询所生成的整个结果集。 DataSet 包含的记录数将不会多于由 maxRecords 指示的记录数。但仍然从服务器返回该查询所生成的整个结果集。

对继承者的说明

重写派生类中的 Fill 时，确保调用基类的 Fill 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Fill 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Fill 方法 (DataSet, Int32, Int32, String, IDbCommand, CommandBehavior)

DbDataAdapter
.
.
::
.
Fill 方法 (DataSet, Int32, Int32, String, IDbCommand, CommandBehavior)
DbDataAdapter 类

使用 DataSet 和源表名称、命令字符串以及命令行为，在 DataSet 的指定范围中添加或刷新某些行以使它们与数据源中对应的行相一致。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function Fill ( _
    dataSet As DataSet, _
    startRecord As Integer, _
    maxRecords As Integer, _
    srcTable As String, _
    command As IDbCommand, _
    behavior As CommandBehavior _
) As Integer
protected virtual int Fill(
    DataSet dataSet,
    int startRecord,
    int maxRecords,
    string srcTable,
    IDbCommand command,
    CommandBehavior behavior
)
protected:
virtual int Fill(
    DataSet^ dataSet,
    int startRecord,
    int maxRecords,
    String^ srcTable,
    IDbCommand^ command,
    CommandBehavior behavior
)
abstract Fill :
        dataSet:DataSet *
        startRecord:int *
        maxRecords:int *
        srcTable:string *
        command:IDbCommand *
        behavior:CommandBehavior -> int
override Fill :
        dataSet:DataSet *
        startRecord:int *
        maxRecords:int *
        srcTable:string *
        command:IDbCommand *
        behavior:CommandBehavior -> int

参数

dataSet
类型： System.Data DataSet
要用记录和架构（如有必要）填充的 DataSet。
startRecord
类型： System Int32
从其开始的从零开始的记录号。
maxRecords
类型： System Int32
要检索的最大记录数。
srcTable
类型： System String
用于表映射的源表的名称。
command
类型： System.Data IDbCommand
用于从数据源中检索行的 SQL SELECT 语句。
behavior
类型： System.Data CommandBehavior
CommandBehavior 值之一。

返回值

类型： System Int32
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。 已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。
异常 | 条件
InvalidOperationException | 源表无效。
ArgumentException | startRecord 参数小于 0。 - 或 - maxRecords 参数小于 0。

Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。 Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效，但不需要将其打开。如果调用 Fill 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 Fill 之前连接已打开，它将保持打开状态。

然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。 然后，Fill 操作将行添加到 DataSet 中的目标 DataTable 对象，如果 DataTable 对象不存在，则创建这些对象。当创建 DataTable 对象时，Fill 操作通常只创建列名元数据。但是，如果 MissingSchemaAction 属性设置为 AddWithKey，则还会创建适当的主键和约束。

如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名（例如“Table”、“Table1”、“Table2”等）。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 Fill 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，Fill 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 dataset.Tables.Add("AAA");
 adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".

如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。

 DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.

您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。 您可以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在，则传入行会与已有的匹配行合并。如果主键不存在，则传入行会追加到 DataTable 中。

如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。 如果 SelectCommand 返回 OUTER JOIN 的结果，则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键，确保正确地解析重复行。有关更多信息，请参见定义主键 (ADO.NET)。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，.NET Framework 数据提供程序的 Fill 和 FillSchema 的实现只在架构信息中检索第一项结果。

对实现者的说明

Fill 方法的此重载是受保护的，供 .NET Framework 数据提供程序使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Fill 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.FillSchema 方法

DbDataAdapter
.
.
::
.
FillSchema 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

将 DataTable 添加到 DataSet 中，并配置架构以匹配数据源中的架构。

名称 说明
页首

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.FillSchema 方法 (DataSet, SchemaType)

DbDataAdapter
.
.
::
.
FillSchema 方法 (DataSet, SchemaType)
DbDataAdapter 类

将名为“Table”的 DataTable 添加到指定的 DataSet 中，并根据指定的 SchemaType 配置架构以匹配数据源中的架构。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function FillSchema ( _
    dataSet As DataSet, _
    schemaType As SchemaType _
) As DataTable()
public override DataTable[] FillSchema(
    DataSet dataSet,
    SchemaType schemaType
)
public:
virtual array<DataTable^>^ FillSchema(
    DataSet^ dataSet,
    SchemaType schemaType
) override
abstract FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType -> DataTable[]
override FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType -> DataTable[]

参数

dataSet
类型： System.Data DataSet
要将架构插入其中的 DataSet。
schemaType
类型： System.Data SchemaType
SchemaType 值之一，指定如何插入架构。

返回值

类型：
array<
System.Data DataTable
>
[]
()
[]

对添加到 DataSet 中的 DataTable 对象集合的引用。

实现

此方法使用 SelectCommand 从数据源中检索架构信息。

FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性： FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性：

  • AllowDBNull

  • AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。 AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。

  • MaxLength

  • ReadOnly

  • Unique

FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性：

  • 如果 SelectCommand 返回一个或多个主键列，则它们被用作 DataTable 的主键列。

  • 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。

  • 如果既返回了主键列又返回了唯一列，则主键列用作 DataTable 的主键列。

请注意，主键和唯一约束按照上述规则添加到 ConstraintCollection 中，但不添加其他约束类型。

如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。

主键信息在 Fill 过程中用来查找和替换其键列匹配的所有行。如果这不是所需的行为，请使用 Fill 而不请求架构信息。 主键信息在 Fill 过程中用来查找和替换其键列匹配的所有行。如果这不是所需的行为，请使用 Fill 而不请求架构信息。

如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

与 Select 命令关联的 IDbConnection 对象必须有效，但它不需要打开。如果调用 FillSchema 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，则它保持打开状态。 与 Select 命令关联的 IDbConnection 对象必须有效，但它不需要打开。如果调用 FillSchema 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，则它保持打开状态。 与 Select 命令关联的 IDbConnection 对象必须有效，但它不需要打开。如果调用 FillSchema 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，则它保持打开状态。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。

下面的示例使用派生类 SqlDataAdapter，利用架构来填充 DataSet，并返回 DataSet。

Private Function GetCustomerData(ByVal dataSetName As String, _
    ByVal connectionString As String) As DataSet

    Dim dataSet As DataSet = New DataSet(dataSetName)

    Using connection As SqlConnection = New SqlConnection(connectionString)
        Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
           "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
           connection)

        Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
           "Table", "Customers")
        mapping.ColumnMappings.Add("CompanyName", "Name")
        mapping.ColumnMappings.Add("ContactName", "Contact")

        connection.Open()

        adapter.FillSchema(dataSet, SchemaType.Mapped)
        adapter.Fill(dataSet)
        Return dataSet
    End Using
End Function

public static DataSet GetCustomerData(string dataSetName,
    string connectionString)
{
    DataSet dataSet = new DataSet(dataSetName);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

        DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
        mapping.ColumnMappings.Add("CompanyName", "Name");
        mapping.ColumnMappings.Add("ContactName", "Contact");

        connection.Open();

        adapter.FillSchema(dataSet, SchemaType.Mapped);
        adapter.Fill(dataSet);

        return dataSet;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
FillSchema 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.FillSchema 方法 (DataTable, SchemaType)

DbDataAdapter
.
.
::
.
FillSchema 方法 (DataTable, SchemaType)
DbDataAdapter 类

根据指定的 SchemaType 配置指定 DataTable 的架构。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function FillSchema ( _
    dataTable As DataTable, _
    schemaType As SchemaType _
) As DataTable
public DataTable FillSchema(
    DataTable dataTable,
    SchemaType schemaType
)
public:
DataTable^ FillSchema(
    DataTable^ dataTable,
    SchemaType schemaType
)
member FillSchema :
        dataTable:DataTable *
        schemaType:SchemaType -> DataTable

参数

dataTable
类型： System.Data DataTable
要用数据源中的架构填充的 DataTable。
schemaType
类型： System.Data SchemaType
SchemaType 值之一。

返回值

类型： System.Data DataTable
包含从数据源返回的架构信息的 DataTable。

FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。

FillSchema 操作返回 DataTable。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性： FillSchema 操作返回 DataTable。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性：

  • AllowDBNull

  • AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。 AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。

  • MaxLength

  • ReadOnly

  • Unique

FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性：

  • 如果已为 DataTable 定义了 PrimaryKey，或者 DataTable 包含数据，将不设置 PrimaryKey 属性。

  • 如果 SelectCommand 返回一个或多个主键列，则它们被用作 DataTable 的主键列。

  • 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。

  • 如果既返回了主键列又返回了唯一列，则主键列用作 DataTable 的主键列。

请注意，主键和唯一约束按照上述规则添加到 ConstraintCollection 中，但不添加其他约束类型。此过程可能需要到服务器的往返行程。 请注意，主键和唯一约束按照上述规则添加到 ConstraintCollection 中，但不添加其他约束类型。此过程可能需要到服务器的往返行程。

如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。

如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

FillSchema 不返回任何行。使用 Fill 方法将行添加到 DataTable 中。 FillSchema 不返回任何行。使用 Fill 方法将行添加到 DataTable 中。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。

下面的示例使用派生类 SqlDataAdapter，利用架构来填充 DataSet，并返回 DataTable。

Private Function GetCustomerData(ByVal dataTableName As String, _
    ByVal connectionString As String) As DataTable

    Dim table As DataTable = New DataTable(dataTableName)

    Using connection As SqlConnection = New SqlConnection(connectionString)

        Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
           "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
           connection)

        Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
           "Table", "Customers")
        mapping.ColumnMappings.Add("CompanyName", "Name")
        mapping.ColumnMappings.Add("ContactName", "Contact")

        connection.Open()

        adapter.FillSchema(table, SchemaType.Mapped)
        adapter.Fill(table)
        Return table
    End Using
End Function

public static DataTable GetCustomerData(string dataSetName,
    string connectionString)
{
    DataTable table = new DataTable(dataSetName);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

        DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
        mapping.ColumnMappings.Add("CompanyName", "Name");
        mapping.ColumnMappings.Add("ContactName", "Contact");

        connection.Open();

        adapter.FillSchema(table, SchemaType.Mapped);
        adapter.Fill(table);
        return table;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
FillSchema 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.FillSchema 方法 (DataSet, SchemaType, String)

DbDataAdapter
.
.
::
.
FillSchema 方法 (DataSet, SchemaType, String)
DbDataAdapter 类

将 DataTable 添加到指定的 DataSet 中，并根据指定的 SchemaType 和 DataTable 配置架构以匹配数据源中的架构。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function FillSchema ( _
    dataSet As DataSet, _
    schemaType As SchemaType, _
    srcTable As String _
) As DataTable()
public DataTable[] FillSchema(
    DataSet dataSet,
    SchemaType schemaType,
    string srcTable
)
public:
array<DataTable^>^ FillSchema(
    DataSet^ dataSet,
    SchemaType schemaType,
    String^ srcTable
)
member FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType *
        srcTable:string -> DataTable[]

参数

dataSet
类型： System.Data DataSet
要将架构插入其中的 DataSet。
schemaType
类型： System.Data SchemaType
SchemaType 值之一，指定如何插入架构。
srcTable
类型： System String
用于表映射的源表的名称。

返回值

类型：
array<
System.Data DataTable
>
[]
()
[]

对添加到 DataSet 中的 DataTable 对象集合的引用。
异常 | 条件
ArgumentException | 未能找到从中获取架构的源表。

此方法使用 SelectCommand 从数据源中检索架构信息。

FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性： FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性：

  • AllowDBNull

  • AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。 AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。

  • MaxLength

  • ReadOnly

  • Unique

FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性：

  • 如果 SelectCommand 返回一个或多个主键列，则它们被用作 DataTable 的主键列。

  • 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。

  • 如果既返回了主键列又返回了唯一列，则主键列用作 DataTable 的主键列。

请注意，主键和唯一约束按照上述规则添加到 ConstraintCollection 中，但不添加其他约束类型。

如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。

主键信息在 Fill 过程中用来查找和替换其键列匹配的所有行。如果这不是所需的行为，请使用 Fill 而不请求架构信息。 主键信息在 Fill 过程中用来查找和替换其键列匹配的所有行。如果这不是所需的行为，请使用 Fill 而不请求架构信息。

如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 DbDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

FillSchema 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，FillSchema 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 FillSchema 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，FillSchema 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 FillSchema 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，FillSchema 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 dataset.Tables.Add("AAA");
 adapter.FillSchema(dataset, "aaa"); // Fills the schema of "aaa", which already exists in the DataSet.adapter.FillSchema(dataset, "Aaa"); // Adds a new table called "Aaa".

如果调用 FillSchema 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 FillSchema 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 FillSchema 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。

 DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 adapter.FillSchema(dataset, "AAA"); // Fills the schema of table "aaa" because only one similarly named table is in the DataSet.

与 Select 命令关联的 IDbConnection 对象必须有效，但它不需要打开。如果调用 FillSchema 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，则它保持打开状态。 与 Select 命令关联的 IDbConnection 对象必须有效，但它不需要打开。如果调用 FillSchema 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，则它保持打开状态。 与 Select 命令关联的 IDbConnection 对象必须有效，但它不需要打开。如果调用 FillSchema 之前 IDbConnection 已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，则它保持打开状态。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。

下面的示例使用派生类 SqlDataAdapter，利用架构来填充 DataSet，并返回 DataSet。

Private Function GetCustomerData(ByVal dataSetName As String, _
    ByVal connectionString As String) As DataSet

    Dim dataSet As DataSet = New DataSet(dataSetName)

    Using connection As SqlConnection = New SqlConnection(connectionString)

        Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
           "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
           connection)

        Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
           "Table", "Customers")
        mapping.ColumnMappings.Add("CompanyName", "Name")
        mapping.ColumnMappings.Add("ContactName", "Contact")

        connection.Open()

        adapter.FillSchema(dataSet, SchemaType.Source, "Customers")
        adapter.Fill(dataSet)
        Return dataSet
    End Using
End Function

public static DataSet GetCustomerData(string dataSetName,
    string connectionString)
{
    DataSet dataSet = new DataSet(dataSetName);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

        DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
        mapping.ColumnMappings.Add("CompanyName", "Name");
        mapping.ColumnMappings.Add("ContactName", "Contact");

        connection.Open();

        adapter.FillSchema(dataSet, SchemaType.Source, "Customers");
        adapter.Fill(dataSet);

        return dataSet;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
FillSchema 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.FillSchema 方法 (DataTable, SchemaType, IDbCommand, CommandBehavior)

DbDataAdapter
.
.
::
.
FillSchema 方法 (DataTable, SchemaType, IDbCommand, CommandBehavior)
DbDataAdapter 类

根据指定的 SchemaType、命令字符串以及 CommandBehavior 值配置指定 DataTable 的架构。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function FillSchema ( _
    dataTable As DataTable, _
    schemaType As SchemaType, _
    command As IDbCommand, _
    behavior As CommandBehavior _
) As DataTable
protected virtual DataTable FillSchema(
    DataTable dataTable,
    SchemaType schemaType,
    IDbCommand command,
    CommandBehavior behavior
)
protected:
virtual DataTable^ FillSchema(
    DataTable^ dataTable,
    SchemaType schemaType,
    IDbCommand^ command,
    CommandBehavior behavior
)
abstract FillSchema :
        dataTable:DataTable *
        schemaType:SchemaType *
        command:IDbCommand *
        behavior:CommandBehavior -> DataTable
override FillSchema :
        dataTable:DataTable *
        schemaType:SchemaType *
        command:IDbCommand *
        behavior:CommandBehavior -> DataTable

参数

dataTable
类型： System.Data DataTable
要用数据源中的架构填充的 DataTable。
schemaType
类型： System.Data SchemaType
SchemaType 值之一。
command
类型： System.Data IDbCommand
用于从数据源中检索行的 SQL SELECT 语句。
behavior
类型： System.Data CommandBehavior
CommandBehavior 值之一。

返回值

类型： System.Data DataTable
包含从数据源返回的架构信息的 DataTable 对象。

FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。

FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性： FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性：

  • AllowDBNull

  • AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。 AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。

  • MaxLength

  • ReadOnly

  • Unique

FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性：

  • 如果 SelectCommand 返回一个或多个主键列，则它们被用作 DataTable 的主键列。

  • 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。

  • 如果既返回了主键列又返回了唯一列，则主键列用作 DataTable 的主键列。

请注意，主键和唯一约束按照上述规则添加到 ConstraintCollection 中，但不添加其他约束类型。

如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。

如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

FillSchema 不返回任何行。使用 Fill 方法将行添加到 DataTable 中。 FillSchema 不返回任何行。使用 Fill 方法将行添加到 DataTable 中。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。

对实现者的说明

FillSchema 方法的此实现是受保护的，供 .NET Framework 数据提供程序使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
FillSchema 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.FillSchema 方法 (DataSet, SchemaType, IDbCommand, String, CommandBehavior)

DbDataAdapter
.
.
::
.
FillSchema 方法 (DataSet, SchemaType, IDbCommand, String, CommandBehavior)
DbDataAdapter 类

将 DataTable 添加到指定的 DataSet 中，并根据指定的 SchemaType 配置架构以匹配数据源中的架构。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function FillSchema ( _
    dataSet As DataSet, _
    schemaType As SchemaType, _
    command As IDbCommand, _
    srcTable As String, _
    behavior As CommandBehavior _
) As DataTable()
protected virtual DataTable[] FillSchema(
    DataSet dataSet,
    SchemaType schemaType,
    IDbCommand command,
    string srcTable,
    CommandBehavior behavior
)
protected:
virtual array<DataTable^>^ FillSchema(
    DataSet^ dataSet,
    SchemaType schemaType,
    IDbCommand^ command,
    String^ srcTable,
    CommandBehavior behavior
)
abstract FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType *
        command:IDbCommand *
        srcTable:string *
        behavior:CommandBehavior -> DataTable[]
override FillSchema :
        dataSet:DataSet *
        schemaType:SchemaType *
        command:IDbCommand *
        srcTable:string *
        behavior:CommandBehavior -> DataTable[]

参数

dataSet
类型： System.Data DataSet
要用数据源中的架构填充的 DataSet。
schemaType
类型： System.Data SchemaType
SchemaType 值之一。
command
类型： System.Data IDbCommand
用于从数据源中检索行的 SQL SELECT 语句。
srcTable
类型： System String
用于表映射的源表的名称。
behavior
类型： System.Data CommandBehavior
CommandBehavior 值之一。

返回值

类型：
array<
System.Data DataTable
>
[]
()
[]

DataTable 对象的数组，这些对象包含从数据源返回的架构信息。

FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。 FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效，但不需要将其打开。如果调用 FillSchema 之前连接已关闭，则将其打开以检索数据，然后再将其关闭。如果调用 FillSchema 之前连接已打开，它将保持打开状态。

FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性： FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后，它向 DataTable 的 DataColumnCollection 中添加列，并且当数据源中存在以下 DataColumn 属性时配置这些属性：

  • AllowDBNull

  • AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。 AutoIncrement.必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。

  • MaxLength

  • ReadOnly

  • Unique

FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性：

  • 如果 SelectCommand 返回一个或多个主键列，则它们被用作 DataTable 的主键列。

  • 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。 如果未返回任何主键列，但返回了唯一列，则当且仅当所有唯一列都不可为空时，唯一列才用作主键。如果任何一列都可以为空，则将 UniqueConstraint 添加到 ConstraintCollection 中，但不设置 PrimaryKey 属性。

  • 如果既返回了主键列又返回了唯一列，则主键列用作 DataTable 的主键列。

请注意，主键和唯一约束按照上述规则添加到 ConstraintCollection 中，但不添加其他约束类型。

如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。 如果对 SQL Server 表中的一列或多列定义了唯一聚集索引，并且对单独的一组列定义了主键约束，则将返回聚集索引中这些列的名称。若要返回主键列的名称，请使用包含指定主键索引名称的 SELECT 语句的查询提示。有关如何指定查询提示的更多信息，请参见 Query Hint (Transact-SQL)（查询提示 (Transact-SQL)）。

如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。 如果 IDataAdapter 在填充 DataTable 时遇到重复列，它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列，它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时，每个结果集都放在一个单独的表中。将整数值追加到指定的表名（例如“Table”、“Table1”、“Table2”等）从而对附加结果集进行命名。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

FillSchema 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，FillSchema 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 FillSchema 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，FillSchema 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。 FillSchema 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。在这种情况下，FillSchema 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，则新建一个。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 dataset.Tables.Add("AAA");
 adapter.FillSchema(dataset, "aaa"); // Fills the schema of "aaa", which already exists in the DataSet.adapter.FillSchema(dataset, "Aaa"); // Adds a new table called "Aaa".

如果调用 FillSchema 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 FillSchema 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 FillSchema 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。

 DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 adapter.FillSchema(dataset, "AAA"); // Fills the schema of table "aaa" because only one similarly named table is in the DataSet.

FillSchema 不返回任何行。使用 Fill 方法将行添加到 DataTable 中。 FillSchema 不返回任何行。使用 Fill 方法将行添加到 DataTable 中。

说明 说明

当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。 当处理返回多项结果的批处理 SQL 语句时，用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息，请使用 MissingSchemaAction 设置为 AddWithKey 的 Fill。

当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。 当使用 FillSchema 时，用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。用户应该注意潜在的副作用，例如对 SET FMTONLY ON 语句的使用产生的干扰。有关更多信息，请参见“SQL Server 联机丛书”。

对实现者的说明

FillSchema 方法的此实现是受保护的，供 .NET Framework 数据提供程序使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
FillSchema 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.GetBatchedParameter 方法

DbDataAdapter
.
.
::
.
GetBatchedParameter 方法
DbDataAdapter 类

从当前批处理中的其中一个命令返回一个 IDataParameter。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function GetBatchedParameter ( _
    commandIdentifier As Integer, _
    parameterIndex As Integer _
) As IDataParameter
protected virtual IDataParameter GetBatchedParameter(
    int commandIdentifier,
    int parameterIndex
)
protected:
virtual IDataParameter^ GetBatchedParameter(
    int commandIdentifier,
    int parameterIndex
)
abstract GetBatchedParameter :
        commandIdentifier:int *
        parameterIndex:int -> IDataParameter
override GetBatchedParameter :
        commandIdentifier:int *
        parameterIndex:int -> IDataParameter

参数

commandIdentifier
类型： System Int32
要从中检索参数的命令的索引。
parameterIndex
类型： System Int32
命令内的参数的索引。

返回值

类型： System.Data IDataParameter
指定的 IDataParameter。
异常 | 条件
NotSupportedException | 该适配器不支持批处理。

在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。 在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。

对实现者的说明

此方法是受保护的，供 .NET Framework 数据提供程序使用。

如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法以允许用户执行批处理。实现使用提供的 commandIdentifier 定位被请求的命令，然后使用提供的 parameterIndex 定位被请求的参数。例如，值为 0 的 commandIdentifier 和值为 0 的 parameterIndex 将返回批处理中的第一个命令的第一个参数。 如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法以允许用户执行批处理。实现使用提供的 commandIdentifier 定位被请求的命令，然后使用提供的 parameterIndex 定位被请求的参数。例如，值为 0 的 commandIdentifier 和值为 0 的 parameterIndex 将返回批处理中的第一个命令的第一个参数。 如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法以允许用户执行批处理。实现使用提供的 commandIdentifier 定位被请求的命令，然后使用提供的 parameterIndex 定位被请求的参数。例如，值为 0 的 commandIdentifier 和值为 0 的 parameterIndex 将返回批处理中的第一个命令的第一个参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.GetBatchedRecordsAffected 方法

DbDataAdapter
.
.
::
.
GetBatchedRecordsAffected 方法
DbDataAdapter 类

返回与较大的批处理更新内的单次更新尝试有关的信息。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function GetBatchedRecordsAffected ( _
    commandIdentifier As Integer, _
    <OutAttribute> ByRef recordsAffected As Integer, _
    <OutAttribute> ByRef error As Exception _
) As Boolean
protected virtual bool GetBatchedRecordsAffected(
    int commandIdentifier,
    out int recordsAffected,
    out Exception error
)
protected:
virtual bool GetBatchedRecordsAffected(
    int commandIdentifier,
    [OutAttribute] int% recordsAffected,
    [OutAttribute] Exception^% error
)
abstract GetBatchedRecordsAffected :
        commandIdentifier:int *
        recordsAffected:int byref *
        error:Exception byref -> bool
override GetBatchedRecordsAffected :
        commandIdentifier:int *
        recordsAffected:int byref *
        error:Exception byref -> bool

参数

commandIdentifier
类型： System Int32
该批次内单个命令的从零开始的列序号。
recordsAffected
类型： System Int32 %
数据存储区中受该批内的指定命令影响的行数。
error
类型： System Exception %
在执行指定命令期间引发的一个 Exception。如果未引发任何异常，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。 在执行指定命令期间引发的一个 Exception。如果未引发任何异常，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。

返回值

类型： System Boolean
与较大的批处理更新内的单次更新尝试有关的信息。

支持批处理更新逻辑的数据提供程序必须重写 DbDataAdapter 类上的一系列虚方法。GetBatchedRecordsAffected 表示这些虚方法之一。DbDataAdapter 类依赖 GetBatchedRecordsAffected 确定某个批内的各次更新尝试是成功还是失败，以便可对每个对应的 DataRow 进行相应的标记。 支持批处理更新逻辑的数据提供程序必须重写 DbDataAdapter 类上的一系列虚方法。GetBatchedRecordsAffected 表示这些虚方法之一。DbDataAdapter 类依赖 GetBatchedRecordsAffected 确定某个批内的各次更新尝试是成功还是失败，以便可对每个对应的 DataRow 进行相应的标记。 支持批处理更新逻辑的数据提供程序必须重写 DbDataAdapter 类上的一系列虚方法。GetBatchedRecordsAffected 表示这些虚方法之一。DbDataAdapter 类依赖 GetBatchedRecordsAffected 确定某个批内的各次更新尝试是成功还是失败，以便可对每个对应的 DataRow 进行相应的标记。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.GetFillParameters 方法

DbDataAdapter
.
.
::
.
GetFillParameters 方法
DbDataAdapter 类

获取当执行 SQL SELECT 语句时由用户设置的参数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function GetFillParameters As IDataParameter()
public override IDataParameter[] GetFillParameters()
public:
virtual array<IDataParameter^>^ GetFillParameters() override
abstract GetFillParameters : unit -> IDataParameter[]
override GetFillParameters : unit -> IDataParameter[]

返回值

类型：
array<
System.Data IDataParameter
>
[]
()
[]

IDataParameter 对象的数组，这些对象包含由用户设置的参数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.ICloneable ..::.Clone 方法

DbDataAdapter
.
.
::
.
ICloneable
.
.
::
.
Clone 方法
DbDataAdapter 类

创建作为当前实例副本的新对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function Clone As Object Implements ICloneable.Clone
Object ICloneable.Clone()
private:
virtual Object^ Clone() sealed = ICloneable::Clone
private abstract Clone : unit -> Object
private override Clone : unit -> Object

返回值

类型： System Object
作为此实例副本的新对象。

实现

此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 ICloneable 接口时使用它。 此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 ICloneable 接口时使用它。

有关更多信息，请参见ICloneable..::.Clone。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.0
在 1.1 中过时（编译器警告）

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.InitializeBatching 方法

DbDataAdapter
.
.
::
.
InitializeBatching 方法
DbDataAdapter 类

初始化 DbDataAdapter 的批处理。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub InitializeBatching
protected virtual void InitializeBatching()
protected:
virtual void InitializeBatching()
abstract InitializeBatching : unit -> unit
override InitializeBatching : unit -> unit
异常 | 条件
NotSupportedException | 该适配器不支持批处理。

在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。 在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。

对实现者的说明

此方法是受保护的，供 .NET Framework 数据提供程序使用。

如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法。此方法使类有机会初始化支持批处理所必需的任何资源。例如，类可以分配一个数据结构，以保存批处理中的命令集。 如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法。此方法使类有机会初始化支持批处理所必需的任何资源。例如，类可以分配一个数据结构，以保存批处理中的命令集。 如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法。此方法使类有机会初始化支持批处理所必需的任何资源。例如，类可以分配一个数据结构，以保存批处理中的命令集。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.MemberwiseClone 方法

DbDataAdapter
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

名称 说明
页首

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.OnRowUpdated 方法

DbDataAdapter
.
.
::
.
OnRowUpdated 方法
DbDataAdapter 类

引发 .NET Framework 数据提供程序的 RowUpdated 事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnRowUpdated ( _
    value As RowUpdatedEventArgs _
)
protected virtual void OnRowUpdated(
    RowUpdatedEventArgs value
)
protected:
virtual void OnRowUpdated(
    RowUpdatedEventArgs^ value
)
abstract OnRowUpdated :
        value:RowUpdatedEventArgs -> unit
override OnRowUpdated :
        value:RowUpdatedEventArgs -> unit

参数

value
类型： System.Data.Common RowUpdatedEventArgs
包含事件数据的 RowUpdatedEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

重写派生类中的 OnRowUpdated 时，确保调用基类的 OnRowUpdated 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.OnRowUpdating 方法

DbDataAdapter
.
.
::
.
OnRowUpdating 方法
DbDataAdapter 类

引发 .NET Framework 数据提供程序的 RowUpdating 事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub OnRowUpdating ( _
    value As RowUpdatingEventArgs _
)
protected virtual void OnRowUpdating(
    RowUpdatingEventArgs value
)
protected:
virtual void OnRowUpdating(
    RowUpdatingEventArgs^ value
)
abstract OnRowUpdating :
        value:RowUpdatingEventArgs -> unit
override OnRowUpdating :
        value:RowUpdatingEventArgs -> unit

参数

value
类型： System.Data.Common RowUpdatingEventArgs
包含事件数据的 RowUpdatingEventArgs。

引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。 引发事件时会通过委托调用事件处理程序。有关概述，请参见 引发事件。

对继承者的说明

当在派生类中重写 OnRowUpdating 时，务必要调用基类的 OnRowUpdating 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.TerminateBatching 方法

DbDataAdapter
.
.
::
.
TerminateBatching 方法
DbDataAdapter 类

结束 DbDataAdapter 的批处理。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub TerminateBatching
protected virtual void TerminateBatching()
protected:
virtual void TerminateBatching()
abstract TerminateBatching : unit -> unit
override TerminateBatching : unit -> unit
异常 | 条件
NotSupportedException | 该适配器不支持批处理。

在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。 在 DbDataAdapter 中，此方法引发 NotSupportedException。从 DbDataAdapter 继承的类重写此方法以提供批处理支持。

对实现者的说明

此方法是受保护的，供 .NET Framework 数据提供程序使用。

如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法。此方法使类有机会释放为支持批处理而分配的任何资源。例如，类可以释放保存批处理中的命令的数据结构。 如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法。此方法使类有机会释放为支持批处理而分配的任何资源。例如，类可以释放保存批处理中的命令的数据结构。 如果从 DbDataAdapter 继承的类支持批处理，该类将重写此方法。此方法使类有机会释放为支持批处理而分配的任何资源。例如，类可以释放保存批处理中的命令的数据结构。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Update 方法

DbDataAdapter
.
.
::
.
Update 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

为 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。

名称 说明
页首

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.Update 方法 ( array<DataRow >[]()[])

DbDataAdapter
.
.
::
.
Update 方法 (
array<
DataRow
>
[]
()
[]
)
DbDataAdapter 类

为指定的 DataRow 对象数组中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Update ( _
    dataRows As DataRow() _
) As Integer
public int Update(
    DataRow[] dataRows
)
public:
int Update(
    array<DataRow^>^ dataRows
)
member Update :
        dataRows:DataRow[] -> int

参数

dataRows
类型：
array<
System.Data DataRow
>
[]
()
[]

用于更新数据源的 DataRow 对象的数组。

返回值

类型： System Int32
DataSet 中成功更新的行数。
异常 | 条件
ArgumentNullException | DataSet 无效。
InvalidOperationException | 源表无效。
SystemException | 不存在要更新的 DataRow。 - 或 - 不存在要更新的 DataTable。 - 或 - 不存在要用作源的 DataSet。
DBConcurrencyException | 尝试执行 INSERT、UPDATE 或 DELETE 语句，但没有记录受到影响。

当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。 当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。

应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。

如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。

Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。

在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。 在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。

当使用 Update 时，执行的顺序如下：

  1. 将 DataRow 中的值移至参数值。

  2. 引发 OnRowUpdating。

  3. 执行命令。

  4. 如果该命令设置为 FirstReturnedRecord，返回的第一项结果将放置在 DataRow 中。

  5. 如果存在输出参数，它们将被放在 DataRow 中。

  6. 引发 OnRowUpdated。

  7. 调用 AcceptChanges。

与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。

SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。 SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。

枚举值 | 采取的操作
MissingMappingAction.Passthrough | 如果不存在任何映射，则使用 DataSet 中的源列名和表名。
MissingMappingAction.Ignore | 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。
MissingMappingAction.Error | 生成 SystemException。

SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。 SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。

.NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。 .NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。

说明 说明

如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。

下面的示例使用派生类 OleDbDataAdapter 来更新数据源。

Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As DataSet = New DataSet
        adapter.Fill(customers)

        ' Code to modify data in DataSet here

        ' Insert new records from DataSet
        Dim rows() As DataRow = customers.Tables(0).Select( _
            Nothing, Nothing, DataViewRowState.Added)
        adapter.Update(rows)

        Return customers
    End Using
End Function

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        //Insert new records from DataSet
        DataRow[] rows = customers.Tables[0].Select(
            null, null, DataViewRowState.Added);
        adapter.Update(rows);

        return customers;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Update 重载
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Update 方法 (DataSet)

DbDataAdapter
.
.
::
.
Update 方法 (DataSet)
DbDataAdapter 类

为指定 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function Update ( _
    dataSet As DataSet _
) As Integer
public override int Update(
    DataSet dataSet
)
public:
virtual int Update(
    DataSet^ dataSet
) override
abstract Update :
        dataSet:DataSet -> int
override Update :
        dataSet:DataSet -> int

参数

dataSet
类型： System.Data DataSet
用于更新数据源的 DataSet。

返回值

类型： System Int32
DataSet 中成功更新的行数。

实现

异常 | 条件
InvalidOperationException | 源表无效。
DBConcurrencyException | 尝试执行 INSERT、UPDATE 或 DELETE 语句，但没有记录受到影响。

当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。 当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。

应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。

如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。

Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。

在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。 在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。

当使用 Update 时，执行的顺序如下：

  1. 将 DataRow 中的值移至参数值。

  2. 引发 OnRowUpdating。

  3. 执行命令。

  4. 如果该命令设置为 FirstReturnedRecord，返回的第一项结果将放置在 DataRow 中。

  5. 如果存在输出参数，它们将被放在 DataRow 中。

  6. 引发 OnRowUpdated。

  7. 调用 AcceptChanges。

与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。

SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。 SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。

枚举值 | 采取的操作
MissingMappingAction.Passthrough | 如果不存在任何映射，则使用 DataSet 中的源列名和表名。
MissingMappingAction.Ignore | 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。
MissingMappingAction.Error | 生成 SystemException。

SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。 SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。

.NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。 .NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。

说明 说明

如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。

下面的示例使用派生类 OleDbDataAdapter 来更新数据源。

Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As DataSet = New DataSet
        adapter.Fill(customers)

        ' Code to modify data in DataSet here

        adapter.Update(customers)

        Return customers
    End Using
End Function

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        adapter.Update(customers);

        return customers;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Update 重载
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Update 方法 (DataTable)

DbDataAdapter
.
.
::
.
Update 方法 (DataTable)
DbDataAdapter 类

为指定 DataTable 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Update ( _
    dataTable As DataTable _
) As Integer
public int Update(
    DataTable dataTable
)
public:
int Update(
    DataTable^ dataTable
)
member Update :
        dataTable:DataTable -> int

参数

dataTable
类型： System.Data DataTable
用于更新数据源的 DataTable。

返回值

类型： System Int32
DataTable 中成功更新的行数。
异常 | 条件
ArgumentNullException | DataSet 无效。
InvalidOperationException | 源表无效。
SystemException | 不存在要更新的 DataRow。 - 或 - 不存在要更新的 DataTable。 - 或 - 不存在要用作源的 DataSet。
DBConcurrencyException | 尝试执行 INSERT、UPDATE 或 DELETE 语句，但没有记录受到影响。

当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。 当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。

应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。

如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。

Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。

在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。 在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。

当使用 Update 时，执行的顺序如下：

  1. 将 DataRow 中的值移至参数值。

  2. 引发 OnRowUpdating。

  3. 执行命令。

  4. 如果该命令设置为 FirstReturnedRecord，返回的第一项结果将放置在 DataRow 中。

  5. 如果存在输出参数，它们将被放在 DataRow 中。

  6. 引发 OnRowUpdated。

  7. 调用 AcceptChanges。

与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。

SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。 SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。

枚举值 | 采取的操作
MissingMappingAction.Passthrough | 如果不存在任何映射，则使用 DataSet 中的源列名和表名。
MissingMappingAction.Ignore | 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。
MissingMappingAction.Error | 生成 SystemException。

SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。 SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。

.NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。 .NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。

说明 说明

如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。

下面的示例使用派生类 OleDbDataAdapter 来更新数据源。

Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As DataSet = New DataSet
        adapter.Fill(customers)

        ' Code to modify data in DataSet here

        adapter.Update(customers)
        Return customers
    End Using
End Function

        public DataSet CreateCmdsAndUpdate(string connectionString,
            string queryString)
        {
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                OleDbDataAdapter adapter = new OleDbDataAdapter();
                adapter.SelectCommand = new OleDbCommand(queryString, connection);
                OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

                connection.Open();

                DataSet customers = new DataSet();
                adapter.Fill(customers);

                //code to modify data in dataset here

                adapter.Update(customers);

                return customers;
            }
        }

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Update 重载
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Update 方法 ( array<DataRow >[]()[], DataTableMapping)

DbDataAdapter
.
.
::
.
Update 方法 (
array<
DataRow
>
[]
()
[]
, DataTableMapping)
DbDataAdapter 类

为指定的 DataRow 对象数组中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function Update ( _
    dataRows As DataRow(), _
    tableMapping As DataTableMapping _
) As Integer
protected virtual int Update(
    DataRow[] dataRows,
    DataTableMapping tableMapping
)
protected:
virtual int Update(
    array<DataRow^>^ dataRows,
    DataTableMapping^ tableMapping
)
abstract Update :
        dataRows:DataRow[] *
        tableMapping:DataTableMapping -> int
override Update :
        dataRows:DataRow[] *
        tableMapping:DataTableMapping -> int

参数

dataRows
类型：
array<
System.Data DataRow
>
[]
()
[]

用于更新数据源的 DataRow 对象的数组。
tableMapping
类型： System.Data.Common DataTableMapping
要使用的 TableMappings 集合。

返回值

类型： System Int32
DataSet 中成功更新的行数。
异常 | 条件
ArgumentNullException | DataSet 无效。
InvalidOperationException | 源表无效。
SystemException | 不存在要更新的 DataRow。 - 或 - 不存在要更新的 DataTable。 - 或 - 不存在要用作源的 DataSet。
DBConcurrencyException | 尝试执行 INSERT、UPDATE 或 DELETE 语句，但没有记录受到影响。

当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。 当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。

应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。

如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。

Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。

在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。 在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。

当使用 Update 时，执行的顺序如下：

  1. 将 DataRow 中的值移至参数值。

  2. 引发 OnRowUpdating。

  3. 执行命令。

  4. 如果该命令设置为 FirstReturnedRecord，返回的第一项结果将放置在 DataRow 中。

  5. 如果存在输出参数，它们将被放在 DataRow 中。

  6. 引发 OnRowUpdated。

  7. 调用 AcceptChanges。

与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。

SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。 SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。

枚举值 | 采取的操作
MissingMappingAction.Passthrough | 如果不存在任何映射，则使用 DataSet 中的源列名和表名。
MissingMappingAction.Ignore | 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。
MissingMappingAction.Error | 生成 SystemException。

SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。 SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。

.NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。 .NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。

说明 说明

如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Update 重载
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter ..::.Update 方法 (DataSet, String)

DbDataAdapter
.
.
::
.
Update 方法 (DataSet, String)
DbDataAdapter 类

为具有指定 DataTable 名称的 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function Update ( _
    dataSet As DataSet, _
    srcTable As String _
) As Integer
public int Update(
    DataSet dataSet,
    string srcTable
)
public:
int Update(
    DataSet^ dataSet,
    String^ srcTable
)
member Update :
        dataSet:DataSet *
        srcTable:string -> int

参数

dataSet
类型： System.Data DataSet
用于更新数据源的 DataSet。
srcTable
类型： System String
用于表映射的源表的名称。

返回值

类型： System Int32
DataSet 中成功更新的行数。
异常 | 条件
ArgumentNullException | DataSet 无效。
InvalidOperationException | 源表无效。
DBConcurrencyException | 尝试执行 INSERT、UPDATE 或 DELETE 语句，但没有记录受到影响。

当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。 当应用程序调用 Update 方法时，DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性，并迭代执行所需的 INSERT、UPDATE 或 DELETE 语句。例如，由于 DataTable 中行的排序，Update 可能先执行一个 DELETE 语句，接着执行一个 INSERT 语句，然后再执行另一个 DELETE 语句。

应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。 应注意，这些语句不是作为批处理进程执行的；每一行都是单独更新的。在必须控制语句类型顺序的情况下（例如，INSERT 在 UPDATE 之前），应用程序可以调用 GetChanges 方法。有关更多信息，请参见使用 DataAdapter 更新数据源 (ADO.NET)。

如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。 如果未指定 INSERT、UPDATE 或 DELETE 语句，Update 方法会生成异常。但是，如果设置 .NET Framework 数据提供程序的 SelectCommand 属性，则可以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自动生成 SQL 语句。然后，CommandBuilder 将生成任何其他未设置的 SQL 语句。此生成逻辑要求 DataSet 中存在键列信息。有关更多信息，请参见使用 CommandBuilder 生成命令 (ADO.NET)。

Update 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。当 DataSet 中有多个表具有相同的名称但大小写不同时，Update 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，就会生成一个异常。下面的 C# 代码阐释该行为。 Update 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。当 DataSet 中有多个表具有相同的名称但大小写不同时，Update 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，就会生成一个异常。下面的 C# 代码阐释该行为。 Update 方法支持以下情况：DataSet 包含多个 DataTable 对象，而这些对象的名称只有大小写不同。当 DataSet 中有多个表具有相同的名称但大小写不同时，Update 执行区分大小写的比较以查找相应的表，如果不存在完全匹配的表，就会生成一个异常。下面的 C# 代码阐释该行为。

DataSet ds = new DataSet();
 ds.Tables.Add("aaa");
 ds.Tables.Add("AAA");
 adapter.Update(ds, "aaa"); // Updates "aaa", which already exists in the DataSet.adapter.Update(ds, "AAA"); // Updates "AAA", which already exists in the DataSet.adapter.Update(ds, "Aaa"); // Results in an exception.

如果调用 Update 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Update 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。 如果调用 Update 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable，则更新该 DataTable。在这种情况下，比较不区分大小写。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
    adapter.Update(dataset, "AAA"); // Updates table "aaa" because only one similarly named table is in the DataSet.

Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。 Update 方法在执行更新之前从第一个映射列出的表中检索行。然后，Update 使用 UpdatedRowSource 属性的值刷新该行。忽略返回的任何其他行。

在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。 在将任何数据加载回 DataSet 之后，将引发 OnRowUpdated 事件，从而允许用户检查经协调的 DataSet 行以及该命令返回的任何输出参数。在对一行成功进行更新之后，将接受对该行的更改。

当使用 Update 时，执行的顺序如下：

  1. 将 DataRow 中的值移至参数值。

  2. 引发 OnRowUpdating。

  3. 执行命令。

  4. 如果该命令设置为 FirstReturnedRecord，返回的第一项结果将放置在 DataRow 中。

  5. 如果存在输出参数，它们将被放在 DataRow 中。

  6. 引发 OnRowUpdated。

  7. 调用 AcceptChanges。

与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。 与 DbDataAdapter 关联的每个命令通常都有一个与其关联的参数集合。通过 .Net Framework 数据提供程序的 Parameter 类的 SourceColumn 和 SourceVersion 属性，参数被映射到当前行。SourceColumn 引用 DataTable 列，后者由 DbDataAdapter 引用，为当前行获取参数值。

SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。 SourceColumn 在应用任何表映射之前将引用未映射的列名。如果 SourceColumn 引用一个不存在的列，则采取的操作取决于以下 MissingMappingAction 值之一。

枚举值 | 采取的操作
MissingMappingAction.Passthrough | 如果不存在任何映射，则使用 DataSet 中的源列名和表名。
MissingMappingAction.Ignore | 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。 生成 SystemException。当显式设置映射时，缺少输入参数的映射通常是由于出错所致。
MissingMappingAction.Error | 生成 SystemException。

SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。 SourceColumn 属性还用于将输出或输入/输出参数的值映射回 DataSet。如果它引用一个不存在的列，则会生成异常。

.NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。 .NET Framework 数据提供程序的 Parameter 类的 SourceVersion 属性确定是使用列值的 Original、Current 还是 Proposed 版本。该功能通常用于在 UPDATE 语句的 WHERE 子句中包含初始值，以检查开放式并发冲突。

说明 说明

如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。 如果在更新行时出错，则会引发异常并停止执行更新。若要在遇到错误时继续更新操作而不生成异常，请在调用 Update 之前将 ContinueUpdateOnError 属性设置为 true。您可以在 DataAdapter 的 RowUpdated 事件中逐行对错误作出响应。若要在 RowUpdated 事件中继续更新操作而不生成异常，请将 RowUpdatedEventArgs 的 Status 属性设置为 Continue。

下面的示例使用派生类 OleDbDataAdapter 来更新数据源。

Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String, _
    ByVal tableName As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As DataSet = New DataSet
        adapter.Fill(customers)

        ' Code to modify data in DataSet here

        adapter.Update(customers, tableName)

        Return customers
    End Using
End Function

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString, string tableName)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        adapter.Update(customers, tableName);

        return customers;
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
Update 重载
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter 属性

DbDataAdapter 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

DbDataAdapter 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbDataAdapter 类
System.Data.Common 命名空间


DbDataAdapter ..::.DeleteCommand 属性

DbDataAdapter
.
.
::
.
DeleteCommand 属性
DbDataAdapter 类

获取或设置用于从数据集中删除记录的命令。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property DeleteCommand As DbCommand
    Get
    Set
[BrowsableAttribute(false)]
public DbCommand DeleteCommand { get; set; }
[BrowsableAttribute(false)]
public:
property DbCommand^ DeleteCommand {
    DbCommand^ get ();
    void set (DbCommand^ value);
}
[<BrowsableAttribute(false)>]
member DeleteCommand : DbCommand with get, set

属性值

类型： System.Data.Common DbCommand
Update 过程中使用的 IDbCommand，它针对数据集中已删除的行删除数据源中的记录。

在 Update 过程中，如果未设置此属性并且 DataSet 中存在主键信息，将自动生成 DeleteCommand。

下面的示例创建派生类 OleDbDataAdapter 并设置它的一些属性。

Public Shared Function CreateCustomerAdapter( _
    connection As OleDbConnection) As OleDbDataAdapter

    Dim dataAdapter As OleDbDataAdapter = New OleDbDataAdapter()
    Dim command As OleDbCommand
    Dim parameter As OleDbParameter

    ' Create the SelectCommand.
    command = New OleDbCommand("SELECT CustomerID FROM Customers " & _
        "WHERE Country = ? AND City = ?", connection)

    command.Parameters.Add("Country", OleDbType.VarChar, 15)
    command.Parameters.Add("City", OleDbType.VarChar, 15)

    dataAdapter.SelectCommand = command

    ' Create the DeleteCommand.
    command = New OleDbCommand( _
        "DELETE * FROM Customers WHERE CustomerID = ?", _
        connection)

    parameter = command.Parameters.Add( _
        "CustomerID", OleDbType.Char, 5, "CustomerID")
    parameter.SourceVersion = DataRowVersion.Original

    dataAdapter.DeleteCommand = command

    Return dataAdapter
End Function

public static OleDbDataAdapter CreateCustomerAdapter(
    OleDbConnection connection)
{
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
    OleDbCommand command;
    OleDbParameter parameter;

    // Create the SelectCommand.
    command = new OleDbCommand("SELECT CustomerID FROM Customers " +
        "WHERE Country = ? AND City = ?", connection);

    command.Parameters.Add("Country", OleDbType.VarChar, 15);
    command.Parameters.Add("City", OleDbType.VarChar, 15);

    dataAdapter.SelectCommand = command;

    // Create the DeleteCommand.
    command = new OleDbCommand(
        "DELETE * FROM Customers WHERE CustomerID = ?",
        connection);

    parameter = command.Parameters.Add(
        "CustomerID", OleDbType.Char, 5, "CustomerID");
    parameter.SourceVersion = DataRowVersion.Original;

    dataAdapter.DeleteCommand = command;

    return dataAdapter;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter ..::.FillCommandBehavior 属性

DbDataAdapter
.
.
::
.
FillCommandBehavior 属性
DbDataAdapter 类

获取或设置用于填充数据适配器的命令的行为。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Friend Property FillCommandBehavior As CommandBehavior
    Get
    Set
protected internal CommandBehavior FillCommandBehavior { get; set; }
protected public:
property CommandBehavior FillCommandBehavior {
    CommandBehavior get ();
    void set (CommandBehavior value);
}
member FillCommandBehavior : CommandBehavior with get, set

属性值

类型： System.Data CommandBehavior
用于填充数据适配器的命令的 CommandBehavior。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataAdapter ..::.IDbDataAdapter ..::.DeleteCommand 属性

DbDataAdapter
.
.
::
.
IDbDataAdapter
.
.
::
.
DeleteCommand 属性
DbDataAdapter 类

获取或设置用于从数据集中删除记录的 SQL 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property DeleteCommand As IDbCommand
    Implements IDbDataAdapter.DeleteCommand
    Get
    Set
IDbCommand IDbDataAdapter.DeleteCommand { get; set; }
private:
virtual property IDbCommand^ DeleteCommand {
    IDbCommand^ get () sealed = IDbDataAdapter::DeleteCommand::get;
    void set (IDbCommand^ value) sealed = IDbDataAdapter::DeleteCommand::set;
}
private abstract DeleteCommand : IDbCommand with get, set
private override DeleteCommand : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
Update 过程中使用的 IDbCommand，它针对数据集中已删除的行删除数据源中的记录。

实现

此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 IDbDataAdapter 接口时使用它。 此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 IDbDataAdapter 接口时使用它。

有关更多信息，请参见DeleteCommand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.IDbDataAdapter ..::.InsertCommand 属性

DbDataAdapter
.
.
::
.
IDbDataAdapter
.
.
::
.
InsertCommand 属性
DbDataAdapter 类

获取或设置用于将新记录插入数据源中的 SQL 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property InsertCommand As IDbCommand
    Implements IDbDataAdapter.InsertCommand
    Get
    Set
IDbCommand IDbDataAdapter.InsertCommand { get; set; }
private:
virtual property IDbCommand^ InsertCommand {
    IDbCommand^ get () sealed = IDbDataAdapter::InsertCommand::get;
    void set (IDbCommand^ value) sealed = IDbDataAdapter::InsertCommand::set;
}
private abstract InsertCommand : IDbCommand with get, set
private override InsertCommand : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
在 Update 过程中使用的 IDbCommand，它针对数据集中的新行将记录插入到数据源。

实现

此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 IDbDataAdapter 接口时使用它。 此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 IDbDataAdapter 接口时使用它。

有关更多信息，请参见InsertCommand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.IDbDataAdapter ..::.SelectCommand 属性

DbDataAdapter
.
.
::
.
IDbDataAdapter
.
.
::
.
SelectCommand 属性
DbDataAdapter 类

获取或设置用于在数据源中选择记录的 SQL 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property SelectCommand As IDbCommand
    Implements IDbDataAdapter.SelectCommand
    Get
    Set
IDbCommand IDbDataAdapter.SelectCommand { get; set; }
private:
virtual property IDbCommand^ SelectCommand {
    IDbCommand^ get () sealed = IDbDataAdapter::SelectCommand::get;
    void set (IDbCommand^ value) sealed = IDbDataAdapter::SelectCommand::set;
}
private abstract SelectCommand : IDbCommand with get, set
private override SelectCommand : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
在 Update 过程中使用的 IDbCommand，它从数据源中选择记录以便放入数据集中。

实现

此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 IDbDataAdapter 接口时使用它。 此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 IDbDataAdapter 接口时使用它。

有关更多信息，请参见SelectCommand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.IDbDataAdapter ..::.UpdateCommand 属性

DbDataAdapter
.
.
::
.
IDbDataAdapter
.
.
::
.
UpdateCommand 属性
DbDataAdapter 类

获取或设置用于更新数据源中的记录的 SQL 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property UpdateCommand As IDbCommand
    Implements IDbDataAdapter.UpdateCommand
    Get
    Set
IDbCommand IDbDataAdapter.UpdateCommand { get; set; }
private:
virtual property IDbCommand^ UpdateCommand {
    IDbCommand^ get () sealed = IDbDataAdapter::UpdateCommand::get;
    void set (IDbCommand^ value) sealed = IDbDataAdapter::UpdateCommand::set;
}
private abstract UpdateCommand : IDbCommand with get, set
private override UpdateCommand : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
在 Update 过程中使用的 IDbCommand，它针对数据集中已修改的行更新数据源中的记录。

实现

此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 IDbDataAdapter 接口时使用它。 此成员是显式的接口成员实现。只能在 DbDataAdapter 实例强制转换为 IDbDataAdapter 接口时使用它。

有关更多信息，请参见UpdateCommand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间


DbDataAdapter ..::.InsertCommand 属性

DbDataAdapter
.
.
::
.
InsertCommand 属性
DbDataAdapter 类

获取或设置用于将新记录插入到数据源中的命令。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property InsertCommand As DbCommand
    Get
    Set
[BrowsableAttribute(false)]
public DbCommand InsertCommand { get; set; }
[BrowsableAttribute(false)]
public:
property DbCommand^ InsertCommand {
    DbCommand^ get ();
    void set (DbCommand^ value);
}
[<BrowsableAttribute(false)>]
member InsertCommand : DbCommand with get, set

属性值

类型： System.Data.Common DbCommand
在 Update 过程中使用的 IDbCommand，它针对数据集中的新行将记录插入到数据源中。

在 Update 过程中，如果未设置此属性并且 DataSet 中存在主键信息，将自动生成 InsertCommand。

下面的示例创建派生类 OleDbDataAdapter 并设置它的一些属性。

Public Shared Function CreateCustomerAdapter( _
    connection As OleDbConnection) As OleDbDataAdapter

    Dim adapter As OleDbDataAdapter = New OleDbDataAdapter()
    Dim command As OleDbCommand

    ' Create the SelectCommand.
    command = New OleDbCommand("SELECT CustomerID FROM Customers " & _
        "WHERE Country = ? AND City = ?", connection)

    command.Parameters.Add("Country", OleDbType.VarChar, 15)
    command.Parameters.Add("City", OleDbType.VarChar, 15)

    adapter.SelectCommand = command

    ' Create the InsertCommand.
    command = New OleDbCommand( _
        "INSERT INTO Customers (CustomerID, CompanyName) " & _
        "VALUES (?, ?)", connection)

    command.Parameters.Add( _
        "CustomerID", OleDbType.Char, 5, "CustomerID")
    command.Parameters.Add( _
        "CompanyName", OleDbType.VarChar, 40, "CompanyName")

    adapter.InsertCommand = command
    Return adapter
End Function

public static OleDbDataAdapter CreateCustomerAdapter(
    OleDbConnection connection)
{
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    OleDbCommand command;

    // Create the SelectCommand.
    command = new OleDbCommand("SELECT CustomerID FROM Customers " +
        "WHERE Country = ? AND City = ?", connection);

    command.Parameters.Add("Country", OleDbType.VarChar, 15);
    command.Parameters.Add("City", OleDbType.VarChar, 15);

    adapter.SelectCommand = command;

    // Create the InsertCommand.
    command = new OleDbCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (?, ?)", connection);

    command.Parameters.Add(
        "CustomerID", OleDbType.Char, 5, "CustomerID");
    command.Parameters.Add(
        "CompanyName", OleDbType.VarChar, 40, "CompanyName");

    adapter.InsertCommand = command;
    return adapter;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter ..::.SelectCommand 属性

DbDataAdapter
.
.
::
.
SelectCommand 属性
DbDataAdapter 类

获取或设置用于在数据源中选择记录的命令。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property SelectCommand As DbCommand
    Get
    Set
[BrowsableAttribute(false)]
public DbCommand SelectCommand { get; set; }
[BrowsableAttribute(false)]
public:
property DbCommand^ SelectCommand {
    DbCommand^ get ();
    void set (DbCommand^ value);
}
[<BrowsableAttribute(false)>]
member SelectCommand : DbCommand with get, set

属性值

类型： System.Data.Common DbCommand
在 Update 过程中使用的 IDbCommand，它从数据源中选择记录以便放入数据集中。

下面的示例创建派生类 OleDbDataAdapter 并设置它的一些属性。

Public Shared Function CreateCustomerAdapter( _
    connection As OleDbConnection) As OleDbDataAdapter

    Dim adapter As OleDbDataAdapter = New OleDbDataAdapter()
    Dim command As OleDbCommand

    ' Create the SelectCommand.
    command = New OleDbCommand("SELECT * FROM Customers " & _
        "WHERE Country = ? AND City = ?", connection)

    command.Parameters.Add("Country", OleDbType.VarChar, 15)
    command.Parameters.Add("City", OleDbType.VarChar, 15)

    adapter.SelectCommand = command

    ' Create the InsertCommand.
    command = New OleDbCommand( _
        "INSERT INTO Customers (CustomerID, CompanyName) " & _
        "VALUES (?, ?)", connection)

    command.Parameters.Add( _
        "CustomerID", OleDbType.Char, 5, "CustomerID")
    command.Parameters.Add( _
        "CompanyName", OleDbType.VarChar, 40, "CompanyName")

    adapter.InsertCommand = command
    Return adapter
End Function

public static OleDbDataAdapter CreateCustomerAdapter(
    OleDbConnection connection)
{
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    OleDbCommand command;

    // Create the SelectCommand.
    command = new OleDbCommand("SELECT * FROM Customers " +
        "WHERE Country = ? AND City = ?", connection);

    command.Parameters.Add("Country", OleDbType.VarChar, 15);
    command.Parameters.Add("City", OleDbType.VarChar, 15);

    adapter.SelectCommand = command;

    // Create the InsertCommand.
    command = new OleDbCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (?, ?)", connection);

    command.Parameters.Add(
        "CustomerID", OleDbType.Char, 5, "CustomerID");
    command.Parameters.Add(
        "CompanyName", OleDbType.VarChar, 40, "CompanyName");

    adapter.InsertCommand = command;
    return adapter;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter ..::.UpdateBatchSize 属性

DbDataAdapter
.
.
::
.
UpdateBatchSize 属性
DbDataAdapter 类

获取或设置一个值，该值启用或禁用批处理支持，并且指定可在一次批处理中执行的命令的数量。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Property UpdateBatchSize As Integer Get Set
public virtual int UpdateBatchSize { get; set; }
public:
virtual property int UpdateBatchSize {
    int get ();
    void set (int value);
}
abstract UpdateBatchSize : int with get, set override UpdateBatchSize : int with get, set
属性值
类型： System Int32
每个批处理要处理的行数。
值为
效果
0
批大小没有限制。
1
禁用批量更新。
> 1
更改是使用
UpdateBatchSize
操作的批处理一次性发送的。
将此属性设置为 1 以外的值时，所有与
DbDataAdapter
关联的命令都必须将它们的
UpdatedRowSource
属性设置为
None
或
OutputParameters
。
否则，将引发异常。
将此属性设置为 1 以外的值时，所有与
DbDataAdapter
关联的命令都必须将它们的
UpdatedRowSource
属性设置为
None
或
OutputParameters
。
否则，将引发异常。

使用 UpdateBatchSize 属性用来自 DataSet 的更改更新数据源。如果数据提供程序支持批处理，将可以提高应用程序的性能，这是因为到服务器的往返过程的数目减少了。在 ADO.NET 2.0 中，对用于 SQL Server (SqlClient) 和 Oracle (OracleClient) 的 .NET 数据提供程序支持此属性。 使用 UpdateBatchSize 属性用来自 DataSet 的更改更新数据源。如果数据提供程序支持批处理，将可以提高应用程序的性能，这是因为到服务器的往返过程的数目减少了。在 ADO.NET 2.0 中，对用于 SQL Server (SqlClient) 和 Oracle (OracleClient) 的 .NET 数据提供程序支持此属性。 使用 UpdateBatchSize 属性用来自 DataSet 的更改更新数据源。如果数据提供程序支持批处理，将可以提高应用程序的性能，这是因为到服务器的往返过程的数目减少了。在 ADO.NET 2.0 中，对用于 SQL Server (SqlClient) 和 Oracle (OracleClient) 的 .NET 数据提供程序支持此属性。

执行极大规模的批处理会降低性能。因此，在实现应用程序前应进行测试以得到最佳的批大小。 执行极大规模的批处理会降低性能。因此，在实现应用程序前应进行测试以得到最佳的批大小。

如果值被设置为小于零的数字，将引发 ArgumentOutOfRangeException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter ..::.UpdateCommand 属性

DbDataAdapter
.
.
::
.
UpdateCommand 属性
DbDataAdapter 类

获取或设置用于更新数据源中的记录的命令。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public Property UpdateCommand As DbCommand
    Get
    Set
[BrowsableAttribute(false)]
public DbCommand UpdateCommand { get; set; }
[BrowsableAttribute(false)]
public:
property DbCommand^ UpdateCommand {
    DbCommand^ get ();
    void set (DbCommand^ value);
}
[<BrowsableAttribute(false)>]
member UpdateCommand : DbCommand with get, set

属性值

类型： System.Data.Common DbCommand
在 Update 过程中使用的 IDbCommand，它针对数据集中已修改的行更新数据源中的记录。

在 Update 过程中，如果未设置此属性并且 DataSet 中存在主键信息，将自动生成 UpdateCommand。

下面的示例创建派生类 OleDbDataAdapter 并设置它的一些属性。

Public Shared Function CreateCustomerAdapter(conn As OleDbConnection) As OleDbDataAdapter

  Dim da As OleDbDataAdapter = New OleDbDataAdapter()
  Dim cmd As OleDbCommand
  Dim parm As OleDbParameter

  ' Create the SelectCommand.

  cmd = New OleDbCommand("SELECT * FROM Customers " & _
                       "WHERE Country = @Country AND City = @City", conn)

  cmd.Parameters.Add("@Country", OleDbType.VarChar, 15)
  cmd.Parameters.Add("@City", OleDbType.VarChar, 15)

  da.SelectCommand = cmd

  ' Create the UpdateCommand.

  cmd = New OleDbCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " & _
                       "WHERE CustomerID = @oldCustomerID", conn)

  cmd.Parameters.Add("@CustomerID", OleDbType.Char, 5, "CustomerID")
  cmd.Parameters.Add("@CompanyName", OleDbType.VarChar, 40, "CompanyName")

  parm = cmd.Parameters.Add("@oldCustomerID", OleDbType.Char, 5, "CustomerID")
  parm.SourceVersion = DataRowVersion.Original

  da.UpdateCommand = cmd

  Return da
End Function

public static OleDbDataAdapter CreateCustomerAdapter(OleDbConnection conn)
{
  OleDbDataAdapter da = new OleDbDataAdapter();
  OleDbCommand cmd;
  OleDbParameter parm;

  // Create the SelectCommand.

  cmd = new OleDbCommand("SELECT * FROM Customers " +
                       "WHERE Country = @Country AND City = @City", conn);

  cmd.Parameters.Add("@Country", OleDbType.VarChar, 15);
  cmd.Parameters.Add("@City", OleDbType.VarChar, 15);

  da.SelectCommand = cmd;

  // Create the UpdateCommand.

  cmd = new OleDbCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
                       "WHERE CustomerID = @oldCustomerID", conn);

  cmd.Parameters.Add("@CustomerID", OleDbType.Char, 5, "CustomerID");
  cmd.Parameters.Add("@CompanyName", OleDbType.VarChar, 40, "CompanyName");

  parm = cmd.Parameters.Add("@oldCustomerID", OleDbType.Char, 5, "CustomerID");
  parm.SourceVersion = DataRowVersion.Original;

  da.UpdateCommand = cmd;

  return da;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataAdapter 类
DbDataAdapter 成员
System.Data.Common 命名空间

其他资源

在 ADO.NET 中检索和修改数据
DbProviderFactory (ADO.NET)


DbDataAdapter 事件

DbDataAdapter 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataAdapter 类

DbDataAdapter 类型公开以下成员。

名称 说明
页首

参考

DbDataAdapter 类
System.Data.Common 命名空间


DBDataPermission 类

DBDataPermission 类
成员

启用一个 .NET Framework 数据提供程序，以帮助确保用户具有足够的安全级别来访问数据。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, ControlEvidence := True,  _
    ControlPolicy := True)> _
Public MustInherit Class DBDataPermission _
    Inherits CodeAccessPermission _
    Implements IUnrestrictedPermission
[SerializableAttribute]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, ControlEvidence = true,
    ControlPolicy = true)]
public abstract class DBDataPermission : CodeAccessPermission,
    IUnrestrictedPermission
[SerializableAttribute]
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, ControlEvidence = true,
    ControlPolicy = true)]
public ref class DBDataPermission abstract : public CodeAccessPermission,
    IUnrestrictedPermission
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, ControlEvidence = true,
    ControlPolicy = true)>]
type DBDataPermission =
    class
        inherit CodeAccessPermission
        interface IUnrestrictedPermission
    end

System.Data.Common System.Data.Common..::.DBDataPermissionDBDataPermission

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission 成员

DBDataPermission 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBDataPermission 类

启用一个 .NET Framework 数据提供程序，以帮助确保用户具有足够的安全级别来访问数据。

DBDataPermission 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DBDataPermission 类
System.Data.Common 命名空间


DBDataPermission 构造函数

DBDataPermission 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBDataPermission 类

初始化 DBDataPermission 类的新实例。

名称 说明
页首

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission 构造函数

DBDataPermission 构造函数
DBDataPermission 类

注意：此 API 现在已过时。

初始化 DBDataPermission 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<ObsoleteAttribute("DBDataPermission() has been deprecated.  Use the DBDataPermission(PermissionState.None) constructor.  http://go.microsoft.com/fwlink/?linkid=14202",  _
    True)> _
Protected Sub New
[ObsoleteAttribute("DBDataPermission() has been deprecated.  Use the DBDataPermission(PermissionState.None) constructor.  http://go.microsoft.com/fwlink/?linkid=14202",
    true)]
protected DBDataPermission()
[ObsoleteAttribute(L"DBDataPermission() has been deprecated.  Use the DBDataPermission(PermissionState.None) constructor.  http://go.microsoft.com/fwlink/?linkid=14202",
    true)]
protected:
DBDataPermission()
[<ObsoleteAttribute("DBDataPermission() has been deprecated.  Use the DBDataPermission(PermissionState.None) constructor.  http://go.microsoft.com/fwlink/?linkid=14202",
    true)>]
new : unit -> DBDataPermission

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 2.0 SP2 和后续版本中过时（不编译）

.NET Framework Client Profile

在 4 和后续版本中过时（不编译）

参考

DBDataPermission 类
DBDataPermission 成员
DBDataPermission 重载
System.Data.Common 命名空间


DBDataPermission 构造函数 (DBDataPermission)

DBDataPermission 构造函数 (DBDataPermission)
DBDataPermission 类

使用现有的 DBDataPermission 初始化 DBDataPermission 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    permission As DBDataPermission _
)
protected DBDataPermission(
    DBDataPermission permission
)
protected:
DBDataPermission(
    DBDataPermission^ permission
)
new :
        permission:DBDataPermission -> DBDataPermission

参数

permission
类型： System.Data.Common DBDataPermission
用于创建新 DBDataPermission 的现有 DBDataPermission。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
DBDataPermission 重载
System.Data.Common 命名空间


DBDataPermission 构造函数 (DBDataPermissionAttribute)

DBDataPermission 构造函数 (DBDataPermissionAttribute)
DBDataPermission 类

用指定的 DBDataPermissionAttribute 初始化 DBDataPermission 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    permissionAttribute As DBDataPermissionAttribute _
)
protected DBDataPermission(
    DBDataPermissionAttribute permissionAttribute
)
protected:
DBDataPermission(
    DBDataPermissionAttribute^ permissionAttribute
)
new :
        permissionAttribute:DBDataPermissionAttribute -> DBDataPermission

参数

permissionAttribute
类型： System.Data.Common DBDataPermissionAttribute
与自定义安全特性相关的安全操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
DBDataPermission 重载
System.Data.Common 命名空间


DBDataPermission 构造函数 (PermissionState)

DBDataPermission 构造函数 (PermissionState)
DBDataPermission 类

使用指定的 PermissionState 值初始化 DBDataPermission 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    state As PermissionState _
)
protected DBDataPermission(
    PermissionState state
)
protected:
DBDataPermission(
    PermissionState state
)
new :
        state:PermissionState -> DBDataPermission

参数

state
类型： System.Security.Permissions PermissionState
PermissionState 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
DBDataPermission 重载
System.Data.Common 命名空间


DBDataPermission 构造函数 (PermissionState, Boolean)

DBDataPermission 构造函数 (PermissionState, Boolean)
DBDataPermission 类

注意：此 API 现在已过时。

用指定的 PermissionState 值和指示是否允许空白密码的值初始化 DBDataPermission 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<ObsoleteAttribute("DBDataPermission(PermissionState state,Boolean allowBlankPassword) has been deprecated.  Use the DBDataPermission(PermissionState.None) constructor.  http://go.microsoft.com/fwlink/?linkid=14202",  _
    True)> _
Protected Sub New ( _
    state As PermissionState, _
    allowBlankPassword As Boolean _
)
[ObsoleteAttribute("DBDataPermission(PermissionState state,Boolean allowBlankPassword) has been deprecated.  Use the DBDataPermission(PermissionState.None) constructor.  http://go.microsoft.com/fwlink/?linkid=14202",
    true)]
protected DBDataPermission(
    PermissionState state,
    bool allowBlankPassword
)
[ObsoleteAttribute(L"DBDataPermission(PermissionState state,Boolean allowBlankPassword) has been deprecated.  Use the DBDataPermission(PermissionState.None) constructor.  http://go.microsoft.com/fwlink/?linkid=14202",
    true)]
protected:
DBDataPermission(
    PermissionState state,
    bool allowBlankPassword
)
[<ObsoleteAttribute("DBDataPermission(PermissionState state,Boolean allowBlankPassword) has been deprecated.  Use the DBDataPermission(PermissionState.None) constructor.  http://go.microsoft.com/fwlink/?linkid=14202",
    true)>]
new :
        state:PermissionState *
        allowBlankPassword:bool -> DBDataPermission

参数

state
类型： System.Security.Permissions PermissionState
PermissionState 值之一。
allowBlankPassword
类型： System Boolean
指示是否允许空白密码。

PermissionState 枚举优先于 AllowBlankPassword 属性。因此，如果将 AllowBlankPassword 设置为 false，也必须将 PermissionState 设置为 None，以防止用户使用空白密码进行连接。 PermissionState 枚举优先于 AllowBlankPassword 属性。因此，如果将 AllowBlankPassword 设置为 false，也必须将 PermissionState 设置为 None，以防止用户使用空白密码进行连接。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：1.1、1.0
在 2.0 SP2 和后续版本中过时（不编译）

.NET Framework Client Profile

在 4 和后续版本中过时（不编译）

参考

DBDataPermission 类
DBDataPermission 成员
DBDataPermission 重载
System.Data.Common 命名空间


DBDataPermission 方法

DBDataPermission 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBDataPermission 类

DBDataPermission 类型公开以下成员。

名称 说明
页首

参考

DBDataPermission 类
System.Data.Common 命名空间


DBDataPermission ..::.Add 方法

DBDataPermission
.
.
::
.
Add 方法
DBDataPermission 类

将指定连接字符串的访问权限添加到 DBDataPermission 的现有状态。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Sub Add ( _
    connectionString As String, _
    restrictions As String, _
    behavior As KeyRestrictionBehavior _
)
public virtual void Add(
    string connectionString,
    string restrictions,
    KeyRestrictionBehavior behavior
)
public:
virtual void Add(
    String^ connectionString,
    String^ restrictions,
    KeyRestrictionBehavior behavior
)
abstract Add :
        connectionString:string *
        restrictions:string *
        behavior:KeyRestrictionBehavior -> unit
override Add :
        connectionString:string *
        restrictions:string *
        behavior:KeyRestrictionBehavior -> unit

参数

connectionString
类型： System String
允许的连接字符串。
restrictions
类型： System String
标识允许使用或禁用的连接字符串参数的字符串。
behavior
类型： System.Data KeyRestrictionBehavior
KeyRestrictionBehavior 属性之一。

该方法在实现以下内容时很有用：

  • .NET Framework 数据提供程序。

  • 必须为数据访问权限断言的 API。

  • 必须修改安全策略的管理工具或安装程序。

  • 当指定了多个规则时，将选择限制性较强的规则。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission ..::.Clear 方法

DBDataPermission
.
.
::
.
Clear 方法
DBDataPermission 类

移除以前使用 Add 方法添加的所有权限。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub Clear
protected void Clear()
protected:
void Clear()
member Clear : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission ..::.Copy 方法

DBDataPermission
.
.
::
.
Copy 方法
DBDataPermission 类

创建并返回与当前权限对象相同的副本。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function Copy As IPermission
public override IPermission Copy()
public:
virtual IPermission^ Copy() override
abstract Copy : unit -> IPermission
override Copy : unit -> IPermission

返回值

类型： System.Security IPermission
当前权限对象的副本。

实现

表示与原始权限对象具有相同的资源访问权限的权限对象副本。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission ..::.CreateInstance 方法

DBDataPermission
.
.
::
.
CreateInstance 方法
DBDataPermission 类

创建 DBDataPermission 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<PermissionSetAttribute(SecurityAction.Demand, Name := "FullTrust")> _
Protected Overridable Function CreateInstance As DBDataPermission
[PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]
protected virtual DBDataPermission CreateInstance()
[PermissionSetAttribute(SecurityAction::Demand, Name = L"FullTrust")]
protected:
virtual DBDataPermission^ CreateInstance()
[<PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")>]
abstract CreateInstance : unit -> DBDataPermission
[<PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")>]
override CreateInstance : unit -> DBDataPermission

返回值

类型： System.Data.Common DBDataPermission
新的 DBDataPermission 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission ..::.FromXml 方法

DBDataPermission
.
.
::
.
FromXml 方法
DBDataPermission 类

用 XML 编码重新构造具有指定状态的安全对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Sub FromXml ( _
    securityElement As SecurityElement _
)
public override void FromXml(
    SecurityElement securityElement
)
public:
virtual void FromXml(
    SecurityElement^ securityElement
) override
abstract FromXml :
        securityElement:SecurityElement -> unit
override FromXml :
        securityElement:SecurityElement -> unit

参数

securityElement
类型： System.Security SecurityElement
用于重新构造安全对象的 XML 编码。

实现

扩展安全对象的自定义代码需要实现 ToXml 和 FromXml 方法，以便可以对对象进行安全性编码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission ..::.Intersect 方法

DBDataPermission
.
.
::
.
Intersect 方法
DBDataPermission 类

返回表示当前权限对象和指定权限对象的交集的新权限对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function Intersect ( _
    target As IPermission _
) As IPermission
public override IPermission Intersect(
    IPermission target
)
public:
virtual IPermission^ Intersect(
    IPermission^ target
) override
abstract Intersect :
        target:IPermission -> IPermission
override Intersect :
        target:IPermission -> IPermission

参数

target
类型： System.Security IPermission
与当前的权限对象相交的权限对象。它必须与当前权限对象的类型相同。 与当前的权限对象相交的权限对象。它必须与当前权限对象的类型相同。

返回值

类型： System.Security IPermission
表示当前权限对象和指定权限对象的交集的新权限对象。如果交集为空，则此新权限对象是一个 null 引用（在 Visual Basic 中为 Nothing）。 表示当前权限对象和指定权限对象的交集的新权限对象。如果交集为空，则此新权限对象是一个 null 引用（在 Visual Basic 中为 Nothing）。

实现

异常 | 条件
ArgumentException | target 参数不是 null 引用（在 Visual Basic 中为 Nothing），并且不是与当前权限对象相同的类的实例。

两个权限的交集是一个权限，用于描述它们共同描述的一组操作。只有同时通过两个原始权限的请求才能通过该交集。 两个权限的交集是一个权限，用于描述它们共同描述的一组操作。只有同时通过两个原始权限的请求才能通过该交集。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission ..::.IsSubsetOf 方法

DBDataPermission
.
.
::
.
IsSubsetOf 方法
DBDataPermission 类

返回一个值，该值指示当前的权限对象是否为指定权限对象的一个子集。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function IsSubsetOf ( _
    target As IPermission _
) As Boolean
public override bool IsSubsetOf(
    IPermission target
)
public:
virtual bool IsSubsetOf(
    IPermission^ target
) override
abstract IsSubsetOf :
        target:IPermission -> bool
override IsSubsetOf :
        target:IPermission -> bool

参数

target
类型： System.Security IPermission
将用于测试子集关系的权限对象。该对象必须与当前权限对象的类型相同。 将用于测试子集关系的权限对象。该对象必须与当前权限对象的类型相同。

返回值

类型： System Boolean
如果当前权限对象是指定权限对象的子集，则为 true；否则为 false。

实现

异常 | 条件
ArgumentException | target 参数是一个与当前权限对象的类型不同的对象。

如果当前的权限对象所指定的一组操作完全包含在指定的权限对象中，则当前的权限对象是指定权限对象的一个子集。例如，表示访问 C:\example.txt 的权限就是表示访问 C:\ 的权限的一个子集。如果此方法返回 true，则当前的权限对象所表示的对受保护资源的访问不会超过指定的权限对象。 如果当前的权限对象所指定的一组操作完全包含在指定的权限对象中，则当前的权限对象是指定权限对象的一个子集。例如，表示访问 C:\example.txt 的权限就是表示访问 C:\ 的权限的一个子集。如果此方法返回 true，则当前的权限对象所表示的对受保护资源的访问不会超过指定的权限对象。 如果当前的权限对象所指定的一组操作完全包含在指定的权限对象中，则当前的权限对象是指定权限对象的一个子集。例如，表示访问 C:\example.txt 的权限就是表示访问 C:\ 的权限的一个子集。如果此方法返回 true，则当前的权限对象所表示的对受保护资源的访问不会超过指定的权限对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission ..::.IsUnrestricted 方法

DBDataPermission
.
.
::
.
IsUnrestricted 方法
DBDataPermission 类

返回一个值，该值指示在不了解权限语义的情况下是否可以将权限表示为无限制。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function IsUnrestricted As Boolean
public bool IsUnrestricted()
public:
virtual bool IsUnrestricted() sealed
abstract IsUnrestricted : unit -> bool
override IsUnrestricted : unit -> bool

返回值

类型： System Boolean
如果可以将权限表示为无限制，则为 true。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission ..::.ToXml 方法

DBDataPermission
.
.
::
.
ToXml 方法
DBDataPermission 类

创建安全对象及其当前状态的 XML 编码。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function ToXml As SecurityElement
public override SecurityElement ToXml()
public:
virtual SecurityElement^ ToXml() override
abstract ToXml : unit -> SecurityElement
override ToXml : unit -> SecurityElement

返回值

类型： System.Security SecurityElement
安全对象的 XML 编码，包括任何状态信息。

实现

扩展安全对象的自定义代码需要实现 ToXml 和 FromXml 方法，以便可以对对象进行安全性编码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission ..::.Union 方法

DBDataPermission
.
.
::
.
Union 方法
DBDataPermission 类

返回一个新的权限对象，它是当前权限对象和指定权限对象的并集。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overrides Function Union ( _
    target As IPermission _
) As IPermission
public override IPermission Union(
    IPermission target
)
public:
virtual IPermission^ Union(
    IPermission^ target
) override
abstract Union :
        target:IPermission -> IPermission
override Union :
        target:IPermission -> IPermission

参数

target
类型： System.Security IPermission
要与当前的权限对象合并的权限对象。它必须与当前权限对象的类型相同。 要与当前的权限对象合并的权限对象。它必须与当前权限对象的类型相同。

返回值

类型： System.Security IPermission
新权限对象，它表示当前权限对象和指定权限对象的并集。

实现

异常 | 条件
ArgumentException | target 对象与当前权限对象不属于同一类型。

调用 Union 将得到一个权限，该权限表示当前权限对象和指定权限对象都允许的所有操作。通过任何一个权限的任何请求都会通过这些权限的并集。 调用 Union 将得到一个权限，该权限表示当前权限对象和指定权限对象都允许的所有操作。通过任何一个权限的任何请求都会通过这些权限的并集。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermission 属性

DBDataPermission 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBDataPermission 类

DBDataPermission 类型公开以下成员。

名称 说明
页首

参考

DBDataPermission 类
System.Data.Common 命名空间


DBDataPermission ..::.AllowBlankPassword 属性

DBDataPermission
.
.
::
.
AllowBlankPassword 属性
DBDataPermission 类

获取一个值，该值指示是否允许使用空白密码。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property AllowBlankPassword As Boolean
    Get
    Set
public bool AllowBlankPassword { get; set; }
public:
property bool AllowBlankPassword {
    bool get ();
    void set (bool value);
}
member AllowBlankPassword : bool with get, set

属性值

类型： System Boolean
如果允许使用空白密码，则为 true；否则为 false。

PermissionState 枚举优先于 AllowBlankPassword 属性。因此，如果将 AllowBlankPassword 设置为 false，也必须将 PermissionState 设置为 None，以防止用户使用空白密码进行连接。 PermissionState 枚举优先于 AllowBlankPassword 属性。因此，如果将 AllowBlankPassword 设置为 false，也必须将 PermissionState 设置为 None，以防止用户使用空白密码进行连接。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermission 类
DBDataPermission 成员
System.Data.Common 命名空间


DBDataPermissionAttribute 类

DBDataPermissionAttribute 类
成员

将某安全操作与自定义安全特性相关联。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
<AttributeUsageAttribute(AttributeTargets.Assembly Or AttributeTargets.Class Or AttributeTargets.Struct Or AttributeTargets.Constructor Or AttributeTargets.Method, AllowMultiple := True,  _
    Inherited := False)> _
Public MustInherit Class DBDataPermissionAttribute _
    Inherits CodeAccessSecurityAttribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Constructor|AttributeTargets.Method, AllowMultiple = true,
    Inherited = false)]
public abstract class DBDataPermissionAttribute : CodeAccessSecurityAttribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets::Assembly|AttributeTargets::Class|AttributeTargets::Struct|AttributeTargets::Constructor|AttributeTargets::Method, AllowMultiple = true,
    Inherited = false)]
public ref class DBDataPermissionAttribute abstract : public CodeAccessSecurityAttribute
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Constructor|AttributeTargets.Method, AllowMultiple = true,
    Inherited = false)>]
type DBDataPermissionAttribute =
    class
        inherit CodeAccessSecurityAttribute
    end

System.Data.Common System.Data.Common..::.DBDataPermissionAttributeDBDataPermissionAttribute

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermissionAttribute 成员
System.Data.Common 命名空间


DBDataPermissionAttribute 成员

DBDataPermissionAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBDataPermissionAttribute 类

将某安全操作与自定义安全特性相关联。

DBDataPermissionAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DBDataPermissionAttribute 类
System.Data.Common 命名空间


DBDataPermissionAttribute 构造函数

DBDataPermissionAttribute 构造函数
DBDataPermissionAttribute 类

初始化 DBDataPermissionAttribute 的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    action As SecurityAction _
)
protected DBDataPermissionAttribute(
    SecurityAction action
)
protected:
DBDataPermissionAttribute(
    SecurityAction action
)
new :
        action:SecurityAction -> DBDataPermissionAttribute

参数

action
类型： System.Security.Permissions SecurityAction
安全操作值之一，它表示可以由声明性安全执行的操作。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermissionAttribute 类
DBDataPermissionAttribute 成员
System.Data.Common 命名空间


DBDataPermissionAttribute 方法

DBDataPermissionAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBDataPermissionAttribute 类

DBDataPermissionAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DBDataPermissionAttribute 类
System.Data.Common 命名空间


DBDataPermissionAttribute ..::.ShouldSerializeConnectionString 方法

DBDataPermissionAttribute
.
.
::
.
ShouldSerializeConnectionString 方法
DBDataPermissionAttribute 类

标识特性是否应序列化连接字符串。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function ShouldSerializeConnectionString As Boolean
public bool ShouldSerializeConnectionString()
public:
bool ShouldSerializeConnectionString()
member ShouldSerializeConnectionString : unit -> bool

返回值

类型： System Boolean
如果特性应序列化连接字符串，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermissionAttribute 类
DBDataPermissionAttribute 成员
System.Data.Common 命名空间


DBDataPermissionAttribute ..::.ShouldSerializeKeyRestrictions 方法

DBDataPermissionAttribute
.
.
::
.
ShouldSerializeKeyRestrictions 方法
DBDataPermissionAttribute 类

标识特性是否应序列化键限制集合。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function ShouldSerializeKeyRestrictions As Boolean
public bool ShouldSerializeKeyRestrictions()
public:
bool ShouldSerializeKeyRestrictions()
member ShouldSerializeKeyRestrictions : unit -> bool

返回值

类型： System Boolean
如果特性应序列化键限制集合，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermissionAttribute 类
DBDataPermissionAttribute 成员
System.Data.Common 命名空间


DBDataPermissionAttribute 属性

DBDataPermissionAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBDataPermissionAttribute 类

DBDataPermissionAttribute 类型公开以下成员。

名称 说明
页首

参考

DBDataPermissionAttribute 类
System.Data.Common 命名空间


DBDataPermissionAttribute ..::.AllowBlankPassword 属性

DBDataPermissionAttribute
.
.
::
.
AllowBlankPassword 属性
DBDataPermissionAttribute 类

获取或设置一个值，该值指示是否允许使用空白密码。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property AllowBlankPassword As Boolean
    Get
    Set
public bool AllowBlankPassword { get; set; }
public:
property bool AllowBlankPassword {
    bool get ();
    void set (bool value);
}
member AllowBlankPassword : bool with get, set

属性值

类型： System Boolean
如果允许使用空白密码，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermissionAttribute 类
DBDataPermissionAttribute 成员
System.Data.Common 命名空间


DBDataPermissionAttribute ..::.ConnectionString 属性

DBDataPermissionAttribute
.
.
::
.
ConnectionString 属性
DBDataPermissionAttribute 类

获取或设置允许的连接字符串。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property ConnectionString As String
    Get
    Set
public string ConnectionString { get; set; }
public:
property String^ ConnectionString {
    String^ get ();
    void set (String^ value);
}
member ConnectionString : string with get, set

属性值

类型： System String
允许的连接字符串。

可对多个连接字符串进行标识。还可使用 KeyRestrictions 提供其他连接字符串限制。 可对多个连接字符串进行标识。还可使用 KeyRestrictions 提供其他连接字符串限制。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermissionAttribute 类
DBDataPermissionAttribute 成员
System.Data.Common 命名空间


DBDataPermissionAttribute ..::.KeyRestrictionBehavior 属性

DBDataPermissionAttribute
.
.
::
.
KeyRestrictionBehavior 属性
DBDataPermissionAttribute 类

标识由 KeyRestrictions 属性标识的连接字符串参数列表是否为所唯一允许的连接字符串参数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property KeyRestrictionBehavior As KeyRestrictionBehavior
    Get
    Set
public KeyRestrictionBehavior KeyRestrictionBehavior { get; set; }
public:
property KeyRestrictionBehavior KeyRestrictionBehavior {
    KeyRestrictionBehavior get ();
    void set (KeyRestrictionBehavior value);
}
member KeyRestrictionBehavior : KeyRestrictionBehavior with get, set

属性值

类型： System.Data KeyRestrictionBehavior
KeyRestrictionBehavior 值之一。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermissionAttribute 类
DBDataPermissionAttribute 成员
System.Data.Common 命名空间


DBDataPermissionAttribute ..::.KeyRestrictions 属性

DBDataPermissionAttribute
.
.
::
.
KeyRestrictions 属性
DBDataPermissionAttribute 类

获取或设置允许或不允许的连接字符串参数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property KeyRestrictions As String
    Get
    Set
public string KeyRestrictions { get; set; }
public:
property String^ KeyRestrictions {
    String^ get ();
    void set (String^ value);
}
member KeyRestrictions : string with get, set

属性值

类型： System String
允许或不允许的一个和多个连接字符串参数。

连接字符串参数以 <参数名>= 的形式标识。可指定多个参数，并用分号 (;) 分隔。通过使用 KeyRestrictionBehavior，列出的连接字符串参数既可以只标识允许的其他参数，也可以标识禁止使用的其他参数。 连接字符串参数以 <参数名>= 的形式标识。可指定多个参数，并用分号 (;) 分隔。通过使用 KeyRestrictionBehavior，列出的连接字符串参数既可以只标识允许的其他参数，也可以标识禁止使用的其他参数。 连接字符串参数以 <参数名>= 的形式标识。可指定多个参数，并用分号 (;) 分隔。通过使用 KeyRestrictionBehavior，列出的连接字符串参数既可以只标识允许的其他参数，也可以标识禁止使用的其他参数。

如果没有指定键限制，而且 KeyRestrictionBehavior 属性设置为 AllowOnly，则不允许使用其他连接字符串参数。

如果没有指定键限制，并且 KeyRestrictionBehavior 属性被设置为 PreventUsage，则允许使用其他连接字符串参数。如果为同一连接字符串设置了多个规则，则在权限检查过程中将选择限制更为严格的规则。 如果没有指定键限制，并且 KeyRestrictionBehavior 属性被设置为 PreventUsage，则允许使用其他连接字符串参数。如果为同一连接字符串设置了多个规则，则在权限检查过程中将选择限制更为严格的规则。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1

.NET Framework Client Profile

受以下版本支持：4

参考

DBDataPermissionAttribute 类
DBDataPermissionAttribute 成员
System.Data.Common 命名空间


DbDataReader 类

DbDataReader 类
成员

从数据源读取行的一个只进流。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbDataReader _
    Inherits MarshalByRefObject _
    Implements IDataReader, IDisposable, IDataRecord, IEnumerable
public abstract class DbDataReader : MarshalByRefObject,
    IDataReader, IDisposable, IDataRecord, IEnumerable
public ref class DbDataReader abstract : public MarshalByRefObject,
    IDataReader, IDisposable, IDataRecord, IEnumerable
[<AbstractClassAttribute>]
type DbDataReader =
    class
        inherit MarshalByRefObject
        interface IDataReader
        interface IDisposable
        interface IDataRecord
        interface IEnumerable
    end

System.Data.Common System.Data.Common..::.DbDataReaderDbDataReader

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataReader 成员

DbDataReader 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataReader 类

从数据源读取行的一个只进流。

DbDataReader 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbDataReader 类
System.Data.Common 命名空间


DbDataReader 构造函数

DbDataReader 构造函数
DbDataReader 类

初始化 DbDataReader 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbDataReader()
protected:
DbDataReader()
new : unit -> DbDataReader

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbDataReader 方法

DbDataReader 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataReader 类

DbDataReader 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbDataReader 类
System.Data.Common 命名空间


DbDataReader ..::.Close 方法

DbDataReader
.
.
::
.
Close 方法
DbDataReader 类

关闭 DbDataReader 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Close
public abstract void Close()
public:
virtual void Close() abstract
abstract Close : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.Dispose 方法

DbDataReader
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataReader 类

释放 DbDataReader 使用的资源并调用 Close。

名称 说明
页首

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.Dispose 方法

DbDataReader
.
.
::
.
Dispose 方法
DbDataReader 类

释放 DbDataReader 类的当前实例所使用的所有资源。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Dispose
public void Dispose()
public:
virtual void Dispose() sealed
abstract Dispose : unit -> unit
override Dispose : unit -> unit

实现

使用完 DbDataReader 后调用 Dispose。Dispose 方法使 DbDataReader 处于不可用状态。调用 Dispose 后，必须释放对 DbDataReader 的所有引用，这样垃圾回收器才能回收 DbDataReader 占用的内存。 使用完 DbDataReader 后调用 Dispose。Dispose 方法使 DbDataReader 处于不可用状态。调用 Dispose 后，必须释放对 DbDataReader 的所有引用，这样垃圾回收器才能回收 DbDataReader 占用的内存。 使用完 DbDataReader 后调用 Dispose。Dispose 方法使 DbDataReader 处于不可用状态。调用 Dispose 后，必须释放对 DbDataReader 的所有引用，这样垃圾回收器才能回收 DbDataReader 占用的内存。

有关更多信息，请参见清理非托管资源和实现 Dispose 方法。

说明 说明

释放对 DbDataReader 的最后一个引用之前，始终应先调用 Dispose。否则，在垃圾回收器调用 DbDataReader 对象的 Finalize 方法之前，正在使用的资源不会被释放。 释放对 DbDataReader 的最后一个引用之前，始终应先调用 Dispose。否则，在垃圾回收器调用 DbDataReader 对象的 Finalize 方法之前，正在使用的资源不会被释放。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
Dispose 重载
System.Data.Common 命名空间


DbDataReader ..::.Dispose 方法 (Boolean)

DbDataReader
.
.
::
.
Dispose 方法 (Boolean)
DbDataReader 类

释放由 DbDataReader 使用的托管资源，还可以选择释放非托管资源。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub Dispose ( _
    disposing As Boolean _
)
protected virtual void Dispose(
    bool disposing
)
protected:
virtual void Dispose(
    bool disposing
)
abstract Dispose :
        disposing:bool -> unit
override Dispose :
        disposing:bool -> unit

参数

disposing
类型： System Boolean
若要释放托管资源和非托管资源，则为 true；若要仅释放非托管资源，则为 false。

此方法调用 Close。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
Dispose 重载
System.Data.Common 命名空间


DbDataReader ..::.GetBoolean 方法

DbDataReader
.
.
::
.
GetBoolean 方法
DbDataReader 类

获取指定列的布尔值形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetBoolean ( _
    ordinal As Integer _
) As Boolean
public abstract bool GetBoolean(
    int ordinal
)
public:
virtual bool GetBoolean(
    int ordinal
) abstract
abstract GetBoolean :
        ordinal:int -> bool

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Boolean
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetByte 方法

DbDataReader
.
.
::
.
GetByte 方法
DbDataReader 类

获取指定列的字节形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetByte ( _
    ordinal As Integer _
) As Byte
public abstract byte GetByte(
    int ordinal
)
public:
virtual unsigned char GetByte(
    int ordinal
) abstract
abstract GetByte :
        ordinal:int -> byte

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Byte
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetBytes 方法

DbDataReader
.
.
::
.
GetBytes 方法
DbDataReader 类

从指定列读取一个字节流（从 dataOffset 指示的位置开始），读到缓冲区中（从 bufferOffset 指示的位置开始）。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetBytes ( _
    ordinal As Integer, _
    dataOffset As Long, _
    buffer As Byte(), _
    bufferOffset As Integer, _
    length As Integer _
) As Long
public abstract long GetBytes(
    int ordinal,
    long dataOffset,
    byte[] buffer,
    int bufferOffset,
    int length
)
public:
virtual long long GetBytes(
    int ordinal,
    long long dataOffset,
    array<unsigned char>^ buffer,
    int bufferOffset,
    int length
) abstract
abstract GetBytes :
        ordinal:int *
        dataOffset:int64 *
        buffer:byte[] *
        bufferOffset:int *
        length:int -> int64

参数

ordinal
类型： System Int32
从零开始的列序号。
dataOffset
类型： System Int64
行中的索引，从其开始读取操作。
buffer
类型：
array<
System Byte
>
[]
()
[]

作为数据复制目标的缓冲区。
bufferOffset
类型： System Int32
具有作为数据复制目标的缓冲区的索引。
length
类型： System Int32
最多读取的字符数。

返回值

类型： System Int64
读取的实际字节数。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetChar 方法

DbDataReader
.
.
::
.
GetChar 方法
DbDataReader 类

获取指定列的单个字符串形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetChar ( _
    ordinal As Integer _
) As Char
public abstract char GetChar(
    int ordinal
)
public:
virtual wchar_t GetChar(
    int ordinal
) abstract
abstract GetChar :
        ordinal:int -> char

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Char
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetChars 方法

DbDataReader
.
.
::
.
GetChars 方法
DbDataReader 类

从指定列读取一个字符流，从 dataIndex 指示的位置开始，读到缓冲区中，从 bufferIndex 指示的位置开始。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetChars ( _
    ordinal As Integer, _
    dataOffset As Long, _
    buffer As Char(), _
    bufferOffset As Integer, _
    length As Integer _
) As Long
public abstract long GetChars(
    int ordinal,
    long dataOffset,
    char[] buffer,
    int bufferOffset,
    int length
)
public:
virtual long long GetChars(
    int ordinal,
    long long dataOffset,
    array<wchar_t>^ buffer,
    int bufferOffset,
    int length
) abstract
abstract GetChars :
        ordinal:int *
        dataOffset:int64 *
        buffer:char[] *
        bufferOffset:int *
        length:int -> int64

参数

ordinal
类型： System Int32
从零开始的列序号。
dataOffset
类型： System Int64
行中的索引，从其开始读取操作。
buffer
类型：
array<
System Char
>
[]
()
[]

作为数据复制目标的缓冲区。
bufferOffset
类型： System Int32
具有作为数据复制目标的缓冲区的索引。
length
类型： System Int32
最多读取的字符数。

返回值

类型： System Int64
读取的实际字符数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetData 方法

DbDataReader
.
.
::
.
GetData 方法
DbDataReader 类

返回被请求的列序号的 DbDataReader 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetData ( _
    ordinal As Integer _
) As DbDataReader
public DbDataReader GetData(
    int ordinal
)
public:
DbDataReader^ GetData(
    int ordinal
)
member GetData :
        ordinal:int -> DbDataReader

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System.Data.Common DbDataReader
一个 DbDataReader 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetDataTypeName 方法

DbDataReader
.
.
::
.
GetDataTypeName 方法
DbDataReader 类

获取指定列的数据类型的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetDataTypeName ( _
    ordinal As Integer _
) As String
public abstract string GetDataTypeName(
    int ordinal
)
public:
virtual String^ GetDataTypeName(
    int ordinal
) abstract
abstract GetDataTypeName :
        ordinal:int -> string

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System String
表示数据类型的名称的字符串。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetDateTime 方法

DbDataReader
.
.
::
.
GetDateTime 方法
DbDataReader 类

获取指定列的 DateTime 对象形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetDateTime ( _
    ordinal As Integer _
) As DateTime
public abstract DateTime GetDateTime(
    int ordinal
)
public:
virtual DateTime GetDateTime(
    int ordinal
) abstract
abstract GetDateTime :
        ordinal:int -> DateTime

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System DateTime
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetDbDataReader 方法

DbDataReader
.
.
::
.
GetDbDataReader 方法
DbDataReader 类

返回被请求的列序号的 DbDataReader 对象，可以使用提供程序特定的实现对该对象进行重写。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function GetDbDataReader ( _
    ordinal As Integer _
) As DbDataReader
protected virtual DbDataReader GetDbDataReader(
    int ordinal
)
protected:
virtual DbDataReader^ GetDbDataReader(
    int ordinal
)
abstract GetDbDataReader :
        ordinal:int -> DbDataReader
override GetDbDataReader :
        ordinal:int -> DbDataReader

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System.Data.Common DbDataReader
一个 DbDataReader 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetDecimal 方法

DbDataReader
.
.
::
.
GetDecimal 方法
DbDataReader 类

获取指定列的 Decimal 对象形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetDecimal ( _
    ordinal As Integer _
) As Decimal
public abstract decimal GetDecimal(
    int ordinal
)
public:
virtual Decimal GetDecimal(
    int ordinal
) abstract
abstract GetDecimal :
        ordinal:int -> decimal

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Decimal
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetDouble 方法

DbDataReader
.
.
::
.
GetDouble 方法
DbDataReader 类

获取指定列的双精度浮点数形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetDouble ( _
    ordinal As Integer _
) As Double
public abstract double GetDouble(
    int ordinal
)
public:
virtual double GetDouble(
    int ordinal
) abstract
abstract GetDouble :
        ordinal:int -> float

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Double
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetEnumerator 方法

DbDataReader
.
.
::
.
GetEnumerator 方法
DbDataReader 类

返回一个 IEnumerator，可用于循环访问数据读取器中的行。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetEnumerator As IEnumerator
public abstract IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() abstract
abstract GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个 IEnumerator，可用于循环访问数据读取器中的行。

实现

虽然可以在支持显式 foreach 构造的语言中使用此方法检索显式构造函数，但直接使用循环构造来循环访问数据读取器的行却更加简单。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetFieldType 方法

DbDataReader
.
.
::
.
GetFieldType 方法
DbDataReader 类

获取指定列的数据类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetFieldType ( _
    ordinal As Integer _
) As Type
public abstract Type GetFieldType(
    int ordinal
)
public:
virtual Type^ GetFieldType(
    int ordinal
) abstract
abstract GetFieldType :
        ordinal:int -> Type

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Type
指定列的数据类型。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetFloat 方法

DbDataReader
.
.
::
.
GetFloat 方法
DbDataReader 类

获取指定列的单精度浮点数形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetFloat ( _
    ordinal As Integer _
) As Single
public abstract float GetFloat(
    int ordinal
)
public:
virtual float GetFloat(
    int ordinal
) abstract
abstract GetFloat :
        ordinal:int -> float32

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Single
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetGuid 方法

DbDataReader
.
.
::
.
GetGuid 方法
DbDataReader 类

获取指定列的全局唯一标识符 (GUID) 形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetGuid ( _
    ordinal As Integer _
) As Guid
public abstract Guid GetGuid(
    int ordinal
)
public:
virtual Guid GetGuid(
    int ordinal
) abstract
abstract GetGuid :
        ordinal:int -> Guid

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Guid
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetInt16 方法

DbDataReader
.
.
::
.
GetInt16 方法
DbDataReader 类

获取指定列的 16 位带符号整数形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetInt16 ( _
    ordinal As Integer _
) As Short
public abstract short GetInt16(
    int ordinal
)
public:
virtual short GetInt16(
    int ordinal
) abstract
abstract GetInt16 :
        ordinal:int -> int16

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Int16
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetInt32 方法

DbDataReader
.
.
::
.
GetInt32 方法
DbDataReader 类

获取指定列的 32 位带符号整数形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetInt32 ( _
    ordinal As Integer _
) As Integer
public abstract int GetInt32(
    int ordinal
)
public:
virtual int GetInt32(
    int ordinal
) abstract
abstract GetInt32 :
        ordinal:int -> int

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Int32
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetInt64 方法

DbDataReader
.
.
::
.
GetInt64 方法
DbDataReader 类

获取指定列的 64 位带符号整数形式的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetInt64 ( _
    ordinal As Integer _
) As Long
public abstract long GetInt64(
    int ordinal
)
public:
virtual long long GetInt64(
    int ordinal
) abstract
abstract GetInt64 :
        ordinal:int -> int64

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Int64
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetName 方法

DbDataReader
.
.
::
.
GetName 方法
DbDataReader 类

给定了从零开始的列序号时，获取列的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetName ( _
    ordinal As Integer _
) As String
public abstract string GetName(
    int ordinal
)
public:
virtual String^ GetName(
    int ordinal
) abstract
abstract GetName :
        ordinal:int -> string

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System String
指定列的名称。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetOrdinal 方法

DbDataReader
.
.
::
.
GetOrdinal 方法
DbDataReader 类

给定列名称时，获取列序号。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetOrdinal ( _
    name As String _
) As Integer
public abstract int GetOrdinal(
    string name
)
public:
virtual int GetOrdinal(
    String^ name
) abstract
abstract GetOrdinal :
        name:string -> int

参数

name
类型： System String
列的名称。

返回值

类型： System Int32
从零开始的列序号。

实现

异常 | 条件
IndexOutOfRangeException | 指定的名称不是有效的列名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetProviderSpecificFieldType 方法

DbDataReader
.
.
::
.
GetProviderSpecificFieldType 方法
DbDataReader 类

返回指定列的提供程序特定的字段类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function GetProviderSpecificFieldType ( _
    ordinal As Integer _
) As Type
public virtual Type GetProviderSpecificFieldType(
    int ordinal
)
public:
virtual Type^ GetProviderSpecificFieldType(
    int ordinal
)
abstract GetProviderSpecificFieldType :
        ordinal:int -> Type
override GetProviderSpecificFieldType :
        ordinal:int -> Type

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Type
描述指定列的数据类型的 Type 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetProviderSpecificValue 方法

DbDataReader
.
.
::
.
GetProviderSpecificValue 方法
DbDataReader 类

获取指定列的作为 Object 的实例的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function GetProviderSpecificValue ( _
    ordinal As Integer _
) As Object
public virtual Object GetProviderSpecificValue(
    int ordinal
)
public:
virtual Object^ GetProviderSpecificValue(
    int ordinal
)
abstract GetProviderSpecificValue :
        ordinal:int -> Object
override GetProviderSpecificValue :
        ordinal:int -> Object

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Object
指定列的值。

若要确定返回对象的特定类型，请使用 GetProviderSpecificFieldType。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetProviderSpecificValues 方法

DbDataReader
.
.
::
.
GetProviderSpecificValues 方法
DbDataReader 类

获取集合中当前行的所有提供程序特定的特性列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function GetProviderSpecificValues ( _
    values As Object() _
) As Integer
public virtual int GetProviderSpecificValues(
    Object[] values
)
public:
virtual int GetProviderSpecificValues(
    array<Object^>^ values
)
abstract GetProviderSpecificValues :
        values:Object[] -> int
override GetProviderSpecificValues :
        values:Object[] -> int

参数

values
类型：
array<
System Object
>
[]
()
[]

要将特性列复制到其中的 Object 数组。

返回值

类型： System Int32
数组中 Object 的实例的数目。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetSchemaTable 方法

DbDataReader
.
.
::
.
GetSchemaTable 方法
DbDataReader 类

返回一个 DataTable，它描述 DbDataReader 的列元数据。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetSchemaTable As DataTable
public abstract DataTable GetSchemaTable()
public:
virtual DataTable^ GetSchemaTable() abstract
abstract GetSchemaTable : unit -> DataTable

返回值

类型： System.Data DataTable
一个描述列元数据的 DataTable。

实现

异常 | 条件
InvalidOperationException | SqlDataReader 是关闭的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetString 方法

DbDataReader
.
.
::
.
GetString 方法
DbDataReader 类

获取指定列的作为 String 的实例的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetString ( _
    ordinal As Integer _
) As String
public abstract string GetString(
    int ordinal
)
public:
virtual String^ GetString(
    int ordinal
) abstract
abstract GetString :
        ordinal:int -> string

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System String
指定列的值。

实现

异常 | 条件
InvalidCastException | 指定的强制转换无效。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetValue 方法

DbDataReader
.
.
::
.
GetValue 方法
DbDataReader 类

获取指定列的作为 Object 的实例的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetValue ( _
    ordinal As Integer _
) As Object
public abstract Object GetValue(
    int ordinal
)
public:
virtual Object^ GetValue(
    int ordinal
) abstract
abstract GetValue :
        ordinal:int -> Object

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Object
指定列的值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.GetValues 方法

DbDataReader
.
.
::
.
GetValues 方法
DbDataReader 类

使用当前行的列值来填充对象数组。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetValues ( _
    values As Object() _
) As Integer
public abstract int GetValues(
    Object[] values
)
public:
virtual int GetValues(
    array<Object^>^ values
) abstract
abstract GetValues :
        values:Object[] -> int

参数

values
类型：
array<
System Object
>
[]
()
[]

要将特性列复制到其中的 Object 数组。

返回值

类型： System Int32
数组中 Object 的实例的数目。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.IDataRecord ..::.GetData 方法

DbDataReader
.
.
::
.
IDataRecord
.
.
::
.
GetData 方法
DbDataReader 类

有关此成员的说明，请参见 IDataRecord..::.GetData。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetData ( _
    ordinal As Integer _
) As IDataReader Implements IDataRecord.GetData
IDataReader IDataRecord.GetData(
    int ordinal
)
private:
virtual IDataReader^ GetData(
    int ordinal
) sealed = IDataRecord::GetData
private abstract GetData :
        ordinal:int -> IDataReader
private override GetData :
        ordinal:int -> IDataReader

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System.Data IDataReader
在字段指向更多的远程结构化数据时使用的 IDataReader 的实例。

实现

此成员是显式接口成员的实现。它只能在 DbDataReader 实例被强制转换为 IDataRecord 接口时使用。 此成员是显式接口成员的实现。它只能在 DbDataReader 实例被强制转换为 IDataRecord 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.IsDBNull 方法

DbDataReader
.
.
::
.
IsDBNull 方法
DbDataReader 类

获取一个值，该值指示列中是否包含不存在的或已丢失的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function IsDBNull ( _
    ordinal As Integer _
) As Boolean
public abstract bool IsDBNull(
    int ordinal
)
public:
virtual bool IsDBNull(
    int ordinal
) abstract
abstract IsDBNull :
        ordinal:int -> bool

参数

ordinal
类型： System Int32
从零开始的列序号。

返回值

类型： System Boolean
如果指定的列与 DBNull 等效，则为 true；否则为 false。

实现

在调用类型化 get 方法（例如 GetByte、GetChar 等）前调用此方法来检查空列值，以避免引发错误。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.MemberwiseClone 方法

DbDataReader
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataReader 类

名称 说明
页首

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.NextResult 方法

DbDataReader
.
.
::
.
NextResult 方法
DbDataReader 类

读取批处理语句的结果时，使读取器前进到下一个结果。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function NextResult As Boolean
public abstract bool NextResult()
public:
virtual bool NextResult() abstract
abstract NextResult : unit -> bool

返回值

类型： System Boolean
如果存在多个结果集，则为 true；否则为 false。

实现

此方法可用于在将批处理提交到数据提供程序时处理返回的多个结果集。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.Read 方法

DbDataReader
.
.
::
.
Read 方法
DbDataReader 类

将读取器前进到结果集中的下一个记录。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function Read As Boolean
public abstract bool Read()
public:
virtual bool Read() abstract
abstract Read : unit -> bool

返回值

类型： System Boolean
如果存在多个行，则为 true；否则为 false。

实现

数据读取器的默认位置在第一条记录前面。因此，必须调用 Read 来开始访问数据。 数据读取器的默认位置在第一条记录前面。因此，必须调用 Read 来开始访问数据。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader 属性

DbDataReader 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataReader 类

DbDataReader 类型公开以下成员。

名称 说明
页首

参考

DbDataReader 类
System.Data.Common 命名空间


DbDataReader ..::.Depth 属性

DbDataReader
.
.
::
.
Depth 属性
DbDataReader 类

获取一个值，该值指示当前行的嵌套深度。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property Depth As Integer
    Get
public abstract int Depth { get; }
public:
virtual property int Depth {
    int get () abstract;
}
abstract Depth : int

属性值

类型： System Int32
当前行的嵌套深度。

实现

最外层表的深度为零。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.FieldCount 属性

DbDataReader
.
.
::
.
FieldCount 属性
DbDataReader 类

获取当前行中的列数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property FieldCount As Integer
    Get
public abstract int FieldCount { get; }
public:
virtual property int FieldCount {
    int get () abstract;
}
abstract FieldCount : int

属性值

类型： System Int32
当前行中的列数。

实现

异常 | 条件
NotSupportedException | 没有对 SQL Server 实例的当前连接。

包括隐藏字段。使用 VisibleFieldCount 可以排除隐藏字段。 包括隐藏字段。使用 VisibleFieldCount 可以排除隐藏字段。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.HasRows 属性

DbDataReader
.
.
::
.
HasRows 属性
DbDataReader 类

获取一个值，它指示此 DbDataReader 是否包含一个或多个行。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property HasRows As Boolean
    Get
public abstract bool HasRows { get; }
public:
virtual property bool HasRows {
    bool get () abstract;
}
abstract HasRows : bool

属性值

类型： System Boolean
如果 DbDataReader 包含一行或多行，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.IsClosed 属性

DbDataReader
.
.
::
.
IsClosed 属性
DbDataReader 类

获取一个值，该值指示 DbDataReader 是否已关闭。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property IsClosed As Boolean
    Get
public abstract bool IsClosed { get; }
public:
virtual property bool IsClosed {
    bool get () abstract;
}
abstract IsClosed : bool

属性值

类型： System Boolean
如果 DbDataReader 已关闭，则为 true；否则为 false。

实现

异常 | 条件
InvalidOperationException | SqlDataReader 是关闭的。

对继承者的说明

应当实现此属性和 RecordsAffected，以便在关闭读取器时返回一个值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.Item 属性

DbDataReader
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataReader 类

获取指定列的作为 Object 实例的值。

名称 说明
页首

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.Item 属性 (Int32)

DbDataReader
.
.
::
.
Item 属性 (Int32)
DbDataReader 类

获取指定列的作为 Object 的实例的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property Item ( _
    ordinal As Integer _
) As Object
    Get
public abstract Object this[
    int ordinal
] { get; }
public:
virtual property Object^ Item[int ordinal] {
    Object^ get (int ordinal) abstract;
}
abstract Item : Object

参数

ordinal
类型： System Int32
从零开始的列序号。

属性值

类型： System Object
指定列的值。

实现

异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
Item 重载
System.Data.Common 命名空间


DbDataReader ..::.Item 属性 (String)

DbDataReader
.
.
::
.
Item 属性 (String)
DbDataReader 类

获取指定列的作为 Object 的实例的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property Item ( _
    name As String _
) As Object
    Get
public abstract Object this[
    string name
] { get; }
public:
virtual property Object^ Item[String^ name] {
    Object^ get (String^ name) abstract;
}
abstract Item : Object

参数

name
类型： System String
列的名称。

属性值

类型： System Object
指定列的值。

实现

异常 | 条件
IndexOutOfRangeException | 未找到具有指定名称的列。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
Item 重载
System.Data.Common 命名空间


DbDataReader ..::.RecordsAffected 属性

DbDataReader
.
.
::
.
RecordsAffected 属性
DbDataReader 类

通过执行 SQL 语句获取更改、插入或删除的行数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property RecordsAffected As Integer
    Get
public abstract int RecordsAffected { get; }
public:
virtual property int RecordsAffected {
    int get () abstract;
}
abstract RecordsAffected : int

属性值

类型： System Int32
更改、插入或删除的行数。对于 SELECT 语句为 -1；如果没影响任何行或该语句失败，则为 0。 更改、插入或删除的行数。对于 SELECT 语句为 -1；如果没影响任何行或该语句失败，则为 0。

实现

直到读取了所有行并关闭 DataReader 时，才会设置 RecordsAffected 属性。

对继承者的说明

应当实现此属性和 IsClosed，以便在关闭读取器时返回一个值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataReader ..::.VisibleFieldCount 属性

DbDataReader
.
.
::
.
VisibleFieldCount 属性
DbDataReader 类

获取 DbDataReader 中未隐藏的字段的数目。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property VisibleFieldCount As Integer
    Get
public virtual int VisibleFieldCount { get; }
public:
virtual property int VisibleFieldCount {
    int get ();
}
abstract VisibleFieldCount : int
override VisibleFieldCount : int

属性值

类型： System Int32
未隐藏的字段的数目。

此值用于确定 DbDataReader 中有多少字段是可见的。例如，在部分主键上使用 SELECT 会将键的剩余部分作为隐藏字段返回。隐藏字段总是附加在可见字段后面。 此值用于确定 DbDataReader 中有多少字段是可见的。例如，在部分主键上使用 SELECT 会将键的剩余部分作为隐藏字段返回。隐藏字段总是附加在可见字段后面。 此值用于确定 DbDataReader 中有多少字段是可见的。例如，在部分主键上使用 SELECT 会将键的剩余部分作为隐藏字段返回。隐藏字段总是附加在可见字段后面。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataReader 类
DbDataReader 成员
System.Data.Common 命名空间


DbDataRecord 类

DbDataRecord 类
成员

实现 IDataRecord 和 ICustomTypeDescriptor，并为 DbEnumerator 提供数据绑定支持。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbDataRecord _
    Implements ICustomTypeDescriptor, IDataRecord
public abstract class DbDataRecord : ICustomTypeDescriptor,
    IDataRecord
public ref class DbDataRecord abstract : ICustomTypeDescriptor,
    IDataRecord
[<AbstractClassAttribute>]
type DbDataRecord =
    class
        interface ICustomTypeDescriptor
        interface IDataRecord
    end

System.Data.Common System.Data.Common..::.DbDataRecordDbDataRecord

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord 成员

DbDataRecord 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataRecord 类

实现 IDataRecord 和 ICustomTypeDescriptor，并为 DbEnumerator 提供数据绑定支持。

DbDataRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbDataRecord 类
System.Data.Common 命名空间


DbDataRecord 构造函数

DbDataRecord 构造函数
DbDataRecord 类

初始化 DbDataRecord 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbDataRecord()
protected:
DbDataRecord()
new : unit -> DbDataRecord

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord 方法

DbDataRecord 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataRecord 类

DbDataRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbDataRecord 类
System.Data.Common 命名空间


DbDataRecord ..::.GetBoolean 方法

DbDataRecord
.
.
::
.
GetBoolean 方法
DbDataRecord 类

以布尔值的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetBoolean ( _
    i As Integer _
) As Boolean
public abstract bool GetBoolean(
    int i
)
public:
virtual bool GetBoolean(
    int i
) abstract
abstract GetBoolean :
        i:int -> bool

参数

i
类型： System Int32
列序号。

返回值

类型： System Boolean
如果布尔值是 true，则为 true；否则为 false。

实现

不执行任何转换，因此所检索的数据必须已经是布尔值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetByte 方法

DbDataRecord
.
.
::
.
GetByte 方法
DbDataRecord 类

以字节的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetByte ( _
    i As Integer _
) As Byte
public abstract byte GetByte(
    int i
)
public:
virtual unsigned char GetByte(
    int i
) abstract
abstract GetByte :
        i:int -> byte

参数

i
类型： System Int32
列序号。

返回值

类型： System Byte
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是字节。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetBytes 方法

DbDataRecord
.
.
::
.
GetBytes 方法
DbDataRecord 类

以字节数组的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetBytes ( _
    i As Integer, _
    dataIndex As Long, _
    buffer As Byte(), _
    bufferIndex As Integer, _
    length As Integer _
) As Long
public abstract long GetBytes(
    int i,
    long dataIndex,
    byte[] buffer,
    int bufferIndex,
    int length
)
public:
virtual long long GetBytes(
    int i,
    long long dataIndex,
    array<unsigned char>^ buffer,
    int bufferIndex,
    int length
) abstract
abstract GetBytes :
        i:int *
        dataIndex:int64 *
        buffer:byte[] *
        bufferIndex:int *
        length:int -> int64

参数

i
类型： System Int32
从零开始的列序号。
dataIndex
类型： System Int64
字段中的索引，从该索引位置开始读取操作。
buffer
类型：
array<
System Byte
>
[]
()
[]

要将字节流读入的缓冲区。
bufferIndex
类型： System Int32
开始读取操作的 buffer 索引。
length
类型： System Int32
要读取的字节数。

返回值

类型： System Int64
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是字节数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetChar 方法

DbDataRecord
.
.
::
.
GetChar 方法
DbDataRecord 类

以字符的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetChar ( _
    i As Integer _
) As Char
public abstract char GetChar(
    int i
)
public:
virtual wchar_t GetChar(
    int i
) abstract
abstract GetChar :
        i:int -> char

参数

i
类型： System Int32
列序号。

返回值

类型： System Char
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是字符。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetChars 方法

DbDataRecord
.
.
::
.
GetChars 方法
DbDataRecord 类

以字符数组的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetChars ( _
    i As Integer, _
    dataIndex As Long, _
    buffer As Char(), _
    bufferIndex As Integer, _
    length As Integer _
) As Long
public abstract long GetChars(
    int i,
    long dataIndex,
    char[] buffer,
    int bufferIndex,
    int length
)
public:
virtual long long GetChars(
    int i,
    long long dataIndex,
    array<wchar_t>^ buffer,
    int bufferIndex,
    int length
) abstract
abstract GetChars :
        i:int *
        dataIndex:int64 *
        buffer:char[] *
        bufferIndex:int *
        length:int -> int64

参数

i
类型： System Int32
列序号。
dataIndex
类型： System Int64
要将数据复制到的缓冲区。
buffer
类型：
array<
System Char
>
[]
()
[]

向缓冲区中复制的最大长度。
bufferIndex
类型： System Int32
缓冲区中从其开始的点。
length
类型： System Int32
源数据中从其开始的点。

返回值

类型： System Int64
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是字符数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetData 方法

DbDataRecord
.
.
::
.
GetData 方法
DbDataRecord 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

当前不支持。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function GetData ( _
    i As Integer _
) As IDataReader
public IDataReader GetData(
    int i
)
public:
virtual IDataReader^ GetData(
    int i
) sealed
abstract GetData :
        i:int -> IDataReader
override GetData :
        i:int -> IDataReader

参数

i
类型： System Int32
当前不支持。

返回值

类型： System.Data IDataReader
当前不支持。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetDataTypeName 方法

DbDataRecord
.
.
::
.
GetDataTypeName 方法
DbDataRecord 类

返回后端数据类型的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetDataTypeName ( _
    i As Integer _
) As String
public abstract string GetDataTypeName(
    int i
)
public:
virtual String^ GetDataTypeName(
    int i
) abstract
abstract GetDataTypeName :
        i:int -> string

参数

i
类型： System Int32
列序号。

返回值

类型： System String
后端数据类型的名称。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetDateTime 方法

DbDataRecord
.
.
::
.
GetDateTime 方法
DbDataRecord 类

以 DateTime 对象的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetDateTime ( _
    i As Integer _
) As DateTime
public abstract DateTime GetDateTime(
    int i
)
public:
virtual DateTime GetDateTime(
    int i
) abstract
abstract GetDateTime :
        i:int -> DateTime

参数

i
类型： System Int32
列序号。

返回值

类型： System DateTime
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是 DateTime 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetDbDataReader 方法

DbDataRecord
.
.
::
.
GetDbDataReader 方法
DbDataRecord 类

返回被请求的列序号的 DbDataReader 对象，可以使用提供程序特定的实现对该对象进行重写。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Function GetDbDataReader ( _
    i As Integer _
) As DbDataReader
protected virtual DbDataReader GetDbDataReader(
    int i
)
protected:
virtual DbDataReader^ GetDbDataReader(
    int i
)
abstract GetDbDataReader :
        i:int -> DbDataReader
override GetDbDataReader :
        i:int -> DbDataReader

参数

i
类型： System Int32
从零开始的列序号。

返回值

类型： System.Data.Common DbDataReader
一个 DbDataReader 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1、3.0 SP1、2.0 SP1

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetDecimal 方法

DbDataRecord
.
.
::
.
GetDecimal 方法
DbDataRecord 类

以 Decimal 对象的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetDecimal ( _
    i As Integer _
) As Decimal
public abstract decimal GetDecimal(
    int i
)
public:
virtual Decimal GetDecimal(
    int i
) abstract
abstract GetDecimal :
        i:int -> decimal

参数

i
类型： System Int32
列序号。

返回值

类型： System Decimal
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是 Decimal 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetDouble 方法

DbDataRecord
.
.
::
.
GetDouble 方法
DbDataRecord 类

以双精度浮点数的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetDouble ( _
    i As Integer _
) As Double
public abstract double GetDouble(
    int i
)
public:
virtual double GetDouble(
    int i
) abstract
abstract GetDouble :
        i:int -> float

参数

i
类型： System Int32
列序号。

返回值

类型： System Double
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是双精度浮点数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetEvents 方法

DbDataRecord
.
.
::
.
GetEvents 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataRecord 类

名称 说明
页首

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetEvents 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetEvents 方法
DbDataRecord 类

返回此组件实例的事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEvents As EventDescriptorCollection
    Implements ICustomTypeDescriptor.GetEvents
EventDescriptorCollection ICustomTypeDescriptor.GetEvents()
private:
virtual EventDescriptorCollection^ GetEvents() sealed = ICustomTypeDescriptor::GetEvents
private abstract GetEvents : unit -> EventDescriptorCollection
private override GetEvents : unit -> EventDescriptorCollection

返回值

类型： System.ComponentModel EventDescriptorCollection
表示此组件实例的事件的 EventDescriptorCollection。

实现

有关更多信息，请参见GetEvents。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
GetEvents 重载
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetEvents 方法 ( array<Attribute >[]()[])

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetEvents 方法 (
array<
Attribute
>
[]
()
[]
)
DbDataRecord 类

将指定的特性数组用作筛选器来返回此组件实例的事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEvents ( _
    attributes As Attribute() _
) As EventDescriptorCollection Implements ICustomTypeDescriptor.GetEvents
EventDescriptorCollection ICustomTypeDescriptor.GetEvents(
    Attribute[] attributes
)
private:
virtual EventDescriptorCollection^ GetEvents(
    array<Attribute^>^ attributes
) sealed = ICustomTypeDescriptor::GetEvents
private abstract GetEvents :
        attributes:Attribute[] -> EventDescriptorCollection
private override GetEvents :
        attributes:Attribute[] -> EventDescriptorCollection

参数

attributes
类型：
array<
System Attribute
>
[]
()
[]

用作筛选器的 Attribute 类型数组。

返回值

类型： System.ComponentModel EventDescriptorCollection
表示此组件实例的已筛选事件的 EventDescriptorCollection。

实现

有关更多信息，请参见[M:System.ComponentModel.ICustomTypeDescriptor.GetEvents.(System.Attribute[])]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
GetEvents 重载
System.Data.Common 命名空间


DbDataRecord ..::.GetFieldType 方法

DbDataRecord
.
.
::
.
GetFieldType 方法
DbDataRecord 类

返回 Type，它是对象的数据类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetFieldType ( _
    i As Integer _
) As Type
public abstract Type GetFieldType(
    int i
)
public:
virtual Type^ GetFieldType(
    int i
) abstract
abstract GetFieldType :
        i:int -> Type

参数

i
类型： System Int32
列序号。

返回值

类型： System Type
Type，它是对象的数据类型。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetFloat 方法

DbDataRecord
.
.
::
.
GetFloat 方法
DbDataRecord 类

以单精度浮点数的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetFloat ( _
    i As Integer _
) As Single
public abstract float GetFloat(
    int i
)
public:
virtual float GetFloat(
    int i
) abstract
abstract GetFloat :
        i:int -> float32

参数

i
类型： System Int32
列序号。

返回值

类型： System Single
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是单精度浮点数字。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetGuid 方法

DbDataRecord
.
.
::
.
GetGuid 方法
DbDataRecord 类

返回指定字段的 GUID 值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetGuid ( _
    i As Integer _
) As Guid
public abstract Guid GetGuid(
    int i
)
public:
virtual Guid GetGuid(
    int i
) abstract
abstract GetGuid :
        i:int -> Guid

参数

i
类型： System Int32
要返回的字段的索引。

返回值

类型： System Guid
指定字段的 GUID 值。

实现

异常 | 条件
IndexOutOfRangeException | 传递的索引位于 0 至 FieldCount 的范围之外。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetInt16 方法

DbDataRecord
.
.
::
.
GetInt16 方法
DbDataRecord 类

以 16 位有符号整数的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetInt16 ( _
    i As Integer _
) As Short
public abstract short GetInt16(
    int i
)
public:
virtual short GetInt16(
    int i
) abstract
abstract GetInt16 :
        i:int -> int16

参数

i
类型： System Int32
列序号。

返回值

类型： System Int16
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是 16 位有符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetInt32 方法

DbDataRecord
.
.
::
.
GetInt32 方法
DbDataRecord 类

以 32 位有符号整数的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetInt32 ( _
    i As Integer _
) As Integer
public abstract int GetInt32(
    int i
)
public:
virtual int GetInt32(
    int i
) abstract
abstract GetInt32 :
        i:int -> int

参数

i
类型： System Int32
列序号。

返回值

类型： System Int32
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是 32 位有符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetInt64 方法

DbDataRecord
.
.
::
.
GetInt64 方法
DbDataRecord 类

以 64 位有符号整数的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetInt64 ( _
    i As Integer _
) As Long
public abstract long GetInt64(
    int i
)
public:
virtual long long GetInt64(
    int i
) abstract
abstract GetInt64 :
        i:int -> int64

参数

i
类型： System Int32
列序号。

返回值

类型： System Int64
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是 64 位有符号整数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetName 方法

DbDataRecord
.
.
::
.
GetName 方法
DbDataRecord 类

返回指定列的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetName ( _
    i As Integer _
) As String
public abstract string GetName(
    int i
)
public:
virtual String^ GetName(
    int i
) abstract
abstract GetName :
        i:int -> string

参数

i
类型： System Int32
列序号。

返回值

类型： System String
指定列的名称。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetOrdinal 方法

DbDataRecord
.
.
::
.
GetOrdinal 方法
DbDataRecord 类

在给定列名称的情况下返回列序号。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetOrdinal ( _
    name As String _
) As Integer
public abstract int GetOrdinal(
    string name
)
public:
virtual int GetOrdinal(
    String^ name
) abstract
abstract GetOrdinal :
        name:string -> int

参数

name
类型： System String
列的名称。

返回值

类型： System Int32
列序号。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetProperties 方法

DbDataRecord
.
.
::
.
GetProperties 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataRecord 类

名称 说明
页首

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetProperties 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetProperties 方法
DbDataRecord 类

返回此组件实例的属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetProperties As PropertyDescriptorCollection
    Implements ICustomTypeDescriptor.GetProperties
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()
private:
virtual PropertyDescriptorCollection^ GetProperties() sealed = ICustomTypeDescriptor::GetProperties
private abstract GetProperties : unit -> PropertyDescriptorCollection
private override GetProperties : unit -> PropertyDescriptorCollection

返回值

类型： System.ComponentModel PropertyDescriptorCollection
表示此组件实例的属性的 PropertyDescriptorCollection。

实现

有关更多信息，请参见GetProperties。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
GetProperties 重载
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetProperties 方法 ( array<Attribute >[]()[])

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetProperties 方法 (
array<
Attribute
>
[]
()
[]
)
DbDataRecord 类

返回将特性数组用作筛选器的此组件实例的属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetProperties ( _
    attributes As Attribute() _
) As PropertyDescriptorCollection Implements ICustomTypeDescriptor.GetProperties
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(
    Attribute[] attributes
)
private:
virtual PropertyDescriptorCollection^ GetProperties(
    array<Attribute^>^ attributes
) sealed = ICustomTypeDescriptor::GetProperties
private abstract GetProperties :
        attributes:Attribute[] -> PropertyDescriptorCollection
private override GetProperties :
        attributes:Attribute[] -> PropertyDescriptorCollection

参数

attributes
类型：
array<
System Attribute
>
[]
()
[]

用作筛选器的 Attribute 类型数组。

返回值

类型： System.ComponentModel PropertyDescriptorCollection
表示此组件实例的已筛选属性的 PropertyDescriptorCollection。

实现

有关更多信息，请参见[M:System.ComponentModel.ICustomTypeDescriptor.GetProperties.(System.Attribute[])]。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
GetProperties 重载
System.Data.Common 命名空间


DbDataRecord ..::.GetString 方法

DbDataRecord
.
.
::
.
GetString 方法
DbDataRecord 类

以字符串的形式返回指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetString ( _
    i As Integer _
) As String
public abstract string GetString(
    int i
)
public:
virtual String^ GetString(
    int i
) abstract
abstract GetString :
        i:int -> string

参数

i
类型： System Int32
列序号。

返回值

类型： System String
指定列的值。

实现

不执行任何转换，因此所检索的数据必须已经是字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetValue 方法

DbDataRecord
.
.
::
.
GetValue 方法
DbDataRecord 类

返回以其本机格式表示的位于指定列的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetValue ( _
    i As Integer _
) As Object
public abstract Object GetValue(
    int i
)
public:
virtual Object^ GetValue(
    int i
) abstract
abstract GetValue :
        i:int -> Object

参数

i
类型： System Int32
列序号。

返回值

类型： System Object
要返回的值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.GetValues 方法

DbDataRecord
.
.
::
.
GetValues 方法
DbDataRecord 类

使用当前记录的列值来填充对象数组。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetValues ( _
    values As Object() _
) As Integer
public abstract int GetValues(
    Object[] values
)
public:
virtual int GetValues(
    array<Object^>^ values
) abstract
abstract GetValues :
        values:Object[] -> int

参数

values
类型：
array<
System Object
>
[]
()
[]

要将特性字段复制到的 Object 的数组。

返回值

类型： System Int32
数组中 Object 的实例的数目。

实现

对于大多数应用程序而言，使用此方法的效率比单个检索每个字段的效率更高。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetAttributes 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetAttributes 方法
DbDataRecord 类

返回此组件实例的自定义特性的集合。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetAttributes As AttributeCollection
    Implements ICustomTypeDescriptor.GetAttributes
AttributeCollection ICustomTypeDescriptor.GetAttributes()
private:
virtual AttributeCollection^ GetAttributes() sealed = ICustomTypeDescriptor::GetAttributes
private abstract GetAttributes : unit -> AttributeCollection
private override GetAttributes : unit -> AttributeCollection

返回值

类型： System.ComponentModel AttributeCollection
一个包含该对象的特性的 AttributeCollection。

实现

有关更多信息，请参见GetAttributes。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetClassName 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetClassName 方法
DbDataRecord 类

返回此组件实例的类名。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetClassName As String
    Implements ICustomTypeDescriptor.GetClassName
string ICustomTypeDescriptor.GetClassName()
private:
virtual String^ GetClassName() sealed = ICustomTypeDescriptor::GetClassName
private abstract GetClassName : unit -> string
private override GetClassName : unit -> string

返回值

类型： System String
该对象的类名；如果此类没有名称，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

有关更多信息，请参见GetClassName。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetComponentName 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetComponentName 方法
DbDataRecord 类

返回此组件实例的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetComponentName As String
    Implements ICustomTypeDescriptor.GetComponentName
string ICustomTypeDescriptor.GetComponentName()
private:
virtual String^ GetComponentName() sealed = ICustomTypeDescriptor::GetComponentName
private abstract GetComponentName : unit -> string
private override GetComponentName : unit -> string

返回值

类型： System String
该对象的名称；如果该对象没有名称，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

有关更多信息，请参见GetComponentName。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetConverter 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetConverter 方法
DbDataRecord 类

返回此组件实例的类型转换器。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetConverter As TypeConverter
    Implements ICustomTypeDescriptor.GetConverter
TypeConverter ICustomTypeDescriptor.GetConverter()
private:
virtual TypeConverter^ GetConverter() sealed = ICustomTypeDescriptor::GetConverter
private abstract GetConverter : unit -> TypeConverter
private override GetConverter : unit -> TypeConverter

返回值

类型： System.ComponentModel TypeConverter
表示该对象的转换器的 TypeConverter；如果此对象没有任何 TypeConverter，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

有关更多信息，请参见GetConverter。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetDefaultEvent 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetDefaultEvent 方法
DbDataRecord 类

返回此组件实例的默认事件。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetDefaultEvent As EventDescriptor
    Implements ICustomTypeDescriptor.GetDefaultEvent
EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
private:
virtual EventDescriptor^ GetDefaultEvent() sealed = ICustomTypeDescriptor::GetDefaultEvent
private abstract GetDefaultEvent : unit -> EventDescriptor
private override GetDefaultEvent : unit -> EventDescriptor

返回值

类型： System.ComponentModel EventDescriptor
表示该对象的默认事件的 EventDescriptor；如果该对象没有事件，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

有关更多信息，请参见GetDefaultEvent。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetDefaultProperty 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetDefaultProperty 方法
DbDataRecord 类

返回此组件实例的默认属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetDefaultProperty As PropertyDescriptor
    Implements ICustomTypeDescriptor.GetDefaultProperty
PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
private:
virtual PropertyDescriptor^ GetDefaultProperty() sealed = ICustomTypeDescriptor::GetDefaultProperty
private abstract GetDefaultProperty : unit -> PropertyDescriptor
private override GetDefaultProperty : unit -> PropertyDescriptor

返回值

类型： System.ComponentModel PropertyDescriptor
表示该对象的默认属性的 PropertyDescriptor；如果此对象没有属性，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

有关更多信息，请参见GetDefaultProperty。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetEditor 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetEditor 方法
DbDataRecord 类

返回此组件实例的指定类型的编辑器。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetEditor ( _
    editorBaseType As Type _
) As Object Implements ICustomTypeDescriptor.GetEditor
Object ICustomTypeDescriptor.GetEditor(
    Type editorBaseType
)
private:
virtual Object^ GetEditor(
    Type^ editorBaseType
) sealed = ICustomTypeDescriptor::GetEditor
private abstract GetEditor :
        editorBaseType:Type -> Object
private override GetEditor :
        editorBaseType:Type -> Object

参数

editorBaseType
类型： System Type
表示该对象的编辑器的 Type。

返回值

类型： System Object
表示该对象编辑器的指定类型的 Object；如果无法找到编辑器，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

实现

有关更多信息，请参见GetEditor。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.ICustomTypeDescriptor ..::.GetPropertyOwner 方法

DbDataRecord
.
.
::
.
ICustomTypeDescriptor
.
.
::
.
GetPropertyOwner 方法
DbDataRecord 类

返回包含指定的属性描述符所描述的属性的对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Function GetPropertyOwner ( _
    pd As PropertyDescriptor _
) As Object Implements ICustomTypeDescriptor.GetPropertyOwner
Object ICustomTypeDescriptor.GetPropertyOwner(
    PropertyDescriptor pd
)
private:
virtual Object^ GetPropertyOwner(
    PropertyDescriptor^ pd
) sealed = ICustomTypeDescriptor::GetPropertyOwner
private abstract GetPropertyOwner :
        pd:PropertyDescriptor -> Object
private override GetPropertyOwner :
        pd:PropertyDescriptor -> Object

参数

pd
类型： System.ComponentModel PropertyDescriptor
表示要查找其所有者的属性的 PropertyDescriptor。

返回值

类型： System Object
表示指定属性所有者的 Object。

实现

有关更多信息，请参见PropertyDescriptor()()()。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.IsDBNull 方法

DbDataRecord
.
.
::
.
IsDBNull 方法
DbDataRecord 类

用于指示不存在的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function IsDBNull ( _
    i As Integer _
) As Boolean
public abstract bool IsDBNull(
    int i
)
public:
virtual bool IsDBNull(
    int i
) abstract
abstract IsDBNull :
        i:int -> bool

参数

i
类型： System Int32
列序号。

返回值

类型： System Boolean
如果指定的列与 DBNull 等效，则为 true；否则为 false。

实现

在调用类型化 get 方法（例如 GetByte、GetChar 等）前调用此方法来检查 null 列值，以避免引发错误。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord 属性

DbDataRecord 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataRecord 类

DbDataRecord 类型公开以下成员。

名称 说明
页首

参考

DbDataRecord 类
System.Data.Common 命名空间


DbDataRecord ..::.FieldCount 属性

DbDataRecord
.
.
::
.
FieldCount 属性
DbDataRecord 类

指示当前记录中字段的数目。此属性为只读。 指示当前记录中字段的数目。此属性为只读。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property FieldCount As Integer
    Get
public abstract int FieldCount { get; }
public:
virtual property int FieldCount {
    int get () abstract;
}
abstract FieldCount : int

属性值

类型： System Int32
当前记录中字段的数目。

实现

异常 | 条件
NotSupportedException | 未连接到从中读取数据的数据源。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.Item 属性

DbDataRecord
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataRecord 类

指示以其本机格式表示的位于列中的值。此属性为只读。 指示以其本机格式表示的位于列中的值。此属性为只读。

名称 说明
页首

参考

DbDataRecord 类
DbDataRecord 成员
System.Data.Common 命名空间


DbDataRecord ..::.Item 属性 (Int32)

DbDataRecord
.
.
::
.
Item 属性 (Int32)
DbDataRecord 类

在给定列序号的情况下，指示以其本机格式表示的位于指定列的值。此属性为只读。 在给定列序号的情况下，指示以其本机格式表示的位于指定列的值。此属性为只读。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property Item ( _
    i As Integer _
) As Object
    Get
public abstract Object this[
    int i
] { get; }
public:
virtual property Object^ Item[int i] {
    Object^ get (int i) abstract;
}
abstract Item : Object

参数

i
类型： System Int32
列序号。

属性值

类型： System Object
以其本机格式表示的位于指定列的值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
Item 重载
System.Data.Common 命名空间


DbDataRecord ..::.Item 属性 (String)

DbDataRecord
.
.
::
.
Item 属性 (String)
DbDataRecord 类

在给定列名称的情况下，指示以其本机格式表示的位于指定列的值。此属性为只读。 在给定列名称的情况下，指示以其本机格式表示的位于指定列的值。此属性为只读。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property Item ( _
    name As String _
) As Object
    Get
public abstract Object this[
    string name
] { get; }
public:
virtual property Object^ Item[String^ name] {
    Object^ get (String^ name) abstract;
}
abstract Item : Object

参数

name
类型： System String
列名称。

属性值

类型： System Object
以其本机格式表示的位于指定列的值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbDataRecord 类
DbDataRecord 成员
Item 重载
System.Data.Common 命名空间


DbDataSourceEnumerator 类

DbDataSourceEnumerator 类
成员

提供了一种枚举本地网络内的所有可用数据库服务器实例的机制。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbDataSourceEnumerator
public abstract class DbDataSourceEnumerator
public ref class DbDataSourceEnumerator abstract
[<AbstractClassAttribute>]
type DbDataSourceEnumerator =  class end

此类为其他强类型数据源枚举器提供基础。

System.Data.Common System.Data.Common..::.DbDataSourceEnumeratorDbDataSourceEnumerator

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbDataSourceEnumerator 成员
System.Data.Common 命名空间
SqlDataSourceEnumerator


DbDataSourceEnumerator 成员

DbDataSourceEnumerator 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataSourceEnumerator 类

提供了一种枚举本地网络内的所有可用数据库服务器实例的机制。

DbDataSourceEnumerator 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbDataSourceEnumerator 类
System.Data.Common 命名空间


DbDataSourceEnumerator 构造函数

DbDataSourceEnumerator 构造函数
DbDataSourceEnumerator 类

创建 DbDataSourceEnumerator 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbDataSourceEnumerator()
protected:
DbDataSourceEnumerator()
new : unit -> DbDataSourceEnumerator

DbDataSourceEnumerator 类提供了强类型枚举数（如 SqlDataSourceEnumerator）的基础。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbDataSourceEnumerator 类
DbDataSourceEnumerator 成员
System.Data.Common 命名空间


DbDataSourceEnumerator 方法

DbDataSourceEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDataSourceEnumerator 类

DbDataSourceEnumerator 类型公开以下成员。

名称 说明
页首

参考

DbDataSourceEnumerator 类
System.Data.Common 命名空间


DbDataSourceEnumerator ..::.GetDataSources 方法

DbDataSourceEnumerator
.
.
::
.
GetDataSources 方法
DbDataSourceEnumerator 类

检索一个 DataTable，它包含由该类的强类型实例所表示的服务器的所有可见实例的相关信息。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetDataSources As DataTable
public abstract DataTable GetDataSources()
public:
virtual DataTable^ GetDataSources() abstract
abstract GetDataSources : unit -> DataTable

返回值

类型： System.Data DataTable
返回一个 DataTable，它包含有关联数据源的可见实例的信息。

此方法返回的表包含以下列，这些列都包含字符串。各个提供程序可以添加附加的列。 此方法返回的表包含以下列，这些列都包含字符串。各个提供程序可以添加附加的列。

列序号 | 列 | 说明
0 | ServerName | 服务器名。
1 | InstanceName | 服务器实例的名称。视提供程序而定，一个服务器上可以存在多个实例。 服务器实例的名称。视提供程序而定，一个服务器上可以存在多个实例。
2 | IsClustered | 指示服务器是否是群集的一部分。
3 | 版本 | 服务器的版本。确切的格式随提供程序不同而不同。 服务器的版本。确切的格式随提供程序不同而不同。
4 | FactoryName | 对应的提供程序工厂的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbDataSourceEnumerator 类
DbDataSourceEnumerator 成员
System.Data.Common 命名空间
GetDataSources


DbEnumerator 类

DbEnumerator 类
成员

公开 GetEnumerator 方法，该方法支持 .NET Framework 数据提供程序对集合进行简单的迭代。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Class DbEnumerator _
    Implements IEnumerator
public class DbEnumerator : IEnumerator
public ref class DbEnumerator : IEnumerator
type DbEnumerator =
    class
        interface IEnumerator
    end

.NET Framework 数据提供程序实现 DbEnumerator 类以提供数据绑定支持。

按照设计，DbEnumerator 对象旨在仅用于一个结果集。例如，如果执行的批处理语句包含两个返回不同方案的 SQL SELECT 语句的，则第二条语句可能不返回整个方案。为了避免这种情况，请获取每个结果集的 DbEnumerator，然后调用 .NET Framework 数据提供程序 DataReader 对象的 NextResult 方法。 按照设计，DbEnumerator 对象旨在仅用于一个结果集。例如，如果执行的批处理语句包含两个返回不同方案的 SQL SELECT 语句的，则第二条语句可能不返回整个方案。为了避免这种情况，请获取每个结果集的 DbEnumerator，然后调用 .NET Framework 数据提供程序 DataReader 对象的 NextResult 方法。 按照设计，DbEnumerator 对象旨在仅用于一个结果集。例如，如果执行的批处理语句包含两个返回不同方案的 SQL SELECT 语句的，则第二条语句可能不返回整个方案。为了避免这种情况，请获取每个结果集的 DbEnumerator，然后调用 .NET Framework 数据提供程序 DataReader 对象的 NextResult 方法。

System.Data.Common System.Data.Common..::.DbEnumeratorDbEnumerator
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbEnumerator 成员
System.Data.Common 命名空间


DbEnumerator 成员

DbEnumerator 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbEnumerator 类

公开 GetEnumerator 方法，该方法支持 .NET Framework 数据提供程序对集合进行简单的迭代。

DbEnumerator 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbEnumerator 类
System.Data.Common 命名空间


DbEnumerator 构造函数

DbEnumerator 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbEnumerator 类

初始化 DbEnumerator 类的新实例。

名称 说明
页首

参考

DbEnumerator 类
DbEnumerator 成员
System.Data.Common 命名空间


DbEnumerator 构造函数 (IDataReader)

DbEnumerator 构造函数 (IDataReader)
DbEnumerator 类

使用指定的 DataReader 初始化 DbEnumerator 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    reader As IDataReader _
)
public DbEnumerator(
    IDataReader reader
)
public:
DbEnumerator(
    IDataReader^ reader
)
new :
        reader:IDataReader -> DbEnumerator

参数

reader
类型： System.Data IDataReader
要循环访问的 DataReader。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbEnumerator 类
DbEnumerator 成员
DbEnumerator 重载
System.Data.Common 命名空间


DbEnumerator 构造函数 (IDataReader, Boolean)

DbEnumerator 构造函数 (IDataReader, Boolean)
DbEnumerator 类

使用指定的 DataReader 初始化 DbEnumerator 类的新实例，并指示在迭代其数据后是否自动关闭 DataReader。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    reader As IDataReader, _
    closeReader As Boolean _
)
public DbEnumerator(
    IDataReader reader,
    bool closeReader
)
public:
DbEnumerator(
    IDataReader^ reader,
    bool closeReader
)
new :
        reader:IDataReader *
        closeReader:bool -> DbEnumerator

参数

reader
类型： System.Data IDataReader
要循环访问的 DataReader。
closeReader
类型： System Boolean
如果在迭代其数据后自动关闭 DataReader，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbEnumerator 类
DbEnumerator 成员
DbEnumerator 重载
System.Data.Common 命名空间


DbEnumerator 方法

DbEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbEnumerator 类

DbEnumerator 类型公开以下成员。

名称 说明
页首

参考

DbEnumerator 类
System.Data.Common 命名空间


DbEnumerator ..::.MoveNext 方法

DbEnumerator
.
.
::
.
MoveNext 方法
DbEnumerator 类

将枚举数推进到集合的下一个元素。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Function MoveNext As Boolean
public bool MoveNext()
public:
virtual bool MoveNext() sealed
abstract MoveNext : unit -> bool
override MoveNext : unit -> bool

返回值

类型： System Boolean
如果枚举数成功地推进到下一个元素，则为 true；如果枚举数越过集合的结尾，则为 false。

实现

异常 | 条件
InvalidOperationException | 在创建了枚举数后集合被修改了。

在创建枚举数之后或在调用 Reset 之后，枚举数定位于集合的第一个元素之前，而且对 MoveNext 的第一次调用将枚举数移动到集合的第一个元素的位置。一旦越过集合的结尾，在调用 Reset 之前，对 MoveNext 的后续调用返回 false。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。 在创建枚举数之后或在调用 Reset 之后，枚举数定位于集合的第一个元素之前，而且对 MoveNext 的第一次调用将枚举数移动到集合的第一个元素的位置。一旦越过集合的结尾，在调用 Reset 之前，对 MoveNext 的后续调用返回 false。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。 在创建枚举数之后或在调用 Reset 之后，枚举数定位于集合的第一个元素之前，而且对 MoveNext 的第一次调用将枚举数移动到集合的第一个元素的位置。一旦越过集合的结尾，在调用 Reset 之前，对 MoveNext 的后续调用返回 false。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。 在创建枚举数之后或在调用 Reset 之后，枚举数定位于集合的第一个元素之前，而且对 MoveNext 的第一次调用将枚举数移动到集合的第一个元素的位置。一旦越过集合的结尾，在调用 Reset 之前，对 MoveNext 的后续调用返回 false。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbEnumerator 类
DbEnumerator 成员
System.Data.Common 命名空间


DbEnumerator ..::.Reset 方法

DbEnumerator
.
.
::
.
Reset 方法
DbEnumerator 类

将枚举数设置为其初始位置，该位置位于集合中第一个元素之前。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Reset
public void Reset()
public:
virtual void Reset() sealed
abstract Reset : unit -> unit
override Reset : unit -> unit

实现

异常 | 条件
InvalidOperationException | 在创建了枚举数后集合被修改了。

只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。 只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbEnumerator 类
DbEnumerator 成员
System.Data.Common 命名空间


DbEnumerator 属性

DbEnumerator 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbEnumerator 类

DbEnumerator 类型公开以下成员。

名称 说明
页首

参考

DbEnumerator 类
System.Data.Common 命名空间


DbEnumerator ..::.Current 属性

DbEnumerator
.
.
::
.
Current 属性
DbEnumerator 类

获取集合中的当前元素。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Current As Object
    Get
public Object Current { get; }
public:
virtual property Object^ Current {
    Object^ get () sealed;
}
abstract Current : Object
override Current : Object

属性值

类型： System Object
集合中的当前元素。

实现

异常 | 条件
InvalidOperationException | 枚举数定位在该集合的第一个元素之前或最后一个元素之后。

创建枚举器或调用 Reset 后，必须调用 MoveNext 使枚举器前进到集合的第一个元素，才能读取 Current 的值；否则 Current 为未定义。如果对 MoveNext 的最后一次调用返回 false（指示集合的末尾），则 Current 也会引发异常。Current 不移动枚举器的位置，而且在调用 MoveNext 或 Reset 之前，对 Current 的连续调用返回同一个对象。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，那么即使枚举数已经失效，Current 也会返回其所设置的元素。 创建枚举器或调用 Reset 后，必须调用 MoveNext 使枚举器前进到集合的第一个元素，才能读取 Current 的值；否则 Current 为未定义。如果对 MoveNext 的最后一次调用返回 false（指示集合的末尾），则 Current 也会引发异常。Current 不移动枚举器的位置，而且在调用 MoveNext 或 Reset 之前，对 Current 的连续调用返回同一个对象。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，那么即使枚举数已经失效，Current 也会返回其所设置的元素。 创建枚举器或调用 Reset 后，必须调用 MoveNext 使枚举器前进到集合的第一个元素，才能读取 Current 的值；否则 Current 为未定义。如果对 MoveNext 的最后一次调用返回 false（指示集合的末尾），则 Current 也会引发异常。Current 不移动枚举器的位置，而且在调用 MoveNext 或 Reset 之前，对 Current 的连续调用返回同一个对象。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，那么即使枚举数已经失效，Current 也会返回其所设置的元素。 创建枚举器或调用 Reset 后，必须调用 MoveNext 使枚举器前进到集合的第一个元素，才能读取 Current 的值；否则 Current 为未定义。如果对 MoveNext 的最后一次调用返回 false（指示集合的末尾），则 Current 也会引发异常。Current 不移动枚举器的位置，而且在调用 MoveNext 或 Reset 之前，对 Current 的连续调用返回同一个对象。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，那么即使枚举数已经失效，Current 也会返回其所设置的元素。 创建枚举器或调用 Reset 后，必须调用 MoveNext 使枚举器前进到集合的第一个元素，才能读取 Current 的值；否则 Current 为未定义。如果对 MoveNext 的最后一次调用返回 false（指示集合的末尾），则 Current 也会引发异常。Current 不移动枚举器的位置，而且在调用 MoveNext 或 Reset 之前，对 Current 的连续调用返回同一个对象。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，那么即使枚举数已经失效，Current 也会返回其所设置的元素。 创建枚举器或调用 Reset 后，必须调用 MoveNext 使枚举器前进到集合的第一个元素，才能读取 Current 的值；否则 Current 为未定义。如果对 MoveNext 的最后一次调用返回 false（指示集合的末尾），则 Current 也会引发异常。Current 不移动枚举器的位置，而且在调用 MoveNext 或 Reset 之前，对 Current 的连续调用返回同一个对象。只要集合保持不变，枚举数就保持有效。如果对集合进行了更改（例如添加、修改或删除元素），则该枚举数将失效且不可恢复，并且下一次对 MoveNext 或 Reset 的调用将引发 InvalidOperationException。如果在 MoveNext 和 Current 之间修改了集合，那么即使枚举数已经失效，Current 也会返回其所设置的元素。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbEnumerator 类
DbEnumerator 成员
System.Data.Common 命名空间


DbException 类

DbException 类
成员

代表数据源引发的所有异常的基类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
Public MustInherit Class DbException _
    Inherits ExternalException
[SerializableAttribute]
public abstract class DbException : ExternalException
[SerializableAttribute]
public ref class DbException abstract : public ExternalException
[<AbstractClassAttribute>]
[<SerializableAttribute>]
type DbException =
    class
        inherit ExternalException
    end

DbException 类是一个抽象类，用作提供程序特定的异常类实现的基类。

System.Data.Common System.Data.Common..::.DbExceptionDbException

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

DbException 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbException 成员

DbException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbException 类

代表数据源引发的所有异常的基类。

DbException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbException 类
System.Data.Common 命名空间


DbException 构造函数

DbException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbException 类

初始化 DbException 类的新实例。

名称 说明
页首

DbException 类是一个抽象类，用作提供程序特定的异常类实现的基类。

参考

DbException 类
DbException 成员
System.Data.Common 命名空间


DbException 构造函数

DbException 构造函数
DbException 类

初始化 DbException 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbException()
protected:
DbException()
new : unit -> DbException

DbException 类是一个抽象类，用作提供程序特定的异常类实现的基类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

DbException 类
DbException 成员
DbException 重载
System.Data.Common 命名空间


DbException 构造函数 (String)

DbException 构造函数 (String)
DbException 类

使用指定的错误消息初始化 DbException 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    message As String _
)
protected DbException(
    string message
)
protected:
DbException(
    String^ message
)
new :
        message:string -> DbException

参数

message
类型： System String
为此异常显示的消息。

DbException 类是一个抽象类，用作提供程序特定的异常类实现的基类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

DbException 类
DbException 成员
DbException 重载
System.Data.Common 命名空间


DbException 构造函数 (SerializationInfo, StreamingContext)

DbException 构造函数 (SerializationInfo, StreamingContext)
DbException 类

用指定的序列化信息和上下文初始化 DbException 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    info As SerializationInfo, _
    context As StreamingContext _
)
protected DbException(
    SerializationInfo info,
    StreamingContext context
)
protected:
DbException(
    SerializationInfo^ info,
    StreamingContext context
)
new :
        info:SerializationInfo *
        context:StreamingContext -> DbException

参数

info
类型： System.Runtime.Serialization SerializationInfo
SerializationInfo，它存有有关所引发异常的序列化的对象数据。
context
类型： System.Runtime.Serialization StreamingContext
StreamingContext，它包含有关源或目标的上下文信息。

DbException 类是一个抽象类，用作提供程序特定的异常类实现的基类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbException 类
DbException 成员
DbException 重载
System.Data.Common 命名空间


DbException 构造函数 (String, Exception)

DbException 构造函数 (String, Exception)
DbException 类

使用指定的错误消息和对导致此异常的内部异常的引用初始化 DbException 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    message As String, _
    innerException As Exception _
)
protected DbException(
    string message,
    Exception innerException
)
protected:
DbException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> DbException

参数

message
类型： System String
错误消息字符串。
innerException
类型： System Exception
内部异常引用。

DbException 类是一个抽象类，用作提供程序特定的异常类实现的基类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

DbException 类
DbException 成员
DbException 重载
System.Data.Common 命名空间


DbException 构造函数 (String, Int32)

DbException 构造函数 (String, Int32)
DbException 类

使用指定的错误消息和错误代码初始化 DbException 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New ( _
    message As String, _
    errorCode As Integer _
)
protected DbException(
    string message,
    int errorCode
)
protected:
DbException(
    String^ message,
    int errorCode
)
new :
        message:string *
        errorCode:int -> DbException

参数

message
类型： System String
解释异常原因的错误消息。
errorCode
类型： System Int32
异常的错误代码。

DbException 类是一个抽象类，用作提供程序特定的异常类实现的基类。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0

参考

DbException 类
DbException 成员
DbException 重载
System.Data.Common 命名空间


DbException 方法

DbException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbException 类

DbException 类型公开以下成员。

名称 说明
页首

参考

DbException 类
System.Data.Common 命名空间


DbException 属性

DbException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbException 类

DbException 类型公开以下成员。

名称 说明
页首

参考

DbException 类
System.Data.Common 命名空间


DbException 事件

DbException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbException 类

DbException 类型公开以下成员。

名称 说明
页首

参考

DbException 类
System.Data.Common 命名空间


DbMetaDataCollectionNames 类

DbMetaDataCollectionNames 类
成员

提供已知的 MetaDataCollections 的常量列表：DataSourceInformation、DataTypes、MetaDataCollections、ReservedWords 和 Restrictions。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DbMetaDataCollectionNames
public static class DbMetaDataCollectionNames
public ref class DbMetaDataCollectionNames abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type DbMetaDataCollectionNames =  class end

System.Data.Common System.Data.Common..::.DbMetaDataCollectionNamesDbMetaDataCollectionNames
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataCollectionNames 成员
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbMetaDataCollectionNames 成员

DbMetaDataCollectionNames 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbMetaDataCollectionNames 类

提供已知的 MetaDataCollections 的常量列表：DataSourceInformation、DataTypes、MetaDataCollections、ReservedWords 和 Restrictions。

DbMetaDataCollectionNames 类型公开以下成员。

名称 说明
页首

参考

DbMetaDataCollectionNames 类
System.Data.Common 命名空间


DbMetaDataCollectionNames 字段

DbMetaDataCollectionNames 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbMetaDataCollectionNames 类

DbMetaDataCollectionNames 类型公开以下成员。

名称 说明
页首

参考

DbMetaDataCollectionNames 类
System.Data.Common 命名空间


DbMetaDataCollectionNames ..::.DataSourceInformation 字段

DbMetaDataCollectionNames
.
.
::
.
DataSourceInformation 字段
DbMetaDataCollectionNames 类

与表示 DataSourceInformation 集合的 GetSchema 方法一起使用的常量。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly DataSourceInformation As String
public static readonly string DataSourceInformation
public:
static initonly String^ DataSourceInformation
static val DataSourceInformation: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataCollectionNames 类
DbMetaDataCollectionNames 成员
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbMetaDataCollectionNames ..::.DataTypes 字段

DbMetaDataCollectionNames
.
.
::
.
DataTypes 字段
DbMetaDataCollectionNames 类

与表示 DataTypes 集合的 GetSchema 方法一起使用的常量。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly DataTypes As String
public static readonly string DataTypes
public:
static initonly String^ DataTypes
static val DataTypes: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataCollectionNames 类
DbMetaDataCollectionNames 成员
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbMetaDataCollectionNames ..::.MetaDataCollections 字段

DbMetaDataCollectionNames
.
.
::
.
MetaDataCollections 字段
DbMetaDataCollectionNames 类

与表示 MetaDataCollections 集合的 GetSchema 方法一起使用的常量。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly MetaDataCollections As String
public static readonly string MetaDataCollections
public:
static initonly String^ MetaDataCollections
static val MetaDataCollections: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataCollectionNames 类
DbMetaDataCollectionNames 成员
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbMetaDataCollectionNames ..::.ReservedWords 字段

DbMetaDataCollectionNames
.
.
::
.
ReservedWords 字段
DbMetaDataCollectionNames 类

与表示 ReservedWords 集合的 GetSchema 方法一起使用的常量。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ReservedWords As String
public static readonly string ReservedWords
public:
static initonly String^ ReservedWords
static val ReservedWords: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataCollectionNames 类
DbMetaDataCollectionNames 成员
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbMetaDataCollectionNames ..::.Restrictions 字段

DbMetaDataCollectionNames
.
.
::
.
Restrictions 字段
DbMetaDataCollectionNames 类

与表示 Restrictions 集合的 GetSchema 方法一起使用的常量。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly Restrictions As String
public static readonly string Restrictions
public:
static initonly String^ Restrictions
static val Restrictions: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataCollectionNames 类
DbMetaDataCollectionNames 成员
System.Data.Common 命名空间

其他资源

检索数据库架构信息 (ADO.NET)


DbMetaDataColumnNames 类

DbMetaDataColumnNames 类
成员

提供静态值，这些值用于包含在 DataTable 中的 MetaDataCollection 对象中的列名称。DataTable 由 GetSchema 方法创建。 提供静态值，这些值用于包含在 DataTable 中的 MetaDataCollection 对象中的列名称。DataTable 由 GetSchema 方法创建。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DbMetaDataColumnNames
public static class DbMetaDataColumnNames
public ref class DbMetaDataColumnNames abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type DbMetaDataColumnNames =  class end

System.Data.Common System.Data.Common..::.DbMetaDataColumnNamesDbMetaDataColumnNames
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames 成员

DbMetaDataColumnNames 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbMetaDataColumnNames 类

提供静态值，这些值用于包含在 DataTable 中的 MetaDataCollection 对象中的列名称。DataTable 由 GetSchema 方法创建。 提供静态值，这些值用于包含在 DataTable 中的 MetaDataCollection 对象中的列名称。DataTable 由 GetSchema 方法创建。

DbMetaDataColumnNames 类型公开以下成员。

名称 说明
页首

参考

DbMetaDataColumnNames 类
System.Data.Common 命名空间


DbMetaDataColumnNames 字段

DbMetaDataColumnNames 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbMetaDataColumnNames 类

DbMetaDataColumnNames 类型公开以下成员。

名称 说明
页首

参考

DbMetaDataColumnNames 类
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.CollectionName 字段

DbMetaDataColumnNames
.
.
::
.
CollectionName 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 CollectionName 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly CollectionName As String
public static readonly string CollectionName
public:
static initonly String^ CollectionName
static val CollectionName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.ColumnSize 字段

DbMetaDataColumnNames
.
.
::
.
ColumnSize 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 ColumnSize 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ColumnSize As String
public static readonly string ColumnSize
public:
static initonly String^ ColumnSize
static val ColumnSize: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.CompositeIdentifierSeparatorPattern 字段

DbMetaDataColumnNames
.
.
::
.
CompositeIdentifierSeparatorPattern 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 CompositeIdentifierSeparatorPattern 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly CompositeIdentifierSeparatorPattern As String
public static readonly string CompositeIdentifierSeparatorPattern
public:
static initonly String^ CompositeIdentifierSeparatorPattern
static val CompositeIdentifierSeparatorPattern: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.CreateFormat 字段

DbMetaDataColumnNames
.
.
::
.
CreateFormat 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 CreateFormat 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly CreateFormat As String
public static readonly string CreateFormat
public:
static initonly String^ CreateFormat
static val CreateFormat: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.CreateParameters 字段

DbMetaDataColumnNames
.
.
::
.
CreateParameters 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 CreateParameters 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly CreateParameters As String
public static readonly string CreateParameters
public:
static initonly String^ CreateParameters
static val CreateParameters: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.DataSourceProductName 字段

DbMetaDataColumnNames
.
.
::
.
DataSourceProductName 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 DataSourceProductName 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly DataSourceProductName As String
public static readonly string DataSourceProductName
public:
static initonly String^ DataSourceProductName
static val DataSourceProductName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.DataSourceProductVersion 字段

DbMetaDataColumnNames
.
.
::
.
DataSourceProductVersion 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 DataSourceProductVersion 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly DataSourceProductVersion As String
public static readonly string DataSourceProductVersion
public:
static initonly String^ DataSourceProductVersion
static val DataSourceProductVersion: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.DataSourceProductVersionNormalized 字段

DbMetaDataColumnNames
.
.
::
.
DataSourceProductVersionNormalized 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 DataSourceProductVersionNormalized 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly DataSourceProductVersionNormalized As String
public static readonly string DataSourceProductVersionNormalized
public:
static initonly String^ DataSourceProductVersionNormalized
static val DataSourceProductVersionNormalized: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.DataType 字段

DbMetaDataColumnNames
.
.
::
.
DataType 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 DataType 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly DataType As String
public static readonly string DataType
public:
static initonly String^ DataType
static val DataType: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.GroupByBehavior 字段

DbMetaDataColumnNames
.
.
::
.
GroupByBehavior 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 GroupByBehavior 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly GroupByBehavior As String
public static readonly string GroupByBehavior
public:
static initonly String^ GroupByBehavior
static val GroupByBehavior: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IdentifierCase 字段

DbMetaDataColumnNames
.
.
::
.
IdentifierCase 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 IdentifierCase 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IdentifierCase As String
public static readonly string IdentifierCase
public:
static initonly String^ IdentifierCase
static val IdentifierCase: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IdentifierPattern 字段

DbMetaDataColumnNames
.
.
::
.
IdentifierPattern 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 IdentifierPattern 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IdentifierPattern As String
public static readonly string IdentifierPattern
public:
static initonly String^ IdentifierPattern
static val IdentifierPattern: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsAutoIncrementable 字段

DbMetaDataColumnNames
.
.
::
.
IsAutoIncrementable 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsAutoIncrementable 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsAutoIncrementable As String
public static readonly string IsAutoIncrementable
public:
static initonly String^ IsAutoIncrementable
static val IsAutoIncrementable: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsBestMatch 字段

DbMetaDataColumnNames
.
.
::
.
IsBestMatch 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsBestMatch 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsBestMatch As String
public static readonly string IsBestMatch
public:
static initonly String^ IsBestMatch
static val IsBestMatch: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsCaseSensitive 字段

DbMetaDataColumnNames
.
.
::
.
IsCaseSensitive 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsCaseSensitive 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsCaseSensitive As String
public static readonly string IsCaseSensitive
public:
static initonly String^ IsCaseSensitive
static val IsCaseSensitive: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsConcurrencyType 字段

DbMetaDataColumnNames
.
.
::
.
IsConcurrencyType 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsConcurrencyType 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsConcurrencyType As String
public static readonly string IsConcurrencyType
public:
static initonly String^ IsConcurrencyType
static val IsConcurrencyType: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsFixedLength 字段

DbMetaDataColumnNames
.
.
::
.
IsFixedLength 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsFixedLength 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsFixedLength As String
public static readonly string IsFixedLength
public:
static initonly String^ IsFixedLength
static val IsFixedLength: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsFixedPrecisionScale 字段

DbMetaDataColumnNames
.
.
::
.
IsFixedPrecisionScale 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsFixedPrecisionScale 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsFixedPrecisionScale As String
public static readonly string IsFixedPrecisionScale
public:
static initonly String^ IsFixedPrecisionScale
static val IsFixedPrecisionScale: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsLiteralSupported 字段

DbMetaDataColumnNames
.
.
::
.
IsLiteralSupported 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsLiteralSupported 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsLiteralSupported As String
public static readonly string IsLiteralSupported
public:
static initonly String^ IsLiteralSupported
static val IsLiteralSupported: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsLong 字段

DbMetaDataColumnNames
.
.
::
.
IsLong 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsLong 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsLong As String
public static readonly string IsLong
public:
static initonly String^ IsLong
static val IsLong: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsNullable 字段

DbMetaDataColumnNames
.
.
::
.
IsNullable 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsNullable 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsNullable As String
public static readonly string IsNullable
public:
static initonly String^ IsNullable
static val IsNullable: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsSearchable 字段

DbMetaDataColumnNames
.
.
::
.
IsSearchable 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsSearchable 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsSearchable As String
public static readonly string IsSearchable
public:
static initonly String^ IsSearchable
static val IsSearchable: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsSearchableWithLike 字段

DbMetaDataColumnNames
.
.
::
.
IsSearchableWithLike 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsSearchableWithLike 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsSearchableWithLike As String
public static readonly string IsSearchableWithLike
public:
static initonly String^ IsSearchableWithLike
static val IsSearchableWithLike: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.IsUnsigned 字段

DbMetaDataColumnNames
.
.
::
.
IsUnsigned 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 IsUnsigned 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsUnsigned As String
public static readonly string IsUnsigned
public:
static initonly String^ IsUnsigned
static val IsUnsigned: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.LiteralPrefix 字段

DbMetaDataColumnNames
.
.
::
.
LiteralPrefix 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 LiteralPrefix 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly LiteralPrefix As String
public static readonly string LiteralPrefix
public:
static initonly String^ LiteralPrefix
static val LiteralPrefix: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.LiteralSuffix 字段

DbMetaDataColumnNames
.
.
::
.
LiteralSuffix 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 LiteralSuffix 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly LiteralSuffix As String
public static readonly string LiteralSuffix
public:
static initonly String^ LiteralSuffix
static val LiteralSuffix: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.MaximumScale 字段

DbMetaDataColumnNames
.
.
::
.
MaximumScale 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 MaximumScale 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly MaximumScale As String
public static readonly string MaximumScale
public:
static initonly String^ MaximumScale
static val MaximumScale: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.MinimumScale 字段

DbMetaDataColumnNames
.
.
::
.
MinimumScale 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 MinimumScale 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly MinimumScale As String
public static readonly string MinimumScale
public:
static initonly String^ MinimumScale
static val MinimumScale: string

对于数字数据类型，这指示小数点右边的最小位数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.NumberOfIdentifierParts 字段

DbMetaDataColumnNames
.
.
::
.
NumberOfIdentifierParts 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 MetaDataCollections 集合中的 NumberOfIdentifierParts 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly NumberOfIdentifierParts As String
public static readonly string NumberOfIdentifierParts
public:
static initonly String^ NumberOfIdentifierParts
static val NumberOfIdentifierParts: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.NumberOfRestrictions 字段

DbMetaDataColumnNames
.
.
::
.
NumberOfRestrictions 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 MetaDataCollections 集合中的 NumberOfRestrictions 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly NumberOfRestrictions As String
public static readonly string NumberOfRestrictions
public:
static initonly String^ NumberOfRestrictions
static val NumberOfRestrictions: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.OrderByColumnsInSelect 字段

DbMetaDataColumnNames
.
.
::
.
OrderByColumnsInSelect 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 OrderByColumnsInSelect 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly OrderByColumnsInSelect As String
public static readonly string OrderByColumnsInSelect
public:
static initonly String^ OrderByColumnsInSelect
static val OrderByColumnsInSelect: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.ParameterMarkerFormat 字段

DbMetaDataColumnNames
.
.
::
.
ParameterMarkerFormat 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 ParameterMarkerFormat 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ParameterMarkerFormat As String
public static readonly string ParameterMarkerFormat
public:
static initonly String^ ParameterMarkerFormat
static val ParameterMarkerFormat: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.ParameterMarkerPattern 字段

DbMetaDataColumnNames
.
.
::
.
ParameterMarkerPattern 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 ParameterMarkerPattern 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ParameterMarkerPattern As String
public static readonly string ParameterMarkerPattern
public:
static initonly String^ ParameterMarkerPattern
static val ParameterMarkerPattern: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.ParameterNameMaxLength 字段

DbMetaDataColumnNames
.
.
::
.
ParameterNameMaxLength 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 ParameterNameMaxLength 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ParameterNameMaxLength As String
public static readonly string ParameterNameMaxLength
public:
static initonly String^ ParameterNameMaxLength
static val ParameterNameMaxLength: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.ParameterNamePattern 字段

DbMetaDataColumnNames
.
.
::
.
ParameterNamePattern 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 ParameterNamePattern 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ParameterNamePattern As String
public static readonly string ParameterNamePattern
public:
static initonly String^ ParameterNamePattern
static val ParameterNamePattern: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.ProviderDbType 字段

DbMetaDataColumnNames
.
.
::
.
ProviderDbType 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 ProviderDbType 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ProviderDbType As String
public static readonly string ProviderDbType
public:
static initonly String^ ProviderDbType
static val ProviderDbType: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.QuotedIdentifierCase 字段

DbMetaDataColumnNames
.
.
::
.
QuotedIdentifierCase 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 QuotedIdentifierCase 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly QuotedIdentifierCase As String
public static readonly string QuotedIdentifierCase
public:
static initonly String^ QuotedIdentifierCase
static val QuotedIdentifierCase: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.QuotedIdentifierPattern 字段

DbMetaDataColumnNames
.
.
::
.
QuotedIdentifierPattern 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 QuotedIdentifierPattern 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly QuotedIdentifierPattern As String
public static readonly string QuotedIdentifierPattern
public:
static initonly String^ QuotedIdentifierPattern
static val QuotedIdentifierPattern: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.ReservedWord 字段

DbMetaDataColumnNames
.
.
::
.
ReservedWord 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 ReservedWords 集合中的 ReservedWord 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ReservedWord As String
public static readonly string ReservedWord
public:
static initonly String^ ReservedWord
static val ReservedWord: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.StatementSeparatorPattern 字段

DbMetaDataColumnNames
.
.
::
.
StatementSeparatorPattern 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 StatementSeparatorPattern 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly StatementSeparatorPattern As String
public static readonly string StatementSeparatorPattern
public:
static initonly String^ StatementSeparatorPattern
static val StatementSeparatorPattern: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.StringLiteralPattern 字段

DbMetaDataColumnNames
.
.
::
.
StringLiteralPattern 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 StringLiteralPattern 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly StringLiteralPattern As String
public static readonly string StringLiteralPattern
public:
static initonly String^ StringLiteralPattern
static val StringLiteralPattern: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.SupportedJoinOperators 字段

DbMetaDataColumnNames
.
.
::
.
SupportedJoinOperators 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataSourceInformation 集合中的 SupportedJoinOperators 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly SupportedJoinOperators As String
public static readonly string SupportedJoinOperators
public:
static initonly String^ SupportedJoinOperators
static val SupportedJoinOperators: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbMetaDataColumnNames ..::.TypeName 字段

DbMetaDataColumnNames
.
.
::
.
TypeName 字段
DbMetaDataColumnNames 类

由 GetSchema 方法用来创建 DataTypes 集合中的 TypeName 列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly TypeName As String
public static readonly string TypeName
public:
static initonly String^ TypeName
static val TypeName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbMetaDataColumnNames 类
DbMetaDataColumnNames 成员
System.Data.Common 命名空间


DbParameter 类

DbParameter 类
成员

表示 DbCommand 的参数，还可表示该参数到一个 DataSet 列的映射。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbParameter _
    Inherits MarshalByRefObject _
    Implements IDbDataParameter, IDataParameter
public abstract class DbParameter : MarshalByRefObject,
    IDbDataParameter, IDataParameter
public ref class DbParameter abstract : public MarshalByRefObject,
    IDbDataParameter, IDataParameter
[<AbstractClassAttribute>]
type DbParameter =
    class
        inherit MarshalByRefObject
        interface IDbDataParameter
        interface IDataParameter
    end

System.Data.Common System.Data.Common..::.DbParameterDbParameter

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbParameter 成员

DbParameter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameter 类

表示 DbCommand 的参数，还可表示该参数到一个 DataSet 列的映射。

DbParameter 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbParameter 类
System.Data.Common 命名空间


DbParameter 构造函数

DbParameter 构造函数
DbParameter 类

初始化 DbParameter 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbParameter()
protected:
DbParameter()
new : unit -> DbParameter

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbParameter 方法

DbParameter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameter 类

DbParameter 类型公开以下成员。

名称 说明
页首

参考

DbParameter 类
System.Data.Common 命名空间


DbParameter ..::.MemberwiseClone 方法

DbParameter
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameter 类

名称 说明
页首

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.ResetDbType 方法

DbParameter
.
.
::
.
ResetDbType 方法
DbParameter 类

将 DbType 属性重置为其原始设置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub ResetDbType
public abstract void ResetDbType()
public:
virtual void ResetDbType() abstract
abstract ResetDbType : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter 属性

DbParameter 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameter 类

DbParameter 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbParameter 类
System.Data.Common 命名空间


DbParameter ..::.DbType 属性

DbParameter
.
.
::
.
DbType 属性
DbParameter 类

获取或设置参数的 DbType。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride Property DbType As DbType
    Get
    Set
[BrowsableAttribute(false)]
public abstract DbType DbType { get; set; }
[BrowsableAttribute(false)]
public:
virtual property DbType DbType {
    DbType get () abstract;
    void set (DbType value) abstract;
}
[<BrowsableAttribute(false)>]
abstract DbType : DbType with get, set

属性值

类型： System.Data DbType
DbType 值之一。默认值为 String。 DbType 值之一。默认值为 String。

实现

异常 | 条件
ArgumentException | 该属性未设置为有效的 DbType。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.Direction 属性

DbParameter
.
.
::
.
Direction 属性
DbParameter 类

获取或设置一个值，该值指示参数是只可输入、只可输出、双向还是存储过程返回值参数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property Direction As ParameterDirection
    Get
    Set
public abstract ParameterDirection Direction { get; set; }
public:
virtual property ParameterDirection Direction {
    ParameterDirection get () abstract;
    void set (ParameterDirection value) abstract;
}
abstract Direction : ParameterDirection with get, set

属性值

类型： System.Data ParameterDirection
ParameterDirection 值之一。默认值为 Input。 ParameterDirection 值之一。默认值为 Input。

实现

异常 | 条件
ArgumentException | 该属性未设置为有效的 ParameterDirection 值之一。

如果 ParameterDirection 是输出，而执行的关联 DbCommand 不返回值，则 DbParameter 包含 null 值。

只有对 DbDataReader 调用 Close 或 Dispose 后，才能访问通过调用 ExecuteReader 返回的 Output、InputOut 和 ReturnValue 参数。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.IDbDataParameter ..::.Precision 属性

DbParameter
.
.
::
.
IDbDataParameter
.
.
::
.
Precision 属性
DbParameter 类

指示数值参数的精度。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Precision As Byte
    Implements IDbDataParameter.Precision
    Get
    Set
byte IDbDataParameter.Precision { get; set; }
private:
virtual property unsigned char Precision {
    unsigned char get () sealed = IDbDataParameter::Precision::get;
    void set (unsigned char value) sealed = IDbDataParameter::Precision::set;
}
private abstract Precision : byte with get, set
private override Precision : byte with get, set

属性值

类型： System Byte
用于表示数据提供程序 Parameter 对象的 Value 属性的最大数字位数。默认值为 0，它表示数据提供程序设置 Value 的精度。 用于表示数据提供程序 Parameter 对象的 Value 属性的最大数字位数。默认值为 0，它表示数据提供程序设置 Value 的精度。

实现

此成员是显式的接口成员实现。它只能在 DbParameter 实例被强制转换为 IDbDataParameter 接口时使用。 此成员是显式的接口成员实现。它只能在 DbParameter 实例被强制转换为 IDbDataParameter 接口时使用。

有关更多信息，请参见IDbDataParameter..::.Precision。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.IDbDataParameter ..::.Scale 属性

DbParameter
.
.
::
.
IDbDataParameter
.
.
::
.
Scale 属性
DbParameter 类

有关此成员的说明，请参见 IDbDataParameter..::.Scale。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Scale As Byte Implements IDbDataParameter.Scale
    Get
    Set
byte IDbDataParameter.Scale { get; set; }
private:
virtual property unsigned char Scale {
    unsigned char get () sealed = IDbDataParameter::Scale::get;
    void set (unsigned char value) sealed = IDbDataParameter::Scale::set;
}
private abstract Scale : byte with get, set
private override Scale : byte with get, set

属性值

类型： System Byte
要将 Value 解析为的小数位数。默认值为 0。 要将 Value 解析为的小数位数。默认值为 0。

实现

此成员是显式的接口成员实现。它只能在 DbParameter 实例被强制转换为 IDbDataParameter 接口时使用。 此成员是显式的接口成员实现。它只能在 DbParameter 实例被强制转换为 IDbDataParameter 接口时使用。

有关更多信息，请参见 Scale。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.IsNullable 属性

DbParameter
.
.
::
.
IsNullable 属性
DbParameter 类

获取或设置一个值，该值指示参数是否接受 null 值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride Property IsNullable As Boolean
    Get
    Set
[BrowsableAttribute(false)]
public abstract bool IsNullable { get; set; }
[BrowsableAttribute(false)]
public:
virtual property bool IsNullable {
    bool get () abstract;
    void set (bool value) abstract;
}
[<BrowsableAttribute(false)>]
abstract IsNullable : bool with get, set

属性值

类型： System Boolean
如果接受 null 值，则为 true；否则为 false。默认值为 false。 如果接受 null 值，则为 true；否则为 false。默认值为 false。

实现

使用 DBNull 类来进行处理 null 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.ParameterName 属性

DbParameter
.
.
::
.
ParameterName 属性
DbParameter 类

获取或设置 DbParameter 的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property ParameterName As String
    Get
    Set
public abstract string ParameterName { get; set; }
public:
virtual property String^ ParameterName {
    String^ get () abstract;
    void set (String^ value) abstract;
}
abstract ParameterName : string with get, set

属性值

类型： System String
DbParameter 的名称。默认值为空字符串 ("")。 DbParameter 的名称。默认值为空字符串 ("")。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.Size 属性

DbParameter
.
.
::
.
Size 属性
DbParameter 类

获取或设置列中数据的最大大小（以字节为单位）。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property Size As Integer
    Get
    Set
public abstract int Size { get; set; }
public:
virtual property int Size {
    int get () abstract;
    void set (int value) abstract;
}
abstract Size : int with get, set

属性值

类型： System Int32
列中数据的最大大小（以字节为单位）。默认值是从参数值推导出的。 列中数据的最大大小（以字节为单位）。默认值是从参数值推导出的。

实现

Size 属性用于二进制和字符串类型。

对于非字符串数据类型和 ANSI 字符串数据，Size 属性是指字节数。对于 Unicode 字符串数据，Size 指的是字符数。字符串的计数不包括终止字符。 对于非字符串数据类型和 ANSI 字符串数据，Size 属性是指字节数。对于 Unicode 字符串数据，Size 指的是字符数。字符串的计数不包括终止字符。 对于非字符串数据类型和 ANSI 字符串数据，Size 属性是指字节数。对于 Unicode 字符串数据，Size 指的是字符数。字符串的计数不包括终止字符。

对于可变长度数据类型，Size 描述传输给服务器的最大数据量。例如，对于一个 Unicode 字符串值，可以用 Size 将发送到服务器的数据量限制为前一百个字符。 对于可变长度数据类型，Size 描述传输给服务器的最大数据量。例如，对于一个 Unicode 字符串值，可以用 Size 将发送到服务器的数据量限制为前一百个字符。

对于双向参数、输出参数和返回值，必须设置 Size 的值。输入参数时对此没有要求，如果没有显式设置，则该值会在执行参数化语句时根据指定参数的实际大小推断而得出。 对于双向参数、输出参数和返回值，必须设置 Size 的值。输入参数时对此没有要求，如果没有显式设置，则该值会在执行参数化语句时根据指定参数的实际大小推断而得出。

通过设置 Value，可以推导出参数的 DbType 和 Size 属性。因此，无需指定它们。但是，在 DbParameter 属性设置中并未公开它们。例如，如果已推断出参数的大小，则语句执行后 Size 不包含推断的值。 通过设置 Value，可以推导出参数的 DbType 和 Size 属性。因此，无需指定它们。但是，在 DbParameter 属性设置中并未公开它们。例如，如果已推断出参数的大小，则语句执行后 Size 不包含推断的值。 通过设置 Value，可以推导出参数的 DbType 和 Size 属性。因此，无需指定它们。但是，在 DbParameter 属性设置中并未公开它们。例如，如果已推断出参数的大小，则语句执行后 Size 不包含推断的值。 通过设置 Value，可以推导出参数的 DbType 和 Size 属性。因此，无需指定它们。但是，在 DbParameter 属性设置中并未公开它们。例如，如果已推断出参数的大小，则语句执行后 Size 不包含推断的值。

对于固定长度数据类型，忽略 Size 的值。它可以被检索来提供信息，并返回在向服务器传输参数值时提供程序所使用的最大字节数。 对于固定长度数据类型，忽略 Size 的值。它可以被检索来提供信息，并返回在向服务器传输参数值时提供程序所使用的最大字节数。

如果为 DbParameter 提供的值的大小超过了指定的 Size，DbParameter 的 Value 将包含指定的值，该值被截成了 DbParameter 的大小。

对于 DbType.String 类型的参数，Size 的值为 Unicode 字符的长度。对于 DbType.Xml 类型的参数，将忽略 Size。 对于 DbType.String 类型的参数，Size 的值为 Unicode 字符的长度。对于 DbType.Xml 类型的参数，将忽略 Size。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.SourceColumn 属性

DbParameter
.
.
::
.
SourceColumn 属性
DbParameter 类

获取或设置源列的名称，该源列映射到 DataSet 并用于加载或返回 Value。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property SourceColumn As String
    Get
    Set
public abstract string SourceColumn { get; set; }
public:
virtual property String^ SourceColumn {
    String^ get () abstract;
    void set (String^ value) abstract;
}
abstract SourceColumn : string with get, set

属性值

类型： System String
映射到 DataSet 的源列的名称。默认值为空字符串。 映射到 DataSet 的源列的名称。默认值为空字符串。

实现

当 SourceColumn 设置为 Null 字符串以外的任何其他值时，将从名为 SourceColumn 的列中检索该参数值。如果 Direction 设置为 Input，则从 DataSet 中获取该值。如果 Direction 设置为 Output，则从数据源中获取该值。InputOutput 的 Direction 为两者的组合。 当 SourceColumn 设置为 Null 字符串以外的任何其他值时，将从名为 SourceColumn 的列中检索该参数值。如果 Direction 设置为 Input，则从 DataSet 中获取该值。如果 Direction 设置为 Output，则从数据源中获取该值。InputOutput 的 Direction 为两者的组合。 当 SourceColumn 设置为 Null 字符串以外的任何其他值时，将从名为 SourceColumn 的列中检索该参数值。如果 Direction 设置为 Input，则从 DataSet 中获取该值。如果 Direction 设置为 Output，则从数据源中获取该值。InputOutput 的 Direction 为两者的组合。 当 SourceColumn 设置为 Null 字符串以外的任何其他值时，将从名为 SourceColumn 的列中检索该参数值。如果 Direction 设置为 Input，则从 DataSet 中获取该值。如果 Direction 设置为 Output，则从数据源中获取该值。InputOutput 的 Direction 为两者的组合。

有关如何使用 SourceColumn 属性的更多信息，请参见 DataAdapter 参数 (ADO.NET) 和使用 DataAdapter 更新数据源 (ADO.NET)。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.SourceColumnNullMapping 属性

DbParameter
.
.
::
.
SourceColumnNullMapping 属性
DbParameter 类

设置或获取一个值，该值指示源列是否可为 null。这使得 DbCommandBuilder 能够正确地为可以为 null 的列生成 Update 语句。 设置或获取一个值，该值指示源列是否可为 null。这使得 DbCommandBuilder 能够正确地为可以为 null 的列生成 Update 语句。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property SourceColumnNullMapping As Boolean
    Get
    Set
public abstract bool SourceColumnNullMapping { get; set; }
public:
virtual property bool SourceColumnNullMapping {
    bool get () abstract;
    void set (bool value) abstract;
}
abstract SourceColumnNullMapping : bool with get, set

属性值

类型： System Boolean
如果源列可为 null，则为 true；如果不可为 null，则为 false。

SourceColumnNullMapping 由 DbCommandBuilder 使用，以便在处理可为 Null 的列时正确生成更新命令。通常，SourceColumnNullMapping 仅限于开发人员自 DbCommandBuilder 继承时使用。 SourceColumnNullMapping 由 DbCommandBuilder 使用，以便在处理可为 Null 的列时正确生成更新命令。通常，SourceColumnNullMapping 仅限于开发人员自 DbCommandBuilder 继承时使用。

DbCommandBuilder 使用此属性确定源列是否可为 null。如果可为 null，则将此属性设置为 true；如果不可为 null，则设置为 false。DbCommandBuilder 正在生成其 Update 语句时，会检查每个参数的 SourceColumnNullMapping。如果该属性为 true，DbCommandBuilder 将生成 WHERE 子句，如下所示（在此查询表达式中，“FieldName”表示字段的名称）： DbCommandBuilder 使用此属性确定源列是否可为 null。如果可为 null，则将此属性设置为 true；如果不可为 null，则设置为 false。DbCommandBuilder 正在生成其 Update 语句时，会检查每个参数的 SourceColumnNullMapping。如果该属性为 true，DbCommandBuilder 将生成 WHERE 子句，如下所示（在此查询表达式中，“FieldName”表示字段的名称）： DbCommandBuilder 使用此属性确定源列是否可为 null。如果可为 null，则将此属性设置为 true；如果不可为 null，则设置为 false。DbCommandBuilder 正在生成其 Update 语句时，会检查每个参数的 SourceColumnNullMapping。如果该属性为 true，DbCommandBuilder 将生成 WHERE 子句，如下所示（在此查询表达式中，“FieldName”表示字段的名称）：

((@IsNull_FieldName = 1 AND FieldName IS NULL) OR
  (FieldName = @Original_FieldName))

如果此字段的 SourceColumnNullMapping 为 false，DbCommandBuilder 将生成下面的 WHERE 子句：

FieldName = @OriginalFieldName

此外，如果源字段包含 null，则 @IsNull_FieldName 包含 1；如果不包含 null，则包含 0。此机制可以优化 SQL Server 的性能，并提供可以在多个提供程序之间工作的通用代码。 此外，如果源字段包含 null，则 @IsNull_FieldName 包含 1；如果不包含 null，则包含 0。此机制可以优化 SQL Server 的性能，并提供可以在多个提供程序之间工作的通用代码。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.SourceVersion 属性

DbParameter
.
.
::
.
SourceVersion 属性
DbParameter 类

获取或设置在加载 Value 时使用的 DataRowVersion。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property SourceVersion As DataRowVersion
    Get
    Set
public abstract DataRowVersion SourceVersion { get; set; }
public:
virtual property DataRowVersion SourceVersion {
    DataRowVersion get () abstract;
    void set (DataRowVersion value) abstract;
}
abstract SourceVersion : DataRowVersion with get, set

属性值

类型： System.Data DataRowVersion
DataRowVersion 值之一。默认值为 Current。 DataRowVersion 值之一。默认值为 Current。

实现

异常 | 条件
ArgumentException | 该属性未设置为 DataRowVersion 值之一。

在 Update 操作过程中由 UpdateCommand 用来确定参数值是设置为 Current 还是 Original。这样可以更新主键。该属性设置为 DataRow.Item 属性使用的 DataRow 的版本，或设置为 DataRow 对象的 GetChildRows 方法的版本。 在 Update 操作过程中由 UpdateCommand 用来确定参数值是设置为 Current 还是 Original。这样可以更新主键。该属性设置为 DataRow.Item 属性使用的 DataRow 的版本，或设置为 DataRow 对象的 GetChildRows 方法的版本。 在 Update 操作过程中由 UpdateCommand 用来确定参数值是设置为 Current 还是 Original。这样可以更新主键。该属性设置为 DataRow.Item 属性使用的 DataRow 的版本，或设置为 DataRow 对象的 GetChildRows 方法的版本。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameter ..::.Value 属性

DbParameter
.
.
::
.
Value 属性
DbParameter 类

获取或设置该参数的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Property Value As Object
    Get
    Set
public abstract Object Value { get; set; }
public:
virtual property Object^ Value {
    Object^ get () abstract;
    void set (Object^ value) abstract;
}
abstract Value : Object with get, set

属性值

类型： System Object
一个 Object，它是该参数的值。默认值为 null。 一个 Object，它是该参数的值。默认值为 null。

实现

对于输入参数，该值绑定到向服务器发送的 DbCommand。对于输出参数和返回值参数，将在 DbDataReader 关闭后 DbCommand 完成时设置该值。 对于输入参数，该值绑定到向服务器发送的 DbCommand。对于输出参数和返回值参数，将在 DbDataReader 关闭后 DbCommand 完成时设置该值。

在向服务器发送空参数值时，用户必须指定 DBNull，而不是 Null。系统中的 null 值是没有值的空对象。DBNull 用于表示 null 值。 在向服务器发送空参数值时，用户必须指定 DBNull，而不是 Null。系统中的 null 值是没有值的空对象。DBNull 用于表示 null 值。 在向服务器发送空参数值时，用户必须指定 DBNull，而不是 Null。系统中的 null 值是没有值的空对象。DBNull 用于表示 null 值。

如果应用程序指定数据库类型，那么当提供程序将数据发送到服务器时，绑定值将转换为该类型。如果提供程序支持 IConvertible 接口，它会尝试转换任何类型的值。如果指定的类型与该值不兼容，则可能导致转换错误。 如果应用程序指定数据库类型，那么当提供程序将数据发送到服务器时，绑定值将转换为该类型。如果提供程序支持 IConvertible 接口，它会尝试转换任何类型的值。如果指定的类型与该值不兼容，则可能导致转换错误。 如果应用程序指定数据库类型，那么当提供程序将数据发送到服务器时，绑定值将转换为该类型。如果提供程序支持 IConvertible 接口，它会尝试转换任何类型的值。如果指定的类型与该值不兼容，则可能导致转换错误。

DbType 属性可以通过设置 Value 推导得出。

Value 属性被 DbDataAdapter.Update 覆盖。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameter 类
DbParameter 成员
System.Data.Common 命名空间


DbParameterCollection 类

DbParameterCollection 类
成员

与 DbCommand 相关的参数集合的基类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbParameterCollection _
    Inherits MarshalByRefObject _
    Implements IDataParameterCollection, IList, ICollection, IEnumerable
public abstract class DbParameterCollection : MarshalByRefObject,
    IDataParameterCollection, IList, ICollection, IEnumerable
public ref class DbParameterCollection abstract : public MarshalByRefObject,
    IDataParameterCollection, IList, ICollection, IEnumerable
[<AbstractClassAttribute>]
type DbParameterCollection =
    class
        inherit MarshalByRefObject
        interface IDataParameterCollection
        interface IList
        interface ICollection
        interface IEnumerable
    end

System.Data.Common System.Data.Common..::.DbParameterCollectionDbParameterCollection

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbParameterCollection 成员

DbParameterCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

与 DbCommand 相关的参数集合的基类。

DbParameterCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbParameterCollection 类
System.Data.Common 命名空间


DbParameterCollection 构造函数

DbParameterCollection 构造函数
DbParameterCollection 类

初始化 DbParameterCollection 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbParameterCollection()
protected:
DbParameterCollection()
new : unit -> DbParameterCollection

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbParameterCollection 方法

DbParameterCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

DbParameterCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbParameterCollection 类
System.Data.Common 命名空间


DbParameterCollection ..::.Add 方法

DbParameterCollection
.
.
::
.
Add 方法
DbParameterCollection 类

将具有指定值的 DbParameter 项添加到 DbParameterCollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function Add ( _
    value As Object _
) As Integer
public abstract int Add(
    Object value
)
public:
virtual int Add(
    Object^ value
) abstract
abstract Add :
        value:Object -> int

参数

value
类型： System Object
要添加到集合中的 DbParameter 的 Value。

返回值

类型： System Int32
集合中 DbParameter 对象的索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.AddRange 方法

DbParameterCollection
.
.
::
.
AddRange 方法
DbParameterCollection 类

将具有指定值的项的数组添加到 DbParameterCollection。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub AddRange ( _
    values As Array _
)
public abstract void AddRange(
    Array values
)
public:
virtual void AddRange(
    Array^ values
) abstract
abstract AddRange :
        values:Array -> unit

参数

values
类型： System Array
要添加到集合的 DbParameter 类型值的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.Clear 方法

DbParameterCollection
.
.
::
.
Clear 方法
DbParameterCollection 类

从 DbParameterCollection 中移除所有 DbParameter 值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Clear
public abstract void Clear()
public:
virtual void Clear() abstract
abstract Clear : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.Contains 方法

DbParameterCollection
.
.
::
.
Contains 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

指示集合中是否存在具有指定属性的 DbParameter。

名称 说明
页首

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.Contains 方法 (Object)

DbParameterCollection
.
.
::
.
Contains 方法 (Object)
DbParameterCollection 类

指示集合中是否包含具有指定 Value 的 DbParameter。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function Contains ( _
    value As Object _
) As Boolean
public abstract bool Contains(
    Object value
)
public:
virtual bool Contains(
    Object^ value
) abstract
abstract Contains :
        value:Object -> bool

参数

value
类型： System Object
要在集合中查找的 DbParameter 的 Value。

返回值

类型： System Boolean
如果 DbParameter 在集合中，则为 true；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
Contains 重载
System.Data.Common 命名空间


DbParameterCollection ..::.Contains 方法 (String)

DbParameterCollection
.
.
::
.
Contains 方法 (String)
DbParameterCollection 类

指示集合中是否存在具有指定名称的 DbParameter。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function Contains ( _
    value As String _
) As Boolean
public abstract bool Contains(
    string value
)
public:
virtual bool Contains(
    String^ value
) abstract
abstract Contains :
        value:string -> bool

参数

value
类型： System String
要在集合中查找的 DbParameter 的名称。

返回值

类型： System Boolean
如果 DbParameter 在集合中，则为 true；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
Contains 重载
System.Data.Common 命名空间


DbParameterCollection ..::.CopyTo 方法

DbParameterCollection
.
.
::
.
CopyTo 方法
DbParameterCollection 类

从指定索引处开始，将项的数组复制到集合中。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub CopyTo ( _
    array As Array, _
    index As Integer _
)
public abstract void CopyTo(
    Array array,
    int index
)
public:
virtual void CopyTo(
    Array^ array,
    int index
) abstract
abstract CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
要复制到集合中的项的数组。
index
类型： System Int32
要将项复制到的集合中的索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.GetEnumerator 方法

DbParameterCollection
.
.
::
.
GetEnumerator 方法
DbParameterCollection 类

公开 GetEnumerator 方法，该方法支持 .NET Framework 数据提供程序对集合进行简单的迭代。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function GetEnumerator As IEnumerator
public abstract IEnumerator GetEnumerator()
public:
virtual IEnumerator^ GetEnumerator() abstract
abstract GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
可用于循环访问集合的 IEnumerator。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.GetParameter 方法

DbParameterCollection
.
.
::
.
GetParameter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

获取具有指定属性值的 DbParameter。

名称 说明
页首

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.GetParameter 方法 (Int32)

DbParameterCollection
.
.
::
.
GetParameter 方法 (Int32)
DbParameterCollection 类

返回集合中指定索引处的 DbParameter 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function GetParameter ( _
    index As Integer _
) As DbParameter
protected abstract DbParameter GetParameter(
    int index
)
protected:
virtual DbParameter^ GetParameter(
    int index
) abstract
abstract GetParameter :
        index:int -> DbParameter

参数

index
类型： System Int32
集合中 DbParameter 的索引。

返回值

类型： System.Data.Common DbParameter
集合中指定索引处的 DbParameter 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
GetParameter 重载
System.Data.Common 命名空间


DbParameterCollection ..::.GetParameter 方法 (String)

DbParameterCollection
.
.
::
.
GetParameter 方法 (String)
DbParameterCollection 类

返回具有指定名称的 DbParameter 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Function GetParameter ( _
    parameterName As String _
) As DbParameter
protected abstract DbParameter GetParameter(
    string parameterName
)
protected:
virtual DbParameter^ GetParameter(
    String^ parameterName
) abstract
abstract GetParameter :
        parameterName:string -> DbParameter

参数

parameterName
类型： System String
集合中 DbParameter 的名称。

返回值

类型： System.Data.Common DbParameter
具有指定名称的 DbParameter 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
GetParameter 重载
System.Data.Common 命名空间


DbParameterCollection ..::.IndexOf 方法

DbParameterCollection
.
.
::
.
IndexOf 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

返回指定的 DbParameter 对象的索引。

名称 说明
页首

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.IndexOf 方法 (Object)

DbParameterCollection
.
.
::
.
IndexOf 方法 (Object)
DbParameterCollection 类

返回指定的 DbParameter 对象的索引。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function IndexOf ( _
    value As Object _
) As Integer
public abstract int IndexOf(
    Object value
)
public:
virtual int IndexOf(
    Object^ value
) abstract
abstract IndexOf :
        value:Object -> int

参数

value
类型： System Object
集合中的 DbParameter 对象。

返回值

类型： System Int32
指定的 DbParameter 对象的索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
IndexOf 重载
System.Data.Common 命名空间


DbParameterCollection ..::.IndexOf 方法 (String)

DbParameterCollection
.
.
::
.
IndexOf 方法 (String)
DbParameterCollection 类

返回具有指定名称的 DbParameter 对象的索引。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Function IndexOf ( _
    parameterName As String _
) As Integer
public abstract int IndexOf(
    string parameterName
)
public:
virtual int IndexOf(
    String^ parameterName
) abstract
abstract IndexOf :
        parameterName:string -> int

参数

parameterName
类型： System String
集合中 DbParameter 对象的名称。

返回值

类型： System Int32
具有指定名称的 DbParameter 对象的索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
IndexOf 重载
System.Data.Common 命名空间


DbParameterCollection ..::.Insert 方法

DbParameterCollection
.
.
::
.
Insert 方法
DbParameterCollection 类

将具有指定名称的 DbParameter 对象的指定索引插入到集合中指定的索引位置。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Insert ( _
    index As Integer, _
    value As Object _
)
public abstract void Insert(
    int index,
    Object value
)
public:
virtual void Insert(
    int index,
    Object^ value
) abstract
abstract Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
插入 DbParameter 对象的索引位置。
value
类型： System Object
要插入到集合中的 DbParameter 对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.MemberwiseClone 方法

DbParameterCollection
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

名称 说明
页首

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.Remove 方法

DbParameterCollection
.
.
::
.
Remove 方法
DbParameterCollection 类

从集合中移除指定的 DbParameter 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Remove ( _
    value As Object _
)
public abstract void Remove(
    Object value
)
public:
virtual void Remove(
    Object^ value
) abstract
abstract Remove :
        value:Object -> unit

参数

value
类型： System Object
要移除的 DbParameter 对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.RemoveAt 方法

DbParameterCollection
.
.
::
.
RemoveAt 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

从集合中移除指定的 DbParameter 对象。

名称 说明
页首

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.RemoveAt 方法 (Int32)

DbParameterCollection
.
.
::
.
RemoveAt 方法 (Int32)
DbParameterCollection 类

从集合中移除位于指定索引位置的 DbParameter 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub RemoveAt ( _
    index As Integer _
)
public abstract void RemoveAt(
    int index
)
public:
virtual void RemoveAt(
    int index
) abstract
abstract RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
DbParameter 对象所处的索引位置。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
RemoveAt 重载
System.Data.Common 命名空间


DbParameterCollection ..::.RemoveAt 方法 (String)

DbParameterCollection
.
.
::
.
RemoveAt 方法 (String)
DbParameterCollection 类

从集合中删除具有指定名称的 DbParameter 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub RemoveAt ( _
    parameterName As String _
)
public abstract void RemoveAt(
    string parameterName
)
public:
virtual void RemoveAt(
    String^ parameterName
) abstract
abstract RemoveAt :
        parameterName:string -> unit

参数

parameterName
类型： System String
要移除的 DbParameter 对象的名称。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
RemoveAt 重载
System.Data.Common 命名空间


DbParameterCollection ..::.SetParameter 方法

DbParameterCollection
.
.
::
.
SetParameter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

将指定的参数设置为指定的值。

名称 说明
页首

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.SetParameter 方法 (Int32, DbParameter)

DbParameterCollection
.
.
::
.
SetParameter 方法 (Int32, DbParameter)
DbParameterCollection 类

将指定索引处的 DbParameter 对象设置为一个新值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Sub SetParameter ( _
    index As Integer, _
    value As DbParameter _
)
protected abstract void SetParameter(
    int index,
    DbParameter value
)
protected:
virtual void SetParameter(
    int index,
    DbParameter^ value
) abstract
abstract SetParameter :
        index:int *
        value:DbParameter -> unit

参数

index
类型： System Int32
DbParameter 对象所处的索引位置。
value
类型： System.Data.Common DbParameter
新 DbParameter 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
SetParameter 重载
System.Data.Common 命名空间


DbParameterCollection ..::.SetParameter 方法 (String, DbParameter)

DbParameterCollection
.
.
::
.
SetParameter 方法 (String, DbParameter)
DbParameterCollection 类

将具有指定名称的 DbParameter 对象设置为新的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride Sub SetParameter ( _
    parameterName As String, _
    value As DbParameter _
)
protected abstract void SetParameter(
    string parameterName,
    DbParameter value
)
protected:
virtual void SetParameter(
    String^ parameterName,
    DbParameter^ value
) abstract
abstract SetParameter :
        parameterName:string *
        value:DbParameter -> unit

参数

parameterName
类型： System String
集合中 DbParameter 对象的名称。
value
类型： System.Data.Common DbParameter
新 DbParameter 值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
SetParameter 重载
System.Data.Common 命名空间


DbParameterCollection 属性

DbParameterCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

DbParameterCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbParameterCollection 类
System.Data.Common 命名空间


DbParameterCollection ..::.Count 属性

DbParameterCollection
.
.
::
.
Count 属性
DbParameterCollection 类

指定集合中项的数目。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride ReadOnly Property Count As Integer
    Get
[BrowsableAttribute(false)]
public abstract int Count { get; }
[BrowsableAttribute(false)]
public:
virtual property int Count {
    int get () abstract;
}
[<BrowsableAttribute(false)>]
abstract Count : int

属性值

类型： System Int32
集合中的项数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.IDataParameterCollection ..::.Item 属性

DbParameterCollection
.
.
::
.
IDataParameterCollection
.
.
::
.
Item 属性
DbParameterCollection 类

获取或设置指定索引处的参数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Item ( _
    parameterName As String _
) As Object Implements IDataParameterCollection.Item
    Get
    Set
Object IDataParameterCollection.this[
    string parameterName
] { get; set; }
private:
virtual property Object^ Item[String^ parameterName] {
    Object^ get (String^ parameterName) sealed = IDataParameterCollection::Item::get;
    void set (String^ parameterName, Object^ value) sealed = IDataParameterCollection::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

parameterName
类型： System String
要检索的参数的名称。

属性值

类型： System Object
指定索引处的 Object。

实现

此成员是显式的接口成员实现。它只能在 DbParameterCollection 实例被强制转换为 IDataParameterCollection 接口时使用。 此成员是显式的接口成员实现。它只能在 DbParameterCollection 实例被强制转换为 IDataParameterCollection 接口时使用。

有关更多信息，请参见 Item。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.IList ..::.Item 属性

DbParameterCollection
.
.
::
.
IList
.
.
::
.
Item 属性
DbParameterCollection 类

获取或设置指定索引处的元素。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private Property Item ( _
    index As Integer _
) As Object Implements IList.Item
    Get
    Set
Object IList.this[
    int index
] { get; set; }
private:
virtual property Object^ Item[int index] {
    Object^ get (int index) sealed = IList::Item::get;
    void set (int index, Object^ value) sealed = IList::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

index
类型： System Int32
要获得或设置的元素从零开始的索引。

属性值

类型： System Object
指定索引处的元素。

实现

此成员是显式接口成员的实现。它只能在 DbParameterCollection 实例被强制转换为 IList 接口时使用。 此成员是显式接口成员的实现。它只能在 DbParameterCollection 实例被强制转换为 IList 接口时使用。

有关更多信息，请参见 Item。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.IsFixedSize 属性

DbParameterCollection
.
.
::
.
IsFixedSize 属性
DbParameterCollection 类

指定该集合的大小是否是固定的。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride ReadOnly Property IsFixedSize As Boolean
    Get
[BrowsableAttribute(false)]
public abstract bool IsFixedSize { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsFixedSize {
    bool get () abstract;
}
[<BrowsableAttribute(false)>]
abstract IsFixedSize : bool

属性值

类型： System Boolean
如果该集合具有固定大小，则为 true；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.IsReadOnly 属性

DbParameterCollection
.
.
::
.
IsReadOnly 属性
DbParameterCollection 类

指定该集合是否为只读。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride ReadOnly Property IsReadOnly As Boolean
    Get
[BrowsableAttribute(false)]
public abstract bool IsReadOnly { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsReadOnly {
    bool get () abstract;
}
[<BrowsableAttribute(false)>]
abstract IsReadOnly : bool

属性值

类型： System Boolean
如果该集合为只读，则为 true；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.IsSynchronized 属性

DbParameterCollection
.
.
::
.
IsSynchronized 属性
DbParameterCollection 类

指定集合是否是同步的。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride ReadOnly Property IsSynchronized As Boolean
    Get
[BrowsableAttribute(false)]
public abstract bool IsSynchronized { get; }
[BrowsableAttribute(false)]
public:
virtual property bool IsSynchronized {
    bool get () abstract;
}
[<BrowsableAttribute(false)>]
abstract IsSynchronized : bool

属性值

类型： System Boolean
如果集合是同步的，则为 true；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.Item 属性

DbParameterCollection
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterCollection 类

获取和设置集合中的 DbParameter。

名称 说明
页首

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbParameterCollection ..::.Item 属性 (Int32)

DbParameterCollection
.
.
::
.
Item 属性 (Int32)
DbParameterCollection 类

获取并设置指定索引处的 DbParameter。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property Item ( _
    index As Integer _
) As DbParameter
    Get
    Set
public DbParameter this[
    int index
] { get; set; }
public:
property DbParameter^ Item[int index] {
    DbParameter^ get (int index);
    void set (int index, DbParameter^ value);
}
member Item : DbParameter with get, set

参数

index
类型： System Int32
参数的从零开始的索引。

属性值

类型： System.Data.Common DbParameter
指定索引处的 DbParameter。
异常 | 条件
IndexOutOfRangeException | 指定的索引不存在。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
Item 重载
System.Data.Common 命名空间


DbParameterCollection ..::.Item 属性 (String)

DbParameterCollection
.
.
::
.
Item 属性 (String)
DbParameterCollection 类

获取并设置具有指定名称的 DbParameter。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property Item ( _
    parameterName As String _
) As DbParameter
    Get
    Set
public DbParameter this[
    string parameterName
] { get; set; }
public:
property DbParameter^ Item[String^ parameterName] {
    DbParameter^ get (String^ parameterName);
    void set (String^ parameterName, DbParameter^ value);
}
member Item : DbParameter with get, set

参数

parameterName
类型： System String
参数名。

属性值

类型： System.Data.Common DbParameter
具有指定名称的 DbParameter。
异常 | 条件
IndexOutOfRangeException | 指定的索引不存在。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
Item 重载
System.Data.Common 命名空间


DbParameterCollection ..::.SyncRoot 属性

DbParameterCollection
.
.
::
.
SyncRoot 属性
DbParameterCollection 类

指定要用于同步对集合访问的 Object。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<BrowsableAttribute(False)> _
Public MustOverride ReadOnly Property SyncRoot As Object
    Get
[BrowsableAttribute(false)]
public abstract Object SyncRoot { get; }
[BrowsableAttribute(false)]
public:
virtual property Object^ SyncRoot {
    Object^ get () abstract;
}
[<BrowsableAttribute(false)>]
abstract SyncRoot : Object

属性值

类型： System Object
要用于同步对 DbParameterCollection 访问的 Object。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbParameterCollection 类
DbParameterCollection 成员
System.Data.Common 命名空间


DbProviderConfigurationHandler 类

DbProviderConfigurationHandler 类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

任何提供程序都可使用此类以支持特定于提供程序的配置部分。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Class DbProviderConfigurationHandler _
    Implements IConfigurationSectionHandler
public class DbProviderConfigurationHandler : IConfigurationSectionHandler
public ref class DbProviderConfigurationHandler : IConfigurationSectionHandler
type DbProviderConfigurationHandler =
    class
        interface IConfigurationSectionHandler
    end

System.Data.Common System.Data.Common..::.DbProviderConfigurationHandlerDbProviderConfigurationHandler
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderConfigurationHandler 成员
System.Data.Common 命名空间


DbProviderConfigurationHandler 成员

DbProviderConfigurationHandler 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderConfigurationHandler 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

任何提供程序都可使用此类以支持特定于提供程序的配置部分。

DbProviderConfigurationHandler 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbProviderConfigurationHandler 类
System.Data.Common 命名空间


DbProviderConfigurationHandler 构造函数

DbProviderConfigurationHandler 构造函数
DbProviderConfigurationHandler 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

任何提供程序都可使用此类以支持特定于提供程序的配置部分。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DbProviderConfigurationHandler()
public:
DbProviderConfigurationHandler()
new : unit -> DbProviderConfigurationHandler

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderConfigurationHandler 类
DbProviderConfigurationHandler 成员
System.Data.Common 命名空间


DbProviderConfigurationHandler 方法

DbProviderConfigurationHandler 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderConfigurationHandler 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

DbProviderConfigurationHandler 类型公开以下成员。

名称 说明
页首

参考

DbProviderConfigurationHandler 类
System.Data.Common 命名空间


DbProviderConfigurationHandler ..::.Create 方法

DbProviderConfigurationHandler
.
.
::
.
Create 方法
DbProviderConfigurationHandler 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

创建一个新的 [System.Collections.Specialized.NameValueCollection] 表达式。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Create ( _
    parent As Object, _
    configContext As Object, _
    section As XmlNode _
) As Object
public virtual Object Create(
    Object parent,
    Object configContext,
    XmlNode section
)
public:
virtual Object^ Create(
    Object^ parent,
    Object^ configContext,
    XmlNode^ section
)
abstract Create :
        parent:Object *
        configContext:Object *
        section:XmlNode -> Object
override Create :
        parent:Object *
        configContext:Object *
        section:XmlNode -> Object

参数

parent
类型： System Object
此类型支持 .NET Framework 基础结构，不应从代码直接使用。
configContext
类型： System Object
此类型支持 .NET Framework 基础结构，不应从代码直接使用。
section
类型： System.Xml XmlNode
此类型支持 .NET Framework 基础结构，不应从代码直接使用。

返回值

类型： System Object
新表达式。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderConfigurationHandler 类
DbProviderConfigurationHandler 成员
System.Data.Common 命名空间


DbProviderFactories 类

DbProviderFactories 类
成员

表示一组静态方法，这些方法用于创建 DbProviderFactory 类的一个或多个实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class DbProviderFactories
public static class DbProviderFactories
public ref class DbProviderFactories abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type DbProviderFactories =  class end

System.Data.Common System.Data.Common..::.DbProviderFactoriesDbProviderFactories
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactories 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactories 成员

DbProviderFactories 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderFactories 类

表示一组静态方法，这些方法用于创建 DbProviderFactory 类的一个或多个实例。

DbProviderFactories 类型公开以下成员。

名称 说明
页首

参考

DbProviderFactories 类
System.Data.Common 命名空间


DbProviderFactories 方法

DbProviderFactories 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderFactories 类

DbProviderFactories 类型公开以下成员。

名称 说明
页首

参考

DbProviderFactories 类
System.Data.Common 命名空间


DbProviderFactories ..::.GetFactory 方法

DbProviderFactories
.
.
::
.
GetFactory 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderFactories 类

返回 DbProviderFactory 的一个实例。

名称 说明
页首

参考

DbProviderFactories 类
DbProviderFactories 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactories ..::.GetFactory 方法 (DataRow)

DbProviderFactories
.
.
::
.
GetFactory 方法 (DataRow)
DbProviderFactories 类

返回 DbProviderFactory 的一个实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GetFactory ( _
    providerRow As DataRow _
) As DbProviderFactory
public static DbProviderFactory GetFactory(
    DataRow providerRow
)
public:
static DbProviderFactory^ GetFactory(
    DataRow^ providerRow
)
static member GetFactory :
        providerRow:DataRow -> DbProviderFactory

参数

providerRow
类型： System.Data DataRow
DataRow 包含提供程序的配置信息。

返回值

类型： System.Data.Common DbProviderFactory
指定 DataRow 的 DbProviderFactory 的一个实例。

providerRow 参数对应于由 GetFactoryClasses 返回的表的 DataRow。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactories 类
DbProviderFactories 成员
GetFactory 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactories ..::.GetFactory 方法 (String)

DbProviderFactories
.
.
::
.
GetFactory 方法 (String)
DbProviderFactories 类

返回 DbProviderFactory 的一个实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GetFactory ( _
    providerInvariantName As String _
) As DbProviderFactory
public static DbProviderFactory GetFactory(
    string providerInvariantName
)
public:
static DbProviderFactory^ GetFactory(
    String^ providerInvariantName
)
static member GetFactory :
        providerInvariantName:string -> DbProviderFactory

参数

providerInvariantName
类型： System String
提供程序的固定名称。

返回值

类型： System.Data.Common DbProviderFactory
指定提供程序名称的 DbProviderFactory 的一个实例。

providerInvariantName 参数对应于由 GetFactoryClasses 返回的表的 InvariantName 列。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactories 类
DbProviderFactories 成员
GetFactory 重载
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactories ..::.GetFactoryClasses 方法

DbProviderFactories
.
.
::
.
GetFactoryClasses 方法
DbProviderFactories 类

返回一个 DataTable，其中包含有关实现 DbProviderFactory 的所有已安装提供程序的信息。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared Function GetFactoryClasses As DataTable
public static DataTable GetFactoryClasses()
public: static DataTable^ GetFactoryClasses()
static member GetFactoryClasses : unit -> DataTable
返回值
类型： System.Data DataTable
返回一个
DataTable
，它包含其中包含以下数据的
DataRow
对象。
列序号
列名称
Description
0
Name
数据提供程序的可识别名称。
1
Description
数据提供程序的可识别描述。
2
InvariantName
可以以编程方式用于引用数据提供程序的名称。
3
AssemblyQualifiedName
工厂类的完全限定名，它包含用于实例化该对象的足够的信息。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactories 类
DbProviderFactories 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactoriesConfigurationHandler 类

DbProviderFactoriesConfigurationHandler 类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

此类型支持 .NET Framework 基础结构，不应从代码直接使用。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Class DbProviderFactoriesConfigurationHandler _
    Implements IConfigurationSectionHandler
public class DbProviderFactoriesConfigurationHandler : IConfigurationSectionHandler
public ref class DbProviderFactoriesConfigurationHandler : IConfigurationSectionHandler
type DbProviderFactoriesConfigurationHandler =
    class
        interface IConfigurationSectionHandler
    end

System.Data.Common System.Data.Common..::.DbProviderFactoriesConfigurationHandlerDbProviderFactoriesConfigurationHandler
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactoriesConfigurationHandler 成员
System.Data.Common 命名空间


DbProviderFactoriesConfigurationHandler 成员

DbProviderFactoriesConfigurationHandler 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderFactoriesConfigurationHandler 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

此类型支持 .NET Framework 基础结构，不应从代码直接使用。

DbProviderFactoriesConfigurationHandler 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbProviderFactoriesConfigurationHandler 类
System.Data.Common 命名空间


DbProviderFactoriesConfigurationHandler 构造函数

DbProviderFactoriesConfigurationHandler 构造函数
DbProviderFactoriesConfigurationHandler 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

此类型支持 .NET Framework 基础结构，不应从代码直接使用。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New
public DbProviderFactoriesConfigurationHandler()
public:
DbProviderFactoriesConfigurationHandler()
new : unit -> DbProviderFactoriesConfigurationHandler

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactoriesConfigurationHandler 类
DbProviderFactoriesConfigurationHandler 成员
System.Data.Common 命名空间


DbProviderFactoriesConfigurationHandler 方法

DbProviderFactoriesConfigurationHandler 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderFactoriesConfigurationHandler 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

DbProviderFactoriesConfigurationHandler 类型公开以下成员。

名称 说明
页首

参考

DbProviderFactoriesConfigurationHandler 类
System.Data.Common 命名空间


DbProviderFactoriesConfigurationHandler ..::.Create 方法

DbProviderFactoriesConfigurationHandler
.
.
::
.
Create 方法
DbProviderFactoriesConfigurationHandler 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

此类型支持 .NET Framework 基础结构，不应从代码直接使用。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function Create ( _
    parent As Object, _
    configContext As Object, _
    section As XmlNode _
) As Object
public virtual Object Create(
    Object parent,
    Object configContext,
    XmlNode section
)
public:
virtual Object^ Create(
    Object^ parent,
    Object^ configContext,
    XmlNode^ section
)
abstract Create :
        parent:Object *
        configContext:Object *
        section:XmlNode -> Object
override Create :
        parent:Object *
        configContext:Object *
        section:XmlNode -> Object

参数

parent
类型： System Object
此类型支持 .NET Framework 基础结构，不应从代码直接使用。
configContext
类型： System Object
此类型支持 .NET Framework 基础结构，不应从代码直接使用。
section
类型： System.Xml XmlNode
此类型支持 .NET Framework 基础结构，不应从代码直接使用。

返回值

类型： System Object
此类型支持 .NET Framework 基础结构，不应从代码直接使用。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactoriesConfigurationHandler 类
DbProviderFactoriesConfigurationHandler 成员
System.Data.Common 命名空间


DbProviderFactory 类

DbProviderFactory 类
成员

表示一组方法，这些方法用于创建提供程序对数据源类的实现的实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbProviderFactory
public abstract class DbProviderFactory
public ref class DbProviderFactory abstract
[<AbstractClassAttribute>]
type DbProviderFactory =  class end

System.Data.Common System.Data.Common..::.DbProviderFactoryDbProviderFactory

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactory 成员

DbProviderFactory 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderFactory 类

表示一组方法，这些方法用于创建提供程序对数据源类的实现的实例。

DbProviderFactory 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbProviderFactory 类
System.Data.Common 命名空间


DbProviderFactory 构造函数

DbProviderFactory 构造函数
DbProviderFactory 类

初始化 DbProviderFactory 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbProviderFactory()
protected:
DbProviderFactory()
new : unit -> DbProviderFactory

使用 DbProviderFactories.GetFactory 方法之一获取 DbProviderFactory 的实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactory 方法

DbProviderFactory 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderFactory 类

DbProviderFactory 类型公开以下成员。

名称 说明
页首

参考

DbProviderFactory 类
System.Data.Common 命名空间


DbProviderFactory ..::.CreateCommand 方法

DbProviderFactory
.
.
::
.
CreateCommand 方法
DbProviderFactory 类

返回实现 DbCommand 类的提供程序的类的一个新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function CreateCommand As DbCommand
public virtual DbCommand CreateCommand()
public:
virtual DbCommand^ CreateCommand()
abstract CreateCommand : unit -> DbCommand
override CreateCommand : unit -> DbCommand

返回值

类型： System.Data.Common DbCommand
DbCommand 的新实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactory ..::.CreateCommandBuilder 方法

DbProviderFactory
.
.
::
.
CreateCommandBuilder 方法
DbProviderFactory 类

返回实现 DbCommandBuilder 类的提供程序的类的一个新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function CreateCommandBuilder As DbCommandBuilder
public virtual DbCommandBuilder CreateCommandBuilder()
public:
virtual DbCommandBuilder^ CreateCommandBuilder()
abstract CreateCommandBuilder : unit -> DbCommandBuilder
override CreateCommandBuilder : unit -> DbCommandBuilder

返回值

类型： System.Data.Common DbCommandBuilder
DbCommandBuilder 的新实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactory ..::.CreateConnection 方法

DbProviderFactory
.
.
::
.
CreateConnection 方法
DbProviderFactory 类

返回实现 DbConnection 类的提供程序的类的一个新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function CreateConnection As DbConnection
public virtual DbConnection CreateConnection()
public:
virtual DbConnection^ CreateConnection()
abstract CreateConnection : unit -> DbConnection
override CreateConnection : unit -> DbConnection

返回值

类型： System.Data.Common DbConnection
DbConnection 的新实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactory ..::.CreateConnectionStringBuilder 方法

DbProviderFactory
.
.
::
.
CreateConnectionStringBuilder 方法
DbProviderFactory 类

返回实现 DbConnectionStringBuilder 类的提供程序的类的一个新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function CreateConnectionStringBuilder As DbConnectionStringBuilder
public virtual DbConnectionStringBuilder CreateConnectionStringBuilder()
public:
virtual DbConnectionStringBuilder^ CreateConnectionStringBuilder()
abstract CreateConnectionStringBuilder : unit -> DbConnectionStringBuilder
override CreateConnectionStringBuilder : unit -> DbConnectionStringBuilder

返回值

类型： System.Data.Common DbConnectionStringBuilder
DbConnectionStringBuilder 的新实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)
连接字符串 (ADO.NET)


DbProviderFactory ..::.CreateDataAdapter 方法

DbProviderFactory
.
.
::
.
CreateDataAdapter 方法
DbProviderFactory 类

返回实现 DbDataAdapter 类的提供程序的类的一个新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function CreateDataAdapter As DbDataAdapter
public virtual DbDataAdapter CreateDataAdapter()
public:
virtual DbDataAdapter^ CreateDataAdapter()
abstract CreateDataAdapter : unit -> DbDataAdapter
override CreateDataAdapter : unit -> DbDataAdapter

返回值

类型： System.Data.Common DbDataAdapter
DbDataAdapter 的新实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactory ..::.CreateDataSourceEnumerator 方法

DbProviderFactory
.
.
::
.
CreateDataSourceEnumerator 方法
DbProviderFactory 类

返回实现 DbDataSourceEnumerator 类的提供程序的类的一个新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function CreateDataSourceEnumerator As DbDataSourceEnumerator
public virtual DbDataSourceEnumerator CreateDataSourceEnumerator()
public:
virtual DbDataSourceEnumerator^ CreateDataSourceEnumerator()
abstract CreateDataSourceEnumerator : unit -> DbDataSourceEnumerator
override CreateDataSourceEnumerator : unit -> DbDataSourceEnumerator

返回值

类型： System.Data.Common DbDataSourceEnumerator
DbDataSourceEnumerator 的新实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactory ..::.CreateParameter 方法

DbProviderFactory
.
.
::
.
CreateParameter 方法
DbProviderFactory 类

返回实现 DbParameter 类的提供程序的类的一个新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function CreateParameter As DbParameter
public virtual DbParameter CreateParameter()
public:
virtual DbParameter^ CreateParameter()
abstract CreateParameter : unit -> DbParameter
override CreateParameter : unit -> DbParameter

返回值

类型： System.Data.Common DbParameter
DbParameter 的新实例。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactory ..::.CreatePermission 方法

DbProviderFactory
.
.
::
.
CreatePermission 方法
DbProviderFactory 类

返回提供程序的类的新实例，该实例可实现提供程序的 CodeAccessPermission 类的版本。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable Function CreatePermission ( _
    state As PermissionState _
) As CodeAccessPermission
public virtual CodeAccessPermission CreatePermission(
    PermissionState state
)
public:
virtual CodeAccessPermission^ CreatePermission(
    PermissionState state
)
abstract CreatePermission :
        state:PermissionState -> CodeAccessPermission
override CreatePermission :
        state:PermissionState -> CodeAccessPermission

参数

state
类型： System.Security.Permissions PermissionState
PermissionState 值之一。

返回值

类型： System.Security CodeAccessPermission
指定 PermissionState 的 CodeAccessPermission 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderFactory 属性

DbProviderFactory 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderFactory 类

DbProviderFactory 类型公开以下成员。

名称 说明
页首

参考

DbProviderFactory 类
System.Data.Common 命名空间


DbProviderFactory ..::.CanCreateDataSourceEnumerator 属性

DbProviderFactory
.
.
::
.
CanCreateDataSourceEnumerator 属性
DbProviderFactory 类

指定特定的 DbProviderFactory 是否支持 DbDataSourceEnumerator 类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Overridable ReadOnly Property CanCreateDataSourceEnumerator As Boolean
    Get
public virtual bool CanCreateDataSourceEnumerator { get; }
public:
virtual property bool CanCreateDataSourceEnumerator {
    bool get ();
}
abstract CanCreateDataSourceEnumerator : bool
override CanCreateDataSourceEnumerator : bool

属性值

类型： System Boolean
如果 DbProviderFactory 的实例支持 DbDataSourceEnumerator 类，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderFactory 类
DbProviderFactory 成员
System.Data.Common 命名空间

其他资源

DbProviderFactory (ADO.NET)


DbProviderManifest 类

DbProviderManifest 类
成员

表示所有 CLR 类型的元数据接口。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbProviderManifest
public abstract class DbProviderManifest
public ref class DbProviderManifest abstract
[<AbstractClassAttribute>]
type DbProviderManifest =  class end

DbProviderManifest 不应通过一个实体 Framework 数据提供程序来实现。相反，一个实体 Framework 数据提供程序应从 DbXmlEnabledProviderManifest 派生，并由实体 Framework 使用来在运行时获取特定于提供程序的信息。 DbProviderManifest 不应通过一个实体 Framework 数据提供程序来实现。相反，一个实体 Framework 数据提供程序应从 DbXmlEnabledProviderManifest 派生，并由实体 Framework 使用来在运行时获取特定于提供程序的信息。

System.Data.Common System.Data.Common..::.DbProviderManifestDbProviderManifest

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest 成员

DbProviderManifest 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderManifest 类

表示所有 CLR 类型的元数据接口。

DbProviderManifest 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbProviderManifest 类
System.Data.Common 命名空间


DbProviderManifest 构造函数

DbProviderManifest 构造函数
DbProviderManifest 类

初始化 DbProviderManifest 类的新实例。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New
protected DbProviderManifest()
protected:
DbProviderManifest()
new : unit -> DbProviderManifest

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest 字段

DbProviderManifest 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderManifest 类

DbProviderManifest 类型公开以下成员。

名称 说明
页首

参考

DbProviderManifest 类
System.Data.Common 命名空间


DbProviderManifest ..::.ConceptualSchemaDefinition 字段

DbProviderManifest
.
.
::
.
ConceptualSchemaDefinition 字段
DbProviderManifest 类

为获取概念架构定义信息而传递给 GetInformation()()() 方法的值。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared ReadOnly ConceptualSchemaDefinition As String
public static readonly string ConceptualSchemaDefinition
public:
static initonly String^ ConceptualSchemaDefinition
static val ConceptualSchemaDefinition: string

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.StoreSchemaDefinition 字段

DbProviderManifest
.
.
::
.
StoreSchemaDefinition 字段
DbProviderManifest 类

为获取存储架构定义信息而传递给 GetInformation()()() 方法的值。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared ReadOnly StoreSchemaDefinition As String
public static readonly string StoreSchemaDefinition
public:
static initonly String^ StoreSchemaDefinition
static val StoreSchemaDefinition: string

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.StoreSchemaMapping 字段

DbProviderManifest
.
.
::
.
StoreSchemaMapping 字段
DbProviderManifest 类

为获取存储架构映射信息而传递给 GetInformation()()() 方法的值。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared ReadOnly StoreSchemaMapping As String
public static readonly string StoreSchemaMapping
public:
static initonly String^ StoreSchemaMapping
static val StoreSchemaMapping: string

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest 方法

DbProviderManifest 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderManifest 类

DbProviderManifest 类型公开以下成员。

名称 说明
页首

参考

DbProviderManifest 类
System.Data.Common 命名空间


DbProviderManifest ..::.EscapeLikeArgument 方法

DbProviderManifest
.
.
::
.
EscapeLikeArgument 方法
DbProviderManifest 类

提供程序编写人员应重写此方法，以返回带有已转义的通配符和转义符的参数。仅在 SupportsEscapingLikeArgument 返回 true 时才使用此方法。 提供程序编写人员应重写此方法，以返回带有已转义的通配符和转义符的参数。仅在 SupportsEscapingLikeArgument 返回 true 时才使用此方法。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overridable Function EscapeLikeArgument ( _
    argument As String _
) As String
public virtual string EscapeLikeArgument(
    string argument
)
public:
virtual String^ EscapeLikeArgument(
    String^ argument
)
abstract EscapeLikeArgument :
        argument:string -> string
override EscapeLikeArgument :
        argument:string -> string

参数

argument
类型： System String
要转义的参数。

返回值

类型： System String
带有已转义的通配符和转义符的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.GetDbInformation 方法

DbProviderManifest
.
.
::
.
GetDbInformation 方法
DbProviderManifest 类

在派生类中重写时，此方法返回特定于提供程序的信息。此方法决不应返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 在派生类中重写时，此方法返回特定于提供程序的信息。此方法决不应返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected MustOverride Function GetDbInformation ( _
    informationType As String _
) As XmlReader
protected abstract XmlReader GetDbInformation(
    string informationType
)
protected:
virtual XmlReader^ GetDbInformation(
    String^ informationType
) abstract
abstract GetDbInformation :
        informationType:string -> XmlReader

参数

informationType
类型： System String
要返回的信息的类型。可能的值包括： 要返回的信息的类型。可能的值包括：

  • StoreSchemaDefinition

  • StoreSchemaMapping

返回值

类型： System.Xml XmlReader
表示基础数据存储区目录的映射的 XmlReader 对象。提供程序应重写 GetDbInformation 以返回特定于它们的提供程序的信息。返回的 XmlReader 的架构必须符合给定信息类型的 EDM 规范。 表示基础数据存储区目录的映射的 XmlReader 对象。提供程序应重写 GetDbInformation 以返回特定于它们的提供程序的信息。返回的 XmlReader 的架构必须符合给定信息类型的 EDM 规范。 表示基础数据存储区目录的映射的 XmlReader 对象。提供程序应重写 GetDbInformation 以返回特定于它们的提供程序的信息。返回的 XmlReader 的架构必须符合给定信息类型的 EDM 规范。

GetDbInformation 依赖于 GetDbInformation 的提供程序实现来为 StoreSchemaDefinition 和 StoreSchemaMapping 提供信息（GetDbInformation 特定于提供程序和数据存储）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.GetEdmType 方法

DbProviderManifest
.
.
::
.
GetEdmType 方法
DbProviderManifest 类

在派生类中重写时，此方法将指定的存储类型以及该类型的一组 Facet 映射到 EDM 类型。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function GetEdmType ( _
    storeType As TypeUsage _
) As TypeUsage
public abstract TypeUsage GetEdmType(
    TypeUsage storeType
)
public:
virtual TypeUsage^ GetEdmType(
    TypeUsage^ storeType
) abstract
abstract GetEdmType :
        storeType:TypeUsage -> TypeUsage

参数

storeType
类型： System.Data.Metadata.Edm TypeUsage
TypeUsage 实例，它描述了要映射到 EDM 类型的存储类型以及该类型的一组 Facet。

返回值

类型： System.Data.Metadata.Edm TypeUsage
T:System.Data.Metadata.Edm.TypeUsage 实例，它描述了 EDM 类型以及该类型的一组 Facet。

如果参数不是有效的存储类型，则此方法可引发 ArgumentException，或者如果参数没有等效的 EDM，则此方法可引发 NotSupportedException。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.GetFacetDescriptions 方法

DbProviderManifest
.
.
::
.
GetFacetDescriptions 方法
DbProviderManifest 类

返回特定类型的 FacetDescription 对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function GetFacetDescriptions ( _
    edmType As EdmType _
) As ReadOnlyCollection(Of FacetDescription)
public abstract ReadOnlyCollection<FacetDescription> GetFacetDescriptions(
    EdmType edmType
)
public:
virtual ReadOnlyCollection<FacetDescription^>^ GetFacetDescriptions(
    EdmType^ edmType
) abstract
abstract GetFacetDescriptions :
        edmType:EdmType -> ReadOnlyCollection<FacetDescription>

参数

edmType
类型： System.Data.Metadata.Edm EdmType
要返回 Facet 描述的 EDM 类型。

返回值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
FacetDescription
>
)
>
)

所指定 EDM 类型的 FacetDescription 对象。

类 FacetDescription 的实例可通过工厂方法构造。此方法不可以为 null；对于没有方面的类型，应返回空集合。 类 FacetDescription 的实例可通过工厂方法构造。此方法不可以为 null；对于没有方面的类型，应返回空集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.GetInformation 方法

DbProviderManifest
.
.
::
.
GetInformation 方法
DbProviderManifest 类

获取特定于提供程序的信息。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetInformation ( _
    informationType As String _
) As XmlReader
public XmlReader GetInformation(
    string informationType
)
public:
XmlReader^ GetInformation(
    String^ informationType
)
member GetInformation :
        informationType:string -> XmlReader

参数

informationType
类型： System String
要返回的信息的类型。可能的值包括： 要返回的信息的类型。可能的值包括：

  • StoreSchemaDefinition

  • StoreSchemaMapping

  • ConceptualSchemaDefinition

返回值

类型： System.Xml XmlReader

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.GetStoreFunctions 方法

DbProviderManifest
.
.
::
.
GetStoreFunctions 方法
DbProviderManifest 类

在派生类中重写时，返回提供程序清单支持的 EDM 函数的集合。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function GetStoreFunctions As ReadOnlyCollection(Of EdmFunction)
public abstract ReadOnlyCollection<EdmFunction> GetStoreFunctions()
public:
virtual ReadOnlyCollection<EdmFunction^>^ GetStoreFunctions() abstract
abstract GetStoreFunctions : unit -> ReadOnlyCollection<EdmFunction>

返回值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
EdmFunction
>
)
>
)

EDM 函数的集合。

此方法不可以为 null，且如果未指定任何函数应返回空集合。此方法仅支持返回存储特定的函数（非用户定义的函数）。 此方法不可以为 null，且如果未指定任何函数应返回空集合。此方法仅支持返回存储特定的函数（非用户定义的函数）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.GetStoreType 方法

DbProviderManifest
.
.
::
.
GetStoreType 方法
DbProviderManifest 类

在派生类中重写时，此方法将指定的 EDM 类型以及该类型的一组 Facet 映射到存储类型。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function GetStoreType ( _
    edmType As TypeUsage _
) As TypeUsage
public abstract TypeUsage GetStoreType(
    TypeUsage edmType
)
public:
virtual TypeUsage^ GetStoreType(
    TypeUsage^ edmType
) abstract
abstract GetStoreType :
        edmType:TypeUsage -> TypeUsage

参数

edmType
类型： System.Data.Metadata.Edm TypeUsage

返回值

类型： System.Data.Metadata.Edm TypeUsage
TypeUsage 实例，它描述了存储类型以及该类型的一组 Facet。

如果参数不是有效的 EDM 类型，则此方法可引发 ArgumentException，或者如果参数没有等效的数据存储区，则此方法可引发 NotSupportedException。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.GetStoreTypes 方法

DbProviderManifest
.
.
::
.
GetStoreTypes 方法
DbProviderManifest 类

在派生类中重写时，返回数据源支持的一组基元类型。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function GetStoreTypes As ReadOnlyCollection(Of PrimitiveType)
public abstract ReadOnlyCollection<PrimitiveType> GetStoreTypes()
public:
virtual ReadOnlyCollection<PrimitiveType^>^ GetStoreTypes() abstract
abstract GetStoreTypes : unit -> ReadOnlyCollection<PrimitiveType>

返回值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
PrimitiveType
>
)
>
)

数据源支持的一组类型。

此方法不可以为 null；如果未指定任何类型，则应返回空集合。仅支持 PrimitiveType。 此方法不可以为 null；如果未指定任何类型，则应返回空集合。仅支持 PrimitiveType。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest ..::.SupportsEscapingLikeArgument 方法

DbProviderManifest
.
.
::
.
SupportsEscapingLikeArgument 方法
DbProviderManifest 类

指示提供程序是否支持在 Like 表达式中使用转义字符串作为模式。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overridable Function SupportsEscapingLikeArgument ( _
    <OutAttribute> ByRef escapeCharacter As Char _
) As Boolean
public virtual bool SupportsEscapingLikeArgument(
    out char escapeCharacter
)
public:
virtual bool SupportsEscapingLikeArgument(
    [OutAttribute] wchar_t% escapeCharacter
)
abstract SupportsEscapingLikeArgument :
        escapeCharacter:char byref -> bool
override SupportsEscapingLikeArgument :
        escapeCharacter:char byref -> bool

参数

escapeCharacter
类型： System Char %
如果提供程序支持转义，则为要用作转义符的字符。

返回值

类型： System Boolean
如果此提供程序支持在 Like 表达式中使用转义字符串作为模式，则返回 true；否则返回 false。默认实现返回 false。 如果此提供程序支持在 Like 表达式中使用转义字符串作为模式，则返回 true；否则返回 false。默认实现返回 false。

如果提供程序重写此方法，返回 true：还应该重写 EscapeLikeArgument。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderManifest 属性

DbProviderManifest 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderManifest 类

DbProviderManifest 类型公开以下成员。

名称 说明
页首

参考

DbProviderManifest 类
System.Data.Common 命名空间


DbProviderManifest ..::.NamespaceName 属性

DbProviderManifest
.
.
::
.
NamespaceName 属性
DbProviderManifest 类

获取此提供程序清单使用的命名空间。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride ReadOnly Property NamespaceName As String
    Get
public abstract string NamespaceName { get; }
public:
virtual property String^ NamespaceName {
    String^ get () abstract;
}
abstract NamespaceName : string

属性值

类型： System String
此提供程序清单使用的命名空间。

命名空间的名称将用于前缀提供程序特定的功能和类型（例如对于 SqlServer）。命名空间名称必须遵循有效标识符的 EDM 规范。所有提供程序都必须指定一个命名空间。 命名空间的名称将用于前缀提供程序特定的功能和类型（例如对于 SqlServer）。命名空间名称必须遵循有效标识符的 EDM 规范。所有提供程序都必须指定一个命名空间。 命名空间的名称将用于前缀提供程序特定的功能和类型（例如对于 SqlServer）。命名空间名称必须遵循有效标识符的 EDM 规范。所有提供程序都必须指定一个命名空间。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderManifest 类
DbProviderManifest 成员
System.Data.Common 命名空间


DbProviderServices 类

DbProviderServices 类
成员

表示一组方法，这些方法用于创建正确的命令定义对象以及访问提供程序清单信息。

此 API 不兼容 CLS。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<CLSCompliantAttribute(False)> _
Public MustInherit Class DbProviderServices
[CLSCompliantAttribute(false)]
public abstract class DbProviderServices
[CLSCompliantAttribute(false)]
public ref class DbProviderServices abstract
[<AbstractClassAttribute>]
[<CLSCompliantAttribute(false)>]
type DbProviderServices =  class end

DBProviderServices 类为访问 SQL 生成层从而将命令目录树转换为 DbCommands 的起始点。此类还提供其他数据存储信息，例如提供程序清单，该清单描述存储特定的类型映射和函数，以及用于对表和列信息生成查询的存储特定的映射文件。 DBProviderServices 类为访问 SQL 生成层从而将命令目录树转换为 DbCommands 的起始点。此类还提供其他数据存储信息，例如提供程序清单，该清单描述存储特定的类型映射和函数，以及用于对表和列信息生成查询的存储特定的映射文件。

DbProviderServices 向提供程序清单提供访问，并封装了提供程序类型、它们到 EDM 基元类型的映射、提供程序功能和存储架构定义的映射文件。

DbProviderServices 还充当一个入口点，用来将修改命令树的查询（DbQueryCommandTree 或 DbModificationCommandTree）传递给提供程序，从而使提供程序能够生成存储特定的命令。若要支持此功能，支持具有符合 SQL 99 查询能力的关系存储的提供方通常应包含负责产生基于给定的命令树的后端特定命令文本的模块。该模块通常包括一个处理查询 SQL 生成的组件以及一个处理修改 SQL 生成的组件。 DbProviderServices 还充当一个入口点，用来将修改命令树的查询（DbQueryCommandTree 或 DbModificationCommandTree）传递给提供程序，从而使提供程序能够生成存储特定的命令。若要支持此功能，支持具有符合 SQL 99 查询能力的关系存储的提供方通常应包含负责产生基于给定的命令树的后端特定命令文本的模块。该模块通常包括一个处理查询 SQL 生成的组件以及一个处理修改 SQL 生成的组件。 DbProviderServices 还充当一个入口点，用来将修改命令树的查询（DbQueryCommandTree 或 DbModificationCommandTree）传递给提供程序，从而使提供程序能够生成存储特定的命令。若要支持此功能，支持具有符合 SQL 99 查询能力的关系存储的提供方通常应包含负责产生基于给定的命令树的后端特定命令文本的模块。该模块通常包括一个处理查询 SQL 生成的组件以及一个处理修改 SQL 生成的组件。

System.Data.Common System.Data.Common..::.DbProviderServicesDbProviderServices
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices 成员

DbProviderServices 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderServices 类

表示一组方法，这些方法用于创建正确的命令定义对象以及访问提供程序清单信息。

DbProviderServices 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbProviderServices 类
System.Data.Common 命名空间


DbProviderServices 构造函数

DbProviderServices 构造函数
DbProviderServices 类

初始化 DbProviderServices 类的新实例。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New
protected DbProviderServices()
protected:
DbProviderServices()
new : unit -> DbProviderServices

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices 方法

DbProviderServices 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderServices 类

DbProviderServices 类型公开以下成员。

名称 说明
页首

参考

DbProviderServices 类
System.Data.Common 命名空间


DbProviderServices ..::.CreateCommandDefinition 方法

DbProviderServices
.
.
::
.
CreateCommandDefinition 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderServices 类

创建一个 DbCommandDefinition。

名称 说明
页首

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.CreateCommandDefinition 方法 (DbCommand)

DbProviderServices
.
.
::
.
CreateCommandDefinition 方法 (DbCommand)
DbProviderServices 类

创建一个使用指定 DbCommand 的 DbCommandDefinition。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overridable Function CreateCommandDefinition ( _
    prototype As DbCommand _
) As DbCommandDefinition
public virtual DbCommandDefinition CreateCommandDefinition(
    DbCommand prototype
)
public:
virtual DbCommandDefinition^ CreateCommandDefinition(
    DbCommand^ prototype
)
abstract CreateCommandDefinition :
        prototype:DbCommand -> DbCommandDefinition
override CreateCommandDefinition :
        prototype:DbCommand -> DbCommandDefinition

参数

prototype
类型： System.Data.Common DbCommand
一个用于创建 DbCommandDefinition 的 DbCommand。

返回值

类型： System.Data.Common DbCommandDefinition
表示可执行命令定义对象的 DbCommandDefinition 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
CreateCommandDefinition 重载
System.Data.Common 命名空间


DbProviderServices ..::.CreateCommandDefinition 方法 (DbCommandTree)

DbProviderServices
.
.
::
.
CreateCommandDefinition 方法 (DbCommandTree)
DbProviderServices 类

从指定的命令目录树创建命令定义对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateCommandDefinition ( _
    commandTree As DbCommandTree _
) As DbCommandDefinition
public DbCommandDefinition CreateCommandDefinition(
    DbCommandTree commandTree
)
public:
DbCommandDefinition^ CreateCommandDefinition(
    DbCommandTree^ commandTree
)
member CreateCommandDefinition :
        commandTree:DbCommandTree -> DbCommandDefinition

参数

commandTree
类型： System.Data.Common.CommandTrees DbCommandTree
语句的命令目录树。

返回值

类型： System.Data.Common DbCommandDefinition
可执行的命令定义对象。

此方法委托给提供程序实现的 CreateDbCommandDefinition()()() 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
CreateCommandDefinition 重载
System.Data.Common 命名空间


DbProviderServices ..::.CreateCommandDefinition 方法 (DbProviderManifest, DbCommandTree)

DbProviderServices
.
.
::
.
CreateCommandDefinition 方法 (DbProviderManifest, DbCommandTree)
DbProviderServices 类

从命令目录树创建一个 DbCommandDefinition 对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateCommandDefinition ( _
    providerManifest As DbProviderManifest, _
    commandTree As DbCommandTree _
) As DbCommandDefinition
public DbCommandDefinition CreateCommandDefinition(
    DbProviderManifest providerManifest,
    DbCommandTree commandTree
)
public:
DbCommandDefinition^ CreateCommandDefinition(
    DbProviderManifest^ providerManifest,
    DbCommandTree^ commandTree
)
member CreateCommandDefinition :
        providerManifest:DbProviderManifest *
        commandTree:DbCommandTree -> DbCommandDefinition

参数

providerManifest
类型： System.Data.Common DbProviderManifest
以前从存储提供程序检索到的提供程序清单。
commandTree
类型： System.Data.Common.CommandTrees DbCommandTree
语句的命令目录树。

返回值

类型： System.Data.Common DbCommandDefinition
可执行的命令定义对象。

此方法委托给提供程序实现的 CreateDbCommandDefinition。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
CreateCommandDefinition 重载
System.Data.Common 命名空间


DbProviderServices ..::.CreateDatabase 方法

DbProviderServices
.
.
::
.
CreateDatabase 方法
DbProviderServices 类

创建一个由连接指示的数据库并且基于 StoreItemCollection 的内容创建架构对象（表、主键、外键）。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub CreateDatabase ( _
    connection As DbConnection, _
    commandTimeout As Nullable(Of Integer), _
    storeItemCollection As StoreItemCollection _
)
public void CreateDatabase(
    DbConnection connection,
    Nullable<int> commandTimeout,
    StoreItemCollection storeItemCollection
)
public:
void CreateDatabase(
    DbConnection^ connection,
    Nullable<int> commandTimeout,
    StoreItemCollection^ storeItemCollection
)
member CreateDatabase :
        connection:DbConnection *
        commandTimeout:Nullable<int> *
        storeItemCollection:StoreItemCollection -> unit

参数

connection
类型： System.Data.Common DbConnection
需要创建到不存在的数据库的连接并用由 storeItemCollection 参数指示的存储对象进行填充。
commandTimeout
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

创建数据库所需的任何命令的执行超时。
storeItemCollection
类型： System.Data.Metadata.Edm StoreItemCollection
创建脚本所应基于的所有存储项的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.CreateDatabaseScript 方法

DbProviderServices
.
.
::
.
CreateDatabaseScript 方法
DbProviderServices 类

基于 StoreItemCollection 参数的内容并针对与提供程序清单标记相对应的数据库版本生成数据定义语言（创建架构对象（表、主键、外键）的 DDL0 脚本）。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateDatabaseScript ( _
    providerManifestToken As String, _
    storeItemCollection As StoreItemCollection _
) As String
public string CreateDatabaseScript(
    string providerManifestToken,
    StoreItemCollection storeItemCollection
)
public:
String^ CreateDatabaseScript(
    String^ providerManifestToken,
    StoreItemCollection^ storeItemCollection
)
member CreateDatabaseScript :
        providerManifestToken:string *
        storeItemCollection:StoreItemCollection -> string

参数

providerManifestToken
类型： System String
标识目标版本的提供程序清单标记。
storeItemCollection
类型： System.Data.Metadata.Edm StoreItemCollection
要创建的数据库的结构。

返回值

类型： System String
基于 StoreItemCollection 参数的内容并针对与提供程序清单标记相对应的数据库版本创建架构对象的 DDL 脚本。

应该使用数据库特定的 DDL 命令分隔符分隔各个语句。

生成的脚本应该在具有足够权限的现有数据库的上下文中执行，不应该包括创建数据库的命令。该脚本可能包括用于创建架构和其他辅助对象（如序列）的命令。 生成的脚本应该在具有足够权限的现有数据库的上下文中执行，不应该包括创建数据库的命令。该脚本可能包括用于创建架构和其他辅助对象（如序列）的命令。

如果 storeItemCollection 中数据库的结构基于 providerManifestToken 指定的不同版本，生成的脚本可能无法处理数据库。例如，如果 storeItemCollection 基于 SQL Server 2008，生成的脚本可能不适用于 SQL Server 2000。storeItemCollection 可能是有效的，但包含（例如）不被 SQL Server 2000 支持的数据类型。如果您使用实体框架工具来从一个较新的数据库服务器版本生成 SSDL (storeItemCollection)，并尝试在旧数据库服务器版本中创建一个数据库，可能会发生这种情况。 如果 storeItemCollection 中数据库的结构基于 providerManifestToken 指定的不同版本，生成的脚本可能无法处理数据库。例如，如果 storeItemCollection 基于 SQL Server 2008，生成的脚本可能不适用于 SQL Server 2000。storeItemCollection 可能是有效的，但包含（例如）不被 SQL Server 2000 支持的数据类型。如果您使用实体框架工具来从一个较新的数据库服务器版本生成 SSDL (storeItemCollection)，并尝试在旧数据库服务器版本中创建一个数据库，可能会发生这种情况。 如果 storeItemCollection 中数据库的结构基于 providerManifestToken 指定的不同版本，生成的脚本可能无法处理数据库。例如，如果 storeItemCollection 基于 SQL Server 2008，生成的脚本可能不适用于 SQL Server 2000。storeItemCollection 可能是有效的，但包含（例如）不被 SQL Server 2000 支持的数据类型。如果您使用实体框架工具来从一个较新的数据库服务器版本生成 SSDL (storeItemCollection)，并尝试在旧数据库服务器版本中创建一个数据库，可能会发生这种情况。 如果 storeItemCollection 中数据库的结构基于 providerManifestToken 指定的不同版本，生成的脚本可能无法处理数据库。例如，如果 storeItemCollection 基于 SQL Server 2008，生成的脚本可能不适用于 SQL Server 2000。storeItemCollection 可能是有效的，但包含（例如）不被 SQL Server 2000 支持的数据类型。如果您使用实体框架工具来从一个较新的数据库服务器版本生成 SSDL (storeItemCollection)，并尝试在旧数据库服务器版本中创建一个数据库，可能会发生这种情况。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.CreateDbCommandDefinition 方法

DbProviderServices
.
.
::
.
CreateDbCommandDefinition 方法
DbProviderServices 类

为指定的提供程序清单和命令目录树创建命令定义对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected MustOverride Function CreateDbCommandDefinition ( _
    providerManifest As DbProviderManifest, _
    commandTree As DbCommandTree _
) As DbCommandDefinition
protected abstract DbCommandDefinition CreateDbCommandDefinition(
    DbProviderManifest providerManifest,
    DbCommandTree commandTree
)
protected:
virtual DbCommandDefinition^ CreateDbCommandDefinition(
    DbProviderManifest^ providerManifest,
    DbCommandTree^ commandTree
) abstract
abstract CreateDbCommandDefinition :
        providerManifest:DbProviderManifest *
        commandTree:DbCommandTree -> DbCommandDefinition

参数

providerManifest
类型： System.Data.Common DbProviderManifest
以前从存储提供程序检索到的提供程序清单。
commandTree
类型： System.Data.Common.CommandTrees DbCommandTree
语句的命令目录树。

返回值

类型： System.Data.Common DbCommandDefinition
可执行的命令定义对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.DatabaseExists 方法

DbProviderServices
.
.
::
.
DatabaseExists 方法
DbProviderServices 类

返回一个值，该值指示服务器上是否存在给定数据库以及是否创建了 storeItemCollection 中包含的架构对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function DatabaseExists ( _
    connection As DbConnection, _
    commandTimeout As Nullable(Of Integer), _
    storeItemCollection As StoreItemCollection _
) As Boolean
public bool DatabaseExists(
    DbConnection connection,
    Nullable<int> commandTimeout,
    StoreItemCollection storeItemCollection
)
public:
bool DatabaseExists(
    DbConnection^ connection,
    Nullable<int> commandTimeout,
    StoreItemCollection^ storeItemCollection
)
member DatabaseExists :
        connection:DbConnection *
        commandTimeout:Nullable<int> *
        storeItemCollection:StoreItemCollection -> bool

参数

connection
类型： System.Data.Common DbConnection
到某个数据库的连接，该数据库是否存在可通过此方法进行验证。
commandTimeout
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

确定数据库是否存在所需的任何命令的执行超时。
storeItemCollection
类型： System.Data.Metadata.Edm StoreItemCollection
通过此方法确定其是否存在的数据库中包含的所有存储项的集合。

返回值

类型： System Boolean
如果数据库由连接指示并且存在 storeItemCollection 参数，则为 true。

如果提供程序可以推导出数据库仅基于连接，它不需要另外验证该 storeItemCollection 的所有元素。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.DbCreateDatabase 方法

DbProviderServices
.
.
::
.
DbCreateDatabase 方法
DbProviderServices 类

创建一个由连接指示的数据库并且基于 StoreItemCollection 的内容创建架构对象（表、主键、外键）。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Overridable Sub DbCreateDatabase ( _
    connection As DbConnection, _
    commandTimeout As Nullable(Of Integer), _
    storeItemCollection As StoreItemCollection _
)
protected virtual void DbCreateDatabase(
    DbConnection connection,
    Nullable<int> commandTimeout,
    StoreItemCollection storeItemCollection
)
protected:
virtual void DbCreateDatabase(
    DbConnection^ connection,
    Nullable<int> commandTimeout,
    StoreItemCollection^ storeItemCollection
)
abstract DbCreateDatabase :
        connection:DbConnection *
        commandTimeout:Nullable<int> *
        storeItemCollection:StoreItemCollection -> unit
override DbCreateDatabase :
        connection:DbConnection *
        commandTimeout:Nullable<int> *
        storeItemCollection:StoreItemCollection -> unit

参数

connection
类型： System.Data.Common DbConnection
需要创建到不存在的数据库的连接并用由 storeItemCollection 参数指示的存储对象进行填充。
commandTimeout
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

创建数据库所需的任何命令的执行超时。
storeItemCollection
类型： System.Data.Metadata.Edm StoreItemCollection
创建脚本所应基于的所有存储项的集合。

提供程序编写器将用用于您的目标数据库的实现重写此受保护的虚拟方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.DbCreateDatabaseScript 方法

DbProviderServices
.
.
::
.
DbCreateDatabaseScript 方法
DbProviderServices 类

基于 StoreItemCollection 参数的内容并针对与提供程序清单标记相对应的数据库版本生成数据定义语言（创建架构对象（表、主键、外键）的 DDL0 脚本）。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Overridable Function DbCreateDatabaseScript ( _
    providerManifestToken As String, _
    storeItemCollection As StoreItemCollection _
) As String
protected virtual string DbCreateDatabaseScript(
    string providerManifestToken,
    StoreItemCollection storeItemCollection
)
protected:
virtual String^ DbCreateDatabaseScript(
    String^ providerManifestToken,
    StoreItemCollection^ storeItemCollection
)
abstract DbCreateDatabaseScript :
        providerManifestToken:string *
        storeItemCollection:StoreItemCollection -> string
override DbCreateDatabaseScript :
        providerManifestToken:string *
        storeItemCollection:StoreItemCollection -> string

参数

providerManifestToken
类型： System String
标识目标版本的提供程序清单标记。
storeItemCollection
类型： System.Data.Metadata.Edm StoreItemCollection
数据库的结构。

返回值

类型： System String
基于 StoreItemCollection 参数的内容并针对与提供程序清单标记相对应的数据库版本创建架构对象的 DDL 脚本。

如果 storeItemCollection 中数据库的结构基于 providerManifestToken 指定的不同版本，生成的脚本可能无法正确创建数据库。

应该使用数据库特定的 DDL 命令分隔符分隔各个语句。

生成的脚本应该在具有足够权限的现有数据库的上下文中执行，不应该包括创建数据库的命令。该脚本可能包括用于创建架构和其他辅助对象（如序列）的命令。 生成的脚本应该在具有足够权限的现有数据库的上下文中执行，不应该包括创建数据库的命令。该脚本可能包括用于创建架构和其他辅助对象（如序列）的命令。

提供程序编写器将用用于您的目标数据库的实现重写此受保护的虚拟方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.DbDatabaseExists 方法

DbProviderServices
.
.
::
.
DbDatabaseExists 方法
DbProviderServices 类

返回一个值，该值指示服务器上是否存在给定数据库以及是否创建了 storeItemCollection 中包含的架构对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Overridable Function DbDatabaseExists ( _
    connection As DbConnection, _
    commandTimeout As Nullable(Of Integer), _
    storeItemCollection As StoreItemCollection _
) As Boolean
protected virtual bool DbDatabaseExists(
    DbConnection connection,
    Nullable<int> commandTimeout,
    StoreItemCollection storeItemCollection
)
protected:
virtual bool DbDatabaseExists(
    DbConnection^ connection,
    Nullable<int> commandTimeout,
    StoreItemCollection^ storeItemCollection
)
abstract DbDatabaseExists :
        connection:DbConnection *
        commandTimeout:Nullable<int> *
        storeItemCollection:StoreItemCollection -> bool
override DbDatabaseExists :
        connection:DbConnection *
        commandTimeout:Nullable<int> *
        storeItemCollection:StoreItemCollection -> bool

参数

connection
类型： System.Data.Common DbConnection
到某个数据库的连接，该数据库是否存在可通过此方法进行验证。
commandTimeout
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

确定数据库是否存在所需的任何命令的执行超时。
storeItemCollection
类型： System.Data.Metadata.Edm StoreItemCollection
通过此方法确定其是否存在的数据库的结构。

返回值

类型： System Boolean
如果数据库由连接指示并且存在 storeItemCollection 参数，则为 true。

如果提供程序可以推导出数据库仅基于连接，它不需要另外验证该 storeItemCollection 的所有元素。

提供程序编写器将用用于您的目标数据库的实现重写此受保护的虚拟方法。提供程序编写器可以验证是否找到了每个表和外部键。 提供程序编写器将用用于您的目标数据库的实现重写此受保护的虚拟方法。提供程序编写器可以验证是否找到了每个表和外部键。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.DbDeleteDatabase 方法

DbProviderServices
.
.
::
.
DbDeleteDatabase 方法
DbProviderServices 类

删除数据库的存储项集合中指定的所有存储对象以及数据库本身。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Overridable Sub DbDeleteDatabase ( _
    connection As DbConnection, _
    commandTimeout As Nullable(Of Integer), _
    storeItemCollection As StoreItemCollection _
)
protected virtual void DbDeleteDatabase(
    DbConnection connection,
    Nullable<int> commandTimeout,
    StoreItemCollection storeItemCollection
)
protected:
virtual void DbDeleteDatabase(
    DbConnection^ connection,
    Nullable<int> commandTimeout,
    StoreItemCollection^ storeItemCollection
)
abstract DbDeleteDatabase :
        connection:DbConnection *
        commandTimeout:Nullable<int> *
        storeItemCollection:StoreItemCollection -> unit
override DbDeleteDatabase :
        connection:DbConnection *
        commandTimeout:Nullable<int> *
        storeItemCollection:StoreItemCollection -> unit

参数

connection
类型： System.Data.Common DbConnection
到某个需要删除的现有数据库的连接。
commandTimeout
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

删除数据库所需的任何命令的执行超时。
storeItemCollection
类型： System.Data.Metadata.Edm StoreItemCollection
要删除的数据库的结构。

提供程序编写器将用用于您的目标数据库的实现重写此受保护的虚拟方法。自定义提供程序可以只删除 storeItemCollection 中定义的表。 提供程序编写器将用用于您的目标数据库的实现重写此受保护的虚拟方法。自定义提供程序可以只删除 storeItemCollection 中定义的表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.DeleteDatabase 方法

DbProviderServices
.
.
::
.
DeleteDatabase 方法
DbProviderServices 类

删除数据库的存储项集合中指定的所有存储对象以及数据库本身。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub DeleteDatabase ( _
    connection As DbConnection, _
    commandTimeout As Nullable(Of Integer), _
    storeItemCollection As StoreItemCollection _
)
public void DeleteDatabase(
    DbConnection connection,
    Nullable<int> commandTimeout,
    StoreItemCollection storeItemCollection
)
public:
void DeleteDatabase(
    DbConnection^ connection,
    Nullable<int> commandTimeout,
    StoreItemCollection^ storeItemCollection
)
member DeleteDatabase :
        connection:DbConnection *
        commandTimeout:Nullable<int> *
        storeItemCollection:StoreItemCollection -> unit

参数

connection
类型： System.Data.Common DbConnection
到某个需要删除的现有数据库的连接。
commandTimeout
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

删除数据库所需的任何命令的执行超时。
storeItemCollection
类型： System.Data.Metadata.Edm StoreItemCollection
要删除的数据库的结构。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.GetDbProviderManifest 方法

DbProviderServices
.
.
::
.
GetDbProviderManifest 方法
DbProviderServices 类

在派生类中重写时，返回一个派生自 DbProviderManifest 的类的实例。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected MustOverride Function GetDbProviderManifest ( _
    manifestToken As String _
) As DbProviderManifest
protected abstract DbProviderManifest GetDbProviderManifest(
    string manifestToken
)
protected:
virtual DbProviderManifest^ GetDbProviderManifest(
    String^ manifestToken
) abstract
abstract GetDbProviderManifest :
        manifestToken:string -> DbProviderManifest

参数

manifestToken
类型： System String
与提供程序清单关联的标记信息。

返回值

类型： System.Data.Common DbProviderManifest
表示提供程序清单的 DbProviderManifest 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.GetDbProviderManifestToken 方法

DbProviderServices
.
.
::
.
GetDbProviderManifestToken 方法
DbProviderServices 类

返回给定连接的提供程序清单标记。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected MustOverride Function GetDbProviderManifestToken ( _
    connection As DbConnection _
) As String
protected abstract string GetDbProviderManifestToken(
    DbConnection connection
)
protected:
virtual String^ GetDbProviderManifestToken(
    DbConnection^ connection
) abstract
abstract GetDbProviderManifestToken :
        connection:DbConnection -> string

参数

connection
类型： System.Data.Common DbConnection
到提供程序的连接。

返回值

类型： System String
指定连接的提供程序清单标记。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.GetProviderFactory 方法

DbProviderServices
.
.
::
.
GetProviderFactory 方法
DbProviderServices 类

基于指定的 DbConnection 检索 DbProviderFactory。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function GetProviderFactory ( _
    connection As DbConnection _
) As DbProviderFactory
public static DbProviderFactory GetProviderFactory(
    DbConnection connection
)
public:
static DbProviderFactory^ GetProviderFactory(
    DbConnection^ connection
)
static member GetProviderFactory :
        connection:DbConnection -> DbProviderFactory

参数

connection
类型： System.Data.Common DbConnection

返回值

类型： System.Data.Common DbProviderFactory
DbProviderFactory 的一个实例。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.GetProviderManifest 方法

DbProviderServices
.
.
::
.
GetProviderManifest 方法
DbProviderServices 类

使用指定的版本信息返回提供程序清单。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetProviderManifest ( _
    manifestToken As String _
) As DbProviderManifest
public DbProviderManifest GetProviderManifest(
    string manifestToken
)
public:
DbProviderManifest^ GetProviderManifest(
    String^ manifestToken
)
member GetProviderManifest :
        manifestToken:string -> DbProviderManifest

参数

manifestToken
类型： System String
与提供程序清单关联的标记信息。

返回值

类型： System.Data.Common DbProviderManifest
表示提供程序清单的 DbProviderManifest 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.GetProviderManifestToken 方法

DbProviderServices
.
.
::
.
GetProviderManifestToken 方法
DbProviderServices 类

返回提供程序清单标记。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetProviderManifestToken ( _
    connection As DbConnection _
) As String
public string GetProviderManifestToken(
    DbConnection connection
)
public:
String^ GetProviderManifestToken(
    DbConnection^ connection
)
member GetProviderManifestToken :
        connection:DbConnection -> string

参数

connection
类型： System.Data.Common DbConnection
到提供程序的连接。

返回值

类型： System String
提供程序清单标记。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderServices ..::.GetProviderServices 方法

DbProviderServices
.
.
::
.
GetProviderServices 方法
DbProviderServices 类

返回给定连接的提供程序。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function GetProviderServices ( _
    connection As DbConnection _
) As DbProviderServices
public static DbProviderServices GetProviderServices(
    DbConnection connection
)
public:
static DbProviderServices^ GetProviderServices(
    DbConnection^ connection
)
static member GetProviderServices :
        connection:DbConnection -> DbProviderServices

参数

connection
类型： System.Data.Common DbConnection
到提供程序的连接。

返回值

类型： System.Data.Common DbProviderServices
基于指定的连接对 T:System.Data.Common.DbProviderServices 进行实例化。 基于指定的连接对 T:System.Data.Common.DbProviderServices 进行实例化。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderServices 类
DbProviderServices 成员
System.Data.Common 命名空间


DbProviderSpecificTypePropertyAttribute 类

DbProviderSpecificTypePropertyAttribute 类
成员

标识在设置提供程序特定的类型时，使用强类型参数类中的哪个提供程序特定的属性。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<SerializableAttribute> _
<AttributeUsageAttribute(AttributeTargets.Property, AllowMultiple := False,  _
    Inherited := True)> _
Public NotInheritable Class DbProviderSpecificTypePropertyAttribute _
    Inherits Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets.Property, AllowMultiple = false,
    Inherited = true)]
public sealed class DbProviderSpecificTypePropertyAttribute : Attribute
[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets::Property, AllowMultiple = false,
    Inherited = true)]
public ref class DbProviderSpecificTypePropertyAttribute sealed : public Attribute
[<SealedAttribute>]
[<SerializableAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Property, AllowMultiple = false,
    Inherited = true)>]
type DbProviderSpecificTypePropertyAttribute =
    class
        inherit Attribute
    end

提供程序编写人员使用 DbProviderSpecificTypePropertyAttribute 指定特定于提供程序类型的参数属性，该参数属性不是继承自 DbParameter 基类。例如，SqlParameter 的 SqlDbType 属性就是特定于提供程序类型的属性，在 DbParameter 中找不到此属性。 提供程序编写人员使用 DbProviderSpecificTypePropertyAttribute 指定特定于提供程序类型的参数属性，该参数属性不是继承自 DbParameter 基类。例如，SqlParameter 的 SqlDbType 属性就是特定于提供程序类型的属性，在 DbParameter 中找不到此属性。

提供程序编写人员可以应用 DbProviderSpecificTypePropertyAttribute(true) 来指示特定于提供程序数据类型的参数属性。这允许使用反射的发现，从而使代码生成工具（如 Visual Studio 中使用的代码生成工具）生成适合特定提供程序的代码。如果设置了该属性，则 IsProviderSpecificTypeProperty 属性返回 true；否则返回 false。 提供程序编写人员可以应用 DbProviderSpecificTypePropertyAttribute(true) 来指示特定于提供程序数据类型的参数属性。这允许使用反射的发现，从而使代码生成工具（如 Visual Studio 中使用的代码生成工具）生成适合特定提供程序的代码。如果设置了该属性，则 IsProviderSpecificTypeProperty 属性返回 true；否则返回 false。 提供程序编写人员可以应用 DbProviderSpecificTypePropertyAttribute(true) 来指示特定于提供程序数据类型的参数属性。这允许使用反射的发现，从而使代码生成工具（如 Visual Studio 中使用的代码生成工具）生成适合特定提供程序的代码。如果设置了该属性，则 IsProviderSpecificTypeProperty 属性返回 true；否则返回 false。

System.Data.Common System.Data.Common..::.DbProviderSpecificTypePropertyAttributeDbProviderSpecificTypePropertyAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderSpecificTypePropertyAttribute 成员
System.Data.Common 命名空间

其他资源

利用特性扩展元数据


DbProviderSpecificTypePropertyAttribute 成员

DbProviderSpecificTypePropertyAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderSpecificTypePropertyAttribute 类

标识在设置提供程序特定的类型时，使用强类型参数类中的哪个提供程序特定的属性。

DbProviderSpecificTypePropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbProviderSpecificTypePropertyAttribute 类
System.Data.Common 命名空间


DbProviderSpecificTypePropertyAttribute 构造函数

DbProviderSpecificTypePropertyAttribute 构造函数
DbProviderSpecificTypePropertyAttribute 类

初始化 DbProviderSpecificTypePropertyAttribute 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    isProviderSpecificTypeProperty As Boolean _
)
public DbProviderSpecificTypePropertyAttribute(
    bool isProviderSpecificTypeProperty
)
public:
DbProviderSpecificTypePropertyAttribute(
    bool isProviderSpecificTypeProperty
)
new :
        isProviderSpecificTypeProperty:bool -> DbProviderSpecificTypePropertyAttribute

参数

isProviderSpecificTypeProperty
类型： System Boolean
指定该属性是否是提供程序特定的属性。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderSpecificTypePropertyAttribute 类
DbProviderSpecificTypePropertyAttribute 成员
System.Data.Common 命名空间


DbProviderSpecificTypePropertyAttribute 方法

DbProviderSpecificTypePropertyAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderSpecificTypePropertyAttribute 类

DbProviderSpecificTypePropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbProviderSpecificTypePropertyAttribute 类
System.Data.Common 命名空间


DbProviderSpecificTypePropertyAttribute 属性

DbProviderSpecificTypePropertyAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProviderSpecificTypePropertyAttribute 类

DbProviderSpecificTypePropertyAttribute 类型公开以下成员。

名称 说明
页首

参考

DbProviderSpecificTypePropertyAttribute 类
System.Data.Common 命名空间


DbProviderSpecificTypePropertyAttribute ..::.IsProviderSpecificTypeProperty 属性

DbProviderSpecificTypePropertyAttribute
.
.
::
.
IsProviderSpecificTypeProperty 属性
DbProviderSpecificTypePropertyAttribute 类

指示特性化属性是否为特定于提供程序的类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property IsProviderSpecificTypeProperty As Boolean
    Get
public bool IsProviderSpecificTypeProperty { get; }
public:
property bool IsProviderSpecificTypeProperty {
    bool get ();
}
member IsProviderSpecificTypeProperty : bool

属性值

类型： System Boolean
如果此特性所应用的属性是特定于提供程序的类型属性，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

DbProviderSpecificTypePropertyAttribute 类
DbProviderSpecificTypePropertyAttribute 成员
System.Data.Common 命名空间


DbTransaction 类

DbTransaction 类
成员

事务的基类。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustInherit Class DbTransaction _
    Inherits MarshalByRefObject _
    Implements IDbTransaction, IDisposable
public abstract class DbTransaction : MarshalByRefObject,
    IDbTransaction, IDisposable
public ref class DbTransaction abstract : public MarshalByRefObject,
    IDbTransaction, IDisposable
[<AbstractClassAttribute>]
type DbTransaction =
    class
        inherit MarshalByRefObject
        interface IDbTransaction
        interface IDisposable
    end

System.Data.Common System.Data.Common..::.DbTransactionDbTransaction

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 成员
System.Data.Common 命名空间


DbTransaction 成员

DbTransaction 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbTransaction 类

事务的基类。

DbTransaction 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbTransaction 类
System.Data.Common 命名空间


DbTransaction 构造函数

DbTransaction 构造函数
DbTransaction 类

初始化新的 DbTransaction 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Sub New
protected DbTransaction()
protected:
DbTransaction()
new : unit -> DbTransaction

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 类
DbTransaction 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbTransaction 方法

DbTransaction 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbTransaction 类

DbTransaction 类型公开以下成员。

名称 说明
页首

参考

DbTransaction 类
System.Data.Common 命名空间


DbTransaction ..::.Commit 方法

DbTransaction
.
.
::
.
Commit 方法
DbTransaction 类

提交数据库事务。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Commit
public abstract void Commit()
public:
virtual void Commit() abstract
abstract Commit : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 类
DbTransaction 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbTransaction ..::.Dispose 方法

DbTransaction
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbTransaction 类

释放由 DbTransaction 占用的非托管资源，还可以另外再释放托管资源。

名称 说明
页首

参考

DbTransaction 类
DbTransaction 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbTransaction ..::.Dispose 方法

DbTransaction
.
.
::
.
Dispose 方法
DbTransaction 类

释放 DbTransaction 使用的非托管资源。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub Dispose
public void Dispose()
public:
virtual void Dispose() sealed
abstract Dispose : unit -> unit
override Dispose : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 类
DbTransaction 成员
Dispose 重载
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbTransaction ..::.Dispose 方法 (Boolean)

DbTransaction
.
.
::
.
Dispose 方法 (Boolean)
DbTransaction 类

释放由 DbTransaction 占用的非托管资源，还可以另外再释放托管资源。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Sub Dispose ( _
    disposing As Boolean _
)
protected virtual void Dispose(
    bool disposing
)
protected:
virtual void Dispose(
    bool disposing
)
abstract Dispose :
        disposing:bool -> unit
override Dispose :
        disposing:bool -> unit

参数

disposing
类型： System Boolean
如果为 true，此方法将释放由此 DbTransaction 引用的任何托管对象所保留的全部资源。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 类
DbTransaction 成员
Dispose 重载
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbTransaction ..::.MemberwiseClone 方法

DbTransaction
.
.
::
.
MemberwiseClone 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbTransaction 类

名称 说明
页首

参考

DbTransaction 类
DbTransaction 成员
System.Data.Common 命名空间


DbTransaction ..::.Rollback 方法

DbTransaction
.
.
::
.
Rollback 方法
DbTransaction 类

从挂起状态回滚事务。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride Sub Rollback
public abstract void Rollback()
public:
virtual void Rollback() abstract
abstract Rollback : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 类
DbTransaction 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbTransaction 属性

DbTransaction 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbTransaction 类

DbTransaction 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbTransaction 类
System.Data.Common 命名空间


DbTransaction ..::.Connection 属性

DbTransaction
.
.
::
.
Connection 属性
DbTransaction 类

指定与该事务关联的 DbConnection 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Connection As DbConnection
    Get
public DbConnection Connection { get; }
public:
property DbConnection^ Connection {
    DbConnection^ get ();
}
member Connection : DbConnection

属性值

类型： System.Data.Common DbConnection
与该事务关联的 DbConnection 对象。

一个应用程序可以有多个数据源连接，每个连接都有零个或多个事务。此属性使您能够确定与特定事务关联的连接对象。 一个应用程序可以有多个数据源连接，每个连接都有零个或多个事务。此属性使您能够确定与特定事务关联的连接对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 类
DbTransaction 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbTransaction ..::.DbConnection 属性

DbTransaction
.
.
::
.
DbConnection 属性
DbTransaction 类

指定与该事务关联的 DbConnection 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected MustOverride ReadOnly Property DbConnection As DbConnection
    Get
protected abstract DbConnection DbConnection { get; }
protected:
virtual property DbConnection^ DbConnection {
    DbConnection^ get () abstract;
}
abstract DbConnection : DbConnection

属性值

类型： System.Data.Common DbConnection
与该事务关联的 DbConnection 对象。

一个应用程序可以有多个数据源连接，每个连接都有零个或多个事务。此属性使您能够确定与特定事务关联的连接对象。 一个应用程序可以有多个数据源连接，每个连接都有零个或多个事务。此属性使您能够确定与特定事务关联的连接对象。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 类
DbTransaction 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbTransaction ..::.IDbTransaction ..::.Connection 属性

DbTransaction
.
.
::
.
IDbTransaction
.
.
::
.
Connection 属性
DbTransaction 类

获取与该事务关联的 DbConnection 对象；如果该事务不再有效，则为 null 引用。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Private ReadOnly Property Connection As IDbConnection
    Implements IDbTransaction.Connection
    Get
IDbConnection IDbTransaction.Connection { get; }
private:
virtual property IDbConnection^ Connection {
    IDbConnection^ get () sealed = IDbTransaction::Connection::get;
}
private abstract Connection : IDbConnection
private override Connection : IDbConnection

属性值

类型： System.Data IDbConnection
与该事务关联的 DbConnection 对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 类
DbTransaction 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbTransaction ..::.IsolationLevel 属性

DbTransaction
.
.
::
.
IsolationLevel 属性
DbTransaction 类

指定该事务的 IsolationLevel。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public MustOverride ReadOnly Property IsolationLevel As IsolationLevel
    Get
public abstract IsolationLevel IsolationLevel { get; }
public:
virtual property IsolationLevel IsolationLevel {
    IsolationLevel get () abstract;
}
abstract IsolationLevel : IsolationLevel

属性值

类型： System.Data IsolationLevel
该事务的 IsolationLevel。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

DbTransaction 类
DbTransaction 成员
System.Data.Common 命名空间

其他资源

事务和并发 (ADO.NET)


DbXmlEnabledProviderManifest 类

DbXmlEnabledProviderManifest 类
成员

表示基于 XML 定义实现 DbProviderManifest 的基类。您可以使用 DbXmlEnabledProviderManifest 类在运行时获取特定于提供程序的信息。 表示基于 XML 定义实现 DbProviderManifest 的基类。您可以使用 DbXmlEnabledProviderManifest 类在运行时获取特定于提供程序的信息。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbXmlEnabledProviderManifest _
    Inherits DbProviderManifest
public abstract class DbXmlEnabledProviderManifest : DbProviderManifest
public ref class DbXmlEnabledProviderManifest abstract : public DbProviderManifest
[<AbstractClassAttribute>]
type DbXmlEnabledProviderManifest =
    class
        inherit DbProviderManifest
    end

DbXmlEnabledProviderManifest 类尤其适合与 EDM 具有对称类型映射的提供程序。在对称类型映射情况下，每个存储类型都映射到单个 Entity Data Model (EDM) 类型，与映射方向无关。换句话说，从 EDM 类型到提供程序类型的映射与从提供程序类型到 EDM 类型的映射相同。 DbXmlEnabledProviderManifest 类尤其适合与 EDM 具有对称类型映射的提供程序。在对称类型映射情况下，每个存储类型都映射到单个 Entity Data Model (EDM) 类型，与映射方向无关。换句话说，从 EDM 类型到提供程序类型的映射与从提供程序类型到 EDM 类型的映射相同。 DbXmlEnabledProviderManifest 类尤其适合与 EDM 具有对称类型映射的提供程序。在对称类型映射情况下，每个存储类型都映射到单个 Entity Data Model (EDM) 类型，与映射方向无关。换句话说，从 EDM 类型到提供程序类型的映射与从提供程序类型到 EDM 类型的映射相同。

在对称映射情况下，您可以从 DbXmlEnabledProviderManifest 类或 DbProviderManifest 类派生自定义提供程序类。对于对称映射情况，建议您从 DbXmlEnabledProviderManifest 类派生自定义提供程序类，因为 DbXmlEnabledProviderManifest 类允许您以声明方式指定清单。 在对称映射情况下，您可以从 DbXmlEnabledProviderManifest 类或 DbProviderManifest 类派生自定义提供程序类。对于对称映射情况，建议您从 DbXmlEnabledProviderManifest 类派生自定义提供程序类，因为 DbXmlEnabledProviderManifest 类允许您以声明方式指定清单。

System.Data.Common System.Data.Common..::.DbXmlEnabledProviderManifestDbXmlEnabledProviderManifest
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbXmlEnabledProviderManifest 成员
System.Data.Common 命名空间


DbXmlEnabledProviderManifest 成员

DbXmlEnabledProviderManifest 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbXmlEnabledProviderManifest 类

表示基于 XML 定义实现 DbProviderManifest 的基类。您可以使用 DbXmlEnabledProviderManifest 类在运行时获取特定于提供程序的信息。 表示基于 XML 定义实现 DbProviderManifest 的基类。您可以使用 DbXmlEnabledProviderManifest 类在运行时获取特定于提供程序的信息。

DbXmlEnabledProviderManifest 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbXmlEnabledProviderManifest 类
System.Data.Common 命名空间


DbXmlEnabledProviderManifest 构造函数

DbXmlEnabledProviderManifest 构造函数
DbXmlEnabledProviderManifest 类

初始化 DbXmlEnabledProviderManifest 类的新实例。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New ( _
    reader As XmlReader _
)
protected DbXmlEnabledProviderManifest(
    XmlReader reader
)
protected:
DbXmlEnabledProviderManifest(
    XmlReader^ reader
)
new :
        reader:XmlReader -> DbXmlEnabledProviderManifest

参数

reader
类型： System.Xml XmlReader
一个 XmlReader 对象，该对象提供对提供程序清单文件中的 XML 数据的访问。

实体框架提供生成来自给定 XmlReader 的提供程序清单信息的默认实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbXmlEnabledProviderManifest 类
DbXmlEnabledProviderManifest 成员
System.Data.Common 命名空间


DbXmlEnabledProviderManifest 方法

DbXmlEnabledProviderManifest 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbXmlEnabledProviderManifest 类

DbXmlEnabledProviderManifest 类型公开以下成员。

名称 说明
页首

参考

DbXmlEnabledProviderManifest 类
System.Data.Common 命名空间


DbXmlEnabledProviderManifest ..::.GetFacetDescriptions 方法

DbXmlEnabledProviderManifest
.
.
::
.
GetFacetDescriptions 方法
DbXmlEnabledProviderManifest 类

返回指定的实体数据模型 (EDM) 类型的 Facet 说明列表。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetFacetDescriptions ( _
    type As EdmType _
) As ReadOnlyCollection(Of FacetDescription)
public override ReadOnlyCollection<FacetDescription> GetFacetDescriptions(
    EdmType type
)
public:
virtual ReadOnlyCollection<FacetDescription^>^ GetFacetDescriptions(
    EdmType^ type
) override
abstract GetFacetDescriptions :
        type:EdmType -> ReadOnlyCollection<FacetDescription>
override GetFacetDescriptions :
        type:EdmType -> ReadOnlyCollection<FacetDescription>

参数

type
类型： System.Data.Metadata.Edm EdmType
要检索 Facet 说明的 EdmType。

返回值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
FacetDescription
>
)
>
)

一个 ReadOnlyCollection<(Of <(T>)>) 类型的集合，其中包含指定的 EDM 类型的 Facet 说明列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbXmlEnabledProviderManifest 类
DbXmlEnabledProviderManifest 成员
System.Data.Common 命名空间


DbXmlEnabledProviderManifest ..::.GetStoreFunctions 方法

DbXmlEnabledProviderManifest
.
.
::
.
GetStoreFunctions 方法
DbXmlEnabledProviderManifest 类

返回提供程序支持的函数的列表。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetStoreFunctions As ReadOnlyCollection(Of EdmFunction)
public override ReadOnlyCollection<EdmFunction> GetStoreFunctions()
public:
virtual ReadOnlyCollection<EdmFunction^>^ GetStoreFunctions() override
abstract GetStoreFunctions : unit -> ReadOnlyCollection<EdmFunction>
override GetStoreFunctions : unit -> ReadOnlyCollection<EdmFunction>

返回值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
EdmFunction
>
)
>
)

一个 ReadOnlyCollection<(Of <(T>)>) 类型的集合，其中包含提供程序支持的函数的列表。

此（非空）方法不返回用户定义的函数。如果提供程序不支持任何函数，则此方法返回一个空集合。 此（非空）方法不返回用户定义的函数。如果提供程序不支持任何函数，则此方法返回一个空集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbXmlEnabledProviderManifest 类
DbXmlEnabledProviderManifest 成员
System.Data.Common 命名空间


DbXmlEnabledProviderManifest ..::.GetStoreTypes 方法

DbXmlEnabledProviderManifest
.
.
::
.
GetStoreTypes 方法
DbXmlEnabledProviderManifest 类

返回存储提供程序支持的基元类型的列表。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetStoreTypes As ReadOnlyCollection(Of PrimitiveType)
public override ReadOnlyCollection<PrimitiveType> GetStoreTypes()
public:
virtual ReadOnlyCollection<PrimitiveType^>^ GetStoreTypes() override
abstract GetStoreTypes : unit -> ReadOnlyCollection<PrimitiveType>
override GetStoreTypes : unit -> ReadOnlyCollection<PrimitiveType>

返回值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
PrimitiveType
>
)
>
)

一个 ReadOnlyCollection<(Of <(T>)>) 类型的集合，其中包含存储提供程序支持的基元类型的列表。

如果存储不支持任何类型，则此方法（不能为空）返回一个空集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbXmlEnabledProviderManifest 类
DbXmlEnabledProviderManifest 成员
System.Data.Common 命名空间


DbXmlEnabledProviderManifest 属性

DbXmlEnabledProviderManifest 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbXmlEnabledProviderManifest 类

DbXmlEnabledProviderManifest 类型公开以下成员。

名称 说明
页首

参考

DbXmlEnabledProviderManifest 类
System.Data.Common 命名空间


DbXmlEnabledProviderManifest ..::.NamespaceName 属性

DbXmlEnabledProviderManifest
.
.
::
.
NamespaceName 属性
DbXmlEnabledProviderManifest 类

获取此提供程序清单支持的命名空间名称。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides ReadOnly Property NamespaceName As String
    Get
public override string NamespaceName { get; }
public:
virtual property String^ NamespaceName {
    String^ get () override;
}
abstract NamespaceName : string
override NamespaceName : string

属性值

类型： System String
此提供程序清单支持的命名空间名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbXmlEnabledProviderManifest 类
DbXmlEnabledProviderManifest 成员
System.Data.Common 命名空间


DbXmlEnabledProviderManifest ..::.StoreTypeNameToEdmPrimitiveType 属性

DbXmlEnabledProviderManifest
.
.
::
.
StoreTypeNameToEdmPrimitiveType 属性
DbXmlEnabledProviderManifest 类

获取指定的存储类型名称的最佳映射等效实体数据模型 (EDM) 类型。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected ReadOnly Property StoreTypeNameToEdmPrimitiveType As Dictionary(Of String, PrimitiveType)
    Get
protected Dictionary<string, PrimitiveType> StoreTypeNameToEdmPrimitiveType { get; }
protected:
property Dictionary<String^, PrimitiveType^>^ StoreTypeNameToEdmPrimitiveType {
    Dictionary<String^, PrimitiveType^>^ get ();
}
member StoreTypeNameToEdmPrimitiveType : Dictionary<string, PrimitiveType>

属性值

类型： System.Collections.Generic Dictionary
<
(Of
<
(
String, PrimitiveType
>
)
>
)

指定的存储类型名称的最佳映射等效 EDM 类型。

此属性（不可以为 null）返回 Dictionary 对象，该对象接受存储类型名称作为键，并返回其关联的 EDM 类型值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbXmlEnabledProviderManifest 类
DbXmlEnabledProviderManifest 成员
System.Data.Common 命名空间


DbXmlEnabledProviderManifest ..::.StoreTypeNameToStorePrimitiveType 属性

DbXmlEnabledProviderManifest
.
.
::
.
StoreTypeNameToStorePrimitiveType 属性
DbXmlEnabledProviderManifest 类

获取指定的存储类型名称的最佳映射等效存储基元类型。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected ReadOnly Property StoreTypeNameToStorePrimitiveType As Dictionary(Of String, PrimitiveType)
    Get
protected Dictionary<string, PrimitiveType> StoreTypeNameToStorePrimitiveType { get; }
protected:
property Dictionary<String^, PrimitiveType^>^ StoreTypeNameToStorePrimitiveType {
    Dictionary<String^, PrimitiveType^>^ get ();
}
member StoreTypeNameToStorePrimitiveType : Dictionary<string, PrimitiveType>

属性值

类型： System.Collections.Generic Dictionary
<
(Of
<
(
String, PrimitiveType
>
)
>
)

指定的存储类型名称的最佳映射等效存储基元类型。

此属性（不可以为 null）返回 Dictionary 对象，该对象接受存储类型名称作为键，并返回其关联的存储基元类型值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbXmlEnabledProviderManifest 类
DbXmlEnabledProviderManifest 成员
System.Data.Common 命名空间


EntityRecordInfo 类

EntityRecordInfo 类
成员

提供对实体元数据的访问。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Class EntityRecordInfo _
    Inherits DataRecordInfo
public class EntityRecordInfo : DataRecordInfo
public ref class EntityRecordInfo : public DataRecordInfo
type EntityRecordInfo =
    class
        inherit DataRecordInfo
    end

System.Data.Common System.Data.Common..::.EntityRecordInfoEntityRecordInfo
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityRecordInfo 成员
System.Data.Common 命名空间


EntityRecordInfo 成员

EntityRecordInfo 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityRecordInfo 类

提供对实体元数据的访问。

EntityRecordInfo 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntityRecordInfo 类
System.Data.Common 命名空间


EntityRecordInfo 构造函数

EntityRecordInfo 构造函数
EntityRecordInfo 类

使用数据字段的可枚举集合、特定键和实体集信息初始化新的 EntityRecordInfo 对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    metadata As EntityType, _
    memberInfo As IEnumerable(Of EdmMember), _
    entityKey As EntityKey, _
    entitySet As EntitySet _
)
public EntityRecordInfo(
    EntityType metadata,
    IEnumerable<EdmMember> memberInfo,
    EntityKey entityKey,
    EntitySet entitySet
)
public:
EntityRecordInfo(
    EntityType^ metadata,
    IEnumerable<EdmMember^>^ memberInfo,
    EntityKey^ entityKey,
    EntitySet^ entitySet
)
new :
        metadata:EntityType *
        memberInfo:IEnumerable<EdmMember> *
        entityKey:EntityKey *
        entitySet:EntitySet -> EntityRecordInfo

参数

metadata
类型： System.Data.Metadata.Edm EntityType
实体的 EntityType，由该 EntityRecordInfo 对象描述的 DbDataRecord 表示。
memberInfo
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
EdmMember
>
)
>
)

表示列信息的 EdmMember 对象的可枚举集合。
entityKey
类型： System.Data EntityKey
表示实体键的 EntityKey。
entitySet
类型： System.Data.Metadata.Edm EntitySet
表示实体所属实体集的 EntitySet 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityRecordInfo 类
EntityRecordInfo 成员
System.Data.Common 命名空间


EntityRecordInfo 方法

EntityRecordInfo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityRecordInfo 类

EntityRecordInfo 类型公开以下成员。

名称 说明
页首

参考

EntityRecordInfo 类
System.Data.Common 命名空间


EntityRecordInfo 属性

EntityRecordInfo 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityRecordInfo 类

EntityRecordInfo 类型公开以下成员。

名称 说明
页首

参考

EntityRecordInfo 类
System.Data.Common 命名空间


EntityRecordInfo ..::.EntityKey 属性

EntityRecordInfo
.
.
::
.
EntityKey 属性
EntityRecordInfo 类

获取实体的 EntityKey。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property EntityKey As EntityKey
    Get
public EntityKey EntityKey { get; }
public:
property EntityKey^ EntityKey {
    EntityKey^ get ();
}
member EntityKey : EntityKey

属性值

类型： System.Data EntityKey
一个 EntityKey。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityRecordInfo 类
EntityRecordInfo 成员
System.Data.Common 命名空间


FieldMetadata 结构

FieldMetadata 结构
成员

提供对 DataRecordInfo 对象的字段元数据的访问。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Structure FieldMetadata
public struct FieldMetadata
public value class FieldMetadata
[<SealedAttribute>]
type FieldMetadata =  struct end
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

FieldMetadata 成员
System.Data.Common 命名空间


FieldMetadata 成员

FieldMetadata 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FieldMetadata 结构

提供对 DataRecordInfo 对象的字段元数据的访问。

FieldMetadata 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

FieldMetadata 结构
System.Data.Common 命名空间


FieldMetadata 构造函数

FieldMetadata 构造函数
FieldMetadata 结构

使用指定的序数值和字段类型初始化新的 FieldMetadata 对象。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    ordinal As Integer, _
    fieldType As EdmMember _
)
public FieldMetadata(
    int ordinal,
    EdmMember fieldType
)
public:
FieldMetadata(
    int ordinal,
    EdmMember^ fieldType
)
new :
        ordinal:int *
        fieldType:EdmMember -> FieldMetadata

参数

ordinal
类型： System Int32
指定元数据位置的整数。
fieldType
类型： System.Data.Metadata.Edm EdmMember
字段类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

FieldMetadata 结构
FieldMetadata 成员
System.Data.Common 命名空间


FieldMetadata 方法

FieldMetadata 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FieldMetadata 结构

FieldMetadata 类型公开以下成员。

名称 说明
页首

参考

FieldMetadata 结构
System.Data.Common 命名空间


FieldMetadata 属性

FieldMetadata 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FieldMetadata 结构

FieldMetadata 类型公开以下成员。

名称 说明
页首

参考

FieldMetadata 结构
System.Data.Common 命名空间


FieldMetadata ..::.FieldType 属性

FieldMetadata
.
.
::
.
FieldType 属性
FieldMetadata 结构

获取此 FieldMetadata 对象的字段类型。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property FieldType As EdmMember
    Get
public EdmMember FieldType { get; }
public:
property EdmMember^ FieldType {
    EdmMember^ get ();
}
member FieldType : EdmMember

属性值

类型： System.Data.Metadata.Edm EdmMember
此 FieldMetadata 对象的字段类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

FieldMetadata 结构
FieldMetadata 成员
System.Data.Common 命名空间


FieldMetadata ..::.Ordinal 属性

FieldMetadata
.
.
::
.
Ordinal 属性
FieldMetadata 结构

获取此 FieldMetadata 对象的序数。

命名空间： System.Data.Common
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Ordinal As Integer
    Get
public int Ordinal { get; }
public:
property int Ordinal {
    int get ();
}
member Ordinal : int

属性值

类型： System Int32
表示序数值的整数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

FieldMetadata 结构
FieldMetadata 成员
System.Data.Common 命名空间


GroupByBehavior 枚举

GroupByBehavior 枚举

指定 GROUP BY 子句中的列与 SELECT 语句的选择列表中的非聚集列之间的关系。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration GroupByBehavior
public enum GroupByBehavior
public enum class GroupByBehavior
type GroupByBehavior
成员名称 | 说明
Unknown | 对 GROUP BY 子句的支持是未知的。
NotSupported | 不支持 GROUP BY 子句。
Unrelated | GROUP BY 子句中的列和 SELECT 列表中的非聚集列之间不存在关系。您可以按任何列分组。 GROUP BY 子句中的列和 SELECT 列表中的非聚集列之间不存在关系。您可以按任何列分组。
MustContainAll | GROUP BY 子句必须包含选择列表中的所有非聚集列，而且可以包含选择列表中没有的其他列。
ExactMatch | GROUP BY 子句必须包含选择列表中的所有非聚集列，而且不能包含选择列表中没有的其他列。

GroupByBehavior 值是互相排斥的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Common 命名空间


IdentifierCase 枚举

IdentifierCase 枚举

指定在搜索系统目录时，数据源如何处理标识符。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Enumeration IdentifierCase
public enum IdentifierCase
public enum class IdentifierCase
type IdentifierCase
成员名称 | 说明
Unknown | 数据源的标识符大小写规则不明确，无法识别此信息。
Insensitive | 搜索系统目录时，数据源忽略标识符的大小写。标识符“ab”和“AB”匹配。 搜索系统目录时，数据源忽略标识符的大小写。标识符“ab”和“AB”匹配。
Sensitive | 搜索系统目录时，数据源区分标识符的大小写。标识符“ab”和“AB”不匹配。 搜索系统目录时，数据源区分标识符的大小写。标识符“ab”和“AB”不匹配。

标识符可以带引号，也可以不带。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Common 命名空间


RowUpdatedEventArgs 类

RowUpdatedEventArgs 类
成员

为 .NET Framework 数据提供程序的 RowUpdated 事件提供数据。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Class RowUpdatedEventArgs _
    Inherits EventArgs
public class RowUpdatedEventArgs : EventArgs
public ref class RowUpdatedEventArgs : public EventArgs
type RowUpdatedEventArgs =
    class
        inherit EventArgs
    end

通常，对行的 Update 完成时引发 RowUpdated 事件消息。

System.Data.Common System.Data.Common..::.RowUpdatedEventArgsRowUpdatedEventArgs

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 成员
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs 成员

RowUpdatedEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowUpdatedEventArgs 类

为 .NET Framework 数据提供程序的 RowUpdated 事件提供数据。

RowUpdatedEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

RowUpdatedEventArgs 类
System.Data.Common 命名空间


RowUpdatedEventArgs 构造函数

RowUpdatedEventArgs 构造函数
RowUpdatedEventArgs 类

初始化 RowUpdatedEventArgs 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    dataRow As DataRow, _
    command As IDbCommand, _
    statementType As StatementType, _
    tableMapping As DataTableMapping _
)
public RowUpdatedEventArgs(
    DataRow dataRow,
    IDbCommand command,
    StatementType statementType,
    DataTableMapping tableMapping
)
public:
RowUpdatedEventArgs(
    DataRow^ dataRow,
    IDbCommand^ command,
    StatementType statementType,
    DataTableMapping^ tableMapping
)
new :
        dataRow:DataRow *
        command:IDbCommand *
        statementType:StatementType *
        tableMapping:DataTableMapping -> RowUpdatedEventArgs

参数

dataRow
类型： System.Data DataRow
通过 Update 发送的 DataRow。
command
类型： System.Data IDbCommand
当调用 Update 时执行的 IDbCommand。
statementType
类型： System.Data StatementType
所执行的 SQL 语句的类型。
tableMapping
类型： System.Data.Common DataTableMapping
通过 Update 发送的 DataTableMapping。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间


RowUpdatedEventArgs 方法

RowUpdatedEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowUpdatedEventArgs 类

RowUpdatedEventArgs 类型公开以下成员。

名称 说明
页首

参考

RowUpdatedEventArgs 类
System.Data.Common 命名空间


RowUpdatedEventArgs ..::.CopyToRows 方法

RowUpdatedEventArgs
.
.
::
.
CopyToRows 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowUpdatedEventArgs 类

允许您访问在批处理更新操作期间已处理的行。

名称 说明
页首

有关更多信息，请参见 Handling Batch Update-related Events and Errors。

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs ..::.CopyToRows 方法 ( array<DataRow >[]()[])

RowUpdatedEventArgs
.
.
::
.
CopyToRows 方法 (
array<
DataRow
>
[]
()
[]
)
RowUpdatedEventArgs 类

将对已修改的行的引用复制到提供的数组中。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyToRows ( _
    array As DataRow() _
)
public void CopyToRows(
    DataRow[] array
)
public:
void CopyToRows(
    array<DataRow^>^ array
)
member CopyToRows :
        array:DataRow[] -> unit

参数

array
类型：
array<
System.Data DataRow
>
[]
()
[]

要复制到其中的 DataRow 的数组。

array 的长度必须至少为 RowCount。

对 DataRow 的 null 实例引发 ArgumentNullException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
CopyToRows 重载
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs ..::.CopyToRows 方法 ( array<DataRow >[]()[], Int32)

RowUpdatedEventArgs
.
.
::
.
CopyToRows 方法 (
array<
DataRow
>
[]
()
[]
, Int32)
RowUpdatedEventArgs 类

将对已修改的行的引用复制到提供的数组中。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub CopyToRows ( _
    array As DataRow(), _
    arrayIndex As Integer _
)
public void CopyToRows(
    DataRow[] array,
    int arrayIndex
)
public:
void CopyToRows(
    array<DataRow^>^ array,
    int arrayIndex
)
member CopyToRows :
        array:DataRow[] *
        arrayIndex:int -> unit

参数

array
类型：
array<
System.Data DataRow
>
[]
()
[]

要复制到其中的 DataRow 的数组。
arrayIndex
类型： System Int32
要在数组中开始粘贴的位置的索引。

array 的长度必须至少为 RowCount + arrayIndex。

对 DataRow 的 null 实例引发 ArgumentNullException。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
CopyToRows 重载
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs 属性

RowUpdatedEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowUpdatedEventArgs 类

RowUpdatedEventArgs 类型公开以下成员。

名称 说明
页首

参考

RowUpdatedEventArgs 类
System.Data.Common 命名空间


RowUpdatedEventArgs ..::.Command 属性

RowUpdatedEventArgs
.
.
::
.
Command 属性
RowUpdatedEventArgs 类

获取调用 Update 时执行的 IDbCommand。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Command As IDbCommand
    Get
public IDbCommand Command { get; }
public:
property IDbCommand^ Command {
    IDbCommand^ get ();
}
member Command : IDbCommand

属性值

类型： System.Data IDbCommand
当调用 Update 时执行的 IDbCommand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs ..::.Errors 属性

RowUpdatedEventArgs
.
.
::
.
Errors 属性
RowUpdatedEventArgs 类

获取当 Command 执行时 .NET Framework 数据提供程序生成的任何错误。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property Errors As Exception
    Get
    Set
public Exception Errors { get; set; }
public:
property Exception^ Errors {
    Exception^ get ();
    void set (Exception^ value);
}
member Errors : Exception with get, set

属性值

类型： System Exception
当 Command 执行时 .NET Framework 数据提供程序生成的错误。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间

其他资源

行错误信息


RowUpdatedEventArgs ..::.RecordsAffected 属性

RowUpdatedEventArgs
.
.
::
.
RecordsAffected 属性
RowUpdatedEventArgs 类

通过执行 SQL 语句获取更改、插入或删除的行数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property RecordsAffected As Integer
    Get
public int RecordsAffected { get; }
public:
property int RecordsAffected {
    int get ();
}
member RecordsAffected : int

属性值

类型： System Int32
已更改、插入或删除的行数；如果没有任何行受到影响或语句失败，则为 0；-1 表示 SELECT 语句。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs ..::.Row 属性

RowUpdatedEventArgs
.
.
::
.
Row 属性
RowUpdatedEventArgs 类

获取通过 Update 发送的 DataRow。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Row As DataRow
    Get
public DataRow Row { get; }
public:
property DataRow^ Row {
    DataRow^ get ();
}
member Row : DataRow

属性值

类型： System.Data DataRow
通过 Update 发送的 DataRow。

启用批处理时，此属性的值将为 null。可通过 RowUpdatedEventArgs.CopyToRows 方法之一访问更新后的行。 启用批处理时，此属性的值将为 null。可通过 RowUpdatedEventArgs.CopyToRows 方法之一访问更新后的行。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs ..::.RowCount 属性

RowUpdatedEventArgs
.
.
::
.
RowCount 属性
RowUpdatedEventArgs 类

获取在一批更新后的记录中处理的行数。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property RowCount As Integer
    Get
public int RowCount { get; }
public:
property int RowCount {
    int get ();
}
member RowCount : int

属性值

类型： System Int32
指定已处理的行数的 int。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs ..::.StatementType 属性

RowUpdatedEventArgs
.
.
::
.
StatementType 属性
RowUpdatedEventArgs 类

获取所执行的 SQL 语句的类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property StatementType As StatementType
    Get
public StatementType StatementType { get; }
public:
property StatementType StatementType {
    StatementType get ();
}
member StatementType : StatementType

属性值

类型： System.Data StatementType
所执行的 SQL 语句的类型。

StatementType 可以为以下值之一：

  • 选择

  • Insert

  • 更新

  • Delete

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs ..::.Status 属性

RowUpdatedEventArgs
.
.
::
.
Status 属性
RowUpdatedEventArgs 类

获取 Command 属性的 UpdateStatus。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property Status As UpdateStatus
    Get
    Set
public UpdateStatus Status { get; set; }
public:
property UpdateStatus Status {
    UpdateStatus get ();
    void set (UpdateStatus value);
}
member Status : UpdateStatus with get, set

属性值

类型： System.Data UpdateStatus
UpdateStatus 值之一。默认值为 Continue。 UpdateStatus 值之一。默认值为 Continue。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间

其他资源

在 DataTable 中处理数据


RowUpdatedEventArgs ..::.TableMapping 属性

RowUpdatedEventArgs
.
.
::
.
TableMapping 属性
RowUpdatedEventArgs 类

获取通过 Update 发送的 DataTableMapping。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property TableMapping As DataTableMapping
    Get
public DataTableMapping TableMapping { get; }
public:
property DataTableMapping^ TableMapping {
    DataTableMapping^ get ();
}
member TableMapping : DataTableMapping

属性值

类型： System.Data.Common DataTableMapping
通过 Update 发送的 DataTableMapping。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatedEventArgs 类
RowUpdatedEventArgs 成员
System.Data.Common 命名空间


RowUpdatingEventArgs 类

RowUpdatingEventArgs 类
成员

为 .NET Framework 数据提供程序的 RowUpdating 事件提供数据。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Class RowUpdatingEventArgs _
    Inherits EventArgs
public class RowUpdatingEventArgs : EventArgs
public ref class RowUpdatingEventArgs : public EventArgs
type RowUpdatingEventArgs =
    class
        inherit EventArgs
    end

通常，在对行的 Update 开始之前引发 RowUpdating 事件。

System.Data.Common System.Data.Common..::.RowUpdatingEventArgsRowUpdatingEventArgs

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatingEventArgs 成员
System.Data.Common 命名空间
OleDbRowUpdatingEventArgs
SqlRowUpdatingEventArgs


RowUpdatingEventArgs 成员

RowUpdatingEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowUpdatingEventArgs 类

为 .NET Framework 数据提供程序的 RowUpdating 事件提供数据。

RowUpdatingEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

RowUpdatingEventArgs 类
System.Data.Common 命名空间


RowUpdatingEventArgs 构造函数

RowUpdatingEventArgs 构造函数
RowUpdatingEventArgs 类

初始化 RowUpdatingEventArgs 类的新实例。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Sub New ( _
    dataRow As DataRow, _
    command As IDbCommand, _
    statementType As StatementType, _
    tableMapping As DataTableMapping _
)
public RowUpdatingEventArgs(
    DataRow dataRow,
    IDbCommand command,
    StatementType statementType,
    DataTableMapping tableMapping
)
public:
RowUpdatingEventArgs(
    DataRow^ dataRow,
    IDbCommand^ command,
    StatementType statementType,
    DataTableMapping^ tableMapping
)
new :
        dataRow:DataRow *
        command:IDbCommand *
        statementType:StatementType *
        tableMapping:DataTableMapping -> RowUpdatingEventArgs

参数

dataRow
类型： System.Data DataRow
要进行 Update 的 DataRow。
command
类型： System.Data IDbCommand
当调用 Update 时执行的 IDbCommand。
statementType
类型： System.Data StatementType
要执行的 SQL 语句的类型。
tableMapping
类型： System.Data.Common DataTableMapping
要通过 Update 发送的 DataTableMapping。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatingEventArgs 类
RowUpdatingEventArgs 成员
System.Data.Common 命名空间


RowUpdatingEventArgs 方法

RowUpdatingEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowUpdatingEventArgs 类

RowUpdatingEventArgs 类型公开以下成员。

名称 说明
页首

参考

RowUpdatingEventArgs 类
System.Data.Common 命名空间


RowUpdatingEventArgs 属性

RowUpdatingEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
RowUpdatingEventArgs 类

RowUpdatingEventArgs 类型公开以下成员。

名称 说明
页首

参考

RowUpdatingEventArgs 类
System.Data.Common 命名空间


RowUpdatingEventArgs ..::.BaseCommand 属性

RowUpdatingEventArgs
.
.
::
.
BaseCommand 属性
RowUpdatingEventArgs 类

获取或设置此类的实例的 IDbCommand 对象。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Protected Overridable Property BaseCommand As IDbCommand
    Get
    Set
protected virtual IDbCommand BaseCommand { get; set; }
protected:
virtual property IDbCommand^ BaseCommand {
    IDbCommand^ get ();
    void set (IDbCommand^ value);
}
abstract BaseCommand : IDbCommand with get, set
override BaseCommand : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
要在 Update 过程中执行的 IDbCommand。

此方法允许实现对 IDbCommand 对象赋值执行类型检查。应该仅允许有效的 IDbCommand 对象（例如，SqlCommand 对象）。 此方法允许实现对 IDbCommand 对象赋值执行类型检查。应该仅允许有效的 IDbCommand 对象（例如，SqlCommand 对象）。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatingEventArgs 类
RowUpdatingEventArgs 成员
System.Data.Common 命名空间


RowUpdatingEventArgs ..::.Command 属性

RowUpdatingEventArgs
.
.
::
.
Command 属性
RowUpdatingEventArgs 类

获取要在 Update 操作过程中执行的 IDbCommand。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property Command As IDbCommand
    Get
    Set
public IDbCommand Command { get; set; }
public:
property IDbCommand^ Command {
    IDbCommand^ get ();
    void set (IDbCommand^ value);
}
member Command : IDbCommand with get, set

属性值

类型： System.Data IDbCommand
要在 Update 过程中执行的 IDbCommand。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatingEventArgs 类
RowUpdatingEventArgs 成员
System.Data.Common 命名空间


RowUpdatingEventArgs ..::.Errors 属性

RowUpdatingEventArgs
.
.
::
.
Errors 属性
RowUpdatingEventArgs 类

获取当 Command 执行时 .NET Framework 数据提供程序生成的任何错误。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property Errors As Exception
    Get
    Set
public Exception Errors { get; set; }
public:
property Exception^ Errors {
    Exception^ get ();
    void set (Exception^ value);
}
member Errors : Exception with get, set

属性值

类型： System Exception
当 Command 执行时 .NET Framework 数据提供程序生成的错误。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatingEventArgs 类
RowUpdatingEventArgs 成员
System.Data.Common 命名空间


RowUpdatingEventArgs ..::.Row 属性

RowUpdatingEventArgs
.
.
::
.
Row 属性
RowUpdatingEventArgs 类

获取要作为插入、更新或删除操作的一部分发送到服务器的 DataRow。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property Row As DataRow
    Get
public DataRow Row { get; }
public:
property DataRow^ Row {
    DataRow^ get ();
}
member Row : DataRow

属性值

类型： System.Data DataRow
要通过 Update 发送的 DataRow。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatingEventArgs 类
RowUpdatingEventArgs 成员
System.Data.Common 命名空间


RowUpdatingEventArgs ..::.StatementType 属性

RowUpdatingEventArgs
.
.
::
.
StatementType 属性
RowUpdatingEventArgs 类

获取要执行的 SQL 语句的类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property StatementType As StatementType
    Get
public StatementType StatementType { get; }
public:
property StatementType StatementType {
    StatementType get ();
}
member StatementType : StatementType

属性值

类型： System.Data StatementType
要执行的 SQL 语句的类型。

StatementType 可以为以下值之一：

  • 选择

  • Insert

  • 更新

  • Delete

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatingEventArgs 类
RowUpdatingEventArgs 成员
System.Data.Common 命名空间


RowUpdatingEventArgs ..::.Status 属性

RowUpdatingEventArgs
.
.
::
.
Status 属性
RowUpdatingEventArgs 类

获取或设置 Command 属性的 UpdateStatus。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Property Status As UpdateStatus
    Get
    Set
public UpdateStatus Status { get; set; }
public:
property UpdateStatus Status {
    UpdateStatus get ();
    void set (UpdateStatus value);
}
member Status : UpdateStatus with get, set

属性值

类型： System.Data UpdateStatus
UpdateStatus 值之一。默认值为 Continue。 UpdateStatus 值之一。默认值为 Continue。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatingEventArgs 类
RowUpdatingEventArgs 成员
System.Data.Common 命名空间


RowUpdatingEventArgs ..::.TableMapping 属性

RowUpdatingEventArgs
.
.
::
.
TableMapping 属性
RowUpdatingEventArgs 类

获取要通过 Update 发送的 DataTableMapping。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public ReadOnly Property TableMapping As DataTableMapping
    Get
public DataTableMapping TableMapping { get; }
public:
property DataTableMapping^ TableMapping {
    DataTableMapping^ get ();
}
member TableMapping : DataTableMapping

属性值

类型： System.Data.Common DataTableMapping
要通过 Update 发送的 DataTableMapping。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

RowUpdatingEventArgs 类
RowUpdatingEventArgs 成员
System.Data.Common 命名空间


SchemaTableColumn 类

SchemaTableColumn 类
成员

描述数据库表的架构的列元数据。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class SchemaTableColumn
public static class SchemaTableColumn
public ref class SchemaTableColumn abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type SchemaTableColumn =  class end

System.Data.Common System.Data.Common..::.SchemaTableColumnSchemaTableColumn
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn 成员

SchemaTableColumn 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SchemaTableColumn 类

描述数据库表的架构的列元数据。

SchemaTableColumn 类型公开以下成员。

名称 说明
页首

参考

SchemaTableColumn 类
System.Data.Common 命名空间


SchemaTableColumn 字段

SchemaTableColumn 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SchemaTableColumn 类

SchemaTableColumn 类型公开以下成员。

名称 说明
页首

参考

SchemaTableColumn 类
System.Data.Common 命名空间


SchemaTableColumn ..::.AllowDBNull 字段

SchemaTableColumn
.
.
::
.
AllowDBNull 字段
SchemaTableColumn 类

指定是否允许值 DBNull。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly AllowDBNull As String
public static readonly string AllowDBNull
public:
static initonly String^ AllowDBNull
static val AllowDBNull: string

如果允许 DBNull，则返回字符串“true”；否则返回“false”。

说明 说明

对于主键列，避免将 AllowDbNull 设置为“true”。定义为主键的列可设置为 AllowDbNull，但不可赋予它空值。 对于主键列，避免将 AllowDbNull 设置为“true”。定义为主键的列可设置为 AllowDbNull，但不可赋予它空值。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.BaseColumnName 字段

SchemaTableColumn
.
.
::
.
BaseColumnName 字段
SchemaTableColumn 类

指定架构表中的列的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly BaseColumnName As String
public static readonly string BaseColumnName
public:
static initonly String^ BaseColumnName
static val BaseColumnName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.BaseSchemaName 字段

SchemaTableColumn
.
.
::
.
BaseSchemaName 字段
SchemaTableColumn 类

指定架构表中的架构的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly BaseSchemaName As String
public static readonly string BaseSchemaName
public:
static initonly String^ BaseSchemaName
static val BaseSchemaName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.BaseTableName 字段

SchemaTableColumn
.
.
::
.
BaseTableName 字段
SchemaTableColumn 类

指定架构表中的表的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly BaseTableName As String
public static readonly string BaseTableName
public:
static initonly String^ BaseTableName
static val BaseTableName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.ColumnName 字段

SchemaTableColumn
.
.
::
.
ColumnName 字段
SchemaTableColumn 类

指定架构表中的列的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ColumnName As String
public static readonly string ColumnName
public:
static initonly String^ ColumnName
static val ColumnName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.ColumnOrdinal 字段

SchemaTableColumn
.
.
::
.
ColumnOrdinal 字段
SchemaTableColumn 类

指定列的序号。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ColumnOrdinal As String
public static readonly string ColumnOrdinal
public:
static initonly String^ ColumnOrdinal
static val ColumnOrdinal: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.ColumnSize 字段

SchemaTableColumn
.
.
::
.
ColumnSize 字段
SchemaTableColumn 类

指定列的大小。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ColumnSize As String
public static readonly string ColumnSize
public:
static initonly String^ ColumnSize
static val ColumnSize: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.DataType 字段

SchemaTableColumn
.
.
::
.
DataType 字段
SchemaTableColumn 类

指定列中数据的类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly DataType As String
public static readonly string DataType
public:
static initonly String^ DataType
static val DataType: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.IsAliased 字段

SchemaTableColumn
.
.
::
.
IsAliased 字段
SchemaTableColumn 类

指定该列是否具有别名。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsAliased As String
public static readonly string IsAliased
public:
static initonly String^ IsAliased
static val IsAliased: string

如果该列具有别名，则返回字符串“true”；否则返回“false”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.IsExpression 字段

SchemaTableColumn
.
.
::
.
IsExpression 字段
SchemaTableColumn 类

指定该列是否是一个表达式。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsExpression As String
public static readonly string IsExpression
public:
static initonly String^ IsExpression
static val IsExpression: string

如果该列为表达式，则返回字符串“true”；否则返回“false”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.IsKey 字段

SchemaTableColumn
.
.
::
.
IsKey 字段
SchemaTableColumn 类

指定该列是否是表的一个键。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsKey As String
public static readonly string IsKey
public:
static initonly String^ IsKey
static val IsKey: string

如果该列为键，则返回字符串“true”；否则返回“false”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.IsLong 字段

SchemaTableColumn
.
.
::
.
IsLong 字段
SchemaTableColumn 类

指定该列是否包含 long 型数据。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsLong As String
public static readonly string IsLong
public:
static initonly String^ IsLong
static val IsLong: string

long 型数据的定义是提供程序特定的。如果该列包含长数据，则返回字符串“true”；否则返回“false”。 long 型数据的定义是提供程序特定的。如果该列包含长数据，则返回字符串“true”；否则返回“false”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.IsUnique 字段

SchemaTableColumn
.
.
::
.
IsUnique 字段
SchemaTableColumn 类

指定是否有唯一的约束应用于此列。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsUnique As String
public static readonly string IsUnique
public:
static initonly String^ IsUnique
static val IsUnique: string

如果有唯一约束应用于此列，则返回字符串“true”；否则返回“false”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.NonVersionedProviderType 字段

SchemaTableColumn
.
.
::
.
NonVersionedProviderType 字段
SchemaTableColumn 类

指定该列特定于无版本提供程序的数据类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly NonVersionedProviderType As String
public static readonly string NonVersionedProviderType
public:
static initonly String^ NonVersionedProviderType
static val NonVersionedProviderType: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.NumericPrecision 字段

SchemaTableColumn
.
.
::
.
NumericPrecision 字段
SchemaTableColumn 类

指定列数据的精度（如果是数值数据）。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly NumericPrecision As String
public static readonly string NumericPrecision
public:
static initonly String^ NumericPrecision
static val NumericPrecision: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.NumericScale 字段

SchemaTableColumn
.
.
::
.
NumericScale 字段
SchemaTableColumn 类

指定列数据的小数位数（如果是数值数据）。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly NumericScale As String
public static readonly string NumericScale
public:
static initonly String^ NumericScale
static val NumericScale: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableColumn ..::.ProviderType 字段

SchemaTableColumn
.
.
::
.
ProviderType 字段
SchemaTableColumn 类

指定列的提供程序特定的数据类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ProviderType As String
public static readonly string ProviderType
public:
static initonly String^ ProviderType
static val ProviderType: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableColumn 类
SchemaTableColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn 类

SchemaTableOptionalColumn 类
成员

描述数据库表的架构的可选列元数据。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public NotInheritable Class SchemaTableOptionalColumn
public static class SchemaTableOptionalColumn
public ref class SchemaTableOptionalColumn abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type SchemaTableOptionalColumn =  class end

System.Data.Common System.Data.Common..::.SchemaTableOptionalColumnSchemaTableOptionalColumn
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn 成员

SchemaTableOptionalColumn 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SchemaTableOptionalColumn 类

描述数据库表的架构的可选列元数据。

SchemaTableOptionalColumn 类型公开以下成员。

名称 说明
页首

参考

SchemaTableOptionalColumn 类
System.Data.Common 命名空间


SchemaTableOptionalColumn 字段

SchemaTableOptionalColumn 字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SchemaTableOptionalColumn 类

SchemaTableOptionalColumn 类型公开以下成员。

名称 说明
页首

参考

SchemaTableOptionalColumn 类
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.AutoIncrementSeed 字段

SchemaTableOptionalColumn
.
.
::
.
AutoIncrementSeed 字段
SchemaTableOptionalColumn 类

指定新标识列的序列被分配的值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly AutoIncrementSeed As String
public static readonly string AutoIncrementSeed
public:
static initonly String^ AutoIncrementSeed
static val AutoIncrementSeed: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.AutoIncrementStep 字段

SchemaTableOptionalColumn
.
.
::
.
AutoIncrementStep 字段
SchemaTableOptionalColumn 类

指定标识列中的值之间的增量。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly AutoIncrementStep As String
public static readonly string AutoIncrementStep
public:
static initonly String^ AutoIncrementStep
static val AutoIncrementStep: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.BaseCatalogName 字段

SchemaTableOptionalColumn
.
.
::
.
BaseCatalogName 字段
SchemaTableOptionalColumn 类

与最新的查询的结果相关联的目录的名称。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly BaseCatalogName As String
public static readonly string BaseCatalogName
public:
static initonly String^ BaseCatalogName
static val BaseCatalogName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.BaseColumnNamespace 字段

SchemaTableOptionalColumn
.
.
::
.
BaseColumnNamespace 字段
SchemaTableOptionalColumn 类

列的命名空间。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly BaseColumnNamespace As String
public static readonly string BaseColumnNamespace
public:
static initonly String^ BaseColumnNamespace
static val BaseColumnNamespace: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.BaseServerName 字段

SchemaTableOptionalColumn
.
.
::
.
BaseServerName 字段
SchemaTableOptionalColumn 类

列的服务器名。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly BaseServerName As String
public static readonly string BaseServerName
public:
static initonly String^ BaseServerName
static val BaseServerName: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.BaseTableNamespace 字段

SchemaTableOptionalColumn
.
.
::
.
BaseTableNamespace 字段
SchemaTableOptionalColumn 类

包含列的表的命名空间。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly BaseTableNamespace As String
public static readonly string BaseTableNamespace
public:
static initonly String^ BaseTableNamespace
static val BaseTableNamespace: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.ColumnMapping 字段

SchemaTableOptionalColumn
.
.
::
.
ColumnMapping 字段
SchemaTableOptionalColumn 类

指定列的映射。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ColumnMapping As String
public static readonly string ColumnMapping
public:
static initonly String^ ColumnMapping
static val ColumnMapping: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.DefaultValue 字段

SchemaTableOptionalColumn
.
.
::
.
DefaultValue 字段
SchemaTableOptionalColumn 类

列的默认值。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly DefaultValue As String
public static readonly string DefaultValue
public:
static initonly String^ DefaultValue
static val DefaultValue: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.Expression 字段

SchemaTableOptionalColumn
.
.
::
.
Expression 字段
SchemaTableOptionalColumn 类

用于计算该列的表达式。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly Expression As String
public static readonly string Expression
public:
static initonly String^ Expression
static val Expression: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.IsAutoIncrement 字段

SchemaTableOptionalColumn
.
.
::
.
IsAutoIncrement 字段
SchemaTableOptionalColumn 类

指定列中的列值是否自动递增。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsAutoIncrement As String
public static readonly string IsAutoIncrement
public:
static initonly String^ IsAutoIncrement
static val IsAutoIncrement: string

如果列自动递增，则返回字符串“true”；否则返回“false”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.IsHidden 字段

SchemaTableOptionalColumn
.
.
::
.
IsHidden 字段
SchemaTableOptionalColumn 类

指定该列是否是隐藏的。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsHidden As String
public static readonly string IsHidden
public:
static initonly String^ IsHidden
static val IsHidden: string

如果列是隐藏的，则返回字符串“true”，否则返回“false”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.IsReadOnly 字段

SchemaTableOptionalColumn
.
.
::
.
IsReadOnly 字段
SchemaTableOptionalColumn 类

指定该列是否是只读的。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsReadOnly As String
public static readonly string IsReadOnly
public:
static initonly String^ IsReadOnly
static val IsReadOnly: string

如果列是只读的，则返回字符串“true”，否则返回“false”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.IsRowVersion 字段

SchemaTableOptionalColumn
.
.
::
.
IsRowVersion 字段
SchemaTableOptionalColumn 类

指定该列是否包含行版本信息。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly IsRowVersion As String
public static readonly string IsRowVersion
public:
static initonly String^ IsRowVersion
static val IsRowVersion: string

如果列包含行版本信息，则返回字符串“true”，否则返回“false”。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SchemaTableOptionalColumn ..::.ProviderSpecificDataType 字段

SchemaTableOptionalColumn
.
.
::
.
ProviderSpecificDataType 字段
SchemaTableOptionalColumn 类

指定列的提供程序特定的数据类型。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
Public Shared ReadOnly ProviderSpecificDataType As String
public static readonly string ProviderSpecificDataType
public:
static initonly String^ ProviderSpecificDataType
static val ProviderSpecificDataType: string

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

XNA Framework

受以下版本支持：3.0、2.0、1.0

参考

SchemaTableOptionalColumn 类
SchemaTableOptionalColumn 成员
System.Data.Common 命名空间


SupportedJoinOperators 枚举

SupportedJoinOperators 枚举

指定数据源支持何种类型的 Transact-SQL 联接语句。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System.Data.Common
程序集： System.Data（在 System.Data.dll 中）
<FlagsAttribute> _
Public Enumeration SupportedJoinOperators
[FlagsAttribute]
public enum SupportedJoinOperators
[FlagsAttribute]
public enum class SupportedJoinOperators
[<FlagsAttribute>]
type SupportedJoinOperators
成员名称 | 说明
None | 数据源不支持联接查询。
Inner | 数据源支持内部联接。
LeftOuter | 数据源支持左外部联接。
RightOuter | 数据源支持右外部联接。
FullOuter | 数据源支持完全外部联接。

这些成员是标志，它们允许联接功能的按位组合。

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Common 命名空间


System.Data.Common.CommandTrees 命名空间

System.Data.Common.CommandTrees 命名空间

System.Data.Common.CommandTrees 命名空间提供一些类，用于生成构成命令树的表达式。

命令树是查询的对象模型表示形式，可用于表示在 ADO.NET 实体数据模型 (EDM) 和存储元数据中查询、更新、插入及删除命令。

 | 类 | 说明
公共类 | DbAggregate | 实现 GroupBy 子句中的聚合所需的基本功能。
公共类 | DbAndExpression | 表示两个 Boolean 参数的逻辑“与”。此类不能继承。 表示两个 Boolean 参数的逻辑“与”。此类不能继承。
公共类 | DbApplyExpression | 表示应用操作，应用操作对指定输入集中的每个元素调用指定函数。无法继承此类。 表示应用操作，应用操作对指定输入集中的每个元素调用指定函数。无法继承此类。
公共类 | DbArithmeticExpression | 表示应用于数值参数的算术运算。加、减、乘、除、取模和取负是算术运算。无法继承此类。 表示应用于数值参数的算术运算。加、减、乘、除、取模和取负是算术运算。无法继承此类。 表示应用于数值参数的算术运算。加、减、乘、除、取模和取负是算术运算。无法继承此类。
公共类 | DbBinaryExpression | 实现接受两个表达式操作数的表达式所需的基本功能。
公共类 | DbCaseExpression | 表示 DbCaseExpression 的 When、Then 和 Else 子句。此类不能被继承。 表示 DbCaseExpression 的 When、Then 和 Else 子句。此类不能被继承。
公共类 | DbCastExpression | 表示将单个参数转换为指定类型的类型转换。此类不能继承。 表示将单个参数转换为指定类型的类型转换。此类不能继承。
公共类 | DbCommandTree | 一个不可变的类，用于实现 Query、Insert、Update、Delete 和函数调用命令目录树类型的基本功能。
公共类 | DbComparisonExpression | 表示应用于两个参数的比较操作。等于、大于、大于等于、小于、小于等于和不等于是比较操作。无法继承此类。 表示应用于两个参数的比较操作。等于、大于、大于等于、小于、小于等于和不等于是比较操作。无法继承此类。 表示应用于两个参数的比较操作。等于、大于、大于等于、小于、小于等于和不等于是比较操作。无法继承此类。
公共类 | DbConstantExpression | 表示不同种类的常量（文本）。无法继承此类。 表示不同种类的常量（文本）。无法继承此类。
公共类 | DbCrossJoinExpression | 表示给定集合参数之间的无条件联接操作。此类不能被继承。 表示给定集合参数之间的无条件联接操作。此类不能被继承。
公共类 | DbDeleteCommandTree | 表示以命令目录树表示的单行删除操作。无法继承此类。 表示以命令目录树表示的单行删除操作。无法继承此类。
公共类 | DbDerefExpression | 表示基于指定的引用检索实体的表达式。此类不能继承。 表示基于指定的引用检索实体的表达式。此类不能继承。
公共类 | DbDistinctExpression | 从指定集参数中移除重复元素。无法继承此类。 从指定集参数中移除重复元素。无法继承此类。
公共类 | DbElementExpression | 表示将指定集参数转换为单一实例的转换。无法继承此类。 表示将指定集参数转换为单一实例的转换。无法继承此类。
公共类 | DbEntityRefExpression | 表示从基础实体实例提取引用的表达式。此类不能继承。 表示从基础实体实例提取引用的表达式。此类不能继承。
公共类 | DbExceptExpression | 表示左操作数和右操作数之间的减集操作。无法继承此类。 表示左操作数和右操作数之间的减集操作。无法继承此类。
公共类 | DbExpression | 实现表达式类型所需的基本功能。
公共类 | DbExpressionBinding | 表示 DbFilterExpression、DbProjectExpression 和 DbJoinExpression 等关系表达式的输入集。此类不能被继承。 表示 DbFilterExpression、DbProjectExpression 和 DbJoinExpression 等关系表达式的输入集。此类不能被继承。
公共类 | DbExpressionVisitor | 定义不返回结果值的访问者应实现的基本功能。
公共类 | DbExpressionVisitor TResultType | 定义返回特定类型结果值的访问者应实现的基本功能。
公共类 | DbFilterExpression | 表示应用来筛选输入集的谓词。这将生成满足该谓词的元素集。此类不能被继承。 表示应用来筛选输入集的谓词。这将生成满足该谓词的元素集。此类不能被继承。 表示应用来筛选输入集的谓词。这将生成满足该谓词的元素集。此类不能被继承。
公共类 | DbFunctionAggregate | 支持标准聚合函数，如 MIN、MAX、AVG、SUM 等等。无法继承此类。 支持标准聚合函数，如 MIN、MAX、AVG、SUM 等等。无法继承此类。
公共类 | DbFunctionCommandTree | 表示对数据库函数的调用。
公共类 | DbFunctionExpression | 表示函数调用。无法继承此类。 表示函数调用。无法继承此类。
公共类 | DbGroupAggregate | 表示构成组的元素的集合。
公共类 | DbGroupByExpression | 表示分组操作。分组操作对输入集中的元素进行分组，分组依据是在应用指定聚合之前指定的键表达式。此类不能被继承。 表示分组操作。分组操作对输入集中的元素进行分组，分组依据是在应用指定聚合之前指定的键表达式。此类不能被继承。 表示分组操作。分组操作对输入集中的元素进行分组，分组依据是在应用指定聚合之前指定的键表达式。此类不能被继承。
公共类 | DbGroupExpressionBinding | 定义输入集与 DbGroupByExpression 的绑定。此类不能被继承。 定义输入集与 DbGroupByExpression 的绑定。此类不能被继承。
公共类 | DbInsertCommandTree | 表示以命令目录树表示的单行插入操作。无法继承此类。 表示以命令目录树表示的单行插入操作。无法继承此类。
公共类 | DbIntersectExpression | 表示左操作数和右操作数之间的交集操作。无法继承此类。 表示左操作数和右操作数之间的交集操作。无法继承此类。
公共类 | DbIsEmptyExpression | 表示应用于单个集参数的空集确定。此类不能继承。 表示应用于单个集参数的空集确定。此类不能继承。
公共类 | DbIsNullExpression | 表示应用于单个参数的 null 确定。此类不能继承。 表示应用于单个参数的 null 确定。此类不能继承。
公共类 | DbIsOfExpression | 表示将单个参数与指定类型进行比较的类型比较。无法继承此类。 表示将单个参数与指定类型进行比较的类型比较。无法继承此类。
公共类 | DbJoinExpression | 表示在指定联接条件下给定的集合参数之间的内部联接、左外部联接或完全外部联接操作。
公共类 | DbLambda | 表示一个 lambda 函数，可以调用此函数以生成 DbLambdaExpression。此类不能被继承。 表示一个 lambda 函数，可以调用此函数以生成 DbLambdaExpression。此类不能被继承。
公共类 | DbLambdaExpression | 允许对由 DbExpression 对象表示的参数应用 lambda 函数。
公共类 | DbLikeExpression | 表示与带有可选转义字符串的指定模式进行比较的字符串比较。无法继承此类。 表示与带有可选转义字符串的指定模式进行比较的字符串比较。无法继承此类。
公共类 | DbLimitExpression | 表示将参数集合中的元素个数限制为指定限制值的限制。
公共类 | DbModificationClause | 在插入或更新修改操作中指定单个子句。
公共类 | DbModificationCommandTree | 表示以命令目录树表示的数据操作语言 (DML) 操作。
公共类 | DbNewInstanceExpression | 表示给定类型的新实例的构造，包括集和记录类型。无法继承此类。 表示给定类型的新实例的构造，包括集和记录类型。无法继承此类。
公共类 | DbNotExpression | 表示单个 Boolean 参数的逻辑“非”。此类不能被继承。 表示单个 Boolean 参数的逻辑“非”。此类不能被继承。
公共类 | DbNullExpression | 表示对类型化 null 文本的引用。此类不能继承。 表示对类型化 null 文本的引用。此类不能继承。
公共类 | DbOfTypeExpression | 表示根据给定集参数检索的指定类型的元素。无法继承此类。 表示根据给定集参数检索的指定类型的元素。无法继承此类。
公共类 | DbOrExpression | 表示两个 Boolean 参数的逻辑“或”。此类不能被继承。 表示两个 Boolean 参数的逻辑“或”。此类不能被继承。
公共类 | DbParameterReferenceExpression | 表示对包含此表达式的命令目录树中所声明的参数的引用。此类不能被继承。 表示对包含此表达式的命令目录树中所声明的参数的引用。此类不能被继承。
公共类 | DbProjectExpression | 表示给定输入集对指定表达式的投影。此类不能被继承。 表示给定输入集对指定表达式的投影。此类不能被继承。
公共类 | DbPropertyExpression | 提供用于检索实例属性的方法和属性。此类不能被继承。 提供用于检索实例属性的方法和属性。此类不能被继承。
公共类 | DbQuantifierExpression | 表示对指定输入集的元素执行的指定类型的限定符运算。无法继承此类。 表示对指定输入集的元素执行的指定类型的限定符运算。无法继承此类。
公共类 | DbQueryCommandTree | 表示以命令目录树表示的查询操作。此类不能被继承。 表示以命令目录树表示的查询操作。此类不能被继承。
公共类 | DbRefExpression | 表示对实体集中的特定实例的强类型化引用。无法继承此类。 表示对实体集中的特定实例的强类型化引用。无法继承此类。
公共类 | DbRefKeyExpression | 表示根据基础引用值对键值（以其结构形式）的检索。此类不能继承。 表示根据基础引用值对键值（以其结构形式）的检索。此类不能继承。
公共类 | DbRelationshipNavigationExpression | 表示关系的导航。无法继承此类。 表示关系的导航。无法继承此类。
公共类 | DbScanExpression | 表示对 Target 属性所指示的实体集或关系集的扫描。无法继承此类。 表示对 Target 属性所指示的实体集或关系集的扫描。无法继承此类。
公共类 | DbSetClause | 指定在修改操作中用于设置属性值的子句。无法继承此类。 指定在修改操作中用于设置属性值的子句。无法继承此类。
公共类 | DbSkipExpression | 跳过指定数量的输入集元素。只有在输入集合已按排序键指定的顺序进行排序之后，才能使用 DbSkipExpression。 跳过指定数量的输入集元素。只有在输入集合已按排序键指定的顺序进行排序之后，才能使用 DbSkipExpression。
公共类 | DbSortClause | 指定可用作 DbSortExpression 的排序顺序的组成部分的排序键。无法继承此类。 指定可用作 DbSortExpression 的排序顺序的组成部分的排序键。无法继承此类。
公共类 | DbSortExpression | 表示根据给定排序键应用于指定输入集的元素的排序操作。此类不能被继承。 表示根据给定排序键应用于指定输入集的元素的排序操作。此类不能被继承。
公共类 | DbTreatExpression | 表示应用于多态参数的类型转换操作。此类不能继承。 表示应用于多态参数的类型转换操作。此类不能继承。
公共类 | DbUnaryExpression | 实现接受单个表达式参数的表达式所需的基本功能。
公共类 | DbUnionAllExpression | 表示左操作数和右操作数之间的并集（不去除重复项）操作。此类不能继承。 表示左操作数和右操作数之间的并集（不去除重复项）操作。此类不能继承。
公共类 | DbUpdateCommandTree | 表示以命令目录树表示的单行更新操作。无法继承此类。 表示以命令目录树表示的单行更新操作。无法继承此类。
公共类 | DbVariableReferenceExpression | 表示对当前作用域中的变量的引用。此类不能被继承。 表示对当前作用域中的变量的引用。此类不能被继承。
 | 枚举 | 说明
公共枚举 | DbExpressionKind | 包含一些值，每个表达式类都使用这些值来指明它所表示的操作的值。检索 DbExpression 的 ExpressionKind 属性可以确定该表达式所表示的操作。 包含一些值，每个表达式类都使用这些值来指明它所表示的操作的值。检索 DbExpression 的 ExpressionKind 属性可以确定该表达式所表示的操作。


DbAggregate 类

DbAggregate 类
成员

实现 GroupBy 子句中的聚合所需的基本功能。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbAggregate
public abstract class DbAggregate
public ref class DbAggregate abstract
[<AbstractClassAttribute>]
type DbAggregate =  class end

聚合是伪表达式，在可出现的位置方面受到严格的限制。聚合只能出现在 GroupBy 表达式的聚合子句中。 聚合是伪表达式，在可出现的位置方面受到严格的限制。聚合只能出现在 GroupBy 表达式的聚合子句中。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbAggregateDbAggregate

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbAggregate 成员
System.Data.Common.CommandTrees 命名空间


DbAggregate 成员

DbAggregate 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbAggregate 类

实现 GroupBy 子句中的聚合所需的基本功能。

DbAggregate 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbAggregate 类
System.Data.Common.CommandTrees 命名空间


DbAggregate 方法

DbAggregate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbAggregate 类

DbAggregate 类型公开以下成员。

名称 说明
页首

参考

DbAggregate 类
System.Data.Common.CommandTrees 命名空间


DbAggregate 属性

DbAggregate 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbAggregate 类

DbAggregate 类型公开以下成员。

名称 说明
页首

参考

DbAggregate 类
System.Data.Common.CommandTrees 命名空间


DbAggregate ..::.Arguments 属性

DbAggregate
.
.
::
.
Arguments 属性
DbAggregate 类

获取定义此 DbAggregate 的参数的表达式列表。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Arguments As IList(Of DbExpression)
    Get
public IList<DbExpression> Arguments { get; }
public:
property IList<DbExpression^>^ Arguments {
    IList<DbExpression^>^ get ();
}
member Arguments : IList<DbExpression>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbExpression
>
)
>
)

定义此 DbAggregate 的参数的表达式列表。

DbAggregate 的 Arguments 属性描述聚合的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbAggregate 类
DbAggregate 成员
System.Data.Common.CommandTrees 命名空间


DbAggregate ..::.ResultType 属性

DbAggregate
.
.
::
.
ResultType 属性
DbAggregate 类

获取此 DbAggregate 的结果类型。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ResultType As TypeUsage
    Get
public TypeUsage ResultType { get; }
public:
property TypeUsage^ ResultType {
    TypeUsage^ get ();
}
member ResultType : TypeUsage

属性值

类型： System.Data.Metadata.Edm TypeUsage
此 DbAggregate 的结果类型。

ResultType 属性描述聚合的结果类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbAggregate 类
DbAggregate 成员
System.Data.Common.CommandTrees 命名空间


DbAndExpression 类

DbAndExpression 类
成员

表示两个 Boolean 参数的逻辑“与”。此类不能继承。 表示两个 Boolean 参数的逻辑“与”。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbAndExpression _
    Inherits DbBinaryExpression
public sealed class DbAndExpression : DbBinaryExpression
public ref class DbAndExpression sealed : public DbBinaryExpression
[<SealedAttribute>]
type DbAndExpression =
    class
        inherit DbBinaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbAndExpressionDbAndExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbAndExpression 成员
System.Data.Common.CommandTrees 命名空间


DbAndExpression 成员

DbAndExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbAndExpression 类

表示两个 Boolean 参数的逻辑“与”。此类不能继承。 表示两个 Boolean 参数的逻辑“与”。此类不能继承。

DbAndExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbAndExpression 类
System.Data.Common.CommandTrees 命名空间


DbAndExpression 方法

DbAndExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbAndExpression 类

DbAndExpression 类型公开以下成员。

名称 说明
页首

参考

DbAndExpression 类
System.Data.Common.CommandTrees 命名空间


DbAndExpression ..::.Accept 方法

DbAndExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbAndExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbAndExpression 类
DbAndExpression 成员
System.Data.Common.CommandTrees 命名空间


DbAndExpression ..::.Accept 方法 (DbExpressionVisitor)

DbAndExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbAndExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbAndExpression 类
DbAndExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbAndExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbAndExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbAndExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbAndExpression 类
DbAndExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbAndExpression 属性

DbAndExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbAndExpression 类

DbAndExpression 类型公开以下成员。

名称 说明
页首

参考

DbAndExpression 类
System.Data.Common.CommandTrees 命名空间


DbApplyExpression 类

DbApplyExpression 类
成员

表示应用操作，应用操作对指定输入集中的每个元素调用指定函数。无法继承此类。 表示应用操作，应用操作对指定输入集中的每个元素调用指定函数。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbApplyExpression _
    Inherits DbExpression
public sealed class DbApplyExpression : DbExpression
public ref class DbApplyExpression sealed : public DbExpression
[<SealedAttribute>]
type DbApplyExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbApplyExpressionDbApplyExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbApplyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbApplyExpression 成员

DbApplyExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbApplyExpression 类

表示应用操作，应用操作对指定输入集中的每个元素调用指定函数。无法继承此类。 表示应用操作，应用操作对指定输入集中的每个元素调用指定函数。无法继承此类。

DbApplyExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbApplyExpression 类
System.Data.Common.CommandTrees 命名空间


DbApplyExpression 方法

DbApplyExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbApplyExpression 类

DbApplyExpression 类型公开以下成员。

名称 说明
页首

参考

DbApplyExpression 类
System.Data.Common.CommandTrees 命名空间


DbApplyExpression ..::.Accept 方法

DbApplyExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbApplyExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbApplyExpression 类
DbApplyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbApplyExpression ..::.Accept 方法 (DbExpressionVisitor)

DbApplyExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbApplyExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbApplyExpression 类
DbApplyExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbApplyExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbApplyExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbApplyExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbApplyExpression 类
DbApplyExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbApplyExpression 属性

DbApplyExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbApplyExpression 类

DbApplyExpression 类型公开以下成员。

名称 说明
页首

参考

DbApplyExpression 类
System.Data.Common.CommandTrees 命名空间


DbApplyExpression ..::.Apply 属性

DbApplyExpression
.
.
::
.
Apply 属性
DbApplyExpression 类

获取 DbExpressionBinding，该 DbExpressionBinding 指定对输入集中的每个元素所调用的函数。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Apply As DbExpressionBinding
    Get
public DbExpressionBinding Apply { get; }
public:
property DbExpressionBinding^ Apply {
    DbExpressionBinding^ get ();
}
member Apply : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
DbExpressionBinding，它指定对输入集中的每个元素所调用的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbApplyExpression 类
DbApplyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbApplyExpression ..::.Input 属性

DbApplyExpression
.
.
::
.
Input 属性
DbApplyExpression 类

获取指定输入集的 DbExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Input As DbExpressionBinding
    Get
public DbExpressionBinding Input { get; }
public:
property DbExpressionBinding^ Input {
    DbExpressionBinding^ get ();
}
member Input : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
指定输入集的 DbExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbApplyExpression 类
DbApplyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbArithmeticExpression 类

DbArithmeticExpression 类
成员

表示应用于数值参数的算术运算。加、减、乘、除、取模和取负是算术运算。无法继承此类。 表示应用于数值参数的算术运算。加、减、乘、除、取模和取负是算术运算。无法继承此类。 表示应用于数值参数的算术运算。加、减、乘、除、取模和取负是算术运算。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbArithmeticExpression _
    Inherits DbExpression
public sealed class DbArithmeticExpression : DbExpression
public ref class DbArithmeticExpression sealed : public DbExpression
[<SealedAttribute>]
type DbArithmeticExpression =
    class
        inherit DbExpression
    end

DbArithmeticExpression 要求其参数为相同的数值结果类型。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbArithmeticExpressionDbArithmeticExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbArithmeticExpression 成员
System.Data.Common.CommandTrees 命名空间


DbArithmeticExpression 成员

DbArithmeticExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbArithmeticExpression 类

表示应用于数值参数的算术运算。加、减、乘、除、取模和取负是算术运算。无法继承此类。 表示应用于数值参数的算术运算。加、减、乘、除、取模和取负是算术运算。无法继承此类。 表示应用于数值参数的算术运算。加、减、乘、除、取模和取负是算术运算。无法继承此类。

DbArithmeticExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbArithmeticExpression 类
System.Data.Common.CommandTrees 命名空间


DbArithmeticExpression 方法

DbArithmeticExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbArithmeticExpression 类

DbArithmeticExpression 类型公开以下成员。

名称 说明
页首

参考

DbArithmeticExpression 类
System.Data.Common.CommandTrees 命名空间


DbArithmeticExpression ..::.Accept 方法

DbArithmeticExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbArithmeticExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbArithmeticExpression 类
DbArithmeticExpression 成员
System.Data.Common.CommandTrees 命名空间


DbArithmeticExpression ..::.Accept 方法 (DbExpressionVisitor)

DbArithmeticExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbArithmeticExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbArithmeticExpression 类
DbArithmeticExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbArithmeticExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbArithmeticExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbArithmeticExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbArithmeticExpression 类
DbArithmeticExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbArithmeticExpression 属性

DbArithmeticExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbArithmeticExpression 类

DbArithmeticExpression 类型公开以下成员。

名称 说明
页首

参考

DbArithmeticExpression 类
System.Data.Common.CommandTrees 命名空间


DbArithmeticExpression ..::.Arguments 属性

DbArithmeticExpression
.
.
::
.
Arguments 属性
DbArithmeticExpression 类

获取用于定义当前参数的 DbExpression 元素列表。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Arguments As IList(Of DbExpression)
    Get
public IList<DbExpression> Arguments { get; }
public:
property IList<DbExpression^>^ Arguments {
    IList<DbExpression^>^ get ();
}
member Arguments : IList<DbExpression>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbExpression
>
)
>
)

固定大小的 DbExpression 元素列表。

DbArithmeticExpression 要求参数列表中的所有元素具有通用数值结果类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbArithmeticExpression 类
DbArithmeticExpression 成员
System.Data.Common.CommandTrees 命名空间


DbBinaryExpression 类

DbBinaryExpression 类
成员

实现接受两个表达式操作数的表达式所需的基本功能。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbBinaryExpression _
    Inherits DbExpression
public abstract class DbBinaryExpression : DbExpression
public ref class DbBinaryExpression abstract : public DbExpression
[<AbstractClassAttribute>]
type DbBinaryExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbBinaryExpressionDbBinaryExpression

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbBinaryExpression 成员
System.Data.Common.CommandTrees 命名空间


DbBinaryExpression 成员

DbBinaryExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbBinaryExpression 类

实现接受两个表达式操作数的表达式所需的基本功能。

DbBinaryExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbBinaryExpression 类
System.Data.Common.CommandTrees 命名空间


DbBinaryExpression 方法

DbBinaryExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbBinaryExpression 类

DbBinaryExpression 类型公开以下成员。

名称 说明
页首

参考

DbBinaryExpression 类
System.Data.Common.CommandTrees 命名空间


DbBinaryExpression ..::.Accept 方法

DbBinaryExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbBinaryExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbBinaryExpression 类
DbBinaryExpression 成员
System.Data.Common.CommandTrees 命名空间


DbBinaryExpression 属性

DbBinaryExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbBinaryExpression 类

DbBinaryExpression 类型公开以下成员。

名称 说明
页首

参考

DbBinaryExpression 类
System.Data.Common.CommandTrees 命名空间


DbBinaryExpression ..::.Left 属性

DbBinaryExpression
.
.
::
.
Left 属性
DbBinaryExpression 类

获取或设置定义左侧参数的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Left As DbExpression
    Get
public DbExpression Left { get; }
public:
property DbExpression^ Left {
    DbExpression^ get ();
}
member Left : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
定义左侧参数的 DbExpression。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbBinaryExpression 的命令目录树没有关联， 或者其结果类型不等于或不可提升为左侧参数所需的类型。

如果设置 Left 属性，则派生表达式类型可执行更严格的类型检查。例如，DbUnionAllExpression 要求其左侧表达式为集合结果类型，而 DbAndExpression 要求为布尔结果类型。通常，派生表达式类型不允许 Left 设置为结果类型不等于或不可提升为当前值的结果类型的表达式。 如果设置 Left 属性，则派生表达式类型可执行更严格的类型检查。例如，DbUnionAllExpression 要求其左侧表达式为集合结果类型，而 DbAndExpression 要求为布尔结果类型。通常，派生表达式类型不允许 Left 设置为结果类型不等于或不可提升为当前值的结果类型的表达式。 如果设置 Left 属性，则派生表达式类型可执行更严格的类型检查。例如，DbUnionAllExpression 要求其左侧表达式为集合结果类型，而 DbAndExpression 要求为布尔结果类型。通常，派生表达式类型不允许 Left 设置为结果类型不等于或不可提升为当前值的结果类型的表达式。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbBinaryExpression 类
DbBinaryExpression 成员
System.Data.Common.CommandTrees 命名空间


DbBinaryExpression ..::.Right 属性

DbBinaryExpression
.
.
::
.
Right 属性
DbBinaryExpression 类

获取或设置定义右侧参数的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Right As DbExpression
    Get
public DbExpression Right { get; }
public:
property DbExpression^ Right {
    DbExpression^ get ();
}
member Right : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
定义右侧参数的 DbExpression。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbBinaryExpression 的命令目录树没有关联， 或者其结果类型不等于或不可提升为右侧参数所需的类型。

如果设置 Right 属性，则派生表达式类型可执行更严格的类型检查。例如，DbUnionAllExpression 要求其右侧表达式为集合结果类型，而 DbAndExpression 要求为布尔结果类型。通常，派生表达式类型不允许 Right 设置为结果类型不等于或不可提升为当前值的结果类型的表达式。 如果设置 Right 属性，则派生表达式类型可执行更严格的类型检查。例如，DbUnionAllExpression 要求其右侧表达式为集合结果类型，而 DbAndExpression 要求为布尔结果类型。通常，派生表达式类型不允许 Right 设置为结果类型不等于或不可提升为当前值的结果类型的表达式。 如果设置 Right 属性，则派生表达式类型可执行更严格的类型检查。例如，DbUnionAllExpression 要求其右侧表达式为集合结果类型，而 DbAndExpression 要求为布尔结果类型。通常，派生表达式类型不允许 Right 设置为结果类型不等于或不可提升为当前值的结果类型的表达式。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbBinaryExpression 类
DbBinaryExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCaseExpression 类

DbCaseExpression 类
成员

表示 DbCaseExpression 的 When、Then 和 Else 子句。此类不能被继承。 表示 DbCaseExpression 的 When、Then 和 Else 子句。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbCaseExpression _
    Inherits DbExpression
public sealed class DbCaseExpression : DbExpression
public ref class DbCaseExpression sealed : public DbExpression
[<SealedAttribute>]
type DbCaseExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbCaseExpressionDbCaseExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCaseExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCaseExpression 成员

DbCaseExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCaseExpression 类

表示 DbCaseExpression 的 When、Then 和 Else 子句。此类不能被继承。 表示 DbCaseExpression 的 When、Then 和 Else 子句。此类不能被继承。

DbCaseExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbCaseExpression 类
System.Data.Common.CommandTrees 命名空间


DbCaseExpression 方法

DbCaseExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCaseExpression 类

DbCaseExpression 类型公开以下成员。

名称 说明
页首

参考

DbCaseExpression 类
System.Data.Common.CommandTrees 命名空间


DbCaseExpression ..::.Accept 方法

DbCaseExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCaseExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbCaseExpression 类
DbCaseExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCaseExpression ..::.Accept 方法 (DbExpressionVisitor)

DbCaseExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbCaseExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCaseExpression 类
DbCaseExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbCaseExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbCaseExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbCaseExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCaseExpression 类
DbCaseExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbCaseExpression 属性

DbCaseExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCaseExpression 类

DbCaseExpression 类型公开以下成员。

名称 说明
页首

参考

DbCaseExpression 类
System.Data.Common.CommandTrees 命名空间


DbCaseExpression ..::.Else 属性

DbCaseExpression
.
.
::
.
Else 属性
DbCaseExpression 类

获取或设置此 DbCaseExpression 的 Else 子句。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Else As DbExpression
    Get
public DbExpression Else { get; }
public:
property DbExpression^ Else {
    DbExpression^ get ();
}
member Else : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
此 DbCaseExpression 的 Else 子句。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbCaseExpression 的命令目录树没有关联， 或者其结果类型不等于或不可提升为 DbCaseExpression 的结果类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCaseExpression 类
DbCaseExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCaseExpression ..::.Then 属性

DbCaseExpression
.
.
::
.
Then 属性
DbCaseExpression 类

获取此 DbCaseExpression 的 Then 子句。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Then As IList(Of DbExpression)
    Get
public IList<DbExpression> Then { get; }
public:
property IList<DbExpression^>^ Then {
    IList<DbExpression^>^ get ();
}
member Then : IList<DbExpression>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbExpression
>
)
>
)

此 DbCaseExpression 的 Then 子句。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCaseExpression 类
DbCaseExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCaseExpression ..::.When 属性

DbCaseExpression
.
.
::
.
When 属性
DbCaseExpression 类

获取此 DbCaseExpression 的 When 子句。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property When As IList(Of DbExpression)
    Get
public IList<DbExpression> When { get; }
public:
property IList<DbExpression^>^ When {
    IList<DbExpression^>^ get ();
}
member When : IList<DbExpression>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbExpression
>
)
>
)

此 DbCaseExpression 的 When 子句。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCaseExpression 类
DbCaseExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCastExpression 类

DbCastExpression 类
成员

表示将单个参数转换为指定类型的类型转换。此类不能继承。 表示将单个参数转换为指定类型的类型转换。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbCastExpression _
    Inherits DbUnaryExpression
public sealed class DbCastExpression : DbUnaryExpression
public ref class DbCastExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbCastExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbCastExpressionDbCastExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCastExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCastExpression 成员

DbCastExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCastExpression 类

表示将单个参数转换为指定类型的类型转换。此类不能继承。 表示将单个参数转换为指定类型的类型转换。此类不能继承。

DbCastExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbCastExpression 类
System.Data.Common.CommandTrees 命名空间


DbCastExpression 方法

DbCastExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCastExpression 类

DbCastExpression 类型公开以下成员。

名称 说明
页首

参考

DbCastExpression 类
System.Data.Common.CommandTrees 命名空间


DbCastExpression ..::.Accept 方法

DbCastExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCastExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbCastExpression 类
DbCastExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCastExpression ..::.Accept 方法 (DbExpressionVisitor)

DbCastExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbCastExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCastExpression 类
DbCastExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbCastExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbCastExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbCastExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCastExpression 类
DbCastExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbCastExpression 属性

DbCastExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCastExpression 类

DbCastExpression 类型公开以下成员。

名称 说明
页首

参考

DbCastExpression 类
System.Data.Common.CommandTrees 命名空间


DbCommandTree 类

DbCommandTree 类
成员

一个不可变的类，用于实现 Query、Insert、Update、Delete 和函数调用命令目录树类型的基本功能。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbCommandTree
public abstract class DbCommandTree
public ref class DbCommandTree abstract
[<AbstractClassAttribute>]
type DbCommandTree =  class end

DbCommandTree 是一个抽象类，用于表示查询、数据操作语言 (DML) 操作和函数/过程调用。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbCommandTreeDbCommandTree

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbCommandTree 成员

DbCommandTree 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandTree 类

一个不可变的类，用于实现 Query、Insert、Update、Delete 和函数调用命令目录树类型的基本功能。

DbCommandTree 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbCommandTree 方法

DbCommandTree 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandTree 类

DbCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbCommandTree 属性

DbCommandTree 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCommandTree 类

DbCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbCommandTree ..::.Parameters 属性

DbCommandTree
.
.
::
.
Parameters 属性
DbCommandTree 类

获取可在此 DbCommandTree 中引用的每个参数的名称和相应类型。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Parameters As IEnumerable(Of KeyValuePair(Of String, TypeUsage))
    Get
public IEnumerable<KeyValuePair<string, TypeUsage>> Parameters { get; }
public:
property IEnumerable<KeyValuePair<String^, TypeUsage^>>^ Parameters {
    IEnumerable<KeyValuePair<String^, TypeUsage^>>^ get ();
}
member Parameters : IEnumerable<KeyValuePair<string, TypeUsage>>

属性值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
KeyValuePair
<
(Of
<
(
String, TypeUsage
>
)
>
)
>
)
>
)

可在此 DbCommandTree 中引用的每个参数的名称和相应类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCommandTree 类
DbCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbComparisonExpression 类

DbComparisonExpression 类
成员

表示应用于两个参数的比较操作。等于、大于、大于等于、小于、小于等于和不等于是比较操作。无法继承此类。 表示应用于两个参数的比较操作。等于、大于、大于等于、小于、小于等于和不等于是比较操作。无法继承此类。 表示应用于两个参数的比较操作。等于、大于、大于等于、小于、小于等于和不等于是比较操作。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbComparisonExpression _
    Inherits DbBinaryExpression
public sealed class DbComparisonExpression : DbBinaryExpression
public ref class DbComparisonExpression sealed : public DbBinaryExpression
[<SealedAttribute>]
type DbComparisonExpression =
    class
        inherit DbBinaryExpression
    end

DbComparisonExpression 类要求其参数为相同的结果类型。此结果类型必须是 Equals 和 NotEquals 的相等比较；GreaterThan 和 LessThan 的大小比较；以及 GreaterThanOrEquals 和 LessThanOrEquals 的组合比较。 DbComparisonExpression 类要求其参数为相同的结果类型。此结果类型必须是 Equals 和 NotEquals 的相等比较；GreaterThan 和 LessThan 的大小比较；以及 GreaterThanOrEquals 和 LessThanOrEquals 的组合比较。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbComparisonExpressionDbComparisonExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbComparisonExpression 成员
System.Data.Common.CommandTrees 命名空间


DbComparisonExpression 成员

DbComparisonExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbComparisonExpression 类

表示应用于两个参数的比较操作。等于、大于、大于等于、小于、小于等于和不等于是比较操作。无法继承此类。 表示应用于两个参数的比较操作。等于、大于、大于等于、小于、小于等于和不等于是比较操作。无法继承此类。 表示应用于两个参数的比较操作。等于、大于、大于等于、小于、小于等于和不等于是比较操作。无法继承此类。

DbComparisonExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbComparisonExpression 类
System.Data.Common.CommandTrees 命名空间


DbComparisonExpression 方法

DbComparisonExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbComparisonExpression 类

DbComparisonExpression 类型公开以下成员。

名称 说明
页首

参考

DbComparisonExpression 类
System.Data.Common.CommandTrees 命名空间


DbComparisonExpression ..::.Accept 方法

DbComparisonExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbComparisonExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbComparisonExpression 类
DbComparisonExpression 成员
System.Data.Common.CommandTrees 命名空间


DbComparisonExpression ..::.Accept 方法 (DbExpressionVisitor)

DbComparisonExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbComparisonExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbComparisonExpression 类
DbComparisonExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbComparisonExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbComparisonExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbComparisonExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbComparisonExpression 类
DbComparisonExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbComparisonExpression 属性

DbComparisonExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbComparisonExpression 类

DbComparisonExpression 类型公开以下成员。

名称 说明
页首

参考

DbComparisonExpression 类
System.Data.Common.CommandTrees 命名空间


DbConstantExpression 类

DbConstantExpression 类
成员

表示不同种类的常量（文本）。无法继承此类。 表示不同种类的常量（文本）。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbConstantExpression _
    Inherits DbExpression
public sealed class DbConstantExpression : DbExpression
public ref class DbConstantExpression sealed : public DbExpression
[<SealedAttribute>]
type DbConstantExpression =
    class
        inherit DbExpression
    end

只有以下 Entity Data Model 类型才支持常量表达式：String (EDM)；Boolean (EDM)；整数 — Byte (EDM)、Float (EDM)、Double (EDM)、Decimal(EDM)；DateTime (EDM)；Guid (EDM)；Binary (EDM)。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbConstantExpressionDbConstantExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbConstantExpression 成员
System.Data.Common.CommandTrees 命名空间


DbConstantExpression 成员

DbConstantExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConstantExpression 类

表示不同种类的常量（文本）。无法继承此类。 表示不同种类的常量（文本）。无法继承此类。

DbConstantExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbConstantExpression 类
System.Data.Common.CommandTrees 命名空间


DbConstantExpression 方法

DbConstantExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConstantExpression 类

DbConstantExpression 类型公开以下成员。

名称 说明
页首

参考

DbConstantExpression 类
System.Data.Common.CommandTrees 命名空间


DbConstantExpression ..::.Accept 方法

DbConstantExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConstantExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbConstantExpression 类
DbConstantExpression 成员
System.Data.Common.CommandTrees 命名空间


DbConstantExpression ..::.Accept 方法 (DbExpressionVisitor)

DbConstantExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbConstantExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbConstantExpression 类
DbConstantExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbConstantExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbConstantExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbConstantExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbConstantExpression 类
DbConstantExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbConstantExpression 属性

DbConstantExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbConstantExpression 类

DbConstantExpression 类型公开以下成员。

名称 说明
页首

参考

DbConstantExpression 类
System.Data.Common.CommandTrees 命名空间


DbConstantExpression ..::.Value 属性

DbConstantExpression
.
.
::
.
Value 属性
DbConstantExpression 类

获取常量值。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Value As Object
    Get
public Object Value { get; }
public:
property Object^ Value {
    Object^ get ();
}
member Value : Object

属性值

类型： System Object
常量值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbConstantExpression 类
DbConstantExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCrossJoinExpression 类

DbCrossJoinExpression 类
成员

表示给定集合参数之间的无条件联接操作。此类不能被继承。 表示给定集合参数之间的无条件联接操作。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbCrossJoinExpression _
    Inherits DbExpression
public sealed class DbCrossJoinExpression : DbExpression
public ref class DbCrossJoinExpression sealed : public DbExpression
[<SealedAttribute>]
type DbCrossJoinExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbCrossJoinExpressionDbCrossJoinExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCrossJoinExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCrossJoinExpression 成员

DbCrossJoinExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCrossJoinExpression 类

表示给定集合参数之间的无条件联接操作。此类不能被继承。 表示给定集合参数之间的无条件联接操作。此类不能被继承。

DbCrossJoinExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbCrossJoinExpression 类
System.Data.Common.CommandTrees 命名空间


DbCrossJoinExpression 方法

DbCrossJoinExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCrossJoinExpression 类

DbCrossJoinExpression 类型公开以下成员。

名称 说明
页首

参考

DbCrossJoinExpression 类
System.Data.Common.CommandTrees 命名空间


DbCrossJoinExpression ..::.Accept 方法

DbCrossJoinExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCrossJoinExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbCrossJoinExpression 类
DbCrossJoinExpression 成员
System.Data.Common.CommandTrees 命名空间


DbCrossJoinExpression ..::.Accept 方法 (DbExpressionVisitor)

DbCrossJoinExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbCrossJoinExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCrossJoinExpression 类
DbCrossJoinExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbCrossJoinExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbCrossJoinExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbCrossJoinExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCrossJoinExpression 类
DbCrossJoinExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbCrossJoinExpression 属性

DbCrossJoinExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbCrossJoinExpression 类

DbCrossJoinExpression 类型公开以下成员。

名称 说明
页首

参考

DbCrossJoinExpression 类
System.Data.Common.CommandTrees 命名空间


DbCrossJoinExpression ..::.Inputs 属性

DbCrossJoinExpression
.
.
::
.
Inputs 属性
DbCrossJoinExpression 类

获取 DbExpressionBinding 列表，该列表提供可联接的输入集。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Inputs As IList(Of DbExpressionBinding)
    Get
public IList<DbExpressionBinding> Inputs { get; }
public:
property IList<DbExpressionBinding^>^ Inputs {
    IList<DbExpressionBinding^>^ get ();
}
member Inputs : IList<DbExpressionBinding>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbExpressionBinding
>
)
>
)

提供可联接的输入集的 DbExpressionBinding 列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbCrossJoinExpression 类
DbCrossJoinExpression 成员
System.Data.Common.CommandTrees 命名空间


DbDeleteCommandTree 类

DbDeleteCommandTree 类
成员

表示以命令目录树表示的单行删除操作。无法继承此类。 表示以命令目录树表示的单行删除操作。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbDeleteCommandTree _
    Inherits DbModificationCommandTree
public sealed class DbDeleteCommandTree : DbModificationCommandTree
public ref class DbDeleteCommandTree sealed : public DbModificationCommandTree
[<SealedAttribute>]
type DbDeleteCommandTree =
    class
        inherit DbModificationCommandTree
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbDeleteCommandTreeDbDeleteCommandTree
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbDeleteCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbDeleteCommandTree 成员

DbDeleteCommandTree 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDeleteCommandTree 类

表示以命令目录树表示的单行删除操作。无法继承此类。 表示以命令目录树表示的单行删除操作。无法继承此类。

DbDeleteCommandTree 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbDeleteCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbDeleteCommandTree 方法

DbDeleteCommandTree 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDeleteCommandTree 类

DbDeleteCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbDeleteCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbDeleteCommandTree 属性

DbDeleteCommandTree 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDeleteCommandTree 类

DbDeleteCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbDeleteCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbDeleteCommandTree ..::.Predicate 属性

DbDeleteCommandTree
.
.
::
.
Predicate 属性
DbDeleteCommandTree 类

获取一个 DbExpression，该 DbExpression 指定的谓词用于确定应删除目标集合的哪些成员。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Predicate As DbExpression
    Get
public DbExpression Predicate { get; }
public:
property DbExpression^ Predicate {
    DbExpression^ get ();
}
member Predicate : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
一个 DbExpression，它指定的谓词用于确定应删除目标集合的哪些成员。

谓词只能包括以下元素：DbComparisonExpression（表示相等）、DbConstantExpression、DbIsNullExpression、DbPropertyExpression、DbVariableReferenceExpression（引用目标）、DbAndExpression、DbOrExpression 和 DbNotExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbDeleteCommandTree 类
DbDeleteCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbDerefExpression 类

DbDerefExpression 类
成员

表示基于指定的引用检索实体的表达式。此类不能继承。 表示基于指定的引用检索实体的表达式。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbDerefExpression _
    Inherits DbUnaryExpression
public sealed class DbDerefExpression : DbUnaryExpression
public ref class DbDerefExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbDerefExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbDerefExpressionDbDerefExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbDerefExpression 成员
System.Data.Common.CommandTrees 命名空间


DbDerefExpression 成员

DbDerefExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDerefExpression 类

表示基于指定的引用检索实体的表达式。此类不能继承。 表示基于指定的引用检索实体的表达式。此类不能继承。

DbDerefExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbDerefExpression 类
System.Data.Common.CommandTrees 命名空间


DbDerefExpression 方法

DbDerefExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDerefExpression 类

DbDerefExpression 类型公开以下成员。

名称 说明
页首

参考

DbDerefExpression 类
System.Data.Common.CommandTrees 命名空间


DbDerefExpression ..::.Accept 方法

DbDerefExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDerefExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbDerefExpression 类
DbDerefExpression 成员
System.Data.Common.CommandTrees 命名空间


DbDerefExpression ..::.Accept 方法 (DbExpressionVisitor)

DbDerefExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbDerefExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbDerefExpression 类
DbDerefExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbDerefExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbDerefExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbDerefExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbDerefExpression 类
DbDerefExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbDerefExpression 属性

DbDerefExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDerefExpression 类

DbDerefExpression 类型公开以下成员。

名称 说明
页首

参考

DbDerefExpression 类
System.Data.Common.CommandTrees 命名空间


DbDistinctExpression 类

DbDistinctExpression 类
成员

从指定集参数中移除重复元素。无法继承此类。 从指定集参数中移除重复元素。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbDistinctExpression _
    Inherits DbUnaryExpression
public sealed class DbDistinctExpression : DbUnaryExpression
public ref class DbDistinctExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbDistinctExpression =
    class
        inherit DbUnaryExpression
    end

DbDistinctExpression 要求其参数的集合结果类型具有可以使用相等运算符进行比较的元素类型。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbDistinctExpressionDbDistinctExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbDistinctExpression 成员
System.Data.Common.CommandTrees 命名空间


DbDistinctExpression 成员

DbDistinctExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDistinctExpression 类

从指定集参数中移除重复元素。无法继承此类。 从指定集参数中移除重复元素。无法继承此类。

DbDistinctExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbDistinctExpression 类
System.Data.Common.CommandTrees 命名空间


DbDistinctExpression 方法

DbDistinctExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDistinctExpression 类

DbDistinctExpression 类型公开以下成员。

名称 说明
页首

参考

DbDistinctExpression 类
System.Data.Common.CommandTrees 命名空间


DbDistinctExpression ..::.Accept 方法

DbDistinctExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDistinctExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbDistinctExpression 类
DbDistinctExpression 成员
System.Data.Common.CommandTrees 命名空间


DbDistinctExpression ..::.Accept 方法 (DbExpressionVisitor)

DbDistinctExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbDistinctExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbDistinctExpression 类
DbDistinctExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbDistinctExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbDistinctExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbDistinctExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbDistinctExpression 类
DbDistinctExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbDistinctExpression 属性

DbDistinctExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbDistinctExpression 类

DbDistinctExpression 类型公开以下成员。

名称 说明
页首

参考

DbDistinctExpression 类
System.Data.Common.CommandTrees 命名空间


DbElementExpression 类

DbElementExpression 类
成员

表示将指定集参数转换为单一实例的转换。无法继承此类。 表示将指定集参数转换为单一实例的转换。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbElementExpression _
    Inherits DbUnaryExpression
public sealed class DbElementExpression : DbUnaryExpression
public ref class DbElementExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbElementExpression =
    class
        inherit DbUnaryExpression
    end

此类要求其参数为集合结果类型。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbElementExpressionDbElementExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbElementExpression 成员
System.Data.Common.CommandTrees 命名空间


DbElementExpression 成员

DbElementExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbElementExpression 类

表示将指定集参数转换为单一实例的转换。无法继承此类。 表示将指定集参数转换为单一实例的转换。无法继承此类。

DbElementExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbElementExpression 类
System.Data.Common.CommandTrees 命名空间


DbElementExpression 方法

DbElementExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbElementExpression 类

DbElementExpression 类型公开以下成员。

名称 说明
页首

参考

DbElementExpression 类
System.Data.Common.CommandTrees 命名空间


DbElementExpression ..::.Accept 方法

DbElementExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbElementExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbElementExpression 类
DbElementExpression 成员
System.Data.Common.CommandTrees 命名空间


DbElementExpression ..::.Accept 方法 (DbExpressionVisitor)

DbElementExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbElementExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbElementExpression 类
DbElementExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbElementExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbElementExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbElementExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbElementExpression 类
DbElementExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbElementExpression 属性

DbElementExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbElementExpression 类

DbElementExpression 类型公开以下成员。

名称 说明
页首

参考

DbElementExpression 类
System.Data.Common.CommandTrees 命名空间


DbEntityRefExpression 类

DbEntityRefExpression 类
成员

表示从基础实体实例提取引用的表达式。此类不能继承。 表示从基础实体实例提取引用的表达式。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbEntityRefExpression _
    Inherits DbUnaryExpression
public sealed class DbEntityRefExpression : DbUnaryExpression
public ref class DbEntityRefExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbEntityRefExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbEntityRefExpressionDbEntityRefExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbEntityRefExpression 成员
System.Data.Common.CommandTrees 命名空间


DbEntityRefExpression 成员

DbEntityRefExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbEntityRefExpression 类

表示从基础实体实例提取引用的表达式。此类不能继承。 表示从基础实体实例提取引用的表达式。此类不能继承。

DbEntityRefExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbEntityRefExpression 类
System.Data.Common.CommandTrees 命名空间


DbEntityRefExpression 方法

DbEntityRefExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbEntityRefExpression 类

DbEntityRefExpression 类型公开以下成员。

名称 说明
页首

参考

DbEntityRefExpression 类
System.Data.Common.CommandTrees 命名空间


DbEntityRefExpression ..::.Accept 方法

DbEntityRefExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbEntityRefExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbEntityRefExpression 类
DbEntityRefExpression 成员
System.Data.Common.CommandTrees 命名空间


DbEntityRefExpression ..::.Accept 方法 (DbExpressionVisitor)

DbEntityRefExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbEntityRefExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbEntityRefExpression 类
DbEntityRefExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbEntityRefExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbEntityRefExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbEntityRefExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbEntityRefExpression 类
DbEntityRefExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbEntityRefExpression 属性

DbEntityRefExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbEntityRefExpression 类

DbEntityRefExpression 类型公开以下成员。

名称 说明
页首

参考

DbEntityRefExpression 类
System.Data.Common.CommandTrees 命名空间


DbExceptExpression 类

DbExceptExpression 类
成员

表示左操作数和右操作数之间的减集操作。无法继承此类。 表示左操作数和右操作数之间的减集操作。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbExceptExpression _
    Inherits DbBinaryExpression
public sealed class DbExceptExpression : DbBinaryExpression
public ref class DbExceptExpression sealed : public DbBinaryExpression
[<SealedAttribute>]
type DbExceptExpression =
    class
        inherit DbBinaryExpression
    end

此类要求其参数为相同的集合结果类型。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbExceptExpressionDbExceptExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExceptExpression 成员
System.Data.Common.CommandTrees 命名空间


DbExceptExpression 成员

DbExceptExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExceptExpression 类

表示左操作数和右操作数之间的减集操作。无法继承此类。 表示左操作数和右操作数之间的减集操作。无法继承此类。

DbExceptExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbExceptExpression 类
System.Data.Common.CommandTrees 命名空间


DbExceptExpression 方法

DbExceptExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExceptExpression 类

DbExceptExpression 类型公开以下成员。

名称 说明
页首

参考

DbExceptExpression 类
System.Data.Common.CommandTrees 命名空间


DbExceptExpression ..::.Accept 方法

DbExceptExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExceptExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbExceptExpression 类
DbExceptExpression 成员
System.Data.Common.CommandTrees 命名空间


DbExceptExpression ..::.Accept 方法 (DbExpressionVisitor)

DbExceptExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbExceptExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExceptExpression 类
DbExceptExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbExceptExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbExceptExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbExceptExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor. 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExceptExpression 类
DbExceptExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbExceptExpression 属性

DbExceptExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExceptExpression 类

DbExceptExpression 类型公开以下成员。

名称 说明
页首

参考

DbExceptExpression 类
System.Data.Common.CommandTrees 命名空间


DbExpression 类

DbExpression 类
成员

实现表达式类型所需的基本功能。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbExpression
public abstract class DbExpression
public ref class DbExpression abstract
[<AbstractClassAttribute>]
type DbExpression =  class end

表达式是命令目录树所表示的查询的基本构造块。表达式表示某种计算。表达式的示例包括常量、变量、函数、构造函数以及标准关系运算符（例如筛选器、联接等等）。 表达式是命令目录树所表示的查询的基本构造块。表达式表示某种计算。表达式的示例包括常量、变量、函数、构造函数以及标准关系运算符（例如筛选器、联接等等）。 表达式是命令目录树所表示的查询的基本构造块。表达式表示某种计算。表达式的示例包括常量、变量、函数、构造函数以及标准关系运算符（例如筛选器、联接等等）。

每个表达式都有一个数据类型，数据类型指定该表达式所生成的结果的类型。表达式的数据类型在创建之后便不可更改。 每个表达式都有一个数据类型，数据类型指定该表达式所生成的结果的类型。表达式的数据类型在创建之后便不可更改。

一个表达式只属于一个 DbCommandTree。一个表达式的所有子表达式必须属于同一个 DbCommandTree。 一个表达式只属于一个 DbCommandTree。一个表达式的所有子表达式必须属于同一个 DbCommandTree。

表达式树是部分可变的：只要替换项为相同的数据类型，即可替换表达式子目录树。词组“表达式子树”是指表达式之间的链接。 表达式树是部分可变的：只要替换项为相同的数据类型，即可替换表达式子目录树。词组“表达式子树”是指表达式之间的链接。

下面的代码段演示使用 DbExpression 可以完成的操作。

此代码段用 WHERE 来查找其联系人职务是“销售代表”的所有客户

public void CQTs1() {
   EntitySet customersSet = context.MetadataWorkspace.GetEntityContainer("NorthwindEntities", DataSpace.CSpace).GetEntitySetByName("Customers", false);

   DbExpression queryTree = customersSet.Scan().Where(c => c.Property("ContactTitle").Equal("Sales Representative"));

   Output.Write(queryTree);
}

此代码段确定了多个属性 -- 每个饮料的名称和 UnitPrice 属性。

public void CQTsTesting4() {
   EntitySet productsSet = context.MetadataWorkspace.GetEntityContainer("NorthwindEntities", DataSpace.CSpace).GetEntitySetByName("Products", false);

   DbExpression queryTree = productsSet.Scan()
   .Where(c => c.Property("Category").Property("CategoryName").Equal("Beverages"))
.Select(p => new Row(p.Property("ProductName").As("Name"), p.Property("UnitPrice").As("Price")));

   Output.Write(queryTree);
}

此代码段用 OfType 从 ProductsSet 选择 DiscontinuedProducts。

public void CQTsTesting5() {
   TypeUsage discontinuedProductsUsage = TypeUsage.CreateDefaultTypeUsage(context.MetadataWorkspace.GetType("DiscontinuedProduct", "NorthwindEFModel", false, DataSpace.CSpace));

EntitySet productsSet = context.MetadataWorkspace.GetEntityContainer("NorthwindEntities", DataSpace.CSpace).GetEntitySetByName("Products", false);

DbExpression queryTree = productsSet.Scan().OfType(discontinuedProductsUsage);

   Output.Write(queryTree);
}

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbExpressionDbExpression

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpression 成员
System.Data.Common.CommandTrees 命名空间


DbExpression 成员

DbExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpression 类

实现表达式类型所需的基本功能。

DbExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbExpression 类
System.Data.Common.CommandTrees 命名空间


DbExpression 方法

DbExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpression 类

DbExpression 类型公开以下成员。

名称 说明
页首

参考

DbExpression 类
System.Data.Common.CommandTrees 命名空间


DbExpression ..::.Accept 方法

DbExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbExpression 类
DbExpression 成员
System.Data.Common.CommandTrees 命名空间


DbExpression ..::.Accept 方法 (DbExpressionVisitor)

DbExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public abstract void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) abstract
abstract Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpression 类
DbExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public abstract TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) abstract
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的结果的类型。
异常 | 条件
ArgumentNullException | visitor为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpression 类
DbExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbExpression ..::.Equals 方法

DbExpression
.
.
::
.
Equals 方法
DbExpression 类
此成员重写 Object Equals(Object)，且该主题可能包括更完整的文档。

确定指定的 Object 是否等于当前的 DbExpression 实例。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
要与当前的 DbExpression 比较的对象。

返回值

类型： System Boolean
如果指定的 Object 等于当前的 DbExpression，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpression 类
DbExpression 成员
System.Data.Common.CommandTrees 命名空间


DbExpression ..::.GetHashCode 方法

DbExpression
.
.
::
.
GetHashCode 方法
DbExpression 类
此成员重写 Object GetHashCode ，且该主题可能包括更完整的文档。

用作类型的哈希函数。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
当前 DbExpression 的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpression 类
DbExpression 成员
System.Data.Common.CommandTrees 命名空间


DbExpression 属性

DbExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpression 类

DbExpression 类型公开以下成员。

名称 说明
页首

参考

DbExpression 类
System.Data.Common.CommandTrees 命名空间


DbExpression ..::.ExpressionKind 属性

DbExpression
.
.
::
.
ExpressionKind 属性
DbExpression 类

获取表达式的类型，该类型指示此表达式的操作。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ExpressionKind As DbExpressionKind
    Get
public DbExpressionKind ExpressionKind { get; }
public:
property DbExpressionKind ExpressionKind {
    DbExpressionKind get ();
}
member ExpressionKind : DbExpressionKind

属性值

类型： System.Data.Common.CommandTrees DbExpressionKind
表达式的类型，该类型指示此表达式的操作。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpression 类
DbExpression 成员
System.Data.Common.CommandTrees 命名空间


DbExpression ..::.ResultType 属性

DbExpression
.
.
::
.
ResultType 属性
DbExpression 类

获取表达式的结果类型的类型元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ResultType As TypeUsage
    Get
public TypeUsage ResultType { get; }
public:
property TypeUsage^ ResultType {
    TypeUsage^ get ();
}
member ResultType : TypeUsage

属性值

类型： System.Data.Metadata.Edm TypeUsage
表达式的结果类型的类型元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpression 类
DbExpression 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionBinding 类

DbExpressionBinding 类
成员

表示 DbFilterExpression、DbProjectExpression 和 DbJoinExpression 等关系表达式的输入集。此类不能被继承。 表示 DbFilterExpression、DbProjectExpression 和 DbJoinExpression 等关系表达式的输入集。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbExpressionBinding
public sealed class DbExpressionBinding
public ref class DbExpressionBinding sealed
[<SealedAttribute>]
type DbExpressionBinding =  class end

此类非常类似于 foreach 遍历，并且具有与遍历的每个元素的绑定。此类是作为帮助程序类提供的，用于与关系运算符对应的很多表达式。 此类非常类似于 foreach 遍历，并且具有与遍历的每个元素的绑定。此类是作为帮助程序类提供的，用于与关系运算符对应的很多表达式。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbExpressionBindingDbExpressionBinding
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionBinding 成员

DbExpressionBinding 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpressionBinding 类

表示 DbFilterExpression、DbProjectExpression 和 DbJoinExpression 等关系表达式的输入集。此类不能被继承。 表示 DbFilterExpression、DbProjectExpression 和 DbJoinExpression 等关系表达式的输入集。此类不能被继承。

DbExpressionBinding 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbExpressionBinding 类
System.Data.Common.CommandTrees 命名空间


DbExpressionBinding 方法

DbExpressionBinding 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpressionBinding 类

DbExpressionBinding 类型公开以下成员。

名称 说明
页首

参考

DbExpressionBinding 类
System.Data.Common.CommandTrees 命名空间


DbExpressionBinding 属性

DbExpressionBinding 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpressionBinding 类

DbExpressionBinding 类型公开以下成员。

名称 说明
页首

参考

DbExpressionBinding 类
System.Data.Common.CommandTrees 命名空间


DbExpressionBinding ..::.Expression 属性

DbExpressionBinding
.
.
::
.
Expression 属性
DbExpressionBinding 类

获取或设置定义输入集的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Expression As DbExpression
    Get
public DbExpression Expression { get; }
public:
property DbExpression^ Expression {
    DbExpression^ get ();
}
member Expression : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
定义输入集的 DbExpression。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与绑定的命令目录树没有关联，或者其结果类型不等于或不可提升为当前属性值的结果类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionBinding 类
DbExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionBinding ..::.Variable 属性

DbExpressionBinding
.
.
::
.
Variable 属性
DbExpressionBinding 类

获取引用元素变量的 DbVariableReferenceExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Variable As DbVariableReferenceExpression
    Get
public DbVariableReferenceExpression Variable { get; }
public:
property DbVariableReferenceExpression^ Variable {
    DbVariableReferenceExpression^ get ();
}
member Variable : DbVariableReferenceExpression

属性值

类型： System.Data.Common.CommandTrees DbVariableReferenceExpression
变量引用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionBinding 类
DbExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionBinding ..::.VariableName 属性

DbExpressionBinding
.
.
::
.
VariableName 属性
DbExpressionBinding 类

获取分配给元素变量的名称。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property VariableName As String
    Get
public string VariableName { get; }
public:
property String^ VariableName {
    String^ get ();
}
member VariableName : string

属性值

类型： System String
分配给元素变量的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionBinding 类
DbExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionBinding ..::.VariableType 属性

DbExpressionBinding
.
.
::
.
VariableType 属性
DbExpressionBinding 类

获取元素变量的类型元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property VariableType As TypeUsage
    Get
public TypeUsage VariableType { get; }
public:
property TypeUsage^ VariableType {
    TypeUsage^ get ();
}
member VariableType : TypeUsage

属性值

类型： System.Data.Metadata.Edm TypeUsage
元素变量的类型元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionBinding 类
DbExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionKind 枚举

DbExpressionKind 枚举

包含一些值，每个表达式类都使用这些值来指明它所表示的操作的值。检索 DbExpression 的 ExpressionKind 属性可以确定该表达式所表示的操作。 包含一些值，每个表达式类都使用这些值来指明它所表示的操作的值。检索 DbExpression 的 ExpressionKind 属性可以确定该表达式所表示的操作。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Enumeration DbExpressionKind
public enum DbExpressionKind
public enum class DbExpressionKind
type DbExpressionKind
成员名称 | 说明
All | true-for-all 表达式。
And | 逻辑“与”表达式。
Any | true-for-any 表达式。
Case | 条件 case 语句表达式。
Cast | 多态类型强制转换表达式。
Constant | 常量值表达式。
CrossApply | 交叉应用表达式。
CrossJoin | 交叉联接表达式。
Deref | 取消引用表达式。
Distinct | 去除重复项表达式。
Divide | 除法表达式。
Element | 集到单一实例转换表达式。
EntityRef | 实体引用值检索表达式。
Equals | 相等表达式。
Except | 减集表达式。
Filter | 限制表达式。
FullOuterJoin | 完全外部联接表达式。
Function | 独立函数表达式。
GreaterThan | 大于表达式。
GreaterThanOrEquals | 大于等于表达式。
GroupBy | 分组表达式。
InnerJoin | 内部联接表达式。
Intersect | 交集表达式。
IsEmpty | 空集确定表达式。
IsNull | Null 确定表达式。
IsOf | 类型比较（指定的类型或子类型）表达式。
IsOfOnly | 类型比较（仅指定的类型）表达式。
Lambda | Lambda 函数表达式。
LeftOuterJoin | 左外部联接表达式。
LessThan | 小于表达式。
LessThanOrEquals | 小于等于表达式。
Like | 字符串比较表达式。
Limit | 结果计数限制 (TOP n)。
Minus | 减法表达式。
Modulo | 取模表达式。
Multiply | 乘法表达式。
NewInstance | 实例、行和集构造表达式。
Not | 逻辑“非”表达式。
NotEquals | 不等表达式。
Null | Null 表达式。
OfType | 按类型（或子类型）的集成员表达式。
OfTypeOnly | 按确切类型的集成员表达式。
Or | 逻辑“或”表达式。
OuterApply | 外部应用表达式。
ParameterReference | 参数引用表达式。
Plus | 加法表达式。
Project | 投影表达式。
Property | 静态属性或实例属性检索表达式。
Ref | 引用表达式。
RefKey | 引用键值检索表达式。
RelationshipNavigation | 关系（组合或关联）导航表达式。
Scan | 实体集或关系集扫描表达式。
Skip | 跳过有序集合的元素。
Sort | 排序表达式。
Treat | 类型转换表达式。
UnaryMinus | 取负表达式。
UnionAll | 并集（带重复项）表达式。
VariableReference | 变量引用表达式。

使用 DbExpressionKind 枚举可指定不同类型的表达式。成员表列出属于该类的成员的函数以及成员所指定的表达式类型。 使用 DbExpressionKind 枚举可指定不同类型的表达式。成员表列出属于该类的成员的函数以及成员所指定的表达式类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor 类

DbExpressionVisitor 类
成员

定义不返回结果值的访问者应实现的基本功能。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbExpressionVisitor
public abstract class DbExpressionVisitor
public ref class DbExpressionVisitor abstract
[<AbstractClassAttribute>]
type DbExpressionVisitor =  class end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbExpressionVisitorDbExpressionVisitor
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor 成员

DbExpressionVisitor 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpressionVisitor 类

定义不返回结果值的访问者应实现的基本功能。

DbExpressionVisitor 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbExpressionVisitor 类
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor 构造函数

DbExpressionVisitor 构造函数
DbExpressionVisitor 类

初始化 DbExpressionVisitor 类的新实例。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New
protected DbExpressionVisitor()
protected:
DbExpressionVisitor()
new : unit -> DbExpressionVisitor

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor 方法

DbExpressionVisitor 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpressionVisitor 类

DbExpressionVisitor 类型公开以下成员。

名称 说明
页首

参考

DbExpressionVisitor 类
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法

DbExpressionVisitor
.
.
::
.
Visit 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpressionVisitor 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbAndExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbAndExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbAndExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbAndExpression _
)
public abstract void Visit(
    DbAndExpression expression
)
public:
virtual void Visit(
    DbAndExpression^ expression
) abstract
abstract Visit :
        expression:DbAndExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbAndExpression
被访问的 DbAndExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbApplyExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbApplyExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbApplyExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbApplyExpression _
)
public abstract void Visit(
    DbApplyExpression expression
)
public:
virtual void Visit(
    DbApplyExpression^ expression
) abstract
abstract Visit :
        expression:DbApplyExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbApplyExpression
被访问的 DbApplyExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbArithmeticExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbArithmeticExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbArithmeticExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbArithmeticExpression _
)
public abstract void Visit(
    DbArithmeticExpression expression
)
public:
virtual void Visit(
    DbArithmeticExpression^ expression
) abstract
abstract Visit :
        expression:DbArithmeticExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbArithmeticExpression
被访问的 DbArithmeticExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbCaseExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbCaseExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbCaseExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbCaseExpression _
)
public abstract void Visit(
    DbCaseExpression expression
)
public:
virtual void Visit(
    DbCaseExpression^ expression
) abstract
abstract Visit :
        expression:DbCaseExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbCaseExpression
被访问的 DbCaseExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbCastExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbCastExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbCastExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbCastExpression _
)
public abstract void Visit(
    DbCastExpression expression
)
public:
virtual void Visit(
    DbCastExpression^ expression
) abstract
abstract Visit :
        expression:DbCastExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbCastExpression
被访问的 DbCastExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbComparisonExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbComparisonExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbComparisonExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbComparisonExpression _
)
public abstract void Visit(
    DbComparisonExpression expression
)
public:
virtual void Visit(
    DbComparisonExpression^ expression
) abstract
abstract Visit :
        expression:DbComparisonExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbComparisonExpression
被访问的 DbComparisonExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbConstantExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbConstantExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbConstantExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbConstantExpression _
)
public abstract void Visit(
    DbConstantExpression expression
)
public:
virtual void Visit(
    DbConstantExpression^ expression
) abstract
abstract Visit :
        expression:DbConstantExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbConstantExpression
被访问的 DbConstantExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbCrossJoinExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbCrossJoinExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbCrossJoinExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbCrossJoinExpression _
)
public abstract void Visit(
    DbCrossJoinExpression expression
)
public:
virtual void Visit(
    DbCrossJoinExpression^ expression
) abstract
abstract Visit :
        expression:DbCrossJoinExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbCrossJoinExpression
被访问的 DbCrossJoinExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbDerefExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbDerefExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbDerefExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbDerefExpression _
)
public abstract void Visit(
    DbDerefExpression expression
)
public:
virtual void Visit(
    DbDerefExpression^ expression
) abstract
abstract Visit :
        expression:DbDerefExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbDerefExpression
被访问的 DbDerefExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbDistinctExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbDistinctExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbDistinctExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbDistinctExpression _
)
public abstract void Visit(
    DbDistinctExpression expression
)
public:
virtual void Visit(
    DbDistinctExpression^ expression
) abstract
abstract Visit :
        expression:DbDistinctExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbDistinctExpression
被访问的 DbDistinctExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbElementExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbElementExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbElementExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbElementExpression _
)
public abstract void Visit(
    DbElementExpression expression
)
public:
virtual void Visit(
    DbElementExpression^ expression
) abstract
abstract Visit :
        expression:DbElementExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbElementExpression
被访问的 DbElementExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbEntityRefExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbEntityRefExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbEntityRefExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbEntityRefExpression _
)
public abstract void Visit(
    DbEntityRefExpression expression
)
public:
virtual void Visit(
    DbEntityRefExpression^ expression
) abstract
abstract Visit :
        expression:DbEntityRefExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbEntityRefExpression
被访问的 DbEntityRefExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbExceptExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbExceptExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbExceptExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbExceptExpression _
)
public abstract void Visit(
    DbExceptExpression expression
)
public:
virtual void Visit(
    DbExceptExpression^ expression
) abstract
abstract Visit :
        expression:DbExceptExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbExceptExpression
被访问的 DbExceptExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbExpression)
DbExpressionVisitor 类

在派生类中重写时，处理任何类型无法识别的表达式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbExpression _
)
public abstract void Visit(
    DbExpression expression
)
public:
virtual void Visit(
    DbExpression^ expression
) abstract
abstract Visit :
        expression:DbExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbExpression
要处理的表达式。

在遇到类型无法识别的表达式时调用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbFilterExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbFilterExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbFilterExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbFilterExpression _
)
public abstract void Visit(
    DbFilterExpression expression
)
public:
virtual void Visit(
    DbFilterExpression^ expression
) abstract
abstract Visit :
        expression:DbFilterExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbFilterExpression
被访问的 DbFilterExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbFunctionExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbFunctionExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbFunctionExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbFunctionExpression _
)
public abstract void Visit(
    DbFunctionExpression expression
)
public:
virtual void Visit(
    DbFunctionExpression^ expression
) abstract
abstract Visit :
        expression:DbFunctionExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbFunctionExpression
被访问的 DbFunctionExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbGroupByExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbGroupByExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbGroupByExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbGroupByExpression _
)
public abstract void Visit(
    DbGroupByExpression expression
)
public:
virtual void Visit(
    DbGroupByExpression^ expression
) abstract
abstract Visit :
        expression:DbGroupByExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbGroupByExpression
被访问的 DbGroupByExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbIntersectExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbIntersectExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbIntersectExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbIntersectExpression _
)
public abstract void Visit(
    DbIntersectExpression expression
)
public:
virtual void Visit(
    DbIntersectExpression^ expression
) abstract
abstract Visit :
        expression:DbIntersectExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbIntersectExpression
被访问的 DbIntersectExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbIsEmptyExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbIsEmptyExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbIsEmptyExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbIsEmptyExpression _
)
public abstract void Visit(
    DbIsEmptyExpression expression
)
public:
virtual void Visit(
    DbIsEmptyExpression^ expression
) abstract
abstract Visit :
        expression:DbIsEmptyExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbIsEmptyExpression
被访问的 DbIsEmptyExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbIsNullExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbIsNullExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbIsNullExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbIsNullExpression _
)
public abstract void Visit(
    DbIsNullExpression expression
)
public:
virtual void Visit(
    DbIsNullExpression^ expression
) abstract
abstract Visit :
        expression:DbIsNullExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbIsNullExpression
被访问的 DbIsNullExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbIsOfExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbIsOfExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbIsOfExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbIsOfExpression _
)
public abstract void Visit(
    DbIsOfExpression expression
)
public:
virtual void Visit(
    DbIsOfExpression^ expression
) abstract
abstract Visit :
        expression:DbIsOfExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbIsOfExpression
被访问的 DbIsOfExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbJoinExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbJoinExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbJoinExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbJoinExpression _
)
public abstract void Visit(
    DbJoinExpression expression
)
public:
virtual void Visit(
    DbJoinExpression^ expression
) abstract
abstract Visit :
        expression:DbJoinExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbJoinExpression
被访问的 DbJoinExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbLambdaExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbLambdaExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbLambdaExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overridable Sub Visit ( _
    expression As DbLambdaExpression _
)
public virtual void Visit(
    DbLambdaExpression expression
)
public:
virtual void Visit(
    DbLambdaExpression^ expression
)
abstract Visit :
        expression:DbLambdaExpression -> unit
override Visit :
        expression:DbLambdaExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbLambdaExpression
被访问的 DbLambdaExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbLikeExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbLikeExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbLikeExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbLikeExpression _
)
public abstract void Visit(
    DbLikeExpression expression
)
public:
virtual void Visit(
    DbLikeExpression^ expression
) abstract
abstract Visit :
        expression:DbLikeExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbLikeExpression
被访问的 DbLikeExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbLimitExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbLimitExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbLimitExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbLimitExpression _
)
public abstract void Visit(
    DbLimitExpression expression
)
public:
virtual void Visit(
    DbLimitExpression^ expression
) abstract
abstract Visit :
        expression:DbLimitExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbLimitExpression
被访问的 DbLimitExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbNewInstanceExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbNewInstanceExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbNewInstanceExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbNewInstanceExpression _
)
public abstract void Visit(
    DbNewInstanceExpression expression
)
public:
virtual void Visit(
    DbNewInstanceExpression^ expression
) abstract
abstract Visit :
        expression:DbNewInstanceExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbNewInstanceExpression
被访问的 DbNewInstanceExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbNotExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbNotExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbNotExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbNotExpression _
)
public abstract void Visit(
    DbNotExpression expression
)
public:
virtual void Visit(
    DbNotExpression^ expression
) abstract
abstract Visit :
        expression:DbNotExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbNotExpression
被访问的 DbNotExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbNullExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbNullExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbNullExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbNullExpression _
)
public abstract void Visit(
    DbNullExpression expression
)
public:
virtual void Visit(
    DbNullExpression^ expression
) abstract
abstract Visit :
        expression:DbNullExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbNullExpression
被访问的 DbNullExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbOfTypeExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbOfTypeExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbOfTypeExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbOfTypeExpression _
)
public abstract void Visit(
    DbOfTypeExpression expression
)
public:
virtual void Visit(
    DbOfTypeExpression^ expression
) abstract
abstract Visit :
        expression:DbOfTypeExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbOfTypeExpression
被访问的 DbOfTypeExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbOrExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbOrExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbOrExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbOrExpression _
)
public abstract void Visit(
    DbOrExpression expression
)
public:
virtual void Visit(
    DbOrExpression^ expression
) abstract
abstract Visit :
        expression:DbOrExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbOrExpression
被访问的 DbOrExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbParameterReferenceExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbParameterReferenceExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbParameterReferenceExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbParameterReferenceExpression _
)
public abstract void Visit(
    DbParameterReferenceExpression expression
)
public:
virtual void Visit(
    DbParameterReferenceExpression^ expression
) abstract
abstract Visit :
        expression:DbParameterReferenceExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbParameterReferenceExpression
被访问的 DbParameterReferenceExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbProjectExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbProjectExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbProjectExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbProjectExpression _
)
public abstract void Visit(
    DbProjectExpression expression
)
public:
virtual void Visit(
    DbProjectExpression^ expression
) abstract
abstract Visit :
        expression:DbProjectExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbProjectExpression
被访问的 DbProjectExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbPropertyExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbPropertyExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbPropertyExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbPropertyExpression _
)
public abstract void Visit(
    DbPropertyExpression expression
)
public:
virtual void Visit(
    DbPropertyExpression^ expression
) abstract
abstract Visit :
        expression:DbPropertyExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbPropertyExpression
被访问的 DbPropertyExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbQuantifierExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbQuantifierExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbQuantifierExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbQuantifierExpression _
)
public abstract void Visit(
    DbQuantifierExpression expression
)
public:
virtual void Visit(
    DbQuantifierExpression^ expression
) abstract
abstract Visit :
        expression:DbQuantifierExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbQuantifierExpression
被访问的 DbQuantifierExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbRefExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbRefExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbRefExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbRefExpression _
)
public abstract void Visit(
    DbRefExpression expression
)
public:
virtual void Visit(
    DbRefExpression^ expression
) abstract
abstract Visit :
        expression:DbRefExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbRefExpression
被访问的 DbRefExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbRefKeyExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbRefKeyExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbRefKeyExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbRefKeyExpression _
)
public abstract void Visit(
    DbRefKeyExpression expression
)
public:
virtual void Visit(
    DbRefKeyExpression^ expression
) abstract
abstract Visit :
        expression:DbRefKeyExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbRefKeyExpression
被访问的 DbRefKeyExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbRelationshipNavigationExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbRelationshipNavigationExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbRelationshipNavigationExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbRelationshipNavigationExpression _
)
public abstract void Visit(
    DbRelationshipNavigationExpression expression
)
public:
virtual void Visit(
    DbRelationshipNavigationExpression^ expression
) abstract
abstract Visit :
        expression:DbRelationshipNavigationExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbRelationshipNavigationExpression
被访问的 DbRelationshipNavigationExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbScanExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbScanExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbScanExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbScanExpression _
)
public abstract void Visit(
    DbScanExpression expression
)
public:
virtual void Visit(
    DbScanExpression^ expression
) abstract
abstract Visit :
        expression:DbScanExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbScanExpression
被访问的 DbScanExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbSkipExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbSkipExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbSkipExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbSkipExpression _
)
public abstract void Visit(
    DbSkipExpression expression
)
public:
virtual void Visit(
    DbSkipExpression^ expression
) abstract
abstract Visit :
        expression:DbSkipExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbSkipExpression
被访问的 DbSkipExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbSortExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbSortExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbSortExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbSortExpression _
)
public abstract void Visit(
    DbSortExpression expression
)
public:
virtual void Visit(
    DbSortExpression^ expression
) abstract
abstract Visit :
        expression:DbSortExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbSortExpression
被访问的 DbSortExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbTreatExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbTreatExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbTreatExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbTreatExpression _
)
public abstract void Visit(
    DbTreatExpression expression
)
public:
virtual void Visit(
    DbTreatExpression^ expression
) abstract
abstract Visit :
        expression:DbTreatExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbTreatExpression
被访问的 DbTreatExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbUnionAllExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbUnionAllExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbUnionAllExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbUnionAllExpression _
)
public abstract void Visit(
    DbUnionAllExpression expression
)
public:
virtual void Visit(
    DbUnionAllExpression^ expression
) abstract
abstract Visit :
        expression:DbUnionAllExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbUnionAllExpression
被访问的 DbUnionAllExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor ..::.Visit 方法 (DbVariableReferenceExpression)

DbExpressionVisitor
.
.
::
.
Visit 方法 (DbVariableReferenceExpression)
DbExpressionVisitor 类

在派生类中重写时，实现 DbVariableReferenceExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Visit ( _
    expression As DbVariableReferenceExpression _
)
public abstract void Visit(
    DbVariableReferenceExpression expression
)
public:
virtual void Visit(
    DbVariableReferenceExpression^ expression
) abstract
abstract Visit :
        expression:DbVariableReferenceExpression -> unit

参数

expression
类型： System.Data.Common.CommandTrees DbVariableReferenceExpression
被访问的 DbVariableReferenceExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor 类
DbExpressionVisitor 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) 类

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
类
成员

定义返回特定类型结果值的访问者应实现的基本功能。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbExpressionVisitor(Of TResultType)
public abstract class DbExpressionVisitor<TResultType>

generic<typename TResultType>
public ref class DbExpressionVisitor abstract
[<AbstractClassAttribute>]
type DbExpressionVisitor<'TResultType> =  class end

类型参数

TResultType

visitor 生成的结果的类型。

DbExpressionVisitor<(Of <(TResultType>)>) 是描述表达式遍历的抽象类。

System.Data.Common.CommandTrees
System.Data.Common.CommandTrees..::.DbExpressionVisitor<(Of <(TResultType>)>)DbExpressionVisitor
System.Data.Common.CommandTrees..::.DbExpressionVisitor<(Of <(TResultType>)>)TResultType
System.Data.Common.CommandTrees..::.DbExpressionVisitor<(Of <(TResultType>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) 成员

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpressionVisitor

定义返回特定类型结果值的访问者应实现的基本功能。

DbExpressionVisitor TResultType 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbExpressionVisitor TResultType 类
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) 构造函数

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
构造函数
DbExpressionVisitor

初始化 DbExpressionVisitor<(Of <(TResultType>)>) 类的新实例。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New
protected DbExpressionVisitor()
protected:
DbExpressionVisitor()
new : unit -> DbExpressionVisitor

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) 方法

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpressionVisitor

DbExpressionVisitor TResultType 类型公开以下成员。

名称 说明
页首

参考

DbExpressionVisitor TResultType 类
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbExpressionVisitor

实现表达式的访问者模式。

名称 说明
页首

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbAndExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbAndExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbAndExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbAndExpression _
) As TResultType
public abstract TResultType Visit(
    DbAndExpression expression
)
public:
virtual TResultType Visit(
    DbAndExpression^ expression
) abstract
abstract Visit :
        expression:DbAndExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbAndExpression
被访问的 DbAndExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbApplyExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbApplyExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbApplyExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbApplyExpression _
) As TResultType
public abstract TResultType Visit(
    DbApplyExpression expression
)
public:
virtual TResultType Visit(
    DbApplyExpression^ expression
) abstract
abstract Visit :
        expression:DbApplyExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbApplyExpression
被访问的 DbApplyExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbArithmeticExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbArithmeticExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbArithmeticExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbArithmeticExpression _
) As TResultType
public abstract TResultType Visit(
    DbArithmeticExpression expression
)
public:
virtual TResultType Visit(
    DbArithmeticExpression^ expression
) abstract
abstract Visit :
        expression:DbArithmeticExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbArithmeticExpression
被访问的 DbArithmeticExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbCaseExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbCaseExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbCaseExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbCaseExpression _
) As TResultType
public abstract TResultType Visit(
    DbCaseExpression expression
)
public:
virtual TResultType Visit(
    DbCaseExpression^ expression
) abstract
abstract Visit :
        expression:DbCaseExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbCaseExpression
被访问的 DbCaseExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbCastExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbCastExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbCastExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbCastExpression _
) As TResultType
public abstract TResultType Visit(
    DbCastExpression expression
)
public:
virtual TResultType Visit(
    DbCastExpression^ expression
) abstract
abstract Visit :
        expression:DbCastExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbCastExpression
被访问的 DbCastExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbComparisonExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbComparisonExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbComparisonExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbComparisonExpression _
) As TResultType
public abstract TResultType Visit(
    DbComparisonExpression expression
)
public:
virtual TResultType Visit(
    DbComparisonExpression^ expression
) abstract
abstract Visit :
        expression:DbComparisonExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbComparisonExpression
被访问的 ComparisonExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbConstantExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbConstantExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbConstantExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbConstantExpression _
) As TResultType
public abstract TResultType Visit(
    DbConstantExpression expression
)
public:
virtual TResultType Visit(
    DbConstantExpression^ expression
) abstract
abstract Visit :
        expression:DbConstantExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbConstantExpression
被访问的 DbConstantExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbCrossJoinExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbCrossJoinExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbCrossJoinExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbCrossJoinExpression _
) As TResultType
public abstract TResultType Visit(
    DbCrossJoinExpression expression
)
public:
virtual TResultType Visit(
    DbCrossJoinExpression^ expression
) abstract
abstract Visit :
        expression:DbCrossJoinExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbCrossJoinExpression
被访问的 DbCrossJoinExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbDerefExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbDerefExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbDerefExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbDerefExpression _
) As TResultType
public abstract TResultType Visit(
    DbDerefExpression expression
)
public:
virtual TResultType Visit(
    DbDerefExpression^ expression
) abstract
abstract Visit :
        expression:DbDerefExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbDerefExpression
被访问的 DbDerefExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbDistinctExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbDistinctExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbDistinctExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbDistinctExpression _
) As TResultType
public abstract TResultType Visit(
    DbDistinctExpression expression
)
public:
virtual TResultType Visit(
    DbDistinctExpression^ expression
) abstract
abstract Visit :
        expression:DbDistinctExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbDistinctExpression
被访问的 DbDistinctExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbElementExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbElementExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbElementExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbElementExpression _
) As TResultType
public abstract TResultType Visit(
    DbElementExpression expression
)
public:
virtual TResultType Visit(
    DbElementExpression^ expression
) abstract
abstract Visit :
        expression:DbElementExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbElementExpression
被访问的 DbElementExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbEntityRefExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbEntityRefExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbEntityRefExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbEntityRefExpression _
) As TResultType
public abstract TResultType Visit(
    DbEntityRefExpression expression
)
public:
virtual TResultType Visit(
    DbEntityRefExpression^ expression
) abstract
abstract Visit :
        expression:DbEntityRefExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbEntityRefExpression
被访问的 DbEntityRefExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbExceptExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbExceptExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbExceptExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbExceptExpression _
) As TResultType
public abstract TResultType Visit(
    DbExceptExpression expression
)
public:
virtual TResultType Visit(
    DbExceptExpression^ expression
) abstract
abstract Visit :
        expression:DbExceptExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbExceptExpression
被访问的 DbExceptExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbExpression)
DbExpressionVisitor

在派生类中重写时，处理任何类型无法识别的表达式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbExpression _
) As TResultType
public abstract TResultType Visit(
    DbExpression expression
)
public:
virtual TResultType Visit(
    DbExpression^ expression
) abstract
abstract Visit :
        expression:DbExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbExpression
被访问的 DbExpression。

返回值

类型： TResultType
特定类型的结果值。

在遇到类型无法识别的表达式时，将调用此方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbFilterExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbFilterExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbFilterExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbFilterExpression _
) As TResultType
public abstract TResultType Visit(
    DbFilterExpression expression
)
public:
virtual TResultType Visit(
    DbFilterExpression^ expression
) abstract
abstract Visit :
        expression:DbFilterExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbFilterExpression
被访问的 DbFilterExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbFunctionExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbFunctionExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbFunctionExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbFunctionExpression _
) As TResultType
public abstract TResultType Visit(
    DbFunctionExpression expression
)
public:
virtual TResultType Visit(
    DbFunctionExpression^ expression
) abstract
abstract Visit :
        expression:DbFunctionExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbFunctionExpression
被访问的 DbFunctionExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbGroupByExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbGroupByExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbGroupByExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbGroupByExpression _
) As TResultType
public abstract TResultType Visit(
    DbGroupByExpression expression
)
public:
virtual TResultType Visit(
    DbGroupByExpression^ expression
) abstract
abstract Visit :
        expression:DbGroupByExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbGroupByExpression
被访问的 DbGroupByExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbIntersectExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbIntersectExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbIntersectExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbIntersectExpression _
) As TResultType
public abstract TResultType Visit(
    DbIntersectExpression expression
)
public:
virtual TResultType Visit(
    DbIntersectExpression^ expression
) abstract
abstract Visit :
        expression:DbIntersectExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbIntersectExpression
被访问的 DbIntersectExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbIsEmptyExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbIsEmptyExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbIsEmptyExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbIsEmptyExpression _
) As TResultType
public abstract TResultType Visit(
    DbIsEmptyExpression expression
)
public:
virtual TResultType Visit(
    DbIsEmptyExpression^ expression
) abstract
abstract Visit :
        expression:DbIsEmptyExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbIsEmptyExpression
被访问的 DbIsEmptyExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbIsNullExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbIsNullExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbIsNullExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbIsNullExpression _
) As TResultType
public abstract TResultType Visit(
    DbIsNullExpression expression
)
public:
virtual TResultType Visit(
    DbIsNullExpression^ expression
) abstract
abstract Visit :
        expression:DbIsNullExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbIsNullExpression
被访问的 DbIsNullExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbIsOfExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbIsOfExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbIsOfExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbIsOfExpression _
) As TResultType
public abstract TResultType Visit(
    DbIsOfExpression expression
)
public:
virtual TResultType Visit(
    DbIsOfExpression^ expression
) abstract
abstract Visit :
        expression:DbIsOfExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbIsOfExpression
被访问的 DbIsOfExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbJoinExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbJoinExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbJoinExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbJoinExpression _
) As TResultType
public abstract TResultType Visit(
    DbJoinExpression expression
)
public:
virtual TResultType Visit(
    DbJoinExpression^ expression
) abstract
abstract Visit :
        expression:DbJoinExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbJoinExpression
被访问的 DbJoinExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbLambdaExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbLambdaExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbLambdaExpression 的访问者模式方法。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overridable Function Visit ( _
    expression As DbLambdaExpression _
) As TResultType
public virtual TResultType Visit(
    DbLambdaExpression expression
)
public:
virtual TResultType Visit(
    DbLambdaExpression^ expression
)
abstract Visit :
        expression:DbLambdaExpression -> 'TResultType
override Visit :
        expression:DbLambdaExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbLambdaExpression
被访问的 DbLambdaExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbLikeExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbLikeExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbLikeExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbLikeExpression _
) As TResultType
public abstract TResultType Visit(
    DbLikeExpression expression
)
public:
virtual TResultType Visit(
    DbLikeExpression^ expression
) abstract
abstract Visit :
        expression:DbLikeExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbLikeExpression
被访问的 DbLikeExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbLimitExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbLimitExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbLimitExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbLimitExpression _
) As TResultType
public abstract TResultType Visit(
    DbLimitExpression expression
)
public:
virtual TResultType Visit(
    DbLimitExpression^ expression
) abstract
abstract Visit :
        expression:DbLimitExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbLimitExpression
被访问的 DbLimitExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbNewInstanceExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbNewInstanceExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbNewInstanceExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbNewInstanceExpression _
) As TResultType
public abstract TResultType Visit(
    DbNewInstanceExpression expression
)
public:
virtual TResultType Visit(
    DbNewInstanceExpression^ expression
) abstract
abstract Visit :
        expression:DbNewInstanceExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbNewInstanceExpression
被访问的 DbNewInstanceExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbNotExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbNotExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbNotExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbNotExpression _
) As TResultType
public abstract TResultType Visit(
    DbNotExpression expression
)
public:
virtual TResultType Visit(
    DbNotExpression^ expression
) abstract
abstract Visit :
        expression:DbNotExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbNotExpression
被访问的 DbNotExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbNullExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbNullExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbNullExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbNullExpression _
) As TResultType
public abstract TResultType Visit(
    DbNullExpression expression
)
public:
virtual TResultType Visit(
    DbNullExpression^ expression
) abstract
abstract Visit :
        expression:DbNullExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbNullExpression
被访问的 DbNullExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbOfTypeExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbOfTypeExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbOfTypeExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbOfTypeExpression _
) As TResultType
public abstract TResultType Visit(
    DbOfTypeExpression expression
)
public:
virtual TResultType Visit(
    DbOfTypeExpression^ expression
) abstract
abstract Visit :
        expression:DbOfTypeExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbOfTypeExpression
被访问的 DbOfTypeExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbOrExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbOrExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbOrExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbOrExpression _
) As TResultType
public abstract TResultType Visit(
    DbOrExpression expression
)
public:
virtual TResultType Visit(
    DbOrExpression^ expression
) abstract
abstract Visit :
        expression:DbOrExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbOrExpression
被访问的 DbOrExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbParameterReferenceExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbParameterReferenceExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbParameterReferenceExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbParameterReferenceExpression _
) As TResultType
public abstract TResultType Visit(
    DbParameterReferenceExpression expression
)
public:
virtual TResultType Visit(
    DbParameterReferenceExpression^ expression
) abstract
abstract Visit :
        expression:DbParameterReferenceExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbParameterReferenceExpression
被访问的 DbParameterReferenceExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbProjectExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbProjectExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbProjectExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbProjectExpression _
) As TResultType
public abstract TResultType Visit(
    DbProjectExpression expression
)
public:
virtual TResultType Visit(
    DbProjectExpression^ expression
) abstract
abstract Visit :
        expression:DbProjectExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbProjectExpression
被访问的 DbProjectExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbPropertyExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbPropertyExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbPropertyExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbPropertyExpression _
) As TResultType
public abstract TResultType Visit(
    DbPropertyExpression expression
)
public:
virtual TResultType Visit(
    DbPropertyExpression^ expression
) abstract
abstract Visit :
        expression:DbPropertyExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbPropertyExpression
被访问的 DbPropertyExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbQuantifierExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbQuantifierExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbQuantifierExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbQuantifierExpression _
) As TResultType
public abstract TResultType Visit(
    DbQuantifierExpression expression
)
public:
virtual TResultType Visit(
    DbQuantifierExpression^ expression
) abstract
abstract Visit :
        expression:DbQuantifierExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbQuantifierExpression
被访问的 DbQuantifierExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbRefExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbRefExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbRefExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbRefExpression _
) As TResultType
public abstract TResultType Visit(
    DbRefExpression expression
)
public:
virtual TResultType Visit(
    DbRefExpression^ expression
) abstract
abstract Visit :
        expression:DbRefExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbRefExpression
被访问的 DbRefExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbRefKeyExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbRefKeyExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbRefKeyExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbRefKeyExpression _
) As TResultType
public abstract TResultType Visit(
    DbRefKeyExpression expression
)
public:
virtual TResultType Visit(
    DbRefKeyExpression^ expression
) abstract
abstract Visit :
        expression:DbRefKeyExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbRefKeyExpression
被访问的 DbRefKeyExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbRelationshipNavigationExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbRelationshipNavigationExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbRelationshipNavigationExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbRelationshipNavigationExpression _
) As TResultType
public abstract TResultType Visit(
    DbRelationshipNavigationExpression expression
)
public:
virtual TResultType Visit(
    DbRelationshipNavigationExpression^ expression
) abstract
abstract Visit :
        expression:DbRelationshipNavigationExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbRelationshipNavigationExpression
被访问的 DbRelationshipNavigationExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbScanExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbScanExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbScanExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbScanExpression _
) As TResultType
public abstract TResultType Visit(
    DbScanExpression expression
)
public:
virtual TResultType Visit(
    DbScanExpression^ expression
) abstract
abstract Visit :
        expression:DbScanExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbScanExpression
被访问的 DbScanExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbSkipExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbSkipExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbSkipExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbSkipExpression _
) As TResultType
public abstract TResultType Visit(
    DbSkipExpression expression
)
public:
virtual TResultType Visit(
    DbSkipExpression^ expression
) abstract
abstract Visit :
        expression:DbSkipExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbSkipExpression
被访问的 DbSkipExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbSortExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbSortExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbSortExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbSortExpression _
) As TResultType
public abstract TResultType Visit(
    DbSortExpression expression
)
public:
virtual TResultType Visit(
    DbSortExpression^ expression
) abstract
abstract Visit :
        expression:DbSortExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbSortExpression
被访问的 DbSortExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbTreatExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbTreatExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbTreatExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbTreatExpression _
) As TResultType
public abstract TResultType Visit(
    DbTreatExpression expression
)
public:
virtual TResultType Visit(
    DbTreatExpression^ expression
) abstract
abstract Visit :
        expression:DbTreatExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbTreatExpression
被访问的 DbTreatExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbUnionAllExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbUnionAllExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbUnionAllExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbUnionAllExpression _
) As TResultType
public abstract TResultType Visit(
    DbUnionAllExpression expression
)
public:
virtual TResultType Visit(
    DbUnionAllExpression^ expression
) abstract
abstract Visit :
        expression:DbUnionAllExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbUnionAllExpression
被访问的 DbUnionAllExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbExpressionVisitor <(Of <(TResultType >)>) ..::.Visit 方法 (DbVariableReferenceExpression)

DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
.
.
::
.
Visit 方法 (DbVariableReferenceExpression)
DbExpressionVisitor

在派生类中重写时，实现 DbVariableReferenceExpression 的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function Visit ( _
    expression As DbVariableReferenceExpression _
) As TResultType
public abstract TResultType Visit(
    DbVariableReferenceExpression expression
)
public:
virtual TResultType Visit(
    DbVariableReferenceExpression^ expression
) abstract
abstract Visit :
        expression:DbVariableReferenceExpression -> 'TResultType

参数

expression
类型： System.Data.Common.CommandTrees DbVariableReferenceExpression
被访问的 DbVariableReferenceExpression。

返回值

类型： TResultType
特定类型的结果值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbExpressionVisitor TResultType 类
DbExpressionVisitor TResultType 成员
Visit 重载
System.Data.Common.CommandTrees 命名空间


DbFilterExpression 类

DbFilterExpression 类
成员

表示应用来筛选输入集的谓词。这将生成满足该谓词的元素集。此类不能被继承。 表示应用来筛选输入集的谓词。这将生成满足该谓词的元素集。此类不能被继承。 表示应用来筛选输入集的谓词。这将生成满足该谓词的元素集。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbFilterExpression _
    Inherits DbExpression
public sealed class DbFilterExpression : DbExpression
public ref class DbFilterExpression sealed : public DbExpression
[<SealedAttribute>]
type DbFilterExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbFilterExpressionDbFilterExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFilterExpression 成员
System.Data.Common.CommandTrees 命名空间


DbFilterExpression 成员

DbFilterExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFilterExpression 类

表示应用来筛选输入集的谓词。这将生成满足该谓词的元素集。此类不能被继承。 表示应用来筛选输入集的谓词。这将生成满足该谓词的元素集。此类不能被继承。 表示应用来筛选输入集的谓词。这将生成满足该谓词的元素集。此类不能被继承。

DbFilterExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbFilterExpression 类
System.Data.Common.CommandTrees 命名空间


DbFilterExpression 方法

DbFilterExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFilterExpression 类

DbFilterExpression 类型公开以下成员。

名称 说明
页首

参考

DbFilterExpression 类
System.Data.Common.CommandTrees 命名空间


DbFilterExpression ..::.Accept 方法

DbFilterExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFilterExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbFilterExpression 类
DbFilterExpression 成员
System.Data.Common.CommandTrees 命名空间


DbFilterExpression ..::.Accept 方法 (DbExpressionVisitor)

DbFilterExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbFilterExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFilterExpression 类
DbFilterExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbFilterExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbFilterExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbFilterExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFilterExpression 类
DbFilterExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbFilterExpression 属性

DbFilterExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFilterExpression 类

DbFilterExpression 类型公开以下成员。

名称 说明
页首

参考

DbFilterExpression 类
System.Data.Common.CommandTrees 命名空间


DbFilterExpression ..::.Input 属性

DbFilterExpression
.
.
::
.
Input 属性
DbFilterExpression 类

获取指定输入集的 DbExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Input As DbExpressionBinding
    Get
public DbExpressionBinding Input { get; }
public:
property DbExpressionBinding^ Input {
    DbExpressionBinding^ get ();
}
member Input : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
指定输入集的 DbExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFilterExpression 类
DbFilterExpression 成员
System.Data.Common.CommandTrees 命名空间


DbFilterExpression ..::.Predicate 属性

DbFilterExpression
.
.
::
.
Predicate 属性
DbFilterExpression 类

获取或设置指定用于筛选输入集的谓词的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Predicate As DbExpression
    Get
public DbExpression Predicate { get; }
public:
property DbExpression^ Predicate {
    DbExpression^ get ();
}
member Predicate : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
指定用于筛选输入集的谓词的 DbExpression。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbFilterExpression 的命令目录树没有关联，或者其结果类型不是 Boolean 类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFilterExpression 类
DbFilterExpression 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionAggregate 类

DbFunctionAggregate 类
成员

支持标准聚合函数，如 MIN、MAX、AVG、SUM 等等。无法继承此类。 支持标准聚合函数，如 MIN、MAX、AVG、SUM 等等。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbFunctionAggregate _
    Inherits DbAggregate
public sealed class DbFunctionAggregate : DbAggregate
public ref class DbFunctionAggregate sealed : public DbAggregate
[<SealedAttribute>]
type DbFunctionAggregate =
    class
        inherit DbAggregate
    end

此聚合类型对应于聚合函数的调用。

聚合是伪表达式，只能出现在 GroupBy 表达式的聚合子句中。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbFunctionAggregateDbFunctionAggregate
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionAggregate 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionAggregate 成员

DbFunctionAggregate 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionAggregate 类

支持标准聚合函数，如 MIN、MAX、AVG、SUM 等等。无法继承此类。 支持标准聚合函数，如 MIN、MAX、AVG、SUM 等等。无法继承此类。

DbFunctionAggregate 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbFunctionAggregate 类
System.Data.Common.CommandTrees 命名空间


DbFunctionAggregate 方法

DbFunctionAggregate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionAggregate 类

DbFunctionAggregate 类型公开以下成员。

名称 说明
页首

参考

DbFunctionAggregate 类
System.Data.Common.CommandTrees 命名空间


DbFunctionAggregate 属性

DbFunctionAggregate 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionAggregate 类

DbFunctionAggregate 类型公开以下成员。

名称 说明
页首

参考

DbFunctionAggregate 类
System.Data.Common.CommandTrees 命名空间


DbFunctionAggregate ..::.Distinct 属性

DbFunctionAggregate
.
.
::
.
Distinct 属性
DbFunctionAggregate 类

获取一个值，该值指示此聚合是否是非重复聚合。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Distinct As Boolean
    Get
public bool Distinct { get; }
public:
property bool Distinct {
    bool get ();
}
member Distinct : bool

属性值

类型： System Boolean
如果聚合是非重复聚合，则为 true；否则为 false。

DbFunctionAggregate 的 Distinct 属性指示聚合是否是非重复的。因此，在计算聚合之前，必须清除输入参数中的重复项。 DbFunctionAggregate 的 Distinct 属性指示聚合是否是非重复的。因此，在计算聚合之前，必须清除输入参数中的重复项。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionAggregate 类
DbFunctionAggregate 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionAggregate ..::.Function 属性

DbFunctionAggregate
.
.
::
.
Function 属性
DbFunctionAggregate 类

获取指定要调用的聚合函数的方法元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Function As EdmFunction
    Get
public EdmFunction Function { get; }
public:
property EdmFunction^ Function {
    EdmFunction^ get ();
}
member Function : EdmFunction

属性值

类型： System.Data.Metadata.Edm EdmFunction
指定要调用的聚合函数的方法元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionAggregate 类
DbFunctionAggregate 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionCommandTree 类

DbFunctionCommandTree 类
成员

表示对数据库函数的调用。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbFunctionCommandTree _
    Inherits DbCommandTree
public sealed class DbFunctionCommandTree : DbCommandTree
public ref class DbFunctionCommandTree sealed : public DbCommandTree
[<SealedAttribute>]
type DbFunctionCommandTree =
    class
        inherit DbCommandTree
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbFunctionCommandTreeDbFunctionCommandTree
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionCommandTree 成员

DbFunctionCommandTree 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionCommandTree 类

表示对数据库函数的调用。

DbFunctionCommandTree 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbFunctionCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbFunctionCommandTree 方法

DbFunctionCommandTree 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionCommandTree 类

DbFunctionCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbFunctionCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbFunctionCommandTree 属性

DbFunctionCommandTree 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionCommandTree 类

DbFunctionCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbFunctionCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbFunctionCommandTree ..::.EdmFunction 属性

DbFunctionCommandTree
.
.
::
.
EdmFunction 属性
DbFunctionCommandTree 类

获取表示正在调用的函数的 EdmFunction。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property EdmFunction As EdmFunction
    Get
public EdmFunction EdmFunction { get; }
public:
property EdmFunction^ EdmFunction {
    EdmFunction^ get ();
}
member EdmFunction : EdmFunction

属性值

类型： System.Data.Metadata.Edm EdmFunction
表示正在调用的函数的 EdmFunction。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionCommandTree 类
DbFunctionCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionCommandTree ..::.ResultType 属性

DbFunctionCommandTree
.
.
::
.
ResultType 属性
DbFunctionCommandTree 类

获取函数的第一个结果集的预期结果类型。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ResultType As TypeUsage
    Get
public TypeUsage ResultType { get; }
public:
property TypeUsage^ ResultType {
    TypeUsage^ get ();
}
member ResultType : TypeUsage

属性值

类型： System.Data.Metadata.Edm TypeUsage
函数的第一个结果集的预期结果类型。

结果形状必须是一个行集合。行中的 Properties 表示具有相应名称的列的预期类型。结果类型不限制列顺序。 结果形状必须是一个行集合。行中的 Properties 表示具有相应名称的列的预期类型。结果类型不限制列顺序。 结果形状必须是一个行集合。行中的 Properties 表示具有相应名称的列的预期类型。结果类型不限制列顺序。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionCommandTree 类
DbFunctionCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionExpression 类

DbFunctionExpression 类
成员

表示函数调用。无法继承此类。 表示函数调用。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbFunctionExpression _
    Inherits DbExpression
public sealed class DbFunctionExpression : DbExpression
public ref class DbFunctionExpression sealed : public DbExpression
[<SealedAttribute>]
type DbFunctionExpression =
    class
        inherit DbExpression
    end

存储过程也映射为函数并作为函数处理。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbFunctionExpressionDbFunctionExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionExpression 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionExpression 成员

DbFunctionExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionExpression 类

表示函数调用。无法继承此类。 表示函数调用。无法继承此类。

DbFunctionExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbFunctionExpression 类
System.Data.Common.CommandTrees 命名空间


DbFunctionExpression 方法

DbFunctionExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionExpression 类

DbFunctionExpression 类型公开以下成员。

名称 说明
页首

参考

DbFunctionExpression 类
System.Data.Common.CommandTrees 命名空间


DbFunctionExpression ..::.Accept 方法

DbFunctionExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbFunctionExpression 类
DbFunctionExpression 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionExpression ..::.Accept 方法 (DbExpressionVisitor)

DbFunctionExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbFunctionExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionExpression 类
DbFunctionExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbFunctionExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbFunctionExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbFunctionExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionExpression 类
DbFunctionExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbFunctionExpression 属性

DbFunctionExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbFunctionExpression 类

DbFunctionExpression 类型公开以下成员。

名称 说明
页首

参考

DbFunctionExpression 类
System.Data.Common.CommandTrees 命名空间


DbFunctionExpression ..::.Arguments 属性

DbFunctionExpression
.
.
::
.
Arguments 属性
DbFunctionExpression 类

获取为函数提供参数的 DbExpression 列表。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Arguments As IList(Of DbExpression)
    Get
public IList<DbExpression> Arguments { get; }
public:
property IList<DbExpression^>^ Arguments {
    IList<DbExpression^>^ get ();
}
member Arguments : IList<DbExpression>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbExpression
>
)
>
)

为函数提供参数的 DbExpression 列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionExpression 类
DbFunctionExpression 成员
System.Data.Common.CommandTrees 命名空间


DbFunctionExpression ..::.Function 属性

DbFunctionExpression
.
.
::
.
Function 属性
DbFunctionExpression 类

获取要调用的函数的元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Function As EdmFunction
    Get
public EdmFunction Function { get; }
public:
property EdmFunction^ Function {
    EdmFunction^ get ();
}
member Function : EdmFunction

属性值

类型： System.Data.Metadata.Edm EdmFunction
要调用的函数的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbFunctionExpression 类
DbFunctionExpression 成员
System.Data.Common.CommandTrees 命名空间


DbGroupAggregate 类

DbGroupAggregate 类
成员

表示构成组的元素的集合。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbGroupAggregate _
    Inherits DbAggregate
public sealed class DbGroupAggregate : DbAggregate
public ref class DbGroupAggregate sealed : public DbAggregate
[<SealedAttribute>]
type DbGroupAggregate =
    class
        inherit DbAggregate
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbGroupAggregateDbGroupAggregate
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupAggregate 成员
System.Data.Common.CommandTrees 命名空间


DbGroupAggregate 成员

DbGroupAggregate 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupAggregate 类

表示构成组的元素的集合。

DbGroupAggregate 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbGroupAggregate 类
System.Data.Common.CommandTrees 命名空间


DbGroupAggregate 方法

DbGroupAggregate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupAggregate 类

DbGroupAggregate 类型公开以下成员。

名称 说明
页首

参考

DbGroupAggregate 类
System.Data.Common.CommandTrees 命名空间


DbGroupAggregate 属性

DbGroupAggregate 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupAggregate 类

DbGroupAggregate 类型公开以下成员。

名称 说明
页首

参考

DbGroupAggregate 类
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression 类

DbGroupByExpression 类
成员

表示分组操作。分组操作对输入集中的元素进行分组，分组依据是在应用指定聚合之前指定的键表达式。此类不能被继承。 表示分组操作。分组操作对输入集中的元素进行分组，分组依据是在应用指定聚合之前指定的键表达式。此类不能被继承。 表示分组操作。分组操作对输入集中的元素进行分组，分组依据是在应用指定聚合之前指定的键表达式。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbGroupByExpression _
    Inherits DbExpression
public sealed class DbGroupByExpression : DbExpression
public ref class DbGroupByExpression sealed : public DbExpression
[<SealedAttribute>]
type DbGroupByExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbGroupByExpressionDbGroupByExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupByExpression 成员
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression 成员

DbGroupByExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupByExpression 类

表示分组操作。分组操作对输入集中的元素进行分组，分组依据是在应用指定聚合之前指定的键表达式。此类不能被继承。 表示分组操作。分组操作对输入集中的元素进行分组，分组依据是在应用指定聚合之前指定的键表达式。此类不能被继承。 表示分组操作。分组操作对输入集中的元素进行分组，分组依据是在应用指定聚合之前指定的键表达式。此类不能被继承。

DbGroupByExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbGroupByExpression 类
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression 方法

DbGroupByExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupByExpression 类

DbGroupByExpression 类型公开以下成员。

名称 说明
页首

参考

DbGroupByExpression 类
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression ..::.Accept 方法

DbGroupByExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupByExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbGroupByExpression 类
DbGroupByExpression 成员
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression ..::.Accept 方法 (DbExpressionVisitor)

DbGroupByExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbGroupByExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupByExpression 类
DbGroupByExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbGroupByExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbGroupByExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupByExpression 类
DbGroupByExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression 属性

DbGroupByExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupByExpression 类

DbGroupByExpression 类型公开以下成员。

名称 说明
页首

参考

DbGroupByExpression 类
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression ..::.Aggregates 属性

DbGroupByExpression
.
.
::
.
Aggregates 属性
DbGroupByExpression 类

获取 DbAggregate 列表，该列表提供可应用的聚合函数。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Aggregates As IList(Of DbAggregate)
    Get
public IList<DbAggregate> Aggregates { get; }
public:
property IList<DbAggregate^>^ Aggregates {
    IList<DbAggregate^>^ get ();
}
member Aggregates : IList<DbAggregate>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbAggregate
>
)
>
)

提供可应用的聚合函数的 DbAggregate 列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupByExpression 类
DbGroupByExpression 成员
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression ..::.Input 属性

DbGroupByExpression
.
.
::
.
Input 属性
DbGroupByExpression 类

获取指定输入集并提供对集元素和组元素变量的访问的 DbGroupExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Input As DbGroupExpressionBinding
    Get
public DbGroupExpressionBinding Input { get; }
public:
property DbGroupExpressionBinding^ Input {
    DbGroupExpressionBinding^ get ();
}
member Input : DbGroupExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbGroupExpressionBinding
指定输入集并提供对集元素和组元素变量的访问的 DbGroupExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupByExpression 类
DbGroupByExpression 成员
System.Data.Common.CommandTrees 命名空间


DbGroupByExpression ..::.Keys 属性

DbGroupByExpression
.
.
::
.
Keys 属性
DbGroupByExpression 类

获取 DbExpression 列表，该列表提供分组键。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Keys As IList(Of DbExpression)
    Get
public IList<DbExpression> Keys { get; }
public:
property IList<DbExpression^>^ Keys {
    IList<DbExpression^>^ get ();
}
member Keys : IList<DbExpression>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbExpression
>
)
>
)

提供分组键的 DbExpression 列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupByExpression 类
DbGroupByExpression 成员
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding 类

DbGroupExpressionBinding 类
成员

定义输入集与 DbGroupByExpression 的绑定。此类不能被继承。 定义输入集与 DbGroupByExpression 的绑定。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbGroupExpressionBinding
public sealed class DbGroupExpressionBinding
public ref class DbGroupExpressionBinding sealed
[<SealedAttribute>]
type DbGroupExpressionBinding =  class end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbGroupExpressionBindingDbGroupExpressionBinding
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding 成员

DbGroupExpressionBinding 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupExpressionBinding 类

定义输入集与 DbGroupByExpression 的绑定。此类不能被继承。 定义输入集与 DbGroupByExpression 的绑定。此类不能被继承。

DbGroupExpressionBinding 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbGroupExpressionBinding 类
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding 方法

DbGroupExpressionBinding 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupExpressionBinding 类

DbGroupExpressionBinding 类型公开以下成员。

名称 说明
页首

参考

DbGroupExpressionBinding 类
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding 属性

DbGroupExpressionBinding 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbGroupExpressionBinding 类

DbGroupExpressionBinding 类型公开以下成员。

名称 说明
页首

参考

DbGroupExpressionBinding 类
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding ..::.Expression 属性

DbGroupExpressionBinding
.
.
::
.
Expression 属性
DbGroupExpressionBinding 类

获取或设置定义输入集的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Expression As DbExpression
    Get
public DbExpression Expression { get; }
public:
property DbExpression^ Expression {
    DbExpression^ get ();
}
member Expression : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
定义输入集的 DbExpression。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbGroupExpressionBinding 的命令目录树没有关联，或者其结果类型不等于或不可提升为该属性当前值的结果类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupExpressionBinding 类
DbGroupExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding ..::.GroupAggregate 属性

DbGroupExpressionBinding
.
.
::
.
GroupAggregate 属性
DbGroupExpressionBinding 类

获取 DbGroupAggregate，它表示组中的元素集合。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property GroupAggregate As DbGroupAggregate
    Get
public DbGroupAggregate GroupAggregate { get; }
public:
property DbGroupAggregate^ GroupAggregate {
    DbGroupAggregate^ get ();
}
member GroupAggregate : DbGroupAggregate

属性值

类型： System.Data.Common.CommandTrees DbGroupAggregate
组中的元素。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupExpressionBinding 类
DbGroupExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding ..::.GroupVariable 属性

DbGroupExpressionBinding
.
.
::
.
GroupVariable 属性
DbGroupExpressionBinding 类

获取引用组元素变量的 DbVariableReferenceExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property GroupVariable As DbVariableReferenceExpression
    Get
public DbVariableReferenceExpression GroupVariable { get; }
public:
property DbVariableReferenceExpression^ GroupVariable {
    DbVariableReferenceExpression^ get ();
}
member GroupVariable : DbVariableReferenceExpression

属性值

类型： System.Data.Common.CommandTrees DbVariableReferenceExpression
对组元素变量的引用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupExpressionBinding 类
DbGroupExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding ..::.GroupVariableName 属性

DbGroupExpressionBinding
.
.
::
.
GroupVariableName 属性
DbGroupExpressionBinding 类

获取分配给组元素变量的名称。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property GroupVariableName As String
    Get
public string GroupVariableName { get; }
public:
property String^ GroupVariableName {
    String^ get ();
}
member GroupVariableName : string

属性值

类型： System String
分配给组元素变量的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupExpressionBinding 类
DbGroupExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding ..::.GroupVariableType 属性

DbGroupExpressionBinding
.
.
::
.
GroupVariableType 属性
DbGroupExpressionBinding 类

获取组元素变量的类型元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property GroupVariableType As TypeUsage
    Get
public TypeUsage GroupVariableType { get; }
public:
property TypeUsage^ GroupVariableType {
    TypeUsage^ get ();
}
member GroupVariableType : TypeUsage

属性值

类型： System.Data.Metadata.Edm TypeUsage
组元素变量的类型元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupExpressionBinding 类
DbGroupExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding ..::.Variable 属性

DbGroupExpressionBinding
.
.
::
.
Variable 属性
DbGroupExpressionBinding 类

获取引用元素变量的 DbVariableReferenceExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Variable As DbVariableReferenceExpression
    Get
public DbVariableReferenceExpression Variable { get; }
public:
property DbVariableReferenceExpression^ Variable {
    DbVariableReferenceExpression^ get ();
}
member Variable : DbVariableReferenceExpression

属性值

类型： System.Data.Common.CommandTrees DbVariableReferenceExpression
对元素变量的引用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupExpressionBinding 类
DbGroupExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding ..::.VariableName 属性

DbGroupExpressionBinding
.
.
::
.
VariableName 属性
DbGroupExpressionBinding 类

获取分配给元素变量的名称。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property VariableName As String
    Get
public string VariableName { get; }
public:
property String^ VariableName {
    String^ get ();
}
member VariableName : string

属性值

类型： System String
分配给元素变量的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupExpressionBinding 类
DbGroupExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbGroupExpressionBinding ..::.VariableType 属性

DbGroupExpressionBinding
.
.
::
.
VariableType 属性
DbGroupExpressionBinding 类

获取元素变量的类型元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property VariableType As TypeUsage
    Get
public TypeUsage VariableType { get; }
public:
property TypeUsage^ VariableType {
    TypeUsage^ get ();
}
member VariableType : TypeUsage

属性值

类型： System.Data.Metadata.Edm TypeUsage
元素变量的类型元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbGroupExpressionBinding 类
DbGroupExpressionBinding 成员
System.Data.Common.CommandTrees 命名空间


DbInsertCommandTree 类

DbInsertCommandTree 类
成员

表示以命令目录树表示的单行插入操作。无法继承此类。 表示以命令目录树表示的单行插入操作。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbInsertCommandTree _
    Inherits DbModificationCommandTree
public sealed class DbInsertCommandTree : DbModificationCommandTree
public ref class DbInsertCommandTree sealed : public DbModificationCommandTree
[<SealedAttribute>]
type DbInsertCommandTree =
    class
        inherit DbModificationCommandTree
    end

如果设置 Returning 属性，则该命令返回一个读取器；否则，返回一个标量值，该值指示受到影响的行的数目。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbInsertCommandTreeDbInsertCommandTree
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbInsertCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbInsertCommandTree 成员

DbInsertCommandTree 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbInsertCommandTree 类

表示以命令目录树表示的单行插入操作。无法继承此类。 表示以命令目录树表示的单行插入操作。无法继承此类。

DbInsertCommandTree 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbInsertCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbInsertCommandTree 方法

DbInsertCommandTree 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbInsertCommandTree 类

DbInsertCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbInsertCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbInsertCommandTree 属性

DbInsertCommandTree 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbInsertCommandTree 类

DbInsertCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbInsertCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbInsertCommandTree ..::.Returning 属性

DbInsertCommandTree
.
.
::
.
Returning 属性
DbInsertCommandTree 类

获取一个 DbExpression，该表达式指定要根据修改的行返回的结果的投影。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Returning As DbExpression
    Get
public DbExpression Returning { get; }
public:
property DbExpression^ Returning {
    DbExpression^ get ();
}
member Returning : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
获取一个 DbExpression，该 DbExpression 指定基于修改的行要返回的结果的投影。nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 指示不应从此命令返回任何结果。 获取一个 DbExpression，该 DbExpression 指定基于修改的行要返回的结果的投影。nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 指示不应从此命令返回任何结果。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbInsertCommandTree 类
DbInsertCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbInsertCommandTree ..::.SetClauses 属性

DbInsertCommandTree
.
.
::
.
SetClauses 属性
DbInsertCommandTree 类

获取一个定义插入操作的插入集子句的列表。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property SetClauses As IList(Of DbModificationClause)
    Get
public IList<DbModificationClause> SetClauses { get; }
public:
property IList<DbModificationClause^>^ SetClauses {
    IList<DbModificationClause^>^ get ();
}
member SetClauses : IList<DbModificationClause>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbModificationClause
>
)
>
)

定义插入操作的插入集子句的列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbInsertCommandTree 类
DbInsertCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbIntersectExpression 类

DbIntersectExpression 类
成员

表示左操作数和右操作数之间的交集操作。无法继承此类。 表示左操作数和右操作数之间的交集操作。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbIntersectExpression _
    Inherits DbBinaryExpression
public sealed class DbIntersectExpression : DbBinaryExpression
public ref class DbIntersectExpression sealed : public DbBinaryExpression
[<SealedAttribute>]
type DbIntersectExpression =
    class
        inherit DbBinaryExpression
    end

此类要求其参数为相同的集合结果类型。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbIntersectExpressionDbIntersectExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIntersectExpression 成员
System.Data.Common.CommandTrees 命名空间


DbIntersectExpression 成员

DbIntersectExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIntersectExpression 类

表示左操作数和右操作数之间的交集操作。无法继承此类。 表示左操作数和右操作数之间的交集操作。无法继承此类。

DbIntersectExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbIntersectExpression 类
System.Data.Common.CommandTrees 命名空间


DbIntersectExpression 方法

DbIntersectExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIntersectExpression 类

DbIntersectExpression 类型公开以下成员。

名称 说明
页首

参考

DbIntersectExpression 类
System.Data.Common.CommandTrees 命名空间


DbIntersectExpression ..::.Accept 方法

DbIntersectExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIntersectExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbIntersectExpression 类
DbIntersectExpression 成员
System.Data.Common.CommandTrees 命名空间


DbIntersectExpression ..::.Accept 方法 (DbExpressionVisitor)

DbIntersectExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbIntersectExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIntersectExpression 类
DbIntersectExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbIntersectExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbIntersectExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbIntersectExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIntersectExpression 类
DbIntersectExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbIntersectExpression 属性

DbIntersectExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIntersectExpression 类

DbIntersectExpression 类型公开以下成员。

名称 说明
页首

参考

DbIntersectExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsEmptyExpression 类

DbIsEmptyExpression 类
成员

表示应用于单个集参数的空集确定。此类不能继承。 表示应用于单个集参数的空集确定。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbIsEmptyExpression _
    Inherits DbUnaryExpression
public sealed class DbIsEmptyExpression : DbUnaryExpression
public ref class DbIsEmptyExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbIsEmptyExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbIsEmptyExpressionDbIsEmptyExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsEmptyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbIsEmptyExpression 成员

DbIsEmptyExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsEmptyExpression 类

表示应用于单个集参数的空集确定。此类不能继承。 表示应用于单个集参数的空集确定。此类不能继承。

DbIsEmptyExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbIsEmptyExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsEmptyExpression 方法

DbIsEmptyExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsEmptyExpression 类

DbIsEmptyExpression 类型公开以下成员。

名称 说明
页首

参考

DbIsEmptyExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsEmptyExpression ..::.Accept 方法

DbIsEmptyExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsEmptyExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbIsEmptyExpression 类
DbIsEmptyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbIsEmptyExpression ..::.Accept 方法 (DbExpressionVisitor)

DbIsEmptyExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbIsEmptyExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsEmptyExpression 类
DbIsEmptyExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbIsEmptyExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbIsEmptyExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbIsEmptyExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsEmptyExpression 类
DbIsEmptyExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbIsEmptyExpression 属性

DbIsEmptyExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsEmptyExpression 类

DbIsEmptyExpression 类型公开以下成员。

名称 说明
页首

参考

DbIsEmptyExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsNullExpression 类

DbIsNullExpression 类
成员

表示应用于单个参数的 null 确定。此类不能继承。 表示应用于单个参数的 null 确定。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbIsNullExpression _
    Inherits DbUnaryExpression
public sealed class DbIsNullExpression : DbUnaryExpression
public ref class DbIsNullExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbIsNullExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbIsNullExpressionDbIsNullExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsNullExpression 成员
System.Data.Common.CommandTrees 命名空间


DbIsNullExpression 成员

DbIsNullExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsNullExpression 类

表示应用于单个参数的 null 确定。此类不能继承。 表示应用于单个参数的 null 确定。此类不能继承。

DbIsNullExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbIsNullExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsNullExpression 方法

DbIsNullExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsNullExpression 类

DbIsNullExpression 类型公开以下成员。

名称 说明
页首

参考

DbIsNullExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsNullExpression ..::.Accept 方法

DbIsNullExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsNullExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbIsNullExpression 类
DbIsNullExpression 成员
System.Data.Common.CommandTrees 命名空间


DbIsNullExpression ..::.Accept 方法 (DbExpressionVisitor)

DbIsNullExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbIsNullExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsNullExpression 类
DbIsNullExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbIsNullExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbIsNullExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbIsNullExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsNullExpression 类
DbIsNullExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbIsNullExpression 属性

DbIsNullExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsNullExpression 类

DbIsNullExpression 类型公开以下成员。

名称 说明
页首

参考

DbIsNullExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsOfExpression 类

DbIsOfExpression 类
成员

表示将单个参数与指定类型进行比较的类型比较。无法继承此类。 表示将单个参数与指定类型进行比较的类型比较。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbIsOfExpression _
    Inherits DbUnaryExpression
public sealed class DbIsOfExpression : DbUnaryExpression
public ref class DbIsOfExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbIsOfExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbIsOfExpressionDbIsOfExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsOfExpression 成员
System.Data.Common.CommandTrees 命名空间


DbIsOfExpression 成员

DbIsOfExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsOfExpression 类

表示将单个参数与指定类型进行比较的类型比较。无法继承此类。 表示将单个参数与指定类型进行比较的类型比较。无法继承此类。

DbIsOfExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbIsOfExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsOfExpression 方法

DbIsOfExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsOfExpression 类

DbIsOfExpression 类型公开以下成员。

名称 说明
页首

参考

DbIsOfExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsOfExpression ..::.Accept 方法

DbIsOfExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsOfExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbIsOfExpression 类
DbIsOfExpression 成员
System.Data.Common.CommandTrees 命名空间


DbIsOfExpression ..::.Accept 方法 (DbExpressionVisitor)

DbIsOfExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbIsOfExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsOfExpression 类
DbIsOfExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbIsOfExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbIsOfExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbIsOfExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsOfExpression 类
DbIsOfExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbIsOfExpression 属性

DbIsOfExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbIsOfExpression 类

DbIsOfExpression 类型公开以下成员。

名称 说明
页首

参考

DbIsOfExpression 类
System.Data.Common.CommandTrees 命名空间


DbIsOfExpression ..::.OfType 属性

DbIsOfExpression
.
.
::
.
OfType 属性
DbIsOfExpression 类

获取应与参数的类型元数据进行比较的类型元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property OfType As TypeUsage
    Get
public TypeUsage OfType { get; }
public:
property TypeUsage^ OfType {
    TypeUsage^ get ();
}
member OfType : TypeUsage

属性值

类型： System.Data.Metadata.Edm TypeUsage
应与参数的类型元数据进行比较的类型元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbIsOfExpression 类
DbIsOfExpression 成员
System.Data.Common.CommandTrees 命名空间


DbJoinExpression 类

DbJoinExpression 类
成员

表示在指定联接条件下给定的集合参数之间的内部联接、左外部联接或完全外部联接操作。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbJoinExpression _
    Inherits DbExpression
public sealed class DbJoinExpression : DbExpression
public ref class DbJoinExpression sealed : public DbExpression
[<SealedAttribute>]
type DbJoinExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbJoinExpressionDbJoinExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbJoinExpression 成员
System.Data.Common.CommandTrees 命名空间


DbJoinExpression 成员

DbJoinExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbJoinExpression 类

表示在指定联接条件下给定的集合参数之间的内部联接、左外部联接或完全外部联接操作。

DbJoinExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbJoinExpression 类
System.Data.Common.CommandTrees 命名空间


DbJoinExpression 方法

DbJoinExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbJoinExpression 类

DbJoinExpression 类型公开以下成员。

名称 说明
页首

参考

DbJoinExpression 类
System.Data.Common.CommandTrees 命名空间


DbJoinExpression ..::.Accept 方法

DbJoinExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbJoinExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbJoinExpression 类
DbJoinExpression 成员
System.Data.Common.CommandTrees 命名空间


DbJoinExpression ..::.Accept 方法 (DbExpressionVisitor)

DbJoinExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbJoinExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbJoinExpression 类
DbJoinExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbJoinExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbJoinExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbJoinExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbJoinExpression 类
DbJoinExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbJoinExpression 属性

DbJoinExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbJoinExpression 类

DbJoinExpression 类型公开以下成员。

名称 说明
页首

参考

DbJoinExpression 类
System.Data.Common.CommandTrees 命名空间


DbJoinExpression ..::.JoinCondition 属性

DbJoinExpression
.
.
::
.
JoinCondition 属性
DbJoinExpression 类

获取或设置要应用的联接条件。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property JoinCondition As DbExpression
    Get
public DbExpression JoinCondition { get; }
public:
property DbExpression^ JoinCondition {
    DbExpression^ get ();
}
member JoinCondition : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
要应用的联接条件。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbJoinExpression 的命令目录树没有关联，或者其结果类型不是 Boolean 类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbJoinExpression 类
DbJoinExpression 成员
System.Data.Common.CommandTrees 命名空间


DbJoinExpression ..::.Left 属性

DbJoinExpression
.
.
::
.
Left 属性
DbJoinExpression 类

获取提供左侧输入的 DbExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Left As DbExpressionBinding
    Get
public DbExpressionBinding Left { get; }
public:
property DbExpressionBinding^ Left {
    DbExpressionBinding^ get ();
}
member Left : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
提供左侧输入的 DbExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbJoinExpression 类
DbJoinExpression 成员
System.Data.Common.CommandTrees 命名空间


DbJoinExpression ..::.Right 属性

DbJoinExpression
.
.
::
.
Right 属性
DbJoinExpression 类

获取提供右侧输入的 DbExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Right As DbExpressionBinding
    Get
public DbExpressionBinding Right { get; }
public:
property DbExpressionBinding^ Right {
    DbExpressionBinding^ get ();
}
member Right : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
提供右侧输入的 DbExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbJoinExpression 类
DbJoinExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLambda 类

DbLambda 类
成员

表示一个 lambda 函数，可以调用此函数以生成 DbLambdaExpression。此类不能被继承。 表示一个 lambda 函数，可以调用此函数以生成 DbLambdaExpression。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbLambda
public sealed class DbLambda
public ref class DbLambda sealed
[<SealedAttribute>]
type DbLambda =  class end

DbExpressionBuilder 类中的静态帮助器方法使构造 DbExpression 对象更容易。有关更多信息，请参见 。 DbExpressionBuilder 类中的静态帮助器方法使构造 DbExpression 对象更容易。有关更多信息，请参见 。

Lambda()()().

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbLambdaDbLambda
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbLambda 成员
System.Data.Common.CommandTrees 命名空间


DbLambda 成员

DbLambda 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLambda 类

表示一个 lambda 函数，可以调用此函数以生成 DbLambdaExpression。此类不能被继承。 表示一个 lambda 函数，可以调用此函数以生成 DbLambdaExpression。此类不能被继承。

DbLambda 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbLambda 类
System.Data.Common.CommandTrees 命名空间


DbLambda 方法

DbLambda 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLambda 类

DbLambda 类型公开以下成员。

名称 说明
页首

参考

DbLambda 类
System.Data.Common.CommandTrees 命名空间


DbLambda 属性

DbLambda 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLambda 类

DbLambda 类型公开以下成员。

名称 说明
页首

参考

DbLambda 类
System.Data.Common.CommandTrees 命名空间


DbLambda ..::.Body 属性

DbLambda
.
.
::
.
Body 属性
DbLambda 类

获取 lambda 表达式的主体。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Body As DbExpression
    Get
public DbExpression Body { get; }
public:
property DbExpression^ Body {
    DbExpression^ get ();
}
member Body : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
一个 DbExpression，表示 lambda 函数的主体。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbLambda 类
DbLambda 成员
System.Data.Common.CommandTrees 命名空间


DbLambda ..::.Variables 属性

DbLambda
.
.
::
.
Variables 属性
DbLambda 类

获取 lambda 表达式的参数。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Variables As IList(Of DbVariableReferenceExpression)
    Get
public IList<DbVariableReferenceExpression> Variables { get; }
public:
property IList<DbVariableReferenceExpression^>^ Variables {
    IList<DbVariableReferenceExpression^>^ get ();
}
member Variables : IList<DbVariableReferenceExpression>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbVariableReferenceExpression
>
)
>
)

用 DbVariableReferenceExpression 对象表示的 lambda 函数参数的列表。

表示可以在 Body 表达式中使用的 lambda 函数变量的 DbVariableReferenceExpression 对象的列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbLambda 类
DbLambda 成员
System.Data.Common.CommandTrees 命名空间


DbLambdaExpression 类

DbLambdaExpression 类
成员

允许对由 DbExpression 对象表示的参数应用 lambda 函数。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbLambdaExpression _
    Inherits DbExpression
public sealed class DbLambdaExpression : DbExpression
public ref class DbLambdaExpression sealed : public DbExpression
[<SealedAttribute>]
type DbLambdaExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbLambdaExpressionDbLambdaExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbLambdaExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLambdaExpression 成员

DbLambdaExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLambdaExpression 类

允许对由 DbExpression 对象表示的参数应用 lambda 函数。

DbLambdaExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbLambdaExpression 类
System.Data.Common.CommandTrees 命名空间


DbLambdaExpression 方法

DbLambdaExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLambdaExpression 类

DbLambdaExpression 类型公开以下成员。

名称 说明
页首

参考

DbLambdaExpression 类
System.Data.Common.CommandTrees 命名空间


DbLambdaExpression ..::.Accept 方法

DbLambdaExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLambdaExpression 类

适用于生成特定类型结果值的表达式访问者的访问者模式方法。

名称 说明
页首

参考

DbLambdaExpression 类
DbLambdaExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLambdaExpression ..::.Accept 方法 (DbExpressionVisitor)

DbLambdaExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbLambdaExpression 类

适用于不生成结果值的表达式访问者的访问者模式方法。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 null

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbLambdaExpression 类
DbLambdaExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbLambdaExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbLambdaExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbLambdaExpression 类

适用于生成特定类型结果值的表达式访问者的访问者模式方法。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成 TResultType 类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
表达式访问者生成的结果的类型。
异常 | 条件
ArgumentNullException | visitor 为 null

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbLambdaExpression 类
DbLambdaExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbLambdaExpression 属性

DbLambdaExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLambdaExpression 类

DbLambdaExpression 类型公开以下成员。

名称 说明
页首

参考

DbLambdaExpression 类
System.Data.Common.CommandTrees 命名空间


DbLambdaExpression ..::.Arguments 属性

DbLambdaExpression
.
.
::
.
Arguments 属性
DbLambdaExpression 类

获取 DbExpression 列表，该列表提供应将 Lambda 函数应用于的参数。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Arguments As IList(Of DbExpression)
    Get
public IList<DbExpression> Arguments { get; }
public:
property IList<DbExpression^>^ Arguments {
    IList<DbExpression^>^ get ();
}
member Arguments : IList<DbExpression>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbExpression
>
)
>
)

DbExpression 列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbLambdaExpression 类
DbLambdaExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLambdaExpression ..::.Lambda 属性

DbLambdaExpression
.
.
::
.
Lambda 属性
DbLambdaExpression 类

获取 DbLambda，它表示此表达式应用的 Lambda 函数。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Lambda As DbLambda
    Get
public DbLambda Lambda { get; }
public:
property DbLambda^ Lambda {
    DbLambda^ get ();
}
member Lambda : DbLambda

属性值

类型： System.Data.Common.CommandTrees DbLambda
DbLambda，它表示此表达式应用的 Lambda 函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbLambdaExpression 类
DbLambdaExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLikeExpression 类

DbLikeExpression 类
成员

表示与带有可选转义字符串的指定模式进行比较的字符串比较。无法继承此类。 表示与带有可选转义字符串的指定模式进行比较的字符串比较。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbLikeExpression _
    Inherits DbExpression
public sealed class DbLikeExpression : DbExpression
public ref class DbLikeExpression sealed : public DbExpression
[<SealedAttribute>]
type DbLikeExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbLikeExpressionDbLikeExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLikeExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLikeExpression 成员

DbLikeExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLikeExpression 类

表示与带有可选转义字符串的指定模式进行比较的字符串比较。无法继承此类。 表示与带有可选转义字符串的指定模式进行比较的字符串比较。无法继承此类。

DbLikeExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbLikeExpression 类
System.Data.Common.CommandTrees 命名空间


DbLikeExpression 方法

DbLikeExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLikeExpression 类

DbLikeExpression 类型公开以下成员。

名称 说明
页首

参考

DbLikeExpression 类
System.Data.Common.CommandTrees 命名空间


DbLikeExpression ..::.Accept 方法

DbLikeExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLikeExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbLikeExpression 类
DbLikeExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLikeExpression ..::.Accept 方法 (DbExpressionVisitor)

DbLikeExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbLikeExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLikeExpression 类
DbLikeExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbLikeExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbLikeExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbLikeExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLikeExpression 类
DbLikeExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbLikeExpression 属性

DbLikeExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLikeExpression 类

DbLikeExpression 类型公开以下成员。

名称 说明
页首

参考

DbLikeExpression 类
System.Data.Common.CommandTrees 命名空间


DbLikeExpression ..::.Argument 属性

DbLikeExpression
.
.
::
.
Argument 属性
DbLikeExpression 类

获取或设置一个表达式，该表达式指定要与给定模式比较的字符串。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Argument As DbExpression
    Get
public DbExpression Argument { get; }
public:
property DbExpression^ Argument {
    DbExpression^ get ();
}
member Argument : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
一个表达式，指定要与给定模式比较的字符串。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbLikeExpression 的命令目录树没有关联，或者其结果类型不是字符串类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLikeExpression 类
DbLikeExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLikeExpression ..::.Escape 属性

DbLikeExpression
.
.
::
.
Escape 属性
DbLikeExpression 类

获取或设置一个表达式，该表达式提供用于比较的可选转义字符串。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Escape As DbExpression
    Get
public DbExpression Escape { get; }
public:
property DbExpression^ Escape {
    DbExpression^ get ();
}
member Escape : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
一个表达式，它提供用于比较的可选转义字符串。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbLikeExpression 的命令目录树没有关联，或者其结果类型不是字符串类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLikeExpression 类
DbLikeExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLikeExpression ..::.Pattern 属性

DbLikeExpression
.
.
::
.
Pattern 属性
DbLikeExpression 类

获取或设置一个表达式，该表达式指定应与给定字符串比较的模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Pattern As DbExpression
    Get
public DbExpression Pattern { get; }
public:
property DbExpression^ Pattern {
    DbExpression^ get ();
}
member Pattern : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
一个表达式，它指定应与给定字符串比较的模式。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbLikeExpression 的命令目录树没有关联，或者其结果类型不是字符串类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLikeExpression 类
DbLikeExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLimitExpression 类

DbLimitExpression 类
成员

表示将参数集合中的元素个数限制为指定限制值的限制。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbLimitExpression _
    Inherits DbExpression
public sealed class DbLimitExpression : DbExpression
public ref class DbLimitExpression sealed : public DbExpression
[<SealedAttribute>]
type DbLimitExpression =
    class
        inherit DbExpression
    end

DbLimitExpression 可应用于任何集合结果类型的 DbExpression，包括 DbSkipExpression。DbLimitExpression 提供 Top 操作的等效功能。它不要求对其输入执行排序操作。它具有两个 Expression 属性 Argument 和 Limit，分别指定要返回的集合和行数。DbLimitExpression 还具有 BooleanWithTies 属性，用于控制是否返回与最后一行等值的行。WithTies 默认为 false。 DbLimitExpression 可应用于任何集合结果类型的 DbExpression，包括 DbSkipExpression。DbLimitExpression 提供 Top 操作的等效功能。它不要求对其输入执行排序操作。它具有两个 Expression 属性 Argument 和 Limit，分别指定要返回的集合和行数。DbLimitExpression 还具有 BooleanWithTies 属性，用于控制是否返回与最后一行等值的行。WithTies 默认为 false。 DbLimitExpression 可应用于任何集合结果类型的 DbExpression，包括 DbSkipExpression。DbLimitExpression 提供 Top 操作的等效功能。它不要求对其输入执行排序操作。它具有两个 Expression 属性 Argument 和 Limit，分别指定要返回的集合和行数。DbLimitExpression 还具有 BooleanWithTies 属性，用于控制是否返回与最后一行等值的行。WithTies 默认为 false。 DbLimitExpression 可应用于任何集合结果类型的 DbExpression，包括 DbSkipExpression。DbLimitExpression 提供 Top 操作的等效功能。它不要求对其输入执行排序操作。它具有两个 Expression 属性 Argument 和 Limit，分别指定要返回的集合和行数。DbLimitExpression 还具有 BooleanWithTies 属性，用于控制是否返回与最后一行等值的行。WithTies 默认为 false。 DbLimitExpression 可应用于任何集合结果类型的 DbExpression，包括 DbSkipExpression。DbLimitExpression 提供 Top 操作的等效功能。它不要求对其输入执行排序操作。它具有两个 Expression 属性 Argument 和 Limit，分别指定要返回的集合和行数。DbLimitExpression 还具有 BooleanWithTies 属性，用于控制是否返回与最后一行等值的行。WithTies 默认为 false。 DbLimitExpression 可应用于任何集合结果类型的 DbExpression，包括 DbSkipExpression。DbLimitExpression 提供 Top 操作的等效功能。它不要求对其输入执行排序操作。它具有两个 Expression 属性 Argument 和 Limit，分别指定要返回的集合和行数。DbLimitExpression 还具有 BooleanWithTies 属性，用于控制是否返回与最后一行等值的行。WithTies 默认为 false。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbLimitExpressionDbLimitExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLimitExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLimitExpression 成员

DbLimitExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLimitExpression 类

表示将参数集合中的元素个数限制为指定限制值的限制。

DbLimitExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbLimitExpression 类
System.Data.Common.CommandTrees 命名空间


DbLimitExpression 方法

DbLimitExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLimitExpression 类

DbLimitExpression 类型公开以下成员。

名称 说明
页首

参考

DbLimitExpression 类
System.Data.Common.CommandTrees 命名空间


DbLimitExpression ..::.Accept 方法

DbLimitExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLimitExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbLimitExpression 类
DbLimitExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLimitExpression ..::.Accept 方法 (DbExpressionVisitor)

DbLimitExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbLimitExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLimitExpression 类
DbLimitExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbLimitExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbLimitExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbLimitExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLimitExpression 类
DbLimitExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbLimitExpression 属性

DbLimitExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbLimitExpression 类

DbLimitExpression 类型公开以下成员。

名称 说明
页首

参考

DbLimitExpression 类
System.Data.Common.CommandTrees 命名空间


DbLimitExpression ..::.Argument 属性

DbLimitExpression
.
.
::
.
Argument 属性
DbLimitExpression 类

获取或设置指定输入集合的表达式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Argument As DbExpression
    Get
public DbExpression Argument { get; }
public:
property DbExpression^ Argument {
    DbExpression^ get ();
}
member Argument : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
指定输入集合的表达式。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbLimitExpression 的命令目录树没有关联，或者其结果类型不是集合类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLimitExpression 类
DbLimitExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLimitExpression ..::.Limit 属性

DbLimitExpression
.
.
::
.
Limit 属性
DbLimitExpression 类

获取或设置一个表达式，该表达式指定对从输入集合中返回的元素个数的限制。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Limit As DbExpression
    Get
public DbExpression Limit { get; }
public:
property DbExpression^ Limit {
    DbExpression^ get ();
}
member Limit : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
一个表达式，该表达式指定对从输入集合中返回的元素个数的限制。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbLimitExpression 的命令目录树没有关联，或者不是 DbConstantExpression，也不是 DbParameterReferenceExpression，或者其结果类型不等于或不可提升为 64 位整数类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLimitExpression 类
DbLimitExpression 成员
System.Data.Common.CommandTrees 命名空间


DbLimitExpression ..::.WithTies 属性

DbLimitExpression
.
.
::
.
WithTies 属性
DbLimitExpression 类

获取限制操作是否将包含等值结果。如果包含等值结果，则可能产生比 Limit 值所指定的数量更多的结果。 获取限制操作是否将包含等值结果。如果包含等值结果，则可能产生比 Limit 值所指定的数量更多的结果。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property WithTies As Boolean
    Get
public bool WithTies { get; }
public:
property bool WithTies {
    bool get ();
}
member WithTies : bool

属性值

类型： System Boolean
如果限制操作将包含等值结果，则为 true；否则为 false。默认值为 false。 如果限制操作将包含等值结果，则为 true；否则为 false。默认值为 false。

WithTies 属性控制是否返回与最后一行等值的行。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbLimitExpression 类
DbLimitExpression 成员
System.Data.Common.CommandTrees 命名空间


DbModificationClause 类

DbModificationClause 类
成员

在插入或更新修改操作中指定单个子句。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbModificationClause
public abstract class DbModificationClause
public ref class DbModificationClause abstract
[<AbstractClassAttribute>]
type DbModificationClause =  class end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbModificationClauseDbModificationClause

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbModificationClause 成员
System.Data.Common.CommandTrees 命名空间
SetClauses
SetClauses


DbModificationClause 成员

DbModificationClause 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbModificationClause 类

在插入或更新修改操作中指定单个子句。

DbModificationClause 类型公开以下成员。

名称 说明
页首

参考

DbModificationClause 类
System.Data.Common.CommandTrees 命名空间


DbModificationClause 方法

DbModificationClause 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbModificationClause 类

DbModificationClause 类型公开以下成员。

名称 说明
页首

参考

DbModificationClause 类
System.Data.Common.CommandTrees 命名空间


DbModificationCommandTree 类

DbModificationCommandTree 类
成员

表示以命令目录树表示的数据操作语言 (DML) 操作。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbModificationCommandTree _
    Inherits DbCommandTree
public abstract class DbModificationCommandTree : DbCommandTree
public ref class DbModificationCommandTree abstract : public DbCommandTree
[<AbstractClassAttribute>]
type DbModificationCommandTree =
    class
        inherit DbCommandTree
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbModificationCommandTreeDbModificationCommandTree

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbModificationCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbModificationCommandTree 成员

DbModificationCommandTree 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbModificationCommandTree 类

表示以命令目录树表示的数据操作语言 (DML) 操作。

DbModificationCommandTree 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbModificationCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbModificationCommandTree 方法

DbModificationCommandTree 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbModificationCommandTree 类

DbModificationCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbModificationCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbModificationCommandTree 属性

DbModificationCommandTree 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbModificationCommandTree 类

DbModificationCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbModificationCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbModificationCommandTree ..::.Target 属性

DbModificationCommandTree
.
.
::
.
Target 属性
DbModificationCommandTree 类

获取指定数据操作语言 (DML) 操作的目标表的 DbExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Target As DbExpressionBinding
    Get
public DbExpressionBinding Target { get; }
public:
property DbExpressionBinding^ Target {
    DbExpressionBinding^ get ();
}
member Target : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
指定 DML 操作的目标表的 DbExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbModificationCommandTree 类
DbModificationCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbNewInstanceExpression 类

DbNewInstanceExpression 类
成员

表示给定类型的新实例的构造，包括集和记录类型。无法继承此类。 表示给定类型的新实例的构造，包括集和记录类型。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbNewInstanceExpression _
    Inherits DbExpression
public sealed class DbNewInstanceExpression : DbExpression
public ref class DbNewInstanceExpression sealed : public DbExpression
[<SealedAttribute>]
type DbNewInstanceExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbNewInstanceExpressionDbNewInstanceExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNewInstanceExpression 成员
System.Data.Common.CommandTrees 命名空间


DbNewInstanceExpression 成员

DbNewInstanceExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNewInstanceExpression 类

表示给定类型的新实例的构造，包括集和记录类型。无法继承此类。 表示给定类型的新实例的构造，包括集和记录类型。无法继承此类。

DbNewInstanceExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbNewInstanceExpression 类
System.Data.Common.CommandTrees 命名空间


DbNewInstanceExpression 方法

DbNewInstanceExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNewInstanceExpression 类

DbNewInstanceExpression 类型公开以下成员。

名称 说明
页首

参考

DbNewInstanceExpression 类
System.Data.Common.CommandTrees 命名空间


DbNewInstanceExpression ..::.Accept 方法

DbNewInstanceExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNewInstanceExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbNewInstanceExpression 类
DbNewInstanceExpression 成员
System.Data.Common.CommandTrees 命名空间


DbNewInstanceExpression ..::.Accept 方法 (DbExpressionVisitor)

DbNewInstanceExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbNewInstanceExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNewInstanceExpression 类
DbNewInstanceExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbNewInstanceExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbNewInstanceExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbNewInstanceExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNewInstanceExpression 类
DbNewInstanceExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbNewInstanceExpression 属性

DbNewInstanceExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNewInstanceExpression 类

DbNewInstanceExpression 类型公开以下成员。

名称 说明
页首

参考

DbNewInstanceExpression 类
System.Data.Common.CommandTrees 命名空间


DbNewInstanceExpression ..::.Arguments 属性

DbNewInstanceExpression
.
.
::
.
Arguments 属性
DbNewInstanceExpression 类

获取为新实例提供属性/列值或集元素的 DbExpression 列表。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Arguments As IList(Of DbExpression)
    Get
public IList<DbExpression> Arguments { get; }
public:
property IList<DbExpression^>^ Arguments {
    IList<DbExpression^>^ get ();
}
member Arguments : IList<DbExpression>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbExpression
>
)
>
)

为新实例提供属性/列值或集元素的 DbExpression 列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNewInstanceExpression 类
DbNewInstanceExpression 成员
System.Data.Common.CommandTrees 命名空间


DbNotExpression 类

DbNotExpression 类
成员

表示单个 Boolean 参数的逻辑“非”。此类不能被继承。 表示单个 Boolean 参数的逻辑“非”。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbNotExpression _
    Inherits DbUnaryExpression
public sealed class DbNotExpression : DbUnaryExpression
public ref class DbNotExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbNotExpression =
    class
        inherit DbUnaryExpression
    end

DbNotExpression 要求其参数为 Boolean 结果类型。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbNotExpressionDbNotExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNotExpression 成员
System.Data.Common.CommandTrees 命名空间


DbNotExpression 成员

DbNotExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNotExpression 类

表示单个 Boolean 参数的逻辑“非”。此类不能被继承。 表示单个 Boolean 参数的逻辑“非”。此类不能被继承。

DbNotExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbNotExpression 类
System.Data.Common.CommandTrees 命名空间


DbNotExpression 方法

DbNotExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNotExpression 类

DbNotExpression 类型公开以下成员。

名称 说明
页首

参考

DbNotExpression 类
System.Data.Common.CommandTrees 命名空间


DbNotExpression ..::.Accept 方法

DbNotExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNotExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbNotExpression 类
DbNotExpression 成员
System.Data.Common.CommandTrees 命名空间


DbNotExpression ..::.Accept 方法 (DbExpressionVisitor)

DbNotExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbNotExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNotExpression 类
DbNotExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbNotExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbNotExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbNotExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNotExpression 类
DbNotExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbNotExpression 属性

DbNotExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNotExpression 类

DbNotExpression 类型公开以下成员。

名称 说明
页首

参考

DbNotExpression 类
System.Data.Common.CommandTrees 命名空间


DbNullExpression 类

DbNullExpression 类
成员

表示对类型化 null 文本的引用。此类不能继承。 表示对类型化 null 文本的引用。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbNullExpression _
    Inherits DbExpression
public sealed class DbNullExpression : DbExpression
public ref class DbNullExpression sealed : public DbExpression
[<SealedAttribute>]
type DbNullExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbNullExpressionDbNullExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNullExpression 成员
System.Data.Common.CommandTrees 命名空间


DbNullExpression 成员

DbNullExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNullExpression 类

表示对类型化 null 文本的引用。此类不能继承。 表示对类型化 null 文本的引用。此类不能继承。

DbNullExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbNullExpression 类
System.Data.Common.CommandTrees 命名空间


DbNullExpression 方法

DbNullExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNullExpression 类

DbNullExpression 类型公开以下成员。

名称 说明
页首

参考

DbNullExpression 类
System.Data.Common.CommandTrees 命名空间


DbNullExpression ..::.Accept 方法

DbNullExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNullExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbNullExpression 类
DbNullExpression 成员
System.Data.Common.CommandTrees 命名空间


DbNullExpression ..::.Accept 方法 (DbExpressionVisitor)

DbNullExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbNullExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNullExpression 类
DbNullExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbNullExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbNullExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbNullExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbNullExpression 类
DbNullExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbNullExpression 属性

DbNullExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbNullExpression 类

DbNullExpression 类型公开以下成员。

名称 说明
页首

参考

DbNullExpression 类
System.Data.Common.CommandTrees 命名空间


DbOfTypeExpression 类

DbOfTypeExpression 类
成员

表示根据给定集参数检索的指定类型的元素。无法继承此类。 表示根据给定集参数检索的指定类型的元素。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbOfTypeExpression _
    Inherits DbUnaryExpression
public sealed class DbOfTypeExpression : DbUnaryExpression
public ref class DbOfTypeExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbOfTypeExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbOfTypeExpressionDbOfTypeExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbOfTypeExpression 成员
System.Data.Common.CommandTrees 命名空间


DbOfTypeExpression 成员

DbOfTypeExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbOfTypeExpression 类

表示根据给定集参数检索的指定类型的元素。无法继承此类。 表示根据给定集参数检索的指定类型的元素。无法继承此类。

DbOfTypeExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbOfTypeExpression 类
System.Data.Common.CommandTrees 命名空间


DbOfTypeExpression 方法

DbOfTypeExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbOfTypeExpression 类

DbOfTypeExpression 类型公开以下成员。

名称 说明
页首

参考

DbOfTypeExpression 类
System.Data.Common.CommandTrees 命名空间


DbOfTypeExpression ..::.Accept 方法

DbOfTypeExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbOfTypeExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbOfTypeExpression 类
DbOfTypeExpression 成员
System.Data.Common.CommandTrees 命名空间


DbOfTypeExpression ..::.Accept 方法 (DbExpressionVisitor)

DbOfTypeExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbOfTypeExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbOfTypeExpression 类
DbOfTypeExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbOfTypeExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbOfTypeExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbOfTypeExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbOfTypeExpression 类
DbOfTypeExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbOfTypeExpression 属性

DbOfTypeExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbOfTypeExpression 类

DbOfTypeExpression 类型公开以下成员。

名称 说明
页首

参考

DbOfTypeExpression 类
System.Data.Common.CommandTrees 命名空间


DbOfTypeExpression ..::.OfType 属性

DbOfTypeExpression
.
.
::
.
OfType 属性
DbOfTypeExpression 类

获取应根据集参数检索的元素类型的元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property OfType As TypeUsage
    Get
public TypeUsage OfType { get; }
public:
property TypeUsage^ OfType {
    TypeUsage^ get ();
}
member OfType : TypeUsage

属性值

类型： System.Data.Metadata.Edm TypeUsage
应根据集参数检索的元素类型的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbOfTypeExpression 类
DbOfTypeExpression 成员
System.Data.Common.CommandTrees 命名空间


DbOrExpression 类

DbOrExpression 类
成员

表示两个 Boolean 参数的逻辑“或”。此类不能被继承。 表示两个 Boolean 参数的逻辑“或”。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbOrExpression _
    Inherits DbBinaryExpression
public sealed class DbOrExpression : DbBinaryExpression
public ref class DbOrExpression sealed : public DbBinaryExpression
[<SealedAttribute>]
type DbOrExpression =
    class
        inherit DbBinaryExpression
    end

DbOrExpression 要求它的两个参数都为 Boolean 结果类型。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbOrExpressionDbOrExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbOrExpression 成员
System.Data.Common.CommandTrees 命名空间


DbOrExpression 成员

DbOrExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbOrExpression 类

表示两个 Boolean 参数的逻辑“或”。此类不能被继承。 表示两个 Boolean 参数的逻辑“或”。此类不能被继承。

DbOrExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbOrExpression 类
System.Data.Common.CommandTrees 命名空间


DbOrExpression 方法

DbOrExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbOrExpression 类

DbOrExpression 类型公开以下成员。

名称 说明
页首

参考

DbOrExpression 类
System.Data.Common.CommandTrees 命名空间


DbOrExpression ..::.Accept 方法

DbOrExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbOrExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbOrExpression 类
DbOrExpression 成员
System.Data.Common.CommandTrees 命名空间


DbOrExpression ..::.Accept 方法 (DbExpressionVisitor)

DbOrExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbOrExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbOrExpression 类
DbOrExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbOrExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbOrExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbOrExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbOrExpression 类
DbOrExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbOrExpression 属性

DbOrExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbOrExpression 类

DbOrExpression 类型公开以下成员。

名称 说明
页首

参考

DbOrExpression 类
System.Data.Common.CommandTrees 命名空间


DbParameterReferenceExpression 类

DbParameterReferenceExpression 类
成员

表示对包含此表达式的命令目录树中所声明的参数的引用。此类不能被继承。 表示对包含此表达式的命令目录树中所声明的参数的引用。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbParameterReferenceExpression _
    Inherits DbExpression
public sealed class DbParameterReferenceExpression : DbExpression
public ref class DbParameterReferenceExpression sealed : public DbExpression
[<SealedAttribute>]
type DbParameterReferenceExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbParameterReferenceExpressionDbParameterReferenceExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbParameterReferenceExpression 成员
System.Data.Common.CommandTrees 命名空间


DbParameterReferenceExpression 成员

DbParameterReferenceExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterReferenceExpression 类

表示对包含此表达式的命令目录树中所声明的参数的引用。此类不能被继承。 表示对包含此表达式的命令目录树中所声明的参数的引用。此类不能被继承。

DbParameterReferenceExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbParameterReferenceExpression 类
System.Data.Common.CommandTrees 命名空间


DbParameterReferenceExpression 方法

DbParameterReferenceExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterReferenceExpression 类

DbParameterReferenceExpression 类型公开以下成员。

名称 说明
页首

参考

DbParameterReferenceExpression 类
System.Data.Common.CommandTrees 命名空间


DbParameterReferenceExpression ..::.Accept 方法

DbParameterReferenceExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterReferenceExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbParameterReferenceExpression 类
DbParameterReferenceExpression 成员
System.Data.Common.CommandTrees 命名空间


DbParameterReferenceExpression ..::.Accept 方法 (DbExpressionVisitor)

DbParameterReferenceExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbParameterReferenceExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbParameterReferenceExpression 类
DbParameterReferenceExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbParameterReferenceExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbParameterReferenceExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbParameterReferenceExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbParameterReferenceExpression 类
DbParameterReferenceExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbParameterReferenceExpression 属性

DbParameterReferenceExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbParameterReferenceExpression 类

DbParameterReferenceExpression 类型公开以下成员。

名称 说明
页首

参考

DbParameterReferenceExpression 类
System.Data.Common.CommandTrees 命名空间


DbParameterReferenceExpression ..::.ParameterName 属性

DbParameterReferenceExpression
.
.
::
.
ParameterName 属性
DbParameterReferenceExpression 类

获取被引用参数的名称。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ParameterName As String
    Get
public string ParameterName { get; }
public:
property String^ ParameterName {
    String^ get ();
}
member ParameterName : string

属性值

类型： System String
被引用参数的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbParameterReferenceExpression 类
DbParameterReferenceExpression 成员
System.Data.Common.CommandTrees 命名空间


DbProjectExpression 类

DbProjectExpression 类
成员

表示给定输入集对指定表达式的投影。此类不能被继承。 表示给定输入集对指定表达式的投影。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbProjectExpression _
    Inherits DbExpression
public sealed class DbProjectExpression : DbExpression
public ref class DbProjectExpression sealed : public DbExpression
[<SealedAttribute>]
type DbProjectExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbProjectExpressionDbProjectExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProjectExpression 成员
System.Data.Common.CommandTrees 命名空间


DbProjectExpression 成员

DbProjectExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProjectExpression 类

表示给定输入集对指定表达式的投影。此类不能被继承。 表示给定输入集对指定表达式的投影。此类不能被继承。

DbProjectExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbProjectExpression 类
System.Data.Common.CommandTrees 命名空间


DbProjectExpression 方法

DbProjectExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProjectExpression 类

DbProjectExpression 类型公开以下成员。

名称 说明
页首

参考

DbProjectExpression 类
System.Data.Common.CommandTrees 命名空间


DbProjectExpression ..::.Accept 方法

DbProjectExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProjectExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbProjectExpression 类
DbProjectExpression 成员
System.Data.Common.CommandTrees 命名空间


DbProjectExpression ..::.Accept 方法 (DbExpressionVisitor)

DbProjectExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbProjectExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProjectExpression 类
DbProjectExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbProjectExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbProjectExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbProjectExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProjectExpression 类
DbProjectExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbProjectExpression 属性

DbProjectExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbProjectExpression 类

DbProjectExpression 类型公开以下成员。

名称 说明
页首

参考

DbProjectExpression 类
System.Data.Common.CommandTrees 命名空间


DbProjectExpression ..::.Input 属性

DbProjectExpression
.
.
::
.
Input 属性
DbProjectExpression 类

获取指定输入集的 DbExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Input As DbExpressionBinding
    Get
public DbExpressionBinding Input { get; }
public:
property DbExpressionBinding^ Input {
    DbExpressionBinding^ get ();
}
member Input : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
指定输入集的 DbExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProjectExpression 类
DbProjectExpression 成员
System.Data.Common.CommandTrees 命名空间


DbProjectExpression ..::.Projection 属性

DbProjectExpression
.
.
::
.
Projection 属性
DbProjectExpression 类

获取或设置定义投影的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Projection As DbExpression
    Get
public DbExpression Projection { get; }
public:
property DbExpression^ Projection {
    DbExpression^ get ();
}
member Projection : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
定义投影的 DbExpression。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbProjectExpression 的命令目录树没有关联，或者其结果类型不等于或不可提升为当前投影的引用类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbProjectExpression 类
DbProjectExpression 成员
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression 类

DbPropertyExpression 类
成员

提供用于检索实例属性的方法和属性。此类不能被继承。 提供用于检索实例属性的方法和属性。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbPropertyExpression _
    Inherits DbExpression
public sealed class DbPropertyExpression : DbExpression
public ref class DbPropertyExpression sealed : public DbExpression
[<SealedAttribute>]
type DbPropertyExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbPropertyExpressionDbPropertyExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbPropertyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression 成员

DbPropertyExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbPropertyExpression 类

提供用于检索实例属性的方法和属性。此类不能被继承。 提供用于检索实例属性的方法和属性。此类不能被继承。

DbPropertyExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbPropertyExpression 类
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression 方法

DbPropertyExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbPropertyExpression 类

DbPropertyExpression 类型公开以下成员。

名称 说明
页首

参考

DbPropertyExpression 类
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression ..::.Accept 方法

DbPropertyExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbPropertyExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbPropertyExpression 类
DbPropertyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression ..::.Accept 方法 (DbExpressionVisitor)

DbPropertyExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbPropertyExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbPropertyExpression 类
DbPropertyExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbPropertyExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbPropertyExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbPropertyExpression 类
DbPropertyExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression ..::.ToKeyValuePair 方法

DbPropertyExpression
.
.
::
.
ToKeyValuePair 方法
DbPropertyExpression 类

基于此属性表达式创建一个新的键/值对。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ToKeyValuePair As KeyValuePair(Of String, DbExpression)
public KeyValuePair<string, DbExpression> ToKeyValuePair()
public:
KeyValuePair<String^, DbExpression^> ToKeyValuePair()
member ToKeyValuePair : unit -> KeyValuePair<string, DbExpression>

返回值

类型： System.Collections.Generic KeyValuePair
<
(Of
<
(
String, DbExpression
>
)
>
)

具有从 DbPropertyExpression 派生的键和值的新键/值对。

在返回的键/值对中，键是被引用的属性的名称的字符串值，而 DbExpression 值是属性的表达式本身。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbPropertyExpression 类
DbPropertyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression 类型转换

DbPropertyExpression 类型转换
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbPropertyExpression 类

DbPropertyExpression 类型公开以下成员。

名称 说明
页首

参考

DbPropertyExpression 类
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression ImplicitWideningImplicitImplicit 转换 (DbPropertyExpression to KeyValuePair <(Of <(String, DbExpression >)>))

DbPropertyExpression
Implicit
Widening
Implicit
Implicit
转换 (DbPropertyExpression to KeyValuePair
<
(Of
<
(
String, DbExpression
>
)
>
)
)
DbPropertyExpression 类

基于此属性表达式创建一个新的键/值对。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Widening Operator CType ( _
    value As DbPropertyExpression _
) As KeyValuePair(Of String, DbExpression)
public static implicit operator KeyValuePair<string, DbExpression> (
    DbPropertyExpression value
)
static implicit operator KeyValuePair<String^, DbExpression^> (
    DbPropertyExpression^ value
)
F# 不支持新转换运算符的声明。

参数

value
类型： System.Data.Common.CommandTrees DbPropertyExpression
此属性表达式。

返回值

类型： System.Collections.Generic KeyValuePair
<
(Of
<
(
String, DbExpression
>
)
>
)

具有从 DbPropertyExpression 派生的键和值的新键/值对。

在返回的键/值对中，键是被引用的属性的名称的字符串值，而 DbExpression 值是属性的表达式本身。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbPropertyExpression 类
DbPropertyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression 属性

DbPropertyExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbPropertyExpression 类

DbPropertyExpression 类型公开以下成员。

名称 说明
页首

参考

DbPropertyExpression 类
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression ..::.Instance 属性

DbPropertyExpression
.
.
::
.
Instance 属性
DbPropertyExpression 类

获取或设置一个 DbExpression，它用于定义应从中检索属性的实例。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Instance As DbExpression
    Get
public DbExpression Instance { get; }
public:
property DbExpression^ Instance {
    DbExpression^ get ();
}
member Instance : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
用于定义应从中检索属性的实例的 DbExpression。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbPropertyExpression 的命令目录树没有关联，或者其结果类型不等于或不可提升为定义该属性的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbPropertyExpression 类
DbPropertyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbPropertyExpression ..::.Property 属性

DbPropertyExpression
.
.
::
.
Property 属性
DbPropertyExpression 类

获取要检索的属性的属性元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Property As EdmMember
    Get
public EdmMember Property { get; }
public:
property EdmMember^ Property {
    EdmMember^ get ();
}
member Property : EdmMember

属性值

类型： System.Data.Metadata.Edm EdmMember
要检索的属性的属性元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbPropertyExpression 类
DbPropertyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbQuantifierExpression 类

DbQuantifierExpression 类
成员

表示对指定输入集的元素执行的指定类型的限定符运算。无法继承此类。 表示对指定输入集的元素执行的指定类型的限定符运算。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbQuantifierExpression _
    Inherits DbExpression
public sealed class DbQuantifierExpression : DbExpression
public ref class DbQuantifierExpression sealed : public DbExpression
[<SealedAttribute>]
type DbQuantifierExpression =
    class
        inherit DbExpression
    end

此类表示 Any 和 All 限定符。Any 和 All 均在 DbExpressionKind 中进行编码。限定符表达式的结果类型总是为 Boolean。 此类表示 Any 和 All 限定符。Any 和 All 均在 DbExpressionKind 中进行编码。限定符表达式的结果类型总是为 Boolean。 此类表示 Any 和 All 限定符。Any 和 All 均在 DbExpressionKind 中进行编码。限定符表达式的结果类型总是为 Boolean。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbQuantifierExpressionDbQuantifierExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbQuantifierExpression 成员
System.Data.Common.CommandTrees 命名空间


DbQuantifierExpression 成员

DbQuantifierExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbQuantifierExpression 类

表示对指定输入集的元素执行的指定类型的限定符运算。无法继承此类。 表示对指定输入集的元素执行的指定类型的限定符运算。无法继承此类。

DbQuantifierExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbQuantifierExpression 类
System.Data.Common.CommandTrees 命名空间


DbQuantifierExpression 方法

DbQuantifierExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbQuantifierExpression 类

DbQuantifierExpression 类型公开以下成员。

名称 说明
页首

参考

DbQuantifierExpression 类
System.Data.Common.CommandTrees 命名空间


DbQuantifierExpression ..::.Accept 方法

DbQuantifierExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbQuantifierExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbQuantifierExpression 类
DbQuantifierExpression 成员
System.Data.Common.CommandTrees 命名空间


DbQuantifierExpression ..::.Accept 方法 (DbExpressionVisitor)

DbQuantifierExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbQuantifierExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbQuantifierExpression 类
DbQuantifierExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbQuantifierExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbQuantifierExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbQuantifierExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbQuantifierExpression 类
DbQuantifierExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbQuantifierExpression 属性

DbQuantifierExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbQuantifierExpression 类

DbQuantifierExpression 类型公开以下成员。

名称 说明
页首

参考

DbQuantifierExpression 类
System.Data.Common.CommandTrees 命名空间


DbQuantifierExpression ..::.Input 属性

DbQuantifierExpression
.
.
::
.
Input 属性
DbQuantifierExpression 类

获取指定输入集的 DbExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Input As DbExpressionBinding
    Get
public DbExpressionBinding Input { get; }
public:
property DbExpressionBinding^ Input {
    DbExpressionBinding^ get ();
}
member Input : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
指定输入集的 DbExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbQuantifierExpression 类
DbQuantifierExpression 成员
System.Data.Common.CommandTrees 命名空间


DbQuantifierExpression ..::.Predicate 属性

DbQuantifierExpression
.
.
::
.
Predicate 属性
DbQuantifierExpression 类

获取或设置应为输入集中的每个元素计算的 Boolean 谓词。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Predicate As DbExpression
    Get
public DbExpression Predicate { get; }
public:
property DbExpression^ Predicate {
    DbExpression^ get ();
}
member Predicate : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
应为输入集中的每个元素计算的 Boolean 谓词。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbQuantifierExpression 的命令目录树没有关联， 或者其结果类型不是 Boolean 类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbQuantifierExpression 类
DbQuantifierExpression 成员
System.Data.Common.CommandTrees 命名空间


DbQueryCommandTree 类

DbQueryCommandTree 类
成员

表示以命令目录树表示的查询操作。此类不能被继承。 表示以命令目录树表示的查询操作。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbQueryCommandTree _
    Inherits DbCommandTree
public sealed class DbQueryCommandTree : DbCommandTree
public ref class DbQueryCommandTree sealed : public DbCommandTree
[<SealedAttribute>]
type DbQueryCommandTree =
    class
        inherit DbCommandTree
    end

DbQueryCommandTree 描述查询。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbQueryCommandTreeDbQueryCommandTree
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbQueryCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbQueryCommandTree 成员

DbQueryCommandTree 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbQueryCommandTree 类

表示以命令目录树表示的查询操作。此类不能被继承。 表示以命令目录树表示的查询操作。此类不能被继承。

DbQueryCommandTree 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbQueryCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbQueryCommandTree 方法

DbQueryCommandTree 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbQueryCommandTree 类

DbQueryCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbQueryCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbQueryCommandTree 属性

DbQueryCommandTree 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbQueryCommandTree 类

DbQueryCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbQueryCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbQueryCommandTree ..::.Query 属性

DbQueryCommandTree
.
.
::
.
Query 属性
DbQueryCommandTree 类

获取用于定义查询操作逻辑的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Query As DbExpression
    Get
public DbExpression Query { get; }
public:
property DbExpression^ Query {
    DbExpression^ get ();
}
member Query : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
定义查询操作逻辑的 DbExpression。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与其他命令目录树关联。

Query 属性描述定义查询的表达式树的根。只有将 Query 属性设置为有效的值，DbCommandTree 的状态才会有效。 Query 属性描述定义查询的表达式树的根。只有将 Query 属性设置为有效的值，DbCommandTree 的状态才会有效。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbQueryCommandTree 类
DbQueryCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbRefExpression 类

DbRefExpression 类
成员

表示对实体集中的特定实例的强类型化引用。无法继承此类。 表示对实体集中的特定实例的强类型化引用。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbRefExpression _
    Inherits DbUnaryExpression
public sealed class DbRefExpression : DbUnaryExpression
public ref class DbRefExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbRefExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbRefExpressionDbRefExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRefExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRefExpression 成员

DbRefExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRefExpression 类

表示对实体集中的特定实例的强类型化引用。无法继承此类。 表示对实体集中的特定实例的强类型化引用。无法继承此类。

DbRefExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbRefExpression 类
System.Data.Common.CommandTrees 命名空间


DbRefExpression 方法

DbRefExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRefExpression 类

DbRefExpression 类型公开以下成员。

名称 说明
页首

参考

DbRefExpression 类
System.Data.Common.CommandTrees 命名空间


DbRefExpression ..::.Accept 方法

DbRefExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRefExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbRefExpression 类
DbRefExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRefExpression ..::.Accept 方法 (DbExpressionVisitor)

DbRefExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbRefExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRefExpression 类
DbRefExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbRefExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbRefExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbRefExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRefExpression 类
DbRefExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbRefExpression 属性

DbRefExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRefExpression 类

DbRefExpression 类型公开以下成员。

名称 说明
页首

参考

DbRefExpression 类
System.Data.Common.CommandTrees 命名空间


DbRefExpression ..::.EntitySet 属性

DbRefExpression
.
.
::
.
EntitySet 属性
DbRefExpression 类

获取包含该实例的实体集的元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property EntitySet As EntitySet
    Get
public EntitySet EntitySet { get; }
public:
property EntitySet^ EntitySet {
    EntitySet^ get ();
}
member EntitySet : EntitySet

属性值

类型： System.Data.Metadata.Edm EntitySet
包含该实例的实体集的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRefExpression 类
DbRefExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRefKeyExpression 类

DbRefKeyExpression 类
成员

表示根据基础引用值对键值（以其结构形式）的检索。此类不能继承。 表示根据基础引用值对键值（以其结构形式）的检索。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbRefKeyExpression _
    Inherits DbUnaryExpression
public sealed class DbRefKeyExpression : DbUnaryExpression
public ref class DbRefKeyExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbRefKeyExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbRefKeyExpressionDbRefKeyExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRefKeyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRefKeyExpression 成员

DbRefKeyExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRefKeyExpression 类

表示根据基础引用值对键值（以其结构形式）的检索。此类不能继承。 表示根据基础引用值对键值（以其结构形式）的检索。此类不能继承。

DbRefKeyExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbRefKeyExpression 类
System.Data.Common.CommandTrees 命名空间


DbRefKeyExpression 方法

DbRefKeyExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRefKeyExpression 类

DbRefKeyExpression 类型公开以下成员。

名称 说明
页首

参考

DbRefKeyExpression 类
System.Data.Common.CommandTrees 命名空间


DbRefKeyExpression ..::.Accept 方法

DbRefKeyExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRefKeyExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbRefKeyExpression 类
DbRefKeyExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRefKeyExpression ..::.Accept 方法 (DbExpressionVisitor)

DbRefKeyExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbRefKeyExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRefKeyExpression 类
DbRefKeyExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbRefKeyExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbRefKeyExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbRefKeyExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRefKeyExpression 类
DbRefKeyExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbRefKeyExpression 属性

DbRefKeyExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRefKeyExpression 类

DbRefKeyExpression 类型公开以下成员。

名称 说明
页首

参考

DbRefKeyExpression 类
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression 类

DbRelationshipNavigationExpression 类
成员

表示关系的导航。无法继承此类。 表示关系的导航。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbRelationshipNavigationExpression _
    Inherits DbExpression
public sealed class DbRelationshipNavigationExpression : DbExpression
public ref class DbRelationshipNavigationExpression sealed : public DbExpression
[<SealedAttribute>]
type DbRelationshipNavigationExpression =
    class
        inherit DbExpression
    end

此表达式的结果是导航关系的结果。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbRelationshipNavigationExpressionDbRelationshipNavigationExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRelationshipNavigationExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression 成员

DbRelationshipNavigationExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRelationshipNavigationExpression 类

表示关系的导航。无法继承此类。 表示关系的导航。无法继承此类。

DbRelationshipNavigationExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbRelationshipNavigationExpression 类
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression 方法

DbRelationshipNavigationExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRelationshipNavigationExpression 类

DbRelationshipNavigationExpression 类型公开以下成员。

名称 说明
页首

参考

DbRelationshipNavigationExpression 类
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression ..::.Accept 方法

DbRelationshipNavigationExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRelationshipNavigationExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbRelationshipNavigationExpression 类
DbRelationshipNavigationExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression ..::.Accept 方法 (DbExpressionVisitor)

DbRelationshipNavigationExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbRelationshipNavigationExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRelationshipNavigationExpression 类
DbRelationshipNavigationExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbRelationshipNavigationExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbRelationshipNavigationExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRelationshipNavigationExpression 类
DbRelationshipNavigationExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression 属性

DbRelationshipNavigationExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbRelationshipNavigationExpression 类

DbRelationshipNavigationExpression 类型公开以下成员。

名称 说明
页首

参考

DbRelationshipNavigationExpression 类
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression ..::.NavigateFrom 属性

DbRelationshipNavigationExpression
.
.
::
.
NavigateFrom 属性
DbRelationshipNavigationExpression 类

获取作为导航起点的关系端的元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property NavigateFrom As RelationshipEndMember
    Get
public RelationshipEndMember NavigateFrom { get; }
public:
property RelationshipEndMember^ NavigateFrom {
    RelationshipEndMember^ get ();
}
member NavigateFrom : RelationshipEndMember

属性值

类型： System.Data.Metadata.Edm RelationshipEndMember
作为导航起点的关系端的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRelationshipNavigationExpression 类
DbRelationshipNavigationExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression ..::.NavigateTo 属性

DbRelationshipNavigationExpression
.
.
::
.
NavigateTo 属性
DbRelationshipNavigationExpression 类

获取作为导航终点的关系端的元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property NavigateTo As RelationshipEndMember
    Get
public RelationshipEndMember NavigateTo { get; }
public:
property RelationshipEndMember^ NavigateTo {
    RelationshipEndMember^ get ();
}
member NavigateTo : RelationshipEndMember

属性值

类型： System.Data.Metadata.Edm RelationshipEndMember
作为导航终点的关系端的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRelationshipNavigationExpression 类
DbRelationshipNavigationExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression ..::.NavigationSource 属性

DbRelationshipNavigationExpression
.
.
::
.
NavigationSource 属性
DbRelationshipNavigationExpression 类

获取或设置一个 DbExpression，该 DbExpression 指定导航的起点，并且必须是对实体实例的引用。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property NavigationSource As DbExpression
    Get
public DbExpression NavigationSource { get; }
public:
property DbExpression^ NavigationSource {
    DbExpression^ get ();
}
member NavigationSource : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
一个 DbExpression，它指定应作为导航起点的源关系端的实例。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbRelationshipNavigationExpression 的命令目录树没有关联，或者其结果类型不等于或不可提升为 NavigateFrom 属性的引用类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRelationshipNavigationExpression 类
DbRelationshipNavigationExpression 成员
System.Data.Common.CommandTrees 命名空间


DbRelationshipNavigationExpression ..::.Relationship 属性

DbRelationshipNavigationExpression
.
.
::
.
Relationship 属性
DbRelationshipNavigationExpression 类

获取发生导航的关系的元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Relationship As RelationshipType
    Get
public RelationshipType Relationship { get; }
public:
property RelationshipType^ Relationship {
    RelationshipType^ get ();
}
member Relationship : RelationshipType

属性值

类型： System.Data.Metadata.Edm RelationshipType
发生导航的关系的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbRelationshipNavigationExpression 类
DbRelationshipNavigationExpression 成员
System.Data.Common.CommandTrees 命名空间


DbScanExpression 类

DbScanExpression 类
成员

表示对 Target 属性所指示的实体集或关系集的扫描。无法继承此类。 表示对 Target 属性所指示的实体集或关系集的扫描。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbScanExpression _
    Inherits DbExpression
public sealed class DbScanExpression : DbExpression
public ref class DbScanExpression sealed : public DbExpression
[<SealedAttribute>]
type DbScanExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbScanExpressionDbScanExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbScanExpression 成员
System.Data.Common.CommandTrees 命名空间


DbScanExpression 成员

DbScanExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbScanExpression 类

表示对 Target 属性所指示的实体集或关系集的扫描。无法继承此类。 表示对 Target 属性所指示的实体集或关系集的扫描。无法继承此类。

DbScanExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbScanExpression 类
System.Data.Common.CommandTrees 命名空间


DbScanExpression 方法

DbScanExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbScanExpression 类

DbScanExpression 类型公开以下成员。

名称 说明
页首

参考

DbScanExpression 类
System.Data.Common.CommandTrees 命名空间


DbScanExpression ..::.Accept 方法

DbScanExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbScanExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbScanExpression 类
DbScanExpression 成员
System.Data.Common.CommandTrees 命名空间


DbScanExpression ..::.Accept 方法 (DbExpressionVisitor)

DbScanExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbScanExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbScanExpression 类
DbScanExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbScanExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbScanExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbScanExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbScanExpression 类
DbScanExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbScanExpression 属性

DbScanExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbScanExpression 类

DbScanExpression 类型公开以下成员。

名称 说明
页首

参考

DbScanExpression 类
System.Data.Common.CommandTrees 命名空间


DbScanExpression ..::.Target 属性

DbScanExpression
.
.
::
.
Target 属性
DbScanExpression 类

获取被引用的实体集或关系集的元数据。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Target As EntitySetBase
    Get
public EntitySetBase Target { get; }
public:
property EntitySetBase^ Target {
    EntitySetBase^ get ();
}
member Target : EntitySetBase

属性值

类型： System.Data.Metadata.Edm EntitySetBase
被引用的实体集或关系集的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbScanExpression 类
DbScanExpression 成员
System.Data.Common.CommandTrees 命名空间


DbSetClause 类

DbSetClause 类
成员

指定在修改操作中用于设置属性值的子句。无法继承此类。 指定在修改操作中用于设置属性值的子句。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbSetClause _
    Inherits DbModificationClause
public sealed class DbSetClause : DbModificationClause
public ref class DbSetClause sealed : public DbModificationClause
[<SealedAttribute>]
type DbSetClause =
    class
        inherit DbModificationClause
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbSetClauseDbSetClause
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSetClause 成员
System.Data.Common.CommandTrees 命名空间


DbSetClause 成员

DbSetClause 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSetClause 类

指定在修改操作中用于设置属性值的子句。无法继承此类。 指定在修改操作中用于设置属性值的子句。无法继承此类。

DbSetClause 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbSetClause 类
System.Data.Common.CommandTrees 命名空间


DbSetClause 方法

DbSetClause 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSetClause 类

DbSetClause 类型公开以下成员。

名称 说明
页首

参考

DbSetClause 类
System.Data.Common.CommandTrees 命名空间


DbSetClause 属性

DbSetClause 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSetClause 类

DbSetClause 类型公开以下成员。

名称 说明
页首

参考

DbSetClause 类
System.Data.Common.CommandTrees 命名空间


DbSetClause ..::.Property 属性

DbSetClause
.
.
::
.
Property 属性
DbSetClause 类

获取指定应更新的属性的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Property As DbExpression
    Get
public DbExpression Property { get; }
public:
property DbExpression^ Property {
    DbExpression^ get ();
}
member Property : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
指定应更新的属性的 DbExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSetClause 类
DbSetClause 成员
System.Data.Common.CommandTrees 命名空间


DbSetClause ..::.Value 属性

DbSetClause
.
.
::
.
Value 属性
DbSetClause 类

获取指定属性的更新值的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Value As DbExpression
    Get
public DbExpression Value { get; }
public:
property DbExpression^ Value {
    DbExpression^ get ();
}
member Value : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
指定属性的更新值的 DbExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSetClause 类
DbSetClause 成员
System.Data.Common.CommandTrees 命名空间


DbSkipExpression 类

DbSkipExpression 类
成员

跳过指定数量的输入集元素。只有在输入集合已按排序键指定的顺序进行排序之后，才能使用 DbSkipExpression。 跳过指定数量的输入集元素。只有在输入集合已按排序键指定的顺序进行排序之后，才能使用 DbSkipExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbSkipExpression _
    Inherits DbExpression
public sealed class DbSkipExpression : DbExpression
public ref class DbSkipExpression sealed : public DbExpression
[<SealedAttribute>]
type DbSkipExpression =
    class
        inherit DbExpression
    end

DbSkipExpression 要求其输入集合已经排序。排序顺序表示为 SortOrder 属性。SortOrder 是 DbSortClause 对象的列表。 DbSkipExpression 要求其输入集合已经排序。排序顺序表示为 SortOrder 属性。SortOrder 是 DbSortClause 对象的列表。 DbSkipExpression 要求其输入集合已经排序。排序顺序表示为 SortOrder 属性。SortOrder 是 DbSortClause 对象的列表。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbSkipExpressionDbSkipExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSkipExpression 成员
System.Data.Common.CommandTrees 命名空间


DbSkipExpression 成员

DbSkipExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSkipExpression 类

跳过指定数量的输入集元素。只有在输入集合已按排序键指定的顺序进行排序之后，才能使用 DbSkipExpression。 跳过指定数量的输入集元素。只有在输入集合已按排序键指定的顺序进行排序之后，才能使用 DbSkipExpression。

DbSkipExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbSkipExpression 类
System.Data.Common.CommandTrees 命名空间


DbSkipExpression 方法

DbSkipExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSkipExpression 类

DbSkipExpression 类型公开以下成员。

名称 说明
页首

参考

DbSkipExpression 类
System.Data.Common.CommandTrees 命名空间


DbSkipExpression ..::.Accept 方法

DbSkipExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSkipExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbSkipExpression 类
DbSkipExpression 成员
System.Data.Common.CommandTrees 命名空间


DbSkipExpression ..::.Accept 方法 (DbExpressionVisitor)

DbSkipExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbSkipExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSkipExpression 类
DbSkipExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbSkipExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbSkipExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbSkipExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSkipExpression 类
DbSkipExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbSkipExpression 属性

DbSkipExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSkipExpression 类

DbSkipExpression 类型公开以下成员。

名称 说明
页首

参考

DbSkipExpression 类
System.Data.Common.CommandTrees 命名空间


DbSkipExpression ..::.Count 属性

DbSkipExpression
.
.
::
.
Count 属性
DbSkipExpression 类

获取或设置一个表达式，该表达式指定要在输入集合中跳过的元素个数。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Count As DbExpression
    Get
public DbExpression Count { get; }
public:
property DbExpression^ Count {
    DbExpression^ get ();
}
member Count : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
一个表达式，它指定要在输入集合中跳过的元素个数。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbSkipExpression 的命令目录树没有关联；表达式不是 DbConstantExpression，也不是 DbParameterReferenceExpression； 或者表达式的结果类型不等于或不可提升为 64 位整数类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSkipExpression 类
DbSkipExpression 成员
System.Data.Common.CommandTrees 命名空间


DbSkipExpression ..::.Input 属性

DbSkipExpression
.
.
::
.
Input 属性
DbSkipExpression 类

获取指定输入集的 DbExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Input As DbExpressionBinding
    Get
public DbExpressionBinding Input { get; }
public:
property DbExpressionBinding^ Input {
    DbExpressionBinding^ get ();
}
member Input : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
指定输入集的 DbExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSkipExpression 类
DbSkipExpression 成员
System.Data.Common.CommandTrees 命名空间


DbSkipExpression ..::.SortOrder 属性

DbSkipExpression
.
.
::
.
SortOrder 属性
DbSkipExpression 类

获取定义排序顺序的 DbSortClause 列表。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property SortOrder As IList(Of DbSortClause)
    Get
public IList<DbSortClause> SortOrder { get; }
public:
property IList<DbSortClause^>^ SortOrder {
    IList<DbSortClause^>^ get ();
}
member SortOrder : IList<DbSortClause>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbSortClause
>
)
>
)

定义排序顺序的 DbSortClause 列表。

DbSkipExpression 要求其输入集合已经排序。排序顺序表示为 SortOrder 属性。SortOrder 是 DbSortClause 对象的列表。 DbSkipExpression 要求其输入集合已经排序。排序顺序表示为 SortOrder 属性。SortOrder 是 DbSortClause 对象的列表。 DbSkipExpression 要求其输入集合已经排序。排序顺序表示为 SortOrder 属性。SortOrder 是 DbSortClause 对象的列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSkipExpression 类
DbSkipExpression 成员
System.Data.Common.CommandTrees 命名空间


DbSortClause 类

DbSortClause 类
成员

指定可用作 DbSortExpression 的排序顺序的组成部分的排序键。无法继承此类。 指定可用作 DbSortExpression 的排序顺序的组成部分的排序键。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbSortClause
public sealed class DbSortClause
public ref class DbSortClause sealed
[<SealedAttribute>]
type DbSortClause =  class end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbSortClauseDbSortClause
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSortClause 成员
System.Data.Common.CommandTrees 命名空间


DbSortClause 成员

DbSortClause 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSortClause 类

指定可用作 DbSortExpression 的排序顺序的组成部分的排序键。无法继承此类。 指定可用作 DbSortExpression 的排序顺序的组成部分的排序键。无法继承此类。

DbSortClause 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbSortClause 类
System.Data.Common.CommandTrees 命名空间


DbSortClause 方法

DbSortClause 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSortClause 类

DbSortClause 类型公开以下成员。

名称 说明
页首

参考

DbSortClause 类
System.Data.Common.CommandTrees 命名空间


DbSortClause 属性

DbSortClause 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSortClause 类

DbSortClause 类型公开以下成员。

名称 说明
页首

参考

DbSortClause 类
System.Data.Common.CommandTrees 命名空间


DbSortClause ..::.Ascending 属性

DbSortClause
.
.
::
.
Ascending 属性
DbSortClause 类

获取一个布尔值，该值指示此排序键是否使用升序排序顺序。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Ascending As Boolean
    Get
public bool Ascending { get; }
public:
property bool Ascending {
    bool get ();
}
member Ascending : bool

属性值

类型： System Boolean
如果此排序键使用升序排序顺序，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSortClause 类
DbSortClause 成员
System.Data.Common.CommandTrees 命名空间


DbSortClause ..::.Collation 属性

DbSortClause
.
.
::
.
Collation 属性
DbSortClause 类

获取指定此排序键的排序规则的字符串值。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Collation As String
    Get
public string Collation { get; }
public:
property String^ Collation {
    String^ get ();
}
member Collation : string

属性值

类型： System String
指定此排序键的排序规则的字符串值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSortClause 类
DbSortClause 成员
System.Data.Common.CommandTrees 命名空间


DbSortClause ..::.Expression 属性

DbSortClause
.
.
::
.
Expression 属性
DbSortClause 类

获取或设置为此排序键提供值的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Expression As DbExpression
    Get
public DbExpression Expression { get; }
public:
property DbExpression^ Expression {
    DbExpression^ get ();
}
member Expression : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
为此排序键提供值的 DbExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSortClause 类
DbSortClause 成员
System.Data.Common.CommandTrees 命名空间


DbSortExpression 类

DbSortExpression 类
成员

表示根据给定排序键应用于指定输入集的元素的排序操作。此类不能被继承。 表示根据给定排序键应用于指定输入集的元素的排序操作。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbSortExpression _
    Inherits DbExpression
public sealed class DbSortExpression : DbExpression
public ref class DbSortExpression sealed : public DbExpression
[<SealedAttribute>]
type DbSortExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbSortExpressionDbSortExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSortExpression 成员
System.Data.Common.CommandTrees 命名空间


DbSortExpression 成员

DbSortExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSortExpression 类

表示根据给定排序键应用于指定输入集的元素的排序操作。此类不能被继承。 表示根据给定排序键应用于指定输入集的元素的排序操作。此类不能被继承。

DbSortExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbSortExpression 类
System.Data.Common.CommandTrees 命名空间


DbSortExpression 方法

DbSortExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSortExpression 类

DbSortExpression 类型公开以下成员。

名称 说明
页首

参考

DbSortExpression 类
System.Data.Common.CommandTrees 命名空间


DbSortExpression ..::.Accept 方法

DbSortExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSortExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbSortExpression 类
DbSortExpression 成员
System.Data.Common.CommandTrees 命名空间


DbSortExpression ..::.Accept 方法 (DbExpressionVisitor)

DbSortExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbSortExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSortExpression 类
DbSortExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbSortExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbSortExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbSortExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSortExpression 类
DbSortExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbSortExpression 属性

DbSortExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbSortExpression 类

DbSortExpression 类型公开以下成员。

名称 说明
页首

参考

DbSortExpression 类
System.Data.Common.CommandTrees 命名空间


DbSortExpression ..::.Input 属性

DbSortExpression
.
.
::
.
Input 属性
DbSortExpression 类

获取指定输入集的 DbExpressionBinding。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Input As DbExpressionBinding
    Get
public DbExpressionBinding Input { get; }
public:
property DbExpressionBinding^ Input {
    DbExpressionBinding^ get ();
}
member Input : DbExpressionBinding

属性值

类型： System.Data.Common.CommandTrees DbExpressionBinding
指定输入集的 DbExpressionBinding。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSortExpression 类
DbSortExpression 成员
System.Data.Common.CommandTrees 命名空间


DbSortExpression ..::.SortOrder 属性

DbSortExpression
.
.
::
.
SortOrder 属性
DbSortExpression 类

获取定义排序顺序的 DbSortClause 列表。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property SortOrder As IList(Of DbSortClause)
    Get
public IList<DbSortClause> SortOrder { get; }
public:
property IList<DbSortClause^>^ SortOrder {
    IList<DbSortClause^>^ get ();
}
member SortOrder : IList<DbSortClause>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbSortClause
>
)
>
)

定义排序顺序的 DbSortClause 列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbSortExpression 类
DbSortExpression 成员
System.Data.Common.CommandTrees 命名空间


DbTreatExpression 类

DbTreatExpression 类
成员

表示应用于多态参数的类型转换操作。此类不能继承。 表示应用于多态参数的类型转换操作。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbTreatExpression _
    Inherits DbUnaryExpression
public sealed class DbTreatExpression : DbUnaryExpression
public ref class DbTreatExpression sealed : public DbUnaryExpression
[<SealedAttribute>]
type DbTreatExpression =
    class
        inherit DbUnaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbTreatExpressionDbTreatExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbTreatExpression 成员
System.Data.Common.CommandTrees 命名空间


DbTreatExpression 成员

DbTreatExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbTreatExpression 类

表示应用于多态参数的类型转换操作。此类不能继承。 表示应用于多态参数的类型转换操作。此类不能继承。

DbTreatExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbTreatExpression 类
System.Data.Common.CommandTrees 命名空间


DbTreatExpression 方法

DbTreatExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbTreatExpression 类

DbTreatExpression 类型公开以下成员。

名称 说明
页首

参考

DbTreatExpression 类
System.Data.Common.CommandTrees 命名空间


DbTreatExpression ..::.Accept 方法

DbTreatExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbTreatExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbTreatExpression 类
DbTreatExpression 成员
System.Data.Common.CommandTrees 命名空间


DbTreatExpression ..::.Accept 方法 (DbExpressionVisitor)

DbTreatExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbTreatExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbTreatExpression 类
DbTreatExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbTreatExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbTreatExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbTreatExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbTreatExpression 类
DbTreatExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbTreatExpression 属性

DbTreatExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbTreatExpression 类

DbTreatExpression 类型公开以下成员。

名称 说明
页首

参考

DbTreatExpression 类
System.Data.Common.CommandTrees 命名空间


DbUnaryExpression 类

DbUnaryExpression 类
成员

实现接受单个表达式参数的表达式所需的基本功能。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbUnaryExpression _
    Inherits DbExpression
public abstract class DbUnaryExpression : DbExpression
public ref class DbUnaryExpression abstract : public DbExpression
[<AbstractClassAttribute>]
type DbUnaryExpression =
    class
        inherit DbExpression
    end

此类是一个帮助程序基类，很多后续类都是基于该类生成的。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbUnaryExpressionDbUnaryExpression

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbUnaryExpression 成员
System.Data.Common.CommandTrees 命名空间


DbUnaryExpression 成员

DbUnaryExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUnaryExpression 类

实现接受单个表达式参数的表达式所需的基本功能。

DbUnaryExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbUnaryExpression 类
System.Data.Common.CommandTrees 命名空间


DbUnaryExpression 方法

DbUnaryExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUnaryExpression 类

DbUnaryExpression 类型公开以下成员。

名称 说明
页首

参考

DbUnaryExpression 类
System.Data.Common.CommandTrees 命名空间


DbUnaryExpression ..::.Accept 方法

DbUnaryExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUnaryExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbUnaryExpression 类
DbUnaryExpression 成员
System.Data.Common.CommandTrees 命名空间


DbUnaryExpression 属性

DbUnaryExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUnaryExpression 类

DbUnaryExpression 类型公开以下成员。

名称 说明
页首

参考

DbUnaryExpression 类
System.Data.Common.CommandTrees 命名空间


DbUnaryExpression ..::.Argument 属性

DbUnaryExpression
.
.
::
.
Argument 属性
DbUnaryExpression 类

获取或设置定义参数的 DbExpression。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Argument As DbExpression
    Get
public DbExpression Argument { get; }
public:
property DbExpression^ Argument {
    DbExpression^ get ();
}
member Argument : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
定义参数的 DbExpression。
异常 | 条件
ArgumentNullException | 表达式为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | 表达式与 DbUnaryExpression 的命令目录树没有关联，或者其结果类型不等于或不可提升为参数所需的类型。

如果设置 Argument 属性，则派生表达式类型可执行更严格的类型检查。例如，DbDistinctExpression 要求其参数表达式为集合结果类型。通常，派生表达式类型不允许 Argument 设置为结果类型不等于或不可提升为当前值的结果类型的表达式。 如果设置 Argument 属性，则派生表达式类型可执行更严格的类型检查。例如，DbDistinctExpression 要求其参数表达式为集合结果类型。通常，派生表达式类型不允许 Argument 设置为结果类型不等于或不可提升为当前值的结果类型的表达式。 如果设置 Argument 属性，则派生表达式类型可执行更严格的类型检查。例如，DbDistinctExpression 要求其参数表达式为集合结果类型。通常，派生表达式类型不允许 Argument 设置为结果类型不等于或不可提升为当前值的结果类型的表达式。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbUnaryExpression 类
DbUnaryExpression 成员
System.Data.Common.CommandTrees 命名空间


DbUnionAllExpression 类

DbUnionAllExpression 类
成员

表示左操作数和右操作数之间的并集（不去除重复项）操作。此类不能继承。 表示左操作数和右操作数之间的并集（不去除重复项）操作。此类不能继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbUnionAllExpression _
    Inherits DbBinaryExpression
public sealed class DbUnionAllExpression : DbBinaryExpression
public ref class DbUnionAllExpression sealed : public DbBinaryExpression
[<SealedAttribute>]
type DbUnionAllExpression =
    class
        inherit DbBinaryExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbUnionAllExpressionDbUnionAllExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbUnionAllExpression 成员
System.Data.Common.CommandTrees 命名空间


DbUnionAllExpression 成员

DbUnionAllExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUnionAllExpression 类

表示左操作数和右操作数之间的并集（不去除重复项）操作。此类不能继承。 表示左操作数和右操作数之间的并集（不去除重复项）操作。此类不能继承。

DbUnionAllExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbUnionAllExpression 类
System.Data.Common.CommandTrees 命名空间


DbUnionAllExpression 方法

DbUnionAllExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUnionAllExpression 类

DbUnionAllExpression 类型公开以下成员。

名称 说明
页首

参考

DbUnionAllExpression 类
System.Data.Common.CommandTrees 命名空间


DbUnionAllExpression ..::.Accept 方法

DbUnionAllExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUnionAllExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbUnionAllExpression 类
DbUnionAllExpression 成员
System.Data.Common.CommandTrees 命名空间


DbUnionAllExpression ..::.Accept 方法 (DbExpressionVisitor)

DbUnionAllExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbUnionAllExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbUnionAllExpression 类
DbUnionAllExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbUnionAllExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbUnionAllExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbUnionAllExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbUnionAllExpression 类
DbUnionAllExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbUnionAllExpression 属性

DbUnionAllExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUnionAllExpression 类

DbUnionAllExpression 类型公开以下成员。

名称 说明
页首

参考

DbUnionAllExpression 类
System.Data.Common.CommandTrees 命名空间


DbUpdateCommandTree 类

DbUpdateCommandTree 类
成员

表示以命令目录树表示的单行更新操作。无法继承此类。 表示以命令目录树表示的单行更新操作。无法继承此类。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbUpdateCommandTree _
    Inherits DbModificationCommandTree
public sealed class DbUpdateCommandTree : DbModificationCommandTree
public ref class DbUpdateCommandTree sealed : public DbModificationCommandTree
[<SealedAttribute>]
type DbUpdateCommandTree =
    class
        inherit DbModificationCommandTree
    end

如果设置 Returning 属性，则该命令将返回一个读取器；否则返回一个标量值，该值指示受到影响的行数。

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbUpdateCommandTreeDbUpdateCommandTree
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdateCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbUpdateCommandTree 成员

DbUpdateCommandTree 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUpdateCommandTree 类

表示以命令目录树表示的单行更新操作。无法继承此类。 表示以命令目录树表示的单行更新操作。无法继承此类。

DbUpdateCommandTree 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbUpdateCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbUpdateCommandTree 方法

DbUpdateCommandTree 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUpdateCommandTree 类

DbUpdateCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbUpdateCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbUpdateCommandTree 属性

DbUpdateCommandTree 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUpdateCommandTree 类

DbUpdateCommandTree 类型公开以下成员。

名称 说明
页首

参考

DbUpdateCommandTree 类
System.Data.Common.CommandTrees 命名空间


DbUpdateCommandTree ..::.Predicate 属性

DbUpdateCommandTree
.
.
::
.
Predicate 属性
DbUpdateCommandTree 类

获取一个 DbExpression，该 DbExpression 指定的谓词用于确定应更新目标集合的哪些成员。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Predicate As DbExpression
    Get
public DbExpression Predicate { get; }
public:
property DbExpression^ Predicate {
    DbExpression^ get ();
}
member Predicate : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
DbExpression，它指定的谓词用于确定应更新目标集合的哪些成员。

该谓词只能包含以下元素：表示相等的 DbComparisonExpression；DbConstantExpression；DbIsNullExpression；DbPropertyExpression；引用目标的 DbVariableReferenceExpression；DbAndExpression；DbOrExpression；DbNotExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdateCommandTree 类
DbUpdateCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbUpdateCommandTree ..::.Returning 属性

DbUpdateCommandTree
.
.
::
.
Returning 属性
DbUpdateCommandTree 类

获取一个 DbExpression，该 DbExpression 指定基于修改的行要返回的结果的投影。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Returning As DbExpression
    Get
public DbExpression Returning { get; }
public:
property DbExpression^ Returning {
    DbExpression^ get ();
}
member Returning : DbExpression

属性值

类型： System.Data.Common.CommandTrees DbExpression
获取一个 DbExpression，该 DbExpression 指定基于修改的行要返回的结果的投影。nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 指示不应从此命令返回任何结果。 获取一个 DbExpression，该 DbExpression 指定基于修改的行要返回的结果的投影。nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 指示不应从此命令返回任何结果。

返回投影只包括以下元素：DbNewInstanceExpression；DbPropertyExpression。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdateCommandTree 类
DbUpdateCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbUpdateCommandTree ..::.SetClauses 属性

DbUpdateCommandTree
.
.
::
.
SetClauses 属性
DbUpdateCommandTree 类

获取定义更新操作的更新集子句的列表。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property SetClauses As IList(Of DbModificationClause)
    Get
public IList<DbModificationClause> SetClauses { get; }
public:
property IList<DbModificationClause^>^ SetClauses {
    IList<DbModificationClause^>^ get ();
}
member SetClauses : IList<DbModificationClause>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
DbModificationClause
>
)
>
)

定义更新操作的更新集子句的列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdateCommandTree 类
DbUpdateCommandTree 成员
System.Data.Common.CommandTrees 命名空间


DbVariableReferenceExpression 类

DbVariableReferenceExpression 类
成员

表示对当前作用域中的变量的引用。此类不能被继承。 表示对当前作用域中的变量的引用。此类不能被继承。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class DbVariableReferenceExpression _
    Inherits DbExpression
public sealed class DbVariableReferenceExpression : DbExpression
public ref class DbVariableReferenceExpression sealed : public DbExpression
[<SealedAttribute>]
type DbVariableReferenceExpression =
    class
        inherit DbExpression
    end

System.Data.Common.CommandTrees System.Data.Common.CommandTrees..::.DbVariableReferenceExpressionDbVariableReferenceExpression
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbVariableReferenceExpression 成员
System.Data.Common.CommandTrees 命名空间


DbVariableReferenceExpression 成员

DbVariableReferenceExpression 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbVariableReferenceExpression 类

表示对当前作用域中的变量的引用。此类不能被继承。 表示对当前作用域中的变量的引用。此类不能被继承。

DbVariableReferenceExpression 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbVariableReferenceExpression 类
System.Data.Common.CommandTrees 命名空间


DbVariableReferenceExpression 方法

DbVariableReferenceExpression 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbVariableReferenceExpression 类

DbVariableReferenceExpression 类型公开以下成员。

名称 说明
页首

参考

DbVariableReferenceExpression 类
System.Data.Common.CommandTrees 命名空间


DbVariableReferenceExpression ..::.Accept 方法

DbVariableReferenceExpression
.
.
::
.
Accept 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbVariableReferenceExpression 类

实现表达式的访问者模式。

名称 说明
页首

参考

DbVariableReferenceExpression 类
DbVariableReferenceExpression 成员
System.Data.Common.CommandTrees 命名空间


DbVariableReferenceExpression ..::.Accept 方法 (DbExpressionVisitor)

DbVariableReferenceExpression
.
.
::
.
Accept 方法 (DbExpressionVisitor)
DbVariableReferenceExpression 类

实现不生成结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Accept ( _
    visitor As DbExpressionVisitor _
)
public override void Accept(
    DbExpressionVisitor visitor
)
public:
virtual void Accept(
    DbExpressionVisitor^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor -> unit
override Accept :
        visitor:DbExpressionVisitor -> unit

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
DbExpressionVisitor 的实例。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbVariableReferenceExpression 类
DbVariableReferenceExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbVariableReferenceExpression ..::.Accept <(Of <(TResultType >)>) 方法 (DbExpressionVisitor <(Of <(TResultType >)>))

DbVariableReferenceExpression
.
.
::
.
Accept
<
(Of
<
(
TResultType
>
)
>
)
方法 (DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)
)
DbVariableReferenceExpression 类

实现生成特定类型结果值的表达式的访问者模式。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function Accept(Of TResultType) ( _
    visitor As DbExpressionVisitor(Of TResultType) _
) As TResultType
public override TResultType Accept<TResultType>(
    DbExpressionVisitor<TResultType> visitor
)

public:
generic<typename TResultType>
virtual TResultType Accept(
    DbExpressionVisitor<TResultType>^ visitor
) override
abstract Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType
override Accept :
        visitor:DbExpressionVisitor<'TResultType> -> 'TResultType

类型参数

TResultType

visitor 生成的结果的类型。

参数

visitor
类型： System.Data.Common.CommandTrees DbExpressionVisitor
<
(Of
<
(
TResultType
>
)
>
)

生成特定类型结果值的类型化 DbExpressionVisitor 的实例。

返回值

类型：TResultType
DbExpressionVisitor 生成的特定类型的结果值。
异常 | 条件
ArgumentNullException | visitor 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbVariableReferenceExpression 类
DbVariableReferenceExpression 成员
Accept 重载
System.Data.Common.CommandTrees 命名空间


DbVariableReferenceExpression 属性

DbVariableReferenceExpression 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbVariableReferenceExpression 类

DbVariableReferenceExpression 类型公开以下成员。

名称 说明
页首

参考

DbVariableReferenceExpression 类
System.Data.Common.CommandTrees 命名空间


DbVariableReferenceExpression ..::.VariableName 属性

DbVariableReferenceExpression
.
.
::
.
VariableName 属性
DbVariableReferenceExpression 类

获取被引用变量的名称。

命名空间： System.Data.Common.CommandTrees
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property VariableName As String
    Get
public string VariableName { get; }
public:
property String^ VariableName {
    String^ get ();
}
member VariableName : string

属性值

类型： System String
被引用变量的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

DbVariableReferenceExpression 类
DbVariableReferenceExpression 成员
System.Data.Common.CommandTrees 命名空间


System.Data.Linq 命名空间

System.Data.Linq 命名空间

The System.Data.Linq namespace contains classes that support interaction with relational databases in LINQ to SQL applications.

LINQ to SQL is a technology that provides a run-time infrastructure for managing relational data as objects.For more information, see LINQ to SQL. LINQ to SQL is a technology that provides a run-time infrastructure for managing relational data as objects.For more information, see LINQ to SQL.

 | 类 | 说明
公共类 | Binary | 表示不可变的二进制数据块。
公共类 | ChangeConflictCollection | 返回并发冲突中涉及的对象的集合。
公共类 | ChangeConflictException | 当由于客户端上次读取数据库值后这些值已被更新而导致更新失败时引发。
公共类 | ChangeSet | 提供保存更改的容器。
公共类 | CompiledQuery | 提供对查询的编译和缓存以供重新使用。
公共类 | DataContext | 表示 LINQ to SQL 框架的主入口点。
公共类 | DataLoadOptions | 提供相关数据的立即加载和筛选。
公共类 | DBConvert | 基础结构。 在内部使用以将一种类型转换为其他类型。
公共类 | DuplicateKeyException | 当尝试使用正在使用的键将对象添加到标识缓存时引发。
公共类 | EntitySet TEntity | 为 LINQ to SQL 应用程序中的一对多关系和一对一关系的集合方提供延迟加载和关系维护。
公共类 | ForeignKeyReferenceAlreadyHasValueException | 表示在已经加载实体的情况下尝试更改外键时发生的错误。
公共类 | MemberChangeConflict | 表示以下情况：由于自客户端上次读取成员值后这些值已被更新，因此尝试的更新失败。
公共类 | ObjectChangeConflict | 表示对一个或多个开放式并发冲突的更新尝试。
公共类 | Table TEntity | 表示基础数据库中特定类型的表。
 | 结构 | 说明
公共结构 | EntityRef TEntity | 为 LINQ to SQL 应用程序中的一对多关系的单一实例方提供延迟加载和关系维护。
公共结构 | Link T | 用于启用单个属性（与 EntityRef<(Of <(TEntity>)>) 相似）的延迟加载。
公共结构 | ModifiedMemberInfo | 具有已在 LINQ to SQL 应用程序中修改的成员的值。
 | 接口 | 说明
公共接口 | IExecuteResult | 提供对执行查询的返回值或结果的访问。
公共接口 | IFunctionResult | 提供对函数的返回值的访问。
公共接口 | IMultipleResults | 表示映射函数或对可变返回序列的查询的结果。
公共接口 | ISingleResult T | 表示具有单个返回序列的映射函数的结果。
公共接口 | ITable | 用于弱类型查询方案。
公共接口 | ITable TEntity | 表示基础数据库中特定类型的表。
 | 枚举 | 说明
公共枚举 | ChangeAction | 描述在将更改提交到数据库时实体将具有的更改的类型。
公共枚举 | ConflictMode | 指定应何时报告并发冲突。
公共枚举 | RefreshMode | 定义 Refresh 方法如何处理开放式并发冲突。


Binary 类

Binary 类
成员

表示不可变的二进制数据块。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<SerializableAttribute> _
<DataContractAttribute> _
Public NotInheritable Class Binary _
    Implements IEquatable(Of Binary)
[SerializableAttribute]
[DataContractAttribute]
public sealed class Binary : IEquatable<Binary>
[SerializableAttribute]
[DataContractAttribute]
public ref class Binary sealed : IEquatable<Binary^>
[<SealedAttribute>]
[<SerializableAttribute>]
[<DataContractAttribute>]
type Binary =
    class
        interface IEquatable<Binary>
    end

System.Data.Linq System.Data.Linq..::.BinaryBinary
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 成员
System.Data.Linq 命名空间


Binary 成员

Binary 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Binary 类

表示不可变的二进制数据块。

Binary 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Binary 类
System.Data.Linq 命名空间


Binary 构造函数

Binary 构造函数
Binary 类

初始化 Binary 类的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    value As Byte() _
)
public Binary(
    byte[] value
)
public:
Binary(
    array<unsigned char>^ value
)
new :
        value:byte[] -> Binary

参数

value
类型：
array<
System Byte
>
[]
()
[]

表示二进制数据的字节。

将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（而不是所需的字节数组）传递给此构造函数时，将引发 System..::.ArgumentNullException 异常。不要依赖于此行为，因为该行为将来可能会发生变化。 将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（而不是所需的字节数组）传递给此构造函数时，将引发 System..::.ArgumentNullException 异常。不要依赖于此行为，因为该行为将来可能会发生变化。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
System.Data.Linq 命名空间


Binary 方法

Binary 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Binary 类

Binary 类型公开以下成员。

名称 说明
页首

参考

Binary 类
System.Data.Linq 命名空间


Binary ..::.Equals 方法

Binary
.
.
::
.
Equals 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Binary 类

确定两个二进制对象是否相等。

名称 说明
页首

参考

Binary 类
Binary 成员
System.Data.Linq 命名空间


Binary ..::.Equals 方法 (Binary)

Binary
.
.
::
.
Equals 方法 (Binary)
Binary 类

确定两个二进制对象是否相等。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function Equals ( _
    other As Binary _
) As Boolean
public bool Equals(
    Binary other
)
public:
virtual bool Equals(
    Binary^ other
) sealed
abstract Equals :
        other:Binary -> bool
override Equals :
        other:Binary -> bool

参数

other
类型： System.Data.Linq Binary
正在和当前对象进行比较的 Object。

返回值

类型： System Boolean
如果两个二进制对象相等，则为 true；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
Equals 重载
System.Data.Linq 命名空间


Binary ..::.Equals 方法 (Object)

Binary
.
.
::
.
Equals 方法 (Object)
Binary 类

确定指定的 Object 是否等于当前的 Object。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overrides Function Equals ( _
    obj As Object _
) As Boolean
public override bool Equals(
    Object obj
)
public:
virtual bool Equals(
    Object^ obj
) override
abstract Equals :
        obj:Object -> bool
override Equals :
        obj:Object -> bool

参数

obj
类型： System Object
与当前的 Object 进行比较的 Object。

返回值

类型： System Boolean
如果两个二进制对象相等，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
Equals 重载
System.Data.Linq 命名空间


Binary ..::.GetHashCode 方法

Binary
.
.
::
.
GetHashCode 方法
Binary 类

用作特定类型的哈希函数。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overrides Function GetHashCode As Integer
public override int GetHashCode()
public:
virtual int GetHashCode() override
abstract GetHashCode : unit -> int
override GetHashCode : unit -> int

返回值

类型： System Int32
当前二进制对象的哈希代码。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
System.Data.Linq 命名空间


Binary ..::.ToArray 方法

Binary
.
.
::
.
ToArray 方法
Binary 类

返回表示当前二进制对象的字节数组。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function ToArray As Byte()
public byte[] ToArray()
public:
array<unsigned char>^ ToArray()
member ToArray : unit -> byte[]

返回值

类型：
array<
System Byte
>
[]
()
[]

包含当前二进制对象的值的字节数组。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
System.Data.Linq 命名空间


Binary ..::.ToString 方法

Binary
.
.
::
.
ToString 方法
Binary 类

返回表示当前二进制对象的 String。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
一个表示当前二进制对象的 String。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
System.Data.Linq 命名空间


Binary 运算符和类型转换

Binary 运算符和类型转换
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Binary 类

Binary 类型公开以下成员。

名称 说明
页首

参考

Binary 类
System.Data.Linq 命名空间


Binary ..::.Equality 运算符

Binary
.
.
::
.
Equality 运算符
Binary 类

描述两个二进制对象之间的相等关系。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Operator = ( _
    binary1 As Binary, _
    binary2 As Binary _
) As Boolean
public static bool operator ==(
    Binary binary1,
    Binary binary2
)
public:
static bool operator ==(
    Binary^ binary1,
    Binary^ binary2
)
static let inline (=)
        binary1:Binary *
        binary2:Binary  : bool

参数

binary1
类型： System.Data.Linq Binary
第一个二进制对象。
binary2
类型： System.Data.Linq Binary
第二个二进制对象。

返回值

类型： System Boolean
如果两个二进制对象相等，则为 true；否则为 false。

如果两个二进制对象都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回 true；如果只有一个二进制对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
System.Data.Linq 命名空间


Binary ImplicitWideningImplicitImplicit 转换 ( array<Byte >[]()[] to Binary)

Binary
Implicit
Widening
Implicit
Implicit
转换 (
array<
Byte
>
[]
()
[]
to Binary)
Binary 类

允许用某种编程语言将字节数组隐式地强制转换为 Binary 类型。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Widening Operator CType ( _
    value As Byte() _
) As Binary
public static implicit operator Binary (
    byte[] value
)
static implicit operator Binary^ (
    array<unsigned char>^ value
)
F# 不支持新转换运算符的声明。

参数

value
类型：
array<
System Byte
>
[]
()
[]

要转换为 Binary 类型的实例的字节数组。

返回值

类型： System.Data.Linq Binary
一个包含被强制的值的 Binary 类。

将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（而不是所需的字节数组）传递给此运算符时，将引发 System..::.ArgumentNullException 异常。不要依赖于此行为，因为该行为将来可能会发生变化。 将 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（而不是所需的字节数组）传递给此运算符时，将引发 System..::.ArgumentNullException 异常。不要依赖于此行为，因为该行为将来可能会发生变化。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
System.Data.Linq 命名空间


Binary ..::.Inequality 运算符

Binary
.
.
::
.
Inequality 运算符
Binary 类

描述两个二进制对象之间的不等关系。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Operator <> ( _
    binary1 As Binary, _
    binary2 As Binary _
) As Boolean
public static bool operator !=(
    Binary binary1,
    Binary binary2
)
public:
static bool operator !=(
    Binary^ binary1,
    Binary^ binary2
)
static let inline (<>)
        binary1:Binary *
        binary2:Binary  : bool

参数

binary1
类型： System.Data.Linq Binary
第一个二进制对象。
binary2
类型： System.Data.Linq Binary
第二个二进制对象。

返回值

类型： System Boolean
如果两个二进制对象不相等，则为 true；否则为 false。

如果两个二进制对象都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回 false；如果其中有一个二进制对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
System.Data.Linq 命名空间


Binary 属性

Binary 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Binary 类

Binary 类型公开以下成员。

名称 说明
页首

参考

Binary 类
System.Data.Linq 命名空间


Binary ..::.Length 属性

Binary
.
.
::
.
Length 属性
Binary 类

获取二进制对象的长度。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Length As Integer
    Get
public int Length { get; }
public:
property int Length {
    int get ();
}
member Length : int

属性值

类型： System Int32
一个表示长度的整数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Binary 类
Binary 成员
System.Data.Linq 命名空间


ChangeAction 枚举

ChangeAction 枚举

描述在将更改提交到数据库时实体将具有的更改的类型。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Enumeration ChangeAction
public enum ChangeAction
public enum class ChangeAction
type ChangeAction
成员名称 | 说明
None | 不会提交该实体。
Delete | 将删除该实体。
Insert | 将插入该实体。
Update | 将更新该实体。

在 LINQ to SQL 应用程序中与 OnValidate() 一起使用，根据要提交的更改类型指定或省略验证。

Public Sub OnValidate(ByVal action As System.Data.Linq.ChangeAction)
    If action = ChangeAction.Insert Then
        Console.WriteLine("Notify billing office.")
    End If
End Sub

void OnValidate(ChangeAction action)
{
    if (action == ChangeAction.Insert)
    {
        Console.WriteLine("Notify billing office.");
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Linq 命名空间


ChangeConflictCollection 类

ChangeConflictCollection 类
成员

返回并发冲突中涉及的对象的集合。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class ChangeConflictCollection _
    Implements ICollection(Of ObjectChangeConflict), ICollection,  _
    IEnumerable(Of ObjectChangeConflict), IEnumerable
public sealed class ChangeConflictCollection : ICollection<ObjectChangeConflict>,
    ICollection, IEnumerable<ObjectChangeConflict>, IEnumerable
public ref class ChangeConflictCollection sealed : ICollection<ObjectChangeConflict^>,
    ICollection, IEnumerable<ObjectChangeConflict^>, IEnumerable
[<SealedAttribute>]
type ChangeConflictCollection =
    class
        interface ICollection<ObjectChangeConflict>
        interface ICollection
        interface IEnumerable<ObjectChangeConflict>
        interface IEnumerable
    end

在下面检索有关发生冲突的对象的信息的示例中，db.ChangeConflicts 表示那些对象的集合。

Dim db As New Northwnd("...")

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine("Optimistic concurrency error.")
    Console.WriteLine(ex.Message)
    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        Dim metatable As MetaTable = db.Mapping.GetTable(occ.Object.GetType())
        Dim entityInConflict = occ.Object

        Console.WriteLine("Table name: " & metatable.TableName)
        Console.Write("Customer ID: ")
        Console.WriteLine(entityInConflict.CustomerID)
        Console.ReadLine()
    Next
End Try

Northwnd db = new Northwnd("...");

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine("Optimistic concurrency error.");
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
        Customer entityInConflict = (Customer)occ.Object;
        Console.WriteLine("Table name: {0}", metatable.TableName);
        Console.Write("Customer ID: ");
        Console.WriteLine(entityInConflict.CustomerID);
        Console.ReadLine();
    }
}

System.Data.Linq System.Data.Linq..::.ChangeConflictCollectionChangeConflictCollection
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection 成员

ChangeConflictCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeConflictCollection 类

返回并发冲突中涉及的对象的集合。

ChangeConflictCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ChangeConflictCollection 类
System.Data.Linq 命名空间


ChangeConflictCollection 方法

ChangeConflictCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeConflictCollection 类

ChangeConflictCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ChangeConflictCollection 类
System.Data.Linq 命名空间


ChangeConflictCollection ..::.Clear 方法

ChangeConflictCollection
.
.
::
.
Clear 方法
ChangeConflictCollection 类

从集合移除所有冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Clear
public void Clear()
public:
virtual void Clear() sealed
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.Contains 方法

ChangeConflictCollection
.
.
::
.
Contains 方法
ChangeConflictCollection 类

指定给定冲突是否为集合的成员。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function Contains ( _
    item As ObjectChangeConflict _
) As Boolean
public bool Contains(
    ObjectChangeConflict item
)
public:
virtual bool Contains(
    ObjectChangeConflict^ item
) sealed
abstract Contains :
        item:ObjectChangeConflict -> bool
override Contains :
        item:ObjectChangeConflict -> bool

参数

item
类型： System.Data.Linq ObjectChangeConflict
指定的冲突。

返回值

类型： System Boolean
如果指定的冲突是集合的一个成员，则返回 true。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.CopyTo 方法

ChangeConflictCollection
.
.
::
.
CopyTo 方法
ChangeConflictCollection 类

有关此成员的说明，请参见 CopyTo。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub CopyTo ( _
    array As ObjectChangeConflict(), _
    arrayIndex As Integer _
)
public void CopyTo(
    ObjectChangeConflict[] array,
    int arrayIndex
)
public:
virtual void CopyTo(
    array<ObjectChangeConflict^>^ array,
    int arrayIndex
) sealed
abstract CopyTo :
        array:ObjectChangeConflict[] *
        arrayIndex:int -> unit
override CopyTo :
        array:ObjectChangeConflict[] *
        arrayIndex:int -> unit

参数

array
类型：
array<
System.Data.Linq ObjectChangeConflict
>
[]
()
[]

要复制到的数组。
arrayIndex
类型： System Int32
从其开始复制的数组索引。

实现

将集合的元素复制到一个数组。

此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 ICollection 接口时使用它。 此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 ICollection 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.GetEnumerator 方法

ChangeConflictCollection
.
.
::
.
GetEnumerator 方法
ChangeConflictCollection 类

返回集合的枚举数。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetEnumerator As IEnumerator(Of ObjectChangeConflict)
public IEnumerator<ObjectChangeConflict> GetEnumerator()
public:
virtual IEnumerator<ObjectChangeConflict^>^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator<ObjectChangeConflict>
override GetEnumerator : unit -> IEnumerator<ObjectChangeConflict>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
ObjectChangeConflict
>
)
>
)

集合的枚举数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.ICollection <(Of <(ObjectChangeConflict >)>) ..::.Add 方法

ChangeConflictCollection
.
.
::
.
ICollection
<
(Of
<
(
ObjectChangeConflict
>
)
>
)
.
.
::
.
Add 方法
ChangeConflictCollection 类

有关此成员的说明，请参见 Add。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub Add ( _
    item As ObjectChangeConflict _
) Implements ICollection(Of ObjectChangeConflict).Add
void ICollection<ObjectChangeConflict>.Add(
    ObjectChangeConflict item
)
private:
virtual void Add(
    ObjectChangeConflict^ item
) sealed = ICollection<ObjectChangeConflict^>::Add
private abstract Add :
        item:ObjectChangeConflict -> unit
private override Add :
        item:ObjectChangeConflict -> unit

参数

item
类型： System.Data.Linq ObjectChangeConflict
要添加的项。

实现

向集合中添加一项。

此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 ICollection<(Of <(T>)>) 接口时使用它。 此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 ICollection<(Of <(T>)>) 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.ICollection ..::.CopyTo 方法

ChangeConflictCollection
.
.
::
.
ICollection
.
.
::
.
CopyTo 方法
ChangeConflictCollection 类

将集合复制到数组。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub CopyTo ( _
    array As Array, _
    index As Integer _
) Implements ICollection.CopyTo
void ICollection.CopyTo(
    Array array,
    int index
)
private:
virtual void CopyTo(
    Array^ array,
    int index
) sealed = ICollection::CopyTo
private abstract CopyTo :
        array:Array *
        index:int -> unit
private override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
数组的名称。
index
类型： System Int32
数组的索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.IEnumerable ..::.GetEnumerator 方法

ChangeConflictCollection
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
ChangeConflictCollection 类

有关此成员的说明，请参见 GetEnumerator。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个循环访问集合的枚举数。

实现

此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 IEnumerable 接口时使用它。 此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 IEnumerable 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.Remove 方法

ChangeConflictCollection
.
.
::
.
Remove 方法
ChangeConflictCollection 类

指定是否已从集合移除指定冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function Remove ( _
    item As ObjectChangeConflict _
) As Boolean
public bool Remove(
    ObjectChangeConflict item
)
public:
virtual bool Remove(
    ObjectChangeConflict^ item
) sealed
abstract Remove :
        item:ObjectChangeConflict -> bool
override Remove :
        item:ObjectChangeConflict -> bool

参数

item
类型： System.Data.Linq ObjectChangeConflict
要移除的冲突。

返回值

类型： System Boolean
如果已从集合移除 ObjectChangeConflict，则返回 true。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.ResolveAll 方法

ChangeConflictCollection
.
.
::
.
ResolveAll 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeConflictCollection 类

解决集合中的所有冲突。

名称 说明
页首

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.ResolveAll 方法 (RefreshMode)

ChangeConflictCollection
.
.
::
.
ResolveAll 方法 (RefreshMode)
ChangeConflictCollection 类

通过使用指定策略解决集合中的所有冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub ResolveAll ( _
    mode As RefreshMode _
)
public void ResolveAll(
    RefreshMode mode
)
public:
void ResolveAll(
    RefreshMode mode
)
member ResolveAll :
        mode:RefreshMode -> unit

参数

mode
类型： System.Data.Linq RefreshMode
RefreshMode 中可用的选项之一。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
ResolveAll 重载
System.Data.Linq 命名空间


ChangeConflictCollection ..::.ResolveAll 方法 (RefreshMode, Boolean)

ChangeConflictCollection
.
.
::
.
ResolveAll 方法 (RefreshMode, Boolean)
ChangeConflictCollection 类

通过使用指定策略解决集合中的所有冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub ResolveAll ( _
    mode As RefreshMode, _
    autoResolveDeletes As Boolean _
)
public void ResolveAll(
    RefreshMode mode,
    bool autoResolveDeletes
)
public:
void ResolveAll(
    RefreshMode mode,
    bool autoResolveDeletes
)
member ResolveAll :
        mode:RefreshMode *
        autoResolveDeletes:bool -> unit

参数

mode
类型： System.Data.Linq RefreshMode
用于解决冲突的策略。
autoResolveDeletes
类型： System Boolean
如果为 true，则自动解决由数据库中不再存在的已修改对象产生的冲突。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
ResolveAll 重载
System.Data.Linq 命名空间


ChangeConflictCollection 属性

ChangeConflictCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeConflictCollection 类

ChangeConflictCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ChangeConflictCollection 类
System.Data.Linq 命名空间


ChangeConflictCollection ..::.Count 属性

ChangeConflictCollection
.
.
::
.
Count 属性
ChangeConflictCollection 类

返回集合中的冲突数。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Count As Integer
    Get
public int Count { get; }
public:
virtual property int Count {
    int get () sealed;
}
abstract Count : int
override Count : int

属性值

类型： System Int32
integer

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.ICollection <(Of <(ObjectChangeConflict >)>) ..::.IsReadOnly 属性

ChangeConflictCollection
.
.
::
.
ICollection
<
(Of
<
(
ObjectChangeConflict
>
)
>
)
.
.
::
.
IsReadOnly 属性
ChangeConflictCollection 类

有关此成员的说明，请参见 IsReadOnly。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements ICollection(Of ObjectChangeConflict).IsReadOnly
    Get
bool ICollection<ObjectChangeConflict>.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = ICollection<ObjectChangeConflict^>::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
如果该集合为只读，则返回 true。

实现

此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 ICollection<(Of <(T>)>) 接口时使用它。 此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 ICollection<(Of <(T>)>) 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.ICollection ..::.IsSynchronized 属性

ChangeConflictCollection
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
ChangeConflictCollection 类

有关此成员的说明，请参见 IsSynchronized。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
如果对该集合的访问是同步（线程安全）的，则返回 true。

实现

此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 ICollection 接口时使用它。 此成员是显式接口成员的实现。只能在 ChangeConflictCollection 实例强制转换为 ICollection 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.ICollection ..::.SyncRoot 属性

ChangeConflictCollection
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
ChangeConflictCollection 类

有关此成员的说明，请参见 IsSynchronized。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
返回可用于同步对集合的访问的对象。

实现

此成员是显式接口成员的实现。它只能在 ChangeConflictCollection 实例被强制转换为 ICollection 接口时使用。 此成员是显式接口成员的实现。它只能在 ChangeConflictCollection 实例被强制转换为 ICollection 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictCollection ..::.Item 属性

ChangeConflictCollection
.
.
::
.
Item 属性
ChangeConflictCollection 类

返回发生冲突的项。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Item ( _
    index As Integer _
) As ObjectChangeConflict
    Get
public ObjectChangeConflict this[
    int index
] { get; }
public:
property ObjectChangeConflict^ Item[int index] {
    ObjectChangeConflict^ get (int index);
}
member Item : ObjectChangeConflict

参数

index
类型： System Int32
发生冲突的项的集合中的索引。

属性值

类型： System.Data.Linq ObjectChangeConflict
一个表示发生冲突的项的 ObjectChangeConflict。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictCollection 类
ChangeConflictCollection 成员
System.Data.Linq 命名空间


ChangeConflictException 类

ChangeConflictException 类
成员

当由于客户端上次读取数据库值后这些值已被更新而导致更新失败时引发。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Class ChangeConflictException _
    Inherits Exception
public class ChangeConflictException : Exception
public ref class ChangeConflictException : public Exception
type ChangeConflictException =
    class
        inherit Exception
    end

下面的示例演示如何使用此异常来返回有关并发冲突的信息。

Dim db As New Northwnd("...")

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine("Optimistic concurrency error.")
    Console.WriteLine(ex.Message)
    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        Dim metatable As MetaTable = db.Mapping.GetTable(occ.Object.GetType())
        Dim entityInConflict = occ.Object

        Console.WriteLine("Table name: " & metatable.TableName)
        Console.Write("Customer ID: ")
        Console.WriteLine(entityInConflict.CustomerID)
        Console.ReadLine()
    Next
End Try

Northwnd db = new Northwnd("...");

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine("Optimistic concurrency error.");
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
        Customer entityInConflict = (Customer)occ.Object;
        Console.WriteLine("Table name: {0}", metatable.TableName);
        Console.Write("Customer ID: ");
        Console.WriteLine(entityInConflict.CustomerID);
        Console.ReadLine();
    }
}

System.Data.Linq System.Data.Linq..::.ChangeConflictExceptionChangeConflictException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictException 成员
System.Data.Linq 命名空间


ChangeConflictException 成员

ChangeConflictException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeConflictException 类

当由于客户端上次读取数据库值后这些值已被更新而导致更新失败时引发。

ChangeConflictException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ChangeConflictException 类
System.Data.Linq 命名空间


ChangeConflictException 构造函数

ChangeConflictException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeConflictException 类

初始化 ChangeConflictException 类的新实例。

名称 说明
页首

参考

ChangeConflictException 类
ChangeConflictException 成员
System.Data.Linq 命名空间


ChangeConflictException 构造函数

ChangeConflictException 构造函数
ChangeConflictException 类

初始化 ChangeConflictException 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public ChangeConflictException()
public:
ChangeConflictException()
new : unit -> ChangeConflictException

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictException 类
ChangeConflictException 成员
ChangeConflictException 重载
System.Data.Linq 命名空间


ChangeConflictException 构造函数 (String)

ChangeConflictException 构造函数 (String)
ChangeConflictException 类

初始化 ChangeConflictException 类的一个新实例并指定用于说明异常的消息。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    message As String _
)
public ChangeConflictException(
    string message
)
public:
ChangeConflictException(
    String^ message
)
new :
        message:string -> ChangeConflictException

参数

message
类型： System String
当引发异常时要公开的消息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictException 类
ChangeConflictException 成员
ChangeConflictException 重载
System.Data.Linq 命名空间


ChangeConflictException 构造函数 (String, Exception)

ChangeConflictException 构造函数 (String, Exception)
ChangeConflictException 类

初始化 ChangeConflictException 类的一个新实例，并指定用于说明异常的消息以及导致此异常的异常。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ChangeConflictException(
    string message,
    Exception innerException
)
public:
ChangeConflictException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ChangeConflictException

参数

message
类型： System String
当引发异常时要公开的消息。
innerException
类型： System Exception
指定 ChangeConflictException 是其结果的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeConflictException 类
ChangeConflictException 成员
ChangeConflictException 重载
System.Data.Linq 命名空间


ChangeConflictException 方法

ChangeConflictException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeConflictException 类

ChangeConflictException 类型公开以下成员。

名称 说明
页首

参考

ChangeConflictException 类
System.Data.Linq 命名空间


ChangeConflictException 属性

ChangeConflictException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeConflictException 类

ChangeConflictException 类型公开以下成员。

名称 说明
页首

参考

ChangeConflictException 类
System.Data.Linq 命名空间


ChangeConflictException 事件

ChangeConflictException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeConflictException 类

ChangeConflictException 类型公开以下成员。

名称 说明
页首

参考

ChangeConflictException 类
System.Data.Linq 命名空间


ChangeSet 类

ChangeSet 类
成员

提供保存更改的容器。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class ChangeSet
public sealed class ChangeSet
public ref class ChangeSet sealed
[<SealedAttribute>]
type ChangeSet =  class end

System.Data.Linq System.Data.Linq..::.ChangeSetChangeSet
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeSet 成员
System.Data.Linq 命名空间


ChangeSet 成员

ChangeSet 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeSet 类

提供保存更改的容器。

ChangeSet 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ChangeSet 类
System.Data.Linq 命名空间


ChangeSet 方法

ChangeSet 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeSet 类

ChangeSet 类型公开以下成员。

名称 说明
页首

参考

ChangeSet 类
System.Data.Linq 命名空间


ChangeSet ..::.ToString 方法

ChangeSet
.
.
::
.
ToString 方法
ChangeSet 类

返回表示当前 ChangeSet 的字符串。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
表示当前 ChangeSet 的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeSet 类
ChangeSet 成员
System.Data.Linq 命名空间


ChangeSet 属性

ChangeSet 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ChangeSet 类

ChangeSet 类型公开以下成员。

名称 说明
页首

参考

ChangeSet 类
System.Data.Linq 命名空间


ChangeSet ..::.Deletes 属性

ChangeSet
.
.
::
.
Deletes 属性
ChangeSet 类

获取已从 ChangeSet 中删除的实体的列表。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Deletes As IList(Of Object)
    Get
public IList<Object> Deletes { get; }
public:
property IList<Object^>^ Deletes {
    IList<Object^>^ get ();
}
member Deletes : IList<Object>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
Object
>
)
>
)

删除实体的 IList。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeSet 类
ChangeSet 成员
System.Data.Linq 命名空间


ChangeSet ..::.Inserts 属性

ChangeSet
.
.
::
.
Inserts 属性
ChangeSet 类

获取已插入到 ChangeSet 中的实体的列表。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Inserts As IList(Of Object)
    Get
public IList<Object> Inserts { get; }
public:
property IList<Object^>^ Inserts {
    IList<Object^>^ get ();
}
member Inserts : IList<Object>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
Object
>
)
>
)

插入实体的 IList。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeSet 类
ChangeSet 成员
System.Data.Linq 命名空间


ChangeSet ..::.Updates 属性

ChangeSet
.
.
::
.
Updates 属性
ChangeSet 类

获取已在 ChangeSet 中更新的实体的列表。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Updates As IList(Of Object)
    Get
public IList<Object> Updates { get; }
public:
property IList<Object^>^ Updates {
    IList<Object^>^ get ();
}
member Updates : IList<Object>

属性值

类型： System.Collections.Generic IList
<
(Of
<
(
Object
>
)
>
)

更新实体的 IList。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ChangeSet 类
ChangeSet 成员
System.Data.Linq 命名空间


CompiledQuery 类

CompiledQuery 类
成员

提供对查询的编译和缓存以供重新使用。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class CompiledQuery
public sealed class CompiledQuery
public ref class CompiledQuery sealed
[<SealedAttribute>]
type CompiledQuery =  class end

从概念上说，此类包含一个方法 (Compile) 和多个重载。您可调用 Compile 方法以创建表示已编译查询的新委托。 从概念上说，此类包含一个方法 (Compile) 和多个重载。您可调用 Compile 方法以创建表示已编译查询的新委托。

说明 说明

在首次执行查询前，不会进行编译。

System.Data.Linq System.Data.Linq..::.CompiledQueryCompiledQuery
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 成员
System.Data.Linq 命名空间


CompiledQuery 成员

CompiledQuery 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CompiledQuery 类

提供对查询的编译和缓存以供重新使用。

CompiledQuery 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

CompiledQuery 类
System.Data.Linq 命名空间


CompiledQuery 方法

CompiledQuery 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CompiledQuery 类

CompiledQuery 类型公开以下成员。

名称 说明
页首

参考

CompiledQuery 类
System.Data.Linq 命名空间


CompiledQuery ..::.Compile 方法

CompiledQuery
.
.
::
.
Compile 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CompiledQuery 类

创建表示已编译查询的新委托。

名称 说明
页首

此方法的泛型参数为（按顺序排列）：

  • TDataContext.约束为一个 DataContext。它表示在执行由 Compile 方法返回的委托时必须传入的 DataContext。 TDataContext.约束为一个 DataContext。它表示在执行由 Compile 方法返回的委托时必须传入的 DataContext。 TDataContext.约束为一个 DataContext。它表示在执行由 Compile 方法返回的委托时必须传入的 DataContext。

  • TArg0, …, TArg2.表示在执行由 Compile 方法返回的委托时必须传入的参数类型。 TArg0, …, TArg2.表示在执行由 Compile 方法返回的委托时必须传入的参数类型。

  • TResult.表示在执行由 Compile 方法返回的委托时返回的 IEnumerable<T> 中的 T 类型。 TResult.表示在执行由 Compile 方法返回的委托时返回的 IEnumerable<T> 中的 T 类型。

首次执行返回委托时传递不使用 TDataContext 参数的查询表达式会引发异常。

返回值

Func<TDataContext, TArg0, TArg1, …, TArg2, TResult>，表示可缓存的委托。执行此委托时，将编译查询。请查看下列说明： Func<TDataContext, TArg0, TArg1, …, TArg2, TResult>，表示可缓存的委托。执行此委托时，将编译查询。请查看下列说明： Func<TDataContext, TArg0, TArg1, …, TArg2, TResult>，表示可缓存的委托。执行此委托时，将编译查询。请查看下列说明：

  • 将 null 传递给第一个参数类型的 TDataContext 会引发运行时异常。

  • 使用包含与最初用于编译查询（首次执行查询）不同的 DataLoadOptions 的 DataContext 再次执行已编译查询是错误的。此行为的原因是编译查询需要 DataShape 中包含的信息。使用其他 DataShape 再次执行查询时，缓存的查询会变得无效，并且会引发错误。 使用包含与最初用于编译查询（首次执行查询）不同的 DataLoadOptions 的 DataContext 再次执行已编译查询是错误的。此行为的原因是编译查询需要 DataShape 中包含的信息。使用其他 DataShape 再次执行查询时，缓存的查询会变得无效，并且会引发错误。 使用包含与最初用于编译查询（首次执行查询）不同的 DataLoadOptions 的 DataContext 再次执行已编译查询是错误的。此行为的原因是编译查询需要 DataShape 中包含的信息。使用其他 DataShape 再次执行查询时，缓存的查询会变得无效，并且会引发错误。

  • 如果将新查询运算符应用于委托执行的结果，则会引发异常。

  • 当要对执行已编译查询的结果执行查询运算符时，您必须在对该结果进行操作之前将其转换为列表。

下面的代码示例采用设计用于存储已编译查询的 Queries，并采用表示强类型化 DataContext 的 Northwind 类。

Class Queries

    Public Shared CustomersByCity As  _
        Func(Of Northwnd, String, IQueryable(Of Customer)) = _
            CompiledQuery.Compile(Function(db As Northwnd, _
    city As String) _
        From c In db.Customers Where c.City = city Select c)

    Public Shared CustomersById As  _
        Func(Of Northwnd, String, IQueryable(Of Customer)) = _
            CompiledQuery.Compile(Function(db As Northwnd, _
    id As String) _
        db.Customers.Where(Function(c) c.CustomerID = id))

End Class

public static Func<Northwnd, string, IQueryable<Customer>>
    CustomersByCity =
        CompiledQuery.Compile((Northwnd db, string city) =>
            from c in db.Customers where c.City == city select c);

public static Func<Northwnd, string, IQueryable<Customer>>
    CustomersById = CompiledQuery.Compile((Northwnd db,
    string id) => db.Customers.Where(c => c.CustomerID == id));

' The following example invokes such a compiled query in the main
' program
Public Function GetCustomersByCity(ByVal city As String) As  _
    IEnumerable(Of Customer)

    Dim myDb = GetNorthwind()
    Return Queries.CustomersByCity(myDb, city)
End Function

// The following example invokes such a compiled query in the main
// program.

public IEnumerable<Customer> GetCustomersByCity(string city)
{
    var myDb = GetNorthwind();
    return Queries.CustomersByCity(myDb, city);
}

当前无法存储（以静态变量的形式）返回匿名类型的查询，因为该类型没有可作为泛型参数提供的名称。下面的示例演示如何创建可表示结果的类型，然后将其用作泛型参数，从而解决该问题。 当前无法存储（以静态变量的形式）返回匿名类型的查询，因为该类型没有可作为泛型参数提供的名称。下面的示例演示如何创建可表示结果的类型，然后将其用作泛型参数，从而解决该问题。

Class SimpleCustomer
    Private _ContactName As String
    Public Property ContactName() As String
        Get
            Return _ContactName
        End Get
        Set(ByVal value As String)
            _ContactName = value
        End Set
    End Property
End Class

Class Queries2
    Public Shared CustomersByCity As Func(Of Northwnd, String, IEnumerable(Of SimpleCustomer)) = _
        CompiledQuery.Compile(Of Northwnd, String, IEnumerable(Of SimpleCustomer))( _
        Function(db As Northwnd, city As String) _
        From c In db.Customers _
        Where c.City = city _
        Select New SimpleCustomer With {.ContactName = c.ContactName})
End Class

class SimpleCustomer
{
    public string ContactName { get; set; }
}

class Queries2
{
    public static Func<Northwnd, string, IEnumerable<SimpleCustomer>> CustomersByCity =
        CompiledQuery.Compile<Northwnd, string, IEnumerable<SimpleCustomer>>(
        (Northwnd db, string city) =>
        from c in db.Customers
        where c.City == city
        select new SimpleCustomer { ContactName = c.ContactName });
}

参考

CompiledQuery 类
CompiledQuery 成员
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg7

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg8

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg7

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg8

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg9

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg7

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg8

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg9

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg10

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg7

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg8

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg9

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg10

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg11

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TArg12, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg7

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg8

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg9

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg10

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg11

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg12

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult >)>) >)

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TArg12, typename TArg13, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg7

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg8

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg9

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg10

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg11

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg12

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg13

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14,

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TArg12, typename TArg13, typename TArg14, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TArg14, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TArg14, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg7

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg8

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg9

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg10

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg11

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg12

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg13

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg14

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13,

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TArg12, typename TArg13, typename TArg14, typename TArg15, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TArg14, 'TArg15, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TArg14, 'TArg15, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg7

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg8

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg9

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg10

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg11

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg12

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg13

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg14

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg15

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见Compile

请参见Compile

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TResult) ( _
    query As Expression(Of Func(Of TArg0, TResult)) _
) As Func(Of TArg0, TResult)
public static Func<TArg0, TResult> Compile<TArg0, TResult>(
    Expression<Func<TArg0, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TResult>^ Compile(
    Expression<Func<TArg0, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TResult>> -> Func<'TArg0, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见Compile

请参见Compile

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TResult)) _
) As Func(Of TArg0, TArg1, TResult)
public static Func<TArg0, TArg1, TResult> Compile<TArg0, TArg1, TResult>(
    Expression<Func<TArg0, TArg1, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TResult>> -> Func<'TArg0, 'TArg1, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TResult)
public static Func<TArg0, TArg1, TArg2, TResult> Compile<TArg0, TArg1, TArg2, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

编译查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Compile(Of TArg0 As DataContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult>> query
)
where TArg0 : DataContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TResult>
where TArg0 : DataContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TResult>  when 'TArg0 : DataContext

类型参数

TArg0

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg1

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg2

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg3

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg4

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg5

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg6

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TArg7

表示在执行由 Compile 方法返回的委托时必须传入的参数的类型。

TResult

在执行由 Compile 方法返回的委托时返回的 System.Collections.Generic..::.IEnumerable<(Of <(T>)>) 中的 T 的类型。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult
>
)
>
)
>
)
>
)

要编译的查询表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult
>
)
>
)

一个表示已编译查询的泛型委托。

请参见 Compile。

请参见 Compile。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Linq 命名空间


CompiledQuery 属性

CompiledQuery 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CompiledQuery 类

CompiledQuery 类型公开以下成员。

名称 说明
页首

参考

CompiledQuery 类
System.Data.Linq 命名空间


CompiledQuery ..::.Expression 属性

CompiledQuery
.
.
::
.
Expression 属性
CompiledQuery 类

将查询返回为 lambda 表达式。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Expression As LambdaExpression
    Get
public LambdaExpression Expression { get; }
public:
property LambdaExpression^ Expression {
    LambdaExpression^ get ();
}
member Expression : LambdaExpression

属性值

类型： System.Linq.Expressions LambdaExpression
表示查询的 lambda 表达式。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
System.Data.Linq 命名空间


ConflictMode 枚举

ConflictMode 枚举

指定应何时报告并发冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Enumeration ConflictMode
public enum ConflictMode
public enum class ConflictMode
type ConflictMode
成员名称 | 说明
FailOnFirstConflict | 指定当检测到第一个并发冲突错误时，应立即停止对更新数据库的尝试。
ContinueOnConflict | 指定应尝试对数据库的所有更新，并且应在该过程结束时累积和返回并发冲突。
db.SubmitChanges(ConflictMode.FailOnFirstConflict)

db.SubmitChanges(ConflictMode.FailOnFirstConflict);

Dim db As New Northwnd("...")

' Create, update, delete code.

db.SubmitChanges(ConflictMode.FailOnFirstConflict)
' or
db.SubmitChanges(ConflictMode.ContinueOnConflict)

Northwnd db = new Northwnd("...");

// Create, update, delete code.

db.SubmitChanges(ConflictMode.FailOnFirstConflict);
// or
db.SubmitChanges(ConflictMode.ContinueOnConflict);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Linq 命名空间


DataContext 类

DataContext 类
成员

表示 LINQ to SQL 框架的主入口点。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Class DataContext _
    Implements IDisposable
public class DataContext : IDisposable
public ref class DataContext : IDisposable
type DataContext =
    class
        interface IDisposable
    end

DataContext 是通过数据库连接映射的所有实体的源。它会跟踪您对所有检索到的实体所做的更改，并且保留一个“标识缓存”，该缓存确保使用同一对象实例表示多次检索到的实体。 DataContext 是通过数据库连接映射的所有实体的源。它会跟踪您对所有检索到的实体所做的更改，并且保留一个“标识缓存”，该缓存确保使用同一对象实例表示多次检索到的实体。

通常情况下，DataContext 实例设计为持续一个“工作单位”，但您的应用程序可以定义该持续周期。DataContext 是轻量的，创建它不需要很大的开销。典型的 LINQ to SQL 应用程序在方法范围内创建 DataContext 实例，或将这些实例创建为生存期较短的类（这些类表示相关数据库操作的逻辑集合）的成员。 通常情况下，DataContext 实例设计为持续一个“工作单位”，但您的应用程序可以定义该持续周期。DataContext 是轻量的，创建它不需要很大的开销。典型的 LINQ to SQL 应用程序在方法范围内创建 DataContext 实例，或将这些实例创建为生存期较短的类（这些类表示相关数据库操作的逻辑集合）的成员。 通常情况下，DataContext 实例设计为持续一个“工作单位”，但您的应用程序可以定义该持续周期。DataContext 是轻量的，创建它不需要很大的开销。典型的 LINQ to SQL 应用程序在方法范围内创建 DataContext 实例，或将这些实例创建为生存期较短的类（这些类表示相关数据库操作的逻辑集合）的成员。

System.Data.Linq System.Data.Linq..::.DataContextDataContext
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 成员
System.Data.Linq 命名空间


DataContext 成员

DataContext 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

表示 LINQ to SQL 框架的主入口点。

DataContext 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataContext 类
System.Data.Linq 命名空间


DataContext 构造函数

DataContext 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

初始化 DataContext 类的新实例。您所使用的连接字符串可为 ADO.NET 连接字符串。您还可以为 SQL Server Express 或 SQL Server Compact 文件指定文件名。 初始化 DataContext 类的新实例。您所使用的连接字符串可为 ADO.NET 连接字符串。您还可以为 SQL Server Express 或 SQL Server Compact 文件指定文件名。 初始化 DataContext 类的新实例。您所使用的连接字符串可为 ADO.NET 连接字符串。您还可以为 SQL Server Express 或 SQL Server Compact 文件指定文件名。

名称 说明
页首

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext 构造函数 (IDbConnection)

DataContext 构造函数 (IDbConnection)
DataContext 类

通过引用由 .NET Framework 使用的连接来初始化 DataContext 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    connection As IDbConnection _
)
public DataContext(
    IDbConnection connection
)
public:
DataContext(
    IDbConnection^ connection
)
new :
        connection:IDbConnection -> DataContext

参数

connection
类型： System.Data IDbConnection
由 .NET Framework 使用的连接。

如果提供了已关闭的连接或连接字符串，则 DataContext 会根据需要打开和关闭数据库连接。通常情况下，决不要对 DataContext 调用 Dispose。如果提供打开的连接，则 DataContext 将不关闭该连接。因此，不要实例化具有打开的连接的 DataContext，除非您有充分的理由执行该操作。在 System.Transactions 事务中，DataContext 将不打开或关闭连接以免提升。 如果提供了已关闭的连接或连接字符串，则 DataContext 会根据需要打开和关闭数据库连接。通常情况下，决不要对 DataContext 调用 Dispose。如果提供打开的连接，则 DataContext 将不关闭该连接。因此，不要实例化具有打开的连接的 DataContext，除非您有充分的理由执行该操作。在 System.Transactions 事务中，DataContext 将不打开或关闭连接以免提升。 如果提供了已关闭的连接或连接字符串，则 DataContext 会根据需要打开和关闭数据库连接。通常情况下，决不要对 DataContext 调用 Dispose。如果提供打开的连接，则 DataContext 将不关闭该连接。因此，不要实例化具有打开的连接的 DataContext，除非您有充分的理由执行该操作。在 System.Transactions 事务中，DataContext 将不打开或关闭连接以免提升。 如果提供了已关闭的连接或连接字符串，则 DataContext 会根据需要打开和关闭数据库连接。通常情况下，决不要对 DataContext 调用 Dispose。如果提供打开的连接，则 DataContext 将不关闭该连接。因此，不要实例化具有打开的连接的 DataContext，除非您有充分的理由执行该操作。在 System.Transactions 事务中，DataContext 将不打开或关闭连接以免提升。 如果提供了已关闭的连接或连接字符串，则 DataContext 会根据需要打开和关闭数据库连接。通常情况下，决不要对 DataContext 调用 Dispose。如果提供打开的连接，则 DataContext 将不关闭该连接。因此，不要实例化具有打开的连接的 DataContext，除非您有充分的理由执行该操作。在 System.Transactions 事务中，DataContext 将不打开或关闭连接以免提升。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
DataContext 重载
System.Data.Linq 命名空间


DataContext 构造函数 (String)

DataContext 构造函数 (String)
DataContext 类

通过引用文件源来初始化 DataContext 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    fileOrServerOrConnection As String _
)
public DataContext(
    string fileOrServerOrConnection
)
public:
DataContext(
    String^ fileOrServerOrConnection
)
new :
        fileOrServerOrConnection:string -> DataContext

参数

fileOrServerOrConnection
类型： System String
此参数可以是下列项之一：

  • SQL Server Express 数据库所在的文件的名称。

  • 数据库所在的服务器的名称。在此情况下，提供程序对用户使用默认数据库。 数据库所在的服务器的名称。在此情况下，提供程序对用户使用默认数据库。

  • 一个完整的连接字符串。LINQ to SQL 仅将字符串传递给提供程序，而不进行修改。 一个完整的连接字符串。LINQ to SQL 仅将字符串传递给提供程序，而不进行修改。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
DataContext 重载
System.Data.Linq 命名空间


DataContext 构造函数 (IDbConnection, MappingSource)

DataContext 构造函数 (IDbConnection, MappingSource)
DataContext 类

通过引用连接和映射源初始化 DataContext 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    connection As IDbConnection, _
    mapping As MappingSource _
)
public DataContext(
    IDbConnection connection,
    MappingSource mapping
)
public:
DataContext(
    IDbConnection^ connection,
    MappingSource^ mapping
)
new :
        connection:IDbConnection *
        mapping:MappingSource -> DataContext

参数

connection
类型： System.Data IDbConnection
由 .NET Framework 使用的连接。
mapping
类型： System.Data.Linq.Mapping MappingSource
MappingSource。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
DataContext 重载
System.Data.Linq 命名空间


DataContext 构造函数 (String, MappingSource)

DataContext 构造函数 (String, MappingSource)
DataContext 类

通过引用文件源和映射源初始化 DataContext 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    fileOrServerOrConnection As String, _
    mapping As MappingSource _
)
public DataContext(
    string fileOrServerOrConnection,
    MappingSource mapping
)
public:
DataContext(
    String^ fileOrServerOrConnection,
    MappingSource^ mapping
)
new :
        fileOrServerOrConnection:string *
        mapping:MappingSource -> DataContext

参数

fileOrServerOrConnection
类型： System String
此参数可以是下列项之一：

  • SQL Server Express 数据库所在的文件的名称。

  • 数据库所在的服务器的名称。在此情况下，提供程序对用户使用默认数据库。 数据库所在的服务器的名称。在此情况下，提供程序对用户使用默认数据库。

  • 一个完整的连接字符串。LINQ to SQL 仅将字符串传递给提供程序，而不进行修改。 一个完整的连接字符串。LINQ to SQL 仅将字符串传递给提供程序，而不进行修改。

mapping
类型： System.Data.Linq.Mapping MappingSource
MappingSource。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
DataContext 重载
System.Data.Linq 命名空间


DataContext 方法

DataContext 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

DataContext 类型公开以下成员。

名称 说明
页首

参考

DataContext 类
System.Data.Linq 命名空间


DataContext ..::.CreateDatabase 方法

DataContext
.
.
::
.
CreateDatabase 方法
DataContext 类

在服务器上创建数据库。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub CreateDatabase
public void CreateDatabase()
public:
void CreateDatabase()
member CreateDatabase : unit -> unit

数据库的名称通过使用下面的算法派生：

  • 如果数据库在连接字符串中标识，则使用该连接字符串的名称。

  • 如果存在 DatabaseAttribute 特性，则将其 Name 属性用作数据库的名称。

  • 如果连接字符串中没有数据库标记，并且使用强类型的 DataContext，则会检查与 DataContext 继承类名称相同的数据库。

  • 如果使用弱类型的 DataContext，则会引发异常。

  • 如果已通过使用文件名创建了 DataContext，则会创建与该文件名相对应的数据库。

下面的代码演示如何设置临时数据库，然后将其移除。

If Not db.DatabaseExists Then
    db.CreateDatabase()
End If
' ...
db.DeleteDatabase()

if (!db.DatabaseExists())
    db.CreateDatabase();
// …
db.DeleteDatabase();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间

其他资源

如何：动态创建数据库 (LINQ to SQL)
SQL-CLR 类型映射 (LINQ to SQL)


DataContext ..::.CreateMethodCallQuery <(Of <(TResult >)>) 方法

DataContext
.
.
::
.
CreateMethodCallQuery
<
(Of
<
(
TResult
>
)
>
)
方法
DataContext 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

执行与指定的 CLR 方法相关联的表值数据库函数。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Friend Function CreateMethodCallQuery(Of TResult) ( _
    instance As Object, _
    methodInfo As MethodInfo, _
    ParamArray parameters As Object() _
) As IQueryable(Of TResult)
protected internal IQueryable<TResult> CreateMethodCallQuery<TResult>(
    Object instance,
    MethodInfo methodInfo,
    params Object[] parameters
)

protected public:
generic<typename TResult>
IQueryable<TResult>^ CreateMethodCallQuery(
    Object^ instance,
    MethodInfo^ methodInfo,
    ... array<Object^>^ parameters
)
member CreateMethodCallQuery :
        instance:Object *
        methodInfo:MethodInfo *
        parameters:Object[] -> IQueryable<'TResult>

类型参数

TResult

返回的集合中的元素的类型。

参数

instance
类型： System Object
方法调用的实例（当前对象）。
methodInfo
类型： System.Reflection MethodInfo
标识与数据库方法相对应的 CLR 方法。
parameters
类型：
array<
System Object
>
[]
()
[]

要传递给命令的参数数组。

返回值

类型： System.Linq IQueryable
<
(Of
<
(
TResult
>
)
>
)

由数据库查询返回的最终值的集合。

CreateMethodCallQuery<(Of <(TResult>)>) 方法在自动生成的代码中使用，并用作数据库函数的代理。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.DatabaseExists 方法

DataContext
.
.
::
.
DatabaseExists 方法
DataContext 类

确定是否可以打开关联数据库。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function DatabaseExists As Boolean
public bool DatabaseExists()
public:
bool DatabaseExists()
member DatabaseExists : unit -> bool

返回值

类型： System Boolean
如果可以打开指定的数据库，则为 true；否则为 false。

此方法使用 Connection 属性中的连接来尝试打开关联数据库。

下面的示例使用此方法确定是否已存在数据库。

If Not db.DatabaseExists Then
    db.CreateDatabase()
End If
' ...
db.DeleteDatabase()

if (!db.DatabaseExists())
    db.CreateDatabase();
// …
db.DeleteDatabase();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.DeleteDatabase 方法

DataContext
.
.
::
.
DeleteDatabase 方法
DataContext 类

删除关联数据库。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub DeleteDatabase
public void DeleteDatabase()
public:
void DeleteDatabase()
member DeleteDatabase : unit -> unit

此方法使用 Connection 属性中的连接来标识要删除的数据库。

下面的示例演示如何删除临时创建的数据库。

If Not db.DatabaseExists Then
    db.CreateDatabase()
End If
' ...
db.DeleteDatabase()

if (!db.DatabaseExists())
    db.CreateDatabase();
// …
db.DeleteDatabase();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间
Dispose


DataContext ..::.Dispose 方法

DataContext
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

释放由 DataContext 使用的所有资源。

名称 说明
页首

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.Dispose 方法

DataContext
.
.
::
.
Dispose 方法
DataContext 类

释放由 DataContext 使用的所有资源。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Dispose
public void Dispose()
public:
virtual void Dispose() sealed
abstract Dispose : unit -> unit
override Dispose : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
Dispose 重载
System.Data.Linq 命名空间


DataContext ..::.Dispose 方法 (Boolean)

DataContext
.
.
::
.
Dispose 方法 (Boolean)
DataContext 类

释放由 DataContext 使用的资源。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Overridable Sub Dispose ( _
    disposing As Boolean _
)
protected virtual void Dispose(
    bool disposing
)
protected:
virtual void Dispose(
    bool disposing
)
abstract Dispose :
        disposing:bool -> unit
override Dispose :
        disposing:bool -> unit

参数

disposing
类型： System Boolean
如果为 true，则释放托管资源和非托管资源；如果为 false，则仅释放非托管资源。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
Dispose 重载
System.Data.Linq 命名空间


DataContext ..::.ExecuteCommand 方法

DataContext
.
.
::
.
ExecuteCommand 方法
DataContext 类

直接对数据库执行 SQL 命令。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function ExecuteCommand ( _
    command As String, _
    ParamArray parameters As Object() _
) As Integer
public int ExecuteCommand(
    string command,
    params Object[] parameters
)
public:
int ExecuteCommand(
    String^ command,
    ... array<Object^>^ parameters
)
member ExecuteCommand :
        command:string *
        parameters:Object[] -> int

参数

command
类型： System String
要执行的 SQL 命令。
parameters
类型：
array<
System Object
>
[]
()
[]

要传递给命令的参数数组。注意下面的行为： 要传递给命令的参数数组。注意下面的行为：

  • 如果数组中的对象的数目小于命令字符串中已标识的最大数，则会引发异常。

  • 如果数组包含未在命令字符串中引用的对象，则不会引发异常。

  • 如果任一参数为 null，则该参数会转换为 DBNull.Value。

返回值

类型： System Int32
一个 int，表示所执行命令修改的行数。

当 LINQ to SQL 不足以应对特定方案时，此方法可用作一种传递机制。

该命令的语法几乎与用于创建 ADO.NET DataCommand 的语法相同。唯一的不同之处在于参数的指定方式。具体地说，可以通过大括号 ({…}) 将参数括起来并从 0 开始枚举来指定参数。该参数与参数数组中均匀编号的对象相关联。 该命令的语法几乎与用于创建 ADO.NET DataCommand 的语法相同。唯一的不同之处在于参数的指定方式。具体地说，可以通过大括号 ({…}) 将参数括起来并从 0 开始枚举来指定参数。该参数与参数数组中均匀编号的对象相关联。 该命令的语法几乎与用于创建 ADO.NET DataCommand 的语法相同。唯一的不同之处在于参数的指定方式。具体地说，可以通过大括号 ({…}) 将参数括起来并从 0 开始枚举来指定参数。该参数与参数数组中均匀编号的对象相关联。 该命令的语法几乎与用于创建 ADO.NET DataCommand 的语法相同。唯一的不同之处在于参数的指定方式。具体地说，可以通过大括号 ({…}) 将参数括起来并从 0 开始枚举来指定参数。该参数与参数数组中均匀编号的对象相关联。

ExecuteQuery 和 ExecuteCommand 允许您指定自变量的可变数用于参数替换。例如，可以指定调用 ExecuteQuery<TResult> 时的参数： ExecuteQuery 和 ExecuteCommand 允许您指定自变量的可变数用于参数替换。例如，可以指定调用 ExecuteQuery<TResult> 时的参数：

db.ExecuteQuery<Customer>("select * from dbo.Customers where City = {0}", "London");

及另一个示例：

db.ExecuteCommand("UPDATE Products SET QuantityPerUnit = {0} WHERE ProductID = {1}", "24 boxes", 5);

下面的示例打开一个连接并将 SQL UPDATE 命令传递给 SQL 引擎。

    db.ExecuteCommand _
("UPDATE Products SET UnitPrice = UnitPrice + 1.00")

db.ExecuteCommand("UPDATE Products SET UnitPrice = UnitPrice + 1.00");

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.ExecuteDynamicDelete 方法

DataContext
.
.
::
.
ExecuteDynamicDelete 方法
DataContext 类

在删除重写方法中调用，以向 LINQ to SQL 重新委托生成和执行删除操作的动态 SQL 的任务。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Friend Sub ExecuteDynamicDelete ( _
    entity As Object _
)
protected internal void ExecuteDynamicDelete(
    Object entity
)
protected public:
void ExecuteDynamicDelete(
    Object^ entity
)
member ExecuteDynamicDelete :
        entity:Object -> unit

参数

entity
类型： System Object
要删除的实体。

请参见 ExecuteDynamicInsert。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.ExecuteDynamicInsert 方法

DataContext
.
.
::
.
ExecuteDynamicInsert 方法
DataContext 类

在插入重写方法中调用，以向 LINQ to SQL 重新委托生成和执行插入操作的动态 SQL 的任务。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Friend Sub ExecuteDynamicInsert ( _
    entity As Object _
)
protected internal void ExecuteDynamicInsert(
    Object entity
)
protected public:
void ExecuteDynamicInsert(
    Object^ entity
)
member ExecuteDynamicInsert :
        entity:Object -> unit

参数

entity
类型： System Object
要插入的实体。

在此过程中，需要注意下列事项：

  • 由于该方法具有受保护的修饰符，因此要使用它必须创建 DataContext 的子类。

  • 如果未在 SubmitChanges 操作中调用此操作，则会引发异常。它不适合在 SubmitChanges 操作的范围之外作为独立操作进行调用。如果实现了重写方法并且计划在重写方法内调用以前的方法，SubmitChanges 本身将调用重写方法。 如果未在 SubmitChanges 操作中调用此操作，则会引发异常。它不适合在 SubmitChanges 操作的范围之外作为独立操作进行调用。如果实现了重写方法并且计划在重写方法内调用以前的方法，SubmitChanges 本身将调用重写方法。 如果未在 SubmitChanges 操作中调用此操作，则会引发异常。它不适合在 SubmitChanges 操作的范围之外作为独立操作进行调用。如果实现了重写方法并且计划在重写方法内调用以前的方法，SubmitChanges 本身将调用重写方法。

  • 传入正确的实体是开发人员的责任。该实现可确保跟踪了传入的实体。但是，维持顺序或两次传入同一实体是开发人员的责任。 传入正确的实体是开发人员的责任。该实现可确保跟踪了传入的实体。但是，维持顺序或两次传入同一实体是开发人员的责任。 传入正确的实体是开发人员的责任。该实现可确保跟踪了传入的实体。但是，维持顺序或两次传入同一实体是开发人员的责任。

  • 调用正确的动态 API 是开发人员的责任。例如，在 Update 重写方法中，只能调用 ExecuteDynamicUpdate 方法。LINQ to SQL 不检测或验证调用的动态方法是否与适用的操作相匹配。如果调用了不适用的方法（例如，为要更新的对象调用 ExecuteDynamicDelete），则结果是未知的。 调用正确的动态 API 是开发人员的责任。例如，在 Update 重写方法中，只能调用 ExecuteDynamicUpdate 方法。LINQ to SQL 不检测或验证调用的动态方法是否与适用的操作相匹配。如果调用了不适用的方法（例如，为要更新的对象调用 ExecuteDynamicDelete），则结果是未知的。 调用正确的动态 API 是开发人员的责任。例如，在 Update 重写方法中，只能调用 ExecuteDynamicUpdate 方法。LINQ to SQL 不检测或验证调用的动态方法是否与适用的操作相匹配。如果调用了不适用的方法（例如，为要更新的对象调用 ExecuteDynamicDelete），则结果是未知的。 调用正确的动态 API 是开发人员的责任。例如，在 Update 重写方法中，只能调用 ExecuteDynamicUpdate 方法。LINQ to SQL 不检测或验证调用的动态方法是否与适用的操作相匹配。如果调用了不适用的方法（例如，为要更新的对象调用 ExecuteDynamicDelete），则结果是未知的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.ExecuteDynamicUpdate 方法

DataContext
.
.
::
.
ExecuteDynamicUpdate 方法
DataContext 类

在更新重写方法中调用，以向 LINQ to SQL 重新委托生成和执行更新操作的动态 SQL 的任务。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Friend Sub ExecuteDynamicUpdate ( _
    entity As Object _
)
protected internal void ExecuteDynamicUpdate(
    Object entity
)
protected public:
void ExecuteDynamicUpdate(
    Object^ entity
)
member ExecuteDynamicUpdate :
        entity:Object -> unit

参数

entity
类型： System Object
要更新的实体。

请参见 ExecuteDynamicInsert。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.ExecuteMethodCall 方法

DataContext
.
.
::
.
ExecuteMethodCall 方法
DataContext 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

执行数据库存储过程或与指定的 CLR 方法关联的标量函数。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Friend Function ExecuteMethodCall ( _
    instance As Object, _
    methodInfo As MethodInfo, _
    ParamArray parameters As Object() _
) As IExecuteResult
protected internal IExecuteResult ExecuteMethodCall(
    Object instance,
    MethodInfo methodInfo,
    params Object[] parameters
)
protected public:
IExecuteResult^ ExecuteMethodCall(
    Object^ instance,
    MethodInfo^ methodInfo,
    ... array<Object^>^ parameters
)
member ExecuteMethodCall :
        instance:Object *
        methodInfo:MethodInfo *
        parameters:Object[] -> IExecuteResult

参数

instance
类型： System Object
方法调用的实例（当前对象）。
methodInfo
类型： System.Reflection MethodInfo
标识与数据库方法相对应的 CLR 方法。
parameters
类型：
array<
System Object
>
[]
()
[]

要传递给命令的参数数组。

返回值

类型： System.Data.Linq IExecuteResult
指定方法的执行结果（返回值和输出参数）。

ExecuteMethodCall 方法在自动生成的代码中使用，并用作数据库函数的代理。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.ExecuteQuery 方法

DataContext
.
.
::
.
ExecuteQuery 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

直接对数据库执行 SQL 查询。

名称 说明
页首

当 LINQ to SQL 的功能不足以获取所需的结果时，此方法可用作一种传递机制来应对此类方案。

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.ExecuteQuery <(Of <(TResult >)>) 方法 (String, array<Object >[]()[])

DataContext
.
.
::
.
ExecuteQuery
<
(Of
<
(
TResult
>
)
>
)
方法 (String,
array<
Object
>
[]
()
[]
)
DataContext 类

直接对数据库执行 SQL 查询并返回对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function ExecuteQuery(Of TResult) ( _
    query As String, _
    ParamArray parameters As Object() _
) As IEnumerable(Of TResult)
public IEnumerable<TResult> ExecuteQuery<TResult>(
    string query,
    params Object[] parameters
)

public:
generic<typename TResult>
IEnumerable<TResult>^ ExecuteQuery(
    String^ query,
    ... array<Object^>^ parameters
)
member ExecuteQuery :
        query:string *
        parameters:Object[] -> IEnumerable<'TResult>

类型参数

TResult

返回的集合中的元素的类型。

参数

query
类型： System String
要执行的 SQL 查询。
parameters
类型：
array<
System Object
>
[]
()
[]

要传递给命令的参数数组。注意下面的行为： 要传递给命令的参数数组。注意下面的行为：

  • 如果数组中的对象的数目小于命令字符串中已标识的最大数，则会引发异常。

  • 如果数组包含未在命令字符串中引用的对象，则不会引发异常。

  • 如果某参数为 null，则该参数会转换为 DBNull.Value。

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TResult
>
)
>
)

由查询返回的对象的集合。

当 LINQ to SQL 不足以应对特定方案时，此方法可用作一种传递机制。

使查询结果中的列与对象中的字段和属性相匹配的算法如下所示：

  • 如果字段或属性映射到特定列名称，则结果集中应包含该列名称。

  • 如果未映射字段或属性，则结果集中应包含其名称与该字段或属性相同的列。

  • 通过先查找区分大小写的匹配来执行比较。如果未找到匹配项，则会继续搜索不区分大小写的匹配项。 通过先查找区分大小写的匹配来执行比较。如果未找到匹配项，则会继续搜索不区分大小写的匹配项。

  • 如果同时满足下列所有条件，则该查询应当返回（除延迟加载的对象外的）对象的所有跟踪的字段和属性：

    • 如果 <T> 是由 DataContext 显式跟踪的实体。

    • ObjectTrackingEnabled 为 true。

    • 实体具有主键。

    否则会引发异常。

  • 在所有其他情况下，查询只能检索对象的已跟踪字段和属性的子集。

下面的 C# 代码段显示此方法的一个用途：

var customers = db.ExecuteQuery<Customer>(@"SELECT CustomerID, CompanyName, ContactName, ContactTitle,
   Address, City, Region, PostalCode, Country, Phone, Fax
   FROM   dbo.Customers
   WHERE  City = {0}", "London");

foreach (Customer c in customers)
   Console.WriteLine(c.ContactName);

在 Visual Basic 中

Dim customers = db.ExecuteQuery(Of Customer)("SELECT CustomerID, _    CompanyName, ContactName, ContactTitle, _
   Address, City, Region, PostalCode, Country, Phone, Fax _
   FROM dbo.Customers _
WHERE City = {0}", "London")

For Each c As Customer In customers
    Console.WriteLine(c.ContactName)
Next

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
ExecuteQuery 重载
System.Data.Linq 命名空间


DataContext ..::.ExecuteQuery 方法 (Type, String, array<Object >[]()[])

DataContext
.
.
::
.
ExecuteQuery 方法 (Type, String,
array<
Object
>
[]
()
[]
)
DataContext 类

直接对数据库执行 SQL 查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function ExecuteQuery ( _
    elementType As Type, _
    query As String, _
    ParamArray parameters As Object() _
) As IEnumerable
public IEnumerable ExecuteQuery(
    Type elementType,
    string query,
    params Object[] parameters
)
public:
IEnumerable^ ExecuteQuery(
    Type^ elementType,
    String^ query,
    ... array<Object^>^ parameters
)
member ExecuteQuery :
        elementType:Type *
        query:string *
        parameters:Object[] -> IEnumerable

参数

elementType
类型： System Type
要返回的 IEnumerable<(Of <(T>)>) 的类型。

  • 使查询结果中的列与对象中的字段或属性相匹配的算法如下所示：

    • 如果字段或属性映射到特定列名称，则结果集中应包含该列名称。

    • 如果未映射字段或属性，则结果集中应包含其名称与该字段或属性相同的列。

    • 通过先查找区分大小写的匹配来执行比较。如果未找到匹配项，则会继续搜索不区分大小写的匹配项。 通过先查找区分大小写的匹配来执行比较。如果未找到匹配项，则会继续搜索不区分大小写的匹配项。

  • 如果同时满足下列所有条件，则该查询应当返回（除延迟加载的对象外的）对象的所有跟踪的字段和属性：

    • T 是由 DataContext 显式跟踪的实体。

    • ObjectTrackingEnabled 为 true。

    • 实体具有主键。

    否则会引发异常。

query
类型： System String
要执行的 SQL 查询。
parameters
类型：
array<
System Object
>
[]
()
[]

要传递给命令的参数数组。注意下面的行为： 要传递给命令的参数数组。注意下面的行为：

  • 如果数组中的对象的数目小于命令字符串中已标识的最大数，则会引发异常。

  • 如果数组包含未在命令字符串中引用的对象，则不会引发异常。

  • 如果某参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则该参数会转换为 DBNull.Value。

返回值

类型： System.Collections IEnumerable
由查询返回的对象的 IEnumerable<(Of <(T>)>) 集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
ExecuteQuery 重载
System.Data.Linq 命名空间


DataContext ..::.GetChangeSet 方法

DataContext
.
.
::
.
GetChangeSet 方法
DataContext 类

提供对由 DataContext 跟踪的已修改对象的访问。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetChangeSet As ChangeSet
public ChangeSet GetChangeSet()
public:
ChangeSet^ GetChangeSet()
member GetChangeSet : unit -> ChangeSet

返回值

类型： System.Data.Linq ChangeSet
该对象集返回为三个只读的集合。

在此过程中，需要注意下列事项：

  • GetChangeSet 可能具有副作用，如通常在 SubmitChanges 时执行的插入和删除操作的推理。例如，在以下操作中使用的对象可创建下表中相应的推断操作： GetChangeSet 可能具有副作用，如通常在 SubmitChanges 时执行的插入和删除操作的推理。例如，在以下操作中使用的对象可创建下表中相应的推断操作：

    • Add 映射到 InsertOnSubmit。

    • EntityRef<(Of <(TEntity>)>) 赋值为 null（可能由于 Remove 映射到 DeleteOnSubmit）。

  • 该集可能未按照外键约束排序。

  • 数据库生成的值（如主键值和外键值、时间戳等）不可用。此类信息需要执行数据库命令，可能还需要传播检索到的信息（如主键的外键）。 数据库生成的值（如主键值和外键值、时间戳等）不可用。此类信息需要执行数据库命令，可能还需要传播检索到的信息（如主键的外键）。

  • 在调用时计算已更改对象的集。如果进行了其他更改，则对 SubmitChanges 的后序调用可生成其他集。 在调用时计算已更改对象的集。如果进行了其他更改，则对 SubmitChanges 的后序调用可生成其他集。

未进行任何更改时的输出显示为：

{Added: 0, Removed: 0, Modified: 0}

Dim db As New Northwnd("c:\northwnd.mdf")

Dim custQuery = _
    From cust In db.Customers _
    Where (cust.City = "London") _
    Select cust

For Each custObj As Customer In custQuery
    Console.WriteLine("CustomerID: {0}", custObj.CustomerID)
    Console.WriteLine(vbTab & "Original value: {0}", custObj.City)
    custObj.City = "Paris"
    Console.WriteLine(vbTab & "Updated value: {0}", custObj.City)
Next

Dim cs As ChangeSet = db.GetChangeSet()
Console.Write("Total changes: {0}", cs)
' Freeze the console window.
Console.ReadLine()

db.SubmitChanges()

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

var custQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (Customer custObj in custQuery)
{
    Console.WriteLine("CustomerID: {0}", custObj.CustomerID);
    Console.WriteLine("\tOriginal value: {0}", custObj.City);
    custObj.City = "Paris";
    Console.WriteLine("\tUpdated value: {0}", custObj.City);
}

ChangeSet cs = db.GetChangeSet();
Console.Write("Total changes: {0}", cs);
// Freeze the console window.
Console.ReadLine();

db.SubmitChanges();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.GetCommand 方法

DataContext
.
.
::
.
GetCommand 方法
DataContext 类

提供有关由 LINQ to SQL 生成的 SQL 命令的信息。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetCommand ( _
    query As IQueryable _
) As DbCommand
public DbCommand GetCommand(
    IQueryable query
)
public:
DbCommand^ GetCommand(
    IQueryable^ query
)
member GetCommand :
        query:IQueryable -> DbCommand

参数

query
类型： System.Linq IQueryable
要检索其 SQL 命令信息的查询。

返回值

类型： System.Data.Common DbCommand
请求的命令信息对象。

此方法仅仅是一个 getter，不会影响 DataContext 状态。

在此过程中，需要注意下列事项：

  • 该参数必须为非空。否则会引发空参数异常。 该参数必须为非空。否则会引发空参数异常。

  • 无法转换的查询也会出现 LINQ to SQL 查询执行期间引发的正常查询转换异常。

  • 仅返回第一个查询命令。即，不包括用作预先加载 (LoadWith) 的其他命令。 仅返回第一个查询命令。即，不包括用作预先加载 (LoadWith) 的其他命令。

  • DataContext 不跟踪用户通过该命令执行的操作。例如，不跟踪执行返回命令的结果，并且这些结果也不会影响 DataContext 状态。 DataContext 不跟踪用户通过该命令执行的操作。例如，不跟踪执行返回命令的结果，并且这些结果也不会影响 DataContext 状态。

' Imports System.Data.Common
Dim db As New Northwnd("c:\northwnd.mdf")

Dim q = _
From cust In db.Customers _
Where cust.City = "London" _
Select cust

Console.WriteLine("Customers from London:")
For Each z As Customer In q
    Console.WriteLine(vbTab & z.ContactName)
Next

Dim dc As DbCommand = db.GetCommand(q)
Console.WriteLine(vbNewLine & "Command Text: " & vbNewLine & dc.CommandText)
Console.WriteLine(vbNewLine & "Command Type: {0}", dc.CommandType)
Console.WriteLine(vbNewLine & "Connection: {0}", dc.Connection)

Console.ReadLine()

// using System.Data.Common;
Northwnd db = new Northwnd(@"c:\northwnd.mdf");

var q =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

Console.WriteLine("Customers from London:");
foreach (var z in q)
{
    Console.WriteLine("\t {0}",z.ContactName);
}

DbCommand dc = db.GetCommand(q);
Console.WriteLine("\nCommand Text: \n{0}",dc.CommandText);
Console.WriteLine("\nCommand Type: {0}",dc.CommandType);
Console.WriteLine("\nConnection: {0}",dc.Connection);

Console.ReadLine();

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.GetTable 方法

DataContext
.
.
::
.
GetTable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

返回表对象的集合。

名称 说明
页首

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.GetTable <(Of <(TEntity >)>) 方法

DataContext
.
.
::
.
GetTable
<
(Of
<
(
TEntity
>
)
>
)
方法
DataContext 类

返回特定类型的对象的集合，其中类型由 TEntity 参数定义。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetTable(Of TEntity As Class) As Table(Of TEntity)
public Table<TEntity> GetTable<TEntity>()
where TEntity : class

public:
generic<typename TEntity>
where TEntity : ref class
Table<TEntity>^ GetTable()
member GetTable : unit -> Table<'TEntity>  when 'TEntity : not struct

类型参数

TEntity

要返回的对象的类型。

返回值

类型： System.Data.Linq Table
<
(Of
<
(
TEntity
>
)
>
)

对象的集合。

此方法是查询的主入口点。当创建强类型的 DataContext 时，新生成的属性会封装对此方法的调用。例如，会生成返回 Customers 的 GetTable<Customer> 属性。 此方法是查询的主入口点。当创建强类型的 DataContext 时，新生成的属性会封装对此方法的调用。例如，会生成返回 Customers 的 GetTable<Customer> 属性。 此方法是查询的主入口点。当创建强类型的 DataContext 时，新生成的属性会封装对此方法的调用。例如，会生成返回 Customers 的 GetTable<Customer> 属性。

如果没有特定类型的集合，则会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
GetTable 重载
System.Data.Linq 命名空间


DataContext ..::.GetTable 方法 (Type)

DataContext
.
.
::
.
GetTable 方法 (Type)
DataContext 类

返回特定类型的对象的集合，其中类型由 type 参数定义。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetTable ( _
    type As Type _
) As ITable
public ITable GetTable(
    Type type
)
public:
ITable^ GetTable(
    Type^ type
)
member GetTable :
        type:Type -> ITable

参数

type
类型： System Type
要返回的对象的类型。

返回值

类型： System.Data.Linq ITable
对象的集合。

它是弱类型版本的 GetTable。具有弱类型的版本非常重要，因为动态构造查询的做法相对常见。强制应用程序使用反射调用正确的泛型方法不太方便。 它是弱类型版本的 GetTable。具有弱类型的版本非常重要，因为动态构造查询的做法相对常见。强制应用程序使用反射调用正确的泛型方法不太方便。 它是弱类型版本的 GetTable。具有弱类型的版本非常重要，因为动态构造查询的做法相对常见。强制应用程序使用反射调用正确的泛型方法不太方便。

如果没有特定类型的集合，则会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
GetTable 重载
System.Data.Linq 命名空间


DataContext ..::.Refresh 方法

DataContext
.
.
::
.
Refresh 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

使用数据库中的数据刷新对象状态。

名称 说明
页首

如果出现开放式并发错误，则可使用此方法将项目变为某状态以进行再次尝试。此方法会更新对象上的基元字段和属性的状态。 如果出现开放式并发错误，则可使用此方法将项目变为某状态以进行再次尝试。此方法会更新对象上的基元字段和属性的状态。

说明 说明

如果某对象位于一对多关系的“多”方，则会设置对象的外键，并且关系的另一方的对象指针将设置为新值。

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.Refresh 方法 (RefreshMode, IEnumerable)

DataContext
.
.
::
.
Refresh 方法 (RefreshMode, IEnumerable)
DataContext 类

按照指定模式刷新实体对象的集合。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Refresh ( _
    mode As RefreshMode, _
    entities As IEnumerable _
)
public void Refresh(
    RefreshMode mode,
    IEnumerable entities
)
public:
void Refresh(
    RefreshMode mode,
    IEnumerable^ entities
)
member Refresh :
        mode:RefreshMode *
        entities:IEnumerable -> unit

参数

mode
类型： System.Data.Linq RefreshMode
一个指定如何处理开放式并发冲突的值。
entities
类型： System.Collections IEnumerable
要刷新的实体的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
Refresh 重载
System.Data.Linq 命名空间


DataContext ..::.Refresh 方法 (RefreshMode, Object)

DataContext
.
.
::
.
Refresh 方法 (RefreshMode, Object)
DataContext 类

按照指定模式刷新实体对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Refresh ( _
    mode As RefreshMode, _
    entity As Object _
)
public void Refresh(
    RefreshMode mode,
    Object entity
)
public:
void Refresh(
    RefreshMode mode,
    Object^ entity
)
member Refresh :
        mode:RefreshMode *
        entity:Object -> unit

参数

mode
类型： System.Data.Linq RefreshMode
一个指定如何处理开放式并发冲突的值。
entity
类型： System Object
要刷新的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
Refresh 重载
System.Data.Linq 命名空间


DataContext ..::.Refresh 方法 (RefreshMode, array<Object >[]()[])

DataContext
.
.
::
.
Refresh 方法 (RefreshMode,
array<
Object
>
[]
()
[]
)
DataContext 类

按照指定模式刷新实体对象的数组。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Refresh ( _
    mode As RefreshMode, _
    ParamArray entities As Object() _
)
public void Refresh(
    RefreshMode mode,
    params Object[] entities
)
public:
void Refresh(
    RefreshMode mode,
    ... array<Object^>^ entities
)
member Refresh :
        mode:RefreshMode *
        entities:Object[] -> unit

参数

mode
类型： System.Data.Linq RefreshMode
一个指定如何处理开放式并发冲突的值。
entities
类型：
array<
System Object
>
[]
()
[]

要刷新的实体对象的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
Refresh 重载
System.Data.Linq 命名空间


DataContext ..::.SubmitChanges 方法

DataContext
.
.
::
.
SubmitChanges 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

计算要插入、更新或删除的已修改对象的集，并执行相应命令以实现对数据库的更改。

名称 说明
页首

如果存在用于插入、更新或删除的重写方法，则 SubmitChanges 会执行这些方法，而不是默认 LINQ to SQL 命令。

SubmitChanges 启动一个事务，在执行 SubmitChanges 时如果出现异常则会回滚。但是，这不会回滚在内存中所做的更改或由 DataContext 跟踪；需要手动回滚这些更改。如果要丢弃内存中的更改，您可以从 DataContext 的新实例开始。 SubmitChanges 启动一个事务，在执行 SubmitChanges 时如果出现异常则会回滚。但是，这不会回滚在内存中所做的更改或由 DataContext 跟踪；需要手动回滚这些更改。如果要丢弃内存中的更改，您可以从 DataContext 的新实例开始。 SubmitChanges 启动一个事务，在执行 SubmitChanges 时如果出现异常则会回滚。但是，这不会回滚在内存中所做的更改或由 DataContext 跟踪；需要手动回滚这些更改。如果要丢弃内存中的更改，您可以从 DataContext 的新实例开始。

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.SubmitChanges 方法

DataContext
.
.
::
.
SubmitChanges 方法
DataContext 类

计算要插入、更新或删除的已修改对象的集，并执行相应命令以实现对数据库的更改。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub SubmitChanges
public void SubmitChanges()
public:
void SubmitChanges()
member SubmitChanges : unit -> unit

如果存在用于插入、更新或删除的重写方法，则 SubmitChanges 会执行这些方法，而不是默认 LINQ to SQL 命令。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
SubmitChanges 重载
System.Data.Linq 命名空间


DataContext ..::.SubmitChanges 方法 (ConflictMode)

DataContext
.
.
::
.
SubmitChanges 方法 (ConflictMode)
DataContext 类

将对检索到的对象所做的更改发送到基础数据库，并指定提交失败时要采取的操作。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overridable Sub SubmitChanges ( _
    failureMode As ConflictMode _
)
public virtual void SubmitChanges(
    ConflictMode failureMode
)
public:
virtual void SubmitChanges(
    ConflictMode failureMode
)
abstract SubmitChanges :
        failureMode:ConflictMode -> unit
override SubmitChanges :
        failureMode:ConflictMode -> unit

参数

failureMode
类型： System.Data.Linq ConflictMode
提交失败时要采取的操作。有效参数包括： 提交失败时要采取的操作。有效参数包括：

  • FailOnFirstConflict

  • ContinueOnConflict

默认失败模式为 FailOnFirstConflict。

Dim db As New Northwnd("...")

' Create, update, delete code.

db.SubmitChanges(ConflictMode.FailOnFirstConflict)
' or
db.SubmitChanges(ConflictMode.ContinueOnConflict)

Northwnd db = new Northwnd("...");

// Create, update, delete code.

db.SubmitChanges(ConflictMode.FailOnFirstConflict);
// or
db.SubmitChanges(ConflictMode.ContinueOnConflict);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
SubmitChanges 重载
System.Data.Linq 命名空间


DataContext ..::.Translate 方法

DataContext
.
.
::
.
Translate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

将现有 IDataReader 转换为对象。

名称 说明
页首

IDataReader 中的每行转换为 IEnumerable<(Of <(T>)>) 中的对象。

public IEnumerable<T> Translate<T>(IDataReader reader) {}

说明：此方法用于将现有 DbDataReader 转换为对象。DbDataReader 中的每行转换为 IEnumerable<(Of <(T>)>) 中的对象。 说明：此方法用于将现有 DbDataReader 转换为对象。DbDataReader 中的每行转换为 IEnumerable<(Of <(T>)>) 中的对象。

泛型参数：

T：请参见 ExecuteQuery。

参数：

Query：请参见 ExecuteCommand 下有关命令的说明。

Parameters：请参见 ExecuteCommand 下有关参数的说明。

返回类型：

IEnumerable<(Of <(T>)>)：由转换返回的对象的集合。

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.Translate <(Of <(TResult >)>) 方法 (DbDataReader)

DataContext
.
.
::
.
Translate
<
(Of
<
(
TResult
>
)
>
)
方法 (DbDataReader)
DataContext 类

将现有 DbDataReader 转换为对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function Translate(Of TResult) ( _
    reader As DbDataReader _
) As IEnumerable(Of TResult)
public IEnumerable<TResult> Translate<TResult>(
    DbDataReader reader
)

public:
generic<typename TResult>
IEnumerable<TResult>^ Translate(
    DbDataReader^ reader
)
member Translate :
        reader:DbDataReader -> IEnumerable<'TResult>

类型参数

TResult

要返回的 IEnumerable<(Of <(T>)>) 的类型。

参数

reader
类型： System.Data.Common DbDataReader
要转换的 IDataReader。

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TResult
>
)
>
)

由转换返回的对象的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
Translate 重载
System.Data.Linq 命名空间


DataContext ..::.Translate 方法 (DbDataReader)

DataContext
.
.
::
.
Translate 方法 (DbDataReader)
DataContext 类

将现有 DbDataReader 转换为对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function Translate ( _
    reader As DbDataReader _
) As IMultipleResults
public IMultipleResults Translate(
    DbDataReader reader
)
public:
IMultipleResults^ Translate(
    DbDataReader^ reader
)
member Translate :
        reader:DbDataReader -> IMultipleResults

参数

reader
类型： System.Data.Common DbDataReader
要转换的 IDataReader。

返回值

类型： System.Data.Linq IMultipleResults
由转换返回的对象的列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
Translate 重载
System.Data.Linq 命名空间


DataContext ..::.Translate 方法 (Type, DbDataReader)

DataContext
.
.
::
.
Translate 方法 (Type, DbDataReader)
DataContext 类

将现有 DbDataReader 转换为对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function Translate ( _
    elementType As Type, _
    reader As DbDataReader _
) As IEnumerable
public IEnumerable Translate(
    Type elementType,
    DbDataReader reader
)
public:
IEnumerable^ Translate(
    Type^ elementType,
    DbDataReader^ reader
)
member Translate :
        elementType:Type *
        reader:DbDataReader -> IEnumerable

参数

elementType
类型： System Type
要返回的 IEnumerable<(Of <(T>)>) 的类型。

  • 使查询结果中的列与对象中的字段和属性相匹配的算法如下所示：

    • 如果字段或属性映射到特定列名称，则结果集中应包含该列名称。

    • 如果未映射字段或属性，则结果集中应包含其名称与该字段或属性相同的列。

    • 通过先查找区分大小写的匹配来执行比较。如果未找到匹配项，则会继续搜索不区分大小写的匹配项。 通过先查找区分大小写的匹配来执行比较。如果未找到匹配项，则会继续搜索不区分大小写的匹配项。

  • 如果同时满足下列所有条件，则该查询应当返回（除延迟加载的对象外的）对象的所有跟踪的字段和属性：

    • T 是由 DataContext 显式跟踪的实体。

    • ObjectTrackingEnabled 为 true。

    • 实体具有主键。

否则会引发异常。
reader
类型： System.Data.Common DbDataReader
要转换的 IDataReader。

返回值

类型： System.Collections IEnumerable
由转换返回的对象的列表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
Translate 重载
System.Data.Linq 命名空间


DataContext 属性

DataContext 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataContext 类

DataContext 类型公开以下成员。

名称 说明
页首

参考

DataContext 类
System.Data.Linq 命名空间


DataContext ..::.ChangeConflicts 属性

DataContext
.
.
::
.
ChangeConflicts 属性
DataContext 类

返回调用 SubmitChanges 时导致并发冲突的对象的集合。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property ChangeConflicts As ChangeConflictCollection
    Get
public ChangeConflictCollection ChangeConflicts { get; }
public:
property ChangeConflictCollection^ ChangeConflicts {
    ChangeConflictCollection^ get ();
}
member ChangeConflicts : ChangeConflictCollection

属性值

类型： System.Data.Linq ChangeConflictCollection
对象的集合。

下面的示例演示如何循环访问集合以检索冲突信息。

Dim db As New Northwnd("...")

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine("Optimistic concurrency error.")
    Console.WriteLine(ex.Message)
    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        Dim metatable As MetaTable = db.Mapping.GetTable(occ.Object.GetType())
        Dim entityInConflict = occ.Object

        Console.WriteLine("Table name: " & metatable.TableName)
        Console.Write("Customer ID: ")
        Console.WriteLine(entityInConflict.CustomerID)
        Console.ReadLine()
    Next
End Try

Northwnd db = new Northwnd("...");

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine("Optimistic concurrency error.");
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
        Customer entityInConflict = (Customer)occ.Object;
        Console.WriteLine("Table name: {0}", metatable.TableName);
        Console.Write("Customer ID: ");
        Console.WriteLine(entityInConflict.CustomerID);
        Console.ReadLine();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.CommandTimeout 属性

DataContext
.
.
::
.
CommandTimeout 属性
DataContext 类

增大查询的超时期限，如果不增大则会在默认超时期限间出现超时。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property CommandTimeout As Integer
    Get
    Set
public int CommandTimeout { get; set; }
public:
property int CommandTimeout {
    int get ();
    void set (int value);
}
member CommandTimeout : int with get, set

属性值

类型： System Int32
表示秒的整数值。

此属性可获取或设置用于执行生成的命令 (IDbCommands) 的命令超时。有关更多信息，请参见CommandTimeout。 此属性可获取或设置用于执行生成的命令 (IDbCommands) 的命令超时。有关更多信息，请参见CommandTimeout。

未设置此属性时，会使用 CommandTimeout 的默认值执行查询命令。此默认值由存储提供程序设置。请注意，如果此值设置为非零值，一些提供程序可能引发异常。 未设置此属性时，会使用 CommandTimeout 的默认值执行查询命令。此默认值由存储提供程序设置。请注意，如果此值设置为非零值，一些提供程序可能引发异常。 未设置此属性时，会使用 CommandTimeout 的默认值执行查询命令。此默认值由存储提供程序设置。请注意，如果此值设置为非零值，一些提供程序可能引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.Connection 属性

DataContext
.
.
::
.
Connection 属性
DataContext 类

返回由框架使用的连接。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Connection As DbConnection
    Get
public DbConnection Connection { get; }
public:
property DbConnection^ Connection {
    DbConnection^ get ();
}
member Connection : DbConnection

属性值

类型： System.Data.Common DbConnection
由框架使用的连接。

您可以使用此属性与 ADO.NET 关系代码进行交互操作。

在用户显式打开返回的连接之前，返回的连接将为关闭状态。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.DeferredLoadingEnabled 属性

DataContext
.
.
::
.
DeferredLoadingEnabled 属性
DataContext 类

指定是否延迟加载一对多关系或一对一关系。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property DeferredLoadingEnabled As Boolean
    Get
    Set
public bool DeferredLoadingEnabled { get; set; }
public:
property bool DeferredLoadingEnabled {
    bool get ();
    void set (bool value);
}
member DeferredLoadingEnabled : bool with get, set

属性值

类型： System Boolean
如果启用延迟加载，则为 true；否则为 false。

代码访问这些关系之一时，如果该关系为一对一，则返回 null；如果该关系为一对多，则返回空集合。这些关系仍然可通过设置 LoadOptions 属性来填充。 代码访问这些关系之一时，如果该关系为一对一，则返回 null；如果该关系为一对多，则返回空集合。这些关系仍然可通过设置 LoadOptions 属性来填充。

此属性的主方案是使您能够提取一部分对象模型并将其发送出去（如发送到 Web 服务）。

说明 说明

如果执行查询后将此属性设置为 false，则会引发异常。有关更多信息，请参见下面的有效模式部分。 如果执行查询后将此属性设置为 false，则会引发异常。有关更多信息，请参见下面的有效模式部分。

有效模式

延迟加载需要对象跟踪。仅下列三种模式有效： 延迟加载需要对象跟踪。仅下列三种模式有效：

  • ObjectTrackingEnabled = false.DeferredLoadingEnabled 被忽略并且被推断为  false。此行为与只读的 DataContext 相对应。
ObjectTrackingEnabled = false.DeferredLoadingEnabled 被忽略并且被推断为  false。此行为与只读的 DataContext 相对应。
ObjectTrackingEnabled = false.DeferredLoadingEnabled 被忽略并且被推断为  false。此行为与只读的 DataContext 相对应。

  • ObjectTrackingEnabled = true.DeferredLoadingEnabled = false.这种情况对应于 DataContext，它允许用户使用 LoadWith 指令来加载对象图，但不允许延迟加载。
ObjectTrackingEnabled = true.DeferredLoadingEnabled = false.这种情况对应于 DataContext，它允许用户使用 LoadWith 指令来加载对象图，但不允许延迟加载。
ObjectTrackingEnabled = true.DeferredLoadingEnabled = false.这种情况对应于 DataContext，它允许用户使用 LoadWith 指令来加载对象图，但不允许延迟加载。

  • 两项均设置为 true。这是默认值。 两项均设置为 true。这是默认值。

执行查询后，这些标志可能不会更改。在执行使用该 DataContext 的第一个查询后的任何更改都会引发异常。 执行查询后，这些标志可能不会更改。在执行使用该 DataContext 的第一个查询后的任何更改都会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.LoadOptions 属性

DataContext
.
.
::
.
LoadOptions 属性
DataContext 类

获取或设置与此 DataContext 关联的 DataLoadOptions。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property LoadOptions As DataLoadOptions
    Get
    Set
public DataLoadOptions LoadOptions { get; set; }
public:
property DataLoadOptions^ LoadOptions {
    DataLoadOptions^ get ();
    void set (DataLoadOptions^ value);
}
member LoadOptions : DataLoadOptions with get, set

属性值

类型： System.Data.Linq DataLoadOptions
相关数据的预提取加载选项。

此属性可获取或设置用于定义延迟加载的成员的预提取行为和相关集合的成员资格的选项。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.Log 属性

DataContext
.
.
::
.
Log 属性
DataContext 类

指定要写入 SQL 查询或命令的目标。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Log As TextWriter
    Get
    Set
public TextWriter Log { get; set; }
public:
property TextWriter^ Log {
    TextWriter^ get ();
    void set (TextWriter^ value);
}
member Log : TextWriter with get, set

属性值

类型： System.IO TextWriter
要用于编写命令的 TextReader。

将此属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 可禁用命令记录。

下面的示例在控制台窗口中显示生成的 SQL，然后显示查询的结果。

db.Log = Console.Out
Dim custQuery = _
From cust In db.Customers _
Where cust.City = "London" _
Select cust

For Each custObj In custQuery
    Console.WriteLine(custObj.ContactName)
Next

db.Log = Console.Out;
var custQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (var custObj in custQuery)
{
    Console.WriteLine(custObj.ContactName);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.Mapping 属性

DataContext
.
.
::
.
Mapping 属性
DataContext 类

返回映射所基于的 MetaModel。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Mapping As MetaModel
    Get
public MetaModel Mapping { get; }
public:
property MetaModel^ Mapping {
    MetaModel^ get ();
}
member Mapping : MetaModel

属性值

类型： System.Data.Linq.Mapping MetaModel
MetaModel。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.ObjectTrackingEnabled 属性

DataContext
.
.
::
.
ObjectTrackingEnabled 属性
DataContext 类

指示框架跟踪此 DataContext 的原始值和对象标识。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property ObjectTrackingEnabled As Boolean
    Get
    Set
public bool ObjectTrackingEnabled { get; set; }
public:
property bool ObjectTrackingEnabled {
    bool get ();
    void set (bool value);
}
member ObjectTrackingEnabled : bool with get, set

属性值

类型： System Boolean
若要启用对象跟踪，则为 true；否则为 false。默认值为 true。 若要启用对象跟踪，则为 true；否则为 false。默认值为 true。

将此属性设置为 false 可提高检索时的性能，因为这样可减少要跟踪的项目。

在以下情况中，将引发异常：

  • 执行查询后将属性设置为 false。

    有关更多信息，请参见 DataContext 中的“有效模式”部分。

  • 属性设置为 false 且调用 SubmitChanges。

如果 ObjectTrackingEnabled 为 false，则将忽略 DeferredLoadingEnabled 并将其作为 false 处理。在此情况下，DataContext 为只读。 如果 ObjectTrackingEnabled 为 false，则将忽略 DeferredLoadingEnabled 并将其作为 false 处理。在此情况下，DataContext 为只读。

如果 ObjectTrackingEnabled 为 true，则 DeferredLoadingEnabled 为 false。在此情况下，DataContext 允许您使用 LoadWith 指令加载对象图，但不允许延迟加载。 如果 ObjectTrackingEnabled 为 true，则 DeferredLoadingEnabled 为 false。在此情况下，DataContext 允许您使用 LoadWith 指令加载对象图，但不允许延迟加载。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataContext ..::.Transaction 属性

DataContext
.
.
::
.
Transaction 属性
DataContext 类

为 .NET Framework 设置要用于访问数据库的本地事务。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Transaction As DbTransaction
    Get
    Set
public DbTransaction Transaction { get; set; }
public:
property DbTransaction^ Transaction {
    DbTransaction^ get ();
    void set (DbTransaction^ value);
}
member Transaction : DbTransaction with get, set

属性值

类型： System.Data.Common DbTransaction
执行查询和命令时由 DataContext 使用的事务对象。

此属性的主方案是与 ADO.NET 关系代码进行交互操作。例如，当编写您自己的 Create/Update/Delete 方法以对 ADO Command 对象设置 Transaction 属性时，请使用此属性。 此属性的主方案是与 ADO.NET 关系代码进行交互操作。例如，当编写您自己的 Create/Update/Delete 方法以对 ADO Command 对象设置 Transaction 属性时，请使用此属性。

注意下列事项：

  • 如果未显式设置此属性，则 getter 返回 null。

  • 如果该代码在 Transaction 上下文中执行，则设置此属性将引发异常。

  • 如果设置了此属性且打开了新的 Transaction，则在执行查询或更新时会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataContext 类
DataContext 成员
System.Data.Linq 命名空间


DataLoadOptions 类

DataLoadOptions 类
成员

提供相关数据的立即加载和筛选。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class DataLoadOptions
public sealed class DataLoadOptions
public ref class DataLoadOptions sealed
[<SealedAttribute>]
type DataLoadOptions =  class end

通用

查询某对象时，实际上您只检索请求的对象。不会同时自动获取相关对象。（有关更多信息，请参见 跨关系查询 (LINQ to SQL)。） 查询某对象时，实际上您只检索请求的对象。不会同时自动获取相关对象。（有关更多信息，请参见 跨关系查询 (LINQ to SQL)。） 查询某对象时，实际上您只检索请求的对象。不会同时自动获取相关对象。（有关更多信息，请参见 跨关系查询 (LINQ to SQL)。）

DataLoadOptions 类提供两种方法以立即加载指定的相关数据。LoadWith 方法允许立即加载与主目标相关的数据。AssociateWith 方法允许筛选相关对象。 DataLoadOptions 类提供两种方法以立即加载指定的相关数据。LoadWith 方法允许立即加载与主目标相关的数据。AssociateWith 方法允许筛选相关对象。 DataLoadOptions 类提供两种方法以立即加载指定的相关数据。LoadWith 方法允许立即加载与主目标相关的数据。AssociateWith 方法允许筛选相关对象。

规则

注意下列与 DataLoadOptions 用法相关的规则：

  • 在执行第一次查询后将 DataLoadOptions 分配给 DataContext 会引发异常。

  • 在将 DataLoadOptions 分配给 DataContext 后对其进行修改会引发异常。

循环处理

LoadWith 和 AssociateWith 指令不能创建循环。下面演示此类图形的示例： LoadWith 和 AssociateWith 指令不能创建循环。下面演示此类图形的示例：

  • 示例 1：自递归

    • dlo.LoadWith<Employee>(e => e.Reports);

  • 示例 2：后向指针

    • dlo.LoadWith <Customer>(c => C.Orders);

    • dlo.LoadWith <Order>(o => o.Customer);

  • 示例 3：延长循环

    尽管它不应该发生在正常模式中，但存在这个可能性。

    • dlo.LoadWith <A>(a => a.Bs);

    • dlo.LoadWith <B>(b => b.Cs);

    • dlo.LoadWith <C>(c => c.As);

  • 示例 4：自递归子查询

    • dlo.AssociateWith<A>(a=>a.As.Where(a=>a.Id=33));

  • 示例 5：延长递归子查询

    • dlo.AssociateWith<A>(a=>a.Bs.Where(b=>b.Id==3));

    • dlo.AssociateWith<B>(b=>b.As.Where(a=>a.Id==3));

下面的一般规则可以帮助您了解这些情形下会发生什么：

LoadWith 每次调用 LoadWith 时都会检查是否已将循环引入到图形中。如果存在（如示例 1、2 和 3），则会引发异常。 LoadWith 每次调用 LoadWith 时都会检查是否已将循环引入到图形中。如果存在（如示例 1、2 和 3），则会引发异常。

AssociateWith 运行时的引擎不会将现有 SubQuery 子句应用到表达式中的关系。

  • 在示例 4 中，对所有而不仅仅是由 SubQuery 表达式自身辅助筛选的（因为是递归的）A 执行 Where 子句。

  • 在示例 5 中，第一个 Where 子句被应用于所有 B，即使存在对 B 的子查询。第二个 Where 子句被应用于所有 A，即使存在对 A 的子查询。 在示例 5 中，第一个 Where 子句被应用于所有 B，即使存在对 B 的子查询。第二个 Where 子句被应用于所有 A，即使存在对 A 的子查询。

从 Northwind 示例数据库中检索 Customers 时，您可以使用 DataLoadOptions 来指定同时检索 Orders。您甚至可指定要检索 Orders 的哪个子集。 从 Northwind 示例数据库中检索 Customers 时，您可以使用 DataLoadOptions 来指定同时检索 Orders。您甚至可指定要检索 Orders 的哪个子集。

System.Data.Linq System.Data.Linq..::.DataLoadOptionsDataLoadOptions
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataLoadOptions 成员
System.Data.Linq 命名空间


DataLoadOptions 成员

DataLoadOptions 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataLoadOptions 类

提供相关数据的立即加载和筛选。

DataLoadOptions 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataLoadOptions 类
System.Data.Linq 命名空间


DataLoadOptions 构造函数

DataLoadOptions 构造函数
DataLoadOptions 类

初始化 DataLoadOptions 类的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public DataLoadOptions()
public:
DataLoadOptions()
new : unit -> DataLoadOptions

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataLoadOptions 类
DataLoadOptions 成员
System.Data.Linq 命名空间


DataLoadOptions 方法

DataLoadOptions 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataLoadOptions 类

DataLoadOptions 类型公开以下成员。

名称 说明
页首

参考

DataLoadOptions 类
System.Data.Linq 命名空间


DataLoadOptions ..::.AssociateWith 方法

DataLoadOptions
.
.
::
.
AssociateWith 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataLoadOptions 类

筛选针对特定关系检索的对象。

名称 说明
页首

使用 AssociateWith 方法指定子查询以限制检索的数据量。

在下面的示例中，AssociateWith 方法将检索的 Orders 限制为当天尚未装运的那些 Orders。如果没有此方法，则会检索所有 Orders，即使只需要一个子集。 在下面的示例中，AssociateWith 方法将检索的 Orders 限制为当天尚未装运的那些 Orders。如果没有此方法，则会检索所有 Orders，即使只需要一个子集。

Dim db As New Northwnd("c:\northwnd.mdf")

Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.AssociateWith(Of Customer)(Function(c As Customer) _
        c.Orders.Where(Function(p) p.ShippedDate <> DateTime.Today))
db.LoadOptions = dlo

Dim custOrderQuery = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust

For Each custObj In custOrderQuery
    Console.WriteLine(custObj.CustomerID)
    For Each ord In custObj.Orders
        Console.WriteLine("{0}{1}", vbTab, ord.OrderDate)
    Next

Next

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.AssociateWith<Customer>(c => c.Orders.Where(p => p.ShippedDate != DateTime.Today));
db.LoadOptions = dlo;
var custOrderQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (Customer custObj in custOrderQuery)
{
    Console.WriteLine(custObj.CustomerID);
    foreach (Order ord in custObj.Orders)
    {
        Console.WriteLine("\t {0}",ord.OrderDate);
    }
}

参考

DataLoadOptions 类
DataLoadOptions 成员
System.Data.Linq 命名空间


DataLoadOptions ..::.AssociateWith <(Of <(T >)>) 方法 (Expression <(Of <(Func <(Of <(T, Object >)>) >)>))

DataLoadOptions
.
.
::
.
AssociateWith
<
(Of
<
(
T
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
T, Object
>
)
>
)
>
)
>
)
)
DataLoadOptions 类

筛选针对特定关系检索的对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub AssociateWith(Of T) ( _
    expression As Expression(Of Func(Of T, Object)) _
)
public void AssociateWith<T>(
    Expression<Func<T, Object>> expression
)

public:
generic<typename T>
void AssociateWith(
    Expression<Func<T, Object^>^>^ expression
)
member AssociateWith :
        expression:Expression<Func<'T, Object>> -> unit

类型参数

T

要查询的类型。

如果未映射该类型，则会引发异常。

参数

expression
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
T, Object
>
)
>
)
>
)
>
)

标识要对特定一对多字段或属性使用的查询。注意下列事项： 标识要对特定一对多字段或属性使用的查询。注意下列事项：

  • 如果该表达式不是以表示一对多关系的字段或属性开头，则会引发异常。

  • 如果无效运算符出现在表达式中，则会引发异常。有效运算符包括： 如果无效运算符出现在表达式中，则会引发异常。有效运算符包括：

    • Where

    • OrderBy

    • ThenBy

    • OrderByDescending

    • ThenByDescending

    • Take

有关如何避免循环的信息，请参见 DataLoadOptions。

在下面的示例中，内部循环仅循环访问当天尚未装运的那些 Orders。

Dim db As New Northwnd("c:\northwnd.mdf")

Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.AssociateWith(Of Customer)(Function(c As Customer) _
        c.Orders.Where(Function(p) p.ShippedDate <> DateTime.Today))
db.LoadOptions = dlo

Dim custOrderQuery = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust

For Each custObj In custOrderQuery
    Console.WriteLine(custObj.CustomerID)
    For Each ord In custObj.Orders
        Console.WriteLine("{0}{1}", vbTab, ord.OrderDate)
    Next

Next

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.AssociateWith<Customer>(c => c.Orders.Where(p => p.ShippedDate != DateTime.Today));
db.LoadOptions = dlo;
var custOrderQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (Customer custObj in custOrderQuery)
{
    Console.WriteLine(custObj.CustomerID);
    foreach (Order ord in custObj.Orders)
    {
        Console.WriteLine("\t {0}",ord.OrderDate);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataLoadOptions 类
DataLoadOptions 成员
AssociateWith 重载
System.Data.Linq 命名空间


DataLoadOptions ..::.AssociateWith 方法 (LambdaExpression)

DataLoadOptions
.
.
::
.
AssociateWith 方法 (LambdaExpression)
DataLoadOptions 类

筛选针对特定关系检索的对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub AssociateWith ( _
    expression As LambdaExpression _
)
public void AssociateWith(
    LambdaExpression expression
)
public:
void AssociateWith(
    LambdaExpression^ expression
)
member AssociateWith :
        expression:LambdaExpression -> unit

参数

expression
类型： System.Linq.Expressions LambdaExpression
标识要对特定一对多字段或属性使用的查询。注意下列事项： 标识要对特定一对多字段或属性使用的查询。注意下列事项：

  • 如果该表达式不是以表示一对多关系的字段或属性开头，则会引发异常。

  • 如果无效运算符出现在表达式中，则会引发异常。有效运算符包括： 如果无效运算符出现在表达式中，则会引发异常。有效运算符包括：

    • Where

    • OrderBy

    • ThenBy

    • OrderByDescending

    • ThenByDescending

    • Take

在下面的示例中，内部循环仅循环访问当天尚未装运的那些 Orders。

Dim db As New Northwnd("c:\northwnd.mdf")

Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.AssociateWith(Of Customer)(Function(c As Customer) _
        c.Orders.Where(Function(p) p.ShippedDate <> DateTime.Today))
db.LoadOptions = dlo

Dim custOrderQuery = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust

For Each custObj In custOrderQuery
    Console.WriteLine(custObj.CustomerID)
    For Each ord In custObj.Orders
        Console.WriteLine("{0}{1}", vbTab, ord.OrderDate)
    Next

Next

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.AssociateWith<Customer>(c => c.Orders.Where(p => p.ShippedDate != DateTime.Today));
db.LoadOptions = dlo;
var custOrderQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (Customer custObj in custOrderQuery)
{
    Console.WriteLine(custObj.CustomerID);
    foreach (Order ord in custObj.Orders)
    {
        Console.WriteLine("\t {0}",ord.OrderDate);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataLoadOptions 类
DataLoadOptions 成员
AssociateWith 重载
System.Data.Linq 命名空间


DataLoadOptions ..::.LoadWith 方法

DataLoadOptions
.
.
::
.
LoadWith 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataLoadOptions 类

检索与主目标相关的指定数据。

名称 说明
页首

使用 LoadWith 方法可指定应同时检索与主目标相关的哪些数据。例如，如果您知道您将需要有关客户的订单的信息，则可以使用 LoadWith 来确保在检索客户信息的同时检索订单信息。这种方法的结果是只检索一次数据库即可获取这两组信息。 使用 LoadWith 方法可指定应同时检索与主目标相关的哪些数据。例如，如果您知道您将需要有关客户的订单的信息，则可以使用 LoadWith 来确保在检索客户信息的同时检索订单信息。这种方法的结果是只检索一次数据库即可获取这两组信息。 使用 LoadWith 方法可指定应同时检索与主目标相关的哪些数据。例如，如果您知道您将需要有关客户的订单的信息，则可以使用 LoadWith 来确保在检索客户信息的同时检索订单信息。这种方法的结果是只检索一次数据库即可获取这两组信息。

下面的代码段演示如何使用非泛型方法。

DataLoadOptions options = new DataLoadOptions();
db.LoadOptions = options;
options.LoadWith((Customer c) => c.Orders);

在下面的示例中，在执行查询时会检索到位于伦敦的所有 Customers 所下的所有 Orders。因此，继续访问 Customer 对象的 Orders 属性不会触发新的数据库查询。 在下面的示例中，在执行查询时会检索到位于伦敦的所有 Customers 所下的所有 Orders。因此，继续访问 Customer 对象的 Orders 属性不会触发新的数据库查询。

Dim db As New Northwnd("c:\northwnd.mdf")

Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.LoadWith(Of Customer)(Function(c As Customer) c.Orders)
db.LoadOptions = dlo

Dim londonCustomers = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust

For Each custObj In londonCustomers
    Console.WriteLine(custObj.CustomerID)
Next

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo;

var londonCustomers =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (var custObj in londonCustomers)
{
    Console.WriteLine(custObj.CustomerID);
}

参考

DataLoadOptions 类
DataLoadOptions 成员
System.Data.Linq 命名空间


DataLoadOptions ..::.LoadWith <(Of <(T >)>) 方法 (Expression <(Of <(Func <(Of <(T, Object >)>) >)>))

DataLoadOptions
.
.
::
.
LoadWith
<
(Of
<
(
T
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
T, Object
>
)
>
)
>
)
>
)
)
DataLoadOptions 类

指定在为 T 类型的对象提交查询时要检索的子对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub LoadWith(Of T) ( _
    expression As Expression(Of Func(Of T, Object)) _
)
public void LoadWith<T>(
    Expression<Func<T, Object>> expression
)

public:
generic<typename T>
void LoadWith(
    Expression<Func<T, Object^>^>^ expression
)
member LoadWith :
        expression:Expression<Func<'T, Object>> -> unit

类型参数

T

要查询的类型。

如果未映射此类型，则会引发异常。

参数

expression
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
T, Object
>
)
>
)
>
)
>
)

标识要检索的字段或属性。
如果该表达式不标识表示一对一关系或一对多关系的字段或属性，则会引发异常。

您不能指定加载两个级别的关系（如 Orders.OrderDetails）。在这些情况下，您必须指定两个单独的 LoadWith 方法。 您不能指定加载两个级别的关系（如 Orders.OrderDetails）。在这些情况下，您必须指定两个单独的 LoadWith 方法。

若要避免循环，请参见 DataLoadOptions 中的“备注”部分。

在下面的示例中，在执行查询时会检索到位于伦敦的所有 Customers 所下的所有 Orders。因此，继续访问 Customer 对象的 Orders 属性不会触发新的数据库查询。 在下面的示例中，在执行查询时会检索到位于伦敦的所有 Customers 所下的所有 Orders。因此，继续访问 Customer 对象的 Orders 属性不会触发新的数据库查询。

Dim db As New Northwnd("c:\northwnd.mdf")

Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.LoadWith(Of Customer)(Function(c As Customer) c.Orders)
db.LoadOptions = dlo

Dim londonCustomers = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust

For Each custObj In londonCustomers
    Console.WriteLine(custObj.CustomerID)
Next

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo;

var londonCustomers =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (var custObj in londonCustomers)
{
    Console.WriteLine(custObj.CustomerID);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataLoadOptions 类
DataLoadOptions 成员
LoadWith 重载
System.Data.Linq 命名空间


DataLoadOptions ..::.LoadWith 方法 (LambdaExpression)

DataLoadOptions
.
.
::
.
LoadWith 方法 (LambdaExpression)
DataLoadOptions 类

通过使用 lambda 表达式检索与主目标相关的指定数据。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub LoadWith ( _
    expression As LambdaExpression _
)
public void LoadWith(
    LambdaExpression expression
)
public:
void LoadWith(
    LambdaExpression^ expression
)
member LoadWith :
        expression:LambdaExpression -> unit

参数

expression
类型： System.Linq.Expressions LambdaExpression
标识相关内容的 lambda 表达式。

在下面的示例中，在执行查询时会检索到位于伦敦的所有 Customers 所下的所有 Orders。因此，继续访问 Customer 对象的 Orders 属性不会触发新的数据库查询。 在下面的示例中，在执行查询时会检索到位于伦敦的所有 Customers 所下的所有 Orders。因此，继续访问 Customer 对象的 Orders 属性不会触发新的数据库查询。

Dim db As New Northwnd("c:\northwnd.mdf")

Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.LoadWith(Of Customer)(Function(c As Customer) c.Orders)
db.LoadOptions = dlo

Dim londonCustomers = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust

For Each custObj In londonCustomers
    Console.WriteLine(custObj.CustomerID)
Next

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo;

var londonCustomers =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (var custObj in londonCustomers)
{
    Console.WriteLine(custObj.CustomerID);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataLoadOptions 类
DataLoadOptions 成员
LoadWith 重载
System.Data.Linq 命名空间


DBConvert 类

DBConvert 类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

在内部使用以将一种类型转换为其他类型。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class DBConvert
public static class DBConvert
public ref class DBConvert abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type DBConvert =  class end

System.Data.Linq System.Data.Linq..::.DBConvertDBConvert
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DBConvert 成员
System.Data.Linq 命名空间


DBConvert 成员

DBConvert 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBConvert 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

在内部使用以将一种类型转换为其他类型。

名称 说明
页首

参考

DBConvert 类
System.Data.Linq 命名空间


DBConvert 方法

DBConvert 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBConvert 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。
名称 说明
页首

参考

DBConvert 类
System.Data.Linq 命名空间


DBConvert ..::.ChangeType 方法

DBConvert
.
.
::
.
ChangeType 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DBConvert 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

将一种类型更改为其他类型。

名称 说明
页首

参考

DBConvert 类
DBConvert 成员
System.Data.Linq 命名空间


DBConvert ..::.ChangeType <(Of <(T >)>) 方法 (Object)

DBConvert
.
.
::
.
ChangeType
<
(Of
<
(
T
>
)
>
)
方法 (Object)
DBConvert 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

将指定的值更改为当前类型。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function ChangeType(Of T) ( _
    value As Object _
) As T
public static T ChangeType<T>(
    Object value
)

public:
generic<typename T>
static T ChangeType(
    Object^ value
)
static member ChangeType :
        value:Object -> 'T

类型参数

T

要更改为的类型。

参数

value
类型： System Object
要转换的对象。

返回值

类型：T
一个包含转换值的指定类型的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DBConvert 类
DBConvert 成员
ChangeType 重载
System.Data.Linq 命名空间


DBConvert ..::.ChangeType 方法 (Object, Type)

DBConvert
.
.
::
.
ChangeType 方法 (Object, Type)
DBConvert 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

将指定的值更改为指定类型。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function ChangeType ( _
    value As Object, _
    type As Type _
) As Object
public static Object ChangeType(
    Object value,
    Type type
)
public:
static Object^ ChangeType(
    Object^ value,
    Type^ type
)
static member ChangeType :
        value:Object *
        type:Type -> Object

参数

value
类型： System Object
要转换的对象。
type
类型： System Type
对象要转换为的类型。

返回值

类型： System Object
一个包含指定类型的转换值的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DBConvert 类
DBConvert 成员
ChangeType 重载
System.Data.Linq 命名空间


DuplicateKeyException 类

DuplicateKeyException 类
成员

当尝试使用正在使用的键将对象添加到标识缓存时引发。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Class DuplicateKeyException _
    Inherits InvalidOperationException
public class DuplicateKeyException : InvalidOperationException
public ref class DuplicateKeyException : public InvalidOperationException
type DuplicateKeyException =
    class
        inherit InvalidOperationException
    end

System.Data.Linq System.Data.Linq..::.DuplicateKeyExceptionDuplicateKeyException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateKeyException 成员
System.Data.Linq 命名空间


DuplicateKeyException 成员

DuplicateKeyException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateKeyException 类

当尝试使用正在使用的键将对象添加到标识缓存时引发。

DuplicateKeyException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DuplicateKeyException 类
System.Data.Linq 命名空间


DuplicateKeyException 构造函数

DuplicateKeyException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateKeyException 类

初始化 DuplicateKeyException 类的一个新实例。

名称 说明
页首

参考

DuplicateKeyException 类
DuplicateKeyException 成员
System.Data.Linq 命名空间


DuplicateKeyException 构造函数 (Object)

DuplicateKeyException 构造函数 (Object)
DuplicateKeyException 类

初始化 DuplicateKeyException 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    duplicate As Object _
)
public DuplicateKeyException(
    Object duplicate
)
public:
DuplicateKeyException(
    Object^ duplicate
)
new :
        duplicate:Object -> DuplicateKeyException

参数

duplicate
类型： System Object
导致引发异常的重复键。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateKeyException 类
DuplicateKeyException 成员
DuplicateKeyException 重载
System.Data.Linq 命名空间


DuplicateKeyException 构造函数 (Object, String)

DuplicateKeyException 构造函数 (Object, String)
DuplicateKeyException 类

通过引用重复键并提供错误消息来初始化 DuplicateKeyException 类的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    duplicate As Object, _
    message As String _
)
public DuplicateKeyException(
    Object duplicate,
    string message
)
public:
DuplicateKeyException(
    Object^ duplicate,
    String^ message
)
new :
        duplicate:Object *
        message:string -> DuplicateKeyException

参数

duplicate
类型： System Object
导致引发异常的重复键。
message
类型： System String
当引发异常时要显示的消息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateKeyException 类
DuplicateKeyException 成员
DuplicateKeyException 重载
System.Data.Linq 命名空间


DuplicateKeyException 构造函数 (Object, String, Exception)

DuplicateKeyException 构造函数 (Object, String, Exception)
DuplicateKeyException 类

通过引用重复键、提供错误消息并指定导致引发此异常的异常来初始化 DuplicateKeyException 类的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    duplicate As Object, _
    message As String, _
    innerException As Exception _
)
public DuplicateKeyException(
    Object duplicate,
    string message,
    Exception innerException
)
public:
DuplicateKeyException(
    Object^ duplicate,
    String^ message,
    Exception^ innerException
)
new :
        duplicate:Object *
        message:string *
        innerException:Exception -> DuplicateKeyException

参数

duplicate
类型： System Object
导致引发异常的重复键。
message
类型： System String
当引发异常时要显示的消息。
innerException
类型： System Exception
导致引发 DuplicateKeyException 异常的上一个异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateKeyException 类
DuplicateKeyException 成员
DuplicateKeyException 重载
System.Data.Linq 命名空间


DuplicateKeyException 方法

DuplicateKeyException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateKeyException 类

DuplicateKeyException 类型公开以下成员。

名称 说明
页首

参考

DuplicateKeyException 类
System.Data.Linq 命名空间


DuplicateKeyException 属性

DuplicateKeyException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateKeyException 类

DuplicateKeyException 类型公开以下成员。

名称 说明
页首

参考

DuplicateKeyException 类
System.Data.Linq 命名空间


DuplicateKeyException ..::.Object 属性

DuplicateKeyException
.
.
::
.
Object 属性
DuplicateKeyException 类

获取导致异常的对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Object As Object
    Get
public Object Object { get; }
public:
property Object^ Object {
    Object^ get ();
}
member Object : Object

属性值

类型： System Object
导致异常的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DuplicateKeyException 类
DuplicateKeyException 成员
System.Data.Linq 命名空间


DuplicateKeyException 事件

DuplicateKeyException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DuplicateKeyException 类

DuplicateKeyException 类型公开以下成员。

名称 说明
页首

参考

DuplicateKeyException 类
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) 结构

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
结构
成员

为 LINQ to SQL 应用程序中的一对多关系的单一实例方提供延迟加载和关系维护。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Structure EntityRef(Of TEntity As Class)
public struct EntityRef<TEntity>
where TEntity : class

generic<typename TEntity>
where TEntity : ref class
public value class EntityRef
[<SealedAttribute>]
type EntityRef<'TEntity when 'TEntity : not struct> =  struct end

类型参数

TEntity

目标实体的类型。

此类与 EntitySet<(Of <(TEntity>)>) 一起结合使用。

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntityRef TEntity 成员
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) 成员

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityRef

为 LINQ to SQL 应用程序中的一对多关系的单一实例方提供延迟加载和关系维护。

EntityRef TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntityRef TEntity 结构
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) 构造函数

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityRef

初始化 EntityRef<(Of <(TEntity>)>) 类的新实例。

名称 说明
页首

参考

EntityRef TEntity 结构
EntityRef TEntity 成员
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) 构造函数 (TEntity)

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
构造函数 (TEntity)
EntityRef

通过指定目标实体初始化 EntityRef<(Of <(TEntity>)>) 类的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    entity As TEntity _
)
public EntityRef(
    TEntity entity
)
public:
EntityRef(
    TEntity entity
)
new :
        entity:'TEntity -> EntityRef

参数

entity
类型： TEntity
目标实体。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntityRef TEntity 结构
EntityRef TEntity 成员
EntityRef TEntity 重载
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) 构造函数 (EntityRef <(Of <(TEntity >)>))

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
构造函数 (EntityRef
<
(Of
<
(
TEntity
>
)
>
)
)
EntityRef

通过引用目标实体初始化 EntityRef<(Of <(TEntity>)>) 类的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    entityRef As EntityRef(Of TEntity) _
)
public EntityRef(
    EntityRef<TEntity> entityRef
)
public:
EntityRef(
    EntityRef<TEntity> entityRef
)
new :
        entityRef:EntityRef<'TEntity> -> EntityRef

参数

entityRef
类型： System.Data.Linq EntityRef
<
(Of
<
(
TEntity
>
)
>
)

目标实体。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntityRef TEntity 结构
EntityRef TEntity 成员
EntityRef TEntity 重载
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) 构造函数 (IEnumerable <(Of <(TEntity >)>))

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
构造函数 (IEnumerable
<
(Of
<
(
TEntity
>
)
>
)
)
EntityRef

通过指定源初始化 EntityRef<(Of <(TEntity>)>) 类的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    source As IEnumerable(Of TEntity) _
)
public EntityRef(
    IEnumerable<TEntity> source
)
public:
EntityRef(
    IEnumerable<TEntity>^ source
)
new :
        source:IEnumerable<'TEntity> -> EntityRef

参数

source
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TEntity
>
)
>
)

引用源。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntityRef TEntity 结构
EntityRef TEntity 成员
EntityRef TEntity 重载
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) 方法

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityRef

EntityRef TEntity 类型公开以下成员。

名称 说明
页首

参考

EntityRef TEntity 结构
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) 属性

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityRef

EntityRef TEntity 类型公开以下成员。

名称 说明
页首

参考

EntityRef TEntity 结构
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) ..::.Entity 属性

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Entity 属性
EntityRef

获取或设置目标实体。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Entity As TEntity
    Get
    Set
public TEntity Entity { get; set; }
public:
property TEntity Entity {
    TEntity get ();
    void set (TEntity value);
}
member Entity : 'TEntity with get, set

属性值

类型： TEntity
目标实体。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntityRef TEntity 结构
EntityRef TEntity 成员
System.Data.Linq 命名空间


EntityRef <(Of <(TEntity >)>) ..::.HasLoadedOrAssignedValue 属性

EntityRef
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
HasLoadedOrAssignedValue 属性
EntityRef

获取一个值，该值指示是否已加载或分配目标。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property HasLoadedOrAssignedValue As Boolean
    Get
public bool HasLoadedOrAssignedValue { get; }
public:
property bool HasLoadedOrAssignedValue {
    bool get ();
}
member HasLoadedOrAssignedValue : bool

属性值

类型： System Boolean
如果已加载或分配目标，则为 True。

即使目标中的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），也会返回 True。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntityRef TEntity 结构
EntityRef TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) 类

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
类
成员

为 LINQ to SQL 应用程序中的一对多关系和一对一关系的集合方提供延迟加载和关系维护。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class EntitySet(Of TEntity As Class) _
    Implements IList, ICollection, IList(Of TEntity),  _
    ICollection(Of TEntity), IEnumerable(Of TEntity), IEnumerable,  _
    IListSource
public sealed class EntitySet<TEntity> : IList,
    ICollection, IList<TEntity>, ICollection<TEntity>, IEnumerable<TEntity>,
    IEnumerable, IListSource
where TEntity : class

generic<typename TEntity>
where TEntity : ref class
public ref class EntitySet sealed : IList,
    ICollection, IList<TEntity>, ICollection<TEntity>, IEnumerable<TEntity>,
    IEnumerable, IListSource
[<SealedAttribute>]
type EntitySet<'TEntity when 'TEntity : not struct> =
    class
        interface IList
        interface ICollection
        interface IList<'TEntity>
        interface ICollection<'TEntity>
        interface IEnumerable<'TEntity>
        interface IEnumerable
        interface IListSource
    end

类型参数

TEntity

目标实体的数据类型。

此类与 EntityRef<(Of <(TEntity>)>) 一起结合使用。

System.Data.Linq
System.Data.Linq..::.EntitySet<(Of <(TEntity>)>)EntitySet
System.Data.Linq..::.EntitySet<(Of <(TEntity>)>)TEntity
System.Data.Linq..::.EntitySet<(Of <(TEntity>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) 成员

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySet

为 LINQ to SQL 应用程序中的一对多关系和一对一关系的集合方提供延迟加载和关系维护。

EntitySet TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntitySet TEntity 类
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) 构造函数

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySet

初始化 EntitySet<(Of <(TEntity>)>) 类的新实例。

名称 说明
页首

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) 构造函数

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
构造函数
EntitySet

初始化 EntitySet<(Of <(TEntity>)>) 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public EntitySet()
public:
EntitySet()
new : unit -> EntitySet

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
EntitySet TEntity 重载
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) 构造函数 (Action <(Of <(TEntity >)>), Action <(Of <(TEntity >)>))

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
构造函数 (Action
<
(Of
<
(
TEntity
>
)
>
)
, Action
<
(Of
<
(
TEntity
>
)
>
)
)
EntitySet

在为添加和移除操作提供处理程序的同时，初始化 EntitySet<(Of <(TEntity>)>) 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    onAdd As Action(Of TEntity), _
    onRemove As Action(Of TEntity) _
)
public EntitySet(
    Action<TEntity> onAdd,
    Action<TEntity> onRemove
)
public:
EntitySet(
    Action<TEntity>^ onAdd,
    Action<TEntity>^ onRemove
)
new :
        onAdd:Action<'TEntity> *
        onRemove:Action<'TEntity> -> EntitySet

参数

onAdd
类型： System Action
<
(Of
<
(
TEntity
>
)
>
)

Add 的委托。
onRemove
类型： System Action
<
(Of
<
(
TEntity
>
)
>
)

Remove 的委托。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
EntitySet TEntity 重载
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySet

EntitySet TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntitySet TEntity 类
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.Add 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Add 方法
EntitySet

添加实体。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Add ( _
    entity As TEntity _
)
public void Add(
    TEntity entity
)
public:
virtual void Add(
    TEntity entity
) sealed
abstract Add :
        entity:'TEntity -> unit
override Add :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要添加的实体。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.AddRange 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
AddRange 方法
EntitySet

添加实体的集合。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub AddRange ( _
    collection As IEnumerable(Of TEntity) _
)
public void AddRange(
    IEnumerable<TEntity> collection
)
public:
void AddRange(
    IEnumerable<TEntity>^ collection
)
member AddRange :
        collection:IEnumerable<'TEntity> -> unit

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TEntity
>
)
>
)

要添加的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.Assign 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Assign 方法
EntitySet

将 EntitySet<(Of <(TEntity>)>) 集合分配给其他 EntitySet<(Of <(TEntity>)>) 集合。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Assign ( _
    entitySource As IEnumerable(Of TEntity) _
)
public void Assign(
    IEnumerable<TEntity> entitySource
)
public:
void Assign(
    IEnumerable<TEntity>^ entitySource
)
member Assign :
        entitySource:IEnumerable<'TEntity> -> unit

参数

entitySource
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TEntity
>
)
>
)

要分配的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.Clear 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Clear 方法
EntitySet

移除所有项。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Clear
public void Clear()
public:
virtual void Clear() sealed
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.Contains 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Contains 方法
EntitySet

指定 EntitySet<(Of <(TEntity>)>) 是否包含特定实体。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function Contains ( _
    entity As TEntity _
) As Boolean
public bool Contains(
    TEntity entity
)
public:
virtual bool Contains(
    TEntity entity
) sealed
abstract Contains :
        entity:'TEntity -> bool
override Contains :
        entity:'TEntity -> bool

参数

entity
类型： TEntity
实体。

返回值

类型： System Boolean
如果 EntitySet<(Of <(TEntity>)>) 包含该实体，则为 true；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.CopyTo 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
CopyTo 方法
EntitySet

将 EntitySet<(Of <(TEntity>)>) 复制到数组。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub CopyTo ( _
    array As TEntity(), _
    arrayIndex As Integer _
)
public void CopyTo(
    TEntity[] array,
    int arrayIndex
)
public:
virtual void CopyTo(
    array<TEntity>^ array,
    int arrayIndex
) sealed
abstract CopyTo :
        array:'TEntity[] *
        arrayIndex:int -> unit
override CopyTo :
        array:'TEntity[] *
        arrayIndex:int -> unit

参数

array
类型：
array<
TEntity
>
[]
()
[]

要复制到的数组。
arrayIndex
类型： System Int32
数组中的起始索引。

实现

下面的 C# 示例显示此方法的一个用途：

var customer = (from c in db.Customers
   where c.CustomerID == "ALFKI"
   select c).Single();

Order[] orderArray = new Order[customer.Orders.Count];

customer.Orders.CopyTo(orderArray,0)；在 Visual Basic 中：

Dim customer = (From c In db.Customers _
   Where c.CustomerID = "ALFKI" _
   Select c).[Single]()

Dim orderArray As Order() = New Order(customer.Orders.Count - 1) {}
customer.Orders.CopyTo(orderArray, 0)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.GetEnumerator 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
GetEnumerator 方法
EntitySet

返回一个循环访问集合的枚举器。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetEnumerator As IEnumerator(Of TEntity)
public IEnumerator<TEntity> GetEnumerator()
public:
virtual IEnumerator<TEntity>^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator<'TEntity>
override GetEnumerator : unit -> IEnumerator<'TEntity>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
TEntity
>
)
>
)

一个 System.Collections.Generic..::.IEnumerator<(Of <(T>)>)。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.GetNewBindingList 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
GetNewBindingList 方法
EntitySet

创建用于绑定到数据源的新列表。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetNewBindingList As IBindingList
public IBindingList GetNewBindingList()
public:
IBindingList^ GetNewBindingList()
member GetNewBindingList : unit -> IBindingList

返回值

类型： System.ComponentModel IBindingList
用于绑定到数据源的新 IBindingList。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.ICollection ..::.CopyTo 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ICollection
.
.
::
.
CopyTo 方法
EntitySet

有关此成员的说明，请参见 CopyTo。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub CopyTo ( _
    array As Array, _
    index As Integer _
) Implements ICollection.CopyTo
void ICollection.CopyTo(
    Array array,
    int index
)
private:
virtual void CopyTo(
    Array^ array,
    int index
) sealed = ICollection::CopyTo
private abstract CopyTo :
        array:Array *
        index:int -> unit
private override CopyTo :
        array:Array *
        index:int -> unit

参数

array
类型： System Array
集合的元素将复制到其中的数组。
index
类型： System Int32
数组索引，从此处开始复制。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 ICollection 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 ICollection 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IEnumerable ..::.GetEnumerator 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
EntitySet

有关此成员的说明，请参见 IEnumerable..::.GetEnumerator。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
可用于循环访问集合的 System.Collections..::.IEnumerator 对象。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.Collections..::.IEnumerable 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.Collections..::.IEnumerable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IList ..::.Add 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IList
.
.
::
.
Add 方法
EntitySet

有关此成员的说明，请参见 IList..::.Add。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function Add ( _
    value As Object _
) As Integer Implements IList.Add
int IList.Add(
    Object value
)
private:
virtual int Add(
    Object^ value
) sealed = IList::Add
private abstract Add :
        value:Object -> int
private override Add :
        value:Object -> int

参数

value
类型： System Object
要添至列表的对象。

返回值

类型： System Int32
新元素的插入位置。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.Collections..::.IList 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.Collections..::.IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IList ..::.Contains 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IList
.
.
::
.
Contains 方法
EntitySet

有关此成员的说明，请参见 IList..::.Contains。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function Contains ( _
    value As Object _
) As Boolean Implements IList.Contains
bool IList.Contains(
    Object value
)
private:
virtual bool Contains(
    Object^ value
) sealed = IList::Contains
private abstract Contains :
        value:Object -> bool
private override Contains :
        value:Object -> bool

参数

value
类型： System Object
要在列表中定位的对象。

返回值

类型： System Boolean
如果在 System.Collections..::.IList 中找到 System..::.Object，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.Collections..::.IList 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.Collections..::.IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IList ..::.IndexOf 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IList
.
.
::
.
IndexOf 方法
EntitySet

有关此成员的说明，请参见 IList..::.IndexOf。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function IndexOf ( _
    value As Object _
) As Integer Implements IList.IndexOf
int IList.IndexOf(
    Object value
)
private:
virtual int IndexOf(
    Object^ value
) sealed = IList::IndexOf
private abstract IndexOf :
        value:Object -> int
private override IndexOf :
        value:Object -> int

参数

value
类型： System Object
要在列表中定位的对象。

返回值

类型： System Int32
如果在列表中找到 value，则为该项的索引；否则为 -1。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.Collections..::.IList 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.Collections..::.IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IList ..::.Insert 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IList
.
.
::
.
Insert 方法
EntitySet

有关此成员的说明，请参见 Insert。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub Insert ( _
    index As Integer, _
    value As Object _
) Implements IList.Insert
void IList.Insert(
    int index,
    Object value
)
private:
virtual void Insert(
    int index,
    Object^ value
) sealed = IList::Insert
private abstract Insert :
        index:int *
        value:Object -> unit
private override Insert :
        index:int *
        value:Object -> unit

参数

index
类型： System Int32
列表中的对象的索引。
value
类型： System Object
要插入到列表中的对象。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IList ..::.Remove 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IList
.
.
::
.
Remove 方法
EntitySet

有关此成员的说明，请参见 Remove。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub Remove ( _
    value As Object _
) Implements IList.Remove
void IList.Remove(
    Object value
)
private:
virtual void Remove(
    Object^ value
) sealed = IList::Remove
private abstract Remove :
        value:Object -> unit
private override Remove :
        value:Object -> unit

参数

value
类型： System Object
要从列表中移除的对象。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IListSource ..::.GetList 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IListSource
.
.
::
.
GetList 方法
EntitySet

有关此成员的说明，请参见 IListSource..::.GetList。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function GetList As IList
    Implements IListSource.GetList
IList IListSource.GetList()
private:
virtual IList^ GetList() sealed = IListSource::GetList
private abstract GetList : unit -> IList
private override GetList : unit -> IList

返回值

类型： System.Collections IList
对象中可以绑定到数据源的 System.Collections..::.IList。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.ComponentModel..::.IListSource 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 System.ComponentModel..::.IListSource 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IndexOf 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IndexOf 方法
EntitySet

返回实体的索引。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function IndexOf ( _
    entity As TEntity _
) As Integer
public int IndexOf(
    TEntity entity
)
public:
virtual int IndexOf(
    TEntity entity
) sealed
abstract IndexOf :
        entity:'TEntity -> int
override IndexOf :
        entity:'TEntity -> int

参数

entity
类型： TEntity
要返回其索引的实体。

返回值

类型： System Int32
一个表示索引的整数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.Insert 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Insert 方法
EntitySet

在索引位置处插入实体。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Insert ( _
    index As Integer, _
    entity As TEntity _
)
public void Insert(
    int index,
    TEntity entity
)
public:
virtual void Insert(
    int index,
    TEntity entity
) sealed
abstract Insert :
        index:int *
        entity:'TEntity -> unit
override Insert :
        index:int *
        entity:'TEntity -> unit

参数

index
类型： System Int32
表示要插入实体的位置的索引。
entity
类型： TEntity
要插入的实体。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.Load 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Load 方法
EntitySet

加载 EntitySet<(Of <(TEntity>)>)。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Load
public void Load()
public:
void Load()
member Load : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.Remove 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Remove 方法
EntitySet

移除实体。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function Remove ( _
    entity As TEntity _
) As Boolean
public bool Remove(
    TEntity entity
)
public:
virtual bool Remove(
    TEntity entity
) sealed
abstract Remove :
        entity:'TEntity -> bool
override Remove :
        entity:'TEntity -> bool

参数

entity
类型： TEntity
要移除的实体。

返回值

类型： System Boolean
如果已成功移除该实体，则为 true；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.RemoveAt 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
RemoveAt 方法
EntitySet

移除指定索引处的实体。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub RemoveAt ( _
    index As Integer _
)
public void RemoveAt(
    int index
)
public:
virtual void RemoveAt(
    int index
) sealed
abstract RemoveAt :
        index:int -> unit
override RemoveAt :
        index:int -> unit

参数

index
类型： System Int32
要移除的实体的索引。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.SetSource 方法

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
SetSource 方法
EntitySet

设置 EntitySet<(Of <(TEntity>)>) 的源。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub SetSource ( _
    entitySource As IEnumerable(Of TEntity) _
)
public void SetSource(
    IEnumerable<TEntity> entitySource
)
public:
void SetSource(
    IEnumerable<TEntity>^ entitySource
)
member SetSource :
        entitySource:IEnumerable<'TEntity> -> unit

参数

entitySource
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TEntity
>
)
>
)

EntitySet<(Of <(TEntity>)>) 的源。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySet

EntitySet TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EntitySet TEntity 类
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.Count 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Count 属性
EntitySet

获取 EntitySet<(Of <(TEntity>)>) 集合中的实体数。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Count As Integer
    Get
public int Count { get; }
public:
virtual property int Count {
    int get () sealed;
}
abstract Count : int
override Count : int

属性值

类型： System Int32
一个表示实体数的整数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.HasLoadedOrAssignedValues 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
HasLoadedOrAssignedValues 属性
EntitySet

指定 EntitySet<(Of <(TEntity>)>) 是否已加载或分配某值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property HasLoadedOrAssignedValues As Boolean
    Get
public bool HasLoadedOrAssignedValues { get; }
public:
property bool HasLoadedOrAssignedValues {
    bool get ();
}
member HasLoadedOrAssignedValues : bool

属性值

类型： System Boolean
如果 EntitySet<(Of <(TEntity>)>) 已加载或分配某值，则返回 true。

“加载”是指在具体化期间或延迟加载时已加载数据。"“分配”是指已手动为数据授予一个值。 “加载”是指在具体化期间或延迟加载时已加载数据。"“分配”是指已手动为数据授予一个值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.ICollection <(Of <(TEntity >)>) ..::.IsReadOnly 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ICollection
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IsReadOnly 属性
EntitySet

有关此成员的说明，请参见 IsReadOnly。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements ICollection(Of TEntity).IsReadOnly
    Get
bool ICollection<TEntity>.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = ICollection<TEntity>::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
如果该集合为只读，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 ICollection<(Of <(T>)>) 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 ICollection<(Of <(T>)>) 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.ICollection ..::.IsSynchronized 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ICollection
.
.
::
.
IsSynchronized 属性
EntitySet

有关此成员的说明，请参见 IsSynchronized。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property IsSynchronized As Boolean
    Implements ICollection.IsSynchronized
    Get
bool ICollection.IsSynchronized { get; }
private:
virtual property bool IsSynchronized {
    bool get () sealed = ICollection::IsSynchronized::get;
}
private abstract IsSynchronized : bool
private override IsSynchronized : bool

属性值

类型： System Boolean
如果对该集合的访问是同步的（线程安全），则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 ICollection 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 ICollection 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.ICollection ..::.SyncRoot 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ICollection
.
.
::
.
SyncRoot 属性
EntitySet

有关此成员的说明，请参见 SyncRoot。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property SyncRoot As Object
    Implements ICollection.SyncRoot
    Get
Object ICollection.SyncRoot { get; }
private:
virtual property Object^ SyncRoot {
    Object^ get () sealed = ICollection::SyncRoot::get;
}
private abstract SyncRoot : Object
private override SyncRoot : Object

属性值

类型： System Object
可用于同步集合访问的对象。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 ICollection 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 ICollection 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IList ..::.IsFixedSize 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IList
.
.
::
.
IsFixedSize 属性
EntitySet

有关此成员的说明，请参见 IsFixedSize。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property IsFixedSize As Boolean
    Implements IList.IsFixedSize
    Get
bool IList.IsFixedSize { get; }
private:
virtual property bool IsFixedSize {
    bool get () sealed = IList::IsFixedSize::get;
}
private abstract IsFixedSize : bool
private override IsFixedSize : bool

属性值

类型： System Boolean
如果该集合具有固定大小，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IList ..::.IsReadOnly 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IList
.
.
::
.
IsReadOnly 属性
EntitySet

有关此成员的说明，请参见 IsReadOnly。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements IList.IsReadOnly
    Get
bool IList.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = IList::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
如果该集合为只读，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IList ..::.Item 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IList
.
.
::
.
Item 属性
EntitySet

有关此成员的说明，请参见 Item。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Property Item ( _
    index As Integer _
) As Object Implements IList.Item
    Get
    Set
Object IList.this[
    int index
] { get; set; }
private:
virtual property Object^ Item[int index] {
    Object^ get (int index) sealed = IList::Item::get;
    void set (int index, Object^ value) sealed = IList::Item::set;
}
private abstract Item : Object with get, set
private override Item : Object with get, set

参数

index
类型： System Int32
要设置或获取元素的索引。

属性值

类型： System Object
指定索引处的元素。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IList 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IListSource ..::.ContainsListCollection 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IListSource
.
.
::
.
ContainsListCollection 属性
EntitySet

有关此成员的说明，请参见 ContainsListCollection。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property ContainsListCollection As Boolean
    Implements IListSource.ContainsListCollection
    Get
bool IListSource.ContainsListCollection { get; }
private:
virtual property bool ContainsListCollection {
    bool get () sealed = IListSource::ContainsListCollection::get;
}
private abstract ContainsListCollection : bool
private override ContainsListCollection : bool

属性值

类型： System Boolean
如果集合为 IList 对象的集合，则为 true；否则为 false。

实现

此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IListSource 接口时使用。 此成员是显式的接口成员实现。它只能在 EntitySet<(Of <(TEntity>)>) 实例被强制转换为 IListSource 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.IsDeferred 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IsDeferred 属性
EntitySet

指定此 EntitySet<(Of <(TEntity>)>) 是否具有尚未执行的延迟查询。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property IsDeferred As Boolean
    Get
public bool IsDeferred { get; }
public:
property bool IsDeferred {
    bool get ();
}
member IsDeferred : bool

属性值

类型： System Boolean
如果尚未执行延迟查询，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.Item 属性

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Item 属性
EntitySet

获取或设置指定索引处的元素。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Item ( _
    index As Integer _
) As TEntity
    Get
    Set
public TEntity this[
    int index
] { get; set; }
public:
virtual property TEntity Item[int index] {
    TEntity get (int index) sealed;
    void set (int index, TEntity value) sealed;
}
abstract Item : 'TEntity with get, set
override Item : 'TEntity with get, set

参数

index
类型： System Int32
元素的索引。

属性值

类型： TEntity
一个表示项的 EntitySet<(Of <(TEntity>)>)。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) 事件

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntitySet

EntitySet TEntity 类型公开以下成员。

名称 说明
页首

参考

EntitySet TEntity 类
System.Data.Linq 命名空间


EntitySet <(Of <(TEntity >)>) ..::.ListChanged 事件

EntitySet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ListChanged 事件
EntitySet

当列表的内容发生更改时发生。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Event ListChanged As ListChangedEventHandler
public event ListChangedEventHandler ListChanged
public:
 event ListChangedEventHandler^ ListChanged {
    void add (ListChangedEventHandler^ value);
    void remove (ListChangedEventHandler^ value);
}
member ListChanged : IEvent<ListChangedEventHandler,
    ListChangedEventArgs>

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

EntitySet TEntity 类
EntitySet TEntity 成员
System.Data.Linq 命名空间


ForeignKeyReferenceAlreadyHasValueException 类

ForeignKeyReferenceAlreadyHasValueException 类
成员

表示在已经加载实体的情况下尝试更改外键时发生的错误。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Class ForeignKeyReferenceAlreadyHasValueException _
    Inherits InvalidOperationException
public class ForeignKeyReferenceAlreadyHasValueException : InvalidOperationException
public ref class ForeignKeyReferenceAlreadyHasValueException : public InvalidOperationException
type ForeignKeyReferenceAlreadyHasValueException =
    class
        inherit InvalidOperationException
    end

System.Data.Linq System.Data.Linq..::.ForeignKeyReferenceAlreadyHasValueExceptionForeignKeyReferenceAlreadyHasValueException
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ForeignKeyReferenceAlreadyHasValueException 成员
System.Data.Linq 命名空间


ForeignKeyReferenceAlreadyHasValueException 成员

ForeignKeyReferenceAlreadyHasValueException 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ForeignKeyReferenceAlreadyHasValueException 类

表示在已经加载实体的情况下尝试更改外键时发生的错误。

ForeignKeyReferenceAlreadyHasValueException 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ForeignKeyReferenceAlreadyHasValueException 类
System.Data.Linq 命名空间


ForeignKeyReferenceAlreadyHasValueException 构造函数

ForeignKeyReferenceAlreadyHasValueException 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ForeignKeyReferenceAlreadyHasValueException 类

初始化 ForeignKeyReferenceAlreadyHasValueException 类的一个新实例。

名称 说明
页首

参考

ForeignKeyReferenceAlreadyHasValueException 类
ForeignKeyReferenceAlreadyHasValueException 成员
System.Data.Linq 命名空间


ForeignKeyReferenceAlreadyHasValueException 构造函数

ForeignKeyReferenceAlreadyHasValueException 构造函数
ForeignKeyReferenceAlreadyHasValueException 类

使用由系统提供的用来描述错误的消息初始化 ForeignKeyReferenceAlreadyHasValueException 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public ForeignKeyReferenceAlreadyHasValueException()
public:
ForeignKeyReferenceAlreadyHasValueException()
new : unit -> ForeignKeyReferenceAlreadyHasValueException

此构造函数将新实例的 Message 属性初始化为系统提供的描述错误的消息，例如“DefaultMessageDisplayedByParameterlessCtorWriterMustSupply”。此消息将考虑当前的系统区域性。 此构造函数将新实例的 Message 属性初始化为系统提供的描述错误的消息，例如“DefaultMessageDisplayedByParameterlessCtorWriterMustSupply”。此消息将考虑当前的系统区域性。

下表显示 InsufficientMemoryException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 本地化的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ForeignKeyReferenceAlreadyHasValueException 类
ForeignKeyReferenceAlreadyHasValueException 成员
ForeignKeyReferenceAlreadyHasValueException 重载
System.Data.Linq 命名空间

其他资源

处理和引发异常


ForeignKeyReferenceAlreadyHasValueException 构造函数 (String)

ForeignKeyReferenceAlreadyHasValueException 构造函数 (String)
ForeignKeyReferenceAlreadyHasValueException 类

使用描述错误的指定消息初始化 ForeignKeyReferenceAlreadyHasValueException 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    message As String _
)
public ForeignKeyReferenceAlreadyHasValueException(
    string message
)
public:
ForeignKeyReferenceAlreadyHasValueException(
    String^ message
)
new :
        message:string -> ForeignKeyReferenceAlreadyHasValueException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。

下表显示 ForeignKeyReferenceAlreadyHasValueException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ForeignKeyReferenceAlreadyHasValueException 类
ForeignKeyReferenceAlreadyHasValueException 成员
ForeignKeyReferenceAlreadyHasValueException 重载
System.Data.Linq 命名空间

其他资源

处理和引发异常


ForeignKeyReferenceAlreadyHasValueException 构造函数 (String, Exception)

ForeignKeyReferenceAlreadyHasValueException 构造函数 (String, Exception)
ForeignKeyReferenceAlreadyHasValueException 类

使用指定错误消息和对导致此异常的内部异常的引用来初始化 ForeignKeyReferenceAlreadyHasValueException 类的新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    message As String, _
    innerException As Exception _
)
public ForeignKeyReferenceAlreadyHasValueException(
    string message,
    Exception innerException
)
public:
ForeignKeyReferenceAlreadyHasValueException(
    String^ message,
    Exception^ innerException
)
new :
        message:string *
        innerException:Exception -> ForeignKeyReferenceAlreadyHasValueException

参数

message
类型： System String
描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。 描述该异常的消息。此构造函数的调用方需要确保此字符串已针对当前系统区域性进行了本地化。
innerException
类型： System Exception
导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。 导致当前异常的异常。如果 innerException 参数不为nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则当前异常在处理内部异常的 catch 块中引发。

作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 作为上一异常直接结果而引发的异常应在 InnerException 属性中包括对上一异常的引用。InnerException 属性返回的值与传递到构造函数中的值相同；或者，如果 InnerException 属性没有向构造函数提供内部异常值，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

下表显示 ForeignKeyReferenceAlreadyHasValueException 实例的初始属性值。

属性 | 值
InnerException | nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）.
Message | 在 message 中指定的错误消息字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ForeignKeyReferenceAlreadyHasValueException 类
ForeignKeyReferenceAlreadyHasValueException 成员
ForeignKeyReferenceAlreadyHasValueException 重载
System.Data.Linq 命名空间

其他资源

处理和引发异常


ForeignKeyReferenceAlreadyHasValueException 方法

ForeignKeyReferenceAlreadyHasValueException 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ForeignKeyReferenceAlreadyHasValueException 类

ForeignKeyReferenceAlreadyHasValueException 类型公开以下成员。

名称 说明
页首

参考

ForeignKeyReferenceAlreadyHasValueException 类
System.Data.Linq 命名空间


ForeignKeyReferenceAlreadyHasValueException 属性

ForeignKeyReferenceAlreadyHasValueException 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ForeignKeyReferenceAlreadyHasValueException 类

ForeignKeyReferenceAlreadyHasValueException 类型公开以下成员。

名称 说明
页首

参考

ForeignKeyReferenceAlreadyHasValueException 类
System.Data.Linq 命名空间


ForeignKeyReferenceAlreadyHasValueException 事件

ForeignKeyReferenceAlreadyHasValueException 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ForeignKeyReferenceAlreadyHasValueException 类

ForeignKeyReferenceAlreadyHasValueException 类型公开以下成员。

名称 说明
页首

参考

ForeignKeyReferenceAlreadyHasValueException 类
System.Data.Linq 命名空间


IExecuteResult 接口

IExecuteResult 接口
成员

提供对执行查询的返回值或结果的访问。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Interface IExecuteResult _
    Inherits IDisposable
public interface IExecuteResult : IDisposable
public interface class IExecuteResult : IDisposable
type IExecuteResult =
    interface
        interface IDisposable
    end

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

IExecuteResult 成员
System.Data.Linq 命名空间


IExecuteResult 成员

IExecuteResult 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IExecuteResult 接口

提供对执行查询的返回值或结果的访问。

IExecuteResult 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IExecuteResult 接口
System.Data.Linq 命名空间


IExecuteResult 方法

IExecuteResult 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IExecuteResult 接口

IExecuteResult 类型公开以下成员。

名称 说明
页首

参考

IExecuteResult 接口
System.Data.Linq 命名空间


IExecuteResult ..::.GetParameterValue 方法

IExecuteResult
.
.
::
.
GetParameterValue 方法
IExecuteResult 接口

提供对第 n 个输出参数的访问。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Function GetParameterValue ( _
    parameterIndex As Integer _
) As Object
Object GetParameterValue(
    int parameterIndex
)
Object^ GetParameterValue(
    int parameterIndex
)
abstract GetParameterValue :
        parameterIndex:int -> Object

参数

parameterIndex
类型： System Int32
要检索的参数的索引。

返回值

类型： System Object
一个包含指定参数的值的对象。

当查询为具有输出参数的映射函数时，通常会使用此方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

IExecuteResult 接口
IExecuteResult 成员
System.Data.Linq 命名空间


IExecuteResult 属性

IExecuteResult 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IExecuteResult 接口

IExecuteResult 类型公开以下成员。

名称 说明
页首

参考

IExecuteResult 接口
System.Data.Linq 命名空间


IExecuteResult ..::.ReturnValue 属性

IExecuteResult
.
.
::
.
ReturnValue 属性
IExecuteResult 接口

获取执行的查询的返回值或结果。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
ReadOnly Property ReturnValue As Object
    Get
Object ReturnValue { get; }
property Object^ ReturnValue {
    Object^ get ();
}
abstract ReturnValue : Object

属性值

类型： System Object
执行的查询的值或结果。

此对象的基础类型与查询表达式的 Type 属性的类型相同。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

IExecuteResult 接口
IExecuteResult 成员
System.Data.Linq 命名空间


IFunctionResult 接口

IFunctionResult 接口
成员

提供对函数的返回值的访问。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Interface IFunctionResult
public interface IFunctionResult
public interface class IFunctionResult
type IFunctionResult =  interface end

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

IFunctionResult 成员
System.Data.Linq 命名空间


IFunctionResult 成员

IFunctionResult 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IFunctionResult 接口

提供对函数的返回值的访问。

IFunctionResult 类型公开以下成员。

名称 说明
页首

参考

IFunctionResult 接口
System.Data.Linq 命名空间


IFunctionResult 属性

IFunctionResult 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IFunctionResult 接口

IFunctionResult 类型公开以下成员。

名称 说明
页首

参考

IFunctionResult 接口
System.Data.Linq 命名空间


IFunctionResult ..::.ReturnValue 属性

IFunctionResult
.
.
::
.
ReturnValue 属性
IFunctionResult 接口

获取函数的返回值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
ReadOnly Property ReturnValue As Object
    Get
Object ReturnValue { get; }
property Object^ ReturnValue {
    Object^ get ();
}
abstract ReturnValue : Object

属性值

类型： System Object
由函数返回的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

IFunctionResult 接口
IFunctionResult 成员
System.Data.Linq 命名空间


IMultipleResults 接口

IMultipleResults 接口
成员

表示映射函数或对可变返回序列的查询的结果。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Interface IMultipleResults _
    Inherits IFunctionResult, IDisposable
public interface IMultipleResults : IFunctionResult,
    IDisposable
public interface class IMultipleResults : IFunctionResult,
    IDisposable
type IMultipleResults =
    interface
        interface IFunctionResult
        interface IDisposable
    end

在下面的 SQL 代码示例中，结果形状取决于输入（shape =1 或 shape = 2）。未定义返回投影的顺序。 在下面的 SQL 代码示例中，结果形状取决于输入（shape =1 或 shape = 2）。未定义返回投影的顺序。

CREATE PROCEDURE VariableResultShapes(@shape int)
AS
if(@shape = 1)
    select CustomerID, ContactTitle, CompanyName from customers
else if(@shape = 2)
    select OrderID, ShipName from orders

<FunctionAttribute(Name:="dbo.VariableResultShapes"), _
ResultType(GetType(VariableResultShapesResult1)), _
ResultType(GetType(VariableResultShapesResult2))> _
Public Function VariableResultShapes(<Parameter(DbType:="Int")> ByVal shape As System.Nullable(Of Integer)) As IMultipleResults
    Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod, MethodInfo), shape)
    Return CType(result.ReturnValue, IMultipleResults)
End Function

    [Function(Name="dbo.VariableResultShapes")]
    [ResultType(typeof(VariableResultShapesResult1))]
    [ResultType(typeof(VariableResultShapesResult2))]
    public IMultipleResults VariableResultShapes([Parameter(DbType="Int")] System.Nullable<int> shape)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), shape);
        return ((IMultipleResults)(result.ReturnValue));
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

IMultipleResults 成员
System.Data.Linq 命名空间


IMultipleResults 成员

IMultipleResults 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IMultipleResults 接口

表示映射函数或对可变返回序列的查询的结果。

IMultipleResults 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IMultipleResults 接口
System.Data.Linq 命名空间


IMultipleResults 方法

IMultipleResults 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IMultipleResults 接口

IMultipleResults 类型公开以下成员。

名称 说明
页首

参考

IMultipleResults 接口
System.Data.Linq 命名空间


IMultipleResults ..::.GetResult <(Of <(TElement >)>) 方法

IMultipleResults
.
.
::
.
GetResult
<
(Of
<
(
TElement
>
)
>
)
方法
IMultipleResults 接口

检索作为指定类型的序列的下一个结果。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Function GetResult(Of TElement) As IEnumerable(Of TElement)
IEnumerable<TElement> GetResult<TElement>()

generic<typename TElement>
IEnumerable<TElement>^ GetResult()
abstract GetResult : unit -> IEnumerable<'TElement>

类型参数

TElement

要返回的序列的类型。

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TElement
>
)
>
)

用于循环访问结果的枚举。

您可使用类似于下面的代码来执行此存储过程。

说明 说明

您必须根据自己对存储过程的知识使用 GetResult<(Of <(TElement>)>) 模式来获取正确类型的枚举数。

Dim db As New Northwnd("c:\northwnd.mdf")

' Assign the results of the procedure with an argument
' of (1) to local variable 'result'.
Dim result As IMultipleResults = db.VariableResultShapes(1)

' Iterate through the list and write results (the company name)
' to the console.
For Each compName As VariableResultShapesResult1 _
    In result.GetResult(Of VariableResultShapesResult1)()
    Console.WriteLine(compName.CompanyName)
Next

' Pause to view company names; press Enter to continue.
Console.ReadLine()

' Assign the results of the procedure with an argument
' of (2) to local variable 'result.'
Dim result2 As IMultipleResults = db.VariableResultShapes(2)

' Iterate through the list and write results (the order IDs)
' to the console.
For Each ord As VariableResultShapesResult2 _
    In result2.GetResult(Of VariableResultShapesResult2)()
    Console.WriteLine(ord.OrderID)
Next

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

// Assign the results of the procedure with an argument
// of (1) to local variable 'result'.
IMultipleResults result = db.VariableResultShapes(1);

// Iterate through the list and write results (the company names)
// to the console.
foreach(VariableResultShapesResult1 compName in
    result.GetResult<VariableResultShapesResult1>())
{
    Console.WriteLine(compName.CompanyName);
}

// Pause to view company names; press Enter to continue.
Console.ReadLine();

// Assign the results of the procedure with an argument
// of (2) to local variable 'result'.
IMultipleResults result2 = db.VariableResultShapes(2);

// Iterate through the list and write results (the order IDs)
// to the console.
foreach (VariableResultShapesResult2 ord in
    result2.GetResult<VariableResultShapesResult2>())
{
    Console.WriteLine(ord.OrderID);
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

IMultipleResults 接口
IMultipleResults 成员
System.Data.Linq 命名空间


IMultipleResults 属性

IMultipleResults 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IMultipleResults 接口

IMultipleResults 类型公开以下成员。

名称 说明
页首

参考

IMultipleResults 接口
System.Data.Linq 命名空间


ISingleResult <(Of <(T >)>) 接口

ISingleResult
<
(Of
<
(
T
>
)
>
)
接口
成员

表示具有单个返回序列的映射函数的结果。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Interface ISingleResult(Of T) _
    Inherits IEnumerable(Of T), IEnumerable, IFunctionResult,  _
    IDisposable
public interface ISingleResult<T> : IEnumerable<T>,
    IEnumerable, IFunctionResult, IDisposable

generic<typename T>
public interface class ISingleResult : IEnumerable<T>,
    IEnumerable, IFunctionResult, IDisposable
type ISingleResult<'T> =
    interface
        interface IEnumerable<'T>
        interface IEnumerable
        interface IFunctionResult
        interface IDisposable
    end

类型参数

T

返回序列中的元素的类型。

下面的示例表示一个存储过程，该存储过程将返回客户行并且使用输入参数以仅返回将“伦敦”列为客户城市的那些行。该示例采用可枚举 CustomersByCityResult 类。 下面的示例表示一个存储过程，该存储过程将返回客户行并且使用输入参数以仅返回将“伦敦”列为客户城市的那些行。该示例采用可枚举 CustomersByCityResult 类。

CREATE PROCEDURE [dbo].[Customers By City]
    (@param1 NVARCHAR(20))
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.  SET NOCOUNT ON;
    SELECT CustomerID, ContactName, CompanyName, City from Customers
        as c where c.City=@param1
END
    <FunctionAttribute(Name:="dbo.Customers By City")> _
        Public Function CustomersByCity(<Parameter(DbType:="NVarChar(20)")> ByVal param1 As String) As ISingleResult(Of CustomersByCityResult)

        Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod, MethodInfo), param1)
        Return CType(result.ReturnValue, ISingleResult(Of CustomersByCityResult))
    End Function

Sub ReturnRowset()
    ' Call the stored procedure.
    Dim db As New Northwnd("c:\northwnd.mdf")

    Dim result As IEnumerable(Of CustomersByCityResult) = _
        db.CustomersByCity("London")

    For Each cust As CustomersByCityResult In result
        Console.WriteLine("CustID={0}; City={1}", _
            cust.CustomerID, cust.City)
    Next

End Sub

[Function(Name="dbo.Customers By City")]
public ISingleResult<CustomersByCityResult> CustomersByCity([Parameter(DbType="NVarChar(20)")] string param1)
{
    IExecuteResult result = this.ExecuteMethodCall(this,         ((MethodInfo)(MethodInfo.GetCurrentMethod())), param1);
    return ((ISingleResult<CustomersByCityResult>)(result.ReturnValue));
}

// Call the stored procedure.
void ReturnRowset()
{
    Northwnd db = new Northwnd(@"c:\northwnd.mdf");

    ISingleResult<CustomersByCityResult> result =
        db.CustomersByCity("London");

    foreach (CustomersByCityResult cust in result)
    {
        Console.WriteLine("CustID={0}; City={1}", cust.CustomerID,
            cust.City);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ISingleResult T 成员
System.Data.Linq 命名空间


ISingleResult <(Of <(T >)>) 成员

ISingleResult
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ISingleResult

表示具有单个返回序列的映射函数的结果。

ISingleResult T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ISingleResult T 接口
System.Data.Linq 命名空间


ISingleResult <(Of <(T >)>) 方法

ISingleResult
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ISingleResult

ISingleResult T 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ISingleResult T 接口
System.Data.Linq 命名空间


ISingleResult <(Of <(T >)>) ..::.GetEnumerator 方法

ISingleResult
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ISingleResult

名称 说明
页首

参考

ISingleResult T 接口
ISingleResult T 成员
System.Data.Linq 命名空间


ISingleResult <(Of <(T >)>) 属性

ISingleResult
<
(Of
<
(
T
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ISingleResult

ISingleResult T 类型公开以下成员。

名称 说明
页首

参考

ISingleResult T 接口
System.Data.Linq 命名空间


ITable 接口

ITable 接口
成员

用于弱类型查询方案。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Interface ITable _
    Inherits IQueryable, IEnumerable
public interface ITable : IQueryable, IEnumerable
public interface class ITable : IQueryable,
    IEnumerable
type ITable =
    interface
        interface IQueryable
        interface IEnumerable
    end

有关方法的更多信息，请参见 Table<(Of <(TEntity>)>)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 成员
System.Data.Linq 命名空间


ITable 成员

ITable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITable 接口

用于弱类型查询方案。

ITable 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ITable 接口
System.Data.Linq 命名空间


ITable 方法

ITable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITable 接口

ITable 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ITable 接口
System.Data.Linq 命名空间


ITable ..::.Attach 方法

ITable
.
.
::
.
Attach 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITable 接口

允许反序列化的实体与 DataContext 的新实例关联，以便可以从数据库更新或删除这些实体。

名称 说明
页首

有关如何使用此方法的更多信息，请参见 N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

缺少必需成员时，在 SubmitChanges 期间会引发 ChangeConflictException。

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable ..::.Attach 方法 (Object)

ITable
.
.
::
.
Attach 方法 (Object)
ITable 接口

以未修改状态将实体附加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub Attach ( _
    entity As Object _
)
void Attach(
    Object entity
)
void Attach(
    Object^ entity
)
abstract Attach :
        entity:Object -> unit

参数

entity
类型： System Object
要附加的实体。

有关如何使用此方法的更多信息，请参见 N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
Attach 重载
System.Data.Linq 命名空间


ITable ..::.Attach 方法 (Object, Boolean)

ITable
.
.
::
.
Attach 方法 (Object, Boolean)
ITable 接口

以修改或未修改状态将集合的所有实体附加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub Attach ( _
    entity As Object, _
    asModified As Boolean _
)
void Attach(
    Object entity,
    bool asModified
)
void Attach(
    Object^ entity,
    bool asModified
)
abstract Attach :
        entity:Object *
        asModified:bool -> unit

参数

entity
类型： System Object
实体的集合。
asModified
类型： System Boolean
如果为 true，则以修改状态附加这些实体。

有关如何使用此方法的更多信息，请参见 N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
Attach 重载
System.Data.Linq 命名空间


ITable ..::.Attach 方法 (Object, Object)

ITable
.
.
::
.
Attach 方法 (Object, Object)
ITable 接口

通过指定实体及其原始状态，以修改或未修改状态将实体附加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub Attach ( _
    entity As Object, _
    original As Object _
)
void Attach(
    Object entity,
    Object original
)
void Attach(
    Object^ entity,
    Object^ original
)
abstract Attach :
        entity:Object *
        original:Object -> unit

参数

entity
类型： System Object
要附加的实体。
original
类型： System Object
与包含原始值的数据成员具有相同实体类型的实例。

有关如何使用此方法的更多信息，请参见 N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
Attach 重载
System.Data.Linq 命名空间


ITable ..::.AttachAll 方法

ITable
.
.
::
.
AttachAll 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITable 接口

以修改或未修改状态将集合的所有实体附加到 DataContext。

名称 说明
页首

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable ..::.AttachAll 方法 (IEnumerable)

ITable
.
.
::
.
AttachAll 方法 (IEnumerable)
ITable 接口

以修改或未修改状态将集合的所有实体附加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub AttachAll ( _
    entities As IEnumerable _
)
void AttachAll(
    IEnumerable entities
)
void AttachAll(
    IEnumerable^ entities
)
abstract AttachAll :
        entities:IEnumerable -> unit

参数

entities
类型： System.Collections IEnumerable
实体的集合。

有关如何使用此方法的更多信息，请参见 N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
AttachAll 重载
System.Data.Linq 命名空间


ITable ..::.AttachAll 方法 (IEnumerable, Boolean)

ITable
.
.
::
.
AttachAll 方法 (IEnumerable, Boolean)
ITable 接口

以修改或未修改状态将集合的所有实体附加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub AttachAll ( _
    entities As IEnumerable, _
    asModified As Boolean _
)
void AttachAll(
    IEnumerable entities,
    bool asModified
)
void AttachAll(
    IEnumerable^ entities,
    bool asModified
)
abstract AttachAll :
        entities:IEnumerable *
        asModified:bool -> unit

参数

entities
类型： System.Collections IEnumerable
实体的集合。
asModified
类型： System Boolean
如果为 true，则以修改状态附加这些实体。

有关如何使用此方法的更多信息，请参见 N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
AttachAll 重载
System.Data.Linq 命名空间


ITable ..::.DeleteAllOnSubmit 方法

ITable
.
.
::
.
DeleteAllOnSubmit 方法
ITable 接口

将集合中的所有实体置于 pending delete 状态。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub DeleteAllOnSubmit ( _
    entities As IEnumerable _
)
void DeleteAllOnSubmit(
    IEnumerable entities
)
void DeleteAllOnSubmit(
    IEnumerable^ entities
)
abstract DeleteAllOnSubmit :
        entities:IEnumerable -> unit

参数

entities
类型： System.Collections IEnumerable
从其移除所有项的集合。

调用 SubmitChanges 可在数据库中执行实际删除操作。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable ..::.DeleteOnSubmit 方法

ITable
.
.
::
.
DeleteOnSubmit 方法
ITable 接口

将此表中的实体置为 pending delete 状态。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub DeleteOnSubmit ( _
    entity As Object _
)
void DeleteOnSubmit(
    Object entity
)
void DeleteOnSubmit(
    Object^ entity
)
abstract DeleteOnSubmit :
        entity:Object -> unit

参数

entity
类型： System Object
要移除的实体。

必须首先附加已断开连接的实体，然后才能将其删除。调用 SubmitChanges 可在数据库中执行实际删除操作。 必须首先附加已断开连接的实体，然后才能将其删除。调用 SubmitChanges 可在数据库中执行实际删除操作。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable ..::.GetModifiedMembers 方法

ITable
.
.
::
.
GetModifiedMembers 方法
ITable 接口

返回包含其当前和原始值的已修改成员的数组。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Function GetModifiedMembers ( _
    entity As Object _
) As ModifiedMemberInfo()
ModifiedMemberInfo[] GetModifiedMembers(
    Object entity
)
array<ModifiedMemberInfo>^ GetModifiedMembers(
    Object^ entity
)
abstract GetModifiedMembers :
        entity:Object -> ModifiedMemberInfo[]

参数

entity
类型： System Object
从其获取数组的实体。

返回值

类型：
array<
System.Data.Linq ModifiedMemberInfo
>
[]
()
[]

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable ..::.GetOriginalEntityState 方法

ITable
.
.
::
.
GetOriginalEntityState 方法
ITable 接口

检索原始值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Function GetOriginalEntityState ( _
    entity As Object _
) As Object
Object GetOriginalEntityState(
    Object entity
)
Object^ GetOriginalEntityState(
    Object^ entity
)
abstract GetOriginalEntityState :
        entity:Object -> Object

参数

entity
类型： System Object
要检索其原始值的实体。

返回值

类型： System Object
原始实体的副本。如果未跟踪传入的实体，则该值为 null。必须先附加由客户端发送回的已断开连接的实体，然后 DataContext 才能开始跟踪实体的状态。新附加的实体的“原始状态”是根据客户端提供的值建立的。数据上下文不跟踪已断开连接的实体的状态。 原始实体的副本。如果未跟踪传入的实体，则该值为 null。必须先附加由客户端发送回的已断开连接的实体，然后 DataContext 才能开始跟踪实体的状态。新附加的实体的“原始状态”是根据客户端提供的值建立的。数据上下文不跟踪已断开连接的实体的状态。 原始实体的副本。如果未跟踪传入的实体，则该值为 null。必须先附加由客户端发送回的已断开连接的实体，然后 DataContext 才能开始跟踪实体的状态。新附加的实体的“原始状态”是根据客户端提供的值建立的。数据上下文不跟踪已断开连接的实体的状态。 原始实体的副本。如果未跟踪传入的实体，则该值为 null。必须先附加由客户端发送回的已断开连接的实体，然后 DataContext 才能开始跟踪实体的状态。新附加的实体的“原始状态”是根据客户端提供的值建立的。数据上下文不跟踪已断开连接的实体的状态。 原始实体的副本。如果未跟踪传入的实体，则该值为 null。必须先附加由客户端发送回的已断开连接的实体，然后 DataContext 才能开始跟踪实体的状态。新附加的实体的“原始状态”是根据客户端提供的值建立的。数据上下文不跟踪已断开连接的实体的状态。

注意下列事项：

  • 实体参数必须为非空。否则会引发空参数异常。 实体参数必须为非空。否则会引发空参数异常。

  • 对于强类型 (TEntity) 方法，必须映射该类型并且该类型必须为实体类型。即，该类型在其映射中必须具有对象 ID 信息。否则会引发错误的类型异常。 对于强类型 (TEntity) 方法，必须映射该类型并且该类型必须为实体类型。即，该类型在其映射中必须具有对象 ID 信息。否则会引发错误的类型异常。 对于强类型 (TEntity) 方法，必须映射该类型并且该类型必须为实体类型。即，该类型在其映射中必须具有对象 ID 信息。否则会引发错误的类型异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable ..::.InsertAllOnSubmit 方法

ITable
.
.
::
.
InsertAllOnSubmit 方法
ITable 接口

将集合中所有处于 pending insert 状态的实体添加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub InsertAllOnSubmit ( _
    entities As IEnumerable _
)
void InsertAllOnSubmit(
    IEnumerable entities
)
void InsertAllOnSubmit(
    IEnumerable^ entities
)
abstract InsertAllOnSubmit :
        entities:IEnumerable -> unit

参数

entities
类型： System.Collections IEnumerable
要添加的实体。

调用 SubmitChanges 可在数据库中执行实际插入操作。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable ..::.InsertOnSubmit 方法

ITable
.
.
::
.
InsertOnSubmit 方法
ITable 接口

将处于 pending insert 状态的实体添加到此表。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub InsertOnSubmit ( _
    entity As Object _
)
void InsertOnSubmit(
    Object entity
)
void InsertOnSubmit(
    Object^ entity
)
abstract InsertOnSubmit :
        entity:Object -> unit

参数

entity
类型： System Object
要添加的实体。

调用 SubmitChanges 可在数据库中执行实际插入操作。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable 属性

ITable 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITable 接口

ITable 类型公开以下成员。

名称 说明
页首

参考

ITable 接口
System.Data.Linq 命名空间


ITable ..::.Context 属性

ITable
.
.
::
.
Context 属性
ITable 接口

获取已用于检索此 ITable 的 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
ReadOnly Property Context As DataContext
    Get
DataContext Context { get; }
property DataContext^ Context {
    DataContext^ get ();
}
abstract Context : DataContext

属性值

类型： System.Data.Linq DataContext
用于检索 ITable 的 DataContext。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable ..::.IsReadOnly 属性

ITable
.
.
::
.
IsReadOnly 属性
ITable 接口

指示此 ITable 实例中包含的实体的类型是否具有主键。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
ReadOnly Property IsReadOnly As Boolean
    Get
bool IsReadOnly { get; }
property bool IsReadOnly {
    bool get ();
}
abstract IsReadOnly : bool

属性值

类型： System Boolean
如果实体类型不具有主键，则返回 true；否则返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ITable 接口
ITable 成员
System.Data.Linq 命名空间


ITable <(Of <(TEntity >)>) 接口

ITable
<
(Of
<
(
TEntity
>
)
>
)
接口
成员

表示基础数据库中特定类型的表。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Interface ITable(Of TEntity As Class) _
    Inherits IQueryable(Of TEntity), IEnumerable(Of TEntity),  _
    IQueryable, IEnumerable
public interface ITable<TEntity> : IQueryable<TEntity>,
    IEnumerable<TEntity>, IQueryable, IEnumerable
where TEntity : class

generic<typename TEntity>
where TEntity : ref class
public interface class ITable : IQueryable<TEntity>,
    IEnumerable<TEntity>, IQueryable, IEnumerable
type ITable<'TEntity when 'TEntity : not struct> =
    interface
        interface IQueryable<'TEntity>
        interface IEnumerable<'TEntity>
        interface IQueryable
        interface IEnumerable
    end

类型参数

TEntity

有关更多信息，请参见Table<(Of <(TEntity>)>)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ITable TEntity 成员
System.Data.Linq 命名空间


ITable <(Of <(TEntity >)>) 成员

ITable
<
(Of
<
(
TEntity
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITable

表示基础数据库中特定类型的表。

ITable TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ITable TEntity 接口
System.Data.Linq 命名空间


ITable <(Of <(TEntity >)>) 方法

ITable
<
(Of
<
(
TEntity
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITable

ITable TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ITable TEntity 接口
System.Data.Linq 命名空间


ITable <(Of <(TEntity >)>) ..::.Attach 方法

ITable
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法
ITable

重写时，如果执行开放式并发检查时需要原始值，请将已断开连接或“已分离”的实体附加到新的 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub Attach ( _
    entity As TEntity _
)
void Attach(
    TEntity entity
)
void Attach(
    TEntity entity
)
abstract Attach :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要添加的对象。

有关更多信息，请参见Attach。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ITable TEntity 接口
ITable TEntity 成员
System.Data.Linq 命名空间


ITable <(Of <(TEntity >)>) ..::.DeleteOnSubmit 方法

ITable
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
DeleteOnSubmit 方法
ITable

重写时，将此表中的实体置为 pending delete 状态。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub DeleteOnSubmit ( _
    entity As TEntity _
)
void DeleteOnSubmit(
    TEntity entity
)
void DeleteOnSubmit(
    TEntity entity
)
abstract DeleteOnSubmit :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要删除的对象。

有关更多信息，请参见DeleteOnSubmit。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ITable TEntity 接口
ITable TEntity 成员
System.Data.Linq 命名空间


ITable <(Of <(TEntity >)>) ..::.GetEnumerator 方法

ITable
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
GetEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITable

名称 说明
页首

参考

ITable TEntity 接口
ITable TEntity 成员
System.Data.Linq 命名空间


ITable <(Of <(TEntity >)>) ..::.InsertOnSubmit 方法

ITable
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
InsertOnSubmit 方法
ITable

重写时，将 pending insert 状态的实体添加到此 ITable<(Of <(TEntity>)>)。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Sub InsertOnSubmit ( _
    entity As TEntity _
)
void InsertOnSubmit(
    TEntity entity
)
void InsertOnSubmit(
    TEntity entity
)
abstract InsertOnSubmit :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要插入的对象。

有关更多信息，请参见InsertOnSubmit。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ITable TEntity 接口
ITable TEntity 成员
System.Data.Linq 命名空间


ITable <(Of <(TEntity >)>) 属性

ITable
<
(Of
<
(
TEntity
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ITable

ITable TEntity 类型公开以下成员。

名称 说明
页首

参考

ITable TEntity 接口
System.Data.Linq 命名空间


Link <(Of <(T >)>) 结构

Link
<
(Of
<
(
T
>
)
>
)
结构
成员

用于启用单个属性（与 EntityRef<(Of <(TEntity>)>) 相似）的延迟加载。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Structure Link(Of T)
public struct Link<T>

generic<typename T>
public value class Link
[<SealedAttribute>]
type Link<'T> =  struct end

类型参数

T

延迟源中的元素的类型。

如果您将延迟源 (IEnumerable<(Of <(T>)>)) 分配给 Link<(Of <(T>)>)，则 Link<(Of <(T>)>) 会通过在首次访问 Value 时枚举源来加载该值。

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Link T 成员
System.Data.Linq 命名空间
EntityRef TEntity
EntitySet TEntity


Link <(Of <(T >)>) 成员

Link
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Link

用于启用单个属性（与 EntityRef<(Of <(TEntity>)>) 相似）的延迟加载。

Link T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Link T 结构
System.Data.Linq 命名空间


Link <(Of <(T >)>) 构造函数

Link
<
(Of
<
(
T
>
)
>
)
构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Link

初始化 Link<(Of <(T>)>) 结构的新实例。

名称 说明
页首

参考

Link T 结构
Link T 成员
System.Data.Linq 命名空间


Link <(Of <(T >)>) 构造函数 (T)

Link
<
(Of
<
(
T
>
)
>
)
构造函数 (T)
Link

通过引用属性的值初始化 Link<(Of <(T>)>) 结构的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    value As T _
)
public Link(
    T value
)
public:
Link(
    T value
)
new :
        value:'T -> Link

参数

value
类型： T
属性的值。

在已知该属性的值时使用此构造函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Link T 结构
Link T 成员
Link T 重载
System.Data.Linq 命名空间


Link <(Of <(T >)>) 构造函数 (IEnumerable <(Of <(T >)>))

Link
<
(Of
<
(
T
>
)
>
)
构造函数 (IEnumerable
<
(Of
<
(
T
>
)
>
)
)
Link

通过引用源初始化 Link<(Of <(T>)>) 结构的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    source As IEnumerable(Of T) _
)
public Link(
    IEnumerable<T> source
)
public:
Link(
    IEnumerable<T>^ source
)
new :
        source:IEnumerable<'T> -> Link

参数

source
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
T
>
)
>
)

源集合。

使用此构造函数初始化具有延迟值加载器（实现 IEnumerable<(Of <(T>)>)）的 Link<(Of <(T>)>)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Link T 结构
Link T 成员
Link T 重载
System.Data.Linq 命名空间


Link <(Of <(T >)>) 构造函数 (Link <(Of <(T >)>))

Link
<
(Of
<
(
T
>
)
>
)
构造函数 (Link
<
(Of
<
(
T
>
)
>
)
)
Link

通过从其他 Link<(Of <(T>)>) 实例复制内部状态来初始化 Link<(Of <(T>)>) 结构的一个新实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    link As Link(Of T) _
)
public Link(
    Link<T> link
)
public:
Link(
    Link<T> link
)
new :
        link:Link<'T> -> Link

参数

link
类型： System.Data.Linq Link
<
(Of
<
(
T
>
)
>
)

从其复制的 Link<(Of <(T>)>) 实例。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Link T 结构
Link T 成员
Link T 重载
System.Data.Linq 命名空间


Link <(Of <(T >)>) 方法

Link
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Link

Link T 类型公开以下成员。

名称 说明
页首

参考

Link T 结构
System.Data.Linq 命名空间


Link <(Of <(T >)>) 属性

Link
<
(Of
<
(
T
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Link

Link T 类型公开以下成员。

名称 说明
页首

参考

Link T 结构
System.Data.Linq 命名空间


Link <(Of <(T >)>) ..::.HasLoadedOrAssignedValue 属性

Link
<
(Of
<
(
T
>
)
>
)
.
.
::
.
HasLoadedOrAssignedValue 属性
Link

指定 Link<(Of <(T>)>) 是否已加载或分配某值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property HasLoadedOrAssignedValue As Boolean
    Get
public bool HasLoadedOrAssignedValue { get; }
public:
property bool HasLoadedOrAssignedValue {
    bool get ();
}
member HasLoadedOrAssignedValue : bool

属性值

类型： System Boolean
如果 Link<(Of <(T>)>) 已加载或分配某值，则为 true；否则为 false。

“加载”是指在具体化期间或延迟加载时已加载数据。”分配”是指已手动为数据授予一个值。 “加载”是指在具体化期间或延迟加载时已加载数据。”分配”是指已手动为数据授予一个值。

LINQ to SQL 使用此属性以确保 Link<(Of <(T>)>) 具有值，以便访问它不会触发延迟加载。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Link T 结构
Link T 成员
System.Data.Linq 命名空间


Link <(Of <(T >)>) ..::.HasValue 属性

Link
<
(Of
<
(
T
>
)
>
)
.
.
::
.
HasValue 属性
Link

获取指示源是否包含值的值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property HasValue As Boolean
    Get
public bool HasValue { get; }
public:
property bool HasValue {
    bool get ();
}
member HasValue : bool

属性值

类型： System Boolean
如果源包含已分配或加载值（包括 null），则返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Link T 结构
Link T 成员
System.Data.Linq 命名空间


Link <(Of <(T >)>) ..::.Value 属性

Link
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Value 属性
Link

获取或设置分配给或由 Link<(Of <(T>)>) 加载的值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Value As T
    Get
    Set
public T Value { get; set; }
public:
property T Value {
    T get ();
    void set (T value);
}
member Value : 'T with get, set

属性值

类型： T
此延迟属性的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Link T 结构
Link T 成员
System.Data.Linq 命名空间


MemberChangeConflict 类

MemberChangeConflict 类
成员

表示以下情况：由于自客户端上次读取成员值后这些值已被更新，因此尝试的更新失败。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class MemberChangeConflict
public sealed class MemberChangeConflict
public ref class MemberChangeConflict sealed
[<SealedAttribute>]
type MemberChangeConflict =  class end

下面的示例演示如何检索有关发生冲突的成员的信息。

' Add 'Imports System.Reflection' for this section.
Dim db As New Northwnd("...")
'...
Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine("Optimistic concurrency error.")
    Console.WriteLine(ex.Message)
    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        Dim metatable As MetaTable = db.Mapping.GetTable(occ.Object.GetType)
        Dim entityInConflict As Object = occ.Object

        Console.WriteLine("Table name: " & metatable.TableName)
        Console.Write("Customer ID: ")
        Console.WriteLine(entityInConflict.CustomerID)

        For Each mcc As MemberChangeConflict In occ.MemberConflicts
            Dim currVal = mcc.CurrentValue
            Dim origVal = mcc.OriginalValue
            Dim databaseVal = mcc.DatabaseValue
            Dim mi As MemberInfo = mcc.Member

            Console.WriteLine("Member: " & mi.Name)
            Console.WriteLine("current value: " & currVal)
            Console.WriteLine("original value: " & origVal)
            Console.WriteLine("database value: " & databaseVal)
            Console.ReadLine()
        Next
    Next
End Try

// Add 'using System.Reflection' for this section.
Northwnd db = new Northwnd("...");

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine("Optimistic concurrency error.");
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
        Customer entityInConflict = (Customer)occ.Object;
        Console.WriteLine("Table name: {0}", metatable.TableName);
        Console.Write("Customer ID: ");
        Console.WriteLine(entityInConflict.CustomerID);
        foreach (MemberChangeConflict mcc in occ.MemberConflicts)
        {
            object currVal = mcc.CurrentValue;
            object origVal = mcc.OriginalValue;
            object databaseVal = mcc.DatabaseValue;
            MemberInfo mi = mcc.Member;
            Console.WriteLine("Member: {0}", mi.Name);
            Console.WriteLine("current value: {0}", currVal);
            Console.WriteLine("original value: {0}", origVal);
            Console.WriteLine("database value: {0}", databaseVal);
            Console.ReadLine();
        }
    }
}

System.Data.Linq System.Data.Linq..::.MemberChangeConflictMemberChangeConflict
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MemberChangeConflict 成员
System.Data.Linq 命名空间


MemberChangeConflict 成员

MemberChangeConflict 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MemberChangeConflict 类

表示以下情况：由于自客户端上次读取成员值后这些值已被更新，因此尝试的更新失败。

MemberChangeConflict 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

MemberChangeConflict 类
System.Data.Linq 命名空间


MemberChangeConflict 方法

MemberChangeConflict 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MemberChangeConflict 类

MemberChangeConflict 类型公开以下成员。

名称 说明
页首

参考

MemberChangeConflict 类
System.Data.Linq 命名空间


MemberChangeConflict ..::.Resolve 方法

MemberChangeConflict
.
.
::
.
Resolve 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MemberChangeConflict 类

通过保留当前值并重置基线原始值以匹配较新数据库值来解决成员冲突。

名称 说明
页首

参考

MemberChangeConflict 类
MemberChangeConflict 成员
System.Data.Linq 命名空间


MemberChangeConflict ..::.Resolve 方法 (Object)

MemberChangeConflict
.
.
::
.
Resolve 方法 (Object)
MemberChangeConflict 类

指定要设置为发生冲突的成员的当前值的值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Resolve ( _
    value As Object _
)
public void Resolve(
    Object value
)
public:
void Resolve(
    Object^ value
)
member Resolve :
        value:Object -> unit

参数

value
类型： System Object
要设置为当前值的值。

此处设置的值是要在后续 SubmitChanges 操作中使用的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MemberChangeConflict 类
MemberChangeConflict 成员
Resolve 重载
System.Data.Linq 命名空间


MemberChangeConflict ..::.Resolve 方法 (RefreshMode)

MemberChangeConflict
.
.
::
.
Resolve 方法 (RefreshMode)
MemberChangeConflict 类

使用 RefreshMode 参数可自动指定要设置为发生冲突的成员的当前值的值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Resolve ( _
    refreshMode As RefreshMode _
)
public void Resolve(
    RefreshMode refreshMode
)
public:
void Resolve(
    RefreshMode refreshMode
)
member Resolve :
        refreshMode:RefreshMode -> unit

参数

refreshMode
类型： System.Data.Linq RefreshMode
请参见 RefreshMode。

下面的示例演示使用 RefreshMode 的各种值后会产生的结果。

下面的示例使用数据库中的值覆盖当前值。

Dim db As New Northwnd("...")

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' All database values overwrite current values.
        occ.Resolve(Data.Linq.RefreshMode.OverwriteCurrentValues)
    Next

End Try

Northwnd db = new Northwnd("...");
try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        // All database values overwrite current values.
        occ.Resolve(RefreshMode.OverwriteCurrentValues);
    }
}

下面的示例演示如何使用从数据库检索的值替换原始值。不会修改当前值。 下面的示例演示如何使用从数据库检索的值替换原始值。不会修改当前值。

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' No database values are merged into current.
        occ.Resolve(Data.Linq.RefreshMode.KeepCurrentValues)
    Next

End Try

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        //No database values are merged into current.
        occ.Resolve(RefreshMode.KeepCurrentValues);
    }
}

下面的示例保留已更改的当前值，但将其他值更新为数据库值。

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' Automerge database values into current for members
        ' that client has not modified.
        occ.Resolve(Data.Linq.RefreshMode.KeepChanges)
    Next

End Try

' Submit succeeds on second try.
db.SubmitChanges(ConflictMode.FailOnFirstConflict)

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    // Automerge database values for members that client
    // has not modified.
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        occ.Resolve(RefreshMode.KeepChanges);
    }
}

// Submit succeeds on second try.
db.SubmitChanges(ConflictMode.FailOnFirstConflict);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MemberChangeConflict 类
MemberChangeConflict 成员
Resolve 重载
System.Data.Linq 命名空间


MemberChangeConflict 属性

MemberChangeConflict 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MemberChangeConflict 类

MemberChangeConflict 类型公开以下成员。

名称 说明
页首

参考

MemberChangeConflict 类
System.Data.Linq 命名空间


MemberChangeConflict ..::.CurrentValue 属性

MemberChangeConflict
.
.
::
.
CurrentValue 属性
MemberChangeConflict 类

获取发生冲突的成员的当前值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property CurrentValue As Object
    Get
public Object CurrentValue { get; }
public:
property Object^ CurrentValue {
    Object^ get ();
}
member CurrentValue : Object

属性值

类型： System Object
发生冲突的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MemberChangeConflict 类
MemberChangeConflict 成员
System.Data.Linq 命名空间


MemberChangeConflict ..::.DatabaseValue 属性

MemberChangeConflict
.
.
::
.
DatabaseValue 属性
MemberChangeConflict 类

获取发生冲突的成员的数据库值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property DatabaseValue As Object
    Get
public Object DatabaseValue { get; }
public:
property Object^ DatabaseValue {
    Object^ get ();
}
member DatabaseValue : Object

属性值

类型： System Object
发生冲突的对象的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MemberChangeConflict 类
MemberChangeConflict 成员
System.Data.Linq 命名空间


MemberChangeConflict ..::.IsModified 属性

MemberChangeConflict
.
.
::
.
IsModified 属性
MemberChangeConflict 类

获取一个值，该值指示自上次读取或刷新数据库后，是否已更改成员数据。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property IsModified As Boolean
    Get
public bool IsModified { get; }
public:
property bool IsModified {
    bool get ();
}
member IsModified : bool

属性值

类型： System Boolean
如果成员数据已更改，则为 True。

使用该属性可合并新值，而不覆盖挂起的更新。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MemberChangeConflict 类
MemberChangeConflict 成员
System.Data.Linq 命名空间


MemberChangeConflict ..::.IsResolved 属性

MemberChangeConflict
.
.
::
.
IsResolved 属性
MemberChangeConflict 类

获取一个值，该值指示是否已解决冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property IsResolved As Boolean
    Get
public bool IsResolved { get; }
public:
property bool IsResolved {
    bool get ();
}
member IsResolved : bool

属性值

类型： System Boolean
如果冲突已解决，则为 True。

此属性为只读，并且会在冲突解决后自动更新。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MemberChangeConflict 类
MemberChangeConflict 成员
System.Data.Linq 命名空间


MemberChangeConflict ..::.Member 属性

MemberChangeConflict
.
.
::
.
Member 属性
MemberChangeConflict 类

获取有关发生冲突的成员的元数据信息。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Member As MemberInfo
    Get
public MemberInfo Member { get; }
public:
property MemberInfo^ Member {
    MemberInfo^ get ();
}
member Member : MemberInfo

属性值

类型： System.Reflection MemberInfo
有关发生冲突的成员的信息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MemberChangeConflict 类
MemberChangeConflict 成员
System.Data.Linq 命名空间


MemberChangeConflict ..::.OriginalValue 属性

MemberChangeConflict
.
.
::
.
OriginalValue 属性
MemberChangeConflict 类

获取发生冲突的成员的原始值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property OriginalValue As Object
    Get
public Object OriginalValue { get; }
public:
property Object^ OriginalValue {
    Object^ get ();
}
member OriginalValue : Object

属性值

类型： System Object
发生冲突的成员的原始值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MemberChangeConflict 类
MemberChangeConflict 成员
System.Data.Linq 命名空间


ModifiedMemberInfo 结构

ModifiedMemberInfo 结构
成员

具有已在 LINQ to SQL 应用程序中修改的成员的值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Structure ModifiedMemberInfo
public struct ModifiedMemberInfo
public value class ModifiedMemberInfo
[<SealedAttribute>]
type ModifiedMemberInfo =  struct end
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ModifiedMemberInfo 成员
System.Data.Linq 命名空间


ModifiedMemberInfo 成员

ModifiedMemberInfo 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModifiedMemberInfo 结构

具有已在 LINQ to SQL 应用程序中修改的成员的值。

ModifiedMemberInfo 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ModifiedMemberInfo 结构
System.Data.Linq 命名空间


ModifiedMemberInfo 方法

ModifiedMemberInfo 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModifiedMemberInfo 结构

ModifiedMemberInfo 类型公开以下成员。

名称 说明
页首

参考

ModifiedMemberInfo 结构
System.Data.Linq 命名空间


ModifiedMemberInfo 属性

ModifiedMemberInfo 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ModifiedMemberInfo 结构

ModifiedMemberInfo 类型公开以下成员。

名称 说明
页首

参考

ModifiedMemberInfo 结构
System.Data.Linq 命名空间


ModifiedMemberInfo ..::.CurrentValue 属性

ModifiedMemberInfo
.
.
::
.
CurrentValue 属性
ModifiedMemberInfo 结构

获取已修改成员的当前值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property CurrentValue As Object
    Get
public Object CurrentValue { get; }
public:
property Object^ CurrentValue {
    Object^ get ();
}
member CurrentValue : Object

属性值

类型： System Object
成员的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ModifiedMemberInfo 结构
ModifiedMemberInfo 成员
System.Data.Linq 命名空间


ModifiedMemberInfo ..::.Member 属性

ModifiedMemberInfo
.
.
::
.
Member 属性
ModifiedMemberInfo 结构

获取已修改成员的成员信息。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Member As MemberInfo
    Get
public MemberInfo Member { get; }
public:
property MemberInfo^ Member {
    MemberInfo^ get ();
}
member Member : MemberInfo

属性值

类型： System.Reflection MemberInfo
有关发生冲突的成员的信息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ModifiedMemberInfo 结构
ModifiedMemberInfo 成员
System.Data.Linq 命名空间


ModifiedMemberInfo ..::.OriginalValue 属性

ModifiedMemberInfo
.
.
::
.
OriginalValue 属性
ModifiedMemberInfo 结构

获取已修改成员的原始值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property OriginalValue As Object
    Get
public Object OriginalValue { get; }
public:
property Object^ OriginalValue {
    Object^ get ();
}
member OriginalValue : Object

属性值

类型： System Object
已修改成员的原始值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ModifiedMemberInfo 结构
ModifiedMemberInfo 成员
System.Data.Linq 命名空间


ObjectChangeConflict 类

ObjectChangeConflict 类
成员

表示对一个或多个开放式并发冲突的更新尝试。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class ObjectChangeConflict
public sealed class ObjectChangeConflict
public ref class ObjectChangeConflict sealed
[<SealedAttribute>]
type ObjectChangeConflict =  class end

由于客户端上次访问数据库值后这些值已被更新，因此尝试的更新失败。

下面的示例演示如何检索有关发生冲突的对象的信息。

Dim db As New Northwnd("...")

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine("Optimistic concurrency error.")
    Console.WriteLine(ex.Message)
    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        Dim metatable As MetaTable = db.Mapping.GetTable(occ.Object.GetType())
        Dim entityInConflict = occ.Object

        Console.WriteLine("Table name: " & metatable.TableName)
        Console.Write("Customer ID: ")
        Console.WriteLine(entityInConflict.CustomerID)
        Console.ReadLine()
    Next
End Try

Northwnd db = new Northwnd("...");

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine("Optimistic concurrency error.");
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
        Customer entityInConflict = (Customer)occ.Object;
        Console.WriteLine("Table name: {0}", metatable.TableName);
        Console.Write("Customer ID: ");
        Console.WriteLine(entityInConflict.CustomerID);
        Console.ReadLine();
    }
}

System.Data.Linq System.Data.Linq..::.ObjectChangeConflictObjectChangeConflict
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectChangeConflict 成员
System.Data.Linq 命名空间


ObjectChangeConflict 成员

ObjectChangeConflict 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectChangeConflict 类

表示对一个或多个开放式并发冲突的更新尝试。

ObjectChangeConflict 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectChangeConflict 类
System.Data.Linq 命名空间


ObjectChangeConflict 方法

ObjectChangeConflict 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectChangeConflict 类

ObjectChangeConflict 类型公开以下成员。

名称 说明
页首

参考

ObjectChangeConflict 类
System.Data.Linq 命名空间


ObjectChangeConflict ..::.Resolve 方法

ObjectChangeConflict
.
.
::
.
Resolve 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectChangeConflict 类

解决成员冲突。

名称 说明
页首

参考

ObjectChangeConflict 类
ObjectChangeConflict 成员
System.Data.Linq 命名空间


ObjectChangeConflict ..::.Resolve 方法

ObjectChangeConflict
.
.
::
.
Resolve 方法
ObjectChangeConflict 类

通过保留当前值并重置基线原始值以匹配较新数据库值来解决成员冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Resolve
public void Resolve()
public:
void Resolve()
member Resolve : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectChangeConflict 类
ObjectChangeConflict 成员
Resolve 重载
System.Data.Linq 命名空间


ObjectChangeConflict ..::.Resolve 方法 (RefreshMode)

ObjectChangeConflict
.
.
::
.
Resolve 方法 (RefreshMode)
ObjectChangeConflict 类

使用指定的 RefreshMode 来解决成员冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Resolve ( _
    refreshMode As RefreshMode _
)
public void Resolve(
    RefreshMode refreshMode
)
public:
void Resolve(
    RefreshMode refreshMode
)
member Resolve :
        refreshMode:RefreshMode -> unit

参数

refreshMode
类型： System.Data.Linq RefreshMode
RefreshMode 的相应选择。

下面的示例演示使用 RefreshMode 的各种值后会产生的结果。

下面的示例使用数据库中的值覆盖当前值。

Dim db As New Northwnd("...")

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' All database values overwrite current values.
        occ.Resolve(Data.Linq.RefreshMode.OverwriteCurrentValues)
    Next

End Try

Northwnd db = new Northwnd("...");
try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        // All database values overwrite current values.
        occ.Resolve(RefreshMode.OverwriteCurrentValues);
    }
}

下面的示例演示如何使用从数据库检索的值替换原始值。不会修改当前值。 下面的示例演示如何使用从数据库检索的值替换原始值。不会修改当前值。

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' No database values are merged into current.
        occ.Resolve(Data.Linq.RefreshMode.KeepCurrentValues)
    Next

End Try

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        //No database values are merged into current.
        occ.Resolve(RefreshMode.KeepCurrentValues);
    }
}

下面的示例保留已更改的当前值，但将其他值更新为数据库值。

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' Automerge database values into current for members
        ' that client has not modified.
        occ.Resolve(Data.Linq.RefreshMode.KeepChanges)
    Next

End Try

' Submit succeeds on second try.
db.SubmitChanges(ConflictMode.FailOnFirstConflict)

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    // Automerge database values for members that client
    // has not modified.
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        occ.Resolve(RefreshMode.KeepChanges);
    }
}

// Submit succeeds on second try.
db.SubmitChanges(ConflictMode.FailOnFirstConflict);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectChangeConflict 类
ObjectChangeConflict 成员
Resolve 重载
System.Data.Linq 命名空间


ObjectChangeConflict ..::.Resolve 方法 (RefreshMode, Boolean)

ObjectChangeConflict
.
.
::
.
Resolve 方法 (RefreshMode, Boolean)
ObjectChangeConflict 类

解决保留当前值且表示基线原始值的成员冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Resolve ( _
    refreshMode As RefreshMode, _
    autoResolveDeletes As Boolean _
)
public void Resolve(
    RefreshMode refreshMode,
    bool autoResolveDeletes
)
public:
void Resolve(
    RefreshMode refreshMode,
    bool autoResolveDeletes
)
member Resolve :
        refreshMode:RefreshMode *
        autoResolveDeletes:bool -> unit

参数

refreshMode
类型： System.Data.Linq RefreshMode
RefreshMode 的相应选择。
autoResolveDeletes
类型： System Boolean
如果为 true，则自动解决由数据库中不再存在的已修改对象产生的冲突。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectChangeConflict 类
ObjectChangeConflict 成员
Resolve 重载
System.Data.Linq 命名空间


ObjectChangeConflict 属性

ObjectChangeConflict 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectChangeConflict 类

ObjectChangeConflict 类型公开以下成员。

名称 说明
页首

参考

ObjectChangeConflict 类
System.Data.Linq 命名空间


ObjectChangeConflict ..::.IsDeleted 属性

ObjectChangeConflict
.
.
::
.
IsDeleted 属性
ObjectChangeConflict 类

获取指示是否已从数据库中删除发生冲突的对象的值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property IsDeleted As Boolean
    Get
public bool IsDeleted { get; }
public:
property bool IsDeleted {
    bool get ();
}
member IsDeleted : bool

属性值

类型： System Boolean
如果该对象已被删除，则为 True。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectChangeConflict 类
ObjectChangeConflict 成员
System.Data.Linq 命名空间


ObjectChangeConflict ..::.IsResolved 属性

ObjectChangeConflict
.
.
::
.
IsResolved 属性
ObjectChangeConflict 类

获取指示是否已解决此对象的冲突的值。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property IsResolved As Boolean
    Get
public bool IsResolved { get; }
public:
property bool IsResolved {
    bool get ();
}
member IsResolved : bool

属性值

类型： System Boolean
如果冲突已解决，则为 True。

此属性为只读，并且会在冲突解决后自动更新。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectChangeConflict 类
ObjectChangeConflict 成员
System.Data.Linq 命名空间


ObjectChangeConflict ..::.MemberConflicts 属性

ObjectChangeConflict
.
.
::
.
MemberConflicts 属性
ObjectChangeConflict 类

获取导致更新失败的所有成员冲突的集合。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property MemberConflicts As ReadOnlyCollection(Of MemberChangeConflict)
    Get
public ReadOnlyCollection<MemberChangeConflict> MemberConflicts { get; }
public:
property ReadOnlyCollection<MemberChangeConflict^>^ MemberConflicts {
    ReadOnlyCollection<MemberChangeConflict^>^ get ();
}
member MemberConflicts : ReadOnlyCollection<MemberChangeConflict>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MemberChangeConflict
>
)
>
)

成员冲突的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectChangeConflict 类
ObjectChangeConflict 成员
System.Data.Linq 命名空间


ObjectChangeConflict ..::.Object 属性

ObjectChangeConflict
.
.
::
.
Object 属性
ObjectChangeConflict 类

获取发生冲突的对象。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Object As Object
    Get
public Object Object { get; }
public:
property Object^ Object {
    Object^ get ();
}
member Object : Object

属性值

类型： System Object
发生冲突的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectChangeConflict 类
ObjectChangeConflict 成员
System.Data.Linq 命名空间


RefreshMode 枚举

RefreshMode 枚举

定义 Refresh 方法如何处理开放式并发冲突。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Enumeration RefreshMode
public enum RefreshMode
public enum class RefreshMode
type RefreshMode
成员名称 | 说明
KeepCurrentValues | 强制 Refresh 方法使用从数据库检索的值替换原始值。不会修改当前值。 强制 Refresh 方法使用从数据库检索的值替换原始值。不会修改当前值。
KeepChanges | 强制 Refresh 方法保留已更改的当前值，但将其他值更新为数据库值。
OverwriteCurrentValues | 强制 Refresh 方法使用数据库中的值重写所有当前值。

此枚举应用于所有 Refresh 重载。

下面的示例使用数据库中的值覆盖当前值。

Dim db As New Northwnd("...")

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' All database values overwrite current values.
        occ.Resolve(Data.Linq.RefreshMode.OverwriteCurrentValues)
    Next

End Try

Northwnd db = new Northwnd("...");
try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        // All database values overwrite current values.
        occ.Resolve(RefreshMode.OverwriteCurrentValues);
    }
}

下面的示例演示如何使用从数据库检索的值替换原始值。不会修改当前值。 下面的示例演示如何使用从数据库检索的值替换原始值。不会修改当前值。

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' No database values are merged into current.
        occ.Resolve(Data.Linq.RefreshMode.KeepCurrentValues)
    Next

End Try

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        //No database values are merged into current.
        occ.Resolve(RefreshMode.KeepCurrentValues);
    }
}

下面的示例保留已更改的当前值，但将其他值更新为数据库值。

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' Automerge database values into current for members
        ' that client has not modified.
        occ.Resolve(Data.Linq.RefreshMode.KeepChanges)
    Next

End Try

' Submit succeeds on second try.
db.SubmitChanges(ConflictMode.FailOnFirstConflict)

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    // Automerge database values for members that client
    // has not modified.
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        occ.Resolve(RefreshMode.KeepChanges);
    }
}

// Submit succeeds on second try.
db.SubmitChanges(ConflictMode.FailOnFirstConflict);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) 类

Table
<
(Of
<
(
TEntity
>
)
>
)
类
成员

表示基础数据库中特定类型的表。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class Table(Of TEntity As Class) _
    Implements IQueryProvider, ITable, IListSource, ITable(Of TEntity),  _
    IQueryable(Of TEntity), IEnumerable(Of TEntity), IQueryable,  _
    IEnumerable
public sealed class Table<TEntity> : IQueryProvider,
    ITable, IListSource, ITable<TEntity>, IQueryable<TEntity>,
    IEnumerable<TEntity>, IQueryable, IEnumerable
where TEntity : class

generic<typename TEntity>
where TEntity : ref class
public ref class Table sealed : IQueryProvider,
    ITable, IListSource, ITable<TEntity>, IQueryable<TEntity>,
    IEnumerable<TEntity>, IQueryable, IEnumerable
[<SealedAttribute>]
type Table<'TEntity when 'TEntity : not struct> =
    class
        interface IQueryProvider
        interface ITable
        interface IListSource
        interface ITable<'TEntity>
        interface IQueryable<'TEntity>
        interface IEnumerable<'TEntity>
        interface IQueryable
        interface IEnumerable
    end

类型参数

TEntity

表中的数据的类型。

此类使您能够对表进行查询以及添加、删除和附加对象。

应用程序可通过 GetTable 或通过使用强类型的 DataContext 的强类型属性来访问 Table<(Of <(TEntity>)>) 实例。也就是说，当设计器生成 DataContext 对象时，它生成用来表示每个表的属性。例如： 应用程序可通过 GetTable 或通过使用强类型的 DataContext 的强类型属性来访问 Table<(Of <(TEntity>)>) 实例。也就是说，当设计器生成 DataContext 对象时，它生成用来表示每个表的属性。例如： 应用程序可通过 GetTable 或通过使用强类型的 DataContext 的强类型属性来访问 Table<(Of <(TEntity>)>) 实例。也就是说，当设计器生成 DataContext 对象时，它生成用来表示每个表的属性。例如：

[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="SignOffTool")]
public partial class DataClasses1DataContext : System.Data.Linq.DataContext {
   public System.Data.Linq.Table<User> Users {
      get {
         return this.GetTable<User>();
      }
   }
}

对于此强类型的 DataContext,可以访问用户属性获取 Table<User>。

System.Data.Linq
System.Data.Linq..::.Table<(Of <(TEntity>)>)Table
System.Data.Linq..::.Table<(Of <(TEntity>)>)TEntity
System.Data.Linq..::.Table<(Of <(TEntity>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) 成员

Table
<
(Of
<
(
TEntity
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Table

表示基础数据库中特定类型的表。

Table TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Table TEntity 类
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Table

Table TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

Table TEntity 类
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.Attach 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Table

将实体附加到 DataContext。

名称 说明
页首

可对一些实体使用 Attach 方法。这些实体在一个 DataContext 中创建并序列化到客户端，随后被反序列化回来，以便执行更新或删除操作。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 可对一些实体使用 Attach 方法。这些实体在一个 DataContext 中创建并序列化到客户端，随后被反序列化回来，以便执行更新或删除操作。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

不要尝试对尚未通过序列化进行分离的实体执行 Attach 操作。尚未序列化的实体仍与延迟加载程序保持关联。如果实体改由第二个数据上下文跟踪，延迟加载程序可能会导致意外结果。 不要尝试对尚未通过序列化进行分离的实体执行 Attach 操作。尚未序列化的实体仍与延迟加载程序保持关联。如果实体改由第二个数据上下文跟踪，延迟加载程序可能会导致意外结果。

附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。

Attach 附件提供的对象的对象关系图中的所有实体。例如，下面的 C# 代码： Attach 附件提供的对象的对象关系图中的所有实体。例如，下面的 C# 代码：

using (SampleDataContext db = new SampleDataContext()) {
    Employee employee = new Employee { employeeId = 1 };

    Master master = new Master();
    master.Employee = employee;

    Child child = new Child();
    child.Employee = employee;

    db.Employees.Attach(employee);

    master.Child = child;

    db.Masters.InsertOnSubmit(master);

    db.SubmitChanges();
}

等效的 Visual Basic 代码为：

Using db As New SampleDataContext()    Dim employee As New Employee With { .employeeId = 1 }

    Dim master As New Master()
    master.Employee = employee

    Dim child As New Child()
    child.Employee = employee

    db.Employees.Attach(employee)

    master.Child = child

    db.Masters.InsertOnSubmit(master)

    db.SubmitChanges()

End Using

在 Employee 上调用 Attach 会附加职员、雇主和子，因为 Employee 同时具有和雇主和子之间的关系。您必须显式调用 InsertOnSubmit，以将状态从附加更改为插入。 在 Employee 上调用 Attach 会附加职员、雇主和子，因为 Employee 同时具有和雇主和子之间的关系。您必须显式调用 InsertOnSubmit，以将状态从附加更改为插入。

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.Attach 方法 (TEntity)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法 (TEntity)
Table

如果执行开放式并发检查时需要原始值，请将已断开连接或“已分离”的实体附加到新的 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Attach ( _
    entity As TEntity _
)
public void Attach(
    TEntity entity
)
public:
virtual void Attach(
    TEntity entity
) sealed
abstract Attach :
        entity:'TEntity -> unit
override Attach :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要附加的实体的原始值。

实现

可对一些实体使用 Attach 方法。这些实体在一个 DataContext 中创建并序列化到客户端，随后被反序列化回来，以便执行更新或删除操作。因为新的 DataContext 无法跟踪已断开连接的实体的原始值是什么，所以，客户端会负责提供这些值。在此版本的 Attach 中，假定实体处于其原始值状态。调用此方法后，可以更新其字段，例如使用从客户端发送的其他数据进行更新。 可对一些实体使用 Attach 方法。这些实体在一个 DataContext 中创建并序列化到客户端，随后被反序列化回来，以便执行更新或删除操作。因为新的 DataContext 无法跟踪已断开连接的实体的原始值是什么，所以，客户端会负责提供这些值。在此版本的 Attach 中，假定实体处于其原始值状态。调用此方法后，可以更新其字段，例如使用从客户端发送的其他数据进行更新。 可对一些实体使用 Attach 方法。这些实体在一个 DataContext 中创建并序列化到客户端，随后被反序列化回来，以便执行更新或删除操作。因为新的 DataContext 无法跟踪已断开连接的实体的原始值是什么，所以，客户端会负责提供这些值。在此版本的 Attach 中，假定实体处于其原始值状态。调用此方法后，可以更新其字段，例如使用从客户端发送的其他数据进行更新。 可对一些实体使用 Attach 方法。这些实体在一个 DataContext 中创建并序列化到客户端，随后被反序列化回来，以便执行更新或删除操作。因为新的 DataContext 无法跟踪已断开连接的实体的原始值是什么，所以，客户端会负责提供这些值。在此版本的 Attach 中，假定实体处于其原始值状态。调用此方法后，可以更新其字段，例如使用从客户端发送的其他数据进行更新。

附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。

有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

不要尝试对尚未通过序列化进行分离的实体执行 Attach 操作。尚未序列化的实体仍与延迟加载程序保持关联。如果实体改由第二个数据上下文跟踪，延迟加载程序可能会导致意外结果。 不要尝试对尚未通过序列化进行分离的实体执行 Attach 操作。尚未序列化的实体仍与延迟加载程序保持关联。如果实体改由第二个数据上下文跟踪，延迟加载程序可能会导致意外结果。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
Attach 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.Attach 方法 (TEntity, Boolean)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法 (TEntity, Boolean)
Table

以修改或未修改状态将实体附加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Attach ( _
    entity As TEntity, _
    asModified As Boolean _
)
public void Attach(
    TEntity entity,
    bool asModified
)
public:
void Attach(
    TEntity entity,
    bool asModified
)
member Attach :
        entity:'TEntity *
        asModified:bool -> unit

参数

entity
类型： TEntity
要附加的实体。
asModified
类型： System Boolean
如果为 True，则以修改状态附加这些实体。

如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
Attach 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.Attach 方法 (TEntity, TEntity)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法 (TEntity, TEntity)
Table

通过指定实体及其原始状态，以修改或未修改状态将实体附加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Attach ( _
    entity As TEntity, _
    original As TEntity _
)
public void Attach(
    TEntity entity,
    TEntity original
)
public:
void Attach(
    TEntity entity,
    TEntity original
)
member Attach :
        entity:'TEntity *
        original:'TEntity -> unit

参数

entity
类型： TEntity
要附加的实体。
original
类型： TEntity
与包含原始值的数据成员具有相同实体类型的实例。

在下面的示例中，已正确配置了 Customer 对象。您可以调用 Attach，而不必重播更新。 在下面的示例中，已正确配置了 Customer 对象。您可以调用 Attach，而不必重播更新。

附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。

Using db = New Northwnd("...")
    Dim Cust_File As New Customer()
    Dim xmlFile As String = ""

    'Get the original object from the deserializer.
    Dim c As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFile, Cust_File)

    ' Set all the desired properties to the entity to be attached.
    Dim c_updated As New Customer With {.CustomerID = c.CustomerID, _
    .Phone = "425-123-4567", .CompanyName = "Microsoft"}
    db.Customers.Attach(c_updated, c)

    ' Perform last minute updates, which will still take effect.
    c_updated.Phone = "425-765-4321"

    ' SubmitChanges()sets the phoneNumber and CompanyName of
    ' customer with customerID=Cust. to "425-765-4321" and
    ' "Microsoft" respectively.
    db.SubmitChanges()
End Using

using (Northwnd db2 = new Northwnd(@"c:\northwnd.mdf"))
{
    Customer Cust_File = new Customer();
    string xmlFile = "";

    // Get the original object from the deserializer.
    Customer c = SerializeHelper.Deserialize<Customer>
        (xmlFile, Cust_File);

    // Set all the desired properties to the entity to be attached.
    Customer c_updated = new Customer() { CustomerID = c.CustomerID,
        Phone = "425-123-4567", CompanyName = "Microsoft" };
    db2.Customers.Attach(c_updated, c);

    // Perform last minute updates, which will still take effect.
    c_updated.Phone = "425-765-4321";

    // SubmitChanges()sets the phoneNumber and CompanyName of
    // customer with customerID=Cust. to "425-765-4321" and
    // "Microsoft" respectively.
    db2.SubmitChanges();
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
Attach 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.Attach 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Table

名称 说明
页首

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.Attach 方法 (Object)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
Attach 方法 (Object)
Table

有关此成员的说明，请参见 Attach。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub Attach ( _
    entity As Object _
) Implements ITable.Attach
void ITable.Attach(
    Object entity
)
private:
virtual void Attach(
    Object^ entity
) sealed = ITable::Attach
private abstract Attach :
        entity:Object -> unit
private override Attach :
        entity:Object -> unit

参数

entity
类型： System Object
要附加的实体。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
Attach 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.Attach 方法 (Object, Boolean)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
Attach 方法 (Object, Boolean)
Table

有关此成员的说明，请参见 Attach。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub Attach ( _
    entity As Object, _
    asModified As Boolean _
) Implements ITable.Attach
void ITable.Attach(
    Object entity,
    bool asModified
)
private:
virtual void Attach(
    Object^ entity,
    bool asModified
) sealed = ITable::Attach
private abstract Attach :
        entity:Object *
        asModified:bool -> unit
private override Attach :
        entity:Object *
        asModified:bool -> unit

参数

entity
类型： System Object
要附加的实体。
asModified
类型： System Boolean
如果为 True，则以修改状态附加这些实体。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
Attach 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.Attach 方法 (Object, Object)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
Attach 方法 (Object, Object)
Table

有关此成员的说明，请参见 Attach。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub Attach ( _
    entity As Object, _
    original As Object _
) Implements ITable.Attach
void ITable.Attach(
    Object entity,
    Object original
)
private:
virtual void Attach(
    Object^ entity,
    Object^ original
) sealed = ITable::Attach
private abstract Attach :
        entity:Object *
        original:Object -> unit
private override Attach :
        entity:Object *
        original:Object -> unit

参数

entity
类型： System Object
要附加的实体。
original
类型： System Object
与包含原始值的数据成员具有相同实体类型的实例。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
Attach 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.AttachAll 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
AttachAll 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Table

以修改或未修改状态将集合的所有实体附加到 DataContext。

名称 说明
页首

如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。

附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。

有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.AttachAll <(Of <(TSubEntity >)>) 方法 (IEnumerable <(Of <(TSubEntity >)>))

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
AttachAll
<
(Of
<
(
TSubEntity
>
)
>
)
方法 (IEnumerable
<
(Of
<
(
TSubEntity
>
)
>
)
)
Table

以修改或未修改状态将集合的所有实体附加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub AttachAll(Of TSubEntity As TEntity) ( _
    entities As IEnumerable(Of TSubEntity) _
)
public void AttachAll<TSubEntity>(
    IEnumerable<TSubEntity> entities
)
where TSubEntity : TEntity

public:
generic<typename TSubEntity>
where TSubEntity : TEntity
void AttachAll(
    IEnumerable<TSubEntity>^ entities
)
member AttachAll :
        entities:IEnumerable<'TSubEntity> -> unit  when 'TSubEntity : 'TEntity

类型参数

TSubEntity

要附加的实体的类型。

参数

entities
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TSubEntity
>
)
>
)

实体的集合。

此方法将集合中的所有实体附加到新的 DataContext。附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 此方法将集合中的所有实体附加到新的 DataContext。附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 此方法将集合中的所有实体附加到新的 DataContext。附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 此方法将集合中的所有实体附加到新的 DataContext。附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。

有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
AttachAll 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.AttachAll <(Of <(TSubEntity >)>) 方法 (IEnumerable <(Of <(TSubEntity >)>), Boolean)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
AttachAll
<
(Of
<
(
TSubEntity
>
)
>
)
方法 (IEnumerable
<
(Of
<
(
TSubEntity
>
)
>
)
, Boolean)
Table

以修改或未修改状态将集合的所有实体附加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub AttachAll(Of TSubEntity As TEntity) ( _
    entities As IEnumerable(Of TSubEntity), _
    asModified As Boolean _
)
public void AttachAll<TSubEntity>(
    IEnumerable<TSubEntity> entities,
    bool asModified
)
where TSubEntity : TEntity

public:
generic<typename TSubEntity>
where TSubEntity : TEntity
void AttachAll(
    IEnumerable<TSubEntity>^ entities,
    bool asModified
)
member AttachAll :
        entities:IEnumerable<'TSubEntity> *
        asModified:bool -> unit  when 'TSubEntity : 'TEntity

类型参数

TSubEntity

要附加的实体的类型。

参数

entities
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TSubEntity
>
)
>
)

实体的集合。
asModified
类型： System Boolean
如果对象拥有时间戳或 RowVersion 成员，则为 true，如果执行开放式并发检查时要使用原始值，则为 false。

此方法以修改或未修改状态将集合的所有实体附加到 DataContext。如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。如果以未修改状态附加，则假定实体表示原始值。调用此方法后，可在调用 SubmitChanges 前使用来自客户端的其他信息修改实体的字段。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 此方法以修改或未修改状态将集合的所有实体附加到 DataContext。如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。如果以未修改状态附加，则假定实体表示原始值。调用此方法后，可在调用 SubmitChanges 前使用来自客户端的其他信息修改实体的字段。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 此方法以修改或未修改状态将集合的所有实体附加到 DataContext。如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。如果以未修改状态附加，则假定实体表示原始值。调用此方法后，可在调用 SubmitChanges 前使用来自客户端的其他信息修改实体的字段。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 此方法以修改或未修改状态将集合的所有实体附加到 DataContext。如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。如果以未修改状态附加，则假定实体表示原始值。调用此方法后，可在调用 SubmitChanges 前使用来自客户端的其他信息修改实体的字段。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 此方法以修改或未修改状态将集合的所有实体附加到 DataContext。如果以修改状态附加，则实体必须声明一个版本号或不得参与更新冲突检查。如果以未修改状态附加，则假定实体表示原始值。调用此方法后，可在调用 SubmitChanges 前使用来自客户端的其他信息修改实体的字段。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。 附加新的实体后，将会初始化所有子集合（例如，关联表中的实体的 EntitySet 集合）的延迟加载程序。调用 SubmitChanges 后，子集合的成员将被置于 Unmodified 状态。若要更新子集合的成员，必须显式调用 Attach，并指定该实体。

下面的示例演示如何对其他 DataContext 实例更新 Order 对象。此示例假定您具有到数据库的连接并且为其创建了一个 LINQ to SQL 文件（在此例中为 Northwind 示例数据库）。 下面的示例演示如何对其他 DataContext 实例更新 Order 对象。此示例假定您具有到数据库的连接并且为其创建了一个 LINQ to SQL 文件（在此例中为 Northwind 示例数据库）。

Using db As New Northwnd("")
    ' Get original Customer from deserialization.
    Dim q1 = db.Orders.First()
    Dim serializedQ As String = SerializeHelper.Serialize(q1)
    Dim q2 = SerializeHelper.Deserialize(serializedQ, q1)

    ' Track this object for an update (not insert).
    db.Orders.Attach(q2, False)

    ' Replay the changes.
    q2.ShipRegion = "King"
    q2.ShipAddress = "1 Microsoft Way"

    ' DataContext knows how to update the order.
    db.SubmitChanges()
End Using

using (Northwnd db = new Northwnd(@"c:\northwnd.mdf"))
{
    // Get original Customer from deserialization.
    var q1 = db.Orders.First();
    string serializedQ = SerializeHelper.Serialize(q1);
    var q2 = SerializeHelper.Deserialize(serializedQ, q1);

    // Track this object for an update (not insert).
    db.Orders.Attach(q2, false);

    // Replay the changes.
    q2.ShipRegion = "King";
    q2.ShipAddress = "1 Microsoft Way";

    // DataContext knows how to update the order.
    db.SubmitChanges();

}

在下面的示例中，要附加的实体对象与其他对象具有外键关系，并且存储在缓存中，但不会附加。当调用 SubmitChanges 时，ChangeProcessor 会为所有外键对象添加 Insert 操作。当在其他 DataContext 实例中再次使用实体实例时，此操作将具有副作用。因此，LINQ to SQL 不支持再次使用对象。 在下面的示例中，要附加的实体对象与其他对象具有外键关系，并且存储在缓存中，但不会附加。当调用 SubmitChanges 时，ChangeProcessor 会为所有外键对象添加 Insert 操作。当在其他 DataContext 实例中再次使用实体实例时，此操作将具有副作用。因此，LINQ to SQL 不支持再次使用对象。 在下面的示例中，要附加的实体对象与其他对象具有外键关系，并且存储在缓存中，但不会附加。当调用 SubmitChanges 时，ChangeProcessor 会为所有外键对象添加 Insert 操作。当在其他 DataContext 实例中再次使用实体实例时，此操作将具有副作用。因此，LINQ to SQL 不支持再次使用对象。 在下面的示例中，要附加的实体对象与其他对象具有外键关系，并且存储在缓存中，但不会附加。当调用 SubmitChanges 时，ChangeProcessor 会为所有外键对象添加 Insert 操作。当在其他 DataContext 实例中再次使用实体实例时，此操作将具有副作用。因此，LINQ to SQL 不支持再次使用对象。

Sub method7()
    Dim c As Customer = Nothing
    Using db = New Northwnd("...")
        ' Get both the customer c and the customer's order
        ' into the cache.
        c = db.Customers.First()
        Dim sc = c.Orders.First().ShipCity
    End Using

    Using nw2 = New Northwnd("...")
        ' Attach customers and update the address.
        nw2.Customers.Attach(c, False)
        c.Address = "new"
        nw2.Log = Console.Out

        ' At SubmitChanges, you will see INSERT requests for all
        ' c's orders.
        nw2.SubmitChanges()
    End Using

Customer c = null;
using (Northwnd db = new Northwnd(""))
{
    /* Get both the customer c and the customer's order
    into the cache. */
    c = db.Customers.First();
    string sc = c.Orders.First().ShipCity;
}

using (Northwnd nw2 = new Northwnd(""))
{
    // Attach customers and update the address.
    nw2.Customers.Attach(c, false);
    c.Address = "new";
    nw2.Log = Console.Out;

    /* At SubmitChanges, you will see INSERT requests for all
    Customer c’s orders. */
    nw2.SubmitChanges();
}

下面的示例演示以下情况：客户 A 已取消所有订单，而 Customer B 具有这些订单的所有权。您可以同时附加客户 A 的所有订单。 下面的示例演示以下情况：客户 A 已取消所有订单，而 Customer B 具有这些订单的所有权。您可以同时附加客户 A 的所有订单。

Dim custA_File = New Customer()
Dim custB_File = New Customer()
Dim xmlFileA As String = ""
Dim xmlFileB As String = ""

' Get the serialized objects.
Dim A As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFileA, custA_File)
Dim B As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFileB, custB_File)

Dim AOrders As List(Of Order) = A.Orders.ToList()

Using db As New Northwnd("...")
    'Attach all the orders belonging to Customer A all at once.
    db.Orders.AttachAll(AOrders, False)

    ' Update the orders belonging to Customer A to show them
    ' as owned by Customer B
    For Each o In AOrders
        o.CustomerID = B.CustomerID
    Next

    ' DataContext can now apply the change of ownership to
    'the database
    db.SubmitChanges()
End Using

Customer CustA_File = new Customer();
Customer CustB_File = new Customer();
string xmlFileA = "";
string xmlFileB = "";

// Get the serialized objects.
Customer A = SerializeHelper.Deserialize<Customer>(xmlFileA, CustA_File);
Customer B = SerializeHelper.Deserialize<Customer>(xmlFileB, CustB_File);
List<Order> AOrders = A.Orders.ToList();

using (Northwnd db = new Northwnd(@"c:\northwnd.mdf"))

{
    //Attach all the orders belonging to Customer A all at once.
    db.Orders.AttachAll(AOrders, false);

    // Update the orders belonging to Customer A to show them
    // as owned by Customer B.
    foreach (Order o in AOrders)
    {
        o.CustomerID = B.CustomerID;
    }

    // DataContext can now apply the change of ownership to
    // the database.
    db.SubmitChanges();
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
AttachAll 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.AttachAll 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
AttachAll 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Table

名称 说明
页首

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.AttachAll 方法 (IEnumerable)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
AttachAll 方法 (IEnumerable)
Table

有关此成员的说明，请参见 AttachAll。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub AttachAll ( _
    entities As IEnumerable _
) Implements ITable.AttachAll
void ITable.AttachAll(
    IEnumerable entities
)
private:
virtual void AttachAll(
    IEnumerable^ entities
) sealed = ITable::AttachAll
private abstract AttachAll :
        entities:IEnumerable -> unit
private override AttachAll :
        entities:IEnumerable -> unit

参数

entities
类型： System.Collections IEnumerable
实体的集合。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
AttachAll 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.AttachAll 方法 (IEnumerable, Boolean)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
AttachAll 方法 (IEnumerable, Boolean)
Table

有关此成员的说明，请参见 AttachAll。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub AttachAll ( _
    entities As IEnumerable, _
    asModified As Boolean _
) Implements ITable.AttachAll
void ITable.AttachAll(
    IEnumerable entities,
    bool asModified
)
private:
virtual void AttachAll(
    IEnumerable^ entities,
    bool asModified
) sealed = ITable::AttachAll
private abstract AttachAll :
        entities:IEnumerable *
        asModified:bool -> unit
private override AttachAll :
        entities:IEnumerable *
        asModified:bool -> unit

参数

entities
类型： System.Collections IEnumerable
实体的集合。
asModified
类型： System Boolean
如果为 True，则以修改状态附加这些实体。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
AttachAll 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.CreateQuery 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
CreateQuery 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Table

名称 说明
页首

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IQueryProvider ..::.CreateQuery 方法 (Expression)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IQueryProvider
.
.
::
.
CreateQuery 方法 (Expression)
Table

有关此成员的说明，请参见 CreateQuery。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function CreateQuery(Of TResult) ( _
    expression As Expression _
) As IQueryable(Of TResult) Implements IQueryProvider.CreateQuery
IQueryable<TResult> IQueryProvider.CreateQuery<TResult>(
    Expression expression
)

private:
generic<typename TResult>
virtual IQueryable<TResult>^ CreateQuery(
    Expression^ expression
) sealed = IQueryProvider::CreateQuery
private abstract CreateQuery :
        expression:Expression -> IQueryable<'TResult>
private override CreateQuery :
        expression:Expression -> IQueryable<'TResult>

类型参数

TResult

表中的数据的类型。

参数

expression
类型： System.Linq.Expressions Expression
查询表达式。

返回值

类型： System.Linq IQueryable
<
(Of
<
(
TResult
>
)
>
)

一个 IQueryable，它可计算指定的表达式树所表示的查询。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryProvider 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryProvider 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
CreateQuery 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IQueryProvider ..::.CreateQuery 方法 (Expression)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IQueryProvider
.
.
::
.
CreateQuery 方法 (Expression)
Table

有关此成员的说明，请参见 CreateQuery。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function CreateQuery ( _
    expression As Expression _
) As IQueryable Implements IQueryProvider.CreateQuery
IQueryable IQueryProvider.CreateQuery(
    Expression expression
)
private:
virtual IQueryable^ CreateQuery(
    Expression^ expression
) sealed = IQueryProvider::CreateQuery
private abstract CreateQuery :
        expression:Expression -> IQueryable
private override CreateQuery :
        expression:Expression -> IQueryable

参数

expression
类型： System.Linq.Expressions Expression
查询表达式。

返回值

类型： System.Linq IQueryable
一个 IQueryable，它可计算指定的表达式树所表示的查询。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryProvider 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryProvider 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
CreateQuery 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.DeleteAllOnSubmit <(Of <(TSubEntity >)>) 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
DeleteAllOnSubmit
<
(Of
<
(
TSubEntity
>
)
>
)
方法
Table

将集合中的所有实体置于 pending delete 状态。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub DeleteAllOnSubmit(Of TSubEntity As TEntity) ( _
    entities As IEnumerable(Of TSubEntity) _
)
public void DeleteAllOnSubmit<TSubEntity>(
    IEnumerable<TSubEntity> entities
)
where TSubEntity : TEntity

public:
generic<typename TSubEntity>
where TSubEntity : TEntity
void DeleteAllOnSubmit(
    IEnumerable<TSubEntity>^ entities
)
member DeleteAllOnSubmit :
        entities:IEnumerable<'TSubEntity> -> unit  when 'TSubEntity : 'TEntity

类型参数

TSubEntity

要删除的元素的类型。

参数

entities
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TSubEntity
>
)
>
)

要删除的实体。

使用该方法时，待删除状态的项不会从查询结果中消失，直到调用 SubmitChanges。必须首先附加已断开连接的实体，然后才能将其删除。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 使用该方法时，待删除状态的项不会从查询结果中消失，直到调用 SubmitChanges。必须首先附加已断开连接的实体，然后才能将其删除。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 使用该方法时，待删除状态的项不会从查询结果中消失，直到调用 SubmitChanges。必须首先附加已断开连接的实体，然后才能将其删除。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

下面的 C# 代码段显示此方法的一个用途：

IEnumerable<Customer> customersWithoutOrders = (from c in db.Customers
   where c.Orders.Count == 0
   select c).ToList();

db.Customers.DeleteAllOnSubmit(customersWithoutOrders);
db.SubmitChanges();

在 Visual Basic 中：

Dim customersWithoutOrders As IEnumerable(Of Customer) = (From c In db.Customers _
    Where c.Orders.Count = 0 _
    Select c).ToList()

db.Customers.DeleteAllOnSubmit(customersWithoutOrders)
db.SubmitChanges()

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.DeleteOnSubmit 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
DeleteOnSubmit 方法
Table

将此表中的实体置为 pending delete 状态。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub DeleteOnSubmit ( _
    entity As TEntity _
)
public void DeleteOnSubmit(
    TEntity entity
)
public:
virtual void DeleteOnSubmit(
    TEntity entity
) sealed
abstract DeleteOnSubmit :
        entity:'TEntity -> unit
override DeleteOnSubmit :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要删除的实体。

实现

在调用 SubmitChanges 之后，删除的实体才会从查询结果中消失。必须首先附加已断开连接的实体，然后才能将其删除。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 在调用 SubmitChanges 之后，删除的实体才会从查询结果中消失。必须首先附加已断开连接的实体，然后才能将其删除。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 在调用 SubmitChanges 之后，删除的实体才会从查询结果中消失。必须首先附加已断开连接的实体，然后才能将其删除。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

说明 说明

LINQ to SQL 不支持且无法识别级联删除操作。如果要从表中删除一个具有约束的行，必须在数据库的外键约束中设置 ON DELETE CASCADE 规则，或者使用自己的代码首先删除那些阻止删除父对象的子对象。 否则会引发异常。 LINQ to SQL 不支持且无法识别级联删除操作。如果要从表中删除一个具有约束的行，必须在数据库的外键约束中设置 ON DELETE CASCADE 规则，或者使用自己的代码首先删除那些阻止删除父对象的子对象。 否则会引发异常。

' Query the database for the rows to be deleted.
Dim deleteOrderDetails = _
    From details In db.OrderDetails() _
    Where details.OrderID = 11000 _
    Select details

For Each detail As OrderDetail In deleteOrderDetails
    db.OrderDetails.DeleteOnSubmit(detail)
Next

Try
    db.SubmitChanges()
Catch ex As Exception
    Console.WriteLine(ex)
    ' Provide for exceptions
End Try

// Query the database for the rows to be deleted.
var deleteOrderDetails =
    from details in db.OrderDetails
    where details.OrderID == 11000
    select details;

foreach (var detail in deleteOrderDetails)
{
    db.OrderDetails.DeleteOnSubmit(detail);
}

try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e);
    // Provide for exceptions.
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.Execute 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Execute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Table

名称 说明
页首

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IQueryProvider ..::.Execute 方法 (Expression)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IQueryProvider
.
.
::
.
Execute 方法 (Expression)
Table

有关此成员的说明，请参见 Execute。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function Execute ( _
    expression As Expression _
) As Object Implements IQueryProvider.Execute
Object IQueryProvider.Execute(
    Expression expression
)
private:
virtual Object^ Execute(
    Expression^ expression
) sealed = IQueryProvider::Execute
private abstract Execute :
        expression:Expression -> Object
private override Execute :
        expression:Expression -> Object

参数

expression
类型： System.Linq.Expressions Expression
要执行的查询表达式。

返回值

类型： System Object
执行指定查询所生成的值。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryProvider 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryProvider 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
Execute 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IQueryProvider ..::.Execute 方法 (Expression)

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IQueryProvider
.
.
::
.
Execute 方法 (Expression)
Table

有关此成员的说明，请参见 Execute。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function Execute(Of TResult) ( _
    expression As Expression _
) As TResult Implements IQueryProvider.Execute
TResult IQueryProvider.Execute<TResult>(
    Expression expression
)

private:
generic<typename TResult>
virtual TResult Execute(
    Expression^ expression
) sealed = IQueryProvider::Execute
private abstract Execute :
        expression:Expression -> 'TResult
private override Execute :
        expression:Expression -> 'TResult

类型参数

TResult

表中的数据的类型。

参数

expression
类型： System.Linq.Expressions Expression
要执行的查询表达式。

返回值

类型：TResult
执行指定查询所生成的值。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryProvider 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryProvider 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
Execute 重载
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.GetEnumerator 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
GetEnumerator 方法
Table

获取此集合的枚举器。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetEnumerator As IEnumerator(Of TEntity)
public IEnumerator<TEntity> GetEnumerator()
public:
IEnumerator<TEntity>^ GetEnumerator()
member GetEnumerator : unit -> IEnumerator<'TEntity>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
TEntity
>
)
>
)

一个可用于循环访问集合的枚举器。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.GetModifiedMembers 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
GetModifiedMembers 方法
Table

返回包含其当前和原始值的已修改成员的数组。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetModifiedMembers ( _
    entity As TEntity _
) As ModifiedMemberInfo()
public ModifiedMemberInfo[] GetModifiedMembers(
    TEntity entity
)
public:
array<ModifiedMemberInfo>^ GetModifiedMembers(
    TEntity entity
)
member GetModifiedMembers :
        entity:'TEntity -> ModifiedMemberInfo[]

参数

entity
类型： TEntity
从其获取数组的实体。

返回值

类型：
array<
System.Data.Linq ModifiedMemberInfo
>
[]
()
[]

已修改成员的数组。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.GetNewBindingList 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
GetNewBindingList 方法
Table

创建用于绑定到数据源的新列表。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetNewBindingList As IBindingList
public IBindingList GetNewBindingList()
public:
IBindingList^ GetNewBindingList()
member GetNewBindingList : unit -> IBindingList

返回值

类型： System.ComponentModel IBindingList
用于绑定到数据源的新 IBindingList。

返回的列表支持标准操作，例如，添加、删除、插入和更新操作，但保存操作必须由程序员显式管理。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.GetOriginalEntityState 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
GetOriginalEntityState 方法
Table

返回包含实体的原始状态的实例。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetOriginalEntityState ( _
    entity As TEntity _
) As TEntity
public TEntity GetOriginalEntityState(
    TEntity entity
)
public:
TEntity GetOriginalEntityState(
    TEntity entity
)
member GetOriginalEntityState :
        entity:'TEntity -> 'TEntity

参数

entity
类型： TEntity
要返回其原始状态的实体。

返回值

类型： TEntity
其原始状态下的 Table<(Of <(TEntity>)>) 实例。

此方法可返回在创建实体或将实体附加到当前 DataContext 之后的实体原始状态。已序列化和反序列化的实体的原始状态必须通过独立的跟踪机制提供，并在附加到新的 DataContext 时提供。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 此方法可返回在创建实体或将实体附加到当前 DataContext 之后的实体原始状态。已序列化和反序列化的实体的原始状态必须通过独立的跟踪机制提供，并在附加到新的 DataContext 时提供。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。 此方法可返回在创建实体或将实体附加到当前 DataContext 之后的实体原始状态。已序列化和反序列化的实体的原始状态必须通过独立的跟踪机制提供，并在附加到新的 DataContext 时提供。有关更多信息，请参见N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IEnumerable <(Of <(TEntity >)>) ..::.GetEnumerator 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IEnumerable
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
GetEnumerator 方法
Table

有关此成员的说明，请参见 GetEnumerator。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function GetEnumerator As IEnumerator(Of TEntity)
    Implements IEnumerable(Of TEntity).GetEnumerator
IEnumerator<TEntity> IEnumerable<TEntity>.GetEnumerator()
private:
virtual IEnumerator<TEntity>^ GetEnumerator() sealed = IEnumerable<TEntity>::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator<'TEntity>
private override GetEnumerator : unit -> IEnumerator<'TEntity>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
TEntity
>
)
>
)

一个可用于循环访问集合的枚举器。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IEnumerable ..::.GetEnumerator 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
Table

有关此成员的说明，请参见 GetEnumerator。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个可用于循环访问集合的枚举器。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IEnumerable<(Of <(T>)>) 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IEnumerable<(Of <(T>)>) 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IListSource ..::.GetList 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IListSource
.
.
::
.
GetList 方法
Table

有关此成员的说明，请参见 GetList。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function GetList As IList
    Implements IListSource.GetList
IList IListSource.GetList()
private:
virtual IList^ GetList() sealed = IListSource::GetList
private abstract GetList : unit -> IList
private override GetList : unit -> IList

返回值

类型： System.Collections IList
一个可以绑定到数据源的 IList。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IListSource 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IListSource 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.InsertAllOnSubmit <(Of <(TSubEntity >)>) 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
InsertAllOnSubmit
<
(Of
<
(
TSubEntity
>
)
>
)
方法
Table

将集合中所有处于 pending insert 状态的实体添加到 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub InsertAllOnSubmit(Of TSubEntity As TEntity) ( _
    entities As IEnumerable(Of TSubEntity) _
)
public void InsertAllOnSubmit<TSubEntity>(
    IEnumerable<TSubEntity> entities
)
where TSubEntity : TEntity

public:
generic<typename TSubEntity>
where TSubEntity : TEntity
void InsertAllOnSubmit(
    IEnumerable<TSubEntity>^ entities
)
member InsertAllOnSubmit :
        entities:IEnumerable<'TSubEntity> -> unit  when 'TSubEntity : 'TEntity

类型参数

TSubEntity

要插入的元素的类型。

参数

entities
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TSubEntity
>
)
>
)

要添加的实体。

在调用 SubmitChanges 之前，已添加的实体将不会位于查询结果中。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.InsertOnSubmit 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
InsertOnSubmit 方法
Table

将处于 pending insert 状态的实体添加到此 Table<(Of <(TEntity>)>)。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub InsertOnSubmit ( _
    entity As TEntity _
)
public void InsertOnSubmit(
    TEntity entity
)
public:
virtual void InsertOnSubmit(
    TEntity entity
) sealed
abstract InsertOnSubmit :
        entity:'TEntity -> unit
override InsertOnSubmit :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要添加的实体。

实现

在调用 SubmitChanges 之前，将不会出现此表的查询结果中已添加的实体。

' Create a new Order object.
Dim ord As New Order With _
{.OrderID = 12000, _
 .ShipCity = "Seattle", _
 .OrderDate = DateTime.Now}

' Add the new object to the Orders collection.
db.Orders.InsertOnSubmit(ord)

' Submit the change to the database.
Try
    db.SubmitChanges()
Catch e As Exception
    Console.WriteLine(e)
    ' Make some adjustments.
    ' ...
    ' Try again.
    db.SubmitChanges()
End Try

// Create a new Order object.
Order ord = new Order
{
    OrderID = 12000,
    ShipCity = "Seattle",
    OrderDate = DateTime.Now
    // …
};

// Add the new object to the Orders collection.
db.Orders.InsertOnSubmit(ord);

// Submit the change to the database.
try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e);
    // Make some adjustments.
    // ...
    // Try again.
    db.SubmitChanges();
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.DeleteAllOnSubmit 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
DeleteAllOnSubmit 方法
Table

有关此成员的说明，请参见 DeleteAllOnSubmit。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub DeleteAllOnSubmit ( _
    entities As IEnumerable _
) Implements ITable.DeleteAllOnSubmit
void ITable.DeleteAllOnSubmit(
    IEnumerable entities
)
private:
virtual void DeleteAllOnSubmit(
    IEnumerable^ entities
) sealed = ITable::DeleteAllOnSubmit
private abstract DeleteAllOnSubmit :
        entities:IEnumerable -> unit
private override DeleteAllOnSubmit :
        entities:IEnumerable -> unit

参数

entities
类型： System.Collections IEnumerable
要移除的实体。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.DeleteOnSubmit 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
DeleteOnSubmit 方法
Table

有关此成员的说明，请参见 DeleteOnSubmit。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub DeleteOnSubmit ( _
    entity As Object _
) Implements ITable.DeleteOnSubmit
void ITable.DeleteOnSubmit(
    Object entity
)
private:
virtual void DeleteOnSubmit(
    Object^ entity
) sealed = ITable::DeleteOnSubmit
private abstract DeleteOnSubmit :
        entity:Object -> unit
private override DeleteOnSubmit :
        entity:Object -> unit

参数

entity
类型： System Object
要移除的实体。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

说明 说明

LINQ to SQL 不支持且无法识别级联删除操作。如果要从表中删除一个具有约束的行，必须在数据库的外键约束中设置 ON DELETE CASCADE 规则，或者使用自己的代码首先删除那些阻止删除父对象的子对象。否则会引发异常。 LINQ to SQL 不支持且无法识别级联删除操作。如果要从表中删除一个具有约束的行，必须在数据库的外键约束中设置 ON DELETE CASCADE 规则，或者使用自己的代码首先删除那些阻止删除父对象的子对象。否则会引发异常。 LINQ to SQL 不支持且无法识别级联删除操作。如果要从表中删除一个具有约束的行，必须在数据库的外键约束中设置 ON DELETE CASCADE 规则，或者使用自己的代码首先删除那些阻止删除父对象的子对象。否则会引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.GetModifiedMembers 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
GetModifiedMembers 方法
Table

有关此成员的说明，请参见 GetModifiedMembers。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function GetModifiedMembers ( _
    entity As Object _
) As ModifiedMemberInfo() Implements ITable.GetModifiedMembers
ModifiedMemberInfo[] ITable.GetModifiedMembers(
    Object entity
)
private:
virtual array<ModifiedMemberInfo>^ GetModifiedMembers(
    Object^ entity
) sealed = ITable::GetModifiedMembers
private abstract GetModifiedMembers :
        entity:Object -> ModifiedMemberInfo[]
private override GetModifiedMembers :
        entity:Object -> ModifiedMemberInfo[]

参数

entity
类型： System Object
要从其获取已修改成员的实体。

返回值

类型：
array<
System.Data.Linq ModifiedMemberInfo
>
[]
()
[]

已修改成员的数组。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.GetOriginalEntityState 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
GetOriginalEntityState 方法
Table

有关此成员的说明，请参见 GetOriginalEntityState。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Function GetOriginalEntityState ( _
    entity As Object _
) As Object Implements ITable.GetOriginalEntityState
Object ITable.GetOriginalEntityState(
    Object entity
)
private:
virtual Object^ GetOriginalEntityState(
    Object^ entity
) sealed = ITable::GetOriginalEntityState
private abstract GetOriginalEntityState :
        entity:Object -> Object
private override GetOriginalEntityState :
        entity:Object -> Object

参数

entity
类型： System Object
要访问其原始状态的实体。

返回值

类型： System Object
原始实体的副本。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.InsertAllOnSubmit 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
InsertAllOnSubmit 方法
Table

有关此成员的说明，请参见 InsertAllOnSubmit。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub InsertAllOnSubmit ( _
    entities As IEnumerable _
) Implements ITable.InsertAllOnSubmit
void ITable.InsertAllOnSubmit(
    IEnumerable entities
)
private:
virtual void InsertAllOnSubmit(
    IEnumerable^ entities
) sealed = ITable::InsertAllOnSubmit
private abstract InsertAllOnSubmit :
        entities:IEnumerable -> unit
private override InsertAllOnSubmit :
        entities:IEnumerable -> unit

参数

entities
类型： System.Collections IEnumerable
实体的集合。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ITable ..::.InsertOnSubmit 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ITable
.
.
::
.
InsertOnSubmit 方法
Table

有关此成员的说明，请参见 InsertOnSubmit。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private Sub InsertOnSubmit ( _
    entity As Object _
) Implements ITable.InsertOnSubmit
void ITable.InsertOnSubmit(
    Object entity
)
private:
virtual void InsertOnSubmit(
    Object^ entity
) sealed = ITable::InsertOnSubmit
private abstract InsertOnSubmit :
        entity:Object -> unit
private override InsertOnSubmit :
        entity:Object -> unit

参数

entity
类型： System Object
要添加的实体。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 ITable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.ToString 方法

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ToString 方法
Table

返回表示表的字符串。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overrides Function ToString As String
public override string ToString()
public:
virtual String^ ToString() override
abstract ToString : unit -> string
override ToString : unit -> string

返回值

类型： System String
一个表示表的字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) 属性

Table
<
(Of
<
(
TEntity
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Table

Table TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Table TEntity 类
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.Context 属性

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Context 属性
Table

获取已用于检索此 Table<(Of <(TEntity>)>) 的 DataContext。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Context As DataContext
    Get
public DataContext Context { get; }
public:
virtual property DataContext^ Context {
    DataContext^ get () sealed;
}
abstract Context : DataContext
override Context : DataContext

属性值

类型： System.Data.Linq DataContext
DataContext。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IListSource ..::.ContainsListCollection 属性

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IListSource
.
.
::
.
ContainsListCollection 属性
Table

有关此成员的说明，请参见 ContainsListCollection。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property ContainsListCollection As Boolean
    Implements IListSource.ContainsListCollection
    Get
bool IListSource.ContainsListCollection { get; }
private:
virtual property bool ContainsListCollection {
    bool get () sealed = IListSource::ContainsListCollection::get;
}
private abstract ContainsListCollection : bool
private override ContainsListCollection : bool

属性值

类型： System Boolean
如果集合是 IList 对象集合，则为 true；否则，为 false。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IListSource 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IListSource 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IQueryable ..::.ElementType 属性

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IQueryable
.
.
::
.
ElementType 属性
Table

有关此成员的说明，请参见 ElementType。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property ElementType As Type
    Implements IQueryable.ElementType
    Get
Type IQueryable.ElementType { get; }
private:
virtual property Type^ ElementType {
    Type^ get () sealed = IQueryable::ElementType::get;
}
private abstract ElementType : Type
private override ElementType : Type

属性值

类型： System Type
一个 Type，表示在执行与此对象关联的表达式树时返回的元素的类型。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IQueryable ..::.Expression 属性

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IQueryable
.
.
::
.
Expression 属性
Table

有关此成员的说明，请参见 Expression。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property Expression As Expression
    Implements IQueryable.Expression
    Get
Expression IQueryable.Expression { get; }
private:
virtual property Expression^ Expression {
    Expression^ get () sealed = IQueryable::Expression::get;
}
private abstract Expression : Expression
private override Expression : Expression

属性值

类型： System.Linq.Expressions Expression
与 IQueryable 的此实例关联的 Expression。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IQueryable ..::.Provider 属性

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IQueryable
.
.
::
.
Provider 属性
Table

有关此成员的说明，请参见 Provider。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Private ReadOnly Property Provider As IQueryProvider
    Implements IQueryable.Provider
    Get
IQueryProvider IQueryable.Provider { get; }
private:
virtual property IQueryProvider^ Provider {
    IQueryProvider^ get () sealed = IQueryable::Provider::get;
}
private abstract Provider : IQueryProvider
private override Provider : IQueryProvider

属性值

类型： System.Linq IQueryProvider
与此数据源关联的 IQueryProvider。

实现

此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryable 接口时使用。 此成员是显式的接口成员实现。它只能在 Table<(Of <(TEntity>)>) 实例被强制转换为 IQueryable 接口时使用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


Table <(Of <(TEntity >)>) ..::.IsReadOnly 属性

Table
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
IsReadOnly 属性
Table

指示此 Table<(Of <(TEntity>)>) 实例中包含的实体的类型是否具有主键。

命名空间： System.Data.Linq
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property IsReadOnly As Boolean
    Get
public bool IsReadOnly { get; }
public:
virtual property bool IsReadOnly {
    bool get () sealed;
}
abstract IsReadOnly : bool
override IsReadOnly : bool

属性值

类型： System Boolean
如果实体类型不具有主键，则返回 true；否则返回 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Table TEntity 类
Table TEntity 成员
System.Data.Linq 命名空间


System.Data.Linq.Mapping 命名空间

System.Data.Linq.Mapping 命名空间

The System.Data.Linq.Mapping namespace contains classes that are used to generate a LINQ to SQL object model that represents the structure and content of a relational database.

 | 类 | 说明
公共类 | AssociationAttribute | 指定表示数据库关联（如外键关系）的属性。
公共类 | AttributeMappingSource | 使用上下文中的特性创建映射模型的映射源。
公共类 | ColumnAttribute | 将类与数据库表中的列相关联。
公共类 | DataAttribute | 提供成员以描述列中数据的特性。
公共类 | DatabaseAttribute | 指定表示数据库的类的特定特性。
公共类 | FunctionAttribute | 将方法与数据库中的存储过程或用户定义的函数相关联。
公共类 | InheritanceMappingAttribute | 映射 LINQ to SQL 应用程序中的继承层次结构。
公共类 | MappingSource | 表示映射信息的源。
公共类 | MetaAccessor | 表示成员的访问器。
公共类 | MetaAccessor TEntity, TMember | MetaAccessor 类的一个强类型版本。
公共类 | MetaAssociation | 表示两个实体类型之间的关联关系。
公共类 | MetaDataMember | 表示域对象的字段或属性与数据库表的列之间的映射。
公共类 | MetaFunction | 表示在上下文方法和数据库函数之间的映射。
公共类 | MetaModel | 一个表示数据库和域对象之间的映射的抽象。
公共类 | MetaParameter | 表示方法参数和数据库函数参数之间的映射。
公共类 | MetaTable | 表示数据库表或视图的抽象。
公共类 | MetaType | 表示域对象类型到数据库表列的映射。
公共类 | ParameterAttribute | 为存储过程方法参数启用映射详细信息规范。
公共类 | ProviderAttribute | 指定要使用的数据库提供程序。
公共类 | ResultTypeAttribute | 用于为具有不同结果类型的函数指定每种类型的结果。
公共类 | TableAttribute | 将某个类指定为与数据库表相关联的实体类。
公共类 | XmlMappingSource | 表示使用外部 XML 映射文件创建模型的映射源。
 | 枚举 | 说明
公共枚举 | AutoSync | 指示运行时如何在执行插入或更新操作后检索值。
公共枚举 | UpdateCheck | 指定何时测试对象是否有并发冲突。


AssociationAttribute 类

AssociationAttribute 类
成员

指定表示数据库关联（如外键关系）的属性。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<AttributeUsageAttribute(AttributeTargets.Property Or AttributeTargets.Field, AllowMultiple := False)> _
Public NotInheritable Class AssociationAttribute _
    Inherits DataAttribute
[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, AllowMultiple = false)]
public sealed class AssociationAttribute : DataAttribute
[AttributeUsageAttribute(AttributeTargets::Property|AttributeTargets::Field, AllowMultiple = false)]
public ref class AssociationAttribute sealed : public DataAttribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, AllowMultiple = false)>]
type AssociationAttribute =
    class
        inherit DataAttribute
    end

使用此特性可表示数据库中的关联（如外键和主键之间的关系）。

在下面的示例中，Order 类包括将 Orders 与 Customers 关联的 AssociationAttribute 特性。

Private _Customer As EntityRef(Of Customer)
<Association(Name:="FK_Orders_Customers", Storage:="_Customer", ThisKey:="CustomerID", IsForeignKey:=True)> _
Public Property Customer() As Customer
    Get
        Return Me._Customer.Entity
    End Get
    Set(ByVal value As Customer)
        Dim previousValue As Customer = Me._Customer.Entity
        If (((previousValue Is value) _
           = False) _
           OrElse (Me._Customer.HasLoadedOrAssignedValue = False)) Then
            Me.SendPropertyChanging()
            If ((previousValue Is Nothing) _
               = False) Then
                Me._Customer.Entity = Nothing
                previousValue.Orders.Remove(Me)
            End If
            Me._Customer.Entity = value
            If ((value Is Nothing) _
               = False) Then
                value.Orders.Add(Me)
                Me._CustomerID = value.CustomerID
            Else
                Me._CustomerID = CType(Nothing, String)
            End If
            Me.SendPropertyChanged("Customer")
        End If
    End Set
End Property

    private EntityRef<Customer> _Customer;
    // ...
    [Association(Name="FK_Orders_Customers", Storage="_Customer", ThisKey="CustomerID", IsForeignKey=true)]
    public Customer Customer
    {
        get
        {
            return this._Customer.Entity;
        }
        set
        {
            Customer previousValue = this._Customer.Entity;
            if (((previousValue != value)
                        || (this._Customer.HasLoadedOrAssignedValue == false)))
            {
                this.SendPropertyChanging();
                if ((previousValue != null))
                {
                    this._Customer.Entity = null;
                    previousValue.Orders.Remove(this);
                }
                this._Customer.Entity = value;
                if ((value != null))
                {
                    value.Orders.Add(this);
                    this._CustomerID = value.CustomerID;
                }
                else
                {
                    this._CustomerID = default(string);
                }
                this.SendPropertyChanged("Customer");
            }
        }
    }

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.AssociationAttributeAssociationAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AssociationAttribute 成员
System.Data.Linq.Mapping 命名空间


AssociationAttribute 成员

AssociationAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AssociationAttribute 类

指定表示数据库关联（如外键关系）的属性。

AssociationAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

AssociationAttribute 类
System.Data.Linq.Mapping 命名空间


AssociationAttribute 构造函数

AssociationAttribute 构造函数
AssociationAttribute 类

初始化 AssociationAttribute 类的一个新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public AssociationAttribute()
public:
AssociationAttribute()
new : unit -> AssociationAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AssociationAttribute 类
AssociationAttribute 成员
System.Data.Linq.Mapping 命名空间


AssociationAttribute 方法

AssociationAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AssociationAttribute 类

AssociationAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

AssociationAttribute 类
System.Data.Linq.Mapping 命名空间


AssociationAttribute 属性

AssociationAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AssociationAttribute 类

AssociationAttribute 类型公开以下成员。

名称 说明
页首

参考

AssociationAttribute 类
System.Data.Linq.Mapping 命名空间


AssociationAttribute ..::.DeleteOnNull 属性

AssociationAttribute
.
.
::
.
DeleteOnNull 属性
AssociationAttribute 类

当对其外键成员均不可以为 null 的一对一关联设置时，如果该关联设置为 null，则删除对象。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property DeleteOnNull As Boolean
    Get
    Set
public bool DeleteOnNull { get; set; }
public:
property bool DeleteOnNull {
    bool get ();
    void set (bool value);
}
member DeleteOnNull : bool with get, set

属性值

类型： System Boolean
设置为 True 可删除对象。默认值为 False。 设置为 True 可删除对象。默认值为 False。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AssociationAttribute 类
AssociationAttribute 成员
System.Data.Linq.Mapping 命名空间


AssociationAttribute ..::.DeleteRule 属性

AssociationAttribute
.
.
::
.
DeleteRule 属性
AssociationAttribute 类

获取或设置关联的删除行为。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property DeleteRule As String
    Get
    Set
public string DeleteRule { get; set; }
public:
property String^ DeleteRule {
    String^ get ();
    void set (String^ value);
}
member DeleteRule : string with get, set

属性值

类型： System String
一个表示规则的字符串。

如果设置为 null，则不会添加任何删除行为。例如，“CASCADE”会将“ON DELETE CASCADE”添加到外键关系。 如果设置为 null，则不会添加任何删除行为。例如，“CASCADE”会将“ON DELETE CASCADE”添加到外键关系。

在下面的示例中，规则是不执行任何操作。

    <Association(Name:="FK_Products_Categories", Storage:="_Products", OtherKey:="CategoryID", DeleteRule:="NO ACTION")>  _
    Public Property Products() As EntitySet(Of Product)
        Get
            Return Me._Products
        End Get
        Set
            Me._Products.Assign(value)
        End Set
    End Property

    [Association(Name="FK_Products_Categories", Storage="_Products", OtherKey="CategoryID", DeleteRule="NO ACTION")]
    public EntitySet<Product> Products
    {
        get
        {
            return this._Products;
        }
        set
        {
            this._Products.Assign(value);
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AssociationAttribute 类
AssociationAttribute 成员
System.Data.Linq.Mapping 命名空间


AssociationAttribute ..::.IsForeignKey 属性

AssociationAttribute
.
.
::
.
IsForeignKey 属性
AssociationAttribute 类

获取或设置在表示数据库关系的关联中作为外键的成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property IsForeignKey As Boolean
    Get
    Set
public bool IsForeignKey { get; set; }
public:
property bool IsForeignKey {
    bool get ();
    void set (bool value);
}
member IsForeignKey : bool with get, set

属性值

类型： System Boolean
默认值为 false。
<Association(Name:="FK_CustomerCustomerDemo", Storage:="_CustomerDemographic", ThisKey:="CustomerTypeID", IsForeignKey:=True)> _
Public Property CustomerDemographic() As CustomerDemographic
    Get
        Return Me._CustomerDemographic.Entity
    End Get
    Set(ByVal value As CustomerDemographic)
        Dim previousValue As CustomerDemographic = Me._CustomerDemographic.Entity
        If (((previousValue Is value) _
           = False) _
           OrElse (Me._CustomerDemographic.HasLoadedOrAssignedValue = False)) Then
            Me.SendPropertyChanging()
            If ((previousValue Is Nothing) _
               = False) Then
                Me._CustomerDemographic.Entity = Nothing
                previousValue.CustomerCustomerDemos.Remove(Me)
            End If
            Me._CustomerDemographic.Entity = value
            If ((value Is Nothing) _
               = False) Then
                value.CustomerCustomerDemos.Add(Me)
                Me._CustomerTypeID = value.CustomerTypeID
            Else
                Me._CustomerTypeID = CType(Nothing, String)
            End If
            Me.SendPropertyChanged("CustomerDemographic")
        End If
    End Set
End Property

    [Association(Name="FK_CustomerCustomerDemo", Storage="_CustomerDemographic", ThisKey="CustomerTypeID", IsForeignKey=true)]
    public CustomerDemographic CustomerDemographic
    {
        get
        {
            return this._CustomerDemographic.Entity;
        }
        set
        {
            CustomerDemographic previousValue = this._CustomerDemographic.Entity;
            if (((previousValue != value)
                        || (this._CustomerDemographic.HasLoadedOrAssignedValue == false)))
            {
                this.SendPropertyChanging();
                if ((previousValue != null))
                {
                    this._CustomerDemographic.Entity = null;
                    previousValue.CustomerCustomerDemos.Remove(this);
                }
                this._CustomerDemographic.Entity = value;
                if ((value != null))
                {
                    value.CustomerCustomerDemos.Add(this);
                    this._CustomerTypeID = value.CustomerTypeID;
                }
                else
                {
                    this._CustomerTypeID = default(string);
                }
                this.SendPropertyChanged("CustomerDemographic");
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AssociationAttribute 类
AssociationAttribute 成员
System.Data.Linq.Mapping 命名空间


AssociationAttribute ..::.IsUnique 属性

AssociationAttribute
.
.
::
.
IsUnique 属性
AssociationAttribute 类

获取或设置外键上唯一约束的指示。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property IsUnique As Boolean
    Get
    Set
public bool IsUnique { get; set; }
public:
property bool IsUnique {
    bool get ();
    void set (bool value);
}
member IsUnique : bool with get, set

属性值

类型： System Boolean
默认值为 false。

如果为 true，则此属性指示真正存在一对一关系。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AssociationAttribute 类
AssociationAttribute 成员
System.Data.Linq.Mapping 命名空间


AssociationAttribute ..::.OtherKey 属性

AssociationAttribute
.
.
::
.
OtherKey 属性
AssociationAttribute 类

获取或设置在关联的另一端上作为键值的、目标实体类的一个或多个成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property OtherKey As String
    Get
    Set
public string OtherKey { get; set; }
public:
property String^ OtherKey {
    String^ get ();
    void set (String^ value);
}
member OtherKey : string with get, set

属性值

类型： System String
默认值为相关类的 ID。

对于多个成员，使用以逗号分隔的列表。

该键不需要与主键或外键相匹配，但是假定用户指定的基数（对于 EntityRef<(Of <(TEntity>)>) 为 0-1，或对于 EntitySet<(Of <(TEntity>)>) 为 0-n）为 true。

    <Association(Name:="FK_Products_Categories", Storage:="_Products", OtherKey:="CategoryID", DeleteRule:="NO ACTION")>  _
    Public Property Products() As EntitySet(Of Product)
        Get
            Return Me._Products
        End Get
        Set
            Me._Products.Assign(value)
        End Set
    End Property

    [Association(Name="FK_Products_Categories", Storage="_Products", OtherKey="CategoryID", DeleteRule="NO ACTION")]
    public EntitySet<Product> Products
    {
        get
        {
            return this._Products;
        }
        set
        {
            this._Products.Assign(value);
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AssociationAttribute 类
AssociationAttribute 成员
System.Data.Linq.Mapping 命名空间


AssociationAttribute ..::.ThisKey 属性

AssociationAttribute
.
.
::
.
ThisKey 属性
AssociationAttribute 类

获取或设置表示关联的此端上的键值的此实体类成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property ThisKey As String
    Get
    Set
public string ThisKey { get; set; }
public:
property String^ ThisKey {
    String^ get ();
    void set (String^ value);
}
member ThisKey : string with get, set

属性值

类型： System String
默认值为包含类的 ID。

对于多个成员，使用以逗号分隔的列表。

该键不需要与主键或外键相匹配，但是假定用户指定的基数（对于 EntityRef<(Of <(TEntity>)>) 为 0-1，或对于 EntitySet<(Of <(TEntity>)>) 为 0-n）为 true。

<Association(Name:="FK_CustomerCustomerDemo", Storage:="_CustomerDemographic", ThisKey:="CustomerTypeID", IsForeignKey:=True)> _
Public Property CustomerDemographic() As CustomerDemographic
    Get
        Return Me._CustomerDemographic.Entity
    End Get
    Set(ByVal value As CustomerDemographic)
        Dim previousValue As CustomerDemographic = Me._CustomerDemographic.Entity
        If (((previousValue Is value) _
           = False) _
           OrElse (Me._CustomerDemographic.HasLoadedOrAssignedValue = False)) Then
            Me.SendPropertyChanging()
            If ((previousValue Is Nothing) _
               = False) Then
                Me._CustomerDemographic.Entity = Nothing
                previousValue.CustomerCustomerDemos.Remove(Me)
            End If
            Me._CustomerDemographic.Entity = value
            If ((value Is Nothing) _
               = False) Then
                value.CustomerCustomerDemos.Add(Me)
                Me._CustomerTypeID = value.CustomerTypeID
            Else
                Me._CustomerTypeID = CType(Nothing, String)
            End If
            Me.SendPropertyChanged("CustomerDemographic")
        End If
    End Set
End Property

    [Association(Name="FK_CustomerCustomerDemo", Storage="_CustomerDemographic", ThisKey="CustomerTypeID", IsForeignKey=true)]
    public CustomerDemographic CustomerDemographic
    {
        get
        {
            return this._CustomerDemographic.Entity;
        }
        set
        {
            CustomerDemographic previousValue = this._CustomerDemographic.Entity;
            if (((previousValue != value)
                        || (this._CustomerDemographic.HasLoadedOrAssignedValue == false)))
            {
                this.SendPropertyChanging();
                if ((previousValue != null))
                {
                    this._CustomerDemographic.Entity = null;
                    previousValue.CustomerCustomerDemos.Remove(this);
                }
                this._CustomerDemographic.Entity = value;
                if ((value != null))
                {
                    value.CustomerCustomerDemos.Add(this);
                    this._CustomerTypeID = value.CustomerTypeID;
                }
                else
                {
                    this._CustomerTypeID = default(string);
                }
                this.SendPropertyChanged("CustomerDemographic");
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AssociationAttribute 类
AssociationAttribute 成员
System.Data.Linq.Mapping 命名空间


AttributeMappingSource 类

AttributeMappingSource 类
成员

使用上下文中的特性创建映射模型的映射源。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class AttributeMappingSource _
    Inherits MappingSource
public sealed class AttributeMappingSource : MappingSource
public ref class AttributeMappingSource sealed : public MappingSource
[<SealedAttribute>]
type AttributeMappingSource =
    class
        inherit MappingSource
    end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.AttributeMappingSourceAttributeMappingSource
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AttributeMappingSource 成员
System.Data.Linq.Mapping 命名空间


AttributeMappingSource 成员

AttributeMappingSource 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AttributeMappingSource 类

使用上下文中的特性创建映射模型的映射源。

AttributeMappingSource 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

AttributeMappingSource 类
System.Data.Linq.Mapping 命名空间


AttributeMappingSource 构造函数

AttributeMappingSource 构造函数
AttributeMappingSource 类

初始化 AttributeMappingSource 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public AttributeMappingSource()
public:
AttributeMappingSource()
new : unit -> AttributeMappingSource

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

AttributeMappingSource 类
AttributeMappingSource 成员
System.Data.Linq.Mapping 命名空间


AttributeMappingSource 方法

AttributeMappingSource 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
AttributeMappingSource 类

AttributeMappingSource 类型公开以下成员。

名称 说明
页首

参考

AttributeMappingSource 类
System.Data.Linq.Mapping 命名空间


AutoSync 枚举

AutoSync 枚举

指示运行时如何在执行插入或更新操作后检索值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Enumeration AutoSync
public enum AutoSync
public enum class AutoSync
type AutoSync
成员名称 | 说明
Default | 自动选择值。
Always | 始终返回值。
Never | 从不返回值。
OnInsert | 仅在执行插入操作后返回值。
OnUpdate | 仅在执行更新操作后返回值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Linq.Mapping 命名空间


ColumnAttribute 类

ColumnAttribute 类
成员

将类与数据库表中的列相关联。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<AttributeUsageAttribute(AttributeTargets.Property Or AttributeTargets.Field, AllowMultiple := False)> _
Public NotInheritable Class ColumnAttribute _
    Inherits DataAttribute
[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, AllowMultiple = false)]
public sealed class ColumnAttribute : DataAttribute
[AttributeUsageAttribute(AttributeTargets::Property|AttributeTargets::Field, AllowMultiple = false)]
public ref class ColumnAttribute sealed : public DataAttribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, AllowMultiple = false)>]
type ColumnAttribute =
    class
        inherit DataAttribute
    end

使用此特性可指定实体类的某个成员表示数据库表中的列。可以将此特性应用于 public、private 或 internal 类型的任何字段或属性。 使用此特性可指定实体类的某个成员表示数据库表中的列。可以将此特性应用于 public、private 或 internal 类型的任何字段或属性。

当 LINQ to SQL 保存对数据库所做的更改时，只有那些标识为列的实体类成员是持久的。

使用逗号分隔特性的多个属性。

<Table(Name:="Employees")>  _
Public Class Employees
    Private _LastName As String
    ' …
    <Column(Storage:="_LastName", DbType:="NVarChar(20) NOT NULL", _
        CanBeNull:=false)> _
    Public Property LastName() As String
        Get
            Return Me._LastName
        End Get
        Set
            If ((Me._LastName = value) _
                = false) Then
                Me.OnPropertyChanging("LastName")
                Me._LastName = value
                Me.OnPropertyChanged("LastName")
            End If
        End Set
    End Property
End Class
[Table(Name="Employees")]
public class Employees
{
    private string _LastName;
    // …
    [Column(Storage="_LastName", DbType="NVarChar(20) NOT NULL",
        CanBeNull=false)]
    public string LastName
    {
        get
        {
            return this._LastName;
        }
        set
        {
            if ((this._LastName != value))
            {
                this.OnPropertyChanging("LastName");
                this._LastName = value;
                this.OnPropertyChanged("LastName");
            }
        }
    }
}

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.ColumnAttributeColumnAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute 成员

ColumnAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ColumnAttribute 类

将类与数据库表中的列相关联。

ColumnAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ColumnAttribute 类
System.Data.Linq.Mapping 命名空间


ColumnAttribute 构造函数

ColumnAttribute 构造函数
ColumnAttribute 类

初始化 ColumnAttribute 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public ColumnAttribute()
public:
ColumnAttribute()
new : unit -> ColumnAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute 方法

ColumnAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ColumnAttribute 类

ColumnAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ColumnAttribute 类
System.Data.Linq.Mapping 命名空间


ColumnAttribute 属性

ColumnAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ColumnAttribute 类

ColumnAttribute 类型公开以下成员。

名称 说明
页首

参考

ColumnAttribute 类
System.Data.Linq.Mapping 命名空间


ColumnAttribute ..::.AutoSync 属性

ColumnAttribute
.
.
::
.
AutoSync 属性
ColumnAttribute 类

获取或设置 AutoSync 枚举。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property AutoSync As AutoSync
    Get
    Set
public AutoSync AutoSync { get; set; }
public:
property AutoSync AutoSync {
    AutoSync get ();
    void set (AutoSync value);
}
member AutoSync : AutoSync with get, set

属性值

类型： System.Data.Linq.Mapping AutoSync
AutoSync 值。
   <Column(Storage:="_EmployeeID", DbType:="Int", AutoSync:=AutoSync.OnInsert)> _
Public Property EmployeeID() As System.Nullable(Of Integer)
       Get
           Return Me._EmployeeID
       End Get
       Set(ByVal value As System.Nullable(Of Integer))
           If (Me._EmployeeID.Equals(value) = False) Then
               If Me._Employee.HasLoadedOrAssignedValue Then
                   Throw New System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException
               End If
               Me.OnEmployeeIDChanging(value)
               Me.SendPropertyChanging()
               Me._EmployeeID = value
               Me.SendPropertyChanged("EmployeeID")
               Me.OnEmployeeIDChanged()
           End If
       End Set
   End Property

    [Column(Storage="_EmployeeID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
    public int EmployeeID
    {
        get
        {
            return this._EmployeeID;
        }
        set
        {
            if ((this._EmployeeID != value))
            {
                this.OnEmployeeIDChanging(value);
                this.SendPropertyChanging();
                this._EmployeeID = value;
                this.SendPropertyChanged("EmployeeID");
                this.OnEmployeeIDChanged();
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute ..::.CanBeNull 属性

ColumnAttribute
.
.
::
.
CanBeNull 属性
ColumnAttribute 类

获取或设置一个值，该值指示列是否可包含 null 值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property CanBeNull As Boolean
    Get
    Set
public bool CanBeNull { get; set; }
public:
property bool CanBeNull {
    bool get ();
    void set (bool value);
}
member CanBeNull : bool with get, set

属性值

类型： System Boolean
默认值 = true。

如果将此值设置为 false，则假定相应列中的数据为非空。

说明 说明

为方便起见，此属性从 DbType 属性复制。CreateDatabase 方法仅使用 DbType 属性。因此，您还必须在 DbType 属性中指定列是否可包含 null 值。 为方便起见，此属性从 DbType 属性复制。CreateDatabase 方法仅使用 DbType 属性。因此，您还必须在 DbType 属性中指定列是否可包含 null 值。 为方便起见，此属性从 DbType 属性复制。CreateDatabase 方法仅使用 DbType 属性。因此，您还必须在 DbType 属性中指定列是否可包含 null 值。

    <Column(Storage:="_LastName", DbType:="NVarChar(20) NOT NULL", CanBeNull:=false)>  _
    Public Property LastName() As String
        Get
            Return Me._LastName
        End Get
        Set
            If ((Me._LastName = value)  _
                        = false) Then
                Me.OnLastNameChanging(value)
                Me.SendPropertyChanging
                Me._LastName = value
                Me.SendPropertyChanged("LastName")
                Me.OnLastNameChanged
            End If
        End Set
    End Property

    [Column(Storage="_LastName", DbType="NVarChar(20) NOT NULL", CanBeNull=false)]
    public string LastName
    {
        get
        {
            return this._LastName;
        }
        set
        {
            if ((this._LastName != value))
            {
                this.OnLastNameChanging(value);
                this.SendPropertyChanging();
                this._LastName = value;
                this.SendPropertyChanged("LastName");
                this.OnLastNameChanged();
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute ..::.DbType 属性

ColumnAttribute
.
.
::
.
DbType 属性
ColumnAttribute 类

获取或设置数据库列的类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property DbType As String
    Get
    Set
public string DbType { get; set; }
public:
property String^ DbType {
    String^ get ();
    void set (String^ value);
}
member DbType : string with get, set

属性值

类型： System String
请参见“备注”。

使用此属性可指定在 T-SQL 表声明中定义列的确切文本。仅当您计划使用 CreateDatabase 来创建数据库实例时，才指定 DbType 属性。 使用此属性可指定在 T-SQL 表声明中定义列的确切文本。仅当您计划使用 CreateDatabase 来创建数据库实例时，才指定 DbType 属性。

从成员类型中推理出 DbType 的默认值。有关更多信息，请参见SQL-CLR 类型映射 (LINQ to SQL)。 从成员类型中推理出 DbType 的默认值。有关更多信息，请参见SQL-CLR 类型映射 (LINQ to SQL)。

    <Column(Storage:="_FirstName", DbType:="NVarChar(10) NOT NULL", CanBeNull:=false)>  _
    Public Property FirstName() As String
        Get
            Return Me._FirstName
        End Get
        Set
            If ((Me._FirstName = value)  _
                        = false) Then
                Me.OnFirstNameChanging(value)
                Me.SendPropertyChanging
                Me._FirstName = value
                Me.SendPropertyChanged("FirstName")
                Me.OnFirstNameChanged
            End If
        End Set
    End Property

    [Column(Storage="_FirstName", DbType="NVarChar(10) NOT NULL", CanBeNull=false)]
    public string FirstName
    {
        get
        {
            return this._FirstName;
        }
        set
        {
            if ((this._FirstName != value))
            {
                this.OnFirstNameChanging(value);
                this.SendPropertyChanging();
                this._FirstName = value;
                this.SendPropertyChanged("FirstName");
                this.OnFirstNameChanged();
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute ..::.Expression 属性

ColumnAttribute
.
.
::
.
Expression 属性
ColumnAttribute 类

获取或设置一个值，该值指示列是否为数据库中的计算列。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Expression As String
    Get
    Set
public string Expression { get; set; }
public:
property String^ Expression {
    String^ get ();
    void set (String^ value);
}
member Expression : string with get, set

属性值

类型： System String
默认值为空。

如果使用 CreateDatabase 将列定义为包含计算值，则使用该属性。

例如，如果要创建在 SQL 中定义为 InventoryVal AS UnitPrice * UnitsInStock 的列，则使用以下表达式 字符串："UnitPrice * UnitsInStock"。

说明 说明

LINQ to SQL 不支持作为主键的计算所得列。

   <Column(Storage:="_UnitPrice", DbType:="Money NOT NULL", Expression:="UnitPrice + 1.00")> _
Public Property UnitPrice() As Decimal
       Get
           Return Me._UnitPrice
       End Get
       Set(ByVal value As Decimal)
           If ((Me._UnitPrice = Value) _
              = False) Then
               Me.OnUnitPriceChanging(Value)
               Me.SendPropertyChanging()
               Me._UnitPrice = Value
               Me.SendPropertyChanged("UnitPrice")
               Me.OnUnitPriceChanged()
           End If
       End Set
   End Property

    [Column(Storage="_UnitPrice", DbType="Money",Expression="UnitPrice + 1.00")]
    public System.Nullable<decimal> UnitPrice
    {
        get
        {
            return this._UnitPrice;
        }
        set
        {
            if ((this._UnitPrice != value))
            {
                this.OnUnitPriceChanging(value);
                this.SendPropertyChanging();
                this._UnitPrice = value;
                this.SendPropertyChanged("UnitPrice");
                this.OnUnitPriceChanged();
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute ..::.IsDbGenerated 属性

ColumnAttribute
.
.
::
.
IsDbGenerated 属性
ColumnAttribute 类

获取或设置一个值，该值指示列是否包含数据库自动生成的值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property IsDbGenerated As Boolean
    Get
    Set
public bool IsDbGenerated { get; set; }
public:
property bool IsDbGenerated {
    bool get ();
    void set (bool value);
}
member IsDbGenerated : bool with get, set

属性值

类型： System Boolean
默认值 = false。

IsDbGenerated 成员在插入数据行后会立即同步，而且这些成员在完成 SubmitChanges 后即可用。

说明 说明

如果列具有主键值且您将 IsDbGenerated 指定为 true，则还应使用 IDENTITY 修饰符来添加 DbType 属性。

    <Column(Storage:="_OrderID", AutoSync:=AutoSync.OnInsert, DbType:="Int NOT NULL IDENTITY", IsPrimaryKey:=true, IsDbGenerated:=true)>  _
    Public Property OrderID() As Integer
        Get
            Return Me._OrderID
        End Get
        Set
            If ((Me._OrderID = value)  _
                        = false) Then
                Me.OnOrderIDChanging(value)
                Me.SendPropertyChanging
                Me._OrderID = value
                Me.SendPropertyChanged("OrderID")
                Me.OnOrderIDChanged
            End If
        End Set
    End Property

    [Column(Storage="_OrderID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
    public int OrderID
    {
        get
        {
            return this._OrderID;
        }
        set
        {
            if ((this._OrderID != value))
            {
                this.OnOrderIDChanging(value);
                this.SendPropertyChanging();
                this._OrderID = value;
                this.SendPropertyChanged("OrderID");
                this.OnOrderIDChanged();
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute ..::.IsDiscriminator 属性

ColumnAttribute
.
.
::
.
IsDiscriminator 属性
ColumnAttribute 类

获取或设置一个值，该值指示列是否包含 LINQ to SQL 继承层次结构的鉴别器值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property IsDiscriminator As Boolean
    Get
    Set
public bool IsDiscriminator { get; set; }
public:
property bool IsDiscriminator {
    bool get ();
    void set (bool value);
}
member IsDiscriminator : bool with get, set

属性值

类型： System Boolean
默认值 = false。

如果为 true，则此属性将类成员标识为具有继承层次结构的鉴别器值。

您只能针对一个成员将此属性设置为 true，该成员必须属于层次结构中的最顶层映射类。

   <Column(Storage:="_Title", DbType:="NVarChar(30)", IsDiscriminator:=True)> _
Public Property Title() As String
       Get
           Return Me._Title
       End Get
       Set(ByVal value As String)
           If ((Me._Title = Value) _
              = False) Then
               Me.OnTitleChanging(Value)
               Me.SendPropertyChanging()
               Me._Title = Value
               Me.SendPropertyChanged("Title")
               Me.OnTitleChanged()
           End If
       End Set
   End Property

    [Column(Storage="_Title", DbType="NVarChar(30)",IsDiscriminator=true)]
    public string Title
    {
        get
        {
            return this._Title;
        }
        set
        {
            if ((this._Title != value))
            {
                this.OnTitleChanging(value);
                this.SendPropertyChanging();
                this._Title = value;
                this.SendPropertyChanged("Title");
                this.OnTitleChanged();
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute ..::.IsPrimaryKey 属性

ColumnAttribute
.
.
::
.
IsPrimaryKey 属性
ColumnAttribute 类

获取或设置一个值，该值指示该类成员是否表示作为表的整个主键或部分主键的列。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property IsPrimaryKey As Boolean
    Get
    Set
public bool IsPrimaryKey { get; set; }
public:
property bool IsPrimaryKey {
    bool get ();
    void set (bool value);
}
member IsPrimaryKey : bool with get, set

属性值

类型： System Boolean
默认值 = false。

若要假定一个实体类，您必须至少提供一个具有此特性的成员，且该成员必须被映射到相应的表或视图中的主键或唯一键。如果未能执行此操作，则会提示 LINQ to SQL 将类的实例视为只读，以提交对数据库所做的更改。 若要假定一个实体类，您必须至少提供一个具有此特性的成员，且该成员必须被映射到相应的表或视图中的主键或唯一键。如果未能执行此操作，则会提示 LINQ to SQL 将类的实例视为只读，以提交对数据库所做的更改。

如果您使用此属性指定类的多个成员，则该键就被认为是关联列的综合。

说明 说明

LINQ to SQL 不支持作为主键的计算所得列。

    <Column(Storage:="_ProductID", DbType:="Int NOT NULL", IsPrimaryKey:=true, IsDbGenerated:=true)>  _
    Public Property ProductID() As Integer
        Get
            Return Me._ProductID
        End Get
        Set
            If ((Me._ProductID = value)  _
                        = false) Then
                If Me._Product.HasLoadedOrAssignedValue Then
                    Throw New System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException
                End If
                Me.OnProductIDChanging(value)
                Me.SendPropertyChanging
                Me._ProductID = value
                Me.SendPropertyChanged("ProductID")
                Me.OnProductIDChanged
            End If
        End Set
    End Property

    [Column(Storage="_ProductID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
    public int ProductID
    {
        get
        {
            return this._ProductID;
        }
        set
        {
            if ((this._ProductID != value))
            {
                this.OnProductIDChanging(value);
                this.SendPropertyChanging();
                this._ProductID = value;
                this.SendPropertyChanged("ProductID");
                this.OnProductIDChanged();
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute ..::.IsVersion 属性

ColumnAttribute
.
.
::
.
IsVersion 属性
ColumnAttribute 类

获取或设置一个值，该值指示成员的列类型是否为数据库时间戳或版本号。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property IsVersion As Boolean
    Get
    Set
public bool IsVersion { get; set; }
public:
property bool IsVersion {
    bool get ();
    void set (bool value);
}
member IsVersion : bool with get, set

属性值

类型： System Boolean
默认值为 false。

每次更新关联行时，版本号将会递增，并更新时间戳列。（该属性告知 LINQ to SQL 应该更新列以显示其为新版本；并不意味着记录诸如谁进行了更新的信息。） 每次更新关联行时，版本号将会递增，并更新时间戳列。（该属性告知 LINQ to SQL 应该更新列以显示其为新版本；并不意味着记录诸如谁进行了更新的信息。）

IsVersion 为 true 时，请注意以下事项：

  • 使用 DbType 可指定用来指定版本号或时间戳列的正确修饰符。如果未指定 DbType，则 LINQ to SQL 会推断正确的修饰符。 使用 DbType 可指定用来指定版本号或时间戳列的正确修饰符。如果未指定 DbType，则 LINQ to SQL 会推断正确的修饰符。

每次更新关联行时，版本号将会递增，并更新时间戳列。具有 IsVersion=true 的成员在更新数据行后会立即同步。完成 SubmitChanges 后，即会显示新值。 每次更新关联行时，版本号将会递增，并更新时间戳列。具有 IsVersion=true 的成员在更新数据行后会立即同步。完成 SubmitChanges 后，即会显示新值。 每次更新关联行时，版本号将会递增，并更新时间戳列。具有 IsVersion=true 的成员在更新数据行后会立即同步。完成 SubmitChanges 后，即会显示新值。

   <Column(Storage:="_VersionNum", DbType:="Int NOT NULL IDENTITY", IsVersion:=True)> _
Public Property VersionNum() As Integer
       Get
           Return Me._VersionNum
       End Get
       Set(ByVal value As Integer)
           If ((Me._VersionNum = value) _
              = False) Then
               Me._EmployeeID = value
           End If
       End Set
   End Property

[Column(Storage = "_VersionNum", DbType = "Int NOT NULL IDENTITY", IsVersion=true)]
public int VersionNum
{
    get
    {
        return this._VersionNum;
    }

    set
    {
        if ((this._VersionNum != value))
        {
            this._VersionNum = value;
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


ColumnAttribute ..::.UpdateCheck 属性

ColumnAttribute
.
.
::
.
UpdateCheck 属性
ColumnAttribute 类

获取或设置一个值，该值指示 LINQ to SQL 如何进行开放式并发冲突的检测。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property UpdateCheck As UpdateCheck
    Get
    Set
public UpdateCheck UpdateCheck { get; set; }
public:
property UpdateCheck UpdateCheck {
    UpdateCheck get ();
    void set (UpdateCheck value);
}
member UpdateCheck : UpdateCheck with get, set

属性值

类型： System.Data.Linq.Mapping UpdateCheck
除非 IsVersion 对某个成员为 true，否则默认值为 Always。
其他值为 Never 和 WhenChanged。

如果将此属性用于三个枚举之一，则它会确定 LINQ to SQL 如何检测并发冲突。

如果未将任何成员设计为 IsVersion=true，则原始成员值会与当前数据库状态进行比较。

下列枚举可用：

  • Always 始终使用此列进行冲突检测。

  • Never 从不使用此列进行冲突检测。

  • WhenChanged 只有在成员已被应用程序更改时才使用此列。

    <Column(Storage:="_CustomerDesc", DbType:="NText", UpdateCheck:=UpdateCheck.Never)>  _
    Public Property CustomerDesc() As String
        Get
            Return Me._CustomerDesc
        End Get
        Set
            If ((Me._CustomerDesc = value)  _
                        = false) Then
                Me.OnCustomerDescChanging(value)
                Me.SendPropertyChanging
                Me._CustomerDesc = value
                Me.SendPropertyChanged("CustomerDesc")
                Me.OnCustomerDescChanged
            End If
        End Set
    End Property

    [Column(Storage="_CustomerDesc", DbType="NText", UpdateCheck=UpdateCheck.Never)]
    public string CustomerDesc
    {
        get
        {
            return this._CustomerDesc;
        }
        set
        {
            if ((this._CustomerDesc != value))
            {
                this.OnCustomerDescChanging(value);
                this.SendPropertyChanging();
                this._CustomerDesc = value;
                this.SendPropertyChanged("CustomerDesc");
                this.OnCustomerDescChanged();
            }
        }
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ColumnAttribute 类
ColumnAttribute 成员
System.Data.Linq.Mapping 命名空间


DataAttribute 类

DataAttribute 类
成员

提供成员以描述列中数据的特性。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class DataAttribute _
    Inherits Attribute
public abstract class DataAttribute : Attribute
public ref class DataAttribute abstract : public Attribute
[<AbstractClassAttribute>]
type DataAttribute =
    class
        inherit Attribute
    end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.DataAttributeDataAttribute

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataAttribute 成员
System.Data.Linq.Mapping 命名空间


DataAttribute 成员

DataAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAttribute 类

提供成员以描述列中数据的特性。

DataAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DataAttribute 类
System.Data.Linq.Mapping 命名空间


DataAttribute 构造函数

DataAttribute 构造函数
DataAttribute 类

初始化 DataAttribute 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected DataAttribute()
protected:
DataAttribute()
new : unit -> DataAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataAttribute 类
DataAttribute 成员
System.Data.Linq.Mapping 命名空间


DataAttribute 方法

DataAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAttribute 类

DataAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DataAttribute 类
System.Data.Linq.Mapping 命名空间


DataAttribute 属性

DataAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DataAttribute 类

DataAttribute 类型公开以下成员。

名称 说明
页首

参考

DataAttribute 类
System.Data.Linq.Mapping 命名空间


DataAttribute ..::.Name 属性

DataAttribute
.
.
::
.
Name 属性
DataAttribute 类

获取或设置列名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Name As String
    Get
    Set
public string Name { get; set; }
public:
property String^ Name {
    String^ get ();
    void set (String^ value);
}
member Name : string with get, set

属性值

类型： System String
名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataAttribute 类
DataAttribute 成员
System.Data.Linq.Mapping 命名空间


DataAttribute ..::.Storage 属性

DataAttribute
.
.
::
.
Storage 属性
DataAttribute 类

获取或设置私有存储字段以保存列中的值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Storage As String
    Get
    Set
public string Storage { get; set; }
public:
property String^ Storage {
    String^ get ();
    void set (String^ value);
}
member Storage : string with get, set

属性值

类型： System String
存储字段的名称。

存储属性值区分大小写。例如，请确保 Storage 属性的特性中使用的值的大小写与代码中其他位置使用的相应属性名称的大小写相同。这适用于所有 .NET 编程语言，包括 Visual Basic 等一般不区分大小写的语言。 存储属性值区分大小写。例如，请确保 Storage 属性的特性中使用的值的大小写与代码中其他位置使用的相应属性名称的大小写相同。这适用于所有 .NET 编程语言，包括 Visual Basic 等一般不区分大小写的语言。 存储属性值区分大小写。例如，请确保 Storage 属性的特性中使用的值的大小写与代码中其他位置使用的相应属性名称的大小写相同。这适用于所有 .NET 编程语言，包括 Visual Basic 等一般不区分大小写的语言。

<Column(Storage:=_CustomerID)> _
Public CustomerID As String

[Column(Storage="_CustomerID")]
public string CustomerID
{
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DataAttribute 类
DataAttribute 成员
System.Data.Linq.Mapping 命名空间


DatabaseAttribute 类

DatabaseAttribute 类
成员

指定表示数据库的类的特定特性。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple := False)> _
Public NotInheritable Class DatabaseAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false)]
public sealed class DatabaseAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Class, AllowMultiple = false)]
public ref class DatabaseAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false)>]
type DatabaseAttribute =
    class
        inherit Attribute
    end

可以将 DatabaseAttribute 特性应用于任何强类型 DataContext 声明。

DatabaseAttribute 特性是可选的。如果使用该特性，则必须使用 Name 属性来提供一个名称。 DatabaseAttribute 特性是可选的。如果使用该特性，则必须使用 Name 属性来提供一个名称。

如果不应用该特性，且连接未指定名称，则假定数据库拥有与 DataContext 类相同的名称。

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.DatabaseAttributeDatabaseAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DatabaseAttribute 成员
System.Data.Linq.Mapping 命名空间


DatabaseAttribute 成员

DatabaseAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DatabaseAttribute 类

指定表示数据库的类的特定特性。

DatabaseAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DatabaseAttribute 类
System.Data.Linq.Mapping 命名空间


DatabaseAttribute 构造函数

DatabaseAttribute 构造函数
DatabaseAttribute 类

初始化 DatabaseAttribute 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public DatabaseAttribute()
public:
DatabaseAttribute()
new : unit -> DatabaseAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DatabaseAttribute 类
DatabaseAttribute 成员
System.Data.Linq.Mapping 命名空间


DatabaseAttribute 方法

DatabaseAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DatabaseAttribute 类

DatabaseAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DatabaseAttribute 类
System.Data.Linq.Mapping 命名空间


DatabaseAttribute 属性

DatabaseAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DatabaseAttribute 类

DatabaseAttribute 类型公开以下成员。

名称 说明
页首

参考

DatabaseAttribute 类
System.Data.Linq.Mapping 命名空间


DatabaseAttribute ..::.Name 属性

DatabaseAttribute
.
.
::
.
Name 属性
DatabaseAttribute 类

获取或设置数据库的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Name As String
    Get
    Set
public string Name { get; set; }
public:
property String^ Name {
    String^ get ();
    void set (String^ value);
}
member Name : string with get, set

属性值

类型： System String
名称。

如果使用 DatabaseAttribute 特性，则需要此属性。

只有当连接本身未指定数据库名称时，才使用这些信息。

<Database(Name:="Database#5")> _
Public Class Database5
    Inherits DataContext
    …
End Class

[Database(Name="Database#5")]
public class Database5 : DataContext
{
    …
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

DatabaseAttribute 类
DatabaseAttribute 成员
System.Data.Linq.Mapping 命名空间


FunctionAttribute 类

FunctionAttribute 类
成员

将方法与数据库中的存储过程或用户定义的函数相关联。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := False)> _
Public NotInheritable Class FunctionAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)]
public sealed class FunctionAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = false)]
public ref class FunctionAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)>]
type FunctionAttribute =
    class
        inherit Attribute
    end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.FunctionAttributeFunctionAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

FunctionAttribute 成员
System.Data.Linq.Mapping 命名空间


FunctionAttribute 成员

FunctionAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FunctionAttribute 类

将方法与数据库中的存储过程或用户定义的函数相关联。

FunctionAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

FunctionAttribute 类
System.Data.Linq.Mapping 命名空间


FunctionAttribute 构造函数

FunctionAttribute 构造函数
FunctionAttribute 类

初始化 FunctionAttribute 类的一个新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public FunctionAttribute()
public:
FunctionAttribute()
new : unit -> FunctionAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

FunctionAttribute 类
FunctionAttribute 成员
System.Data.Linq.Mapping 命名空间


FunctionAttribute 方法

FunctionAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FunctionAttribute 类

FunctionAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

FunctionAttribute 类
System.Data.Linq.Mapping 命名空间


FunctionAttribute 属性

FunctionAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
FunctionAttribute 类

FunctionAttribute 类型公开以下成员。

名称 说明
页首

参考

FunctionAttribute 类
System.Data.Linq.Mapping 命名空间


FunctionAttribute ..::.IsComposable 属性

FunctionAttribute
.
.
::
.
IsComposable 属性
FunctionAttribute 类

获取或设置一个值，该值指示将方法映射到函数还是映射到存储过程。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property IsComposable As Boolean
    Get
    Set
public bool IsComposable { get; set; }
public:
property bool IsComposable {
    bool get ();
    void set (bool value);
}
member IsComposable : bool with get, set

属性值

类型： System Boolean
如果映射到函数，则为 true；如果映射到存储过程，则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

FunctionAttribute 类
FunctionAttribute 成员
System.Data.Linq.Mapping 命名空间


FunctionAttribute ..::.Name 属性

FunctionAttribute
.
.
::
.
Name 属性
FunctionAttribute 类

获取或设置函数的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Name As String
    Get
    Set
public string Name { get; set; }
public:
property String^ Name {
    String^ get ();
    void set (String^ value);
}
member Name : string with get, set

属性值

类型： System String
函数或存储过程的名称。

该名称必须以架构名称作为前缀。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

FunctionAttribute 类
FunctionAttribute 成员
System.Data.Linq.Mapping 命名空间


InheritanceMappingAttribute 类

InheritanceMappingAttribute 类
成员

映射 LINQ to SQL 应用程序中的继承层次结构。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple := True, Inherited := False)> _
Public NotInheritable Class InheritanceMappingAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public sealed class InheritanceMappingAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Class, AllowMultiple = true, Inherited = false)]
public ref class InheritanceMappingAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = true, Inherited = false)>]
type InheritanceMappingAttribute =
    class
        inherit Attribute
    end

为每个映射的类指定一个 InheritanceMappingAttribute。

映射继承层次结构时，请注意以下事项：

  • 层次结构中的所有类必须映射到一个表中。

  • 继承层次结构的表必须对位于层次结构顶部的映射类型声明。不能在派生自顶部类的类中指定表或映射特性。 继承层次结构的表必须对位于层次结构顶部的映射类型声明。不能在派生自顶部类的类中指定表或映射特性。

  • 您可以在层次结构中使用接口，但 LINQ 不映射该接口。

  • 映射类时可以跳过层次结构中的类，但只能查询映射的类。

为了实现正确的具体化，鉴别器代码值必须是唯一的且与数据库中的值匹配。具有不完全匹配（即使通过大小写）的鉴别器代码值的行通过使用设置为 true 的 IsDefault 实例化类。 为了实现正确的具体化，鉴别器代码值必须是唯一的且与数据库中的值匹配。具有不完全匹配（即使通过大小写）的鉴别器代码值的行通过使用设置为 true 的 IsDefault 实例化类。

此示例演示层次结构的继承映射，在层次结构中，顶部映射的类 (Shape) 是抽象的。

Public Enum ShapeType As Integer
    Square = 0
    Circle = 1
End Enum

<Table(Name:="Shape")> _
<InheritanceMapping(Code:=ShapeType.Square, Type:=GetType(Square), _
    IsDefault:=True)> _
<InheritanceMapping(Code:=ShapeType.Circle, Type:=GetType(Circle))> _
Public MustInherit Class Shape
    <Column(IsDiscriminator:=True)> _
        Public ShapeType As ShapeType = 0
End Class

Public Class Square
    Inherits Shape
    <Column()> _
    Public Side As Integer = 0
End Class

Public Class Circle
    Inherits Shape
    <Column()> _
    Public Radius As Integer = 0
End Class

public enum ShapeType
{
    Square = 0, Circle = 1
}
[Table(Name = "Shape")]
[InheritanceMapping(Code = ShapeType.Square, Type = typeof(Square),
    IsDefault = true)]
[InheritanceMapping(Code = ShapeType.Circle, Type = typeof(Circle))]

abstract public class Shape
{
    [Column(IsDiscriminator = true)]
    public ShapeType ShapeType = 0;
}

public class Square : Shape
{
    [Column]
    public int Side = 0;
}
public class Circle : Shape
{
    [Column]
    public int Radius = 0;
}

下面的示例演示如何包含未映射的类。可以将未映射的类放置于层次结构中的任何位置。 下面的示例演示如何包含未映射的类。可以将未映射的类放置于层次结构中的任何位置。

' Unmapped and not queryable.
Class A
End Class

' Mapped and queryable.
<Table()> _
<InheritanceMapping(Code:="B", Type:=GetType(B), _
IsDefault:=True)> _
<InheritanceMapping(Code:="D", Type:=GetType(D))> _
Class B
    Inherits A
End Class

' Unmapped and not queryable.
Class C
    Inherits B
End Class

' Mapped and queryable.
Class D
    Inherits C
End Class

' Unmapped and not queryable.
Class E
    Inherits D
End Class

// Unmapped and not queryable.
class A {  }

// Mapped and queryable.
[Table]
[InheritanceMapping(Code = "B", Type = typeof(B),
IsDefault = true)]
[InheritanceMapping(Code = "D", Type = typeof(D))]
class B: A {  }

// Unmapped and not queryable.
class C: B {  }

// Mapped and queryable.
class D: C {  }

// Unmapped and not queryable.
class E: D {  }

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.InheritanceMappingAttributeInheritanceMappingAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

InheritanceMappingAttribute 成员
System.Data.Linq.Mapping 命名空间


InheritanceMappingAttribute 成员

InheritanceMappingAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InheritanceMappingAttribute 类

映射 LINQ to SQL 应用程序中的继承层次结构。

InheritanceMappingAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

InheritanceMappingAttribute 类
System.Data.Linq.Mapping 命名空间


InheritanceMappingAttribute 构造函数

InheritanceMappingAttribute 构造函数
InheritanceMappingAttribute 类

初始化 InheritanceMappingAttribute 类的一个新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public InheritanceMappingAttribute()
public:
InheritanceMappingAttribute()
new : unit -> InheritanceMappingAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

InheritanceMappingAttribute 类
InheritanceMappingAttribute 成员
System.Data.Linq.Mapping 命名空间


InheritanceMappingAttribute 方法

InheritanceMappingAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InheritanceMappingAttribute 类

InheritanceMappingAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

InheritanceMappingAttribute 类
System.Data.Linq.Mapping 命名空间


InheritanceMappingAttribute 属性

InheritanceMappingAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
InheritanceMappingAttribute 类

InheritanceMappingAttribute 类型公开以下成员。

名称 说明
页首

参考

InheritanceMappingAttribute 类
System.Data.Linq.Mapping 命名空间


InheritanceMappingAttribute ..::.Code 属性

InheritanceMappingAttribute
.
.
::
.
Code 属性
InheritanceMappingAttribute 类

获取或设置映射的继承层次结构中的鉴别器代码值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Code As Object
    Get
    Set
public Object Code { get; set; }
public:
property Object^ Code {
    Object^ get ();
    void set (Object^ value);
}
member Code : Object with get, set

属性值

类型： System Object
必须由用户指定。没有默认值。 必须由用户指定。没有默认值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

InheritanceMappingAttribute 类
InheritanceMappingAttribute 成员
System.Data.Linq.Mapping 命名空间


InheritanceMappingAttribute ..::.IsDefault 属性

InheritanceMappingAttribute
.
.
::
.
IsDefault 属性
InheritanceMappingAttribute 类

获取或设置一个值，该值指示当鉴别器值与指定值不匹配时是否实例化此类型的对象。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property IsDefault As Boolean
    Get
    Set
public bool IsDefault { get; set; }
public:
property bool IsDefault {
    bool get ();
    void set (bool value);
}
member IsDefault : bool with get, set

属性值

类型： System Boolean
默认值 = false。

必须使用 IsDefault 将某一 InheritanceMappingAttribute 特性声明为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

InheritanceMappingAttribute 类
InheritanceMappingAttribute 成员
System.Data.Linq.Mapping 命名空间


InheritanceMappingAttribute ..::.Type 属性

InheritanceMappingAttribute
.
.
::
.
Type 属性
InheritanceMappingAttribute 类

获取或设置层次结构中类的类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Type As Type
    Get
    Set
public Type Type { get; set; }
public:
property Type^ Type {
    Type^ get ();
    void set (Type^ value);
}
member Type : Type with get, set

属性值

类型： System Type
必须由用户指定。没有默认值。 必须由用户指定。没有默认值。

使用继承层次结构中的任何非抽象类型（包括根类型）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

InheritanceMappingAttribute 类
InheritanceMappingAttribute 成员
System.Data.Linq.Mapping 命名空间


MappingSource 类

MappingSource 类
成员

表示映射信息的源。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MappingSource
public abstract class MappingSource
public ref class MappingSource abstract
[<AbstractClassAttribute>]
type MappingSource =  class end

MappingSource 类用于将 CLR 对象映射到基础数据源中的实体。

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.MappingSourceMappingSource

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MappingSource 成员
System.Data.Linq.Mapping 命名空间
MetaModel


MappingSource 成员

MappingSource 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MappingSource 类

表示映射信息的源。

MappingSource 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

MappingSource 类
System.Data.Linq.Mapping 命名空间


MappingSource 构造函数

MappingSource 构造函数
MappingSource 类

初始化 MappingSource 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MappingSource()
protected:
MappingSource()
new : unit -> MappingSource

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MappingSource 类
MappingSource 成员
System.Data.Linq.Mapping 命名空间


MappingSource 方法

MappingSource 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MappingSource 类

MappingSource 类型公开以下成员。

名称 说明
页首

参考

MappingSource 类
System.Data.Linq.Mapping 命名空间


MappingSource ..::.CreateModel 方法

MappingSource
.
.
::
.
CreateModel 方法
MappingSource 类

创建新的映射模型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected MustOverride Function CreateModel ( _
    dataContextType As Type _
) As MetaModel
protected abstract MetaModel CreateModel(
    Type dataContextType
)
protected:
virtual MetaModel^ CreateModel(
    Type^ dataContextType
) abstract
abstract CreateModel :
        dataContextType:Type -> MetaModel

参数

dataContextType
类型： System Type
映射要基于的 DataContext 的类型。

返回值

类型： System.Data.Linq.Mapping MetaModel
为匹配当前的映射架构而创建的元模型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MappingSource 类
MappingSource 成员
System.Data.Linq.Mapping 命名空间


MappingSource ..::.GetModel 方法

MappingSource
.
.
::
.
GetModel 方法
MappingSource 类

返回映射模型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Function GetModel ( _
    dataContextType As Type _
) As MetaModel
public MetaModel GetModel(
    Type dataContextType
)
public:
MetaModel^ GetModel(
    Type^ dataContextType
)
member GetModel :
        dataContextType:Type -> MetaModel

参数

dataContextType
类型： System Type
要返回的模型的 DataContext 的类型。

返回值

类型： System.Data.Linq.Mapping MetaModel
与此映射源关联的映射模型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MappingSource 类
MappingSource 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor 类

MetaAccessor 类
成员

表示成员的访问器。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MetaAccessor
public abstract class MetaAccessor
public ref class MetaAccessor abstract
[<AbstractClassAttribute>]
type MetaAccessor =  class end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.MetaAccessorMetaAccessor

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor 成员

MetaAccessor 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaAccessor 类

表示成员的访问器。

MetaAccessor 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetaAccessor 类
System.Data.Linq.Mapping 命名空间


MetaAccessor 构造函数

MetaAccessor 构造函数
MetaAccessor 类

初始化 MetaAccessor 类的一个新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MetaAccessor()
protected:
MetaAccessor()
new : unit -> MetaAccessor

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor 类
MetaAccessor 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor 方法

MetaAccessor 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaAccessor 类

MetaAccessor 类型公开以下成员。

名称 说明
页首

参考

MetaAccessor 类
System.Data.Linq.Mapping 命名空间


MetaAccessor ..::.GetBoxedValue 方法

MetaAccessor
.
.
::
.
GetBoxedValue 方法
MetaAccessor 类

指定对其设置值或从其获取值的一个对象。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetBoxedValue ( _
    instance As Object _
) As Object
public abstract Object GetBoxedValue(
    Object instance
)
public:
virtual Object^ GetBoxedValue(
    Object^ instance
) abstract
abstract GetBoxedValue :
        instance:Object -> Object

参数

instance
类型： System Object
从其获取值或对其设置值的实例。

返回值

类型： System Object
此实例的已装箱值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor 类
MetaAccessor 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor ..::.HasAssignedValue 方法

MetaAccessor
.
.
::
.
HasAssignedValue 方法
MetaAccessor 类

指定该实例是否包含已分配的值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overridable Function HasAssignedValue ( _
    instance As Object _
) As Boolean
public virtual bool HasAssignedValue(
    Object instance
)
public:
virtual bool HasAssignedValue(
    Object^ instance
)
abstract HasAssignedValue :
        instance:Object -> bool
override HasAssignedValue :
        instance:Object -> bool

参数

instance
类型： System Object
要查看的实例。

返回值

类型： System Boolean
如果该实例当前具有已分配的值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor 类
MetaAccessor 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor ..::.HasLoadedValue 方法

MetaAccessor
.
.
::
.
HasLoadedValue 方法
MetaAccessor 类

指定该实例是否包含从延迟的源加载的值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overridable Function HasLoadedValue ( _
    instance As Object _
) As Boolean
public virtual bool HasLoadedValue(
    Object instance
)
public:
virtual bool HasLoadedValue(
    Object^ instance
)
abstract HasLoadedValue :
        instance:Object -> bool
override HasLoadedValue :
        instance:Object -> bool

参数

instance
类型： System Object
要查看的实例。

返回值

类型： System Boolean
如果该实例当前具有从延迟源加载的值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor 类
MetaAccessor 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor ..::.HasValue 方法

MetaAccessor
.
.
::
.
HasValue 方法
MetaAccessor 类

指定该实例是否包含已加载或分配的值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overridable Function HasValue ( _
    instance As Object _
) As Boolean
public virtual bool HasValue(
    Object instance
)
public:
virtual bool HasValue(
    Object^ instance
)
abstract HasValue :
        instance:Object -> bool
override HasValue :
        instance:Object -> bool

参数

instance
类型： System Object
要查看的实例。

返回值

类型： System Boolean
如果该实例当前具有已加载或已分配的值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor 类
MetaAccessor 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor ..::.SetBoxedValue 方法

MetaAccessor
.
.
::
.
SetBoxedValue 方法
MetaAccessor 类

将值设置为对象。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Sub SetBoxedValue ( _
    ByRef instance As Object, _
    value As Object _
)
public abstract void SetBoxedValue(
    ref Object instance,
    Object value
)
public:
virtual void SetBoxedValue(
    Object^% instance,
    Object^ value
) abstract
abstract SetBoxedValue :
        instance:Object byref *
        value:Object -> unit

参数

instance
类型： System Object %
要将值设置到其中的实例。
value
类型： System Object
要设置的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor 类
MetaAccessor 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor 属性

MetaAccessor 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaAccessor 类

MetaAccessor 类型公开以下成员。

名称 说明
页首

参考

MetaAccessor 类
System.Data.Linq.Mapping 命名空间


MetaAccessor ..::.Type 属性

MetaAccessor
.
.
::
.
Type 属性
MetaAccessor 类

获取此访问器访问的成员的类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Type As Type
    Get
public abstract Type Type { get; }
public:
virtual property Type^ Type {
    Type^ get () abstract;
}
abstract Type : Type

属性值

类型： System Type
成员的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor 类
MetaAccessor 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor <(Of <(TEntity, TMember >)>) 类

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
类
成员

MetaAccessor 类的一个强类型版本。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MetaAccessor(Of TEntity, TMember) _
    Inherits MetaAccessor
public abstract class MetaAccessor<TEntity, TMember> : MetaAccessor

generic<typename TEntity, typename TMember>
public ref class MetaAccessor abstract : public MetaAccessor
[<AbstractClassAttribute>]
type MetaAccessor<'TEntity, 'TMember> =
    class
        inherit MetaAccessor
    end

类型参数

TEntity

源的类型。

TMember

该源的成员的类型。

System.Data.Linq.Mapping
System.Data.Linq.Mapping..::.MetaAccessor<(Of <(TEntity, TMember>)>)MetaAccessor
System.Data.Linq.Mapping..::.MetaAccessor<(Of <(TEntity, TMember>)>)TEntity, TMember
System.Data.Linq.Mapping..::.MetaAccessor<(Of <(TEntity, TMember>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor TEntity, TMember 成员
System.Data.Linq.Mapping 命名空间
MetaAccessor


MetaAccessor <(Of <(TEntity, TMember >)>) 成员

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaAccessor

MetaAccessor 类的一个强类型版本。

MetaAccessor TEntity, TMember 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetaAccessor TEntity, TMember 类
System.Data.Linq.Mapping 命名空间


MetaAccessor <(Of <(TEntity, TMember >)>) 构造函数

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
构造函数
MetaAccessor

初始化 MetaAccessor<(Of <(TEntity, TMember>)>) 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MetaAccessor()
protected:
MetaAccessor()
new : unit -> MetaAccessor

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor TEntity, TMember 类
MetaAccessor TEntity, TMember 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor <(Of <(TEntity, TMember >)>) 方法

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaAccessor

MetaAccessor TEntity, TMember 类型公开以下成员。

名称 说明
页首

参考

MetaAccessor TEntity, TMember 类
System.Data.Linq.Mapping 命名空间


MetaAccessor <(Of <(TEntity, TMember >)>) ..::.GetBoxedValue 方法

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
.
.
::
.
GetBoxedValue 方法
MetaAccessor

指定对其设置值或从其获取值的一个对象。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overrides Function GetBoxedValue ( _
    instance As Object _
) As Object
public override Object GetBoxedValue(
    Object instance
)
public:
virtual Object^ GetBoxedValue(
    Object^ instance
) override
abstract GetBoxedValue :
        instance:Object -> Object
override GetBoxedValue :
        instance:Object -> Object

参数

instance
类型： System Object
从其获取值或对其设置值的实例。

返回值

类型： System Object
此实例的已装箱值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor TEntity, TMember 类
MetaAccessor TEntity, TMember 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor <(Of <(TEntity, TMember >)>) ..::.GetValue 方法

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
.
.
::
.
GetValue 方法
MetaAccessor

指定强类型值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetValue ( _
    instance As TEntity _
) As TMember
public abstract TMember GetValue(
    TEntity instance
)
public:
virtual TMember GetValue(
    TEntity instance
) abstract
abstract GetValue :
        instance:'TEntity -> 'TMember

参数

instance
类型： TEntity
要从其获取值的实例。

返回值

类型： TMember
此实例的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor TEntity, TMember 类
MetaAccessor TEntity, TMember 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor <(Of <(TEntity, TMember >)>) ..::.SetBoxedValue 方法

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
.
.
::
.
SetBoxedValue 方法
MetaAccessor

指定对其设置装箱值的实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overrides Sub SetBoxedValue ( _
    ByRef instance As Object, _
    value As Object _
)
public override void SetBoxedValue(
    ref Object instance,
    Object value
)
public:
virtual void SetBoxedValue(
    Object^% instance,
    Object^ value
) override
abstract SetBoxedValue :
        instance:Object byref *
        value:Object -> unit
override SetBoxedValue :
        instance:Object byref *
        value:Object -> unit

参数

instance
类型： System Object %
要将装箱值设置到其中的实例。
value
类型： System Object
要设置的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor TEntity, TMember 类
MetaAccessor TEntity, TMember 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor <(Of <(TEntity, TMember >)>) ..::.SetValue 方法

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
.
.
::
.
SetValue 方法
MetaAccessor

指定对其设置强类型值的实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Sub SetValue ( _
    ByRef instance As TEntity, _
    value As TMember _
)
public abstract void SetValue(
    ref TEntity instance,
    TMember value
)
public:
virtual void SetValue(
    TEntity% instance,
    TMember value
) abstract
abstract SetValue :
        instance:'TEntity byref *
        value:'TMember -> unit

参数

instance
类型： TEntity %
要将值设置到其中的实例。
value
类型： TMember
要设置的强类型值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor TEntity, TMember 类
MetaAccessor TEntity, TMember 成员
System.Data.Linq.Mapping 命名空间


MetaAccessor <(Of <(TEntity, TMember >)>) 属性

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaAccessor

MetaAccessor TEntity, TMember 类型公开以下成员。

名称 说明
页首

参考

MetaAccessor TEntity, TMember 类
System.Data.Linq.Mapping 命名空间


MetaAccessor <(Of <(TEntity, TMember >)>) ..::.Type 属性

MetaAccessor
<
(Of
<
(
TEntity, TMember
>
)
>
)
.
.
::
.
Type 属性
MetaAccessor

获取此访问器访问的成员的类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Overrides ReadOnly Property Type As Type
    Get
public override Type Type { get; }
public:
virtual property Type^ Type {
    Type^ get () override;
}
abstract Type : Type
override Type : Type

属性值

类型： System Type
成员类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAccessor TEntity, TMember 类
MetaAccessor TEntity, TMember 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation 类

MetaAssociation 类
成员

表示两个实体类型之间的关联关系。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MetaAssociation
public abstract class MetaAssociation
public ref class MetaAssociation abstract
[<AbstractClassAttribute>]
type MetaAssociation =  class end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.MetaAssociationMetaAssociation
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation 成员

MetaAssociation 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaAssociation 类

表示两个实体类型之间的关联关系。

MetaAssociation 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetaAssociation 类
System.Data.Linq.Mapping 命名空间


MetaAssociation 构造函数

MetaAssociation 构造函数
MetaAssociation 类

初始化 MetaAssociation 类的一个新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MetaAssociation()
protected:
MetaAssociation()
new : unit -> MetaAssociation

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation 方法

MetaAssociation 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaAssociation 类

MetaAssociation 类型公开以下成员。

名称 说明
页首

参考

MetaAssociation 类
System.Data.Linq.Mapping 命名空间


MetaAssociation 属性

MetaAssociation 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaAssociation 类

MetaAssociation 类型公开以下成员。

名称 说明
页首

参考

MetaAssociation 类
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.DeleteOnNull 属性

MetaAssociation
.
.
::
.
DeleteOnNull 属性
MetaAssociation 类

获取一个值，该值指示当关联设置为 null 时是否应删除对象。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DeleteOnNull As Boolean
    Get
public abstract bool DeleteOnNull { get; }
public:
virtual property bool DeleteOnNull {
    bool get () abstract;
}
abstract DeleteOnNull : bool

属性值

类型： System Boolean
如果为 true，则当关联设置为 null 时删除对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.DeleteRule 属性

MetaAssociation
.
.
::
.
DeleteRule 属性
MetaAssociation 类

获取删除子级时的行为。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DeleteRule As String
    Get
public abstract string DeleteRule { get; }
public:
virtual property String^ DeleteRule {
    String^ get () abstract;
}
abstract DeleteRule : string

属性值

类型： System String
返回表示规则的字符串；或者如果没有指定删除时的操作，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

规则的示例包括“CASCADE”、“SET NULL”等。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.IsForeignKey 属性

MetaAssociation
.
.
::
.
IsForeignKey 属性
MetaAssociation 类

获取一个值，该值指示另一类型是否为此类型的父级。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsForeignKey As Boolean
    Get
public abstract bool IsForeignKey { get; }
public:
virtual property bool IsForeignKey {
    bool get () abstract;
}
abstract IsForeignKey : bool

属性值

类型： System Boolean
如果另一类型为此类型的父级，则返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.IsMany 属性

MetaAssociation
.
.
::
.
IsMany 属性
MetaAssociation 类

获取一个值，该值指示关联是否表示一对多关系。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsMany As Boolean
    Get
public abstract bool IsMany { get; }
public:
virtual property bool IsMany {
    bool get () abstract;
}
abstract IsMany : bool

属性值

类型： System Boolean
如果关联表示一对多关系，则返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.IsNullable 属性

MetaAssociation
.
.
::
.
IsNullable 属性
MetaAssociation 类

获取一个值，该值指示关联是否可为 null。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsNullable As Boolean
    Get
public abstract bool IsNullable { get; }
public:
virtual property bool IsNullable {
    bool get () abstract;
}
abstract IsNullable : bool

属性值

类型： System Boolean
如果关联可为 null，则返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.IsUnique 属性

MetaAssociation
.
.
::
.
IsUnique 属性
MetaAssociation 类

获取一个值，该值指示关联是否是唯一的。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsUnique As Boolean
    Get
public abstract bool IsUnique { get; }
public:
virtual property bool IsUnique {
    bool get () abstract;
}
abstract IsUnique : bool

属性值

类型： System Boolean
如果关联是唯一的，则返回 true。

此属性指示数据库中的唯一约束。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.OtherKey 属性

MetaAssociation
.
.
::
.
OtherKey 属性
MetaAssociation 类

获取表示关联的另一端上的值的成员列表。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property OtherKey As ReadOnlyCollection(Of MetaDataMember)
    Get
public abstract ReadOnlyCollection<MetaDataMember> OtherKey { get; }
public:
virtual property ReadOnlyCollection<MetaDataMember^>^ OtherKey {
    ReadOnlyCollection<MetaDataMember^>^ get () abstract;
}
abstract OtherKey : ReadOnlyCollection<MetaDataMember>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaDataMember
>
)
>
)

返回表示关联的另一端上的值的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.OtherKeyIsPrimaryKey 属性

MetaAssociation
.
.
::
.
OtherKeyIsPrimaryKey 属性
MetaAssociation 类

获取一个值，该值指示 OtherKey 是否构成另一类型的标识。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property OtherKeyIsPrimaryKey As Boolean
    Get
public abstract bool OtherKeyIsPrimaryKey { get; }
public:
virtual property bool OtherKeyIsPrimaryKey {
    bool get () abstract;
}
abstract OtherKeyIsPrimaryKey : bool

属性值

类型： System Boolean
如果 OtherKey 构成另一类型的标识（主键），则为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.OtherMember 属性

MetaAssociation
.
.
::
.
OtherMember 属性
MetaAssociation 类

获取表示反向关联的此关联的另一端上的成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property OtherMember As MetaDataMember
    Get
public abstract MetaDataMember OtherMember { get; }
public:
virtual property MetaDataMember^ OtherMember {
    MetaDataMember^ get () abstract;
}
abstract OtherMember : MetaDataMember

属性值

类型： System.Data.Linq.Mapping MetaDataMember
另一端上的成员。

此值可为 null。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.OtherType 属性

MetaAssociation
.
.
::
.
OtherType 属性
MetaAssociation 类

获取关联的另一端上的类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property OtherType As MetaType
    Get
public abstract MetaType OtherType { get; }
public:
virtual property MetaType^ OtherType {
    MetaType^ get () abstract;
}
abstract OtherType : MetaType

属性值

类型： System.Data.Linq.Mapping MetaType
类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.ThisKey 属性

MetaAssociation
.
.
::
.
ThisKey 属性
MetaAssociation 类

获取表示关联的此端上的值的成员列表。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property ThisKey As ReadOnlyCollection(Of MetaDataMember)
    Get
public abstract ReadOnlyCollection<MetaDataMember> ThisKey { get; }
public:
virtual property ReadOnlyCollection<MetaDataMember^>^ ThisKey {
    ReadOnlyCollection<MetaDataMember^>^ get () abstract;
}
abstract ThisKey : ReadOnlyCollection<MetaDataMember>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaDataMember
>
)
>
)

一个集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.ThisKeyIsPrimaryKey 属性

MetaAssociation
.
.
::
.
ThisKeyIsPrimaryKey 属性
MetaAssociation 类

获取一个值，该值指示 ThisKey 是否构成此类型的标识。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property ThisKeyIsPrimaryKey As Boolean
    Get
public abstract bool ThisKeyIsPrimaryKey { get; }
public:
virtual property bool ThisKeyIsPrimaryKey {
    bool get () abstract;
}
abstract ThisKeyIsPrimaryKey : bool

属性值

类型： System Boolean
如果 ThisKey 构成关联的标识（主键），则为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaAssociation ..::.ThisMember 属性

MetaAssociation
.
.
::
.
ThisMember 属性
MetaAssociation 类

获取表示关联的此端上的成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property ThisMember As MetaDataMember
    Get
public abstract MetaDataMember ThisMember { get; }
public:
virtual property MetaDataMember^ ThisMember {
    MetaDataMember^ get () abstract;
}
abstract ThisMember : MetaDataMember

属性值

类型： System.Data.Linq.Mapping MetaDataMember
表示关联的此端上的成员。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaAssociation 类
MetaAssociation 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember 类

MetaDataMember 类
成员

表示域对象的字段或属性与数据库表的列之间的映射。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MetaDataMember
public abstract class MetaDataMember
public ref class MetaDataMember abstract
[<AbstractClassAttribute>]
type MetaDataMember =  class end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.MetaDataMemberMetaDataMember
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember 成员

MetaDataMember 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaDataMember 类

表示域对象的字段或属性与数据库表的列之间的映射。

MetaDataMember 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetaDataMember 类
System.Data.Linq.Mapping 命名空间


MetaDataMember 构造函数

MetaDataMember 构造函数
MetaDataMember 类

初始化 MetaDataMember 类的一个新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MetaDataMember()
protected:
MetaDataMember()
new : unit -> MetaDataMember

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember 方法

MetaDataMember 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaDataMember 类

MetaDataMember 类型公开以下成员。

名称 说明
页首

参考

MetaDataMember 类
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.IsDeclaredBy 方法

MetaDataMember
.
.
::
.
IsDeclaredBy 方法
MetaDataMember 类

指定此成员是否由指定类型声明。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function IsDeclaredBy ( _
    type As MetaType _
) As Boolean
public abstract bool IsDeclaredBy(
    MetaType type
)
public:
virtual bool IsDeclaredBy(
    MetaType^ type
) abstract
abstract IsDeclaredBy :
        type:MetaType -> bool

参数

type
类型： System.Data.Linq.Mapping MetaType
要检查的类型。

返回值

类型： System Boolean
如果此成员是由指定类型声明的，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember 属性

MetaDataMember 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaDataMember 类

MetaDataMember 类型公开以下成员。

名称 说明
页首

参考

MetaDataMember 类
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.Association 属性

MetaDataMember
.
.
::
.
Association 属性
MetaDataMember 类

获取与此成员相对应的 MetaAssociation。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Association As MetaAssociation
    Get
public abstract MetaAssociation Association { get; }
public:
virtual property MetaAssociation^ Association {
    MetaAssociation^ get () abstract;
}
abstract Association : MetaAssociation

属性值

类型： System.Data.Linq.Mapping MetaAssociation
如果存在对应的 MetaAssociation，则为该 MetaAssociation；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

此属性表示类似于外键-主键关系的数据库关联。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.AutoSync 属性

MetaDataMember
.
.
::
.
AutoSync 属性
MetaDataMember 类

获取此成员在执行插入和更新操作时的读回行为。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property AutoSync As AutoSync
    Get
public abstract AutoSync AutoSync { get; }
public:
virtual property AutoSync AutoSync {
    AutoSync get () abstract;
}
abstract AutoSync : AutoSync

属性值

类型： System.Data.Linq.Mapping AutoSync
一个 AutoSync 枚举。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.CanBeNull 属性

MetaDataMember
.
.
::
.
CanBeNull 属性
MetaDataMember 类

获取一个值，该值指示是否可以为此成员赋予 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property CanBeNull As Boolean
    Get
public abstract bool CanBeNull { get; }
public:
virtual property bool CanBeNull {
    bool get () abstract;
}
abstract CanBeNull : bool

属性值

类型： System Boolean
如果可以为此成员赋予 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值，则为 true；否则为 false。

此属性依赖于 DbType 属性，它只是为了方便而提供的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.DbType 属性

MetaDataMember
.
.
::
.
DbType 属性
MetaDataMember 类

获取相应数据库列的类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DbType As String
    Get
public abstract string DbType { get; }
public:
virtual property String^ DbType {
    String^ get () abstract;
}
abstract DbType : string

属性值

类型： System String
以字符串表示的数据库列的类型。

此数据库列类型将是 T-SQL 表声明命令中用于定义列的确切文本。如果列不是这样定义的，将从成员类型推断数据库列类型。 此数据库列类型将是 T-SQL 表声明命令中用于定义列的确切文本。如果列不是这样定义的，将从成员类型推断数据库列类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.DeclaringType 属性

MetaDataMember
.
.
::
.
DeclaringType 属性
MetaDataMember 类

获取包含此数据成员的 MetaType。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DeclaringType As MetaType
    Get
public abstract MetaType DeclaringType { get; }
public:
virtual property MetaType^ DeclaringType {
    MetaType^ get () abstract;
}
abstract DeclaringType : MetaType

属性值

类型： System.Data.Linq.Mapping MetaType
包含当前成员的元类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.DeferredSourceAccessor 属性

MetaDataMember
.
.
::
.
DeferredSourceAccessor 属性
MetaDataMember 类

获取用于获取并设置此成员的延迟源的访问器。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DeferredSourceAccessor As MetaAccessor
    Get
public abstract MetaAccessor DeferredSourceAccessor { get; }
public:
virtual property MetaAccessor^ DeferredSourceAccessor {
    MetaAccessor^ get () abstract;
}
abstract DeferredSourceAccessor : MetaAccessor

属性值

类型： System.Data.Linq.Mapping MetaAccessor
用于访问此成员的延迟源的访问器。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.DeferredValueAccessor 属性

MetaDataMember
.
.
::
.
DeferredValueAccessor 属性
MetaDataMember 类

获取用于获取并设置此成员的延迟值（而不会导致提取）的访问器。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DeferredValueAccessor As MetaAccessor
    Get
public abstract MetaAccessor DeferredValueAccessor { get; }
public:
virtual property MetaAccessor^ DeferredValueAccessor {
    MetaAccessor^ get () abstract;
}
abstract DeferredValueAccessor : MetaAccessor

属性值

类型： System.Data.Linq.Mapping MetaAccessor
用于访问此成员的延迟值的访问器。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.Expression 属性

MetaDataMember
.
.
::
.
Expression 属性
MetaDataMember 类

获取定义计算列的表达式。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Expression As String
    Get
public abstract string Expression { get; }
public:
virtual property String^ Expression {
    String^ get () abstract;
}
abstract Expression : string

属性值

类型： System String
以字符串表示的计算列表达式。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.IsAssociation 属性

MetaDataMember
.
.
::
.
IsAssociation 属性
MetaDataMember 类

获取一个值，该值指示此成员是否定义关联关系。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsAssociation As Boolean
    Get
public abstract bool IsAssociation { get; }
public:
virtual property bool IsAssociation {
    bool get () abstract;
}
abstract IsAssociation : bool

属性值

类型： System Boolean
如果此成员定义了关联关系，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.IsDbGenerated 属性

MetaDataMember
.
.
::
.
IsDbGenerated 属性
MetaDataMember 类

获取一个值，该值指示此成员是否由数据库自动生成。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsDbGenerated As Boolean
    Get
public abstract bool IsDbGenerated { get; }
public:
virtual property bool IsDbGenerated {
    bool get () abstract;
}
abstract IsDbGenerated : bool

属性值

类型： System Boolean
如果此成员是由数据库自动生成的，则为 true；否则为 false。

在插入相应的数据行后，自动生成的成员会立即进行同步。不支持插入触发器生成的键值。 在插入相应的数据行后，自动生成的成员会立即进行同步。不支持插入触发器生成的键值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.IsDeferred 属性

MetaDataMember
.
.
::
.
IsDeferred 属性
MetaDataMember 类

获取一个值，该值指示默认行为是否为延迟加载此成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsDeferred As Boolean
    Get
public abstract bool IsDeferred { get; }
public:
virtual property bool IsDeferred {
    bool get () abstract;
}
abstract IsDeferred : bool

属性值

类型： System Boolean
如果默认情况下会延迟加载此成员，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.IsDiscriminator 属性

MetaDataMember
.
.
::
.
IsDiscriminator 属性
MetaDataMember 类

获取一个值，该值指示此成员是否表示继承鉴别器。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsDiscriminator As Boolean
    Get
public abstract bool IsDiscriminator { get; }
public:
virtual property bool IsDiscriminator {
    bool get () abstract;
}
abstract IsDiscriminator : bool

属性值

类型： System Boolean
如果此成员表示继承鉴别器，则为 true；否则为 false。

您只能针对层次结构中最顶层映射类的一个成员将此属性设置为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.IsPersistent 属性

MetaDataMember
.
.
::
.
IsPersistent 属性
MetaDataMember 类

获取一个值，该值指示此成员是否映射到列（或约束）。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsPersistent As Boolean
    Get
public abstract bool IsPersistent { get; }
public:
virtual property bool IsPersistent {
    bool get () abstract;
}
abstract IsPersistent : bool

属性值

类型： System Boolean
如果此成员映射到列（或约束），则为 true；否则为 false。

一个类可以同时拥有持久性成员和非持久性成员。持久性成员会进行映射，而非持久性成员则不会进行映射。映射的类必须至少拥有一个持久性成员。 一个类可以同时拥有持久性成员和非持久性成员。持久性成员会进行映射，而非持久性成员则不会进行映射。映射的类必须至少拥有一个持久性成员。 一个类可以同时拥有持久性成员和非持久性成员。持久性成员会进行映射，而非持久性成员则不会进行映射。映射的类必须至少拥有一个持久性成员。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.IsPrimaryKey 属性

MetaDataMember
.
.
::
.
IsPrimaryKey 属性
MetaDataMember 类

获取一个值，该值指示此成员是否为类型标识的一部分。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsPrimaryKey As Boolean
    Get
public abstract bool IsPrimaryKey { get; }
public:
virtual property bool IsPrimaryKey {
    bool get () abstract;
}
abstract IsPrimaryKey : bool

属性值

类型： System Boolean
如果此成员是类型标识的一部分，则为 true；否则为 false。

如果此属性为 true，则类成员表示的列将是表唯一键的一部分。对于由关联列复合而成的键，可以为类的多个成员将此属性设置为 true。对于实体类，必须至少有一个成员具有此特性，并应映射到相应表或视图中的主键或唯一键。否则，LINQ to SQL 会将该类的实例视为只读，以便提交对数据库所做的更改。 如果此属性为 true，则类成员表示的列将是表唯一键的一部分。对于由关联列复合而成的键，可以为类的多个成员将此属性设置为 true。对于实体类，必须至少有一个成员具有此特性，并应映射到相应表或视图中的主键或唯一键。否则，LINQ to SQL 会将该类的实例视为只读，以便提交对数据库所做的更改。 如果此属性为 true，则类成员表示的列将是表唯一键的一部分。对于由关联列复合而成的键，可以为类的多个成员将此属性设置为 true。对于实体类，必须至少有一个成员具有此特性，并应映射到相应表或视图中的主键或唯一键。否则，LINQ to SQL 会将该类的实例视为只读，以便提交对数据库所做的更改。 如果此属性为 true，则类成员表示的列将是表唯一键的一部分。对于由关联列复合而成的键，可以为类的多个成员将此属性设置为 true。对于实体类，必须至少有一个成员具有此特性，并应映射到相应表或视图中的主键或唯一键。否则，LINQ to SQL 会将该类的实例视为只读，以便提交对数据库所做的更改。

由 IsPrimaryKey 标识的列集不必是主键。它们只是表示唯一标识实体的集合。常见的替代项包括索引列或其他唯一键列的群集。 由 IsPrimaryKey 标识的列集不必是主键。它们只是表示唯一标识实体的集合。常见的替代项包括索引列或其他唯一键列的群集。 由 IsPrimaryKey 标识的列集不必是主键。它们只是表示唯一标识实体的集合。常见的替代项包括索引列或其他唯一键列的群集。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.IsVersion 属性

MetaDataMember
.
.
::
.
IsVersion 属性
MetaDataMember 类

获取一个值，该值指示此成员是否表示行版本或时间戳。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsVersion As Boolean
    Get
public abstract bool IsVersion { get; }
public:
virtual property bool IsVersion {
    bool get () abstract;
}
abstract IsVersion : bool

属性值

类型： System Boolean
如果此成员表示行版本或时间戳，则为 true；否则为 false。

每次更新关联行时，版本号将递增，而且时间戳列也会得到更新。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.LoadMethod 属性

MetaDataMember
.
.
::
.
LoadMethod 属性
MetaDataMember 类

获取用于执行加载操作的 DataContext 方法。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property LoadMethod As MethodInfo
    Get
public abstract MethodInfo LoadMethod { get; }
public:
virtual property MethodInfo^ LoadMethod {
    MethodInfo^ get () abstract;
}
abstract LoadMethod : MethodInfo

属性值

类型： System.Reflection MethodInfo
类似于 MethodInfo 的加载方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.MappedName 属性

MetaDataMember
.
.
::
.
MappedName 属性
MetaDataMember 类

获取数据库中列（或约束）的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property MappedName As String
    Get
public abstract string MappedName { get; }
public:
virtual property String^ MappedName {
    String^ get () abstract;
}
abstract MappedName : string

属性值

类型： System String
字符串形式的列（或约束）的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.Member 属性

MetaDataMember
.
.
::
.
Member 属性
MetaDataMember 类

获取基础 MemberInfo。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Member As MemberInfo
    Get
public abstract MemberInfo Member { get; }
public:
virtual property MemberInfo^ Member {
    MemberInfo^ get () abstract;
}
abstract Member : MemberInfo

属性值

类型： System.Reflection MemberInfo
成员特性和元数据信息。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.MemberAccessor 属性

MetaDataMember
.
.
::
.
MemberAccessor 属性
MetaDataMember 类

获取用于获取或设置此成员的值的访问器。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property MemberAccessor As MetaAccessor
    Get
public abstract MetaAccessor MemberAccessor { get; }
public:
virtual property MetaAccessor^ MemberAccessor {
    MetaAccessor^ get () abstract;
}
abstract MemberAccessor : MetaAccessor

属性值

类型： System.Data.Linq.Mapping MetaAccessor
访问器。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.Name 属性

MetaDataMember
.
.
::
.
Name 属性
MetaDataMember 类

获取与 MemberInfo 名称相同的成员名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Name As String
    Get
public abstract string Name { get; }
public:
virtual property String^ Name {
    String^ get () abstract;
}
abstract Name : string

属性值

类型： System String
与 MemberInfo 名称相同的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.Ordinal 属性

MetaDataMember
.
.
::
.
Ordinal 属性
MetaDataMember 类

获取此成员在查询结果的默认布局中的序号位置。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Ordinal As Integer
    Get
public abstract int Ordinal { get; }
public:
virtual property int Ordinal {
    int get () abstract;
}
abstract Ordinal : int

属性值

类型： System Int32
序号位置。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.StorageAccessor 属性

MetaDataMember
.
.
::
.
StorageAccessor 属性
MetaDataMember 类

获取用于获取或设置此成员的存储值的访问器。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property StorageAccessor As MetaAccessor
    Get
public abstract MetaAccessor StorageAccessor { get; }
public:
virtual property MetaAccessor^ StorageAccessor {
    MetaAccessor^ get () abstract;
}
abstract StorageAccessor : MetaAccessor

属性值

类型： System.Data.Linq.Mapping MetaAccessor
用于访问此成员的存储值的访问器。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.StorageMember 属性

MetaDataMember
.
.
::
.
StorageMember 属性
MetaDataMember 类

获取存储此成员数据的成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property StorageMember As MemberInfo
    Get
public abstract MemberInfo StorageMember { get; }
public:
virtual property MemberInfo^ StorageMember {
    MemberInfo^ get () abstract;
}
abstract StorageMember : MemberInfo

属性值

类型： System.Reflection MemberInfo
存储成员。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.Type 属性

MetaDataMember
.
.
::
.
Type 属性
MetaDataMember 类

获取此成员的类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Type As Type
    Get
public abstract Type Type { get; }
public:
virtual property Type^ Type {
    Type^ get () abstract;
}
abstract Type : Type

属性值

类型： System Type
当前成员的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaDataMember ..::.UpdateCheck 属性

MetaDataMember
.
.
::
.
UpdateCheck 属性
MetaDataMember 类

获取此成员的开放式并发检查策略。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property UpdateCheck As UpdateCheck
    Get
public abstract UpdateCheck UpdateCheck { get; }
public:
virtual property UpdateCheck UpdateCheck {
    UpdateCheck get () abstract;
}
abstract UpdateCheck : UpdateCheck

属性值

类型： System.Data.Linq.Mapping UpdateCheck
UpdateCheck 枚举。

如果该类不具有版本成员（IsVersion 设置为 true），将通过对原始成员值与当前数据库状态进行比较来完成检测。

UpdateCheck 属性用于确定 LINQ to SQL 如何在开放式并发下实现冲突检测。在冲突检测过程中，将只考虑将此属性设置为 Always 或 WhenChanged 的那些成员。 UpdateCheck 属性用于确定 LINQ to SQL 如何在开放式并发下实现冲突检测。在冲突检测过程中，将只考虑将此属性设置为 Always 或 WhenChanged 的那些成员。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaDataMember 类
MetaDataMember 成员
System.Data.Linq.Mapping 命名空间


MetaFunction 类

MetaFunction 类
成员

表示在上下文方法和数据库函数之间的映射。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MetaFunction
public abstract class MetaFunction
public ref class MetaFunction abstract
[<AbstractClassAttribute>]
type MetaFunction =  class end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.MetaFunctionMetaFunction
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction 成员

MetaFunction 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaFunction 类

表示在上下文方法和数据库函数之间的映射。

MetaFunction 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetaFunction 类
System.Data.Linq.Mapping 命名空间


MetaFunction 构造函数

MetaFunction 构造函数
MetaFunction 类

初始化 MetaFunction 类的一个新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MetaFunction()
protected:
MetaFunction()
new : unit -> MetaFunction

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction 方法

MetaFunction 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaFunction 类

MetaFunction 类型公开以下成员。

名称 说明
页首

参考

MetaFunction 类
System.Data.Linq.Mapping 命名空间


MetaFunction 属性

MetaFunction 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaFunction 类

MetaFunction 类型公开以下成员。

名称 说明
页首

参考

MetaFunction 类
System.Data.Linq.Mapping 命名空间


MetaFunction ..::.HasMultipleResults 属性

MetaFunction
.
.
::
.
HasMultipleResults 属性
MetaFunction 类

获取一个值，指示存储过程是否具有多个结果类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property HasMultipleResults As Boolean
    Get
public abstract bool HasMultipleResults { get; }
public:
virtual property bool HasMultipleResults {
    bool get () abstract;
}
abstract HasMultipleResults : bool

属性值

类型： System Boolean
如果存储过程具有多个结果类型，则为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction ..::.IsComposable 属性

MetaFunction
.
.
::
.
IsComposable 属性
MetaFunction 类

获取一个值，该值指示是否可在查询内编写函数。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsComposable As Boolean
    Get
public abstract bool IsComposable { get; }
public:
virtual property bool IsComposable {
    bool get () abstract;
}
abstract IsComposable : bool

属性值

类型： System Boolean
如果可在查询内编写函数，则为 true。

不能在查询内编写存储过程。表示存储过程的方法返回 false。 不能在查询内编写存储过程。表示存储过程的方法返回 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction ..::.MappedName 属性

MetaFunction
.
.
::
.
MappedName 属性
MetaFunction 类

获取数据库函数或过程的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property MappedName As String
    Get
public abstract string MappedName { get; }
public:
virtual property String^ MappedName {
    String^ get () abstract;
}
abstract MappedName : string

属性值

类型： System String
一个字符串，表示数据库函数或过程的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction ..::.Method 属性

MetaFunction
.
.
::
.
Method 属性
MetaFunction 类

获取基础上下文方法。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Method As MethodInfo
    Get
public abstract MethodInfo Method { get; }
public:
virtual property MethodInfo^ Method {
    MethodInfo^ get () abstract;
}
abstract Method : MethodInfo

属性值

类型： System.Reflection MethodInfo
对应于基础上下文方法的 MethodInfo 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction ..::.Model 属性

MetaFunction
.
.
::
.
Model 属性
MetaFunction 类

获取包含此函数的 MetaModel。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Model As MetaModel
    Get
public abstract MetaModel Model { get; }
public:
virtual property MetaModel^ Model {
    MetaModel^ get () abstract;
}
abstract Model : MetaModel

属性值

类型： System.Data.Linq.Mapping MetaModel
包含此函数的 MetaModel 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction ..::.Name 属性

MetaFunction
.
.
::
.
Name 属性
MetaFunction 类

获取方法的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Name As String
    Get
public abstract string Name { get; }
public:
virtual property String^ Name {
    String^ get () abstract;
}
abstract Name : string

属性值

类型： System String
表示方法名称的 string。

此名称与 MethodInfo 名称相同。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction ..::.Parameters 属性

MetaFunction
.
.
::
.
Parameters 属性
MetaFunction 类

获取函数参数的枚举。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Parameters As ReadOnlyCollection(Of MetaParameter)
    Get
public abstract ReadOnlyCollection<MetaParameter> Parameters { get; }
public:
virtual property ReadOnlyCollection<MetaParameter^>^ Parameters {
    ReadOnlyCollection<MetaParameter^>^ get () abstract;
}
abstract Parameters : ReadOnlyCollection<MetaParameter>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaParameter
>
)
>
)

参数的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction ..::.ResultRowTypes 属性

MetaFunction
.
.
::
.
ResultRowTypes 属性
MetaFunction 类

获取可能的结果行类型的枚举。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property ResultRowTypes As ReadOnlyCollection(Of MetaType)
    Get
public abstract ReadOnlyCollection<MetaType> ResultRowTypes { get; }
public:
virtual property ReadOnlyCollection<MetaType^>^ ResultRowTypes {
    ReadOnlyCollection<MetaType^>^ get () abstract;
}
abstract ResultRowTypes : ReadOnlyCollection<MetaType>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaType
>
)
>
)

可能的类型的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaFunction ..::.ReturnParameter 属性

MetaFunction
.
.
::
.
ReturnParameter 属性
MetaFunction 类

获取返回参数。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property ReturnParameter As MetaParameter
    Get
public abstract MetaParameter ReturnParameter { get; }
public:
virtual property MetaParameter^ ReturnParameter {
    MetaParameter^ get () abstract;
}
abstract ReturnParameter : MetaParameter

属性值

类型： System.Data.Linq.Mapping MetaParameter
对应于返回参数的 MetaParameter。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaFunction 类
MetaFunction 成员
System.Data.Linq.Mapping 命名空间


MetaModel 类

MetaModel 类
成员

一个表示数据库和域对象之间的映射的抽象。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MetaModel
public abstract class MetaModel
public ref class MetaModel abstract
[<AbstractClassAttribute>]
type MetaModel =  class end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.MetaModelMetaModel
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel 成员

MetaModel 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaModel 类

一个表示数据库和域对象之间的映射的抽象。

MetaModel 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetaModel 类
System.Data.Linq.Mapping 命名空间


MetaModel 构造函数

MetaModel 构造函数
MetaModel 类

初始化 MetaModel 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MetaModel()
protected:
MetaModel()
new : unit -> MetaModel

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel 方法

MetaModel 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaModel 类

MetaModel 类型公开以下成员。

名称 说明
页首

参考

MetaModel 类
System.Data.Linq.Mapping 命名空间


MetaModel ..::.GetFunction 方法

MetaModel
.
.
::
.
GetFunction 方法
MetaModel 类

获取与数据库函数相对应的 MetaFunction。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetFunction ( _
    method As MethodInfo _
) As MetaFunction
public abstract MetaFunction GetFunction(
    MethodInfo method
)
public:
virtual MetaFunction^ GetFunction(
    MethodInfo^ method
) abstract
abstract GetFunction :
        method:MethodInfo -> MetaFunction

参数

method
类型： System.Reflection MethodInfo
对 DataContext 或表示数据库函数的从属类定义的方法。

返回值

类型： System.Data.Linq.Mapping MetaFunction
与数据库函数相对应的元函数。

数据库函数包括用户定义的函数、表值函数和存储过程。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel ..::.GetFunctions 方法

MetaModel
.
.
::
.
GetFunctions 方法
MetaModel 类

获取所有函数的枚举。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetFunctions As IEnumerable(Of MetaFunction)
public abstract IEnumerable<MetaFunction> GetFunctions()
public:
virtual IEnumerable<MetaFunction^>^ GetFunctions() abstract
abstract GetFunctions : unit -> IEnumerable<MetaFunction>

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
MetaFunction
>
)
>
)

一个可用于循环访问所有函数的枚举。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel ..::.GetMetaType 方法

MetaModel
.
.
::
.
GetMetaType 方法
MetaModel 类

发现指定的 Type 的 MetaType。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetMetaType ( _
    type As Type _
) As MetaType
public abstract MetaType GetMetaType(
    Type type
)
public:
virtual MetaType^ GetMetaType(
    Type^ type
) abstract
abstract GetMetaType :
        type:Type -> MetaType

参数

type
类型： System Type
为其查找 MetaType 的类型。

返回值

类型： System.Data.Linq.Mapping MetaType
一个与指定的类型相对应的元数据类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel ..::.GetTable 方法

MetaModel
.
.
::
.
GetTable 方法
MetaModel 类

获取与指定 Type 关联的 MetaTable。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetTable ( _
    rowType As Type _
) As MetaTable
public abstract MetaTable GetTable(
    Type rowType
)
public:
virtual MetaTable^ GetTable(
    Type^ rowType
) abstract
abstract GetTable :
        rowType:Type -> MetaTable

参数

rowType
类型： System Type
公共语言运行时 (CLR) 行类型。

返回值

类型： System.Data.Linq.Mapping MetaTable
一个与指定的行类型关联的元表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel ..::.GetTables 方法

MetaModel
.
.
::
.
GetTables 方法
MetaModel 类

获取所有表的枚举。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetTables As IEnumerable(Of MetaTable)
public abstract IEnumerable<MetaTable> GetTables()
public:
virtual IEnumerable<MetaTable^>^ GetTables() abstract
abstract GetTables : unit -> IEnumerable<MetaTable>

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
MetaTable
>
)
>
)

一个可用于循环访问表的枚举数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel 属性

MetaModel 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaModel 类

MetaModel 类型公开以下成员。

名称 说明
页首

参考

MetaModel 类
System.Data.Linq.Mapping 命名空间


MetaModel ..::.ContextType 属性

MetaModel
.
.
::
.
ContextType 属性
MetaModel 类

获取此模型所描述的 DataContext 类型的类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property ContextType As Type
    Get
public abstract Type ContextType { get; }
public:
virtual property Type^ ContextType {
    Type^ get () abstract;
}
abstract ContextType : Type

属性值

类型： System Type
数据上下文类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel ..::.DatabaseName 属性

MetaModel
.
.
::
.
DatabaseName 属性
MetaModel 类

获取数据库的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DatabaseName As String
    Get
public abstract string DatabaseName { get; }
public:
virtual property String^ DatabaseName {
    String^ get () abstract;
}
abstract DatabaseName : string

属性值

类型： System String
用字符串表示的数据库名。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel ..::.MappingSource 属性

MetaModel
.
.
::
.
MappingSource 属性
MetaModel 类

获取生成此模型的映射源。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property MappingSource As MappingSource
    Get
public abstract MappingSource MappingSource { get; }
public:
virtual property MappingSource^ MappingSource {
    MappingSource^ get () abstract;
}
abstract MappingSource : MappingSource

属性值

类型： System.Data.Linq.Mapping MappingSource
原始的映射源。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaModel ..::.ProviderType 属性

MetaModel
.
.
::
.
ProviderType 属性
MetaModel 类

获取或设置提供程序类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property ProviderType As Type
    Get
public abstract Type ProviderType { get; }
public:
virtual property Type^ ProviderType {
    Type^ get () abstract;
}
abstract ProviderType : Type

属性值

类型： System Type
提供程序类型。

如果指定此属性，则可以使用现有的提供程序类型。这将使得在获取此信息时不必再在服务器之间往返。LINQ to SQL 必须知道提供程序类型才能建立适当的查询转换规则。LINQ to SQL 支持 Sql2000Provider 和 Sql2005Provider 提供程序。 如果指定此属性，则可以使用现有的提供程序类型。这将使得在获取此信息时不必再在服务器之间往返。LINQ to SQL 必须知道提供程序类型才能建立适当的查询转换规则。LINQ to SQL 支持 Sql2000Provider 和 Sql2005Provider 提供程序。 如果指定此属性，则可以使用现有的提供程序类型。这将使得在获取此信息时不必再在服务器之间往返。LINQ to SQL 必须知道提供程序类型才能建立适当的查询转换规则。LINQ to SQL 支持 Sql2000Provider 和 Sql2005Provider 提供程序。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaModel 类
MetaModel 成员
System.Data.Linq.Mapping 命名空间


MetaParameter 类

MetaParameter 类
成员

表示方法参数和数据库函数参数之间的映射。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MetaParameter
public abstract class MetaParameter
public ref class MetaParameter abstract
[<AbstractClassAttribute>]
type MetaParameter =  class end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.MetaParameterMetaParameter
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaParameter 成员
System.Data.Linq.Mapping 命名空间


MetaParameter 成员

MetaParameter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaParameter 类

表示方法参数和数据库函数参数之间的映射。

MetaParameter 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetaParameter 类
System.Data.Linq.Mapping 命名空间


MetaParameter 构造函数

MetaParameter 构造函数
MetaParameter 类

初始化 MetaParameter 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MetaParameter()
protected:
MetaParameter()
new : unit -> MetaParameter

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaParameter 类
MetaParameter 成员
System.Data.Linq.Mapping 命名空间


MetaParameter 方法

MetaParameter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaParameter 类

MetaParameter 类型公开以下成员。

名称 说明
页首

参考

MetaParameter 类
System.Data.Linq.Mapping 命名空间


MetaParameter 属性

MetaParameter 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaParameter 类

MetaParameter 类型公开以下成员。

名称 说明
页首

参考

MetaParameter 类
System.Data.Linq.Mapping 命名空间


MetaParameter ..::.DbType 属性

MetaParameter
.
.
::
.
DbType 属性
MetaParameter 类

获取参数的数据库类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DbType As String
    Get
public abstract string DbType { get; }
public:
virtual property String^ DbType {
    String^ get () abstract;
}
abstract DbType : string

属性值

类型： System String
字符串形式的参数的数据库类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaParameter 类
MetaParameter 成员
System.Data.Linq.Mapping 命名空间


MetaParameter ..::.MappedName 属性

MetaParameter
.
.
::
.
MappedName 属性
MetaParameter 类

获取数据库函数中的参数名。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property MappedName As String
    Get
public abstract string MappedName { get; }
public:
virtual property String^ MappedName {
    String^ get () abstract;
}
abstract MappedName : string

属性值

类型： System String
字符串形式的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaParameter 类
MetaParameter 成员
System.Data.Linq.Mapping 命名空间


MetaParameter ..::.Name 属性

MetaParameter
.
.
::
.
Name 属性
MetaParameter 类

获取参数名。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Name As String
    Get
public abstract string Name { get; }
public:
virtual property String^ Name {
    String^ get () abstract;
}
abstract Name : string

属性值

类型： System String
字符串形式的参数名。

此值与 ParameterInfo 名称相同。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaParameter 类
MetaParameter 成员
System.Data.Linq.Mapping 命名空间


MetaParameter ..::.Parameter 属性

MetaParameter
.
.
::
.
Parameter 属性
MetaParameter 类

获取基础方法参数。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Parameter As ParameterInfo
    Get
public abstract ParameterInfo Parameter { get; }
public:
virtual property ParameterInfo^ Parameter {
    ParameterInfo^ get () abstract;
}
abstract Parameter : ParameterInfo

属性值

类型： System.Reflection ParameterInfo
基础方法参数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaParameter 类
MetaParameter 成员
System.Data.Linq.Mapping 命名空间


MetaParameter ..::.ParameterType 属性

MetaParameter
.
.
::
.
ParameterType 属性
MetaParameter 类

获取参数的公共语言运行时 (CLR) 类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property ParameterType As Type
    Get
public abstract Type ParameterType { get; }
public:
virtual property Type^ ParameterType {
    Type^ get () abstract;
}
abstract ParameterType : Type

属性值

类型： System Type
类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaParameter 类
MetaParameter 成员
System.Data.Linq.Mapping 命名空间


MetaTable 类

MetaTable 类
成员

表示数据库表或视图的抽象。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MetaTable
public abstract class MetaTable
public ref class MetaTable abstract
[<AbstractClassAttribute>]
type MetaTable =  class end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.MetaTableMetaTable
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaTable 成员
System.Data.Linq.Mapping 命名空间


MetaTable 成员

MetaTable 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaTable 类

表示数据库表或视图的抽象。

MetaTable 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetaTable 类
System.Data.Linq.Mapping 命名空间


MetaTable 构造函数

MetaTable 构造函数
MetaTable 类

初始化 MetaTable 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MetaTable()
protected:
MetaTable()
new : unit -> MetaTable

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaTable 类
MetaTable 成员
System.Data.Linq.Mapping 命名空间


MetaTable 方法

MetaTable 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaTable 类

MetaTable 类型公开以下成员。

名称 说明
页首

参考

MetaTable 类
System.Data.Linq.Mapping 命名空间


MetaTable 属性

MetaTable 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaTable 类

MetaTable 类型公开以下成员。

名称 说明
页首

参考

MetaTable 类
System.Data.Linq.Mapping 命名空间


MetaTable ..::.DeleteMethod 属性

MetaTable
.
.
::
.
DeleteMethod 属性
MetaTable 类

获取用于执行删除操作的 DataContext 方法。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DeleteMethod As MethodInfo
    Get
public abstract MethodInfo DeleteMethod { get; }
public:
virtual property MethodInfo^ DeleteMethod {
    MethodInfo^ get () abstract;
}
abstract DeleteMethod : MethodInfo

属性值

类型： System.Reflection MethodInfo
MethodInfo，它对应于用于删除操作的方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaTable 类
MetaTable 成员
System.Data.Linq.Mapping 命名空间


MetaTable ..::.InsertMethod 属性

MetaTable
.
.
::
.
InsertMethod 属性
MetaTable 类

获取用于执行插入操作的 DataContext 方法。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property InsertMethod As MethodInfo
    Get
public abstract MethodInfo InsertMethod { get; }
public:
virtual property MethodInfo^ InsertMethod {
    MethodInfo^ get () abstract;
}
abstract InsertMethod : MethodInfo

属性值

类型： System.Reflection MethodInfo
MethodInfo，它对应于用于插入操作的方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaTable 类
MetaTable 成员
System.Data.Linq.Mapping 命名空间


MetaTable ..::.Model 属性

MetaTable
.
.
::
.
Model 属性
MetaTable 类

获取包含此 MetaTable 的 MetaModel。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Model As MetaModel
    Get
public abstract MetaModel Model { get; }
public:
virtual property MetaModel^ Model {
    MetaModel^ get () abstract;
}
abstract Model : MetaModel

属性值

类型： System.Data.Linq.Mapping MetaModel
包含此 MetaTable 的 MetaModel。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaTable 类
MetaTable 成员
System.Data.Linq.Mapping 命名空间


MetaTable ..::.RowType 属性

MetaTable
.
.
::
.
RowType 属性
MetaTable 类

获取描述表行类型的 MetaType。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property RowType As MetaType
    Get
public abstract MetaType RowType { get; }
public:
virtual property MetaType^ RowType {
    MetaType^ get () abstract;
}
abstract RowType : MetaType

属性值

类型： System.Data.Linq.Mapping MetaType
表中的行的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaTable 类
MetaTable 成员
System.Data.Linq.Mapping 命名空间


MetaTable ..::.TableName 属性

MetaTable
.
.
::
.
TableName 属性
MetaTable 类

获取由数据库定义的表的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property TableName As String
    Get
public abstract string TableName { get; }
public:
virtual property String^ TableName {
    String^ get () abstract;
}
abstract TableName : string

属性值

类型： System String
表示表名称的 string。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaTable 类
MetaTable 成员
System.Data.Linq.Mapping 命名空间


MetaTable ..::.UpdateMethod 属性

MetaTable
.
.
::
.
UpdateMethod 属性
MetaTable 类

获取用于执行更新操作的 DataContext 方法。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property UpdateMethod As MethodInfo
    Get
public abstract MethodInfo UpdateMethod { get; }
public:
virtual property MethodInfo^ UpdateMethod {
    MethodInfo^ get () abstract;
}
abstract UpdateMethod : MethodInfo

属性值

类型： System.Reflection MethodInfo
MethodInfo，它对应于用于更新操作的方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaTable 类
MetaTable 成员
System.Data.Linq.Mapping 命名空间


MetaType 类

MetaType 类
成员

表示域对象类型到数据库表列的映射。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class MetaType
public abstract class MetaType
public ref class MetaType abstract
[<AbstractClassAttribute>]
type MetaType =  class end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.MetaTypeMetaType
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType 成员

MetaType 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaType 类

表示域对象类型到数据库表列的映射。

MetaType 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

MetaType 类
System.Data.Linq.Mapping 命名空间


MetaType 构造函数

MetaType 构造函数
MetaType 类

初始化 MetaType 类的一个新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Sub New
protected MetaType()
protected:
MetaType()
new : unit -> MetaType

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType 方法

MetaType 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaType 类

MetaType 类型公开以下成员。

名称 说明
页首

参考

MetaType 类
System.Data.Linq.Mapping 命名空间


MetaType ..::.GetDataMember 方法

MetaType
.
.
::
.
GetDataMember 方法
MetaType 类

获取与指定成员关联的 MetaDataMember。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetDataMember ( _
    member As MemberInfo _
) As MetaDataMember
public abstract MetaDataMember GetDataMember(
    MemberInfo member
)
public:
virtual MetaDataMember^ GetDataMember(
    MemberInfo^ member
) abstract
abstract GetDataMember :
        member:MemberInfo -> MetaDataMember

参数

member
类型： System.Reflection MemberInfo
为其查找关联的 MetaDataMember 的成员。

返回值

类型： System.Data.Linq.Mapping MetaDataMember
如果存在与指定的成员关联的 MetaDataMember，则为该 MetaDataMember；否则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.GetInheritanceType 方法

MetaType
.
.
::
.
GetInheritanceType 方法
MetaType 类

获取继承子类型的 MetaType。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetInheritanceType ( _
    type As Type _
) As MetaType
public abstract MetaType GetInheritanceType(
    Type type
)
public:
virtual MetaType^ GetInheritanceType(
    Type^ type
) abstract
abstract GetInheritanceType :
        type:Type -> MetaType

参数

type
类型： System Type
子类型。

返回值

类型： System.Data.Linq.Mapping MetaType
继承子类型的 MetaType。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.GetTypeForInheritanceCode 方法

MetaType
.
.
::
.
GetTypeForInheritanceCode 方法
MetaType 类

获取与指定的继承代码关联的元类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetTypeForInheritanceCode ( _
    code As Object _
) As MetaType
public abstract MetaType GetTypeForInheritanceCode(
    Object code
)
public:
virtual MetaType^ GetTypeForInheritanceCode(
    Object^ code
) abstract
abstract GetTypeForInheritanceCode :
        code:Object -> MetaType

参数

code
类型： System Object
继承代码。

返回值

类型： System.Data.Linq.Mapping MetaType
与指定的继承代码关联的元类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType 属性

MetaType 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
MetaType 类

MetaType 类型公开以下成员。

名称 说明
页首

参考

MetaType 类
System.Data.Linq.Mapping 命名空间


MetaType ..::.Associations 属性

MetaType
.
.
::
.
Associations 属性
MetaType 类

获取所有关联的枚举。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Associations As ReadOnlyCollection(Of MetaAssociation)
    Get
public abstract ReadOnlyCollection<MetaAssociation> Associations { get; }
public:
virtual property ReadOnlyCollection<MetaAssociation^>^ Associations {
    ReadOnlyCollection<MetaAssociation^>^ get () abstract;
}
abstract Associations : ReadOnlyCollection<MetaAssociation>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaAssociation
>
)
>
)

关联的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.CanInstantiate 属性

MetaType
.
.
::
.
CanInstantiate 属性
MetaType 类

获取一个值，该值指示基础类型是否可实例化为查询结果。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property CanInstantiate As Boolean
    Get
public abstract bool CanInstantiate { get; }
public:
virtual property bool CanInstantiate {
    bool get () abstract;
}
abstract CanInstantiate : bool

属性值

类型： System Boolean
如果基础类型可以实例化为查询结果，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.DataMembers 属性

MetaType
.
.
::
.
DataMembers 属性
MetaType 类

获取所有数据成员（字段和属性）的枚举。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DataMembers As ReadOnlyCollection(Of MetaDataMember)
    Get
public abstract ReadOnlyCollection<MetaDataMember> DataMembers { get; }
public:
virtual property ReadOnlyCollection<MetaDataMember^>^ DataMembers {
    ReadOnlyCollection<MetaDataMember^>^ get () abstract;
}
abstract DataMembers : ReadOnlyCollection<MetaDataMember>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaDataMember
>
)
>
)

数据成员的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.DBGeneratedIdentityMember 属性

MetaType
.
.
::
.
DBGeneratedIdentityMember 属性
MetaType 类

获取表示自动生成的标识列的成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DBGeneratedIdentityMember As MetaDataMember
    Get
public abstract MetaDataMember DBGeneratedIdentityMember { get; }
public:
virtual property MetaDataMember^ DBGeneratedIdentityMember {
    MetaDataMember^ get () abstract;
}
abstract DBGeneratedIdentityMember : MetaDataMember

属性值

类型： System.Data.Linq.Mapping MetaDataMember
表示自动生成的标识列的成员；如果没有自动生成的标识列，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.DerivedTypes 属性

MetaType
.
.
::
.
DerivedTypes 属性
MetaType 类

获取继承层次结构中直接派生类型的枚举。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property DerivedTypes As ReadOnlyCollection(Of MetaType)
    Get
public abstract ReadOnlyCollection<MetaType> DerivedTypes { get; }
public:
virtual property ReadOnlyCollection<MetaType^>^ DerivedTypes {
    ReadOnlyCollection<MetaType^>^ get () abstract;
}
abstract DerivedTypes : ReadOnlyCollection<MetaType>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaType
>
)
>
)

元类型的枚举。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.Discriminator 属性

MetaType
.
.
::
.
Discriminator 属性
MetaType 类

获取表示继承鉴别器列的成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Discriminator As MetaDataMember
    Get
public abstract MetaDataMember Discriminator { get; }
public:
virtual property MetaDataMember^ Discriminator {
    MetaDataMember^ get () abstract;
}
abstract Discriminator : MetaDataMember

属性值

类型： System.Data.Linq.Mapping MetaDataMember
表示继承鉴别器列的成员；如果不存在继承鉴别器列，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.HasAnyLoadMethod 属性

MetaType
.
.
::
.
HasAnyLoadMethod 属性
MetaType 类

获取一个值，该值指示当前的 MetaType 或其任何基类型是否具有 OnLoaded 方法。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property HasAnyLoadMethod As Boolean
    Get
public abstract bool HasAnyLoadMethod { get; }
public:
virtual property bool HasAnyLoadMethod {
    bool get () abstract;
}
abstract HasAnyLoadMethod : bool

属性值

类型： System Boolean
如果该元类型或任何基元类型具有 OnLoaded 方法，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.HasAnyValidateMethod 属性

MetaType
.
.
::
.
HasAnyValidateMethod 属性
MetaType 类

获取一个值，该值指示 MetaType 或其任何基类型是否具有 OnValidate 方法。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property HasAnyValidateMethod As Boolean
    Get
public abstract bool HasAnyValidateMethod { get; }
public:
virtual property bool HasAnyValidateMethod {
    bool get () abstract;
}
abstract HasAnyValidateMethod : bool

属性值

类型： System Boolean
如果该元类型或任何基元类型具有 OnValidate 方法，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.HasInheritance 属性

MetaType
.
.
::
.
HasInheritance 属性
MetaType 类

获取一个值，该值指示该类型是否是已映射继承层次结构的一部分。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property HasInheritance As Boolean
    Get
public abstract bool HasInheritance { get; }
public:
virtual property bool HasInheritance {
    bool get () abstract;
}
abstract HasInheritance : bool

属性值

类型： System Boolean
如果该类型是已映射继承层次结构的一部分，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.HasInheritanceCode 属性

MetaType
.
.
::
.
HasInheritanceCode 属性
MetaType 类

获取一个值，该值指示此类型是否定义继承代码。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property HasInheritanceCode As Boolean
    Get
public abstract bool HasInheritanceCode { get; }
public:
virtual property bool HasInheritanceCode {
    bool get () abstract;
}
abstract HasInheritanceCode : bool

属性值

类型： System Boolean
如果此类型定义继承代码，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.HasUpdateCheck 属性

MetaType
.
.
::
.
HasUpdateCheck 属性
MetaType 类

获取一个值，该值指示该类型是否具有任何可能需要进行开放式并发冲突测试的持久性成员。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property HasUpdateCheck As Boolean
    Get
public abstract bool HasUpdateCheck { get; }
public:
virtual property bool HasUpdateCheck {
    bool get () abstract;
}
abstract HasUpdateCheck : bool

属性值

类型： System Boolean
如果该类型包含具有 Never 以外的 UpdateCheck 策略的任何持久性成员，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.IdentityMembers 属性

MetaType
.
.
::
.
IdentityMembers 属性
MetaType 类

获取定义类型的唯一标识的所有数据成员的枚举。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IdentityMembers As ReadOnlyCollection(Of MetaDataMember)
    Get
public abstract ReadOnlyCollection<MetaDataMember> IdentityMembers { get; }
public:
virtual property ReadOnlyCollection<MetaDataMember^>^ IdentityMembers {
    ReadOnlyCollection<MetaDataMember^>^ get () abstract;
}
abstract IdentityMembers : ReadOnlyCollection<MetaDataMember>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaDataMember
>
)
>
)

成员的枚举，这些成员定义类型的唯一标识。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.InheritanceBase 属性

MetaType
.
.
::
.
InheritanceBase 属性
MetaType 类

获取继承层次结构中的基元类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property InheritanceBase As MetaType
    Get
public abstract MetaType InheritanceBase { get; }
public:
virtual property MetaType^ InheritanceBase {
    MetaType^ get () abstract;
}
abstract InheritanceBase : MetaType

属性值

类型： System.Data.Linq.Mapping MetaType
当前继承层次结构的基元类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.InheritanceCode 属性

MetaType
.
.
::
.
InheritanceCode 属性
MetaType 类

获取一个值，该值指示此类型是否定义继承代码。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property InheritanceCode As Object
    Get
public abstract Object InheritanceCode { get; }
public:
virtual property Object^ InheritanceCode {
    Object^ get () abstract;
}
abstract InheritanceCode : Object

属性值

类型： System Object
如果此类型定义继承代码，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.InheritanceDefault 属性

MetaType
.
.
::
.
InheritanceDefault 属性
MetaType 类

获取一个值，该值指示是否将此类型用作继承层次结构的默认值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property InheritanceDefault As MetaType
    Get
public abstract MetaType InheritanceDefault { get; }
public:
virtual property MetaType^ InheritanceDefault {
    MetaType^ get () abstract;
}
abstract InheritanceDefault : MetaType

属性值

类型： System.Data.Linq.Mapping MetaType
继承映射中默认类型的元数据。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.InheritanceRoot 属性

MetaType
.
.
::
.
InheritanceRoot 属性
MetaType 类

获取继承层次结构的根类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property InheritanceRoot As MetaType
    Get
public abstract MetaType InheritanceRoot { get; }
public:
virtual property MetaType^ InheritanceRoot {
    MetaType^ get () abstract;
}
abstract InheritanceRoot : MetaType

属性值

类型： System.Data.Linq.Mapping MetaType
根类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.InheritanceTypes 属性

MetaType
.
.
::
.
InheritanceTypes 属性
MetaType 类

获取由继承层次结构定义的所有类型的集合。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property InheritanceTypes As ReadOnlyCollection(Of MetaType)
    Get
public abstract ReadOnlyCollection<MetaType> InheritanceTypes { get; }
public:
virtual property ReadOnlyCollection<MetaType^>^ InheritanceTypes {
    ReadOnlyCollection<MetaType^>^ get () abstract;
}
abstract InheritanceTypes : ReadOnlyCollection<MetaType>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaType
>
)
>
)

当前继承层次结构中元类型的集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.IsEntity 属性

MetaType
.
.
::
.
IsEntity 属性
MetaType 类

获取一个值，该值指示 MetaType 是否为实体类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsEntity As Boolean
    Get
public abstract bool IsEntity { get; }
public:
virtual property bool IsEntity {
    bool get () abstract;
}
abstract IsEntity : bool

属性值

类型： System Boolean
如果 MetaType 是实体类型，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.IsInheritanceDefault 属性

MetaType
.
.
::
.
IsInheritanceDefault 属性
MetaType 类

获取一个值，该值指示是否将此类型用作继承层次结构的默认值。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property IsInheritanceDefault As Boolean
    Get
public abstract bool IsInheritanceDefault { get; }
public:
virtual property bool IsInheritanceDefault {
    bool get () abstract;
}
abstract IsInheritanceDefault : bool

属性值

类型： System Boolean
如果将此类型用作继承层次结构的默认值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.Model 属性

MetaType
.
.
::
.
Model 属性
MetaType 类

获取包含此 MetaType 的 MetaModel。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Model As MetaModel
    Get
public abstract MetaModel Model { get; }
public:
virtual property MetaModel^ Model {
    MetaModel^ get () abstract;
}
abstract Model : MetaModel

属性值

类型： System.Data.Linq.Mapping MetaModel
包含元模型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.Name 属性

MetaType
.
.
::
.
Name 属性
MetaType 类

获取 MetaType 的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Name As String
    Get
public abstract string Name { get; }
public:
virtual property String^ Name {
    String^ get () abstract;
}
abstract Name : string

属性值

类型： System String
当前元类型的名称。

此名称与公共语言运行时 (CLR) 类型的名称相同。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.OnLoadedMethod 属性

MetaType
.
.
::
.
OnLoadedMethod 属性
MetaType 类

获取有关此元类型包含的 OnLoaded 方法的信息。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property OnLoadedMethod As MethodInfo
    Get
public abstract MethodInfo OnLoadedMethod { get; }
public:
virtual property MethodInfo^ OnLoadedMethod {
    MethodInfo^ get () abstract;
}
abstract OnLoadedMethod : MethodInfo

属性值

类型： System.Reflection MethodInfo
有关此元类型的 OnLoaded 方法的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.OnValidateMethod 属性

MetaType
.
.
::
.
OnValidateMethod 属性
MetaType 类

获取有关此元类型包含的 OnValidate 方法的信息。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property OnValidateMethod As MethodInfo
    Get
public abstract MethodInfo OnValidateMethod { get; }
public:
virtual property MethodInfo^ OnValidateMethod {
    MethodInfo^ get () abstract;
}
abstract OnValidateMethod : MethodInfo

属性值

类型： System.Reflection MethodInfo
有关此元类型的 OnValidate 方法的说明。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.PersistentDataMembers 属性

MetaType
.
.
::
.
PersistentDataMembers 属性
MetaType 类

获取所有持久性数据成员的集合。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property PersistentDataMembers As ReadOnlyCollection(Of MetaDataMember)
    Get
public abstract ReadOnlyCollection<MetaDataMember> PersistentDataMembers { get; }
public:
virtual property ReadOnlyCollection<MetaDataMember^>^ PersistentDataMembers {
    ReadOnlyCollection<MetaDataMember^>^ get () abstract;
}
abstract PersistentDataMembers : ReadOnlyCollection<MetaDataMember>

属性值

类型： System.Collections.ObjectModel ReadOnlyCollection
<
(Of
<
(
MetaDataMember
>
)
>
)

当前类型中所有元数据成员的集合。

持久性数据成员为映射到数据库列的那些字段和属性。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.Table 属性

MetaType
.
.
::
.
Table 属性
MetaType 类

获取将此 MetaType 用于行定义的 MetaTable。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Table As MetaTable
    Get
public abstract MetaTable Table { get; }
public:
virtual property MetaTable^ Table {
    MetaTable^ get () abstract;
}
abstract Table : MetaTable

属性值

类型： System.Data.Linq.Mapping MetaTable
一个使用当前元类型定义行的元表。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.Type 属性

MetaType
.
.
::
.
Type 属性
MetaType 类

获取基础公共语言运行时 (CLR) 类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property Type As Type
    Get
public abstract Type Type { get; }
public:
virtual property Type^ Type {
    Type^ get () abstract;
}
abstract Type : Type

属性值

类型： System Type
关联的 CLR 类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


MetaType ..::.VersionMember 属性

MetaType
.
.
::
.
VersionMember 属性
MetaType 类

获取此 MetaType 的行版本或时间戳列。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property VersionMember As MetaDataMember
    Get
public abstract MetaDataMember VersionMember { get; }
public:
virtual property MetaDataMember^ VersionMember {
    MetaDataMember^ get () abstract;
}
abstract VersionMember : MetaDataMember

属性值

类型： System.Data.Linq.Mapping MetaDataMember
表示此元类型的行版本或时间戳列的元数据成员；如果不存在这样的元数据成员，则为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

MetaType 类
MetaType 成员
System.Data.Linq.Mapping 命名空间


ParameterAttribute 类

ParameterAttribute 类
成员

为存储过程方法参数启用映射详细信息规范。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<AttributeUsageAttribute(AttributeTargets.Parameter Or AttributeTargets.ReturnValue, AllowMultiple := False)> _
Public NotInheritable Class ParameterAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple = false)]
public sealed class ParameterAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Parameter|AttributeTargets::ReturnValue, AllowMultiple = false)]
public ref class ParameterAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple = false)>]
type ParameterAttribute =
    class
        inherit Attribute
    end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.ParameterAttributeParameterAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ParameterAttribute 成员
System.Data.Linq.Mapping 命名空间


ParameterAttribute 成员

ParameterAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ParameterAttribute 类

为存储过程方法参数启用映射详细信息规范。

ParameterAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ParameterAttribute 类
System.Data.Linq.Mapping 命名空间


ParameterAttribute 构造函数

ParameterAttribute 构造函数
ParameterAttribute 类

初始化 ParameterAttribute 类的一个新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public ParameterAttribute()
public:
ParameterAttribute()
new : unit -> ParameterAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ParameterAttribute 类
ParameterAttribute 成员
System.Data.Linq.Mapping 命名空间


ParameterAttribute 方法

ParameterAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ParameterAttribute 类

ParameterAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ParameterAttribute 类
System.Data.Linq.Mapping 命名空间


ParameterAttribute 属性

ParameterAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ParameterAttribute 类

ParameterAttribute 类型公开以下成员。

名称 说明
页首

参考

ParameterAttribute 类
System.Data.Linq.Mapping 命名空间


ParameterAttribute ..::.DbType 属性

ParameterAttribute
.
.
::
.
DbType 属性
ParameterAttribute 类

获取或设置提供程序特定的数据库的参数类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property DbType As String
    Get
    Set
public string DbType { get; set; }
public:
property String^ DbType {
    String^ get ();
    void set (String^ value);
}
member DbType : string with get, set

属性值

类型： System String
字符串形式的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ParameterAttribute 类
ParameterAttribute 成员
System.Data.Linq.Mapping 命名空间


ParameterAttribute ..::.Name 属性

ParameterAttribute
.
.
::
.
Name 属性
ParameterAttribute 类

获取或设置参数的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Name As String
    Get
    Set
public string Name { get; set; }
public:
property String^ Name {
    String^ get ();
    void set (String^ value);
}
member Name : string with get, set

属性值

类型： System String
字符串形式的名称。

如果您未指定 Name，则假定该名称与数据库中参数的名称相同。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ParameterAttribute 类
ParameterAttribute 成员
System.Data.Linq.Mapping 命名空间


ProviderAttribute 类

ProviderAttribute 类
成员

指定要使用的数据库提供程序。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple := False)> _
Public NotInheritable Class ProviderAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false)]
public sealed class ProviderAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Class, AllowMultiple = false)]
public ref class ProviderAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false)>]
type ProviderAttribute =
    class
        inherit Attribute
    end

LINQ to SQL 支持 Sql2000Provider、Sql2005Provider 和 Sql2008Provider 提供程序。它们为 SqlProvider 的子类。 LINQ to SQL 支持 Sql2000Provider、Sql2005Provider 和 Sql2008Provider 提供程序。它们为 SqlProvider 的子类。

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.ProviderAttributeProviderAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ProviderAttribute 成员
System.Data.Linq.Mapping 命名空间


ProviderAttribute 成员

ProviderAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProviderAttribute 类

指定要使用的数据库提供程序。

ProviderAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ProviderAttribute 类
System.Data.Linq.Mapping 命名空间


ProviderAttribute 构造函数

ProviderAttribute 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProviderAttribute 类

初始化 ProviderAttribute 类的新实例。

名称 说明
页首

参考

ProviderAttribute 类
ProviderAttribute 成员
System.Data.Linq.Mapping 命名空间


ProviderAttribute 构造函数

ProviderAttribute 构造函数
ProviderAttribute 类

初始化 ProviderAttribute 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public ProviderAttribute()
public:
ProviderAttribute()
new : unit -> ProviderAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ProviderAttribute 类
ProviderAttribute 成员
ProviderAttribute 重载
System.Data.Linq.Mapping 命名空间


ProviderAttribute 构造函数 (Type)

ProviderAttribute 构造函数 (Type)
ProviderAttribute 类

初始化 ProviderAttribute 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    type As Type _
)
public ProviderAttribute(
    Type type
)
public:
ProviderAttribute(
    Type^ type
)
new :
        type:Type -> ProviderAttribute

参数

type
类型： System Type
用于构造 ProviderAttribute 的提供程序类型。

LINQ to SQL 支持 Sql2000Provider、Sql2005Provider 和 Sql2008Provider 提供程序。它们为 SqlProvider 的子类。 LINQ to SQL 支持 Sql2000Provider、Sql2005Provider 和 Sql2008Provider 提供程序。它们为 SqlProvider 的子类。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ProviderAttribute 类
ProviderAttribute 成员
ProviderAttribute 重载
System.Data.Linq.Mapping 命名空间


ProviderAttribute 方法

ProviderAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProviderAttribute 类

ProviderAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ProviderAttribute 类
System.Data.Linq.Mapping 命名空间


ProviderAttribute 属性

ProviderAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProviderAttribute 类

ProviderAttribute 类型公开以下成员。

名称 说明
页首

参考

ProviderAttribute 类
System.Data.Linq.Mapping 命名空间


ProviderAttribute ..::.Type 属性

ProviderAttribute
.
.
::
.
Type 属性
ProviderAttribute 类

获取用于构造 ProviderAttribute 的提供程序的类型。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Type As Type
    Get
public Type Type { get; }
public:
property Type^ Type {
    Type^ get ();
}
member Type : Type

属性值

类型： System Type
提供程序的类型。

LINQ to SQL 支持 Sql2000Provider、Sql2005Provider 和 Sql2008Provider 提供程序。它们为 SqlProvider 的子类。 LINQ to SQL 支持 Sql2000Provider、Sql2005Provider 和 Sql2008Provider 提供程序。它们为 SqlProvider 的子类。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ProviderAttribute 类
ProviderAttribute 成员
System.Data.Linq.Mapping 命名空间


ResultTypeAttribute 类

ResultTypeAttribute 类
成员

用于为具有不同结果类型的函数指定每种类型的结果。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := True)> _
Public NotInheritable Class ResultTypeAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = true)]
public sealed class ResultTypeAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = true)]
public ref class ResultTypeAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = true)>]
type ResultTypeAttribute =
    class
        inherit Attribute
    end

此特性应用于返回不同结果类型的函数。它用于声明从函数返回的可能的结果类型。对于继承类型，只需指定继承层次结构的根类型。 此特性应用于返回不同结果类型的函数。它用于声明从函数返回的可能的结果类型。对于继承类型，只需指定继承层次结构的根类型。 此特性应用于返回不同结果类型的函数。它用于声明从函数返回的可能的结果类型。对于继承类型，只需指定继承层次结构的根类型。

请参见 ResultTypeAttribute..::.Type。

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.ResultTypeAttributeResultTypeAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ResultTypeAttribute 成员
System.Data.Linq.Mapping 命名空间


ResultTypeAttribute 成员

ResultTypeAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ResultTypeAttribute 类

用于为具有不同结果类型的函数指定每种类型的结果。

ResultTypeAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ResultTypeAttribute 类
System.Data.Linq.Mapping 命名空间


ResultTypeAttribute 构造函数

ResultTypeAttribute 构造函数
ResultTypeAttribute 类

初始化 ResultTypeAttribute 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New ( _
    type As Type _
)
public ResultTypeAttribute(
    Type type
)
public:
ResultTypeAttribute(
    Type^ type
)
new :
        type:Type -> ResultTypeAttribute

参数

type
类型： System Type
具有不同结果类型的函数所返回的结果的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ResultTypeAttribute 类
ResultTypeAttribute 成员
System.Data.Linq.Mapping 命名空间


ResultTypeAttribute 方法

ResultTypeAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ResultTypeAttribute 类

ResultTypeAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ResultTypeAttribute 类
System.Data.Linq.Mapping 命名空间


ResultTypeAttribute 属性

ResultTypeAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ResultTypeAttribute 类

ResultTypeAttribute 类型公开以下成员。

名称 说明
页首

参考

ResultTypeAttribute 类
System.Data.Linq.Mapping 命名空间


ResultTypeAttribute ..::.Type 属性

ResultTypeAttribute
.
.
::
.
Type 属性
ResultTypeAttribute 类

为具有不同结果类型的函数获取有效的或预期的类型映射。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public ReadOnly Property Type As Type
    Get
public Type Type { get; }
public:
property Type^ Type {
    Type^ get ();
}
member Type : Type

属性值

类型： System Type
结果的类型 (Type)。

此特性应用于返回不同结果类型的函数。它用于声明从函数返回的可能的结果类型。对于继承类型，只需指定继承层次结构的根类型。 此特性应用于返回不同结果类型的函数。它用于声明从函数返回的可能的结果类型。对于继承类型，只需指定继承层次结构的根类型。 此特性应用于返回不同结果类型的函数。它用于声明从函数返回的可能的结果类型。对于继承类型，只需指定继承层次结构的根类型。

<FunctionAttribute(Name:="dbo.VariableResultShapes"), _
ResultType(GetType(VariableResultShapesResult1)), _
ResultType(GetType(VariableResultShapesResult2))> _
Public Function VariableResultShapes(<Parameter(DbType:="Int")> ByVal shape As System.Nullable(Of Integer)) As IMultipleResults
    Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod, MethodInfo), shape)
    Return CType(result.ReturnValue, IMultipleResults)
End Function

    [Function(Name="dbo.VariableResultShapes")]
    [ResultType(typeof(VariableResultShapesResult1))]
    [ResultType(typeof(VariableResultShapesResult2))]
    public IMultipleResults VariableResultShapes([Parameter(DbType="Int")] System.Nullable<int> shape)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), shape);
        return ((IMultipleResults)(result.ReturnValue));
    }

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ResultTypeAttribute 类
ResultTypeAttribute 成员
System.Data.Linq.Mapping 命名空间


TableAttribute 类

TableAttribute 类
成员

将某个类指定为与数据库表相关联的实体类。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple := False, Inherited := False)> _
Public NotInheritable Class TableAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public sealed class TableAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Class, AllowMultiple = false, Inherited = false)]
public ref class TableAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false, Inherited = false)>]
type TableAttribute =
    class
        inherit Attribute
    end

使用该特性可将某个类指定为与数据库表或视图相关联的实体类。LINQ to SQL 将具有 TableAttribute 特性的类视为持久性类。 使用该特性可将某个类指定为与数据库表或视图相关联的实体类。LINQ to SQL 将具有 TableAttribute 特性的类视为持久性类。

LINQ to SQL 仅支持单表映射。即，实体类必须只映射到一个数据库表，且无法同时将数据库表映射到多个类。 LINQ to SQL 仅支持单表映射。即，实体类必须只映射到一个数据库表，且无法同时将数据库表映射到多个类。

您可以使用 TableAttribute 特性的 Name 属性来指定表名称，并可以选择使用架构名称来限定表名称。如果您未使用 Name 属性指定名称，则假定表名称与类名相同。 您可以使用 TableAttribute 特性的 Name 属性来指定表名称，并可以选择使用架构名称来限定表名称。如果您未使用 Name 属性指定名称，则假定表名称与类名相同。

架构限定的名称

您可以选择使用架构名称来限定表名称。默认情况下，将 Name 字符串中第一个句点左侧的标记视为架构名称。该名称的其余部分视为表名称。提供程序根据需要对表名称使用括号。例如，用于 SQL Server 的 LINQ to SQL 提供程序可确保至少在需要时使用括号。 您可以选择使用架构名称来限定表名称。默认情况下，将 Name 字符串中第一个句点左侧的标记视为架构名称。该名称的其余部分视为表名称。提供程序根据需要对表名称使用括号。例如，用于 SQL Server 的 LINQ to SQL 提供程序可确保至少在需要时使用括号。 您可以选择使用架构名称来限定表名称。默认情况下，将 Name 字符串中第一个句点左侧的标记视为架构名称。该名称的其余部分视为表名称。提供程序根据需要对表名称使用括号。例如，用于 SQL Server 的 LINQ to SQL 提供程序可确保至少在需要时使用括号。 您可以选择使用架构名称来限定表名称。默认情况下，将 Name 字符串中第一个句点左侧的标记视为架构名称。该名称的其余部分视为表名称。提供程序根据需要对表名称使用括号。例如，用于 SQL Server 的 LINQ to SQL 提供程序可确保至少在需要时使用括号。 您可以选择使用架构名称来限定表名称。默认情况下，将 Name 字符串中第一个句点左侧的标记视为架构名称。该名称的其余部分视为表名称。提供程序根据需要对表名称使用括号。例如，用于 SQL Server 的 LINQ to SQL 提供程序可确保至少在需要时使用括号。

说明 说明

在某些情况下，由于 SQL Server 提供程序无法自动使用括号，因此您必须显式对特性使用括号。下表演示了一些示例。 在某些情况下，由于 SQL Server 提供程序无法自动使用括号，因此您必须显式对特性使用括号。下表演示了一些示例。

情况 | 示例：标识符名称 | 示例：应在特性中使用的字符串 | 否则…
架构名称包含一个句点 | 架构：“A.B” 表：“C” | “[A.B].C” | 假定第一个句点将架构名称与表名称分隔开。
架构/表名称以 @ 开头 | “@SomeName” | “[@SomeName]” | 假定是参数名。
架构以 [ 开头，并以 ] 结尾 | “[Schema.Table]” | “[[Schema].[Table]]]” | 未加括号的标识符类似于加括号的标识符。
表以 [ 开头，并以 ] 结尾 | “[Table]” | “[[Table]]]” | 未加括号的标识符类似于加括号的标识符。
<Table(Name:="Customers")> _
Public Class Customer
    ' ...
End Class

[Table(Name = "Customers")]
public class Customer
{
    // ...
}

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.TableAttributeTableAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

TableAttribute 成员
System.Data.Linq.Mapping 命名空间


TableAttribute 成员

TableAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TableAttribute 类

将某个类指定为与数据库表相关联的实体类。

TableAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

TableAttribute 类
System.Data.Linq.Mapping 命名空间


TableAttribute 构造函数

TableAttribute 构造函数
TableAttribute 类

初始化 TableAttribute 类的新实例。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public TableAttribute()
public:
TableAttribute()
new : unit -> TableAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

TableAttribute 类
TableAttribute 成员
System.Data.Linq.Mapping 命名空间


TableAttribute 方法

TableAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TableAttribute 类

TableAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

TableAttribute 类
System.Data.Linq.Mapping 命名空间


TableAttribute 属性

TableAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
TableAttribute 类

TableAttribute 类型公开以下成员。

名称 说明
页首

参考

TableAttribute 类
System.Data.Linq.Mapping 命名空间


TableAttribute ..::.Name 属性

TableAttribute
.
.
::
.
Name 属性
TableAttribute 类

获取或设置表或视图的名称。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Property Name As String
    Get
    Set
public string Name { get; set; }
public:
property String^ Name {
    String^ get ();
    void set (String^ value);
}
member Name : string with get, set

属性值

类型： System String
默认情况下，此值与类名称相同。

如果您未使用 Name 指定名称，则假定表名称与类名相同。

说明 说明

您可以选择使用架构名称来限定表名称（例如，Schema3.Table5）。默认情况下，将 Name 字符串中第一个句点左侧的标记视为架构名称，其余部分视为表名称。 您可以选择使用架构名称来限定表名称（例如，Schema3.Table5）。默认情况下，将 Name 字符串中第一个句点左侧的标记视为架构名称，其余部分视为表名称。

在下面的示例中，默认表名称 Customer 更改为 Customers。

<Table(Name:="Customers")> _
Public Class Customer
    ' ...
End Class

[Table(Name = "Customers")]
public class Customer
{
    // ...
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

          .NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见
.NET Framework 系统要求。

.NET Framework
受以下版本支持：4、3.5
.NET Framework Client Profile
受以下版本支持：4

参考

TableAttribute 类

TableAttribute 成员

System.Data.Linq.Mapping 命名空间


UpdateCheck 枚举

UpdateCheck 枚举

指定何时测试对象是否有并发冲突。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Enumeration UpdateCheck
public enum UpdateCheck
public enum class UpdateCheck
type UpdateCheck
成员名称 | 说明
Always | 始终进行检查。此为默认值，除非对某个成员而言 IsVersion 为 true。 始终进行检查。此为默认值，除非对某个成员而言 IsVersion 为 true。
Never | 从不检查。
WhenChanged | 仅在已更改对象后检查。

表后的代码示例指定绝不能测试 HomePage 对象。

<Column(Storage:="_HomePage", DbType:="NText", UpdateCheck:=UpdateCheck.Never)>  _
Public Property HomePage() As String
    Get
        Return Me._HomePage
    End Get
    Set(ByVal value As String)
        If ((Me._HomePage <> value)  _
            = false) Then
        Me.OnHomePageChanging(value)
            Me.SendPropertyChanging
            Me._HomePage = value
            Me.SendPropertyChanged("HomePage")
            Me.OnHomePageChanged
        End If
    End Set
End Property

[Column(Storage="_HomePage", DbType="NText", UpdateCheck=UpdateCheck.Never)]
public string HomePage
{
    get
    {
        return this._HomePage;
    }
    set
    {
        if ((this._HomePage != value))
    {
         this.OnHomePageChanging(value);
        this.SendPropertyChanging();
            this._HomePage = value;
        this.SendPropertyChanged("HomePage");
            this.OnHomePageChanged();
    }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Linq.Mapping 命名空间


XmlMappingSource 类

XmlMappingSource 类
成员

表示使用外部 XML 映射文件创建模型的映射源。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class XmlMappingSource _
    Inherits MappingSource
public sealed class XmlMappingSource : MappingSource
public ref class XmlMappingSource sealed : public MappingSource
[<SealedAttribute>]
type XmlMappingSource =
    class
        inherit MappingSource
    end

System.Data.Linq.Mapping System.Data.Linq.Mapping..::.XmlMappingSourceXmlMappingSource
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

XmlMappingSource 成员
System.Data.Linq.Mapping 命名空间


XmlMappingSource 成员

XmlMappingSource 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
XmlMappingSource 类

表示使用外部 XML 映射文件创建模型的映射源。

XmlMappingSource 类型公开以下成员。

名称 说明
页首

参考

XmlMappingSource 类
System.Data.Linq.Mapping 命名空间


XmlMappingSource 方法

XmlMappingSource 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
XmlMappingSource 类

XmlMappingSource 类型公开以下成员。

名称 说明
页首

参考

XmlMappingSource 类
System.Data.Linq.Mapping 命名空间


XmlMappingSource ..::.FromReader 方法

XmlMappingSource
.
.
::
.
FromReader 方法
XmlMappingSource 类

从 XML 读取器创建映射源。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function FromReader ( _
    reader As XmlReader _
) As XmlMappingSource
public static XmlMappingSource FromReader(
    XmlReader reader
)
public:
static XmlMappingSource^ FromReader(
    XmlReader^ reader
)
static member FromReader :
        reader:XmlReader -> XmlMappingSource

参数

reader
类型： System.Xml XmlReader
XML 读取器。

返回值

类型： System.Data.Linq.Mapping XmlMappingSource
类型为 XmlMappingSource 的新 XML 映射源。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

XmlMappingSource 类
XmlMappingSource 成员
System.Data.Linq.Mapping 命名空间


XmlMappingSource ..::.FromStream 方法

XmlMappingSource
.
.
::
.
FromStream 方法
XmlMappingSource 类

从流中的 XML 创建映射源。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function FromStream ( _
    stream As Stream _
) As XmlMappingSource
public static XmlMappingSource FromStream(
    Stream stream
)
public:
static XmlMappingSource^ FromStream(
    Stream^ stream
)
static member FromStream :
        stream:Stream -> XmlMappingSource

参数

stream
类型： System.IO Stream
XML 流。

返回值

类型： System.Data.Linq.Mapping XmlMappingSource
类型为 XmlMappingSource 的新 XML 映射源。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

XmlMappingSource 类
XmlMappingSource 成员
System.Data.Linq.Mapping 命名空间


XmlMappingSource ..::.FromUrl 方法

XmlMappingSource
.
.
::
.
FromUrl 方法
XmlMappingSource 类

从加载自 URL 的 XML 创建映射源。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function FromUrl ( _
    url As String _
) As XmlMappingSource
public static XmlMappingSource FromUrl(
    string url
)
public:
static XmlMappingSource^ FromUrl(
    String^ url
)
static member FromUrl :
        url:string -> XmlMappingSource

参数

url
类型： System String
指向 XML 的 URL。

返回值

类型： System.Data.Linq.Mapping XmlMappingSource
类型为 XmlMappingSource 的新 XML 映射源。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

XmlMappingSource 类
XmlMappingSource 成员
System.Data.Linq.Mapping 命名空间


XmlMappingSource ..::.FromXml 方法

XmlMappingSource
.
.
::
.
FromXml 方法
XmlMappingSource 类

从 XML 字符串创建映射源。

命名空间： System.Data.Linq.Mapping
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function FromXml ( _
    xml As String _
) As XmlMappingSource
public static XmlMappingSource FromXml(
    string xml
)
public:
static XmlMappingSource^ FromXml(
    String^ xml
)
static member FromXml :
        xml:string -> XmlMappingSource

参数

xml
类型： System String
包含 XML 的字符串。

返回值

类型： System.Data.Linq.Mapping XmlMappingSource
类型为 XmlMappingSource 的新 XML 映射源。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

XmlMappingSource 类
XmlMappingSource 成员
System.Data.Linq.Mapping 命名空间


System.Data.Linq.SqlClient 命名空间

System.Data.Linq.SqlClient 命名空间

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

The System.Data.Linq.SqlClient namespace contains provider classes for communicating with SQL Server and classes that contain query helper methods.

 | 类 | 说明
公共类 | Sql2000Provider | 基础结构。 包含连接到 SQL Server 2000 并与之通信的功能。
公共类 | Sql2005Provider | 基础结构。 包含连接到 SQL Server 2005 并与之通信的功能。
公共类 | Sql2008Provider | 基础结构。 包含连接到 SQL Server 2008 并与之通信的功能。
公共类 | SqlHelpers | 基础结构。 为与字符串模式匹配的操作提供帮助器方法。
公共类 | SqlMethods | 提供与 SQL Server 函数相对应的方法。SqlMethods 类中的方法仅在 LINQ to SQL 查询中受支持。 提供与 SQL Server 函数相对应的方法。SqlMethods 类中的方法仅在 LINQ to SQL 查询中受支持。
公共类 | SqlProvider | 基础结构。 包含连接到 SQL Server 并与之通信的功能。


Sql2000Provider 类

Sql2000Provider 类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

包含连接到 SQL Server 2000 并与之通信的功能。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class Sql2000Provider _
    Inherits SqlProvider
public sealed class Sql2000Provider : SqlProvider
public ref class Sql2000Provider sealed : public SqlProvider
[<SealedAttribute>]
type Sql2000Provider =
    class
        inherit SqlProvider
    end

System.Data.Linq.SqlClient System.Data.Linq.SqlClient..::.Sql2000ProviderSql2000Provider
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Sql2000Provider 成员
System.Data.Linq.SqlClient 命名空间


Sql2000Provider 成员

Sql2000Provider 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Sql2000Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

包含连接到 SQL Server 2000 并与之通信的功能。

Sql2000Provider 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Sql2000Provider 类
System.Data.Linq.SqlClient 命名空间


Sql2000Provider 构造函数

Sql2000Provider 构造函数
Sql2000Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

初始化 Sql2000Provider 类的一个新实例。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public Sql2000Provider()
public:
Sql2000Provider()
new : unit -> Sql2000Provider

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Sql2000Provider 类
Sql2000Provider 成员
System.Data.Linq.SqlClient 命名空间


Sql2000Provider 方法

Sql2000Provider 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Sql2000Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Sql2000Provider 类型公开以下成员。

名称 说明
页首

参考

Sql2000Provider 类
System.Data.Linq.SqlClient 命名空间


Sql2000Provider ..::.Dispose 方法

Sql2000Provider
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Sql2000Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

释放由 SqlProvider 打开的资源。

名称 说明
页首

参考

Sql2000Provider 类
Sql2000Provider 成员
System.Data.Linq.SqlClient 命名空间


Sql2005Provider 类

Sql2005Provider 类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

包含连接到 SQL Server 2005 并与之通信的功能。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class Sql2005Provider _
    Inherits SqlProvider
public sealed class Sql2005Provider : SqlProvider
public ref class Sql2005Provider sealed : public SqlProvider
[<SealedAttribute>]
type Sql2005Provider =
    class
        inherit SqlProvider
    end

System.Data.Linq.SqlClient System.Data.Linq.SqlClient..::.Sql2005ProviderSql2005Provider
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Sql2005Provider 成员
System.Data.Linq.SqlClient 命名空间


Sql2005Provider 成员

Sql2005Provider 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Sql2005Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

包含连接到 SQL Server 2005 并与之通信的功能。

Sql2005Provider 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Sql2005Provider 类
System.Data.Linq.SqlClient 命名空间


Sql2005Provider 构造函数

Sql2005Provider 构造函数
Sql2005Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

初始化 Sql2005Provider 类的一个新实例。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public Sql2005Provider()
public:
Sql2005Provider()
new : unit -> Sql2005Provider

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

Sql2005Provider 类
Sql2005Provider 成员
System.Data.Linq.SqlClient 命名空间


Sql2005Provider 方法

Sql2005Provider 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Sql2005Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Sql2005Provider 类型公开以下成员。

名称 说明
页首

参考

Sql2005Provider 类
System.Data.Linq.SqlClient 命名空间


Sql2005Provider ..::.Dispose 方法

Sql2005Provider
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Sql2005Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

释放由 SqlProvider 打开的资源。

名称 说明
页首

参考

Sql2005Provider 类
Sql2005Provider 成员
System.Data.Linq.SqlClient 命名空间


Sql2008Provider 类

Sql2008Provider 类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

包含连接到 SQL Server 2008 并与之通信的功能。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class Sql2008Provider _
    Inherits SqlProvider
public sealed class Sql2008Provider : SqlProvider
public ref class Sql2008Provider sealed : public SqlProvider
[<SealedAttribute>]
type Sql2008Provider =
    class
        inherit SqlProvider
    end

System.Data.Linq.SqlClient System.Data.Linq.SqlClient..::.Sql2008ProviderSql2008Provider
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

Sql2008Provider 成员
System.Data.Linq.SqlClient 命名空间


Sql2008Provider 成员

Sql2008Provider 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Sql2008Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

包含连接到 SQL Server 2008 并与之通信的功能。

Sql2008Provider 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

Sql2008Provider 类
System.Data.Linq.SqlClient 命名空间


Sql2008Provider 构造函数

Sql2008Provider 构造函数
Sql2008Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

初始化 Sql2008Provider 类的一个新实例。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public Sql2008Provider()
public:
Sql2008Provider()
new : unit -> Sql2008Provider

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

Sql2008Provider 类
Sql2008Provider 成员
System.Data.Linq.SqlClient 命名空间


Sql2008Provider 方法

Sql2008Provider 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Sql2008Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Sql2008Provider 类型公开以下成员。

名称 说明
页首

参考

Sql2008Provider 类
System.Data.Linq.SqlClient 命名空间


Sql2008Provider ..::.Dispose 方法

Sql2008Provider
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
Sql2008Provider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

释放由 SqlProvider 打开的资源。

名称 说明
页首

参考

Sql2008Provider 类
Sql2008Provider 成员
System.Data.Linq.SqlClient 命名空间


SqlHelpers 类

SqlHelpers 类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

为与字符串模式匹配的操作提供帮助器方法。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class SqlHelpers
public static class SqlHelpers
public ref class SqlHelpers abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type SqlHelpers =  class end

System.Data.Linq.SqlClient System.Data.Linq.SqlClient..::.SqlHelpersSqlHelpers
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlHelpers 成员
System.Data.Linq.SqlClient 命名空间


SqlHelpers 成员

SqlHelpers 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlHelpers 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

为与字符串模式匹配的操作提供帮助器方法。

SqlHelpers 类型公开以下成员。

名称 说明
页首

参考

SqlHelpers 类
System.Data.Linq.SqlClient 命名空间


SqlHelpers 方法

SqlHelpers 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlHelpers 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

SqlHelpers 类型公开以下成员。

名称 说明
页首

参考

SqlHelpers 类
System.Data.Linq.SqlClient 命名空间


SqlHelpers ..::.GetStringContainsPattern 方法

SqlHelpers
.
.
::
.
GetStringContainsPattern 方法
SqlHelpers 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

创建一个搜索模式字符串，其中，指定文本可包含其前后的其他文本。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function GetStringContainsPattern ( _
    text As String, _
    escape As Char _
) As String
public static string GetStringContainsPattern(
    string text,
    char escape
)
public:
static String^ GetStringContainsPattern(
    String^ text,
    wchar_t escape
)
static member GetStringContainsPattern :
        text:string *
        escape:char -> string

参数

text
类型： System String
要插入到搜索模式字符串中的字符串。
escape
类型： System Char
用来转义通配符的字符。

返回值

类型： System String
一个搜索模式字符串，它包含指定字符串及其前后的“%”字符。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlHelpers 类
SqlHelpers 成员
System.Data.Linq.SqlClient 命名空间


SqlHelpers ..::.GetStringEndsWithPattern 方法

SqlHelpers
.
.
::
.
GetStringEndsWithPattern 方法
SqlHelpers 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

创建一个搜索模式字符串，其中，指定文本可包含其前面的其他文本，但不能包含其后面的其他文本。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function GetStringEndsWithPattern ( _
    text As String, _
    escape As Char _
) As String
public static string GetStringEndsWithPattern(
    string text,
    char escape
)
public:
static String^ GetStringEndsWithPattern(
    String^ text,
    wchar_t escape
)
static member GetStringEndsWithPattern :
        text:string *
        escape:char -> string

参数

text
类型： System String
要插入到搜索模式字符串中的字符串。
escape
类型： System Char
用来转义通配符的字符。

返回值

类型： System String
一个搜索模式字符串，它包含“%”字符及其后面的指定字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlHelpers 类
SqlHelpers 成员
System.Data.Linq.SqlClient 命名空间


SqlHelpers ..::.GetStringStartsWithPattern 方法

SqlHelpers
.
.
::
.
GetStringStartsWithPattern 方法
SqlHelpers 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

创建一个搜索模式字符串，其中，指定文本可包含其后面的其他文本，但不能包含其前面的其他文本。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function GetStringStartsWithPattern ( _
    text As String, _
    escape As Char _
) As String
public static string GetStringStartsWithPattern(
    string text,
    char escape
)
public:
static String^ GetStringStartsWithPattern(
    String^ text,
    wchar_t escape
)
static member GetStringStartsWithPattern :
        text:string *
        escape:char -> string

参数

text
类型： System String
要插入到搜索模式字符串中的字符串。
escape
类型： System Char
用来转义通配符的字符。

返回值

类型： System String
一个搜索模式字符串，它包含指定字符串及其后面的“%”字符。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlHelpers 类
SqlHelpers 成员
System.Data.Linq.SqlClient 命名空间


SqlHelpers ..::.TranslateVBLikePattern 方法

SqlHelpers
.
.
::
.
TranslateVBLikePattern 方法
SqlHelpers 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

将 Visual Basic Like 运算符的搜索模式转换为 SQL Server LIKE 运算符的搜索模式。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function TranslateVBLikePattern ( _
    pattern As String, _
    escape As Char _
) As String
public static string TranslateVBLikePattern(
    string pattern,
    char escape
)
public:
static String^ TranslateVBLikePattern(
    String^ pattern,
    wchar_t escape
)
static member TranslateVBLikePattern :
        pattern:string *
        escape:char -> string

参数

pattern
类型： System String
要转换为 SQL Server LIKE 搜索模式的 Visual Basic Like 搜索模式。
escape
类型： System Char
用于转义特殊 SQL 字符或转义符本身的字符。

返回值

类型： System String
与指定的 Visual Basic Like 搜索模式相对应的 SQL Server LIKE 运算符的搜索模式。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlHelpers 类
SqlHelpers 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods 类

SqlMethods 类
成员

提供与 SQL Server 函数相对应的方法。SqlMethods 类中的方法仅在 LINQ to SQL 查询中受支持。 提供与 SQL Server 函数相对应的方法。SqlMethods 类中的方法仅在 LINQ to SQL 查询中受支持。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public NotInheritable Class SqlMethods
public static class SqlMethods
public ref class SqlMethods abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type SqlMethods =  class end

System.Data.Linq.SqlClient System.Data.Linq.SqlClient..::.SqlMethodsSqlMethods
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods 成员

SqlMethods 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

提供与 SQL Server 函数相对应的方法。SqlMethods 类中的方法仅在 LINQ to SQL 查询中受支持。 提供与 SQL Server 函数相对应的方法。SqlMethods 类中的方法仅在 LINQ to SQL 查询中受支持。

名称 说明
页首

参考

SqlMethods 类
System.Data.Linq.SqlClient 命名空间


SqlMethods 方法

SqlMethods 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类
名称 说明
页首

参考

SqlMethods 类
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffDay 方法

SqlMethods
.
.
::
.
DateDiffDay 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

对两个指定日期之间的日期边界进行计数。

名称 说明
页首

对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffDay 方法 (DateTime, DateTime)

SqlMethods
.
.
::
.
DateDiffDay 方法 (DateTime, DateTime)
SqlMethods 类

对两个不可以为 null 的日期之间的日期边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffDay ( _
    startDate As DateTime, _
    endDate As DateTime _
) As Integer
public static int DateDiffDay(
    DateTime startDate,
    DateTime endDate
)
public:
static int DateDiffDay(
    DateTime startDate,
    DateTime endDate
)
static member DateDiffDay :
        startDate:DateTime *
        endDate:DateTime -> int

参数

startDate
类型： System DateTime
时间段的起始日期。
endDate
类型： System DateTime
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的日期边界数。

对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffDay 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffDay 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

SqlMethods
.
.
::
.
DateDiffDay 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的日期边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffDay ( _
    startDate As Nullable(Of DateTime), _
    endDate As Nullable(Of DateTime) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffDay(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
public:
static Nullable<int> DateDiffDay(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
static member DateDiffDay :
        startDate:Nullable<DateTime> *
        endDate:Nullable<DateTime> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的日期边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的日期边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffDay 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffDay 方法 (DateTimeOffset, DateTimeOffset)

SqlMethods
.
.
::
.
DateDiffDay 方法 (DateTimeOffset, DateTimeOffset)
SqlMethods 类

对两个不可以为 null 的日期之间的日期边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffDay ( _
    startDate As DateTimeOffset, _
    endDate As DateTimeOffset _
) As Integer
public static int DateDiffDay(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
public:
static int DateDiffDay(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
static member DateDiffDay :
        startDate:DateTimeOffset *
        endDate:DateTimeOffset -> int

参数

startDate
类型： System DateTimeOffset
时间段的起始日期。
endDate
类型： System DateTimeOffset
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的日期边界数。

对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffDay 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffDay 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

SqlMethods
.
.
::
.
DateDiffDay 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的日期边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffDay ( _
    startDate As Nullable(Of DateTimeOffset), _
    endDate As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffDay(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
public:
static Nullable<int> DateDiffDay(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
static member DateDiffDay :
        startDate:Nullable<DateTimeOffset> *
        endDate:Nullable<DateTimeOffset> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的日期边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的日期边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 day 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffDay 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffHour 方法

SqlMethods
.
.
::
.
DateDiffHour 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

对两个指定日期之间的小时边界进行计数。

名称 说明
页首

对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffHour 方法 (DateTime, DateTime)

SqlMethods
.
.
::
.
DateDiffHour 方法 (DateTime, DateTime)
SqlMethods 类

对两个不可以为 null 的日期之间的小时边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffHour ( _
    startDate As DateTime, _
    endDate As DateTime _
) As Integer
public static int DateDiffHour(
    DateTime startDate,
    DateTime endDate
)
public:
static int DateDiffHour(
    DateTime startDate,
    DateTime endDate
)
static member DateDiffHour :
        startDate:DateTime *
        endDate:DateTime -> int

参数

startDate
类型： System DateTime
时间段的起始日期。
endDate
类型： System DateTime
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的小时边界数。

对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffHour 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffHour 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

SqlMethods
.
.
::
.
DateDiffHour 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的小时边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffHour ( _
    startDate As Nullable(Of DateTime), _
    endDate As Nullable(Of DateTime) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffHour(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
public:
static Nullable<int> DateDiffHour(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
static member DateDiffHour :
        startDate:Nullable<DateTime> *
        endDate:Nullable<DateTime> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的小时边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的小时边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffHour 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffHour 方法 (DateTimeOffset, DateTimeOffset)

SqlMethods
.
.
::
.
DateDiffHour 方法 (DateTimeOffset, DateTimeOffset)
SqlMethods 类

对两个不可以为 null 的日期之间的小时边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffHour ( _
    startDate As DateTimeOffset, _
    endDate As DateTimeOffset _
) As Integer
public static int DateDiffHour(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
public:
static int DateDiffHour(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
static member DateDiffHour :
        startDate:DateTimeOffset *
        endDate:DateTimeOffset -> int

参数

startDate
类型： System DateTimeOffset
时间段的起始日期。
endDate
类型： System DateTimeOffset
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的小时边界数。

对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffHour 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffHour 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

SqlMethods
.
.
::
.
DateDiffHour 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的小时边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffHour ( _
    startDate As Nullable(Of DateTimeOffset), _
    endDate As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffHour(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
public:
static Nullable<int> DateDiffHour(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
static member DateDiffHour :
        startDate:Nullable<DateTimeOffset> *
        endDate:Nullable<DateTimeOffset> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的小时边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的小时边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 hour 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffHour 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMicrosecond 方法

SqlMethods
.
.
::
.
DateDiffMicrosecond 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

对两个指定日期之间的微秒边界数进行计数。

名称 说明
页首

对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMicrosecond 方法 (DateTime, DateTime)

SqlMethods
.
.
::
.
DateDiffMicrosecond 方法 (DateTime, DateTime)
SqlMethods 类

对两个不可为 null 的日期之间的微秒边界数进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMicrosecond ( _
    startDate As DateTime, _
    endDate As DateTime _
) As Integer
public static int DateDiffMicrosecond(
    DateTime startDate,
    DateTime endDate
)
public:
static int DateDiffMicrosecond(
    DateTime startDate,
    DateTime endDate
)
static member DateDiffMicrosecond :
        startDate:DateTime *
        endDate:DateTime -> int

参数

startDate
类型： System DateTime
时间段的起始日期。
endDate
类型： System DateTime
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的微秒边界数。

对应于 SQL Server DATEDIFF 函数；使用 microsecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 microsecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMicrosecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMicrosecond 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

SqlMethods
.
.
::
.
DateDiffMicrosecond 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
SqlMethods 类

对两个可为 null 的日期之间的微秒边界数进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMicrosecond ( _
    startDate As Nullable(Of DateTime), _
    endDate As Nullable(Of DateTime) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffMicrosecond(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
public:
static Nullable<int> DateDiffMicrosecond(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
static member DateDiffMicrosecond :
        startDate:Nullable<DateTime> *
        endDate:Nullable<DateTime> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的微秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的微秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 microsecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 microsecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMicrosecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMicrosecond 方法 (DateTimeOffset, DateTimeOffset)

SqlMethods
.
.
::
.
DateDiffMicrosecond 方法 (DateTimeOffset, DateTimeOffset)
SqlMethods 类

对两个不可为 null 的日期之间的微秒边界数进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMicrosecond ( _
    startDate As DateTimeOffset, _
    endDate As DateTimeOffset _
) As Integer
public static int DateDiffMicrosecond(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
public:
static int DateDiffMicrosecond(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
static member DateDiffMicrosecond :
        startDate:DateTimeOffset *
        endDate:DateTimeOffset -> int

参数

startDate
类型： System DateTimeOffset
时间段的起始日期。
endDate
类型： System DateTimeOffset
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的微秒边界数。

对应于 SQL Server DATEDIFF 函数；使用 microsecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 microsecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMicrosecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMicrosecond 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

SqlMethods
.
.
::
.
DateDiffMicrosecond 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
SqlMethods 类

对两个可为 null 的日期之间的微秒边界数进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMicrosecond ( _
    startDate As Nullable(Of DateTimeOffset), _
    endDate As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffMicrosecond(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
public:
static Nullable<int> DateDiffMicrosecond(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
static member DateDiffMicrosecond :
        startDate:Nullable<DateTimeOffset> *
        endDate:Nullable<DateTimeOffset> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的微秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的微秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 microsecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 microsecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMicrosecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMillisecond 方法

SqlMethods
.
.
::
.
DateDiffMillisecond 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

对两个指定日期之间的毫秒边界进行计数。

名称 说明
页首

对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMillisecond 方法 (DateTime, DateTime)

SqlMethods
.
.
::
.
DateDiffMillisecond 方法 (DateTime, DateTime)
SqlMethods 类

对两个不可以为 null 的日期之间的毫秒边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMillisecond ( _
    startDate As DateTime, _
    endDate As DateTime _
) As Integer
public static int DateDiffMillisecond(
    DateTime startDate,
    DateTime endDate
)
public:
static int DateDiffMillisecond(
    DateTime startDate,
    DateTime endDate
)
static member DateDiffMillisecond :
        startDate:DateTime *
        endDate:DateTime -> int

参数

startDate
类型： System DateTime
时间段的起始日期。
endDate
类型： System DateTime
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的毫秒边界数。

对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMillisecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMillisecond 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

SqlMethods
.
.
::
.
DateDiffMillisecond 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的毫秒边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMillisecond ( _
    startDate As Nullable(Of DateTime), _
    endDate As Nullable(Of DateTime) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffMillisecond(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
public:
static Nullable<int> DateDiffMillisecond(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
static member DateDiffMillisecond :
        startDate:Nullable<DateTime> *
        endDate:Nullable<DateTime> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的毫秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的毫秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMillisecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMillisecond 方法 (DateTimeOffset, DateTimeOffset)

SqlMethods
.
.
::
.
DateDiffMillisecond 方法 (DateTimeOffset, DateTimeOffset)
SqlMethods 类

对两个不可以为 null 的日期之间的毫秒边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMillisecond ( _
    startDate As DateTimeOffset, _
    endDate As DateTimeOffset _
) As Integer
public static int DateDiffMillisecond(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
public:
static int DateDiffMillisecond(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
static member DateDiffMillisecond :
        startDate:DateTimeOffset *
        endDate:DateTimeOffset -> int

参数

startDate
类型： System DateTimeOffset
时间段的起始日期。
endDate
类型： System DateTimeOffset
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的毫秒边界数。

对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMillisecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMillisecond 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

SqlMethods
.
.
::
.
DateDiffMillisecond 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的毫秒边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMillisecond ( _
    startDate As Nullable(Of DateTimeOffset), _
    endDate As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffMillisecond(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
public:
static Nullable<int> DateDiffMillisecond(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
static member DateDiffMillisecond :
        startDate:Nullable<DateTimeOffset> *
        endDate:Nullable<DateTimeOffset> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的毫秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的毫秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 millisecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMillisecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMinute 方法

SqlMethods
.
.
::
.
DateDiffMinute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

对两个指定日期之间的分钟边界进行计数。

名称 说明
页首

对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMinute 方法 (DateTime, DateTime)

SqlMethods
.
.
::
.
DateDiffMinute 方法 (DateTime, DateTime)
SqlMethods 类

对两个不可以为 null 的日期之间的分钟边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMinute ( _
    startDate As DateTime, _
    endDate As DateTime _
) As Integer
public static int DateDiffMinute(
    DateTime startDate,
    DateTime endDate
)
public:
static int DateDiffMinute(
    DateTime startDate,
    DateTime endDate
)
static member DateDiffMinute :
        startDate:DateTime *
        endDate:DateTime -> int

参数

startDate
类型： System DateTime
时间段的起始日期。
endDate
类型： System DateTime
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的分钟边界数。

对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMinute 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMinute 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

SqlMethods
.
.
::
.
DateDiffMinute 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的分钟边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMinute ( _
    startDate As Nullable(Of DateTime), _
    endDate As Nullable(Of DateTime) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffMinute(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
public:
static Nullable<int> DateDiffMinute(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
static member DateDiffMinute :
        startDate:Nullable<DateTime> *
        endDate:Nullable<DateTime> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的分钟边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的分钟边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMinute 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMinute 方法 (DateTimeOffset, DateTimeOffset)

SqlMethods
.
.
::
.
DateDiffMinute 方法 (DateTimeOffset, DateTimeOffset)
SqlMethods 类

对两个不可以为 null 的日期之间的分钟边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMinute ( _
    startDate As DateTimeOffset, _
    endDate As DateTimeOffset _
) As Integer
public static int DateDiffMinute(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
public:
static int DateDiffMinute(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
static member DateDiffMinute :
        startDate:DateTimeOffset *
        endDate:DateTimeOffset -> int

参数

startDate
类型： System DateTimeOffset
时间段的起始日期。
endDate
类型： System DateTimeOffset
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的分钟边界数。

对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMinute 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMinute 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

SqlMethods
.
.
::
.
DateDiffMinute 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的分钟边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMinute ( _
    startDate As Nullable(Of DateTimeOffset), _
    endDate As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffMinute(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
public:
static Nullable<int> DateDiffMinute(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
static member DateDiffMinute :
        startDate:Nullable<DateTimeOffset> *
        endDate:Nullable<DateTimeOffset> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的分钟边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的分钟边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 minute 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMinute 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMonth 方法

SqlMethods
.
.
::
.
DateDiffMonth 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

对两个指定日期之间的月份边界进行计数。

名称 说明
页首

对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMonth 方法 (DateTime, DateTime)

SqlMethods
.
.
::
.
DateDiffMonth 方法 (DateTime, DateTime)
SqlMethods 类

对两个不可以为 null 的日期之间的月份边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMonth ( _
    startDate As DateTime, _
    endDate As DateTime _
) As Integer
public static int DateDiffMonth(
    DateTime startDate,
    DateTime endDate
)
public:
static int DateDiffMonth(
    DateTime startDate,
    DateTime endDate
)
static member DateDiffMonth :
        startDate:DateTime *
        endDate:DateTime -> int

参数

startDate
类型： System DateTime
时间段的起始日期。
endDate
类型： System DateTime
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的月份边界数。

对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMonth 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMonth 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

SqlMethods
.
.
::
.
DateDiffMonth 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的月份边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMonth ( _
    startDate As Nullable(Of DateTime), _
    endDate As Nullable(Of DateTime) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffMonth(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
public:
static Nullable<int> DateDiffMonth(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
static member DateDiffMonth :
        startDate:Nullable<DateTime> *
        endDate:Nullable<DateTime> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的月份边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的月份边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMonth 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMonth 方法 (DateTimeOffset, DateTimeOffset)

SqlMethods
.
.
::
.
DateDiffMonth 方法 (DateTimeOffset, DateTimeOffset)
SqlMethods 类

对两个不可以为 null 的日期之间的月份边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMonth ( _
    startDate As DateTimeOffset, _
    endDate As DateTimeOffset _
) As Integer
public static int DateDiffMonth(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
public:
static int DateDiffMonth(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
static member DateDiffMonth :
        startDate:DateTimeOffset *
        endDate:DateTimeOffset -> int

参数

startDate
类型： System DateTimeOffset
时间段的起始日期。
endDate
类型： System DateTimeOffset
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的月份边界数。

对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMonth 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffMonth 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

SqlMethods
.
.
::
.
DateDiffMonth 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的月份边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffMonth ( _
    startDate As Nullable(Of DateTimeOffset), _
    endDate As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffMonth(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
public:
static Nullable<int> DateDiffMonth(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
static member DateDiffMonth :
        startDate:Nullable<DateTimeOffset> *
        endDate:Nullable<DateTimeOffset> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的月份边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的月份边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 month 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffMonth 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffNanosecond 方法

SqlMethods
.
.
::
.
DateDiffNanosecond 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

对两个指定日期之间的毫微秒边界数进行计数。

名称 说明
页首

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffNanosecond 方法 (DateTime, DateTime)

SqlMethods
.
.
::
.
DateDiffNanosecond 方法 (DateTime, DateTime)
SqlMethods 类

对两个不可为 null 的日期之间的毫微秒边界数进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffNanosecond ( _
    startDate As DateTime, _
    endDate As DateTime _
) As Integer
public static int DateDiffNanosecond(
    DateTime startDate,
    DateTime endDate
)
public:
static int DateDiffNanosecond(
    DateTime startDate,
    DateTime endDate
)
static member DateDiffNanosecond :
        startDate:DateTime *
        endDate:DateTime -> int

参数

startDate
类型： System DateTime
时间段的起始日期。
endDate
类型： System DateTime
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的毫微秒边界数。

对应于 SQL Server DATEDIFF 函数；使用 nanosecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 nanosecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffNanosecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffNanosecond 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

SqlMethods
.
.
::
.
DateDiffNanosecond 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
SqlMethods 类

对两个可为 null 的日期之间的毫微秒边界数进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffNanosecond ( _
    startDate As Nullable(Of DateTime), _
    endDate As Nullable(Of DateTime) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffNanosecond(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
public:
static Nullable<int> DateDiffNanosecond(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
static member DateDiffNanosecond :
        startDate:Nullable<DateTime> *
        endDate:Nullable<DateTime> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的毫微秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的毫微秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 nanosecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 nanosecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffNanosecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffNanosecond 方法 (DateTimeOffset, DateTimeOffset)

SqlMethods
.
.
::
.
DateDiffNanosecond 方法 (DateTimeOffset, DateTimeOffset)
SqlMethods 类

对两个不可为 null 的日期之间的毫微秒边界数进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffNanosecond ( _
    startDate As DateTimeOffset, _
    endDate As DateTimeOffset _
) As Integer
public static int DateDiffNanosecond(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
public:
static int DateDiffNanosecond(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
static member DateDiffNanosecond :
        startDate:DateTimeOffset *
        endDate:DateTimeOffset -> int

参数

startDate
类型： System DateTimeOffset
时间段的起始日期。
endDate
类型： System DateTimeOffset
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的毫微秒边界数。

对应于 SQL Server DATEDIFF 函数；使用 nanosecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 nanosecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffNanosecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffNanosecond 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

SqlMethods
.
.
::
.
DateDiffNanosecond 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
SqlMethods 类

对两个可为 null 的日期之间的毫微秒边界数进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffNanosecond ( _
    startDate As Nullable(Of DateTimeOffset), _
    endDate As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffNanosecond(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
public:
static Nullable<int> DateDiffNanosecond(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
static member DateDiffNanosecond :
        startDate:Nullable<DateTimeOffset> *
        endDate:Nullable<DateTimeOffset> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的毫微秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的毫微秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 nanosecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 nanosecond 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffNanosecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffSecond 方法

SqlMethods
.
.
::
.
DateDiffSecond 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

对两个指定日期之间的秒边界进行计数。

名称 说明
页首

对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffSecond 方法 (DateTime, DateTime)

SqlMethods
.
.
::
.
DateDiffSecond 方法 (DateTime, DateTime)
SqlMethods 类

对两个不可以为 null 的日期之间的秒边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffSecond ( _
    startDate As DateTime, _
    endDate As DateTime _
) As Integer
public static int DateDiffSecond(
    DateTime startDate,
    DateTime endDate
)
public:
static int DateDiffSecond(
    DateTime startDate,
    DateTime endDate
)
static member DateDiffSecond :
        startDate:DateTime *
        endDate:DateTime -> int

参数

startDate
类型： System DateTime
时间段的起始日期。
endDate
类型： System DateTime
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的秒边界数。

对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffSecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffSecond 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

SqlMethods
.
.
::
.
DateDiffSecond 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的秒边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffSecond ( _
    startDate As Nullable(Of DateTime), _
    endDate As Nullable(Of DateTime) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffSecond(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
public:
static Nullable<int> DateDiffSecond(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
static member DateDiffSecond :
        startDate:Nullable<DateTime> *
        endDate:Nullable<DateTime> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffSecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffSecond 方法 (DateTimeOffset, DateTimeOffset)

SqlMethods
.
.
::
.
DateDiffSecond 方法 (DateTimeOffset, DateTimeOffset)
SqlMethods 类

对两个不可以为 null 的日期之间的秒边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffSecond ( _
    startDate As DateTimeOffset, _
    endDate As DateTimeOffset _
) As Integer
public static int DateDiffSecond(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
public:
static int DateDiffSecond(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
static member DateDiffSecond :
        startDate:DateTimeOffset *
        endDate:DateTimeOffset -> int

参数

startDate
类型： System DateTimeOffset
时间段的起始日期。
endDate
类型： System DateTimeOffset
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的秒边界数。

对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffSecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffSecond 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

SqlMethods
.
.
::
.
DateDiffSecond 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的秒边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffSecond ( _
    startDate As Nullable(Of DateTimeOffset), _
    endDate As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffSecond(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
public:
static Nullable<int> DateDiffSecond(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
static member DateDiffSecond :
        startDate:Nullable<DateTimeOffset> *
        endDate:Nullable<DateTimeOffset> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的秒边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 second 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffSecond 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffYear 方法

SqlMethods
.
.
::
.
DateDiffYear 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

对两个指定日期之间的年份边界进行计数。

名称 说明
页首

对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffYear 方法 (DateTime, DateTime)

SqlMethods
.
.
::
.
DateDiffYear 方法 (DateTime, DateTime)
SqlMethods 类

对两个不可以为 null 的日期之间的年份边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffYear ( _
    startDate As DateTime, _
    endDate As DateTime _
) As Integer
public static int DateDiffYear(
    DateTime startDate,
    DateTime endDate
)
public:
static int DateDiffYear(
    DateTime startDate,
    DateTime endDate
)
static member DateDiffYear :
        startDate:DateTime *
        endDate:DateTime -> int

参数

startDate
类型： System DateTime
时间段的起始日期。
endDate
类型： System DateTime
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的年份边界数。

对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffYear 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffYear 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

SqlMethods
.
.
::
.
DateDiffYear 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的年份边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffYear ( _
    startDate As Nullable(Of DateTime), _
    endDate As Nullable(Of DateTime) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffYear(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
public:
static Nullable<int> DateDiffYear(
    Nullable<DateTime> startDate,
    Nullable<DateTime> endDate
)
static member DateDiffYear :
        startDate:Nullable<DateTime> *
        endDate:Nullable<DateTime> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的年份边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的年份边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffYear 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffYear 方法 (DateTimeOffset, DateTimeOffset)

SqlMethods
.
.
::
.
DateDiffYear 方法 (DateTimeOffset, DateTimeOffset)
SqlMethods 类

对两个不可以为 null 的日期之间的年份边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffYear ( _
    startDate As DateTimeOffset, _
    endDate As DateTimeOffset _
) As Integer
public static int DateDiffYear(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
public:
static int DateDiffYear(
    DateTimeOffset startDate,
    DateTimeOffset endDate
)
static member DateDiffYear :
        startDate:DateTimeOffset *
        endDate:DateTimeOffset -> int

参数

startDate
类型： System DateTimeOffset
时间段的起始日期。
endDate
类型： System DateTimeOffset
时间段的结束日期。

返回值

类型： System Int32
两个指定日期之间的年份边界数。

对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffYear 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.DateDiffYear 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

SqlMethods
.
.
::
.
DateDiffYear 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
SqlMethods 类

对两个可以为 null 的日期之间的年份边界进行计数。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function DateDiffYear ( _
    startDate As Nullable(Of DateTimeOffset), _
    endDate As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
public static Nullable<int> DateDiffYear(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
public:
static Nullable<int> DateDiffYear(
    Nullable<DateTimeOffset> startDate,
    Nullable<DateTimeOffset> endDate
)
static member DateDiffYear :
        startDate:Nullable<DateTimeOffset> *
        endDate:Nullable<DateTimeOffset> -> Nullable<int>

参数

startDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的起始日期。
endDate
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

时间段的结束日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的年份边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。 当两个参数都不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回两个指定日期之间的年份边界数。当一个参数为或两个参数都为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时，返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。 对应于 SQL Server DATEDIFF 函数；使用 year 指定交叉的时间边界的类型。有关此 SQL Server 函数的更多信息，请参见 Microsoft SQL Server 联机丛书中的 DATEDIFF。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
DateDiffYear 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.Like 方法

SqlMethods
.
.
::
.
Like 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlMethods 类

确定特定字符串是否与指定的模式匹配。目前只有 LINQ to SQL 查询支持此方法。 确定特定字符串是否与指定的模式匹配。目前只有 LINQ to SQL 查询支持此方法。

名称 说明
页首

SQL Server LIKE 功能无法通过转换现有公共语言运行时 (CLR) 和 .NET Framework 构造进行公开，并且在 LINQ to SQL 上下文之外不受支持。在 LINQ to SQL 之外使用此方法将始终引发 NotSupportedException 类型的异常。 SQL Server LIKE 功能无法通过转换现有公共语言运行时 (CLR) 和 .NET Framework 构造进行公开，并且在 LINQ to SQL 上下文之外不受支持。在 LINQ to SQL 之外使用此方法将始终引发 NotSupportedException 类型的异常。

参考

SqlMethods 类
SqlMethods 成员
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.Like 方法 (String, String)

SqlMethods
.
.
::
.
Like 方法 (String, String)
SqlMethods 类

确定特定字符串是否与指定的模式匹配。目前只有 LINQ to SQL 查询支持此方法。 确定特定字符串是否与指定的模式匹配。目前只有 LINQ to SQL 查询支持此方法。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Like ( _
    matchExpression As String, _
    pattern As String _
) As Boolean
public static bool Like(
    string matchExpression,
    string pattern
)
public:
static bool Like(
    String^ matchExpression,
    String^ pattern
)
static member Like :
        matchExpression:string *
        pattern:string -> bool

参数

matchExpression
类型： System String
要搜索其匹配项的字符串。
pattern
类型： System String
与 matchExpression 匹配的模式（可能包括通配符）。

返回值

类型： System Boolean
如果 matchExpression 与模式匹配，则为 true；否则为 false。

SQL Server LIKE 功能无法通过转换现有公共语言运行时 (CLR) 和 .NET Framework 构造进行公开，并且在 LINQ to SQL 上下文之外不受支持。在 LINQ to SQL 之外使用此方法将始终引发 NotSupportedException 类型的异常。 SQL Server LIKE 功能无法通过转换现有公共语言运行时 (CLR) 和 .NET Framework 构造进行公开，并且在 LINQ to SQL 上下文之外不受支持。在 LINQ to SQL 之外使用此方法将始终引发 NotSupportedException 类型的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
Like 重载
System.Data.Linq.SqlClient 命名空间


SqlMethods ..::.Like 方法 (String, String, Char)

SqlMethods
.
.
::
.
Like 方法 (String, String, Char)
SqlMethods 类

确定特定字符串是否与指定的模式匹配。目前只有 LINQ to SQL 查询支持此方法。 确定特定字符串是否与指定的模式匹配。目前只有 LINQ to SQL 查询支持此方法。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Like ( _
    matchExpression As String, _
    pattern As String, _
    escapeCharacter As Char _
) As Boolean
public static bool Like(
    string matchExpression,
    string pattern,
    char escapeCharacter
)
public:
static bool Like(
    String^ matchExpression,
    String^ pattern,
    wchar_t escapeCharacter
)
static member Like :
        matchExpression:string *
        pattern:string *
        escapeCharacter:char -> bool

参数

matchExpression
类型： System String
要搜索其匹配项的字符串。
pattern
类型： System String
与 matchExpression 匹配的模式（可能包括通配符）。
escapeCharacter
类型： System Char
放置在通配符前面的字符，以指示应将其解释为常规字符而非通配符。

返回值

类型： System Boolean
如果 matchExpression 与模式匹配，则为 true；否则为 false。

SQL Server LIKE 功能无法通过转换现有公共语言运行时 (CLR) 和 .NET Framework 构造进行公开，并且在 LINQ to SQL 上下文之外不受支持。在 LINQ to SQL 之外使用此方法将始终引发 NotSupportedException 类型的异常。 SQL Server LIKE 功能无法通过转换现有公共语言运行时 (CLR) 和 .NET Framework 构造进行公开，并且在 LINQ to SQL 上下文之外不受支持。在 LINQ to SQL 之外使用此方法将始终引发 NotSupportedException 类型的异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlMethods 类
SqlMethods 成员
Like 重载
System.Data.Linq.SqlClient 命名空间


SqlProvider 类

SqlProvider 类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

包含连接到 SQL Server 并与之通信的功能。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Class SqlProvider _
    Implements IDisposable
public class SqlProvider : IDisposable
public ref class SqlProvider : IDisposable
type SqlProvider =
    class
        interface IDisposable
    end

System.Data.Linq.SqlClient System.Data.Linq.SqlClient..::.SqlProviderSqlProvider

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlProvider 成员
System.Data.Linq.SqlClient 命名空间


SqlProvider 成员

SqlProvider 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlProvider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

包含连接到 SQL Server 并与之通信的功能。

SqlProvider 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

SqlProvider 类
System.Data.Linq.SqlClient 命名空间


SqlProvider 构造函数

SqlProvider 构造函数
SqlProvider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

初始化 SqlProvider 类的新实例。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public SqlProvider()
public:
SqlProvider()
new : unit -> SqlProvider

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlProvider 类
SqlProvider 成员
System.Data.Linq.SqlClient 命名空间


SqlProvider 方法

SqlProvider 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlProvider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

SqlProvider 类型公开以下成员。

名称 说明
页首

参考

SqlProvider 类
System.Data.Linq.SqlClient 命名空间


SqlProvider ..::.Dispose 方法

SqlProvider
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
SqlProvider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

释放由 SqlProvider 打开的资源。

名称 说明
页首

参考

SqlProvider 类
SqlProvider 成员
System.Data.Linq.SqlClient 命名空间


SqlProvider ..::.Dispose 方法

SqlProvider
.
.
::
.
Dispose 方法
SqlProvider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

释放托管引用，并关闭由 SqlProvider 打开的连接。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub Dispose
public void Dispose()
public:
virtual void Dispose() sealed
abstract Dispose : unit -> unit
override Dispose : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlProvider 类
SqlProvider 成员
Dispose 重载
System.Data.Linq.SqlClient 命名空间


SqlProvider ..::.Dispose 方法 (Boolean)

SqlProvider
.
.
::
.
Dispose 方法 (Boolean)
SqlProvider 类

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

可选择释放托管引用，并关闭由 SqlProvider 打开的连接。

命名空间： System.Data.Linq.SqlClient
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Protected Overridable Sub Dispose ( _
    disposing As Boolean _
)
protected virtual void Dispose(
    bool disposing
)
protected:
virtual void Dispose(
    bool disposing
)
abstract Dispose :
        disposing:bool -> unit
override Dispose :
        disposing:bool -> unit

参数

disposing
类型： System Boolean
如果释放托管引用并关闭连接，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

SqlProvider 类
SqlProvider 成员
Dispose 重载
System.Data.Linq.SqlClient 命名空间


System.Data.Linq.SqlClient.Implementation 命名空间

System.Data.Linq.SqlClient.Implementation 命名空间

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

The System.Data.Linq.SqlClient.Implementation namespace contains types that are used for the internal implementation details of a SQL Server provider.

 | 类 | 说明
公共类 | ObjectMaterializer TDataReader | 基础结构。 Defines methods for dynamically materializing objects.


ObjectMaterializer <(Of <(TDataReader >)>) 类

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
类
成员

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Defines methods for dynamically materializing objects.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustInherit Class ObjectMaterializer(Of TDataReader As DbDataReader)
public abstract class ObjectMaterializer<TDataReader>
where TDataReader : DbDataReader

generic<typename TDataReader>
where TDataReader : DbDataReader
public ref class ObjectMaterializer abstract
[<AbstractClassAttribute>]
type ObjectMaterializer<'TDataReader when 'TDataReader : DbDataReader> =  class end

类型参数

TDataReader

The type of the data reader.

System.Data.Linq.SqlClient.Implementation
System.Data.Linq.SqlClient.Implementation..::.ObjectMaterializer<(Of <(TDataReader>)>)ObjectMaterializer
System.Data.Linq.SqlClient.Implementation..::.ObjectMaterializer<(Of <(TDataReader>)>)TDataReader
System.Data.Linq.SqlClient.Implementation..::.ObjectMaterializer<(Of <(TDataReader>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) 成员

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Defines methods for dynamically materializing objects.

ObjectMaterializer TDataReader 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectMaterializer TDataReader 类
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) 构造函数

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
构造函数
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Initializes a new instance of the ObjectMaterializer<(Of <(TDataReader>)>) class.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Sub New
public ObjectMaterializer()
public:
ObjectMaterializer()
new : unit -> ObjectMaterializer

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) 字段

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
字段
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

ObjectMaterializer TDataReader 类型公开以下成员。

名称 说明
页首

参考

ObjectMaterializer TDataReader 类
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.Arguments 字段

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
Arguments 字段
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Captures internal state for the fast materializer.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Arguments As Object()
public Object[] Arguments
public:
array<Object^>^ Arguments
val mutable Arguments: Object[]

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.BufferReader 字段

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
BufferReader 字段
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Represents a reader that reads data rows in a forward-only manner.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public BufferReader As DbDataReader
public DbDataReader BufferReader
public:
DbDataReader^ BufferReader
val mutable BufferReader: DbDataReader

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.DataReader 字段

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
DataReader 字段
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Represents a data reader.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public DataReader As TDataReader
public TDataReader DataReader
public:
TDataReader DataReader
val mutable DataReader: 'TDataReader

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.Globals 字段

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
Globals 字段
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Captures internal state for the fast materializer.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Globals As Object()
public Object[] Globals
public:
array<Object^>^ Globals
val mutable Globals: Object[]

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.Locals 字段

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
Locals 字段
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Captures internal state for the fast materializer.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Locals As Object()
public Object[] Locals
public:
array<Object^>^ Locals
val mutable Locals: Object[]

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.Ordinals 字段

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
Ordinals 字段
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Represents column ordinals of a data reader.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Ordinals As Integer()
public int[] Ordinals
public:
array<int>^ Ordinals
val mutable Ordinals: int[]

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

ObjectMaterializer TDataReader 类型公开以下成员。

名称 说明
页首

参考

ObjectMaterializer TDataReader 类
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.Convert <(Of <(TOutput >)>) 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
Convert
<
(Of
<
(
TOutput
>
)
>
)
方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Changes the type of each element in a specified sequence.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function Convert(Of TOutput) ( _
    source As IEnumerable _
) As IEnumerable(Of TOutput)
public static IEnumerable<TOutput> Convert<TOutput>(
    IEnumerable source
)

public:
generic<typename TOutput>
static IEnumerable<TOutput>^ Convert(
    IEnumerable^ source
)
static member Convert :
        source:IEnumerable -> IEnumerable<'TOutput>

类型参数

TOutput

The type to convert the elements to.

参数

source
类型： System.Collections IEnumerable
A sequence that contains elements to convert.

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TOutput
>
)
>
)

A sequence that contains the type-converted elements.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.CreateGroup <(Of <(TKey, TElement >)>) 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
CreateGroup
<
(Of
<
(
TKey, TElement
>
)
>
)
方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Creates a group from a specified key and collection of values.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function CreateGroup(Of TKey, TElement) ( _
    key As TKey, _
    items As IEnumerable(Of TElement) _
) As IGrouping(Of TKey, TElement)
public static IGrouping<TKey, TElement> CreateGroup<TKey, TElement>(
    TKey key,
    IEnumerable<TElement> items
)

public:
generic<typename TKey, typename TElement>
static IGrouping<TKey, TElement>^ CreateGroup(
    TKey key,
    IEnumerable<TElement>^ items
)
static member CreateGroup :
        key:'TKey *
        items:IEnumerable<'TElement> -> IGrouping<'TKey, 'TElement>

类型参数

TKey

The type of the key of the group.

TElement

The type of the values in the group.

参数

key
类型：TKey
The key for the group.
items
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TElement
>
)
>
)

The values for the group.

返回值

类型： System.Linq IGrouping
<
(Of
<
(
TKey, TElement
>
)
>
)

A group that has the specified key and the specified collection of values.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.CreateOrderedEnumerable <(Of <(TElement >)>) 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
CreateOrderedEnumerable
<
(Of
<
(
TElement
>
)
>
)
方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Creates an ordered sequence from a specified collection of values.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function CreateOrderedEnumerable(Of TElement) ( _
    items As IEnumerable(Of TElement) _
) As IOrderedEnumerable(Of TElement)
public static IOrderedEnumerable<TElement> CreateOrderedEnumerable<TElement>(
    IEnumerable<TElement> items
)

public:
generic<typename TElement>
static IOrderedEnumerable<TElement>^ CreateOrderedEnumerable(
    IEnumerable<TElement>^ items
)
static member CreateOrderedEnumerable :
        items:IEnumerable<'TElement> -> IOrderedEnumerable<'TElement>

类型参数

TElement

The type of the values in the ordered sequence.

参数

items
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TElement
>
)
>
)

The values to put in the ordered sequence.

返回值

类型： System.Linq IOrderedEnumerable
<
(Of
<
(
TElement
>
)
>
)

An ordered sequence that contains the specified values.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.ErrorAssignmentToNull 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
ErrorAssignmentToNull 方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

Returns an exception that indicates that a nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） value was tried to be assigned to a non-nullable value type.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public Shared Function ErrorAssignmentToNull ( _
    type As Type _
) As Exception
public static Exception ErrorAssignmentToNull(
    Type type
)
public:
static Exception^ ErrorAssignmentToNull(
    Type^ type
)
static member ErrorAssignmentToNull :
        type:Type -> Exception

参数

type
类型： System Type
The type to which a nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） value was attempted to be assigned.

返回值

类型： System Exception
An exception that indicates that a nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） value was attempted to be assigned to a non-nullable value type.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.ExecuteSubQuery 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
ExecuteSubQuery 方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

When overridden in a derived class, executes a query.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function ExecuteSubQuery ( _
    iSubQuery As Integer, _
    args As Object() _
) As IEnumerable
public abstract IEnumerable ExecuteSubQuery(
    int iSubQuery,
    Object[] args
)
public:
virtual IEnumerable^ ExecuteSubQuery(
    int iSubQuery,
    array<Object^>^ args
) abstract
abstract ExecuteSubQuery :
        iSubQuery:int *
        args:Object[] -> IEnumerable

参数

iSubQuery
类型： System Int32
The index of the query.
args
类型：
array<
System Object
>
[]
()
[]

The arguments to the query.

返回值

类型： System.Collections IEnumerable
The results from executing the query.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.GetLinkSource <(Of <(T >)>) 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
GetLinkSource
<
(Of
<
(
T
>
)
>
)
方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

When overridden in a derived class, creates a new deferred source.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetLinkSource(Of T) ( _
    globalLink As Integer, _
    localFactory As Integer, _
    keyValues As Object() _
) As IEnumerable(Of T)
public abstract IEnumerable<T> GetLinkSource<T>(
    int globalLink,
    int localFactory,
    Object[] keyValues
)

public:
generic<typename T>
virtual IEnumerable<T>^ GetLinkSource(
    int globalLink,
    int localFactory,
    array<Object^>^ keyValues
) abstract
abstract GetLinkSource :
        globalLink:int *
        localFactory:int *
        keyValues:Object[] -> IEnumerable<'T>

类型参数

T

The type of the result elements.

参数

globalLink
类型： System Int32
The index of the link.
localFactory
类型： System Int32
The index of the factory.
keyValues
类型：
array<
System Object
>
[]
()
[]

The key values for the deferred source.

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
T
>
)
>
)

An enumerable deferred source.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.GetNestedLinkSource <(Of <(T >)>) 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
GetNestedLinkSource
<
(Of
<
(
T
>
)
>
)
方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

When overridden in a derived class, creates a new deferred source.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function GetNestedLinkSource(Of T) ( _
    globalLink As Integer, _
    localFactory As Integer, _
    instance As Object _
) As IEnumerable(Of T)
public abstract IEnumerable<T> GetNestedLinkSource<T>(
    int globalLink,
    int localFactory,
    Object instance
)

public:
generic<typename T>
virtual IEnumerable<T>^ GetNestedLinkSource(
    int globalLink,
    int localFactory,
    Object^ instance
) abstract
abstract GetNestedLinkSource :
        globalLink:int *
        localFactory:int *
        instance:Object -> IEnumerable<'T>

类型参数

T

The type of the result elements.

参数

globalLink
类型： System Int32
The index of the link.
localFactory
类型： System Int32
The index of the factory.
instance
类型： System Object
The instance for the deferred source.

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
T
>
)
>
)

An enumerable deferred source.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.InsertLookup 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
InsertLookup 方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

When overridden in a derived class, inserts a value into a data structure.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function InsertLookup ( _
    globalMetaType As Integer, _
    instance As Object _
) As Object
public abstract Object InsertLookup(
    int globalMetaType,
    Object instance
)
public:
virtual Object^ InsertLookup(
    int globalMetaType,
    Object^ instance
) abstract
abstract InsertLookup :
        globalMetaType:int *
        instance:Object -> Object

参数

globalMetaType
类型： System Int32
The index of the MetaType.
instance
类型： System Object
The object to insert into the data structure.

返回值

类型： System Object
The value that was inserted into the data structure.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.Read 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
Read 方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

When overridden in a derived class, advances the reader to the next record.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Function Read As Boolean
public abstract bool Read()
public:
virtual bool Read() abstract
abstract Read : unit -> bool

返回值

类型： System Boolean
true if there are more rows; otherwise, false.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.SendEntityMaterialized 方法

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
SendEntityMaterialized 方法
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

When overridden in a derived class, invokes the method represented by OnLoadedMethod.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride Sub SendEntityMaterialized ( _
    globalMetaType As Integer, _
    instance As Object _
)
public abstract void SendEntityMaterialized(
    int globalMetaType,
    Object instance
)
public:
virtual void SendEntityMaterialized(
    int globalMetaType,
    Object^ instance
) abstract
abstract SendEntityMaterialized :
        globalMetaType:int *
        instance:Object -> unit

参数

globalMetaType
类型： System Int32
The index of the MetaType.
instance
类型： System Object
The parameter to pass to the invoked method.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) 属性

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

ObjectMaterializer TDataReader 类型公开以下成员。

名称 说明
页首

参考

ObjectMaterializer TDataReader 类
System.Data.Linq.SqlClient.Implementation 命名空间


ObjectMaterializer <(Of <(TDataReader >)>) ..::.CanDeferLoad 属性

ObjectMaterializer
<
(Of
<
(
TDataReader
>
)
>
)
.
.
::
.
CanDeferLoad 属性
ObjectMaterializer

此 API 支持 .NET Framework 基础结构，不适合在代码中直接使用。

When overridden in a derived class, gets a value that indicates whether deferred loading is enabled.

命名空间： System.Data.Linq.SqlClient.Implementation
程序集： System.Data.Linq（在 System.Data.Linq.dll 中）
Public MustOverride ReadOnly Property CanDeferLoad As Boolean
    Get
public abstract bool CanDeferLoad { get; }
public:
virtual property bool CanDeferLoad {
    bool get () abstract;
}
abstract CanDeferLoad : bool

属性值

类型： System Boolean
true if deferred loading is enabled; otherwise, false.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializer TDataReader 类
ObjectMaterializer TDataReader 成员
System.Data.Linq.SqlClient.Implementation 命名空间


System.Data.Objects 命名空间

System.Data.Objects 命名空间

System.Data.Objects 命名空间包含一些类，用于提供对对象服务的核心功能的访问。这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询、插入、更新和删除数据。对象服务支持针对实体数据模型 (EDM) 中定义的类型进行的语言集成查询 (LINQ) 和实体 SQL 查询。对象服务将返回的数据具体化为对象，并将对象更改传播回数据源。它还提供了用于跟踪更改、将对象绑定到控件以及处理并发问题的功能。有关更多信息，请参见Object Services Overview (Entity Framework)。 System.Data.Objects 命名空间包含一些类，用于提供对对象服务的核心功能的访问。这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询、插入、更新和删除数据。对象服务支持针对实体数据模型 (EDM) 中定义的类型进行的语言集成查询 (LINQ) 和实体 SQL 查询。对象服务将返回的数据具体化为对象，并将对象更改传播回数据源。它还提供了用于跟踪更改、将对象绑定到控件以及处理并发问题的功能。有关更多信息，请参见Object Services Overview (Entity Framework)。 System.Data.Objects 命名空间包含一些类，用于提供对对象服务的核心功能的访问。这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询、插入、更新和删除数据。对象服务支持针对实体数据模型 (EDM) 中定义的类型进行的语言集成查询 (LINQ) 和实体 SQL 查询。对象服务将返回的数据具体化为对象，并将对象更改传播回数据源。它还提供了用于跟踪更改、将对象绑定到控件以及处理并发问题的功能。有关更多信息，请参见Object Services Overview (Entity Framework)。 System.Data.Objects 命名空间包含一些类，用于提供对对象服务的核心功能的访问。这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询、插入、更新和删除数据。对象服务支持针对实体数据模型 (EDM) 中定义的类型进行的语言集成查询 (LINQ) 和实体 SQL 查询。对象服务将返回的数据具体化为对象，并将对象更改传播回数据源。它还提供了用于跟踪更改、将对象绑定到控件以及处理并发问题的功能。有关更多信息，请参见Object Services Overview (Entity Framework)。 System.Data.Objects 命名空间包含一些类，用于提供对对象服务的核心功能的访问。这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询、插入、更新和删除数据。对象服务支持针对实体数据模型 (EDM) 中定义的类型进行的语言集成查询 (LINQ) 和实体 SQL 查询。对象服务将返回的数据具体化为对象，并将对象更改传播回数据源。它还提供了用于跟踪更改、将对象绑定到控件以及处理并发问题的功能。有关更多信息，请参见Object Services Overview (Entity Framework)。 System.Data.Objects 命名空间包含一些类，用于提供对对象服务的核心功能的访问。这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询、插入、更新和删除数据。对象服务支持针对实体数据模型 (EDM) 中定义的类型进行的语言集成查询 (LINQ) 和实体 SQL 查询。对象服务将返回的数据具体化为对象，并将对象更改传播回数据源。它还提供了用于跟踪更改、将对象绑定到控件以及处理并发问题的功能。有关更多信息，请参见Object Services Overview (Entity Framework)。

 | 类 | 说明
公共类 | CompiledQuery | 表示一个缓存的 LINQ to Entities 查询。
公共类 | CurrentValueRecord | 提供对对象数据的当前值的访问。
公共类 | DbUpdatableDataRecord | 提供对对象数据的原始值的访问。DbUpdatableDataRecord 实现可用于更新对象的原始值的方法。 提供对对象数据的原始值的访问。DbUpdatableDataRecord 实现可用于更新对象的原始值的方法。
公共类 | EntityFunctions | 提供在 LINQ to Entities 查询中，公开概念模型规范函数的公共语言运行时 (CLR) 方法。有关规范函数的信息，请参见Canonical Functions (Entity SQL)。 提供在 LINQ to Entities 查询中，公开概念模型规范函数的公共语言运行时 (CLR) 方法。有关规范函数的信息，请参见Canonical Functions (Entity SQL)。
公共类 | ObjectContext | 提供用于查询和使用对象形式的实体数据的功能。
公共类 | ObjectContextOptions | 定义影响 ObjectContext 的行为的选项。
公共类 | ObjectMaterializedEventArgs | 包含 ObjectMaterialized 事件的数据。
公共类 | ObjectParameter | 表示传递给对象查询的查询参数。
公共类 | ObjectParameterCollection | 将查询参数表示为 ObjectQuery<(Of <(T>)>) 中定义的 ObjectParameter 对象。
公共类 | ObjectQuery | 实现使用 LINQ to Entities 和 ObjectQuery<(Of <(T>)>) 对概念模型执行查询的通用功能。
公共类 | ObjectQuery T | 表示在给定的对象上下文中针对概念模型的类型化查询。
公共类 | ObjectResult | 表示针对概念模型的对象查询的结果的基类。
公共类 | ObjectResult T | 以对象的可枚举集合形式表示 ObjectQuery<(Of <(T>)>) 的结果。
公共类 | ObjectSet TEntity | 表示用于执行创建、读取、更新和删除操作的类型化实体集。
公共类 | ObjectStateEntry | 维护对象和关系的状态和键信息以及对象属性的更改跟踪。
公共类 | ObjectStateManager | 维护实体类型实例和关系实例的对象状态和标识管理。
公共类 | OriginalValueRecord | 提供对对象数据的原始值的访问。
公共类 | ProxyDataContractResolver | 此类可帮助将为持久性未知数据类创建的代理类型解析为持久性未知对象的实际类型。
 | 接口 | 说明
公共接口 | IObjectSet TEntity | 提供允许对一组数据对象进行修改的功能。
 | 委托 | 说明
公共委托 | ObjectMaterializedEventHandler | 表示将处理 ObjectContext 的 ObjectMaterialized 事件的方法。
 | 枚举 | 说明
公共枚举 | MergeOption | 指定加载到对象上下文中的对象与对象上下文中的已有对象的合并方式。
公共枚举 | RefreshMode | 指定是保留对由对象服务跟踪的对象所做的属性更改，还是使用数据源中的属性值替换这些更改。
公共枚举 | SaveOptions | 指定在调用 SaveChanges(SaveOptions) 方法时对象上下文的行为。


CompiledQuery 类

CompiledQuery 类
成员

表示一个缓存的 LINQ to Entities 查询。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class CompiledQuery
public sealed class CompiledQuery
public ref class CompiledQuery sealed
[<SealedAttribute>]
type CompiledQuery =  class end

提供对查询的编译和缓存以供重新使用。从概念上讲，此类包含具有若干重载的单个 Compile 方法。您可调用 Compile 方法以创建表示已编译查询的新委托。在使用 ObjectContext 输入参数值及其他参数值调用该委托时，它将生成某个结果（例如 IQueryable<(Of <(T>)>) 实例）。首次调用该委托时，将转换并缓存查询。 提供对查询的编译和缓存以供重新使用。从概念上讲，此类包含具有若干重载的单个 Compile 方法。您可调用 Compile 方法以创建表示已编译查询的新委托。在使用 ObjectContext 输入参数值及其他参数值调用该委托时，它将生成某个结果（例如 IQueryable<(Of <(T>)>) 实例）。首次调用该委托时，将转换并缓存查询。 提供对查询的编译和缓存以供重新使用。从概念上讲，此类包含具有若干重载的单个 Compile 方法。您可调用 Compile 方法以创建表示已编译查询的新委托。在使用 ObjectContext 输入参数值及其他参数值调用该委托时，它将生成某个结果（例如 IQueryable<(Of <(T>)>) 实例）。首次调用该委托时，将转换并缓存查询。 提供对查询的编译和缓存以供重新使用。从概念上讲，此类包含具有若干重载的单个 Compile 方法。您可调用 Compile 方法以创建表示已编译查询的新委托。在使用 ObjectContext 输入参数值及其他参数值调用该委托时，它将生成某个结果（例如 IQueryable<(Of <(T>)>) 实例）。首次调用该委托时，将转换并缓存查询。 提供对查询的编译和缓存以供重新使用。从概念上讲，此类包含具有若干重载的单个 Compile 方法。您可调用 Compile 方法以创建表示已编译查询的新委托。在使用 ObjectContext 输入参数值及其他参数值调用该委托时，它将生成某个结果（例如 IQueryable<(Of <(T>)>) 实例）。首次调用该委托时，将转换并缓存查询。

下面的示例将编译并调用一个查询，该查询接受 DateTime 和 Decimal 输入参数，并返回一个订单日期晚于 2003 年 3 月 8 日且应付款总额少于 300.00 美元的订单序列：

ReadOnly s_compQuery5 = _
   CompiledQuery.Compile(Of AdventureWorksEntities, DateTime, Decimal, IQueryable(Of SalesOrderHeader))( _
                Function(ctx, orderDate, totalDue) From product In ctx.SalesOrderHeaders _
                                                   Where Product.OrderDate > orderDate _
                                                      And Product.TotalDue < totalDue _
                                                   Order By Product.OrderDate _
                                                   Select Product)
Sub CompiledQuery5()

    Using AWEntities As New AdventureWorksEntities()

        Dim orderedAfterDate As DateTime = New DateTime(2003, 3, 8)
        Dim amountDue As Decimal = 300.0

        Dim orders As IQueryable(Of SalesOrderHeader) = _
            s_compQuery5.Invoke(AWEntities, orderedAfterDate, amountDue)

        For Each order In orders
            Console.WriteLine("ID: {0} Order date: {1} Total due: {2}", _
                              order.SalesOrderID, order.OrderDate, order.TotalDue)
        Next

    End Using
End Sub

static readonly Func<AdventureWorksEntities, DateTime, Decimal, IQueryable<SalesOrderHeader>> s_compiledQuery5 =
    CompiledQuery.Compile<AdventureWorksEntities, DateTime, Decimal, IQueryable<SalesOrderHeader>>(
            (ctx, orderDate, totalDue) => from product in ctx.SalesOrderHeaders
                                          where product.OrderDate > orderDate
                                             && product.TotalDue < totalDue
                                          orderby product.OrderDate
                                          select product);

static void CompiledQuery5()
{
    using (AdventureWorksEntities context = new AdventureWorksEntities())
    {
        DateTime date = new DateTime(2003, 3, 8);
        Decimal amountDue = 300.00M;

        IQueryable<SalesOrderHeader> orders = s_compiledQuery5.Invoke(context, date, amountDue);

        foreach (SalesOrderHeader order in orders)
        {
            Console.WriteLine("ID: {0} Order date: {1} Total due: {2}", order.SalesOrderID, order.OrderDate, order.TotalDue);
        }
    }
}

System.Data.Objects System.Data.Objects..::.CompiledQueryCompiledQuery
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 成员
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery 成员

CompiledQuery 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CompiledQuery 类

表示一个缓存的 LINQ to Entities 查询。

CompiledQuery 类型公开以下成员。

名称 说明
页首

参考

CompiledQuery 类
System.Data.Objects 命名空间


CompiledQuery 方法

CompiledQuery 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CompiledQuery 类

CompiledQuery 类型公开以下成员。

名称 说明
页首

参考

CompiledQuery 类
System.Data.Objects 命名空间


CompiledQuery ..::.Compile 方法

CompiledQuery
.
.
::
.
Compile 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

名称 说明
页首

参考

CompiledQuery 类
CompiledQuery 成员
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TArg7

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。

TArg8

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TArg7

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。

TArg8

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。

TArg9

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TArg7

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。

TArg8

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。

TArg9

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。

TArg10

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TArg7

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。

TArg8

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。

TArg9

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。

TArg10

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。

TArg11

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TArg12, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TArg7

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。

TArg8

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。

TArg9

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。

TArg10

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。

TArg11

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。

TArg12

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg12 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg12 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult >)>) >)

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TArg12, typename TArg13, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TArg7

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。

TArg8

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。

TArg9

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。

TArg10

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。

TArg11

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。

TArg12

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg12 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg12 必须是基元类型。

TArg13

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg13 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg13 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14,

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TArg12, typename TArg13, typename TArg14, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TArg14, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TArg14, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TArg7

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。

TArg8

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。

TArg9

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。

TArg10

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。

TArg11

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。

TArg12

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg12 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg12 必须是基元类型。

TArg13

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg13 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg13 必须是基元类型。

TArg14

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg14 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg14 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13,

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9, typename TArg10, typename TArg11, typename TArg12, typename TArg13, typename TArg14, typename TArg15, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TArg14, 'TArg15, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TArg8, 'TArg9, 'TArg10, 'TArg11, 'TArg12, 'TArg13, 'TArg14, 'TArg15, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TArg7

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。

TArg8

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg8 必须是基元类型。

TArg9

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg9 必须是基元类型。

TArg10

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg10 必须是基元类型。

TArg11

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg11 必须是基元类型。

TArg12

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg12 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg12 必须是基元类型。

TArg13

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg13 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg13 必须是基元类型。

TArg14

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg14 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg14 必须是基元类型。

TArg15

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg15 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg15 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9, TArg10, TArg11, TArg12, TArg13, TArg14, TArg15, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TResult) ( _
    query As Expression(Of Func(Of TArg0, TResult)) _
) As Func(Of TArg0, TResult)
public static Func<TArg0, TResult> Compile<TArg0, TResult>(
    Expression<Func<TArg0, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TResult>^ Compile(
    Expression<Func<TArg0, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TResult>> -> Func<'TArg0, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TResult
>
)
>
)

Func<(Of <(T, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

下面的示例将编译并调用一个返回 ObjectQuery<(Of <(T>)>) 实例的查询：

ReadOnly s_compQuery1 As Func(Of AdventureWorksEntities, ObjectQuery(Of SalesOrderHeader)) = _
    CompiledQuery.Compile(Of AdventureWorksEntities, ObjectQuery(Of SalesOrderHeader))( _
                Function(ctx) ctx.SalesOrderHeaders)

Sub CompiledQuery1_MQ()

    Using AWEntities As New AdventureWorksEntities()

        Dim orders As ObjectQuery(Of SalesOrderHeader) = s_compQuery1.Invoke(AWEntities)

        For Each order In orders
            Console.WriteLine(order.SalesOrderID)
        Next

    End Using
End Sub

static readonly Func<AdventureWorksEntities, ObjectQuery<SalesOrderHeader>> s_compiledQuery1 =
    CompiledQuery.Compile<AdventureWorksEntities, ObjectQuery<SalesOrderHeader>>(
            ctx => ctx.SalesOrderHeaders);

static void CompiledQuery1_MQ()
{

    using (AdventureWorksEntities context = new AdventureWorksEntities())
    {
        IQueryable<SalesOrderHeader> orders = s_compiledQuery1.Invoke(context);

        foreach (SalesOrderHeader order in orders)
            Console.WriteLine(order.SalesOrderID);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TResult)) _
) As Func(Of TArg0, TArg1, TResult)
public static Func<TArg0, TArg1, TResult> Compile<TArg0, TArg1, TResult>(
    Expression<Func<TArg0, TArg1, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TResult>> -> Func<'TArg0, 'TArg1, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TResult
>
)
>
)

Func<(Of <(T1, T2, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

下面的示例将编译并调用一个查询，该查询接受 Decimal 输入参数，并返回一个应付款总额大于或等于 200.00 美元的订单序列：

ReadOnly s_compQuery2 As Func(Of AdventureWorksEntities, Decimal, IQueryable(Of SalesOrderHeader)) = _
    CompiledQuery.Compile(Of AdventureWorksEntities, Decimal, IQueryable(Of SalesOrderHeader))( _
                Function(ctx As AdventureWorksEntities, total As Decimal) _
                    From order In ctx.SalesOrderHeaders _
                    Where (order.TotalDue >= total) _
                    Select order)

Sub CompiledQuery2()
    Using AWEntities As New AdventureWorksEntities()

        Dim totalDue As Decimal = 200.0

        Dim orders As IQueryable(Of SalesOrderHeader) = s_compQuery2.Invoke(AWEntities, totalDue)

        For Each order In orders
            Console.WriteLine("ID: {0}  Order date: {1} Total due: {2}", _
                                    order.SalesOrderID, _
                                    order.OrderDate, _
                                    order.TotalDue)
        Next
    End Using
End Sub

static readonly Func<AdventureWorksEntities, Decimal, IQueryable<SalesOrderHeader>> s_compiledQuery2 =
    CompiledQuery.Compile<AdventureWorksEntities, Decimal, IQueryable<SalesOrderHeader>>(
            (ctx, total) => from order in ctx.SalesOrderHeaders
                            where order.TotalDue >= total
                            select order);

static void CompiledQuery2()
{
    using (AdventureWorksEntities context = new AdventureWorksEntities())
    {
        Decimal totalDue = 200.00M;

        IQueryable<SalesOrderHeader> orders = s_compiledQuery2.Invoke(context, totalDue);

        foreach (SalesOrderHeader order in orders)
        {
            Console.WriteLine("ID: {0}  Order date: {1} Total due: {2}",
                order.SalesOrderID,
                order.OrderDate,
                order.TotalDue);
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TResult)
public static Func<TArg0, TArg1, TArg2, TResult> Compile<TArg0, TArg1, TArg2, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

下面的示例将编译并调用一个查询，该查询接受 DateTime 和 Decimal 输入参数，并返回一个订单日期晚于 2003 年 3 月 8 日且应付款总额少于 300.00 美元的订单序列：

ReadOnly s_compQuery5 = _
   CompiledQuery.Compile(Of AdventureWorksEntities, DateTime, Decimal, IQueryable(Of SalesOrderHeader))( _
                Function(ctx, orderDate, totalDue) From product In ctx.SalesOrderHeaders _
                                                   Where Product.OrderDate > orderDate _
                                                      And Product.TotalDue < totalDue _
                                                   Order By Product.OrderDate _
                                                   Select Product)
Sub CompiledQuery5()

    Using AWEntities As New AdventureWorksEntities()

        Dim orderedAfterDate As DateTime = New DateTime(2003, 3, 8)
        Dim amountDue As Decimal = 300.0

        Dim orders As IQueryable(Of SalesOrderHeader) = _
            s_compQuery5.Invoke(AWEntities, orderedAfterDate, amountDue)

        For Each order In orders
            Console.WriteLine("ID: {0} Order date: {1} Total due: {2}", _
                              order.SalesOrderID, order.OrderDate, order.TotalDue)
        Next

    End Using
End Sub

static readonly Func<AdventureWorksEntities, DateTime, Decimal, IQueryable<SalesOrderHeader>> s_compiledQuery5 =
    CompiledQuery.Compile<AdventureWorksEntities, DateTime, Decimal, IQueryable<SalesOrderHeader>>(
            (ctx, orderDate, totalDue) => from product in ctx.SalesOrderHeaders
                                          where product.OrderDate > orderDate
                                             && product.TotalDue < totalDue
                                          orderby product.OrderDate
                                          select product);

static void CompiledQuery5()
{
    using (AdventureWorksEntities context = new AdventureWorksEntities())
    {
        DateTime date = new DateTime(2003, 3, 8);
        Decimal amountDue = 300.00M;

        IQueryable<SalesOrderHeader> orders = s_compiledQuery5.Invoke(context, date, amountDue);

        foreach (SalesOrderHeader order in orders)
        {
            Console.WriteLine("ID: {0} Order date: {1} Total due: {2}", order.SalesOrderID, order.OrderDate, order.TotalDue);
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3
TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CompiledQuery ..::.Compile <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult >)>) 方法 (Expression <(Of <(Func <(Of <(TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult >)>) >)>))

CompiledQuery
.
.
::
.
Compile
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult
>
)
>
)
方法 (Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult
>
)
>
)
>
)
>
)
)
CompiledQuery 类

创建一个表示已编译的 LINQ to Entities 查询的新委托。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function Compile(Of TArg0 As ObjectContext, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult) ( _
    query As Expression(Of Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult)) _
) As Func(Of TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult)
public static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult> Compile<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult>(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult>> query
)
where TArg0 : ObjectContext

public:
generic<typename TArg0, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TResult>
where TArg0 : ObjectContext
static Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult>^ Compile(
    Expression<Func<TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult>^>^ query
)
static member Compile :
        query:Expression<Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TResult>> -> Func<'TArg0, 'TArg1, 'TArg2, 'TArg3, 'TArg4, 'TArg5, 'TArg6, 'TArg7, 'TResult>  when 'TArg0 : ObjectContext

类型参数

TArg0

由 ObjectContext 派生的类型。

TArg1

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg1 必须是基元类型。

TArg2

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg2 必须是基元类型。

TArg3

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg3 必须是基元类型。

TArg4

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg4 必须是基元类型。

TArg5

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg5 必须是基元类型。

TArg6

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg6 必须是基元类型。

TArg7

表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。 表示在执行由此方法返回的委托时必须传入的参数的类型。TArg7 必须是基元类型。

TResult

通过执行由 Compile 方法返回的委托所返回的查询结果的类型 T。

参数

query
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult
>
)
>
)
>
)
>
)

要编译的 lambda 表达式。

返回值

类型： System Func
<
(Of
<
(
TArg0, TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TResult
>
)
>
)

Func<(Of <(T1, T2, T3, T4, T5, T6, T7, T8, TResult>)>)，这是一个表示已编译的 LINQ to Entities 查询的泛型委托。

有关更多信息和示例，请参见Compiled Queries。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

CompiledQuery 类
CompiledQuery 成员
Compile 重载
System.Data.Objects 命名空间

其他资源

Compiled Queries (LINQ to Entities)


CurrentValueRecord 类

CurrentValueRecord 类
成员

提供对对象数据的当前值的访问。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class CurrentValueRecord _
    Inherits DbUpdatableDataRecord
public abstract class CurrentValueRecord : DbUpdatableDataRecord
public ref class CurrentValueRecord abstract : public DbUpdatableDataRecord
[<AbstractClassAttribute>]
type CurrentValueRecord =
    class
        inherit DbUpdatableDataRecord
    end

CurrentValueRecord 对象包含 ObjectStateEntry 跟踪的对象或关系的 DBDataRecord 视图。

CurrentValueRecord 实现提供对实体、关系和元数据的只读访问的 IExtendedDataRecord。

实现用于更新当前值的方法。

System.Data.Objects System.Data.Objects..::.CurrentValueRecordCurrentValueRecord
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

CurrentValueRecord 成员
System.Data.Objects 命名空间


CurrentValueRecord 成员

CurrentValueRecord 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CurrentValueRecord 类

提供对对象数据的当前值的访问。

CurrentValueRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

CurrentValueRecord 类
System.Data.Objects 命名空间


CurrentValueRecord 方法

CurrentValueRecord 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CurrentValueRecord 类

CurrentValueRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

CurrentValueRecord 类
System.Data.Objects 命名空间


CurrentValueRecord ..::.GetEvents 方法

CurrentValueRecord
.
.
::
.
GetEvents 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CurrentValueRecord 类

名称 说明
页首

参考

CurrentValueRecord 类
CurrentValueRecord 成员
System.Data.Objects 命名空间


CurrentValueRecord ..::.GetProperties 方法

CurrentValueRecord
.
.
::
.
GetProperties 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CurrentValueRecord 类

名称 说明
页首

参考

CurrentValueRecord 类
CurrentValueRecord 成员
System.Data.Objects 命名空间


CurrentValueRecord 属性

CurrentValueRecord 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CurrentValueRecord 类

CurrentValueRecord 类型公开以下成员。

名称 说明
页首

参考

CurrentValueRecord 类
System.Data.Objects 命名空间


CurrentValueRecord ..::.Item 属性

CurrentValueRecord
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
CurrentValueRecord 类

返回字段值。

获取一个字段值。

名称 说明
页首

参考

CurrentValueRecord 类
CurrentValueRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord 类

DbUpdatableDataRecord 类
成员

提供对对象数据的原始值的访问。DbUpdatableDataRecord 实现可用于更新对象的原始值的方法。 提供对对象数据的原始值的访问。DbUpdatableDataRecord 实现可用于更新对象的原始值的方法。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class DbUpdatableDataRecord _
    Inherits DbDataRecord _
    Implements IExtendedDataRecord, IDataRecord
public abstract class DbUpdatableDataRecord : DbDataRecord,
    IExtendedDataRecord, IDataRecord
public ref class DbUpdatableDataRecord abstract : public DbDataRecord,
    IExtendedDataRecord, IDataRecord
[<AbstractClassAttribute>]
type DbUpdatableDataRecord =
    class
        inherit DbDataRecord
        interface IExtendedDataRecord
        interface IDataRecord
    end

System.Data.Objects System.Data.Objects..::.DbUpdatableDataRecordDbUpdatableDataRecord

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord 成员

DbUpdatableDataRecord 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUpdatableDataRecord 类

提供对对象数据的原始值的访问。DbUpdatableDataRecord 实现可用于更新对象的原始值的方法。 提供对对象数据的原始值的访问。DbUpdatableDataRecord 实现可用于更新对象的原始值的方法。

DbUpdatableDataRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

DbUpdatableDataRecord 类
System.Data.Objects 命名空间


DbUpdatableDataRecord 方法

DbUpdatableDataRecord 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUpdatableDataRecord 类

DbUpdatableDataRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

DbUpdatableDataRecord 类
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetBoolean 方法

DbUpdatableDataRecord
.
.
::
.
GetBoolean 方法
DbUpdatableDataRecord 类

检索布尔形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetBoolean ( _
    ordinal As Integer _
) As Boolean
public override bool GetBoolean(
    int ordinal
)
public:
virtual bool GetBoolean(
    int ordinal
) override
abstract GetBoolean :
        ordinal:int -> bool
override GetBoolean :
        ordinal:int -> bool

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Boolean
布尔形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetByte 方法

DbUpdatableDataRecord
.
.
::
.
GetByte 方法
DbUpdatableDataRecord 类

检索 byte 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetByte ( _
    ordinal As Integer _
) As Byte
public override byte GetByte(
    int ordinal
)
public:
virtual unsigned char GetByte(
    int ordinal
) override
abstract GetByte :
        ordinal:int -> byte
override GetByte :
        ordinal:int -> byte

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Byte
byte 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetBytes 方法

DbUpdatableDataRecord
.
.
::
.
GetBytes 方法
DbUpdatableDataRecord 类

检索 byte 数组形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetBytes ( _
    ordinal As Integer, _
    dataIndex As Long, _
    buffer As Byte(), _
    bufferIndex As Integer, _
    length As Integer _
) As Long
public override long GetBytes(
    int ordinal,
    long dataIndex,
    byte[] buffer,
    int bufferIndex,
    int length
)
public:
virtual long long GetBytes(
    int ordinal,
    long long dataIndex,
    array<unsigned char>^ buffer,
    int bufferIndex,
    int length
) override
abstract GetBytes :
        ordinal:int *
        dataIndex:int64 *
        buffer:byte[] *
        bufferIndex:int *
        length:int -> int64
override GetBytes :
        ordinal:int *
        dataIndex:int64 *
        buffer:byte[] *
        bufferIndex:int *
        length:int -> int64

参数

ordinal
类型： System Int32
字段的序号。
dataIndex
类型： System Int64
数据复制起始位置的索引。
buffer
类型：
array<
System Byte
>
[]
()
[]

数据复制到其中的目标缓冲区。
bufferIndex
类型： System Int32
目标缓冲区中复制起始位置的索引。
length
类型： System Int32
要复制的字节数。

返回值

类型： System Int64
已复制的字节数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetChar 方法

DbUpdatableDataRecord
.
.
::
.
GetChar 方法
DbUpdatableDataRecord 类

检索 char 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetChar ( _
    ordinal As Integer _
) As Char
public override char GetChar(
    int ordinal
)
public:
virtual wchar_t GetChar(
    int ordinal
) override
abstract GetChar :
        ordinal:int -> char
override GetChar :
        ordinal:int -> char

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Char
char 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetChars 方法

DbUpdatableDataRecord
.
.
::
.
GetChars 方法
DbUpdatableDataRecord 类

检索 char 数组形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetChars ( _
    ordinal As Integer, _
    dataIndex As Long, _
    buffer As Char(), _
    bufferIndex As Integer, _
    length As Integer _
) As Long
public override long GetChars(
    int ordinal,
    long dataIndex,
    char[] buffer,
    int bufferIndex,
    int length
)
public:
virtual long long GetChars(
    int ordinal,
    long long dataIndex,
    array<wchar_t>^ buffer,
    int bufferIndex,
    int length
) override
abstract GetChars :
        ordinal:int *
        dataIndex:int64 *
        buffer:char[] *
        bufferIndex:int *
        length:int -> int64
override GetChars :
        ordinal:int *
        dataIndex:int64 *
        buffer:char[] *
        bufferIndex:int *
        length:int -> int64

参数

ordinal
类型： System Int32
字段的序号。
dataIndex
类型： System Int64
数据复制起始位置的索引。
buffer
类型：
array<
System Char
>
[]
()
[]

数据复制到其中的目标缓冲区。
bufferIndex
类型： System Int32
目标缓冲区中复制起始位置的索引。
length
类型： System Int32
要复制的字符数。

返回值

类型： System Int64
已复制的字符数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetDataReader 方法

DbUpdatableDataRecord
.
.
::
.
GetDataReader 方法
DbUpdatableDataRecord 类

检索 DbDataReader 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetDataReader ( _
    i As Integer _
) As DbDataReader
public DbDataReader GetDataReader(
    int i
)
public:
virtual DbDataReader^ GetDataReader(
    int i
) sealed
abstract GetDataReader :
        i:int -> DbDataReader
override GetDataReader :
        i:int -> DbDataReader

参数

i
类型： System Int32
字段的序号。

返回值

类型： System.Data.Common DbDataReader
DbDataReader 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetDataRecord 方法

DbUpdatableDataRecord
.
.
::
.
GetDataRecord 方法
DbUpdatableDataRecord 类

检索 DbDataRecord 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetDataRecord ( _
    ordinal As Integer _
) As DbDataRecord
public DbDataRecord GetDataRecord(
    int ordinal
)
public:
virtual DbDataRecord^ GetDataRecord(
    int ordinal
) sealed
abstract GetDataRecord :
        ordinal:int -> DbDataRecord
override GetDataRecord :
        ordinal:int -> DbDataRecord

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System.Data.Common DbDataRecord
DbDataRecord 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetDataTypeName 方法

DbUpdatableDataRecord
.
.
::
.
GetDataTypeName 方法
DbUpdatableDataRecord 类

检索字段数据类型的名称。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetDataTypeName ( _
    ordinal As Integer _
) As String
public override string GetDataTypeName(
    int ordinal
)
public:
virtual String^ GetDataTypeName(
    int ordinal
) override
abstract GetDataTypeName :
        ordinal:int -> string
override GetDataTypeName :
        ordinal:int -> string

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System String
字段数据类型的名称。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetDateTime 方法

DbUpdatableDataRecord
.
.
::
.
GetDateTime 方法
DbUpdatableDataRecord 类

检索 DateTime 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetDateTime ( _
    ordinal As Integer _
) As DateTime
public override DateTime GetDateTime(
    int ordinal
)
public:
virtual DateTime GetDateTime(
    int ordinal
) override
abstract GetDateTime :
        ordinal:int -> DateTime
override GetDateTime :
        ordinal:int -> DateTime

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System DateTime
DateTime 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetDbDataReader 方法

DbUpdatableDataRecord
.
.
::
.
GetDbDataReader 方法
DbUpdatableDataRecord 类

以 DbDataReader 形式检索字段值

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Overrides Function GetDbDataReader ( _
    ordinal As Integer _
) As DbDataReader
protected override DbDataReader GetDbDataReader(
    int ordinal
)
protected:
virtual DbDataReader^ GetDbDataReader(
    int ordinal
) override
abstract GetDbDataReader :
        ordinal:int -> DbDataReader
override GetDbDataReader :
        ordinal:int -> DbDataReader

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System.Data.Common DbDataReader
DbDataReader 形式的字段值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetDecimal 方法

DbUpdatableDataRecord
.
.
::
.
GetDecimal 方法
DbUpdatableDataRecord 类

检索 decimal 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetDecimal ( _
    ordinal As Integer _
) As Decimal
public override decimal GetDecimal(
    int ordinal
)
public:
virtual Decimal GetDecimal(
    int ordinal
) override
abstract GetDecimal :
        ordinal:int -> decimal
override GetDecimal :
        ordinal:int -> decimal

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Decimal
decimal 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetDouble 方法

DbUpdatableDataRecord
.
.
::
.
GetDouble 方法
DbUpdatableDataRecord 类

检索 double 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetDouble ( _
    ordinal As Integer _
) As Double
public override double GetDouble(
    int ordinal
)
public:
virtual double GetDouble(
    int ordinal
) override
abstract GetDouble :
        ordinal:int -> float
override GetDouble :
        ordinal:int -> float

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Double
double 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetEvents 方法

DbUpdatableDataRecord
.
.
::
.
GetEvents 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUpdatableDataRecord 类

名称 说明
页首

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetFieldType 方法

DbUpdatableDataRecord
.
.
::
.
GetFieldType 方法
DbUpdatableDataRecord 类

检索字段的类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetFieldType ( _
    ordinal As Integer _
) As Type
public override Type GetFieldType(
    int ordinal
)
public:
virtual Type^ GetFieldType(
    int ordinal
) override
abstract GetFieldType :
        ordinal:int -> Type
override GetFieldType :
        ordinal:int -> Type

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Type
字段类型。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetFloat 方法

DbUpdatableDataRecord
.
.
::
.
GetFloat 方法
DbUpdatableDataRecord 类

检索 float 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetFloat ( _
    ordinal As Integer _
) As Single
public override float GetFloat(
    int ordinal
)
public:
virtual float GetFloat(
    int ordinal
) override
abstract GetFloat :
        ordinal:int -> float32
override GetFloat :
        ordinal:int -> float32

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Single
float 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetGuid 方法

DbUpdatableDataRecord
.
.
::
.
GetGuid 方法
DbUpdatableDataRecord 类

检索 Guid 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetGuid ( _
    ordinal As Integer _
) As Guid
public override Guid GetGuid(
    int ordinal
)
public:
virtual Guid GetGuid(
    int ordinal
) override
abstract GetGuid :
        ordinal:int -> Guid
override GetGuid :
        ordinal:int -> Guid

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Guid
Guid 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetInt16 方法

DbUpdatableDataRecord
.
.
::
.
GetInt16 方法
DbUpdatableDataRecord 类

检索 Int16 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetInt16 ( _
    ordinal As Integer _
) As Short
public override short GetInt16(
    int ordinal
)
public:
virtual short GetInt16(
    int ordinal
) override
abstract GetInt16 :
        ordinal:int -> int16
override GetInt16 :
        ordinal:int -> int16

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Int16
Int16 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetInt32 方法

DbUpdatableDataRecord
.
.
::
.
GetInt32 方法
DbUpdatableDataRecord 类

检索 Int32 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetInt32 ( _
    ordinal As Integer _
) As Integer
public override int GetInt32(
    int ordinal
)
public:
virtual int GetInt32(
    int ordinal
) override
abstract GetInt32 :
        ordinal:int -> int
override GetInt32 :
        ordinal:int -> int

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Int32
Int32 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetInt64 方法

DbUpdatableDataRecord
.
.
::
.
GetInt64 方法
DbUpdatableDataRecord 类

检索 Int64 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetInt64 ( _
    ordinal As Integer _
) As Long
public override long GetInt64(
    int ordinal
)
public:
virtual long long GetInt64(
    int ordinal
) override
abstract GetInt64 :
        ordinal:int -> int64
override GetInt64 :
        ordinal:int -> int64

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Int64
Int64 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetName 方法

DbUpdatableDataRecord
.
.
::
.
GetName 方法
DbUpdatableDataRecord 类

检索字段的名称。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetName ( _
    ordinal As Integer _
) As String
public override string GetName(
    int ordinal
)
public:
virtual String^ GetName(
    int ordinal
) override
abstract GetName :
        ordinal:int -> string
override GetName :
        ordinal:int -> string

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System String
字段名。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetOrdinal 方法

DbUpdatableDataRecord
.
.
::
.
GetOrdinal 方法
DbUpdatableDataRecord 类

使用字段名检索字段的序号。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetOrdinal ( _
    name As String _
) As Integer
public override int GetOrdinal(
    string name
)
public:
virtual int GetOrdinal(
    String^ name
) override
abstract GetOrdinal :
        name:string -> int
override GetOrdinal :
        name:string -> int

参数

name
类型： System String
字段名。

返回值

类型： System Int32
字段的序号。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetProperties 方法

DbUpdatableDataRecord
.
.
::
.
GetProperties 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUpdatableDataRecord 类

名称 说明
页首

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetRecordValue 方法

DbUpdatableDataRecord
.
.
::
.
GetRecordValue 方法
DbUpdatableDataRecord 类

检索字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected MustOverride Function GetRecordValue ( _
    ordinal As Integer _
) As Object
protected abstract Object GetRecordValue(
    int ordinal
)
protected:
virtual Object^ GetRecordValue(
    int ordinal
) abstract
abstract GetRecordValue :
        ordinal:int -> Object

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Object
字段值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetString 方法

DbUpdatableDataRecord
.
.
::
.
GetString 方法
DbUpdatableDataRecord 类

检索字符串形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetString ( _
    ordinal As Integer _
) As String
public override string GetString(
    int ordinal
)
public:
virtual String^ GetString(
    int ordinal
) override
abstract GetString :
        ordinal:int -> string
override GetString :
        ordinal:int -> string

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System String
字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetValue 方法

DbUpdatableDataRecord
.
.
::
.
GetValue 方法
DbUpdatableDataRecord 类

检索字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetValue ( _
    ordinal As Integer _
) As Object
public override Object GetValue(
    int ordinal
)
public:
virtual Object^ GetValue(
    int ordinal
) override
abstract GetValue :
        ordinal:int -> Object
override GetValue :
        ordinal:int -> Object

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Object
字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.GetValues 方法

DbUpdatableDataRecord
.
.
::
.
GetValues 方法
DbUpdatableDataRecord 类

使用当前记录的字段值来填充对象数组。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function GetValues ( _
    values As Object() _
) As Integer
public override int GetValues(
    Object[] values
)
public:
virtual int GetValues(
    array<Object^>^ values
) override
abstract GetValues :
        values:Object[] -> int
override GetValues :
        values:Object[] -> int

参数

values
类型：
array<
System Object
>
[]
()
[]

用于存储字段值的对象数组。

返回值

类型： System Int32
返回的字段值的数目。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.IDataRecord ..::.GetData 方法

DbUpdatableDataRecord
.
.
::
.
IDataRecord
.
.
::
.
GetData 方法
DbUpdatableDataRecord 类

检索 IDataReader 形式的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Function GetData ( _
    ordinal As Integer _
) As IDataReader Implements IDataRecord.GetData
IDataReader IDataRecord.GetData(
    int ordinal
)
private:
virtual IDataReader^ GetData(
    int ordinal
) sealed = IDataRecord::GetData
private abstract GetData :
        ordinal:int -> IDataReader
private override GetData :
        ordinal:int -> IDataReader

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System.Data IDataReader
IDataReader 形式的字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.IsDBNull 方法

DbUpdatableDataRecord
.
.
::
.
IsDBNull 方法
DbUpdatableDataRecord 类

返回指示指定字段是否设置为 DBNull 的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function IsDBNull ( _
    ordinal As Integer _
) As Boolean
public override bool IsDBNull(
    int ordinal
)
public:
virtual bool IsDBNull(
    int ordinal
) override
abstract IsDBNull :
        ordinal:int -> bool
override IsDBNull :
        ordinal:int -> bool

参数

ordinal
类型： System Int32
字段的序号。

返回值

类型： System Boolean
如果该字段设置为 DBNull，则为 true；否则为 false。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetBoolean 方法

DbUpdatableDataRecord
.
.
::
.
SetBoolean 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetBoolean ( _
    ordinal As Integer, _
    value As Boolean _
)
public void SetBoolean(
    int ordinal,
    bool value
)
public:
void SetBoolean(
    int ordinal,
    bool value
)
member SetBoolean :
        ordinal:int *
        value:bool -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Boolean
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetByte 方法

DbUpdatableDataRecord
.
.
::
.
SetByte 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetByte ( _
    ordinal As Integer, _
    value As Byte _
)
public void SetByte(
    int ordinal,
    byte value
)
public:
void SetByte(
    int ordinal,
    unsigned char value
)
member SetByte :
        ordinal:int *
        value:byte -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Byte
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetChar 方法

DbUpdatableDataRecord
.
.
::
.
SetChar 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetChar ( _
    ordinal As Integer, _
    value As Char _
)
public void SetChar(
    int ordinal,
    char value
)
public:
void SetChar(
    int ordinal,
    wchar_t value
)
member SetChar :
        ordinal:int *
        value:char -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Char
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetDataRecord 方法

DbUpdatableDataRecord
.
.
::
.
SetDataRecord 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetDataRecord ( _
    ordinal As Integer, _
    value As IDataRecord _
)
public void SetDataRecord(
    int ordinal,
    IDataRecord value
)
public:
void SetDataRecord(
    int ordinal,
    IDataRecord^ value
)
member SetDataRecord :
        ordinal:int *
        value:IDataRecord -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System.Data IDataRecord
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetDateTime 方法

DbUpdatableDataRecord
.
.
::
.
SetDateTime 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetDateTime ( _
    ordinal As Integer, _
    value As DateTime _
)
public void SetDateTime(
    int ordinal,
    DateTime value
)
public:
void SetDateTime(
    int ordinal,
    DateTime value
)
member SetDateTime :
        ordinal:int *
        value:DateTime -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System DateTime
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetDBNull 方法

DbUpdatableDataRecord
.
.
::
.
SetDBNull 方法
DbUpdatableDataRecord 类

将一个字段设置为 DBNull 值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetDBNull ( _
    ordinal As Integer _
)
public void SetDBNull(
    int ordinal
)
public:
void SetDBNull(
    int ordinal
)
member SetDBNull :
        ordinal:int -> unit

参数

ordinal
类型： System Int32
字段的序号。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetDecimal 方法

DbUpdatableDataRecord
.
.
::
.
SetDecimal 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetDecimal ( _
    ordinal As Integer, _
    value As Decimal _
)
public void SetDecimal(
    int ordinal,
    decimal value
)
public:
void SetDecimal(
    int ordinal,
    Decimal value
)
member SetDecimal :
        ordinal:int *
        value:decimal -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Decimal
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetDouble 方法

DbUpdatableDataRecord
.
.
::
.
SetDouble 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetDouble ( _
    ordinal As Integer, _
    value As Double _
)
public void SetDouble(
    int ordinal,
    double value
)
public:
void SetDouble(
    int ordinal,
    double value
)
member SetDouble :
        ordinal:int *
        value:float -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Double
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetFloat 方法

DbUpdatableDataRecord
.
.
::
.
SetFloat 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetFloat ( _
    ordinal As Integer, _
    value As Single _
)
public void SetFloat(
    int ordinal,
    float value
)
public:
void SetFloat(
    int ordinal,
    float value
)
member SetFloat :
        ordinal:int *
        value:float32 -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Single
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetGuid 方法

DbUpdatableDataRecord
.
.
::
.
SetGuid 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetGuid ( _
    ordinal As Integer, _
    value As Guid _
)
public void SetGuid(
    int ordinal,
    Guid value
)
public:
void SetGuid(
    int ordinal,
    Guid value
)
member SetGuid :
        ordinal:int *
        value:Guid -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Guid
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetInt16 方法

DbUpdatableDataRecord
.
.
::
.
SetInt16 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetInt16 ( _
    ordinal As Integer, _
    value As Short _
)
public void SetInt16(
    int ordinal,
    short value
)
public:
void SetInt16(
    int ordinal,
    short value
)
member SetInt16 :
        ordinal:int *
        value:int16 -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Int16
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetInt32 方法

DbUpdatableDataRecord
.
.
::
.
SetInt32 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetInt32 ( _
    ordinal As Integer, _
    value As Integer _
)
public void SetInt32(
    int ordinal,
    int value
)
public:
void SetInt32(
    int ordinal,
    int value
)
member SetInt32 :
        ordinal:int *
        value:int -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Int32
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetInt64 方法

DbUpdatableDataRecord
.
.
::
.
SetInt64 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetInt64 ( _
    ordinal As Integer, _
    value As Long _
)
public void SetInt64(
    int ordinal,
    long value
)
public:
void SetInt64(
    int ordinal,
    long long value
)
member SetInt64 :
        ordinal:int *
        value:int64 -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Int64
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetRecordValue 方法

DbUpdatableDataRecord
.
.
::
.
SetRecordValue 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected MustOverride Sub SetRecordValue ( _
    ordinal As Integer, _
    value As Object _
)
protected abstract void SetRecordValue(
    int ordinal,
    Object value
)
protected:
virtual void SetRecordValue(
    int ordinal,
    Object^ value
) abstract
abstract SetRecordValue :
        ordinal:int *
        value:Object -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Object
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetString 方法

DbUpdatableDataRecord
.
.
::
.
SetString 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetString ( _
    ordinal As Integer, _
    value As String _
)
public void SetString(
    int ordinal,
    string value
)
public:
void SetString(
    int ordinal,
    String^ value
)
member SetString :
        ordinal:int *
        value:string -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System String
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetValue 方法

DbUpdatableDataRecord
.
.
::
.
SetValue 方法
DbUpdatableDataRecord 类

设置记录中某个字段的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub SetValue ( _
    ordinal As Integer, _
    value As Object _
)
public void SetValue(
    int ordinal,
    Object value
)
public:
void SetValue(
    int ordinal,
    Object^ value
)
member SetValue :
        ordinal:int *
        value:Object -> unit

参数

ordinal
类型： System Int32
字段的序号。
value
类型： System Object
字段的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.SetValues 方法

DbUpdatableDataRecord
.
.
::
.
SetValues 方法
DbUpdatableDataRecord 类

设置记录中的字段值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function SetValues ( _
    ParamArray values As Object() _
) As Integer
public int SetValues(
    params Object[] values
)
public:
int SetValues(
    ... array<Object^>^ values
)
member SetValues :
        values:Object[] -> int

参数

values
类型：
array<
System Object
>
[]
()
[]

字段的值。

返回值

类型： System Int32
已设置的字段数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord 属性

DbUpdatableDataRecord 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUpdatableDataRecord 类

DbUpdatableDataRecord 类型公开以下成员。

名称 说明
页首

参考

DbUpdatableDataRecord 类
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.DataRecordInfo 属性

DbUpdatableDataRecord
.
.
::
.
DataRecordInfo 属性
DbUpdatableDataRecord 类

获取数据记录信息。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overridable ReadOnly Property DataRecordInfo As DataRecordInfo
    Get
public virtual DataRecordInfo DataRecordInfo { get; }
public:
virtual property DataRecordInfo^ DataRecordInfo {
    DataRecordInfo^ get ();
}
abstract DataRecordInfo : DataRecordInfo
override DataRecordInfo : DataRecordInfo

属性值

类型： System.Data.Common DataRecordInfo
一个 DataRecordInfo 对象。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.FieldCount 属性

DbUpdatableDataRecord
.
.
::
.
FieldCount 属性
DbUpdatableDataRecord 类

获取记录中的字段数。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides ReadOnly Property FieldCount As Integer
    Get
public override int FieldCount { get; }
public:
virtual property int FieldCount {
    int get () override;
}
abstract FieldCount : int
override FieldCount : int

属性值

类型： System Int32
一个整数值，表示字段数。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.Item 属性

DbUpdatableDataRecord
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
DbUpdatableDataRecord 类

获取一个字段值。

名称 说明
页首

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.Item 属性 (Int32)

DbUpdatableDataRecord
.
.
::
.
Item 属性 (Int32)
DbUpdatableDataRecord 类

返回具有给定字段序号的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides ReadOnly Property Item ( _
    ordinal As Integer _
) As Object
    Get
public override Object this[
    int ordinal
] { get; }
public:
virtual property Object^ Item[int ordinal] {
    Object^ get (int ordinal) override;
}
abstract Item : Object
override Item : Object

参数

ordinal
类型： System Int32
字段的序号。

属性值

类型： System Object
具有给定字段序号的值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
Item 重载
System.Data.Objects 命名空间


DbUpdatableDataRecord ..::.Item 属性 (String)

DbUpdatableDataRecord
.
.
::
.
Item 属性 (String)
DbUpdatableDataRecord 类

获取具有给定字段名称的值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides ReadOnly Property Item ( _
    name As String _
) As Object
    Get
public override Object this[
    string name
] { get; }
public:
virtual property Object^ Item[String^ name] {
    Object^ get (String^ name) override;
}
abstract Item : Object
override Item : Object

参数

name
类型： System String
字段名。

属性值

类型： System Object
字段值。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

DbUpdatableDataRecord 类
DbUpdatableDataRecord 成员
Item 重载
System.Data.Objects 命名空间


EntityFunctions 类

EntityFunctions 类
成员

提供在 LINQ to Entities 查询中，公开概念模型规范函数的公共语言运行时 (CLR) 方法。有关规范函数的信息，请参见Canonical Functions (Entity SQL)。 提供在 LINQ to Entities 查询中，公开概念模型规范函数的公共语言运行时 (CLR) 方法。有关规范函数的信息，请参见Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class EntityFunctions
public static class EntityFunctions
public ref class EntityFunctions abstract sealed
[<AbstractClassAttribute>]
[<SealedAttribute>]
type EntityFunctions =  class end

System.Data.Objects System.Data.Objects..::.EntityFunctionsEntityFunctions
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions 成员

EntityFunctions 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

提供在 LINQ to Entities 查询中，公开概念模型规范函数的公共语言运行时 (CLR) 方法。有关规范函数的信息，请参见Canonical Functions (Entity SQL)。 提供在 LINQ to Entities 查询中，公开概念模型规范函数的公共语言运行时 (CLR) 方法。有关规范函数的信息，请参见Canonical Functions (Entity SQL)。

EntityFunctions 类型公开以下成员。

名称 说明
页首

参考

EntityFunctions 类
System.Data.Objects 命名空间


EntityFunctions 方法

EntityFunctions 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

EntityFunctions 类型公开以下成员。

名称 说明
页首

参考

EntityFunctions 类
System.Data.Objects 命名空间


EntityFunctions ..::.AddDays 方法

EntityFunctions
.
.
::
.
AddDays 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 AddDays 规范函数。有关 AddDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddDays 规范函数。有关 AddDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AddDays 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddDays 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddDays 规范函数。有关 AddDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddDays 规范函数。有关 AddDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddDays")> _
Public Shared Function AddDays ( _
    dateValue As Nullable(Of DateTime), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "AddDays")]
public static Nullable<DateTime> AddDays(
    Nullable<DateTime> dateValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddDays")]
public:
static Nullable<DateTime> AddDays(
    Nullable<DateTime> dateValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddDays")>]
static member AddDays :
        dateValue:Nullable<DateTime> *
        addValue:Nullable<int> -> Nullable<DateTime>

参数

dateValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 dateValue 中的天数。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

dateValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddDays 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddDays 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddDays 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddDays 规范函数。有关 AddDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddDays 规范函数。有关 AddDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddDays")> _
Public Shared Function AddDays ( _
    dateValue As Nullable(Of DateTimeOffset), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "AddDays")]
public static Nullable<DateTimeOffset> AddDays(
    Nullable<DateTimeOffset> dateValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddDays")]
public:
static Nullable<DateTimeOffset> AddDays(
    Nullable<DateTimeOffset> dateValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddDays")>]
static member AddDays :
        dateValue:Nullable<DateTimeOffset> *
        addValue:Nullable<int> -> Nullable<DateTimeOffset>

参数

dateValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 dateValue 中的天数。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

dateValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddDays 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddHours 方法

EntityFunctions
.
.
::
.
AddHours 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 AddHours 规范函数。有关 AddHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddHours 规范函数。有关 AddHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AddHours 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddHours 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddHours 规范函数。有关 AddHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddHours 规范函数。有关 AddHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddHours")> _
Public Shared Function AddHours ( _
    timeValue As Nullable(Of DateTime), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "AddHours")]
public static Nullable<DateTime> AddHours(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddHours")]
public:
static Nullable<DateTime> AddHours(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddHours")>]
static member AddHours :
        timeValue:Nullable<DateTime> *
        addValue:Nullable<int> -> Nullable<DateTime>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要添加到 timeValue 的小时数。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddHours 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddHours 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddHours 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddHours 规范函数。有关 AddHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddHours 规范函数。有关 AddHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddHours")> _
Public Shared Function AddHours ( _
    timeValue As Nullable(Of DateTimeOffset), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "AddHours")]
public static Nullable<DateTimeOffset> AddHours(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddHours")]
public:
static Nullable<DateTimeOffset> AddHours(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddHours")>]
static member AddHours :
        timeValue:Nullable<DateTimeOffset> *
        addValue:Nullable<int> -> Nullable<DateTimeOffset>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要添加到 timeValue 的小时数。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddHours 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddHours 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddHours 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddHours 规范函数。有关 AddHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddHours 规范函数。有关 AddHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddHours")> _
Public Shared Function AddHours ( _
    timeValue As Nullable(Of TimeSpan), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of TimeSpan)
[EdmFunctionAttribute("Edm", "AddHours")]
public static Nullable<TimeSpan> AddHours(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddHours")]
public:
static Nullable<TimeSpan> AddHours(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddHours")>]
static member AddHours :
        timeValue:Nullable<TimeSpan> *
        addValue:Nullable<int> -> Nullable<TimeSpan>

参数

timeValue
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要添加到 timeValue 的小时数。

返回值

类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddHours 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMicroseconds 方法

EntityFunctions
.
.
::
.
AddMicroseconds 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 AddMicroseconds 规范函数。有关 AddMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMicroseconds 规范函数。有关 AddMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AddMicroseconds 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMicroseconds 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMicroseconds 规范函数。有关 AddMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMicroseconds 规范函数。有关 AddMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMicroseconds")> _
Public Shared Function AddMicroseconds ( _
    timeValue As Nullable(Of DateTime), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "AddMicroseconds")]
public static Nullable<DateTime> AddMicroseconds(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMicroseconds")]
public:
static Nullable<DateTime> AddMicroseconds(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMicroseconds")>]
static member AddMicroseconds :
        timeValue:Nullable<DateTime> *
        addValue:Nullable<int> -> Nullable<DateTime>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 timeValue 中的微秒数。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMicroseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMicroseconds 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMicroseconds 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMicroseconds 规范函数。有关 AddMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMicroseconds 规范函数。有关 AddMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMicroseconds")> _
Public Shared Function AddMicroseconds ( _
    timeValue As Nullable(Of DateTimeOffset), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "AddMicroseconds")]
public static Nullable<DateTimeOffset> AddMicroseconds(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMicroseconds")]
public:
static Nullable<DateTimeOffset> AddMicroseconds(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMicroseconds")>]
static member AddMicroseconds :
        timeValue:Nullable<DateTimeOffset> *
        addValue:Nullable<int> -> Nullable<DateTimeOffset>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 timeValue 中的微秒数。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMicroseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMicroseconds 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMicroseconds 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMicroseconds 规范函数。有关 AddMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMicroseconds 规范函数。有关 AddMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMicroseconds")> _
Public Shared Function AddMicroseconds ( _
    timeValue As Nullable(Of TimeSpan), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of TimeSpan)
[EdmFunctionAttribute("Edm", "AddMicroseconds")]
public static Nullable<TimeSpan> AddMicroseconds(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMicroseconds")]
public:
static Nullable<TimeSpan> AddMicroseconds(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMicroseconds")>]
static member AddMicroseconds :
        timeValue:Nullable<TimeSpan> *
        addValue:Nullable<int> -> Nullable<TimeSpan>

参数

timeValue
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 timeValue 中的微秒数。

返回值

类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMicroseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMilliseconds 方法

EntityFunctions
.
.
::
.
AddMilliseconds 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 AddMilliseconds 规范函数。有关 AddMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMilliseconds 规范函数。有关 AddMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AddMilliseconds 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMilliseconds 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMilliseconds 规范函数。有关 AddMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMilliseconds 规范函数。有关 AddMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMilliseconds")> _
Public Shared Function AddMilliseconds ( _
    timeValue As Nullable(Of DateTime), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "AddMilliseconds")]
public static Nullable<DateTime> AddMilliseconds(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMilliseconds")]
public:
static Nullable<DateTime> AddMilliseconds(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMilliseconds")>]
static member AddMilliseconds :
        timeValue:Nullable<DateTime> *
        addValue:Nullable<int> -> Nullable<DateTime>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 timeValue 中的毫秒数。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMilliseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMilliseconds 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMilliseconds 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMilliseconds 规范函数。有关 AddMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMilliseconds 规范函数。有关 AddMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMilliseconds")> _
Public Shared Function AddMilliseconds ( _
    timeValue As Nullable(Of DateTimeOffset), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "AddMilliseconds")]
public static Nullable<DateTimeOffset> AddMilliseconds(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMilliseconds")]
public:
static Nullable<DateTimeOffset> AddMilliseconds(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMilliseconds")>]
static member AddMilliseconds :
        timeValue:Nullable<DateTimeOffset> *
        addValue:Nullable<int> -> Nullable<DateTimeOffset>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 timeValue 中的毫秒数。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMilliseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMilliseconds 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMilliseconds 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMilliseconds 规范函数。有关 AddMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMilliseconds 规范函数。有关 AddMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMilliseconds")> _
Public Shared Function AddMilliseconds ( _
    timeValue As Nullable(Of TimeSpan), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of TimeSpan)
[EdmFunctionAttribute("Edm", "AddMilliseconds")]
public static Nullable<TimeSpan> AddMilliseconds(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMilliseconds")]
public:
static Nullable<TimeSpan> AddMilliseconds(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMilliseconds")>]
static member AddMilliseconds :
        timeValue:Nullable<TimeSpan> *
        addValue:Nullable<int> -> Nullable<TimeSpan>

参数

timeValue
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 timeValue 中的毫秒数。

返回值

类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMilliseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMinutes 方法

EntityFunctions
.
.
::
.
AddMinutes 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 AddMinutes 规范函数。有关 AddMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMinutes 规范函数。有关 AddMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AddMinutes 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMinutes 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMinutes 规范函数。有关 AddMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMinutes 规范函数。有关 AddMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMinutes")> _
Public Shared Function AddMinutes ( _
    timeValue As Nullable(Of DateTime), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "AddMinutes")]
public static Nullable<DateTime> AddMinutes(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMinutes")]
public:
static Nullable<DateTime> AddMinutes(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMinutes")>]
static member AddMinutes :
        timeValue:Nullable<DateTime> *
        addValue:Nullable<int> -> Nullable<DateTime>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要添加到 timeValue 的分钟数。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMinutes 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMinutes 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMinutes 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMinutes 规范函数。有关 AddMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMinutes 规范函数。有关 AddMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMinutes")> _
Public Shared Function AddMinutes ( _
    timeValue As Nullable(Of DateTimeOffset), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "AddMinutes")]
public static Nullable<DateTimeOffset> AddMinutes(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMinutes")]
public:
static Nullable<DateTimeOffset> AddMinutes(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMinutes")>]
static member AddMinutes :
        timeValue:Nullable<DateTimeOffset> *
        addValue:Nullable<int> -> Nullable<DateTimeOffset>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要添加到 timeValue 的分钟数。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMinutes 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMinutes 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMinutes 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMinutes 规范函数。有关 AddMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMinutes 规范函数。有关 AddMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMinutes")> _
Public Shared Function AddMinutes ( _
    timeValue As Nullable(Of TimeSpan), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of TimeSpan)
[EdmFunctionAttribute("Edm", "AddMinutes")]
public static Nullable<TimeSpan> AddMinutes(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMinutes")]
public:
static Nullable<TimeSpan> AddMinutes(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMinutes")>]
static member AddMinutes :
        timeValue:Nullable<TimeSpan> *
        addValue:Nullable<int> -> Nullable<TimeSpan>

参数

timeValue
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要添加到 timeValue 的分钟数。

返回值

类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMinutes 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMonths 方法

EntityFunctions
.
.
::
.
AddMonths 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 AddMonths 规范函数。有关 AddMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMonths 规范函数。有关 AddMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AddMonths 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMonths 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMonths 规范函数。有关 AddMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMonths 规范函数。有关 AddMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMonths")> _
Public Shared Function AddMonths ( _
    dateValue As Nullable(Of DateTime), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "AddMonths")]
public static Nullable<DateTime> AddMonths(
    Nullable<DateTime> dateValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMonths")]
public:
static Nullable<DateTime> AddMonths(
    Nullable<DateTime> dateValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMonths")>]
static member AddMonths :
        dateValue:Nullable<DateTime> *
        addValue:Nullable<int> -> Nullable<DateTime>

参数

dateValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 dateValue 中的月数。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

dateValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMonths 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddMonths 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddMonths 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddMonths 规范函数。有关 AddMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddMonths 规范函数。有关 AddMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddMonths")> _
Public Shared Function AddMonths ( _
    dateValue As Nullable(Of DateTimeOffset), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "AddMonths")]
public static Nullable<DateTimeOffset> AddMonths(
    Nullable<DateTimeOffset> dateValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddMonths")]
public:
static Nullable<DateTimeOffset> AddMonths(
    Nullable<DateTimeOffset> dateValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddMonths")>]
static member AddMonths :
        dateValue:Nullable<DateTimeOffset> *
        addValue:Nullable<int> -> Nullable<DateTimeOffset>

参数

dateValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 dateValue 中的月数。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

dateValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddMonths 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddNanoseconds 方法

EntityFunctions
.
.
::
.
AddNanoseconds 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 AddNanoseconds 规范函数。有关 AddNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddNanoseconds 规范函数。有关 AddNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AddNanoseconds 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddNanoseconds 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddNanoseconds 规范函数。有关 AddNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddNanoseconds 规范函数。有关 AddNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddNanoseconds")> _
Public Shared Function AddNanoseconds ( _
    timeValue As Nullable(Of DateTime), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "AddNanoseconds")]
public static Nullable<DateTime> AddNanoseconds(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddNanoseconds")]
public:
static Nullable<DateTime> AddNanoseconds(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddNanoseconds")>]
static member AddNanoseconds :
        timeValue:Nullable<DateTime> *
        addValue:Nullable<int> -> Nullable<DateTime>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 timeValue 中的毫微秒数。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddNanoseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddNanoseconds 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddNanoseconds 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddNanoseconds 规范函数。有关 AddNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddNanoseconds 规范函数。有关 AddNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddNanoseconds")> _
Public Shared Function AddNanoseconds ( _
    timeValue As Nullable(Of DateTimeOffset), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "AddNanoseconds")]
public static Nullable<DateTimeOffset> AddNanoseconds(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddNanoseconds")]
public:
static Nullable<DateTimeOffset> AddNanoseconds(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddNanoseconds")>]
static member AddNanoseconds :
        timeValue:Nullable<DateTimeOffset> *
        addValue:Nullable<int> -> Nullable<DateTimeOffset>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 timeValue 中的毫微秒数。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddNanoseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddNanoseconds 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddNanoseconds 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddNanoseconds 规范函数。有关 AddNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddNanoseconds 规范函数。有关 AddNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddNanoseconds")> _
Public Shared Function AddNanoseconds ( _
    timeValue As Nullable(Of TimeSpan), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of TimeSpan)
[EdmFunctionAttribute("Edm", "AddNanoseconds")]
public static Nullable<TimeSpan> AddNanoseconds(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddNanoseconds")]
public:
static Nullable<TimeSpan> AddNanoseconds(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddNanoseconds")>]
static member AddNanoseconds :
        timeValue:Nullable<TimeSpan> *
        addValue:Nullable<int> -> Nullable<TimeSpan>

参数

timeValue
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 timeValue 中的毫微秒数。

返回值

类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddNanoseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddSeconds 方法

EntityFunctions
.
.
::
.
AddSeconds 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 AddSeconds 规范函数。有关 AddSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddSeconds 规范函数。有关 AddSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AddSeconds 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddSeconds 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddSeconds 规范函数。有关 AddSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddSeconds 规范函数。有关 AddSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddSeconds")> _
Public Shared Function AddSeconds ( _
    timeValue As Nullable(Of DateTime), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "AddSeconds")]
public static Nullable<DateTime> AddSeconds(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddSeconds")]
public:
static Nullable<DateTime> AddSeconds(
    Nullable<DateTime> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddSeconds")>]
static member AddSeconds :
        timeValue:Nullable<DateTime> *
        addValue:Nullable<int> -> Nullable<DateTime>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要添加到 timeValue 的秒数。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddSeconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddSeconds 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddSeconds 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddSeconds 规范函数。有关 AddSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddSeconds 规范函数。有关 AddSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddSeconds")> _
Public Shared Function AddSeconds ( _
    timeValue As Nullable(Of DateTimeOffset), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "AddSeconds")]
public static Nullable<DateTimeOffset> AddSeconds(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddSeconds")]
public:
static Nullable<DateTimeOffset> AddSeconds(
    Nullable<DateTimeOffset> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddSeconds")>]
static member AddSeconds :
        timeValue:Nullable<DateTimeOffset> *
        addValue:Nullable<int> -> Nullable<DateTimeOffset>

参数

timeValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要添加到 timeValue 的秒数。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddSeconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddSeconds 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddSeconds 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddSeconds 规范函数。有关 AddSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddSeconds 规范函数。有关 AddSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddSeconds")> _
Public Shared Function AddSeconds ( _
    timeValue As Nullable(Of TimeSpan), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of TimeSpan)
[EdmFunctionAttribute("Edm", "AddSeconds")]
public static Nullable<TimeSpan> AddSeconds(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddSeconds")]
public:
static Nullable<TimeSpan> AddSeconds(
    Nullable<TimeSpan> timeValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddSeconds")>]
static member AddSeconds :
        timeValue:Nullable<TimeSpan> *
        addValue:Nullable<int> -> Nullable<TimeSpan>

参数

timeValue
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要添加到 timeValue 的秒数。

返回值

类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

timeValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddSeconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddYears 方法

EntityFunctions
.
.
::
.
AddYears 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 AddYears 规范函数。有关 AddYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddYears 规范函数。有关 AddYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AddYears 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddYears 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddYears 规范函数。有关 AddYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddYears 规范函数。有关 AddYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddYears")> _
Public Shared Function AddYears ( _
    dateValue As Nullable(Of DateTime), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "AddYears")]
public static Nullable<DateTime> AddYears(
    Nullable<DateTime> dateValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddYears")]
public:
static Nullable<DateTime> AddYears(
    Nullable<DateTime> dateValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddYears")>]
static member AddYears :
        dateValue:Nullable<DateTime> *
        addValue:Nullable<int> -> Nullable<DateTime>

参数

dateValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 dateValue 中的年数。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

dateValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddYears 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AddYears 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
AddYears 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 AddYears 规范函数。有关 AddYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 AddYears 规范函数。有关 AddYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "AddYears")> _
Public Shared Function AddYears ( _
    dateValue As Nullable(Of DateTimeOffset), _
    addValue As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "AddYears")]
public static Nullable<DateTimeOffset> AddYears(
    Nullable<DateTimeOffset> dateValue,
    Nullable<int> addValue
)
[EdmFunctionAttribute(L"Edm", L"AddYears")]
public:
static Nullable<DateTimeOffset> AddYears(
    Nullable<DateTimeOffset> dateValue,
    Nullable<int> addValue
)
[<EdmFunctionAttribute("Edm", "AddYears")>]
static member AddYears :
        dateValue:Nullable<DateTimeOffset> *
        addValue:Nullable<int> -> Nullable<DateTimeOffset>

参数

dateValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
addValue
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要加到 dateValue 中的年数。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

dateValue 增加 addValue。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
AddYears 重载
System.Data.Objects 命名空间


EntityFunctions ..::.AsNonUnicode 方法

EntityFunctions
.
.
::
.
AsNonUnicode 方法
EntityFunctions 类

一个将输入字符串作为非 Unicode 字符串处理的 LINQ to Entities 运算符。此方法仅适用于 LINQ to Entities 查询。 一个将输入字符串作为非 Unicode 字符串处理的 LINQ to Entities 运算符。此方法仅适用于 LINQ to Entities 查询。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function AsNonUnicode ( _
    value As String _
) As String
public static string AsNonUnicode(
    string value
)
public:
static String^ AsNonUnicode(
    String^ value
)
static member AsNonUnicode :
        value:string -> string

参数

value
类型： System String
输入字符串。

返回值

类型： System String
一个非 Unicode 字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.AsUnicode 方法

EntityFunctions
.
.
::
.
AsUnicode 方法
EntityFunctions 类

一个确保将输入字符串作为 Unicode 字符串处理的 LINQ to Entities 运算符。此方法仅适用于 LINQ to Entities 查询。 一个确保将输入字符串作为 Unicode 字符串处理的 LINQ to Entities 运算符。此方法仅适用于 LINQ to Entities 查询。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function AsUnicode ( _
    value As String _
) As String
public static string AsUnicode(
    string value
)
public:
static String^ AsUnicode(
    String^ value
)
static member AsUnicode :
        value:string -> string

参数

value
类型： System String
输入字符串。

返回值

类型： System String
一个 Unicode 字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.CreateDateTime 方法

EntityFunctions
.
.
::
.
CreateDateTime 方法
EntityFunctions 类

调用 CreateDateTime 规范函数。有关 CreateDateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 CreateDateTime 规范函数。有关 CreateDateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "CreateDateTime")> _
Public Shared Function CreateDateTime ( _
    year As Nullable(Of Integer), _
    month As Nullable(Of Integer), _
    day As Nullable(Of Integer), _
    hour As Nullable(Of Integer), _
    minute As Nullable(Of Integer), _
    second As Nullable(Of Double) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "CreateDateTime")]
public static Nullable<DateTime> CreateDateTime(
    Nullable<int> year,
    Nullable<int> month,
    Nullable<int> day,
    Nullable<int> hour,
    Nullable<int> minute,
    Nullable<double> second
)
[EdmFunctionAttribute(L"Edm", L"CreateDateTime")]
public:
static Nullable<DateTime> CreateDateTime(
    Nullable<int> year,
    Nullable<int> month,
    Nullable<int> day,
    Nullable<int> hour,
    Nullable<int> minute,
    Nullable<double> second
)
[<EdmFunctionAttribute("Edm", "CreateDateTime")>]
static member CreateDateTime :
        year:Nullable<int> *
        month:Nullable<int> *
        day:Nullable<int> *
        hour:Nullable<int> *
        minute:Nullable<int> *
        second:Nullable<float> -> Nullable<DateTime>

参数

year
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的年份部分。
month
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的月份部分。
day
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的日部分。
hour
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的小时部分。
minute
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的分钟部分。
second
类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

新日期的秒部分。请注意，可以使用此参数指定秒的小数部分。 新日期的秒部分。请注意，可以使用此参数指定秒的小数部分。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

新的日期。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.CreateDateTimeOffset 方法

EntityFunctions
.
.
::
.
CreateDateTimeOffset 方法
EntityFunctions 类

调用 CreateDateTimeOffset 规范函数。有关 CreateDateTimeOffset 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 CreateDateTimeOffset 规范函数。有关 CreateDateTimeOffset 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "CreateDateTimeOffset")> _
Public Shared Function CreateDateTimeOffset ( _
    year As Nullable(Of Integer), _
    month As Nullable(Of Integer), _
    day As Nullable(Of Integer), _
    hour As Nullable(Of Integer), _
    minute As Nullable(Of Integer), _
    second As Nullable(Of Double), _
    timeZoneOffset As Nullable(Of Integer) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "CreateDateTimeOffset")]
public static Nullable<DateTimeOffset> CreateDateTimeOffset(
    Nullable<int> year,
    Nullable<int> month,
    Nullable<int> day,
    Nullable<int> hour,
    Nullable<int> minute,
    Nullable<double> second,
    Nullable<int> timeZoneOffset
)
[EdmFunctionAttribute(L"Edm", L"CreateDateTimeOffset")]
public:
static Nullable<DateTimeOffset> CreateDateTimeOffset(
    Nullable<int> year,
    Nullable<int> month,
    Nullable<int> day,
    Nullable<int> hour,
    Nullable<int> minute,
    Nullable<double> second,
    Nullable<int> timeZoneOffset
)
[<EdmFunctionAttribute("Edm", "CreateDateTimeOffset")>]
static member CreateDateTimeOffset :
        year:Nullable<int> *
        month:Nullable<int> *
        day:Nullable<int> *
        hour:Nullable<int> *
        minute:Nullable<int> *
        second:Nullable<float> *
        timeZoneOffset:Nullable<int> -> Nullable<DateTimeOffset>

参数

year
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的年份部分。
month
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的月份部分。
day
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的日部分。
hour
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的小时部分。
minute
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的分钟部分。
second
类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

新日期的秒部分。请注意，可以使用此参数指定秒的小数部分。 新日期的秒部分。请注意，可以使用此参数指定秒的小数部分。
timeZoneOffset
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新日期的时区偏移量部分。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

新的日期。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.CreateTime 方法

EntityFunctions
.
.
::
.
CreateTime 方法
EntityFunctions 类

调用 CreateTime 规范函数。有关 CreateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 CreateTime 规范函数。有关 CreateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "CreateTime")> _
Public Shared Function CreateTime ( _
    hour As Nullable(Of Integer), _
    minute As Nullable(Of Integer), _
    second As Nullable(Of Double) _
) As Nullable(Of TimeSpan)
[EdmFunctionAttribute("Edm", "CreateTime")]
public static Nullable<TimeSpan> CreateTime(
    Nullable<int> hour,
    Nullable<int> minute,
    Nullable<double> second
)
[EdmFunctionAttribute(L"Edm", L"CreateTime")]
public:
static Nullable<TimeSpan> CreateTime(
    Nullable<int> hour,
    Nullable<int> minute,
    Nullable<double> second
)
[<EdmFunctionAttribute("Edm", "CreateTime")>]
static member CreateTime :
        hour:Nullable<int> *
        minute:Nullable<int> *
        second:Nullable<float> -> Nullable<TimeSpan>

参数

hour
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新时间跨度的小时部分。
minute
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

新时间跨度的分钟部分。
second
类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

新时间跨度的秒部分。请注意，可以使用此参数指定秒的小数部分。 新时间跨度的秒部分。请注意，可以使用此参数指定秒的小数部分。

返回值

类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

新的时间跨度。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffDays 方法

EntityFunctions
.
.
::
.
DiffDays 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 DiffDays 规范函数。有关 DiffDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffDays 规范函数。有关 DiffDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffDays 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
DiffDays 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 DiffDays 规范函数。有关 DiffDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffDays 规范函数。有关 DiffDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffDays")> _
Public Shared Function DiffDays ( _
    dateValue1 As Nullable(Of DateTime), _
    dateValue2 As Nullable(Of DateTime) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffDays")]
public static Nullable<int> DiffDays(
    Nullable<DateTime> dateValue1,
    Nullable<DateTime> dateValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffDays")]
public:
static Nullable<int> DiffDays(
    Nullable<DateTime> dateValue1,
    Nullable<DateTime> dateValue2
)
[<EdmFunctionAttribute("Edm", "DiffDays")>]
static member DiffDays :
        dateValue1:Nullable<DateTime> *
        dateValue2:Nullable<DateTime> -> Nullable<int>

参数

dateValue1
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
dateValue2
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

dateValue1 和 dateValue2 之间的天数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffDays 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffDays 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
DiffDays 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 DiffDays 规范函数。有关 DiffDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffDays 规范函数。有关 DiffDays 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffDays")> _
Public Shared Function DiffDays ( _
    dateValue1 As Nullable(Of DateTimeOffset), _
    dateValue2 As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffDays")]
public static Nullable<int> DiffDays(
    Nullable<DateTimeOffset> dateValue1,
    Nullable<DateTimeOffset> dateValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffDays")]
public:
static Nullable<int> DiffDays(
    Nullable<DateTimeOffset> dateValue1,
    Nullable<DateTimeOffset> dateValue2
)
[<EdmFunctionAttribute("Edm", "DiffDays")>]
static member DiffDays :
        dateValue1:Nullable<DateTimeOffset> *
        dateValue2:Nullable<DateTimeOffset> -> Nullable<int>

参数

dateValue1
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
dateValue2
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

dateValue1 和 dateValue2 之间的天数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffDays 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffHours 方法

EntityFunctions
.
.
::
.
DiffHours 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 DiffHours 规范函数。有关 DiffHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffHours 规范函数。有关 DiffHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffHours 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
DiffHours 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 DiffHours 规范函数。有关 DiffHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffHours 规范函数。有关 DiffHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffHours")> _
Public Shared Function DiffHours ( _
    timeValue1 As Nullable(Of DateTime), _
    timeValue2 As Nullable(Of DateTime) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffHours")]
public static Nullable<int> DiffHours(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffHours")]
public:
static Nullable<int> DiffHours(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffHours")>]
static member DiffHours :
        timeValue1:Nullable<DateTime> *
        timeValue2:Nullable<DateTime> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的小时数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffHours 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffHours 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
DiffHours 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 DiffHours 规范函数。有关 DiffHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffHours 规范函数。有关 DiffHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffHours")> _
Public Shared Function DiffHours ( _
    timeValue1 As Nullable(Of DateTimeOffset), _
    timeValue2 As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffHours")]
public static Nullable<int> DiffHours(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffHours")]
public:
static Nullable<int> DiffHours(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffHours")>]
static member DiffHours :
        timeValue1:Nullable<DateTimeOffset> *
        timeValue2:Nullable<DateTimeOffset> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的小时数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffHours 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffHours 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(TimeSpan >)>))

EntityFunctions
.
.
::
.
DiffHours 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
)
EntityFunctions 类

调用 DiffHours 规范函数。有关 DiffHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffHours 规范函数。有关 DiffHours 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffHours")> _
Public Shared Function DiffHours ( _
    timeValue1 As Nullable(Of TimeSpan), _
    timeValue2 As Nullable(Of TimeSpan) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffHours")]
public static Nullable<int> DiffHours(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffHours")]
public:
static Nullable<int> DiffHours(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffHours")>]
static member DiffHours :
        timeValue1:Nullable<TimeSpan> *
        timeValue2:Nullable<TimeSpan> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
timeValue2
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的小时数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffHours 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMicroseconds 方法

EntityFunctions
.
.
::
.
DiffMicroseconds 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 DiffMicroseconds 规范函数。有关 DiffMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMicroseconds 规范函数。有关 DiffMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMicroseconds 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
DiffMicroseconds 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 DiffMicroseconds 规范函数。有关 DiffMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMicroseconds 规范函数。有关 DiffMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMicroseconds")> _
Public Shared Function DiffMicroseconds ( _
    timeValue1 As Nullable(Of DateTime), _
    timeValue2 As Nullable(Of DateTime) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMicroseconds")]
public static Nullable<int> DiffMicroseconds(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMicroseconds")]
public:
static Nullable<int> DiffMicroseconds(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffMicroseconds")>]
static member DiffMicroseconds :
        timeValue1:Nullable<DateTime> *
        timeValue2:Nullable<DateTime> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的微秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMicroseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMicroseconds 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
DiffMicroseconds 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 DiffMicroseconds 规范函数。有关 DiffMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMicroseconds 规范函数。有关 DiffMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMicroseconds")> _
Public Shared Function DiffMicroseconds ( _
    timeValue1 As Nullable(Of DateTimeOffset), _
    timeValue2 As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMicroseconds")]
public static Nullable<int> DiffMicroseconds(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMicroseconds")]
public:
static Nullable<int> DiffMicroseconds(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffMicroseconds")>]
static member DiffMicroseconds :
        timeValue1:Nullable<DateTimeOffset> *
        timeValue2:Nullable<DateTimeOffset> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的微秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMicroseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMicroseconds 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(TimeSpan >)>))

EntityFunctions
.
.
::
.
DiffMicroseconds 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
)
EntityFunctions 类

调用 DiffMicroseconds 规范函数。有关 DiffMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMicroseconds 规范函数。有关 DiffMicroseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMicroseconds")> _
Public Shared Function DiffMicroseconds ( _
    timeValue1 As Nullable(Of TimeSpan), _
    timeValue2 As Nullable(Of TimeSpan) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMicroseconds")]
public static Nullable<int> DiffMicroseconds(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMicroseconds")]
public:
static Nullable<int> DiffMicroseconds(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffMicroseconds")>]
static member DiffMicroseconds :
        timeValue1:Nullable<TimeSpan> *
        timeValue2:Nullable<TimeSpan> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
timeValue2
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的微秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMicroseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMilliseconds 方法

EntityFunctions
.
.
::
.
DiffMilliseconds 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 DiffMilliseconds 规范函数。有关 DiffMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMilliseconds 规范函数。有关 DiffMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMilliseconds 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
DiffMilliseconds 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 DiffMilliseconds 规范函数。有关 DiffMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMilliseconds 规范函数。有关 DiffMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMilliseconds")> _
Public Shared Function DiffMilliseconds ( _
    timeValue1 As Nullable(Of DateTime), _
    timeValue2 As Nullable(Of DateTime) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMilliseconds")]
public static Nullable<int> DiffMilliseconds(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMilliseconds")]
public:
static Nullable<int> DiffMilliseconds(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffMilliseconds")>]
static member DiffMilliseconds :
        timeValue1:Nullable<DateTime> *
        timeValue2:Nullable<DateTime> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的毫秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMilliseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMilliseconds 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
DiffMilliseconds 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 DiffMilliseconds 规范函数。有关 DiffMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMilliseconds 规范函数。有关 DiffMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMilliseconds")> _
Public Shared Function DiffMilliseconds ( _
    timeValue1 As Nullable(Of DateTimeOffset), _
    timeValue2 As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMilliseconds")]
public static Nullable<int> DiffMilliseconds(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMilliseconds")]
public:
static Nullable<int> DiffMilliseconds(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffMilliseconds")>]
static member DiffMilliseconds :
        timeValue1:Nullable<DateTimeOffset> *
        timeValue2:Nullable<DateTimeOffset> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的毫秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMilliseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMilliseconds 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(TimeSpan >)>))

EntityFunctions
.
.
::
.
DiffMilliseconds 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
)
EntityFunctions 类

调用 DiffMilliseconds 规范函数。有关 DiffMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMilliseconds 规范函数。有关 DiffMilliseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMilliseconds")> _
Public Shared Function DiffMilliseconds ( _
    timeValue1 As Nullable(Of TimeSpan), _
    timeValue2 As Nullable(Of TimeSpan) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMilliseconds")]
public static Nullable<int> DiffMilliseconds(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMilliseconds")]
public:
static Nullable<int> DiffMilliseconds(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffMilliseconds")>]
static member DiffMilliseconds :
        timeValue1:Nullable<TimeSpan> *
        timeValue2:Nullable<TimeSpan> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
timeValue2
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的毫秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMilliseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMinutes 方法

EntityFunctions
.
.
::
.
DiffMinutes 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 DiffMinutes 规范函数。有关 DiffMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMinutes 规范函数。有关 DiffMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMinutes 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
DiffMinutes 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 DiffMinutes 规范函数。有关 DiffMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMinutes 规范函数。有关 DiffMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMinutes")> _
Public Shared Function DiffMinutes ( _
    timeValue1 As Nullable(Of DateTime), _
    timeValue2 As Nullable(Of DateTime) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMinutes")]
public static Nullable<int> DiffMinutes(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMinutes")]
public:
static Nullable<int> DiffMinutes(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffMinutes")>]
static member DiffMinutes :
        timeValue1:Nullable<DateTime> *
        timeValue2:Nullable<DateTime> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的分钟数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMinutes 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMinutes 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
DiffMinutes 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 DiffMinutes 规范函数。有关 DiffMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMinutes 规范函数。有关 DiffMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMinutes")> _
Public Shared Function DiffMinutes ( _
    timeValue1 As Nullable(Of DateTimeOffset), _
    timeValue2 As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMinutes")]
public static Nullable<int> DiffMinutes(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMinutes")]
public:
static Nullable<int> DiffMinutes(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffMinutes")>]
static member DiffMinutes :
        timeValue1:Nullable<DateTimeOffset> *
        timeValue2:Nullable<DateTimeOffset> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的分钟数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMinutes 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMinutes 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(TimeSpan >)>))

EntityFunctions
.
.
::
.
DiffMinutes 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
)
EntityFunctions 类

调用 DiffMinutes 规范函数。有关 DiffMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMinutes 规范函数。有关 DiffMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMinutes")> _
Public Shared Function DiffMinutes ( _
    timeValue1 As Nullable(Of TimeSpan), _
    timeValue2 As Nullable(Of TimeSpan) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMinutes")]
public static Nullable<int> DiffMinutes(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMinutes")]
public:
static Nullable<int> DiffMinutes(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffMinutes")>]
static member DiffMinutes :
        timeValue1:Nullable<TimeSpan> *
        timeValue2:Nullable<TimeSpan> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
timeValue2
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的分钟数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMinutes 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMonths 方法

EntityFunctions
.
.
::
.
DiffMonths 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 DiffMonths 规范函数。有关 DiffMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMonths 规范函数。有关 DiffMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMonths 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
DiffMonths 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 DiffMonths 规范函数。有关 DiffMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMonths 规范函数。有关 DiffMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMonths")> _
Public Shared Function DiffMonths ( _
    dateValue1 As Nullable(Of DateTime), _
    dateValue2 As Nullable(Of DateTime) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMonths")]
public static Nullable<int> DiffMonths(
    Nullable<DateTime> dateValue1,
    Nullable<DateTime> dateValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMonths")]
public:
static Nullable<int> DiffMonths(
    Nullable<DateTime> dateValue1,
    Nullable<DateTime> dateValue2
)
[<EdmFunctionAttribute("Edm", "DiffMonths")>]
static member DiffMonths :
        dateValue1:Nullable<DateTime> *
        dateValue2:Nullable<DateTime> -> Nullable<int>

参数

dateValue1
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
dateValue2
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

dateValue1 和 dateValue2 之间的月数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMonths 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffMonths 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
DiffMonths 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 DiffMonths 规范函数。有关 DiffMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffMonths 规范函数。有关 DiffMonths 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffMonths")> _
Public Shared Function DiffMonths ( _
    dateValue1 As Nullable(Of DateTimeOffset), _
    dateValue2 As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffMonths")]
public static Nullable<int> DiffMonths(
    Nullable<DateTimeOffset> dateValue1,
    Nullable<DateTimeOffset> dateValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffMonths")]
public:
static Nullable<int> DiffMonths(
    Nullable<DateTimeOffset> dateValue1,
    Nullable<DateTimeOffset> dateValue2
)
[<EdmFunctionAttribute("Edm", "DiffMonths")>]
static member DiffMonths :
        dateValue1:Nullable<DateTimeOffset> *
        dateValue2:Nullable<DateTimeOffset> -> Nullable<int>

参数

dateValue1
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
dateValue2
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

dateValue1 和 dateValue2 之间的月数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffMonths 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffNanoseconds 方法

EntityFunctions
.
.
::
.
DiffNanoseconds 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 DiffNanoseconds 规范函数。有关 DiffNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffNanoseconds 规范函数。有关 DiffNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffNanoseconds 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
DiffNanoseconds 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 DiffNanoseconds 规范函数。有关 DiffNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffNanoseconds 规范函数。有关 DiffNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffNanoseconds")> _
Public Shared Function DiffNanoseconds ( _
    timeValue1 As Nullable(Of DateTime), _
    timeValue2 As Nullable(Of DateTime) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffNanoseconds")]
public static Nullable<int> DiffNanoseconds(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffNanoseconds")]
public:
static Nullable<int> DiffNanoseconds(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffNanoseconds")>]
static member DiffNanoseconds :
        timeValue1:Nullable<DateTime> *
        timeValue2:Nullable<DateTime> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的毫微秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffNanoseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffNanoseconds 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
DiffNanoseconds 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 DiffNanoseconds 规范函数。有关 DiffNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffNanoseconds 规范函数。有关 DiffNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffNanoseconds")> _
Public Shared Function DiffNanoseconds ( _
    timeValue1 As Nullable(Of DateTimeOffset), _
    timeValue2 As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffNanoseconds")]
public static Nullable<int> DiffNanoseconds(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffNanoseconds")]
public:
static Nullable<int> DiffNanoseconds(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffNanoseconds")>]
static member DiffNanoseconds :
        timeValue1:Nullable<DateTimeOffset> *
        timeValue2:Nullable<DateTimeOffset> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的毫微秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffNanoseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffNanoseconds 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(TimeSpan >)>))

EntityFunctions
.
.
::
.
DiffNanoseconds 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
)
EntityFunctions 类

调用 DiffNanoseconds 规范函数。有关 DiffNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffNanoseconds 规范函数。有关 DiffNanoseconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffNanoseconds")> _
Public Shared Function DiffNanoseconds ( _
    timeValue1 As Nullable(Of TimeSpan), _
    timeValue2 As Nullable(Of TimeSpan) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffNanoseconds")]
public static Nullable<int> DiffNanoseconds(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffNanoseconds")]
public:
static Nullable<int> DiffNanoseconds(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffNanoseconds")>]
static member DiffNanoseconds :
        timeValue1:Nullable<TimeSpan> *
        timeValue2:Nullable<TimeSpan> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

有效日期。
timeValue2
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的毫微秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffNanoseconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffSeconds 方法

EntityFunctions
.
.
::
.
DiffSeconds 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 DiffSeconds 规范函数。有关 DiffSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffSeconds 规范函数。有关 DiffSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffSeconds 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
DiffSeconds 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 DiffSeconds 规范函数。有关 DiffSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffSeconds 规范函数。有关 DiffSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffSeconds")> _
Public Shared Function DiffSeconds ( _
    timeValue1 As Nullable(Of DateTime), _
    timeValue2 As Nullable(Of DateTime) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffSeconds")]
public static Nullable<int> DiffSeconds(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffSeconds")]
public:
static Nullable<int> DiffSeconds(
    Nullable<DateTime> timeValue1,
    Nullable<DateTime> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffSeconds")>]
static member DiffSeconds :
        timeValue1:Nullable<DateTime> *
        timeValue2:Nullable<DateTime> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffSeconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffSeconds 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
DiffSeconds 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 DiffSeconds 规范函数。有关 DiffSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffSeconds 规范函数。有关 DiffSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffSeconds")> _
Public Shared Function DiffSeconds ( _
    timeValue1 As Nullable(Of DateTimeOffset), _
    timeValue2 As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffSeconds")]
public static Nullable<int> DiffSeconds(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffSeconds")]
public:
static Nullable<int> DiffSeconds(
    Nullable<DateTimeOffset> timeValue1,
    Nullable<DateTimeOffset> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffSeconds")>]
static member DiffSeconds :
        timeValue1:Nullable<DateTimeOffset> *
        timeValue2:Nullable<DateTimeOffset> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
timeValue2
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffSeconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffSeconds 方法 (Nullable <(Of <(TimeSpan >)>), Nullable <(Of <(TimeSpan >)>))

EntityFunctions
.
.
::
.
DiffSeconds 方法 (Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
, Nullable
<
(Of
<
(
TimeSpan
>
)
>
)
)
EntityFunctions 类

调用 DiffSeconds 规范函数。有关 DiffSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffSeconds 规范函数。有关 DiffSeconds 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffSeconds")> _
Public Shared Function DiffSeconds ( _
    timeValue1 As Nullable(Of TimeSpan), _
    timeValue2 As Nullable(Of TimeSpan) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffSeconds")]
public static Nullable<int> DiffSeconds(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffSeconds")]
public:
static Nullable<int> DiffSeconds(
    Nullable<TimeSpan> timeValue1,
    Nullable<TimeSpan> timeValue2
)
[<EdmFunctionAttribute("Edm", "DiffSeconds")>]
static member DiffSeconds :
        timeValue1:Nullable<TimeSpan> *
        timeValue2:Nullable<TimeSpan> -> Nullable<int>

参数

timeValue1
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。
timeValue2
类型： System Nullable
<
(Of
<
(
TimeSpan
>
)
>
)

一个有效的时间跨度。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

timeValue1 和 timeValue2 之间的秒数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffSeconds 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffYears 方法

EntityFunctions
.
.
::
.
DiffYears 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 DiffYears 规范函数。有关 DiffYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffYears 规范函数。有关 DiffYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.DiffYears 方法 (Nullable <(Of <(DateTime >)>), Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
DiffYears 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
, Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 DiffYears 规范函数。有关 DiffYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffYears 规范函数。有关 DiffYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffYears")> _
Public Shared Function DiffYears ( _
    dateValue1 As Nullable(Of DateTime), _
    dateValue2 As Nullable(Of DateTime) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffYears")]
public static Nullable<int> DiffYears(
    Nullable<DateTime> dateValue1,
    Nullable<DateTime> dateValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffYears")]
public:
static Nullable<int> DiffYears(
    Nullable<DateTime> dateValue1,
    Nullable<DateTime> dateValue2
)
[<EdmFunctionAttribute("Edm", "DiffYears")>]
static member DiffYears :
        dateValue1:Nullable<DateTime> *
        dateValue2:Nullable<DateTime> -> Nullable<int>

参数

dateValue1
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。
dateValue2
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

有效日期。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

dateValue1 和 dateValue2 之间的年数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffYears 重载
System.Data.Objects 命名空间


EntityFunctions ..::.DiffYears 方法 (Nullable <(Of <(DateTimeOffset >)>), Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
DiffYears 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
, Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 DiffYears 规范函数。有关 DiffYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 DiffYears 规范函数。有关 DiffYears 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "DiffYears")> _
Public Shared Function DiffYears ( _
    dateValue1 As Nullable(Of DateTimeOffset), _
    dateValue2 As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "DiffYears")]
public static Nullable<int> DiffYears(
    Nullable<DateTimeOffset> dateValue1,
    Nullable<DateTimeOffset> dateValue2
)
[EdmFunctionAttribute(L"Edm", L"DiffYears")]
public:
static Nullable<int> DiffYears(
    Nullable<DateTimeOffset> dateValue1,
    Nullable<DateTimeOffset> dateValue2
)
[<EdmFunctionAttribute("Edm", "DiffYears")>]
static member DiffYears :
        dateValue1:Nullable<DateTimeOffset> *
        dateValue2:Nullable<DateTimeOffset> -> Nullable<int>

参数

dateValue1
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。
dateValue2
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

dateValue1 和 dateValue2 之间的年数。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
DiffYears 重载
System.Data.Objects 命名空间


EntityFunctions ..::.GetTotalOffsetMinutes 方法

EntityFunctions
.
.
::
.
GetTotalOffsetMinutes 方法
EntityFunctions 类

调用 GetTotalOffsetMinutes 规范函数。有关 GetTotalOffsetMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 GetTotalOffsetMinutes 规范函数。有关 GetTotalOffsetMinutes 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "GetTotalOffsetMinutes")> _
Public Shared Function GetTotalOffsetMinutes ( _
    dateTimeOffsetArgument As Nullable(Of DateTimeOffset) _
) As Nullable(Of Integer)
[EdmFunctionAttribute("Edm", "GetTotalOffsetMinutes")]
public static Nullable<int> GetTotalOffsetMinutes(
    Nullable<DateTimeOffset> dateTimeOffsetArgument
)
[EdmFunctionAttribute(L"Edm", L"GetTotalOffsetMinutes")]
public:
static Nullable<int> GetTotalOffsetMinutes(
    Nullable<DateTimeOffset> dateTimeOffsetArgument
)
[<EdmFunctionAttribute("Edm", "GetTotalOffsetMinutes")>]
static member GetTotalOffsetMinutes :
        dateTimeOffsetArgument:Nullable<DateTimeOffset> -> Nullable<int>

参数

dateTimeOffsetArgument
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

一个有效的日期时间偏移。

返回值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

dateTimeOffsetArgument 相对于 GMT 偏移的分钟数。该值通常介于 +780 到 -780 之间（+ 或 - 13 小时）。 dateTimeOffsetArgument 相对于 GMT 偏移的分钟数。该值通常介于 +780 到 -780 之间（+ 或 - 13 小时）。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.Left 方法

EntityFunctions
.
.
::
.
Left 方法
EntityFunctions 类

调用 Left 规范函数。有关 Left 规范函数的信息，请参见String Canonical Functions (Entity SQL)。 调用 Left 规范函数。有关 Left 规范函数的信息，请参见String Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Left")> _
Public Shared Function Left ( _
    stringArgument As String, _
    length As Nullable(Of Long) _
) As String
[EdmFunctionAttribute("Edm", "Left")]
public static string Left(
    string stringArgument,
    Nullable<long> length
)
[EdmFunctionAttribute(L"Edm", L"Left")]
public:
static String^ Left(
    String^ stringArgument,
    Nullable<long long> length
)
[<EdmFunctionAttribute("Edm", "Left")>]
static member Left :
        stringArgument:string *
        length:Nullable<int64> -> string

参数

stringArgument
类型： System String
有效的字符串表达式。
length
类型： System Nullable
<
(Of
<
(
Int64
>
)
>
)

要返回的字符数。

返回值

类型： System String
stringArgument 最左侧的 length 个字符。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.Reverse 方法

EntityFunctions
.
.
::
.
Reverse 方法
EntityFunctions 类

调用 Reverse 规范函数。有关 Reverse 规范函数的信息，请参见String Canonical Functions (Entity SQL)。 调用 Reverse 规范函数。有关 Reverse 规范函数的信息，请参见String Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Reverse")> _
Public Shared Function Reverse ( _
    stringArgument As String _
) As String
[EdmFunctionAttribute("Edm", "Reverse")]
public static string Reverse(
    string stringArgument
)
[EdmFunctionAttribute(L"Edm", L"Reverse")]
public:
static String^ Reverse(
    String^ stringArgument
)
[<EdmFunctionAttribute("Edm", "Reverse")>]
static member Reverse :
        stringArgument:string -> string

参数

stringArgument
类型： System String
一个有效的字符串。

返回值

类型： System String
以反转字符顺序显示的输入字符串。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.Right 方法

EntityFunctions
.
.
::
.
Right 方法
EntityFunctions 类

调用 Right 规范函数。有关 Right 规范函数的信息，请参见String Canonical Functions (Entity SQL)。 调用 Right 规范函数。有关 Right 规范函数的信息，请参见String Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Right")> _
Public Shared Function Right ( _
    stringArgument As String, _
    length As Nullable(Of Long) _
) As String
[EdmFunctionAttribute("Edm", "Right")]
public static string Right(
    string stringArgument,
    Nullable<long> length
)
[EdmFunctionAttribute(L"Edm", L"Right")]
public:
static String^ Right(
    String^ stringArgument,
    Nullable<long long> length
)
[<EdmFunctionAttribute("Edm", "Right")>]
static member Right :
        stringArgument:string *
        length:Nullable<int64> -> string

参数

stringArgument
类型： System String
有效的字符串表达式。
length
类型： System Nullable
<
(Of
<
(
Int64
>
)
>
)

要返回的字符数。

返回值

类型： System String
stringArgument 最右侧的 length 个字符。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviation 方法

EntityFunctions
.
.
::
.
StandardDeviation 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

名称 说明
页首

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviation 方法 (IEnumerable <(Of <(Decimal >)>))

EntityFunctions
.
.
::
.
StandardDeviation 方法 (IEnumerable
<
(Of
<
(
Decimal
>
)
>
)
)
EntityFunctions 类

调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDev")> _
Public Shared Function StandardDeviation ( _
    collection As IEnumerable(Of Decimal) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDev")]
public static Nullable<double> StandardDeviation(
    IEnumerable<decimal> collection
)
[EdmFunctionAttribute(L"Edm", L"StDev")]
public:
static Nullable<double> StandardDeviation(
    IEnumerable<Decimal>^ collection
)
[<EdmFunctionAttribute("Edm", "StDev")>]
static member StandardDeviation :
        collection:IEnumerable<decimal> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Decimal
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviation 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviation 方法 (IEnumerable <(Of <(Nullable <(Of <(Decimal >)>) >)>))

EntityFunctions
.
.
::
.
StandardDeviation 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Decimal
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDev")> _
Public Shared Function StandardDeviation ( _
    collection As IEnumerable(Of Nullable(Of Decimal)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDev")]
public static Nullable<double> StandardDeviation(
    IEnumerable<Nullable<decimal>> collection
)
[EdmFunctionAttribute(L"Edm", L"StDev")]
public:
static Nullable<double> StandardDeviation(
    IEnumerable<Nullable<Decimal>>^ collection
)
[<EdmFunctionAttribute("Edm", "StDev")>]
static member StandardDeviation :
        collection:IEnumerable<Nullable<decimal>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Decimal
>
)
>
)
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviation 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviation 方法 (IEnumerable <(Of <(Double >)>))

EntityFunctions
.
.
::
.
StandardDeviation 方法 (IEnumerable
<
(Of
<
(
Double
>
)
>
)
)
EntityFunctions 类

调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDev")> _
Public Shared Function StandardDeviation ( _
    collection As IEnumerable(Of Double) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDev")]
public static Nullable<double> StandardDeviation(
    IEnumerable<double> collection
)
[EdmFunctionAttribute(L"Edm", L"StDev")]
public:
static Nullable<double> StandardDeviation(
    IEnumerable<double>^ collection
)
[<EdmFunctionAttribute("Edm", "StDev")>]
static member StandardDeviation :
        collection:IEnumerable<float> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Double
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviation 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviation 方法 (IEnumerable <(Of <(Nullable <(Of <(Double >)>) >)>))

EntityFunctions
.
.
::
.
StandardDeviation 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Double
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDev")> _
Public Shared Function StandardDeviation ( _
    collection As IEnumerable(Of Nullable(Of Double)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDev")]
public static Nullable<double> StandardDeviation(
    IEnumerable<Nullable<double>> collection
)
[EdmFunctionAttribute(L"Edm", L"StDev")]
public:
static Nullable<double> StandardDeviation(
    IEnumerable<Nullable<double>>^ collection
)
[<EdmFunctionAttribute("Edm", "StDev")>]
static member StandardDeviation :
        collection:IEnumerable<Nullable<float>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Double
>
)
>
)
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviation 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviation 方法 (IEnumerable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
StandardDeviation 方法 (IEnumerable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDev")> _
Public Shared Function StandardDeviation ( _
    collection As IEnumerable(Of Integer) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDev")]
public static Nullable<double> StandardDeviation(
    IEnumerable<int> collection
)
[EdmFunctionAttribute(L"Edm", L"StDev")]
public:
static Nullable<double> StandardDeviation(
    IEnumerable<int>^ collection
)
[<EdmFunctionAttribute("Edm", "StDev")>]
static member StandardDeviation :
        collection:IEnumerable<int> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Int32
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviation 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviation 方法 (IEnumerable <(Of <(Nullable <(Of <(Int32 >)>) >)>))

EntityFunctions
.
.
::
.
StandardDeviation 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int32
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDev")> _
Public Shared Function StandardDeviation ( _
    collection As IEnumerable(Of Nullable(Of Integer)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDev")]
public static Nullable<double> StandardDeviation(
    IEnumerable<Nullable<int>> collection
)
[EdmFunctionAttribute(L"Edm", L"StDev")]
public:
static Nullable<double> StandardDeviation(
    IEnumerable<Nullable<int>>^ collection
)
[<EdmFunctionAttribute("Edm", "StDev")>]
static member StandardDeviation :
        collection:IEnumerable<Nullable<int>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int32
>
)
>
)
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviation 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviation 方法 (IEnumerable <(Of <(Int64 >)>))

EntityFunctions
.
.
::
.
StandardDeviation 方法 (IEnumerable
<
(Of
<
(
Int64
>
)
>
)
)
EntityFunctions 类

调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDev")> _
Public Shared Function StandardDeviation ( _
    collection As IEnumerable(Of Long) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDev")]
public static Nullable<double> StandardDeviation(
    IEnumerable<long> collection
)
[EdmFunctionAttribute(L"Edm", L"StDev")]
public:
static Nullable<double> StandardDeviation(
    IEnumerable<long long>^ collection
)
[<EdmFunctionAttribute("Edm", "StDev")>]
static member StandardDeviation :
        collection:IEnumerable<int64> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Int64
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviation 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviation 方法 (IEnumerable <(Of <(Nullable <(Of <(Int64 >)>) >)>))

EntityFunctions
.
.
::
.
StandardDeviation 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int64
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDev 规范函数。有关 StDev 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDev")> _
Public Shared Function StandardDeviation ( _
    collection As IEnumerable(Of Nullable(Of Long)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDev")]
public static Nullable<double> StandardDeviation(
    IEnumerable<Nullable<long>> collection
)
[EdmFunctionAttribute(L"Edm", L"StDev")]
public:
static Nullable<double> StandardDeviation(
    IEnumerable<Nullable<long long>>^ collection
)
[<EdmFunctionAttribute("Edm", "StDev")>]
static member StandardDeviation :
        collection:IEnumerable<Nullable<int64>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int64
>
)
>
)
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviation 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviationP 方法

EntityFunctions
.
.
::
.
StandardDeviationP 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 StDevP 规范函数，该函数返回总体标准偏差。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDevP 规范函数，该函数返回总体标准偏差。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

名称 说明
页首

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviationP 方法 (IEnumerable <(Of <(Decimal >)>))

EntityFunctions
.
.
::
.
StandardDeviationP 方法 (IEnumerable
<
(Of
<
(
Decimal
>
)
>
)
)
EntityFunctions 类

调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDevP")> _
Public Shared Function StandardDeviationP ( _
    collection As IEnumerable(Of Decimal) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDevP")]
public static Nullable<double> StandardDeviationP(
    IEnumerable<decimal> collection
)
[EdmFunctionAttribute(L"Edm", L"StDevP")]
public:
static Nullable<double> StandardDeviationP(
    IEnumerable<Decimal>^ collection
)
[<EdmFunctionAttribute("Edm", "StDevP")>]
static member StandardDeviationP :
        collection:IEnumerable<decimal> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Decimal
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合中总体的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviationP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviationP 方法 (IEnumerable <(Of <(Nullable <(Of <(Decimal >)>) >)>))

EntityFunctions
.
.
::
.
StandardDeviationP 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Decimal
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDevP")> _
Public Shared Function StandardDeviationP ( _
    collection As IEnumerable(Of Nullable(Of Decimal)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDevP")]
public static Nullable<double> StandardDeviationP(
    IEnumerable<Nullable<decimal>> collection
)
[EdmFunctionAttribute(L"Edm", L"StDevP")]
public:
static Nullable<double> StandardDeviationP(
    IEnumerable<Nullable<Decimal>>^ collection
)
[<EdmFunctionAttribute("Edm", "StDevP")>]
static member StandardDeviationP :
        collection:IEnumerable<Nullable<decimal>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Decimal
>
)
>
)
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合中总体的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviationP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviationP 方法 (IEnumerable <(Of <(Double >)>))

EntityFunctions
.
.
::
.
StandardDeviationP 方法 (IEnumerable
<
(Of
<
(
Double
>
)
>
)
)
EntityFunctions 类

调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDevP")> _
Public Shared Function StandardDeviationP ( _
    collection As IEnumerable(Of Double) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDevP")]
public static Nullable<double> StandardDeviationP(
    IEnumerable<double> collection
)
[EdmFunctionAttribute(L"Edm", L"StDevP")]
public:
static Nullable<double> StandardDeviationP(
    IEnumerable<double>^ collection
)
[<EdmFunctionAttribute("Edm", "StDevP")>]
static member StandardDeviationP :
        collection:IEnumerable<float> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Double
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合中总体的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviationP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviationP 方法 (IEnumerable <(Of <(Nullable <(Of <(Double >)>) >)>))

EntityFunctions
.
.
::
.
StandardDeviationP 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Double
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDevP")> _
Public Shared Function StandardDeviationP ( _
    collection As IEnumerable(Of Nullable(Of Double)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDevP")]
public static Nullable<double> StandardDeviationP(
    IEnumerable<Nullable<double>> collection
)
[EdmFunctionAttribute(L"Edm", L"StDevP")]
public:
static Nullable<double> StandardDeviationP(
    IEnumerable<Nullable<double>>^ collection
)
[<EdmFunctionAttribute("Edm", "StDevP")>]
static member StandardDeviationP :
        collection:IEnumerable<Nullable<float>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Double
>
)
>
)
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合中总体的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviationP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviationP 方法 (IEnumerable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
StandardDeviationP 方法 (IEnumerable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDevP")> _
Public Shared Function StandardDeviationP ( _
    collection As IEnumerable(Of Integer) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDevP")]
public static Nullable<double> StandardDeviationP(
    IEnumerable<int> collection
)
[EdmFunctionAttribute(L"Edm", L"StDevP")]
public:
static Nullable<double> StandardDeviationP(
    IEnumerable<int>^ collection
)
[<EdmFunctionAttribute("Edm", "StDevP")>]
static member StandardDeviationP :
        collection:IEnumerable<int> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Int32
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合中总体的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviationP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviationP 方法 (IEnumerable <(Of <(Nullable <(Of <(Int32 >)>) >)>))

EntityFunctions
.
.
::
.
StandardDeviationP 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int32
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDevP")> _
Public Shared Function StandardDeviationP ( _
    collection As IEnumerable(Of Nullable(Of Integer)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDevP")]
public static Nullable<double> StandardDeviationP(
    IEnumerable<Nullable<int>> collection
)
[EdmFunctionAttribute(L"Edm", L"StDevP")]
public:
static Nullable<double> StandardDeviationP(
    IEnumerable<Nullable<int>>^ collection
)
[<EdmFunctionAttribute("Edm", "StDevP")>]
static member StandardDeviationP :
        collection:IEnumerable<Nullable<int>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int32
>
)
>
)
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合中总体的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviationP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviationP 方法 (IEnumerable <(Of <(Int64 >)>))

EntityFunctions
.
.
::
.
StandardDeviationP 方法 (IEnumerable
<
(Of
<
(
Int64
>
)
>
)
)
EntityFunctions 类

调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDevP")> _
Public Shared Function StandardDeviationP ( _
    collection As IEnumerable(Of Long) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDevP")]
public static Nullable<double> StandardDeviationP(
    IEnumerable<long> collection
)
[EdmFunctionAttribute(L"Edm", L"StDevP")]
public:
static Nullable<double> StandardDeviationP(
    IEnumerable<long long>^ collection
)
[<EdmFunctionAttribute("Edm", "StDevP")>]
static member StandardDeviationP :
        collection:IEnumerable<int64> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Int64
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合中总体的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviationP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.StandardDeviationP 方法 (IEnumerable <(Of <(Nullable <(Of <(Int64 >)>) >)>))

EntityFunctions
.
.
::
.
StandardDeviationP 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int64
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 StDevP 规范函数。有关 StDevP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "StDevP")> _
Public Shared Function StandardDeviationP ( _
    collection As IEnumerable(Of Nullable(Of Long)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "StDevP")]
public static Nullable<double> StandardDeviationP(
    IEnumerable<Nullable<long>> collection
)
[EdmFunctionAttribute(L"Edm", L"StDevP")]
public:
static Nullable<double> StandardDeviationP(
    IEnumerable<Nullable<long long>>^ collection
)
[<EdmFunctionAttribute("Edm", "StDevP")>]
static member StandardDeviationP :
        collection:IEnumerable<Nullable<int64>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int64
>
)
>
)
>
)
>
)

一组数值。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

输入集合中总体的统计标准偏差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
StandardDeviationP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Truncate 方法

EntityFunctions
.
.
::
.
Truncate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 Truncate 规范函数。有关 Truncate 规范函数的信息，请参见Math Canonical Functions (Entity SQL)。 调用 Truncate 规范函数。有关 Truncate 规范函数的信息，请参见Math Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.Truncate 方法 (Nullable <(Of <(Decimal >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
Truncate 方法 (Nullable
<
(Of
<
(
Decimal
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 Truncate 规范函数。有关 Truncate 规范函数的信息，请参见 Math Canonical Functions (Entity SQL)。 调用 Truncate 规范函数。有关 Truncate 规范函数的信息，请参见 Math Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Truncate")> _
Public Shared Function Truncate ( _
    value As Nullable(Of Decimal), _
    digits As Nullable(Of Integer) _
) As Nullable(Of Decimal)
[EdmFunctionAttribute("Edm", "Truncate")]
public static Nullable<decimal> Truncate(
    Nullable<decimal> value,
    Nullable<int> digits
)
[EdmFunctionAttribute(L"Edm", L"Truncate")]
public:
static Nullable<Decimal> Truncate(
    Nullable<Decimal> value,
    Nullable<int> digits
)
[<EdmFunctionAttribute("Edm", "Truncate")>]
static member Truncate :
        value:Nullable<decimal> *
        digits:Nullable<int> -> Nullable<decimal>

参数

value
类型： System Nullable
<
(Of
<
(
Decimal
>
)
>
)

要截断的数字。
digits
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要截断到的长度或精度。

返回值

类型： System Nullable
<
(Of
<
(
Decimal
>
)
>
)

截断到 digits 指定的长度或精度的 value。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Truncate 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Truncate 方法 (Nullable <(Of <(Double >)>), Nullable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
Truncate 方法 (Nullable
<
(Of
<
(
Double
>
)
>
)
, Nullable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 Truncate 规范函数。有关 Truncate 规范函数的信息，请参见 Math Canonical Functions (Entity SQL)。 调用 Truncate 规范函数。有关 Truncate 规范函数的信息，请参见 Math Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Truncate")> _
Public Shared Function Truncate ( _
    value As Nullable(Of Double), _
    digits As Nullable(Of Integer) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "Truncate")]
public static Nullable<double> Truncate(
    Nullable<double> value,
    Nullable<int> digits
)
[EdmFunctionAttribute(L"Edm", L"Truncate")]
public:
static Nullable<double> Truncate(
    Nullable<double> value,
    Nullable<int> digits
)
[<EdmFunctionAttribute("Edm", "Truncate")>]
static member Truncate :
        value:Nullable<float> *
        digits:Nullable<int> -> Nullable<float>

参数

value
类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

要截断的数字。
digits
类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

要截断到的长度或精度。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

截断到 digits 指定的长度或精度的 value。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Truncate 重载
System.Data.Objects 命名空间


EntityFunctions ..::.TruncateTime 方法

EntityFunctions
.
.
::
.
TruncateTime 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 TruncateTime 规范函数。有关 TruncateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 TruncateTime 规范函数。有关 TruncateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

名称 说明
页首

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.TruncateTime 方法 (Nullable <(Of <(DateTime >)>))

EntityFunctions
.
.
::
.
TruncateTime 方法 (Nullable
<
(Of
<
(
DateTime
>
)
>
)
)
EntityFunctions 类

调用 TruncateTime 规范函数。有关 TruncateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 TruncateTime 规范函数。有关 TruncateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "TruncateTime")> _
Public Shared Function TruncateTime ( _
    dateValue As Nullable(Of DateTime) _
) As Nullable(Of DateTime)
[EdmFunctionAttribute("Edm", "TruncateTime")]
public static Nullable<DateTime> TruncateTime(
    Nullable<DateTime> dateValue
)
[EdmFunctionAttribute(L"Edm", L"TruncateTime")]
public:
static Nullable<DateTime> TruncateTime(
    Nullable<DateTime> dateValue
)
[<EdmFunctionAttribute("Edm", "TruncateTime")>]
static member TruncateTime :
        dateValue:Nullable<DateTime> -> Nullable<DateTime>

参数

dateValue
类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

要截断的日期。

返回值

类型： System Nullable
<
(Of
<
(
DateTime
>
)
>
)

清除了时间部分的输入日期。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
TruncateTime 重载
System.Data.Objects 命名空间


EntityFunctions ..::.TruncateTime 方法 (Nullable <(Of <(DateTimeOffset >)>))

EntityFunctions
.
.
::
.
TruncateTime 方法 (Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)
)
EntityFunctions 类

调用 TruncateTime 规范函数。有关 TruncateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。 调用 TruncateTime 规范函数。有关 TruncateTime 规范函数的信息，请参见Date and Time Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "TruncateTime")> _
Public Shared Function TruncateTime ( _
    dateValue As Nullable(Of DateTimeOffset) _
) As Nullable(Of DateTimeOffset)
[EdmFunctionAttribute("Edm", "TruncateTime")]
public static Nullable<DateTimeOffset> TruncateTime(
    Nullable<DateTimeOffset> dateValue
)
[EdmFunctionAttribute(L"Edm", L"TruncateTime")]
public:
static Nullable<DateTimeOffset> TruncateTime(
    Nullable<DateTimeOffset> dateValue
)
[<EdmFunctionAttribute("Edm", "TruncateTime")>]
static member TruncateTime :
        dateValue:Nullable<DateTimeOffset> -> Nullable<DateTimeOffset>

参数

dateValue
类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

要截断的日期时间偏移量。

返回值

类型： System Nullable
<
(Of
<
(
DateTimeOffset
>
)
>
)

清除了时间部分的输入日期。

无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。 无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
TruncateTime 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Var 方法

EntityFunctions
.
.
::
.
Var 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

名称 说明
页首

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.Var 方法 (IEnumerable <(Of <(Decimal >)>))

EntityFunctions
.
.
::
.
Var 方法 (IEnumerable
<
(Of
<
(
Decimal
>
)
>
)
)
EntityFunctions 类

调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Var")> _
Public Shared Function Var ( _
    collection As IEnumerable(Of Decimal) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "Var")]
public static Nullable<double> Var(
    IEnumerable<decimal> collection
)
[EdmFunctionAttribute(L"Edm", L"Var")]
public:
static Nullable<double> Var(
    IEnumerable<Decimal>^ collection
)
[<EdmFunctionAttribute("Edm", "Var")>]
static member Var :
        collection:IEnumerable<decimal> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Decimal
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中所有值的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Var 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Var 方法 (IEnumerable <(Of <(Nullable <(Of <(Decimal >)>) >)>))

EntityFunctions
.
.
::
.
Var 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Decimal
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Var")> _
Public Shared Function Var ( _
    collection As IEnumerable(Of Nullable(Of Decimal)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "Var")]
public static Nullable<double> Var(
    IEnumerable<Nullable<decimal>> collection
)
[EdmFunctionAttribute(L"Edm", L"Var")]
public:
static Nullable<double> Var(
    IEnumerable<Nullable<Decimal>>^ collection
)
[<EdmFunctionAttribute("Edm", "Var")>]
static member Var :
        collection:IEnumerable<Nullable<decimal>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Decimal
>
)
>
)
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中所有值的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Var 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Var 方法 (IEnumerable <(Of <(Double >)>))

EntityFunctions
.
.
::
.
Var 方法 (IEnumerable
<
(Of
<
(
Double
>
)
>
)
)
EntityFunctions 类

调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Var")> _
Public Shared Function Var ( _
    collection As IEnumerable(Of Double) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "Var")]
public static Nullable<double> Var(
    IEnumerable<double> collection
)
[EdmFunctionAttribute(L"Edm", L"Var")]
public:
static Nullable<double> Var(
    IEnumerable<double>^ collection
)
[<EdmFunctionAttribute("Edm", "Var")>]
static member Var :
        collection:IEnumerable<float> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Double
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中所有值的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Var 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Var 方法 (IEnumerable <(Of <(Nullable <(Of <(Double >)>) >)>))

EntityFunctions
.
.
::
.
Var 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Double
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Var")> _
Public Shared Function Var ( _
    collection As IEnumerable(Of Nullable(Of Double)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "Var")]
public static Nullable<double> Var(
    IEnumerable<Nullable<double>> collection
)
[EdmFunctionAttribute(L"Edm", L"Var")]
public:
static Nullable<double> Var(
    IEnumerable<Nullable<double>>^ collection
)
[<EdmFunctionAttribute("Edm", "Var")>]
static member Var :
        collection:IEnumerable<Nullable<float>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Double
>
)
>
)
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中所有值的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Var 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Var 方法 (IEnumerable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
Var 方法 (IEnumerable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Var")> _
Public Shared Function Var ( _
    collection As IEnumerable(Of Integer) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "Var")]
public static Nullable<double> Var(
    IEnumerable<int> collection
)
[EdmFunctionAttribute(L"Edm", L"Var")]
public:
static Nullable<double> Var(
    IEnumerable<int>^ collection
)
[<EdmFunctionAttribute("Edm", "Var")>]
static member Var :
        collection:IEnumerable<int> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Int32
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中所有值的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Var 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Var 方法 (IEnumerable <(Of <(Nullable <(Of <(Int32 >)>) >)>))

EntityFunctions
.
.
::
.
Var 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int32
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Var")> _
Public Shared Function Var ( _
    collection As IEnumerable(Of Nullable(Of Integer)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "Var")]
public static Nullable<double> Var(
    IEnumerable<Nullable<int>> collection
)
[EdmFunctionAttribute(L"Edm", L"Var")]
public:
static Nullable<double> Var(
    IEnumerable<Nullable<int>>^ collection
)
[<EdmFunctionAttribute("Edm", "Var")>]
static member Var :
        collection:IEnumerable<Nullable<int>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int32
>
)
>
)
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中所有值的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Var 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Var 方法 (IEnumerable <(Of <(Int64 >)>))

EntityFunctions
.
.
::
.
Var 方法 (IEnumerable
<
(Of
<
(
Int64
>
)
>
)
)
EntityFunctions 类

调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Var")> _
Public Shared Function Var ( _
    collection As IEnumerable(Of Long) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "Var")]
public static Nullable<double> Var(
    IEnumerable<long> collection
)
[EdmFunctionAttribute(L"Edm", L"Var")]
public:
static Nullable<double> Var(
    IEnumerable<long long>^ collection
)
[<EdmFunctionAttribute("Edm", "Var")>]
static member Var :
        collection:IEnumerable<int64> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Int64
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中所有值的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Var 重载
System.Data.Objects 命名空间


EntityFunctions ..::.Var 方法 (IEnumerable <(Of <(Nullable <(Of <(Int64 >)>) >)>))

EntityFunctions
.
.
::
.
Var 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int64
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 Var 规范函数。有关 Var 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "Var")> _
Public Shared Function Var ( _
    collection As IEnumerable(Of Nullable(Of Long)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "Var")]
public static Nullable<double> Var(
    IEnumerable<Nullable<long>> collection
)
[EdmFunctionAttribute(L"Edm", L"Var")]
public:
static Nullable<double> Var(
    IEnumerable<Nullable<long long>>^ collection
)
[<EdmFunctionAttribute("Edm", "Var")>]
static member Var :
        collection:IEnumerable<Nullable<int64>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int64
>
)
>
)
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中所有值的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
Var 重载
System.Data.Objects 命名空间


EntityFunctions ..::.VarP 方法

EntityFunctions
.
.
::
.
VarP 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityFunctions 类

调用 VarP 规范函数，该函数返回总体方差。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 VarP 规范函数，该函数返回总体方差。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

名称 说明
页首

此函数将被转换为数据库中对应的函数。

参考

EntityFunctions 类
EntityFunctions 成员
System.Data.Objects 命名空间


EntityFunctions ..::.VarP 方法 (IEnumerable <(Of <(Decimal >)>))

EntityFunctions
.
.
::
.
VarP 方法 (IEnumerable
<
(Of
<
(
Decimal
>
)
>
)
)
EntityFunctions 类

调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "VarP")> _
Public Shared Function VarP ( _
    collection As IEnumerable(Of Decimal) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "VarP")]
public static Nullable<double> VarP(
    IEnumerable<decimal> collection
)
[EdmFunctionAttribute(L"Edm", L"VarP")]
public:
static Nullable<double> VarP(
    IEnumerable<Decimal>^ collection
)
[<EdmFunctionAttribute("Edm", "VarP")>]
static member VarP :
        collection:IEnumerable<decimal> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Decimal
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中总体的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
VarP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.VarP 方法 (IEnumerable <(Of <(Nullable <(Of <(Decimal >)>) >)>))

EntityFunctions
.
.
::
.
VarP 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Decimal
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "VarP")> _
Public Shared Function VarP ( _
    collection As IEnumerable(Of Nullable(Of Decimal)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "VarP")]
public static Nullable<double> VarP(
    IEnumerable<Nullable<decimal>> collection
)
[EdmFunctionAttribute(L"Edm", L"VarP")]
public:
static Nullable<double> VarP(
    IEnumerable<Nullable<Decimal>>^ collection
)
[<EdmFunctionAttribute("Edm", "VarP")>]
static member VarP :
        collection:IEnumerable<Nullable<decimal>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Decimal
>
)
>
)
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中总体的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
VarP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.VarP 方法 (IEnumerable <(Of <(Double >)>))

EntityFunctions
.
.
::
.
VarP 方法 (IEnumerable
<
(Of
<
(
Double
>
)
>
)
)
EntityFunctions 类

调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "VarP")> _
Public Shared Function VarP ( _
    collection As IEnumerable(Of Double) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "VarP")]
public static Nullable<double> VarP(
    IEnumerable<double> collection
)
[EdmFunctionAttribute(L"Edm", L"VarP")]
public:
static Nullable<double> VarP(
    IEnumerable<double>^ collection
)
[<EdmFunctionAttribute("Edm", "VarP")>]
static member VarP :
        collection:IEnumerable<float> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Double
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中总体的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
VarP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.VarP 方法 (IEnumerable <(Of <(Nullable <(Of <(Double >)>) >)>))

EntityFunctions
.
.
::
.
VarP 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Double
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "VarP")> _
Public Shared Function VarP ( _
    collection As IEnumerable(Of Nullable(Of Double)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "VarP")]
public static Nullable<double> VarP(
    IEnumerable<Nullable<double>> collection
)
[EdmFunctionAttribute(L"Edm", L"VarP")]
public:
static Nullable<double> VarP(
    IEnumerable<Nullable<double>>^ collection
)
[<EdmFunctionAttribute("Edm", "VarP")>]
static member VarP :
        collection:IEnumerable<Nullable<float>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Double
>
)
>
)
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中总体的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
VarP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.VarP 方法 (IEnumerable <(Of <(Int32 >)>))

EntityFunctions
.
.
::
.
VarP 方法 (IEnumerable
<
(Of
<
(
Int32
>
)
>
)
)
EntityFunctions 类

调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "VarP")> _
Public Shared Function VarP ( _
    collection As IEnumerable(Of Integer) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "VarP")]
public static Nullable<double> VarP(
    IEnumerable<int> collection
)
[EdmFunctionAttribute(L"Edm", L"VarP")]
public:
static Nullable<double> VarP(
    IEnumerable<int>^ collection
)
[<EdmFunctionAttribute("Edm", "VarP")>]
static member VarP :
        collection:IEnumerable<int> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Int32
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中总体的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
VarP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.VarP 方法 (IEnumerable <(Of <(Nullable <(Of <(Int32 >)>) >)>))

EntityFunctions
.
.
::
.
VarP 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int32
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "VarP")> _
Public Shared Function VarP ( _
    collection As IEnumerable(Of Nullable(Of Integer)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "VarP")]
public static Nullable<double> VarP(
    IEnumerable<Nullable<int>> collection
)
[EdmFunctionAttribute(L"Edm", L"VarP")]
public:
static Nullable<double> VarP(
    IEnumerable<Nullable<int>>^ collection
)
[<EdmFunctionAttribute("Edm", "VarP")>]
static member VarP :
        collection:IEnumerable<Nullable<int>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int32
>
)
>
)
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中总体的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
VarP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.VarP 方法 (IEnumerable <(Of <(Int64 >)>))

EntityFunctions
.
.
::
.
VarP 方法 (IEnumerable
<
(Of
<
(
Int64
>
)
>
)
)
EntityFunctions 类

调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "VarP")> _
Public Shared Function VarP ( _
    collection As IEnumerable(Of Long) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "VarP")]
public static Nullable<double> VarP(
    IEnumerable<long> collection
)
[EdmFunctionAttribute(L"Edm", L"VarP")]
public:
static Nullable<double> VarP(
    IEnumerable<long long>^ collection
)
[<EdmFunctionAttribute("Edm", "VarP")>]
static member VarP :
        collection:IEnumerable<int64> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Int64
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中的总体方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
VarP 重载
System.Data.Objects 命名空间


EntityFunctions ..::.VarP 方法 (IEnumerable <(Of <(Nullable <(Of <(Int64 >)>) >)>))

EntityFunctions
.
.
::
.
VarP 方法 (IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int64
>
)
>
)
>
)
>
)
)
EntityFunctions 类

调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。 调用 VarP 规范函数。有关 VarP 规范函数的信息，请参见Aggregate Canonical Functions (Entity SQL)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<EdmFunctionAttribute("Edm", "VarP")> _
Public Shared Function VarP ( _
    collection As IEnumerable(Of Nullable(Of Long)) _
) As Nullable(Of Double)
[EdmFunctionAttribute("Edm", "VarP")]
public static Nullable<double> VarP(
    IEnumerable<Nullable<long>> collection
)
[EdmFunctionAttribute(L"Edm", L"VarP")]
public:
static Nullable<double> VarP(
    IEnumerable<Nullable<long long>>^ collection
)
[<EdmFunctionAttribute("Edm", "VarP")>]
static member VarP :
        collection:IEnumerable<Nullable<int64>> -> Nullable<float>

参数

collection
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Nullable
<
(Of
<
(
Int64
>
)
>
)
>
)
>
)

将计算其方差的值集。

返回值

类型： System Nullable
<
(Of
<
(
Double
>
)
>
)

指定集合中总体的统计方差。

此函数将被转换为数据库中对应的函数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EntityFunctions 类
EntityFunctions 成员
VarP 重载
System.Data.Objects 命名空间


IObjectSet <(Of <(TEntity >)>) 接口

IObjectSet
<
(Of
<
(
TEntity
>
)
>
)
接口
成员

提供允许对一组数据对象进行修改的功能。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Interface IObjectSet(Of TEntity As Class) _
    Inherits IQueryable(Of TEntity), IEnumerable(Of TEntity),  _
    IQueryable, IEnumerable
public interface IObjectSet<TEntity> : IQueryable<TEntity>,
    IEnumerable<TEntity>, IQueryable, IEnumerable
where TEntity : class

generic<typename TEntity>
where TEntity : ref class
public interface class IObjectSet : IQueryable<TEntity>,
    IEnumerable<TEntity>, IQueryable, IEnumerable
type IObjectSet<'TEntity when 'TEntity : not struct> =
    interface
        interface IQueryable<'TEntity>
        interface IEnumerable<'TEntity>
        interface IQueryable
        interface IEnumerable
    end

类型参数

TEntity

从查询返回的实体对象的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObjectSet TEntity 成员
System.Data.Objects 命名空间


IObjectSet <(Of <(TEntity >)>) 成员

IObjectSet
<
(Of
<
(
TEntity
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IObjectSet

提供允许对一组数据对象进行修改的功能。

IObjectSet TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

IObjectSet TEntity 接口
System.Data.Objects 命名空间


IObjectSet <(Of <(TEntity >)>) 方法

IObjectSet
<
(Of
<
(
TEntity
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IObjectSet

IObjectSet TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

IObjectSet TEntity 接口
System.Data.Objects 命名空间


IObjectSet <(Of <(TEntity >)>) ..::.AddObject 方法

IObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
AddObject 方法
IObjectSet

通知对象集，必须将表示新实体的对象添加到该集中。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Sub AddObject ( _
    entity As TEntity _
)
void AddObject(
    TEntity entity
)
void AddObject(
    TEntity entity
)
abstract AddObject :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要添加到集中的新对象。

在以某种方式保存对该集的更改之前，可能无法在该集的枚举中看到对该集的更改。此行为取决于 IObjectSet<(Of <(TEntity>)>) 的特定实现。 在以某种方式保存对该集的更改之前，可能无法在该集的枚举中看到对该集的更改。此行为取决于 IObjectSet<(Of <(TEntity>)>) 的特定实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObjectSet TEntity 接口
IObjectSet TEntity 成员
System.Data.Objects 命名空间


IObjectSet <(Of <(TEntity >)>) ..::.Attach 方法

IObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法
IObjectSet

通知对象集，必须将表示现有实体的对象添加到该集中。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Sub Attach ( _
    entity As TEntity _
)
void Attach(
    TEntity entity
)
void Attach(
    TEntity entity
)
abstract Attach :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要添加到集中的现有对象。

在以某种方式保存对该集的更改之前，可能无法在该集的枚举中看到对该集的更改。此行为取决于 IObjectSet<(Of <(TEntity>)>) 的特定实现。 在以某种方式保存对该集的更改之前，可能无法在该集的枚举中看到对该集的更改。此行为取决于 IObjectSet<(Of <(TEntity>)>) 的特定实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObjectSet TEntity 接口
IObjectSet TEntity 成员
System.Data.Objects 命名空间


IObjectSet <(Of <(TEntity >)>) ..::.DeleteObject 方法

IObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
DeleteObject 方法
IObjectSet

通知对象集必须从中删除表示现有实体的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Sub DeleteObject ( _
    entity As TEntity _
)
void DeleteObject(
    TEntity entity
)
void DeleteObject(
    TEntity entity
)
abstract DeleteObject :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要从集中删除的现有对象。

在以某种方式保存对该集的更改之前，可能无法在该集的枚举中看到对该集的更改。此行为取决于 IObjectSet<(Of <(TEntity>)>) 的特定实现。 在以某种方式保存对该集的更改之前，可能无法在该集的枚举中看到对该集的更改。此行为取决于 IObjectSet<(Of <(TEntity>)>) 的特定实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObjectSet TEntity 接口
IObjectSet TEntity 成员
System.Data.Objects 命名空间


IObjectSet <(Of <(TEntity >)>) ..::.Detach 方法

IObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Detach 方法
IObjectSet

通知对象集必须从中分离表示现有实体的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Sub Detach ( _
    entity As TEntity _
)
void Detach(
    TEntity entity
)
void Detach(
    TEntity entity
)
abstract Detach :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要从对象集中分离的对象。

在以某种方式保存对该集的更改之前，可能无法在该集的枚举中看到对该集的更改。此行为取决于 IObjectSet<(Of <(TEntity>)>) 的特定实现。 在以某种方式保存对该集的更改之前，可能无法在该集的枚举中看到对该集的更改。此行为取决于 IObjectSet<(Of <(TEntity>)>) 的特定实现。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

IObjectSet TEntity 接口
IObjectSet TEntity 成员
System.Data.Objects 命名空间


IObjectSet <(Of <(TEntity >)>) ..::.GetEnumerator 方法

IObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
GetEnumerator 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IObjectSet

名称 说明
页首

参考

IObjectSet TEntity 接口
IObjectSet TEntity 成员
System.Data.Objects 命名空间


IObjectSet <(Of <(TEntity >)>) 属性

IObjectSet
<
(Of
<
(
TEntity
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
IObjectSet

IObjectSet TEntity 类型公开以下成员。

名称 说明
页首

参考

IObjectSet TEntity 接口
System.Data.Objects 命名空间


MergeOption 枚举

MergeOption 枚举

指定加载到对象上下文中的对象与对象上下文中的已有对象的合并方式。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Enumeration MergeOption
public enum MergeOption
public enum class MergeOption
type MergeOption
成员名称 | 说明
AppendOnly | 对象上下文中不存在的对象将附加到该上下文。如果该上下文中已存在对象，则该项中对象属性的当前值和原始值不会被数据源值覆盖。该对象的项状态和项中对象的属性状态不会更改。AppendOnly 是默认合并选项。 对象上下文中不存在的对象将附加到该上下文。如果该上下文中已存在对象，则该项中对象属性的当前值和原始值不会被数据源值覆盖。该对象的项状态和项中对象的属性状态不会更改。AppendOnly 是默认合并选项。 对象上下文中不存在的对象将附加到该上下文。如果该上下文中已存在对象，则该项中对象属性的当前值和原始值不会被数据源值覆盖。该对象的项状态和项中对象的属性状态不会更改。AppendOnly 是默认合并选项。 对象上下文中不存在的对象将附加到该上下文。如果该上下文中已存在对象，则该项中对象属性的当前值和原始值不会被数据源值覆盖。该对象的项状态和项中对象的属性状态不会更改。AppendOnly 是默认合并选项。
OverwriteChanges | 对象上下文中不存在的对象将附加到该上下文。如果该上下文中已存在对象，则该项中对象属性的当前值和原始值将会被数据源值覆盖。该对象的项状态将设置为 Unchanged，任何属性都不会标记为已修改。 对象上下文中不存在的对象将附加到该上下文。如果该上下文中已存在对象，则该项中对象属性的当前值和原始值将会被数据源值覆盖。该对象的项状态将设置为 Unchanged，任何属性都不会标记为已修改。 对象上下文中不存在的对象将附加到该上下文。如果该上下文中已存在对象，则该项中对象属性的当前值和原始值将会被数据源值覆盖。该对象的项状态将设置为 Unchanged，任何属性都不会标记为已修改。
PreserveChanges 对象上下文中不存在的对象将附加到该上下文。

如果该实体的状态为 Unchanged，那么该输入中的当前值和原始值会被数据源值覆盖。实体的状态仍保持 Unchanged，并且属性没有标记为已修改。 如果该实体的状态为 Unchanged，那么该输入中的当前值和原始值会被数据源值覆盖。实体的状态仍保持 Unchanged，并且属性没有标记为已修改。

如果该实体的状态为 Modified，那么修改的属性的当前值不会被数据源值覆盖。数据源中的值将覆盖原始的未修改属性的值。 如果该实体的状态为 Modified，那么修改的属性的当前值不会被数据源值覆盖。数据源中的值将覆盖原始的未修改属性的值。

在 .NET Framework 4 版中，Entity Framework 比较未修改的属性的当前值和从数据源返回的值。如果这些值不相同，那么该属性将标记为已修改。 在 .NET Framework 4 版中，Entity Framework 比较未修改的属性的当前值和从数据源返回的值。如果这些值不相同，那么该属性将标记为已修改。

在 .NET Framework 3.5 SP1 版中，即使数据源中的值不同，Entity Framework 也不会将该属性标记为已修改。

当调用 SaveChanges 时，只有修改过的属性才会保留到数据源。

若要保留 3.5 SP1 行为，请将 UseLegacyPreserveChangesBehavior 设置为 true。该 PreserveChanges 选项可用于在保留本地上下文中的更改的同时解决开放式并发异常。有关更多信息，请参见Saving Changes and Managing Concurrency (Entity Framework)。 若要保留 3.5 SP1 行为，请将 UseLegacyPreserveChangesBehavior 设置为 true。该 PreserveChanges 选项可用于在保留本地上下文中的更改的同时解决开放式并发异常。有关更多信息，请参见Saving Changes and Managing Concurrency (Entity Framework)。 若要保留 3.5 SP1 行为，请将 UseLegacyPreserveChangesBehavior 设置为 true。该 PreserveChanges 选项可用于在保留本地上下文中的更改的同时解决开放式并发异常。有关更多信息，请参见Saving Changes and Managing Concurrency (Entity Framework)。
NoTracking | 对象保持为 Detached 状态，且未在 ObjectStateManager 中跟踪对象。但是，Entity Framework 生成的实体和具有代理的 POCO 实体将维护对该对象上下文的引用以便于相关对象的加载。 对象保持为 Detached 状态，且未在 ObjectStateManager 中跟踪对象。但是，Entity Framework 生成的实体和具有代理的 POCO 实体将维护对该对象上下文的引用以便于相关对象的加载。

Entity Framework 只在缓存中使用特定的实体键来维护对象的单个实例。 EntityKey 对象是不可变的对象，表示对象的标识。实体键用于在对象上下文中执行标识解析。有关更多信息，请参见Working with Entity Keys。 如果具有相同标识的实体已被跟踪，来自数据源的数据和已经位于状态管理器中的数据根据查询的 MergeOption 合并。 Entity Framework 只在缓存中使用特定的实体键来维护对象的单个实例。 EntityKey 对象是不可变的对象，表示对象的标识。实体键用于在对象上下文中执行标识解析。有关更多信息，请参见Working with Entity Keys。 如果具有相同标识的实体已被跟踪，来自数据源的数据和已经位于状态管理器中的数据根据查询的 MergeOption 合并。 Entity Framework 只在缓存中使用特定的实体键来维护对象的单个实例。 EntityKey 对象是不可变的对象，表示对象的标识。实体键用于在对象上下文中执行标识解析。有关更多信息，请参见Working with Entity Keys。 如果具有相同标识的实体已被跟踪，来自数据源的数据和已经位于状态管理器中的数据根据查询的 MergeOption 合并。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Objects 命名空间

其他资源

Change Tracking and Identity Resolution (Entity Framework)


ObjectContext 类

ObjectContext 类
成员

提供用于查询和使用对象形式的实体数据的功能。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Class ObjectContext _
    Implements IDisposable
public class ObjectContext : IDisposable
public ref class ObjectContext : IDisposable
type ObjectContext =
    class
        interface IDisposable
    end

ObjectContext 类是以对象（这些对象是概念模型中定义的实体类型的实例）的形式与数据进行交互的主要类。ObjectContext 类的实例封装以下内容： ObjectContext 类是以对象（这些对象是概念模型中定义的实体类型的实例）的形式与数据进行交互的主要类。ObjectContext 类的实例封装以下内容：

  • 到数据库的连接，以 EntityConnection 对象的形式封装。

  • 描述该模型的元数据，以 MetadataWorkspace 对象的形式封装。

  • 用于管理缓存中持久保存的对象的 ObjectStateManager 对象。

Entity Data Model 工具生成表示概念性模型的对象层时，会从 ObjectContext 派生表示该模型的 EntityContainer 的类。有关更多信息，请参见Object Services Overview (Entity Framework)。 Entity Data Model 工具生成表示概念性模型的对象层时，会从 ObjectContext 派生表示该模型的 EntityContainer 的类。有关更多信息，请参见Object Services Overview (Entity Framework)。

此示例基于 Adventure Works Sales Model。该示例演示如何构造 ObjectContext。 此示例基于 Adventure Works Sales Model。该示例演示如何构造 ObjectContext。

' Create the ObjectContext.
Dim context As New ObjectContext("name=AdventureWorksEntities")

' Set the DefaultContainerName for the ObjectContext.
' When DefaultContainerName is set, the Entity Framework only
' searches for the type in the specified container.
' Note that if a type is defined only once in the metadata workspace
' you do not have to set the DefaultContainerName.
context.DefaultContainerName = "AdventureWorksEntities"

Dim query As ObjectSet(Of Product) = context.CreateObjectSet(Of Product)()

' Iterate through the collection of Products.
For Each result As Product In query
    Console.WriteLine("Product Name: {0}", result.Name)
Next

// Create the ObjectContext.
ObjectContext context =
    new ObjectContext("name=AdventureWorksEntities");

// Set the DefaultContainerName for the ObjectContext.
// When DefaultContainerName is set, the Entity Framework only
// searches for the type in the specified container.
// Note that if a type is defined only once in the metadata workspace
// you do not have to set the DefaultContainerName.
context.DefaultContainerName = "AdventureWorksEntities";

ObjectSet<Product> query = context.CreateObjectSet<Product>();

// Iterate through the collection of Products.
foreach (Product result in query)
    Console.WriteLine("Product Name: {0}", result.Name);

System.Data.Objects System.Data.Objects..::.ObjectContextObjectContext
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)
Managing the Object Context (Entity Framework)
Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext 成员

ObjectContext 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

提供用于查询和使用对象形式的实体数据的功能。

ObjectContext 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectContext 类
System.Data.Objects 命名空间


ObjectContext 构造函数

ObjectContext 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

初始化 ObjectContext 类的新实例。

名称 说明
页首

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext 构造函数 (EntityConnection)

ObjectContext 构造函数 (EntityConnection)
ObjectContext 类

使用给定连接初始化 ObjectContext 类的新实例。在构造过程中，从 EntityConnection 对象提取元数据工作区。 使用给定连接初始化 ObjectContext 类的新实例。在构造过程中，从 EntityConnection 对象提取元数据工作区。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    connection As EntityConnection _
)
public ObjectContext(
    EntityConnection connection
)
public:
ObjectContext(
    EntityConnection^ connection
)
new :
        connection:EntityConnection -> ObjectContext

参数

connection
类型： System.Data.EntityClient EntityConnection
一个 EntityConnection，其中包含对模型和数据源连接的引用。
异常 | 条件
ArgumentNullException | connection 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | connection 无效。 - 或 - 元数据工作区无效。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
ObjectContext 重载
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext 构造函数 (String)

ObjectContext 构造函数 (String)
ObjectContext 类

使用给定的连接字符串和默认的实体容器名称初始化 ObjectContext 类的新实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    connectionString As String _
)
public ObjectContext(
    string connectionString
)
public:
ObjectContext(
    String^ connectionString
)
new :
        connectionString:string -> ObjectContext

参数

connectionString
类型： System String
连接字符串，此连接字符串也可提供对元数据信息的访问。
异常 | 条件
ArgumentNullException | connectionString 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | connectionString 无效。 - 或 - 元数据工作区无效。

connectionString 是一个字符串，其中包含访问概念模型和连接数据源所需的信息。EntityConnectionStringBuilder 类可用于正确地格式化字符串。 connectionString 是一个字符串，其中包含访问概念模型和连接数据源所需的信息。EntityConnectionStringBuilder 类可用于正确地格式化字符串。

实体数据模型工具生成已命名的连接字符串，存储在应用程序的配置文件中。在实例化 ObjectContext 类时，可以提供此命名字符串来代替 connectionString 参数。 实体数据模型工具生成已命名的连接字符串，存储在应用程序的配置文件中。在实例化 ObjectContext 类时，可以提供此命名字符串来代替 connectionString 参数。

本主题中的示例基于 Adventure Works Sales Model。该示例演示如何构造 ObjectContext。 本主题中的示例基于 Adventure Works Sales Model。该示例演示如何构造 ObjectContext。

' Create the ObjectContext.
Dim context As New ObjectContext("name=AdventureWorksEntities")

' Set the DefaultContainerName for the ObjectContext.
' When DefaultContainerName is set, the Entity Framework only
' searches for the type in the specified container.
' Note that if a type is defined only once in the metadata workspace
' you do not have to set the DefaultContainerName.
context.DefaultContainerName = "AdventureWorksEntities"

Dim query As ObjectSet(Of Product) = context.CreateObjectSet(Of Product)()

' Iterate through the collection of Products.
For Each result As Product In query
    Console.WriteLine("Product Name: {0}", result.Name)
Next

// Create the ObjectContext.
ObjectContext context =
    new ObjectContext("name=AdventureWorksEntities");

// Set the DefaultContainerName for the ObjectContext.
// When DefaultContainerName is set, the Entity Framework only
// searches for the type in the specified container.
// Note that if a type is defined only once in the metadata workspace
// you do not have to set the DefaultContainerName.
context.DefaultContainerName = "AdventureWorksEntities";

ObjectSet<Product> query = context.CreateObjectSet<Product>();

// Iterate through the collection of Products.
foreach (Product result in query)
    Console.WriteLine("Product Name: {0}", result.Name);

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
ObjectContext 重载
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)
Configuring the Entity Framework (Entity Framework Tasks)


ObjectContext 构造函数 (EntityConnection, String)

ObjectContext 构造函数 (EntityConnection, String)
ObjectContext 类

使用给定的连接和实体容器名称初始化 ObjectContext 类的新实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New ( _
    connection As EntityConnection, _
    defaultContainerName As String _
)
protected ObjectContext(
    EntityConnection connection,
    string defaultContainerName
)
protected:
ObjectContext(
    EntityConnection^ connection,
    String^ defaultContainerName
)
new :
        connection:EntityConnection *
        defaultContainerName:string -> ObjectContext

参数

connection
类型： System.Data.EntityClient EntityConnection
一个 EntityConnection，其中包含对模型和数据源连接的引用。
defaultContainerName
类型： System String
默认实体容器的名称。通过此方法设置 defaultContainerName 时，该属性为只读属性。 默认实体容器的名称。通过此方法设置 defaultContainerName 时，该属性为只读属性。
异常 | 条件
ArgumentNullException | connection 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | connection 或 defaultContainerName 或元数据工作区无效。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
ObjectContext 重载
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext 构造函数 (String, String)

ObjectContext 构造函数 (String, String)
ObjectContext 类

使用给定的连接字符串和实体容器名称初始化 ObjectContext 类的新实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New ( _
    connectionString As String, _
    defaultContainerName As String _
)
protected ObjectContext(
    string connectionString,
    string defaultContainerName
)
protected:
ObjectContext(
    String^ connectionString,
    String^ defaultContainerName
)
new :
        connectionString:string *
        defaultContainerName:string -> ObjectContext

参数

connectionString
类型： System String
连接字符串，此连接字符串也可提供对元数据信息的访问。
defaultContainerName
类型： System String
默认实体容器的名称。通过此方法设置 defaultContainerName 时，该属性为只读属性。 默认实体容器的名称。通过此方法设置 defaultContainerName 时，该属性为只读属性。
异常 | 条件
ArgumentNullException | connectionString 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | connectionString 或 defaultContainerName 或元数据工作区无效。

connectionString 是一个字符串，其中包含访问概念模型和连接数据源所需的信息。EntityConnectionStringBuilder 类可用于正确地格式化字符串。 connectionString 是一个字符串，其中包含访问概念模型和连接数据源所需的信息。EntityConnectionStringBuilder 类可用于正确地格式化字符串。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
ObjectContext 重载
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext 方法

ObjectContext 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

ObjectContext 类型公开以下成员。

名称 说明
页首

参考

ObjectContext 类
System.Data.Objects 命名空间


ObjectContext ..::.AcceptAllChanges 方法

ObjectContext
.
.
::
.
AcceptAllChanges 方法
ObjectContext 类

接受在对象上下文中对对象所做的所有更改。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub AcceptAllChanges
public void AcceptAllChanges()
public:
void AcceptAllChanges()
member AcceptAllChanges : unit -> unit

接受对 ObjectStateManager 中所有关联项的更改，从而使它们的最终状态为未更改或已分离。

此方法循环访问 ObjectStateManager 中所有为 Added 或 Modified 的 ObjectStateEntry 对象，然后将项的状态设置为 Unchanged。已删除的项变为已分离。 此方法循环访问 ObjectStateManager 中所有为 Added 或 Modified 的 ObjectStateEntry 对象，然后将项的状态设置为 Unchanged。已删除的项变为已分离。

如果调用 SaveChanges 方法而没有指定 AcceptAllChangesAfterSave，用户必须调用 AcceptAllChanges 方法。如果事务失败而用户希望重试，AcceptAllChanges 方法就很有用。 如果调用 SaveChanges 方法而没有指定 AcceptAllChangesAfterSave，用户必须调用 AcceptAllChanges 方法。如果事务失败而用户希望重试，AcceptAllChanges 方法就很有用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)
Saving Changes and Managing Concurrency (Entity Framework)


ObjectContext ..::.AddObject 方法

ObjectContext
.
.
::
.
AddObject 方法
ObjectContext 类

将对象添加到对象上下文。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub AddObject ( _
    entitySetName As String, _
    entity As Object _
)
public void AddObject(
    string entitySetName,
    Object entity
)
public:
void AddObject(
    String^ entitySetName,
    Object^ entity
)
member AddObject :
        entitySetName:string *
        entity:Object -> unit

参数

entitySetName
类型： System String
表示实体集名称，可以选择通过实体容器名称对它进行限定。
entity
类型： System Object
要添加的 Object。
异常 | 条件
ArgumentNullException | entity 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - entitySetName 未限定。

调用 ObjectContext 的 AddObject 可将对象添加到对象上下文。当对象为数据源中尚不存在的新对象时采用此方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 调用 ObjectContext 的 AddObject 可将对象添加到对象上下文。当对象为数据源中尚不存在的新对象时采用此方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 调用 ObjectContext 的 AddObject 可将对象添加到对象上下文。当对象为数据源中尚不存在的新对象时采用此方法。有关更多信息，请参见Attaching Objects (Entity Framework)。

对象以 Detached、Deleted 或 Added 状态添加到 ObjectStateManager。

在创建与对象上下文中的另一个对象相关的新对象时，通过使用下列方法之一添加该新对象：

  • 调用 EntityCollection<(Of <(TEntity>)>) 的 Add 方法并指定相关对象。此方法适用于一对多或多对多关系。 调用 EntityCollection<(Of <(TEntity>)>) 的 Add 方法并指定相关对象。此方法适用于一对多或多对多关系。

  • 将 EntityReference<(Of <(TEntity>)>) 的 Value 属性设置为相关对象。此方法适用于一对一或多对一关系。 将 EntityReference<(Of <(TEntity>)>) 的 Value 属性设置为相关对象。此方法适用于一对一或多对一关系。

有关更多信息，请参见Adding, Modifying, and Deleting Objects (Entity Framework)。

如果对象处于已分离状态，则该实体不能有 EntityKey。

entitySetName 格式的规则如下：

  • 如果 DefaultContainerName 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 entitySetName 必须完全新、限定为 <实体容器名称>.<实体集名称> 形式。

  • 如果 DefaultContainerName 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 entitySetName 可以为 <实体容器名称>。<实体集名称> 或 <实体集名称>。

如果 object 具有一个 EntityKey，并且 entitySetName 具有一个值，则实体键的 EntitySet 必须与基于 entitySetName 和实体容器名称找到的 EntitySet 相匹配。

此示例基于 Adventure Works Sales Model。该示例添加一个新产品并将更改保存到数据库。 此示例基于 Adventure Works Sales Model。该示例添加一个新产品并将更改保存到数据库。

Dim newProduct As Product

' Define values for the new product.
Dim dateTimeString As String = "1998-06-01 00:00:00.000"
Dim productName As String = "Flat Washer 10"
Dim productNumber As String = "FW-5600"
Dim safetyStockLevel As Int16 = 1000
Dim reorderPoint As Int16 = 750

' Convert the date time string into a DateTime instance.
Dim sellStartDate As DateTime
If Not DateTime.TryParse(dateTimeString, sellStartDate) Then
    Throw New ArgumentException(String.Format("The string '{0}'cannot be converted to DateTime.", dateTimeString))
End If

' Create a new Product.
newProduct = Product.CreateProduct(0, productName, productNumber, False, False, safetyStockLevel, _
             reorderPoint, 0, 0, 0, DateTime.Today, Guid.NewGuid(), DateTime.Today)

Using context As New AdventureWorksEntities()
    Try
        ' Add the new object to the context.
        context.Products.AddObject(newProduct)

        ' Persist the new produc to the data source.
        context.SaveChanges()

        ' Return the identity of the new product.
        Return newProduct.ProductID
    Catch ex As UpdateException
        Throw New InvalidOperationException(String.Format("The object could not be added. Make sure that a " & _
                                                          "product with a product number '{0}' does not aleady exist.", _
                                                          newProduct.ProductNumber), ex)
    End Try
End Using

Product newProduct;

// Define values for the new product.
string dateTimeString = "1998-06-01 00:00:00.000";
string productName = "Flat Washer 10";
string productNumber = "FW-5600";
Int16 safetyStockLevel = 1000;
Int16 reorderPoint = 750;

// Convert the date time string into a DateTime instance.
DateTime sellStartDate;
if (!DateTime.TryParse(dateTimeString, out sellStartDate))
{
    throw new ArgumentException(string.Format("The string '{0}'cannot "
        + "be converted to DateTime.", dateTimeString));
}

// Create a new Product.
newProduct = Product.CreateProduct(0,
    productName, productNumber, false, false, safetyStockLevel, reorderPoint,
    0, 0, 0, DateTime.Today, Guid.NewGuid(), DateTime.Today);

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Add the new object to the context.
        context.Products.AddObject(newProduct);

        // Persist the new produc to the data source.
        context.SaveChanges();

        // Return the identity of the new product.
        return newProduct.ProductID;
    }
    catch (UpdateException ex)
    {
        throw new InvalidOperationException(string.Format(
            "The object could not be added. Make sure that a "
            + "product with a product number '{0}' does not aleady exist.\n",
            newProduct.ProductNumber), ex);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间
AddObject

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.ApplyCurrentValues <(Of <(TEntity >)>) 方法

ObjectContext
.
.
::
.
ApplyCurrentValues
<
(Of
<
(
TEntity
>
)
>
)
方法
ObjectContext 类

将标量值从提供的对象复制到 ObjectContext 中具有相同键的对象中。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ApplyCurrentValues(Of TEntity As Class) ( _
    entitySetName As String, _
    currentEntity As TEntity _
) As TEntity
public TEntity ApplyCurrentValues<TEntity>(
    string entitySetName,
    TEntity currentEntity
)
where TEntity : class

public:
generic<typename TEntity>
where TEntity : ref class
TEntity ApplyCurrentValues(
    String^ entitySetName,
    TEntity currentEntity
)
member ApplyCurrentValues :
        entitySetName:string *
        currentEntity:'TEntity -> 'TEntity  when 'TEntity : not struct

类型参数

TEntity

对象的实体类型。

参数

entitySetName
类型： System String
对象所属的实体集的名称。
currentEntity
类型：TEntity
具有要应用于原始对象的属性更新的已分离对象。currentEntity 的实体键必须与 ObjectContext 中某个项的 EntityKey 属性相匹配。 具有要应用于原始对象的属性更新的已分离对象。currentEntity 的实体键必须与 ObjectContext 中某个项的 EntityKey 属性相匹配。

返回值

类型：TEntity
已更新的对象。
异常 | 条件
ArgumentNullException | entitySetName 或 current 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 来自 entitySetName 的 EntitySet 与对象的 EntityKey 的 EntitySet 不匹配时。 - 或 - 该对象未处于 ObjectStateManager 状态或处于 Detached 状态。 - 或 - 所提供对象的实体键无效。
ArgumentException | entitySetName 是空字符串。

ApplyCurrentValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的原始值的任何值都被标记为已修改。注意：此方法不会将当前值应用到 currentEntity 的相关对象。 ApplyCurrentValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的原始值的任何值都被标记为已修改。注意：此方法不会将当前值应用到 currentEntity 的相关对象。 ApplyCurrentValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的原始值的任何值都被标记为已修改。注意：此方法不会将当前值应用到 currentEntity 的相关对象。 ApplyCurrentValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的原始值的任何值都被标记为已修改。注意：此方法不会将当前值应用到 currentEntity 的相关对象。 ApplyCurrentValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的原始值的任何值都被标记为已修改。注意：此方法不会将当前值应用到 currentEntity 的相关对象。 ApplyCurrentValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的原始值的任何值都被标记为已修改。注意：此方法不会将当前值应用到 currentEntity 的相关对象。

如果您有带有当前值的关系图，并想应用原始值，请调用 ApplyOriginalValues<(Of <(TEntity>)>) 方法。

您也可以使用 ObjectStateEntry 的 ObjectSet<(Of <(TEntity>)>) 或 ApplyCurrentValues 方法的 ApplyCurrentValues。有关更多信息，请参见Building N-Tier Applications。 您也可以使用 ObjectStateEntry 的 ObjectSet<(Of <(TEntity>)>) 或 ApplyCurrentValues 方法的 ApplyCurrentValues。有关更多信息，请参见Building N-Tier Applications。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间
ApplyCurrentValues
ApplyCurrentValues

其他资源

How to: Apply Changes Made to a Detached Object
Building N-Tier Applications


ObjectContext ..::.ApplyOriginalValues <(Of <(TEntity >)>) 方法

ObjectContext
.
.
::
.
ApplyOriginalValues
<
(Of
<
(
TEntity
>
)
>
)
方法
ObjectContext 类

将标量值从提供的对象复制到 ObjectContext 中具有相同键的对象的原始值集中。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ApplyOriginalValues(Of TEntity As Class) ( _
    entitySetName As String, _
    originalEntity As TEntity _
) As TEntity
public TEntity ApplyOriginalValues<TEntity>(
    string entitySetName,
    TEntity originalEntity
)
where TEntity : class

public:
generic<typename TEntity>
where TEntity : ref class
TEntity ApplyOriginalValues(
    String^ entitySetName,
    TEntity originalEntity
)
member ApplyOriginalValues :
        entitySetName:string *
        originalEntity:'TEntity -> 'TEntity  when 'TEntity : not struct

类型参数

TEntity

实体对象的类型。

参数

entitySetName
类型： System String
对象所属的实体集的名称。
originalEntity
类型：TEntity
具有要应用于对象的原始值的已分离对象。originalEntity 的实体键必须与 ObjectContext 中某个项的 EntityKey 属性相匹配。 具有要应用于对象的原始值的已分离对象。originalEntity 的实体键必须与 ObjectContext 中某个项的 EntityKey 属性相匹配。

返回值

类型：TEntity
已更新的对象。
异常 | 条件
ArgumentNullException | entitySetName 或 original 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 来自 entitySetName 的 EntitySet 与对象的 EntityKey 的 EntitySet 不匹配时。 - 或 - 对象的 ObjectStateEntry 无法在 ObjectStateManager 中找到。- 或 - 对象的 ObjectStateEntry 无法在 ObjectStateManager 中找到。- 或 - 该对象处于 Added 或 Detached 状态。 - 或 - 所提供对象的实体键无效，或者有属性更改。
ArgumentException | entitySetName 是空字符串。

ApplyOriginalValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的当前值的任何值都被标记为已修改。注意，该方法不会对 originalEntity 的相关对象应用当前值。 ApplyOriginalValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的当前值的任何值都被标记为已修改。注意，该方法不会对 originalEntity 的相关对象应用当前值。 ApplyOriginalValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的当前值的任何值都被标记为已修改。注意，该方法不会对 originalEntity 的相关对象应用当前值。 ApplyOriginalValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的当前值的任何值都被标记为已修改。注意，该方法不会对 originalEntity 的相关对象应用当前值。 ApplyOriginalValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的当前值的任何值都被标记为已修改。注意，该方法不会对 originalEntity 的相关对象应用当前值。 ApplyOriginalValues<(Of <(TEntity>)>) 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。该方法将从所提供的对象将标量值复制到在 ObjectContext 中具有相同键的对象。可以使用已分离对象的 EntityKey 从数据源中检索此对象的实例。有关更多信息，请参见How to: Return a Specific Object Using its Key (Entity Framework)。不同于该对象的当前值的任何值都被标记为已修改。注意，该方法不会对 originalEntity 的相关对象应用当前值。

如果您有带有原始值的关系图，并想应用当前值，请调用 ApplyCurrentValues<(Of <(TEntity>)>) 方法。

您也可以使用 ObjectSet<(Of <(TEntity>)>) 的ApplyOriginalValues 或 ObjectStateEntry 的 ApplyOriginalValues 方法。有关更多信息，请参见Building N-Tier Applications。 您也可以使用 ObjectSet<(Of <(TEntity>)>) 的ApplyOriginalValues 或 ObjectStateEntry 的 ApplyOriginalValues 方法。有关更多信息，请参见Building N-Tier Applications。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间
ApplyOriginalValues
ApplyOriginalValues

其他资源

How to: Apply Changes Made to a Detached Object


ObjectContext ..::.ApplyPropertyChanges 方法

ObjectContext
.
.
::
.
ApplyPropertyChanges 方法
ObjectContext 类

注意：此 API 现在已过时。 非过时替代项是 ApplyCurrentValues TEntity (String, TEntity)。

将已分离对象的属性更改应用于已附加到对象上下文的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<ObsoleteAttribute("Use ApplyCurrentValues instead")> _
<BrowsableAttribute(False)> _
Public Sub ApplyPropertyChanges ( _
    entitySetName As String, _
    changed As Object _
)
[ObsoleteAttribute("Use ApplyCurrentValues instead")]
[BrowsableAttribute(false)]
public void ApplyPropertyChanges(
    string entitySetName,
    Object changed
)
[ObsoleteAttribute(L"Use ApplyCurrentValues instead")]
[BrowsableAttribute(false)]
public:
void ApplyPropertyChanges(
    String^ entitySetName,
    Object^ changed
)
[<ObsoleteAttribute("Use ApplyCurrentValues instead")>]
[<BrowsableAttribute(false)>]
member ApplyPropertyChanges :
        entitySetName:string *
        changed:Object -> unit

参数

entitySetName
类型： System String
对象所属的实体集的名称。
changed
类型： System Object
具有要应用于原始对象的属性更新的已分离对象。
异常 | 条件
ArgumentNullException | 当 entitySetName 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或空字符串时。 - 或 - 当 changed 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
InvalidOperationException | 当 entitySetName 中的 EntitySet与对象的 EntityKey 的 EntitySet 不匹配时。 - 或 - 当实体处于 Modified 或 Unchanged 之外的状态时。 - 或 - 原始对象未附加到上下文。
ArgumentException | 当 changed 对象的类型与原始对象的类型不同时。

ApplyCurrentValues<(Of <(TEntity>)>) 方法用于将已修改、已分离版本的对象的属性更改应用于附加到 ObjectContext 的原始版本。这样可支持 Web 服务等方案，这些方案将实体对象分离并发送至属性已更新的远程应用程序。使用此方法可以更加方便地将这些更改应用回原始对象。 ApplyCurrentValues<(Of <(TEntity>)>) 方法用于将已修改、已分离版本的对象的属性更改应用于附加到 ObjectContext 的原始版本。这样可支持 Web 服务等方案，这些方案将实体对象分离并发送至属性已更新的远程应用程序。使用此方法可以更加方便地将这些更改应用回原始对象。 ApplyCurrentValues<(Of <(TEntity>)>) 方法用于将已修改、已分离版本的对象的属性更改应用于附加到 ObjectContext 的原始版本。这样可支持 Web 服务等方案，这些方案将实体对象分离并发送至属性已更新的远程应用程序。使用此方法可以更加方便地将这些更改应用回原始对象。

在执行 ApplyCurrentValues<(Of <(TEntity>)>) 之后，对象处于 Modified 状态。必须调用 SaveChanges 方法来更新数据源。 在执行 ApplyCurrentValues<(Of <(TEntity>)>) 之后，对象处于 Modified 状态。必须调用 SaveChanges 方法来更新数据源。

原始对象必须存在于 ObjectStateManager 中，并且必须处于 Modified 或 Unchanged 状态。仅当 changed 对象中存在修改过的属性时，才会修改原始对象。 原始对象必须存在于 ObjectStateManager 中，并且必须处于 Modified 或 Unchanged 状态。仅当 changed 对象中存在修改过的属性时，才会修改原始对象。

提供对象的 EntityKey 属性必须设置为有效的 EntityKey。

ApplyCurrentValues<(Of <(TEntity>)>) 不影响导航属性或相关对象。

ApplyCurrentValues<(Of <(TEntity>)>) 仅设置类型的实体元数据中存在的属性。例如，ApplyCurrentValues<(Of <(TEntity>)>) 操作不涉及在分部类中添加的属性。 ApplyCurrentValues<(Of <(TEntity>)>) 仅设置类型的实体元数据中存在的属性。例如，ApplyCurrentValues<(Of <(TEntity>)>) 操作不涉及在分部类中添加的属性。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5 SP1
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

How to: Apply Changes Made to a Detached Object (Entity Framework)
Attaching and Detaching Objects (Entity Framework)
Serializing Objects (Entity Framework)


ObjectContext ..::.Attach 方法

ObjectContext
.
.
::
.
Attach 方法
ObjectContext 类

在对象具有实体键时将对象或对象图附加到对象上下文。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Attach ( _
    entity As IEntityWithKey _
)
public void Attach(
    IEntityWithKey entity
)
public:
void Attach(
    IEntityWithKey^ entity
)
member Attach :
        entity:IEntityWithKey -> unit

参数

entity
类型： System.Data.Objects.DataClasses IEntityWithKey
要附加的对象。
异常 | 条件
ArgumentNullException | entity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 实体键无效。

调用 ObjectContext 的 Attach 可将对象附加到对象上下文。当对象已存在于数据源中但当前尚未附加到上下文时采用此方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 调用 ObjectContext 的 Attach 可将对象附加到对象上下文。当对象已存在于数据源中但当前尚未附加到上下文时采用此方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 调用 ObjectContext 的 Attach 可将对象附加到对象上下文。当对象已存在于数据源中但当前尚未附加到上下文时采用此方法。有关更多信息，请参见Attaching Objects (Entity Framework)。

Attach 用于附加对象或对象图中的顶层对象。

要附加的对象必须实现 IEntityWithKey 以公开 EntityKey。所有生成的实体类都实现 IEntityWithKey。 要附加的对象必须实现 IEntityWithKey 以公开 EntityKey。所有生成的实体类都实现 IEntityWithKey。

在附加相关对象时，还必须调用 EntityReference<(Of <(TEntity>)>) 上的 Attach 或 EntityCollection<(Of <(TEntity>)>) 来定义关系。

此方法调用 AttachTo 方法。

附加对象时需考虑以下注意事项：

  • 如果要附加的对象具有相关对象，则这些相关对象也将附加到对象上下文。

  • 对象以未更改状态添加到对象上下文。

  • 传递到 Attach 方法的对象必须具有有效的 EntityKey 值。如果该对象不具有有效的 EntityKey 值，请使用 AttachTo 方法指定实体集的名称。 传递到 Attach 方法的对象必须具有有效的 EntityKey 值。如果该对象不具有有效的 EntityKey 值，请使用 AttachTo 方法指定实体集的名称。

本主题中的示例基于 Adventure Works Sales Model。在此示例中，附加了两个对象，然后定义了关系。 本主题中的示例基于 Adventure Works Sales Model。在此示例中，附加了两个对象，然后定义了关系。

Private Shared Sub AttachRelatedObjects(ByVal currentContext As ObjectContext, ByVal detachedOrder As SalesOrderHeader, ByVal detachedItems As List(Of SalesOrderDetail))
    Try
        ' Attach the root detachedOrder object to the supplied context.
        currentContext.Attach(detachedOrder)

        ' Attach each detachedItem to the context, and define each relationship
        ' by attaching the attached SalesOrderDetail object to the EntityCollection on
        ' the SalesOrderDetail navigation property of the now attached detachedOrder.
        For Each item As SalesOrderDetail In detachedItems
            currentContext.Attach(item)
            detachedOrder.SalesOrderDetails.Attach(item)
        Next
    Catch ex As InvalidOperationException
        Console.WriteLine((ex.GetType().ToString() & ": ") + ex.ToString())
    End Try
End Sub

private static void AttachRelatedObjects(
    ObjectContext currentContext,
    SalesOrderHeader detachedOrder,
    List<SalesOrderDetail> detachedItems)
{
    try
    {
        // Attach the root detachedOrder object to the supplied context.
        currentContext.Attach(detachedOrder);

        // Attach each detachedItem to the context, and define each relationship
        // by attaching the attached SalesOrderDetail object to the EntityCollection on
        // the SalesOrderDetail navigation property of the now attached detachedOrder.
        foreach (SalesOrderDetail item in detachedItems)
        {
            currentContext.Attach(item);
            detachedOrder.SalesOrderDetails.Attach(item);
        }
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.GetType().ToString() + ": " + ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间
Attach

其他资源

Attaching and Detaching Objects (Entity Framework)


ObjectContext ..::.AttachTo 方法

ObjectContext
.
.
::
.
AttachTo 方法
ObjectContext 类

将对象或对象图附加到特定实体集中的对象上下文。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub AttachTo ( _
    entitySetName As String, _
    entity As Object _
)
public void AttachTo(
    string entitySetName,
    Object entity
)
public:
void AttachTo(
    String^ entitySetName,
    Object^ entity
)
member AttachTo :
        entitySetName:string *
        entity:Object -> unit

参数

entitySetName
类型： System String
表示实体集名称，可以选择通过实体容器名称对它进行限定。
entity
类型： System Object
要附加的 Object。
异常 | 条件
ArgumentNullException | entity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 实体集无效。 - 或 - 对象具有临时键。 - 或 - 对象具有 EntityKey 且 EntitySet 与作为方法参数传入的实体集不匹配。 - 或 - 对象没有 EntityKey，且未提供任何实体集。 - 或 - 对象图中的任何对象都具有临时 EntityKey。 - 或 - 对象图中的任何对象都具有无效的 EntityKey（例如，键中的值与对象中的值不匹配）。 - 或 - 未能根据给定的 entitySetName 名称和实体容器名称找到实体集。 - 或 - 对象图中的任何对象都已存在于另一个状态管理器中。

调用 AttachTo，其位于 ObjectContext 上，以将对象附加到对象上下文特定的实体集，或者如果对象具有 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（Visual Basic 中的 Nothing）EntityKey 值则进行附加。有关更多信息，请参见Attaching Objects (Entity Framework)。 调用 AttachTo，其位于 ObjectContext 上，以将对象附加到对象上下文特定的实体集，或者如果对象具有 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（Visual Basic 中的 Nothing）EntityKey 值则进行附加。有关更多信息，请参见Attaching Objects (Entity Framework)。

要附加的对象可以是单个对象，也可以是对象图的一部分。

entitySetName 格式的规则如下：

  • 如果 DefaultContainerName 属性为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 entitySetName 必须完全新、限定为 <实体容器名称>.<实体集名称> 形式。

  • 如果 DefaultContainerName 不为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则 entitySetName 可以为 <实体容器名称>。<实体集名称> 或 <实体集名称>。

要附加的对象不需要 EntityKey 与其关联。如果对象不具有实体键，则 entitySetName 不能为空字符串。 要附加的对象不需要 EntityKey 与其关联。如果对象不具有实体键，则 entitySetName 不能为空字符串。

如果要附加的对象具有 EntityKey 且 entitySetName 具有值，则具有该实体键的 EntitySet 必须与基于 EntitySet和实体容器名称找到的 entitySetName 匹配。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间
Attach

其他资源

Object Services (Entity Framework)


ObjectContext ..::.CreateDatabase 方法

ObjectContext
.
.
::
.
CreateDatabase 方法
ObjectContext 类

使用当前数据源连接和 StoreItemCollection 中的元数据创建数据库。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub CreateDatabase
public void CreateDatabase()
public:
void CreateDatabase()
member CreateDatabase : unit -> unit

大多数工作都委托给 CreateDatabase(String, StoreItemCollection) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.CreateDatabaseScript 方法

ObjectContext
.
.
::
.
CreateDatabaseScript 方法
ObjectContext 类

生成数据定义语言 (DDL) 脚本，该脚本为 StoreItemCollection 中的元数据创建架构对象（表、主键、外键）。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateDatabaseScript As String
public string CreateDatabaseScript()
public:
String^ CreateDatabaseScript()
member CreateDatabaseScript : unit -> string

返回值

类型： System String
为 StoreItemCollection 中的元数据创建架构对象的 DDL 脚本。

在调用 CreateDatabase 方法时，请调用 CreateDatabaseScript 来观察将执行哪一脚本。

大多数工作都委托给 CreateDatabase 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.CreateEntityKey 方法

ObjectContext
.
.
::
.
CreateEntityKey 方法
ObjectContext 类

为特定对象创建实体键，如果实体键已存在，则返回该键。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateEntityKey ( _
    entitySetName As String, _
    entity As Object _
) As EntityKey
public EntityKey CreateEntityKey(
    string entitySetName,
    Object entity
)
public:
EntityKey^ CreateEntityKey(
    String^ entitySetName,
    Object^ entity
)
member CreateEntityKey :
        entitySetName:string *
        entity:Object -> EntityKey

参数

entitySetName
类型： System String
实体对象所属的实体集的完全限定名称。
entity
类型： System Object
要为其检索实体键的对象。

返回值

类型： System.Data EntityKey
对象的 EntityKey。
异常 | 条件
ArgumentNullException | 当任一参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
ArgumentException | 在 entitySetName 为空时。 - 或 - 当 entity 对象的类型不存在于实体集中时。 - 或 - 当 entitySetName 未完全限定时。
InvalidOperationException | 当无法根据提供的参数成功构造实体键时。

如果 EntityKey 没有为 entity 存在，则 CreateEntityKey 方法会为它创建新键。

此方法用于确定具有相同 EntityKey 的对象是否已附加到 ObjectContext。如果已附加了具有相同 EntityKey 的对象，则引发异常。在调用 Attach 方法之前，使用 CreateEntityKey 方法尝试检索已分离对象的 EntityKey。 此方法用于确定具有相同 EntityKey 的对象是否已附加到 ObjectContext。如果已附加了具有相同 EntityKey 的对象，则引发异常。在调用 Attach 方法之前，使用 CreateEntityKey 方法尝试检索已分离对象的 EntityKey。 此方法用于确定具有相同 EntityKey 的对象是否已附加到 ObjectContext。如果已附加了具有相同 EntityKey 的对象，则引发异常。在调用 Attach 方法之前，使用 CreateEntityKey 方法尝试检索已分离对象的 EntityKey。

本主题中的示例基于 Adventure Works Sales Model。在此示例中，CreateEntityKey 用于检索现有对象的实体键。 本主题中的示例基于 Adventure Works Sales Model。在此示例中，CreateEntityKey 用于检索现有对象的实体键。

Private Shared Sub ApplyItemUpdates(ByVal updatedItem As SalesOrderDetail)
    ' Define an ObjectStateEntry and EntityKey for the current object.
    Dim key As EntityKey
    Dim originalItem As Object

    Using context As New AdventureWorksEntities()
        Try
            ' Create the detached object's entity key.
            key = context.CreateEntityKey("SalesOrderDetails", updatedItem)

            ' Get the original item based on the entity key from the context
            ' or from the database.
            If context.TryGetObjectByKey(key, originalItem) Then
                ' Call the ApplyCurrentValues method to apply changes
                ' from the updated item to the original version.
                context.ApplyCurrentValues(key.EntitySetName, updatedItem)
            End If

            context.SaveChanges()
        Catch ex As InvalidOperationException
            Console.WriteLine(ex.ToString())
        End Try
    End Using
End Sub

private static void ApplyItemUpdates(SalesOrderDetail updatedItem)
{
    // Define an ObjectStateEntry and EntityKey for the current object.
    EntityKey key = default(EntityKey);
    object originalItem = null;

    using (AdventureWorksEntities context = new AdventureWorksEntities())
    {
        try
        {
            // Create the detached object's entity key.
            key = context.CreateEntityKey("SalesOrderDetails", updatedItem);

            // Get the original item based on the entity key from the context
            // or from the database.
            if (context.TryGetObjectByKey(key, out originalItem))
            {
                // Call the ApplyCurrentValues method to apply changes
                // from the updated item to the original version.
                context.ApplyCurrentValues(key.EntitySetName, updatedItem);
            }

            context.SaveChanges();
        }
        catch (InvalidOperationException ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

How to: Apply Changes Made to a Detached Object (Entity Framework)


ObjectContext ..::.CreateObject <(Of <(T >)>) 方法

ObjectContext
.
.
::
.
CreateObject
<
(Of
<
(
T
>
)
>
)
方法
ObjectContext 类

创建并返回所请求的类型的实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateObject(Of T As Class) As T
public T CreateObject<T>()
where T : class

public:
generic<typename T>
where T : ref class
T CreateObject()
member CreateObject : unit -> 'T  when 'T : not struct

类型参数

T

要返回的对象的类型。

返回值

类型：T
所请求类型 T 的实例，或一个使得 T 能够与 Entity Framework 一起使用的派生类型的实例。返回的对象是所请求类型的实例或使得请求的类型能够与 Entity Framework 一起使用的派生类型的实例。 所请求类型 T 的实例，或一个使得 T 能够与 Entity Framework 一起使用的派生类型的实例。返回的对象是所请求类型的实例或使得请求的类型能够与 Entity Framework 一起使用的派生类型的实例。

CreateObject<(Of <(T>)>) 方法与 POCO 自定义数据类一起用来确保可通过实体框架正确管理返回的对象。有关更多信息，请参见Requirements for Creating POCO Proxies和 Persistence Ignorant Custom Objects (Entity Framework)。 CreateObject<(Of <(T>)>) 方法与 POCO 自定义数据类一起用来确保可通过实体框架正确管理返回的对象。有关更多信息，请参见Requirements for Creating POCO Proxies和 Persistence Ignorant Custom Objects (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with POCO Entities


ObjectContext ..::.CreateObjectSet 方法

ObjectContext
.
.
::
.
CreateObjectSet 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

名称 说明
页首

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.CreateObjectSet <(Of <(TEntity >)>) 方法

ObjectContext
.
.
::
.
CreateObjectSet
<
(Of
<
(
TEntity
>
)
>
)
方法
ObjectContext 类

创建新的 ObjectSet<(Of <(TEntity>)>) 实例，该实例用于查询、添加、修改和删除指定实体类型的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateObjectSet(Of TEntity As Class) As ObjectSet(Of TEntity)
public ObjectSet<TEntity> CreateObjectSet<TEntity>()
where TEntity : class

public:
generic<typename TEntity>
where TEntity : ref class
ObjectSet<TEntity>^ CreateObjectSet()
member CreateObjectSet : unit -> ObjectSet<'TEntity>  when 'TEntity : not struct

类型参数

TEntity

请求的 ObjectSet<(Of <(TEntity>)>) 的实体类型。

返回值

类型： System.Data.Objects ObjectSet
<
(Of
<
(
TEntity
>
)
>
)

新的 ObjectSet<(Of <(TEntity>)>) 实例。
异常 | 条件
InvalidOperationException | DefaultContainerName 属性未在 ObjectContext 上设置。 - 或 - 指定类型属于多个实体集。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
CreateObjectSet 重载
System.Data.Objects 命名空间

其他资源

Working with ObjectSet


ObjectContext ..::.CreateObjectSet <(Of <(TEntity >)>) 方法 (String)

ObjectContext
.
.
::
.
CreateObjectSet
<
(Of
<
(
TEntity
>
)
>
)
方法 (String)
ObjectContext 类

创建新的 ObjectSet<(Of <(TEntity>)>) 实例，该实例用于查询、添加、修改和删除具有指定类型和指定实体集名称的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateObjectSet(Of TEntity As Class) ( _
    entitySetName As String _
) As ObjectSet(Of TEntity)
public ObjectSet<TEntity> CreateObjectSet<TEntity>(
    string entitySetName
)
where TEntity : class

public:
generic<typename TEntity>
where TEntity : ref class
ObjectSet<TEntity>^ CreateObjectSet(
    String^ entitySetName
)
member CreateObjectSet :
        entitySetName:string -> ObjectSet<'TEntity>  when 'TEntity : not struct

类型参数

TEntity

请求的 ObjectSet<(Of <(TEntity>)>) 的实体类型。

参数

entitySetName
类型： System String
返回的 ObjectSet<(Of <(TEntity>)>) 的实体集的名称。如果未在 ObjectContext 上设置 DefaultContainerName 属性，则字符串必须由默认容器名称进行限定。 返回的 ObjectSet<(Of <(TEntity>)>) 的实体集的名称。如果未在 ObjectContext 上设置 DefaultContainerName 属性，则字符串必须由默认容器名称进行限定。

返回值

类型： System.Data.Objects ObjectSet
<
(Of
<
(
TEntity
>
)
>
)

新的 ObjectSet<(Of <(TEntity>)>) 实例。
异常 | 条件
InvalidOperationException | 来自 entitySetName 的 EntitySet 与对象的 EntityKey 的 EntitySet 不匹配时。 - 或 - 在 ObjectContext 上没有设置 DefaultContainerName 属性，且名称未限定为 entitySetName 参数。 - 或 - 指定类型属于多个实体集。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
CreateObjectSet 重载
System.Data.Objects 命名空间


ObjectContext ..::.CreateProxyTypes 方法

ObjectContext
.
.
::
.
CreateProxyTypes 方法
ObjectContext 类

为提供的枚举中的每个类型生成可用于 Entity Framework 的等效类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub CreateProxyTypes ( _
    types As IEnumerable(Of Type) _
)
public void CreateProxyTypes(
    IEnumerable<Type> types
)
public:
void CreateProxyTypes(
    IEnumerable<Type^>^ types
)
member CreateProxyTypes :
        types:IEnumerable<Type> -> unit

参数

types
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Type
>
)
>
)

忽略 types 枚举中没有映射到概念模型中的实体类型的各个类型。

有关更多信息，请参见Requirements for Creating POCO Proxies和 Persistence Ignorant Custom Objects (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with POCO Entities


ObjectContext ..::.CreateQuery <(Of <(T >)>) 方法

ObjectContext
.
.
::
.
CreateQuery
<
(Of
<
(
T
>
)
>
)
方法
ObjectContext 类

使用指定查询字符串在当前对象上下文中创建 ObjectQuery<(Of <(T>)>)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateQuery(Of T) ( _
    queryString As String, _
    ParamArray parameters As ObjectParameter() _
) As ObjectQuery(Of T)
public ObjectQuery<T> CreateQuery<T>(
    string queryString,
    params ObjectParameter[] parameters
)

public:
generic<typename T>
ObjectQuery<T>^ CreateQuery(
    String^ queryString,
    ... array<ObjectParameter^>^ parameters
)
member CreateQuery :
        queryString:string *
        parameters:ObjectParameter[] -> ObjectQuery<'T>

类型参数

T

返回的 ObjectQuery<(Of <(T>)>) 的实体类型。

参数

queryString
类型： System String
要执行的查询字符串。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

要传递到查询的参数。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

指定类型的 ObjectQuery<(Of <(T>)>)。
异常 | 条件
ArgumentNullException | queryString 或 parameters 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

使用 CreateQuery<(Of <(T>)>) 创建属于当前对象上下文且具有指定类型的 ObjectQuery<(Of <(T>)>)。

此示例基于 Adventure Works Sales Model。

该示例创建一个简单查询并循环访问结果集合。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts " & _
            " AS contact WHERE contact.FirstName = @fn"

        Dim contactQuery As ObjectQuery(Of Contact) = context.CreateQuery(Of Contact)(queryString, New ObjectParameter("fn", "Frances"))

        ' Iterate through the collection of Contact items.
        For Each result As Contact In contactQuery
            Console.WriteLine("First Name: {0}, Last Name: {1}", result.FirstName, result.LastName)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
                AS contact WHERE contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            context.CreateQuery<Contact>(queryString,
                new ObjectParameter("fn", "Frances"));

        // Iterate through the collection of Contact items.
        foreach (Contact result in contactQuery)
            Console.WriteLine("First Name: {0}, Last Name: {1}",
            result.FirstName, result.LastName);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Object Queries (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectContext ..::.DatabaseExists 方法

ObjectContext
.
.
::
.
DatabaseExists 方法
ObjectContext 类

检查在当前数据源连接中指定为数据库的数据库是否在数据源上存在。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function DatabaseExists As Boolean
public bool DatabaseExists()
public:
bool DatabaseExists()
member DatabaseExists : unit -> bool

返回值

类型： System Boolean
如果数据库存在，则为 true。

大多数工作都委托给 DatabaseExists 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.DeleteDatabase 方法

ObjectContext
.
.
::
.
DeleteDatabase 方法
ObjectContext 类

删除在当前数据源连接中指定为数据库的数据库。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub DeleteDatabase
public void DeleteDatabase()
public:
void DeleteDatabase()
member DeleteDatabase : unit -> unit

大多数工作都委托给 DeleteDatabase 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.DeleteObject 方法

ObjectContext
.
.
::
.
DeleteObject 方法
ObjectContext 类

将对象标记为待删除。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub DeleteObject ( _
    entity As Object _
)
public void DeleteObject(
    Object entity
)
public:
void DeleteObject(
    Object^ entity
)
member DeleteObject :
        entity:Object -> unit

参数

entity
类型： System Object
指定要删除的实体的对象。该对象可以为任何状态（Detached 除外）。 指定要删除的实体的对象。该对象可以为任何状态（Detached 除外）。

从 ObjectStateManager 中标记对象以备删除。当调用 SaveChanges 方法时，在数据源中删除该对象。 从 ObjectStateManager 中标记对象以备删除。当调用 SaveChanges 方法时，在数据源中删除该对象。

删除父对象也会删除约束关系中的所有子对象。此结果与对关系的关联启用 CascadeDelete 属性的结果相同。 删除父对象也会删除约束关系中的所有子对象。此结果与对关系的关联启用 CascadeDelete 属性的结果相同。

DeleteObject 方法可以在已删除的对象上调用。

这些示例基于 Adventure Works Sales Model。

本示例使用特定 ProductID 构造一个 EntityKey，使用该键从数据源中检索产品对象、删除产品以及将所做更改保存到数据库中。

Dim deletedProduct As Object

' Define the key of the product to delete.
Dim productKey As New EntityKey("AdventureWorksEntities.Products", "ProductID", productId)

Using context As New AdventureWorksEntities()
    ' Get the object to delete with the specified key.
    If context.TryGetObjectByKey(productKey, deletedProduct) Then
        Try
            ' Delete the object with the specified key
            ' and save changes to delete the row from the data source.
            context.DeleteObject(deletedProduct)
            context.SaveChanges()
        Catch ex As OptimisticConcurrencyException
            Throw New InvalidOperationException(String.Format("The product with an ID of '{0}' could not be deleted." & _
                                                              "Make sure that any related objects are already deleted.", _
                                                              productKey.EntityKeyValues(0).Value), ex)
        End Try
    Else
        Throw New InvalidOperationException(String.Format("The product with an ID of '{0}' could not be found." & _
                                                          "Make sure that Product exists.", productKey.EntityKeyValues(0).Value))
    End If
End Using

object deletedProduct;

// Define the key of the product to delete.
EntityKey productKey =
    new EntityKey("AdventureWorksEntities.Products",
        "ProductID", productId);

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    // Get the object to delete with the specified key.
    if (context.TryGetObjectByKey(productKey, out deletedProduct))
    {
        try
        {
            // Delete the object with the specified key
            // and save changes to delete the row from the data source.
            context.DeleteObject(deletedProduct);
            context.SaveChanges();
        }
        catch (OptimisticConcurrencyException ex)
        {
            throw new InvalidOperationException(string.Format(
                "The product with an ID of '{0}' could not be deleted.\n"
                + "Make sure that any related objects are already deleted.\n",
                productKey.EntityKeyValues[0].Value), ex);
        }
    }
    else
    {
        throw new InvalidOperationException(string.Format(
            "The product with an ID of '{0}' could not be found.\n"
            + "Make sure that Product exists.\n",
            productKey.EntityKeyValues[0].Value));
    }
}

本示例删除一个现有订单项、添加一个新项并将更改保存到数据库。

' Specify the order to update.
Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Change the status and ship date of an existing order.
        order.Status = 1
        order.ShipDate = DateTime.Today

        ' You do not have to call the Load method to load the details for the order,
        ' because lazy loading is set to true
        ' by the constructor of the AdventureWorksEntities object.
        ' With lazy loading set to true the related objects are loaded when
        ' you access the navigation property. In this case SalesOrderDetails.

        ' Delete the first item in the order.
        context.DeleteObject(order.SalesOrderDetails.First())

        ' Create a new SalesOrderDetail object.
        ' You can use the static CreateObjectName method (the Entity Framework
        ' adds this method to the generated entity types) instead of the new operator:
        ' SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        ' Guid.NewGuid(), DateTime.Today))
        Dim detail = New SalesOrderDetail With
        {
            .SalesOrderID = 0,
            .SalesOrderDetailID = 0,
            .OrderQty = 2,
            .ProductID = 750,
            .SpecialOfferID = 1,
            .UnitPrice = CDec(2171.2942),
            .UnitPriceDiscount = 0,
            .LineTotal = 0,
            .rowguid = Guid.NewGuid(),
            .ModifiedDate = DateTime.Now
        }
        order.SalesOrderDetails.Add(detail)

        ' Save changes in the object context to the database.
        Dim changes As Integer = context.SaveChanges()

        Console.WriteLine(changes.ToString() + " changes saved!")
        Console.WriteLine("Updated item for order: {0}", order.SalesOrderID.ToString())

        For Each item As SalesOrderDetail In order.SalesOrderDetails
            Console.WriteLine("Item ID: {0}", item.SalesOrderDetailID.ToString())
            Console.WriteLine("Product: {0}", item.ProductID.ToString())
            Console.WriteLine("Quantity: {0}", item.OrderQty.ToString())
        Next
    Catch ex As UpdateException
        Console.WriteLine(ex.ToString())
    End Try
End Using

// Specify the order to update.
int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Change the status and ship date of an existing order.
        order.Status = 1;
        order.ShipDate = DateTime.Today;

        // You do not have to call the Load method to load the details for the order,
        // because  lazy loading is set to true
        // by the constructor of the AdventureWorksEntities object.
        // With  lazy loading set to true the related objects are loaded when
        // you access the navigation property. In this case SalesOrderDetails.

        // Delete the first item in the order.
        context.DeleteObject(order.SalesOrderDetails.First());

        // Create a new SalesOrderDetail object.
        // You can use the static CreateObjectName method (the Entity Framework
        // adds this method to the generated entity types) instead of the new operator:
        // SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        //                                         Guid.NewGuid(), DateTime.Today));
        SalesOrderDetail detail = new SalesOrderDetail
        {
            SalesOrderID = 1,
            SalesOrderDetailID = 0,
            OrderQty = 2,
            ProductID = 750,
            SpecialOfferID = 1,
            UnitPrice = (decimal)2171.2942,
            UnitPriceDiscount = 0,
            LineTotal = 0,
            rowguid = Guid.NewGuid(),
            ModifiedDate = DateTime.Now
        };

        order.SalesOrderDetails.Add(detail);

        // Save changes in the object context to the database.
        int changes = context.SaveChanges();

        Console.WriteLine(changes.ToString() + " changes saved!");
        Console.WriteLine("Updated item for order: "
            + order.SalesOrderID.ToString());

        foreach (SalesOrderDetail item in order.SalesOrderDetails)
        {
            Console.WriteLine("Item ID: "
                + item.SalesOrderDetailID.ToString() + "  Product: "
                + item.ProductID.ToString() + "  Quantity: "
                + item.OrderQty.ToString());
        }
    }
    catch (UpdateException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间
DeleteObject

其他资源

Adding, Modifying, and Deleting Objects (Entity Framework)
Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.Detach 方法

ObjectContext
.
.
::
.
Detach 方法
ObjectContext 类

从对象上下文移除对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Detach ( _
    entity As Object _
)
public void Detach(
    Object entity
)
public:
void Detach(
    Object^ entity
)
member Detach :
        entity:Object -> unit

参数

entity
类型： System Object
要分离的对象。仅移除 entity；如果有任何相关对象受同一 ObjectStateManager 跟踪，则不会自动分离这些对象。 要分离的对象。仅移除 entity；如果有任何相关对象受同一 ObjectStateManager 跟踪，则不会自动分离这些对象。
异常 | 条件
ArgumentNullException | entity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | entity 不与此 ObjectContext 关联（例如，是新创建的，仍未与任何上下文关联，或是通过其他上下文获取，或是已分离）。

从 ObjectStateManager 移除对象。这会禁用对该对象的更改跟踪和标识解析。有关更多信息，请参见Detaching Objects (Entity Framework)。 从 ObjectStateManager 移除对象。这会禁用对该对象的更改跟踪和标识解析。有关更多信息，请参见Detaching Objects (Entity Framework)。 从 ObjectStateManager 移除对象。这会禁用对该对象的更改跟踪和标识解析。有关更多信息，请参见Detaching Objects (Entity Framework)。

调用 Detach 方法后，系统将不再保留指向此对象的引用，此对象可由垃圾回收器收集。

说明 说明

仅当用户代码不包含对已分离对象的任何引用时，才进行垃圾回收。

分离对象时需考虑以下注意事项：

  • Detach 仅影响传递给方法的特定对象。如果要分离的对象在对象上下文中具有相关对象，则那些相关对象不会分离。 Detach 仅影响传递给方法的特定对象。如果要分离的对象在对象上下文中具有相关对象，则那些相关对象不会分离。

  • 分离对象不影响数据源中的数据。

  • 在分离操作过程中不会强制执行级联删除指令和引用约束。

有关更多信息，请参见Detaching Objects (Entity Framework)。

' This method is called to detach SalesOrderHeader objects and
' related SalesOrderDetail objects from the supplied object
' context when no longer needed by the application.
' Once detached, the resources can be garbage collected.
Private Shared Sub DetachOrders(ByVal context As ObjectContext, ByVal order As SalesOrderHeader)
    Try
        ' Detach each item from the collection.
        While order.SalesOrderDetails.Count > 0
            ' Detach the first SalesOrderDetail in the collection.
            context.Detach(order.SalesOrderDetails.First())
        End While

        ' Detach the order.
        context.Detach(order)
    Catch ex As InvalidOperationException
        Console.WriteLine(ex.ToString())
    End Try
End Sub

// This method is called to detach SalesOrderHeader objects and
// related SalesOrderDetail objects from the supplied object
// context when no longer needed by the application.
// Once detached, the resources can be garbage collected.
private static void DetachOrders(ObjectContext context,
    SalesOrderHeader order)
{
    try
    {
        // Detach each item from the collection.
        while (order.SalesOrderDetails.Count > 0)
        {
            // Detach the first SalesOrderDetail in the collection.
            context.Detach(order.SalesOrderDetails.First());
        }

        // Detach the order.
        context.Detach(order);
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间
Detach

其他资源

Managing Resources in Object Services (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.DetectChanges 方法

ObjectContext
.
.
::
.
DetectChanges 方法
ObjectContext 类

确保 ObjectStateEntry 更改与由 ObjectStateManager 跟踪的所有对象中的更改进行同步。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub DetectChanges
public void DetectChanges()
public:
void DetectChanges()
member DetectChanges : unit -> unit

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Creating POCO Proxies
Persistence Ignorant Custom Objects (Entity Framework)
Tracking Changes in POCO Entities


ObjectContext ..::.Dispose 方法

ObjectContext
.
.
::
.
Dispose 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

释放对象上下文使用的资源。

名称 说明
页首

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.Dispose 方法

ObjectContext
.
.
::
.
Dispose 方法
ObjectContext 类

释放对象上下文使用的资源。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Dispose
public void Dispose()
public:
virtual void Dispose() sealed
abstract Dispose : unit -> unit
override Dispose : unit -> unit

实现

此方法关闭对象服务打开的连接。在调用 Dispose 后，如果执行需要连接为打开状态的操作（如执行查询或调用 ToTraceString 方法），会引发异常。执行不要求连接为打开状态的操作（如编写查询或附加对象），则不会引发异常。Dispose 方法不会关闭任何显式打开的连接。 此方法关闭对象服务打开的连接。在调用 Dispose 后，如果执行需要连接为打开状态的操作（如执行查询或调用 ToTraceString 方法），会引发异常。执行不要求连接为打开状态的操作（如编写查询或附加对象），则不会引发异常。Dispose 方法不会关闭任何显式打开的连接。 此方法关闭对象服务打开的连接。在调用 Dispose 后，如果执行需要连接为打开状态的操作（如执行查询或调用 ToTraceString 方法），会引发异常。执行不要求连接为打开状态的操作（如编写查询或附加对象），则不会引发异常。Dispose 方法不会关闭任何显式打开的连接。 此方法关闭对象服务打开的连接。在调用 Dispose 后，如果执行需要连接为打开状态的操作（如执行查询或调用 ToTraceString 方法），会引发异常。执行不要求连接为打开状态的操作（如编写查询或附加对象），则不会引发异常。Dispose 方法不会关闭任何显式打开的连接。

将 ObjectContext 的作用域限制在 using 块（在 Visual Basic 中为 Using ）中可确保正确释放资源。有关更多信息，请参见Managing Resources in Object Services (Entity Framework)。 将 ObjectContext 的作用域限制在 using 块（在 Visual Basic 中为 Using ）中可确保正确释放资源。有关更多信息，请参见Managing Resources in Object Services (Entity Framework)。

Dispose()()() 方法调用 virtual（Visual Basic 中的 Overridable）Dispose(Boolean) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
Dispose 重载
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.Dispose 方法 (Boolean)

ObjectContext
.
.
::
.
Dispose 方法 (Boolean)
ObjectContext 类

释放对象上下文使用的资源。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Overridable Sub Dispose ( _
    disposing As Boolean _
)
protected virtual void Dispose(
    bool disposing
)
protected:
virtual void Dispose(
    bool disposing
)
abstract Dispose :
        disposing:bool -> unit
override Dispose :
        disposing:bool -> unit

参数

disposing
类型： System Boolean
为 true 则释放托管资源和非托管资源；为 false 则仅释放非托管资源。

此方法将关闭连接。在调用 Dispose 后，如果执行需要连接为打开状态的操作（如执行查询或调用 ToTraceString 方法），会引发异常。执行不要求连接为打开状态的操作（如编写查询或附加对象），则不会引发异常。 此方法将关闭连接。在调用 Dispose 后，如果执行需要连接为打开状态的操作（如执行查询或调用 ToTraceString 方法），会引发异常。执行不要求连接为打开状态的操作（如编写查询或附加对象），则不会引发异常。 此方法将关闭连接。在调用 Dispose 后，如果执行需要连接为打开状态的操作（如执行查询或调用 ToTraceString 方法），会引发异常。执行不要求连接为打开状态的操作（如编写查询或附加对象），则不会引发异常。

将 ObjectContext 的作用域限制在 using 块（在 Visual Basic 中为 Using）中可确保正确释放资源。有关更多信息，请参见Managing Resources in Object Services (Entity Framework)。 将 ObjectContext 的作用域限制在 using 块（在 Visual Basic 中为 Using）中可确保正确释放资源。有关更多信息，请参见Managing Resources in Object Services (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
Dispose 重载
System.Data.Objects 命名空间

其他资源

Object Services Overview (Entity Framework)


ObjectContext ..::.ExecuteFunction 方法

ObjectContext
.
.
::
.
ExecuteFunction 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

名称 说明
页首

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.ExecuteFunction <(Of <(TElement >)>) 方法 (String, array<ObjectParameter >[]()[])

ObjectContext
.
.
::
.
ExecuteFunction
<
(Of
<
(
TElement
>
)
>
)
方法 (String,
array<
ObjectParameter
>
[]
()
[]
)
ObjectContext 类

使用指定的参数，执行在数据源中定义并在概念模型中映射的存储过程或函数。返回类型化的 ObjectResult<(Of <(T>)>)。 使用指定的参数，执行在数据源中定义并在概念模型中映射的存储过程或函数。返回类型化的 ObjectResult<(Of <(T>)>)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ExecuteFunction(Of TElement) ( _
    functionName As String, _
    ParamArray parameters As ObjectParameter() _
) As ObjectResult(Of TElement)
public ObjectResult<TElement> ExecuteFunction<TElement>(
    string functionName,
    params ObjectParameter[] parameters
)

public:
generic<typename TElement>
ObjectResult<TElement>^ ExecuteFunction(
    String^ functionName,
    ... array<ObjectParameter^>^ parameters
)
member ExecuteFunction :
        functionName:string *
        parameters:ObjectParameter[] -> ObjectResult<'TElement>

类型参数

TElement

对数据源执行函数时返回的 ObjectResult<(Of <(T>)>) 的实体类型。此类型必须实现 IEntityWithChangeTracker。 对数据源执行函数时返回的 ObjectResult<(Of <(T>)>) 的实体类型。此类型必须实现 IEntityWithChangeTracker。

参数

functionName
类型： System String
存储过程或函数的名称。该名称可以包含容器名称，如 <Container Name>.<Function Name>。如果默认容器名称已知，则只需要函数名称。 存储过程或函数的名称。该名称可以包含容器名称，如 <Container Name>.<Function Name>。如果默认容器名称已知，则只需要函数名称。 存储过程或函数的名称。该名称可以包含容器名称，如 <Container Name>.<Function Name>。如果默认容器名称已知，则只需要函数名称。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

ObjectParameter 对象的数组。

返回值

类型： System.Data.Objects ObjectResult
<
(Of
<
(
TElement
>
)
>
)

存储过程返回的数据的 ObjectResult<(Of <(T>)>)。
异常 | 条件
ArgumentException | function 为 null 或为空。 - 或 - function 未找到。
InvalidOperationException | 实体读取器不支持此 function。 - 或 - 读取器的类型与 function 的类型不匹配。

ExecuteFunction 方法是帮助器方法，用于执行在数据源中定义和在概念模型中表达的存储过程或函数。Entity Data Model 工具为概念性模型中的每个 FunctionImport 元素生成一种方法。这些方法调用强类型化的 ExecuteFunction 以返回类型化的 ObjectResult<(Of <(T>)>)。有关更多信息，请参见Application Code using Stored Procedures (Enity Framework)。 ExecuteFunction 方法是帮助器方法，用于执行在数据源中定义和在概念模型中表达的存储过程或函数。Entity Data Model 工具为概念性模型中的每个 FunctionImport 元素生成一种方法。这些方法调用强类型化的 ExecuteFunction 以返回类型化的 ObjectResult<(Of <(T>)>)。有关更多信息，请参见Application Code using Stored Procedures (Enity Framework)。 ExecuteFunction 方法是帮助器方法，用于执行在数据源中定义和在概念模型中表达的存储过程或函数。Entity Data Model 工具为概念性模型中的每个 FunctionImport 元素生成一种方法。这些方法调用强类型化的 ExecuteFunction 以返回类型化的 ObjectResult<(Of <(T>)>)。有关更多信息，请参见Application Code using Stored Procedures (Enity Framework)。 ExecuteFunction 方法是帮助器方法，用于执行在数据源中定义和在概念模型中表达的存储过程或函数。Entity Data Model 工具为概念性模型中的每个 FunctionImport 元素生成一种方法。这些方法调用强类型化的 ExecuteFunction 以返回类型化的 ObjectResult<(Of <(T>)>)。有关更多信息，请参见Application Code using Stored Procedures (Enity Framework)。

参数数组中的所有函数参数都是必需的，所有类型（包括函数自身的类型）都会按照导入函数的元数据进行检查。对 CLR 值类型允许 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。参数验证由提供程序执行。 参数数组中的所有函数参数都是必需的，所有类型（包括函数自身的类型）都会按照导入函数的元数据进行检查。对 CLR 值类型允许 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。参数验证由提供程序执行。 参数数组中的所有函数参数都是必需的，所有类型（包括函数自身的类型）都会按照导入函数的元数据进行检查。对 CLR 值类型允许 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。参数验证由提供程序执行。

ExecuteFunction 方法使用 AppendOnly 的 MergeOption 值。因此，如果对象已存在于对象上下文中，则不会从数据源加载。 ExecuteFunction 方法使用 AppendOnly 的 MergeOption 值。因此，如果对象已存在于对象上下文中，则不会从数据源加载。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
ExecuteFunction 重载
System.Data.Objects 命名空间

其他资源

How to: Define a Model with a Stored Procedure
How to: Execute a Query Using a Stored Procedure (Entity Framework)
Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.ExecuteFunction 方法 (String, array<ObjectParameter >[]()[])

ObjectContext
.
.
::
.
ExecuteFunction 方法 (String,
array<
ObjectParameter
>
[]
()
[]
)
ObjectContext 类

执行在数据源中定义并在概念模型中表示的存储过程或函数，丢弃该函数返回的任何结果，并返回执行该函数影响的行数。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ExecuteFunction ( _
    functionName As String, _
    ParamArray parameters As ObjectParameter() _
) As Integer
public int ExecuteFunction(
    string functionName,
    params ObjectParameter[] parameters
)
public:
int ExecuteFunction(
    String^ functionName,
    ... array<ObjectParameter^>^ parameters
)
member ExecuteFunction :
        functionName:string *
        parameters:ObjectParameter[] -> int

参数

functionName
类型： System String
存储过程或函数的名称。该名称可以包含容器名称，如 <Container Name>.<Function Name>。如果默认容器名称已知，则只需要函数名称。 存储过程或函数的名称。该名称可以包含容器名称，如 <Container Name>.<Function Name>。如果默认容器名称已知，则只需要函数名称。 存储过程或函数的名称。该名称可以包含容器名称，如 <Container Name>.<Function Name>。如果默认容器名称已知，则只需要函数名称。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

ObjectParameter 对象的数组。

返回值

类型： System Int32
受影响的行数。
异常 | 条件
ArgumentException | function 为 null 或为空。 - 或 - function 未找到。
InvalidOperationException | 实体读取器不支持此 function。 - 或 - 读取器的类型与 function 的类型不匹配。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
ExecuteFunction 重载
System.Data.Objects 命名空间


ObjectContext ..::.ExecuteFunction <(Of <(TElement >)>) 方法 (String, MergeOption, array<ObjectParameter >[]()[])

ObjectContext
.
.
::
.
ExecuteFunction
<
(Of
<
(
TElement
>
)
>
)
方法 (String, MergeOption,
array<
ObjectParameter
>
[]
()
[]
)
ObjectContext 类

使用指定的参数和合并选项，执行在数据源中定义并在概念模型中表示的给定存储过程或函数。返回类型化的 ObjectResult<(Of <(T>)>)。 使用指定的参数和合并选项，执行在数据源中定义并在概念模型中表示的给定存储过程或函数。返回类型化的 ObjectResult<(Of <(T>)>)。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ExecuteFunction(Of TElement) ( _
    functionName As String, _
    mergeOption As MergeOption, _
    ParamArray parameters As ObjectParameter() _
) As ObjectResult(Of TElement)
public ObjectResult<TElement> ExecuteFunction<TElement>(
    string functionName,
    MergeOption mergeOption,
    params ObjectParameter[] parameters
)

public:
generic<typename TElement>
ObjectResult<TElement>^ ExecuteFunction(
    String^ functionName,
    MergeOption mergeOption,
    ... array<ObjectParameter^>^ parameters
)
member ExecuteFunction :
        functionName:string *
        mergeOption:MergeOption *
        parameters:ObjectParameter[] -> ObjectResult<'TElement>

类型参数

TElement

对数据源执行函数时返回的 ObjectResult<(Of <(T>)>) 的实体类型。此类型必须实现 IEntityWithChangeTracker。 对数据源执行函数时返回的 ObjectResult<(Of <(T>)>) 的实体类型。此类型必须实现 IEntityWithChangeTracker。

参数

functionName
类型： System String
存储过程或函数的名称。该名称可以包含容器名称，如 <Container Name>.<Function Name>。如果默认容器名称已知，则只需要函数名称。 存储过程或函数的名称。该名称可以包含容器名称，如 <Container Name>.<Function Name>。如果默认容器名称已知，则只需要函数名称。 存储过程或函数的名称。该名称可以包含容器名称，如 <Container Name>.<Function Name>。如果默认容器名称已知，则只需要函数名称。
mergeOption
类型： System.Data.Objects MergeOption
执行查询时要使用的 MergeOption。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

ObjectParameter 对象的数组。

返回值

类型： System.Data.Objects ObjectResult
<
(Of
<
(
TElement
>
)
>
)

存储过程返回的数据的 ObjectResult<(Of <(T>)>)。
异常 | 条件
ArgumentException | function 为 null 或为空。 - 或 - function 未找到。
InvalidOperationException | 实体读取器不支持此 function。 - 或 - 读取器的类型与 function 的类型不匹配。

ExecuteFunction 方法是帮助器方法，用于执行在数据源中定义和在概念模型中表达的存储过程或函数。Entity Data Model 工具为概念性模型中的每个 FunctionImport 元素生成一种方法。这些方法调用强类型化的 ExecuteFunction 以返回类型化的 ObjectResult<(Of <(T>)>)。有关更多信息，请参见Application Code using Stored Procedures (Enity Framework)。 ExecuteFunction 方法是帮助器方法，用于执行在数据源中定义和在概念模型中表达的存储过程或函数。Entity Data Model 工具为概念性模型中的每个 FunctionImport 元素生成一种方法。这些方法调用强类型化的 ExecuteFunction 以返回类型化的 ObjectResult<(Of <(T>)>)。有关更多信息，请参见Application Code using Stored Procedures (Enity Framework)。 ExecuteFunction 方法是帮助器方法，用于执行在数据源中定义和在概念模型中表达的存储过程或函数。Entity Data Model 工具为概念性模型中的每个 FunctionImport 元素生成一种方法。这些方法调用强类型化的 ExecuteFunction 以返回类型化的 ObjectResult<(Of <(T>)>)。有关更多信息，请参见Application Code using Stored Procedures (Enity Framework)。 ExecuteFunction 方法是帮助器方法，用于执行在数据源中定义和在概念模型中表达的存储过程或函数。Entity Data Model 工具为概念性模型中的每个 FunctionImport 元素生成一种方法。这些方法调用强类型化的 ExecuteFunction 以返回类型化的 ObjectResult<(Of <(T>)>)。有关更多信息，请参见Application Code using Stored Procedures (Enity Framework)。

参数数组中的所有函数参数都是必需的，所有类型（包括函数自身的类型）都会按照导入函数的元数据进行检查。对 CLR 值类型允许 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。参数验证由提供程序执行。 参数数组中的所有函数参数都是必需的，所有类型（包括函数自身的类型）都会按照导入函数的元数据进行检查。对 CLR 值类型允许 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。参数验证由提供程序执行。 参数数组中的所有函数参数都是必需的，所有类型（包括函数自身的类型）都会按照导入函数的元数据进行检查。对 CLR 值类型允许 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。参数验证由提供程序执行。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
ExecuteFunction 重载
System.Data.Objects 命名空间

其他资源

How to: Define a Model with a Stored Procedure
How to: Execute a Query Using a Stored Procedure (Entity Framework)
Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.ExecuteStoreCommand 方法

ObjectContext
.
.
::
.
ExecuteStoreCommand 方法
ObjectContext 类

利用现有连接对数据源直接执行任意命令。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ExecuteStoreCommand ( _
    commandText As String, _
    ParamArray parameters As Object() _
) As Integer
public int ExecuteStoreCommand(
    string commandText,
    params Object[] parameters
)
public:
int ExecuteStoreCommand(
    String^ commandText,
    ... array<Object^>^ parameters
)
member ExecuteStoreCommand :
        commandText:string *
        parameters:Object[] -> int

参数

commandText
类型： System String
要用数据源的本机语言执行的命令。
parameters
类型：
array<
System Object
>
[]
()
[]

要传递给命令的参数数组。

返回值

类型： System Int32
受影响的行数。

调用 ExecuteStoreCommand 方法等同于调用 DbCommand 类的 ExecuteNonQuery 方法。

使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。

parameters 值可以是 DbParameter 对象数组或参数值数组。如果只提供了值，将基于数组中值的顺序创建大量 DbParameter 对象。 parameters 值可以是 DbParameter 对象数组或参数值数组。如果只提供了值，将基于数组中值的顺序创建大量 DbParameter 对象。

如果当前事务存在，存储命令将在当前事务的上下文中执行。

有关更多信息，请参见：

Executing Store Commands 和

How to: Directly Execute Arbitrary Command Against the Store

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.ExecuteStoreQuery 方法

ObjectContext
.
.
::
.
ExecuteStoreQuery 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

名称 说明
页首

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.ExecuteStoreQuery <(Of <(TElement >)>) 方法 (String, array<Object >[]()[])

ObjectContext
.
.
::
.
ExecuteStoreQuery
<
(Of
<
(
TElement
>
)
>
)
方法 (String,
array<
Object
>
[]
()
[]
)
ObjectContext 类

对数据源直接执行查询，此查询将返回类型化结果的序列。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ExecuteStoreQuery(Of TElement) ( _
    commandText As String, _
    ParamArray parameters As Object() _
) As ObjectResult(Of TElement)
public ObjectResult<TElement> ExecuteStoreQuery<TElement>(
    string commandText,
    params Object[] parameters
)

public:
generic<typename TElement>
ObjectResult<TElement>^ ExecuteStoreQuery(
    String^ commandText,
    ... array<Object^>^ parameters
)
member ExecuteStoreQuery :
        commandText:string *
        parameters:Object[] -> ObjectResult<'TElement>

类型参数

TElement

参数

commandText
类型： System String
要用数据源的本机语言执行的命令。
parameters
类型：
array<
System Object
>
[]
()
[]

要传递给命令的参数数组。

返回值

类型： System.Data.Objects ObjectResult
<
(Of
<
(
TElement
>
)
>
)

类型为 TResult 的对象的枚举。

ExecuteStoreQuery 方法使用现有连接直接对数据源执行任意命令。如果当前事务存在，存储命令将在当前事务的上下文中执行。 ExecuteStoreQuery 方法使用现有连接直接对数据源执行任意命令。如果当前事务存在，存储命令将在当前事务的上下文中执行。

调用 ExecuteStoreQuery 方法等同于调用 DbCommand 类的 ExecuteReader 方法，只有 ExecuteStoreQuery 返回实体，且 ExecuteReader 返回 DbDataReader 中的属性值。

如果想跟踪结果，可使用指定的实体集名称调用 ExecuteStoreQuery。

当读取器包含映射至指定实体类型的数据行时，调用 Translate 方法将 DbDataReader 转换为实体对象。

使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。

parameters 值可以是 DbParameter 对象数组或参数值数组。如果只提供了值，将基于数组中值的顺序创建大量 DbParameter 对象。 parameters 值可以是 DbParameter 对象数组或参数值数组。如果只提供了值，将基于数组中值的顺序创建大量 DbParameter 对象。

有关更多信息，请参见：

Executing Store Commands 和

How to: Directly Execute Arbitrary Command Against the Store

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
ExecuteStoreQuery 重载
System.Data.Objects 命名空间


ObjectContext ..::.ExecuteStoreQuery <(Of <(TEntity >)>) 方法 (String, String, MergeOption, array<Object >[]()[])

ObjectContext
.
.
::
.
ExecuteStoreQuery
<
(Of
<
(
TEntity
>
)
>
)
方法 (String, String, MergeOption,
array<
Object
>
[]
()
[]
)
ObjectContext 类

对数据源直接执行查询，此查询将返回类型化结果的序列。指定实体集和合并选项，以便能够将查询结果作为实体进行跟踪。 对数据源直接执行查询，此查询将返回类型化结果的序列。指定实体集和合并选项，以便能够将查询结果作为实体进行跟踪。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ExecuteStoreQuery(Of TEntity) ( _
    commandText As String, _
    entitySetName As String, _
    mergeOption As MergeOption, _
    ParamArray parameters As Object() _
) As ObjectResult(Of TEntity)
public ObjectResult<TEntity> ExecuteStoreQuery<TEntity>(
    string commandText,
    string entitySetName,
    MergeOption mergeOption,
    params Object[] parameters
)

public:
generic<typename TEntity>
ObjectResult<TEntity>^ ExecuteStoreQuery(
    String^ commandText,
    String^ entitySetName,
    MergeOption mergeOption,
    ... array<Object^>^ parameters
)
member ExecuteStoreQuery :
        commandText:string *
        entitySetName:string *
        mergeOption:MergeOption *
        parameters:Object[] -> ObjectResult<'TEntity>

类型参数

TEntity

参数

commandText
类型： System String
要用数据源的本机语言执行的命令。
entitySetName
类型： System String
TResult 类型的实体集。如果未提供实体集名称，则不会跟踪结果。 TResult 类型的实体集。如果未提供实体集名称，则不会跟踪结果。
mergeOption
类型： System.Data.Objects MergeOption
执行查询时要使用的 MergeOption。默认值为 AppendOnly。 执行查询时要使用的 MergeOption。默认值为 AppendOnly。
parameters
类型：
array<
System Object
>
[]
()
[]

要传递给命令的参数数组。

返回值

类型： System.Data.Objects ObjectResult
<
(Of
<
(
TEntity
>
)
>
)

类型为 TResult 的对象的枚举。

ExecuteStoreQuery 方法使用现有连接直接对数据源执行任意命令。如果当前事务存在，存储命令将在当前事务的上下文中执行。 ExecuteStoreQuery 方法使用现有连接直接对数据源执行任意命令。如果当前事务存在，存储命令将在当前事务的上下文中执行。

调用 ExecuteStoreQuery 方法等同于调用 DbCommand 类的 ExecuteReader 方法，只有 ExecuteStoreQuery 返回实体，且 ExecuteReader 返回 DbDataReader 中的属性值。

如果希望获得作为实体跟踪的结果，请指定实体集名称。

当读取器包含映射至指定实体类型的数据行时，调用 Translate 方法将 DbDataReader 转换为实体对象。

使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。 使用参数化的命令帮助防止 SQL 注入攻击，在该攻击中攻击者将命令“注入”构成服务器上安全保护的 SQL 语句。参数化方法通过保证从外部源接收的值仅做为值传递，来防止 SQL 注入攻击。因此，插入值中的 SQL 命令不会在数据源执行。而是，只将它们作为参数值进行计算。除了安全上的优点之外，参数化的命令提供了组织以 SQL 语句通过的值或存储的步骤的便利方法。

parameters 值可以是 DbParameter 对象数组或参数值数组。如果只提供了值，将基于数组中值的顺序创建大量 DbParameter 对象。 parameters 值可以是 DbParameter 对象数组或参数值数组。如果只提供了值，将基于数组中值的顺序创建大量 DbParameter 对象。

有关更多信息，请参见：

Executing Store Commands 和

How to: Directly Execute Arbitrary Command Against the Store

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
ExecuteStoreQuery 重载
System.Data.Objects 命名空间


ObjectContext ..::.GetKnownProxyTypes 方法

ObjectContext
.
.
::
.
GetKnownProxyTypes 方法
ObjectContext 类

返回所有现有代理类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function GetKnownProxyTypes As IEnumerable(Of Type)
public static IEnumerable<Type> GetKnownProxyTypes()
public:
static IEnumerable<Type^>^ GetKnownProxyTypes()
static member GetKnownProxyTypes : unit -> IEnumerable<Type>

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
Type
>
)
>
)

所有现有代理类型的 IEnumerable<(Of <(T>)>)。

在为 POCO 实体启用代理对象生成时使用 GetKnownProxyTypes 方法。有关更多信息，请参见Requirements for Creating POCO Proxies和 Persistence Ignorant Custom Objects (Entity Framework)。 在为 POCO 实体启用代理对象生成时使用 GetKnownProxyTypes 方法。有关更多信息，请参见Requirements for Creating POCO Proxies和 Persistence Ignorant Custom Objects (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with POCO Entities


ObjectContext ..::.GetObjectByKey 方法

ObjectContext
.
.
::
.
GetObjectByKey 方法
ObjectContext 类

返回具有指定实体键的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetObjectByKey ( _
    key As EntityKey _
) As Object
public Object GetObjectByKey(
    EntityKey key
)
public:
Object^ GetObjectByKey(
    EntityKey^ key
)
member GetObjectByKey :
        key:EntityKey -> Object

参数

key
类型： System.Data EntityKey
要查找的对象的键。

返回值

类型： System Object
一个 Object，它是实体类型的实例。
异常 | 条件
ArgumentNullException | key 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ObjectNotFoundException | 在 ObjectStateManager 和数据源中都未找到对象。

GetObjectByKey 尝试从 ObjectStateManager 检索具有指定 EntityKey 的对象。如果该对象当前尚未加载到对象上下文中，则会执行查询以尝试从数据源返回该对象。有关更多信息，请参见Object Queries (Entity Framework)。 GetObjectByKey 尝试从 ObjectStateManager 检索具有指定 EntityKey 的对象。如果该对象当前尚未加载到对象上下文中，则会执行查询以尝试从数据源返回该对象。有关更多信息，请参见Object Queries (Entity Framework)。 GetObjectByKey 尝试从 ObjectStateManager 检索具有指定 EntityKey 的对象。如果该对象当前尚未加载到对象上下文中，则会执行查询以尝试从数据源返回该对象。有关更多信息，请参见Object Queries (Entity Framework)。

如果无法找到对象，GetObjectByKey 会引发 ObjectNotFoundException。若要避免处理此异常，请改用 TryGetObjectByKey 方法。 如果无法找到对象，GetObjectByKey 会引发 ObjectNotFoundException。若要避免处理此异常，请改用 TryGetObjectByKey 方法。

此方法将返回状态为 Deleted 的对象。

临时键无法用于从数据源返回对象。

此示例基于 Adventure Works Sales Model。该示例为具有给定类型的实体创建 EntityKey，然后通过键获取实体。 此示例基于 Adventure Works Sales Model。该示例为具有给定类型的实体创建 EntityKey，然后通过键获取实体。

Using context As New AdventureWorksEntities()
    Try
        ' Define the entity key values.
        Dim entityKeyValues As IEnumerable(Of KeyValuePair(Of String, Object)) = _
            New KeyValuePair(Of String, Object)() {New KeyValuePair(Of String, Object)("SalesOrderID", 43680)}

        ' Create the key for a specific SalesOrderHeader object.
        Dim key As New EntityKey("AdventureWorksEntities.SalesOrderHeaders", entityKeyValues)

        ' Get the object from the context or the persisted store by its key.
        Dim order As SalesOrderHeader = DirectCast(context.GetObjectByKey(key), SalesOrderHeader)

        Console.WriteLine("SalesOrderID: {0} Order Number: {1}", order.SalesOrderID, order.SalesOrderNumber)
    Catch ex As ObjectNotFoundException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Define the entity key values.
        IEnumerable<KeyValuePair<string, object>> entityKeyValues =
            new KeyValuePair<string, object>[] {
                new KeyValuePair<string, object>("SalesOrderID", 43680) };

        // Create the  key for a specific SalesOrderHeader object.
        EntityKey key = new EntityKey("AdventureWorksEntities.SalesOrderHeaders", entityKeyValues);

        // Get the object from the context or the persisted store by its key.
        SalesOrderHeader order =
            (SalesOrderHeader)context.GetObjectByKey(key);

        Console.WriteLine("SalesOrderID: {0} Order Number: {1}",
            order.SalesOrderID, order.SalesOrderNumber);
    }
    catch (ObjectNotFoundException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)
Object Services (Entity Framework)
How to: Return a Specific Object Using its Key (Entity Framework)


ObjectContext ..::.GetObjectType 方法

ObjectContext
.
.
::
.
GetObjectType 方法
ObjectContext 类

返回与指定类型的代理对象关联的 POCO 实体的实体类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Shared Function GetObjectType ( _
    type As Type _
) As Type
public static Type GetObjectType(
    Type type
)
public:
static Type^ GetObjectType(
    Type^ type
)
static member GetObjectType :
        type:Type -> Type

参数

type
类型： System Type
代理对象的 Type。

返回值

类型： System Type
关联的 POCO 实体的 Type。

在为 POCO 实体启用代理对象生成时使用 GetObjectType 方法。有关更多信息，请参见Requirements for Creating POCO Proxies和 Persistence Ignorant Custom Objects (Entity Framework)。 在为 POCO 实体启用代理对象生成时使用 GetObjectType 方法。有关更多信息，请参见Requirements for Creating POCO Proxies和 Persistence Ignorant Custom Objects (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with POCO Entities


ObjectContext ..::.LoadProperty 方法

ObjectContext
.
.
::
.
LoadProperty 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

在使用 POCO 自定义数据类时显式加载相关对象。

名称 说明
页首

在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.LoadProperty <(Of <(TEntity >)>) 方法 (TEntity, Expression <(Of <(Func <(Of <(TEntity, Object >)>) >)>))

ObjectContext
.
.
::
.
LoadProperty
<
(Of
<
(
TEntity
>
)
>
)
方法 (TEntity, Expression
<
(Of
<
(
Func
<
(Of
<
(
TEntity, Object
>
)
>
)
>
)
>
)
)
ObjectContext 类

通过指定的 LINQ 查询并使用默认合并选项，显式加载与提供的对象相关的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub LoadProperty(Of TEntity) ( _
    entity As TEntity, _
    selector As Expression(Of Func(Of TEntity, Object)) _
)
public void LoadProperty<TEntity>(
    TEntity entity,
    Expression<Func<TEntity, Object>> selector
)

public:
generic<typename TEntity>
void LoadProperty(
    TEntity entity,
    Expression<Func<TEntity, Object^>^>^ selector
)
member LoadProperty :
        entity:'TEntity *
        selector:Expression<Func<'TEntity, Object>> -> unit

类型参数

TEntity

参数

entity
类型：TEntity
要为其加载相关对象的源对象。
selector
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TEntity, Object
>
)
>
)
>
)
>
)

定义要加载的相关对象的 LINQ 表达式。
异常 | 条件
ArgumentException | selector 未提供有效的输入参数。
ArgumentNullException | selector 为 null。
InvalidOperationException | entity 处于 Detached、 [F:System.Data.EntityState.Added,] 或 Deleted 状态。 - 或 - entity 附加到 ObjectContext 的另一个实例。

当使用 POCO 自定义数据类时，必须调用 LoadProperty 方法来达成显式加载。

在调用 LoadProperty 后，可通过源实体的导航属性访问相关对象。

要加载的属性由 LINQ 表达式指定，必须采用简单属性成员访问的形式，与 (entity) => entity.PropertyName 中一样，其中 PropertyName 是返回要加载的相关对象的导航属性。如果使用了其他形式的 LINQ 表达式，则将出现异常。 要加载的属性由 LINQ 表达式指定，必须采用简单属性成员访问的形式，与 (entity) => entity.PropertyName 中一样，其中 PropertyName 是返回要加载的相关对象的导航属性。如果使用了其他形式的 LINQ 表达式，则将出现异常。

在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
LoadProperty 重载
System.Data.Objects 命名空间


ObjectContext ..::.LoadProperty 方法 (Object, String)

ObjectContext
.
.
::
.
LoadProperty 方法 (Object, String)
ObjectContext 类

通过指定的导航属性并使用默认合并选项，显式加载与提供的对象相关的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub LoadProperty ( _
    entity As Object, _
    navigationProperty As String _
)
public void LoadProperty(
    Object entity,
    string navigationProperty
)
public:
void LoadProperty(
    Object^ entity,
    String^ navigationProperty
)
member LoadProperty :
        entity:Object *
        navigationProperty:string -> unit

参数

entity
类型： System Object
要为其加载相关对象的实体。
navigationProperty
类型： System String
可返回要加载的相关对象的导航属性的名称。
异常 | 条件
InvalidOperationException | entity 处于 Detached、 [F:System.Data.EntityState.Added,] 或 Deleted 状态。 - 或 - entity 附加到 ObjectContext 的另一个实例。

当使用 POCO 自定义数据类时，必须调用 LoadProperty 方法来达成显式加载。

在调用 LoadProperty 后，可通过源实体的导航属性访问相关对象。

在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。

在调用 LoadProperty 方法时，使用 AppendOnly 的默认 MergeOption 值，将对象加载到 ObjectContext。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
LoadProperty 重载
System.Data.Objects 命名空间


ObjectContext ..::.LoadProperty <(Of <(TEntity >)>) 方法 (TEntity, Expression <(Of <(Func <(Of <(TEntity, Object >)>) >)>), MergeOption)

ObjectContext
.
.
::
.
LoadProperty
<
(Of
<
(
TEntity
>
)
>
)
方法 (TEntity, Expression
<
(Of
<
(
Func
<
(Of
<
(
TEntity, Object
>
)
>
)
>
)
>
)
, MergeOption)
ObjectContext 类

通过指定的 LINQ 查询并使用指定的合并选项，显式加载与提供的对象相关的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub LoadProperty(Of TEntity) ( _
    entity As TEntity, _
    selector As Expression(Of Func(Of TEntity, Object)), _
    mergeOption As MergeOption _
)
public void LoadProperty<TEntity>(
    TEntity entity,
    Expression<Func<TEntity, Object>> selector,
    MergeOption mergeOption
)

public:
generic<typename TEntity>
void LoadProperty(
    TEntity entity,
    Expression<Func<TEntity, Object^>^>^ selector,
    MergeOption mergeOption
)
member LoadProperty :
        entity:'TEntity *
        selector:Expression<Func<'TEntity, Object>> *
        mergeOption:MergeOption -> unit

类型参数

TEntity

参数

entity
类型：TEntity
要为其加载相关对象的源对象。
selector
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TEntity, Object
>
)
>
)
>
)
>
)

定义要加载的相关对象的 LINQ 表达式。
mergeOption
类型： System.Data.Objects MergeOption
在加载相关对象时要使用的 MergeOption 值。
异常 | 条件
ArgumentException | selector 未提供有效的输入参数。
ArgumentNullException | selector 为 null。
InvalidOperationException | entity 处于 Detached、 [F:System.Data.EntityState.Added,] 或 Deleted 状态。 - 或 - entity 附加到 ObjectContext 的另一个实例。

当使用 POCO 自定义数据类时，必须调用 LoadProperty 方法来达成显式加载。

在调用 LoadProperty 后，可通过源实体的导航属性访问相关对象。

要加载的属性由 LINQ 表达式指定，必须采用简单属性成员访问的形式，与 (entity) => entity.PropertyName 中一样，其中 PropertyName 是返回要加载的相关对象的导航属性。如果使用了其他形式的 LINQ 表达式，则将出现异常。 要加载的属性由 LINQ 表达式指定，必须采用简单属性成员访问的形式，与 (entity) => entity.PropertyName 中一样，其中 PropertyName 是返回要加载的相关对象的导航属性。如果使用了其他形式的 LINQ 表达式，则将出现异常。

在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
LoadProperty 重载
System.Data.Objects 命名空间


ObjectContext ..::.LoadProperty 方法 (Object, String, MergeOption)

ObjectContext
.
.
::
.
LoadProperty 方法 (Object, String, MergeOption)
ObjectContext 类

通过指定的导航属性并使用指定的合并选项，显式加载与提供的对象相关的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub LoadProperty ( _
    entity As Object, _
    navigationProperty As String, _
    mergeOption As MergeOption _
)
public void LoadProperty(
    Object entity,
    string navigationProperty,
    MergeOption mergeOption
)
public:
void LoadProperty(
    Object^ entity,
    String^ navigationProperty,
    MergeOption mergeOption
)
member LoadProperty :
        entity:Object *
        navigationProperty:string *
        mergeOption:MergeOption -> unit

参数

entity
类型： System Object
要为其加载相关对象的实体。
navigationProperty
类型： System String
可返回要加载的相关对象的导航属性的名称。
mergeOption
类型： System.Data.Objects MergeOption
在加载相关对象时要使用的 MergeOption 值。
异常 | 条件
InvalidOperationException | entity 处于 Detached、 [F:System.Data.EntityState.Added,] 或 Deleted 状态。 - 或 - entity 附加到 ObjectContext 的另一个实例。

当使用 POCO 自定义数据类时，必须调用 LoadProperty 方法来达成显式加载。

在调用 LoadProperty 后，可通过源实体的导航属性访问相关对象。

在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。 在使用 POCO 自定义数据类时，相关对象不能象实体数据模型工具生成的实体类型实例一样被显式加载。这是因为工具生成在 RelatedEnd 上调用 Load 时返回相关对象的 EntityCollection<(Of <(TEntity>)>) 或 EntityReference<(Of <(TEntity>)>) 的导航属性。通过在 ObjectContext..::.ContextOptions 属性返回的 ObjectContextOptions 实例上将 LazyLoadingEnabled 属性设置为 true，或者将预先加载与 ObjectQuery<(Of <(T>)>) 上的 Include 方法结合使用，仍然可以使用惰性加载来加载 POCO 实体。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
LoadProperty 重载
System.Data.Objects 命名空间


ObjectContext ..::.Refresh 方法

ObjectContext
.
.
::
.
Refresh 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

使用数据源中的数据更新对象上下文中的特定对象。

名称 说明
页首

刷新对象的顺序具有不确定性。

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.Refresh 方法 (RefreshMode, IEnumerable)

ObjectContext
.
.
::
.
Refresh 方法 (RefreshMode, IEnumerable)
ObjectContext 类

使用数据源中的数据更新对象上下文中的对象集合。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Refresh ( _
    refreshMode As RefreshMode, _
    collection As IEnumerable _
)
public void Refresh(
    RefreshMode refreshMode,
    IEnumerable collection
)
public:
void Refresh(
    RefreshMode refreshMode,
    IEnumerable^ collection
)
member Refresh :
        refreshMode:RefreshMode *
        collection:IEnumerable -> unit

参数

refreshMode
类型： System.Data.Objects RefreshMode
一个 RefreshMode 值，指示是否使用数据源中的属性值覆盖对象上下文中的属性更改。
collection
类型： System.Collections IEnumerable
要刷新的对象的 IEnumerable 集合。
异常 | 条件
ArgumentNullException | collection 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | refreshMode 无效。
ArgumentException | collection 为空。 - 或 - 对象未附加到上下文。

此方法具有两种用途，一种是允许使用数据源中的数据刷新对象上下文中的对象，另一种是作为解决冲突的机制。有关更多信息，请参见Saving Changes and Managing Concurrency (Entity Framework)。 此方法具有两种用途，一种是允许使用数据源中的数据刷新对象上下文中的对象，另一种是作为解决冲突的机制。有关更多信息，请参见Saving Changes and Managing Concurrency (Entity Framework)。

刷新对象的顺序具有不确定性。

在调用 Refresh 后，会始终使用数据源值更新对象的原始值，但是可能会也可能不会使用数据源值更新当前值。这取决于 RefreshMode 值。StoreWins 模式意味着应将集中对象更新为与数据源值匹配。ClientWins 意味着仅保持对象上下文中的更改，即使数据源中发生了其他更改也是如此。 在调用 Refresh 后，会始终使用数据源值更新对象的原始值，但是可能会也可能不会使用数据源值更新当前值。这取决于 RefreshMode 值。StoreWins 模式意味着应将集中对象更新为与数据源值匹配。ClientWins 意味着仅保持对象上下文中的更改，即使数据源中发生了其他更改也是如此。 在调用 Refresh 后，会始终使用数据源值更新对象的原始值，但是可能会也可能不会使用数据源值更新当前值。这取决于 RefreshMode 值。StoreWins 模式意味着应将集中对象更新为与数据源值匹配。ClientWins 意味着仅保持对象上下文中的更改，即使数据源中发生了其他更改也是如此。 在调用 Refresh 后，会始终使用数据源值更新对象的原始值，但是可能会也可能不会使用数据源值更新当前值。这取决于 RefreshMode 值。StoreWins 模式意味着应将集中对象更新为与数据源值匹配。ClientWins 意味着仅保持对象上下文中的更改，即使数据源中发生了其他更改也是如此。

若要确保已由数据源端逻辑更新了对象，可以在调用 SaveChanges 方法后，使用 StoreWins 调用 Refresh。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
Refresh 重载
System.Data.Objects 命名空间

其他资源

How to: Manage Data Concurrency in the Object Context (Entity Framework)
Managing the Object Context (Entity Framework)
Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.Refresh 方法 (RefreshMode, Object)

ObjectContext
.
.
::
.
Refresh 方法 (RefreshMode, Object)
ObjectContext 类

使用数据源中的数据更新对象上下文中的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Refresh ( _
    refreshMode As RefreshMode, _
    entity As Object _
)
public void Refresh(
    RefreshMode refreshMode,
    Object entity
)
public:
void Refresh(
    RefreshMode refreshMode,
    Object^ entity
)
member Refresh :
        refreshMode:RefreshMode *
        entity:Object -> unit

参数

refreshMode
类型： System.Data.Objects RefreshMode
一个 RefreshMode 值，指定使用哪种模式来刷新 ObjectStateManager。
entity
类型： System Object
要刷新的对象。
异常 | 条件
ArgumentNullException | collection 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentOutOfRangeException | refreshMode 无效。
ArgumentException | collection 为空。 - 或 - 对象未附加到上下文。

Refresh 具有两种用途，一种是允许使用数据源中的数据刷新对象，另一种是作为解决冲突的机制。有关更多信息，请参见Saving Changes and Managing Concurrency (Entity Framework)。 Refresh 具有两种用途，一种是允许使用数据源中的数据刷新对象，另一种是作为解决冲突的机制。有关更多信息，请参见Saving Changes and Managing Concurrency (Entity Framework)。

刷新对象的顺序具有不确定性。

在调用 Refresh 方法后，会始终使用数据源值更新对象的原始值，但是可能会也可能不会使用数据源值更新当前值。这取决于 RefreshMode。StoreWins 模式意味着应将对象更新为与数据源值匹配。ClientWins 值意味着仅保持对象上下文中的更改，即使数据源中发生了其他更改也是如此。 在调用 Refresh 方法后，会始终使用数据源值更新对象的原始值，但是可能会也可能不会使用数据源值更新当前值。这取决于 RefreshMode。StoreWins 模式意味着应将对象更新为与数据源值匹配。ClientWins 值意味着仅保持对象上下文中的更改，即使数据源中发生了其他更改也是如此。 在调用 Refresh 方法后，会始终使用数据源值更新对象的原始值，但是可能会也可能不会使用数据源值更新当前值。这取决于 RefreshMode。StoreWins 模式意味着应将对象更新为与数据源值匹配。ClientWins 值意味着仅保持对象上下文中的更改，即使数据源中发生了其他更改也是如此。 在调用 Refresh 方法后，会始终使用数据源值更新对象的原始值，但是可能会也可能不会使用数据源值更新当前值。这取决于 RefreshMode。StoreWins 模式意味着应将对象更新为与数据源值匹配。ClientWins 值意味着仅保持对象上下文中的更改，即使数据源中发生了其他更改也是如此。

若要确保已由数据源端逻辑更新了对象，可以在调用 SaveChanges 方法后，使用 StoreWins 值调用 Refresh 方法。

此示例基于 Adventure Works Sales Model。此示例尝试保存更改，这可能导致并发冲突。然后，此示例演示如何通过在重新保存更改前刷新对象上下文来解决并发冲突。 此示例基于 Adventure Works Sales Model。此示例尝试保存更改，这可能导致并发冲突。然后，此示例演示如何通过在重新保存更改前刷新对象上下文来解决并发冲突。 此示例基于 Adventure Works Sales Model。此示例尝试保存更改，这可能导致并发冲突。然后，此示例演示如何通过在重新保存更改前刷新对象上下文来解决并发冲突。

Using context As New AdventureWorksEntities()
    Try
        ' Perform an operation with a high-level of concurrency.
        ' Change the status of all orders without an approval code.
        Dim orders As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeaders.Where("it.CreditCardApprovalCode IS NULL").Top("100")

        For Each order As SalesOrderHeader In orders
            ' Reset the order status to 4 = Rejected.
            order.Status = 4
        Next
        Try
            ' Try to save changes, which may cause a conflict.
            Dim num As Integer = context.SaveChanges()
            Console.WriteLine("No conflicts. " & num.ToString() & " updates saved.")
        Catch generatedExceptionName As OptimisticConcurrencyException
            ' Resolve the concurrency conflict by refreshing the
            ' object context before re-saving changes.
            context.Refresh(RefreshMode.ClientWins, orders)

            ' Save changes.
            context.SaveChanges()
            Console.WriteLine("OptimisticConcurrencyException handled and changes saved")
        End Try

        For Each order As SalesOrderHeader In orders
            Console.WriteLine(("Order ID: " & order.SalesOrderID.ToString() & " Order status: ") + order.Status.ToString())
        Next
    Catch ex As UpdateException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Perform an operation with a high-level of concurrency.
        // Change the status of all orders without an approval code.
        ObjectQuery<SalesOrderHeader> orders =
            context.SalesOrderHeaders.Where(
            "it.CreditCardApprovalCode IS NULL").Top("100");

        foreach (SalesOrderHeader order in orders)
        {
            // Reset the order status to 4 = Rejected.
            order.Status = 4;
        }
        try
        {
            // Try to save changes, which may cause a conflict.
            int num = context.SaveChanges();
            Console.WriteLine("No conflicts. " +
                num.ToString() + " updates saved.");
        }
        catch (OptimisticConcurrencyException)
        {
            // Resolve the concurrency conflict by refreshing the
            // object context before re-saving changes.
            context.Refresh(RefreshMode.ClientWins, orders);

            // Save changes.
            context.SaveChanges();
            Console.WriteLine("OptimisticConcurrencyException "
            + "handled and changes saved");
        }

        foreach (SalesOrderHeader order in orders)
        {
            Console.WriteLine("Order ID: " + order.SalesOrderID.ToString()
                + " Order status: " + order.Status.ToString());
        }
    }
    catch (UpdateException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
Refresh 重载
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)
How to: Manage Data Concurrency in the Object Context (Entity Framework)


ObjectContext ..::.SaveChanges 方法

ObjectContext
.
.
::
.
SaveChanges 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

将所有更新保存到数据源。

名称 说明
页首

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

How to: Execute Business Logic When Saving Changes


ObjectContext ..::.SaveChanges 方法

ObjectContext
.
.
::
.
SaveChanges 方法
ObjectContext 类

将所有更新保存到数据源并重置对象上下文中的更改跟踪。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function SaveChanges As Integer
public int SaveChanges()
public:
int SaveChanges()
member SaveChanges : unit -> int

返回值

类型： System Int32
在调用 SaveChanges 时处于 Added、Modified 或 Deleted 状态的对象数。
异常 | 条件
OptimisticConcurrencyException | 在数据源中发生了开放式并发冲突。

若要确保已由数据源端逻辑更新了客户端上的对象，可以在调用 SaveChanges 后，使用 StoreWins 值调用 Refresh 方法。有关更多信息，请参见Saving Changes and Managing Concurrency (Entity Framework)。 若要确保已由数据源端逻辑更新了客户端上的对象，可以在调用 SaveChanges 后，使用 StoreWins 值调用 Refresh 方法。有关更多信息，请参见Saving Changes and Managing Concurrency (Entity Framework)。

SaveChanges 在事务内进行操作。SaveChanges 将回滚该事务，并且如果任何脏 ObjectStateEntry 对象无法继续，将引发异常。 SaveChanges 在事务内进行操作。SaveChanges 将回滚该事务，并且如果任何脏 ObjectStateEntry 对象无法继续，将引发异常。

如果发生了开放式并发冲突，则将引发 OptimisticConcurrencyException。可以通过以下方式解决开放式并发冲突，即捕获该冲突，使用 StoreWins 或 ClientWins 值调用 Refresh 方法，然后再次调用 SaveChanges。有关更多信息，请参见How to: Manage Data Concurrency in the Object Context (Entity Framework)。 如果发生了开放式并发冲突，则将引发 OptimisticConcurrencyException。可以通过以下方式解决开放式并发冲突，即捕获该冲突，使用 StoreWins 或 ClientWins 值调用 Refresh 方法，然后再次调用 SaveChanges。有关更多信息，请参见How to: Manage Data Concurrency in the Object Context (Entity Framework)。 如果发生了开放式并发冲突，则将引发 OptimisticConcurrencyException。可以通过以下方式解决开放式并发冲突，即捕获该冲突，使用 StoreWins 或 ClientWins 值调用 Refresh 方法，然后再次调用 SaveChanges。有关更多信息，请参见How to: Manage Data Concurrency in the Object Context (Entity Framework)。

此示例基于 Adventure Works Sales Model。此示例尝试保存更改，这可能导致并发冲突。然后，此示例演示如何通过在重新保存更改前刷新对象上下文来解决并发冲突。 此示例基于 Adventure Works Sales Model。此示例尝试保存更改，这可能导致并发冲突。然后，此示例演示如何通过在重新保存更改前刷新对象上下文来解决并发冲突。 此示例基于 Adventure Works Sales Model。此示例尝试保存更改，这可能导致并发冲突。然后，此示例演示如何通过在重新保存更改前刷新对象上下文来解决并发冲突。

Using context As New AdventureWorksEntities()
    Try
        ' Perform an operation with a high-level of concurrency.
        ' Change the status of all orders without an approval code.
        Dim orders As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeaders.Where("it.CreditCardApprovalCode IS NULL").Top("100")

        For Each order As SalesOrderHeader In orders
            ' Reset the order status to 4 = Rejected.
            order.Status = 4
        Next
        Try
            ' Try to save changes, which may cause a conflict.
            Dim num As Integer = context.SaveChanges()
            Console.WriteLine("No conflicts. " & num.ToString() & " updates saved.")
        Catch generatedExceptionName As OptimisticConcurrencyException
            ' Resolve the concurrency conflict by refreshing the
            ' object context before re-saving changes.
            context.Refresh(RefreshMode.ClientWins, orders)

            ' Save changes.
            context.SaveChanges()
            Console.WriteLine("OptimisticConcurrencyException handled and changes saved")
        End Try

        For Each order As SalesOrderHeader In orders
            Console.WriteLine(("Order ID: " & order.SalesOrderID.ToString() & " Order status: ") + order.Status.ToString())
        Next
    Catch ex As UpdateException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Perform an operation with a high-level of concurrency.
        // Change the status of all orders without an approval code.
        ObjectQuery<SalesOrderHeader> orders =
            context.SalesOrderHeaders.Where(
            "it.CreditCardApprovalCode IS NULL").Top("100");

        foreach (SalesOrderHeader order in orders)
        {
            // Reset the order status to 4 = Rejected.
            order.Status = 4;
        }
        try
        {
            // Try to save changes, which may cause a conflict.
            int num = context.SaveChanges();
            Console.WriteLine("No conflicts. " +
                num.ToString() + " updates saved.");
        }
        catch (OptimisticConcurrencyException)
        {
            // Resolve the concurrency conflict by refreshing the
            // object context before re-saving changes.
            context.Refresh(RefreshMode.ClientWins, orders);

            // Save changes.
            context.SaveChanges();
            Console.WriteLine("OptimisticConcurrencyException "
            + "handled and changes saved");
        }

        foreach (SalesOrderHeader order in orders)
        {
            Console.WriteLine("Order ID: " + order.SalesOrderID.ToString()
                + " Order status: " + order.Status.ToString());
        }
    }
    catch (UpdateException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
SaveChanges 重载
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)
How to: Execute Business Logic When Saving Changes


ObjectContext ..::.SaveChanges 方法 (Boolean)

ObjectContext
.
.
::
.
SaveChanges 方法 (Boolean)
ObjectContext 类

注意：此 API 现在已过时。 非过时替代项是 SaveChanges(SaveOptions)。

将所有更新保存到数据源并可选择重置对象上下文中的更改跟踪。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<ObsoleteAttribute("Use SaveChanges(SaveOptions options) instead.")> _
<BrowsableAttribute(False)> _
Public Function SaveChanges ( _
    acceptChangesDuringSave As Boolean _
) As Integer
[ObsoleteAttribute("Use SaveChanges(SaveOptions options) instead.")]
[BrowsableAttribute(false)]
public int SaveChanges(
    bool acceptChangesDuringSave
)
[ObsoleteAttribute(L"Use SaveChanges(SaveOptions options) instead.")]
[BrowsableAttribute(false)]
public:
int SaveChanges(
    bool acceptChangesDuringSave
)
[<ObsoleteAttribute("Use SaveChanges(SaveOptions options) instead.")>]
[<BrowsableAttribute(false)>]
member SaveChanges :
        acceptChangesDuringSave:bool -> int

参数

acceptChangesDuringSave
类型： System Boolean
此参数是客户端事务支持所需的参数。如果为 true，则所有对象的更改跟踪都会在 SaveChanges(Boolean) 完成后重置。如果为 false，则必须在 SaveChanges(Boolean) 之后调用 AcceptAllChanges 方法。 此参数是客户端事务支持所需的参数。如果为 true，则所有对象的更改跟踪都会在 SaveChanges(Boolean) 完成后重置。如果为 false，则必须在 SaveChanges(Boolean) 之后调用 AcceptAllChanges 方法。 此参数是客户端事务支持所需的参数。如果为 true，则所有对象的更改跟踪都会在 SaveChanges(Boolean) 完成后重置。如果为 false，则必须在 SaveChanges(Boolean) 之后调用 AcceptAllChanges 方法。

返回值

类型： System Int32
在调用 SaveChanges 时处于 Added、Modified 或 Deleted 状态的对象数。
异常 | 条件
OptimisticConcurrencyException | 发生了开放式并发冲突。

改为调用 SaveChanges(SaveOptions) 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：3.5 SP1
在 4 中过时（编译器警告）

.NET Framework Client Profile

在 4 中过时（编译器警告）

参考

ObjectContext 类
ObjectContext 成员
SaveChanges 重载
System.Data.Objects 命名空间

其他资源

How to: Execute Business Logic When Saving Changes


ObjectContext ..::.SaveChanges 方法 (SaveOptions)

ObjectContext
.
.
::
.
SaveChanges 方法 (SaveOptions)
ObjectContext 类

使用指定的 SaveOptions 将所有更新保存到数据源。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overridable Function SaveChanges ( _
    options As SaveOptions _
) As Integer
public virtual int SaveChanges(
    SaveOptions options
)
public:
virtual int SaveChanges(
    SaveOptions options
)
abstract SaveChanges :
        options:SaveOptions -> int
override SaveChanges :
        options:SaveOptions -> int

参数

options
类型： System.Data.Objects SaveOptions
一个确定操作的行为的 SaveOptions 值。

返回值

类型： System Int32
在调用 SaveChanges 时处于 Added、Modified 或 Deleted 状态的对象数。
异常 | 条件
OptimisticConcurrencyException | 发生了开放式并发冲突。

使用 SaveChanges 的这个特定重载，可以确保在将更改保存到数据源之前调用 DetectChanges 或者将更改保存到数据源之后调用 AcceptAllChanges。

该枚举有 FlagsAttribute，该特性允许其成员值的按位组合。

若要确保已由数据源端逻辑更新了客户端上的对象，可以在调用 SaveChanges 后，使用 StoreWins 值调用 Refresh 方法。SaveChanges 方法在事务中进行操作。SaveChanges 将回滚该事务，并且如果其中一个脏 ObjectStateEntry 对象无法继续，将引发异常。 若要确保已由数据源端逻辑更新了客户端上的对象，可以在调用 SaveChanges 后，使用 StoreWins 值调用 Refresh 方法。SaveChanges 方法在事务中进行操作。SaveChanges 将回滚该事务，并且如果其中一个脏 ObjectStateEntry 对象无法继续，将引发异常。 若要确保已由数据源端逻辑更新了客户端上的对象，可以在调用 SaveChanges 后，使用 StoreWins 值调用 Refresh 方法。SaveChanges 方法在事务中进行操作。SaveChanges 将回滚该事务，并且如果其中一个脏 ObjectStateEntry 对象无法继续，将引发异常。

如果发生了开放式并发冲突，则将引发 OptimisticConcurrencyException。可以通过以下方式解决开放式并发冲突，即捕获该冲突，使用 StoreWins 或 ClientWins 值调用 Refresh 方法，然后再次调用 SaveChanges 方法。有关更多信息，请参见How to: Manage Data Concurrency in the Object Context (Entity Framework)。 如果发生了开放式并发冲突，则将引发 OptimisticConcurrencyException。可以通过以下方式解决开放式并发冲突，即捕获该冲突，使用 StoreWins 或 ClientWins 值调用 Refresh 方法，然后再次调用 SaveChanges 方法。有关更多信息，请参见How to: Manage Data Concurrency in the Object Context (Entity Framework)。 如果发生了开放式并发冲突，则将引发 OptimisticConcurrencyException。可以通过以下方式解决开放式并发冲突，即捕获该冲突，使用 StoreWins 或 ClientWins 值调用 Refresh 方法，然后再次调用 SaveChanges 方法。有关更多信息，请参见How to: Manage Data Concurrency in the Object Context (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
SaveChanges 重载
System.Data.Objects 命名空间


ObjectContext ..::.Translate 方法

ObjectContext
.
.
::
.
Translate 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

名称 说明
页首

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.Translate <(Of <(TElement >)>) 方法 (DbDataReader)

ObjectContext
.
.
::
.
Translate
<
(Of
<
(
TElement
>
)
>
)
方法 (DbDataReader)
ObjectContext 类

将包含实体数据行的 DbDataReader 转换为请求的实体类型的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Translate(Of TElement) ( _
    reader As DbDataReader _
) As ObjectResult(Of TElement)
public ObjectResult<TElement> Translate<TElement>(
    DbDataReader reader
)

public:
generic<typename TElement>
ObjectResult<TElement>^ Translate(
    DbDataReader^ reader
)
member Translate :
        reader:DbDataReader -> ObjectResult<'TElement>

类型参数

TElement

参数

reader
类型： System.Data.Common DbDataReader
包含要转换为实体对象的实体数据的 DbDataReader。

返回值

类型： System.Data.Objects ObjectResult
<
(Of
<
(
TElement
>
)
>
)

类型为 TResult 的对象的枚举。
异常 | 条件
ArgumentNullException | 当 reader 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。

Translate 方法用来将实体数据从 DbDataReader 转换为请求类型的对象。在执行 ObjectQuery<(Of <(T>)>) 时自动执行此过程以返回实体数据。Translate 方法使您可以对数据源执行标准 ADO.NET 查询，然后将返回的数据行转换为实体对象。 Translate 方法用来将实体数据从 DbDataReader 转换为请求类型的对象。在执行 ObjectQuery<(Of <(T>)>) 时自动执行此过程以返回实体数据。Translate 方法使您可以对数据源执行标准 ADO.NET 查询，然后将返回的数据行转换为实体对象。 Translate 方法用来将实体数据从 DbDataReader 转换为请求类型的对象。在执行 ObjectQuery<(Of <(T>)>) 时自动执行此过程以返回实体数据。Translate 方法使您可以对数据源执行标准 ADO.NET 查询，然后将返回的数据行转换为实体对象。

提供的 DbDataReader 必须包含映射到所请求的实体类型的数据。

有关更多信息，请参见：

Executing Store Commands 和

How to: Directly Execute Arbitrary Command Against the Store

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
Translate 重载
System.Data.Objects 命名空间


ObjectContext ..::.Translate <(Of <(TEntity >)>) 方法 (DbDataReader, String, MergeOption)

ObjectContext
.
.
::
.
Translate
<
(Of
<
(
TEntity
>
)
>
)
方法 (DbDataReader, String, MergeOption)
ObjectContext 类

在特定的实体集中，使用指定的合并选项将包含实体数据行的 DbDataReader 转换为请求的实体类型的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Translate(Of TEntity) ( _
    reader As DbDataReader, _
    entitySetName As String, _
    mergeOption As MergeOption _
) As ObjectResult(Of TEntity)
public ObjectResult<TEntity> Translate<TEntity>(
    DbDataReader reader,
    string entitySetName,
    MergeOption mergeOption
)

public:
generic<typename TEntity>
ObjectResult<TEntity>^ Translate(
    DbDataReader^ reader,
    String^ entitySetName,
    MergeOption mergeOption
)
member Translate :
        reader:DbDataReader *
        entitySetName:string *
        mergeOption:MergeOption -> ObjectResult<'TEntity>

类型参数

TEntity

参数

reader
类型： System.Data.Common DbDataReader
包含要转换为实体对象的实体数据的 DbDataReader。
entitySetName
类型： System String
TResult 类型的实体集。
mergeOption
类型： System.Data.Objects MergeOption
在将转换后的对象添加到对象上下文时要使用的 MergeOption。默认值为 AppendOnly。 在将转换后的对象添加到对象上下文时要使用的 MergeOption。默认值为 AppendOnly。

返回值

类型： System.Data.Objects ObjectResult
<
(Of
<
(
TEntity
>
)
>
)

类型为 TResult 的对象的枚举。
异常 | 条件
ArgumentNullException | 当 reader 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
ArgumentOutOfRangeException | 当提供的 mergeOption 不是有效的 MergeOption 值时。
InvalidOperationException | 当提供的 entitySetName 不是 TResult 类型的有效实体集时。

Translate 方法用来将实体数据从 DbDataReader 转换为请求类型的对象。在执行 ObjectQuery<(Of <(T>)>) 时自动执行此过程以返回实体数据。Translate 方法使您可以对数据源执行标准 ADO.NET 查询，然后将返回的数据行转换为实体对象。 Translate 方法用来将实体数据从 DbDataReader 转换为请求类型的对象。在执行 ObjectQuery<(Of <(T>)>) 时自动执行此过程以返回实体数据。Translate 方法使您可以对数据源执行标准 ADO.NET 查询，然后将返回的数据行转换为实体对象。 Translate 方法用来将实体数据从 DbDataReader 转换为请求类型的对象。在执行 ObjectQuery<(Of <(T>)>) 时自动执行此过程以返回实体数据。Translate 方法使您可以对数据源执行标准 ADO.NET 查询，然后将返回的数据行转换为实体对象。

提供的 DbDataReader 必须包含映射到所请求的实体类型的数据。

有关更多信息，请参见：

Executing Store Commands 和

How to: Directly Execute Arbitrary Command Against the Store

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
Translate 重载
System.Data.Objects 命名空间


ObjectContext ..::.TryGetObjectByKey 方法

ObjectContext
.
.
::
.
TryGetObjectByKey 方法
ObjectContext 类

返回具有指定实体键的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function TryGetObjectByKey ( _
    key As EntityKey, _
    <OutAttribute> ByRef value As Object _
) As Boolean
public bool TryGetObjectByKey(
    EntityKey key,
    out Object value
)
public:
bool TryGetObjectByKey(
    EntityKey^ key,
    [OutAttribute] Object^% value
)
member TryGetObjectByKey :
        key:EntityKey *
        value:Object byref -> bool

参数

key
类型： System.Data EntityKey
要查找的对象的键。
value
类型： System Object %
在此方法返回时包含该对象。

返回值

类型： System Boolean
如果成功检索到对象，则为 true。如果 key 是临时的，或者连接为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 false。 如果成功检索到对象，则为 true。如果 key 是临时的，或者连接为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），或 value 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），则为 false。
异常 | 条件
ArgumentException | key 的元数据不兼容。
ArgumentNullException | key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

TryGetObjectByKey 尝试从 ObjectStateManager 检索具有指定 EntityKey 的对象。如果该对象当前尚未加载到对象上下文中，则会执行查询以尝试从数据源返回该对象。有关更多信息，请参见Object Queries (Entity Framework)。 TryGetObjectByKey 尝试从 ObjectStateManager 检索具有指定 EntityKey 的对象。如果该对象当前尚未加载到对象上下文中，则会执行查询以尝试从数据源返回该对象。有关更多信息，请参见Object Queries (Entity Framework)。 TryGetObjectByKey 尝试从 ObjectStateManager 检索具有指定 EntityKey 的对象。如果该对象当前尚未加载到对象上下文中，则会执行查询以尝试从数据源返回该对象。有关更多信息，请参见Object Queries (Entity Framework)。

使用 TryGetObjectByKey 方法可避免处理在无法找到对象时由 GetObjectByKey 引发的 ObjectNotFoundException。

此方法将返回状态为 Deleted 的对象。

临时键无法用于从数据源返回对象。

TryGetObjectByKey(EntityKey, Object) 方法将标准 .NET TryParse 模式应用于 GetObjectByKey 方法，从而在捕获 ObjectNotFoundException 时返回 false。

本主题中的示例基于 Adventure Works Sales Model。该示例为具有给定类型的实体创建 EntityKey，然后尝试通过键检索实体。 本主题中的示例基于 Adventure Works Sales Model。该示例为具有给定类型的实体创建 EntityKey，然后尝试通过键检索实体。

Using context As New AdventureWorksEntities()
    Try
        Dim entity As Object = Nothing
        Dim entityKeyValues As IEnumerable(Of KeyValuePair(Of String, Object)) = _
            New KeyValuePair(Of String, Object)() {New KeyValuePair(Of String, Object)("SalesOrderID", 43680)}

        ' Create the key for a specific SalesOrderHeader object.
        Dim key As New EntityKey("AdventureWorksEntities.SalesOrderHeaders", entityKeyValues)

        ' Get the object from the context or the persisted store by its key.
        If context.TryGetObjectByKey(key, entity) Then
            Console.WriteLine("The requested " & entity.GetType().FullName & " object was found")
        Else
            Console.WriteLine("An object with this key could not be found.")
        End If
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        Object entity = null;
        IEnumerable<KeyValuePair<string, object>> entityKeyValues =
            new KeyValuePair<string, object>[] {
                new KeyValuePair<string, object>("SalesOrderID", 43680) };

        // Create the  key for a specific SalesOrderHeader object.
        EntityKey key = new EntityKey("AdventureWorksEntities.SalesOrderHeaders", entityKeyValues);

        // Get the object from the context or the persisted store by its key.
        if (context.TryGetObjectByKey(key, out entity))
        {
            Console.WriteLine("The requested " + entity.GetType().FullName +
                " object was found");
        }
        else
        {
            Console.WriteLine("An object with this key " +
                "could not be found.");
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)
Configuring the Entity Framework (Entity Framework Tasks)


ObjectContext 属性

ObjectContext 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

ObjectContext 类型公开以下成员。

名称 说明
页首

参考

ObjectContext 类
System.Data.Objects 命名空间


ObjectContext ..::.CommandTimeout 属性

ObjectContext
.
.
::
.
CommandTimeout 属性
ObjectContext 类

获取或设置所有对象上下文操作的超时值（以秒为单位）。nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值表示将使用基础提供程序的默认值。 获取或设置所有对象上下文操作的超时值（以秒为单位）。nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值表示将使用基础提供程序的默认值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property CommandTimeout As Nullable(Of Integer)
    Get
    Set
public Nullable<int> CommandTimeout { get; set; }
public:
property Nullable<int> CommandTimeout {
    Nullable<int> get ();
    void set (Nullable<int> value);
}
member CommandTimeout : Nullable<int> with get, set

属性值

类型： System Nullable
<
(Of
<
(
Int32
>
)
>
)

表示超时值的 Int32 值（以秒为单位）。
异常 | 条件
ArgumentException | 超时值小于 0。

对象查询和 SaveChanges 操作的默认超时由基础连接提供程序定义。但是，可以通过在 ObjectContext 上使用 CommandTimeout 属性重写此默认超时值，如下面的示例所示。 对象查询和 SaveChanges 操作的默认超时由基础连接提供程序定义。但是，可以通过在 ObjectContext 上使用 CommandTimeout 属性重写此默认超时值，如下面的示例所示。

' Specify a timeout for queries in this context, in seconds.
context.CommandTimeout = 120

// Specify a timeout for queries in this context, in seconds.
context.CommandTimeout = 120;

当查询很复杂或者由于其他性能问题导致对 SaveChanges 的查询或调用频繁超时时，可以执行此操作。

Object Queries (Entity Framework)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.Connection 属性

ObjectContext
.
.
::
.
Connection 属性
ObjectContext 类

获取对象上下文使用的连接。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Connection As DbConnection
    Get
public DbConnection Connection { get; }
public:
property DbConnection^ Connection {
    DbConnection^ get ();
}
member Connection : DbConnection

属性值

类型： System.Data.Common DbConnection
一个表示连接的 DbConnection 对象。
异常 | 条件
ObjectDisposedException | 当释放了 ObjectContext 实例时。

此属性返回传递给构造函数或在构造过程中创建的连接对象。连接的所有权由所使用的构造函数来决定。 此属性返回传递给构造函数或在构造过程中创建的连接对象。连接的所有权由所使用的构造函数来决定。

本示例创建一个 EntityConnection 对象，该对象将传递到长时间运行的 ObjectContext 的构造函数中。此连接以手动方式建立。EntityConnection 对象和 ObjectContext 对象都是手动释放的。 本示例创建一个 EntityConnection 对象，该对象将传递到长时间运行的 ObjectContext 的构造函数中。此连接以手动方式建立。EntityConnection 对象和 ObjectContext 对象都是手动释放的。 本示例创建一个 EntityConnection 对象，该对象将传递到长时间运行的 ObjectContext 的构造函数中。此连接以手动方式建立。EntityConnection 对象和 ObjectContext 对象都是手动释放的。

' Define the order ID for the order we want.
Dim orderId As Integer = 43680

' Create an EntityConnection.
Dim conn As New EntityConnection("name=AdventureWorksEntities")

' Create a long-running context with the connection.
Dim context As New AdventureWorksEntities(conn)

Try
    ' Explicitly open the connection.
    If conn.State <> ConnectionState.Open Then
        conn.Open()
    End If

    ' Execute a query to return an order.
    Dim order As SalesOrderHeader = context.SalesOrderHeaders.Where("it.SalesOrderID = @orderId", _
                                        New ObjectParameter("orderId", orderId)).Execute(MergeOption.AppendOnly).First()

    ' Change the status of the order.
    order.Status = 1

    ' You do not have to call the Load method to load the details for the order,
    ' because lazy loading is set to true
    ' by the constructor of the AdventureWorksEntities object.
    ' With lazy loading set to true the related objects are loaded when
    ' you access the navigation property. In this case SalesOrderDetails.

    ' Delete the first item in the order.
    context.DeleteObject(order.SalesOrderDetails.First())

    ' Save changes.
    If 0 < context.SaveChanges() Then
        Console.WriteLine("Changes saved.")
    End If

    ' Create a new SalesOrderDetail object.
    ' You can use the static CreateObjectName method (the Entity Framework
    ' adds this method to the generated entity types) instead of the new operator:
    ' SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
    ' Guid.NewGuid(), DateTime.Today));
    Dim detail = New SalesOrderDetail With
    {
        .SalesOrderID = 0,
        .SalesOrderDetailID = 0,
        .OrderQty = 2,
        .ProductID = 750,
        .SpecialOfferID = 1,
        .UnitPrice = CDec(2171.2942),
        .UnitPriceDiscount = 0,
        .LineTotal = 0,
        .rowguid = Guid.NewGuid(),
        .ModifiedDate = DateTime.Now
    }

    order.SalesOrderDetails.Add(detail)

    ' Save changes again.
    If 0 < context.SaveChanges() Then
        Console.WriteLine("Changes saved.")
    End If
Catch ex As InvalidOperationException
    Console.WriteLine(ex.ToString())
Finally
    ' Explicitly dispose of the context and the connection.
    context.Dispose()
    conn.Dispose()

// Define the order ID for the order we want.
int orderId = 43680;

// Create an EntityConnection.
EntityConnection conn =
    new EntityConnection("name=AdventureWorksEntities");

// Create a long-running context with the connection.
AdventureWorksEntities context =
    new AdventureWorksEntities(conn);

try
{
    // Explicitly open the connection.
    if (conn.State != ConnectionState.Open)
    {
        conn.Open();
    }

    // Execute a query to return an order.
    SalesOrderHeader order =
        context.SalesOrderHeaders.Where(
        "it.SalesOrderID = @orderId", new ObjectParameter("orderId", orderId))
        .Execute(MergeOption.AppendOnly).First();

    // Change the status of the order.
    order.Status = 1;

    // You do not have to call the Load method to load the details for the order,
    // because  lazy loading is set to true
    // by the constructor of the AdventureWorksEntities object.
    // With  lazy loading set to true the related objects are loaded when
    // you access the navigation property. In this case SalesOrderDetails.

    // Delete the first item in the order.
    context.DeleteObject(order.SalesOrderDetails.First());

    // Save changes.
    if (0 < context.SaveChanges())
    {
        Console.WriteLine("Changes saved.");
    }

    // Create a new SalesOrderDetail object.
    // You can use the static CreateObjectName method (the Entity Framework
    // adds this method to the generated entity types) instead of the new operator:
    // SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
    //                                         Guid.NewGuid(), DateTime.Today));
    SalesOrderDetail detail = new SalesOrderDetail
    {
        SalesOrderID = 1,
        SalesOrderDetailID = 0,
        OrderQty = 2,
        ProductID = 750,
        SpecialOfferID = 1,
        UnitPrice = (decimal)2171.2942,
        UnitPriceDiscount = 0,
        LineTotal = 0,
        rowguid = Guid.NewGuid(),
        ModifiedDate = DateTime.Now
    };

    order.SalesOrderDetails.Add(detail);

    // Save changes again.
    if (0 < context.SaveChanges())
    {
        Console.WriteLine("Changes saved.");
    }
}
catch (InvalidOperationException ex)
{
    Console.WriteLine(ex.ToString());
}
finally
{
    // Explicitly dispose of the context and the connection.
    context.Dispose();
    conn.Dispose();
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.ContextOptions 属性

ObjectContext
.
.
::
.
ContextOptions 属性
ObjectContext 类

获取 ObjectContextOptions 实例，该实例包含影响 ObjectContext 的行为的选项。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ContextOptions As ObjectContextOptions
    Get
public ObjectContextOptions ContextOptions { get; }
public:
property ObjectContextOptions^ ContextOptions {
    ObjectContextOptions^ get ();
}
member ContextOptions : ObjectContextOptions

属性值

类型： System.Data.Objects ObjectContextOptions
ObjectContextOptions 实例，该实例包含影响 ObjectContext 的行为的选项。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.DefaultContainerName 属性

ObjectContext
.
.
::
.
DefaultContainerName 属性
ObjectContext 类

获取或设置默认容器名称。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property DefaultContainerName As String
    Get
    Set
public string DefaultContainerName { get; set; }
public:
property String^ DefaultContainerName {
    String^ get ();
    void set (String^ value);
}
member DefaultContainerName : string with get, set

属性值

类型： System String
一个作为默认容器名称的 String。

DefaultContainerName 从不返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它不是返回设置的值，就是返回一个空字符串。用户可将此属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但是在内部该名称将被设置为一个空字符串，因此用户根本不必检查该属性为空字符串还是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 DefaultContainerName 从不返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），它不是返回设置的值，就是返回一个空字符串。用户可将此属性设置为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing），但是在内部该名称将被设置为一个空字符串，因此用户根本不必检查该属性为空字符串还是 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

默认容器名称还作为构造函数的一部分进行定义。如果通过受保护构造函数设置默认容器名称，则该属性为只读属性。 默认容器名称还作为构造函数的一部分进行定义。如果通过受保护构造函数设置默认容器名称，则该属性为只读属性。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.MetadataWorkspace 属性

ObjectContext
.
.
::
.
MetadataWorkspace 属性
ObjectContext 类

获取对象上下文使用的元数据工作区。

此 API 不兼容 CLS。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<CLSCompliantAttribute(False)> _
Public ReadOnly Property MetadataWorkspace As MetadataWorkspace
    Get
[CLSCompliantAttribute(false)]
public MetadataWorkspace MetadataWorkspace { get; }
[CLSCompliantAttribute(false)]
public:
property MetadataWorkspace^ MetadataWorkspace {
    MetadataWorkspace^ get ();
}
[<CLSCompliantAttribute(false)>]
member MetadataWorkspace : MetadataWorkspace

属性值

类型： System.Data.Metadata.Edm MetadataWorkspace
与此 ObjectContext 关联的 MetadataWorkspace 对象。

MetadataWorkspace 类作为中心运行时 API，可用于在应用程序上下文中与 Entity Data Model (EDM) 元数据交互。有关更多信息，请参见Metadata Workspace。 MetadataWorkspace 类作为中心运行时 API，可用于在应用程序上下文中与 Entity Data Model (EDM) 元数据交互。有关更多信息，请参见Metadata Workspace。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContext ..::.ObjectStateManager 属性

ObjectContext
.
.
::
.
ObjectStateManager 属性
ObjectContext 类

获取对象上下文用于跟踪对象更改的对象状态管理器。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ObjectStateManager As ObjectStateManager
    Get
public ObjectStateManager ObjectStateManager { get; }
public:
property ObjectStateManager^ ObjectStateManager {
    ObjectStateManager^ get ();
}
member ObjectStateManager : ObjectStateManager

属性值

类型： System.Data.Objects ObjectStateManager
由此 ObjectContext 使用的 ObjectStateManager。

这些示例基于 Adventure Works Sales Model。此示例从 ObjectContext 获取 ObjectStateManager，并使用状态管理器访问上下文中的对象。 这些示例基于 Adventure Works Sales Model。此示例从 ObjectContext 获取 ObjectStateManager，并使用状态管理器访问上下文中的对象。

Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim objectStateManager As ObjectStateManager = context.ObjectStateManager
        Dim stateEntry As ObjectStateEntry = Nothing

        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Attempts to retrieve ObjectStateEntry for the given EntityKey.
        Dim isPresent As Boolean = objectStateManager.TryGetObjectStateEntry(DirectCast(order, IEntityWithKey).EntityKey, stateEntry)
        If isPresent Then
            Console.WriteLine("The entity was found")
        End If
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    Catch ex As EntityCommandExecutionException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        ObjectStateManager objectStateManager = context.ObjectStateManager;
        ObjectStateEntry stateEntry = null;

        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Attempts to retrieve ObjectStateEntry for the given EntityKey.
        bool isPresent = objectStateManager.TryGetObjectStateEntry(((IEntityWithKey)order).EntityKey, out stateEntry);
        if (isPresent)
        {
            Console.WriteLine("The entity was found");
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (EntityCommandExecutionException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

此示例对返回的 ObjectStateManager 使用 TryGetObjectStateEntry 方法基于对象的实体键获取对象。

Private Shared Sub ApplyItemUpdates(ByVal originalItem As SalesOrderDetail, ByVal updatedItem As SalesOrderDetail)
    Using context As New AdventureWorksEntities()
        context.SalesOrderDetails.Attach(updatedItem)
        ' Check if the ID is 0, if it is the item is new.
        ' In this case we need to chage the state to Added.
        If updatedItem.SalesOrderDetailID = 0 Then
            ' Because the ID is generated by the database we do not need to
            ' set updatedItem.SalesOrderDetailID.
            context.ObjectStateManager.ChangeObjectState(updatedItem, System.Data.EntityState.Added)
        Else
            ' If the SalesOrderDetailID is not 0, then the item is not new
            ' and needs to be updated. Because we already added the
            ' updated object to the context we need to apply the original values.
            ' If we attached originalItem to the context
            ' we would need to apply the current values:
            ' context.ApplyCurrentValues("SalesOrderDetails", updatedItem);
            ' Applying current or original values, changes the state
            ' of the attached object to Modified.
            context.ApplyOriginalValues("SalesOrderDetails", originalItem)
        End If
        context.SaveChanges()
    End Using
End Sub

private static void ApplyItemUpdates(SalesOrderDetail originalItem,
    SalesOrderDetail updatedItem)
{
    using (AdventureWorksEntities context =
        new AdventureWorksEntities())
    {
        context.SalesOrderDetails.Attach(updatedItem);
        // Check if the ID is 0, if it is the item is new.
        // In this case we need to chage the state to Added.
        if (updatedItem.SalesOrderDetailID == 0)
        {
            // Because the ID is generated by the database we do not need to
            // set updatedItem.SalesOrderDetailID.
            context.ObjectStateManager.ChangeObjectState(updatedItem, System.Data.EntityState.Added);
        }
        else
        {
            // If the SalesOrderDetailID is not 0, then the item is not new
            // and needs to be updated. Because we already added the
            // updated object to the context we need to apply the original values.
            // If we attached originalItem to the context
            // we would need to apply the current values:
            // context.ApplyCurrentValues("SalesOrderDetails", updatedItem);
            // Applying current or original values, changes the state
            // of the attached object to Modified.
            context.ApplyOriginalValues("SalesOrderDetails", originalItem);
        }
        context.SaveChanges();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)
How to: Apply Changes Made to a Detached Object (Entity Framework)


ObjectContext ..::.QueryProvider 属性

ObjectContext
.
.
::
.
QueryProvider 属性
ObjectContext 类

获取与此对象上下文关联的 LINQ 查询提供程序。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Friend ReadOnly Property QueryProvider As IQueryProvider
    Get
protected internal IQueryProvider QueryProvider { get; }
protected public:
property IQueryProvider^ QueryProvider {
    IQueryProvider^ get ();
}
member QueryProvider : IQueryProvider

属性值

类型： System.Linq IQueryProvider
由此对象上下文使用的 IQueryProvider 实例。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext 事件

ObjectContext 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContext 类

ObjectContext 类型公开以下成员。

名称 说明
页首

参考

ObjectContext 类
System.Data.Objects 命名空间


ObjectContext ..::.ObjectMaterialized 事件

ObjectContext
.
.
::
.
ObjectMaterialized 事件
ObjectContext 类

当使用数据源中的数据创建新的实体对象（作为查询或加载操作的一部分）时发生。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Event ObjectMaterialized As ObjectMaterializedEventHandler
public event ObjectMaterializedEventHandler ObjectMaterialized
public:
 event ObjectMaterializedEventHandler^ ObjectMaterialized {
    void add (ObjectMaterializedEventHandler^ value);
    void remove (ObjectMaterializedEventHandler^ value);
}
member ObjectMaterialized : IEvent<ObjectMaterializedEventHandler,
    ObjectMaterializedEventArgs>

在对象上设置了所有标量、复杂和引用属性之后但在加载集合之前引发此事件。如果在对象上下文中存在一个具有相同键值的对象，实体框架将不会重新创建该对象，且不会引发该事件。 在对象上设置了所有标量、复杂和引用属性之后但在加载集合之前引发此事件。如果在对象上下文中存在一个具有相同键值的对象，实体框架将不会重新创建该对象，且不会引发该事件。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间


ObjectContext ..::.SavingChanges 事件

ObjectContext
.
.
::
.
SavingChanges 事件
ObjectContext 类

在将更改保存到数据源时发生。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Event SavingChanges As EventHandler
public event EventHandler SavingChanges
public:
 event EventHandler^ SavingChanges {
    void add (EventHandler^ value);
    void remove (EventHandler^ value);
}
member SavingChanges : IEvent<EventHandler,
    EventArgs>

SavingChanges 事件在 ObjectContext 的 SaveChanges 操作启动时引发。此事件通常用于在将新值写入数据库前验证更改的对象。 SavingChanges 事件在 ObjectContext 的 SaveChanges 操作启动时引发。此事件通常用于在将新值写入数据库前验证更改的对象。

此示例基于 Adventure Works Sales Model。此示例为执行实体状态验证的 SavingChanges 事件注册处理程序。 此示例基于 Adventure Works Sales Model。此示例为执行实体状态验证的 SavingChanges 事件注册处理程序。

Public Class AdventureWorksProxy
    ' Define the object context to be provided.
    Private contextProxy As New AdventureWorksEntities()

    Public Sub New()
        ' When the object is initialized, register the
        ' handler for the SavingChanges event.
        AddHandler contextProxy.SavingChanges, AddressOf context_SavingChanges
    End Sub

    ' Method that provides an object context.
    Public ReadOnly Property Context() As AdventureWorksEntities
        Get
            Return contextProxy
        End Get
    End Property

    ' SavingChanges event handler.
    Private Sub context_SavingChanges(ByVal sender As Object, ByVal e As EventArgs)
        ' Ensure that we are passed an ObjectContext
        Dim context As ObjectContext = TryCast(sender, ObjectContext)
        If context IsNot Nothing Then

            ' Validate the state of each entity in the context
            ' before SaveChanges can succeed.
            For Each entry As ObjectStateEntry In context.ObjectStateManager.GetObjectStateEntries(EntityState.Added Or EntityState.Modified)
                ' Find an object state entry for a SalesOrderHeader object.
                If Not entry.IsRelationship AndAlso (entry.Entity.GetType() Is GetType(SalesOrderHeader)) Then
                    Dim orderToCheck As SalesOrderHeader = TryCast(entry.Entity, SalesOrderHeader)

                    ' Call a helper method that performs string checking
                    ' on the Comment property.
                    Dim textNotAllowed As String = Validator.CheckStringForLanguage(orderToCheck.Comment)

                    ' If the validation method returns a problem string, raise an error.
                    If textNotAllowed <> String.Empty Then
                        Throw New ArgumentException(String.Format("Changes cannot be " & _
                                                                    "saved because the {0} '{1}' object contains a " & _
                                                                    "string that is not allowed in the property '{2}'.", _
                                                                    entry.State, "SalesOrderHeader", "Comment"))
                    End If
                End If
            Next
        End If
    End Sub
End Class

public class AdventureWorksProxy
{
    // Define the object context to be provided.
    private AdventureWorksEntities contextProxy =
        new AdventureWorksEntities();

    public AdventureWorksProxy()
    {
        // When the object is initialized, register the
        // handler for the SavingChanges event.
        contextProxy.SavingChanges
            += new EventHandler(context_SavingChanges);
    }

    // Method that provides an object context.
    public AdventureWorksEntities Context
    {
        get
        {
            return contextProxy;
        }
    }

    // SavingChanges event handler.
    private void context_SavingChanges(object sender, EventArgs e)
    {
        // Ensure that we are passed an ObjectContext
        ObjectContext context = sender as ObjectContext;
        if (context != null)
        {

            // Validate the state of each entity in the context
            // before SaveChanges can succeed.
            foreach (ObjectStateEntry entry in
                context.ObjectStateManager.GetObjectStateEntries(
                EntityState.Added | EntityState.Modified))
            {
                // Find an object state entry for a SalesOrderHeader object.
                if (!entry.IsRelationship && (entry.Entity.GetType() == typeof(SalesOrderHeader)))
                {
                    SalesOrderHeader orderToCheck = entry.Entity as SalesOrderHeader;

                    // Call a helper method that performs string checking
                    // on the Comment property.
                    string textNotAllowed = Validator.CheckStringForLanguage(
                        orderToCheck.Comment);

                    // If the validation method returns a problem string, raise an error.
                    if (textNotAllowed != string.Empty)
                    {
                        throw new ArgumentException(String.Format("Changes cannot be "
                            + "saved because the {0} '{1}' object contains a "
                            + "string that is not allowed in the property '{2}'.",
                            entry.State, "SalesOrderHeader", "Comment"));
                    }
                }
            }
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContext 类
ObjectContext 成员
System.Data.Objects 命名空间

其他资源

Working with Objects (Entity Framework)
Object Services (Entity Framework)


ObjectContextOptions 类

ObjectContextOptions 类
成员

定义影响 ObjectContext 的行为的选项。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class ObjectContextOptions
public sealed class ObjectContextOptions
public ref class ObjectContextOptions sealed
[<SealedAttribute>]
type ObjectContextOptions =  class end

System.Data.Objects System.Data.Objects..::.ObjectContextOptionsObjectContextOptions
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContextOptions 成员
System.Data.Objects 命名空间


ObjectContextOptions 成员

ObjectContextOptions 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContextOptions 类

定义影响 ObjectContext 的行为的选项。

ObjectContextOptions 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectContextOptions 类
System.Data.Objects 命名空间


ObjectContextOptions 方法

ObjectContextOptions 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContextOptions 类

ObjectContextOptions 类型公开以下成员。

名称 说明
页首

参考

ObjectContextOptions 类
System.Data.Objects 命名空间


ObjectContextOptions 属性

ObjectContextOptions 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectContextOptions 类

ObjectContextOptions 类型公开以下成员。

名称 说明
页首

参考

ObjectContextOptions 类
System.Data.Objects 命名空间


ObjectContextOptions ..::.LazyLoadingEnabled 属性

ObjectContextOptions
.
.
::
.
LazyLoadingEnabled 属性
ObjectContextOptions 类

获取或设置一个布尔值，该值确定在访问导航属性时是否自动加载相关对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property LazyLoadingEnabled As Boolean
    Get
    Set
public bool LazyLoadingEnabled { get; set; }
public:
property bool LazyLoadingEnabled {
    bool get ();
    void set (bool value);
}
member LazyLoadingEnabled : bool with get, set

属性值

类型： System Boolean
一个 Boolean 值，若启用延迟加载，则此值为 true；否则为 false。

LazyLoadingEnabled()()() 属性用来设置相关对象的惰性加载行为。LazyLoadingEnabled()()() 的默认值为 false。使用这种加载时，请注意如果对象已经不在 ObjectContext 中，您访问的每个导航属性将导致对数据源执行单独的查询。有关更多信息，请参见Load Related Objects (Entity Framework)。 LazyLoadingEnabled()()() 属性用来设置相关对象的惰性加载行为。LazyLoadingEnabled()()() 的默认值为 false。使用这种加载时，请注意如果对象已经不在 ObjectContext 中，您访问的每个导航属性将导致对数据源执行单独的查询。有关更多信息，请参见Load Related Objects (Entity Framework)。 LazyLoadingEnabled()()() 属性用来设置相关对象的惰性加载行为。LazyLoadingEnabled()()() 的默认值为 false。使用这种加载时，请注意如果对象已经不在 ObjectContext 中，您访问的每个导航属性将导致对数据源执行单独的查询。有关更多信息，请参见Load Related Objects (Entity Framework)。 LazyLoadingEnabled()()() 属性用来设置相关对象的惰性加载行为。LazyLoadingEnabled()()() 的默认值为 false。使用这种加载时，请注意如果对象已经不在 ObjectContext 中，您访问的每个导航属性将导致对数据源执行单独的查询。有关更多信息，请参见Load Related Objects (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContextOptions 类
ObjectContextOptions 成员
System.Data.Objects 命名空间

其他资源

Load Related Objects (Entity Framework)


ObjectContextOptions ..::.ProxyCreationEnabled 属性

ObjectContextOptions
.
.
::
.
ProxyCreationEnabled 属性
ObjectContextOptions 类

获取或设置一个布尔值，该值确定是否为持久性未知的自定义数据类创建代理实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property ProxyCreationEnabled As Boolean
    Get
    Set
public bool ProxyCreationEnabled { get; set; }
public:
property bool ProxyCreationEnabled {
    bool get ();
    void set (bool value);
}
member ProxyCreationEnabled : bool with get, set

属性值

类型： System Boolean
一个 Boolean 值，若创建代理，则此值为 true；否则为 false。默认值为 true。 一个 Boolean 值，若创建代理，则此值为 true；否则为 false。默认值为 true。

此标志设置为 true 时，Entity Framework 会尝试为 POCO 实体创建代理。默认情况下，ProxyCreationEnabled 标志设置为 true。 此标志设置为 true 时，Entity Framework 会尝试为 POCO 实体创建代理。默认情况下，ProxyCreationEnabled 标志设置为 true。

有关更多信息，请参见Working with POCO。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContextOptions 类
ObjectContextOptions 成员
System.Data.Objects 命名空间

其他资源

Working with POCO


ObjectContextOptions ..::.UseLegacyPreserveChangesBehavior 属性

ObjectContextOptions
.
.
::
.
UseLegacyPreserveChangesBehavior 属性
ObjectContextOptions 类

获取或设置一个 Boolean 值，该值确定是否使用旧的 PreserveChanges 行为。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property UseLegacyPreserveChangesBehavior As Boolean
    Get
    Set
public bool UseLegacyPreserveChangesBehavior { get; set; }
public:
property bool UseLegacyPreserveChangesBehavior {
    bool get ();
    void set (bool value);
}
member UseLegacyPreserveChangesBehavior : bool with get, set

属性值

类型： System Boolean
如果应使用旧的 PreserveChanges 行为，则为 true；否则为 false。

当使用 PreserveChanges 选项将对象加载到对象上下文中时，.NET Framework 版本 4 与 .NET Framework 版本 3.5 SP1 的行为存在差异。有关更多信息，请参见 PreserveChanges 和 Identity Resolution, State Management, and Change Tracking (Entity Framework)。 当使用 PreserveChanges 选项将对象加载到对象上下文中时，.NET Framework 版本 4 与 .NET Framework 版本 3.5 SP1 的行为存在差异。有关更多信息，请参见 PreserveChanges 和 Identity Resolution, State Management, and Change Tracking (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectContextOptions 类
ObjectContextOptions 成员
System.Data.Objects 命名空间

其他资源

Identity Resolution, State Management, and Change Tracking (Entity Framework)


ObjectMaterializedEventArgs 类

ObjectMaterializedEventArgs 类
成员

包含 ObjectMaterialized 事件的数据。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Class ObjectMaterializedEventArgs _
    Inherits EventArgs
public class ObjectMaterializedEventArgs : EventArgs
public ref class ObjectMaterializedEventArgs : public EventArgs
type ObjectMaterializedEventArgs =
    class
        inherit EventArgs
    end

System.Data.Objects System.Data.Objects..::.ObjectMaterializedEventArgsObjectMaterializedEventArgs
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializedEventArgs 成员
System.Data.Objects 命名空间


ObjectMaterializedEventArgs 成员

ObjectMaterializedEventArgs 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectMaterializedEventArgs 类

包含 ObjectMaterialized 事件的数据。

ObjectMaterializedEventArgs 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectMaterializedEventArgs 类
System.Data.Objects 命名空间


ObjectMaterializedEventArgs 方法

ObjectMaterializedEventArgs 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectMaterializedEventArgs 类

ObjectMaterializedEventArgs 类型公开以下成员。

名称 说明
页首

参考

ObjectMaterializedEventArgs 类
System.Data.Objects 命名空间


ObjectMaterializedEventArgs 属性

ObjectMaterializedEventArgs 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectMaterializedEventArgs 类

ObjectMaterializedEventArgs 类型公开以下成员。

名称 说明
页首

参考

ObjectMaterializedEventArgs 类
System.Data.Objects 命名空间


ObjectMaterializedEventArgs ..::.Entity 属性

ObjectMaterializedEventArgs
.
.
::
.
Entity 属性
ObjectMaterializedEventArgs 类

获取已创建的实体对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Entity As Object
    Get
public Object Entity { get; }
public:
property Object^ Entity {
    Object^ get ();
}
member Entity : Object

属性值

类型： System Object
已创建的实体对象。

如果在上下文中存在一个具有相同键值的对象，Entity Framework 将不会重新创建该对象，且不会引发 ObjectMaterialized 事件。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectMaterializedEventArgs 类
ObjectMaterializedEventArgs 成员
System.Data.Objects 命名空间


ObjectMaterializedEventHandler 委托

ObjectMaterializedEventHandler 委托

表示将处理 ObjectContext 的 ObjectMaterialized 事件的方法。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Delegate Sub ObjectMaterializedEventHandler ( _
    sender As Object, _
    e As ObjectMaterializedEventArgs _
)
public delegate void ObjectMaterializedEventHandler(
    Object sender,
    ObjectMaterializedEventArgs e
)
public delegate void ObjectMaterializedEventHandler(
    Object^ sender,
    ObjectMaterializedEventArgs^ e
)
type ObjectMaterializedEventHandler =
    delegate of
        sender:Object *
        e:ObjectMaterializedEventArgs -> unit

参数

sender
类型： System Object
触发事件的 ObjectContext 实例。
e
类型： System.Data.Objects ObjectMaterializedEventArgs
包含事件数据的 ObjectMaterializedEventArgs 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Objects 命名空间


ObjectParameter 类

ObjectParameter 类
成员

表示传递给对象查询的查询参数。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class ObjectParameter
public sealed class ObjectParameter
public ref class ObjectParameter sealed
[<SealedAttribute>]
type ObjectParameter =  class end

表示传递给 ObjectQuery<(Of <(T>)>) 或查询生成器方法的查询参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 表示传递给 ObjectQuery<(Of <(T>)>) 或查询生成器方法的查询参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。

对象参数由名称、类型和值组成。

此类不能继承。有关更多信息，请参见 ObjectParameterCollection。 此类不能继承。有关更多信息，请参见 ObjectParameterCollection。

本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts" & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        ' Iterate through the ObjectParameterCollection.
        For Each result As ObjectParameter In objectParameterCollection
            Console.WriteLine("{0} {1} {2}", result.Name, result.Value, result.ParameterType)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln
            AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        // Iterate through the ObjectParameterCollection.
        foreach (ObjectParameter result in objectParameterCollection)
        {
            Console.WriteLine("{0} {1} {2}", result.Name,
                result.Value,
                result.ParameterType);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

System.Data.Objects System.Data.Objects..::.ObjectParameterObjectParameter
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameter 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Object Queries (Entity Framework)
Query Builder Methods (Entity Framework)
Querying Data as Objects (Entity Framework)


ObjectParameter 成员

ObjectParameter 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectParameter 类

表示传递给对象查询的查询参数。

ObjectParameter 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectParameter 类
System.Data.Objects 命名空间


ObjectParameter 构造函数

ObjectParameter 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectParameter 类

初始化 ObjectParameter 类的新实例。

名称 说明
页首

参考

ObjectParameter 类
ObjectParameter 成员
System.Data.Objects 命名空间


ObjectParameter 构造函数 (String, Object)

ObjectParameter 构造函数 (String, Object)
ObjectParameter 类

用指定的名称和值初始化 ObjectParameter 类的新实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    name As String, _
    value As Object _
)
public ObjectParameter(
    string name,
    Object value
)
public:
ObjectParameter(
    String^ name,
    Object^ value
)
new :
        name:string *
        value:Object -> ObjectParameter

参数

name
类型： System String
参数名。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。表达式的第一个字符必须为字母。表达式中的所有后续字符都必须为字母、数字或下划线 (_) 字符。 参数名。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。表达式的第一个字符必须为字母。表达式中的所有后续字符都必须为字母、数字或下划线 (_) 字符。 参数名。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。表达式的第一个字符必须为字母。表达式中的所有后续字符都必须为字母、数字或下划线 (_) 字符。 参数名。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。表达式的第一个字符必须为字母。表达式中的所有后续字符都必须为字母、数字或下划线 (_) 字符。
value
类型： System Object
参数的初始值（以及该值的性质所确定的类型）。
异常 | 条件
ArgumentNullException | 任一参数的值为 null 时发生。
ArgumentOutOfRangeException | name 参数的值无效时发生。参数名称必须以字母开头，并且只能包含字母、数字和下划线。 name 参数的值无效时发生。参数名称必须以字母开头，并且只能包含字母、数字和下划线。

此构造函数使用指定的名称和值创建一个参数。根据参数的值推断其类型。 此构造函数使用指定的名称和值创建一个参数。根据参数的值推断其类型。

添加到 ObjectParameterCollection 后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 添加到 ObjectParameterCollection 后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 添加到 ObjectParameterCollection 后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 添加到 ObjectParameterCollection 后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。

本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts" & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        ' Iterate through the ObjectParameterCollection.
        For Each result As ObjectParameter In objectParameterCollection
            Console.WriteLine("{0} {1} {2}", result.Name, result.Value, result.ParameterType)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln
            AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        // Iterate through the ObjectParameterCollection.
        foreach (ObjectParameter result in objectParameterCollection)
        {
            Console.WriteLine("{0} {1} {2}", result.Name,
                result.Value,
                result.ParameterType);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameter 类
ObjectParameter 成员
ObjectParameter 重载
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)


ObjectParameter 构造函数 (String, Type)

ObjectParameter 构造函数 (String, Type)
ObjectParameter 类

用指定的名称和类型初始化 ObjectParameter 类的新实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    name As String, _
    type As Type _
)
public ObjectParameter(
    string name,
    Type type
)
public:
ObjectParameter(
    String^ name,
    Type^ type
)
new :
        name:string *
        type:Type -> ObjectParameter

参数

name
类型： System String
参数名。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。表达式的第一个字符必须为字母。表达式中的所有后续字符都必须为字母、数字或下划线 (_) 字符。 参数名。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。表达式的第一个字符必须为字母。表达式中的所有后续字符都必须为字母、数字或下划线 (_) 字符。 参数名。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。表达式的第一个字符必须为字母。表达式中的所有后续字符都必须为字母、数字或下划线 (_) 字符。 参数名。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。表达式的第一个字符必须为字母。表达式中的所有后续字符都必须为字母、数字或下划线 (_) 字符。
type
类型： System Type
参数的公共语言运行时 (CLR) 类型。
异常 | 条件
ArgumentNullException | 任一参数的值为 null 时发生。
ArgumentOutOfRangeException | name 参数的值无效时发生。参数名称必须以字母开头，并且只能包含字母、数字和下划线。 name 参数的值无效时发生。参数名称必须以字母开头，并且只能包含字母、数字和下划线。

实例化后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行设置或更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 实例化后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行设置或更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 实例化后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行设置或更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 实例化后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行设置或更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameter 类
ObjectParameter 成员
ObjectParameter 重载
System.Data.Objects 命名空间


ObjectParameter 方法

ObjectParameter 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectParameter 类

ObjectParameter 类型公开以下成员。

名称 说明
页首

参考

ObjectParameter 类
System.Data.Objects 命名空间


ObjectParameter 属性

ObjectParameter 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectParameter 类

ObjectParameter 类型公开以下成员。

名称 说明
页首

参考

ObjectParameter 类
System.Data.Objects 命名空间


ObjectParameter ..::.Name 属性

ObjectParameter
.
.
::
.
Name 属性
ObjectParameter 类

获取参数名称，该名称只能通过构造函数来设置。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Name As String
    Get
public string Name { get; }
public:
property String^ Name {
    String^ get ();
}
member Name : string

属性值

类型： System String
参数名称，该名称只能通过构造函数来设置。

实例化后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行设置或更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 实例化后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行设置或更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 实例化后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行设置或更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 实例化后，该参数名称不能进行更改。该参数值可以通过 Value 属性进行设置或更改。编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。

本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts" & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        ' Iterate through the ObjectParameterCollection.
        For Each result As ObjectParameter In objectParameterCollection
            Console.WriteLine("{0} {1} {2}", result.Name, result.Value, result.ParameterType)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln
            AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        // Iterate through the ObjectParameterCollection.
        foreach (ObjectParameter result in objectParameterCollection)
        {
            Console.WriteLine("{0} {1} {2}", result.Name,
                result.Value,
                result.ParameterType);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameter 类
ObjectParameter 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)


ObjectParameter ..::.ParameterType 属性

ObjectParameter
.
.
::
.
ParameterType 属性
ObjectParameter 类

获取参数类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ParameterType As Type
    Get
public Type ParameterType { get; }
public:
property Type^ ParameterType {
    Type^ get ();
}
member ParameterType : Type

属性值

类型： System Type
参数的 Type。

参数类型只能通过构造函数进行设置。

本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts" & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        ' Iterate through the ObjectParameterCollection.
        For Each result As ObjectParameter In objectParameterCollection
            Console.WriteLine("{0} {1} {2}", result.Name, result.Value, result.ParameterType)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln
            AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        // Iterate through the ObjectParameterCollection.
        foreach (ObjectParameter result in objectParameterCollection)
        {
            Console.WriteLine("{0} {1} {2}", result.Name,
                result.Value,
                result.ParameterType);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameter 类
ObjectParameter 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)


ObjectParameter ..::.Value 属性

ObjectParameter
.
.
::
.
Value 属性
ObjectParameter 类

获取或设置参数值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property Value As Object
    Get
    Set
public Object Value { get; set; }
public:
property Object^ Value {
    Object^ get ();
    void set (Object^ value);
}
member Value : Object with get, set

属性值

类型： System Object
参数值。

编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。 编译查询后，该值不能进行更改。有关更多信息，请参见Query Builder Methods (Entity Framework)。

如果新值与构造函数中声明的类型不兼容，可能引发运行时异常。提供程序必须确定该值是否与声明的类型兼容。例如，如果初始类型为 Int32，而新值为 Guid，则可能接收到异常。 如果新值与构造函数中声明的类型不兼容，可能引发运行时异常。提供程序必须确定该值是否与声明的类型兼容。例如，如果初始类型为 Int32，而新值为 Guid，则可能接收到异常。 如果新值与构造函数中声明的类型不兼容，可能引发运行时异常。提供程序必须确定该值是否与声明的类型兼容。例如，如果初始类型为 Int32，而新值为 Guid，则可能接收到异常。

本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts" & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        ' Iterate through the ObjectParameterCollection.
        For Each result As ObjectParameter In objectParameterCollection
            Console.WriteLine("{0} {1} {2}", result.Name, result.Value, result.ParameterType)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln
            AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        // Iterate through the ObjectParameterCollection.
        foreach (ObjectParameter result in objectParameterCollection)
        {
            Console.WriteLine("{0} {1} {2}", result.Name,
                result.Value,
                result.ParameterType);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameter 类
ObjectParameter 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)


ObjectParameterCollection 类

ObjectParameterCollection 类
成员

将查询参数表示为 ObjectQuery<(Of <(T>)>) 中定义的 ObjectParameter 对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class ObjectParameterCollection _
    Implements ICollection(Of ObjectParameter), IEnumerable(Of ObjectParameter),  _
    IEnumerable
public sealed class ObjectParameterCollection : ICollection<ObjectParameter>,
    IEnumerable<ObjectParameter>, IEnumerable
public ref class ObjectParameterCollection sealed : ICollection<ObjectParameter^>,
    IEnumerable<ObjectParameter^>, IEnumerable
[<SealedAttribute>]
type ObjectParameterCollection =
    class
        interface ICollection<ObjectParameter>
        interface IEnumerable<ObjectParameter>
        interface IEnumerable
    end

将查询参数表示为 ObjectQuery<(Of <(T>)>) 中定义的 ObjectParameter 对象。

此类不能继承。

传递给查询生成器方法的参数由序列中 ObjectQuery<(Of <(T>)>) 的后续实例聚合。可以使用返回 ObjectParameterCollection 的 Parameters 属性访问这些参数。添加参数后，只要还没有编译或执行查询，就可以从集合中移除参数，并且可以清除集合。不能更改参数名称，但可以随时对值进行更改。 传递给查询生成器方法的参数由序列中 ObjectQuery<(Of <(T>)>) 的后续实例聚合。可以使用返回 ObjectParameterCollection 的 Parameters 属性访问这些参数。添加参数后，只要还没有编译或执行查询，就可以从集合中移除参数，并且可以清除集合。不能更改参数名称，但可以随时对值进行更改。 传递给查询生成器方法的参数由序列中 ObjectQuery<(Of <(T>)>) 的后续实例聚合。可以使用返回 ObjectParameterCollection 的 Parameters 属性访问这些参数。添加参数后，只要还没有编译或执行查询，就可以从集合中移除参数，并且可以清除集合。不能更改参数名称，但可以随时对值进行更改。 传递给查询生成器方法的参数由序列中 ObjectQuery<(Of <(T>)>) 的后续实例聚合。可以使用返回 ObjectParameterCollection 的 Parameters 属性访问这些参数。添加参数后，只要还没有编译或执行查询，就可以从集合中移除参数，并且可以清除集合。不能更改参数名称，但可以随时对值进行更改。

参数在 ObjectParameterCollection 中必须是唯一的。集合中不能有两个具有相同名称的参数。 参数在 ObjectParameterCollection 中必须是唯一的。集合中不能有两个具有相同名称的参数。

使用组合方法（如 Union、UnionAll、Intersect 和 Except）时，将对参数进行合并。参数集不兼容或不完整时会引发异常。有关更多信息，请参见Query Builder Methods (Entity Framework)。 使用组合方法（如 Union、UnionAll、Intersect 和 Except）时，将对参数进行合并。参数集不兼容或不完整时会引发异常。有关更多信息，请参见Query Builder Methods (Entity Framework)。 使用组合方法（如 Union、UnionAll、Intersect 和 Except）时，将对参数进行合并。参数集不兼容或不完整时会引发异常。有关更多信息，请参见Query Builder Methods (Entity Framework)。

本主题中的示例基于 Adventure Works Sales Model。该示例将新参数添加到集合，获取集合中的参数个数。然后，该示例循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例将新参数添加到集合，获取集合中的参数个数。然后，该示例循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例将新参数添加到集合，获取集合中的参数个数。然后，该示例循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts " & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        Console.WriteLine("Count is {0}.", objectParameterCollection.Count)

        ' Iterate through the ObjectParameterCollection collection.
        For Each result As ObjectParameter In objectParameterCollection
            Console.WriteLine("{0} {1} {2}", result.Name, result.Value, result.ParameterType)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        Console.WriteLine("Count is {0}.", objectParameterCollection.Count);

        // Iterate through the ObjectParameterCollection collection.
        foreach (ObjectParameter result in objectParameterCollection)
        {
            Console.WriteLine("{0} {1} {2}", result.Name,
                result.Value,
                result.ParameterType);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

System.Data.Objects System.Data.Objects..::.ObjectParameterCollectionObjectParameterCollection
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)


ObjectParameterCollection 成员

ObjectParameterCollection 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectParameterCollection 类

将查询参数表示为 ObjectQuery<(Of <(T>)>) 中定义的 ObjectParameter 对象。

ObjectParameterCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectParameterCollection 类
System.Data.Objects 命名空间


ObjectParameterCollection 方法

ObjectParameterCollection 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectParameterCollection 类

ObjectParameterCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectParameterCollection 类
System.Data.Objects 命名空间


ObjectParameterCollection ..::.Add 方法

ObjectParameterCollection
.
.
::
.
Add 方法
ObjectParameterCollection 类

将指定的 ObjectParameter 添加到集合。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Add ( _
    parameter As ObjectParameter _
)
public void Add(
    ObjectParameter parameter
)
public:
virtual void Add(
    ObjectParameter^ parameter
) sealed
abstract Add :
        parameter:ObjectParameter -> unit
override Add :
        parameter:ObjectParameter -> unit

参数

parameter
类型： System.Data.Objects ObjectParameter
要添加到集合的参数。

实现

异常 | 条件
ArgumentNullException | parameter 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | parameter 实参已存在于集合中。此行为与允许重复实体的大多数集合的行为不同。 parameter 实参已存在于集合中。此行为与允许重复实体的大多数集合的行为不同。 - 或 - 与 parameter 实参具有相同名称的另一个形参已存在于集合中。请注意，查找是不区分大小写的。此行为与大多数集合的行为不同，更类似于 Dictionary 的行为。 与 parameter 实参具有相同名称的另一个形参已存在于集合中。请注意，查找是不区分大小写的。此行为与大多数集合的行为不同，更类似于 Dictionary 的行为。 与 parameter 实参具有相同名称的另一个形参已存在于集合中。请注意，查找是不区分大小写的。此行为与大多数集合的行为不同，更类似于 Dictionary 的行为。
ArgumentOutOfRangeException | parameter 的类型无效。

添加参数后，只要还没有编译或执行查询，就可以从集合中移除参数，并且可以清除集合。不能更改参数名称，但可以随时对值进行更改。 添加参数后，只要还没有编译或执行查询，就可以从集合中移除参数，并且可以清除集合。不能更改参数名称，但可以随时对值进行更改。

参数在 ObjectParameterCollection 中必须是唯一的。集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 参数在 ObjectParameterCollection 中必须是唯一的。集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 参数在 ObjectParameterCollection 中必须是唯一的。集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。

本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例向集合添加新参数。它循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts " & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        Console.WriteLine("Count is {0}.", objectParameterCollection.Count)

        ' Iterate through the ObjectParameterCollection collection.
        For Each result As ObjectParameter In objectParameterCollection
            Console.WriteLine("{0} {1} {2}", result.Name, result.Value, result.ParameterType)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        Console.WriteLine("Count is {0}.", objectParameterCollection.Count);

        // Iterate through the ObjectParameterCollection collection.
        foreach (ObjectParameter result in objectParameterCollection)
        {
            Console.WriteLine("{0} {1} {2}", result.Name,
                result.Value,
                result.ParameterType);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)


ObjectParameterCollection ..::.Clear 方法

ObjectParameterCollection
.
.
::
.
Clear 方法
ObjectParameterCollection 类

删除集合中的所有 ObjectParameter 实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Clear
public void Clear()
public:
virtual void Clear() sealed
abstract Clear : unit -> unit
override Clear : unit -> unit

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间


ObjectParameterCollection ..::.Contains 方法

ObjectParameterCollection
.
.
::
.
Contains 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectParameterCollection 类

按引用检查集合中是否存在指定的 ObjectParameter。

名称 说明
页首

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间


ObjectParameterCollection ..::.Contains 方法 (ObjectParameter)

ObjectParameterCollection
.
.
::
.
Contains 方法 (ObjectParameter)
ObjectParameterCollection 类

按引用检查集合中是否存在指定的 ObjectParameter。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Contains ( _
    parameter As ObjectParameter _
) As Boolean
public bool Contains(
    ObjectParameter parameter
)
public:
virtual bool Contains(
    ObjectParameter^ parameter
) sealed
abstract Contains :
        parameter:ObjectParameter -> bool
override Contains :
        parameter:ObjectParameter -> bool

参数

parameter
类型： System.Data.Objects ObjectParameter
要在集合中查找的 ObjectParameter。

返回值

类型： System Boolean
如果在集合中找到参数对象，则返回 true；否则返回 false。

实现

异常 | 条件
ArgumentNullException | parameter 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

这是基于引用的检查。即，如果指定的 ObjectParameter 包含的名称与集合中某个参数对象相同，则仅当其是同一对象时，此方法才返回 true。 这是基于引用的检查。即，如果指定的 ObjectParameter 包含的名称与集合中某个参数对象相同，则仅当其是同一对象时，此方法才返回 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
Contains 重载
System.Data.Objects 命名空间


ObjectParameterCollection ..::.Contains 方法 (String)

ObjectParameterCollection
.
.
::
.
Contains 方法 (String)
ObjectParameterCollection 类

确定集合中是否存在具有指定名称的 ObjectParameter。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Contains ( _
    name As String _
) As Boolean
public bool Contains(
    string name
)
public:
bool Contains(
    String^ name
)
member Contains :
        name:string -> bool

参数

name
类型： System String
要在集合中查找的参数的名称。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。 要在集合中查找的参数的名称。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。

返回值

类型： System Boolean
如果在集合中找到具有指定名称的参数，则返回 true；否则返回 false。
异常 | 条件
ArgumentNullException | name 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

本主题中的示例基于 Adventure Works Sales Model。该示例使用 Contains 方法确定集合中是否存在指定参数。 本主题中的示例基于 Adventure Works Sales Model。该示例使用 Contains 方法确定集合中是否存在指定参数。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts " & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        If objectParameterCollection.Contains("ln") Then
            Console.WriteLine("ln is here")
        Else
            Console.WriteLine("ln is not here")
        End If
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        if (objectParameterCollection.Contains("ln"))
            Console.WriteLine("ln is here");
        else
            Console.WriteLine("ln is not here");
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
Contains 重载
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)


ObjectParameterCollection ..::.CopyTo 方法

ObjectParameterCollection
.
.
::
.
CopyTo 方法
ObjectParameterCollection 类

允许将集合中的参数复制到所提供的数组中（从指定索引处的对象开始）。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub CopyTo ( _
    array As ObjectParameter(), _
    index As Integer _
)
public void CopyTo(
    ObjectParameter[] array,
    int index
)
public:
virtual void CopyTo(
    array<ObjectParameter^>^ array,
    int index
) sealed
abstract CopyTo :
        array:ObjectParameter[] *
        index:int -> unit
override CopyTo :
        array:ObjectParameter[] *
        index:int -> unit

参数

array
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

要将参数复制到其中的数组。
index
类型： System Int32
数组中从其位置开始复制参数的索引。

实现

本主题中的示例基于 Adventure Works Sales Model。该示例将参数复制到指定数组中。 本主题中的示例基于 Adventure Works Sales Model。该示例将参数复制到指定数组中。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts " & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters
        Dim objectParameterArray As ObjectParameter() = New ObjectParameter(objectParameterCollection.Count - 1) {}

        objectParameterCollection.CopyTo(objectParameterArray, 0)

        ' Iterate through the ObjectParameter array.
        For i As Integer = 0 To objectParameterArray.Length - 1
            Console.WriteLine("Name: {0} Type: {1} Value: {2}", _
                              objectParameterArray(i).Name, objectParameterArray(i).ParameterType, objectParameterArray(i).Value)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln
            AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;
        ObjectParameter[] objectParameterArray =
            new ObjectParameter[objectParameterCollection.Count];

        objectParameterCollection.CopyTo(objectParameterArray, 0);

        // Iterate through the ObjectParameter array.
        for (int i = 0; i < objectParameterArray.Length; i++)
        {
            Console.WriteLine("Name: {0} Type: {1} Value: {2}",
                objectParameterArray[i].Name,
                objectParameterArray[i].ParameterType,
                objectParameterArray[i].Value);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)


ObjectParameterCollection ..::.IEnumerable <(Of <(ObjectParameter >)>) ..::.GetEnumerator 方法

ObjectParameterCollection
.
.
::
.
IEnumerable
<
(Of
<
(
ObjectParameter
>
)
>
)
.
.
::
.
GetEnumerator 方法
ObjectParameterCollection 类

返回集合的类型化枚举器。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Function GetEnumerator As IEnumerator(Of ObjectParameter)
    Implements IEnumerable(Of ObjectParameter).GetEnumerator
IEnumerator<ObjectParameter> IEnumerable<ObjectParameter>.GetEnumerator()
private:
virtual IEnumerator<ObjectParameter^>^ GetEnumerator() sealed = IEnumerable<ObjectParameter^>::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator<ObjectParameter>
private override GetEnumerator : unit -> IEnumerator<ObjectParameter>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
ObjectParameter
>
)
>
)

类型为 ObjectParameter 的 IEnumerator<(Of <(T>)>)。

实现

返回一个 IEnumerator<(Of <(T>)>) 实例。该枚举数实例允许循环访问和遍历集合。 返回一个 IEnumerator<(Of <(T>)>) 实例。该枚举数实例允许循环访问和遍历集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间


ObjectParameterCollection ..::.IEnumerable ..::.GetEnumerator 方法

ObjectParameterCollection
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
ObjectParameterCollection 类

返回集合的非类型化枚举器。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个 IEnumerator 实例。

实现

返回集合上的非类型化枚举器。这样可以循环访问或遍历集合。 返回集合上的非类型化枚举器。这样可以循环访问或遍历集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间


ObjectParameterCollection ..::.Remove 方法

ObjectParameterCollection
.
.
::
.
Remove 方法
ObjectParameterCollection 类

按引用从集合中移除 ObjectParameter 的实例（如果集合中存在该实例）。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Remove ( _
    parameter As ObjectParameter _
) As Boolean
public bool Remove(
    ObjectParameter parameter
)
public:
virtual bool Remove(
    ObjectParameter^ parameter
) sealed
abstract Remove :
        parameter:ObjectParameter -> bool
override Remove :
        parameter:ObjectParameter -> bool

参数

parameter
类型： System.Data.Objects ObjectParameter

返回值

类型： System Boolean
如果在集合中找到并移除了参数对象，则返回 true；否则返回 false。

实现

异常 | 条件
ArgumentNullException | parameter 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

这是基于引用的比较。也就是说，如果指定的查询参数对象包含与集合中的参数对象相同的名称，只有在两个参数对象是同一个对象时才移除集合中的参数。若要按名称移除对象，请先使用索引器检索参数实例，然后使用此方法移除该实例。 这是基于引用的比较。也就是说，如果指定的查询参数对象包含与集合中的参数对象相同的名称，只有在两个参数对象是同一个对象时才移除集合中的参数。若要按名称移除对象，请先使用索引器检索参数实例，然后使用此方法移除该实例。 这是基于引用的比较。也就是说，如果指定的查询参数对象包含与集合中的参数对象相同的名称，只有在两个参数对象是同一个对象时才移除集合中的参数。若要按名称移除对象，请先使用索引器检索参数实例，然后使用此方法移除该实例。

本主题中的示例基于 Adventure Works Sales Model。该示例将两个参数添加到集合，然后移除这些参数。 本主题中的示例基于 Adventure Works Sales Model。该示例将两个参数添加到集合，然后移除这些参数。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts " & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the ObjectQuery's Parameters collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters
        Console.WriteLine("Count before Remove is called: {0}", objectParameterCollection.Count)

        Dim objectParameter As ObjectParameter = objectParameterCollection("ln")

        ' Remove the specified parameter from the collection.
        objectParameterCollection.Remove(objectParameter)
        Console.WriteLine("Count after Remove is called: {0}", objectParameterCollection.Count)
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the ObjectQuery's Parameters collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;
        Console.WriteLine("Count before Remove is called: {0}",
            objectParameterCollection.Count);

        ObjectParameter objectParameter = objectParameterCollection["ln"];

        // Remove the specified parameter from the collection.
        objectParameterCollection.Remove(objectParameter);
        Console.WriteLine("Count after Remove is called: {0}",
            objectParameterCollection.Count);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)


ObjectParameterCollection 属性

ObjectParameterCollection 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectParameterCollection 类

ObjectParameterCollection 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectParameterCollection 类
System.Data.Objects 命名空间


ObjectParameterCollection ..::.Count 属性

ObjectParameterCollection
.
.
::
.
Count 属性
ObjectParameterCollection 类

获取集合中当前存在的参数的数目。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Count As Integer
    Get
public int Count { get; }
public:
virtual property int Count {
    int get () sealed;
}
abstract Count : int
override Count : int

属性值

类型： System Int32
集合中当前存在的 ObjectParameter 对象的数量。

实现

本主题中的示例基于 Adventure Works Sales Model。该示例将新参数添加到集合，获取集合中的参数个数。然后，该示例循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例将新参数添加到集合，获取集合中的参数个数。然后，该示例循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 本主题中的示例基于 Adventure Works Sales Model。该示例将新参数添加到集合，获取集合中的参数个数。然后，该示例循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts " & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        Console.WriteLine("Count is {0}.", objectParameterCollection.Count)

        ' Iterate through the ObjectParameterCollection collection.
        For Each result As ObjectParameter In objectParameterCollection
            Console.WriteLine("{0} {1} {2}", result.Name, result.Value, result.ParameterType)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        Console.WriteLine("Count is {0}.", objectParameterCollection.Count);

        // Iterate through the ObjectParameterCollection collection.
        foreach (ObjectParameter result in objectParameterCollection)
        {
            Console.WriteLine("{0} {1} {2}", result.Name,
                result.Value,
                result.ParameterType);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)


ObjectParameterCollection ..::.ICollection <(Of <(ObjectParameter >)>) ..::.IsReadOnly 属性

ObjectParameterCollection
.
.
::
.
ICollection
<
(Of
<
(
ObjectParameter
>
)
>
)
.
.
::
.
IsReadOnly 属性
ObjectParameterCollection 类

获取一个值，该值指示集合是只读的还是可修改的。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private ReadOnly Property IsReadOnly As Boolean
    Implements ICollection(Of ObjectParameter).IsReadOnly
    Get
bool ICollection<ObjectParameter>.IsReadOnly { get; }
private:
virtual property bool IsReadOnly {
    bool get () sealed = ICollection<ObjectParameter^>::IsReadOnly::get;
}
private abstract IsReadOnly : bool
private override IsReadOnly : bool

属性值

类型： System Boolean
一个布尔值，如果集合是只读的，则为 true；如果集合是可修改的，则为 false。

实现

此集合始终为读/写；可以添加、移除和修改参数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间


ObjectParameterCollection ..::.Item 属性

ObjectParameterCollection
.
.
::
.
Item 属性
ObjectParameterCollection 类

提供一个索引器，使调用方能够根据名称来检索参数。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Item ( _
    name As String _
) As ObjectParameter
    Get
public ObjectParameter this[
    string name
] { get; }
public:
property ObjectParameter^ Item[String^ name] {
    ObjectParameter^ get (String^ name);
}
member Item : ObjectParameter

参数

name
类型： System String
要查找的参数的名称。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。 要查找的参数的名称。此名称不应包含 Entity SQL 语句中使用的“@”参数标记，只能包含实际名称。

属性值

类型： System.Data.Objects ObjectParameter
ObjectParameter 实例。
异常 | 条件
ArgumentOutOfRangeException | 集合中未找到具有指定名称的参数。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectParameterCollection 类
ObjectParameterCollection 成员
System.Data.Objects 命名空间


ObjectQuery 类

ObjectQuery 类
成员

实现使用 LINQ to Entities 和 ObjectQuery<(Of <(T>)>) 对概念模型执行查询的通用功能。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class ObjectQuery _
    Implements IOrderedQueryable, IQueryable, IEnumerable, IListSource
public abstract class ObjectQuery : IOrderedQueryable,
    IQueryable, IEnumerable, IListSource
public ref class ObjectQuery abstract : IOrderedQueryable,
    IQueryable, IEnumerable, IListSource
[<AbstractClassAttribute>]
type ObjectQuery =
    class
        interface IOrderedQueryable
        interface IQueryable
        interface IEnumerable
        interface IListSource
    end

ObjectQuery 是对概念模型进行的查询所适用的基类。提供 ObjectQuery 可以确保 LINQ to Entities 查询与使用 ObjectQuery<(Of <(T>)>) 执行的查询具有相同的功能。必须将 ObjectQuery<(Of <(T>)>) 与指定类型一起使用来查询概念模型。有关更多信息，请参见Object Queries (Entity Framework)。 ObjectQuery 是对概念模型进行的查询所适用的基类。提供 ObjectQuery 可以确保 LINQ to Entities 查询与使用 ObjectQuery<(Of <(T>)>) 执行的查询具有相同的功能。必须将 ObjectQuery<(Of <(T>)>) 与指定类型一起使用来查询概念模型。有关更多信息，请参见Object Queries (Entity Framework)。 ObjectQuery 是对概念模型进行的查询所适用的基类。提供 ObjectQuery 可以确保 LINQ to Entities 查询与使用 ObjectQuery<(Of <(T>)>) 执行的查询具有相同的功能。必须将 ObjectQuery<(Of <(T>)>) 与指定类型一起使用来查询概念模型。有关更多信息，请参见Object Queries (Entity Framework)。 ObjectQuery 是对概念模型进行的查询所适用的基类。提供 ObjectQuery 可以确保 LINQ to Entities 查询与使用 ObjectQuery<(Of <(T>)>) 执行的查询具有相同的功能。必须将 ObjectQuery<(Of <(T>)>) 与指定类型一起使用来查询概念模型。有关更多信息，请参见Object Queries (Entity Framework)。

System.Data.Objects System.Data.Objects..::.ObjectQueryObjectQuery

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

LINQ to Entities


ObjectQuery 成员

ObjectQuery 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectQuery 类

实现使用 LINQ to Entities 和 ObjectQuery<(Of <(T>)>) 对概念模型执行查询的通用功能。

ObjectQuery 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectQuery 类
System.Data.Objects 命名空间


ObjectQuery 方法

ObjectQuery 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectQuery 类

ObjectQuery 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectQuery 类
System.Data.Objects 命名空间


ObjectQuery ..::.Execute 方法

ObjectQuery
.
.
::
.
Execute 方法
ObjectQuery 类

使用指定的合并选项执行非类型化对象查询。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Execute ( _
    mergeOption As MergeOption _
) As ObjectResult
public ObjectResult Execute(
    MergeOption mergeOption
)
public:
ObjectResult^ Execute(
    MergeOption mergeOption
)
member Execute :
        mergeOption:MergeOption -> ObjectResult

参数

mergeOption
类型： System.Data.Objects MergeOption
执行查询时要使用的 MergeOption。默认值为 AppendOnly。 执行查询时要使用的 MergeOption。默认值为 AppendOnly。

返回值

类型： System.Data.Objects ObjectResult
一个 ObjectResult<(Of <(T>)>)，它包含查询返回的实体对象的集合。

对象查询的默认合并选项为 AppendOnly。有关更多信息，请参见Change Tracking and Identity Resolution (Entity Framework)。 对象查询的默认合并选项为 AppendOnly。有关更多信息，请参见Change Tracking and Identity Resolution (Entity Framework)。

为类型化对象查询调用针对 ObjectQuery<(Of <(T>)>) 的 Execute 方法。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectQuery ..::.GetResultType 方法

ObjectQuery
.
.
::
.
GetResultType 方法
ObjectQuery 类

返回有关查询的结果类型的信息。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetResultType As TypeUsage
public TypeUsage GetResultType()
public:
TypeUsage^ GetResultType()
member GetResultType : unit -> TypeUsage

返回值

类型： System.Data.Metadata.Edm TypeUsage
一个 TypeUsage 值，它包含有关查询的结果类型的信息。

此示例基于 Adventure Works Sales Model。该示例创建一个类型为 DbDataRecord 的 ObjectQuery<(Of <(T>)>)，使用 GetResultType 确定返回的类型是否表示行。 此示例基于 Adventure Works Sales Model。该示例创建一个类型为 DbDataRecord 的 ObjectQuery<(Of <(T>)>)，使用 GetResultType 确定返回的类型是否表示行。

Using context As New AdventureWorksEntities()
    Dim queryString As String = "SELECT VALUE product " & "FROM AdventureWorksEntities.Products AS product"
    Dim query As New ObjectQuery(Of DbDataRecord)(queryString, context)

    Try
        Dim type As TypeUsage = query.GetResultType()
        If TypeOf type.EdmType Is RowType Then
            Dim row As RowType = TryCast(type.EdmType, RowType)
            For Each column As EdmProperty In row.Properties
                Console.WriteLine("{0}", column.Name)
            Next
        End If
    Catch ex As InvalidOperationException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    string queryString = @"SELECT VALUE product "
    + "FROM AdventureWorksEntities.Products AS product";
    ObjectQuery<DbDataRecord> query =
        new ObjectQuery<DbDataRecord>
            (queryString, context);

    try
    {
        TypeUsage type = query.GetResultType();
        if (type.EdmType is RowType)
        {
            RowType row = type.EdmType as RowType;
            foreach (EdmProperty column in row.Properties)
                Console.WriteLine("{0}", column.Name);
        }
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

Managing Connections in Object Services (Entity Framework)
ADO.NET Metadata


ObjectQuery ..::.IEnumerable ..::.GetEnumerator 方法

ObjectQuery
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
ObjectQuery 类

返回一个循环访问集合的枚举器。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
可用于循环访问集合的 IEnumerator。

实现

调用 IEnumerable..::.GetEnumerator 会使用 MergeOption 属性指定的合并选项执行查询。

C# 语言的 foreach 语句（在 Visual Basic 中为 For Each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。 C# 语言的 foreach 语句（在 Visual Basic 中为 For Each）隐藏了枚举数的复杂性。因此，建议使用 foreach，而不是直接操作枚举数。

枚举数可用于读取集合中的数据，但不能用于修改基础集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectQuery ..::.IListSource ..::.GetList 方法

ObjectQuery
.
.
::
.
IListSource
.
.
::
.
GetList 方法
ObjectQuery 类

以 IList 形式返回一个集合，用于数据绑定。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Function GetList As IList
    Implements IListSource.GetList
IList IListSource.GetList()
private:
virtual IList^ GetList() sealed = IListSource::GetList
private abstract GetList : unit -> IList
private override GetList : unit -> IList

返回值

类型： System.Collections IList
实体对象的 IList。

实现

此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。

此方法可实现对查询结果的数据绑定。它由绑定到集合的控件进行调用。有关更多信息，请参见Binding Objects to Controls (Entity Framework)。 此方法可实现对查询结果的数据绑定。它由绑定到集合的控件进行调用。有关更多信息，请参见Binding Objects to Controls (Entity Framework)。 此方法可实现对查询结果的数据绑定。它由绑定到集合的控件进行调用。有关更多信息，请参见Binding Objects to Controls (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间


ObjectQuery ..::.ToTraceString 方法

ObjectQuery
.
.
::
.
ToTraceString 方法
ObjectQuery 类

返回要对数据源执行的命令。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<BrowsableAttribute(False)> _
Public Function ToTraceString As String
[BrowsableAttribute(false)]
public string ToTraceString()
[BrowsableAttribute(false)]
public:
String^ ToTraceString()
[<BrowsableAttribute(false)>]
member ToTraceString : unit -> string

返回值

类型： System String
一个 string，表示查询对数据源执行的命令。

本主题中的示例基于 Adventure Works Sales Model。

Dim productID = 900
Using context As New AdventureWorksEntities()
    Try
        ' Define the object query for the specific product.
        Dim productQuery As ObjectQuery(Of Product) = context.Products.Where("it.ProductID = @productID")
        productQuery.Parameters.Add(New ObjectParameter("productID", productID))

        ' Write the store commands for the query.
        Console.WriteLine(productQuery.ToTraceString())
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int productID = 900;
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Define the object query for the specific product.
        ObjectQuery<Product> productQuery =
            context.Products.Where("it.ProductID = @productID");
        productQuery.Parameters.Add(new ObjectParameter("productID", productID));

        // Write the store commands for the query.
        Console.WriteLine(productQuery.ToTraceString());
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)


ObjectQuery 属性

ObjectQuery 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectQuery 类

ObjectQuery 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectQuery 类
System.Data.Objects 命名空间


ObjectQuery ..::.CommandText 属性

ObjectQuery
.
.
::
.
CommandText 属性
ObjectQuery 类

返回查询的命令文本。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property CommandText As String
    Get
public string CommandText { get; }
public:
property String^ CommandText {
    String^ get ();
}
member CommandText : string

属性值

类型： System String
一个 string 值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间


ObjectQuery ..::.Context 属性

ObjectQuery
.
.
::
.
Context 属性
ObjectQuery 类

获取与此对象查询相关联的对象上下文。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Context As ObjectContext
    Get
public ObjectContext Context { get; }
public:
property ObjectContext^ Context {
    ObjectContext^ get ();
}
member Context : ObjectContext

属性值

类型： System.Data.Objects ObjectContext
与此 ObjectQuery<(Of <(T>)>) 实例关联的 ObjectContext。

查询的上下文包括连接、缓存和元数据。有关更多信息，请参见Object Services Overview (Entity Framework)。 查询的上下文包括连接、缓存和元数据。有关更多信息，请参见Object Services Overview (Entity Framework)。

连接属性是可变的，必须在查询执行之前进行设置。有关更多信息，请参见Managing Connections in Object Services (Entity Framework)。 连接属性是可变的，必须在查询执行之前进行设置。有关更多信息，请参见Managing Connections in Object Services (Entity Framework)。

本主题中的示例基于 Adventure Works Sales Model。此示例获取与此 ObjectQuery<(Of <(T>)>) 对象关联的 ObjectContext 对象。 本主题中的示例基于 Adventure Works Sales Model。此示例获取与此 ObjectQuery<(Of <(T>)>) 对象关联的 ObjectContext 对象。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts AS contact"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context, MergeOption.NoTracking)

        ' Get ObjectContext from ObjectQuery.
        Dim objectContext As ObjectContext = contactQuery.Context
        Console.WriteLine("Connection string {0}", objectContext.Connection.ConnectionString)
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM
            AdventureWorksEntities.Contacts AS contact";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString,
                context, MergeOption.NoTracking);

        // Get ObjectContext from ObjectQuery.
        ObjectContext objectContext = contactQuery.Context;
        Console.WriteLine("Connection string {0}",
            objectContext.Connection.ConnectionString);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)


ObjectQuery ..::.EnablePlanCaching 属性

ObjectQuery
.
.
::
.
EnablePlanCaching 属性
ObjectQuery 类

获取或设置一个值，该值指示是否应缓存查询计划。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property EnablePlanCaching As Boolean
    Get
    Set
public bool EnablePlanCaching { get; set; }
public:
property bool EnablePlanCaching {
    bool get ();
    void set (bool value);
}
member EnablePlanCaching : bool with get, set

属性值

类型： System Boolean
一个指示是否应缓存查询计划的值。

有关更多信息，请参见Query Caching。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectQuery ..::.IListSource ..::.ContainsListCollection 属性

ObjectQuery
.
.
::
.
IListSource
.
.
::
.
ContainsListCollection 属性
ObjectQuery 类

获取一个值，该值指示查询返回的集合是否包含集合对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private ReadOnly Property ContainsListCollection As Boolean
    Implements IListSource.ContainsListCollection
    Get
bool IListSource.ContainsListCollection { get; }
private:
virtual property bool ContainsListCollection {
    bool get () sealed = IListSource::ContainsListCollection::get;
}
private abstract ContainsListCollection : bool
private override ContainsListCollection : bool

属性值

类型： System Boolean
一个布尔值。

实现

此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。

此属性始终返回 false，原因是查询返回的集合包含的是对象而不是集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间


ObjectQuery ..::.IQueryable ..::.ElementType 属性

ObjectQuery
.
.
::
.
IQueryable
.
.
::
.
ElementType 属性
ObjectQuery 类

获取此查询实例的结果元素类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private ReadOnly Property ElementType As Type
    Implements IQueryable.ElementType
    Get
Type IQueryable.ElementType { get; }
private:
virtual property Type^ ElementType {
    Type^ get () sealed = IQueryable::ElementType::get;
}
private abstract ElementType : Type
private override ElementType : Type

属性值

类型： System Type
一个 Type，表示此查询实例的结果元素类型。

实现

此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间


ObjectQuery ..::.IQueryable ..::.Expression 属性

ObjectQuery
.
.
::
.
IQueryable
.
.
::
.
Expression 属性
ObjectQuery 类

获取描述此查询的表达式。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private ReadOnly Property Expression As Expression
    Implements IQueryable.Expression
    Get
Expression IQueryable.Expression { get; }
private:
virtual property Expression^ Expression {
    Expression^ get () sealed = IQueryable::Expression::get;
}
private abstract Expression : Expression
private override Expression : Expression

属性值

类型： System.Linq.Expressions Expression
描述此查询的 LINQ Expression。

实现

对于使用 LINQ 生成器模式生成的查询，会返回完全 LINQ 表达式树；否则，返回包装此查询的常量表达式。请注意，不会缓存默认表达式。这样，框架可以区分 LINQ 与 Entity SQL 查询。 对于使用 LINQ 生成器模式生成的查询，会返回完全 LINQ 表达式树；否则，返回包装此查询的常量表达式。请注意，不会缓存默认表达式。这样，框架可以区分 LINQ 与 Entity SQL 查询。 对于使用 LINQ 生成器模式生成的查询，会返回完全 LINQ 表达式树；否则，返回包装此查询的常量表达式。请注意，不会缓存默认表达式。这样，框架可以区分 LINQ 与 Entity SQL 查询。

此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

Query Builder Methods (Entity Framework)


ObjectQuery ..::.IQueryable ..::.Provider 属性

ObjectQuery
.
.
::
.
IQueryable
.
.
::
.
Provider 属性
ObjectQuery 类

获取与此查询实例关联的 LINQ IQueryProvider。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private ReadOnly Property Provider As IQueryProvider
    Implements IQueryable.Provider
    Get
IQueryProvider IQueryable.Provider { get; }
private:
virtual property IQueryProvider^ Provider {
    IQueryProvider^ get () sealed = IQueryable::Provider::get;
}
private abstract Provider : IQueryProvider
private override Provider : IQueryProvider

属性值

类型： System.Linq IQueryProvider
与此查询实例关联的 IQueryProvider。

实现

此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 ObjectQuery<(Of <(T>)>) 实例强制转换为 IListSource 接口时使用它。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间


ObjectQuery ..::.MergeOption 属性

ObjectQuery
.
.
::
.
MergeOption 属性
ObjectQuery 类

获取或设置如何将查询返回的对象添加到对象上下文。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property MergeOption As MergeOption
    Get
    Set
public MergeOption MergeOption { get; set; }
public:
property MergeOption MergeOption {
    MergeOption get ();
    void set (MergeOption value);
}
member MergeOption : MergeOption with get, set

属性值

类型： System.Data.Objects MergeOption
查询 MergeOption。

如果未指定 MergeOption，则默认值为 AppendOnly。有关更多信息，请参见Change Tracking and Identity Resolution (Entity Framework)。 如果未指定 MergeOption，则默认值为 AppendOnly。有关更多信息，请参见Change Tracking and Identity Resolution (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects and Shaping Results (Entity Framework)


ObjectQuery ..::.Parameters 属性

ObjectQuery
.
.
::
.
Parameters 属性
ObjectQuery 类

获取此对象查询的参数集合。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Parameters As ObjectParameterCollection
    Get
public ObjectParameterCollection Parameters { get; }
public:
property ObjectParameterCollection^ Parameters {
    ObjectParameterCollection^ get ();
}
member Parameters : ObjectParameterCollection

属性值

类型： System.Data.Objects ObjectParameterCollection
此 ObjectQuery<(Of <(T>)>) 的参数集合。

使用返回的 ObjectParameterCollection 指定传递给查询的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 使用返回的 ObjectParameterCollection 指定传递给查询的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。

此示例基于 Adventure Works Sales Model。该示例将新参数添加到集合，然后获取此 ObjectQuery<(Of <(T>)>) 的参数集合。然后，该示例循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 此示例基于 Adventure Works Sales Model。该示例将新参数添加到集合，然后获取此 ObjectQuery<(Of <(T>)>) 的参数集合。然后，该示例循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。 此示例基于 Adventure Works Sales Model。该示例将新参数添加到集合，然后获取此 ObjectQuery<(Of <(T>)>) 的参数集合。然后，该示例循环访问 ObjectParameterCollection 并显示集合中每个参数的名称、类型和值。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE contact FROM AdventureWorksEntities.Contacts" & _
            " AS contact WHERE contact.LastName = @ln AND contact.FirstName = @fn"

        Dim contactQuery As New ObjectQuery(Of Contact)(queryString, context)

        ' Add parameters to the collection.
        contactQuery.Parameters.Add(New ObjectParameter("ln", "Adams"))
        contactQuery.Parameters.Add(New ObjectParameter("fn", "Frances"))

        Dim objectParameterCollection As ObjectParameterCollection = contactQuery.Parameters

        ' Iterate through the ObjectParameterCollection.
        For Each result As ObjectParameter In objectParameterCollection
            Console.WriteLine("{0} {1} {2}", result.Name, result.Value, result.ParameterType)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE contact FROM AdventureWorksEntities.Contacts
            AS contact WHERE contact.LastName = @ln
            AND contact.FirstName = @fn";

        ObjectQuery<Contact> contactQuery =
            new ObjectQuery<Contact>(queryString, context);

        // Add parameters to the collection.
        contactQuery.Parameters.Add(new ObjectParameter("ln", "Adams"));
        contactQuery.Parameters.Add(new ObjectParameter("fn", "Frances"));

        ObjectParameterCollection objectParameterCollection =
            contactQuery.Parameters;

        // Iterate through the ObjectParameterCollection.
        foreach (ObjectParameter result in objectParameterCollection)
        {
            Console.WriteLine("{0} {1} {2}", result.Name,
                result.Value,
                result.ParameterType);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery 类
ObjectQuery 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectQuery <(Of <(T >)>) 类

ObjectQuery
<
(Of
<
(
T
>
)
>
)
类
成员

表示在给定的对象上下文中针对概念模型的类型化查询。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Class ObjectQuery(Of T) _
    Inherits ObjectQuery _
    Implements IOrderedQueryable(Of T), IQueryable(Of T),  _
    IEnumerable(Of T), IOrderedQueryable, IQueryable, IEnumerable, IListSource
public class ObjectQuery<T> : ObjectQuery,
    IOrderedQueryable<T>, IQueryable<T>, IEnumerable<T>, IOrderedQueryable, IQueryable,
    IEnumerable, IListSource

generic<typename T>
public ref class ObjectQuery : public ObjectQuery,
    IOrderedQueryable<T>, IQueryable<T>, IEnumerable<T>, IOrderedQueryable, IQueryable,
    IEnumerable, IListSource
type ObjectQuery<'T> =
    class
        inherit ObjectQuery
        interface IOrderedQueryable<'T>
        interface IQueryable<'T>
        interface IEnumerable<'T>
        interface IOrderedQueryable
        interface IQueryable
        interface IEnumerable
        interface IListSource
    end

类型参数

T

查询的实体类型。

ObjectQuery<(Of <(T>)>) 泛型类表示一个查询，该查询返回由零个或多个特定类型的对象组成的集合。在执行对象查询之前，必须定义 ObjectContext。此上下文提供编写和执行查询所必需的连接和元数据信息。在以下情况下执行对象查询： ObjectQuery<(Of <(T>)>) 泛型类表示一个查询，该查询返回由零个或多个特定类型的对象组成的集合。在执行对象查询之前，必须定义 ObjectContext。此上下文提供编写和执行查询所必需的连接和元数据信息。在以下情况下执行对象查询： ObjectQuery<(Of <(T>)>) 泛型类表示一个查询，该查询返回由零个或多个特定类型的对象组成的集合。在执行对象查询之前，必须定义 ObjectContext。此上下文提供编写和执行查询所必需的连接和元数据信息。在以下情况下执行对象查询： ObjectQuery<(Of <(T>)>) 泛型类表示一个查询，该查询返回由零个或多个特定类型的对象组成的集合。在执行对象查询之前，必须定义 ObjectContext。此上下文提供编写和执行查询所必需的连接和元数据信息。在以下情况下执行对象查询：

  • 当使用对象查询执行操作时，例如在 foreach (C#) 或 For Each (Visual Basic) 枚举中。

  • 当分配对象查询用以填充 List<(Of <(T>)>) 集合时。

  • 显式调用 Execute 方法时。

查询本身可以使用一个 Entity SQL 语句或 LINQ 查询进行创建，也可以使用类中包含的查询生成器方法以增量方式生成。在每种情况下，结果都为一个新 ObjectQuery<(Of <(T>)>) 实例，该实例在显式执行或对其进行枚举时，会将查询发送到数据源进行执行并返回结果。 查询本身可以使用一个 Entity SQL 语句或 LINQ 查询进行创建，也可以使用类中包含的查询生成器方法以增量方式生成。在每种情况下，结果都为一个新 ObjectQuery<(Of <(T>)>) 实例，该实例在显式执行或对其进行枚举时，会将查询发送到数据源进行执行并返回结果。

ObjectQuery<(Of <(T>)>) 通常是实体类型，也可以是 DbDataRecord 类型（用于匿名类型的投影）或基元类型（如整数或字符串）。有关更多信息，请参见Object Queries (Entity Framework)。 ObjectQuery<(Of <(T>)>) 通常是实体类型，也可以是 DbDataRecord 类型（用于匿名类型的投影）或基元类型（如整数或字符串）。有关更多信息，请参见Object Queries (Entity Framework)。

本主题中的示例基于 Adventure Works Sales Model。

该示例演示如何构造 ObjectQuery<(Of <(T>)>) 类的实例。

Using context As New AdventureWorksEntities()
    Try
        ' Call the constructor with a query for products and the ObjectContext.
        Dim productQuery1 As New ObjectQuery(Of Product)("Products", context)

        For Each result As Product In productQuery1
            Console.WriteLine("Product Name: {0}", result.Name)
        Next

        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product"

        ' Call the constructor with the specified query and the ObjectContext.
        Dim productQuery2 As New ObjectQuery(Of Product)(queryString, context)

        For Each result As Product In productQuery2
            Console.WriteLine("Product Name: {0}", result.Name)
        Next

        ' Call the constructor with the specified query, the ObjectContext,
        ' and the NoTracking merge option.
        Dim productQuery3 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        For Each result As Product In productQuery3
            Console.WriteLine("Product Name: {0}", result.Name)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Call the constructor with a query for products and the ObjectContext.
        ObjectQuery<Product> productQuery1 =
            new ObjectQuery<Product>("Products", context);

        foreach (Product result in productQuery1)
            Console.WriteLine("Product Name: {0}", result.Name);

        string queryString =
            @"SELECT VALUE product FROM AdventureWorksEntities.Products AS product";

        // Call the constructor with the specified query and the ObjectContext.
        ObjectQuery<Product> productQuery2 =
            new ObjectQuery<Product>(queryString, context);

        foreach (Product result in productQuery2)
            Console.WriteLine("Product Name: {0}", result.Name);

        // Call the constructor with the specified query, the ObjectContext,
        // and the NoTracking merge option.
        ObjectQuery<Product> productQuery3 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        foreach (Product result in productQuery3)
            Console.WriteLine("Product Name: {0}", result.Name);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

System.Data.Objects
System.Data.Objects..::.ObjectQuery<(Of <(T>)>)ObjectQuery
System.Data.Objects..::.ObjectQuery<(Of <(T>)>)T
System.Data.Objects..::.ObjectQuery<(Of <(T>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Entity SQL Language
LINQ to Entities
Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)


ObjectQuery <(Of <(T >)>) 成员

ObjectQuery
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectQuery

表示在给定的对象上下文中针对概念模型的类型化查询。

ObjectQuery T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectQuery T 类
System.Data.Objects 命名空间


ObjectQuery <(Of <(T >)>) 构造函数

ObjectQuery
<
(Of
<
(
T
>
)
>
)
构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectQuery

初始化 ObjectQuery<(Of <(T>)>) 类的新实例。

名称 说明
页首

可以对 ObjectQuery<(Of <(T>)>) 进行初始化，使之表示单个标量结果而不是标量结果集合。某些扩展方法要求使用集合结果作为输入。在这种情况下，当调用其中的一个方法时将引发 ArgumentException。有关更多信息，请参见Object Queries (Entity Framework)。 可以对 ObjectQuery<(Of <(T>)>) 进行初始化，使之表示单个标量结果而不是标量结果集合。某些扩展方法要求使用集合结果作为输入。在这种情况下，当调用其中的一个方法时将引发 ArgumentException。有关更多信息，请参见Object Queries (Entity Framework)。 可以对 ObjectQuery<(Of <(T>)>) 进行初始化，使之表示单个标量结果而不是标量结果集合。某些扩展方法要求使用集合结果作为输入。在这种情况下，当调用其中的一个方法时将引发 ArgumentException。有关更多信息，请参见Object Queries (Entity Framework)。 可以对 ObjectQuery<(Of <(T>)>) 进行初始化，使之表示单个标量结果而不是标量结果集合。某些扩展方法要求使用集合结果作为输入。在这种情况下，当调用其中的一个方法时将引发 ArgumentException。有关更多信息，请参见Object Queries (Entity Framework)。

当应用程序在运行时生成实体 SQL 查询时，您应了解数据源的任何命令长度限制。实体 SQL 不强制在查询中限制的命令文本的长度。 当应用程序在运行时生成实体 SQL 查询时，您应了解数据源的任何命令长度限制。实体 SQL 不强制在查询中限制的命令文本的长度。

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects and Shaping Results (Entity Framework)


ObjectQuery <(Of <(T >)>) 构造函数 (String, ObjectContext)

ObjectQuery
<
(Of
<
(
T
>
)
>
)
构造函数 (String, ObjectContext)
ObjectQuery

使用指定的 Entity SQL 命令作为初始查询来创建新的 ObjectQuery<(Of <(T>)>) 实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    commandText As String, _
    context As ObjectContext _
)
public ObjectQuery(
    string commandText,
    ObjectContext context
)
public:
ObjectQuery(
    String^ commandText,
    ObjectContext^ context
)
new :
        commandText:string *
        context:ObjectContext -> ObjectQuery

参数

commandText
类型： System String
Entity SQL 查询。
context
类型： System.Data.Objects ObjectContext
要对其执行查询的 ObjectContext。

当应用程序在运行时生成实体 SQL 查询时，您应了解数据源的任何命令长度限制。实体 SQL 不强制在查询中限制的命令文本的长度。 当应用程序在运行时生成实体 SQL 查询时，您应了解数据源的任何命令长度限制。实体 SQL 不强制在查询中限制的命令文本的长度。

本主题中的示例基于 Adventure Works Sales Model。该示例演示如何构造 ObjectQuery<(Of <(T>)>) 类的实例。 本主题中的示例基于 Adventure Works Sales Model。该示例演示如何构造 ObjectQuery<(Of <(T>)>) 类的实例。

Using context As New AdventureWorksEntities()
    Try
        ' Call the constructor with a query for products and the ObjectContext.
        Dim productQuery1 As New ObjectQuery(Of Product)("Products", context)

        For Each result As Product In productQuery1
            Console.WriteLine("Product Name: {0}", result.Name)
        Next

        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product"

        ' Call the constructor with the specified query and the ObjectContext.
        Dim productQuery2 As New ObjectQuery(Of Product)(queryString, context)

        For Each result As Product In productQuery2
            Console.WriteLine("Product Name: {0}", result.Name)
        Next

        ' Call the constructor with the specified query, the ObjectContext,
        ' and the NoTracking merge option.
        Dim productQuery3 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        For Each result As Product In productQuery3
            Console.WriteLine("Product Name: {0}", result.Name)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Call the constructor with a query for products and the ObjectContext.
        ObjectQuery<Product> productQuery1 =
            new ObjectQuery<Product>("Products", context);

        foreach (Product result in productQuery1)
            Console.WriteLine("Product Name: {0}", result.Name);

        string queryString =
            @"SELECT VALUE product FROM AdventureWorksEntities.Products AS product";

        // Call the constructor with the specified query and the ObjectContext.
        ObjectQuery<Product> productQuery2 =
            new ObjectQuery<Product>(queryString, context);

        foreach (Product result in productQuery2)
            Console.WriteLine("Product Name: {0}", result.Name);

        // Call the constructor with the specified query, the ObjectContext,
        // and the NoTracking merge option.
        ObjectQuery<Product> productQuery3 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        foreach (Product result in productQuery3)
            Console.WriteLine("Product Name: {0}", result.Name);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
ObjectQuery T 重载
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects (Entity Framework)


ObjectQuery <(Of <(T >)>) 构造函数 (String, ObjectContext, MergeOption)

ObjectQuery
<
(Of
<
(
T
>
)
>
)
构造函数 (String, ObjectContext, MergeOption)
ObjectQuery

使用指定的 Entity SQL 命令（作为初始查询）和指定的合并选项来创建新的 ObjectQuery<(Of <(T>)>) 实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    commandText As String, _
    context As ObjectContext, _
    mergeOption As MergeOption _
)
public ObjectQuery(
    string commandText,
    ObjectContext context,
    MergeOption mergeOption
)
public:
ObjectQuery(
    String^ commandText,
    ObjectContext^ context,
    MergeOption mergeOption
)
new :
        commandText:string *
        context:ObjectContext *
        mergeOption:MergeOption -> ObjectQuery

参数

commandText
类型： System String
Entity SQL 查询。
context
类型： System.Data.Objects ObjectContext
要对其执行查询的 ObjectContext。
mergeOption
类型： System.Data.Objects MergeOption
指定如何将通过此查询检索到的实体与以前对同一 ObjectContext 的查询所返回的实体合并。

当应用程序在运行时生成实体 SQL 查询时，您应了解数据源的任何命令长度限制。实体 SQL 不强制在查询中限制的命令文本的长度。 当应用程序在运行时生成实体 SQL 查询时，您应了解数据源的任何命令长度限制。实体 SQL 不强制在查询中限制的命令文本的长度。

此示例基于 Adventure Works Sales Model。ObjectQuery<(Of <(T>)>) 以指定的查询、ObjectContext 和 MergeOption 进行初始化。 此示例基于 Adventure Works Sales Model。ObjectQuery<(Of <(T>)>) 以指定的查询、ObjectContext 和 MergeOption 进行初始化。

Dim productID = 900
Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product" & _
            " WHERE product.ProductID > @productID"

        Dim productQuery1 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)
        productQuery1.Parameters.Add(New ObjectParameter("productID", productID))

        Dim productQuery2 As ObjectQuery(Of DbDataRecord) = productQuery1.Select("it.ProductID")

        For Each result As DbDataRecord In productQuery2
            Console.WriteLine("{0}", result("ProductID"))
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int productID = 900;
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString = @"SELECT VALUE product FROM
            AdventureWorksEntities.Products AS product
            WHERE product.ProductID > @productID";

        ObjectQuery<Product> productQuery1 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        productQuery1.Parameters.Add(new ObjectParameter("productID", productID));

        ObjectQuery<DbDataRecord> productQuery2 =
            productQuery1.Select("it.ProductID");

        foreach (DbDataRecord result in productQuery2)
        {
            Console.WriteLine("{0}", result["ProductID"]);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
ObjectQuery T 重载
System.Data.Objects 命名空间


ObjectQuery <(Of <(T >)>) 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectQuery

ObjectQuery T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectQuery T 类
System.Data.Objects 命名空间


ObjectQuery <(Of <(T >)>) ..::.Distinct 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Distinct 方法
ObjectQuery

将查询限制为仅返回唯一结果。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Distinct As ObjectQuery(Of T)
public ObjectQuery<T> Distinct()
public:
ObjectQuery<T>^ Distinct()
member Distinct : unit -> ObjectQuery<'T>

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>) 实例，等效于应用了 SELECT DISTINCT 的原始实例。

此查询生成器方法返回一个 ObjectQuery<(Of <(T>)>) 实例，该实例等效于应用了 SELECT DISTINCT 的原始查询。

DISTINCT 运算符不能应用于包括数据源中不可比较列的映射的对象（如 ntext）。

本主题中的示例基于 Adventure Works Sales Model。该示例使用 UnionAll 方法创建新的 ObjectQuery<(Of <(T>)>) 对象。然后对新的 ObjectQuery<(Of <(T>)>) 对象调用 Distinct，以获取此查询的唯一结果。 本主题中的示例基于 Adventure Works Sales Model。该示例使用 UnionAll 方法创建新的 ObjectQuery<(Of <(T>)>) 对象。然后对新的 ObjectQuery<(Of <(T>)>) 对象调用 Distinct，以获取此查询的唯一结果。 本主题中的示例基于 Adventure Works Sales Model。该示例使用 UnionAll 方法创建新的 ObjectQuery<(Of <(T>)>) 对象。然后对新的 ObjectQuery<(Of <(T>)>) 对象调用 Distinct，以获取此查询的唯一结果。

Dim productID = 100
Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products " & _
            " AS product WHERE product.ProductID < @productID"

        Dim productQuery As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery2 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery3 As ObjectQuery(Of Product) = productQuery.UnionAll(productQuery2)

        productQuery3.Parameters.Add(New ObjectParameter("productID", productID))

        Console.WriteLine("Result of UnionAll")
        Console.WriteLine("------------------")

        ' Iterate through the collection of Product items,
        ' after the UnionAll method was called on two queries.
        For Each result As Product In productQuery3
            Console.WriteLine("Product Name: {0}", result.ProductID)
        Next
        Dim productQuery4 As ObjectQuery(Of Product) = productQuery3.Distinct()

        Console.WriteLine(vbLf & "Result of Distinct")
        Console.WriteLine("------------------")

        ' Iterate through the collection of Product items.
        ' after the Distinct method was called on a query.
        For Each result As Product In productQuery4
            Console.WriteLine("Product Name: {0}", result.ProductID)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int productID = 100;
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE product FROM AdventureWorksEntities.Products
                AS product WHERE product.ProductID < @productID";

        ObjectQuery<Product> productQuery =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery2 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery3 =
            productQuery.UnionAll(productQuery2);

        productQuery3.Parameters.Add(new ObjectParameter("productID", productID));

        Console.WriteLine("Result of UnionAll");
        Console.WriteLine("------------------");

        // Iterate through the collection of Product items,
        // after the UnionAll method was called on two queries.
        foreach (Product result in productQuery3)
        {
            Console.WriteLine("Product Name: {0}", result.ProductID);
        }
        ObjectQuery<Product> productQuery4 = productQuery3.Distinct();

        Console.WriteLine("\nResult of Distinct");
        Console.WriteLine("------------------");

        // Iterate through the collection of Product items.
        // after the Distinct method was called on a query.
        foreach (Product result in productQuery4)
            Console.WriteLine("Product Name: {0}", result.ProductID);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.Except 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Except 方法
ObjectQuery

根据另一个对象查询的结果排除查询结果，从而对查询结果进行限制。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Except ( _
    query As ObjectQuery(Of T) _
) As ObjectQuery(Of T)
public ObjectQuery<T> Except(
    ObjectQuery<T> query
)
public:
ObjectQuery<T>^ Except(
    ObjectQuery<T>^ query
)
member Except :
        query:ObjectQuery<'T> -> ObjectQuery<'T>

参数

query
类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个 ObjectQuery<(Of <(T>)>)，表示要从查询中排除的结果。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>) 实例，等效于根据指定的 query 应用了 EXCEPT 的原始实例。
异常 | 条件
ArgumentNullException | query 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串。

提供的用于定义要排除的结果的 query 必须具有相同类型，或具有与 ObjectQuery<(Of <(T>)>) 兼容的类型。

在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。

生成的查询从 ObjectQuery<(Of <(T>)>) 实例（调用了它的 Except）继承连接。

此示例基于 Adventure Works Sales Model。该示例使用 Except 方法创建新的 ObjectQuery<(Of <(T>)>) 对象，然后循环访问新查询的结果。 此示例基于 Adventure Works Sales Model。该示例使用 Except 方法创建新的 ObjectQuery<(Of <(T>)>) 对象，然后循环访问新查询的结果。

Dim productID = 900
Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product"
        Dim productQuery As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim queryString2 As String = "SELECT VALUE product FROM AdventureWorksEntities.Products " & _
            " AS product WHERE product.ProductID < @productID"
        Dim productQuery2 As New ObjectQuery(Of Product)(queryString2, context, MergeOption.NoTracking)
        productQuery2.Parameters.Add(New ObjectParameter("productID", productID))

        Dim productQuery3 As ObjectQuery(Of Product) = productQuery.Except(productQuery2)

        Console.WriteLine("Result of Except")
        Console.WriteLine("------------------")

        ' Iterate through the collection of Product items
        ' after the Except method was called.
        For Each result As Product In productQuery3
            Console.WriteLine("Product Name: {0}", result.ProductID)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int productID = 900;
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString = @"SELECT VALUE product
            FROM AdventureWorksEntities.Products AS product";

        ObjectQuery<Product> productQuery =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        string queryString2 = @"SELECT VALUE product
            FROM AdventureWorksEntities.Products
            AS product WHERE product.ProductID < @productID";

        ObjectQuery<Product> productQuery2 =
            new ObjectQuery<Product>(queryString2,
                context, MergeOption.NoTracking);

        productQuery2.Parameters.Add(new ObjectParameter("productID", productID));

        ObjectQuery<Product> productQuery3 =
            productQuery.Except(productQuery2);

        Console.WriteLine("Result of Except");
        Console.WriteLine("------------------");

        // Iterate through the collection of Product items
        // after the Except method was called.
        foreach (Product result in productQuery3)
            Console.WriteLine("Product Name: {0}",
                result.ProductID);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Configuring the Entity Framework (Entity Framework Tasks)
Querying Data as Objects and Shaping Results (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.Execute 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Execute 方法
ObjectQuery

使用指定的合并选项执行对象查询。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Execute ( _
    mergeOption As MergeOption _
) As ObjectResult(Of T)
public ObjectResult<T> Execute(
    MergeOption mergeOption
)
public:
ObjectResult<T>^ Execute(
    MergeOption mergeOption
)
member Execute :
        mergeOption:MergeOption -> ObjectResult<'T>

参数

mergeOption
类型： System.Data.Objects MergeOption
执行查询时要使用的 MergeOption。默认值为 AppendOnly。 执行查询时要使用的 MergeOption。默认值为 AppendOnly。

返回值

类型： System.Data.Objects ObjectResult
<
(Of
<
(
T
>
)
>
)

一个 ObjectResult<(Of <(T>)>)，它包含查询返回的实体对象的集合。

对象查询的默认合并选项为 AppendOnly。有关更多信息，请参见Change Tracking and Identity Resolution (Entity Framework)。 对象查询的默认合并选项为 AppendOnly。有关更多信息，请参见Change Tracking and Identity Resolution (Entity Framework)。

此示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 此示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 此示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 此示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。

Using context As New AdventureWorksEntities()
    Dim query As ObjectSet(Of Product) = context.Products
    Dim queryResults As ObjectResult(Of Product) = Nothing

    Dim enumerator As System.Collections.IEnumerator = Nothing
    Try
        queryResults = query.Execute(MergeOption.AppendOnly)

        ' Get the enumerator.
        enumerator = DirectCast(queryResults, System.Collections.IEnumerable).GetEnumerator()

        ' Iterate through the query results.
        While enumerator.MoveNext()
            Dim product As Product = DirectCast(enumerator.Current, Product)
            Console.WriteLine("{0}", product.Name)
        End While
        ' Dispose the enumerator
        DirectCast(enumerator, IDisposable).Dispose()
    Finally
        ' Dispose the query results and the enumerator.
        If queryResults IsNot Nothing Then
            queryResults.Dispose()
        End If
        If enumerator IsNot Nothing Then
            DirectCast(enumerator, IDisposable).Dispose()
        End If
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    ObjectSet<Product> query = context.Products;
    ObjectResult<Product> queryResults = null;

    System.Collections.IEnumerator enumerator = null;
    try
    {
        queryResults = query.Execute(MergeOption.AppendOnly);

        // Get the enumerator.
        enumerator = ((System.Collections.IEnumerable)queryResults).GetEnumerator();

        // Iterate through the query results.
        while (enumerator.MoveNext())
        {
            Product product = (Product)enumerator.Current;
            Console.WriteLine("{0}", product.Name);
        }
        // Dispose the enumerator
        ((IDisposable)enumerator).Dispose();
    }
    finally
    {
        // Dispose the query results and the enumerator.
        if (queryResults != null)
        {
            queryResults.Dispose();
        }
        if (enumerator != null)
        {
            ((IDisposable)enumerator).Dispose();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectQuery <(Of <(T >)>) ..::.GroupBy 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GroupBy 方法
ObjectQuery

按指定的条件对查询结果进行分组。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GroupBy ( _
    keys As String, _
    projection As String, _
    ParamArray parameters As ObjectParameter() _
) As ObjectQuery(Of DbDataRecord)
public ObjectQuery<DbDataRecord> GroupBy(
    string keys,
    string projection,
    params ObjectParameter[] parameters
)
public:
ObjectQuery<DbDataRecord^>^ GroupBy(
    String^ keys,
    String^ projection,
    ... array<ObjectParameter^>^ parameters
)
member GroupBy :
        keys:string *
        projection:string *
        parameters:ObjectParameter[] -> ObjectQuery<DbDataRecord>

参数

keys
类型： System String
作为结果分组依据的键列。
projection
类型： System String
用于定义投影的所选属性的列表。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

此方法中使用的零个或多个参数。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
DbDataRecord
>
)
>
)

一个 DbDataRecord 类型的新 ObjectQuery<(Of <(T>)>) 实例，等效于应用了 GROUP BY 的原始实例。
异常 | 条件
ArgumentNullException | query 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串。 - 或 - projection 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或是空字符串。

GroupBy 应用由 projection 参数指定的投影。这意味着 GroupBy 方法返回的 ObjectQuery<(Of <(T>)>) 始终具有类型 DbDataRecord。有关更多信息，请参见Object Queries (Entity Framework)。 GroupBy 应用由 projection 参数指定的投影。这意味着 GroupBy 方法返回的 ObjectQuery<(Of <(T>)>) 始终具有类型 DbDataRecord。有关更多信息，请参见Object Queries (Entity Framework)。 GroupBy 应用由 projection 参数指定的投影。这意味着 GroupBy 方法返回的 ObjectQuery<(Of <(T>)>) 始终具有类型 DbDataRecord。有关更多信息，请参见Object Queries (Entity Framework)。

此示例基于 Adventure Works Sales Model。

此示例创建一个新的 ObjectQuery<(Of <(T>)>) 对象，该对象包含现有查询的按产品名称分组的结果。

    Using context As New AdventureWorksEntities()
        Try
            Dim queryString As String = "SELECT VALUE product " & vbCr & vbLf & " FROM AdventureWorksEntities.Products AS product"

            Dim productQuery As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

            Dim productQuery2 As ObjectQuery(Of DbDataRecord) = _
                productQuery.GroupBy("it.name AS pn", "Sqlserver.COUNT(it.Name) as count, pn")

            ' Iterate through the collection of Products
            ' after the GroupBy method was called.
            For Each result As DbDataRecord In productQuery2
                Console.WriteLine("Name: {0}; Count: {1}", result("pn"), result("count"))
            Next
        Catch ex As EntitySqlException
            Console.WriteLine(ex.ToString())
        End Try
    End Using
End Sub

    using (AdventureWorksEntities context =
        new AdventureWorksEntities())
    {
        try
        {
            string queryString = @"SELECT VALUE product
                FROM AdventureWorksEntities.Products AS product";

            ObjectQuery<Product> productQuery =
                new ObjectQuery<Product>(queryString,
                    context, MergeOption.NoTracking);

            ObjectQuery<DbDataRecord> productQuery2 =
                productQuery.GroupBy("it.name AS pn",
                "Sqlserver.COUNT(it.Name) as count, pn");

            // Iterate through the collection of Products
            // after the GroupBy method was called.
            foreach (DbDataRecord result in productQuery2)
            {
                Console.WriteLine("Name: {0}; Count: {1}",
                    result["pn"], result["count"]);
            }
        }
        catch (EntitySqlException ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
}

此示例返回一组嵌套的数据记录，其中包含 Contact.LastName 列，此列已按 Contact.LastName 的第一个字母以字符顺序分组和排序。

Using context As New AdventureWorksEntities()
    Try
        ' Define the query with a GROUP BY clause that returns
        ' a set of nested LastName records grouped by first letter.
        Dim query As ObjectQuery(Of DbDataRecord) = _
            context.Contacts.GroupBy("SUBSTRING(it.LastName, 1, 1) AS ln", "ln") _
            .Select("it.ln AS ln, (SELECT c1.LastName FROM AdventureWorksEntities.Contacts AS c1 " & _
                    "WHERE SubString(c1.LastName, 1, 1) = it.ln) AS CONTACT").OrderBy("it.ln")

        ' Execute the query and walk through the nested records.
        For Each rec As DbDataRecord In query.Execute(MergeOption.AppendOnly)
            Console.WriteLine("Last names that start with the letter '{0}':", rec(0))
            Dim list As List(Of DbDataRecord) = TryCast(rec(1), List(Of DbDataRecord))
            For Each r As DbDataRecord In list
                For i As Integer = 0 To r.FieldCount - 1
                    Console.WriteLine(" {0} ", r(i))
                Next
            Next
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Define the query with a GROUP BY clause that returns
        // a set of nested LastName records grouped by first letter.
        ObjectQuery<DbDataRecord> query =
            context.Contacts
            .GroupBy("SUBSTRING(it.LastName, 1, 1) AS ln", "ln")
            .Select("it.ln AS ln, (SELECT c1.LastName " +
            "FROM AdventureWorksEntities.Contacts AS c1 " +
            "WHERE SubString(c1.LastName, 1, 1) = it.ln) AS CONTACT")
            .OrderBy("it.ln");

        // Execute the query and walk through the nested records.
        foreach (DbDataRecord rec in
            query.Execute(MergeOption.AppendOnly))
        {
            Console.WriteLine("Last names that start with the letter '{0}':",
                        rec[0]);
            List<DbDataRecord> list = rec[1] as List<DbDataRecord>;
            foreach (DbDataRecord r in list)
            {
                for (int i = 0; i < r.FieldCount; i++)
                {
                    Console.WriteLine("   {0} ", r[i]);
                }
            }
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)
How to: Group Data (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.IEnumerable <(Of <(T >)>) ..::.GetEnumerator 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
IEnumerable
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetEnumerator 方法
ObjectQuery

返回一个循环访问查询结果的枚举器。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Function GetEnumerator As IEnumerator(Of T)
    Implements IEnumerable(Of T).GetEnumerator
IEnumerator<T> IEnumerable<T>.GetEnumerator()
private:
virtual IEnumerator<T>^ GetEnumerator() sealed = IEnumerable<T>::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator<'T>
private override GetEnumerator : unit -> IEnumerator<'T>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
T
>
)
>
)

一个 IEnumerator<(Of <(T>)>) 对象，可用于循环访问结果。

实现

调用 IEnumerable<(Of <(T>)>)..::.GetEnumerator 会执行查询。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectQuery <(Of <(T >)>) ..::.Include 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Include 方法
ObjectQuery

指定要包括在查询结果中的相关对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Include ( _
    path As String _
) As ObjectQuery(Of T)
public ObjectQuery<T> Include(
    string path
)
public:
ObjectQuery<T>^ Include(
    String^ path
)
member Include :
        path:string -> ObjectQuery<'T>

参数

path
类型： System String
要在查询结果中返回的相关对象列表（以点号分隔）。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>)，它具有定义的查询路径。
异常 | 条件
ArgumentNullException | path 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | path 为 empty。

查询路径可以用于 Entity SQL 和 LINQ 查询。

路径是完全内包含的。例如，如果一个包含调用指示 Include("Orders.OrderLines")，则不仅包含 OrderLines，而且包含 Orders。有关更多信息，请参见Shaping Query Results (Entity Framework)。 路径是完全内包含的。例如，如果一个包含调用指示 Include("Orders.OrderLines")，则不仅包含 OrderLines，而且包含 Orders。有关更多信息，请参见Shaping Query Results (Entity Framework)。 路径是完全内包含的。例如，如果一个包含调用指示 Include("Orders.OrderLines")，则不仅包含 OrderLines，而且包含 Orders。有关更多信息，请参见Shaping Query Results (Entity Framework)。

在调用 Include 方法时，查询路径仅在 ObjectQuery<(Of <(T>)>) 的返回实例上有效。不影响 ObjectQuery<(Of <(T>)>) 的其他实例和对象上下文本身。 在调用 Include 方法时，查询路径仅在 ObjectQuery<(Of <(T>)>) 的返回实例上有效。不影响 ObjectQuery<(Of <(T>)>) 的其他实例和对象上下文本身。

因为 Include 方法返回查询对象，所以可以对一个 ObjectQuery<(Of <(T>)>) 多次调用此方法，从而为查询指定多个路径，如下面的示例所示：

' Create a SalesOrderHeader query with two query paths,
' one that returns order items and a second that returns the
' billing and shipping addresses for each order.
Dim query As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeaders.Include("SalesOrderDetails").Include("Address")

// Create a SalesOrderHeader query with two query paths,
// one that returns order items and a second that returns the
// billing and shipping addresses for each order.
ObjectQuery<SalesOrderHeader> query =
    context.SalesOrderHeaders.Include("SalesOrderDetails").Include("Address");

Using context As New AdventureWorksEntities()
    ' Define an object query with a path that returns
    ' orders and items for a specific contact.
    Dim contact As Contact = context.Contacts.Include("SalesOrderHeaders.SalesOrderDetails").FirstOrDefault()

    Try
        ' Execute the query and display information for each item
        ' in the orders that belong to the first contact.
        For Each order As SalesOrderHeader In contact.SalesOrderHeaders
            Console.WriteLine(String.Format("PO Number: {0}", order.PurchaseOrderNumber))
            Console.WriteLine(String.Format("Order Date: {0}", order.OrderDate.ToString()))
            Console.WriteLine("Order items:")
            For Each item As SalesOrderDetail In order.SalesOrderDetails
                Console.WriteLine(String.Format("Product: {0} Quantity: {1}", _
                                                  item.ProductID.ToString(), item.OrderQty.ToString()))
            Next
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    Catch ex As EntityCommandExecutionException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // Define an object query with a path that returns
    // orders and items for a specific contact.
    Contact contact =
        context.Contacts.Include("SalesOrderHeaders.SalesOrderDetails")
        .FirstOrDefault();

    try
    {
        // Execute the query and display information for each item
        // in the orders that belong to the first contact.
        foreach (SalesOrderHeader order in contact
            .SalesOrderHeaders)
        {
            Console.WriteLine(String.Format("PO Number: {0}",
                order.PurchaseOrderNumber));
            Console.WriteLine(String.Format("Order Date: {0}",
                order.OrderDate.ToString()));
            Console.WriteLine("Order items:");
            foreach (SalesOrderDetail item in order.SalesOrderDetails)
            {
                Console.WriteLine(String.Format("Product: {0} "
                    + "Quantity: {1}", item.ProductID.ToString(),
                    item.OrderQty.ToString()));
            }
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (EntityCommandExecutionException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Shaping Query Results (Entity Framework)
Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.Intersect 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Intersect 方法
ObjectQuery

通过仅包括另一个对象查询中存在的结果，对查询结果进行限制。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Intersect ( _
    query As ObjectQuery(Of T) _
) As ObjectQuery(Of T)
public ObjectQuery<T> Intersect(
    ObjectQuery<T> query
)
public:
ObjectQuery<T>^ Intersect(
    ObjectQuery<T>^ query
)
member Intersect :
        query:ObjectQuery<'T> -> ObjectQuery<'T>

参数

query
类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个 ObjectQuery<(Of <(T>)>)，表示要包括在查询中的结果。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>) 实例，等效于根据指定的 query 应用了 INTERSECT 的原始实例。
异常 | 条件
ArgumentNullException | query 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者是空字符串。

提供的用于定义要包括的结果的 query 必须具有相同类型，或具有与 ObjectQuery<(Of <(T>)>) 兼容的类型。

在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。

生成的查询从 ObjectQuery<(Of <(T>)>) 实例（调用了它的 Intersect 方法）继承连接。

本主题中的示例基于 Adventure Works Sales Model。此示例创建一个新的 ObjectQuery<(Of <(T>)>) 对象，该对象包含两个其他查询的结果。 本主题中的示例基于 Adventure Works Sales Model。此示例创建一个新的 ObjectQuery<(Of <(T>)>) 对象，该对象包含两个其他查询的结果。

Dim productID1 = 900
Dim productID2 = 950

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products " & _
            " AS product WHERE product.ProductID > @productID1"

        Dim productQuery As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim queryString2 As String = "SELECT VALUE product FROM AdventureWorksEntities.Products " & _
            " AS product WHERE product.ProductID > @productID2"

        Dim productQuery2 As New ObjectQuery(Of Product)(queryString2, context, MergeOption.NoTracking)

        Dim productQuery3 As ObjectQuery(Of Product) = productQuery.Intersect(productQuery2)
        productQuery3.Parameters.Add(New ObjectParameter("productID1", productID1))
        productQuery3.Parameters.Add(New ObjectParameter("productID2", productID2))

        Console.WriteLine("Result of Intersect")
        Console.WriteLine("------------------")

        ' Iterate through the collection of Product items
        ' after the Intersect method was called.
        For Each result As Product In productQuery3
            Console.WriteLine("Product Name: {0}", result.ProductID)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int productID1 = 900;
int productID2 = 950;
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString = @"SELECT VALUE product
            FROM AdventureWorksEntities.Products
            AS product WHERE product.ProductID > @productID1";

        ObjectQuery<Product> productQuery =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        string queryString2 = @"SELECT VALUE product
            FROM AdventureWorksEntities.Products
            AS product WHERE product.ProductID > @productID2";

        ObjectQuery<Product> productQuery2 =
            new ObjectQuery<Product>(queryString2,
                context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery3 =
            productQuery.Intersect(productQuery2);

        productQuery3.Parameters.Add(new ObjectParameter("productID1", productID1));
        productQuery3.Parameters.Add(new ObjectParameter("productID2", productID2));

        Console.WriteLine("Result of Intersect");
        Console.WriteLine("------------------");

        // Iterate through the collection of Product items
        // after the Intersect method was called.
        foreach (Product result in productQuery3)
        {
            Console.WriteLine("Product Name: {0}", result.ProductID);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)


ObjectQuery <(Of <(T >)>) ..::.OfType <(Of <(TResultType >)>) 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
OfType
<
(Of
<
(
TResultType
>
)
>
)
方法
ObjectQuery

将查询限制为仅返回特定类型的结果。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function OfType(Of TResultType) As ObjectQuery(Of TResultType)
public ObjectQuery<TResultType> OfType<TResultType>()

public:
generic<typename TResultType>
ObjectQuery<TResultType>^ OfType()
member OfType : unit -> ObjectQuery<'TResultType>

类型参数

TResultType

在应用筛选器执行查询时，返回的 ObjectResult<(Of <(T>)>) 的类型。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
TResultType
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>) 实例，等效于应用了 OFTYPE 的原始实例。
异常 | 条件
EntitySqlException | 指定的类型无效。

OfType<(Of <(TResultType>)>) 用于按特定实体或复杂类型筛选查询结果。这支持具有对象继承的概念模型。有关更多信息，请参见Entity Data Model Inheritance (Application Scenarios)。 OfType<(Of <(TResultType>)>) 用于按特定实体或复杂类型筛选查询结果。这支持具有对象继承的概念模型。有关更多信息，请参见Entity Data Model Inheritance (Application Scenarios)。 OfType<(Of <(TResultType>)>) 用于按特定实体或复杂类型筛选查询结果。这支持具有对象继承的概念模型。有关更多信息，请参见Entity Data Model Inheritance (Application Scenarios)。

OfType<(Of <(TResultType>)>) 方法应用于具有在 EDM 中定义的实体类型或复杂类型的 ObjectQuery<(Of <(T>)>)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

How to: Create and Execute Object Queries using Table-per-Hierarchy Inheritance (Entity Framework)
How to: Create and Execute Object Queries using Table-per-Type Inheritance (Entity Framework)
Querying Data as Objects (Entity Framework)


ObjectQuery <(Of <(T >)>) ..::.OrderBy 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
OrderBy 方法
ObjectQuery

按指定条件对查询结果进行排序。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function OrderBy ( _
    keys As String, _
    ParamArray parameters As ObjectParameter() _
) As ObjectQuery(Of T)
public ObjectQuery<T> OrderBy(
    string keys,
    params ObjectParameter[] parameters
)
public:
ObjectQuery<T>^ OrderBy(
    String^ keys,
    ... array<ObjectParameter^>^ parameters
)
member OrderBy :
        keys:string *
        parameters:ObjectParameter[] -> ObjectQuery<'T>

参数

keys
类型： System String
作为结果排序依据的键列。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

此方法中使用的零个或多个参数。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>) 实例，等效于应用了 ORDER BY 的原始实例。
异常 | 条件
ArgumentNullException | keys 或 parameters 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | key 是空字符串。

嵌套查询中的结果排序无法得到保证。

OrderBy 应始终作为序列中最后一个查询生成器方法。

此示例基于 Adventure Works Sales Model。该示例创建一个新的 ObjectQuery<(Of <(T>)>) 对象，该对象包含现有查询的按 ProductID 排序的结果。 此示例基于 Adventure Works Sales Model。该示例创建一个新的 ObjectQuery<(Of <(T>)>) 对象，该对象包含现有查询的按 ProductID 排序的结果。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product"

        Dim productQuery1 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery2 As ObjectQuery(Of Product) = productQuery1.OrderBy("it.ProductID")

        ' Iterate through the collection of Product items.
        For Each result As Product In productQuery2
            Console.WriteLine("{0}", result.ProductID)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString = @"SELECT VALUE product
            FROM AdventureWorksEntities.Products AS product";

        ObjectQuery<Product> productQuery1 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery2 =
            productQuery1.OrderBy("it.ProductID");

        // Iterate through the collection of Product items.
        foreach (Product result in productQuery2)
        {
            Console.WriteLine("{0}", result.ProductID);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Query Builder Methods (Entity Framework)
Querying Data as Objects (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.Select 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Select 方法
ObjectQuery

将查询结果限制为仅包含在指定投影中定义的属性。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Select ( _
    projection As String, _
    ParamArray parameters As ObjectParameter() _
) As ObjectQuery(Of DbDataRecord)
public ObjectQuery<DbDataRecord> Select(
    string projection,
    params ObjectParameter[] parameters
)
public:
ObjectQuery<DbDataRecord^>^ Select(
    String^ projection,
    ... array<ObjectParameter^>^ parameters
)
member Select :
        projection:string *
        parameters:ObjectParameter[] -> ObjectQuery<DbDataRecord>

参数

projection
类型： System String
用于定义投影的所选属性的列表。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

此方法中使用的零个或多个参数。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
DbDataRecord
>
)
>
)

一个 DbDataRecord 类型的新 ObjectQuery<(Of <(T>)>) 实例，等效于应用了 SELECT 的原始实例。
异常 | 条件
ArgumentNullException | projection 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - parameters 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | projection 是空字符串。

Select 应用由 projection 参数指定的投影。Select 方法返回的 ObjectQuery<(Of <(T>)>) 始终为行类型 DbDataRecord。使用 SelectValue<(Of <(TResultType>)>) 方法可返回简单类型、实体类型或复杂类型的值。有关更多信息，请参见Object Queries (Entity Framework)。 Select 应用由 projection 参数指定的投影。Select 方法返回的 ObjectQuery<(Of <(T>)>) 始终为行类型 DbDataRecord。使用 SelectValue<(Of <(TResultType>)>) 方法可返回简单类型、实体类型或复杂类型的值。有关更多信息，请参见Object Queries (Entity Framework)。 Select 应用由 projection 参数指定的投影。Select 方法返回的 ObjectQuery<(Of <(T>)>) 始终为行类型 DbDataRecord。使用 SelectValue<(Of <(TResultType>)>) 方法可返回简单类型、实体类型或复杂类型的值。有关更多信息，请参见Object Queries (Entity Framework)。 Select 应用由 projection 参数指定的投影。Select 方法返回的 ObjectQuery<(Of <(T>)>) 始终为行类型 DbDataRecord。使用 SelectValue<(Of <(TResultType>)>) 方法可返回简单类型、实体类型或复杂类型的值。有关更多信息，请参见Object Queries (Entity Framework)。

当投影中包括导航属性时，查询结果包括嵌套的 DbDataRecord 对象的集合。有关更多信息，请参见How to: Navigate Relationships Using Navigation Properties (Entity Framework)。 当投影中包括导航属性时，查询结果包括嵌套的 DbDataRecord 对象的集合。有关更多信息，请参见How to: Navigate Relationships Using Navigation Properties (Entity Framework)。

此示例基于 Adventure Works Sales Model。该示例创建一个新 ObjectQuery<(Of <(T>)>)，其结果是包含此查询结果的 ProductID 字段的数据记录。 此示例基于 Adventure Works Sales Model。该示例创建一个新 ObjectQuery<(Of <(T>)>)，其结果是包含此查询结果的 ProductID 字段的数据记录。

Dim productID = 900
Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product" & _
            " WHERE product.ProductID > @productID"

        Dim productQuery1 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)
        productQuery1.Parameters.Add(New ObjectParameter("productID", productID))

        Dim productQuery2 As ObjectQuery(Of DbDataRecord) = productQuery1.Select("it.ProductID")

        For Each result As DbDataRecord In productQuery2
            Console.WriteLine("{0}", result("ProductID"))
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int productID = 900;
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString = @"SELECT VALUE product FROM
            AdventureWorksEntities.Products AS product
            WHERE product.ProductID > @productID";

        ObjectQuery<Product> productQuery1 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        productQuery1.Parameters.Add(new ObjectParameter("productID", productID));

        ObjectQuery<DbDataRecord> productQuery2 =
            productQuery1.Select("it.ProductID");

        foreach (DbDataRecord result in productQuery2)
        {
            Console.WriteLine("{0}", result["ProductID"]);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.SelectValue <(Of <(TResultType >)>) 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
SelectValue
<
(Of
<
(
TResultType
>
)
>
)
方法
ObjectQuery

将查询结果限制为仅包含投影中指定的属性。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function SelectValue(Of TResultType) ( _
    projection As String, _
    ParamArray parameters As ObjectParameter() _
) As ObjectQuery(Of TResultType)
public ObjectQuery<TResultType> SelectValue<TResultType>(
    string projection,
    params ObjectParameter[] parameters
)

public:
generic<typename TResultType>
ObjectQuery<TResultType>^ SelectValue(
    String^ projection,
    ... array<ObjectParameter^>^ parameters
)
member SelectValue :
        projection:string *
        parameters:ObjectParameter[] -> ObjectQuery<'TResultType>

类型参数

TResultType

由 SelectValue<(Of <(TResultType>)>) 方法返回的 ObjectQuery<(Of <(T>)>) 的类型。

参数

projection
类型： System String
投影列表。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

一个可选的查询参数集，在分析时这些参数应在范围内。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
TResultType
>
)
>
)

一个类型与特定投影兼容的新 ObjectQuery<(Of <(T>)>) 实例。返回的 ObjectQuery<(Of <(T>)>) 等效于应用了 SELECT VALUE 的原始实例。 一个类型与特定投影兼容的新 ObjectQuery<(Of <(T>)>) 实例。返回的 ObjectQuery<(Of <(T>)>) 等效于应用了 SELECT VALUE 的原始实例。
异常 | 条件
ArgumentNullException | projection 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - parameters 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | projection 是空字符串。

SelectValue<(Of <(TResultType>)>) 用于返回简单类型、实体类型或复杂类型的值。Select 方法用于需要行类型（而不是值类型）的投影。有关更多信息，请参见Object Queries (Entity Framework)。 SelectValue<(Of <(TResultType>)>) 用于返回简单类型、实体类型或复杂类型的值。Select 方法用于需要行类型（而不是值类型）的投影。有关更多信息，请参见Object Queries (Entity Framework)。 SelectValue<(Of <(TResultType>)>) 用于返回简单类型、实体类型或复杂类型的值。Select 方法用于需要行类型（而不是值类型）的投影。有关更多信息，请参见Object Queries (Entity Framework)。

SelectValue<(Of <(TResultType>)>) 方法应用由 projection 参数指定的投影。SelectValue<(Of <(TResultType>)>) 方法返回的 ObjectQuery<(Of <(T>)>) 必须具有与投影兼容的值类型，且必须具有与 SelectValue<(Of <(TResultType>)>) 的类型相同的类型。 SelectValue<(Of <(TResultType>)>) 方法应用由 projection 参数指定的投影。SelectValue<(Of <(TResultType>)>) 方法返回的 ObjectQuery<(Of <(T>)>) 必须具有与投影兼容的值类型，且必须具有与 SelectValue<(Of <(TResultType>)>) 的类型相同的类型。

此示例基于 Adventure Works Sales Model。该示例创建一个新的 ObjectQuery<(Of <(T>)>)，该对象包含的结果是从现有查询的结果投影的 ProductID 值的序列。 此示例基于 Adventure Works Sales Model。该示例创建一个新的 ObjectQuery<(Of <(T>)>)，该对象包含的结果是从现有查询的结果投影的 ProductID 值的序列。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product"

        Dim productQuery1 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery2 As ObjectQuery(Of Int32) = productQuery1.SelectValue(Of Int32)("it.ProductID")

        For Each result As Int32 In productQuery2
            Console.WriteLine("{0}", result)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE product FROM
                AdventureWorksEntities.Products AS product";

        ObjectQuery<Product> productQuery1 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<Int32> productQuery2 =
            productQuery1.SelectValue<Int32>("it.ProductID");

        foreach (Int32 result in productQuery2)
        {
            Console.WriteLine("{0}", result);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.Skip 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Skip 方法
ObjectQuery

按指定条件对查询结果进行排序并跳过指定数目的结果。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Skip ( _
    keys As String, _
    count As String, _
    ParamArray parameters As ObjectParameter() _
) As ObjectQuery(Of T)
public ObjectQuery<T> Skip(
    string keys,
    string count,
    params ObjectParameter[] parameters
)
public:
ObjectQuery<T>^ Skip(
    String^ keys,
    String^ count,
    ... array<ObjectParameter^>^ parameters
)
member Skip :
        keys:string *
        count:string *
        parameters:ObjectParameter[] -> ObjectQuery<'T>

参数

keys
类型： System String
作为结果排序依据的键列。
count
类型： System String
要跳过的结果数。它必须是一个常量或是一个参数引用。 要跳过的结果数。它必须是一个常量或是一个参数引用。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

一个可选的查询参数集，在分析时这些参数应在范围内。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新 ObjectQuery<(Of <(T>)>) 实例，等效于同时应用了 ORDER BY 和 SKIP 的原始实例。
异常 | 条件
ArgumentNullException | 任何参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | keys 是空字符串。 - 或 - count 是空字符串。

Skip 方法不能在 Top 方法之后使用。如果在 Skip 之后使用 Top，该方法的功能类似于 ORDER BY 子句的 LIMIT 语句。 Skip 方法不能在 Top 方法之后使用。如果在 Skip 之后使用 Top，该方法的功能类似于 ORDER BY 子句的 LIMIT 语句。

本示例先跳过查询结果（按 Product.ListPrice 排序）中的前三个 Product 对象，然后获取五个对象。

Using context As New AdventureWorksEntities()
    ' Define the parameters used to define the "page" of returned data.
    Dim skipValue As Integer = 3
    Dim limitValue As Integer = 5

    Try
        ' Define a query that returns a "page" or the full
        ' Product data using the Skip and Top methods.
        ' When Top() follows Skip(), it acts like the LIMIT statement.
        Dim query As ObjectQuery(Of Product) = _
            context.Products.Skip("it.ListPrice", "@skip", _
                New ObjectParameter("skip", skipValue)).Top("@limit", New ObjectParameter("limit", limitValue))

        ' Iterate through the page of Product items.
        For Each result As Product In query
            Console.WriteLine("ID: {0}; Name: {1}", result.ProductID, result.Name)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // Define the parameters used to define the "page" of returned data.
    int skipValue = 3;
    int limitValue = 5;

    try
    {
        // Define a query that returns a "page" or the full
        // Product data using the Skip and Top methods.
        // When Top() follows Skip(), it acts like the LIMIT statement.
        ObjectQuery<Product> query = context.Products
            .Skip("it.ListPrice", "@skip",
                    new ObjectParameter("skip", skipValue))
            .Top("@limit", new ObjectParameter("limit", limitValue));

        // Iterate through the page of Product items.
        foreach (Product result in query)
            Console.WriteLine("ID: {0}; Name: {1}",
            result.ProductID, result.Name);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)
How to: Do Paging with Skip and Limit (Entity Framework)


ObjectQuery <(Of <(T >)>) ..::.Top 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Top 方法
ObjectQuery

将查询结果限制为仅包含指定的项数。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Top ( _
    count As String, _
    ParamArray parameters As ObjectParameter() _
) As ObjectQuery(Of T)
public ObjectQuery<T> Top(
    string count,
    params ObjectParameter[] parameters
)
public:
ObjectQuery<T>^ Top(
    String^ count,
    ... array<ObjectParameter^>^ parameters
)
member Top :
        count:string *
        parameters:ObjectParameter[] -> ObjectQuery<'T>

参数

count
类型： System String
字符串形式的结果项数。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

一个可选的查询参数集，在分析时这些参数应在范围内。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>) 实例，等效于应用了 TOP 的原始实例。
异常 | 条件
ArgumentNullException | count 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | count 是空字符串。

除非对查询进行排序，否则 Top 具有不确定性。

如果在 Skip 方法之后使用 Top 方法，该方法的功能类似于 ORDER BY 子句的 LIMIT 语句。

这些示例基于 Adventure Works Sales Model。

此示例创建一个新的 ObjectQuery<(Of <(T>)>)，该对象包含现有查询的前两个结果。

Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product"

        Dim productQuery1 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery2 As ObjectQuery(Of Product) = productQuery1.Top("2")

        ' Iterate through the collection of Product items.
        For Each result As Product In productQuery2
            Console.WriteLine("{0}", result.Name)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE product FROM AdventureWorksEntities.Products AS product";

        ObjectQuery<Product> productQuery1 =
            new ObjectQuery<Product>(queryString, context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery2 = productQuery1.Top("2");

        // Iterate through the collection of Product items.
        foreach (Product result in productQuery2)
            Console.WriteLine("{0}", result.Name);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

本示例先跳过查询结果（按 Product.ListPrice 排序）中的前三个 Product 对象，然后获取五个对象。使用 Top（而不是 LIMIT）进行分页。 本示例先跳过查询结果（按 Product.ListPrice 排序）中的前三个 Product 对象，然后获取五个对象。使用 Top（而不是 LIMIT）进行分页。

Using context As New AdventureWorksEntities()
    ' Define the parameters used to define the "page" of returned data.
    Dim skipValue As Integer = 3
    Dim limitValue As Integer = 5

    Try
        ' Define a query that returns a "page" or the full
        ' Product data using the Skip and Top methods.
        ' When Top() follows Skip(), it acts like the LIMIT statement.
        Dim query As ObjectQuery(Of Product) = _
            context.Products.Skip("it.ListPrice", "@skip", _
                New ObjectParameter("skip", skipValue)).Top("@limit", New ObjectParameter("limit", limitValue))

        ' Iterate through the page of Product items.
        For Each result As Product In query
            Console.WriteLine("ID: {0}; Name: {1}", result.ProductID, result.Name)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // Define the parameters used to define the "page" of returned data.
    int skipValue = 3;
    int limitValue = 5;

    try
    {
        // Define a query that returns a "page" or the full
        // Product data using the Skip and Top methods.
        // When Top() follows Skip(), it acts like the LIMIT statement.
        ObjectQuery<Product> query = context.Products
            .Skip("it.ListPrice", "@skip",
                    new ObjectParameter("skip", skipValue))
            .Top("@limit", new ObjectParameter("limit", limitValue));

        // Iterate through the page of Product items.
        foreach (Product result in query)
            Console.WriteLine("ID: {0}; Name: {1}",
            result.ProductID, result.Name);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

How to: Page Through Query Results (Entity Framework)
Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.Union 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Union 方法
ObjectQuery

将查询结果与另一个对象查询的结果进行组合（不包括重复项）。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Union ( _
    query As ObjectQuery(Of T) _
) As ObjectQuery(Of T)
public ObjectQuery<T> Union(
    ObjectQuery<T> query
)
public:
ObjectQuery<T>^ Union(
    ObjectQuery<T>^ query
)
member Union :
        query:ObjectQuery<'T> -> ObjectQuery<'T>

参数

query
类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个 ObjectQuery<(Of <(T>)>)，表示要添加的结果。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>) 实例，等效于应用了 UNION 来添加指定 query 结果的原始实例。
异常 | 条件
ArgumentNullException | query 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Union 添加所提供的 query 的结果（不包括重复项）。

提供的用于定义要添加的结果的 query 必须具有相同类型，或具有可以提升为此 ObjectQuery<(Of <(T>)>) 的类型的类型。例如，下面的代码行是有效的，因为 DiscontinuedProducts 能够提升为 Products： 提供的用于定义要添加的结果的 query 必须具有相同类型，或具有可以提升为此 ObjectQuery<(Of <(T>)>) 的类型的类型。例如，下面的代码行是有效的，因为 DiscontinuedProducts 能够提升为 Products：

ObjectQuery<Product>.Union(ObjectQuery<DiscontinuedProduct>)

以下将引发异常，因为 Products 不能提升为 DiscontinuedProducts。

ObjectQuery <DiscontinuedProduct>.Union(ObjectQuery<Product>)

对于 DbDataRecord 类型的 ObjectQuery<(Of <(T>)>)，两个查询中的记录必须具有相同的列数，且传递的 query 的 DbDataRecord 的列中的类型必须可以提升为 ObjectQuery<(Of <(T>)>) 的 DbDataRecord 中的列的类型。

在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。

生成的查询从 ObjectQuery<(Of <(T>)>) 实例（调用了它的 Union）继承连接。

此示例基于 Adventure Works Sales Model。该示例使用 Union 方法创建新的 ObjectQuery<(Of <(T>)>) 对象。 此示例基于 Adventure Works Sales Model。该示例使用 Union 方法创建新的 ObjectQuery<(Of <(T>)>) 对象。

Dim productID = 100
Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product " & _
            " WHERE product.ProductID < @productID"
        Dim productQuery As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery2 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery3 As ObjectQuery(Of Product) = productQuery.Union(productQuery2)

        productQuery3.Parameters.Add(New ObjectParameter("productID", productID))

        Console.WriteLine("Result of Union")
        Console.WriteLine("------------------")

        ' Iterate through the collection of Product items,
        ' after the Union method was called on two queries.
        For Each result As Product In productQuery3
            Console.WriteLine("Product Name: {0}", result.ProductID)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int productID = 100;
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString = @"SELECT VALUE product
            FROM AdventureWorksEntities.Products AS product
            WHERE product.ProductID < @productID";

        ObjectQuery<Product> productQuery =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery2 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery3 =
            productQuery.Union(productQuery2);

        productQuery3.Parameters.Add(new ObjectParameter("productID", productID));

        Console.WriteLine("Result of Union");
        Console.WriteLine("------------------");

        // Iterate through the collection of Product items,
        // after the Union method was called on two queries.
        foreach (Product result in productQuery3)
        {
            Console.WriteLine("Product Name: {0}", result.ProductID);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

How to: Order Two Unionized Queries (Entity Framework)
Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.UnionAll 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
UnionAll 方法
ObjectQuery

将查询结果与另一个对象查询的结果进行组合（包括所有重复项）。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function UnionAll ( _
    query As ObjectQuery(Of T) _
) As ObjectQuery(Of T)
public ObjectQuery<T> UnionAll(
    ObjectQuery<T> query
)
public:
ObjectQuery<T>^ UnionAll(
    ObjectQuery<T>^ query
)
member UnionAll :
        query:ObjectQuery<'T> -> ObjectQuery<'T>

参数

query
类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个 ObjectQuery<(Of <(T>)>)，表示要添加的结果。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>) 实例，等效于应用了 UNION ALL 来添加指定 query 结果的原始实例。
异常 | 条件
ArgumentNullException | query 参数为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

UnionAll 添加所提供的 query 的结果（包括所有重复项）。

提供的用于定义要添加的结果的 query 必须具有相同类型，或具有可以提升为此 ObjectQuery<(Of <(T>)>) 的类型的类型。例如，下面的代码行是有效的，因为 DiscontinuedProducts 能够提升为 Products： 提供的用于定义要添加的结果的 query 必须具有相同类型，或具有可以提升为此 ObjectQuery<(Of <(T>)>) 的类型的类型。例如，下面的代码行是有效的，因为 DiscontinuedProducts 能够提升为 Products：

ObjectQuery<Product>.Union(ObjectQuery<DiscontinuedProduct>)

以下将引发异常，因为 Products 不能提升为 DiscontinuedProducts。

ObjectQuery <DiscontinuedProduct>.Union(ObjectQuery<Product>)

对于 DbDataRecord 类型的 ObjectQuery<(Of <(T>)>)，两个查询中的记录必须具有相同的列数，且传递的 query 的 DbDataRecord 的列中的类型必须可以提升为 ObjectQuery<(Of <(T>)>) 的 DbDataRecord 中的列的类型。

在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在提供的 query 中定义的参数与在 ObjectQuery<(Of <(T>)>) 实例中定义的参数合并。参数在组合后的 ObjectParameterCollection 中必须是唯一的。组合后的集合中不能有两个具有相同名称的参数。有关更多信息，请参见Query Builder Methods (Entity Framework)。

生成的查询从 ObjectQuery<(Of <(T>)>) 实例（调用了它的 UnionAll）继承连接。

本主题中的示例基于 Adventure Works Sales Model。该示例使用 UnionAll 方法创建新的 ObjectQuery<(Of <(T>)>) 对象。然后对新的 ObjectQuery<(Of <(T>)>) 对象调用 Distinct 方法，以获取此查询的唯一结果。 本主题中的示例基于 Adventure Works Sales Model。该示例使用 UnionAll 方法创建新的 ObjectQuery<(Of <(T>)>) 对象。然后对新的 ObjectQuery<(Of <(T>)>) 对象调用 Distinct 方法，以获取此查询的唯一结果。 本主题中的示例基于 Adventure Works Sales Model。该示例使用 UnionAll 方法创建新的 ObjectQuery<(Of <(T>)>) 对象。然后对新的 ObjectQuery<(Of <(T>)>) 对象调用 Distinct 方法，以获取此查询的唯一结果。

Dim productID = 100
Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products " & _
            " AS product WHERE product.ProductID < @productID"

        Dim productQuery As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery2 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery3 As ObjectQuery(Of Product) = productQuery.UnionAll(productQuery2)

        productQuery3.Parameters.Add(New ObjectParameter("productID", productID))

        Console.WriteLine("Result of UnionAll")
        Console.WriteLine("------------------")

        ' Iterate through the collection of Product items,
        ' after the UnionAll method was called on two queries.
        For Each result As Product In productQuery3
            Console.WriteLine("Product Name: {0}", result.ProductID)
        Next
        Dim productQuery4 As ObjectQuery(Of Product) = productQuery3.Distinct()

        Console.WriteLine(vbLf & "Result of Distinct")
        Console.WriteLine("------------------")

        ' Iterate through the collection of Product items.
        ' after the Distinct method was called on a query.
        For Each result As Product In productQuery4
            Console.WriteLine("Product Name: {0}", result.ProductID)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int productID = 100;
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE product FROM AdventureWorksEntities.Products
                AS product WHERE product.ProductID < @productID";

        ObjectQuery<Product> productQuery =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery2 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery3 =
            productQuery.UnionAll(productQuery2);

        productQuery3.Parameters.Add(new ObjectParameter("productID", productID));

        Console.WriteLine("Result of UnionAll");
        Console.WriteLine("------------------");

        // Iterate through the collection of Product items,
        // after the UnionAll method was called on two queries.
        foreach (Product result in productQuery3)
        {
            Console.WriteLine("Product Name: {0}", result.ProductID);
        }
        ObjectQuery<Product> productQuery4 = productQuery3.Distinct();

        Console.WriteLine("\nResult of Distinct");
        Console.WriteLine("------------------");

        // Iterate through the collection of Product items.
        // after the Distinct method was called on a query.
        foreach (Product result in productQuery4)
            Console.WriteLine("Product Name: {0}", result.ProductID);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) ..::.Where 方法

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Where 方法
ObjectQuery

将查询限制为返回与指定筛选条件匹配的结果。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function Where ( _
    predicate As String, _
    ParamArray parameters As ObjectParameter() _
) As ObjectQuery(Of T)
public ObjectQuery<T> Where(
    string predicate,
    params ObjectParameter[] parameters
)
public:
ObjectQuery<T>^ Where(
    String^ predicate,
    ... array<ObjectParameter^>^ parameters
)
member Where :
        predicate:string *
        parameters:ObjectParameter[] -> ObjectQuery<'T>

参数

predicate
类型： System String
筛选谓词。
parameters
类型：
array<
System.Data.Objects ObjectParameter
>
[]
()
[]

此方法中使用的零个或多个参数。

返回值

类型： System.Data.Objects ObjectQuery
<
(Of
<
(
T
>
)
>
)

一个新的 ObjectQuery<(Of <(T>)>) 实例，等效于应用了 WHERE 的原始实例。
异常 | 条件
ArgumentNullException | predicate 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 - 或 - parameters 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
ArgumentException | The predicate 是一个空字符串。

此示例基于 Adventure Works Sales Model。该示例创建一个新的 ObjectQuery<(Of <(T>)>) 对象，该对象包含按条件 "it.ProductID = 900" 筛选的现有查询的结果。 此示例基于 Adventure Works Sales Model。该示例创建一个新的 ObjectQuery<(Of <(T>)>) 对象，该对象包含按条件 "it.ProductID = 900" 筛选的现有查询的结果。

Dim productID = 900
Using context As New AdventureWorksEntities()
    Try
        Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product"

        Dim productQuery1 As New ObjectQuery(Of Product)(queryString, context, MergeOption.NoTracking)

        Dim productQuery2 As ObjectQuery(Of Product) = productQuery1.Where("it.ProductID = @productID")
        productQuery2.Parameters.Add(New ObjectParameter("productID", productID))

        ' Iterate through the collection of Product items.
        For Each result As Product In productQuery2
            Console.WriteLine("Product Name: {0}; Product ID: {1}", result.Name, result.ProductID)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int productID = 900;
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        string queryString =
            @"SELECT VALUE product FROM
                AdventureWorksEntities.Products AS product";

        ObjectQuery<Product> productQuery1 =
            new ObjectQuery<Product>(queryString,
                context, MergeOption.NoTracking);

        ObjectQuery<Product> productQuery2 =
            productQuery1.Where("it.ProductID = @productID");

        productQuery2.Parameters.Add(new ObjectParameter("productID", productID));

        // Iterate through the collection of Product items.
        foreach (Product result in productQuery2)
        {
            Console.WriteLine("Product Name: {0}; Product ID: {1}",
                result.Name, result.ProductID);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

How to: Filter Data (Entity Framework)
Querying Data as Objects (Entity Framework)
Query Builder Methods (Entity Framework)
Querying an E*ntity Data Model (Entity Framework Tasks)


ObjectQuery <(Of <(T >)>) 属性

ObjectQuery
<
(Of
<
(
T
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectQuery

ObjectQuery T 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectQuery T 类
System.Data.Objects 命名空间


ObjectQuery <(Of <(T >)>) ..::.Name 属性

ObjectQuery
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Name 属性
ObjectQuery

获取或设置此对象查询的名称。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property Name As String
    Get
    Set
public string Name { get; set; }
public:
property String^ Name {
    String^ get ();
    void set (String^ value);
}
member Name : string with get, set

属性值

类型： System String
一个 string 值，表示此 ObjectQuery<(Of <(T>)>) 的名称。
异常 | 条件
ArgumentException | 在设置时指定的值无效。

在构造查询生成器方法时，对象查询的名称按名称确定序列中的当前对象查询。默认情况下，查询名称为 it。在 Where(String, array<ObjectParameter>[]()[]) 方法或 SelectValue<(Of <(TResultType>)>) 方法中引用联接中的当前序列时，这十分有用。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在构造查询生成器方法时，对象查询的名称按名称确定序列中的当前对象查询。默认情况下，查询名称为 it。在 Where(String, array<ObjectParameter>[]()[]) 方法或 SelectValue<(Of <(TResultType>)>) 方法中引用联接中的当前序列时，这十分有用。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在构造查询生成器方法时，对象查询的名称按名称确定序列中的当前对象查询。默认情况下，查询名称为 it。在 Where(String, array<ObjectParameter>[]()[]) 方法或 SelectValue<(Of <(TResultType>)>) 方法中引用联接中的当前序列时，这十分有用。有关更多信息，请参见Query Builder Methods (Entity Framework)。 在构造查询生成器方法时，对象查询的名称按名称确定序列中的当前对象查询。默认情况下，查询名称为 it。在 Where(String, array<ObjectParameter>[]()[]) 方法或 SelectValue<(Of <(TResultType>)>) 方法中引用联接中的当前序列时，这十分有用。有关更多信息，请参见Query Builder Methods (Entity Framework)。

当设置 ObjectQuery<(Of <(T>)>) 的 Name 属性时，该值成为后续方法中的别名。

Name 属性的值必须以字母开头，可以包含字母、数字和下划线。

此示例将第一个 ObjectQuery<(Of <(T>)>) 的名称设置为“product”，然后在后续 OrderBy 方法中使用此别名。本主题中的示例基于 Adventure Works Sales Model。 此示例将第一个 ObjectQuery<(Of <(T>)>) 的名称设置为“product”，然后在后续 OrderBy 方法中使用此别名。本主题中的示例基于 Adventure Works Sales Model。

' Return Product objects with a standard cost
' above 10 dollars.
Dim cost = 10
Dim productQuery As ObjectQuery(Of Product) = context.Products.Where("it.StandardCost > @cost")
productQuery.Parameters.Add(New ObjectParameter("cost", cost))

' Set the Name property for the query and then
' use that name as the alias in the subsequent
' OrderBy method.
productQuery.Name = "product"
Dim filteredProduct As ObjectQuery(Of Product) = productQuery.OrderBy("product.ProductID")

int cost = 10;
// Return Product objects with a standard cost
// above 10 dollars.
ObjectQuery<Product> productQuery =
    context.Products
    .Where("it.StandardCost > @cost", new ObjectParameter("cost", cost));

// Set the Name property for the query and then
// use that name as the alias in the subsequent
// OrderBy method.
productQuery.Name = "product";
ObjectQuery<Product> filteredProduct = productQuery
    .OrderBy("product.ProductID");

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectQuery T 类
ObjectQuery T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectResult 类

ObjectResult 类
成员

表示针对概念模型的对象查询的结果的基类。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class ObjectResult _
    Implements IEnumerable, IDisposable, IListSource
public abstract class ObjectResult : IEnumerable,
    IDisposable, IListSource
public ref class ObjectResult abstract : IEnumerable,
    IDisposable, IListSource
[<AbstractClassAttribute>]
type ObjectResult =
    class
        interface IEnumerable
        interface IDisposable
        interface IListSource
    end

ObjectResult<(Of <(T>)>) 是用于针对概念模型的对象查询的结果的基类。查询结果是用类型化 ObjectResult<(Of <(T>)>) 返回的。 ObjectResult<(Of <(T>)>) 是用于针对概念模型的对象查询的结果的基类。查询结果是用类型化 ObjectResult<(Of <(T>)>) 返回的。

System.Data.Objects System.Data.Objects..::.ObjectResultObjectResult

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult 成员
System.Data.Objects 命名空间


ObjectResult 成员

ObjectResult 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectResult 类

表示针对概念模型的对象查询的结果的基类。

ObjectResult 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectResult 类
System.Data.Objects 命名空间


ObjectResult 方法

ObjectResult 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectResult 类

ObjectResult 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectResult 类
System.Data.Objects 命名空间


ObjectResult ..::.Dispose 方法

ObjectResult
.
.
::
.
Dispose 方法
ObjectResult 类

执行与释放或重置资源关联的任务。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Dispose
public abstract void Dispose()
public:
virtual void Dispose() abstract
abstract Dispose : unit -> unit

实现

有关更多信息，请参见Dispose。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult 类
ObjectResult 成员
System.Data.Objects 命名空间


ObjectResult ..::.IEnumerable ..::.GetEnumerator 方法

ObjectResult
.
.
::
.
IEnumerable
.
.
::
.
GetEnumerator 方法
ObjectResult 类

返回一个循环访问查询结果的枚举器。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Function GetEnumerator As IEnumerator
    Implements IEnumerable.GetEnumerator
IEnumerator IEnumerable.GetEnumerator()
private:
virtual IEnumerator^ GetEnumerator() sealed = IEnumerable::GetEnumerator
private abstract GetEnumerator : unit -> IEnumerator
private override GetEnumerator : unit -> IEnumerator

返回值

类型： System.Collections IEnumerator
一个循环访问查询结果的枚举器。

实现

有关更多信息，请参见GetEnumerator。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult 类
ObjectResult 成员
System.Data.Objects 命名空间


ObjectResult ..::.IListSource ..::.GetList 方法

ObjectResult
.
.
::
.
IListSource
.
.
::
.
GetList 方法
ObjectResult 类

以有利于数据绑定的格式返回结果。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Function GetList As IList
    Implements IListSource.GetList
IList IListSource.GetList()
private:
virtual IList^ GetList() sealed = IListSource::GetList
private abstract GetList : unit -> IList
private override GetList : unit -> IList

返回值

类型： System.Collections IList
实体对象的 IList。

实现

以数据绑定所用的 IList 形式返回 ObjectResult<(Of <(T>)>)。

此成员是显式的接口成员实现。只能在 ObjectQuery 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 ObjectQuery 实例强制转换为 IListSource 接口时使用它。

此方法可实现对查询结果的数据绑定。它由绑定到集合的控件进行调用。有关更多信息，请参见Binding Objects to Controls (Entity Framework)。 此方法可实现对查询结果的数据绑定。它由绑定到集合的控件进行调用。有关更多信息，请参见Binding Objects to Controls (Entity Framework)。 此方法可实现对查询结果的数据绑定。它由绑定到集合的控件进行调用。有关更多信息，请参见Binding Objects to Controls (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult 类
ObjectResult 成员
System.Data.Objects 命名空间


ObjectResult 属性

ObjectResult 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectResult 类

ObjectResult 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectResult 类
System.Data.Objects 命名空间


ObjectResult ..::.ElementType 属性

ObjectResult
.
.
::
.
ElementType 属性
ObjectResult 类

在派生类型中重写时，获取泛型 ObjectResult<(Of <(T>)>) 的类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride ReadOnly Property ElementType As Type
    Get
public abstract Type ElementType { get; }
public:
virtual property Type^ ElementType {
    Type^ get () abstract;
}
abstract ElementType : Type

属性值

类型： System Type
一个 Type，它是泛型 ObjectResult<(Of <(T>)>) 的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult 类
ObjectResult 成员
System.Data.Objects 命名空间


ObjectResult ..::.IListSource ..::.ContainsListCollection 属性

ObjectResult
.
.
::
.
IListSource
.
.
::
.
ContainsListCollection 属性
ObjectResult 类

获取一个值，该值指示查询返回的集合是否包含集合对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private ReadOnly Property ContainsListCollection As Boolean
    Implements IListSource.ContainsListCollection
    Get
bool IListSource.ContainsListCollection { get; }
private:
virtual property bool ContainsListCollection {
    bool get () sealed = IListSource::ContainsListCollection::get;
}
private abstract ContainsListCollection : bool
private override ContainsListCollection : bool

属性值

类型： System Boolean
一个布尔值。

实现

此成员是显式的接口成员实现。只能在 ObjectQuery 实例强制转换为 IListSource 接口时使用它。 此成员是显式的接口成员实现。只能在 ObjectQuery 实例强制转换为 IListSource 接口时使用它。

此属性始终返回 false，原因是查询返回的集合包含的是对象而不是集合。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult 类
ObjectResult 成员
System.Data.Objects 命名空间


ObjectResult <(Of <(T >)>) 类

ObjectResult
<
(Of
<
(
T
>
)
>
)
类
成员

以对象的可枚举集合形式表示 ObjectQuery<(Of <(T>)>) 的结果。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public NotInheritable Class ObjectResult(Of T) _
    Inherits ObjectResult _
    Implements IEnumerable(Of T), IEnumerable
public sealed class ObjectResult<T> : ObjectResult,
    IEnumerable<T>, IEnumerable

generic<typename T>
public ref class ObjectResult sealed : public ObjectResult,
    IEnumerable<T>, IEnumerable
[<SealedAttribute>]
type ObjectResult<'T> =
    class
        inherit ObjectResult
        interface IEnumerable<'T>
        interface IEnumerable
    end

类型参数

T

结果的实体类型。

此类实现 IEnumerable<(Of <(T>)>) 和 IDisposable。Execute 方法和 GetEnumerator()()() 方法返回此类的实例。 此类实现 IEnumerable<(Of <(T>)>) 和 IDisposable。Execute 方法和 GetEnumerator()()() 方法返回此类的实例。

本主题中的示例基于由Entity Data Model Wizard生成的 Adventure Works Sales Model。

下面的示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 下面的示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 下面的示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。

Using context As New AdventureWorksEntities()
    Dim query As ObjectSet(Of Product) = context.Products

    ' Execute the query and get the ObjectResult.
    Dim queryResult As ObjectResult(Of Product) = query.Execute(MergeOption.AppendOnly)
    ' Iterate through the collection of Product items.
    For Each result As Product In queryResult
        Console.WriteLine("{0}", result.Name)
    Next
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    ObjectSet<Product> query = context.Products;

    // Execute the query and get the ObjectResult.
    ObjectResult<Product> queryResult = query.Execute(MergeOption.AppendOnly);
    // Iterate through the collection of Product items.
    foreach (Product result in queryResult)
        Console.WriteLine("{0}", result.Name);
}

System.Data.Objects
System.Data.Objects..::.ObjectResult<(Of <(T>)>)ObjectResult
System.Data.Objects..::.ObjectResult<(Of <(T>)>)T
System.Data.Objects..::.ObjectResult<(Of <(T>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectResult <(Of <(T >)>) 成员

ObjectResult
<
(Of
<
(
T
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectResult

以对象的可枚举集合形式表示 ObjectQuery<(Of <(T>)>) 的结果。

ObjectResult T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectResult T 类
System.Data.Objects 命名空间


ObjectResult <(Of <(T >)>) 方法

ObjectResult
<
(Of
<
(
T
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectResult

ObjectResult T 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectResult T 类
System.Data.Objects 命名空间


ObjectResult <(Of <(T >)>) ..::.Dispose 方法

ObjectResult
<
(Of
<
(
T
>
)
>
)
.
.
::
.
Dispose 方法
ObjectResult

执行与释放或重置资源关联的任务。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Sub Dispose
public override void Dispose()
public:
virtual void Dispose() override
abstract Dispose : unit -> unit
override Dispose : unit -> unit

实现

关闭包含查询结果的 DbDataReader。

本主题中的示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 本主题中的示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 本主题中的示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 本主题中的示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。

Using context As New AdventureWorksEntities()
    Dim query As ObjectSet(Of Product) = context.Products
    Dim queryResults As ObjectResult(Of Product) = Nothing

    Dim enumerator As System.Collections.IEnumerator = Nothing
    Try
        queryResults = query.Execute(MergeOption.AppendOnly)

        ' Get the enumerator.
        enumerator = DirectCast(queryResults, System.Collections.IEnumerable).GetEnumerator()

        ' Iterate through the query results.
        While enumerator.MoveNext()
            Dim product As Product = DirectCast(enumerator.Current, Product)
            Console.WriteLine("{0}", product.Name)
        End While
        ' Dispose the enumerator
        DirectCast(enumerator, IDisposable).Dispose()
    Finally
        ' Dispose the query results and the enumerator.
        If queryResults IsNot Nothing Then
            queryResults.Dispose()
        End If
        If enumerator IsNot Nothing Then
            DirectCast(enumerator, IDisposable).Dispose()
        End If
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    ObjectSet<Product> query = context.Products;
    ObjectResult<Product> queryResults = null;

    System.Collections.IEnumerator enumerator = null;
    try
    {
        queryResults = query.Execute(MergeOption.AppendOnly);

        // Get the enumerator.
        enumerator = ((System.Collections.IEnumerable)queryResults).GetEnumerator();

        // Iterate through the query results.
        while (enumerator.MoveNext())
        {
            Product product = (Product)enumerator.Current;
            Console.WriteLine("{0}", product.Name);
        }
        // Dispose the enumerator
        ((IDisposable)enumerator).Dispose();
    }
    finally
    {
        // Dispose the query results and the enumerator.
        if (queryResults != null)
        {
            queryResults.Dispose();
        }
        if (enumerator != null)
        {
            ((IDisposable)enumerator).Dispose();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult T 类
ObjectResult T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectResult <(Of <(T >)>) ..::.GetEnumerator 方法

ObjectResult
<
(Of
<
(
T
>
)
>
)
.
.
::
.
GetEnumerator 方法
ObjectResult

返回一个循环访问查询结果的枚举器。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetEnumerator As IEnumerator(Of T)
public IEnumerator<T> GetEnumerator()
public:
virtual IEnumerator<T>^ GetEnumerator() sealed
abstract GetEnumerator : unit -> IEnumerator<'T>
override GetEnumerator : unit -> IEnumerator<'T>

返回值

类型： System.Collections.Generic IEnumerator
<
(Of
<
(
T
>
)
>
)

一个循环访问查询结果的枚举器。

实现

如果不再需要枚举器，则必须将其释放。使用 foreach 语句（在 Visual Basic 中为 For Each）确保在循环访问结果完成时正确释放枚举器。 如果不再需要枚举器，则必须将其释放。使用 foreach 语句（在 Visual Basic 中为 For Each）确保在循环访问结果完成时正确释放枚举器。

本主题中的示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 本主题中的示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 本主题中的示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。 本主题中的示例基于 Adventure Works Sales Model。该示例从 Execute 方法返回一个 ObjectResult<(Of <(T>)>)。然后，获取一个枚举器并循环访问查询结果。最后，释放枚举器和 ObjectResult<(Of <(T>)>) 对象。

Using context As New AdventureWorksEntities()
    Dim query As ObjectSet(Of Product) = context.Products
    Dim queryResults As ObjectResult(Of Product) = Nothing

    Dim enumerator As System.Collections.IEnumerator = Nothing
    Try
        queryResults = query.Execute(MergeOption.AppendOnly)

        ' Get the enumerator.
        enumerator = DirectCast(queryResults, System.Collections.IEnumerable).GetEnumerator()

        ' Iterate through the query results.
        While enumerator.MoveNext()
            Dim product As Product = DirectCast(enumerator.Current, Product)
            Console.WriteLine("{0}", product.Name)
        End While
        ' Dispose the enumerator
        DirectCast(enumerator, IDisposable).Dispose()
    Finally
        ' Dispose the query results and the enumerator.
        If queryResults IsNot Nothing Then
            queryResults.Dispose()
        End If
        If enumerator IsNot Nothing Then
            DirectCast(enumerator, IDisposable).Dispose()
        End If
    End Try
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    ObjectSet<Product> query = context.Products;
    ObjectResult<Product> queryResults = null;

    System.Collections.IEnumerator enumerator = null;
    try
    {
        queryResults = query.Execute(MergeOption.AppendOnly);

        // Get the enumerator.
        enumerator = ((System.Collections.IEnumerable)queryResults).GetEnumerator();

        // Iterate through the query results.
        while (enumerator.MoveNext())
        {
            Product product = (Product)enumerator.Current;
            Console.WriteLine("{0}", product.Name);
        }
        // Dispose the enumerator
        ((IDisposable)enumerator).Dispose();
    }
    finally
    {
        // Dispose the query results and the enumerator.
        if (queryResults != null)
        {
            queryResults.Dispose();
        }
        if (enumerator != null)
        {
            ((IDisposable)enumerator).Dispose();
        }
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult T 类
ObjectResult T 成员
System.Data.Objects 命名空间

其他资源

Querying Data as Objects (Entity Framework)


ObjectResult <(Of <(T >)>) 属性

ObjectResult
<
(Of
<
(
T
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectResult

ObjectResult T 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectResult T 类
System.Data.Objects 命名空间


ObjectResult <(Of <(T >)>) ..::.ElementType 属性

ObjectResult
<
(Of
<
(
T
>
)
>
)
.
.
::
.
ElementType 属性
ObjectResult

获取 ObjectResult<(Of <(T>)>) 的类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides ReadOnly Property ElementType As Type
    Get
public override Type ElementType { get; }
public:
virtual property Type^ ElementType {
    Type^ get () override;
}
abstract ElementType : Type
override ElementType : Type

属性值

类型： System Type
一个 Type，它是 ObjectResult<(Of <(T>)>) 的类型。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectResult T 类
ObjectResult T 成员
System.Data.Objects 命名空间


ObjectSet <(Of <(TEntity >)>) 类

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
类
成员

表示用于执行创建、读取、更新和删除操作的类型化实体集。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Class ObjectSet(Of TEntity As Class) _
    Inherits ObjectQuery(Of TEntity) _
    Implements IObjectSet(Of TEntity), IQueryable(Of TEntity),  _
    IEnumerable(Of TEntity), IQueryable, IEnumerable
public class ObjectSet<TEntity> : ObjectQuery<TEntity>,
    IObjectSet<TEntity>, IQueryable<TEntity>, IEnumerable<TEntity>,
    IQueryable, IEnumerable
where TEntity : class

generic<typename TEntity>
where TEntity : ref class
public ref class ObjectSet : public ObjectQuery<TEntity>,
    IObjectSet<TEntity>, IQueryable<TEntity>, IEnumerable<TEntity>,
    IQueryable, IEnumerable
type ObjectSet<'TEntity when 'TEntity : not struct> =
    class
        inherit ObjectQuery<'TEntity>
        interface IObjectSet<'TEntity>
        interface IQueryable<'TEntity>
        interface IEnumerable<'TEntity>
        interface IQueryable
        interface IEnumerable
    end

类型参数

TEntity

实体类型。

ObjectSet<(Of <(TEntity>)>) 类允许您操作一类型化实体集，而不必将实体集名对每一个方法调用指定为自变量。ObjectSet<(Of <(TEntity>)>) 类扩展 ObjectQuery<(Of <(T>)>) 类的功能，以便在从 ObjectContext 中访问的类型化实体集的上下文中提供对象上下文功能，如添加和删除对象。 ObjectSet<(Of <(TEntity>)>) 类允许您操作一类型化实体集，而不必将实体集名对每一个方法调用指定为自变量。ObjectSet<(Of <(TEntity>)>) 类扩展 ObjectQuery<(Of <(T>)>) 类的功能，以便在从 ObjectContext 中访问的类型化实体集的上下文中提供对象上下文功能，如添加和删除对象。

TEntity
System.Data.Objects
System.Data.Objects..::.ObjectSet<(Of <(TEntity>)>)ObjectSet
System.Data.Objects..::.ObjectSet<(Of <(TEntity>)>)TEntity
System.Data.Objects..::.ObjectSet<(Of <(TEntity>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 成员
System.Data.Objects 命名空间

其他资源

Working with ObjectSet


ObjectSet <(Of <(TEntity >)>) 成员

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectSet

表示用于执行创建、读取、更新和删除操作的类型化实体集。

ObjectSet TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectSet TEntity 类
System.Data.Objects 命名空间


ObjectSet <(Of <(TEntity >)>) 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectSet

ObjectSet TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectSet TEntity 类
System.Data.Objects 命名空间


ObjectSet <(Of <(TEntity >)>) ..::.AddObject 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
AddObject 方法
ObjectSet

将对象添加到当前实体集中的对象上下文。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub AddObject ( _
    entity As TEntity _
)
public void AddObject(
    TEntity entity
)
public:
virtual void AddObject(
    TEntity entity
) sealed
abstract AddObject :
        entity:'TEntity -> unit
override AddObject :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要添加的对象。

实现

此方法是 AddObject 方法周围的包装。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
System.Data.Objects 命名空间
AddObject

其他资源

Adding, Modifying, and Deleting Objects (Entity Framework)
Working with ObjectSet


ObjectSet <(Of <(TEntity >)>) ..::.ApplyCurrentValues 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ApplyCurrentValues 方法
ObjectSet

将标量值从提供的对象复制到具有相同键的 ObjectContext 中的对象中。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ApplyCurrentValues ( _
    currentEntity As TEntity _
) As TEntity
public TEntity ApplyCurrentValues(
    TEntity currentEntity
)
public:
TEntity ApplyCurrentValues(
    TEntity currentEntity
)
member ApplyCurrentValues :
        currentEntity:'TEntity -> 'TEntity

参数

currentEntity
类型： TEntity
具有要应用于原始对象的属性更新的已分离对象。currentEntity 的实体键必须与 ObjectContext 中某个项的 EntityKey 属性相匹配。 具有要应用于原始对象的属性更新的已分离对象。currentEntity 的实体键必须与 ObjectContext 中某个项的 EntityKey 属性相匹配。

返回值

类型： TEntity
已更新的对象。

此方法是 ApplyCurrentValues<(Of <(TEntity>)>) 方法周围的包装。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
System.Data.Objects 命名空间
ApplyCurrentValues
ApplyCurrentValues TEntity

其他资源

Working with ObjectSet
Building N-Tier Applications


ObjectSet <(Of <(TEntity >)>) ..::.ApplyOriginalValues 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
ApplyOriginalValues 方法
ObjectSet

将 ObjectStateEntry 的 OriginalValues 属性设置为与所提供对象的属性值相匹配。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ApplyOriginalValues ( _
    originalEntity As TEntity _
) As TEntity
public TEntity ApplyOriginalValues(
    TEntity originalEntity
)
public:
TEntity ApplyOriginalValues(
    TEntity originalEntity
)
member ApplyOriginalValues :
        originalEntity:'TEntity -> 'TEntity

参数

originalEntity
类型： TEntity
具有要应用于原始对象的属性更新的已分离对象。originalEntity 的实体键必须与 ObjectContext 中某个项的 EntityKey 属性相匹配。 具有要应用于原始对象的属性更新的已分离对象。originalEntity 的实体键必须与 ObjectContext 中某个项的 EntityKey 属性相匹配。

返回值

类型： TEntity
已更新的对象。

此方法是 ApplyOriginalValues<(Of <(TEntity>)>) 方法周围的包装。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
System.Data.Objects 命名空间
ApplyOriginalValues
ApplyOriginalValues TEntity

其他资源

Working with ObjectSet
Building N-Tier Applications


ObjectSet <(Of <(TEntity >)>) ..::.Attach 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法
ObjectSet

将对象或对象图附加到当前实体集中的对象上下文。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Attach ( _
    entity As TEntity _
)
public void Attach(
    TEntity entity
)
public:
virtual void Attach(
    TEntity entity
) sealed
abstract Attach :
        entity:'TEntity -> unit
override Attach :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要附加的对象。

实现

此方法是 AttachTo 方法周围的包装。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
System.Data.Objects 命名空间
AttachTo

其他资源

Working with ObjectSet


ObjectSet <(Of <(TEntity >)>) ..::.CreateObject 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
CreateObject 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectSet

创建一个新对象。

名称 说明
页首

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
System.Data.Objects 命名空间

其他资源

Working with ObjectSet


ObjectSet <(Of <(TEntity >)>) ..::.CreateObject <(Of <(T >)>) 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
CreateObject
<
(Of
<
(
T
>
)
>
)
方法
ObjectSet

创建指定类型的实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateObject(Of T As {Class, TEntity}) As T
public T CreateObject<T>()
where T : class, TEntity

public:
generic<typename T>
where T : ref class, TEntity
T CreateObject()
member CreateObject : unit -> 'T  when 'T : not struct and 'TEntity

类型参数

T

要返回的对象的类型。

返回值

类型：T
与 T 类型对应的已请求类型 T 的实例或代理类型的实例。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
CreateObject 重载
System.Data.Objects 命名空间

其他资源

Working with ObjectSet


ObjectSet <(Of <(TEntity >)>) ..::.CreateObject 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
CreateObject 方法
ObjectSet

创建一个新的实体类型对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function CreateObject As TEntity
public TEntity CreateObject()
public:
TEntity CreateObject()
member CreateObject : unit -> 'TEntity

返回值

类型： TEntity
与实体类型对应的新实体类型对象或代理类型的实例。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
CreateObject 重载
System.Data.Objects 命名空间

其他资源

Working with ObjectSet


ObjectSet <(Of <(TEntity >)>) ..::.DeleteObject 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
DeleteObject 方法
ObjectSet

将对象标记为待删除。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub DeleteObject ( _
    entity As TEntity _
)
public void DeleteObject(
    TEntity entity
)
public:
virtual void DeleteObject(
    TEntity entity
) sealed
abstract DeleteObject :
        entity:'TEntity -> unit
override DeleteObject :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
表示要删除的实体的对象。该对象可以为任何状态（Detached 除外）。 表示要删除的实体的对象。该对象可以为任何状态（Detached 除外）。

实现

此方法是 DeleteObject 方法周围的包装。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
System.Data.Objects 命名空间
DeleteObject

其他资源

Working with ObjectSet
Adding, Modifying, and Deleting Objects (Entity Framework)


ObjectSet <(Of <(TEntity >)>) ..::.Detach 方法

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Detach 方法
ObjectSet

从对象上下文移除对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Detach ( _
    entity As TEntity _
)
public void Detach(
    TEntity entity
)
public:
virtual void Detach(
    TEntity entity
) sealed
abstract Detach :
        entity:'TEntity -> unit
override Detach :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要分离的对象。仅移除 entity；如果有任何相关对象受同一 ObjectStateManager 跟踪，则不会自动分离这些对象。 要分离的对象。仅移除 entity；如果有任何相关对象受同一 ObjectStateManager 跟踪，则不会自动分离这些对象。

实现

此方法是 Detach 方法周围的包装。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
System.Data.Objects 命名空间
Detach

其他资源

Working with ObjectSet


ObjectSet <(Of <(TEntity >)>) 属性

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectSet

ObjectSet TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectSet TEntity 类
System.Data.Objects 命名空间


ObjectSet <(Of <(TEntity >)>) ..::.EntitySet 属性

ObjectSet
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
EntitySet 属性
ObjectSet

获取用此 ObjectSet<(Of <(TEntity>)>) 实例表示的实体集的元数据。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property EntitySet As EntitySet
    Get
public EntitySet EntitySet { get; }
public:
property EntitySet^ EntitySet {
    EntitySet^ get ();
}
member EntitySet : EntitySet

属性值

类型： System.Data.Metadata.Edm EntitySet
一个 EntitySet 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectSet TEntity 类
ObjectSet TEntity 成员
System.Data.Objects 命名空间

其他资源

Working with ObjectSet


ObjectStateEntry 类

ObjectStateEntry 类
成员

维护对象和关系的状态和键信息以及对象属性的更改跟踪。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class ObjectStateEntry _
    Implements IEntityChangeTracker
public abstract class ObjectStateEntry : IEntityChangeTracker
public ref class ObjectStateEntry abstract : IEntityChangeTracker
[<AbstractClassAttribute>]
type ObjectStateEntry =
    class
        interface IEntityChangeTracker
    end

维护对象或关系的 EntityState、EntityKey 值和原始值。还管理已修改属性的列表。 维护对象或关系的 EntityState、EntityKey 值和原始值。还管理已修改属性的列表。

每个实体类型关系实例都与一个 ObjectStateEntry 实例关联。仅当对象在 ObjectStateManager 中时，才与 ObjectStateEntry 关联。 每个实体类型关系实例都与一个 ObjectStateEntry 实例关联。仅当对象在 ObjectStateManager 中时，才与 ObjectStateEntry 关联。

当具有关系的对象分离时，由 ObjectStateEntry 维护的信息会减少为维护关系所需的信息。

一个 ObjectStateEntry 不能有与同一 ObjectStateManager 中的另一个 ObjectStateEntry 相同的键。

无法修改持久性实体的键值。处于未更改、已修改和已删除状态的实体是持久性实体。 无法修改持久性实体的键值。处于未更改、已修改和已删除状态的实体是持久性实体。

本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。 本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。 本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。

Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Get ObjectStateEntry from EntityKey.
        Dim stateEntry As ObjectStateEntry = _
            context.ObjectStateManager.GetObjectStateEntry(DirectCast(order, IEntityWithKey).EntityKey)

        'Get the current value of SalesOrderHeader.PurchaseOrderNumber.
        Dim rec1 As CurrentValueRecord = stateEntry.CurrentValues
        Dim oldPurchaseOrderNumber As String = _
            DirectCast(rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber")), String)

        'Change the value.
        order.PurchaseOrderNumber = "12345"
        Dim newPurchaseOrderNumber As String = _
            DirectCast(rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber")), String)

        ' Get the modified properties.
        Dim modifiedFields As IEnumerable(Of String) = stateEntry.GetModifiedProperties()
        For Each s As String In modifiedFields
            Console.WriteLine("Modified field name: {0}", s)
            Console.WriteLine("Old Value: {1}", oldPurchaseOrderNumber)
            Console.WriteLine("New Value: {2}", newPurchaseOrderNumber)
        Next

        ' Get the Entity that is associated with this ObjectStateEntry.
        Dim associatedEnity As SalesOrderHeader = DirectCast(stateEntry.Entity, SalesOrderHeader)
        Console.WriteLine("Associated Enity's ID: {0}", associatedEnity.SalesOrderID)
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    Catch ex As EntityCommandExecutionException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Get ObjectStateEntry from EntityKey.
        ObjectStateEntry stateEntry =
            context.ObjectStateManager
            .GetObjectStateEntry(((IEntityWithKey)order).EntityKey);

        //Get the current value of SalesOrderHeader.PurchaseOrderNumber.
        CurrentValueRecord rec1 = stateEntry.CurrentValues;
        string oldPurchaseOrderNumber =
            (string)rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber"));

        //Change the value.
        order.PurchaseOrderNumber = "12345";
        string newPurchaseOrderNumber =
            (string)rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber"));

        // Get the modified properties.
        IEnumerable<string> modifiedFields = stateEntry.GetModifiedProperties();
        foreach (string s in modifiedFields)
            Console.WriteLine("Modified field name: {0}\n Old Value: {1}\n New Value: {2}",
                s, oldPurchaseOrderNumber, newPurchaseOrderNumber);

        // Get the Entity that is associated with this ObjectStateEntry.
        SalesOrderHeader associatedEnity = (SalesOrderHeader)stateEntry.Entity;
        Console.WriteLine("Associated Enity's ID: {0}", associatedEnity.SalesOrderID);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (EntityCommandExecutionException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

System.Data.Objects System.Data.Objects..::.ObjectStateEntryObjectStateEntry
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry 成员

ObjectStateEntry 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateEntry 类

维护对象和关系的状态和键信息以及对象属性的更改跟踪。

ObjectStateEntry 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectStateEntry 类
System.Data.Objects 命名空间


ObjectStateEntry 方法

ObjectStateEntry 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateEntry 类

ObjectStateEntry 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectStateEntry 类
System.Data.Objects 命名空间


ObjectStateEntry ..::.AcceptChanges 方法

ObjectStateEntry
.
.
::
.
AcceptChanges 方法
ObjectStateEntry 类

接受当前值作为原始值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub AcceptChanges
public abstract void AcceptChanges()
public:
virtual void AcceptChanges() abstract
abstract AcceptChanges : unit -> unit

AcceptChanges 方法接受当前值作为原始值，并将对象的状态更改为 Unchanged。

如果实体处于 Added 状态，则 AcceptChanges 方法将临时 EntityKey 替换为常规 EntityKey，并同步对其他对象状态项中的临时键的所有引用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.ApplyCurrentValues 方法

ObjectStateEntry
.
.
::
.
ApplyCurrentValues 方法
ObjectStateEntry 类

设置项的当前值，使其与所提供对象的属性值相匹配。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub ApplyCurrentValues ( _
    currentEntity As Object _
)
public abstract void ApplyCurrentValues(
    Object currentEntity
)
public:
virtual void ApplyCurrentValues(
    Object^ currentEntity
) abstract
abstract ApplyCurrentValues :
        currentEntity:Object -> unit

参数

currentEntity
类型： System Object
具有要应用于对象的更新值的已分离对象。currentEntity 还可以是对象的实体键。 具有要应用于对象的更新值的已分离对象。currentEntity 还可以是对象的实体键。
异常 | 条件
ArgumentNullException | 当 currentEntity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
InvalidOperationException | 当所提供对象的键与 ObjectStateEntry 的 EntityKey 属性不匹配时。 - 或 - 当 ObjectStateEntry 是 EntityKey 项时。 - 或 - 当对象不在 [T:System.Data.Objects.ObjectStateManager.] 中时 - 或 - 对象处于 Added, Deleted 或 Detached 状态。 - 或 - 所提供对象的实体键无效，或者有属性更改。

ApplyCurrentValues 方法设置 ObjectStateEntry 实例的 CurrentValues 属性，以与所提供对象的属性值相匹配。

ApplyCurrentValues 方法用于应用对 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）所做的更改。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间
ApplyCurrentValues
ApplyCurrentValues TEntity

其他资源

Building N-Tier Applications
Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.ApplyOriginalValues 方法

ObjectStateEntry
.
.
::
.
ApplyOriginalValues 方法
ObjectStateEntry 类

设置条目的原始值，使其与所提供对象的属性值相匹配。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub ApplyOriginalValues ( _
    originalEntity As Object _
)
public abstract void ApplyOriginalValues(
    Object originalEntity
)
public:
virtual void ApplyOriginalValues(
    Object^ originalEntity
) abstract
abstract ApplyOriginalValues :
        originalEntity:Object -> unit

参数

originalEntity
类型： System Object
具有要应用于对象的原始值的已分离对象。original 还可以是对象的实体键。 具有要应用于对象的原始值的已分离对象。original 还可以是对象的实体键。
异常 | 条件
ArgumentNullException | 当 original 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
InvalidOperationException | 当所提供对象的键与 ObjectStateEntry 的 EntityKey 属性不匹配时。 - 或 - 当 ObjectStateEntry 是 EntityKey 项时。 - 或 - 当对象不在 [T:System.Data.Objects.ObjectStateManager.] 中时 - 或 - 对象处于 Added 或 Detached 状态。 - 或 - 所提供对象的实体键无效，或者有属性更改。

ApplyOriginalValues 方法设置 ObjectStateEntry 实例的 OriginalValues，以与所提供对象的值相匹配。所提供对象的实体键必须与 ObjectStateManager 中某个项的 EntityKey 属性相匹配。 ApplyOriginalValues 方法设置 ObjectStateEntry 实例的 OriginalValues，以与所提供对象的值相匹配。所提供对象的实体键必须与 ObjectStateManager 中某个项的 EntityKey 属性相匹配。

在将更改应用于处于 Unchanged 状态的对象的原始值时，EntityState 会更改为 Modified。

ApplyOriginalValues 方法用于将对象的原始值设置为 ObjectContext 之外的对象（如由 Web 服务接收的分离对象）的属性。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间
ApplyOriginalValues
ApplyOriginalValues TEntity

其他资源

Building N-Tier Applications
Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.ChangeState 方法

ObjectStateEntry
.
.
::
.
ChangeState 方法
ObjectStateEntry 类

将该项的状态更改为指定的 EntityState 值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub ChangeState ( _
    state As EntityState _
)
public abstract void ChangeState(
    EntityState state
)
public:
virtual void ChangeState(
    EntityState state
) abstract
abstract ChangeState :
        state:EntityState -> unit

参数

state
类型： System.Data EntityState
要为该项的 State 属性设置的 EntityState 值。
异常 | 条件
ArgumentNullException | 当 original 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
InvalidOperationException | 在尝试将状态从其他任何 [T:System.Data.EntityState.] 更改为 Detached 时 - 或 - 在尝试将实体密钥项的状态更改为 Unchanged 之外的任何状态时。

ChangeState 方法用来更改这实体对象和关系项的状态。

更改对象的状态不会影响对象图中的相关对象。

当您将实体对象项的 EntityState 更改为 Modified 时，对象的所有属性都被标记为已修改，而无论其当前或原始值。

当实体对象项的 EntityState 被更改为 Added、Deleted 或 Detached 时，也会更新该对象的关系项。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Building N-Tier Applications
Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.Delete 方法

ObjectStateEntry
.
.
::
.
Delete 方法
ObjectStateEntry 类

将实体标记为已删除。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub Delete
public abstract void Delete()
public:
virtual void Delete() abstract
abstract Delete : unit -> unit

将实体标记为 Deleted。如果实体处于 Added 状态，则会更改为 Detached 状态。当调用 SaveChanges 时，在数据源中删除该对象。 将实体标记为 Deleted。如果实体处于 Added 状态，则会更改为 Detached 状态。当调用 SaveChanges 时，在数据源中删除该对象。 将实体标记为 Deleted。如果实体处于 Added 状态，则会更改为 Detached 状态。当调用 SaveChanges 时，在数据源中删除该对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.GetModifiedProperties 方法

ObjectStateEntry
.
.
::
.
GetModifiedProperties 方法
ObjectStateEntry 类

返回自上次调用 SaveChanges 以来已更改的对象属性的名称。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function GetModifiedProperties As IEnumerable(Of String)
public abstract IEnumerable<string> GetModifiedProperties()
public:
virtual IEnumerable<String^>^ GetModifiedProperties() abstract
abstract GetModifiedProperties : unit -> IEnumerable<string>

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
String
>
)
>
)

名称的 IEnumerable<(Of <(T>)>) 集合（形式为 String）。

返回标记为 Modified 的属性名称。

本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。 本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。 本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。

Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Get ObjectStateEntry from EntityKey.
        Dim stateEntry As ObjectStateEntry = _
            context.ObjectStateManager.GetObjectStateEntry(DirectCast(order, IEntityWithKey).EntityKey)

        'Get the current value of SalesOrderHeader.PurchaseOrderNumber.
        Dim rec1 As CurrentValueRecord = stateEntry.CurrentValues
        Dim oldPurchaseOrderNumber As String = _
            DirectCast(rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber")), String)

        'Change the value.
        order.PurchaseOrderNumber = "12345"
        Dim newPurchaseOrderNumber As String = _
            DirectCast(rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber")), String)

        ' Get the modified properties.
        Dim modifiedFields As IEnumerable(Of String) = stateEntry.GetModifiedProperties()
        For Each s As String In modifiedFields
            Console.WriteLine("Modified field name: {0}", s)
            Console.WriteLine("Old Value: {1}", oldPurchaseOrderNumber)
            Console.WriteLine("New Value: {2}", newPurchaseOrderNumber)
        Next

        ' Get the Entity that is associated with this ObjectStateEntry.
        Dim associatedEnity As SalesOrderHeader = DirectCast(stateEntry.Entity, SalesOrderHeader)
        Console.WriteLine("Associated Enity's ID: {0}", associatedEnity.SalesOrderID)
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    Catch ex As EntityCommandExecutionException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Get ObjectStateEntry from EntityKey.
        ObjectStateEntry stateEntry =
            context.ObjectStateManager
            .GetObjectStateEntry(((IEntityWithKey)order).EntityKey);

        //Get the current value of SalesOrderHeader.PurchaseOrderNumber.
        CurrentValueRecord rec1 = stateEntry.CurrentValues;
        string oldPurchaseOrderNumber =
            (string)rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber"));

        //Change the value.
        order.PurchaseOrderNumber = "12345";
        string newPurchaseOrderNumber =
            (string)rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber"));

        // Get the modified properties.
        IEnumerable<string> modifiedFields = stateEntry.GetModifiedProperties();
        foreach (string s in modifiedFields)
            Console.WriteLine("Modified field name: {0}\n Old Value: {1}\n New Value: {2}",
                s, oldPurchaseOrderNumber, newPurchaseOrderNumber);

        // Get the Entity that is associated with this ObjectStateEntry.
        SalesOrderHeader associatedEnity = (SalesOrderHeader)stateEntry.Entity;
        Console.WriteLine("Associated Enity's ID: {0}", associatedEnity.SalesOrderID);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (EntityCommandExecutionException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.GetUpdatableOriginalValues 方法

ObjectStateEntry
.
.
::
.
GetUpdatableOriginalValues 方法
ObjectStateEntry 类

获取与此 ObjectStateEntry 关联的对象的原始值的可更新版本。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Function GetUpdatableOriginalValues As OriginalValueRecord
public abstract OriginalValueRecord GetUpdatableOriginalValues()
public:
virtual OriginalValueRecord^ GetUpdatableOriginalValues() abstract
abstract GetUpdatableOriginalValues : unit -> OriginalValueRecord

返回值

类型： System.Data.Objects OriginalValueRecord
对象数据的可更新原始值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.IEntityChangeTracker ..::.EntityComplexMemberChanged 方法

ObjectStateEntry
.
.
::
.
IEntityChangeTracker
.
.
::
.
EntityComplexMemberChanged 方法
ObjectStateEntry 类

通知状态管理器，复杂属性已更改。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Sub EntityComplexMemberChanged ( _
    entityMemberName As String, _
    complexObject As Object, _
    complexObjectMemberName As String _
) Implements IEntityChangeTracker.EntityComplexMemberChanged
void IEntityChangeTracker.EntityComplexMemberChanged(
    string entityMemberName,
    Object complexObject,
    string complexObjectMemberName
)
private:
virtual void EntityComplexMemberChanged(
    String^ entityMemberName,
    Object^ complexObject,
    String^ complexObjectMemberName
) sealed = IEntityChangeTracker::EntityComplexMemberChanged
private abstract EntityComplexMemberChanged :
        entityMemberName:string *
        complexObject:Object *
        complexObjectMemberName:string -> unit
private override EntityComplexMemberChanged :
        entityMemberName:string *
        complexObject:Object *
        complexObjectMemberName:string -> unit

参数

entityMemberName
类型： System String
要更改的顶级对象属性的名称。此属性返回复杂对象。 要更改的顶级对象属性的名称。此属性返回复杂对象。
complexObject
类型： System Object
包含要更改的属性的复杂对象。
complexObjectMemberName
类型： System String
复杂对象上要更改的属性的名称。

实现

异常 | 条件
ArgumentNullException | entityMemberName 的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。 - 或 - complexObjectMemberName 的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。
InvalidOperationException | complexObject 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。对象的复杂属性不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 complexObject 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。对象的复杂属性不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

提交缓存值作为复杂属性的原始值。此方法在更改属性之后调用。 提交缓存值作为复杂属性的原始值。此方法在更改属性之后调用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.IEntityChangeTracker ..::.EntityComplexMemberChanging 方法

ObjectStateEntry
.
.
::
.
IEntityChangeTracker
.
.
::
.
EntityComplexMemberChanging 方法
ObjectStateEntry 类

通知状态管理器，复杂属性有挂起的更改。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Sub EntityComplexMemberChanging ( _
    entityMemberName As String, _
    complexObject As Object, _
    complexObjectMemberName As String _
) Implements IEntityChangeTracker.EntityComplexMemberChanging
void IEntityChangeTracker.EntityComplexMemberChanging(
    string entityMemberName,
    Object complexObject,
    string complexObjectMemberName
)
private:
virtual void EntityComplexMemberChanging(
    String^ entityMemberName,
    Object^ complexObject,
    String^ complexObjectMemberName
) sealed = IEntityChangeTracker::EntityComplexMemberChanging
private abstract EntityComplexMemberChanging :
        entityMemberName:string *
        complexObject:Object *
        complexObjectMemberName:string -> unit
private override EntityComplexMemberChanging :
        entityMemberName:string *
        complexObject:Object *
        complexObjectMemberName:string -> unit

参数

entityMemberName
类型： System String
复杂属性的名称。此属性返回复杂对象。 复杂属性的名称。此属性返回复杂对象。
complexObject
类型： System Object
包含要更改的属性的复杂对象。
complexObjectMemberName
类型： System String
复杂对象上要更改的属性的名称。

实现

异常 | 条件
ArgumentNullException | entityMemberName 的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。 - 或 - complexObjectMemberName 的值为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。
InvalidOperationException | complexObject 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。对象的复杂属性不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 complexObject 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）。对象的复杂属性不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

在调用此方法时，缓存指定属性的当前值。此方法在更改属性之前调用。 在调用此方法时，缓存指定属性的当前值。此方法在更改属性之前调用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.IEntityChangeTracker ..::.EntityMemberChanged 方法

ObjectStateEntry
.
.
::
.
IEntityChangeTracker
.
.
::
.
EntityMemberChanged 方法
ObjectStateEntry 类

通知状态管理器，属性已更改。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Sub EntityMemberChanged ( _
    entityMemberName As String _
) Implements IEntityChangeTracker.EntityMemberChanged
void IEntityChangeTracker.EntityMemberChanged(
    string entityMemberName
)
private:
virtual void EntityMemberChanged(
    String^ entityMemberName
) sealed = IEntityChangeTracker::EntityMemberChanged
private abstract EntityMemberChanged :
        entityMemberName:string -> unit
private override EntityMemberChanged :
        entityMemberName:string -> unit

参数

entityMemberName
类型： System String
已更改的实体属性的名称。

实现

提交缓存的值作为属性的原始值。此方法在更改属性之前调用。 提交缓存的值作为属性的原始值。此方法在更改属性之前调用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.IEntityChangeTracker ..::.EntityMemberChanging 方法

ObjectStateEntry
.
.
::
.
IEntityChangeTracker
.
.
::
.
EntityMemberChanging 方法
ObjectStateEntry 类

通知状态管理器，属性有挂起的更改。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private Sub EntityMemberChanging ( _
    entityMemberName As String _
) Implements IEntityChangeTracker.EntityMemberChanging
void IEntityChangeTracker.EntityMemberChanging(
    string entityMemberName
)
private:
virtual void EntityMemberChanging(
    String^ entityMemberName
) sealed = IEntityChangeTracker::EntityMemberChanging
private abstract EntityMemberChanging :
        entityMemberName:string -> unit
private override EntityMemberChanging :
        entityMemberName:string -> unit

参数

entityMemberName
类型： System String
要更改的实体属性的名称。

实现

缓存属性的当前值。此方法在更改属性之前调用。 缓存属性的当前值。此方法在更改属性之前调用。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.SetModified 方法

ObjectStateEntry
.
.
::
.
SetModified 方法
ObjectStateEntry 类

将对象或关系的状态设置为 Modified。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub SetModified
public abstract void SetModified()
public:
virtual void SetModified() abstract
abstract SetModified : unit -> unit

异常 | 条件
InvalidOperationException | 状态不是 Modified 或 Unchanged。

将对象或关系的状态设置为 Modified。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.SetModifiedProperty 方法

ObjectStateEntry
.
.
::
.
SetModifiedProperty 方法
ObjectStateEntry 类

将指定属性标记为已修改。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Sub SetModifiedProperty ( _
    propertyName As String _
)
public abstract void SetModifiedProperty(
    string propertyName
)
public:
virtual void SetModifiedProperty(
    String^ propertyName
) abstract
abstract SetModifiedProperty :
        propertyName:string -> unit

参数

propertyName
类型： System String
一个实体数据模型名称。
异常 | 条件
InvalidOperationException | 状态不是 Modified 或 Unchanged。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry 属性

ObjectStateEntry 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateEntry 类

ObjectStateEntry 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ObjectStateEntry 类
System.Data.Objects 命名空间


ObjectStateEntry ..::.CurrentValues 属性

ObjectStateEntry
.
.
::
.
CurrentValues 属性
ObjectStateEntry 类

获取与此 ObjectStateEntry 关联的对象或关系的当前属性值。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride ReadOnly Property CurrentValues As CurrentValueRecord
    Get
public abstract CurrentValueRecord CurrentValues { get; }
public:
virtual property CurrentValueRecord^ CurrentValues {
    CurrentValueRecord^ get () abstract;
}
abstract CurrentValues : CurrentValueRecord

属性值

类型： System.Data.Objects CurrentValueRecord
一个 CurrentValueRecord，它包含与此 ObjectStateEntry 关联的对象或关系的当前值。

返回的 CurrentValueRecord 是对象或关系中的值的概念性架构视图。它不是副本；它委托至实体对象中的实际数据。 返回的 CurrentValueRecord 是对象或关系中的值的概念性架构视图。它不是副本；它委托至实体对象中的实际数据。

对象中的复杂类型属性以嵌套 CurrentValueRecord 对象的形式返回。

如果实体状态为已添加，则所有属性都可以进行编辑，但如果实体状态既不是已添加也不是已分离，则键值是只读的。

本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。 本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。 本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。

Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Get ObjectStateEntry from EntityKey.
        Dim stateEntry As ObjectStateEntry = _
            context.ObjectStateManager.GetObjectStateEntry(DirectCast(order, IEntityWithKey).EntityKey)

        'Get the current value of SalesOrderHeader.PurchaseOrderNumber.
        Dim rec1 As CurrentValueRecord = stateEntry.CurrentValues
        Dim oldPurchaseOrderNumber As String = _
            DirectCast(rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber")), String)

        'Change the value.
        order.PurchaseOrderNumber = "12345"
        Dim newPurchaseOrderNumber As String = _
            DirectCast(rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber")), String)

        ' Get the modified properties.
        Dim modifiedFields As IEnumerable(Of String) = stateEntry.GetModifiedProperties()
        For Each s As String In modifiedFields
            Console.WriteLine("Modified field name: {0}", s)
            Console.WriteLine("Old Value: {1}", oldPurchaseOrderNumber)
            Console.WriteLine("New Value: {2}", newPurchaseOrderNumber)
        Next

        ' Get the Entity that is associated with this ObjectStateEntry.
        Dim associatedEnity As SalesOrderHeader = DirectCast(stateEntry.Entity, SalesOrderHeader)
        Console.WriteLine("Associated Enity's ID: {0}", associatedEnity.SalesOrderID)
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    Catch ex As EntityCommandExecutionException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Get ObjectStateEntry from EntityKey.
        ObjectStateEntry stateEntry =
            context.ObjectStateManager
            .GetObjectStateEntry(((IEntityWithKey)order).EntityKey);

        //Get the current value of SalesOrderHeader.PurchaseOrderNumber.
        CurrentValueRecord rec1 = stateEntry.CurrentValues;
        string oldPurchaseOrderNumber =
            (string)rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber"));

        //Change the value.
        order.PurchaseOrderNumber = "12345";
        string newPurchaseOrderNumber =
            (string)rec1.GetValue(rec1.GetOrdinal("PurchaseOrderNumber"));

        // Get the modified properties.
        IEnumerable<string> modifiedFields = stateEntry.GetModifiedProperties();
        foreach (string s in modifiedFields)
            Console.WriteLine("Modified field name: {0}\n Old Value: {1}\n New Value: {2}",
                s, oldPurchaseOrderNumber, newPurchaseOrderNumber);

        // Get the Entity that is associated with this ObjectStateEntry.
        SalesOrderHeader associatedEnity = (SalesOrderHeader)stateEntry.Entity;
        Console.WriteLine("Associated Enity's ID: {0}", associatedEnity.SalesOrderID);
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (EntityCommandExecutionException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.Entity 属性

ObjectStateEntry
.
.
::
.
Entity 属性
ObjectStateEntry 类

获取与此 ObjectStateEntry 关联的对象。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride ReadOnly Property Entity As Object
    Get
public abstract Object Entity { get; }
public:
virtual property Object^ Entity {
    Object^ get () abstract;
}
abstract Entity : Object

属性值

类型： System Object
与此 ObjectStateEntry 关联的对象。

当 ObjectStateEntry 与 RelationshipSet 项（而不是实体类型实例）关联时，Entity 属性返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.EntityKey 属性

ObjectStateEntry
.
.
::
.
EntityKey 属性
ObjectStateEntry 类

获取与 ObjectStateEntry 关联的 EntityKey。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride Property EntityKey As EntityKey
    Get
    Friend Set
public abstract EntityKey EntityKey { get; internal set; }
public:
virtual property EntityKey^ EntityKey {
    EntityKey^ get () abstract;
    internal: void set (EntityKey^ value) abstract;
}
abstract EntityKey : EntityKey with get, internal set

属性值

类型： System.Data EntityKey
与 ObjectStateEntry 关联的 EntityKey。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.EntitySet 属性

ObjectStateEntry
.
.
::
.
EntitySet 属性
ObjectStateEntry 类

获取与此 ObjectStateEntry 关联的对象或关系的 EntitySetBase。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property EntitySet As EntitySetBase
    Get
public EntitySetBase EntitySet { get; }
public:
virtual property EntitySetBase^ EntitySet {
    EntitySetBase^ get () sealed;
}
abstract EntitySet : EntitySetBase
override EntitySet : EntitySetBase

属性值

类型： System.Data.Metadata.Edm EntitySetBase
此 ObjectStateEntry 的 EntitySetBase。

EntitySet 属性获取此 ObjectStateEntry 的 EntitySetBase，以确定 ObjectStateEntry 是否正跟踪对象或关系项。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.IEntityChangeTracker ..::.EntityState 属性

ObjectStateEntry
.
.
::
.
IEntityChangeTracker
.
.
::
.
EntityState 属性
ObjectStateEntry 类

获取 ObjectStateEntry 的 EntityState。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Private ReadOnly Property EntityState As EntityState
    Implements IEntityChangeTracker.EntityState
    Get
EntityState IEntityChangeTracker.EntityState { get; }
private:
virtual property EntityState EntityState {
    EntityState get () sealed = IEntityChangeTracker::EntityState::get;
}
private abstract EntityState : EntityState
private override EntityState : EntityState

属性值

类型： System.Data EntityState
ObjectStateEntry 的 EntityState。

实现

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.IsRelationship 属性

ObjectStateEntry
.
.
::
.
IsRelationship 属性
ObjectStateEntry 类

获取一个布尔值，该值指示此 ObjectStateEntry 是否表示一个关系。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride ReadOnly Property IsRelationship As Boolean
    Get
public abstract bool IsRelationship { get; }
public:
virtual property bool IsRelationship {
    bool get () abstract;
}
abstract IsRelationship : bool

属性值

类型： System Boolean
一个布尔值，如果此 ObjectStateEntry 表示关系，则为 true；否则为 false。

如果不存在实体，也不存在键，则此 ObjectStateEntry 表示一个关系。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.ObjectStateManager 属性

ObjectStateEntry
.
.
::
.
ObjectStateManager 属性
ObjectStateEntry 类

获取此 ObjectStateEntry 的 ObjectStateManager。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property ObjectStateManager As ObjectStateManager
    Get
public ObjectStateManager ObjectStateManager { get; }
public:
property ObjectStateManager^ ObjectStateManager {
    ObjectStateManager^ get ();
}
member ObjectStateManager : ObjectStateManager

属性值

类型： System.Data.Objects ObjectStateManager
此 ObjectStateEntry 的 ObjectStateManager。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.OriginalValues 属性

ObjectStateEntry
.
.
::
.
OriginalValues 属性
ObjectStateEntry 类

获取与此 ObjectStateEntry 关联的对象或关系的原始值的只读版本。若要获取可更新的原始值，请使用 GetUpdatableOriginalValues。 获取与此 ObjectStateEntry 关联的对象或关系的原始值的只读版本。若要获取可更新的原始值，请使用 GetUpdatableOriginalValues。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride ReadOnly Property OriginalValues As DbDataRecord
    Get
public abstract DbDataRecord OriginalValues { get; }
public:
virtual property DbDataRecord^ OriginalValues {
    DbDataRecord^ get () abstract;
}
abstract OriginalValues : DbDataRecord

属性值

类型： System.Data.Common DbDataRecord
与此 ObjectStateEntry 关联的关系集项或实体的原始值的只读版本。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateEntry ..::.RelationshipManager 属性

ObjectStateEntry
.
.
::
.
RelationshipManager 属性
ObjectStateEntry 类

返回项所表示的对象的 RelationshipManager 实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustOverride ReadOnly Property RelationshipManager As RelationshipManager
    Get
public abstract RelationshipManager RelationshipManager { get; }
public:
virtual property RelationshipManager^ RelationshipManager {
    RelationshipManager^ get () abstract;
}
abstract RelationshipManager : RelationshipManager

属性值

类型： System.Data.Objects.DataClasses RelationshipManager
一个 RelationshipManager 对象。
异常 | 条件
InvalidOperationException | 当 ObjectStateEntry 是 EntityKey 项时。 - 或 - 对象处于 Detached 状态。

RelationshipManager 属性为表示实体对象的条目只能返回 RelationshipManager。实体键和关系条目中没有关联的 RelationshipManager。 RelationshipManager 属性为表示实体对象的条目只能返回 RelationshipManager。实体键和关系条目中没有关联的 RelationshipManager。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking
Building N-Tier Applications


ObjectStateEntry ..::.State 属性

ObjectStateEntry
.
.
::
.
State 属性
ObjectStateEntry 类

获取此 ObjectStateEntry 的状态。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property State As EntityState
    Get
    Friend Set
public EntityState State { get; internal set; }
public:
virtual property EntityState State {
    EntityState get () sealed;
    internal: void set (EntityState value) sealed;
}
abstract State : EntityState with get, internal set
override State : EntityState with get, internal set

属性值

类型： System.Data EntityState
一个 EntityState，表示对象或关系的当前状态。

本主题中的示例基于 Adventure Works Sales Model。

该示例删除一个现有产品、添加一个新产品并将更改保存到数据源。该示例还演示在调用 SaveChanges 方法之前和之后的 ObjectStateEntry 的状态。 该示例删除一个现有产品、添加一个新产品并将更改保存到数据源。该示例还演示在调用 SaveChanges 方法之前和之后的 ObjectStateEntry 的状态。

' Specify the order to update.
Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Change the status of an existing order.
        order.Status = 1

        ' Delete the first item in the order.
        context.DeleteObject(order.SalesOrderDetails.First())

        ' Create a new SalesOrderDetail object.
        ' You can use the static CreateObjectName method (the Entity Framework
        ' adds this method to the generated entity types) instead of the new operator:
        ' SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        ' Guid.NewGuid(), DateTime.Today));
        Dim detail = New SalesOrderDetail With
        {
            .SalesOrderID = 0,
            .SalesOrderDetailID = 0,
            .OrderQty = 2,
            .ProductID = 750,
            .SpecialOfferID = 1,
            .UnitPrice = CDec(2171.2942),
            .UnitPriceDiscount = 0,
            .LineTotal = 0,
            .rowguid = Guid.NewGuid(),
            .ModifiedDate = DateTime.Now
        }

        order.SalesOrderDetails.Add(detail)

        ' Get the ObjectStateEntry for the order.
        Dim stateEntry As ObjectStateEntry = context.ObjectStateManager.GetObjectStateEntry(order)
        Console.WriteLine("State before SaveChanges() is called: {0}", stateEntry.State.ToString())

        ' Save changes in the object context to the database.
        Dim changes As Integer = context.SaveChanges()

        Console.WriteLine("State after SaveChanges() is called: {0}", stateEntry.State.ToString())

        Console.WriteLine(changes.ToString() & " changes saved!")
        Console.WriteLine("Updated item for order ID: " & order.SalesOrderID.ToString())

        ' Iterate through the collection of SalesOrderDetail items.
        For Each item As SalesOrderDetail In order.SalesOrderDetails
            Console.WriteLine("Item ID: {0}", item.SalesOrderDetailID.ToString())
            Console.WriteLine("Product: {0}", item.ProductID.ToString())
            Console.WriteLine("Quantity: {0}", item.OrderQty.ToString())
        Next
    Catch ex As UpdateException
        Console.WriteLine(ex.ToString())
    End Try
End Using

// Specify the order to update.
int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Change the status of an existing order.
        order.Status = 1;

        // Delete the first item in the order.
        context.DeleteObject(order.SalesOrderDetails.First());

        // Create a new SalesOrderDetail object.
        // You can use the static CreateObjectName method (the Entity Framework
        // adds this method to the generated entity types) instead of the new operator:
        // SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        //                                         Guid.NewGuid(), DateTime.Today));
        SalesOrderDetail detail = new SalesOrderDetail
        {
            SalesOrderID = 0,
            SalesOrderDetailID = 0,
            OrderQty = 2,
            ProductID = 750,
            SpecialOfferID = 1,
            UnitPrice = (decimal)2171.2942,
            UnitPriceDiscount = 0,
            LineTotal = 0,
            rowguid = Guid.NewGuid(),
            ModifiedDate = DateTime.Now
        };
        order.SalesOrderDetails.Add(detail);

        // Get the ObjectStateEntry for the order.
        ObjectStateEntry stateEntry =
            context.ObjectStateManager
            .GetObjectStateEntry(order);
        Console.WriteLine("State before SaveChanges() is called: {0}",
            stateEntry.State.ToString());

        // Save changes in the object context to the database.
        int changes = context.SaveChanges();

        Console.WriteLine("State after SaveChanges() is called: {0}",
            stateEntry.State.ToString());

        Console.WriteLine(changes.ToString() + " changes saved!");
        Console.WriteLine("Updated item for order ID: "
            + order.SalesOrderID.ToString());

        // Iterate through the collection of SalesOrderDetail items.
        foreach (SalesOrderDetail item in order.SalesOrderDetails)
        {
            Console.WriteLine("Item ID: "
                + item.SalesOrderDetailID.ToString() + "  Product: "
                + item.ProductID.ToString() + "  Quantity: "
                + item.OrderQty.ToString());
        }
    }
    catch (UpdateException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateEntry 类
ObjectStateEntry 成员
System.Data.Objects 命名空间

其他资源

Working with Entity Keys
Identity Resolution, State Management, and Change Tracking


ObjectStateManager 类

ObjectStateManager 类
成员

维护实体类型实例和关系实例的对象状态和标识管理。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Class ObjectStateManager
public class ObjectStateManager
public ref class ObjectStateManager
type ObjectStateManager =  class end

ObjectStateManager 跟踪查询结果，并提供逻辑来合并多个重叠的查询结果。它还在用户插入、删除或修改对象时执行内存中的更改跟踪，并提供用于更新的更改集。更改处理器使用此变更集来持久保存修改。 ObjectStateManager 跟踪查询结果，并提供逻辑来合并多个重叠的查询结果。它还在用户插入、删除或修改对象时执行内存中的更改跟踪，并提供用于更新的更改集。更改处理器使用此变更集来持久保存修改。 ObjectStateManager 跟踪查询结果，并提供逻辑来合并多个重叠的查询结果。它还在用户插入、删除或修改对象时执行内存中的更改跟踪，并提供用于更新的更改集。更改处理器使用此变更集来持久保存修改。

此类通常由 ObjectContext 使用，不直接用于应用程序中。

这些示例基于 Adventure Works Sales Model。

下面的示例从 ObjectContext 获取 ObjectStateManager，并使用状态管理器访问上下文中的对象。

Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim objectStateManager As ObjectStateManager = context.ObjectStateManager
        Dim stateEntry As ObjectStateEntry = Nothing

        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Attempts to retrieve ObjectStateEntry for the given EntityKey.
        Dim isPresent As Boolean = objectStateManager.TryGetObjectStateEntry(DirectCast(order, IEntityWithKey).EntityKey, stateEntry)
        If isPresent Then
            Console.WriteLine("The entity was found")
        End If
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    Catch ex As EntityCommandExecutionException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        ObjectStateManager objectStateManager = context.ObjectStateManager;
        ObjectStateEntry stateEntry = null;

        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Attempts to retrieve ObjectStateEntry for the given EntityKey.
        bool isPresent = objectStateManager.TryGetObjectStateEntry(((IEntityWithKey)order).EntityKey, out stateEntry);
        if (isPresent)
        {
            Console.WriteLine("The entity was found");
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (EntityCommandExecutionException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

下面的示例使用返回的 ObjectStateManager 的 TryGetObjectStateEntry(EntityKey, ObjectStateEntry%) 方法，根据对象的实体键获取对象。

Private Shared Sub ApplyItemUpdates(ByVal originalItem As SalesOrderDetail, ByVal updatedItem As SalesOrderDetail)
    Using context As New AdventureWorksEntities()
        context.SalesOrderDetails.Attach(updatedItem)
        ' Check if the ID is 0, if it is the item is new.
        ' In this case we need to chage the state to Added.
        If updatedItem.SalesOrderDetailID = 0 Then
            ' Because the ID is generated by the database we do not need to
            ' set updatedItem.SalesOrderDetailID.
            context.ObjectStateManager.ChangeObjectState(updatedItem, System.Data.EntityState.Added)
        Else
            ' If the SalesOrderDetailID is not 0, then the item is not new
            ' and needs to be updated. Because we already added the
            ' updated object to the context we need to apply the original values.
            ' If we attached originalItem to the context
            ' we would need to apply the current values:
            ' context.ApplyCurrentValues("SalesOrderDetails", updatedItem);
            ' Applying current or original values, changes the state
            ' of the attached object to Modified.
            context.ApplyOriginalValues("SalesOrderDetails", originalItem)
        End If
        context.SaveChanges()
    End Using
End Sub

private static void ApplyItemUpdates(SalesOrderDetail originalItem,
    SalesOrderDetail updatedItem)
{
    using (AdventureWorksEntities context =
        new AdventureWorksEntities())
    {
        context.SalesOrderDetails.Attach(updatedItem);
        // Check if the ID is 0, if it is the item is new.
        // In this case we need to chage the state to Added.
        if (updatedItem.SalesOrderDetailID == 0)
        {
            // Because the ID is generated by the database we do not need to
            // set updatedItem.SalesOrderDetailID.
            context.ObjectStateManager.ChangeObjectState(updatedItem, System.Data.EntityState.Added);
        }
        else
        {
            // If the SalesOrderDetailID is not 0, then the item is not new
            // and needs to be updated. Because we already added the
            // updated object to the context we need to apply the original values.
            // If we attached originalItem to the context
            // we would need to apply the current values:
            // context.ApplyCurrentValues("SalesOrderDetails", updatedItem);
            // Applying current or original values, changes the state
            // of the attached object to Modified.
            context.ApplyOriginalValues("SalesOrderDetails", originalItem);
        }
        context.SaveChanges();
    }
}

System.Data.Objects System.Data.Objects..::.ObjectStateManagerObjectStateManager
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 成员
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Building N-Tier Applications
Identity Resolution, State Management, and Change Tracking


ObjectStateManager 成员

ObjectStateManager 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateManager 类

维护实体类型实例和关系实例的对象状态和标识管理。

ObjectStateManager 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ObjectStateManager 类
System.Data.Objects 命名空间


ObjectStateManager 构造函数

ObjectStateManager 构造函数
ObjectStateManager 类

初始化 ObjectStateManager 类的新实例。

此 API 不兼容 CLS。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<CLSCompliantAttribute(False)> _
Public Sub New ( _
    metadataWorkspace As MetadataWorkspace _
)
[CLSCompliantAttribute(false)]
public ObjectStateManager(
    MetadataWorkspace metadataWorkspace
)
[CLSCompliantAttribute(false)]
public:
ObjectStateManager(
    MetadataWorkspace^ metadataWorkspace
)
[<CLSCompliantAttribute(false)>]
new :
        metadataWorkspace:MetadataWorkspace -> ObjectStateManager

参数

metadataWorkspace
类型： System.Data.Metadata.Edm MetadataWorkspace
提供映射和元数据信息的 MetadataWorkspace。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间


ObjectStateManager 方法

ObjectStateManager 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateManager 类

ObjectStateManager 类型公开以下成员。

名称 说明
页首

参考

ObjectStateManager 类
System.Data.Objects 命名空间


ObjectStateManager ..::.ChangeObjectState 方法

ObjectStateManager
.
.
::
.
ChangeObjectState 方法
ObjectStateManager 类

将特定对象的 ObjectStateEntry 状态更改为指定的 entityState。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ChangeObjectState ( _
    entity As Object, _
    entityState As EntityState _
) As ObjectStateEntry
public ObjectStateEntry ChangeObjectState(
    Object entity,
    EntityState entityState
)
public:
ObjectStateEntry^ ChangeObjectState(
    Object^ entity,
    EntityState entityState
)
member ChangeObjectState :
        entity:Object *
        entityState:EntityState -> ObjectStateEntry

参数

entity
类型： System Object
必须更改状态的对象。
entityState
类型： System.Data EntityState
对象的新状态。

返回值

类型： System.Data.Objects ObjectStateEntry
所提供的 entity 的 ObjectStateEntry。
异常 | 条件
ArgumentNullException | 当 entity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
InvalidOperationException | 当对象未分离并且状态管理器中没有项时。 - 或 - 在尝试将状态从其他任何 [T:System.Data.EntityState.] 更改为 Detached 时 - 或 - 当 state 不是有效的 EntityState 值时。

调用 ChangeObjectState 方法以将对象的状态更改为 Deleted 不会导致删除约束关系中的相关对象。

更改对象的状态不会影响对象图中的相关对象。

当您将实体对象项的 EntityState 更改为 Modified 时，对象的所有属性都被标记为已修改，而无论其当前或原始值。

当实体对象项的 EntityState 被更改为 Added、Deleted 或 Detached 时，也会更新该对象的关系项。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Building N-Tier Applications
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.ChangeRelationshipState 方法

ObjectStateManager
.
.
::
.
ChangeRelationshipState 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateManager 类

更改两个实体对象之间的指定关系的状态。

名称 说明
页首

对于基于外部键关联的关系，此方法不受支持。

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Building N-Tier Applications
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.ChangeRelationshipState <(Of <(TEntity >)>) 方法 (TEntity, Object, Expression <(Of <(Func <(Of <(TEntity, Object >)>) >)>), EntityState)

ObjectStateManager
.
.
::
.
ChangeRelationshipState
<
(Of
<
(
TEntity
>
)
>
)
方法 (TEntity, Object, Expression
<
(Of
<
(
Func
<
(Of
<
(
TEntity, Object
>
)
>
)
>
)
>
)
, EntityState)
ObjectStateManager 类

更改两个实体对象之间的指定关系的状态，根据两个相关对象和用于定义导航属性的 LINQ 表达式来指定关系。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ChangeRelationshipState(Of TEntity As Class) ( _
    sourceEntity As TEntity, _
    targetEntity As Object, _
    navigationPropertySelector As Expression(Of Func(Of TEntity, Object)), _
    relationshipState As EntityState _
) As ObjectStateEntry
public ObjectStateEntry ChangeRelationshipState<TEntity>(
    TEntity sourceEntity,
    Object targetEntity,
    Expression<Func<TEntity, Object>> navigationPropertySelector,
    EntityState relationshipState
)
where TEntity : class

public:
generic<typename TEntity>
where TEntity : ref class
ObjectStateEntry^ ChangeRelationshipState(
    TEntity sourceEntity,
    Object^ targetEntity,
    Expression<Func<TEntity, Object^>^>^ navigationPropertySelector,
    EntityState relationshipState
)
member ChangeRelationshipState :
        sourceEntity:'TEntity *
        targetEntity:Object *
        navigationPropertySelector:Expression<Func<'TEntity, Object>> *
        relationshipState:EntityState -> ObjectStateEntry  when 'TEntity : not struct

类型参数

TEntity

source 对象的实体类型。

参数

sourceEntity
类型：TEntity
位于关系一端的对象实例或源实体的 EntityKey。
targetEntity
类型： System Object
位于关系另一端的对象实例或目标实体的 EntityKey。
navigationPropertySelector
类型： System.Linq.Expressions Expression
<
(Of
<
(
Func
<
(Of
<
(
TEntity, Object
>
)
>
)
>
)
>
)

一个 LINQ 表示式，用于选择返回指定 target 的 source 的导航属性。
relationshipState
类型： System.Data EntityState
请求的所指定关系的 EntityState。

返回值

类型： System.Data.Objects ObjectStateEntry
已更改的关系的 ObjectStateEntry。
异常 | 条件
ArgumentNullException | 在 source、target 或 selector 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
ArgumentException | selector 格式不正确或无法返回导航属性。
InvalidOperationException | 在尝试将关系的状态更改为非 Deleted 或 Detached 的状态时，当 source 或 target 处于 Deleted 状态中时。 - 或 - 在尝试将关系的状态更改为非 Added 或 Detached 的状态时，当 source 或 target 处于 Added 状态中时。 - 或 - 当 state 不是有效的 EntityState 值时。

指定关系两端对象的项必须存在于 ObjectStateManager。

说明 说明

对于基于外部键关联的关系，此方法不受支持。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
ChangeRelationshipState 重载
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Building N-Tier Applications
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.ChangeRelationshipState 方法 (Object, Object, String, EntityState)

ObjectStateManager
.
.
::
.
ChangeRelationshipState 方法 (Object, Object, String, EntityState)
ObjectStateManager 类

更改两个实体对象之间的指定关系的状态，根据两个相关对象和导航属性的名称来指定关系。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ChangeRelationshipState ( _
    sourceEntity As Object, _
    targetEntity As Object, _
    navigationProperty As String, _
    relationshipState As EntityState _
) As ObjectStateEntry
public ObjectStateEntry ChangeRelationshipState(
    Object sourceEntity,
    Object targetEntity,
    string navigationProperty,
    EntityState relationshipState
)
public:
ObjectStateEntry^ ChangeRelationshipState(
    Object^ sourceEntity,
    Object^ targetEntity,
    String^ navigationProperty,
    EntityState relationshipState
)
member ChangeRelationshipState :
        sourceEntity:Object *
        targetEntity:Object *
        navigationProperty:string *
        relationshipState:EntityState -> ObjectStateEntry

参数

sourceEntity
类型： System Object
位于关系一端的对象实例或源实体的 EntityKey。
targetEntity
类型： System Object
位于关系另一端的对象实例或目标实体的 EntityKey。
navigationProperty
类型： System String
返回指定 target 的 source 的导航属性名称。
relationshipState
类型： System.Data EntityState
请求的所指定关系的 EntityState。

返回值

类型： System.Data.Objects ObjectStateEntry
已更改的关系的 ObjectStateEntry。
异常 | 条件
ArgumentNullException | 当 source 或 target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
InvalidOperationException | 在尝试将关系的状态更改为非 Deleted 或 Detached 的状态时，当 source 或 target 处于 Deleted 状态中时。 - 或 - 在尝试将关系的状态更改为非 Added 或 Detached 的状态时，当 source 或 target 处于 Added 状态中时。 - 或 - 当 state 不是有效的 EntityState 值时。

指定关系两端对象的项必须存在于 ObjectStateManager。

说明 说明

对于基于外部键关联的关系，此方法不受支持。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
ChangeRelationshipState 重载
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Building N-Tier Applications
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.ChangeRelationshipState 方法 (Object, Object, String, String, EntityState)

ObjectStateManager
.
.
::
.
ChangeRelationshipState 方法 (Object, Object, String, String, EntityState)
ObjectStateManager 类

更改两个实体对象之间的指定关系的状态，根据两个相关对象和关系属性来指定关系。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function ChangeRelationshipState ( _
    sourceEntity As Object, _
    targetEntity As Object, _
    relationshipName As String, _
    targetRoleName As String, _
    relationshipState As EntityState _
) As ObjectStateEntry
public ObjectStateEntry ChangeRelationshipState(
    Object sourceEntity,
    Object targetEntity,
    string relationshipName,
    string targetRoleName,
    EntityState relationshipState
)
public:
ObjectStateEntry^ ChangeRelationshipState(
    Object^ sourceEntity,
    Object^ targetEntity,
    String^ relationshipName,
    String^ targetRoleName,
    EntityState relationshipState
)
member ChangeRelationshipState :
        sourceEntity:Object *
        targetEntity:Object *
        relationshipName:string *
        targetRoleName:string *
        relationshipState:EntityState -> ObjectStateEntry

参数

sourceEntity
类型： System Object
位于关系一端的对象实例或源实体的 EntityKey。
targetEntity
类型： System Object
位于关系另一端的对象实例或目标实体的 EntityKey。
relationshipName
类型： System String
关系的名称。
targetRoleName
类型： System String
关系的 target 端的角色名称。
relationshipState
类型： System.Data EntityState
请求的所指定关系的 EntityState。

返回值

类型： System.Data.Objects ObjectStateEntry
已更改的关系的 ObjectStateEntry。
异常 | 条件
ArgumentNullException | 当 source 或 target 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
InvalidOperationException | 在尝试将关系的状态更改为非 Deleted 或 Detached 的状态时，当 source 或 target 处于 Deleted 状态中时。 - 或 - 在尝试将关系的状态更改为非 Added 或 Detached 的状态时，当 source 或 target 处于 Added 状态中时。 - 或 - 当 state 不是有效的 EntityState 值时。

指定关系两端对象的项必须存在于 ObjectStateManager。

说明 说明

对于基于外部键关联的关系，此方法不受支持。有关更多信息，请参见Defining and Managing Relationships 对于基于外部键关联的关系，此方法不受支持。有关更多信息，请参见Defining and Managing Relationships

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
ChangeRelationshipState 重载
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Building N-Tier Applications
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.GetObjectStateEntries 方法

ObjectStateManager
.
.
::
.
GetObjectStateEntries 方法
ObjectStateManager 类

返回具有给定状态的对象或关系的 ObjectStateEntry 对象的集合。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetObjectStateEntries ( _
    state As EntityState _
) As IEnumerable(Of ObjectStateEntry)
public IEnumerable<ObjectStateEntry> GetObjectStateEntries(
    EntityState state
)
public:
IEnumerable<ObjectStateEntry^>^ GetObjectStateEntries(
    EntityState state
)
member GetObjectStateEntries :
        state:EntityState -> IEnumerable<ObjectStateEntry>

参数

state
类型： System.Data EntityState
用于筛选返回的 ObjectStateEntry 对象的 EntityState。

返回值

类型： System.Collections.Generic IEnumerable
<
(Of
<
(
ObjectStateEntry
>
)
>
)

具有给定 EntityState 的 ObjectStateEntry 对象的集合。
异常 | 条件
ArgumentException | 当 state 为 Detached 时。

EntityState 是一个位字段，因此，通过对多个 EntityState 值执行按位或操作，在一次调用中即可检索多个状态的状态项。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.GetObjectStateEntry 方法

ObjectStateManager
.
.
::
.
GetObjectStateEntry 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateManager 类

返回特定对象或关系项的 ObjectStateEntry。

名称 说明
页首

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Building N-Tier Applications
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.GetObjectStateEntry 方法 (EntityKey)

ObjectStateManager
.
.
::
.
GetObjectStateEntry 方法 (EntityKey)
ObjectStateManager 类

返回具有指定键的对象或关系项的 ObjectStateEntry。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetObjectStateEntry ( _
    key As EntityKey _
) As ObjectStateEntry
public ObjectStateEntry GetObjectStateEntry(
    EntityKey key
)
public:
ObjectStateEntry^ GetObjectStateEntry(
    EntityKey^ key
)
member GetObjectStateEntry :
        key:EntityKey -> ObjectStateEntry

参数

key
类型： System.Data EntityKey
EntityKey。

返回值

类型： System.Data.Objects ObjectStateEntry
给定的 EntityKey 对应的 ObjectStateEntry。
异常 | 条件
ArgumentNullException | 当 key 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
ArgumentException | 在状态管理器中找不到指定的 key 时。
InvalidOperationException | ObjectStateManager 中不存在具有指定 EntityKey 的实体。

使用 TryGetObjectStateEntry(EntityKey, ObjectStateEntry%) 方法可返回 ObjectStateEntry 对象，而不必处理 GetObjectStateEntry(EntityKey) 方法引发的 InvalidOperationException。

本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。 本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。 本主题中的示例基于 Adventure Works Sales Model。该示例从 ObjectStateManager 获取给定 EntityKey 的 ObjectStateEntry。然后，它获取 SalesOrderHeader.PurchaseOrderNumber 属性的当前值，更改该属性的值并枚举已修改属性的集合。

' Specify the order to update.
Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Change the status of an existing order.
        order.Status = 1

        ' Delete the first item in the order.
        context.DeleteObject(order.SalesOrderDetails.First())

        ' Create a new SalesOrderDetail object.
        ' You can use the static CreateObjectName method (the Entity Framework
        ' adds this method to the generated entity types) instead of the new operator:
        ' SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        ' Guid.NewGuid(), DateTime.Today));
        Dim detail = New SalesOrderDetail With
        {
            .SalesOrderID = 0,
            .SalesOrderDetailID = 0,
            .OrderQty = 2,
            .ProductID = 750,
            .SpecialOfferID = 1,
            .UnitPrice = CDec(2171.2942),
            .UnitPriceDiscount = 0,
            .LineTotal = 0,
            .rowguid = Guid.NewGuid(),
            .ModifiedDate = DateTime.Now
        }

        order.SalesOrderDetails.Add(detail)

        ' Get the ObjectStateEntry for the order.
        Dim stateEntry As ObjectStateEntry = context.ObjectStateManager.GetObjectStateEntry(order)
        Console.WriteLine("State before SaveChanges() is called: {0}", stateEntry.State.ToString())

        ' Save changes in the object context to the database.
        Dim changes As Integer = context.SaveChanges()

        Console.WriteLine("State after SaveChanges() is called: {0}", stateEntry.State.ToString())

        Console.WriteLine(changes.ToString() & " changes saved!")
        Console.WriteLine("Updated item for order ID: " & order.SalesOrderID.ToString())

        ' Iterate through the collection of SalesOrderDetail items.
        For Each item As SalesOrderDetail In order.SalesOrderDetails
            Console.WriteLine("Item ID: {0}", item.SalesOrderDetailID.ToString())
            Console.WriteLine("Product: {0}", item.ProductID.ToString())
            Console.WriteLine("Quantity: {0}", item.OrderQty.ToString())
        Next
    Catch ex As UpdateException
        Console.WriteLine(ex.ToString())
    End Try
End Using

// Specify the order to update.
int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Change the status of an existing order.
        order.Status = 1;

        // Delete the first item in the order.
        context.DeleteObject(order.SalesOrderDetails.First());

        // Create a new SalesOrderDetail object.
        // You can use the static CreateObjectName method (the Entity Framework
        // adds this method to the generated entity types) instead of the new operator:
        // SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        //                                         Guid.NewGuid(), DateTime.Today));
        SalesOrderDetail detail = new SalesOrderDetail
        {
            SalesOrderID = 0,
            SalesOrderDetailID = 0,
            OrderQty = 2,
            ProductID = 750,
            SpecialOfferID = 1,
            UnitPrice = (decimal)2171.2942,
            UnitPriceDiscount = 0,
            LineTotal = 0,
            rowguid = Guid.NewGuid(),
            ModifiedDate = DateTime.Now
        };
        order.SalesOrderDetails.Add(detail);

        // Get the ObjectStateEntry for the order.
        ObjectStateEntry stateEntry =
            context.ObjectStateManager
            .GetObjectStateEntry(order);
        Console.WriteLine("State before SaveChanges() is called: {0}",
            stateEntry.State.ToString());

        // Save changes in the object context to the database.
        int changes = context.SaveChanges();

        Console.WriteLine("State after SaveChanges() is called: {0}",
            stateEntry.State.ToString());

        Console.WriteLine(changes.ToString() + " changes saved!");
        Console.WriteLine("Updated item for order ID: "
            + order.SalesOrderID.ToString());

        // Iterate through the collection of SalesOrderDetail items.
        foreach (SalesOrderDetail item in order.SalesOrderDetails)
        {
            Console.WriteLine("Item ID: "
                + item.SalesOrderDetailID.ToString() + "  Product: "
                + item.ProductID.ToString() + "  Quantity: "
                + item.OrderQty.ToString());
        }
    }
    catch (UpdateException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
GetObjectStateEntry 重载
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.GetObjectStateEntry 方法 (Object)

ObjectStateManager
.
.
::
.
GetObjectStateEntry 方法 (Object)
ObjectStateManager 类

返回指定对象的 ObjectStateEntry。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetObjectStateEntry ( _
    entity As Object _
) As ObjectStateEntry
public ObjectStateEntry GetObjectStateEntry(
    Object entity
)
public:
ObjectStateEntry^ GetObjectStateEntry(
    Object^ entity
)
member GetObjectStateEntry :
        entity:Object -> ObjectStateEntry

参数

entity
类型： System Object
检索到的 ObjectStateEntry 所属的 Object。

返回值

类型： System.Data.Objects ObjectStateEntry
给定的 Object 对应的 ObjectStateEntry。
异常 | 条件
InvalidOperationException | ObjectStateManager 中不存在具有指定 Object 的实体。

使用 TryGetObjectStateEntry(Object, ObjectStateEntry%) 方法可返回 ObjectStateEntry 对象，而不必处理 GetObjectStateEntry(Object) 方法引发的 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
GetObjectStateEntry 重载
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.GetRelationshipManager 方法

ObjectStateManager
.
.
::
.
GetRelationshipManager 方法
ObjectStateManager 类

返回指定对象所使用的 RelationshipManager。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function GetRelationshipManager ( _
    entity As Object _
) As RelationshipManager
public RelationshipManager GetRelationshipManager(
    Object entity
)
public:
RelationshipManager^ GetRelationshipManager(
    Object^ entity
)
member GetRelationshipManager :
        entity:Object -> RelationshipManager

参数

entity
类型： System Object
要为其返回 RelationshipManager 的对象。

返回值

类型： System.Data.Objects.DataClasses RelationshipManager
指定对象的 RelationshipManager。
异常 | 条件
InvalidOperationException | 当不能为指定的 entity 返回 RelationshipManager 时。

调用 GetRelationshipManager 方法与调用 TryGetRelationshipManager 方法相同，不同之处在于此方法会引发异常而非返回 false。

调用 TryGetRelationshipManager 方法以避免处理无法为提供的实体返回 RelationshipManager 时出现的 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.TryGetObjectStateEntry 方法

ObjectStateManager
.
.
::
.
TryGetObjectStateEntry 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateManager 类

尝试返回特定对象或关系项的 ObjectStateEntry 对象。

名称 说明
页首

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.TryGetObjectStateEntry 方法 (EntityKey, ObjectStateEntry%)

ObjectStateManager
.
.
::
.
TryGetObjectStateEntry 方法 (EntityKey, ObjectStateEntry%)
ObjectStateManager 类

尝试检索具有指定 EntityKey 的对象或关系的对应 ObjectStateEntry。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function TryGetObjectStateEntry ( _
    key As EntityKey, _
    <OutAttribute> ByRef entry As ObjectStateEntry _
) As Boolean
public bool TryGetObjectStateEntry(
    EntityKey key,
    out ObjectStateEntry entry
)
public:
bool TryGetObjectStateEntry(
    EntityKey^ key,
    [OutAttribute] ObjectStateEntry^% entry
)
member TryGetObjectStateEntry :
        key:EntityKey *
        entry:ObjectStateEntry byref -> bool

参数

key
类型： System.Data EntityKey
给定的 EntityKey。
entry
类型： System.Data.Objects ObjectStateEntry %
此方法返回时，包含给定 EntityKey 的 ObjectStateEntry。此参数以未初始化状态传递。

返回值

类型： System Boolean
一个布尔值，如果对给定的 EntityKey 具有对应的 ObjectStateEntry，则为 true；否则为 false。
异常 | 条件
ArgumentNullException | 为 key 提供了一个 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）（在 Visual Basic 中为 Nothing）值。

使用 TryGetObjectStateEntry(EntityKey, ObjectStateEntry%) 方法可返回 ObjectStateEntry，而不必处理 GetObjectStateEntry(EntityKey) 方法引发的 InvalidOperationException。

本主题中的示例基于 Adventure Works Sales Model。

该示例尝试检索给定的 EntityKey 的对应 ObjectStateEntry。

Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim objectStateManager As ObjectStateManager = context.ObjectStateManager
        Dim stateEntry As ObjectStateEntry = Nothing

        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Attempts to retrieve ObjectStateEntry for the given EntityKey.
        Dim isPresent As Boolean = objectStateManager.TryGetObjectStateEntry(DirectCast(order, IEntityWithKey).EntityKey, stateEntry)
        If isPresent Then
            Console.WriteLine("The entity was found")
        End If
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    Catch ex As EntityCommandExecutionException
        Console.WriteLine(ex.ToString())
    End Try
End Using

int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        ObjectStateManager objectStateManager = context.ObjectStateManager;
        ObjectStateEntry stateEntry = null;

        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Attempts to retrieve ObjectStateEntry for the given EntityKey.
        bool isPresent = objectStateManager.TryGetObjectStateEntry(((IEntityWithKey)order).EntityKey, out stateEntry);
        if (isPresent)
        {
            Console.WriteLine("The entity was found");
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (EntityCommandExecutionException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

下面的示例使用返回的 ObjectStateManager 的 TryGetObjectStateEntry(EntityKey, ObjectStateEntry%) 方法，根据对象的实体键获取对象。

Private Shared Sub ApplyItemUpdates(ByVal originalItem As SalesOrderDetail, ByVal updatedItem As SalesOrderDetail)
    Using context As New AdventureWorksEntities()
        context.SalesOrderDetails.Attach(updatedItem)
        ' Check if the ID is 0, if it is the item is new.
        ' In this case we need to chage the state to Added.
        If updatedItem.SalesOrderDetailID = 0 Then
            ' Because the ID is generated by the database we do not need to
            ' set updatedItem.SalesOrderDetailID.
            context.ObjectStateManager.ChangeObjectState(updatedItem, System.Data.EntityState.Added)
        Else
            ' If the SalesOrderDetailID is not 0, then the item is not new
            ' and needs to be updated. Because we already added the
            ' updated object to the context we need to apply the original values.
            ' If we attached originalItem to the context
            ' we would need to apply the current values:
            ' context.ApplyCurrentValues("SalesOrderDetails", updatedItem);
            ' Applying current or original values, changes the state
            ' of the attached object to Modified.
            context.ApplyOriginalValues("SalesOrderDetails", originalItem)
        End If
        context.SaveChanges()
    End Using
End Sub

private static void ApplyItemUpdates(SalesOrderDetail originalItem,
    SalesOrderDetail updatedItem)
{
    using (AdventureWorksEntities context =
        new AdventureWorksEntities())
    {
        context.SalesOrderDetails.Attach(updatedItem);
        // Check if the ID is 0, if it is the item is new.
        // In this case we need to chage the state to Added.
        if (updatedItem.SalesOrderDetailID == 0)
        {
            // Because the ID is generated by the database we do not need to
            // set updatedItem.SalesOrderDetailID.
            context.ObjectStateManager.ChangeObjectState(updatedItem, System.Data.EntityState.Added);
        }
        else
        {
            // If the SalesOrderDetailID is not 0, then the item is not new
            // and needs to be updated. Because we already added the
            // updated object to the context we need to apply the original values.
            // If we attached originalItem to the context
            // we would need to apply the current values:
            // context.ApplyCurrentValues("SalesOrderDetails", updatedItem);
            // Applying current or original values, changes the state
            // of the attached object to Modified.
            context.ApplyOriginalValues("SalesOrderDetails", originalItem);
        }
        context.SaveChanges();
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
TryGetObjectStateEntry 重载
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Building N-Tier Applications
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.TryGetObjectStateEntry 方法 (Object, ObjectStateEntry%)

ObjectStateManager
.
.
::
.
TryGetObjectStateEntry 方法 (Object, ObjectStateEntry%)
ObjectStateManager 类

尝试检索指定的 Object 的对应 ObjectStateEntry。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function TryGetObjectStateEntry ( _
    entity As Object, _
    <OutAttribute> ByRef entry As ObjectStateEntry _
) As Boolean
public bool TryGetObjectStateEntry(
    Object entity,
    out ObjectStateEntry entry
)
public:
bool TryGetObjectStateEntry(
    Object^ entity,
    [OutAttribute] ObjectStateEntry^% entry
)
member TryGetObjectStateEntry :
        entity:Object *
        entry:ObjectStateEntry byref -> bool

参数

entity
类型： System Object
检索到的 ObjectStateEntry 所属的 Object。
entry
类型： System.Data.Objects ObjectStateEntry %
此方法返回时，包含给定 EntityKey 的 ObjectStateEntry。此参数传递时未经初始化。

返回值

类型： System Boolean
一个布尔值，如果对给定的对象具有对应的 ObjectStateEntry，则该值为 true；否则为 false。

使用 TryGetObjectStateEntry(Object, ObjectStateEntry%) 方法可返回 ObjectStateEntry，而不必处理 GetObjectStateEntry(Object) 方法引发的 InvalidOperationException。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
TryGetObjectStateEntry 重载
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Identity Resolution, State Management, and Change Tracking


ObjectStateManager ..::.TryGetRelationshipManager 方法

ObjectStateManager
.
.
::
.
TryGetRelationshipManager 方法
ObjectStateManager 类

返回指定对象所使用的 RelationshipManager。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Function TryGetRelationshipManager ( _
    entity As Object, _
    <OutAttribute> ByRef relationshipManager As RelationshipManager _
) As Boolean
public bool TryGetRelationshipManager(
    Object entity,
    out RelationshipManager relationshipManager
)
public:
bool TryGetRelationshipManager(
    Object^ entity,
    [OutAttribute] RelationshipManager^% relationshipManager
)
member TryGetRelationshipManager :
        entity:Object *
        relationshipManager:RelationshipManager byref -> bool

参数

entity
类型： System Object
要为其返回 RelationshipManager 的对象。
relationshipManager
类型： System.Data.Objects.DataClasses RelationshipManager %
此方法返回时，将包含 entity 的 RelationshipManager。

返回值

类型： System Boolean
如果为所提供的 entity 返回 RelationshipManager 实例，则为 true；否则为 false。

GetRelationshipManager 方法用于获取用于持久性未知的对象的 RelationshipManager。当对象实现 IEntityWithRelationships 或从 EntityObject 继承时，必须从 RelationshipManager 属性访问 RelationshipManager。 GetRelationshipManager 方法用于获取用于持久性未知的对象的 RelationshipManager。当对象实现 IEntityWithRelationships 或从 EntityObject 继承时，必须从 RelationshipManager 属性访问 RelationshipManager。

在对象未处于 Detached 时不能返回 RelationshipManager。

调用 TryGetRelationshipManager 方法与调用 GetRelationshipManager 方法相同，不同之处在于此方法会返回 false 而非引发异常。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Identity Resolution, State Management, and Change Tracking


ObjectStateManager 属性

ObjectStateManager 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateManager 类

ObjectStateManager 类型公开以下成员。

名称 说明
页首

参考

ObjectStateManager 类
System.Data.Objects 命名空间


ObjectStateManager ..::.MetadataWorkspace 属性

ObjectStateManager
.
.
::
.
MetadataWorkspace 属性
ObjectStateManager 类

获取与此状态管理器关联的 MetadataWorkspace。

此 API 不兼容 CLS。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<CLSCompliantAttribute(False)> _
Public ReadOnly Property MetadataWorkspace As MetadataWorkspace
    Get
[CLSCompliantAttribute(false)]
public MetadataWorkspace MetadataWorkspace { get; }
[CLSCompliantAttribute(false)]
public:
property MetadataWorkspace^ MetadataWorkspace {
    MetadataWorkspace^ get ();
}
[<CLSCompliantAttribute(false)>]
member MetadataWorkspace : MetadataWorkspace

属性值

类型： System.Data.Metadata.Edm MetadataWorkspace
与此 ObjectStateManager 关联的 MetadataWorkspace。

MetadataWorkspace 类作为中心编程接口，可用于在运行时和应用程序上下文中与 Entity Data Model (EDM) 元数据交互。有关更多信息，请参见Metadata Workspace。 MetadataWorkspace 类作为中心编程接口，可用于在运行时和应用程序上下文中与 Entity Data Model (EDM) 元数据交互。有关更多信息，请参见Metadata Workspace。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间


ObjectStateManager 事件

ObjectStateManager 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ObjectStateManager 类

ObjectStateManager 类型公开以下成员。

名称 说明
页首

参考

ObjectStateManager 类
System.Data.Objects 命名空间


ObjectStateManager ..::.ObjectStateManagerChanged 事件

ObjectStateManager
.
.
::
.
ObjectStateManagerChanged 事件
ObjectStateManager 类

在从状态管理器中添加或移除实体时发生。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Event ObjectStateManagerChanged As CollectionChangeEventHandler
public event CollectionChangeEventHandler ObjectStateManagerChanged
public:
 event CollectionChangeEventHandler^ ObjectStateManagerChanged {
    void add (CollectionChangeEventHandler^ value);
    void remove (CollectionChangeEventHandler^ value);
}
member ObjectStateManagerChanged : IEvent<CollectionChangeEventHandler,
    CollectionChangeEventArgs>

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ObjectStateManager 类
ObjectStateManager 成员
System.Data.Objects 命名空间

其他资源

Defining and Managing Relationships
Building N-Tier Applications
Identity Resolution, State Management, and Change Tracking


OriginalValueRecord 类

OriginalValueRecord 类
成员

提供对对象数据的原始值的访问。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class OriginalValueRecord _
    Inherits DbUpdatableDataRecord
public abstract class OriginalValueRecord : DbUpdatableDataRecord
public ref class OriginalValueRecord abstract : public DbUpdatableDataRecord
[<AbstractClassAttribute>]
type OriginalValueRecord =
    class
        inherit DbUpdatableDataRecord
    end

System.Data.Objects System.Data.Objects..::.OriginalValueRecordOriginalValueRecord
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

OriginalValueRecord 成员
System.Data.Objects 命名空间


OriginalValueRecord 成员

OriginalValueRecord 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OriginalValueRecord 类

提供对对象数据的原始值的访问。

OriginalValueRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

OriginalValueRecord 类
System.Data.Objects 命名空间


OriginalValueRecord 方法

OriginalValueRecord 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OriginalValueRecord 类

OriginalValueRecord 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

OriginalValueRecord 类
System.Data.Objects 命名空间


OriginalValueRecord ..::.GetEvents 方法

OriginalValueRecord
.
.
::
.
GetEvents 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OriginalValueRecord 类

名称 说明
页首

参考

OriginalValueRecord 类
OriginalValueRecord 成员
System.Data.Objects 命名空间


OriginalValueRecord ..::.GetProperties 方法

OriginalValueRecord
.
.
::
.
GetProperties 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OriginalValueRecord 类

名称 说明
页首

参考

OriginalValueRecord 类
OriginalValueRecord 成员
System.Data.Objects 命名空间


OriginalValueRecord 属性

OriginalValueRecord 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OriginalValueRecord 类

OriginalValueRecord 类型公开以下成员。

名称 说明
页首

参考

OriginalValueRecord 类
System.Data.Objects 命名空间


OriginalValueRecord ..::.Item 属性

OriginalValueRecord
.
.
::
.
Item 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
OriginalValueRecord 类

获取一个字段值。

名称 说明
页首

参考

OriginalValueRecord 类
OriginalValueRecord 成员
System.Data.Objects 命名空间


ProxyDataContractResolver 类

ProxyDataContractResolver 类
成员

此类可帮助将为持久性未知数据类创建的代理类型解析为持久性未知对象的实际类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Class ProxyDataContractResolver _
    Inherits DataContractResolver
public class ProxyDataContractResolver : DataContractResolver
public ref class ProxyDataContractResolver : public DataContractResolver
type ProxyDataContractResolver =
    class
        inherit DataContractResolver
    end

ProxyDataContractResolver 类与 DataContractSerializer 类一起使用。

System.Data.Objects System.Data.Objects..::.ProxyDataContractResolverProxyDataContractResolver
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ProxyDataContractResolver 成员
System.Data.Objects 命名空间

其他资源

How to: Serialize Persistence-Ignorant Classes


ProxyDataContractResolver 成员

ProxyDataContractResolver 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProxyDataContractResolver 类

此类可帮助将为持久性未知数据类创建的代理类型解析为持久性未知对象的实际类型。

ProxyDataContractResolver 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

ProxyDataContractResolver 类
System.Data.Objects 命名空间


ProxyDataContractResolver 构造函数

ProxyDataContractResolver 构造函数
ProxyDataContractResolver 类

初始化 ProxyDataContractResolver 类的新实例。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public ProxyDataContractResolver()
public:
ProxyDataContractResolver()
new : unit -> ProxyDataContractResolver

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ProxyDataContractResolver 类
ProxyDataContractResolver 成员
System.Data.Objects 命名空间

其他资源

How to: Serialize Persistence-Ignorant Classes


ProxyDataContractResolver 方法

ProxyDataContractResolver 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ProxyDataContractResolver 类

ProxyDataContractResolver 类型公开以下成员。

名称 说明
页首

参考

ProxyDataContractResolver 类
System.Data.Objects 命名空间


ProxyDataContractResolver ..::.ResolveName 方法

ProxyDataContractResolver
.
.
::
.
ResolveName 方法
ProxyDataContractResolver 类

在反序列化过程中，将任何 xsi:type 信息映射到持久性未知对象的实际类型。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function ResolveName ( _
    typeName As String, _
    typeNamespace As String, _
    declaredType As Type, _
    knownTypeResolver As DataContractResolver _
) As Type
public override Type ResolveName(
    string typeName,
    string typeNamespace,
    Type declaredType,
    DataContractResolver knownTypeResolver
)
public:
virtual Type^ ResolveName(
    String^ typeName,
    String^ typeNamespace,
    Type^ declaredType,
    DataContractResolver^ knownTypeResolver
) override
abstract ResolveName :
        typeName:string *
        typeNamespace:string *
        declaredType:Type *
        knownTypeResolver:DataContractResolver -> Type
override ResolveName :
        typeName:string *
        typeNamespace:string *
        declaredType:Type *
        knownTypeResolver:DataContractResolver -> Type

参数

typeName
类型： System String
要映射的 xsi:type 信息。
typeNamespace
类型： System String
xsi:type 的命名空间。
declaredType
类型： System Type
已声明的类型。
knownTypeResolver
类型： System.Runtime.Serialization DataContractResolver
ProxyDataContractResolver 的实例。

返回值

类型： System Type
返回 xsi:type 映射到的类型。如果找不到与 xsi:type 匹配的已知类型，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。 返回 xsi:type 映射到的类型。如果找不到与 xsi:type 匹配的已知类型，则返回 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

有关更多信息，请参见How to: Serialize Persistence-Ignorant Classes。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ProxyDataContractResolver 类
ProxyDataContractResolver 成员
System.Data.Objects 命名空间

其他资源

How to: Serialize Persistence-Ignorant Classes


ProxyDataContractResolver ..::.TryResolveType 方法

ProxyDataContractResolver
.
.
::
.
TryResolveType 方法
ProxyDataContractResolver 类

在序列化过程中，将实际类型映射到 xsi:type 信息。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Overrides Function TryResolveType ( _
    dataContractType As Type, _
    declaredType As Type, _
    knownTypeResolver As DataContractResolver, _
    <OutAttribute> ByRef typeName As XmlDictionaryString, _
    <OutAttribute> ByRef typeNamespace As XmlDictionaryString _
) As Boolean
public override bool TryResolveType(
    Type dataContractType,
    Type declaredType,
    DataContractResolver knownTypeResolver,
    out XmlDictionaryString typeName,
    out XmlDictionaryString typeNamespace
)
public:
virtual bool TryResolveType(
    Type^ dataContractType,
    Type^ declaredType,
    DataContractResolver^ knownTypeResolver,
    [OutAttribute] XmlDictionaryString^% typeName,
    [OutAttribute] XmlDictionaryString^% typeNamespace
) override
abstract TryResolveType :
        dataContractType:Type *
        declaredType:Type *
        knownTypeResolver:DataContractResolver *
        typeName:XmlDictionaryString byref *
        typeNamespace:XmlDictionaryString byref -> bool
override TryResolveType :
        dataContractType:Type *
        declaredType:Type *
        knownTypeResolver:DataContractResolver *
        typeName:XmlDictionaryString byref *
        typeNamespace:XmlDictionaryString byref -> bool

参数

dataContractType
类型： System Type
持久性未知对象的实际类型。
declaredType
类型： System Type
已声明的类型。
knownTypeResolver
类型： System.Runtime.Serialization DataContractResolver
ProxyDataContractResolver 的实例。
typeName
类型： System.Xml XmlDictionaryString %
此方法返回时，包含 xsi:type 声明的列表。
typeNamespace
类型： System.Xml XmlDictionaryString %
此方法返回时，包含使用的命名空间的列表。

返回值

类型： System Boolean
如果已解析该类型，则为 true；否则为 false。

有关更多信息，请参见How to: Serialize Persistence-Ignorant Classes。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

ProxyDataContractResolver 类
ProxyDataContractResolver 成员
System.Data.Objects 命名空间

其他资源

How to: Serialize Persistence-Ignorant Classes


RefreshMode 枚举

RefreshMode 枚举

指定是保留对由对象服务跟踪的对象所做的属性更改，还是使用数据源中的属性值替换这些更改。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Enumeration RefreshMode
public enum RefreshMode
public enum class RefreshMode
type RefreshMode
成员名称 | 说明
ClientWins | 不使用数据源中的值替换在对象上下文中对对象所做的属性更改。在下一次调用 SaveChanges 时，这些更改会发送到数据源。 不使用数据源中的值替换在对象上下文中对对象所做的属性更改。在下一次调用 SaveChanges 时，这些更改会发送到数据源。
StoreWins | 使用数据源中的值替换在对象上下文中对对象所做的属性更改。

Saving Changes and Managing Concurrency (Entity Framework)

How to: Manage Data Concurrency in the Object Context (Entity Framework)

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Objects 命名空间


SaveOptions 枚举

SaveOptions 枚举

指定在调用 SaveChanges(SaveOptions) 方法时对象上下文的行为。

此枚举有一个 FlagsAttribute 特性，通过该特性可使其成员值按位组合。

命名空间： System.Data.Objects
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<FlagsAttribute> _
Public Enumeration SaveOptions
[FlagsAttribute]
public enum SaveOptions
[FlagsAttribute]
public enum class SaveOptions
[<FlagsAttribute>]
type SaveOptions
成员名称 | 说明
None | 保存更改，不调用 DetectChanges 或 AcceptAllChangesAfterSave()()() 方法。
AcceptAllChangesAfterSave | 在保存更改后，调用 AcceptAllChangesAfterSave()()() 方法，该方法会在 ObjectStateManager 中重置更改跟踪。
DetectChangesBeforeSave | 在保存更改之前，调用 DetectChanges 方法，使用 ObjectStateManager 中的数据同步附加到对象上下文的对象的属性值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

System.Data.Objects 命名空间

其他资源

How to: Execute Business Logic When Saving Changes


System.Data.Objects.DataClasses 命名空间

System.Data.Objects.DataClasses 命名空间

System.Data.Objects.DataClasses 命名空间包含以下这些类：实体数据模型 (EDM) 中定义的类型的基类、由导航属性返回的类型的基类以及用于定义将公共语言运行时 (CLR) 对象映射到概念性模型中的类型的特性的类。

实体数据模型工具使用概念性模型文件来生成从该命名空间中的类派生的数据类。有关更多信息，请参见Object Services Overview (Entity Framework)。自定义数据类可从该命名空间的类中继承。System.Data.Objects.DataClasses 命名空间还包含接口，该接口用于实现自定义数据类，无须从 Entity Framework 类继承。有关更多信息，请参见Customizing Objects (Entity Framework)。 实体数据模型工具使用概念性模型文件来生成从该命名空间中的类派生的数据类。有关更多信息，请参见Object Services Overview (Entity Framework)。自定义数据类可从该命名空间的类中继承。System.Data.Objects.DataClasses 命名空间还包含接口，该接口用于实现自定义数据类，无须从 Entity Framework 类继承。有关更多信息，请参见Customizing Objects (Entity Framework)。 实体数据模型工具使用概念性模型文件来生成从该命名空间中的类派生的数据类。有关更多信息，请参见Object Services Overview (Entity Framework)。自定义数据类可从该命名空间的类中继承。System.Data.Objects.DataClasses 命名空间还包含接口，该接口用于实现自定义数据类，无须从 Entity Framework 类继承。有关更多信息，请参见Customizing Objects (Entity Framework)。 实体数据模型工具使用概念性模型文件来生成从该命名空间中的类派生的数据类。有关更多信息，请参见Object Services Overview (Entity Framework)。自定义数据类可从该命名空间的类中继承。System.Data.Objects.DataClasses 命名空间还包含接口，该接口用于实现自定义数据类，无须从 Entity Framework 类继承。有关更多信息，请参见Customizing Objects (Entity Framework)。 实体数据模型工具使用概念性模型文件来生成从该命名空间中的类派生的数据类。有关更多信息，请参见Object Services Overview (Entity Framework)。自定义数据类可从该命名空间的类中继承。System.Data.Objects.DataClasses 命名空间还包含接口，该接口用于实现自定义数据类，无须从 Entity Framework 类继承。有关更多信息，请参见Customizing Objects (Entity Framework)。

 | 类 | 说明
公共类 | ComplexObject | 复杂类型的基类。
公共类 | EdmComplexPropertyAttribute | 一个特性，指示属性表示复杂属性。
公共类 | EdmComplexTypeAttribute | 一个特性，指示类表示复杂类型。
公共类 | EdmEntityTypeAttribute | 一个特性，指示类表示实体类型。
公共类 | EdmFunctionAttribute | 一个特性，当该特性应用于某方法时，指示该方法是概念模型或存储模型中某个函数的代理。
公共类 | EdmPropertyAttribute | 特性的基类，这些特性定义如何将对象层中类型的属性映射到概念模型中实体类型或复杂类型的属性。
公共类 | EdmRelationshipAttribute | 基于概念模型中的关联，定义两个实体类型之间的关系。
公共类 | EdmRelationshipNavigationPropertyAttribute | 一个特性，指示属性表示导航属性。
公共类 | EdmScalarPropertyAttribute | 一个特性，指示属性表示标量属性。
公共类 | EdmSchemaAttribute | 一个特性，指示程序集包含映射到概念模型中的实体类型的类。
公共类 | EdmTypeAttribute | 特性的基类，这些特性定义如何将对象层中的类型映射到概念模型中的实体类型和复杂类型。
公共类 | EntityCollection TEntity | 表示关系“多”端的对象集合。
公共类 | EntityObject | 实体数据模型工具生成的实体类型的基类。
公共类 | EntityReference | 为 EntityReference<(Of <(TEntity>)>) 实现非通用功能的基类。
公共类 | EntityReference TEntity | 表示关联中重数为零或一的相关端。
公共类 | RelatedEnd | 为相关端实现常用功能的基类。
公共类 | RelationshipManager | 用于跟踪对象在对象上下文中的关系。
公共类 | StructuralObject | 以用于设置属性字段值的帮助器方法的形式为代码生成提供支持。
 | 接口 | 说明
公共接口 | IEntityChangeTracker | 定义对象服务用于跟踪对象属性更改的功能。
公共接口 | IEntityWithChangeTracker | 定义实现更改跟踪的实体类型。
公共接口 | IEntityWithKey | 定义公开实体键的实体类型。
公共接口 | IEntityWithRelationships | 定义与一个或多个其他实体类型具有关系的实体类型。
公共接口 | IRelatedEnd | 定义关系的端。
 | 枚举 | 说明
公共枚举 | RelationshipKind | 枚举两个或两个以上实体之间的关系的类型。


ComplexObject 类

ComplexObject 类
成员

复杂类型的基类。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
<DataContractAttribute(IsReference := True)> _
Public MustInherit Class ComplexObject _
    Inherits StructuralObject
[SerializableAttribute]
[DataContractAttribute(IsReference = true)]
public abstract class ComplexObject : StructuralObject
[SerializableAttribute]
[DataContractAttribute(IsReference = true)]
public ref class ComplexObject abstract : public StructuralObject
[<AbstractClassAttribute>]
[<SerializableAttribute>]
[<DataContractAttribute(IsReference = true)>]
type ComplexObject =
    class
        inherit StructuralObject
    end

ComplexObject 实现了对象服务所需要的复杂类型的基本功能。有关更多信息，请参见Object Services Overview (Entity Framework)。 ComplexObject 实现了对象服务所需要的复杂类型的基本功能。有关更多信息，请参见Object Services Overview (Entity Framework)。

通过概念模型实现自定义数据类时，建议表示复杂类型的数据类从 ComplexObject 继承。有关更多信息，请参见Customizing Objects (Entity Framework)。 通过概念模型实现自定义数据类时，建议表示复杂类型的数据类从 ComplexObject 继承。有关更多信息，请参见Customizing Objects (Entity Framework)。

复杂类型可以是实体类型的属性或其他复杂类型的属性。

复杂类型由实体类型的非标量属性返回。这样允许在实体内组织标量属性。与实体相似，复杂类型由标量属性或者其他复杂类型属性组成。不能在没有关联的实体类型的情况下使用复杂类型。因为复杂类型没有键，所以对象服务不能在没有关联的实体类型的情况下管理复杂类型对象。有关更多信息，请参见Complex Type Objects (Entity Framework)。 复杂类型由实体类型的非标量属性返回。这样允许在实体内组织标量属性。与实体相似，复杂类型由标量属性或者其他复杂类型属性组成。不能在没有关联的实体类型的情况下使用复杂类型。因为复杂类型没有键，所以对象服务不能在没有关联的实体类型的情况下管理复杂类型对象。有关更多信息，请参见Complex Type Objects (Entity Framework)。 复杂类型由实体类型的非标量属性返回。这样允许在实体内组织标量属性。与实体相似，复杂类型由标量属性或者其他复杂类型属性组成。不能在没有关联的实体类型的情况下使用复杂类型。因为复杂类型没有键，所以对象服务不能在没有关联的实体类型的情况下管理复杂类型对象。有关更多信息，请参见Complex Type Objects (Entity Framework)。 复杂类型由实体类型的非标量属性返回。这样允许在实体内组织标量属性。与实体相似，复杂类型由标量属性或者其他复杂类型属性组成。不能在没有关联的实体类型的情况下使用复杂类型。因为复杂类型没有键，所以对象服务不能在没有关联的实体类型的情况下管理复杂类型对象。有关更多信息，请参见Complex Type Objects (Entity Framework)。 复杂类型由实体类型的非标量属性返回。这样允许在实体内组织标量属性。与实体相似，复杂类型由标量属性或者其他复杂类型属性组成。不能在没有关联的实体类型的情况下使用复杂类型。因为复杂类型没有键，所以对象服务不能在没有关联的实体类型的情况下管理复杂类型对象。有关更多信息，请参见Complex Type Objects (Entity Framework)。 复杂类型由实体类型的非标量属性返回。这样允许在实体内组织标量属性。与实体相似，复杂类型由标量属性或者其他复杂类型属性组成。不能在没有关联的实体类型的情况下使用复杂类型。因为复杂类型没有键，所以对象服务不能在没有关联的实体类型的情况下管理复杂类型对象。有关更多信息，请参见Complex Type Objects (Entity Framework)。

在下面的示例中，自定义数据类 OrderInfo 继承自 ComplexObject ，并且映射到概念性模型中定义的 OrderInfo 复杂类型。有关更多信息，请参见How to: Inherit from the EntityObject Base Class (Entity Framework)。 在下面的示例中，自定义数据类 OrderInfo 继承自 ComplexObject ，并且映射到概念性模型中定义的 OrderInfo 复杂类型。有关更多信息，请参见How to: Inherit from the EntityObject Base Class (Entity Framework)。

Option Explicit On
Option Strict On

Imports System
Imports System.Data.SqlTypes
Imports System.Collections.Generic
Imports System.Text
Imports System.Data
Imports System.Data.Objects.DataClasses
Imports System.Data.Metadata.Edm
Imports Microsoft.Samples.Edm

<Assembly: EdmSchemaAttribute()>
<Assembly: EdmRelationshipAttribute("Microsoft.Samples.Edm", _
    "FK_LineItem_Order_OrderId", "Order", _
    RelationshipMultiplicity.One, GetType(Order), "LineItem", _
    RelationshipMultiplicity.Many, GetType(LineItem))>
Namespace Microsoft.Samples.Edm

    <EdmEntityTypeAttribute(NamespaceName:="Microsoft.Samples.Edm", Name:="Order")> _
    Public Class Order
        Inherits EntityObject
        ' Define private property variables.
        Private _orderId As Integer
        Private _orderDate As DateTime
        Private _dueDate As DateTime
        Private _shipDate As DateTime
        Private _status As Byte
        Private _customer As Integer
        Private _subTotal As Decimal
        Private _tax As Decimal
        Private _freight As Decimal
        Private _totalDue As Decimal
        Private _extendedInfo As OrderInfo

        'Default Constructor.
        Sub New()

        End Sub
        ' Public properties of the Order object.
        <EdmScalarPropertyAttribute(EntityKeyProperty:=True, IsNullable:=False)> _
        Public Property OrderId() As Integer
            Get
                Return _orderId
            End Get
            Set(ByVal value As Integer)
                ReportPropertyChanging("OrderId")
                _orderId = value
                ReportPropertyChanged("OrderId")
            End Set
        End Property
        ' Navigation property that returns a collection of line items.
        <EdmRelationshipNavigationPropertyAttribute("Microsoft.Samples.Edm", _
                "FK_LineItem_Order_OrderId", "LineItem")> _
        Public ReadOnly Property LineItem() As EntityCollection(Of LineItem)
            Get
                Return CType(Me, IEntityWithRelationships).RelationshipManager _
                    .GetRelatedCollection(Of LineItem) _
                ("FK_LineItem_Order_OrderId", "LineItem")
            End Get
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property OrderDate() As Date
            Get
                Return _orderDate
            End Get
            Set(ByVal value As DateTime)
                ReportPropertyChanging("OrderDate")
                _orderDate = value
                ReportPropertyChanged("OrderDate")
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property DueDate() As Date
            Get
                Return _dueDate
            End Get
            Set(ByVal value As Date)
                ReportPropertyChanging("DueDate")
                _dueDate = value
                ReportPropertyChanged("DueDate")
            End Set
        End Property
        <EdmScalarPropertyAttribute()> _
        Public Property ShipDate() As Date
            Get
                Return _shipDate
            End Get
            Set(ByVal value As Date)
                ReportPropertyChanging("ShipDate")
                _shipDate = value
                ReportPropertyChanged("ShipDate")
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property Status() As Byte
            Get
                Return _status
            End Get
            Set(ByVal value As Byte)
                If _status <> value Then
                    ReportPropertyChanging("Status")
                    _status = value
                    ReportPropertyChanged("Status")
                End If
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property Customer() As Integer
            Get
                Return _customer
            End Get
            Set(ByVal value As Integer)
                ReportPropertyChanging("Customer")
                _customer = value
                ReportPropertyChanged("Customer")
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property SubTotal() As Decimal
            Get
                Return _subTotal
            End Get
            Set(ByVal value As Decimal)
                If _subTotal <> value Then
                    ' Validate the value before setting it.
                    If value < 0 Then
                        Throw New ApplicationException(String.Format( _
                                  My.Resources.propertyNotValidNegative, _
                                  value.ToString, "SubTotal"))
                    End If
                    ReportPropertyChanging("SubTotal")
                    _subTotal = value
                    ReportPropertyChanged("SubTotal")

                    ' Recalculate the order total.
                    CalculateOrderTotal()
                End If
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property TaxAmt() As Decimal
            Get
                Return _tax
            End Get
            Set(ByVal value As Decimal)
                ' Validate the value before setting it.
                If value < 0 Then
                    Throw New ApplicationException(String.Format( _
                              My.Resources.propertyNotValidNegative, _
                              value.ToString(), "Tax"))
                End If
                ReportPropertyChanging("TaxAmt")
                _tax = value
                ReportPropertyChanged("TaxAmt")

                ' Recalculate the order total.
                CalculateOrderTotal()
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property Freight() As Decimal
            Get
                Return _freight
            End Get
            Set(ByVal value As Decimal)
                If _freight <> value Then
                    ' Validate the value before setting it.
                    If value < 0 Then
                        Throw New ApplicationException(String.Format( _
                                  My.Resources.propertyNotValidNegative, _
                        value.ToString(), "Freight"))
                    End If
                    ReportPropertyChanging("Freight")
                    _freight = value
                    ReportPropertyChanging("Freight")

                    ' Recalculate the order total.
                    CalculateOrderTotal()
                End If
            End Set
        End Property
        Public ReadOnly Property TotalDue() As Decimal
            Get
                Return _totalDue
            End Get
        End Property
        <EdmComplexPropertyAttribute()> _
        Public Property ExtendedInfo() As OrderInfo
            Get
                Return _extendedInfo
            End Get
            Set(ByVal value As OrderInfo)
                ReportPropertyChanging("ExtendedInfo")
                _extendedInfo = value
                ReportPropertyChanged("ExtendedInfo")
            End Set
        End Property
        Private Sub CalculateOrderTotal()
            ' Update the total due as a sum of the other cost properties.
            _totalDue = _subTotal + _tax + _freight
        End Sub
    End Class
    <Global.System.Data.Objects.DataClasses.EdmComplexTypeAttribute( _
        NamespaceName:="Microsoft.Samples.Edm", Name:="OrderInfo")> _
    Partial Public Class OrderInfo
        Inherits Global.System.Data.Objects.DataClasses.ComplexObject
        Private _orderNumber As String
        Private _purchaseOrder As String
        Private _accountNumber As String
        Private _comment As String
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
    Public Property OrderNumber() As String
            Get
                Return _orderNumber
            End Get
            Set(ByVal value As String)
                ' Validate the value before setting it.
                If value.Length > 25 Then
                    Throw New ApplicationException(String.Format( _
                        My.Resources.propertyNotValidString, _
                        "OrderNumber", "25"))
                End If
                ReportPropertyChanging("OrderNumber")
                _orderNumber = value
                ReportPropertyChanged("OrderNumber")
            End Set
        End Property
        <EdmScalarPropertyAttribute()> _
        Public Property PurchaseOrder() As String
            Get
                Return _purchaseOrder
            End Get
            Set(ByVal value As String)
                ' Validate the value before setting it.
                If (value <> Nothing) AndAlso value.Length > 25 Then
                    Throw New ApplicationException(String.Format( _
                              My.Resources.propertyNotValidString, _
                              "PurchaseOrder", "25"))
                End If
                If _purchaseOrder <> value Then
                    ReportPropertyChanging("PurchaseOrder")
                    _purchaseOrder = value
                    ReportPropertyChanged("PurchaseOrder")
                End If
            End Set
        End Property
        <EdmScalarPropertyAttribute()> _
        Public Property AccountNumber() As String
            Get
                Return _accountNumber
            End Get
            Set(ByVal value As String)
                ' Validate the value before setting it.
                If (value <> Nothing) AndAlso value.Length > 15 Then
                    Throw New ApplicationException(String.Format( _
                              My.Resources.propertyNotValidString, _
                              "AccountNumber", "15"))
                End If
                ReportPropertyChanging("AccountNumber")
                _accountNumber = value
                ReportPropertyChanged("AccountNumber")
            End Set
        End Property
        <EdmScalarPropertyAttribute()> _
    Public Property Comment() As String
            Get
                Return _comment
            End Get
            Set(ByVal value As String)
                ' Validate the value before setting it.
                If (value <> Nothing) AndAlso value.Length > 128 Then
                    Throw New ApplicationException(String.Format( _
                              My.Resources.propertyNotValidString, _
                              "Comment", "128"))
                End If
                If _comment <> value Then
                    ReportPropertyChanging("Comment")
                    _comment = value
                    ReportPropertyChanged("Comment")
                End If
            End Set
        End Property
    End Class
    <EdmEntityTypeAttribute(NamespaceName:="Microsoft.Samples.Edm", _
                            Name:="LineItem")> _
    Public Class LineItem
        Inherits EntityObject

        ' Define private property variables.
        Dim _lineItemId As Integer
        Dim _trackingNumber As String
        Dim _quantity As Short
        Dim _product As Integer
        Dim _price As Decimal
        Dim _discount As Decimal
        Dim _total As Decimal
        Sub New()

        End Sub
        ' Defines a navigation property to the Order class.
        <EdmRelationshipNavigationPropertyAttribute("Microsoft.Samples.Edm", _
                "FK_LineItem_Order_OrderId", "Order")> _
        Public Property Order() As Order
            Get
                Return CType(Me,  _
                IEntityWithRelationships).RelationshipManager _
                    .GetRelatedReference(Of Order) _
                    ("FK_LineItem_Order_OrderId", "Order").Value
            End Get
            Set(ByVal value As Order)
                CType(Me,  _
                IEntityWithRelationships).RelationshipManager _
                    .GetRelatedReference(Of Order) _
                    ("FK_LineItem_Order_OrderId", "Order").Value = value
            End Set
        End Property
        <EdmScalarPropertyAttribute(EntityKeyProperty:=True, IsNullable:=False)> _
        Public Property LineItemId() As Integer
            Get
                Return _lineItemId
            End Get
            Set(ByVal value As Integer)
                ReportPropertyChanging("LineItemId")
                _lineItemId = value
                ReportPropertyChanged("LineItemId")
            End Set
        End Property
        <EdmScalarPropertyAttribute()> _
        Public Property TrackingNumber() As String
            Get
                Return _trackingNumber
            End Get
            Set(ByVal value As String)
                If _trackingNumber <> value Then
                    ' Validate the value before setting it.
                    If value.Length > 25 Then
                        Throw New ApplicationException(String.Format( _
                                My.Resources.propertyNotValidString, _
                                "TrackingNumber", "25"))
                    End If
                    ReportPropertyChanging("TrackingNumber")
                    _trackingNumber = value
                    ReportPropertyChanged("TrackingNumber")
                End If
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property Quantity() As Short
            Get
                Return _quantity
            End Get
            Set(ByVal value As Short)
                If _quantity <> value Then
                    ' Validate the value before setting it.
                    If value < 1 Then
                        Throw New ApplicationException(String.Format( _
                            My.Resources.propertyNotValidNegative, _
                            value.ToString(), "Quantity"))
                    End If
                    ReportPropertyChanging("Quantity")
                    _quantity = value
                    ReportPropertyChanged("Quantity")

                    ' Update the line total.
                    CalculateLineTotal()
                End If
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property Product() As Integer
            Get
                Return _product
            End Get
            Set(ByVal value As Integer)
                ' Validate the value before setting it.
                If value < 1 Then
                    Throw New ApplicationException(String.Format( _
                              My.Resources.propertyNotValidNegative, _
                              value.ToString(), "Product"))
                End If
                ReportPropertyChanging("Product")
                _product = value
                ReportPropertyChanged("Product")
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property Price() As Decimal
            Get
                Return _price
            End Get
            Set(ByVal value As Decimal)
                If _price <> value Then
                    ' Validate the value before setting it.
                    If value < 0 Then
                        Throw New ApplicationException(String.Format( _
                                  My.Resources.propertyNotValidNegative, _
                                  value.ToString(), "Price"))
                    End If
                    ReportPropertyChanging("Price")
                    _price = value
                    ReportPropertyChanged("Price")

                    ' Update the line total.
                    CalculateLineTotal()
                End If
            End Set
        End Property
        <EdmScalarPropertyAttribute(IsNullable:=False)> _
        Public Property Discount() As Decimal
            Get
                Return _discount
            End Get
            Set(ByVal value As Decimal)
                ' Validate the value before setting it.
                If value < 0 Then
                    Throw New ApplicationException(String.Format( _
                              My.Resources.propertyNotValidNegative, _
                              value.ToString(), "Discount"))
                End If
                ReportPropertyChanging("Discount")
                _discount = value
                ReportPropertyChanged("Discount")
            End Set
        End Property
        Public ReadOnly Property Total() As Decimal
            Get
                Return _total
            End Get
        End Property
        Private Sub CalculateLineTotal()
            _total = (_quantity * (_price - _discount))
        End Sub
    End Class
End Namespace

using System;
using System.Data.SqlTypes;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Objects.DataClasses;
using System.Data.Metadata.Edm;
using Microsoft.Samples.Edm;

[assembly: EdmSchemaAttribute()]
[assembly: EdmRelationshipAttribute("Microsoft.Samples.Edm",
    "FK_LineItem_Order_OrderId", "Order",
    RelationshipMultiplicity.One, typeof(Order),"LineItem",
    RelationshipMultiplicity.Many, typeof(LineItem))]
namespace Microsoft.Samples.Edm
{
    [EdmEntityTypeAttribute(NamespaceName="Microsoft.Samples.Edm",Name="Order")]
    public class Order : EntityObject
    {
        // Define private property variables.
        private int _orderId;
        private DateTime _orderDate;
        private DateTime _dueDate;
        private DateTime _shipDate;
        private byte _status;
        private int _customer;
        private decimal _subTotal;
        private decimal _tax;
        private decimal _freight;
        private decimal _totalDue;
        private OrderInfo _ExtendedInfo;

        // Public properties of the Order object.
        [EdmScalarPropertyAttribute(EntityKeyProperty = true, IsNullable = false)]
        public int OrderId
        {
            get
            {
                return _orderId;
            }
            set
            {
                ReportPropertyChanging("OrderId");
                _orderId = value;
                ReportPropertyChanged("OrderId");
            }
        }

        // Navigation property that returns a collection of line items.
        [EdmRelationshipNavigationPropertyAttribute("Microsoft.Samples.Edm","FK_LineItem_Order_OrderId", "LineItem")]
        public System.Data.Objects.DataClasses.EntityCollection<LineItem> LineItem
        {
            get
            {
                return ((IEntityWithRelationships)(this)).RelationshipManager.
                    GetRelatedCollection<LineItem>("FK_LineItem_Order_OrderId", "LineItem");
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public DateTime OrderDate
        {
           get
            {
                return _orderDate;
            }
            set
            {
                ReportPropertyChanging("OrderDate");
                _orderDate = value;
                ReportPropertyChanged("OrderDate");
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public DateTime DueDate
        {
            get
            {
                return _dueDate;
            }
            set
            {
                ReportPropertyChanging("DueDate");
                _dueDate = value;
                ReportPropertyChanged("DueDate");
            }
        }
        [EdmScalarPropertyAttribute()]
        public DateTime ShipDate
        {
            get
            {
                return _shipDate;
            }
            set
            {
                ReportPropertyChanging("ShipDate");
                _shipDate = value;
                ReportPropertyChanged("ShipDate");

            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public byte Status
        {
            get
            {
                return _status;
            }
            set
            {
                if (_status != value)
                {
                    ReportPropertyChanging("Status");
                    _status = value;
                    ReportPropertyChanged("Status");
                }
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public int Customer
        {
            get
            {
                return _customer;
            }
            set
            {
                ReportPropertyChanging("Customer");
                _customer = value;
                ReportPropertyChanged("Customer");
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public decimal SubTotal
        {
            get
            {
                return _subTotal;
            }
            set
            {
                if (_subTotal != value)
                {
                    // Validate the value before setting it.
                    if (value < 0)
                    {
                        throw new ApplicationException(string.Format(
                                  Properties.Resources.propertyNotValidNegative,
                                  new string[2] { value.ToString(), "SubTotal" }));
                    }

                    ReportPropertyChanging("SubTotal");
                    _subTotal = value;
                    ReportPropertyChanged("SubTotal");

                    // Recalculate the order total.
                    CalculateOrderTotal();
                }
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public decimal TaxAmt
        {
            get
            {
                return _tax;
            }
            set
            {
                // Validate the value before setting it.
                if (value < 0)
                {
                    throw new ApplicationException(string.Format(
                              Properties.Resources.propertyNotValidNegative,
                              new string[2] { value.ToString(), "Tax" }));
                }

                ReportPropertyChanging("TaxAmt");
                _tax = value;
                ReportPropertyChanged("TaxAmt");

                // Recalculate the order total.
                CalculateOrderTotal();
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public decimal Freight
        {
            get
            {
                return _freight;
            }
            set
            {
                if (_freight != value)
                {
                    // Validate the value before setting it.
                    if (value < 0)
                    {
                        throw new ApplicationException(string.Format(
                                  Properties.Resources.propertyNotValidNegative,
                                  new string[2] { value.ToString(), "Freight" }));
                    }

                    ReportPropertyChanging("Freight");
                    _freight = value;
                    ReportPropertyChanging("Freight");

                    // Recalculate the order total.
                    CalculateOrderTotal();
                }
            }

        }
        public decimal TotalDue
        {
            get
            {
                return _totalDue;
            }
        }

        [EdmComplexPropertyAttribute()]
        public OrderInfo ExtendedInfo
        {
            get
            {
                return _ExtendedInfo;
            }
            set
            {
                this.ReportPropertyChanging("ExtendedInfo");
                _ExtendedInfo = value;
                this.ReportPropertyChanged("ExtendedInfo");
            }
        }
        private void CalculateOrderTotal()
        {
            // Update the total due as a sum of the other cost properties.
            _totalDue = _subTotal + _tax + _freight;
        }
}
    [EdmComplexTypeAttribute(NamespaceName =
        "Microsoft.Samples.Edm", Name = "OrderInfo")]
    public partial class OrderInfo : ComplexObject
    {
        private string _orderNumber;
        private string _purchaseOrder;
        private string _accountNumber;
        private string _comment;

        [EdmScalarPropertyAttribute(IsNullable = false)]
        public string OrderNumber
        {
            get
            {
                return _orderNumber;
            }
            set
            {
                // Validate the value before setting it.
                if (value.Length > 25)
                {
                    throw new ApplicationException(string.Format(
                              Properties.Resources.propertyNotValidString,
                              new string[3] { value, "OrderNumber", "25" }));
                }

                ReportPropertyChanging("OrderNumber");
                _orderNumber = value;
                ReportPropertyChanged("OrderNumber");
            }
        }
        [EdmScalarPropertyAttribute()]
        public string PurchaseOrder
        {
            get
            {
                return _purchaseOrder;
            }
            set
            {
                // Validate the value before setting it.
                if ((value != null) && value.Length > 25)
                {
                    throw new ApplicationException(string.Format(
                              Properties.Resources.propertyNotValidString,
                              new string[3] { value, "PurchaseOrder", "25" }));
                }
                if (_purchaseOrder != value)
                {
                    ReportPropertyChanging("PurchaseOrder");
                    _purchaseOrder = value;
                    ReportPropertyChanged("PurchaseOrder");
                }
            }
        }
        [EdmScalarPropertyAttribute()]
        public string AccountNumber
        {
            get
            {
                return _accountNumber;
            }
            set
            {
                // Validate the value before setting it.
                if ((value != null) && value.Length > 15)
                {
                    throw new ApplicationException(string.Format(
                              Properties.Resources.propertyNotValidString,
                              new string[3] { value, "AccountNumber", "15" }));
                }
                ReportPropertyChanging("AccountNumber");
                _accountNumber = value;
                ReportPropertyChanged("AccountNumber");
            }
        }
        [EdmScalarPropertyAttribute()]
        public string Comment
        {
            get
            {
                return _comment;
            }
            set
            {
                // Validate the value before setting it.
                if ((value != null) && value.Length > 128)
                {
                    throw new ApplicationException(string.Format(
                              Properties.Resources.propertyNotValidString,
                              new string[3] { value, "Comment", "128" }));
                }
                if (_comment != value)
                {
                    ReportPropertyChanging("Comment");
                    _comment = value;
                    ReportPropertyChanged("Comment");
                }
            }
        }
    }

    [EdmEntityTypeAttribute(NamespaceName = "Microsoft.Samples.Edm", Name = "LineItem")]
    public class LineItem : EntityObject
    {
        // Define private property variables.
        int _lineItemId;
        string _trackingNumber;
        short _quantity;
        int _product;
        decimal _price;
        decimal _discount;
        decimal _total;

        // Default constructor.
        public LineItem()
        {

        }

        // Defines a navigation property to the Order class.
        [EdmRelationshipNavigationPropertyAttribute("Microsoft.Samples.Edm", "FK_LineItem_Order_OrderId", "Order")]
        public Order Order
        {
            get
            {
                return ((IEntityWithRelationships)(this)).RelationshipManager.
                    GetRelatedReference<Order>("FK_LineItem_Order_OrderId", "Order").Value;
            }
            set
            {
                ((IEntityWithRelationships)(this)).RelationshipManager.
                    GetRelatedReference<Order>("FK_LineItem_Order_OrderId", "Order").Value = value;
            }
        }
        [EdmScalarPropertyAttribute(EntityKeyProperty = true, IsNullable = false)]
        public int LineItemId
        {
            get
            {
                return _lineItemId;
            }
            set
            {
                ReportPropertyChanging("LineItemId");
                _lineItemId = value;
                ReportPropertyChanged("LineItemId");
            }
        }
        [EdmScalarPropertyAttribute()]
        public string TrackingNumber
        {
            get
            {
                return _trackingNumber;
            }
            set
            {
                if (_trackingNumber != value)
                {
                    // Validate the value before setting it.
                    if (value.Length > 25)
                    {
                        throw new ApplicationException(string.Format(
                                  Properties.Resources.propertyNotValidString,
                                  new string[3] {value,"TrackingNumber", "25"}));
                    }
                    ReportPropertyChanging("TrackingNumber");
                    _trackingNumber = value;
                    ReportPropertyChanged("TrackingNumber");
                }
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public short Quantity
        {
            get
            {
                return _quantity;
            }
            set
            {
                if (_quantity != value)
                {
                    // Validate the value before setting it.
                    if (value < 1)
                    {
                        throw new ApplicationException(string.Format(
                                  Properties.Resources.propertyNotValidNegative,
                                  new string[2] { value.ToString(), "Quantity" }));
                    }
                    ReportPropertyChanging("Quantity");
                    _quantity = value;
                    ReportPropertyChanged("Quantity");

                    // Update the line total.
                    CalculateLineTotal();
                }
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public int Product
        {
            get
            {
                return _product;
            }
            set
            {
                // Validate the value before setting it.
                if (value < 1)
                {
                    throw new ApplicationException(string.Format(
                              Properties.Resources.propertyNotValidNegative,
                              new string[2] { value.ToString(), "Product" }));
                }
                ReportPropertyChanging("Product");
                _product = value;
                ReportPropertyChanged("Product");
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public decimal Price
        {
            get
            {
                return _price;
            }
            set
            {
                if (_price != value)
                {
                    // Validate the value before setting it.
                    if (value < 0)
                    {
                        throw new ApplicationException(string.Format(
                                  Properties.Resources.propertyNotValidNegative,
                                  new string[2] { value.ToString(), "Price" }));
                    }

                    ReportPropertyChanging("Price");
                    _price = value;
                    ReportPropertyChanged("Price");

                    // Update the line total.
                    CalculateLineTotal();
                }
            }
        }
        [EdmScalarPropertyAttribute(IsNullable = false)]
        public decimal Discount
        {
            get
            {
                return _discount;
            }
            set
            {
                // Validate the value before setting it.
                if (value < 0)
                {
                    throw new ApplicationException(string.Format(
                              Properties.Resources.propertyNotValidNegative,
                              new string[2] { value.ToString(), "Discount" }));
                }
                ReportPropertyChanging("Discount");
                _discount = value;
                ReportPropertyChanged("Discount");
            }
        }

        public decimal Total
        {
            get
            {
                return _total;
            }
        }

        private void CalculateLineTotal()
        {
            _total = (_quantity * (_price - _discount));
        }
    }
}

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.ComplexObjectComplexObject
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ComplexObject 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Complex Type (EDM)
How to: Define a Model with Complex Types (Entity Framework)
How to: Execute a Query that returns Complex Types (EntityClient)
How to: Add and Modify Objects with Complex Types (Entity Framework)
How to: Inherit from the EntityObject Base Class (Entity Framework)


ComplexObject 成员

ComplexObject 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ComplexObject 类

复杂类型的基类。

ComplexObject 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

ComplexObject 类
System.Data.Objects.DataClasses 命名空间


ComplexObject 构造函数

ComplexObject 构造函数
ComplexObject 类

创建 ComplexObject 的实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Sub New
protected ComplexObject()
protected:
ComplexObject()
new : unit -> ComplexObject

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ComplexObject 类
ComplexObject 成员
System.Data.Objects.DataClasses 命名空间


ComplexObject 方法

ComplexObject 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ComplexObject 类

ComplexObject 类型公开以下成员。

名称 说明
页首

参考

ComplexObject 类
System.Data.Objects.DataClasses 命名空间


ComplexObject ..::.ReportPropertyChanged 方法

ComplexObject
.
.
::
.
ReportPropertyChanged 方法
ComplexObject 类

通知更改跟踪器，某个复杂对象的属性已更改。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Overrides NotOverridable Sub ReportPropertyChanged ( _
    property As String _
)
protected override sealed void ReportPropertyChanged(
    string property
)
protected:
virtual void ReportPropertyChanged(
    String^ property
) override sealed
abstract ReportPropertyChanged :
        property:string -> unit
override ReportPropertyChanged :
        property:string -> unit

参数

property
类型： System String
已更改属性的名称。
异常 | 条件
ArgumentNullException | property 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

当复杂类型由实体数据模型工具生成时，在属性更改后将调用 ReportPropertyChanged 方法，以将 IEntityChangeTracker 中的缓存值作为属性的原始值提交。

此方法调用更改跟踪器中的 EntityComplexMemberChanged 方法。

跟踪对自定义复杂对象的属性作出的更改时，必须调用 ReportPropertyChanged 方法。对于从 ComplexObject 继承的复杂对象应采用此操作。有关更多信息，请参见Reporting Changes in Custom Data Classes (Entity Framework)。 跟踪对自定义复杂对象的属性作出的更改时，必须调用 ReportPropertyChanged 方法。对于从 ComplexObject 继承的复杂对象应采用此操作。有关更多信息，请参见Reporting Changes in Custom Data Classes (Entity Framework)。 跟踪对自定义复杂对象的属性作出的更改时，必须调用 ReportPropertyChanged 方法。对于从 ComplexObject 继承的复杂对象应采用此操作。有关更多信息，请参见Reporting Changes in Custom Data Classes (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ComplexObject 类
ComplexObject 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Customizing Objects (Entity Framework)
How to: Inherit from the EntityObject Base Class (Entity Framework)


ComplexObject ..::.ReportPropertyChanging 方法

ComplexObject
.
.
::
.
ReportPropertyChanging 方法
ComplexObject 类

通知更改跟踪器，对某个复杂对象的属性更改处于挂起状态。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Protected Overrides NotOverridable Sub ReportPropertyChanging ( _
    property As String _
)
protected override sealed void ReportPropertyChanging(
    string property
)
protected:
virtual void ReportPropertyChanging(
    String^ property
) override sealed
abstract ReportPropertyChanging :
        property:string -> unit
override ReportPropertyChanging :
        property:string -> unit

参数

property
类型： System String
将要更改的属性的名称。
异常 | 条件
ArgumentNullException | property 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

当复杂类型由实体数据模型工具生成时，在属性更改前将调用 ReportPropertyChanging 方法将属性的当前值缓存在 IEntityChangeTracker 中，以便能够将此值用作该属性的原始值。

此方法调用更改跟踪器中的 EntityComplexMemberChanging 方法。

跟踪对自定义复杂对象的属性作出的更改时，必须调用 ReportPropertyChanging 方法。对于从 ComplexObject 继承的复杂对象应采用此操作。有关更多信息，请参见Reporting Changes in Custom Data Classes (Entity Framework)。 跟踪对自定义复杂对象的属性作出的更改时，必须调用 ReportPropertyChanging 方法。对于从 ComplexObject 继承的复杂对象应采用此操作。有关更多信息，请参见Reporting Changes in Custom Data Classes (Entity Framework)。 跟踪对自定义复杂对象的属性作出的更改时，必须调用 ReportPropertyChanging 方法。对于从 ComplexObject 继承的复杂对象应采用此操作。有关更多信息，请参见Reporting Changes in Custom Data Classes (Entity Framework)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

ComplexObject 类
ComplexObject 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Customizing Objects (Entity Framework)
How to: Inherit from the EntityObject Base Class (Entity Framework)


ComplexObject 事件

ComplexObject 事件
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
ComplexObject 类

ComplexObject 类型公开以下成员。

名称 说明
页首

参考

ComplexObject 类
System.Data.Objects.DataClasses 命名空间


EdmComplexPropertyAttribute 类

EdmComplexPropertyAttribute 类
成员

一个特性，指示属性表示复杂属性。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<AttributeUsageAttribute(AttributeTargets.Property)> _
Public NotInheritable Class EdmComplexPropertyAttribute _
    Inherits EdmPropertyAttribute
[AttributeUsageAttribute(AttributeTargets.Property)]
public sealed class EdmComplexPropertyAttribute : EdmPropertyAttribute
[AttributeUsageAttribute(AttributeTargets::Property)]
public ref class EdmComplexPropertyAttribute sealed : public EdmPropertyAttribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Property)>]
type EdmComplexPropertyAttribute =
    class
        inherit EdmPropertyAttribute
    end

EdmComplexPropertyAttribute 将类的复杂属性链接到概念性模型中定义的实体类型或复杂类型的复杂属性。

此特性应用于返回复杂类型的属性。

将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。 将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmComplexPropertyAttributeEdmComplexPropertyAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmComplexPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Complex Type (EDM)
Customizing Objects (Entity Framework)
How to: Map Custom Objects to Entities (Entity Framework)


EdmComplexPropertyAttribute 成员

EdmComplexPropertyAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmComplexPropertyAttribute 类

一个特性，指示属性表示复杂属性。

EdmComplexPropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmComplexPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmComplexPropertyAttribute 构造函数

EdmComplexPropertyAttribute 构造函数
EdmComplexPropertyAttribute 类

创建 EdmComplexPropertyAttribute 类的新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EdmComplexPropertyAttribute()
public:
EdmComplexPropertyAttribute()
new : unit -> EdmComplexPropertyAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmComplexPropertyAttribute 类
EdmComplexPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmComplexPropertyAttribute 方法

EdmComplexPropertyAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmComplexPropertyAttribute 类

EdmComplexPropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmComplexPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmComplexPropertyAttribute 属性

EdmComplexPropertyAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmComplexPropertyAttribute 类

EdmComplexPropertyAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmComplexPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmComplexTypeAttribute 类

EdmComplexTypeAttribute 类
成员

一个特性，指示类表示复杂类型。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<AttributeUsageAttribute(AttributeTargets.Class)> _
Public NotInheritable Class EdmComplexTypeAttribute _
    Inherits EdmTypeAttribute
[AttributeUsageAttribute(AttributeTargets.Class)]
public sealed class EdmComplexTypeAttribute : EdmTypeAttribute
[AttributeUsageAttribute(AttributeTargets::Class)]
public ref class EdmComplexTypeAttribute sealed : public EdmTypeAttribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Class)>]
type EdmComplexTypeAttribute =
    class
        inherit EdmTypeAttribute
    end

EdmComplexTypeAttribute 将类链接到概念性模型中定义的复杂类型。

此特性应用于表示复杂类型的类。

将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。 将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmComplexTypeAttributeEdmComplexTypeAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmComplexTypeAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Complex Type (EDM)
Customizing Objects (Entity Framework)
How to: Map Custom Objects to Entities (Entity Framework)


EdmComplexTypeAttribute 成员

EdmComplexTypeAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmComplexTypeAttribute 类

一个特性，指示类表示复杂类型。

EdmComplexTypeAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmComplexTypeAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmComplexTypeAttribute 构造函数

EdmComplexTypeAttribute 构造函数
EdmComplexTypeAttribute 类

创建 EdmComplexTypeAttribute 类的新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EdmComplexTypeAttribute()
public:
EdmComplexTypeAttribute()
new : unit -> EdmComplexTypeAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmComplexTypeAttribute 类
EdmComplexTypeAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmComplexTypeAttribute 方法

EdmComplexTypeAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmComplexTypeAttribute 类

EdmComplexTypeAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmComplexTypeAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmComplexTypeAttribute 属性

EdmComplexTypeAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmComplexTypeAttribute 类

EdmComplexTypeAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmComplexTypeAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmEntityTypeAttribute 类

EdmEntityTypeAttribute 类
成员

一个特性，指示类表示实体类型。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple := False)> _
Public NotInheritable Class EdmEntityTypeAttribute _
    Inherits EdmTypeAttribute
[AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false)]
public sealed class EdmEntityTypeAttribute : EdmTypeAttribute
[AttributeUsageAttribute(AttributeTargets::Class, AllowMultiple = false)]
public ref class EdmEntityTypeAttribute sealed : public EdmTypeAttribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Class, AllowMultiple = false)>]
type EdmEntityTypeAttribute =
    class
        inherit EdmTypeAttribute
    end

EdmEntityTypeAttribute 将类链接到概念模型中的实体类型。

此特性应用于表示实体类型的类。

将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。 将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmEntityTypeAttributeEdmEntityTypeAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmEntityTypeAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Customizing Objects (Entity Framework)
How to: Map Custom Objects to Entities (Entity Framework)


EdmEntityTypeAttribute 成员

EdmEntityTypeAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmEntityTypeAttribute 类

一个特性，指示类表示实体类型。

EdmEntityTypeAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmEntityTypeAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmEntityTypeAttribute 构造函数

EdmEntityTypeAttribute 构造函数
EdmEntityTypeAttribute 类

初始化 EdmEntityTypeAttribute 类的新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EdmEntityTypeAttribute()
public:
EdmEntityTypeAttribute()
new : unit -> EdmEntityTypeAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmEntityTypeAttribute 类
EdmEntityTypeAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmEntityTypeAttribute 方法

EdmEntityTypeAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmEntityTypeAttribute 类

EdmEntityTypeAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmEntityTypeAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmEntityTypeAttribute 属性

EdmEntityTypeAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmEntityTypeAttribute 类

EdmEntityTypeAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmEntityTypeAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmFunctionAttribute 类

EdmFunctionAttribute 类
成员

一个特性，当该特性应用于某方法时，指示该方法是概念模型或存储模型中某个函数的代理。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<AttributeUsageAttribute(AttributeTargets.Method, Inherited := False, AllowMultiple := False)> _
Public NotInheritable Class EdmFunctionAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
public sealed class EdmFunctionAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, Inherited = false, AllowMultiple = false)]
public ref class EdmFunctionAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Method, Inherited = false, AllowMultiple = false)>]
type EdmFunctionAttribute =
    class
        inherit Attribute
    end

EdmFunctionAttribute 将公共语言运行时 (CLR) 方法链接到另一个函数。例如，可以使用该特性将 CLR 方法映射到由存储提供程序公开的函数，映射到数据库中的用户定义函数，或映射到概念模型中的用户定义函数。可以从 LINQ to Entities 查询中调用具有此特性的方法。 EdmFunctionAttribute 将公共语言运行时 (CLR) 方法链接到另一个函数。例如，可以使用该特性将 CLR 方法映射到由存储提供程序公开的函数，映射到数据库中的用户定义函数，或映射到概念模型中的用户定义函数。可以从 LINQ to Entities 查询中调用具有此特性的方法。 EdmFunctionAttribute 将公共语言运行时 (CLR) 方法链接到另一个函数。例如，可以使用该特性将 CLR 方法映射到由存储提供程序公开的函数，映射到数据库中的用户定义函数，或映射到概念模型中的用户定义函数。可以从 LINQ to Entities 查询中调用具有此特性的方法。

若要使用 EdmFunctionAttribute 将 CLR 方法映射到函数，以下条件必须为真：

  • CLR 方法的返回类型必须与映射至函数的返回类型相兼容。

  • CLR 方法的参数类型必须与映射至函数的参数类型相兼容。

有关兼容性类型的信息，请参见Entity Data Model Types。

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmFunctionAttributeEdmFunctionAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EdmFunctionAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

How to: Call Custom Database Functions
How to: Call Functions Defined in the Conceptual Model


EdmFunctionAttribute 成员

EdmFunctionAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmFunctionAttribute 类

一个特性，当该特性应用于某方法时，指示该方法是概念模型或存储模型中某个函数的代理。

EdmFunctionAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmFunctionAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmFunctionAttribute 构造函数

EdmFunctionAttribute 构造函数
EdmFunctionAttribute 类

初始化 EdmFunctionAttribute 类的新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    namespaceName As String, _
    functionName As String _
)
public EdmFunctionAttribute(
    string namespaceName,
    string functionName
)
public:
EdmFunctionAttribute(
    String^ namespaceName,
    String^ functionName
)
new :
        namespaceName:string *
        functionName:string -> EdmFunctionAttribute

参数

namespaceName
类型： System String
映射目标函数的命名空间。
functionName
类型： System String
映射目标函数的名称。

EdmFunctionAttribute 将公共语言运行时 (CLR) 方法链接到另一个函数。例如，可以使用该特性将 CLR 方法映射到由存储提供程序公开的函数，映射到数据库中的用户定义函数，或映射到概念模型中的用户定义函数。可以从 LINQ to Entities 查询中调用具有此特性的方法。 EdmFunctionAttribute 将公共语言运行时 (CLR) 方法链接到另一个函数。例如，可以使用该特性将 CLR 方法映射到由存储提供程序公开的函数，映射到数据库中的用户定义函数，或映射到概念模型中的用户定义函数。可以从 LINQ to Entities 查询中调用具有此特性的方法。 EdmFunctionAttribute 将公共语言运行时 (CLR) 方法链接到另一个函数。例如，可以使用该特性将 CLR 方法映射到由存储提供程序公开的函数，映射到数据库中的用户定义函数，或映射到概念模型中的用户定义函数。可以从 LINQ to Entities 查询中调用具有此特性的方法。

若要使用 EdmFunctionAttribute 将 CLR 方法映射到函数，以下条件必须为真：

  • CLR 方法的返回类型必须与映射至函数的返回类型相兼容。

  • CLR 方法的参数类型必须与映射至函数的参数类型相兼容。

有关兼容性类型的信息，请参见Entity Data Model Types。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EdmFunctionAttribute 类
EdmFunctionAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

How to: Call Custom Database Functions
How to: Call Functions Defined in the Conceptual Model


EdmFunctionAttribute 方法

EdmFunctionAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmFunctionAttribute 类

EdmFunctionAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmFunctionAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmFunctionAttribute 属性

EdmFunctionAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmFunctionAttribute 类

EdmFunctionAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmFunctionAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmFunctionAttribute ..::.FunctionName 属性

EdmFunctionAttribute
.
.
::
.
FunctionName 属性
EdmFunctionAttribute 类

映射目标函数的名称。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property FunctionName As String
    Get
public string FunctionName { get; }
public:
property String^ FunctionName {
    String^ get ();
}
member FunctionName : string

属性值

类型： System String
映射目标函数的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EdmFunctionAttribute 类
EdmFunctionAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

How to: Call Custom Database Functions
How to: Call Functions Defined in the Conceptual Model


EdmFunctionAttribute ..::.NamespaceName 属性

EdmFunctionAttribute
.
.
::
.
NamespaceName 属性
EdmFunctionAttribute 类

映射目标函数的命名空间。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property NamespaceName As String
    Get
public string NamespaceName { get; }
public:
property String^ NamespaceName {
    String^ get ();
}
member NamespaceName : string

属性值

类型： System String
映射目标函数的命名空间。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EdmFunctionAttribute 类
EdmFunctionAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

How to: Call Custom Database Functions
How to: Call Functions Defined in the Conceptual Model


EdmPropertyAttribute 类

EdmPropertyAttribute 类
成员

特性的基类，这些特性定义如何将对象层中类型的属性映射到概念模型中实体类型或复杂类型的属性。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<AttributeUsageAttribute(AttributeTargets.Property)> _
Public MustInherit Class EdmPropertyAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Property)]
public abstract class EdmPropertyAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Property)]
public ref class EdmPropertyAttribute abstract : public Attribute
[<AbstractClassAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Property)>]
type EdmPropertyAttribute =
    class
        inherit Attribute
    end

EdmScalarPropertyAttribute 和 EdmComplexPropertyAttribute 派生自 EdmPropertyAttribute。

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmPropertyAttributeEdmPropertyAttribute

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmPropertyAttribute 成员

EdmPropertyAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmPropertyAttribute 类

特性的基类，这些特性定义如何将对象层中类型的属性映射到概念模型中实体类型或复杂类型的属性。

EdmPropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmPropertyAttribute 方法

EdmPropertyAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmPropertyAttribute 类

EdmPropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmPropertyAttribute 属性

EdmPropertyAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmPropertyAttribute 类

EdmPropertyAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmRelationshipAttribute 类

EdmRelationshipAttribute 类
成员

基于概念模型中的关联，定义两个实体类型之间的关系。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<AttributeUsageAttribute(AttributeTargets.Assembly, AllowMultiple := True)> _
Public NotInheritable Class EdmRelationshipAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Assembly, AllowMultiple = true)]
public sealed class EdmRelationshipAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Assembly, AllowMultiple = true)]
public ref class EdmRelationshipAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Assembly, AllowMultiple = true)>]
type EdmRelationshipAttribute =
    class
        inherit Attribute
    end

此特性以程序集级别应用于每个关联的一个实例。程序集中可以具有此类型的多个特性。 此特性以程序集级别应用于每个关联的一个实例。程序集中可以具有此类型的多个特性。

特定关联中实体类型的角色的详细信息应匹配概念性架构中定义的关联。

关联不为角色定义任何排序。这意味着定义关联的相关端的属性可按任何顺序定义。 关联不为角色定义任何排序。这意味着定义关联的相关端的属性可按任何顺序定义。

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmRelationshipAttributeEdmRelationshipAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Entity Data Model Relationships
Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipAttribute 成员

EdmRelationshipAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmRelationshipAttribute 类

基于概念模型中的关联，定义两个实体类型之间的关系。

EdmRelationshipAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmRelationshipAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmRelationshipAttribute 构造函数

EdmRelationshipAttribute 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmRelationshipAttribute 类

初始化 EdmRelationshipAttribute 类的新实例。

名称 说明
页首

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmRelationshipAttribute 构造函数 (String, String, String, RelationshipMultiplicity, Type, String, RelationshipMultiplicity, Type)

EdmRelationshipAttribute 构造函数 (String, String, String, RelationshipMultiplicity, Type, String, RelationshipMultiplicity, Type)
EdmRelationshipAttribute 类

创建 EdmRelationshipAttribute 类的实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    relationshipNamespaceName As String, _
    relationshipName As String, _
    role1Name As String, _
    role1Multiplicity As RelationshipMultiplicity, _
    role1Type As Type, _
    role2Name As String, _
    role2Multiplicity As RelationshipMultiplicity, _
    role2Type As Type _
)
public EdmRelationshipAttribute(
    string relationshipNamespaceName,
    string relationshipName,
    string role1Name,
    RelationshipMultiplicity role1Multiplicity,
    Type role1Type,
    string role2Name,
    RelationshipMultiplicity role2Multiplicity,
    Type role2Type
)
public:
EdmRelationshipAttribute(
    String^ relationshipNamespaceName,
    String^ relationshipName,
    String^ role1Name,
    RelationshipMultiplicity role1Multiplicity,
    Type^ role1Type,
    String^ role2Name,
    RelationshipMultiplicity role2Multiplicity,
    Type^ role2Type
)
new :
        relationshipNamespaceName:string *
        relationshipName:string *
        role1Name:string *
        role1Multiplicity:RelationshipMultiplicity *
        role1Type:Type *
        role2Name:string *
        role2Multiplicity:RelationshipMultiplicity *
        role2Type:Type -> EdmRelationshipAttribute

参数

relationshipNamespaceName
类型： System String
此实体所参与的关联的命名空间名称。
relationshipName
类型： System String
此实体所参与的关系的名称。
role1Name
类型： System String
关联一端的类型的角色名称。
role1Multiplicity
类型： System.Data.Metadata.Edm RelationshipMultiplicity
RelationshipMultiplicity 的值，指示关联一端的重数，例如一重或多重。
role1Type
类型： System Type
关联一端的实体的类型。
role2Name
类型： System String
关联另一端的类型的角色名称。
role2Multiplicity
类型： System.Data.Metadata.Edm RelationshipMultiplicity
RelationshipMultiplicity 的值，指示关联另一端的重数，例如一重或多重。
role2Type
类型： System Type
关联另一端的实体的类型。

typeof 运算符（在 Visual Basic 中为 GetType）用于返回一个对象的 Type 对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
EdmRelationshipAttribute 重载
System.Data.Objects.DataClasses 命名空间

其他资源

Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipAttribute 构造函数 (String, String, String, RelationshipMultiplicity, Type, String, RelationshipMultiplicity, Type, Boolean)

EdmRelationshipAttribute 构造函数 (String, String, String, RelationshipMultiplicity, Type, String, RelationshipMultiplicity, Type, Boolean)
EdmRelationshipAttribute 类

初始化 EdmRelationshipAttribute 类的新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    relationshipNamespaceName As String, _
    relationshipName As String, _
    role1Name As String, _
    role1Multiplicity As RelationshipMultiplicity, _
    role1Type As Type, _
    role2Name As String, _
    role2Multiplicity As RelationshipMultiplicity, _
    role2Type As Type, _
    isForeignKey As Boolean _
)
public EdmRelationshipAttribute(
    string relationshipNamespaceName,
    string relationshipName,
    string role1Name,
    RelationshipMultiplicity role1Multiplicity,
    Type role1Type,
    string role2Name,
    RelationshipMultiplicity role2Multiplicity,
    Type role2Type,
    bool isForeignKey
)
public:
EdmRelationshipAttribute(
    String^ relationshipNamespaceName,
    String^ relationshipName,
    String^ role1Name,
    RelationshipMultiplicity role1Multiplicity,
    Type^ role1Type,
    String^ role2Name,
    RelationshipMultiplicity role2Multiplicity,
    Type^ role2Type,
    bool isForeignKey
)
new :
        relationshipNamespaceName:string *
        relationshipName:string *
        role1Name:string *
        role1Multiplicity:RelationshipMultiplicity *
        role1Type:Type *
        role2Name:string *
        role2Multiplicity:RelationshipMultiplicity *
        role2Type:Type *
        isForeignKey:bool -> EdmRelationshipAttribute

参数

relationshipNamespaceName
类型： System String
此实体所参与的关联的命名空间名称。
relationshipName
类型： System String
此实体所参与的关系的名称。
role1Name
类型： System String
关联一端的类型的角色名称。
role1Multiplicity
类型： System.Data.Metadata.Edm RelationshipMultiplicity
RelationshipMultiplicity 的值，指示关联一端的重数，例如一重或多重。
role1Type
类型： System Type
关联一端的实体的类型。
role2Name
类型： System String
关联另一端的类型的角色名称。
role2Multiplicity
类型： System.Data.Metadata.Edm RelationshipMultiplicity
RelationshipMultiplicity 的值，指示关联另一端的重数，例如一重或多重。
role2Type
类型： System Type
关联另一端的实体的类型。
isForeignKey
类型： System Boolean
一个指示关系是否基于外键值的值。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
EdmRelationshipAttribute 重载
System.Data.Objects.DataClasses 命名空间


EdmRelationshipAttribute 方法

EdmRelationshipAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmRelationshipAttribute 类

EdmRelationshipAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmRelationshipAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmRelationshipAttribute 属性

EdmRelationshipAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmRelationshipAttribute 类

EdmRelationshipAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmRelationshipAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmRelationshipAttribute ..::.IsForeignKey 属性

EdmRelationshipAttribute
.
.
::
.
IsForeignKey 属性
EdmRelationshipAttribute 类

获取一个布尔值，该值指示关系是否基于外键值。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property IsForeignKey As Boolean
    Get
public bool IsForeignKey { get; }
public:
property bool IsForeignKey {
    bool get ();
}
member IsForeignKey : bool

属性值

类型： System Boolean
如果关系基于外键值，则为 true；否则为 false。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmRelationshipAttribute ..::.RelationshipName 属性

EdmRelationshipAttribute
.
.
::
.
RelationshipName 属性
EdmRelationshipAttribute 类

关系的名称。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property RelationshipName As String
    Get
public string RelationshipName { get; }
public:
property String^ RelationshipName {
    String^ get ();
}
member RelationshipName : string

属性值

类型： System String
一个 String，表示此 EdmRelationshipAttribute 定义的关系的名称。

此关系的名称由定义概念模型中此关系的 Association 元素的 Name 特性指定。有关更多信息，请参见Association (EDM)。 此关系的名称由定义概念模型中此关系的 Association 元素的 Name 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Entity Data Model Relationships
Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipAttribute ..::.RelationshipNamespaceName 属性

EdmRelationshipAttribute
.
.
::
.
RelationshipNamespaceName 属性
EdmRelationshipAttribute 类

关系的命名空间。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property RelationshipNamespaceName As String
    Get
public string RelationshipNamespaceName { get; }
public:
property String^ RelationshipNamespaceName {
    String^ get ();
}
member RelationshipNamespaceName : string

属性值

类型： System String
一个 String，表示关系的命名空间。

关系的名称空间由包含在概念模型中定义此关系的关联的 Schema 元素的 Namespace 特性指定。有关更多信息，请参见Association (EDM)。 关系的名称空间由包含在概念模型中定义此关系的关联的 Schema 元素的 Namespace 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Entity Data Model Relationships
Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipAttribute ..::.Role1Multiplicity 属性

EdmRelationshipAttribute
.
.
::
.
Role1Multiplicity 属性
EdmRelationshipAttribute 类

关系一端的重数。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Role1Multiplicity As RelationshipMultiplicity
    Get
public RelationshipMultiplicity Role1Multiplicity { get; }
public:
property RelationshipMultiplicity Role1Multiplicity {
    RelationshipMultiplicity get ();
}
member Role1Multiplicity : RelationshipMultiplicity

属性值

类型： System.Data.Metadata.Edm RelationshipMultiplicity
指示重数的 RelationshipMultiplicity 值。

可以按任何顺序来定义用于定义关联的相关端的属性。

重数由在概念模型中定义此关系的关联中另一 End 元素的 Multiplicity 特性指定。有关更多信息，请参见Association (EDM)。 重数由在概念模型中定义此关系的关联中另一 End 元素的 Multiplicity 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Entity Data Model Relationships
Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipAttribute ..::.Role1Name 属性

EdmRelationshipAttribute
.
.
::
.
Role1Name 属性
EdmRelationshipAttribute 类

关系一端的角色的名称。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Role1Name As String
    Get
public string Role1Name { get; }
public:
property String^ Role1Name {
    String^ get ();
}
member Role1Name : string

属性值

类型： System String
表示角色名称的 String。

角色名称由在概念模型中定义此关系的关联中的 End 元素的 Role 特性指定。有关更多信息，请参见Association (EDM)。 角色名称由在概念模型中定义此关系的关联中的 End 元素的 Role 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipAttribute ..::.Role1Type 属性

EdmRelationshipAttribute
.
.
::
.
Role1Type 属性
EdmRelationshipAttribute 类

关系一端的实体的类型。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Role1Type As Type
    Get
public Type Role1Type { get; }
public:
property Type^ Role1Type {
    Type^ get ();
}
member Role1Type : Type

属性值

类型： System Type
表示此关联端的对象类型的 Type。

可以按任何顺序来定义用于定义关联的相关端的属性。

类型名称由在概念模型中定义此关系的关联中的 End 元素的 Type 特性指定。有关更多信息，请参见Association (EDM)。 类型名称由在概念模型中定义此关系的关联中的 End 元素的 Type 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Entity Data Model Relationships
Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipAttribute ..::.Role2Multiplicity 属性

EdmRelationshipAttribute
.
.
::
.
Role2Multiplicity 属性
EdmRelationshipAttribute 类

关系另一端的重数。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Role2Multiplicity As RelationshipMultiplicity
    Get
public RelationshipMultiplicity Role2Multiplicity { get; }
public:
property RelationshipMultiplicity Role2Multiplicity {
    RelationshipMultiplicity get ();
}
member Role2Multiplicity : RelationshipMultiplicity

属性值

类型： System.Data.Metadata.Edm RelationshipMultiplicity
指示重数的 RelationshipMultiplicity 值。

可以按任何顺序来定义用于定义关联的相关端的属性。

重数由在概念模型中定义此关系的关联中另一 End 元素的 Multiplicity 特性指定。有关更多信息，请参见Association (EDM)。 重数由在概念模型中定义此关系的关联中另一 End 元素的 Multiplicity 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Entity Data Model Relationships
Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipAttribute ..::.Role2Name 属性

EdmRelationshipAttribute
.
.
::
.
Role2Name 属性
EdmRelationshipAttribute 类

关系另一端的角色的名称。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Role2Name As String
    Get
public string Role2Name { get; }
public:
property String^ Role2Name {
    String^ get ();
}
member Role2Name : string

属性值

类型： System String
表示角色名称的 String。

可以按任何顺序来定义用于定义关联的相关端的属性。

角色名称由在概念模型中定义此关系的关联中的 End 元素的 Role 特性指定。有关更多信息，请参见Association (EDM)。 角色名称由在概念模型中定义此关系的关联中的 End 元素的 Role 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Entity Data Model Relationships
Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipAttribute ..::.Role2Type 属性

EdmRelationshipAttribute
.
.
::
.
Role2Type 属性
EdmRelationshipAttribute 类

关系另一端的实体的类型。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property Role2Type As Type
    Get
public Type Role2Type { get; }
public:
property Type^ Role2Type {
    Type^ get ();
}
member Role2Type : Type

属性值

类型： System Type
表示另一关联端的对象类型的 Type。

可以按任何顺序来定义用于定义关联的相关端的属性。

类型名称由在概念模型中定义此关系的关联中的 End 元素的 Type 特性指定。有关更多信息，请参见Association (EDM)。 类型名称由在概念模型中定义此关系的关联中的 End 元素的 Type 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipAttribute 类
EdmRelationshipAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Entity Data Model Relationships
Object-Entity Mapping Attributes (Entity Framework)


EdmRelationshipNavigationPropertyAttribute 类

EdmRelationshipNavigationPropertyAttribute 类
成员

一个特性，指示属性表示导航属性。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<AttributeUsageAttribute(AttributeTargets.Property)> _
Public NotInheritable Class EdmRelationshipNavigationPropertyAttribute _
    Inherits EdmPropertyAttribute
[AttributeUsageAttribute(AttributeTargets.Property)]
public sealed class EdmRelationshipNavigationPropertyAttribute : EdmPropertyAttribute
[AttributeUsageAttribute(AttributeTargets::Property)]
public ref class EdmRelationshipNavigationPropertyAttribute sealed : public EdmPropertyAttribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Property)>]
type EdmRelationshipNavigationPropertyAttribute =
    class
        inherit EdmPropertyAttribute
    end

EdmRelationshipNavigationPropertyAttribute 将类的导航属性链接到概念性模型中定义的实体类型的导航属性。

此特性于下列类型的导航属性：

  • 返回相关对象的 EntityCollection<(Of <(TEntity>)>) 的属性。

  • 返回相关对象的 EntityReference<(Of <(TEntity>)>) 值的属性，如下面 SalesOrderDetail 类型的示例中所示。

将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。 将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmRelationshipNavigationPropertyAttributeEdmRelationshipNavigationPropertyAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipNavigationPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Customizing Objects (Entity Framework)
How to: Map Custom Objects to Entities (Entity Framework)
Navigation Properties (EDM)


EdmRelationshipNavigationPropertyAttribute 成员

EdmRelationshipNavigationPropertyAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmRelationshipNavigationPropertyAttribute 类

一个特性，指示属性表示导航属性。

EdmRelationshipNavigationPropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmRelationshipNavigationPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmRelationshipNavigationPropertyAttribute 构造函数

EdmRelationshipNavigationPropertyAttribute 构造函数
EdmRelationshipNavigationPropertyAttribute 类

初始化 EdmRelationshipNavigationPropertyAttribute 类的新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    relationshipNamespaceName As String, _
    relationshipName As String, _
    targetRoleName As String _
)
public EdmRelationshipNavigationPropertyAttribute(
    string relationshipNamespaceName,
    string relationshipName,
    string targetRoleName
)
public:
EdmRelationshipNavigationPropertyAttribute(
    String^ relationshipNamespaceName,
    String^ relationshipName,
    String^ targetRoleName
)
new :
        relationshipNamespaceName:string *
        relationshipName:string *
        targetRoleName:string -> EdmRelationshipNavigationPropertyAttribute

参数

relationshipNamespaceName
类型： System String
关系属性的命名空间名称。
relationshipName
类型： System String
关系的名称。此关系名称不由命名空间进行限定。 关系的名称。此关系名称不由命名空间进行限定。
targetRoleName
类型： System String
关系另一端的角色名称。

关系名称不应包含命名空间。如果将命名空间添加到关系名称，例如“MyNamespace.MyRelationship”，将发生错误。 关系名称不应包含命名空间。如果将命名空间添加到关系名称，例如“MyNamespace.MyRelationship”，将发生错误。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipNavigationPropertyAttribute 类
EdmRelationshipNavigationPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmRelationshipNavigationPropertyAttribute 方法

EdmRelationshipNavigationPropertyAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmRelationshipNavigationPropertyAttribute 类

EdmRelationshipNavigationPropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmRelationshipNavigationPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmRelationshipNavigationPropertyAttribute 属性

EdmRelationshipNavigationPropertyAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmRelationshipNavigationPropertyAttribute 类

EdmRelationshipNavigationPropertyAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmRelationshipNavigationPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmRelationshipNavigationPropertyAttribute ..::.RelationshipName 属性

EdmRelationshipNavigationPropertyAttribute
.
.
::
.
RelationshipName 属性
EdmRelationshipNavigationPropertyAttribute 类

获取非限定的关系名。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property RelationshipName As String
    Get
public string RelationshipName { get; }
public:
property String^ RelationshipName {
    String^ get ();
}
member RelationshipName : string

属性值

类型： System String
关系名。

此关系名称不由命名空间进行限定。

此关系的名称由定义概念模型中此关系的 Association 元素的 Name 特性指定。有关更多信息，请参见Association (EDM)。 此关系的名称由定义概念模型中此关系的 Association 元素的 Name 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipNavigationPropertyAttribute 类
EdmRelationshipNavigationPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmRelationshipNavigationPropertyAttribute ..::.RelationshipNamespaceName 属性

EdmRelationshipNavigationPropertyAttribute
.
.
::
.
RelationshipNamespaceName 属性
EdmRelationshipNavigationPropertyAttribute 类

导航属性的命名空间名称。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property RelationshipNamespaceName As String
    Get
public string RelationshipNamespaceName { get; }
public:
property String^ RelationshipNamespaceName {
    String^ get ();
}
member RelationshipNamespaceName : string

属性值

类型： System String
表示命名空间名称的 String。

关系的名称空间由包含在概念模型中定义此关系的关联的Schema 元素的 Namespace 特性指定。有关更多信息，请参见Association (EDM)。 关系的名称空间由包含在概念模型中定义此关系的关联的Schema 元素的 Namespace 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipNavigationPropertyAttribute 类
EdmRelationshipNavigationPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmRelationshipNavigationPropertyAttribute ..::.TargetRoleName 属性

EdmRelationshipNavigationPropertyAttribute
.
.
::
.
TargetRoleName 属性
EdmRelationshipNavigationPropertyAttribute 类

获取关系另一端处的角色名称。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public ReadOnly Property TargetRoleName As String
    Get
public string TargetRoleName { get; }
public:
property String^ TargetRoleName {
    String^ get ();
}
member TargetRoleName : string

属性值

类型： System String
目标角色名称由在概念模型中定义此关系的关联中另一 End 元素的 Role 特性指定。有关更多信息，请参见Association (EDM)。 目标角色名称由在概念模型中定义此关系的关联中另一 End 元素的 Role 特性指定。有关更多信息，请参见Association (EDM)。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmRelationshipNavigationPropertyAttribute 类
EdmRelationshipNavigationPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmScalarPropertyAttribute 类

EdmScalarPropertyAttribute 类
成员

一个特性，指示属性表示标量属性。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<AttributeUsageAttribute(AttributeTargets.Property)> _
Public NotInheritable Class EdmScalarPropertyAttribute _
    Inherits EdmPropertyAttribute
[AttributeUsageAttribute(AttributeTargets.Property)]
public sealed class EdmScalarPropertyAttribute : EdmPropertyAttribute
[AttributeUsageAttribute(AttributeTargets::Property)]
public ref class EdmScalarPropertyAttribute sealed : public EdmPropertyAttribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Property)>]
type EdmScalarPropertyAttribute =
    class
        inherit EdmPropertyAttribute
    end

IsNullable 和 EntityKeyProperty 属性不能同时为 true，因为键成员不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

EdmScalarPropertyAttribute 将数据类的标量属性链接到概念性模型中定义的实体类型或复杂类型的属性。

此特性应用于返回标量类型的属性。

将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。 将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmScalarPropertyAttributeEdmScalarPropertyAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmScalarPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Simple Types (EDM)


EdmScalarPropertyAttribute 成员

EdmScalarPropertyAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmScalarPropertyAttribute 类

一个特性，指示属性表示标量属性。

EdmScalarPropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmScalarPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmScalarPropertyAttribute 构造函数

EdmScalarPropertyAttribute 构造函数
EdmScalarPropertyAttribute 类

初始化 EdmScalarPropertyAttribute 类的新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EdmScalarPropertyAttribute()
public:
EdmScalarPropertyAttribute()
new : unit -> EdmScalarPropertyAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmScalarPropertyAttribute 类
EdmScalarPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmScalarPropertyAttribute 方法

EdmScalarPropertyAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmScalarPropertyAttribute 类

EdmScalarPropertyAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmScalarPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmScalarPropertyAttribute 属性

EdmScalarPropertyAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmScalarPropertyAttribute 类

EdmScalarPropertyAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmScalarPropertyAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmScalarPropertyAttribute ..::.EntityKeyProperty 属性

EdmScalarPropertyAttribute
.
.
::
.
EntityKeyProperty 属性
EdmScalarPropertyAttribute 类

获取或设置一个值，该值指示属性是否为实体键的一部分。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property EntityKeyProperty As Boolean
    Get
    Set
public bool EntityKeyProperty { get; set; }
public:
property bool EntityKeyProperty {
    bool get ();
    void set (bool value);
}
member EntityKeyProperty : bool with get, set

属性值

类型： System Boolean
一个值，该值指示属性是否为实体键的一部分。

由于实体键可包含多个属性，因此对于一个实体类型的多个属性，EntityKeyProperty 可设置为 true。

IsNullable 和 EntityKeyProperty 属性不能同时为 true ，因为键成员不能为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmScalarPropertyAttribute 类
EdmScalarPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmScalarPropertyAttribute ..::.IsNullable 属性

EdmScalarPropertyAttribute
.
.
::
.
IsNullable 属性
EdmScalarPropertyAttribute 类

获取或设置一个值，该值指示属性是否可以具有 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property IsNullable As Boolean
    Get
    Set
public bool IsNullable { get; set; }
public:
property bool IsNullable {
    bool get ();
    void set (bool value);
}
member IsNullable : bool with get, set

属性值

类型： System Boolean
一个值，该值指示属性是否可以具有 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 值。

IsNullable 和 EntityKeyProperty 属性不能同时为 true。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmScalarPropertyAttribute 类
EdmScalarPropertyAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmSchemaAttribute 类

EdmSchemaAttribute 类
成员

一个特性，指示程序集包含映射到概念模型中的实体类型的类。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<AttributeUsageAttribute(AttributeTargets.Assembly Or AttributeTargets.Class, AllowMultiple := True)> _
Public NotInheritable Class EdmSchemaAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class, AllowMultiple = true)]
public sealed class EdmSchemaAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Assembly|AttributeTargets::Class, AllowMultiple = true)]
public ref class EdmSchemaAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Assembly|AttributeTargets.Class, AllowMultiple = true)>]
type EdmSchemaAttribute =
    class
        inherit Attribute
    end

此特性应用于包含实体类型的程序集。仅要求应用一次，但可以应用多次。当对 Visual Basic 项目中的单个程序集应用多次时，必须使用 EdmSchemaAttribute 构造函数提供一个对该程序集引用的每个概念模型都唯一的 GUID 字符串值。 此特性应用于包含实体类型的程序集。仅要求应用一次，但可以应用多次。当对 Visual Basic 项目中的单个程序集应用多次时，必须使用 EdmSchemaAttribute 构造函数提供一个对该程序集引用的每个概念模型都唯一的 GUID 字符串值。 此特性应用于包含实体类型的程序集。仅要求应用一次，但可以应用多次。当对 Visual Basic 项目中的单个程序集应用多次时，必须使用 EdmSchemaAttribute 构造函数提供一个对该程序集引用的每个概念模型都唯一的 GUID 字符串值。

将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。 将自定义数据类与概念模型一起使用时，您必须手动应用特性。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)。

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmSchemaAttributeEdmSchemaAttribute
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmSchemaAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Customizing Objects (Entity Framework)
How to: Map Custom Objects to Entities (Entity Framework)


EdmSchemaAttribute 成员

EdmSchemaAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmSchemaAttribute 类

一个特性，指示程序集包含映射到概念模型中的实体类型的类。

EdmSchemaAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmSchemaAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmSchemaAttribute 构造函数

EdmSchemaAttribute 构造函数
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmSchemaAttribute 类

初始化 EdmSchemaAttribute 类的新实例。

名称 说明
页首

参考

EdmSchemaAttribute 类
EdmSchemaAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmSchemaAttribute 构造函数

EdmSchemaAttribute 构造函数
EdmSchemaAttribute 类

初始化 EdmSchemaAttribute 类的新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EdmSchemaAttribute()
public:
EdmSchemaAttribute()
new : unit -> EdmSchemaAttribute

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmSchemaAttribute 类
EdmSchemaAttribute 成员
EdmSchemaAttribute 重载
System.Data.Objects.DataClasses 命名空间


EdmSchemaAttribute 构造函数 (String)

EdmSchemaAttribute 构造函数 (String)
EdmSchemaAttribute 类

对于程序集引用的每个模型，使用一个唯一值初始化 EdmSchemaAttribute 类的一个新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New ( _
    assemblyGuid As String _
)
public EdmSchemaAttribute(
    string assemblyGuid
)
public:
EdmSchemaAttribute(
    String^ assemblyGuid
)
new :
        assemblyGuid:string -> EdmSchemaAttribute

参数

assemblyGuid
类型： System String
一个字符串，表示模型在程序集中的唯一 GUID 值。

使用此构造函数提供一个对同一程序集引用的每个概念模型都唯一的 GUID 字符串值。当对 Visual Basic 项目中的单个程序集多次应用 EdmSchemaAttribute 时采用此操作。 使用此构造函数提供一个对同一程序集引用的每个概念模型都唯一的 GUID 字符串值。当对 Visual Basic 项目中的单个程序集多次应用 EdmSchemaAttribute 时采用此操作。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmSchemaAttribute 类
EdmSchemaAttribute 成员
EdmSchemaAttribute 重载
System.Data.Objects.DataClasses 命名空间


EdmSchemaAttribute 方法

EdmSchemaAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmSchemaAttribute 类

EdmSchemaAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmSchemaAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmSchemaAttribute 属性

EdmSchemaAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmSchemaAttribute 类

EdmSchemaAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmSchemaAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmTypeAttribute 类

EdmTypeAttribute 类
成员

特性的基类，这些特性定义如何将对象层中的类型映射到概念模型中的实体类型和复杂类型。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public MustInherit Class EdmTypeAttribute _
    Inherits Attribute
public abstract class EdmTypeAttribute : Attribute
public ref class EdmTypeAttribute abstract : public Attribute
[<AbstractClassAttribute>]
type EdmTypeAttribute =
    class
        inherit Attribute
    end

EdmEntityTypeAttribute 和 EdmComplexTypeAttribute 派生自 EdmTypeAttribute。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework) EdmEntityTypeAttribute 和 EdmComplexTypeAttribute 派生自 EdmTypeAttribute。有关更多信息，请参见Object-Entity Mapping Attributes (Entity Framework)

System.Data.Objects.DataClasses System.Data.Objects.DataClasses..::.EdmTypeAttributeEdmTypeAttribute

此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmTypeAttribute 成员
System.Data.Objects.DataClasses 命名空间


EdmTypeAttribute 成员

EdmTypeAttribute 成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmTypeAttribute 类

特性的基类，这些特性定义如何将对象层中的类型映射到概念模型中的实体类型和复杂类型。

EdmTypeAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EdmTypeAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmTypeAttribute 方法

EdmTypeAttribute 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmTypeAttribute 类

EdmTypeAttribute 类型公开以下成员。

名称 说明
页首
名称 说明
页首

参考

EdmTypeAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmTypeAttribute 属性

EdmTypeAttribute 属性
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EdmTypeAttribute 类

EdmTypeAttribute 类型公开以下成员。

名称 说明
页首

参考

EdmTypeAttribute 类
System.Data.Objects.DataClasses 命名空间


EdmTypeAttribute ..::.Name 属性

EdmTypeAttribute
.
.
::
.
Name 属性
EdmTypeAttribute 类

概念架构中类型的名称，该类型映射到此特性所应用于的类。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property Name As String
    Get
    Set
public string Name { get; set; }
public:
property String^ Name {
    String^ get ();
    void set (String^ value);
}
member Name : string with get, set

属性值

类型： System String
表示名称的 String。

类型的名称必须对应于概念性架构中实体类型或复杂类型的名称。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmTypeAttribute 类
EdmTypeAttribute 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Object-Entity Mapping Attributes (Entity Framework)


EdmTypeAttribute ..::.NamespaceName 属性

EdmTypeAttribute
.
.
::
.
NamespaceName 属性
EdmTypeAttribute 类

概念架构中映射到此类型的实体对象类型或复杂类型的命名空间名称。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Property NamespaceName As String
    Get
    Set
public string NamespaceName { get; set; }
public:
property String^ NamespaceName {
    String^ get ();
    void set (String^ value);
}
member NamespaceName : string with get, set

属性值

类型： System String
表示命名空间名称的 String。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EdmTypeAttribute 类
EdmTypeAttribute 成员
System.Data.Objects.DataClasses 命名空间


EntityCollection <(Of <(TEntity >)>) 类

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
类
成员

表示关系“多”端的对象集合。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
<SerializableAttribute> _
Public NotInheritable Class EntityCollection(Of TEntity As Class) _
    Inherits RelatedEnd _
    Implements ICollection(Of TEntity), IEnumerable(Of TEntity),  _
    IEnumerable, IListSource
[SerializableAttribute]
public sealed class EntityCollection<TEntity> : RelatedEnd,
    ICollection<TEntity>, IEnumerable<TEntity>, IEnumerable, IListSource
where TEntity : class

[SerializableAttribute]
generic<typename TEntity>
where TEntity : ref class
public ref class EntityCollection sealed : public RelatedEnd,
    ICollection<TEntity>, IEnumerable<TEntity>, IEnumerable, IListSource
[<SealedAttribute>]
[<SerializableAttribute>]
type EntityCollection<'TEntity when 'TEntity : not struct> =
    class
        inherit RelatedEnd
        interface ICollection<'TEntity>
        interface IEnumerable<'TEntity>
        interface IEnumerable
        interface IListSource
    end

类型参数

TEntity

集合的实体类型。

EntityCollection<(Of <(TEntity>)>) 是特定实体类型的对象集合，该实体类型表示一对多或多对多关系的“多”端。

由导航属性返回一个 EntityCollection<(Of <(TEntity>)>)。使用 Load 方法可以将相关对象加载到 EntityCollection<(Of <(TEntity>)>) 中。要存储特定实体类型的对象的非相关集合，例如 ObjectQuery<(Of <(T>)>) 的结果，请使用 List<(Of <(T>)>) 类的实例。 由导航属性返回一个 EntityCollection<(Of <(TEntity>)>)。使用 Load 方法可以将相关对象加载到 EntityCollection<(Of <(TEntity>)>) 中。要存储特定实体类型的对象的非相关集合，例如 ObjectQuery<(Of <(T>)>) 的结果，请使用 List<(Of <(T>)>) 类的实例。 由导航属性返回一个 EntityCollection<(Of <(TEntity>)>)。使用 Load 方法可以将相关对象加载到 EntityCollection<(Of <(TEntity>)>) 中。要存储特定实体类型的对象的非相关集合，例如 ObjectQuery<(Of <(T>)>) 的结果，请使用 List<(Of <(T>)>) 类的实例。

EntityCollection<(Of <(TEntity>)>) 可能有对应的 EntityReference<(Of <(TEntity>)>)。当 EntityCollection<(Of <(TEntity>)>) 和 EntityReference<(Of <(TEntity>)>) 模型位于同一关系的相反端时，该关系的完整性维持在对象级别。这两个类自动进行同步。 EntityCollection<(Of <(TEntity>)>) 可能有对应的 EntityReference<(Of <(TEntity>)>)。当 EntityCollection<(Of <(TEntity>)>) 和 EntityReference<(Of <(TEntity>)>) 模型位于同一关系的相反端时，该关系的完整性维持在对象级别。这两个类自动进行同步。 EntityCollection<(Of <(TEntity>)>) 可能有对应的 EntityReference<(Of <(TEntity>)>)。当 EntityCollection<(Of <(TEntity>)>) 和 EntityReference<(Of <(TEntity>)>) 模型位于同一关系的相反端时，该关系的完整性维持在对象级别。这两个类自动进行同步。

此类不能继承。

此示例基于 Adventure Works 销售模型。若要运行此示例中的代码，必须已将 AdventureWorks 销售模型添加到您的项目中，并将项目配置为使用 Entity Framework。为此，请完成How to: Manually Configure an Entity Framework Project和How to: Manually Define an E*ntity Data Model (Entity Framework) 中的过程。 此示例基于 Adventure Works 销售模型。若要运行此示例中的代码，必须已将 AdventureWorks 销售模型添加到您的项目中，并将项目配置为使用 Entity Framework。为此，请完成How to: Manually Configure an Entity Framework Project和How to: Manually Define an E*ntity Data Model (Entity Framework) 中的过程。 此示例基于 Adventure Works 销售模型。若要运行此示例中的代码，必须已将 AdventureWorks 销售模型添加到您的项目中，并将项目配置为使用 Entity Framework。为此，请完成How to: Manually Configure an Entity Framework Project和How to: Manually Define an E*ntity Data Model (Entity Framework) 中的过程。

此示例将执行下列操作：

  1. 创建两个新的 SalesOrderHeader 实体并添加到 Contact 实体。

  2. 从与 Contact 实体关联的 RelationshipManager 中获取所有相关端。

  3. 循环访问 IRelatedEnd 集合。

  4. 获取每个相关端的 EntityCollection<(Of <(TEntity>)>)。

  5. 使用 Remove 方法从集合中移除其中一个实体。

  6. 调用 Contains 方法确定该对象是否已从集合中移除。

  7. 使用 Add 方法添加回实体。

Using context As New AdventureWorksEntities()
    Dim contact As New Contact()

    ' Create a new SalesOrderHeader.
    Dim newSalesOrder1 As New SalesOrderHeader()
    ' Add SalesOrderHeader to the Contact.
    contact.SalesOrderHeaders.Add(newSalesOrder1)

    ' Create another SalesOrderHeader.
    Dim newSalesOrder2 As New SalesOrderHeader()
    ' Add SalesOrderHeader to the Contact.
    contact.SalesOrderHeaders.Add(newSalesOrder2)

    ' Get all related ends
    Dim relEnds As IEnumerable(Of IRelatedEnd) = DirectCast(contact, IEntityWithRelationships).RelationshipManager.GetAllRelatedEnds()

    For Each relEnd As IRelatedEnd In relEnds
        ' Get Entity Collection from related end
        Dim entityCollection As EntityCollection(Of SalesOrderHeader) = DirectCast(relEnd, EntityCollection(Of SalesOrderHeader))

        Console.WriteLine("EntityCollection count: {0}", entityCollection.Count)
        ' Remove the first entity object.
        entityCollection.Remove(newSalesOrder1)

        Dim contains As Boolean = entityCollection.Contains(newSalesOrder1)

        ' Write the number of items after one entity has been removed
        Console.WriteLine("EntityCollection count after one entity has been removed: {0}", entityCollection.Count)

        If contains = False Then
            Console.WriteLine("The removed entity is not in in the collection any more.")
        End If

        'Use IRelatedEnd to add the entity back.
        relEnd.Add(newSalesOrder1)
        Console.WriteLine("EntityCollection count after an entity has been added again: {0}", entityCollection.Count)
    Next
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    Contact contact = new Contact();

    // Create a new SalesOrderHeader.
    SalesOrderHeader newSalesOrder1 = new SalesOrderHeader();
    // Add SalesOrderHeader to the Contact.
    contact.SalesOrderHeaders.Add(newSalesOrder1);

    // Create another SalesOrderHeader.
    SalesOrderHeader newSalesOrder2 = new SalesOrderHeader();
    // Add SalesOrderHeader to the Contact.
    contact.SalesOrderHeaders.Add(newSalesOrder2);

    // Get all related ends
    IEnumerable<IRelatedEnd> relEnds =
        ((IEntityWithRelationships)contact)
        .RelationshipManager.GetAllRelatedEnds();

    foreach (IRelatedEnd relEnd in relEnds)
    {
        // Get Entity Collection from related end
        EntityCollection<SalesOrderHeader> entityCollection =
            (EntityCollection<SalesOrderHeader>)relEnd;

        Console.WriteLine("EntityCollection count: {0}",
            entityCollection.Count);
        // Remove the first entity object.
        entityCollection.Remove(newSalesOrder1);

        bool contains = entityCollection.Contains(newSalesOrder1);

        // Write the number of items after one entity has been removed
        Console.WriteLine("EntityCollection count after one entity has been removed: {0}",
            entityCollection.Count);

        if (contains == false)
            Console.WriteLine("The removed entity is not in in the collection any more.");

        //Use IRelatedEnd to add the entity back.
        relEnd.Add(newSalesOrder1);
        Console.WriteLine("EntityCollection count after an entity has been added again: {0}",
            entityCollection.Count);
    }
}

System.Data.Objects.DataClasses
System.Data.Objects.DataClasses..::.EntityCollection<(Of <(TEntity>)>)EntityCollection
System.Data.Objects.DataClasses..::.EntityCollection<(Of <(TEntity>)>)TEntity
System.Data.Objects.DataClasses..::.EntityCollection<(Of <(TEntity>)>)
此类型的任何公共 static（在 Visual Basic 中为 Shared） 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCollection TEntity 成员
System.Data.Objects.DataClasses 命名空间

其他资源

How to: Explicitly Load Related Objects (Entity Framework)
How to: Change Relationships Between Objects (Entity Framework)
Shaping Query Results (Entity Framework)


EntityCollection <(Of <(TEntity >)>) 成员

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
成员
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCollection

表示关系“多”端的对象集合。

EntityCollection TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntityCollection TEntity 类
System.Data.Objects.DataClasses 命名空间


EntityCollection <(Of <(TEntity >)>) 构造函数

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
构造函数
EntityCollection

初始化 EntityCollection<(Of <(TEntity>)>) 类的新实例。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub New
public EntityCollection()
public:
EntityCollection()
new : unit -> EntityCollection

EntityCollection<(Of <(TEntity>)>) 的此公开构造函数旨在供对象服务在反序列化对象图时使用。应从导航属性而不是使用此构造函数访问 EntityCollection<(Of <(TEntity>)>) 的实例。 EntityCollection<(Of <(TEntity>)>) 的此公开构造函数旨在供对象服务在反序列化对象图时使用。应从导航属性而不是使用此构造函数访问 EntityCollection<(Of <(TEntity>)>) 的实例。

要存储特定实体类型的对象的非相关集合，例如 ObjectQuery<(Of <(T>)>) 的结果，请使用 List<(Of <(T>)>) 的实例。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCollection TEntity 类
EntityCollection TEntity 成员
System.Data.Objects.DataClasses 命名空间


EntityCollection <(Of <(TEntity >)>) 方法

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCollection

EntityCollection TEntity 类型公开以下成员。

名称 说明
页首
名称 说明
页首
名称 说明
页首

参考

EntityCollection TEntity 类
System.Data.Objects.DataClasses 命名空间


EntityCollection <(Of <(TEntity >)>) ..::.Add 方法

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Add 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCollection

将对象添加到相关端。

名称 说明
页首

参考

EntityCollection TEntity 类
EntityCollection TEntity 成员
System.Data.Objects.DataClasses 命名空间


EntityCollection <(Of <(TEntity >)>) ..::.Add 方法

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Add 方法
EntityCollection

将一个对象添加到集合中。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Add ( _
    entity As TEntity _
)
public void Add(
    TEntity entity
)
public:
virtual void Add(
    TEntity entity
) sealed
abstract Add :
        entity:'TEntity -> unit
override Add :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要添加到集合中的对象。entity 必须实现 IEntityWithRelationships。 要添加到集合中的对象。entity 必须实现 IEntityWithRelationships。

实现

异常 | 条件
ArgumentNullException | entity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。

Add 方法将对象添加到 EntityCollection<(Of <(TEntity>)>) 并创建两个对象之间的关系。当源对象附加到 ObjectContext 实例时，Add 方法也将对象添加到 ObjectContext。当调用 SaveChanges 时，此操作转换为插入到数据源中的操作。有关更多信息，请参见Adding, Modifying, and Deleting Objects (Entity Framework)。 Add 方法将对象添加到 EntityCollection<(Of <(TEntity>)>) 并创建两个对象之间的关系。当源对象附加到 ObjectContext 实例时，Add 方法也将对象添加到 ObjectContext。当调用 SaveChanges 时，此操作转换为插入到数据源中的操作。有关更多信息，请参见Adding, Modifying, and Deleting Objects (Entity Framework)。 Add 方法将对象添加到 EntityCollection<(Of <(TEntity>)>) 并创建两个对象之间的关系。当源对象附加到 ObjectContext 实例时，Add 方法也将对象添加到 ObjectContext。当调用 SaveChanges 时，此操作转换为插入到数据源中的操作。有关更多信息，请参见Adding, Modifying, and Deleting Objects (Entity Framework)。 Add 方法将对象添加到 EntityCollection<(Of <(TEntity>)>) 并创建两个对象之间的关系。当源对象附加到 ObjectContext 实例时，Add 方法也将对象添加到 ObjectContext。当调用 SaveChanges 时，此操作转换为插入到数据源中的操作。有关更多信息，请参见Adding, Modifying, and Deleting Objects (Entity Framework)。

可对同一对象实例多次调用 Add 方法。

此示例基于 Adventure Works 销售模型。若要运行此示例中的代码，必须已将 AdventureWorks 销售模型添加到您的项目中，并将项目配置为使用 Entity Framework。为此，请完成How to: Manually Configure an Entity Framework Project和How to: Manually Define an E*ntity Data Model (Entity Framework) 中的过程。 此示例基于 Adventure Works 销售模型。若要运行此示例中的代码，必须已将 AdventureWorks 销售模型添加到您的项目中，并将项目配置为使用 Entity Framework。为此，请完成How to: Manually Configure an Entity Framework Project和How to: Manually Define an E*ntity Data Model (Entity Framework) 中的过程。 此示例基于 Adventure Works 销售模型。若要运行此示例中的代码，必须已将 AdventureWorks 销售模型添加到您的项目中，并将项目配置为使用 Entity Framework。为此，请完成How to: Manually Configure an Entity Framework Project和How to: Manually Define an E*ntity Data Model (Entity Framework) 中的过程。

此示例创建两个新的 SalesOrderHeader 实体，将它们添加到 Contact 实体，然后在移除对象后，使用 Add 方法将该对象添加回集合。

Using context As New AdventureWorksEntities()
    Dim contact As New Contact()

    ' Create a new SalesOrderHeader.
    Dim newSalesOrder1 As New SalesOrderHeader()
    ' Add SalesOrderHeader to the Contact.
    contact.SalesOrderHeaders.Add(newSalesOrder1)

    ' Create another SalesOrderHeader.
    Dim newSalesOrder2 As New SalesOrderHeader()
    ' Add SalesOrderHeader to the Contact.
    contact.SalesOrderHeaders.Add(newSalesOrder2)

    ' Get all related ends
    Dim relEnds As IEnumerable(Of IRelatedEnd) = DirectCast(contact, IEntityWithRelationships).RelationshipManager.GetAllRelatedEnds()

    For Each relEnd As IRelatedEnd In relEnds
        ' Get Entity Collection from related end
        Dim entityCollection As EntityCollection(Of SalesOrderHeader) = DirectCast(relEnd, EntityCollection(Of SalesOrderHeader))

        Console.WriteLine("EntityCollection count: {0}", entityCollection.Count)
        ' Remove the first entity object.
        entityCollection.Remove(newSalesOrder1)

        Dim contains As Boolean = entityCollection.Contains(newSalesOrder1)

        ' Write the number of items after one entity has been removed
        Console.WriteLine("EntityCollection count after one entity has been removed: {0}", entityCollection.Count)

        If contains = False Then
            Console.WriteLine("The removed entity is not in in the collection any more.")
        End If

        'Use IRelatedEnd to add the entity back.
        relEnd.Add(newSalesOrder1)
        Console.WriteLine("EntityCollection count after an entity has been added again: {0}", entityCollection.Count)
    Next
End Using

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    Contact contact = new Contact();

    // Create a new SalesOrderHeader.
    SalesOrderHeader newSalesOrder1 = new SalesOrderHeader();
    // Add SalesOrderHeader to the Contact.
    contact.SalesOrderHeaders.Add(newSalesOrder1);

    // Create another SalesOrderHeader.
    SalesOrderHeader newSalesOrder2 = new SalesOrderHeader();
    // Add SalesOrderHeader to the Contact.
    contact.SalesOrderHeaders.Add(newSalesOrder2);

    // Get all related ends
    IEnumerable<IRelatedEnd> relEnds =
        ((IEntityWithRelationships)contact)
        .RelationshipManager.GetAllRelatedEnds();

    foreach (IRelatedEnd relEnd in relEnds)
    {
        // Get Entity Collection from related end
        EntityCollection<SalesOrderHeader> entityCollection =
            (EntityCollection<SalesOrderHeader>)relEnd;

        Console.WriteLine("EntityCollection count: {0}",
            entityCollection.Count);
        // Remove the first entity object.
        entityCollection.Remove(newSalesOrder1);

        bool contains = entityCollection.Contains(newSalesOrder1);

        // Write the number of items after one entity has been removed
        Console.WriteLine("EntityCollection count after one entity has been removed: {0}",
            entityCollection.Count);

        if (contains == false)
            Console.WriteLine("The removed entity is not in in the collection any more.");

        //Use IRelatedEnd to add the entity back.
        relEnd.Add(newSalesOrder1);
        Console.WriteLine("EntityCollection count after an entity has been added again: {0}",
            entityCollection.Count);
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCollection TEntity 类
EntityCollection TEntity 成员
System.Data.Objects.DataClasses 命名空间

其他资源

Attaching Objects (Entity Framework)


EntityCollection <(Of <(TEntity >)>) ..::.Attach 方法

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCollection

定义两个附加对象在对象上下文中的关系。

名称 说明
页首

参考

EntityCollection TEntity 类
EntityCollection TEntity 成员
System.Data.Objects.DataClasses 命名空间


EntityCollection <(Of <(TEntity >)>) ..::.Attach 方法 (TEntity)

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法 (TEntity)
EntityCollection

定义两个附加对象在对象上下文中的关系。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Attach ( _
    entity As TEntity _
)
public void Attach(
    TEntity entity
)
public:
void Attach(
    TEntity entity
)
member Attach :
        entity:'TEntity -> unit

参数

entity
类型： TEntity
要附加的对象。
异常 | 条件
ArgumentNullException | 在 entity 为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 时。
InvalidOperationException | 当 entity 无法与源对象关联时。这会在概念性架构中的关联不支持两种类型间的关系时发生。 当 entity 无法与源对象关联时。这会在概念性架构中的关联不支持两种类型间的关系时发生。 - 或 - 当任一对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者不处于 Unchanged 或 Modified 状态时。

Attach 方法用于定义当两个对象已经存在于对象上下文中时两者之间的关系。要附加已经定义了关系的对象或对象图，请对 ObjectContext 调用 Attach 方法。要创建与源对象关联的新对象，请对 EntityCollection<(Of <(TEntity>)>) 调用 Add 方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 Attach 方法用于定义当两个对象已经存在于对象上下文中时两者之间的关系。要附加已经定义了关系的对象或对象图，请对 ObjectContext 调用 Attach 方法。要创建与源对象关联的新对象，请对 EntityCollection<(Of <(TEntity>)>) 调用 Add 方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 Attach 方法用于定义当两个对象已经存在于对象上下文中时两者之间的关系。要附加已经定义了关系的对象或对象图，请对 ObjectContext 调用 Attach 方法。要创建与源对象关联的新对象，请对 EntityCollection<(Of <(TEntity>)>) 调用 Add 方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 Attach 方法用于定义当两个对象已经存在于对象上下文中时两者之间的关系。要附加已经定义了关系的对象或对象图，请对 ObjectContext 调用 Attach 方法。要创建与源对象关联的新对象，请对 EntityCollection<(Of <(TEntity>)>) 调用 Add 方法。有关更多信息，请参见Attaching Objects (Entity Framework)。

如果 EntityCollection<(Of <(TEntity>)>) 已经加载对象，Attach 方法将把该对象与 EntityCollection<(Of <(TEntity>)>) 中的现有对象合并。

不假定附加的对象为相关实体对象的完整集。

与此 EntityCollection<(Of <(TEntity>)>) 关联的对象以及附加到它的所有对象必须处于 Unchanged 或 Modified 状态。

处于 Deleted 状态的对象只能在 ObjectStateManager 已经跟踪关系实例时附加。

此示例基于 Adventure Works 销售模型。若要运行此示例中的代码，必须已将 AdventureWorks 销售模型添加到您的项目中，并将项目配置为使用 Entity Framework。为此，请完成How to: Manually Configure an Entity Framework Project和How to: Manually Define an E*ntity Data Model (Entity Framework) 中的过程。 此示例基于 Adventure Works 销售模型。若要运行此示例中的代码，必须已将 AdventureWorks 销售模型添加到您的项目中，并将项目配置为使用 Entity Framework。为此，请完成How to: Manually Configure an Entity Framework Project和How to: Manually Define an E*ntity Data Model (Entity Framework) 中的过程。 此示例基于 Adventure Works 销售模型。若要运行此示例中的代码，必须已将 AdventureWorks 销售模型添加到您的项目中，并将项目配置为使用 Entity Framework。为此，请完成How to: Manually Configure an Entity Framework Project和How to: Manually Define an E*ntity Data Model (Entity Framework) 中的过程。

本示例将已分离的 SalesOrderDetail 对象的集合与已分离的 SalesOrderHeader 对象附加到对象上下文，然后定义 SalesOrderHeader 对象与每个 SalesOrderDetail 对象之间的关系。

Private Shared Sub AttachRelatedObjects(ByVal currentContext As ObjectContext, ByVal detachedOrder As SalesOrderHeader, ByVal detachedItems As List(Of SalesOrderDetail))
    Try
        ' Attach the root detachedOrder object to the supplied context.
        currentContext.Attach(detachedOrder)

        ' Attach each detachedItem to the context, and define each relationship
        ' by attaching the attached SalesOrderDetail object to the EntityCollection on
        ' the SalesOrderDetail navigation property of the now attached detachedOrder.
        For Each item As SalesOrderDetail In detachedItems
            currentContext.Attach(item)
            detachedOrder.SalesOrderDetails.Attach(item)
        Next
    Catch ex As InvalidOperationException
        Console.WriteLine((ex.GetType().ToString() & ": ") + ex.ToString())
    End Try
End Sub

private static void AttachRelatedObjects(
    ObjectContext currentContext,
    SalesOrderHeader detachedOrder,
    List<SalesOrderDetail> detachedItems)
{
    try
    {
        // Attach the root detachedOrder object to the supplied context.
        currentContext.Attach(detachedOrder);

        // Attach each detachedItem to the context, and define each relationship
        // by attaching the attached SalesOrderDetail object to the EntityCollection on
        // the SalesOrderDetail navigation property of the now attached detachedOrder.
        foreach (SalesOrderDetail item in detachedItems)
        {
            currentContext.Attach(item);
            detachedOrder.SalesOrderDetails.Attach(item);
        }
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.GetType().ToString() + ": " + ex.ToString());
    }
}

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCollection TEntity 类
EntityCollection TEntity 成员
Attach 重载
System.Data.Objects.DataClasses 命名空间


EntityCollection <(Of <(TEntity >)>) ..::.Attach 方法 (IEnumerable <(Of <(TEntity >)>))

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法 (IEnumerable
<
(Of
<
(
TEntity
>
)
>
)
)
EntityCollection

定义对象和相关对象集合在对象上下文中的关系。

命名空间： System.Data.Objects.DataClasses
程序集： System.Data.Entity（在 System.Data.Entity.dll 中）
Public Sub Attach ( _
    entities As IEnumerable(Of TEntity) _
)
public void Attach(
    IEnumerable<TEntity> entities
)
public:
void Attach(
    IEnumerable<TEntity>^ entities
)
member Attach :
        entities:IEnumerable<'TEntity> -> unit

参数

entities
类型： System.Collections.Generic IEnumerable
<
(Of
<
(
TEntity
>
)
>
)

对象上下文中与源对象相关的对象的集合。
异常 | 条件
ArgumentNullException | entities 集合为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing）。
InvalidOperationException | 源对象或 entities 集合中的对象为 nullNothingnullptrnull 引用（在 Visual Basic 中为 Nothing） 或者不处于 Unchanged 或 Modified 状态。 - 或 - 关系不能基于 EDM 元数据定义。这会在概念性架构中的关联不支持两种类型间的关系时发生。 关系不能基于 EDM 元数据定义。这会在概念性架构中的关联不支持两种类型间的关系时发生。

Attach 方法用于定义当源对象和相关对象集合已经存在于对象上下文中时两者之间的关系.要附加已经定义了关系的对象或对象图，请对 ObjectContext 调用 Attach 方法。要创建与源对象关联的新对象，请对 EntityCollection<(Of <(TEntity>)>) 调用 Add 方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 Attach 方法用于定义当源对象和相关对象集合已经存在于对象上下文中时两者之间的关系.要附加已经定义了关系的对象或对象图，请对 ObjectContext 调用 Attach 方法。要创建与源对象关联的新对象，请对 EntityCollection<(Of <(TEntity>)>) 调用 Add 方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 Attach 方法用于定义当源对象和相关对象集合已经存在于对象上下文中时两者之间的关系.要附加已经定义了关系的对象或对象图，请对 ObjectContext 调用 Attach 方法。要创建与源对象关联的新对象，请对 EntityCollection<(Of <(TEntity>)>) 调用 Add 方法。有关更多信息，请参见Attaching Objects (Entity Framework)。 Attach 方法用于定义当源对象和相关对象集合已经存在于对象上下文中时两者之间的关系.要附加已经定义了关系的对象或对象图，请对 ObjectContext 调用 Attach 方法。要创建与源对象关联的新对象，请对 EntityCollection<(Of <(TEntity>)>) 调用 Add 方法。有关更多信息，请参见Attaching Objects (Entity Framework)。

如果集合已填充或已部分填充，则 Attach()()() 方法会将现有的实体与给定的实体合并。给定实体不被认为是相关实体的完整集。 如果集合已填充或已部分填充，则 Attach()()() 方法会将现有的实体与给定的实体合并。给定实体不被认为是相关实体的完整集。

所有传递的实体必须处于 Unchanged 或 Modified 状态。仅当状态管理器正在跟踪关系实例时，允许 Deleted 状态的对象。 所有传递的实体必须处于 Unchanged 或 Modified 状态。仅当状态管理器正在跟踪关系实例时，允许 Deleted 状态的对象。

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008, Windows Server 2003

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表，请参见 .NET Framework 系统要求。

.NET Framework

受以下版本支持：4、3.5 SP1

.NET Framework Client Profile

受以下版本支持：4

参考

EntityCollection TEntity 类
EntityCollection TEntity 成员
Attach 重载
System.Data.Objects.DataClasses 命名空间

其他资源

How to: Attach Related Objects (Entity Framework)


EntityCollection <(Of <(TEntity >)>) ..::.Attach 方法

EntityCollection
<
(Of
<
(
TEntity
>
)
>
)
.
.
::
.
Attach 方法
包括受保护的成员
包括继承的成员
包括 .NET Framework 成员
包括 XNA Framework 成员
EntityCollection

在相关端处附加对象。

名称 说明
页首

参考

EntityCollection TEntity 类
EntityCollection TEntity 成员
System.Data.Objects.DataClasses 命名空间